[med-svn] [gwyddion] 01/04: New upstream version 2.49
Andreas Tille
tille at debian.org
Thu Sep 21 09:04:30 UTC 2017
This is an automated email from the git hooks/post-receive script.
tille pushed a commit to branch master
in repository gwyddion.
commit 603ecfc4616f38e5bc8cfb81050b23d8898c875c
Author: Andreas Tille <tille at debian.org>
Date: Thu Sep 21 11:02:50 2017 +0200
New upstream version 2.49
---
AUTHORS | 4 +
INSTALL.gwyddion | 165 -
Makefile.am | 3 +-
Makefile.in | 27 +-
NEWS | 219 +-
README | 1 -
TODO | 1 +
app/Makefile.am | 42 +-
app/Makefile.in | 59 +-
app/about.c | 75 +-
app/app.c | 458 +-
app/authors.h | 95 +-
app/data-browser-aux.c | 296 +-
app/data-browser.c | 194 +-
app/data-browser.h | 9 +-
app/file.c | 11 +-
app/gwyappfilechooser.c | 39 +-
app/gwyappinternal.h | 5 +-
app/gwyddion.c | 114 +-
app/gwymoduleutils-file.c | 38 +-
app/help.c | 116 +-
app/mac_integration.c | 3 +-
app/menu.c | 11 +-
app/release.h | 3 +
app/remote-win32.c | 5 +-
app/splash.c | 849 +-
app/toolbox-editor.c | 116 +-
app/toolbox.c | 147 +-
app/toolbox.xml | 5 +-
app/undo.c | 5 +-
app/validate.c | 44 +-
app/wait.c | 95 +-
app/wait.h | 24 +-
config.guess | 165 +-
config.h.in | 3 -
config.sub | 52 +-
configure | 1262 +-
configure.ac | 316 +-
data/Makefile.in | 16 +-
data/glmaterials/Makefile.in | 16 +-
data/gradients/Code-V | 28 +-
data/gradients/Gray-inverted | 3 +
data/gradients/Makefile.am | 5 +-
data/gradients/Makefile.in | 21 +-
data/gradients/Spectral-white | 13 +
data/gradients/Viridis | 14 +
data/gwyddion-thumbnailer.schemas.in | 6 +
data/gwyddion.1 | 41 +-
data/gwyddion.nsit.in | 20 +-
data/gwyddion.pc.in | 2 +-
data/gwyddion.spec.in | 126 +-
data/gwyddion.vim | 16 +-
data/gwyddion.xml | 17 +
data/mingw-gwyddion-libs.spec.in | 7 +-
devel-docs/Makefile.in | 16 +-
devel-docs/libgwyapp/Makefile.in | 16 +-
devel-docs/libgwyapp/html/GwyDataChooser.html | 32 +-
devel-docs/libgwyapp/html/GwyPlainTool.html | 32 +-
devel-docs/libgwyapp/html/GwyResourceEditor.html | 18 +-
devel-docs/libgwyapp/html/GwyTool.html | 30 +-
devel-docs/libgwyapp/html/api-index-2-14.html | 2 +-
devel-docs/libgwyapp/html/api-index-2-18.html | 2 +-
devel-docs/libgwyapp/html/api-index-2-21.html | 2 +-
devel-docs/libgwyapp/html/api-index-2-23.html | 2 +-
devel-docs/libgwyapp/html/api-index-2-3.html | 2 +-
devel-docs/libgwyapp/html/api-index-2-32.html | 2 +-
devel-docs/libgwyapp/html/api-index-2-33.html | 2 +-
devel-docs/libgwyapp/html/api-index-2-35.html | 2 +-
devel-docs/libgwyapp/html/api-index-2-38.html | 2 +-
devel-docs/libgwyapp/html/api-index-2-41.html | 2 +-
devel-docs/libgwyapp/html/api-index-2-42.html | 2 +-
devel-docs/libgwyapp/html/api-index-2-43.html | 2 +-
devel-docs/libgwyapp/html/api-index-2-45.html | 2 +-
devel-docs/libgwyapp/html/api-index-2-46.html | 2 +-
devel-docs/libgwyapp/html/api-index-2-47.html | 5 +-
devel-docs/libgwyapp/html/api-index-2-48.html | 42 +
devel-docs/libgwyapp/html/api-index-2-49.html | 33 +
devel-docs/libgwyapp/html/api-index-2-7.html | 2 +-
devel-docs/libgwyapp/html/api-index-2-9.html | 2 +-
devel-docs/libgwyapp/html/api-index-all.html | 18 +-
devel-docs/libgwyapp/html/index.html | 6 +-
.../html/libgwyapp-GwyGLMaterialEditor.html | 4 +-
.../html/libgwyapp-GwyGradientEditor.html | 4 +-
devel-docs/libgwyapp/html/libgwyapp-Validate.html | 18 +-
devel-docs/libgwyapp/html/libgwyapp-app.html | 16 +-
.../libgwyapp/html/libgwyapp-data-browser.html | 274 +-
.../html/libgwyapp-file-module-utils.html | 73 +-
devel-docs/libgwyapp/html/libgwyapp-file.html | 12 +-
devel-docs/libgwyapp/html/libgwyapp-filelist.html | 12 +-
devel-docs/libgwyapp/html/libgwyapp-funcuse.html | 18 +-
devel-docs/libgwyapp/html/libgwyapp-help.html | 26 +-
devel-docs/libgwyapp/html/libgwyapp-log.html | 24 +-
devel-docs/libgwyapp/html/libgwyapp-logging.html | 10 +-
devel-docs/libgwyapp/html/libgwyapp-menu.html | 38 +-
devel-docs/libgwyapp/html/libgwyapp-meta.html | 10 +-
.../libgwyapp/html/libgwyapp-module-utils.html | 32 +-
devel-docs/libgwyapp/html/libgwyapp-settings.html | 16 +-
devel-docs/libgwyapp/html/libgwyapp-undo.html | 42 +-
devel-docs/libgwyapp/html/libgwyapp-wait.html | 106 +-
devel-docs/libgwyapp/html/libgwyapp.devhelp2 | 6 +
devel-docs/libgwyapp/libgwyapp-docs.sgml | 42 +-
devel-docs/libgwyddion/Makefile.in | 16 +-
devel-docs/libgwyddion/html/GwyContainer.html | 209 +-
devel-docs/libgwyddion/html/GwyEnum.html | 20 +-
devel-docs/libgwyddion/html/GwyFDCurvePreset.html | 6 +-
devel-docs/libgwyddion/html/GwyInventory.html | 72 +-
devel-docs/libgwyddion/html/GwyNLFitPreset.html | 26 +-
devel-docs/libgwyddion/html/GwyResource.html | 48 +-
devel-docs/libgwyddion/html/GwySIUnit.html | 100 +-
devel-docs/libgwyddion/html/GwySerializable.html | 40 +-
devel-docs/libgwyddion/html/GwyStringList.html | 22 +-
devel-docs/libgwyddion/html/api-index-2-1.html | 2 +-
devel-docs/libgwyddion/html/api-index-2-11.html | 2 +-
devel-docs/libgwyddion/html/api-index-2-12.html | 2 +-
devel-docs/libgwyddion/html/api-index-2-22.html | 2 +-
devel-docs/libgwyddion/html/api-index-2-25.html | 2 +-
devel-docs/libgwyddion/html/api-index-2-26.html | 2 +-
devel-docs/libgwyddion/html/api-index-2-35.html | 2 +-
devel-docs/libgwyddion/html/api-index-2-36.html | 2 +-
devel-docs/libgwyddion/html/api-index-2-37.html | 2 +-
devel-docs/libgwyddion/html/api-index-2-38.html | 2 +-
devel-docs/libgwyddion/html/api-index-2-39.html | 2 +-
devel-docs/libgwyddion/html/api-index-2-4.html | 2 +-
devel-docs/libgwyddion/html/api-index-2-42.html | 2 +-
devel-docs/libgwyddion/html/api-index-2-43.html | 2 +-
devel-docs/libgwyddion/html/api-index-2-44.html | 2 +-
devel-docs/libgwyddion/html/api-index-2-45.html | 2 +-
devel-docs/libgwyddion/html/api-index-2-46.html | 2 +-
devel-docs/libgwyddion/html/api-index-2-47.html | 5 +-
devel-docs/libgwyddion/html/api-index-2-48.html | 38 +
devel-docs/libgwyddion/html/api-index-2-49.html | 49 +
devel-docs/libgwyddion/html/api-index-2-5.html | 2 +-
devel-docs/libgwyddion/html/api-index-2-7.html | 2 +-
devel-docs/libgwyddion/html/api-index-2-8.html | 2 +-
devel-docs/libgwyddion/html/api-index-2-9.html | 2 +-
devel-docs/libgwyddion/html/api-index-all.html | 30 +-
devel-docs/libgwyddion/html/api-index-deprec.html | 2 +-
devel-docs/libgwyddion/html/index.html | 6 +-
.../libgwyddion/html/libgwyddion-GwyExpr.html | 28 +-
.../libgwyddion/html/libgwyddion-GwyNLFitter.html | 69 +-
.../html/libgwyddion-GwyRandGenSet.html | 32 +-
.../html/libgwyddion-GwySIValueFormat.html | 14 +-
.../html/libgwyddion-Math-Fallback.html | 22 +-
devel-docs/libgwyddion/html/libgwyddion-Math.html | 354 +-
.../libgwyddion/html/libgwyddion-gwyddion.html | 4 +-
.../html/libgwyddion-gwyddionenums.html | 8 +-
.../html/libgwyddion-gwydebugobjects.html | 16 +-
.../libgwyddion/html/libgwyddion-gwyentities.html | 12 +-
.../libgwyddion/html/libgwyddion-gwymacros.html | 36 +-
.../libgwyddion/html/libgwyddion-gwymd5.html | 6 +-
.../libgwyddion/html/libgwyddion-gwyutils.html | 206 +-
.../libgwyddion/html/libgwyddion-gwyversion.html | 10 +-
devel-docs/libgwyddion/html/libgwyddion.devhelp2 | 9 +
devel-docs/libgwyddion/libgwyddion-docs.sgml | 54 +-
devel-docs/libgwydgets/Makefile.in | 16 +-
devel-docs/libgwydgets/html/DataWindowWidgets.html | 2 +-
devel-docs/libgwydgets/html/GeneralWidgets.html | 9 +-
devel-docs/libgwydgets/html/GraphWidgets.html | 2 +-
devel-docs/libgwydgets/html/Gwy3DLabel.html | 22 +-
devel-docs/libgwydgets/html/Gwy3DSetup.html | 60 +-
devel-docs/libgwydgets/html/Gwy3DView.html | 54 +-
devel-docs/libgwydgets/html/Gwy3DWindow.html | 18 +-
devel-docs/libgwydgets/html/GwyAdjustBar.html | 815 +
devel-docs/libgwydgets/html/GwyAxis.html | 48 +-
devel-docs/libgwydgets/html/GwyColorAxis.html | 36 +-
devel-docs/libgwydgets/html/GwyColorButton.html | 22 +-
devel-docs/libgwydgets/html/GwyCurve.html | 12 +-
devel-docs/libgwydgets/html/GwyDataView.html | 74 +-
devel-docs/libgwydgets/html/GwyDataViewLayer.html | 24 +-
devel-docs/libgwydgets/html/GwyDataWindow.html | 28 +-
devel-docs/libgwydgets/html/GwyGraph.html | 30 +-
devel-docs/libgwydgets/html/GwyGraphArea.html | 48 +-
devel-docs/libgwydgets/html/GwyGraphCorner.html | 6 +-
.../libgwydgets/html/GwyGraphCurveModel.html | 48 +-
devel-docs/libgwydgets/html/GwyGraphCurves.html | 12 +-
devel-docs/libgwydgets/html/GwyGraphData.html | 12 +-
devel-docs/libgwydgets/html/GwyGraphLabel.html | 16 +-
devel-docs/libgwydgets/html/GwyGraphModel.html | 56 +-
devel-docs/libgwydgets/html/GwyGraphWindow.html | 16 +-
devel-docs/libgwydgets/html/GwyHMarkerBox.html | 6 +-
devel-docs/libgwydgets/html/GwyHRuler.html | 6 +-
devel-docs/libgwydgets/html/GwyInventoryStore.html | 16 +-
devel-docs/libgwydgets/html/GwyLayerBasic.html | 34 +-
devel-docs/libgwydgets/html/GwyLayerMask.html | 14 +-
devel-docs/libgwydgets/html/GwyMarkerBox.html | 52 +-
devel-docs/libgwydgets/html/GwyNullStore.html | 20 +-
devel-docs/libgwydgets/html/GwyPixmapLayer.html | 18 +-
devel-docs/libgwydgets/html/GwyRuler.html | 22 +-
devel-docs/libgwydgets/html/GwySciText.html | 22 +-
.../libgwydgets/html/GwySelectionGraph1DArea.html | 8 +-
.../libgwydgets/html/GwySelectionGraphArea.html | 6 +-
.../libgwydgets/html/GwySelectionGraphLine.html | 8 +-
.../libgwydgets/html/GwySelectionGraphPoint.html | 6 +-
.../libgwydgets/html/GwySelectionGraphZoom.html | 6 +-
.../libgwydgets/html/GwySensitivityGroup.html | 20 +-
devel-docs/libgwydgets/html/GwyShader.html | 32 +-
devel-docs/libgwydgets/html/GwyStatusbar.html | 10 +-
devel-docs/libgwydgets/html/GwyVRuler.html | 6 +-
devel-docs/libgwydgets/html/GwyVectorLayer.html | 44 +-
devel-docs/libgwydgets/html/WidgetUtilities.html | 2 +-
devel-docs/libgwydgets/html/Widgets3D.html | 2 +-
devel-docs/libgwydgets/html/api-index-2-1.html | 2 +-
devel-docs/libgwydgets/html/api-index-2-11.html | 2 +-
devel-docs/libgwydgets/html/api-index-2-14.html | 2 +-
devel-docs/libgwydgets/html/api-index-2-16.html | 2 +-
devel-docs/libgwydgets/html/api-index-2-22.html | 2 +-
devel-docs/libgwydgets/html/api-index-2-23.html | 2 +-
devel-docs/libgwydgets/html/api-index-2-26.html | 2 +-
devel-docs/libgwydgets/html/api-index-2-29.html | 2 +-
devel-docs/libgwydgets/html/api-index-2-3.html | 2 +-
devel-docs/libgwydgets/html/api-index-2-34.html | 2 +-
devel-docs/libgwydgets/html/api-index-2-37.html | 2 +-
devel-docs/libgwydgets/html/api-index-2-38.html | 2 +-
devel-docs/libgwydgets/html/api-index-2-39.html | 2 +-
devel-docs/libgwydgets/html/api-index-2-41.html | 2 +-
devel-docs/libgwydgets/html/api-index-2-42.html | 2 +-
devel-docs/libgwydgets/html/api-index-2-43.html | 2 +-
devel-docs/libgwydgets/html/api-index-2-45.html | 2 +-
devel-docs/libgwydgets/html/api-index-2-46.html | 5 +-
devel-docs/libgwydgets/html/api-index-2-48.html | 70 +
devel-docs/libgwydgets/html/api-index-2-49.html | 142 +
devel-docs/libgwydgets/html/api-index-2-5.html | 2 +-
devel-docs/libgwydgets/html/api-index-2-7.html | 2 +-
devel-docs/libgwydgets/html/api-index-2-8.html | 2 +-
devel-docs/libgwydgets/html/api-index-all.html | 176 +-
devel-docs/libgwydgets/html/api-index-deprec.html | 2 +-
devel-docs/libgwydgets/html/gwy_3d_base-24.png | Bin 1316 -> 1119 bytes
devel-docs/libgwydgets/html/gwy_arithmetic-24.png | Bin 314 -> 250 bytes
devel-docs/libgwydgets/html/gwy_bold-20.png | Bin 282 -> 353 bytes
devel-docs/libgwydgets/html/gwy_cantilever-24.png | Bin 642 -> 558 bytes
devel-docs/libgwydgets/html/gwy_color_range-24.png | Bin 426 -> 354 bytes
.../html/gwy_color_range_adaptive-24.png | Bin 674 -> 863 bytes
.../libgwydgets/html/gwy_color_range_auto-24.png | Bin 592 -> 432 bytes
.../libgwydgets/html/gwy_color_range_fixed-24.png | Bin 429 -> 391 bytes
.../libgwydgets/html/gwy_color_range_full-24.png | Bin 334 -> 234 bytes
devel-docs/libgwydgets/html/gwy_convolution-24.png | Bin 323 -> 337 bytes
.../libgwydgets/html/gwy_correct_affine-24.png | Bin 1292 -> 721 bytes
.../libgwydgets/html/gwy_correlation_mask-24.png | Bin 0 -> 361 bytes
devel-docs/libgwydgets/html/gwy_crop-24.png | Bin 746 -> 452 bytes
devel-docs/libgwydgets/html/gwy_cwt-24.png | Bin 589 -> 716 bytes
.../libgwydgets/html/gwy_data_measure-24.png | Bin 228 -> 214 bytes
.../libgwydgets/html/gwy_disconnected-24.png | Bin 0 -> 486 bytes
devel-docs/libgwydgets/html/gwy_distance-24.png | Bin 973 -> 316 bytes
.../libgwydgets/html/gwy_distance_transform-24.png | Bin 1187 -> 786 bytes
.../libgwydgets/html/gwy_distribution_angle-24.png | Bin 689 -> 689 bytes
.../libgwydgets/html/gwy_distribution_slope-24.png | Bin 580 -> 654 bytes
devel-docs/libgwydgets/html/gwy_drift-24.png | Bin 1396 -> 1468 bytes
devel-docs/libgwydgets/html/gwy_dwt-24.png | Bin 640 -> 815 bytes
devel-docs/libgwydgets/html/gwy_edge-24.png | Bin 190 -> 190 bytes
.../html/gwy_enforce_distribution-24.png | Bin 647 -> 766 bytes
devel-docs/libgwydgets/html/gwy_entropy-24.png | Bin 305 -> 203 bytes
devel-docs/libgwydgets/html/gwy_extend-24.png | Bin 262 -> 535 bytes
.../libgwydgets/html/gwy_extract_path-24.png | Bin 989 -> 1065 bytes
devel-docs/libgwydgets/html/gwy_facet_level-24.png | Bin 1089 -> 1193 bytes
devel-docs/libgwydgets/html/gwy_favourite-24.png | Bin 1219 -> 1146 bytes
devel-docs/libgwydgets/html/gwy_fft-24.png | Bin 484 -> 728 bytes
devel-docs/libgwydgets/html/gwy_fft_2d-24.png | Bin 337 -> 657 bytes
.../libgwydgets/html/gwy_fft_filter_1d-24.png | Bin 0 -> 611 bytes
.../libgwydgets/html/gwy_fft_filter_2d-24.png | Bin 367 -> 300 bytes
devel-docs/libgwydgets/html/gwy_filter-24.png | Bin 1069 -> 311 bytes
devel-docs/libgwydgets/html/gwy_find_peaks-24.png | Bin 539 -> 676 bytes
devel-docs/libgwydgets/html/gwy_fit_shape-24.png | Bin 0 -> 1244 bytes
devel-docs/libgwydgets/html/gwy_fix_zero-24.png | Bin 509 -> 385 bytes
.../libgwydgets/html/gwy_flip_horizontally-24.png | Bin 809 -> 585 bytes
.../libgwydgets/html/gwy_flip_vertically-24.png | Bin 855 -> 567 bytes
devel-docs/libgwydgets/html/gwy_fractal-24.png | Bin 943 -> 710 bytes
.../libgwydgets/html/gwy_fractal_correction-24.png | Bin 0 -> 734 bytes
.../libgwydgets/html/gwy_fractal_measure-24.png | Bin 0 -> 698 bytes
devel-docs/libgwydgets/html/gwy_gl_material-16.png | Bin 759 -> 829 bytes
.../html/gwy_gradient_horizontal-24.png | Bin 854 -> 615 bytes
.../libgwydgets/html/gwy_gradient_vertical-24.png | Bin 842 -> 613 bytes
.../libgwydgets/html/gwy_grain_correlation-24.png | Bin 1007 -> 732 bytes
.../html/gwy_grain_exscribed_circle-24.png | Bin 964 -> 531 bytes
.../html/gwy_grain_inscribed_circle-24.png | Bin 1023 -> 634 bytes
devel-docs/libgwydgets/html/gwy_grains-24.png | Bin 748 -> 424 bytes
devel-docs/libgwydgets/html/gwy_grains_edge-24.png | Bin 1054 -> 492 bytes
.../libgwydgets/html/gwy_grains_edge_remove-24.png | Bin 699 -> 1232 bytes
.../libgwydgets/html/gwy_grains_graph-24.png | Bin 989 -> 430 bytes
.../libgwydgets/html/gwy_grains_measure-24.png | Bin 316 -> 573 bytes
.../libgwydgets/html/gwy_grains_remove-24.png | Bin 881 -> 493 bytes
.../libgwydgets/html/gwy_grains_water-24.png | Bin 1172 -> 1055 bytes
devel-docs/libgwydgets/html/gwy_graph-24.png | Bin 330 -> 697 bytes
devel-docs/libgwydgets/html/gwy_graph_align-24.png | Bin 503 -> 555 bytes
devel-docs/libgwydgets/html/gwy_graph_cut-24.png | Bin 417 -> 523 bytes
devel-docs/libgwydgets/html/gwy_graph_dos-24.png | Bin 591 -> 1083 bytes
.../libgwydgets/html/gwy_graph_export_ascii-24.png | Bin 721 -> 314 bytes
.../libgwydgets/html/gwy_graph_export_png-24.png | Bin 742 -> 314 bytes
.../html/gwy_graph_export_vector-24.png | Bin 803 -> 401 bytes
devel-docs/libgwydgets/html/gwy_graph_fd-24.png | Bin 407 -> 805 bytes
.../libgwydgets/html/gwy_graph_filter-24.png | Bin 497 -> 864 bytes
.../libgwydgets/html/gwy_graph_function-24.png | Bin 534 -> 993 bytes
.../libgwydgets/html/gwy_graph_halfgauss-24.png | Bin 280 -> 473 bytes
devel-docs/libgwydgets/html/gwy_graph_level-24.png | Bin 445 -> 986 bytes
.../libgwydgets/html/gwy_graph_measure-24.png | Bin 376 -> 628 bytes
.../libgwydgets/html/gwy_graph_palette-24.png | Bin 529 -> 487 bytes
.../libgwydgets/html/gwy_graph_pointer-24.png | Bin 915 -> 851 bytes
devel-docs/libgwydgets/html/gwy_graph_ruler-24.png | Bin 588 -> 611 bytes
.../libgwydgets/html/gwy_graph_vertical-24.png | Bin 330 -> 643 bytes
.../libgwydgets/html/gwy_graph_zoom_fit-24.png | Bin 1287 -> 1126 bytes
.../libgwydgets/html/gwy_graph_zoom_in-24.png | Bin 1285 -> 1123 bytes
.../libgwydgets/html/gwy_graph_zoom_out-24.png | Bin 1242 -> 1105 bytes
devel-docs/libgwydgets/html/gwy_hough-24.png | Bin 719 -> 650 bytes
devel-docs/libgwydgets/html/gwy_immerse-24.png | Bin 279 -> 209 bytes
.../libgwydgets/html/gwy_iso_roughness-24.png | Bin 495 -> 723 bytes
devel-docs/libgwydgets/html/gwy_italic-20.png | Bin 225 -> 258 bytes
devel-docs/libgwydgets/html/gwy_less-24.png | Bin 804 -> 1017 bytes
devel-docs/libgwydgets/html/gwy_level-24.png | Bin 610 -> 290 bytes
.../libgwydgets/html/gwy_level_flatten_base-24.png | Bin 636 -> 1237 bytes
.../libgwydgets/html/gwy_level_median-24.png | Bin 564 -> 659 bytes
.../libgwydgets/html/gwy_level_triangle-24.png | Bin 1075 -> 870 bytes
.../libgwydgets/html/gwy_light_rotate-24.png | Bin 1250 -> 1157 bytes
devel-docs/libgwydgets/html/gwy_line_level-24.png | Bin 284 -> 235 bytes
devel-docs/libgwydgets/html/gwy_load_debug-20.png | Bin 1248 -> 1148 bytes
devel-docs/libgwydgets/html/gwy_load_info-20.png | Bin 881 -> 991 bytes
.../libgwydgets/html/gwy_load_warning-20.png | Bin 967 -> 900 bytes
devel-docs/libgwydgets/html/gwy_local_slope-24.png | Bin 1457 -> 363 bytes
.../html/gwy_logscale_horizontal-24.png | Bin 111 -> 335 bytes
.../libgwydgets/html/gwy_logscale_vertical-24.png | Bin 124 -> 340 bytes
.../libgwydgets/html/gwy_mark_outliers-24.png | Bin 0 -> 232 bytes
devel-docs/libgwydgets/html/gwy_mark_scars-24.png | Bin 0 -> 246 bytes
devel-docs/libgwydgets/html/gwy_mark_with-24.png | Bin 283 -> 387 bytes
devel-docs/libgwydgets/html/gwy_mask-16.png | Bin 150 -> 184 bytes
devel-docs/libgwydgets/html/gwy_mask-24.png | Bin 154 -> 217 bytes
devel-docs/libgwydgets/html/gwy_mask_add-24.png | Bin 241 -> 246 bytes
devel-docs/libgwydgets/html/gwy_mask_circle-24.png | Bin 237 -> 674 bytes
.../html/gwy_mask_circle_exclusive-24.png | Bin 179 -> 541 bytes
.../html/gwy_mask_circle_inclusive-24.png | Bin 175 -> 578 bytes
.../libgwydgets/html/gwy_mask_distribute-24.png | Bin 408 -> 290 bytes
devel-docs/libgwydgets/html/gwy_mask_editor-24.png | Bin 387 -> 927 bytes
.../libgwydgets/html/gwy_mask_exclude-24.png | Bin 192 -> 259 bytes
.../html/gwy_mask_exclude_circle-24.png | Bin 264 -> 541 bytes
.../libgwydgets/html/gwy_mask_extract-24.png | Bin 512 -> 268 bytes
.../libgwydgets/html/gwy_mask_fill_draw-24.png | Bin 258 -> 931 bytes
.../libgwydgets/html/gwy_mask_fill_erase-24.png | Bin 292 -> 844 bytes
devel-docs/libgwydgets/html/gwy_mask_grow-24.png | Bin 203 -> 584 bytes
.../libgwydgets/html/gwy_mask_intersect-24.png | Bin 241 -> 270 bytes
devel-docs/libgwydgets/html/gwy_mask_invert-24.png | Bin 273 -> 441 bytes
devel-docs/libgwydgets/html/gwy_mask_line-24.png | Bin 307 -> 416 bytes
devel-docs/libgwydgets/html/gwy_mask_morph-24.png | Bin 389 -> 321 bytes
.../libgwydgets/html/gwy_mask_paint_draw-24.png | Bin 331 -> 1239 bytes
.../libgwydgets/html/gwy_mask_paint_erase-24.png | Bin 367 -> 1278 bytes
.../html/gwy_mask_rect_exclusive-24.png | Bin 133 -> 195 bytes
.../html/gwy_mask_rect_inclusive-24.png | Bin 130 -> 193 bytes
devel-docs/libgwydgets/html/gwy_mask_remove-24.png | Bin 327 -> 319 bytes
devel-docs/libgwydgets/html/gwy_mask_set-24.png | Bin 0 -> 197 bytes
devel-docs/libgwydgets/html/gwy_mask_shrink-24.png | Bin 212 -> 935 bytes
.../libgwydgets/html/gwy_mask_subtract-24.png | Bin 240 -> 272 bytes
devel-docs/libgwydgets/html/gwy_mask_thin-24.png | Bin 321 -> 949 bytes
.../libgwydgets/html/gwy_measure_lattice-24.png | Bin 1484 -> 320 bytes
devel-docs/libgwydgets/html/gwy_merge-24.png | Bin 199 -> 217 bytes
devel-docs/libgwydgets/html/gwy_more-24.png | Bin 778 -> 1028 bytes
devel-docs/libgwydgets/html/gwy_mutual_crop-24.png | Bin 884 -> 205 bytes
.../libgwydgets/html/gwy_neural_apply-24.png | Bin 1253 -> 951 bytes
.../libgwydgets/html/gwy_neural_train-24.png | Bin 1250 -> 866 bytes
devel-docs/libgwydgets/html/gwy_next-24.png | Bin 0 -> 493 bytes
.../libgwydgets/html/gwy_null_offsets-24.png | Bin 0 -> 316 bytes
devel-docs/libgwydgets/html/gwy_palettes-16.png | Bin 230 -> 221 bytes
devel-docs/libgwydgets/html/gwy_palettes-24.png | Bin 635 -> 303 bytes
devel-docs/libgwydgets/html/gwy_path_level-24.png | Bin 758 -> 782 bytes
.../libgwydgets/html/gwy_pointer_measure-24.png | Bin 968 -> 695 bytes
.../libgwydgets/html/gwy_poly_distort-24.png | Bin 1500 -> 1033 bytes
devel-docs/libgwydgets/html/gwy_polynom-24.png | Bin 408 -> 942 bytes
.../libgwydgets/html/gwy_polynom_level-24.png | Bin 1033 -> 1046 bytes
devel-docs/libgwydgets/html/gwy_previous-24.png | Bin 0 -> 461 bytes
devel-docs/libgwydgets/html/gwy_profile-24.png | Bin 586 -> 592 bytes
devel-docs/libgwydgets/html/gwy_pygwy-24.png | Bin 932 -> 813 bytes
.../libgwydgets/html/gwy_remove_under_mask-24.png | Bin 369 -> 438 bytes
devel-docs/libgwydgets/html/gwy_rotate-24.png | Bin 1707 -> 835 bytes
devel-docs/libgwydgets/html/gwy_rotate_180-24.png | Bin 1382 -> 1272 bytes
devel-docs/libgwydgets/html/gwy_rotate_3d-24.png | Bin 0 -> 1212 bytes
.../libgwydgets/html/gwy_rotate_90_ccw-24.png | Bin 1071 -> 660 bytes
.../libgwydgets/html/gwy_rotate_90_cw-24.png | Bin 1116 -> 616 bytes
devel-docs/libgwydgets/html/gwy_scale-24.png | Bin 422 -> 377 bytes
.../libgwydgets/html/gwy_scale_horizontally-24.png | Bin 1255 -> 614 bytes
.../libgwydgets/html/gwy_scale_vertically-24.png | Bin 1097 -> 577 bytes
devel-docs/libgwydgets/html/gwy_scars-24.png | Bin 276 -> 206 bytes
devel-docs/libgwydgets/html/gwy_selections-24.png | Bin 342 -> 307 bytes
devel-docs/libgwydgets/html/gwy_shader-24.png | Bin 1256 -> 1288 bytes
devel-docs/libgwydgets/html/gwy_spectrum-24.png | Bin 464 -> 990 bytes
devel-docs/libgwydgets/html/gwy_spot_remove-24.png | Bin 309 -> 361 bytes
.../libgwydgets/html/gwy_stat_quantities-24.png | Bin 642 -> 316 bytes
.../libgwydgets/html/gwy_straighten_path-24.png | Bin 1142 -> 994 bytes
devel-docs/libgwydgets/html/gwy_subscript-20.png | Bin 382 -> 396 bytes
devel-docs/libgwydgets/html/gwy_superscript-20.png | Bin 400 -> 402 bytes
.../html/gwy_synthetic_ballistic_deposition-24.png | Bin 1790 -> 1424 bytes
.../html/gwy_synthetic_brownian_motion-24.png | Bin 1348 -> 1352 bytes
.../libgwydgets/html/gwy_synthetic_columnar-24.png | Bin 1395 -> 1414 bytes
.../html/gwy_synthetic_diffusion-24.png | Bin 1287 -> 1166 bytes
.../libgwydgets/html/gwy_synthetic_domains-24.png | Bin 1596 -> 1271 bytes
.../libgwydgets/html/gwy_synthetic_fibres-24.png | Bin 0 -> 1178 bytes
.../libgwydgets/html/gwy_synthetic_lattice-24.png | Bin 1398 -> 1212 bytes
.../html/gwy_synthetic_line_noise-24.png | Bin 436 -> 382 bytes
.../libgwydgets/html/gwy_synthetic_noise-24.png | Bin 1841 -> 1490 bytes
.../libgwydgets/html/gwy_synthetic_objects-24.png | Bin 994 -> 958 bytes
.../html/gwy_synthetic_particles-24.png | Bin 1476 -> 1312 bytes
.../libgwydgets/html/gwy_synthetic_pattern-24.png | Bin 766 -> 613 bytes
.../libgwydgets/html/gwy_synthetic_phases-24.png | Bin 0 -> 354 bytes
.../libgwydgets/html/gwy_synthetic_spectral-24.png | Bin 1383 -> 1379 bytes
.../libgwydgets/html/gwy_synthetic_waves-24.png | Bin 1665 -> 1259 bytes
devel-docs/libgwydgets/html/gwy_tilt-24.png | Bin 521 -> 1511 bytes
.../libgwydgets/html/gwy_tip_dilation-24.png | Bin 614 -> 839 bytes
devel-docs/libgwydgets/html/gwy_tip_erosion-24.png | Bin 585 -> 781 bytes
.../libgwydgets/html/gwy_tip_estimation-24.png | Bin 818 -> 663 bytes
.../libgwydgets/html/gwy_tip_indent_analyze-24.png | Bin 778 -> 750 bytes
.../libgwydgets/html/gwy_tip_lateral_force-24.png | Bin 643 -> 1342 bytes
devel-docs/libgwydgets/html/gwy_tip_map-24.png | Bin 1695 -> 899 bytes
devel-docs/libgwydgets/html/gwy_tip_model-24.png | Bin 745 -> 599 bytes
devel-docs/libgwydgets/html/gwy_tip_pid-24.png | Bin 821 -> 767 bytes
devel-docs/libgwydgets/html/gwy_unrotate-24.png | Bin 409 -> 623 bytes
.../libgwydgets/html/gwy_value_invert-24.png | Bin 321 -> 378 bytes
devel-docs/libgwydgets/html/gwy_volume-24.png | Bin 1385 -> 1404 bytes
.../libgwydgets/html/gwy_volume_calibrate-24.png | Bin 1118 -> 1106 bytes
.../libgwydgets/html/gwy_volume_dimensions-24.png | Bin 1281 -> 909 bytes
devel-docs/libgwydgets/html/gwy_volume_fd-24.png | Bin 1425 -> 1630 bytes
.../libgwydgets/html/gwy_volume_invert-24.png | Bin 1612 -> 1056 bytes
.../libgwydgets/html/gwy_volume_kmeans-24.png | Bin 1437 -> 1179 bytes
.../libgwydgets/html/gwy_volume_kmedians-24.png | Bin 1430 -> 988 bytes
.../libgwydgets/html/gwy_volume_slice-24.png | Bin 1575 -> 1359 bytes
devel-docs/libgwydgets/html/gwy_volumize-24.png | Bin 1489 -> 1098 bytes
.../libgwydgets/html/gwy_volumize_layers-24.png | Bin 1702 -> 1252 bytes
devel-docs/libgwydgets/html/gwy_xy_denoise-24.png | Bin 0 -> 243 bytes
devel-docs/libgwydgets/html/gwy_zero_mean-24.png | Bin 579 -> 394 bytes
devel-docs/libgwydgets/html/gwy_zoom_1_1-24.png | Bin 1451 -> 1112 bytes
devel-docs/libgwydgets/html/gwy_zoom_fit-24.png | Bin 1454 -> 1101 bytes
devel-docs/libgwydgets/html/gwy_zoom_in-24.png | Bin 1449 -> 1090 bytes
devel-docs/libgwydgets/html/gwy_zoom_out-24.png | Bin 1408 -> 1084 bytes
devel-docs/libgwydgets/html/index.html | 9 +-
.../html/libgwydgets-GwyGraphBasics.html | 28 +-
.../libgwydgets/html/libgwydgets-gwycombobox.html | 20 +-
.../libgwydgets/html/libgwydgets-gwydgetenums.html | 79 +-
.../libgwydgets/html/libgwydgets-gwydgets.html | 6 +-
.../libgwydgets/html/libgwydgets-gwydgetutils.html | 225 +-
.../html/libgwydgets-gwygrainvaluemenu.html | 24 +-
.../html/libgwydgets-gwyoptionmenus.html | 30 +-
.../html/libgwydgets-gwyradiobuttons.html | 20 +-
.../libgwydgets/html/libgwydgets-gwystock.html | 276 +-
devel-docs/libgwydgets/html/libgwydgets.devhelp2 | 67 +-
.../libgwydgets/html/standard-vector-layers.html | 2 +-
devel-docs/libgwydgets/libgwydgets-docs.sgml | 53 +-
devel-docs/libgwydraw/Makefile.in | 16 +-
devel-docs/libgwydraw/html/GwyGLMaterial.html | 32 +-
devel-docs/libgwydraw/html/GwyGradient.html | 40 +-
devel-docs/libgwydraw/html/GwySelection.html | 52 +-
devel-docs/libgwydraw/html/api-index-2-16.html | 2 +-
devel-docs/libgwydraw/html/api-index-2-32.html | 2 +-
devel-docs/libgwydraw/html/api-index-2-39.html | 2 +-
devel-docs/libgwydraw/html/api-index-2-43.html | 2 +-
devel-docs/libgwydraw/html/api-index-2-47.html | 5 +-
devel-docs/libgwydraw/html/api-index-2-49.html | 37 +
devel-docs/libgwydraw/html/api-index-all.html | 10 +-
devel-docs/libgwydraw/html/index.html | 5 +-
devel-docs/libgwydraw/html/libgwydraw-GwyRGBA.html | 120 +-
devel-docs/libgwydraw/html/libgwydraw-gwydraw.html | 4 +-
.../libgwydraw/html/libgwydraw-gwydrawenums.html | 6 +-
.../libgwydraw/html/libgwydraw-gwypixfield.html | 14 +-
devel-docs/libgwydraw/html/libgwydraw.devhelp2 | 3 +
devel-docs/libgwydraw/libgwydraw-docs.sgml | 14 +-
devel-docs/libgwymodule/Makefile.in | 16 +-
devel-docs/libgwymodule/html/ModuleLibrary.html | 2 +-
devel-docs/libgwymodule/html/ModuleTutorial.html | 2 +-
.../libgwymodule/html/PluginProxyReference.html | 2 +-
devel-docs/libgwymodule/html/api-index-2-1.html | 2 +-
devel-docs/libgwymodule/html/api-index-2-18.html | 2 +-
devel-docs/libgwymodule/html/api-index-2-25.html | 2 +-
devel-docs/libgwymodule/html/api-index-2-32.html | 2 +-
devel-docs/libgwymodule/html/api-index-2-36.html | 2 +-
devel-docs/libgwymodule/html/api-index-2-38.html | 2 +-
devel-docs/libgwymodule/html/api-index-2-45.html | 5 +-
devel-docs/libgwymodule/html/api-index-2-48.html | 42 +
devel-docs/libgwymodule/html/api-index-2-49.html | 53 +
devel-docs/libgwymodule/html/api-index-all.html | 42 +-
devel-docs/libgwymodule/html/api-index-deprec.html | 2 +-
.../html/gwymodule-tutorial-beyond.html | 6 +-
.../libgwymodule/html/gwymodule-tutorial-file.html | 4 +-
.../html/gwymodule-tutorial-graph.html | 2 +-
.../html/gwymodule-tutorial-install.html | 4 +-
.../html/gwymodule-tutorial-layer.html | 2 +-
.../html/gwymodule-tutorial-minimal.html | 2 +-
.../html/gwymodule-tutorial-overview.html | 2 +-
.../html/gwymodule-tutorial-process.html | 2 +-
.../libgwymodule/html/gwymodule-tutorial-tool.html | 2 +-
devel-docs/libgwymodule/html/index.html | 6 +-
.../html/libgwymodule-gwymodule-file.html | 54 +-
.../html/libgwymodule-gwymodule-graph.html | 22 +-
.../html/libgwymodule-gwymodule-layer.html | 8 +-
.../html/libgwymodule-gwymodule-process.html | 24 +-
.../html/libgwymodule-gwymodule-tool.html | 8 +-
.../html/libgwymodule-gwymodule-volume.html | 24 +-
.../html/libgwymodule-gwymodule-xyz.html | 24 +-
.../html/libgwymodule-gwymodulebrowser.html | 4 +-
.../html/libgwymodule-gwymoduleenums.html | 10 +-
.../html/libgwymodule-gwymoduleloader.html | 391 +-
devel-docs/libgwymodule/html/libgwymodule.devhelp2 | 20 +
.../libgwymodule/html/plugin-proxy-dump.html | 2 +-
.../libgwymodule/html/plugin-proxy-file.html | 2 +-
.../libgwymodule/html/plugin-proxy-overview.html | 2 +-
.../libgwymodule/html/plugin-proxy-process.html | 2 +-
devel-docs/libgwymodule/html/plugin-proxy-rgi.html | 2 +-
devel-docs/libgwymodule/libgwymodule-docs.sgml | 24 +-
devel-docs/libgwymodule/module-tutorial-beyond.xml | 6 +-
.../libgwymodule/module-tutorial-install.xml | 4 +-
devel-docs/libgwyprocess/Makefile.in | 16 +-
devel-docs/libgwyprocess/html/GwyBrick.html | 193 +-
devel-docs/libgwyprocess/html/GwyCDLine.html | 24 +-
devel-docs/libgwyprocess/html/GwyCalData.html | 56 +-
devel-docs/libgwyprocess/html/GwyCalibration.html | 16 +-
devel-docs/libgwyprocess/html/GwyDataField.html | 423 +-
devel-docs/libgwyprocess/html/GwyDataLine.html | 155 +-
devel-docs/libgwyprocess/html/GwyGrainValue.html | 48 +-
.../libgwyprocess/html/GwyShapeFitPreset.html | 131 +-
devel-docs/libgwyprocess/html/GwySpectra.html | 58 +-
devel-docs/libgwyprocess/html/GwySurface.html | 163 +-
.../libgwyprocess/html/GwyTriangulation.html | 22 +-
devel-docs/libgwyprocess/html/api-index-2-1.html | 2 +-
devel-docs/libgwyprocess/html/api-index-2-11.html | 2 +-
devel-docs/libgwyprocess/html/api-index-2-12.html | 2 +-
devel-docs/libgwyprocess/html/api-index-2-18.html | 2 +-
devel-docs/libgwyprocess/html/api-index-2-2.html | 2 +-
devel-docs/libgwyprocess/html/api-index-2-22.html | 2 +-
devel-docs/libgwyprocess/html/api-index-2-23.html | 2 +-
devel-docs/libgwyprocess/html/api-index-2-26.html | 2 +-
devel-docs/libgwyprocess/html/api-index-2-29.html | 2 +-
devel-docs/libgwyprocess/html/api-index-2-3.html | 2 +-
devel-docs/libgwyprocess/html/api-index-2-30.html | 2 +-
devel-docs/libgwyprocess/html/api-index-2-31.html | 2 +-
devel-docs/libgwyprocess/html/api-index-2-32.html | 2 +-
devel-docs/libgwyprocess/html/api-index-2-34.html | 2 +-
devel-docs/libgwyprocess/html/api-index-2-35.html | 2 +-
devel-docs/libgwyprocess/html/api-index-2-36.html | 2 +-
devel-docs/libgwyprocess/html/api-index-2-37.html | 2 +-
devel-docs/libgwyprocess/html/api-index-2-38.html | 2 +-
devel-docs/libgwyprocess/html/api-index-2-4.html | 2 +-
devel-docs/libgwyprocess/html/api-index-2-40.html | 2 +-
devel-docs/libgwyprocess/html/api-index-2-41.html | 2 +-
devel-docs/libgwyprocess/html/api-index-2-42.html | 2 +-
devel-docs/libgwyprocess/html/api-index-2-43.html | 2 +-
devel-docs/libgwyprocess/html/api-index-2-44.html | 2 +-
devel-docs/libgwyprocess/html/api-index-2-45.html | 2 +-
devel-docs/libgwyprocess/html/api-index-2-46.html | 2 +-
devel-docs/libgwyprocess/html/api-index-2-47.html | 5 +-
devel-docs/libgwyprocess/html/api-index-2-48.html | 45 +
devel-docs/libgwyprocess/html/api-index-2-49.html | 117 +
devel-docs/libgwyprocess/html/api-index-2-5.html | 2 +-
devel-docs/libgwyprocess/html/api-index-2-7.html | 2 +-
devel-docs/libgwyprocess/html/api-index-2-8.html | 2 +-
devel-docs/libgwyprocess/html/api-index-all.html | 127 +-
.../libgwyprocess/html/api-index-deprec.html | 6 +-
devel-docs/libgwyprocess/html/index.html | 6 +-
.../html/libgwyprocess-GwySpline.html | 114 +-
.../html/libgwyprocess-arithmetic.html | 24 +-
.../libgwyprocess/html/libgwyprocess-correct.html | 264 +-
.../html/libgwyprocess-correlation.html | 44 +-
.../libgwyprocess/html/libgwyprocess-cwt.html | 4 +-
.../libgwyprocess/html/libgwyprocess-dwt.html | 16 +-
.../libgwyprocess/html/libgwyprocess-elliptic.html | 101 +-
.../libgwyprocess/html/libgwyprocess-filters.html | 352 +-
.../libgwyprocess/html/libgwyprocess-fractals.html | 22 +-
.../libgwyprocess/html/libgwyprocess-grains.html | 118 +-
.../html/libgwyprocess-gwyprocess.html | 4 +-
.../html/libgwyprocess-gwyprocessenums.html | 248 +-
.../libgwyprocess/html/libgwyprocess-hough.html | 6 +-
.../html/libgwyprocess-interpolation.html | 26 +-
.../libgwyprocess/html/libgwyprocess-inttrans.html | 40 +-
.../libgwyprocess/html/libgwyprocess-level.html | 56 +-
.../html/libgwyprocess-linestats.html | 228 +-
.../libgwyprocess/html/libgwyprocess-peaks.html | 30 +-
.../html/libgwyprocess-simpleFFT.html | 30 +-
.../html/libgwyprocess-stats-uncertainty.html | 78 +-
.../libgwyprocess/html/libgwyprocess-stats.html | 711 +-
.../libgwyprocess/html/libgwyprocess-tip.html | 88 +-
.../libgwyprocess/html/libgwyprocess.devhelp2 | 42 +-
devel-docs/libgwyprocess/libgwyprocess-docs.sgml | 70 +-
gwyddion.spec | 128 +-
libdraw/Makefile.am | 4 +-
libdraw/Makefile.in | 25 +-
libdraw/gwypixfield.c | 52 +-
libdraw/gwyrgba.c | 67 +-
libdraw/gwyrgba.h | 7 +-
libgwyddion/Makefile.am | 4 +-
libgwyddion/Makefile.in | 25 +-
libgwyddion/gwycontainer.c | 187 +-
libgwyddion/gwycontainer.h | 7 +-
libgwyddion/gwyddiontypes.c | 56 +-
libgwyddion/gwyddiontypes.h | 6 +-
libgwyddion/gwyenum.h | 4 +-
libgwyddion/gwymath.c | 292 +-
libgwyddion/gwymath.h | 21 +-
libgwyddion/gwymathfallback.h | 12 +-
libgwyddion/gwynlfit.c | 11 +-
libgwyddion/gwynlfitpreset.c | 161 +-
libgwyddion/gwysiunit.c | 51 +-
libgwyddion/gwysiunit.h | 6 +-
libgwyddion/gwyutils.c | 124 +-
libgwyddion/gwyutils.h | 11 +-
libgwyddion/gwyversion.h | 4 +-
libgwydgets/Makefile.am | 7 +-
libgwydgets/Makefile.in | 52 +-
libgwydgets/gwy3dsetup.c | 116 +-
libgwydgets/gwy3dsetup.h | 10 +-
libgwydgets/gwy3dview.c | 440 +-
libgwydgets/gwy3dwindow.c | 551 +-
libgwydgets/gwy3dwindow.h | 4 +-
libgwydgets/gwyadjustbar.c | 1356 ++
libgwydgets/gwyadjustbar.h | 85 +
libgwydgets/gwyaxisdialog.c | 160 +-
libgwydgets/gwycombobox.c | 7 +-
libgwydgets/gwydataview.c | 30 +-
libgwydgets/gwydgetenums.c | 27 +-
libgwydgets/gwydgetenums.h | 7 +-
libgwydgets/gwydgetmarshals.c | 6 +-
libgwydgets/gwydgets.c | 9 +-
libgwydgets/gwydgets.h | 3 +-
libgwydgets/gwydgettypes.c | 21 +
libgwydgets/gwydgettypes.h | 3 +
libgwydgets/gwydgetutils.c | 364 +-
libgwydgets/gwydgetutils.h | 62 +-
libgwydgets/gwygraphareadialog.c | 60 +-
libgwydgets/gwygraphcurvemodel.c | 7 +-
libgwydgets/gwygraphcurves.c | 7 +-
libgwydgets/gwygraphlabeldialog.c | 13 +-
libgwydgets/gwyradiobuttons.c | 9 +-
libgwydgets/gwystatusbar.c | 4 +-
libgwydgets/gwystock.c | 208 +-
libgwydgets/gwystock.h | 26 +-
libgwymodule/Makefile.am | 4 +-
libgwymodule/Makefile.in | 25 +-
libgwymodule/gwymodule-file.c | 4 +-
libgwymodule/gwymodulebrowser.c | 18 +-
libgwymodule/gwymoduleinternal.h | 19 +-
libgwymodule/gwymoduleloader.c | 597 +-
libgwymodule/gwymoduleloader.h | 57 +-
libgwymodule/gwymoduletypes.c | 1 +
libprocess/Makefile.am | 17 +-
libprocess/Makefile.in | 63 +-
libprocess/arithmetic.c | 53 +-
libprocess/brick.c | 806 +-
libprocess/brick.h | 19 +-
libprocess/correct-laplace.c | 1592 ++
libprocess/correct.c | 2270 +--
libprocess/correct.h | 16 +-
libprocess/cwt.c | 3 +-
libprocess/datafield.c | 495 +-
libprocess/datafield.h | 269 +-
libprocess/dataline.c | 133 +-
libprocess/dataline.h | 6 +-
libprocess/dwt.c | 5 +-
libprocess/elliptic.c | 113 +-
libprocess/elliptic.h | 95 +-
libprocess/filters-minmax.c | 1574 ++
libprocess/filters.c | 2130 +--
libprocess/filters.h | 22 +-
libprocess/fractals.c | 5 +-
libprocess/grains-disttrans.c | 978 ++
libprocess/grains-values.c | 2094 +++
libprocess/grains-wshed.c | 1253 ++
libprocess/grains.c | 4481 +-----
libprocess/grains.h | 3 +-
libprocess/gwygrainvalue.c | 4 +-
libprocess/gwyprocess.c | 49 +-
libprocess/gwyprocessenums.c | 65 +-
libprocess/gwyprocessenums.h | 18 +-
libprocess/gwyprocessinternal.h | 140 +-
libprocess/gwyprocesstypes.c | 19 +
libprocess/gwyprocesstypes.h | 3 +
libprocess/gwyshapefitpreset.c | 118 +-
libprocess/gwyshapefitpreset.h | 9 +-
libprocess/hough.c | 42 +-
libprocess/interpolation.c | 3 +-
libprocess/interpolation.h | 14 +-
libprocess/inttrans.c | 319 +-
libprocess/level.c | 3 +-
libprocess/linestats.c | 168 +-
libprocess/linestats.h | 6 +-
libprocess/monte-carlo-unc.c | 156 -
libprocess/monte-carlo-unc.h | 52 -
libprocess/simplefft.c | 1026 +-
libprocess/spectra.c | 47 +-
libprocess/spline.c | 44 +-
libprocess/spline.h | 12 +-
libprocess/stats-acfpsdf.c | 2192 +++
libprocess/stats-entropy.c | 1068 ++
libprocess/stats-sum.c | 1516 ++
libprocess/stats.c | 4374 +----
libprocess/stats.h | 519 +-
libprocess/stats_uncertainty.c | 28 +-
libprocess/surface.c | 354 +-
libprocess/surface.h | 120 +-
libprocess/tip.c | 19 +-
libprocess/tip.h | 5 +-
libprocess/triangulation.c | 3 +-
libprocess/wrappers.h | 44 -
m4/Makefile.in | 16 +-
m4/gwy-enable.m4 | 8 +-
m4/gwy-python.m4 | 127 +-
modules/Makefile.in | 16 +-
modules/file/Makefile.am | 215 +-
modules/file/Makefile.in | 1627 +-
modules/file/accurexii-txt.c | 4 +-
modules/file/aistfile.c | 13 +-
modules/file/alicona.c | 4 +-
modules/file/ambfile.c | 34 +-
modules/file/anfatec.c | 4 +-
modules/file/apedaxfile.c | 78 +-
modules/file/apefile.c | 4 +-
modules/file/asciiexport.c | 4 +-
modules/file/assing-afm.c | 4 +-
modules/file/attocube.c | 10 +-
modules/file/bcrfile.c | 13 +-
modules/file/burleigh.c | 4 +-
modules/file/burleigh_bii.c | 2 +-
modules/file/burleigh_exp.c | 4 +-
modules/file/codevfile.c | 4 +-
modules/file/csmfile.c | 4 +-
modules/file/dektakvca.c | 1037 ++
modules/file/dektakxml.c | 41 +-
modules/file/dimensionfile.c | 4 +-
modules/file/dm3file.c | 4 +-
modules/file/dmefile.c | 4 +-
modules/file/dumbfile.c | 4 +-
modules/file/ecsfile.c | 4 +-
modules/file/ezdfile.c | 4 +-
modules/file/femtoscan-txt.c | 4 +-
modules/file/femtoscan.c | 4 +-
modules/file/file.c | 240 +
modules/file/gdeffile.c | 4 +-
modules/file/gsffile.c | 12 +-
modules/file/gwyfile.c | 4 +-
modules/file/gwytiff.h | 5 +-
modules/file/gxyzffile.c | 12 +-
modules/file/hdf4file.c | 4 +-
modules/file/hitachi-afm.c | 4 +-
modules/file/hitachi-sem.c | 4 +-
modules/file/igorfile.c | 387 +-
modules/file/imgexport.c | 625 +-
modules/file/imgexportpreset.h | 6 +-
modules/file/intelliwave.c | 4 +-
modules/file/intematix.c | 4 +-
modules/file/iso28600.c | 238 +-
modules/file/jeol.c | 4 +-
modules/file/jpkscan.c | 1621 +-
modules/file/jspmfile.c | 4 +-
modules/file/keyence.c | 4 +-
modules/file/leica.c | 4 +-
modules/file/lextfile.c | 4 +-
modules/file/magellan.c | 4 +-
modules/file/mapvue.c | 4 +-
modules/file/metropro.c | 4 +-
modules/file/microprof.c | 129 +-
modules/file/miffile.c | 4 +-
modules/file/mifile.c | 4 +-
modules/file/mulfile.c | 4 +-
modules/file/nanoeducator.c | 4 +-
modules/file/nanomagnetics.c | 4 +-
modules/file/nanonics.c | 4 +-
modules/file/nanonis.c | 4 +-
modules/file/nanoobserver.c | 1309 +-
modules/file/nanoscan.c | 93 +-
modules/file/nanoscope-ii.c | 4 +-
modules/file/nanoscope.c | 19 +-
modules/file/nanotop.c | 2 +-
modules/file/netcdf.c | 4 +-
modules/file/nmmxyz.c | 4 +-
modules/file/nt-mdt.c | 49 +-
modules/file/nxiifile.c | 4 +-
modules/file/oldmda.c | 4 +-
modules/file/ols.c | 4 +-
modules/file/ometiff.c | 4 +-
modules/file/omicron.c | 4 +-
modules/file/omicronflat.c | 4 +-
modules/file/omicronmatrix.c | 4 +-
modules/file/opdfile.c | 140 +-
modules/file/pltfile.c | 4 +-
modules/file/pnifile.c | 4 +-
modules/file/princetonspe.c | 4 +-
modules/file/psia.c | 4 +-
modules/file/pt3file.c | 4 +-
modules/file/quesant.c | 2 +-
modules/file/rawfile.c | 4 +-
modules/file/rawgraph.c | 4 +-
modules/file/rawxyz.c | 4 +-
modules/file/renishaw.c | 13 +-
modules/file/rhk-sm3.c | 4 +-
modules/file/rhk-spm32.c | 4 +-
modules/file/robotics.c | 2 +-
modules/file/s94file.c | 4 +-
modules/file/sdfile.c | 4 +-
modules/file/seiko.c | 36 +-
modules/file/sensofar.c | 2 +-
modules/file/sensolytics.c | 4 +-
modules/file/shimadzu.c | 4 +-
modules/file/sicmfile.c | 4 +-
modules/file/sis.c | 4 +-
modules/file/spip-asc.c | 4 +-
modules/file/spmlab.c | 627 +-
modules/file/spmlabf.c | 4 +-
modules/file/stmprg.c | 4 +-
modules/file/stpfile.c | 4 +-
modules/file/surffile.c | 4 +-
modules/file/tescan.c | 4 +-
modules/file/tiaser.c | 4 +-
modules/file/unisoku.c | 4 +-
modules/file/vtkfile.c | 4 +-
modules/file/win_stm.c | 4 +-
modules/file/wipfile.c | 575 +-
modules/file/witec-asc.c | 4 +-
modules/file/witfile.c | 4 +-
modules/file/wsffile.c | 4 +-
modules/file/wsxmfile.c | 4 +-
modules/file/xyzexport.c | 7 +-
modules/file/zeiss.c | 4 +-
modules/file/zeisslsm.c | 1552 ++
modules/file/zemax.c | 4 +-
modules/graph/Makefile.am | 54 +-
modules/graph/Makefile.in | 298 +-
modules/graph/graph.c | 52 +
modules/graph/graph_align.c | 101 +-
modules/graph/graph_cd.c | 4 +-
modules/graph/graph_cut.c | 53 +-
modules/graph/graph_dos_spectrum.c | 4 +-
modules/graph/graph_export_ascii.c | 4 +-
modules/graph/graph_export_bitmap.c | 4 +-
modules/graph/graph_export_vector.c | 7 +-
modules/graph/graph_fdfit.c | 28 +-
modules/graph/graph_filter.c | 4 +-
modules/graph/graph_fit.c | 28 +-
modules/graph/graph_level.c | 4 +-
modules/graph/graph_logscale.c | 4 +-
modules/graph/graph_peaks.c | 112 +-
modules/graph/graph_stats.c | 953 ++
modules/layer/Makefile.am | 44 +-
modules/layer/Makefile.in | 180 +-
modules/layer/axis.c | 4 +-
modules/layer/ellipse.c | 4 +-
modules/layer/lattice.c | 4 +-
modules/layer/layer.c | 38 +
modules/layer/line.c | 4 +-
modules/layer/path.c | 2 +-
modules/layer/point.c | 4 +-
modules/layer/rectangle.c | 4 +-
modules/process/Makefile.am | 174 +-
modules/process/Makefile.in | 1833 ++-
modules/process/acf2d.c | 4 +-
modules/process/angle_dist.c | 22 +-
modules/process/arithmetic.c | 18 +-
modules/process/averaging.c | 4 +-
modules/process/basicops.c | 6 +-
modules/process/bdep_synth.c | 20 +-
modules/process/calcoefs_load.c | 2 +-
modules/process/calcoefs_new.c | 2 +-
modules/process/calcoefs_simple.c | 2 +-
modules/process/calcoefs_view.c | 2 +-
modules/process/calibrate.c | 330 +-
modules/process/coerce.c | 31 +-
modules/process/col_synth.c | 29 +-
modules/process/convolution_filter.c | 8 +-
modules/process/correct_affine.c | 771 +-
modules/process/crosscor.c | 171 +-
modules/process/curvature.c | 40 +-
modules/process/cwt.c | 23 +-
modules/process/deposit_synth.c | 83 +-
modules/process/diff_synth.c | 35 +-
modules/process/dimensions.h | 107 +-
modules/process/domain_synth.c | 34 +-
modules/process/drift.c | 60 +-
modules/process/dwt.c | 4 +-
modules/process/dwtanisotropy.c | 57 +-
modules/process/edge.c | 20 +-
modules/process/entropy.c | 31 +-
modules/process/extend.c | 38 +-
modules/process/extract_path.c | 4 +-
modules/process/facet-level.c | 8 +-
modules/process/facet_analysis.c | 121 +-
modules/process/fbm_synth.c | 25 +-
modules/process/fft.c | 30 +-
modules/process/fft_filter_1d.c | 8 +-
modules/process/fft_filter_2d.c | 24 +-
modules/process/fft_profile.c | 49 +-
modules/process/fft_synth.c | 36 +-
modules/process/fibre_synth.c | 1617 ++
modules/process/fit-shape.c | 160 +-
modules/process/flatten_base.c | 4 +-
modules/process/fraccor.c | 7 +-
modules/process/fractal.c | 122 +-
modules/process/gradient.c | 4 +-
modules/process/grain_cross.c | 5 +-
modules/process/grain_dist.c | 34 +-
modules/process/grain_edge.c | 82 +-
modules/process/grain_filter.c | 67 +-
modules/process/grain_mark.c | 101 +-
modules/process/grain_stat.c | 8 +-
modules/process/grain_wshed.c | 38 +-
modules/process/hough.c | 105 +-
modules/process/immerse.c | 37 +-
modules/process/indent_analyze.c | 617 +-
modules/process/laplace.c | 4 +-
modules/process/lat_synth.c | 44 +-
modules/process/latsim.c | 18 +-
modules/process/level.c | 6 +-
modules/process/level_grains.c | 4 +-
modules/process/linecorrect.c | 6 +-
modules/process/linematch.c | 79 +-
modules/process/lno_synth.c | 68 +-
modules/process/local_contrast.c | 20 +-
modules/process/logistic.c | 57 +-
modules/process/mark_disconn.c | 73 +-
modules/process/mark_with.c | 36 +-
modules/process/mask_distribute.c | 8 +-
modules/process/mask_edt.c | 188 +-
modules/process/mask_morph.c | 30 +-
modules/process/mask_noisify.c | 333 +
modules/process/maskcor.c | 24 +-
modules/process/maskops.c | 6 +-
modules/process/mcrop.c | 11 +-
modules/process/measure_lattice.c | 479 +-
modules/process/median-bg.c | 14 +-
modules/process/merge.c | 26 +-
modules/process/mfm_current.c | 923 ++
modules/process/mfm_field.c | 789 +
modules/process/mfm_findshift.c | 404 +
modules/process/mfm_parallel.c | 937 ++
modules/process/mfm_shift.c | 333 +
modules/process/mfmops.h | 435 +
modules/process/nanoindent_adjust.c | 9 +-
modules/process/neural.c | 67 +-
modules/process/noise_synth.c | 32 +-
modules/process/obj_synth.c | 76 +-
modules/process/otsu_threshold.c | 8 +-
modules/process/outliers.c | 32 +-
modules/process/pat_synth.c | 15 +-
modules/process/phase_synth.c | 808 +
modules/process/pid.c | 104 +-
modules/process/polydistort.c | 27 +-
modules/process/polylevel.c | 41 +-
modules/process/presentationops.c | 10 +-
modules/process/preview.h | 92 +-
modules/process/process.c | 254 +
modules/process/psdf_logphi.c | 15 +-
modules/process/psf-fit.c | 841 +
modules/process/psf.c | 750 +
modules/process/rank.c | 16 +-
modules/process/rotate.c | 26 +-
modules/process/scale.c | 94 +-
modules/process/scars.c | 100 +-
modules/process/semsim.c | 24 +-
modules/process/shade.c | 177 +-
modules/process/slope_dist.c | 50 +-
modules/process/sphere-revolve.c | 537 +-
modules/process/stitch.c | 800 +
modules/process/straighten_path.c | 33 +-
modules/process/superresolution.c | 61 +-
modules/process/synth.h | 81 +-
modules/process/threshold.c | 37 +-
modules/process/tilt.c | 34 +-
modules/process/tip_blind.c | 77 +-
modules/process/tip_model.c | 137 +-
modules/process/tipops.c | 8 +-
modules/process/unrotate.c | 14 +-
modules/process/volumize.c | 6 +-
modules/process/volumize_layers.c | 25 +-
modules/process/wave_synth.c | 229 +-
modules/process/wpour_mark.c | 36 +-
modules/process/xydenoise.c | 11 +-
modules/process/xyzize.c | 4 +-
modules/pygwy/Makefile.am | 20 +-
modules/pygwy/Makefile.in | 56 +-
modules/pygwy/README.pygwy | 28 +-
modules/pygwy/extra.defs | 25 +
modules/pygwy/gwy.c | 21 +-
modules/pygwy/pygwy-codegen.py | 49 +-
modules/pygwy/pygwy-console.c | 812 +-
modules/pygwy/pygwy-console.h | 16 +-
modules/pygwy/pygwy-fix-defs-1.py | 32 +
modules/pygwy/pygwy-fix-defs-2.py | 603 +
modules/pygwy/pygwy-fix-defs.py | 560 -
modules/pygwy/pygwy-fix-defs.sed | 18 -
modules/pygwy/pygwy-generate-doc.py | 7 +-
modules/pygwy/pygwy.c | 277 +-
modules/pygwy/pygwy.h | 26 +-
modules/pygwy/pygwy.override | 140 +-
modules/pygwy/wrap_calls.c | 478 +-
modules/pygwy/wrap_calls.h | 708 +-
modules/tools/Makefile.am | 54 +-
modules/tools/Makefile.in | 325 +-
modules/tools/crop.c | 10 +-
modules/tools/distance.c | 12 +-
modules/tools/filter.c | 32 +-
modules/tools/grainmeasure.c | 4 +-
modules/tools/grainremover.c | 4 +-
modules/tools/icolorange.c | 4 +-
modules/tools/level3.c | 29 +-
modules/tools/linestats.c | 8 +-
modules/tools/maskedit.c | 91 +-
modules/tools/pathlevel.c | 12 +-
modules/tools/profile.c | 681 +-
modules/tools/readvalue.c | 116 +-
modules/tools/roughness.c | 81 +-
modules/tools/selectionmanager.c | 4 +-
modules/tools/sfunctions.c | 240 +-
modules/tools/spectro.c | 91 +-
modules/tools/spotremove.c | 4 +-
modules/tools/stats.c | 26 +-
modules/tools/tools.c | 60 +
modules/volume/Makefile.am | 52 +-
modules/volume/Makefile.in | 265 +-
modules/volume/volume.c | 46 +
modules/volume/volume_calibrate.c | 188 +-
modules/volume/volume_extract.c | 445 +-
modules/volume/volume_fdfit.c | 56 +-
modules/volume/volume_invert.c | 40 +-
modules/volume/volume_kmeans.c | 95 +-
modules/volume/volume_kmedians.c | 27 +-
modules/volume/volume_linestat.c | 72 +-
modules/volume/volume_slice.c | 96 +-
modules/volume/volume_swaxes.c | 716 +
modules/volume/volume_zcal.c | 4 +-
modules/volume/volumeops.c | 89 +
modules/xyz/Makefile.am | 39 +-
modules/xyz/Makefile.in | 132 +-
modules/xyz/xyz.c | 30 +
modules/xyz/xyz_drift.c | 192 +-
modules/xyz/xyz_level.c | 4 +-
modules/xyz/xyz_raster.c | 323 +-
perl/Makefile.in | 16 +-
pixmaps/Makefile.am | 1203 +-
pixmaps/Makefile.in | 1466 +-
pixmaps/gwy_3d_base-24.png | Bin 1316 -> 1119 bytes
pixmaps/gwy_arithmetic-24.png | Bin 314 -> 250 bytes
pixmaps/gwy_arithmetic-24.xcf | Bin 8203 -> 0 bytes
pixmaps/gwy_bold-20.png | Bin 282 -> 353 bytes
pixmaps/gwy_cantilever-24.png | Bin 642 -> 558 bytes
pixmaps/gwy_cantilever-24.xcf | Bin 3917 -> 0 bytes
pixmaps/gwy_color_range-24.png | Bin 426 -> 354 bytes
pixmaps/gwy_color_range-24.xcf | Bin 12645 -> 0 bytes
pixmaps/gwy_color_range_adaptive-24.png | Bin 674 -> 863 bytes
pixmaps/gwy_color_range_auto-24.png | Bin 592 -> 432 bytes
pixmaps/gwy_color_range_fixed-24.png | Bin 429 -> 391 bytes
pixmaps/gwy_color_range_full-24.png | Bin 334 -> 234 bytes
pixmaps/gwy_convolution-24.png | Bin 323 -> 337 bytes
pixmaps/gwy_correct_affine-24.png | Bin 1292 -> 721 bytes
pixmaps/gwy_correlation_mask-24.png | Bin 0 -> 361 bytes
pixmaps/gwy_crop-24.png | Bin 746 -> 452 bytes
pixmaps/gwy_crop-24.xcf | Bin 5202 -> 0 bytes
pixmaps/gwy_cwt-24.png | Bin 589 -> 716 bytes
pixmaps/gwy_data_measure-24.png | Bin 228 -> 214 bytes
pixmaps/gwy_direction-24.xcf | Bin 8928 -> 0 bytes
pixmaps/gwy_disconnected-24.png | Bin 0 -> 486 bytes
pixmaps/gwy_distance-24.png | Bin 973 -> 316 bytes
pixmaps/gwy_distance_transform-24.png | Bin 1187 -> 786 bytes
pixmaps/gwy_distribution_angle-24.png | Bin 689 -> 689 bytes
pixmaps/gwy_distribution_slope-24.png | Bin 580 -> 654 bytes
pixmaps/gwy_drift-24.png | Bin 1396 -> 1468 bytes
pixmaps/gwy_dwt-24.png | Bin 640 -> 815 bytes
pixmaps/gwy_edge-24.png | Bin 190 -> 190 bytes
pixmaps/gwy_edge-24.xcf | Bin 3964 -> 0 bytes
pixmaps/gwy_enforce_distribution-24.png | Bin 647 -> 766 bytes
pixmaps/gwy_entropy-24.png | Bin 305 -> 203 bytes
pixmaps/gwy_extend-24.png | Bin 262 -> 535 bytes
pixmaps/gwy_extract_path-24.png | Bin 989 -> 1065 bytes
pixmaps/gwy_extract_path-24.xcf | Bin 2658 -> 0 bytes
pixmaps/gwy_facet_level-24.png | Bin 1089 -> 1193 bytes
pixmaps/gwy_favourite-24.png | Bin 1219 -> 1146 bytes
pixmaps/gwy_favourite-24.xcf | Bin 2715 -> 0 bytes
pixmaps/gwy_fft-24.png | Bin 484 -> 728 bytes
pixmaps/gwy_fft-24.xcf | Bin 5426 -> 0 bytes
pixmaps/gwy_fft_2d-24.png | Bin 337 -> 657 bytes
pixmaps/gwy_fft_filter_1d-24.png | Bin 0 -> 611 bytes
pixmaps/gwy_fft_filter_2d-24.png | Bin 367 -> 300 bytes
pixmaps/gwy_filter-24.png | Bin 1069 -> 311 bytes
pixmaps/gwy_filter-24.xcf | Bin 7245 -> 0 bytes
pixmaps/gwy_find_peaks-24.png | Bin 539 -> 676 bytes
pixmaps/gwy_fit_shape-24.png | Bin 0 -> 1244 bytes
pixmaps/gwy_fix_zero-24.png | Bin 509 -> 385 bytes
pixmaps/gwy_flip_horizontally-24.png | Bin 809 -> 585 bytes
pixmaps/gwy_flip_horizontally-24.xcf | Bin 4506 -> 0 bytes
pixmaps/gwy_flip_vertically-24.png | Bin 855 -> 567 bytes
pixmaps/gwy_flip_vertically-24.xcf | Bin 5232 -> 0 bytes
pixmaps/gwy_fractal-24.png | Bin 943 -> 710 bytes
pixmaps/gwy_fractal_correction-24.png | Bin 0 -> 734 bytes
pixmaps/gwy_fractal_measure-24.png | Bin 0 -> 698 bytes
pixmaps/gwy_gl_material-16.png | Bin 759 -> 829 bytes
pixmaps/gwy_gl_material-16.xcf | Bin 1465 -> 0 bytes
pixmaps/gwy_gradient-24.xcf | Bin 4005 -> 0 bytes
pixmaps/gwy_gradient_horizontal-24.png | Bin 854 -> 615 bytes
pixmaps/gwy_gradient_vertical-24.png | Bin 842 -> 613 bytes
pixmaps/gwy_grain_correlation-24.png | Bin 1007 -> 732 bytes
pixmaps/gwy_grain_exscribed_circle-24.png | Bin 964 -> 531 bytes
pixmaps/gwy_grain_inscribed_circle-24.png | Bin 1023 -> 634 bytes
pixmaps/gwy_grains-24.png | Bin 748 -> 424 bytes
pixmaps/gwy_grains-24.xcf | Bin 21806 -> 0 bytes
pixmaps/gwy_grains_edge-24.png | Bin 1054 -> 492 bytes
pixmaps/gwy_grains_edge_remove-24.png | Bin 699 -> 1232 bytes
pixmaps/gwy_grains_graph-24.png | Bin 989 -> 430 bytes
pixmaps/gwy_grains_measure-24.png | Bin 316 -> 573 bytes
pixmaps/gwy_grains_remove-24.png | Bin 881 -> 493 bytes
pixmaps/gwy_grains_water-24.png | Bin 1172 -> 1055 bytes
pixmaps/gwy_graph-24.png | Bin 330 -> 697 bytes
pixmaps/gwy_graph-24.xcf | Bin 14780 -> 0 bytes
pixmaps/gwy_graph_align-24.png | Bin 503 -> 555 bytes
pixmaps/gwy_graph_cut-24.png | Bin 417 -> 523 bytes
pixmaps/gwy_graph_dos-24.png | Bin 591 -> 1083 bytes
pixmaps/gwy_graph_export_ascii-24.png | Bin 721 -> 314 bytes
pixmaps/gwy_graph_export_png-24.png | Bin 742 -> 314 bytes
pixmaps/gwy_graph_export_vector-24.png | Bin 803 -> 401 bytes
pixmaps/gwy_graph_fd-24.png | Bin 407 -> 805 bytes
pixmaps/gwy_graph_filter-24.png | Bin 497 -> 864 bytes
pixmaps/gwy_graph_function-24.png | Bin 534 -> 993 bytes
pixmaps/gwy_graph_halfgauss-24.png | Bin 280 -> 473 bytes
pixmaps/gwy_graph_level-24.png | Bin 445 -> 986 bytes
pixmaps/gwy_graph_measure-24.png | Bin 376 -> 628 bytes
pixmaps/gwy_graph_palette-24.png | Bin 529 -> 487 bytes
pixmaps/gwy_graph_pointer-24.png | Bin 915 -> 851 bytes
pixmaps/gwy_graph_ruler-24.png | Bin 588 -> 611 bytes
pixmaps/gwy_graph_vertical-24.png | Bin 330 -> 643 bytes
pixmaps/gwy_graph_zoom-24.xcf | Bin 6295 -> 0 bytes
pixmaps/gwy_graph_zoom_fit-24.png | Bin 1287 -> 1126 bytes
pixmaps/gwy_graph_zoom_in-24.png | Bin 1285 -> 1123 bytes
pixmaps/gwy_graph_zoom_out-24.png | Bin 1242 -> 1105 bytes
pixmaps/gwy_hough-24.png | Bin 719 -> 650 bytes
pixmaps/gwy_immerse-24.png | Bin 279 -> 209 bytes
pixmaps/gwy_iso_roughness-24.png | Bin 495 -> 723 bytes
pixmaps/gwy_iso_roughness-24.xcf | Bin 1552 -> 0 bytes
pixmaps/gwy_italic-20.png | Bin 225 -> 258 bytes
pixmaps/gwy_less-24.png | Bin 804 -> 1017 bytes
pixmaps/gwy_less-24.xcf | Bin 4574 -> 0 bytes
pixmaps/gwy_level-24.png | Bin 610 -> 290 bytes
pixmaps/gwy_level-24.xcf | Bin 15952 -> 0 bytes
pixmaps/gwy_level_flatten_base-24.png | Bin 636 -> 1237 bytes
pixmaps/gwy_level_median-24.png | Bin 564 -> 659 bytes
pixmaps/gwy_level_triangle-24.png | Bin 1075 -> 870 bytes
pixmaps/gwy_light_rotate-24.png | Bin 1250 -> 1157 bytes
pixmaps/gwy_light_rotate-24.xcf | Bin 5136 -> 0 bytes
pixmaps/gwy_line_level-24.png | Bin 284 -> 235 bytes
pixmaps/gwy_load_debug-20.png | Bin 1248 -> 1148 bytes
pixmaps/gwy_load_info-20.png | Bin 881 -> 991 bytes
pixmaps/gwy_load_message-20.xcf | Bin 6909 -> 0 bytes
pixmaps/gwy_load_warning-20.png | Bin 967 -> 900 bytes
pixmaps/gwy_local_slope-24.png | Bin 1457 -> 363 bytes
pixmaps/gwy_logscale_horizontal-24.png | Bin 111 -> 335 bytes
pixmaps/gwy_logscale_vertical-24.png | Bin 124 -> 340 bytes
pixmaps/gwy_mark_outliers-24.png | Bin 0 -> 232 bytes
pixmaps/gwy_mark_scars-24.png | Bin 0 -> 246 bytes
pixmaps/gwy_mark_with-24.png | Bin 283 -> 387 bytes
pixmaps/gwy_markup-20.xcf | Bin 3808 -> 0 bytes
pixmaps/gwy_mask-16.png | Bin 150 -> 184 bytes
pixmaps/gwy_mask-16.xcf | Bin 1010 -> 0 bytes
pixmaps/gwy_mask-24.png | Bin 154 -> 217 bytes
pixmaps/gwy_mask-24.xcf | Bin 30646 -> 0 bytes
pixmaps/gwy_mask_add-24.png | Bin 241 -> 246 bytes
pixmaps/gwy_mask_circle-24.png | Bin 237 -> 674 bytes
pixmaps/gwy_mask_circle_exclusive-24.png | Bin 179 -> 541 bytes
pixmaps/gwy_mask_circle_inclusive-24.png | Bin 175 -> 578 bytes
pixmaps/gwy_mask_distribute-24.png | Bin 408 -> 290 bytes
pixmaps/gwy_mask_editor-24.png | Bin 387 -> 927 bytes
pixmaps/gwy_mask_exclude-24.png | Bin 192 -> 259 bytes
pixmaps/gwy_mask_exclude_circle-24.png | Bin 264 -> 541 bytes
pixmaps/gwy_mask_extract-24.png | Bin 512 -> 268 bytes
pixmaps/gwy_mask_fill_draw-24.png | Bin 258 -> 931 bytes
pixmaps/gwy_mask_fill_erase-24.png | Bin 292 -> 844 bytes
pixmaps/gwy_mask_grow-24.png | Bin 203 -> 584 bytes
pixmaps/gwy_mask_intersect-24.png | Bin 241 -> 270 bytes
pixmaps/gwy_mask_invert-24.png | Bin 273 -> 441 bytes
pixmaps/gwy_mask_line-24.png | Bin 307 -> 416 bytes
pixmaps/gwy_mask_morph-24.png | Bin 389 -> 321 bytes
pixmaps/gwy_mask_paint_draw-24.png | Bin 331 -> 1239 bytes
pixmaps/gwy_mask_paint_erase-24.png | Bin 367 -> 1278 bytes
pixmaps/gwy_mask_rect_exclusive-24.png | Bin 133 -> 195 bytes
pixmaps/gwy_mask_rect_inclusive-24.png | Bin 130 -> 193 bytes
pixmaps/gwy_mask_remove-24.png | Bin 327 -> 319 bytes
pixmaps/gwy_mask_set-24.png | Bin 0 -> 197 bytes
pixmaps/gwy_mask_shrink-24.png | Bin 212 -> 935 bytes
pixmaps/gwy_mask_subtract-24.png | Bin 240 -> 272 bytes
pixmaps/gwy_mask_thin-24.png | Bin 321 -> 949 bytes
pixmaps/gwy_measure-24.xcf | Bin 15275 -> 0 bytes
pixmaps/gwy_measure_lattice-24.png | Bin 1484 -> 320 bytes
pixmaps/gwy_merge-24.png | Bin 199 -> 217 bytes
pixmaps/gwy_more-24.png | Bin 778 -> 1028 bytes
pixmaps/gwy_more-24.xcf | Bin 5208 -> 0 bytes
pixmaps/gwy_mutual_crop-24.png | Bin 884 -> 205 bytes
pixmaps/gwy_neural.svg | 347 -
pixmaps/gwy_neural_apply-24.png | Bin 1253 -> 951 bytes
pixmaps/gwy_neural_train-24.png | Bin 1250 -> 866 bytes
pixmaps/gwy_next-24.png | Bin 0 -> 493 bytes
pixmaps/gwy_null_offsets-24.png | Bin 0 -> 316 bytes
pixmaps/gwy_palette-24.xcf | Bin 6449 -> 0 bytes
pixmaps/gwy_palettes-16.png | Bin 230 -> 221 bytes
pixmaps/gwy_palettes-16.xcf | Bin 1133 -> 0 bytes
pixmaps/gwy_palettes-24.png | Bin 635 -> 303 bytes
pixmaps/gwy_path.svg | 387 -
pixmaps/gwy_path_level-24.png | Bin 758 -> 782 bytes
pixmaps/gwy_pointer_measure-24.png | Bin 968 -> 695 bytes
pixmaps/gwy_poly_distort-24.png | Bin 1500 -> 1033 bytes
pixmaps/gwy_poly_distort.svg | 301 -
pixmaps/gwy_polynom-24.png | Bin 408 -> 942 bytes
pixmaps/gwy_polynom-24.xcf | Bin 3365 -> 0 bytes
pixmaps/gwy_polynom_level-24.png | Bin 1033 -> 1046 bytes
pixmaps/gwy_presentation_attach-24.png | Bin 1302 -> 0 bytes
pixmaps/gwy_presentation_edge_canny-24.png | Bin 922 -> 0 bytes
pixmaps/gwy_presentation_edge_harris_corner-24.png | Bin 1233 -> 0 bytes
pixmaps/gwy_presentation_edge_hough-24.png | Bin 1199 -> 0 bytes
pixmaps/gwy_presentation_edge_inclination-24.png | Bin 1387 -> 0 bytes
pixmaps/gwy_presentation_edge_laplace_gauss-24.png | Bin 1231 -> 0 bytes
...wy_presentation_edge_local_non_linearity-24.png | Bin 1396 -> 0 bytes
pixmaps/gwy_presentation_edge_prewitt-24.png | Bin 1452 -> 0 bytes
pixmaps/gwy_presentation_edge_rms-24.png | Bin 1308 -> 0 bytes
pixmaps/gwy_presentation_edge_rms_edge-24.png | Bin 1246 -> 0 bytes
pixmaps/gwy_presentation_edge_sobel-24.png | Bin 1456 -> 0 bytes
pixmaps/gwy_presentation_edge_step-24.png | Bin 1443 -> 0 bytes
pixmaps/gwy_presentation_edge_zero_crossing-24.png | Bin 804 -> 0 bytes
pixmaps/gwy_presentation_extract-24.png | Bin 1168 -> 0 bytes
pixmaps/gwy_presentation_local_contrast-24.png | Bin 1330 -> 0 bytes
pixmaps/gwy_presentation_log-24.png | Bin 1233 -> 0 bytes
pixmaps/gwy_presentation_rank-24.png | Bin 1473 -> 0 bytes
pixmaps/gwy_presentation_remove-24.png | Bin 1378 -> 0 bytes
pixmaps/gwy_presentation_sem-24.png | Bin 1345 -> 0 bytes
pixmaps/gwy_presentation_shading-24.png | Bin 1365 -> 0 bytes
pixmaps/gwy_previous-24.png | Bin 0 -> 461 bytes
pixmaps/gwy_profile-24.png | Bin 586 -> 592 bytes
pixmaps/gwy_profile-24.xcf | Bin 1726 -> 0 bytes
pixmaps/gwy_pygwy-24.png | Bin 932 -> 813 bytes
pixmaps/gwy_pygwy-24.xcf | Bin 2351 -> 0 bytes
pixmaps/gwy_remove_under_mask-24.png | Bin 369 -> 438 bytes
pixmaps/gwy_remove_under_mask-24.xcf | Bin 2054 -> 0 bytes
pixmaps/gwy_rotate-24.png | Bin 1707 -> 835 bytes
pixmaps/gwy_rotate-24.xcf | Bin 6496 -> 0 bytes
pixmaps/gwy_rotate_180-24.png | Bin 1382 -> 1272 bytes
pixmaps/gwy_rotate_180-24.xcf | Bin 4363 -> 0 bytes
pixmaps/gwy_rotate_3d-24.png | Bin 0 -> 1212 bytes
pixmaps/gwy_rotate_90_ccw-24.png | Bin 1071 -> 660 bytes
pixmaps/gwy_rotate_90_ccw-24.xcf | Bin 4008 -> 0 bytes
pixmaps/gwy_rotate_90_cw-24.png | Bin 1116 -> 616 bytes
pixmaps/gwy_rotate_90_cw-24.xcf | Bin 3972 -> 0 bytes
pixmaps/gwy_scale-24.png | Bin 422 -> 377 bytes
pixmaps/gwy_scale-24.xcf | Bin 3472 -> 0 bytes
pixmaps/gwy_scale_horizontally-24.png | Bin 1255 -> 614 bytes
pixmaps/gwy_scale_horizontally-24.xcf | Bin 6895 -> 0 bytes
pixmaps/gwy_scale_vertically-24.png | Bin 1097 -> 577 bytes
pixmaps/gwy_scale_vertically-24.xcf | Bin 8028 -> 0 bytes
pixmaps/gwy_scars-24.png | Bin 276 -> 206 bytes
pixmaps/gwy_selection-24.xcf | Bin 1683 -> 0 bytes
pixmaps/gwy_selections-24.png | Bin 342 -> 307 bytes
pixmaps/gwy_shader-24.png | Bin 1256 -> 1288 bytes
pixmaps/gwy_shader-24.xcf | Bin 4787 -> 0 bytes
pixmaps/gwy_spectrum-24.png | Bin 464 -> 990 bytes
pixmaps/gwy_spectrum-24.xcf | Bin 1265 -> 0 bytes
pixmaps/gwy_spot_remove-24.png | Bin 309 -> 361 bytes
pixmaps/gwy_spot_remove-24.xcf | Bin 2284 -> 0 bytes
pixmaps/gwy_stat_quantities-24.png | Bin 642 -> 316 bytes
pixmaps/gwy_stat_quantities-24.xcf | Bin 6556 -> 0 bytes
pixmaps/gwy_stats-24.xcf | Bin 29299 -> 0 bytes
pixmaps/gwy_straighten_path-24.png | Bin 1142 -> 994 bytes
pixmaps/gwy_subscript-20.png | Bin 382 -> 396 bytes
pixmaps/gwy_superscript-20.png | Bin 400 -> 402 bytes
pixmaps/gwy_synthetic-24.xcf | Bin 21514 -> 0 bytes
pixmaps/gwy_synthetic_ballistic_deposition-24.png | Bin 1790 -> 1424 bytes
pixmaps/gwy_synthetic_brownian_motion-24.png | Bin 1348 -> 1352 bytes
pixmaps/gwy_synthetic_columnar-24.png | Bin 1395 -> 1414 bytes
pixmaps/gwy_synthetic_diffusion-24.png | Bin 1287 -> 1166 bytes
pixmaps/gwy_synthetic_domains-24.png | Bin 1596 -> 1271 bytes
pixmaps/gwy_synthetic_fibres-24.png | Bin 0 -> 1178 bytes
pixmaps/gwy_synthetic_lattice-24.png | Bin 1398 -> 1212 bytes
pixmaps/gwy_synthetic_line_noise-24.png | Bin 436 -> 382 bytes
pixmaps/gwy_synthetic_noise-24.png | Bin 1841 -> 1490 bytes
pixmaps/gwy_synthetic_objects-24.png | Bin 994 -> 958 bytes
pixmaps/gwy_synthetic_particles-24.png | Bin 1476 -> 1312 bytes
pixmaps/gwy_synthetic_pattern-24.png | Bin 766 -> 613 bytes
pixmaps/gwy_synthetic_phases-24.png | Bin 0 -> 354 bytes
pixmaps/gwy_synthetic_spectral-24.png | Bin 1383 -> 1379 bytes
pixmaps/gwy_synthetic_waves-24.png | Bin 1665 -> 1259 bytes
pixmaps/gwy_tilt-24.png | Bin 521 -> 1511 bytes
pixmaps/gwy_tip-24.xcf | Bin 13355 -> 0 bytes
pixmaps/gwy_tip_dilation-24.png | Bin 614 -> 839 bytes
pixmaps/gwy_tip_erosion-24.png | Bin 585 -> 781 bytes
pixmaps/gwy_tip_estimation-24.png | Bin 818 -> 663 bytes
pixmaps/gwy_tip_indent_analyze-24.png | Bin 778 -> 750 bytes
pixmaps/gwy_tip_lateral_force-24.png | Bin 643 -> 1342 bytes
pixmaps/gwy_tip_map-24.png | Bin 1695 -> 899 bytes
pixmaps/gwy_tip_model-24.png | Bin 745 -> 599 bytes
pixmaps/gwy_tip_pid-24.png | Bin 821 -> 767 bytes
pixmaps/gwy_transform-24.xcf | Bin 5131 -> 0 bytes
pixmaps/gwy_unrotate-24.png | Bin 409 -> 623 bytes
pixmaps/gwy_unrotate-24.xcf | Bin 2779 -> 0 bytes
pixmaps/gwy_value_invert-24.png | Bin 321 -> 378 bytes
pixmaps/gwy_value_invert-24.xcf | Bin 2930 -> 0 bytes
pixmaps/gwy_volume-24.png | Bin 1385 -> 1404 bytes
pixmaps/gwy_volume.svg | 2277 ---
pixmaps/gwy_volume_calibrate-24.png | Bin 1118 -> 1106 bytes
pixmaps/gwy_volume_dimensions-24.png | Bin 1281 -> 909 bytes
pixmaps/gwy_volume_fd-24.png | Bin 1425 -> 1630 bytes
pixmaps/gwy_volume_invert-24.png | Bin 1612 -> 1056 bytes
pixmaps/gwy_volume_kmeans-24.png | Bin 1437 -> 1179 bytes
pixmaps/gwy_volume_kmedians-24.png | Bin 1430 -> 988 bytes
pixmaps/gwy_volume_slice-24.png | Bin 1575 -> 1359 bytes
pixmaps/gwy_volumize-24.png | Bin 1489 -> 1098 bytes
pixmaps/gwy_volumize_layers-24.png | Bin 1702 -> 1252 bytes
pixmaps/gwy_xy_denoise-24.png | Bin 0 -> 243 bytes
pixmaps/gwy_zero_mean-24.png | Bin 579 -> 394 bytes
pixmaps/gwy_zoom-24.xcf | Bin 7335 -> 0 bytes
pixmaps/gwy_zoom_1_1-24.png | Bin 1451 -> 1112 bytes
pixmaps/gwy_zoom_fit-24.png | Bin 1454 -> 1101 bytes
pixmaps/gwy_zoom_in-24.png | Bin 1449 -> 1090 bytes
pixmaps/gwy_zoom_out-24.png | Bin 1408 -> 1084 bytes
pixmaps/src/Makefile.am | 242 +
pixmaps/src/Makefile.in | 805 +
pixmaps/{ => src}/cd_line.xcf | Bin
pixmaps/{ => src}/cd_rline.xcf | Bin
pixmaps/{ => src}/cd_rstep.xcf | Bin
pixmaps/{ => src}/cd_step.xcf | Bin
pixmaps/src/gwy_3d_base-24.svg | 156 +
pixmaps/{ => src}/gwy_3d_base-24.xcf | Bin
pixmaps/src/gwy_arithmetic-24.svg | 117 +
pixmaps/src/gwy_bold-20.svg | 106 +
pixmaps/src/gwy_cantilever-24.svg | 139 +
pixmaps/src/gwy_color_range-24.svg | 143 +
pixmaps/src/gwy_color_range_adaptive-24.svg | 121 +
pixmaps/src/gwy_color_range_auto-24.svg | 131 +
pixmaps/src/gwy_color_range_fixed-24.svg | 166 +
pixmaps/src/gwy_color_range_full-24.svg | 112 +
pixmaps/src/gwy_convolution-24.svg | 1050 ++
pixmaps/src/gwy_correct_affine-24.svg | 176 +
pixmaps/src/gwy_correlation_mask-24.svg | 180 +
pixmaps/src/gwy_crop-24.svg | 158 +
pixmaps/src/gwy_cwt-24.svg | 1632 ++
pixmaps/src/gwy_data_measure-24.svg | 574 +
pixmaps/src/gwy_disconnected-24.svg | 178 +
pixmaps/src/gwy_distance-24.svg | 156 +
pixmaps/src/gwy_distance_transform-24.svg | 235 +
pixmaps/src/gwy_distribution_angle-24.svg | 132 +
pixmaps/src/gwy_distribution_slope-24.svg | 139 +
pixmaps/src/gwy_drift-96.svg | 224 +
pixmaps/src/gwy_dwt-24.svg | 1352 ++
pixmaps/src/gwy_edge-24.svg | 99 +
pixmaps/src/gwy_enforce_distribution-24.svg | 144 +
pixmaps/src/gwy_entropy-24.svg | 153 +
pixmaps/src/gwy_extend-24.svg | 186 +
pixmaps/src/gwy_extract_path-24.svg | 172 +
pixmaps/src/gwy_facet_level-24.svg | 263 +
pixmaps/src/gwy_favourite-24.svg | 199 +
pixmaps/src/gwy_fft-24.svg | 656 +
pixmaps/src/gwy_fft_2d-24.svg | 117 +
pixmaps/src/gwy_fft_filter_1d-24.svg | 147 +
pixmaps/src/gwy_fft_filter_2d-24.svg | 173 +
pixmaps/src/gwy_filter-24.svg | 895 ++
pixmaps/src/gwy_find_peaks-24.svg | 174 +
pixmaps/src/gwy_fit_shape-24.svg | 205 +
pixmaps/src/gwy_fix_zero-24.svg | 163 +
pixmaps/src/gwy_flip_horizontally-24.svg | 121 +
pixmaps/src/gwy_flip_vertically-24.svg | 122 +
pixmaps/src/gwy_fractal-24.svg | 128 +
pixmaps/src/gwy_fractal_correction-24.svg | 117 +
pixmaps/src/gwy_fractal_measure-24.svg | 136 +
pixmaps/src/gwy_gl_material-16.svg | 121 +
pixmaps/src/gwy_gradient_horizontal-24.svg | 116 +
pixmaps/src/gwy_gradient_vertical-24.svg | 120 +
pixmaps/src/gwy_grain_correlation-24.svg | 219 +
pixmaps/src/gwy_grain_exscribed_circle-24.svg | 82 +
pixmaps/src/gwy_grain_inscribed_circle-24.svg | 82 +
pixmaps/src/gwy_grains-24.svg | 163 +
pixmaps/src/gwy_grains_edge-24.svg | 204 +
pixmaps/src/gwy_grains_edge_remove-24.svg | 296 +
pixmaps/src/gwy_grains_graph-24.svg | 188 +
pixmaps/src/gwy_grains_measure-24.svg | 122 +
pixmaps/src/gwy_grains_remove-24.svg | 180 +
pixmaps/src/gwy_grains_water-24.svg | 271 +
pixmaps/src/gwy_graph-24.svg | 132 +
pixmaps/src/gwy_graph_align-24.svg | 143 +
pixmaps/src/gwy_graph_cut-24.svg | 142 +
pixmaps/src/gwy_graph_dos-24.svg | 170 +
pixmaps/src/gwy_graph_export_ascii-24.svg | 247 +
pixmaps/src/gwy_graph_export_png-24.svg | 215 +
pixmaps/src/gwy_graph_export_vector-24.svg | 216 +
pixmaps/src/gwy_graph_fd-24.svg | 138 +
pixmaps/src/gwy_graph_filter-24.svg | 144 +
pixmaps/src/gwy_graph_function-24.svg | 138 +
pixmaps/src/gwy_graph_halfgauss-24.svg | 131 +
pixmaps/src/gwy_graph_level-24.svg | 160 +
pixmaps/src/gwy_graph_measure-24.svg | 1669 ++
pixmaps/src/gwy_graph_palette-24.svg | 118 +
pixmaps/src/gwy_graph_pointer-24.svg | 150 +
pixmaps/src/gwy_graph_ruler-24.svg | 181 +
pixmaps/src/gwy_graph_vertical-24.svg | 132 +
pixmaps/src/gwy_graph_zoom_fit-24.svg | 405 +
pixmaps/src/gwy_graph_zoom_in-24.svg | 405 +
pixmaps/src/gwy_graph_zoom_out-24.svg | 386 +
.../html => pixmaps/src}/gwy_hough-24.png | Bin
pixmaps/src/gwy_hough-24.svg | 163 +
pixmaps/src/gwy_immerse-24.svg | 87 +
pixmaps/src/gwy_iso_roughness-24.svg | 93 +
pixmaps/src/gwy_italic-20.svg | 106 +
pixmaps/src/gwy_less-24.svg | 85 +
pixmaps/src/gwy_level-24.svg | 102 +
pixmaps/src/gwy_level_flatten_base-24.svg | 217 +
pixmaps/src/gwy_level_median-24.svg | 210 +
pixmaps/src/gwy_level_triangle-24.svg | 110 +
pixmaps/src/gwy_light_rotate-24.svg | 157 +
pixmaps/src/gwy_line_level-24.svg | 177 +
pixmaps/src/gwy_load_debug-20.svg | 133 +
pixmaps/src/gwy_load_info-20.svg | 144 +
pixmaps/src/gwy_load_warning-20.svg | 148 +
.../html => pixmaps/src}/gwy_local_slope-24.png | Bin
pixmaps/src/gwy_local_slope-24.svg | 163 +
pixmaps/src/gwy_logscale_horizontal-24.svg | 868 +
pixmaps/src/gwy_logscale_vertical-24.svg | 872 +
pixmaps/src/gwy_mark_outliers-24.svg | 160 +
pixmaps/src/gwy_mark_scars-24.svg | 149 +
pixmaps/src/gwy_mark_with-24.svg | 119 +
pixmaps/src/gwy_mask-16.svg | 79 +
pixmaps/src/gwy_mask-24.svg | 76 +
pixmaps/src/gwy_mask_add-24.svg | 90 +
pixmaps/src/gwy_mask_circle-24.svg | 76 +
pixmaps/src/gwy_mask_circle_exclusive-24.svg | 83 +
pixmaps/src/gwy_mask_circle_inclusive-24.svg | 76 +
pixmaps/src/gwy_mask_distribute-24.svg | 107 +
pixmaps/src/gwy_mask_editor-24.svg | 122 +
pixmaps/src/gwy_mask_exclude-24.svg | 83 +
pixmaps/src/gwy_mask_exclude_circle-24.svg | 83 +
pixmaps/src/gwy_mask_extract-24.svg | 106 +
pixmaps/src/gwy_mask_fill_draw-24.svg | 115 +
pixmaps/src/gwy_mask_fill_erase-24.svg | 122 +
pixmaps/src/gwy_mask_grow-24.svg | 175 +
pixmaps/src/gwy_mask_intersect-24.svg | 104 +
pixmaps/src/gwy_mask_invert-24.svg | 121 +
pixmaps/src/gwy_mask_line-24.svg | 79 +
pixmaps/src/gwy_mask_morph-24.svg | 102 +
pixmaps/src/gwy_mask_paint_draw-24.svg | 114 +
pixmaps/src/gwy_mask_paint_erase-24.svg | 121 +
pixmaps/src/gwy_mask_rect_exclusive-24.svg | 88 +
pixmaps/src/gwy_mask_rect_inclusive-24.svg | 76 +
pixmaps/src/gwy_mask_remove-24.svg | 101 +
pixmaps/src/gwy_mask_shrink-24.svg | 182 +
pixmaps/src/gwy_mask_subtract-24.svg | 95 +
pixmaps/src/gwy_mask_thin-24.svg | 103 +
pixmaps/src/gwy_measure_lattice-24.svg | 310 +
pixmaps/src/gwy_merge-24.svg | 93 +
pixmaps/src/gwy_more-24.svg | 91 +
pixmaps/src/gwy_mutual_crop-24.svg | 99 +
pixmaps/src/gwy_neural_apply-24.svg | 228 +
pixmaps/src/gwy_neural_train-24.svg | 216 +
pixmaps/src/gwy_next-24.svg | 112 +
pixmaps/src/gwy_null_offsets-24.svg | 703 +
pixmaps/src/gwy_palettes-16.svg | 154 +
pixmaps/src/gwy_palettes-24.svg | 183 +
pixmaps/src/gwy_path_level-24.svg | 133 +
pixmaps/src/gwy_pointer_measure-24.svg | 124 +
pixmaps/src/gwy_poly_distort-24.svg | 130 +
pixmaps/src/gwy_polynom-24.svg | 94 +
pixmaps/src/gwy_polynom_level-24.svg | 129 +
pixmaps/{ => src}/gwy_presentation-24.xcf | Bin
.../src}/gwy_presentation_attach-24.png | Bin
.../src}/gwy_presentation_edge_canny-24.png | Bin
.../gwy_presentation_edge_harris_corner-24.png | Bin
.../src}/gwy_presentation_edge_hough-24.png | Bin
.../src}/gwy_presentation_edge_inclination-24.png | Bin
.../gwy_presentation_edge_laplace_gauss-24.png | Bin
...wy_presentation_edge_local_non_linearity-24.png | Bin
.../src}/gwy_presentation_edge_prewitt-24.png | Bin
.../src}/gwy_presentation_edge_rms-24.png | Bin
.../src}/gwy_presentation_edge_rms_edge-24.png | Bin
.../src}/gwy_presentation_edge_sobel-24.png | Bin
.../src}/gwy_presentation_edge_step-24.png | Bin
.../gwy_presentation_edge_zero_crossing-24.png | Bin
.../src}/gwy_presentation_extract-24.png | Bin
.../src}/gwy_presentation_local_contrast-24.png | Bin
.../src}/gwy_presentation_log-24.png | Bin
pixmaps/{ => src}/gwy_presentation_ops-24.xcf | Bin
.../src}/gwy_presentation_rank-24.png | Bin
.../src}/gwy_presentation_remove-24.png | Bin
.../src}/gwy_presentation_sem-24.png | Bin
.../src}/gwy_presentation_shading-24.png | Bin
pixmaps/src/gwy_previous-24.svg | 114 +
pixmaps/src/gwy_profile-24.svg | 486 +
pixmaps/src/gwy_pygwy-24.svg | 276 +
pixmaps/src/gwy_remove_under_mask-24.svg | 111 +
pixmaps/src/gwy_rotate-24.svg | 130 +
pixmaps/src/gwy_rotate_180-24.svg | 151 +
pixmaps/src/gwy_rotate_3d-24.svg | 156 +
pixmaps/src/gwy_rotate_90_ccw-24.svg | 200 +
pixmaps/src/gwy_rotate_90_cw-24.svg | 214 +
pixmaps/src/gwy_scale-24.svg | 105 +
pixmaps/src/gwy_scale_horizontally-24.svg | 176 +
pixmaps/src/gwy_scale_vertically-24.svg | 176 +
pixmaps/src/gwy_scars-24.svg | 95 +
pixmaps/src/gwy_selections-24.svg | 147 +
pixmaps/src/gwy_shader-24.svg | 93 +
pixmaps/src/gwy_spectrum-24.svg | 117 +
pixmaps/src/gwy_spot_remove-24.svg | 98 +
pixmaps/src/gwy_stat_quantities-24.svg | 157 +
pixmaps/src/gwy_straighten_path-24.svg | 631 +
pixmaps/src/gwy_subscript-20.svg | 117 +
pixmaps/src/gwy_superscript-20.svg | 117 +
.../src/gwy_synthetic_ballistic_deposition-24.svg | 114 +
pixmaps/src/gwy_synthetic_brownian_motion-24.svg | 112 +
pixmaps/src/gwy_synthetic_columnar-24.svg | 113 +
pixmaps/src/gwy_synthetic_diffusion-24.svg | 110 +
pixmaps/src/gwy_synthetic_domains-24.svg | 111 +
pixmaps/src/gwy_synthetic_fibres-24.svg | 112 +
pixmaps/src/gwy_synthetic_lattice-24.svg | 110 +
pixmaps/src/gwy_synthetic_line_noise-24.svg | 96 +
pixmaps/src/gwy_synthetic_noise-24.svg | 115 +
pixmaps/src/gwy_synthetic_objects-24.svg | 105 +
pixmaps/src/gwy_synthetic_particles-24.svg | 112 +
pixmaps/src/gwy_synthetic_pattern-24.svg | 100 +
pixmaps/src/gwy_synthetic_phases-24.svg | 96 +
pixmaps/src/gwy_synthetic_spectral-24.svg | 112 +
pixmaps/src/gwy_synthetic_waves-24.svg | 111 +
pixmaps/src/gwy_tilt-24.svg | 177 +
pixmaps/src/gwy_tip_dilation-24.svg | 1121 ++
pixmaps/src/gwy_tip_erosion-24.svg | 1121 ++
pixmaps/src/gwy_tip_estimation-24.svg | 150 +
pixmaps/src/gwy_tip_indent_analyze-24.svg | 1115 ++
pixmaps/src/gwy_tip_lateral_force-24.svg | 212 +
pixmaps/src/gwy_tip_map-24.svg | 170 +
pixmaps/src/gwy_tip_model-24.svg | 161 +
pixmaps/src/gwy_tip_pid-24.svg | 1114 ++
pixmaps/src/gwy_transform-24.xcf | Bin 0 -> 5723 bytes
pixmaps/src/gwy_unrotate-24.svg | 123 +
pixmaps/src/gwy_value_invert-24.svg | 111 +
pixmaps/src/gwy_volume-24.svg | 106 +
pixmaps/src/gwy_volume_calibrate-24.svg | 186 +
pixmaps/src/gwy_volume_dimensions-24.svg | 634 +
pixmaps/src/gwy_volume_fd-24.svg | 126 +
pixmaps/src/gwy_volume_invert-24.svg | 153 +
pixmaps/src/gwy_volume_kmeans-24.svg | 187 +
pixmaps/src/gwy_volume_kmedians-24.svg | 181 +
pixmaps/src/gwy_volume_slice-24.svg | 117 +
pixmaps/src/gwy_xy_denoise-24.svg | 149 +
pixmaps/src/gwy_zero_mean-24.svg | 162 +
pixmaps/src/gwy_zoom_1_1-24.svg | 339 +
pixmaps/src/gwy_zoom_fit-24.svg | 290 +
pixmaps/src/gwy_zoom_in-24.svg | 271 +
pixmaps/src/gwy_zoom_out-24.svg | 251 +
plugins/Makefile.in | 16 +-
plugins/file/Makefile.in | 16 +-
plugins/process/Makefile.in | 16 +-
po/LINGUAS | 2 +-
po/POTFILES.in | 17 +
po/cs.gmo | Bin 262834 -> 275316 bytes
po/cs.po | 5044 +++---
po/de.gmo | Bin 79414 -> 78554 bytes
po/de.po | 5157 +++---
po/en_GB.gmo | Bin 249208 -> 261061 bytes
po/en_GB.po | 5094 +++---
po/es.gmo | Bin 56358 -> 55693 bytes
po/es.po | 5184 +++---
po/fr.gmo | Bin 271255 -> 284096 bytes
po/fr.po | 5188 +++---
po/gwyddion.pot | 4977 +++---
po/it.gmo | Bin 249846 -> 246962 bytes
po/it.po | 5169 +++---
po/ko.gmo | Bin 38411 -> 37804 bytes
po/ko.po | 5033 +++---
po/pt_BR.gmo | Bin 0 -> 263282 bytes
po/pt_BR.po | 16060 +++++++++++++++++++
po/ru.gmo | Bin 343531 -> 360269 bytes
po/ru.po | 5338 +++---
python/Makefile.in | 16 +-
ruby/Makefile.in | 16 +-
thumbnailer/Makefile.in | 16 +-
utils/Makefile.am | 3 +-
utils/Makefile.in | 19 +-
utils/gen-gwyddion-msvc-sln.py | 11 +-
utils/gen-module-bundle.sh | 55 +
utils/genmarshal.mk | 5 +-
utils/mkenum.mk | 5 +-
utils/update-api-indices.py | 3 +
utils/update-langs.py | 17 +-
utils/user-guide-modules | 24 +-
1566 files changed, 154148 insertions(+), 52579 deletions(-)
diff --git a/AUTHORS b/AUTHORS
index a22132e..b5abd2f 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -79,6 +79,8 @@ Samo Ziberna <samo.ziberna at aperesearch.com>
APE DAX import module improvements.
Antony Kikaxa <antony.kikaxa at gmail.com>
NanoScanTech format improvements.
+Felix Kling <kling at rybkachess.com>
+ Icons and other graphics.
=== Translators ===
@@ -98,6 +100,8 @@ François Riguet <francheu at caramail.com>
Russian.
Andrés Muñiz Piniella <andresmp at gmail.com>
Spanish.
+Fellype do Nascimento <fellypao at yahoo.com.br>
+ Brazilian Portugese.
Jeong Jiseong <stopstar at gist.ac.kr>
Korean.
diff --git a/INSTALL.gwyddion b/INSTALL.gwyddion
deleted file mode 100644
index 3900a14..0000000
--- a/INSTALL.gwyddion
+++ /dev/null
@@ -1,165 +0,0 @@
-
-Contents:
-0. Prebuilt binaries
-1. From sources -- Linux/Unix
-2. From sources -- MS Windows
-3. From sources -- Mac OS X
-4. From Subversion (Linux/Unix only)
-5. Pygwy under MS Windows
-6. Modules and plug-ins
-
-===[ 0. Prebuilt binaries ]==================================================
-
-Binary packages provided by us, i.e. installers from MS Windows, require no
-additional setup after standard package installation procedure. If you have
-never installed Gwyddion (or other Gtk+ application), you will need to
-install of Gtk+ runtime libraries prior to Gwyddion installation, we
-recommend GladeWin32 packages.
-
-We cannot tell for packages provided for other systems by other entities, but
-do not expect them to require any additional setup either.
-
-
-===[ 1. From sources -- Linux/Unix ]=========================================
-
-See the section Build Dependencies of the Gwyddion user guide for the list
-and description of required and optional packages.
-
-Read generic GNU installation instruction in INSTALL that describe the build
-process, common program arguments, and important environment variables.
-
-Quick instructions:
-Unpack tarball with sources, cd to the created directory, then run:
- ./configure
- make
-and as root run:
- make install
-
-If you have Gtk+ (or other packages, e.g., FFTW) in a nonstandard directory,
-assure PKG_CONFIG_PATH environment variable points to directory where
-gtk+-2.0.pc (e.g.) resides.
-
-If you install to a subdirectory of home, you will probably use option
---enable-home-installation of ./configure to put desktop integration files
-into the right places specified by XDG (i.e. outside the prefix).
-
-To prevent the installation of GConf schemas, even though you have enabled the
-GNOME thumbnailer, run `make install DISABLE_GCONF_SCHEMAS_INSTALL=yes'. To
-ease packaging, it is automatically disabled when DESTDIR is non-empty.
-
-
-===[ 2. Cross compilation for MS Windows ]===================================
-
-See the user guide.
-
-===[ 3. From sources -- Mac OS X ]===========================================
-
-Essentially, the Unix instructions apply here too.
-
-It's recommended to use Darwinports for installing the dependencies. You
-need to install ports for gtk2, pkg-config; that should pull all the other
-dependencies. It is recommended to install gtkglext and libxml2 too.
-
-To make sure headers and libraries are found where Darwinports install them
-you may want to explicitely set:
-
- CFLAGS='-I/opt/local/include -I/usr/X11R6/include'
- LDFLAGS='-L/opt/local/lib -I/usr/X11R6/lib'
-
-Also make sure /opt/local/bin is in the PATH so that pkg-config can be found.
-
-Note until Gtk+ Quartz port is finished, it's necessary to start an X11
-server before running Gwyddion.
-
-
-===[ 4. From Subversion (Linux/Unix only) ]==================================
-
-The Subversion repository generally doesn't contain generated files, no
-matter how unusual tools may be needed to generate them. Consider use of
-nightly snapshot tarballs available at
-
- http://gwyddion.net/download.php#head
-
-Prerequisities:
-- everything needed for compilation from tarballs
-- GNU autoconf 2.60 or newer
-- GNU automake 1.11 or newer
-- GNU libtool 1.4 or newer
-- Python-2.2 or newer
-- Perl5
-- gtk-doc 1.8 or newer
-- GNU gettext 0.12 or newer, including development stuff
-- who knows what else
-
-First of all run
- ./autogen.sh
-with any options you'd give to ./configure, note it always adds
---enable-maintainer-mode. You should add at least --enable-gtk-doc to
-build the API documentation (tarballs cannot be made without it).
-
-You should be able to build executables then with
- make
-
-At this point that all files that are included in source tarball should be
-created, and
- make install
-or
- make dist
-will work as expected.
-
-
-===[ 5. Pygwy under MS Windows ]=============================================
-
-1. Python 2.4.X
- Get Python sources
- Unpack it for example to D:\
- Open workspace $PYTHON_DIR\PC\VC6\pcbuild.dsw in Visual Studio 6
- Set 'pythoncore' as active project
- Choose Release configuration using Build/Set Active Configuration menu
- Build python24.dll
-
-2. Pygobject 2.12.X
- If GTK is not installed, install its development version.
- In MSVC 6 check and possibly add in Tools/Options/Directories
- following Include files directories (GTK directories should already be
- set in case you allowed the GTK installer to do it):
- D:\GTK\INCLUDE
- D:\GTK\INCLUDE\GTK-2.0
- D:\GTK\INCLUDE\GLIB-2.0
- D:\GTK\INCLUDE\PANGO-1.0
- D:\GTK\INCLUDE\CAIRO
- D:\GTK\INCLUDE\ATK-1.0
- D:\GTK\INCLUDE\GTKGLEXT-1.0
- D:\GTK\LIB\GTK-2.0\INCLUDE
- D:\GTK\LIB\GTK-2.0\INCLUDE
- D:\GTK\LIB\GLIB-2.0\INCLUDE
- D:\GTK\LIB\GTKGLEXT-1.0\INCLUDE
- D:\GTK\INCLUDE\LIBGLADE-2.0
- D:\GTK\INCLUDE\LIBXML2
- D:\PYTHON-2.4.4\INCLUDE
- D:\PYTHON-2.4.4\PC
- Library files:
- D:\GTK\LIB
- D:\PYTHON-2.4.4\PC\VC6
- Note: Don't forget to use your own path to GTK and Python directories.
- Get pygobject sources
- Unpack it for example to D:\
- Use provided workspace and project file (pygobject.dsp, pygobject.dsw)
- and put them into pygobject directory.
- Open workspace $PYGOBJECT_DIR\pygobject.dsw in Visual Studio 6
- Choose Release configuration using Build/Set Active Configuration menu
- Build pygobject.dll
-
-3. Gwyddion
- Set path variables (PYTHON_TOP, PYGOBJECT_TOP) in make.msc to coresponding
- values and enable pygwy by uncommenting ENABLE_PYGWY variable.
- Compile & install
-
-Note: to see messages printed by Python interpreter to stdout you can add
-/subsystem:console to LDFLAGS in make.msc and recompile & reinstall Gwyddion.
-
-
-===[ 6. Modules and plug-ins ]===============================================
-
-To be written.
-
diff --git a/Makefile.am b/Makefile.am
index af6019a..dc24d8d 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,4 +1,4 @@
-# @(#) $Id: Makefile.am 11681 2010-12-10 07:56:23Z yeti-dn $
+# @(#) $Id: Makefile.am 19685 2017-05-03 13:13:56Z yeti-dn $
SUBDIRS = \
m4 \
@@ -21,7 +21,6 @@ SUBDIRS = \
devel-docs
EXTRA_DIST = \
- INSTALL.gwyddion \
autogen.sh \
gwyddion.spec
diff --git a/Makefile.in b/Makefile.in
index 808bb0f..7afb2ed 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -14,7 +14,7 @@
@SET_MAKE@
-# @(#) $Id: Makefile.am 11681 2010-12-10 07:56:23Z yeti-dn $
+# @(#) $Id: Makefile.am 19685 2017-05-03 13:13:56Z yeti-dn $
VPATH = @srcdir@
am__is_gnu_make = { \
@@ -284,10 +284,7 @@ EPYDOC = @EPYDOC@
EXEEXT = @EXEEXT@
EXR_CFLAGS = @EXR_CFLAGS@
EXR_LIBS = @EXR_LIBS@
-FFTW3_1_CFLAGS = @FFTW3_1_CFLAGS@
-FFTW3_1_LIBS = @FFTW3_1_LIBS@
FFTW3_CFLAGS = @FFTW3_CFLAGS@
-FFTW3_DEPENDENCY = @FFTW3_DEPENDENCY@
FFTW3_LIBS = @FFTW3_LIBS@
FGREP = @FGREP@
GCONFTOOL = @GCONFTOOL@
@@ -297,6 +294,8 @@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
GLIBC21 = @GLIBC21@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GMODULE_CFLAGS = @GMODULE_CFLAGS@
GMODULE_LIBS = @GMODULE_LIBS@
GMSGFMT = @GMSGFMT@
@@ -321,7 +320,9 @@ GTK_MAC_LIBS = @GTK_MAC_LIBS@
GWY_VERSION_MAJOR = @GWY_VERSION_MAJOR@
GWY_VERSION_MINOR = @GWY_VERSION_MINOR@
GWY_VERSION_STRING = @GWY_VERSION_STRING@
+HDRIMAGE_EXTRA_CFLAGS = @HDRIMAGE_EXTRA_CFLAGS@
HTML_DIR = @HTML_DIR@
+INKSCAPE = @INKSCAPE@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -379,6 +380,7 @@ PASCAL = @PASCAL@
PATH_SEPARATOR = @PATH_SEPARATOR@
PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
+PNGCRUSH = @PNGCRUSH@
PNG_CFLAGS = @PNG_CFLAGS@
PNG_LIBS = @PNG_LIBS@
POD2MAN = @POD2MAN@
@@ -387,17 +389,13 @@ PYGTK_CFLAGS = @PYGTK_CFLAGS@
PYGTK_CODEGENDIR = @PYGTK_CODEGENDIR@
PYGTK_LIBS = @PYGTK_LIBS@
PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
PYTHON_EXTRA_CFLAGS = @PYTHON_EXTRA_CFLAGS@
PYTHON_INCLUDES = @PYTHON_INCLUDES@
-PYTHON_LIBS = @PYTHON_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
PYTHON_PLATFORM = @PYTHON_PLATFORM@
PYTHON_PREFIX = @PYTHON_PREFIX@
-PYTHON_SYSCFG_BASECFLAGS = @PYTHON_SYSCFG_BASECFLAGS@
-PYTHON_SYSCFG_CCSHARED = @PYTHON_SYSCFG_CCSHARED@
-PYTHON_SYSCFG_LDFLAGS = @PYTHON_SYSCFG_LDFLAGS@
-PYTHON_SYSCFG_LIBDIR = @PYTHON_SYSCFG_LIBDIR@
-PYTHON_SYSCFG_LINKFORSHARED = @PYTHON_SYSCFG_LINKFORSHARED@
PYTHON_VERSION = @PYTHON_VERSION@
RANLIB = @RANLIB@
RUBY = @RUBY@
@@ -503,7 +501,6 @@ SUBDIRS = \
devel-docs
EXTRA_DIST = \
- INSTALL.gwyddion \
autogen.sh \
gwyddion.spec
@@ -779,7 +776,7 @@ distdir: $(DISTFILES)
! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
|| chmod -R a+r "$(distdir)"
dist-gzip: distdir
- tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+ tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz
$(am__post_remove_distdir)
dist-bzip2: distdir
@@ -804,7 +801,7 @@ dist-shar: distdir
@echo WARNING: "Support for shar distribution archives is" \
"deprecated." >&2
@echo WARNING: "It will be removed altogether in Automake 2.0" >&2
- shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
+ shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz
$(am__post_remove_distdir)
dist-zip: distdir
@@ -822,7 +819,7 @@ dist dist-all:
distcheck: dist
case '$(DIST_ARCHIVES)' in \
*.tar.gz*) \
- GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
+ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\
*.tar.bz2*) \
bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
*.tar.lz*) \
@@ -832,7 +829,7 @@ distcheck: dist
*.tar.Z*) \
uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
*.shar.gz*) \
- GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\
+ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\
*.zip*) \
unzip $(distdir).zip ;;\
esac
diff --git a/NEWS b/NEWS
index dd960c1..3a4c4fb 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,205 @@
+2.49 (2017-08-15)
+Application:
+- Dependencies: FFTW ≥ 3.1 is now required on all platforms.
+- Translations updated: Czech, French, Russian.
+- Toolbox: Builtin functions such as 3D view can have keyboard shortcuts and
+ a few more can be added as toolbox buttons.
+- Modules: The program warns on startup if a larger number of modules fail to
+ register.
+
+Libraries:
+- libgwyddion: New functions for 1D maximum refinement and histogram calcuation
+ were added.
+- libgwyddion: gwy_isinf() and gwy_isnan() work regardless of GCC's fast math.
+ So Gwyddion can be compiled with -Ofast and removal of invalid values from
+ imported files still works.
+- libgwyprocess: New fitting preset: Boltzmann bent step.
+- libgwyprocess: gwy_fft_simple() is now just a thin FFTW wrapper; all FFT
+ related code was cleaned up and generally uses FFTW directly.
+- libgwyprocess: Functions for caclulation of row-wise ACF, HHCF and PSDF from
+ masked data were added.
+- libgwyprocess: Functions for calculation of distribution of angles and
+ cumulative distribution angles from masked data were added.
+- libgwyprocess: More efficient functions for data field flipping about the
+ diagonal were added.
+- libgwyprocess: gwy_data_line_correct_laplace() bug adding value offsets to
+ interpolated segments was fixed.
+- libgwyprocess: Efficient functions for row-wise and 2D convolution were
+ added, with image exterior control.
+- libgwyprocess: Function for profile extraction with masking was added.
+- libgwyprocess: Function area scale graph was added.
+- libgwyprocess: Function for preparation of data field affine transform given
+ base vectors was added.
+- libgwyprocess: Functions for copying units to another data object of the same
+ type were added.
+- libgwyprocess: Function for location of local maximum within an elliptic area
+ with subpixel refinement was added.
+- libgwyprocess: Functions for automated estimation and/or refinement of
+ periodic lattice parameters from ACF and PSDF were added.
+- libgwydraw: New functions for conversion between GwyRGBA and pixbuf pixels.
+- libgwydgets: Stock icons were revised, replaced and redrawn in SVG, resulting
+ in a cleaner icon set.
+- libgwydgets: New widget GwyAdjustBar, replacing GtkHScale, was added.
+- libgwydgets: Convenience constructors for adjustment bars were added, mostly
+ allowing drop-in replacement of hscales.
+- libgwydgets: The font size of 3D view labels can be set for all labels at
+ once. The size and vertical alignment of false colour scale are adjustable.
+- libgwydgets: Table hscale SQRT style works with negative values.
+- libgwydgets: Gwy3DView responds to mouse scroll events by zooming or scaling
+ the value (when Shift is pressed).
+- libgwyapp: Empty borders in 3D view export can be automatically removed.
+- libgwyapp: Cancellation of progress dialogues can be explicitly queried.
+- libgwyapp: Data processing menu items have icons (if enabled in GTK+).
+
+Modules:
+- Graph statistics (new): Calculates simple statistics for graph curves.
+- Volume operations (new): Simple volume data operations, currently extraction
+ of the preview to an image.
+- Volume swap axes (new): Reorganises data to change X, Y, Z axis roles.
+- Fibre synthesis (new): Generates images from randomly placed fibres.
+- Mask noisify (new): Adds salt and/or pepper noise to the mask.
+- Statistical functions tool: Masked one-dimensional ACF, HHCF, PSDF, DA and
+ CDA are available now. Area scale graph was added.
+- JPK: Crash when QI/force map loading was cancelled during ‘Scanning files’
+ was fixed.
+- Dimensions and Units: A rarely occuring freeze was fixed.
+- Mask editor tool: A CRITICAL error when attemping to use bucket-erase on
+ data with no mask was fixed.
+- PSF estimate, fit: PSF normalisation was corrected to represent sampling
+ of the continous PSF, with image formed by usual continuous convolution.
+- Outliers: Undo works properly also when it just removes an existing mask.
+- Mark disconnected: Settings are remembered also upon cancellation.
+- Mark scars: The mask can be combined with mask already present on the image
+ using union or intersection.
+- Igor file: Export was implemented.
+- Roughness tool: Displays the cut-off wavelength in real-space units.
+- Sphere revolution: True 2D sphere revolution was finally implemented.
+- NanoScan: Import of unfinished images was implemented. Invalid values (NaN)
+ in the files are handled correctly.
+- Align graph: Random behaviour (and usually no alignment at all) for curves
+ with moderate number of points was fixed.
+- Wave synthesis: Decay parameter was added. It has a progress bar and is
+ cancellable now.
+- Curvature: Reported position of centre correctly includes origin offset now.
+- Profile tool: Profile directions can be automatically improved to be
+ orthogonal to features.
+- OPD: ASC files in both wavelength and real units are imported correctly.
+- K-means, K-medians: Create curves with normalised abscissa order now.
+- Measure lattice, Affine correction: Horizontal ACF can be replaced with
+ interpolation if individual scan lines contain too much noise.
+- Affine correction: The correction can be applied to all compatible images
+ in the file. Automated estimation was added.
+- Volume summarize profiles: Minimum and maximum position were fixed for data
+ with z-calibration and their units corrected.
+
+Other:
+- Compilation: New configure options --enable/disable-module-bundling controls
+ the linking of modules of one type to one shared object for smaller packages
+ and faster startup. Bundling is enabled by default.
+- Compilation: A summary of missing maintainer mode tools is printed when
+ maintainer mode is enabled.
+- Python: Configure tries harder to find a Python 2 (not 3) interpreter.
+- Python: On Unix, the gwy module is no longer linked with libpython.
+- Resources: Three new false colour gradients were added, Gray-inverted,
+ Viridis and Spectral-white.
+
+
+2.48 (2017-04-29)
+Application:
+- New translation: Brazilian Portugese.
+- Translations updated: Czech, French, Russian.
+- Toolbox: Default width was increased to 5 columns (to work around broken MS
+ Windows 10 window management).
+- Command line: New options --disable-modules prevents loading of specified
+ modules.
+
+Libraries:
+- libgwyddion: K-correlated PSDF fitting function was added.
+- libgwyprocess: Positions of minimum and maximum are now available as data
+ field row/column statistics quantities.
+- libgwyprocess: GwyShapeFitPreset has a quick-fit function for rough fitting
+ with reduced number of data points.
+- libgwyprocess: Function for reduction of the number of points in GwySurface
+ was added.
+- libgwyprocess: Mask thinning function was added.
+- libgwydgets: A large number of new stock icons were added.
+- libgwydgets: gwy_data_view_coords_xy_cut_line() cuts also vertical and
+ horizontal lines to nothing when they do not intersect the area at all.
+- libgwymodule: Specific modules can be prevented from registration by
+ gwy_module_register_modules().
+- libgwyapp: Ascending abscissae point order is enforced in graph curves upon
+ file import, with a warning emitted.
+- libgwyapp: Progress dialogues shown by the wait functions can be disabled.
+- libgwyapp: Misbehaving data window size restoration was corrected.
+- libgwyapp: File name filter in the file chooser is now correctly applied only
+ to the actual file name instead of the whole path.
+- libgwyapp: Helper functions for bad data masking and interpolation now use
+ fast Laplace interpolation instead of simple average.
+- libgwyapp: GwyAppFileChooser avoids attempting full preview of huge files.
+
+Modules:
+- Zeiss LSM (new): Imports Carl Zeiss CLSM data.
+- Dektak VCA (new): Import Dektak OPDx (VCA DATA) files.
+- MFM perpendicular (new): Calculates stray field above sample with
+ perpendicular domains.
+- MFM parallel (new): Calculates stray field above sample with parallell
+ domains.
+- MFM shift (new): Transfers the field from one lift height to another.
+- MFM current (new): Calculate stray field above sample with current line.
+- MFM estimate shift (new): Estimates lift height difference between two MFM
+ images of the same structure.
+- PSF estimate (new): Estimates point spread function based on ideal data and
+ measured data using deconvolution with regularisation.
+- PSF fit (new): Estimates point spread function based on ideal data and
+ measured data by fitting an explicit PSF functional form.
+- Phases synthesis (new): Simple generator of data resembling two-state
+ (two-phase) systems studied for instance in MFM.
+- Stitch (new): Merges multiple images based on origin offsets.
+- Pygwy: Standard output from modules and the console is captured (so in the
+ console print works again as expected). Python modules have new optional
+ registration variables. Pygwy console remembers recent scripts. Several
+ more function were added to the Python API.
+- Renishaw, volume slice: Create graphs with ascending abscissae point order
+ now.
+- MicroProf: Files with comment at the beginning are imported correctly now.
+- Summarize Profiles: Now supports minimum and maximum positions.
+- ISO28600: Import of multichannel files was corrected (field separator is
+ specified as comma). Irregular (XYZ) data import was implemented.
+- WITec Project: Now supports different x axis units for spectra and spectral
+ images.
+- NanoObserver: Support for v1.33 files was added (including spectroscopy).
+- Spectro tool: CRITICAL error when avaraged curves differed in the number of
+ points was fixed. Subsequent spectra are interpolated onto the range of the
+ first selected now when averaging.
+- Seiko: At least the first image should be imported from XQ?X files now.
+- JPK: Initial support for volume force data (QI) was added. Single point
+ spectra import was fixed to ascending abscissae.
+- SPMLab: All image layers are now loaded (not just the first one).
+- Slice volume: Working with Z-axis calibrations was fixed. Initial choice of
+ possible target graphs was fixed.
+- Profile tool: Averaging of thick profiles was fixed (lines close 45 degrees
+ were mostly affected).
+- AMB: Physical dimmensions and scales of the data should be correct now.
+- Image export: False colour bar ticks were corrected for inverted mappings.
+ Rendering of rulers for images with offsets was fixed.
+- Nanoscope: Electrochemistry files are recognised.
+- Distance tool: The exported table is tab-separated now.
+- Mask editor tool: Spurious extra pixels in occurring free-hand drawing were
+ corrected.
+- OPD: Import of ASC files written as XYZ was implemented (assuming regular
+ grid). Workaround for import error with ‘ImageModificat~0’ was added.
+- Graph function fit, FD curve fit and Shape fit: Fit results can be copied
+ to the cliboard.
+
+Other:
+- OSX/BSD pygwy build: Build failure due to pygwy-fix-defs.sed containing
+ non-standard regexps was fixed (by replacing it with a Python script).
+ Several other problems related to compiler and linker flags and library
+ naming were corrected.
+- Development snapshots: Now display a prominent label ‘Development snapshot’
+ in the splash screen so you know you are running a snapshot.
+
+
2.47 (2016-11-18)
Application:
- Translations updated: Czech, French, Russian.
@@ -43,6 +245,7 @@ Modules:
- Nano Measuring Machine: Can handle data larger than 4 GB points total on
64bit systems (but not more than 2 GB per channel).
+
2.46 (2016-10-14)
Application:
- Translations updated: Czech, French, Italian, Russian.
@@ -945,7 +1148,7 @@ Modules:
- Scale: Rouding of scaling ratio to some odd values was fixed.
- Pixmap export: Bad row padding for some BMP image widths was fixed.
- RHK SM4: PRM are imported to metadata.
-- IGOR file: Infinities and NaNs in the data are filled with a neutral value
+- Igor file: Infinities and NaNs in the data are filled with a neutral value
and masked upon import.
- NanoScan: Files with http://www.nanoscan.ch/SPM namespace are recognised.
- Merge: Bug causing occassional use of data outside of the operand images was
@@ -1027,7 +1230,7 @@ Modules:
the image and tip radius for each estimated.
- Pixmap: Loading of TIFFs on 64bit MS Windows was disabled because the
system library crashes.
-- IGOR file: Units are correctly derived from channels starting with ‘DAC’.
+- Igor file: Units are correctly derived from channels starting with ‘DAC’.
- GWYXYZF: Compilation on big endian architectures was fixed.
- Arithmetic: Aspect ratio setting of result is taken from the first channel
used in the expresssion.
@@ -1207,7 +1410,7 @@ Modules:
- APE file: Channel labelling for various modes was corrected.
- Createc: Dimensions and values of imported data was corrected, all channels
are imported now.
-- IGOR file: Crash on files that contain no channel titles was fixed.
+- Igor file: Crash on files that contain no channel titles was fixed.
- Selection manager tool: Chosen selection is shown in the data window.
- Remove Grain by Threshold: Can also remove grains touching image borders.
- Grain Statistics: Select Inscribed Discs and Select Excscribed Circles
@@ -1596,7 +1799,7 @@ Modules:
- Threshold (new): Limit data to specified range by cutting values outside it.
- Graph DOS spectrum (new): Calculates DOS spectrum from I-V tunneling
spectroscopy.
-- IGOR: Support for non-Asylum-Research files was improved.
+- Igor: Support for non-Asylum-Research files was improved.
- Pixmap export: The horizontal ruler always displays units now, even if the
x-range does not include zero.
- Mask editor tool: New operation Fill Voids fills holes in masked areas.
@@ -1662,7 +1865,7 @@ Modules:
- Nanoeducator: I-Z spectra written by newer software are supported.
- BCR: Files with long header and header size specified within are supported.
- MI file: Wrong scaling of 32bit files was corrected.
-- IGOR: Support for Asylum Research files was improved.
+- Igor: Support for Asylum Research files was improved.
- Profile: Wrong application of thickness in profiles different from
horizontal or vertical direction corrected.
@@ -1691,7 +1894,7 @@ Modules:
- NanoScan (new): Imports NanoScan XML files.
- PLT (new): Imports Nanosurf PLT files.
- Raw XYZ (new): Imports XYZ data and regularizes them to a grid.
-- IGOR: Support for Asylum Research files was substantialy improved.
+- Igor: Support for Asylum Research files was substantialy improved.
- NT-MDT: MDA frame support was improved.
- NetCDF: Can read GXSM files with data in "FloatField" instead of "H".
- Statistical quantities: The masked area can also be excluded.
@@ -1732,7 +1935,7 @@ Libraries:
Modules:
- Curvature (new): Calculates global curvature of second-order surfaces.
- RHK-SM4 (new): Imports RHK Technology SM4 files.
-- IGOR (new): Imports IGOR Pro binary waves (highly experimental).
+- Igor (new): Imports Igor Pro binary waves (highly experimental).
- Nanonics (new): Imports Nanonics NAN files (highly experimental).
- FFT synthesis (new): Generates random surfaces by spectral synthesis.
- Object synthesis (new): Generates random surfaces by object placement.
@@ -3040,7 +3243,7 @@ Libraries:
- libgwyprocess: FFT backend argument was removed from FFT functions.
- libgwydraw: GwyGradient is based on GwyResource, API reworked. Gradients
were un-hardcoded and are distributed as standalone text files now.
-- libgwydraw, libwydgets: GwyGLMaterial was moved from libwydgets to
+- libgwydraw, libgwydgets: GwyGLMaterial was moved from libgwydgets to
libgwydraw, based on GwyResource, and more or less reimplemented.
GL materials were unhardcoded. Material pixbuf samples are nicer.
- libgwydraw, libgwydgets: Experimental adaptive color mapping mode was added.
diff --git a/README b/README
index dc446d8..cc43721 100644
--- a/README
+++ b/README
@@ -14,7 +14,6 @@ Mailing lists: gwyddion-users at lists.sourceforge.net
See also:
User-visible changes between versions: NEWS
-Gwyddion installation instructions: INSTALL.gwyddion
Generic GNU installation instructions: INSTALL
License (GNU General Public License): COPYING
More info about developers: AUTHORS
diff --git a/TODO b/TODO
index 8d5e122..cb14e95 100644
--- a/TODO
+++ b/TODO
@@ -43,3 +43,4 @@ Release checklist:
info)
- send e-mail to the mailing lists
- update the list of supported file formats in the user guide
+- update contributors page using ./utils/gen-authors.py web
diff --git a/app/Makefile.am b/app/Makefile.am
index eea321b..da31c57 100644
--- a/app/Makefile.am
+++ b/app/Makefile.am
@@ -1,4 +1,4 @@
-# @(#) $Id: Makefile.am 19258 2016-11-15 08:25:23Z yeti-dn $
+# @(#) $Id: Makefile.am 20269 2017-08-14 11:21:07Z yeti-dn $
libgwyddion = $(top_builddir)/libgwyddion/libgwyddion2.la
libgwymodule = $(top_builddir)/libgwymodule/libgwymodule2.la
@@ -51,6 +51,7 @@ noinst_HEADERS = \
gwyappfilechooser.h \
gwyappinternal.h \
gwyddion.h \
+ release.h \
toolbox.h
uidata_DATA = toolbox.xml
@@ -59,7 +60,8 @@ bin_PROGRAMS = gwyddion
lib_LTLIBRARIES = libgwyapp2.la
BUILT_SOURCES = \
- authors.h
+ authors.h \
+ release.h
if OS_MSWIN
no_undefined = -no-undefined
@@ -73,7 +75,7 @@ EXTRA_DIST = \
README.objdata \
toolbox.xml
CLEANFILES = libgwyapp2.def
-MAINTAINERCLEANFILES = authors.h
+MAINTAINERCLEANFILES =
MKENUM_NAME = gwyapptypes
MKENUM_ID = GWY_APP_TYPES
@@ -112,7 +114,7 @@ AM_LDFLAGS = $(darwin_ldflags)
# Any iface change C++: 0: A
# Adding ifaces C: R: A++
# Changing ifaces C: R: 0
-libversion = -version-info 17:0:17
+libversion = -version-info 19:0:19
#libversion = -release @LIBRARY_RELEASE@
libgwyapp2_la_LDFLAGS = @GTKGLEXT_LIBS@ @GIO_LIBS@ @BASIC_LIBS@ $(win32_libs) -export-dynamic $(no_undefined) $(export_symbols) $(libversion)
libgwyapp2_la_CPPFLAGS = -DG_LOG_DOMAIN=\"GwyApp\" $(AM_CPPFLAGS)
@@ -159,7 +161,6 @@ gwyddion_SOURCES = \
toolbox-editor.c \
toolbox-spec.c
-
gwyddion_LDADD = @COMMON_LDFLAGS@ @GTK_MAC_LIBS@ @GTKGLEXT_LIBS@ @FFTW3_LIBS@ @UNIQUE_LIBS@ @GIO_LIBS@ @BASIC_LIBS@ $(LIBXMU) \
libgwyapp2.la \
$(libgwymodule) \
@@ -168,28 +169,15 @@ gwyddion_LDADD = @COMMON_LDFLAGS@ @GTK_MAC_LIBS@ @GTKGLEXT_LIBS@ @FFTW3_LIBS@ @U
$(libgwyprocess) \
$(libgwyddion)
-# This is ugly a bit, but uses only very basic sed constructs
-authors.h: ${top_srcdir}/AUTHORS ${top_srcdir}/NEWS
- $(AM_V_GEN){ \
- echo '/* This is a GENERATED file */'; \
- echo '/*< private_header >*/'; \
- echo 'static const gchar developers[] ='; \
- sed -n -e '/=== Developers ===/,/^$$/{' \
- -e 's/^[ =].*//' -e t -e 's/^$$//' -e t \
- -e 's/ *<.*//' -e 's/.*/ "&\\n"/' -e p -e '}' \
- ${top_srcdir}/AUTHORS; \
- echo ';'; \
- echo 'static const gchar translators[] ='; \
- sed -n -e '/=== Translators ===/,/^$$/{' \
- -e 's/^[ =].*//' -e t -e 's/^$$//' -e t \
- -e 's/ *<.*//' -e 's/.*/ "&\\n"/' -e p -e '}' \
- ${top_srcdir}/AUTHORS; \
- echo ';'; \
- echo 'static const gchar releasedate[] ='; \
- sed -n -e '1s/^.*(/ "/' -e '1s/)/"/' -e '1p' -e '1q' \
- ${top_srcdir}/NEWS; \
- echo ';'; \
- } >authors.h
+if MAINTAINER_MODE
+authors.h: ${top_srcdir}/AUTHORS $(top_srcdir)/utils/gen-authors.py
+ $(AM_V_GEN)$(PYTHON) $(top_srcdir)/utils/gen-authors.py $(top_srcdir)/AUTHORS header >authors.h
+
+release.h: ${top_srcdir}/NEWS Makefile $(top_builddir)/config.h
+ $(AM_V_GEN)echo '/* This is a 'GENERATED' file. */' >release.h
+ $(AM_V_at)echo '/*< private_header >*/' >>release.h
+ $(AM_V_at)sed -n 1p ${top_srcdir}/NEWS | sed -e 's/^.*(/#define RELEASEDATE 0x/' -e 's/)/u/' -e 's/-//g' >>release.h
+endif
clean-local:
rm -f core.* *~
diff --git a/app/Makefile.in b/app/Makefile.in
index 6b79def..5ec4e01 100644
--- a/app/Makefile.in
+++ b/app/Makefile.in
@@ -14,10 +14,10 @@
@SET_MAKE@
-# @(#) $Id: Makefile.am 19258 2016-11-15 08:25:23Z yeti-dn $
+# @(#) $Id: Makefile.am 20269 2017-08-14 11:21:07Z yeti-dn $
# Generic glib-mkenum rules.
-# @(#) $Id: mkenum.mk 11705 2011-01-03 08:32:55Z yeti-dn $
+# @(#) $Id: mkenum.mk 20080 2017-07-24 16:05:52Z yeti-dn $
#
# Parameters:
# MKENUM_NAME -- output base name
@@ -300,10 +300,7 @@ EPYDOC = @EPYDOC@
EXEEXT = @EXEEXT@
EXR_CFLAGS = @EXR_CFLAGS@
EXR_LIBS = @EXR_LIBS@
-FFTW3_1_CFLAGS = @FFTW3_1_CFLAGS@
-FFTW3_1_LIBS = @FFTW3_1_LIBS@
FFTW3_CFLAGS = @FFTW3_CFLAGS@
-FFTW3_DEPENDENCY = @FFTW3_DEPENDENCY@
FFTW3_LIBS = @FFTW3_LIBS@
FGREP = @FGREP@
GCONFTOOL = @GCONFTOOL@
@@ -313,6 +310,8 @@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
GLIBC21 = @GLIBC21@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GMODULE_CFLAGS = @GMODULE_CFLAGS@
GMODULE_LIBS = @GMODULE_LIBS@
GMSGFMT = @GMSGFMT@
@@ -337,7 +336,9 @@ GTK_MAC_LIBS = @GTK_MAC_LIBS@
GWY_VERSION_MAJOR = @GWY_VERSION_MAJOR@
GWY_VERSION_MINOR = @GWY_VERSION_MINOR@
GWY_VERSION_STRING = @GWY_VERSION_STRING@
+HDRIMAGE_EXTRA_CFLAGS = @HDRIMAGE_EXTRA_CFLAGS@
HTML_DIR = @HTML_DIR@
+INKSCAPE = @INKSCAPE@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -395,6 +396,7 @@ PASCAL = @PASCAL@
PATH_SEPARATOR = @PATH_SEPARATOR@
PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
+PNGCRUSH = @PNGCRUSH@
PNG_CFLAGS = @PNG_CFLAGS@
PNG_LIBS = @PNG_LIBS@
POD2MAN = @POD2MAN@
@@ -403,17 +405,13 @@ PYGTK_CFLAGS = @PYGTK_CFLAGS@
PYGTK_CODEGENDIR = @PYGTK_CODEGENDIR@
PYGTK_LIBS = @PYGTK_LIBS@
PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
PYTHON_EXTRA_CFLAGS = @PYTHON_EXTRA_CFLAGS@
PYTHON_INCLUDES = @PYTHON_INCLUDES@
-PYTHON_LIBS = @PYTHON_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
PYTHON_PLATFORM = @PYTHON_PLATFORM@
PYTHON_PREFIX = @PYTHON_PREFIX@
-PYTHON_SYSCFG_BASECFLAGS = @PYTHON_SYSCFG_BASECFLAGS@
-PYTHON_SYSCFG_CCSHARED = @PYTHON_SYSCFG_CCSHARED@
-PYTHON_SYSCFG_LDFLAGS = @PYTHON_SYSCFG_LDFLAGS@
-PYTHON_SYSCFG_LIBDIR = @PYTHON_SYSCFG_LIBDIR@
-PYTHON_SYSCFG_LINKFORSHARED = @PYTHON_SYSCFG_LINKFORSHARED@
PYTHON_VERSION = @PYTHON_VERSION@
RANLIB = @RANLIB@
RUBY = @RUBY@
@@ -544,11 +542,12 @@ noinst_HEADERS = \
gwyappfilechooser.h \
gwyappinternal.h \
gwyddion.h \
+ release.h \
toolbox.h
uidata_DATA = toolbox.xml
lib_LTLIBRARIES = libgwyapp2.la
-BUILT_SOURCES = authors.h $(am__append_2)
+BUILT_SOURCES = authors.h release.h $(am__append_2)
@OS_MSWIN_TRUE at no_undefined = -no-undefined
@OS_MSWIN_TRUE at export_symbols = -export-symbols libgwyapp2.def
@OS_MSWIN_TRUE at win32_libs = -lole32
@@ -558,7 +557,7 @@ BUILT_SOURCES = authors.h $(am__append_2)
EXTRA_DIST = README.objdata toolbox.xml $(mkenum_built_sources)
CLEANFILES = libgwyapp2.def $(MKENUM_NAME).c.xgen \
$(MKENUM_NAME).h.xgen
-MAINTAINERCLEANFILES = authors.h $(am__append_1)
+MAINTAINERCLEANFILES = $(am__append_1)
MKENUM_NAME = gwyapptypes
MKENUM_ID = GWY_APP_TYPES
MKENUM_HFILES = \
@@ -573,9 +572,6 @@ MKENUM_HFILES = \
$(srcdir)/settings.h \
$(srcdir)/validate.h
-
-# TODO: Detect
-GLIB_MKENUMS = glib-mkenums
mkenum_built_sources = $(MKENUM_NAME).h $(MKENUM_NAME).c
@MAINTAINER_MODE_TRUE at mkenum_stamp_files = $(MKENUM_NAME).h.stamp
@MAINTAINER_MODE_TRUE at mkenum_self = $(top_srcdir)/utils/mkenum.mk
@@ -599,7 +595,7 @@ AM_LDFLAGS = $(darwin_ldflags)
# Any iface change C++: 0: A
# Adding ifaces C: R: A++
# Changing ifaces C: R: 0
-libversion = -version-info 17:0:17
+libversion = -version-info 19:0:19
#libversion = -release @LIBRARY_RELEASE@
libgwyapp2_la_LDFLAGS = @GTKGLEXT_LIBS@ @GIO_LIBS@ @BASIC_LIBS@ $(win32_libs) -export-dynamic $(no_undefined) $(export_symbols) $(libversion)
libgwyapp2_la_CPPFLAGS = -DG_LOG_DOMAIN=\"GwyApp\" $(AM_CPPFLAGS)
@@ -1316,28 +1312,13 @@ libgwyapp2.def: $(libgwyapp2_la_OBJECTS)
| awk -F' ' '($$2=="T" && $$3 ~ /^gwy_/){print " ",$$3}'; \
done | sort >>libgwyapp2.def
-# This is ugly a bit, but uses only very basic sed constructs
-authors.h: ${top_srcdir}/AUTHORS ${top_srcdir}/NEWS
- $(AM_V_GEN){ \
- echo '/* This is a GENERATED file */'; \
- echo '/*< private_header >*/'; \
- echo 'static const gchar developers[] ='; \
- sed -n -e '/=== Developers ===/,/^$$/{' \
- -e 's/^[ =].*//' -e t -e 's/^$$//' -e t \
- -e 's/ *<.*//' -e 's/.*/ "&\\n"/' -e p -e '}' \
- ${top_srcdir}/AUTHORS; \
- echo ';'; \
- echo 'static const gchar translators[] ='; \
- sed -n -e '/=== Translators ===/,/^$$/{' \
- -e 's/^[ =].*//' -e t -e 's/^$$//' -e t \
- -e 's/ *<.*//' -e 's/.*/ "&\\n"/' -e p -e '}' \
- ${top_srcdir}/AUTHORS; \
- echo ';'; \
- echo 'static const gchar releasedate[] ='; \
- sed -n -e '1s/^.*(/ "/' -e '1s/)/"/' -e '1p' -e '1q' \
- ${top_srcdir}/NEWS; \
- echo ';'; \
- } >authors.h
+ at MAINTAINER_MODE_TRUE@authors.h: ${top_srcdir}/AUTHORS $(top_srcdir)/utils/gen-authors.py
+ at MAINTAINER_MODE_TRUE@ $(AM_V_GEN)$(PYTHON) $(top_srcdir)/utils/gen-authors.py $(top_srcdir)/AUTHORS header >authors.h
+
+ at MAINTAINER_MODE_TRUE@release.h: ${top_srcdir}/NEWS Makefile $(top_builddir)/config.h
+ at MAINTAINER_MODE_TRUE@ $(AM_V_GEN)echo '/* This is a 'GENERATED' file. */' >release.h
+ at MAINTAINER_MODE_TRUE@ $(AM_V_at)echo '/*< private_header >*/' >>release.h
+ at MAINTAINER_MODE_TRUE@ $(AM_V_at)sed -n 1p ${top_srcdir}/NEWS | sed -e 's/^.*(/#define RELEASEDATE 0x/' -e 's/)/u/' -e 's/-//g' >>release.h
clean-local:
rm -f core.* *~
diff --git a/app/about.c b/app/about.c
index 227ee1a..23ee7df 100644
--- a/app/about.c
+++ b/app/about.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: about.c 15598 2013-11-11 12:33:32Z yeti-dn $
+ * @(#) $Id: about.c 20090 2017-07-26 09:11:23Z yeti-dn $
* Copyright (C) 2003 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -20,24 +20,24 @@
*/
#include "config.h"
+#include <string.h>
#include <gtk/gtk.h>
#ifdef HAVE_GTKGLEXT
#include <gtk/gtkgl.h>
#endif
-#ifdef HAVE_FFTW3
-#include <fftw3.h>
-#endif
#include <libgwyddion/gwymacros.h>
#include <libgwyddion/gwyversion.h>
#include <libgwydgets/gwystock.h>
#include <libgwymodule/gwymoduleloader.h>
#include "app.h"
-#include "authors.h"
#include "gwyddion.h"
+#include "authors.h"
+#include "release.h"
static void about_close (void);
static void fill_credits (GtkTextBuffer *buffer);
static void fill_features(GtkTextBuffer *buffer);
+static void construct_datetime_info(GString *str);
static GtkWidget *about = NULL;
@@ -48,6 +48,7 @@ gwy_app_about(void)
GtkTextBuffer *buff;
GtkTextIter iter;
GString *str = g_string_new(NULL);
+ const gchar *verextra = "";
gint size;
if (about) {
@@ -86,10 +87,13 @@ gwy_app_about(void)
widget = gtk_label_new(NULL);
gtk_misc_set_alignment(GTK_MISC(widget), 0.0, 0.5);
gtk_box_pack_start(GTK_BOX(vbox), widget, FALSE, FALSE, 0);
- g_string_printf(str, "<big><b>%s %s</b></big>\n",
- g_get_application_name(), GWY_VERSION_STRING);
- /* TRANSLATORS: %s is replaced with date in ISO format YYYY-MM-DD. */
- g_string_append_printf(str, _("Released %s\n"), releasedate);
+ /* If we have unset release date but simple (non-date-extended) version
+ * string then we are not compiling from a public tarball. */
+ if (RELEASEDATE == 0 && strlen(GWY_VERSION_STRING) < 9)
+ verextra = "+SVN";
+ g_string_printf(str, "<span size='x-large' weight='bold'>%s %s%s</span>\n",
+ g_get_application_name(), GWY_VERSION_STRING, verextra);
+ construct_datetime_info(str);
g_string_append(str, _("An SPM data visualization and analysis tool."));
gtk_label_set_markup(GTK_LABEL(widget), str->str);
@@ -257,15 +261,6 @@ fill_features(GtkTextBuffer *buffer)
_("not available\n"), TRUE);
#endif
-#ifdef HAVE_FFTW3
- s = g_strdup_printf("FFTW %s\n", fftw_version);
- add_credits_block(buffer, _("Fast Fourier Transform"), s, FALSE);
- g_free(s);
-#else
- add_credits_block(buffer, _("Fast Fourier Transform"),
- _("built-in SimpleFFT\n"), TRUE);
-#endif
-
b = FALSE;
#if (REMOTE_BACKEND == REMOTE_NONE)
cs = _("not available\n");
@@ -291,4 +286,48 @@ fill_features(GtkTextBuffer *buffer)
_("not available\n"), TRUE);
}
+#if (RELEASEDATE == 0)
+static void
+construct_datetime_info(GString *str)
+{
+ GDate *gdate = g_date_new();
+ gchar buf[12];
+
+ g_date_set_parse(gdate, __DATE__);
+ if (!g_date_valid(gdate)) {
+ g_warning("Build date is invalid.");
+ /* Avoid trigraphs. */
+ g_snprintf(buf, sizeof(buf), "%.10s", "????" "-" "??" "-" "??");
+ }
+ else {
+ g_snprintf(buf, sizeof(buf), "%04u-%02u-%02u",
+ (guint)g_date_get_year(gdate),
+ (guint)g_date_get_month(gdate),
+ (guint)g_date_get_day(gdate));
+ }
+
+ g_string_append(str, "<b>");
+ /* TRANSLATORS: %s is replaced with date in ISO format YYYY-MM-DD. */
+ g_string_append_printf(str, _("Development version, built %s"), buf);
+ g_string_append(str, "</b>\n");
+ g_date_free(gdate);
+}
+#else
+static void
+construct_datetime_info(GString *str)
+{
+ guint year = RELEASEDATE/0x10000u;
+ guint month = (RELEASEDATE/0x100u % 0x100);
+ guint day = RELEASEDATE % 0x100;
+ gchar buf[12];
+
+ g_snprintf(buf, sizeof(buf), "%04x-%02x-%02x", year, month, day);
+
+ g_string_append(str, "<b>");
+ /* TRANSLATORS: %s is replaced with date in ISO format YYYY-MM-DD. */
+ g_string_append_printf(str, _("Released %s"), buf);
+ g_string_append(str, "</b>\n");
+}
+#endif
+
/* vim: set cin et ts=4 sw=4 cino=>1s,e0,n0,f0,{0,}0,^0,\:1s,=0,g1s,h0,t0,+1s,c3,(0,u0 : */
diff --git a/app/app.c b/app/app.c
index f8da9d8..92ef537 100644
--- a/app/app.c
+++ b/app/app.c
@@ -1,6 +1,6 @@
/*
- * @(#) $Id: app.c 19043 2016-10-08 18:58:43Z yeti-dn $
- * Copyright (C) 2003-2006,2013-2016 David Necas (Yeti), Petr Klapetek.
+ * @(#) $Id: app.c 20119 2017-07-31 10:36:59Z yeti-dn $
+ * Copyright (C) 2003-2006,2013-2017 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
* This program is free software; you can redistribute it and/or modify
@@ -388,6 +388,8 @@ _gwy_app_data_window_setup(GwyDataWindow *data_window)
corner_menu);
g_signal_connect(data_window, "configure-event",
G_CALLBACK(gwy_app_data_window_configured), NULL);
+ g_signal_connect(data_window, "size-allocate",
+ G_CALLBACK(gwy_app_data_window_configured), NULL);
settings = gwy_app_settings_get();
if (gwy_container_gis_enum_by_name(settings, "/app/default-range-type",
@@ -754,6 +756,8 @@ _gwy_app_graph_window_setup(GwyGraphWindow *graph_window,
GUINT_TO_POINTER(prefix));
g_signal_connect(graph_window, "configure-event",
G_CALLBACK(gwy_app_graph_window_configured), NULL);
+ g_signal_connect(graph_window, "size-allocate",
+ G_CALLBACK(gwy_app_graph_window_configured), NULL);
}
static gboolean
@@ -828,11 +832,25 @@ _gwy_app_3d_window_setup(Gwy3DWindow *window3d)
{
GtkTooltips *tooltips;
Gwy3DView *view3d;
- GtkWidget *button;
+ GwyContainer *settings;
+ gboolean autocrop = FALSE;
+ GtkWidget *button, *check, *label;
gwy_app_add_main_accel_group(GTK_WINDOW(window3d));
tooltips = gwy_3d_window_class_get_tooltips();
+ button = gtk_button_new_with_mnemonic(_("Set as Default"));
+ gtk_tooltips_set_tip(tooltips, button,
+ _("Set the current view setup as the default"), NULL);
+ gwy_3d_window_add_action_widget(window3d, button);
+ g_signal_connect_swapped(button, "clicked",
+ G_CALLBACK(gwy_app_3d_window_set_defaults),
+ window3d);
+
+ label = gtk_label_new(NULL);
+ gtk_widget_set_size_request(label, 12, 0);
+ gwy_3d_window_add_action_widget(window3d, label);
+
button = gwy_stock_like_button_new(gwy_sgettext("verb|Save"),
GTK_STOCK_SAVE);
gtk_tooltips_set_tip(tooltips, button,
@@ -846,13 +864,14 @@ _gwy_app_3d_window_setup(Gwy3DWindow *window3d)
g_signal_connect_swapped(button, "clicked",
G_CALLBACK(gwy_app_3d_window_export), window3d);
- button = gtk_button_new_with_mnemonic(_("Set as Default"));
- gtk_tooltips_set_tip(tooltips, button,
- _("Set the current view setup as the default"), NULL);
- gwy_3d_window_add_action_widget(window3d, button);
- g_signal_connect_swapped(button, "clicked",
- G_CALLBACK(gwy_app_3d_window_set_defaults),
- window3d);
+ settings = gwy_app_settings_get();
+ gwy_container_gis_boolean_by_name(settings, "/app/3d/autocrop", &autocrop);
+ check = gtk_check_button_new_with_mnemonic(_("_Autocrop"));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check), autocrop);
+ gwy_3d_window_add_action_widget(window3d, check);
+ gtk_tooltips_set_tip(tooltips, check,
+ _("Remove white borders from exported image"), NULL);
+ g_object_set_data(G_OBJECT(window3d), "gwy-app-autocrop-check", check);
gwy_app_3d_window_add_overlay_menu(window3d);
gwy_help_add_to_window(GTK_WINDOW(window3d), "opengl-3d-view", NULL,
@@ -865,6 +884,8 @@ _gwy_app_3d_window_setup(Gwy3DWindow *window3d)
g_signal_connect(window3d, "configure-event",
G_CALLBACK(gwy_app_3d_window_configured), NULL);
+ g_signal_connect(window3d, "size-allocate",
+ G_CALLBACK(gwy_app_3d_window_configured), NULL);
}
static gboolean
@@ -911,20 +932,19 @@ gwy_app_3d_window_add_overlay_menu(Gwy3DWindow *gwy3dwindow)
g_quark_to_string(view->data_key),
4);
g_strlcat(refkey, "3d/data2ref", sizeof(refkey));
- if (gwy_container_gis_string_by_name(view->data, refkey, &key)) {
+ if (gwy_container_gis_string_by_name(view->data, refkey, &key))
data2_ref = g_quark_from_string(key);
- };
for (nids = ids; *nids != -1; nids++) {
if (gwy_app_get_data_key_for_id(*nids) == data2_ref) {
activeid = *nids;
break;
- };
+ }
if (gwy_app_get_data_key_for_id(*nids) == view->data_key
&& activeid == -1) {
activeid = *nids;
- };
- };
+ }
+ }
g_free(ids);
gwy_data_chooser_set_active(GWY_DATA_CHOOSER(menu), view->data, activeid);
@@ -1003,8 +1023,8 @@ gwy_app_3d_window_set_data2(Gwy3DWindow *gwy3dwindow,
}
else {
gwy_3d_view_set_ovlay(view, ovplay, 1);
- };
-};
+ }
+}
/* callback for the chooser created by gwy_app_3d_window_add_overlay_menu */
static void
@@ -1063,7 +1083,43 @@ gwy_app_3d_window_data2_filter(GwyContainer *data2,
return !gwy_data_field_check_compatibility(data_field2, data_field1,
GWY_DATA_COMPATIBILITY_RES);
-};
+}
+
+static GdkPixbuf*
+autocrop_3d_export_pixbuf(GdkPixbuf *pixbuf)
+{
+ gint width, height, stride, bpp, i, j, top, left, right, bot;
+ guchar *data, *row;
+
+ width = gdk_pixbuf_get_width(pixbuf);
+ height = gdk_pixbuf_get_height(pixbuf);
+ stride = gdk_pixbuf_get_rowstride(pixbuf);
+ bpp = gdk_pixbuf_get_n_channels(pixbuf);
+ data = gdk_pixbuf_get_pixels(pixbuf);
+
+ top = height-1;
+ bot = 0;
+ left = width-1;
+ right = 0;
+
+ for (i = 0; i < height; i++) {
+ row = data + i*stride;
+ for (j = 0; j < bpp*width; j++) {
+ if (row[j] != 0xff) {
+ top = MIN(top, i);
+ bot = MAX(bot, i);
+ left = MIN(left, j/bpp);
+ right = MAX(right, j/bpp);
+ }
+ }
+ }
+
+ if (top > bot || left > right)
+ top = bot = left = right = 0;
+
+ return gdk_pixbuf_new_subpixbuf(pixbuf,
+ left, top, right+1 - left, bot+1 - top);
+}
static void
gwy_app_save_3d_export(GtkWidget *dialog,
@@ -1071,9 +1127,11 @@ gwy_app_save_3d_export(GtkWidget *dialog,
Gwy3DWindow *gwy3dwindow)
{
gchar *filename_sys, *filename_utf8, *s, *filetype = NULL;
- GdkPixbuf *pixbuf;
+ GdkPixbuf *pixbuf, *cropped_pixbuf;
GtkWidget *gwy3dview;
GError *err = NULL;
+ GwyContainer *settings;
+ gboolean autocrop = FALSE;
if (response != GTK_RESPONSE_OK) {
gtk_widget_destroy(dialog);
@@ -1084,21 +1142,29 @@ gwy_app_save_3d_export(GtkWidget *dialog,
filename_sys = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
gtk_widget_destroy(dialog);
+ settings = gwy_app_settings_get();
+ gwy_container_gis_boolean_by_name(settings, "/app/3d/autocrop", &autocrop);
+
pixbuf = gwy_3d_view_get_pixbuf(GWY_3D_VIEW(gwy3dview));
+ if (autocrop)
+ cropped_pixbuf = autocrop_3d_export_pixbuf(pixbuf);
+ else
+ cropped_pixbuf = g_object_ref(pixbuf);
+
filename_utf8 = g_filename_to_utf8(filename_sys, -1, NULL, NULL, NULL);
if ((s = strrchr(filename_utf8, '.'))) {
filetype = g_ascii_strdown(s+1, -1);
- if (gwy_strequal(filetype, "jpg")) {
+ if (gwy_stramong(filetype, "jpg", "jpeg", NULL)) {
g_free(filetype);
filetype = g_strdup("jpeg");
}
- else if (gwy_strequal(filetype, "tif")) {
+ else if (gwy_stramong(filetype, "tif", "tiff", NULL)) {
g_free(filetype);
filetype = g_strdup("tiff");
}
}
- if (!gdk_pixbuf_save(pixbuf, filename_sys, filetype ? filetype : "png",
- &err, NULL)) {
+ if (!gdk_pixbuf_save(cropped_pixbuf, filename_sys,
+ filetype ? filetype : "png", &err, NULL)) {
dialog = gtk_message_dialog_new(NULL,
GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_ERROR,
@@ -1113,6 +1179,7 @@ gwy_app_save_3d_export(GtkWidget *dialog,
}
g_free(filetype);
g_free(filename_sys);
+ g_object_unref(cropped_pixbuf);
g_object_unref(pixbuf);
g_free(g_object_get_data(G_OBJECT(gwy3dwindow), "gwy-app-export-filename"));
g_object_set_data(G_OBJECT(gwy3dwindow), "gwy-app-export-filename",
@@ -1122,15 +1189,20 @@ gwy_app_save_3d_export(GtkWidget *dialog,
static void
gwy_app_3d_window_export(Gwy3DWindow *gwy3dwindow)
{
- GwyContainer *data;
- GtkWidget *dialog, *gwy3dview;
+ GwyContainer *data, *settings;
+ GtkWidget *dialog, *gwy3dview, *check;
const guchar *filename_utf8;
gchar *filename_sys;
- gboolean need_free_utf = FALSE;
+ gboolean need_free_utf = FALSE, autocrop;
gwy3dview = gwy_3d_window_get_3d_view(gwy3dwindow);
data = gwy_3d_view_get_data(GWY_3D_VIEW(gwy3dview));
+ check = g_object_get_data(G_OBJECT(gwy3dwindow), "gwy-app-autocrop-check");
+ autocrop = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(check));
+ settings = gwy_app_settings_get();
+ gwy_container_set_boolean_by_name(settings, "/app/3d/autocrop", autocrop);
+
filename_utf8 = g_object_get_data(G_OBJECT(gwy3dwindow),
"gwy-app-export-filename");
if (!filename_utf8) {
@@ -1168,6 +1240,89 @@ gwy_app_3d_window_export(Gwy3DWindow *gwy3dwindow)
}
static void
+save_or_restore_object_properties(GObject *object,
+ GwyContainer *settings,
+ gboolean restore, GString *key)
+{
+ GParamSpec **pspecs;
+ gdouble dblvalue;
+ gboolean boolvalue;
+ gint enumvalue;
+ const guchar *strvalue;
+ const gchar *name;
+ guint len, i, nspecs;
+ GType valtype;
+
+ pspecs = g_object_class_list_properties(G_OBJECT_GET_CLASS(object),
+ &nspecs);
+ if (!g_str_has_suffix(key->str, "/"))
+ g_string_append_c(key, '/');
+ len = key->len;
+
+ for (i = 0; i < nspecs; i++) {
+ if (!(pspecs[i]->flags & G_PARAM_WRITABLE)
+ || (pspecs[i]->flags & (G_PARAM_CONSTRUCT_ONLY | G_PARAM_PRIVATE)))
+ continue;
+
+ valtype = pspecs[i]->value_type;
+ name = pspecs[i]->name;
+ g_string_truncate(key, len);
+ g_string_append(key, name);
+
+ if (valtype == G_TYPE_BOOLEAN) {
+ if (restore) {
+ if (gwy_container_gis_boolean_by_name(settings, key->str,
+ &boolvalue))
+ g_object_set(object, name, boolvalue, NULL);
+ }
+ else {
+ g_object_get(object, name, &boolvalue, NULL);
+ gwy_container_set_boolean_by_name(settings, key->str,
+ boolvalue);
+ }
+ }
+ else if (valtype == G_TYPE_DOUBLE) {
+ if (restore) {
+ if (gwy_container_gis_double_by_name(settings, key->str,
+ &dblvalue))
+ g_object_set(object, name, dblvalue, NULL);
+ }
+ else {
+ g_object_get(object, name, &dblvalue, NULL);
+ gwy_container_set_double_by_name(settings, key->str, dblvalue);
+ }
+ }
+ else if (valtype == G_TYPE_STRING) {
+ if (restore) {
+ if (gwy_container_gis_string_by_name(settings, key->str,
+ &strvalue))
+ g_object_set(object, name, strvalue, NULL);
+ }
+ else {
+ g_object_get(object, name, &strvalue, NULL);
+ gwy_container_set_string_by_name(settings, key->str, strvalue);
+ }
+ }
+ else if (g_type_is_a(valtype, G_TYPE_ENUM)) {
+ if (restore) {
+ if (gwy_container_gis_enum_by_name(settings, key->str,
+ &enumvalue))
+ g_object_set(object, name, enumvalue, NULL);
+ }
+ else {
+ g_object_get(object, name, &enumvalue, NULL);
+ gwy_container_set_enum_by_name(settings, key->str, enumvalue);
+ }
+ }
+ else {
+ g_warning("Unhandled property %s", name);
+ }
+ }
+
+ g_free(pspecs);
+}
+
+static void
gwy_app_3d_window_set_defaults(Gwy3DWindow *window)
{
Gwy3DView *view;
@@ -1185,30 +1340,10 @@ gwy_app_3d_window_set_defaults(Gwy3DWindow *window)
data = gwy_3d_view_get_data(view);
settings = gwy_app_settings_get();
- gwy_container_set_boolean_by_name(settings, "/app/3d/axes-visible",
- setup->axes_visible);
- gwy_container_set_boolean_by_name(settings, "/app/3d/labels-visible",
- setup->labels_visible);
- gwy_container_set_boolean_by_name(settings, "/app/3d/fmscale-visible",
- setup->fmscale_visible);
- gwy_container_set_double_by_name(settings, "/app/3d/rotation-x",
- setup->rotation_x);
- gwy_container_set_double_by_name(settings, "/app/3d/rotation-y",
- setup->rotation_y);
- gwy_container_set_double_by_name(settings, "/app/3d/scale",
- setup->scale);
- gwy_container_set_double_by_name(settings, "/app/3d/z-scale",
- setup->z_scale);
- gwy_container_set_double_by_name(settings, "/app/3d/light-phi",
- setup->light_phi);
- gwy_container_set_double_by_name(settings, "/app/3d/light-theta",
- setup->light_theta);
- gwy_container_set_double_by_name(settings, "/app/3d/line-width",
- setup->line_width);
- gwy_container_set_enum_by_name(settings, "/app/3d/visualization",
- setup->visualization);
- gwy_container_set_enum_by_name(settings, "/app/3d/projection",
- setup->projection);
+ str = g_string_new(NULL);
+
+ g_string_assign(str, "/app/3d/");
+ save_or_restore_object_properties(G_OBJECT(setup), settings, FALSE, str);
lay = G_OBJECT(window->dataov_menu);
toggle = GTK_TOGGLE_BUTTON(g_object_get_data(lay, "m"));
@@ -1216,55 +1351,16 @@ gwy_app_3d_window_set_defaults(Gwy3DWindow *window)
gtk_toggle_button_get_active(toggle));
prefix = gwy_3d_view_get_setup_prefix(view);
- str = g_string_new(NULL);
for (i = 0; i < G_N_ELEMENTS(labels_3d); i++) {
Gwy3DLabel *label = NULL;
- gdouble deltax, deltay, rotation, size;
- gboolean fixed_size;
- guint len;
- gchar *text;
g_string_printf(str, "%s/%s", prefix, labels_3d[i].key);
gwy_container_gis_object_by_name(data, str->str, &label);
if (!label)
continue;
- g_object_get(label,
- "delta-x", &deltax,
- "delta-y", &deltay,
- "rotation", &rotation,
- "size", &size,
- "fixed-size", &fixed_size,
- "text", &text,
- NULL);
g_string_printf(str, "/app/3d/labels/%s/", labels_3d[i].key);
- len = str->len;
-
- g_string_append(str, "delta-x");
- gwy_container_set_double_by_name(settings, str->str, deltax);
- g_string_truncate(str, len);
-
- g_string_append(str, "delta-y");
- gwy_container_set_double_by_name(settings, str->str, deltay);
- g_string_truncate(str, len);
-
- g_string_append(str, "rotation");
- gwy_container_set_double_by_name(settings, str->str, rotation);
- g_string_truncate(str, len);
-
- g_string_append(str, "size");
- gwy_container_set_double_by_name(settings, str->str, size);
- g_string_truncate(str, len);
-
- g_string_append(str, "fixed-size");
- gwy_container_set_boolean_by_name(settings, str->str, fixed_size);
- g_string_truncate(str, len);
-
- /* g_object_get() allocates it, gwy_container_set_string_by_name()
- * consumes it. */
- g_string_append(str, "text");
- gwy_container_set_string_by_name(settings, str->str, text);
- g_string_truncate(str, len);
+ save_or_restore_object_properties(G_OBJECT(label), settings, FALSE, str);
}
g_string_free(str, TRUE);
@@ -1276,75 +1372,30 @@ _gwy_app_3d_view_init_setup(GwyContainer *container,
{
GwyContainer *settings;
Gwy3DSetup *setup;
- Gwy3DProjection projection;
- Gwy3DVisualization visualization;
- gdouble dblvalue;
- gboolean boolvalue;
GString *str;
- gchar *key;
guint i;
g_return_val_if_fail(GWY_IS_CONTAINER(container), FALSE);
g_return_val_if_fail(setup_prefix, FALSE);
- key = g_strconcat(setup_prefix, "/setup", NULL);
- if (gwy_container_gis_object_by_name(container, key, &setup)
+ str = g_string_new(setup_prefix);
+ g_string_append(str, "/setup");
+ if (gwy_container_gis_object_by_name(container, str->str, &setup)
&& GWY_IS_3D_SETUP(setup)) {
- g_free(key);
+ g_string_free(str, TRUE);
return FALSE;
}
setup = gwy_3d_setup_new();
+ gwy_container_set_object_by_name(container, str->str, setup);
+
settings = gwy_app_settings_get();
- if (gwy_container_gis_boolean_by_name(settings, "/app/3d/axes-visible",
- &boolvalue))
- g_object_set(setup, "axes-visible", boolvalue, NULL);
- if (gwy_container_gis_boolean_by_name(settings, "/app/3d/labels-visible",
- &boolvalue))
- g_object_set(setup, "labels-visible", boolvalue, NULL);
- if (gwy_container_gis_boolean_by_name(settings, "/app/3d/fmscale-visible",
- &boolvalue))
- g_object_set(setup, "fmscale-visible", boolvalue, NULL);
- if (gwy_container_gis_double_by_name(settings, "/app/3d/rotation-x",
- &dblvalue))
- g_object_set(setup, "rotation-x", dblvalue, NULL);
- if (gwy_container_gis_double_by_name(settings, "/app/3d/rotation-y",
- &dblvalue))
- g_object_set(setup, "rotation-y", dblvalue, NULL);
- if (gwy_container_gis_double_by_name(settings, "/app/3d/scale",
- &dblvalue))
- g_object_set(setup, "scale", dblvalue, NULL);
- if (gwy_container_gis_double_by_name(settings, "/app/3d/z-scale",
- &dblvalue))
- g_object_set(setup, "z-scale", dblvalue, NULL);
- if (gwy_container_gis_double_by_name(settings, "/app/3d/light-phi",
- &dblvalue))
- g_object_set(setup, "light-phi", dblvalue, NULL);
- if (gwy_container_gis_double_by_name(settings, "/app/3d/light-theta",
- &dblvalue))
- g_object_set(setup, "light-theta", dblvalue, NULL);
- if (gwy_container_gis_double_by_name(settings, "/app/3d/line-width",
- &dblvalue))
- g_object_set(setup, "line-width", dblvalue, NULL);
- if (gwy_container_gis_enum_by_name(settings, "/app/3d/visualization",
- &visualization))
- g_object_set(setup, "visualization", visualization, NULL);
- if (gwy_container_gis_enum_by_name(settings, "/app/3d/projection",
- &projection))
- g_object_set(setup, "projection", projection, NULL);
-
- gwy_container_set_object_by_name(container, key, setup);
+ g_string_assign(str, "/app/3d/");
+ save_or_restore_object_properties(G_OBJECT(setup), settings, TRUE, str);
g_object_unref(setup);
- g_free(key);
- str = g_string_new(NULL);
for (i = 0; i < G_N_ELEMENTS(labels_3d); i++) {
Gwy3DLabel *label = NULL;
- gdouble dbl;
- gboolean flag;
- guint len;
- const guchar *text;
-
g_string_printf(str, "%s/%s", setup_prefix, labels_3d[i].key);
gwy_container_gis_object_by_name(container, str->str, &label);
if (label)
@@ -1352,40 +1403,10 @@ _gwy_app_3d_view_init_setup(GwyContainer *container,
label = gwy_3d_label_new(labels_3d[i].default_text);
gwy_container_set_object_by_name(container, str->str, label);
- g_object_unref(label);
g_string_printf(str, "/app/3d/labels/%s/", labels_3d[i].key);
- len = str->len;
-
- g_string_append(str, "delta-x");
- if (gwy_container_gis_double_by_name(settings, str->str, &dbl))
- g_object_set(label, "delta-x", dbl, NULL);
- g_string_truncate(str, len);
-
- g_string_append(str, "delta-y");
- if (gwy_container_gis_double_by_name(settings, str->str, &dbl))
- g_object_set(label, "delta-y", dbl, NULL);
- g_string_truncate(str, len);
-
- g_string_append(str, "rotation");
- if (gwy_container_gis_double_by_name(settings, str->str, &dbl))
- g_object_set(label, "rotation", dbl, NULL);
- g_string_truncate(str, len);
-
- g_string_append(str, "size");
- if (gwy_container_gis_double_by_name(settings, str->str, &dbl))
- g_object_set(label, "size", dbl, NULL);
- g_string_truncate(str, len);
-
- g_string_append(str, "fixed-size");
- if (gwy_container_gis_boolean_by_name(settings, str->str, &flag))
- g_object_set(label, "fixed-size", flag, NULL);
- g_string_truncate(str, len);
-
- g_string_append(str, "text");
- if (gwy_container_gis_string_by_name(settings, str->str, &text))
- g_object_set(label, "text", text, NULL);
- g_string_truncate(str, len);
+ save_or_restore_object_properties(G_OBJECT(label), settings, TRUE, str);
+ g_object_unref(label);
}
g_string_free(str, TRUE);
@@ -1469,6 +1490,8 @@ _gwy_app_brick_window_setup(GwyDataWindow *data_window)
g_signal_connect(data_window, "configure-event",
G_CALLBACK(gwy_app_brick_window_configured), NULL);
+ g_signal_connect(data_window, "size-allocate",
+ G_CALLBACK(gwy_app_brick_window_configured), NULL);
}
static gboolean
@@ -1659,36 +1682,42 @@ change_brick_preview(GwyDataWindow *data_window)
return;
}
- if (type == BRICK_PREVIEW_MEAN)
+ if (type == BRICK_PREVIEW_MEAN) {
gwy_brick_mean_plane(brick, preview,
0, 0, 0,
brick->xres, brick->yres, -1,
TRUE);
- else if (type == BRICK_PREVIEW_MINIMUM)
+ }
+ else if (type == BRICK_PREVIEW_MINIMUM) {
gwy_brick_min_plane(brick, preview,
0, 0, 0,
brick->xres, brick->yres, -1,
TRUE);
- else if (type == BRICK_PREVIEW_MAXIMUM)
+ }
+ else if (type == BRICK_PREVIEW_MAXIMUM) {
gwy_brick_max_plane(brick, preview,
0, 0, 0,
brick->xres, brick->yres, -1,
TRUE);
- else if (type == BRICK_PREVIEW_MINPOS)
+ }
+ else if (type == BRICK_PREVIEW_MINPOS) {
gwy_brick_minpos_plane(brick, preview,
- 0, 0, 0,
- brick->xres, brick->yres, -1,
- TRUE);
- else if (type == BRICK_PREVIEW_MAXPOS)
+ 0, 0, 0,
+ brick->xres, brick->yres, -1,
+ TRUE);
+ }
+ else if (type == BRICK_PREVIEW_MAXPOS) {
gwy_brick_maxpos_plane(brick, preview,
- 0, 0, 0,
- brick->xres, brick->yres, -1,
- TRUE);
- else if (type == BRICK_PREVIEW_RMS)
+ 0, 0, 0,
+ brick->xres, brick->yres, -1,
+ TRUE);
+ }
+ else if (type == BRICK_PREVIEW_RMS) {
gwy_brick_rms_plane(brick, preview,
0, 0, 0,
brick->xres, brick->yres, -1,
TRUE);
+ }
else if (type == BRICK_PREVIEW_CHANNEL) {
GQuark quark = gwy_app_get_data_key_for_id(cid);
GObject *field = gwy_container_get_object(cdata, quark);
@@ -1880,6 +1909,8 @@ _gwy_app_surface_window_setup(GwyDataWindow *data_window)
g_signal_connect(data_window, "configure-event",
G_CALLBACK(gwy_app_surface_window_configured), NULL);
+ g_signal_connect(data_window, "size-allocate",
+ G_CALLBACK(gwy_app_surface_window_configured), NULL);
}
static gboolean
@@ -2462,7 +2493,7 @@ restore_data_window_zoom(GwyDataWindow *data_window)
gtk_widget_size_request(GTK_WIDGET(data_view), &req);
scw = gdk_screen_get_width(screen);
sch = gdk_screen_get_height(screen);
- newrelsize = MAX(req.width/scw, req.height/sch);
+ newrelsize = MAX(scale*req.width/scw, scale*req.height/sch);
gwy_debug("restoring data window: "
"relsize %g, zoom %g, request %dx%d, newrelsize %g",
relsize, scale, req.width, req.height, newrelsize);
@@ -2542,26 +2573,37 @@ _gwy_app_get_n_recent_files(void)
void
gwy_app_init_widget_styles(void)
{
- gtk_rc_parse_string(/* data window corner buttons */
- "style \"cornerbutton\" {\n"
- "GtkButton::focus_line_width = 0\n"
- "GtkButton::focus_padding = 0\n"
- "}\n"
- "widget \"*.cornerbutton\" style \"cornerbutton\"\n"
- "\n"
- /* toolbox group header buttons */
- "style \"toolboxheader\" {\n"
- "GtkButton::focus_line_width = 0\n"
- "GtkButton::focus_padding = 0\n"
- "}\n"
- "widget \"*.toolboxheader\" style \"toolboxheader\"\n"
- "\n"
- /* toolbox single-item menubars */
- "style \"toolboxmenubar\" {\n"
- "GtkMenuBar::shadow_type = 0\n"
- "}\n"
- "widget \"*.toolboxmenubar\" style \"toolboxmenubar\"\n"
- "\n");
+ static const gchar gwyrcstyle[] =
+ /* data window corner buttons */
+ "style \"cornerbutton\" {\n"
+ "GtkButton::focus_line_width = 0\n"
+ "GtkButton::focus_padding = 0\n"
+ "}\n"
+ "widget \"*.cornerbutton\" style \"cornerbutton\"\n"
+ "\n"
+ /* toolbox group header buttons */
+ "style \"toolboxheader\" {\n"
+ "GtkButton::focus_line_width = 0\n"
+ "GtkButton::focus_padding = 0\n"
+ "}\n"
+ "widget \"*.toolboxheader\" style \"toolboxheader\"\n"
+ "\n"
+ /* toolbox single-item menubars */
+ "style \"toolboxmenubar\" {\n"
+ "GtkMenuBar::shadow_type = 0\n"
+ "}\n"
+ "widget \"*.toolboxmenubar\" style \"toolboxmenubar\"\n"
+ "\n"
+ /* toolbox buttons (XXX: perhaps we would like to inherit the style for
+ * toolbar buttons, but I am unable to extract the right style using
+ * gtk_rc_get_style_by_paths() and gtk_style_get()...) */
+ "style \"toolboxbutton\" {\n"
+ "GtkButton::inner_border = {1, 1, 2, 2}\n"
+ "}\n"
+ "widget \"*.toolboxbutton\" style \"toolboxbutton\"\n"
+ "\n";
+
+ gtk_rc_parse_string(gwyrcstyle);
}
/**
diff --git a/app/authors.h b/app/authors.h
index 6229e1c..bb0b4dd 100644
--- a/app/authors.h
+++ b/app/authors.h
@@ -1,54 +1,53 @@
/* This is a GENERATED file */
/*< private_header >*/
static const gchar developers[] =
- "David Nečas (Yeti)\n"
- "Petr Klapetek\n"
- "Christopher Anderson\n"
- "Martin Šiler\n"
- "Jindřich Bílek\n"
- "Nenad Ocelic\n"
- "Rok Zitko\n"
- "Lukáš Chvátal\n"
- "Sven Neumann\n"
- "Jan Hořák\n"
- "Александр Ковалев\n"
- "Owain Davies\n"
- "Rolf Würdemann\n"
- "Dirk Kähler\n"
- "Miroslav Valtr\n"
- "Martin Hasoň\n"
- "Philipp Rahe\n"
- "Matthew Caldwell\n"
- "Андрей Груздев\n"
- "Даниил Браташов\n"
- "François Bianco\n"
- "Luke Somers\n"
- "Vojtěch Salajka\n"
- "Anna Campbellova\n"
- "Lennart Fricke\n"
- "Jozef Veselý\n"
- "Gianfranco Gallizia\n"
- "Sameer Grover\n"
- "Niv Levy\n"
- "Vinicius Barboza\n"
- "Jeffrey J. Schwartz\n"
- "Christian Bühler\n"
- "Евгений Рябов\n"
- "Petr Grolich\n"
- "Samo Ziberna\n"
- "Antony Kikaxa\n"
+ "David Nečas (Yeti)\n"
+ "Petr Klapetek\n"
+ "Christopher Anderson\n"
+ "Martin Šiler\n"
+ "Jindřich Bílek\n"
+ "Nenad Ocelic\n"
+ "Rok Zitko\n"
+ "Lukáš Chvátal\n"
+ "Sven Neumann\n"
+ "Jan Hořák\n"
+ "Александр Ковалев\n"
+ "Owain Davies\n"
+ "Rolf Würdemann\n"
+ "Dirk Kähler\n"
+ "Miroslav Valtr\n"
+ "Martin Hasoň\n"
+ "Philipp Rahe\n"
+ "Matthew Caldwell\n"
+ "Андрей Груздев\n"
+ "Даниил Браташов\n"
+ "François Bianco\n"
+ "Luke Somers\n"
+ "Vojtěch Salajka\n"
+ "Anna Campbellova\n"
+ "Lennart Fricke\n"
+ "Jozef Veselý\n"
+ "Gianfranco Gallizia\n"
+ "Sameer Grover\n"
+ "Niv Levy\n"
+ "Vinicius Barboza\n"
+ "Jeffrey J. Schwartz\n"
+ "Christian Bühler\n"
+ "Евгений Рябов\n"
+ "Petr Grolich\n"
+ "Samo Ziberna\n"
+ "Antony Kikaxa\n"
+ "Felix Kling\n"
;
static const gchar translators[] =
- "David Nečas (Yeti)\n"
- "Petr Klapetek\n"
- "Livia Della Seta\n"
- "Philipp Leufke\n"
- "Johannes Römer\n"
- "François Riguet\n"
- "Даниил Браташов\n"
- "Andrés Muñiz Piniella\n"
- "Jeong Jiseong\n"
-;
-static const gchar releasedate[] =
- "2016-11-18"
+ "David Nečas (Yeti)\n"
+ "Petr Klapetek\n"
+ "Livia Della Seta\n"
+ "Philipp Leufke\n"
+ "Johannes Römer\n"
+ "François Riguet\n"
+ "Даниил Браташов\n"
+ "Andrés Muñiz Piniella\n"
+ "Fellype do Nascimento\n"
+ "Jeong Jiseong\n"
;
diff --git a/app/data-browser-aux.c b/app/data-browser-aux.c
index ab1a440..742facf 100644
--- a/app/data-browser-aux.c
+++ b/app/data-browser-aux.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: data-browser-aux.c 19043 2016-10-08 18:58:43Z yeti-dn $
+ * @(#) $Id: data-browser-aux.c 19329 2016-11-29 15:32:12Z yeti-dn $
* Copyright (C) 2006-2016 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -1576,25 +1576,10 @@ _gwy_app_find_ids_unmanaged(GwyContainer *data,
return (gint*)g_array_free(fidata.ids, FALSE);
}
-/**
- * gwy_app_sync_data_items:
- * @source: Source container.
- * @dest: Target container (may be identical to source).
- * @from_id: Data number to copy items from.
- * @to_id: Data number to copy items to.
- * @delete_too: %TRUE to delete items in target if source does not contain
- * them, %FALSE to copy only.
- * @...: 0-terminated list of #GwyDataItem values defining the items to copy.
- *
- * Synchronizes auxiliary data items between data containers.
- **/
-void
-gwy_app_sync_data_items(GwyContainer *source,
- GwyContainer *dest,
- gint from_id,
- gint to_id,
- gboolean delete_too,
- ...)
+static void
+sync_one_data_item(GwyContainer *source, GwyContainer *dest,
+ gint from_id, gint to_id,
+ GwyDataItem what, gboolean delete_too)
{
/* FIXME: copy ALL selections */
static const gchar *sel_keys[] = {
@@ -1604,7 +1589,6 @@ gwy_app_sync_data_items(GwyContainer *source,
"cal_xerr", "cal_yerr", "cal_zerr", "cal_xunc", "cal_yunc", "cal_zunc",
};
- GwyDataItem what;
gchar key_from[40];
gchar key_to[40];
const guchar *name;
@@ -1613,83 +1597,89 @@ gwy_app_sync_data_items(GwyContainer *source,
gboolean boolval;
GObject *obj;
gdouble dbl;
- va_list ap;
guint i;
- g_return_if_fail(GWY_IS_CONTAINER(source));
- g_return_if_fail(GWY_IS_CONTAINER(dest));
- g_return_if_fail(from_id >= 0 && to_id >= 0);
- if (source == dest && from_id == to_id)
- return;
+ switch (what) {
+ case GWY_DATA_ITEM_GRADIENT:
+ g_snprintf(key_from, sizeof(key_from), "/%d/base/palette", from_id);
+ g_snprintf(key_to, sizeof(key_to), "/%d/base/palette", to_id);
+ if (gwy_container_gis_string_by_name(source, key_from, &name))
+ gwy_container_set_string_by_name(dest, key_to, g_strdup(name));
+ else if (delete_too)
+ gwy_container_remove_by_name(dest, key_to);
+ break;
- va_start(ap, delete_too);
- while ((what = va_arg(ap, GwyDataItem))) {
- switch (what) {
- case GWY_DATA_ITEM_GRADIENT:
- g_snprintf(key_from, sizeof(key_from), "/%d/base/palette", from_id);
- g_snprintf(key_to, sizeof(key_to), "/%d/base/palette", to_id);
- if (gwy_container_gis_string_by_name(source, key_from, &name))
- gwy_container_set_string_by_name(dest, key_to, g_strdup(name));
- else if (delete_too)
- gwy_container_remove_by_name(dest, key_to);
- break;
+ case GWY_DATA_ITEM_MASK_COLOR:
+ g_snprintf(key_from, sizeof(key_from), "/%d/mask", from_id);
+ g_snprintf(key_to, sizeof(key_to), "/%d/mask", to_id);
+ if (gwy_rgba_get_from_container(&rgba, source, key_from))
+ gwy_rgba_store_to_container(&rgba, dest, key_to);
+ else if (delete_too)
+ gwy_rgba_remove_from_container(dest, key_to);
+ break;
- case GWY_DATA_ITEM_MASK_COLOR:
- g_snprintf(key_from, sizeof(key_from), "/%d/mask", from_id);
- g_snprintf(key_to, sizeof(key_to), "/%d/mask", to_id);
- if (gwy_rgba_get_from_container(&rgba, source, key_from))
- gwy_rgba_store_to_container(&rgba, dest, key_to);
- else if (delete_too)
- gwy_rgba_remove_from_container(dest, key_to);
- break;
+ case GWY_DATA_ITEM_TITLE:
+ g_snprintf(key_from, sizeof(key_from), "/%d/data/title", from_id);
+ g_snprintf(key_to, sizeof(key_to), "/%d/data/title", to_id);
+ if (gwy_container_gis_string_by_name(source, key_from, &name))
+ gwy_container_set_string_by_name(dest, key_to, g_strdup(name));
+ else if (delete_too)
+ gwy_container_remove_by_name(dest, key_to);
+ break;
- case GWY_DATA_ITEM_TITLE:
- g_snprintf(key_from, sizeof(key_from), "/%d/data/title", from_id);
- g_snprintf(key_to, sizeof(key_to), "/%d/data/title", to_id);
- if (gwy_container_gis_string_by_name(source, key_from, &name))
- gwy_container_set_string_by_name(dest, key_to, g_strdup(name));
- else if (delete_too)
- gwy_container_remove_by_name(dest, key_to);
- break;
+ case GWY_DATA_ITEM_RANGE:
+ g_snprintf(key_from, sizeof(key_from), "/%d/base/min", from_id);
+ g_snprintf(key_to, sizeof(key_to), "/%d/base/min", to_id);
+ if (gwy_container_gis_double_by_name(source, key_from, &dbl))
+ gwy_container_set_double_by_name(dest, key_to, dbl);
+ else if (delete_too)
+ gwy_container_remove_by_name(dest, key_to);
+ g_snprintf(key_from, sizeof(key_from), "/%d/base/max", from_id);
+ g_snprintf(key_to, sizeof(key_to), "/%d/base/max", to_id);
+ if (gwy_container_gis_double_by_name(source, key_from, &dbl)) {
+ gwy_container_set_double_by_name(dest, key_to, dbl);
+ }
+ else if (delete_too)
+ gwy_container_remove_by_name(dest, key_to);
+ case GWY_DATA_ITEM_RANGE_TYPE:
+ g_snprintf(key_from, sizeof(key_from), "/%d/base/range-type",
+ from_id);
+ g_snprintf(key_to, sizeof(key_to), "/%d/base/range-type", to_id);
+ if (gwy_container_gis_enum_by_name(source, key_from, &enumval))
+ gwy_container_set_enum_by_name(dest, key_to, enumval);
+ else if (delete_too)
+ gwy_container_remove_by_name(dest, key_to);
+ break;
- case GWY_DATA_ITEM_RANGE:
- g_snprintf(key_from, sizeof(key_from), "/%d/base/min", from_id);
- g_snprintf(key_to, sizeof(key_to), "/%d/base/min", to_id);
- if (gwy_container_gis_double_by_name(source, key_from, &dbl))
- gwy_container_set_double_by_name(dest, key_to, dbl);
- else if (delete_too)
- gwy_container_remove_by_name(dest, key_to);
- g_snprintf(key_from, sizeof(key_from), "/%d/base/max", from_id);
- g_snprintf(key_to, sizeof(key_to), "/%d/base/max", to_id);
- if (gwy_container_gis_double_by_name(source, key_from, &dbl)) {
- gwy_container_set_double_by_name(dest, key_to, dbl);
- }
- else if (delete_too)
- gwy_container_remove_by_name(dest, key_to);
- case GWY_DATA_ITEM_RANGE_TYPE:
- g_snprintf(key_from, sizeof(key_from), "/%d/base/range-type",
- from_id);
- g_snprintf(key_to, sizeof(key_to), "/%d/base/range-type", to_id);
- if (gwy_container_gis_enum_by_name(source, key_from, &enumval))
- gwy_container_set_enum_by_name(dest, key_to, enumval);
- else if (delete_too)
- gwy_container_remove_by_name(dest, key_to);
- break;
+ case GWY_DATA_ITEM_REAL_SQUARE:
+ g_snprintf(key_from, sizeof(key_from), "/%d/data/realsquare",
+ from_id);
+ g_snprintf(key_to, sizeof(key_to), "/%d/data/realsquare", to_id);
+ if (gwy_container_gis_boolean_by_name(source, key_from, &boolval)
+ && boolval)
+ gwy_container_set_boolean_by_name(dest, key_to, boolval);
+ else if (delete_too)
+ gwy_container_remove_by_name(dest, key_to);
+ break;
- case GWY_DATA_ITEM_REAL_SQUARE:
- g_snprintf(key_from, sizeof(key_from), "/%d/data/realsquare",
- from_id);
- g_snprintf(key_to, sizeof(key_to), "/%d/data/realsquare", to_id);
- if (gwy_container_gis_boolean_by_name(source, key_from, &boolval)
- && boolval)
- gwy_container_set_boolean_by_name(dest, key_to, boolval);
- else if (delete_too)
- gwy_container_remove_by_name(dest, key_to);
- break;
+ case GWY_DATA_ITEM_META:
+ g_snprintf(key_from, sizeof(key_from), "/%d/meta", from_id);
+ g_snprintf(key_to, sizeof(key_to), "/%d/meta", to_id);
+ if (gwy_container_gis_object_by_name(source, key_from, &obj)) {
+ obj = gwy_serializable_duplicate(obj);
+ gwy_container_set_object_by_name(dest, key_to, obj);
+ g_object_unref(obj);
+ }
+ else if (delete_too)
+ gwy_container_remove_by_name(dest, key_to);
+ break;
- case GWY_DATA_ITEM_META:
- g_snprintf(key_from, sizeof(key_from), "/%d/meta", from_id);
- g_snprintf(key_to, sizeof(key_to), "/%d/meta", to_id);
+ case GWY_DATA_ITEM_CALDATA:
+ for (i = 0; i < G_N_ELEMENTS(cal_keys); i++) {
+ g_snprintf(key_from, sizeof(key_from), "/%d/data/%s",
+ from_id, cal_keys[i]);
+ g_snprintf(key_to, sizeof(key_to), "/%d/data/%s",
+ to_id, cal_keys[i]);
if (gwy_container_gis_object_by_name(source, key_from, &obj)) {
obj = gwy_serializable_duplicate(obj);
gwy_container_set_object_by_name(dest, key_to, obj);
@@ -1697,50 +1687,104 @@ gwy_app_sync_data_items(GwyContainer *source,
}
else if (delete_too)
gwy_container_remove_by_name(dest, key_to);
- break;
-
- case GWY_DATA_ITEM_CALDATA:
- for (i = 0; i < G_N_ELEMENTS(cal_keys); i++) {
- g_snprintf(key_from, sizeof(key_from), "/%d/data/%s",
- from_id, cal_keys[i]);
- g_snprintf(key_to, sizeof(key_to), "/%d/data/%s",
- to_id, cal_keys[i]);
- if (gwy_container_gis_object_by_name(source, key_from, &obj)) {
- obj = gwy_serializable_duplicate(obj);
- gwy_container_set_object_by_name(dest, key_to, obj);
- g_object_unref(obj);
- }
- else if (delete_too)
- gwy_container_remove_by_name(dest, key_to);
- }
- break;
+ }
+ break;
- case GWY_DATA_ITEM_SELECTIONS:
- for (i = 0; i < G_N_ELEMENTS(sel_keys); i++) {
- g_snprintf(key_from, sizeof(key_from), "/%d/select/%s",
- from_id, sel_keys[i]);
- g_snprintf(key_to, sizeof(key_to), "/%d/select/%s",
- to_id, sel_keys[i]);
- if (gwy_container_gis_object_by_name(source, key_from, &obj)
- && gwy_selection_get_data(GWY_SELECTION(obj), NULL)) {
- obj = gwy_serializable_duplicate(obj);
- gwy_container_set_object_by_name(dest, key_to, obj);
- g_object_unref(obj);
- }
- else if (delete_too)
- gwy_container_remove_by_name(dest, key_to);
+ case GWY_DATA_ITEM_SELECTIONS:
+ for (i = 0; i < G_N_ELEMENTS(sel_keys); i++) {
+ g_snprintf(key_from, sizeof(key_from), "/%d/select/%s",
+ from_id, sel_keys[i]);
+ g_snprintf(key_to, sizeof(key_to), "/%d/select/%s",
+ to_id, sel_keys[i]);
+ if (gwy_container_gis_object_by_name(source, key_from, &obj)
+ && gwy_selection_get_data(GWY_SELECTION(obj), NULL)) {
+ obj = gwy_serializable_duplicate(obj);
+ gwy_container_set_object_by_name(dest, key_to, obj);
+ g_object_unref(obj);
}
- break;
-
- default:
- g_assert_not_reached();
- break;
+ else if (delete_too)
+ gwy_container_remove_by_name(dest, key_to);
}
+ break;
+
+ default:
+ g_assert_not_reached();
+ break;
}
+}
+
+/**
+ * gwy_app_sync_data_items:
+ * @source: Source container.
+ * @dest: Target container (may be identical to source).
+ * @from_id: Data number to copy items from.
+ * @to_id: Data number to copy items to.
+ * @delete_too: %TRUE to delete items in target if source does not contain
+ * them, %FALSE to copy only.
+ * @...: 0-terminated list of #GwyDataItem values defining the items to copy.
+ *
+ * Synchronizes auxiliary channel items between data containers.
+ **/
+void
+gwy_app_sync_data_items(GwyContainer *source,
+ GwyContainer *dest,
+ gint from_id,
+ gint to_id,
+ gboolean delete_too,
+ ...)
+{
+ GwyDataItem what;
+ va_list ap;
+
+ g_return_if_fail(GWY_IS_CONTAINER(source));
+ g_return_if_fail(GWY_IS_CONTAINER(dest));
+ g_return_if_fail(from_id >= 0 && to_id >= 0);
+ if (source == dest && from_id == to_id)
+ return;
+
+ va_start(ap, delete_too);
+ while ((what = va_arg(ap, GwyDataItem)))
+ sync_one_data_item(source, dest, from_id, to_id, what, delete_too);
va_end(ap);
}
/**
+ * gwy_app_sync_data_itemsv:
+ * @source: Source container.
+ * @dest: Target container (may be identical to source).
+ * @from_id: Data number to copy items from.
+ * @to_id: Data number to copy items to.
+ * @delete_too: %TRUE to delete items in target if source does not contain
+ * them, %FALSE to copy only.
+ * @items: List of #GwyDataItem values defining the items to copy.
+ * @nitems: Number of items in @items.
+ *
+ * Synchronizes auxiliary channel items between data containers.
+ *
+ * Since: 2.48
+ **/
+void
+gwy_app_sync_data_itemsv(GwyContainer *source,
+ GwyContainer *dest,
+ gint from_id,
+ gint to_id,
+ gboolean delete_too,
+ const GwyDataItem *items,
+ guint nitems)
+{
+ guint i;
+
+ g_return_if_fail(GWY_IS_CONTAINER(source));
+ g_return_if_fail(GWY_IS_CONTAINER(dest));
+ g_return_if_fail(from_id >= 0 && to_id >= 0);
+ if (source == dest && from_id == to_id)
+ return;
+
+ for (i = 0; i < nitems; i++)
+ sync_one_data_item(source, dest, from_id, to_id, items[i], delete_too);
+}
+
+/**
* gwy_app_data_browser_copy_channel:
* @source: Source container.
* @id: Data channel id.
diff --git a/app/data-browser.c b/app/data-browser.c
index f3c1620..a8a5d1b 100644
--- a/app/data-browser.c
+++ b/app/data-browser.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: data-browser.c 19137 2016-10-31 07:51:16Z yeti-dn $
+ * @(#) $Id: data-browser.c 20177 2017-08-07 08:31:36Z yeti-dn $
* Copyright (C) 2006-2016 David Necas (Yeti), Petr Klapetek, Chris Anderson
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net, sidewinderasu at gmail.com.
*
@@ -5579,7 +5579,7 @@ gwy_app_data_browser_construct_window(GwyAppDataBrowser *browser)
/* Channels tab */
box_page = gtk_vbox_new(FALSE, 0);
- label = gtk_label_new(_("Channels"));
+ label = gtk_label_new(_("Images"));
gtk_notebook_append_page(GTK_NOTEBOOK(browser->notebook), box_page, label);
scwin = gtk_scrolled_window_new(NULL, NULL);
@@ -7420,6 +7420,46 @@ gwy_app_data_browser_get_current(GwyAppWhat what,
va_end(ap);
}
+static gboolean
+title_matches_pattern(GwyContainer *data,
+ GwyAppPage pageno,
+ gint id,
+ GPatternSpec *pattern)
+{
+ gboolean ok = FALSE;
+ GQuark quark;
+ GObject *object;
+ gchar *title;
+
+ if (!pattern)
+ return TRUE;
+
+ if (pageno == GWY_PAGE_CHANNELS)
+ title = _gwy_app_figure_out_channel_title(data, id);
+ else if (pageno == GWY_PAGE_VOLUMES)
+ title = gwy_app_get_brick_title(data, id);
+ else if (pageno == GWY_PAGE_XYZS)
+ title = gwy_app_get_surface_title(data, id);
+ else if (pageno == GWY_PAGE_GRAPHS
+ || pageno == GWY_PAGE_SPECTRA) {
+ if (pageno == GWY_PAGE_GRAPHS)
+ quark = gwy_app_get_graph_key_for_id(id);
+ else
+ quark = gwy_app_get_spectra_key_for_id(id);
+
+ object = gwy_container_get_object(data, quark);
+ g_object_get(object, "title", &title, NULL);
+ }
+ else {
+ g_return_val_if_reached(FALSE);
+ }
+
+ ok = g_pattern_match_string(pattern, title);
+ g_free(title);
+
+ return ok;
+}
+
static gint*
gwy_app_data_list_get_object_ids(GwyContainer *data,
GwyAppPage pageno,
@@ -7430,61 +7470,54 @@ gwy_app_data_list_get_object_ids(GwyContainer *data,
GwyAppDataProxy *proxy;
GtkTreeModel *model;
GtkTreeIter iter;
- gchar *title;
- gint *ids;
- gint n;
+ gint *ids = NULL;
+ gint n, j;
browser = gwy_app_get_data_browser();
proxy = gwy_app_data_browser_get_proxy(browser, data);
- if (!proxy)
- return NULL;
-
if (titleglob)
pattern = g_pattern_spec_new(titleglob);
- model = GTK_TREE_MODEL(proxy->lists[pageno].store);
- n = gtk_tree_model_iter_n_children(model, NULL);
- ids = g_new(gint, n+1);
- if (n) {
- n = 0;
- gtk_tree_model_get_iter_first(model, &iter);
- do {
- gboolean ok = FALSE;
-
- gtk_tree_model_get(model, &iter, MODEL_ID, ids + n, -1);
- if (pattern) {
- if (pageno == GWY_PAGE_CHANNELS) {
- title = _gwy_app_figure_out_channel_title(data, ids[n]);
- ok = g_pattern_match_string(pattern, title);
- g_free(title);
- }
- else if (pageno == GWY_PAGE_VOLUMES) {
- title = gwy_app_get_brick_title(data, ids[n]);
- ok = g_pattern_match_string(pattern, title);
- g_free(title);
- }
- else if (pageno == GWY_PAGE_XYZS) {
- title = gwy_app_get_surface_title(data, ids[n]);
- ok = g_pattern_match_string(pattern, title);
- g_free(title);
- }
- else if (pageno == GWY_PAGE_GRAPHS
- || pageno == GWY_PAGE_SPECTRA) {
- GObject *object;
-
- gtk_tree_model_get(model, &iter, MODEL_OBJECT, &object, -1);
- g_object_get(object, "title", &title, NULL);
- ok = g_pattern_match_string(pattern, title);
- g_free(title);
- g_object_unref(object);
- }
+ if (proxy) {
+ model = GTK_TREE_MODEL(proxy->lists[pageno].store);
+ n = gtk_tree_model_iter_n_children(model, NULL);
+ ids = g_new(gint, n+1);
+ if (n) {
+ n = 0;
+ gtk_tree_model_get_iter_first(model, &iter);
+ do {
+ gtk_tree_model_get(model, &iter, MODEL_ID, ids + n, -1);
+ if (title_matches_pattern(data, pageno, ids[n], pattern))
+ n++;
+ } while (gtk_tree_model_iter_next(model, &iter));
+ }
+ }
+ else {
+ struct {
+ GwyAppPage page;
+ GwyAppKeyType keytype;
+ GType objtype;
+ }
+ page2key[] = {
+ { GWY_PAGE_CHANNELS, KEY_IS_DATA, GWY_TYPE_DATA_FIELD, },
+ { GWY_PAGE_GRAPHS, KEY_IS_GRAPH, GWY_TYPE_GRAPH_MODEL, },
+ { GWY_PAGE_VOLUMES, KEY_IS_BRICK, GWY_TYPE_BRICK, },
+ { GWY_PAGE_XYZS, KEY_IS_SURFACE, GWY_TYPE_SURFACE, },
+ { GWY_PAGE_SPECTRA, KEY_IS_SPECTRA, GWY_TYPE_SPECTRA, },
+ };
+ for (n = 0; n < G_N_ELEMENTS(page2key); n++) {
+ if (pageno == page2key[n].page) {
+ ids = _gwy_app_find_ids_unmanaged(data,
+ page2key[n].keytype,
+ page2key[n].objtype);
+ break;
}
- else
- ok = TRUE;
-
- if (ok)
- n++;
- } while (gtk_tree_model_iter_next(model, &iter));
+ }
+ g_return_val_if_fail(ids, NULL);
+ for (j = n = 0; ids[j] != -1; j++) {
+ if (title_matches_pattern(data, pageno, ids[j], pattern))
+ ids[n++] = ids[j];
+ }
}
ids[n] = -1;
@@ -7509,11 +7542,7 @@ gwy_app_data_list_get_object_ids(GwyContainer *data,
gint*
gwy_app_data_browser_get_data_ids(GwyContainer *data)
{
- gint *ids;
-
- if ((ids = gwy_app_data_list_get_object_ids(data, GWY_PAGE_CHANNELS, NULL)))
- return ids;
- return _gwy_app_find_ids_unmanaged(data, KEY_IS_DATA, GWY_TYPE_DATA_FIELD);
+ return gwy_app_data_list_get_object_ids(data, GWY_PAGE_CHANNELS, NULL);
}
/**
@@ -7531,12 +7560,7 @@ gwy_app_data_browser_get_data_ids(GwyContainer *data)
gint*
gwy_app_data_browser_get_graph_ids(GwyContainer *data)
{
- gint *ids;
-
- if ((ids = gwy_app_data_list_get_object_ids(data, GWY_PAGE_GRAPHS, NULL)))
- return ids;
- return _gwy_app_find_ids_unmanaged(data, KEY_IS_GRAPH,
- GWY_TYPE_GRAPH_MODEL);
+ return gwy_app_data_list_get_object_ids(data, GWY_PAGE_GRAPHS, NULL);
}
/**
@@ -7556,11 +7580,7 @@ gwy_app_data_browser_get_graph_ids(GwyContainer *data)
gint*
gwy_app_data_browser_get_spectra_ids(GwyContainer *data)
{
- gint *ids;
-
- if ((ids = gwy_app_data_list_get_object_ids(data, GWY_PAGE_SPECTRA, NULL)))
- return ids;
- return _gwy_app_find_ids_unmanaged(data, KEY_IS_SPECTRA, GWY_TYPE_SPECTRA);
+ return gwy_app_data_list_get_object_ids(data, GWY_PAGE_SPECTRA, NULL);
}
/**
@@ -7580,11 +7600,7 @@ gwy_app_data_browser_get_spectra_ids(GwyContainer *data)
gint*
gwy_app_data_browser_get_volume_ids(GwyContainer *data)
{
- gint *ids;
-
- if ((ids = gwy_app_data_list_get_object_ids(data, GWY_PAGE_VOLUMES, NULL)))
- return ids;
- return _gwy_app_find_ids_unmanaged(data, KEY_IS_BRICK, GWY_TYPE_BRICK);
+ return gwy_app_data_list_get_object_ids(data, GWY_PAGE_VOLUMES, NULL);
}
/**
@@ -7600,11 +7616,7 @@ gwy_app_data_browser_get_volume_ids(GwyContainer *data)
gint*
gwy_app_data_browser_get_xyz_ids(GwyContainer *data)
{
- gint *ids;
-
- if ((ids = gwy_app_data_list_get_object_ids(data, GWY_PAGE_XYZS, NULL)))
- return ids;
- return _gwy_app_find_ids_unmanaged(data, KEY_IS_SURFACE, GWY_TYPE_SURFACE);
+ return gwy_app_data_list_get_object_ids(data, GWY_PAGE_XYZS, NULL);
}
static GtkWindow*
@@ -7986,13 +7998,17 @@ gwy_app_data_browser_set_gui_enabled(gboolean setting)
/**
* gwy_app_data_browser_find_data_by_title:
- * @data: A data container managed by the data-browser.
+ * @data: A data container.
* @titleglob: Pattern, as used by #GPatternSpec, to match the channel titles
* against.
*
* Gets the list of all channels in a data container whose titles match the
* specified pattern.
*
+ * The function originally could be used only for data containers managed by
+ * the data browser. Since version 2.49 it can be used for all file-like
+ * data containers.
+ *
* Returns: A newly allocated array with channel ids, -1 terminated.
*
* Since: 2.21
@@ -8006,13 +8022,17 @@ gwy_app_data_browser_find_data_by_title(GwyContainer *data,
/**
* gwy_app_data_browser_find_graphs_by_title:
- * @data: A data container managed by the data-browser.
+ * @data: A data container.
* @titleglob: Pattern, as used by #GPatternSpec, to match the graph titles
* against.
*
* Gets the list of all graphs in a data container whose titles match the
* specified pattern.
*
+ * The function originally could be used only for data containers managed by
+ * the data browser. Since version 2.49 it can be used for all file-like
+ * data containers.
+ *
* Returns: A newly allocated array with graph ids, -1 terminated.
*
* Since: 2.21
@@ -8026,13 +8046,17 @@ gwy_app_data_browser_find_graphs_by_title(GwyContainer *data,
/**
* gwy_app_data_browser_find_spectra_by_title:
- * @data: A data container managed by the data-browser.
+ * @data: A data container.
* @titleglob: Pattern, as used by #GPatternSpec, to match the spectra titles
* against.
*
* Gets the list of all spectra in a data container whose titles match the
* specified pattern.
*
+ * The function originally could be used only for data containers managed by
+ * the data browser. Since version 2.49 it can be used for all file-like
+ * data containers.
+ *
* Returns: A newly allocated array with spectra ids, -1 terminated.
*
* Since: 2.21
@@ -8046,13 +8070,17 @@ gwy_app_data_browser_find_spectra_by_title(GwyContainer *data,
/**
* gwy_app_data_browser_find_volume_by_title:
- * @data: A data container managed by the data-browser.
+ * @data: A data container.
* @titleglob: Pattern, as used by #GPatternSpec, to match the volume data
* titles against.
*
* Gets the list of all volume data in a data container whose titles match the
* specified pattern.
*
+ * The function originally could be used only for data containers managed by
+ * the data browser. Since version 2.49 it can be used for all file-like
+ * data containers.
+ *
* Returns: A newly allocated array with volume data ids, -1 terminated.
*
* Since: 2.45
@@ -8066,13 +8094,17 @@ gwy_app_data_browser_find_volume_by_title(GwyContainer *data,
/**
* gwy_app_data_browser_find_xyz_by_title:
- * @data: A data container managed by the data-browser.
+ * @data: A data container.
* @titleglob: Pattern, as used by #GPatternSpec, to match the XYZ data
* titles against.
*
* Gets the list of all XYZ data in a data container whose titles match the
* specified pattern.
*
+ * The function originally could be used only for data containers managed by
+ * the data browser. Since version 2.49 it can be used for all file-like
+ * data containers.
+ *
* Returns: A newly allocated array with XYZ data ids, -1 terminated.
*
* Since: 2.45
diff --git a/app/data-browser.h b/app/data-browser.h
index 3f7183e..deeff5d 100644
--- a/app/data-browser.h
+++ b/app/data-browser.h
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: data-browser.h 18862 2016-08-21 11:15:58Z yeti-dn $
+ * @(#) $Id: data-browser.h 19329 2016-11-29 15:32:12Z yeti-dn $
* Copyright (C) 2006-2015 David Necas (Yeti), Petr Klapetek, Chris Anderson
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net, sidewinderasu at gmail.com.
*
@@ -172,6 +172,13 @@ void gwy_app_sync_data_items (GwyContainer *source,
gint to_id,
gboolean delete_too,
...);
+void gwy_app_sync_data_itemsv (GwyContainer *source,
+ GwyContainer *dest,
+ gint from_id,
+ gint to_id,
+ gboolean delete_too,
+ const GwyDataItem *items,
+ guint nitems);
gint gwy_app_data_browser_copy_channel (GwyContainer *source,
gint id,
GwyContainer *dest);
diff --git a/app/file.c b/app/file.c
index 74ae3c1..1310b91 100644
--- a/app/file.c
+++ b/app/file.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: file.c 19229 2016-11-10 16:28:18Z yeti-dn $
+ * @(#) $Id: file.c 19456 2017-02-07 12:39:07Z yeti-dn $
* Copyright (C) 2003-2006 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -177,7 +177,7 @@ warn_broken_load_func(const gchar *name,
GwyContainer *data)
{
static const gchar *broken_file_funcs[] = {
- "ambfile", "dimensionfile",
+ "dimensionfile",
/*"at present no modules are broken and this is not a file type name",*/
};
@@ -266,6 +266,13 @@ gwy_app_file_load_real(const gchar *filename_utf8,
gwy_data_validate(data,
GWY_DATA_VALIDATE_CORRECT
| GWY_DATA_VALIDATE_NO_REPORT);
+ if (_gwy_app_enforce_graph_abscissae_order(data)) {
+ if (!gwy_stramong(name, "gwyfile", NULL)) {
+ g_warning("Module %s did not import file %s with graph curve "
+ "points in ascending order. Please fix the module.",
+ name, filename_utf8);
+ }
+ }
if (do_add_loaded)
gwy_app_file_add_loaded(data, filename_utf8, filename_sys);
}
diff --git a/app/gwyappfilechooser.c b/app/gwyappfilechooser.c
index df20e80..0ce8057 100644
--- a/app/gwyappfilechooser.c
+++ b/app/gwyappfilechooser.c
@@ -1,6 +1,6 @@
/*
- * @(#) $Id: gwyappfilechooser.c 19043 2016-10-08 18:58:43Z yeti-dn $
- * Copyright (C) 2003-2016 David Necas (Yeti), Petr Klapetek.
+ * @(#) $Id: gwyappfilechooser.c 20124 2017-07-31 15:31:21Z yeti-dn $
+ * Copyright (C) 2003-2017 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
* This program is free software; you can redistribute it and/or modify
@@ -22,6 +22,7 @@
#include "config.h"
#include <string.h>
#include <stdlib.h>
+#include <glib/gstdio.h>
#include <gtk/gtk.h>
#include <libgwyddion/gwymacros.h>
#include <libgwyddion/gwymath.h>
@@ -31,6 +32,10 @@
#include <app/gwyapp.h>
#include "gwyappinternal.h"
+/* Do not try to full-preview files larger than this. 100 MB is an arbitrary
+ * limit but most < 100 MB files seem to be readable fairly quickly. */
+#define MAX_FILE_SIZE_FOR_PREVIEW (96UL*1024UL*1024UL)
+
enum {
BLOODY_ICON_VIEW_PADDING = 2*6,
PADDED_THUMBNAIL_SIZE = TMS_NORMAL_THUMB_SIZE + BLOODY_ICON_VIEW_PADDING
@@ -274,6 +279,10 @@ _gwy_app_file_chooser_get(GtkFileChooserAction action)
G_CALLBACK(gwy_app_file_chooser_save_position), NULL);
gwy_app_restore_window_position(GTK_WINDOW(chooser), chooser->prefix, TRUE);
+ /* Does not filter when initially shown without this. */
+ if (action == GTK_FILE_CHOOSER_ACTION_OPEN)
+ enforce_refilter(chooser);
+
return *instance;
}
@@ -695,9 +704,11 @@ gwy_app_file_chooser_open_filter(const GtkFileFilterInfo *filter_info,
gboolean ok = TRUE;
if (ok && chooser->glob->len) {
- gchar *filename_utf8 = g_filename_to_utf8(filename, -1,
+ gchar *basename = g_path_get_basename(filename);
+ gchar *filename_utf8 = g_filename_to_utf8(basename, -1,
NULL, NULL, NULL);
+ g_free(basename);
if (filename_utf8) {
if (chooser->glob_casesens)
ok = g_pattern_match_string(chooser->pattern, filename_utf8);
@@ -912,6 +923,8 @@ gwy_app_file_chooser_update_preview(GwyAppFileChooser *chooser)
GdkPixbuf *pixbuf;
GtkTreeIter iter;
gchar *filename_sys, *basename_sys, *filename_utf8;
+ gboolean file_too_large = TRUE;
+ GStatBuf st;
gwy_app_file_chooser_free_preview(chooser);
@@ -949,6 +962,9 @@ gwy_app_file_chooser_update_preview(GwyAppFileChooser *chooser)
}
gtk_label_set_text(GTK_LABEL(chooser->preview_type), "");
+ if (g_stat(filename_sys, &st) == 0)
+ file_too_large = (st.st_size > MAX_FILE_SIZE_FOR_PREVIEW);
+
pixbuf = _gwy_app_recent_file_try_thumbnail(filename_sys);
g_free(filename_sys);
@@ -966,14 +982,19 @@ gwy_app_file_chooser_update_preview(GwyAppFileChooser *chooser)
NULL);
gtk_list_store_insert_with_values(GTK_LIST_STORE(model), &iter, -1,
COLUMN_PIXBUF, pixbuf,
- COLUMN_FILEINFO, _("…"),
+ COLUMN_FILEINFO,
+ (file_too_large
+ ? _("File too large for preview")
+ : _("…")),
-1);
g_object_unref(pixbuf);
- chooser->full_preview_id
- = g_timeout_add_full(G_PRIORITY_LOW, 250,
- gwy_app_file_chooser_do_full_preview, chooser,
- NULL);
+ if (!file_too_large) {
+ chooser->full_preview_id
+ = g_timeout_add_full(G_PRIORITY_LOW, 250,
+ gwy_app_file_chooser_do_full_preview, chooser,
+ NULL);
+ }
}
static guint
@@ -1353,7 +1374,7 @@ gwy_app_file_chooser_do_full_preview(gpointer user_data)
if ((n = count_ids(xyz_ids)))
g_string_append_printf(str, ", %d xyz", n);
if ((n = count_ids(channel_ids)))
- g_string_append_printf(str, ", %d ch", n);
+ g_string_append_printf(str, ", %d img", n);
if ((n = count_ids(graph_ids)))
g_string_append_printf(str, ", %d gr", n);
if ((n = count_ids(sps_ids)))
diff --git a/app/gwyappinternal.h b/app/gwyappinternal.h
index f2f9f76..312c88e 100644
--- a/app/gwyappinternal.h
+++ b/app/gwyappinternal.h
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: gwyappinternal.h 18922 2016-09-05 10:10:23Z yeti-dn $
+ * @(#) $Id: gwyappinternal.h 19300 2016-11-21 08:49:18Z yeti-dn $
* Copyright (C) 2004-2016 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -177,6 +177,9 @@ void _gwy_app_log_add_message_to_textbuf (GtkTextBuffer *textbuf,
const gchar *message,
GLogLevelFlags log_level);
+G_GNUC_INTERNAL
+guint _gwy_app_enforce_graph_abscissae_order(GwyContainer *data);
+
/* data-browser-aux functions */
G_GNUC_INTERNAL
void _gwy_app_data_merge_gather(gpointer key,
diff --git a/app/gwyddion.c b/app/gwyddion.c
index f98bdae..c5a3802 100644
--- a/app/gwyddion.c
+++ b/app/gwyddion.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: gwyddion.c 18975 2016-09-20 13:28:39Z yeti-dn $
+ * @(#) $Id: gwyddion.c 20076 2017-07-15 18:26:38Z dn2010 $
* Copyright (C) 2003-2006 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -62,19 +62,22 @@ typedef struct {
static gboolean open_command_line_files (gint n,
gchar **args);
static gboolean open_directory_at_startup (gpointer user_data);
+static void block_modules (const gchar *modules_to_block);
static gboolean show_tip_at_startup (gpointer user_data);
static gint check_command_line_files (gint n,
gchar **args);
static void print_help (void);
static void process_preinit_options (int *argc,
char ***argv,
- GwyAppOptions *options);
+ GwyAppOptions *options,
+ gchar **modules_to_block);
static void debug_time (GTimer *timer,
const gchar *task);
static void setup_locale_from_win32_registry(void);
static void warn_broken_settings_file (GtkWidget *parent,
const gchar *settings_file,
const gchar *reason);
+static void check_broken_modules (GtkWidget *parent);
static void gwy_app_init (int *argc,
char ***argv);
static void gwy_app_set_window_icon (void);
@@ -97,6 +100,7 @@ main(int argc, char *argv[])
GtkWidget *toolbox;
gchar **module_dirs;
gchar *settings_file, *recent_file_file, *accel_file;
+ gchar *modules_to_block = NULL;
gboolean has_settings, settings_ok = FALSE;
gboolean opening_files = FALSE, show_tips = FALSE;
GwyContainer *settings;
@@ -107,7 +111,7 @@ main(int argc, char *argv[])
g_unsetenv("UBUNTU_MENUPROXY");
timer = g_timer_new();
- process_preinit_options(&argc, &argv, &app_options);
+ process_preinit_options(&argc, &argv, &app_options, &modules_to_block);
gwy_app_setup_logging((app_options.log_to_file
? GWY_APP_LOGGING_TO_FILE : 0)
| (app_options.log_to_console
@@ -169,6 +173,8 @@ main(int argc, char *argv[])
debug_time(timer, "load settings");
gwy_app_splash_set_message(_("Registering modules"));
+ block_modules(modules_to_block);
+ GWY_FREE(modules_to_block);
module_dirs = gwy_app_settings_get_module_dirs();
gwy_module_register_modules((const gchar**)module_dirs);
/* The Python initialisation somehow overrides SIGINT and Gwyddion can no
@@ -190,7 +196,11 @@ main(int argc, char *argv[])
return !nfailures;
}
- gwy_app_splash_set_message(_("Initializing GUI"));
+ /* Destroy splash before creating UI. Opposite order of actions can
+ * apparently lead to strange errors. */
+ gwy_app_splash_finish();
+ debug_time(timer, "destroy splash");
+
toolbox = gwy_app_toolbox_window_create();
debug_time(timer, "create toolbox");
gwy_app_data_browser_restore();
@@ -198,8 +208,6 @@ main(int argc, char *argv[])
/* A dirty trick, it constructs the recent files menu as a side effect. */
gwy_app_recent_file_list_update(NULL, NULL, NULL, 0);
debug_time(timer, "create recent files menu");
- gwy_app_splash_finish();
- debug_time(timer, "destroy splash");
/* Win32 does not give programs a reasonable physical cwd. So try to set
* something reasonable here. Do it before opening files from arguments
@@ -228,6 +236,8 @@ main(int argc, char *argv[])
g_clear_error(&settings_err);
}
+ check_broken_modules(toolbox);
+
/* Move focus to toolbox */
gtk_window_present(GTK_WINDOW(toolbox));
debug_time(timer, "show toolbox");
@@ -281,7 +291,8 @@ main(int argc, char *argv[])
static void
process_preinit_options(int *argc,
char ***argv,
- GwyAppOptions *options)
+ GwyAppOptions *options,
+ gchar **modules_to_block)
{
int i, j;
gboolean ignore = FALSE;
@@ -356,6 +367,19 @@ process_preinit_options(int *argc,
options->check = TRUE;
continue;
}
+ if (g_str_has_prefix((*argv)[i], "--disable-modules=")) {
+ const gchar *v = (*argv)[i] + strlen("--disable-modules=");
+ if (strlen(v)) {
+ if (*modules_to_block) {
+ gchar *s = g_strconcat(*modules_to_block, ",", v, NULL);
+ g_free(*modules_to_block);
+ *modules_to_block = s;
+ }
+ else
+ *modules_to_block = g_strdup(v);
+ }
+ continue;
+ }
}
j++;
@@ -385,6 +409,8 @@ print_help(void)
" --no-log-to-file Do not write messages to any file.\n"
" --log-to-console Print messages to console\n"
" --no-log-to-console Do not print messages to console.\n"
+" --disable-modules=MODNAME1,MODNAME2,...\n"
+" Prevent registration of given modules.\n"
" --debug-objects Catch leaking objects (devel only).\n"
" --startup-time Measure time of startup tasks.\n"
);
@@ -431,12 +457,11 @@ warn_broken_settings_file(GtkWidget *parent,
{
GtkWidget *dialog;
- dialog = gtk_message_dialog_new
- (GTK_WINDOW(parent),
- GTK_DIALOG_DESTROY_WITH_PARENT,
- GTK_MESSAGE_WARNING,
- GTK_BUTTONS_OK,
- _("Could not read settings."));
+ dialog = gtk_message_dialog_new(GTK_WINDOW(parent),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_WARNING,
+ GTK_BUTTONS_OK,
+ _("Could not read settings."));
gtk_message_dialog_format_secondary_text
(GTK_MESSAGE_DIALOG(dialog),
_("Settings file `%s' cannot be read: %s\n\n"
@@ -451,6 +476,54 @@ warn_broken_settings_file(GtkWidget *parent,
}
static void
+count_failures(gpointer mod_fail_info, gpointer user_data)
+{
+ GwyModuleFailureInfo *finfo = (GwyModuleFailureInfo*)mod_fail_info;
+ guint *n = (guint*)user_data;
+
+ /* Ignore user's modules. */
+ if (!g_str_has_prefix(finfo->filename, gwy_get_user_dir()))
+ (*n)++;
+}
+
+static void
+check_broken_modules(GtkWidget *parent)
+{
+ GtkWidget *dialog;
+ gchar *moduledir;
+ guint n = 0;
+
+ gwy_module_failure_foreach(count_failures, &n);
+ /* Usually, the number should either be less than 3 or huge. */
+ if (n < 8)
+ return;
+
+ dialog = gtk_message_dialog_new(GTK_WINDOW(parent),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_WARNING,
+ GTK_BUTTONS_OK,
+ _("Many modules (%u) failed to register."),
+ n);
+ moduledir = gwy_find_self_dir("modules");
+ gtk_message_dialog_format_secondary_text
+ (GTK_MESSAGE_DIALOG(dialog),
+ _("Most likely Gwyddion was not upgraded correctly. "
+ "Instead, one installation was just overwritten with another, "
+ "and now it is a mess.\n\n"
+ "Please remove completely the module directory\n\n"
+ "%s\n\n"
+ "and reinstall Gwyddion.\n\n"
+ "See Info → Module Browser for specific errors."),
+ moduledir);
+ g_free(moduledir);
+ /* parent is usually in a screen corner, centering on it looks ugly */
+ gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER);
+ gtk_window_present(GTK_WINDOW(dialog));
+ gtk_dialog_run(GTK_DIALOG(dialog));
+ gtk_widget_destroy(dialog);
+}
+
+static void
setup_locale_from_win32_registry(void)
{
#ifdef G_OS_WIN32
@@ -615,6 +688,21 @@ check_command_line_files(gint n,
return nfailures;
}
+static void
+block_modules(const gchar *modules_to_block)
+{
+ gchar **modlist;
+ guint i;
+
+ if (!modules_to_block)
+ return;
+
+ modlist = g_strsplit(modules_to_block, ",", 0);
+ for (i = 0; modlist[i]; i++)
+ gwy_module_disable_registration(modlist[i]);
+ g_strfreev(modlist);
+}
+
static gboolean
show_tip_at_startup(G_GNUC_UNUSED gpointer user_data)
{
diff --git a/app/gwymoduleutils-file.c b/app/gwymoduleutils-file.c
index 322ce1d..2232851 100644
--- a/app/gwymoduleutils-file.c
+++ b/app/gwymoduleutils-file.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: gwymoduleutils-file.c 18368 2016-02-29 21:23:00Z yeti-dn $
+ * @(#) $Id: gwymoduleutils-file.c 19624 2017-04-18 13:45:32Z yeti-dn $
* Copyright (C) 2007-2016 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -227,8 +227,7 @@ gwy_app_xyz_title_fall_back(GwyContainer *data,
* Since Gwyddion has no concept of bad data points, they are usually marked
* with a mask and replaced with some neutral values upon import, leaving the
* user to decide how to proceed further. This helper function performs such
- * replacement, using the average of all good points as the neutral replacement
- * value (at this moment).
+ * replacement.
*
* Returns: The number of bad data points replaced. If zero is returned, all
* points are good and there is no need for masking.
@@ -239,28 +238,23 @@ guint
gwy_app_channel_remove_bad_data(GwyDataField *dfield, GwyDataField *mfield)
{
GwySIUnit *funit, *munit;
- gdouble *data = gwy_data_field_get_data(dfield);
- gdouble *mdata = gwy_data_field_get_data(mfield);
- gdouble *drow, *mrow;
- gdouble avg;
- guint i, j, mcount, xres, yres;
-
- xres = gwy_data_field_get_xres(dfield);
- yres = gwy_data_field_get_yres(dfield);
- avg = gwy_data_field_area_get_avg(dfield, mfield, 0, 0, xres, yres);
+ gdouble *m = gwy_data_field_get_data(mfield);
+ guint i, mcount, n;
+
+ n = gwy_data_field_get_xres(dfield) * gwy_data_field_get_yres(dfield);
mcount = 0;
- for (i = 0; i < yres; i++) {
- mrow = mdata + i*xres;
- drow = data + i*xres;
- for (j = 0; j < xres; j++) {
- if (!mrow[j]) {
- drow[j] = avg;
- mcount++;
- }
- mrow[j] = 1.0 - mrow[j];
+ for (i = 0; i < n; i++) {
+ if (m[i] <= 0.0) {
+ m[i] = 1.0;
+ mcount++;
}
+ else
+ m[i] = 0.0;
}
+ if (mcount)
+ gwy_data_field_laplace_solve(dfield, mfield, -1, 0.25);
+
gwy_data_field_set_xreal(mfield, gwy_data_field_get_xreal(dfield));
gwy_data_field_set_yreal(mfield, gwy_data_field_get_yreal(dfield));
funit = gwy_data_field_get_si_unit_xy(dfield);
@@ -316,7 +310,7 @@ gwy_app_channel_mask_of_nans(GwyDataField *dfield,
if (!mask || !removebad)
return mask;
- gwy_data_field_correct_average_unmasked(dfield, mask);
+ gwy_data_field_laplace_solve(dfield, mask, -1, 0.25);
return mask;
}
diff --git a/app/help.c b/app/help.c
index 6dd43c9..40b71a6 100644
--- a/app/help.c
+++ b/app/help.c
@@ -1,6 +1,6 @@
/*
- * @(#) $Id: help.c 18353 2016-02-24 14:10:42Z yeti-dn $
- * Copyright (C) 2014 David Necas (Yeti).
+ * @(#) $Id: help.c 19898 2017-06-11 06:53:55Z yeti-dn $
+ * Copyright (C) 2014-2017 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
* This program is free software; you can redistribute it and/or modify
@@ -64,7 +64,7 @@ show_uri_win32(G_GNUC_UNUSED const gchar *uri, gboolean complain)
{
#ifdef G_OS_WIN32
static gboolean initialised_com = FALSE;
- gint status;
+ INT_PTR status;
gboolean ok;
if (!uri)
@@ -79,11 +79,11 @@ show_uri_win32(G_GNUC_UNUSED const gchar *uri, gboolean complain)
/* XXX: The first arg is handle to the window. May want to pass it.
* Apparenly gdk_win32_window_get_impl_hwnd() can provide it but this is
* a late addition to Gdk, must check availability properly. */
- status = (int)ShellExecute(NULL, NULL, uri, NULL, NULL, SW_SHOWNORMAL);
+ status = (INT_PTR)ShellExecute(NULL, NULL, uri, NULL, NULL, SW_SHOWNORMAL);
ok = status > 32; /* Otherwise it's the error code. */
if (!ok && complain) {
g_warning("Help ShellExecute() for URI `%s' failed with code %d.",
- uri, status);
+ uri, (gint)status);
}
return ok;
#else
@@ -371,58 +371,88 @@ get_user_guide_online_base(void)
return g_strconcat(UG_ONLINE_BASE, lang, NULL);
}
+#ifdef G_OS_WIN32
+static inline gboolean
+starts_with_drive_letter(const gchar *path)
+{
+ return g_ascii_isalpha(path[0]) && path[1] == ':';
+}
+#endif
+
/* If an URI points to a local file, check if it exists. Otherwise just assume
* it exists. */
static gboolean
check_local_file_uri(const gchar *uri)
{
- GFile *gfile;
- gchar *path, *scheme;
- GFileInfo *fileinfo;
- GFileType filetype;
-
- /* If we use g_file_new_for_uri() on a bare path the tests below will not
- * behave as expected. */
- gfile = g_file_new_for_uri(uri);
- if (!(scheme = g_file_get_uri_scheme(gfile))) {
- const gchar *p;
-
- g_object_unref(gfile);
- if ((p = strchr(uri, '#'))) {
- path = g_strndup(uri, p - uri);
- gfile = g_file_new_for_path(path);
- g_free(path);
- }
- else
- gfile = g_file_new_for_path(uri);
+ guint i, j, len, nslashes = 0;
+ gchar *s = NULL, *decoded = NULL;
+ const gchar *p;
+ gboolean retval;
+
+ /* Trim fragment. */
+ if ((p = strrchr(uri, '#'))) {
+ s = g_strndup(uri, p-uri);
+ uri = s;
}
- else
- g_free(scheme);
- /* We used g_file_hash() here but it segfaults under wine. No idea why. */
- if (!(path = g_file_get_basename(gfile))) {
- g_object_unref(gfile);
- return FALSE;
+ if (strncmp(uri, "file:/", 6) == 0) {
+ for (nslashes = 1; uri[5 + nslashes] == '/'; nslashes++)
+ ;
}
- g_free(path);
- if (!(path = g_file_get_path(gfile))) {
- g_object_unref(gfile);
+ if (!nslashes) {
+ /* Plain local path. */
+ if (uri[0] == '/')
+ goto finish;
+#ifdef G_OS_WIN32
+ if (uri[0] == '\\' || starts_with_drive_letter(uri))
+ goto finish;
+#endif
+
+ /* Is not file: and is not a local path. Assume non-local, and so we
+ * cannot check it. */
+ gwy_debug("non-local %s, assuming OK", uri);
+ g_free(s);
return TRUE;
}
- g_free(path);
- fileinfo = g_file_query_info(gfile, G_FILE_ATTRIBUTE_STANDARD_TYPE,
- 0, NULL, NULL);
- if (!fileinfo) {
- g_object_unref(gfile);
- return FALSE;
+ uri += 5;
+#ifdef G_OS_WIN32
+ if ((nslashes == 1 || nslashes == 3)
+ && starts_with_drive_letter(uri + nslashes))
+ uri += nslashes;
+ else
+ uri += nslashes-2;
+#else
+ uri += nslashes-1;
+#endif
+
+ if (!strchr(uri, '%'))
+ goto finish;
+
+ len = strlen(uri);
+ decoded = g_new(gchar, len+1);
+ for (i = j = 0; i < len; i++) {
+ if (uri[i] == '%'
+ && g_ascii_isdigit(uri[i+1])
+ && g_ascii_isdigit(uri[i+2])) {
+ decoded[j++] = (16*g_ascii_xdigit_value(uri[i+1])
+ + g_ascii_xdigit_value(uri[i+2]));
+ i += 2;
+ }
+ else
+ decoded[j++] = uri[i];
}
- filetype = g_file_info_get_file_type(fileinfo);
- g_object_unref(gfile);
- g_object_unref(fileinfo);
+ decoded[j] = '\0';
+ uri = decoded;
+
+finish:
+ retval = g_file_test(uri, G_FILE_TEST_IS_REGULAR);
+ gwy_debug("checking %s: %d", uri, retval);
+ g_free(s);
+ g_free(decoded);
- return filetype == G_FILE_TYPE_REGULAR;
+ return retval;
}
static gchar*
diff --git a/app/mac_integration.c b/app/mac_integration.c
index cccffe6..1b8120a 100644
--- a/app/mac_integration.c
+++ b/app/mac_integration.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: mac_integration.c 18552 2016-03-29 09:00:59Z yeti-dn $
+ * @(#) $Id: mac_integration.c 19333 2016-11-30 17:09:57Z yeti-dn $
* Copyright (C) 2009 Andrey Gruzdev.
* E-mail: gruzdev at ntmdt.ru.
*
@@ -236,6 +236,7 @@ gwy_osx_set_locale()
{ "fr_FR.UTF-8", "fr" },
{ "it_IT.UTF-8", "it" },
{ "ko_KR.UTF-8", "ko" },
+ { "pt_BR.UTF-8", "pt_BR" },
{ "ru_RU.UTF-8", "ru" },
{ "es_ES.UTF-8", "es" },
/* @@@ GENERATED LANG OS X END @@@ */
diff --git a/app/menu.c b/app/menu.c
index 0ada098..8905bc3 100644
--- a/app/menu.c
+++ b/app/menu.c
@@ -1,6 +1,6 @@
/*
- * @(#) $Id: menu.c 18346 2016-02-24 10:26:37Z yeti-dn $
- * Copyright (C) 2003-2006,2011 David Necas (Yeti), Petr Klapetek.
+ * @(#) $Id: menu.c 20114 2017-07-30 22:33:28Z yeti-dn $
+ * Copyright (C) 2003-2017 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
* This program is free software; you can redistribute it and/or modify
@@ -36,9 +36,6 @@
#include <app/gwyapp.h>
#include "gwyappinternal.h"
-/* Don't use stock icons, many don't look good and/or need disambiguation */
-#define USE_STOCK_ICONS 0
-
typedef struct {
const gchar *name;
const gchar *stock_id;
@@ -334,7 +331,9 @@ gwy_app_menu_create_widgets(GNode *node,
GtkWidget *menu, *item, *image;
if (!G_NODE_IS_ROOT(node)) {
- if (USE_STOCK_ICONS && data->stock_id) {
+ /* If images in menus are disabled by the "gtk-menu-images" setting,
+ * Gtk+ will not show them anyway. */
+ if (data->stock_id) {
item = gtk_image_menu_item_new_with_mnemonic(data->item_translated);
image = gtk_image_new_from_stock(data->stock_id,
GTK_ICON_SIZE_MENU);
diff --git a/app/release.h b/app/release.h
new file mode 100644
index 0000000..893dfa7
--- /dev/null
+++ b/app/release.h
@@ -0,0 +1,3 @@
+/* This is a GENERATED file. */
+/*< private_header >*/
+#define RELEASEDATE 0x20170815u
diff --git a/app/remote-win32.c b/app/remote-win32.c
index 328ccf4..6c36003 100644
--- a/app/remote-win32.c
+++ b/app/remote-win32.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: remote-win32.c 19272 2016-11-16 16:46:46Z yeti-dn $
+ * @(#) $Id: remote-win32.c 19429 2017-01-18 12:30:07Z yeti-dn $
* Copyright (C) 2007 David Necas (Yeti), Jan Horak.
* E-mail: yeti at gwyddion.net, xhorak at gmail.com.
*
@@ -27,6 +27,7 @@
#include <string.h>
#include <gtk/gtk.h>
#include <gdk/gdkwin32.h>
+#include <windows.h>
#include <shlobj.h>
struct _GwyRemote {
@@ -164,7 +165,7 @@ void
gwy_remote_print(GwyRemote *remote)
{
if (remote)
- g_print("%08x\n", (guint32)remote->winid);
+ g_print("%08x\n", (guint32)(UINT_PTR)remote->winid);
}
#endif
diff --git a/app/splash.c b/app/splash.c
index 596e24d..0a6bba9 100644
--- a/app/splash.c
+++ b/app/splash.c
@@ -1,6 +1,6 @@
/*
- * @(#) $Id: splash.c 17711 2015-11-05 10:26:08Z pecold $
- * Copyright (C) 2004 David Necas (Yeti), Petr Klapetek.
+ * @(#) $Id: splash.c 19386 2016-12-28 08:51:32Z yeti-dn $
+ * Copyright (C) 2004-2016 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
* This program is free software; you can redistribute it and/or modify
@@ -19,11 +19,8 @@
* Boston, MA 02110-1301, USA.
*/
-/* XXX: Temporary */
-#include <errno.h>
-#define GDK_PIXBUF_ENABLE_BACKEND 1
-
#include "config.h"
+#include <string.h>
#include <stdlib.h>
#include <gtk/gtk.h>
#include <libgwyddion/gwymacros.h>
@@ -31,6 +28,12 @@
#include <libgwyddion/gwyversion.h>
#include <libgwyddion/gwycontainer.h>
+typedef struct {
+ gchar c;
+ gsize len;
+ const guchar *data;
+} SplashDigit;
+
static void splash_map(void);
static gboolean in_splash = FALSE;
@@ -541,14 +544,563 @@ static const guchar digit_dot_png[] = {
0x00, 0x00, 0xd8, 0x12, 0x05, 0x19, 0x3a, 0x02, 0xff, 0xdf, 0x00, 0x00,
0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
+unsigned char development_snapshot_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
+ 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, 0x18,
+ 0x08, 0x06, 0x00, 0x00, 0x00, 0x91, 0x23, 0x93, 0x23, 0x00, 0x00, 0x09,
+ 0x9e, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xed, 0x5c, 0x07, 0x90, 0x15,
+ 0x35, 0x18, 0x0e, 0x1d, 0xe9, 0x5d, 0x40, 0xc1, 0x82, 0x20, 0x4d, 0x04,
+ 0x81, 0xa3, 0x88, 0x08, 0xa8, 0xf4, 0x66, 0xa3, 0x08, 0x23, 0x0a, 0x07,
+ 0x08, 0x83, 0x74, 0x38, 0x74, 0x28, 0x3a, 0xa0, 0xd2, 0x95, 0x5e, 0xa4,
+ 0x37, 0x95, 0xa2, 0x80, 0x80, 0xa8, 0x28, 0x8c, 0x20, 0x88, 0x85, 0xa2,
+ 0x20, 0x1d, 0x94, 0xde, 0x8b, 0xdc, 0x71, 0xb4, 0x23, 0xe6, 0xdb, 0x64,
+ 0xdf, 0xe6, 0xed, 0xcb, 0xbe, 0xb7, 0xd9, 0x7b, 0xcf, 0x91, 0x99, 0xcd,
+ 0xcc, 0x3f, 0xdc, 0x25, 0xd9, 0x3f, 0x7f, 0xfe, 0x96, 0xff, 0xff, 0x93,
+ 0x83, 0x10, 0xbf, 0xf9, 0xcd, 0x6f, 0x7e, 0xd3, 0x68, 0x54, 0x01, 0x7e,
+ 0xf3, 0xdb, 0xff, 0x5a, 0x5f, 0x68, 0x18, 0xb8, 0xc9, 0xe0, 0x34, 0x83,
+ 0x0d, 0x0c, 0x06, 0x31, 0x28, 0xf0, 0x7f, 0x63, 0x20, 0xfd, 0xc6, 0x02,
+ 0xdf, 0xe0, 0xfc, 0x76, 0x37, 0xe8, 0x4b, 0x10, 0x11, 0x26, 0xdc, 0x58,
+ 0x4d, 0xe8, 0xa9, 0x4f, 0x09, 0x5d, 0x3f, 0x8a, 0xd0, 0x81, 0xaf, 0x10,
+ 0x9a, 0x3f, 0xa7, 0x41, 0xdc, 0x35, 0x06, 0xf1, 0x3e, 0x03, 0xef, 0x9a,
+ 0x96, 0x8d, 0x41, 0x59, 0x06, 0x8d, 0x25, 0xf0, 0x0d, 0x2e, 0x76, 0xfa,
+ 0xe2, 0x8a, 0xdf, 0x4a, 0x83, 0xb3, 0x43, 0xd2, 0x4a, 0x42, 0x3b, 0xd4,
+ 0x0f, 0x10, 0xd9, 0xd1, 0x37, 0xb8, 0xbb, 0x43, 0xc1, 0xb2, 0x66, 0x26,
+ 0xb4, 0xcc, 0x03, 0x84, 0x36, 0x8a, 0xf3, 0xf9, 0xf3, 0x1f, 0xe8, 0x8b,
+ 0x2b, 0x7e, 0x87, 0x10, 0x91, 0x86, 0xf0, 0x13, 0xad, 0x69, 0x35, 0x7e,
+ 0xc2, 0xc9, 0xe3, 0xf1, 0x0d, 0x8c, 0x39, 0xc9, 0x0c, 0x0a, 0xfa, 0x06,
+ 0xe7, 0x87, 0x50, 0x3e, 0x3f, 0xf4, 0xf1, 0xab, 0x26, 0x21, 0x57, 0x6b,
+ 0x26, 0x72, 0x37, 0x3a, 0xaa, 0xa3, 0x35, 0x7e, 0xed, 0x4b, 0x42, 0xef,
+ 0xcd, 0x6d, 0xcc, 0x79, 0x47, 0x7c, 0x5f, 0x9b, 0xc1, 0x1a, 0x06, 0x17,
+ 0x84, 0x21, 0x9a, 0xb0, 0x87, 0xc1, 0xdb, 0x0c, 0x3e, 0x54, 0xe4, 0x86,
+ 0xbf, 0xda, 0x68, 0x98, 0x64, 0x1b, 0xdf, 0xec, 0x02, 0x6f, 0xfa, 0x08,
+ 0x1b, 0x2c, 0xcc, 0x60, 0x14, 0x83, 0xdd, 0x0c, 0x92, 0x6c, 0xb0, 0x5b,
+ 0x8c, 0x15, 0x0a, 0x93, 0xc7, 0xae, 0x67, 0x90, 0x28, 0xc1, 0x19, 0x06,
+ 0xe3, 0x45, 0xd8, 0xa0, 0x9a, 0x7f, 0x84, 0xc1, 0x55, 0x09, 0x40, 0xfb,
+ 0x6b, 0x0c, 0x7e, 0xb1, 0xe1, 0x39, 0x26, 0xf0, 0x64, 0x91, 0x68, 0x75,
+ 0xb3, 0x57, 0x27, 0x3a, 0xbf, 0x65, 0x70, 0x45, 0x82, 0x53, 0x0c, 0xa6,
+ 0x99, 0xe3, 0x0a, 0xfe, 0x38, 0x29, 0x42, 0x2d, 0x06, 0x4b, 0x19, 0x1c,
+ 0x65, 0x70, 0x83, 0x41, 0x8a, 0x04, 0xc9, 0x82, 0xb6, 0x23, 0x1e, 0xe8,
+ 0x00, 0xbf, 0x46, 0x33, 0xd8, 0xc4, 0xe0, 0x24, 0x83, 0xeb, 0x12, 0x20,
+ 0x45, 0xd9, 0xc6, 0xa0, 0x0b, 0x83, 0x34, 0x1e, 0x65, 0xa1, 0x45, 0xb7,
+ 0x82, 0x1f, 0xe1, 0xe8, 0xd6, 0xd1, 0x23, 0xd7, 0xfc, 0x0e, 0xa7, 0xb4,
+ 0x60, 0xc2, 0x68, 0x9c, 0x78, 0x5b, 0xc6, 0x59, 0x73, 0x86, 0xb4, 0x35,
+ 0xe6, 0x6c, 0x64, 0xd0, 0x9d, 0xc1, 0x9d, 0x5a, 0xe5, 0x08, 0x5d, 0x3d,
+ 0x8c, 0xd0, 0xf3, 0x4b, 0xb9, 0x41, 0xfe, 0x39, 0x83, 0xd0, 0xb7, 0x5a,
+ 0x11, 0x9a, 0x2e, 0xad, 0x31, 0x6f, 0xc9, 0xd8, 0xce, 0xd6, 0xb7, 0xbf,
+ 0x4c, 0x0c, 0xac, 0x51, 0x42, 0xac, 0x01, 0x65, 0x3a, 0x37, 0xb1, 0x1b,
+ 0x1f, 0xff, 0xf1, 0xc3, 0x80, 0xc1, 0x45, 0xc4, 0x1b, 0x86, 0x76, 0x08,
+ 0xe1, 0x62, 0xa1, 0x3c, 0x84, 0x8e, 0x8c, 0x27, 0x74, 0xd7, 0x74, 0x42,
+ 0x13, 0x57, 0x72, 0xc0, 0xcf, 0xe8, 0x2b, 0xc8, 0x9d, 0x06, 0x84, 0x51,
+ 0x53, 0x85, 0xe7, 0xd9, 0x0a, 0x84, 0x7e, 0x3f, 0x92, 0xd0, 0xab, 0x2b,
+ 0x08, 0x3d, 0xfd, 0x19, 0xa1, 0xe3, 0xba, 0xf0, 0x70, 0x81, 0x8d, 0xad,
+ 0xb3, 0xcf, 0x07, 0x7f, 0xfa, 0xb7, 0x20, 0xf4, 0xf0, 0x3c, 0x42, 0xff,
+ 0x59, 0xce, 0x69, 0x2e, 0x92, 0x9f, 0xe3, 0x69, 0xf7, 0x1c, 0xa1, 0x3f,
+ 0x4f, 0xe0, 0x78, 0x8e, 0x2e, 0xe4, 0x78, 0xee, 0xc9, 0x68, 0x8c, 0x8d,
+ 0x10, 0xb4, 0x76, 0x77, 0xb9, 0x57, 0xa5, 0xac, 0xea, 0x94, 0x27, 0xf4,
+ 0x9b, 0x0f, 0x08, 0xbd, 0xfc, 0x05, 0xa1, 0x27, 0x3f, 0x21, 0x74, 0x6a,
+ 0x8f, 0x00, 0x9d, 0x8e, 0xe9, 0x81, 0xc2, 0xe0, 0xda, 0x82, 0x86, 0xa7,
+ 0x19, 0x0d, 0x4b, 0x06, 0x12, 0xfa, 0xf7, 0x02, 0x42, 0xaf, 0xb3, 0x1c,
+ 0xfe, 0xf6, 0x5a, 0x4e, 0x0b, 0x68, 0xc2, 0xde, 0xa4, 0xef, 0x74, 0xe8,
+ 0x18, 0x63, 0x3a, 0xed, 0x8d, 0x63, 0x09, 0x3d, 0xc1, 0xc6, 0x92, 0x57,
+ 0xf1, 0x14, 0xe5, 0xb7, 0x49, 0x84, 0xbe, 0xd1, 0x38, 0x80, 0x37, 0xc1,
+ 0x09, 0x77, 0x04, 0x59, 0xc4, 0x92, 0x6e, 0x1d, 0x3d, 0x72, 0xcd, 0xef,
+ 0x48, 0xc2, 0x48, 0xcb, 0xe0, 0xa7, 0x56, 0xb5, 0xac, 0x39, 0x3f, 0x8c,
+ 0x31, 0xe6, 0xc0, 0xcb, 0xdc, 0x7e, 0xb3, 0x19, 0xa1, 0x29, 0x6b, 0xd5,
+ 0x0b, 0x2d, 0x1e, 0xc8, 0xf1, 0x55, 0x2a, 0x11, 0xdc, 0x5f, 0xfc, 0xbe,
+ 0xa0, 0x13, 0xb2, 0x11, 0x94, 0xea, 0xec, 0x62, 0x3e, 0xd6, 0xb5, 0x89,
+ 0x31, 0xe6, 0x0a, 0xaf, 0x03, 0xed, 0xf0, 0x48, 0x17, 0x21, 0x84, 0x0b,
+ 0xcb, 0x9c, 0x99, 0x00, 0x61, 0x3c, 0x55, 0x56, 0xcd, 0x2c, 0x14, 0x89,
+ 0x54, 0xdf, 0x7c, 0x3b, 0x5c, 0xbd, 0xee, 0xf4, 0x9e, 0xa1, 0x73, 0x37,
+ 0x8c, 0x26, 0x74, 0x4c, 0x67, 0x35, 0x9e, 0xe1, 0x1d, 0x0c, 0x1c, 0x87,
+ 0x18, 0x54, 0xd0, 0xd8, 0xeb, 0x73, 0x6e, 0xe9, 0x1c, 0xdd, 0x49, 0xdb,
+ 0xe0, 0x0e, 0xb4, 0xa9, 0xe3, 0x4c, 0x83, 0xe2, 0x3b, 0x1d, 0x3a, 0x0e,
+ 0x47, 0xaa, 0x13, 0xc0, 0x59, 0xb1, 0x39, 0x7f, 0xe9, 0xe0, 0x36, 0x65,
+ 0x11, 0x63, 0xba, 0x75, 0xf4, 0x28, 0x6a, 0x06, 0x87, 0xd6, 0xfa, 0xfe,
+ 0x7c, 0xd6, 0x1c, 0x78, 0x19, 0x5c, 0x19, 0x94, 0x2f, 0x46, 0xe8, 0xad,
+ 0xaf, 0x78, 0x1f, 0x3c, 0x49, 0xe9, 0xa2, 0x84, 0xc2, 0x1b, 0xe0, 0x94,
+ 0x32, 0xe7, 0xc2, 0x3b, 0x01, 0xe7, 0xbe, 0x59, 0x21, 0x27, 0xe4, 0x3e,
+ 0x81, 0x7b, 0x51, 0xc3, 0x38, 0xde, 0x7f, 0x73, 0x0d, 0xa1, 0xf9, 0x72,
+ 0x10, 0xaa, 0x83, 0x57, 0x41, 0xfb, 0x18, 0xcc, 0x35, 0x99, 0x04, 0x61,
+ 0xf4, 0x7b, 0x99, 0xd0, 0x5c, 0x59, 0x39, 0xe0, 0xd4, 0x30, 0x05, 0x04,
+ 0x66, 0x09, 0x0f, 0xe5, 0xaa, 0x70, 0x04, 0x68, 0x5d, 0x5b, 0x6f, 0xbe,
+ 0x0a, 0x0e, 0xce, 0x31, 0x70, 0xdc, 0x62, 0x30, 0x57, 0x63, 0xaf, 0xd3,
+ 0xdd, 0xae, 0x7b, 0x68, 0x6e, 0x58, 0x87, 0xa4, 0x92, 0x71, 0xf2, 0xfe,
+ 0xd9, 0xd6, 0x3c, 0x38, 0x80, 0xdc, 0xd9, 0x08, 0x4d, 0x9b, 0x86, 0xff,
+ 0x8b, 0x22, 0x40, 0x93, 0xaa, 0xce, 0x8a, 0x1b, 0x81, 0x0e, 0xec, 0x93,
+ 0xce, 0xe8, 0x4d, 0x68, 0xbd, 0x4a, 0x7c, 0x6f, 0x38, 0xe1, 0xfb, 0xbc,
+ 0x64, 0xcd, 0x3b, 0xc2, 0x4f, 0xa1, 0x14, 0x1d, 0xdc, 0xa6, 0x2c, 0x62,
+ 0x49, 0x77, 0x6a, 0xf5, 0xc8, 0x4b, 0x48, 0x69, 0xb6, 0x22, 0x19, 0xd2,
+ 0x05, 0x5f, 0x19, 0xc0, 0xe0, 0xe6, 0xf4, 0xb5, 0xfa, 0x5e, 0x7d, 0x36,
+ 0x90, 0xc7, 0x6c, 0x6e, 0x5c, 0xc5, 0xea, 0x9f, 0xd6, 0xc3, 0xe8, 0xdf,
+ 0x0f, 0x23, 0x33, 0xfb, 0xf6, 0xce, 0x0c, 0xac, 0x53, 0x09, 0xb1, 0xf0,
+ 0xc2, 0x01, 0xbc, 0x7f, 0xd5, 0x50, 0xbe, 0x51, 0x0d, 0xbc, 0x2a, 0xda,
+ 0xf7, 0xc0, 0x43, 0x99, 0x7d, 0x1f, 0xf7, 0x32, 0xfa, 0xee, 0x30, 0xe8,
+ 0x2f, 0xf2, 0xa1, 0x3b, 0xb3, 0xfa, 0x58, 0xe3, 0x08, 0x0b, 0xec, 0x78,
+ 0x10, 0xea, 0x34, 0xa8, 0xcc, 0x15, 0xa3, 0x64, 0x11, 0x42, 0x77, 0x4c,
+ 0xb1, 0xc6, 0xd6, 0x0c, 0x0b, 0x9d, 0x8f, 0x53, 0x08, 0x0e, 0xa9, 0xec,
+ 0x83, 0xc1, 0xfd, 0x08, 0xa1, 0xe0, 0xfd, 0x32, 0x65, 0x20, 0xb4, 0x46,
+ 0x19, 0xab, 0x1f, 0x8e, 0xc5, 0xcc, 0xfb, 0x34, 0xf6, 0xba, 0xcd, 0xbe,
+ 0xee, 0xb6, 0xc9, 0x84, 0xc2, 0x59, 0x65, 0x66, 0x74, 0xd6, 0x7c, 0x4c,
+ 0x89, 0xdf, 0x6d, 0x91, 0x20, 0x19, 0x21, 0x98, 0x39, 0xaf, 0x4a, 0xc9,
+ 0xc0, 0x1d, 0xec, 0x3c, 0x06, 0xcf, 0x30, 0x68, 0x2a, 0x01, 0xf1, 0x40,
+ 0xc7, 0x4c, 0x09, 0x1a, 0x32, 0xe8, 0x9b, 0x31, 0xbd, 0x35, 0x0f, 0x21,
+ 0xa0, 0x93, 0x51, 0x44, 0x92, 0x45, 0x6a, 0xe8, 0x06, 0xae, 0x46, 0x82,
+ 0x6e, 0x9c, 0x64, 0x76, 0xba, 0x53, 0xab, 0x47, 0x3a, 0x45, 0x13, 0x7b,
+ 0x2b, 0x83, 0xb8, 0xd6, 0x9c, 0x83, 0x78, 0x17, 0x1b, 0x83, 0x47, 0x36,
+ 0xfb, 0xcc, 0x9c, 0x05, 0x50, 0xaa, 0x68, 0x30, 0xc3, 0x58, 0xdf, 0x79,
+ 0x84, 0x91, 0xf2, 0x3a, 0x15, 0x8b, 0x1b, 0xfd, 0x63, 0x81, 0x17, 0x31,
+ 0xb1, 0x74, 0x7a, 0xdc, 0xd0, 0xc0, 0xab, 0xa2, 0xfd, 0x1a, 0xf2, 0x1f,
+ 0xdb, 0x3a, 0x33, 0xa4, 0xbd, 0xcc, 0x96, 0x43, 0x5c, 0xc4, 0xe2, 0x76,
+ 0x3c, 0x70, 0x2e, 0x42, 0xc1, 0xa1, 0x1c, 0x3b, 0xeb, 0x56, 0x0c, 0x39,
+ 0xdd, 0x83, 0xe6, 0xc3, 0xa3, 0xaa, 0x72, 0x4a, 0x91, 0x7f, 0x6d, 0x72,
+ 0xca, 0x13, 0x35, 0xf7, 0x7a, 0xde, 0x8e, 0x23, 0x3d, 0xa7, 0x73, 0x3b,
+ 0xc2, 0x72, 0x27, 0xef, 0xea, 0xd6, 0xe0, 0x36, 0x7f, 0x14, 0xec, 0x50,
+ 0xe7, 0xf6, 0xe3, 0xf9, 0x4d, 0x1a, 0xfe, 0xcd, 0x31, 0xf1, 0xf0, 0x21,
+ 0x97, 0x4a, 0x67, 0x5c, 0xd0, 0xd1, 0x83, 0xc1, 0x59, 0xf0, 0x09, 0x4e,
+ 0x09, 0x06, 0xf4, 0x42, 0x0d, 0x77, 0x61, 0x5f, 0x24, 0x59, 0xa4, 0x86,
+ 0x6e, 0x81, 0x7b, 0xa7, 0xb8, 0x2f, 0x0b, 0xa1, 0x27, 0xb5, 0x7a, 0x94,
+ 0x1a, 0x83, 0xeb, 0x59, 0x5a, 0x52, 0x00, 0x84, 0x87, 0x50, 0x16, 0x24,
+ 0xa8, 0x91, 0x8e, 0xe7, 0x73, 0x4b, 0x02, 0x5e, 0xc7, 0x28, 0x1e, 0x98,
+ 0xfd, 0xc8, 0x6f, 0x58, 0xdf, 0x09, 0xc4, 0xe0, 0xf8, 0x1d, 0x09, 0x71,
+ 0x96, 0x4c, 0xda, 0x78, 0x95, 0x06, 0x97, 0xb4, 0xd2, 0xea, 0xcb, 0x91,
+ 0x25, 0x70, 0x92, 0x9a, 0xad, 0x32, 0xfa, 0xcc, 0x71, 0x18, 0xbb, 0x03,
+ 0x9e, 0x8c, 0x62, 0x7e, 0xbd, 0xbc, 0x39, 0x42, 0xbd, 0x9f, 0x62, 0x7e,
+ 0x3a, 0x87, 0xfe, 0xf4, 0xa2, 0xf8, 0xa4, 0x34, 0x38, 0x5d, 0x1e, 0x2a,
+ 0x70, 0x64, 0x08, 0x83, 0xdf, 0xad, 0xc1, 0x6d, 0x81, 0x81, 0x43, 0x69,
+ 0xec, 0x6b, 0xa3, 0xd0, 0x83, 0x5c, 0x27, 0x67, 0x56, 0xe3, 0xdb, 0x73,
+ 0x0c, 0x2a, 0x7a, 0xa1, 0xa3, 0x7b, 0x73, 0x42, 0xcf, 0x2c, 0xd6, 0xcf,
+ 0xb3, 0x22, 0xc9, 0x22, 0x0a, 0x74, 0x67, 0x74, 0xa2, 0x3b, 0x4a, 0x7a,
+ 0xa4, 0x6d, 0x70, 0xd9, 0x11, 0xe6, 0xf4, 0x78, 0xde, 0x9a, 0x03, 0x2f,
+ 0x02, 0x65, 0x81, 0x91, 0x44, 0x52, 0x16, 0x33, 0xfc, 0x44, 0x79, 0xbc,
+ 0xa7, 0x84, 0xe3, 0xf8, 0x22, 0xee, 0x85, 0x10, 0x16, 0xe0, 0xf7, 0xf9,
+ 0x09, 0xc6, 0xbc, 0x44, 0x4d, 0xbc, 0x4a, 0x83, 0x4b, 0x0c, 0x65, 0x54,
+ 0x65, 0x69, 0x3f, 0x71, 0x88, 0xef, 0x35, 0x18, 0x55, 0x0c, 0x21, 0xa1,
+ 0xed, 0x74, 0xd7, 0x51, 0x96, 0x70, 0x7c, 0xd6, 0xe5, 0xa1, 0x2e, 0x7e,
+ 0xb7, 0x06, 0x57, 0x1a, 0x25, 0x6e, 0x9c, 0x40, 0x38, 0x79, 0xd6, 0xbe,
+ 0xcf, 0xc3, 0x3c, 0xf9, 0x5b, 0x14, 0xb5, 0x9e, 0x78, 0xc4, 0xf8, 0xfe,
+ 0x67, 0x5d, 0x3a, 0xba, 0x35, 0x0b, 0xe6, 0xf7, 0x82, 0x04, 0x5e, 0x38,
+ 0xf2, 0xc0, 0x43, 0x95, 0x2c, 0x6e, 0xc5, 0x8a, 0xee, 0x28, 0xeb, 0x91,
+ 0x2b, 0x83, 0xcb, 0xcf, 0xe0, 0xbb, 0x6c, 0x99, 0x79, 0x42, 0x6f, 0xce,
+ 0x69, 0x5e, 0x9d, 0x1b, 0x87, 0x1c, 0x4f, 0x3f, 0xf6, 0x50, 0xc4, 0x37,
+ 0x99, 0xbd, 0x90, 0x58, 0xca, 0x0c, 0x69, 0x51, 0x93, 0x7b, 0x29, 0xfc,
+ 0x5c, 0xbf, 0x92, 0x31, 0x6f, 0x81, 0x26, 0x5e, 0x15, 0xed, 0x49, 0xb2,
+ 0xc7, 0xc3, 0xb1, 0xcf, 0xfa, 0x66, 0x49, 0x7b, 0x9a, 0x57, 0x59, 0x2f,
+ 0x14, 0x48, 0x78, 0xb8, 0x90, 0x35, 0xb6, 0x7d, 0x4a, 0x54, 0x0d, 0x4e,
+ 0x97, 0x87, 0xd1, 0x30, 0xb8, 0x4c, 0x0e, 0x46, 0x87, 0x13, 0xfa, 0x45,
+ 0x06, 0x5f, 0xa3, 0x80, 0x51, 0x38, 0x2f, 0x3f, 0x21, 0xe4, 0x0a, 0xdd,
+ 0xd6, 0xf1, 0x81, 0xe7, 0x7d, 0x5a, 0x74, 0x20, 0x67, 0x37, 0x7f, 0x47,
+ 0xb8, 0x27, 0xee, 0xb0, 0xbc, 0xf0, 0x50, 0x25, 0x8b, 0x2b, 0xb1, 0xa2,
+ 0x3b, 0x4a, 0x7a, 0x94, 0xc9, 0x8d, 0xc1, 0x75, 0x12, 0xc8, 0x13, 0x51,
+ 0x35, 0x5c, 0x37, 0xc2, 0x1a, 0xdf, 0x39, 0x35, 0x10, 0x1f, 0xef, 0x1c,
+ 0xf6, 0x5a, 0x48, 0x88, 0x88, 0xa4, 0x72, 0x24, 0x3c, 0x91, 0x28, 0x79,
+ 0x77, 0x94, 0x00, 0x97, 0x83, 0x29, 0x28, 0xe7, 0xca, 0x25, 0x55, 0xfc,
+ 0x8b, 0x50, 0x43, 0xe4, 0x3b, 0x0d, 0x34, 0xf1, 0xaa, 0x68, 0xdf, 0x3d,
+ 0x22, 0xde, 0xea, 0x9b, 0xd9, 0x3b, 0xf0, 0x3d, 0xee, 0x79, 0x06, 0xe3,
+ 0x67, 0x9c, 0xd0, 0x2e, 0x92, 0x5d, 0x38, 0x9b, 0x0e, 0xe0, 0x01, 0xca,
+ 0xd6, 0xe6, 0xd8, 0x88, 0xf8, 0xa8, 0x1a, 0x9c, 0x2e, 0x0f, 0xb5, 0x0d,
+ 0x4e, 0x0e, 0x59, 0x51, 0xa8, 0x10, 0xc5, 0x84, 0x74, 0x36, 0x1d, 0x98,
+ 0x2f, 0x41, 0x17, 0x11, 0x7e, 0x21, 0xf7, 0xb9, 0x88, 0x42, 0x85, 0xfc,
+ 0xbc, 0xcf, 0x8b, 0xe2, 0xca, 0x34, 0x88, 0x3b, 0xc8, 0xc1, 0x0e, 0x38,
+ 0x2a, 0x78, 0x90, 0xc5, 0x8e, 0x58, 0xd1, 0xed, 0x45, 0x8f, 0xdc, 0xf0,
+ 0x3b, 0x68, 0x21, 0x54, 0x6d, 0x70, 0x82, 0x75, 0x6c, 0xc0, 0x17, 0x91,
+ 0x43, 0x1e, 0x1c, 0xe1, 0xd8, 0x08, 0xfb, 0xe6, 0x77, 0x06, 0xef, 0xc1,
+ 0x18, 0x91, 0xb8, 0x9a, 0x65, 0x53, 0x10, 0x08, 0x0f, 0x84, 0x24, 0x1a,
+ 0xa5, 0x53, 0x94, 0xbc, 0xc5, 0x53, 0x30, 0x73, 0x63, 0xeb, 0x5e, 0xaf,
+ 0x1b, 0x1a, 0x32, 0x8d, 0xef, 0x6a, 0x8c, 0x9f, 0x15, 0xf9, 0x8e, 0x16,
+ 0x5e, 0x05, 0x03, 0x47, 0x16, 0xc8, 0x45, 0xe8, 0x45, 0xa9, 0x9c, 0x0b,
+ 0x21, 0x21, 0x96, 0xc7, 0x0b, 0x99, 0x41, 0x6d, 0xdc, 0x97, 0x73, 0x41,
+ 0x47, 0xfb, 0x7a, 0x16, 0x0f, 0x70, 0xa9, 0x6d, 0x16, 0x36, 0xa2, 0x64,
+ 0x70, 0xba, 0x3c, 0xd4, 0x0e, 0x59, 0x0f, 0xcc, 0x0e, 0x3e, 0x5d, 0x44,
+ 0x81, 0xc7, 0x1e, 0xea, 0xd0, 0x79, 0xfd, 0xf9, 0x25, 0x34, 0xc2, 0x2f,
+ 0xf0, 0x0f, 0xeb, 0xe3, 0xdf, 0x01, 0x2d, 0xad, 0xef, 0x51, 0xa0, 0xf0,
+ 0xa2, 0xb8, 0x72, 0xe9, 0x1e, 0x69, 0x05, 0x72, 0x75, 0xc8, 0x41, 0x9e,
+ 0x87, 0x7d, 0x86, 0xbb, 0xca, 0x70, 0x92, 0x45, 0x2c, 0xe9, 0xf6, 0xa0,
+ 0x47, 0xae, 0xf8, 0xed, 0xea, 0x6e, 0x62, 0xcf, 0x4c, 0x7e, 0xaf, 0x21,
+ 0x8e, 0xf0, 0x52, 0xc2, 0xeb, 0x9c, 0x89, 0x7b, 0xd4, 0x52, 0x18, 0x17,
+ 0x09, 0x71, 0x7b, 0xc4, 0xc2, 0x78, 0x69, 0x20, 0x8f, 0x8b, 0x72, 0xee,
+ 0x04, 0x29, 0x8c, 0x75, 0x8d, 0x57, 0xb1, 0xce, 0xbd, 0x0c, 0x2e, 0x55,
+ 0x2f, 0xed, 0xfd, 0xe2, 0xfb, 0xca, 0x72, 0xeb, 0x6e, 0xcc, 0x04, 0xd0,
+ 0xdc, 0xac, 0x9a, 0x31, 0xff, 0x6a, 0x14, 0x0d, 0x4e, 0x97, 0x87, 0xba,
+ 0xf8, 0x0f, 0xbe, 0xff, 0xba, 0xab, 0x8b, 0xef, 0x88, 0xf2, 0x07, 0x7d,
+ 0xe5, 0x78, 0xc8, 0xbb, 0x45, 0x97, 0x0e, 0xf9, 0xce, 0x4d, 0xce, 0x79,
+ 0xec, 0xf2, 0x69, 0x18, 0x17, 0xba, 0xc7, 0x08, 0xb2, 0x88, 0x29, 0xdd,
+ 0x1e, 0xf4, 0xc8, 0x15, 0xbf, 0x95, 0x88, 0xc0, 0x10, 0x5c, 0x48, 0xe2,
+ 0xc9, 0xcc, 0x2b, 0xb5, 0x03, 0x96, 0xba, 0x57, 0xfc, 0xf9, 0x81, 0xd9,
+ 0xaa, 0x40, 0x61, 0xe0, 0x7d, 0x86, 0xb6, 0xe3, 0x31, 0x35, 0x3c, 0x0f,
+ 0xf2, 0x32, 0x78, 0x06, 0x94, 0x55, 0x57, 0xbc, 0x1b, 0xb4, 0x60, 0x4e,
+ 0xbc, 0xa1, 0x5b, 0x3a, 0xc8, 0x5a, 0x07, 0x1e, 0x41, 0x8c, 0x57, 0xf5,
+ 0x82, 0xd7, 0x61, 0x63, 0x4f, 0x9a, 0x4f, 0x72, 0x70, 0x97, 0x02, 0x67,
+ 0x01, 0x21, 0x61, 0x4f, 0x7f, 0x4c, 0xe7, 0xa7, 0x48, 0xb8, 0xa7, 0x5d,
+ 0x72, 0x15, 0xec, 0xd8, 0x42, 0x5e, 0x24, 0x42, 0x95, 0x56, 0xbc, 0xff,
+ 0x6b, 0x1e, 0x45, 0x83, 0xd3, 0xe5, 0xa1, 0x2e, 0xfe, 0x0f, 0x10, 0xc2,
+ 0x4d, 0xea, 0xc6, 0x9f, 0x2d, 0x29, 0xee, 0xbc, 0x02, 0xdf, 0x42, 0x26,
+ 0xb8, 0x7e, 0x80, 0x82, 0x22, 0x04, 0xc3, 0xbc, 0x4b, 0x9f, 0x13, 0xfa,
+ 0x13, 0xcb, 0x7f, 0x06, 0xb7, 0x25, 0x34, 0x4f, 0xf6, 0xc0, 0xeb, 0xa2,
+ 0xc7, 0x75, 0xe9, 0x40, 0x0a, 0x92, 0xd0, 0x92, 0xd7, 0x01, 0x70, 0x6f,
+ 0x86, 0x07, 0xf1, 0x28, 0xb3, 0x43, 0x51, 0x91, 0xa2, 0x60, 0xaf, 0x58,
+ 0x0f, 0x15, 0x6b, 0x4d, 0x59, 0xc4, 0x94, 0x6e, 0x0f, 0x7a, 0xe4, 0x8a,
+ 0xdf, 0xe1, 0x12, 0xf5, 0x24, 0xf1, 0xe4, 0x06, 0x8f, 0x43, 0xdb, 0x28,
+ 0x62, 0x7f, 0xf3, 0x44, 0x1a, 0x26, 0x62, 0xe9, 0xab, 0xe2, 0x65, 0x81,
+ 0x09, 0x97, 0xc4, 0x03, 0xdc, 0x95, 0xd2, 0xfc, 0x65, 0x8a, 0x75, 0x0e,
+ 0x7a, 0xc4, 0x1b, 0xee, 0x2f, 0x78, 0x0b, 0x8b, 0xf7, 0x70, 0x7b, 0x6d,
+ 0x0f, 0x66, 0xb1, 0xa7, 0x5d, 0x22, 0x4f, 0x2a, 0x14, 0x2e, 0xff, 0x11,
+ 0x80, 0xf5, 0x8e, 0x8b, 0xcb, 0xd4, 0x32, 0x61, 0x78, 0x46, 0x22, 0xd0,
+ 0x13, 0x6e, 0xcc, 0x2d, 0x0f, 0x75, 0xf1, 0xe3, 0x81, 0xf4, 0x64, 0xf1,
+ 0x20, 0x57, 0xee, 0x4f, 0xb1, 0xf1, 0x7a, 0x99, 0xb8, 0xeb, 0x3a, 0x23,
+ 0x42, 0x2f, 0xf9, 0x01, 0xf0, 0x65, 0x06, 0x5b, 0x19, 0x0c, 0x61, 0x90,
+ 0xd7, 0xe3, 0x3e, 0x07, 0x88, 0x0b, 0x7d, 0xf9, 0x61, 0xf6, 0x06, 0x91,
+ 0x9a, 0xdc, 0xb2, 0xad, 0xa7, 0x23, 0x8b, 0x58, 0xd3, 0xad, 0xab, 0x47,
+ 0x6e, 0xf9, 0xed, 0xff, 0x19, 0x8b, 0xff, 0x67, 0x2c, 0xbe, 0x2c, 0xfc,
+ 0xe6, 0x0b, 0xd9, 0x97, 0x85, 0x2f, 0x0b, 0x5f, 0xc8, 0x7e, 0xf3, 0x65,
+ 0xe1, 0xb7, 0x54, 0x0a, 0x99, 0xf8, 0xff, 0xfb, 0x97, 0x2f, 0x8b, 0x18,
+ 0xb7, 0x7f, 0x01, 0x6c, 0xbb, 0xd7, 0x06, 0xa1, 0x47, 0x14, 0xbf, 0x00,
+ 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
+};
+unsigned char devdigit_0_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
+ 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x14,
+ 0x08, 0x06, 0x00, 0x00, 0x00, 0xb9, 0xf0, 0xdc, 0x11, 0x00, 0x00, 0x01,
+ 0x6a, 0x49, 0x44, 0x41, 0x54, 0x28, 0xcf, 0xbd, 0x93, 0x4b, 0x2f, 0x03,
+ 0x51, 0x14, 0xc7, 0x2f, 0x15, 0xf1, 0xe8, 0x86, 0x44, 0x04, 0x51, 0xa5,
+ 0x0f, 0x89, 0x0a, 0x61, 0x27, 0x21, 0x51, 0xaf, 0x25, 0x1f, 0x81, 0xd8,
+ 0xe1, 0x2b, 0xb0, 0x10, 0x23, 0x6c, 0x24, 0xda, 0xfa, 0x14, 0xed, 0x4c,
+ 0x82, 0xe8, 0xc6, 0x92, 0x44, 0xc7, 0x47, 0xd1, 0x69, 0x47, 0xc2, 0xc2,
+ 0x8c, 0xcd, 0x75, 0xfe, 0x77, 0x66, 0x9c, 0x76, 0x4a, 0x62, 0xe5, 0x24,
+ 0xbf, 0xa4, 0xf9, 0x3f, 0x26, 0x77, 0xe6, 0x9e, 0x0a, 0xf1, 0x9f, 0x93,
+ 0x24, 0x0c, 0xe2, 0x35, 0x84, 0xe1, 0x7b, 0x4d, 0x93, 0x22, 0xec, 0xc4,
+ 0x90, 0x90, 0xfa, 0x91, 0x90, 0xb6, 0xe1, 0x81, 0xdf, 0xd0, 0xe0, 0xf9,
+ 0x99, 0xef, 0xa9, 0x24, 0x87, 0x85, 0xac, 0x53, 0x48, 0xde, 0x37, 0x03,
+ 0x0d, 0x1e, 0x32, 0x41, 0x38, 0x4b, 0xc8, 0xa7, 0x4b, 0x2f, 0x50, 0xd3,
+ 0x85, 0x9c, 0x8e, 0x0b, 0x99, 0x19, 0x13, 0xb2, 0x5a, 0xf4, 0x34, 0x78,
+ 0xc8, 0xf8, 0x59, 0x71, 0xb5, 0x3c, 0xc3, 0x4f, 0xd4, 0x76, 0x94, 0x51,
+ 0x27, 0xac, 0x93, 0x6d, 0xd6, 0x91, 0x41, 0x16, 0x85, 0xe7, 0xc2, 0x01,
+ 0x1b, 0xab, 0x73, 0xca, 0x38, 0x25, 0xb4, 0xcd, 0x05, 0xd6, 0x91, 0x41,
+ 0x16, 0x85, 0x9a, 0x99, 0x67, 0x63, 0x74, 0x40, 0x19, 0x6b, 0xc4, 0x16,
+ 0xce, 0x1e, 0xe8, 0xc8, 0x20, 0x8b, 0xc2, 0xa7, 0x55, 0x62, 0xa3, 0xbb,
+ 0x53, 0x19, 0x31, 0x7c, 0x95, 0xbe, 0x28, 0xeb, 0xc8, 0x90, 0xe6, 0xaa,
+ 0x82, 0x5b, 0x66, 0xa3, 0xcd, 0x7b, 0xb9, 0x1e, 0xa2, 0xbf, 0x23, 0xc2,
+ 0xba, 0x53, 0x6e, 0x28, 0x38, 0x3f, 0x17, 0xa2, 0x91, 0x76, 0xd6, 0x3f,
+ 0xee, 0xb8, 0xe0, 0x06, 0x9f, 0x2f, 0x74, 0xa4, 0xf1, 0xde, 0x2e, 0xd6,
+ 0x5f, 0x8a, 0x4a, 0x77, 0x50, 0xb0, 0x2a, 0xb9, 0x96, 0x97, 0x5e, 0x21,
+ 0x36, 0xe2, 0x83, 0xac, 0x23, 0x43, 0x5a, 0x15, 0x05, 0x33, 0xb7, 0xc7,
+ 0x46, 0x76, 0x56, 0x19, 0x1a, 0x71, 0xbe, 0x3e, 0xcf, 0x7a, 0x7e, 0x5f,
+ 0xe9, 0x26, 0x0a, 0xf9, 0xc5, 0x0c, 0x1b, 0xb8, 0x2c, 0xff, 0xe2, 0xec,
+ 0xb3, 0xdd, 0x96, 0x8b, 0x2b, 0xa0, 0xb0, 0x84, 0x6b, 0x7f, 0xb8, 0xe0,
+ 0xd5, 0x98, 0x8a, 0x79, 0xeb, 0x11, 0xec, 0x56, 0x78, 0x35, 0x30, 0x8f,
+ 0xe9, 0x91, 0xbf, 0x2f, 0x1f, 0x66, 0x12, 0x47, 0x48, 0x51, 0xe9, 0xe6,
+ 0x58, 0xc8, 0xb7, 0x6b, 0x6f, 0xbd, 0x4b, 0x87, 0x42, 0x4e, 0xfc, 0xb2,
+ 0xde, 0x98, 0x34, 0x71, 0x4b, 0xbc, 0x37, 0x80, 0x3f, 0x90, 0x4e, 0x24,
+ 0x82, 0xd0, 0x17, 0x7d, 0xca, 0x43, 0xd6, 0xce, 0xe7, 0x04, 0x20, 0x00,
+ 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
+};
+unsigned char devdigit_1_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
+ 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x14,
+ 0x08, 0x06, 0x00, 0x00, 0x00, 0xb9, 0xf0, 0xdc, 0x11, 0x00, 0x00, 0x00,
+ 0x7c, 0x49, 0x44, 0x41, 0x54, 0x28, 0xcf, 0x63, 0x60, 0xa0, 0x02, 0xe0,
+ 0x03, 0x62, 0x3f, 0x24, 0x8c, 0x01, 0x58, 0x81, 0xd8, 0x0e, 0x88, 0x9b,
+ 0x80, 0xf8, 0x18, 0x10, 0xff, 0xe6, 0xe5, 0x64, 0xf8, 0xef, 0x6b, 0xc1,
+ 0xf0, 0x1f, 0xc8, 0xfe, 0x8f, 0x4d, 0xc3, 0x17, 0x16, 0x66, 0x86, 0xff,
+ 0xb6, 0x3a, 0x0c, 0xff, 0x1b, 0xe3, 0x18, 0xfe, 0x1f, 0xed, 0x67, 0xf8,
+ 0xff, 0x6b, 0x1b, 0xc3, 0xff, 0xff, 0xbb, 0xf0, 0x68, 0xf8, 0xbc, 0x11,
+ 0xa2, 0x00, 0x1d, 0xe3, 0xd4, 0xf0, 0x7a, 0x35, 0xc3, 0xff, 0x95, 0xd5,
+ 0x0c, 0xff, 0x53, 0x3d, 0x89, 0xd3, 0xf0, 0x06, 0x09, 0x13, 0xa5, 0x81,
+ 0x11, 0x09, 0x13, 0xa5, 0x01, 0x19, 0x8c, 0x6a, 0x18, 0x38, 0x0d, 0xff,
+ 0x91, 0x31, 0x16, 0x0d, 0xe8, 0x18, 0x7b, 0xc2, 0xc3, 0x97, 0x18, 0x49,
+ 0xd7, 0x40, 0x0a, 0x06, 0x00, 0x09, 0xe6, 0xf7, 0x70, 0x7c, 0x8a, 0x96,
+ 0x20, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60,
+ 0x82
+};
+unsigned char devdigit_2_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
+ 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x14,
+ 0x08, 0x06, 0x00, 0x00, 0x00, 0xb9, 0xf0, 0xdc, 0x11, 0x00, 0x00, 0x01,
+ 0x3d, 0x49, 0x44, 0x41, 0x54, 0x28, 0xcf, 0xbd, 0x92, 0x41, 0x28, 0x83,
+ 0x61, 0x1c, 0x87, 0x9f, 0x19, 0xdb, 0x6c, 0x0d, 0x6d, 0x71, 0x5b, 0x94,
+ 0x94, 0xe3, 0xc4, 0xcd, 0x8d, 0x8b, 0xab, 0xe5, 0xea, 0x82, 0x93, 0xdb,
+ 0x58, 0x72, 0xe3, 0x36, 0x2e, 0x5a, 0x24, 0x07, 0x94, 0x11, 0x45, 0x6d,
+ 0x72, 0x21, 0x8b, 0x93, 0x35, 0x17, 0xca, 0x4e, 0x5c, 0x38, 0x9b, 0xc3,
+ 0xa6, 0x38, 0x99, 0xfa, 0x39, 0x7c, 0xdb, 0xbe, 0x8f, 0x6c, 0x72, 0xd9,
+ 0xbf, 0x9e, 0x7a, 0x0f, 0xbf, 0xa7, 0xfe, 0xef, 0xef, 0x7d, 0xa1, 0x1e,
+ 0xb3, 0x06, 0xa4, 0x80, 0x27, 0xa0, 0x00, 0x14, 0x2d, 0xbc, 0x02, 0xd7,
+ 0xc0, 0x0c, 0xe0, 0x2a, 0x0b, 0x5a, 0x9d, 0x46, 0xe7, 0x51, 0xf4, 0x18,
+ 0x47, 0xf9, 0x04, 0xfa, 0x38, 0x45, 0x85, 0x24, 0xca, 0xc4, 0x50, 0x38,
+ 0x84, 0x9c, 0x4d, 0x08, 0xc8, 0x02, 0x7e, 0x00, 0x29, 0x55, 0x9b, 0xbb,
+ 0x0d, 0xe4, 0xf3, 0x22, 0x60, 0x0b, 0x40, 0xbb, 0x73, 0x68, 0x72, 0x04,
+ 0x05, 0xbb, 0x51, 0x8b, 0x1b, 0x39, 0x1a, 0x8d, 0xf3, 0xd5, 0x8a, 0x29,
+ 0x6d, 0x86, 0x11, 0xf0, 0x02, 0xb0, 0x67, 0x61, 0x0a, 0xe8, 0x2b, 0x91,
+ 0xee, 0x0d, 0x98, 0x42, 0xee, 0x08, 0x01, 0xef, 0xb5, 0xca, 0x18, 0x70,
+ 0x39, 0x4c, 0xe1, 0xed, 0xa4, 0xb6, 0x60, 0x07, 0x2e, 0xfb, 0x7b, 0x4c,
+ 0x21, 0x13, 0xab, 0x2e, 0xd8, 0x81, 0x83, 0x06, 0x1b, 0xba, 0x58, 0x36,
+ 0x85, 0xd1, 0x41, 0x54, 0xaa, 0xf8, 0xdb, 0x34, 0x03, 0xc7, 0x0d, 0x36,
+ 0xb4, 0x3f, 0x6f, 0x86, 0xa3, 0x13, 0x08, 0x10, 0x10, 0xb2, 0x86, 0xdb,
+ 0x80, 0xb4, 0xcb, 0x81, 0x92, 0x0b, 0x46, 0xb0, 0x78, 0x86, 0x66, 0xc7,
+ 0x2a, 0xe1, 0x25, 0x6b, 0xd8, 0x0f, 0x64, 0x5b, 0x3d, 0x66, 0x95, 0xcf,
+ 0x87, 0x68, 0x28, 0x88, 0x80, 0x4f, 0x20, 0x62, 0x0d, 0x7b, 0x80, 0x5b,
+ 0x9f, 0xd7, 0x78, 0x20, 0xa5, 0xd0, 0xfd, 0x36, 0xea, 0xec, 0x40, 0x40,
+ 0x0e, 0x18, 0xfe, 0xb9, 0x77, 0xdc, 0xed, 0x44, 0x37, 0xeb, 0x46, 0x38,
+ 0x9f, 0x40, 0x81, 0x76, 0x04, 0x3c, 0x00, 0x5d, 0xbf, 0xb5, 0xa2, 0x9d,
+ 0x88, 0x79, 0xc1, 0xc5, 0xf1, 0xca, 0xce, 0xd5, 0xf8, 0xfb, 0x2f, 0x95,
+ 0xa9, 0xa3, 0xf0, 0x1f, 0xbe, 0x00, 0xf0, 0x04, 0x2d, 0x7b, 0x94, 0x44,
+ 0xbf, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42,
+ 0x60, 0x82
+};
+unsigned char devdigit_3_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
+ 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x14,
+ 0x08, 0x06, 0x00, 0x00, 0x00, 0xb9, 0xf0, 0xdc, 0x11, 0x00, 0x00, 0x01,
+ 0x86, 0x49, 0x44, 0x41, 0x54, 0x28, 0xcf, 0xbd, 0xd3, 0x3f, 0x6c, 0xcd,
+ 0x61, 0x18, 0xc5, 0xf1, 0x0f, 0x8d, 0xb8, 0xe1, 0x2e, 0x82, 0x89, 0x4a,
+ 0x34, 0x91, 0x30, 0xb4, 0x1d, 0x88, 0xb1, 0xc5, 0x42, 0x18, 0x58, 0x14,
+ 0xab, 0x36, 0x18, 0xea, 0x4f, 0x24, 0x88, 0xea, 0x24, 0xa6, 0x62, 0x11,
+ 0x24, 0xe8, 0x4d, 0x89, 0x26, 0x1d, 0x24, 0x08, 0x57, 0x35, 0x1d, 0x74,
+ 0x6e, 0x99, 0x48, 0xb4, 0x49, 0x5b, 0x1b, 0xab, 0x56, 0x42, 0xab, 0xd2,
+ 0x3e, 0x86, 0xdf, 0x75, 0x7f, 0xbf, 0x5b, 0x6d, 0x6d, 0xde, 0xe4, 0x6c,
+ 0xcf, 0xf7, 0x7d, 0x4f, 0xce, 0x73, 0x5e, 0xfe, 0xd7, 0x19, 0xc0, 0x38,
+ 0x26, 0xf1, 0x2b, 0xa3, 0x69, 0x8c, 0xa1, 0x80, 0x6d, 0x59, 0x20, 0xde,
+ 0x74, 0x88, 0xb1, 0x87, 0x62, 0xe2, 0x99, 0x98, 0xe9, 0x15, 0x53, 0x45,
+ 0x31, 0xda, 0x25, 0x3a, 0xcf, 0x8b, 0xad, 0xd5, 0x02, 0x3f, 0xd0, 0x58,
+ 0x06, 0xa2, 0x7f, 0x71, 0x7d, 0x7f, 0x21, 0x1a, 0x6a, 0x05, 0xde, 0x95,
+ 0x81, 0xe6, 0x7d, 0xa2, 0x76, 0xb3, 0x58, 0x93, 0x17, 0x2b, 0xaa, 0x92,
+ 0x5b, 0x7b, 0xaf, 0xa5, 0xd0, 0xdb, 0xdb, 0xa2, 0x64, 0x11, 0xb4, 0x64,
+ 0x54, 0x57, 0xf2, 0xfb, 0x7a, 0xe3, 0xba, 0x14, 0x98, 0x2a, 0x56, 0x02,
+ 0x0b, 0x9d, 0xb6, 0x7c, 0x2e, 0x05, 0x86, 0x0b, 0x7f, 0x03, 0xcd, 0x38,
+ 0x8b, 0xeb, 0x18, 0x42, 0x5c, 0x3e, 0x9a, 0x0c, 0xcf, 0xf6, 0x89, 0xa6,
+ 0x06, 0x81, 0x91, 0x8a, 0xa4, 0x8e, 0xef, 0x15, 0x67, 0x0e, 0x89, 0x8e,
+ 0x16, 0x31, 0x78, 0x2b, 0x19, 0x1e, 0x29, 0x88, 0xfd, 0x3b, 0x05, 0xe6,
+ 0x70, 0xa4, 0x02, 0x98, 0x9f, 0xce, 0x93, 0x76, 0xb1, 0x61, 0xad, 0xc0,
+ 0x0c, 0xda, 0xe7, 0x7b, 0x8e, 0x1b, 0x27, 0xc4, 0x9d, 0x56, 0xf1, 0xf2,
+ 0xaa, 0xf8, 0xfa, 0x34, 0x81, 0x7e, 0xbe, 0x12, 0x57, 0x8e, 0x09, 0x04,
+ 0x4e, 0x65, 0x81, 0x9b, 0xb8, 0x8b, 0x22, 0x26, 0x56, 0xe7, 0x92, 0x65,
+ 0xfe, 0x79, 0xed, 0xe4, 0x01, 0x81, 0xe1, 0xc5, 0x12, 0xca, 0x63, 0xa0,
+ 0xbe, 0x26, 0x05, 0x3e, 0x76, 0xfe, 0x3b, 0xd6, 0x1d, 0xab, 0x56, 0x2e,
+ 0xbc, 0x87, 0xd3, 0x19, 0xed, 0xc1, 0x26, 0xec, 0xc2, 0x87, 0xed, 0x5b,
+ 0x52, 0x60, 0xb4, 0x2b, 0x05, 0xa2, 0xf5, 0xa0, 0xd8, 0x5d, 0x2f, 0xaa,
+ 0xd7, 0x27, 0xb5, 0xc8, 0xe7, 0x44, 0x63, 0x9d, 0x78, 0x7f, 0x2f, 0x05,
+ 0x2e, 0x1c, 0x16, 0xa5, 0xe6, 0x2e, 0x5d, 0xbc, 0xe8, 0x17, 0xf7, 0xcf,
+ 0x89, 0xe5, 0xcb, 0x04, 0x2e, 0x42, 0x7c, 0xee, 0x11, 0x93, 0xcf, 0x93,
+ 0x08, 0x67, 0xfb, 0x12, 0xbf, 0xe3, 0x8f, 0xc4, 0xe3, 0x4b, 0xe5, 0x96,
+ 0x06, 0x1e, 0xa0, 0x0a, 0xbe, 0xe0, 0x5b, 0x69, 0x39, 0x73, 0x19, 0x4d,
+ 0xe3, 0x13, 0xba, 0xb3, 0xff, 0xe0, 0x37, 0x1c, 0x29, 0x1b, 0xc9, 0x07,
+ 0xdf, 0x9a, 0x4d, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae,
+ 0x42, 0x60, 0x82
+};
+unsigned char devdigit_4_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
+ 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x14,
+ 0x08, 0x06, 0x00, 0x00, 0x00, 0x56, 0x32, 0xb7, 0x2f, 0x00, 0x00, 0x00,
+ 0xc6, 0x49, 0x44, 0x41, 0x54, 0x38, 0xcb, 0x63, 0x60, 0x18, 0x0c, 0xa0,
+ 0x02, 0x88, 0xff, 0x63, 0xc1, 0x38, 0x81, 0x1e, 0x10, 0xff, 0x2c, 0x0f,
+ 0x67, 0xf8, 0xff, 0x7f, 0x17, 0x02, 0xe3, 0xd3, 0xc4, 0x06, 0xc4, 0x17,
+ 0x75, 0x15, 0x19, 0xfe, 0xff, 0xd8, 0x4a, 0xbc, 0xa6, 0x0e, 0x56, 0x66,
+ 0x86, 0xff, 0x17, 0xa6, 0xa3, 0x6a, 0xc0, 0xa7, 0xc9, 0x0a, 0x88, 0xff,
+ 0xb6, 0x27, 0x41, 0x14, 0x5d, 0x9e, 0x45, 0x58, 0x13, 0x37, 0x10, 0xdf,
+ 0xb1, 0xd4, 0x64, 0xf8, 0xff, 0x67, 0x07, 0xc3, 0xff, 0xdf, 0xdb, 0x19,
+ 0xfe, 0x9b, 0xaa, 0x11, 0xd6, 0x34, 0x83, 0x8b, 0x9d, 0xe1, 0xff, 0xed,
+ 0xf9, 0x10, 0x05, 0x5d, 0x29, 0x10, 0x45, 0xf8, 0x34, 0x79, 0x80, 0x04,
+ 0xa6, 0xe7, 0x41, 0x24, 0x6f, 0xce, 0x63, 0xf8, 0xcf, 0xc1, 0x86, 0x5f,
+ 0x93, 0x10, 0x10, 0x3f, 0x75, 0x37, 0x81, 0x48, 0xfc, 0x05, 0x3a, 0xcd,
+ 0x5a, 0x1b, 0x2c, 0x79, 0x0b, 0x9f, 0xa6, 0x15, 0x82, 0x3c, 0x0c, 0xff,
+ 0x9f, 0x2c, 0x83, 0x48, 0x4c, 0xca, 0x02, 0x4b, 0xfc, 0x03, 0x62, 0x1b,
+ 0x7c, 0x9a, 0xfe, 0x2f, 0xaf, 0x82, 0x08, 0xde, 0x5b, 0xc4, 0xf0, 0x1f,
+ 0xe4, 0x2f, 0xe4, 0x14, 0x80, 0x45, 0x13, 0x58, 0x23, 0x46, 0x7c, 0xe0,
+ 0xc3, 0x94, 0x69, 0xc2, 0x87, 0x71, 0x39, 0x0f, 0x1f, 0x20, 0x3a, 0xed,
+ 0x0d, 0x90, 0x26, 0x6c, 0x99, 0x10, 0x00, 0x10, 0x35, 0x2e, 0x1a, 0x0e,
+ 0xfb, 0x7b, 0x23, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae,
+ 0x42, 0x60, 0x82
+};
+unsigned char devdigit_5_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
+ 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x14,
+ 0x08, 0x06, 0x00, 0x00, 0x00, 0x5b, 0x2c, 0xc7, 0x68, 0x00, 0x00, 0x01,
+ 0x0a, 0x49, 0x44, 0x41, 0x54, 0x28, 0xcf, 0x63, 0x60, 0xa0, 0x25, 0xf8,
+ 0x4f, 0x02, 0x66, 0xf8, 0xff, 0x7f, 0x17, 0x61, 0x4c, 0x47, 0xc5, 0x15,
+ 0xe1, 0x24, 0xb8, 0x39, 0xcb, 0x17, 0x2c, 0x50, 0x89, 0x37, 0x34, 0x60,
+ 0x8a, 0x63, 0x5d, 0xc0, 0x8a, 0x8f, 0x00, 0xf1, 0x74, 0x20, 0x2e, 0x04,
+ 0x62, 0x3d, 0x9c, 0x8a, 0x0f, 0xf7, 0x31, 0xfc, 0x9f, 0x96, 0xcb, 0xf0,
+ 0xbf, 0x20, 0x90, 0xe1, 0xbf, 0xae, 0x22, 0xdc, 0xea, 0xc3, 0x40, 0xac,
+ 0x82, 0xa1, 0x18, 0x1d, 0x1f, 0xea, 0x65, 0xf8, 0xaf, 0x2c, 0x09, 0xd6,
+ 0xf0, 0x16, 0x88, 0x15, 0xc1, 0x8a, 0xd5, 0xa4, 0x19, 0xfe, 0x33, 0x33,
+ 0x31, 0xfc, 0x17, 0xe0, 0x66, 0xf8, 0x6f, 0xa7, 0xcb, 0xf0, 0x7f, 0x41,
+ 0x09, 0x42, 0xc3, 0x9b, 0x35, 0x0c, 0xff, 0x15, 0xc4, 0xc1, 0x1a, 0x96,
+ 0x81, 0x14, 0xab, 0x23, 0x61, 0x7b, 0x20, 0x5e, 0x08, 0x32, 0xa0, 0x35,
+ 0x11, 0xa1, 0x61, 0x69, 0x05, 0x58, 0xf1, 0x2b, 0x5c, 0x9e, 0x6e, 0x93,
+ 0x10, 0x44, 0x28, 0x7e, 0xb9, 0x0a, 0xac, 0xf8, 0x1b, 0x2e, 0xc5, 0x41,
+ 0x3c, 0x1c, 0x08, 0xc5, 0x5f, 0x37, 0x21, 0x14, 0x5b, 0x21, 0x61, 0x49,
+ 0x20, 0x0e, 0x03, 0x59, 0x19, 0x68, 0x8d, 0x50, 0x7c, 0x7a, 0x0a, 0x42,
+ 0xf1, 0x7f, 0x4b, 0x4d, 0x86, 0xff, 0x20, 0x6b, 0xd9, 0x58, 0x18, 0xfe,
+ 0xf3, 0x03, 0x3d, 0x19, 0x6a, 0x07, 0xb1, 0x1a, 0x2d, 0xfc, 0xcf, 0x10,
+ 0x4c, 0x1b, 0xed, 0x49, 0xf0, 0xf0, 0x8e, 0x03, 0x2b, 0xfe, 0xb4, 0x81,
+ 0xe1, 0xff, 0x8f, 0xad, 0x0c, 0xff, 0xff, 0xee, 0x60, 0xf8, 0xff, 0x6b,
+ 0x1b, 0xc3, 0xff, 0xc7, 0x4b, 0x19, 0xfe, 0xaf, 0xa8, 0x62, 0xf8, 0x6f,
+ 0xa3, 0x0d, 0x57, 0xd8, 0x01, 0xf3, 0xcc, 0x67, 0x20, 0xfe, 0x09, 0xc4,
+ 0xff, 0x90, 0xf0, 0x6f, 0x20, 0x7e, 0x02, 0xc4, 0x2b, 0x81, 0xd8, 0x16,
+ 0xa6, 0x10, 0x00, 0x2a, 0x24, 0x25, 0x9c, 0x2b, 0xd4, 0x93, 0xd9, 0x00,
+ 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
+};
+unsigned char devdigit_6_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
+ 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x14,
+ 0x08, 0x06, 0x00, 0x00, 0x00, 0x56, 0x32, 0xb7, 0x2f, 0x00, 0x00, 0x01,
+ 0xbc, 0x49, 0x44, 0x41, 0x54, 0x38, 0xcb, 0xc5, 0x92, 0x49, 0x28, 0x85,
+ 0x51, 0x14, 0xc7, 0x8f, 0x12, 0x9e, 0xe7, 0x49, 0xc6, 0x32, 0x94, 0x6c,
+ 0x50, 0x86, 0x8d, 0xc4, 0x82, 0x67, 0x28, 0x19, 0x32, 0x2c, 0xcc, 0x91,
+ 0x9e, 0x85, 0x85, 0x05, 0x29, 0x1b, 0x96, 0xa4, 0x6c, 0x58, 0xb0, 0x30,
+ 0x3d, 0x91, 0x32, 0x96, 0xc8, 0x10, 0x61, 0x63, 0xd8, 0x93, 0x79, 0x8c,
+ 0xf2, 0x64, 0x28, 0xe2, 0x65, 0xf6, 0x38, 0xce, 0xbd, 0xef, 0xfb, 0xde,
+ 0xfd, 0x9e, 0x69, 0xeb, 0xd6, 0x6f, 0xf5, 0xff, 0x7e, 0xdf, 0x3d, 0xe7,
+ 0xdc, 0x03, 0xf0, 0x5f, 0x27, 0x88, 0x68, 0x27, 0x8e, 0x88, 0x67, 0xc2,
+ 0xa4, 0xe0, 0x81, 0xb8, 0xfc, 0x2a, 0x94, 0x12, 0x2f, 0x81, 0xbe, 0x80,
+ 0x6d, 0x15, 0x80, 0x87, 0xbd, 0x80, 0x4f, 0x53, 0x80, 0x6f, 0x33, 0x80,
+ 0xf7, 0x13, 0x80, 0x17, 0xc3, 0x80, 0x94, 0xa3, 0x52, 0x48, 0x23, 0x3e,
+ 0x74, 0x49, 0x80, 0xcf, 0xd3, 0x80, 0x38, 0xf7, 0x33, 0x4a, 0xc9, 0x9e,
+ 0x30, 0xa4, 0x46, 0x02, 0xbe, 0xcf, 0x9a, 0x43, 0xc3, 0x00, 0x60, 0x66,
+ 0x34, 0xa0, 0xda, 0x01, 0x50, 0x65, 0x07, 0x18, 0xe4, 0x07, 0x98, 0x1b,
+ 0x6b, 0x2d, 0x15, 0xda, 0xd9, 0x02, 0x9e, 0xf6, 0x9b, 0x85, 0x17, 0xba,
+ 0x29, 0xc4, 0x9f, 0x87, 0x67, 0x44, 0x16, 0x11, 0x4c, 0xe4, 0x29, 0xe0,
+ 0x67, 0xb0, 0x20, 0x5e, 0x94, 0x30, 0x54, 0xcb, 0x85, 0x57, 0x22, 0xf4,
+ 0xaf, 0x89, 0xed, 0x0d, 0xd4, 0x08, 0xa9, 0x2c, 0x95, 0x4b, 0x47, 0x92,
+ 0x28, 0xc3, 0x6e, 0xed, 0x20, 0xbc, 0x64, 0xe9, 0x6e, 0xb7, 0x5b, 0x48,
+ 0x39, 0x54, 0x7b, 0x83, 0xce, 0x3c, 0x3d, 0x56, 0x2a, 0xeb, 0xaf, 0xbd,
+ 0x12, 0xd0, 0xd3, 0x85, 0xff, 0xec, 0x84, 0xf0, 0x60, 0x92, 0xe9, 0x76,
+ 0x4c, 0x48, 0xc6, 0xf1, 0x9f, 0x27, 0x77, 0xdc, 0x07, 0xe8, 0xee, 0xcc,
+ 0xc5, 0x56, 0x2e, 0xb1, 0xb7, 0x90, 0xc3, 0xcb, 0x11, 0xc0, 0xf4, 0x28,
+ 0x40, 0x27, 0x9a, 0x5c, 0x78, 0x00, 0xe0, 0x6a, 0x9b, 0xc8, 0x5a, 0xca,
+ 0x2d, 0xb7, 0x81, 0xe9, 0x4e, 0xf1, 0xf7, 0x3c, 0x2d, 0x0f, 0xae, 0x88,
+ 0x0c, 0x62, 0x4d, 0x1b, 0x66, 0x7d, 0x9b, 0xd4, 0x23, 0x18, 0x37, 0x3b,
+ 0x45, 0xe0, 0xa2, 0xe6, 0x41, 0xbe, 0xd4, 0x6f, 0x9c, 0x46, 0x25, 0x32,
+ 0xd6, 0xa3, 0x2c, 0x6d, 0xf5, 0x54, 0x8b, 0xc0, 0x55, 0x63, 0x25, 0x25,
+ 0x38, 0x3b, 0x8a, 0xec, 0x7a, 0x54, 0x48, 0xbd, 0xc9, 0x11, 0xdf, 0xca,
+ 0xbb, 0x90, 0x56, 0x6b, 0x23, 0x3e, 0x5c, 0x64, 0xf3, 0x8d, 0x3c, 0xbb,
+ 0x61, 0x52, 0x0a, 0x5b, 0x8f, 0xc5, 0x26, 0x73, 0x70, 0x3e, 0x04, 0xc8,
+ 0x56, 0x4a, 0x2d, 0x0d, 0x62, 0xbd, 0x43, 0x48, 0xd9, 0x31, 0x5c, 0x5a,
+ 0x60, 0x92, 0x0d, 0xb1, 0xe4, 0xed, 0x06, 0xb8, 0xdf, 0xf3, 0xfb, 0xb2,
+ 0x76, 0x55, 0x59, 0x76, 0x2f, 0x47, 0x7e, 0x60, 0x1f, 0xe2, 0x80, 0x8d,
+ 0xb9, 0xae, 0x04, 0x70, 0x5b, 0x0f, 0xf8, 0x38, 0x09, 0xc8, 0xa6, 0xba,
+ 0xdc, 0x0c, 0x58, 0x94, 0x68, 0x11, 0xf4, 0x5f, 0xd7, 0x49, 0x43, 0xd4,
+ 0x13, 0x3b, 0xc4, 0x93, 0x02, 0x23, 0xb1, 0x42, 0x14, 0xcb, 0x1f, 0x7e,
+ 0x02, 0xc8, 0xc9, 0x55, 0xb9, 0xda, 0x16, 0x80, 0x07, 0x00, 0x00, 0x00,
+ 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
+};
+unsigned char devdigit_7_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
+ 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x14,
+ 0x08, 0x06, 0x00, 0x00, 0x00, 0xb9, 0xf0, 0xdc, 0x11, 0x00, 0x00, 0x00,
+ 0xfc, 0x49, 0x44, 0x41, 0x54, 0x28, 0xcf, 0x63, 0x60, 0xa0, 0x07, 0xf8,
+ 0x4f, 0x22, 0x66, 0xf8, 0xff, 0x7f, 0x17, 0x71, 0x98, 0x8e, 0x1a, 0x70,
+ 0x61, 0x76, 0x56, 0x86, 0xff, 0xb7, 0xe6, 0x43, 0x14, 0x2f, 0xab, 0x44,
+ 0x68, 0xc0, 0x06, 0x74, 0x80, 0xf8, 0x57, 0x6b, 0x22, 0x44, 0xf1, 0xe3,
+ 0xa5, 0x0c, 0xff, 0x05, 0xb8, 0xc1, 0x8a, 0x97, 0x63, 0x53, 0xcc, 0x08,
+ 0xc4, 0xc7, 0xb4, 0xe5, 0x19, 0xfe, 0xff, 0xdc, 0x0a, 0xd1, 0xe0, 0x63,
+ 0x0e, 0x56, 0xfc, 0x04, 0x88, 0x05, 0xb1, 0x69, 0xc8, 0x00, 0x59, 0x7d,
+ 0xb4, 0x1f, 0xa2, 0x78, 0x4d, 0x2d, 0xdc, 0x29, 0xbe, 0xd8, 0x14, 0x8b,
+ 0x03, 0xf1, 0xfb, 0x74, 0x6f, 0x88, 0xe2, 0xef, 0x5b, 0x18, 0xfe, 0xcb,
+ 0x8b, 0x81, 0x15, 0xaf, 0xc5, 0xe5, 0xf6, 0xf9, 0x62, 0x02, 0x0c, 0xff,
+ 0xdf, 0xad, 0x85, 0x68, 0xe8, 0x4a, 0x01, 0x2b, 0xfe, 0x01, 0xc4, 0x0a,
+ 0xd8, 0x14, 0x9b, 0x00, 0xf1, 0xbf, 0x79, 0xc5, 0x10, 0xc5, 0x5f, 0x37,
+ 0x31, 0xfc, 0x17, 0xe5, 0x07, 0x6b, 0xe8, 0xc6, 0x65, 0xfa, 0x7e, 0x63,
+ 0x55, 0x86, 0xff, 0x7f, 0x77, 0x40, 0x34, 0x4c, 0xcf, 0x03, 0x2b, 0xfe,
+ 0x06, 0xc4, 0x62, 0xd8, 0x14, 0xdb, 0x82, 0x3c, 0xb6, 0xaf, 0x0b, 0x11,
+ 0x49, 0xfa, 0x4a, 0x60, 0x0d, 0x33, 0x70, 0x99, 0xbe, 0xd4, 0x46, 0x1b,
+ 0xa1, 0xf8, 0xc6, 0x5c, 0x78, 0xc8, 0x18, 0x60, 0x53, 0xcc, 0x06, 0xc4,
+ 0xdf, 0x97, 0x94, 0x23, 0x34, 0xf4, 0x67, 0x80, 0x15, 0xdf, 0xc4, 0x65,
+ 0xba, 0x05, 0x2b, 0x33, 0xc3, 0xff, 0x6f, 0x9b, 0x11, 0x1a, 0x22, 0x1d,
+ 0xc1, 0x1a, 0x26, 0xe0, 0xd4, 0x60, 0xae, 0x81, 0x9a, 0xc8, 0x2c, 0x34,
+ 0xc1, 0x1a, 0xa2, 0x70, 0x6a, 0xc0, 0x91, 0xf8, 0x2c, 0xb1, 0x29, 0x06,
+ 0x00, 0xb2, 0xca, 0xf8, 0x55, 0x80, 0x80, 0x9f, 0xd0, 0x00, 0x00, 0x00,
+ 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
+};
+unsigned char devdigit_8_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
+ 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x14,
+ 0x08, 0x06, 0x00, 0x00, 0x00, 0x56, 0x32, 0xb7, 0x2f, 0x00, 0x00, 0x01,
+ 0xbf, 0x49, 0x44, 0x41, 0x54, 0x38, 0xcb, 0xc5, 0x92, 0x49, 0x28, 0x46,
+ 0x51, 0x14, 0xc7, 0x8f, 0xf1, 0x33, 0xa5, 0x44, 0x28, 0x32, 0x2c, 0x44,
+ 0x08, 0x65, 0xdc, 0xd8, 0x48, 0xf8, 0xac, 0x08, 0xa5, 0x88, 0x95, 0xad,
+ 0x59, 0x22, 0x25, 0xd6, 0xc6, 0x52, 0xca, 0x14, 0x32, 0x94, 0x21, 0xb3,
+ 0x64, 0x65, 0xa6, 0x28, 0x0b, 0x32, 0x6c, 0xc8, 0x9c, 0x05, 0x42, 0xbe,
+ 0xcf, 0x7c, 0x9c, 0x7b, 0x5f, 0x9f, 0xf3, 0x78, 0xf6, 0x5e, 0xfd, 0x16,
+ 0xef, 0xfe, 0xff, 0xbf, 0x37, 0x9c, 0x7b, 0x01, 0xfe, 0xe3, 0x0a, 0x22,
+ 0xfa, 0x89, 0x0b, 0xe2, 0x55, 0xc5, 0x29, 0x31, 0x49, 0xc4, 0xfc, 0x16,
+ 0xa2, 0x09, 0x43, 0xa0, 0x17, 0x60, 0x5f, 0x39, 0xe0, 0xf9, 0x00, 0xe0,
+ 0xcb, 0x0c, 0xe0, 0x49, 0x1f, 0xe0, 0x44, 0x0d, 0x60, 0x74, 0x00, 0x20,
+ 0xe5, 0x9f, 0x44, 0x86, 0x5a, 0x5a, 0x8c, 0xf2, 0x07, 0x7c, 0x9a, 0x04,
+ 0xc4, 0x79, 0x2d, 0x1f, 0x73, 0x80, 0xe9, 0xb1, 0x52, 0x3c, 0x54, 0x4b,
+ 0xc6, 0x85, 0x3a, 0x2e, 0xe5, 0xe9, 0x01, 0x6d, 0xad, 0x01, 0x4b, 0xd2,
+ 0x79, 0xed, 0xa0, 0x53, 0x4a, 0x86, 0x1f, 0x92, 0x61, 0x8a, 0x0b, 0x3a,
+ 0x2b, 0x59, 0x28, 0xb5, 0xd3, 0xf1, 0x9a, 0xf8, 0x0a, 0x8d, 0x74, 0x3b,
+ 0xca, 0x85, 0xb8, 0x30, 0x59, 0x38, 0x76, 0x73, 0xe2, 0xb5, 0xf5, 0x66,
+ 0xad, 0x74, 0x37, 0x5c, 0xc5, 0x85, 0xa3, 0x5e, 0x40, 0x0f, 0x67, 0xc0,
+ 0xda, 0x5c, 0xe5, 0xfe, 0x9d, 0xfe, 0x29, 0x21, 0x5c, 0x4a, 0x1b, 0x6a,
+ 0x69, 0xc4, 0xd3, 0x05, 0xf0, 0xac, 0x9f, 0xc5, 0xeb, 0x21, 0x65, 0x00,
+ 0xc6, 0x69, 0xc0, 0x9c, 0x78, 0x29, 0x7c, 0x10, 0x89, 0x6a, 0xa9, 0x44,
+ 0x8c, 0x34, 0x3f, 0x45, 0x3b, 0xb9, 0xed, 0x56, 0x40, 0xb1, 0x15, 0x94,
+ 0xbf, 0x10, 0x05, 0x26, 0x21, 0x99, 0xc0, 0xe2, 0x34, 0xe5, 0xc9, 0xa2,
+ 0x38, 0x50, 0x01, 0xa8, 0x1e, 0xcc, 0x33, 0xed, 0x99, 0x78, 0xa0, 0xe8,
+ 0x11, 0xd9, 0x42, 0x5a, 0xd1, 0x47, 0x72, 0xa1, 0xb3, 0x58, 0x09, 0xfd,
+ 0x3c, 0x00, 0xd7, 0x9a, 0x7e, 0xbe, 0x35, 0x2b, 0x4e, 0x66, 0xbb, 0x42,
+ 0x7a, 0x58, 0x6e, 0xe0, 0x20, 0xc8, 0x5b, 0x06, 0x5d, 0xc4, 0xba, 0x85,
+ 0x39, 0x60, 0x77, 0x29, 0x67, 0x3b, 0x6d, 0x32, 0x33, 0x4a, 0xe9, 0x7e,
+ 0x9c, 0x03, 0x6b, 0x4b, 0x19, 0x04, 0x13, 0x96, 0x44, 0x8f, 0x8b, 0x23,
+ 0x67, 0xe2, 0x93, 0xbf, 0xa5, 0x9b, 0x51, 0xcd, 0x9b, 0xd6, 0x88, 0x50,
+ 0x62, 0xd9, 0xdb, 0x95, 0xb3, 0xbd, 0x0e, 0x96, 0x6e, 0x7b, 0xca, 0x38,
+ 0x58, 0x6d, 0x04, 0x0c, 0xf1, 0x55, 0x4e, 0x45, 0xb0, 0x0f, 0xe0, 0x52,
+ 0x3d, 0x67, 0x85, 0xa9, 0x52, 0xda, 0x17, 0x52, 0xaf, 0xd8, 0x79, 0x71,
+ 0xb6, 0xfe, 0x3a, 0xac, 0x26, 0xda, 0x8b, 0x00, 0xcd, 0x94, 0xe9, 0x15,
+ 0x09, 0xc9, 0x5d, 0x9c, 0x5e, 0x7b, 0x1b, 0xc0, 0x8a, 0x4c, 0xc0, 0xcd,
+ 0x16, 0xc0, 0x07, 0xfa, 0xc7, 0xd7, 0x59, 0xc0, 0xcb, 0x41, 0xc0, 0xb1,
+ 0x6a, 0xc0, 0xa4, 0x88, 0xef, 0x71, 0x77, 0x10, 0xe6, 0xa6, 0xbd, 0x72,
+ 0x20, 0x2a, 0x89, 0x2d, 0xe2, 0x91, 0x78, 0x53, 0x71, 0x45, 0x8c, 0x13,
+ 0x7a, 0x53, 0xf9, 0x0b, 0x69, 0x69, 0x6e, 0x35, 0xdd, 0xeb, 0x2e, 0x07,
+ 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
+};
+unsigned char devdigit_9_png[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
+ 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x14,
+ 0x08, 0x06, 0x00, 0x00, 0x00, 0x56, 0x32, 0xb7, 0x2f, 0x00, 0x00, 0x01,
+ 0xbd, 0x49, 0x44, 0x41, 0x54, 0x38, 0xcb, 0xc5, 0x92, 0xd9, 0x2b, 0xc4,
+ 0x51, 0x14, 0xc7, 0x8f, 0xd2, 0x98, 0x69, 0x8c, 0x25, 0x59, 0xb2, 0x44,
+ 0x79, 0x30, 0x42, 0x94, 0x22, 0x2f, 0x83, 0x79, 0x18, 0xd9, 0x9f, 0xec,
+ 0x4a, 0xa3, 0x3c, 0x79, 0x50, 0x3c, 0xc8, 0x2b, 0xe5, 0x41, 0x3c, 0x51,
+ 0x76, 0x93, 0x9d, 0x42, 0x22, 0x91, 0x22, 0xcb, 0x1f, 0x60, 0x5f, 0xca,
+ 0x4e, 0xb6, 0xb2, 0x97, 0x7d, 0x38, 0xce, 0xbd, 0xbf, 0x19, 0xf7, 0x97,
+ 0x86, 0x57, 0xbf, 0xfa, 0xbc, 0xdc, 0xef, 0xf9, 0xfc, 0xce, 0x3d, 0xb7,
+ 0x03, 0xf0, 0x1f, 0x5f, 0x3e, 0xb1, 0x48, 0x3c, 0x10, 0x4f, 0x32, 0x36,
+ 0x89, 0x2a, 0x42, 0xf3, 0x53, 0x68, 0x27, 0x30, 0x4f, 0x0f, 0xb8, 0x50,
+ 0x07, 0x78, 0x3f, 0x0a, 0xf8, 0x38, 0x06, 0xb8, 0xd1, 0x0a, 0x58, 0x59,
+ 0x00, 0xe8, 0xa8, 0x04, 0xa4, 0x7c, 0x97, 0xf0, 0xb1, 0x0a, 0x59, 0x4c,
+ 0x68, 0x2b, 0x05, 0xc4, 0x69, 0xdb, 0xec, 0x98, 0x00, 0xbd, 0xdd, 0xb8,
+ 0x38, 0x4f, 0xd8, 0x31, 0x69, 0x36, 0x53, 0x27, 0x0a, 0x56, 0x9a, 0x00,
+ 0x23, 0x02, 0xa5, 0xbf, 0x27, 0x47, 0x01, 0x5e, 0x0c, 0x4a, 0xe7, 0x73,
+ 0xb5, 0x5c, 0x62, 0x24, 0x30, 0xe9, 0x76, 0xa6, 0x46, 0x48, 0xf1, 0xe1,
+ 0x3c, 0x58, 0x25, 0x52, 0x88, 0xcb, 0x9c, 0x78, 0x91, 0x19, 0x22, 0x79,
+ 0x66, 0x62, 0xd2, 0xdb, 0xcd, 0xb0, 0x08, 0x34, 0x2a, 0x1e, 0xe8, 0x2d,
+ 0x57, 0xcf, 0x75, 0x73, 0x12, 0x59, 0x47, 0x19, 0xcf, 0xd6, 0xb9, 0xf4,
+ 0x3a, 0x21, 0x02, 0xcb, 0xd0, 0xb1, 0x16, 0x29, 0xd3, 0x45, 0x2d, 0xb2,
+ 0xb5, 0x16, 0x9e, 0xdd, 0x71, 0xe9, 0xb0, 0x5b, 0x04, 0xba, 0x30, 0x1e,
+ 0x2c, 0x13, 0xa9, 0xc4, 0x45, 0x86, 0x6c, 0xde, 0xdb, 0x11, 0x9e, 0x99,
+ 0x99, 0x74, 0x54, 0x5f, 0x2c, 0x82, 0xa5, 0x46, 0xc0, 0xd0, 0x00, 0x40,
+ 0x35, 0x75, 0x4c, 0x89, 0x06, 0x3c, 0x1f, 0x10, 0xd9, 0xfb, 0xa4, 0x90,
+ 0x1a, 0xdc, 0x9d, 0x01, 0x0f, 0xba, 0x6c, 0x3f, 0xf7, 0xc3, 0xa8, 0xed,
+ 0x4e, 0x1e, 0xc4, 0xa1, 0xa7, 0x2b, 0x60, 0x73, 0x09, 0xe0, 0x69, 0x3f,
+ 0x20, 0x9b, 0x71, 0xaf, 0x13, 0xb0, 0xda, 0x08, 0x98, 0x1d, 0x27, 0xa4,
+ 0xad, 0x76, 0x31, 0x13, 0xfb, 0xbc, 0x88, 0x16, 0xe2, 0x8c, 0xcd, 0x28,
+ 0x63, 0xbf, 0x28, 0x51, 0x48, 0x3d, 0xe5, 0x5c, 0xda, 0xfe, 0x6b, 0x17,
+ 0x43, 0x99, 0xd8, 0x57, 0x21, 0x24, 0xd6, 0x95, 0xce, 0x7a, 0xe5, 0xab,
+ 0x64, 0x25, 0x98, 0x48, 0x27, 0x4e, 0x42, 0xfc, 0xa5, 0xab, 0x32, 0xe1,
+ 0xb8, 0x17, 0x50, 0x61, 0xcf, 0xa5, 0x1c, 0xab, 0x84, 0x6c, 0x95, 0xb4,
+ 0x7e, 0x80, 0x4a, 0x05, 0xa0, 0x8a, 0x48, 0x8b, 0x91, 0x0a, 0x99, 0xf0,
+ 0x31, 0x05, 0x98, 0x14, 0xc5, 0x85, 0x13, 0xc2, 0xe1, 0x5b, 0xfa, 0x6d,
+ 0x59, 0x5f, 0xa8, 0x93, 0xd1, 0xc0, 0x85, 0x4f, 0x22, 0x59, 0x7e, 0x7f,
+ 0xbc, 0x1a, 0x02, 0x7c, 0x1a, 0x07, 0x34, 0x4f, 0x49, 0x85, 0xfb, 0x5d,
+ 0xd2, 0x6b, 0x06, 0xf9, 0x72, 0xe1, 0x95, 0x28, 0xfc, 0x39, 0xf4, 0x35,
+ 0xf1, 0x4c, 0x7c, 0xc8, 0x60, 0x85, 0x07, 0x96, 0x57, 0xd5, 0xca, 0x8b,
+ 0xbf, 0x00, 0xc6, 0xc4, 0x55, 0xb5, 0xfc, 0x00, 0x61, 0x42, 0x00, 0x00,
+ 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
+};
/* }}} */
-static const struct {
- gchar c;
- gsize len;
- const guchar *data;
-}
-digits[] = {
+static const SplashDigit digits[] = {
{ '0', G_N_ELEMENTS(digit_0_png), digit_0_png, },
{ '1', G_N_ELEMENTS(digit_1_png), digit_1_png, },
{ '2', G_N_ELEMENTS(digit_2_png), digit_2_png, },
@@ -562,188 +1114,59 @@ digits[] = {
{ '.', G_N_ELEMENTS(digit_dot_png), digit_dot_png, },
};
-static gint
-format_check(GdkPixbufFormat *format, guchar *buffer, int size)
-{
- int i, j, ii;
- gchar m;
- GdkPixbufModulePattern *pattern;
- gboolean anchored;
- guchar *prefix;
- gchar *mask;
-
- ii = 0;
- for (pattern = format->signature; pattern->prefix; pattern++, ii++) {
- if (pattern->mask && pattern->mask[0] == '*') {
- prefix = (guchar *)pattern->prefix + 1;
- mask = pattern->mask + 1;
- anchored = FALSE;
- }
- else {
- prefix = (guchar *)pattern->prefix;
- mask = pattern->mask;
- anchored = TRUE;
- }
- for (i = 0; i < size; i++) {
- for (j = 0; i + j < size && prefix[j] != 0; j++) {
- m = mask ? mask[j] : ' ';
- if (m == ' ') {
- if (buffer[i + j] != prefix[j])
- break;
- }
- else if (m == '!') {
- if (buffer[i + j] == prefix[j])
- break;
- }
- else if (m == 'z') {
- if (buffer[i + j] != 0)
- break;
- }
- else if (m == 'n') {
- if (buffer[i + j] == 0)
- break;
- }
- }
-
- if (prefix[j] == 0) {
- g_printerr(" Pattern #%d matches the file header (relevance %d).\n",
- ii, pattern->relevance);
- return pattern->relevance;
- }
-
- if (anchored)
- break;
- }
- }
- g_printerr(" No pattern matches the file header.\n");
- return 0;
-}
+static const SplashDigit devdigits[] = {
+ { '0', G_N_ELEMENTS(devdigit_0_png), devdigit_0_png, },
+ { '1', G_N_ELEMENTS(devdigit_1_png), devdigit_1_png, },
+ { '2', G_N_ELEMENTS(devdigit_2_png), devdigit_2_png, },
+ { '3', G_N_ELEMENTS(devdigit_3_png), devdigit_3_png, },
+ { '4', G_N_ELEMENTS(devdigit_4_png), devdigit_4_png, },
+ { '5', G_N_ELEMENTS(devdigit_5_png), devdigit_5_png, },
+ { '6', G_N_ELEMENTS(devdigit_6_png), devdigit_6_png, },
+ { '7', G_N_ELEMENTS(devdigit_7_png), devdigit_7_png, },
+ { '8', G_N_ELEMENTS(devdigit_8_png), devdigit_8_png, },
+ { '9', G_N_ELEMENTS(devdigit_9_png), devdigit_9_png, },
+};
-static void
-sanity_check(const gchar *filename)
+static gint
+composite_pixbuf(GdkPixbuf *base,
+ const guchar *pngdata, gsize pnglen, gint xpos, gint ypos,
+ GError **error)
{
GdkPixbufLoader *loader;
- GSList *formats, *l;
- GError *err = NULL;
- GdkPixbuf *pixbuf;
- gchar *buf = NULL;
- gsize size;
- FILE *fh;
- gboolean ok, fileok = TRUE;
-
- g_printerr("Performing sanity check for %s.\n", filename);
- fileok &= ok = g_file_test(filename, G_FILE_TEST_EXISTS);
- g_printerr("Does it exist: %s\n", ok ? "YES" : "NO");
- fileok &= ok = g_file_test(filename, G_FILE_TEST_IS_REGULAR);
- g_printerr("Is it a regular file: %s\n", ok ? "YES" : "NO");
-
- fh = gwy_fopen(filename, "rb");
- fileok &= ok = !!fh;
- g_printerr("Can we open it for reading: %s\n", ok ? "YES" : "NO");
- if (fh)
- fclose(fh);
- else
- g_printerr("gwy_fopen() fails with: %s\n", g_strerror(errno));
-
- fileok &= ok = g_file_get_contents(filename, &buf, &size, &err);
- g_printerr("Can we use g_file_get_contents(): %s\n", ok ? "YES" : "NO");
- if (!ok) {
- g_printerr("g_file_get_contents() fails with: %s\n", err->message);
- g_clear_error(&err);
- }
+ GdkPixbuf *text;
- if (!fileok) {
- if (buf)
- g_free(buf);
- g_printerr("The file does not seem OK. No point continuing.\n");
- return;
- }
- g_printerr("The file seems OK, continuing checks.\n");
+ loader = gdk_pixbuf_loader_new_with_type("png", error);
+ /* We have already successfully loaded base PNG */
+ g_assert(loader);
- pixbuf = gdk_pixbuf_new_from_file(filename, &err);
- if (pixbuf) {
- g_printerr("Apparently we can load the pixbuf (%dx%d) now?!\n",
- gdk_pixbuf_get_width(pixbuf),
- gdk_pixbuf_get_height(pixbuf));
- g_printerr("What has changed?\n");
- g_printerr("This is completely fucked up.\n");
- g_object_unref(pixbuf);
+ if (!gdk_pixbuf_loader_write(loader, pngdata, pnglen, error)) {
+ g_critical("Cannot load in-line image as PNG.");
+ return G_MAXINT;
}
- else {
- g_printerr("gdk_pixbuf_new_from_file() fails with: %s\n", err->message);
- g_clear_error(&err);
+ if (!gdk_pixbuf_loader_close(loader, error)) {
+ g_critical("Cannot load in-line image as PNG.");
+ return G_MAXINT;
}
- g_printerr("Checking the pixbuf loaders.\n");
-
- formats = gdk_pixbuf_get_formats();
- for (l = formats; l; l = g_slist_next(l)) {
- GdkPixbufFormat *pixbuf_format = (GdkPixbufFormat*)l->data;
- gchar **ext;
- gchar *fmtname, *desc, *exts;
-
- fmtname = gdk_pixbuf_format_get_name(pixbuf_format);
- desc = gdk_pixbuf_format_get_description(pixbuf_format);
- ext = gdk_pixbuf_format_get_extensions(pixbuf_format);
- exts = g_strjoinv(" ", ext);
- g_printerr("Found format %s: %s (%s)\n", fmtname, desc, exts);
- g_free(exts);
- g_strfreev(ext);
- g_free(desc);
-
- format_check(pixbuf_format, buf, size);
-
- loader = gdk_pixbuf_loader_new_with_type(fmtname, &err);
- if (!loader) {
- g_printerr(" Cannot create loader for %s: %s\n",
- fmtname, err->message);
- g_clear_error(&err);
- g_free(fmtname);
- continue;
- }
-
- ok = gdk_pixbuf_loader_write(loader, buf, size, &err);
- if (ok) {
- g_printerr(" Loader %s accepts the file content.\n", fmtname);
- ok = gdk_pixbuf_loader_close(loader, &err);
- if (ok) {
- g_printerr(" Loader %s accepts the entire file.\n", fmtname);
- pixbuf = gdk_pixbuf_loader_get_pixbuf(loader);
- if (pixbuf) {
- g_printerr(" Obtained pixbuf %dx%d from the loader.\n",
- gdk_pixbuf_get_width(pixbuf),
- gdk_pixbuf_get_height(pixbuf));
- }
- else {
- g_printerr(" Cannot obtain pixbuf from the loader.\n");
- }
- }
- else {
- g_printerr(" Loader %s fails at close(): %s.\n",
- fmtname, err->message);
- g_clear_error(&err);
- }
- }
- else {
- g_printerr(" Loader %s does not accept the file content: %s\n",
- fmtname, err->message);
- g_clear_error(&err);
- }
- g_object_unref(loader);
+ text = gdk_pixbuf_loader_get_pixbuf(loader);
+ g_assert(text);
- g_free(fmtname);
- }
+ gdk_pixbuf_composite(text, base, xpos, ypos,
+ gdk_pixbuf_get_width(text),
+ gdk_pixbuf_get_height(text),
+ xpos, ypos, 1.0, 1.0, GDK_INTERP_NEAREST, 255);
+ xpos += gdk_pixbuf_get_width(text);
+ g_object_unref(loader);
- g_slist_free(formats);
+ return xpos;
}
static GdkPixbuf*
-compose_splash(const gchar *version)
+compose_splash(const gchar *version, const gchar *extraversion)
{
gint xpos = 224;
gint ypos = 36;
- GdkPixbufLoader *loader;
- GdkPixbuf *base, *digit;
+ GdkPixbuf *base;
GError *err = NULL;
guint i;
gchar *p, *filename;
@@ -756,14 +1179,12 @@ compose_splash(const gchar *version)
if (!base) {
g_warning("Cannot load base splash image: %s", err->message);
g_clear_error(&err);
- sanity_check(filename);
g_free(filename);
return NULL;
}
g_free(filename);
while (*version) {
- loader = NULL;
for (i = 0; i < G_N_ELEMENTS(digits); i++) {
if (*version == digits[i].c)
break;
@@ -774,36 +1195,42 @@ compose_splash(const gchar *version)
continue;
}
- loader = gdk_pixbuf_loader_new_with_type("png", &err);
- /* We have already successfully loaded base PNG */
- g_assert(loader);
-
- if (!gdk_pixbuf_loader_write(loader, digits[i].data, digits[i].len,
- &err)) {
- g_critical("Cannot load in-line image for %c as PNG", *version);
- break;
- }
- if (!gdk_pixbuf_loader_close(loader, &err)) {
- g_critical("Cannot load in-line image for %c as PNG", *version);
- break;
- }
+ xpos = composite_pixbuf(base, digits[i].data, digits[i].len,
+ xpos, ypos, &err);
+ if (xpos == G_MAXINT)
+ return base;
+ version++;
+ }
- digit = gdk_pixbuf_loader_get_pixbuf(loader);
- g_assert(digit);
+ if (extraversion) {
+ xpos = 7;
+ ypos = 214;
+ xpos = composite_pixbuf(base, development_snapshot_png,
+ G_N_ELEMENTS(development_snapshot_png),
+ xpos, ypos, &err);
+ if (xpos == G_MAXINT)
+ return base;
- gdk_pixbuf_composite(digit, base,
- xpos, ypos,
- gdk_pixbuf_get_width(digit),
- gdk_pixbuf_get_height(digit),
- xpos, ypos,
- 1.0, 1.0,
- GDK_INTERP_NEAREST,
- 255);
- xpos += gdk_pixbuf_get_width(digit);
- g_object_unref(loader);
+ xpos += 4;
+ while (*extraversion) {
+ for (i = 0; i < G_N_ELEMENTS(devdigits); i++) {
+ if (*extraversion == devdigits[i].c)
+ break;
+ }
+ if (i == G_N_ELEMENTS(devdigits)) {
+ g_warning("Cannot find image for %c", *extraversion);
+ extraversion++;
+ continue;
+ }
- version++;
+ xpos = composite_pixbuf(base, devdigits[i].data, devdigits[i].len,
+ xpos, ypos, &err);
+ if (xpos == G_MAXINT)
+ return base;
+ extraversion++;
+ }
}
+
return base;
}
@@ -820,6 +1247,7 @@ gwy_app_splash_start(gboolean visible)
GtkWidget *image, *vbox, *frame, *lab;
GdkPixbuf *pixbuf;
char *p, *version;
+ const gchar *extraversion;
gwy_debug("");
g_return_if_fail(!in_splash);
@@ -854,7 +1282,14 @@ gwy_app_splash_start(gboolean visible)
gtk_container_set_border_width(GTK_CONTAINER(vbox), 2);
version = g_strdup_printf("%d.%d", GWY_VERSION_MAJOR, GWY_VERSION_MINOR);
- pixbuf = compose_splash(version);
+ extraversion = GWY_VERSION_STRING;
+ if (extraversion)
+ extraversion = strchr(extraversion, '.');
+ if (extraversion)
+ extraversion = strchr(extraversion+1, '.');
+ if (extraversion)
+ extraversion++;
+ pixbuf = compose_splash(version, extraversion);
g_free(version);
if (pixbuf) {
image = gtk_image_new_from_pixbuf(pixbuf);
diff --git a/app/toolbox-editor.c b/app/toolbox-editor.c
index b474c8e..ae9d97d 100644
--- a/app/toolbox-editor.c
+++ b/app/toolbox-editor.c
@@ -1,6 +1,6 @@
/*
- * @(#) $Id: toolbox-editor.c 19043 2016-10-08 18:58:43Z yeti-dn $
- * Copyright (C) 2016 David Necas (Yeti).
+ * @(#) $Id: toolbox-editor.c 20258 2017-08-12 08:17:43Z yeti-dn $
+ * Copyright (C) 2016-2017 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
* This program is free software; you can redistribute it and/or modify
@@ -181,7 +181,8 @@ static void move_down_in_toolbox (GwyToolboxEditor *editor);
static void width_changed (GwyToolboxEditor *editor);
static void apply_toolbox_spec (GwyToolboxEditor *editor);
static void reset_toolbox_to_default (GwyToolboxEditor *editor);
-static GtkListStore* create_function_list (ForeachFunc foreach_do);
+static GtkListStore* create_function_list (ForeachFunc foreach_do,
+ GwyAppActionType type);
static GtkListStore* create_function_list_builtin (void);
static GtkListStore* create_gtk_icon_list (GtkWidget *widget);
static GtkListStore* create_gwy_icon_list (GtkWidget *widget);
@@ -405,15 +406,26 @@ add_function_name(const gchar *name, GArray *func_names)
}
static gint
-compare_func_names(gconstpointer pa, gconstpointer pb)
+compare_func_names(gconstpointer pa, gconstpointer pb, gpointer user_data)
{
GQuark qa = *(const GQuark*)pa;
GQuark qb = *(const GQuark*)pb;
- return strcmp(g_quark_to_string(qa), g_quark_to_string(qb));
+ GwyAppActionType type = GPOINTER_TO_UINT(user_data);
+ const gchar *namea = g_quark_to_string(qa);
+ const gchar *nameb = g_quark_to_string(qb);
+ /* XXX: Inefficient. */
+ gchar *nnamea = g_strdup(gwy_toolbox_action_nice_name(type, namea));
+ gchar *nnameb = g_strdup(gwy_toolbox_action_nice_name(type, nameb));
+ gint retval = g_utf8_collate(nnamea, nnameb);
+
+ g_free(nnameb);
+ g_free(nnamea);
+
+ return retval;
}
static GtkListStore*
-create_function_list(ForeachFunc foreach_do)
+create_function_list(ForeachFunc foreach_do, GwyAppActionType type)
{
GtkListStore *store;
GtkTreeIter iter;
@@ -423,7 +435,8 @@ create_function_list(ForeachFunc foreach_do)
store = gtk_list_store_new(1, G_TYPE_UINT);
func_names = g_array_new(FALSE, FALSE, sizeof(GQuark));
foreach_do((GFunc)add_function_name, func_names);
- g_array_sort(func_names, compare_func_names);
+ g_array_sort_with_data(func_names, compare_func_names,
+ GUINT_TO_POINTER(type));
for (i = 0; i < func_names->len; i++) {
GQuark qname = g_array_index(func_names, GQuark, i);
gtk_list_store_insert_with_values(store, &iter, G_MAXINT, 0, qname, -1);
@@ -598,7 +611,7 @@ toolbox_cell_renderer_icon(GtkTreeViewColumn *column,
iconset = gtk_icon_factory_lookup_default(id);
widget = GTK_WIDGET(gtk_tree_view_column_get_tree_view(column));
- pixbuf = gtk_icon_set_render_icon(iconset, widget->style, GTK_TEXT_DIR_NONE,
+ pixbuf = gtk_icon_set_render_icon(iconset, widget->style, GTK_TEXT_DIR_LTR,
GTK_STATE_NORMAL,
GTK_ICON_SIZE_LARGE_TOOLBAR,
widget, NULL);
@@ -727,7 +740,7 @@ function_cell_renderer_icon(GtkTreeViewColumn *column,
iconset = gtk_icon_factory_lookup_default(id);
widget = GTK_WIDGET(gtk_tree_view_column_get_tree_view(column));
- pixbuf = gtk_icon_set_render_icon(iconset, widget->style, GTK_TEXT_DIR_NONE,
+ pixbuf = gtk_icon_set_render_icon(iconset, widget->style, GTK_TEXT_DIR_LTR,
GTK_STATE_NORMAL,
GTK_ICON_SIZE_LARGE_TOOLBAR,
widget, NULL);
@@ -936,7 +949,7 @@ suggest_group_id(GwyToolboxGroupEditor *geditor)
}
#else
for (i = 0; i < name_len; i++)
- add_unichar_if_ident(suggestion, name_chars[j]);
+ add_unichar_if_ident(suggestion, name_chars[i]);
#endif
gtk_entry_set_text(GTK_ENTRY(geditor->id), suggestion->str);
@@ -1105,15 +1118,20 @@ create_item_editor_models(GwyToolboxEditor *editor)
stores[GWY_APP_ACTION_TYPE_BUILTIN] = create_function_list_builtin();
stores[GWY_APP_ACTION_TYPE_PROC]
- = create_function_list(gwy_process_func_foreach);
+ = create_function_list(gwy_process_func_foreach,
+ GWY_APP_ACTION_TYPE_PROC);
stores[GWY_APP_ACTION_TYPE_GRAPH]
- = create_function_list(gwy_graph_func_foreach);
+ = create_function_list(gwy_graph_func_foreach,
+ GWY_APP_ACTION_TYPE_GRAPH);
stores[GWY_APP_ACTION_TYPE_VOLUME]
- = create_function_list(gwy_volume_func_foreach);
+ = create_function_list(gwy_volume_func_foreach,
+ GWY_APP_ACTION_TYPE_VOLUME);
stores[GWY_APP_ACTION_TYPE_XYZ]
- = create_function_list(gwy_xyz_func_foreach);
+ = create_function_list(gwy_xyz_func_foreach,
+ GWY_APP_ACTION_TYPE_XYZ);
stores[GWY_APP_ACTION_TYPE_TOOL]
- = create_function_list(gwy_tool_func_foreach);
+ = create_function_list(gwy_tool_func_foreach,
+ GWY_APP_ACTION_TYPE_TOOL);
sync_remaining_tools_item(editor);
editor->icon_model_gwy = create_gwy_icon_list(editor->dialogue);
@@ -1416,8 +1434,7 @@ add_default_function_icon(GtkListStore *store, GwyToolboxItemSpec *ispec,
if (!iconset)
return;
- pixbuf = gtk_icon_set_render_icon(iconset, widget->style,
- GTK_TEXT_DIR_NONE,
+ pixbuf = gtk_icon_set_render_icon(iconset, widget->style, GTK_TEXT_DIR_LTR,
GTK_STATE_NORMAL,
GTK_ICON_SIZE_LARGE_TOOLBAR,
widget, NULL);
@@ -1451,6 +1468,7 @@ toolbox_model_iter_indices(GtkTreeModel *model, GtkTreeIter *iter,
*j = indices[1];
}
else {
+ *i = *j = 0;
g_return_val_if_reached(0);
}
@@ -1759,7 +1777,7 @@ create_icon_list(GtkWidget *widget, const gchar **stock_ids, guint nicons)
continue;
pixbuf = gtk_icon_set_render_icon(iconset, widget->style,
- GTK_TEXT_DIR_NONE,
+ GTK_TEXT_DIR_LTR,
GTK_STATE_NORMAL,
GTK_ICON_SIZE_LARGE_TOOLBAR,
widget, NULL);
@@ -1818,35 +1836,35 @@ create_gtk_icon_list(GtkWidget *widget)
"gtk-floppy",
"gtk-fullscreen",
"gtk-goto-bottom",
- //"gtk-goto-first",
- //"gtk-goto-last",
+ "gtk-goto-first",
+ "gtk-goto-last",
"gtk-goto-top",
- //"gtk-go-back",
+ "gtk-go-back",
"gtk-go-down",
- //"gtk-go-forward",
+ "gtk-go-forward",
"gtk-go-up",
"gtk-harddisk",
"gtk-help",
"gtk-home",
"gtk-index",
- //"gtk-indent",
+ "gtk-indent",
"gtk-info",
"gtk-italic",
- //"gtk-jump-to",
+ "gtk-jump-to",
"gtk-justify-center",
"gtk-justify-fill",
"gtk-justify-left",
"gtk-justify-right",
"gtk-leave-fullscreen",
"gtk-missing-image",
- //"gtk-media-forward",
- //"gtk-media-next",
- //"gtk-media-pause",
- //"gtk-media-play",
- //"gtk-media-previous",
- //"gtk-media-record",
- //"gtk-media-rewind",
- //"gtk-media-stop",
+ "gtk-media-forward",
+ "gtk-media-next",
+ "gtk-media-pause",
+ "gtk-media-play",
+ "gtk-media-previous",
+ "gtk-media-record",
+ "gtk-media-rewind",
+ "gtk-media-stop",
"gtk-network",
"gtk-new",
"gtk-no",
@@ -1867,10 +1885,10 @@ create_gtk_icon_list(GtkWidget *widget)
"gtk-print-warning",
"gtk-properties",
"gtk-quit",
- //"gtk-redo",
+ "gtk-redo",
"gtk-refresh",
"gtk-remove",
- //"gtk-revert-to-saved",
+ "gtk-revert-to-saved",
"gtk-save",
"gtk-save-as",
"gtk-select-all",
@@ -1881,10 +1899,10 @@ create_gtk_icon_list(GtkWidget *widget)
"gtk-spell-check",
"gtk-stop",
"gtk-strikethrough",
- //"gtk-undelete",
+ "gtk-undelete",
"gtk-underline",
- //"gtk-undo",
- //"gtk-unindent",
+ "gtk-undo",
+ "gtk-unindent",
"gtk-yes",
"gtk-zoom-100",
"gtk-zoom-fit",
@@ -1913,9 +1931,11 @@ create_gwy_icon_list(GtkWidget *widget)
GWY_STOCK_COLOR_RANGE_FULL,
GWY_STOCK_CONVOLUTION,
GWY_STOCK_CORRECT_AFFINE,
+ GWY_STOCK_CORRELATION_MASK,
GWY_STOCK_CROP,
GWY_STOCK_CWT,
GWY_STOCK_DATA_MEASURE,
+ GWY_STOCK_DISCONNECTED,
GWY_STOCK_DISTANCE,
GWY_STOCK_DISTANCE_TRANSFORM,
GWY_STOCK_DISTRIBUTION_ANGLE,
@@ -1931,16 +1951,23 @@ create_gwy_icon_list(GtkWidget *widget)
GWY_STOCK_FAVOURITE,
GWY_STOCK_FFT,
GWY_STOCK_FFT_2D,
+ GWY_STOCK_FFT_FILTER_1D,
GWY_STOCK_FFT_FILTER_2D,
GWY_STOCK_FILTER,
GWY_STOCK_FIND_PEAKS,
+ GWY_STOCK_FIT_SHAPE,
GWY_STOCK_FIX_ZERO,
GWY_STOCK_FLIP_HORIZONTALLY,
GWY_STOCK_FLIP_VERTICALLY,
GWY_STOCK_FRACTAL,
+ GWY_STOCK_FRACTAL_CORRECTION,
+ GWY_STOCK_FRACTAL_MEASURE,
GWY_STOCK_GL_MATERIAL,
GWY_STOCK_GRADIENT_HORIZONTAL,
GWY_STOCK_GRADIENT_VERTICAL,
+ GWY_STOCK_GRAIN_CORRELATION,
+ GWY_STOCK_GRAIN_EXSCRIBED_CIRCLE,
+ GWY_STOCK_GRAIN_INSCRIBED_CIRCLE,
GWY_STOCK_GRAINS,
GWY_STOCK_GRAINS_EDGE,
GWY_STOCK_GRAINS_EDGE_REMOVE,
@@ -1948,9 +1975,6 @@ create_gwy_icon_list(GtkWidget *widget)
GWY_STOCK_GRAINS_MEASURE,
GWY_STOCK_GRAINS_REMOVE,
GWY_STOCK_GRAINS_WATER,
- GWY_STOCK_GRAIN_CORRELATION,
- GWY_STOCK_GRAIN_EXSCRIBED_CIRCLE,
- GWY_STOCK_GRAIN_INSCRIBED_CIRCLE,
GWY_STOCK_GRAPH,
GWY_STOCK_GRAPH_ALIGN,
GWY_STOCK_GRAPH_CUT,
@@ -1989,6 +2013,8 @@ create_gwy_icon_list(GtkWidget *widget)
GWY_STOCK_LOCAL_SLOPE,
GWY_STOCK_LOGSCALE_HORIZONTAL,
GWY_STOCK_LOGSCALE_VERTICAL,
+ GWY_STOCK_MARK_OUTLIERS,
+ GWY_STOCK_MARK_SCARS,
GWY_STOCK_MARK_WITH,
GWY_STOCK_MASK,
GWY_STOCK_MASK_ADD,
@@ -2012,6 +2038,7 @@ create_gwy_icon_list(GtkWidget *widget)
GWY_STOCK_MASK_RECT_EXCLUSIVE,
GWY_STOCK_MASK_RECT_INCLUSIVE,
GWY_STOCK_MASK_REMOVE,
+ GWY_STOCK_MASK_SET,
GWY_STOCK_MASK_SHRINK,
GWY_STOCK_MASK_SUBTRACT,
GWY_STOCK_MASK_THIN,
@@ -2021,12 +2048,15 @@ create_gwy_icon_list(GtkWidget *widget)
GWY_STOCK_MUTUAL_CROP,
GWY_STOCK_NEURAL_APPLY,
GWY_STOCK_NEURAL_TRAIN,
+ GWY_STOCK_NEXT,
+ GWY_STOCK_NULL_OFFSETS,
GWY_STOCK_PALETTES,
GWY_STOCK_PATH_LEVEL,
GWY_STOCK_POINTER_MEASURE,
+ GWY_STOCK_POLY_DISTORT,
GWY_STOCK_POLYNOM,
GWY_STOCK_POLYNOM_LEVEL,
- GWY_STOCK_POLY_DISTORT,
+ GWY_STOCK_PREVIOUS,
GWY_STOCK_PROFILE,
GWY_STOCK_PSDF_LOG_PHI,
GWY_STOCK_PSDF_SECTION,
@@ -2034,6 +2064,7 @@ create_gwy_icon_list(GtkWidget *widget)
GWY_STOCK_REMOVE_UNDER_MASK,
GWY_STOCK_ROTATE,
GWY_STOCK_ROTATE_180,
+ GWY_STOCK_ROTATE_3D,
GWY_STOCK_ROTATE_90_CCW,
GWY_STOCK_ROTATE_90_CW,
GWY_STOCK_SCALE,
@@ -2053,12 +2084,14 @@ create_gwy_icon_list(GtkWidget *widget)
GWY_STOCK_SYNTHETIC_COLUMNAR,
GWY_STOCK_SYNTHETIC_DIFFUSION,
GWY_STOCK_SYNTHETIC_DOMAINS,
+ GWY_STOCK_SYNTHETIC_FIBRES,
GWY_STOCK_SYNTHETIC_LATTICE,
GWY_STOCK_SYNTHETIC_LINE_NOISE,
GWY_STOCK_SYNTHETIC_NOISE,
GWY_STOCK_SYNTHETIC_OBJECTS,
GWY_STOCK_SYNTHETIC_PARTICLES,
GWY_STOCK_SYNTHETIC_PATTERN,
+ GWY_STOCK_SYNTHETIC_PHASES,
GWY_STOCK_SYNTHETIC_SPECTRAL,
GWY_STOCK_SYNTHETIC_WAVES,
GWY_STOCK_TILT,
@@ -2082,6 +2115,7 @@ create_gwy_icon_list(GtkWidget *widget)
GWY_STOCK_VOLUME_SLICE,
GWY_STOCK_VOLUMIZE,
GWY_STOCK_VOLUMIZE_LAYERS,
+ GWY_STOCK_XY_DENOISE,
GWY_STOCK_ZERO_MEAN,
GWY_STOCK_ZOOM_1_1,
GWY_STOCK_ZOOM_FIT,
diff --git a/app/toolbox.c b/app/toolbox.c
index e46a491..b2b9f80 100644
--- a/app/toolbox.c
+++ b/app/toolbox.c
@@ -1,6 +1,6 @@
/*
- * @(#) $Id: toolbox.c 19071 2016-10-14 09:02:41Z yeti-dn $
- * Copyright (C) 2003-2016 David Necas (Yeti), Petr Klapetek.
+ * @(#) $Id: toolbox.c 20134 2017-08-02 06:07:07Z yeti-dn $
+ * Copyright (C) 2003-2017 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
* This program is free software; you can redistribute it and/or modify
@@ -66,40 +66,45 @@ typedef struct {
const gchar *tooltip;
} Action;
-static GtkWidget* gwy_app_menu_create_info_menu (GtkAccelGroup *accel_group);
-static GtkWidget* gwy_app_menu_create_file_menu (GtkAccelGroup *accel_group);
-static GtkWidget* gwy_app_menu_create_edit_menu (GtkAccelGroup *accel_group);
-static gboolean gwy_toolbox_fill_builtin_action (Action *action);
-static void gwy_app_toolbox_showhide (GtkWidget *expander);
-static void show_user_guide (void);
-static void show_message_log (void);
-static GtkWindow* create_message_log_window (void);
-static void toolbox_dnd_data_received (GtkWidget *widget,
- GdkDragContext *context,
- gint x,
- gint y,
- GtkSelectionData *data,
- guint info,
- guint time_,
- gpointer user_data);
-static void delete_app_window (void);
-static void action_zoom_in (void);
-static void action_zoom_out (void);
-static void action_zoom_1_1 (void);
-static void action_undo (void);
-static void action_redo (void);
-static void remove_all_logs (void);
-static void toggle_edit_accelerators (gpointer callback_data,
- gint callback_action,
- GtkCheckMenuItem *item);
-static void toggle_logging_enabled (gpointer callback_data,
- gint callback_action,
- GtkCheckMenuItem *item);
-static void enable_edit_accelerators (gboolean enable);
-static void gwy_app_tool_use (const gchar *toolname,
- GtkToggleButton *button);
-static void gwy_app_change_default_mask_color(void);
-static void action_display_3d (void);
+static GtkWidget* gwy_app_menu_create_info_menu (GtkAccelGroup *accel_group);
+static GtkWidget* gwy_app_menu_create_file_menu (GtkAccelGroup *accel_group);
+static GtkWidget* gwy_app_menu_create_edit_menu (GtkAccelGroup *accel_group);
+static gboolean toolbox_mapped (GtkWidget *toolbox);
+static void finalise_toolbox (GtkWidget *toolbox);
+static gboolean gwy_toolbox_fill_builtin_action (Action *action);
+static const gchar* gwy_toolbox_builtin_accel_path (const gchar *name);
+static void gwy_app_toolbox_showhide (GtkWidget *expander);
+static void show_user_guide (void);
+static void show_message_log (void);
+static GtkWindow* create_message_log_window (void);
+static void toolbox_dnd_data_received (GtkWidget *widget,
+ GdkDragContext *context,
+ gint x,
+ gint y,
+ GtkSelectionData *data,
+ guint info,
+ guint time_,
+ gpointer user_data);
+static void delete_app_window (void);
+static void action_zoom_in (void);
+static void action_zoom_out (void);
+static void action_zoom_1_1 (void);
+static void action_undo (void);
+static void action_redo (void);
+static void remove_all_logs (void);
+static void toggle_edit_accelerators (gpointer callback_data,
+ gint callback_action,
+ GtkCheckMenuItem *item);
+static void toggle_logging_enabled (gpointer callback_data,
+ gint callback_action,
+ GtkCheckMenuItem *item);
+static void enable_edit_accelerators (gboolean enable);
+static void gwy_app_tool_use (const gchar *toolname,
+ GtkToggleButton *button);
+static void gwy_app_change_default_mask_color(void);
+static void action_display_3d (void);
+
+static gulong toolbox_map_event_id = 0;
/* Translatability hack, intltool seems overkill at this point. */
#define GWY_TOOLBOX_IGNORE(x) /* */
@@ -279,7 +284,7 @@ static gboolean
toolbox_start_item(GwyAppToolboxBuilder *builder,
const GwyToolboxItemSpec *ispec)
{
- const gchar *func = NULL, *stock_id = NULL;
+ const gchar *func = NULL, *stock_id = NULL, *accel_path;
GtkWidget *button = NULL;
GwyToolClass *tool_class;
GType gtype;
@@ -402,6 +407,12 @@ toolbox_start_item(GwyAppToolboxBuilder *builder,
if (!action.stock_id && stock_id)
action.stock_id = g_quark_from_string(stock_id);
+ if (action.type == GWY_APP_ACTION_TYPE_BUILTIN) {
+ accel_path = gwy_toolbox_builtin_accel_path(func);
+ if (accel_path)
+ gtk_widget_set_accel_path(button, accel_path, builder->accel_group);
+ }
+
if (!action.stock_id) {
g_warning("Function %s::%s has no icon set",
gwy_toolbox_action_type_name(action.type), func);
@@ -420,6 +431,9 @@ toolbox_start_item(GwyAppToolboxBuilder *builder,
}
gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE);
+ GTK_WIDGET_UNSET_FLAGS(button, GTK_CAN_DEFAULT);
+ gtk_container_set_border_width(GTK_CONTAINER(button), 0);
+ gtk_widget_set_name(button, "toolboxbutton");
gtk_table_attach_defaults(GTK_TABLE(builder->group), button,
builder->pos % builder->width,
builder->pos % builder->width + 1,
@@ -498,7 +512,7 @@ gwy_app_toolbox_build(GwyToolboxSpec *spec,
guint i, j;
gwy_clear(&builder, 1);
- builder.width = spec->width ? spec->width : 4;
+ builder.width = spec->width ? spec->width : 5;
builder.box = vbox;
builder.tips = tips;
builder.unseen_tools = g_ptr_array_new();
@@ -596,7 +610,6 @@ gwy_app_toolbox_window_create(void)
spec = gwy_parse_toolbox_ui(FALSE);
if (spec) {
- /* TODO: free the spec upon exit so that it does not show as a leak. */
gwy_app_toolbox_build(spec, vbox, gwy_app_get_tooltips(), accel_group);
g_object_set_data(G_OBJECT(toolbox), "gwy-app-toolbox-spec", spec);
}
@@ -611,17 +624,37 @@ gwy_app_toolbox_window_create(void)
/***************************************************************/
/* XXX */
g_signal_connect(toolbox, "delete-event", G_CALLBACK(gwy_app_quit), NULL);
-
+ g_signal_connect(toolbox, "destroy", G_CALLBACK(finalise_toolbox), NULL);
+ toolbox_map_event_id = g_signal_connect_after(toolbox, "map-event",
+ G_CALLBACK(toolbox_mapped),
+ NULL);
gtk_widget_show_all(toolbox);
gwy_osx_get_menu_from_widget(container);
- while (gtk_events_pending())
- gtk_main_iteration_do(FALSE);
+ return toolbox;
+}
+
+static gboolean
+toolbox_mapped(GtkWidget *toolbox)
+{
+ g_return_val_if_fail(toolbox_map_event_id, FALSE);
gwy_remote_setup(toolbox);
- g_signal_connect(toolbox, "destroy", G_CALLBACK(gwy_remote_finalize), NULL);
+ g_signal_handler_disconnect(toolbox, toolbox_map_event_id);
+ toolbox_map_event_id = 0;
+ return FALSE;
+}
- return toolbox;
+static void
+finalise_toolbox(GtkWidget *toolbox)
+{
+ GwyToolboxSpec *spec;
+
+ if ((spec = g_object_get_data(G_OBJECT(toolbox), "gwy-app-toolbox-spec"))) {
+ gwy_toolbox_spec_free(spec);
+ g_object_set_data(G_OBJECT(toolbox), "gwy-app-toolbox-spec", NULL);
+ }
+ gwy_remote_finalize(toolbox);
}
void
@@ -663,6 +696,14 @@ gwy_toolbox_get_builtins(guint *nspec)
N_("Display a 3D view of data"), N_("Display a 3D view of data"),
},
{
+ "undo", GTK_STOCK_UNDO, &action_undo,
+ N_("Undo"), N_("Undo last action"),
+ },
+ {
+ "redo", GTK_STOCK_REDO, &action_redo,
+ N_("Redo"), N_("Redo again last undone action"),
+ },
+ {
"zoom_in", GWY_STOCK_ZOOM_IN, &action_zoom_in,
N_("Zoom in"), N_("Zoom in"),
},
@@ -713,6 +754,24 @@ gwy_toolbox_fill_builtin_action(Action *action)
return TRUE;
}
+static const gchar*
+gwy_toolbox_builtin_accel_path(const gchar *name)
+{
+ static const gchar *paths[] = {
+ "display_3d", "<builtin>/Display 3D",
+ "zoom_in", "<builtin>/Zoom In",
+ "zoom_out", "<builtin>/Zoom Out",
+ "zoom_1_1", "<builtin>/Zoom 1:1",
+ };
+ guint i;
+
+ for (i = 0; i < G_N_ELEMENTS(paths); i += 2) {
+ if (gwy_strequal(paths[i], name))
+ return paths[i+1];
+ }
+ return NULL;
+}
+
/*************************************************************************/
static GtkWidget*
gwy_app_menu_create_info_menu(GtkAccelGroup *accel_group)
diff --git a/app/toolbox.xml b/app/toolbox.xml
index d22d0a3..7343f3b 100644
--- a/app/toolbox.xml
+++ b/app/toolbox.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<toolbox width='4'>
+<toolbox width='5'>
<group id='view' title='View' translatable='true'>
<item type='builtin' function='zoom_in'/>
<item type='builtin' function='zoom_1_1'/>
@@ -26,6 +26,9 @@
<group id='graph' title='Graph' translatable='true'>
<item type='graph' function='graph_cd'/>
<item type='graph' function='graph_fit'/>
+ <item type='graph' function='graph_level'/>
+ <item type='graph' function='graph_align'/>
+ <item type='graph' function='graph_export_ascii'/>
</group>
<group id='tool' title='Tools' translatable='true'>
<item type='tool' function='GwyToolReadValue'/>
diff --git a/app/undo.c b/app/undo.c
index 90555d0..5a722f3 100644
--- a/app/undo.c
+++ b/app/undo.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: undo.c 19043 2016-10-08 18:58:43Z yeti-dn $
+ * @(#) $Id: undo.c 19322 2016-11-28 11:16:41Z yeti-dn $
* Copyright (C) 2003-2006,2014 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -1146,6 +1146,9 @@ gwy_undo_get_enabled(void)
void
gwy_undo_set_enabled(gboolean setting)
{
+ if (undo_disabled == !setting)
+ return;
+
undo_disabled = !setting;
/* Remove all data when disabling */
if (undo_disabled) {
diff --git a/app/validate.c b/app/validate.c
index 1ca809a..b6d3195 100644
--- a/app/validate.c
+++ b/app/validate.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: validate.c 19043 2016-10-08 18:58:43Z yeti-dn $
+ * @(#) $Id: validate.c 19303 2016-11-21 09:52:59Z yeti-dn $
* Copyright (C) 2007-2016 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -694,6 +694,48 @@ gwy_data_error_desrcibe(GwyDataError error)
return errors[error];
}
+static void
+enforce_one_graph_order(G_GNUC_UNUSED gpointer hash_key,
+ gpointer hash_value,
+ gpointer user_data)
+{
+ GValue *gvalue = (GValue*)hash_value;
+ guint *nfailures = (guint*)user_data;
+ GObject *object;
+ GwyGraphModel *gmodel;
+ GwyGraphCurveModel *gcmodel;
+ gboolean failed = FALSE;
+ guint n, i;
+
+ if (!G_VALUE_HOLDS(gvalue, G_TYPE_OBJECT))
+ return;
+
+ object = g_value_get_object(gvalue);
+ if (!GWY_IS_GRAPH_MODEL(object))
+ return;
+
+ gmodel = (GwyGraphModel*)object;
+ n = gwy_graph_model_get_n_curves(gmodel);
+ for (i = 0; i < n; i++) {
+ gcmodel = gwy_graph_model_get_curve(gmodel, i);
+ if (!gwy_graph_curve_model_is_ordered(gcmodel)) {
+ gwy_graph_curve_model_enforce_order(gcmodel);
+ failed = TRUE;
+ }
+ }
+ if (failed)
+ (*nfailures)++;
+}
+
+/* XXX: Can we get this to public validate API? And should we? */
+guint
+_gwy_app_enforce_graph_abscissae_order(GwyContainer *data)
+{
+ guint nfailures = 0;
+ gwy_container_foreach(data, NULL, enforce_one_graph_order, &nfailures);
+ return nfailures;
+}
+
/************************** Documentation ****************************/
/**
diff --git a/app/wait.c b/app/wait.c
index 8cf331f..62689e2 100644
--- a/app/wait.c
+++ b/app/wait.c
@@ -1,6 +1,6 @@
/*
- * @(#) $Id: wait.c 18678 2016-05-04 11:30:23Z yeti-dn $
- * Copyright (C) 2004 David Necas (Yeti), Petr Klapetek.
+ * @(#) $Id: wait.c 19935 2017-06-19 08:39:44Z yeti-dn $
+ * Copyright (C) 2004-2017 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
* This program is free software; you can redistribute it and/or modify
@@ -28,6 +28,8 @@ static void gwy_app_wait_create_dialog (GtkWindow *window,
const gchar *message);
static void gwy_app_wait_cancelled (void);
+static gboolean wait_enabled = TRUE;
+
static GtkWidget *dialog = NULL;
static GtkWidget *progress = NULL;
static GtkWidget *label = NULL;
@@ -53,6 +55,9 @@ void
gwy_app_wait_start(GtkWindow *window,
const gchar *message)
{
+ if (!wait_enabled)
+ return;
+
if (window && !GTK_IS_WINDOW(window))
g_warning("Widget is not a window");
@@ -84,6 +89,9 @@ gwy_app_wait_start(GtkWindow *window,
void
gwy_app_wait_finish(void)
{
+ if (!wait_enabled)
+ return;
+
if (cancelled) {
cancelled = FALSE;
return;
@@ -153,6 +161,9 @@ gwy_app_wait_create_dialog(GtkWindow *window,
gboolean
gwy_app_wait_set_message(const gchar *message)
{
+ if (!wait_enabled)
+ return TRUE;
+
g_return_val_if_fail(dialog, FALSE);
while (gtk_events_pending())
@@ -193,6 +204,9 @@ gwy_app_wait_set_message(const gchar *message)
gboolean
gwy_app_wait_set_message_prefix(const gchar *prefix)
{
+ if (!wait_enabled)
+ return TRUE;
+
g_return_val_if_fail(dialog, FALSE);
if (cancelled)
@@ -230,6 +244,9 @@ gwy_app_wait_set_fraction(gdouble fraction)
gchar buf[8];
gdouble t;
+ if (!wait_enabled)
+ return TRUE;
+
g_return_val_if_fail(dialog, FALSE);
t = g_timer_elapsed(timer, NULL);
@@ -282,6 +299,9 @@ gwy_app_wait_cursor_start(GtkWindow *window)
GdkWindow *wait_window;
GtkWidget *widget;
+ if (!window && !wait_enabled)
+ return;
+
g_return_if_fail(GTK_IS_WINDOW(window));
widget = GTK_WIDGET(window);
@@ -321,6 +341,9 @@ gwy_app_wait_cursor_finish(GtkWindow *window)
GdkWindow *wait_window;
GtkWidget *widget;
+ if (!window && !wait_enabled)
+ return;
+
g_return_if_fail(GTK_IS_WINDOW(window));
widget = GTK_WIDGET(window);
@@ -337,6 +360,74 @@ gwy_app_wait_cursor_finish(GtkWindow *window)
gtk_main_iteration_do(FALSE);
}
+/**
+ * gwy_app_wait_get_enabled:
+ *
+ * Reports whether progress reporting is globally enabled.
+ *
+ * Returns: %TRUE if progress reporting is enabled, %FALSE if it is disabled.
+ *
+ * Since: 2.48
+ **/
+gboolean
+gwy_app_wait_get_enabled(void)
+{
+ return wait_enabled;
+}
+
+/**
+ * gwy_app_wait_set_enabled:
+ * @setting: %TRUE to enable progress reporting, %FALSE to disable it.
+ *
+ * Globally enables or disables progress reporting.
+ *
+ * This function may not be used when a waiting dialog is currently being
+ * shown.
+ *
+ * By default, progress reporting is enabled. Non-GUI applications that run
+ * module functions may wish to disable it to avoid GTK+ calls or just showing
+ * the progress dialogs.
+ *
+ * If progress reporting is disabled then functions such as
+ * gwy_app_wait_set_message() and gwy_app_wait_set_fraction() become no-op and
+ * always return %TRUE as nothing can be cancelled by the user. Functions
+ * gwy_app_wait_cursor_start() and gwy_app_wait_cursor_finish() still work but
+ * may be called with %NULL arguments.
+ *
+ * Since: 2.48
+ **/
+void
+gwy_app_wait_set_enabled(gboolean setting)
+{
+ if (!wait_enabled == !setting)
+ return;
+
+ g_return_if_fail(dialog);
+ g_return_if_fail(cancelled);
+ wait_enabled = !!setting;
+}
+
+/**
+ * gwy_app_wait_was_canceled:
+ *
+ * Checks if a progress dialog was cancelled.
+ *
+ * Calling this function is only meaningful between gwy_app_wait_cursor_start()
+ * and gwy_app_wait_finish(). It returns %TRUE if the computation was
+ * cancelled by the user. This may be occasionaly useful in complex
+ * multi-level calculations. Usually, the return values of
+ * gwy_app_wait_set_fraction() and gwy_app_wait_set_message() are sufficient.
+ *
+ * Returns: %TRUE if the currently running calculation was cancelled.
+ *
+ * Since: 2.49
+ **/
+gboolean
+gwy_app_wait_was_canceled(void)
+{
+ return cancelled;
+}
+
/************************** Documentation ****************************/
/**
diff --git a/app/wait.h b/app/wait.h
index 01260f4..f82f34f 100644
--- a/app/wait.h
+++ b/app/wait.h
@@ -1,6 +1,6 @@
/*
- * @(#) $Id: wait.h 15598 2013-11-11 12:33:32Z yeti-dn $
- * Copyright (C) 2004 David Necas (Yeti), Petr Klapetek.
+ * @(#) $Id: wait.h 19935 2017-06-19 08:39:44Z yeti-dn $
+ * Copyright (C) 2004-2017 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
* This program is free software; you can redistribute it and/or modify
@@ -26,15 +26,17 @@
G_BEGIN_DECLS
-void gwy_app_wait_start (GtkWindow *window,
- const gchar *message);
-void gwy_app_wait_finish (void);
-gboolean gwy_app_wait_set_fraction (gdouble fraction);
-gboolean gwy_app_wait_set_message (const gchar *message);
-gboolean gwy_app_wait_set_message_prefix (const gchar *prefix);
-
-void gwy_app_wait_cursor_start (GtkWindow *window);
-void gwy_app_wait_cursor_finish (GtkWindow *window);
+void gwy_app_wait_start (GtkWindow *window,
+ const gchar *message);
+void gwy_app_wait_finish (void);
+gboolean gwy_app_wait_set_fraction (gdouble fraction);
+gboolean gwy_app_wait_set_message (const gchar *message);
+gboolean gwy_app_wait_set_message_prefix(const gchar *prefix);
+void gwy_app_wait_cursor_start (GtkWindow *window);
+void gwy_app_wait_cursor_finish (GtkWindow *window);
+gboolean gwy_app_wait_get_enabled (void);
+void gwy_app_wait_set_enabled (gboolean setting);
+gboolean gwy_app_wait_was_canceled (void);
G_END_DECLS
diff --git a/config.guess b/config.guess
index dbfb978..2e9ad7f 100755
--- a/config.guess
+++ b/config.guess
@@ -1,8 +1,8 @@
#! /bin/sh
# Attempt to guess a canonical system name.
-# Copyright 1992-2015 Free Software Foundation, Inc.
+# Copyright 1992-2016 Free Software Foundation, Inc.
-timestamp='2015-01-01'
+timestamp='2016-10-02'
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
@@ -27,7 +27,7 @@ timestamp='2015-01-01'
# Originally written by Per Bothner; maintained since 2000 by Ben Elliston.
#
# You can get the latest version of this script from:
-# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
#
# Please send patches to <config-patches at gnu.org>.
@@ -50,7 +50,7 @@ version="\
GNU config.guess ($timestamp)
Originally written by Per Bothner.
-Copyright 1992-2015 Free Software Foundation, Inc.
+Copyright 1992-2016 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -168,19 +168,29 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
# Note: NetBSD doesn't particularly care about the vendor
# portion of the name. We always set it to "unknown".
sysctl="sysctl -n hw.machine_arch"
- UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
- /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
+ UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \
+ /sbin/$sysctl 2>/dev/null || \
+ /usr/sbin/$sysctl 2>/dev/null || \
+ echo unknown)`
case "${UNAME_MACHINE_ARCH}" in
armeb) machine=armeb-unknown ;;
arm*) machine=arm-unknown ;;
sh3el) machine=shl-unknown ;;
sh3eb) machine=sh-unknown ;;
sh5el) machine=sh5le-unknown ;;
+ earmv*)
+ arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'`
+ endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'`
+ machine=${arch}${endian}-unknown
+ ;;
*) machine=${UNAME_MACHINE_ARCH}-unknown ;;
esac
# The Operating System including object format, if it has switched
- # to ELF recently, or will in the future.
+ # to ELF recently (or will in the future) and ABI.
case "${UNAME_MACHINE_ARCH}" in
+ earm*)
+ os=netbsdelf
+ ;;
arm*|i386|m68k|ns32k|sh3*|sparc|vax)
eval $set_cc_for_build
if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
@@ -197,6 +207,13 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
os=netbsd
;;
esac
+ # Determine ABI tags.
+ case "${UNAME_MACHINE_ARCH}" in
+ earm*)
+ expr='s/^earmv[0-9]/-eabi/;s/eb$//'
+ abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"`
+ ;;
+ esac
# The OS release
# Debian GNU/NetBSD machines have a different userland, and
# thus, need a distinct triplet. However, they do not need
@@ -207,13 +224,13 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
release='-gnu'
;;
*)
- release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+ release=`echo ${UNAME_RELEASE} | sed -e 's/[-_].*//' | cut -d. -f1,2`
;;
esac
# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
# contains redundant information, the shorter form:
# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
- echo "${machine}-${os}${release}"
+ echo "${machine}-${os}${release}${abi}"
exit ;;
*:Bitrig:*:*)
UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
@@ -223,6 +240,10 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
exit ;;
+ *:LibertyBSD:*:*)
+ UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'`
+ echo ${UNAME_MACHINE_ARCH}-unknown-libertybsd${UNAME_RELEASE}
+ exit ;;
*:ekkoBSD:*:*)
echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
exit ;;
@@ -235,6 +256,9 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
*:MirBSD:*:*)
echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
exit ;;
+ *:Sortix:*:*)
+ echo ${UNAME_MACHINE}-unknown-sortix
+ exit ;;
alpha:OSF1:*:*)
case $UNAME_RELEASE in
*4.0)
@@ -251,42 +275,42 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1`
case "$ALPHA_CPU_TYPE" in
"EV4 (21064)")
- UNAME_MACHINE="alpha" ;;
+ UNAME_MACHINE=alpha ;;
"EV4.5 (21064)")
- UNAME_MACHINE="alpha" ;;
+ UNAME_MACHINE=alpha ;;
"LCA4 (21066/21068)")
- UNAME_MACHINE="alpha" ;;
+ UNAME_MACHINE=alpha ;;
"EV5 (21164)")
- UNAME_MACHINE="alphaev5" ;;
+ UNAME_MACHINE=alphaev5 ;;
"EV5.6 (21164A)")
- UNAME_MACHINE="alphaev56" ;;
+ UNAME_MACHINE=alphaev56 ;;
"EV5.6 (21164PC)")
- UNAME_MACHINE="alphapca56" ;;
+ UNAME_MACHINE=alphapca56 ;;
"EV5.7 (21164PC)")
- UNAME_MACHINE="alphapca57" ;;
+ UNAME_MACHINE=alphapca57 ;;
"EV6 (21264)")
- UNAME_MACHINE="alphaev6" ;;
+ UNAME_MACHINE=alphaev6 ;;
"EV6.7 (21264A)")
- UNAME_MACHINE="alphaev67" ;;
+ UNAME_MACHINE=alphaev67 ;;
"EV6.8CB (21264C)")
- UNAME_MACHINE="alphaev68" ;;
+ UNAME_MACHINE=alphaev68 ;;
"EV6.8AL (21264B)")
- UNAME_MACHINE="alphaev68" ;;
+ UNAME_MACHINE=alphaev68 ;;
"EV6.8CX (21264D)")
- UNAME_MACHINE="alphaev68" ;;
+ UNAME_MACHINE=alphaev68 ;;
"EV6.9A (21264/EV69A)")
- UNAME_MACHINE="alphaev69" ;;
+ UNAME_MACHINE=alphaev69 ;;
"EV7 (21364)")
- UNAME_MACHINE="alphaev7" ;;
+ UNAME_MACHINE=alphaev7 ;;
"EV7.9 (21364A)")
- UNAME_MACHINE="alphaev79" ;;
+ UNAME_MACHINE=alphaev79 ;;
esac
# A Pn.n version is a patched version.
# A Vn.n version is a released version.
# A Tn.n version is a released field test version.
# A Xn.n version is an unreleased experimental baselevel.
# 1.2 uses "1.2" for uname -r.
- echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+ echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
# Reset EXIT trap before exiting to avoid spurious non-zero exit code.
exitcode=$?
trap '' 0
@@ -359,16 +383,16 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
exit ;;
i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
eval $set_cc_for_build
- SUN_ARCH="i386"
+ SUN_ARCH=i386
# If there is a compiler, see if it is configured for 64-bit objects.
# Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
# This test works for both compilers.
- if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+ if [ "$CC_FOR_BUILD" != no_compiler_found ]; then
if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
- (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
grep IS_64BIT_ARCH >/dev/null
then
- SUN_ARCH="x86_64"
+ SUN_ARCH=x86_64
fi
fi
echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
@@ -393,7 +417,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
exit ;;
sun*:*:4.2BSD:*)
UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
- test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
+ test "x${UNAME_RELEASE}" = x && UNAME_RELEASE=3
case "`/bin/arch`" in
sun3)
echo m68k-sun-sunos${UNAME_RELEASE}
@@ -618,13 +642,13 @@ EOF
sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
case "${sc_cpu_version}" in
- 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
- 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+ 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0
+ 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1
532) # CPU_PA_RISC2_0
case "${sc_kernel_bits}" in
- 32) HP_ARCH="hppa2.0n" ;;
- 64) HP_ARCH="hppa2.0w" ;;
- '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20
+ 32) HP_ARCH=hppa2.0n ;;
+ 64) HP_ARCH=hppa2.0w ;;
+ '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20
esac ;;
esac
fi
@@ -663,11 +687,11 @@ EOF
exit (0);
}
EOF
- (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
+ (CCOPTS="" $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
test -z "$HP_ARCH" && HP_ARCH=hppa
fi ;;
esac
- if [ ${HP_ARCH} = "hppa2.0w" ]
+ if [ ${HP_ARCH} = hppa2.0w ]
then
eval $set_cc_for_build
@@ -680,12 +704,12 @@ EOF
# $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
# => hppa64-hp-hpux11.23
- if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
+ if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) |
grep -q __LP64__
then
- HP_ARCH="hppa2.0w"
+ HP_ARCH=hppa2.0w
else
- HP_ARCH="hppa64"
+ HP_ARCH=hppa64
fi
fi
echo ${HP_ARCH}-hp-hpux${HPUX_REV}
@@ -790,14 +814,14 @@ EOF
echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
exit ;;
F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
- FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
- FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+ FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
+ FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
exit ;;
5000:UNIX_System_V:4.*:*)
- FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
- FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+ FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
+ FUJITSU_REL=`echo ${UNAME_RELEASE} | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'`
echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
exit ;;
i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
@@ -879,7 +903,7 @@ EOF
exit ;;
*:GNU/*:*:*)
# other systems with GNU libc and userland
- echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC}
+ echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC}
exit ;;
i*86:Minix:*:*)
echo ${UNAME_MACHINE}-pc-minix
@@ -902,7 +926,7 @@ EOF
EV68*) UNAME_MACHINE=alphaev68 ;;
esac
objdump --private-headers /bin/sh | grep -q ld.so.1
- if test "$?" = 0 ; then LIBC="gnulibc1" ; fi
+ if test "$?" = 0 ; then LIBC=gnulibc1 ; fi
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
arc:Linux:*:* | arceb:Linux:*:*)
@@ -933,6 +957,9 @@ EOF
crisv32:Linux:*:*)
echo ${UNAME_MACHINE}-axis-linux-${LIBC}
exit ;;
+ e2k:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
frv:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
@@ -945,6 +972,9 @@ EOF
ia64:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
+ k1om:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
m32r*:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
@@ -970,6 +1000,9 @@ EOF
eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; }
;;
+ mips64el:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
openrisc*:Linux:*:*)
echo or1k-unknown-linux-${LIBC}
exit ;;
@@ -1002,6 +1035,9 @@ EOF
ppcle:Linux:*:*)
echo powerpcle-unknown-linux-${LIBC}
exit ;;
+ riscv32:Linux:*:* | riscv64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
s390:Linux:*:* | s390x:Linux:*:*)
echo ${UNAME_MACHINE}-ibm-linux-${LIBC}
exit ;;
@@ -1021,7 +1057,7 @@ EOF
echo ${UNAME_MACHINE}-dec-linux-${LIBC}
exit ;;
x86_64:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ echo ${UNAME_MACHINE}-pc-linux-${LIBC}
exit ;;
xtensa*:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
@@ -1100,7 +1136,7 @@ EOF
# uname -m prints for DJGPP always 'pc', but it prints nothing about
# the processor, so we play safe by assuming i586.
# Note: whatever this is, it MUST be the same as what config.sub
- # prints for the "djgpp" host, or else GDB configury will decide that
+ # prints for the "djgpp" host, or else GDB configure will decide that
# this is a cross-build.
echo i586-pc-msdosdjgpp
exit ;;
@@ -1249,6 +1285,9 @@ EOF
SX-8R:SUPER-UX:*:*)
echo sx8r-nec-superux${UNAME_RELEASE}
exit ;;
+ SX-ACE:SUPER-UX:*:*)
+ echo sxace-nec-superux${UNAME_RELEASE}
+ exit ;;
Power*:Rhapsody:*:*)
echo powerpc-apple-rhapsody${UNAME_RELEASE}
exit ;;
@@ -1262,9 +1301,9 @@ EOF
UNAME_PROCESSOR=powerpc
fi
if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then
- if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+ if [ "$CC_FOR_BUILD" != no_compiler_found ]; then
if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
- (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
grep IS_64BIT_ARCH >/dev/null
then
case $UNAME_PROCESSOR in
@@ -1286,7 +1325,7 @@ EOF
exit ;;
*:procnto*:*:* | *:QNX:[0123456789]*:*)
UNAME_PROCESSOR=`uname -p`
- if test "$UNAME_PROCESSOR" = "x86"; then
+ if test "$UNAME_PROCESSOR" = x86; then
UNAME_PROCESSOR=i386
UNAME_MACHINE=pc
fi
@@ -1317,7 +1356,7 @@ EOF
# "uname -m" is not consistent, so use $cputype instead. 386
# is converted to i386 for consistency with other x86
# operating systems.
- if test "$cputype" = "386"; then
+ if test "$cputype" = 386; then
UNAME_MACHINE=i386
else
UNAME_MACHINE="$cputype"
@@ -1359,7 +1398,7 @@ EOF
echo i386-pc-xenix
exit ;;
i*86:skyos:*:*)
- echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
+ echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE} | sed -e 's/ .*$//'`
exit ;;
i*86:rdos:*:*)
echo ${UNAME_MACHINE}-pc-rdos
@@ -1370,23 +1409,25 @@ EOF
x86_64:VMkernel:*:*)
echo ${UNAME_MACHINE}-unknown-esx
exit ;;
+ amd64:Isilon\ OneFS:*:*)
+ echo x86_64-unknown-onefs
+ exit ;;
esac
cat >&2 <<EOF
$0: unable to guess system type
-This script, last modified $timestamp, has failed to recognize
-the operating system you are using. It is advised that you
-download the most up to date version of the config scripts from
+This script (version $timestamp), has failed to recognize the
+operating system you are using. If your script is old, overwrite
+config.guess and config.sub with the latest versions from:
- http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+ http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
and
- http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+ http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
-If the version you run ($0) is already up to date, please
-send the following data and any information you think might be
-pertinent to <config-patches at gnu.org> in order to provide the needed
-information to handle your system.
+If $0 has already been updated, send the following data and any
+information you think might be pertinent to config-patches at gnu.org to
+provide the necessary information to handle your system.
config.guess timestamp = $timestamp
diff --git a/config.h.in b/config.h.in
index 881216a..a0d9189 100644
--- a/config.h.in
+++ b/config.h.in
@@ -31,9 +31,6 @@
/* Define if we have the OpenEXR package. */
#undef HAVE_EXR
-/* Define if we have the FFTW3 package. */
-#undef HAVE_FFTW3
-
/* Define if the GNU gettext() function is already present or preinstalled. */
#undef HAVE_GETTEXT
diff --git a/config.sub b/config.sub
index 6467c95..7b334f9 100755
--- a/config.sub
+++ b/config.sub
@@ -1,8 +1,8 @@
#! /bin/sh
# Configuration validation subroutine script.
-# Copyright 1992-2015 Free Software Foundation, Inc.
+# Copyright 1992-2016 Free Software Foundation, Inc.
-timestamp='2015-01-01'
+timestamp='2016-09-05'
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
@@ -33,7 +33,7 @@ timestamp='2015-01-01'
# Otherwise, we print the canonical config type on stdout and succeed.
# You can get the latest version of this script from:
-# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
# This file is supposed to be the same for all GNU packages
# and recognize all the CPU types, system types and aliases
@@ -53,8 +53,7 @@ timestamp='2015-01-01'
me=`echo "$0" | sed -e 's,.*/,,'`
usage="\
-Usage: $0 [OPTION] CPU-MFR-OPSYS
- $0 [OPTION] ALIAS
+Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS
Canonicalize a configuration name.
@@ -68,7 +67,7 @@ Report bugs and patches to <config-patches at gnu.org>."
version="\
GNU config.sub ($timestamp)
-Copyright 1992-2015 Free Software Foundation, Inc.
+Copyright 1992-2016 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -117,8 +116,8 @@ maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
case $maybe_os in
nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
- knetbsd*-gnu* | netbsd*-gnu* | \
- kopensolaris*-gnu* | \
+ knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \
+ kopensolaris*-gnu* | cloudabi*-eabi* | \
storm-chaos* | os2-emx* | rtmk-nova*)
os=-$maybe_os
basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
@@ -255,11 +254,12 @@ case $basic_machine in
| arc | arceb \
| arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
| avr | avr32 \
+ | ba \
| be32 | be64 \
| bfin \
| c4x | c8051 | clipper \
| d10v | d30v | dlx | dsp16xx \
- | epiphany \
+ | e2k | epiphany \
| fido | fr30 | frv | ft32 \
| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
| hexagon \
@@ -305,7 +305,7 @@ case $basic_machine in
| riscv32 | riscv64 \
| rl78 | rx \
| score \
- | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
+ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
| sh64 | sh64le \
| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
| sparcv8 | sparcv9 | sparcv9b | sparcv9v \
@@ -376,12 +376,13 @@ case $basic_machine in
| alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \
| arm-* | armbe-* | armle-* | armeb-* | armv*-* \
| avr-* | avr32-* \
+ | ba-* \
| be32-* | be64-* \
| bfin-* | bs2000-* \
| c[123]* | c30-* | [cjt]90-* | c4x-* \
| c8051-* | clipper-* | craynv-* | cydra-* \
| d10v-* | d30v-* | dlx-* \
- | elxsi-* \
+ | e2k-* | elxsi-* \
| f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
| h8300-* | h8500-* \
| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
@@ -428,12 +429,13 @@ case $basic_machine in
| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
| pyramid-* \
+ | riscv32-* | riscv64-* \
| rl78-* | romp-* | rs6000-* | rx-* \
| sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
| sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
| sparclite-* \
- | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \
+ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \
| tahoe-* \
| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
| tile*-* \
@@ -518,6 +520,9 @@ case $basic_machine in
basic_machine=i386-pc
os=-aros
;;
+ asmjs)
+ basic_machine=asmjs-unknown
+ ;;
aux)
basic_machine=m68k-apple
os=-aux
@@ -638,6 +643,14 @@ case $basic_machine in
basic_machine=m68k-bull
os=-sysv3
;;
+ e500v[12])
+ basic_machine=powerpc-unknown
+ os=$os"spe"
+ ;;
+ e500v[12]-*)
+ basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+ os=$os"spe"
+ ;;
ebmon29k)
basic_machine=a29k-amd
os=-ebmon
@@ -1017,7 +1030,7 @@ case $basic_machine in
ppc-* | ppcbe-*)
basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
- ppcle | powerpclittle | ppc-le | powerpc-little)
+ ppcle | powerpclittle)
basic_machine=powerpcle-unknown
;;
ppcle-* | powerpclittle-*)
@@ -1027,7 +1040,7 @@ case $basic_machine in
;;
ppc64-* | ppc64p7-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
- ppc64le | powerpc64little | ppc64-le | powerpc64-little)
+ ppc64le | powerpc64little)
basic_machine=powerpc64le-unknown
;;
ppc64le-* | powerpc64little-*)
@@ -1373,18 +1386,18 @@ case $os in
| -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
| -sym* | -kopensolaris* | -plan9* \
| -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
- | -aos* | -aros* \
+ | -aos* | -aros* | -cloudabi* | -sortix* \
| -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
| -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
| -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
- | -bitrig* | -openbsd* | -solidbsd* \
+ | -bitrig* | -openbsd* | -solidbsd* | -libertybsd* \
| -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
| -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
| -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
| -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
| -chorusos* | -chorusrdb* | -cegcc* \
| -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
- | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
+ | -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
| -linux-newlib* | -linux-musl* | -linux-uclibc* \
| -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \
| -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
@@ -1393,7 +1406,8 @@ case $os in
| -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
| -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
| -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
- | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* | -tirtos*)
+ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \
+ | -onefs* | -tirtos* | -phoenix*)
# Remember, each alternative MUST END IN *, to match a version number.
;;
-qnx*)
@@ -1525,6 +1539,8 @@ case $os in
;;
-nacl*)
;;
+ -ios)
+ ;;
-none)
;;
*)
diff --git a/configure b/configure
index db84289..7ac219d 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for Gwyddion 2.47.
+# Generated by GNU Autoconf 2.69 for Gwyddion 2.49.
#
# Report bugs to <klapetek at gwyddion.net>.
#
@@ -650,8 +650,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='Gwyddion'
PACKAGE_TARNAME='gwyddion'
-PACKAGE_VERSION='2.47'
-PACKAGE_STRING='Gwyddion 2.47'
+PACKAGE_VERSION='2.49'
+PACKAGE_STRING='Gwyddion 2.49'
PACKAGE_BUGREPORT='klapetek at gwyddion.net'
PACKAGE_URL=''
@@ -773,9 +773,6 @@ GTKGLEXT_CFLAGS
GTKSOURCEVIEW_DEPENDENCY
GTKSOURCEVIEW_LIBS
GTKSOURCEVIEW_CFLAGS
-FFTW3_DEPENDENCY
-FFTW3_1_LIBS
-FFTW3_1_CFLAGS
FFTW3_LIBS
FFTW3_CFLAGS
GTK_LIBS
@@ -797,6 +794,7 @@ X_LIBS
X_PRE_LIBS
X_CFLAGS
XMKMF
+HDRIMAGE_EXTRA_CFLAGS
GTKDOC_EXTRA_CFLAGS
PYTHON_EXTRA_CFLAGS
HAVE_PASCAL_FALSE
@@ -816,13 +814,9 @@ ENABLE_PYGWY_TRUE
PYGTK_CODEGENDIR
PYGTK_LIBS
PYGTK_CFLAGS
+PYTHON_LDFLAGS
PYTHON_INCLUDES
-PYTHON_LIBS
-PYTHON_SYSCFG_LIBDIR
-PYTHON_SYSCFG_LINKFORSHARED
-PYTHON_SYSCFG_CCSHARED
-PYTHON_SYSCFG_LDFLAGS
-PYTHON_SYSCFG_BASECFLAGS
+PYTHON_CONFIG
HAVE_PYTHON_FALSE
HAVE_PYTHON_TRUE
pkgpyexecdir
@@ -834,6 +828,8 @@ PYTHON_EXEC_PREFIX
PYTHON_PREFIX
PYTHON_VERSION
PYTHON
+PNGCRUSH
+INKSCAPE
GCONF_SCHEMA_FILE_DIR
GCONF_SCHEMA_CONFIG_SOURCE
GCONFTOOL
@@ -843,6 +839,10 @@ DESKTOP_FILE_UPDATE_FALSE
DESKTOP_FILE_UPDATE_TRUE
UPDATE_MIME_DATABASE
UPDATE_DESKTOP_DATABASE
+GLIB_GENMARSHAL
+GLIB_MKENUMS
+MODULE_BUNDLING_FALSE
+MODULE_BUNDLING_TRUE
MODULE_DEPENDENCIES_FALSE
MODULE_DEPENDENCIES_TRUE
XDG_DATA_HOME_DIR
@@ -1008,6 +1008,7 @@ with_html_dir
enable_gtk_doc
enable_home_installation
enable_library_bloat
+enable_module_bundling
enable_desktop_file_update
with_gconf_source
with_gconf_schema_file_dir
@@ -1018,7 +1019,6 @@ with_perl
with_ruby
with_pascal
with_x
-with_fftw3
with_gtksourceview
with_gl
with_zlib
@@ -1065,8 +1065,6 @@ GTK_CFLAGS
GTK_LIBS
FFTW3_CFLAGS
FFTW3_LIBS
-FFTW3_1_CFLAGS
-FFTW3_1_LIBS
GTKSOURCEVIEW_CFLAGS
GTKSOURCEVIEW_LIBS
GTKGLEXT_CFLAGS
@@ -1628,7 +1626,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures Gwyddion 2.47 to adapt to many kinds of systems.
+\`configure' configures Gwyddion 2.49 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1702,7 +1700,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of Gwyddion 2.47:";;
+ short | recursive ) echo "Configuration of Gwyddion 2.49:";;
esac
cat <<\_ACEOF
@@ -1728,16 +1726,18 @@ Optional Features:
--enable-home-installation
Install desktop integration files into your home
--enable-library-bloat Make linking very slow
+ --enable-module-bundling
+ Bundling modules to one big shared library
+ [default=yes]
--enable-desktop-file-update
Update Freedesktop databases
- [default=][]
+ [default=yes]
--disable-schemas-install
Disable the schemas installation
--enable-pygwy Build Python wrapper to Gwyddion
--disable-nls do not use Native Language Support
--disable-rpath do not hardcode runtime library paths
- --enable-plugin-proxy Build plug-in proxy module
- [default=][]
+ --enable-plugin-proxy Build plug-in proxy module [default=yes]
Optional Packages:
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
@@ -1756,29 +1756,24 @@ Optional Packages:
--with-gconf-schema-file-dir=dir
Directory for installing schema files.
--with-python Install Python modules and plug-ins
- [default=][]
+ [default=yes]
--with-perl Install Perl modules and plug-ins
- [default=][]
+ [default=yes]
--with-ruby Install Ruby modules and plug-ins
- [default=][]
+ [default=yes]
--with-pascal Build sample Pascal plug-ins
- [default=][]
+ [default=yes]
--with-x use the X Window System
- --with-fftw3 FFTW3 library [default=][]
--with-gtksourceview Better Pygwy console user interface
- [default=][]
- --with-gl OpenGL 3D view widgets
- [default=][]
- --with-zlib build with zlib support
- [default=][]
- --with-bzip2 build with bzip2 support
- [default=][]
- --with-libxml2 build with libxml2 support
- [default=][]
+ [default=yes]
+ --with-gl OpenGL 3D view widgets [default=yes]
+ --with-zlib build with zlib support [default=yes]
+ --with-bzip2 build with bzip2 support [default=yes]
+ --with-libxml2 build with libxml2 support [default=yes]
--with-unique libunique remote control backend
- [default=][]
+ [default=yes]
--with-kde4-thumbnailer KDE4 thumbnail creator module
- [default=][no]
+ [default=no]
--with-gnu-ld assume the C compiler uses GNU ld [default=no]
--with-libiconv-prefix[=DIR] search for libiconv in DIR/include and DIR/lib
--without-libiconv-prefix don't search for libiconv in includedir and libdir
@@ -1828,10 +1823,6 @@ Some influential environment variables:
FFTW3_CFLAGS
C compiler flags for FFTW3, overriding pkg-config
FFTW3_LIBS linker flags for FFTW3, overriding pkg-config
- FFTW3_1_CFLAGS
- C compiler flags for FFTW3_1, overriding pkg-config
- FFTW3_1_LIBS
- linker flags for FFTW3_1, overriding pkg-config
GTKSOURCEVIEW_CFLAGS
C compiler flags for GTKSOURCEVIEW, overriding pkg-config
GTKSOURCEVIEW_LIBS
@@ -1930,7 +1921,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-Gwyddion configure 2.47
+Gwyddion configure 2.49
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2694,7 +2685,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by Gwyddion $as_me 2.47, which was
+It was created by Gwyddion $as_me 2.49, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -3050,7 +3041,7 @@ PACKAGE_URL="http://gwyddion.net/"
-ac_config_files="$ac_config_files Makefile m4/Makefile app/Makefile libdraw/Makefile libgwyddion/Makefile libgwyddion/gwyversion.h libgwydgets/Makefile libgwymodule/Makefile libprocess/Makefile modules/Makefile modules/file/Makefile modules/graph/Makefile modules/layer/Makefile modules/process/Makefile modules/pygwy/Makefile modules/tools/Makefile modules/volume/Makefile modules/xyz/Makefile plugins/Makefile plugins/file/Makefile plugins/process/Makefile pixmaps/Makefile po/Makefile.in p [...]
+ac_config_files="$ac_config_files Makefile m4/Makefile app/Makefile libdraw/Makefile libgwyddion/Makefile libgwyddion/gwyversion.h libgwydgets/Makefile libgwymodule/Makefile libprocess/Makefile modules/Makefile modules/file/Makefile modules/graph/Makefile modules/layer/Makefile modules/process/Makefile modules/pygwy/Makefile modules/tools/Makefile modules/volume/Makefile modules/xyz/Makefile plugins/Makefile plugins/file/Makefile plugins/process/Makefile pixmaps/Makefile pixmaps/src/Make [...]
ac_config_headers="$ac_config_headers config.h"
@@ -3641,7 +3632,7 @@ fi
# Define the identity of the package.
PACKAGE='gwyddion'
- VERSION='2.47'
+ VERSION='2.49'
cat >>confdefs.h <<_ACEOF
@@ -3798,8 +3789,8 @@ AM_BACKSLASH='\'
GWY_VERSION_MAJOR=2
-GWY_VERSION_MINOR=47
-GWY_VERSION_STRING='"2.47"'
+GWY_VERSION_MINOR=49
+GWY_VERSION_STRING='"2.49"'
@@ -17134,14 +17125,14 @@ fi
if test x$enable_gtk_doc = xyes; then
if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk-doc >= 1.10\""; } >&5
- ($PKG_CONFIG --exists --print-errors "gtk-doc >= 1.10") 2>&5
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk-doc >= 1.12\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "gtk-doc >= 1.12") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
:
else
- as_fn_error $? "You need to have gtk-doc >= 1.10 installed to build documentation" "$LINENO" 5
+ as_fn_error $? "You need to have gtk-doc >= 1.12 installed to build documentation" "$LINENO" 5
fi
fi
@@ -17185,11 +17176,7 @@ fi
#############################################################################
-# 64bit (for FFTW 3.0 warning)
-# Unfortunately, AC_CHECK_SIZEOF() is capable only of preprocessor symbol
-# production while we need to know the size now. We don't care much about
-# the exact model: if pointers are larger than 32bit it can possibly break,
-# and so we will warn.
+# 32bit/64bit
# The cast to long int works around a bug in the HP C Compiler
# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
@@ -17316,7 +17303,7 @@ fi
#############################################################################
-# Module symbol resolution.
+# Module symbol resolution and bundling.
# We try not to link modules with libraries and let symbols resolve through
# app, because it means faster app startup and much faster compilation. But
# on some systems that isn't possible.
@@ -17340,6 +17327,114 @@ else
fi
+
+# Check whether --enable-module-bundling was given.
+if test "${enable_module_bundling+set}" = set; then :
+ enableval=$enable_module_bundling; case "${enableval}" in
+ yes|no) enable_module_bundling="$enableval" ;;
+ *) as_fn_error $? "bad value ${enableval} for --enable-module-bundling" "$LINENO" 5 ;;
+ esac
+else
+ enable_module_bundling=yes
+fi
+
+
+ if test "x$enable_module_bundling" = xyes; then
+ MODULE_BUNDLING_TRUE=
+ MODULE_BUNDLING_FALSE='#'
+else
+ MODULE_BUNDLING_TRUE='#'
+ MODULE_BUNDLING_FALSE=
+fi
+
+
+#############################################################################
+# GLib tools
+for ac_prog in glib-mkenums
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_GLIB_MKENUMS+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$GLIB_MKENUMS"; then
+ ac_cv_prog_GLIB_MKENUMS="$GLIB_MKENUMS" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_GLIB_MKENUMS="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+GLIB_MKENUMS=$ac_cv_prog_GLIB_MKENUMS
+if test -n "$GLIB_MKENUMS"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GLIB_MKENUMS" >&5
+$as_echo "$GLIB_MKENUMS" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$GLIB_MKENUMS" && break
+done
+
+for ac_prog in glib-genmarshal
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_GLIB_GENMARSHAL+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$GLIB_GENMARSHAL"; then
+ ac_cv_prog_GLIB_GENMARSHAL="$GLIB_GENMARSHAL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_GLIB_GENMARSHAL="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+GLIB_GENMARSHAL=$ac_cv_prog_GLIB_GENMARSHAL
+if test -n "$GLIB_GENMARSHAL"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GLIB_GENMARSHAL" >&5
+$as_echo "$GLIB_GENMARSHAL" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$GLIB_GENMARSHAL" && break
+done
+
+
#############################################################################
# XDG stuff
for ac_prog in update-desktop-database
@@ -17560,7 +17655,98 @@ fi
fi
#############################################################################
+# Inkscape, for SVG -> PNG icon rendering
+for ac_prog in inkscape
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_INKSCAPE+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$INKSCAPE"; then
+ ac_cv_prog_INKSCAPE="$INKSCAPE" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_INKSCAPE="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+INKSCAPE=$ac_cv_prog_INKSCAPE
+if test -n "$INKSCAPE"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INKSCAPE" >&5
+$as_echo "$INKSCAPE" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$INKSCAPE" && break
+done
+test -n "$INKSCAPE" || INKSCAPE=":"
+
+for ac_prog in pngcrush
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_PNGCRUSH+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$PNGCRUSH"; then
+ ac_cv_prog_PNGCRUSH="$PNGCRUSH" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_PNGCRUSH="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+PNGCRUSH=$ac_cv_prog_PNGCRUSH
+if test -n "$PNGCRUSH"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PNGCRUSH" >&5
+$as_echo "$PNGCRUSH" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$PNGCRUSH" && break
+done
+test -n "$PNGCRUSH" || PNGCRUSH=":"
+
+
+#############################################################################
# Python
+# Must override the default interpreter list because otherwise it simply tries
+# to use the highest version, which can be python 3.x.
# Check whether --with-python was given.
@@ -17580,6 +17766,7 @@ fi
+
if test -n "$PYTHON"; then
# If the user set $PYTHON, use it and don't search something else.
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $PYTHON version is >= 2.4" >&5
@@ -17615,7 +17802,7 @@ if ${am_cv_pathless_PYTHON+:} false; then :
$as_echo_n "(cached) " >&6
else
- for am_cv_pathless_PYTHON in python python2 python3 python3.3 python3.2 python3.1 python3.0 python2.7 python2.6 python2.5 python2.4 python2.3 python2.2 python2.1 python2.0 none; do
+ for am_cv_pathless_PYTHON in python2 python2.7 python2.6 python2.5 python2.4 python none; do
test "$am_cv_pathless_PYTHON" = none && break
prog="import sys
# split strings by '.' and convert to numeric. Append some zeros
@@ -17895,294 +18082,347 @@ fi
if test "x$enable_pygwy" != xno; then
if test "$PYTHON" = : -o "x$enable_python" = no; then
enable_pygwy=no
- PYGWY_WARN=" (needs python)"
+ pygwy_warn=" (needs python)"
fi
fi
-if test "x$enable_pygwy" != xno; then
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for python build option BASECFLAGS" >&5
-$as_echo_n "checking for python build option BASECFLAGS... " >&6; }
-if test -n "$PYTHON_SYSCFG_BASECFLAGS"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON_SYSCFG_BASECFLAGS" >&5
-$as_echo "$PYTHON_SYSCFG_BASECFLAGS" >&6; }
- export PYTHON_SYSCFG_BASECFLAGS
-
+if test "x$os_mswin" != xyes; then
+ # This is hopefully enough on Unix.
+ if test "x$enable_pygwy" != xno; then
+ if test "x2.7 2.6 2.5 2.4" != x; then
+ for version in 2.7 2.6 2.5 2.4 ; do
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}python$version-config", so it can be a program name with args.
+set dummy ${ac_tool_prefix}python$version-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_PYTHON_CONFIG+:} false; then :
+ $as_echo_n "(cached) " >&6
else
-cat >conftest.py <<\_______EOF
-import sys, distutils.sysconfig
-x = sys.argv[1].strip()
-v = distutils.sysconfig.get_config_var(x)
-if not isinstance(v, str):
- sys.stderr.write('Value of %s is not a string' % x)
- sys.exit(1)
-print 'PYTHON_SYSCFG_%s="%s"' % (x, v)
-print 'ac_res="%s"' % v
-_______EOF
-
-if $PYTHON conftest.py BASECFLAGS >conftest.file 2>conftest.err && test ! -s conftest.err; then
- eval `cat conftest.file`
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
+ case $PYTHON_CONFIG in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_PYTHON_CONFIG="$PYTHON_CONFIG" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_PYTHON_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: unknown" >&5
-$as_echo "unknown" >&6; }
- cat conftest.err >&5
- echo "$as_me: failed program was:" >&5
- sed 's/^/| /' conftest.py >&5
- eval PYTHON_SYSCFG_BASECFLAGS=
- enable_pygwy=no
+ ;;
+esac
fi
-rm -f conftest.py conftest.err conftest.file
+PYTHON_CONFIG=$ac_cv_path_PYTHON_CONFIG
+if test -n "$PYTHON_CONFIG"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON_CONFIG" >&5
+$as_echo "$PYTHON_CONFIG" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for python build option LDFLAGS" >&5
-$as_echo_n "checking for python build option LDFLAGS... " >&6; }
-if test -n "$PYTHON_SYSCFG_LDFLAGS"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON_SYSCFG_LDFLAGS" >&5
-$as_echo "$PYTHON_SYSCFG_LDFLAGS" >&6; }
- export PYTHON_SYSCFG_LDFLAGS
-
+fi
+if test -z "$ac_cv_path_PYTHON_CONFIG"; then
+ ac_pt_PYTHON_CONFIG=$PYTHON_CONFIG
+ # Extract the first word of "python$version-config", so it can be a program name with args.
+set dummy python$version-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_ac_pt_PYTHON_CONFIG+:} false; then :
+ $as_echo_n "(cached) " >&6
else
-cat >conftest.py <<\_______EOF
-import sys, distutils.sysconfig
-x = sys.argv[1].strip()
-v = distutils.sysconfig.get_config_var(x)
-if not isinstance(v, str):
- sys.stderr.write('Value of %s is not a string' % x)
- sys.exit(1)
-print 'PYTHON_SYSCFG_%s="%s"' % (x, v)
-print 'ac_res="%s"' % v
-_______EOF
-
-if $PYTHON conftest.py LDFLAGS >conftest.file 2>conftest.err && test ! -s conftest.err; then
- eval `cat conftest.file`
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
+ case $ac_pt_PYTHON_CONFIG in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_ac_pt_PYTHON_CONFIG="$ac_pt_PYTHON_CONFIG" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_ac_pt_PYTHON_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: unknown" >&5
-$as_echo "unknown" >&6; }
- cat conftest.err >&5
- echo "$as_me: failed program was:" >&5
- sed 's/^/| /' conftest.py >&5
- eval PYTHON_SYSCFG_LDFLAGS=
- enable_pygwy=no
-fi
-rm -f conftest.py conftest.err conftest.file
+ ;;
+esac
fi
-
- if test "x$os_mswin" != xyes; then
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for python build option CCSHARED" >&5
-$as_echo_n "checking for python build option CCSHARED... " >&6; }
-if test -n "$PYTHON_SYSCFG_CCSHARED"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON_SYSCFG_CCSHARED" >&5
-$as_echo "$PYTHON_SYSCFG_CCSHARED" >&6; }
- export PYTHON_SYSCFG_CCSHARED
-
+ac_pt_PYTHON_CONFIG=$ac_cv_path_ac_pt_PYTHON_CONFIG
+if test -n "$ac_pt_PYTHON_CONFIG"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PYTHON_CONFIG" >&5
+$as_echo "$ac_pt_PYTHON_CONFIG" >&6; }
else
-cat >conftest.py <<\_______EOF
-import sys, distutils.sysconfig
-x = sys.argv[1].strip()
-v = distutils.sysconfig.get_config_var(x)
-if not isinstance(v, str):
- sys.stderr.write('Value of %s is not a string' % x)
- sys.exit(1)
-print 'PYTHON_SYSCFG_%s="%s"' % (x, v)
-print 'ac_res="%s"' % v
-_______EOF
-
-if $PYTHON conftest.py CCSHARED >conftest.file 2>conftest.err && test ! -s conftest.err; then
- eval `cat conftest.file`
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+ if test "x$ac_pt_PYTHON_CONFIG" = x; then
+ PYTHON_CONFIG=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ PYTHON_CONFIG=$ac_pt_PYTHON_CONFIG
+ fi
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: unknown" >&5
-$as_echo "unknown" >&6; }
- cat conftest.err >&5
- echo "$as_me: failed program was:" >&5
- sed 's/^/| /' conftest.py >&5
- eval PYTHON_SYSCFG_CCSHARED=
- enable_pygwy=no
+ PYTHON_CONFIG="$ac_cv_path_PYTHON_CONFIG"
fi
-rm -f conftest.py conftest.err conftest.file
-fi
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for python build option LINKFORSHARED" >&5
-$as_echo_n "checking for python build option LINKFORSHARED... " >&6; }
-if test -n "$PYTHON_SYSCFG_LINKFORSHARED"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON_SYSCFG_LINKFORSHARED" >&5
-$as_echo "$PYTHON_SYSCFG_LINKFORSHARED" >&6; }
- export PYTHON_SYSCFG_LINKFORSHARED
+ if test "x$PYTHON_CONFIG" != x; then
+ PYTHON_VERSION=$version
+ break
+ fi
+ done
else
-cat >conftest.py <<\_______EOF
-import sys, distutils.sysconfig
-x = sys.argv[1].strip()
-v = distutils.sysconfig.get_config_var(x)
-if not isinstance(v, str):
- sys.stderr.write('Value of %s is not a string' % x)
- sys.exit(1)
-print 'PYTHON_SYSCFG_%s="%s"' % (x, v)
-print 'ac_res="%s"' % v
-_______EOF
-
-if $PYTHON conftest.py LINKFORSHARED >conftest.file 2>conftest.err && test ! -s conftest.err; then
- eval `cat conftest.file`
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}python-config", so it can be a program name with args.
+set dummy ${ac_tool_prefix}python-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_PYTHON_CONFIG+:} false; then :
+ $as_echo_n "(cached) " >&6
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: unknown" >&5
-$as_echo "unknown" >&6; }
- cat conftest.err >&5
- echo "$as_me: failed program was:" >&5
- sed 's/^/| /' conftest.py >&5
- eval PYTHON_SYSCFG_LINKFORSHARED=
- enable_pygwy=no
+ case $PYTHON_CONFIG in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_PYTHON_CONFIG="$PYTHON_CONFIG" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_PYTHON_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
fi
-rm -f conftest.py conftest.err conftest.file
+PYTHON_CONFIG=$ac_cv_path_PYTHON_CONFIG
+if test -n "$PYTHON_CONFIG"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON_CONFIG" >&5
+$as_echo "$PYTHON_CONFIG" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for python build option LIBDIR" >&5
-$as_echo_n "checking for python build option LIBDIR... " >&6; }
-if test -n "$PYTHON_SYSCFG_LIBDIR"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON_SYSCFG_LIBDIR" >&5
-$as_echo "$PYTHON_SYSCFG_LIBDIR" >&6; }
- export PYTHON_SYSCFG_LIBDIR
-
+fi
+if test -z "$ac_cv_path_PYTHON_CONFIG"; then
+ ac_pt_PYTHON_CONFIG=$PYTHON_CONFIG
+ # Extract the first word of "python-config", so it can be a program name with args.
+set dummy python-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_ac_pt_PYTHON_CONFIG+:} false; then :
+ $as_echo_n "(cached) " >&6
else
-cat >conftest.py <<\_______EOF
-import sys, distutils.sysconfig
-x = sys.argv[1].strip()
-v = distutils.sysconfig.get_config_var(x)
-if not isinstance(v, str):
- sys.stderr.write('Value of %s is not a string' % x)
- sys.exit(1)
-print 'PYTHON_SYSCFG_%s="%s"' % (x, v)
-print 'ac_res="%s"' % v
-_______EOF
-
-if $PYTHON conftest.py LIBDIR >conftest.file 2>conftest.err && test ! -s conftest.err; then
- eval `cat conftest.file`
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
+ case $ac_pt_PYTHON_CONFIG in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_ac_pt_PYTHON_CONFIG="$ac_pt_PYTHON_CONFIG" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_ac_pt_PYTHON_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: unknown" >&5
-$as_echo "unknown" >&6; }
- cat conftest.err >&5
- echo "$as_me: failed program was:" >&5
- sed 's/^/| /' conftest.py >&5
- eval PYTHON_SYSCFG_LIBDIR=
- enable_pygwy=no
+ ;;
+esac
fi
-rm -f conftest.py conftest.err conftest.file
+ac_pt_PYTHON_CONFIG=$ac_cv_path_ac_pt_PYTHON_CONFIG
+if test -n "$ac_pt_PYTHON_CONFIG"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PYTHON_CONFIG" >&5
+$as_echo "$ac_pt_PYTHON_CONFIG" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
fi
- # Construct the option including -L, to avoid passing empty -L.
- PYTHON_LIBDIR_FLAG="-L$PYTHON_SYSCFG_LIBDIR"
+ if test "x$ac_pt_PYTHON_CONFIG" = x; then
+ PYTHON_CONFIG=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ PYTHON_CONFIG=$ac_pt_PYTHON_CONFIG
fi
- if test "x$enable_pygwy" = xno; then
- PYGWY_WARN=" (failed to obtain Python flags)"
+else
+ PYTHON_CONFIG="$ac_cv_path_PYTHON_CONFIG"
+fi
+
+ if test "x$PYTHON_CONFIG" != x; then
+ PYTHON_VERSION=$(python -c "import sys;print '.'.join(map(str, sys.version_info[:2]))")
fi
fi
-if test "x$enable_pygwy" != xno; then
- libpython=python$PYTHON_VERSION
- if test "x$os_mswin" = xyes; then
- libpython=`echo $libpython | sed 's%\\.%%'`
- fi
- LIBPYTHON_ORIG_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS $PYTHON_SYSCFG_CCSHARED"
- as_ac_Lib=`$as_echo "ac_cv_lib_$libpython''_PyRun_String" | $as_tr_sh`
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for PyRun_String in -l$libpython" >&5
-$as_echo_n "checking for PyRun_String in -l$libpython... " >&6; }
-if eval \${$as_ac_Lib+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-l$libpython "$PYTHON_LIBDIR_FLAG" $PYTHON_SYSCFG_LDFLAGS $PYTHON_SYSCFG_LINKFORSHARED $LIBS"
+if test "x$PYTHON_CONFIG" != x; then
+ PYTHON_INCLUDES="$("$PYTHON_CONFIG" --includes)"
+ PYTHON_LDFLAGS="$("$PYTHON_CONFIG" --ldflags)"
+ ac_save_CPPFLAGS="$CPPFLAGS"
+ac_save_LIBS="$LIBS"
+CPPFLAGS="$LIBS $PYTHON_INCLUDES"
+LIBS="$LIBS $PYTHON_LDFLAGS"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can link a test Python program" >&5
+$as_echo_n "checking if we can link a test Python program... " >&6; }
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char PyRun_String ();
+#include <Python.h>
int
main ()
{
-return PyRun_String ();
+Py_Initialize();
;
return 0;
}
+
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
- eval "$as_ac_Lib=yes"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
else
- eval "$as_ac_Lib=no"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+PYTHON_CONFIG=
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+CPPFLAGS="$ac_save_CPPFLAGS"
+LIBS="$ac_save_LIBS"
+
fi
-eval ac_res=\$$as_ac_Lib
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then :
- PYTHON_LIBS="$PYTHON_LIBDIR_FLAG -l$libpython"
+
+if test "x$PYTHON_CONFIG" != x; then
+
+ :
else
- enable_pygwy=no; PYGWY_WARN=" (needs lib$libpython)"
+ PYTHON_INCLUDES=
+ PYTHON_LDFLAGS=
+ enable_pygwy=no
+ pygwy_warn=" (no usable libpython)"
fi
- CFLAGS="$LIBPYTHON_ORIG_CFLAGS"
-fi
-if test "x$enable_pygwy" != xno; then
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for headers required to compile python extensions" >&5
-$as_echo_n "checking for headers required to compile python extensions... " >&6; }
-py_prefix=`$PYTHON -c "import sys; sys.stdout.write(sys.prefix.replace('\\\\\\\\','/'))"`
-py_exec_prefix=`$PYTHON -c "import sys; sys.stdout.write(sys.exec_prefix.replace('\\\\\\\\','/'))"`
-PYTHON_INCLUDES="-I${py_prefix}/include/python${PYTHON_VERSION}"
-if test "$py_prefix" != "$py_exec_prefix"; then
- PYTHON_INCLUDES="$PYTHON_INCLUDES -I${py_exec_prefix}/include/python${PYTHON_VERSION}"
-fi
-save_CPPFLAGS="$CPPFLAGS"
-CPPFLAGS="$CPPFLAGS $PYTHON_INCLUDES"
+ fi
+else
+ # There is no python-config in MS Windows. Rely on the user to provide
+ # PYTHON_INCLUDES and PYTHON_LDFLAGS. Normally "-I/some/dir/include" and
+ # "-L/some/dir/lib -lpython27" suffice.
+ if test "x$enable_pygwy" != xno; then
+ if test "x$PYTHON_INCLUDES" = x; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: please set PYTHON_INCLUDES; it is not going to work otherwise" >&5
+$as_echo "$as_me: please set PYTHON_INCLUDES; it is not going to work otherwise" >&6;}
+ fi
+ if test "x$PYTHON_LDFLAGS" = x; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: please set PYTHON_LDFLAGS; it is not going to work otherwise" >&5
+$as_echo "$as_me: please set PYTHON_LDFLAGS; it is not going to work otherwise" >&6;}
+ fi
+ ac_save_CPPFLAGS="$CPPFLAGS"
+ac_save_LIBS="$LIBS"
+CPPFLAGS="$LIBS $PYTHON_INCLUDES"
+LIBS="$LIBS $PYTHON_LDFLAGS"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can link a test Python program" >&5
+$as_echo_n "checking if we can link a test Python program... " >&6; }
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
+
#include <Python.h>
+int
+main ()
+{
+Py_Initialize();
+ ;
+ return 0;
+}
+
_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: found" >&5
-$as_echo "found" >&6; }
+if ac_fn_c_try_link "$LINENO"; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5
-$as_echo "not found" >&6; }
-enable_pygwy=no; PYGWY_WARN=" (needs Python headers)"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+enable_pygwy=no
+ pygwy_warn=" (cannot link with libpython)"
fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-CPPFLAGS="$save_CPPFLAGS"
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+CPPFLAGS="$ac_save_CPPFLAGS"
+LIBS="$ac_save_LIBS"
+
+ fi
fi
if test "x$enable_pygwy" != xno; then
@@ -18247,9 +18487,9 @@ fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
- enable_pygwy=no; PYGWY_WARN=" (needs pygtk2)"
+ enable_pygwy=no; pygwy_warn=" (needs pygtk2)"
elif test $pkg_failed = untried; then
- enable_pygwy=no; PYGWY_WARN=" (needs pygtk2)"
+ enable_pygwy=no; pygwy_warn=" (needs pygtk2)"
else
PYGTK_CFLAGS=$pkg_cv_PYGTK_CFLAGS
PYGTK_LIBS=$pkg_cv_PYGTK_LIBS
@@ -18258,6 +18498,7 @@ $as_echo "yes" >&6; }
:
fi
+
if test "x$PYGTK_CODEGENDIR" = 'x'; then
PYGTK_CODEGENDIR=`$PKG_CONFIG --variable=codegendir pygtk-2.0`
fi
@@ -18932,6 +19173,82 @@ else
fi
+ # Fallthrough is usually *the* reason for choosing case statements over ifs.
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC knows -Wno-implicit-fallthrough" >&5
+$as_echo_n "checking whether $CC knows -Wno-implicit-fallthrough... " >&6; }
+if ${ac_cv_prog_cc_option_WNO_IMPLICIT_FALLTHROUGH+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ye_PROG_CC_OPTION_cflags="$CFLAGS"
+ CFLAGS="$CFLAGS -Wno-implicit-fallthrough"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_option_WNO_IMPLICIT_FALLTHROUGH=yes
+else
+ ac_cv_prog_cc_option_WNO_IMPLICIT_FALLTHROUGH=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ CFLAGS="$ye_PROG_CC_OPTION_cflags"
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_option_WNO_IMPLICIT_FALLTHROUGH" >&5
+$as_echo "$ac_cv_prog_cc_option_WNO_IMPLICIT_FALLTHROUGH" >&6; }
+if test "$ac_cv_prog_cc_option_WNO_IMPLICIT_FALLTHROUGH" = "yes"; then
+ PROG_CC_WNO_IMPLICIT_FALLTHROUGH="-Wno-implicit-fallthrough"
+
+else
+ PROG_CC_WNO_IMPLICIT_FALLTHROUGH=
+
+fi
+
+ # For OpenEXR until they somehow get rid of dynamic exception specification.
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC knows -Wno-deprecated" >&5
+$as_echo_n "checking whether $CC knows -Wno-deprecated... " >&6; }
+if ${ac_cv_prog_cc_option_WNO_DEPRECATED+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ye_PROG_CC_OPTION_cflags="$CFLAGS"
+ CFLAGS="$CFLAGS -Wno-deprecated"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_option_WNO_DEPRECATED=yes
+else
+ ac_cv_prog_cc_option_WNO_DEPRECATED=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ CFLAGS="$ye_PROG_CC_OPTION_cflags"
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_option_WNO_DEPRECATED" >&5
+$as_echo "$ac_cv_prog_cc_option_WNO_DEPRECATED" >&6; }
+if test "$ac_cv_prog_cc_option_WNO_DEPRECATED" = "yes"; then
+ PROG_CC_WNO_DEPRECATED="-Wno-deprecated"
+
+else
+ PROG_CC_WNO_DEPRECATED=
+
+fi
+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC knows -fno-trapping-math" >&5
$as_echo_n "checking whether $CC knows -fno-trapping-math... " >&6; }
@@ -19086,14 +19403,16 @@ fi
# -Wstrict-protoypes makes gtkitemfactory.h noisy, but they have a
# comment there they can't fix it due to compatibility
# -Wwrite-strings because it makes all struct initializations very noisy
- WARNING_CFLAGS="-Wall -W -Wshadow -Wpointer-arith -Wno-sign-compare -Wundef $PROG_CC_ERR_IFD $PROG_CC_ERR_RET $PROG_CC_WNO_SYS_HEADERS $PROG_CC_WNO_POINTER_SIGN $PROG_CC_WNO_EMPTY_FMT $PROG_CC_WMIXED_DECL $PROG_CC_WREDUNDANT_DECLS"
+ WARNING_CFLAGS="-Wall -W -Wshadow -Wpointer-arith -Wno-sign-compare -Wundef $PROG_CC_ERR_IFD $PROG_CC_ERR_RET $PROG_CC_WNO_SYS_HEADERS $PROG_CC_WNO_POINTER_SIGN $PROG_CC_WNO_EMPTY_FMT $PROG_CC_WMIXED_DECL $PROG_CC_WREDUNDANT_DECLS $PROG_CC_WNO_IMPLICIT_FALLTHROUGH"
PYTHON_EXTRA_CFLAGS="$PROG_CC_WNO_UNUSED_PAR $PROG_CC_FNO_STRICT_ALIASING $PROG_CC_WNO_MISSING_FIELD_INITIALIZERS"
GTKDOC_EXTRA_CFLAGS="$PROG_CC_WNO_UNUSED_PAR"
+ HDRIMAGE_EXTRA_CFLAGS="$PROG_CC_WNO_DEPRECATED"
PREMISE_CFLAGS="$PROG_CC_FNO_TRAP_MATH $PROG_CC_FNO_MATH_ERRNO $FEXCESS_PRECISION_FAST"
fi
+
#############################################################################
# Base libraries: X, Gtk+.
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for X" >&5
@@ -20537,22 +20856,7 @@ fi
#############################################################################
# FFTW3
-# Optional.
-FFTW_WARN=
-
-
-# Check whether --with-fftw3 was given.
-if test "${with_fftw3+set}" = set; then :
- withval=$with_fftw3; case "${withval}" in
- yes|no) enable_fftw3="$withval" ;;
- *) as_fn_error $? "bad value ${withval} for --with-fftw3" "$LINENO" 5 ;;
- esac
-else
- enable_fftw3=yes
-fi
-
-
-if test "x$enable_fftw3" != "xno"; then
+# Required.
pkg_failed=no
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for FFTW3" >&5
@@ -20563,12 +20867,12 @@ if test -n "$PKG_CONFIG"; then
pkg_cv_FFTW3_CFLAGS="$FFTW3_CFLAGS"
else
if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"fftw3\""; } >&5
- ($PKG_CONFIG --exists --print-errors "fftw3") 2>&5
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"fftw3 >= 3.1\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "fftw3 >= 3.1") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- pkg_cv_FFTW3_CFLAGS=`$PKG_CONFIG --cflags "fftw3" 2>/dev/null`
+ pkg_cv_FFTW3_CFLAGS=`$PKG_CONFIG --cflags "fftw3 >= 3.1" 2>/dev/null`
else
pkg_failed=yes
fi
@@ -20581,12 +20885,12 @@ if test -n "$PKG_CONFIG"; then
pkg_cv_FFTW3_LIBS="$FFTW3_LIBS"
else
if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"fftw3\""; } >&5
- ($PKG_CONFIG --exists --print-errors "fftw3") 2>&5
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"fftw3 >= 3.1\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "fftw3 >= 3.1") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- pkg_cv_FFTW3_LIBS=`$PKG_CONFIG --libs "fftw3" 2>/dev/null`
+ pkg_cv_FFTW3_LIBS=`$PKG_CONFIG --libs "fftw3 >= 3.1" 2>/dev/null`
else
pkg_failed=yes
fi
@@ -20605,124 +20909,44 @@ else
_pkg_short_errors_supported=no
fi
if test $_pkg_short_errors_supported = yes; then
- FFTW3_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "fftw3"`
+ FFTW3_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "fftw3 >= 3.1"`
else
- FFTW3_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "fftw3"`
+ FFTW3_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "fftw3 >= 3.1"`
fi
# Put the nasty error message in config.log where it belongs
echo "$FFTW3_PKG_ERRORS" >&5
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- enable_fftw3=no; FFTW_WARN=" (needs FFTW3)"
-elif test $pkg_failed = untried; then
- enable_fftw3=no; FFTW_WARN=" (needs FFTW3)"
-else
- FFTW3_CFLAGS=$pkg_cv_FFTW3_CFLAGS
- FFTW3_LIBS=$pkg_cv_FFTW3_LIBS
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-
-$as_echo "#define HAVE_FFTW3 1" >>confdefs.h
-
-fi
-fi
-if test "x$enable_fftw3" != "xno"; then
- if test "x$arch_32bit" != "xyes"; then
-
-pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for FFTW3_1" >&5
-$as_echo_n "checking for FFTW3_1... " >&6; }
+ as_fn_error $? "Package requirements (fftw3 >= 3.1) were not met:
-if test -n "$PKG_CONFIG"; then
- if test -n "$FFTW3_1_CFLAGS"; then
- pkg_cv_FFTW3_1_CFLAGS="$FFTW3_1_CFLAGS"
- else
- if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"fftw3 >= 3.1\""; } >&5
- ($PKG_CONFIG --exists --print-errors "fftw3 >= 3.1") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then
- pkg_cv_FFTW3_1_CFLAGS=`$PKG_CONFIG --cflags "fftw3 >= 3.1" 2>/dev/null`
-else
- pkg_failed=yes
-fi
- fi
-else
- pkg_failed=untried
-fi
-if test -n "$PKG_CONFIG"; then
- if test -n "$FFTW3_1_LIBS"; then
- pkg_cv_FFTW3_1_LIBS="$FFTW3_1_LIBS"
- else
- if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"fftw3 >= 3.1\""; } >&5
- ($PKG_CONFIG --exists --print-errors "fftw3 >= 3.1") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then
- pkg_cv_FFTW3_1_LIBS=`$PKG_CONFIG --libs "fftw3 >= 3.1" 2>/dev/null`
-else
- pkg_failed=yes
-fi
- fi
-else
- pkg_failed=untried
-fi
+$FFTW3_PKG_ERRORS
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+Alternatively, you may set the environment variables FFTW3_CFLAGS
+and FFTW3_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+" "$LINENO" 5
+elif test $pkg_failed = untried; then
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
-if test $pkg_failed = yes; then
+Alternatively, you may set the environment variables FFTW3_CFLAGS
+and FFTW3_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
-if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
- _pkg_short_errors_supported=yes
+To get pkg-config, see <http://www.freedesktop.org/software/pkgconfig>.
+See \`config.log' for more details" "$LINENO" 5; }
else
- _pkg_short_errors_supported=no
-fi
- if test $_pkg_short_errors_supported = yes; then
- FFTW3_1_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "fftw3 >= 3.1"`
- else
- FFTW3_1_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "fftw3 >= 3.1"`
- fi
- # Put the nasty error message in config.log where it belongs
- echo "$FFTW3_1_PKG_ERRORS" >&5
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: FFTW3 older than 3.1 may cause crashes on 64bit systems.
- Consider installation of FFTW3 at least 3.1. Alternatively you can
- disable FFTW3 with --without-fftw3." >&5
-$as_echo "$as_me: WARNING: FFTW3 older than 3.1 may cause crashes on 64bit systems.
- Consider installation of FFTW3 at least 3.1. Alternatively you can
- disable FFTW3 with --without-fftw3." >&2;}
- FFTW3_WARN=" (with warnings)"
-elif test $pkg_failed = untried; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: FFTW3 older than 3.1 may cause crashes on 64bit systems.
- Consider installation of FFTW3 at least 3.1. Alternatively you can
- disable FFTW3 with --without-fftw3." >&5
-$as_echo "$as_me: WARNING: FFTW3 older than 3.1 may cause crashes on 64bit systems.
- Consider installation of FFTW3 at least 3.1. Alternatively you can
- disable FFTW3 with --without-fftw3." >&2;}
- FFTW3_WARN=" (with warnings)"
-else
- FFTW3_1_CFLAGS=$pkg_cv_FFTW3_1_CFLAGS
- FFTW3_1_LIBS=$pkg_cv_FFTW3_1_LIBS
+ FFTW3_CFLAGS=$pkg_cv_FFTW3_CFLAGS
+ FFTW3_LIBS=$pkg_cv_FFTW3_LIBS
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
:
fi
- fi
- FFTW3_DEPENDENCY=fftw3
-else
- FFTW3_DEPENDENCY=
-fi
-
-
-if test x$enable_fftw3 != xyes; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: FFTW will become a required dependency in a future version." >&5
-$as_echo "$as_me: WARNING: FFTW will become a required dependency in a future version." >&2;}
-fi
#############################################################################
# GtkSourceView
@@ -20803,9 +21027,9 @@ fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
- enable_gtksourceview=no; GTKSOURCEVIEW_WARN=" (needs GtkSourceView)"
+ enable_gtksourceview=no
elif test $pkg_failed = untried; then
- enable_gtksourceview=no; GTKSOURCEVIEW_WARN=" (needs GtkSourceView)"
+ enable_gtksourceview=no
else
GTKSOURCEVIEW_CFLAGS=$pkg_cv_GTKSOURCEVIEW_CFLAGS
GTKSOURCEVIEW_LIBS=$pkg_cv_GTKSOURCEVIEW_LIBS
@@ -20944,7 +21168,7 @@ else
fi
-if test x$enable_zlib != xno && test -z "$ZLIB"; then
+if test "x$enable_zlib" != xno && test -z "$ZLIB"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inflate in -lz" >&5
$as_echo_n "checking for inflate in -lz... " >&6; }
if ${ac_cv_lib_z_inflate+:} false; then :
@@ -20995,12 +21219,12 @@ else
fi
fi
-if test x$enable_zlib != xno && test -n "$ZLIB"; then
+if test "x$enable_zlib" != xno && test -n "$ZLIB"; then
$as_echo "#define HAVE_ZLIB 1" >>confdefs.h
fi
- if test x$enable_zlib != xno && test -n "$ZLIB"; then
+ if test "x$enable_zlib" != xno && test -n "$ZLIB"; then
HAVE_ZLIB_TRUE=
HAVE_ZLIB_FALSE='#'
else
@@ -21026,7 +21250,7 @@ else
fi
-if test x$enable_bzip2 != xno && test -z "$BZIP2"; then
+if test "x$enable_bzip2" != xno && test -z "$BZIP2"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BZ2_bzopen in -lbz2" >&5
$as_echo_n "checking for BZ2_bzopen in -lbz2... " >&6; }
if ${ac_cv_lib_bz2_BZ2_bzopen+:} false; then :
@@ -21077,14 +21301,14 @@ else
fi
fi
-if test x$enable_bzip2 != xno && test -n "$BZIP2"; then
+if test "x$enable_bzip2" != xno && test -n "$BZIP2"; then
$as_echo "#define HAVE_BZIP2 1" >>confdefs.h
else
BZIP2_WARN=" (needs bzip2)"
fi
- if test x$enable_bzip2 != xno && test -n "$BZIP2"; then
+ if test "x$enable_bzip2" != xno && test -n "$BZIP2"; then
HAVE_BZIP2_TRUE=
HAVE_BZIP2_FALSE='#'
else
@@ -21172,7 +21396,7 @@ $as_echo "yes" >&6; }
$as_echo "#define HAVE_MINIZIP 1" >>confdefs.h
fi
- if test x$enable_minizip != xno; then
+ if test "x$enable_minizip" != xno; then
HAVE_MINIZIP_TRUE=
HAVE_MINIZIP_FALSE='#'
else
@@ -21185,7 +21409,7 @@ fi
# libzip
# Optional. Used to load the crazy zip-compressed-bunch-of-XML formats.
# Alternative to minizip (which is normally preferred).
-if test x$enable_minizip != xno; then
+if test "x$enable_minizip" != xno; then
enable_libzip=no
else
enable_libzip=yes
@@ -21263,7 +21487,7 @@ $as_echo "#define HAVE_LIBZIP 1" >>confdefs.h
fi
fi
- if test x$enable_libzip != xno; then
+ if test "x$enable_libzip" != xno; then
HAVE_LIBZIP_TRUE=
HAVE_LIBZIP_FALSE='#'
else
@@ -21275,10 +21499,10 @@ fi
#############################################################################
# So, at the end, do we have any zip file backend?
have_any_zip=no
-if test x$enable_minizip != xno || test x$enable_libzip != xno; then
+if test "x$enable_minizip" != xno || test "x$enable_libzip" != xno; then
have_any_zip=yes
fi
- if test x$have_any_zip != xno; then
+ if test "x$have_any_zip" != xno; then
HAVE_ANY_ZIP_TRUE=
HAVE_ANY_ZIP_FALSE='#'
else
@@ -21364,7 +21588,7 @@ $as_echo "yes" >&6; }
$as_echo "#define HAVE_PNG 1" >>confdefs.h
fi
- if test x$enable_png != xno; then
+ if test "x$enable_png" != xno; then
HAVE_PNG_TRUE=
HAVE_PNG_FALSE='#'
else
@@ -21450,7 +21674,7 @@ $as_echo "yes" >&6; }
$as_echo "#define HAVE_WEBP 1" >>confdefs.h
fi
- if test x$enable_webp != xno; then
+ if test "x$enable_webp" != xno; then
HAVE_WEBP_TRUE=
HAVE_WEBP_FALSE='#'
else
@@ -21467,13 +21691,13 @@ fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the C++ compiler is a real thing" >&5
$as_echo_n "checking if the C++ compiler is a real thing... " >&6; }
if test "x$CXX" = "xg++" && test "x$GCC_CXX" != xyes; then
- cxx_is_not_fake=no
+ have_cxx=no
else
- cxx_is_not_fake=yes
+ have_cxx=yes
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cxx_is_not_fake" >&5
-$as_echo "$cxx_is_not_fake" >&6; }
- if test x$cxx_is_not_fake != xno; then
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_cxx" >&5
+$as_echo "$have_cxx" >&6; }
+ if test "x$have_cxx" != xno; then
HAVE_CXX_TRUE=
HAVE_CXX_FALSE='#'
else
@@ -21485,7 +21709,7 @@ fi
#############################################################################
# OpenEXR
# Optional. Used for HDR greyscale OpenEXR pixmap import/export.
-enable_exr=$cxx_is_not_fake
+enable_exr=$have_cxx
pkg_failed=no
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for EXR" >&5
@@ -21559,7 +21783,7 @@ $as_echo "yes" >&6; }
$as_echo "#define HAVE_EXR 1" >>confdefs.h
fi
- if test x$enable_exr != xno; then
+ if test "x$enable_exr" != xno; then
HAVE_EXR_TRUE=
HAVE_EXR_FALSE='#'
else
@@ -21645,7 +21869,7 @@ $as_echo "yes" >&6; }
$as_echo "#define HAVE_CFITSIO 1" >>confdefs.h
fi
- if test x$enable_cfitsio != xno; then
+ if test "x$enable_cfitsio" != xno; then
HAVE_CFITSIO_TRUE=
HAVE_CFITSIO_FALSE='#'
else
@@ -21745,7 +21969,7 @@ $as_echo "#define HAVE_XML2 1" >>confdefs.h
fi
fi
- if test x$enable_libxml2 != xno; then
+ if test "x$enable_libxml2" != xno; then
HAVE_XML2_TRUE=
HAVE_XML2_FALSE='#'
else
@@ -24222,15 +24446,53 @@ _ACEOF
ac_config_commands="$ac_config_commands gwyconfig.h"
+#############################################################################
+# Make msgmerge work on Darwin. See
+# http://subcommanderblog.wordpress.com/2009/05/16/msgmerge-on-macosx-and-no-such-file-or-directory/
if test "$os_darwin" = yes; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: fixing msgmerge to work on Darwin" >&5
$as_echo "$as_me: fixing msgmerge to work on Darwin" >&6;}
- # Make msgmerge work on Darwin. See
- # http://subcommanderblog.wordpress.com/2009/05/16/msgmerge-on-macosx-and-no-such-file-or-directory/
ac_config_commands="$ac_config_commands osx-chmod"
fi
+#############################################################################
+# Create lists of included and exclued optional file formats.
+# This table needs to be kept in sync with modules/file/Makefile.am.
+cat >conftest.out <<EOF
+have_any_zip? NanoObserver
+have_any_zip? NanoScanTech
+have_any_zip? OpenGPS
+have_any_zip? PLUx
+have_any_zip? SPMxFormat
+have_any_zip? JPK force
+enable_libxml2? have_any_zip? APE DAX
+enable_libxml2? enable_zlib? SPML
+enable_exr? have_cxx? OpenEXR
+enable_cfitsio? FITS
+enable_zlib? Createc/zlib
+enable_zlib? NRRD/zlib
+enable_zlib? RHK SM4 PRM meta/zlib
+enable_bzip2? NRRD/bzip2
+enable_png? have_cxx? PNG/16bit
+have_cxx? BigTIFF
+have_cxx? PGM/16bit
+enable_webp? WebP
+EOF
+
+for dep in enable_bzip2 enable_cfitsio enable_exr enable_libxml2 enable_png enable_webp enable_zlib have_any_zip have_cxx; do
+ eval x=\$$dep
+ if test "x$x" != xno; then
+ sed -i "s/$dep? //" conftest.out
+ else
+ sed -i "s/$dep? /#/" conftest.out
+ fi
+done
+
+enabled_formats=`grep -v '^#' conftest.out | sort | sed 's/$/, /' | tr -d '\n' | sed 's/, *$//'`
+disabled_formats=`grep '^#' conftest.out | sort | sed 's/$/, /' | tr -d '#\n' | sed 's/, *$//'`
+rm -f conftest.out
+
cat >confcache <<\_ACEOF
# This file is a shell script that caches the results of configure
# tests run on this system so they can be shared between configure
@@ -24396,6 +24658,10 @@ if test -z "${MODULE_DEPENDENCIES_TRUE}" && test -z "${MODULE_DEPENDENCIES_FALSE
as_fn_error $? "conditional \"MODULE_DEPENDENCIES\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
+if test -z "${MODULE_BUNDLING_TRUE}" && test -z "${MODULE_BUNDLING_FALSE}"; then
+ as_fn_error $? "conditional \"MODULE_BUNDLING\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
if test -z "${DESKTOP_FILE_UPDATE_TRUE}" && test -z "${DESKTOP_FILE_UPDATE_FALSE}"; then
as_fn_error $? "conditional \"DESKTOP_FILE_UPDATE\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -24881,7 +25147,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by Gwyddion $as_me 2.47, which was
+This file was extended by Gwyddion $as_me 2.49, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -24947,7 +25213,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-Gwyddion config.status 2.47
+Gwyddion config.status 2.49
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
@@ -25500,6 +25766,7 @@ do
"plugins/file/Makefile") CONFIG_FILES="$CONFIG_FILES plugins/file/Makefile" ;;
"plugins/process/Makefile") CONFIG_FILES="$CONFIG_FILES plugins/process/Makefile" ;;
"pixmaps/Makefile") CONFIG_FILES="$CONFIG_FILES pixmaps/Makefile" ;;
+ "pixmaps/src/Makefile") CONFIG_FILES="$CONFIG_FILES pixmaps/src/Makefile" ;;
"po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;;
"perl/Makefile") CONFIG_FILES="$CONFIG_FILES perl/Makefile" ;;
"python/Makefile") CONFIG_FILES="$CONFIG_FILES python/Makefile" ;;
@@ -27062,7 +27329,7 @@ _LT_EOF
_______EOF
- if test x$enable_gl = xno; then
+ if test "x$enable_gl" = xno; then
echo '#undef GWYDDION_HAS_OPENGL' >>$outfile
else
echo '#define GWYDDION_HAS_OPENGL 1' >>$outfile
@@ -27207,71 +27474,82 @@ $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
fi
-enabled_formats=
-disabled_formats=
-
-if test "x$have_any_zip" != xno; then
- enabled_formats="$enabled_formats, NanoObserver, NanoScanTech, OpenGPS, PLUX"
- if test "x$enable_libxml2" != xno; then
- enabled_formats="$enabled_formats, APE DAX"
- else
- disabled_formats="$disabled_formats, APE DAX"
- fi
-else
- disabled_formats="$disabled_formats, NanoObserver, NanoScanTech, OpenGPS, APE DAX, PLUX"
-fi
-
-if test "x$enable_exr" != xno; then
- enabled_formats="$enabled_formats, OpenEXR"
-else
- disabled_formats="$disabled_formats, OpenEXR"
-fi
-
-if test "x$enable_cfitsio" != xno; then
- enabled_formats="$enabled_formats, FITS"
-else
- disabled_formats="$disabled_formats, FITS"
-fi
-
-if test "x$enable_zlib" != xno; then
- enabled_formats="$enabled_formats, Createc zlib compression, NRRD zlib compression, RHK SM4 PRM metadata compression"
- if test "x$enable_libxml2" != xno; then
- enabled_formats="$enabled_formats, SPML"
+#############################################################################
+# Print the summary.
+pygwy_hl=
+if test "x$enable_pygwy" = xyes; then
+ if test "x$enable_gtksourceview" = xyes; then
+ pygwy_hl=' (with syntax highlighting)'
else
- disabled_formats="$disabled_formats, SPML"
+ pygwy_hl=' (no syntax highlighting)'
fi
-else
- disabled_formats="$disabled_formats, SPML, Createc zlib compression, NRRD zlib compression, RHK SM4 PRM metadata compression"
-fi
-
-if test "x$enable_bzip2" != xno; then
- enabled_formats="$enabled_formats, NRRD bzip2 compression"
-else
- disabled_formats="$disabled_formats, NRRD bzip2 compression"
-fi
-
-if test "x$enable_png" != xno; then
- enabled_formats="$enabled_formats, high-depth PNG"
-else
- disabled_formats="$disabled_formats, high-depth PNG"
fi
-enabled_formats=`echo "$enabled_formats" | sed 's/^, //'`
-disabled_formats=`echo "$disabled_formats" | sed 's/^, //'`
-
echo "================================================================="
-echo "Configuration:"
-echo " FFTW3: $enable_fftw3$FFTW3_WARN"
+echo "Configuration Summary:"
echo " OpenGL 3D widgets: $enable_gl$GL_WARN"
echo " Remote control: $remote_backend"
echo " Optional file formats included: $enabled_formats"
echo " Optional file formats excluded: $disabled_formats"
+echo " Module linking: bundling=$enable_module_bundling, bloat=$enable_library_bloat"
echo " Thumbnailers to build: $THUMBNAILERS"
-echo " Python interface (pygwy): $enable_pygwy$PYGWY_WARN"
-if test x$enable_pygwy = xyes; then
- echo " Pygwy console syntax highlighting: $enable_gtksourceview$GTKSOURCEVIEW_WARN"
-fi
+echo " Python interface (pygwy): $enable_pygwy$pygwy_hl$pygwy_warn"
echo " Desktop integration files go to: $xdg_target"
echo "================================================================="
+#############################################################################
+# Maintainer mode
+if test "x$enable_maintainer_mode" = xyes; then
+ missing_mmode_stuff=
+ if test "x$PYTHON" = x || test "x$PYTHON" = x:; then
+ missing_mmode_stuff="$missing_mmode_stuff, Python 2.x"
+ fi
+ if test "x$GLIB_MKENUMS" = x || test "x$GLIB_MKENUMS" = x:; then
+ missing_mmode_stuff="$missing_mmode_stuff, glib-mkenums"
+ fi
+ if test "x$GLIB_GENMARSHAL" = x || test "x$GLIB_GENMARSHAL" = x:; then
+ missing_mmode_stuff="$missing_mmode_stuff, glib-genmarshal"
+ fi
+ if test "x$INKSCAPE" = x || test "x$INKSCAPE" = x:; then
+ missing_mmode_stuff="$missing_mmode_stuff, Inkscape"
+ fi
+ if test "x$XSLTPROC" = x || test "x$XSLTPROC" = x:; then
+ missing_mmode_stuff="$missing_mmode_stuff, xsltproc"
+ fi
+ if test "x$enable_gtk_doc" != xyes; then
+ missing_mmode_stuff="$missing_mmode_stuff, gtk-doc"
+ fi
+ if test "x$PNGCRUSH" = x || test "x$PNGCRUSH" = x:; then
+ missing_mmode_stuff="$missing_mmode_stuff, pngcrush"
+ fi
+ if test "x$enable_pygwy" = xyes; then
+ if test "x$EPYDOC" = x || test "x$EPYDOC" = x:; then
+ missing_mmode_stuff="$missing_mmode_stuff, epydoc"
+ fi
+ fi
+ missing_mmode_stuff=`echo "$missing_mmode_stuff" | sed 's/^, //'`
+ if test "x$missing_mmode_stuff" != x; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Missing maintainer mode tools.
+*******************************************************************************
+ Maintainer mode is enabled, but some tools used to generate various files
+ are missing:
+
+ $missing_mmode_stuff
+
+ Depending on what you are doing and why you enabled the maintainer mode,
+ this may be OK or things may break horribly.
+*******************************************************************************" >&5
+$as_echo "$as_me: WARNING: Missing maintainer mode tools.
+*******************************************************************************
+ Maintainer mode is enabled, but some tools used to generate various files
+ are missing:
+
+ $missing_mmode_stuff
+
+ Depending on what you are doing and why you enabled the maintainer mode,
+ this may be OK or things may break horribly.
+*******************************************************************************" >&2;}
+ fi
+fi
+
# vim: set ts=2 sw=2 et :
diff --git a/configure.ac b/configure.ac
index d730938..5793077 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,7 +1,7 @@
-# @(#) $Id: configure.ac 19287 2016-11-18 10:17:57Z yeti-dn $
+# @(#) $Id: configure.ac 20297 2017-08-15 15:44:34Z yeti-dn $
dnl Process this file with autoconf to produce a configure script.
m4_define([gwy_version_major],[2])
-m4_define([gwy_version_minor],[47])
+m4_define([gwy_version_minor],[49])
m4_define([gwy_version_string],[gwy_version_major.gwy_version_minor])
AC_INIT([Gwyddion], [gwy_version_string], [klapetek at gwyddion.net])
# Use -release for unstable version libs instead of -version-info, because
@@ -34,6 +34,7 @@ AC_CONFIG_FILES(\
plugins/file/Makefile \
plugins/process/Makefile \
pixmaps/Makefile \
+ pixmaps/src/Makefile \
po/Makefile.in \
perl/Makefile \
python/Makefile \
@@ -93,14 +94,10 @@ AC_PROG_LIBTOOL
AC_PROG_INSTALL
AC_CHECK_PROGS([XSLTPROC],[xsltproc],[:])
AC_CHECK_PROGS([EPYDOC],[epydoc],[:])
-GTK_DOC_CHECK(1.10)
+GTK_DOC_CHECK(1.12)
#############################################################################
-# 64bit (for FFTW 3.0 warning)
-# Unfortunately, AC_CHECK_SIZEOF() is capable only of preprocessor symbol
-# production while we need to know the size now. We don't care much about
-# the exact model: if pointers are larger than 32bit it can possibly break,
-# and so we will warn.
+# 32bit/64bit
AC_CHECK_SIZEOF([void*])
if test $ac_cv_sizeof_voidp = 4; then
arch_32bit=yes
@@ -168,7 +165,7 @@ fi
AC_SUBST(XDG_DATA_HOME_DIR)
#############################################################################
-# Module symbol resolution.
+# Module symbol resolution and bundling.
# We try not to link modules with libraries and let symbols resolve through
# app, because it means faster app startup and much faster compilation. But
# on some systems that isn't possible.
@@ -183,6 +180,17 @@ if test "x$enable_library_bloat" != xyes \
fi
AM_CONDITIONAL([MODULE_DEPENDENCIES],[test "x$enable_library_bloat" = xyes])
+GWY_ENABLE([module-bundling],
+ [module_bundling],
+ [Bundling modules to one big shared library],
+ [yes])
+AM_CONDITIONAL([MODULE_BUNDLING],[test "x$enable_module_bundling" = xyes])
+
+#############################################################################
+# GLib tools
+AC_CHECK_PROGS([GLIB_MKENUMS],[glib-mkenums])
+AC_CHECK_PROGS([GLIB_GENMARSHAL],[glib-genmarshal])
+
#############################################################################
# XDG stuff
AC_CHECK_PROGS([UPDATE_DESKTOP_DATABASE],[update-desktop-database],:)
@@ -214,8 +222,16 @@ if test "x$GCONFTOOL" != xno; then
fi
#############################################################################
+# Inkscape, for SVG -> PNG icon rendering
+AC_CHECK_PROGS([INKSCAPE],[inkscape],:)
+AC_CHECK_PROGS([PNGCRUSH],[pngcrush],:)
+
+#############################################################################
# Python
+# Must override the default interpreter list because otherwise it simply tries
+# to use the highest version, which can be python 3.x.
GWY_WITH([python],,[Install Python modules and plug-ins])
+m4_define_default([_AM_PYTHON_INTERPRETER_LIST],[python2 python2.7 python2.6 python2.5 python2.4 python])
AM_PATH_PYTHON(2.4,,:)
AM_CONDITIONAL([HAVE_PYTHON],[test "$PYTHON" != : -a "$enable_python" != no])
AC_CHECK_SIZEOF([pid_t])
@@ -234,49 +250,39 @@ AC_ARG_ENABLE(pygwy, AC_HELP_STRING([--enable-pygwy],
if test "x$enable_pygwy" != xno; then
if test "$PYTHON" = : -o "x$enable_python" = no; then
enable_pygwy=no
- PYGWY_WARN=" (needs python)"
+ pygwy_warn=" (needs python)"
fi
fi
-if test "x$enable_pygwy" != xno; then
- GWY_PYTHON_SYSCFG_VAR([BASECFLAGS],,[enable_pygwy=no])
- GWY_PYTHON_SYSCFG_VAR([LDFLAGS],,[enable_pygwy=no])
- if test "x$os_mswin" != xyes; then
- GWY_PYTHON_SYSCFG_VAR([CCSHARED],,[enable_pygwy=no])
- GWY_PYTHON_SYSCFG_VAR([LINKFORSHARED],,[enable_pygwy=no])
- GWY_PYTHON_SYSCFG_VAR([LIBDIR],,[enable_pygwy=no])
- # Construct the option including -L, to avoid passing empty -L.
- PYTHON_LIBDIR_FLAG="-L$PYTHON_SYSCFG_LIBDIR"
+if test "x$os_mswin" != xyes; then
+ # This is hopefully enough on Unix.
+ if test "x$enable_pygwy" != xno; then
+ GWY_PYTHON_DEVEL([2.7 2.6 2.5 2.4],,
+ [enable_pygwy=no
+ pygwy_warn=" (no usable libpython)"])
fi
- if test "x$enable_pygwy" = xno; then
- PYGWY_WARN=" (failed to obtain Python flags)"
- fi
-fi
-
-if test "x$enable_pygwy" != xno; then
- libpython=python$PYTHON_VERSION
- if test "x$os_mswin" = xyes; then
- libpython=`echo $libpython | sed 's%\\.%%'`
+else
+ # There is no python-config in MS Windows. Rely on the user to provide
+ # PYTHON_INCLUDES and PYTHON_LDFLAGS. Normally "-I/some/dir/include" and
+ # "-L/some/dir/lib -lpython27" suffice.
+ if test "x$enable_pygwy" != xno; then
+ if test "x$PYTHON_INCLUDES" = x; then
+ AC_MSG_NOTICE([please set PYTHON_INCLUDES; it is not going to work otherwise])
+ fi
+ if test "x$PYTHON_LDFLAGS" = x; then
+ AC_MSG_NOTICE([please set PYTHON_LDFLAGS; it is not going to work otherwise])
+ fi
+ GWY_PYTHON_TRY_LINK([],
+ [enable_pygwy=no
+ pygwy_warn=" (cannot link with libpython)"])
fi
- LIBPYTHON_ORIG_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS $PYTHON_SYSCFG_CCSHARED"
- AC_CHECK_LIB($libpython, PyRun_String,
- [PYTHON_LIBS="$PYTHON_LIBDIR_FLAG -l$libpython"],
- [enable_pygwy=no; PYGWY_WARN=" (needs lib$libpython)"],
- ["$PYTHON_LIBDIR_FLAG" $PYTHON_SYSCFG_LDFLAGS $PYTHON_SYSCFG_LINKFORSHARED])
- CFLAGS="$LIBPYTHON_ORIG_CFLAGS"
- AC_SUBST(PYTHON_LIBS)
-fi
-
-if test "x$enable_pygwy" != xno; then
- GWY_CHECK_PYTHON_HEADERS([],
- [enable_pygwy=no; PYGWY_WARN=" (needs Python headers)"])
fi
if test "x$enable_pygwy" != xno; then
PKG_CHECK_MODULES(PYGTK,[pygtk-2.0 >= 2.10.0],[],
- [enable_pygwy=no; PYGWY_WARN=" (needs pygtk2)"])
+ [enable_pygwy=no; pygwy_warn=" (needs pygtk2)"])
AC_SUBST(PYGTK_CFLAGS)
+ AC_SUBST(PYGTK_LIBS)
if test "x$PYGTK_CODEGENDIR" = 'x'; then
PYGTK_CODEGENDIR=`$PKG_CONFIG --variable=codegendir pygtk-2.0`
fi
@@ -361,6 +367,10 @@ if test "$GCC" = yes; then
GWY_PROG_CC_OPTION([WMIXED_DECL],[-Wdeclaration-after-statement],,)
GWY_PROG_CC_OPTION([WREDUNDANT_DECLS],[-Wredundant-decls],,)
GWY_PROG_CC_OPTION([WNO_MISSING_FIELD_INITIALIZERS],[-Wno-missing-field-initializers],,)
+ # Fallthrough is usually *the* reason for choosing case statements over ifs.
+ GWY_PROG_CC_OPTION([WNO_IMPLICIT_FALLTHROUGH],[-Wno-implicit-fallthrough],,)
+ # For OpenEXR until they somehow get rid of dynamic exception specification.
+ GWY_PROG_CC_OPTION([WNO_DEPRECATED],[-Wno-deprecated],,)
GWY_PROG_CC_OPTION([FNO_TRAP_MATH],[-fno-trapping-math],,)
GWY_PROG_CC_OPTION([FNO_MATH_ERRNO],[-fno-math-errno],,)
GWY_PROG_CC_OPTION([FEXCESS_PRECISION_FAST],[-fexcess-precision=fast],,)
@@ -371,13 +381,15 @@ if test "$GCC" = yes; then
# -Wstrict-protoypes makes gtkitemfactory.h noisy, but they have a
# comment there they can't fix it due to compatibility
# -Wwrite-strings because it makes all struct initializations very noisy
- WARNING_CFLAGS="-Wall -W -Wshadow -Wpointer-arith -Wno-sign-compare -Wundef $PROG_CC_ERR_IFD $PROG_CC_ERR_RET $PROG_CC_WNO_SYS_HEADERS $PROG_CC_WNO_POINTER_SIGN $PROG_CC_WNO_EMPTY_FMT $PROG_CC_WMIXED_DECL $PROG_CC_WREDUNDANT_DECLS"
+ WARNING_CFLAGS="-Wall -W -Wshadow -Wpointer-arith -Wno-sign-compare -Wundef $PROG_CC_ERR_IFD $PROG_CC_ERR_RET $PROG_CC_WNO_SYS_HEADERS $PROG_CC_WNO_POINTER_SIGN $PROG_CC_WNO_EMPTY_FMT $PROG_CC_WMIXED_DECL $PROG_CC_WREDUNDANT_DECLS $PROG_CC_WNO_IMPLICIT_FALLTHROUGH"
PYTHON_EXTRA_CFLAGS="$PROG_CC_WNO_UNUSED_PAR $PROG_CC_FNO_STRICT_ALIASING $PROG_CC_WNO_MISSING_FIELD_INITIALIZERS"
GTKDOC_EXTRA_CFLAGS="$PROG_CC_WNO_UNUSED_PAR"
+ HDRIMAGE_EXTRA_CFLAGS="$PROG_CC_WNO_DEPRECATED"
PREMISE_CFLAGS="$PROG_CC_FNO_TRAP_MATH $PROG_CC_FNO_MATH_ERRNO $FEXCESS_PRECISION_FAST"
fi
AC_SUBST(PYTHON_EXTRA_CFLAGS)
AC_SUBST(GTKDOC_EXTRA_CFLAGS)
+AC_SUBST(HDRIMAGE_EXTRA_CFLAGS)
#############################################################################
# Base libraries: X, Gtk+.
@@ -449,31 +461,8 @@ PKG_CHECK_MODULES(GTK, [$pangoft2 cairo >= 1.2 pango >= 1.10 pangocairo gtk+-2.0
#############################################################################
# FFTW3
-# Optional.
-FFTW_WARN=
-GWY_WITH([fftw3],,[FFTW3 library])
-if test "x$enable_fftw3" != "xno"; then
- PKG_CHECK_MODULES(FFTW3, [fftw3],
- [AC_DEFINE(HAVE_FFTW3,1,[Define if we have the FFTW3 package.])],
- [enable_fftw3=no; FFTW_WARN=" (needs FFTW3)"])
-fi
-if test "x$enable_fftw3" != "xno"; then
- if test "x$arch_32bit" != "xyes"; then
- PKG_CHECK_MODULES(FFTW3_1,[fftw3 >= 3.1],[:],
- AC_MSG_WARN([FFTW3 older than 3.1 may cause crashes on 64bit systems.
- Consider installation of FFTW3 at least 3.1. Alternatively you can
- disable FFTW3 with --without-fftw3.])
- [FFTW3_WARN=" (with warnings)"])
- fi
- FFTW3_DEPENDENCY=fftw3
-else
- FFTW3_DEPENDENCY=
-fi
-AC_SUBST([FFTW3_DEPENDENCY])
-
-if test x$enable_fftw3 != xyes; then
- AC_MSG_WARN([FFTW will become a required dependency in a future version.])
-fi
+# Required.
+PKG_CHECK_MODULES(FFTW3, [fftw3 >= 3.1])
#############################################################################
# GtkSourceView
@@ -484,7 +473,7 @@ if test "x$enable_pygwy" != xno; then
PKG_CHECK_MODULES(GTKSOURCEVIEW,[gtksourceview-2.0],
[AC_DEFINE(HAVE_GTKSOURCEVIEW,1,
[Define if we have the GtkSourceView package.])],
- [enable_gtksourceview=no; GTKSOURCEVIEW_WARN=" (needs GtkSourceView)"])
+ [enable_gtksourceview=no])
fi
if test "x$enable_gtksourceview" != "xno"; then
GTKSOURCEVIEW_DEPENDENCY=gtksourceview-2.0
@@ -521,34 +510,34 @@ AC_SUBST([GTKGLEXT_DEPENDENCY])
# Optional. Used sometimes for data compression, e.g. in Createc, NRRD and
# MATLAB.
GWY_WITH([zlib],,[build with zlib support])
-if test x$enable_zlib != xno && test -z "$ZLIB"; then
+if test "x$enable_zlib" != xno && test -z "$ZLIB"; then
AC_CHECK_LIB(z, inflate,
[AC_CHECK_HEADER(zlib.h, ZLIB='-lz', [enable_zlib=no])],
[enable_zlib=no],
[])
fi
-if test x$enable_zlib != xno && test -n "$ZLIB"; then
+if test "x$enable_zlib" != xno && test -n "$ZLIB"; then
AC_DEFINE(HAVE_ZLIB,1,[Define if we have the ZLIB library.])
fi
-AM_CONDITIONAL([HAVE_ZLIB],[test x$enable_zlib != xno && test -n "$ZLIB"])
+AM_CONDITIONAL([HAVE_ZLIB],[test "x$enable_zlib" != xno && test -n "$ZLIB"])
AC_SUBST(ZLIB)
#############################################################################
# libbz2
# Optional. Used sometimes for data compression, e.g. in NRRD.
GWY_WITH([bzip2],,[build with bzip2 support])
-if test x$enable_bzip2 != xno && test -z "$BZIP2"; then
+if test "x$enable_bzip2" != xno && test -z "$BZIP2"; then
AC_CHECK_LIB(bz2, BZ2_bzopen,
[AC_CHECK_HEADER(bzlib.h, BZIP2='-lbz2', [enable_bzip2=no])],
[enable_bzip2=no],
[])
fi
-if test x$enable_bzip2 != xno && test -n "$BZIP2"; then
+if test "x$enable_bzip2" != xno && test -n "$BZIP2"; then
AC_DEFINE(HAVE_BZIP2,1,[Define if we have the BZIP2 library.])
else
BZIP2_WARN=" (needs bzip2)"
fi
-AM_CONDITIONAL([HAVE_BZIP2],[test x$enable_bzip2 != xno && test -n "$BZIP2"])
+AM_CONDITIONAL([HAVE_BZIP2],[test "x$enable_bzip2" != xno && test -n "$BZIP2"])
AC_SUBST(BZIP2)
#############################################################################
@@ -560,13 +549,13 @@ PKG_CHECK_MODULES(MINIZIP, [minizip],
[AC_DEFINE(HAVE_MINIZIP,1,
[Define if we have the minizip package.])],
[enable_minizip=no])
-AM_CONDITIONAL([HAVE_MINIZIP],[test x$enable_minizip != xno])
+AM_CONDITIONAL([HAVE_MINIZIP],[test "x$enable_minizip" != xno])
#############################################################################
# libzip
# Optional. Used to load the crazy zip-compressed-bunch-of-XML formats.
# Alternative to minizip (which is normally preferred).
-if test x$enable_minizip != xno; then
+if test "x$enable_minizip" != xno; then
enable_libzip=no
else
enable_libzip=yes
@@ -575,15 +564,15 @@ else
[Define if we have the libzip package.])],
[enable_libzip=no])
fi
-AM_CONDITIONAL([HAVE_LIBZIP],[test x$enable_libzip != xno])
+AM_CONDITIONAL([HAVE_LIBZIP],[test "x$enable_libzip" != xno])
#############################################################################
# So, at the end, do we have any zip file backend?
have_any_zip=no
-if test x$enable_minizip != xno || test x$enable_libzip != xno; then
+if test "x$enable_minizip" != xno || test "x$enable_libzip" != xno; then
have_any_zip=yes
fi
-AM_CONDITIONAL([HAVE_ANY_ZIP],[test x$have_any_zip != xno])
+AM_CONDITIONAL([HAVE_ANY_ZIP],[test "x$have_any_zip" != xno])
#############################################################################
# PNG
@@ -593,7 +582,7 @@ PKG_CHECK_MODULES(PNG, [libpng],
[AC_DEFINE(HAVE_PNG,1,
[Define if we have the libpng package.])],
[enable_png=no])
-AM_CONDITIONAL([HAVE_PNG],[test x$enable_png != xno])
+AM_CONDITIONAL([HAVE_PNG],[test "x$enable_png" != xno])
#############################################################################
# WebP
@@ -603,7 +592,7 @@ PKG_CHECK_MODULES(WEBP, [libwebp],
[AC_DEFINE(HAVE_WEBP,1,
[Define if we have the libwebp package.])],
[enable_webp=no])
-AM_CONDITIONAL([HAVE_WEBP],[test x$enable_webp != xno])
+AM_CONDITIONAL([HAVE_WEBP],[test "x$enable_webp" != xno])
#############################################################################
# C++
@@ -612,22 +601,22 @@ AM_CONDITIONAL([HAVE_WEBP],[test x$enable_webp != xno])
# hdrimage stuff completely.
AC_MSG_CHECKING([if the C++ compiler is a real thing])
if test "x$CXX" = "xg++" && test "x$GCC_CXX" != xyes; then
- cxx_is_not_fake=no
+ have_cxx=no
else
- cxx_is_not_fake=yes
+ have_cxx=yes
fi
-AC_MSG_RESULT([$cxx_is_not_fake])
-AM_CONDITIONAL([HAVE_CXX],[test x$cxx_is_not_fake != xno])
+AC_MSG_RESULT([$have_cxx])
+AM_CONDITIONAL([HAVE_CXX],[test "x$have_cxx" != xno])
#############################################################################
# OpenEXR
# Optional. Used for HDR greyscale OpenEXR pixmap import/export.
-enable_exr=$cxx_is_not_fake
+enable_exr=$have_cxx
PKG_CHECK_MODULES(EXR, [OpenEXR],
[AC_DEFINE(HAVE_EXR,1,
[Define if we have the OpenEXR package.])],
[enable_exr=no])
-AM_CONDITIONAL([HAVE_EXR],[test x$enable_exr != xno])
+AM_CONDITIONAL([HAVE_EXR],[test "x$enable_exr" != xno])
#############################################################################
# CFITSIO
@@ -637,7 +626,7 @@ PKG_CHECK_MODULES(CFITSIO, [cfitsio],
[AC_DEFINE(HAVE_CFITSIO,1,
[Define if we have the cfitsio package.])],
[enable_cfitsio=no])
-AM_CONDITIONAL([HAVE_CFITSIO],[test x$enable_cfitsio != xno])
+AM_CONDITIONAL([HAVE_CFITSIO],[test "x$enable_cfitsio" != xno])
#############################################################################
# LibXML2.
@@ -649,7 +638,7 @@ if test "x$enable_libxml2" != "xno"; then
[Define if we have the libxml2 package.])],
[enable_libxml2=no])
fi
-AM_CONDITIONAL([HAVE_XML2],[test x$enable_libxml2 != xno])
+AM_CONDITIONAL([HAVE_XML2],[test "x$enable_libxml2" != xno])
#############################################################################
# libunique
@@ -831,7 +820,7 @@ AC_CONFIG_COMMANDS([gwyconfig.h],
_______EOF
- if test x$enable_gl = xno; then
+ if test "x$enable_gl" = xno; then
echo '#undef GWYDDION_HAS_OPENGL' >>$outfile
else
echo '#define GWYDDION_HAS_OPENGL 1' >>$outfile
@@ -871,10 +860,11 @@ _______EOF
gwy_math_isnan=$gwy_math_isnan
])
+#############################################################################
+# Make msgmerge work on Darwin. See
+# http://subcommanderblog.wordpress.com/2009/05/16/msgmerge-on-macosx-and-no-such-file-or-directory/
if test "$os_darwin" = yes; then
AC_MSG_NOTICE([fixing msgmerge to work on Darwin])
- # Make msgmerge work on Darwin. See
- # http://subcommanderblog.wordpress.com/2009/05/16/msgmerge-on-macosx-and-no-such-file-or-directory/
AC_CONFIG_COMMANDS([osx-chmod],
[
chmod +a "" po/*.po
@@ -882,73 +872,111 @@ if test "$os_darwin" = yes; then
])
fi
-AC_OUTPUT
-
-enabled_formats=
-disabled_formats=
-
-if test "x$have_any_zip" != xno; then
- enabled_formats="$enabled_formats, NanoObserver, NanoScanTech, OpenGPS, PLUX"
- if test "x$enable_libxml2" != xno; then
- enabled_formats="$enabled_formats, APE DAX"
+#############################################################################
+# Create lists of included and exclued optional file formats.
+# This table needs to be kept in sync with modules/file/Makefile.am.
+cat >conftest.out <<EOF
+have_any_zip? NanoObserver
+have_any_zip? NanoScanTech
+have_any_zip? OpenGPS
+have_any_zip? PLUx
+have_any_zip? SPMxFormat
+have_any_zip? JPK force
+enable_libxml2? have_any_zip? APE DAX
+enable_libxml2? enable_zlib? SPML
+enable_exr? have_cxx? OpenEXR
+enable_cfitsio? FITS
+enable_zlib? Createc/zlib
+enable_zlib? NRRD/zlib
+enable_zlib? RHK SM4 PRM meta/zlib
+enable_bzip2? NRRD/bzip2
+enable_png? have_cxx? PNG/16bit
+have_cxx? BigTIFF
+have_cxx? PGM/16bit
+enable_webp? WebP
+EOF
+
+for dep in enable_bzip2 enable_cfitsio enable_exr enable_libxml2 enable_png enable_webp enable_zlib have_any_zip have_cxx; do
+ AS_VAR_COPY([x],[$dep])
+ if test "x$x" != xno; then
+ sed -i "s/$dep? //" conftest.out
else
- disabled_formats="$disabled_formats, APE DAX"
+ sed -i "s/$dep? /#/" conftest.out
fi
-else
- disabled_formats="$disabled_formats, NanoObserver, NanoScanTech, OpenGPS, APE DAX, PLUX"
-fi
+done
-if test "x$enable_exr" != xno; then
- enabled_formats="$enabled_formats, OpenEXR"
-else
- disabled_formats="$disabled_formats, OpenEXR"
-fi
+enabled_formats=`grep -v '^#' conftest.out | sort | sed 's/$/, /' | tr -d '\n' | sed 's/, *$//'`
+disabled_formats=`grep '^#' conftest.out | sort | sed 's/$/, /' | tr -d '#\n' | sed 's/, *$//'`
+rm -f conftest.out
-if test "x$enable_cfitsio" != xno; then
- enabled_formats="$enabled_formats, FITS"
-else
- disabled_formats="$disabled_formats, FITS"
-fi
+AC_OUTPUT
-if test "x$enable_zlib" != xno; then
- enabled_formats="$enabled_formats, Createc zlib compression, NRRD zlib compression, RHK SM4 PRM metadata compression"
- if test "x$enable_libxml2" != xno; then
- enabled_formats="$enabled_formats, SPML"
+#############################################################################
+# Print the summary.
+pygwy_hl=
+if test "x$enable_pygwy" = xyes; then
+ if test "x$enable_gtksourceview" = xyes; then
+ pygwy_hl=' (with syntax highlighting)'
else
- disabled_formats="$disabled_formats, SPML"
+ pygwy_hl=' (no syntax highlighting)'
fi
-else
- disabled_formats="$disabled_formats, SPML, Createc zlib compression, NRRD zlib compression, RHK SM4 PRM metadata compression"
fi
-if test "x$enable_bzip2" != xno; then
- enabled_formats="$enabled_formats, NRRD bzip2 compression"
-else
- disabled_formats="$disabled_formats, NRRD bzip2 compression"
-fi
-
-if test "x$enable_png" != xno; then
- enabled_formats="$enabled_formats, high-depth PNG"
-else
- disabled_formats="$disabled_formats, high-depth PNG"
-fi
-
-enabled_formats=`echo "$enabled_formats" | sed 's/^, //'`
-disabled_formats=`echo "$disabled_formats" | sed 's/^, //'`
-
echo "================================================================="
-echo "Configuration:"
-echo " FFTW3: $enable_fftw3$FFTW3_WARN"
+echo "Configuration Summary:"
echo " OpenGL 3D widgets: $enable_gl$GL_WARN"
echo " Remote control: $remote_backend"
echo " Optional file formats included: $enabled_formats"
echo " Optional file formats excluded: $disabled_formats"
+echo " Module linking: bundling=$enable_module_bundling, bloat=$enable_library_bloat"
echo " Thumbnailers to build: $THUMBNAILERS"
-echo " Python interface (pygwy): $enable_pygwy$PYGWY_WARN"
-if test x$enable_pygwy = xyes; then
- echo " Pygwy console syntax highlighting: $enable_gtksourceview$GTKSOURCEVIEW_WARN"
-fi
+echo " Python interface (pygwy): $enable_pygwy$pygwy_hl$pygwy_warn"
echo " Desktop integration files go to: $xdg_target"
echo "================================================================="
+#############################################################################
+# Maintainer mode
+if test "x$enable_maintainer_mode" = xyes; then
+ missing_mmode_stuff=
+ if test "x$PYTHON" = x || test "x$PYTHON" = x:; then
+ missing_mmode_stuff="$missing_mmode_stuff, Python 2.x"
+ fi
+ if test "x$GLIB_MKENUMS" = x || test "x$GLIB_MKENUMS" = x:; then
+ missing_mmode_stuff="$missing_mmode_stuff, glib-mkenums"
+ fi
+ if test "x$GLIB_GENMARSHAL" = x || test "x$GLIB_GENMARSHAL" = x:; then
+ missing_mmode_stuff="$missing_mmode_stuff, glib-genmarshal"
+ fi
+ if test "x$INKSCAPE" = x || test "x$INKSCAPE" = x:; then
+ missing_mmode_stuff="$missing_mmode_stuff, Inkscape"
+ fi
+ if test "x$XSLTPROC" = x || test "x$XSLTPROC" = x:; then
+ missing_mmode_stuff="$missing_mmode_stuff, xsltproc"
+ fi
+ if test "x$enable_gtk_doc" != xyes; then
+ missing_mmode_stuff="$missing_mmode_stuff, gtk-doc"
+ fi
+ if test "x$PNGCRUSH" = x || test "x$PNGCRUSH" = x:; then
+ missing_mmode_stuff="$missing_mmode_stuff, pngcrush"
+ fi
+ if test "x$enable_pygwy" = xyes; then
+ if test "x$EPYDOC" = x || test "x$EPYDOC" = x:; then
+ missing_mmode_stuff="$missing_mmode_stuff, epydoc"
+ fi
+ fi
+ missing_mmode_stuff=`echo "$missing_mmode_stuff" | sed 's/^, //'`
+ if test "x$missing_mmode_stuff" != x; then
+ AC_MSG_WARN([Missing maintainer mode tools.
+*******************************************************************************
+ Maintainer mode is enabled, but some tools used to generate various files
+ are missing:
+
+ $missing_mmode_stuff
+
+ Depending on what you are doing and why you enabled the maintainer mode,
+ this may be OK or things may break horribly.
+*******************************************************************************])
+ fi
+fi
+
# vim: set ts=2 sw=2 et :
diff --git a/data/Makefile.in b/data/Makefile.in
index 0d06e7e..c69835c 100644
--- a/data/Makefile.in
+++ b/data/Makefile.in
@@ -267,10 +267,7 @@ EPYDOC = @EPYDOC@
EXEEXT = @EXEEXT@
EXR_CFLAGS = @EXR_CFLAGS@
EXR_LIBS = @EXR_LIBS@
-FFTW3_1_CFLAGS = @FFTW3_1_CFLAGS@
-FFTW3_1_LIBS = @FFTW3_1_LIBS@
FFTW3_CFLAGS = @FFTW3_CFLAGS@
-FFTW3_DEPENDENCY = @FFTW3_DEPENDENCY@
FFTW3_LIBS = @FFTW3_LIBS@
FGREP = @FGREP@
GCONFTOOL = @GCONFTOOL@
@@ -280,6 +277,8 @@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
GLIBC21 = @GLIBC21@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GMODULE_CFLAGS = @GMODULE_CFLAGS@
GMODULE_LIBS = @GMODULE_LIBS@
GMSGFMT = @GMSGFMT@
@@ -304,7 +303,9 @@ GTK_MAC_LIBS = @GTK_MAC_LIBS@
GWY_VERSION_MAJOR = @GWY_VERSION_MAJOR@
GWY_VERSION_MINOR = @GWY_VERSION_MINOR@
GWY_VERSION_STRING = @GWY_VERSION_STRING@
+HDRIMAGE_EXTRA_CFLAGS = @HDRIMAGE_EXTRA_CFLAGS@
HTML_DIR = @HTML_DIR@
+INKSCAPE = @INKSCAPE@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -362,6 +363,7 @@ PASCAL = @PASCAL@
PATH_SEPARATOR = @PATH_SEPARATOR@
PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
+PNGCRUSH = @PNGCRUSH@
PNG_CFLAGS = @PNG_CFLAGS@
PNG_LIBS = @PNG_LIBS@
POD2MAN = @POD2MAN@
@@ -370,17 +372,13 @@ PYGTK_CFLAGS = @PYGTK_CFLAGS@
PYGTK_CODEGENDIR = @PYGTK_CODEGENDIR@
PYGTK_LIBS = @PYGTK_LIBS@
PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
PYTHON_EXTRA_CFLAGS = @PYTHON_EXTRA_CFLAGS@
PYTHON_INCLUDES = @PYTHON_INCLUDES@
-PYTHON_LIBS = @PYTHON_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
PYTHON_PLATFORM = @PYTHON_PLATFORM@
PYTHON_PREFIX = @PYTHON_PREFIX@
-PYTHON_SYSCFG_BASECFLAGS = @PYTHON_SYSCFG_BASECFLAGS@
-PYTHON_SYSCFG_CCSHARED = @PYTHON_SYSCFG_CCSHARED@
-PYTHON_SYSCFG_LDFLAGS = @PYTHON_SYSCFG_LDFLAGS@
-PYTHON_SYSCFG_LIBDIR = @PYTHON_SYSCFG_LIBDIR@
-PYTHON_SYSCFG_LINKFORSHARED = @PYTHON_SYSCFG_LINKFORSHARED@
PYTHON_VERSION = @PYTHON_VERSION@
RANLIB = @RANLIB@
RUBY = @RUBY@
diff --git a/data/glmaterials/Makefile.in b/data/glmaterials/Makefile.in
index 702c187..b67bee8 100644
--- a/data/glmaterials/Makefile.in
+++ b/data/glmaterials/Makefile.in
@@ -199,10 +199,7 @@ EPYDOC = @EPYDOC@
EXEEXT = @EXEEXT@
EXR_CFLAGS = @EXR_CFLAGS@
EXR_LIBS = @EXR_LIBS@
-FFTW3_1_CFLAGS = @FFTW3_1_CFLAGS@
-FFTW3_1_LIBS = @FFTW3_1_LIBS@
FFTW3_CFLAGS = @FFTW3_CFLAGS@
-FFTW3_DEPENDENCY = @FFTW3_DEPENDENCY@
FFTW3_LIBS = @FFTW3_LIBS@
FGREP = @FGREP@
GCONFTOOL = @GCONFTOOL@
@@ -212,6 +209,8 @@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
GLIBC21 = @GLIBC21@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GMODULE_CFLAGS = @GMODULE_CFLAGS@
GMODULE_LIBS = @GMODULE_LIBS@
GMSGFMT = @GMSGFMT@
@@ -236,7 +235,9 @@ GTK_MAC_LIBS = @GTK_MAC_LIBS@
GWY_VERSION_MAJOR = @GWY_VERSION_MAJOR@
GWY_VERSION_MINOR = @GWY_VERSION_MINOR@
GWY_VERSION_STRING = @GWY_VERSION_STRING@
+HDRIMAGE_EXTRA_CFLAGS = @HDRIMAGE_EXTRA_CFLAGS@
HTML_DIR = @HTML_DIR@
+INKSCAPE = @INKSCAPE@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -294,6 +295,7 @@ PASCAL = @PASCAL@
PATH_SEPARATOR = @PATH_SEPARATOR@
PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
+PNGCRUSH = @PNGCRUSH@
PNG_CFLAGS = @PNG_CFLAGS@
PNG_LIBS = @PNG_LIBS@
POD2MAN = @POD2MAN@
@@ -302,17 +304,13 @@ PYGTK_CFLAGS = @PYGTK_CFLAGS@
PYGTK_CODEGENDIR = @PYGTK_CODEGENDIR@
PYGTK_LIBS = @PYGTK_LIBS@
PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
PYTHON_EXTRA_CFLAGS = @PYTHON_EXTRA_CFLAGS@
PYTHON_INCLUDES = @PYTHON_INCLUDES@
-PYTHON_LIBS = @PYTHON_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
PYTHON_PLATFORM = @PYTHON_PLATFORM@
PYTHON_PREFIX = @PYTHON_PREFIX@
-PYTHON_SYSCFG_BASECFLAGS = @PYTHON_SYSCFG_BASECFLAGS@
-PYTHON_SYSCFG_CCSHARED = @PYTHON_SYSCFG_CCSHARED@
-PYTHON_SYSCFG_LDFLAGS = @PYTHON_SYSCFG_LDFLAGS@
-PYTHON_SYSCFG_LIBDIR = @PYTHON_SYSCFG_LIBDIR@
-PYTHON_SYSCFG_LINKFORSHARED = @PYTHON_SYSCFG_LINKFORSHARED@
PYTHON_VERSION = @PYTHON_VERSION@
RANLIB = @RANLIB@
RUBY = @RUBY@
diff --git a/data/gradients/Code-V b/data/gradients/Code-V
index 1cffb32..a217e2b 100644
--- a/data/gradients/Code-V
+++ b/data/gradients/Code-V
@@ -1,14 +1,14 @@
-Gwyddion resource GwyGradient
-0 0 0 0 1
-0 0.0196078 0.0196078 0.603922 1
-0.0894632 0 0.141176 0.752941 1
-0.17495 0 0.360784 0.835294 1
-0.264414 0.00392157 0.635294 0.811765 1
-0.355865 0 0.815686 0.65098 1
-0.449304 0.00392157 0.827451 0.329412 1
-0.544732 0.266667 0.839216 0 1
-0.636183 0.615686 0.866667 0 1
-0.727634 0.905882 0.886275 0 1
-0.819085 0.960784 0.635294 0.00392157 1
-0.916501 0.988235 0.356863 0 1
-1 0.913725 0.054902 0.0392157 1
+Gwyddion resource GwyGradient
+0 0 0 0 1
+0 0.0196078 0.0196078 0.603922 1
+0.0894632 0 0.141176 0.752941 1
+0.17495 0 0.360784 0.835294 1
+0.264414 0.00392157 0.635294 0.811765 1
+0.355865 0 0.815686 0.65098 1
+0.449304 0.00392157 0.827451 0.329412 1
+0.544732 0.266667 0.839216 0 1
+0.636183 0.615686 0.866667 0 1
+0.727634 0.905882 0.886275 0 1
+0.819085 0.960784 0.635294 0.00392157 1
+0.916501 0.988235 0.356863 0 1
+1 0.913725 0.054902 0.0392157 1
diff --git a/data/gradients/Gray-inverted b/data/gradients/Gray-inverted
new file mode 100644
index 0000000..1db6574
--- /dev/null
+++ b/data/gradients/Gray-inverted
@@ -0,0 +1,3 @@
+Gwyddion resource GwyGradient
+0 1 1 1 1
+1 0 0 0 1
diff --git a/data/gradients/Makefile.am b/data/gradients/Makefile.am
index 2a2aae9..c51be25 100644
--- a/data/gradients/Makefile.am
+++ b/data/gradients/Makefile.am
@@ -1,4 +1,4 @@
-# @(#) $Id: Makefile.am 16053 2014-03-26 13:28:57Z yeti-dn $
+# @(#) $Id: Makefile.am 19780 2017-05-22 08:57:32Z yeti-dn $
gradientdatadir = $(pkgdatadir)/gradients
@@ -18,6 +18,7 @@ gradientdata_DATA = \
DFit \
Digitalis \
Gold \
+ Gray-inverted \
Green \
Green-Cyan \
Green-Stripes-4 \
@@ -50,7 +51,9 @@ gradientdata_DATA = \
Sky \
Sm2 \
Spectral \
+ Spectral-white \
Spring \
+ Viridis \
Warm \
Warpp-mono \
Warpp-spectral \
diff --git a/data/gradients/Makefile.in b/data/gradients/Makefile.in
index 8192718..3120468 100644
--- a/data/gradients/Makefile.in
+++ b/data/gradients/Makefile.in
@@ -14,7 +14,7 @@
@SET_MAKE@
-# @(#) $Id: Makefile.am 16053 2014-03-26 13:28:57Z yeti-dn $
+# @(#) $Id: Makefile.am 19780 2017-05-22 08:57:32Z yeti-dn $
VPATH = @srcdir@
am__is_gnu_make = { \
@@ -199,10 +199,7 @@ EPYDOC = @EPYDOC@
EXEEXT = @EXEEXT@
EXR_CFLAGS = @EXR_CFLAGS@
EXR_LIBS = @EXR_LIBS@
-FFTW3_1_CFLAGS = @FFTW3_1_CFLAGS@
-FFTW3_1_LIBS = @FFTW3_1_LIBS@
FFTW3_CFLAGS = @FFTW3_CFLAGS@
-FFTW3_DEPENDENCY = @FFTW3_DEPENDENCY@
FFTW3_LIBS = @FFTW3_LIBS@
FGREP = @FGREP@
GCONFTOOL = @GCONFTOOL@
@@ -212,6 +209,8 @@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
GLIBC21 = @GLIBC21@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GMODULE_CFLAGS = @GMODULE_CFLAGS@
GMODULE_LIBS = @GMODULE_LIBS@
GMSGFMT = @GMSGFMT@
@@ -236,7 +235,9 @@ GTK_MAC_LIBS = @GTK_MAC_LIBS@
GWY_VERSION_MAJOR = @GWY_VERSION_MAJOR@
GWY_VERSION_MINOR = @GWY_VERSION_MINOR@
GWY_VERSION_STRING = @GWY_VERSION_STRING@
+HDRIMAGE_EXTRA_CFLAGS = @HDRIMAGE_EXTRA_CFLAGS@
HTML_DIR = @HTML_DIR@
+INKSCAPE = @INKSCAPE@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -294,6 +295,7 @@ PASCAL = @PASCAL@
PATH_SEPARATOR = @PATH_SEPARATOR@
PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
+PNGCRUSH = @PNGCRUSH@
PNG_CFLAGS = @PNG_CFLAGS@
PNG_LIBS = @PNG_LIBS@
POD2MAN = @POD2MAN@
@@ -302,17 +304,13 @@ PYGTK_CFLAGS = @PYGTK_CFLAGS@
PYGTK_CODEGENDIR = @PYGTK_CODEGENDIR@
PYGTK_LIBS = @PYGTK_LIBS@
PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
PYTHON_EXTRA_CFLAGS = @PYTHON_EXTRA_CFLAGS@
PYTHON_INCLUDES = @PYTHON_INCLUDES@
-PYTHON_LIBS = @PYTHON_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
PYTHON_PLATFORM = @PYTHON_PLATFORM@
PYTHON_PREFIX = @PYTHON_PREFIX@
-PYTHON_SYSCFG_BASECFLAGS = @PYTHON_SYSCFG_BASECFLAGS@
-PYTHON_SYSCFG_CCSHARED = @PYTHON_SYSCFG_CCSHARED@
-PYTHON_SYSCFG_LDFLAGS = @PYTHON_SYSCFG_LDFLAGS@
-PYTHON_SYSCFG_LIBDIR = @PYTHON_SYSCFG_LIBDIR@
-PYTHON_SYSCFG_LINKFORSHARED = @PYTHON_SYSCFG_LINKFORSHARED@
PYTHON_VERSION = @PYTHON_VERSION@
RANLIB = @RANLIB@
RUBY = @RUBY@
@@ -414,6 +412,7 @@ gradientdata_DATA = \
DFit \
Digitalis \
Gold \
+ Gray-inverted \
Green \
Green-Cyan \
Green-Stripes-4 \
@@ -446,7 +445,9 @@ gradientdata_DATA = \
Sky \
Sm2 \
Spectral \
+ Spectral-white \
Spring \
+ Viridis \
Warm \
Warpp-mono \
Warpp-spectral \
diff --git a/data/gradients/Spectral-white b/data/gradients/Spectral-white
new file mode 100644
index 0000000..251f4c3
--- /dev/null
+++ b/data/gradients/Spectral-white
@@ -0,0 +1,13 @@
+Gwyddion resource GwyGradient
+0 1 1 1 1
+0.090909 0.940093 0.141772 0.135225 1
+0.181818 1 0.534417 0 1
+0.272727 0.875059 0.840787 0.022034 1
+0.363636 0.496666 0.898024 0.0742046 1
+0.454545 0.307927 0.782269 0.316396 1
+0.545455 0.281147 0.741558 0.76144 1
+0.636364 0.019608 0.529412 0.819608 1
+0.727273 0.0775921 0.114046 0.778973 1
+0.818182 0.388235 0.007843 0.678431 1
+0.909091 0.664988 0.21297 0.667338 1
+1 1 1 1 1
diff --git a/data/gradients/Viridis b/data/gradients/Viridis
new file mode 100644
index 0000000..4613fd9
--- /dev/null
+++ b/data/gradients/Viridis
@@ -0,0 +1,14 @@
+Gwyddion resource GwyGradient
+0 0.266667 0.00392157 0.329412 1
+0.122137 0.278431 0.168627 0.482353 1
+0.21374 0.247059 0.278431 0.537255 1
+0.316794 0.196078 0.392157 0.556863 1
+0.51145 0.121569 0.576471 0.54902 1
+0.564885 0.117647 0.627451 0.533333 1
+0.60687 0.137255 0.666667 0.513725 1
+0.683206 0.231373 0.733333 0.458824 1
+0.751908 0.364706 0.788235 0.384314 1
+0.824427 0.537255 0.839216 0.278431 1
+0.938931 0.839216 0.886275 0.0980392 1
+0.969466 0.921569 0.898039 0.0980392 1
+1 0.996078 0.905882 0.141176 1
diff --git a/data/gwyddion-thumbnailer.schemas.in b/data/gwyddion-thumbnailer.schemas.in
index ce3ed02..2455d39 100644
--- a/data/gwyddion-thumbnailer.schemas.in
+++ b/data/gwyddion-thumbnailer.schemas.in
@@ -49,6 +49,9 @@
<schema><key>/schemas/desktop/gnome/thumbnailers/application at x-benyuan-csm-spm/enable</key><applyto>/desktop/gnome/thumbnailers/application at x-benyuan-csm-spm/enable</applyto><owner>gwyddion</owner><type>bool</type><default>true</default><locale name="C"><short>Enable thumbnailing of Benyuan CSM data</short><long>True enables thumbnailing and false disables the creation of new thumbnails</long></locale></schema>
<schema><key>/schemas/desktop/gnome/thumbnailers/application at x-benyuan-csm-spm/command</key><applyto>/desktop/gnome/thumbnailers/application at x-benyuan-csm-spm/command</applyto><owner>gwyddion</owner><type>string</type><default>@bindir@/gwyddion-thumbnailer gnome2 %s %i %o</default><locale name="C"><short>Thumbnail command for Benyuan CSM data</short><long>Valid command plus arguments for the Benyuan CSM data thumbnailer</long></locale></schema>
+<schema><key>/schemas/desktop/gnome/thumbnailers/application at x-dektak-opdx/enable</key><applyto>/desktop/gnome/thumbnailers/application at x-dektak-opdx/enable</applyto><owner>gwyddion</owner><type>bool</type><default>true</default><locale name="C"><short>Enable thumbnailing of Dektak OPDx profilometry data</short><long>True enables thumbnailing and false disables the creation of new thumbnails</long></locale></schema>
+<schema><key>/schemas/desktop/gnome/thumbnailers/application at x-dektak-opdx/command</key><applyto>/desktop/gnome/thumbnailers/application at x-dektak-opdx/command</applyto><owner>gwyddion</owner><type>string</type><default>@bindir@/gwyddion-thumbnailer gnome2 %s %i %o</default><locale name="C"><short>Thumbnail command for Dektak OPDx profilometry data</short><long>Valid command plus arguments for the Dektak OPDx profilometry data thumbnailer</long></locale></schema>
+
<schema><key>/schemas/desktop/gnome/thumbnailers/application at x-dektak-xml/enable</key><applyto>/desktop/gnome/thumbnailers/application at x-dektak-xml/enable</applyto><owner>gwyddion</owner><type>bool</type><default>true</default><locale name="C"><short>Enable thumbnailing of Dektak XML profilometry data</short><long>True enables thumbnailing and false disables the creation of new thumbnails</long></locale></schema>
<schema><key>/schemas/desktop/gnome/thumbnailers/application at x-dektak-xml/command</key><applyto>/desktop/gnome/thumbnailers/application at x-dektak-xml/command</applyto><owner>gwyddion</owner><type>string</type><default>@bindir@/gwyddion-thumbnailer gnome2 %s %i %o</default><locale name="C"><short>Thumbnail command for Dektak XML profilometry data</short><long>Valid command plus arguments for the Dektak XML profilometry data thumbnailer</long></locale></schema>
@@ -310,5 +313,8 @@
<schema><key>/schemas/desktop/gnome/thumbnailers/application at x-wsxm-spm/enable</key><applyto>/desktop/gnome/thumbnailers/application at x-wsxm-spm/enable</applyto><owner>gwyddion</owner><type>bool</type><default>true</default><locale name="C"><short>Enable thumbnailing of WSxM SPM data</short><long>True enables thumbnailing and false disables the creation of new thumbnails</long></locale></schema>
<schema><key>/schemas/desktop/gnome/thumbnailers/application at x-wsxm-spm/command</key><applyto>/desktop/gnome/thumbnailers/application at x-wsxm-spm/command</applyto><owner>gwyddion</owner><type>string</type><default>@bindir@/gwyddion-thumbnailer gnome2 %s %i %o</default><locale name="C"><short>Thumbnail command for WSxM SPM data</short><long>Valid command plus arguments for the WSxM SPM data thumbnailer</long></locale></schema>
+<schema><key>/schemas/desktop/gnome/thumbnailers/application at x-zeiss-lsm-spm/enable</key><applyto>/desktop/gnome/thumbnailers/application at x-zeiss-lsm-spm/enable</applyto><owner>gwyddion</owner><type>bool</type><default>true</default><locale name="C"><short>Enable thumbnailing of Carl Zeiss CLSM images</short><long>True enables thumbnailing and false disables the creation of new thumbnails</long></locale></schema>
+<schema><key>/schemas/desktop/gnome/thumbnailers/application at x-zeiss-lsm-spm/command</key><applyto>/desktop/gnome/thumbnailers/application at x-zeiss-lsm-spm/command</applyto><owner>gwyddion</owner><type>string</type><default>@bindir@/gwyddion-thumbnailer gnome2 %s %i %o</default><locale name="C"><short>Thumbnail command for Carl Zeiss CLSM images</short><long>Valid command plus arguments for the Carl Zeiss CLSM images thumbnailer</long></locale></schema>
+
</schemalist>
</gconfschemafile>
diff --git a/data/gwyddion.1 b/data/gwyddion.1
index edb6e6f..7c8dc25 100644
--- a/data/gwyddion.1
+++ b/data/gwyddion.1
@@ -1,13 +1,22 @@
'\" t
.\" Title: gwyddion
.\" Author: Yeti
-.\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\" Date: 01/26/2011
+.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
+.\" Date: 04/04/2017
.\" Manual: Gwyddion
.\" Source: gwyddion
.\" Language: English
.\"
-.TH "GWYDDION" "1" "01/26/2011" "gwyddion" "Gwyddion"
+.TH "GWYDDION" "1" "04/04/2017" "gwyddion" "Gwyddion"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
@@ -90,21 +99,36 @@ Instead of running the user interface and opening
.PP
\fB\-\-disable\-gl\fR
.RS 4
-Disables OpenGL entirely, including any checks whether it is available\&. This option, of course, has any effect only if Gwyddion was built with OpenGL support and one of the most visible effects is that 3D view becomes unavailable\&. However, you may find it useful if you encounter a system so broken that even checking for OpenGL capabilities leads to X server errors\&.
+Disables OpenGL entirely, including any checks whether it is available\&. This option, of course, has any effect only if Gwyddion was built with OpenGL support and one of the most visible effects is that 3D view becomes unavailable\&. However, you may find it useful if you encounter a system so broken that even checking for OpenGL capabilities leads to X server errors\&. It can also help when you run Gwyddion remotely using X11 forwarding and the start\-up time seems excessively long\&.
.RE
.PP
\fB\-\-log\-to\-file\fR
.RS 4
-Redirect messages from GLib, Gtk+, Gwyddion, etc\&. to
+Write messages from GLib, Gtk+, Gwyddion, etc\&. to
~/\&.gwyddion/gwyddion\&.log
or file given in
\fBGWYDDION_LOGFILE\fR
-environment variable\&. This option is most useful on Unix as on Win32 messages are redirected to a file by default\&.
+environment variable\&. This option is most useful on Unix as on Win32 messages are redirected to a file by default\&. Logging to a file and console are not exclusive; messages can go to both\&.
+.RE
+.PP
+\fB\-\-no\-log\-to\-file\fR
+.RS 4
+Prevents writing messages from GLib, Gtk+, Gwyddion, etc\&. to a file\&. This is most useful on Win32 where messages are written to a file by default\&.
+.RE
+.PP
+\fB\-\-log\-to\-console\fR
+.RS 4
+Print messages from GLib, Gtk+, Gwyddion, etc\&. to the console\&. More precisely, debugging messages are printed to the standard output, errors and warnings to the standard error\&. On Unix messages are printed to the console by default\&. Logging to a file and console are not exclusive; messages can go to both\&.
.RE
.PP
\fB\-\-no\-log\-to\-file\fR
.RS 4
-Prevents redirection of messages from GLib, Gtk+, Gwyddion, etc\&. to a file\&. This is most useful on Win32 (where messages are redirected to a file by default) provided that stdout and stderr go somewhere you can see them\&.
+Disables printing messages to the console\&. This is most useful on Unix where messages are printed to the console by default\&.
+.RE
+.PP
+\fB\-\-disable\-modules=\fR\fB\fIMODULE,\&.\&.\&.\fR\fR
+.RS 4
+Prevents the registration modules of given names\&. This is mostly useful for development and debugging\&.
.RE
.PP
\fB\-\-debug\-objects\fR
@@ -180,7 +204,7 @@ and some Gwyddion\-specific variables:
.RS 4
Name of file to redirect log messages to\&. On MS Windows, messages are always sent to a file as working with the terminal is cumbersome there\&. The default log file location,
gwyddion\&.log
-in user\'s Documents and Settings, can be overridden with
+in user\*(Aqs Documents and Settings, can be overridden with
\fBGWYDDION_LOGFILE\fR\&. On Unix, messages go to the terminal by default and this environment variable has effect only if
\fB\-\-log\-to\-file\fR
is given\&.
@@ -248,7 +272,6 @@ Directory to place user python modules or scripts to\&.
.RE
.SH "SEE ALSO"
.PP
-
\fBgwyddion-thumbnailer\fR(1),
\fBgxsm\fR(1)
.SH "AUTHOR"
diff --git a/data/gwyddion.nsit.in b/data/gwyddion.nsit.in
index 63d6cc5..53d7f21 100644
--- a/data/gwyddion.nsit.in
+++ b/data/gwyddion.nsit.in
@@ -3,10 +3,9 @@
; Delete and RMDir commands (that's why the extension is nsit, not nsi). It
; also expands ARCH to either win32 or win64.
; Written by Yeti. Public domain.
-; Revision $Id: gwyddion.nsit.in 19277 2016-11-16 16:51:18Z yeti-dn $
+; Revision $Id: gwyddion.nsit.in 19995 2017-06-27 14:53:15Z yeti-dn $
!define GTK_BIN_VERSION "2.10.0"
-!define PANGO_BIN_VERSION "1.8.0"
!define PRODUCT_VERSION "@PACKAGE_VERSION at .%ARCH%"
!define PRODUCT_BIN_VERSION "2.0"
@@ -93,9 +92,11 @@ Function DetectPrevInstallation
MessageBox MB_YESNOCANCEL|MB_ICONQUESTION \
"${PRODUCT_NAME} $R1 is already installed in $R2.$\n$\n\
Do you want to replace it with ${PRODUCT_NAME} ${PRODUCT_VERSION}?$\n$\n\
- Click Yes to upgrade the previous version, \
- No to ignore the previous version and proceed, \
- Cancel to abort the installation." \
+ Yes: Upgrade the previous version.$\n$\n\
+ No: Ignore the previous version and proceed. \
+ WARNING: This can result in a broken installation! \
+ Only use if you know what you are doing!$\n$\n\
+ Cancel: Abort the installation." \
/SD IDYES IDYES uninstall_prev IDNO detect_prev_finished
Quit
@@ -145,8 +146,9 @@ Function ChooseLocale
!insertmacro GWY_LOCALE_CHOOSER "French" "fr_FR.UTF-8" 60u
!insertmacro GWY_LOCALE_CHOOSER "Italian" "it_IT.UTF-8" 72u
!insertmacro GWY_LOCALE_CHOOSER "Korean" "ko_KR.UTF-8" 84u
- !insertmacro GWY_LOCALE_CHOOSER "Russian" "ru_RU.UTF-8" 96u
- !insertmacro GWY_LOCALE_CHOOSER "Spanish" "es_ES.UTF-8" 108u
+ !insertmacro GWY_LOCALE_CHOOSER "Portuguese (Brazilian)" "pt_BR.UTF-8" 96u
+ !insertmacro GWY_LOCALE_CHOOSER "Russian" "ru_RU.UTF-8" 108u
+ !insertmacro GWY_LOCALE_CHOOSER "Spanish" "es_ES.UTF-8" 120u
# @@@ GENERATED LANG NSIS-MENU END @@@
nsDialogs::Show
@@ -239,10 +241,8 @@ Section "Gwyddion (required)"
GwyExpandFiles "bin\libIexMath-*.dll"
GwyExpandFiles "bin\libIlmThread-*.dll"
GwyExpandFiles "bin\libImath-*.dll"
- GwyExpandFiles "bin\pango-querymodules.exe"
GwyExpandFiles "bin\zlib1.dll"
GwyExpandFiles "bin\libminizip-*.dll"
- GwyExpandFiles "etc\pango\pango.modules"
GwyExpandFiles "etc\gtk-2.0\gtk.immodules"
GwyExpandFiles "etc\gtk-2.0\im-multipress.conf"
GwyExpandFiles "lib\gdk-pixbuf-2.0\${GTK_BIN_VERSION}\loaders.cache"
@@ -252,7 +252,6 @@ Section "Gwyddion (required)"
GwyExpandFiles "lib\gtk-2.0\modules\*.dll"
GwyExpandFiles "lib\gwyddion\modules\*.dll"
GwyExpandFiles "lib\gwyddion\modules\*\*.dll"
- GwyExpandFiles "lib\pango\${PANGO_BIN_VERSION}\modules\*.dll"
GwyExpandFiles "share\gwyddion\glmaterials\*"
GwyExpandFiles "share\gwyddion\gradients\*"
GwyExpandFiles "share\gwyddion\pixmaps\*"
@@ -275,6 +274,7 @@ Section "Gwyddion (required)"
GwyExpandFiles "share\locale\fr\LC_MESSAGES\*.mo"
GwyExpandFiles "share\locale\it\LC_MESSAGES\*.mo"
GwyExpandFiles "share\locale\ko\LC_MESSAGES\*.mo"
+ GwyExpandFiles "share\locale\pt_BR\LC_MESSAGES\*.mo"
GwyExpandFiles "share\locale\ru\LC_MESSAGES\*.mo"
GwyExpandFiles "share\locale\es\LC_MESSAGES\*.mo"
# @@@ GENERATED LANG NSIS-MO END @@@
diff --git a/data/gwyddion.pc.in b/data/gwyddion.pc.in
index cd7725e..52b3b4f 100644
--- a/data/gwyddion.pc.in
+++ b/data/gwyddion.pc.in
@@ -11,6 +11,6 @@ gwypixmapdir=@datadir@/@PACKAGE@/pixmaps
Name: Gwyddion
Description: Gwyddion library
Version: @VERSION@
-Requires: glib-2.0 >= 2.6.0 gtk+-2.0 >= 2.6.0 pangoft2 @GTKGLEXT_DEPENDENCY@ @FFTW3_DEPENDENCY@
+Requires: glib-2.0 >= 2.6.0 gtk+-2.0 >= 2.6.0 fftw3 pangoft2 @GTKGLEXT_DEPENDENCY@
Libs: -L${libdir} -lgwyapp2 -lgwymodule2 -lgwydgets2 -lgwydraw2 -lgwyprocess2 -lgwyddion2
Cflags: -I${includedir}/gwyddion -I${libdir}/gwyddion/include
diff --git a/data/gwyddion.spec.in b/data/gwyddion.spec.in
index f46eacb..52042f1 100644
--- a/data/gwyddion.spec.in
+++ b/data/gwyddion.spec.in
@@ -1,14 +1,11 @@
-# @(#) $Id: gwyddion.spec.in 18763 2016-07-23 12:45:07Z yeti-dn $
-%{expand:%global distro_is_redhat %(test ! -f /etc/redhat-release; echo $?)}
-%{expand:%global distro_is_suse %(test ! -f /etc/SuSE-release; echo $?)}
-
+# @(#) $Id: gwyddion.spec.in 20201 2017-08-08 17:03:21Z yeti-dn $
Name: @PACKAGE_TARNAME@
Version: @PACKAGE_VERSION@
-Release: 1
+Release: 1%{?dist}
Summary: An SPM data visualization and analysis tool
Group: Applications/Engineering
-License: GNU GPL
+License: GPLv2+
URL: @PACKAGE_URL@
Source0: http://gwyddion.net/download/%{version}/%{name}-%{version}.tar.xz
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(id -un)
@@ -16,70 +13,64 @@ Requires(pre): /sbin/ldconfig
Requires(postun): /sbin/ldconfig
BuildRequires: gcc-c++
-BuildRequires: gtk2-devel >= 2.14
-BuildRequires: glib2-devel >= 2.14
-BuildRequires: pango-devel >= 1.10
-BuildRequires: cairo-devel >= 1.6
-BuildRequires: gtkglext-devel
-BuildRequires: libxml2-devel
+BuildRequires: pkgconfig(gtk+-2.0) >= 2.14
+BuildRequires: pkgconfig(glib-2.0) >= 2.14
+BuildRequires: pkgconfig(pango) >= 1.12
+BuildRequires: pkgconfig(cairo) >= 1.6
+BuildRequires: pkgconfig(fftw3) >= 3.1
+BuildRequires: pkgconfig(gtkglext-1.0)
+BuildRequires: pkgconfig(libxml-2.0)
BuildRequires: zlib-devel
-BuildRequires: libwebp-devel
-BuildRequires: ruby >= 1.8
-%if %{distro_is_redhat}
-BuildRequires: rubypick
-%endif
+BuildRequires: pkgconfig(libwebp)
+BuildRequires: pkgconfig(OpenEXR)
+BuildRequires: pkgconfig(cfitsio)
+BuildRequires: pkgconfig(libpng)
+BuildRequires: pkgconfig(unique-1.0)
+BuildRequires: ruby(release) >= 1.8
BuildRequires: gettext
BuildRequires: desktop-file-utils >= 0.9
-BuildRequires: pkgconfig
BuildRequires: findutils
+BuildRequires: pkgconfig(xmu)
+BuildRequires: pkgconfig(gtksourceview-2.0)
+BuildRequires: pkgconfig(minizip)
+BuildRequires: sed
-%if %{distro_is_redhat}
-BuildRequires: libXmu-devel
-BuildRequires: pygtk2-devel
-BuildRequires: gtksourceview2-devel
-# minizip would be nice to require everywhere but it does not seem available.
-BuildRequires: minizip-devel
-%define fftw3 fftw
-%define fftw3devel fftw-devel
-%define python2devel python2-devel
-%define configureopts %{nil}
+%if 0%{?suse_version}
+BuildRequires: pkg-config
+%else
+BuildRequires: pkgconfig
%endif
-%if %{distro_is_suse}
-BuildRequires: xorg-x11-Mesa-devel
-BuildRequires: xorg-x11-libXmu-devel
-BuildRequires: python-gtk-devel
-BuildRequires: gtksourceview-devel
-BuildRequires: libzip-devel
-%define fftw3 fftw3
-%define fftw3devel fftw3-devel
-%define configureopts %{nil}
+BuildRequires: perl >= 5.005
+%if 0%{?rhl}
+BuildRequires: perl-podlators
%endif
-# Default the fftw package name to the common name in the hope the distro
-# provides that. The expansion inside %if is somehow limited, define the
-# test in two steps.
-%define fftwundefined %{?fftw3:0}%{!?fftw3:1}
-%if %{fftwundefined}
-%define fftw3 fftw
-%define fftw3devel fftw-devel
+# Obsolete? Keep for now...
+%if 0%{?suse_version}
+%define gconf2 gconf2
+%else
+%define gconf2 GConf2
%endif
+BuildRequires: %{gconf2}
-# Ditto for the python development package.
-%define python2undefined %{?python2devel:0}%{!?python2devel:1}
-%if %{python2undefined}
-%define python2devel python-devel
+%if 0%{?fedora} >= 26
+%define python2 python2
+%else
+%define python2 python
%endif
+BuildRequires: %{python2}
+BuildRequires: %{python2}-devel >= 2.7
-%ifarch %ix86
-BuildRequires: %{fftw3devel} >= 3.0
-%else
-BuildRequires: %{fftw3devel} >= 3.1
+%if 0%{?rhl}
+BuildRequires: pygtk2-devel >= 2.10
%endif
-BuildRequires: %{python2devel} >= 2.2
-# Fedora guarantees these two, other may not
-BuildRequires: perl >= 5.005
-BuildRequires: sed
+%if 0%{?suse_version}
+BuildRequires: python-gtk-devel >= 2.10
+%endif
+# otherwise...?
+
+%define configureopts %{nil}
# The only packaged perl module is private, don't expose it.
%define __perl_provides %{nil}
@@ -99,24 +90,21 @@ BuildRequires: sed
%package devel
Summary: Headers, libraries and tools for Gwyddion module development
Group: Development/Libraries
-Requires: %{name} = %{version}
+Requires: %{name}%{?_isa} = %{version}
# This pulls everything else
-Requires: gtk2-devel >= 2.8
-Requires: gtkglext-devel
-Requires: %{fftw3devel}
-%if %{distro_is_redhat}
+Requires: gtk2-devel%{?_isa} >= 2.8
+Requires: gtkglext-devel%{?_isa}
Requires: perl(:MODULE_COMPAT_%(eval "`%{__perl} -V:version`"; echo $version))
-Requires: python-abi = %(%{__python} -c "import sys ; print sys.version[:3]")
-%endif
+Requires: python-abi = 2.7
%package thumbnailer-gconf
Summary: GConf schemas for gwyddion-thumbnailer integration
Group: System Environment/Libraries
Requires: %{name} = %{version}
-Requires(pre): GConf2
-Requires(post): GConf2
-Requires(preun): GConf2
+Requires(pre): %{gconf2}
+Requires(post): %{gconf2}
+Requires(preun): %{gconf2}
%description
@@ -216,7 +204,7 @@ fi
%{_bindir}/%{name}
%{_bindir}/%{name}-thumbnailer
%defattr(-,root,root)
-%doc AUTHORS COPYING INSTALL.%{name} NEWS README THANKS
+%doc AUTHORS COPYING NEWS README THANKS
%{pkgdatadir}/pixmaps/*.png
%{pkgdatadir}/pixmaps/*.ico
%{pkgdatadir}/gradients/*
@@ -316,3 +304,7 @@ fi
%files thumbnailer-gconf
%{gconfdir}/*.schemas
+
+%changelog
+* Tue Aug 8 2017 Yeti <yeti at gwyddion.net> - @PACKAGE_VERSION at -1
+- hello rpmlint, this package is partially generated
diff --git a/data/gwyddion.vim b/data/gwyddion.vim
index efb7cd0..42812fd 100644
--- a/data/gwyddion.vim
+++ b/data/gwyddion.vim
@@ -1,7 +1,7 @@
" Vim syntax file
" Language: C gwyddion extension
" Maintainer: David Nečas (Yeti) <yeti at physics.muni.cz>
-" Last Change: 2016-11-18
+" Last Change: 2017-08-15
" URL: http://gwyddion.net/download/test/gwyddion.vim
" Generated By: vim-syn-gen.py
" Options:
@@ -11,15 +11,15 @@
" let gwyddion_deprecated_errors = 1
" highlights deprecated declarations as Errors
-syn keyword gwyddionFunction gwy_2d_cwt_wavelet_type_get_enum gwy_2d_cwt_wavelet_type_get_type gwy_3d_label_expand_text gwy_3d_label_get_text gwy_3d_label_get_type gwy_3d_label_new gwy_3d_label_reset gwy_3d_label_reset_text gwy_3d_label_set_text gwy_3d_label_user_size gwy_3d_movement_get_type gwy_3d_projection_get_type gwy_3d_setup_get_type gwy_3d_setup_new gwy_3d_view_class_disable_axis_drawing gwy_3d_view_get_data gwy_3d_view_get_data_key gwy_3d_view_get_gradient_key gwy_3d_view_get_la [...]
+syn keyword gwyddionFunction gwy_2d_cwt_wavelet_type_get_enum gwy_2d_cwt_wavelet_type_get_type gwy_3d_label_expand_text gwy_3d_label_get_text gwy_3d_label_get_type gwy_3d_label_new gwy_3d_label_reset gwy_3d_label_reset_text gwy_3d_label_set_text gwy_3d_label_user_size gwy_3d_movement_get_type gwy_3d_projection_get_type gwy_3d_setup_get_type gwy_3d_setup_new gwy_3d_view_class_disable_axis_drawing gwy_3d_view_get_data gwy_3d_view_get_data_key gwy_3d_view_get_gradient_key gwy_3d_view_get_la [...]
syn keyword gwyddionTypedef GdkGLConfig GwyPoint GwyTriangulationPointXY GwyTriangulationPointXYZ
-syn keyword gwyddionConstant GWY_2DCWT_GAUSS GWY_2DCWT_HAT GWY_3D_MOVEMENT_DEFORMATION GWY_3D_MOVEMENT_LIGHT GWY_3D_MOVEMENT_NONE GWY_3D_MOVEMENT_ROTATION GWY_3D_MOVEMENT_SCALE GWY_3D_PROJECTION_ORTHOGRAPHIC GWY_3D_PROJECTION_PERSPECTIVE GWY_3D_VIEW_LABEL_MAX GWY_3D_VIEW_LABEL_MIN GWY_3D_VIEW_LABEL_X GWY_3D_VIEW_LABEL_Y GWY_3D_VIEW_NLABELS GWY_3D_VISUALIZATION_GRADIENT GWY_3D_VISUALIZATION_LIGHTING GWY_3D_VISUALIZATION_OVERLAY GWY_3D_VISUALIZATION_OVERLAY_NO_LIGHT GWY_APP_BRICK GWY_APP_B [...]
-syn keyword gwyddionStruct Gwy3DLabel Gwy3DLabelClass Gwy3DSetup Gwy3DSetupClass Gwy3DView Gwy3DViewClass Gwy3DWindow Gwy3DWindowClass GwyAppDataId GwyAxis GwyAxisClass GwyAxisParams GwyBrick GwyBrickClass GwyBrickPart GwyCDLine GwyCDLineBuiltin GwyCDLineClass GwyCalData GwyCalDataClass GwyCalibration GwyCalibrationClass GwyChannelData GwyColorAxis GwyColorAxisClass GwyColorButton GwyColorButtonClass GwyComputationState GwyContainer GwyContainerClass GwyCurve GwyCurveCalibrationData GwyC [...]
+syn keyword gwyddionConstant GWY_2DCWT_GAUSS GWY_2DCWT_HAT GWY_3D_MOVEMENT_DEFORMATION GWY_3D_MOVEMENT_LIGHT GWY_3D_MOVEMENT_NONE GWY_3D_MOVEMENT_ROTATION GWY_3D_MOVEMENT_SCALE GWY_3D_PROJECTION_ORTHOGRAPHIC GWY_3D_PROJECTION_PERSPECTIVE GWY_3D_VIEW_LABEL_MAX GWY_3D_VIEW_LABEL_MIN GWY_3D_VIEW_LABEL_X GWY_3D_VIEW_LABEL_Y GWY_3D_VIEW_NLABELS GWY_3D_VISUALIZATION_GRADIENT GWY_3D_VISUALIZATION_LIGHTING GWY_3D_VISUALIZATION_OVERLAY GWY_3D_VISUALIZATION_OVERLAY_NO_LIGHT GWY_AFFINE_SCALING_AS_G [...]
+syn keyword gwyddionStruct Gwy3DLabel Gwy3DLabelClass Gwy3DSetup Gwy3DSetupClass Gwy3DView Gwy3DViewClass Gwy3DWindow Gwy3DWindowClass GwyAdjustBar GwyAdjustBarClass GwyAppDataId GwyAxis GwyAxisClass GwyAxisParams GwyBrick GwyBrickClass GwyBrickPart GwyCDLine GwyCDLineBuiltin GwyCDLineClass GwyCalData GwyCalDataClass GwyCalibration GwyCalibrationClass GwyChannelData GwyColorAxis GwyColorAxisClass GwyColorButton GwyColorButtonClass GwyComputationState GwyContainer GwyContainerClass GwyCur [...]
syn keyword gwyddionUnion GwySerializeValue
-syn keyword gwyddionMacro GWY_3D_LABEL GWY_3D_LABEL_CLASS GWY_3D_LABEL_GET_CLASS GWY_3D_SETUP GWY_3D_SETUP_CLASS GWY_3D_SETUP_GET_CLASS GWY_3D_VIEW GWY_3D_VIEW_CLASS GWY_3D_VIEW_GET_CLASS GWY_3D_WINDOW GWY_3D_WINDOW_CLASS GWY_3D_WINDOW_GET_CLASS GWY_AXIS GWY_AXIS_CLASS GWY_AXIS_GET_CLASS GWY_BRICK GWY_BRICK_CLASS GWY_BRICK_GET_CLASS GWY_CALDATA GWY_CALDATA_CLASS GWY_CALDATA_GET_CLASS GWY_CALIBRATION GWY_CALIBRATION_CLASS GWY_CALIBRATION_GET_CLASS GWY_CDLINE GWY_CDLINE_CLASS GWY_CDLINE_GE [...]
-syn keyword gwyddionEnum Gwy2DCWTWaveletType Gwy3DMovement Gwy3DProjection Gwy3DViewLabel Gwy3DVisualization GwyAppLoggingFlags GwyAppPage GwyAppSettingsError GwyAppWhat GwyAxisScaleFormat GwyByteOrder GwyComputationStateType GwyCorrelationType GwyCurveChannel GwyCurveType GwyDWTDenoiseType GwyDWTType GwyDataCompatibilityFlags GwyDataError GwyDataFieldCached GwyDataItem GwyDataValidateFlags GwyDataViewLayerType GwyDataWatchEventType GwyDebugObjectsDumpFlags GwyDistanceTransformType GwyEx [...]
-syn keyword gwyddionUserFunction GwyAppDataForeachFunc GwyAppDataWatchFunc GwyColorAxisMapFunc GwyCoordTransform2DFunc GwyDataChooserFilterFunc GwyDeserializeFunc GwyFileDetectFunc GwyFileLoadFunc GwyFileSaveFunc GwyGraphFunc GwyMarkerValidateFunc GwyModuleQueryFunc GwyModuleRegisterFunc GwyNLFitDerFunc GwyNLFitFunc GwyNLFitIdxDiffFunc GwyNLFitIdxFunc GwyProcessFunc GwySaveAuxiliaryCreate GwySaveAuxiliaryDestroy GwySelectionFilterFunc GwySerializeFunc GwySetFractionFunc GwySetMessageFunc [...]
-syn keyword gwyddionDefine GWY_APP_DATA_ID_NONE GWY_APP_SETTINGS_ERROR GWY_CONTAINER_PATHSEP GWY_CONTAINER_PATHSEP_STR GWY_EXPR_ERROR GWY_FILE_DETECT_BUFFER_SIZE GWY_GL_MATERIAL_DEFAULT GWY_GL_MATERIAL_NONE GWY_GRADIENT_DEFAULT GWY_ICON_SIZE_ABOUT GWY_MODULE_ABI_VERSION GWY_MODULE_FILE_ERROR GWY_SQRT3 GWY_SQRT_PI GWY_STOCK_3D_BASE GWY_STOCK_ARITHMETIC GWY_STOCK_BOLD GWY_STOCK_CANTILEVER GWY_STOCK_COLOR_RANGE GWY_STOCK_COLOR_RANGE_ADAPTIVE GWY_STOCK_COLOR_RANGE_AUTO GWY_STOCK_COLOR_RANGE_ [...]
+syn keyword gwyddionMacro GWY_3D_LABEL GWY_3D_LABEL_CLASS GWY_3D_LABEL_GET_CLASS GWY_3D_SETUP GWY_3D_SETUP_CLASS GWY_3D_SETUP_GET_CLASS GWY_3D_VIEW GWY_3D_VIEW_CLASS GWY_3D_VIEW_GET_CLASS GWY_3D_WINDOW GWY_3D_WINDOW_CLASS GWY_3D_WINDOW_GET_CLASS GWY_ADJUST_BAR GWY_ADJUST_BAR_CLASS GWY_ADJUST_BAR_GET_CLASS GWY_AXIS GWY_AXIS_CLASS GWY_AXIS_GET_CLASS GWY_BRICK GWY_BRICK_CLASS GWY_BRICK_GET_CLASS GWY_CALDATA GWY_CALDATA_CLASS GWY_CALDATA_GET_CLASS GWY_CALIBRATION GWY_CALIBRATION_CLASS GWY_CA [...]
+syn keyword gwyddionEnum Gwy2DCWTWaveletType Gwy3DMovement Gwy3DProjection Gwy3DViewLabel Gwy3DVisualization GwyAffineScalingType GwyAppLoggingFlags GwyAppPage GwyAppSettingsError GwyAppWhat GwyAxisScaleFormat GwyByteOrder GwyComputationStateType GwyCorrelationType GwyCurveChannel GwyCurveType GwyDWTDenoiseType GwyDWTType GwyDataCompatibilityFlags GwyDataError GwyDataFieldCached GwyDataItem GwyDataValidateFlags GwyDataViewLayerType GwyDataWatchEventType GwyDebugObjectsDumpFlags GwyDistan [...]
+syn keyword gwyddionUserFunction GwyAppDataForeachFunc GwyAppDataWatchFunc GwyColorAxisMapFunc GwyCoordTransform2DFunc GwyDataChooserFilterFunc GwyDeserializeFunc GwyFileDetectFunc GwyFileLoadFunc GwyFileSaveFunc GwyGraphFunc GwyMarkerValidateFunc GwyModuleBundleRegisterFunc GwyModuleQueryFunc GwyModuleRegisterFunc GwyNLFitDerFunc GwyNLFitFunc GwyNLFitIdxDiffFunc GwyNLFitIdxFunc GwyProcessFunc GwySaveAuxiliaryCreate GwySaveAuxiliaryDestroy GwySelectionFilterFunc GwySerializeFunc GwySetFr [...]
+syn keyword gwyddionDefine GWY_APP_DATA_ID_NONE GWY_APP_SETTINGS_ERROR GWY_CONTAINER_PATHSEP GWY_CONTAINER_PATHSEP_STR GWY_EXPR_ERROR GWY_FILE_DETECT_BUFFER_SIZE GWY_GL_MATERIAL_DEFAULT GWY_GL_MATERIAL_NONE GWY_GRADIENT_DEFAULT GWY_ICON_SIZE_ABOUT GWY_MODULE_ABI_VERSION GWY_MODULE_BUNDLE_FLAG GWY_MODULE_ERROR GWY_MODULE_FILE_ERROR GWY_SQRT3 GWY_SQRT_PI GWY_STOCK_3D_BASE GWY_STOCK_ARITHMETIC GWY_STOCK_BOLD GWY_STOCK_CANTILEVER GWY_STOCK_COLOR_RANGE GWY_STOCK_COLOR_RANGE_ADAPTIVE GWY_STOCK [...]
syn keyword gwyddionDeprecatedFunction gwy_cdline_get_param_default gwy_data_field_area_get_avg gwy_data_field_area_get_median gwy_data_field_area_get_min_max gwy_data_field_area_get_rms gwy_data_field_area_get_stats gwy_data_field_area_get_sum gwy_data_field_area_get_surface_area gwy_data_line_line_rotate gwy_dialog_prevent_delete_cb gwy_get_pango_ft2_font_map
syn keyword gwyddionDeprecatedConstant GWY_TOOL_SWITCH_TOOL GWY_TOOL_SWITCH_WINDOW
syn keyword gwyddionDeprecatedStruct GwyTipModelPreset
diff --git a/data/gwyddion.xml b/data/gwyddion.xml
index 4a22f11..d6a0a73 100644
--- a/data/gwyddion.xml
+++ b/data/gwyddion.xml
@@ -153,6 +153,14 @@
<glob pattern="*.CSM"/>
</mime-type>
+<!-- From module dektakvca.c -->
+<mime-type type="application/x-dektak-opdx">
+ <comment>Dektak OPDx profilometry data</comment>
+ <magic priority="80">
+ <match type="string" offset="0" value="VCA DATA\x01\x00\x00\x55"/>
+ </magic>
+</mime-type>
+
<!-- From module dektakxml.c -->
<mime-type type="application/x-dektak-xml">
<comment>Dektak XML profilometry data</comment>
@@ -231,6 +239,7 @@
</magic>
</mime-type>
+<!-- Module file.c contains no magic. -->
<!-- Module fitsfile.c contains no magic. -->
<!-- From module gdeffile.c -->
<mime-type type="application/x-gdef-spm">
@@ -542,6 +551,7 @@
<comment>Nanoscope III SPM data</comment>
<magic priority="80">
<match type="string" offset="0" value="\\*File list\r\n"/>
+ <match type="string" offset="0" value="\\*EC File list\r\n"/>
<match type="string" offset="0" value="?*File list\r\n"/>
</magic>
</mime-type>
@@ -1073,6 +1083,13 @@
<!-- Module xyzexport.c contains no magic. -->
<!-- Module zeiss.c contains no magic. -->
+<!-- From module zeisslsm.c -->
+<mime-type type="application/x-zeiss-lsm-spm">
+ <comment>Carl Zeiss CLSM images</comment>
+ <glob pattern="*.lsm"/>
+ <glob pattern="*.LSM"/>
+</mime-type>
+
<!-- Module zemax.c contains no magic. -->
<!-- Module hdrimage.cc contains no magic. -->
</mime-info>
diff --git a/data/mingw-gwyddion-libs.spec.in b/data/mingw-gwyddion-libs.spec.in
index 339adb0..9129a27 100644
--- a/data/mingw-gwyddion-libs.spec.in
+++ b/data/mingw-gwyddion-libs.spec.in
@@ -1,4 +1,4 @@
-# @(#) $Id: mingw-gwyddion-libs.spec.in 13928 2012-10-11 16:52:39Z yeti-dn $
+# @(#) $Id: mingw-gwyddion-libs.spec.in 20206 2017-08-09 06:26:30Z yeti-dn $
%{?mingw_package_header}
Name: mingw-gwyddion-libs
@@ -143,6 +143,9 @@ rm $RPM_BUILD_ROOT%{mingw64_libdir}/*.la
%changelog
+* Tue Aug 8 2017 Yeti <yeti at gwyddion.net> - 2.48-2
+- fixed changelog dates
+
* Sat Aug 4 2012 Yeti <yeti at gwyddion.net> - 2.29-1
- Update to F17 mingw-w64 toolchain and RPM macros
- Build Win64 package
@@ -157,5 +160,5 @@ rm $RPM_BUILD_ROOT%{mingw64_libdir}/*.la
* Thu Jan 27 2011 Yeti <yeti at gwyddion.net> - 2.22-1
- Updated to build on openSUSE
-* Tue Dec 2 2010 Yeti <yeti at gwyddion.net> - 2.21-1
+* Thu Dec 2 2010 Yeti <yeti at gwyddion.net> - 2.21-1
- Created
diff --git a/devel-docs/Makefile.in b/devel-docs/Makefile.in
index 1d52cbc..eddef2d 100644
--- a/devel-docs/Makefile.in
+++ b/devel-docs/Makefile.in
@@ -229,10 +229,7 @@ EPYDOC = @EPYDOC@
EXEEXT = @EXEEXT@
EXR_CFLAGS = @EXR_CFLAGS@
EXR_LIBS = @EXR_LIBS@
-FFTW3_1_CFLAGS = @FFTW3_1_CFLAGS@
-FFTW3_1_LIBS = @FFTW3_1_LIBS@
FFTW3_CFLAGS = @FFTW3_CFLAGS@
-FFTW3_DEPENDENCY = @FFTW3_DEPENDENCY@
FFTW3_LIBS = @FFTW3_LIBS@
FGREP = @FGREP@
GCONFTOOL = @GCONFTOOL@
@@ -242,6 +239,8 @@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
GLIBC21 = @GLIBC21@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GMODULE_CFLAGS = @GMODULE_CFLAGS@
GMODULE_LIBS = @GMODULE_LIBS@
GMSGFMT = @GMSGFMT@
@@ -266,7 +265,9 @@ GTK_MAC_LIBS = @GTK_MAC_LIBS@
GWY_VERSION_MAJOR = @GWY_VERSION_MAJOR@
GWY_VERSION_MINOR = @GWY_VERSION_MINOR@
GWY_VERSION_STRING = @GWY_VERSION_STRING@
+HDRIMAGE_EXTRA_CFLAGS = @HDRIMAGE_EXTRA_CFLAGS@
HTML_DIR = @HTML_DIR@
+INKSCAPE = @INKSCAPE@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -324,6 +325,7 @@ PASCAL = @PASCAL@
PATH_SEPARATOR = @PATH_SEPARATOR@
PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
+PNGCRUSH = @PNGCRUSH@
PNG_CFLAGS = @PNG_CFLAGS@
PNG_LIBS = @PNG_LIBS@
POD2MAN = @POD2MAN@
@@ -332,17 +334,13 @@ PYGTK_CFLAGS = @PYGTK_CFLAGS@
PYGTK_CODEGENDIR = @PYGTK_CODEGENDIR@
PYGTK_LIBS = @PYGTK_LIBS@
PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
PYTHON_EXTRA_CFLAGS = @PYTHON_EXTRA_CFLAGS@
PYTHON_INCLUDES = @PYTHON_INCLUDES@
-PYTHON_LIBS = @PYTHON_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
PYTHON_PLATFORM = @PYTHON_PLATFORM@
PYTHON_PREFIX = @PYTHON_PREFIX@
-PYTHON_SYSCFG_BASECFLAGS = @PYTHON_SYSCFG_BASECFLAGS@
-PYTHON_SYSCFG_CCSHARED = @PYTHON_SYSCFG_CCSHARED@
-PYTHON_SYSCFG_LDFLAGS = @PYTHON_SYSCFG_LDFLAGS@
-PYTHON_SYSCFG_LIBDIR = @PYTHON_SYSCFG_LIBDIR@
-PYTHON_SYSCFG_LINKFORSHARED = @PYTHON_SYSCFG_LINKFORSHARED@
PYTHON_VERSION = @PYTHON_VERSION@
RANLIB = @RANLIB@
RUBY = @RUBY@
diff --git a/devel-docs/libgwyapp/Makefile.in b/devel-docs/libgwyapp/Makefile.in
index 6007241..867a610 100644
--- a/devel-docs/libgwyapp/Makefile.in
+++ b/devel-docs/libgwyapp/Makefile.in
@@ -178,10 +178,7 @@ EPYDOC = @EPYDOC@
EXEEXT = @EXEEXT@
EXR_CFLAGS = @EXR_CFLAGS@
EXR_LIBS = @EXR_LIBS@
-FFTW3_1_CFLAGS = @FFTW3_1_CFLAGS@
-FFTW3_1_LIBS = @FFTW3_1_LIBS@
FFTW3_CFLAGS = @FFTW3_CFLAGS@
-FFTW3_DEPENDENCY = @FFTW3_DEPENDENCY@
FFTW3_LIBS = @FFTW3_LIBS@
FGREP = @FGREP@
GCONFTOOL = @GCONFTOOL@
@@ -191,6 +188,8 @@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
GLIBC21 = @GLIBC21@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GMODULE_CFLAGS = @GMODULE_CFLAGS@
GMODULE_LIBS = @GMODULE_LIBS@
GMSGFMT = @GMSGFMT@
@@ -215,7 +214,9 @@ GTK_MAC_LIBS = @GTK_MAC_LIBS@
GWY_VERSION_MAJOR = @GWY_VERSION_MAJOR@
GWY_VERSION_MINOR = @GWY_VERSION_MINOR@
GWY_VERSION_STRING = @GWY_VERSION_STRING@
+HDRIMAGE_EXTRA_CFLAGS = @HDRIMAGE_EXTRA_CFLAGS@
HTML_DIR = @HTML_DIR@
+INKSCAPE = @INKSCAPE@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -273,6 +274,7 @@ PASCAL = @PASCAL@
PATH_SEPARATOR = @PATH_SEPARATOR@
PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
+PNGCRUSH = @PNGCRUSH@
PNG_CFLAGS = @PNG_CFLAGS@
PNG_LIBS = @PNG_LIBS@
POD2MAN = @POD2MAN@
@@ -281,17 +283,13 @@ PYGTK_CFLAGS = @PYGTK_CFLAGS@
PYGTK_CODEGENDIR = @PYGTK_CODEGENDIR@
PYGTK_LIBS = @PYGTK_LIBS@
PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
PYTHON_EXTRA_CFLAGS = @PYTHON_EXTRA_CFLAGS@
PYTHON_INCLUDES = @PYTHON_INCLUDES@
-PYTHON_LIBS = @PYTHON_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
PYTHON_PLATFORM = @PYTHON_PLATFORM@
PYTHON_PREFIX = @PYTHON_PREFIX@
-PYTHON_SYSCFG_BASECFLAGS = @PYTHON_SYSCFG_BASECFLAGS@
-PYTHON_SYSCFG_CCSHARED = @PYTHON_SYSCFG_CCSHARED@
-PYTHON_SYSCFG_LDFLAGS = @PYTHON_SYSCFG_LDFLAGS@
-PYTHON_SYSCFG_LIBDIR = @PYTHON_SYSCFG_LIBDIR@
-PYTHON_SYSCFG_LINKFORSHARED = @PYTHON_SYSCFG_LINKFORSHARED@
PYTHON_VERSION = @PYTHON_VERSION@
RANLIB = @RANLIB@
RUBY = @RUBY@
diff --git a/devel-docs/libgwyapp/html/GwyDataChooser.html b/devel-docs/libgwyapp/html/GwyDataChooser.html
index 0f5c144..100a294 100644
--- a/devel-docs/libgwyapp/html/GwyDataChooser.html
+++ b/devel-docs/libgwyapp/html/GwyDataChooser.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GwyDataChooser: Gwyddion Application Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="prev" href="libgwyapp-data-browser.html" title="data-browser">
@@ -34,7 +34,7 @@
</tr></table></div>
<div class="refsect1">
<a name="GwyDataChooser.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -180,7 +180,7 @@
</div>
<div class="refsect1">
<a name="GwyDataChooser.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -303,7 +303,7 @@ one can use:</p>
<p>The type of data chooser filter function.</p>
<div class="refsect3">
<a name="GwyDataChooserFilterFunc.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -395,7 +395,7 @@ gwy_app_data_id_new (<em class="parameter"><code><a href="/usr/share/gtk-doc/htm
<p>This is mostly useful for language bindings.</p>
<div class="refsect3">
<a name="gwy-app-data-id-new.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -432,7 +432,7 @@ gwy_app_data_id_copy (<em class="parameter"><code><span class="type">GwyAppDataI
<p>This is mostly useful for language bindings.</p>
<div class="refsect3">
<a name="gwy-app-data-id-copy.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -461,7 +461,7 @@ gwy_app_data_id_free (<em class="parameter"><code><span class="type">GwyAppDataI
<p>This is mostly useful for language bindings.</p>
<div class="refsect3">
<a name="gwy-app-data-id-free.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -486,7 +486,7 @@ gwy_data_chooser_set_active (<em class="parameter"><code><a class="link" href="G
<p>Selects a data in a data chooser.</p>
<div class="refsect3">
<a name="gwy-data-chooser-set-active.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -527,7 +527,7 @@ gwy_data_chooser_get_active (<em class="parameter"><code><a class="link" href="G
<p>Gets the selected item in a data chooser.</p>
<div class="refsect3">
<a name="gwy-data-chooser-get-active.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -564,7 +564,7 @@ gwy_data_chooser_set_active_id (<em class="parameter"><code><a class="link" href
is permitted as a request to select the ‘none’ item.</p>
<div class="refsect3">
<a name="gwy-data-chooser-set-active-id.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -599,7 +599,7 @@ gwy_data_chooser_get_active_id (<em class="parameter"><code><a class="link" href
<p>Gets the selected item in a data chooser as numerical identifiers.</p>
<div class="refsect3">
<a name="gwy-data-chooser-get-active-id.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -642,7 +642,7 @@ gwy_data_chooser_set_filter (<em class="parameter"><code><a class="link" href="G
external state and that changes.</p>
<div class="refsect3">
<a name="gwy-data-chooser-set-filter.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -683,7 +683,7 @@ gwy_data_chooser_get_none (<em class="parameter"><code><a class="link" href="Gwy
<p>Gets the label of the item corresponding to no data.</p>
<div class="refsect3">
<a name="gwy-data-chooser-get-none.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -711,7 +711,7 @@ gwy_data_chooser_set_none (<em class="parameter"><code><a class="link" href="Gwy
<p>Sets the label of the item corresponding to no data.</p>
<div class="refsect3">
<a name="gwy-data-chooser-set-none.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -746,7 +746,7 @@ gwy_data_chooser_get_filter (<em class="parameter"><code><a class="link" href="G
changes. However, <a class="link" href="GwyDataChooser.html#gwy-data-chooser-refilter" title="gwy_data_chooser_refilter ()"><code class="function">gwy_data_chooser_refilter()</code></a> is usually more useful.</p>
<div class="refsect3">
<a name="gwy-data-chooser-get-filter.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -779,7 +779,7 @@ contains some items then an arbitrary item is selected. At present, this
means the first item in the list.</p>
<div class="refsect3">
<a name="gwy-data-chooser-refilter.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwyapp/html/GwyPlainTool.html b/devel-docs/libgwyapp/html/GwyPlainTool.html
index 66daa8f..2ba16a4 100644
--- a/devel-docs/libgwyapp/html/GwyPlainTool.html
+++ b/devel-docs/libgwyapp/html/GwyPlainTool.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GwyPlainTool: Gwyddion Application Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="prev" href="GwyTool.html" title="GwyTool">
@@ -34,7 +34,7 @@
</tr></table></div>
<div class="refsect1">
<a name="GwyPlainTool.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -140,7 +140,7 @@
</div>
<div class="refsect1">
<a name="GwyPlainTool.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -196,7 +196,7 @@ it sets <em class="parameter"><code>init_failed</code></em>
initialization and it should not be called again once it fails.</p>
<div class="refsect3">
<a name="gwy-plain-tool-check-layer-type.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -243,7 +243,7 @@ sure the <em class="parameter"><code>selection</code></em>
tool instance once this method was called to set up the selection tracking.</p>
<div class="refsect3">
<a name="gwy-plain-tool-connect-selection.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -281,7 +281,7 @@ gwy_plain_tool_ensure_layer (<em class="parameter"><code><a class="link" href="G
<a class="link" href="GwyPlainTool.html#gwy-plain-tool-connect-selection" title="gwy_plain_tool_connect_selection ()"><code class="function">gwy_plain_tool_connect_selection()</code></a>.</p>
<div class="refsect3">
<a name="gwy-plain-tool-ensure-layer.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -314,7 +314,7 @@ gwy_plain_tool_set_selection_key (<em class="parameter"><code><a class="link" hr
<a class="link" href="GwyPlainTool.html#gwy-plain-tool-connect-selection" title="gwy_plain_tool_connect_selection ()"><code class="function">gwy_plain_tool_connect_selection()</code></a>.</p>
<div class="refsect3">
<a name="gwy-plain-tool-set-selection-key.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -350,7 +350,7 @@ gwy_plain_tool_add_clear_button (<em class="parameter"><code><a class="link" hre
yourself add the button with <a href="/usr/share/gtk-doc/html/gtk3GtkDialog.html#gtk-dialog-add-button"><code class="function">gtk_dialog_add_button()</code></a>.</p>
<div class="refsect3">
<a name="gwy-plain-tool-add-clear-button.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -381,7 +381,7 @@ gwy_plain_tool_get_z_average (<em class="parameter"><code><a href="../GwyDataFie
(it is simply not counted in), however the intersection have to be nonempty.</p>
<div class="refsect3">
<a name="gwy-plain-tool-get-z-average.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -423,7 +423,7 @@ gwy_plain_tool_enable_object_deletion (<em class="parameter"><code><a class="lin
diplaying them.</p>
<div class="refsect3">
<a name="gwy-plain-tool-enable-object-deletion.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -457,7 +457,7 @@ gwy_rect_selection_labels_new (<em class="parameter"><code><a href="/usr/share/g
<p>The returned object will destroy itself when the table is destroyed.</p>
<div class="refsect3">
<a name="gwy-rect-selection-labels-new.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -498,7 +498,7 @@ gwy_rect_selection_labels_get_table (<em class="parameter"><code><a class="link"
<p>Gets the table widget of a rectangular selection information.</p>
<div class="refsect3">
<a name="gwy-rect-selection-labels-get-table.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -526,7 +526,7 @@ gwy_rect_selection_labels_select (<em class="parameter"><code><a class="link" hr
<p>Updates selection data using rectangular selection information table.</p>
<div class="refsect3">
<a name="gwy-rect-selection-labels-select.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -570,7 +570,7 @@ will be still cleared as there is no way to convert between real and
pixel coordinates.</p>
<div class="refsect3">
<a name="gwy-rect-selection-labels-fill.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -628,7 +628,7 @@ the source and target ids are the same. In more complex cases you have to
use <a class="link" href="libgwyapp-log.html#gwy-app-channel-log-add" title="gwy_app_channel_log_add ()"><code class="function">gwy_app_channel_log_add()</code></a> directly.</p>
<div class="refsect3">
<a name="gwy-plain-tool-log-add.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -675,7 +675,7 @@ use <a class="link" href="libgwyapp-log.html#gwy-app-channel-log-add" title="gwy
<p>The type of pending changes that accumulated during tool inactivity.</p>
<div class="refsect3">
<a name="GwyPlainToolChanged.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
diff --git a/devel-docs/libgwyapp/html/GwyResourceEditor.html b/devel-docs/libgwyapp/html/GwyResourceEditor.html
index 7388937..365fef4 100644
--- a/devel-docs/libgwyapp/html/GwyResourceEditor.html
+++ b/devel-docs/libgwyapp/html/GwyResourceEditor.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GwyResourceEditor: Gwyddion Application Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="prev" href="libgwyapp-funcuse.html" title="funcuse">
@@ -35,7 +35,7 @@
</tr></table></div>
<div class="refsect1">
<a name="GwyResourceEditor.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -86,7 +86,7 @@
</div>
<div class="refsect1">
<a name="GwyResourceEditor.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -144,7 +144,7 @@ gwy_resource_editor_get_edited (<em class="parameter"><code><a class="link" href
<p>It is an error to call this method when no resource is being edited.</p>
<div class="refsect3">
<a name="gwy-resource-editor-get-edited.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -175,7 +175,7 @@ changes some editor property.</p>
commit a change, call this method and then <a class="link" href="GwyResourceEditor.html#gwy-resource-editor-commit" title="gwy_resource_editor_commit ()"><code class="function">gwy_resource_editor_commit()</code></a>.</p>
<div class="refsect3">
<a name="gwy-resource-editor-queue-commit.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -204,7 +204,7 @@ resource is deleted, before a resource is renamed. When a resource is newly
created, it is immediately created on disk too.</p>
<div class="refsect3">
<a name="gwy-resource-editor-commit.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -232,7 +232,7 @@ gwy_resource_editor_setup (<em class="parameter"><code><a class="link" href="Gwy
To be called in particular resource initialization methods.</p>
<div class="refsect3">
<a name="gwy-resource-editor-setup.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -256,7 +256,7 @@ gwy_resource_editor_class_setup (<em class="parameter"><code><a class="link" hre
To be called in particular class initialization methods.</p>
<div class="refsect3">
<a name="gwy-resource-editor-class-setup.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -306,7 +306,7 @@ To be called in particular class initialization methods.</p>
<p>The resource editor class.</p>
<div class="refsect3">
<a name="GwyResourceEditorClass.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="struct_members_name">
<col class="struct_members_description">
diff --git a/devel-docs/libgwyapp/html/GwyTool.html b/devel-docs/libgwyapp/html/GwyTool.html
index f99a2b1..ba2df5f 100644
--- a/devel-docs/libgwyapp/html/GwyTool.html
+++ b/devel-docs/libgwyapp/html/GwyTool.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GwyTool: Gwyddion Application Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="prev" href="libgwyapp-logging.html" title="logging">
@@ -34,7 +34,7 @@
</tr></table></div>
<div class="refsect1">
<a name="GwyTool.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -122,7 +122,7 @@
</div>
<div class="refsect1">
<a name="GwyTool.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -173,7 +173,7 @@ for informational-only tools. In that case Hide should become the default
dialog button.</p>
<div class="refsect3">
<a name="gwy-tool-add-hide-button.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -202,7 +202,7 @@ gwy_tool_show (<em class="parameter"><code><a class="link" href="GwyTool.html" t
<p>Shows a tool's dialog.</p>
<div class="refsect3">
<a name="gwy-tool-show.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -224,7 +224,7 @@ gwy_tool_hide (<em class="parameter"><code><a class="link" href="GwyTool.html" t
<p>Hides a tool's dialog.</p>
<div class="refsect3">
<a name="gwy-tool-hide.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -246,7 +246,7 @@ gwy_tool_is_visible (<em class="parameter"><code><a class="link" href="GwyTool.h
<p>Checks whether a tool dialog is visible.</p>
<div class="refsect3">
<a name="gwy-tool-is-visible.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -277,7 +277,7 @@ to the mode appropriate for <em class="parameter"><code>tool</code></em>
.</p>
<div class="refsect3">
<a name="gwy-tool-data-switched.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -309,7 +309,7 @@ gwy_tool_spectra_switched (<em class="parameter"><code><a class="link" href="Gwy
as the currently active channel.</p>
<div class="refsect3">
<a name="gwy-tool-spectra-switched.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -344,7 +344,7 @@ exists so there is no abiguity which dialog position should be saved and
restored.</p>
<div class="refsect3">
<a name="gwy-tool-restore-screen-position.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -368,7 +368,7 @@ gwy_tool_class_get_title (<em class="parameter"><code><a class="link" href="GwyT
<p>The title is normally used as a tool dialog title.</p>
<div class="refsect3">
<a name="gwy-tool-class-get-title.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -394,7 +394,7 @@ gwy_tool_class_get_stock_id (<em class="parameter"><code><a class="link" href="G
<p>Gets the icon stock id of a tool class (this is a class method).</p>
<div class="refsect3">
<a name="gwy-tool-class-get-stock-id.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -420,7 +420,7 @@ gwy_tool_class_get_tooltip (<em class="parameter"><code><a class="link" href="Gw
<p>Gets the title of a tool class (this is a class method).</p>
<div class="refsect3">
<a name="gwy-tool-class-get-tooltip.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -483,7 +483,7 @@ and restores them automatically, these values essentially apply only to the
first use of a tool.</p>
<div class="refsect3">
<a name="GwyToolClass.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="struct_members_name">
<col class="struct_members_description">
@@ -576,7 +576,7 @@ responses from their specific buttons.</p></td>
are encouraged to use them for consistency.</p>
<div class="refsect3">
<a name="GwyToolResponseType.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
diff --git a/devel-docs/libgwyapp/html/api-index-2-14.html b/devel-docs/libgwyapp/html/api-index-2-14.html
index 7e636e1..7cec55f 100644
--- a/devel-docs/libgwyapp/html/api-index-2-14.html
+++ b/devel-docs/libgwyapp/html/api-index-2-14.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.14: Gwyddion Application Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="prev" href="api-index-2-9.html" title="Index of new symbols in 2.9">
diff --git a/devel-docs/libgwyapp/html/api-index-2-18.html b/devel-docs/libgwyapp/html/api-index-2-18.html
index ddf2cb6..87b924b 100644
--- a/devel-docs/libgwyapp/html/api-index-2-18.html
+++ b/devel-docs/libgwyapp/html/api-index-2-18.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.18: Gwyddion Application Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="prev" href="api-index-2-14.html" title="Index of new symbols in 2.14">
diff --git a/devel-docs/libgwyapp/html/api-index-2-21.html b/devel-docs/libgwyapp/html/api-index-2-21.html
index ef0a43a..ca55ee9 100644
--- a/devel-docs/libgwyapp/html/api-index-2-21.html
+++ b/devel-docs/libgwyapp/html/api-index-2-21.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.21: Gwyddion Application Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="prev" href="api-index-2-18.html" title="Index of new symbols in 2.18">
diff --git a/devel-docs/libgwyapp/html/api-index-2-23.html b/devel-docs/libgwyapp/html/api-index-2-23.html
index fba5ed8..e147f3f 100644
--- a/devel-docs/libgwyapp/html/api-index-2-23.html
+++ b/devel-docs/libgwyapp/html/api-index-2-23.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.23: Gwyddion Application Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="prev" href="api-index-2-21.html" title="Index of new symbols in 2.21">
diff --git a/devel-docs/libgwyapp/html/api-index-2-3.html b/devel-docs/libgwyapp/html/api-index-2-3.html
index 9f8970f..a11905d 100644
--- a/devel-docs/libgwyapp/html/api-index-2-3.html
+++ b/devel-docs/libgwyapp/html/api-index-2-3.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.3: Gwyddion Application Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="prev" href="api-index-all.html" title="Index of all symbols">
diff --git a/devel-docs/libgwyapp/html/api-index-2-32.html b/devel-docs/libgwyapp/html/api-index-2-32.html
index ba4788b..5cc372b 100644
--- a/devel-docs/libgwyapp/html/api-index-2-32.html
+++ b/devel-docs/libgwyapp/html/api-index-2-32.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.32: Gwyddion Application Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="prev" href="api-index-2-23.html" title="Index of new symbols in 2.23">
diff --git a/devel-docs/libgwyapp/html/api-index-2-33.html b/devel-docs/libgwyapp/html/api-index-2-33.html
index 22de8fe..c25149b 100644
--- a/devel-docs/libgwyapp/html/api-index-2-33.html
+++ b/devel-docs/libgwyapp/html/api-index-2-33.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.33: Gwyddion Application Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="prev" href="api-index-2-32.html" title="Index of new symbols in 2.32">
diff --git a/devel-docs/libgwyapp/html/api-index-2-35.html b/devel-docs/libgwyapp/html/api-index-2-35.html
index f628a7f..59fe3a8 100644
--- a/devel-docs/libgwyapp/html/api-index-2-35.html
+++ b/devel-docs/libgwyapp/html/api-index-2-35.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.35: Gwyddion Application Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="prev" href="api-index-2-33.html" title="Index of new symbols in 2.33">
diff --git a/devel-docs/libgwyapp/html/api-index-2-38.html b/devel-docs/libgwyapp/html/api-index-2-38.html
index 226424b..e155e0e 100644
--- a/devel-docs/libgwyapp/html/api-index-2-38.html
+++ b/devel-docs/libgwyapp/html/api-index-2-38.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.38: Gwyddion Application Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="prev" href="api-index-2-35.html" title="Index of new symbols in 2.35">
diff --git a/devel-docs/libgwyapp/html/api-index-2-41.html b/devel-docs/libgwyapp/html/api-index-2-41.html
index 46e8012..dacccc1 100644
--- a/devel-docs/libgwyapp/html/api-index-2-41.html
+++ b/devel-docs/libgwyapp/html/api-index-2-41.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.41: Gwyddion Application Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="prev" href="api-index-2-38.html" title="Index of new symbols in 2.38">
diff --git a/devel-docs/libgwyapp/html/api-index-2-42.html b/devel-docs/libgwyapp/html/api-index-2-42.html
index 5a2e708..d3f8423 100644
--- a/devel-docs/libgwyapp/html/api-index-2-42.html
+++ b/devel-docs/libgwyapp/html/api-index-2-42.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.42: Gwyddion Application Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="prev" href="api-index-2-41.html" title="Index of new symbols in 2.41">
diff --git a/devel-docs/libgwyapp/html/api-index-2-43.html b/devel-docs/libgwyapp/html/api-index-2-43.html
index 4755321..5a8947c 100644
--- a/devel-docs/libgwyapp/html/api-index-2-43.html
+++ b/devel-docs/libgwyapp/html/api-index-2-43.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.43: Gwyddion Application Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="prev" href="api-index-2-42.html" title="Index of new symbols in 2.42">
diff --git a/devel-docs/libgwyapp/html/api-index-2-45.html b/devel-docs/libgwyapp/html/api-index-2-45.html
index eeef3bd..3fda045 100644
--- a/devel-docs/libgwyapp/html/api-index-2-45.html
+++ b/devel-docs/libgwyapp/html/api-index-2-45.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.45: Gwyddion Application Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="prev" href="api-index-2-43.html" title="Index of new symbols in 2.43">
diff --git a/devel-docs/libgwyapp/html/api-index-2-46.html b/devel-docs/libgwyapp/html/api-index-2-46.html
index 73f9b59..5d27743 100644
--- a/devel-docs/libgwyapp/html/api-index-2-46.html
+++ b/devel-docs/libgwyapp/html/api-index-2-46.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.46: Gwyddion Application Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="prev" href="api-index-2-45.html" title="Index of new symbols in 2.45">
diff --git a/devel-docs/libgwyapp/html/api-index-2-47.html b/devel-docs/libgwyapp/html/api-index-2-47.html
index 9baafde..63ffe4c 100644
--- a/devel-docs/libgwyapp/html/api-index-2-47.html
+++ b/devel-docs/libgwyapp/html/api-index-2-47.html
@@ -3,10 +3,11 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.47: Gwyddion Application Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="prev" href="api-index-2-46.html" title="Index of new symbols in 2.46">
+<link rel="next" href="api-index-2-48.html" title="Index of new symbols in 2.48">
<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
@@ -16,7 +17,7 @@
<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
<td><img src="up-insensitive.png" width="16" height="16" border="0"></td>
<td><a accesskey="p" href="api-index-2-46.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><img src="right-insensitive.png" width="16" height="16" border="0"></td>
+<td><a accesskey="n" href="api-index-2-48.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
</tr></table>
<div class="index">
<div class="titlepage"><div><div><h1 class="title">
diff --git a/devel-docs/libgwyapp/html/api-index-2-48.html b/devel-docs/libgwyapp/html/api-index-2-48.html
new file mode 100644
index 0000000..0ec5ade
--- /dev/null
+++ b/devel-docs/libgwyapp/html/api-index-2-48.html
@@ -0,0 +1,42 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Index of new symbols in 2.48: Gwyddion Application Library Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
+<link rel="home" href="index.html" title="Gwyddion Application Library Reference Manual">
+<link rel="up" href="index.html" title="Gwyddion Application Library Reference Manual">
+<link rel="prev" href="api-index-2-47.html" title="Index of new symbols in 2.47">
+<link rel="next" href="api-index-2-49.html" title="Index of new symbols in 2.49">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts"><span id="nav_index"><a class="shortcut" href="#idxA">A</a></span></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><img src="up-insensitive.png" width="16" height="16" border="0"></td>
+<td><a accesskey="p" href="api-index-2-47.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="api-index-2-49.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="index">
+<div class="titlepage"><div><div><h1 class="title">
+<a name="api-index-2-48"></a>Index of new symbols in 2.48</h1></div></div></div>
+<a name="idx"></a><a name="idxA"></a><h3 class="title">A</h3>
+<dt>
+<a class="link" href="libgwyapp-data-browser.html#gwy-app-sync-data-itemsv" title="gwy_app_sync_data_itemsv ()">gwy_app_sync_data_itemsv</a>, function in <a class="link" href="libgwyapp-data-browser.html" title="data-browser">data-browser</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libgwyapp-wait.html#gwy-app-wait-get-enabled" title="gwy_app_wait_get_enabled ()">gwy_app_wait_get_enabled</a>, function in <a class="link" href="libgwyapp-wait.html" title="wait">wait</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libgwyapp-wait.html#gwy-app-wait-set-enabled" title="gwy_app_wait_set_enabled ()">gwy_app_wait_set_enabled</a>, function in <a class="link" href="libgwyapp-wait.html" title="wait">wait</a>
+</dt>
+<dd></dd>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.19</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/devel-docs/libgwyapp/html/api-index-2-49.html b/devel-docs/libgwyapp/html/api-index-2-49.html
new file mode 100644
index 0000000..b8dad6c
--- /dev/null
+++ b/devel-docs/libgwyapp/html/api-index-2-49.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Index of new symbols in 2.49: Gwyddion Application Library Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
+<link rel="home" href="index.html" title="Gwyddion Application Library Reference Manual">
+<link rel="up" href="index.html" title="Gwyddion Application Library Reference Manual">
+<link rel="prev" href="api-index-2-48.html" title="Index of new symbols in 2.48">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts"><span id="nav_index"><a class="shortcut" href="#idxA">A</a></span></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><img src="up-insensitive.png" width="16" height="16" border="0"></td>
+<td><a accesskey="p" href="api-index-2-48.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><img src="right-insensitive.png" width="16" height="16" border="0"></td>
+</tr></table>
+<div class="index">
+<div class="titlepage"><div><div><h1 class="title">
+<a name="api-index-2-49"></a>Index of new symbols in 2.49</h1></div></div></div>
+<a name="idx"></a><a name="idxA"></a><h3 class="title">A</h3>
+<dt>
+<a class="link" href="libgwyapp-wait.html#gwy-app-wait-was-canceled" title="gwy_app_wait_was_canceled ()">gwy_app_wait_was_canceled</a>, function in <a class="link" href="libgwyapp-wait.html" title="wait">wait</a>
+</dt>
+<dd></dd>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.19</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/devel-docs/libgwyapp/html/api-index-2-7.html b/devel-docs/libgwyapp/html/api-index-2-7.html
index db27a96..9aa4b0c 100644
--- a/devel-docs/libgwyapp/html/api-index-2-7.html
+++ b/devel-docs/libgwyapp/html/api-index-2-7.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.7: Gwyddion Application Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="prev" href="api-index-2-3.html" title="Index of new symbols in 2.3">
diff --git a/devel-docs/libgwyapp/html/api-index-2-9.html b/devel-docs/libgwyapp/html/api-index-2-9.html
index 7d6080c..a5cbf98 100644
--- a/devel-docs/libgwyapp/html/api-index-2-9.html
+++ b/devel-docs/libgwyapp/html/api-index-2-9.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.9: Gwyddion Application Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="prev" href="api-index-2-7.html" title="Index of new symbols in 2.7">
diff --git a/devel-docs/libgwyapp/html/api-index-all.html b/devel-docs/libgwyapp/html/api-index-all.html
index 6f72faf..2905629 100644
--- a/devel-docs/libgwyapp/html/api-index-all.html
+++ b/devel-docs/libgwyapp/html/api-index-all.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of all symbols: Gwyddion Application Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="prev" href="libgwyapp-wait.html" title="wait">
@@ -744,6 +744,10 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="libgwyapp-data-browser.html#gwy-app-sync-data-itemsv" title="gwy_app_sync_data_itemsv ()">gwy_app_sync_data_itemsv</a>, function in <a class="link" href="libgwyapp-data-browser.html" title="data-browser">data-browser</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="libgwyapp-undo.html#gwy-app-undo-checkpoint" title="gwy_app_undo_checkpoint ()">gwy_app_undo_checkpoint</a>, function in <a class="link" href="libgwyapp-undo.html" title="undo">undo</a>
</dt>
<dd></dd>
@@ -792,6 +796,14 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="libgwyapp-wait.html#gwy-app-wait-get-enabled" title="gwy_app_wait_get_enabled ()">gwy_app_wait_get_enabled</a>, function in <a class="link" href="libgwyapp-wait.html" title="wait">wait</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libgwyapp-wait.html#gwy-app-wait-set-enabled" title="gwy_app_wait_set_enabled ()">gwy_app_wait_set_enabled</a>, function in <a class="link" href="libgwyapp-wait.html" title="wait">wait</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="libgwyapp-wait.html#gwy-app-wait-set-fraction" title="gwy_app_wait_set_fraction ()">gwy_app_wait_set_fraction</a>, function in <a class="link" href="libgwyapp-wait.html" title="wait">wait</a>
</dt>
<dd></dd>
@@ -808,6 +820,10 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="libgwyapp-wait.html#gwy-app-wait-was-canceled" title="gwy_app_wait_was_canceled ()">gwy_app_wait_was_canceled</a>, function in <a class="link" href="libgwyapp-wait.html" title="wait">wait</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="libgwyapp-log.html#gwy-app-xyz-log-add" title="gwy_app_xyz_log_add ()">gwy_app_xyz_log_add</a>, function in <a class="link" href="libgwyapp-log.html" title="log">log</a>
</dt>
<dd></dd>
diff --git a/devel-docs/libgwyapp/html/index.html b/devel-docs/libgwyapp/html/index.html
index 958febe..c5dd32e 100644
--- a/devel-docs/libgwyapp/html/index.html
+++ b/devel-docs/libgwyapp/html/index.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Gwyddion Application Library Reference Manual: Gwyddion Application Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="next" href="libgwyapp-app.html" title="app">
<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
@@ -15,7 +15,7 @@
<div>
<div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">Gwyddion Application Library Reference Manual</p></th></tr></table></div>
<div><p class="releaseinfo">
- For Gwyddion 2.47.
+ For Gwyddion 2.49.
The latest version of this document can be found on-line at
<a class="ulink" href="http://gwyddion.net/documentation/libgwyapp/index.php" target="_top">http://gwyddion.net/documentation/libgwyapp/</a>.
</p></div>
@@ -107,6 +107,8 @@
<dt><span class="index"><a href="api-index-2-45.html">Index of new symbols in 2.45</a></span></dt>
<dt><span class="index"><a href="api-index-2-46.html">Index of new symbols in 2.46</a></span></dt>
<dt><span class="index"><a href="api-index-2-47.html">Index of new symbols in 2.47</a></span></dt>
+<dt><span class="index"><a href="api-index-2-48.html">Index of new symbols in 2.48</a></span></dt>
+<dt><span class="index"><a href="api-index-2-49.html">Index of new symbols in 2.49</a></span></dt>
</dl></div>
</div>
<div class="footer">
diff --git a/devel-docs/libgwyapp/html/libgwyapp-GwyGLMaterialEditor.html b/devel-docs/libgwyapp/html/libgwyapp-GwyGLMaterialEditor.html
index 4874e92..ad60a25 100644
--- a/devel-docs/libgwyapp/html/libgwyapp-GwyGLMaterialEditor.html
+++ b/devel-docs/libgwyapp/html/libgwyapp-GwyGLMaterialEditor.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GwyGLMaterialEditor: Gwyddion Application Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="prev" href="GwyResourceEditor.html" title="GwyResourceEditor">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwyapp-GwyGLMaterialEditor.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
diff --git a/devel-docs/libgwyapp/html/libgwyapp-GwyGradientEditor.html b/devel-docs/libgwyapp/html/libgwyapp-GwyGradientEditor.html
index 94ecbd0..4bb6dfc 100644
--- a/devel-docs/libgwyapp/html/libgwyapp-GwyGradientEditor.html
+++ b/devel-docs/libgwyapp/html/libgwyapp-GwyGradientEditor.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GwyGradientEditor: Gwyddion Application Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="prev" href="libgwyapp-GwyGLMaterialEditor.html" title="GwyGLMaterialEditor">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwyapp-GwyGradientEditor.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
diff --git a/devel-docs/libgwyapp/html/libgwyapp-Validate.html b/devel-docs/libgwyapp/html/libgwyapp-Validate.html
index ade70cc..2301a88 100644
--- a/devel-docs/libgwyapp/html/libgwyapp-Validate.html
+++ b/devel-docs/libgwyapp/html/libgwyapp-Validate.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Validate: Gwyddion Application Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="prev" href="libgwyapp-file-module-utils.html" title="file module utils">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwyapp-Validate.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -67,7 +67,7 @@
</div>
<div class="refsect1">
<a name="libgwyapp-Validate.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -117,7 +117,7 @@ corrected. At present correctable problems are those that can be fixed
by removal of the offending data.</p>
<div class="refsect3">
<a name="gwy-data-validate.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -163,7 +163,7 @@ gwy_data_error_desrcibe (<em class="parameter"><code><a class="link" href="libgw
<p>Describes a data validation error type.</p>
<div class="refsect3">
<a name="gwy-data-error-desrcibe.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -194,7 +194,7 @@ gwy_data_validation_failure_list_free (<em class="parameter"><code><a href="http
<p>Frees a data validation failure list.</p>
<div class="refsect3">
<a name="gwy-data-validation-failure-list-free.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -217,7 +217,7 @@ gwy_data_validation_failure_list_free (<em class="parameter"><code><a href="http
<p>Type of data validation errors.</p>
<div class="refsect3">
<a name="GwyDataError.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
@@ -301,7 +301,7 @@ gwy_data_validation_failure_list_free (<em class="parameter"><code><a href="http
is present too.</p>
<div class="refsect3">
<a name="GwyDataValidateFlags.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
@@ -368,7 +368,7 @@ gwy_data_validation_failure_list_free (<em class="parameter"><code><a href="http
<p>Note the structure may contain more private fields.</p>
<div class="refsect3">
<a name="GwyDataValidationFailure.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="struct_members_name">
<col class="struct_members_description">
diff --git a/devel-docs/libgwyapp/html/libgwyapp-app.html b/devel-docs/libgwyapp/html/libgwyapp-app.html
index 7d1440c..d1d5d0a 100644
--- a/devel-docs/libgwyapp/html/libgwyapp-app.html
+++ b/devel-docs/libgwyapp/html/libgwyapp-app.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>app: Gwyddion Application Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="prev" href="index.html" title="Gwyddion Application Library Reference Manual">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwyapp-app.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -148,7 +148,7 @@ gwy_app_switch_tool (<em class="parameter"><code>const <a href="http://developer
visible.</p>
<div class="refsect3">
<a name="gwy-app-switch-tool.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -189,7 +189,7 @@ gwy_app_add_main_accel_group (<em class="parameter"><code><a href="http://develo
<p>This includes accelerators for terminating Gwyddion, opening files, etc.</p>
<div class="refsect3">
<a name="gwy-app-add-main-accel-group.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -216,7 +216,7 @@ gwy_app_save_window_position (<em class="parameter"><code><a href="http://develo
is too suspicious, it is not saved.</p>
<div class="refsect3">
<a name="gwy-app-save-window-position.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -266,7 +266,7 @@ shown, second time immediately after showing the window.</p>
size is too suspicious, it is not restored.</p>
<div class="refsect3">
<a name="gwy-app-restore-window-position.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -315,7 +315,7 @@ gwy_app_data_view_change_mask_color (<em class="parameter"><code><a href="../Gwy
possibly taking the initial color from settings.</p>
<div class="refsect3">
<a name="gwy-app-data-view-change-mask-color.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -377,7 +377,7 @@ settings loading, and
module registration.</p>
<div class="refsect3">
<a name="gwy-app-init-common.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwyapp/html/libgwyapp-data-browser.html b/devel-docs/libgwyapp/html/libgwyapp-data-browser.html
index 0125dfa..78b96df 100644
--- a/devel-docs/libgwyapp/html/libgwyapp-data-browser.html
+++ b/devel-docs/libgwyapp/html/libgwyapp-data-browser.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>data-browser: Gwyddion Application Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="prev" href="libgwyapp-app.html" title="app">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwyapp-data-browser.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -345,6 +345,14 @@
</tr>
<tr>
<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="libgwyapp-data-browser.html#gwy-app-sync-data-itemsv" title="gwy_app_sync_data_itemsv ()">gwy_app_sync_data_itemsv</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>
</td>
<td class="function_name">
@@ -716,7 +724,7 @@
</div>
<div class="refsect1">
<a name="libgwyapp-data-browser.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -794,7 +802,7 @@ only data actually displayed can be ‘current’.</p>
<p>Type of function passed to <a class="link" href="libgwyapp-data-browser.html#gwy-app-data-browser-foreach" title="gwy_app_data_browser_foreach ()"><code class="function">gwy_app_data_browser_foreach()</code></a>.</p>
<div class="refsect3">
<a name="GwyAppDataForeachFunc.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -826,7 +834,7 @@ only data actually displayed can be ‘current’.</p>
<p>Type of function passed to <a class="link" href="libgwyapp-data-browser.html#gwy-app-data-browser-add-channel-watch" title="gwy_app_data_browser_add_channel_watch ()"><code class="function">gwy_app_data_browser_add_channel_watch()</code></a>.</p>
<div class="refsect3">
<a name="GwyAppDataWatchFunc.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -863,7 +871,7 @@ gwy_app_data_browser_add (<em class="parameter"><code><a href="../GwyContainer.h
yours.</p>
<div class="refsect3">
<a name="gwy-app-data-browser-add.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -885,7 +893,7 @@ gwy_app_data_browser_remove (<em class="parameter"><code><a href="../GwyContaine
<p>Removed a data container from the application data browser.</p>
<div class="refsect3">
<a name="gwy-app-data-browser-remove.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -907,7 +915,7 @@ gwy_app_data_browser_merge (<em class="parameter"><code><a href="../GwyContainer
<p>Merges the data from a data container to the current one.</p>
<div class="refsect3">
<a name="gwy-app-data-browser-merge.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -932,7 +940,7 @@ gwy_app_data_browser_get (<em class="parameter"><code><a href="/usr/share/gtk-do
See its documentation for discussion.</p>
<div class="refsect3">
<a name="gwy-app-data-browser-get.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -968,7 +976,7 @@ does not make sense to store it to the settings or other kinds of permanent
storage.</p>
<div class="refsect3">
<a name="gwy-app-data-browser-get-number.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1000,7 +1008,7 @@ gwy_app_data_browser_reset_visibility (<em class="parameter"><code><a href="../G
<p>Resets visibility of all data objects in a container.</p>
<div class="refsect3">
<a name="gwy-app-data-browser-reset-visibility.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1040,7 +1048,7 @@ its finalization. By setting <em class="parameter"><code>keep_invisible</code><
made to sit in the browser indefinitely.</p>
<div class="refsect3">
<a name="gwy-app-data-browser-set-keep-invisible.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1072,7 +1080,7 @@ gwy_app_data_browser_get_keep_invisible
<p>Gets data browser behaviour for inaccessible data.</p>
<div class="refsect3">
<a name="gwy-app-data-browser-get-keep-invisible.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1101,7 +1109,7 @@ and selects <em class="parameter"><code>data_view</code></em>
's data in the channel list.</p>
<div class="refsect3">
<a name="gwy-app-data-browser-select-data-view.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1126,7 +1134,7 @@ and selects <em class="parameter"><code>graph</code></em>
's data in the graph list.</p>
<div class="refsect3">
<a name="gwy-app-data-browser-select-graph.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1154,7 +1162,7 @@ container than those of the currently active channel, so do not try that
for now.</p>
<div class="refsect3">
<a name="gwy-app-data-browser-select-spectra.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1179,7 +1187,7 @@ and selects <em class="parameter"><code>data_view</code></em>
's volume data in the graph list.</p>
<div class="refsect3">
<a name="gwy-app-data-browser-select-volume.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1204,7 +1212,7 @@ and selects <em class="parameter"><code>data_view</code></em>
's XYZ data in the graph list.</p>
<div class="refsect3">
<a name="gwy-app-data-browser-select-xyz.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1233,7 +1241,7 @@ release your reference, especially when done as the ‘create output’ step of
a module function.</p>
<div class="refsect3">
<a name="gwy-app-data-browser-add-data-field.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1279,7 +1287,7 @@ release your reference, especially when done as the ‘create output’ step of
a module function.</p>
<div class="refsect3">
<a name="gwy-app-data-browser-add-graph-model.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1325,7 +1333,7 @@ release your reference, especially when done as the ‘create output’ step of
a module function.</p>
<div class="refsect3">
<a name="gwy-app-data-browser-add-spectra.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1374,7 +1382,7 @@ usually you will want to release your reference, especially when done as the
‘create output’ step of a module function.</p>
<div class="refsect3">
<a name="gwy-app-data-browser-add-brick.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1431,7 +1439,7 @@ release your reference, especially when done as the ‘create output’ step of
a module function.</p>
<div class="refsect3">
<a name="gwy-app-data-browser-add-surface.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1489,7 +1497,7 @@ achieve consistency one has to ask for the complete set of current objects
at once.</p>
<div class="refsect3">
<a name="gwy-app-data-browser-get-current.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1523,7 +1531,7 @@ the data browser. Since version 2.45 it can be used for all file-like
data containers.</p>
<div class="refsect3">
<a name="gwy-app-data-browser-get-data-ids.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1552,7 +1560,7 @@ the data browser. Since version 2.45 it can be used for all file-like
data containers.</p>
<div class="refsect3">
<a name="gwy-app-data-browser-get-graph-ids.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1581,7 +1589,7 @@ the data browser. Since version 2.45 it can be used for all file-like
data containers.</p>
<div class="refsect3">
<a name="gwy-app-data-browser-get-spectra-ids.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1611,7 +1619,7 @@ the data browser. Since version 2.45 it can be used for all file-like
data containers.</p>
<div class="refsect3">
<a name="gwy-app-data-browser-get-volume-ids.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1638,7 +1646,7 @@ gwy_app_data_browser_get_xyz_ids (<em class="parameter"><code><a href="../GwyCon
<p>Gets the list of all XYZ data in a data container.</p>
<div class="refsect3">
<a name="gwy-app-data-browser-get-xyz-ids.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1666,9 +1674,12 @@ gwy_app_data_browser_find_data_by_title
<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *titleglob</code></em>);</pre>
<p>Gets the list of all channels in a data container whose titles match the
specified pattern.</p>
+<p>The function originally could be used only for data containers managed by
+the data browser. Since version 2.49 it can be used for all file-like
+data containers.</p>
<div class="refsect3">
<a name="gwy-app-data-browser-find-data-by-title.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1677,7 +1688,7 @@ specified pattern.</p>
<tbody>
<tr>
<td class="parameter_name"><p>data</p></td>
-<td class="parameter_description"><p>A data container managed by the data-browser.</p></td>
+<td class="parameter_description"><p>A data container.</p></td>
<td class="parameter_annotations"> </td>
</tr>
<tr>
@@ -1704,9 +1715,12 @@ gwy_app_data_browser_find_graphs_by_title
<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *titleglob</code></em>);</pre>
<p>Gets the list of all graphs in a data container whose titles match the
specified pattern.</p>
+<p>The function originally could be used only for data containers managed by
+the data browser. Since version 2.49 it can be used for all file-like
+data containers.</p>
<div class="refsect3">
<a name="gwy-app-data-browser-find-graphs-by-title.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1715,7 +1729,7 @@ specified pattern.</p>
<tbody>
<tr>
<td class="parameter_name"><p>data</p></td>
-<td class="parameter_description"><p>A data container managed by the data-browser.</p></td>
+<td class="parameter_description"><p>A data container.</p></td>
<td class="parameter_annotations"> </td>
</tr>
<tr>
@@ -1742,9 +1756,12 @@ gwy_app_data_browser_find_spectra_by_title
<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *titleglob</code></em>);</pre>
<p>Gets the list of all spectra in a data container whose titles match the
specified pattern.</p>
+<p>The function originally could be used only for data containers managed by
+the data browser. Since version 2.49 it can be used for all file-like
+data containers.</p>
<div class="refsect3">
<a name="gwy-app-data-browser-find-spectra-by-title.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1753,7 +1770,7 @@ specified pattern.</p>
<tbody>
<tr>
<td class="parameter_name"><p>data</p></td>
-<td class="parameter_description"><p>A data container managed by the data-browser.</p></td>
+<td class="parameter_description"><p>A data container.</p></td>
<td class="parameter_annotations"> </td>
</tr>
<tr>
@@ -1780,9 +1797,12 @@ gwy_app_data_browser_find_volume_by_title
<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *titleglob</code></em>);</pre>
<p>Gets the list of all volume data in a data container whose titles match the
specified pattern.</p>
+<p>The function originally could be used only for data containers managed by
+the data browser. Since version 2.49 it can be used for all file-like
+data containers.</p>
<div class="refsect3">
<a name="gwy-app-data-browser-find-volume-by-title.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1791,7 +1811,7 @@ specified pattern.</p>
<tbody>
<tr>
<td class="parameter_name"><p>data</p></td>
-<td class="parameter_description"><p>A data container managed by the data-browser.</p></td>
+<td class="parameter_description"><p>A data container.</p></td>
<td class="parameter_annotations"> </td>
</tr>
<tr>
@@ -1818,9 +1838,12 @@ gwy_app_data_browser_find_xyz_by_title
<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *titleglob</code></em>);</pre>
<p>Gets the list of all XYZ data in a data container whose titles match the
specified pattern.</p>
+<p>The function originally could be used only for data containers managed by
+the data browser. Since version 2.49 it can be used for all file-like
+data containers.</p>
<div class="refsect3">
<a name="gwy-app-data-browser-find-xyz-by-title.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1829,7 +1852,7 @@ specified pattern.</p>
<tbody>
<tr>
<td class="parameter_name"><p>data</p></td>
-<td class="parameter_description"><p>A data container managed by the data-browser.</p></td>
+<td class="parameter_description"><p>A data container.</p></td>
<td class="parameter_annotations"> </td>
</tr>
<tr>
@@ -1860,7 +1883,7 @@ should not be removed because this is likely to make the current tool stop
working.</p>
<div class="refsect3">
<a name="gwy-app-data-clear-selections.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1890,7 +1913,7 @@ gwy_app_data_browser_foreach (<em class="parameter"><code><a class="link" href="
<p>Calls a function for each data container managed by data browser.</p>
<div class="refsect3">
<a name="gwy-app-data-browser-foreach.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1925,7 +1948,7 @@ changes or its metadata such as the title changes. If a channel is removed
it may longer exist when the function is called.</p>
<div class="refsect3">
<a name="gwy-app-data-browser-add-channel-watch.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1962,7 +1985,7 @@ gwy_app_data_browser_remove_channel_watch
<p>Removes a channel watch function.</p>
<div class="refsect3">
<a name="gwy-app-data-browser-remove-channel-watch.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1990,7 +2013,7 @@ change. If a graph is removed it may longer exist when the function is
called.</p>
<div class="refsect3">
<a name="gwy-app-data-browser-add-graph-watch.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2027,7 +2050,7 @@ gwy_app_data_browser_remove_graph_watch
<p>Removes a graph watch function.</p>
<div class="refsect3">
<a name="gwy-app-data-browser-remove-graph-watch.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2053,10 +2076,10 @@ gwy_app_sync_data_items (<em class="parameter"><code><a href="../GwyContainer.ht
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> to_id</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> delete_too</code></em>,
<em class="parameter"><code>...</code></em>);</pre>
-<p>Synchronizes auxiliary data items between data containers.</p>
+<p>Synchronizes auxiliary channel items between data containers.</p>
<div class="refsect3">
<a name="gwy-app-sync-data-items.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2100,6 +2123,69 @@ them, <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"
</div>
<hr>
<div class="refsect2">
+<a name="gwy-app-sync-data-itemsv"></a><h3>gwy_app_sync_data_itemsv ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gwy_app_sync_data_itemsv (<em class="parameter"><code><a href="../GwyContainer.html#GwyContainer-struct"><span class="type">GwyContainer</span></a> *source</code></em>,
+ <em class="parameter"><code><a href="../GwyContainer.html#GwyContainer-struct"><span class="type">GwyContainer</span></a> *dest</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> from_id</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> to_id</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> delete_too</code></em>,
+ <em class="parameter"><code>const <a class="link" href="libgwyapp-data-browser.html#GwyDataItem" title="enum GwyDataItem"><span class="type">GwyDataItem</span></a> *items</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> nitems</code></em>);</pre>
+<p>Synchronizes auxiliary channel items between data containers.</p>
+<div class="refsect3">
+<a name="gwy-app-sync-data-itemsv.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>source</p></td>
+<td class="parameter_description"><p>Source container.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>dest</p></td>
+<td class="parameter_description"><p>Target container (may be identical to source).</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>from_id</p></td>
+<td class="parameter_description"><p>Data number to copy items from.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>to_id</p></td>
+<td class="parameter_description"><p>Data number to copy items to.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>delete_too</p></td>
+<td class="parameter_description"><p><a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> to delete items in target if source does not contain
+them, <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> to copy only.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>items</p></td>
+<td class="parameter_description"><p>List of <a class="link" href="libgwyapp-data-browser.html#GwyDataItem" title="enum GwyDataItem"><span class="type">GwyDataItem</span></a> values defining the items to copy.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>nitems</p></td>
+<td class="parameter_description"><p>Number of items in <em class="parameter"><code>items</code></em>
+.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: <a class="link" href="api-index-2-48.html#api-index-2.48">2.48</a></p>
+</div>
+<hr>
+<div class="refsect2">
<a name="gwy-app-data-browser-copy-channel"></a><h3>gwy_app_data_browser_copy_channel ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>
gwy_app_data_browser_copy_channel (<em class="parameter"><code><a href="../GwyContainer.html#GwyContainer-struct"><span class="type">GwyContainer</span></a> *source</code></em>,
@@ -2108,7 +2194,7 @@ gwy_app_data_browser_copy_channel (<em class="parameter"><code><a href="../GwyCo
<p>Copies a channel including all auxiliary data.</p>
<div class="refsect3">
<a name="gwy-app-data-browser-copy-channel.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2148,7 +2234,7 @@ gwy_app_data_browser_copy_volume (<em class="parameter"><code><a href="../GwyCon
<p>Copies volume brick data including all auxiliary data.</p>
<div class="refsect3">
<a name="gwy-app-data-browser-copy-volume.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2189,7 +2275,7 @@ gwy_app_data_browser_copy_xyz (<em class="parameter"><code><a href="../GwyContai
<p>Copies XYZ surface data including all auxiliary data.</p>
<div class="refsect3">
<a name="gwy-app-data-browser-copy-xyz.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2228,7 +2314,7 @@ gwy_app_get_data_key_for_id (<em class="parameter"><code><a href="/usr/share/gtk
<p>Calculates data field quark identifier from its id.</p>
<div class="refsect3">
<a name="gwy-app-get-data-key-for-id.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2255,7 +2341,7 @@ gwy_app_get_mask_key_for_id (<em class="parameter"><code><a href="/usr/share/gtk
<p>Calculates mask field quark identifier from its id.</p>
<div class="refsect3">
<a name="gwy-app-get-mask-key-for-id.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2282,7 +2368,7 @@ gwy_app_get_show_key_for_id (<em class="parameter"><code><a href="/usr/share/gtk
<p>Calculates presentation field quark identifier from its id.</p>
<div class="refsect3">
<a name="gwy-app-get-show-key-for-id.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2309,7 +2395,7 @@ gwy_app_get_graph_key_for_id (<em class="parameter"><code><a href="/usr/share/gt
<p>Calculates graph model quark identifier from its id.</p>
<div class="refsect3">
<a name="gwy-app-get-graph-key-for-id.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2337,7 +2423,7 @@ gwy_app_get_spectra_key_for_id (<em class="parameter"><code><a href="/usr/share/
<p>Calculates spectra quark identifier from its id.</p>
<div class="refsect3">
<a name="gwy-app-get-spectra-key-for-id.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2365,7 +2451,7 @@ gwy_app_get_brick_key_for_id (<em class="parameter"><code><a href="/usr/share/gt
<p>Calculates data brick quark identifier from its id.</p>
<div class="refsect3">
<a name="gwy-app-get-brick-key-for-id.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2393,7 +2479,7 @@ gwy_app_get_surface_key_for_id (<em class="parameter"><code><a href="/usr/share/
<p>Calculates XYZ surface quark identifier from its id.</p>
<div class="refsect3">
<a name="gwy-app-get-surface-key-for-id.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2421,7 +2507,7 @@ gwy_app_get_data_title_key_for_id (<em class="parameter"><code><a href="/usr/sha
<p>Calculates data field title quark identifier from its id.</p>
<div class="refsect3">
<a name="gwy-app-get-data-title-key-for-id.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2450,7 +2536,7 @@ gwy_app_get_data_range_type_key_for_id
<p>Calculates data field range type quark identifier from its id.</p>
<div class="refsect3">
<a name="gwy-app-get-data-range-type-key-for-id.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2479,7 +2565,7 @@ gwy_app_get_data_range_min_key_for_id (<em class="parameter"><code><a href="/usr
<p>Calculates data field fixed range minimum quark identifier from its id.</p>
<div class="refsect3">
<a name="gwy-app-get-data-range-min-key-for-id.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2508,7 +2594,7 @@ gwy_app_get_data_range_max_key_for_id (<em class="parameter"><code><a href="/usr
<p>Calculates data field fixed range maximum quark identifier from its id.</p>
<div class="refsect3">
<a name="gwy-app-get-data-range-max-key-for-id.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2537,7 +2623,7 @@ gwy_app_get_data_palette_key_for_id (<em class="parameter"><code><a href="/usr/s
<p>Calculates data field palette quark identifier from its id.</p>
<div class="refsect3">
<a name="gwy-app-get-data-palette-key-for-id.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2566,7 +2652,7 @@ gwy_app_get_data_meta_key_for_id (<em class="parameter"><code><a href="/usr/shar
<p>Calculates data field metadata quark identifier from its id.</p>
<div class="refsect3">
<a name="gwy-app-get-data-meta-key-for-id.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2595,7 +2681,7 @@ gwy_app_get_brick_title_key_for_id (<em class="parameter"><code><a href="/usr/sh
<p>Calculates data brick title quark identifier from its id.</p>
<div class="refsect3">
<a name="gwy-app-get-brick-title-key-for-id.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2624,7 +2710,7 @@ gwy_app_get_brick_preview_key_for_id (<em class="parameter"><code><a href="/usr/
<p>Calculates data brick preview quark identifier from its id.</p>
<div class="refsect3">
<a name="gwy-app-get-brick-preview-key-for-id.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2653,7 +2739,7 @@ gwy_app_get_brick_palette_key_for_id (<em class="parameter"><code><a href="/usr/
<p>Calculates data brick palette quark identifier from its id.</p>
<div class="refsect3">
<a name="gwy-app-get-brick-palette-key-for-id.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2682,7 +2768,7 @@ gwy_app_get_brick_meta_key_for_id (<em class="parameter"><code><a href="/usr/sha
<p>Calculates data brick title quark identifier from its id.</p>
<div class="refsect3">
<a name="gwy-app-get-brick-meta-key-for-id.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2711,7 +2797,7 @@ gwy_app_get_surface_title_key_for_id (<em class="parameter"><code><a href="/usr/
<p>Calculates data surface title quark identifier from its id.</p>
<div class="refsect3">
<a name="gwy-app-get-surface-title-key-for-id.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2741,7 +2827,7 @@ gwy_app_get_surface_palette_key_for_id
<p>Calculates XYZ surface palette quark identifier from its id.</p>
<div class="refsect3">
<a name="gwy-app-get-surface-palette-key-for-id.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2770,7 +2856,7 @@ gwy_app_get_surface_meta_key_for_id (<em class="parameter"><code><a href="/usr/s
<p>Calculates XYZ surface title quark identifier from its id.</p>
<div class="refsect3">
<a name="gwy-app-get-surface-meta-key-for-id.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2800,7 +2886,7 @@ gwy_app_get_surface_preview_key_for_id
<p>Calculates XYZ surface preview quark identifier from its id.</p>
<div class="refsect3">
<a name="gwy-app-get-surface-preview-key-for-id.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2831,7 +2917,7 @@ gwy_app_set_data_field_title (<em class="parameter"><code><a href="../GwyContain
<p>Sets channel title.</p>
<div class="refsect3">
<a name="gwy-app-set-data-field-title.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2870,7 +2956,7 @@ gwy_app_get_data_field_title (<em class="parameter"><code><a href="../GwyContain
channels with old titles, channels with and without a file, etc.</p>
<div class="refsect3">
<a name="gwy-app-get-data-field-title.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2905,7 +2991,7 @@ gwy_app_set_brick_title (<em class="parameter"><code><a href="../GwyContainer.ht
<p>Sets volume data title.</p>
<div class="refsect3">
<a name="gwy-app-set-brick-title.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2943,7 +3029,7 @@ gwy_app_get_brick_title (<em class="parameter"><code><a href="../GwyContainer.ht
<p>Gets a volume data brick title.</p>
<div class="refsect3">
<a name="gwy-app-get-brick-title.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2979,7 +3065,7 @@ gwy_app_set_surface_title (<em class="parameter"><code><a href="../GwyContainer.
<p>Sets XYZ surface data title.</p>
<div class="refsect3">
<a name="gwy-app-set-surface-title.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -3017,7 +3103,7 @@ gwy_app_get_surface_title (<em class="parameter"><code><a href="../GwyContainer.
<p>Gets an XYZ surface data title.</p>
<div class="refsect3">
<a name="gwy-app-get-surface-title.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -3079,7 +3165,7 @@ gwy_app_get_channel_thumbnail (<em class="parameter"><code><a href="../GwyContai
<p>Creates a channel thumbnail.</p>
<div class="refsect3">
<a name="gwy-app-get-channel-thumbnail.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -3131,7 +3217,7 @@ gwy_app_get_graph_thumbnail (<em class="parameter"><code><a href="../GwyContaine
functions). It cannot be used in a console program.</p>
<div class="refsect3">
<a name="gwy-app-get-graph-thumbnail.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -3182,7 +3268,7 @@ gwy_app_get_volume_thumbnail (<em class="parameter"><code><a href="../GwyContain
<p>Creates a volume thumbnail.</p>
<div class="refsect3">
<a name="gwy-app-get-volume-thumbnail.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -3232,7 +3318,7 @@ gwy_app_get_xyz_thumbnail (<em class="parameter"><code><a href="../GwyContainer.
<p>Creates an XYZ data thumbnail.</p>
<div class="refsect3">
<a name="gwy-app-get-xyz-thumbnail.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -3285,7 +3371,7 @@ or duplicate in the data browser. Module functions can be only run on
visible data.</div>
<div class="refsect3">
<a name="gwy-app-data-browser-select-data-field.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -3321,7 +3407,7 @@ or duplicate in the data browser. Module functions can be only run on
visible data.</div>
<div class="refsect3">
<a name="gwy-app-data-browser-select-graph-model.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -3356,7 +3442,7 @@ to the user. If it does not exist, it is created.</p>
<a class="link" href="libgwyapp-settings.html#gwy-app-gl-is-ok" title="gwy_app_gl_is_ok ()"><code class="function">gwy_app_gl_is_ok()</code></a>.</p>
<div class="refsect3">
<a name="gwy-app-data-browser-show-3d.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -3386,7 +3472,7 @@ gwy_app_find_window_for_channel (<em class="parameter"><code><a href="../GwyCont
<p>Finds the window displaying a data channel.</p>
<div class="refsect3">
<a name="gwy-app-find-window-for-channel.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -3423,7 +3509,7 @@ gwy_app_find_window_for_graph (<em class="parameter"><code><a href="../GwyContai
<p>Finds the window displaying a graph model.</p>
<div class="refsect3">
<a name="gwy-app-find-window-for-graph.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -3461,7 +3547,7 @@ gwy_app_find_window_for_volume (<em class="parameter"><code><a href="../GwyConta
<p>Finds the window displaying given volume data.</p>
<div class="refsect3">
<a name="gwy-app-find-window-for-volume.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -3499,7 +3585,7 @@ gwy_app_find_window_for_xyz (<em class="parameter"><code><a href="../GwyContaine
<p>Finds the window displaying given XYZ data.</p>
<div class="refsect3">
<a name="gwy-app-find-window-for-xyz.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -3558,7 +3644,7 @@ objects and also <a class="link" href="libgwyapp-data-browser.html#gwy-app-data-
Hence you should do so before loading files or calling module functions.</p>
<div class="refsect3">
<a name="gwy-app-data-browser-set-gui-enabled.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -3583,7 +3669,7 @@ Hence you should do so before loading files or calling module functions.</p>
<a class="link" href="libgwyapp-data-browser.html#gwy-app-data-browser-get-current" title="gwy_app_data_browser_get_current ()"><code class="function">gwy_app_data_browser_get_current()</code></a>.</p>
<div class="refsect3">
<a name="GwyAppWhat.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
@@ -3789,7 +3875,7 @@ Hence you should do so before loading files or calling module functions.</p>
<p>Data browser page, corresponding to one of possible data types.</p>
<div class="refsect3">
<a name="GwyAppPage.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
@@ -3850,7 +3936,7 @@ Hence you should do so before loading files or calling module functions.</p>
<p>Auxiliary channel data type.</p>
<div class="refsect3">
<a name="GwyDataItem.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
@@ -3942,7 +4028,7 @@ further changes. It indicates the wish to restore saved visibilities
and do something reasonable when there are no visibilities to restore.</p>
<div class="refsect3">
<a name="GwyVisibilityResetType.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
@@ -3990,7 +4076,7 @@ and do something reasonable when there are no visibilities to restore.</p>
<p>Type of event reported to <a class="link" href="libgwyapp-data-browser.html#GwyAppDataWatchFunc" title="GwyAppDataWatchFunc ()"><span class="type">GwyAppDataWatchFunc</span></a> watcher functions.</p>
<div class="refsect3">
<a name="GwyDataWatchEventType.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
diff --git a/devel-docs/libgwyapp/html/libgwyapp-file-module-utils.html b/devel-docs/libgwyapp/html/libgwyapp-file-module-utils.html
index 1ad6174..2b8638d 100644
--- a/devel-docs/libgwyapp/html/libgwyapp-file-module-utils.html
+++ b/devel-docs/libgwyapp/html/libgwyapp-file-module-utils.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>file module utils: Gwyddion Application Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="prev" href="libgwyapp-module-utils.html" title="module utils">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwyapp-file-module-utils.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -291,7 +291,7 @@
</div>
<div class="refsect1">
<a name="libgwyapp-file-module-utils.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -416,7 +416,7 @@ gwy_get_gboolean8 (<em class="parameter"><code>const <a href="/usr/share/gtk-doc
binary data buffer, moving the buffer pointer to point just after the value.</p>
<div class="refsect3">
<a name="gwy-get-gboolean8.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -445,7 +445,7 @@ gwy_get_gint16_le (<em class="parameter"><code>const <a href="/usr/share/gtk-doc
binary data buffer, moving the buffer pointer to point just after the value.</p>
<div class="refsect3">
<a name="gwy-get-gint16-le.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -474,7 +474,7 @@ gwy_get_gint16_be (<em class="parameter"><code>const <a href="/usr/share/gtk-doc
binary data buffer, moving the buffer pointer to point just after the value.</p>
<div class="refsect3">
<a name="gwy-get-gint16-be.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -503,7 +503,7 @@ gwy_get_guint16_le (<em class="parameter"><code>const <a href="/usr/share/gtk-do
binary data buffer, moving the buffer pointer to point just after the value.</p>
<div class="refsect3">
<a name="gwy-get-guint16-le.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -532,7 +532,7 @@ gwy_get_guint16_be (<em class="parameter"><code>const <a href="/usr/share/gtk-do
binary data buffer, moving the buffer pointer to point just after the value.</p>
<div class="refsect3">
<a name="gwy-get-guint16-be.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -561,7 +561,7 @@ gwy_get_gint32_le (<em class="parameter"><code>const <a href="/usr/share/gtk-doc
binary data buffer, moving the buffer pointer to point just after the value.</p>
<div class="refsect3">
<a name="gwy-get-gint32-le.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -590,7 +590,7 @@ gwy_get_gint32_be (<em class="parameter"><code>const <a href="/usr/share/gtk-doc
binary data buffer, moving the buffer pointer to point just after the value.</p>
<div class="refsect3">
<a name="gwy-get-gint32-be.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -619,7 +619,7 @@ gwy_get_guint32_le (<em class="parameter"><code>const <a href="/usr/share/gtk-do
binary data buffer, moving the buffer pointer to point just after the value.</p>
<div class="refsect3">
<a name="gwy-get-guint32-le.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -648,7 +648,7 @@ gwy_get_guint32_be (<em class="parameter"><code>const <a href="/usr/share/gtk-do
binary data buffer, moving the buffer pointer to point just after the value.</p>
<div class="refsect3">
<a name="gwy-get-guint32-be.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -677,7 +677,7 @@ gwy_get_gint64_le (<em class="parameter"><code>const <a href="/usr/share/gtk-doc
binary data buffer, moving the buffer pointer to point just after the value.</p>
<div class="refsect3">
<a name="gwy-get-gint64-le.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -706,7 +706,7 @@ gwy_get_gint64_be (<em class="parameter"><code>const <a href="/usr/share/gtk-doc
binary data buffer, moving the buffer pointer to point just after the value.</p>
<div class="refsect3">
<a name="gwy-get-gint64-be.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -735,7 +735,7 @@ gwy_get_guint64_le (<em class="parameter"><code>const <a href="/usr/share/gtk-do
binary data buffer, moving the buffer pointer to point just after the value.</p>
<div class="refsect3">
<a name="gwy-get-guint64-le.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -764,7 +764,7 @@ gwy_get_guint64_be (<em class="parameter"><code>const <a href="/usr/share/gtk-do
binary data buffer, moving the buffer pointer to point just after the value.</p>
<div class="refsect3">
<a name="gwy-get-guint64-be.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -793,7 +793,7 @@ gwy_get_gfloat_le (<em class="parameter"><code>const <a href="/usr/share/gtk-doc
binary data buffer, moving the buffer pointer to point just after the value.</p>
<div class="refsect3">
<a name="gwy-get-gfloat-le.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -822,7 +822,7 @@ gwy_get_gfloat_be (<em class="parameter"><code>const <a href="/usr/share/gtk-doc
binary data buffer, moving the buffer pointer to point just after the value.</p>
<div class="refsect3">
<a name="gwy-get-gfloat-be.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -851,7 +851,7 @@ gwy_get_gdouble_le (<em class="parameter"><code>const <a href="/usr/share/gtk-do
binary data buffer, moving the buffer pointer to point just after the value.</p>
<div class="refsect3">
<a name="gwy-get-gdouble-le.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -880,7 +880,7 @@ gwy_get_gdouble_be (<em class="parameter"><code>const <a href="/usr/share/gtk-do
binary data buffer, moving the buffer pointer to point just after the value.</p>
<div class="refsect3">
<a name="gwy-get-gdouble-be.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -909,7 +909,7 @@ gwy_get_pascal_real_le (<em class="parameter"><code>const <a href="/usr/share/gt
binary data buffer, moving the buffer pointer to point just after the value.</p>
<div class="refsect3">
<a name="gwy-get-pascal-real-le.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -938,7 +938,7 @@ gwy_get_pascal_real_be (<em class="parameter"><code>const <a href="/usr/share/gt
binary data buffer, moving the buffer pointer to point just after the value.</p>
<div class="refsect3">
<a name="gwy-get-pascal-real-be.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -970,7 +970,7 @@ Fortunately, most files encoutered in practice have the measure ratio either
very close to 1, larger or equal than 2.</p>
<div class="refsect3">
<a name="gwy-app-channel-check-nonsquare.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1009,7 +1009,7 @@ most cases. If there already is a title it is left intact, making use of
this function as a fall-back easier.</p>
<div class="refsect3">
<a name="gwy-app-channel-title-fall-back.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1047,7 +1047,7 @@ most cases. If there already is a title it is left intact, making use of
this function as a fall-back easier.</p>
<div class="refsect3">
<a name="gwy-app-xyz-title-fall-back.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1083,11 +1083,10 @@ gwy_app_channel_remove_bad_data (<em class="parameter"><code><a href="../GwyData
<p>Since Gwyddion has no concept of bad data points, they are usually marked
with a mask and replaced with some neutral values upon import, leaving the
user to decide how to proceed further. This helper function performs such
-replacement, using the average of all good points as the neutral replacement
-value (at this moment).</p>
+replacement.</p>
<div class="refsect3">
<a name="gwy-app-channel-remove-bad-data.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1132,7 +1131,7 @@ values.</p>
<a class="link" href="libgwyapp-file-module-utils.html#gwy-app-channel-remove-bad-data" title="gwy_app_channel_remove_bad_data ()"><code class="function">gwy_app_channel_remove_bad_data()</code></a>.</p>
<div class="refsect3">
<a name="gwy-app-channel-mask-of-nans.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1187,7 +1186,7 @@ gwy_text_header_parse (<em class="parameter"><code><a href="/usr/share/gtk-doc/h
<p>Lines consisting only of whitespace are ignored.</p>
<div class="refsect3">
<a name="gwy-text-header-parse.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1237,7 +1236,7 @@ gwy_text_header_context_get_section (<em class="parameter"><code>const <a class=
returns <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> then.</p>
<div class="refsect3">
<a name="gwy-text-header-context-get-section.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1264,7 +1263,7 @@ gwy_text_header_context_get_lineno (<em class="parameter"><code>const <a class="
<p>Gets the current header line.</p>
<div class="refsect3">
<a name="gwy-text-header-context-get-lineno.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1296,7 +1295,7 @@ gwy_file_channel_import_log_add (<em class="parameter"><code><a href="../GwyCont
will be set to -1. The file name will be added to function arguments.</p>
<div class="refsect3">
<a name="gwy-file-channel-import-log-add.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1346,7 +1345,7 @@ gwy_file_volume_import_log_add (<em class="parameter"><code><a href="../GwyConta
will be set to -1. The file name will be added to function arguments.</p>
<div class="refsect3">
<a name="gwy-file-volume-import-log-add.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1396,7 +1395,7 @@ gwy_file_xyz_import_log_add (<em class="parameter"><code><a href="../GwyContaine
will be set to -1. The file name will be added to function arguments.</p>
<div class="refsect3">
<a name="gwy-file-xyz-import-log-add.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1454,7 +1453,7 @@ domains.</p>
(they are not restricted to these codes though).</p>
<div class="refsect3">
<a name="GwyTextHeaderError.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
@@ -1585,7 +1584,7 @@ suitable <em class="parameter"><code>destroy_key</code></em>
functions must be set.</p>
<div class="refsect3">
<a name="GwyTextHeaderParser.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="struct_members_name">
<col class="struct_members_description">
diff --git a/devel-docs/libgwyapp/html/libgwyapp-file.html b/devel-docs/libgwyapp/html/libgwyapp-file.html
index dd8851e..6fccf55 100644
--- a/devel-docs/libgwyapp/html/libgwyapp-file.html
+++ b/devel-docs/libgwyapp/html/libgwyapp-file.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>file: Gwyddion Application Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="prev" href="libgwyapp-settings.html" title="settings">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwyapp-file.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -167,7 +167,7 @@ gwy_app_set_current_directory (<em class="parameter"><code>const <a href="http:/
<p>Warning: This function is probably temporary.</p>
<div class="refsect3">
<a name="gwy-app-set-current-directory.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -198,7 +198,7 @@ Upon a successful load all necessary setup tasks are performed. If the
load fails, an error dialog is presented.</p>
<div class="refsect3">
<a name="gwy-app-file-load.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -260,7 +260,7 @@ gwy_app_file_write (<em class="parameter"><code><a href="../GwyContainer.html#Gw
If the write fails, an error dialog is presented.</p>
<div class="refsect3">
<a name="gwy-app-file-write.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -328,7 +328,7 @@ gwy_app_file_confirm_overwrite (<em class="parameter"><code><a href="/usr/share/
<p>Asks for file overwrite for a file save chooser.</p>
<div class="refsect3">
<a name="gwy-app-file-confirm-overwrite.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwyapp/html/libgwyapp-filelist.html b/devel-docs/libgwyapp/html/libgwyapp-filelist.html
index a5837cf..1b8704e 100644
--- a/devel-docs/libgwyapp/html/libgwyapp-filelist.html
+++ b/devel-docs/libgwyapp/html/libgwyapp-filelist.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>filelist: Gwyddion Application Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="prev" href="libgwyapp-file.html" title="file">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwyapp-filelist.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -128,7 +128,7 @@ adding it if not present yet.</p>
should be set.</p>
<div class="refsect3">
<a name="gwy-app-recent-file-list-update.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -176,7 +176,7 @@ use <a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Standard-Macros
in that case.</p>
<div class="refsect3">
<a name="gwy-app-recent-file-list-load.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -203,7 +203,7 @@ gwy_app_recent_file_list_save (<em class="parameter"><code>const <a href="http:/
.</p>
<div class="refsect3">
<a name="gwy-app-recent-file-list-save.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -237,7 +237,7 @@ gwy_app_recent_file_get_thumbnail (<em class="parameter"><code>const <a href="/u
<p>Gets thumbnail of a recently open file.</p>
<div class="refsect3">
<a name="gwy-app-recent-file-get-thumbnail.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwyapp/html/libgwyapp-funcuse.html b/devel-docs/libgwyapp/html/libgwyapp-funcuse.html
index 537ae46..3b22ea9 100644
--- a/devel-docs/libgwyapp/html/libgwyapp-funcuse.html
+++ b/devel-docs/libgwyapp/html/libgwyapp-funcuse.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>funcuse: Gwyddion Application Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="prev" href="libgwyapp-filelist.html" title="filelist">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwyapp-funcuse.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -115,7 +115,7 @@
</div>
<div class="refsect1">
<a name="libgwyapp-funcuse.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -154,7 +154,7 @@ gwy_func_use_free (<em class="parameter"><code><a class="link" href="libgwyapp-f
<p>Destroys function use statistics, freeing all associated resourced.</p>
<div class="refsect3">
<a name="gwy-func-use-free.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -177,7 +177,7 @@ gwy_func_use_add (<em class="parameter"><code><a class="link" href="libgwyapp-fu
<p>Adds an use of a function to the statistics.</p>
<div class="refsect3">
<a name="gwy-func-use-add.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -207,7 +207,7 @@ gwy_func_use_get (<em class="parameter"><code><a class="link" href="libgwyapp-fu
<p>Gets the n-th most function from a function statistics.</p>
<div class="refsect3">
<a name="gwy-func-use-get.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -242,7 +242,7 @@ gwy_func_use_load (<em class="parameter"><code>const <a href="http://developer.g
<p>Loads function use statistics from a file.</p>
<div class="refsect3">
<a name="gwy-func-use-load.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -271,7 +271,7 @@ gwy_func_use_save (<em class="parameter"><code><a class="link" href="libgwyapp-f
<p>Saves function use statistics data to a file.</p>
<div class="refsect3">
<a name="gwy-func-use-save.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -300,7 +300,7 @@ gwy_func_use_get_filename (<em class="parameter"><code>const <a href="http://dev
<p>Gets the (preferred) name for a file to store function use statistics to.</p>
<div class="refsect3">
<a name="gwy-func-use-get-filename.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwyapp/html/libgwyapp-help.html b/devel-docs/libgwyapp/html/libgwyapp-help.html
index 1b9fc4e..5f2b26b 100644
--- a/devel-docs/libgwyapp/html/libgwyapp-help.html
+++ b/devel-docs/libgwyapp/html/libgwyapp-help.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>help: Gwyddion Application Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="prev" href="libgwyapp-undo.html" title="undo">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwyapp-help.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -124,7 +124,7 @@
</div>
<div class="refsect1">
<a name="libgwyapp-help.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -161,7 +161,7 @@ gwy_help_add_to_proc_dialog (<em class="parameter"><code><a href="http://develop
currently running function or help is not available.</p>
<div class="refsect3">
<a name="gwy-help-add-to-proc-dialog.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -194,7 +194,7 @@ gwy_help_add_to_graph_dialog (<em class="parameter"><code><a href="http://develo
currently running function or help is not available.</p>
<div class="refsect3">
<a name="gwy-help-add-to-graph-dialog.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -227,7 +227,7 @@ gwy_help_add_to_volume_dialog (<em class="parameter"><code><a href="http://devel
currently running function or help is not available.</p>
<div class="refsect3">
<a name="gwy-help-add-to-volume-dialog.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -260,7 +260,7 @@ gwy_help_add_to_xyz_dialog (<em class="parameter"><code><a href="http://develope
currently running function or help is not available.</p>
<div class="refsect3">
<a name="gwy-help-add-to-xyz-dialog.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -293,7 +293,7 @@ gwy_help_add_to_file_dialog (<em class="parameter"><code><a href="http://develop
currently running function or help is not available.</p>
<div class="refsect3">
<a name="gwy-help-add-to-file-dialog.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -327,7 +327,7 @@ gwy_help_add_to_tool_dialog (<em class="parameter"><code><a href="http://develop
currently running function or help is not available.</p>
<div class="refsect3">
<a name="gwy-help-add-to-tool-dialog.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -374,7 +374,7 @@ described in different parts of the guide – but this should be rare.</p>
such as channel or volume windows.</p>
<div class="refsect3">
<a name="gwy-help-add-to-window.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -426,7 +426,7 @@ language versions or changing the user guide base location.</p>
behaving similarly to built-in modules.</p>
<div class="refsect3">
<a name="gwy-help-add-to-window-uri.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -465,7 +465,7 @@ gwy_help_show (<em class="parameter"><code>const <a href="http://developer.gnome
available.</p>
<div class="refsect3">
<a name="gwy-help-show.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -513,7 +513,7 @@ it means help will not work.</p>
<p>Flags controlling help setup and behaviour.</p>
<div class="refsect3">
<a name="GwyHelpFlags.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
diff --git a/devel-docs/libgwyapp/html/libgwyapp-log.html b/devel-docs/libgwyapp/html/libgwyapp-log.html
index 873f1fa..7a45fb2 100644
--- a/devel-docs/libgwyapp/html/libgwyapp-log.html
+++ b/devel-docs/libgwyapp/html/libgwyapp-log.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>log: Gwyddion Application Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="prev" href="libgwyapp-help.html" title="help">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwyapp-log.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -188,7 +188,7 @@ then can also create secondary outputs. Note you still need to pass a
second <a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> argument as the option terminator.</p>
<div class="refsect3">
<a name="gwy-app-channel-log-add.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -249,7 +249,7 @@ then can also create secondary outputs. Note you still need to pass a
second <a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> argument as the option terminator.</p>
<div class="refsect3">
<a name="gwy-app-volume-log-add.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -309,7 +309,7 @@ then can also create secondary outputs. Note you still need to pass a
second <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> argument as the option terminator.</p>
<div class="refsect3">
<a name="gwy-app-xyz-log-add.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -362,7 +362,7 @@ running data processing function name and constructs the qualified function
name from that.</p>
<div class="refsect3">
<a name="gwy-app-channel-log-add-proc.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -404,7 +404,7 @@ running function volume data processing name and constructs the qualified
function name from that.</p>
<div class="refsect3">
<a name="gwy-app-volume-log-add-volume.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -446,7 +446,7 @@ running function XYZ data processing name and constructs the qualified
function name from that.</p>
<div class="refsect3">
<a name="gwy-app-xyz-log-add-xyz.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -485,7 +485,7 @@ gwy_app_log_browser_for_channel (<em class="parameter"><code><a href="../GwyCont
and given focus. Otherwise, a new window is created.</p>
<div class="refsect3">
<a name="gwy-app-log-browser-for-channel.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -524,7 +524,7 @@ gwy_app_log_browser_for_volume (<em class="parameter"><code><a href="../GwyConta
and given focus. Otherwise, a new window is created.</p>
<div class="refsect3">
<a name="gwy-app-log-browser-for-volume.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -563,7 +563,7 @@ gwy_app_log_browser_for_xyz (<em class="parameter"><code><a href="../GwyContaine
and given focus. Otherwise, a new window is created.</p>
<div class="refsect3">
<a name="gwy-app-log-browser-for-xyz.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -618,7 +618,7 @@ become no-op. It is possible to run the log viewer with
was enabled.</p>
<div class="refsect3">
<a name="gwy-log-set-enabled.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwyapp/html/libgwyapp-logging.html b/devel-docs/libgwyapp/html/libgwyapp-logging.html
index 065dd65..cd6da51 100644
--- a/devel-docs/libgwyapp/html/libgwyapp-logging.html
+++ b/devel-docs/libgwyapp/html/libgwyapp-logging.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>logging: Gwyddion Application Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="prev" href="libgwyapp-log.html" title="log">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwyapp-logging.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -60,7 +60,7 @@
</div>
<div class="refsect1">
<a name="libgwyapp-logging.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -91,7 +91,7 @@ usually does. This function may not be useful in Gwyddion-based programs
unless they try to emulate Gwyddion behaviour closely.</p>
<div class="refsect3">
<a name="gwy-app-setup-logging.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -132,7 +132,7 @@ appended to the buffer as they arrive.</p>
<p>Flags controlling where program messages are written.</p>
<div class="refsect3">
<a name="GwyAppLoggingFlags.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
diff --git a/devel-docs/libgwyapp/html/libgwyapp-menu.html b/devel-docs/libgwyapp/html/libgwyapp-menu.html
index 180dd6b..ade3930 100644
--- a/devel-docs/libgwyapp/html/libgwyapp-menu.html
+++ b/devel-docs/libgwyapp/html/libgwyapp-menu.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>menu: Gwyddion Application Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="prev" href="libgwyapp-GwyGradientEditor.html" title="GwyGradientEditor">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwyapp-menu.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -188,7 +188,7 @@
</div>
<div class="refsect1">
<a name="libgwyapp-menu.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -222,7 +222,7 @@ therefore module registration has to be performed first for this function
to make sense.</p>
<div class="refsect3">
<a name="gwy-app-build-process-menu.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -251,7 +251,7 @@ gwy_app_process_menu_add_run_last (<em class="parameter"><code><a href="http://d
<p>This function is essentially useful only for toolbox construction.</p>
<div class="refsect3">
<a name="gwy-app-process-menu-add-run-last.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -276,7 +276,7 @@ gwy_app_run_process_func (<em class="parameter"><code>const <a href="http://deve
selected.</p>
<div class="refsect3">
<a name="gwy-app-run-process-func.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -303,7 +303,7 @@ gwy_app_run_process_func_in_mode (<em class="parameter"><code>const <a href="htt
<p>Runs a data processing function on current data in specified mode.</p>
<div class="refsect3">
<a name="gwy-app-run-process-func-in-mode.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -335,7 +335,7 @@ therefore module registration has to be performed first for this function
to make sense.</p>
<div class="refsect3">
<a name="gwy-app-build-graph-menu.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -361,7 +361,7 @@ gwy_app_run_graph_func (<em class="parameter"><code>const <a href="http://develo
<p>Runs a graph function on the current graph.</p>
<div class="refsect3">
<a name="gwy-app-run-graph-func.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -386,7 +386,7 @@ modules, therefore module registration has to be performed first for this
function to make sense.</p>
<div class="refsect3">
<a name="gwy-app-build-volume-menu.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -416,7 +416,7 @@ gwy_app_run_volume_func (<em class="parameter"><code>const <a href="/usr/share/g
selected.</p>
<div class="refsect3">
<a name="gwy-app-run-volume-func.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -444,7 +444,7 @@ gwy_app_run_volume_func_in_mode (<em class="parameter"><code>const <a href="/usr
<p>Runs a volume data processing function on current data in specified mode.</p>
<div class="refsect3">
<a name="gwy-app-run-volume-func-in-mode.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -477,7 +477,7 @@ modules, therefore module registration has to be performed first for this
function to make sense.</p>
<div class="refsect3">
<a name="gwy-app-build-xyz-menu.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -507,7 +507,7 @@ gwy_app_run_xyz_func (<em class="parameter"><code>const <a href="/usr/share/gtk-
selected.</p>
<div class="refsect3">
<a name="gwy-app-run-xyz-func.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -535,7 +535,7 @@ gwy_app_run_xyz_func_in_mode (<em class="parameter"><code>const <a href="/usr/sh
<p>Runs a XYZ data processing function on current data in specified mode.</p>
<div class="refsect3">
<a name="gwy-app-run-xyz-func-in-mode.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -567,7 +567,7 @@ gwy_app_menu_recent_files_update (<em class="parameter"><code><a href="/usr/shar
items, only the maximum number is shown.</p>
<div class="refsect3">
<a name="gwy-app-menu-recent-files-update.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -635,7 +635,7 @@ gwy_app_sensitivity_add_widget (<em class="parameter"><code><a href="/usr/share/
it).</p>
<div class="refsect3">
<a name="gwy-app-sensitivity-add-widget.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -668,7 +668,7 @@ gwy_app_sensitivity_set_state (<em class="parameter"><code><a class="link" href=
it).</p>
<div class="refsect3">
<a name="gwy-app-sensitivity-set-state.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -701,7 +701,7 @@ to copy to state.</p></td>
widgets to become sensitive.</p>
<div class="refsect3">
<a name="GwyMenuSensFlags.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
diff --git a/devel-docs/libgwyapp/html/libgwyapp-meta.html b/devel-docs/libgwyapp/html/libgwyapp-meta.html
index 449257b..9d08a2e 100644
--- a/devel-docs/libgwyapp/html/libgwyapp-meta.html
+++ b/devel-docs/libgwyapp/html/libgwyapp-meta.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>meta: Gwyddion Application Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="prev" href="libgwyapp-menu.html" title="menu">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwyapp-meta.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -86,7 +86,7 @@ gwy_app_metadata_browser_for_channel (<em class="parameter"><code><a href="../Gw
and given focus. Otherwise, a new window is created.</p>
<div class="refsect3">
<a name="gwy-app-metadata-browser-for-channel.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -125,7 +125,7 @@ gwy_app_metadata_browser_for_volume (<em class="parameter"><code><a href="../Gwy
raised and given focus. Otherwise, a new window is created.</p>
<div class="refsect3">
<a name="gwy-app-metadata-browser-for-volume.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -164,7 +164,7 @@ gwy_app_metadata_browser_for_xyz (<em class="parameter"><code><a href="../GwyCon
raised and given focus. Otherwise, a new window is created.</p>
<div class="refsect3">
<a name="gwy-app-metadata-browser-for-xyz.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwyapp/html/libgwyapp-module-utils.html b/devel-docs/libgwyapp/html/libgwyapp-module-utils.html
index 7d042c1..56dc16e 100644
--- a/devel-docs/libgwyapp/html/libgwyapp-module-utils.html
+++ b/devel-docs/libgwyapp/html/libgwyapp-module-utils.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>module utils: Gwyddion Application Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="prev" href="GwyPlainTool.html" title="GwyPlainTool">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwyapp-module-utils.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -140,7 +140,7 @@
</div>
<div class="refsect1">
<a name="libgwyapp-module-utils.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -169,7 +169,7 @@
<p>The type of auxiliary saved data creation function.</p>
<div class="refsect3">
<a name="GwySaveAuxiliaryCreate.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -208,7 +208,7 @@ the same effect as setting it to a negative value. See
<p>The type of auxiliary saved data destruction function.</p>
<div class="refsect3">
<a name="GwySaveAuxiliaryDestroy.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -246,7 +246,7 @@ gwy_save_auxiliary_data (<em class="parameter"><code>const <a href="/usr/share/g
its description for details.</p>
<div class="refsect3">
<a name="gwy-save-auxiliary-data.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -301,7 +301,7 @@ gwy_save_auxiliary_with_callback (<em class="parameter"><code>const <a href="/us
<p>Saves a report or other auxiliary data to a user specified file.</p>
<div class="refsect3">
<a name="gwy-save-auxiliary-with-callback.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -361,7 +361,7 @@ Sizing of both pixel-wise square and physically square displays is performed
correctly.</p>
<div class="refsect3">
<a name="gwy-set-data-preview-size.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -408,7 +408,7 @@ existing graph, the graph model is added to <em class="parameter"><code>data</co
be run non-interactively.</p>
<div class="refsect3">
<a name="gwy-app-add-graph-or-curves.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -459,7 +459,7 @@ gwy_preview_surface_to_datafield (<em class="parameter"><code><a href="../GwySur
<p>Renders a preview of a XYZ data surface to a data field.</p>
<div class="refsect3">
<a name="gwy-preview-surface-to-datafield.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -510,7 +510,7 @@ the structure is cleared to <a class="link" href="GwyDataChooser.html#GWY-APP-DA
function returns <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>.</p>
<div class="refsect3">
<a name="gwy-app-data-id-verify-channel.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -543,7 +543,7 @@ returns <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAP
the function returns <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>.</p>
<div class="refsect3">
<a name="gwy-app-data-id-verify-graph.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -577,7 +577,7 @@ returns <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAP
and the function returns <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>.</p>
<div class="refsect3">
<a name="gwy-app-data-id-verify-volume.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -611,7 +611,7 @@ returns <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAP
and the function returns <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>.</p>
<div class="refsect3">
<a name="gwy-app-data-id-verify-xyz.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -645,7 +645,7 @@ returns <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAP
the function return <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>.</p>
<div class="refsect3">
<a name="gwy-app-data-id-verify-spectra.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -674,7 +674,7 @@ refers to existing spectra now.</p>
<a class="link" href="libgwyapp-module-utils.html#gwy-preview-surface-to-datafield" title="gwy_preview_surface_to_datafield ()"><code class="function">gwy_preview_surface_to_datafield()</code></a>.</p>
<div class="refsect3">
<a name="GwyPreviewSurfaceFlags.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
diff --git a/devel-docs/libgwyapp/html/libgwyapp-settings.html b/devel-docs/libgwyapp/html/libgwyapp-settings.html
index 8c6902a..8fa4930 100644
--- a/devel-docs/libgwyapp/html/libgwyapp-settings.html
+++ b/devel-docs/libgwyapp/html/libgwyapp-settings.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>settings: Gwyddion Application Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="prev" href="GwyDataChooser.html" title="GwyDataChooser">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwyapp-settings.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -140,7 +140,7 @@
</div>
<div class="refsect1">
<a name="libgwyapp-settings.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -216,7 +216,7 @@ gwy_app_settings_save (<em class="parameter"><code>const <a href="http://develop
filename.</p>
<div class="refsect3">
<a name="gwy-app-settings-save.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -250,7 +250,7 @@ gwy_app_settings_load (<em class="parameter"><code>const <a href="/usr/share/gtk
<p>Loads settings file.</p>
<div class="refsect3">
<a name="gwy-app-settings-load.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -285,7 +285,7 @@ gwy_app_settings_create_config_dir (<em class="parameter"><code><a href="/usr/sh
<p>Create gwyddion config directory.</p>
<div class="refsect3">
<a name="gwy-app-settings-create-config-dir.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -364,7 +364,7 @@ When OpenGL is supported, it calls <code class="function">gtk_gl_init_check()</c
<a href="../libgwydgets-gwydgets.html#gwy-widgets-gl-init"><code class="function">gwy_widgets_gl_init()</code></a> (if the former succeeeds).</p>
<div class="refsect3">
<a name="gwy-app-gl-init.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -421,7 +421,7 @@ on error domains.</p>
<p>Error codes returned by application settings functions.</p>
<div class="refsect3">
<a name="GwyAppSettingsError.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
diff --git a/devel-docs/libgwyapp/html/libgwyapp-undo.html b/devel-docs/libgwyapp/html/libgwyapp-undo.html
index 882af9b..82b5c1b 100644
--- a/devel-docs/libgwyapp/html/libgwyapp-undo.html
+++ b/devel-docs/libgwyapp/html/libgwyapp-undo.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>undo: Gwyddion Application Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="prev" href="libgwyapp-meta.html" title="meta">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwyapp-undo.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -235,7 +235,7 @@ gwy_app_undo_checkpoint (<em class="parameter"><code><a href="../GwyContainer.ht
of updating application controls state.</p>
<div class="refsect3">
<a name="gwy-app-undo-checkpoint.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -271,7 +271,7 @@ gwy_app_undo_qcheckpoint (<em class="parameter"><code><a href="../GwyContainer.h
of updating application controls state.</p>
<div class="refsect3">
<a name="gwy-app-undo-qcheckpoint.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -308,7 +308,7 @@ gwy_app_undo_checkpointv (<em class="parameter"><code><a href="../GwyContainer.h
of updating application controls state.</p>
<div class="refsect3">
<a name="gwy-app-undo-checkpointv.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -359,7 +359,7 @@ if you perform a data operation that can also meaningfully transform the
corresponding calibration data take care to obtain it before saving undo.</p>
<div class="refsect3">
<a name="gwy-app-undo-qcheckpointv.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -403,7 +403,7 @@ gwy_app_undo_undo_container (<em class="parameter"><code><a href="../GwyContaine
of updating application controls state.</p>
<div class="refsect3">
<a name="gwy-app-undo-undo-container.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -428,7 +428,7 @@ gwy_app_undo_redo_container (<em class="parameter"><code><a href="../GwyContaine
of updating application controls state.</p>
<div class="refsect3">
<a name="gwy-app-undo-redo-container.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -453,7 +453,7 @@ gwy_app_undo_container_remove (<em class="parameter"><code><a href="../GwyContai
care of updating application controls state.</p>
<div class="refsect3">
<a name="gwy-app-undo-container-remove.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -485,7 +485,7 @@ gwy_undo_checkpoint (<em class="parameter"><code><a href="../GwyContainer.html#G
<p>Create a point in the undo history it is possible to return to.</p>
<div class="refsect3">
<a name="gwy-undo-checkpoint.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -519,7 +519,7 @@ gwy_undo_qcheckpoint (<em class="parameter"><code><a href="../GwyContainer.html#
<p>Create a point in the undo history it is possible to return to.</p>
<div class="refsect3">
<a name="gwy-undo-qcheckpoint.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -554,7 +554,7 @@ gwy_undo_checkpointv (<em class="parameter"><code><a href="../GwyContainer.html#
<p>Create a point in the undo history it is possible to return to.</p>
<div class="refsect3">
<a name="gwy-undo-checkpointv.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -597,7 +597,7 @@ gwy_undo_qcheckpointv (<em class="parameter"><code><a href="../GwyContainer.html
<p>Create a point in the undo history it is possible to return to.</p>
<div class="refsect3">
<a name="gwy-undo-qcheckpointv.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -639,7 +639,7 @@ gwy_undo_undo_container (<em class="parameter"><code><a href="../GwyContainer.ht
<p>It must have undo available.</p>
<div class="refsect3">
<a name="gwy-undo-undo-container.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -662,7 +662,7 @@ gwy_undo_redo_container (<em class="parameter"><code><a href="../GwyContainer.ht
<p>It must have redo available.</p>
<div class="refsect3">
<a name="gwy-undo-redo-container.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -684,7 +684,7 @@ gwy_undo_container_has_undo (<em class="parameter"><code><a href="../GwyContaine
<p>Returns whether there is any undo available for a container.</p>
<div class="refsect3">
<a name="gwy-undo-container-has-undo.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -710,7 +710,7 @@ gwy_undo_container_has_redo (<em class="parameter"><code><a href="../GwyContaine
<p>Returns whether there is any redo available for a container.</p>
<div class="refsect3">
<a name="gwy-undo-container-has-redo.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -737,7 +737,7 @@ gwy_undo_container_get_modified (<em class="parameter"><code><a href="../GwyCont
<p>FIXME: it may not work.</p>
<div class="refsect3">
<a name="gwy-undo-container-get-modified.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -763,7 +763,7 @@ gwy_undo_container_set_unmodified (<em class="parameter"><code><a href="../GwyCo
<p>Marks a data container as umodified (that is, saved).</p>
<div class="refsect3">
<a name="gwy-undo-container-set-unmodified.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -786,7 +786,7 @@ gwy_undo_container_remove (<em class="parameter"><code><a href="../GwyContainer.
<p>Removes undo/redo information for a data container.</p>
<div class="refsect3">
<a name="gwy-undo-container-remove.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -834,7 +834,7 @@ functions may wish to disable it to conserve resources.</p>
removes saved undo data of all containers.</p>
<div class="refsect3">
<a name="gwy-undo-set-enabled.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwyapp/html/libgwyapp-wait.html b/devel-docs/libgwyapp/html/libgwyapp-wait.html
index f7000be..9aa3805 100644
--- a/devel-docs/libgwyapp/html/libgwyapp-wait.html
+++ b/devel-docs/libgwyapp/html/libgwyapp-wait.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>wait: Gwyddion Application Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Application Library Reference Manual">
<link rel="prev" href="libgwyapp-Validate.html" title="Validate">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwyapp-wait.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -95,6 +95,30 @@
<a class="link" href="libgwyapp-wait.html#gwy-app-wait-cursor-finish" title="gwy_app_wait_cursor_finish ()">gwy_app_wait_cursor_finish</a> <span class="c_punctuation">()</span>
</td>
</tr>
+<tr>
+<td class="function_type">
+<a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="libgwyapp-wait.html#gwy-app-wait-get-enabled" title="gwy_app_wait_get_enabled ()">gwy_app_wait_get_enabled</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="libgwyapp-wait.html#gwy-app-wait-set-enabled" title="gwy_app_wait_set_enabled ()">gwy_app_wait_set_enabled</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="libgwyapp-wait.html#gwy-app-wait-was-canceled" title="gwy_app_wait_was_canceled ()">gwy_app_wait_was_canceled</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
</tbody>
</table></div>
</div>
@@ -166,7 +190,7 @@ gwy_app_wait_start (<em class="parameter"><code><a href="http://developer.gnome.
<a class="link" href="libgwyapp-wait.html#gwy-app-wait-set-message" title="gwy_app_wait_set_message ()"><code class="function">gwy_app_wait_set_message()</code></a> regularly to leave the GUI responsive.</p>
<div class="refsect3">
<a name="gwy-app-wait-start.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -210,7 +234,7 @@ fearing that the program will spend all time updating the GUI and no time in
the calculation.</p>
<div class="refsect3">
<a name="gwy-app-wait-set-fraction.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -240,7 +264,7 @@ usable directly as a callback.</p>
<p>This function lets the Gtk+ main loop to run.</p>
<div class="refsect3">
<a name="gwy-app-wait-set-message.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -255,21 +279,21 @@ usable directly as a callback.</p>
</div>
<div class="refsect3">
<a name="gwy-app-wait-set-message.returns"></a><h4>Returns</h4>
-<p> <a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the operation can continue, <a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if user cancelled it
+<p> <a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the operation can continue, <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if user cancelled it
meanwhile.</p>
</div>
</div>
<hr>
<div class="refsect2">
<a name="gwy-app-wait-set-message-prefix"></a><h3>gwy_app_wait_set_message_prefix ()</h3>
-<pre class="programlisting"><a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
gwy_app_wait_set_message_prefix (<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *prefix</code></em>);</pre>
<p>Sets prefix for the messages shown in the progress dialog.</p>
<p>The prefix will take effect in the next <a class="link" href="libgwyapp-wait.html#gwy-app-wait-set-message" title="gwy_app_wait_set_message ()"><code class="function">gwy_app_wait_set_message()</code></a> call.</p>
<p>This function lets the Gtk+ main loop to run.</p>
<div class="refsect3">
<a name="gwy-app-wait-set-message-prefix.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -297,7 +321,7 @@ gwy_app_wait_cursor_start (<em class="parameter"><code><a href="/usr/share/gtk-d
<p>This function lets the Gtk+ main loop to run.</p>
<div class="refsect3">
<a name="gwy-app-wait-cursor-start.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -324,7 +348,7 @@ it is not restored and has to be set manually. This limitation is due to
the nonexistence of a method to obtain the current cursor.</p>
<div class="refsect3">
<a name="gwy-app-wait-cursor-finish.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -339,6 +363,68 @@ the nonexistence of a method to obtain the current cursor.</p>
</div>
<p class="since">Since: <a class="link" href="api-index-2-3.html#api-index-2.3">2.3</a></p>
</div>
+<hr>
+<div class="refsect2">
+<a name="gwy-app-wait-get-enabled"></a><h3>gwy_app_wait_get_enabled ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gwy_app_wait_get_enabled (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>Reports whether progress reporting is globally enabled.</p>
+<div class="refsect3">
+<a name="gwy-app-wait-get-enabled.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if progress reporting is enabled, <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it is disabled.</p>
+</div>
+<p class="since">Since: <a class="link" href="api-index-2-48.html#api-index-2.48">2.48</a></p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gwy-app-wait-set-enabled"></a><h3>gwy_app_wait_set_enabled ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gwy_app_wait_set_enabled (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> setting</code></em>);</pre>
+<p>Globally enables or disables progress reporting.</p>
+<p>This function may not be used when a waiting dialog is currently being
+shown.</p>
+<p>By default, progress reporting is enabled. Non-GUI applications that run
+module functions may wish to disable it to avoid GTK+ calls or just showing
+the progress dialogs.</p>
+<p>If progress reporting is disabled then functions such as
+<a class="link" href="libgwyapp-wait.html#gwy-app-wait-set-message" title="gwy_app_wait_set_message ()"><code class="function">gwy_app_wait_set_message()</code></a> and <a class="link" href="libgwyapp-wait.html#gwy-app-wait-set-fraction" title="gwy_app_wait_set_fraction ()"><code class="function">gwy_app_wait_set_fraction()</code></a> become no-op and
+always return <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> as nothing can be cancelled by the user. Functions
+<a class="link" href="libgwyapp-wait.html#gwy-app-wait-cursor-start" title="gwy_app_wait_cursor_start ()"><code class="function">gwy_app_wait_cursor_start()</code></a> and <a class="link" href="libgwyapp-wait.html#gwy-app-wait-cursor-finish" title="gwy_app_wait_cursor_finish ()"><code class="function">gwy_app_wait_cursor_finish()</code></a> still work but
+may be called with <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> arguments.</p>
+<div class="refsect3">
+<a name="gwy-app-wait-set-enabled.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>setting</p></td>
+<td class="parameter_description"><p><a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> to enable progress reporting, <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> to disable it.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since: <a class="link" href="api-index-2-48.html#api-index-2.48">2.48</a></p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gwy-app-wait-was-canceled"></a><h3>gwy_app_wait_was_canceled ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gwy_app_wait_was_canceled (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>Checks if a progress dialog was cancelled.</p>
+<p>Calling this function is only meaningful between <a class="link" href="libgwyapp-wait.html#gwy-app-wait-cursor-start" title="gwy_app_wait_cursor_start ()"><code class="function">gwy_app_wait_cursor_start()</code></a>
+and <a class="link" href="libgwyapp-wait.html#gwy-app-wait-finish" title="gwy_app_wait_finish ()"><code class="function">gwy_app_wait_finish()</code></a>. It returns <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the computation was
+cancelled by the user. This may be occasionaly useful in complex
+multi-level calculations. Usually, the return values of
+<a class="link" href="libgwyapp-wait.html#gwy-app-wait-set-fraction" title="gwy_app_wait_set_fraction ()"><code class="function">gwy_app_wait_set_fraction()</code></a> and <a class="link" href="libgwyapp-wait.html#gwy-app-wait-set-message" title="gwy_app_wait_set_message ()"><code class="function">gwy_app_wait_set_message()</code></a> are sufficient.</p>
+<div class="refsect3">
+<a name="gwy-app-wait-was-canceled.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the currently running calculation was cancelled.</p>
+</div>
+<p class="since">Since: <a class="link" href="api-index-2-49.html#api-index-2.49">2.49</a></p>
+</div>
</div>
<div class="refsect1">
<a name="libgwyapp-wait.other_details"></a><h2>Types and Values</h2>
diff --git a/devel-docs/libgwyapp/html/libgwyapp.devhelp2 b/devel-docs/libgwyapp/html/libgwyapp.devhelp2
index 5e5baea..14604a7 100644
--- a/devel-docs/libgwyapp/html/libgwyapp.devhelp2
+++ b/devel-docs/libgwyapp/html/libgwyapp.devhelp2
@@ -41,6 +41,8 @@
<sub name="Index of new symbols in 2.45" link="api-index-2-45.html"/>
<sub name="Index of new symbols in 2.46" link="api-index-2-46.html"/>
<sub name="Index of new symbols in 2.47" link="api-index-2-47.html"/>
+ <sub name="Index of new symbols in 2.48" link="api-index-2-48.html"/>
+ <sub name="Index of new symbols in 2.49" link="api-index-2-49.html"/>
</chapters>
<functions>
<keyword type="function" name="gwy_app_switch_tool ()" link="libgwyapp-app.html#gwy-app-switch-tool"/>
@@ -92,6 +94,7 @@
<keyword type="function" name="gwy_app_data_browser_add_graph_watch ()" link="libgwyapp-data-browser.html#gwy-app-data-browser-add-graph-watch" since="2.41"/>
<keyword type="function" name="gwy_app_data_browser_remove_graph_watch ()" link="libgwyapp-data-browser.html#gwy-app-data-browser-remove-graph-watch" since="2.41"/>
<keyword type="function" name="gwy_app_sync_data_items ()" link="libgwyapp-data-browser.html#gwy-app-sync-data-items"/>
+ <keyword type="function" name="gwy_app_sync_data_itemsv ()" link="libgwyapp-data-browser.html#gwy-app-sync-data-itemsv" since="2.48"/>
<keyword type="function" name="gwy_app_data_browser_copy_channel ()" link="libgwyapp-data-browser.html#gwy-app-data-browser-copy-channel"/>
<keyword type="function" name="gwy_app_data_browser_copy_volume ()" link="libgwyapp-data-browser.html#gwy-app-data-browser-copy-volume" since="2.32"/>
<keyword type="function" name="gwy_app_data_browser_copy_xyz ()" link="libgwyapp-data-browser.html#gwy-app-data-browser-copy-xyz" since="2.45"/>
@@ -367,6 +370,9 @@
<keyword type="function" name="gwy_app_wait_set_message_prefix ()" link="libgwyapp-wait.html#gwy-app-wait-set-message-prefix"/>
<keyword type="function" name="gwy_app_wait_cursor_start ()" link="libgwyapp-wait.html#gwy-app-wait-cursor-start" since="2.3"/>
<keyword type="function" name="gwy_app_wait_cursor_finish ()" link="libgwyapp-wait.html#gwy-app-wait-cursor-finish" since="2.3"/>
+ <keyword type="function" name="gwy_app_wait_get_enabled ()" link="libgwyapp-wait.html#gwy-app-wait-get-enabled" since="2.48"/>
+ <keyword type="function" name="gwy_app_wait_set_enabled ()" link="libgwyapp-wait.html#gwy-app-wait-set-enabled" since="2.48"/>
+ <keyword type="function" name="gwy_app_wait_was_canceled ()" link="libgwyapp-wait.html#gwy-app-wait-was-canceled" since="2.49"/>
<keyword type="constant" name="GWY_APP_CONTAINER" link="libgwyapp-data-browser.html#GWY-APP-CONTAINER:CAPS"/>
<keyword type="constant" name="GWY_APP_DATA_VIEW" link="libgwyapp-data-browser.html#GWY-APP-DATA-VIEW:CAPS"/>
<keyword type="constant" name="GWY_APP_GRAPH" link="libgwyapp-data-browser.html#GWY-APP-GRAPH:CAPS"/>
diff --git a/devel-docs/libgwyapp/libgwyapp-docs.sgml b/devel-docs/libgwyapp/libgwyapp-docs.sgml
index d1a6f18..bb914ab 100644
--- a/devel-docs/libgwyapp/libgwyapp-docs.sgml
+++ b/devel-docs/libgwyapp/libgwyapp-docs.sgml
@@ -34,73 +34,81 @@
<title>Index of all symbols</title>
<xi:include href="xml/api-index-full.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-3" role="2.3">
+ <index id="api-index-2-3">
<title>Index of new symbols in 2.3</title>
<xi:include href="xml/api-index-2.3.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-7" role="2.7">
+ <index id="api-index-2-7">
<title>Index of new symbols in 2.7</title>
<xi:include href="xml/api-index-2.7.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-9" role="2.9">
+ <index id="api-index-2-9">
<title>Index of new symbols in 2.9</title>
<xi:include href="xml/api-index-2.9.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-14" role="2.14">
+ <index id="api-index-2-14">
<title>Index of new symbols in 2.14</title>
<xi:include href="xml/api-index-2.14.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-18" role="2.18">
+ <index id="api-index-2-18">
<title>Index of new symbols in 2.18</title>
<xi:include href="xml/api-index-2.18.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-21" role="2.21">
+ <index id="api-index-2-21">
<title>Index of new symbols in 2.21</title>
<xi:include href="xml/api-index-2.21.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-23" role="2.23">
+ <index id="api-index-2-23">
<title>Index of new symbols in 2.23</title>
<xi:include href="xml/api-index-2.23.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-32" role="2.32">
+ <index id="api-index-2-32">
<title>Index of new symbols in 2.32</title>
<xi:include href="xml/api-index-2.32.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-33" role="2.33">
+ <index id="api-index-2-33">
<title>Index of new symbols in 2.33</title>
<xi:include href="xml/api-index-2.33.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-35" role="2.35">
+ <index id="api-index-2-35">
<title>Index of new symbols in 2.35</title>
<xi:include href="xml/api-index-2.35.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-38" role="2.38">
+ <index id="api-index-2-38">
<title>Index of new symbols in 2.38</title>
<xi:include href="xml/api-index-2.38.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-41" role="2.41">
+ <index id="api-index-2-41">
<title>Index of new symbols in 2.41</title>
<xi:include href="xml/api-index-2.41.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-42" role="2.42">
+ <index id="api-index-2-42">
<title>Index of new symbols in 2.42</title>
<xi:include href="xml/api-index-2.42.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-43" role="2.43">
+ <index id="api-index-2-43">
<title>Index of new symbols in 2.43</title>
<xi:include href="xml/api-index-2.43.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-45" role="2.45">
+ <index id="api-index-2-45">
<title>Index of new symbols in 2.45</title>
<xi:include href="xml/api-index-2.45.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-46" role="2.46">
+ <index id="api-index-2-46">
<title>Index of new symbols in 2.46</title>
<xi:include href="xml/api-index-2.46.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-47" role="2.47">
+ <index id="api-index-2-47">
<title>Index of new symbols in 2.47</title>
<xi:include href="xml/api-index-2.47.xml"><xi:fallback /></xi:include>
</index>
+ <index id="api-index-2-48">
+ <title>Index of new symbols in 2.48</title>
+ <xi:include href="xml/api-index-2.48.xml"><xi:fallback /></xi:include>
+ </index>
+ <index id="api-index-2-49">
+ <title>Index of new symbols in 2.49</title>
+ <xi:include href="xml/api-index-2.49.xml"><xi:fallback /></xi:include>
+ </index>
<!-- API INDICES END -->
</book>
diff --git a/devel-docs/libgwyddion/Makefile.in b/devel-docs/libgwyddion/Makefile.in
index aafe4b9..160d44c 100644
--- a/devel-docs/libgwyddion/Makefile.in
+++ b/devel-docs/libgwyddion/Makefile.in
@@ -178,10 +178,7 @@ EPYDOC = @EPYDOC@
EXEEXT = @EXEEXT@
EXR_CFLAGS = @EXR_CFLAGS@
EXR_LIBS = @EXR_LIBS@
-FFTW3_1_CFLAGS = @FFTW3_1_CFLAGS@
-FFTW3_1_LIBS = @FFTW3_1_LIBS@
FFTW3_CFLAGS = @FFTW3_CFLAGS@
-FFTW3_DEPENDENCY = @FFTW3_DEPENDENCY@
FFTW3_LIBS = @FFTW3_LIBS@
FGREP = @FGREP@
GCONFTOOL = @GCONFTOOL@
@@ -191,6 +188,8 @@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
GLIBC21 = @GLIBC21@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GMODULE_CFLAGS = @GMODULE_CFLAGS@
GMODULE_LIBS = @GMODULE_LIBS@
GMSGFMT = @GMSGFMT@
@@ -215,7 +214,9 @@ GTK_MAC_LIBS = @GTK_MAC_LIBS@
GWY_VERSION_MAJOR = @GWY_VERSION_MAJOR@
GWY_VERSION_MINOR = @GWY_VERSION_MINOR@
GWY_VERSION_STRING = @GWY_VERSION_STRING@
+HDRIMAGE_EXTRA_CFLAGS = @HDRIMAGE_EXTRA_CFLAGS@
HTML_DIR = @HTML_DIR@
+INKSCAPE = @INKSCAPE@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -273,6 +274,7 @@ PASCAL = @PASCAL@
PATH_SEPARATOR = @PATH_SEPARATOR@
PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
+PNGCRUSH = @PNGCRUSH@
PNG_CFLAGS = @PNG_CFLAGS@
PNG_LIBS = @PNG_LIBS@
POD2MAN = @POD2MAN@
@@ -281,17 +283,13 @@ PYGTK_CFLAGS = @PYGTK_CFLAGS@
PYGTK_CODEGENDIR = @PYGTK_CODEGENDIR@
PYGTK_LIBS = @PYGTK_LIBS@
PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
PYTHON_EXTRA_CFLAGS = @PYTHON_EXTRA_CFLAGS@
PYTHON_INCLUDES = @PYTHON_INCLUDES@
-PYTHON_LIBS = @PYTHON_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
PYTHON_PLATFORM = @PYTHON_PLATFORM@
PYTHON_PREFIX = @PYTHON_PREFIX@
-PYTHON_SYSCFG_BASECFLAGS = @PYTHON_SYSCFG_BASECFLAGS@
-PYTHON_SYSCFG_CCSHARED = @PYTHON_SYSCFG_CCSHARED@
-PYTHON_SYSCFG_LDFLAGS = @PYTHON_SYSCFG_LDFLAGS@
-PYTHON_SYSCFG_LIBDIR = @PYTHON_SYSCFG_LIBDIR@
-PYTHON_SYSCFG_LINKFORSHARED = @PYTHON_SYSCFG_LINKFORSHARED@
PYTHON_VERSION = @PYTHON_VERSION@
RANLIB = @RANLIB@
RUBY = @RUBY@
diff --git a/devel-docs/libgwyddion/html/GwyContainer.html b/devel-docs/libgwyddion/html/GwyContainer.html
index 8264788..9581618 100644
--- a/devel-docs/libgwyddion/html/GwyContainer.html
+++ b/devel-docs/libgwyddion/html/GwyContainer.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GwyContainer: Gwyddion Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="prev" href="GwySerializable.html" title="GwySerializable">
@@ -36,7 +36,7 @@
</tr></table></div>
<div class="refsect1">
<a name="GwyContainer.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -138,6 +138,14 @@
</tr>
<tr>
<td class="function_type">
+<a class="link" href="GwyContainer.html" title="GwyContainer"><span class="returnvalue">GwyContainer</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="GwyContainer.html#gwy-container-duplicate-by-prefixv" title="gwy_container_duplicate_by_prefixv ()">gwy_container_duplicate_by_prefixv</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
<a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>
</td>
<td class="function_name">
@@ -581,7 +589,7 @@
</div>
<div class="refsect1">
<a name="GwyContainer.signals"></a><h2>Signals</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
<colgroup>
<col width="150px" class="signals_return">
<col width="300px" class="signals_name">
@@ -596,7 +604,7 @@
</div>
<div class="refsect1">
<a name="GwyContainer.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -672,7 +680,7 @@ less convenient for casual usage -- each <a href="/usr/share/gtk-doc/html/glibgl
typecasting.</p>
<div class="refsect3">
<a name="gwy-container-duplicate.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -705,7 +713,7 @@ gwy_container_get_n_items (<em class="parameter"><code><a class="link" href="Gwy
<p>Gets the number of items in a container.</p>
<div class="refsect3">
<a name="gwy-container-get-n-items.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -734,7 +742,7 @@ gwy_container_value_type (<em class="parameter"><code><a class="link" href="GwyC
.</p>
<div class="refsect3">
<a name="gwy-container-value-type.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -770,7 +778,7 @@ gwy_container_contains (<em class="parameter"><code><a class="link" href="GwyCon
.</p>
<div class="refsect3">
<a name="gwy-container-contains.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -808,7 +816,7 @@ gwy_container_get_value (<em class="parameter"><code><a class="link" href="GwyCo
.</p>
<div class="refsect3">
<a name="gwy-container-get-value.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -843,7 +851,7 @@ gwy_container_gis_value (<em class="parameter"><code><a class="link" href="GwyCo
<p>Get-if-set a generic value from a container.</p>
<div class="refsect3">
<a name="gwy-container-gis-value.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -886,7 +894,7 @@ gwy_container_set_value (<em class="parameter"><code><a class="link" href="GwyCo
.</p>
<div class="refsect3">
<a name="gwy-container-set-value.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -917,7 +925,7 @@ gwy_container_set_value_by_name (<em class="parameter"><code><a class="link" hre
.</p>
<div class="refsect3">
<a name="gwy-container-set-value-by-name.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -948,7 +956,7 @@ gwy_container_remove (<em class="parameter"><code><a class="link" href="GwyConta
from a container.</p>
<div class="refsect3">
<a name="gwy-container-remove.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -986,7 +994,7 @@ gwy_container_remove_by_prefix (<em class="parameter"><code><a class="link" href
can be <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>, all values are then removed.</p>
<div class="refsect3">
<a name="gwy-container-remove-by-prefix.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1022,7 +1030,7 @@ gwy_container_duplicate_by_prefix (<em class="parameter"><code><a class="link" h
contained object are physically duplicated too, not just referenced again.</p>
<div class="refsect3">
<a name="gwy-container-duplicate-by-prefix.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1049,6 +1057,49 @@ contained object are physically duplicated too, not just referenced again.</p>
</div>
<hr>
<div class="refsect2">
+<a name="gwy-container-duplicate-by-prefixv"></a><h3>gwy_container_duplicate_by_prefixv ()</h3>
+<pre class="programlisting"><a class="link" href="GwyContainer.html" title="GwyContainer"><span class="returnvalue">GwyContainer</span></a> *
+gwy_container_duplicate_by_prefixv (<em class="parameter"><code><a class="link" href="GwyContainer.html" title="GwyContainer"><span class="type">GwyContainer</span></a> *container</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> n</code></em>,
+ <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> **prefixes</code></em>);</pre>
+<p>Duplicates a container keeping only values under given prefixes.</p>
+<p>Like <a class="link" href="GwyContainer.html#gwy-container-duplicate" title="gwy_container_duplicate()"><code class="function">gwy_container_duplicate()</code></a>, this method creates a deep copy, that is
+contained object are physically duplicated too, not just referenced again.</p>
+<div class="refsect3">
+<a name="gwy-container-duplicate-by-prefixv.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>container</p></td>
+<td class="parameter_description"><p>A container.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>n</p></td>
+<td class="parameter_description"><p>Number of prefixes.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>prefixes</p></td>
+<td class="parameter_description"><p>List of prefixes.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gwy-container-duplicate-by-prefixv.returns"></a><h4>Returns</h4>
+<p> A newly created container.</p>
+</div>
+<p class="since">Since: <a class="link" href="api-index-2-48.html#api-index-2.48">2.48</a></p>
+</div>
+<hr>
+<div class="refsect2">
<a name="gwy-container-transfer"></a><h3>gwy_container_transfer ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>
gwy_container_transfer (<em class="parameter"><code><a class="link" href="GwyContainer.html" title="GwyContainer"><span class="type">GwyContainer</span></a> *source</code></em>,
@@ -1062,7 +1113,7 @@ referenced in <em class="parameter"><code>dest</code></em>
.</p>
<div class="refsect3">
<a name="gwy-container-transfer.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1130,7 +1181,7 @@ When it's <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:C
is returned.</p>
<div class="refsect3">
<a name="gwy-container-rename.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1183,7 +1234,7 @@ gwy_container_foreach (<em class="parameter"><code><a class="link" href="GwyCont
(<a href="/usr/share/gtk-doc/html/glibglib-Quarks.html#GQuark"><span class="type">GQuark</span></a> key, <a href="/usr/share/gtk-doc/html/gobjectgobject-Generic-values.html#GValue"><span class="type">GValue</span></a> *value, user_data).</p>
<div class="refsect3">
<a name="gwy-container-foreach.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1228,7 +1279,7 @@ gwy_container_keys (<em class="parameter"><code><a class="link" href="GwyContain
<p>Gets all quark keys of a container.</p>
<div class="refsect3">
<a name="gwy-container-keys.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1259,7 +1310,7 @@ gwy_container_keys_by_name (<em class="parameter"><code><a class="link" href="Gw
<p>Gets all string keys of a container.</p>
<div class="refsect3">
<a name="gwy-container-keys-by-name.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1295,7 +1346,7 @@ gwy_container_set_boolean (<em class="parameter"><code><a class="link" href="Gwy
.</p>
<div class="refsect3">
<a name="gwy-container-set-boolean.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1332,7 +1383,7 @@ gwy_container_get_boolean (<em class="parameter"><code><a class="link" href="Gwy
.</p>
<div class="refsect3">
<a name="gwy-container-get-boolean.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1367,7 +1418,7 @@ gwy_container_gis_boolean (<em class="parameter"><code><a class="link" href="Gwy
<p>Get-if-set a boolean from a container.</p>
<div class="refsect3">
<a name="gwy-container-gis-boolean.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1411,7 +1462,7 @@ gwy_container_set_uchar (<em class="parameter"><code><a class="link" href="GwyCo
.</p>
<div class="refsect3">
<a name="gwy-container-set-uchar.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1448,7 +1499,7 @@ gwy_container_get_uchar (<em class="parameter"><code><a class="link" href="GwyCo
.</p>
<div class="refsect3">
<a name="gwy-container-get-uchar.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1483,7 +1534,7 @@ gwy_container_gis_uchar (<em class="parameter"><code><a class="link" href="GwyCo
<p>Get-if-set an unsigned char from a container.</p>
<div class="refsect3">
<a name="gwy-container-gis-uchar.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1527,7 +1578,7 @@ gwy_container_set_int32 (<em class="parameter"><code><a class="link" href="GwyCo
.</p>
<div class="refsect3">
<a name="gwy-container-set-int32.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1564,7 +1615,7 @@ gwy_container_get_int32 (<em class="parameter"><code><a class="link" href="GwyCo
.</p>
<div class="refsect3">
<a name="gwy-container-get-int32.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1599,7 +1650,7 @@ gwy_container_gis_int32 (<em class="parameter"><code><a class="link" href="GwyCo
<p>Get-if-set a 32bit integer from a container.</p>
<div class="refsect3">
<a name="gwy-container-gis-int32.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1644,7 +1695,7 @@ gwy_container_set_enum (<em class="parameter"><code><a class="link" href="GwyCon
<p>Note enums are treated as 32bit integers.</p>
<div class="refsect3">
<a name="gwy-container-set-enum.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1682,7 +1733,7 @@ gwy_container_get_enum (<em class="parameter"><code><a class="link" href="GwyCon
<p>Note enums are treated as 32bit integers.</p>
<div class="refsect3">
<a name="gwy-container-get-enum.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1718,7 +1769,7 @@ gwy_container_gis_enum (<em class="parameter"><code><a class="link" href="GwyCon
<p>Note enums are treated as 32bit integers.</p>
<div class="refsect3">
<a name="gwy-container-gis-enum.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1762,7 +1813,7 @@ gwy_container_set_int64 (<em class="parameter"><code><a class="link" href="GwyCo
.</p>
<div class="refsect3">
<a name="gwy-container-set-int64.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1799,7 +1850,7 @@ gwy_container_get_int64 (<em class="parameter"><code><a class="link" href="GwyCo
.</p>
<div class="refsect3">
<a name="gwy-container-get-int64.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1834,7 +1885,7 @@ gwy_container_gis_int64 (<em class="parameter"><code><a class="link" href="GwyCo
<p>Get-if-set a 64bit integer from a container.</p>
<div class="refsect3">
<a name="gwy-container-gis-int64.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1878,7 +1929,7 @@ gwy_container_set_double (<em class="parameter"><code><a class="link" href="GwyC
.</p>
<div class="refsect3">
<a name="gwy-container-set-double.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1915,7 +1966,7 @@ gwy_container_get_double (<em class="parameter"><code><a class="link" href="GwyC
.</p>
<div class="refsect3">
<a name="gwy-container-get-double.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1950,7 +2001,7 @@ gwy_container_gis_double (<em class="parameter"><code><a class="link" href="GwyC
<p>Get-if-set a double from a container.</p>
<div class="refsect3">
<a name="gwy-container-gis-double.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1996,7 +2047,7 @@ gwy_container_set_string (<em class="parameter"><code><a class="link" href="GwyC
static strings, use <a href="/usr/share/gtk-doc/html/glibglib-String-Utility-Functions.html#g-strdup"><code class="function">g_strdup()</code></a> to duplicate them first.</p>
<div class="refsect3">
<a name="gwy-container-set-string.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2036,7 +2087,7 @@ gwy_container_set_const_string (<em class="parameter"><code><a class="link" href
strings.</p>
<div class="refsect3">
<a name="gwy-container-set-const-string.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2075,7 +2126,7 @@ gwy_container_get_string (<em class="parameter"><code><a class="link" href="GwyC
<p>The returned string must be treated as constant and never freed or modified.</p>
<div class="refsect3">
<a name="gwy-container-get-string.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2113,7 +2164,7 @@ gwy_container_gis_string (<em class="parameter"><code><a class="link" href="GwyC
never freed or modified.</p>
<div class="refsect3">
<a name="gwy-container-gis-string.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2161,7 +2212,7 @@ incremented.</p>
of the container.</p>
<div class="refsect3">
<a name="gwy-container-set-object.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2202,7 +2253,7 @@ gwy_container_get_object (<em class="parameter"><code><a class="link" href="GwyC
to exist.</p>
<div class="refsect3">
<a name="gwy-container-get-object.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2242,7 +2293,7 @@ increased, use <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-T
may cease to exist.</p>
<div class="refsect3">
<a name="gwy-container-gis-object.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2285,7 +2336,7 @@ gwy_container_serialize_to_text (<em class="parameter"><code><a class="link" hre
objects is not controllable.</p>
<div class="refsect3">
<a name="gwy-container-serialize-to-text.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2312,7 +2363,7 @@ gwy_container_deserialize_from_text (<em class="parameter"><code>const <a href="
<p>Restores a container from is text representation.</p>
<div class="refsect3">
<a name="gwy-container-deserialize-from-text.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2341,7 +2392,7 @@ gwy_container_deserialize_from_text (<em class="parameter"><code>const <a href="
.</p>
<div class="refsect3">
<a name="gwy-container-value-type-by-name.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2372,7 +2423,7 @@ gwy_container_deserialize_from_text (<em class="parameter"><code>const <a href="
.</p>
<div class="refsect3">
<a name="gwy-container-contains-by-name.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2403,7 +2454,7 @@ gwy_container_deserialize_from_text (<em class="parameter"><code>const <a href="
.</p>
<div class="refsect3">
<a name="gwy-container-get-value-by-name.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2435,7 +2486,7 @@ gwy_container_deserialize_from_text (<em class="parameter"><code>const <a href="
such value in the container.</p>
<div class="refsect3">
<a name="gwy-container-gis-value-by-name.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2473,7 +2524,7 @@ it is left untouched.</p></td>
<p>Expands to <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if there was such a value and was removed.</p>
<div class="refsect3">
<a name="gwy-container-remove-by-name.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2507,7 +2558,7 @@ new name <em class="parameter"><code>nn</code></em>
<p>See <a class="link" href="GwyContainer.html#gwy-container-rename" title="gwy_container_rename ()"><code class="function">gwy_container_rename()</code></a> for details.</p>
<div class="refsect3">
<a name="gwy-container-rename-by-name.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2549,7 +2600,7 @@ new name <em class="parameter"><code>nn</code></em>
.</p>
<div class="refsect3">
<a name="gwy-container-set-boolean-by-name.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2585,7 +2636,7 @@ new name <em class="parameter"><code>nn</code></em>
.</p>
<div class="refsect3">
<a name="gwy-container-get-boolean-by-name.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2617,7 +2668,7 @@ new name <em class="parameter"><code>nn</code></em>
such boolean in the container.</p>
<div class="refsect3">
<a name="gwy-container-gis-boolean-by-name.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2653,7 +2704,7 @@ such boolean in the container.</p>
.</p>
<div class="refsect3">
<a name="gwy-container-set-uchar-by-name.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2689,7 +2740,7 @@ such boolean in the container.</p>
.</p>
<div class="refsect3">
<a name="gwy-container-get-uchar-by-name.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2721,7 +2772,7 @@ such boolean in the container.</p>
such unsigned char in the container.</p>
<div class="refsect3">
<a name="gwy-container-gis-uchar-by-name.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2757,7 +2808,7 @@ such unsigned char in the container.</p>
.</p>
<div class="refsect3">
<a name="gwy-container-set-int32-by-name.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2793,7 +2844,7 @@ such unsigned char in the container.</p>
.</p>
<div class="refsect3">
<a name="gwy-container-get-int32-by-name.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2825,7 +2876,7 @@ such unsigned char in the container.</p>
such 32bit integer in the container.</p>
<div class="refsect3">
<a name="gwy-container-gis-int32-by-name.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2862,7 +2913,7 @@ such 32bit integer in the container.</p>
<p>Note enums are treated as 32bit integers.</p>
<div class="refsect3">
<a name="gwy-container-set-enum-by-name.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2899,7 +2950,7 @@ such 32bit integer in the container.</p>
<p>Note enums are treated as 32bit integers.</p>
<div class="refsect3">
<a name="gwy-container-get-enum-by-name.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2932,7 +2983,7 @@ such 32bit integer in the container.</p>
such enum in the container.</p>
<div class="refsect3">
<a name="gwy-container-gis-enum-by-name.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2968,7 +3019,7 @@ such enum in the container.</p>
.</p>
<div class="refsect3">
<a name="gwy-container-set-int64-by-name.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -3004,7 +3055,7 @@ such enum in the container.</p>
.</p>
<div class="refsect3">
<a name="gwy-container-get-int64-by-name.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -3036,7 +3087,7 @@ such enum in the container.</p>
such 64bit integer in the container.</p>
<div class="refsect3">
<a name="gwy-container-gis-int64-by-name.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -3072,7 +3123,7 @@ such 64bit integer in the container.</p>
.</p>
<div class="refsect3">
<a name="gwy-container-set-double-by-name.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -3108,7 +3159,7 @@ such 64bit integer in the container.</p>
.</p>
<div class="refsect3">
<a name="gwy-container-get-double-by-name.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -3140,7 +3191,7 @@ such 64bit integer in the container.</p>
such double in the container.</p>
<div class="refsect3">
<a name="gwy-container-gis-double-by-name.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -3178,7 +3229,7 @@ such double in the container.</p>
static strings, use <a href="/usr/share/gtk-doc/html/glibglib-String-Utility-Functions.html#g-strdup"><code class="function">g_strdup()</code></a> to duplicate them first.</p>
<div class="refsect3">
<a name="gwy-container-set-string-by-name.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -3216,7 +3267,7 @@ static strings, use <a href="/usr/share/gtk-doc/html/glibglib-String-Utility-Fun
strings.</p>
<div class="refsect3">
<a name="gwy-container-set-const-string-by-name.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -3254,7 +3305,7 @@ strings.</p>
<p>The returned string must be treated as constant and never freed or modified.</p>
<div class="refsect3">
<a name="gwy-container-get-string-by-name.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -3289,7 +3340,7 @@ never freed or modified.</p>
such string in the container.</p>
<div class="refsect3">
<a name="gwy-container-gis-string-by-name.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -3326,7 +3377,7 @@ such string in the container.</p>
<p>See <a class="link" href="GwyContainer.html#gwy-container-set-object" title="gwy_container_set_object ()"><code class="function">gwy_container_set_object()</code></a> for details.</p>
<div class="refsect3">
<a name="gwy-container-set-object-by-name.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -3366,7 +3417,7 @@ such string in the container.</p>
to exist.</p>
<div class="refsect3">
<a name="gwy-container-get-object-by-name.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -3403,7 +3454,7 @@ increased, use <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-T
such object in the container.</p>
<div class="refsect3">
<a name="gwy-container-gis-object-by-name.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -3476,7 +3527,7 @@ user_function (<a class="link" href="GwyContainer.html" title="GwyContainer"><sp
changed. The detail is the string key identifier.</p>
<div class="refsect3">
<a name="GwyContainer-item-changed.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwyddion/html/GwyEnum.html b/devel-docs/libgwyddion/html/GwyEnum.html
index 2a89ef2..2158135 100644
--- a/devel-docs/libgwyddion/html/GwyEnum.html
+++ b/devel-docs/libgwyddion/html/GwyEnum.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GwyEnum: Gwyddion Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="prev" href="libgwyddion-gwyversion.html" title="gwyversion">
@@ -34,7 +34,7 @@
</tr></table></div>
<div class="refsect1">
<a name="GwyEnum.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -135,7 +135,7 @@ gwy_string_to_enum (<em class="parameter"><code>const <a href="http://developer.
.</p>
<div class="refsect3">
<a name="gwy-string-to-enum.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -181,7 +181,7 @@ gwy_enum_to_string (<em class="parameter"><code><a href="http://developer.gnome.
.</p>
<div class="refsect3">
<a name="gwy-enum-to-string.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -230,7 +230,7 @@ gwy_enuml_to_string (<em class="parameter"><code><a href="/usr/share/gtk-doc/htm
.</p>
<div class="refsect3">
<a name="gwy-enuml-to-string.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -272,7 +272,7 @@ gwy_string_to_flags (<em class="parameter"><code>const <a href="/usr/share/gtk-d
.</p>
<div class="refsect3">
<a name="gwy-string-to-flags.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -325,7 +325,7 @@ gwy_flags_to_string (<em class="parameter"><code><a href="/usr/share/gtk-doc/htm
.</p>
<div class="refsect3">
<a name="gwy-flags-to-string.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -374,7 +374,7 @@ gwy_enum_sanitize_value (<em class="parameter"><code><a href="/usr/share/gtk-doc
<p>Makes sure an enum value is valid.</p>
<div class="refsect3">
<a name="gwy-enum-sanitize-value.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -415,7 +415,7 @@ gwy_enum_freev (<em class="parameter"><code><a class="link" href="GwyEnum.html"
itself.</p>
<div class="refsect3">
<a name="gwy-enum-freev.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -440,7 +440,7 @@ gwy_enum_inventory_new (<em class="parameter"><code>const <a class="link" href="
lifetime of the inventory.</p>
<div class="refsect3">
<a name="gwy-enum-inventory-new.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwyddion/html/GwyFDCurvePreset.html b/devel-docs/libgwyddion/html/GwyFDCurvePreset.html
index e552213..c64f707 100644
--- a/devel-docs/libgwyddion/html/GwyFDCurvePreset.html
+++ b/devel-docs/libgwyddion/html/GwyFDCurvePreset.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GwyFDCurvePreset: Gwyddion Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="prev" href="GwyNLFitPreset.html" title="GwyNLFitPreset">
@@ -34,7 +34,7 @@
</tr></table></div>
<div class="refsect1">
<a name="GwyFDCurvePreset.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -51,7 +51,7 @@
</div>
<div class="refsect1">
<a name="GwyFDCurvePreset.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
diff --git a/devel-docs/libgwyddion/html/GwyInventory.html b/devel-docs/libgwyddion/html/GwyInventory.html
index 3192439..7cef1aa 100644
--- a/devel-docs/libgwyddion/html/GwyInventory.html
+++ b/devel-docs/libgwyddion/html/GwyInventory.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GwyInventory: Gwyddion Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="prev" href="GwyEnum.html" title="GwyEnum">
@@ -36,7 +36,7 @@
</tr></table></div>
<div class="refsect1">
<a name="GwyInventory.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -253,7 +253,7 @@
</div>
<div class="refsect1">
<a name="GwyInventory.signals"></a><h2>Signals</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
<colgroup>
<col width="150px" class="signals_return">
<col width="300px" class="signals_name">
@@ -290,7 +290,7 @@
</div>
<div class="refsect1">
<a name="GwyInventory.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -355,7 +355,7 @@ gwy_inventory_new (<em class="parameter"><code>const <a class="link" href="GwyIn
<p>Creates a new inventory.</p>
<div class="refsect3">
<a name="gwy-inventory-new.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -383,7 +383,7 @@ gwy_inventory_new_filled (<em class="parameter"><code>const <a class="link" href
<p>Creates a new inventory and fills it with items.</p>
<div class="refsect3">
<a name="gwy-inventory-new-filled.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -428,7 +428,7 @@ adaptor for the array <em class="parameter"><code>items</code></em>
.</p>
<div class="refsect3">
<a name="gwy-inventory-new-from-array.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -474,7 +474,7 @@ gwy_inventory_get_n_items (<em class="parameter"><code><a class="link" href="Gwy
<p>Returns the number of items in an inventory.</p>
<div class="refsect3">
<a name="gwy-inventory-get-n-items.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -502,7 +502,7 @@ gwy_inventory_can_make_copies (<em class="parameter"><code><a class="link" href=
functions like <a class="link" href="GwyInventory.html#gwy-inventory-new-item" title="gwy_inventory_new_item ()"><code class="function">gwy_inventory_new_item()</code></a>.</p>
<div class="refsect3">
<a name="gwy-inventory-can-make-copies.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -530,7 +530,7 @@ gwy_inventory_is_const (<em class="parameter"><code><a class="link" href="GwyInv
<a class="link" href="GwyInventory.html#gwy-inventory-get-item" title="gwy_inventory_get_item ()"><code class="function">gwy_inventory_get_item()</code></a> may return pointers to constant memory.</p>
<div class="refsect3">
<a name="gwy-inventory-is-const.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -556,7 +556,7 @@ gwy_inventory_get_item_type (<em class="parameter"><code><a class="link" href="G
<p>Returns the type of item an inventory holds.</p>
<div class="refsect3">
<a name="gwy-inventory-get-item-type.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -584,7 +584,7 @@ gwy_inventory_get_item (<em class="parameter"><code><a class="link" href="GwyInv
<p>Looks up an item in an inventory.</p>
<div class="refsect3">
<a name="gwy-inventory-get-item.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -621,7 +621,7 @@ gwy_inventory_get_item_or_default (<em class="parameter"><code><a class="link" h
inventory item, <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> (can happen only when inventory is empty).</p>
<div class="refsect3">
<a name="gwy-inventory-get-item-or-default.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -656,7 +656,7 @@ gwy_inventory_get_nth_item (<em class="parameter"><code><a class="link" href="Gw
<p>Returns item on given position in an inventory.</p>
<div class="refsect3">
<a name="gwy-inventory-get-nth-item.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -694,7 +694,7 @@ gwy_inventory_get_item_position (<em class="parameter"><code><a class="link" hre
<p>Finds position of an item in an inventory.</p>
<div class="refsect3">
<a name="gwy-inventory-get-item-position.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -733,7 +733,7 @@ gwy_inventory_foreach (<em class="parameter"><code><a class="link" href="GwyInve
.</p>
<div class="refsect3">
<a name="gwy-inventory-foreach.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -775,7 +775,7 @@ gwy_inventory_find (<em class="parameter"><code><a class="link" href="GwyInvento
<a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>. Its arguments are the same as in <a class="link" href="GwyInventory.html#gwy-inventory-foreach" title="gwy_inventory_foreach ()"><code class="function">gwy_inventory_foreach()</code></a>.</p>
<div class="refsect3">
<a name="gwy-inventory-find.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -821,7 +821,7 @@ gwy_inventory_set_default_item_name (<em class="parameter"><code><a class="link"
must already exist in the inventory.</p>
<div class="refsect3">
<a name="gwy-inventory-set-default-item-name.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -850,7 +850,7 @@ gwy_inventory_get_default_item_name (<em class="parameter"><code><a class="link"
<p>Returns the name of the default item of an inventory.</p>
<div class="refsect3">
<a name="gwy-inventory-get-default-item-name.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -877,7 +877,7 @@ gwy_inventory_get_default_item (<em class="parameter"><code><a class="link" href
<p>Returns the default item of an inventory.</p>
<div class="refsect3">
<a name="gwy-inventory-get-default-item.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -906,7 +906,7 @@ gwy_inventory_item_updated (<em class="parameter"><code><a class="link" href="Gw
can notify inventory via signals.</p>
<div class="refsect3">
<a name="gwy-inventory-item-updated.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -939,7 +939,7 @@ can provide <em class="parameter"><code>watchable_signal</code></em>
.</p>
<div class="refsect3">
<a name="gwy-inventory-nth-item-updated.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -968,7 +968,7 @@ gwy_inventory_restore_order (<em class="parameter"><code><a class="link" href="G
<p>Assures an inventory is sorted.</p>
<div class="refsect3">
<a name="gwy-inventory-restore-order.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -992,7 +992,7 @@ gwy_inventory_forget_order (<em class="parameter"><code><a class="link" href="Gw
try to insert items in order.</p>
<div class="refsect3">
<a name="gwy-inventory-forget-order.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1018,7 +1018,7 @@ gwy_inventory_insert_item (<em class="parameter"><code><a class="link" href="Gwy
inventory is unsorted, item is simply added to the end.</p>
<div class="refsect3">
<a name="gwy-inventory-insert-item.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1055,7 +1055,7 @@ gwy_inventory_insert_nth_item (<em class="parameter"><code><a class="link" href=
<p>Item of the same name must not exist yet.</p>
<div class="refsect3">
<a name="gwy-inventory-insert-nth-item.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1096,7 +1096,7 @@ gwy_inventory_delete_item (<em class="parameter"><code><a class="link" href="Gwy
<p>Deletes an item from an inventory.</p>
<div class="refsect3">
<a name="gwy-inventory-delete-item.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1130,7 +1130,7 @@ gwy_inventory_delete_nth_item (<em class="parameter"><code><a class="link" href=
<p>Deletes an item on given position from an inventory.</p>
<div class="refsect3">
<a name="gwy-inventory-delete-nth-item.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1170,7 +1170,7 @@ gwy_inventory_rename_item (<em class="parameter"><code><a class="link" href="Gwy
will fail.</p>
<div class="refsect3">
<a name="gwy-inventory-rename-item.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1213,7 +1213,7 @@ gwy_inventory_new_item (<em class="parameter"><code><a class="link" href="GwyInv
already exists.</p>
<div class="refsect3">
<a name="gwy-inventory-new-item.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1310,7 +1310,7 @@ plain C structs or something else, you can easily export their data members
as virtual <a href="/usr/share/gtk-doc/html/gtk3GtkTreeModel.html#GtkTreeModel-struct"><span class="type">GtkTreeModel</span></a> columns by defining traits for them.</p>
<div class="refsect3">
<a name="GwyInventoryItemType.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="struct_members_name">
<col class="struct_members_description">
@@ -1427,7 +1427,7 @@ default inventory item name changes or the presence of such an item
in the inventory changes.</p>
<div class="refsect3">
<a name="GwyInventory-default-changed.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1460,7 +1460,7 @@ user_function (<a class="link" href="GwyInventory.html" title="GwyInventory"><sp
an inventory.</p>
<div class="refsect3">
<a name="GwyInventory-item-deleted.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1498,7 +1498,7 @@ user_function (<a class="link" href="GwyInventory.html" title="GwyInventory"><sp
an inventory.</p>
<div class="refsect3">
<a name="GwyInventory-item-inserted.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1536,7 +1536,7 @@ user_function (<a class="link" href="GwyInventory.html" title="GwyInventory"><sp
is updated.</p>
<div class="refsect3">
<a name="GwyInventory-item-updated.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1574,7 +1574,7 @@ user_function (<a class="link" href="GwyInventory.html" title="GwyInventory"><sp
are reordered.</p>
<div class="refsect3">
<a name="GwyInventory-items-reordered.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwyddion/html/GwyNLFitPreset.html b/devel-docs/libgwyddion/html/GwyNLFitPreset.html
index db19d85..7b01ff6 100644
--- a/devel-docs/libgwyddion/html/GwyNLFitPreset.html
+++ b/devel-docs/libgwyddion/html/GwyNLFitPreset.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GwyNLFitPreset: Gwyddion Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="prev" href="libgwyddion-GwyNLFitter.html" title="GwyNLFitter">
@@ -34,7 +34,7 @@
</tr></table></div>
<div class="refsect1">
<a name="GwyNLFitPreset.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -115,7 +115,7 @@
</div>
<div class="refsect1">
<a name="GwyNLFitPreset.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -193,6 +193,10 @@ fitting parameters from units of fitted data is also available:
<tr><td><code class="literal">"Smooth bent step"</code></td></tr>
<tr><td><code class="literal">"Smooth slanted step"</code></td></tr>
</table>
+<p>The following presets are available since version 2.48:</p>
+<table border="0" summary="Simple list" class="simplelist"><tr><td><code class="literal">"K-correlated (PSDF)"</code></td></tr></table>
+<p>The following presets are available since version 2.49:</p>
+<table border="0" summary="Simple list" class="simplelist"><tr><td><code class="literal">"Boltzmann bent step"</code></td></tr></table>
<p>The result of the fitting is stored in a normal <a class="link" href="libgwyddion-GwyNLFitter.html#GwyNLFitter" title="struct GwyNLFitter"><span class="type">GwyNLFitter</span></a>, therefore the
typical use is:</p>
<div class="informalexample">
@@ -254,7 +258,7 @@ gwy_nlfit_preset_get_value (<em class="parameter"><code><a class="link" href="Gw
<p>Calculates preset function value in a single point with given parameters.</p>
<div class="refsect3">
<a name="gwy-nlfit-preset-get-value.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -298,7 +302,7 @@ gwy_nlfit_preset_get_formula (<em class="parameter"><code><a class="link" href="
(with Pango markup).</p>
<div class="refsect3">
<a name="gwy-nlfit-preset-get-formula.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -325,7 +329,7 @@ gwy_nlfit_preset_get_nparams (<em class="parameter"><code><a class="link" href="
.</p>
<div class="refsect3">
<a name="gwy-nlfit-preset-get-nparams.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -353,7 +357,7 @@ gwy_nlfit_preset_get_param_name (<em class="parameter"><code><a class="link" hre
<p>The name may contain Pango markup.</p>
<div class="refsect3">
<a name="gwy-nlfit-preset-get-param-name.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -391,7 +395,7 @@ gwy_nlfit_preset_get_param_units (<em class="parameter"><code><a class="link" hr
ordinate.</p>
<div class="refsect3">
<a name="gwy-nlfit-preset-get-param-units.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -451,7 +455,7 @@ estimate.</p>
values that should not give raise to NaNs and infinities.</p>
<div class="refsect3">
<a name="gwy-nlfit-preset-guess.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -507,7 +511,7 @@ gwy_nlfit_preset_create_fitter (<em class="parameter"><code><a class="link" href
<a class="link" href="GwyNLFitPreset.html#gwy-nlfit-preset-fit" title="gwy_nlfit_preset_fit ()"><code class="function">gwy_nlfit_preset_fit()</code></a> directly with <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> fitter.</p>
<div class="refsect3">
<a name="gwy-nlfit-preset-create-fitter.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -543,7 +547,7 @@ gwy_nlfit_preset_fit (<em class="parameter"><code><a class="link" href="GwyNLFit
<p>See <a class="link" href="libgwyddion-GwyNLFitter.html#gwy-math-nlfit-fit-full" title="gwy_math_nlfit_fit_full ()"><code class="function">gwy_math_nlfit_fit_full()</code></a> for details.</p>
<div class="refsect3">
<a name="gwy-nlfit-preset-fit.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwyddion/html/GwyResource.html b/devel-docs/libgwyddion/html/GwyResource.html
index 3a601c2..9799c37 100644
--- a/devel-docs/libgwyddion/html/GwyResource.html
+++ b/devel-docs/libgwyddion/html/GwyResource.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GwyResource: Gwyddion Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="prev" href="libgwyddion-GwyRandGenSet.html" title="GwyRandGenSet">
@@ -36,7 +36,7 @@
</tr></table></div>
<div class="refsect1">
<a name="GwyResource.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -188,7 +188,7 @@
</div>
<div class="refsect1">
<a name="GwyResource.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
<colgroup>
<col width="150px" class="properties_type">
<col width="300px" class="properties_name">
@@ -216,7 +216,7 @@
</div>
<div class="refsect1">
<a name="GwyResource.signals"></a><h2>Signals</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
<colgroup>
<col width="150px" class="signals_return">
<col width="300px" class="signals_name">
@@ -231,7 +231,7 @@
</div>
<div class="refsect1">
<a name="GwyResource.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -276,7 +276,7 @@ gwy_resource_get_name (<em class="parameter"><code><a class="link" href="GwyReso
<p>Returns resource name.</p>
<div class="refsect3">
<a name="gwy-resource-get-name.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -305,7 +305,7 @@ gwy_resource_get_is_modifiable (<em class="parameter"><code><a class="link" href
<p>Returns whether a resource is modifiable.</p>
<div class="refsect3">
<a name="gwy-resource-get-is-modifiable.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -332,7 +332,7 @@ gwy_resource_get_is_preferred (<em class="parameter"><code><a class="link" href=
<p>Returns whether a resource is preferred.</p>
<div class="refsect3">
<a name="gwy-resource-get-is-preferred.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -359,7 +359,7 @@ gwy_resource_set_is_preferred (<em class="parameter"><code><a class="link" href=
<p>Sets preferability of a resource.</p>
<div class="refsect3">
<a name="gwy-resource-set-is-preferred.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -391,7 +391,7 @@ gwy_resource_class_get_name (<em class="parameter"><code><a class="link" href="G
<p>This is an simple identifier usable for example as directory name.</p>
<div class="refsect3">
<a name="gwy-resource-class-get-name.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -418,7 +418,7 @@ gwy_resource_class_get_inventory (<em class="parameter"><code><a class="link" hr
<p>Gets inventory which holds resources of a resource class.</p>
<div class="refsect3">
<a name="gwy-resource-class-get-inventory.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -444,7 +444,7 @@ gwy_resource_class_get_item_type (<em class="parameter"><code><a class="link" hr
<p>Gets inventory item type for a resource class.</p>
<div class="refsect3">
<a name="gwy-resource-class-get-item-type.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -480,7 +480,7 @@ ready-to-use form.</p>
constructor and <a class="link" href="GwyResource.html#gwy-resource-release" title="gwy_resource_release ()"><code class="function">gwy_resource_release()</code></a> is the destructor.</p>
<div class="refsect3">
<a name="gwy-resource-use.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -505,7 +505,7 @@ and returns back to `latent' form. In addition, it calls <a href="/usr/share/gt
on it. See <a class="link" href="GwyResource.html#gwy-resource-use" title="gwy_resource_use ()"><code class="function">gwy_resource_use()</code></a> for more.</p>
<div class="refsect3">
<a name="gwy-resource-release.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -528,7 +528,7 @@ gwy_resource_is_used (<em class="parameter"><code><a class="link" href="GwyResou
<p>See <a class="link" href="GwyResource.html#gwy-resource-use" title="gwy_resource_use ()"><code class="function">gwy_resource_use()</code></a> for details.</p>
<div class="refsect3">
<a name="gwy-resource-is-used.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -558,7 +558,7 @@ sets <em class="parameter"><code>is_modified</code></em>
<p>Mostly useful in resource implementation.</p>
<div class="refsect3">
<a name="gwy-resource-data-changed.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -581,7 +581,7 @@ gwy_resource_data_saved (<em class="parameter"><code><a class="link" href="GwyRe
flag of a resource.</p>
<div class="refsect3">
<a name="gwy-resource-data-saved.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -606,7 +606,7 @@ gwy_resource_build_filename (<em class="parameter"><code><a class="link" href="G
probably loaded from file of the same name.</p>
<div class="refsect3">
<a name="gwy-resource-build-filename.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -633,7 +633,7 @@ gwy_resource_dump (<em class="parameter"><code><a class="link" href="GwyResource
<p>Dumps a resource to a textual (human readable) form.</p>
<div class="refsect3">
<a name="gwy-resource-dump.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -660,7 +660,7 @@ gwy_resource_parse (<em class="parameter"><code>const <a href="/usr/share/gtk-do
<p>Reconstructs a resource from human readable form.</p>
<div class="refsect3">
<a name="gwy-resource-parse.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -696,7 +696,7 @@ gwy_resource_class_load (<em class="parameter"><code><a class="link" href="GwyRe
user directory (marked modifiable).</p>
<div class="refsect3">
<a name="gwy-resource-class-load.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -718,7 +718,7 @@ gwy_resource_class_mkdir (<em class="parameter"><code><a class="link" href="GwyR
<p>Creates directory for user resources if it does not exist.</p>
<div class="refsect3">
<a name="gwy-resource-class-mkdir.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -785,7 +785,7 @@ using the functions below.</p>
<p>Resource class.</p>
<div class="refsect3">
<a name="GwyResourceClass.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="struct_members_name">
<col class="struct_members_description">
@@ -879,7 +879,7 @@ user_function (<a class="link" href="GwyResource.html" title="GwyResource"><span
<p>The ::data-changed signal is emitted when resource data changes.</p>
<div class="refsect3">
<a name="GwyResource-data-changed.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwyddion/html/GwySIUnit.html b/devel-docs/libgwyddion/html/GwySIUnit.html
index 637c592..0b831fe 100644
--- a/devel-docs/libgwyddion/html/GwySIUnit.html
+++ b/devel-docs/libgwyddion/html/GwySIUnit.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GwySIUnit: Gwyddion Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="prev" href="libgwyddion-GwyExpr.html" title="GwyExpr">
@@ -36,7 +36,7 @@
</tr></table></div>
<div class="refsect1">
<a name="GwySIUnit.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -138,6 +138,14 @@
</tr>
<tr>
<td class="function_type">
+<a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="GwySIUnit.html#gwy-si-unit-equal-string" title="gwy_si_unit_equal_string ()">gwy_si_unit_equal_string</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
<span class="returnvalue">GwySIValueFormat</span> *
</td>
<td class="function_name">
@@ -173,7 +181,7 @@
</div>
<div class="refsect1">
<a name="GwySIUnit.signals"></a><h2>Signals</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
<colgroup>
<col width="150px" class="signals_return">
<col width="300px" class="signals_name">
@@ -188,7 +196,7 @@
</div>
<div class="refsect1">
<a name="GwySIUnit.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -242,7 +250,7 @@ formatting functions). There are several functions computing value format
typecasting.</p>
<div class="refsect3">
<a name="gwy-si-unit-duplicate.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -266,7 +274,7 @@ gwy_si_unit_new (<em class="parameter"><code>const <a href="http://developer.gno
(e. g. "m", "N", "A", etc.)</p>
<div class="refsect3">
<a name="gwy-si-unit-new.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -305,7 +313,7 @@ to <em class="parameter"><code>power10</code></em>
because 1 km^2 is 1e6 m^2.</p>
<div class="refsect3">
<a name="gwy-si-unit-new-parse.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -340,7 +348,7 @@ gwy_si_unit_set_from_string (<em class="parameter"><code><a class="link" href="G
<p>It must be base unit with no prefixes (e. g. "m", "N", "A", etc.).</p>
<div class="refsect3">
<a name="gwy-si-unit-set-from-string.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -375,7 +383,7 @@ gwy_si_unit_set_from_string_parse (<em class="parameter"><code><a class="link" h
see <a class="link" href="GwySIUnit.html#gwy-si-unit-new-parse" title="gwy_si_unit_new_parse ()"><code class="function">gwy_si_unit_new_parse()</code></a> for some discussion.</p>
<div class="refsect3">
<a name="gwy-si-unit-set-from-string-parse.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -396,7 +404,7 @@ unit).</p></td>
</tr>
<tr>
<td class="parameter_name"><p>power10</p></td>
-<td class="parameter_description"><p>Where power of 10 should be stored (or <a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>).</p></td>
+<td class="parameter_description"><p>Where power of 10 should be stored (or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>).</p></td>
<td class="parameter_annotations"> </td>
</tr>
</tbody>
@@ -412,7 +420,7 @@ gwy_si_unit_get_string (<em class="parameter"><code><a class="link" href="GwySIU
<p>Obtains string representing a SI unit.</p>
<div class="refsect3">
<a name="gwy-si-unit-get-string.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -448,7 +456,7 @@ gwy_si_unit_multiply (<em class="parameter"><code><a class="link" href="GwySIUni
<p>Multiplies two SI units.</p>
<div class="refsect3">
<a name="gwy-si-unit-multiply.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -498,7 +506,7 @@ gwy_si_unit_divide (<em class="parameter"><code><a class="link" href="GwySIUnit.
<p>Divides two SI units.</p>
<div class="refsect3">
<a name="gwy-si-unit-divide.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -548,7 +556,7 @@ gwy_si_unit_power (<em class="parameter"><code><a class="link" href="GwySIUnit.h
<p>Computes a power of an SI unit.</p>
<div class="refsect3">
<a name="gwy-si-unit-power.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -599,7 +607,7 @@ gwy_si_unit_nth_root (<em class="parameter"><code><a class="link" href="GwySIUni
are not representable by <a class="link" href="GwySIUnit.html" title="GwySIUnit"><span class="type">GwySIUnit</span></a>.</p>
<div class="refsect3">
<a name="gwy-si-unit-nth-root.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -654,7 +662,7 @@ gwy_si_unit_power_multiply (<em class="parameter"><code><a class="link" href="Gw
chained when more than two units are to be multiplied.</p>
<div class="refsect3">
<a name="gwy-si-unit-power-multiply.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -713,12 +721,12 @@ is simply returned, its reference count is NOT increased.</p>
<div class="refsect2">
<a name="gwy-si-unit-equal"></a><h3>gwy_si_unit_equal ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gwy_si_unit_equal (<em class="parameter"><code><a class="link" href="GwySIUnit.html" title="GwySIUnit"><span class="type">GwySIUnit</span></a> *siunit1</code></em>,
+gwy_si_unit_equal (<em class="parameter"><code><a class="link" href="GwySIUnit.html" title="GwySIUnit"><span class="type">GwySIUnit</span></a> *siunit</code></em>,
<em class="parameter"><code><a class="link" href="GwySIUnit.html" title="GwySIUnit"><span class="type">GwySIUnit</span></a> *siunit2</code></em>);</pre>
<p>Checks whether two SI units are equal.</p>
<div class="refsect3">
<a name="gwy-si-unit-equal.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -726,7 +734,7 @@ gwy_si_unit_equal (<em class="parameter"><code><a class="link" href="GwySIUnit.h
</colgroup>
<tbody>
<tr>
-<td class="parameter_name"><p>siunit1</p></td>
+<td class="parameter_name"><p>siunit</p></td>
<td class="parameter_description"><p>First unit.</p></td>
<td class="parameter_annotations"> </td>
</tr>
@@ -740,11 +748,49 @@ gwy_si_unit_equal (<em class="parameter"><code><a class="link" href="GwySIUnit.h
</div>
<div class="refsect3">
<a name="gwy-si-unit-equal.returns"></a><h4>Returns</h4>
-<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if units are equal.</p>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the units are equal.</p>
</div>
</div>
<hr>
<div class="refsect2">
+<a name="gwy-si-unit-equal-string"></a><h3>gwy_si_unit_equal_string ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gwy_si_unit_equal_string (<em class="parameter"><code><a class="link" href="GwySIUnit.html" title="GwySIUnit"><span class="type">GwySIUnit</span></a> *siunit</code></em>,
+ <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *unit_string</code></em>);</pre>
+<p>Checks whether an SI unit corresponds to given string.</p>
+<p>Any power-of-ten prefixes are ignored. This function is mostly useful for
+quick comparison with simple units such as "m" and for checking whether a
+unit is non-empty (by comparing with <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> or an empty string).</p>
+<div class="refsect3">
+<a name="gwy-si-unit-equal-string.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>siunit</p></td>
+<td class="parameter_description"><p>An SI unit.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>unit_string</p></td>
+<td class="parameter_description"><p>Unit string (it can be <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> for an empty unit).</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gwy-si-unit-equal-string.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the units is equivalent to the given string.</p>
+</div>
+<p class="since">Since: <a class="link" href="api-index-2-49.html#api-index-2.49">2.49</a></p>
+</div>
+<hr>
+<div class="refsect2">
<a name="gwy-si-unit-get-format"></a><h3>gwy_si_unit_get_format ()</h3>
<pre class="programlisting"><span class="returnvalue">GwySIValueFormat</span> *
gwy_si_unit_get_format (<em class="parameter"><code><a class="link" href="GwySIUnit.html" title="GwySIUnit"><span class="type">GwySIUnit</span></a> *siunit</code></em>,
@@ -759,7 +805,7 @@ gwy_si_unit_get_format (<em class="parameter"><code><a class="link" href="GwySIU
decimal places.</p>
<div class="refsect3">
<a name="gwy-si-unit-get-format.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -816,7 +862,7 @@ gwy_si_unit_get_format_for_power10 (<em class="parameter"><code><a class="link"
.</p>
<div class="refsect3">
<a name="gwy-si-unit-get-format-for-power10.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -874,7 +920,7 @@ gwy_si_unit_get_format_with_resolution
decimal places.</p>
<div class="refsect3">
<a name="gwy-si-unit-get-format-with-resolution.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -883,7 +929,7 @@ gwy_si_unit_get_format_with_resolution
<tbody>
<tr>
<td class="parameter_name"><p>siunit</p></td>
-<td class="parameter_description"><p>A SI unit.</p></td>
+<td class="parameter_description"><p>An SI unit.</p></td>
<td class="parameter_annotations"> </td>
</tr>
<tr>
@@ -937,7 +983,7 @@ significant digits.</p>
decimal places.</p>
<div class="refsect3">
<a name="gwy-si-unit-get-format-with-digits.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -946,7 +992,7 @@ significant digits.</p>
<tbody>
<tr>
<td class="parameter_name"><p>siunit</p></td>
-<td class="parameter_description"><p>A SI unit.</p></td>
+<td class="parameter_description"><p>An SI unit.</p></td>
<td class="parameter_annotations"> </td>
</tr>
<tr>
@@ -1011,7 +1057,7 @@ user_function (<a class="link" href="GwySIUnit.html" title="GwySIUnit"><span cla
<p>The ::value-changed signal is emitted whenever SI unit changes.</p>
<div class="refsect3">
<a name="GwySIUnit-value-changed.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwyddion/html/GwySerializable.html b/devel-docs/libgwyddion/html/GwySerializable.html
index 80050e2..e9be82a 100644
--- a/devel-docs/libgwyddion/html/GwySerializable.html
+++ b/devel-docs/libgwyddion/html/GwySerializable.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GwySerializable: Gwyddion Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="prev" href="libgwyddion-gwyddionenums.html" title="gwyddionenums">
@@ -36,7 +36,7 @@
</tr></table></div>
<div class="refsect1">
<a name="GwySerializable.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -159,7 +159,7 @@
</div>
<div class="refsect1">
<a name="GwySerializable.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -242,7 +242,7 @@ in most cases performed by <a class="link" href="GwySerializable.html#gwy-serial
description.</p>
<div class="refsect3">
<a name="GwySerializeFunc.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -280,7 +280,7 @@ with serialized object appended.</p>
description.</p>
<div class="refsect3">
<a name="GwyDeserializeFunc.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -324,7 +324,7 @@ object serialization (should you ever need to do it manually), it would
lead to repeated required buffer size calculations.</p>
<div class="refsect3">
<a name="gwy-serializable-serialize.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -365,7 +365,7 @@ a <a href="/usr/share/gtk-doc/html/gtk2GtkObject.html#GtkObject-struct"><span cl
refcount of 1, etc.</p>
<div class="refsect3">
<a name="gwy-serializable-deserialize.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -411,7 +411,7 @@ namely for large objects.</p>
<p>You can duplicate a <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>, too, but you are discouraged from doing it.</p>
<div class="refsect3">
<a name="gwy-serializable-duplicate.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -445,7 +445,7 @@ gwy_serializable_clone (<em class="parameter"><code><a href="/usr/share/gtk-doc/
is lost then).</p>
<div class="refsect3">
<a name="gwy-serializable-clone.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -475,7 +475,7 @@ gwy_serializable_get_size (<em class="parameter"><code><a href="/usr/share/gtk-d
<p>Calculates the expected size of serialized object.</p>
<div class="refsect3">
<a name="gwy-serializable-get-size.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -506,7 +506,7 @@ gwy_serialize_get_struct_size (<em class="parameter"><code>const <a href="/usr/s
<a class="link" href="GwySerializable.html#gwy-serialize-pack-object-struct" title="gwy_serialize_pack_object_struct ()"><code class="function">gwy_serialize_pack_object_struct()</code></a>.</p>
<div class="refsect3">
<a name="gwy-serialize-get-struct-size.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -551,7 +551,7 @@ gwy_serialize_get_items_size (<em class="parameter"><code>const <a href="/usr/sh
<a class="link" href="GwySerializable.html#gwy-serialize-object-items" title="gwy_serialize_object_items ()"><code class="function">gwy_serialize_object_items()</code></a>.</p>
<div class="refsect3">
<a name="gwy-serialize-get-items-size.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -638,7 +638,7 @@ described by a single real number foo could look (without error checking):</p>
<div class="refsect3">
<a name="gwy-serialize-pack-object-struct.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -745,7 +745,7 @@ described by a single real number <em class="parameter"><code>foo</code></em>
<div class="refsect3">
<a name="gwy-serialize-unpack-object-struct.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -814,7 +814,7 @@ NUL-terminated string, and eventually whether it's equal to <em class="parameter
is <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>, the comparsion is not performed.</p>
<div class="refsect3">
<a name="gwy-serialize-check-string.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -871,7 +871,7 @@ gwy_serialize_object_items (<em class="parameter"><code><a href="/usr/share/gtk-
.</p>
<div class="refsect3">
<a name="gwy-serialize-object-items.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -930,7 +930,7 @@ considerably less sanity checks and even allows several components of the
same name.</p>
<div class="refsect3">
<a name="gwy-deserialize-object-hash.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1019,7 +1019,7 @@ of struct-like objects.</p>
<code class="literal">'O'</code> for an array of objects.</p>
<div class="refsect3">
<a name="GwySerializeSpec.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="struct_members_name">
<col class="struct_members_description">
@@ -1063,7 +1063,7 @@ otherwise.</p></td>
non-atomic value.</p>
<div class="refsect3">
<a name="GwySerializeValue.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="union_members_name">
<col class="union_members_description">
@@ -1161,7 +1161,7 @@ serialization or deserialization.</p>
objects.</p>
<div class="refsect3">
<a name="GwySerializeItem.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="struct_members_name">
<col class="struct_members_description">
diff --git a/devel-docs/libgwyddion/html/GwyStringList.html b/devel-docs/libgwyddion/html/GwyStringList.html
index 8092ebf..ed18041 100644
--- a/devel-docs/libgwyddion/html/GwyStringList.html
+++ b/devel-docs/libgwyddion/html/GwyStringList.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GwyStringList: Gwyddion Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="prev" href="GwyResource.html" title="GwyResource">
@@ -36,7 +36,7 @@
</tr></table></div>
<div class="refsect1">
<a name="GwyStringList.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -100,7 +100,7 @@
</div>
<div class="refsect1">
<a name="GwyStringList.signals"></a><h2>Signals</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
<colgroup>
<col width="150px" class="signals_return">
<col width="300px" class="signals_name">
@@ -115,7 +115,7 @@
</div>
<div class="refsect1">
<a name="GwyStringList.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -164,7 +164,7 @@ later as needed.</p>
typecasting.</p>
<div class="refsect3">
<a name="gwy-string-list-duplicate.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -198,7 +198,7 @@ gwy_string_list_append (<em class="parameter"><code><a class="link" href="GwyStr
<p>Appends a string to the end of a string list.</p>
<div class="refsect3">
<a name="gwy-string-list-append.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -228,7 +228,7 @@ gwy_string_list_append_take (<em class="parameter"><code><a class="link" href="G
<p>Appends a string to the end of a string list, taking ownership of the string.</p>
<div class="refsect3">
<a name="gwy-string-list-append-take.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -258,7 +258,7 @@ gwy_string_list_get_length (<em class="parameter"><code><a class="link" href="Gw
<p>Gets the number of strings in a string list.</p>
<div class="refsect3">
<a name="gwy-string-list-get-length.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -286,7 +286,7 @@ gwy_string_list_get (<em class="parameter"><code><a class="link" href="GwyString
<p>Gets a string from a string list by position.</p>
<div class="refsect3">
<a name="gwy-string-list-get.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -321,7 +321,7 @@ gwy_string_list_clear (<em class="parameter"><code><a class="link" href="GwyStri
<p>Clears the contents of a string list, removing all strings.</p>
<div class="refsect3">
<a name="gwy-string-list-clear.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -366,7 +366,7 @@ user_function (<a class="link" href="GwyStringList.html" title="GwyStringList"><
<p>The ::value-changed signal is emitted whenever a string list changes.</p>
<div class="refsect3">
<a name="GwyStringList-value-changed.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwyddion/html/api-index-2-1.html b/devel-docs/libgwyddion/html/api-index-2-1.html
index bdd1a9c..cea65eb 100644
--- a/devel-docs/libgwyddion/html/api-index-2-1.html
+++ b/devel-docs/libgwyddion/html/api-index-2-1.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.1: Gwyddion Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="prev" href="api-index-deprec.html" title="Index of deprecated symbols">
diff --git a/devel-docs/libgwyddion/html/api-index-2-11.html b/devel-docs/libgwyddion/html/api-index-2-11.html
index e18d06c..f1c01f3 100644
--- a/devel-docs/libgwyddion/html/api-index-2-11.html
+++ b/devel-docs/libgwyddion/html/api-index-2-11.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.11: Gwyddion Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="prev" href="api-index-2-9.html" title="Index of new symbols in 2.9">
diff --git a/devel-docs/libgwyddion/html/api-index-2-12.html b/devel-docs/libgwyddion/html/api-index-2-12.html
index e04a3d4..ec1adee 100644
--- a/devel-docs/libgwyddion/html/api-index-2-12.html
+++ b/devel-docs/libgwyddion/html/api-index-2-12.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.12: Gwyddion Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="prev" href="api-index-2-11.html" title="Index of new symbols in 2.11">
diff --git a/devel-docs/libgwyddion/html/api-index-2-22.html b/devel-docs/libgwyddion/html/api-index-2-22.html
index 326bf65..d1c9138 100644
--- a/devel-docs/libgwyddion/html/api-index-2-22.html
+++ b/devel-docs/libgwyddion/html/api-index-2-22.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.22: Gwyddion Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="prev" href="api-index-2-12.html" title="Index of new symbols in 2.12">
diff --git a/devel-docs/libgwyddion/html/api-index-2-25.html b/devel-docs/libgwyddion/html/api-index-2-25.html
index e25426b..acbc47b 100644
--- a/devel-docs/libgwyddion/html/api-index-2-25.html
+++ b/devel-docs/libgwyddion/html/api-index-2-25.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.25: Gwyddion Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="prev" href="api-index-2-22.html" title="Index of new symbols in 2.22">
diff --git a/devel-docs/libgwyddion/html/api-index-2-26.html b/devel-docs/libgwyddion/html/api-index-2-26.html
index 9c01d8a..d228676 100644
--- a/devel-docs/libgwyddion/html/api-index-2-26.html
+++ b/devel-docs/libgwyddion/html/api-index-2-26.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.26: Gwyddion Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="prev" href="api-index-2-25.html" title="Index of new symbols in 2.25">
diff --git a/devel-docs/libgwyddion/html/api-index-2-35.html b/devel-docs/libgwyddion/html/api-index-2-35.html
index b65cdd5..033a894 100644
--- a/devel-docs/libgwyddion/html/api-index-2-35.html
+++ b/devel-docs/libgwyddion/html/api-index-2-35.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.35: Gwyddion Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="prev" href="api-index-2-26.html" title="Index of new symbols in 2.26">
diff --git a/devel-docs/libgwyddion/html/api-index-2-36.html b/devel-docs/libgwyddion/html/api-index-2-36.html
index 1ecbb08..1152f84 100644
--- a/devel-docs/libgwyddion/html/api-index-2-36.html
+++ b/devel-docs/libgwyddion/html/api-index-2-36.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.36: Gwyddion Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="prev" href="api-index-2-35.html" title="Index of new symbols in 2.35">
diff --git a/devel-docs/libgwyddion/html/api-index-2-37.html b/devel-docs/libgwyddion/html/api-index-2-37.html
index 0bcc195..95db634 100644
--- a/devel-docs/libgwyddion/html/api-index-2-37.html
+++ b/devel-docs/libgwyddion/html/api-index-2-37.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.37: Gwyddion Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="prev" href="api-index-2-36.html" title="Index of new symbols in 2.36">
diff --git a/devel-docs/libgwyddion/html/api-index-2-38.html b/devel-docs/libgwyddion/html/api-index-2-38.html
index eeb1b61..8c15f3f 100644
--- a/devel-docs/libgwyddion/html/api-index-2-38.html
+++ b/devel-docs/libgwyddion/html/api-index-2-38.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.38: Gwyddion Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="prev" href="api-index-2-37.html" title="Index of new symbols in 2.37">
diff --git a/devel-docs/libgwyddion/html/api-index-2-39.html b/devel-docs/libgwyddion/html/api-index-2-39.html
index 7334412..9319ae8 100644
--- a/devel-docs/libgwyddion/html/api-index-2-39.html
+++ b/devel-docs/libgwyddion/html/api-index-2-39.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.39: Gwyddion Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="prev" href="api-index-2-38.html" title="Index of new symbols in 2.38">
diff --git a/devel-docs/libgwyddion/html/api-index-2-4.html b/devel-docs/libgwyddion/html/api-index-2-4.html
index a09e2ee..a5a408a 100644
--- a/devel-docs/libgwyddion/html/api-index-2-4.html
+++ b/devel-docs/libgwyddion/html/api-index-2-4.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.4: Gwyddion Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="prev" href="api-index-2-1.html" title="Index of new symbols in 2.1">
diff --git a/devel-docs/libgwyddion/html/api-index-2-42.html b/devel-docs/libgwyddion/html/api-index-2-42.html
index 123fb9c..1a2cd19 100644
--- a/devel-docs/libgwyddion/html/api-index-2-42.html
+++ b/devel-docs/libgwyddion/html/api-index-2-42.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.42: Gwyddion Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="prev" href="api-index-2-39.html" title="Index of new symbols in 2.39">
diff --git a/devel-docs/libgwyddion/html/api-index-2-43.html b/devel-docs/libgwyddion/html/api-index-2-43.html
index 7eb165f..0ba53ce 100644
--- a/devel-docs/libgwyddion/html/api-index-2-43.html
+++ b/devel-docs/libgwyddion/html/api-index-2-43.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.43: Gwyddion Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="prev" href="api-index-2-42.html" title="Index of new symbols in 2.42">
diff --git a/devel-docs/libgwyddion/html/api-index-2-44.html b/devel-docs/libgwyddion/html/api-index-2-44.html
index 97d0c8b..f9ddfea 100644
--- a/devel-docs/libgwyddion/html/api-index-2-44.html
+++ b/devel-docs/libgwyddion/html/api-index-2-44.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.44: Gwyddion Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="prev" href="api-index-2-43.html" title="Index of new symbols in 2.43">
diff --git a/devel-docs/libgwyddion/html/api-index-2-45.html b/devel-docs/libgwyddion/html/api-index-2-45.html
index 6c148dc..c6fba0f 100644
--- a/devel-docs/libgwyddion/html/api-index-2-45.html
+++ b/devel-docs/libgwyddion/html/api-index-2-45.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.45: Gwyddion Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="prev" href="api-index-2-44.html" title="Index of new symbols in 2.44">
diff --git a/devel-docs/libgwyddion/html/api-index-2-46.html b/devel-docs/libgwyddion/html/api-index-2-46.html
index 8be7316..733bc2b 100644
--- a/devel-docs/libgwyddion/html/api-index-2-46.html
+++ b/devel-docs/libgwyddion/html/api-index-2-46.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.46: Gwyddion Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="prev" href="api-index-2-45.html" title="Index of new symbols in 2.45">
diff --git a/devel-docs/libgwyddion/html/api-index-2-47.html b/devel-docs/libgwyddion/html/api-index-2-47.html
index 7fb6c9e..b881bff 100644
--- a/devel-docs/libgwyddion/html/api-index-2-47.html
+++ b/devel-docs/libgwyddion/html/api-index-2-47.html
@@ -3,10 +3,11 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.47: Gwyddion Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="prev" href="api-index-2-46.html" title="Index of new symbols in 2.46">
+<link rel="next" href="api-index-2-48.html" title="Index of new symbols in 2.48">
<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
@@ -16,7 +17,7 @@
<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
<td><img src="up-insensitive.png" width="16" height="16" border="0"></td>
<td><a accesskey="p" href="api-index-2-46.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><img src="right-insensitive.png" width="16" height="16" border="0"></td>
+<td><a accesskey="n" href="api-index-2-48.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
</tr></table>
<div class="index">
<div class="titlepage"><div><div><h1 class="title">
diff --git a/devel-docs/libgwyddion/html/api-index-2-48.html b/devel-docs/libgwyddion/html/api-index-2-48.html
new file mode 100644
index 0000000..f2174a6
--- /dev/null
+++ b/devel-docs/libgwyddion/html/api-index-2-48.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Index of new symbols in 2.48: Gwyddion Library Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
+<link rel="home" href="index.html" title="Gwyddion Library Reference Manual">
+<link rel="up" href="index.html" title="Gwyddion Library Reference Manual">
+<link rel="prev" href="api-index-2-47.html" title="Index of new symbols in 2.47">
+<link rel="next" href="api-index-2-49.html" title="Index of new symbols in 2.49">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts"><span id="nav_index"><a class="shortcut" href="#idxG">G</a></span></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><img src="up-insensitive.png" width="16" height="16" border="0"></td>
+<td><a accesskey="p" href="api-index-2-47.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="api-index-2-49.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="index">
+<div class="titlepage"><div><div><h1 class="title">
+<a name="api-index-2-48"></a>Index of new symbols in 2.48</h1></div></div></div>
+<a name="idx"></a><a name="idxG"></a><h3 class="title">G</h3>
+<dt>
+<a class="link" href="libgwyddion-Math.html#gwy-check-regular-2d-grid" title="gwy_check_regular_2d_grid ()">gwy_check_regular_2d_grid</a>, function in <a class="link" href="libgwyddion-Math.html" title="Math">Math</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GwyContainer.html#gwy-container-duplicate-by-prefixv" title="gwy_container_duplicate_by_prefixv ()">gwy_container_duplicate_by_prefixv</a>, function in <a class="link" href="GwyContainer.html" title="GwyContainer">GwyContainer</a>
+</dt>
+<dd></dd>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.19</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/devel-docs/libgwyddion/html/api-index-2-49.html b/devel-docs/libgwyddion/html/api-index-2-49.html
new file mode 100644
index 0000000..19ceb92
--- /dev/null
+++ b/devel-docs/libgwyddion/html/api-index-2-49.html
@@ -0,0 +1,49 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Index of new symbols in 2.49: Gwyddion Library Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
+<link rel="home" href="index.html" title="Gwyddion Library Reference Manual">
+<link rel="up" href="index.html" title="Gwyddion Library Reference Manual">
+<link rel="prev" href="api-index-2-48.html" title="Index of new symbols in 2.48">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts"><span id="nav_index"><a class="shortcut" href="#idxG">G</a></span></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><img src="up-insensitive.png" width="16" height="16" border="0"></td>
+<td><a accesskey="p" href="api-index-2-48.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><img src="right-insensitive.png" width="16" height="16" border="0"></td>
+</tr></table>
+<div class="index">
+<div class="titlepage"><div><div><h1 class="title">
+<a name="api-index-2-49"></a>Index of new symbols in 2.49</h1></div></div></div>
+<a name="idx"></a><a name="idxG"></a><h3 class="title">G</h3>
+<dt>
+<a class="link" href="libgwyddion-Math.html#gwy-math-histogram" title="gwy_math_histogram ()">gwy_math_histogram</a>, function in <a class="link" href="libgwyddion-Math.html" title="Math">Math</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libgwyddion-Math.html#gwy-math-refine-maximum-1d" title="gwy_math_refine_maximum_1d ()">gwy_math_refine_maximum_1d</a>, function in <a class="link" href="libgwyddion-Math.html" title="Math">Math</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libgwyddion-Math.html#gwy-math-refine-maximum-2d" title="gwy_math_refine_maximum_2d ()">gwy_math_refine_maximum_2d</a>, function in <a class="link" href="libgwyddion-Math.html" title="Math">Math</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libgwyddion-gwyutils.html#gwy-set-member-object" title="gwy_set_member_object ()">gwy_set_member_object</a>, function in <a class="link" href="libgwyddion-gwyutils.html" title="gwyutils">gwyutils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GwySIUnit.html#gwy-si-unit-equal-string" title="gwy_si_unit_equal_string ()">gwy_si_unit_equal_string</a>, function in <a class="link" href="GwySIUnit.html" title="GwySIUnit">GwySIUnit</a>
+</dt>
+<dd></dd>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.19</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/devel-docs/libgwyddion/html/api-index-2-5.html b/devel-docs/libgwyddion/html/api-index-2-5.html
index 0b2932e..b984363 100644
--- a/devel-docs/libgwyddion/html/api-index-2-5.html
+++ b/devel-docs/libgwyddion/html/api-index-2-5.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.5: Gwyddion Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="prev" href="api-index-2-4.html" title="Index of new symbols in 2.4">
diff --git a/devel-docs/libgwyddion/html/api-index-2-7.html b/devel-docs/libgwyddion/html/api-index-2-7.html
index ab58125..4453e5c 100644
--- a/devel-docs/libgwyddion/html/api-index-2-7.html
+++ b/devel-docs/libgwyddion/html/api-index-2-7.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.7: Gwyddion Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="prev" href="api-index-2-5.html" title="Index of new symbols in 2.5">
diff --git a/devel-docs/libgwyddion/html/api-index-2-8.html b/devel-docs/libgwyddion/html/api-index-2-8.html
index 57b9177..55ca329 100644
--- a/devel-docs/libgwyddion/html/api-index-2-8.html
+++ b/devel-docs/libgwyddion/html/api-index-2-8.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.8: Gwyddion Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="prev" href="api-index-2-7.html" title="Index of new symbols in 2.7">
diff --git a/devel-docs/libgwyddion/html/api-index-2-9.html b/devel-docs/libgwyddion/html/api-index-2-9.html
index 201ccdd..322fb18 100644
--- a/devel-docs/libgwyddion/html/api-index-2-9.html
+++ b/devel-docs/libgwyddion/html/api-index-2-9.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.9: Gwyddion Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="prev" href="api-index-2-8.html" title="Index of new symbols in 2.8">
diff --git a/devel-docs/libgwyddion/html/api-index-all.html b/devel-docs/libgwyddion/html/api-index-all.html
index a2e9f45..dc3708b 100644
--- a/devel-docs/libgwyddion/html/api-index-all.html
+++ b/devel-docs/libgwyddion/html/api-index-all.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of all symbols: Gwyddion Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="prev" href="libgwyddion-gwydebugobjects.html" title="gwydebugobjects">
@@ -285,6 +285,10 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="libgwyddion-Math.html#gwy-check-regular-2d-grid" title="gwy_check_regular_2d_grid ()">gwy_check_regular_2d_grid</a>, function in <a class="link" href="libgwyddion-Math.html" title="Math">Math</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="libgwyddion-gwymacros.html#GWY-CLAMP:CAPS" title="GWY_CLAMP()">GWY_CLAMP</a>, macro in <a class="link" href="libgwyddion-gwymacros.html" title="gwymacros">gwymacros</a>
</dt>
<dd></dd>
@@ -313,6 +317,10 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="GwyContainer.html#gwy-container-duplicate-by-prefixv" title="gwy_container_duplicate_by_prefixv ()">gwy_container_duplicate_by_prefixv</a>, function in <a class="link" href="GwyContainer.html" title="GwyContainer">GwyContainer</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="GwyContainer.html#gwy-container-foreach" title="gwy_container_foreach ()">gwy_container_foreach</a>, function in <a class="link" href="GwyContainer.html" title="GwyContainer">GwyContainer</a>
</dt>
<dd></dd>
@@ -961,6 +969,10 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="libgwyddion-Math.html#gwy-math-histogram" title="gwy_math_histogram ()">gwy_math_histogram</a>, function in <a class="link" href="libgwyddion-Math.html" title="Math">Math</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="libgwyddion-Math.html#gwy-math-humanize-numbers" title="gwy_math_humanize_numbers ()">gwy_math_humanize_numbers</a>, function in <a class="link" href="libgwyddion-Math.html" title="Math">Math</a>
</dt>
<dd></dd>
@@ -1081,6 +1093,14 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="libgwyddion-Math.html#gwy-math-refine-maximum-1d" title="gwy_math_refine_maximum_1d ()">gwy_math_refine_maximum_1d</a>, function in <a class="link" href="libgwyddion-Math.html" title="Math">Math</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libgwyddion-Math.html#gwy-math-refine-maximum-2d" title="gwy_math_refine_maximum_2d ()">gwy_math_refine_maximum_2d</a>, function in <a class="link" href="libgwyddion-Math.html" title="Math">Math</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="libgwyddion-Math.html#gwy-math-sort" title="gwy_math_sort ()">gwy_math_sort</a>, function in <a class="link" href="libgwyddion-Math.html" title="Math">Math</a>
</dt>
<dd></dd>
@@ -1325,6 +1345,10 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="libgwyddion-gwyutils.html#gwy-set-member-object" title="gwy_set_member_object ()">gwy_set_member_object</a>, function in <a class="link" href="libgwyddion-gwyutils.html" title="gwyutils">gwyutils</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="libgwyddion-gwyutils.html#gwy-sgettext" title="gwy_sgettext ()">gwy_sgettext</a>, function in <a class="link" href="libgwyddion-gwyutils.html" title="gwyutils">gwyutils</a>
</dt>
<dd></dd>
@@ -1349,6 +1373,10 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="GwySIUnit.html#gwy-si-unit-equal-string" title="gwy_si_unit_equal_string ()">gwy_si_unit_equal_string</a>, function in <a class="link" href="GwySIUnit.html" title="GwySIUnit">GwySIUnit</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="GwySIUnit.html#gwy-si-unit-get-format" title="gwy_si_unit_get_format ()">gwy_si_unit_get_format</a>, function in <a class="link" href="GwySIUnit.html" title="GwySIUnit">GwySIUnit</a>
</dt>
<dd></dd>
diff --git a/devel-docs/libgwyddion/html/api-index-deprec.html b/devel-docs/libgwyddion/html/api-index-deprec.html
index 88b4508..887df20 100644
--- a/devel-docs/libgwyddion/html/api-index-deprec.html
+++ b/devel-docs/libgwyddion/html/api-index-deprec.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of deprecated symbols: Gwyddion Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="prev" href="api-index-all.html" title="Index of all symbols">
diff --git a/devel-docs/libgwyddion/html/index.html b/devel-docs/libgwyddion/html/index.html
index c046c7d..a649b12 100644
--- a/devel-docs/libgwyddion/html/index.html
+++ b/devel-docs/libgwyddion/html/index.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Gwyddion Library Reference Manual: Gwyddion Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="next" href="libgwyddion-gwyddionenums.html" title="gwyddionenums">
<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
@@ -15,7 +15,7 @@
<div>
<div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">Gwyddion Library Reference Manual</p></th></tr></table></div>
<div><p class="releaseinfo">
- For Gwyddion 2.47.
+ For Gwyddion 2.49.
The latest version of this document can be found on-line at
<a class="ulink" href="http://gwyddion.net/documentation/libgwyddion/index.php" target="_top">http://gwyddion.net/documentation/libgwyddion/</a>.
</p></div>
@@ -118,6 +118,8 @@
<dt><span class="index"><a href="api-index-2-45.html">Index of new symbols in 2.45</a></span></dt>
<dt><span class="index"><a href="api-index-2-46.html">Index of new symbols in 2.46</a></span></dt>
<dt><span class="index"><a href="api-index-2-47.html">Index of new symbols in 2.47</a></span></dt>
+<dt><span class="index"><a href="api-index-2-48.html">Index of new symbols in 2.48</a></span></dt>
+<dt><span class="index"><a href="api-index-2-49.html">Index of new symbols in 2.49</a></span></dt>
</dl></div>
<p>
This library contains basic classes and interfaces not directly related
diff --git a/devel-docs/libgwyddion/html/libgwyddion-GwyExpr.html b/devel-docs/libgwyddion/html/libgwyddion-GwyExpr.html
index 9d6177b..4379c2a 100644
--- a/devel-docs/libgwyddion/html/libgwyddion-GwyExpr.html
+++ b/devel-docs/libgwyddion/html/libgwyddion-GwyExpr.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GwyExpr: Gwyddion Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="prev" href="GwyFDCurvePreset.html" title="GwyFDCurvePreset">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwyddion-GwyExpr.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -139,7 +139,7 @@
</div>
<div class="refsect1">
<a name="libgwyddion-GwyExpr.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -379,7 +379,7 @@ gwy_expr_free (<em class="parameter"><code><a class="link" href="libgwyddion-Gwy
<p>Frees all memory used by an expression evaluator.</p>
<div class="refsect3">
<a name="gwy-expr-free.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -404,7 +404,7 @@ gwy_expr_evaluate (<em class="parameter"><code><a class="link" href="libgwyddion
<p>Evaulates an arithmetic expression.</p>
<div class="refsect3">
<a name="gwy-expr-evaluate.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -452,7 +452,7 @@ gwy_expr_compile (<em class="parameter"><code><a class="link" href="libgwyddion-
arithmetic expressions it's easier to use <a class="link" href="libgwyddion-GwyExpr.html#gwy-expr-evaluate" title="gwy_expr_evaluate ()"><code class="function">gwy_expr_evaluate()</code></a>.</p>
<div class="refsect3">
<a name="gwy-expr-compile.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -494,7 +494,7 @@ gwy_expr_resolve_variables (<em class="parameter"><code><a class="link" href="li
<p>Finds positions of variables in an expression.</p>
<div class="refsect3">
<a name="gwy-expr-resolve-variables.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -555,7 +555,7 @@ value in <em class="parameter"><code>values</code></em>
in the array is always reserved and do not correspond to any variable.</p>
<div class="refsect3">
<a name="gwy-expr-get-variables.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -597,7 +597,7 @@ gwy_expr_execute (<em class="parameter"><code><a class="link" href="libgwyddion-
<p>Executes a compiled expression with variables, substituting given values.</p>
<div class="refsect3">
<a name="gwy-expr-execute.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -634,7 +634,7 @@ gwy_expr_vector_execute (<em class="parameter"><code><a class="link" href="libgw
<p>Executes a compiled expression on each item of data arrays.</p>
<div class="refsect3">
<a name="gwy-expr-vector-execute.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -685,7 +685,7 @@ gwy_expr_define_constant (<em class="parameter"><code><a class="link" href="libg
to recompile it (and eventually re-resolve variables).</p>
<div class="refsect3">
<a name="gwy-expr-define-constant.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -733,7 +733,7 @@ gwy_expr_undefine_constant (<em class="parameter"><code><a class="link" href="li
you have to recompile it (and eventually re-resolve variables).</p>
<div class="refsect3">
<a name="gwy-expr-undefine-constant.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -767,7 +767,7 @@ gwy_expr_get_expression (<em class="parameter"><code><a class="link" href="libgw
<p>Gets the expression string.</p>
<div class="refsect3">
<a name="gwy-expr-get-expression.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -805,7 +805,7 @@ error domains.</p>
<p>Error codes returned by expression parsing and execution.</p>
<div class="refsect3">
<a name="GwyExprError.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
diff --git a/devel-docs/libgwyddion/html/libgwyddion-GwyNLFitter.html b/devel-docs/libgwyddion/html/libgwyddion-GwyNLFitter.html
index 9b3e5ac..84a227a 100644
--- a/devel-docs/libgwyddion/html/libgwyddion-GwyNLFitter.html
+++ b/devel-docs/libgwyddion/html/libgwyddion-GwyNLFitter.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GwyNLFitter: Gwyddion Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="prev" href="libgwyddion-Math-Fallback.html" title="Math Fallback">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwyddion-GwyNLFitter.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -259,7 +259,7 @@
</div>
<div class="refsect1">
<a name="libgwyddion-GwyNLFitter.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -308,7 +308,7 @@ fitted with <a class="link" href="GwyNLFitPreset.html#gwy-nlfit-preset-fit" titl
<p>Fitting function type for real-valued independent variables.</p>
<div class="refsect3">
<a name="GwyNLFitFunc.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -366,7 +366,7 @@ fitted with <a class="link" href="GwyNLFitPreset.html#gwy-nlfit-preset-fit" titl
variables.</p>
<div class="refsect3">
<a name="GwyNLFitDerFunc.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -441,7 +441,7 @@ multiplied by the inverse of the (unsquared) estimated error of the
default unit weights.</p>
<div class="refsect3">
<a name="GwyNLFitIdxFunc.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -498,7 +498,7 @@ multiplied by the inverse of the (unsquared) estimated error of the
default unit weights.</p>
<div class="refsect3">
<a name="GwyNLFitIdxDiffFunc.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -518,7 +518,9 @@ default unit weights.</p>
<tr>
<td class="parameter_name"><p>fixed_param</p></td>
<td class="parameter_description"><p>Which parameters should be treated as fixed (corresponding
-entries are set to <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>).</p></td>
+entries are set to <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>). It may be <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> is no parameters
+are fixed. The function must set derivatives by fixed
+parameters to zero.</p></td>
<td class="parameter_annotations"> </td>
</tr>
<tr>
@@ -564,7 +566,7 @@ as <em class="parameter"><code>diff</code></em>
numerical differentiation.</p>
<div class="refsect3">
<a name="gwy-math-nlfit-new.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -610,7 +612,7 @@ cannot use weighting. If you want weighting you need to pass your own
<a class="link" href="libgwyddion-GwyNLFitter.html#gwy-math-nlfit-diff-idx" title="gwy_math_nlfit_diff_idx ()"><code class="function">gwy_math_nlfit_diff_idx()</code></a> helper).</p>
<div class="refsect3">
<a name="gwy-math-nlfit-new-idx.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -644,7 +646,7 @@ gwy_math_nlfit_free (<em class="parameter"><code><a class="link" href="libgwyddi
<p>Completely frees a Marquardt-Levenberg nonlinear fitter.</p>
<div class="refsect3">
<a name="gwy-math-nlfit-free.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -667,7 +669,7 @@ gwy_math_nlfit_copy (<em class="parameter"><code><a class="link" href="libgwyddi
<p>This function is mostly usefil for language bindings.</p>
<div class="refsect3">
<a name="gwy-math-nlfit-copy.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -700,7 +702,7 @@ gwy_math_nlfit_fit (<em class="parameter"><code><a class="link" href="libgwyddio
<p>Performs a nonlinear fit of simple function on data.</p>
<div class="refsect3">
<a name="gwy-math-nlfit-fit.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -778,7 +780,7 @@ values, their <em class="parameter"><code>fixed_param</code></em>
controls whether all are fixed or all variable.</p>
<div class="refsect3">
<a name="gwy-math-nlfit-fit-full.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -869,7 +871,7 @@ gwy_math_nlfit_fit_idx (<em class="parameter"><code><a class="link" href="libgwy
<p>Performs a nonlinear fit of function on opaque indexed data.</p>
<div class="refsect3">
<a name="gwy-math-nlfit-fit-idx.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -934,7 +936,7 @@ values, their <em class="parameter"><code>fixed_param</code></em>
controls whether all are fixed or all variable.</p>
<div class="refsect3">
<a name="gwy-math-nlfit-fit-idx-full.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1006,7 +1008,7 @@ gwy_math_nlfit_get_max_iterations (<em class="parameter"><code><a class="link" h
.</p>
<div class="refsect3">
<a name="gwy-math-nlfit-get-max-iterations.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1034,7 +1036,7 @@ gwy_math_nlfit_set_max_iterations (<em class="parameter"><code><a class="link" h
.</p>
<div class="refsect3">
<a name="gwy-math-nlfit-set-max-iterations.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1063,7 +1065,7 @@ gwy_math_nlfit_get_approx_geometric (<em class="parameter"><code><a class="link"
<p>Reports if a non-linear fitter performs approximately orthogonal fitting.</p>
<div class="refsect3">
<a name="gwy-math-nlfit-get-approx-geometric.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1098,7 +1100,7 @@ Furthermore, it is better used only when the fit is already relatively close
to the minimum.</p>
<div class="refsect3">
<a name="gwy-math-nlfit-set-approx-geometric.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1131,7 +1133,7 @@ for negative return value of <a class="link" href="libgwyddion-GwyNLFitter.html#
<a class="link" href="libgwyddion-GwyNLFitter.html#gwy-math-nlfit-fit-full" title="gwy_math_nlfit_fit_full ()"><code class="function">gwy_math_nlfit_fit_full()</code></a>. This function allows to test it later.</p>
<div class="refsect3">
<a name="gwy-math-nlfit-succeeded.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1159,7 +1161,7 @@ gwy_math_nlfit_get_dispersion (<em class="parameter"><code><a class="link" href=
<p>This function can be used only after a successful fit.</p>
<div class="refsect3">
<a name="gwy-math-nlfit-get-dispersion.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1190,7 +1192,7 @@ gwy_math_nlfit_get_correlations (<em class="parameter"><code><a class="link" hre
<p>This function can be used only after a successful fit.</p>
<div class="refsect3">
<a name="gwy-math-nlfit-get-correlations.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1228,7 +1230,7 @@ gwy_math_nlfit_get_eval (<em class="parameter"><code><a class="link" href="libgw
<p>Gets the state of a nonlinear fitter.</p>
<div class="refsect3">
<a name="gwy-math-nlfit-get-eval.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1255,7 +1257,7 @@ gwy_math_nlfit_get_covar (<em class="parameter"><code><a class="link" href="libg
<p>Gets the covariance matrix of a nonlinear fitter.</p>
<div class="refsect3">
<a name="gwy-math-nlfit-get-covar.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1287,7 +1289,7 @@ by <a class="link" href="libgwyddion-GwyNLFitter.html#gwy-math-nlfit-get-covar"
<a class="link" href="libgwyddion-GwyNLFitter.html#gwy-math-nlfit-get-correlations" title="gwy_math_nlfit_get_correlations ()"><code class="function">gwy_math_nlfit_get_correlations()</code></a>.</p>
<div class="refsect3">
<a name="gwy-math-nlfit-get-nparam.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1315,10 +1317,11 @@ gwy_math_nlfit_get_sigma (<em class="parameter"><code><a class="link" href="libg
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> par</code></em>);</pre>
<p>Returns the standard deviation of parameter number <em class="parameter"><code>par</code></em>
.</p>
-<p>This function makes sense only after a successful fit.</p>
+<p>This function makes sense only after a successful fit and for a free
+parameter.</p>
<div class="refsect3">
<a name="gwy-math-nlfit-get-sigma.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1354,7 +1357,7 @@ gwy_math_nlfit_set_callbacks (<em class="parameter"><code><a class="link" href="
<p>Sets callbacks reporting a non-linear least squares fitter progress.</p>
<div class="refsect3">
<a name="gwy-math-nlfit-set-callbacks.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1396,7 +1399,7 @@ gwy_math_nlfit_diff (<em class="parameter"><code><a href="/usr/share/gtk-doc/htm
<p>Numerically computes the partial derivatives of a function.</p>
<div class="refsect3">
<a name="gwy-math-nlfit-diff.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1467,7 +1470,7 @@ gwy_math_nlfit_derive (<em class="parameter"><code><a href="/usr/share/gtk-doc/h
<p>This is a legacy name for function <a class="link" href="libgwyddion-GwyNLFitter.html#gwy-math-nlfit-diff" title="gwy_math_nlfit_diff ()"><code class="function">gwy_math_nlfit_diff()</code></a>.</p>
<div class="refsect3">
<a name="gwy-math-nlfit-derive.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1543,7 +1546,7 @@ if you need to modify the derivatives somehow, for instance to apply
weighting.</p>
<div class="refsect3">
<a name="gwy-math-nlfit-diff-idx.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1629,7 +1632,7 @@ the fitter state.</p>
left untouched.</p>
<div class="refsect3">
<a name="GwyNLFitter.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="struct_members_name">
<col class="struct_members_description">
diff --git a/devel-docs/libgwyddion/html/libgwyddion-GwyRandGenSet.html b/devel-docs/libgwyddion/html/libgwyddion-GwyRandGenSet.html
index fadc71c..ae0785d 100644
--- a/devel-docs/libgwyddion/html/libgwyddion-GwyRandGenSet.html
+++ b/devel-docs/libgwyddion/html/libgwyddion-GwyRandGenSet.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GwyRandGenSet: Gwyddion Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="prev" href="GwyInventory.html" title="GwyInventory">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwyddion-GwyRandGenSet.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -148,7 +148,7 @@
</div>
<div class="refsect1">
<a name="libgwyddion-GwyRandGenSet.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -218,7 +218,7 @@ gwy_rand_gen_set_new (<em class="parameter"><code><a href="http://developer.gnom
<p>The generators are initialised to random states.</p>
<div class="refsect3">
<a name="gwy-rand-gen-set-new.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -246,7 +246,7 @@ gwy_rand_gen_set_init (<em class="parameter"><code><a class="link" href="libgwyd
<p>Initialises a set of pseudorandom number generators using an integer seed.</p>
<div class="refsect3">
<a name="gwy-rand-gen-set-init.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -278,7 +278,7 @@ gwy_rand_gen_set_free (<em class="parameter"><code><a class="link" href="libgwyd
not use them any more after calling this function.</p>
<div class="refsect3">
<a name="gwy-rand-gen-set-free.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -306,7 +306,7 @@ number sequence stability will be broken because sampling functions may keep
persistent information between calls.</p>
<div class="refsect3">
<a name="gwy-rand-gen-set-rng.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -353,7 +353,7 @@ is ever returned. Note if there are no representable real numbers between
.</p>
<div class="refsect3">
<a name="gwy-rand-gen-set-range.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -403,7 +403,7 @@ pseudorandom number generator set.</p>
.</p>
<div class="refsect3">
<a name="gwy-rand-gen-set-uniform.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -448,7 +448,7 @@ pseudorandom number generator set.</p>
.</p>
<div class="refsect3">
<a name="gwy-rand-gen-set-gaussian.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -493,7 +493,7 @@ pseudorandom number generator set.</p>
.</p>
<div class="refsect3">
<a name="gwy-rand-gen-set-exponential.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -538,7 +538,7 @@ pseudorandom number generator set.</p>
.</p>
<div class="refsect3">
<a name="gwy-rand-gen-set-triangular.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -584,7 +584,7 @@ with values from [1-<em class="parameter"><code>range</code></em>
].</p>
<div class="refsect3">
<a name="gwy-rand-gen-set-multiplier.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -625,7 +625,7 @@ gwy_rand_gen_set_double (<em class="parameter"><code><a class="link" href="libgw
pseudorandom number generator set.</p>
<div class="refsect3">
<a name="gwy-rand-gen-set-double.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -661,7 +661,7 @@ gwy_rand_gen_set_int (<em class="parameter"><code><a class="link" href="libgwydd
generator set.</p>
<div class="refsect3">
<a name="gwy-rand-gen-set-int.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -703,7 +703,7 @@ gwy_rand_gen_set_choose_shuffle (<em class="parameter"><code><a class="link" hre
.</p>
<div class="refsect3">
<a name="gwy-rand-gen-set-choose-shuffle.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwyddion/html/libgwyddion-GwySIValueFormat.html b/devel-docs/libgwyddion/html/libgwyddion-GwySIValueFormat.html
index 2d19097..d550ae1 100644
--- a/devel-docs/libgwyddion/html/libgwyddion-GwySIValueFormat.html
+++ b/devel-docs/libgwyddion/html/libgwyddion-GwySIValueFormat.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GwySIValueFormat: Gwyddion Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="prev" href="GwySIUnit.html" title="GwySIUnit">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwyddion-GwySIValueFormat.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -111,7 +111,7 @@ as <a class="link" href="GwySIUnit.html#gwy-si-unit-get-format-with-digits" titl
functions.</p>
<div class="refsect3">
<a name="gwy-si-unit-value-format-new.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -151,7 +151,7 @@ gwy_si_unit_value_format_copy (<em class="parameter"><code><span class="type">Gw
<p>Copies a value format structure.</p>
<div class="refsect3">
<a name="gwy-si-unit-value-format-copy.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -179,7 +179,7 @@ gwy_si_unit_value_format_free (<em class="parameter"><code><span class="type">Gw
<p>Frees a value format structure.</p>
<div class="refsect3">
<a name="gwy-si-unit-value-format-free.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -204,7 +204,7 @@ gwy_si_unit_value_format_clone (<em class="parameter"><code><span class="type">G
that can either modify an existing format or allocate a new one.</p>
<div class="refsect3">
<a name="gwy-si-unit-value-format-clone.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -245,7 +245,7 @@ gwy_si_unit_value_format_set_units (<em class="parameter"><code><span class="typ
fields consistent.</p>
<div class="refsect3">
<a name="gwy-si-unit-value-format-set-units.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwyddion/html/libgwyddion-Math-Fallback.html b/devel-docs/libgwyddion/html/libgwyddion-Math-Fallback.html
index 1e700a6..6943620 100644
--- a/devel-docs/libgwyddion/html/libgwyddion-Math-Fallback.html
+++ b/devel-docs/libgwyddion/html/libgwyddion-Math-Fallback.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Math Fallback: Gwyddion Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="prev" href="libgwyddion-Math.html" title="Math">
@@ -34,7 +34,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwyddion-Math-Fallback.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -109,7 +109,7 @@
</div>
<div class="refsect1">
<a name="libgwyddion-Math-Fallback.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -184,7 +184,7 @@ gwy_math_fallback_pow10 (<em class="parameter"><code><span class="type">double</
<code class="function">pow10</code>.</p>
<div class="refsect3">
<a name="gwy-math-fallback-pow10.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -213,7 +213,7 @@ gwy_math_fallback_cbrt (<em class="parameter"><code><span class="type">double</s
<code class="function">cbrt</code>.</p>
<div class="refsect3">
<a name="gwy-math-fallback-cbrt.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -243,7 +243,7 @@ gwy_math_fallback_hypot (<em class="parameter"><code><span class="type">double</
<code class="function">hypot</code>.</p>
<div class="refsect3">
<a name="gwy-math-fallback-hypot.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -281,7 +281,7 @@ gwy_math_fallback_acosh (<em class="parameter"><code><span class="type">double</
<code class="function">acosh</code>.</p>
<div class="refsect3">
<a name="gwy-math-fallback-acosh.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -310,7 +310,7 @@ gwy_math_fallback_asinh (<em class="parameter"><code><span class="type">double</
<code class="function">asinh</code>.</p>
<div class="refsect3">
<a name="gwy-math-fallback-asinh.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -339,7 +339,7 @@ gwy_math_fallback_atanh (<em class="parameter"><code><span class="type">double</
<code class="function">atanh</code>.</p>
<div class="refsect3">
<a name="gwy-math-fallback-atanh.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -368,7 +368,7 @@ gwy_math_fallback_isinf (<em class="parameter"><code><span class="type">double</
<code class="function">isinf</code>.</p>
<div class="refsect3">
<a name="gwy-math-fallback-isinf.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -397,7 +397,7 @@ gwy_math_fallback_isnan (<em class="parameter"><code><span class="type">double</
<code class="function">isnan</code>.</p>
<div class="refsect3">
<a name="gwy-math-fallback-isnan.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwyddion/html/libgwyddion-Math.html b/devel-docs/libgwyddion/html/libgwyddion-Math.html
index 5165e58..1129b45 100644
--- a/devel-docs/libgwyddion/html/libgwyddion-Math.html
+++ b/devel-docs/libgwyddion/html/libgwyddion-Math.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Math: Gwyddion Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="prev" href="libgwyddion-gwyentities.html" title="gwyentities">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwyddion-Math.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -200,11 +200,35 @@
<a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
</td>
<td class="function_name">
+<a class="link" href="libgwyddion-Math.html#gwy-math-refine-maximum-1d" title="gwy_math_refine_maximum_1d ()">gwy_math_refine_maximum_1d</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="libgwyddion-Math.html#gwy-math-refine-maximum-2d" title="gwy_math_refine_maximum_2d ()">gwy_math_refine_maximum_2d</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
<a class="link" href="libgwyddion-Math.html#gwy-math-refine-maximum" title="gwy_math_refine_maximum ()">gwy_math_refine_maximum</a> <span class="c_punctuation">()</span>
</td>
</tr>
<tr>
<td class="function_type">
+<a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="libgwyddion-Math.html#gwy-check-regular-2d-grid" title="gwy_check_regular_2d_grid ()">gwy_check_regular_2d_grid</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
<a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#gdouble"><span class="returnvalue">gdouble</span></a>
</td>
<td class="function_name">
@@ -221,7 +245,7 @@
</tr>
<tr>
<td class="function_type">
-<a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#gdouble"><span class="returnvalue">gdouble</span></a>
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="returnvalue">gdouble</span></a>
</td>
<td class="function_name">
<a class="link" href="libgwyddion-Math.html#gwy-math-median-uncertainty" title="gwy_math_median_uncertainty ()">gwy_math_median_uncertainty</a> <span class="c_punctuation">()</span>
@@ -229,18 +253,26 @@
</tr>
<tr>
<td class="function_type">
-<a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#gdouble"><span class="returnvalue">gdouble</span></a>
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="returnvalue">gdouble</span></a>
</td>
<td class="function_name">
<a class="link" href="libgwyddion-Math.html#gwy-xlnx-int" title="gwy_xlnx_int ()">gwy_xlnx_int</a> <span class="c_punctuation">()</span>
</td>
</tr>
+<tr>
+<td class="function_type">
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="libgwyddion-Math.html#gwy-math-histogram" title="gwy_math_histogram ()">gwy_math_histogram</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
</tbody>
</table></div>
</div>
<div class="refsect1">
<a name="libgwyddion-Math.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -281,7 +313,7 @@ implementation.</p>
<p>Rounds a number to nearest integer. Use <a class="link" href="libgwyddion-Math.html#GWY-ROUND:CAPS" title="GWY_ROUND()"><code class="literal">GWY_ROUND</code></a> instead.</p>
<div class="refsect3">
<a name="ROUND.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -303,7 +335,7 @@ implementation.</p>
<p>Rounds a number to nearest integer.</p>
<div class="refsect3">
<a name="GWY-ROUND.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -322,13 +354,13 @@ implementation.</p>
<div class="refsect2">
<a name="gwy-xy-new"></a><h3>gwy_xy_new ()</h3>
<pre class="programlisting"><span class="returnvalue">GwyXY</span> *
-gwy_xy_new (<em class="parameter"><code><a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> x</code></em>,
+gwy_xy_new (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> x</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> y</code></em>);</pre>
<p>Creates Cartesian coordinates in plane.</p>
<p>This is mostly useful for language bindings.</p>
<div class="refsect3">
<a name="gwy-xy-new.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -363,7 +395,7 @@ gwy_xy_copy (<em class="parameter"><code>const <span class="type">GwyXY</span> *
<p>Copies Cartesian coordinates in plane.</p>
<div class="refsect3">
<a name="gwy-xy-copy.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -392,7 +424,7 @@ gwy_xy_free (<em class="parameter"><code><span class="type">GwyXY</span> *xy</co
<p>Frees Cartesian coordinates in plane created with <a class="link" href="libgwyddion-Math.html#gwy-xy-copy" title="gwy_xy_copy ()"><code class="function">gwy_xy_copy()</code></a>.</p>
<div class="refsect3">
<a name="gwy-xy-free.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -418,7 +450,7 @@ gwy_xyz_new (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibgl
<p>This is mostly useful for language bindings.</p>
<div class="refsect3">
<a name="gwy-xyz-new.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -458,7 +490,7 @@ gwy_xyz_copy (<em class="parameter"><code>const <span class="type">GwyXYZ</span>
<p>Copies Cartesian coordinates in space.</p>
<div class="refsect3">
<a name="gwy-xyz-copy.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -487,7 +519,7 @@ gwy_xyz_free (<em class="parameter"><code><span class="type">GwyXYZ</span> *xyz<
<p>Frees Cartesian coordinates in space created with <a class="link" href="libgwyddion-Math.html#gwy-xyz-copy" title="gwy_xyz_copy ()"><code class="function">gwy_xyz_copy()</code></a>.</p>
<div class="refsect3">
<a name="gwy-xyz-free.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -512,7 +544,7 @@ gwy_math_humanize_numbers (<em class="parameter"><code><a href="/usr/share/gtk-d
<p>Finds a human-friendly representation for a range of numbers.</p>
<div class="refsect3">
<a name="gwy-math-humanize-numbers.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -560,7 +592,7 @@ can be a concave, convex or self-intersecting polygon.</p>
is *exactly* on an edge. </div>
<div class="refsect3">
<a name="gwy-math-is-in-polygon.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -613,7 +645,7 @@ gwy_math_find_nearest_line (<em class="parameter"><code><a href="/usr/share/gtk-
).</p>
<div class="refsect3">
<a name="gwy-math-find-nearest-line.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -682,7 +714,7 @@ gwy_math_find_nearest_point (<em class="parameter"><code><a href="/usr/share/gtk
).</p>
<div class="refsect3">
<a name="gwy-math-find-nearest-point.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -743,7 +775,7 @@ gwy_math_lin_solve (<em class="parameter"><code><a href="/usr/share/gtk-doc/html
<p>Solve a regular system of linear equations.</p>
<div class="refsect3">
<a name="gwy-math-lin-solve.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -799,7 +831,7 @@ gwy_math_lin_solve_rewrite (<em class="parameter"><code><a href="/usr/share/gtk-
with intermediate results.</p>
<div class="refsect3">
<a name="gwy-math-lin-solve-rewrite.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -852,7 +884,7 @@ gwy_math_tridiag_solve_rewrite (<em class="parameter"><code><a href="/usr/share/
<p>Solves a tridiagonal system of linear equations.</p>
<div class="refsect3">
<a name="gwy-math-tridiag-solve-rewrite.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -913,7 +945,7 @@ gwy_math_fit_polynom (<em class="parameter"><code><a href="/usr/share/gtk-doc/ht
<p>Fits a polynom through a general (x, y) data set.</p>
<div class="refsect3">
<a name="gwy-math-fit-polynom.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -970,7 +1002,7 @@ gwy_math_choleski_decompose (<em class="parameter"><code><a href="/usr/share/gtk
<p>Decomposes a symmetric positive definite matrix in place.</p>
<div class="refsect3">
<a name="gwy-math-choleski-decompose.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1013,7 +1045,7 @@ definite matrix <em class="parameter"><code>a</code></em>
.</p>
<div class="refsect3">
<a name="gwy-math-choleski-solve.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1051,7 +1083,7 @@ gwy_math_choleski_invert (<em class="parameter"><code><a href="/usr/share/gtk-do
<p>Inverts a symmetric positive definite matrix in place.</p>
<div class="refsect3">
<a name="gwy-math-choleski-invert.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1109,7 +1141,7 @@ Cartesian coordinates with origin in a natural centre, for instance centre
of image or grain.</p>
<div class="refsect3">
<a name="gwy-math-curvature.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1168,11 +1200,55 @@ the following order: 1, x, y, x², xy, y².</p></td>
</div>
<hr>
<div class="refsect2">
-<a name="gwy-math-refine-maximum"></a><h3>gwy_math_refine_maximum ()</h3>
+<a name="gwy-math-refine-maximum-1d"></a><h3>gwy_math_refine_maximum_1d ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gwy_math_refine_maximum (<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> *z</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> *x</code></em>,
- <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> *y</code></em>);</pre>
+gwy_math_refine_maximum_1d (<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> *y</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> *x</code></em>);</pre>
+<p>Performs subpixel refinement of parabolic a one-dimensional maximum.</p>
+<p>The central value corresponds to x-coordinate 0, distances between values
+are unity. The refinement is based by fitting a parabola through the
+maximum. If it fails or the calculated maximum lies farther than the
+surrounding values the function sets the refined maximum to the origin and
+returns <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.</p>
+<div class="refsect3">
+<a name="gwy-math-refine-maximum-1d.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>y</p></td>
+<td class="parameter_description"><p>Array of length 3, containing the neighbourhood values with the maximum
+in the centre.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>x</p></td>
+<td class="parameter_description"><p>Location to store the refined <em class="parameter"><code>x</code></em>
+-coordinate.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gwy-math-refine-maximum-1d.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the refinement succeeded, <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it failed. The value
+of <em class="parameter"><code>x</code></em>
+is usable regardless of the return value.</p>
+</div>
+<p class="since">Since: <a class="link" href="api-index-2-49.html#api-index-2.49">2.49</a></p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gwy-math-refine-maximum-2d"></a><h3>gwy_math_refine_maximum_2d ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gwy_math_refine_maximum_2d (<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> *z</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> *x</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> *y</code></em>);</pre>
<p>Performs subpixel refinement of parabolic a two-dimensional maximum.</p>
<p>The central value corresponds to coordinates (0,0), distances between values
are unity. The refinement is based by fitting a two-dimensional parabola
@@ -1180,8 +1256,56 @@ through the maximum. If it fails or the calculated maximum lies farther
than the surrounding values the function sets the refined maximum to the
origin and returns <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.</p>
<div class="refsect3">
+<a name="gwy-math-refine-maximum-2d.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>z</p></td>
+<td class="parameter_description"><p>Array of length 9, containing the square 3x3 neighbourhood values in
+matrix order and with the maximum in the centre.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>x</p></td>
+<td class="parameter_description"><p>Location to store the refined <em class="parameter"><code>x</code></em>
+-coordinate.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>y</p></td>
+<td class="parameter_description"><p>Location to store the refined <em class="parameter"><code>y</code></em>
+-coordinate.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gwy-math-refine-maximum-2d.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the refinement succeeded, <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if it failed. The values
+of <em class="parameter"><code>x</code></em>
+and <em class="parameter"><code>y</code></em>
+are usable regardless of the return value.</p>
+</div>
+<p class="since">Since: <a class="link" href="api-index-2-49.html#api-index-2.49">2.49</a></p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gwy-math-refine-maximum"></a><h3>gwy_math_refine_maximum ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gwy_math_refine_maximum (<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> *z</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> *x</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> *y</code></em>);</pre>
+<p>Performs subpixel refinement of parabolic a two-dimensional maximum.</p>
+<p>An alias for <a class="link" href="libgwyddion-Math.html#gwy-math-refine-maximum-2d" title="gwy_math_refine_maximum_2d ()"><code class="function">gwy_math_refine_maximum_2d()</code></a>.</p>
+<div class="refsect3">
<a name="gwy-math-refine-maximum.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1220,6 +1344,97 @@ are usable regardless of the return value.</p>
</div>
<hr>
<div class="refsect2">
+<a name="gwy-check-regular-2d-grid"></a><h3>gwy_check_regular_2d_grid ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a> *
+gwy_check_regular_2d_grid (<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> *coords</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> stride</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> n</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> tolerance</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> *xres</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> *yres</code></em>,
+ <em class="parameter"><code><span class="type">GwyXY</span> *xymin</code></em>,
+ <em class="parameter"><code><span class="type">GwyXY</span> *xystep</code></em>);</pre>
+<p>Detects if points in plane form a regular rectangular grid oriented along
+the Cartesian axes.</p>
+<p>Points lying in one straight line are not considered to form a rectangle.</p>
+<p>When the function fails, i.e. the points do not form a regular grid, the
+values of output arguments are undefined.</p>
+<div class="refsect3">
+<a name="gwy-check-regular-2d-grid.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>coords</p></td>
+<td class="parameter_description"><p>Array of <em class="parameter"><code>n</code></em>
+coordinate pairs in plane. You can also typecast
+<span class="type">GwyXY</span> or <span class="type">GwyXYZ</span> to doubles.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>stride</p></td>
+<td class="parameter_description"><p>Actual number of double values in one block. It must be at least
+2 if <em class="parameter"><code>coords</code></em>
+contains just alternating <em class="parameter"><code>x</code></em>
+and <em class="parameter"><code>y</code></em>
+. If you pass an
+typecast <span class="type">GwyXYZ</span> array give stride as 3, etc.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>n</p></td>
+<td class="parameter_description"><p>Number of items in <em class="parameter"><code>coords</code></em>
+.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>tolerance</p></td>
+<td class="parameter_description"><p>Relative distance from pixel center which is still considered
+OK. Pass a negative value for some reasonable default.
+The maximum meaningful value is 0.5, beyond that the point would
+end up in a different pixel.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>xres</p></td>
+<td class="parameter_description"><p>Location where to store the number of columns.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>yres</p></td>
+<td class="parameter_description"><p>Location where to store the number of rows.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>xymin</p></td>
+<td class="parameter_description"><p>Location where to store the minimum coordinates (top left corner).</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>xystep</p></td>
+<td class="parameter_description"><p>Location where to store the pixel size.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gwy-check-regular-2d-grid.returns"></a><h4>Returns</h4>
+<p> On success, a newly allocated array mapping grid indices
+(<em class="parameter"><code>i</code></em>
+*<em class="parameter"><code>xres</code></em>
++<em class="parameter"><code>j</code></em>
+) to indices in <em class="parameter"><code>coords</code></em>
+. <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> is returned on failure.</p>
+</div>
+<p class="since">Since: <a class="link" href="api-index-2-48.html#api-index-2.48">2.48</a></p>
+</div>
+<hr>
+<div class="refsect2">
<a name="gwy-math-median"></a><h3>gwy_math_median ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="returnvalue">gdouble</span></a>
gwy_math_median (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gsize"><span class="type">gsize</span></a> n</code></em>,
@@ -1227,7 +1442,7 @@ gwy_math_median (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gl
<p>Finds median of an array of values using Quick select algorithm.</p>
<div class="refsect3">
<a name="gwy-math-median.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1266,7 +1481,7 @@ gwy_math_sort (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib
thanks to specialization for doubles.</p>
<div class="refsect3">
<a name="gwy-math-sort.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1313,7 +1528,7 @@ are tabulated. For large arguments the function is evaluated using the
standard <code class="function">log()</code> function which is of course slower.</p>
<div class="refsect3">
<a name="gwy-xlnx-int.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1336,6 +1551,77 @@ standard <code class="function">log()</code> function which is of course slower.
</div>
<p class="since">Since: <a class="link" href="api-index-2-44.html#api-index-2.44">2.44</a></p>
</div>
+<hr>
+<div class="refsect2">
+<a name="gwy-math-histogram"></a><h3>gwy_math_histogram ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
+gwy_math_histogram (<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> *values</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> n</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> min</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> max</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> nbins</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> *counts</code></em>);</pre>
+<p>Counts the numbers of values falling into equal-sized bins.</p>
+<p>The value of <em class="parameter"><code>min</code></em>
+ must not be larger than <em class="parameter"><code>max</code></em>
+. The values may lie outside
+[<em class="parameter"><code>min</code></em>
+,<em class="parameter"><code>max</code></em>
+]. They are not counted in the histogram, nor the returned total.</p>
+<p>Rounding rules for values exactly at the edge of two bins are arbitrary
+and must not be relied upon.</p>
+<div class="refsect3">
+<a name="gwy-math-histogram.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>values</p></td>
+<td class="parameter_description"><p>Values to make histogram from.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>n</p></td>
+<td class="parameter_description"><p>Number of values in <em class="parameter"><code>values</code></em>
+.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>min</p></td>
+<td class="parameter_description"><p>Minimum value to consider (left edge of histogram).</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>max</p></td>
+<td class="parameter_description"><p>Maximum value to consider (right edge of histogram).</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>nbins</p></td>
+<td class="parameter_description"><p>Number of histogram bins (number of <em class="parameter"><code>counts</code></em>
+items), a positive
+number.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>counts</p></td>
+<td class="parameter_description"><p>Array where to store the counts.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gwy-math-histogram.returns"></a><h4>Returns</h4>
+<p> The number of values inside the entire histogram, i.e. at most <em class="parameter"><code>n</code></em>
+but possibly a reduced count.</p>
+</div>
+<p class="since">Since: <a class="link" href="api-index-2-49.html#api-index-2.49">2.49</a></p>
+</div>
</div>
<div class="refsect1">
<a name="libgwyddion-Math.other_details"></a><h2>Types and Values</h2>
diff --git a/devel-docs/libgwyddion/html/libgwyddion-gwyddion.html b/devel-docs/libgwyddion/html/libgwyddion-gwyddion.html
index a0d1f2b..d98e4b7 100644
--- a/devel-docs/libgwyddion/html/libgwyddion-gwyddion.html
+++ b/devel-docs/libgwyddion/html/libgwyddion-gwyddion.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>gwyddion: Gwyddion Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="prev" href="libgwyddion-gwymacros.html" title="gwymacros">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwyddion-gwyddion.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
diff --git a/devel-docs/libgwyddion/html/libgwyddion-gwyddionenums.html b/devel-docs/libgwyddion/html/libgwyddion-gwyddionenums.html
index 51c3165..1200436 100644
--- a/devel-docs/libgwyddion/html/libgwyddion-gwyddionenums.html
+++ b/devel-docs/libgwyddion/html/libgwyddion-gwyddionenums.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>gwyddionenums: Gwyddion Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="prev" href="index.html" title="Gwyddion Library Reference Manual">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwyddion-gwyddionenums.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -69,7 +69,7 @@
<p>Physical quantity formatting style.</p>
<div class="refsect3">
<a name="GwySIUnitFormatStyle.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
@@ -126,7 +126,7 @@
<p>Type of fitting parameter properties.</p>
<div class="refsect3">
<a name="GwyNLFitParamFlags.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
diff --git a/devel-docs/libgwyddion/html/libgwyddion-gwydebugobjects.html b/devel-docs/libgwyddion/html/libgwyddion-gwydebugobjects.html
index 6327790..2a24f7c 100644
--- a/devel-docs/libgwyddion/html/libgwyddion-gwydebugobjects.html
+++ b/devel-docs/libgwyddion/html/libgwyddion-gwydebugobjects.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>gwydebugobjects: Gwyddion Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="prev" href="libgwyddion-gwymd5.html" title="gwymd5">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwyddion-gwydebugobjects.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -82,7 +82,7 @@
</div>
<div class="refsect1">
<a name="libgwyddion-gwydebugobjects.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -119,7 +119,7 @@ enable it.</p>
<p>It uses file name and line number as the detail.</p>
<div class="refsect3">
<a name="gwy-debug-objects-creation.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -151,7 +151,7 @@ etc., and you usually want to catch all possible means of object creation.</p>
rules of a particular object, he then calls it just after object creation.</p>
<div class="refsect3">
<a name="gwy-debug-objects-creation-detailed.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -183,7 +183,7 @@ gwy_debug_objects_enable (<em class="parameter"><code><a href="http://developer.
already watched ones is still noted.</p>
<div class="refsect3">
<a name="gwy-debug-objects-enable.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -208,7 +208,7 @@ gwy_debug_objects_dump_to_file (<em class="parameter"><code><span class="type">F
destruction time (or ALIVE! message with reference count).</p>
<div class="refsect3">
<a name="gwy-debug-objects-dump-to-file.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -246,7 +246,7 @@ the very first one, including time counting reset.</p>
<p>Option flags for <a class="link" href="libgwyddion-gwydebugobjects.html#gwy-debug-objects-dump-to-file" title="gwy_debug_objects_dump_to_file ()"><code class="function">gwy_debug_objects_dump_to_file()</code></a>.</p>
<div class="refsect3">
<a name="GwyDebugObjectsDumpFlags.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
diff --git a/devel-docs/libgwyddion/html/libgwyddion-gwyentities.html b/devel-docs/libgwyddion/html/libgwyddion-gwyentities.html
index d45d227..9758f5a 100644
--- a/devel-docs/libgwyddion/html/libgwyddion-gwyentities.html
+++ b/devel-docs/libgwyddion/html/libgwyddion-gwyentities.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>gwyentities: Gwyddion Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="prev" href="libgwyddion-gwyddion.html" title="gwyddion">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwyddion-gwyentities.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -67,7 +67,7 @@
</div>
<div class="refsect1">
<a name="libgwyddion-gwyentities.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -115,7 +115,7 @@ gwy_entities_entity_to_utf8 (<em class="parameter"><code>const <a href="http://d
should not contain the ampersand and semicolon.</p>
<div class="refsect3">
<a name="gwy-entities-entity-to-utf8.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -145,7 +145,7 @@ gwy_entities_text_to_utf8 (<em class="parameter"><code>const <a href="http://dev
<p>Converts entities in a text to UTF-8.</p>
<div class="refsect3">
<a name="gwy-entities-text-to-utf8.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -177,7 +177,7 @@ text.</p>
<p>The type of text entity data.</p>
<div class="refsect3">
<a name="GwyTextEntity.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="struct_members_name">
<col class="struct_members_description">
diff --git a/devel-docs/libgwyddion/html/libgwyddion-gwymacros.html b/devel-docs/libgwyddion/html/libgwyddion-gwymacros.html
index e501234..3e0529f 100644
--- a/devel-docs/libgwyddion/html/libgwyddion-gwymacros.html
+++ b/devel-docs/libgwyddion/html/libgwyddion-gwymacros.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>gwymacros: Gwyddion Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="prev" href="GwyContainer.html" title="GwyContainer">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwyddion-gwymacros.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -148,7 +148,7 @@
</div>
<div class="refsect1">
<a name="libgwyddion-gwymacros.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -207,7 +207,7 @@
in a single statement.</p>
<div class="refsect3">
<a name="GWY-SWAP.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -244,7 +244,7 @@ to swap with <em class="parameter"><code>y</code></em>
<p>Expands to <a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if strings are equal, to <a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise.</p>
<div class="refsect3">
<a name="gwy-strequal.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -285,7 +285,7 @@ should fall to a known range but may occasionaly fail to due to rounding
errors and in similar situations. Under normal circumstances, use <a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Standard-Macros.html#CLAMP:CAPS"><code class="function">CLAMP()</code></a>.</p>
<div class="refsect3">
<a name="GWY-CLAMP.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -320,7 +320,7 @@ errors and in similar situations. Under normal circumstances, use <a href="http
calculated from the type of the pointer.</p>
<div class="refsect3">
<a name="gwy-clear.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -356,7 +356,7 @@ calculation!)</p>
<p>As with <code class="function">memcpy()</code>, the memory blocks may not overlap.</p>
<div class="refsect3">
<a name="gwy-assign.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -398,7 +398,7 @@ to the variable. In all cases <em class="parameter"><code>obj</code></em>
referenced elsewhere, otherwise it leaks memory.</p>
<div class="refsect3">
<a name="GWY-OBJECT-UNREF.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -434,7 +434,7 @@ wrong because you keep and try to disconnect a handler for a non-existent
object. A warning may be emitted in the future.</p>
<div class="refsect3">
<a name="GWY-SIGNAL-HANDLER-DISCONNECT.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -466,7 +466,7 @@ signal handler id or 0 (must be an l-value).</p></td>
).</p>
<div class="refsect3">
<a name="GWY-FIND-PSPEC.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -505,7 +505,7 @@ end.</p>
<p>A useful property of this macro is its idempotence.</p>
<div class="refsect3">
<a name="GWY-SI-VALUE-FORMAT-FREE.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -534,7 +534,7 @@ variable. In all cases <em class="parameter"><code>ptr</code></em>
<p>A useful property of this macro is its idempotence.</p>
<div class="refsect3">
<a name="GWY-FREE.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -562,7 +562,7 @@ line number or time (when possible) and emitted at log level
<p>The macro expands to nothing if compiled without DEBUG defined.</p>
<div class="refsect3">
<a name="gwy-debug.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -588,7 +588,7 @@ modules.</p>
<a href="/usr/share/gtk-doc/html/glibglib-Message-Logging.html#G-LOG-LEVEL-INFO:CAPS"><code class="literal">G_LOG_LEVEL_INFO</code></a> messages but the default Gwyddion handler does not.</p>
<div class="refsect3">
<a name="gwy-info.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -616,7 +616,7 @@ gwy_debug_gnu (<em class="parameter"><code>const <a href="/usr/share/gtk-doc/htm
<p>To be used via <a class="link" href="libgwyddion-gwymacros.html#gwy-debug" title="gwy_debug()"><code class="function">gwy_debug()</code></a>, should not be used directly.</p>
<div class="refsect3">
<a name="gwy-debug-gnu.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -663,7 +663,7 @@ gwy_debug_gnu (<em class="parameter"><code>const <a href="/usr/share/gtk-doc/htm
<p>Legacy name for <a class="link" href="libgwyddion-gwymacros.html#GWY-OBJECT-UNREF:CAPS" title="GWY_OBJECT_UNREF()"><code class="literal">GWY_OBJECT_UNREF</code></a>.</p>
<div class="refsect3">
<a name="gwy-object-unref.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -686,7 +686,7 @@ gwy_debug_gnu (<em class="parameter"><code>const <a href="/usr/share/gtk-doc/htm
<p>Legacy name for <a class="link" href="libgwyddion-gwymacros.html#GWY-SIGNAL-HANDLER-DISCONNECT:CAPS" title="GWY_SIGNAL_HANDLER_DISCONNECT()"><code class="literal">GWY_SIGNAL_HANDLER_DISCONNECT</code></a>.</p>
<div class="refsect3">
<a name="gwy-signal-handler-disconnect.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwyddion/html/libgwyddion-gwymd5.html b/devel-docs/libgwyddion/html/libgwyddion-gwymd5.html
index 4a948f6..e2726e2 100644
--- a/devel-docs/libgwyddion/html/libgwyddion-gwymd5.html
+++ b/devel-docs/libgwyddion/html/libgwyddion-gwymd5.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>gwymd5: Gwyddion Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="prev" href="GwyStringList.html" title="GwyStringList">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwyddion-gwymd5.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -74,7 +74,7 @@ produces as output a 128-bit "fingerprint" or "message digest" of
the input. For more information see RFC 1321.</p>
<div class="refsect3">
<a name="gwy-md5-get-digest.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwyddion/html/libgwyddion-gwyutils.html b/devel-docs/libgwyddion/html/libgwyddion-gwyutils.html
index 11b82a4..16e148b 100644
--- a/devel-docs/libgwyddion/html/libgwyddion-gwyutils.html
+++ b/devel-docs/libgwyddion/html/libgwyddion-gwyutils.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>gwyutils: Gwyddion Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="prev" href="libgwyddion-GwySIValueFormat.html" title="GwySIValueFormat">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwyddion-gwyutils.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -255,6 +255,14 @@
</tr>
<tr>
<td class="function_type">
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="libgwyddion-gwyutils.html#gwy-set-member-object" title="gwy_set_member_object ()">gwy_set_member_object</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
<span class="returnvalue">FILE</span> *
</td>
<td class="function_name">
@@ -274,7 +282,7 @@
</div>
<div class="refsect1">
<a name="libgwyddion-gwyutils.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -313,7 +321,7 @@ manipulation (<a class="link" href="libgwyddion-gwyutils.html#gwy-canonicalize-p
<p>Usually you want to use <a href="../libgwyapp-wait.html#gwy-app-wait-set-fraction"><code class="function">gwy_app_wait_set_fraction()</code></a>.</p>
<div class="refsect3">
<a name="GwySetFractionFunc.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -341,7 +349,7 @@ cancelled.</p>
<p>Usually you want to use <a href="../libgwyapp-wait.html#gwy-app-wait-set-message"><code class="function">gwy_app_wait_set_message()</code></a>.</p>
<div class="refsect3">
<a name="GwySetMessageFunc.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -374,7 +382,7 @@ gwy_hash_table_to_slist_cb (<em class="parameter"><code><a href="/usr/share/gtk-
data to it.</p>
<div class="refsect3">
<a name="gwy-hash-table-to-slist-cb.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -412,7 +420,7 @@ gwy_hash_table_to_list_cb (<em class="parameter"><code><a href="/usr/share/gtk-d
data to it.</p>
<div class="refsect3">
<a name="gwy-hash-table-to-list-cb.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -452,7 +460,7 @@ gwy_strkill (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibgl
) to get a modified copy.</p>
<div class="refsect3">
<a name="gwy-strkill.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -494,7 +502,7 @@ gwy_strreplace (<em class="parameter"><code>const <a href="/usr/share/gtk-doc/ht
on a <a href="/usr/share/gtk-doc/html/glibglib-Strings.html#GString"><span class="type">GString</span></a>.</p>
<div class="refsect3">
<a name="gwy-strreplace.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -540,7 +548,7 @@ gwy_strdiffpos (<em class="parameter"><code>const <a href="/usr/share/gtk-doc/ht
<p>Finds position where two strings differ.</p>
<div class="refsect3">
<a name="gwy-strdiffpos.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -586,7 +594,7 @@ and/or <em class="parameter"><code>startmore</code></em>
.</p>
<div class="refsect3">
<a name="gwy-strisident.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -633,7 +641,7 @@ gwy_ascii_strcase_equal (<em class="parameter"><code><a href="/usr/share/gtk-doc
function.</p>
<div class="refsect3">
<a name="gwy-ascii-strcase-equal.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -672,7 +680,7 @@ gwy_ascii_strcase_hash (<em class="parameter"><code><a href="/usr/share/gtk-doc/
namely in conjuction with <a class="link" href="libgwyddion-gwyutils.html#gwy-ascii-strcase-equal" title="gwy_ascii_strcase_equal ()"><code class="function">gwy_ascii_strcase_equal()</code></a> comparison function.</p>
<div class="refsect3">
<a name="gwy-ascii-strcase-hash.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -701,7 +709,7 @@ gwy_stramong (<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html
<p>Checks whether a string is equal to any from given list.</p>
<div class="refsect3">
<a name="gwy-stramong.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -750,7 +758,7 @@ arbitrary memory blocks instead of NUL-terminated strings.</p>
wrapper. On other systems it emulates <code class="function">memmem()</code> behaviour.</p>
<div class="refsect3">
<a name="gwy-memmem.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -807,7 +815,7 @@ use <em class="parameter"><code>size</code></em>
to find its end.</p>
<div class="refsect3">
<a name="gwy-file-get-contents.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -855,7 +863,7 @@ gwy_file_abandon_contents (<em class="parameter"><code><a href="/usr/share/gtk-d
<p>Frees or unmmaps memory allocated by <a class="link" href="libgwyddion-gwyutils.html#gwy-file-get-contents" title="gwy_file_get_contents ()"><code class="function">gwy_file_get_contents()</code></a>.</p>
<div class="refsect3">
<a name="gwy-file-abandon-contents.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -901,7 +909,7 @@ directories is calculated from it.</p>
<p>To obtain the Gwyddion user directory see <a class="link" href="libgwyddion-gwyutils.html#gwy-get-user-dir" title="gwy_get_user_dir ()"><code class="function">gwy_get_user_dir()</code></a>.</p>
<div class="refsect3">
<a name="gwy-find-self-dir.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -968,7 +976,7 @@ backslashes to slashes along the way.</p>
that.</p>
<div class="refsect3">
<a name="gwy-canonicalize-path.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -997,7 +1005,7 @@ be normally ignored. Currently it means backup files (ending with ~ or
.bak) and Unix hidden files (starting with a dot).</p>
<div class="refsect3">
<a name="gwy-filename-ignore.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1023,7 +1031,7 @@ gwy_sgettext (<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html
<p>Translate a message id containing disambiguating prefix ending with `|'.</p>
<div class="refsect3">
<a name="gwy-sgettext.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1083,7 +1091,7 @@ returned.</p>
<p></p>
<div class="refsect3">
<a name="gwy-str-next-line.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1127,7 +1135,7 @@ will be inserted at every position in this case.</p>
substring replacement.</p>
<div class="refsect3">
<a name="gwy-gstring-replace.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1184,7 +1192,7 @@ automatically.</p>
actually performs any conversion at all only on MS Windows.</p>
<div class="refsect3">
<a name="gwy-gstring-to-native-eol.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1221,7 +1229,7 @@ More generally, if you want to reverse byte order in groups of size
is zero, this function reduces to plain <code class="function">memcpy()</code>.</p>
<div class="refsect3">
<a name="gwy-memcpy-byte-swap.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1277,7 +1285,7 @@ have more bits than the mantissa of doubles. All other conversions should
be precise.</p>
<div class="refsect3">
<a name="gwy-convert-raw-data.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1345,7 +1353,7 @@ gwy_raw_data_size (<em class="parameter"><code><a class="link" href="libgwyddion
<p>Reports the size of a single raw data item.</p>
<div class="refsect3">
<a name="gwy-raw-data-size.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1387,7 +1395,7 @@ requested value, as a consequences notifications are emitted only for
properties which actually change.</p>
<div class="refsect3">
<a name="gwy-object-set-or-reset.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1421,6 +1429,140 @@ to defaults.</p></td>
</div>
<hr>
<div class="refsect2">
+<a name="gwy-set-member-object"></a><h3>gwy_set_member_object ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gwy_set_member_object (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> instance</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> member_object</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gobjectgobject-Type-Information.html#GType"><span class="type">GType</span></a> expected_type</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> member_field</code></em>,
+ <em class="parameter"><code>...</code></em>);</pre>
+<p>Replaces a member object of another object, handling signal connection and
+disconnection.</p>
+<p>If <em class="parameter"><code>member_object</code></em>
+ is not <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> a reference is taken, sinking any floating
+objects (and conversely, the reference to the previous member object is
+released).</p>
+<p>The purpose is to simplify bookkeeping in classes that have settable
+member objects and (usually but not necessarily) need to connect to some
+signals of these member objects. Since this function both connects and
+disconnects signals it must be always called with the same set of signals,
+including callbacks and flags, for a specific member object.</p>
+<p>Example for a <span class="type">GwyFoo</span> class owning a <a href="../GwyGradient.html#GwyGradient-struct"><span class="type">GwyGradient</span></a> member object,
+assuming the usual conventions:</p>
+<div class="informalexample">
+ <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
+ <tbody>
+ <tr>
+ <td class="listing_lines" align="right"><pre>1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23</pre></td>
+ <td class="listing_code"><pre class="programlisting"><span class="keyword">typedef</span><span class="normal"> </span><span class="keyword">struct</span><span class="normal"> </span><span class="classname">_GwyFooPrivate</span><span class="normal"> GwyFooPrivate</span><span class="symbol">;</span>
+
+<span class="keyword">struct</span><span class="normal"> </span><span class="classname">_GwyFooPrivate</span><span class="normal"> </span><span class="cbracket">{</span>
+<span class="normal"> </span><span class="usertype">GwyGradient</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">gradient</span><span class="symbol">;</span>
+<span class="normal"> </span><span class="usertype">gulong</span><span class="normal"> gradient_data_changed_id</span><span class="symbol">;</span>
+<span class="cbracket">}</span><span class="symbol">;</span>
+
+<span class="keyword">static</span><span class="normal"> <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean">gboolean</a></span>
+<span class="function">set_gradient</span><span class="symbol">(</span><span class="usertype">GwyFoo</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">foo</span><span class="symbol">)</span>
+<span class="cbracket">{</span>
+<span class="normal"> </span><span class="usertype">GwyFooPrivate</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">priv </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="/usr/share/gtk-doc/html/gobjectgobject-Type-Information.html#G-TYPE-INSTANCE-GET-PRIVATE:CAPS">G_TYPE_INSTANCE_GET_PRIVATE</a></span><span class="symbol">(</span><span class="normal">foo</span><span class="symbol">,</span><span class="n [...]
+<span class="normal"> GwyFooPrivate</span><span class="symbol">);</span>
+<span class="normal"> </span><span class="keyword">if</span><span class="normal"> </span><span class="symbol">(!</span><span class="function"><a href="#gwy-set-member-object">gwy_set_member_object</a></span><span class="symbol">(</span><span class="normal">foo</span><span class="symbol">,</span><span class="normal"> gradient</span><span class="symbol">,</span><span class="normal"> GWY_TYPE_GRADIENT</span><span class="symbol">,</span>
+<span class="normal"> </span><span class="symbol">&</span><span class="normal">priv</span><span class="symbol">-></span><span class="normal">gradient</span><span class="symbol">,</span>
+<span class="normal"> </span><span class="string">"data-changed"</span><span class="symbol">,</span><span class="normal"> </span><span class="symbol">&</span><span class="normal">foo_gradient_data_changed</span><span class="symbol">,</span>
+<span class="normal"> </span><span class="symbol">&</span><span class="normal">priv</span><span class="symbol">-></span><span class="normal">gradient_data_changed_id</span><span class="symbol">,</span>
+<span class="normal"> <a href="/usr/share/gtk-doc/html/gobjectgobject-Signals.html#G-CONNECT-SWAPPED:CAPS">G_CONNECT_SWAPPED</a></span><span class="symbol">,</span>
+<span class="normal"> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS">NULL</a></span><span class="symbol">))</span>
+<span class="normal"> </span><span class="keyword">return</span><span class="normal"> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS">FALSE</a></span><span class="symbol">;</span>
+
+<span class="normal"> </span><span class="comment">// Do whatever else needs to be done if the gradient changes.</span>
+<span class="normal"> </span><span class="keyword">return</span><span class="normal"> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS">TRUE</a></span><span class="symbol">;</span>
+<span class="cbracket">}</span></pre></td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<p>
+The gradient setter then usually only calls
+<code class="function"><code class="function">set_gradient()</code></code> and disposing of the member object again
+only calls <code class="function"><code class="function">set_gradient()</code></code> but with <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> gradient.</p>
+<div class="refsect3">
+<a name="gwy-set-member-object.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>instance</p></td>
+<td class="parameter_description"><p>An object instance.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>member_object</p></td>
+<td class="parameter_description"><p>Another object to be owned by <em class="parameter"><code>instanced</code></em>
+, or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>expected_type</p></td>
+<td class="parameter_description"><p>The type of <em class="parameter"><code>member_object</code></em>
+. It is checked and a critical
+message is emitted if it does not conform.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>member_field</p></td>
+<td class="parameter_description"><p>Pointer to location storing the current member object to
+be replaced by <em class="parameter"><code>member_object</code></em>
+.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>...</p></td>
+<td class="parameter_description"><p>List of quadruplets of the form signal name, <a href="/usr/share/gtk-doc/html/gobjectgobject-Closures.html#GCallback"><span class="type">GCallback</span></a> callback,
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gulong"><span class="type">gulong</span></a> pointer to location to hold the signal handler id, and
+<a href="/usr/share/gtk-doc/html/gobjectgobject-Signals.html#GConnectFlags"><span class="type">GConnectFlags</span></a> connection flags.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gwy-set-member-object.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if <em class="parameter"><code>member_field</code></em>
+was changed. <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> means the new
+member is identical to the current one and the function reduced to
+no-op (or that an assertion faled).</p>
+</div>
+<p class="since">Since: <a class="link" href="api-index-2-49.html#api-index-2.49">2.49</a></p>
+</div>
+<hr>
+<div class="refsect2">
<a name="gwy-fopen"></a><h3>gwy_fopen ()</h3>
<pre class="programlisting"><span class="returnvalue">FILE</span> *
gwy_fopen (<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *filename</code></em>,
@@ -1436,7 +1578,7 @@ functions like <code class="function">fprintf()</code> or <code class="function"
<p>See your C library manual for more details about <code class="function">fopen()</code>.</p>
<div class="refsect3">
<a name="gwy-fopen.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1474,7 +1616,7 @@ gwy_fprintf (<em class="parameter"><code><span class="type">FILE</span> *file</c
positional parameters, as specified in the Single Unix Specification.</p>
<div class="refsect3">
<a name="gwy-fprintf.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1519,7 +1661,7 @@ pitfalls</GTKDOCLINK>
full type specification.</p>
<div class="refsect3">
<a name="GwyRawDataType.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
@@ -1621,7 +1763,7 @@ full type specification.</p>
<p>Type of byte order.</p>
<div class="refsect3">
<a name="GwyByteOrder.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
diff --git a/devel-docs/libgwyddion/html/libgwyddion-gwyversion.html b/devel-docs/libgwyddion/html/libgwyddion-gwyversion.html
index 3781f0a..ff5858e 100644
--- a/devel-docs/libgwyddion/html/libgwyddion-gwyversion.html
+++ b/devel-docs/libgwyddion/html/libgwyddion-gwyversion.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>gwyversion: Gwyddion Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Library Reference Manual">
<link rel="prev" href="libgwyddion-gwyutils.html" title="gwyutils">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwyddion-gwyversion.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -67,7 +67,7 @@
</div>
<div class="refsect1">
<a name="libgwyddion-gwyversion.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -158,7 +158,7 @@ runs with.</p>
<hr>
<div class="refsect2">
<a name="GWY-VERSION-MINOR:CAPS"></a><h3>GWY_VERSION_MINOR</h3>
-<pre class="programlisting">#define GWY_VERSION_MINOR 47
+<pre class="programlisting">#define GWY_VERSION_MINOR 49
</pre>
<p>Expands to the minor version of Gwyddion as a number.</p>
<p>If the version is 1.99.7.20060604, this macro is defined as 99.</p>
@@ -166,7 +166,7 @@ runs with.</p>
<hr>
<div class="refsect2">
<a name="GWY-VERSION-STRING:CAPS"></a><h3>GWY_VERSION_STRING</h3>
-<pre class="programlisting">#define GWY_VERSION_STRING "2.47"
+<pre class="programlisting">#define GWY_VERSION_STRING "2.49"
</pre>
<p>Expands to the full Gwyddion version as a string.</p>
<p>If the version is 1.99.7.20060604, this macro is defined as
diff --git a/devel-docs/libgwyddion/html/libgwyddion.devhelp2 b/devel-docs/libgwyddion/html/libgwyddion.devhelp2
index 8e43d16..b2f5c00 100644
--- a/devel-docs/libgwyddion/html/libgwyddion.devhelp2
+++ b/devel-docs/libgwyddion/html/libgwyddion.devhelp2
@@ -48,6 +48,8 @@
<sub name="Index of new symbols in 2.45" link="api-index-2-45.html"/>
<sub name="Index of new symbols in 2.46" link="api-index-2-46.html"/>
<sub name="Index of new symbols in 2.47" link="api-index-2-47.html"/>
+ <sub name="Index of new symbols in 2.48" link="api-index-2-48.html"/>
+ <sub name="Index of new symbols in 2.49" link="api-index-2-49.html"/>
</chapters>
<functions>
<keyword type="enum" name="enum GwySIUnitFormatStyle" link="libgwyddion-gwyddionenums.html#GwySIUnitFormatStyle"/>
@@ -82,6 +84,7 @@
<keyword type="function" name="gwy_container_remove ()" link="GwyContainer.html#gwy-container-remove"/>
<keyword type="function" name="gwy_container_remove_by_prefix ()" link="GwyContainer.html#gwy-container-remove-by-prefix"/>
<keyword type="function" name="gwy_container_duplicate_by_prefix ()" link="GwyContainer.html#gwy-container-duplicate-by-prefix"/>
+ <keyword type="function" name="gwy_container_duplicate_by_prefixv ()" link="GwyContainer.html#gwy-container-duplicate-by-prefixv" since="2.48"/>
<keyword type="function" name="gwy_container_transfer ()" link="GwyContainer.html#gwy-container-transfer"/>
<keyword type="function" name="gwy_container_rename ()" link="GwyContainer.html#gwy-container-rename"/>
<keyword type="function" name="gwy_container_foreach ()" link="GwyContainer.html#gwy-container-foreach"/>
@@ -194,11 +197,15 @@
<keyword type="function" name="gwy_math_choleski_solve ()" link="libgwyddion-Math.html#gwy-math-choleski-solve"/>
<keyword type="function" name="gwy_math_choleski_invert ()" link="libgwyddion-Math.html#gwy-math-choleski-invert" since="2.46"/>
<keyword type="function" name="gwy_math_curvature ()" link="libgwyddion-Math.html#gwy-math-curvature" since="2.22"/>
+ <keyword type="function" name="gwy_math_refine_maximum_1d ()" link="libgwyddion-Math.html#gwy-math-refine-maximum-1d" since="2.49"/>
+ <keyword type="function" name="gwy_math_refine_maximum_2d ()" link="libgwyddion-Math.html#gwy-math-refine-maximum-2d" since="2.49"/>
<keyword type="function" name="gwy_math_refine_maximum ()" link="libgwyddion-Math.html#gwy-math-refine-maximum" since="2.42"/>
+ <keyword type="function" name="gwy_check_regular_2d_grid ()" link="libgwyddion-Math.html#gwy-check-regular-2d-grid" since="2.48"/>
<keyword type="function" name="gwy_math_median ()" link="libgwyddion-Math.html#gwy-math-median"/>
<keyword type="function" name="gwy_math_sort ()" link="libgwyddion-Math.html#gwy-math-sort"/>
<keyword type="function" name="gwy_math_median_uncertainty ()" link="libgwyddion-Math.html#gwy-math-median-uncertainty"/>
<keyword type="function" name="gwy_xlnx_int ()" link="libgwyddion-Math.html#gwy-xlnx-int" since="2.44"/>
+ <keyword type="function" name="gwy_math_histogram ()" link="libgwyddion-Math.html#gwy-math-histogram" since="2.49"/>
<keyword type="macro" name="GWY_SQRT3" link="libgwyddion-Math.html#GWY-SQRT3:CAPS"/>
<keyword type="macro" name="GWY_SQRT_PI" link="libgwyddion-Math.html#GWY-SQRT-PI:CAPS"/>
<keyword type="function" name="gwy_math_fallback_pow10 ()" link="libgwyddion-Math-Fallback.html#gwy-math-fallback-pow10" since="2.9"/>
@@ -288,6 +295,7 @@
<keyword type="function" name="gwy_si_unit_nth_root ()" link="GwySIUnit.html#gwy-si-unit-nth-root" since="2.5"/>
<keyword type="function" name="gwy_si_unit_power_multiply ()" link="GwySIUnit.html#gwy-si-unit-power-multiply" since="2.4"/>
<keyword type="function" name="gwy_si_unit_equal ()" link="GwySIUnit.html#gwy-si-unit-equal"/>
+ <keyword type="function" name="gwy_si_unit_equal_string ()" link="GwySIUnit.html#gwy-si-unit-equal-string" since="2.49"/>
<keyword type="function" name="gwy_si_unit_get_format ()" link="GwySIUnit.html#gwy-si-unit-get-format"/>
<keyword type="function" name="gwy_si_unit_get_format_for_power10 ()" link="GwySIUnit.html#gwy-si-unit-get-format-for-power10"/>
<keyword type="function" name="gwy_si_unit_get_format_with_resolution ()" link="GwySIUnit.html#gwy-si-unit-get-format-with-resolution"/>
@@ -327,6 +335,7 @@
<keyword type="function" name="gwy_convert_raw_data ()" link="libgwyddion-gwyutils.html#gwy-convert-raw-data" since="2.25"/>
<keyword type="function" name="gwy_raw_data_size ()" link="libgwyddion-gwyutils.html#gwy-raw-data-size" since="2.25"/>
<keyword type="function" name="gwy_object_set_or_reset ()" link="libgwyddion-gwyutils.html#gwy-object-set-or-reset"/>
+ <keyword type="function" name="gwy_set_member_object ()" link="libgwyddion-gwyutils.html#gwy-set-member-object" since="2.49"/>
<keyword type="function" name="gwy_fopen ()" link="libgwyddion-gwyutils.html#gwy-fopen" since="2.43"/>
<keyword type="function" name="gwy_fprintf ()" link="libgwyddion-gwyutils.html#gwy-fprintf" since="2.43"/>
<keyword type="enum" name="enum GwyRawDataType" link="libgwyddion-gwyutils.html#GwyRawDataType" since="2.25"/>
diff --git a/devel-docs/libgwyddion/libgwyddion-docs.sgml b/devel-docs/libgwyddion/libgwyddion-docs.sgml
index e88c7cd..056f292 100644
--- a/devel-docs/libgwyddion/libgwyddion-docs.sgml
+++ b/devel-docs/libgwyddion/libgwyddion-docs.sgml
@@ -39,97 +39,105 @@
<title>Index of all symbols</title>
<xi:include href="xml/api-index-full.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-deprec" role="deprecated">
+ <index id="api-index-deprec">
<title>Index of deprecated symbols</title>
<xi:include href="xml/api-index-deprecated.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-1" role="2.1">
+ <index id="api-index-2-1">
<title>Index of new symbols in 2.1</title>
<xi:include href="xml/api-index-2.1.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-4" role="2.4">
+ <index id="api-index-2-4">
<title>Index of new symbols in 2.4</title>
<xi:include href="xml/api-index-2.4.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-5" role="2.5">
+ <index id="api-index-2-5">
<title>Index of new symbols in 2.5</title>
<xi:include href="xml/api-index-2.5.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-7" role="2.7">
+ <index id="api-index-2-7">
<title>Index of new symbols in 2.7</title>
<xi:include href="xml/api-index-2.7.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-8" role="2.8">
+ <index id="api-index-2-8">
<title>Index of new symbols in 2.8</title>
<xi:include href="xml/api-index-2.8.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-9" role="2.9">
+ <index id="api-index-2-9">
<title>Index of new symbols in 2.9</title>
<xi:include href="xml/api-index-2.9.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-11" role="2.11">
+ <index id="api-index-2-11">
<title>Index of new symbols in 2.11</title>
<xi:include href="xml/api-index-2.11.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-12" role="2.12">
+ <index id="api-index-2-12">
<title>Index of new symbols in 2.12</title>
<xi:include href="xml/api-index-2.12.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-22" role="2.22">
+ <index id="api-index-2-22">
<title>Index of new symbols in 2.22</title>
<xi:include href="xml/api-index-2.22.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-25" role="2.25">
+ <index id="api-index-2-25">
<title>Index of new symbols in 2.25</title>
<xi:include href="xml/api-index-2.25.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-26" role="2.26">
+ <index id="api-index-2-26">
<title>Index of new symbols in 2.26</title>
<xi:include href="xml/api-index-2.26.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-35" role="2.35">
+ <index id="api-index-2-35">
<title>Index of new symbols in 2.35</title>
<xi:include href="xml/api-index-2.35.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-36" role="2.36">
+ <index id="api-index-2-36">
<title>Index of new symbols in 2.36</title>
<xi:include href="xml/api-index-2.36.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-37" role="2.37">
+ <index id="api-index-2-37">
<title>Index of new symbols in 2.37</title>
<xi:include href="xml/api-index-2.37.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-38" role="2.38">
+ <index id="api-index-2-38">
<title>Index of new symbols in 2.38</title>
<xi:include href="xml/api-index-2.38.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-39" role="2.39">
+ <index id="api-index-2-39">
<title>Index of new symbols in 2.39</title>
<xi:include href="xml/api-index-2.39.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-42" role="2.42">
+ <index id="api-index-2-42">
<title>Index of new symbols in 2.42</title>
<xi:include href="xml/api-index-2.42.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-43" role="2.43">
+ <index id="api-index-2-43">
<title>Index of new symbols in 2.43</title>
<xi:include href="xml/api-index-2.43.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-44" role="2.44">
+ <index id="api-index-2-44">
<title>Index of new symbols in 2.44</title>
<xi:include href="xml/api-index-2.44.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-45" role="2.45">
+ <index id="api-index-2-45">
<title>Index of new symbols in 2.45</title>
<xi:include href="xml/api-index-2.45.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-46" role="2.46">
+ <index id="api-index-2-46">
<title>Index of new symbols in 2.46</title>
<xi:include href="xml/api-index-2.46.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-47" role="2.47">
+ <index id="api-index-2-47">
<title>Index of new symbols in 2.47</title>
<xi:include href="xml/api-index-2.47.xml"><xi:fallback /></xi:include>
</index>
+ <index id="api-index-2-48">
+ <title>Index of new symbols in 2.48</title>
+ <xi:include href="xml/api-index-2.48.xml"><xi:fallback /></xi:include>
+ </index>
+ <index id="api-index-2-49">
+ <title>Index of new symbols in 2.49</title>
+ <xi:include href="xml/api-index-2.49.xml"><xi:fallback /></xi:include>
+ </index>
<!-- API INDICES END -->
</book>
diff --git a/devel-docs/libgwydgets/Makefile.in b/devel-docs/libgwydgets/Makefile.in
index dea81c0..9c9836f 100644
--- a/devel-docs/libgwydgets/Makefile.in
+++ b/devel-docs/libgwydgets/Makefile.in
@@ -178,10 +178,7 @@ EPYDOC = @EPYDOC@
EXEEXT = @EXEEXT@
EXR_CFLAGS = @EXR_CFLAGS@
EXR_LIBS = @EXR_LIBS@
-FFTW3_1_CFLAGS = @FFTW3_1_CFLAGS@
-FFTW3_1_LIBS = @FFTW3_1_LIBS@
FFTW3_CFLAGS = @FFTW3_CFLAGS@
-FFTW3_DEPENDENCY = @FFTW3_DEPENDENCY@
FFTW3_LIBS = @FFTW3_LIBS@
FGREP = @FGREP@
GCONFTOOL = @GCONFTOOL@
@@ -191,6 +188,8 @@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
GLIBC21 = @GLIBC21@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GMODULE_CFLAGS = @GMODULE_CFLAGS@
GMODULE_LIBS = @GMODULE_LIBS@
GMSGFMT = @GMSGFMT@
@@ -215,7 +214,9 @@ GTK_MAC_LIBS = @GTK_MAC_LIBS@
GWY_VERSION_MAJOR = @GWY_VERSION_MAJOR@
GWY_VERSION_MINOR = @GWY_VERSION_MINOR@
GWY_VERSION_STRING = @GWY_VERSION_STRING@
+HDRIMAGE_EXTRA_CFLAGS = @HDRIMAGE_EXTRA_CFLAGS@
HTML_DIR = @HTML_DIR@
+INKSCAPE = @INKSCAPE@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -273,6 +274,7 @@ PASCAL = @PASCAL@
PATH_SEPARATOR = @PATH_SEPARATOR@
PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
+PNGCRUSH = @PNGCRUSH@
PNG_CFLAGS = @PNG_CFLAGS@
PNG_LIBS = @PNG_LIBS@
POD2MAN = @POD2MAN@
@@ -281,17 +283,13 @@ PYGTK_CFLAGS = @PYGTK_CFLAGS@
PYGTK_CODEGENDIR = @PYGTK_CODEGENDIR@
PYGTK_LIBS = @PYGTK_LIBS@
PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
PYTHON_EXTRA_CFLAGS = @PYTHON_EXTRA_CFLAGS@
PYTHON_INCLUDES = @PYTHON_INCLUDES@
-PYTHON_LIBS = @PYTHON_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
PYTHON_PLATFORM = @PYTHON_PLATFORM@
PYTHON_PREFIX = @PYTHON_PREFIX@
-PYTHON_SYSCFG_BASECFLAGS = @PYTHON_SYSCFG_BASECFLAGS@
-PYTHON_SYSCFG_CCSHARED = @PYTHON_SYSCFG_CCSHARED@
-PYTHON_SYSCFG_LDFLAGS = @PYTHON_SYSCFG_LDFLAGS@
-PYTHON_SYSCFG_LIBDIR = @PYTHON_SYSCFG_LIBDIR@
-PYTHON_SYSCFG_LINKFORSHARED = @PYTHON_SYSCFG_LINKFORSHARED@
PYTHON_VERSION = @PYTHON_VERSION@
RANLIB = @RANLIB@
RUBY = @RUBY@
diff --git a/devel-docs/libgwydgets/html/DataWindowWidgets.html b/devel-docs/libgwydgets/html/DataWindowWidgets.html
index ecf50ce..0df4df0 100644
--- a/devel-docs/libgwydgets/html/DataWindowWidgets.html
+++ b/devel-docs/libgwydgets/html/DataWindowWidgets.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Data Windows and Views: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="prev" href="index.html" title="Gwyddion Widgets Library Reference Manual">
diff --git a/devel-docs/libgwydgets/html/GeneralWidgets.html b/devel-docs/libgwydgets/html/GeneralWidgets.html
index 32f5cb6..3f66128 100644
--- a/devel-docs/libgwydgets/html/GeneralWidgets.html
+++ b/devel-docs/libgwydgets/html/GeneralWidgets.html
@@ -3,11 +3,11 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>General Widgets: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="prev" href="Gwy3DLabel.html" title="Gwy3DLabel">
-<link rel="next" href="GwyColorButton.html" title="GwyColorButton">
+<link rel="next" href="GwyAdjustBar.html" title="GwyAdjustBar">
<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
@@ -17,13 +17,16 @@
<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
<td><img src="up-insensitive.png" width="16" height="16" border="0"></td>
<td><a accesskey="p" href="Gwy3DLabel.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="GwyColorButton.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+<td><a accesskey="n" href="GwyAdjustBar.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
</tr></table>
<div class="chapter">
<div class="titlepage"><div><div><h1 class="title">
<a name="GeneralWidgets"></a>General Widgets</h1></div></div></div>
<div class="toc"><dl class="toc">
<dt>
+<span class="refentrytitle"><a href="GwyAdjustBar.html">GwyAdjustBar</a></span><span class="refpurpose"> — Compact adjustment visualisation and modification</span>
+</dt>
+<dt>
<span class="refentrytitle"><a href="GwyColorButton.html">GwyColorButton</a></span><span class="refpurpose"> — A color displaying button</span>
</dt>
<dt>
diff --git a/devel-docs/libgwydgets/html/GraphWidgets.html b/devel-docs/libgwydgets/html/GraphWidgets.html
index 5c866dd..b8b3d6f 100644
--- a/devel-docs/libgwydgets/html/GraphWidgets.html
+++ b/devel-docs/libgwydgets/html/GraphWidgets.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Graphs: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="prev" href="standard-vector-layers.html" title="Standard Vector Layers">
diff --git a/devel-docs/libgwydgets/html/Gwy3DLabel.html b/devel-docs/libgwydgets/html/Gwy3DLabel.html
index a13a6ac..78e5b72 100644
--- a/devel-docs/libgwydgets/html/Gwy3DLabel.html
+++ b/devel-docs/libgwydgets/html/Gwy3DLabel.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Gwy3DLabel: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="Widgets3D.html" title="3D Widgets">
<link rel="prev" href="Gwy3DSetup.html" title="Gwy3DSetup">
@@ -36,7 +36,7 @@
</tr></table></div>
<div class="refsect1">
<a name="Gwy3DLabel.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -102,7 +102,7 @@
</div>
<div class="refsect1">
<a name="Gwy3DLabel.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
<colgroup>
<col width="150px" class="properties_type">
<col width="300px" class="properties_name">
@@ -151,7 +151,7 @@
</div>
<div class="refsect1">
<a name="Gwy3DLabel.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -197,7 +197,7 @@ gwy_3d_label_new (<em class="parameter"><code>const <a href="http://developer.gn
<p>Creates a new 3D view label.</p>
<div class="refsect3">
<a name="gwy-3d-label-new.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -224,7 +224,7 @@ gwy_3d_label_set_text (<em class="parameter"><code><a class="link" href="Gwy3DLa
<p>Sets the text of a 3D label.</p>
<div class="refsect3">
<a name="gwy-3d-label-set-text.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -253,7 +253,7 @@ gwy_3d_label_get_text (<em class="parameter"><code><a class="link" href="Gwy3DLa
<p>Gets the text of a 3D label.</p>
<div class="refsect3">
<a name="gwy-3d-label-get-text.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -281,7 +281,7 @@ gwy_3d_label_expand_text (<em class="parameter"><code><a class="link" href="Gwy3
<p>Substitutes variables in label text.</p>
<div class="refsect3">
<a name="gwy-3d-label-expand-text.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -316,7 +316,7 @@ gwy_3d_label_reset (<em class="parameter"><code><a class="link" href="Gwy3DLabel
<p>Resets all 3D label properties and text to default values.</p>
<div class="refsect3">
<a name="gwy-3d-label-reset.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -338,7 +338,7 @@ gwy_3d_label_reset_text (<em class="parameter"><code><a class="link" href="Gwy3D
<p>Resets 3D label text to default values.</p>
<div class="refsect3">
<a name="gwy-3d-label-reset-text.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -364,7 +364,7 @@ Otherwise label size is changed and <em class="parameter"><code>user_size</code>
itself is returned.</p>
<div class="refsect3">
<a name="gwy-3d-label-user-size.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwydgets/html/Gwy3DSetup.html b/devel-docs/libgwydgets/html/Gwy3DSetup.html
index 7b90aec..8b6f3ca 100644
--- a/devel-docs/libgwydgets/html/Gwy3DSetup.html
+++ b/devel-docs/libgwydgets/html/Gwy3DSetup.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Gwy3DSetup: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="Widgets3D.html" title="3D Widgets">
<link rel="prev" href="Gwy3DWindow.html" title="Gwy3DWindow">
@@ -36,7 +36,7 @@
</tr></table></div>
<div class="refsect1">
<a name="Gwy3DSetup.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -53,7 +53,7 @@
</div>
<div class="refsect1">
<a name="Gwy3DSetup.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
<colgroup>
<col width="150px" class="properties_type">
<col width="300px" class="properties_name">
@@ -67,10 +67,25 @@
</tr>
<tr>
<td class="property_type"><a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
+<td class="property_name"><a class="link" href="Gwy3DSetup.html#Gwy3DSetup--fmscale-reserve-space" title="The “fmscale-reserve-space” property">fmscale-reserve-space</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a></td>
+<td class="property_name"><a class="link" href="Gwy3DSetup.html#Gwy3DSetup--fmscale-size" title="The “fmscale-size” property">fmscale-size</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
<td class="property_name"><a class="link" href="Gwy3DSetup.html#Gwy3DSetup--fmscale-visible" title="The “fmscale-visible” property">fmscale-visible</a></td>
<td class="property_flags">Read / Write</td>
</tr>
<tr>
+<td class="property_type"><a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a></td>
+<td class="property_name"><a class="link" href="Gwy3DSetup.html#Gwy3DSetup--fmscale-y-align" title="The “fmscale-y-align” property">fmscale-y-align</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
<td class="property_type"><a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
<td class="property_name"><a class="link" href="Gwy3DSetup.html#Gwy3DSetup--hide-masked" title="The “hide-masked” property">hide-masked</a></td>
<td class="property_flags">Read / Write</td>
@@ -130,7 +145,7 @@
</div>
<div class="refsect1">
<a name="Gwy3DSetup.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -169,7 +184,7 @@ Gwy3DSetup implements
<p><a class="link" href="Gwy3DSetup.html" title="Gwy3DSetup"><span class="type">Gwy3DSetup</span></a> represents a basic 3D scene setup: viewpoint, projection, light,
scale, etc. It is serializable and used to represent the <a class="link" href="Gwy3DView.html" title="Gwy3DView"><span class="type">Gwy3DView</span></a> setup.</p>
<p>Its components can be read directly in the struct or generically with
-<a href="http://developer.gnome.org/doc/API/2.0/gtk/gobjectgobject-The-Base-Object-Type.html#g-object-get"><code class="function">g_object_get()</code></a>. To set them you it is necessary to use <a href="http://developer.gnome.org/doc/API/2.0/gtk/gobjectgobject-The-Base-Object-Type.html#g-object-set"><code class="function">g_object_set()</code></a>.</p>
+<a href="http://developer.gnome.org/doc/API/2.0/gtk/gobjectgobject-The-Base-Object-Type.html#g-object-get"><code class="function">g_object_get()</code></a>. To set them you it is necessary to use <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#g-object-set"><code class="function">g_object_set()</code></a>.</p>
</div>
<div class="refsect1">
<a name="Gwy3DSetup.functions_details"></a><h2>Functions</h2>
@@ -206,21 +221,50 @@ gwy_3d_setup_new (<em class="parameter"><code><span class="type">void</span></co
<a name="Gwy3DSetup.property-details"></a><h2>Property Details</h2>
<div class="refsect2">
<a name="Gwy3DSetup--axes-visible"></a><h3>The <code class="literal">“axes-visible”</code> property</h3>
-<pre class="programlisting"> “axes-visible” <a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
+<pre class="programlisting"> “axes-visible” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
<p>Whether axes are visible.</p>
<p>Flags: Read / Write</p>
<p>Default value: TRUE</p>
</div>
<hr>
<div class="refsect2">
+<a name="Gwy3DSetup--fmscale-reserve-space"></a><h3>The <code class="literal">“fmscale-reserve-space”</code> property</h3>
+<pre class="programlisting"> “fmscale-reserve-space” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
+<p>Whethere to reserve entire vertical stripe of the false colour scale.</p>
+<p>Flags: Read / Write</p>
+<p>Default value: TRUE</p>
+<p class="since">Since: <a class="link" href="api-index-2-49.html#api-index-2.49">2.49</a></p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="Gwy3DSetup--fmscale-size"></a><h3>The <code class="literal">“fmscale-size”</code> property</h3>
+<pre class="programlisting"> “fmscale-size” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a></pre>
+<p>Size of false colour scale relative to view height.</p>
+<p>Flags: Read / Write</p>
+<p>Allowed values: [0,1]</p>
+<p>Default value: 1</p>
+<p class="since">Since: <a class="link" href="api-index-2-49.html#api-index-2.49">2.49</a></p>
+</div>
+<hr>
+<div class="refsect2">
<a name="Gwy3DSetup--fmscale-visible"></a><h3>The <code class="literal">“fmscale-visible”</code> property</h3>
-<pre class="programlisting"> “fmscale-visible” <a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
-<p>Whether false color bar is visible .</p>
+<pre class="programlisting"> “fmscale-visible” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
+<p>Whether false color bar is visible.</p>
<p>Flags: Read / Write</p>
<p>Default value: FALSE</p>
</div>
<hr>
<div class="refsect2">
+<a name="Gwy3DSetup--fmscale-y-align"></a><h3>The <code class="literal">“fmscale-y-align”</code> property</h3>
+<pre class="programlisting"> “fmscale-y-align” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a></pre>
+<p>Vertical alignment of false colour scale.</p>
+<p>Flags: Read / Write</p>
+<p>Allowed values: [0,1]</p>
+<p>Default value: 0.5</p>
+<p class="since">Since: <a class="link" href="api-index-2-49.html#api-index-2.49">2.49</a></p>
+</div>
+<hr>
+<div class="refsect2">
<a name="Gwy3DSetup--hide-masked"></a><h3>The <code class="literal">“hide-masked”</code> property</h3>
<pre class="programlisting"> “hide-masked” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
<p>Hide masked vertices.</p>
diff --git a/devel-docs/libgwydgets/html/Gwy3DView.html b/devel-docs/libgwydgets/html/Gwy3DView.html
index ca4aab9..93547b1 100644
--- a/devel-docs/libgwydgets/html/Gwy3DView.html
+++ b/devel-docs/libgwydgets/html/Gwy3DView.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Gwy3DView: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="Widgets3D.html" title="3D Widgets">
<link rel="prev" href="Widgets3D.html" title="3D Widgets">
@@ -36,7 +36,7 @@
</tr></table></div>
<div class="refsect1">
<a name="Gwy3DView.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -226,7 +226,7 @@
</div>
<div class="refsect1">
<a name="Gwy3DView.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
<colgroup>
<col width="150px" class="properties_type">
<col width="300px" class="properties_name">
@@ -278,7 +278,7 @@
</div>
<div class="refsect1">
<a name="Gwy3DView.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -345,7 +345,7 @@ gwy_3d_view_new (<em class="parameter"><code><a href="../GwyContainer.html#GwyCo
.</p>
<div class="refsect3">
<a name="gwy-3d-view-new.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -371,7 +371,7 @@ gwy_3d_view_get_setup_prefix (<em class="parameter"><code><a class="link" href="
<p>Gets prefix identifying 3D view setup in the container.</p>
<div class="refsect3">
<a name="gwy-3d-view-get-setup-prefix.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -398,7 +398,7 @@ gwy_3d_view_set_setup_prefix (<em class="parameter"><code><a class="link" href="
<p>Sets the prefix of 3D view parameters in the container.</p>
<div class="refsect3">
<a name="gwy-3d-view-set-setup-prefix.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -430,7 +430,7 @@ gwy_3d_view_get_data_key (<em class="parameter"><code><a class="link" href="Gwy3
<p>Gets the container key identifying the data field to visualize in a 3D view.</p>
<div class="refsect3">
<a name="gwy-3d-view-get-data-key.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -457,7 +457,7 @@ gwy_3d_view_set_data_key (<em class="parameter"><code><a class="link" href="Gwy3
<p>Sets the container key identifying the data field to visualize in a 3D view.</p>
<div class="refsect3">
<a name="gwy-3d-view-set-data-key.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -488,7 +488,7 @@ gwy_3d_view_set_ovlay (<em class="parameter"><code><a class="link" href="Gwy3DVi
<p>Sets overlays for a 3D view.</p>
<div class="refsect3">
<a name="gwy-3d-view-set-ovlay.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -526,7 +526,7 @@ gwy_3d_view_get_gradient_key (<em class="parameter"><code><a class="link" href="
data in a 3D view.</p>
<div class="refsect3">
<a name="gwy-3d-view-get-gradient-key.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -554,7 +554,7 @@ gwy_3d_view_set_gradient_key (<em class="parameter"><code><a class="link" href="
data in a 3D view.</p>
<div class="refsect3">
<a name="gwy-3d-view-set-gradient-key.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -585,7 +585,7 @@ gwy_3d_view_get_material_key (<em class="parameter"><code><a class="link" href="
view.</p>
<div class="refsect3">
<a name="gwy-3d-view-get-material-key.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -613,7 +613,7 @@ gwy_3d_view_set_material_key (<em class="parameter"><code><a class="link" href="
view.</p>
<div class="refsect3">
<a name="gwy-3d-view-set-material-key.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -644,7 +644,7 @@ gwy_3d_view_get_reduced_size (<em class="parameter"><code><a class="link" href="
<p>See <a class="link" href="Gwy3DView.html#gwy-3d-view-set-reduced-size" title="gwy_3d_view_set_reduced_size ()"><code class="function">gwy_3d_view_set_reduced_size()</code></a> for details.</p>
<div class="refsect3">
<a name="gwy-3d-view-get-reduced-size.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -685,7 +685,7 @@ downsampling.</p>
does not downsample anything.</p>
<div class="refsect3">
<a name="gwy-3d-view-set-reduced-size.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -715,7 +715,7 @@ gwy_3d_view_get_movement_type (<em class="parameter"><code><a class="link" href=
the mouse motion event.</p>
<div class="refsect3">
<a name="gwy-3d-view-get-movement-type.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -742,7 +742,7 @@ gwy_3d_view_set_movement_type (<em class="parameter"><code><a class="link" href=
<p>Sets the type of widget response on the mouse motion event.</p>
<div class="refsect3">
<a name="gwy-3d-view-set-movement-type.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -775,7 +775,7 @@ gwy_3d_view_get_pixbuf (<em class="parameter"><code><a class="link" href="Gwy3DV
will be implemented to set the resolution of the pixbuf.</p>
<div class="refsect3">
<a name="gwy-3d-view-get-pixbuf.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -804,7 +804,7 @@ gwy_3d_view_get_label (<em class="parameter"><code><a class="link" href="Gwy3DVi
object from the data container.</p>
<div class="refsect3">
<a name="gwy-3d-view-get-label.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -841,7 +841,7 @@ gwy_3d_view_get_setup (<em class="parameter"><code><a class="link" href="Gwy3DVi
object from the data container.</p>
<div class="refsect3">
<a name="gwy-3d-view-get-setup.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -867,7 +867,7 @@ gwy_3d_view_get_data (<em class="parameter"><code><a class="link" href="Gwy3DVie
<p>Returns the data container this 3D view displays.</p>
<div class="refsect3">
<a name="gwy-3d-view-get-data.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -895,7 +895,7 @@ gwy_3d_view_get_scale_range (<em class="parameter"><code><a class="link" href="G
<p>Obtains the minimum and maximum zoom of a 3D data view</p>
<div class="refsect3">
<a name="gwy-3d-view-get-scale-range.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -932,7 +932,7 @@ gwy_3d_view_set_scale_range (<em class="parameter"><code><a class="link" href="G
<p>Recommended zoom values are 0.5 - 5.0.</p>
<div class="refsect3">
<a name="gwy-3d-view-set-scale-range.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -973,7 +973,7 @@ their rendering depends on the 3D view setup.</p>
that crash on pixmap drawing operations.</p>
<div class="refsect3">
<a name="gwy-3d-view-class-disable-axis-drawing.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -997,7 +997,7 @@ gwy_3d_view_get_mask_key (<em class="parameter"><code><a class="link" href="Gwy3
visualisation in a 3D view.</p>
<div class="refsect3">
<a name="gwy-3d-view-get-mask-key.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1025,7 +1025,7 @@ gwy_3d_view_set_mask_key (<em class="parameter"><code><a class="link" href="Gwy3
visualisation in a 3D view.</p>
<div class="refsect3">
<a name="gwy-3d-view-set-mask-key.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwydgets/html/Gwy3DWindow.html b/devel-docs/libgwydgets/html/Gwy3DWindow.html
index 4e6babb..6b5e690 100644
--- a/devel-docs/libgwydgets/html/Gwy3DWindow.html
+++ b/devel-docs/libgwydgets/html/Gwy3DWindow.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Gwy3DWindow: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="Widgets3D.html" title="3D Widgets">
<link rel="prev" href="Gwy3DView.html" title="Gwy3DView">
@@ -35,7 +35,7 @@
</tr></table></div>
<div class="refsect1">
<a name="Gwy3DWindow.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -102,7 +102,7 @@
</div>
<div class="refsect1">
<a name="Gwy3DWindow.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -158,7 +158,7 @@ gwy_3d_window_new (<em class="parameter"><code><a class="link" href="Gwy3DView.h
<p>Creates a new OpenGL 3D data displaying window.</p>
<div class="refsect3">
<a name="gwy-3d-window-new.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -184,7 +184,7 @@ gwy_3d_window_get_3d_view (<em class="parameter"><code><a class="link" href="Gwy
<p>Returns the <a class="link" href="Gwy3DView.html" title="Gwy3DView"><span class="type">Gwy3DView</span></a> widget this 3D window currently shows.</p>
<div class="refsect3">
<a name="gwy-3d-window-get-3d-view.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -212,7 +212,7 @@ gwy_3d_window_add_action_widget (<em class="parameter"><code><a class="link" hre
<p>The action area is located under the parameter notebook.</p>
<div class="refsect3">
<a name="gwy-3d-window-add-action-widget.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -249,7 +249,7 @@ gwy_3d_window_add_small_toolbar_button
space constraints the button must be contain only a pixmap.</p>
<div class="refsect3">
<a name="gwy-3d-window-add-small-toolbar-button.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -303,7 +303,7 @@ caller will set up the layer and call <a class="link" href="Gwy3DView.html#gwy-3
upon selection of data in the chooser.</p>
<div class="refsect3">
<a name="gwy-3d-window-set-overlay-chooser.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -339,7 +339,7 @@ the class instantiates one on its own. You can normally obtain it with
the tooltips in either case.</p>
<div class="refsect3">
<a name="gwy-3d-window-class-set-tooltips.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwydgets/html/GwyAdjustBar.html b/devel-docs/libgwydgets/html/GwyAdjustBar.html
new file mode 100644
index 0000000..3651633
--- /dev/null
+++ b/devel-docs/libgwydgets/html/GwyAdjustBar.html
@@ -0,0 +1,815 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>GwyAdjustBar: Gwyddion Widgets Library Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
+<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
+<link rel="up" href="GeneralWidgets.html" title="General Widgets">
+<link rel="prev" href="GeneralWidgets.html" title="General Widgets">
+<link rel="next" href="GwyColorButton.html" title="GwyColorButton">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts">
+<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
+ <a href="#GwyAdjustBar.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span>
+ <a href="#GwyAdjustBar.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_interfaces"> <span class="dim">|</span>
+ <a href="#GwyAdjustBar.implemented-interfaces" class="shortcut">Implemented Interfaces</a></span><span id="nav_properties"> <span class="dim">|</span>
+ <a href="#GwyAdjustBar.properties" class="shortcut">Properties</a></span><span id="nav_signals"> <span class="dim">|</span>
+ <a href="#GwyAdjustBar.signals" class="shortcut">Signals</a></span>
+</td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><a accesskey="u" href="GeneralWidgets.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="GeneralWidgets.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="GwyColorButton.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="GwyAdjustBar"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="GwyAdjustBar.top_of_page"></a>GwyAdjustBar</span></h2>
+<p>GwyAdjustBar — Compact adjustment visualisation and modification</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="GwyAdjustBar.functions"></a><h2>Functions</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="functions_return">
+<col class="functions_name">
+</colgroup>
+<tbody>
+<tr>
+<td class="function_type">
+<a href="http://developer.gnome.org/doc/API/2.0/gtk/gtk3GtkWidget.html#GtkWidget-struct"><span class="returnvalue">GtkWidget</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="GwyAdjustBar.html#gwy-adjust-bar-new" title="gwy_adjust_bar_new ()">gwy_adjust_bar_new</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="GwyAdjustBar.html#gwy-adjust-bar-set-adjustment" title="gwy_adjust_bar_set_adjustment ()">gwy_adjust_bar_set_adjustment</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="http://developer.gnome.org/doc/API/2.0/gtk/gtk3GtkAdjustment.html#GtkAdjustment-struct"><span class="returnvalue">GtkAdjustment</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="GwyAdjustBar.html#gwy-adjust-bar-get-adjustment" title="gwy_adjust_bar_get_adjustment ()">gwy_adjust_bar_get_adjustment</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="GwyAdjustBar.html#gwy-adjust-bar-set-snap-to-ticks" title="gwy_adjust_bar_set_snap_to_ticks ()">gwy_adjust_bar_set_snap_to_ticks</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="GwyAdjustBar.html#gwy-adjust-bar-get-snap-to-ticks" title="gwy_adjust_bar_get_snap_to_ticks ()">gwy_adjust_bar_get_snap_to_ticks</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="GwyAdjustBar.html#gwy-adjust-bar-set-mapping" title="gwy_adjust_bar_set_mapping ()">gwy_adjust_bar_set_mapping</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="GwyAdjustBar.html#GwyScaleMappingType" title="enum GwyScaleMappingType"><span class="returnvalue">GwyScaleMappingType</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="GwyAdjustBar.html#gwy-adjust-bar-get-mapping" title="gwy_adjust_bar_get_mapping ()">gwy_adjust_bar_get_mapping</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="GwyAdjustBar.html#gwy-adjust-bar-set-has-check-button" title="gwy_adjust_bar_set_has_check_button ()">gwy_adjust_bar_set_has_check_button</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="GwyAdjustBar.html#gwy-adjust-bar-get-has-check-button" title="gwy_adjust_bar_get_has_check_button ()">gwy_adjust_bar_get_has_check_button</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="GwyAdjustBar.html#gwy-adjust-bar-set-bar-sensitive" title="gwy_adjust_bar_set_bar_sensitive ()">gwy_adjust_bar_set_bar_sensitive</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="GwyAdjustBar.html#gwy-adjust-bar-get-bar-sensitive" title="gwy_adjust_bar_get_bar_sensitive ()">gwy_adjust_bar_get_bar_sensitive</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="http://developer.gnome.org/doc/API/2.0/gtk/gtk3GtkWidget.html#GtkWidget-struct"><span class="returnvalue">GtkWidget</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="GwyAdjustBar.html#gwy-adjust-bar-get-label" title="gwy_adjust_bar_get_label ()">gwy_adjust_bar_get_label</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="http://developer.gnome.org/doc/API/2.0/gtk/gtk3GtkWidget.html#GtkWidget-struct"><span class="returnvalue">GtkWidget</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="GwyAdjustBar.html#gwy-adjust-bar-get-check-button" title="gwy_adjust_bar_get_check_button ()">gwy_adjust_bar_get_check_button</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="GwyAdjustBar.properties"></a><h2>Properties</h2>
+<div class="informaltable"><table class="informaltable" border="0">
+<colgroup>
+<col width="150px" class="properties_type">
+<col width="300px" class="properties_name">
+<col width="200px" class="properties_flags">
+</colgroup>
+<tbody>
+<tr>
+<td class="property_type">
+<a href="http://developer.gnome.org/doc/API/2.0/gtk/gtk3GtkAdjustment.html#GtkAdjustment-struct"><span class="type">GtkAdjustment</span></a> *</td>
+<td class="property_name"><a class="link" href="GwyAdjustBar.html#GwyAdjustBar--adjustment" title="The “adjustment” property">adjustment</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
+<td class="property_name"><a class="link" href="GwyAdjustBar.html#GwyAdjustBar--has-check-button" title="The “has-check-button” property">has-check-button</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a class="link" href="GwyAdjustBar.html#GwyScaleMappingType" title="enum GwyScaleMappingType"><span class="type">GwyScaleMappingType</span></a></td>
+<td class="property_name"><a class="link" href="GwyAdjustBar.html#GwyAdjustBar--mapping" title="The “mapping” property">mapping</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
+<td class="property_name"><a class="link" href="GwyAdjustBar.html#GwyAdjustBar--snap-to-ticks" title="The “snap-to-ticks” property">snap-to-ticks</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="GwyAdjustBar.signals"></a><h2>Signals</h2>
+<div class="informaltable"><table class="informaltable" border="0">
+<colgroup>
+<col width="150px" class="signals_return">
+<col width="300px" class="signals_name">
+<col width="200px" class="signals_flags">
+</colgroup>
+<tbody><tr>
+<td class="signal_type"><span class="returnvalue">void</span></td>
+<td class="signal_name"><a class="link" href="GwyAdjustBar.html#GwyAdjustBar-change-value" title="The “change-value” signal">change-value</a></td>
+<td class="signal_flags"><a href="http://developer.gnome.org/doc/API/2.0/gtk/gobjectgobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="GwyAdjustBar.other"></a><h2>Types and Values</h2>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="name">
+<col class="description">
+</colgroup>
+<tbody>
+<tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="GwyAdjustBar.html#GwyAdjustBar-struct" title="struct GwyAdjustBar">GwyAdjustBar</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="GwyAdjustBar.html#GwyAdjustBarClass" title="struct GwyAdjustBarClass">GwyAdjustBarClass</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="GwyAdjustBar.html#GwyScaleMappingType" title="enum GwyScaleMappingType">GwyScaleMappingType</a></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="GwyAdjustBar.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="screen"> <a href="http://developer.gnome.org/doc/API/2.0/gtk/gobjectgobject-The-Base-Object-Type.html#GObject-struct">GObject</a>
+ <span class="lineart">╰──</span> <a href="http://developer.gnome.org/doc/API/2.0/gtk/gobjectgobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+ <span class="lineart">╰──</span> <a href="http://developer.gnome.org/doc/API/2.0/gtk/gtk2GtkObject.html#GtkObject-struct">GtkObject</a>
+ <span class="lineart">╰──</span> <a href="http://developer.gnome.org/doc/API/2.0/gtk/gtk3GtkWidget.html#GtkWidget-struct">GtkWidget</a>
+ <span class="lineart">╰──</span> <a href="http://developer.gnome.org/doc/API/2.0/gtk/gtk3GtkContainer.html#GtkContainer-struct">GtkContainer</a>
+ <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gtk3GtkBin.html#GtkBin-struct">GtkBin</a>
+ <span class="lineart">╰──</span> GwyAdjustBar
+</pre>
+</div>
+<div class="refsect1">
+<a name="GwyAdjustBar.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
+<p>
+GwyAdjustBar implements
+ AtkImplementorIface and <a href="/usr/share/gtk-doc/html/gtk3GtkBuildable.html#GtkBuildable-struct">GtkBuildable</a>.</p>
+</div>
+<div class="refsect1">
+<a name="GwyAdjustBar.includes"></a><h2>Includes</h2>
+<pre class="synopsis">#include <libgwydgets/gwydgets.h>
+</pre>
+</div>
+<div class="refsect1">
+<a name="GwyAdjustBar.description"></a><h2>Description</h2>
+<p><a class="link" href="GwyAdjustBar.html" title="GwyAdjustBar"><span class="type">GwyAdjustBar</span></a> is a compact widget for visualisation and modification of the
+value of an <a href="/usr/share/gtk-doc/html/gtk3GtkAdjustment.html#GtkAdjustment-struct"><span class="type">GtkAdjustment</span></a>. It can contains a label with an overlaid bar
+that can be clicked, dragged or modified by the scroll-wheel by the user.
+Since the widget does not take keyboard focus, it should be paired with a
+<a href="/usr/share/gtk-doc/html/gtk3GtkSpinButton.html#GtkSpinButton-struct"><span class="type">GtkSpinButton</span></a>, sharing the same adjustment. This spin button would also be
+the typical mnemonic widget for the adjustment bar.</p>
+<p><a class="link" href="GwyAdjustBar.html" title="GwyAdjustBar"><span class="type">GwyAdjustBar</span></a> supports several different types of mapping between screen
+positions and values of the underlying adjustment. Nevertheless, the
+default mapping (signed square root, <a class="link" href="GwyAdjustBar.html#GWY-SCALE-MAPPING-SQRT:CAPS"><code class="literal">GWY_SCALE_MAPPING_SQRT</code></a>) should fit
+most situations.</p>
+</div>
+<div class="refsect1">
+<a name="GwyAdjustBar.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="gwy-adjust-bar-new"></a><h3>gwy_adjust_bar_new ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/gtk3GtkWidget.html#GtkWidget-struct"><span class="returnvalue">GtkWidget</span></a> *
+gwy_adjust_bar_new (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gtk3GtkAdjustment.html#GtkAdjustment-struct"><span class="type">GtkAdjustment</span></a> *adjustment</code></em>,
+ <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *label</code></em>);</pre>
+<p>Creates a new adjustment bar.</p>
+<p>The label text, if any, is set with mnemonic enabled. However, you still
+need to assign it to a widget (presumably a <a href="/usr/share/gtk-doc/html/gtk3GtkSpinButton.html#GtkSpinButton-struct"><span class="type">GtkSpinButton</span></a>) using
+<a href="/usr/share/gtk-doc/html/gtk3GtkLabel.html#gtk-label-set-mnemonic-widget"><code class="function">gtk_label_set_mnemonic_widget()</code></a>.</p>
+<div class="refsect3">
+<a name="gwy-adjust-bar-new.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>adjustment</p></td>
+<td class="parameter_description"><p>The adjustment the adjust bar should use, or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>label</p></td>
+<td class="parameter_description"><p>Text of the adjustment bar label, or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gwy-adjust-bar-new.returns"></a><h4>Returns</h4>
+<p> A new adjustment bar.</p>
+</div>
+<p class="since">Since: <a class="link" href="api-index-2-49.html#api-index-2.49">2.49</a></p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gwy-adjust-bar-set-adjustment"></a><h3>gwy_adjust_bar_set_adjustment ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gwy_adjust_bar_set_adjustment (<em class="parameter"><code><a class="link" href="GwyAdjustBar.html" title="GwyAdjustBar"><span class="type">GwyAdjustBar</span></a> *adjbar</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gtk3GtkAdjustment.html#GtkAdjustment-struct"><span class="type">GtkAdjustment</span></a> *adjustment</code></em>);</pre>
+<p>Sets the adjustment that an adjustment bar visualises.</p>
+<div class="refsect3">
+<a name="gwy-adjust-bar-set-adjustment.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>adjbar</p></td>
+<td class="parameter_description"><p>An adjustment bar.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>adjustment</p></td>
+<td class="parameter_description"><p>Adjustment to use for the value.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: <a class="link" href="api-index-2-49.html#api-index-2.49">2.49</a></p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gwy-adjust-bar-get-adjustment"></a><h3>gwy_adjust_bar_get_adjustment ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/gtk3GtkAdjustment.html#GtkAdjustment-struct"><span class="returnvalue">GtkAdjustment</span></a> *
+gwy_adjust_bar_get_adjustment (<em class="parameter"><code><a class="link" href="GwyAdjustBar.html" title="GwyAdjustBar"><span class="type">GwyAdjustBar</span></a> *adjbar</code></em>);</pre>
+<p>Obtains the adjustment that an adjustment bar visualises.</p>
+<div class="refsect3">
+<a name="gwy-adjust-bar-get-adjustment.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>adjbar</p></td>
+<td class="parameter_description"><p>An adjustment bar.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gwy-adjust-bar-get-adjustment.returns"></a><h4>Returns</h4>
+<p> The adjustment used by <em class="parameter"><code>adjbar</code></em>
+. If no adjustment was set
+and the default one is used, function returns <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.</p>
+</div>
+<p class="since">Since: <a class="link" href="api-index-2-49.html#api-index-2.49">2.49</a></p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gwy-adjust-bar-set-snap-to-ticks"></a><h3>gwy_adjust_bar_set_snap_to_ticks ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gwy_adjust_bar_set_snap_to_ticks (<em class="parameter"><code><a class="link" href="GwyAdjustBar.html" title="GwyAdjustBar"><span class="type">GwyAdjustBar</span></a> *adjbar</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> setting</code></em>);</pre>
+<p>Sets the snapping behaviour of an adjustment bar.</p>
+<p>Note the ‘multiples of step size’ condition in fact applies to the
+difference from the minimum value. The maximum adjustment value is always
+permissible, even if it does not satisfy this condition. Values modified by
+the user (i.e. emission of signal "change-value") are snapped, however,
+values set explicitly <a href="/usr/share/gtk-doc/html/gtk3GtkAdjustment.html#gtk-adjustment-set-value"><code class="function">gtk_adjustment_set_value()</code></a> are kept intact.</p>
+<p>Setting this option to <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> immediately causes an adjustment value change
+if it does not satisfy the condition.</p>
+<p>It is usually a poor idea to enable snapping for non-linear mappings.</p>
+<div class="refsect3">
+<a name="gwy-adjust-bar-set-snap-to-ticks.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>adjbar</p></td>
+<td class="parameter_description"><p>An adjustment bar.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>setting</p></td>
+<td class="parameter_description"><p><a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> to restrict values to multiples of step size,
+<a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> to permit any values.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: <a class="link" href="api-index-2-49.html#api-index-2.49">2.49</a></p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gwy-adjust-bar-get-snap-to-ticks"></a><h3>gwy_adjust_bar_get_snap_to_ticks ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gwy_adjust_bar_get_snap_to_ticks (<em class="parameter"><code><a class="link" href="GwyAdjustBar.html" title="GwyAdjustBar"><span class="type">GwyAdjustBar</span></a> *adjbar</code></em>);</pre>
+<p>Sets the snapping behaviour of an adjustment bar.</p>
+<div class="refsect3">
+<a name="gwy-adjust-bar-get-snap-to-ticks.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>adjbar</p></td>
+<td class="parameter_description"><p>An adjustment bar.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gwy-adjust-bar-get-snap-to-ticks.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if values are restricted to multiples of step size.</p>
+</div>
+<p class="since">Since: <a class="link" href="api-index-2-49.html#api-index-2.49">2.49</a></p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gwy-adjust-bar-set-mapping"></a><h3>gwy_adjust_bar_set_mapping ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gwy_adjust_bar_set_mapping (<em class="parameter"><code><a class="link" href="GwyAdjustBar.html" title="GwyAdjustBar"><span class="type">GwyAdjustBar</span></a> *adjbar</code></em>,
+ <em class="parameter"><code><a class="link" href="GwyAdjustBar.html#GwyScaleMappingType" title="enum GwyScaleMappingType"><span class="type">GwyScaleMappingType</span></a> mapping</code></em>);</pre>
+<p>Sets the mapping function type for an adjustment bar.</p>
+<div class="refsect3">
+<a name="gwy-adjust-bar-set-mapping.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>adjbar</p></td>
+<td class="parameter_description"><p>An adjustment bar.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>mapping</p></td>
+<td class="parameter_description"><p>Mapping function type between values and screen positions in the
+adjustment bar.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: <a class="link" href="api-index-2-49.html#api-index-2.49">2.49</a></p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gwy-adjust-bar-get-mapping"></a><h3>gwy_adjust_bar_get_mapping ()</h3>
+<pre class="programlisting"><a class="link" href="GwyAdjustBar.html#GwyScaleMappingType" title="enum GwyScaleMappingType"><span class="returnvalue">GwyScaleMappingType</span></a>
+gwy_adjust_bar_get_mapping (<em class="parameter"><code><a class="link" href="GwyAdjustBar.html" title="GwyAdjustBar"><span class="type">GwyAdjustBar</span></a> *adjbar</code></em>);</pre>
+<p>Gets the mapping function type of an adjustment bar.</p>
+<div class="refsect3">
+<a name="gwy-adjust-bar-get-mapping.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>adjbar</p></td>
+<td class="parameter_description"><p>An adjustment bar.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gwy-adjust-bar-get-mapping.returns"></a><h4>Returns</h4>
+<p> The type of mapping function between values and screen positions.</p>
+</div>
+<p class="since">Since: <a class="link" href="api-index-2-49.html#api-index-2.49">2.49</a></p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gwy-adjust-bar-set-has-check-button"></a><h3>gwy_adjust_bar_set_has_check_button ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gwy_adjust_bar_set_has_check_button (<em class="parameter"><code><a class="link" href="GwyAdjustBar.html" title="GwyAdjustBar"><span class="type">GwyAdjustBar</span></a> *adjbar</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> setting</code></em>);</pre>
+<p>Sets whether an adjustment bar has a check button.</p>
+<div class="refsect3">
+<a name="gwy-adjust-bar-set-has-check-button.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>adjbar</p></td>
+<td class="parameter_description"><p>An adjustment bar.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>setting</p></td>
+<td class="parameter_description"><p><a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> to enable a check button; <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> to disable it.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: <a class="link" href="api-index-2-49.html#api-index-2.49">2.49</a></p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gwy-adjust-bar-get-has-check-button"></a><h3>gwy_adjust_bar_get_has_check_button ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gwy_adjust_bar_get_has_check_button (<em class="parameter"><code><a class="link" href="GwyAdjustBar.html" title="GwyAdjustBar"><span class="type">GwyAdjustBar</span></a> *adjbar</code></em>);</pre>
+<p>Reports whether an adjustment bar has a check button.</p>
+<div class="refsect3">
+<a name="gwy-adjust-bar-get-has-check-button.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>adjbar</p></td>
+<td class="parameter_description"><p>An adjustment bar.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gwy-adjust-bar-get-has-check-button.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the adjustment bar has a check button.</p>
+</div>
+<p class="since">Since: <a class="link" href="api-index-2-49.html#api-index-2.49">2.49</a></p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gwy-adjust-bar-set-bar-sensitive"></a><h3>gwy_adjust_bar_set_bar_sensitive ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gwy_adjust_bar_set_bar_sensitive (<em class="parameter"><code><a class="link" href="GwyAdjustBar.html" title="GwyAdjustBar"><span class="type">GwyAdjustBar</span></a> *adjbar</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> sensitive</code></em>);</pre>
+<p>Sets the sensitivity of an adjustment bar.</p>
+<p>The bar's sensitivity can be controlled separately. This is useful when
+<em class="parameter"><code>adjbar</code></em>
+ has a check button because otherwise the bar is the entire widget
+and the function is not different from <a href="/usr/share/gtk-doc/html/gtk3GtkWidget.html#gtk-widget-set-sensitive"><code class="function">gtk_widget_set_sensitive()</code></a>.
+However, if you want to enable and disable the adjustment bar via the check
+button, use this function instead of <a href="/usr/share/gtk-doc/html/gtk3GtkWidget.html#gtk-widget-set-sensitive"><code class="function">gtk_widget_set_sensitive()</code></a> which would
+make insensitive also the check button.</p>
+<div class="refsect3">
+<a name="gwy-adjust-bar-set-bar-sensitive.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>adjbar</p></td>
+<td class="parameter_description"><p>An adjustment bar.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>sensitive</p></td>
+<td class="parameter_description"><p><a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> to make the widget's bar sensitive.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: <a class="link" href="api-index-2-49.html#api-index-2.49">2.49</a></p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gwy-adjust-bar-get-bar-sensitive"></a><h3>gwy_adjust_bar_get_bar_sensitive ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gwy_adjust_bar_get_bar_sensitive (<em class="parameter"><code><a class="link" href="GwyAdjustBar.html" title="GwyAdjustBar"><span class="type">GwyAdjustBar</span></a> *adjbar</code></em>);</pre>
+<p>Reports whether an adjustment bar is sensitive.</p>
+<p>See <a class="link" href="GwyAdjustBar.html#gwy-adjust-bar-set-bar-sensitive" title="gwy_adjust_bar_set_bar_sensitive ()"><code class="function">gwy_adjust_bar_set_bar_sensitive()</code></a> for discussion.</p>
+<div class="refsect3">
+<a name="gwy-adjust-bar-get-bar-sensitive.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>adjbar</p></td>
+<td class="parameter_description"><p>An adjustment bar.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gwy-adjust-bar-get-bar-sensitive.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the widget's bar is sensitive.</p>
+</div>
+<p class="since">Since: <a class="link" href="api-index-2-49.html#api-index-2.49">2.49</a></p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gwy-adjust-bar-get-label"></a><h3>gwy_adjust_bar_get_label ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/gtk3GtkWidget.html#GtkWidget-struct"><span class="returnvalue">GtkWidget</span></a> *
+gwy_adjust_bar_get_label (<em class="parameter"><code><a class="link" href="GwyAdjustBar.html" title="GwyAdjustBar"><span class="type">GwyAdjustBar</span></a> *adjbar</code></em>);</pre>
+<p>Gets the label widget inside an adjustment bar.</p>
+<p>Use <a href="/usr/share/gtk-doc/html/gtk3GtkLabel.html#gtk-label-set-mnemonic-widget"><code class="function">gtk_label_set_mnemonic_widget()</code></a> to set the mnemonic widget for the label
+or change the label text.</p>
+<div class="refsect3">
+<a name="gwy-adjust-bar-get-label.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>adjbar</p></td>
+<td class="parameter_description"><p>An adjustment bar.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gwy-adjust-bar-get-label.returns"></a><h4>Returns</h4>
+<p> The label widget.</p>
+</div>
+<p class="since">Since: <a class="link" href="api-index-2-49.html#api-index-2.49">2.49</a></p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gwy-adjust-bar-get-check-button"></a><h3>gwy_adjust_bar_get_check_button ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/gtk3GtkWidget.html#GtkWidget-struct"><span class="returnvalue">GtkWidget</span></a> *
+gwy_adjust_bar_get_check_button (<em class="parameter"><code><a class="link" href="GwyAdjustBar.html" title="GwyAdjustBar"><span class="type">GwyAdjustBar</span></a> *adjbar</code></em>);</pre>
+<p>Gets the check button of an adjustment bar.</p>
+<p>Connect to the "toggled" signal of the check button. Modifying it is not
+recommended.</p>
+<div class="refsect3">
+<a name="gwy-adjust-bar-get-check-button.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>adjbar</p></td>
+<td class="parameter_description"><p>An adjustment bar.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gwy-adjust-bar-get-check-button.returns"></a><h4>Returns</h4>
+<p> The check button widget, or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if there is none.</p>
+</div>
+<p class="since">Since: <a class="link" href="api-index-2-49.html#api-index-2.49">2.49</a></p>
+</div>
+</div>
+<div class="refsect1">
+<a name="GwyAdjustBar.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="GwyAdjustBar-struct"></a><h3>struct GwyAdjustBar</h3>
+<pre class="programlisting">struct GwyAdjustBar;</pre>
+<p>Adjustment bar widget visualising an adjustment.</p>
+<p>The <a class="link" href="GwyAdjustBar.html" title="GwyAdjustBar"><span class="type">GwyAdjustBar</span></a> struct contains private data only and should be accessed
+using the functions below.</p>
+<p class="since">Since: <a class="link" href="api-index-2-49.html#api-index-2.49">2.49</a></p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GwyAdjustBarClass"></a><h3>struct GwyAdjustBarClass</h3>
+<pre class="programlisting">struct GwyAdjustBarClass {
+};
+</pre>
+<p>Class of adjustment bars visualising adjustments.</p>
+<p class="since">Since: <a class="link" href="api-index-2-49.html#api-index-2.49">2.49</a></p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GwyScaleMappingType"></a><h3>enum GwyScaleMappingType</h3>
+<p>Type of adjustment bar mapping functions.</p>
+<div class="refsect3">
+<a name="GwyScaleMappingType.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="GWY-SCALE-MAPPING-LINEAR:CAPS"></a>GWY_SCALE_MAPPING_LINEAR</p></td>
+<td class="enum_member_description">
+<p>Linear mapping between values and screen
+ positions. This recommended for signed additive
+ quantities of a limited range.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GWY-SCALE-MAPPING-SQRT:CAPS"></a>GWY_SCALE_MAPPING_SQRT</p></td>
+<td class="enum_member_description">
+<p>Screen positions correspond to ‘signed square
+ roots’ of the value. This is the
+ recommended general-purpose default mapping type as
+ it works with both signed and usigned quantities
+ and offers good sensitivity for both large and
+ small values.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GWY-SCALE-MAPPING-LOG:CAPS"></a>GWY_SCALE_MAPPING_LOG</p></td>
+<td class="enum_member_description">
+<p>Screen positions correspond to logarithms of values.
+ The adjustment range must contain only positive
+ values. For quantities of extreme ranges this
+ mapping may be preferred to <a class="link" href="GwyAdjustBar.html#GWY-SCALE-MAPPING-SQRT:CAPS"><code class="literal">GWY_SCALE_MAPPING_SQRT</code></a>.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: <a class="link" href="api-index-2-49.html#api-index-2.49">2.49</a></p>
+</div>
+</div>
+<div class="refsect1">
+<a name="GwyAdjustBar.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GwyAdjustBar--adjustment"></a><h3>The <code class="literal">“adjustment”</code> property</h3>
+<pre class="programlisting"> “adjustment” <a href="/usr/share/gtk-doc/html/gtk3GtkAdjustment.html#GtkAdjustment-struct"><span class="type">GtkAdjustment</span></a> *</pre>
+<p>Adjustment representing the value.</p>
+<p>Flags: Read / Write</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GwyAdjustBar--has-check-button"></a><h3>The <code class="literal">“has-check-button”</code> property</h3>
+<pre class="programlisting"> “has-check-button” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
+<p>Whether the adjust bar has a check button.</p>
+<p>Flags: Read / Write</p>
+<p>Default value: FALSE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GwyAdjustBar--mapping"></a><h3>The <code class="literal">“mapping”</code> property</h3>
+<pre class="programlisting"> “mapping” <a class="link" href="GwyAdjustBar.html#GwyScaleMappingType" title="enum GwyScaleMappingType"><span class="type">GwyScaleMappingType</span></a></pre>
+<p>Mapping function between values and screen positions.</p>
+<p>Flags: Read / Write</p>
+<p>Default value: GWY_SCALE_MAPPING_SQRT</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GwyAdjustBar--snap-to-ticks"></a><h3>The <code class="literal">“snap-to-ticks”</code> property</h3>
+<pre class="programlisting"> “snap-to-ticks” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
+<p>Whether only values that are multiples of step size are allowed.</p>
+<p>Flags: Read / Write</p>
+<p>Default value: FALSE</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="GwyAdjustBar.signal-details"></a><h2>Signal Details</h2>
+<div class="refsect2">
+<a name="GwyAdjustBar-change-value"></a><h3>The <code class="literal">“change-value”</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+user_function (<a class="link" href="GwyAdjustBar.html" title="GwyAdjustBar"><span class="type">GwyAdjustBar</span></a> *gwyadjustbar,
+ <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> arg1,
+ <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data)</pre>
+<p>The ::change-value signal is emitted when the user interactively
+changes the value.</p>
+<p>It is an action signal.</p>
+<div class="refsect3">
+<a name="GwyAdjustBar-change-value.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>gwyadjustbar</p></td>
+<td class="parameter_description"><p>The <a class="link" href="GwyAdjustBar.html" title="GwyAdjustBar"><span class="type">GwyAdjustBar</span></a> which received the signal.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>arg1</p></td>
+<td class="parameter_description"><p>New value for <em class="parameter"><code>gwyadjustbar</code></em>
+.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>user_data</p></td>
+<td class="parameter_description"><p>user data set when the signal handler was connected.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p>Flags: <a href="/usr/share/gtk-doc/html/gobjectgobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.19</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/devel-docs/libgwydgets/html/GwyAxis.html b/devel-docs/libgwydgets/html/GwyAxis.html
index 27e91e9..a96223d 100644
--- a/devel-docs/libgwydgets/html/GwyAxis.html
+++ b/devel-docs/libgwydgets/html/GwyAxis.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GwyAxis: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="GraphWidgets.html" title="Graphs">
<link rel="prev" href="GwyGraphArea.html" title="GwyGraphArea">
@@ -37,7 +37,7 @@
</tr></table></div>
<div class="refsect1">
<a name="GwyAxis.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -197,7 +197,7 @@
</div>
<div class="refsect1">
<a name="GwyAxis.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
<colgroup>
<col width="150px" class="properties_type">
<col width="300px" class="properties_name">
@@ -260,7 +260,7 @@
</div>
<div class="refsect1">
<a name="GwyAxis.signals"></a><h2>Signals</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
<colgroup>
<col width="150px" class="signals_return">
<col width="300px" class="signals_name">
@@ -275,7 +275,7 @@
</div>
<div class="refsect1">
<a name="GwyAxis.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -332,7 +332,7 @@ gwy_axis_new (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibg
<p>Creates a new axis.</p>
<div class="refsect3">
<a name="gwy-axis-new.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -359,7 +359,7 @@ gwy_axis_set_logarithmic (<em class="parameter"><code><a class="link" href="GwyA
<p>Sets logarithmic mode.</p>
<div class="refsect3">
<a name="gwy-axis-set-logarithmic.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -389,7 +389,7 @@ gwy_axis_set_visible (<em class="parameter"><code><a class="link" href="GwyAxis.
<p>Sets the visibility of an axis.</p>
<div class="refsect3">
<a name="gwy-axis-set-visible.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -420,7 +420,7 @@ gwy_axis_is_visible (<em class="parameter"><code><a class="link" href="GwyAxis.h
is set to be visible.</p>
<div class="refsect3">
<a name="gwy-axis-is-visible.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -442,7 +442,7 @@ gwy_axis_is_logarithmic (<em class="parameter"><code><a class="link" href="GwyAx
<p>Determines whether axis is set to be locarithmic.</p>
<div class="refsect3">
<a name="gwy-axis-is-logarithmic.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -469,7 +469,7 @@ gwy_axis_get_orientation (<em class="parameter"><code><a class="link" href="GwyA
<p>Gets the orientation of an axis.</p>
<div class="refsect3">
<a name="gwy-axis-get-orientation.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -496,7 +496,7 @@ gwy_axis_set_auto (<em class="parameter"><code><a class="link" href="GwyAxis.htm
<p>Enables or disables automatic axis adjustmet.</p>
<div class="refsect3">
<a name="gwy-axis-set-auto.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -531,7 +531,7 @@ reasonable tick values and spacing. Use <a class="link" href="GwyAxis.html#gwy-
boundaries the axis actually decided to use.</p>
<div class="refsect3">
<a name="gwy-axis-request-range.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -567,7 +567,7 @@ gwy_axis_get_range (<em class="parameter"><code><a class="link" href="GwyAxis.ht
<p>Gets the actual boundaries of an axis.</p>
<div class="refsect3">
<a name="gwy-axis-get-range.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -603,7 +603,7 @@ gwy_axis_get_requested_range (<em class="parameter"><code><a class="link" href="
<p>Gets the requested boundaries of an axis.</p>
<div class="refsect3">
<a name="gwy-axis-get-requested-range.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -637,7 +637,7 @@ gwy_axis_get_magnification (<em class="parameter"><code><a class="link" href="Gw
<p>Gets the magnification value of a graph axis.</p>
<div class="refsect3">
<a name="gwy-axis-get-magnification.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -663,7 +663,7 @@ gwy_axis_get_magnification_string (<em class="parameter"><code><a class="link" h
<p>Gets the magnification string of an axis.</p>
<div class="refsect3">
<a name="gwy-axis-get-magnification-string.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -690,7 +690,7 @@ gwy_axis_set_label (<em class="parameter"><code><a class="link" href="GwyAxis.ht
<p>Sets the label text of an axis.</p>
<div class="refsect3">
<a name="gwy-axis-set-label.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -719,7 +719,7 @@ gwy_axis_get_label (<em class="parameter"><code><a class="link" href="GwyAxis.ht
<p>Gets the label of an axis.</p>
<div class="refsect3">
<a name="gwy-axis-get-label.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -749,7 +749,7 @@ to the label. <em class="parameter"><code>unit</code></em>
is duplicated.</p>
<div class="refsect3">
<a name="gwy-axis-set-si-unit.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -779,7 +779,7 @@ gwy_axis_enable_label_edit (<em class="parameter"><code><a class="link" href="Gw
<p>Enables/disables user to change axis label by clicking on axis widget.</p>
<div class="refsect3">
<a name="gwy-axis-enable-label-edit.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -814,7 +814,7 @@ gwy_axis_draw_on_drawable (<em class="parameter"><code><a class="link" href="Gwy
<p>Draws the x and y-axis on a drawable</p>
<div class="refsect3">
<a name="gwy-axis-draw-on-drawable.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -876,7 +876,7 @@ gwy_axis_export_vector (<em class="parameter"><code><a class="link" href="GwyAxi
not useful anywhere else.</p>
<div class="refsect3">
<a name="gwy-axis-export-vector.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -930,7 +930,7 @@ gwy_axis_get_major_ticks (<em class="parameter"><code><a class="link" href="GwyA
<p>Gets the positions of major ticks of an axis.</p>
<div class="refsect3">
<a name="gwy-axis-get-major-ticks.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwydgets/html/GwyColorAxis.html b/devel-docs/libgwydgets/html/GwyColorAxis.html
index 0cfd94f..12be1d0 100644
--- a/devel-docs/libgwydgets/html/GwyColorAxis.html
+++ b/devel-docs/libgwydgets/html/GwyColorAxis.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GwyColorAxis: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="DataWindowWidgets.html" title="Data Windows and Views">
<link rel="prev" href="GwyLayerMask.html" title="GwyLayerMask">
@@ -36,7 +36,7 @@
</tr></table></div>
<div class="refsect1">
<a name="GwyColorAxis.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -158,7 +158,7 @@
</div>
<div class="refsect1">
<a name="GwyColorAxis.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
<colgroup>
<col width="150px" class="properties_type">
<col width="300px" class="properties_name">
@@ -197,7 +197,7 @@
</div>
<div class="refsect1">
<a name="GwyColorAxis.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -250,7 +250,7 @@ GwyColorAxis implements
<p>Type of color axis non-linear tick mapping function.</p>
<div class="refsect3">
<a name="GwyColorAxisMapFunc.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -299,7 +299,7 @@ gwy_color_axis_new (<em class="parameter"><code><a href="/usr/share/gtk-doc/html
<p>Creates a new color axis.</p>
<div class="refsect3">
<a name="gwy-color-axis-new.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -327,7 +327,7 @@ gwy_color_axis_new_with_range (<em class="parameter"><code><a href="/usr/share/g
<p>Creates a new color axis.</p>
<div class="refsect3">
<a name="gwy-color-axis-new-with-range.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -367,7 +367,7 @@ gwy_color_axis_get_range (<em class="parameter"><code><a class="link" href="GwyC
<p>Gets the range of a color axis.</p>
<div class="refsect3">
<a name="gwy-color-axis-get-range.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -403,7 +403,7 @@ gwy_color_axis_set_range (<em class="parameter"><code><a class="link" href="GwyC
<p>Sets the range of a color axis.</p>
<div class="refsect3">
<a name="gwy-color-axis-set-range.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -437,7 +437,7 @@ gwy_color_axis_get_si_unit (<em class="parameter"><code><a class="link" href="Gw
<p>Gets the SI unit a color axis displays.</p>
<div class="refsect3">
<a name="gwy-color-axis-get-si-unit.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -464,7 +464,7 @@ gwy_color_axis_set_si_unit (<em class="parameter"><code><a class="link" href="Gw
<p>Sets the SI unit a color axis displays.</p>
<div class="refsect3">
<a name="gwy-color-axis-set-si-unit.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -494,7 +494,7 @@ gwy_color_axis_set_gradient (<em class="parameter"><code><a class="link" href="G
<p>Sets the color gradient a color axis should use.</p>
<div class="refsect3">
<a name="gwy-color-axis-set-gradient.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -524,7 +524,7 @@ gwy_color_axis_get_gradient (<em class="parameter"><code><a class="link" href="G
<p>Gets the color gradient a color axis uses.</p>
<div class="refsect3">
<a name="gwy-color-axis-get-gradient.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -550,7 +550,7 @@ gwy_color_axis_get_ticks_style (<em class="parameter"><code><a class="link" href
<p>Gets ticks style of a color axis.</p>
<div class="refsect3">
<a name="gwy-color-axis-get-ticks-style.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -577,7 +577,7 @@ gwy_color_axis_set_ticks_style (<em class="parameter"><code><a class="link" href
<p>Sets the ticks style of a color axis.</p>
<div class="refsect3">
<a name="gwy-color-axis-set-ticks-style.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -606,7 +606,7 @@ gwy_color_axis_get_labels_visible (<em class="parameter"><code><a class="link" h
<p>Gets the visibility of labels of a color axis.</p>
<div class="refsect3">
<a name="gwy-color-axis-get-labels-visible.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -633,7 +633,7 @@ gwy_color_axis_set_labels_visible (<em class="parameter"><code><a class="link" h
<p>Sets the visibility of labels of a color axis.</p>
<div class="refsect3">
<a name="gwy-color-axis-set-labels-visible.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -670,7 +670,7 @@ ticks mode <a class="link" href="libgwydgets-gwydgetenums.html#GWY-TICKS-STYLE-U
guaranteed.</p>
<div class="refsect3">
<a name="gwy-color-axis-set-tick-map-func.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwydgets/html/GwyColorButton.html b/devel-docs/libgwydgets/html/GwyColorButton.html
index e082113..c4d5ba3 100644
--- a/devel-docs/libgwydgets/html/GwyColorButton.html
+++ b/devel-docs/libgwydgets/html/GwyColorButton.html
@@ -3,10 +3,10 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GwyColorButton: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="GeneralWidgets.html" title="General Widgets">
-<link rel="prev" href="GeneralWidgets.html" title="General Widgets">
+<link rel="prev" href="GwyAdjustBar.html" title="GwyAdjustBar">
<link rel="next" href="GwyCurve.html" title="GwyCurve">
<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
@@ -22,7 +22,7 @@
</td>
<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
<td><a accesskey="u" href="GeneralWidgets.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="GeneralWidgets.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="p" href="GwyAdjustBar.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
<td><a accesskey="n" href="GwyCurve.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
</tr></table>
<div class="refentry">
@@ -36,7 +36,7 @@
</tr></table></div>
<div class="refsect1">
<a name="GwyColorButton.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -95,7 +95,7 @@
</div>
<div class="refsect1">
<a name="GwyColorButton.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
<colgroup>
<col width="150px" class="properties_type">
<col width="300px" class="properties_name">
@@ -118,7 +118,7 @@
</div>
<div class="refsect1">
<a name="GwyColorButton.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -190,7 +190,7 @@ gwy_color_button_new_with_color (<em class="parameter"><code>const <span class="
<p>Creates a new color button.</p>
<div class="refsect3">
<a name="gwy-color-button-new-with-color.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -218,7 +218,7 @@ gwy_color_button_set_color (<em class="parameter"><code><a class="link" href="Gw
.</p>
<div class="refsect3">
<a name="gwy-color-button-set-color.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -249,7 +249,7 @@ gwy_color_button_get_color (<em class="parameter"><code><a class="link" href="Gw
to be the current color in the <a class="link" href="GwyColorButton.html" title="GwyColorButton"><span class="type">GwyColorButton</span></a> widget.</p>
<div class="refsect3">
<a name="gwy-color-button-get-color.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -279,7 +279,7 @@ gwy_color_button_set_use_alpha (<em class="parameter"><code><a class="link" href
<p>Sets whether or not the color button should use the alpha channel.</p>
<div class="refsect3">
<a name="gwy-color-button-set-use-alpha.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -308,7 +308,7 @@ gwy_color_button_get_use_alpha (<em class="parameter"><code><a class="link" href
<p>Does the color selection dialog use the alpha channel?</p>
<div class="refsect3">
<a name="gwy-color-button-get-use-alpha.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwydgets/html/GwyCurve.html b/devel-docs/libgwydgets/html/GwyCurve.html
index ade383d..9f1f4f0 100644
--- a/devel-docs/libgwydgets/html/GwyCurve.html
+++ b/devel-docs/libgwydgets/html/GwyCurve.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GwyCurve: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="GeneralWidgets.html" title="General Widgets">
<link rel="prev" href="GwyColorButton.html" title="GwyColorButton">
@@ -37,7 +37,7 @@
</tr></table></div>
<div class="refsect1">
<a name="GwyCurve.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -104,7 +104,7 @@
</div>
<div class="refsect1">
<a name="GwyCurve.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
<colgroup>
<col width="150px" class="properties_type">
<col width="300px" class="properties_name">
@@ -146,7 +146,7 @@
</div>
<div class="refsect1">
<a name="GwyCurve.signals"></a><h2>Signals</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
<colgroup>
<col width="150px" class="signals_return">
<col width="300px" class="signals_name">
@@ -168,7 +168,7 @@
</div>
<div class="refsect1">
<a name="GwyCurve.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -242,7 +242,7 @@ gwy_curve_reset (<em class="parameter"><code><a class="link" href="GwyCurve.html
<p>Removes all control points, resetting the curves to their initial state.</p>
<div class="refsect3">
<a name="gwy-curve-reset.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwydgets/html/GwyDataView.html b/devel-docs/libgwydgets/html/GwyDataView.html
index db68660..16ff5bd 100644
--- a/devel-docs/libgwydgets/html/GwyDataView.html
+++ b/devel-docs/libgwydgets/html/GwyDataView.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GwyDataView: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="DataWindowWidgets.html" title="Data Windows and Views">
<link rel="prev" href="GwyDataWindow.html" title="GwyDataWindow">
@@ -37,7 +37,7 @@
</tr></table></div>
<div class="refsect1">
<a name="GwyDataView.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -271,7 +271,7 @@
</div>
<div class="refsect1">
<a name="GwyDataView.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
<colgroup>
<col width="150px" class="properties_type">
<col width="300px" class="properties_name">
@@ -294,7 +294,7 @@
</div>
<div class="refsect1">
<a name="GwyDataView.signals"></a><h2>Signals</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
<colgroup>
<col width="150px" class="signals_return">
<col width="300px" class="signals_name">
@@ -326,7 +326,7 @@
</div>
<div class="refsect1">
<a name="GwyDataView.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -405,7 +405,7 @@ mouse and keyboard events.</p>
transparent or vector.</p>
<div class="refsect3">
<a name="gwy-data-view-new.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -432,7 +432,7 @@ gwy_data_view_get_base_layer (<em class="parameter"><code><a class="link" href="
<p>A base layer should be always present.</p>
<div class="refsect3">
<a name="gwy-data-view-get-base-layer.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -465,7 +465,7 @@ use no base layer, but then <em class="parameter"><code>data_view</code></em>
will probably display garbage.</p>
<div class="refsect3">
<a name="gwy-data-view-set-base-layer.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -496,7 +496,7 @@ gwy_data_view_get_alpha_layer (<em class="parameter"><code><a class="link" href=
is present.</p>
<div class="refsect3">
<a name="gwy-data-view-get-alpha-layer.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -528,7 +528,7 @@ gwy_data_view_set_alpha_layer (<em class="parameter"><code><a class="link" href=
layer is to be used.</p>
<div class="refsect3">
<a name="gwy-data-view-set-alpha-layer.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -559,7 +559,7 @@ gwy_data_view_get_top_layer (<em class="parameter"><code><a class="link" href="G
is present.</p>
<div class="refsect3">
<a name="gwy-data-view-get-top-layer.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -591,7 +591,7 @@ gwy_data_view_set_top_layer (<em class="parameter"><code><a class="link" href="G
layer is to be used.</p>
<div class="refsect3">
<a name="gwy-data-view-set-top-layer.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -622,7 +622,7 @@ gwy_data_view_get_data_prefix (<em class="parameter"><code><a class="link" href=
currently set to display.</p>
<div class="refsect3">
<a name="gwy-data-view-get-data-prefix.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -651,7 +651,7 @@ gwy_data_view_set_data_prefix (<em class="parameter"><code><a class="link" href=
from, it does not affect layer keys.</p>
<div class="refsect3">
<a name="gwy-data-view-set-data-prefix.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -681,7 +681,7 @@ gwy_data_view_get_hexcess (<em class="parameter"><code><a class="link" href="Gwy
<p>Do not use. Only useful for <a class="link" href="GwyDataWindow.html" title="GwyDataWindow"><span class="type">GwyDataWindow</span></a> implementation.</p>
<div class="refsect3">
<a name="gwy-data-view-get-hexcess.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -708,7 +708,7 @@ gwy_data_view_get_vexcess (<em class="parameter"><code><a class="link" href="Gwy
<p>Do not use. Only useful for <a class="link" href="GwyDataWindow.html" title="GwyDataWindow"><span class="type">GwyDataWindow</span></a> implementation.</p>
<div class="refsect3">
<a name="gwy-data-view-get-vexcess.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -740,7 +740,7 @@ gwy_data_view_set_zoom (<em class="parameter"><code><a class="link" href="GwyDat
from change.</p>
<div class="refsect3">
<a name="gwy-data-view-set-zoom.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -777,7 +777,7 @@ considered to be the same.</p>
<a class="link" href="GwyDataView.html#gwy-data-view-get-real-zoom" title="gwy_data_view_get_real_zoom ()"><code class="function">gwy_data_view_get_real_zoom()</code></a> to get the real zoom.</p>
<div class="refsect3">
<a name="gwy-data-view-get-zoom.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -808,7 +808,7 @@ by window manager or other constraints. Unlike ideal zoom set by
<p>When a resize is queued, the current (old) value is returned.</p>
<div class="refsect3">
<a name="gwy-data-view-get-real-zoom.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -836,7 +836,7 @@ gwy_data_view_get_data (<em class="parameter"><code><a class="link" href="GwyDat
.</p>
<div class="refsect3">
<a name="gwy-data-view-get-data.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -867,7 +867,7 @@ gwy_data_view_coords_xy_clamp (<em class="parameter"><code><a class="link" href=
area (which can be smaller than widget size).</p>
<div class="refsect3">
<a name="gwy-data-view-coords-xy-clamp.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -906,7 +906,7 @@ gwy_data_view_coords_xy_cut_line (<em class="parameter"><code><a class="link" hr
area (which can be smaller than widget size).</p>
<div class="refsect3">
<a name="gwy-data-view-coords-xy-cut-line.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -961,7 +961,7 @@ account. Coordinates <em class="parameter"><code>xreal</code></em>
top left field corner.</p>
<div class="refsect3">
<a name="gwy-data-view-coords-xy-to-real.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1015,7 +1015,7 @@ account. Coordinates <em class="parameter"><code>xreal</code></em>
top left field corner.</p>
<div class="refsect3">
<a name="gwy-data-view-coords-real-to-xy.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1071,7 +1071,7 @@ account. Coordinates <em class="parameter"><code>xreal</code></em>
top left field corner.</p>
<div class="refsect3">
<a name="gwy-data-view-coords-real-to-xy-float.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1119,7 +1119,7 @@ gwy_data_view_get_xmeasure (<em class="parameter"><code><a class="link" href="Gw
screen lengths in pixels.</p>
<div class="refsect3">
<a name="gwy-data-view-get-xmeasure.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1146,7 +1146,7 @@ gwy_data_view_get_ymeasure (<em class="parameter"><code><a class="link" href="Gw
screen lengths in pixels.</p>
<div class="refsect3">
<a name="gwy-data-view-get-ymeasure.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1177,7 +1177,7 @@ by <a href="../GwyDataField.html#gwy-data-field-get-xres"><code class="function"
field displayed by the base layer.</p>
<div class="refsect3">
<a name="gwy-data-view-get-pixel-data-sizes.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1217,7 +1217,7 @@ by <a href="../GwyDataField.html#gwy-data-field-get-xreal"><code class="function
field displayed by the base layer.</p>
<div class="refsect3">
<a name="gwy-data-view-get-real-data-sizes.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1259,7 +1259,7 @@ by <a href="../GwyDataField.html#gwy-data-field-get-xoffset"><code class="functi
field displayed by the base layer.</p>
<div class="refsect3">
<a name="gwy-data-view-get-real-data-offsets.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1301,7 +1301,7 @@ to screen distances. It is to be used with functions like
distance should be screen-Euclidean.</p>
<div class="refsect3">
<a name="gwy-data-view-get-metric.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1335,7 +1335,7 @@ gwy_data_view_get_pixbuf (<em class="parameter"><code><a class="link" href="GwyD
The returned pixbuf also never has an alpha channel.</p>
<div class="refsect3">
<a name="gwy-data-view-get-pixbuf.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1382,7 +1382,7 @@ gwy_data_view_export_pixbuf (<em class="parameter"><code><a class="link" href="G
<p>Exports data view to a pixbuf.</p>
<div class="refsect3">
<a name="gwy-data-view-export-pixbuf.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1481,7 +1481,7 @@ once the old layer is unplugged, then ::layer-plugged when the new
is plugged.</p>
<div class="refsect3">
<a name="GwyDataView-layer-plugged.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1522,7 +1522,7 @@ once the old layer is unplugged, then ::layer-plugged when the new
is plugged.</p>
<div class="refsect3">
<a name="GwyDataView-layer-unplugged.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1560,7 +1560,7 @@ an update. That is, when it's the right time to get a new pixbuf from
<a class="link" href="GwyDataView.html#gwy-data-view-get-pixbuf" title="gwy_data_view_get_pixbuf ()"><code class="function">gwy_data_view_get_pixbuf()</code></a>.</p>
<div class="refsect3">
<a name="GwyDataView-redrawn.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1596,7 +1596,7 @@ Its purpose is to subvert the normal resizing logic of <a class="link" href="Gwy
an explicit resize is needed). You should usually ignore it.</p>
<div class="refsect3">
<a name="GwyDataView-resized.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwydgets/html/GwyDataViewLayer.html b/devel-docs/libgwydgets/html/GwyDataViewLayer.html
index 2106df9..4612527 100644
--- a/devel-docs/libgwydgets/html/GwyDataViewLayer.html
+++ b/devel-docs/libgwydgets/html/GwyDataViewLayer.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GwyDataViewLayer: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="DataWindowWidgets.html" title="Data Windows and Views">
<link rel="prev" href="GwyDataView.html" title="GwyDataView">
@@ -35,7 +35,7 @@
</tr></table></div>
<div class="refsect1">
<a name="GwyDataViewLayer.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -86,7 +86,7 @@
</div>
<div class="refsect1">
<a name="GwyDataViewLayer.signals"></a><h2>Signals</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
<colgroup>
<col width="150px" class="signals_return">
<col width="300px" class="signals_name">
@@ -113,7 +113,7 @@
</div>
<div class="refsect1">
<a name="GwyDataViewLayer.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -161,7 +161,7 @@ gwy_data_view_layer_plugged (<em class="parameter"><code><a class="link" href="G
<p>Primarily intended for <a class="link" href="GwyDataView.html" title="GwyDataView"><span class="type">GwyDataView</span></a> implementation.</p>
<div class="refsect3">
<a name="gwy-data-view-layer-plugged.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -184,7 +184,7 @@ gwy_data_view_layer_unplugged (<em class="parameter"><code><a class="link" href=
<p>Primarily intended for <a class="link" href="GwyDataView.html" title="GwyDataView"><span class="type">GwyDataView</span></a> implementation.</p>
<div class="refsect3">
<a name="gwy-data-view-layer-unplugged.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -206,7 +206,7 @@ gwy_data_view_layer_updated (<em class="parameter"><code><a class="link" href="G
<p>Emits a "updated" singal on a layer.</p>
<div class="refsect3">
<a name="gwy-data-view-layer-updated.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -229,7 +229,7 @@ gwy_data_view_layer_realize (<em class="parameter"><code><a class="link" href="G
display-specific resources.</p>
<div class="refsect3">
<a name="gwy-data-view-layer-realize.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -252,7 +252,7 @@ gwy_data_view_layer_unrealize (<em class="parameter"><code><a class="link" href=
display-specific resources.</p>
<div class="refsect3">
<a name="gwy-data-view-layer-unrealize.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -305,7 +305,7 @@ user_function (<a class="link" href="GwyDataViewLayer.html" title="GwyDataViewLa
a <a class="link" href="GwyDataView.html" title="GwyDataView"><span class="type">GwyDataView</span></a>.</p>
<div class="refsect3">
<a name="GwyDataViewLayer-plugged.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -337,7 +337,7 @@ user_function (<a class="link" href="GwyDataViewLayer.html" title="GwyDataViewLa
from its <a class="link" href="GwyDataView.html" title="GwyDataView"><span class="type">GwyDataView</span></a>.</p>
<div class="refsect3">
<a name="GwyDataViewLayer-unplugged.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -369,7 +369,7 @@ user_function (<a class="link" href="GwyDataViewLayer.html" title="GwyDataViewLa
the exact means how a layer can be updated depends its type.</p>
<div class="refsect3">
<a name="GwyDataViewLayer-updated.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwydgets/html/GwyDataWindow.html b/devel-docs/libgwydgets/html/GwyDataWindow.html
index 587092a..6883b72 100644
--- a/devel-docs/libgwydgets/html/GwyDataWindow.html
+++ b/devel-docs/libgwydgets/html/GwyDataWindow.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GwyDataWindow: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="DataWindowWidgets.html" title="Data Windows and Views">
<link rel="prev" href="DataWindowWidgets.html" title="Data Windows and Views">
@@ -36,7 +36,7 @@
</tr></table></div>
<div class="refsect1">
<a name="GwyDataWindow.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -134,7 +134,7 @@
</div>
<div class="refsect1">
<a name="GwyDataWindow.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
<colgroup>
<col width="150px" class="properties_type">
<col width="300px" class="properties_name">
@@ -170,7 +170,7 @@
</div>
<div class="refsect1">
<a name="GwyDataWindow.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -224,7 +224,7 @@ gwy_data_window_new (<em class="parameter"><code><a class="link" href="GwyDataVi
<p>Creates a new data displaying window.</p>
<div class="refsect3">
<a name="gwy-data-window-new.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -250,7 +250,7 @@ gwy_data_window_get_data_view (<em class="parameter"><code><a class="link" href=
<p>Returns the data view widget a data window currently shows.</p>
<div class="refsect3">
<a name="gwy-data-window-get-data-view.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -276,7 +276,7 @@ gwy_data_window_get_color_axis (<em class="parameter"><code><a class="link" href
<p>Returns the color axis widget displayed by a data window.</p>
<div class="refsect3">
<a name="gwy-data-window-get-color-axis.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -302,7 +302,7 @@ gwy_data_window_get_data (<em class="parameter"><code><a class="link" href="GwyD
<p>Returns the data for the data view a data window currently shows.</p>
<div class="refsect3">
<a name="gwy-data-window-get-data.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -335,7 +335,7 @@ Otherwise the new zoom value is set to <em class="parameter"><code>izoom</code><
/10000.</p>
<div class="refsect3">
<a name="gwy-data-window-set-zoom.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -364,7 +364,7 @@ gwy_data_window_get_data_name (<em class="parameter"><code><a class="link" href=
<p>Gets the data name part of a data window's title.</p>
<div class="refsect3">
<a name="gwy-data-window-get-data-name.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -392,7 +392,7 @@ gwy_data_window_set_data_name (<em class="parameter"><code><a class="link" href=
<p>The data name is used in the window's title.</p>
<div class="refsect3">
<a name="gwy-data-window-set-data-name.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -422,7 +422,7 @@ gwy_data_window_get_ul_corner_widget (<em class="parameter"><code><a class="link
.</p>
<div class="refsect3">
<a name="gwy-data-window-get-ul-corner-widget.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -451,7 +451,7 @@ gwy_data_window_set_ul_corner_widget (<em class="parameter"><code><a class="link
.</p>
<div class="refsect3">
<a name="gwy-data-window-set-ul-corner-widget.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -488,7 +488,7 @@ the class instantiates one on its own. You can normally obtain it with
the tooltips in either case.</p>
<div class="refsect3">
<a name="gwy-data-window-class-set-tooltips.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwydgets/html/GwyGraph.html b/devel-docs/libgwydgets/html/GwyGraph.html
index 0da4b51..d23170f 100644
--- a/devel-docs/libgwydgets/html/GwyGraph.html
+++ b/devel-docs/libgwydgets/html/GwyGraph.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GwyGraph: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="GraphWidgets.html" title="Graphs">
<link rel="prev" href="GraphWidgets.html" title="Graphs">
@@ -36,7 +36,7 @@
</tr></table></div>
<div class="refsect1">
<a name="GwyGraph.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -135,7 +135,7 @@
</div>
<div class="refsect1">
<a name="GwyGraph.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
<colgroup>
<col width="150px" class="properties_type">
<col width="300px" class="properties_name">
@@ -151,7 +151,7 @@
</div>
<div class="refsect1">
<a name="GwyGraph.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -212,7 +212,7 @@ gwy_graph_new (<em class="parameter"><code><a class="link" href="GwyGraphModel.h
<p>Creates graph widget based on information in model.</p>
<div class="refsect3">
<a name="gwy-graph-new.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -239,7 +239,7 @@ gwy_graph_get_axis (<em class="parameter"><code><a class="link" href="GwyGraph.h
<p>Gets a graph axis.</p>
<div class="refsect3">
<a name="gwy-graph-get-axis.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -275,7 +275,7 @@ gwy_graph_set_axis_visible (<em class="parameter"><code><a class="link" href="Gw
can be set also directly using GwyAxis API.</p>
<div class="refsect3">
<a name="gwy-graph-set-axis-visible.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -309,7 +309,7 @@ gwy_graph_get_area (<em class="parameter"><code><a class="link" href="GwyGraph.h
<p>Gets the area widget of a graph.</p>
<div class="refsect3">
<a name="gwy-graph-get-area.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -337,7 +337,7 @@ gwy_graph_set_model (<em class="parameter"><code><a class="link" href="GwyGraph.
<p>Everything in graph widgets will be reset to reflect the new data.</p>
<div class="refsect3">
<a name="gwy-graph-set-model.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -366,7 +366,7 @@ gwy_graph_get_model (<em class="parameter"><code><a class="link" href="GwyGraph.
<p>Gets the model of a graph.</p>
<div class="refsect3">
<a name="gwy-graph-get-model.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -395,7 +395,7 @@ gwy_graph_set_status (<em class="parameter"><code><a class="link" href="GwyGraph
This includes point or area selection and zooming.</p>
<div class="refsect3">
<a name="gwy-graph-set-status.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -425,7 +425,7 @@ gwy_graph_get_status (<em class="parameter"><code><a class="link" href="GwyGraph
<p>See <a class="link" href="GwyGraph.html#gwy-graph-set-status" title="gwy_graph_set_status ()"><code class="function">gwy_graph_set_status()</code></a> for more.</p>
<div class="refsect3">
<a name="gwy-graph-get-status.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -453,7 +453,7 @@ gwy_graph_enable_user_input (<em class="parameter"><code><a class="link" href="G
mouse clicks.</p>
<div class="refsect3">
<a name="gwy-graph-enable-user-input.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -485,7 +485,7 @@ gwy_graph_export_pixmap (<em class="parameter"><code><a class="link" href="GwyGr
<p>Renders a graph widget into a pixbuf.</p>
<div class="refsect3">
<a name="gwy-graph-export-pixmap.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -532,7 +532,7 @@ gwy_graph_export_postscript (<em class="parameter"><code><a class="link" href="G
<p>Approximately renders a graph widget in PostScript.</p>
<div class="refsect3">
<a name="gwy-graph-export-postscript.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwydgets/html/GwyGraphArea.html b/devel-docs/libgwydgets/html/GwyGraphArea.html
index b7e5666..805844d 100644
--- a/devel-docs/libgwydgets/html/GwyGraphArea.html
+++ b/devel-docs/libgwydgets/html/GwyGraphArea.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GwyGraphArea: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="GraphWidgets.html" title="Graphs">
<link rel="prev" href="GwyGraphCurveModel.html" title="GwyGraphCurveModel">
@@ -37,7 +37,7 @@
</tr></table></div>
<div class="refsect1">
<a name="GwyGraphArea.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -198,7 +198,7 @@
</div>
<div class="refsect1">
<a name="GwyGraphArea.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
<colgroup>
<col width="150px" class="properties_type">
<col width="300px" class="properties_name">
@@ -213,7 +213,7 @@
</div>
<div class="refsect1">
<a name="GwyGraphArea.signals"></a><h2>Signals</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
<colgroup>
<col width="150px" class="signals_return">
<col width="300px" class="signals_name">
@@ -228,7 +228,7 @@
</div>
<div class="refsect1">
<a name="GwyGraphArea.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -294,7 +294,7 @@ gwy_graph_area_get_label (<em class="parameter"><code><a class="link" href="GwyG
<p>Gets the label inside a graph area.</p>
<div class="refsect3">
<a name="gwy-graph-area-get-label.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -321,7 +321,7 @@ gwy_graph_area_set_model (<em class="parameter"><code><a class="link" href="GwyG
<p>Sets the graph model of a graph area.</p>
<div class="refsect3">
<a name="gwy-graph-area-set-model.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -350,7 +350,7 @@ gwy_graph_area_get_model (<em class="parameter"><code><a class="link" href="GwyG
<p>Gets the model of a graph area.</p>
<div class="refsect3">
<a name="gwy-graph-area-get-model.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -378,7 +378,7 @@ gwy_graph_area_get_cursor (<em class="parameter"><code><a class="link" href="Gwy
<p>Gets mouse cursor related values within a graph area.</p>
<div class="refsect3">
<a name="gwy-graph-area-get-cursor.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -414,7 +414,7 @@ gwy_graph_area_set_x_range (<em class="parameter"><code><a class="link" href="Gw
<p>Sets the horizontal range a graph area displays.</p>
<div class="refsect3">
<a name="gwy-graph-area-set-x-range.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -450,7 +450,7 @@ gwy_graph_area_set_y_range (<em class="parameter"><code><a class="link" href="Gw
<p>Sets the vertical range a graph area displays.</p>
<div class="refsect3">
<a name="gwy-graph-area-set-y-range.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -486,7 +486,7 @@ gwy_graph_area_set_x_grid_data (<em class="parameter"><code><a class="link" href
<p>Sets the grid data on the x-axis of a graph area</p>
<div class="refsect3">
<a name="gwy-graph-area-set-x-grid-data.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -524,7 +524,7 @@ gwy_graph_area_set_y_grid_data (<em class="parameter"><code><a class="link" href
<p>Sets the grid data on the y-axis of a graph area</p>
<div class="refsect3">
<a name="gwy-graph-area-set-y-grid-data.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -561,7 +561,7 @@ gwy_graph_area_get_x_grid_data (<em class="parameter"><code><a class="link" href
<p>Gets the grid data on the x-axis of a graph area.</p>
<div class="refsect3">
<a name="gwy-graph-area-get-x-grid-data.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -596,7 +596,7 @@ gwy_graph_area_get_y_grid_data (<em class="parameter"><code><a class="link" href
<p>Gets the grid data on the y-axis of a graph area.</p>
<div class="refsect3">
<a name="gwy-graph-area-get-y-grid-data.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -634,7 +634,7 @@ therefore also selections for other modes than the currently active one can
be requested.</p>
<div class="refsect3">
<a name="gwy-graph-area-get-selection.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -675,7 +675,7 @@ gwy_graph_area_set_status (<em class="parameter"><code><a class="link" href="Gwy
(also see this function for details).</p>
<div class="refsect3">
<a name="gwy-graph-area-set-status.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -705,7 +705,7 @@ gwy_graph_area_get_status (<em class="parameter"><code><a class="link" href="Gwy
<p>See <a class="link" href="GwyGraphArea.html#gwy-graph-area-set-status" title="gwy_graph_area_set_status ()"><code class="function">gwy_graph_area_set_status()</code></a>.</p>
<div class="refsect3">
<a name="gwy-graph-area-get-status.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -737,7 +737,7 @@ gwy_graph_area_draw_on_drawable (<em class="parameter"><code><a class="link" hre
<p>Draws a graph area to a Gdk drawable.</p>
<div class="refsect3">
<a name="gwy-graph-area-draw-on-drawable.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -798,7 +798,7 @@ gwy_graph_area_export_vector (<em class="parameter"><code><a class="link" href="
<p>Creates PostScript representation of a graph area.</p>
<div class="refsect3">
<a name="gwy-graph-area-export-vector.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -851,7 +851,7 @@ mouse).</p>
Use <a class="link" href="GwyGraphArea.html#gwy-graph-area-set-selection-editable" title="gwy_graph_area_set_selection_editable ()"><code class="function">gwy_graph_area_set_selection_editable()</code></a> for that.</p>
<div class="refsect3">
<a name="gwy-graph-area-enable-user-input.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -884,7 +884,7 @@ the selection type that can be drawn on the area. However, the user cannot
modify it.</p>
<div class="refsect3">
<a name="gwy-graph-area-set-selection-editable.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -916,7 +916,7 @@ gwy_graph_area_edit_curve (<em class="parameter"><code><a class="link" href="Gwy
<p>If the dialog is already displayed, it is switched to the requested curve.</p>
<div class="refsect3">
<a name="gwy-graph-area-edit-curve.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -980,7 +980,7 @@ user_function (<a class="link" href="GwyGraphArea.html" title="GwyGraphArea"><sp
edited.</p>
<div class="refsect3">
<a name="GwyGraphArea-edit-curve.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwydgets/html/GwyGraphCorner.html b/devel-docs/libgwydgets/html/GwyGraphCorner.html
index c7205cb..2ba2e5d 100644
--- a/devel-docs/libgwydgets/html/GwyGraphCorner.html
+++ b/devel-docs/libgwydgets/html/GwyGraphCorner.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GwyGraphCorner: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="GraphWidgets.html" title="Graphs">
<link rel="prev" href="GwyGraphCurves.html" title="GwyGraphCurves">
@@ -35,7 +35,7 @@
</tr></table></div>
<div class="refsect1">
<a name="GwyGraphCorner.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -52,7 +52,7 @@
</div>
<div class="refsect1">
<a name="GwyGraphCorner.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
diff --git a/devel-docs/libgwydgets/html/GwyGraphCurveModel.html b/devel-docs/libgwydgets/html/GwyGraphCurveModel.html
index 6996271..a130e6f 100644
--- a/devel-docs/libgwydgets/html/GwyGraphCurveModel.html
+++ b/devel-docs/libgwydgets/html/GwyGraphCurveModel.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GwyGraphCurveModel: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="GraphWidgets.html" title="Graphs">
<link rel="prev" href="GwyGraphModel.html" title="GwyGraphModel">
@@ -37,7 +37,7 @@
</tr></table></div>
<div class="refsect1">
<a name="GwyGraphCurveModel.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -172,7 +172,7 @@
</div>
<div class="refsect1">
<a name="GwyGraphCurveModel.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
<colgroup>
<col width="150px" class="properties_type">
<col width="300px" class="properties_name">
@@ -221,7 +221,7 @@
</div>
<div class="refsect1">
<a name="GwyGraphCurveModel.signals"></a><h2>Signals</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
<colgroup>
<col width="150px" class="signals_return">
<col width="300px" class="signals_name">
@@ -236,7 +236,7 @@
</div>
<div class="refsect1">
<a name="GwyGraphCurveModel.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -284,7 +284,7 @@ fully reconstruct it.</p>
typecasting.</p>
<div class="refsect3">
<a name="gwy-graph-curve-model-duplicate.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -319,7 +319,7 @@ gwy_graph_curve_model_new_alike (<em class="parameter"><code><a class="link" hre
<p>Curve data are not duplicated.</p>
<div class="refsect3">
<a name="gwy-graph-curve-model-new-alike.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -356,7 +356,7 @@ can use <a class="link" href="GwyGraphCurveModel.html#gwy-graph-curve-model-enfo
recommended data point order.</div>
<div class="refsect3">
<a name="gwy-graph-curve-model-set-data.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -401,7 +401,9 @@ gwy_graph_curve_model_set_data_interleaved
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> n</code></em>);</pre>
<p>Sets curve model data from an interleaved array.</p>
<p>The array should contain interleaved abscissa and ordinate values:
-x0, x0, x1, y1, x2, y2, etc.</p>
+x0, y0, x1, y1, x2, y2, etc. You can also typecast an array of <span class="type">GwyXY</span>
+structs and pass it as <em class="parameter"><code>xydata</code></em>
+.</p>
<p>If there were calibration data in the former <em class="parameter"><code>gcmodel</code></em>
, they are removed.</p>
<div class="warning">The points should be ordered in ascending abscissa order, meaning
@@ -412,7 +414,7 @@ can use <a class="link" href="GwyGraphCurveModel.html#gwy-graph-curve-model-enfo
recommended data point order.</div>
<div class="refsect3">
<a name="gwy-graph-curve-model-set-data-interleaved.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -426,7 +428,7 @@ recommended data point order.</div>
</tr>
<tr>
<td class="parameter_name"><p>xydata</p></td>
-<td class="parameter_description"><p>X data points (array of size 2*<em class="parameter"><code>n</code></em>
+<td class="parameter_description"><p>X and Y data points (array of size 2*<em class="parameter"><code>n</code></em>
).</p></td>
<td class="parameter_annotations"> </td>
</tr>
@@ -463,7 +465,7 @@ gwy_graph_curve_model_set_data_from_dataline
, they are removed.</p>
<div class="refsect3">
<a name="gwy-graph-curve-model-set-data-from-dataline.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -506,7 +508,7 @@ disrupting the order again. See its documentation for further remarks.</p>
<p>The "data-changed" signal is emitted if the data order actually changes.</p>
<div class="refsect3">
<a name="gwy-graph-curve-model-enforce-order.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -534,7 +536,7 @@ ordered in both orders.</p>
<p>See <a class="link" href="GwyGraphCurveModel.html#gwy-graph-curve-model-enforce-order" title="gwy_graph_curve_model_enforce_order ()"><code class="function">gwy_graph_curve_model_enforce_order()</code></a> for fixing the point order.</p>
<div class="refsect3">
<a name="gwy-graph-curve-model-is-ordered.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -565,7 +567,7 @@ returned pointer is valid only so long as the curve model exists and its
data do not change.</p>
<div class="refsect3">
<a name="gwy-graph-curve-model-get-xdata.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -594,7 +596,7 @@ returned pointer is valid only so long as the curve model exists and its
data do not change.</p>
<div class="refsect3">
<a name="gwy-graph-curve-model-get-ydata.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -620,7 +622,7 @@ gwy_graph_curve_model_get_ndata (<em class="parameter"><code><a class="link" hre
<p>Gets the number of points in a graph curve model.</p>
<div class="refsect3">
<a name="gwy-graph-curve-model-get-ndata.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -655,7 +657,7 @@ and the function returns <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macr
<p>See also <a class="link" href="GwyGraphCurveModel.html#gwy-graph-curve-model-get-ranges" title="gwy_graph_curve_model_get_ranges ()"><code class="function">gwy_graph_curve_model_get_ranges()</code></a> for a more high-level function.</p>
<div class="refsect3">
<a name="gwy-graph-curve-model-get-x-range.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -704,7 +706,7 @@ and the function returns <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macr
<p>See also <a class="link" href="GwyGraphCurveModel.html#gwy-graph-curve-model-get-ranges" title="gwy_graph_curve_model_get_ranges ()"><code class="function">gwy_graph_curve_model_get_ranges()</code></a> for a more high-level function.</p>
<div class="refsect3">
<a name="gwy-graph-curve-model-get-y-range.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -765,7 +767,7 @@ logarithmical scale setup, the output arguments are untouched and <a href="/usr/
returned.</p>
<div class="refsect3">
<a name="gwy-graph-curve-model-get-ranges.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -825,7 +827,7 @@ gwy_graph_curve_model_get_calibration_data
<p>Get pointer to actual calibration data for curve.</p>
<div class="refsect3">
<a name="gwy-graph-curve-model-get-calibration-data.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -856,7 +858,7 @@ gwy_graph_curve_model_set_calibration_data
.</p>
<div class="refsect3">
<a name="gwy-graph-curve-model-set-calibration-data.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -970,7 +972,7 @@ user_function (<a class="link" href="GwyGraphCurveModel.html" title="GwyGraphCur
a function like <a class="link" href="GwyGraphCurveModel.html#gwy-graph-curve-model-set-data" title="gwy_graph_curve_model_set_data ()"><code class="function">gwy_graph_curve_model_set_data()</code></a>.</p>
<div class="refsect3">
<a name="GwyGraphCurveModel-data-changed.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwydgets/html/GwyGraphCurves.html b/devel-docs/libgwydgets/html/GwyGraphCurves.html
index 7cd2fad..dd2aeef 100644
--- a/devel-docs/libgwydgets/html/GwyGraphCurves.html
+++ b/devel-docs/libgwydgets/html/GwyGraphCurves.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GwyGraphCurves: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="GraphWidgets.html" title="Graphs">
<link rel="prev" href="GwyGraphData.html" title="GwyGraphData">
@@ -35,7 +35,7 @@
</tr></table></div>
<div class="refsect1">
<a name="GwyGraphCurves.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -70,7 +70,7 @@
</div>
<div class="refsect1">
<a name="GwyGraphCurves.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -126,7 +126,7 @@ gwy_graph_curves_new (<em class="parameter"><code><a class="link" href="GwyGraph
changed manually.</p>
<div class="refsect3">
<a name="gwy-graph-curves-new.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -154,7 +154,7 @@ gwy_graph_curves_set_model (<em class="parameter"><code><a class="link" href="Gw
<p>Changes the graph model a graph curve list.</p>
<div class="refsect3">
<a name="gwy-graph-curves-set-model.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -184,7 +184,7 @@ gwy_graph_curves_get_model (<em class="parameter"><code><a class="link" href="Gw
<p>Gets the graph model a graph curve list displays.</p>
<div class="refsect3">
<a name="gwy-graph-curves-get-model.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwydgets/html/GwyGraphData.html b/devel-docs/libgwydgets/html/GwyGraphData.html
index 434396b..d2cd18d 100644
--- a/devel-docs/libgwydgets/html/GwyGraphData.html
+++ b/devel-docs/libgwydgets/html/GwyGraphData.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GwyGraphData: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="GraphWidgets.html" title="Graphs">
<link rel="prev" href="GwyGraphLabel.html" title="GwyGraphLabel">
@@ -35,7 +35,7 @@
</tr></table></div>
<div class="refsect1">
<a name="GwyGraphData.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -70,7 +70,7 @@
</div>
<div class="refsect1">
<a name="GwyGraphData.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -126,7 +126,7 @@ gwy_graph_data_new (<em class="parameter"><code><a class="link" href="GwyGraphMo
changed manually.</p>
<div class="refsect3">
<a name="gwy-graph-data-new.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -153,7 +153,7 @@ gwy_graph_data_set_model (<em class="parameter"><code><a class="link" href="GwyG
<p>Changes the graph model a graph data table displays.</p>
<div class="refsect3">
<a name="gwy-graph-data-set-model.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -182,7 +182,7 @@ gwy_graph_data_get_model (<em class="parameter"><code><a class="link" href="GwyG
<p>Gets the graph model a graph data table displays.</p>
<div class="refsect3">
<a name="gwy-graph-data-get-model.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwydgets/html/GwyGraphLabel.html b/devel-docs/libgwydgets/html/GwyGraphLabel.html
index 47f65c8..bb55cec 100644
--- a/devel-docs/libgwydgets/html/GwyGraphLabel.html
+++ b/devel-docs/libgwydgets/html/GwyGraphLabel.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GwyGraphLabel: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="GraphWidgets.html" title="Graphs">
<link rel="prev" href="libgwydgets-GwyGraphBasics.html" title="GwyGraphBasics">
@@ -35,7 +35,7 @@
</tr></table></div>
<div class="refsect1">
<a name="GwyGraphLabel.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -94,7 +94,7 @@
</div>
<div class="refsect1">
<a name="GwyGraphLabel.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -157,7 +157,7 @@ gwy_graph_label_set_model (<em class="parameter"><code><a class="link" href="Gwy
<p>Sets new model of a graph label.</p>
<div class="refsect3">
<a name="gwy-graph-label-set-model.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -186,7 +186,7 @@ gwy_graph_label_get_model (<em class="parameter"><code><a class="link" href="Gwy
<p>Gets the model of a graph key.</p>
<div class="refsect3">
<a name="gwy-graph-label-get-model.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -214,7 +214,7 @@ gwy_graph_label_enable_user_input (<em class="parameter"><code><a class="link" h
<p>Enables or disables user input to a graph label.</p>
<div class="refsect3">
<a name="gwy-graph-label-enable-user-input.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -250,7 +250,7 @@ gwy_graph_label_draw_on_drawable (<em class="parameter"><code><a class="link" hr
<p>draws a graph label on a drawable</p>
<div class="refsect3">
<a name="gwy-graph-label-draw-on-drawable.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -315,7 +315,7 @@ gwy_graph_label_export_vector (<em class="parameter"><code><a class="link" href=
<p>Creates PostScript representation of a graph label.</p>
<div class="refsect3">
<a name="gwy-graph-label-export-vector.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwydgets/html/GwyGraphModel.html b/devel-docs/libgwydgets/html/GwyGraphModel.html
index c30e1d2..c41c5f8 100644
--- a/devel-docs/libgwydgets/html/GwyGraphModel.html
+++ b/devel-docs/libgwydgets/html/GwyGraphModel.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GwyGraphModel: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="GraphWidgets.html" title="Graphs">
<link rel="prev" href="GwyGraphWindow.html" title="GwyGraphWindow">
@@ -37,7 +37,7 @@
</tr></table></div>
<div class="refsect1">
<a name="GwyGraphModel.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -221,7 +221,7 @@
</div>
<div class="refsect1">
<a name="GwyGraphModel.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
<colgroup>
<col width="150px" class="properties_type">
<col width="300px" class="properties_name">
@@ -370,7 +370,7 @@
</div>
<div class="refsect1">
<a name="GwyGraphModel.signals"></a><h2>Signals</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
<colgroup>
<col width="150px" class="signals_return">
<col width="300px" class="signals_name">
@@ -392,7 +392,7 @@
</div>
<div class="refsect1">
<a name="GwyGraphModel.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -440,7 +440,7 @@ reconstruct it.</p>
typecasting.</p>
<div class="refsect3">
<a name="gwy-graph-model-duplicate.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -476,7 +476,7 @@ gwy_graph_model_new_alike (<em class="parameter"><code><a class="link" href="Gwy
Curves are not duplicated or referenced.</p>
<div class="refsect3">
<a name="gwy-graph-model-new-alike.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -502,7 +502,7 @@ gwy_graph_model_get_n_curves (<em class="parameter"><code><a class="link" href="
<p>Reports the number of curves in a graph model.</p>
<div class="refsect3">
<a name="gwy-graph-model-get-n-curves.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -529,7 +529,7 @@ gwy_graph_model_add_curve (<em class="parameter"><code><a class="link" href="Gwy
<p>Adds a new curve to a graph model.</p>
<div class="refsect3">
<a name="gwy-graph-model-add-curve.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -566,7 +566,7 @@ gwy_graph_model_remove_curve_by_description
.</p>
<div class="refsect3">
<a name="gwy-graph-model-remove-curve-by-description.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -600,7 +600,7 @@ gwy_graph_model_remove_curve (<em class="parameter"><code><a class="link" href="
<p>Removes the curve having given index.</p>
<div class="refsect3">
<a name="gwy-graph-model-remove-curve.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -631,7 +631,7 @@ gwy_graph_model_get_curve_by_description
<p>Finds a graph curve model in a graph model by its description.</p>
<div class="refsect3">
<a name="gwy-graph-model-get-curve-by-description.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -666,7 +666,7 @@ gwy_graph_model_get_curve (<em class="parameter"><code><a class="link" href="Gwy
<p>Gets a graph curve model in a graph model by its index.</p>
<div class="refsect3">
<a name="gwy-graph-model-get-curve.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -701,7 +701,7 @@ gwy_graph_model_get_curve_index (<em class="parameter"><code><a class="link" hre
<p>Finds the index of a graph model curve.</p>
<div class="refsect3">
<a name="gwy-graph-model-get-curve-index.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -737,7 +737,7 @@ gwy_graph_model_remove_all_curves (<em class="parameter"><code><a class="link" h
<p>Removes all the curves from graph model</p>
<div class="refsect3">
<a name="gwy-graph-model-remove-all-curves.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -774,7 +774,7 @@ in <em class="parameter"><code>gmodel</code></em>
couples of curves (e.g. data and fit) that should have the same color, etc.</p>
<div class="refsect3">
<a name="gwy-graph-model-append-curves.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -811,7 +811,7 @@ gwy_graph_model_set_units_from_data_line
<p>Sets x and y graph model units to match a data line.</p>
<div class="refsect3">
<a name="gwy-graph-model-set-units-from-data-line.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -843,7 +843,7 @@ gwy_graph_model_units_are_compatible (<em class="parameter"><code><a class="link
graphs.</p>
<div class="refsect3">
<a name="gwy-graph-model-units-are-compatible.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -879,7 +879,7 @@ gwy_graph_model_x_data_can_be_logarithmed
<p>Checks whehter x axis can be lograrithmed.</p>
<div class="refsect3">
<a name="gwy-graph-model-x-data-can-be-logarithmed.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -907,7 +907,7 @@ gwy_graph_model_y_data_can_be_logarithmed
<p>Checks whehter y axis can be lograrithmed.</p>
<div class="refsect3">
<a name="gwy-graph-model-y-data-can-be-logarithmed.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -936,7 +936,7 @@ gwy_graph_model_set_axis_label (<em class="parameter"><code><a class="link" href
<p>Sets one axis label of a graph model.</p>
<div class="refsect3">
<a name="gwy-graph-model-set-axis-label.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -971,7 +971,7 @@ gwy_graph_model_get_axis_label (<em class="parameter"><code><a class="link" href
<p>Gets the label of a one graph model axis.</p>
<div class="refsect3">
<a name="gwy-graph-model-get-axis-label.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1008,7 +1008,7 @@ gwy_graph_model_get_x_range (<em class="parameter"><code><a class="link" href="G
values calculated from curve abscissa ranges.</p>
<div class="refsect3">
<a name="gwy-graph-model-get-x-range.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1051,7 +1051,7 @@ gwy_graph_model_get_y_range (<em class="parameter"><code><a class="link" href="G
values calculated from curve ordinate ranges.</p>
<div class="refsect3">
<a name="gwy-graph-model-get-y-range.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1097,7 +1097,7 @@ gwy_graph_model_get_ranges (<em class="parameter"><code><a class="link" href="Gw
<p>See <a class="link" href="GwyGraphCurveModel.html#gwy-graph-curve-model-get-ranges" title="gwy_graph_curve_model_get_ranges ()"><code class="function">gwy_graph_curve_model_get_ranges()</code></a> for discussion.</p>
<div class="refsect3">
<a name="gwy-graph-model-get-ranges.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1164,7 +1164,7 @@ gwy_graph_model_export_ascii (<em class="parameter"><code><a class="link" href="
.</p>
<div class="refsect3">
<a name="gwy-graph-model-export-ascii.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1469,7 +1469,7 @@ user_function (<a class="link" href="GwyGraphModel.html" title="GwyGraphModel"><
in a graph model emits <a class="link" href="GwyGraphCurveModel.html#GwyGraphCurveModel-data-changed" title="The “data-changed” signal"><span class="type">“data-changed”</span></a>.</p>
<div class="refsect3">
<a name="GwyGraphModel-curve-data-changed.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1508,7 +1508,7 @@ user_function (<a class="link" href="GwyGraphModel.html" title="GwyGraphModel"><
in a graph model emits <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GObject-notify"><span class="type">“notify”</span></a>.</p>
<div class="refsect3">
<a name="GwyGraphModel-curve-notify.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwydgets/html/GwyGraphWindow.html b/devel-docs/libgwydgets/html/GwyGraphWindow.html
index bb9b5ef..04a47e5 100644
--- a/devel-docs/libgwydgets/html/GwyGraphWindow.html
+++ b/devel-docs/libgwydgets/html/GwyGraphWindow.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GwyGraphWindow: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="GraphWidgets.html" title="Graphs">
<link rel="prev" href="GwyGraph.html" title="GwyGraph">
@@ -35,7 +35,7 @@
</tr></table></div>
<div class="refsect1">
<a name="GwyGraphWindow.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -94,7 +94,7 @@
</div>
<div class="refsect1">
<a name="GwyGraphWindow.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -150,7 +150,7 @@ gwy_graph_window_new (<em class="parameter"><code><a class="link" href="GwyGraph
.</p>
<div class="refsect3">
<a name="gwy-graph-window-new.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -176,7 +176,7 @@ gwy_graph_window_get_graph (<em class="parameter"><code><a class="link" href="Gw
<p>Gets the graph widget a graph window currently shows.</p>
<div class="refsect3">
<a name="gwy-graph-window-get-graph.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -202,7 +202,7 @@ gwy_graph_window_get_graph_data (<em class="parameter"><code><a class="link" hre
<p>Gets the graph data widget of a graph window.</p>
<div class="refsect3">
<a name="gwy-graph-window-get-graph-data.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -230,7 +230,7 @@ gwy_graph_window_get_graph_curves (<em class="parameter"><code><a class="link" h
<p>Gets the graph curves widget of a graph window.</p>
<div class="refsect3">
<a name="gwy-graph-window-get-graph-curves.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -265,7 +265,7 @@ the class instantiates one on its own. You can normally obtain it with
the tooltips in either case.</p>
<div class="refsect3">
<a name="gwy-graph-window-class-set-tooltips.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwydgets/html/GwyHMarkerBox.html b/devel-docs/libgwydgets/html/GwyHMarkerBox.html
index d6b0e55..ef934bd 100644
--- a/devel-docs/libgwydgets/html/GwyHMarkerBox.html
+++ b/devel-docs/libgwydgets/html/GwyHMarkerBox.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GwyHMarkerBox: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="GeneralWidgets.html" title="General Widgets">
<link rel="prev" href="GwyMarkerBox.html" title="GwyMarkerBox">
@@ -35,7 +35,7 @@
</tr></table></div>
<div class="refsect1">
<a name="GwyHMarkerBox.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -52,7 +52,7 @@
</div>
<div class="refsect1">
<a name="GwyHMarkerBox.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
diff --git a/devel-docs/libgwydgets/html/GwyHRuler.html b/devel-docs/libgwydgets/html/GwyHRuler.html
index 8c4509f..80fc52a 100644
--- a/devel-docs/libgwydgets/html/GwyHRuler.html
+++ b/devel-docs/libgwydgets/html/GwyHRuler.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GwyHRuler: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="GeneralWidgets.html" title="General Widgets">
<link rel="prev" href="GwyRuler.html" title="GwyRuler">
@@ -35,7 +35,7 @@
</tr></table></div>
<div class="refsect1">
<a name="GwyHRuler.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -52,7 +52,7 @@
</div>
<div class="refsect1">
<a name="GwyHRuler.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
diff --git a/devel-docs/libgwydgets/html/GwyInventoryStore.html b/devel-docs/libgwydgets/html/GwyInventoryStore.html
index 9d81182..148c3ca 100644
--- a/devel-docs/libgwydgets/html/GwyInventoryStore.html
+++ b/devel-docs/libgwydgets/html/GwyInventoryStore.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GwyInventoryStore: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="GeneralWidgets.html" title="General Widgets">
<link rel="prev" href="GwyShader.html" title="GwyShader">
@@ -35,7 +35,7 @@
</tr></table></div>
<div class="refsect1">
<a name="GwyInventoryStore.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -86,7 +86,7 @@
</div>
<div class="refsect1">
<a name="GwyInventoryStore.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -141,7 +141,7 @@ gwy_inventory_store_new (<em class="parameter"><code><a href="../GwyInventory.ht
<p>Creates a new <a href="http://developer.gnome.org/doc/API/2.0/gtk/gtk3GtkTreeModel.html#GtkTreeModel-struct"><span class="type">GtkTreeModel</span></a> wrapper around a <a href="../GwyInventory.html#GwyInventory-struct"><span class="type">GwyInventory</span></a>.</p>
<div class="refsect3">
<a name="gwy-inventory-store-new.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -167,7 +167,7 @@ gwy_inventory_store_get_inventory (<em class="parameter"><code><a class="link" h
<p>Gets the inventory a inventory store wraps.</p>
<div class="refsect3">
<a name="gwy-inventory-store-get-inventory.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -198,7 +198,7 @@ gwy_inventory_store_get_column_by_name
<code class="literal">"item"</code> which always works (and always maps to 0).</p>
<div class="refsect3">
<a name="gwy-inventory-store-get-column-by-name.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -233,7 +233,7 @@ gwy_inventory_store_get_iter (<em class="parameter"><code><a class="link" href="
<p>Initializes a tree iterator to row corresponding to a inventory item.</p>
<div class="refsect3">
<a name="gwy-inventory-store-get-iter.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -277,7 +277,7 @@ gwy_inventory_store_iter_is_valid (<em class="parameter"><code><a class="link" h
purposes.</div>
<div class="refsect3">
<a name="gwy-inventory-store-iter-is-valid.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwydgets/html/GwyLayerBasic.html b/devel-docs/libgwydgets/html/GwyLayerBasic.html
index 5656b89..2fd5a3c 100644
--- a/devel-docs/libgwydgets/html/GwyLayerBasic.html
+++ b/devel-docs/libgwydgets/html/GwyLayerBasic.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GwyLayerBasic: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="DataWindowWidgets.html" title="Data Windows and Views">
<link rel="prev" href="GwyVectorLayer.html" title="GwyVectorLayer">
@@ -36,7 +36,7 @@
</tr></table></div>
<div class="refsect1">
<a name="GwyLayerBasic.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -139,7 +139,7 @@
</div>
<div class="refsect1">
<a name="GwyLayerBasic.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
<colgroup>
<col width="150px" class="properties_type">
<col width="300px" class="properties_name">
@@ -180,7 +180,7 @@
</div>
<div class="refsect1">
<a name="GwyLayerBasic.signals"></a><h2>Signals</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
<colgroup>
<col width="150px" class="signals_return">
<col width="300px" class="signals_name">
@@ -195,7 +195,7 @@
</div>
<div class="refsect1">
<a name="GwyLayerBasic.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -263,7 +263,7 @@ ther range corresponding to the underlying data even if a presentation is
shown instead.</p>
<div class="refsect3">
<a name="gwy-layer-basic-get-range.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -297,7 +297,7 @@ gwy_layer_basic_get_range_type (<em class="parameter"><code><a class="link" href
<p>Gets the current color mapping mode.</p>
<div class="refsect3">
<a name="gwy-layer-basic-get-range-type.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -325,7 +325,7 @@ gwy_layer_basic_set_gradient_key (<em class="parameter"><code><a class="link" hr
<p>Sets the container key of the colour gradient to use to visualize data.</p>
<div class="refsect3">
<a name="gwy-layer-basic-set-gradient-key.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -354,7 +354,7 @@ gwy_layer_basic_get_gradient_key (<em class="parameter"><code><a class="link" hr
<p>Gets key identifying color gradient.</p>
<div class="refsect3">
<a name="gwy-layer-basic-get-gradient-key.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -385,7 +385,7 @@ values, it determines physical dimensions, etc. When a data field is set
with this method, it is displayed instead of the actual data.</p>
<div class="refsect3">
<a name="gwy-layer-basic-set-presentation-key.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -415,7 +415,7 @@ gwy_layer_basic_get_presentation_key (<em class="parameter"><code><a class="link
<p>See <a class="link" href="GwyLayerBasic.html#gwy-layer-basic-set-presentation-key" title="gwy_layer_basic_set_presentation_key ()"><code class="function">gwy_layer_basic_set_presentation_key()</code></a> for details.</p>
<div class="refsect3">
<a name="gwy-layer-basic-get-presentation-key.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -441,7 +441,7 @@ gwy_layer_basic_get_has_presentation (<em class="parameter"><code><a class="link
<p>Tests whether a basic layer displays a presentation instead of the data.</p>
<div class="refsect3">
<a name="gwy-layer-basic-get-has-presentation.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -469,7 +469,7 @@ gwy_layer_basic_set_min_max_key (<em class="parameter"><code><a class="link" hre
<p>Sets basic layer fixed range minimum and maximum.</p>
<div class="refsect3">
<a name="gwy-layer-basic-set-min-max-key.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -500,7 +500,7 @@ gwy_layer_basic_get_min_max_key (<em class="parameter"><code><a class="link" hre
<p>Gets prefix identifying fixed range minimum and maximum.</p>
<div class="refsect3">
<a name="gwy-layer-basic-get-min-max-key.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -528,7 +528,7 @@ gwy_layer_basic_set_range_type_key (<em class="parameter"><code><a class="link"
data.</p>
<div class="refsect3">
<a name="gwy-layer-basic-set-range-type-key.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -557,7 +557,7 @@ gwy_layer_basic_get_range_type_key (<em class="parameter"><code><a class="link"
<p>Gets key identifying color range mapping type.</p>
<div class="refsect3">
<a name="gwy-layer-basic-get-range-type-key.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -658,7 +658,7 @@ starts displaying a presentation, or conversely when it stops displaying
a presentation.</p>
<div class="refsect3">
<a name="GwyLayerBasic-presentation-switched.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwydgets/html/GwyLayerMask.html b/devel-docs/libgwydgets/html/GwyLayerMask.html
index 0db8f55..eb132f1 100644
--- a/devel-docs/libgwydgets/html/GwyLayerMask.html
+++ b/devel-docs/libgwydgets/html/GwyLayerMask.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GwyLayerMask: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="DataWindowWidgets.html" title="Data Windows and Views">
<link rel="prev" href="GwyLayerBasic.html" title="GwyLayerBasic">
@@ -35,7 +35,7 @@
</tr></table></div>
<div class="refsect1">
<a name="GwyLayerMask.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -77,7 +77,7 @@
</div>
<div class="refsect1">
<a name="GwyLayerMask.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
<colgroup>
<col width="150px" class="properties_type">
<col width="300px" class="properties_name">
@@ -93,7 +93,7 @@
</div>
<div class="refsect1">
<a name="GwyLayerMask.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -156,7 +156,7 @@ gwy_layer_mask_set_color_key (<em class="parameter"><code><a class="link" href="
<p>Sets the container key of colour components of a mask layer.</p>
<div class="refsect3">
<a name="gwy-layer-mask-set-color-key.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -187,7 +187,7 @@ gwy_layer_mask_get_color_key (<em class="parameter"><code><a class="link" href="
<p>Gets prefix identifying color components.</p>
<div class="refsect3">
<a name="gwy-layer-mask-get-color-key.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -213,7 +213,7 @@ gwy_layer_mask_get_color (<em class="parameter"><code><a class="link" href="GwyL
<p>Returns the color used by a mask layer.</p>
<div class="refsect3">
<a name="gwy-layer-mask-get-color.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwydgets/html/GwyMarkerBox.html b/devel-docs/libgwydgets/html/GwyMarkerBox.html
index 17da9f4..baa4fbd 100644
--- a/devel-docs/libgwydgets/html/GwyMarkerBox.html
+++ b/devel-docs/libgwydgets/html/GwyMarkerBox.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GwyMarkerBox: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="GeneralWidgets.html" title="General Widgets">
<link rel="prev" href="GwyVRuler.html" title="GwyVRuler">
@@ -37,7 +37,7 @@
</tr></table></div>
<div class="refsect1">
<a name="GwyMarkerBox.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -175,7 +175,7 @@
</div>
<div class="refsect1">
<a name="GwyMarkerBox.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
<colgroup>
<col width="150px" class="properties_type">
<col width="300px" class="properties_name">
@@ -202,7 +202,7 @@
</div>
<div class="refsect1">
<a name="GwyMarkerBox.signals"></a><h2>Signals</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
<colgroup>
<col width="150px" class="signals_return">
<col width="300px" class="signals_name">
@@ -239,7 +239,7 @@
</div>
<div class="refsect1">
<a name="GwyMarkerBox.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -419,7 +419,7 @@ a marker at 0.0 and another at 1.0 could look:</p>
<div class="refsect3">
<a name="GwyMarkerValidateFunc.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -469,7 +469,7 @@ gwy_marker_box_get_selected_marker (<em class="parameter"><code><a class="link"
box.</p>
<div class="refsect3">
<a name="gwy-marker-box-get-selected-marker.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -497,7 +497,7 @@ gwy_marker_box_set_selected_marker (<em class="parameter"><code><a class="link"
<p>Selects a marker in a marker box.</p>
<div class="refsect3">
<a name="gwy-marker-box-set-selected-marker.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -527,7 +527,7 @@ gwy_marker_box_get_marker_position (<em class="parameter"><code><a class="link"
<p>Gets the position of a marker in a marker box.</p>
<div class="refsect3">
<a name="gwy-marker-box-get-marker-position.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -562,7 +562,7 @@ gwy_marker_box_set_marker_position (<em class="parameter"><code><a class="link"
<p>Moves a marker in a marker box.</p>
<div class="refsect3">
<a name="gwy-marker-box-set-marker-position.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -603,7 +603,7 @@ gwy_marker_box_add_marker (<em class="parameter"><code><a class="link" href="Gwy
<p>Adds a marker to a marker box.</p>
<div class="refsect3">
<a name="gwy-marker-box-add-marker.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -643,7 +643,7 @@ gwy_marker_box_remove_marker (<em class="parameter"><code><a class="link" href="
<p>Removes a marker from a marker box.</p>
<div class="refsect3">
<a name="gwy-marker-box-remove-marker.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -677,7 +677,7 @@ gwy_marker_box_get_nmarkers (<em class="parameter"><code><a class="link" href="G
<p>Gets the number of markers in a marker box.</p>
<div class="refsect3">
<a name="gwy-marker-box-get-nmarkers.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -703,7 +703,7 @@ gwy_marker_box_get_markers (<em class="parameter"><code><a class="link" href="Gw
<p>Gets all markers in a marker box.</p>
<div class="refsect3">
<a name="gwy-marker-box-get-markers.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -736,7 +736,7 @@ gwy_marker_box_set_markers (<em class="parameter"><code><a class="link" href="Gw
set markers that do not logically conflict with the validator.</p>
<div class="refsect3">
<a name="gwy-marker-box-set-markers.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -772,7 +772,7 @@ gwy_marker_box_set_flipped (<em class="parameter"><code><a class="link" href="Gw
<p>Sets whether a marker box is drawn upside down.</p>
<div class="refsect3">
<a name="gwy-marker-box-set-flipped.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -801,7 +801,7 @@ gwy_marker_box_get_flipped (<em class="parameter"><code><a class="link" href="Gw
<p>Returns whether a marker box is drawn upside down.</p>
<div class="refsect3">
<a name="gwy-marker-box-get-flipped.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -828,7 +828,7 @@ gwy_marker_box_set_highlight_selected (<em class="parameter"><code><a class="lin
<p>Sets whether a marker box highlights selected marker.</p>
<div class="refsect3">
<a name="gwy-marker-box-set-highlight-selected.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -858,7 +858,7 @@ gwy_marker_box_get_highlight_selected (<em class="parameter"><code><a class="lin
<p>Returns whether a marker box highlights selected marker.</p>
<div class="refsect3">
<a name="gwy-marker-box-get-highlight-selected.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -889,7 +889,7 @@ revalidation is done immediately. It's up to caller to set a validator
that do not logically conflict with the distribution of markers.</p>
<div class="refsect3">
<a name="gwy-marker-box-set-validator.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -918,7 +918,7 @@ gwy_marker_box_get_validator (<em class="parameter"><code><a class="link" href="
<p>Gets the marker validation function currently in use.</p>
<div class="refsect3">
<a name="gwy-marker-box-get-validator.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1010,7 +1010,7 @@ user_function (<a class="link" href="GwyMarkerBox.html" title="GwyMarkerBox"><sp
<p>The ::marker-added signal is emitted when a marker is added.</p>
<div class="refsect3">
<a name="GwyMarkerBox-marker-added.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1047,7 +1047,7 @@ user_function (<a class="link" href="GwyMarkerBox.html" title="GwyMarkerBox"><sp
<p>The ::marker-moved signal is emitted when a marker is moved.</p>
<div class="refsect3">
<a name="GwyMarkerBox-marker-moved.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1084,7 +1084,7 @@ user_function (<a class="link" href="GwyMarkerBox.html" title="GwyMarkerBox"><sp
<p>The ::marker-removed signal is emitted when a marker is removed.</p>
<div class="refsect3">
<a name="GwyMarkerBox-marker-removed.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1121,7 +1121,7 @@ user_function (<a class="link" href="GwyMarkerBox.html" title="GwyMarkerBox"><sp
<p>The ::marker-selected signal is emitted when marker selection changes.</p>
<div class="refsect3">
<a name="GwyMarkerBox-marker-selected.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1158,7 +1158,7 @@ user_function (<a class="link" href="GwyMarkerBox.html" title="GwyMarkerBox"><sp
with <a class="link" href="GwyMarkerBox.html#gwy-marker-box-set-markers" title="gwy_marker_box_set_markers ()"><code class="function">gwy_marker_box_set_markers()</code></a>.</p>
<div class="refsect3">
<a name="GwyMarkerBox-markers-set.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwydgets/html/GwyNullStore.html b/devel-docs/libgwydgets/html/GwyNullStore.html
index 2a648fd..b513d3f 100644
--- a/devel-docs/libgwydgets/html/GwyNullStore.html
+++ b/devel-docs/libgwydgets/html/GwyNullStore.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GwyNullStore: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="GeneralWidgets.html" title="General Widgets">
<link rel="prev" href="GwyInventoryStore.html" title="GwyInventoryStore">
@@ -35,7 +35,7 @@
</tr></table></div>
<div class="refsect1">
<a name="GwyNullStore.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -102,7 +102,7 @@
</div>
<div class="refsect1">
<a name="GwyNullStore.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -262,7 +262,7 @@ gwy_null_store_new (<em class="parameter"><code><a href="/usr/share/gtk-doc/html
<p>Creates a new <a href="/usr/share/gtk-doc/html/gtk3GtkTreeModel.html#GtkTreeModel-struct"><span class="type">GtkTreeModel</span></a> wrapper around nothing.</p>
<div class="refsect3">
<a name="gwy-null-store-new.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -290,7 +290,7 @@ gwy_null_store_get_n_rows (<em class="parameter"><code><a class="link" href="Gwy
<a href="/usr/share/gtk-doc/html/gtk3GtkTreeModel.html#gtk-tree-model-iter-n-children"><code class="function">gtk_tree_model_iter_n_children()</code></a>.</p>
<div class="refsect3">
<a name="gwy-null-store-get-n-rows.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -325,7 +325,7 @@ the requested number of rows is reached.</p>
from its view(s), change the number of rows, and then reconnect.</p>
<div class="refsect3">
<a name="gwy-null-store-set-n-rows.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -354,7 +354,7 @@ gwy_null_store_get_model (<em class="parameter"><code><a class="link" href="GwyN
<p>Gets the model pointer of a null store.</p>
<div class="refsect3">
<a name="gwy-null-store-get-model.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -392,7 +392,7 @@ creation (null stores are cheap).</p>
suit your needs.</p>
<div class="refsect3">
<a name="gwy-null-store-set-model.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -431,7 +431,7 @@ gwy_null_store_row_changed (<em class="parameter"><code><a class="link" href="Gw
achieved with <a href="/usr/share/gtk-doc/html/gtk3GtkTreeModel.html#gtk-tree-model-row-changed"><code class="function">gtk_tree_model_row_changed()</code></a>.</p>
<div class="refsect3">
<a name="gwy-null-store-row-changed.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -461,7 +461,7 @@ gwy_null_store_iter_is_valid (<em class="parameter"><code><a class="link" href="
<p>Checks if the given iter is a valid iter for this null store.</p>
<div class="refsect3">
<a name="gwy-null-store-iter-is-valid.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwydgets/html/GwyPixmapLayer.html b/devel-docs/libgwydgets/html/GwyPixmapLayer.html
index d16c057..b20a048 100644
--- a/devel-docs/libgwydgets/html/GwyPixmapLayer.html
+++ b/devel-docs/libgwydgets/html/GwyPixmapLayer.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GwyPixmapLayer: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="DataWindowWidgets.html" title="Data Windows and Views">
<link rel="prev" href="GwyDataViewLayer.html" title="GwyDataViewLayer">
@@ -35,7 +35,7 @@
</tr></table></div>
<div class="refsect1">
<a name="GwyPixmapLayer.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -85,7 +85,7 @@
</div>
<div class="refsect1">
<a name="GwyPixmapLayer.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
<colgroup>
<col width="150px" class="properties_type">
<col width="300px" class="properties_name">
@@ -101,7 +101,7 @@
</div>
<div class="refsect1">
<a name="GwyPixmapLayer.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -154,7 +154,7 @@ gwy_pixmap_layer_wants_repaint (<em class="parameter"><code><a class="link" href
<p>Checks whether a pixmap layer wants repaint.</p>
<div class="refsect3">
<a name="gwy-pixmap-layer-wants-repaint.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -183,7 +183,7 @@ to repaint the pixbuf, it simply returns the current one. To enforce
update, emit "data-changed" signal on corresponding data field.</p>
<div class="refsect3">
<a name="gwy-pixmap-layer-paint.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -211,7 +211,7 @@ gwy_pixmap_layer_set_data_key (<em class="parameter"><code><a class="link" href=
<p>Sets the data field to display by a pixmap layer.</p>
<div class="refsect3">
<a name="gwy-pixmap-layer-set-data-key.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -240,7 +240,7 @@ gwy_pixmap_layer_get_data_key (<em class="parameter"><code><a class="link" href=
<p>Gets the key identifying data field this pixmap layer displays.</p>
<div class="refsect3">
<a name="gwy-pixmap-layer-get-data-key.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -268,7 +268,7 @@ gwy_pixmap_layer_make_pixbuf (<em class="parameter"><code><a class="link" href="
<p>This method is intended for pixmap layer implementation.</p>
<div class="refsect3">
<a name="gwy-pixmap-layer-make-pixbuf.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwydgets/html/GwyRuler.html b/devel-docs/libgwydgets/html/GwyRuler.html
index ab76765..f5c7ef0 100644
--- a/devel-docs/libgwydgets/html/GwyRuler.html
+++ b/devel-docs/libgwydgets/html/GwyRuler.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GwyRuler: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="GeneralWidgets.html" title="General Widgets">
<link rel="prev" href="GwyCurve.html" title="GwyCurve">
@@ -36,7 +36,7 @@
</tr></table></div>
<div class="refsect1">
<a name="GwyRuler.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -103,7 +103,7 @@
</div>
<div class="refsect1">
<a name="GwyRuler.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
<colgroup>
<col width="150px" class="properties_type">
<col width="300px" class="properties_name">
@@ -140,7 +140,7 @@
</div>
<div class="refsect1">
<a name="GwyRuler.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -201,7 +201,7 @@ gwy_ruler_set_range (<em class="parameter"><code><a class="link" href="GwyRuler.
<p>Sets range and current value of a ruler.</p>
<div class="refsect3">
<a name="gwy-ruler-set-range.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -246,7 +246,7 @@ gwy_ruler_draw_pos (<em class="parameter"><code><a class="link" href="GwyRuler.h
<p>This method is intended primarily for subclass implementation.</p>
<div class="refsect3">
<a name="gwy-ruler-draw-pos.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -273,7 +273,7 @@ gwy_ruler_get_range (<em class="parameter"><code><a class="link" href="GwyRuler.
See <a class="link" href="GwyRuler.html#gwy-ruler-set-range" title="gwy_ruler_set_range ()"><code class="function">gwy_ruler_set_range()</code></a>.</p>
<div class="refsect3">
<a name="gwy-ruler-get-range.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -321,7 +321,7 @@ gwy_ruler_set_si_unit (<em class="parameter"><code><a class="link" href="GwyRule
<p>Setting units to <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> effectively disables them.</p>
<div class="refsect3">
<a name="gwy-ruler-set-si-unit.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -350,7 +350,7 @@ gwy_ruler_get_si_unit (<em class="parameter"><code><a class="link" href="GwyRule
<p>Returns the base units a ruler uses.</p>
<div class="refsect3">
<a name="gwy-ruler-get-si-unit.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -377,7 +377,7 @@ gwy_ruler_get_units_placement (<em class="parameter"><code><a class="link" href=
.</p>
<div class="refsect3">
<a name="gwy-ruler-get-units-placement.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -404,7 +404,7 @@ gwy_ruler_set_units_placement (<em class="parameter"><code><a class="link" href=
<p>Sets whether and where units should be placed on the ruler.</p>
<div class="refsect3">
<a name="gwy-ruler-set-units-placement.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwydgets/html/GwySciText.html b/devel-docs/libgwydgets/html/GwySciText.html
index 230fc5a..09c696e 100644
--- a/devel-docs/libgwydgets/html/GwySciText.html
+++ b/devel-docs/libgwydgets/html/GwySciText.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GwySciText: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="GeneralWidgets.html" title="General Widgets">
<link rel="prev" href="GwyHMarkerBox.html" title="GwyHMarkerBox">
@@ -37,7 +37,7 @@
</tr></table></div>
<div class="refsect1">
<a name="GwySciText.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -96,7 +96,7 @@
</div>
<div class="refsect1">
<a name="GwySciText.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
<colgroup>
<col width="150px" class="properties_type">
<col width="300px" class="properties_name">
@@ -111,7 +111,7 @@
</div>
<div class="refsect1">
<a name="GwySciText.signals"></a><h2>Signals</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
<colgroup>
<col width="150px" class="signals_return">
<col width="300px" class="signals_name">
@@ -126,7 +126,7 @@
</div>
<div class="refsect1">
<a name="GwySciText.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -190,7 +190,7 @@ gwy_sci_text_get_text (<em class="parameter"><code><a class="link" href="GwySciT
<p>The text is already in UTF-8 with all entities converted.</p>
<div class="refsect3">
<a name="gwy-sci-text-get-text.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -221,7 +221,7 @@ known entities are converted to entities, other characters are left as they
are.</p>
<div class="refsect3">
<a name="gwy-sci-text-set-text.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -250,7 +250,7 @@ gwy_sci_text_get_has_preview (<em class="parameter"><code><a class="link" href="
<p>Tests the display of a preview in a scientific text entry.</p>
<div class="refsect3">
<a name="gwy-sci-text-get-has-preview.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -277,7 +277,7 @@ gwy_sci_text_set_has_preview (<em class="parameter"><code><a class="link" href="
<p>Sets the display of a preview in a scientific text entry.</p>
<div class="refsect3">
<a name="gwy-sci-text-set-has-preview.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -306,7 +306,7 @@ gwy_sci_text_get_entry (<em class="parameter"><code><a class="link" href="GwySci
<p>Gets the entry widget of a scientific text entry.</p>
<div class="refsect3">
<a name="gwy-sci-text-get-entry.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -369,7 +369,7 @@ contents, you can use <a class="link" href="GwySciText.html#gwy-sci-text-get-ent
connect to its signal.</p>
<div class="refsect3">
<a name="GwySciText-edited.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwydgets/html/GwySelectionGraph1DArea.html b/devel-docs/libgwydgets/html/GwySelectionGraph1DArea.html
index 8240c95..d3ee252 100644
--- a/devel-docs/libgwydgets/html/GwySelectionGraph1DArea.html
+++ b/devel-docs/libgwydgets/html/GwySelectionGraph1DArea.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GwySelectionGraph1DArea: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="GraphWidgets.html" title="Graphs">
<link rel="prev" href="GwyGraphCorner.html" title="GwyGraphCorner">
@@ -36,7 +36,7 @@
</tr></table></div>
<div class="refsect1">
<a name="GwySelectionGraph1DArea.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -53,7 +53,7 @@
</div>
<div class="refsect1">
<a name="GwySelectionGraph1DArea.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
<colgroup>
<col width="150px" class="properties_type">
<col width="300px" class="properties_name">
@@ -68,7 +68,7 @@
</div>
<div class="refsect1">
<a name="GwySelectionGraph1DArea.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
diff --git a/devel-docs/libgwydgets/html/GwySelectionGraphArea.html b/devel-docs/libgwydgets/html/GwySelectionGraphArea.html
index c088435..d3216e3 100644
--- a/devel-docs/libgwydgets/html/GwySelectionGraphArea.html
+++ b/devel-docs/libgwydgets/html/GwySelectionGraphArea.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GwySelectionGraphArea: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="GraphWidgets.html" title="Graphs">
<link rel="prev" href="GwySelectionGraph1DArea.html" title="GwySelectionGraph1DArea">
@@ -35,7 +35,7 @@
</tr></table></div>
<div class="refsect1">
<a name="GwySelectionGraphArea.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -52,7 +52,7 @@
</div>
<div class="refsect1">
<a name="GwySelectionGraphArea.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
diff --git a/devel-docs/libgwydgets/html/GwySelectionGraphLine.html b/devel-docs/libgwydgets/html/GwySelectionGraphLine.html
index fc45c61..e941486 100644
--- a/devel-docs/libgwydgets/html/GwySelectionGraphLine.html
+++ b/devel-docs/libgwydgets/html/GwySelectionGraphLine.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GwySelectionGraphLine: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="GraphWidgets.html" title="Graphs">
<link rel="prev" href="GwySelectionGraphArea.html" title="GwySelectionGraphArea">
@@ -36,7 +36,7 @@
</tr></table></div>
<div class="refsect1">
<a name="GwySelectionGraphLine.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -53,7 +53,7 @@
</div>
<div class="refsect1">
<a name="GwySelectionGraphLine.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
<colgroup>
<col width="150px" class="properties_type">
<col width="300px" class="properties_name">
@@ -68,7 +68,7 @@
</div>
<div class="refsect1">
<a name="GwySelectionGraphLine.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
diff --git a/devel-docs/libgwydgets/html/GwySelectionGraphPoint.html b/devel-docs/libgwydgets/html/GwySelectionGraphPoint.html
index bba1c7d..43497ec 100644
--- a/devel-docs/libgwydgets/html/GwySelectionGraphPoint.html
+++ b/devel-docs/libgwydgets/html/GwySelectionGraphPoint.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GwySelectionGraphPoint: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="GraphWidgets.html" title="Graphs">
<link rel="prev" href="GwySelectionGraphLine.html" title="GwySelectionGraphLine">
@@ -35,7 +35,7 @@
</tr></table></div>
<div class="refsect1">
<a name="GwySelectionGraphPoint.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -52,7 +52,7 @@
</div>
<div class="refsect1">
<a name="GwySelectionGraphPoint.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
diff --git a/devel-docs/libgwydgets/html/GwySelectionGraphZoom.html b/devel-docs/libgwydgets/html/GwySelectionGraphZoom.html
index d1a3cc8..4361154 100644
--- a/devel-docs/libgwydgets/html/GwySelectionGraphZoom.html
+++ b/devel-docs/libgwydgets/html/GwySelectionGraphZoom.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GwySelectionGraphZoom: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="GraphWidgets.html" title="Graphs">
<link rel="prev" href="GwySelectionGraphPoint.html" title="GwySelectionGraphPoint">
@@ -35,7 +35,7 @@
</tr></table></div>
<div class="refsect1">
<a name="GwySelectionGraphZoom.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -52,7 +52,7 @@
</div>
<div class="refsect1">
<a name="GwySelectionGraphZoom.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
diff --git a/devel-docs/libgwydgets/html/GwySensitivityGroup.html b/devel-docs/libgwydgets/html/GwySensitivityGroup.html
index 49a0e40..d89a6de 100644
--- a/devel-docs/libgwydgets/html/GwySensitivityGroup.html
+++ b/devel-docs/libgwydgets/html/GwySensitivityGroup.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GwySensitivityGroup: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="WidgetUtilities.html" title="Widget Utilities">
<link rel="prev" href="libgwydgets-gwyradiobuttons.html" title="gwyradiobuttons">
@@ -34,7 +34,7 @@
</tr></table></div>
<div class="refsect1">
<a name="GwySensitivityGroup.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -109,7 +109,7 @@
</div>
<div class="refsect1">
<a name="GwySensitivityGroup.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -252,7 +252,7 @@ destroyed when they are any widgets in, generally, you can release your
initial reference after adding widgets to the group.</p>
<div class="refsect3">
<a name="gwy-sensitivity-group-add-widget.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -297,7 +297,7 @@ set in current <em class="parameter"><code>sensgroup</code></em>
is zero, widget will be always sensitive.</p>
<div class="refsect3">
<a name="gwy-sensitivity-group-set-state.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -344,7 +344,7 @@ gwy_sensitivity_group_get_state (<em class="parameter"><code><a class="link" hre
<p>Gets the current state of a widget flag sensitivity group.</p>
<div class="refsect3">
<a name="gwy-sensitivity-group-get-state.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -371,7 +371,7 @@ gwy_sensitivity_group_release_widget (<em class="parameter"><code><a class="link
<p>Removes a widget from flag sensitivity group.</p>
<div class="refsect3">
<a name="gwy-sensitivity-group-release-widget.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -402,7 +402,7 @@ gwy_sensitivity_group_get_widget_mask (<em class="parameter"><code><a class="lin
<p>Gets sensitivity flags of a widget in a flag sensitivity group.</p>
<div class="refsect3">
<a name="gwy-sensitivity-group-get-widget-mask.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -438,7 +438,7 @@ gwy_sensitivity_group_set_widget_mask (<em class="parameter"><code><a class="lin
<p>Sets the flag mask of a widget in a flag sensitivity group.</p>
<div class="refsect3">
<a name="gwy-sensitivity-group-set-widget-mask.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -474,7 +474,7 @@ gwy_sensitivity_group_contains_widget (<em class="parameter"><code><a class="lin
<p>Checks whether a widget belongs to a sensitivity group.</p>
<div class="refsect3">
<a name="gwy-sensitivity-group-contains-widget.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwydgets/html/GwyShader.html b/devel-docs/libgwydgets/html/GwyShader.html
index 1195372..7fb6b42 100644
--- a/devel-docs/libgwydgets/html/GwyShader.html
+++ b/devel-docs/libgwydgets/html/GwyShader.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GwyShader: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="GeneralWidgets.html" title="General Widgets">
<link rel="prev" href="GwyStatusbar.html" title="GwyStatusbar">
@@ -37,7 +37,7 @@
</tr></table></div>
<div class="refsect1">
<a name="GwyShader.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -127,7 +127,7 @@
</div>
<div class="refsect1">
<a name="GwyShader.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
<colgroup>
<col width="150px" class="properties_type">
<col width="300px" class="properties_name">
@@ -150,7 +150,7 @@
</div>
<div class="refsect1">
<a name="GwyShader.signals"></a><h2>Signals</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
<colgroup>
<col width="150px" class="signals_return">
<col width="300px" class="signals_name">
@@ -165,7 +165,7 @@
</div>
<div class="refsect1">
<a name="GwyShader.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -218,7 +218,7 @@ gwy_shader_new (<em class="parameter"><code>const <a href="http://developer.gnom
<p>The widget takes up all the space allocated for it.</p>
<div class="refsect3">
<a name="gwy-shader-new.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -245,7 +245,7 @@ gwy_shader_get_theta (<em class="parameter"><code><a class="link" href="GwyShade
<p>Returns the theta coordinate of a shader.</p>
<div class="refsect3">
<a name="gwy-shader-get-theta.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -272,7 +272,7 @@ gwy_shader_get_phi (<em class="parameter"><code><a class="link" href="GwyShader.
<p>Returns the phi coordinate of a shader.</p>
<div class="refsect3">
<a name="gwy-shader-get-phi.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -300,7 +300,7 @@ gwy_shader_set_theta (<em class="parameter"><code><a class="link" href="GwyShade
<p>Sets the theta coordinate of a shader.</p>
<div class="refsect3">
<a name="gwy-shader-set-theta.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -331,7 +331,7 @@ gwy_shader_set_phi (<em class="parameter"><code><a class="link" href="GwyShader.
<p>Sets the phi coordinate of a shader.</p>
<div class="refsect3">
<a name="gwy-shader-set-phi.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -362,7 +362,7 @@ gwy_shader_set_angle (<em class="parameter"><code><a class="link" href="GwyShade
<p>Sets the spherical angle of a shader.</p>
<div class="refsect3">
<a name="gwy-shader-set-angle.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -397,7 +397,7 @@ gwy_shader_get_gradient (<em class="parameter"><code><a class="link" href="GwySh
<p>Returns the name of color gradient a shader uses.</p>
<div class="refsect3">
<a name="gwy-shader-get-gradient.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -427,7 +427,7 @@ gwy_shader_set_gradient (<em class="parameter"><code><a class="link" href="GwySh
<p>Sets the gradient a shader uses.</p>
<div class="refsect3">
<a name="gwy-shader-set-gradient.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -457,7 +457,7 @@ gwy_shader_get_update_policy (<em class="parameter"><code><a class="link" href="
<p>Returns the update policy of a shader.</p>
<div class="refsect3">
<a name="gwy-shader-get-update-policy.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -484,7 +484,7 @@ gwy_shader_set_update_policy (<em class="parameter"><code><a class="link" href="
<p>Sets the update policy of a shader.</p>
<div class="refsect3">
<a name="gwy-shader-set-update-policy.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -554,7 +554,7 @@ user_function (<a class="link" href="GwyShader.html" title="GwyShader"><span cla
<p>The ::angle-changed signal is emitted when the spherical angle changes.</p>
<div class="refsect3">
<a name="GwyShader-angle-changed.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwydgets/html/GwyStatusbar.html b/devel-docs/libgwydgets/html/GwyStatusbar.html
index 69bf6ec..9a90d24 100644
--- a/devel-docs/libgwydgets/html/GwyStatusbar.html
+++ b/devel-docs/libgwydgets/html/GwyStatusbar.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GwyStatusbar: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="GeneralWidgets.html" title="General Widgets">
<link rel="prev" href="GwySciText.html" title="GwySciText">
@@ -35,7 +35,7 @@
</tr></table></div>
<div class="refsect1">
<a name="GwyStatusbar.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -62,7 +62,7 @@
</div>
<div class="refsect1">
<a name="GwyStatusbar.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -133,12 +133,12 @@ gwy_statusbar_set_markup (<em class="parameter"><code><a class="link" href="GwyS
<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *markup</code></em>);</pre>
<p>Sets the text to display in a status bar.</p>
<p>This method is intended for simple status bars that do not have stacks and
-do not need contexts. It does not mix with <code class="function">gtk_status_bar_push()</code>. You can
+do not need contexts. It does not mix with <a href="/usr/share/gtk-doc/html/gtk3GtkStatusbar.html#gtk-statusbar-push"><code class="function">gtk_statusbar_push()</code></a>. You can
use either this simple interface or the full stacks-and-contexts API with
<a class="link" href="GwyStatusbar.html" title="GwyStatusbar"><span class="type">GwyStatusbar</span></a>, but not both in the same status bar.</p>
<div class="refsect3">
<a name="gwy-statusbar-set-markup.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwydgets/html/GwyVRuler.html b/devel-docs/libgwydgets/html/GwyVRuler.html
index 1469c53..4a61081 100644
--- a/devel-docs/libgwydgets/html/GwyVRuler.html
+++ b/devel-docs/libgwydgets/html/GwyVRuler.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GwyVRuler: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="GeneralWidgets.html" title="General Widgets">
<link rel="prev" href="GwyHRuler.html" title="GwyHRuler">
@@ -35,7 +35,7 @@
</tr></table></div>
<div class="refsect1">
<a name="GwyVRuler.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -52,7 +52,7 @@
</div>
<div class="refsect1">
<a name="GwyVRuler.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
diff --git a/devel-docs/libgwydgets/html/GwyVectorLayer.html b/devel-docs/libgwydgets/html/GwyVectorLayer.html
index 9dacf5e..cc03428 100644
--- a/devel-docs/libgwydgets/html/GwyVectorLayer.html
+++ b/devel-docs/libgwydgets/html/GwyVectorLayer.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GwyVectorLayer: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="DataWindowWidgets.html" title="Data Windows and Views">
<link rel="prev" href="GwyPixmapLayer.html" title="GwyPixmapLayer">
@@ -36,7 +36,7 @@
</tr></table></div>
<div class="refsect1">
<a name="GwyVectorLayer.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -172,7 +172,7 @@
</div>
<div class="refsect1">
<a name="GwyVectorLayer.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
<colgroup>
<col width="150px" class="properties_type">
<col width="300px" class="properties_name">
@@ -200,7 +200,7 @@
</div>
<div class="refsect1">
<a name="GwyVectorLayer.signals"></a><h2>Signals</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
<colgroup>
<col width="150px" class="signals_return">
<col width="300px" class="signals_name">
@@ -215,7 +215,7 @@
</div>
<div class="refsect1">
<a name="GwyVectorLayer.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -281,7 +281,7 @@ gwy_vector_layer_class_get_selection_type
<a href="/usr/share/gtk-doc/html/gobjectgobject-Type-Information.html#GType"><span class="type">GType</span></a> one has to use <a href="/usr/share/gtk-doc/html/gobjectgobject-Type-Information.html#g-type-class-peek"><code class="function">g_type_class_peek()</code></a>.</p>
<div class="refsect3">
<a name="gwy-vector-layer-class-get-selection-type.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -309,7 +309,7 @@ gwy_vector_layer_class_get_selection_type
<a class="link" href="GwyVectorLayer.html#gwy-vector-layer-class-get-selection-type" title="gwy_vector_layer_class_get_selection_type ()"><code class="function">gwy_vector_layer_class_get_selection_type()</code></a>.</p>
<div class="refsect3">
<a name="gwy-vector-layer-get-selection-type.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -332,7 +332,7 @@ gwy_vector_layer_set_selection_key (<em class="parameter"><code><a class="link"
<p>Sets the selection object to use by a vector layer.</p>
<div class="refsect3">
<a name="gwy-vector-layer-set-selection-key.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -361,7 +361,7 @@ gwy_vector_layer_get_selection_key (<em class="parameter"><code><a class="link"
<p>Gets the key identifying selection this vector layer displays.</p>
<div class="refsect3">
<a name="gwy-vector-layer-get-selection-key.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -393,7 +393,7 @@ a selection of appropriate type is created and put to the container first.</p>
obtaining the selection object a vector layer uses too.</p>
<div class="refsect3">
<a name="gwy-vector-layer-ensure-selection.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -419,7 +419,7 @@ gwy_vector_layer_get_focus (<em class="parameter"><code><a class="link" href="Gw
<p>Gets focused object index.</p>
<div class="refsect3">
<a name="gwy-vector-layer-get-focus.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -450,7 +450,7 @@ for this object, and if the layer is editable only this object can be
modified by the user.</p>
<div class="refsect3">
<a name="gwy-vector-layer-set-focus.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -487,7 +487,7 @@ gwy_vector_layer_get_editable (<em class="parameter"><code><a class="link" href=
<p>Gets editability of a vector layer.</p>
<div class="refsect3">
<a name="gwy-vector-layer-get-editable.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -518,7 +518,7 @@ edited.</p>
However, "object-chosen" signal is still emitted.</p>
<div class="refsect3">
<a name="gwy-vector-layer-set-editable.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -550,7 +550,7 @@ gwy_vector_layer_draw (<em class="parameter"><code><a class="link" href="GwyVect
on given drawable (which should be a <a class="link" href="GwyDataView.html" title="GwyDataView"><span class="type">GwyDataView</span></a> window).</p>
<div class="refsect3">
<a name="gwy-vector-layer-draw.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -587,7 +587,7 @@ gwy_vector_layer_button_press (<em class="parameter"><code><a class="link" href=
layers. You should rarely need it.</p>
<div class="refsect3">
<a name="gwy-vector-layer-button-press.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -623,7 +623,7 @@ gwy_vector_layer_button_release (<em class="parameter"><code><a class="link" hre
layers. You should rarely need it.</p>
<div class="refsect3">
<a name="gwy-vector-layer-button-release.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -659,7 +659,7 @@ gwy_vector_layer_motion_notify (<em class="parameter"><code><a class="link" href
layers. You should rarely need it.</p>
<div class="refsect3">
<a name="gwy-vector-layer-motion-notify.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -695,7 +695,7 @@ gwy_vector_layer_key_press (<em class="parameter"><code><a class="link" href="Gw
layers. You should rarely need it.</p>
<div class="refsect3">
<a name="gwy-vector-layer-key-press.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -731,7 +731,7 @@ gwy_vector_layer_key_release (<em class="parameter"><code><a class="link" href="
layers. You should rarely need it.</p>
<div class="refsect3">
<a name="gwy-vector-layer-key-release.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -766,7 +766,7 @@ gwy_vector_layer_object_chosen (<em class="parameter"><code><a class="link" href
<p>This function is primarily intended for layer implementations.</p>
<div class="refsect3">
<a name="gwy-vector-layer-object-chosen.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -872,7 +872,7 @@ even if the layer is not editable, but it is not emitted when focus
is set and the user attempts to choose a different object.</p>
<div class="refsect3">
<a name="GwyVectorLayer-object-chosen.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwydgets/html/WidgetUtilities.html b/devel-docs/libgwydgets/html/WidgetUtilities.html
index b23e044..1be0654 100644
--- a/devel-docs/libgwydgets/html/WidgetUtilities.html
+++ b/devel-docs/libgwydgets/html/WidgetUtilities.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Widget Utilities: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="prev" href="GwyNullStore.html" title="GwyNullStore">
diff --git a/devel-docs/libgwydgets/html/Widgets3D.html b/devel-docs/libgwydgets/html/Widgets3D.html
index d8287de..2d2f676 100644
--- a/devel-docs/libgwydgets/html/Widgets3D.html
+++ b/devel-docs/libgwydgets/html/Widgets3D.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>3D Widgets: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="prev" href="GwySelectionGraphZoom.html" title="GwySelectionGraphZoom">
diff --git a/devel-docs/libgwydgets/html/api-index-2-1.html b/devel-docs/libgwydgets/html/api-index-2-1.html
index 6c679c6..eff50db 100644
--- a/devel-docs/libgwydgets/html/api-index-2-1.html
+++ b/devel-docs/libgwydgets/html/api-index-2-1.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.1: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="prev" href="api-index-deprec.html" title="Index of deprecated symbols">
diff --git a/devel-docs/libgwydgets/html/api-index-2-11.html b/devel-docs/libgwydgets/html/api-index-2-11.html
index fd63302..7c2b4dd 100644
--- a/devel-docs/libgwydgets/html/api-index-2-11.html
+++ b/devel-docs/libgwydgets/html/api-index-2-11.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.11: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="prev" href="api-index-2-8.html" title="Index of new symbols in 2.8">
diff --git a/devel-docs/libgwydgets/html/api-index-2-14.html b/devel-docs/libgwydgets/html/api-index-2-14.html
index c6e49e0..bc21db9 100644
--- a/devel-docs/libgwydgets/html/api-index-2-14.html
+++ b/devel-docs/libgwydgets/html/api-index-2-14.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.14: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="prev" href="api-index-2-11.html" title="Index of new symbols in 2.11">
diff --git a/devel-docs/libgwydgets/html/api-index-2-16.html b/devel-docs/libgwydgets/html/api-index-2-16.html
index dc5eda5..1a9636f 100644
--- a/devel-docs/libgwydgets/html/api-index-2-16.html
+++ b/devel-docs/libgwydgets/html/api-index-2-16.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.16: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="prev" href="api-index-2-14.html" title="Index of new symbols in 2.14">
diff --git a/devel-docs/libgwydgets/html/api-index-2-22.html b/devel-docs/libgwydgets/html/api-index-2-22.html
index 23cbf78..ec02749 100644
--- a/devel-docs/libgwydgets/html/api-index-2-22.html
+++ b/devel-docs/libgwydgets/html/api-index-2-22.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.22: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="prev" href="api-index-2-16.html" title="Index of new symbols in 2.16">
diff --git a/devel-docs/libgwydgets/html/api-index-2-23.html b/devel-docs/libgwydgets/html/api-index-2-23.html
index 24b6f45..92d8d20 100644
--- a/devel-docs/libgwydgets/html/api-index-2-23.html
+++ b/devel-docs/libgwydgets/html/api-index-2-23.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.23: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="prev" href="api-index-2-22.html" title="Index of new symbols in 2.22">
diff --git a/devel-docs/libgwydgets/html/api-index-2-26.html b/devel-docs/libgwydgets/html/api-index-2-26.html
index 91e0721..43373a7 100644
--- a/devel-docs/libgwydgets/html/api-index-2-26.html
+++ b/devel-docs/libgwydgets/html/api-index-2-26.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.26: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="prev" href="api-index-2-23.html" title="Index of new symbols in 2.23">
diff --git a/devel-docs/libgwydgets/html/api-index-2-29.html b/devel-docs/libgwydgets/html/api-index-2-29.html
index 78c6a3a..fad0056 100644
--- a/devel-docs/libgwydgets/html/api-index-2-29.html
+++ b/devel-docs/libgwydgets/html/api-index-2-29.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.29: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="prev" href="api-index-2-26.html" title="Index of new symbols in 2.26">
diff --git a/devel-docs/libgwydgets/html/api-index-2-3.html b/devel-docs/libgwydgets/html/api-index-2-3.html
index 99dcfab..d27ff1e 100644
--- a/devel-docs/libgwydgets/html/api-index-2-3.html
+++ b/devel-docs/libgwydgets/html/api-index-2-3.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.3: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="prev" href="api-index-2-1.html" title="Index of new symbols in 2.1">
diff --git a/devel-docs/libgwydgets/html/api-index-2-34.html b/devel-docs/libgwydgets/html/api-index-2-34.html
index 79921fd..1cb6d35 100644
--- a/devel-docs/libgwydgets/html/api-index-2-34.html
+++ b/devel-docs/libgwydgets/html/api-index-2-34.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.34: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="prev" href="api-index-2-29.html" title="Index of new symbols in 2.29">
diff --git a/devel-docs/libgwydgets/html/api-index-2-37.html b/devel-docs/libgwydgets/html/api-index-2-37.html
index 95ff8ed..499b07c 100644
--- a/devel-docs/libgwydgets/html/api-index-2-37.html
+++ b/devel-docs/libgwydgets/html/api-index-2-37.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.37: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="prev" href="api-index-2-34.html" title="Index of new symbols in 2.34">
diff --git a/devel-docs/libgwydgets/html/api-index-2-38.html b/devel-docs/libgwydgets/html/api-index-2-38.html
index db99611..4d225a3 100644
--- a/devel-docs/libgwydgets/html/api-index-2-38.html
+++ b/devel-docs/libgwydgets/html/api-index-2-38.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.38: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="prev" href="api-index-2-37.html" title="Index of new symbols in 2.37">
diff --git a/devel-docs/libgwydgets/html/api-index-2-39.html b/devel-docs/libgwydgets/html/api-index-2-39.html
index 7c5d206..540adea 100644
--- a/devel-docs/libgwydgets/html/api-index-2-39.html
+++ b/devel-docs/libgwydgets/html/api-index-2-39.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.39: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="prev" href="api-index-2-38.html" title="Index of new symbols in 2.38">
diff --git a/devel-docs/libgwydgets/html/api-index-2-41.html b/devel-docs/libgwydgets/html/api-index-2-41.html
index 5c15b80..694c1df 100644
--- a/devel-docs/libgwydgets/html/api-index-2-41.html
+++ b/devel-docs/libgwydgets/html/api-index-2-41.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.41: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="prev" href="api-index-2-39.html" title="Index of new symbols in 2.39">
diff --git a/devel-docs/libgwydgets/html/api-index-2-42.html b/devel-docs/libgwydgets/html/api-index-2-42.html
index c23ab91..ba236d0 100644
--- a/devel-docs/libgwydgets/html/api-index-2-42.html
+++ b/devel-docs/libgwydgets/html/api-index-2-42.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.42: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="prev" href="api-index-2-41.html" title="Index of new symbols in 2.41">
diff --git a/devel-docs/libgwydgets/html/api-index-2-43.html b/devel-docs/libgwydgets/html/api-index-2-43.html
index dccb3cd..b368fa0 100644
--- a/devel-docs/libgwydgets/html/api-index-2-43.html
+++ b/devel-docs/libgwydgets/html/api-index-2-43.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.43: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="prev" href="api-index-2-42.html" title="Index of new symbols in 2.42">
diff --git a/devel-docs/libgwydgets/html/api-index-2-45.html b/devel-docs/libgwydgets/html/api-index-2-45.html
index e054070..97bb03b 100644
--- a/devel-docs/libgwydgets/html/api-index-2-45.html
+++ b/devel-docs/libgwydgets/html/api-index-2-45.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.45: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="prev" href="api-index-2-43.html" title="Index of new symbols in 2.43">
diff --git a/devel-docs/libgwydgets/html/api-index-2-46.html b/devel-docs/libgwydgets/html/api-index-2-46.html
index 2295d04..5383d8c 100644
--- a/devel-docs/libgwydgets/html/api-index-2-46.html
+++ b/devel-docs/libgwydgets/html/api-index-2-46.html
@@ -3,10 +3,11 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.46: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="prev" href="api-index-2-45.html" title="Index of new symbols in 2.45">
+<link rel="next" href="api-index-2-48.html" title="Index of new symbols in 2.48">
<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
@@ -18,7 +19,7 @@
<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
<td><img src="up-insensitive.png" width="16" height="16" border="0"></td>
<td><a accesskey="p" href="api-index-2-45.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><img src="right-insensitive.png" width="16" height="16" border="0"></td>
+<td><a accesskey="n" href="api-index-2-48.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
</tr></table>
<div class="index">
<div class="titlepage"><div><div><h1 class="title">
diff --git a/devel-docs/libgwydgets/html/api-index-2-48.html b/devel-docs/libgwydgets/html/api-index-2-48.html
new file mode 100644
index 0000000..c8a8632
--- /dev/null
+++ b/devel-docs/libgwydgets/html/api-index-2-48.html
@@ -0,0 +1,70 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Index of new symbols in 2.48: Gwyddion Widgets Library Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
+<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
+<link rel="up" href="index.html" title="Gwyddion Widgets Library Reference Manual">
+<link rel="prev" href="api-index-2-46.html" title="Index of new symbols in 2.46">
+<link rel="next" href="api-index-2-49.html" title="Index of new symbols in 2.49">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts"><span id="nav_index"><a class="shortcut" href="#idxS">S</a></span></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><img src="up-insensitive.png" width="16" height="16" border="0"></td>
+<td><a accesskey="p" href="api-index-2-46.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="api-index-2-49.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="index">
+<div class="titlepage"><div><div><h1 class="title">
+<a name="api-index-2-48"></a>Index of new symbols in 2.48</h1></div></div></div>
+<a name="idx"></a><a name="idxS"></a><h3 class="title">S</h3>
+<dt>
+<a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-CORRELATION-MASK:CAPS" title="GWY_STOCK_CORRELATION_MASK">GWY_STOCK_CORRELATION_MASK</a>, macro in <a class="link" href="libgwydgets-gwystock.html" title="gwystock">gwystock</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-DISCONNECTED:CAPS" title="GWY_STOCK_DISCONNECTED">GWY_STOCK_DISCONNECTED</a>, macro in <a class="link" href="libgwydgets-gwystock.html" title="gwystock">gwystock</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-FFT-FILTER-1D:CAPS" title="GWY_STOCK_FFT_FILTER_1D">GWY_STOCK_FFT_FILTER_1D</a>, macro in <a class="link" href="libgwydgets-gwystock.html" title="gwystock">gwystock</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-FIT-SHAPE:CAPS" title="GWY_STOCK_FIT_SHAPE">GWY_STOCK_FIT_SHAPE</a>, macro in <a class="link" href="libgwydgets-gwystock.html" title="gwystock">gwystock</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-FRACTAL-CORRECTION:CAPS" title="GWY_STOCK_FRACTAL_CORRECTION">GWY_STOCK_FRACTAL_CORRECTION</a>, macro in <a class="link" href="libgwydgets-gwystock.html" title="gwystock">gwystock</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-MARK-OUTLIERS:CAPS" title="GWY_STOCK_MARK_OUTLIERS">GWY_STOCK_MARK_OUTLIERS</a>, macro in <a class="link" href="libgwydgets-gwystock.html" title="gwystock">gwystock</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-MARK-SCARS:CAPS" title="GWY_STOCK_MARK_SCARS">GWY_STOCK_MARK_SCARS</a>, macro in <a class="link" href="libgwydgets-gwystock.html" title="gwystock">gwystock</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-NULL-OFFSETS:CAPS" title="GWY_STOCK_NULL_OFFSETS">GWY_STOCK_NULL_OFFSETS</a>, macro in <a class="link" href="libgwydgets-gwystock.html" title="gwystock">gwystock</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-SYNTHETIC-PHASES:CAPS" title="GWY_STOCK_SYNTHETIC_PHASES">GWY_STOCK_SYNTHETIC_PHASES</a>, macro in <a class="link" href="libgwydgets-gwystock.html" title="gwystock">gwystock</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-XY-DENOISE:CAPS" title="GWY_STOCK_XY_DENOISE">GWY_STOCK_XY_DENOISE</a>, macro in <a class="link" href="libgwydgets-gwystock.html" title="gwystock">gwystock</a>
+</dt>
+<dd></dd>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.19</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/devel-docs/libgwydgets/html/api-index-2-49.html b/devel-docs/libgwydgets/html/api-index-2-49.html
new file mode 100644
index 0000000..8a7e625
--- /dev/null
+++ b/devel-docs/libgwydgets/html/api-index-2-49.html
@@ -0,0 +1,142 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Index of new symbols in 2.49: Gwyddion Widgets Library Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
+<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
+<link rel="up" href="index.html" title="Gwyddion Widgets Library Reference Manual">
+<link rel="prev" href="api-index-2-48.html" title="Index of new symbols in 2.48">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts"><span id="nav_index"><a class="shortcut" href="#idx3">3</a>
+ <span class="dim">|</span>
+ <a class="shortcut" href="#idxA">A</a>
+ <span class="dim">|</span>
+ <a class="shortcut" href="#idxS">S</a>
+ <span class="dim">|</span>
+ <a class="shortcut" href="#idxT">T</a></span></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><img src="up-insensitive.png" width="16" height="16" border="0"></td>
+<td><a accesskey="p" href="api-index-2-48.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><img src="right-insensitive.png" width="16" height="16" border="0"></td>
+</tr></table>
+<div class="index">
+<div class="titlepage"><div><div><h1 class="title">
+<a name="api-index-2-49"></a>Index of new symbols in 2.49</h1></div></div></div>
+<a name="idx"></a><a name="idx3"></a><h3 class="title">3</h3>
+<dt>
+<a class="link" href="Gwy3DSetup.html#Gwy3DSetup--fmscale-reserve-space" title="The “fmscale-reserve-space” property">Gwy3DSetup:fmscale-reserve-space</a>, object property in <a class="link" href="Gwy3DSetup.html" title="Gwy3DSetup">Gwy3DSetup</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="Gwy3DSetup.html#Gwy3DSetup--fmscale-size" title="The “fmscale-size” property">Gwy3DSetup:fmscale-size</a>, object property in <a class="link" href="Gwy3DSetup.html" title="Gwy3DSetup">Gwy3DSetup</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="Gwy3DSetup.html#Gwy3DSetup--fmscale-y-align" title="The “fmscale-y-align” property">Gwy3DSetup:fmscale-y-align</a>, object property in <a class="link" href="Gwy3DSetup.html" title="Gwy3DSetup">Gwy3DSetup</a>
+</dt>
+<dd></dd>
+<a name="idxA"></a><h3 class="title">A</h3>
+<dt>
+<a class="link" href="GwyAdjustBar.html#GwyAdjustBar-struct" title="struct GwyAdjustBar">GwyAdjustBar</a>, struct in <a class="link" href="GwyAdjustBar.html" title="GwyAdjustBar">GwyAdjustBar</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GwyAdjustBar.html#GwyAdjustBarClass" title="struct GwyAdjustBarClass">GwyAdjustBarClass</a>, struct in <a class="link" href="GwyAdjustBar.html" title="GwyAdjustBar">GwyAdjustBar</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GwyAdjustBar.html#gwy-adjust-bar-get-adjustment" title="gwy_adjust_bar_get_adjustment ()">gwy_adjust_bar_get_adjustment</a>, function in <a class="link" href="GwyAdjustBar.html" title="GwyAdjustBar">GwyAdjustBar</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GwyAdjustBar.html#gwy-adjust-bar-get-bar-sensitive" title="gwy_adjust_bar_get_bar_sensitive ()">gwy_adjust_bar_get_bar_sensitive</a>, function in <a class="link" href="GwyAdjustBar.html" title="GwyAdjustBar">GwyAdjustBar</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GwyAdjustBar.html#gwy-adjust-bar-get-check-button" title="gwy_adjust_bar_get_check_button ()">gwy_adjust_bar_get_check_button</a>, function in <a class="link" href="GwyAdjustBar.html" title="GwyAdjustBar">GwyAdjustBar</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GwyAdjustBar.html#gwy-adjust-bar-get-has-check-button" title="gwy_adjust_bar_get_has_check_button ()">gwy_adjust_bar_get_has_check_button</a>, function in <a class="link" href="GwyAdjustBar.html" title="GwyAdjustBar">GwyAdjustBar</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GwyAdjustBar.html#gwy-adjust-bar-get-label" title="gwy_adjust_bar_get_label ()">gwy_adjust_bar_get_label</a>, function in <a class="link" href="GwyAdjustBar.html" title="GwyAdjustBar">GwyAdjustBar</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GwyAdjustBar.html#gwy-adjust-bar-get-mapping" title="gwy_adjust_bar_get_mapping ()">gwy_adjust_bar_get_mapping</a>, function in <a class="link" href="GwyAdjustBar.html" title="GwyAdjustBar">GwyAdjustBar</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GwyAdjustBar.html#gwy-adjust-bar-get-snap-to-ticks" title="gwy_adjust_bar_get_snap_to_ticks ()">gwy_adjust_bar_get_snap_to_ticks</a>, function in <a class="link" href="GwyAdjustBar.html" title="GwyAdjustBar">GwyAdjustBar</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GwyAdjustBar.html#gwy-adjust-bar-new" title="gwy_adjust_bar_new ()">gwy_adjust_bar_new</a>, function in <a class="link" href="GwyAdjustBar.html" title="GwyAdjustBar">GwyAdjustBar</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GwyAdjustBar.html#gwy-adjust-bar-set-adjustment" title="gwy_adjust_bar_set_adjustment ()">gwy_adjust_bar_set_adjustment</a>, function in <a class="link" href="GwyAdjustBar.html" title="GwyAdjustBar">GwyAdjustBar</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GwyAdjustBar.html#gwy-adjust-bar-set-bar-sensitive" title="gwy_adjust_bar_set_bar_sensitive ()">gwy_adjust_bar_set_bar_sensitive</a>, function in <a class="link" href="GwyAdjustBar.html" title="GwyAdjustBar">GwyAdjustBar</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GwyAdjustBar.html#gwy-adjust-bar-set-has-check-button" title="gwy_adjust_bar_set_has_check_button ()">gwy_adjust_bar_set_has_check_button</a>, function in <a class="link" href="GwyAdjustBar.html" title="GwyAdjustBar">GwyAdjustBar</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GwyAdjustBar.html#gwy-adjust-bar-set-mapping" title="gwy_adjust_bar_set_mapping ()">gwy_adjust_bar_set_mapping</a>, function in <a class="link" href="GwyAdjustBar.html" title="GwyAdjustBar">GwyAdjustBar</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GwyAdjustBar.html#gwy-adjust-bar-set-snap-to-ticks" title="gwy_adjust_bar_set_snap_to_ticks ()">gwy_adjust_bar_set_snap_to_ticks</a>, function in <a class="link" href="GwyAdjustBar.html" title="GwyAdjustBar">GwyAdjustBar</a>
+</dt>
+<dd></dd>
+<a name="idxS"></a><h3 class="title">S</h3>
+<dt>
+<a class="link" href="GwyAdjustBar.html#GwyScaleMappingType" title="enum GwyScaleMappingType">GwyScaleMappingType</a>, enum in <a class="link" href="GwyAdjustBar.html" title="GwyAdjustBar">GwyAdjustBar</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-FRACTAL-MEASURE:CAPS" title="GWY_STOCK_FRACTAL_MEASURE">GWY_STOCK_FRACTAL_MEASURE</a>, macro in <a class="link" href="libgwydgets-gwystock.html" title="gwystock">gwystock</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-MASK-SET:CAPS" title="GWY_STOCK_MASK_SET">GWY_STOCK_MASK_SET</a>, macro in <a class="link" href="libgwydgets-gwystock.html" title="gwystock">gwystock</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-NEXT:CAPS" title="GWY_STOCK_NEXT">GWY_STOCK_NEXT</a>, macro in <a class="link" href="libgwydgets-gwystock.html" title="gwystock">gwystock</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-PREVIOUS:CAPS" title="GWY_STOCK_PREVIOUS">GWY_STOCK_PREVIOUS</a>, macro in <a class="link" href="libgwydgets-gwystock.html" title="gwystock">gwystock</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-ROTATE-3D:CAPS" title="GWY_STOCK_ROTATE_3D">GWY_STOCK_ROTATE_3D</a>, macro in <a class="link" href="libgwydgets-gwystock.html" title="gwystock">gwystock</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-SYNTHETIC-FIBRES:CAPS" title="GWY_STOCK_SYNTHETIC_FIBRES">GWY_STOCK_SYNTHETIC_FIBRES</a>, macro in <a class="link" href="libgwydgets-gwystock.html" title="gwystock">gwystock</a>
+</dt>
+<dd></dd>
+<a name="idxT"></a><h3 class="title">T</h3>
+<dt>
+<a class="link" href="libgwydgets-gwydgetutils.html#gwy-table-attach-adjbar" title="gwy_table_attach_adjbar ()">gwy_table_attach_adjbar</a>, function in <a class="link" href="libgwydgets-gwydgetutils.html" title="gwydgetutils">gwydgetutils</a>
+</dt>
+<dd></dd>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.19</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/devel-docs/libgwydgets/html/api-index-2-5.html b/devel-docs/libgwydgets/html/api-index-2-5.html
index ba7685c..049e96a 100644
--- a/devel-docs/libgwydgets/html/api-index-2-5.html
+++ b/devel-docs/libgwydgets/html/api-index-2-5.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.5: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="prev" href="api-index-2-3.html" title="Index of new symbols in 2.3">
diff --git a/devel-docs/libgwydgets/html/api-index-2-7.html b/devel-docs/libgwydgets/html/api-index-2-7.html
index 50fd3ef..220d2b6 100644
--- a/devel-docs/libgwydgets/html/api-index-2-7.html
+++ b/devel-docs/libgwydgets/html/api-index-2-7.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.7: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="prev" href="api-index-2-5.html" title="Index of new symbols in 2.5">
diff --git a/devel-docs/libgwydgets/html/api-index-2-8.html b/devel-docs/libgwydgets/html/api-index-2-8.html
index bebc92d..d6ee115 100644
--- a/devel-docs/libgwydgets/html/api-index-2-8.html
+++ b/devel-docs/libgwydgets/html/api-index-2-8.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.8: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="prev" href="api-index-2-7.html" title="Index of new symbols in 2.7">
diff --git a/devel-docs/libgwydgets/html/api-index-all.html b/devel-docs/libgwydgets/html/api-index-all.html
index 4907c95..4ff0ea6 100644
--- a/devel-docs/libgwydgets/html/api-index-all.html
+++ b/devel-docs/libgwydgets/html/api-index-all.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of all symbols: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="prev" href="GwySensitivityGroup.html" title="GwySensitivityGroup">
@@ -110,10 +110,22 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="Gwy3DSetup.html#Gwy3DSetup--fmscale-reserve-space" title="The “fmscale-reserve-space” property">Gwy3DSetup:fmscale-reserve-space</a>, object property in <a class="link" href="Gwy3DSetup.html" title="Gwy3DSetup">Gwy3DSetup</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="Gwy3DSetup.html#Gwy3DSetup--fmscale-size" title="The “fmscale-size” property">Gwy3DSetup:fmscale-size</a>, object property in <a class="link" href="Gwy3DSetup.html" title="Gwy3DSetup">Gwy3DSetup</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="Gwy3DSetup.html#Gwy3DSetup--fmscale-visible" title="The “fmscale-visible” property">Gwy3DSetup:fmscale-visible</a>, object property in <a class="link" href="Gwy3DSetup.html" title="Gwy3DSetup">Gwy3DSetup</a>
</dt>
<dd></dd>
<dt>
+<a class="link" href="Gwy3DSetup.html#Gwy3DSetup--fmscale-y-align" title="The “fmscale-y-align” property">Gwy3DSetup:fmscale-y-align</a>, object property in <a class="link" href="Gwy3DSetup.html" title="Gwy3DSetup">Gwy3DSetup</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="Gwy3DSetup.html#Gwy3DSetup--hide-masked" title="The “hide-masked” property">Gwy3DSetup:hide-masked</a>, object property in <a class="link" href="Gwy3DSetup.html" title="Gwy3DSetup">Gwy3DSetup</a>
</dt>
<dd></dd>
@@ -367,10 +379,90 @@
<dd></dd>
<a name="idxA"></a><h3 class="title">A</h3>
<dt>
+<a class="link" href="GwyAdjustBar.html#GwyAdjustBar-struct" title="struct GwyAdjustBar">GwyAdjustBar</a>, struct in <a class="link" href="GwyAdjustBar.html" title="GwyAdjustBar">GwyAdjustBar</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GwyAdjustBar.html#GwyAdjustBar-change-value" title="The “change-value” signal">GwyAdjustBar::change-value</a>, object signal in <a class="link" href="GwyAdjustBar.html" title="GwyAdjustBar">GwyAdjustBar</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GwyAdjustBar.html#GwyAdjustBar--adjustment" title="The “adjustment” property">GwyAdjustBar:adjustment</a>, object property in <a class="link" href="GwyAdjustBar.html" title="GwyAdjustBar">GwyAdjustBar</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GwyAdjustBar.html#GwyAdjustBar--has-check-button" title="The “has-check-button” property">GwyAdjustBar:has-check-button</a>, object property in <a class="link" href="GwyAdjustBar.html" title="GwyAdjustBar">GwyAdjustBar</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GwyAdjustBar.html#GwyAdjustBar--mapping" title="The “mapping” property">GwyAdjustBar:mapping</a>, object property in <a class="link" href="GwyAdjustBar.html" title="GwyAdjustBar">GwyAdjustBar</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GwyAdjustBar.html#GwyAdjustBar--snap-to-ticks" title="The “snap-to-ticks” property">GwyAdjustBar:snap-to-ticks</a>, object property in <a class="link" href="GwyAdjustBar.html" title="GwyAdjustBar">GwyAdjustBar</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GwyAdjustBar.html#GwyAdjustBarClass" title="struct GwyAdjustBarClass">GwyAdjustBarClass</a>, struct in <a class="link" href="GwyAdjustBar.html" title="GwyAdjustBar">GwyAdjustBar</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="libgwydgets-gwydgetutils.html#gwy-adjustment-get-int" title="gwy_adjustment_get_int()">gwy_adjustment_get_int</a>, macro in <a class="link" href="libgwydgets-gwydgetutils.html" title="gwydgetutils">gwydgetutils</a>
</dt>
<dd></dd>
<dt>
+<a class="link" href="GwyAdjustBar.html#gwy-adjust-bar-get-adjustment" title="gwy_adjust_bar_get_adjustment ()">gwy_adjust_bar_get_adjustment</a>, function in <a class="link" href="GwyAdjustBar.html" title="GwyAdjustBar">GwyAdjustBar</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GwyAdjustBar.html#gwy-adjust-bar-get-bar-sensitive" title="gwy_adjust_bar_get_bar_sensitive ()">gwy_adjust_bar_get_bar_sensitive</a>, function in <a class="link" href="GwyAdjustBar.html" title="GwyAdjustBar">GwyAdjustBar</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GwyAdjustBar.html#gwy-adjust-bar-get-check-button" title="gwy_adjust_bar_get_check_button ()">gwy_adjust_bar_get_check_button</a>, function in <a class="link" href="GwyAdjustBar.html" title="GwyAdjustBar">GwyAdjustBar</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GwyAdjustBar.html#gwy-adjust-bar-get-has-check-button" title="gwy_adjust_bar_get_has_check_button ()">gwy_adjust_bar_get_has_check_button</a>, function in <a class="link" href="GwyAdjustBar.html" title="GwyAdjustBar">GwyAdjustBar</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GwyAdjustBar.html#gwy-adjust-bar-get-label" title="gwy_adjust_bar_get_label ()">gwy_adjust_bar_get_label</a>, function in <a class="link" href="GwyAdjustBar.html" title="GwyAdjustBar">GwyAdjustBar</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GwyAdjustBar.html#gwy-adjust-bar-get-mapping" title="gwy_adjust_bar_get_mapping ()">gwy_adjust_bar_get_mapping</a>, function in <a class="link" href="GwyAdjustBar.html" title="GwyAdjustBar">GwyAdjustBar</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GwyAdjustBar.html#gwy-adjust-bar-get-snap-to-ticks" title="gwy_adjust_bar_get_snap_to_ticks ()">gwy_adjust_bar_get_snap_to_ticks</a>, function in <a class="link" href="GwyAdjustBar.html" title="GwyAdjustBar">GwyAdjustBar</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GwyAdjustBar.html#gwy-adjust-bar-new" title="gwy_adjust_bar_new ()">gwy_adjust_bar_new</a>, function in <a class="link" href="GwyAdjustBar.html" title="GwyAdjustBar">GwyAdjustBar</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GwyAdjustBar.html#gwy-adjust-bar-set-adjustment" title="gwy_adjust_bar_set_adjustment ()">gwy_adjust_bar_set_adjustment</a>, function in <a class="link" href="GwyAdjustBar.html" title="GwyAdjustBar">GwyAdjustBar</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GwyAdjustBar.html#gwy-adjust-bar-set-bar-sensitive" title="gwy_adjust_bar_set_bar_sensitive ()">gwy_adjust_bar_set_bar_sensitive</a>, function in <a class="link" href="GwyAdjustBar.html" title="GwyAdjustBar">GwyAdjustBar</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GwyAdjustBar.html#gwy-adjust-bar-set-has-check-button" title="gwy_adjust_bar_set_has_check_button ()">gwy_adjust_bar_set_has_check_button</a>, function in <a class="link" href="GwyAdjustBar.html" title="GwyAdjustBar">GwyAdjustBar</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GwyAdjustBar.html#gwy-adjust-bar-set-mapping" title="gwy_adjust_bar_set_mapping ()">gwy_adjust_bar_set_mapping</a>, function in <a class="link" href="GwyAdjustBar.html" title="GwyAdjustBar">GwyAdjustBar</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GwyAdjustBar.html#gwy-adjust-bar-set-snap-to-ticks" title="gwy_adjust_bar_set_snap_to_ticks ()">gwy_adjust_bar_set_snap_to_ticks</a>, function in <a class="link" href="GwyAdjustBar.html" title="GwyAdjustBar">GwyAdjustBar</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="GwyAxis.html#GwyAxis-struct" title="struct GwyAxis">GwyAxis</a>, struct in <a class="link" href="GwyAxis.html" title="GwyAxis">GwyAxis</a>
</dt>
<dd></dd>
@@ -2219,6 +2311,10 @@
<dd></dd>
<a name="idxS"></a><h3 class="title">S</h3>
<dt>
+<a class="link" href="GwyAdjustBar.html#GwyScaleMappingType" title="enum GwyScaleMappingType">GwyScaleMappingType</a>, enum in <a class="link" href="GwyAdjustBar.html" title="GwyAdjustBar">GwyAdjustBar</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="GwySciText.html#GwySciText-struct" title="struct GwySciText">GwySciText</a>, struct in <a class="link" href="GwySciText.html" title="GwySciText">GwySciText</a>
</dt>
<dd></dd>
@@ -2487,6 +2583,10 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-CORRELATION-MASK:CAPS" title="GWY_STOCK_CORRELATION_MASK">GWY_STOCK_CORRELATION_MASK</a>, macro in <a class="link" href="libgwydgets-gwystock.html" title="gwystock">gwystock</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-CROP:CAPS" title="GWY_STOCK_CROP">GWY_STOCK_CROP</a>, macro in <a class="link" href="libgwydgets-gwystock.html" title="gwystock">gwystock</a>
</dt>
<dd></dd>
@@ -2499,6 +2599,10 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-DISCONNECTED:CAPS" title="GWY_STOCK_DISCONNECTED">GWY_STOCK_DISCONNECTED</a>, macro in <a class="link" href="libgwydgets-gwystock.html" title="gwystock">gwystock</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-DISTANCE:CAPS" title="GWY_STOCK_DISTANCE">GWY_STOCK_DISTANCE</a>, macro in <a class="link" href="libgwydgets-gwystock.html" title="gwystock">gwystock</a>
</dt>
<dd></dd>
@@ -2559,6 +2663,10 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-FFT-FILTER-1D:CAPS" title="GWY_STOCK_FFT_FILTER_1D">GWY_STOCK_FFT_FILTER_1D</a>, macro in <a class="link" href="libgwydgets-gwystock.html" title="gwystock">gwystock</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-FFT-FILTER-2D:CAPS" title="GWY_STOCK_FFT_FILTER_2D">GWY_STOCK_FFT_FILTER_2D</a>, macro in <a class="link" href="libgwydgets-gwystock.html" title="gwystock">gwystock</a>
</dt>
<dd></dd>
@@ -2571,6 +2679,10 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-FIT-SHAPE:CAPS" title="GWY_STOCK_FIT_SHAPE">GWY_STOCK_FIT_SHAPE</a>, macro in <a class="link" href="libgwydgets-gwystock.html" title="gwystock">gwystock</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-FIX-ZERO:CAPS" title="GWY_STOCK_FIX_ZERO">GWY_STOCK_FIX_ZERO</a>, macro in <a class="link" href="libgwydgets-gwystock.html" title="gwystock">gwystock</a>
</dt>
<dd></dd>
@@ -2587,6 +2699,14 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-FRACTAL-CORRECTION:CAPS" title="GWY_STOCK_FRACTAL_CORRECTION">GWY_STOCK_FRACTAL_CORRECTION</a>, macro in <a class="link" href="libgwydgets-gwystock.html" title="gwystock">gwystock</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-FRACTAL-MEASURE:CAPS" title="GWY_STOCK_FRACTAL_MEASURE">GWY_STOCK_FRACTAL_MEASURE</a>, macro in <a class="link" href="libgwydgets-gwystock.html" title="gwystock">gwystock</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-GL-MATERIAL:CAPS" title="GWY_STOCK_GL_MATERIAL">GWY_STOCK_GL_MATERIAL</a>, macro in <a class="link" href="libgwydgets-gwystock.html" title="gwystock">gwystock</a>
</dt>
<dd></dd>
@@ -2795,6 +2915,14 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-MARK-OUTLIERS:CAPS" title="GWY_STOCK_MARK_OUTLIERS">GWY_STOCK_MARK_OUTLIERS</a>, macro in <a class="link" href="libgwydgets-gwystock.html" title="gwystock">gwystock</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-MARK-SCARS:CAPS" title="GWY_STOCK_MARK_SCARS">GWY_STOCK_MARK_SCARS</a>, macro in <a class="link" href="libgwydgets-gwystock.html" title="gwystock">gwystock</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-MARK-WITH:CAPS" title="GWY_STOCK_MARK_WITH">GWY_STOCK_MARK_WITH</a>, macro in <a class="link" href="libgwydgets-gwystock.html" title="gwystock">gwystock</a>
</dt>
<dd></dd>
@@ -2887,6 +3015,10 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-MASK-SET:CAPS" title="GWY_STOCK_MASK_SET">GWY_STOCK_MASK_SET</a>, macro in <a class="link" href="libgwydgets-gwystock.html" title="gwystock">gwystock</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-MASK-SHRINK:CAPS" title="GWY_STOCK_MASK_SHRINK">GWY_STOCK_MASK_SHRINK</a>, macro in <a class="link" href="libgwydgets-gwystock.html" title="gwystock">gwystock</a>
</dt>
<dd></dd>
@@ -2923,6 +3055,14 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-NEXT:CAPS" title="GWY_STOCK_NEXT">GWY_STOCK_NEXT</a>, macro in <a class="link" href="libgwydgets-gwystock.html" title="gwystock">gwystock</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-NULL-OFFSETS:CAPS" title="GWY_STOCK_NULL_OFFSETS">GWY_STOCK_NULL_OFFSETS</a>, macro in <a class="link" href="libgwydgets-gwystock.html" title="gwystock">gwystock</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-PALETTES:CAPS" title="GWY_STOCK_PALETTES">GWY_STOCK_PALETTES</a>, macro in <a class="link" href="libgwydgets-gwystock.html" title="gwystock">gwystock</a>
</dt>
<dd></dd>
@@ -2947,6 +3087,10 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-PREVIOUS:CAPS" title="GWY_STOCK_PREVIOUS">GWY_STOCK_PREVIOUS</a>, macro in <a class="link" href="libgwydgets-gwystock.html" title="gwystock">gwystock</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-PROFILE:CAPS" title="GWY_STOCK_PROFILE">GWY_STOCK_PROFILE</a>, macro in <a class="link" href="libgwydgets-gwystock.html" title="gwystock">gwystock</a>
</dt>
<dd></dd>
@@ -2979,6 +3123,10 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-ROTATE-3D:CAPS" title="GWY_STOCK_ROTATE_3D">GWY_STOCK_ROTATE_3D</a>, macro in <a class="link" href="libgwydgets-gwystock.html" title="gwystock">gwystock</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-ROTATE-90-CCW:CAPS" title="GWY_STOCK_ROTATE_90_CCW">GWY_STOCK_ROTATE_90_CCW</a>, macro in <a class="link" href="libgwydgets-gwystock.html" title="gwystock">gwystock</a>
</dt>
<dd></dd>
@@ -3055,6 +3203,10 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-SYNTHETIC-FIBRES:CAPS" title="GWY_STOCK_SYNTHETIC_FIBRES">GWY_STOCK_SYNTHETIC_FIBRES</a>, macro in <a class="link" href="libgwydgets-gwystock.html" title="gwystock">gwystock</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-SYNTHETIC-LATTICE:CAPS" title="GWY_STOCK_SYNTHETIC_LATTICE">GWY_STOCK_SYNTHETIC_LATTICE</a>, macro in <a class="link" href="libgwydgets-gwystock.html" title="gwystock">gwystock</a>
</dt>
<dd></dd>
@@ -3079,6 +3231,10 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-SYNTHETIC-PHASES:CAPS" title="GWY_STOCK_SYNTHETIC_PHASES">GWY_STOCK_SYNTHETIC_PHASES</a>, macro in <a class="link" href="libgwydgets-gwystock.html" title="gwystock">gwystock</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-SYNTHETIC-SPECTRAL:CAPS" title="GWY_STOCK_SYNTHETIC_SPECTRAL">GWY_STOCK_SYNTHETIC_SPECTRAL</a>, macro in <a class="link" href="libgwydgets-gwystock.html" title="gwystock">gwystock</a>
</dt>
<dd></dd>
@@ -3171,6 +3327,10 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-XY-DENOISE:CAPS" title="GWY_STOCK_XY_DENOISE">GWY_STOCK_XY_DENOISE</a>, macro in <a class="link" href="libgwydgets-gwystock.html" title="gwystock">gwystock</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-ZERO-MEAN:CAPS" title="GWY_STOCK_ZERO_MEAN">GWY_STOCK_ZERO_MEAN</a>, macro in <a class="link" href="libgwydgets-gwystock.html" title="gwystock">gwystock</a>
</dt>
<dd></dd>
@@ -3192,6 +3352,10 @@
<dd></dd>
<a name="idxT"></a><h3 class="title">T</h3>
<dt>
+<a class="link" href="libgwydgets-gwydgetutils.html#gwy-table-attach-adjbar" title="gwy_table_attach_adjbar ()">gwy_table_attach_adjbar</a>, function in <a class="link" href="libgwydgets-gwydgetutils.html" title="gwydgetutils">gwydgetutils</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="libgwydgets-gwydgetutils.html#gwy-table-attach-hscale" title="gwy_table_attach_hscale ()">gwy_table_attach_hscale</a>, function in <a class="link" href="libgwydgets-gwydgetutils.html" title="gwydgetutils">gwydgetutils</a>
</dt>
<dd></dd>
@@ -3208,23 +3372,23 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="libgwydgets-gwydgetutils.html#gwy-table-hscale-get-check" title="gwy_table_hscale_get_check()">gwy_table_hscale_get_check</a>, macro in <a class="link" href="libgwydgets-gwydgetutils.html" title="gwydgetutils">gwydgetutils</a>
+<a class="link" href="libgwydgets-gwydgetutils.html#gwy-table-hscale-get-check" title="gwy_table_hscale_get_check ()">gwy_table_hscale_get_check</a>, function in <a class="link" href="libgwydgets-gwydgetutils.html" title="gwydgetutils">gwydgetutils</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="libgwydgets-gwydgetutils.html#gwy-table-hscale-get-label" title="gwy_table_hscale_get_label()">gwy_table_hscale_get_label</a>, macro in <a class="link" href="libgwydgets-gwydgetutils.html" title="gwydgetutils">gwydgetutils</a>
+<a class="link" href="libgwydgets-gwydgetutils.html#gwy-table-hscale-get-label" title="gwy_table_hscale_get_label ()">gwy_table_hscale_get_label</a>, function in <a class="link" href="libgwydgets-gwydgetutils.html" title="gwydgetutils">gwydgetutils</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="libgwydgets-gwydgetutils.html#gwy-table-hscale-get-middle-widget" title="gwy_table_hscale_get_middle_widget()">gwy_table_hscale_get_middle_widget</a>, macro in <a class="link" href="libgwydgets-gwydgetutils.html" title="gwydgetutils">gwydgetutils</a>
+<a class="link" href="libgwydgets-gwydgetutils.html#gwy-table-hscale-get-middle-widget" title="gwy_table_hscale_get_middle_widget ()">gwy_table_hscale_get_middle_widget</a>, function in <a class="link" href="libgwydgets-gwydgetutils.html" title="gwydgetutils">gwydgetutils</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="libgwydgets-gwydgetutils.html#gwy-table-hscale-get-scale" title="gwy_table_hscale_get_scale()">gwy_table_hscale_get_scale</a>, macro in <a class="link" href="libgwydgets-gwydgetutils.html" title="gwydgetutils">gwydgetutils</a>
+<a class="link" href="libgwydgets-gwydgetutils.html#gwy-table-hscale-get-scale" title="gwy_table_hscale_get_scale ()">gwy_table_hscale_get_scale</a>, function in <a class="link" href="libgwydgets-gwydgetutils.html" title="gwydgetutils">gwydgetutils</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="libgwydgets-gwydgetutils.html#gwy-table-hscale-get-units" title="gwy_table_hscale_get_units()">gwy_table_hscale_get_units</a>, macro in <a class="link" href="libgwydgets-gwydgetutils.html" title="gwydgetutils">gwydgetutils</a>
+<a class="link" href="libgwydgets-gwydgetutils.html#gwy-table-hscale-get-units" title="gwy_table_hscale_get_units ()">gwy_table_hscale_get_units</a>, function in <a class="link" href="libgwydgets-gwydgetutils.html" title="gwydgetutils">gwydgetutils</a>
</dt>
<dd></dd>
<dt>
diff --git a/devel-docs/libgwydgets/html/api-index-deprec.html b/devel-docs/libgwydgets/html/api-index-deprec.html
index 44b6e3b..e720ef3 100644
--- a/devel-docs/libgwydgets/html/api-index-deprec.html
+++ b/devel-docs/libgwydgets/html/api-index-deprec.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of deprecated symbols: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="prev" href="api-index-all.html" title="Index of all symbols">
diff --git a/devel-docs/libgwydgets/html/gwy_3d_base-24.png b/devel-docs/libgwydgets/html/gwy_3d_base-24.png
index e401b4c..6f5f143 100644
Binary files a/devel-docs/libgwydgets/html/gwy_3d_base-24.png and b/devel-docs/libgwydgets/html/gwy_3d_base-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_arithmetic-24.png b/devel-docs/libgwydgets/html/gwy_arithmetic-24.png
index 1f5fa6f..5c44344 100644
Binary files a/devel-docs/libgwydgets/html/gwy_arithmetic-24.png and b/devel-docs/libgwydgets/html/gwy_arithmetic-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_bold-20.png b/devel-docs/libgwydgets/html/gwy_bold-20.png
index 547d29b..d3e0d70 100644
Binary files a/devel-docs/libgwydgets/html/gwy_bold-20.png and b/devel-docs/libgwydgets/html/gwy_bold-20.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_cantilever-24.png b/devel-docs/libgwydgets/html/gwy_cantilever-24.png
index 9540e6a..5a31698 100644
Binary files a/devel-docs/libgwydgets/html/gwy_cantilever-24.png and b/devel-docs/libgwydgets/html/gwy_cantilever-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_color_range-24.png b/devel-docs/libgwydgets/html/gwy_color_range-24.png
index c86d1b2..b2de5e6 100644
Binary files a/devel-docs/libgwydgets/html/gwy_color_range-24.png and b/devel-docs/libgwydgets/html/gwy_color_range-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_color_range_adaptive-24.png b/devel-docs/libgwydgets/html/gwy_color_range_adaptive-24.png
index a13f95a..5425360 100644
Binary files a/devel-docs/libgwydgets/html/gwy_color_range_adaptive-24.png and b/devel-docs/libgwydgets/html/gwy_color_range_adaptive-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_color_range_auto-24.png b/devel-docs/libgwydgets/html/gwy_color_range_auto-24.png
index b6b1102..81e5b8b 100644
Binary files a/devel-docs/libgwydgets/html/gwy_color_range_auto-24.png and b/devel-docs/libgwydgets/html/gwy_color_range_auto-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_color_range_fixed-24.png b/devel-docs/libgwydgets/html/gwy_color_range_fixed-24.png
index 5a3c5ac..6eb4a09 100644
Binary files a/devel-docs/libgwydgets/html/gwy_color_range_fixed-24.png and b/devel-docs/libgwydgets/html/gwy_color_range_fixed-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_color_range_full-24.png b/devel-docs/libgwydgets/html/gwy_color_range_full-24.png
index db2c219..f2039c4 100644
Binary files a/devel-docs/libgwydgets/html/gwy_color_range_full-24.png and b/devel-docs/libgwydgets/html/gwy_color_range_full-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_convolution-24.png b/devel-docs/libgwydgets/html/gwy_convolution-24.png
index c2834c0..df7a926 100644
Binary files a/devel-docs/libgwydgets/html/gwy_convolution-24.png and b/devel-docs/libgwydgets/html/gwy_convolution-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_correct_affine-24.png b/devel-docs/libgwydgets/html/gwy_correct_affine-24.png
index d7af10e..b0c0490 100644
Binary files a/devel-docs/libgwydgets/html/gwy_correct_affine-24.png and b/devel-docs/libgwydgets/html/gwy_correct_affine-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_correlation_mask-24.png b/devel-docs/libgwydgets/html/gwy_correlation_mask-24.png
new file mode 100644
index 0000000..fac36f4
Binary files /dev/null and b/devel-docs/libgwydgets/html/gwy_correlation_mask-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_crop-24.png b/devel-docs/libgwydgets/html/gwy_crop-24.png
index 34137a9..69f5112 100644
Binary files a/devel-docs/libgwydgets/html/gwy_crop-24.png and b/devel-docs/libgwydgets/html/gwy_crop-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_cwt-24.png b/devel-docs/libgwydgets/html/gwy_cwt-24.png
index de2ae1b..abc8b1f 100644
Binary files a/devel-docs/libgwydgets/html/gwy_cwt-24.png and b/devel-docs/libgwydgets/html/gwy_cwt-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_data_measure-24.png b/devel-docs/libgwydgets/html/gwy_data_measure-24.png
index b2bfd9b..f146f37 100644
Binary files a/devel-docs/libgwydgets/html/gwy_data_measure-24.png and b/devel-docs/libgwydgets/html/gwy_data_measure-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_disconnected-24.png b/devel-docs/libgwydgets/html/gwy_disconnected-24.png
new file mode 100644
index 0000000..4a7be6b
Binary files /dev/null and b/devel-docs/libgwydgets/html/gwy_disconnected-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_distance-24.png b/devel-docs/libgwydgets/html/gwy_distance-24.png
index 16ec0e2..a0d3d53 100644
Binary files a/devel-docs/libgwydgets/html/gwy_distance-24.png and b/devel-docs/libgwydgets/html/gwy_distance-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_distance_transform-24.png b/devel-docs/libgwydgets/html/gwy_distance_transform-24.png
index dbc766c..035196b 100644
Binary files a/devel-docs/libgwydgets/html/gwy_distance_transform-24.png and b/devel-docs/libgwydgets/html/gwy_distance_transform-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_distribution_angle-24.png b/devel-docs/libgwydgets/html/gwy_distribution_angle-24.png
index 4ad82c9..330004a 100644
Binary files a/devel-docs/libgwydgets/html/gwy_distribution_angle-24.png and b/devel-docs/libgwydgets/html/gwy_distribution_angle-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_distribution_slope-24.png b/devel-docs/libgwydgets/html/gwy_distribution_slope-24.png
index 86a891e..ac2ef7e 100644
Binary files a/devel-docs/libgwydgets/html/gwy_distribution_slope-24.png and b/devel-docs/libgwydgets/html/gwy_distribution_slope-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_drift-24.png b/devel-docs/libgwydgets/html/gwy_drift-24.png
index 1661032..51472c1 100644
Binary files a/devel-docs/libgwydgets/html/gwy_drift-24.png and b/devel-docs/libgwydgets/html/gwy_drift-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_dwt-24.png b/devel-docs/libgwydgets/html/gwy_dwt-24.png
index 92f8059..8424682 100644
Binary files a/devel-docs/libgwydgets/html/gwy_dwt-24.png and b/devel-docs/libgwydgets/html/gwy_dwt-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_edge-24.png b/devel-docs/libgwydgets/html/gwy_edge-24.png
index be816b1..9b6937c 100644
Binary files a/devel-docs/libgwydgets/html/gwy_edge-24.png and b/devel-docs/libgwydgets/html/gwy_edge-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_enforce_distribution-24.png b/devel-docs/libgwydgets/html/gwy_enforce_distribution-24.png
index 6912bf2..7152df2 100644
Binary files a/devel-docs/libgwydgets/html/gwy_enforce_distribution-24.png and b/devel-docs/libgwydgets/html/gwy_enforce_distribution-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_entropy-24.png b/devel-docs/libgwydgets/html/gwy_entropy-24.png
index c3b0027..baaae0a 100644
Binary files a/devel-docs/libgwydgets/html/gwy_entropy-24.png and b/devel-docs/libgwydgets/html/gwy_entropy-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_extend-24.png b/devel-docs/libgwydgets/html/gwy_extend-24.png
index ab46f12..dd9abce 100644
Binary files a/devel-docs/libgwydgets/html/gwy_extend-24.png and b/devel-docs/libgwydgets/html/gwy_extend-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_extract_path-24.png b/devel-docs/libgwydgets/html/gwy_extract_path-24.png
index 7609af4..3929ae9 100644
Binary files a/devel-docs/libgwydgets/html/gwy_extract_path-24.png and b/devel-docs/libgwydgets/html/gwy_extract_path-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_facet_level-24.png b/devel-docs/libgwydgets/html/gwy_facet_level-24.png
index ddb9e71..e16dd0b 100644
Binary files a/devel-docs/libgwydgets/html/gwy_facet_level-24.png and b/devel-docs/libgwydgets/html/gwy_facet_level-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_favourite-24.png b/devel-docs/libgwydgets/html/gwy_favourite-24.png
index ee6b598..a097321 100644
Binary files a/devel-docs/libgwydgets/html/gwy_favourite-24.png and b/devel-docs/libgwydgets/html/gwy_favourite-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_fft-24.png b/devel-docs/libgwydgets/html/gwy_fft-24.png
index 0fa3b30..ed6fb92 100644
Binary files a/devel-docs/libgwydgets/html/gwy_fft-24.png and b/devel-docs/libgwydgets/html/gwy_fft-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_fft_2d-24.png b/devel-docs/libgwydgets/html/gwy_fft_2d-24.png
index 1d0565c..895582a 100644
Binary files a/devel-docs/libgwydgets/html/gwy_fft_2d-24.png and b/devel-docs/libgwydgets/html/gwy_fft_2d-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_fft_filter_1d-24.png b/devel-docs/libgwydgets/html/gwy_fft_filter_1d-24.png
new file mode 100644
index 0000000..d123ffd
Binary files /dev/null and b/devel-docs/libgwydgets/html/gwy_fft_filter_1d-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_fft_filter_2d-24.png b/devel-docs/libgwydgets/html/gwy_fft_filter_2d-24.png
index 898f74f..78cdfd8 100644
Binary files a/devel-docs/libgwydgets/html/gwy_fft_filter_2d-24.png and b/devel-docs/libgwydgets/html/gwy_fft_filter_2d-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_filter-24.png b/devel-docs/libgwydgets/html/gwy_filter-24.png
index 907adce..51b2792 100644
Binary files a/devel-docs/libgwydgets/html/gwy_filter-24.png and b/devel-docs/libgwydgets/html/gwy_filter-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_find_peaks-24.png b/devel-docs/libgwydgets/html/gwy_find_peaks-24.png
index 548aa29..dabc05e 100644
Binary files a/devel-docs/libgwydgets/html/gwy_find_peaks-24.png and b/devel-docs/libgwydgets/html/gwy_find_peaks-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_fit_shape-24.png b/devel-docs/libgwydgets/html/gwy_fit_shape-24.png
new file mode 100644
index 0000000..222fdcf
Binary files /dev/null and b/devel-docs/libgwydgets/html/gwy_fit_shape-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_fix_zero-24.png b/devel-docs/libgwydgets/html/gwy_fix_zero-24.png
index 2ff6836..a9c36e4 100644
Binary files a/devel-docs/libgwydgets/html/gwy_fix_zero-24.png and b/devel-docs/libgwydgets/html/gwy_fix_zero-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_flip_horizontally-24.png b/devel-docs/libgwydgets/html/gwy_flip_horizontally-24.png
index 1b2a999..4a3e8ed 100644
Binary files a/devel-docs/libgwydgets/html/gwy_flip_horizontally-24.png and b/devel-docs/libgwydgets/html/gwy_flip_horizontally-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_flip_vertically-24.png b/devel-docs/libgwydgets/html/gwy_flip_vertically-24.png
index d5f3d44..3169edb 100644
Binary files a/devel-docs/libgwydgets/html/gwy_flip_vertically-24.png and b/devel-docs/libgwydgets/html/gwy_flip_vertically-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_fractal-24.png b/devel-docs/libgwydgets/html/gwy_fractal-24.png
index a5020fe..11635e5 100644
Binary files a/devel-docs/libgwydgets/html/gwy_fractal-24.png and b/devel-docs/libgwydgets/html/gwy_fractal-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_fractal_correction-24.png b/devel-docs/libgwydgets/html/gwy_fractal_correction-24.png
new file mode 100644
index 0000000..62a93ff
Binary files /dev/null and b/devel-docs/libgwydgets/html/gwy_fractal_correction-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_fractal_measure-24.png b/devel-docs/libgwydgets/html/gwy_fractal_measure-24.png
new file mode 100644
index 0000000..69eb8f8
Binary files /dev/null and b/devel-docs/libgwydgets/html/gwy_fractal_measure-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_gl_material-16.png b/devel-docs/libgwydgets/html/gwy_gl_material-16.png
index 01d8395..d8d6dee 100644
Binary files a/devel-docs/libgwydgets/html/gwy_gl_material-16.png and b/devel-docs/libgwydgets/html/gwy_gl_material-16.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_gradient_horizontal-24.png b/devel-docs/libgwydgets/html/gwy_gradient_horizontal-24.png
index 0cbf614..0a7fdc9 100644
Binary files a/devel-docs/libgwydgets/html/gwy_gradient_horizontal-24.png and b/devel-docs/libgwydgets/html/gwy_gradient_horizontal-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_gradient_vertical-24.png b/devel-docs/libgwydgets/html/gwy_gradient_vertical-24.png
index 39bf6bc..efbb7d8 100644
Binary files a/devel-docs/libgwydgets/html/gwy_gradient_vertical-24.png and b/devel-docs/libgwydgets/html/gwy_gradient_vertical-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_grain_correlation-24.png b/devel-docs/libgwydgets/html/gwy_grain_correlation-24.png
index 0889d2d..44c6577 100644
Binary files a/devel-docs/libgwydgets/html/gwy_grain_correlation-24.png and b/devel-docs/libgwydgets/html/gwy_grain_correlation-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_grain_exscribed_circle-24.png b/devel-docs/libgwydgets/html/gwy_grain_exscribed_circle-24.png
index ad5cbba..def1093 100644
Binary files a/devel-docs/libgwydgets/html/gwy_grain_exscribed_circle-24.png and b/devel-docs/libgwydgets/html/gwy_grain_exscribed_circle-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_grain_inscribed_circle-24.png b/devel-docs/libgwydgets/html/gwy_grain_inscribed_circle-24.png
index 0d80bd1..eba6ac1 100644
Binary files a/devel-docs/libgwydgets/html/gwy_grain_inscribed_circle-24.png and b/devel-docs/libgwydgets/html/gwy_grain_inscribed_circle-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_grains-24.png b/devel-docs/libgwydgets/html/gwy_grains-24.png
index 2d77de1..339081e 100644
Binary files a/devel-docs/libgwydgets/html/gwy_grains-24.png and b/devel-docs/libgwydgets/html/gwy_grains-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_grains_edge-24.png b/devel-docs/libgwydgets/html/gwy_grains_edge-24.png
index 9620f41..1481114 100644
Binary files a/devel-docs/libgwydgets/html/gwy_grains_edge-24.png and b/devel-docs/libgwydgets/html/gwy_grains_edge-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_grains_edge_remove-24.png b/devel-docs/libgwydgets/html/gwy_grains_edge_remove-24.png
index 21666de..51dd823 100644
Binary files a/devel-docs/libgwydgets/html/gwy_grains_edge_remove-24.png and b/devel-docs/libgwydgets/html/gwy_grains_edge_remove-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_grains_graph-24.png b/devel-docs/libgwydgets/html/gwy_grains_graph-24.png
index fd453a8..de6b5ed 100644
Binary files a/devel-docs/libgwydgets/html/gwy_grains_graph-24.png and b/devel-docs/libgwydgets/html/gwy_grains_graph-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_grains_measure-24.png b/devel-docs/libgwydgets/html/gwy_grains_measure-24.png
index 6991688..594f902 100644
Binary files a/devel-docs/libgwydgets/html/gwy_grains_measure-24.png and b/devel-docs/libgwydgets/html/gwy_grains_measure-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_grains_remove-24.png b/devel-docs/libgwydgets/html/gwy_grains_remove-24.png
index f0a57b9..1331f36 100644
Binary files a/devel-docs/libgwydgets/html/gwy_grains_remove-24.png and b/devel-docs/libgwydgets/html/gwy_grains_remove-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_grains_water-24.png b/devel-docs/libgwydgets/html/gwy_grains_water-24.png
index c61d533..ce98629 100644
Binary files a/devel-docs/libgwydgets/html/gwy_grains_water-24.png and b/devel-docs/libgwydgets/html/gwy_grains_water-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_graph-24.png b/devel-docs/libgwydgets/html/gwy_graph-24.png
index 2311387..08bc1fb 100644
Binary files a/devel-docs/libgwydgets/html/gwy_graph-24.png and b/devel-docs/libgwydgets/html/gwy_graph-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_graph_align-24.png b/devel-docs/libgwydgets/html/gwy_graph_align-24.png
index e54ccfc..7d5d8ab 100644
Binary files a/devel-docs/libgwydgets/html/gwy_graph_align-24.png and b/devel-docs/libgwydgets/html/gwy_graph_align-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_graph_cut-24.png b/devel-docs/libgwydgets/html/gwy_graph_cut-24.png
index e9667bc..afbb068 100644
Binary files a/devel-docs/libgwydgets/html/gwy_graph_cut-24.png and b/devel-docs/libgwydgets/html/gwy_graph_cut-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_graph_dos-24.png b/devel-docs/libgwydgets/html/gwy_graph_dos-24.png
index be176ea..0b23839 100644
Binary files a/devel-docs/libgwydgets/html/gwy_graph_dos-24.png and b/devel-docs/libgwydgets/html/gwy_graph_dos-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_graph_export_ascii-24.png b/devel-docs/libgwydgets/html/gwy_graph_export_ascii-24.png
index f87cb0e..ebcf1cc 100644
Binary files a/devel-docs/libgwydgets/html/gwy_graph_export_ascii-24.png and b/devel-docs/libgwydgets/html/gwy_graph_export_ascii-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_graph_export_png-24.png b/devel-docs/libgwydgets/html/gwy_graph_export_png-24.png
index bc4ecc2..ec0ba64 100644
Binary files a/devel-docs/libgwydgets/html/gwy_graph_export_png-24.png and b/devel-docs/libgwydgets/html/gwy_graph_export_png-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_graph_export_vector-24.png b/devel-docs/libgwydgets/html/gwy_graph_export_vector-24.png
index 71b6539..9fc43c3 100644
Binary files a/devel-docs/libgwydgets/html/gwy_graph_export_vector-24.png and b/devel-docs/libgwydgets/html/gwy_graph_export_vector-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_graph_fd-24.png b/devel-docs/libgwydgets/html/gwy_graph_fd-24.png
index c2f3b7a..a28e54b 100644
Binary files a/devel-docs/libgwydgets/html/gwy_graph_fd-24.png and b/devel-docs/libgwydgets/html/gwy_graph_fd-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_graph_filter-24.png b/devel-docs/libgwydgets/html/gwy_graph_filter-24.png
index 80cf236..5b3ba6a 100644
Binary files a/devel-docs/libgwydgets/html/gwy_graph_filter-24.png and b/devel-docs/libgwydgets/html/gwy_graph_filter-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_graph_function-24.png b/devel-docs/libgwydgets/html/gwy_graph_function-24.png
index 8d3c0c5..7e868b2 100644
Binary files a/devel-docs/libgwydgets/html/gwy_graph_function-24.png and b/devel-docs/libgwydgets/html/gwy_graph_function-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_graph_halfgauss-24.png b/devel-docs/libgwydgets/html/gwy_graph_halfgauss-24.png
index ed0ef6c..83b030f 100644
Binary files a/devel-docs/libgwydgets/html/gwy_graph_halfgauss-24.png and b/devel-docs/libgwydgets/html/gwy_graph_halfgauss-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_graph_level-24.png b/devel-docs/libgwydgets/html/gwy_graph_level-24.png
index dee1168..fc824fa 100644
Binary files a/devel-docs/libgwydgets/html/gwy_graph_level-24.png and b/devel-docs/libgwydgets/html/gwy_graph_level-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_graph_measure-24.png b/devel-docs/libgwydgets/html/gwy_graph_measure-24.png
index 7b02b42..bc563d1 100644
Binary files a/devel-docs/libgwydgets/html/gwy_graph_measure-24.png and b/devel-docs/libgwydgets/html/gwy_graph_measure-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_graph_palette-24.png b/devel-docs/libgwydgets/html/gwy_graph_palette-24.png
index 73298e9..7669ef1 100644
Binary files a/devel-docs/libgwydgets/html/gwy_graph_palette-24.png and b/devel-docs/libgwydgets/html/gwy_graph_palette-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_graph_pointer-24.png b/devel-docs/libgwydgets/html/gwy_graph_pointer-24.png
index c7059fe..37a53c8 100644
Binary files a/devel-docs/libgwydgets/html/gwy_graph_pointer-24.png and b/devel-docs/libgwydgets/html/gwy_graph_pointer-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_graph_ruler-24.png b/devel-docs/libgwydgets/html/gwy_graph_ruler-24.png
index d7c016a..a0a1585 100644
Binary files a/devel-docs/libgwydgets/html/gwy_graph_ruler-24.png and b/devel-docs/libgwydgets/html/gwy_graph_ruler-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_graph_vertical-24.png b/devel-docs/libgwydgets/html/gwy_graph_vertical-24.png
index ab82996..708736c 100644
Binary files a/devel-docs/libgwydgets/html/gwy_graph_vertical-24.png and b/devel-docs/libgwydgets/html/gwy_graph_vertical-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_graph_zoom_fit-24.png b/devel-docs/libgwydgets/html/gwy_graph_zoom_fit-24.png
index 25d61be..173423b 100644
Binary files a/devel-docs/libgwydgets/html/gwy_graph_zoom_fit-24.png and b/devel-docs/libgwydgets/html/gwy_graph_zoom_fit-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_graph_zoom_in-24.png b/devel-docs/libgwydgets/html/gwy_graph_zoom_in-24.png
index 4d1a4c6..a07015e 100644
Binary files a/devel-docs/libgwydgets/html/gwy_graph_zoom_in-24.png and b/devel-docs/libgwydgets/html/gwy_graph_zoom_in-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_graph_zoom_out-24.png b/devel-docs/libgwydgets/html/gwy_graph_zoom_out-24.png
index 599752c..d39e0ec 100644
Binary files a/devel-docs/libgwydgets/html/gwy_graph_zoom_out-24.png and b/devel-docs/libgwydgets/html/gwy_graph_zoom_out-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_hough-24.png b/devel-docs/libgwydgets/html/gwy_hough-24.png
index e5d0aee..e1291f7 100644
Binary files a/devel-docs/libgwydgets/html/gwy_hough-24.png and b/devel-docs/libgwydgets/html/gwy_hough-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_immerse-24.png b/devel-docs/libgwydgets/html/gwy_immerse-24.png
index 47bf80f..92f8ff2 100644
Binary files a/devel-docs/libgwydgets/html/gwy_immerse-24.png and b/devel-docs/libgwydgets/html/gwy_immerse-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_iso_roughness-24.png b/devel-docs/libgwydgets/html/gwy_iso_roughness-24.png
index 6892a15..c110932 100644
Binary files a/devel-docs/libgwydgets/html/gwy_iso_roughness-24.png and b/devel-docs/libgwydgets/html/gwy_iso_roughness-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_italic-20.png b/devel-docs/libgwydgets/html/gwy_italic-20.png
index c72d6c0..81fbb46 100644
Binary files a/devel-docs/libgwydgets/html/gwy_italic-20.png and b/devel-docs/libgwydgets/html/gwy_italic-20.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_less-24.png b/devel-docs/libgwydgets/html/gwy_less-24.png
index d29b178..65b46a9 100644
Binary files a/devel-docs/libgwydgets/html/gwy_less-24.png and b/devel-docs/libgwydgets/html/gwy_less-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_level-24.png b/devel-docs/libgwydgets/html/gwy_level-24.png
index 495f59a..4cf0fb8 100644
Binary files a/devel-docs/libgwydgets/html/gwy_level-24.png and b/devel-docs/libgwydgets/html/gwy_level-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_level_flatten_base-24.png b/devel-docs/libgwydgets/html/gwy_level_flatten_base-24.png
index d1a2be0..d2abfa5 100644
Binary files a/devel-docs/libgwydgets/html/gwy_level_flatten_base-24.png and b/devel-docs/libgwydgets/html/gwy_level_flatten_base-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_level_median-24.png b/devel-docs/libgwydgets/html/gwy_level_median-24.png
index 5d5bfee..dfc9653 100644
Binary files a/devel-docs/libgwydgets/html/gwy_level_median-24.png and b/devel-docs/libgwydgets/html/gwy_level_median-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_level_triangle-24.png b/devel-docs/libgwydgets/html/gwy_level_triangle-24.png
index 2e62aee..9bf2a46 100644
Binary files a/devel-docs/libgwydgets/html/gwy_level_triangle-24.png and b/devel-docs/libgwydgets/html/gwy_level_triangle-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_light_rotate-24.png b/devel-docs/libgwydgets/html/gwy_light_rotate-24.png
index 78267d7..9a62056 100644
Binary files a/devel-docs/libgwydgets/html/gwy_light_rotate-24.png and b/devel-docs/libgwydgets/html/gwy_light_rotate-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_line_level-24.png b/devel-docs/libgwydgets/html/gwy_line_level-24.png
index b7829a2..9b47092 100644
Binary files a/devel-docs/libgwydgets/html/gwy_line_level-24.png and b/devel-docs/libgwydgets/html/gwy_line_level-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_load_debug-20.png b/devel-docs/libgwydgets/html/gwy_load_debug-20.png
index 5ae1c78..31d40ce 100644
Binary files a/devel-docs/libgwydgets/html/gwy_load_debug-20.png and b/devel-docs/libgwydgets/html/gwy_load_debug-20.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_load_info-20.png b/devel-docs/libgwydgets/html/gwy_load_info-20.png
index f8b1cd7..9de7202 100644
Binary files a/devel-docs/libgwydgets/html/gwy_load_info-20.png and b/devel-docs/libgwydgets/html/gwy_load_info-20.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_load_warning-20.png b/devel-docs/libgwydgets/html/gwy_load_warning-20.png
index b2d6bca..3c38083 100644
Binary files a/devel-docs/libgwydgets/html/gwy_load_warning-20.png and b/devel-docs/libgwydgets/html/gwy_load_warning-20.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_local_slope-24.png b/devel-docs/libgwydgets/html/gwy_local_slope-24.png
index 250abd8..5d1edf9 100644
Binary files a/devel-docs/libgwydgets/html/gwy_local_slope-24.png and b/devel-docs/libgwydgets/html/gwy_local_slope-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_logscale_horizontal-24.png b/devel-docs/libgwydgets/html/gwy_logscale_horizontal-24.png
index 0424b6c..c4c47b4 100644
Binary files a/devel-docs/libgwydgets/html/gwy_logscale_horizontal-24.png and b/devel-docs/libgwydgets/html/gwy_logscale_horizontal-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_logscale_vertical-24.png b/devel-docs/libgwydgets/html/gwy_logscale_vertical-24.png
index 0365405..9173e0d 100644
Binary files a/devel-docs/libgwydgets/html/gwy_logscale_vertical-24.png and b/devel-docs/libgwydgets/html/gwy_logscale_vertical-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_mark_outliers-24.png b/devel-docs/libgwydgets/html/gwy_mark_outliers-24.png
new file mode 100644
index 0000000..79b60f0
Binary files /dev/null and b/devel-docs/libgwydgets/html/gwy_mark_outliers-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_mark_scars-24.png b/devel-docs/libgwydgets/html/gwy_mark_scars-24.png
new file mode 100644
index 0000000..df843dd
Binary files /dev/null and b/devel-docs/libgwydgets/html/gwy_mark_scars-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_mark_with-24.png b/devel-docs/libgwydgets/html/gwy_mark_with-24.png
index a8a5a38..dde1a2a 100644
Binary files a/devel-docs/libgwydgets/html/gwy_mark_with-24.png and b/devel-docs/libgwydgets/html/gwy_mark_with-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_mask-16.png b/devel-docs/libgwydgets/html/gwy_mask-16.png
index ff6c0c0..24787e1 100644
Binary files a/devel-docs/libgwydgets/html/gwy_mask-16.png and b/devel-docs/libgwydgets/html/gwy_mask-16.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_mask-24.png b/devel-docs/libgwydgets/html/gwy_mask-24.png
index 32be618..d96374f 100644
Binary files a/devel-docs/libgwydgets/html/gwy_mask-24.png and b/devel-docs/libgwydgets/html/gwy_mask-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_mask_add-24.png b/devel-docs/libgwydgets/html/gwy_mask_add-24.png
index d125b2a..5d8db27 100644
Binary files a/devel-docs/libgwydgets/html/gwy_mask_add-24.png and b/devel-docs/libgwydgets/html/gwy_mask_add-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_mask_circle-24.png b/devel-docs/libgwydgets/html/gwy_mask_circle-24.png
index bc2afd9..abacf74 100644
Binary files a/devel-docs/libgwydgets/html/gwy_mask_circle-24.png and b/devel-docs/libgwydgets/html/gwy_mask_circle-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_mask_circle_exclusive-24.png b/devel-docs/libgwydgets/html/gwy_mask_circle_exclusive-24.png
index bcca426..4a70445 100644
Binary files a/devel-docs/libgwydgets/html/gwy_mask_circle_exclusive-24.png and b/devel-docs/libgwydgets/html/gwy_mask_circle_exclusive-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_mask_circle_inclusive-24.png b/devel-docs/libgwydgets/html/gwy_mask_circle_inclusive-24.png
index 128a478..839bc61 100644
Binary files a/devel-docs/libgwydgets/html/gwy_mask_circle_inclusive-24.png and b/devel-docs/libgwydgets/html/gwy_mask_circle_inclusive-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_mask_distribute-24.png b/devel-docs/libgwydgets/html/gwy_mask_distribute-24.png
index 6acf992..72a00af 100644
Binary files a/devel-docs/libgwydgets/html/gwy_mask_distribute-24.png and b/devel-docs/libgwydgets/html/gwy_mask_distribute-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_mask_editor-24.png b/devel-docs/libgwydgets/html/gwy_mask_editor-24.png
index 65eeaa5..96a9f2f 100644
Binary files a/devel-docs/libgwydgets/html/gwy_mask_editor-24.png and b/devel-docs/libgwydgets/html/gwy_mask_editor-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_mask_exclude-24.png b/devel-docs/libgwydgets/html/gwy_mask_exclude-24.png
index 72b8939..6a62863 100644
Binary files a/devel-docs/libgwydgets/html/gwy_mask_exclude-24.png and b/devel-docs/libgwydgets/html/gwy_mask_exclude-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_mask_exclude_circle-24.png b/devel-docs/libgwydgets/html/gwy_mask_exclude_circle-24.png
index 2fdbadc..4a70445 100644
Binary files a/devel-docs/libgwydgets/html/gwy_mask_exclude_circle-24.png and b/devel-docs/libgwydgets/html/gwy_mask_exclude_circle-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_mask_extract-24.png b/devel-docs/libgwydgets/html/gwy_mask_extract-24.png
index dbe8f30..e3943e6 100644
Binary files a/devel-docs/libgwydgets/html/gwy_mask_extract-24.png and b/devel-docs/libgwydgets/html/gwy_mask_extract-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_mask_fill_draw-24.png b/devel-docs/libgwydgets/html/gwy_mask_fill_draw-24.png
index a412a3f..e2f59b6 100644
Binary files a/devel-docs/libgwydgets/html/gwy_mask_fill_draw-24.png and b/devel-docs/libgwydgets/html/gwy_mask_fill_draw-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_mask_fill_erase-24.png b/devel-docs/libgwydgets/html/gwy_mask_fill_erase-24.png
index a8f7136..fd3450b 100644
Binary files a/devel-docs/libgwydgets/html/gwy_mask_fill_erase-24.png and b/devel-docs/libgwydgets/html/gwy_mask_fill_erase-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_mask_grow-24.png b/devel-docs/libgwydgets/html/gwy_mask_grow-24.png
index f806456..01b63fc 100644
Binary files a/devel-docs/libgwydgets/html/gwy_mask_grow-24.png and b/devel-docs/libgwydgets/html/gwy_mask_grow-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_mask_intersect-24.png b/devel-docs/libgwydgets/html/gwy_mask_intersect-24.png
index 7a08f4d..d2ca3c0 100644
Binary files a/devel-docs/libgwydgets/html/gwy_mask_intersect-24.png and b/devel-docs/libgwydgets/html/gwy_mask_intersect-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_mask_invert-24.png b/devel-docs/libgwydgets/html/gwy_mask_invert-24.png
index 0af7c29..3796b3b 100644
Binary files a/devel-docs/libgwydgets/html/gwy_mask_invert-24.png and b/devel-docs/libgwydgets/html/gwy_mask_invert-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_mask_line-24.png b/devel-docs/libgwydgets/html/gwy_mask_line-24.png
index a50c304..f7641d1 100644
Binary files a/devel-docs/libgwydgets/html/gwy_mask_line-24.png and b/devel-docs/libgwydgets/html/gwy_mask_line-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_mask_morph-24.png b/devel-docs/libgwydgets/html/gwy_mask_morph-24.png
index e95e1b0..7acfc4a 100644
Binary files a/devel-docs/libgwydgets/html/gwy_mask_morph-24.png and b/devel-docs/libgwydgets/html/gwy_mask_morph-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_mask_paint_draw-24.png b/devel-docs/libgwydgets/html/gwy_mask_paint_draw-24.png
index d2b6acd..7e740eb 100644
Binary files a/devel-docs/libgwydgets/html/gwy_mask_paint_draw-24.png and b/devel-docs/libgwydgets/html/gwy_mask_paint_draw-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_mask_paint_erase-24.png b/devel-docs/libgwydgets/html/gwy_mask_paint_erase-24.png
index cf60f3f..ce13a16 100644
Binary files a/devel-docs/libgwydgets/html/gwy_mask_paint_erase-24.png and b/devel-docs/libgwydgets/html/gwy_mask_paint_erase-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_mask_rect_exclusive-24.png b/devel-docs/libgwydgets/html/gwy_mask_rect_exclusive-24.png
index 0de5352..9d0d67a 100644
Binary files a/devel-docs/libgwydgets/html/gwy_mask_rect_exclusive-24.png and b/devel-docs/libgwydgets/html/gwy_mask_rect_exclusive-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_mask_rect_inclusive-24.png b/devel-docs/libgwydgets/html/gwy_mask_rect_inclusive-24.png
index e0e8990..dc2075d 100644
Binary files a/devel-docs/libgwydgets/html/gwy_mask_rect_inclusive-24.png and b/devel-docs/libgwydgets/html/gwy_mask_rect_inclusive-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_mask_remove-24.png b/devel-docs/libgwydgets/html/gwy_mask_remove-24.png
index eb82317..d1e69dc 100644
Binary files a/devel-docs/libgwydgets/html/gwy_mask_remove-24.png and b/devel-docs/libgwydgets/html/gwy_mask_remove-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_mask_set-24.png b/devel-docs/libgwydgets/html/gwy_mask_set-24.png
new file mode 100644
index 0000000..98ad1ac
Binary files /dev/null and b/devel-docs/libgwydgets/html/gwy_mask_set-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_mask_shrink-24.png b/devel-docs/libgwydgets/html/gwy_mask_shrink-24.png
index a5e7c8c..1f295e0 100644
Binary files a/devel-docs/libgwydgets/html/gwy_mask_shrink-24.png and b/devel-docs/libgwydgets/html/gwy_mask_shrink-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_mask_subtract-24.png b/devel-docs/libgwydgets/html/gwy_mask_subtract-24.png
index a452875..4b23180 100644
Binary files a/devel-docs/libgwydgets/html/gwy_mask_subtract-24.png and b/devel-docs/libgwydgets/html/gwy_mask_subtract-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_mask_thin-24.png b/devel-docs/libgwydgets/html/gwy_mask_thin-24.png
index ed44191..bc6de13 100644
Binary files a/devel-docs/libgwydgets/html/gwy_mask_thin-24.png and b/devel-docs/libgwydgets/html/gwy_mask_thin-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_measure_lattice-24.png b/devel-docs/libgwydgets/html/gwy_measure_lattice-24.png
index cd72ade..4dcd3a2 100644
Binary files a/devel-docs/libgwydgets/html/gwy_measure_lattice-24.png and b/devel-docs/libgwydgets/html/gwy_measure_lattice-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_merge-24.png b/devel-docs/libgwydgets/html/gwy_merge-24.png
index b143a65..194af80 100644
Binary files a/devel-docs/libgwydgets/html/gwy_merge-24.png and b/devel-docs/libgwydgets/html/gwy_merge-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_more-24.png b/devel-docs/libgwydgets/html/gwy_more-24.png
index bf60a5d..7ddd42e 100644
Binary files a/devel-docs/libgwydgets/html/gwy_more-24.png and b/devel-docs/libgwydgets/html/gwy_more-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_mutual_crop-24.png b/devel-docs/libgwydgets/html/gwy_mutual_crop-24.png
index e259352..3c5eb1a 100644
Binary files a/devel-docs/libgwydgets/html/gwy_mutual_crop-24.png and b/devel-docs/libgwydgets/html/gwy_mutual_crop-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_neural_apply-24.png b/devel-docs/libgwydgets/html/gwy_neural_apply-24.png
index c08795e..13c66fc 100644
Binary files a/devel-docs/libgwydgets/html/gwy_neural_apply-24.png and b/devel-docs/libgwydgets/html/gwy_neural_apply-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_neural_train-24.png b/devel-docs/libgwydgets/html/gwy_neural_train-24.png
index 603da13..a6ca230 100644
Binary files a/devel-docs/libgwydgets/html/gwy_neural_train-24.png and b/devel-docs/libgwydgets/html/gwy_neural_train-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_next-24.png b/devel-docs/libgwydgets/html/gwy_next-24.png
new file mode 100644
index 0000000..81fee13
Binary files /dev/null and b/devel-docs/libgwydgets/html/gwy_next-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_null_offsets-24.png b/devel-docs/libgwydgets/html/gwy_null_offsets-24.png
new file mode 100644
index 0000000..50ed894
Binary files /dev/null and b/devel-docs/libgwydgets/html/gwy_null_offsets-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_palettes-16.png b/devel-docs/libgwydgets/html/gwy_palettes-16.png
index fef2359..b2fd0c8 100644
Binary files a/devel-docs/libgwydgets/html/gwy_palettes-16.png and b/devel-docs/libgwydgets/html/gwy_palettes-16.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_palettes-24.png b/devel-docs/libgwydgets/html/gwy_palettes-24.png
index 9744b41..4980e7a 100644
Binary files a/devel-docs/libgwydgets/html/gwy_palettes-24.png and b/devel-docs/libgwydgets/html/gwy_palettes-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_path_level-24.png b/devel-docs/libgwydgets/html/gwy_path_level-24.png
index 3f219db..486cbf4 100644
Binary files a/devel-docs/libgwydgets/html/gwy_path_level-24.png and b/devel-docs/libgwydgets/html/gwy_path_level-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_pointer_measure-24.png b/devel-docs/libgwydgets/html/gwy_pointer_measure-24.png
index fb08713..a55127b 100644
Binary files a/devel-docs/libgwydgets/html/gwy_pointer_measure-24.png and b/devel-docs/libgwydgets/html/gwy_pointer_measure-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_poly_distort-24.png b/devel-docs/libgwydgets/html/gwy_poly_distort-24.png
index c1b972d..d1ec76e 100644
Binary files a/devel-docs/libgwydgets/html/gwy_poly_distort-24.png and b/devel-docs/libgwydgets/html/gwy_poly_distort-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_polynom-24.png b/devel-docs/libgwydgets/html/gwy_polynom-24.png
index b7a1534..af5a9fe 100644
Binary files a/devel-docs/libgwydgets/html/gwy_polynom-24.png and b/devel-docs/libgwydgets/html/gwy_polynom-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_polynom_level-24.png b/devel-docs/libgwydgets/html/gwy_polynom_level-24.png
index 2929522..87555d0 100644
Binary files a/devel-docs/libgwydgets/html/gwy_polynom_level-24.png and b/devel-docs/libgwydgets/html/gwy_polynom_level-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_previous-24.png b/devel-docs/libgwydgets/html/gwy_previous-24.png
new file mode 100644
index 0000000..a6a7142
Binary files /dev/null and b/devel-docs/libgwydgets/html/gwy_previous-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_profile-24.png b/devel-docs/libgwydgets/html/gwy_profile-24.png
index 5232d4c..1a946e3 100644
Binary files a/devel-docs/libgwydgets/html/gwy_profile-24.png and b/devel-docs/libgwydgets/html/gwy_profile-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_pygwy-24.png b/devel-docs/libgwydgets/html/gwy_pygwy-24.png
index 7f11f1e..2d4303d 100644
Binary files a/devel-docs/libgwydgets/html/gwy_pygwy-24.png and b/devel-docs/libgwydgets/html/gwy_pygwy-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_remove_under_mask-24.png b/devel-docs/libgwydgets/html/gwy_remove_under_mask-24.png
index 7645baf..11b1054 100644
Binary files a/devel-docs/libgwydgets/html/gwy_remove_under_mask-24.png and b/devel-docs/libgwydgets/html/gwy_remove_under_mask-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_rotate-24.png b/devel-docs/libgwydgets/html/gwy_rotate-24.png
index b1a2c9c..84ed68b 100644
Binary files a/devel-docs/libgwydgets/html/gwy_rotate-24.png and b/devel-docs/libgwydgets/html/gwy_rotate-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_rotate_180-24.png b/devel-docs/libgwydgets/html/gwy_rotate_180-24.png
index 390aa5f..df4f979 100644
Binary files a/devel-docs/libgwydgets/html/gwy_rotate_180-24.png and b/devel-docs/libgwydgets/html/gwy_rotate_180-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_rotate_3d-24.png b/devel-docs/libgwydgets/html/gwy_rotate_3d-24.png
new file mode 100644
index 0000000..f4a9a34
Binary files /dev/null and b/devel-docs/libgwydgets/html/gwy_rotate_3d-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_rotate_90_ccw-24.png b/devel-docs/libgwydgets/html/gwy_rotate_90_ccw-24.png
index 825c228..9d58ad9 100644
Binary files a/devel-docs/libgwydgets/html/gwy_rotate_90_ccw-24.png and b/devel-docs/libgwydgets/html/gwy_rotate_90_ccw-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_rotate_90_cw-24.png b/devel-docs/libgwydgets/html/gwy_rotate_90_cw-24.png
index 14391a5..9aae77b 100644
Binary files a/devel-docs/libgwydgets/html/gwy_rotate_90_cw-24.png and b/devel-docs/libgwydgets/html/gwy_rotate_90_cw-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_scale-24.png b/devel-docs/libgwydgets/html/gwy_scale-24.png
index 136a4f2..d487c8f 100644
Binary files a/devel-docs/libgwydgets/html/gwy_scale-24.png and b/devel-docs/libgwydgets/html/gwy_scale-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_scale_horizontally-24.png b/devel-docs/libgwydgets/html/gwy_scale_horizontally-24.png
index d6e5dc4..250c610 100644
Binary files a/devel-docs/libgwydgets/html/gwy_scale_horizontally-24.png and b/devel-docs/libgwydgets/html/gwy_scale_horizontally-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_scale_vertically-24.png b/devel-docs/libgwydgets/html/gwy_scale_vertically-24.png
index 0730605..7894cb4 100644
Binary files a/devel-docs/libgwydgets/html/gwy_scale_vertically-24.png and b/devel-docs/libgwydgets/html/gwy_scale_vertically-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_scars-24.png b/devel-docs/libgwydgets/html/gwy_scars-24.png
index 3296df2..cbe9604 100644
Binary files a/devel-docs/libgwydgets/html/gwy_scars-24.png and b/devel-docs/libgwydgets/html/gwy_scars-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_selections-24.png b/devel-docs/libgwydgets/html/gwy_selections-24.png
index 6f1fbcc..4796ba8 100644
Binary files a/devel-docs/libgwydgets/html/gwy_selections-24.png and b/devel-docs/libgwydgets/html/gwy_selections-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_shader-24.png b/devel-docs/libgwydgets/html/gwy_shader-24.png
index 6b8c1c7..998ffab 100644
Binary files a/devel-docs/libgwydgets/html/gwy_shader-24.png and b/devel-docs/libgwydgets/html/gwy_shader-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_spectrum-24.png b/devel-docs/libgwydgets/html/gwy_spectrum-24.png
index 647900a..9b1ea59 100644
Binary files a/devel-docs/libgwydgets/html/gwy_spectrum-24.png and b/devel-docs/libgwydgets/html/gwy_spectrum-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_spot_remove-24.png b/devel-docs/libgwydgets/html/gwy_spot_remove-24.png
index d99d062..1e31aec 100644
Binary files a/devel-docs/libgwydgets/html/gwy_spot_remove-24.png and b/devel-docs/libgwydgets/html/gwy_spot_remove-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_stat_quantities-24.png b/devel-docs/libgwydgets/html/gwy_stat_quantities-24.png
index d0f3d67..7636b9b 100644
Binary files a/devel-docs/libgwydgets/html/gwy_stat_quantities-24.png and b/devel-docs/libgwydgets/html/gwy_stat_quantities-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_straighten_path-24.png b/devel-docs/libgwydgets/html/gwy_straighten_path-24.png
index a6f2804..7751eb2 100644
Binary files a/devel-docs/libgwydgets/html/gwy_straighten_path-24.png and b/devel-docs/libgwydgets/html/gwy_straighten_path-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_subscript-20.png b/devel-docs/libgwydgets/html/gwy_subscript-20.png
index c2277ec..953a18f 100644
Binary files a/devel-docs/libgwydgets/html/gwy_subscript-20.png and b/devel-docs/libgwydgets/html/gwy_subscript-20.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_superscript-20.png b/devel-docs/libgwydgets/html/gwy_superscript-20.png
index 1baf2af..a01f57d 100644
Binary files a/devel-docs/libgwydgets/html/gwy_superscript-20.png and b/devel-docs/libgwydgets/html/gwy_superscript-20.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_synthetic_ballistic_deposition-24.png b/devel-docs/libgwydgets/html/gwy_synthetic_ballistic_deposition-24.png
index db325f7..d6368f7 100644
Binary files a/devel-docs/libgwydgets/html/gwy_synthetic_ballistic_deposition-24.png and b/devel-docs/libgwydgets/html/gwy_synthetic_ballistic_deposition-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_synthetic_brownian_motion-24.png b/devel-docs/libgwydgets/html/gwy_synthetic_brownian_motion-24.png
index 98923a8..4751c3a 100644
Binary files a/devel-docs/libgwydgets/html/gwy_synthetic_brownian_motion-24.png and b/devel-docs/libgwydgets/html/gwy_synthetic_brownian_motion-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_synthetic_columnar-24.png b/devel-docs/libgwydgets/html/gwy_synthetic_columnar-24.png
index b92e702..f711f91 100644
Binary files a/devel-docs/libgwydgets/html/gwy_synthetic_columnar-24.png and b/devel-docs/libgwydgets/html/gwy_synthetic_columnar-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_synthetic_diffusion-24.png b/devel-docs/libgwydgets/html/gwy_synthetic_diffusion-24.png
index 5258d4b..024a088 100644
Binary files a/devel-docs/libgwydgets/html/gwy_synthetic_diffusion-24.png and b/devel-docs/libgwydgets/html/gwy_synthetic_diffusion-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_synthetic_domains-24.png b/devel-docs/libgwydgets/html/gwy_synthetic_domains-24.png
index 2be5361..59f1eda 100644
Binary files a/devel-docs/libgwydgets/html/gwy_synthetic_domains-24.png and b/devel-docs/libgwydgets/html/gwy_synthetic_domains-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_synthetic_fibres-24.png b/devel-docs/libgwydgets/html/gwy_synthetic_fibres-24.png
new file mode 100644
index 0000000..a375cee
Binary files /dev/null and b/devel-docs/libgwydgets/html/gwy_synthetic_fibres-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_synthetic_lattice-24.png b/devel-docs/libgwydgets/html/gwy_synthetic_lattice-24.png
index 3c0fbf6..afa711f 100644
Binary files a/devel-docs/libgwydgets/html/gwy_synthetic_lattice-24.png and b/devel-docs/libgwydgets/html/gwy_synthetic_lattice-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_synthetic_line_noise-24.png b/devel-docs/libgwydgets/html/gwy_synthetic_line_noise-24.png
index 439b959..4e37032 100644
Binary files a/devel-docs/libgwydgets/html/gwy_synthetic_line_noise-24.png and b/devel-docs/libgwydgets/html/gwy_synthetic_line_noise-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_synthetic_noise-24.png b/devel-docs/libgwydgets/html/gwy_synthetic_noise-24.png
index afd6ead..8633fc0 100644
Binary files a/devel-docs/libgwydgets/html/gwy_synthetic_noise-24.png and b/devel-docs/libgwydgets/html/gwy_synthetic_noise-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_synthetic_objects-24.png b/devel-docs/libgwydgets/html/gwy_synthetic_objects-24.png
index f640fc2..bdb5a5d 100644
Binary files a/devel-docs/libgwydgets/html/gwy_synthetic_objects-24.png and b/devel-docs/libgwydgets/html/gwy_synthetic_objects-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_synthetic_particles-24.png b/devel-docs/libgwydgets/html/gwy_synthetic_particles-24.png
index 651d2ce..d3db9cb 100644
Binary files a/devel-docs/libgwydgets/html/gwy_synthetic_particles-24.png and b/devel-docs/libgwydgets/html/gwy_synthetic_particles-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_synthetic_pattern-24.png b/devel-docs/libgwydgets/html/gwy_synthetic_pattern-24.png
index c79bb7e..d67a779 100644
Binary files a/devel-docs/libgwydgets/html/gwy_synthetic_pattern-24.png and b/devel-docs/libgwydgets/html/gwy_synthetic_pattern-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_synthetic_phases-24.png b/devel-docs/libgwydgets/html/gwy_synthetic_phases-24.png
new file mode 100644
index 0000000..63ecd8b
Binary files /dev/null and b/devel-docs/libgwydgets/html/gwy_synthetic_phases-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_synthetic_spectral-24.png b/devel-docs/libgwydgets/html/gwy_synthetic_spectral-24.png
index 1521b37..cbe79bb 100644
Binary files a/devel-docs/libgwydgets/html/gwy_synthetic_spectral-24.png and b/devel-docs/libgwydgets/html/gwy_synthetic_spectral-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_synthetic_waves-24.png b/devel-docs/libgwydgets/html/gwy_synthetic_waves-24.png
index 3e63c87..eff1f79 100644
Binary files a/devel-docs/libgwydgets/html/gwy_synthetic_waves-24.png and b/devel-docs/libgwydgets/html/gwy_synthetic_waves-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_tilt-24.png b/devel-docs/libgwydgets/html/gwy_tilt-24.png
index 74bba2f..181b61c 100644
Binary files a/devel-docs/libgwydgets/html/gwy_tilt-24.png and b/devel-docs/libgwydgets/html/gwy_tilt-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_tip_dilation-24.png b/devel-docs/libgwydgets/html/gwy_tip_dilation-24.png
index 5704053..4b99c67 100644
Binary files a/devel-docs/libgwydgets/html/gwy_tip_dilation-24.png and b/devel-docs/libgwydgets/html/gwy_tip_dilation-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_tip_erosion-24.png b/devel-docs/libgwydgets/html/gwy_tip_erosion-24.png
index fe8a7d4..48cc1e2 100644
Binary files a/devel-docs/libgwydgets/html/gwy_tip_erosion-24.png and b/devel-docs/libgwydgets/html/gwy_tip_erosion-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_tip_estimation-24.png b/devel-docs/libgwydgets/html/gwy_tip_estimation-24.png
index 9426647..c87f50e 100644
Binary files a/devel-docs/libgwydgets/html/gwy_tip_estimation-24.png and b/devel-docs/libgwydgets/html/gwy_tip_estimation-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_tip_indent_analyze-24.png b/devel-docs/libgwydgets/html/gwy_tip_indent_analyze-24.png
index 65305a2..67e2a8b 100644
Binary files a/devel-docs/libgwydgets/html/gwy_tip_indent_analyze-24.png and b/devel-docs/libgwydgets/html/gwy_tip_indent_analyze-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_tip_lateral_force-24.png b/devel-docs/libgwydgets/html/gwy_tip_lateral_force-24.png
index 19038b0..b4a961a 100644
Binary files a/devel-docs/libgwydgets/html/gwy_tip_lateral_force-24.png and b/devel-docs/libgwydgets/html/gwy_tip_lateral_force-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_tip_map-24.png b/devel-docs/libgwydgets/html/gwy_tip_map-24.png
index 7da7dd9..ff91df3 100644
Binary files a/devel-docs/libgwydgets/html/gwy_tip_map-24.png and b/devel-docs/libgwydgets/html/gwy_tip_map-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_tip_model-24.png b/devel-docs/libgwydgets/html/gwy_tip_model-24.png
index 5bcc340..0f57f6c 100644
Binary files a/devel-docs/libgwydgets/html/gwy_tip_model-24.png and b/devel-docs/libgwydgets/html/gwy_tip_model-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_tip_pid-24.png b/devel-docs/libgwydgets/html/gwy_tip_pid-24.png
index b7f74fa..2a3606d 100644
Binary files a/devel-docs/libgwydgets/html/gwy_tip_pid-24.png and b/devel-docs/libgwydgets/html/gwy_tip_pid-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_unrotate-24.png b/devel-docs/libgwydgets/html/gwy_unrotate-24.png
index d77a1e7..954a469 100644
Binary files a/devel-docs/libgwydgets/html/gwy_unrotate-24.png and b/devel-docs/libgwydgets/html/gwy_unrotate-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_value_invert-24.png b/devel-docs/libgwydgets/html/gwy_value_invert-24.png
index e38a555..4f85f9b 100644
Binary files a/devel-docs/libgwydgets/html/gwy_value_invert-24.png and b/devel-docs/libgwydgets/html/gwy_value_invert-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_volume-24.png b/devel-docs/libgwydgets/html/gwy_volume-24.png
index 5e3ddf2..d1effc9 100644
Binary files a/devel-docs/libgwydgets/html/gwy_volume-24.png and b/devel-docs/libgwydgets/html/gwy_volume-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_volume_calibrate-24.png b/devel-docs/libgwydgets/html/gwy_volume_calibrate-24.png
index 2011863..c765049 100644
Binary files a/devel-docs/libgwydgets/html/gwy_volume_calibrate-24.png and b/devel-docs/libgwydgets/html/gwy_volume_calibrate-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_volume_dimensions-24.png b/devel-docs/libgwydgets/html/gwy_volume_dimensions-24.png
index 6147235..faa0ba1 100644
Binary files a/devel-docs/libgwydgets/html/gwy_volume_dimensions-24.png and b/devel-docs/libgwydgets/html/gwy_volume_dimensions-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_volume_fd-24.png b/devel-docs/libgwydgets/html/gwy_volume_fd-24.png
index e7a28e4..846421b 100644
Binary files a/devel-docs/libgwydgets/html/gwy_volume_fd-24.png and b/devel-docs/libgwydgets/html/gwy_volume_fd-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_volume_invert-24.png b/devel-docs/libgwydgets/html/gwy_volume_invert-24.png
index 7c2450f..5d2e513 100644
Binary files a/devel-docs/libgwydgets/html/gwy_volume_invert-24.png and b/devel-docs/libgwydgets/html/gwy_volume_invert-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_volume_kmeans-24.png b/devel-docs/libgwydgets/html/gwy_volume_kmeans-24.png
index d16773b..1e30b6e 100644
Binary files a/devel-docs/libgwydgets/html/gwy_volume_kmeans-24.png and b/devel-docs/libgwydgets/html/gwy_volume_kmeans-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_volume_kmedians-24.png b/devel-docs/libgwydgets/html/gwy_volume_kmedians-24.png
index ba33d87..20be117 100644
Binary files a/devel-docs/libgwydgets/html/gwy_volume_kmedians-24.png and b/devel-docs/libgwydgets/html/gwy_volume_kmedians-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_volume_slice-24.png b/devel-docs/libgwydgets/html/gwy_volume_slice-24.png
index ed1b502..13a3630 100644
Binary files a/devel-docs/libgwydgets/html/gwy_volume_slice-24.png and b/devel-docs/libgwydgets/html/gwy_volume_slice-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_volumize-24.png b/devel-docs/libgwydgets/html/gwy_volumize-24.png
index 9bde137..dfcebcd 100644
Binary files a/devel-docs/libgwydgets/html/gwy_volumize-24.png and b/devel-docs/libgwydgets/html/gwy_volumize-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_volumize_layers-24.png b/devel-docs/libgwydgets/html/gwy_volumize_layers-24.png
index 5e262c0..5349ff6 100644
Binary files a/devel-docs/libgwydgets/html/gwy_volumize_layers-24.png and b/devel-docs/libgwydgets/html/gwy_volumize_layers-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_xy_denoise-24.png b/devel-docs/libgwydgets/html/gwy_xy_denoise-24.png
new file mode 100644
index 0000000..9758b6c
Binary files /dev/null and b/devel-docs/libgwydgets/html/gwy_xy_denoise-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_zero_mean-24.png b/devel-docs/libgwydgets/html/gwy_zero_mean-24.png
index 690a0cf..09ac938 100644
Binary files a/devel-docs/libgwydgets/html/gwy_zero_mean-24.png and b/devel-docs/libgwydgets/html/gwy_zero_mean-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_zoom_1_1-24.png b/devel-docs/libgwydgets/html/gwy_zoom_1_1-24.png
index 4383133..2506a6a 100644
Binary files a/devel-docs/libgwydgets/html/gwy_zoom_1_1-24.png and b/devel-docs/libgwydgets/html/gwy_zoom_1_1-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_zoom_fit-24.png b/devel-docs/libgwydgets/html/gwy_zoom_fit-24.png
index 45cdd33..0e84941 100644
Binary files a/devel-docs/libgwydgets/html/gwy_zoom_fit-24.png and b/devel-docs/libgwydgets/html/gwy_zoom_fit-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_zoom_in-24.png b/devel-docs/libgwydgets/html/gwy_zoom_in-24.png
index cdd20ab..54d3e14 100644
Binary files a/devel-docs/libgwydgets/html/gwy_zoom_in-24.png and b/devel-docs/libgwydgets/html/gwy_zoom_in-24.png differ
diff --git a/devel-docs/libgwydgets/html/gwy_zoom_out-24.png b/devel-docs/libgwydgets/html/gwy_zoom_out-24.png
index c47199e..fb0ad41 100644
Binary files a/devel-docs/libgwydgets/html/gwy_zoom_out-24.png and b/devel-docs/libgwydgets/html/gwy_zoom_out-24.png differ
diff --git a/devel-docs/libgwydgets/html/index.html b/devel-docs/libgwydgets/html/index.html
index 6846edb..3e1f464 100644
--- a/devel-docs/libgwydgets/html/index.html
+++ b/devel-docs/libgwydgets/html/index.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Gwyddion Widgets Library Reference Manual: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="next" href="DataWindowWidgets.html" title="Data Windows and Views">
<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
@@ -15,7 +15,7 @@
<div>
<div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">Gwyddion Widgets Library Reference Manual</p></th></tr></table></div>
<div><p class="releaseinfo">
- For Gwyddion 2.47.
+ For Gwyddion 2.49.
The latest version of this document can be found on-line at
<a class="ulink" href="http://gwyddion.net/documentation/libgwydgets/index.php" target="_top">http://gwyddion.net/documentation/libgwydgets/</a>.
</p></div>
@@ -124,6 +124,9 @@
<dt><span class="chapter"><a href="GeneralWidgets.html">General Widgets</a></span></dt>
<dd><dl>
<dt>
+<span class="refentrytitle"><a href="GwyAdjustBar.html">GwyAdjustBar</a></span><span class="refpurpose"> — Compact adjustment visualisation and modification</span>
+</dt>
+<dt>
<span class="refentrytitle"><a href="GwyColorButton.html">GwyColorButton</a></span><span class="refpurpose"> — A color displaying button</span>
</dt>
<dt>
@@ -213,6 +216,8 @@
<dt><span class="index"><a href="api-index-2-43.html">Index of new symbols in 2.43</a></span></dt>
<dt><span class="index"><a href="api-index-2-45.html">Index of new symbols in 2.45</a></span></dt>
<dt><span class="index"><a href="api-index-2-46.html">Index of new symbols in 2.46</a></span></dt>
+<dt><span class="index"><a href="api-index-2-48.html">Index of new symbols in 2.48</a></span></dt>
+<dt><span class="index"><a href="api-index-2-49.html">Index of new symbols in 2.49</a></span></dt>
</dl></div>
<p>
This library contains Gwyddion extension Gtk+ widgets and widget
diff --git a/devel-docs/libgwydgets/html/libgwydgets-GwyGraphBasics.html b/devel-docs/libgwydgets/html/libgwydgets-GwyGraphBasics.html
index aa62926..c46b7c6 100644
--- a/devel-docs/libgwydgets/html/libgwydgets-GwyGraphBasics.html
+++ b/devel-docs/libgwydgets/html/libgwydgets-GwyGraphBasics.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GwyGraphBasics: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="GraphWidgets.html" title="Graphs">
<link rel="prev" href="GwyAxis.html" title="GwyAxis">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwydgets-GwyGraphBasics.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -131,7 +131,7 @@
</div>
<div class="refsect1">
<a name="libgwydgets-GwyGraphBasics.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -165,7 +165,7 @@ gwy_graph_draw_point (<em class="parameter"><code><a href="http://developer.gnom
<p>Draws a point on a drawable.</p>
<div class="refsect3">
<a name="gwy-graph-draw-point.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -228,7 +228,7 @@ gwy_graph_draw_line (<em class="parameter"><code><a href="http://developer.gnome
<p>Draws a line segment on a drawable.</p>
<div class="refsect3">
<a name="gwy-graph-draw-line.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -296,7 +296,7 @@ gwy_graph_draw_curve (<em class="parameter"><code><a href="http://developer.gnom
<p>Draws a single graph curve on a drawable.</p>
<div class="refsect3">
<a name="gwy-graph-draw-curve.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -339,7 +339,7 @@ gwy_graph_draw_selection_points (<em class="parameter"><code><a href="/usr/share
<p>Draws selection points on a drawable.</p>
<div class="refsect3">
<a name="gwy-graph-draw-selection-points.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -381,7 +381,7 @@ gwy_graph_draw_selection_areas (<em class="parameter"><code><a href="/usr/share/
<p>Draws selected area on a drawable.</p>
<div class="refsect3">
<a name="gwy-graph-draw-selection-areas.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -425,7 +425,7 @@ gwy_graph_draw_selection_lines (<em class="parameter"><code><a href="/usr/share/
<p>Draws selected lines on a drawable.</p>
<div class="refsect3">
<a name="gwy-graph-draw-selection-lines.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -473,7 +473,7 @@ gwy_graph_draw_selection_xareas (<em class="parameter"><code><a href="/usr/share
<p>Draws selected x-area on a drawable.</p>
<div class="refsect3">
<a name="gwy-graph-draw-selection-xareas.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -516,7 +516,7 @@ gwy_graph_draw_selection_yareas (<em class="parameter"><code><a href="/usr/share
<p>Drawss selected y-area on a drawable.</p>
<div class="refsect3">
<a name="gwy-graph-draw-selection-yareas.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -562,7 +562,7 @@ gwy_graph_draw_grid (<em class="parameter"><code><a href="/usr/share/gtk-doc/htm
<p>Draws an array of grid lines on a drawable.</p>
<div class="refsect3">
<a name="gwy-graph-draw-grid.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -624,7 +624,7 @@ curves when there is no reason to prefer a particular color. Note they
can occasionally change between version, even their number can change.</p>
<div class="refsect3">
<a name="gwy-graph-get-preset-color.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -676,7 +676,7 @@ gwy_graph_get_n_preset_colors (<em class="parameter"><code><span class="type">vo
<p>Graph area specification (for graph drawing primitives).</p>
<div class="refsect3">
<a name="GwyGraphActiveAreaSpecs.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="struct_members_name">
<col class="struct_members_description">
diff --git a/devel-docs/libgwydgets/html/libgwydgets-gwycombobox.html b/devel-docs/libgwydgets/html/libgwydgets-gwycombobox.html
index 368af71..9336e4e 100644
--- a/devel-docs/libgwydgets/html/libgwydgets-gwycombobox.html
+++ b/devel-docs/libgwydgets/html/libgwydgets-gwycombobox.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>gwycombobox: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="WidgetUtilities.html" title="Widget Utilities">
<link rel="prev" href="libgwydgets-gwygrainvaluemenu.html" title="gwygrainvaluemenu">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwydgets-gwycombobox.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -222,7 +222,7 @@ gwy_enum_combo_box_new (<em class="parameter"><code>const <span class="type">Gwy
because it is used directly as the model.</p>
<div class="refsect3">
<a name="gwy-enum-combo-box-new.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -288,7 +288,7 @@ gwy_enum_combo_box_newl (<em class="parameter"><code><a href="/usr/share/gtk-doc
lifetime of the widget.</p>
<div class="refsect3">
<a name="gwy-enum-combo-box-newl.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -341,7 +341,7 @@ gwy_combo_box_metric_unit_new (<em class="parameter"><code><a href="/usr/share/g
<p>The integer value is the power of 10.</p>
<div class="refsect3">
<a name="gwy-combo-box-metric-unit-new.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -401,7 +401,7 @@ gwy_combo_box_metric_unit_set_unit (<em class="parameter"><code><a href="/usr/sh
<p>Changes the unit selection displayed by a metric unit combo box.</p>
<div class="refsect3">
<a name="gwy-combo-box-metric-unit-set-unit.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -448,7 +448,7 @@ gwy_combo_box_graph_curve_new (<em class="parameter"><code><a href="/usr/share/g
graph modules. The graph model is not permitted to change.</p>
<div class="refsect3">
<a name="gwy-combo-box-graph-curve-new.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -495,7 +495,7 @@ gwy_enum_combo_box_set_active (<em class="parameter"><code><a href="/usr/share/g
<p>Sets the active combo box item by corresponding enum value.</p>
<div class="refsect3">
<a name="gwy-enum-combo-box-set-active.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -524,7 +524,7 @@ gwy_enum_combo_box_get_active (<em class="parameter"><code><a href="/usr/share/g
<p>Gets the enum value corresponding to currently active combo box item.</p>
<div class="refsect3">
<a name="gwy-enum-combo-box-get-active.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -552,7 +552,7 @@ gwy_enum_combo_box_update_int (<em class="parameter"><code><a href="/usr/share/g
combo box value.</p>
<div class="refsect3">
<a name="gwy-enum-combo-box-update-int.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwydgets/html/libgwydgets-gwydgetenums.html b/devel-docs/libgwydgets/html/libgwydgets-gwydgetenums.html
index 8e733a8..325a727 100644
--- a/devel-docs/libgwydgets/html/libgwydgets-gwydgetenums.html
+++ b/devel-docs/libgwydgets/html/libgwydgets-gwydgetenums.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>gwydgetenums: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="WidgetUtilities.html" title="Widget Utilities">
<link rel="prev" href="libgwydgets-gwydgets.html" title="gwydgets">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwydgets-gwydgetenums.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -49,7 +49,7 @@
</div>
<div class="refsect1">
<a name="libgwydgets-gwydgetenums.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -162,7 +162,7 @@ gwy_graph_curve_type_get_enum (<em class="parameter"><code><span class="type">vo
<p>Labeled axis tick mark format.</p>
<div class="refsect3">
<a name="GwyAxisScaleFormat.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
@@ -200,7 +200,7 @@ gwy_graph_curve_type_get_enum (<em class="parameter"><code><span class="type">vo
<p>The type of 3D view change that happens when user drags it with mouse.</p>
<div class="refsect3">
<a name="Gwy3DMovement.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
@@ -252,7 +252,7 @@ gwy_graph_curve_type_get_enum (<em class="parameter"><code><span class="type">vo
<p>3D View projection type.</p>
<div class="refsect3">
<a name="Gwy3DProjection.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
@@ -283,7 +283,7 @@ gwy_graph_curve_type_get_enum (<em class="parameter"><code><span class="type">vo
<p>3D View data visualization type.</p>
<div class="refsect3">
<a name="Gwy3DVisualization.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
@@ -335,7 +335,7 @@ gwy_graph_curve_type_get_enum (<em class="parameter"><code><span class="type">vo
<p>3D View label type.</p>
<div class="refsect3">
<a name="Gwy3DViewLabel.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
@@ -387,7 +387,7 @@ gwy_graph_curve_type_get_enum (<em class="parameter"><code><span class="type">vo
<p>Units placement on a <a class="link" href="GwyRuler.html" title="GwyRuler"><span class="type">GwyRuler</span></a>.</p>
<div class="refsect3">
<a name="GwyUnitsPlacement.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
@@ -417,10 +417,11 @@ gwy_graph_curve_type_get_enum (<em class="parameter"><code><span class="type">vo
<hr>
<div class="refsect2">
<a name="GwyHScaleStyle"></a><h3>enum GwyHScaleStyle</h3>
-<p>Options controlling <a class="link" href="libgwydgets-gwydgetutils.html#gwy-table-attach-hscale" title="gwy_table_attach_hscale ()"><code class="function">gwy_table_attach_hscale()</code></a> behaviour.</p>
+<p>Options controlling <a class="link" href="libgwydgets-gwydgetutils.html#gwy-table-attach-adjbar" title="gwy_table_attach_adjbar ()"><code class="function">gwy_table_attach_adjbar()</code></a> and <a class="link" href="libgwydgets-gwydgetutils.html#gwy-table-attach-hscale" title="gwy_table_attach_hscale ()"><code class="function">gwy_table_attach_hscale()</code></a>
+behaviour.</p>
<div class="refsect3">
<a name="GwyHScaleStyle.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
@@ -431,36 +432,44 @@ gwy_graph_curve_type_get_enum (<em class="parameter"><code><span class="type">vo
<td class="enum_member_name"><p><a name="GWY-HSCALE-DEFAULT:CAPS"></a>GWY_HSCALE_DEFAULT</p></td>
<td class="enum_member_description">
<p>Default label, hscale, spinbutton, and units widget
- row.</p>
+ row. Note that the default mapping is linear for
+ hscales but signed square root for adjust bars.</p>
</td>
<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GWY-HSCALE-LOG:CAPS"></a>GWY_HSCALE_LOG</p></td>
<td class="enum_member_description">
-<p>Hscale is logarithmic.</p>
+<p>The scale mapping is logarithmic.</p>
</td>
<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GWY-HSCALE-SQRT:CAPS"></a>GWY_HSCALE_SQRT</p></td>
<td class="enum_member_description">
-<p>Hscale is square root.</p>
+<p>The scale mapping is signed square root.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GWY-HSCALE-LINEAR:CAPS"></a>GWY_HSCALE_LINEAR</p></td>
+<td class="enum_member_description">
+<p>The scale mapping is linear. (Since 2.49)</p>
</td>
<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GWY-HSCALE-NO-SCALE:CAPS"></a>GWY_HSCALE_NO_SCALE</p></td>
<td class="enum_member_description">
-<p>There is no hscale.</p>
+<p>There is no hscale/adjust bar.</p>
</td>
<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GWY-HSCALE-WIDGET:CAPS"></a>GWY_HSCALE_WIDGET</p></td>
<td class="enum_member_description">
-<p>An user-specified widget is used in place of hscale and
- spinbutton.</p>
+<p>An user-specified widget is used in place of the
+ adjustment control(s).</p>
</td>
<td class="enum_member_annotations"> </td>
</tr>
@@ -477,7 +486,17 @@ gwy_graph_curve_type_get_enum (<em class="parameter"><code><span class="type">vo
<td class="enum_member_name"><p><a name="GWY-HSCALE-CHECK:CAPS"></a>GWY_HSCALE_CHECK</p></td>
<td class="enum_member_description">
<p>The label is actually a check button that controls
- sensitivity of the row.</p>
+ sensitivity of the row. This is a flag, to be bitwise
+ or-ed with other values.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GWY-HSCALE-SNAP:CAPS"></a>GWY_HSCALE_SNAP</p></td>
+<td class="enum_member_description">
+<p>The adjust bar snaps to ticks (hscales cannot snap).
+ This is a flag, to be bitwise or-ed with other values.
+ (Since 2.49)</p>
</td>
<td class="enum_member_annotations"> </td>
</tr>
@@ -490,7 +509,7 @@ gwy_graph_curve_type_get_enum (<em class="parameter"><code><span class="type">vo
<a name="GwyGraphStatusType"></a><h3>enum GwyGraphStatusType</h3>
<div class="refsect3">
<a name="GwyGraphStatusType.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
@@ -541,7 +560,7 @@ gwy_graph_curve_type_get_enum (<em class="parameter"><code><span class="type">vo
<a name="GwyGraphGridType"></a><h3>enum GwyGraphGridType</h3>
<div class="refsect3">
<a name="GwyGraphGridType.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
@@ -572,7 +591,7 @@ gwy_graph_curve_type_get_enum (<em class="parameter"><code><span class="type">vo
<a name="GwyGraphPointType"></a><h3>enum GwyGraphPointType</h3>
<div class="refsect3">
<a name="GwyGraphPointType.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
@@ -684,7 +703,7 @@ gwy_graph_curve_type_get_enum (<em class="parameter"><code><span class="type">vo
<p>Graph curve plotting type.</p>
<div class="refsect3">
<a name="GwyGraphCurveType.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
@@ -728,7 +747,7 @@ gwy_graph_curve_type_get_enum (<em class="parameter"><code><span class="type">vo
<a name="GwyGraphLabelPosition"></a><h3>enum GwyGraphLabelPosition</h3>
<div class="refsect3">
<a name="GwyGraphLabelPosition.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
@@ -770,7 +789,7 @@ gwy_graph_curve_type_get_enum (<em class="parameter"><code><span class="type">vo
<p>Graph ASCII export style.</p>
<div class="refsect3">
<a name="GwyGraphModelExportStyle.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
@@ -853,7 +872,7 @@ gwy_graph_curve_type_get_enum (<em class="parameter"><code><span class="type">vo
<p>Types of color gradient mapping in <a class="link" href="GwyLayerBasic.html" title="GwyLayerBasic"><span class="type">GwyLayerBasic</span></a>.</p>
<div class="refsect3">
<a name="GwyLayerBasicRangeType.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
@@ -903,7 +922,7 @@ gwy_graph_curve_type_get_enum (<em class="parameter"><code><span class="type">vo
<p>Curve drawing type in <a class="link" href="GwyCurve.html" title="GwyCurve"><span class="type">GwyCurve</span></a>.</p>
<div class="refsect3">
<a name="GwyCurveType.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
@@ -940,7 +959,7 @@ gwy_graph_curve_type_get_enum (<em class="parameter"><code><span class="type">vo
<a name="GwyCurveChannel"></a><h3>enum GwyCurveChannel</h3>
<div class="refsect3">
<a name="GwyCurveChannel.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
@@ -972,7 +991,7 @@ gwy_graph_curve_type_get_enum (<em class="parameter"><code><span class="type">vo
<p><a class="link" href="GwyMarkerBox.html" title="GwyMarkerBox"><span class="type">GwyMarkerBox</span></a> operation type (for validation).</p>
<div class="refsect3">
<a name="GwyMarkerOperationType.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
@@ -1010,7 +1029,7 @@ gwy_graph_curve_type_get_enum (<em class="parameter"><code><span class="type">vo
<p><a class="link" href="GwyDataView.html" title="GwyDataView"><span class="type">GwyDataView</span></a> layer identification.</p>
<div class="refsect3">
<a name="GwyDataViewLayerType.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
@@ -1048,7 +1067,7 @@ gwy_graph_curve_type_get_enum (<em class="parameter"><code><span class="type">vo
<p>Axis ticks style (used in <a class="link" href="GwyColorAxis.html" title="GwyColorAxis"><span class="type">GwyColorAxis</span></a>).</p>
<div class="refsect3">
<a name="GwyTicksStyle.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
diff --git a/devel-docs/libgwydgets/html/libgwydgets-gwydgets.html b/devel-docs/libgwydgets/html/libgwydgets-gwydgets.html
index ca69fc5..af7c4a1 100644
--- a/devel-docs/libgwydgets/html/libgwydgets-gwydgets.html
+++ b/devel-docs/libgwydgets/html/libgwydgets-gwydgets.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>gwydgets: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="WidgetUtilities.html" title="Widget Utilities">
<link rel="prev" href="WidgetUtilities.html" title="Widget Utilities">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwydgets-gwydgets.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -68,7 +68,7 @@
</div>
<div class="refsect1">
<a name="libgwydgets-gwydgets.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
diff --git a/devel-docs/libgwydgets/html/libgwydgets-gwydgetutils.html b/devel-docs/libgwydgets/html/libgwydgets-gwydgetutils.html
index 18c103d..f1dbc71 100644
--- a/devel-docs/libgwydgets/html/libgwydgets-gwydgetutils.html
+++ b/devel-docs/libgwydgets/html/libgwydgets-gwydgetutils.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>gwydgetutils: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="WidgetUtilities.html" title="Widget Utilities">
<link rel="prev" href="libgwydgets-gwydgetenums.html" title="gwydgetenums">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwydgets-gwydgetutils.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -71,6 +71,14 @@
</tr>
<tr>
<td class="function_type">
+<a href="http://developer.gnome.org/doc/API/2.0/gtk/gtk3GtkWidget.html#GtkWidget-struct"><span class="returnvalue">GtkWidget</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="libgwydgets-gwydgetutils.html#gwy-table-attach-adjbar" title="gwy_table_attach_adjbar ()">gwy_table_attach_adjbar</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
<span class="returnvalue">void</span>
</td>
<td class="function_name">
@@ -78,33 +86,43 @@
</td>
</tr>
<tr>
-<td class="define_keyword">#define</td>
+<td class="function_type">
+<a href="http://developer.gnome.org/doc/API/2.0/gtk/gtk3GtkWidget.html#GtkWidget-struct"><span class="returnvalue">GtkWidget</span></a> *
+</td>
<td class="function_name">
-<a class="link" href="libgwydgets-gwydgetutils.html#gwy-table-hscale-get-scale" title="gwy_table_hscale_get_scale()">gwy_table_hscale_get_scale</a><span class="c_punctuation">()</span>
+<a class="link" href="libgwydgets-gwydgetutils.html#gwy-table-hscale-get-scale" title="gwy_table_hscale_get_scale ()">gwy_table_hscale_get_scale</a> <span class="c_punctuation">()</span>
</td>
</tr>
<tr>
-<td class="define_keyword">#define</td>
+<td class="function_type">
+<a href="http://developer.gnome.org/doc/API/2.0/gtk/gtk3GtkWidget.html#GtkWidget-struct"><span class="returnvalue">GtkWidget</span></a> *
+</td>
<td class="function_name">
-<a class="link" href="libgwydgets-gwydgetutils.html#gwy-table-hscale-get-check" title="gwy_table_hscale_get_check()">gwy_table_hscale_get_check</a><span class="c_punctuation">()</span>
+<a class="link" href="libgwydgets-gwydgetutils.html#gwy-table-hscale-get-check" title="gwy_table_hscale_get_check ()">gwy_table_hscale_get_check</a> <span class="c_punctuation">()</span>
</td>
</tr>
<tr>
-<td class="define_keyword">#define</td>
+<td class="function_type">
+<a href="http://developer.gnome.org/doc/API/2.0/gtk/gtk3GtkWidget.html#GtkWidget-struct"><span class="returnvalue">GtkWidget</span></a> *
+</td>
<td class="function_name">
-<a class="link" href="libgwydgets-gwydgetutils.html#gwy-table-hscale-get-label" title="gwy_table_hscale_get_label()">gwy_table_hscale_get_label</a><span class="c_punctuation">()</span>
+<a class="link" href="libgwydgets-gwydgetutils.html#gwy-table-hscale-get-label" title="gwy_table_hscale_get_label ()">gwy_table_hscale_get_label</a> <span class="c_punctuation">()</span>
</td>
</tr>
<tr>
-<td class="define_keyword">#define</td>
+<td class="function_type">
+<a href="http://developer.gnome.org/doc/API/2.0/gtk/gtk3GtkWidget.html#GtkWidget-struct"><span class="returnvalue">GtkWidget</span></a> *
+</td>
<td class="function_name">
-<a class="link" href="libgwydgets-gwydgetutils.html#gwy-table-hscale-get-units" title="gwy_table_hscale_get_units()">gwy_table_hscale_get_units</a><span class="c_punctuation">()</span>
+<a class="link" href="libgwydgets-gwydgetutils.html#gwy-table-hscale-get-units" title="gwy_table_hscale_get_units ()">gwy_table_hscale_get_units</a> <span class="c_punctuation">()</span>
</td>
</tr>
<tr>
-<td class="define_keyword">#define</td>
+<td class="function_type">
+<a href="http://developer.gnome.org/doc/API/2.0/gtk/gtk3GtkWidget.html#GtkWidget-struct"><span class="returnvalue">GtkWidget</span></a> *
+</td>
<td class="function_name">
-<a class="link" href="libgwydgets-gwydgetutils.html#gwy-table-hscale-get-middle-widget" title="gwy_table_hscale_get_middle_widget()">gwy_table_hscale_get_middle_widget</a><span class="c_punctuation">()</span>
+<a class="link" href="libgwydgets-gwydgetutils.html#gwy-table-hscale-get-middle-widget" title="gwy_table_hscale_get_middle_widget ()">gwy_table_hscale_get_middle_widget</a> <span class="c_punctuation">()</span>
</td>
</tr>
<tr>
@@ -222,7 +240,7 @@
<p>Gets a properly rounded integer value from an adjustment, cast to <a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a>.</p>
<div class="refsect3">
<a name="gwy-adjustment-get-int.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -230,7 +248,7 @@
</colgroup>
<tbody><tr>
<td class="parameter_name"><p>adj</p></td>
-<td class="parameter_description"><p>A <a href="http://developer.gnome.org/doc/API/2.0/gtk/gtk3GtkAdjustment.html#GtkAdjustment-struct"><span class="type">GtkAdjustment</span></a> to get value of.</p></td>
+<td class="parameter_description"><p>A <a href="/usr/share/gtk-doc/html/gtk3GtkAdjustment.html#GtkAdjustment-struct"><span class="type">GtkAdjustment</span></a> to get value of.</p></td>
<td class="parameter_annotations"> </td>
</tr></tbody>
</table></div>
@@ -239,16 +257,16 @@
<hr>
<div class="refsect2">
<a name="gwy-table-attach-spinbutton"></a><h3>gwy_table_attach_spinbutton ()</h3>
-<pre class="programlisting"><a href="http://developer.gnome.org/doc/API/2.0/gtk/gtk3GtkWidget.html#GtkWidget-struct"><span class="returnvalue">GtkWidget</span></a> *
-gwy_table_attach_spinbutton (<em class="parameter"><code><a href="http://developer.gnome.org/doc/API/2.0/gtk/gtk3GtkWidget.html#GtkWidget-struct"><span class="type">GtkWidget</span></a> *table</code></em>,
- <em class="parameter"><code><a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> row</code></em>,
- <em class="parameter"><code>const <a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
- <em class="parameter"><code>const <a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *units</code></em>,
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/gtk3GtkWidget.html#GtkWidget-struct"><span class="returnvalue">GtkWidget</span></a> *
+gwy_table_attach_spinbutton (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gtk3GtkWidget.html#GtkWidget-struct"><span class="type">GtkWidget</span></a> *table</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> row</code></em>,
+ <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
+ <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *units</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gtk2GtkObject.html#GtkObject-struct"><span class="type">GtkObject</span></a> *adj</code></em>);</pre>
<p>Attaches a spinbutton with two labels to a table.</p>
<div class="refsect3">
<a name="gwy-table-attach-spinbutton.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -302,7 +320,7 @@ gwy_table_attach_row (<em class="parameter"><code><a href="/usr/share/gtk-doc/ht
<p>Attaches a widget with two labels to a table.</p>
<div class="refsect3">
<a name="gwy-table-attach-row.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -350,16 +368,19 @@ gwy_table_attach_hscale (<em class="parameter"><code><a href="/usr/share/gtk-doc
<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *units</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gtk2GtkObject.html#GtkObject-struct"><span class="type">GtkObject</span></a> *pivot</code></em>,
<em class="parameter"><code><a class="link" href="libgwydgets-gwydgetenums.html#GwyHScaleStyle" title="enum GwyHScaleStyle"><span class="type">GwyHScaleStyle</span></a> style</code></em>);</pre>
-<p>Attaches a spinbutton with a scale and labels, or something else to a table
+<p>Attaches a spinbutton with a scale and labels, or something else, to a table
row.</p>
-<p>You can use functions <a class="link" href="libgwydgets-gwydgetutils.html#gwy-table-hscale-get-scale" title="gwy_table_hscale_get_scale()"><code class="function">gwy_table_hscale_get_scale()</code></a>,
-<a class="link" href="libgwydgets-gwydgetutils.html#gwy-table-hscale-get-check" title="gwy_table_hscale_get_check()"><code class="function">gwy_table_hscale_get_check()</code></a>, etc. to get the various widgets from pivot
+<p>The group of controls takes four table columns: label, scale, spinbutton
+and units.</p>
+<p>You can use functions <a class="link" href="libgwydgets-gwydgetutils.html#gwy-table-hscale-get-scale" title="gwy_table_hscale_get_scale ()"><code class="function">gwy_table_hscale_get_scale()</code></a>,
+<a class="link" href="libgwydgets-gwydgetutils.html#gwy-table-hscale-get-check" title="gwy_table_hscale_get_check ()"><code class="function">gwy_table_hscale_get_check()</code></a>, etc. to get the various widgets from pivot
later.</p>
-<p>FIXME: What exactly happens with various <em class="parameter"><code>style</code></em>
- values is quite convoluted.</p>
+<p>The function usually does the right thing but what exactly happens with
+various <em class="parameter"><code>style</code></em>
+ values is a bit convoluted.</p>
<div class="refsect3">
<a name="gwy-table-attach-hscale.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -415,19 +436,100 @@ itself.</p>
</div>
<hr>
<div class="refsect2">
+<a name="gwy-table-attach-adjbar"></a><h3>gwy_table_attach_adjbar ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/gtk3GtkWidget.html#GtkWidget-struct"><span class="returnvalue">GtkWidget</span></a> *
+gwy_table_attach_adjbar (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gtk3GtkWidget.html#GtkWidget-struct"><span class="type">GtkWidget</span></a> *table</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> row</code></em>,
+ <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
+ <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *units</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gtk2GtkObject.html#GtkObject-struct"><span class="type">GtkObject</span></a> *pivot</code></em>,
+ <em class="parameter"><code><a class="link" href="libgwydgets-gwydgetenums.html#GwyHScaleStyle" title="enum GwyHScaleStyle"><span class="type">GwyHScaleStyle</span></a> style</code></em>);</pre>
+<p>Attaches an adjustment bar with spinbutton and labels, or something else, to
+a table row.</p>
+<p>The group of controls takes three table columns: adjustment bar, spinbutton
+and units.</p>
+<p>You can use functions <a class="link" href="libgwydgets-gwydgetutils.html#gwy-table-hscale-get-scale" title="gwy_table_hscale_get_scale ()"><code class="function">gwy_table_hscale_get_scale()</code></a>,
+<a class="link" href="libgwydgets-gwydgetutils.html#gwy-table-hscale-get-check" title="gwy_table_hscale_get_check ()"><code class="function">gwy_table_hscale_get_check()</code></a>, etc. to get the various widgets from pivot
+later.</p>
+<p>The function usually does the right thing but what exactly happens with
+various <em class="parameter"><code>style</code></em>
+ values is a bit convoluted.</p>
+<div class="refsect3">
+<a name="gwy-table-attach-adjbar.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>table</p></td>
+<td class="parameter_description"><p>A <a href="/usr/share/gtk-doc/html/gtk3GtkTable.html#GtkTable-struct"><span class="type">GtkTable</span></a>.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>row</p></td>
+<td class="parameter_description"><p>Row in <em class="parameter"><code>table</code></em>
+to attach stuff to.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>name</p></td>
+<td class="parameter_description"><p>The label before <em class="parameter"><code>pivot</code></em>
+widget.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>units</p></td>
+<td class="parameter_description"><p>The label after <em class="parameter"><code>pivot</code></em>
+widget.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>pivot</p></td>
+<td class="parameter_description"><p>Either a <a href="/usr/share/gtk-doc/html/gtk3GtkAdjustment.html#GtkAdjustment-struct"><span class="type">GtkAdjustment</span></a>, or a widget to use instead of the spin
+button and scale widgets (if <em class="parameter"><code>style</code></em>
+is <a class="link" href="libgwydgets-gwydgetenums.html#GWY-HSCALE-WIDGET:CAPS"><code class="literal">GWY_HSCALE_WIDGET</code></a>).</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>style</p></td>
+<td class="parameter_description"><p>A mix of options an flags determining what and how will be attached
+to the table.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gwy-table-attach-adjbar.returns"></a><h4>Returns</h4>
+<p> The middle widget. If a spinbutton is attached, then this
+spinbutton is returned. Otherwise (in <a class="link" href="libgwydgets-gwydgetenums.html#GWY-HSCALE-WIDGET:CAPS"><code class="literal">GWY_HSCALE_WIDGET</code></a> case)
+<em class="parameter"><code>pivot</code></em>
+itself.</p>
+</div>
+<p class="since">Since: <a class="link" href="api-index-2-49.html#api-index-2.49">2.49</a></p>
+</div>
+<hr>
+<div class="refsect2">
<a name="gwy-table-hscale-set-sensitive"></a><h3>gwy_table_hscale_set_sensitive ()</h3>
<pre class="programlisting"><span class="returnvalue">void</span>
gwy_table_hscale_set_sensitive (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gtk2GtkObject.html#GtkObject-struct"><span class="type">GtkObject</span></a> *pivot</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> sensitive</code></em>);</pre>
-<p>Sets sensitivity of a group of controls create by <a class="link" href="libgwydgets-gwydgetutils.html#gwy-table-attach-hscale" title="gwy_table_attach_hscale ()"><code class="function">gwy_table_attach_hscale()</code></a>.</p>
-<p>Do not use with <a class="link" href="libgwydgets-gwydgetenums.html#GWY-HSCALE-CHECK:CAPS"><code class="literal">GWY_HSCALE_CHECK</code></a>, simply set state of the check button
-in such a case.</p>
-<p>This function can be used with rows created by <a class="link" href="libgwydgets-gwydgetutils.html#gwy-table-attach-spinbutton" title="gwy_table_attach_spinbutton ()"><code class="function">gwy_table_attach_spinbutton()</code></a>
-too if the spinbutton is passed as <em class="parameter"><code>pivot</code></em>
+<p>Sets sensitivity of a group of controls create by <a class="link" href="libgwydgets-gwydgetutils.html#gwy-table-attach-hscale" title="gwy_table_attach_hscale ()"><code class="function">gwy_table_attach_hscale()</code></a>
+or <a class="link" href="libgwydgets-gwydgetutils.html#gwy-table-attach-adjbar" title="gwy_table_attach_adjbar ()"><code class="function">gwy_table_attach_adjbar()</code></a>.</p>
+<p>For controls without an enable/disable check button controls the sensitivity
+as expected. If the hscale was created with <a class="link" href="libgwydgets-gwydgetenums.html#GWY-HSCALE-CHECK:CAPS"><code class="literal">GWY_HSCALE_CHECK</code></a> you usually
+manage its sensitivity by setting state of the check button instead.
+Only use this function when you want to enable/disable the entire group
+of controls, including the check button.</p>
+<p>This function can also be used with rows created by
+<a class="link" href="libgwydgets-gwydgetutils.html#gwy-table-attach-spinbutton" title="gwy_table_attach_spinbutton ()"><code class="function">gwy_table_attach_spinbutton()</code></a> too if the spinbutton is passed as <em class="parameter"><code>pivot</code></em>
.</p>
<div class="refsect3">
<a name="gwy-table-hscale-set-sensitive.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -452,14 +554,15 @@ too if the spinbutton is passed as <em class="parameter"><code>pivot</code></em>
</div>
<hr>
<div class="refsect2">
-<a name="gwy-table-hscale-get-scale"></a><h3>gwy_table_hscale_get_scale()</h3>
-<pre class="programlisting">#define gwy_table_hscale_get_scale(pivot)</pre>
+<a name="gwy-table-hscale-get-scale"></a><h3>gwy_table_hscale_get_scale ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/gtk3GtkWidget.html#GtkWidget-struct"><span class="returnvalue">GtkWidget</span></a> *
+gwy_table_hscale_get_scale (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gtk2GtkObject.html#GtkObject-struct"><span class="type">GtkObject</span></a> *pivot</code></em>);</pre>
<p>Gets the horizontal scale associated with a pivot object.</p>
<p>May return <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if constructed with <a class="link" href="libgwydgets-gwydgetenums.html#GWY-HSCALE-NO-SCALE:CAPS"><code class="literal">GWY_HSCALE_NO_SCALE</code></a>,
<a class="link" href="libgwydgets-gwydgetenums.html#GWY-HSCALE-WIDGET:CAPS"><code class="literal">GWY_HSCALE_WIDGET</code></a>, or <a class="link" href="libgwydgets-gwydgetenums.html#GWY-HSCALE-WIDGET-NO-EXPAND:CAPS"><code class="literal">GWY_HSCALE_WIDGET_NO_EXPAND</code></a>.</p>
<div class="refsect3">
<a name="gwy-table-hscale-get-scale.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -475,13 +578,14 @@ too if the spinbutton is passed as <em class="parameter"><code>pivot</code></em>
</div>
<hr>
<div class="refsect2">
-<a name="gwy-table-hscale-get-check"></a><h3>gwy_table_hscale_get_check()</h3>
-<pre class="programlisting">#define gwy_table_hscale_get_check(pivot)</pre>
+<a name="gwy-table-hscale-get-check"></a><h3>gwy_table_hscale_get_check ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/gtk3GtkWidget.html#GtkWidget-struct"><span class="returnvalue">GtkWidget</span></a> *
+gwy_table_hscale_get_check (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gtk2GtkObject.html#GtkObject-struct"><span class="type">GtkObject</span></a> *pivot</code></em>);</pre>
<p>Gets the check button associated with a pivot object.</p>
<p>May return <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if not constructed with <a class="link" href="libgwydgets-gwydgetenums.html#GWY-HSCALE-CHECK:CAPS"><code class="literal">GWY_HSCALE_CHECK</code></a>.</p>
<div class="refsect3">
<a name="gwy-table-hscale-get-check.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -497,13 +601,14 @@ too if the spinbutton is passed as <em class="parameter"><code>pivot</code></em>
</div>
<hr>
<div class="refsect2">
-<a name="gwy-table-hscale-get-label"></a><h3>gwy_table_hscale_get_label()</h3>
-<pre class="programlisting">#define gwy_table_hscale_get_label(pivot)</pre>
+<a name="gwy-table-hscale-get-label"></a><h3>gwy_table_hscale_get_label ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/gtk3GtkWidget.html#GtkWidget-struct"><span class="returnvalue">GtkWidget</span></a> *
+gwy_table_hscale_get_label (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gtk2GtkObject.html#GtkObject-struct"><span class="type">GtkObject</span></a> *pivot</code></em>);</pre>
<p>Gets the (left) label associated with a pivot object.</p>
<p>May return <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if constructed with <a class="link" href="libgwydgets-gwydgetenums.html#GWY-HSCALE-CHECK:CAPS"><code class="literal">GWY_HSCALE_CHECK</code></a>.</p>
<div class="refsect3">
<a name="gwy-table-hscale-get-label.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -519,13 +624,14 @@ too if the spinbutton is passed as <em class="parameter"><code>pivot</code></em>
</div>
<hr>
<div class="refsect2">
-<a name="gwy-table-hscale-get-units"></a><h3>gwy_table_hscale_get_units()</h3>
-<pre class="programlisting">#define gwy_table_hscale_get_units(pivot)</pre>
+<a name="gwy-table-hscale-get-units"></a><h3>gwy_table_hscale_get_units ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/gtk3GtkWidget.html#GtkWidget-struct"><span class="returnvalue">GtkWidget</span></a> *
+gwy_table_hscale_get_units (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gtk2GtkObject.html#GtkObject-struct"><span class="type">GtkObject</span></a> *pivot</code></em>);</pre>
<p>Gets the units label associated with a pivot object.</p>
<p>May return <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if constructed without units.</p>
<div class="refsect3">
<a name="gwy-table-hscale-get-units.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -541,12 +647,13 @@ too if the spinbutton is passed as <em class="parameter"><code>pivot</code></em>
</div>
<hr>
<div class="refsect2">
-<a name="gwy-table-hscale-get-middle-widget"></a><h3>gwy_table_hscale_get_middle_widget()</h3>
-<pre class="programlisting">#define gwy_table_hscale_get_middle_widget(pivot)</pre>
+<a name="gwy-table-hscale-get-middle-widget"></a><h3>gwy_table_hscale_get_middle_widget ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/gtk3GtkWidget.html#GtkWidget-struct"><span class="returnvalue">GtkWidget</span></a> *
+gwy_table_hscale_get_middle_widget (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gtk2GtkObject.html#GtkObject-struct"><span class="type">GtkObject</span></a> *pivot</code></em>);</pre>
<p>Gets the middle widget associated with a pivot object.</p>
<div class="refsect3">
<a name="gwy-table-hscale-get-middle-widget.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -578,7 +685,7 @@ this point.</p>
match is returned.</p>
<div class="refsect3">
<a name="gwy-table-get-child-widget.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -624,7 +731,7 @@ gwy_color_selector_for_mask (<em class="parameter"><code>const <a href="/usr/sha
<p>See <a class="link" href="libgwydgets-gwydgetutils.html#gwy-mask-color-selector-run" title="gwy_mask_color_selector_run ()"><code class="function">gwy_mask_color_selector_run()</code></a> for details.</p>
<div class="refsect3">
<a name="gwy-color-selector-for-mask.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -670,7 +777,7 @@ gwy_mask_color_selector_run (<em class="parameter"><code>const <a href="/usr/sha
dialog modally and returns when it is finished.</p>
<div class="refsect3">
<a name="gwy-mask-color-selector-run.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -733,7 +840,7 @@ automatically.</p>
.</p>
<div class="refsect3">
<a name="gwy-list-store-row-changed.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -791,7 +898,7 @@ translations (and to reduce code clutter by avoiding dummy constructor and
left-aligning automatically).</p>
<div class="refsect3">
<a name="gwy-label-new-header.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -820,7 +927,7 @@ gwy_stock_like_button_new (<em class="parameter"><code>const <a href="/usr/share
label text.</p>
<div class="refsect3">
<a name="gwy-stock-like-button-new.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -855,7 +962,7 @@ gwy_tool_like_button_new (<em class="parameter"><code>const <a href="/usr/share/
label text.</p>
<div class="refsect3">
<a name="gwy-tool-like-button-new.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -888,7 +995,7 @@ gwy_widget_get_activate_on_unfocus (<em class="parameter"><code><a href="/usr/sh
<p>Obtains the activate-on-unfocus state of a widget.</p>
<div class="refsect3">
<a name="gwy-widget-get-activate-on-unfocus.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -919,7 +1026,7 @@ gwy_widget_set_activate_on_unfocus (<em class="parameter"><code><a href="/usr/sh
leaves the widget.</p>
<div class="refsect3">
<a name="gwy-widget-set-activate-on-unfocus.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -955,7 +1062,7 @@ sensitivity (as returned by <a href="/usr/share/gtk-doc/html/gtk2GtkWidget.html#
just synchronize GtkWidget:sensitive property.</p>
<div class="refsect3">
<a name="gwy-widget-sync-sensitivity.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -987,7 +1094,7 @@ gwy_get_pango_ft2_font_map (<em class="parameter"><code><a href="/usr/share/gtk-
<p>FT2 portability to Win32 is questionable, use PangoCairo instead.</p>
<div class="refsect3">
<a name="gwy-get-pango-ft2-font-map.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwydgets/html/libgwydgets-gwygrainvaluemenu.html b/devel-docs/libgwydgets/html/libgwydgets-gwygrainvaluemenu.html
index a5f7126..45be6f0 100644
--- a/devel-docs/libgwydgets/html/libgwydgets-gwygrainvaluemenu.html
+++ b/devel-docs/libgwydgets/html/libgwydgets-gwygrainvaluemenu.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>gwygrainvaluemenu: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="WidgetUtilities.html" title="Widget Utilities">
<link rel="prev" href="libgwydgets-gwyoptionmenus.html" title="gwyoptionmenus">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwydgets-gwygrainvaluemenu.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -107,7 +107,7 @@
</div>
<div class="refsect1">
<a name="libgwydgets-gwygrainvaluemenu.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -143,7 +143,7 @@ name, <code class="literal">"symbol_markup"</code> for the rich text symbol,
allowed only on leaves.</p>
<div class="refsect3">
<a name="gwy-grain-value-tree-view-new.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -185,7 +185,7 @@ gwy_grain_value_tree_view_set_expanded_groups
<p>Restores a grain value tree view group expansion state.</p>
<div class="refsect3">
<a name="gwy-grain-value-tree-view-set-expanded-groups.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -219,7 +219,7 @@ gwy_grain_value_tree_view_get_expanded_groups
<p>Obtains the group expansion state of a grain value tree view.</p>
<div class="refsect3">
<a name="gwy-grain-value-tree-view-get-expanded-groups.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -249,7 +249,7 @@ gwy_grain_value_tree_view_n_enabled (<em class="parameter"><code><a href="/usr/s
set to <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> in the model.</p>
<div class="refsect3">
<a name="gwy-grain-value-tree-view-n-enabled.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -276,7 +276,7 @@ gwy_grain_value_tree_view_get_enabled (<em class="parameter"><code><a href="/usr
<p>Obtains the list of enabled values in a grain value tree view.</p>
<div class="refsect3">
<a name="gwy-grain-value-tree-view-get-enabled.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -307,7 +307,7 @@ gwy_grain_value_tree_view_set_enabled (<em class="parameter"><code><a href="/usr
<p>The tree is possibly expanded so that all enabled values are visible.</p>
<div class="refsect3">
<a name="gwy-grain-value-tree-view-set-enabled.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -342,7 +342,7 @@ gwy_grain_value_tree_view_select (<em class="parameter"><code><a href="/usr/shar
show it, and the tree view may scroll to make it visible.</p>
<div class="refsect3">
<a name="gwy-grain-value-tree-view-select.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -383,7 +383,7 @@ as inconsistent).</p>
is <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>.</p>
<div class="refsect3">
<a name="gwy-grain-value-tree-view-set-same-units.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -416,7 +416,7 @@ values that require same units are disabled.</p></td>
<p>It must not be assumed these are the only columns in the tree store.</p>
<div class="refsect3">
<a name="GwyGrainValueStoreColumn.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
diff --git a/devel-docs/libgwydgets/html/libgwydgets-gwyoptionmenus.html b/devel-docs/libgwydgets/html/libgwydgets-gwyoptionmenus.html
index c036d61..832adff 100644
--- a/devel-docs/libgwydgets/html/libgwydgets-gwyoptionmenus.html
+++ b/devel-docs/libgwydgets/html/libgwydgets-gwyoptionmenus.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>gwyoptionmenus: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="WidgetUtilities.html" title="Widget Utilities">
<link rel="prev" href="libgwydgets-gwystock.html" title="gwystock">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwydgets-gwyoptionmenus.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -164,7 +164,7 @@ gwy_menu_gradient (<em class="parameter"><code><a href="http://developer.gnome.o
each menu item.</p>
<div class="refsect3">
<a name="gwy-menu-gradient.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -200,7 +200,7 @@ gwy_gradient_selection_new (<em class="parameter"><code><a href="/usr/share/gtk-
<p>Creates a gradient selection button.</p>
<div class="refsect3">
<a name="gwy-gradient-selection-new.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -243,7 +243,7 @@ gwy_gradient_tree_view_new (<em class="parameter"><code><a href="/usr/share/gtk-
<p>Creates a tree view with gradient list.</p>
<div class="refsect3">
<a name="gwy-gradient-tree-view-new.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -285,7 +285,7 @@ gwy_gradient_tree_view_set_active (<em class="parameter"><code><a href="/usr/sha
<p>Selects a gradient in a gradient list and scrolls to make it visible.</p>
<div class="refsect3">
<a name="gwy-gradient-tree-view-set-active.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -320,7 +320,7 @@ gwy_gradient_selection_get_active (<em class="parameter"><code><a href="/usr/sha
<p>Gets the name of currently selected gradient of a selection button.</p>
<div class="refsect3">
<a name="gwy-gradient-selection-get-active.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -347,7 +347,7 @@ gwy_gradient_selection_set_active (<em class="parameter"><code><a href="/usr/sha
<p>Sets the currently selected gradient of a selection button.</p>
<div class="refsect3">
<a name="gwy-gradient-selection-set-active.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -379,7 +379,7 @@ gwy_menu_gl_material (<em class="parameter"><code><a href="/usr/share/gtk-doc/ht
name for each menu item.</p>
<div class="refsect3">
<a name="gwy-menu-gl-material.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -415,7 +415,7 @@ gwy_gl_material_selection_new (<em class="parameter"><code><a href="/usr/share/g
<p>Creates a GL material selection button.</p>
<div class="refsect3">
<a name="gwy-gl-material-selection-new.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -458,7 +458,7 @@ gwy_gl_material_tree_view_new (<em class="parameter"><code><a href="/usr/share/g
<p>Creates a tree view with GL material list.</p>
<div class="refsect3">
<a name="gwy-gl-material-tree-view-new.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -500,7 +500,7 @@ gwy_gl_material_tree_view_set_active (<em class="parameter"><code><a href="/usr/
<p>Selects a GL material in a GL material list and scrolls to make it visible.</p>
<div class="refsect3">
<a name="gwy-gl-material-tree-view-set-active.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -535,7 +535,7 @@ gwy_gl_material_selection_get_active (<em class="parameter"><code><a href="/usr/
<p>Gets the name of currently selected GL material of a selection button.</p>
<div class="refsect3">
<a name="gwy-gl-material-selection-get-active.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -562,7 +562,7 @@ gwy_gl_material_selection_set_active (<em class="parameter"><code><a href="/usr/
<p>Sets the currently selected GL material of a selection button.</p>
<div class="refsect3">
<a name="gwy-gl-material-selection-set-active.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -592,7 +592,7 @@ gwy_resource_tree_view_set_active (<em class="parameter"><code><a href="/usr/sha
<p>Selects a resource in a list and scrolls to make it visible.</p>
<div class="refsect3">
<a name="gwy-resource-tree-view-set-active.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwydgets/html/libgwydgets-gwyradiobuttons.html b/devel-docs/libgwydgets/html/libgwydgets-gwyradiobuttons.html
index 4797e21..0cd3747 100644
--- a/devel-docs/libgwydgets/html/libgwydgets-gwyradiobuttons.html
+++ b/devel-docs/libgwydgets/html/libgwydgets-gwyradiobuttons.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>gwyradiobuttons: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="WidgetUtilities.html" title="Widget Utilities">
<link rel="prev" href="libgwydgets-gwycombobox.html" title="gwycombobox">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwydgets-gwyradiobuttons.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -130,7 +130,7 @@ gwy_radio_buttons_create (<em class="parameter"><code>const <span class="type">G
<p>Try to avoid -1 as an enum value.</p>
<div class="refsect3">
<a name="gwy-radio-buttons-create.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -189,7 +189,7 @@ gwy_radio_buttons_createl (<em class="parameter"><code><a href="/usr/share/gtk-d
<p>Creates a radio button group from a list of label/value pairs.</p>
<div class="refsect3">
<a name="gwy-radio-buttons-createl.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -243,7 +243,7 @@ gwy_radio_buttons_attach_to_table (<em class="parameter"><code><a href="/usr/sha
<p>Attaches a group of radio buttons to table rows.</p>
<div class="refsect3">
<a name="gwy-radio-buttons-attach-to-table.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -291,7 +291,7 @@ gwy_radio_buttons_set_current (<em class="parameter"><code><a href="/usr/share/g
data (as set by <a class="link" href="libgwydgets-gwyradiobuttons.html#gwy-radio-buttons-create" title="gwy_radio_buttons_create ()"><code class="function">gwy_radio_buttons_create()</code></a>).</p>
<div class="refsect3">
<a name="gwy-radio-buttons-set-current.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -325,7 +325,7 @@ gwy_radio_buttons_get_current (<em class="parameter"><code><a href="/usr/share/g
<p>Gets the integer enum value corresponding to currently selected item.</p>
<div class="refsect3">
<a name="gwy-radio-buttons-get-current.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -353,7 +353,7 @@ gwy_radio_buttons_find (<em class="parameter"><code><a href="/usr/share/gtk-doc/
<p>Finds a radio button by its associated integer value.</p>
<div class="refsect3">
<a name="gwy-radio-buttons-find.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -387,7 +387,7 @@ gwy_radio_button_get_value (<em class="parameter"><code><a href="/usr/share/gtk-
<p>Gets the integer value associated with a radio button.</p>
<div class="refsect3">
<a name="gwy-radio-button-get-value.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -419,7 +419,7 @@ or even construct a radio button group with associated integers without the
help of <a class="link" href="libgwydgets-gwyradiobuttons.html#gwy-radio-buttons-create" title="gwy_radio_buttons_create ()"><code class="function">gwy_radio_buttons_create()</code></a>.</p>
<div class="refsect3">
<a name="gwy-radio-button-set-value.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwydgets/html/libgwydgets-gwystock.html b/devel-docs/libgwydgets/html/libgwydgets-gwystock.html
index f2a6ff0..a2e52eb 100644
--- a/devel-docs/libgwydgets/html/libgwydgets-gwystock.html
+++ b/devel-docs/libgwydgets/html/libgwydgets-gwystock.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>gwystock: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="WidgetUtilities.html" title="Widget Utilities">
<link rel="prev" href="libgwydgets-gwydgetutils.html" title="gwydgetutils">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwydgets-gwystock.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -50,7 +50,7 @@
</div>
<div class="refsect1">
<a name="libgwydgets-gwystock.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -102,6 +102,10 @@
</tr>
<tr>
<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-CORRELATION-MASK:CAPS" title="GWY_STOCK_CORRELATION_MASK">GWY_STOCK_CORRELATION_MASK</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
<td class="function_name"><a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-CROP:CAPS" title="GWY_STOCK_CROP">GWY_STOCK_CROP</a></td>
</tr>
<tr>
@@ -114,6 +118,10 @@
</tr>
<tr>
<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-DISCONNECTED:CAPS" title="GWY_STOCK_DISCONNECTED">GWY_STOCK_DISCONNECTED</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
<td class="function_name"><a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-DISTANCE:CAPS" title="GWY_STOCK_DISTANCE">GWY_STOCK_DISTANCE</a></td>
</tr>
<tr>
@@ -174,6 +182,10 @@
</tr>
<tr>
<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-FFT-FILTER-1D:CAPS" title="GWY_STOCK_FFT_FILTER_1D">GWY_STOCK_FFT_FILTER_1D</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
<td class="function_name"><a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-FFT-FILTER-2D:CAPS" title="GWY_STOCK_FFT_FILTER_2D">GWY_STOCK_FFT_FILTER_2D</a></td>
</tr>
<tr>
@@ -186,6 +198,10 @@
</tr>
<tr>
<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-FIT-SHAPE:CAPS" title="GWY_STOCK_FIT_SHAPE">GWY_STOCK_FIT_SHAPE</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
<td class="function_name"><a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-FIX-ZERO:CAPS" title="GWY_STOCK_FIX_ZERO">GWY_STOCK_FIX_ZERO</a></td>
</tr>
<tr>
@@ -202,6 +218,14 @@
</tr>
<tr>
<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-FRACTAL-CORRECTION:CAPS" title="GWY_STOCK_FRACTAL_CORRECTION">GWY_STOCK_FRACTAL_CORRECTION</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-FRACTAL-MEASURE:CAPS" title="GWY_STOCK_FRACTAL_MEASURE">GWY_STOCK_FRACTAL_MEASURE</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
<td class="function_name"><a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-GL-MATERIAL:CAPS" title="GWY_STOCK_GL_MATERIAL">GWY_STOCK_GL_MATERIAL</a></td>
</tr>
<tr>
@@ -214,43 +238,43 @@
</tr>
<tr>
<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-GRAINS:CAPS" title="GWY_STOCK_GRAINS">GWY_STOCK_GRAINS</a></td>
+<td class="function_name"><a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-GRAIN-CORRELATION:CAPS" title="GWY_STOCK_GRAIN_CORRELATION">GWY_STOCK_GRAIN_CORRELATION</a></td>
</tr>
<tr>
<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-GRAINS-EDGE:CAPS" title="GWY_STOCK_GRAINS_EDGE">GWY_STOCK_GRAINS_EDGE</a></td>
+<td class="function_name"><a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-GRAIN-EXSCRIBED-CIRCLE:CAPS" title="GWY_STOCK_GRAIN_EXSCRIBED_CIRCLE">GWY_STOCK_GRAIN_EXSCRIBED_CIRCLE</a></td>
</tr>
<tr>
<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-GRAINS-EDGE-REMOVE:CAPS" title="GWY_STOCK_GRAINS_EDGE_REMOVE">GWY_STOCK_GRAINS_EDGE_REMOVE</a></td>
+<td class="function_name"><a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-GRAIN-INSCRIBED-CIRCLE:CAPS" title="GWY_STOCK_GRAIN_INSCRIBED_CIRCLE">GWY_STOCK_GRAIN_INSCRIBED_CIRCLE</a></td>
</tr>
<tr>
<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-GRAINS-GRAPH:CAPS" title="GWY_STOCK_GRAINS_GRAPH">GWY_STOCK_GRAINS_GRAPH</a></td>
+<td class="function_name"><a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-GRAINS:CAPS" title="GWY_STOCK_GRAINS">GWY_STOCK_GRAINS</a></td>
</tr>
<tr>
<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-GRAINS-MEASURE:CAPS" title="GWY_STOCK_GRAINS_MEASURE">GWY_STOCK_GRAINS_MEASURE</a></td>
+<td class="function_name"><a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-GRAINS-EDGE:CAPS" title="GWY_STOCK_GRAINS_EDGE">GWY_STOCK_GRAINS_EDGE</a></td>
</tr>
<tr>
<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-GRAINS-REMOVE:CAPS" title="GWY_STOCK_GRAINS_REMOVE">GWY_STOCK_GRAINS_REMOVE</a></td>
+<td class="function_name"><a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-GRAINS-EDGE-REMOVE:CAPS" title="GWY_STOCK_GRAINS_EDGE_REMOVE">GWY_STOCK_GRAINS_EDGE_REMOVE</a></td>
</tr>
<tr>
<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-GRAINS-WATER:CAPS" title="GWY_STOCK_GRAINS_WATER">GWY_STOCK_GRAINS_WATER</a></td>
+<td class="function_name"><a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-GRAINS-GRAPH:CAPS" title="GWY_STOCK_GRAINS_GRAPH">GWY_STOCK_GRAINS_GRAPH</a></td>
</tr>
<tr>
<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-GRAIN-CORRELATION:CAPS" title="GWY_STOCK_GRAIN_CORRELATION">GWY_STOCK_GRAIN_CORRELATION</a></td>
+<td class="function_name"><a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-GRAINS-MEASURE:CAPS" title="GWY_STOCK_GRAINS_MEASURE">GWY_STOCK_GRAINS_MEASURE</a></td>
</tr>
<tr>
<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-GRAIN-EXSCRIBED-CIRCLE:CAPS" title="GWY_STOCK_GRAIN_EXSCRIBED_CIRCLE">GWY_STOCK_GRAIN_EXSCRIBED_CIRCLE</a></td>
+<td class="function_name"><a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-GRAINS-REMOVE:CAPS" title="GWY_STOCK_GRAINS_REMOVE">GWY_STOCK_GRAINS_REMOVE</a></td>
</tr>
<tr>
<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-GRAIN-INSCRIBED-CIRCLE:CAPS" title="GWY_STOCK_GRAIN_INSCRIBED_CIRCLE">GWY_STOCK_GRAIN_INSCRIBED_CIRCLE</a></td>
+<td class="function_name"><a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-GRAINS-WATER:CAPS" title="GWY_STOCK_GRAINS_WATER">GWY_STOCK_GRAINS_WATER</a></td>
</tr>
<tr>
<td class="define_keyword">#define</td>
@@ -406,6 +430,14 @@
</tr>
<tr>
<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-MARK-OUTLIERS:CAPS" title="GWY_STOCK_MARK_OUTLIERS">GWY_STOCK_MARK_OUTLIERS</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-MARK-SCARS:CAPS" title="GWY_STOCK_MARK_SCARS">GWY_STOCK_MARK_SCARS</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
<td class="function_name"><a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-MARK-WITH:CAPS" title="GWY_STOCK_MARK_WITH">GWY_STOCK_MARK_WITH</a></td>
</tr>
<tr>
@@ -498,6 +530,10 @@
</tr>
<tr>
<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-MASK-SET:CAPS" title="GWY_STOCK_MASK_SET">GWY_STOCK_MASK_SET</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
<td class="function_name"><a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-MASK-SHRINK:CAPS" title="GWY_STOCK_MASK_SHRINK">GWY_STOCK_MASK_SHRINK</a></td>
</tr>
<tr>
@@ -534,6 +570,14 @@
</tr>
<tr>
<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-NEXT:CAPS" title="GWY_STOCK_NEXT">GWY_STOCK_NEXT</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-NULL-OFFSETS:CAPS" title="GWY_STOCK_NULL_OFFSETS">GWY_STOCK_NULL_OFFSETS</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
<td class="function_name"><a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-PALETTES:CAPS" title="GWY_STOCK_PALETTES">GWY_STOCK_PALETTES</a></td>
</tr>
<tr>
@@ -546,6 +590,10 @@
</tr>
<tr>
<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-POLY-DISTORT:CAPS" title="GWY_STOCK_POLY_DISTORT">GWY_STOCK_POLY_DISTORT</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
<td class="function_name"><a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-POLYNOM:CAPS" title="GWY_STOCK_POLYNOM">GWY_STOCK_POLYNOM</a></td>
</tr>
<tr>
@@ -554,7 +602,7 @@
</tr>
<tr>
<td class="define_keyword">#define</td>
-<td class="function_name"><a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-POLY-DISTORT:CAPS" title="GWY_STOCK_POLY_DISTORT">GWY_STOCK_POLY_DISTORT</a></td>
+<td class="function_name"><a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-PREVIOUS:CAPS" title="GWY_STOCK_PREVIOUS">GWY_STOCK_PREVIOUS</a></td>
</tr>
<tr>
<td class="define_keyword">#define</td>
@@ -586,6 +634,10 @@
</tr>
<tr>
<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-ROTATE-3D:CAPS" title="GWY_STOCK_ROTATE_3D">GWY_STOCK_ROTATE_3D</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
<td class="function_name"><a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-ROTATE-90-CCW:CAPS" title="GWY_STOCK_ROTATE_90_CCW">GWY_STOCK_ROTATE_90_CCW</a></td>
</tr>
<tr>
@@ -662,6 +714,10 @@
</tr>
<tr>
<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-SYNTHETIC-FIBRES:CAPS" title="GWY_STOCK_SYNTHETIC_FIBRES">GWY_STOCK_SYNTHETIC_FIBRES</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
<td class="function_name"><a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-SYNTHETIC-LATTICE:CAPS" title="GWY_STOCK_SYNTHETIC_LATTICE">GWY_STOCK_SYNTHETIC_LATTICE</a></td>
</tr>
<tr>
@@ -686,6 +742,10 @@
</tr>
<tr>
<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-SYNTHETIC-PHASES:CAPS" title="GWY_STOCK_SYNTHETIC_PHASES">GWY_STOCK_SYNTHETIC_PHASES</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
<td class="function_name"><a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-SYNTHETIC-SPECTRAL:CAPS" title="GWY_STOCK_SYNTHETIC_SPECTRAL">GWY_STOCK_SYNTHETIC_SPECTRAL</a></td>
</tr>
<tr>
@@ -778,6 +838,10 @@
</tr>
<tr>
<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-XY-DENOISE:CAPS" title="GWY_STOCK_XY_DENOISE">GWY_STOCK_XY_DENOISE</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
<td class="function_name"><a class="link" href="libgwydgets-gwystock.html#GWY-STOCK-ZERO-MEAN:CAPS" title="GWY_STOCK_ZERO_MEAN">GWY_STOCK_ZERO_MEAN</a></td>
</tr>
<tr>
@@ -913,6 +977,14 @@ gwy_stock_register_stock_items (<em class="parameter"><code><span class="type">v
</div>
<hr>
<div class="refsect2">
+<a name="GWY-STOCK-CORRELATION-MASK:CAPS"></a><h3>GWY_STOCK_CORRELATION_MASK</h3>
+<pre class="programlisting">#define GWY_STOCK_CORRELATION_MASK "gwy_correlation_mask"
+</pre>
+<p>The "Correlation-Mask" stock icon.</p>
+<img src="gwy_correlation_mask-24.png"><p class="since">Since: <a class="link" href="api-index-2-48.html#api-index-2.48">2.48</a></p>
+</div>
+<hr>
+<div class="refsect2">
<a name="GWY-STOCK-CROP:CAPS"></a><h3>GWY_STOCK_CROP</h3>
<pre class="programlisting">#define GWY_STOCK_CROP "gwy_crop"
</pre>
@@ -937,6 +1009,14 @@ gwy_stock_register_stock_items (<em class="parameter"><code><span class="type">v
</div>
<hr>
<div class="refsect2">
+<a name="GWY-STOCK-DISCONNECTED:CAPS"></a><h3>GWY_STOCK_DISCONNECTED</h3>
+<pre class="programlisting">#define GWY_STOCK_DISCONNECTED "gwy_disconnected"
+</pre>
+<p>The "Disconnected" stock icon.</p>
+<img src="gwy_disconnected-24.png"><p class="since">Since: <a class="link" href="api-index-2-48.html#api-index-2.48">2.48</a></p>
+</div>
+<hr>
+<div class="refsect2">
<a name="GWY-STOCK-DISTANCE:CAPS"></a><h3>GWY_STOCK_DISTANCE</h3>
<pre class="programlisting">#define GWY_STOCK_DISTANCE "gwy_distance"
</pre>
@@ -1057,6 +1137,14 @@ gwy_stock_register_stock_items (<em class="parameter"><code><span class="type">v
</div>
<hr>
<div class="refsect2">
+<a name="GWY-STOCK-FFT-FILTER-1D:CAPS"></a><h3>GWY_STOCK_FFT_FILTER_1D</h3>
+<pre class="programlisting">#define GWY_STOCK_FFT_FILTER_1D "gwy_fft_filter_1d"
+</pre>
+<p>The "FFT-Filter-1D" stock icon.</p>
+<img src="gwy_fft_filter_1d-24.png"><p class="since">Since: <a class="link" href="api-index-2-48.html#api-index-2.48">2.48</a></p>
+</div>
+<hr>
+<div class="refsect2">
<a name="GWY-STOCK-FFT-FILTER-2D:CAPS"></a><h3>GWY_STOCK_FFT_FILTER_2D</h3>
<pre class="programlisting">#define GWY_STOCK_FFT_FILTER_2D "gwy_fft_filter_2d"
</pre>
@@ -1081,6 +1169,14 @@ gwy_stock_register_stock_items (<em class="parameter"><code><span class="type">v
</div>
<hr>
<div class="refsect2">
+<a name="GWY-STOCK-FIT-SHAPE:CAPS"></a><h3>GWY_STOCK_FIT_SHAPE</h3>
+<pre class="programlisting">#define GWY_STOCK_FIT_SHAPE "gwy_fit_shape"
+</pre>
+<p>The "Fit-Shape" stock icon.</p>
+<img src="gwy_fit_shape-24.png"><p class="since">Since: <a class="link" href="api-index-2-48.html#api-index-2.48">2.48</a></p>
+</div>
+<hr>
+<div class="refsect2">
<a name="GWY-STOCK-FIX-ZERO:CAPS"></a><h3>GWY_STOCK_FIX_ZERO</h3>
<pre class="programlisting">#define GWY_STOCK_FIX_ZERO "gwy_fix_zero"
</pre>
@@ -1113,6 +1209,22 @@ gwy_stock_register_stock_items (<em class="parameter"><code><span class="type">v
</div>
<hr>
<div class="refsect2">
+<a name="GWY-STOCK-FRACTAL-CORRECTION:CAPS"></a><h3>GWY_STOCK_FRACTAL_CORRECTION</h3>
+<pre class="programlisting">#define GWY_STOCK_FRACTAL_CORRECTION "gwy_fractal_correction"
+</pre>
+<p>The "Fractal-Correction" stock icon.</p>
+<img src="gwy_fractal_correction-24.png"><p class="since">Since: <a class="link" href="api-index-2-48.html#api-index-2.48">2.48</a></p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GWY-STOCK-FRACTAL-MEASURE:CAPS"></a><h3>GWY_STOCK_FRACTAL_MEASURE</h3>
+<pre class="programlisting">#define GWY_STOCK_FRACTAL_MEASURE "gwy_fractal_measure"
+</pre>
+<p>The "Fractal-Measure" stock icon.</p>
+<img src="gwy_fractal_measure-24.png"><p class="since">Since: <a class="link" href="api-index-2-49.html#api-index-2.49">2.49</a></p>
+</div>
+<hr>
+<div class="refsect2">
<a name="GWY-STOCK-GL-MATERIAL:CAPS"></a><h3>GWY_STOCK_GL_MATERIAL</h3>
<pre class="programlisting">#define GWY_STOCK_GL_MATERIAL "gwy_gl_material"
</pre>
@@ -1137,6 +1249,30 @@ gwy_stock_register_stock_items (<em class="parameter"><code><span class="type">v
</div>
<hr>
<div class="refsect2">
+<a name="GWY-STOCK-GRAIN-CORRELATION:CAPS"></a><h3>GWY_STOCK_GRAIN_CORRELATION</h3>
+<pre class="programlisting">#define GWY_STOCK_GRAIN_CORRELATION "gwy_grain_correlation"
+</pre>
+<p>The "Grain-Correlation" stock icon.</p>
+<img src="gwy_grain_correlation-24.png"><p class="since">Since: <a class="link" href="api-index-2-45.html#api-index-2.45">2.45</a></p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GWY-STOCK-GRAIN-EXSCRIBED-CIRCLE:CAPS"></a><h3>GWY_STOCK_GRAIN_EXSCRIBED_CIRCLE</h3>
+<pre class="programlisting">#define GWY_STOCK_GRAIN_EXSCRIBED_CIRCLE "gwy_grain_exscribed_circle"
+</pre>
+<p>The "Grain-Exscribed-Circle" stock icon.</p>
+<img src="gwy_grain_exscribed_circle-24.png"><p class="since">Since: <a class="link" href="api-index-2-45.html#api-index-2.45">2.45</a></p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GWY-STOCK-GRAIN-INSCRIBED-CIRCLE:CAPS"></a><h3>GWY_STOCK_GRAIN_INSCRIBED_CIRCLE</h3>
+<pre class="programlisting">#define GWY_STOCK_GRAIN_INSCRIBED_CIRCLE "gwy_grain_inscribed_circle"
+</pre>
+<p>The "Grain-Inscribed-Circle" stock icon.</p>
+<img src="gwy_grain_inscribed_circle-24.png"><p class="since">Since: <a class="link" href="api-index-2-45.html#api-index-2.45">2.45</a></p>
+</div>
+<hr>
+<div class="refsect2">
<a name="GWY-STOCK-GRAINS:CAPS"></a><h3>GWY_STOCK_GRAINS</h3>
<pre class="programlisting">#define GWY_STOCK_GRAINS "gwy_grains"
</pre>
@@ -1193,30 +1329,6 @@ gwy_stock_register_stock_items (<em class="parameter"><code><span class="type">v
</div>
<hr>
<div class="refsect2">
-<a name="GWY-STOCK-GRAIN-CORRELATION:CAPS"></a><h3>GWY_STOCK_GRAIN_CORRELATION</h3>
-<pre class="programlisting">#define GWY_STOCK_GRAIN_CORRELATION "gwy_grain_correlation"
-</pre>
-<p>The "Grain-Correlation" stock icon.</p>
-<img src="gwy_grain_correlation-24.png"><p class="since">Since: <a class="link" href="api-index-2-45.html#api-index-2.45">2.45</a></p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GWY-STOCK-GRAIN-EXSCRIBED-CIRCLE:CAPS"></a><h3>GWY_STOCK_GRAIN_EXSCRIBED_CIRCLE</h3>
-<pre class="programlisting">#define GWY_STOCK_GRAIN_EXSCRIBED_CIRCLE "gwy_grain_exscribed_circle"
-</pre>
-<p>The "Grain-Exscribed-Circle" stock icon.</p>
-<img src="gwy_grain_exscribed_circle-24.png"><p class="since">Since: <a class="link" href="api-index-2-45.html#api-index-2.45">2.45</a></p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GWY-STOCK-GRAIN-INSCRIBED-CIRCLE:CAPS"></a><h3>GWY_STOCK_GRAIN_INSCRIBED_CIRCLE</h3>
-<pre class="programlisting">#define GWY_STOCK_GRAIN_INSCRIBED_CIRCLE "gwy_grain_inscribed_circle"
-</pre>
-<p>The "Grain-Inscribed-Circle" stock icon.</p>
-<img src="gwy_grain_inscribed_circle-24.png"><p class="since">Since: <a class="link" href="api-index-2-45.html#api-index-2.45">2.45</a></p>
-</div>
-<hr>
-<div class="refsect2">
<a name="GWY-STOCK-GRAPH:CAPS"></a><h3>GWY_STOCK_GRAPH</h3>
<pre class="programlisting">#define GWY_STOCK_GRAPH "gwy_graph"
</pre>
@@ -1521,6 +1633,22 @@ gwy_stock_register_stock_items (<em class="parameter"><code><span class="type">v
</div>
<hr>
<div class="refsect2">
+<a name="GWY-STOCK-MARK-OUTLIERS:CAPS"></a><h3>GWY_STOCK_MARK_OUTLIERS</h3>
+<pre class="programlisting">#define GWY_STOCK_MARK_OUTLIERS "gwy_mark_outliers"
+</pre>
+<p>The "Mark-Outliers" stock icon.</p>
+<img src="gwy_mark_outliers-24.png"><p class="since">Since: <a class="link" href="api-index-2-48.html#api-index-2.48">2.48</a></p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GWY-STOCK-MARK-SCARS:CAPS"></a><h3>GWY_STOCK_MARK_SCARS</h3>
+<pre class="programlisting">#define GWY_STOCK_MARK_SCARS "gwy_mark_scars"
+</pre>
+<p>The "Mark-Scars" stock icon.</p>
+<img src="gwy_mark_scars-24.png"><p class="since">Since: <a class="link" href="api-index-2-48.html#api-index-2.48">2.48</a></p>
+</div>
+<hr>
+<div class="refsect2">
<a name="GWY-STOCK-MARK-WITH:CAPS"></a><h3>GWY_STOCK_MARK_WITH</h3>
<pre class="programlisting">#define GWY_STOCK_MARK_WITH "gwy_mark_with"
</pre>
@@ -1705,6 +1833,14 @@ gwy_stock_register_stock_items (<em class="parameter"><code><span class="type">v
</div>
<hr>
<div class="refsect2">
+<a name="GWY-STOCK-MASK-SET:CAPS"></a><h3>GWY_STOCK_MASK_SET</h3>
+<pre class="programlisting">#define GWY_STOCK_MASK_SET "gwy_mask_set"
+</pre>
+<p>The "Mask-Set" stock icon.</p>
+<img src="gwy_mask_set-24.png"><p class="since">Since: <a class="link" href="api-index-2-49.html#api-index-2.49">2.49</a></p>
+</div>
+<hr>
+<div class="refsect2">
<a name="GWY-STOCK-MASK-SHRINK:CAPS"></a><h3>GWY_STOCK_MASK_SHRINK</h3>
<pre class="programlisting">#define GWY_STOCK_MASK_SHRINK "gwy_mask_shrink"
</pre>
@@ -1777,6 +1913,22 @@ gwy_stock_register_stock_items (<em class="parameter"><code><span class="type">v
</div>
<hr>
<div class="refsect2">
+<a name="GWY-STOCK-NEXT:CAPS"></a><h3>GWY_STOCK_NEXT</h3>
+<pre class="programlisting">#define GWY_STOCK_NEXT "gwy_next"
+</pre>
+<p>The "Next" stock icon.</p>
+<img src="gwy_next-24.png"><p class="since">Since: <a class="link" href="api-index-2-49.html#api-index-2.49">2.49</a></p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GWY-STOCK-NULL-OFFSETS:CAPS"></a><h3>GWY_STOCK_NULL_OFFSETS</h3>
+<pre class="programlisting">#define GWY_STOCK_NULL_OFFSETS "gwy_null_offsets"
+</pre>
+<p>The "Null-Offsets" stock icon.</p>
+<img src="gwy_null_offsets-24.png"><p class="since">Since: <a class="link" href="api-index-2-48.html#api-index-2.48">2.48</a></p>
+</div>
+<hr>
+<div class="refsect2">
<a name="GWY-STOCK-PALETTES:CAPS"></a><h3>GWY_STOCK_PALETTES</h3>
<pre class="programlisting">#define GWY_STOCK_PALETTES "gwy_palettes"
</pre>
@@ -1801,6 +1953,14 @@ gwy_stock_register_stock_items (<em class="parameter"><code><span class="type">v
</div>
<hr>
<div class="refsect2">
+<a name="GWY-STOCK-POLY-DISTORT:CAPS"></a><h3>GWY_STOCK_POLY_DISTORT</h3>
+<pre class="programlisting">#define GWY_STOCK_POLY_DISTORT "gwy_poly_distort"
+</pre>
+<p>The "Poly-Distort" stock icon.</p>
+<img src="gwy_poly_distort-24.png"><p class="since">Since: <a class="link" href="api-index-2-46.html#api-index-2.46">2.46</a></p>
+</div>
+<hr>
+<div class="refsect2">
<a name="GWY-STOCK-POLYNOM:CAPS"></a><h3>GWY_STOCK_POLYNOM</h3>
<pre class="programlisting">#define GWY_STOCK_POLYNOM "gwy_polynom"
</pre>
@@ -1817,11 +1977,11 @@ gwy_stock_register_stock_items (<em class="parameter"><code><span class="type">v
</div>
<hr>
<div class="refsect2">
-<a name="GWY-STOCK-POLY-DISTORT:CAPS"></a><h3>GWY_STOCK_POLY_DISTORT</h3>
-<pre class="programlisting">#define GWY_STOCK_POLY_DISTORT "gwy_poly_distort"
+<a name="GWY-STOCK-PREVIOUS:CAPS"></a><h3>GWY_STOCK_PREVIOUS</h3>
+<pre class="programlisting">#define GWY_STOCK_PREVIOUS "gwy_previous"
</pre>
-<p>The "Poly-Distort" stock icon.</p>
-<img src="gwy_poly_distort-24.png"><p class="since">Since: <a class="link" href="api-index-2-46.html#api-index-2.46">2.46</a></p>
+<p>The "Previous" stock icon.</p>
+<img src="gwy_previous-24.png"><p class="since">Since: <a class="link" href="api-index-2-49.html#api-index-2.49">2.49</a></p>
</div>
<hr>
<div class="refsect2">
@@ -1881,6 +2041,14 @@ gwy_stock_register_stock_items (<em class="parameter"><code><span class="type">v
</div>
<hr>
<div class="refsect2">
+<a name="GWY-STOCK-ROTATE-3D:CAPS"></a><h3>GWY_STOCK_ROTATE_3D</h3>
+<pre class="programlisting">#define GWY_STOCK_ROTATE_3D "gwy_rotate_3d"
+</pre>
+<p>The "Rotate-3D" stock icon.</p>
+<img src="gwy_rotate_3d-24.png"><p class="since">Since: <a class="link" href="api-index-2-49.html#api-index-2.49">2.49</a></p>
+</div>
+<hr>
+<div class="refsect2">
<a name="GWY-STOCK-ROTATE-90-CCW:CAPS"></a><h3>GWY_STOCK_ROTATE_90_CCW</h3>
<pre class="programlisting">#define GWY_STOCK_ROTATE_90_CCW "gwy_rotate_90_ccw"
</pre>
@@ -2033,6 +2201,14 @@ gwy_stock_register_stock_items (<em class="parameter"><code><span class="type">v
</div>
<hr>
<div class="refsect2">
+<a name="GWY-STOCK-SYNTHETIC-FIBRES:CAPS"></a><h3>GWY_STOCK_SYNTHETIC_FIBRES</h3>
+<pre class="programlisting">#define GWY_STOCK_SYNTHETIC_FIBRES "gwy_synthetic_fibres"
+</pre>
+<p>The "Synthetic-Fibres" stock icon.</p>
+<img src="gwy_synthetic_fibres-24.png"><p class="since">Since: <a class="link" href="api-index-2-49.html#api-index-2.49">2.49</a></p>
+</div>
+<hr>
+<div class="refsect2">
<a name="GWY-STOCK-SYNTHETIC-LATTICE:CAPS"></a><h3>GWY_STOCK_SYNTHETIC_LATTICE</h3>
<pre class="programlisting">#define GWY_STOCK_SYNTHETIC_LATTICE "gwy_synthetic_lattice"
</pre>
@@ -2081,6 +2257,14 @@ gwy_stock_register_stock_items (<em class="parameter"><code><span class="type">v
</div>
<hr>
<div class="refsect2">
+<a name="GWY-STOCK-SYNTHETIC-PHASES:CAPS"></a><h3>GWY_STOCK_SYNTHETIC_PHASES</h3>
+<pre class="programlisting">#define GWY_STOCK_SYNTHETIC_PHASES "gwy_synthetic_phases"
+</pre>
+<p>The "Synthetic-Phases" stock icon.</p>
+<img src="gwy_synthetic_phases-24.png"><p class="since">Since: <a class="link" href="api-index-2-48.html#api-index-2.48">2.48</a></p>
+</div>
+<hr>
+<div class="refsect2">
<a name="GWY-STOCK-SYNTHETIC-SPECTRAL:CAPS"></a><h3>GWY_STOCK_SYNTHETIC_SPECTRAL</h3>
<pre class="programlisting">#define GWY_STOCK_SYNTHETIC_SPECTRAL "gwy_synthetic_spectral"
</pre>
@@ -2265,6 +2449,14 @@ gwy_stock_register_stock_items (<em class="parameter"><code><span class="type">v
</div>
<hr>
<div class="refsect2">
+<a name="GWY-STOCK-XY-DENOISE:CAPS"></a><h3>GWY_STOCK_XY_DENOISE</h3>
+<pre class="programlisting">#define GWY_STOCK_XY_DENOISE "gwy_xy_denoise"
+</pre>
+<p>The "Xy-Denoise" stock icon.</p>
+<img src="gwy_xy_denoise-24.png"><p class="since">Since: <a class="link" href="api-index-2-48.html#api-index-2.48">2.48</a></p>
+</div>
+<hr>
+<div class="refsect2">
<a name="GWY-STOCK-ZERO-MEAN:CAPS"></a><h3>GWY_STOCK_ZERO_MEAN</h3>
<pre class="programlisting">#define GWY_STOCK_ZERO_MEAN "gwy_zero_mean"
</pre>
diff --git a/devel-docs/libgwydgets/html/libgwydgets.devhelp2 b/devel-docs/libgwydgets/html/libgwydgets.devhelp2
index 34055ec..9bbf519 100644
--- a/devel-docs/libgwydgets/html/libgwydgets.devhelp2
+++ b/devel-docs/libgwydgets/html/libgwydgets.devhelp2
@@ -37,6 +37,7 @@
<sub name="Gwy3DLabel" link="Gwy3DLabel.html"/>
</sub>
<sub name="General Widgets" link="GeneralWidgets.html">
+ <sub name="GwyAdjustBar" link="GwyAdjustBar.html"/>
<sub name="GwyColorButton" link="GwyColorButton.html"/>
<sub name="GwyCurve" link="GwyCurve.html"/>
<sub name="GwyRuler" link="GwyRuler.html"/>
@@ -84,6 +85,8 @@
<sub name="Index of new symbols in 2.43" link="api-index-2-43.html"/>
<sub name="Index of new symbols in 2.45" link="api-index-2-45.html"/>
<sub name="Index of new symbols in 2.46" link="api-index-2-46.html"/>
+ <sub name="Index of new symbols in 2.48" link="api-index-2-48.html"/>
+ <sub name="Index of new symbols in 2.49" link="api-index-2-49.html"/>
</chapters>
<functions>
<keyword type="function" name="gwy_data_window_new ()" link="GwyDataWindow.html#gwy-data-window-new"/>
@@ -478,7 +481,10 @@
<keyword type="struct" name="struct Gwy3DSetup" link="Gwy3DSetup.html#Gwy3DSetup-struct"/>
<keyword type="struct" name="struct Gwy3DSetupClass" link="Gwy3DSetup.html#Gwy3DSetupClass"/>
<keyword type="property" name="The “axes-visible” property" link="Gwy3DSetup.html#Gwy3DSetup--axes-visible"/>
+ <keyword type="property" name="The “fmscale-reserve-space” property" link="Gwy3DSetup.html#Gwy3DSetup--fmscale-reserve-space"/>
+ <keyword type="property" name="The “fmscale-size” property" link="Gwy3DSetup.html#Gwy3DSetup--fmscale-size"/>
<keyword type="property" name="The “fmscale-visible” property" link="Gwy3DSetup.html#Gwy3DSetup--fmscale-visible"/>
+ <keyword type="property" name="The “fmscale-y-align” property" link="Gwy3DSetup.html#Gwy3DSetup--fmscale-y-align"/>
<keyword type="property" name="The “hide-masked” property" link="Gwy3DSetup.html#Gwy3DSetup--hide-masked"/>
<keyword type="property" name="The “labels-visible” property" link="Gwy3DSetup.html#Gwy3DSetup--labels-visible"/>
<keyword type="property" name="The “light-phi” property" link="Gwy3DSetup.html#Gwy3DSetup--light-phi"/>
@@ -506,6 +512,27 @@
<keyword type="property" name="The “rotation” property" link="Gwy3DLabel.html#Gwy3DLabel--rotation"/>
<keyword type="property" name="The “size” property" link="Gwy3DLabel.html#Gwy3DLabel--size"/>
<keyword type="property" name="The “text” property" link="Gwy3DLabel.html#Gwy3DLabel--text"/>
+ <keyword type="function" name="gwy_adjust_bar_new ()" link="GwyAdjustBar.html#gwy-adjust-bar-new" since="2.49"/>
+ <keyword type="function" name="gwy_adjust_bar_set_adjustment ()" link="GwyAdjustBar.html#gwy-adjust-bar-set-adjustment" since="2.49"/>
+ <keyword type="function" name="gwy_adjust_bar_get_adjustment ()" link="GwyAdjustBar.html#gwy-adjust-bar-get-adjustment" since="2.49"/>
+ <keyword type="function" name="gwy_adjust_bar_set_snap_to_ticks ()" link="GwyAdjustBar.html#gwy-adjust-bar-set-snap-to-ticks" since="2.49"/>
+ <keyword type="function" name="gwy_adjust_bar_get_snap_to_ticks ()" link="GwyAdjustBar.html#gwy-adjust-bar-get-snap-to-ticks" since="2.49"/>
+ <keyword type="function" name="gwy_adjust_bar_set_mapping ()" link="GwyAdjustBar.html#gwy-adjust-bar-set-mapping" since="2.49"/>
+ <keyword type="function" name="gwy_adjust_bar_get_mapping ()" link="GwyAdjustBar.html#gwy-adjust-bar-get-mapping" since="2.49"/>
+ <keyword type="function" name="gwy_adjust_bar_set_has_check_button ()" link="GwyAdjustBar.html#gwy-adjust-bar-set-has-check-button" since="2.49"/>
+ <keyword type="function" name="gwy_adjust_bar_get_has_check_button ()" link="GwyAdjustBar.html#gwy-adjust-bar-get-has-check-button" since="2.49"/>
+ <keyword type="function" name="gwy_adjust_bar_set_bar_sensitive ()" link="GwyAdjustBar.html#gwy-adjust-bar-set-bar-sensitive" since="2.49"/>
+ <keyword type="function" name="gwy_adjust_bar_get_bar_sensitive ()" link="GwyAdjustBar.html#gwy-adjust-bar-get-bar-sensitive" since="2.49"/>
+ <keyword type="function" name="gwy_adjust_bar_get_label ()" link="GwyAdjustBar.html#gwy-adjust-bar-get-label" since="2.49"/>
+ <keyword type="function" name="gwy_adjust_bar_get_check_button ()" link="GwyAdjustBar.html#gwy-adjust-bar-get-check-button" since="2.49"/>
+ <keyword type="struct" name="struct GwyAdjustBar" link="GwyAdjustBar.html#GwyAdjustBar-struct"/>
+ <keyword type="struct" name="struct GwyAdjustBarClass" link="GwyAdjustBar.html#GwyAdjustBarClass" since="2.49"/>
+ <keyword type="enum" name="enum GwyScaleMappingType" link="GwyAdjustBar.html#GwyScaleMappingType" since="2.49"/>
+ <keyword type="property" name="The “adjustment” property" link="GwyAdjustBar.html#GwyAdjustBar--adjustment"/>
+ <keyword type="property" name="The “has-check-button” property" link="GwyAdjustBar.html#GwyAdjustBar--has-check-button"/>
+ <keyword type="property" name="The “mapping” property" link="GwyAdjustBar.html#GwyAdjustBar--mapping"/>
+ <keyword type="property" name="The “snap-to-ticks” property" link="GwyAdjustBar.html#GwyAdjustBar--snap-to-ticks"/>
+ <keyword type="signal" name="The “change-value” signal" link="GwyAdjustBar.html#GwyAdjustBar-change-value"/>
<keyword type="function" name="gwy_color_button_new ()" link="GwyColorButton.html#gwy-color-button-new"/>
<keyword type="function" name="gwy_color_button_new_with_color ()" link="GwyColorButton.html#gwy-color-button-new-with-color"/>
<keyword type="function" name="gwy_color_button_set_color ()" link="GwyColorButton.html#gwy-color-button-set-color"/>
@@ -657,12 +684,13 @@
<keyword type="function" name="gwy_table_attach_spinbutton ()" link="libgwydgets-gwydgetutils.html#gwy-table-attach-spinbutton"/>
<keyword type="function" name="gwy_table_attach_row ()" link="libgwydgets-gwydgetutils.html#gwy-table-attach-row"/>
<keyword type="function" name="gwy_table_attach_hscale ()" link="libgwydgets-gwydgetutils.html#gwy-table-attach-hscale"/>
+ <keyword type="function" name="gwy_table_attach_adjbar ()" link="libgwydgets-gwydgetutils.html#gwy-table-attach-adjbar" since="2.49"/>
<keyword type="function" name="gwy_table_hscale_set_sensitive ()" link="libgwydgets-gwydgetutils.html#gwy-table-hscale-set-sensitive"/>
- <keyword type="macro" name="gwy_table_hscale_get_scale()" link="libgwydgets-gwydgetutils.html#gwy-table-hscale-get-scale"/>
- <keyword type="macro" name="gwy_table_hscale_get_check()" link="libgwydgets-gwydgetutils.html#gwy-table-hscale-get-check"/>
- <keyword type="macro" name="gwy_table_hscale_get_label()" link="libgwydgets-gwydgetutils.html#gwy-table-hscale-get-label"/>
- <keyword type="macro" name="gwy_table_hscale_get_units()" link="libgwydgets-gwydgetutils.html#gwy-table-hscale-get-units"/>
- <keyword type="macro" name="gwy_table_hscale_get_middle_widget()" link="libgwydgets-gwydgetutils.html#gwy-table-hscale-get-middle-widget"/>
+ <keyword type="function" name="gwy_table_hscale_get_scale ()" link="libgwydgets-gwydgetutils.html#gwy-table-hscale-get-scale"/>
+ <keyword type="function" name="gwy_table_hscale_get_check ()" link="libgwydgets-gwydgetutils.html#gwy-table-hscale-get-check"/>
+ <keyword type="function" name="gwy_table_hscale_get_label ()" link="libgwydgets-gwydgetutils.html#gwy-table-hscale-get-label"/>
+ <keyword type="function" name="gwy_table_hscale_get_units ()" link="libgwydgets-gwydgetutils.html#gwy-table-hscale-get-units"/>
+ <keyword type="function" name="gwy_table_hscale_get_middle_widget ()" link="libgwydgets-gwydgetutils.html#gwy-table-hscale-get-middle-widget"/>
<keyword type="function" name="gwy_table_get_child_widget ()" link="libgwydgets-gwydgetutils.html#gwy-table-get-child-widget"/>
<keyword type="function" name="gwy_color_selector_for_mask ()" link="libgwydgets-gwydgetutils.html#gwy-color-selector-for-mask"/>
<keyword type="function" name="gwy_mask_color_selector_run ()" link="libgwydgets-gwydgetutils.html#gwy-mask-color-selector-run" since="2.1"/>
@@ -687,9 +715,11 @@
<keyword type="macro" name="GWY_STOCK_COLOR_RANGE_FULL" link="libgwydgets-gwystock.html#GWY-STOCK-COLOR-RANGE-FULL:CAPS" since="2.7"/>
<keyword type="macro" name="GWY_STOCK_CONVOLUTION" link="libgwydgets-gwystock.html#GWY-STOCK-CONVOLUTION:CAPS" since="2.45"/>
<keyword type="macro" name="GWY_STOCK_CORRECT_AFFINE" link="libgwydgets-gwystock.html#GWY-STOCK-CORRECT-AFFINE:CAPS" since="2.37"/>
+ <keyword type="macro" name="GWY_STOCK_CORRELATION_MASK" link="libgwydgets-gwystock.html#GWY-STOCK-CORRELATION-MASK:CAPS" since="2.48"/>
<keyword type="macro" name="GWY_STOCK_CROP" link="libgwydgets-gwystock.html#GWY-STOCK-CROP:CAPS"/>
<keyword type="macro" name="GWY_STOCK_CWT" link="libgwydgets-gwystock.html#GWY-STOCK-CWT:CAPS"/>
<keyword type="macro" name="GWY_STOCK_DATA_MEASURE" link="libgwydgets-gwystock.html#GWY-STOCK-DATA-MEASURE:CAPS" since="2.3"/>
+ <keyword type="macro" name="GWY_STOCK_DISCONNECTED" link="libgwydgets-gwystock.html#GWY-STOCK-DISCONNECTED:CAPS" since="2.48"/>
<keyword type="macro" name="GWY_STOCK_DISTANCE" link="libgwydgets-gwystock.html#GWY-STOCK-DISTANCE:CAPS"/>
<keyword type="macro" name="GWY_STOCK_DISTANCE_TRANSFORM" link="libgwydgets-gwystock.html#GWY-STOCK-DISTANCE-TRANSFORM:CAPS" since="2.46"/>
<keyword type="macro" name="GWY_STOCK_DISTRIBUTION_ANGLE" link="libgwydgets-gwystock.html#GWY-STOCK-DISTRIBUTION-ANGLE:CAPS" since="2.45"/>
@@ -705,16 +735,23 @@
<keyword type="macro" name="GWY_STOCK_FAVOURITE" link="libgwydgets-gwystock.html#GWY-STOCK-FAVOURITE:CAPS"/>
<keyword type="macro" name="GWY_STOCK_FFT" link="libgwydgets-gwystock.html#GWY-STOCK-FFT:CAPS"/>
<keyword type="macro" name="GWY_STOCK_FFT_2D" link="libgwydgets-gwystock.html#GWY-STOCK-FFT-2D:CAPS" since="2.45"/>
+ <keyword type="macro" name="GWY_STOCK_FFT_FILTER_1D" link="libgwydgets-gwystock.html#GWY-STOCK-FFT-FILTER-1D:CAPS" since="2.48"/>
<keyword type="macro" name="GWY_STOCK_FFT_FILTER_2D" link="libgwydgets-gwystock.html#GWY-STOCK-FFT-FILTER-2D:CAPS" since="2.45"/>
<keyword type="macro" name="GWY_STOCK_FILTER" link="libgwydgets-gwystock.html#GWY-STOCK-FILTER:CAPS"/>
<keyword type="macro" name="GWY_STOCK_FIND_PEAKS" link="libgwydgets-gwystock.html#GWY-STOCK-FIND-PEAKS:CAPS" since="2.45"/>
+ <keyword type="macro" name="GWY_STOCK_FIT_SHAPE" link="libgwydgets-gwystock.html#GWY-STOCK-FIT-SHAPE:CAPS" since="2.48"/>
<keyword type="macro" name="GWY_STOCK_FIX_ZERO" link="libgwydgets-gwystock.html#GWY-STOCK-FIX-ZERO:CAPS"/>
<keyword type="macro" name="GWY_STOCK_FLIP_HORIZONTALLY" link="libgwydgets-gwystock.html#GWY-STOCK-FLIP-HORIZONTALLY:CAPS"/>
<keyword type="macro" name="GWY_STOCK_FLIP_VERTICALLY" link="libgwydgets-gwystock.html#GWY-STOCK-FLIP-VERTICALLY:CAPS"/>
<keyword type="macro" name="GWY_STOCK_FRACTAL" link="libgwydgets-gwystock.html#GWY-STOCK-FRACTAL:CAPS"/>
+ <keyword type="macro" name="GWY_STOCK_FRACTAL_CORRECTION" link="libgwydgets-gwystock.html#GWY-STOCK-FRACTAL-CORRECTION:CAPS" since="2.48"/>
+ <keyword type="macro" name="GWY_STOCK_FRACTAL_MEASURE" link="libgwydgets-gwystock.html#GWY-STOCK-FRACTAL-MEASURE:CAPS" since="2.49"/>
<keyword type="macro" name="GWY_STOCK_GL_MATERIAL" link="libgwydgets-gwystock.html#GWY-STOCK-GL-MATERIAL:CAPS" since="2.7"/>
<keyword type="macro" name="GWY_STOCK_GRADIENT_HORIZONTAL" link="libgwydgets-gwystock.html#GWY-STOCK-GRADIENT-HORIZONTAL:CAPS"/>
<keyword type="macro" name="GWY_STOCK_GRADIENT_VERTICAL" link="libgwydgets-gwystock.html#GWY-STOCK-GRADIENT-VERTICAL:CAPS"/>
+ <keyword type="macro" name="GWY_STOCK_GRAIN_CORRELATION" link="libgwydgets-gwystock.html#GWY-STOCK-GRAIN-CORRELATION:CAPS" since="2.45"/>
+ <keyword type="macro" name="GWY_STOCK_GRAIN_EXSCRIBED_CIRCLE" link="libgwydgets-gwystock.html#GWY-STOCK-GRAIN-EXSCRIBED-CIRCLE:CAPS" since="2.45"/>
+ <keyword type="macro" name="GWY_STOCK_GRAIN_INSCRIBED_CIRCLE" link="libgwydgets-gwystock.html#GWY-STOCK-GRAIN-INSCRIBED-CIRCLE:CAPS" since="2.45"/>
<keyword type="macro" name="GWY_STOCK_GRAINS" link="libgwydgets-gwystock.html#GWY-STOCK-GRAINS:CAPS"/>
<keyword type="macro" name="GWY_STOCK_GRAINS_EDGE" link="libgwydgets-gwystock.html#GWY-STOCK-GRAINS-EDGE:CAPS" since="2.45"/>
<keyword type="macro" name="GWY_STOCK_GRAINS_EDGE_REMOVE" link="libgwydgets-gwystock.html#GWY-STOCK-GRAINS-EDGE-REMOVE:CAPS" since="2.46"/>
@@ -722,9 +759,6 @@
<keyword type="macro" name="GWY_STOCK_GRAINS_MEASURE" link="libgwydgets-gwystock.html#GWY-STOCK-GRAINS-MEASURE:CAPS" since="2.7"/>
<keyword type="macro" name="GWY_STOCK_GRAINS_REMOVE" link="libgwydgets-gwystock.html#GWY-STOCK-GRAINS-REMOVE:CAPS"/>
<keyword type="macro" name="GWY_STOCK_GRAINS_WATER" link="libgwydgets-gwystock.html#GWY-STOCK-GRAINS-WATER:CAPS"/>
- <keyword type="macro" name="GWY_STOCK_GRAIN_CORRELATION" link="libgwydgets-gwystock.html#GWY-STOCK-GRAIN-CORRELATION:CAPS" since="2.45"/>
- <keyword type="macro" name="GWY_STOCK_GRAIN_EXSCRIBED_CIRCLE" link="libgwydgets-gwystock.html#GWY-STOCK-GRAIN-EXSCRIBED-CIRCLE:CAPS" since="2.45"/>
- <keyword type="macro" name="GWY_STOCK_GRAIN_INSCRIBED_CIRCLE" link="libgwydgets-gwystock.html#GWY-STOCK-GRAIN-INSCRIBED-CIRCLE:CAPS" since="2.45"/>
<keyword type="macro" name="GWY_STOCK_GRAPH" link="libgwydgets-gwystock.html#GWY-STOCK-GRAPH:CAPS"/>
<keyword type="macro" name="GWY_STOCK_GRAPH_ALIGN" link="libgwydgets-gwystock.html#GWY-STOCK-GRAPH-ALIGN:CAPS" since="2.45"/>
<keyword type="macro" name="GWY_STOCK_GRAPH_CUT" link="libgwydgets-gwystock.html#GWY-STOCK-GRAPH-CUT:CAPS" since="2.45"/>
@@ -763,6 +797,8 @@
<keyword type="macro" name="GWY_STOCK_LOCAL_SLOPE" link="libgwydgets-gwystock.html#GWY-STOCK-LOCAL-SLOPE:CAPS"/>
<keyword type="macro" name="GWY_STOCK_LOGSCALE_HORIZONTAL" link="libgwydgets-gwystock.html#GWY-STOCK-LOGSCALE-HORIZONTAL:CAPS"/>
<keyword type="macro" name="GWY_STOCK_LOGSCALE_VERTICAL" link="libgwydgets-gwystock.html#GWY-STOCK-LOGSCALE-VERTICAL:CAPS"/>
+ <keyword type="macro" name="GWY_STOCK_MARK_OUTLIERS" link="libgwydgets-gwystock.html#GWY-STOCK-MARK-OUTLIERS:CAPS" since="2.48"/>
+ <keyword type="macro" name="GWY_STOCK_MARK_SCARS" link="libgwydgets-gwystock.html#GWY-STOCK-MARK-SCARS:CAPS" since="2.48"/>
<keyword type="macro" name="GWY_STOCK_MARK_WITH" link="libgwydgets-gwystock.html#GWY-STOCK-MARK-WITH:CAPS" since="2.37"/>
<keyword type="macro" name="GWY_STOCK_MASK" link="libgwydgets-gwystock.html#GWY-STOCK-MASK:CAPS"/>
<keyword type="macro" name="GWY_STOCK_MASK_ADD" link="libgwydgets-gwystock.html#GWY-STOCK-MASK-ADD:CAPS"/>
@@ -786,6 +822,7 @@
<keyword type="macro" name="GWY_STOCK_MASK_RECT_EXCLUSIVE" link="libgwydgets-gwystock.html#GWY-STOCK-MASK-RECT-EXCLUSIVE:CAPS"/>
<keyword type="macro" name="GWY_STOCK_MASK_RECT_INCLUSIVE" link="libgwydgets-gwystock.html#GWY-STOCK-MASK-RECT-INCLUSIVE:CAPS"/>
<keyword type="macro" name="GWY_STOCK_MASK_REMOVE" link="libgwydgets-gwystock.html#GWY-STOCK-MASK-REMOVE:CAPS"/>
+ <keyword type="macro" name="GWY_STOCK_MASK_SET" link="libgwydgets-gwystock.html#GWY-STOCK-MASK-SET:CAPS" since="2.49"/>
<keyword type="macro" name="GWY_STOCK_MASK_SHRINK" link="libgwydgets-gwystock.html#GWY-STOCK-MASK-SHRINK:CAPS"/>
<keyword type="macro" name="GWY_STOCK_MASK_SUBTRACT" link="libgwydgets-gwystock.html#GWY-STOCK-MASK-SUBTRACT:CAPS"/>
<keyword type="macro" name="GWY_STOCK_MASK_THIN" link="libgwydgets-gwystock.html#GWY-STOCK-MASK-THIN:CAPS" since="2.45"/>
@@ -795,12 +832,15 @@
<keyword type="macro" name="GWY_STOCK_MUTUAL_CROP" link="libgwydgets-gwystock.html#GWY-STOCK-MUTUAL-CROP:CAPS" since="2.46"/>
<keyword type="macro" name="GWY_STOCK_NEURAL_APPLY" link="libgwydgets-gwystock.html#GWY-STOCK-NEURAL-APPLY:CAPS" since="2.45"/>
<keyword type="macro" name="GWY_STOCK_NEURAL_TRAIN" link="libgwydgets-gwystock.html#GWY-STOCK-NEURAL-TRAIN:CAPS" since="2.45"/>
+ <keyword type="macro" name="GWY_STOCK_NEXT" link="libgwydgets-gwystock.html#GWY-STOCK-NEXT:CAPS" since="2.49"/>
+ <keyword type="macro" name="GWY_STOCK_NULL_OFFSETS" link="libgwydgets-gwystock.html#GWY-STOCK-NULL-OFFSETS:CAPS" since="2.48"/>
<keyword type="macro" name="GWY_STOCK_PALETTES" link="libgwydgets-gwystock.html#GWY-STOCK-PALETTES:CAPS"/>
<keyword type="macro" name="GWY_STOCK_PATH_LEVEL" link="libgwydgets-gwystock.html#GWY-STOCK-PATH-LEVEL:CAPS" since="2.7"/>
<keyword type="macro" name="GWY_STOCK_POINTER_MEASURE" link="libgwydgets-gwystock.html#GWY-STOCK-POINTER-MEASURE:CAPS"/>
+ <keyword type="macro" name="GWY_STOCK_POLY_DISTORT" link="libgwydgets-gwystock.html#GWY-STOCK-POLY-DISTORT:CAPS" since="2.46"/>
<keyword type="macro" name="GWY_STOCK_POLYNOM" link="libgwydgets-gwystock.html#GWY-STOCK-POLYNOM:CAPS"/>
<keyword type="macro" name="GWY_STOCK_POLYNOM_LEVEL" link="libgwydgets-gwystock.html#GWY-STOCK-POLYNOM-LEVEL:CAPS" since="2.29"/>
- <keyword type="macro" name="GWY_STOCK_POLY_DISTORT" link="libgwydgets-gwystock.html#GWY-STOCK-POLY-DISTORT:CAPS" since="2.46"/>
+ <keyword type="macro" name="GWY_STOCK_PREVIOUS" link="libgwydgets-gwystock.html#GWY-STOCK-PREVIOUS:CAPS" since="2.49"/>
<keyword type="macro" name="GWY_STOCK_PROFILE" link="libgwydgets-gwystock.html#GWY-STOCK-PROFILE:CAPS"/>
<keyword type="macro" name="GWY_STOCK_PSDF_LOG_PHI" link="libgwydgets-gwystock.html#GWY-STOCK-PSDF-LOG-PHI:CAPS" since="2.45"/>
<keyword type="macro" name="GWY_STOCK_PSDF_SECTION" link="libgwydgets-gwystock.html#GWY-STOCK-PSDF-SECTION:CAPS" since="2.45"/>
@@ -808,6 +848,7 @@
<keyword type="macro" name="GWY_STOCK_REMOVE_UNDER_MASK" link="libgwydgets-gwystock.html#GWY-STOCK-REMOVE-UNDER-MASK:CAPS"/>
<keyword type="macro" name="GWY_STOCK_ROTATE" link="libgwydgets-gwystock.html#GWY-STOCK-ROTATE:CAPS"/>
<keyword type="macro" name="GWY_STOCK_ROTATE_180" link="libgwydgets-gwystock.html#GWY-STOCK-ROTATE-180:CAPS"/>
+ <keyword type="macro" name="GWY_STOCK_ROTATE_3D" link="libgwydgets-gwystock.html#GWY-STOCK-ROTATE-3D:CAPS" since="2.49"/>
<keyword type="macro" name="GWY_STOCK_ROTATE_90_CCW" link="libgwydgets-gwystock.html#GWY-STOCK-ROTATE-90-CCW:CAPS"/>
<keyword type="macro" name="GWY_STOCK_ROTATE_90_CW" link="libgwydgets-gwystock.html#GWY-STOCK-ROTATE-90-CW:CAPS"/>
<keyword type="macro" name="GWY_STOCK_SCALE" link="libgwydgets-gwystock.html#GWY-STOCK-SCALE:CAPS"/>
@@ -827,12 +868,14 @@
<keyword type="macro" name="GWY_STOCK_SYNTHETIC_COLUMNAR" link="libgwydgets-gwystock.html#GWY-STOCK-SYNTHETIC-COLUMNAR:CAPS" since="2.37"/>
<keyword type="macro" name="GWY_STOCK_SYNTHETIC_DIFFUSION" link="libgwydgets-gwystock.html#GWY-STOCK-SYNTHETIC-DIFFUSION:CAPS" since="2.38"/>
<keyword type="macro" name="GWY_STOCK_SYNTHETIC_DOMAINS" link="libgwydgets-gwystock.html#GWY-STOCK-SYNTHETIC-DOMAINS:CAPS" since="2.37"/>
+ <keyword type="macro" name="GWY_STOCK_SYNTHETIC_FIBRES" link="libgwydgets-gwystock.html#GWY-STOCK-SYNTHETIC-FIBRES:CAPS" since="2.49"/>
<keyword type="macro" name="GWY_STOCK_SYNTHETIC_LATTICE" link="libgwydgets-gwystock.html#GWY-STOCK-SYNTHETIC-LATTICE:CAPS" since="2.37"/>
<keyword type="macro" name="GWY_STOCK_SYNTHETIC_LINE_NOISE" link="libgwydgets-gwystock.html#GWY-STOCK-SYNTHETIC-LINE-NOISE:CAPS" since="2.37"/>
<keyword type="macro" name="GWY_STOCK_SYNTHETIC_NOISE" link="libgwydgets-gwystock.html#GWY-STOCK-SYNTHETIC-NOISE:CAPS" since="2.37"/>
<keyword type="macro" name="GWY_STOCK_SYNTHETIC_OBJECTS" link="libgwydgets-gwystock.html#GWY-STOCK-SYNTHETIC-OBJECTS:CAPS" since="2.37"/>
<keyword type="macro" name="GWY_STOCK_SYNTHETIC_PARTICLES" link="libgwydgets-gwystock.html#GWY-STOCK-SYNTHETIC-PARTICLES:CAPS" since="2.37"/>
<keyword type="macro" name="GWY_STOCK_SYNTHETIC_PATTERN" link="libgwydgets-gwystock.html#GWY-STOCK-SYNTHETIC-PATTERN:CAPS" since="2.37"/>
+ <keyword type="macro" name="GWY_STOCK_SYNTHETIC_PHASES" link="libgwydgets-gwystock.html#GWY-STOCK-SYNTHETIC-PHASES:CAPS" since="2.48"/>
<keyword type="macro" name="GWY_STOCK_SYNTHETIC_SPECTRAL" link="libgwydgets-gwystock.html#GWY-STOCK-SYNTHETIC-SPECTRAL:CAPS" since="2.45"/>
<keyword type="macro" name="GWY_STOCK_SYNTHETIC_WAVES" link="libgwydgets-gwystock.html#GWY-STOCK-SYNTHETIC-WAVES:CAPS" since="2.37"/>
<keyword type="macro" name="GWY_STOCK_TILT" link="libgwydgets-gwystock.html#GWY-STOCK-TILT:CAPS" since="2.45"/>
@@ -856,6 +899,7 @@
<keyword type="macro" name="GWY_STOCK_VOLUME_SLICE" link="libgwydgets-gwystock.html#GWY-STOCK-VOLUME-SLICE:CAPS" since="2.46"/>
<keyword type="macro" name="GWY_STOCK_VOLUMIZE" link="libgwydgets-gwystock.html#GWY-STOCK-VOLUMIZE:CAPS" since="2.46"/>
<keyword type="macro" name="GWY_STOCK_VOLUMIZE_LAYERS" link="libgwydgets-gwystock.html#GWY-STOCK-VOLUMIZE-LAYERS:CAPS" since="2.45"/>
+ <keyword type="macro" name="GWY_STOCK_XY_DENOISE" link="libgwydgets-gwystock.html#GWY-STOCK-XY-DENOISE:CAPS" since="2.48"/>
<keyword type="macro" name="GWY_STOCK_ZERO_MEAN" link="libgwydgets-gwystock.html#GWY-STOCK-ZERO-MEAN:CAPS" since="2.45"/>
<keyword type="macro" name="GWY_STOCK_ZOOM_1_1" link="libgwydgets-gwystock.html#GWY-STOCK-ZOOM-1-1:CAPS"/>
<keyword type="macro" name="GWY_STOCK_ZOOM_FIT" link="libgwydgets-gwystock.html#GWY-STOCK-ZOOM-FIT:CAPS"/>
@@ -910,6 +954,9 @@
<keyword type="function" name="gwy_sensitivity_group_contains_widget ()" link="GwySensitivityGroup.html#gwy-sensitivity-group-contains-widget" since="2.34"/>
<keyword type="struct" name="struct GwySensitivityGroup" link="GwySensitivityGroup.html#GwySensitivityGroup-struct"/>
<keyword type="struct" name="struct GwySensitivityGroupClass" link="GwySensitivityGroup.html#GwySensitivityGroupClass"/>
+ <keyword type="constant" name="GWY_SCALE_MAPPING_LINEAR" link="GwyAdjustBar.html#GWY-SCALE-MAPPING-LINEAR:CAPS"/>
+ <keyword type="constant" name="GWY_SCALE_MAPPING_SQRT" link="GwyAdjustBar.html#GWY-SCALE-MAPPING-SQRT:CAPS"/>
+ <keyword type="constant" name="GWY_SCALE_MAPPING_LOG" link="GwyAdjustBar.html#GWY-SCALE-MAPPING-LOG:CAPS"/>
<keyword type="constant" name="GWY_AXIS_SCALE_FORMAT_AUTO" link="libgwydgets-gwydgetenums.html#GWY-AXIS-SCALE-FORMAT-AUTO:CAPS"/>
<keyword type="constant" name="GWY_AXIS_SCALE_FORMAT_EXP" link="libgwydgets-gwydgetenums.html#GWY-AXIS-SCALE-FORMAT-EXP:CAPS"/>
<keyword type="constant" name="GWY_AXIS_SCALE_FORMAT_INT" link="libgwydgets-gwydgetenums.html#GWY-AXIS-SCALE-FORMAT-INT:CAPS"/>
@@ -934,10 +981,12 @@
<keyword type="constant" name="GWY_HSCALE_DEFAULT" link="libgwydgets-gwydgetenums.html#GWY-HSCALE-DEFAULT:CAPS"/>
<keyword type="constant" name="GWY_HSCALE_LOG" link="libgwydgets-gwydgetenums.html#GWY-HSCALE-LOG:CAPS"/>
<keyword type="constant" name="GWY_HSCALE_SQRT" link="libgwydgets-gwydgetenums.html#GWY-HSCALE-SQRT:CAPS"/>
+ <keyword type="constant" name="GWY_HSCALE_LINEAR" link="libgwydgets-gwydgetenums.html#GWY-HSCALE-LINEAR:CAPS"/>
<keyword type="constant" name="GWY_HSCALE_NO_SCALE" link="libgwydgets-gwydgetenums.html#GWY-HSCALE-NO-SCALE:CAPS"/>
<keyword type="constant" name="GWY_HSCALE_WIDGET" link="libgwydgets-gwydgetenums.html#GWY-HSCALE-WIDGET:CAPS"/>
<keyword type="constant" name="GWY_HSCALE_WIDGET_NO_EXPAND" link="libgwydgets-gwydgetenums.html#GWY-HSCALE-WIDGET-NO-EXPAND:CAPS"/>
<keyword type="constant" name="GWY_HSCALE_CHECK" link="libgwydgets-gwydgetenums.html#GWY-HSCALE-CHECK:CAPS"/>
+ <keyword type="constant" name="GWY_HSCALE_SNAP" link="libgwydgets-gwydgetenums.html#GWY-HSCALE-SNAP:CAPS"/>
<keyword type="constant" name="GWY_GRAPH_STATUS_PLAIN" link="libgwydgets-gwydgetenums.html#GWY-GRAPH-STATUS-PLAIN:CAPS"/>
<keyword type="constant" name="GWY_GRAPH_STATUS_XSEL" link="libgwydgets-gwydgetenums.html#GWY-GRAPH-STATUS-XSEL:CAPS"/>
<keyword type="constant" name="GWY_GRAPH_STATUS_YSEL" link="libgwydgets-gwydgetenums.html#GWY-GRAPH-STATUS-YSEL:CAPS"/>
diff --git a/devel-docs/libgwydgets/html/standard-vector-layers.html b/devel-docs/libgwydgets/html/standard-vector-layers.html
index cc0b5b6..1928bda 100644
--- a/devel-docs/libgwydgets/html/standard-vector-layers.html
+++ b/devel-docs/libgwydgets/html/standard-vector-layers.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Standard Vector Layers: Gwyddion Widgets Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Widgets Library Reference Manual">
<link rel="up" href="DataWindowWidgets.html" title="Data Windows and Views">
<link rel="prev" href="GwyColorAxis.html" title="GwyColorAxis">
diff --git a/devel-docs/libgwydgets/libgwydgets-docs.sgml b/devel-docs/libgwydgets/libgwydgets-docs.sgml
index 00b3ce3..071a115 100644
--- a/devel-docs/libgwydgets/libgwydgets-docs.sgml
+++ b/devel-docs/libgwydgets/libgwydgets-docs.sgml
@@ -64,6 +64,7 @@
<chapter id="GeneralWidgets">
<title>General Widgets</title>
+ <xi:include href="xml/gwyadjustbar.xml"/>
<xi:include href="xml/gwycolorbutton.xml"/>
<xi:include href="xml/gwycurve.xml"/>
<xi:include href="xml/gwyruler.xml"/>
@@ -96,93 +97,101 @@
<title>Index of all symbols</title>
<xi:include href="xml/api-index-full.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-deprec" role="deprecated">
+ <index id="api-index-deprec">
<title>Index of deprecated symbols</title>
<xi:include href="xml/api-index-deprecated.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-1" role="2.1">
+ <index id="api-index-2-1">
<title>Index of new symbols in 2.1</title>
<xi:include href="xml/api-index-2.1.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-3" role="2.3">
+ <index id="api-index-2-3">
<title>Index of new symbols in 2.3</title>
<xi:include href="xml/api-index-2.3.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-5" role="2.5">
+ <index id="api-index-2-5">
<title>Index of new symbols in 2.5</title>
<xi:include href="xml/api-index-2.5.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-7" role="2.7">
+ <index id="api-index-2-7">
<title>Index of new symbols in 2.7</title>
<xi:include href="xml/api-index-2.7.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-8" role="2.8">
+ <index id="api-index-2-8">
<title>Index of new symbols in 2.8</title>
<xi:include href="xml/api-index-2.8.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-11" role="2.11">
+ <index id="api-index-2-11">
<title>Index of new symbols in 2.11</title>
<xi:include href="xml/api-index-2.11.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-14" role="2.14">
+ <index id="api-index-2-14">
<title>Index of new symbols in 2.14</title>
<xi:include href="xml/api-index-2.14.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-16" role="2.16">
+ <index id="api-index-2-16">
<title>Index of new symbols in 2.16</title>
<xi:include href="xml/api-index-2.16.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-22" role="2.22">
+ <index id="api-index-2-22">
<title>Index of new symbols in 2.22</title>
<xi:include href="xml/api-index-2.22.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-23" role="2.23">
+ <index id="api-index-2-23">
<title>Index of new symbols in 2.23</title>
<xi:include href="xml/api-index-2.23.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-26" role="2.26">
+ <index id="api-index-2-26">
<title>Index of new symbols in 2.26</title>
<xi:include href="xml/api-index-2.26.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-29" role="2.29">
+ <index id="api-index-2-29">
<title>Index of new symbols in 2.29</title>
<xi:include href="xml/api-index-2.29.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-34" role="2.34">
+ <index id="api-index-2-34">
<title>Index of new symbols in 2.34</title>
<xi:include href="xml/api-index-2.34.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-37" role="2.37">
+ <index id="api-index-2-37">
<title>Index of new symbols in 2.37</title>
<xi:include href="xml/api-index-2.37.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-38" role="2.38">
+ <index id="api-index-2-38">
<title>Index of new symbols in 2.38</title>
<xi:include href="xml/api-index-2.38.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-39" role="2.39">
+ <index id="api-index-2-39">
<title>Index of new symbols in 2.39</title>
<xi:include href="xml/api-index-2.39.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-41" role="2.41">
+ <index id="api-index-2-41">
<title>Index of new symbols in 2.41</title>
<xi:include href="xml/api-index-2.41.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-42" role="2.42">
+ <index id="api-index-2-42">
<title>Index of new symbols in 2.42</title>
<xi:include href="xml/api-index-2.42.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-43" role="2.43">
+ <index id="api-index-2-43">
<title>Index of new symbols in 2.43</title>
<xi:include href="xml/api-index-2.43.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-45" role="2.45">
+ <index id="api-index-2-45">
<title>Index of new symbols in 2.45</title>
<xi:include href="xml/api-index-2.45.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-46" role="2.46">
+ <index id="api-index-2-46">
<title>Index of new symbols in 2.46</title>
<xi:include href="xml/api-index-2.46.xml"><xi:fallback /></xi:include>
</index>
+ <index id="api-index-2-48">
+ <title>Index of new symbols in 2.48</title>
+ <xi:include href="xml/api-index-2.48.xml"><xi:fallback /></xi:include>
+ </index>
+ <index id="api-index-2-49">
+ <title>Index of new symbols in 2.49</title>
+ <xi:include href="xml/api-index-2.49.xml"><xi:fallback /></xi:include>
+ </index>
<!-- API INDICES END -->
</book>
diff --git a/devel-docs/libgwydraw/Makefile.in b/devel-docs/libgwydraw/Makefile.in
index 7ba966d..79cd604 100644
--- a/devel-docs/libgwydraw/Makefile.in
+++ b/devel-docs/libgwydraw/Makefile.in
@@ -178,10 +178,7 @@ EPYDOC = @EPYDOC@
EXEEXT = @EXEEXT@
EXR_CFLAGS = @EXR_CFLAGS@
EXR_LIBS = @EXR_LIBS@
-FFTW3_1_CFLAGS = @FFTW3_1_CFLAGS@
-FFTW3_1_LIBS = @FFTW3_1_LIBS@
FFTW3_CFLAGS = @FFTW3_CFLAGS@
-FFTW3_DEPENDENCY = @FFTW3_DEPENDENCY@
FFTW3_LIBS = @FFTW3_LIBS@
FGREP = @FGREP@
GCONFTOOL = @GCONFTOOL@
@@ -191,6 +188,8 @@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
GLIBC21 = @GLIBC21@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GMODULE_CFLAGS = @GMODULE_CFLAGS@
GMODULE_LIBS = @GMODULE_LIBS@
GMSGFMT = @GMSGFMT@
@@ -215,7 +214,9 @@ GTK_MAC_LIBS = @GTK_MAC_LIBS@
GWY_VERSION_MAJOR = @GWY_VERSION_MAJOR@
GWY_VERSION_MINOR = @GWY_VERSION_MINOR@
GWY_VERSION_STRING = @GWY_VERSION_STRING@
+HDRIMAGE_EXTRA_CFLAGS = @HDRIMAGE_EXTRA_CFLAGS@
HTML_DIR = @HTML_DIR@
+INKSCAPE = @INKSCAPE@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -273,6 +274,7 @@ PASCAL = @PASCAL@
PATH_SEPARATOR = @PATH_SEPARATOR@
PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
+PNGCRUSH = @PNGCRUSH@
PNG_CFLAGS = @PNG_CFLAGS@
PNG_LIBS = @PNG_LIBS@
POD2MAN = @POD2MAN@
@@ -281,17 +283,13 @@ PYGTK_CFLAGS = @PYGTK_CFLAGS@
PYGTK_CODEGENDIR = @PYGTK_CODEGENDIR@
PYGTK_LIBS = @PYGTK_LIBS@
PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
PYTHON_EXTRA_CFLAGS = @PYTHON_EXTRA_CFLAGS@
PYTHON_INCLUDES = @PYTHON_INCLUDES@
-PYTHON_LIBS = @PYTHON_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
PYTHON_PLATFORM = @PYTHON_PLATFORM@
PYTHON_PREFIX = @PYTHON_PREFIX@
-PYTHON_SYSCFG_BASECFLAGS = @PYTHON_SYSCFG_BASECFLAGS@
-PYTHON_SYSCFG_CCSHARED = @PYTHON_SYSCFG_CCSHARED@
-PYTHON_SYSCFG_LDFLAGS = @PYTHON_SYSCFG_LDFLAGS@
-PYTHON_SYSCFG_LIBDIR = @PYTHON_SYSCFG_LIBDIR@
-PYTHON_SYSCFG_LINKFORSHARED = @PYTHON_SYSCFG_LINKFORSHARED@
PYTHON_VERSION = @PYTHON_VERSION@
RANLIB = @RANLIB@
RUBY = @RUBY@
diff --git a/devel-docs/libgwydraw/html/GwyGLMaterial.html b/devel-docs/libgwydraw/html/GwyGLMaterial.html
index d5d0ce1..b4d52e4 100644
--- a/devel-docs/libgwydraw/html/GwyGLMaterial.html
+++ b/devel-docs/libgwydraw/html/GwyGLMaterial.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GwyGLMaterial: Gwyddion Drawing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Drawing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Drawing Library Reference Manual">
<link rel="prev" href="GwyGradient.html" title="GwyGradient">
@@ -34,7 +34,7 @@
</tr></table></div>
<div class="refsect1">
<a name="GwyGLMaterial.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -153,7 +153,7 @@
</div>
<div class="refsect1">
<a name="GwyGLMaterial.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -208,7 +208,7 @@ gwy_gl_material_get_ambient (<em class="parameter"><code><a class="link" href="G
<p>Gets the ambient reflectance of a GL material.</p>
<div class="refsect3">
<a name="gwy-gl-material-get-ambient.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -236,7 +236,7 @@ gwy_gl_material_set_ambient (<em class="parameter"><code><a class="link" href="G
<p>Sets the ambient reflectance of a GL material.</p>
<div class="refsect3">
<a name="gwy-gl-material-set-ambient.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -265,7 +265,7 @@ gwy_gl_material_get_diffuse (<em class="parameter"><code><a class="link" href="G
<p>Gets the diffuse reflectance of a GL material.</p>
<div class="refsect3">
<a name="gwy-gl-material-get-diffuse.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -293,7 +293,7 @@ gwy_gl_material_set_diffuse (<em class="parameter"><code><a class="link" href="G
<p>Sets the diffuse reflectance of a GL material.</p>
<div class="refsect3">
<a name="gwy-gl-material-set-diffuse.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -322,7 +322,7 @@ gwy_gl_material_get_specular (<em class="parameter"><code><a class="link" href="
<p>Gets the specular reflectance of a GL material.</p>
<div class="refsect3">
<a name="gwy-gl-material-get-specular.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -350,7 +350,7 @@ gwy_gl_material_set_specular (<em class="parameter"><code><a class="link" href="
<p>Sets the specular reflectance of a GL material.</p>
<div class="refsect3">
<a name="gwy-gl-material-set-specular.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -379,7 +379,7 @@ gwy_gl_material_get_emission (<em class="parameter"><code><a class="link" href="
<p>Gets the emission component of a GL material.</p>
<div class="refsect3">
<a name="gwy-gl-material-get-emission.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -407,7 +407,7 @@ gwy_gl_material_set_emission (<em class="parameter"><code><a class="link" href="
<p>Sets the emission component of a GL material.</p>
<div class="refsect3">
<a name="gwy-gl-material-set-emission.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -436,7 +436,7 @@ gwy_gl_material_get_shininess (<em class="parameter"><code><a class="link" href=
<p>Gets the shininess value of a GL material.</p>
<div class="refsect3">
<a name="gwy-gl-material-get-shininess.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -463,7 +463,7 @@ gwy_gl_material_set_shininess (<em class="parameter"><code><a class="link" href=
<p>Sets the shininess value of a GL material.</p>
<div class="refsect3">
<a name="gwy-gl-material-set-shininess.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -493,7 +493,7 @@ gwy_gl_material_sample_to_pixbuf (<em class="parameter"><code><a class="link" hr
<p>Samples GL material to a provided pixbuf.</p>
<div class="refsect3">
<a name="gwy-gl-material-sample-to-pixbuf.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -522,7 +522,7 @@ gwy_gl_material_reset (<em class="parameter"><code><a class="link" href="GwyGLMa
<p>Resets a GL material to default values.</p>
<div class="refsect3">
<a name="gwy-gl-material-reset.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -555,7 +555,7 @@ gwy_gl_materials_get_gl_material (<em class="parameter"><code>const <a href="htt
<p>Convenience function to get a GL material from <a class="link" href="GwyGLMaterial.html#gwy-gl-materials" title="gwy_gl_materials ()"><code class="function">gwy_gl_materials()</code></a> by name.</p>
<div class="refsect3">
<a name="gwy-gl-materials-get-gl-material.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwydraw/html/GwyGradient.html b/devel-docs/libgwydraw/html/GwyGradient.html
index 6759ab3..bf94790 100644
--- a/devel-docs/libgwydraw/html/GwyGradient.html
+++ b/devel-docs/libgwydraw/html/GwyGradient.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GwyGradient: Gwyddion Drawing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Drawing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Drawing Library Reference Manual">
<link rel="prev" href="libgwydraw-GwyRGBA.html" title="GwyRGBA">
@@ -34,7 +34,7 @@
</tr></table></div>
<div class="refsect1">
<a name="GwyGradient.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -179,7 +179,7 @@
</div>
<div class="refsect1">
<a name="GwyGradient.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -240,7 +240,7 @@ gwy_gradient_get_color (<em class="parameter"><code><a class="link" href="GwyGra
<p>Computes the color at a given position of a color gradient.</p>
<div class="refsect3">
<a name="gwy-gradient-get-color.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -281,7 +281,7 @@ their number never changes. The returned pointer is valid only as long
as the gradient used, indicated by <a href="../GwyResource.html#gwy-resource-use"><code class="function">gwy_resource_use()</code></a>.</p>
<div class="refsect3">
<a name="gwy-gradient-get-samples.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -326,7 +326,7 @@ gradient definition change), use <a class="link" href="GwyGradient.html#gwy-grad
This function does not need the gradient to be in use, though.</p>
<div class="refsect3">
<a name="gwy-gradient-sample.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -370,7 +370,7 @@ points this method uses supersampling and thus it gives a bit better
looking gradient presentation.</p>
<div class="refsect3">
<a name="gwy-gradient-sample-to-pixbuf.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -399,7 +399,7 @@ gwy_gradient_get_npoints (<em class="parameter"><code><a class="link" href="GwyG
<p>Returns the number of points in a color gradient.</p>
<div class="refsect3">
<a name="gwy-gradient-get-npoints.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -427,7 +427,7 @@ gwy_gradient_get_point (<em class="parameter"><code><a class="link" href="GwyGra
<p>Returns the point at given index of a color gradient.</p>
<div class="refsect3">
<a name="gwy-gradient-get-point.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -466,7 +466,7 @@ gwy_gradient_set_point (<em class="parameter"><code><a class="link" href="GwyGra
(or last) point from 0 (or 1).</p>
<div class="refsect3">
<a name="gwy-gradient-set-point.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -504,7 +504,7 @@ gwy_gradient_set_point_color (<em class="parameter"><code><a class="link" href="
<p>Sets the color of a color gradient point without moving it.</p>
<div class="refsect3">
<a name="gwy-gradient-set-point-color.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -543,7 +543,7 @@ gwy_gradient_insert_point (<em class="parameter"><code><a class="link" href="Gwy
move the first (or last) point from 0 (or 1).</p>
<div class="refsect3">
<a name="gwy-gradient-insert-point.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -580,7 +580,7 @@ gwy_gradient_insert_point_sorted (<em class="parameter"><code><a class="link" hr
<p>Inserts a point into a color gradient based on its x position.</p>
<div class="refsect3">
<a name="gwy-gradient-insert-point-sorted.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -620,7 +620,7 @@ with <em class="parameter"><code>x</code></em>
= 1 present.</p>
<div class="refsect3">
<a name="gwy-gradient-delete-point.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -650,7 +650,7 @@ gwy_gradient_reset (<em class="parameter"><code><a class="link" href="GwyGradien
<p>Resets a gradient to the default two-point gray scale state.</p>
<div class="refsect3">
<a name="gwy-gradient-reset.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -673,7 +673,7 @@ gwy_gradient_get_points (<em class="parameter"><code><a class="link" href="GwyGr
<p>Returns the complete set of color points of a gradient.</p>
<div class="refsect3">
<a name="gwy-gradient-get-points.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -713,7 +713,7 @@ gwy_gradient_set_points (<em class="parameter"><code><a class="link" href="GwyGr
last end at 1.0. There should be no redundant points.</p>
<div class="refsect3">
<a name="gwy-gradient-set-points.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -752,7 +752,7 @@ gwy_gradient_set_from_samples (<em class="parameter"><code><a class="link" href=
<p>The result is usually approximate.</p>
<div class="refsect3">
<a name="gwy-gradient-set-from-samples.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -804,7 +804,7 @@ gwy_gradients_get_gradient (<em class="parameter"><code>const <a href="/usr/shar
<p>Convenience function to get a gradient from <a class="link" href="GwyGradient.html#gwy-gradients" title="gwy_gradients ()"><code class="function">gwy_gradients()</code></a> by name.</p>
<div class="refsect3">
<a name="gwy-gradients-get-gradient.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -861,7 +861,7 @@ the default item in <a class="link" href="GwyGradient.html#gwy-gradients" title=
<p>Gradient color point struct.</p>
<div class="refsect3">
<a name="GwyGradientPoint.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="struct_members_name">
<col class="struct_members_description">
diff --git a/devel-docs/libgwydraw/html/GwySelection.html b/devel-docs/libgwydraw/html/GwySelection.html
index 4b349b8..b33d8ee 100644
--- a/devel-docs/libgwydraw/html/GwySelection.html
+++ b/devel-docs/libgwydraw/html/GwySelection.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GwySelection: Gwyddion Drawing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Drawing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Drawing Library Reference Manual">
<link rel="prev" href="libgwydraw-gwypixfield.html" title="gwypixfield">
@@ -37,7 +37,7 @@
</tr></table></div>
<div class="refsect1">
<a name="GwySelection.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -182,7 +182,7 @@
</div>
<div class="refsect1">
<a name="GwySelection.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
<colgroup>
<col width="150px" class="properties_type">
<col width="300px" class="properties_name">
@@ -204,7 +204,7 @@
</div>
<div class="refsect1">
<a name="GwySelection.signals"></a><h2>Signals</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
<colgroup>
<col width="150px" class="signals_return">
<col width="300px" class="signals_name">
@@ -226,7 +226,7 @@
</div>
<div class="refsect1">
<a name="GwySelection.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -290,7 +290,7 @@ is also used to determine the number of selected object.</p>
<p>Type of selection filtering function.</p>
<div class="refsect3">
<a name="GwySelectionFilterFunc.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -330,7 +330,7 @@ should be removed.</p>
typecasting.</p>
<div class="refsect3">
<a name="gwy-selection-duplicate.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -352,7 +352,7 @@ gwy_selection_get_object_size (<em class="parameter"><code><a class="link" href=
<p>Gets the number of coordinates that make up a one selection object.</p>
<div class="refsect3">
<a name="gwy-selection-get-object-size.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -378,7 +378,7 @@ gwy_selection_clear (<em class="parameter"><code><a class="link" href="GwySelect
<p>Clears a selection.</p>
<div class="refsect3">
<a name="gwy-selection-clear.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -402,7 +402,7 @@ gwy_selection_get_object (<em class="parameter"><code><a class="link" href="GwyS
<p>Gets one selection object.</p>
<div class="refsect3">
<a name="gwy-selection-get-object.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -450,7 +450,7 @@ then equal to either the number of selected objects or special value -1
meaning append to end.</p>
<div class="refsect3">
<a name="gwy-selection-set-object.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -493,7 +493,7 @@ gwy_selection_delete_object (<em class="parameter"><code><a class="link" href="G
objects is moved to close the gap.</p>
<div class="refsect3">
<a name="gwy-selection-delete-object.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -523,7 +523,7 @@ gwy_selection_get_data (<em class="parameter"><code><a class="link" href="GwySel
<p>Gets selection data.</p>
<div class="refsect3">
<a name="gwy-selection-get-data.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -563,7 +563,7 @@ gwy_selection_set_data (<em class="parameter"><code><a class="link" href="GwySel
<p>Sets selection data.</p>
<div class="refsect3">
<a name="gwy-selection-set-data.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -600,7 +600,7 @@ gwy_selection_get_max_objects (<em class="parameter"><code><a class="link" href=
<p>Gets the maximum number of selected objects.</p>
<div class="refsect3">
<a name="gwy-selection-get-max-objects.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -629,7 +629,7 @@ gwy_selection_set_max_objects (<em class="parameter"><code><a class="link" href=
"finished" signal.</p>
<div class="refsect3">
<a name="gwy-selection-set-max-objects.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -659,7 +659,7 @@ gwy_selection_is_full (<em class="parameter"><code><a class="link" href="GwySele
<p>Checks whether the maximum number of objects is selected.</p>
<div class="refsect3">
<a name="gwy-selection-is-full.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -694,7 +694,7 @@ the specific selection type. If the selection class does not implement this
method then all objects are removed.</p>
<div class="refsect3">
<a name="gwy-selection-crop.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -745,7 +745,7 @@ it is meaningful. For some, such as GwySelectionLattice, it is not
meaningful and moving GwySelectionLattice thus does not do anything.</p>
<div class="refsect3">
<a name="gwy-selection-move.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -782,7 +782,7 @@ gwy_selection_filter (<em class="parameter"><code><a class="link" href="GwySelec
<p>Removes selection objects matching certain criteria.</p>
<div class="refsect3">
<a name="gwy-selection-filter.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -820,7 +820,7 @@ gwy_selection_changed (<em class="parameter"><code><a class="link" href="GwySele
<p>Emits "changed" signal on a selection.</p>
<div class="refsect3">
<a name="gwy-selection-changed.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -850,7 +850,7 @@ gwy_selection_finished (<em class="parameter"><code><a class="link" href="GwySel
<p>Emits "finished" signal on a selection.</p>
<div class="refsect3">
<a name="gwy-selection-finished.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -875,7 +875,7 @@ of coordinates. It should not be accessed directly except selection
class implementation.</p>
<div class="refsect3">
<a name="GwySelection.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="struct_members_name">
<col class="struct_members_description">
@@ -922,7 +922,7 @@ class implementation.</p>
and need not be overriden.</p>
<div class="refsect3">
<a name="GwySelectionClass.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="struct_members_name">
<col class="struct_members_description">
@@ -1015,7 +1015,7 @@ user_function (<a class="link" href="GwySelection.html" title="GwySelection"><sp
<p>The ::changed signal is emitted whenever selection changes.</p>
<div class="refsect3">
<a name="GwySelection-changed.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1056,7 +1056,7 @@ user_function (<a class="link" href="GwySelection.html" title="GwySelection"><sp
a selection object. Selections never emit this signal themselves.</p>
<div class="refsect3">
<a name="GwySelection-finished.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwydraw/html/api-index-2-16.html b/devel-docs/libgwydraw/html/api-index-2-16.html
index 789fb4f..097292a 100644
--- a/devel-docs/libgwydraw/html/api-index-2-16.html
+++ b/devel-docs/libgwydraw/html/api-index-2-16.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.16: Gwyddion Drawing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Drawing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Drawing Library Reference Manual">
<link rel="prev" href="api-index-all.html" title="Index of all symbols">
diff --git a/devel-docs/libgwydraw/html/api-index-2-32.html b/devel-docs/libgwydraw/html/api-index-2-32.html
index f8a18ad..6482634 100644
--- a/devel-docs/libgwydraw/html/api-index-2-32.html
+++ b/devel-docs/libgwydraw/html/api-index-2-32.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.32: Gwyddion Drawing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Drawing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Drawing Library Reference Manual">
<link rel="prev" href="api-index-2-16.html" title="Index of new symbols in 2.16">
diff --git a/devel-docs/libgwydraw/html/api-index-2-39.html b/devel-docs/libgwydraw/html/api-index-2-39.html
index 564ca50..6bb1c7d 100644
--- a/devel-docs/libgwydraw/html/api-index-2-39.html
+++ b/devel-docs/libgwydraw/html/api-index-2-39.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.39: Gwyddion Drawing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Drawing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Drawing Library Reference Manual">
<link rel="prev" href="api-index-2-32.html" title="Index of new symbols in 2.32">
diff --git a/devel-docs/libgwydraw/html/api-index-2-43.html b/devel-docs/libgwydraw/html/api-index-2-43.html
index d86f46c..31438b9 100644
--- a/devel-docs/libgwydraw/html/api-index-2-43.html
+++ b/devel-docs/libgwydraw/html/api-index-2-43.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.43: Gwyddion Drawing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Drawing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Drawing Library Reference Manual">
<link rel="prev" href="api-index-2-39.html" title="Index of new symbols in 2.39">
diff --git a/devel-docs/libgwydraw/html/api-index-2-47.html b/devel-docs/libgwydraw/html/api-index-2-47.html
index 35106b2..dd0fbd2 100644
--- a/devel-docs/libgwydraw/html/api-index-2-47.html
+++ b/devel-docs/libgwydraw/html/api-index-2-47.html
@@ -3,10 +3,11 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.47: Gwyddion Drawing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Drawing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Drawing Library Reference Manual">
<link rel="prev" href="api-index-2-43.html" title="Index of new symbols in 2.43">
+<link rel="next" href="api-index-2-49.html" title="Index of new symbols in 2.49">
<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
@@ -16,7 +17,7 @@
<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
<td><img src="up-insensitive.png" width="16" height="16" border="0"></td>
<td><a accesskey="p" href="api-index-2-43.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><img src="right-insensitive.png" width="16" height="16" border="0"></td>
+<td><a accesskey="n" href="api-index-2-49.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
</tr></table>
<div class="index">
<div class="titlepage"><div><div><h1 class="title">
diff --git a/devel-docs/libgwydraw/html/api-index-2-49.html b/devel-docs/libgwydraw/html/api-index-2-49.html
new file mode 100644
index 0000000..fd4f064
--- /dev/null
+++ b/devel-docs/libgwydraw/html/api-index-2-49.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Index of new symbols in 2.49: Gwyddion Drawing Library Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
+<link rel="home" href="index.html" title="Gwyddion Drawing Library Reference Manual">
+<link rel="up" href="index.html" title="Gwyddion Drawing Library Reference Manual">
+<link rel="prev" href="api-index-2-47.html" title="Index of new symbols in 2.47">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts"><span id="nav_index"><a class="shortcut" href="#idxR">R</a></span></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><img src="up-insensitive.png" width="16" height="16" border="0"></td>
+<td><a accesskey="p" href="api-index-2-47.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><img src="right-insensitive.png" width="16" height="16" border="0"></td>
+</tr></table>
+<div class="index">
+<div class="titlepage"><div><div><h1 class="title">
+<a name="api-index-2-49"></a>Index of new symbols in 2.49</h1></div></div></div>
+<a name="idx"></a><a name="idxR"></a><h3 class="title">R</h3>
+<dt>
+<a class="link" href="libgwydraw-GwyRGBA.html#gwy-rgba-from-pixbuf-pixel" title="gwy_rgba_from_pixbuf_pixel ()">gwy_rgba_from_pixbuf_pixel</a>, function in <a class="link" href="libgwydraw-GwyRGBA.html" title="GwyRGBA">GwyRGBA</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libgwydraw-GwyRGBA.html#gwy-rgba-to-pixbuf-pixel" title="gwy_rgba_to_pixbuf_pixel ()">gwy_rgba_to_pixbuf_pixel</a>, function in <a class="link" href="libgwydraw-GwyRGBA.html" title="GwyRGBA">GwyRGBA</a>
+</dt>
+<dd></dd>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.19</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/devel-docs/libgwydraw/html/api-index-all.html b/devel-docs/libgwydraw/html/api-index-all.html
index c3062dc..f121b3a 100644
--- a/devel-docs/libgwydraw/html/api-index-all.html
+++ b/devel-docs/libgwydraw/html/api-index-all.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of all symbols: Gwyddion Drawing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Drawing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Drawing Library Reference Manual">
<link rel="prev" href="libgwydraw-gwydraw.html" title="gwydraw">
@@ -235,6 +235,10 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="libgwydraw-GwyRGBA.html#gwy-rgba-from-pixbuf-pixel" title="gwy_rgba_from_pixbuf_pixel ()">gwy_rgba_from_pixbuf_pixel</a>, function in <a class="link" href="libgwydraw-GwyRGBA.html" title="GwyRGBA">GwyRGBA</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="libgwydraw-GwyRGBA.html#gwy-rgba-get-from-container" title="gwy_rgba_get_from_container ()">gwy_rgba_get_from_container</a>, function in <a class="link" href="libgwydraw-GwyRGBA.html" title="GwyRGBA">GwyRGBA</a>
</dt>
<dd></dd>
@@ -278,6 +282,10 @@
<a class="link" href="libgwydraw-GwyRGBA.html#gwy-rgba-to-hex8" title="gwy_rgba_to_hex8 ()">gwy_rgba_to_hex8</a>, function in <a class="link" href="libgwydraw-GwyRGBA.html" title="GwyRGBA">GwyRGBA</a>
</dt>
<dd></dd>
+<dt>
+<a class="link" href="libgwydraw-GwyRGBA.html#gwy-rgba-to-pixbuf-pixel" title="gwy_rgba_to_pixbuf_pixel ()">gwy_rgba_to_pixbuf_pixel</a>, function in <a class="link" href="libgwydraw-GwyRGBA.html" title="GwyRGBA">GwyRGBA</a>
+</dt>
+<dd></dd>
<a name="idxS"></a><h3 class="title">S</h3>
<dt>
<a class="link" href="GwySelection.html#GwySelection-struct" title="struct GwySelection">GwySelection</a>, struct in <a class="link" href="GwySelection.html" title="GwySelection">GwySelection</a>
diff --git a/devel-docs/libgwydraw/html/index.html b/devel-docs/libgwydraw/html/index.html
index 4e8afd9..87514ae 100644
--- a/devel-docs/libgwydraw/html/index.html
+++ b/devel-docs/libgwydraw/html/index.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Gwyddion Drawing Library Reference Manual: Gwyddion Drawing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Drawing Library Reference Manual">
<link rel="next" href="libgwydraw-GwyRGBA.html" title="GwyRGBA">
<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
@@ -15,7 +15,7 @@
<div>
<div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">Gwyddion Drawing Library Reference Manual</p></th></tr></table></div>
<div><p class="releaseinfo">
- For Gwyddion 2.47.
+ For Gwyddion 2.49.
The latest version of this document can be found on-line at
<a class="ulink" href="http://gwyddion.net/documentation/libgwydraw/index.php" target="_top">http://gwyddion.net/documentation/libgwydraw/</a>.
</p></div>
@@ -50,6 +50,7 @@
<dt><span class="index"><a href="api-index-2-39.html">Index of new symbols in 2.39</a></span></dt>
<dt><span class="index"><a href="api-index-2-43.html">Index of new symbols in 2.43</a></span></dt>
<dt><span class="index"><a href="api-index-2-47.html">Index of new symbols in 2.47</a></span></dt>
+<dt><span class="index"><a href="api-index-2-49.html">Index of new symbols in 2.49</a></span></dt>
</dl></div>
<p>
This library contains low-level data visualization and color handling
diff --git a/devel-docs/libgwydraw/html/libgwydraw-GwyRGBA.html b/devel-docs/libgwydraw/html/libgwydraw-GwyRGBA.html
index 95e94be..6fd7a0e 100644
--- a/devel-docs/libgwydraw/html/libgwydraw-GwyRGBA.html
+++ b/devel-docs/libgwydraw/html/libgwydraw-GwyRGBA.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GwyRGBA: Gwyddion Drawing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Drawing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Drawing Library Reference Manual">
<link rel="prev" href="index.html" title="Gwyddion Drawing Library Reference Manual">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwydraw-GwyRGBA.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -159,6 +159,22 @@
<a class="link" href="libgwydraw-GwyRGBA.html#gwy-rgba-to-hex8" title="gwy_rgba_to_hex8 ()">gwy_rgba_to_hex8</a> <span class="c_punctuation">()</span>
</td>
</tr>
+<tr>
+<td class="function_type">
+<a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="libgwydraw-GwyRGBA.html#gwy-rgba-to-pixbuf-pixel" title="gwy_rgba_to_pixbuf_pixel ()">gwy_rgba_to_pixbuf_pixel</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="libgwydraw-GwyRGBA.html#gwy-rgba-from-pixbuf-pixel" title="gwy_rgba_from_pixbuf_pixel ()">gwy_rgba_from_pixbuf_pixel</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
</tbody>
</table></div>
</div>
@@ -190,7 +206,7 @@ gwy_rgba_new (<em class="parameter"><code><a href="http://developer.gnome.org/do
<p>This is mostly useful for language bindings.</p>
<div class="refsect3">
<a name="gwy-rgba-new.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -236,7 +252,7 @@ gwy_rgba_copy (<em class="parameter"><code>const <span class="type">GwyRGBA</spa
<a class="link" href="libgwydraw-GwyRGBA.html#gwy-rgba-free" title="gwy_rgba_free ()"><code class="function">gwy_rgba_free()</code></a>.</p>
<div class="refsect3">
<a name="gwy-rgba-copy.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -263,7 +279,7 @@ gwy_rgba_free (<em class="parameter"><code><span class="type">GwyRGBA</span> *rg
<p>Frees an rgba structure created with <a class="link" href="libgwydraw-GwyRGBA.html#gwy-rgba-copy" title="gwy_rgba_copy ()"><code class="function">gwy_rgba_copy()</code></a>.</p>
<div class="refsect3">
<a name="gwy-rgba-free.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -287,7 +303,7 @@ gwy_rgba_to_gdk_color (<em class="parameter"><code>const <span class="type">GwyR
<p>Note no allocation is performed, just channel value conversion.</p>
<div class="refsect3">
<a name="gwy-rgba-to-gdk-color.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -316,7 +332,7 @@ gwy_rgba_to_gdk_alpha (<em class="parameter"><code>const <span class="type">GwyR
<p>Converts a rgba to a Gdk opacity value.</p>
<div class="refsect3">
<a name="gwy-rgba-to-gdk-alpha.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -344,7 +360,7 @@ gwy_rgba_from_gdk_color (<em class="parameter"><code><span class="type">GwyRGBA<
<p>The alpha value is unchanged, as <a href="http://developer.gnome.org/doc/API/2.0/gtk/gdk3gdk3-Colors.html#GdkColor"><span class="type">GdkColor</span></a> has no opacity information.</p>
<div class="refsect3">
<a name="gwy-rgba-from-gdk-color.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -358,7 +374,7 @@ gwy_rgba_from_gdk_color (<em class="parameter"><code><span class="type">GwyRGBA<
</tr>
<tr>
<td class="parameter_name"><p>gdkcolor</p></td>
-<td class="parameter_description"><p>A <a href="http://developer.gnome.org/doc/API/2.0/gtk/gdk3gdk3-Colors.html#GdkColor"><span class="type">GdkColor</span></a>.</p></td>
+<td class="parameter_description"><p>A <a href="/usr/share/gtk-doc/html/gdk3gdk3-Colors.html#GdkColor"><span class="type">GdkColor</span></a>.</p></td>
<td class="parameter_annotations"> </td>
</tr>
</tbody>
@@ -375,7 +391,7 @@ gwy_rgba_from_gdk_color_and_alpha (<em class="parameter"><code><span class="type
<p>Converts a Gdk color plus an opacity value to a rgba.</p>
<div class="refsect3">
<a name="gwy-rgba-from-gdk-color-and-alpha.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -414,7 +430,7 @@ gwy_rgba_interpolate (<em class="parameter"><code>const <span class="type">GwyRG
this function, not simple independent interpolation of r, g, b, and a.</p>
<div class="refsect3">
<a name="gwy-rgba-interpolate.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -440,7 +456,7 @@ this function, not simple independent interpolation of r, g, b, and a.</p>
</tr>
<tr>
<td class="parameter_name"><p>rgba</p></td>
-<td class="parameter_description"><p>A <span class="type">GwyRGBA</span> to store result to.</p></td>
+<td class="parameter_description"><p>A <span class="type">GwyRGBA</span> to store the result to.</p></td>
<td class="parameter_annotations"> </td>
</tr>
</tbody>
@@ -459,7 +475,7 @@ gwy_rgba_get_from_container (<em class="parameter"><code><span class="type">GwyR
arrangement.</p>
<div class="refsect3">
<a name="gwy-rgba-get-from-container.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -504,7 +520,7 @@ gwy_rgba_store_to_container (<em class="parameter"><code>const <span class="type
arrangement.</p>
<div class="refsect3">
<a name="gwy-rgba-store-to-container.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -543,7 +559,7 @@ gwy_rgba_remove_from_container (<em class="parameter"><code><a href="../GwyConta
arrangement.</p>
<div class="refsect3">
<a name="gwy-rgba-remove-from-container.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -581,7 +597,7 @@ gwy_rgba_set_gdk_gc_fg (<em class="parameter"><code>const <span class="type">Gwy
documentation for details and caveats.</p>
<div class="refsect3">
<a name="gwy-rgba-set-gdk-gc-fg.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -613,7 +629,7 @@ gwy_rgba_set_gdk_gc_bg (<em class="parameter"><code>const <span class="type">Gwy
documentation for details and caveats.</p>
<div class="refsect3">
<a name="gwy-rgba-set-gdk-gc-bg.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -645,7 +661,7 @@ gwy_rgba_to_hex6 (<em class="parameter"><code>const <span class="type">GwyRGBA</
and does not include any "#" prefix which is used in some contexts.</p>
<div class="refsect3">
<a name="gwy-rgba-to-hex6.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -680,7 +696,7 @@ common it is by no means universal. The output has always exactly 8 bytes
and does not include any "#" prefix which is used in some contexts.</p>
<div class="refsect3">
<a name="gwy-rgba-to-hex8.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -703,6 +719,72 @@ representation (e.g. "ffff0000" for opaque red) will be stored.</p></td>
</div>
<p class="since">Since: <a class="link" href="api-index-2-32.html#api-index-2.32">2.32</a></p>
</div>
+<hr>
+<div class="refsect2">
+<a name="gwy-rgba-to-pixbuf-pixel"></a><h3>gwy_rgba_to_pixbuf_pixel ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint32"><span class="returnvalue">guint32</span></a>
+gwy_rgba_to_pixbuf_pixel (<em class="parameter"><code>const <span class="type">GwyRGBA</span> *rgba</code></em>);</pre>
+<p>Converts a RGBA color to pixbuf pixel.</p>
+<p>The returned pixel value includes opacity. If <em class="parameter"><code>rgba</code></em>
+ is partially
+transparent, so is the pixel.</p>
+<div class="refsect3">
+<a name="gwy-rgba-to-pixbuf-pixel.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>rgba</p></td>
+<td class="parameter_description"><p>A RGBA color.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gwy-rgba-to-pixbuf-pixel.returns"></a><h4>Returns</h4>
+<p> The pixel value as a 32-bit integer.</p>
+</div>
+<p class="since">Since: <a class="link" href="api-index-2-49.html#api-index-2.49">2.49</a></p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gwy-rgba-from-pixbuf-pixel"></a><h3>gwy_rgba_from_pixbuf_pixel ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gwy_rgba_from_pixbuf_pixel (<em class="parameter"><code><span class="type">GwyRGBA</span> *rgba</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint32"><span class="type">guint32</span></a> pixel</code></em>);</pre>
+<p>Converts a pixbuf pixel value to a RGBA color.</p>
+<p>The conversion includes opacity. If the opacity channel is undefined or
+should be ignored, you need to either set the lowest byte of <em class="parameter"><code>pixel</code></em>
+ to 0xff
+or fix <em class="parameter"><code>rgba</code></em>
+ afterwards.</p>
+<div class="refsect3">
+<a name="gwy-rgba-from-pixbuf-pixel.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>rgba</p></td>
+<td class="parameter_description"><p>A <span class="type">GwyRGBA</span> to store the result to.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>pixel</p></td>
+<td class="parameter_description"><p>Pixbuf pixel value as a 32-bit integer.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: <a class="link" href="api-index-2-49.html#api-index-2.49">2.49</a></p>
+</div>
</div>
<div class="refsect1">
<a name="libgwydraw-GwyRGBA.other_details"></a><h2>Types and Values</h2>
diff --git a/devel-docs/libgwydraw/html/libgwydraw-gwydraw.html b/devel-docs/libgwydraw/html/libgwydraw-gwydraw.html
index acdf527..a5e8e71 100644
--- a/devel-docs/libgwydraw/html/libgwydraw-gwydraw.html
+++ b/devel-docs/libgwydraw/html/libgwydraw-gwydraw.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>gwydraw: Gwyddion Drawing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Drawing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Drawing Library Reference Manual">
<link rel="prev" href="libgwydraw-gwydrawenums.html" title="gwydrawenums">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwydraw-gwydraw.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
diff --git a/devel-docs/libgwydraw/html/libgwydraw-gwydrawenums.html b/devel-docs/libgwydraw/html/libgwydraw-gwydrawenums.html
index 121f722..6320590 100644
--- a/devel-docs/libgwydraw/html/libgwydraw-gwydrawenums.html
+++ b/devel-docs/libgwydraw/html/libgwydraw-gwydrawenums.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>gwydrawenums: Gwyddion Drawing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Drawing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Drawing Library Reference Manual">
<link rel="prev" href="GwySelection.html" title="GwySelection">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwydraw-gwydrawenums.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -64,7 +64,7 @@
<p>The pixmap image target is rarely used now.</p>
<div class="refsect3">
<a name="GwyRenderingTarget.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
diff --git a/devel-docs/libgwydraw/html/libgwydraw-gwypixfield.html b/devel-docs/libgwydraw/html/libgwydraw-gwypixfield.html
index aa35b09..2e837c8 100644
--- a/devel-docs/libgwydraw/html/libgwydraw-gwypixfield.html
+++ b/devel-docs/libgwydraw/html/libgwydraw-gwypixfield.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>gwypixfield: Gwyddion Drawing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Drawing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Drawing Library Reference Manual">
<link rel="prev" href="GwyGLMaterial.html" title="GwyGLMaterial">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwydraw-gwypixfield.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -113,7 +113,7 @@ end, values between are mapped linearly to <em class="parameter"><code>gradient<
.</p>
<div class="refsect3">
<a name="gwy-pixbuf-draw-data-field.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -158,7 +158,7 @@ and all greater values to its end, values between are mapped linearly to
.</p>
<div class="refsect3">
<a name="gwy-pixbuf-draw-data-field-with-range.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -207,7 +207,7 @@ nonlinear, deformed using inverse function to height density cummulative
distribution.</p>
<div class="refsect3">
<a name="gwy-pixbuf-draw-data-field-adaptive.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -247,7 +247,7 @@ gwy_draw_data_field_map_adaptive (<em class="parameter"><code><a href="../GwyDat
correspond to specific values.</p>
<div class="refsect3">
<a name="gwy-draw-data-field-map-adaptive.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -297,7 +297,7 @@ greater or equal to 1.0 as fully opaque, values between are linearly
mapped to pixel opacity.</p>
<div class="refsect3">
<a name="gwy-pixbuf-draw-data-field-as-mask.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwydraw/html/libgwydraw.devhelp2 b/devel-docs/libgwydraw/html/libgwydraw.devhelp2
index e65ab16..3e0dfe2 100644
--- a/devel-docs/libgwydraw/html/libgwydraw.devhelp2
+++ b/devel-docs/libgwydraw/html/libgwydraw.devhelp2
@@ -14,6 +14,7 @@
<sub name="Index of new symbols in 2.39" link="api-index-2-39.html"/>
<sub name="Index of new symbols in 2.43" link="api-index-2-43.html"/>
<sub name="Index of new symbols in 2.47" link="api-index-2-47.html"/>
+ <sub name="Index of new symbols in 2.49" link="api-index-2-49.html"/>
</chapters>
<functions>
<keyword type="function" name="gwy_rgba_new ()" link="libgwydraw-GwyRGBA.html#gwy-rgba-new" since="2.47"/>
@@ -31,6 +32,8 @@
<keyword type="function" name="gwy_rgba_set_gdk_gc_bg ()" link="libgwydraw-GwyRGBA.html#gwy-rgba-set-gdk-gc-bg"/>
<keyword type="function" name="gwy_rgba_to_hex6 ()" link="libgwydraw-GwyRGBA.html#gwy-rgba-to-hex6" since="2.32"/>
<keyword type="function" name="gwy_rgba_to_hex8 ()" link="libgwydraw-GwyRGBA.html#gwy-rgba-to-hex8" since="2.32"/>
+ <keyword type="function" name="gwy_rgba_to_pixbuf_pixel ()" link="libgwydraw-GwyRGBA.html#gwy-rgba-to-pixbuf-pixel" since="2.49"/>
+ <keyword type="function" name="gwy_rgba_from_pixbuf_pixel ()" link="libgwydraw-GwyRGBA.html#gwy-rgba-from-pixbuf-pixel" since="2.49"/>
<keyword type="function" name="gwy_gradient_get_color ()" link="GwyGradient.html#gwy-gradient-get-color"/>
<keyword type="function" name="gwy_gradient_get_samples ()" link="GwyGradient.html#gwy-gradient-get-samples"/>
<keyword type="function" name="gwy_gradient_sample ()" link="GwyGradient.html#gwy-gradient-sample"/>
diff --git a/devel-docs/libgwydraw/libgwydraw-docs.sgml b/devel-docs/libgwydraw/libgwydraw-docs.sgml
index 63432c4..1afb390 100644
--- a/devel-docs/libgwydraw/libgwydraw-docs.sgml
+++ b/devel-docs/libgwydraw/libgwydraw-docs.sgml
@@ -23,25 +23,29 @@
<title>Index of all symbols</title>
<xi:include href="xml/api-index-full.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-16" role="2.16">
+ <index id="api-index-2-16">
<title>Index of new symbols in 2.16</title>
<xi:include href="xml/api-index-2.16.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-32" role="2.32">
+ <index id="api-index-2-32">
<title>Index of new symbols in 2.32</title>
<xi:include href="xml/api-index-2.32.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-39" role="2.39">
+ <index id="api-index-2-39">
<title>Index of new symbols in 2.39</title>
<xi:include href="xml/api-index-2.39.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-43" role="2.43">
+ <index id="api-index-2-43">
<title>Index of new symbols in 2.43</title>
<xi:include href="xml/api-index-2.43.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-47" role="2.47">
+ <index id="api-index-2-47">
<title>Index of new symbols in 2.47</title>
<xi:include href="xml/api-index-2.47.xml"><xi:fallback /></xi:include>
</index>
+ <index id="api-index-2-49">
+ <title>Index of new symbols in 2.49</title>
+ <xi:include href="xml/api-index-2.49.xml"><xi:fallback /></xi:include>
+ </index>
<!-- API INDICES END -->
</book>
diff --git a/devel-docs/libgwymodule/Makefile.in b/devel-docs/libgwymodule/Makefile.in
index 1761514..e20da24 100644
--- a/devel-docs/libgwymodule/Makefile.in
+++ b/devel-docs/libgwymodule/Makefile.in
@@ -178,10 +178,7 @@ EPYDOC = @EPYDOC@
EXEEXT = @EXEEXT@
EXR_CFLAGS = @EXR_CFLAGS@
EXR_LIBS = @EXR_LIBS@
-FFTW3_1_CFLAGS = @FFTW3_1_CFLAGS@
-FFTW3_1_LIBS = @FFTW3_1_LIBS@
FFTW3_CFLAGS = @FFTW3_CFLAGS@
-FFTW3_DEPENDENCY = @FFTW3_DEPENDENCY@
FFTW3_LIBS = @FFTW3_LIBS@
FGREP = @FGREP@
GCONFTOOL = @GCONFTOOL@
@@ -191,6 +188,8 @@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
GLIBC21 = @GLIBC21@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GMODULE_CFLAGS = @GMODULE_CFLAGS@
GMODULE_LIBS = @GMODULE_LIBS@
GMSGFMT = @GMSGFMT@
@@ -215,7 +214,9 @@ GTK_MAC_LIBS = @GTK_MAC_LIBS@
GWY_VERSION_MAJOR = @GWY_VERSION_MAJOR@
GWY_VERSION_MINOR = @GWY_VERSION_MINOR@
GWY_VERSION_STRING = @GWY_VERSION_STRING@
+HDRIMAGE_EXTRA_CFLAGS = @HDRIMAGE_EXTRA_CFLAGS@
HTML_DIR = @HTML_DIR@
+INKSCAPE = @INKSCAPE@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -273,6 +274,7 @@ PASCAL = @PASCAL@
PATH_SEPARATOR = @PATH_SEPARATOR@
PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
+PNGCRUSH = @PNGCRUSH@
PNG_CFLAGS = @PNG_CFLAGS@
PNG_LIBS = @PNG_LIBS@
POD2MAN = @POD2MAN@
@@ -281,17 +283,13 @@ PYGTK_CFLAGS = @PYGTK_CFLAGS@
PYGTK_CODEGENDIR = @PYGTK_CODEGENDIR@
PYGTK_LIBS = @PYGTK_LIBS@
PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
PYTHON_EXTRA_CFLAGS = @PYTHON_EXTRA_CFLAGS@
PYTHON_INCLUDES = @PYTHON_INCLUDES@
-PYTHON_LIBS = @PYTHON_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
PYTHON_PLATFORM = @PYTHON_PLATFORM@
PYTHON_PREFIX = @PYTHON_PREFIX@
-PYTHON_SYSCFG_BASECFLAGS = @PYTHON_SYSCFG_BASECFLAGS@
-PYTHON_SYSCFG_CCSHARED = @PYTHON_SYSCFG_CCSHARED@
-PYTHON_SYSCFG_LDFLAGS = @PYTHON_SYSCFG_LDFLAGS@
-PYTHON_SYSCFG_LIBDIR = @PYTHON_SYSCFG_LIBDIR@
-PYTHON_SYSCFG_LINKFORSHARED = @PYTHON_SYSCFG_LINKFORSHARED@
PYTHON_VERSION = @PYTHON_VERSION@
RANLIB = @RANLIB@
RUBY = @RUBY@
diff --git a/devel-docs/libgwymodule/html/ModuleLibrary.html b/devel-docs/libgwymodule/html/ModuleLibrary.html
index dcc6c25..82e89f3 100644
--- a/devel-docs/libgwymodule/html/ModuleLibrary.html
+++ b/devel-docs/libgwymodule/html/ModuleLibrary.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Gwyddion Module Library: Gwyddion Module Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Module Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Module Library Reference Manual">
<link rel="prev" href="index.html" title="Gwyddion Module Library Reference Manual">
diff --git a/devel-docs/libgwymodule/html/ModuleTutorial.html b/devel-docs/libgwymodule/html/ModuleTutorial.html
index b9805e3..b944fd8 100644
--- a/devel-docs/libgwymodule/html/ModuleTutorial.html
+++ b/devel-docs/libgwymodule/html/ModuleTutorial.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Gwyddion Module Tutorial: Gwyddion Module Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Module Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Module Library Reference Manual">
<link rel="prev" href="libgwymodule-gwymodulebrowser.html" title="gwymodulebrowser">
diff --git a/devel-docs/libgwymodule/html/PluginProxyReference.html b/devel-docs/libgwymodule/html/PluginProxyReference.html
index baf2caa..de23690 100644
--- a/devel-docs/libgwymodule/html/PluginProxyReference.html
+++ b/devel-docs/libgwymodule/html/PluginProxyReference.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Plug-in Proxy Reference: Gwyddion Module Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Module Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Module Library Reference Manual">
<link rel="prev" href="gwymodule-tutorial-install.html" title="Gwyddion Module Installation">
diff --git a/devel-docs/libgwymodule/html/api-index-2-1.html b/devel-docs/libgwymodule/html/api-index-2-1.html
index ac9a635..b9d1c75 100644
--- a/devel-docs/libgwymodule/html/api-index-2-1.html
+++ b/devel-docs/libgwymodule/html/api-index-2-1.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.1: Gwyddion Module Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Module Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Module Library Reference Manual">
<link rel="prev" href="api-index-deprec.html" title="Index of deprecated symbols">
diff --git a/devel-docs/libgwymodule/html/api-index-2-18.html b/devel-docs/libgwymodule/html/api-index-2-18.html
index 4e3b67a..462286e 100644
--- a/devel-docs/libgwymodule/html/api-index-2-18.html
+++ b/devel-docs/libgwymodule/html/api-index-2-18.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.18: Gwyddion Module Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Module Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Module Library Reference Manual">
<link rel="prev" href="api-index-2-1.html" title="Index of new symbols in 2.1">
diff --git a/devel-docs/libgwymodule/html/api-index-2-25.html b/devel-docs/libgwymodule/html/api-index-2-25.html
index 7caec57..bf33261 100644
--- a/devel-docs/libgwymodule/html/api-index-2-25.html
+++ b/devel-docs/libgwymodule/html/api-index-2-25.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.25: Gwyddion Module Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Module Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Module Library Reference Manual">
<link rel="prev" href="api-index-2-18.html" title="Index of new symbols in 2.18">
diff --git a/devel-docs/libgwymodule/html/api-index-2-32.html b/devel-docs/libgwymodule/html/api-index-2-32.html
index 1818035..40e65d5 100644
--- a/devel-docs/libgwymodule/html/api-index-2-32.html
+++ b/devel-docs/libgwymodule/html/api-index-2-32.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.32: Gwyddion Module Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Module Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Module Library Reference Manual">
<link rel="prev" href="api-index-2-25.html" title="Index of new symbols in 2.25">
diff --git a/devel-docs/libgwymodule/html/api-index-2-36.html b/devel-docs/libgwymodule/html/api-index-2-36.html
index c53636c..f49ce9d 100644
--- a/devel-docs/libgwymodule/html/api-index-2-36.html
+++ b/devel-docs/libgwymodule/html/api-index-2-36.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.36: Gwyddion Module Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Module Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Module Library Reference Manual">
<link rel="prev" href="api-index-2-32.html" title="Index of new symbols in 2.32">
diff --git a/devel-docs/libgwymodule/html/api-index-2-38.html b/devel-docs/libgwymodule/html/api-index-2-38.html
index fe4539c..d7d76f5 100644
--- a/devel-docs/libgwymodule/html/api-index-2-38.html
+++ b/devel-docs/libgwymodule/html/api-index-2-38.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.38: Gwyddion Module Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Module Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Module Library Reference Manual">
<link rel="prev" href="api-index-2-36.html" title="Index of new symbols in 2.36">
diff --git a/devel-docs/libgwymodule/html/api-index-2-45.html b/devel-docs/libgwymodule/html/api-index-2-45.html
index 399d71a..85ffa4d 100644
--- a/devel-docs/libgwymodule/html/api-index-2-45.html
+++ b/devel-docs/libgwymodule/html/api-index-2-45.html
@@ -3,10 +3,11 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.45: Gwyddion Module Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Module Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Module Library Reference Manual">
<link rel="prev" href="api-index-2-38.html" title="Index of new symbols in 2.38">
+<link rel="next" href="api-index-2-48.html" title="Index of new symbols in 2.48">
<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
@@ -16,7 +17,7 @@
<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
<td><img src="up-insensitive.png" width="16" height="16" border="0"></td>
<td><a accesskey="p" href="api-index-2-38.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><img src="right-insensitive.png" width="16" height="16" border="0"></td>
+<td><a accesskey="n" href="api-index-2-48.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
</tr></table>
<div class="index">
<div class="titlepage"><div><div><h1 class="title">
diff --git a/devel-docs/libgwymodule/html/api-index-2-48.html b/devel-docs/libgwymodule/html/api-index-2-48.html
new file mode 100644
index 0000000..3aa58d5
--- /dev/null
+++ b/devel-docs/libgwymodule/html/api-index-2-48.html
@@ -0,0 +1,42 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Index of new symbols in 2.48: Gwyddion Module Library Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
+<link rel="home" href="index.html" title="Gwyddion Module Library Reference Manual">
+<link rel="up" href="index.html" title="Gwyddion Module Library Reference Manual">
+<link rel="prev" href="api-index-2-45.html" title="Index of new symbols in 2.45">
+<link rel="next" href="api-index-2-49.html" title="Index of new symbols in 2.49">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts"><span id="nav_index"><a class="shortcut" href="#idxM">M</a></span></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><img src="up-insensitive.png" width="16" height="16" border="0"></td>
+<td><a accesskey="p" href="api-index-2-45.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="api-index-2-49.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="index">
+<div class="titlepage"><div><div><h1 class="title">
+<a name="api-index-2-48"></a>Index of new symbols in 2.48</h1></div></div></div>
+<a name="idx"></a><a name="idxM"></a><h3 class="title">M</h3>
+<dt>
+<a class="link" href="libgwymodule-gwymoduleloader.html#gwy-module-disable-registration" title="gwy_module_disable_registration ()">gwy_module_disable_registration</a>, function in <a class="link" href="libgwymodule-gwymoduleloader.html" title="gwymoduleloader">gwymoduleloader</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libgwymodule-gwymoduleloader.html#gwy-module-enable-registration" title="gwy_module_enable_registration ()">gwy_module_enable_registration</a>, function in <a class="link" href="libgwymodule-gwymoduleloader.html" title="gwymoduleloader">gwymoduleloader</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libgwymodule-gwymoduleloader.html#gwy-module-is-enabled" title="gwy_module_is_enabled ()">gwy_module_is_enabled</a>, function in <a class="link" href="libgwymodule-gwymoduleloader.html" title="gwymoduleloader">gwymoduleloader</a>
+</dt>
+<dd></dd>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.19</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/devel-docs/libgwymodule/html/api-index-2-49.html b/devel-docs/libgwymodule/html/api-index-2-49.html
new file mode 100644
index 0000000..cec9e9f
--- /dev/null
+++ b/devel-docs/libgwymodule/html/api-index-2-49.html
@@ -0,0 +1,53 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Index of new symbols in 2.49: Gwyddion Module Library Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
+<link rel="home" href="index.html" title="Gwyddion Module Library Reference Manual">
+<link rel="up" href="index.html" title="Gwyddion Module Library Reference Manual">
+<link rel="prev" href="api-index-2-48.html" title="Index of new symbols in 2.48">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts"><span id="nav_index"><a class="shortcut" href="#idxM">M</a></span></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><img src="up-insensitive.png" width="16" height="16" border="0"></td>
+<td><a accesskey="p" href="api-index-2-48.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><img src="right-insensitive.png" width="16" height="16" border="0"></td>
+</tr></table>
+<div class="index">
+<div class="titlepage"><div><div><h1 class="title">
+<a name="api-index-2-49"></a>Index of new symbols in 2.49</h1></div></div></div>
+<a name="idx"></a><a name="idxM"></a><h3 class="title">M</h3>
+<dt>
+<a class="link" href="libgwymodule-gwymoduleloader.html#GwyModuleBundleRegisterFunc" title="GwyModuleBundleRegisterFunc ()">GwyModuleBundleRegisterFunc</a>, user_function in <a class="link" href="libgwymodule-gwymoduleloader.html" title="gwymoduleloader">gwymoduleloader</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libgwymodule-gwymoduleloader.html#GwyModuleFailureInfo" title="GwyModuleFailureInfo">GwyModuleFailureInfo</a>, struct in <a class="link" href="libgwymodule-gwymoduleloader.html" title="gwymoduleloader">gwymoduleloader</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libgwymodule-gwymoduleloader.html#GwyModuleRecord" title="struct GwyModuleRecord">GwyModuleRecord</a>, struct in <a class="link" href="libgwymodule-gwymoduleloader.html" title="gwymoduleloader">gwymoduleloader</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libgwymodule-gwymoduleloader.html#GWY-MODULE-BUNDLE-FLAG:CAPS" title="GWY_MODULE_BUNDLE_FLAG">GWY_MODULE_BUNDLE_FLAG</a>, macro in <a class="link" href="libgwymodule-gwymoduleloader.html" title="gwymoduleloader">gwymoduleloader</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libgwymodule-gwymoduleloader.html#gwy-module-failure-foreach" title="gwy_module_failure_foreach ()">gwy_module_failure_foreach</a>, function in <a class="link" href="libgwymodule-gwymoduleloader.html" title="gwymoduleloader">gwymoduleloader</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libgwymodule-gwymoduleloader.html#GWY-MODULE-QUERY2:CAPS" title="GWY_MODULE_QUERY2()">GWY_MODULE_QUERY2</a>, macro in <a class="link" href="libgwymodule-gwymoduleloader.html" title="gwymoduleloader">gwymoduleloader</a>
+</dt>
+<dd></dd>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.19</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/devel-docs/libgwymodule/html/api-index-all.html b/devel-docs/libgwymodule/html/api-index-all.html
index c38bae5..3a4bd2a 100644
--- a/devel-docs/libgwymodule/html/api-index-all.html
+++ b/devel-docs/libgwymodule/html/api-index-all.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of all symbols: Gwyddion Module Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Module Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Module Library Reference Manual">
<link rel="prev" href="plugin-proxy-rgi.html" title="RGI Registration Method">
@@ -195,10 +195,18 @@
<dd></dd>
<a name="idxM"></a><h3 class="title">M</h3>
<dt>
+<a class="link" href="libgwymodule-gwymoduleloader.html#GwyModuleBundleRegisterFunc" title="GwyModuleBundleRegisterFunc ()">GwyModuleBundleRegisterFunc</a>, user_function in <a class="link" href="libgwymodule-gwymoduleloader.html" title="gwymoduleloader">gwymoduleloader</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="libgwymodule-gwymoduleloader.html#GwyModuleError" title="enum GwyModuleError">GwyModuleError</a>, enum in <a class="link" href="libgwymodule-gwymoduleloader.html" title="gwymoduleloader">gwymoduleloader</a>
</dt>
<dd></dd>
<dt>
+<a class="link" href="libgwymodule-gwymoduleloader.html#GwyModuleFailureInfo" title="GwyModuleFailureInfo">GwyModuleFailureInfo</a>, struct in <a class="link" href="libgwymodule-gwymoduleloader.html" title="gwymoduleloader">gwymoduleloader</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="libgwymodule-gwymodule-file.html#GwyModuleFileError" title="enum GwyModuleFileError">GwyModuleFileError</a>, enum in <a class="link" href="libgwymodule-gwymodule-file.html" title="gwymodule-file">gwymodule-file</a>
</dt>
<dd></dd>
@@ -211,6 +219,10 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="libgwymodule-gwymoduleloader.html#GwyModuleRecord" title="struct GwyModuleRecord">GwyModuleRecord</a>, struct in <a class="link" href="libgwymodule-gwymoduleloader.html" title="gwymoduleloader">gwymoduleloader</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="libgwymodule-gwymoduleloader.html#GwyModuleRegisterFunc" title="GwyModuleRegisterFunc ()">GwyModuleRegisterFunc</a>, user_function in <a class="link" href="libgwymodule-gwymoduleloader.html" title="gwymoduleloader">gwymoduleloader</a>
</dt>
<dd></dd>
@@ -223,10 +235,30 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="libgwymodule-gwymoduleloader.html#GWY-MODULE-BUNDLE-FLAG:CAPS" title="GWY_MODULE_BUNDLE_FLAG">GWY_MODULE_BUNDLE_FLAG</a>, macro in <a class="link" href="libgwymodule-gwymoduleloader.html" title="gwymoduleloader">gwymoduleloader</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libgwymodule-gwymoduleloader.html#gwy-module-disable-registration" title="gwy_module_disable_registration ()">gwy_module_disable_registration</a>, function in <a class="link" href="libgwymodule-gwymoduleloader.html" title="gwymoduleloader">gwymoduleloader</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libgwymodule-gwymoduleloader.html#gwy-module-enable-registration" title="gwy_module_enable_registration ()">gwy_module_enable_registration</a>, function in <a class="link" href="libgwymodule-gwymoduleloader.html" title="gwymoduleloader">gwymoduleloader</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libgwymodule-gwymoduleloader.html#GWY-MODULE-ERROR:CAPS" title="GWY_MODULE_ERROR">GWY_MODULE_ERROR</a>, macro in <a class="link" href="libgwymodule-gwymoduleloader.html" title="gwymoduleloader">gwymoduleloader</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="libgwymodule-gwymoduleloader.html#gwy-module-error-quark" title="gwy_module_error_quark ()">gwy_module_error_quark</a>, function in <a class="link" href="libgwymodule-gwymoduleloader.html" title="gwymoduleloader">gwymoduleloader</a>
</dt>
<dd></dd>
<dt>
+<a class="link" href="libgwymodule-gwymoduleloader.html#gwy-module-failure-foreach" title="gwy_module_failure_foreach ()">gwy_module_failure_foreach</a>, function in <a class="link" href="libgwymodule-gwymoduleloader.html" title="gwymoduleloader">gwymoduleloader</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="libgwymodule-gwymodule-file.html#GWY-MODULE-FILE-ERROR:CAPS" title="GWY_MODULE_FILE_ERROR">GWY_MODULE_FILE_ERROR</a>, macro in <a class="link" href="libgwymodule-gwymodule-file.html" title="gwymodule-file">gwymodule-file</a>
</dt>
<dd></dd>
@@ -247,6 +279,10 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="libgwymodule-gwymoduleloader.html#gwy-module-is-enabled" title="gwy_module_is_enabled ()">gwy_module_is_enabled</a>, function in <a class="link" href="libgwymodule-gwymoduleloader.html" title="gwymoduleloader">gwymoduleloader</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="libgwymodule-gwymoduleloader.html#gwy-module-lookup" title="gwy_module_lookup ()">gwy_module_lookup</a>, function in <a class="link" href="libgwymodule-gwymoduleloader.html" title="gwymoduleloader">gwymoduleloader</a>
</dt>
<dd></dd>
@@ -255,6 +291,10 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="libgwymodule-gwymoduleloader.html#GWY-MODULE-QUERY2:CAPS" title="GWY_MODULE_QUERY2()">GWY_MODULE_QUERY2</a>, macro in <a class="link" href="libgwymodule-gwymoduleloader.html" title="gwymoduleloader">gwymoduleloader</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="libgwymodule-gwymoduleloader.html#gwy-module-register-module" title="gwy_module_register_module ()">gwy_module_register_module</a>, function in <a class="link" href="libgwymodule-gwymoduleloader.html" title="gwymoduleloader">gwymoduleloader</a>
</dt>
<dd></dd>
diff --git a/devel-docs/libgwymodule/html/api-index-deprec.html b/devel-docs/libgwymodule/html/api-index-deprec.html
index e903d75..151d840 100644
--- a/devel-docs/libgwymodule/html/api-index-deprec.html
+++ b/devel-docs/libgwymodule/html/api-index-deprec.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of deprecated symbols: Gwyddion Module Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Module Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Module Library Reference Manual">
<link rel="prev" href="api-index-all.html" title="Index of all symbols">
diff --git a/devel-docs/libgwymodule/html/gwymodule-tutorial-beyond.html b/devel-docs/libgwymodule/html/gwymodule-tutorial-beyond.html
index 0ef625f..22cbc79 100644
--- a/devel-docs/libgwymodule/html/gwymodule-tutorial-beyond.html
+++ b/devel-docs/libgwymodule/html/gwymodule-tutorial-beyond.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Beyond the Minimal Module: Gwyddion Module Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Module Library Reference Manual">
<link rel="up" href="ModuleTutorial.html" title="Gwyddion Module Tutorial">
<link rel="prev" href="gwymodule-tutorial-minimal.html" title="Minimal Module">
@@ -382,8 +382,8 @@
</ul></div>
<p>
There is an extensive
- <a class="ulink" href="http://gtk.org/tutorial/" target="_top">Gtk+ Tutorial</a>
- and <a class="ulink" href="http://gtk.org/api/" target="_top">API Reference</a> available
+ <a class="ulink" href="https://developer.gnome.org/gtk-tutorial/stable/" target="_top">Gtk+ Tutorial</a>
+ and <a class="ulink" href="https://developer.gnome.org/gtk2/stable/" target="_top">API Reference</a> available
on the Gtk+ Web site. You can use existing modules as templates
for your module.
</p>
diff --git a/devel-docs/libgwymodule/html/gwymodule-tutorial-file.html b/devel-docs/libgwymodule/html/gwymodule-tutorial-file.html
index 3383fea..7428434 100644
--- a/devel-docs/libgwymodule/html/gwymodule-tutorial-file.html
+++ b/devel-docs/libgwymodule/html/gwymodule-tutorial-file.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>File Modules: Gwyddion Module Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Module Library Reference Manual">
<link rel="up" href="ModuleTutorial.html" title="Gwyddion Module Tutorial">
<link rel="prev" href="gwymodule-tutorial-process.html" title="Data Processing Modules">
@@ -45,7 +45,7 @@
The sample file format our module will load looks as follows, all
values are stored in little-endian:
</p>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
<colgroup>
<col>
<col>
diff --git a/devel-docs/libgwymodule/html/gwymodule-tutorial-graph.html b/devel-docs/libgwymodule/html/gwymodule-tutorial-graph.html
index ba67a99..fb7021f 100644
--- a/devel-docs/libgwymodule/html/gwymodule-tutorial-graph.html
+++ b/devel-docs/libgwymodule/html/gwymodule-tutorial-graph.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Graph Modules: Gwyddion Module Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Module Library Reference Manual">
<link rel="up" href="ModuleTutorial.html" title="Gwyddion Module Tutorial">
<link rel="prev" href="gwymodule-tutorial-file.html" title="File Modules">
diff --git a/devel-docs/libgwymodule/html/gwymodule-tutorial-install.html b/devel-docs/libgwymodule/html/gwymodule-tutorial-install.html
index aca0955..860bcc9 100644
--- a/devel-docs/libgwymodule/html/gwymodule-tutorial-install.html
+++ b/devel-docs/libgwymodule/html/gwymodule-tutorial-install.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Gwyddion Module Installation: Gwyddion Module Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Module Library Reference Manual">
<link rel="up" href="ModuleTutorial.html" title="Gwyddion Module Tutorial">
<link rel="prev" href="gwymodule-tutorial-layer.html" title="Layer Modules">
@@ -34,7 +34,7 @@
<a name="id-1.3.10.3"></a><h2>Overview</h2>
<p>
To be written. Meanwhile you can look at the
- <a class="ulink" href="http://gwyddion.net/download.php#sample-module" target="_top">threshold-example</a>
+ <a class="ulink" href="http://gwyddion.net/apps/#sample-module" target="_top">threshold-example</a>
module how it copes with this issues.
</p>
<p>
diff --git a/devel-docs/libgwymodule/html/gwymodule-tutorial-layer.html b/devel-docs/libgwymodule/html/gwymodule-tutorial-layer.html
index c1168e0..62253bd 100644
--- a/devel-docs/libgwymodule/html/gwymodule-tutorial-layer.html
+++ b/devel-docs/libgwymodule/html/gwymodule-tutorial-layer.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Layer Modules: Gwyddion Module Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Module Library Reference Manual">
<link rel="up" href="ModuleTutorial.html" title="Gwyddion Module Tutorial">
<link rel="prev" href="gwymodule-tutorial-tool.html" title="Tool Modules">
diff --git a/devel-docs/libgwymodule/html/gwymodule-tutorial-minimal.html b/devel-docs/libgwymodule/html/gwymodule-tutorial-minimal.html
index ef85adb..bee74fc 100644
--- a/devel-docs/libgwymodule/html/gwymodule-tutorial-minimal.html
+++ b/devel-docs/libgwymodule/html/gwymodule-tutorial-minimal.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Minimal Module: Gwyddion Module Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Module Library Reference Manual">
<link rel="up" href="ModuleTutorial.html" title="Gwyddion Module Tutorial">
<link rel="prev" href="gwymodule-tutorial-overview.html" title="Gwyddion Module Overview">
diff --git a/devel-docs/libgwymodule/html/gwymodule-tutorial-overview.html b/devel-docs/libgwymodule/html/gwymodule-tutorial-overview.html
index 2b4523c..d3458b0 100644
--- a/devel-docs/libgwymodule/html/gwymodule-tutorial-overview.html
+++ b/devel-docs/libgwymodule/html/gwymodule-tutorial-overview.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Gwyddion Module Overview: Gwyddion Module Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Module Library Reference Manual">
<link rel="up" href="ModuleTutorial.html" title="Gwyddion Module Tutorial">
<link rel="prev" href="ModuleTutorial.html" title="Gwyddion Module Tutorial">
diff --git a/devel-docs/libgwymodule/html/gwymodule-tutorial-process.html b/devel-docs/libgwymodule/html/gwymodule-tutorial-process.html
index 6300116..9166b0e 100644
--- a/devel-docs/libgwymodule/html/gwymodule-tutorial-process.html
+++ b/devel-docs/libgwymodule/html/gwymodule-tutorial-process.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Data Processing Modules: Gwyddion Module Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Module Library Reference Manual">
<link rel="up" href="ModuleTutorial.html" title="Gwyddion Module Tutorial">
<link rel="prev" href="gwymodule-tutorial-beyond.html" title="Beyond the Minimal Module">
diff --git a/devel-docs/libgwymodule/html/gwymodule-tutorial-tool.html b/devel-docs/libgwymodule/html/gwymodule-tutorial-tool.html
index 07cb6a1..faf9e67 100644
--- a/devel-docs/libgwymodule/html/gwymodule-tutorial-tool.html
+++ b/devel-docs/libgwymodule/html/gwymodule-tutorial-tool.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Tool Modules: Gwyddion Module Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Module Library Reference Manual">
<link rel="up" href="ModuleTutorial.html" title="Gwyddion Module Tutorial">
<link rel="prev" href="gwymodule-tutorial-graph.html" title="Graph Modules">
diff --git a/devel-docs/libgwymodule/html/index.html b/devel-docs/libgwymodule/html/index.html
index e9dc811..6cdd550 100644
--- a/devel-docs/libgwymodule/html/index.html
+++ b/devel-docs/libgwymodule/html/index.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Gwyddion Module Library Reference Manual: Gwyddion Module Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Module Library Reference Manual">
<link rel="next" href="ModuleLibrary.html" title="Gwyddion Module Library">
<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
@@ -15,7 +15,7 @@
<div>
<div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">Gwyddion Module Library Reference Manual</p></th></tr></table></div>
<div><p class="releaseinfo">
- For Gwyddion 2.47.
+ For Gwyddion 2.49.
The latest version of this document can be found on-line at
<a class="ulink" href="http://gwyddion.net/documentation/libgwymodule/index.php" target="_top">http://gwyddion.net/documentation/libgwymodule/</a>.
</p></div>
@@ -143,6 +143,8 @@
<dt><span class="index"><a href="api-index-2-36.html">Index of new symbols in 2.36</a></span></dt>
<dt><span class="index"><a href="api-index-2-38.html">Index of new symbols in 2.38</a></span></dt>
<dt><span class="index"><a href="api-index-2-45.html">Index of new symbols in 2.45</a></span></dt>
+<dt><span class="index"><a href="api-index-2-48.html">Index of new symbols in 2.48</a></span></dt>
+<dt><span class="index"><a href="api-index-2-49.html">Index of new symbols in 2.49</a></span></dt>
</dl></div>
</div>
<div class="footer">
diff --git a/devel-docs/libgwymodule/html/libgwymodule-gwymodule-file.html b/devel-docs/libgwymodule/html/libgwymodule-gwymodule-file.html
index a6dbbf6..8c8cf91 100644
--- a/devel-docs/libgwymodule/html/libgwymodule-gwymodule-file.html
+++ b/devel-docs/libgwymodule/html/libgwymodule-gwymodule-file.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>gwymodule-file: Gwyddion Module Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Module Library Reference Manual">
<link rel="up" href="ModuleLibrary.html" title="Gwyddion Module Library">
<link rel="prev" href="libgwymodule-gwymoduleloader.html" title="gwymoduleloader">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwymodule-gwymodule-file.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -231,7 +231,7 @@
</div>
<div class="refsect1">
<a name="libgwymodule-gwymodule-file.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -284,7 +284,7 @@ operations: <a class="link" href="libgwymodule-gwymodule-file.html#GwyFileDetect
it should not try to access the file.</p>
<div class="refsect3">
<a name="GwyFileDetectFunc.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -328,7 +328,7 @@ description).</p>
<p>The type of file loading function.</p>
<div class="refsect3">
<a name="GwyFileLoadFunc.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -378,7 +378,7 @@ or <em class="parameter"><code>GWY_RUN_INTERACTIVE</code></em>
<p>The type of file saving function.</p>
<div class="refsect3">
<a name="GwyFileSaveFunc.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -443,7 +443,7 @@ vanish. If they are constructed (non-constant) strings, do not free them.
Should modules ever become unloadable they will get chance to clean-up.</p>
<div class="refsect3">
<a name="gwy-file-func-register.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -507,7 +507,7 @@ written) so its contents can't be used for file type detection.</p>
simply want to detect a file type.</p>
<div class="refsect3">
<a name="gwy-file-func-run-detect.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -554,7 +554,7 @@ gwy_file_func_run_load (<em class="parameter"><code>const <a href="/usr/share/gt
simply want to load a file.</p>
<div class="refsect3">
<a name="gwy-file-func-run-load.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -607,7 +607,7 @@ so the module function doesn't have to care about it.</p>
simply want to save a file.</p>
<div class="refsect3">
<a name="gwy-file-func-run-save.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -665,7 +665,7 @@ so the module function doesn't have to care about it.</p>
simply want to save a file.</p>
<div class="refsect3">
<a name="gwy-file-func-run-export.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -714,7 +714,7 @@ gwy_file_func_exists (<em class="parameter"><code>const <a href="/usr/share/gtk-
<p>Checks whether a file type function exists.</p>
<div class="refsect3">
<a name="gwy-file-func-exists.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -741,7 +741,7 @@ gwy_file_func_get_operations (<em class="parameter"><code>const <a href="/usr/sh
<p>Returns operations supported by a file type function.</p>
<div class="refsect3">
<a name="gwy-file-func-get-operations.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -770,7 +770,7 @@ gwy_file_func_get_description (<em class="parameter"><code>const <a href="/usr/s
argument of <a class="link" href="libgwymodule-gwymodule-file.html#gwy-file-func-register" title="gwy_file_func_register ()"><code class="function">gwy_file_func_register()</code></a> .</p>
<div class="refsect3">
<a name="gwy-file-func-get-description.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -797,7 +797,7 @@ gwy_file_func_foreach (<em class="parameter"><code><a href="/usr/share/gtk-doc/h
<p>Calls a function for each file function.</p>
<div class="refsect3">
<a name="gwy-file-func-foreach.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -848,7 +848,7 @@ gwy_file_detect (<em class="parameter"><code>const <a href="/usr/share/gtk-doc/h
<p>Detects the type of a file.</p>
<div class="refsect3">
<a name="gwy-file-detect.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -894,7 +894,7 @@ gwy_file_detect_with_score (<em class="parameter"><code>const <a href="/usr/shar
<p>Detects the type of a file and gives the score.</p>
<div class="refsect3">
<a name="gwy-file-detect-with-score.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -944,7 +944,7 @@ gwy_file_load (<em class="parameter"><code>const <a href="/usr/share/gtk-doc/htm
<p>Loads a data file, autodetecting its type.</p>
<div class="refsect3">
<a name="gwy-file-load.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -986,7 +986,7 @@ gwy_file_load_with_func (<em class="parameter"><code>const <a href="/usr/share/g
<p>Loads a data file, autodetecting its type.</p>
<div class="refsect3">
<a name="gwy-file-load-with-func.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1039,7 +1039,7 @@ gwy_file_save (<em class="parameter"><code><a href="../GwyContainer.html#GwyCont
it does not succeed, it falls back to <a class="link" href="libgwymodule-gwymoduleenums.html#GWY-FILE-OPERATION-EXPORT:CAPS"><code class="literal">GWY_FILE_OPERATION_EXPORT</code></a>.</p>
<div class="refsect3">
<a name="gwy-file-save.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1089,7 +1089,7 @@ gwy_file_save_with_func (<em class="parameter"><code><a href="../GwyContainer.ht
it does not succeed, it falls back to <a class="link" href="libgwymodule-gwymoduleenums.html#GWY-FILE-OPERATION-EXPORT:CAPS"><code class="literal">GWY_FILE_OPERATION_EXPORT</code></a>.</p>
<div class="refsect3">
<a name="gwy-file-save-with-func.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1149,7 +1149,7 @@ sense to let the user explicitly choose between these formats. Hence,
detectable formats normally are not explicitly offered.</p>
<div class="refsect3">
<a name="gwy-file-func-get-is-detectable.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1182,7 +1182,7 @@ detect the format. For instance, the fallback detection method of the
Gwyddion rawfile module.</p>
<div class="refsect3">
<a name="gwy-file-func-set-is-detectable.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1217,7 +1217,7 @@ gwy_file_get_data_info (<em class="parameter"><code><a href="../GwyContainer.htm
File export does not set it.</p>
<div class="refsect3">
<a name="gwy-file-get-data-info.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1266,7 +1266,7 @@ gwy_file_get_filename_sys (<em class="parameter"><code><a href="../GwyContainer.
File export does not set it.</p>
<div class="refsect3">
<a name="gwy-file-get-filename-sys.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1330,7 +1330,7 @@ high-level functions <a class="link" href="libgwymodule-gwymodule-file.html#gwy-
can return it only when they are called with a wrong function name.</p>
<div class="refsect3">
<a name="GwyModuleFileError.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
@@ -1430,7 +1430,7 @@ last byte of <em class="parameter"><code>head</code></em>
the file (or being a part of the file at all).</p>
<div class="refsect3">
<a name="GwyFileDetectInfo.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="struct_members_name">
<col class="struct_members_description">
diff --git a/devel-docs/libgwymodule/html/libgwymodule-gwymodule-graph.html b/devel-docs/libgwymodule/html/libgwymodule-gwymodule-graph.html
index 216529e..e4c6f61 100644
--- a/devel-docs/libgwymodule/html/libgwymodule-gwymodule-graph.html
+++ b/devel-docs/libgwymodule/html/libgwymodule-gwymodule-graph.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>gwymodule-graph: Gwyddion Module Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Module Library Reference Manual">
<link rel="up" href="ModuleLibrary.html" title="Gwyddion Module Library">
<link rel="prev" href="libgwymodule-gwymodule-tool.html" title="gwymodule-tool">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwymodule-gwymodule-graph.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -137,7 +137,7 @@
<p>The type of graph function.</p>
<div class="refsect3">
<a name="GwyGraphFunc.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -175,7 +175,7 @@ vanish. If they are constructed (non-constant) strings, do not free them.
Should modules ever become unloadable they will get chance to clean-up.</p>
<div class="refsect3">
<a name="gwy-graph-func-register.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -236,7 +236,7 @@ gwy_graph_func_run (<em class="parameter"><code>const <a href="/usr/share/gtk-do
.</p>
<div class="refsect3">
<a name="gwy-graph-func-run.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -265,7 +265,7 @@ gwy_graph_func_exists (<em class="parameter"><code>const <a href="/usr/share/gtk
<p>Checks whether a graph function exists.</p>
<div class="refsect3">
<a name="gwy-graph-func-exists.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -294,7 +294,7 @@ gwy_graph_func_get_menu_path (<em class="parameter"><code>const <a href="/usr/sh
i.e., without any leading "/Graph".</p>
<div class="refsect3">
<a name="gwy-graph-func-get-menu-path.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -320,7 +320,7 @@ gwy_graph_func_get_stock_id (<em class="parameter"><code>const <a href="/usr/sha
<p>Gets stock icon id of a graph function.</p>
<div class="refsect3">
<a name="gwy-graph-func-get-stock-id.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -346,7 +346,7 @@ gwy_graph_func_get_tooltip (<em class="parameter"><code>const <a href="/usr/shar
<p>Gets tooltip for a graph function.</p>
<div class="refsect3">
<a name="gwy-graph-func-get-tooltip.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -372,7 +372,7 @@ gwy_graph_func_get_sensitivity_mask (<em class="parameter"><code>const <a href="
<p>Gets menu sensititivy mask for a graph function.</p>
<div class="refsect3">
<a name="gwy-graph-func-get-sensitivity-mask.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -400,7 +400,7 @@ gwy_graph_func_foreach (<em class="parameter"><code><a href="/usr/share/gtk-doc/
<p>Calls a function for each graph function.</p>
<div class="refsect3">
<a name="gwy-graph-func-foreach.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwymodule/html/libgwymodule-gwymodule-layer.html b/devel-docs/libgwymodule/html/libgwymodule-gwymodule-layer.html
index 574cbf6..0216d42 100644
--- a/devel-docs/libgwymodule/html/libgwymodule-gwymodule-layer.html
+++ b/devel-docs/libgwymodule/html/libgwymodule-gwymodule-layer.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>gwymodule-layer: Gwyddion Module Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Module Library Reference Manual">
<link rel="up" href="ModuleLibrary.html" title="Gwyddion Module Library">
<link rel="prev" href="libgwymodule-gwymodule-graph.html" title="gwymodule-graph">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwymodule-gwymodule-layer.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -77,7 +77,7 @@ gwy_layer_func_register (<em class="parameter"><code><a href="http://developer.g
<p>Registeres a layer function (layer type).</p>
<div class="refsect3">
<a name="gwy-layer-func-register.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -105,7 +105,7 @@ gwy_layer_func_foreach (<em class="parameter"><code><a href="http://developer.gn
<p>Calls a function for each layer function.</p>
<div class="refsect3">
<a name="gwy-layer-func-foreach.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwymodule/html/libgwymodule-gwymodule-process.html b/devel-docs/libgwymodule/html/libgwymodule-gwymodule-process.html
index 57d4615..91b75d5 100644
--- a/devel-docs/libgwymodule/html/libgwymodule-gwymodule-process.html
+++ b/devel-docs/libgwymodule/html/libgwymodule-gwymodule-process.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>gwymodule-process: Gwyddion Module Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Module Library Reference Manual">
<link rel="up" href="ModuleLibrary.html" title="Gwyddion Module Library">
<link rel="prev" href="libgwymodule-gwymodule-file.html" title="gwymodule-file">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwymodule-gwymodule-process.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -148,7 +148,7 @@ and either modify it or create a new data from it.</p>
<p>The type of data processing function.</p>
<div class="refsect3">
<a name="GwyProcessFunc.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -192,7 +192,7 @@ vanish. If they are constructed (non-constant) strings, do not free them.
Should modules ever become unloadable they will get a chance to clean-up.</p>
<div class="refsect3">
<a name="gwy-process-func-register.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -261,7 +261,7 @@ gwy_process_func_run (<em class="parameter"><code>const <a href="/usr/share/gtk-
.</p>
<div class="refsect3">
<a name="gwy-process-func-run.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -295,7 +295,7 @@ gwy_process_func_exists (<em class="parameter"><code>const <a href="/usr/share/g
<p>Checks whether a data processing function exists.</p>
<div class="refsect3">
<a name="gwy-process-func-exists.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -322,7 +322,7 @@ gwy_process_func_get_run_types (<em class="parameter"><code>const <a href="/usr/
<p>Returns run modes supported by a data processing function.</p>
<div class="refsect3">
<a name="gwy-process-func-get-run-types.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -350,7 +350,7 @@ gwy_process_func_get_menu_path (<em class="parameter"><code>const <a href="/usr/
i.e., without any leading "/Data Process".</p>
<div class="refsect3">
<a name="gwy-process-func-get-menu-path.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -376,7 +376,7 @@ gwy_process_func_get_stock_id (<em class="parameter"><code>const <a href="/usr/s
<p>Gets stock icon id of a data processing function.</p>
<div class="refsect3">
<a name="gwy-process-func-get-stock-id.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -402,7 +402,7 @@ gwy_process_func_get_tooltip (<em class="parameter"><code>const <a href="/usr/sh
<p>Gets tooltip for a data processing function.</p>
<div class="refsect3">
<a name="gwy-process-func-get-tooltip.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -428,7 +428,7 @@ gwy_process_func_get_sensitivity_mask (<em class="parameter"><code>const <a href
<p>Gets menu sensititivy mask for a data processing function.</p>
<div class="refsect3">
<a name="gwy-process-func-get-sensitivity-mask.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -456,7 +456,7 @@ gwy_process_func_foreach (<em class="parameter"><code><a href="/usr/share/gtk-do
<p>Calls a function for each process function.</p>
<div class="refsect3">
<a name="gwy-process-func-foreach.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwymodule/html/libgwymodule-gwymodule-tool.html b/devel-docs/libgwymodule/html/libgwymodule-gwymodule-tool.html
index 4f84b95..b04bb6b 100644
--- a/devel-docs/libgwymodule/html/libgwymodule-gwymodule-tool.html
+++ b/devel-docs/libgwymodule/html/libgwymodule-gwymodule-tool.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>gwymodule-tool: Gwyddion Module Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Module Library Reference Manual">
<link rel="up" href="ModuleLibrary.html" title="Gwyddion Module Library">
<link rel="prev" href="libgwymodule-gwymodule-process.html" title="gwymodule-process">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwymodule-gwymodule-tool.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -77,7 +77,7 @@ gwy_tool_func_register (<em class="parameter"><code><a href="http://developer.gn
<p>Registeres a tool function (tool type).</p>
<div class="refsect3">
<a name="gwy-tool-func-register.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -105,7 +105,7 @@ gwy_tool_func_foreach (<em class="parameter"><code><a href="http://developer.gno
<p>Calls a function for each tool function.</p>
<div class="refsect3">
<a name="gwy-tool-func-foreach.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwymodule/html/libgwymodule-gwymodule-volume.html b/devel-docs/libgwymodule/html/libgwymodule-gwymodule-volume.html
index 81675ef..7fde1e0 100644
--- a/devel-docs/libgwymodule/html/libgwymodule-gwymodule-volume.html
+++ b/devel-docs/libgwymodule/html/libgwymodule-gwymodule-volume.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>gwymodule-volume: Gwyddion Module Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Module Library Reference Manual">
<link rel="up" href="ModuleLibrary.html" title="Gwyddion Module Library">
<link rel="prev" href="libgwymodule-gwymodule-layer.html" title="gwymodule-layer">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwymodule-gwymodule-volume.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -151,7 +151,7 @@ processing functions but they live in separate menus, toolbars, etc.</p>
<p>The type of volume data processing function.</p>
<div class="refsect3">
<a name="GwyVolumeFunc.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -196,7 +196,7 @@ vanish. If they are constructed (non-constant) strings, do not free them.
Should modules ever become unloadable they will get a chance to clean-up.</p>
<div class="refsect3">
<a name="gwy-volume-func-register.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -266,7 +266,7 @@ gwy_volume_func_run (<em class="parameter"><code>const <a href="/usr/share/gtk-d
.</p>
<div class="refsect3">
<a name="gwy-volume-func-run.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -301,7 +301,7 @@ gwy_volume_func_exists (<em class="parameter"><code>const <a href="/usr/share/gt
<p>Checks whether a volume data processing function exists.</p>
<div class="refsect3">
<a name="gwy-volume-func-exists.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -329,7 +329,7 @@ gwy_volume_func_get_run_types (<em class="parameter"><code>const <a href="/usr/s
<p>Returns run modes supported by a volume data processing function.</p>
<div class="refsect3">
<a name="gwy-volume-func-get-run-types.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -358,7 +358,7 @@ gwy_volume_func_get_menu_path (<em class="parameter"><code>const <a href="/usr/s
i.e., without any leading "/Volume Data".</p>
<div class="refsect3">
<a name="gwy-volume-func-get-menu-path.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -385,7 +385,7 @@ gwy_volume_func_get_stock_id (<em class="parameter"><code>const <a href="/usr/sh
<p>Gets stock icon id of a volume data processing function.</p>
<div class="refsect3">
<a name="gwy-volume-func-get-stock-id.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -412,7 +412,7 @@ gwy_volume_func_get_tooltip (<em class="parameter"><code>const <a href="/usr/sha
<p>Gets tooltip for a volume data processing function.</p>
<div class="refsect3">
<a name="gwy-volume-func-get-tooltip.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -439,7 +439,7 @@ gwy_volume_func_get_sensitivity_mask (<em class="parameter"><code>const <a href=
<p>Gets menu sensititivy mask for a volume data processing function.</p>
<div class="refsect3">
<a name="gwy-volume-func-get-sensitivity-mask.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -468,7 +468,7 @@ gwy_volume_func_foreach (<em class="parameter"><code><a href="/usr/share/gtk-doc
<p>Calls a function for each volume function.</p>
<div class="refsect3">
<a name="gwy-volume-func-foreach.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwymodule/html/libgwymodule-gwymodule-xyz.html b/devel-docs/libgwymodule/html/libgwymodule-gwymodule-xyz.html
index 2feb056..71bc403 100644
--- a/devel-docs/libgwymodule/html/libgwymodule-gwymodule-xyz.html
+++ b/devel-docs/libgwymodule/html/libgwymodule-gwymodule-xyz.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>gwymodule-xyz: Gwyddion Module Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Module Library Reference Manual">
<link rel="up" href="ModuleLibrary.html" title="Gwyddion Module Library">
<link rel="prev" href="libgwymodule-gwymodule-volume.html" title="gwymodule-volume">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwymodule-gwymodule-xyz.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -145,7 +145,7 @@
<p>The type of surface data processing function.</p>
<div class="refsect3">
<a name="GwyXYZFunc.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -190,7 +190,7 @@ vanish. If they are constructed (non-constant) strings, do not free them.
Should modules ever become unloadable they will get a chance to clean-up.</p>
<div class="refsect3">
<a name="gwy-xyz-func-register.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -260,7 +260,7 @@ gwy_xyz_func_run (<em class="parameter"><code>const <a href="/usr/share/gtk-doc/
.</p>
<div class="refsect3">
<a name="gwy-xyz-func-run.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -295,7 +295,7 @@ gwy_xyz_func_exists (<em class="parameter"><code>const <a href="/usr/share/gtk-d
<p>Checks whether a surface data processing function exists.</p>
<div class="refsect3">
<a name="gwy-xyz-func-exists.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -323,7 +323,7 @@ gwy_xyz_func_get_run_types (<em class="parameter"><code>const <a href="/usr/shar
<p>Returns run modes supported by a surface data processing function.</p>
<div class="refsect3">
<a name="gwy-xyz-func-get-run-types.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -352,7 +352,7 @@ gwy_xyz_func_get_menu_path (<em class="parameter"><code>const <a href="/usr/shar
i.e., without any leading "/XYZ Data".</p>
<div class="refsect3">
<a name="gwy-xyz-func-get-menu-path.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -379,7 +379,7 @@ gwy_xyz_func_get_stock_id (<em class="parameter"><code>const <a href="/usr/share
<p>Gets stock icon id of a surface data processing function.</p>
<div class="refsect3">
<a name="gwy-xyz-func-get-stock-id.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -406,7 +406,7 @@ gwy_xyz_func_get_tooltip (<em class="parameter"><code>const <a href="/usr/share/
<p>Gets tooltip for a surface data processing function.</p>
<div class="refsect3">
<a name="gwy-xyz-func-get-tooltip.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -433,7 +433,7 @@ gwy_xyz_func_get_sensitivity_mask (<em class="parameter"><code>const <a href="/u
<p>Gets menu sensititivy mask for a surface data processing function.</p>
<div class="refsect3">
<a name="gwy-xyz-func-get-sensitivity-mask.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -462,7 +462,7 @@ gwy_xyz_func_foreach (<em class="parameter"><code><a href="/usr/share/gtk-doc/ht
<p>Calls a function for each surface function.</p>
<div class="refsect3">
<a name="gwy-xyz-func-foreach.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwymodule/html/libgwymodule-gwymodulebrowser.html b/devel-docs/libgwymodule/html/libgwymodule-gwymodulebrowser.html
index b4357d0..ba2b1d0 100644
--- a/devel-docs/libgwymodule/html/libgwymodule-gwymodulebrowser.html
+++ b/devel-docs/libgwymodule/html/libgwymodule-gwymodulebrowser.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>gwymodulebrowser: Gwyddion Module Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Module Library Reference Manual">
<link rel="up" href="ModuleLibrary.html" title="Gwyddion Module Library">
<link rel="prev" href="libgwymodule-gwymodule-xyz.html" title="gwymodule-xyz">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwymodule-gwymodulebrowser.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
diff --git a/devel-docs/libgwymodule/html/libgwymodule-gwymoduleenums.html b/devel-docs/libgwymodule/html/libgwymodule-gwymoduleenums.html
index 1f65f5a..af42ded 100644
--- a/devel-docs/libgwymodule/html/libgwymodule-gwymoduleenums.html
+++ b/devel-docs/libgwymodule/html/libgwymodule-gwymoduleenums.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>gwymoduleenums: Gwyddion Module Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Module Library Reference Manual">
<link rel="up" href="ModuleLibrary.html" title="Gwyddion Module Library">
<link rel="prev" href="ModuleLibrary.html" title="Gwyddion Module Library">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwymodule-gwymoduleenums.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -78,7 +78,7 @@ Generally only native file format module implements
<a class="link" href="libgwymodule-gwymoduleenums.html#GWY-FILE-OPERATION-SAVE:CAPS"><code class="literal">GWY_FILE_OPERATION_SAVE</code></a>, all others implement <a class="link" href="libgwymodule-gwymoduleenums.html#GWY-FILE-OPERATION-EXPORT:CAPS"><code class="literal">GWY_FILE_OPERATION_EXPORT</code></a>.</p>
<div class="refsect3">
<a name="GwyFileOperationType.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
@@ -130,7 +130,7 @@ Generally only native file format module implements
<div class="warning"><p><code class="literal">GwyToolSwitchEvent</code> is deprecated and should not be used in newly-written code.</p></div>
<div class="refsect3">
<a name="GwyToolSwitchEvent.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
@@ -163,7 +163,7 @@ process functions is <em class="parameter"><code>GWY_RUN_IMMEDIATE</code></em>
.</p>
<div class="refsect3">
<a name="GwyRunType.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
diff --git a/devel-docs/libgwymodule/html/libgwymodule-gwymoduleloader.html b/devel-docs/libgwymodule/html/libgwymodule-gwymoduleloader.html
index 832c7a1..5d79419 100644
--- a/devel-docs/libgwymodule/html/libgwymodule-gwymoduleloader.html
+++ b/devel-docs/libgwymodule/html/libgwymodule-gwymoduleloader.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>gwymoduleloader: Gwyddion Module Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Module Library Reference Manual">
<link rel="up" href="ModuleLibrary.html" title="Gwyddion Module Library">
<link rel="prev" href="libgwymodule-gwymoduleenums.html" title="gwymoduleenums">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwymodule-gwymoduleloader.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -46,6 +46,12 @@
</td>
</tr>
<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name">
+<a class="link" href="libgwymodule-gwymoduleloader.html#GWY-MODULE-QUERY2:CAPS" title="GWY_MODULE_QUERY2()">GWY_MODULE_QUERY2</a><span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
<td class="function_type">
<a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
</td>
@@ -62,6 +68,13 @@
</td>
</tr>
<tr>
+<td class="function_type">const <a class="link" href="libgwymodule-gwymoduleloader.html#GwyModuleRecord" title="struct GwyModuleRecord"><span class="returnvalue">GwyModuleRecord</span></a> *
+</td>
+<td class="function_name">
+<span class="c_punctuation">(</span><a class="link" href="libgwymodule-gwymoduleloader.html#GwyModuleBundleRegisterFunc" title="GwyModuleBundleRegisterFunc ()">*GwyModuleBundleRegisterFunc</a><span class="c_punctuation">)</span> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
<td class="function_type">
<a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
</td>
@@ -108,18 +121,50 @@
</td>
</tr>
<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="libgwymodule-gwymoduleloader.html#gwy-module-failure-foreach" title="gwy_module_failure_foreach ()">gwy_module_failure_foreach</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
<td class="function_type">const <a class="link" href="libgwymodule-gwymoduleloader.html#GwyModuleInfo" title="struct GwyModuleInfo"><span class="returnvalue">GwyModuleInfo</span></a> *
</td>
<td class="function_name">
<a class="link" href="libgwymodule-gwymoduleloader.html#gwy-module-register-module" title="gwy_module_register_module ()">gwy_module_register_module</a> <span class="c_punctuation">()</span>
</td>
</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="libgwymodule-gwymoduleloader.html#gwy-module-disable-registration" title="gwy_module_disable_registration ()">gwy_module_disable_registration</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="libgwymodule-gwymoduleloader.html#gwy-module-enable-registration" title="gwy_module_enable_registration ()">gwy_module_enable_registration</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="libgwymodule-gwymoduleloader.html#gwy-module-is-enabled" title="gwy_module_is_enabled ()">gwy_module_is_enabled</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
</tbody>
</table></div>
</div>
<div class="refsect1">
<a name="libgwymodule-gwymoduleloader.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -130,13 +175,29 @@
<td class="function_name"><a class="link" href="libgwymodule-gwymoduleloader.html#GWY-MODULE-ABI-VERSION:CAPS" title="GWY_MODULE_ABI_VERSION">GWY_MODULE_ABI_VERSION</a></td>
</tr>
<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="libgwymodule-gwymoduleloader.html#GWY-MODULE-BUNDLE-FLAG:CAPS" title="GWY_MODULE_BUNDLE_FLAG">GWY_MODULE_BUNDLE_FLAG</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="libgwymodule-gwymoduleloader.html#GWY-MODULE-ERROR:CAPS" title="GWY_MODULE_ERROR">GWY_MODULE_ERROR</a></td>
+</tr>
+<tr>
<td class="datatype_keyword">enum</td>
<td class="function_name"><a class="link" href="libgwymodule-gwymoduleloader.html#GwyModuleError" title="enum GwyModuleError">GwyModuleError</a></td>
</tr>
<tr>
<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="libgwymodule-gwymoduleloader.html#GwyModuleRecord" title="struct GwyModuleRecord">GwyModuleRecord</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">struct</td>
<td class="function_name"><a class="link" href="libgwymodule-gwymoduleloader.html#GwyModuleInfo" title="struct GwyModuleInfo">GwyModuleInfo</a></td>
</tr>
+<tr>
+<td class="datatype_keyword"> </td>
+<td class="function_name"><a class="link" href="libgwymodule-gwymoduleloader.html#GwyModuleFailureInfo" title="GwyModuleFailureInfo">GwyModuleFailureInfo</a></td>
+</tr>
</tbody>
</table></div>
</div>
@@ -155,7 +216,7 @@
<pre class="programlisting">#define GWY_MODULE_QUERY(mod_info)</pre>
<p>The module query must be the ONLY exported symbol from a module.</p>
<p>This macro does The Right Thing necessary to export module info in a way
-Gwyddion understands it. Put <a class="link" href="libgwymodule-gwymoduleloader.html#GWY-MODULE-QUERY:CAPS" title="GWY_MODULE_QUERY()"><span class="type">GWY_MODULE_QUERY</span></a> with the module info
+Gwyddion understands it. Put <a class="link" href="libgwymodule-gwymoduleloader.html#GWY-MODULE-QUERY:CAPS" title="GWY_MODULE_QUERY()"><code class="literal">GWY_MODULE_QUERY</code></a> with the module info
(<a class="link" href="libgwymodule-gwymoduleloader.html#GwyModuleInfo" title="struct GwyModuleInfo"><span class="type">GwyModuleInfo</span></a>) of your module as its argument on a line (with NO
semicolon after).</p>
<p>If you write a module in C++ note the module query must have C linkage.
@@ -181,7 +242,7 @@ This has to be done manually in versions up to 2.24; since version 2.25
it is compiled using a C++ compiler.</p>
<div class="refsect3">
<a name="GWY-MODULE-QUERY.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -197,18 +258,65 @@ it is compiled using a C++ compiler.</p>
</div>
<hr>
<div class="refsect2">
+<a name="GWY-MODULE-QUERY2:CAPS"></a><h3>GWY_MODULE_QUERY2()</h3>
+<pre class="programlisting">#define GWY_MODULE_QUERY2(mod_info,mod_name)</pre>
+<p>The module query must be the ONLY exported symbol from a module.</p>
+<p>See <a class="link" href="libgwymodule-gwymoduleloader.html#GWY-MODULE-QUERY:CAPS" title="GWY_MODULE_QUERY()"><code class="literal">GWY_MODULE_QUERY</code></a> for discussion.</p>
+<p>This macro is intended for modules that can be bundled together to one big
+shared library for time and space optimization. This mostly makes sense
+only for modules included in Gwyddion itself as it contains hundreds of
+modules.</p>
+<p>However, it safe to use in third party modules because if modules
+are not bundled the macro behaves exactly as <a class="link" href="libgwymodule-gwymoduleloader.html#GWY-MODULE-QUERY:CAPS" title="GWY_MODULE_QUERY()"><code class="literal">GWY_MODULE_QUERY</code></a> and the
+<em class="parameter"><code>mod_name</code></em>
+ argument is just ignored. The macro expansion differs only when
+<code class="literal">GWY_MODULE_BUNDLING</code> is defined when including the "gwymoduleloader.h"
+header.</p>
+<div class="refsect3">
+<a name="GWY-MODULE-QUERY2.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>mod_info</p></td>
+<td class="parameter_description"><p>The <a class="link" href="libgwymodule-gwymoduleloader.html#GwyModuleInfo" title="struct GwyModuleInfo"><span class="type">GwyModuleInfo</span></a> structure to return as module info.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>mod_name</p></td>
+<td class="parameter_description"><p>Module name. It should be identical to the file name the module
+would have if installed standalone, without any extension.
+For instance module implemented in "nt-mdt.c" and installed as
+"nt-mdt.so" or "nt-mdt.dll" (or with other extension, depending
+on the platform) should pass "nt-mdt".</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: <a class="link" href="api-index-2-49.html#api-index-2.49">2.49</a></p>
+</div>
+<hr>
+<div class="refsect2">
<a name="GwyModuleRegisterFunc"></a><h3>GwyModuleRegisterFunc ()</h3>
<pre class="programlisting"><a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
<span class="c_punctuation">(</span>*GwyModuleRegisterFunc<span class="c_punctuation">)</span> (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
<p>Module registration function type.</p>
<p>It actually runs particular featrue registration functions, like
<a class="link" href="libgwymodule-gwymodule-file.html#gwy-file-func-register" title="gwy_file_func_register ()"><code class="function">gwy_file_func_register()</code></a> and <a class="link" href="libgwymodule-gwymodule-process.html#gwy-process-func-register" title="gwy_process_func_register ()"><code class="function">gwy_process_func_register()</code></a>.</p>
+<p>If the module has a complex initialisation it may be safer to simply not
+register any function but return <a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> even if it fails to set up itself
+correctly. The module feature unregistration is somewhat crude and,
+generally, unregisteration may lead to disaster when shared library
+unloading has unexpected side effects.</p>
<div class="refsect3">
<a name="GwyModuleRegisterFunc.returns"></a><h4>Returns</h4>
<p> Whether the registration succeeded. When it returns <a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>, the
-module and its features are unloaded (FIXME: maybe. Currenly only
-module is unloaded, features are NOT unregistered, this can lead
-to all kinds of disasters).</p>
+module and its features are unregistered.</p>
</div>
</div>
<hr>
@@ -227,11 +335,21 @@ the module.</p>
</div>
<hr>
<div class="refsect2">
+<a name="GwyModuleBundleRegisterFunc"></a><h3>GwyModuleBundleRegisterFunc ()</h3>
+<pre class="programlisting">const <a class="link" href="libgwymodule-gwymoduleloader.html#GwyModuleRecord" title="struct GwyModuleRecord"><span class="returnvalue">GwyModuleRecord</span></a> *
+<span class="c_punctuation">(</span>*GwyModuleBundleRegisterFunc<span class="c_punctuation">)</span> (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>Module bundle query function type.</p>
+<p>It returns an array of module records for all modules in the bundle,
+terminated by {<a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>, <a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>}.</p>
+<p class="since">Since: <a class="link" href="api-index-2-49.html#api-index-2.49">2.49</a></p>
+</div>
+<hr>
+<div class="refsect2">
<a name="gwy-module-error-quark"></a><h3>gwy_module_error_quark ()</h3>
<pre class="programlisting"><a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Quarks.html#GQuark"><span class="returnvalue">GQuark</span></a>
gwy_module_error_quark (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
<p>Returns error domain for module loading.</p>
-<p>See and use <code class="literal">GWY_MODULE_ERROR</code>.</p>
+<p>See and use <a class="link" href="libgwymodule-gwymoduleloader.html#GWY-MODULE-ERROR:CAPS" title="GWY_MODULE_ERROR"><code class="literal">GWY_MODULE_ERROR</code></a>.</p>
<div class="refsect3">
<a name="gwy-module-error-quark.returns"></a><h4>Returns</h4>
<p> The error domain.</p>
@@ -246,9 +364,11 @@ gwy_module_register_modules (<em class="parameter"><code>const <a href="http://d
<p>It can be called several times (on different directories). No errors are
reported, register modules individually with <a class="link" href="libgwymodule-gwymoduleloader.html#gwy-module-register-module" title="gwy_module_register_module ()"><code class="function">gwy_module_register_module()</code></a>
to get registration errors.</p>
+<p>If you need to prevent specific modules from loading use
+<a class="link" href="libgwymodule-gwymoduleloader.html#gwy-module-disable-registration" title="gwy_module_disable_registration ()"><code class="function">gwy_module_disable_registration()</code></a> beforehand.</p>
<div class="refsect3">
<a name="gwy-module-register-modules.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -270,7 +390,7 @@ gwy_module_lookup (<em class="parameter"><code>const <a href="http://developer.g
<p>Returns information about one module.</p>
<div class="refsect3">
<a name="gwy-module-lookup.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -293,11 +413,11 @@ constant and never modified or freed.</p>
<div class="refsect2">
<a name="gwy-module-get-filename"></a><h3>gwy_module_get_filename ()</h3>
<pre class="programlisting">const <a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
-gwy_module_get_filename (<em class="parameter"><code>const <a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>);</pre>
+gwy_module_get_filename (<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>);</pre>
<p>Returns full file name of a module.</p>
<div class="refsect3">
<a name="gwy-module-get-filename.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -318,12 +438,12 @@ gwy_module_get_filename (<em class="parameter"><code>const <a href="http://devel
<hr>
<div class="refsect2">
<a name="gwy-module-get-functions"></a><h3>gwy_module_get_functions ()</h3>
-<pre class="programlisting"><a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Singly-Linked-Lists.html#GSList"><span class="returnvalue">GSList</span></a> *
-gwy_module_get_functions (<em class="parameter"><code>const <a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>);</pre>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Singly-Linked-Lists.html#GSList"><span class="returnvalue">GSList</span></a> *
+gwy_module_get_functions (<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>);</pre>
<p>Returns list of names of functions a module implements.</p>
<div class="refsect3">
<a name="gwy-module-get-functions.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -338,7 +458,7 @@ gwy_module_get_functions (<em class="parameter"><code>const <a href="http://deve
</div>
<div class="refsect3">
<a name="gwy-module-get-functions.returns"></a><h4>Returns</h4>
-<p> List of module function names, as a <a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> that is owned by
+<p> List of module function names, as a <a href="/usr/share/gtk-doc/html/glibglib-Singly-Linked-Lists.html#GSList"><span class="type">GSList</span></a> that is owned by
module loader and must not be modified or freed.</p>
</div>
</div>
@@ -354,7 +474,7 @@ gwy_module_foreach (<em class="parameter"><code><a href="/usr/share/gtk-doc/html
info (<a class="link" href="libgwymodule-gwymoduleloader.html#GwyModuleInfo" title="struct GwyModuleInfo"><span class="type">GwyModuleInfo</span></a>) as the value. Neither should be modified.</p>
<div class="refsect3">
<a name="gwy-module-foreach.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -377,14 +497,50 @@ info (<a class="link" href="libgwymodule-gwymoduleloader.html#GwyModuleInfo" tit
</div>
<hr>
<div class="refsect2">
+<a name="gwy-module-failure-foreach"></a><h3>gwy_module_failure_foreach ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gwy_module_failure_foreach (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Doubly-Linked-Lists.html#GFunc"><span class="type">GFunc</span></a> function</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> data</code></em>);</pre>
+<p>Runs <em class="parameter"><code>function</code></em>
+ for each module that failed to register.</p>
+<p>It passes the failure info (<a class="link" href="libgwymodule-gwymoduleloader.html#GwyModuleFailureInfo" title="GwyModuleFailureInfo"><span class="type">GwyModuleFailureInfo</span></a>) as the data argument.
+It should be modified.</p>
+<div class="refsect3">
+<a name="gwy-module-failure-foreach.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>function</p></td>
+<td class="parameter_description"><p>A <a href="/usr/share/gtk-doc/html/glibglib-Doubly-Linked-Lists.html#GFunc"><span class="type">GFunc</span></a> run for each module registration failure.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>data</p></td>
+<td class="parameter_description"><p>User data.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: <a class="link" href="api-index-2-49.html#api-index-2.49">2.49</a></p>
+</div>
+<hr>
+<div class="refsect2">
<a name="gwy-module-register-module"></a><h3>gwy_module_register_module ()</h3>
<pre class="programlisting">const <a class="link" href="libgwymodule-gwymoduleloader.html#GwyModuleInfo" title="struct GwyModuleInfo"><span class="returnvalue">GwyModuleInfo</span></a> *
gwy_module_register_module (<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
<p>Loads a single module.</p>
+<p>This function also works with bundles. The returned module info is for the
+bundle and thus not of much use.</p>
<div class="refsect3">
<a name="gwy-module-register-module.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -410,6 +566,94 @@ gwy_module_register_module (<em class="parameter"><code>const <a href="/usr/shar
<p> Module info on success, <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on failure.</p>
</div>
</div>
+<hr>
+<div class="refsect2">
+<a name="gwy-module-disable-registration"></a><h3>gwy_module_disable_registration ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gwy_module_disable_registration (<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>);</pre>
+<p>Prevents the registration of a module of given name.</p>
+<p>This function blocks future module registration using
+<a class="link" href="libgwymodule-gwymoduleloader.html#gwy-module-register-modules" title="gwy_module_register_modules ()"><code class="function">gwy_module_register_modules()</code></a>. Already loaded modules are unaffected.
+The low-level module loading function <a class="link" href="libgwymodule-gwymoduleloader.html#gwy-module-register-module" title="gwy_module_register_module ()"><code class="function">gwy_module_register_module()</code></a> always
+attempts to load the module, even if blocked.</p>
+<div class="refsect3">
+<a name="gwy-module-disable-registration.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>name</p></td>
+<td class="parameter_description"><p>A module name.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since: <a class="link" href="api-index-2-48.html#api-index-2.48">2.48</a></p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gwy-module-enable-registration"></a><h3>gwy_module_enable_registration ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gwy_module_enable_registration (<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>);</pre>
+<p>Unblocks the registration of a module of given name.</p>
+<p>This function influences future module registration. Already loaded modules
+are unaffected.</p>
+<div class="refsect3">
+<a name="gwy-module-enable-registration.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>name</p></td>
+<td class="parameter_description"><p>A module name.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since: <a class="link" href="api-index-2-48.html#api-index-2.48">2.48</a></p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gwy-module-is-enabled"></a><h3>gwy_module_is_enabled ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gwy_module_is_enabled (<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>);</pre>
+<p>Reports whether the registration of a module is enabled.</p>
+<p>If the registration of module <em class="parameter"><code>name</code></em>
+ was prevented using
+<a class="link" href="libgwymodule-gwymoduleloader.html#gwy-module-disable-registration" title="gwy_module_disable_registration ()"><code class="function">gwy_module_disable_registration()</code></a> and not subsequently re-enabled
+using <code class="function">gwy_module_enabled_registration()</code> this function returns <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.</p>
+<p>The reported values only represents the current state of blocking. A module
+<em class="parameter"><code>name</code></em>
+ could have been loaded when it was not blocked.</p>
+<div class="refsect3">
+<a name="gwy-module-is-enabled.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>name</p></td>
+<td class="parameter_description"><p>A module name.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gwy-module-is-enabled.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if module <em class="parameter"><code>name</code></em>
+can be registered; <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> when it is blocked
+from registration.</p>
+</div>
+<p class="since">Since: <a class="link" href="api-index-2-48.html#api-index-2.48">2.48</a></p>
+</div>
</div>
<div class="refsect1">
<a name="libgwymodule-gwymoduleloader.other_details"></a><h2>Types and Values</h2>
@@ -423,11 +667,25 @@ gwy_module_register_module (<em class="parameter"><code>const <a href="/usr/shar
</div>
<hr>
<div class="refsect2">
+<a name="GWY-MODULE-BUNDLE-FLAG:CAPS"></a><h3>GWY_MODULE_BUNDLE_FLAG</h3>
+<pre class="programlisting">#define GWY_MODULE_BUNDLE_FLAG 256u
+</pre>
+<p>Value to bitwise combine with <a class="link" href="libgwymodule-gwymoduleloader.html#GWY-MODULE-ABI-VERSION:CAPS" title="GWY_MODULE_ABI_VERSION"><code class="literal">GWY_MODULE_ABI_VERSION</code></a> to indicate a bundle.</p>
+<p class="since">Since: <a class="link" href="api-index-2-49.html#api-index-2.49">2.49</a></p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GWY-MODULE-ERROR:CAPS"></a><h3>GWY_MODULE_ERROR</h3>
+<pre class="programlisting">#define GWY_MODULE_ERROR gwy_module_error_quark()
+</pre>
+</div>
+<hr>
+<div class="refsect2">
<a name="GwyModuleError"></a><h3>enum GwyModuleError</h3>
<p>Type of module loading and registration error.</p>
<div class="refsect3">
<a name="GwyModuleError.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
@@ -490,12 +748,52 @@ gwy_module_register_module (<em class="parameter"><code>const <a href="/usr/shar
</td>
<td class="enum_member_annotations"> </td>
</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GWY-MODULE-ERROR-NESTING:CAPS"></a>GWY_MODULE_ERROR_NESTING</p></td>
+<td class="enum_member_description">
+<p>Nested module bundle found. (Since 2.49)</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
</tbody>
</table></div>
</div>
</div>
<hr>
<div class="refsect2">
+<a name="GwyModuleRecord"></a><h3>struct GwyModuleRecord</h3>
+<pre class="programlisting">struct GwyModuleRecord {
+ GwyModuleQueryFunc query;
+ const gchar *name;
+};
+</pre>
+<p>Module record returned by bundle query function.</p>
+<div class="refsect3">
+<a name="GwyModuleRecord.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p><a class="link" href="libgwymodule-gwymoduleloader.html#GwyModuleQueryFunc" title="GwyModuleQueryFunc ()"><span class="type">GwyModuleQueryFunc</span></a> <em class="structfield"><code><a name="GwyModuleRecord.query"></a>query</code></em>;</p></td>
+<td class="struct_member_description"><p>Module query function.</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *<em class="structfield"><code><a name="GwyModuleRecord.name"></a>name</code></em>;</p></td>
+<td class="struct_member_description"><p>Module name (base file name without extensions).</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: <a class="link" href="api-index-2-49.html#api-index-2.49">2.49</a></p>
+</div>
+<hr>
+<div class="refsect2">
<a name="GwyModuleInfo"></a><h3>struct GwyModuleInfo</h3>
<pre class="programlisting">struct GwyModuleInfo {
guint32 abi_version;
@@ -510,7 +808,7 @@ gwy_module_register_module (<em class="parameter"><code>const <a href="/usr/shar
<p>Module information returned by <a class="link" href="libgwymodule-gwymoduleloader.html#GWY-MODULE-QUERY:CAPS" title="GWY_MODULE_QUERY()"><code class="function">GWY_MODULE_QUERY()</code></a>.</p>
<div class="refsect3">
<a name="GwyModuleInfo.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="struct_members_name">
<col class="struct_members_description">
@@ -559,6 +857,57 @@ features).</p></td>
</table></div>
</div>
</div>
+<hr>
+<div class="refsect2">
+<a name="GwyModuleFailureInfo"></a><h3>GwyModuleFailureInfo</h3>
+<pre class="programlisting">typedef struct {
+ const gchar *filename;
+ const gchar *modname;
+ const gchar *err_message;
+ gint err_domain;
+ gint err_code;
+} GwyModuleFailureInfo;
+</pre>
+<p>Information about a failed module registration.</p>
+<div class="refsect3">
+<a name="GwyModuleFailureInfo.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="300px" class="struct_members_name">
+<col class="struct_members_description">
+<col width="200px" class="struct_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="struct_member_name"><p>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *<em class="structfield"><code><a name="GwyModuleFailureInfo.filename"></a>filename</code></em>;</p></td>
+<td class="struct_member_description"><p>Name of the file the module was loaded from.</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *<em class="structfield"><code><a name="GwyModuleFailureInfo.modname"></a>modname</code></em>;</p></td>
+<td class="struct_member_description"><p>Module name (can be <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> and contain odd bytes).</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *<em class="structfield"><code><a name="GwyModuleFailureInfo.err-message"></a>err_message</code></em>;</p></td>
+<td class="struct_member_description"><p>Error message from the failed module registration.</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> <em class="structfield"><code><a name="GwyModuleFailureInfo.err-domain"></a>err_domain</code></em>;</p></td>
+<td class="struct_member_description"><p><a href="/usr/share/gtk-doc/html/glibglib-Error-Reporting.html#GError"><span class="type">GError</span></a> domain from the failed module registration.</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> <em class="structfield"><code><a name="GwyModuleFailureInfo.err-code"></a>err_code</code></em>;</p></td>
+<td class="struct_member_description"><p><a href="/usr/share/gtk-doc/html/glibglib-Error-Reporting.html#GError"><span class="type">GError</span></a> code from the failed module registration.</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: <a class="link" href="api-index-2-49.html#api-index-2.49">2.49</a></p>
+</div>
</div>
</div>
<div class="footer">
diff --git a/devel-docs/libgwymodule/html/libgwymodule.devhelp2 b/devel-docs/libgwymodule/html/libgwymodule.devhelp2
index 72d001c..71298bf 100644
--- a/devel-docs/libgwymodule/html/libgwymodule.devhelp2
+++ b/devel-docs/libgwymodule/html/libgwymodule.devhelp2
@@ -40,24 +40,36 @@
<sub name="Index of new symbols in 2.36" link="api-index-2-36.html"/>
<sub name="Index of new symbols in 2.38" link="api-index-2-38.html"/>
<sub name="Index of new symbols in 2.45" link="api-index-2-45.html"/>
+ <sub name="Index of new symbols in 2.48" link="api-index-2-48.html"/>
+ <sub name="Index of new symbols in 2.49" link="api-index-2-49.html"/>
</chapters>
<functions>
<keyword type="enum" name="enum GwyFileOperationType" link="libgwymodule-gwymoduleenums.html#GwyFileOperationType"/>
<keyword type="enum" name="enum GwyToolSwitchEvent" link="libgwymodule-gwymoduleenums.html#GwyToolSwitchEvent" deprecated=""/>
<keyword type="enum" name="enum GwyRunType" link="libgwymodule-gwymoduleenums.html#GwyRunType"/>
<keyword type="macro" name="GWY_MODULE_QUERY()" link="libgwymodule-gwymoduleloader.html#GWY-MODULE-QUERY:CAPS"/>
+ <keyword type="macro" name="GWY_MODULE_QUERY2()" link="libgwymodule-gwymoduleloader.html#GWY-MODULE-QUERY2:CAPS" since="2.49"/>
<keyword type="function" name="GwyModuleRegisterFunc ()" link="libgwymodule-gwymoduleloader.html#GwyModuleRegisterFunc"/>
<keyword type="function" name="GwyModuleQueryFunc ()" link="libgwymodule-gwymoduleloader.html#GwyModuleQueryFunc"/>
+ <keyword type="function" name="GwyModuleBundleRegisterFunc ()" link="libgwymodule-gwymoduleloader.html#GwyModuleBundleRegisterFunc" since="2.49"/>
<keyword type="function" name="gwy_module_error_quark ()" link="libgwymodule-gwymoduleloader.html#gwy-module-error-quark"/>
<keyword type="function" name="gwy_module_register_modules ()" link="libgwymodule-gwymoduleloader.html#gwy-module-register-modules"/>
<keyword type="function" name="gwy_module_lookup ()" link="libgwymodule-gwymoduleloader.html#gwy-module-lookup"/>
<keyword type="function" name="gwy_module_get_filename ()" link="libgwymodule-gwymoduleloader.html#gwy-module-get-filename"/>
<keyword type="function" name="gwy_module_get_functions ()" link="libgwymodule-gwymoduleloader.html#gwy-module-get-functions"/>
<keyword type="function" name="gwy_module_foreach ()" link="libgwymodule-gwymoduleloader.html#gwy-module-foreach"/>
+ <keyword type="function" name="gwy_module_failure_foreach ()" link="libgwymodule-gwymoduleloader.html#gwy-module-failure-foreach" since="2.49"/>
<keyword type="function" name="gwy_module_register_module ()" link="libgwymodule-gwymoduleloader.html#gwy-module-register-module"/>
+ <keyword type="function" name="gwy_module_disable_registration ()" link="libgwymodule-gwymoduleloader.html#gwy-module-disable-registration" since="2.48"/>
+ <keyword type="function" name="gwy_module_enable_registration ()" link="libgwymodule-gwymoduleloader.html#gwy-module-enable-registration" since="2.48"/>
+ <keyword type="function" name="gwy_module_is_enabled ()" link="libgwymodule-gwymoduleloader.html#gwy-module-is-enabled" since="2.48"/>
<keyword type="macro" name="GWY_MODULE_ABI_VERSION" link="libgwymodule-gwymoduleloader.html#GWY-MODULE-ABI-VERSION:CAPS"/>
+ <keyword type="macro" name="GWY_MODULE_BUNDLE_FLAG" link="libgwymodule-gwymoduleloader.html#GWY-MODULE-BUNDLE-FLAG:CAPS" since="2.49"/>
+ <keyword type="macro" name="GWY_MODULE_ERROR" link="libgwymodule-gwymoduleloader.html#GWY-MODULE-ERROR:CAPS"/>
<keyword type="enum" name="enum GwyModuleError" link="libgwymodule-gwymoduleloader.html#GwyModuleError"/>
+ <keyword type="struct" name="struct GwyModuleRecord" link="libgwymodule-gwymoduleloader.html#GwyModuleRecord" since="2.49"/>
<keyword type="struct" name="struct GwyModuleInfo" link="libgwymodule-gwymoduleloader.html#GwyModuleInfo"/>
+ <keyword type="struct" name="GwyModuleFailureInfo" link="libgwymodule-gwymoduleloader.html#GwyModuleFailureInfo" since="2.49"/>
<keyword type="function" name="GwyFileDetectFunc ()" link="libgwymodule-gwymodule-file.html#GwyFileDetectFunc"/>
<keyword type="function" name="GwyFileLoadFunc ()" link="libgwymodule-gwymodule-file.html#GwyFileLoadFunc"/>
<keyword type="function" name="GwyFileSaveFunc ()" link="libgwymodule-gwymodule-file.html#GwyFileSaveFunc"/>
@@ -153,6 +165,7 @@
<keyword type="constant" name="GWY_MODULE_ERROR_ABI" link="libgwymodule-gwymoduleloader.html#GWY-MODULE-ERROR-ABI:CAPS"/>
<keyword type="constant" name="GWY_MODULE_ERROR_INFO" link="libgwymodule-gwymoduleloader.html#GWY-MODULE-ERROR-INFO:CAPS"/>
<keyword type="constant" name="GWY_MODULE_ERROR_REGISTER" link="libgwymodule-gwymoduleloader.html#GWY-MODULE-ERROR-REGISTER:CAPS"/>
+ <keyword type="constant" name="GWY_MODULE_ERROR_NESTING" link="libgwymodule-gwymoduleloader.html#GWY-MODULE-ERROR-NESTING:CAPS"/>
<keyword type="constant" name="GWY_MODULE_FILE_ERROR_CANCELED" link="libgwymodule-gwymodule-file.html#GWY-MODULE-FILE-ERROR-CANCELED:CAPS"/>
<keyword type="constant" name="GWY_MODULE_FILE_ERROR_CANCELLED" link="libgwymodule-gwymodule-file.html#GWY-MODULE-FILE-ERROR-CANCELLED:CAPS"/>
<keyword type="constant" name="GWY_MODULE_FILE_ERROR_UNIMPLEMENTED" link="libgwymodule-gwymodule-file.html#GWY-MODULE-FILE-ERROR-UNIMPLEMENTED:CAPS"/>
@@ -160,6 +173,8 @@
<keyword type="constant" name="GWY_MODULE_FILE_ERROR_DATA" link="libgwymodule-gwymodule-file.html#GWY-MODULE-FILE-ERROR-DATA:CAPS"/>
<keyword type="constant" name="GWY_MODULE_FILE_ERROR_INTERACTIVE" link="libgwymodule-gwymodule-file.html#GWY-MODULE-FILE-ERROR-INTERACTIVE:CAPS"/>
<keyword type="constant" name="GWY_MODULE_FILE_ERROR_SPECIFIC" link="libgwymodule-gwymodule-file.html#GWY-MODULE-FILE-ERROR-SPECIFIC:CAPS"/>
+ <keyword type="member" name="GwyModuleRecord.query" link="libgwymodule-gwymoduleloader.html#GwyModuleRecord.query"/>
+ <keyword type="member" name="GwyModuleRecord.name" link="libgwymodule-gwymoduleloader.html#GwyModuleRecord.name"/>
<keyword type="member" name="GwyModuleInfo.abi-version" link="libgwymodule-gwymoduleloader.html#GwyModuleInfo.abi-version"/>
<keyword type="member" name="GwyModuleInfo.register-func" link="libgwymodule-gwymoduleloader.html#GwyModuleInfo.register-func"/>
<keyword type="member" name="GwyModuleInfo.blurb" link="libgwymodule-gwymoduleloader.html#GwyModuleInfo.blurb"/>
@@ -167,6 +182,11 @@
<keyword type="member" name="GwyModuleInfo.version" link="libgwymodule-gwymoduleloader.html#GwyModuleInfo.version"/>
<keyword type="member" name="GwyModuleInfo.copyright" link="libgwymodule-gwymoduleloader.html#GwyModuleInfo.copyright"/>
<keyword type="member" name="GwyModuleInfo.date" link="libgwymodule-gwymoduleloader.html#GwyModuleInfo.date"/>
+ <keyword type="member" name="GwyModuleFailureInfo.filename" link="libgwymodule-gwymoduleloader.html#GwyModuleFailureInfo.filename"/>
+ <keyword type="member" name="GwyModuleFailureInfo.modname" link="libgwymodule-gwymoduleloader.html#GwyModuleFailureInfo.modname"/>
+ <keyword type="member" name="GwyModuleFailureInfo.err-message" link="libgwymodule-gwymoduleloader.html#GwyModuleFailureInfo.err-message"/>
+ <keyword type="member" name="GwyModuleFailureInfo.err-domain" link="libgwymodule-gwymoduleloader.html#GwyModuleFailureInfo.err-domain"/>
+ <keyword type="member" name="GwyModuleFailureInfo.err-code" link="libgwymodule-gwymoduleloader.html#GwyModuleFailureInfo.err-code"/>
<keyword type="member" name="GwyFileDetectInfo.name" link="libgwymodule-gwymodule-file.html#GwyFileDetectInfo.name"/>
<keyword type="member" name="GwyFileDetectInfo.name-lowercase" link="libgwymodule-gwymodule-file.html#GwyFileDetectInfo.name-lowercase"/>
<keyword type="member" name="GwyFileDetectInfo.file-size" link="libgwymodule-gwymodule-file.html#GwyFileDetectInfo.file-size"/>
diff --git a/devel-docs/libgwymodule/html/plugin-proxy-dump.html b/devel-docs/libgwymodule/html/plugin-proxy-dump.html
index efe2788..c3cf61f 100644
--- a/devel-docs/libgwymodule/html/plugin-proxy-dump.html
+++ b/devel-docs/libgwymodule/html/plugin-proxy-dump.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Dump Format: Gwyddion Module Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Module Library Reference Manual">
<link rel="up" href="PluginProxyReference.html" title="Plug-in Proxy Reference">
<link rel="prev" href="plugin-proxy-file.html" title="File Type Plug-ins">
diff --git a/devel-docs/libgwymodule/html/plugin-proxy-file.html b/devel-docs/libgwymodule/html/plugin-proxy-file.html
index a0a6c7e..b80b466 100644
--- a/devel-docs/libgwymodule/html/plugin-proxy-file.html
+++ b/devel-docs/libgwymodule/html/plugin-proxy-file.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>File Type Plug-ins: Gwyddion Module Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Module Library Reference Manual">
<link rel="up" href="PluginProxyReference.html" title="Plug-in Proxy Reference">
<link rel="prev" href="plugin-proxy-process.html" title="Data Process Plug-ins">
diff --git a/devel-docs/libgwymodule/html/plugin-proxy-overview.html b/devel-docs/libgwymodule/html/plugin-proxy-overview.html
index ef96dea..1e91c90 100644
--- a/devel-docs/libgwymodule/html/plugin-proxy-overview.html
+++ b/devel-docs/libgwymodule/html/plugin-proxy-overview.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Plug-in Proxy Overview: Gwyddion Module Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Module Library Reference Manual">
<link rel="up" href="PluginProxyReference.html" title="Plug-in Proxy Reference">
<link rel="prev" href="PluginProxyReference.html" title="Plug-in Proxy Reference">
diff --git a/devel-docs/libgwymodule/html/plugin-proxy-process.html b/devel-docs/libgwymodule/html/plugin-proxy-process.html
index 625387f..b44deb5 100644
--- a/devel-docs/libgwymodule/html/plugin-proxy-process.html
+++ b/devel-docs/libgwymodule/html/plugin-proxy-process.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Data Process Plug-ins: Gwyddion Module Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Module Library Reference Manual">
<link rel="up" href="PluginProxyReference.html" title="Plug-in Proxy Reference">
<link rel="prev" href="plugin-proxy-overview.html" title="Plug-in Proxy Overview">
diff --git a/devel-docs/libgwymodule/html/plugin-proxy-rgi.html b/devel-docs/libgwymodule/html/plugin-proxy-rgi.html
index ba82d91..ec6d9ee 100644
--- a/devel-docs/libgwymodule/html/plugin-proxy-rgi.html
+++ b/devel-docs/libgwymodule/html/plugin-proxy-rgi.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>RGI Registration Method: Gwyddion Module Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Module Library Reference Manual">
<link rel="up" href="PluginProxyReference.html" title="Plug-in Proxy Reference">
<link rel="prev" href="plugin-proxy-dump.html" title="Dump Format">
diff --git a/devel-docs/libgwymodule/libgwymodule-docs.sgml b/devel-docs/libgwymodule/libgwymodule-docs.sgml
index 4d46385..5842131 100644
--- a/devel-docs/libgwymodule/libgwymodule-docs.sgml
+++ b/devel-docs/libgwymodule/libgwymodule-docs.sgml
@@ -48,37 +48,45 @@
<title>Index of all symbols</title>
<xi:include href="xml/api-index-full.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-deprec" role="deprecated">
+ <index id="api-index-deprec">
<title>Index of deprecated symbols</title>
<xi:include href="xml/api-index-deprecated.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-1" role="2.1">
+ <index id="api-index-2-1">
<title>Index of new symbols in 2.1</title>
<xi:include href="xml/api-index-2.1.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-18" role="2.18">
+ <index id="api-index-2-18">
<title>Index of new symbols in 2.18</title>
<xi:include href="xml/api-index-2.18.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-25" role="2.25">
+ <index id="api-index-2-25">
<title>Index of new symbols in 2.25</title>
<xi:include href="xml/api-index-2.25.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-32" role="2.32">
+ <index id="api-index-2-32">
<title>Index of new symbols in 2.32</title>
<xi:include href="xml/api-index-2.32.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-36" role="2.36">
+ <index id="api-index-2-36">
<title>Index of new symbols in 2.36</title>
<xi:include href="xml/api-index-2.36.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-38" role="2.38">
+ <index id="api-index-2-38">
<title>Index of new symbols in 2.38</title>
<xi:include href="xml/api-index-2.38.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-45" role="2.45">
+ <index id="api-index-2-45">
<title>Index of new symbols in 2.45</title>
<xi:include href="xml/api-index-2.45.xml"><xi:fallback /></xi:include>
</index>
+ <index id="api-index-2-48">
+ <title>Index of new symbols in 2.48</title>
+ <xi:include href="xml/api-index-2.48.xml"><xi:fallback /></xi:include>
+ </index>
+ <index id="api-index-2-49">
+ <title>Index of new symbols in 2.49</title>
+ <xi:include href="xml/api-index-2.49.xml"><xi:fallback /></xi:include>
+ </index>
<!-- API INDICES END -->
</book>
diff --git a/devel-docs/libgwymodule/module-tutorial-beyond.xml b/devel-docs/libgwymodule/module-tutorial-beyond.xml
index 9b4bb11..315a660 100644
--- a/devel-docs/libgwymodule/module-tutorial-beyond.xml
+++ b/devel-docs/libgwymodule/module-tutorial-beyond.xml
@@ -1,7 +1,7 @@
<?xml version="1.0"?>
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
"http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
-<refentry id="gwymodule-tutorial-beyond" revision="@(#) $Id: module-tutorial-beyond.xml 6762 2006-10-09 21:23:55Z yeti-dn $">
+<refentry id="gwymodule-tutorial-beyond" revision="@(#) $Id: module-tutorial-beyond.xml 19894 2017-06-10 05:21:19Z yeti-dn $">
<refmeta>
<refentrytitle>Beyond the Minimal Module</refentrytitle>
<manvolnum>3</manvolnum>
@@ -250,8 +250,8 @@ g_object_unref(graph_model);
</listitem>
</itemizedlist>
There is an extensive
- <ulink url="http://gtk.org/tutorial/">Gtk+ Tutorial</ulink>
- and <ulink url="http://gtk.org/api/">API Reference</ulink> available
+ <ulink url="https://developer.gnome.org/gtk-tutorial/stable/">Gtk+ Tutorial</ulink>
+ and <ulink url="https://developer.gnome.org/gtk2/stable/">API Reference</ulink> available
on the Gtk+ Web site. You can use existing modules as templates
for your module.
</para>
diff --git a/devel-docs/libgwymodule/module-tutorial-install.xml b/devel-docs/libgwymodule/module-tutorial-install.xml
index 97c44f6..d4bd2cf 100644
--- a/devel-docs/libgwymodule/module-tutorial-install.xml
+++ b/devel-docs/libgwymodule/module-tutorial-install.xml
@@ -1,7 +1,7 @@
<?xml version="1.0"?>
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
"http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
-<refentry id="gwymodule-tutorial-install" revision="@(#) $Id: module-tutorial-install.xml 6751 2006-10-07 22:13:53Z yeti-dn $">
+<refentry id="gwymodule-tutorial-install" revision="@(#) $Id: module-tutorial-install.xml 19894 2017-06-10 05:21:19Z yeti-dn $">
<refmeta>
<refentrytitle>Gwyddion Module Installation</refentrytitle>
<manvolnum>3</manvolnum>
@@ -19,7 +19,7 @@
<title>Overview</title>
<para>
To be written. Meanwhile you can look at the
- <ulink url="http://gwyddion.net/download.php#sample-module">threshold-example</ulink>
+ <ulink url="http://gwyddion.net/apps/#sample-module">threshold-example</ulink>
module how it copes with this issues.
</para>
<para>
diff --git a/devel-docs/libgwyprocess/Makefile.in b/devel-docs/libgwyprocess/Makefile.in
index 8168c92..5e9294c 100644
--- a/devel-docs/libgwyprocess/Makefile.in
+++ b/devel-docs/libgwyprocess/Makefile.in
@@ -178,10 +178,7 @@ EPYDOC = @EPYDOC@
EXEEXT = @EXEEXT@
EXR_CFLAGS = @EXR_CFLAGS@
EXR_LIBS = @EXR_LIBS@
-FFTW3_1_CFLAGS = @FFTW3_1_CFLAGS@
-FFTW3_1_LIBS = @FFTW3_1_LIBS@
FFTW3_CFLAGS = @FFTW3_CFLAGS@
-FFTW3_DEPENDENCY = @FFTW3_DEPENDENCY@
FFTW3_LIBS = @FFTW3_LIBS@
FGREP = @FGREP@
GCONFTOOL = @GCONFTOOL@
@@ -191,6 +188,8 @@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
GLIBC21 = @GLIBC21@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GMODULE_CFLAGS = @GMODULE_CFLAGS@
GMODULE_LIBS = @GMODULE_LIBS@
GMSGFMT = @GMSGFMT@
@@ -215,7 +214,9 @@ GTK_MAC_LIBS = @GTK_MAC_LIBS@
GWY_VERSION_MAJOR = @GWY_VERSION_MAJOR@
GWY_VERSION_MINOR = @GWY_VERSION_MINOR@
GWY_VERSION_STRING = @GWY_VERSION_STRING@
+HDRIMAGE_EXTRA_CFLAGS = @HDRIMAGE_EXTRA_CFLAGS@
HTML_DIR = @HTML_DIR@
+INKSCAPE = @INKSCAPE@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -273,6 +274,7 @@ PASCAL = @PASCAL@
PATH_SEPARATOR = @PATH_SEPARATOR@
PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
+PNGCRUSH = @PNGCRUSH@
PNG_CFLAGS = @PNG_CFLAGS@
PNG_LIBS = @PNG_LIBS@
POD2MAN = @POD2MAN@
@@ -281,17 +283,13 @@ PYGTK_CFLAGS = @PYGTK_CFLAGS@
PYGTK_CODEGENDIR = @PYGTK_CODEGENDIR@
PYGTK_LIBS = @PYGTK_LIBS@
PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
PYTHON_EXTRA_CFLAGS = @PYTHON_EXTRA_CFLAGS@
PYTHON_INCLUDES = @PYTHON_INCLUDES@
-PYTHON_LIBS = @PYTHON_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
PYTHON_PLATFORM = @PYTHON_PLATFORM@
PYTHON_PREFIX = @PYTHON_PREFIX@
-PYTHON_SYSCFG_BASECFLAGS = @PYTHON_SYSCFG_BASECFLAGS@
-PYTHON_SYSCFG_CCSHARED = @PYTHON_SYSCFG_CCSHARED@
-PYTHON_SYSCFG_LDFLAGS = @PYTHON_SYSCFG_LDFLAGS@
-PYTHON_SYSCFG_LIBDIR = @PYTHON_SYSCFG_LIBDIR@
-PYTHON_SYSCFG_LINKFORSHARED = @PYTHON_SYSCFG_LINKFORSHARED@
PYTHON_VERSION = @PYTHON_VERSION@
RANLIB = @RANLIB@
RUBY = @RUBY@
diff --git a/devel-docs/libgwyprocess/html/GwyBrick.html b/devel-docs/libgwyprocess/html/GwyBrick.html
index d50c715..ab9381e 100644
--- a/devel-docs/libgwyprocess/html/GwyBrick.html
+++ b/devel-docs/libgwyprocess/html/GwyBrick.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GwyBrick: Gwyddion Data Processing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="prev" href="GwySpectra.html" title="GwySpectra">
@@ -36,7 +36,7 @@
</tr></table></div>
<div class="refsect1">
<a name="GwyBrick.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -297,6 +297,14 @@
</tr>
<tr>
<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="GwyBrick.html#gwy-brick-copy-units" title="gwy_brick_copy_units ()">gwy_brick_copy_units</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
<span class="returnvalue">GwySIValueFormat</span> *
</td>
<td class="function_name">
@@ -572,7 +580,7 @@
</div>
<div class="refsect1">
<a name="GwyBrick.signals"></a><h2>Signals</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
<colgroup>
<col width="150px" class="signals_return">
<col width="300px" class="signals_name">
@@ -587,7 +595,7 @@
</div>
<div class="refsect1">
<a name="GwyBrick.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -639,7 +647,7 @@ different volume data obtained from SPMs, like in force volume measurements.</p>
typecasting.</p>
<div class="refsect3">
<a name="gwy-brick-duplicate.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -668,7 +676,7 @@ gwy_brick_new (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib
<p>Creates a new data brick.</p>
<div class="refsect3">
<a name="gwy-brick-new.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -731,7 +739,7 @@ gwy_brick_new_alike (<em class="parameter"><code><a class="link" href="GwyBrick.
data.</p>
<div class="refsect3">
<a name="gwy-brick-new-alike.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -774,7 +782,7 @@ gwy_brick_new_part (<em class="parameter"><code>const <a class="link" href="GwyB
<p>Use <a class="link" href="GwyBrick.html#gwy-brick-duplicate" title="gwy_brick_duplicate()"><code class="function">gwy_brick_duplicate()</code></a> if you want to copy a whole data brick.</p>
<div class="refsect3">
<a name="gwy-brick-new-part.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -838,7 +846,7 @@ gwy_brick_data_changed (<em class="parameter"><code><a class="link" href="GwyBri
<p>Emits signal "data_changed" on a data brick.</p>
<div class="refsect3">
<a name="gwy-brick-data-changed.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -868,7 +876,7 @@ brick. The original values are used for resampling using a requested
interpolation alorithm.</p>
<div class="refsect3">
<a name="gwy-brick-resample.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -913,7 +921,7 @@ gwy_brick_get_xres (<em class="parameter"><code><a class="link" href="GwyBrick.h
<p>Gets the x resolution of a data brick.</p>
<div class="refsect3">
<a name="gwy-brick-get-xres.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -940,7 +948,7 @@ gwy_brick_get_yres (<em class="parameter"><code><a class="link" href="GwyBrick.h
<p>Gets the y resolution of a data brick.</p>
<div class="refsect3">
<a name="gwy-brick-get-yres.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -967,7 +975,7 @@ gwy_brick_get_zres (<em class="parameter"><code><a class="link" href="GwyBrick.h
<p>Gets the z resolution of a data brick.</p>
<div class="refsect3">
<a name="gwy-brick-get-zres.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -994,7 +1002,7 @@ gwy_brick_get_xreal (<em class="parameter"><code><a class="link" href="GwyBrick.
<p>Gets the physical size of a data brick in the x direction.</p>
<div class="refsect3">
<a name="gwy-brick-get-xreal.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1021,7 +1029,7 @@ gwy_brick_get_yreal (<em class="parameter"><code><a class="link" href="GwyBrick.
<p>Gets the physical size of a data brick in the y direction.</p>
<div class="refsect3">
<a name="gwy-brick-get-yreal.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1048,7 +1056,7 @@ gwy_brick_get_zreal (<em class="parameter"><code><a class="link" href="GwyBrick.
<p>Gets the physical size of a data brick in the z direction.</p>
<div class="refsect3">
<a name="gwy-brick-get-zreal.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1075,7 +1083,7 @@ gwy_brick_get_xoffset (<em class="parameter"><code><a class="link" href="GwyBric
<p>Gets the offset of data brick origin in x direction.</p>
<div class="refsect3">
<a name="gwy-brick-get-xoffset.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1102,7 +1110,7 @@ gwy_brick_get_yoffset (<em class="parameter"><code><a class="link" href="GwyBric
<p>Gets the offset of data brick origin in y direction.</p>
<div class="refsect3">
<a name="gwy-brick-get-yoffset.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1129,7 +1137,7 @@ gwy_brick_get_zoffset (<em class="parameter"><code><a class="link" href="GwyBric
<p>Gets the offset of data brick origin in z direction.</p>
<div class="refsect3">
<a name="gwy-brick-get-zoffset.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1160,7 +1168,7 @@ brick life time. Some function may change it, most notably
<p>Use <a class="link" href="GwyBrick.html#gwy-brick-get-data" title="gwy_brick_get_data ()"><code class="function">gwy_brick_get_data()</code></a> if you want to change the data.</p>
<div class="refsect3">
<a name="gwy-brick-get-data-const.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1191,7 +1199,7 @@ gwy_brick_set_xreal (<em class="parameter"><code><a class="link" href="GwyBrick.
<p>Sets the real x dimension of a brick.</p>
<div class="refsect3">
<a name="gwy-brick-set-xreal.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1222,7 +1230,7 @@ gwy_brick_set_yreal (<em class="parameter"><code><a class="link" href="GwyBrick.
<p>Sets the real y dimension of a brick.</p>
<div class="refsect3">
<a name="gwy-brick-set-yreal.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1253,7 +1261,7 @@ gwy_brick_set_zreal (<em class="parameter"><code><a class="link" href="GwyBrick.
<p>Sets the real z dimension of a brick.</p>
<div class="refsect3">
<a name="gwy-brick-set-zreal.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1286,7 +1294,7 @@ gwy_brick_set_xoffset (<em class="parameter"><code><a class="link" href="GwyBric
<a class="link" href="GwyBrick.html#gwy-brick-rtoi" title="gwy_brick_rtoi ()"><code class="function">gwy_brick_rtoi()</code></a>.</p>
<div class="refsect3">
<a name="gwy-brick-set-xoffset.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1319,7 +1327,7 @@ gwy_brick_set_yoffset (<em class="parameter"><code><a class="link" href="GwyBric
<a class="link" href="GwyBrick.html#gwy-brick-rtoi" title="gwy_brick_rtoi ()"><code class="function">gwy_brick_rtoi()</code></a>.</p>
<div class="refsect3">
<a name="gwy-brick-set-yoffset.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1352,7 +1360,7 @@ gwy_brick_set_zoffset (<em class="parameter"><code><a class="link" href="GwyBric
<a class="link" href="GwyBrick.html#gwy-brick-rtoi" title="gwy_brick_rtoi ()"><code class="function">gwy_brick_rtoi()</code></a>.</p>
<div class="refsect3">
<a name="gwy-brick-set-zoffset.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1382,7 +1390,7 @@ gwy_brick_get_si_unit_x (<em class="parameter"><code><a class="link" href="GwyBr
<p>Returns x direction SI unit of a data brick.</p>
<div class="refsect3">
<a name="gwy-brick-get-si-unit-x.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1410,7 +1418,7 @@ gwy_brick_get_si_unit_y (<em class="parameter"><code><a class="link" href="GwyBr
<p>Returns y direction SI unit of a data brick.</p>
<div class="refsect3">
<a name="gwy-brick-get-si-unit-y.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1438,7 +1446,7 @@ gwy_brick_get_si_unit_z (<em class="parameter"><code><a class="link" href="GwyBr
<p>Returns z direction SI unit of a data brick.</p>
<div class="refsect3">
<a name="gwy-brick-get-si-unit-z.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1466,7 +1474,7 @@ gwy_brick_get_si_unit_w (<em class="parameter"><code><a class="link" href="GwyBr
<p>Returns value SI unit of a data brick.</p>
<div class="refsect3">
<a name="gwy-brick-get-si-unit-w.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1499,7 +1507,7 @@ brick.</p>
reference.</p>
<div class="refsect3">
<a name="gwy-brick-set-si-unit-x.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1534,7 +1542,7 @@ brick.</p>
reference.</p>
<div class="refsect3">
<a name="gwy-brick-set-si-unit-y.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1569,7 +1577,7 @@ brick.</p>
reference.</p>
<div class="refsect3">
<a name="gwy-brick-set-si-unit-z.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1604,7 +1612,7 @@ brick.</p>
reference.</p>
<div class="refsect3">
<a name="gwy-brick-set-si-unit-w.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1634,7 +1642,7 @@ gwy_brick_get_min (<em class="parameter"><code><a class="link" href="GwyBrick.ht
<p>Find the minimum value in a data brick.</p>
<div class="refsect3">
<a name="gwy-brick-get-min.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1661,7 +1669,7 @@ gwy_brick_get_max (<em class="parameter"><code><a class="link" href="GwyBrick.ht
<p>Find the maximum value in a data brick.</p>
<div class="refsect3">
<a name="gwy-brick-get-max.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1682,6 +1690,37 @@ gwy_brick_get_max (<em class="parameter"><code><a class="link" href="GwyBrick.ht
</div>
<hr>
<div class="refsect2">
+<a name="gwy-brick-copy-units"></a><h3>gwy_brick_copy_units ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gwy_brick_copy_units (<em class="parameter"><code>const <a class="link" href="GwyBrick.html" title="GwyBrick"><span class="type">GwyBrick</span></a> *brick</code></em>,
+ <em class="parameter"><code><a class="link" href="GwyBrick.html" title="GwyBrick"><span class="type">GwyBrick</span></a> *target</code></em>);</pre>
+<p>Sets lateral and value units of a data brick to match another data brick.</p>
+<div class="refsect3">
+<a name="gwy-brick-copy-units.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>brick</p></td>
+<td class="parameter_description"><p>A data brick.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>target</p></td>
+<td class="parameter_description"><p>Target data brick.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: <a class="link" href="api-index-2-49.html#api-index-2.49">2.49</a></p>
+</div>
+<hr>
+<div class="refsect2">
<a name="gwy-brick-get-value-format-x"></a><h3>gwy_brick_get_value_format_x ()</h3>
<pre class="programlisting"><span class="returnvalue">GwySIValueFormat</span> *
gwy_brick_get_value_format_x (<em class="parameter"><code><a class="link" href="GwyBrick.html" title="GwyBrick"><span class="type">GwyBrick</span></a> *brick</code></em>,
@@ -1690,7 +1729,7 @@ gwy_brick_get_value_format_x (<em class="parameter"><code><a class="link" href="
<p>Finds value format good for displaying coordinates of a data brick.</p>
<div class="refsect3">
<a name="gwy-brick-get-value-format-x.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1734,7 +1773,7 @@ gwy_brick_get_value_format_y (<em class="parameter"><code><a class="link" href="
<p>Finds value format good for displaying values of a data brick.</p>
<div class="refsect3">
<a name="gwy-brick-get-value-format-y.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1778,7 +1817,7 @@ gwy_brick_get_value_format_z (<em class="parameter"><code><a class="link" href="
<p>Finds value format good for displaying values of a data brick.</p>
<div class="refsect3">
<a name="gwy-brick-get-value-format-z.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1825,7 +1864,7 @@ gwy_brick_get_value_format_w (<em class="parameter"><code><a class="link" href="
therefore it's relatively slow.</p>
<div class="refsect3">
<a name="gwy-brick-get-value-format-w.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1872,7 +1911,7 @@ brick life time. Some function may change it, most notably
<a class="link" href="GwyBrick.html#gwy-brick-get-data-const" title="gwy_brick_get_data_const ()"><code class="function">gwy_brick_get_data_const()</code></a> if you are not going to change the data.</p>
<div class="refsect3">
<a name="gwy-brick-get-data.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1908,7 +1947,7 @@ have to use gwy_brick_itor(<em class="parameter"><code>brick</code></em>
+ 0.5) for that.</p>
<div class="refsect3">
<a name="gwy-brick-itor.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1945,7 +1984,7 @@ gwy_brick_rtoi (<em class="parameter"><code><a class="link" href="GwyBrick.html"
<p>That is it maps range [0..x real-size] to range [0..x resolution].</p>
<div class="refsect3">
<a name="gwy-brick-rtoi.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1986,7 +2025,7 @@ have to use gwy_brick_itor(<em class="parameter"><code>brick</code></em>
+ 0.5) for that.</p>
<div class="refsect3">
<a name="gwy-brick-jtor.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2023,7 +2062,7 @@ gwy_brick_rtoj (<em class="parameter"><code><a class="link" href="GwyBrick.html"
<p>That is it maps range [0..y real-size] to range [0..y resolution].</p>
<div class="refsect3">
<a name="gwy-brick-rtoj.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2064,7 +2103,7 @@ have to use gwy_brick_itor(<em class="parameter"><code>brick</code></em>
+ 0.5) for that.</p>
<div class="refsect3">
<a name="gwy-brick-ktor.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2101,7 +2140,7 @@ gwy_brick_rtok (<em class="parameter"><code><a class="link" href="GwyBrick.html"
<p>That is it maps range [0..z real-size] to range [0..z resolution].</p>
<div class="refsect3">
<a name="gwy-brick-rtok.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2146,7 +2185,7 @@ the values are interpolated between and clamped if outside the range.</p>
This convention is also kept when no calibration is present.</p>
<div class="refsect3">
<a name="gwy-brick-ktor-cal.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2191,7 +2230,7 @@ the values are interpolated between and clamped if outside the range.</p>
This convention is also kept when no calibration is present.</p>
<div class="refsect3">
<a name="gwy-brick-rtok-cal.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2232,7 +2271,7 @@ Get raw data buffer with <a class="link" href="GwyBrick.html#gwy-brick-get-data-
directly instead.</p>
<div class="refsect3">
<a name="gwy-brick-get-val.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2283,7 +2322,7 @@ Get raw data buffer with <a class="link" href="GwyBrick.html#gwy-brick-get-data-
directly instead.</p>
<div class="refsect3">
<a name="gwy-brick-set-val.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2334,7 +2373,7 @@ Get raw data buffer with <a class="link" href="GwyBrick.html#gwy-brick-get-data-
directly instead.</p>
<div class="refsect3">
<a name="gwy-brick-get-val-real.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2385,7 +2424,7 @@ Get raw data buffer with <a class="link" href="GwyBrick.html#gwy-brick-get-data-
directly instead.</p>
<div class="refsect3">
<a name="gwy-brick-set-val-real.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2440,7 +2479,7 @@ See also <a class="link" href="GwyBrick.html#gwy-brick-get-dval-real" title="gwy
real coordinates.</p>
<div class="refsect3">
<a name="gwy-brick-get-dval.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2502,7 +2541,7 @@ See also <a class="link" href="GwyBrick.html#gwy-brick-get-dval" title="gwy_bric
pixel coordinates.</p>
<div class="refsect3">
<a name="gwy-brick-get-dval-real.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2516,20 +2555,20 @@ pixel coordinates.</p>
</tr>
<tr>
<td class="parameter_name"><p>x</p></td>
-<td class="parameter_description"><p>Position in data brick in range [0, x resolution]. If the value is outside
-this range, the nearest border value is returned.</p></td>
+<td class="parameter_description"><p>Position in data brick in range [0, x resolution]. If the value is
+outside this range, the nearest border value is returned.</p></td>
<td class="parameter_annotations"> </td>
</tr>
<tr>
<td class="parameter_name"><p>y</p></td>
-<td class="parameter_description"><p>Position in data brick in range [0, y resolution]. If the value is outside
-this range, the nearest border value is returned.</p></td>
+<td class="parameter_description"><p>Position in data brick in range [0, y resolution]. If the value is
+outside this range, the nearest border value is returned.</p></td>
<td class="parameter_annotations"> </td>
</tr>
<tr>
<td class="parameter_name"><p>z</p></td>
-<td class="parameter_description"><p>Position in data brick in range [0, z resolution]. If the value is outside
-this range, the nearest border value is returned.</p></td>
+<td class="parameter_description"><p>Position in data brick in range [0, z resolution]. If the value is
+outside this range, the nearest border value is returned.</p></td>
<td class="parameter_annotations"> </td>
</tr>
<tr>
@@ -2554,7 +2593,7 @@ gwy_brick_clear (<em class="parameter"><code><a class="link" href="GwyBrick.html
<p>Fills a data brick with zeroes.</p>
<div class="refsect3">
<a name="gwy-brick-clear.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2578,7 +2617,7 @@ gwy_brick_fill (<em class="parameter"><code><a class="link" href="GwyBrick.html"
<p>Fills a data brick with specified value.</p>
<div class="refsect3">
<a name="gwy-brick-fill.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2609,7 +2648,7 @@ gwy_brick_multiply (<em class="parameter"><code><a class="link" href="GwyBrick.h
<p>Multiplies all values in a data brick with a specified value.</p>
<div class="refsect3">
<a name="gwy-brick-multiply.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2640,7 +2679,7 @@ gwy_brick_add (<em class="parameter"><code><a class="link" href="GwyBrick.html"
<p>Adds a specified value to all values in a data brick.</p>
<div class="refsect3">
<a name="gwy-brick-add.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2683,7 +2722,7 @@ gwy_brick_extract_plane (<em class="parameter"><code>const <a class="link" href=
plane orientation.</p>
<div class="refsect3">
<a name="gwy-brick-extract-plane.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2773,7 +2812,7 @@ extraction, but the planes are accumulated in whole range (0..xres for given
example)</p>
<div class="refsect3">
<a name="gwy-brick-sum-plane.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2864,7 +2903,7 @@ for single plane extraction, but the planes are accumulated in whole range
(0..xres for given example)</p>
<div class="refsect3">
<a name="gwy-brick-min-plane.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2955,7 +2994,7 @@ for single plane extraction, but the planes are accumulated in whole range
(0..xres for given example)</p>
<div class="refsect3">
<a name="gwy-brick-max-plane.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -3046,7 +3085,7 @@ for single plane extraction, but the planes are accumulated in whole range
(0..xres for given example)</p>
<div class="refsect3">
<a name="gwy-brick-minpos-plane.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -3137,7 +3176,7 @@ for single plane extraction, but the planes are accumulated in whole range
(0..xres for given example)</p>
<div class="refsect3">
<a name="gwy-brick-maxpos-plane.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -3228,7 +3267,7 @@ for single plane extraction, but the planes are accumulated in whole range
(0..xres for given example)</p>
<div class="refsect3">
<a name="gwy-brick-mean-plane.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -3319,7 +3358,7 @@ for single plane extraction, but the planes are accumulated in whole range
(0..xres for given example)</p>
<div class="refsect3">
<a name="gwy-brick-rms-plane.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -3402,7 +3441,7 @@ gwy_brick_extract_line (<em class="parameter"><code>const <a class="link" href="
two of the start coordinates need to be same as end ones.</p>
<div class="refsect3">
<a name="gwy-brick-extract-line.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -3468,7 +3507,7 @@ gwy_brick_get_zcalibration (<em class="parameter"><code>const <a class="link" hr
<p>Gets the z-axis non-linear calibration of a data brick.</p>
<div class="refsect3">
<a name="gwy-brick-get-zcalibration.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -3496,7 +3535,7 @@ gwy_brick_set_zcalibration (<em class="parameter"><code>const <a class="link" hr
<p>Sets the z-axis non-linear calibration of a data brick.</p>
<div class="refsect3">
<a name="gwy-brick-set-zcalibration.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -3566,7 +3605,7 @@ is intended as a means to notify others data line users they should
update themselves.</p>
<div class="refsect3">
<a name="GwyBrick-data-changed.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwyprocess/html/GwyCDLine.html b/devel-docs/libgwyprocess/html/GwyCDLine.html
index 4378baf..ccab5a9 100644
--- a/devel-docs/libgwyprocess/html/GwyCDLine.html
+++ b/devel-docs/libgwyprocess/html/GwyCDLine.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>cdline: Gwyddion Data Processing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="prev" href="libgwyprocess-arithmetic.html" title="arithmetic">
@@ -34,7 +34,7 @@
</tr></table></div>
<div class="refsect1">
<a name="GwyCDLine.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -122,7 +122,7 @@
</div>
<div class="refsect1">
<a name="GwyCDLine.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -178,7 +178,7 @@ gwy_cdline_get_name (<em class="parameter"><code><a class="link" href="GwyCDLine
<p>Return cdline name (its unique identifier).</p>
<div class="refsect3">
<a name="gwy-cdline-get-name.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -205,7 +205,7 @@ gwy_cdline_get_definition (<em class="parameter"><code><a class="link" href="Gwy
description.</p>
<div class="refsect3">
<a name="gwy-cdline-get-definition.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -233,7 +233,7 @@ gwy_cdline_get_param_name (<em class="parameter"><code><a class="link" href="Gwy
<p>The name may contain Pango markup.</p>
<div class="refsect3">
<a name="gwy-cdline-get-param-name.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -269,7 +269,7 @@ gwy_cdline_get_param_default (<em class="parameter"><code><a class="link" href="
<p>Returns a constant default parameter value.</p>
<div class="refsect3">
<a name="gwy-cdline-get-param-default.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -307,7 +307,7 @@ gwy_cdline_get_param_units (<em class="parameter"><code><a class="link" href="Gw
abscissa and ordinate.</p>
<div class="refsect3">
<a name="gwy-cdline-get-param-units.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -357,7 +357,7 @@ gwy_cdline_get_nparams (<em class="parameter"><code><a class="link" href="GwyCDL
.</p>
<div class="refsect3">
<a name="gwy-cdline-get-nparams.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -391,7 +391,7 @@ gwy_cdline_fit (<em class="parameter"><code><a class="link" href="GwyCDLine.html
<p>Performs a critical dimension evaulation (fit).</p>
<div class="refsect3">
<a name="gwy-cdline-fit.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -465,7 +465,7 @@ gwy_cdline_fit_with_caldata (<em class="parameter"><code><a class="link" href="G
<p>Performs a critical dimension evaulation (fit), allowing user to pass uncertainties.</p>
<div class="refsect3">
<a name="gwy-cdline-fit-with-caldata.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -525,7 +525,7 @@ gwy_cdline_get_value (<em class="parameter"><code><a class="link" href="GwyCDLin
parameters.</p>
<div class="refsect3">
<a name="gwy-cdline-get-value.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwyprocess/html/GwyCalData.html b/devel-docs/libgwyprocess/html/GwyCalData.html
index 89b4a61..f0f9203 100644
--- a/devel-docs/libgwyprocess/html/GwyCalData.html
+++ b/devel-docs/libgwyprocess/html/GwyCalData.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GwyCalData: Gwyddion Data Processing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="prev" href="GwyCalibration.html" title="GwyCalibration">
@@ -34,7 +34,7 @@
</tr></table></div>
<div class="refsect1">
<a name="GwyCalData.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -251,7 +251,7 @@
</div>
<div class="refsect1">
<a name="GwyCalData.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -299,7 +299,7 @@ gwy_caldata_new (<em class="parameter"><code><a href="http://developer.gnome.org
<p>Creates new calibration data.</p>
<div class="refsect3">
<a name="gwy-caldata-new.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -327,7 +327,7 @@ gwy_caldata_resize (<em class="parameter"><code><a class="link" href="GwyCalData
<p>Preserves actual values up to new calibration data size.</p>
<div class="refsect3">
<a name="gwy-caldata-resize.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -357,7 +357,7 @@ gwy_caldata_append (<em class="parameter"><code><a class="link" href="GwyCalData
<p>Appends calibration data entries, resizing arrays for holding them.</p>
<div class="refsect3">
<a name="gwy-caldata-append.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -387,7 +387,7 @@ gwy_caldata_get_ndata (<em class="parameter"><code><a class="link" href="GwyCalD
<p>Gets the number of calibration data entries.</p>
<div class="refsect3">
<a name="gwy-caldata-get-ndata.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -414,7 +414,7 @@ gwy_caldata_get_x (<em class="parameter"><code><a class="link" href="GwyCalData.
<p>Gets the Y data for calibration data.</p>
<div class="refsect3">
<a name="gwy-caldata-get-x.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -441,7 +441,7 @@ gwy_caldata_get_y (<em class="parameter"><code><a class="link" href="GwyCalData.
<p>Gets the Y data for calibration data.</p>
<div class="refsect3">
<a name="gwy-caldata-get-y.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -468,7 +468,7 @@ gwy_caldata_get_z (<em class="parameter"><code><a class="link" href="GwyCalData.
<p>Gets the Z data for calibration data.</p>
<div class="refsect3">
<a name="gwy-caldata-get-z.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -495,7 +495,7 @@ gwy_caldata_get_xerr (<em class="parameter"><code><a class="link" href="GwyCalDa
<p>Gets the X error data for calibration data.</p>
<div class="refsect3">
<a name="gwy-caldata-get-xerr.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -522,7 +522,7 @@ gwy_caldata_get_yerr (<em class="parameter"><code><a class="link" href="GwyCalDa
<p>Gets the Y error data for calibration data.</p>
<div class="refsect3">
<a name="gwy-caldata-get-yerr.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -549,7 +549,7 @@ gwy_caldata_get_zerr (<em class="parameter"><code><a class="link" href="GwyCalDa
<p>Gets the Z error data for calibration data.</p>
<div class="refsect3">
<a name="gwy-caldata-get-zerr.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -576,7 +576,7 @@ gwy_caldata_get_xunc (<em class="parameter"><code><a class="link" href="GwyCalDa
<p>Gets the X uncertainty data for calibration data.</p>
<div class="refsect3">
<a name="gwy-caldata-get-xunc.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -603,7 +603,7 @@ gwy_caldata_get_yunc (<em class="parameter"><code><a class="link" href="GwyCalDa
<p>Gets the Y uncertainty data for calibration data.</p>
<div class="refsect3">
<a name="gwy-caldata-get-yunc.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -630,7 +630,7 @@ gwy_caldata_get_zunc (<em class="parameter"><code><a class="link" href="GwyCalDa
<p>Gets the Z uncertainty data for calibration data.</p>
<div class="refsect3">
<a name="gwy-caldata-get-zunc.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -663,7 +663,7 @@ gwy_caldata_get_range (<em class="parameter"><code><a class="link" href="GwyCalD
<p>Obtains boundaries of calibration data validity.</p>
<div class="refsect3">
<a name="gwy-caldata-get-range.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -724,7 +724,7 @@ gwy_caldata_set_range (<em class="parameter"><code><a class="link" href="GwyCalD
<p>Sets boundaries of calibration data validity.</p>
<div class="refsect3">
<a name="gwy-caldata-set-range.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -779,7 +779,7 @@ gwy_caldata_get_si_unit_x (<em class="parameter"><code><a class="link" href="Gwy
<p>Returns lateral SI unit of calibration data.</p>
<div class="refsect3">
<a name="gwy-caldata-get-si-unit-x.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -807,7 +807,7 @@ gwy_caldata_get_si_unit_y (<em class="parameter"><code><a class="link" href="Gwy
<p>Returns lateral SI unit of calibration data</p>
<div class="refsect3">
<a name="gwy-caldata-get-si-unit-y.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -835,7 +835,7 @@ gwy_caldata_get_si_unit_z (<em class="parameter"><code><a class="link" href="Gwy
<p>Returns value SI unit of calibration data</p>
<div class="refsect3">
<a name="gwy-caldata-get-si-unit-z.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -868,7 +868,7 @@ calibration data.</p>
reference.</p>
<div class="refsect3">
<a name="gwy-caldata-set-si-unit-x.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -903,7 +903,7 @@ calibration data.</p>
reference.</p>
<div class="refsect3">
<a name="gwy-caldata-set-si-unit-y.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -938,7 +938,7 @@ calibration data.</p>
reference.</p>
<div class="refsect3">
<a name="gwy-caldata-set-si-unit-z.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -969,7 +969,7 @@ gwy_caldata_setup_interpolation (<em class="parameter"><code><a class="link" hre
triangulation, etc.).</p>
<div class="refsect3">
<a name="gwy-caldata-setup-interpolation.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1001,7 +1001,7 @@ gwy_caldata_interpolate (<em class="parameter"><code><a class="link" href="GwyCa
<p>Determines (interpolates) caldata parameters for given position.</p>
<div class="refsect3">
<a name="gwy-caldata-interpolate.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1072,7 +1072,7 @@ gwy_caldata_save_data (<em class="parameter"><code><a class="link" href="GwyCalD
<p>Saves calibration data to Gwyddion's caldata resource directory.</p>
<div class="refsect3">
<a name="gwy-caldata-save-data.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1105,7 +1105,7 @@ gwy_caldata_inside (<em class="parameter"><code><a class="link" href="GwyCalData
<p>Tests whether a point is inside calibration data range.</p>
<div class="refsect3">
<a name="gwy-caldata-inside.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwyprocess/html/GwyCalibration.html b/devel-docs/libgwyprocess/html/GwyCalibration.html
index 65b5701..22ec37d 100644
--- a/devel-docs/libgwyprocess/html/GwyCalibration.html
+++ b/devel-docs/libgwyprocess/html/GwyCalibration.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GwyCalibration: Gwyddion Data Processing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="prev" href="GwySurface.html" title="GwySurface">
@@ -34,7 +34,7 @@
</tr></table></div>
<div class="refsect1">
<a name="GwyCalibration.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -92,7 +92,7 @@
</div>
<div class="refsect1">
<a name="GwyCalibration.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -137,7 +137,7 @@ gwy_calibration_new (<em class="parameter"><code>const <a href="http://developer
<p>Creates new calibration resource.</p>
<div class="refsect3">
<a name="gwy-calibration-new.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -171,7 +171,7 @@ gwy_calibration_get_filename (<em class="parameter"><code><a class="link" href="
<p>Get filename of associated calibration data.</p>
<div class="refsect3">
<a name="gwy-calibration-get-filename.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -198,7 +198,7 @@ gwy_calibration_get_ndata (<em class="parameter"><code><a class="link" href="Gwy
<p>Returns the number of points in a calibration.</p>
<div class="refsect3">
<a name="gwy-calibration-get-ndata.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -238,7 +238,7 @@ gwy_calibrations_get_calibration (<em class="parameter"><code>const <a href="htt
<p>Convenience function to get a calibration from <a class="link" href="GwyCalibration.html#gwy-calibrations" title="gwy_calibrations ()"><code class="function">gwy_calibrations()</code></a> by name.</p>
<div class="refsect3">
<a name="gwy-calibrations-get-calibration.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -267,7 +267,7 @@ gwy_calibration_get_data (<em class="parameter"><code><a class="link" href="GwyC
<p>Obtains the data related to calibration.</p>
<div class="refsect3">
<a name="gwy-calibration-get-data.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwyprocess/html/GwyDataField.html b/devel-docs/libgwyprocess/html/GwyDataField.html
index 0562f54..cf245bc 100644
--- a/devel-docs/libgwyprocess/html/GwyDataField.html
+++ b/devel-docs/libgwyprocess/html/GwyDataField.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GwyDataField: Gwyddion Data Processing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="prev" href="GwyDataLine.html" title="GwyDataLine">
@@ -36,7 +36,7 @@
</tr></table></div>
<div class="refsect1">
<a name="GwyDataField.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -288,6 +288,14 @@
<span class="returnvalue">void</span>
</td>
<td class="function_name">
+<a class="link" href="GwyDataField.html#gwy-data-field-copy-units" title="gwy_data_field_copy_units ()">gwy_data_field_copy_units</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
<a class="link" href="GwyDataField.html#gwy-data-field-copy-units-to-data-line" title="gwy_data_field_copy_units_to_data_line ()">gwy_data_field_copy_units_to_data_line</a> <span class="c_punctuation">()</span>
</td>
</tr>
@@ -400,6 +408,22 @@
<span class="returnvalue">void</span>
</td>
<td class="function_name">
+<a class="link" href="GwyDataField.html#gwy-data-field-flip-xy" title="gwy_data_field_flip_xy ()">gwy_data_field_flip_xy</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="GwyDataField.html#gwy-data-field-area-flip-xy" title="gwy_data_field_area_flip_xy ()">gwy_data_field_area_flip_xy</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
<a class="link" href="GwyDataField.html#gwy-data-field-fill" title="gwy_data_field_fill ()">gwy_data_field_fill</a> <span class="c_punctuation">()</span>
</td>
</tr>
@@ -477,6 +501,14 @@
</tr>
<tr>
<td class="function_type">
+<span class="returnvalue">GwyXY</span> *
+</td>
+<td class="function_name">
+<a class="link" href="GwyDataField.html#gwy-data-field-get-profile-mask" title="gwy_data_field_get_profile_mask ()">gwy_data_field_get_profile_mask</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
<span class="returnvalue">void</span>
</td>
<td class="function_name">
@@ -576,7 +608,7 @@
</div>
<div class="refsect1">
<a name="GwyDataField.signals"></a><h2>Signals</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
<colgroup>
<col width="150px" class="signals_return">
<col width="300px" class="signals_name">
@@ -591,7 +623,7 @@
</div>
<div class="refsect1">
<a name="GwyDataField.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -648,7 +680,7 @@ you may need to explicitely invalidate cached values to let
<a class="link" href="libgwyprocess-stats.html#gwy-data-field-get-max" title="gwy_data_field_get_max ()"><code class="function">gwy_data_field_get_max()</code></a> know it has to recompute the maximum.</p>
<div class="refsect3">
<a name="gwy-data-field-invalidate.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -672,7 +704,7 @@ typecasting.</p>
resolutions and units.</p>
<div class="refsect3">
<a name="gwy-data-field-duplicate.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -698,7 +730,7 @@ gwy_data_field_new (<em class="parameter"><code><a href="/usr/share/gtk-doc/html
<p>Creates a new data field.</p>
<div class="refsect3">
<a name="gwy-data-field-new.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -750,7 +782,7 @@ gwy_data_field_new_alike (<em class="parameter"><code><a class="link" href="GwyD
data.</p>
<div class="refsect3">
<a name="gwy-data-field-new-alike.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -784,7 +816,7 @@ gwy_data_field_data_changed (<em class="parameter"><code><a class="link" href="G
<p>Emits signal "data-changed" on a data field.</p>
<div class="refsect3">
<a name="gwy-data-field-data-changed.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -811,7 +843,7 @@ gwy_data_field_new_resampled (<em class="parameter"><code><a class="link" href="
<a class="link" href="GwyDataField.html#gwy-data-field-resample" title="gwy_data_field_resample ()"><code class="function">gwy_data_field_resample()</code></a>, but it is more efficient.</p>
<div class="refsect3">
<a name="gwy-data-field-new-resampled.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -859,7 +891,7 @@ gwy_data_field_resample (<em class="parameter"><code><a class="link" href="GwyDa
<a class="link" href="GwyDataField.html#gwy-data-field-get-data" title="gwy_data_field_get_data ()"><code class="function">gwy_data_field_get_data()</code></a>.</p>
<div class="refsect3">
<a name="gwy-data-field-resample.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -906,7 +938,7 @@ points, recomputing real size.</p>
<a class="link" href="GwyDataField.html#gwy-data-field-get-data" title="gwy_data_field_get_data ()"><code class="function">gwy_data_field_get_data()</code></a>.</p>
<div class="refsect3">
<a name="gwy-data-field-resize.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -954,7 +986,7 @@ gwy_data_field_area_extract (<em class="parameter"><code><a class="link" href="G
<p>Extracts a rectangular part of a data field to a new data field.</p>
<div class="refsect3">
<a name="gwy-data-field-area-extract.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1005,7 +1037,7 @@ gwy_data_field_copy (<em class="parameter"><code><a class="link" href="GwyDataFi
of the same size.</p>
<div class="refsect3">
<a name="gwy-data-field-copy.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1064,7 +1096,7 @@ out the destination data field <em class="parameter"><code>dest</code></em>
, the areas may not overlap.</p>
<div class="refsect3">
<a name="gwy-data-field-area-copy.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1135,7 +1167,7 @@ field life time. Some function may change it, most notably
<p>See <a class="link" href="GwyDataField.html#gwy-data-field-invalidate" title="gwy_data_field_invalidate ()"><code class="function">gwy_data_field_invalidate()</code></a> for some discussion.</p>
<div class="refsect3">
<a name="gwy-data-field-get-data.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1169,7 +1201,7 @@ field life time. Some function may change it, most notably
<p>See <a class="link" href="GwyDataField.html#gwy-data-field-invalidate" title="gwy_data_field_invalidate ()"><code class="function">gwy_data_field_invalidate()</code></a> for some discussion.</p>
<div class="refsect3">
<a name="gwy-data-field-get-data-const.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1198,7 +1230,7 @@ gwy_data_field_get_xres (<em class="parameter"><code><a class="link" href="GwyDa
<p>Gets X resolution (number of columns) of a data field.</p>
<div class="refsect3">
<a name="gwy-data-field-get-xres.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1224,7 +1256,7 @@ gwy_data_field_get_yres (<em class="parameter"><code><a class="link" href="GwyDa
<p>Gets Y resolution (number of rows) of the field.</p>
<div class="refsect3">
<a name="gwy-data-field-get-yres.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1250,7 +1282,7 @@ gwy_data_field_get_xreal (<em class="parameter"><code><a class="link" href="GwyD
<p>Gets the X real (physical) size of a data field.</p>
<div class="refsect3">
<a name="gwy-data-field-get-xreal.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1276,7 +1308,7 @@ gwy_data_field_get_yreal (<em class="parameter"><code><a class="link" href="GwyD
<p>Gets the Y real (physical) size of a data field.</p>
<div class="refsect3">
<a name="gwy-data-field-get-yreal.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1303,7 +1335,7 @@ gwy_data_field_set_xreal (<em class="parameter"><code><a class="link" href="GwyD
<p>Sets X real (physical) size value of a data field.</p>
<div class="refsect3">
<a name="gwy-data-field-set-xreal.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1333,7 +1365,7 @@ gwy_data_field_set_yreal (<em class="parameter"><code><a class="link" href="GwyD
<p>Sets Y real (physical) size value of a data field.</p>
<div class="refsect3">
<a name="gwy-data-field-set-yreal.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1362,7 +1394,7 @@ gwy_data_field_set_yreal (<em class="parameter"><code><a class="link" href="GwyD
gwy_data_field_get_xreal(data_field)/gwy_data_field_get_xres(data_field).</p>
<div class="refsect3">
<a name="gwy-data-field-get-xmeasure.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1384,7 +1416,7 @@ gwy_data_field_get_xreal(data_field)/gwy_data_field_get_xres(data_field).</p>
gwy_data_field_get_yreal(data_field)/gwy_data_field_get_yres(data_field).</p>
<div class="refsect3">
<a name="gwy-data-field-get-ymeasure.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1406,7 +1438,7 @@ gwy_data_field_get_xoffset (<em class="parameter"><code><a class="link" href="Gw
<p>Gets the X offset of data field origin.</p>
<div class="refsect3">
<a name="gwy-data-field-get-xoffset.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1432,7 +1464,7 @@ gwy_data_field_get_yoffset (<em class="parameter"><code><a class="link" href="Gw
<p>Gets the Y offset of data field origin.</p>
<div class="refsect3">
<a name="gwy-data-field-get-yoffset.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1461,7 +1493,7 @@ gwy_data_field_set_xoffset (<em class="parameter"><code><a class="link" href="Gw
<a class="link" href="GwyDataField.html#gwy-data-field-rtoj" title="gwy_data_field_rtoj ()"><code class="function">gwy_data_field_rtoj()</code></a>.</p>
<div class="refsect3">
<a name="gwy-data-field-set-xoffset.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1493,7 +1525,7 @@ gwy_data_field_set_yoffset (<em class="parameter"><code><a class="link" href="Gw
<a class="link" href="GwyDataField.html#gwy-data-field-rtoi" title="gwy_data_field_rtoi ()"><code class="function">gwy_data_field_rtoi()</code></a>.</p>
<div class="refsect3">
<a name="gwy-data-field-set-yoffset.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1522,7 +1554,7 @@ gwy_data_field_get_si_unit_xy (<em class="parameter"><code><a class="link" href=
<p>Returns lateral SI unit of a data field.</p>
<div class="refsect3">
<a name="gwy-data-field-get-si-unit-xy.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1549,7 +1581,7 @@ gwy_data_field_get_si_unit_z (<em class="parameter"><code><a class="link" href="
<p>Returns value SI unit of a data field.</p>
<div class="refsect3">
<a name="gwy-data-field-get-si-unit-z.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1581,7 +1613,7 @@ field.</p>
reference.</p>
<div class="refsect3">
<a name="gwy-data-field-set-si-unit-xy.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1615,7 +1647,7 @@ field.</p>
reference.</p>
<div class="refsect3">
<a name="gwy-data-field-set-si-unit-z.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1646,7 +1678,7 @@ gwy_data_field_get_value_format_xy (<em class="parameter"><code><a class="link"
<p>Finds value format good for displaying coordinates of a data field.</p>
<div class="refsect3">
<a name="gwy-data-field-get-value-format-xy.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1689,7 +1721,7 @@ gwy_data_field_get_value_format_z (<em class="parameter"><code><a class="link" h
<p>Finds value format good for displaying values of a data field.</p>
<div class="refsect3">
<a name="gwy-data-field-get-value-format-z.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1724,6 +1756,37 @@ itself is returned.</p>
</div>
<hr>
<div class="refsect2">
+<a name="gwy-data-field-copy-units"></a><h3>gwy_data_field_copy_units ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gwy_data_field_copy_units (<em class="parameter"><code><a class="link" href="GwyDataField.html" title="GwyDataField"><span class="type">GwyDataField</span></a> *data_field</code></em>,
+ <em class="parameter"><code><a class="link" href="GwyDataField.html" title="GwyDataField"><span class="type">GwyDataField</span></a> *target</code></em>);</pre>
+<p>Sets lateral and value units of a data field to match another data field.</p>
+<div class="refsect3">
+<a name="gwy-data-field-copy-units.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>data_field</p></td>
+<td class="parameter_description"><p>A data field.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>target</p></td>
+<td class="parameter_description"><p>Target data field.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: <a class="link" href="api-index-2-49.html#api-index-2.49">2.49</a></p>
+</div>
+<hr>
+<div class="refsect2">
<a name="gwy-data-field-copy-units-to-data-line"></a><h3>gwy_data_field_copy_units_to_data_line ()</h3>
<pre class="programlisting"><span class="returnvalue">void</span>
gwy_data_field_copy_units_to_data_line
@@ -1732,7 +1795,7 @@ gwy_data_field_copy_units_to_data_line
<p>Sets lateral and value units of a data line to match a data field.</p>
<div class="refsect3">
<a name="gwy-data-field-copy-units-to-data-line.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1763,7 +1826,7 @@ gwy_data_line_copy_units_to_data_field
<p>Sets lateral and value units of a data field to match a data line.</p>
<div class="refsect3">
<a name="gwy-data-line-copy-units-to-data-field.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1798,7 +1861,7 @@ you have to use gwy_data_field_itor(<em class="parameter"><code>data_field</code
+ 0.5) for that.</p>
<div class="refsect3">
<a name="gwy-data-field-itor.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1837,7 +1900,7 @@ you have to use gwy_data_field_jtor(<em class="parameter"><code>data_field</code
+ 0.5) for that.</p>
<div class="refsect3">
<a name="gwy-data-field-jtor.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1872,7 +1935,7 @@ gwy_data_field_rtoi (<em class="parameter"><code><a class="link" href="GwyDataFi
<p>That is it maps range [0..real-y-size] to range [0..y-resolution].</p>
<div class="refsect3">
<a name="gwy-data-field-rtoi.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1907,7 +1970,7 @@ gwy_data_field_rtoj (<em class="parameter"><code><a class="link" href="GwyDataFi
<p>That is it maps range [0..real-x-size] to range [0..x-resolution].</p>
<div class="refsect3">
<a name="gwy-data-field-rtoj.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1945,7 +2008,7 @@ Get the raw data buffer with <a class="link" href="GwyDataField.html#gwy-data-fi
directly instead.</p>
<div class="refsect3">
<a name="gwy-data-field-get-val.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1991,7 +2054,7 @@ raw data buffer with <a class="link" href="GwyDataField.html#gwy-data-field-get-
instead.</p>
<div class="refsect3">
<a name="gwy-data-field-set-val.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2047,7 +2110,7 @@ gwy_data_field_get_dval(<em class="parameter"><code>data_field</code></em>
real coordinates.</p>
<div class="refsect3">
<a name="gwy-data-field-get-dval.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2098,7 +2161,7 @@ coordinates.</p>
coordinates.</p>
<div class="refsect3">
<a name="gwy-data-field-get-dval-real.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2144,7 +2207,7 @@ gwy_data_field_rotate (<em class="parameter"><code><a class="link" href="GwyData
<em class="parameter"><code><a class="link" href="libgwyprocess-gwyprocessenums.html#GwyInterpolationType" title="enum GwyInterpolationType"><span class="type">GwyInterpolationType</span></a> interpolation</code></em>);</pre>
<p>Rotates a data field by a given angle.</p>
<p>This function is mostly obsolete. See <a class="link" href="GwyDataField.html#gwy-data-field-new-rotated" title="gwy_data_field_new_rotated ()"><code class="function">gwy_data_field_new_rotated()</code></a>
-and <code class="function">gwy_data_field_rotated_90()</code>.</p>
+and <a class="link" href="GwyDataField.html#gwy-data-field-new-rotated-90" title="gwy_data_field_new_rotated_90 ()"><code class="function">gwy_data_field_new_rotated_90()</code></a>.</p>
<p>Values that get outside of data field by the rotation are lost.
Undefined values from outside of data field that get inside are set to
data field minimum value.</p>
@@ -2152,7 +2215,7 @@ data field minimum value.</p>
general affine transform in the real coordinates when pixels are not square.</p>
<div class="refsect3">
<a name="gwy-data-field-rotate.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2201,12 +2264,12 @@ See <a class="link" href="GwyDataField.html#gwy-data-field-rotate" title="gwy_da
<p>The returned data field has usually square pixels, the exception being when
<em class="parameter"><code>angle</code></em>
is a multiple of <a href="/usr/share/gtk-doc/html/glibglib-Numerical-Definitions.html#G-PI:CAPS"><code class="literal">G_PI</code></a>/2 when the function reduces to
-<code class="function">gwy_data_field_rotated_90()</code> and original pixels are preserved. This is of
-concern only when <em class="parameter"><code>dfield</code></em>
+<a class="link" href="GwyDataField.html#gwy-data-field-new-rotated-90" title="gwy_data_field_new_rotated_90 ()"><code class="function">gwy_data_field_new_rotated_90()</code></a> and original pixels are preserved. This is
+of concern only when <em class="parameter"><code>dfield</code></em>
has non-square pixels.</p>
<div class="refsect3">
<a name="gwy-data-field-new-rotated.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2258,7 +2321,7 @@ gwy_data_field_new_rotated_90 (<em class="parameter"><code><a class="link" href=
<p>Creates a new data field by rotating a data field by 90 degrees.</p>
<div class="refsect3">
<a name="gwy-data-field-new-rotated-90.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2296,7 +2359,7 @@ gwy_data_field_invert (<em class="parameter"><code><a class="link" href="GwyData
<p>In the case of value reflection, it's inverted about the mean value.</p>
<div class="refsect3">
<a name="gwy-data-field-invert.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2310,12 +2373,12 @@ gwy_data_field_invert (<em class="parameter"><code><a class="link" href="GwyData
</tr>
<tr>
<td class="parameter_name"><p>x</p></td>
-<td class="parameter_description"><p><a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> to reflect about X axis (i.e., vertically).</p></td>
+<td class="parameter_description"><p><a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> to reflect about X axis (i.e., invert columns vertically).</p></td>
<td class="parameter_annotations"> </td>
</tr>
<tr>
<td class="parameter_name"><p>y</p></td>
-<td class="parameter_description"><p><a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> to reflect about Y axis (i.e., horizontally).</p></td>
+<td class="parameter_description"><p><a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> to reflect about Y axis (i.e., invert rows horizontally).</p></td>
<td class="parameter_annotations"> </td>
</tr>
<tr>
@@ -2329,6 +2392,119 @@ gwy_data_field_invert (<em class="parameter"><code><a class="link" href="GwyData
</div>
<hr>
<div class="refsect2">
+<a name="gwy-data-field-flip-xy"></a><h3>gwy_data_field_flip_xy ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gwy_data_field_flip_xy (<em class="parameter"><code><a class="link" href="GwyDataField.html" title="GwyDataField"><span class="type">GwyDataField</span></a> *src</code></em>,
+ <em class="parameter"><code><a class="link" href="GwyDataField.html" title="GwyDataField"><span class="type">GwyDataField</span></a> *dest</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> minor</code></em>);</pre>
+<p>Copies data from one data field to another with transposition.</p>
+<p>The destination data field is resized as necessary, its real dimensions set
+to transposed <em class="parameter"><code>src</code></em>
+ dimensions and its offsets are reset. Units are not
+updated.</p>
+<div class="refsect3">
+<a name="gwy-data-field-flip-xy.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>src</p></td>
+<td class="parameter_description"><p>Source data field.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>dest</p></td>
+<td class="parameter_description"><p>Destination data field.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>minor</p></td>
+<td class="parameter_description"><p><a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> to mirror about the minor diagonal; <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> to mirror about
+major diagonal.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: <a class="link" href="api-index-2-49.html#api-index-2.49">2.49</a></p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gwy-data-field-area-flip-xy"></a><h3>gwy_data_field_area_flip_xy ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gwy_data_field_area_flip_xy (<em class="parameter"><code><a class="link" href="GwyDataField.html" title="GwyDataField"><span class="type">GwyDataField</span></a> *src</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> col</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> row</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> width</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> height</code></em>,
+ <em class="parameter"><code><a class="link" href="GwyDataField.html" title="GwyDataField"><span class="type">GwyDataField</span></a> *dest</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> minor</code></em>);</pre>
+<p>Copies data from a rectangular part of one data field to another with
+transposition.</p>
+<p>The destination data field is resized as necessary, its real dimensions set
+to transposed <em class="parameter"><code>src</code></em>
+ area dimensions and its offsets are reset. Units are not
+updated.</p>
+<div class="refsect3">
+<a name="gwy-data-field-area-flip-xy.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>src</p></td>
+<td class="parameter_description"><p>Source data field.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>col</p></td>
+<td class="parameter_description"><p>Upper-left column coordinate in <em class="parameter"><code>src</code></em>
+.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>row</p></td>
+<td class="parameter_description"><p>Upper-left row coordinate in <em class="parameter"><code>src</code></em>
+.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>width</p></td>
+<td class="parameter_description"><p>Area width (number of columns) in <em class="parameter"><code>src</code></em>
+.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>height</p></td>
+<td class="parameter_description"><p>Area height (number of rows) in <em class="parameter"><code>src</code></em>
+.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>dest</p></td>
+<td class="parameter_description"><p>Destination data field.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>minor</p></td>
+<td class="parameter_description"><p><a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> to mirror about the minor diagonal; <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> to mirror about
+major diagonal.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: <a class="link" href="api-index-2-49.html#api-index-2.49">2.49</a></p>
+</div>
+<hr>
+<div class="refsect2">
<a name="gwy-data-field-fill"></a><h3>gwy_data_field_fill ()</h3>
<pre class="programlisting"><span class="returnvalue">void</span>
gwy_data_field_fill (<em class="parameter"><code><a class="link" href="GwyDataField.html" title="GwyDataField"><span class="type">GwyDataField</span></a> *data_field</code></em>,
@@ -2336,7 +2512,7 @@ gwy_data_field_fill (<em class="parameter"><code><a class="link" href="GwyDataFi
<p>Fills a data field with given value.</p>
<div class="refsect3">
<a name="gwy-data-field-fill.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2365,7 +2541,7 @@ gwy_data_field_clear (<em class="parameter"><code><a class="link" href="GwyDataF
<p>Fills a data field with zeroes.</p>
<div class="refsect3">
<a name="gwy-data-field-clear.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2388,7 +2564,7 @@ gwy_data_field_multiply (<em class="parameter"><code><a class="link" href="GwyDa
<p>Multiplies all values in a data field by given value.</p>
<div class="refsect3">
<a name="gwy-data-field-multiply.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2419,7 +2595,7 @@ gwy_data_field_add (<em class="parameter"><code><a class="link" href="GwyDataFie
<p>Adds given value to all values in a data field.</p>
<div class="refsect3">
<a name="gwy-data-field-add.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2453,7 +2629,7 @@ gwy_data_field_area_fill (<em class="parameter"><code><a class="link" href="GwyD
<p>Fills a rectangular part of a data field with given value.</p>
<div class="refsect3">
<a name="gwy-data-field-area-fill.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2509,7 +2685,7 @@ gwy_data_field_area_fill_mask (<em class="parameter"><code><a class="link" href=
<p>Fills a masked rectangular part of a data field with given value.</p>
<div class="refsect3">
<a name="gwy-data-field-area-fill-mask.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2574,7 +2750,7 @@ gwy_data_field_area_clear (<em class="parameter"><code><a class="link" href="Gwy
<p>Fills a rectangular part of a data field with zeroes.</p>
<div class="refsect3">
<a name="gwy-data-field-area-clear.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2623,7 +2799,7 @@ gwy_data_field_area_multiply (<em class="parameter"><code><a class="link" href="
<p>Multiplies values in a rectangular part of a data field by given value</p>
<div class="refsect3">
<a name="gwy-data-field-area-multiply.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2677,7 +2853,7 @@ gwy_data_field_area_add (<em class="parameter"><code><a class="link" href="GwyDa
<p>Adds given value to all values in a rectangular part of a data field.</p>
<div class="refsect3">
<a name="gwy-data-field-area-add.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2734,7 +2910,7 @@ gwy_data_field_get_profile (<em class="parameter"><code><a class="link" href="Gw
<p>Extracts a possibly averaged profile from data field to a data line.</p>
<div class="refsect3">
<a name="gwy-data-field-get-profile.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2803,6 +2979,99 @@ data line.</p>
</div>
<hr>
<div class="refsect2">
+<a name="gwy-data-field-get-profile-mask"></a><h3>gwy_data_field_get_profile_mask ()</h3>
+<pre class="programlisting"><span class="returnvalue">GwyXY</span> *
+gwy_data_field_get_profile_mask (<em class="parameter"><code><a class="link" href="GwyDataField.html" title="GwyDataField"><span class="type">GwyDataField</span></a> *data_field</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> *ndata</code></em>,
+ <em class="parameter"><code><a class="link" href="GwyDataField.html" title="GwyDataField"><span class="type">GwyDataField</span></a> *mask</code></em>,
+ <em class="parameter"><code><a class="link" href="libgwyprocess-gwyprocessenums.html#GwyMaskingType" title="enum GwyMaskingType"><span class="type">GwyMaskingType</span></a> masking</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> xfrom</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> yfrom</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> xto</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> yto</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> res</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> thickness</code></em>,
+ <em class="parameter"><code><a class="link" href="libgwyprocess-gwyprocessenums.html#GwyInterpolationType" title="enum GwyInterpolationType"><span class="type">GwyInterpolationType</span></a> interpolation</code></em>);</pre>
+<p>Extracts a possibly averaged profile from data field, with masking.</p>
+<p>The extracted profile can contain holes due to masking. It can also contain
+no points at all if the all data values along the profile were excluded due
+to masking – in this case <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> is returned.</p>
+<p>Unlike <a class="link" href="GwyDataField.html#gwy-data-field-get-profile" title="gwy_data_field_get_profile ()"><code class="function">gwy_data_field_get_profile()</code></a>, this function takes real coordinates
+(without offsets), not row and column indices.</p>
+<div class="refsect3">
+<a name="gwy-data-field-get-profile-mask.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>data_field</p></td>
+<td class="parameter_description"><p>A data field.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>ndata</p></td>
+<td class="parameter_description"><p>Location where to store the actual number of extracted points, which
+may differ from <em class="parameter"><code>res</code></em>
+.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>xfrom</p></td>
+<td class="parameter_description"><p>The real <em class="parameter"><code>x</code></em>
+-coordinate where the line starts.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>yfrom</p></td>
+<td class="parameter_description"><p>The real <em class="parameter"><code>y</code></em>
+-coordinate where line starts.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>xto</p></td>
+<td class="parameter_description"><p>The real <em class="parameter"><code>x</code></em>
+-coordinate where the line ends.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>yto</p></td>
+<td class="parameter_description"><p>The real <em class="parameter"><code>y</code></em>
+-coordinate where line ends.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>res</p></td>
+<td class="parameter_description"><p>Requested resolution, i.e. the number of samples to take.
+If nonpositive, sampling is chosen to match <em class="parameter"><code>data_field</code></em>
+'s.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>thickness</p></td>
+<td class="parameter_description"><p>Thickness of line to be averaged.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>interpolation</p></td>
+<td class="parameter_description"><p>Interpolation type to use.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gwy-data-field-get-profile-mask.returns"></a><h4>Returns</h4>
+<p> A newly allocated array of <span class="type">GwyXY</span> coordinare pairs, or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.
+The caller must free the returned array with <a href="/usr/share/gtk-doc/html/glibglib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a>.</p>
+</div>
+<p class="since">Since: <a class="link" href="api-index-2-49.html#api-index-2.49">2.49</a></p>
+</div>
+<hr>
+<div class="refsect2">
<a name="gwy-data-field-get-row"></a><h3>gwy_data_field_get_row ()</h3>
<pre class="programlisting"><span class="returnvalue">void</span>
gwy_data_field_get_row (<em class="parameter"><code><a class="link" href="GwyDataField.html" title="GwyDataField"><span class="type">GwyDataField</span></a> *data_field</code></em>,
@@ -2811,7 +3080,7 @@ gwy_data_field_get_row (<em class="parameter"><code><a class="link" href="GwyDat
<p>Extracts a data field row into a data line.</p>
<div class="refsect3">
<a name="gwy-data-field-get-row.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2848,7 +3117,7 @@ gwy_data_field_get_column (<em class="parameter"><code><a class="link" href="Gwy
<p>Extracts a data field column into a data line.</p>
<div class="refsect3">
<a name="gwy-data-field-get-column.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2886,7 +3155,7 @@ gwy_data_field_set_row (<em class="parameter"><code><a class="link" href="GwyDat
<p>Data line length must be equal to width of data field.</p>
<div class="refsect3">
<a name="gwy-data-field-set-row.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2923,7 +3192,7 @@ gwy_data_field_set_column (<em class="parameter"><code><a class="link" href="Gwy
<p>Data line length must be equal to height of data field.</p>
<div class="refsect3">
<a name="gwy-data-field-set-column.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2961,7 +3230,7 @@ gwy_data_field_get_row_part (<em class="parameter"><code><a class="link" href="G
<p>Extracts part of a data field row into a data line.</p>
<div class="refsect3">
<a name="gwy-data-field-get-row-part.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -3009,7 +3278,7 @@ gwy_data_field_get_column_part (<em class="parameter"><code><a class="link" href
<p>Extracts part of a data field column into a data line.</p>
<div class="refsect3">
<a name="gwy-data-field-get-column-part.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -3060,7 +3329,7 @@ gwy_data_field_set_row_part (<em class="parameter"><code><a class="link" href="G
, it is resampled to this length.</p>
<div class="refsect3">
<a name="gwy-data-field-set-row-part.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -3111,7 +3380,7 @@ gwy_data_field_set_column_part (<em class="parameter"><code><a class="link" href
, it is resampled to this length.</p>
<div class="refsect3">
<a name="gwy-data-field-set-column-part.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -3158,7 +3427,7 @@ gwy_data_field_get_xder (<em class="parameter"><code><a class="link" href="GwyDa
<p>On border points, one-side derivative is returned.</p>
<div class="refsect3">
<a name="gwy-data-field-get-xder.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -3202,7 +3471,7 @@ y direction than is usual elsewhere in Gwyddion, i.e. if values increase
with increasing row number, the returned value is negative.</p>
<div class="refsect3">
<a name="gwy-data-field-get-yder.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -3243,7 +3512,7 @@ gwy_data_field_get_angder (<em class="parameter"><code><a class="link" href="Gwy
<p>Computes derivative in direction specified by given angle.</p>
<div class="refsect3">
<a name="gwy-data-field-get-angder.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -3302,7 +3571,7 @@ or by just being completely off) <em class="parameter"><code>data_field</code></
the value of the closest point or something similar.</p>
<div class="refsect3">
<a name="gwy-data-field-average-xyz.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -3368,7 +3637,7 @@ is intended as a means to notify others data field users they should
update themselves.</p>
<div class="refsect3">
<a name="GwyDataField-data-changed.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwyprocess/html/GwyDataLine.html b/devel-docs/libgwyprocess/html/GwyDataLine.html
index 418ae27..ef22647 100644
--- a/devel-docs/libgwyprocess/html/GwyDataLine.html
+++ b/devel-docs/libgwyprocess/html/GwyDataLine.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GwyDataLine: Gwyddion Data Processing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="prev" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
@@ -36,7 +36,7 @@
</tr></table></div>
<div class="refsect1">
<a name="GwyDataLine.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -217,6 +217,14 @@
</tr>
<tr>
<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="GwyDataLine.html#gwy-data-line-copy-units" title="gwy_data_line_copy_units ()">gwy_data_line_copy_units</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
<a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#gdouble"><span class="returnvalue">gdouble</span></a>
</td>
<td class="function_name">
@@ -444,7 +452,7 @@
</div>
<div class="refsect1">
<a name="GwyDataLine.signals"></a><h2>Signals</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
<colgroup>
<col width="150px" class="signals_return">
<col width="300px" class="signals_name">
@@ -459,7 +467,7 @@
</div>
<div class="refsect1">
<a name="GwyDataLine.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -507,7 +515,7 @@ the data processing functions connected with 1D data, graphs, etc.</p>
typecasting.</p>
<div class="refsect3">
<a name="gwy-data-line-duplicate.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -531,7 +539,7 @@ gwy_data_line_new (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/
<p>Creates a new data line.</p>
<div class="refsect3">
<a name="gwy-data-line-new.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -573,7 +581,7 @@ gwy_data_line_new_alike (<em class="parameter"><code><a class="link" href="GwyDa
data.</p>
<div class="refsect3">
<a name="gwy-data-line-new-alike.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -607,7 +615,7 @@ gwy_data_line_data_changed (<em class="parameter"><code><a class="link" href="Gw
<p>Emits signal "data_changed" on a data line.</p>
<div class="refsect3">
<a name="gwy-data-line-data-changed.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -633,7 +641,7 @@ gwy_data_line_new_resampled (<em class="parameter"><code><a class="link" href="G
<a class="link" href="GwyDataLine.html#gwy-data-line-resample" title="gwy_data_line_resample ()"><code class="function">gwy_data_line_resample()</code></a>, but it is more efficient.</p>
<div class="refsect3">
<a name="gwy-data-line-new-resampled.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -677,7 +685,7 @@ line. The original values are used for resampling using a requested
interpolation alorithm.</p>
<div class="refsect3">
<a name="gwy-data-line-resample.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -717,7 +725,7 @@ gwy_data_line_resize (<em class="parameter"><code><a class="link" href="GwyDataL
sizes.</p>
<div class="refsect3">
<a name="gwy-data-line-resize.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -753,7 +761,7 @@ gwy_data_line_part_extract (<em class="parameter"><code><a class="link" href="Gw
<p>Extracts a part of a data line to a new data line.</p>
<div class="refsect3">
<a name="gwy-data-line-part-extract.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -788,14 +796,14 @@ gwy_data_line_part_extract (<em class="parameter"><code><a class="link" href="Gw
<a name="gwy-data-line-copy"></a><h3>gwy_data_line_copy ()</h3>
<pre class="programlisting"><span class="returnvalue">void</span>
gwy_data_line_copy (<em class="parameter"><code><a class="link" href="GwyDataLine.html" title="GwyDataLine"><span class="type">GwyDataLine</span></a> *data_line</code></em>,
- <em class="parameter"><code><a class="link" href="GwyDataLine.html" title="GwyDataLine"><span class="type">GwyDataLine</span></a> *b</code></em>);</pre>
+ <em class="parameter"><code><a class="link" href="GwyDataLine.html" title="GwyDataLine"><span class="type">GwyDataLine</span></a> *target</code></em>);</pre>
<p>Copies the contents of a data line to another already allocated data line
of the same size.</p>
<div class="warning">Semantic of method differs from <a class="link" href="GwyDataField.html#gwy-data-field-copy" title="gwy_data_field_copy ()"><code class="function">gwy_data_field_copy()</code></a>, it copies
only data. It will be probably changed.</div>
<div class="refsect3">
<a name="gwy-data-line-copy.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -808,7 +816,7 @@ only data. It will be probably changed.</div>
<td class="parameter_annotations"> </td>
</tr>
<tr>
-<td class="parameter_name"><p>b</p></td>
+<td class="parameter_name"><p>target</p></td>
<td class="parameter_description"><p>Destination data line.</p></td>
<td class="parameter_annotations"> </td>
</tr>
@@ -829,7 +837,7 @@ line life time. Some function may change it, most notably
<a class="link" href="GwyDataLine.html#gwy-data-line-get-data-const" title="gwy_data_line_get_data_const ()"><code class="function">gwy_data_line_get_data_const()</code></a> if you are not going to change the data.</p>
<div class="refsect3">
<a name="gwy-data-line-get-data.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -859,7 +867,7 @@ line life time. Some function may change it, most notably
<p>Use <a class="link" href="GwyDataLine.html#gwy-data-line-get-data" title="gwy_data_line_get_data ()"><code class="function">gwy_data_line_get_data()</code></a> if you want to change the data.</p>
<div class="refsect3">
<a name="gwy-data-line-get-data-const.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -885,7 +893,7 @@ gwy_data_line_get_res (<em class="parameter"><code><a class="link" href="GwyData
<p>Gets the number of data points in a data line.</p>
<div class="refsect3">
<a name="gwy-data-line-get-res.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -911,7 +919,7 @@ gwy_data_line_get_real (<em class="parameter"><code><a class="link" href="GwyDat
<p>Gets the physical size of a data line.</p>
<div class="refsect3">
<a name="gwy-data-line-get-real.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -938,7 +946,7 @@ gwy_data_line_set_real (<em class="parameter"><code><a class="link" href="GwyDat
<p>Sets the real data line size.</p>
<div class="refsect3">
<a name="gwy-data-line-set-real.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -967,7 +975,7 @@ gwy_data_line_get_offset (<em class="parameter"><code><a class="link" href="GwyD
<p>Gets the offset of data line origin.</p>
<div class="refsect3">
<a name="gwy-data-line-get-offset.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -996,7 +1004,7 @@ gwy_data_line_set_offset (<em class="parameter"><code><a class="link" href="GwyD
<a class="link" href="GwyDataLine.html#gwy-data-line-rtoi" title="gwy_data_line_rtoi ()"><code class="function">gwy_data_line_rtoi()</code></a>.</p>
<div class="refsect3">
<a name="gwy-data-line-set-offset.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1025,7 +1033,7 @@ gwy_data_line_get_si_unit_x (<em class="parameter"><code><a class="link" href="G
<p>Returns lateral SI unit of a data line.</p>
<div class="refsect3">
<a name="gwy-data-line-get-si-unit-x.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1052,7 +1060,7 @@ gwy_data_line_get_si_unit_y (<em class="parameter"><code><a class="link" href="G
<p>Returns value SI unit of a data line.</p>
<div class="refsect3">
<a name="gwy-data-line-get-si-unit-y.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1084,7 +1092,7 @@ line.</p>
reference.</p>
<div class="refsect3">
<a name="gwy-data-line-set-si-unit-x.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1111,14 +1119,14 @@ reference.</p>
<pre class="programlisting"><span class="returnvalue">void</span>
gwy_data_line_set_si_unit_y (<em class="parameter"><code><a class="link" href="GwyDataLine.html" title="GwyDataLine"><span class="type">GwyDataLine</span></a> *data_line</code></em>,
<em class="parameter"><code><a href="../GwySIUnit.html#GwySIUnit-struct"><span class="type">GwySIUnit</span></a> *si_unit</code></em>);</pre>
-<p>Sets the SI unit corresponding to the "height" (Z) dimension of a data
+<p>Sets the SI unit corresponding to the "height" (Y) dimension of a data
line.</p>
<p>It does not assume a reference on <em class="parameter"><code>si_unit</code></em>
, instead it adds its own
reference.</p>
<div class="refsect3">
<a name="gwy-data-line-set-si-unit-y.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1149,7 +1157,7 @@ gwy_data_line_get_value_format_x (<em class="parameter"><code><a class="link" hr
<p>Finds value format good for displaying coordinates of a data line.</p>
<div class="refsect3">
<a name="gwy-data-line-get-value-format-x.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1195,7 +1203,7 @@ gwy_data_line_get_value_format_y (<em class="parameter"><code><a class="link" hr
therefore it's relatively slow.</p>
<div class="refsect3">
<a name="gwy-data-line-get-value-format-y.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1230,6 +1238,37 @@ itself is returned.</p>
</div>
<hr>
<div class="refsect2">
+<a name="gwy-data-line-copy-units"></a><h3>gwy_data_line_copy_units ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gwy_data_line_copy_units (<em class="parameter"><code><a class="link" href="GwyDataLine.html" title="GwyDataLine"><span class="type">GwyDataLine</span></a> *data_line</code></em>,
+ <em class="parameter"><code><a class="link" href="GwyDataLine.html" title="GwyDataLine"><span class="type">GwyDataLine</span></a> *target</code></em>);</pre>
+<p>Sets lateral and value units of a data line to match another data line.</p>
+<div class="refsect3">
+<a name="gwy-data-line-copy-units.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>data_line</p></td>
+<td class="parameter_description"><p>A data line.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>target</p></td>
+<td class="parameter_description"><p>Destination data line.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: <a class="link" href="api-index-2-49.html#api-index-2.49">2.49</a></p>
+</div>
+<hr>
+<div class="refsect2">
<a name="gwy-data-line-itor"></a><h3>gwy_data_line_itor ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="returnvalue">gdouble</span></a>
gwy_data_line_itor (<em class="parameter"><code><a class="link" href="GwyDataLine.html" title="GwyDataLine"><span class="type">GwyDataLine</span></a> *data_line</code></em>,
@@ -1242,7 +1281,7 @@ have to use gwy_data_line_itor(<em class="parameter"><code>data_line</code></em>
+ 0.5) for that.</p>
<div class="refsect3">
<a name="gwy-data-line-itor.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1278,7 +1317,7 @@ gwy_data_line_rtoi (<em class="parameter"><code><a class="link" href="GwyDataLin
<p>That is it maps range [0..real-size] to range [0..resolution].</p>
<div class="refsect3">
<a name="gwy-data-line-rtoi.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1316,7 +1355,7 @@ Get raw data buffer with <a class="link" href="GwyDataLine.html#gwy-data-line-ge
directly instead.</p>
<div class="refsect3">
<a name="gwy-data-line-get-val.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1353,7 +1392,7 @@ gwy_data_line_set_val (<em class="parameter"><code><a class="link" href="GwyData
data buffer with <a class="link" href="GwyDataLine.html#gwy-data-line-get-data" title="gwy_data_line_get_data ()"><code class="function">gwy_data_line_get_data()</code></a> and write to it directly instead.</p>
<div class="refsect3">
<a name="gwy-data-line-set-val.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1403,7 +1442,7 @@ gwy_data_line_get_dval(<em class="parameter"><code>data_line</code></em>
real coordinates.</p>
<div class="refsect3">
<a name="gwy-data-line-get-dval.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1446,7 +1485,7 @@ coordinates.</p>
<p>See also <a class="link" href="GwyDataLine.html#gwy-data-line-get-dval" title="gwy_data_line_get_dval ()"><code class="function">gwy_data_line_get_dval()</code></a> for interpolation explanation.</p>
<div class="refsect3">
<a name="gwy-data-line-get-dval-real.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1487,7 +1526,7 @@ gwy_data_line_invert (<em class="parameter"><code><a class="link" href="GwyDataL
<p>In the case of value reflection, it's inverted about mean value.</p>
<div class="refsect3">
<a name="gwy-data-line-invert.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1521,7 +1560,7 @@ gwy_data_line_clear (<em class="parameter"><code><a class="link" href="GwyDataLi
<p>Fills a data line with zeroes.</p>
<div class="refsect3">
<a name="gwy-data-line-clear.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1544,7 +1583,7 @@ gwy_data_line_fill (<em class="parameter"><code><a class="link" href="GwyDataLin
<p>Fills a data line with specified value.</p>
<div class="refsect3">
<a name="gwy-data-line-fill.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1574,7 +1613,7 @@ gwy_data_line_multiply (<em class="parameter"><code><a class="link" href="GwyDat
<p>Multiplies all values in a data line with a specified value.</p>
<div class="refsect3">
<a name="gwy-data-line-multiply.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1604,7 +1643,7 @@ gwy_data_line_add (<em class="parameter"><code><a class="link" href="GwyDataLine
<p>Adds a specified value to all values in a data line.</p>
<div class="refsect3">
<a name="gwy-data-line-add.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1635,7 +1674,7 @@ gwy_data_line_part_clear (<em class="parameter"><code><a class="link" href="GwyD
<p>Fills a data line part with zeroes.</p>
<div class="refsect3">
<a name="gwy-data-line-part-clear.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1672,7 +1711,7 @@ gwy_data_line_part_fill (<em class="parameter"><code><a class="link" href="GwyDa
<p>Fills specified part of data line with specified number</p>
<div class="refsect3">
<a name="gwy-data-line-part-fill.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1714,7 +1753,7 @@ gwy_data_line_part_multiply (<em class="parameter"><code><a class="link" href="G
<p>Multiplies all values in a part of data line by specified value.</p>
<div class="refsect3">
<a name="gwy-data-line-part-multiply.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1756,7 +1795,7 @@ gwy_data_line_part_add (<em class="parameter"><code><a class="link" href="GwyDat
<p>Adds specified value to all values in a part of a data line.</p>
<div class="refsect3">
<a name="gwy-data-line-part-add.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1803,7 +1842,7 @@ below or above <em class="parameter"><code>threshold</code></em>
value</p>
<div class="refsect3">
<a name="gwy-data-line-threshold.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1856,7 +1895,7 @@ below or above <em class="parameter"><code>threshold</code></em>
value.</p>
<div class="refsect3">
<a name="gwy-data-line-part-threshold.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1913,7 +1952,7 @@ gwy_data_line_get_line_coeffs (<em class="parameter"><code><a class="link" href=
data[i] := data[i] - (av + bv*i);</p>
<div class="refsect3">
<a name="gwy-data-line-get-line-coeffs.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1950,7 +1989,7 @@ gwy_data_line_line_level (<em class="parameter"><code><a class="link" href="GwyD
<p>See <a class="link" href="GwyDataLine.html#gwy-data-line-get-line-coeffs" title="gwy_data_line_get_line_coeffs ()"><code class="function">gwy_data_line_get_line_coeffs()</code></a> for deails.</p>
<div class="refsect3">
<a name="gwy-data-line-line-level.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1989,7 +2028,7 @@ between line segments (on the other hand it introduces other deformations
due to discretization).</p>
<div class="refsect3">
<a name="gwy-data-line-rotate.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2028,7 +2067,7 @@ gwy_data_line_line_rotate (<em class="parameter"><code><a class="link" href="Gwy
<p>Use <a class="link" href="GwyDataLine.html#gwy-data-line-rotate" title="gwy_data_line_rotate ()"><code class="function">gwy_data_line_rotate()</code></a> instead.</p>
<div class="refsect3">
<a name="gwy-data-line-line-rotate.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2063,7 +2102,7 @@ gwy_data_line_get_der (<em class="parameter"><code><a class="link" href="GwyData
<p>Computes central derivaltion at given index in a data line.</p>
<div class="refsect3">
<a name="gwy-data-line-get-der.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2101,7 +2140,7 @@ gwy_data_line_part_fit_polynom (<em class="parameter"><code><a class="link" href
<p>Please see <a class="link" href="GwyDataLine.html#gwy-data-line-fit-polynom" title="gwy_data_line_fit_polynom ()"><code class="function">gwy_data_line_fit_polynom()</code></a> for more details.</p>
<div class="refsect3">
<a name="gwy-data-line-part-fit-polynom.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2162,7 +2201,7 @@ are indices in the data line.</p>
and <a class="link" href="GwyDataLine.html#gwy-data-line-get-line-coeffs" title="gwy_data_line_get_line_coeffs ()"><code class="function">gwy_data_line_get_line_coeffs()</code></a> because they are faster.</p>
<div class="refsect3">
<a name="gwy-data-line-fit-polynom.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2208,7 +2247,7 @@ gwy_data_line_part_subtract_polynom (<em class="parameter"><code><a class="link"
<p>Subtracts a polynomial from a part of a data line.</p>
<div class="refsect3">
<a name="gwy-data-line-part-subtract-polynom.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2255,7 +2294,7 @@ gwy_data_line_subtract_polynom (<em class="parameter"><code><a class="link" href
<p>Subtracts a polynomial from a data line.</p>
<div class="refsect3">
<a name="gwy-data-line-subtract-polynom.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2292,7 +2331,7 @@ gwy_data_line_cumulate (<em class="parameter"><code><a class="link" href="GwyDat
self.</p>
<div class="refsect3">
<a name="gwy-data-line-cumulate.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2314,7 +2353,7 @@ gwy_data_line_sqrt (<em class="parameter"><code><a class="link" href="GwyDataLin
<p>Applies <code class="function">sqrt()</code> to each element in a data line.</p>
<div class="refsect3">
<a name="gwy-data-line-sqrt.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2360,7 +2399,7 @@ is intended as a means to notify others data line users they should
update themselves.</p>
<div class="refsect3">
<a name="GwyDataLine-data-changed.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwyprocess/html/GwyGrainValue.html b/devel-docs/libgwyprocess/html/GwyGrainValue.html
index c09cfbb..fc32c4c 100644
--- a/devel-docs/libgwyprocess/html/GwyGrainValue.html
+++ b/devel-docs/libgwyprocess/html/GwyGrainValue.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GwyGrainValue: Gwyddion Data Processing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="prev" href="libgwyprocess-grains.html" title="grains">
@@ -34,7 +34,7 @@
</tr></table></div>
<div class="refsect1">
<a name="GwyGrainValue.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -201,7 +201,7 @@
</div>
<div class="refsect1">
<a name="GwyGrainValue.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -256,7 +256,7 @@ gwy_grain_value_get_group (<em class="parameter"><code><a class="link" href="Gwy
built-in grain values belong to other groups.</p>
<div class="refsect3">
<a name="gwy-grain-value-get-group.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -288,7 +288,7 @@ possible to use user-defined grain quantities in expressions for other
user-defined grain quantities.)</p>
<div class="refsect3">
<a name="gwy-grain-value-get-symbol.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -319,7 +319,7 @@ gwy_grain_value_set_symbol (<em class="parameter"><code><a class="link" href="Gw
<p>See <a class="link" href="GwyGrainValue.html#gwy-grain-value-get-symbol" title="gwy_grain_value_get_symbol ()"><code class="function">gwy_grain_value_get_symbol()</code></a> for details.</p>
<div class="refsect3">
<a name="gwy-grain-value-set-symbol.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -351,7 +351,7 @@ gwy_grain_value_get_symbol_markup (<em class="parameter"><code><a class="link" h
for graph axis labels.</p>
<div class="refsect3">
<a name="gwy-grain-value-get-symbol-markup.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -382,7 +382,7 @@ gwy_grain_value_set_symbol_markup (<em class="parameter"><code><a class="link" h
<p>See <a class="link" href="GwyGrainValue.html#gwy-grain-value-get-symbol-markup" title="gwy_grain_value_get_symbol_markup ()"><code class="function">gwy_grain_value_get_symbol_markup()</code></a> for details.</p>
<div class="refsect3">
<a name="gwy-grain-value-set-symbol-markup.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -416,7 +416,7 @@ horizontal plane have xy power of 1 and areas have 2, whereas volumes have
xy power of 2 and value power of 1.</p>
<div class="refsect3">
<a name="gwy-grain-value-get-power-xy.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -444,7 +444,7 @@ gwy_grain_value_set_power_xy (<em class="parameter"><code><a class="link" href="
<p>Sets the power of lateral dimensions in a grain value.</p>
<div class="refsect3">
<a name="gwy-grain-value-set-power-xy.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -475,7 +475,7 @@ gwy_grain_value_get_power_z (<em class="parameter"><code><a class="link" href="G
<p>See <a class="link" href="GwyGrainValue.html#gwy-grain-value-get-power-xy" title="gwy_grain_value_get_power_xy ()"><code class="function">gwy_grain_value_get_power_xy()</code></a> for details.</p>
<div class="refsect3">
<a name="gwy-grain-value-get-power-z.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -503,7 +503,7 @@ gwy_grain_value_set_power_z (<em class="parameter"><code><a class="link" href="G
<p>Sets the power of value (height) in a grain value.</p>
<div class="refsect3">
<a name="gwy-grain-value-set-power-z.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -533,7 +533,7 @@ gwy_grain_value_get_flags (<em class="parameter"><code><a class="link" href="Gwy
<p>Obtains the special attributes of a grain quantity.</p>
<div class="refsect3">
<a name="gwy-grain-value-get-flags.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -567,7 +567,7 @@ individual flags, obtain the current set with <a class="link" href="GwyGrainValu
first and then set/unset individual flags.</p>
<div class="refsect3">
<a name="gwy-grain-value-set-flags.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -598,7 +598,7 @@ gwy_grain_value_get_quantity (<em class="parameter"><code><a class="link" href="
<p>Gets the built-in grain quantity corresponding to a grain value.</p>
<div class="refsect3">
<a name="gwy-grain-value-get-quantity.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -628,7 +628,7 @@ gwy_grain_value_get_expression (<em class="parameter"><code><a class="link" href
<p>Gets the expression of a user-defined grain value.</p>
<div class="refsect3">
<a name="gwy-grain-value-get-expression.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -660,7 +660,7 @@ gwy_grain_value_set_expression (<em class="parameter"><code><a class="link" href
<p>It is an error to call this function on a built-in quantity.</p>
<div class="refsect3">
<a name="gwy-grain-value-set-expression.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -702,7 +702,7 @@ gwy_grain_value_group_name (<em class="parameter"><code><a class="link" href="Gw
<p>Obtains the name of a grain value group.</p>
<div class="refsect3">
<a name="gwy-grain-value-group-name.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -743,7 +743,7 @@ gwy_grain_values_get_grain_value (<em class="parameter"><code>const <a href="/us
name.</p>
<div class="refsect3">
<a name="gwy-grain-values-get-grain-value.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -774,7 +774,7 @@ gwy_grain_values_get_grain_value_by_symbol
its symbol.</p>
<div class="refsect3">
<a name="gwy-grain-values-get-grain-value-by-symbol.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -804,7 +804,7 @@ gwy_grain_values_get_builtin_grain_value
<p>Obtains the built-in grain value corresponding to given enum value.</p>
<div class="refsect3">
<a name="gwy-grain-values-get-builtin-grain-value.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -840,7 +840,7 @@ gwy_grain_values_calculate (<em class="parameter"><code><a href="/usr/share/gtk-
for built-in grain values.</p>
<div class="refsect3">
<a name="gwy-grain-values-calculate.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -913,7 +913,7 @@ are not used, but its dimensions determine the dimensions of
<a name="GwyGrainValueGroup"></a><h3>enum GwyGrainValueGroup</h3>
<div class="refsect3">
<a name="GwyGrainValueGroup.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
@@ -980,7 +980,7 @@ are not used, but its dimensions determine the dimensions of
<p>Special attributes of grain values.</p>
<div class="refsect3">
<a name="GwyGrainValueFlags.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
diff --git a/devel-docs/libgwyprocess/html/GwyShapeFitPreset.html b/devel-docs/libgwyprocess/html/GwyShapeFitPreset.html
index 847d49f..fb154d1 100644
--- a/devel-docs/libgwyprocess/html/GwyShapeFitPreset.html
+++ b/devel-docs/libgwyprocess/html/GwyShapeFitPreset.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GwyShapeFitPreset: Gwyddion Data Processing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="prev" href="libgwyprocess-peaks.html" title="peaks">
@@ -34,7 +34,7 @@
</tr></table></div>
<div class="refsect1">
<a name="GwyShapeFitPreset.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -184,6 +184,14 @@
</tr>
<tr>
<td class="function_type">
+<a href="../libgwyddion-GwyNLFitter.html#GwyNLFitter"><span class="returnvalue">GwyNLFitter</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="GwyShapeFitPreset.html#gwy-shape-fit-preset-quick-fit" title="gwy_shape_fit_preset_quick_fit ()">gwy_shape_fit_preset_quick_fit</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
<a href="../GwyInventory.html#GwyInventory-struct"><span class="returnvalue">GwyInventory</span></a> *
</td>
<td class="function_name">
@@ -195,7 +203,7 @@
</div>
<div class="refsect1">
<a name="GwyShapeFitPreset.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -255,7 +263,7 @@ and value units.</p>
vertical radii would be different physical quantities.</p>
<div class="refsect3">
<a name="gwy-shape-fit-preset-needs-same-units.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -282,7 +290,7 @@ gwy_shape_fit_preset_get_nparams (<em class="parameter"><code><a class="link" hr
<p>Reports the number of parameters of a 3D geometrical shape fitter preset.</p>
<div class="refsect3">
<a name="gwy-shape-fit-preset-get-nparams.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -312,7 +320,7 @@ preset.</p>
<p>The name may contain Pango markup.</p>
<div class="refsect3">
<a name="gwy-shape-fit-preset-get-param-name.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -349,7 +357,7 @@ gwy_shape_fit_preset_get_param_flags (<em class="parameter"><code><a class="link
preset.</p>
<div class="refsect3">
<a name="gwy-shape-fit-preset-get-param-flags.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -391,7 +399,7 @@ If you want to convert them to degrees for presentation to the user you must
do it explicitly.</p>
<div class="refsect3">
<a name="gwy-shape-fit-preset-get-param-units.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -437,7 +445,7 @@ gwy_shape_fit_preset_get_nsecondary (<em class="parameter"><code><a class="link"
shape fitter preset.</p>
<div class="refsect3">
<a name="gwy-shape-fit-preset-get-nsecondary.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -468,7 +476,7 @@ fitter preset.</p>
<p>The name may contain Pango markup.</p>
<div class="refsect3">
<a name="gwy-shape-fit-preset-get-secondary-name.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -506,7 +514,7 @@ gwy_shape_fit_preset_get_secondary_flags
shape fitter preset.</p>
<div class="refsect3">
<a name="gwy-shape-fit-preset-get-secondary-flags.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -545,7 +553,7 @@ gwy_shape_fit_preset_get_secondary_value
shape fitter preset.</p>
<div class="refsect3">
<a name="gwy-shape-fit-preset-get-secondary-value.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -594,7 +602,7 @@ shape fitter preset.</p>
applying the law of error propagation.</p>
<div class="refsect3">
<a name="gwy-shape-fit-preset-get-secondary-error.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -656,7 +664,7 @@ If you want to convert them to degrees for presentation to the user you must
do it explicitly.</p>
<div class="refsect3">
<a name="gwy-shape-fit-preset-get-secondary-units.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -709,7 +717,7 @@ manual experimentation but often will not be good enough as initial
parameter estimates for the fit. See also <a class="link" href="GwyShapeFitPreset.html#gwy-shape-fit-preset-guess" title="gwy_shape_fit_preset_guess ()"><code class="function">gwy_shape_fit_preset_guess()</code></a>.</p>
<div class="refsect3">
<a name="gwy-shape-fit-preset-setup.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -762,7 +770,7 @@ However, in this case they may be no better than from
<a class="link" href="GwyShapeFitPreset.html#gwy-shape-fit-preset-setup" title="gwy_shape_fit_preset_setup ()"><code class="function">gwy_shape_fit_preset_setup()</code></a>.</p>
<div class="refsect3">
<a name="gwy-shape-fit-preset-guess.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -813,7 +821,7 @@ point.</p>
instead of calling this function in a cycle.</p>
<div class="refsect3">
<a name="gwy-shape-fit-preset-get-value.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -868,7 +876,7 @@ used.</p>
<p>See also <a class="link" href="GwyShapeFitPreset.html#gwy-shape-fit-preset-calculate-xyz" title="gwy_shape_fit_preset_calculate_xyz ()"><code class="function">gwy_shape_fit_preset_calculate_xyz()</code></a>.</p>
<div class="refsect3">
<a name="gwy-shape-fit-preset-calculate-z.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -922,7 +930,7 @@ points.</p>
<p>See also <a class="link" href="GwyShapeFitPreset.html#gwy-shape-fit-preset-calculate-z" title="gwy_shape_fit_preset_calculate_z ()"><code class="function">gwy_shape_fit_preset_calculate_z()</code></a>.</p>
<div class="refsect3">
<a name="gwy-shape-fit-preset-calculate-xyz.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -969,7 +977,7 @@ gwy_shape_fit_preset_create_fitter (<em class="parameter"><code><a class="link"
<a class="link" href="GwyShapeFitPreset.html#gwy-shape-fit-preset-fit" title="gwy_shape_fit_preset_fit ()"><code class="function">gwy_shape_fit_preset_fit()</code></a> directly with <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> fitter.</p>
<div class="refsect3">
<a name="gwy-shape-fit-preset-create-fitter.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1010,7 +1018,7 @@ and pass to this function. The fitter must be created for the same preset.</p>
be obtained from the fitter. See <a href="../libgwyddion-GwyNLFitter.html#gwy-math-nlfit-fit-full"><code class="function">gwy_math_nlfit_fit_full()</code></a> for details.</p>
<div class="refsect3">
<a name="gwy-shape-fit-preset-fit.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1073,6 +1081,87 @@ itself, or a newly created fitter if it was <a href="/usr/share/gtk-doc/html/gli
</div>
<hr>
<div class="refsect2">
+<a name="gwy-shape-fit-preset-quick-fit"></a><h3>gwy_shape_fit_preset_quick_fit ()</h3>
+<pre class="programlisting"><a href="../libgwyddion-GwyNLFitter.html#GwyNLFitter"><span class="returnvalue">GwyNLFitter</span></a> *
+gwy_shape_fit_preset_quick_fit (<em class="parameter"><code><a class="link" href="GwyShapeFitPreset.html" title="GwyShapeFitPreset"><span class="type">GwyShapeFitPreset</span></a> *preset</code></em>,
+ <em class="parameter"><code><a href="../libgwyddion-GwyNLFitter.html#GwyNLFitter"><span class="type">GwyNLFitter</span></a> *fitter</code></em>,
+ <em class="parameter"><code>const <span class="type">GwyXYZ</span> *points</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> n</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> *params</code></em>,
+ <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> *fixed_param</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> *rss</code></em>);</pre>
+<p>Performs a rough non-linear least-squares fit with a 3D geometrical shape
+fitter.</p>
+<p>See <a class="link" href="GwyShapeFitPreset.html#gwy-shape-fit-preset-fit" title="gwy_shape_fit_preset_fit ()"><code class="function">gwy_shape_fit_preset_fit()</code></a> for discussion. This functions differs by
+using a reduced number of points to perform the fit (unless the input set
+is small) and may also set fitter parameters to make the least squares
+method terminate faster. The input points are reduced the same way as in
+<a class="link" href="GwySurface.html#gwy-surface-reduce-points" title="gwy_surface_reduce_points ()"><code class="function">gwy_surface_reduce_points()</code></a>.</p>
+<div class="refsect3">
+<a name="gwy-shape-fit-preset-quick-fit.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>preset</p></td>
+<td class="parameter_description"><p>A 3D geometrical shape fitting function.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>fitter</p></td>
+<td class="parameter_description"><p>A Marquardt-Levenberg nonlinear fitter already initialized for
+<em class="parameter"><code>preset</code></em>
+'s function, or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>points</p></td>
+<td class="parameter_description"><p>Array of <em class="parameter"><code>n</code></em>
+XYZ data defining the lateral coordinates and values
+to fit.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>n</p></td>
+<td class="parameter_description"><p>Number of items in <em class="parameter"><code>points</code></em>
+.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>params</p></td>
+<td class="parameter_description"><p>Fitting parameters filled with initial estimates (the fitting
+starts from the provided values).</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>fixed_param</p></td>
+<td class="parameter_description"><p>Which parameters should be treated as fixed (set
+corresponding element to <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> for them). May be <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if
+all parameters are free.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>rss</p></td>
+<td class="parameter_description"><p>Location to store the residual sum of squares, as returned by
+<a href="../libgwyddion-GwyNLFitter.html#gwy-math-nlfit-fit-idx"><code class="function">gwy_math_nlfit_fit_idx()</code></a>, may be <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gwy-shape-fit-preset-quick-fit.returns"></a><h4>Returns</h4>
+<p> Either <em class="parameter"><code>fitter</code></em>
+itself, or a newly created fitter if it was <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.</p>
+</div>
+<p class="since">Since: <a class="link" href="api-index-2-48.html#api-index-2.48">2.48</a></p>
+</div>
+<hr>
+<div class="refsect2">
<a name="gwy-shape-fit-presets"></a><h3>gwy_shape_fit_presets ()</h3>
<pre class="programlisting"><a href="../GwyInventory.html#GwyInventory-struct"><span class="returnvalue">GwyInventory</span></a> *
gwy_shape_fit_presets (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
diff --git a/devel-docs/libgwyprocess/html/GwySpectra.html b/devel-docs/libgwyprocess/html/GwySpectra.html
index 3556d7b..d4b721e 100644
--- a/devel-docs/libgwyprocess/html/GwySpectra.html
+++ b/devel-docs/libgwyprocess/html/GwySpectra.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GwySpectra: Gwyddion Data Processing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="prev" href="GwyDataField.html" title="GwyDataField">
@@ -37,7 +37,7 @@
</tr></table></div>
<div class="refsect1">
<a name="GwySpectra.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -235,7 +235,7 @@
</div>
<div class="refsect1">
<a name="GwySpectra.properties"></a><h2>Properties</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
<colgroup>
<col width="150px" class="properties_type">
<col width="300px" class="properties_name">
@@ -265,7 +265,7 @@
</div>
<div class="refsect1">
<a name="GwySpectra.signals"></a><h2>Signals</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
<colgroup>
<col width="150px" class="signals_return">
<col width="300px" class="signals_name">
@@ -280,7 +280,7 @@
</div>
<div class="refsect1">
<a name="GwySpectra.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -328,7 +328,7 @@ representing where in a data field the spectrum was acquired.</p>
typecasting.</p>
<div class="refsect3">
<a name="gwy-spectra-duplicate.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -366,7 +366,7 @@ spectra.</p>
the spectra in it.</p>
<div class="refsect3">
<a name="gwy-spectra-new-alike.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -393,7 +393,7 @@ gwy_spectra_data_changed (<em class="parameter"><code><a class="link" href="GwyS
<p>Emits signal "data_changed" on a spectra object.</p>
<div class="refsect3">
<a name="gwy-spectra-data-changed.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -416,7 +416,7 @@ gwy_spectra_get_si_unit_xy (<em class="parameter"><code><a class="link" href="Gw
<p>Gets SI unit used for the location co-ordinates of spectra.</p>
<div class="refsect3">
<a name="gwy-spectra-get-si-unit-xy.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -449,7 +449,7 @@ object.</p>
reference.</p>
<div class="refsect3">
<a name="gwy-spectra-set-si-unit-xy.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -482,7 +482,7 @@ gwy_spectra_itoxy (<em class="parameter"><code><a class="link" href="GwySpectra.
<p>Gets the coordinates of one spectrum.</p>
<div class="refsect3">
<a name="gwy-spectra-itoxy.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -525,7 +525,7 @@ gwy_spectra_xytoi (<em class="parameter"><code><a class="link" href="GwySpectra.
the coordinates x and y.</p>
<div class="refsect3">
<a name="gwy-spectra-xytoi.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -568,7 +568,7 @@ gwy_spectra_setpos (<em class="parameter"><code><a class="link" href="GwySpectra
<p>Sets the location coordinates of a spectrum.</p>
<div class="refsect3">
<a name="gwy-spectra-setpos.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -608,7 +608,7 @@ gwy_spectra_get_n_spectra (<em class="parameter"><code><a class="link" href="Gwy
<p>Gets the number of spectra in a spectra object.</p>
<div class="refsect3">
<a name="gwy-spectra-get-n-spectra.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -636,7 +636,7 @@ gwy_spectra_get_spectrum (<em class="parameter"><code><a class="link" href="GwyS
<p>Gets a dataline that contains the spectrum at index i.</p>
<div class="refsect3">
<a name="gwy-spectra-get-spectrum.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -675,7 +675,7 @@ supplied spectrum, new_spectrum. It takes its own reference
to the New_Spectrum dataline.</p>
<div class="refsect3">
<a name="gwy-spectra-set-spectrum.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -712,7 +712,7 @@ gwy_spectra_set_spectrum_selected (<em class="parameter"><code><a class="link" h
<p>Sets selected state of a spectrum in a spectra object.</p>
<div class="refsect3">
<a name="gwy-spectra-set-spectrum-selected.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -748,7 +748,7 @@ gwy_spectra_get_spectrum_selected (<em class="parameter"><code><a class="link" h
<p>Gets the selected state of a spectrum in a spectra object.</p>
<div class="refsect3">
<a name="gwy-spectra-get-spectrum-selected.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -788,7 +788,7 @@ given point.</p>
<p>List positions</p>
<div class="refsect3">
<a name="gwy-spectra-find-nearest.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -844,7 +844,7 @@ gwy_spectra_add_spectrum (<em class="parameter"><code><a class="link" href="GwyS
gwy_spectra_add takes a refference to the supplied spectrum.</p>
<div class="refsect3">
<a name="gwy-spectra-add-spectrum.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -886,7 +886,7 @@ gwy_spectra_remove_spectrum (<em class="parameter"><code><a class="link" href="G
spectra are moved down one place.</p>
<div class="refsect3">
<a name="gwy-spectra-remove-spectrum.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -916,7 +916,7 @@ gwy_spectra_get_title (<em class="parameter"><code><a class="link" href="GwySpec
<p>Gets the title of spectra.</p>
<div class="refsect3">
<a name="gwy-spectra-get-title.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -944,7 +944,7 @@ gwy_spectra_set_title (<em class="parameter"><code><a class="link" href="GwySpec
<p>Sets the title of the spectra collection.</p>
<div class="refsect3">
<a name="gwy-spectra-set-title.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -974,7 +974,7 @@ gwy_spectra_get_spectrum_x_label (<em class="parameter"><code><a class="link" hr
<p>Gets the spectrum abscissa label of a spectra object.</p>
<div class="refsect3">
<a name="gwy-spectra-get-spectrum-x-label.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1004,7 +1004,7 @@ gwy_spectra_set_spectrum_x_label (<em class="parameter"><code><a class="link" hr
<p>Sets the spectrum abscissa label of a spectra object.</p>
<div class="refsect3">
<a name="gwy-spectra-set-spectrum-x-label.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1034,7 +1034,7 @@ gwy_spectra_get_spectrum_y_label (<em class="parameter"><code><a class="link" hr
<p>Gets the spectrum ordinate label of a spectra object.</p>
<div class="refsect3">
<a name="gwy-spectra-get-spectrum-y-label.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1064,7 +1064,7 @@ gwy_spectra_set_spectrum_y_label (<em class="parameter"><code><a class="link" hr
<p>Sets the spectrum ordinate label of a spectra object.</p>
<div class="refsect3">
<a name="gwy-spectra-set-spectrum-y-label.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1094,7 +1094,7 @@ gwy_spectra_clear (<em class="parameter"><code><a class="link" href="GwySpectra.
<p>Removes all spectra from the collection.</p>
<div class="refsect3">
<a name="gwy-spectra-clear.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1170,7 +1170,7 @@ is intended as a means to notify other spectra users they should
update themselves.</p>
<div class="refsect3">
<a name="GwySpectra-data-changed.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwyprocess/html/GwySurface.html b/devel-docs/libgwyprocess/html/GwySurface.html
index 3585862..3ee80ad 100644
--- a/devel-docs/libgwyprocess/html/GwySurface.html
+++ b/devel-docs/libgwyprocess/html/GwySurface.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GwySurface: Gwyddion Data Processing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="prev" href="GwyBrick.html" title="GwyBrick">
@@ -36,7 +36,7 @@
</tr></table></div>
<div class="refsect1">
<a name="GwySurface.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -210,6 +210,14 @@
<span class="returnvalue">void</span>
</td>
<td class="function_name">
+<a class="link" href="GwySurface.html#gwy-surface-copy-units" title="gwy_surface_copy_units ()">gwy_surface_copy_units</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
<a class="link" href="GwySurface.html#gwy-data-field-copy-units-to-surface" title="gwy_data_field_copy_units_to_surface ()">gwy_data_field_copy_units_to_surface</a> <span class="c_punctuation">()</span>
</td>
</tr>
@@ -284,12 +292,20 @@
<a class="link" href="GwySurface.html#gwy-surface-xy-is-compatible" title="gwy_surface_xy_is_compatible ()">gwy_surface_xy_is_compatible</a> <span class="c_punctuation">()</span>
</td>
</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="GwySurface.html" title="GwySurface"><span class="returnvalue">GwySurface</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="GwySurface.html#gwy-surface-reduce-points" title="gwy_surface_reduce_points ()">gwy_surface_reduce_points</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
</tbody>
</table></div>
</div>
<div class="refsect1">
<a name="GwySurface.signals"></a><h2>Signals</h2>
-<div class="informaltable"><table border="0">
+<div class="informaltable"><table class="informaltable" border="0">
<colgroup>
<col width="150px" class="signals_return">
<col width="300px" class="signals_name">
@@ -304,7 +320,7 @@
</div>
<div class="refsect1">
<a name="GwySurface.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -355,7 +371,7 @@ values.</p>
<p>This is a convenience wrapper of <a href="../GwySerializable.html#gwy-serializable-duplicate"><code class="function">gwy_serializable_duplicate()</code></a>.</p>
<div class="refsect3">
<a name="gwy-surface-duplicate.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -378,7 +394,7 @@ values.</p>
<p>This is a convenience wrapper of <a href="../GwySerializable.html#gwy-serializable-clone"><code class="function">gwy_serializable_clone()</code></a>.</p>
<div class="refsect3">
<a name="gwy-surface-clone.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -425,7 +441,7 @@ gwy_surface_new_sized (<em class="parameter"><code><a href="http://developer.gno
values.</p>
<div class="refsect3">
<a name="gwy-surface-new-sized.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -453,7 +469,7 @@ gwy_surface_new_from_data (<em class="parameter"><code>const <span class="type">
<p>Creates a new surface, filling it with provided points.</p>
<div class="refsect3">
<a name="gwy-surface-new-from-data.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -492,7 +508,7 @@ new surface will not contain any points. Use <a class="link" href="GwySurface.h
completely duplicate a surface including data.</p>
<div class="refsect3">
<a name="gwy-surface-new-alike.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -528,7 +544,7 @@ change <em class="parameter"><code>surface</code></em>
's data and vice versa.</p>
<div class="refsect3">
<a name="gwy-surface-new-part.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -582,7 +598,7 @@ surface life time.</p>
<p>See <a class="link" href="GwySurface.html#gwy-surface-invalidate" title="gwy_surface_invalidate ()"><code class="function">gwy_surface_invalidate()</code></a> for some discussion.</p>
<div class="refsect3">
<a name="gwy-surface-get-data.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -614,7 +630,7 @@ field life time.</p>
<p>See <a class="link" href="GwySurface.html#gwy-surface-invalidate" title="gwy_surface_invalidate ()"><code class="function">gwy_surface_invalidate()</code></a> for some discussion.</p>
<div class="refsect3">
<a name="gwy-surface-get-data-const.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -642,7 +658,7 @@ gwy_surface_get_npoints (<em class="parameter"><code><a class="link" href="GwySu
<p>Gets the number of points in an XYZ surface.</p>
<div class="refsect3">
<a name="gwy-surface-get-npoints.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -669,7 +685,7 @@ gwy_surface_data_changed (<em class="parameter"><code><a class="link" href="GwyS
<p>Emits signal GwySurface::data-changed on a surface.</p>
<div class="refsect3">
<a name="gwy-surface-data-changed.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -696,7 +712,7 @@ another, including units and change of dimensions, you can use
<a class="link" href="GwySurface.html#gwy-surface-clone" title="gwy_surface_clone()"><code class="function">gwy_surface_clone()</code></a>.</p>
<div class="refsect3">
<a name="gwy-surface-copy.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -731,7 +747,7 @@ in the future.</p>
<p>See <a class="link" href="GwyDataField.html#gwy-data-field-invalidate" title="gwy_data_field_invalidate ()"><code class="function">gwy_data_field_invalidate()</code></a> for discussion of invalidation and examples.</p>
<div class="refsect3">
<a name="gwy-surface-invalidate.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -766,7 +782,7 @@ the field needs to have identical <em class="parameter"><code>x</code></em>
units.</p>
<div class="refsect3">
<a name="gwy-surface-set-from-data-field.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -799,7 +815,7 @@ gwy_surface_set_from_data_field_mask (<em class="parameter"><code><a class="link
<p>Fills the data of a surface from a data field, possibly using masking.</p>
<div class="refsect3">
<a name="gwy-surface-set-from-data-field-mask.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -839,7 +855,7 @@ gwy_surface_get_si_unit_xy (<em class="parameter"><code><a class="link" href="Gw
<p>Returns lateral SI unit of a surface.</p>
<div class="refsect3">
<a name="gwy-surface-get-si-unit-xy.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -867,7 +883,7 @@ gwy_surface_get_si_unit_z (<em class="parameter"><code><a class="link" href="Gwy
<p>Returns value SI unit of a surface.</p>
<div class="refsect3">
<a name="gwy-surface-get-si-unit-z.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -899,7 +915,7 @@ gwy_surface_set_si_unit_xy (<em class="parameter"><code><a class="link" href="Gw
reference.</p>
<div class="refsect3">
<a name="gwy-surface-set-si-unit-xy.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -933,7 +949,7 @@ gwy_surface_set_si_unit_z (<em class="parameter"><code><a class="link" href="Gwy
reference.</p>
<div class="refsect3">
<a name="gwy-surface-set-si-unit-z.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -965,7 +981,7 @@ gwy_surface_get_value_format_xy (<em class="parameter"><code><a class="link" hre
<p>Finds value format good for displaying coordinates of a surface.</p>
<div class="refsect3">
<a name="gwy-surface-get-value-format-xy.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1009,7 +1025,7 @@ gwy_surface_get_value_format_z (<em class="parameter"><code><a class="link" href
<p>Finds value format good for displaying values of a surface.</p>
<div class="refsect3">
<a name="gwy-surface-get-value-format-z.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1045,6 +1061,37 @@ itself is returned.</p>
</div>
<hr>
<div class="refsect2">
+<a name="gwy-surface-copy-units"></a><h3>gwy_surface_copy_units ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gwy_surface_copy_units (<em class="parameter"><code><a class="link" href="GwySurface.html" title="GwySurface"><span class="type">GwySurface</span></a> *surface</code></em>,
+ <em class="parameter"><code><a class="link" href="GwySurface.html" title="GwySurface"><span class="type">GwySurface</span></a> *target</code></em>);</pre>
+<p>Sets lateral and value units of a surface to match another surface.</p>
+<div class="refsect3">
+<a name="gwy-surface-copy-units.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>surface</p></td>
+<td class="parameter_description"><p>A surface.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>target</p></td>
+<td class="parameter_description"><p>Target surface.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: <a class="link" href="api-index-2-49.html#api-index-2.49">2.49</a></p>
+</div>
+<hr>
+<div class="refsect2">
<a name="gwy-data-field-copy-units-to-surface"></a><h3>gwy_data_field_copy_units_to_surface ()</h3>
<pre class="programlisting"><span class="returnvalue">void</span>
gwy_data_field_copy_units_to_surface (<em class="parameter"><code><a class="link" href="GwyDataField.html" title="GwyDataField"><span class="type">GwyDataField</span></a> *data_field</code></em>,
@@ -1052,7 +1099,7 @@ gwy_data_field_copy_units_to_surface (<em class="parameter"><code><a class="link
<p>Sets lateral and value units of a surface to match a data field.</p>
<div class="refsect3">
<a name="gwy-data-field-copy-units-to-surface.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1083,7 +1130,7 @@ gwy_surface_copy_units_to_data_field (<em class="parameter"><code><a class="link
<p>Sets lateral and value units of a data field to match a surface.</p>
<div class="refsect3">
<a name="gwy-surface-copy-units-to-data-field.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1118,7 +1165,7 @@ is very slow compared to simply accessing <em class="parameter"><code>data</code
C.</p>
<div class="refsect3">
<a name="gwy-surface-get.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1160,7 +1207,7 @@ is very slow compared to simply accessing <em class="parameter"><code>data</code
C.</p>
<div class="refsect3">
<a name="gwy-surface-set.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1199,7 +1246,7 @@ gwy_surface_get_xrange (<em class="parameter"><code><a class="link" href="GwySur
<p>This information is cached.</p>
<div class="refsect3">
<a name="gwy-surface-get-xrange.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1237,7 +1284,7 @@ gwy_surface_get_yrange (<em class="parameter"><code><a class="link" href="GwySur
<p>This information is cached.</p>
<div class="refsect3">
<a name="gwy-surface-get-yrange.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1275,7 +1322,7 @@ gwy_surface_get_min_max (<em class="parameter"><code><a class="link" href="GwySu
<p>This information is cached.</p>
<div class="refsect3">
<a name="gwy-surface-get-min-max.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1315,7 +1362,7 @@ in language bindings.</p>
's data.</p>
<div class="refsect3">
<a name="gwy-surface-get-data-full.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1352,7 +1399,7 @@ gwy_surface_set_data_full (<em class="parameter"><code><a class="link" href="Gwy
<p>See <a class="link" href="GwySurface.html#gwy-surface-get-data-full" title="gwy_surface_get_data_full ()"><code class="function">gwy_surface_get_data_full()</code></a> for a discussion.</p>
<div class="refsect3">
<a name="gwy-surface-set-data-full.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1399,7 +1446,7 @@ match the points order in the two surfaces to make this possible.</p>
<p>This information is cached.</p>
<div class="refsect3">
<a name="gwy-surface-xy-is-compatible.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1426,6 +1473,50 @@ are not.</p>
</div>
<p class="since">Since: <a class="link" href="api-index-2-45.html#api-index-2.45">2.45</a></p>
</div>
+<hr>
+<div class="refsect2">
+<a name="gwy-surface-reduce-points"></a><h3>gwy_surface_reduce_points ()</h3>
+<pre class="programlisting"><a class="link" href="GwySurface.html" title="GwySurface"><span class="returnvalue">GwySurface</span></a> *
+gwy_surface_reduce_points (<em class="parameter"><code><a class="link" href="GwySurface.html" title="GwySurface"><span class="type">GwySurface</span></a> *surface</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> npoints</code></em>);</pre>
+<p>Creates a similar surface with smaller number of points.</p>
+<p>The functions attempts to choose points from the original surface to cover
+its full area, even though points from dense regions are still more likely
+to be found in the result than points from sparse regions. As the main
+purpose to enable quick rough operations that may take long time with the
+full surface, the focus is on speed not fidelity.</p>
+<p>The function may employ random selection and thus be be non-deterministic.</p>
+<div class="refsect3">
+<a name="gwy-surface-reduce-points.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>surface</p></td>
+<td class="parameter_description"><p>A surface.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>npoints</p></td>
+<td class="parameter_description"><p>Requested number of points in the reduced surface. If it is not
+smaller than the number of points in <em class="parameter"><code>surface</code></em>
+then the function
+behaves like <a class="link" href="GwySurface.html#gwy-surface-duplicate" title="gwy_surface_duplicate()"><code class="function">gwy_surface_duplicate()</code></a>.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gwy-surface-reduce-points.returns"></a><h4>Returns</h4>
+<p> A newly created <a class="link" href="GwySurface.html" title="GwySurface"><span class="type">GwySurface</span></a> with reduced number of points.</p>
+</div>
+<p class="since">Since: <a class="link" href="api-index-2-48.html#api-index-2.48">2.48</a></p>
+</div>
</div>
<div class="refsect1">
<a name="GwySurface.other_details"></a><h2>Types and Values</h2>
@@ -1441,7 +1532,7 @@ are not.</p>
accessed for reading. To set them, you must use the <a class="link" href="GwySurface.html" title="GwySurface"><span class="type">GwySurface</span></a> methods.</p>
<div class="refsect3">
<a name="GwySurface.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="struct_members_name">
<col class="struct_members_description">
@@ -1488,7 +1579,7 @@ is intended as a means to notify others data field users they should
update themselves.</p>
<div class="refsect3">
<a name="GwySurface-data-changed.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwyprocess/html/GwyTriangulation.html b/devel-docs/libgwyprocess/html/GwyTriangulation.html
index 242eaed..2863c51 100644
--- a/devel-docs/libgwyprocess/html/GwyTriangulation.html
+++ b/devel-docs/libgwyprocess/html/GwyTriangulation.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>triangulation: Gwyddion Data Processing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="prev" href="libgwyprocess-tip.html" title="tip">
@@ -34,7 +34,7 @@
</tr></table></div>
<div class="refsect1">
<a name="GwyTriangulation.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -109,7 +109,7 @@
</div>
<div class="refsect1">
<a name="GwyTriangulation.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -187,7 +187,7 @@ returned by methods such as <a class="link" href="GwyTriangulation.html#gwy-tria
then.</p>
<div class="refsect3">
<a name="gwy-triangulation-triangulate.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -249,7 +249,7 @@ providing user feedback for large triangulations and cancelling the
procedure upon request.</p>
<div class="refsect3">
<a name="gwy-triangulation-triangulate-iterative.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -316,7 +316,7 @@ offsets of <em class="parameter"><code>dfield</code></em>
.</p>
<div class="refsect3">
<a name="gwy-triangulation-interpolate.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -365,7 +365,7 @@ gwy_triangulation_data_free (<em class="parameter"><code><a class="link" href="G
members as they are owned by the triangulation object.</p>
<div class="refsect3">
<a name="gwy-triangulation-data-free.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -392,7 +392,7 @@ gwy_triangulation_delaunay (<em class="parameter"><code><a class="link" href="Gw
<a class="link" href="GwyTriangulation.html#gwy-triangulation-triangulate" title="gwy_triangulation_triangulate ()"><code class="function">gwy_triangulation_triangulate()</code></a>.</p>
<div class="refsect3">
<a name="gwy-triangulation-delaunay.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -433,7 +433,7 @@ and <a class="link" href="GwyTriangulation.html#GWY-TRIANGULATION-NONE:CAPS" tit
[] lists sequentially the boundary points.</p>
<div class="refsect3">
<a name="gwy-triangulation-boundary.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -483,7 +483,7 @@ obtain the real position in <em class="parameter"><code>vpoints</code></em>
point numbering.</p>
<div class="refsect3">
<a name="gwy-triangulation-voronoi.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -579,7 +579,7 @@ provided here. See the descriptions of individual methods returning
<a class="link" href="GwyTriangulation.html#GwyTriangulationData" title="GwyTriangulationData"><span class="type">GwyTriangulationData</span></a>.</p>
<div class="refsect3">
<a name="GwyTriangulationData.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="struct_members_name">
<col class="struct_members_description">
diff --git a/devel-docs/libgwyprocess/html/api-index-2-1.html b/devel-docs/libgwyprocess/html/api-index-2-1.html
index 32ef3fc..ce4a5ec 100644
--- a/devel-docs/libgwyprocess/html/api-index-2-1.html
+++ b/devel-docs/libgwyprocess/html/api-index-2-1.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.1: Gwyddion Data Processing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="prev" href="api-index-deprec.html" title="Index of deprecated symbols">
diff --git a/devel-docs/libgwyprocess/html/api-index-2-11.html b/devel-docs/libgwyprocess/html/api-index-2-11.html
index c74c6f5..e0b4ae6 100644
--- a/devel-docs/libgwyprocess/html/api-index-2-11.html
+++ b/devel-docs/libgwyprocess/html/api-index-2-11.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.11: Gwyddion Data Processing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="prev" href="api-index-2-8.html" title="Index of new symbols in 2.8">
diff --git a/devel-docs/libgwyprocess/html/api-index-2-12.html b/devel-docs/libgwyprocess/html/api-index-2-12.html
index 06aab18..62627e5 100644
--- a/devel-docs/libgwyprocess/html/api-index-2-12.html
+++ b/devel-docs/libgwyprocess/html/api-index-2-12.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.12: Gwyddion Data Processing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="prev" href="api-index-2-11.html" title="Index of new symbols in 2.11">
diff --git a/devel-docs/libgwyprocess/html/api-index-2-18.html b/devel-docs/libgwyprocess/html/api-index-2-18.html
index 2e16c88..c38993b 100644
--- a/devel-docs/libgwyprocess/html/api-index-2-18.html
+++ b/devel-docs/libgwyprocess/html/api-index-2-18.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.18: Gwyddion Data Processing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="prev" href="api-index-2-12.html" title="Index of new symbols in 2.12">
diff --git a/devel-docs/libgwyprocess/html/api-index-2-2.html b/devel-docs/libgwyprocess/html/api-index-2-2.html
index 46cd590..3ac9a6b 100644
--- a/devel-docs/libgwyprocess/html/api-index-2-2.html
+++ b/devel-docs/libgwyprocess/html/api-index-2-2.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.2: Gwyddion Data Processing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="prev" href="api-index-2-1.html" title="Index of new symbols in 2.1">
diff --git a/devel-docs/libgwyprocess/html/api-index-2-22.html b/devel-docs/libgwyprocess/html/api-index-2-22.html
index 84d9ec3..ed5ea49 100644
--- a/devel-docs/libgwyprocess/html/api-index-2-22.html
+++ b/devel-docs/libgwyprocess/html/api-index-2-22.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.22: Gwyddion Data Processing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="prev" href="api-index-2-18.html" title="Index of new symbols in 2.18">
diff --git a/devel-docs/libgwyprocess/html/api-index-2-23.html b/devel-docs/libgwyprocess/html/api-index-2-23.html
index ccd4e62..8a52fd2 100644
--- a/devel-docs/libgwyprocess/html/api-index-2-23.html
+++ b/devel-docs/libgwyprocess/html/api-index-2-23.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.23: Gwyddion Data Processing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="prev" href="api-index-2-22.html" title="Index of new symbols in 2.22">
diff --git a/devel-docs/libgwyprocess/html/api-index-2-26.html b/devel-docs/libgwyprocess/html/api-index-2-26.html
index 4fefdbc..c87be96 100644
--- a/devel-docs/libgwyprocess/html/api-index-2-26.html
+++ b/devel-docs/libgwyprocess/html/api-index-2-26.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.26: Gwyddion Data Processing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="prev" href="api-index-2-23.html" title="Index of new symbols in 2.23">
diff --git a/devel-docs/libgwyprocess/html/api-index-2-29.html b/devel-docs/libgwyprocess/html/api-index-2-29.html
index ddd06b2..3c5453f 100644
--- a/devel-docs/libgwyprocess/html/api-index-2-29.html
+++ b/devel-docs/libgwyprocess/html/api-index-2-29.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.29: Gwyddion Data Processing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="prev" href="api-index-2-26.html" title="Index of new symbols in 2.26">
diff --git a/devel-docs/libgwyprocess/html/api-index-2-3.html b/devel-docs/libgwyprocess/html/api-index-2-3.html
index 2fd29c0..c82e928 100644
--- a/devel-docs/libgwyprocess/html/api-index-2-3.html
+++ b/devel-docs/libgwyprocess/html/api-index-2-3.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.3: Gwyddion Data Processing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="prev" href="api-index-2-2.html" title="Index of new symbols in 2.2">
diff --git a/devel-docs/libgwyprocess/html/api-index-2-30.html b/devel-docs/libgwyprocess/html/api-index-2-30.html
index 267e31f..ce7fbd4 100644
--- a/devel-docs/libgwyprocess/html/api-index-2-30.html
+++ b/devel-docs/libgwyprocess/html/api-index-2-30.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.30: Gwyddion Data Processing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="prev" href="api-index-2-29.html" title="Index of new symbols in 2.29">
diff --git a/devel-docs/libgwyprocess/html/api-index-2-31.html b/devel-docs/libgwyprocess/html/api-index-2-31.html
index 3314aaa..5569c35 100644
--- a/devel-docs/libgwyprocess/html/api-index-2-31.html
+++ b/devel-docs/libgwyprocess/html/api-index-2-31.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.31: Gwyddion Data Processing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="prev" href="api-index-2-30.html" title="Index of new symbols in 2.30">
diff --git a/devel-docs/libgwyprocess/html/api-index-2-32.html b/devel-docs/libgwyprocess/html/api-index-2-32.html
index 6f50b31..d04e4eb 100644
--- a/devel-docs/libgwyprocess/html/api-index-2-32.html
+++ b/devel-docs/libgwyprocess/html/api-index-2-32.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.32: Gwyddion Data Processing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="prev" href="api-index-2-31.html" title="Index of new symbols in 2.31">
diff --git a/devel-docs/libgwyprocess/html/api-index-2-34.html b/devel-docs/libgwyprocess/html/api-index-2-34.html
index 2948597..d19c758 100644
--- a/devel-docs/libgwyprocess/html/api-index-2-34.html
+++ b/devel-docs/libgwyprocess/html/api-index-2-34.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.34: Gwyddion Data Processing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="prev" href="api-index-2-32.html" title="Index of new symbols in 2.32">
diff --git a/devel-docs/libgwyprocess/html/api-index-2-35.html b/devel-docs/libgwyprocess/html/api-index-2-35.html
index 4564d2c..2165eab 100644
--- a/devel-docs/libgwyprocess/html/api-index-2-35.html
+++ b/devel-docs/libgwyprocess/html/api-index-2-35.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.35: Gwyddion Data Processing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="prev" href="api-index-2-34.html" title="Index of new symbols in 2.34">
diff --git a/devel-docs/libgwyprocess/html/api-index-2-36.html b/devel-docs/libgwyprocess/html/api-index-2-36.html
index 7e31c07..b0a7e23 100644
--- a/devel-docs/libgwyprocess/html/api-index-2-36.html
+++ b/devel-docs/libgwyprocess/html/api-index-2-36.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.36: Gwyddion Data Processing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="prev" href="api-index-2-35.html" title="Index of new symbols in 2.35">
diff --git a/devel-docs/libgwyprocess/html/api-index-2-37.html b/devel-docs/libgwyprocess/html/api-index-2-37.html
index 0e43e8a..ca3f57d 100644
--- a/devel-docs/libgwyprocess/html/api-index-2-37.html
+++ b/devel-docs/libgwyprocess/html/api-index-2-37.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.37: Gwyddion Data Processing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="prev" href="api-index-2-36.html" title="Index of new symbols in 2.36">
diff --git a/devel-docs/libgwyprocess/html/api-index-2-38.html b/devel-docs/libgwyprocess/html/api-index-2-38.html
index 3063662..858ebf3 100644
--- a/devel-docs/libgwyprocess/html/api-index-2-38.html
+++ b/devel-docs/libgwyprocess/html/api-index-2-38.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.38: Gwyddion Data Processing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="prev" href="api-index-2-37.html" title="Index of new symbols in 2.37">
diff --git a/devel-docs/libgwyprocess/html/api-index-2-4.html b/devel-docs/libgwyprocess/html/api-index-2-4.html
index 879997b..d2a7678 100644
--- a/devel-docs/libgwyprocess/html/api-index-2-4.html
+++ b/devel-docs/libgwyprocess/html/api-index-2-4.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.4: Gwyddion Data Processing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="prev" href="api-index-2-3.html" title="Index of new symbols in 2.3">
diff --git a/devel-docs/libgwyprocess/html/api-index-2-40.html b/devel-docs/libgwyprocess/html/api-index-2-40.html
index 03a521e..2a36403 100644
--- a/devel-docs/libgwyprocess/html/api-index-2-40.html
+++ b/devel-docs/libgwyprocess/html/api-index-2-40.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.40: Gwyddion Data Processing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="prev" href="api-index-2-38.html" title="Index of new symbols in 2.38">
diff --git a/devel-docs/libgwyprocess/html/api-index-2-41.html b/devel-docs/libgwyprocess/html/api-index-2-41.html
index f168280..fd8b5f6 100644
--- a/devel-docs/libgwyprocess/html/api-index-2-41.html
+++ b/devel-docs/libgwyprocess/html/api-index-2-41.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.41: Gwyddion Data Processing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="prev" href="api-index-2-40.html" title="Index of new symbols in 2.40">
diff --git a/devel-docs/libgwyprocess/html/api-index-2-42.html b/devel-docs/libgwyprocess/html/api-index-2-42.html
index 9d35ca2..72f06e6 100644
--- a/devel-docs/libgwyprocess/html/api-index-2-42.html
+++ b/devel-docs/libgwyprocess/html/api-index-2-42.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.42: Gwyddion Data Processing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="prev" href="api-index-2-41.html" title="Index of new symbols in 2.41">
diff --git a/devel-docs/libgwyprocess/html/api-index-2-43.html b/devel-docs/libgwyprocess/html/api-index-2-43.html
index fbf1f3b..d529a29 100644
--- a/devel-docs/libgwyprocess/html/api-index-2-43.html
+++ b/devel-docs/libgwyprocess/html/api-index-2-43.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.43: Gwyddion Data Processing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="prev" href="api-index-2-42.html" title="Index of new symbols in 2.42">
diff --git a/devel-docs/libgwyprocess/html/api-index-2-44.html b/devel-docs/libgwyprocess/html/api-index-2-44.html
index b1db14e..2d1baab 100644
--- a/devel-docs/libgwyprocess/html/api-index-2-44.html
+++ b/devel-docs/libgwyprocess/html/api-index-2-44.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.44: Gwyddion Data Processing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="prev" href="api-index-2-43.html" title="Index of new symbols in 2.43">
diff --git a/devel-docs/libgwyprocess/html/api-index-2-45.html b/devel-docs/libgwyprocess/html/api-index-2-45.html
index 8d687ff..c970ef8 100644
--- a/devel-docs/libgwyprocess/html/api-index-2-45.html
+++ b/devel-docs/libgwyprocess/html/api-index-2-45.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.45: Gwyddion Data Processing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="prev" href="api-index-2-44.html" title="Index of new symbols in 2.44">
diff --git a/devel-docs/libgwyprocess/html/api-index-2-46.html b/devel-docs/libgwyprocess/html/api-index-2-46.html
index 9c66911..342192d 100644
--- a/devel-docs/libgwyprocess/html/api-index-2-46.html
+++ b/devel-docs/libgwyprocess/html/api-index-2-46.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.46: Gwyddion Data Processing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="prev" href="api-index-2-45.html" title="Index of new symbols in 2.45">
diff --git a/devel-docs/libgwyprocess/html/api-index-2-47.html b/devel-docs/libgwyprocess/html/api-index-2-47.html
index b647a15..38cd99e 100644
--- a/devel-docs/libgwyprocess/html/api-index-2-47.html
+++ b/devel-docs/libgwyprocess/html/api-index-2-47.html
@@ -3,10 +3,11 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.47: Gwyddion Data Processing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="prev" href="api-index-2-46.html" title="Index of new symbols in 2.46">
+<link rel="next" href="api-index-2-48.html" title="Index of new symbols in 2.48">
<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
@@ -22,7 +23,7 @@
<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
<td><img src="up-insensitive.png" width="16" height="16" border="0"></td>
<td><a accesskey="p" href="api-index-2-46.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><img src="right-insensitive.png" width="16" height="16" border="0"></td>
+<td><a accesskey="n" href="api-index-2-48.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
</tr></table>
<div class="index">
<div class="titlepage"><div><div><h1 class="title">
diff --git a/devel-docs/libgwyprocess/html/api-index-2-48.html b/devel-docs/libgwyprocess/html/api-index-2-48.html
new file mode 100644
index 0000000..236297c
--- /dev/null
+++ b/devel-docs/libgwyprocess/html/api-index-2-48.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Index of new symbols in 2.48: Gwyddion Data Processing Library Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
+<link rel="home" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
+<link rel="up" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
+<link rel="prev" href="api-index-2-47.html" title="Index of new symbols in 2.47">
+<link rel="next" href="api-index-2-49.html" title="Index of new symbols in 2.49">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts"><span id="nav_index"><a class="shortcut" href="#idxD">D</a>
+ <span class="dim">|</span>
+ <a class="shortcut" href="#idxS">S</a></span></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><img src="up-insensitive.png" width="16" height="16" border="0"></td>
+<td><a accesskey="p" href="api-index-2-47.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="api-index-2-49.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="index">
+<div class="titlepage"><div><div><h1 class="title">
+<a name="api-index-2-48"></a>Index of new symbols in 2.48</h1></div></div></div>
+<a name="idx"></a><a name="idxD"></a><h3 class="title">D</h3>
+<dt>
+<a class="link" href="libgwyprocess-grains.html#gwy-data-field-grains-thin" title="gwy_data_field_grains_thin ()">gwy_data_field_grains_thin</a>, function in <a class="link" href="libgwyprocess-grains.html" title="grains">grains</a>
+</dt>
+<dd></dd>
+<a name="idxS"></a><h3 class="title">S</h3>
+<dt>
+<a class="link" href="GwyShapeFitPreset.html#gwy-shape-fit-preset-quick-fit" title="gwy_shape_fit_preset_quick_fit ()">gwy_shape_fit_preset_quick_fit</a>, function in <a class="link" href="GwyShapeFitPreset.html" title="GwyShapeFitPreset">GwyShapeFitPreset</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GwySurface.html#gwy-surface-reduce-points" title="gwy_surface_reduce_points ()">gwy_surface_reduce_points</a>, function in <a class="link" href="GwySurface.html" title="GwySurface">GwySurface</a>
+</dt>
+<dd></dd>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.19</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/devel-docs/libgwyprocess/html/api-index-2-49.html b/devel-docs/libgwyprocess/html/api-index-2-49.html
new file mode 100644
index 0000000..f91d476
--- /dev/null
+++ b/devel-docs/libgwyprocess/html/api-index-2-49.html
@@ -0,0 +1,117 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Index of new symbols in 2.49: Gwyddion Data Processing Library Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
+<link rel="home" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
+<link rel="up" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
+<link rel="prev" href="api-index-2-48.html" title="Index of new symbols in 2.48">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
+<td width="100%" align="left" class="shortcuts"><span id="nav_index"><a class="shortcut" href="#idxA">A</a>
+ <span class="dim">|</span>
+ <a class="shortcut" href="#idxB">B</a>
+ <span class="dim">|</span>
+ <a class="shortcut" href="#idxC">C</a>
+ <span class="dim">|</span>
+ <a class="shortcut" href="#idxD">D</a>
+ <span class="dim">|</span>
+ <a class="shortcut" href="#idxS">S</a></span></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
+<td><img src="up-insensitive.png" width="16" height="16" border="0"></td>
+<td><a accesskey="p" href="api-index-2-48.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><img src="right-insensitive.png" width="16" height="16" border="0"></td>
+</tr></table>
+<div class="index">
+<div class="titlepage"><div><div><h1 class="title">
+<a name="api-index-2-49"></a>Index of new symbols in 2.49</h1></div></div></div>
+<a name="idx"></a><a name="idxA"></a><h3 class="title">A</h3>
+<dt>
+<a class="link" href="libgwyprocess-gwyprocessenums.html#GwyAffineScalingType" title="enum GwyAffineScalingType">GwyAffineScalingType</a>, enum in <a class="link" href="libgwyprocess-gwyprocessenums.html" title="gwyprocessenums">gwyprocessenums</a>
+</dt>
+<dd></dd>
+<a name="idxB"></a><h3 class="title">B</h3>
+<dt>
+<a class="link" href="GwyBrick.html#gwy-brick-copy-units" title="gwy_brick_copy_units ()">gwy_brick_copy_units</a>, function in <a class="link" href="GwyBrick.html" title="GwyBrick">GwyBrick</a>
+</dt>
+<dd></dd>
+<a name="idxC"></a><h3 class="title">C</h3>
+<dt>
+<a class="link" href="libgwyprocess-gwyprocessenums.html#gwy-computation-state-get-fraction" title="gwy_computation_state_get_fraction ()">gwy_computation_state_get_fraction</a>, function in <a class="link" href="libgwyprocess-gwyprocessenums.html" title="gwyprocessenums">gwyprocessenums</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libgwyprocess-gwyprocessenums.html#gwy-computation-state-get-state" title="gwy_computation_state_get_state ()">gwy_computation_state_get_state</a>, function in <a class="link" href="libgwyprocess-gwyprocessenums.html" title="gwyprocessenums">gwyprocessenums</a>
+</dt>
+<dd></dd>
+<a name="idxD"></a><h3 class="title">D</h3>
+<dt>
+<a class="link" href="libgwyprocess-correct.html#gwy-data-field-affine-prepare" title="gwy_data_field_affine_prepare ()">gwy_data_field_affine_prepare</a>, function in <a class="link" href="libgwyprocess-correct.html" title="correct">correct</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libgwyprocess-stats.html#gwy-data-field-area-cda-mask" title="gwy_data_field_area_cda_mask ()">gwy_data_field_area_cda_mask</a>, function in <a class="link" href="libgwyprocess-stats.html" title="stats">stats</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libgwyprocess-stats.html#gwy-data-field-area-da-mask" title="gwy_data_field_area_da_mask ()">gwy_data_field_area_da_mask</a>, function in <a class="link" href="libgwyprocess-stats.html" title="stats">stats</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libgwyprocess-filters.html#gwy-data-field-area-ext-convolve" title="gwy_data_field_area_ext_convolve ()">gwy_data_field_area_ext_convolve</a>, function in <a class="link" href="libgwyprocess-filters.html" title="filters">filters</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libgwyprocess-filters.html#gwy-data-field-area-ext-row-convolve" title="gwy_data_field_area_ext_row_convolve ()">gwy_data_field_area_ext_row_convolve</a>, function in <a class="link" href="libgwyprocess-filters.html" title="filters">filters</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GwyDataField.html#gwy-data-field-area-flip-xy" title="gwy_data_field_area_flip_xy ()">gwy_data_field_area_flip_xy</a>, function in <a class="link" href="GwyDataField.html" title="GwyDataField">GwyDataField</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GwyDataField.html#gwy-data-field-copy-units" title="gwy_data_field_copy_units ()">gwy_data_field_copy_units</a>, function in <a class="link" href="GwyDataField.html" title="GwyDataField">GwyDataField</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GwyDataField.html#gwy-data-field-flip-xy" title="gwy_data_field_flip_xy ()">gwy_data_field_flip_xy</a>, function in <a class="link" href="GwyDataField.html" title="GwyDataField">GwyDataField</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GwyDataField.html#gwy-data-field-get-profile-mask" title="gwy_data_field_get_profile_mask ()">gwy_data_field_get_profile_mask</a>, function in <a class="link" href="GwyDataField.html" title="GwyDataField">GwyDataField</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libgwyprocess-elliptic.html#gwy-data-field-local-maximum" title="gwy_data_field_local_maximum ()">gwy_data_field_local_maximum</a>, function in <a class="link" href="libgwyprocess-elliptic.html" title="elliptic">elliptic</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libgwyprocess-correct.html#gwy-data-field-measure-lattice-acf" title="gwy_data_field_measure_lattice_acf ()">gwy_data_field_measure_lattice_acf</a>, function in <a class="link" href="libgwyprocess-correct.html" title="correct">correct</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libgwyprocess-correct.html#gwy-data-field-measure-lattice-psdf" title="gwy_data_field_measure_lattice_psdf ()">gwy_data_field_measure_lattice_psdf</a>, function in <a class="link" href="libgwyprocess-correct.html" title="correct">correct</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GwyDataLine.html#gwy-data-line-copy-units" title="gwy_data_line_copy_units ()">gwy_data_line_copy_units</a>, function in <a class="link" href="GwyDataLine.html" title="GwyDataLine">GwyDataLine</a>
+</dt>
+<dd></dd>
+<a name="idxS"></a><h3 class="title">S</h3>
+<dt>
+<a class="link" href="libgwyprocess-GwySpline.html#gwy-spline-copy" title="gwy_spline_copy ()">gwy_spline_copy</a>, function in <a class="link" href="libgwyprocess-GwySpline.html" title="GwySpline">GwySpline</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="GwySurface.html#gwy-surface-copy-units" title="gwy_surface_copy_units ()">gwy_surface_copy_units</a>, function in <a class="link" href="GwySurface.html" title="GwySurface">GwySurface</a>
+</dt>
+<dd></dd>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.19</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/devel-docs/libgwyprocess/html/api-index-2-5.html b/devel-docs/libgwyprocess/html/api-index-2-5.html
index b6408f0..9be2559 100644
--- a/devel-docs/libgwyprocess/html/api-index-2-5.html
+++ b/devel-docs/libgwyprocess/html/api-index-2-5.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.5: Gwyddion Data Processing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="prev" href="api-index-2-4.html" title="Index of new symbols in 2.4">
diff --git a/devel-docs/libgwyprocess/html/api-index-2-7.html b/devel-docs/libgwyprocess/html/api-index-2-7.html
index eb73214..9c6517a 100644
--- a/devel-docs/libgwyprocess/html/api-index-2-7.html
+++ b/devel-docs/libgwyprocess/html/api-index-2-7.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.7: Gwyddion Data Processing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="prev" href="api-index-2-5.html" title="Index of new symbols in 2.5">
diff --git a/devel-docs/libgwyprocess/html/api-index-2-8.html b/devel-docs/libgwyprocess/html/api-index-2-8.html
index b922af5..f02ec51 100644
--- a/devel-docs/libgwyprocess/html/api-index-2-8.html
+++ b/devel-docs/libgwyprocess/html/api-index-2-8.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of new symbols in 2.8: Gwyddion Data Processing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="prev" href="api-index-2-7.html" title="Index of new symbols in 2.7">
diff --git a/devel-docs/libgwyprocess/html/api-index-all.html b/devel-docs/libgwyprocess/html/api-index-all.html
index 6fc1139..6adc4d3 100644
--- a/devel-docs/libgwyprocess/html/api-index-all.html
+++ b/devel-docs/libgwyprocess/html/api-index-all.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of all symbols: Gwyddion Data Processing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="prev" href="libgwyprocess-gwyprocessenums.html" title="gwyprocessenums">
@@ -15,6 +15,8 @@
<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
<td width="100%" align="left" class="shortcuts"><span id="nav_index"><a class="shortcut" href="#idx2">2</a>
<span class="dim">|</span>
+ <a class="shortcut" href="#idxA">A</a>
+ <span class="dim">|</span>
<a class="shortcut" href="#idxB">B</a>
<span class="dim">|</span>
<a class="shortcut" href="#idxC">C</a>
@@ -61,6 +63,11 @@
<a class="link" href="libgwyprocess-gwyprocessenums.html#gwy-2d-cwt-wavelet-type-get-enum" title="gwy_2d_cwt_wavelet_type_get_enum ()">gwy_2d_cwt_wavelet_type_get_enum</a>, function in <a class="link" href="libgwyprocess-gwyprocessenums.html" title="gwyprocessenums">gwyprocessenums</a>
</dt>
<dd></dd>
+<a name="idxA"></a><h3 class="title">A</h3>
+<dt>
+<a class="link" href="libgwyprocess-gwyprocessenums.html#GwyAffineScalingType" title="enum GwyAffineScalingType">GwyAffineScalingType</a>, enum in <a class="link" href="libgwyprocess-gwyprocessenums.html" title="gwyprocessenums">gwyprocessenums</a>
+</dt>
+<dd></dd>
<a name="idxB"></a><h3 class="title">B</h3>
<dt>
<a class="link" href="GwyBrick.html#GwyBrick-struct" title="struct GwyBrick">GwyBrick</a>, struct in <a class="link" href="GwyBrick.html" title="GwyBrick">GwyBrick</a>
@@ -87,6 +94,10 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="GwyBrick.html#gwy-brick-copy-units" title="gwy_brick_copy_units ()">gwy_brick_copy_units</a>, function in <a class="link" href="GwyBrick.html" title="GwyBrick">GwyBrick</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="GwyBrick.html#gwy-brick-data-changed" title="gwy_brick_data_changed ()">gwy_brick_data_changed</a>, function in <a class="link" href="GwyBrick.html" title="GwyBrick">GwyBrick</a>
</dt>
<dd></dd>
@@ -532,11 +543,15 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="libgwyprocess-gwyprocessenums.html#GwyComputationState" title="GwyComputationState">GwyComputationState</a>, struct in <a class="link" href="libgwyprocess-gwyprocessenums.html" title="gwyprocessenums">gwyprocessenums</a>
+<a class="link" href="libgwyprocess-gwyprocessenums.html#GwyComputationStateType" title="enum GwyComputationStateType">GwyComputationStateType</a>, enum in <a class="link" href="libgwyprocess-gwyprocessenums.html" title="gwyprocessenums">gwyprocessenums</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="libgwyprocess-gwyprocessenums.html#GwyComputationStateType" title="enum GwyComputationStateType">GwyComputationStateType</a>, enum in <a class="link" href="libgwyprocess-gwyprocessenums.html" title="gwyprocessenums">gwyprocessenums</a>
+<a class="link" href="libgwyprocess-gwyprocessenums.html#gwy-computation-state-get-fraction" title="gwy_computation_state_get_fraction ()">gwy_computation_state_get_fraction</a>, function in <a class="link" href="libgwyprocess-gwyprocessenums.html" title="gwyprocessenums">gwyprocessenums</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libgwyprocess-gwyprocessenums.html#gwy-computation-state-get-state" title="gwy_computation_state_get_state ()">gwy_computation_state_get_state</a>, function in <a class="link" href="libgwyprocess-gwyprocessenums.html" title="gwyprocessenums">gwyprocessenums</a>
</dt>
<dd></dd>
<dt>
@@ -637,6 +652,10 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="libgwyprocess-correct.html#gwy-data-field-affine-prepare" title="gwy_data_field_affine_prepare ()">gwy_data_field_affine_prepare</a>, function in <a class="link" href="libgwyprocess-correct.html" title="correct">correct</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="libgwyprocess-stats.html#gwy-data-field-angular-average" title="gwy_data_field_angular_average ()">gwy_data_field_angular_average</a>, function in <a class="link" href="libgwyprocess-stats.html" title="stats">stats</a>
</dt>
<dd></dd>
@@ -669,6 +688,10 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="libgwyprocess-stats.html#gwy-data-field-area-cda-mask" title="gwy_data_field_area_cda_mask ()">gwy_data_field_area_cda_mask</a>, function in <a class="link" href="libgwyprocess-stats.html" title="stats">stats</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="libgwyprocess-stats.html#gwy-data-field-area-cdh" title="gwy_data_field_area_cdh ()">gwy_data_field_area_cdh</a>, function in <a class="link" href="libgwyprocess-stats.html" title="stats">stats</a>
</dt>
<dd></dd>
@@ -705,6 +728,10 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="libgwyprocess-stats.html#gwy-data-field-area-da-mask" title="gwy_data_field_area_da_mask ()">gwy_data_field_area_da_mask</a>, function in <a class="link" href="libgwyprocess-stats.html" title="stats">stats</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="libgwyprocess-stats.html#gwy-data-field-area-dh" title="gwy_data_field_area_dh ()">gwy_data_field_area_dh</a>, function in <a class="link" href="libgwyprocess-stats.html" title="stats">stats</a>
</dt>
<dd></dd>
@@ -717,6 +744,14 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="libgwyprocess-filters.html#gwy-data-field-area-ext-convolve" title="gwy_data_field_area_ext_convolve ()">gwy_data_field_area_ext_convolve</a>, function in <a class="link" href="libgwyprocess-filters.html" title="filters">filters</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libgwyprocess-filters.html#gwy-data-field-area-ext-row-convolve" title="gwy_data_field_area_ext_row_convolve ()">gwy_data_field_area_ext_row_convolve</a>, function in <a class="link" href="libgwyprocess-filters.html" title="filters">filters</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="GwyDataField.html#gwy-data-field-area-fill" title="gwy_data_field_area_fill ()">gwy_data_field_area_fill</a>, function in <a class="link" href="GwyDataField.html" title="GwyDataField">GwyDataField</a>
</dt>
<dd></dd>
@@ -809,6 +844,10 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="GwyDataField.html#gwy-data-field-area-flip-xy" title="gwy_data_field_area_flip_xy ()">gwy_data_field_area_flip_xy</a>, function in <a class="link" href="GwyDataField.html" title="GwyDataField">GwyDataField</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="libgwyprocess-filters.html#gwy-data-field-area-gather" title="gwy_data_field_area_gather ()">gwy_data_field_area_gather</a>, function in <a class="link" href="libgwyprocess-filters.html" title="filters">filters</a>
</dt>
<dd></dd>
@@ -1025,6 +1064,22 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="libgwyprocess-stats.html#gwy-data-field-area-row-acf" title="gwy_data_field_area_row_acf ()">gwy_data_field_area_row_acf</a>, function in <a class="link" href="libgwyprocess-stats.html" title="stats">stats</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libgwyprocess-stats.html#gwy-data-field-area-row-asg" title="gwy_data_field_area_row_asg ()">gwy_data_field_area_row_asg</a>, function in <a class="link" href="libgwyprocess-stats.html" title="stats">stats</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libgwyprocess-stats.html#gwy-data-field-area-row-hhcf" title="gwy_data_field_area_row_hhcf ()">gwy_data_field_area_row_hhcf</a>, function in <a class="link" href="libgwyprocess-stats.html" title="stats">stats</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libgwyprocess-stats.html#gwy-data-field-area-row-psdf" title="gwy_data_field_area_row_psdf ()">gwy_data_field_area_row_psdf</a>, function in <a class="link" href="libgwyprocess-stats.html" title="stats">stats</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="libgwyprocess-stats.html#gwy-data-field-area-rpsdf" title="gwy_data_field_area_rpsdf ()">gwy_data_field_area_rpsdf</a>, function in <a class="link" href="libgwyprocess-stats.html" title="stats">stats</a>
</dt>
<dd></dd>
@@ -1105,6 +1160,10 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="GwyDataField.html#gwy-data-field-copy-units" title="gwy_data_field_copy_units ()">gwy_data_field_copy_units</a>, function in <a class="link" href="GwyDataField.html" title="GwyDataField">GwyDataField</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="GwyDataField.html#gwy-data-field-copy-units-to-data-line" title="gwy_data_field_copy_units_to_data_line ()">gwy_data_field_copy_units_to_data_line</a>, function in <a class="link" href="GwyDataField.html" title="GwyDataField">GwyDataField</a>
</dt>
<dd></dd>
@@ -1345,6 +1404,10 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="GwyDataField.html#gwy-data-field-flip-xy" title="gwy_data_field_flip_xy ()">gwy_data_field_flip_xy</a>, function in <a class="link" href="GwyDataField.html" title="GwyDataField">GwyDataField</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="libgwyprocess-fractals.html#gwy-data-field-fractal-correction" title="gwy_data_field_fractal_correction ()">gwy_data_field_fractal_correction</a>, function in <a class="link" href="libgwyprocess-fractals.html" title="fractals">fractals</a>
</dt>
<dd></dd>
@@ -1517,6 +1580,10 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="GwyDataField.html#gwy-data-field-get-profile-mask" title="gwy_data_field_get_profile_mask ()">gwy_data_field_get_profile_mask</a>, function in <a class="link" href="GwyDataField.html" title="GwyDataField">GwyDataField</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="libgwyprocess-stats.html#gwy-data-field-get-rms" title="gwy_data_field_get_rms ()">gwy_data_field_get_rms</a>, function in <a class="link" href="libgwyprocess-stats.html" title="stats">stats</a>
</dt>
<dd></dd>
@@ -1709,6 +1776,10 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="libgwyprocess-grains.html#gwy-data-field-grains-thin" title="gwy_data_field_grains_thin ()">gwy_data_field_grains_thin</a>, function in <a class="link" href="libgwyprocess-grains.html" title="grains">grains</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="libgwyprocess-grains.html#gwy-data-field-grains-watershed-finalize" title="gwy_data_field_grains_watershed_finalize ()">gwy_data_field_grains_watershed_finalize</a>, function in <a class="link" href="libgwyprocess-grains.html" title="grains">grains</a>
</dt>
<dd></dd>
@@ -1785,6 +1856,10 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="libgwyprocess-elliptic.html#gwy-data-field-local-maximum" title="gwy_data_field_local_maximum ()">gwy_data_field_local_maximum</a>, function in <a class="link" href="libgwyprocess-elliptic.html" title="elliptic">elliptic</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="libgwyprocess-level.html#gwy-data-field-local-plane-quantity" title="gwy_data_field_local_plane_quantity ()">gwy_data_field_local_plane_quantity</a>, function in <a class="link" href="libgwyprocess-level.html" title="level">level</a>
</dt>
<dd></dd>
@@ -1809,6 +1884,14 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="libgwyprocess-correct.html#gwy-data-field-measure-lattice-acf" title="gwy_data_field_measure_lattice_acf ()">gwy_data_field_measure_lattice_acf</a>, function in <a class="link" href="libgwyprocess-correct.html" title="correct">correct</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libgwyprocess-correct.html#gwy-data-field-measure-lattice-psdf" title="gwy_data_field_measure_lattice_psdf ()">gwy_data_field_measure_lattice_psdf</a>, function in <a class="link" href="libgwyprocess-correct.html" title="correct">correct</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="libgwyprocess-stats.html#gwy-data-field-minkowski-boundary" title="gwy_data_field_minkowski_boundary ()">gwy_data_field_minkowski_boundary</a>, function in <a class="link" href="libgwyprocess-stats.html" title="stats">stats</a>
</dt>
<dd></dd>
@@ -2045,6 +2128,10 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="GwyDataLine.html#gwy-data-line-copy-units" title="gwy_data_line_copy_units ()">gwy_data_line_copy_units</a>, function in <a class="link" href="GwyDataLine.html" title="GwyDataLine">GwyDataLine</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="GwyDataField.html#gwy-data-line-copy-units-to-data-field" title="gwy_data_line_copy_units_to_data_field ()">gwy_data_line_copy_units_to_data_field</a>, function in <a class="link" href="GwyDataField.html" title="GwyDataField">GwyDataField</a>
</dt>
<dd></dd>
@@ -2249,6 +2336,22 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="libgwyprocess-linestats.html#gwy-data-line-max-pos-i" title="gwy_data_line_max_pos_i ()">gwy_data_line_max_pos_i</a>, function in <a class="link" href="libgwyprocess-linestats.html" title="linestats">linestats</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libgwyprocess-linestats.html#gwy-data-line-max-pos-r" title="gwy_data_line_max_pos_r ()">gwy_data_line_max_pos_r</a>, function in <a class="link" href="libgwyprocess-linestats.html" title="linestats">linestats</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libgwyprocess-linestats.html#gwy-data-line-min-pos-i" title="gwy_data_line_min_pos_i ()">gwy_data_line_min_pos_i</a>, function in <a class="link" href="libgwyprocess-linestats.html" title="linestats">linestats</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libgwyprocess-linestats.html#gwy-data-line-min-pos-r" title="gwy_data_line_min_pos_r ()">gwy_data_line_min_pos_r</a>, function in <a class="link" href="libgwyprocess-linestats.html" title="linestats">linestats</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="GwyDataLine.html#gwy-data-line-multiply" title="gwy_data_line_multiply ()">gwy_data_line_multiply</a>, function in <a class="link" href="GwyDataLine.html" title="GwyDataLine">GwyDataLine</a>
</dt>
<dd></dd>
@@ -2811,6 +2914,10 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="GwyShapeFitPreset.html#gwy-shape-fit-preset-quick-fit" title="gwy_shape_fit_preset_quick_fit ()">gwy_shape_fit_preset_quick_fit</a>, function in <a class="link" href="GwyShapeFitPreset.html" title="GwyShapeFitPreset">GwyShapeFitPreset</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="GwyShapeFitPreset.html#gwy-shape-fit-preset-setup" title="gwy_shape_fit_preset_setup ()">gwy_shape_fit_preset_setup</a>, function in <a class="link" href="GwyShapeFitPreset.html" title="GwyShapeFitPreset">GwyShapeFitPreset</a>
</dt>
<dd></dd>
@@ -2935,7 +3042,7 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="libgwyprocess-GwySpline.html#GwySpline" title="GwySpline">GwySpline</a>, struct in <a class="link" href="libgwyprocess-GwySpline.html" title="GwySpline">GwySpline</a>
+<a class="link" href="libgwyprocess-GwySpline.html#gwy-spline-copy" title="gwy_spline_copy ()">gwy_spline_copy</a>, function in <a class="link" href="libgwyprocess-GwySpline.html" title="GwySpline">GwySpline</a>
</dt>
<dd></dd>
<dt>
@@ -3015,6 +3122,10 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="GwySurface.html#gwy-surface-copy-units" title="gwy_surface_copy_units ()">gwy_surface_copy_units</a>, function in <a class="link" href="GwySurface.html" title="GwySurface">GwySurface</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="GwySurface.html#gwy-surface-copy-units-to-data-field" title="gwy_surface_copy_units_to_data_field ()">gwy_surface_copy_units_to_data_field</a>, function in <a class="link" href="GwySurface.html" title="GwySurface">GwySurface</a>
</dt>
<dd></dd>
@@ -3099,6 +3210,10 @@
</dt>
<dd></dd>
<dt>
+<a class="link" href="GwySurface.html#gwy-surface-reduce-points" title="gwy_surface_reduce_points ()">gwy_surface_reduce_points</a>, function in <a class="link" href="GwySurface.html" title="GwySurface">GwySurface</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="GwySurface.html#gwy-surface-set" title="gwy_surface_set ()">gwy_surface_set</a>, function in <a class="link" href="GwySurface.html" title="GwySurface">GwySurface</a>
</dt>
<dd></dd>
@@ -3136,10 +3251,6 @@
</dt>
<dd></dd>
<dt>
-<a class="link" href="libgwyprocess-tip.html#GwyTipModelPreset" title="struct GwyTipModelPreset">GwyTipModelPreset</a>, struct in <a class="link" href="libgwyprocess-tip.html" title="tip">tip</a>
-</dt>
-<dd></dd>
-<dt>
<a class="link" href="libgwyprocess-gwyprocessenums.html#GwyTipParamType" title="enum GwyTipParamType">GwyTipParamType</a>, enum in <a class="link" href="libgwyprocess-gwyprocessenums.html" title="gwyprocessenums">gwyprocessenums</a>
</dt>
<dd></dd>
diff --git a/devel-docs/libgwyprocess/html/api-index-deprec.html b/devel-docs/libgwyprocess/html/api-index-deprec.html
index be52984..9fc9050 100644
--- a/devel-docs/libgwyprocess/html/api-index-deprec.html
+++ b/devel-docs/libgwyprocess/html/api-index-deprec.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index of deprecated symbols: Gwyddion Data Processing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="prev" href="api-index-all.html" title="Index of all symbols">
@@ -73,10 +73,6 @@
<a class="link" href="libgwyprocess-tip.html#GwyTipModelFunc" title="GwyTipModelFunc ()">GwyTipModelFunc</a>, user_function in <a class="link" href="libgwyprocess-tip.html" title="tip">tip</a>
</dt>
<dd></dd>
-<dt>
-<a class="link" href="libgwyprocess-tip.html#GwyTipModelPreset" title="struct GwyTipModelPreset">GwyTipModelPreset</a>, struct in <a class="link" href="libgwyprocess-tip.html" title="tip">tip</a>
-</dt>
-<dd></dd>
</div>
<div class="footer">
<hr>Generated by GTK-Doc V1.19</div>
diff --git a/devel-docs/libgwyprocess/html/index.html b/devel-docs/libgwyprocess/html/index.html
index 36b2b04..003d260 100644
--- a/devel-docs/libgwyprocess/html/index.html
+++ b/devel-docs/libgwyprocess/html/index.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Gwyddion Data Processing Library Reference Manual: Gwyddion Data Processing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="next" href="GwyDataLine.html" title="GwyDataLine">
<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
@@ -15,7 +15,7 @@
<div>
<div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">Gwyddion Data Processing Library Reference Manual</p></th></tr></table></div>
<div><p class="releaseinfo">
- For Gwyddion 2.47.
+ For Gwyddion 2.49.
The latest version of this document can be found on-line at
<a class="ulink" href="http://gwyddion.net/documentation/libgwyprocess/index.php" target="_top">http://gwyddion.net/documentation/libgwyprocess/</a>.
</p></div>
@@ -154,6 +154,8 @@
<dt><span class="index"><a href="api-index-2-45.html">Index of new symbols in 2.45</a></span></dt>
<dt><span class="index"><a href="api-index-2-46.html">Index of new symbols in 2.46</a></span></dt>
<dt><span class="index"><a href="api-index-2-47.html">Index of new symbols in 2.47</a></span></dt>
+<dt><span class="index"><a href="api-index-2-48.html">Index of new symbols in 2.48</a></span></dt>
+<dt><span class="index"><a href="api-index-2-49.html">Index of new symbols in 2.49</a></span></dt>
</dl></div>
<p>
This library contains classes representing one- and twodimensional data,
diff --git a/devel-docs/libgwyprocess/html/libgwyprocess-GwySpline.html b/devel-docs/libgwyprocess/html/libgwyprocess-GwySpline.html
index cc130e6..9283c8b 100644
--- a/devel-docs/libgwyprocess/html/libgwyprocess-GwySpline.html
+++ b/devel-docs/libgwyprocess/html/libgwyprocess-GwySpline.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GwySpline: Gwyddion Data Processing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="prev" href="GwyShapeFitPreset.html" title="GwyShapeFitPreset">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwyprocess-GwySpline.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -41,7 +41,7 @@
<tbody>
<tr>
<td class="function_type">
-<a class="link" href="libgwyprocess-GwySpline.html#GwySpline" title="GwySpline"><span class="returnvalue">GwySpline</span></a> *
+<span class="returnvalue">GwySpline</span> *
</td>
<td class="function_name">
<a class="link" href="libgwyprocess-GwySpline.html#gwy-spline-new" title="gwy_spline_new ()">gwy_spline_new</a> <span class="c_punctuation">()</span>
@@ -57,7 +57,15 @@
</tr>
<tr>
<td class="function_type">
-<a class="link" href="libgwyprocess-GwySpline.html#GwySpline" title="GwySpline"><span class="returnvalue">GwySpline</span></a> *
+<span class="returnvalue">GwySpline</span> *
+</td>
+<td class="function_name">
+<a class="link" href="libgwyprocess-GwySpline.html#gwy-spline-copy" title="gwy_spline_copy ()">gwy_spline_copy</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">GwySpline</span> *
</td>
<td class="function_name">
<a class="link" href="libgwyprocess-GwySpline.html#gwy-spline-new-from-points" title="gwy_spline_new_from_points ()">gwy_spline_new_from_points</a> <span class="c_punctuation">()</span>
@@ -152,19 +160,6 @@
</table></div>
</div>
<div class="refsect1">
-<a name="libgwyprocess-GwySpline.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="name">
-<col class="description">
-</colgroup>
-<tbody><tr>
-<td class="datatype_keyword"> </td>
-<td class="function_name"><a class="link" href="libgwyprocess-GwySpline.html#GwySpline" title="GwySpline">GwySpline</a></td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect1">
<a name="libgwyprocess-GwySpline.includes"></a><h2>Includes</h2>
<pre class="synopsis">#include <libprocess/gwyprocess.h>
</pre>
@@ -176,7 +171,7 @@
<a name="libgwyprocess-GwySpline.functions_details"></a><h2>Functions</h2>
<div class="refsect2">
<a name="gwy-spline-new"></a><h3>gwy_spline_new ()</h3>
-<pre class="programlisting"><a class="link" href="libgwyprocess-GwySpline.html#GwySpline" title="GwySpline"><span class="returnvalue">GwySpline</span></a> *
+<pre class="programlisting"><span class="returnvalue">GwySpline</span> *
gwy_spline_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
<p>Creates a new empty spline curve.</p>
<p>You need to set the curve points using <a class="link" href="libgwyprocess-GwySpline.html#gwy-spline-set-points" title="gwy_spline_set_points ()"><code class="function">gwy_spline_set_points()</code></a> before any
@@ -192,11 +187,11 @@ to construct the spline already with some points.</p>
<div class="refsect2">
<a name="gwy-spline-free"></a><h3>gwy_spline_free ()</h3>
<pre class="programlisting"><span class="returnvalue">void</span>
-gwy_spline_free (<em class="parameter"><code><a class="link" href="libgwyprocess-GwySpline.html#GwySpline" title="GwySpline"><span class="type">GwySpline</span></a> *spline</code></em>);</pre>
+gwy_spline_free (<em class="parameter"><code><span class="type">GwySpline</span> *spline</code></em>);</pre>
<p>Frees a spline curve and all associated resources.</p>
<div class="refsect3">
<a name="gwy-spline-free.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -213,15 +208,42 @@ gwy_spline_free (<em class="parameter"><code><a class="link" href="libgwyprocess
</div>
<hr>
<div class="refsect2">
+<a name="gwy-spline-copy"></a><h3>gwy_spline_copy ()</h3>
+<pre class="programlisting"><span class="returnvalue">GwySpline</span> *
+gwy_spline_copy (<em class="parameter"><code><span class="type">GwySpline</span> *spline</code></em>);</pre>
+<p>Creates a copy of a spline curve.</p>
+<div class="refsect3">
+<a name="gwy-spline-copy.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>spline</p></td>
+<td class="parameter_description"><p>A spline curve.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gwy-spline-copy.returns"></a><h4>Returns</h4>
+<p> A newly created spline curve.</p>
+</div>
+<p class="since">Since: <a class="link" href="api-index-2-49.html#api-index-2.49">2.49</a></p>
+</div>
+<hr>
+<div class="refsect2">
<a name="gwy-spline-new-from-points"></a><h3>gwy_spline_new_from_points ()</h3>
-<pre class="programlisting"><a class="link" href="libgwyprocess-GwySpline.html#GwySpline" title="GwySpline"><span class="returnvalue">GwySpline</span></a> *
+<pre class="programlisting"><span class="returnvalue">GwySpline</span> *
gwy_spline_new_from_points (<em class="parameter"><code>const <span class="type">GwyXY</span> *xy</code></em>,
<em class="parameter"><code><a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> n</code></em>);</pre>
<p>Creates a new spline curve passing through given points.</p>
<p>See <a class="link" href="libgwyprocess-GwySpline.html#gwy-spline-set-points" title="gwy_spline_set_points ()"><code class="function">gwy_spline_set_points()</code></a> for discussion.</p>
<div class="refsect3">
<a name="gwy-spline-new-from-points.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -252,11 +274,11 @@ gwy_spline_new_from_points (<em class="parameter"><code>const <span class="type"
<div class="refsect2">
<a name="gwy-spline-get-npoints"></a><h3>gwy_spline_get_npoints ()</h3>
<pre class="programlisting"><a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
-gwy_spline_get_npoints (<em class="parameter"><code><a class="link" href="libgwyprocess-GwySpline.html#GwySpline" title="GwySpline"><span class="type">GwySpline</span></a> *spline</code></em>);</pre>
+gwy_spline_get_npoints (<em class="parameter"><code><span class="type">GwySpline</span> *spline</code></em>);</pre>
<p>Gets the number of points of a spline curve.</p>
<div class="refsect3">
<a name="gwy-spline-get-npoints.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -279,12 +301,12 @@ gwy_spline_get_npoints (<em class="parameter"><code><a class="link" href="libgwy
<div class="refsect2">
<a name="gwy-spline-get-points"></a><h3>gwy_spline_get_points ()</h3>
<pre class="programlisting">const <span class="returnvalue">GwyXY</span> *
-gwy_spline_get_points (<em class="parameter"><code><a class="link" href="libgwyprocess-GwySpline.html#GwySpline" title="GwySpline"><span class="type">GwySpline</span></a> *spline</code></em>);</pre>
+gwy_spline_get_points (<em class="parameter"><code><span class="type">GwySpline</span> *spline</code></em>);</pre>
<p>Gets the coordinates of spline curve points.</p>
<p>If the spline is empty (there are no points) the function returns <a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.</p>
<div class="refsect3">
<a name="gwy-spline-get-points.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -311,13 +333,13 @@ destroyed.</p>
<div class="refsect2">
<a name="gwy-spline-get-tangents"></a><h3>gwy_spline_get_tangents ()</h3>
<pre class="programlisting">const <span class="returnvalue">GwyXY</span> *
-gwy_spline_get_tangents (<em class="parameter"><code><a class="link" href="libgwyprocess-GwySpline.html#GwySpline" title="GwySpline"><span class="type">GwySpline</span></a> *spline</code></em>);</pre>
+gwy_spline_get_tangents (<em class="parameter"><code><span class="type">GwySpline</span> *spline</code></em>);</pre>
<p>Gets tangents to the curve in its defining points.</p>
<p>See <a class="link" href="libgwyprocess-GwySpline.html#gwy-spline-sample-uniformly" title="gwy_spline_sample_uniformly ()"><code class="function">gwy_spline_sample_uniformly()</code></a> for discussion.</p>
<p>If the spline is empty (there are no points) the function returns <a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.</p>
<div class="refsect3">
<a name="gwy-spline-get-tangents.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -344,12 +366,12 @@ destroyed.</p>
<div class="refsect2">
<a name="gwy-spline-get-slackness"></a><h3>gwy_spline_get_slackness ()</h3>
<pre class="programlisting"><a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#gdouble"><span class="returnvalue">gdouble</span></a>
-gwy_spline_get_slackness (<em class="parameter"><code><a class="link" href="libgwyprocess-GwySpline.html#GwySpline" title="GwySpline"><span class="type">GwySpline</span></a> *spline</code></em>);</pre>
+gwy_spline_get_slackness (<em class="parameter"><code><span class="type">GwySpline</span> *spline</code></em>);</pre>
<p>Gets the slackness parameter of a spline curve.</p>
<p>See <a class="link" href="libgwyprocess-GwySpline.html#gwy-spline-set-slackness" title="gwy_spline_set_slackness ()"><code class="function">gwy_spline_set_slackness()</code></a> for discussion.</p>
<div class="refsect3">
<a name="gwy-spline-get-slackness.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -372,12 +394,12 @@ gwy_spline_get_slackness (<em class="parameter"><code><a class="link" href="libg
<div class="refsect2">
<a name="gwy-spline-get-closed"></a><h3>gwy_spline_get_closed ()</h3>
<pre class="programlisting"><a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gwy_spline_get_closed (<em class="parameter"><code><a class="link" href="libgwyprocess-GwySpline.html#GwySpline" title="GwySpline"><span class="type">GwySpline</span></a> *spline</code></em>);</pre>
+gwy_spline_get_closed (<em class="parameter"><code><span class="type">GwySpline</span> *spline</code></em>);</pre>
<p>Reports whether a spline curve is closed or not.</p>
<p>See <a class="link" href="libgwyprocess-GwySpline.html#gwy-spline-set-closed" title="gwy_spline_set_closed ()"><code class="function">gwy_spline_set_closed()</code></a> for discussion.</p>
<div class="refsect3">
<a name="gwy-spline-get-closed.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -401,7 +423,7 @@ is closed, <a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Standard
<div class="refsect2">
<a name="gwy-spline-set-points"></a><h3>gwy_spline_set_points ()</h3>
<pre class="programlisting"><span class="returnvalue">void</span>
-gwy_spline_set_points (<em class="parameter"><code><a class="link" href="libgwyprocess-GwySpline.html#GwySpline" title="GwySpline"><span class="type">GwySpline</span></a> *spline</code></em>,
+gwy_spline_set_points (<em class="parameter"><code><span class="type">GwySpline</span> *spline</code></em>,
<em class="parameter"><code>const <span class="type">GwyXY</span> *xy</code></em>,
<em class="parameter"><code><a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> n</code></em>);</pre>
<p>Sets the coordinates of XY points a spline curve should pass through.</p>
@@ -419,7 +441,7 @@ scales differ.</p>
<p>Using unscaled physical coordinates may produce odd results.</p>
<div class="refsect3">
<a name="gwy-spline-set-points.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -451,7 +473,7 @@ scales differ.</p>
<div class="refsect2">
<a name="gwy-spline-set-slackness"></a><h3>gwy_spline_set_slackness ()</h3>
<pre class="programlisting"><span class="returnvalue">void</span>
-gwy_spline_set_slackness (<em class="parameter"><code><a class="link" href="libgwyprocess-GwySpline.html#GwySpline" title="GwySpline"><span class="type">GwySpline</span></a> *spline</code></em>,
+gwy_spline_set_slackness (<em class="parameter"><code><span class="type">GwySpline</span> *spline</code></em>,
<em class="parameter"><code><a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> slackness</code></em>);</pre>
<p>Sets the slackness parameter of a spline curve.</p>
<p>The slackness parameter determines how taut or slack the curve is.</p>
@@ -463,7 +485,7 @@ tensile stress while values larger than 1 compressive stres. The default
value is 1/sqrt(2).</p>
<div class="refsect3">
<a name="gwy-spline-set-slackness.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -489,7 +511,7 @@ value is 1/sqrt(2).</p>
<div class="refsect2">
<a name="gwy-spline-set-closed"></a><h3>gwy_spline_set_closed ()</h3>
<pre class="programlisting"><span class="returnvalue">void</span>
-gwy_spline_set_closed (<em class="parameter"><code><a class="link" href="libgwyprocess-GwySpline.html#GwySpline" title="GwySpline"><span class="type">GwySpline</span></a> *spline</code></em>,
+gwy_spline_set_closed (<em class="parameter"><code><span class="type">GwySpline</span> *spline</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> closed</code></em>);</pre>
<p>Sets whether a spline curve is closed or open.</p>
<p>In closed curve the last point is connected smoothly with the first point,
@@ -502,7 +524,7 @@ again.</p>
has zero curvature at these two points.</p>
<div class="refsect3">
<a name="gwy-spline-set-closed.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -529,14 +551,14 @@ closed, <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAP
<div class="refsect2">
<a name="gwy-spline-length"></a><h3>gwy_spline_length ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="returnvalue">gdouble</span></a>
-gwy_spline_length (<em class="parameter"><code><a class="link" href="libgwyprocess-GwySpline.html#GwySpline" title="GwySpline"><span class="type">GwySpline</span></a> *spline</code></em>);</pre>
+gwy_spline_length (<em class="parameter"><code><span class="type">GwySpline</span> *spline</code></em>);</pre>
<p>Calculates the length of a spline curve.</p>
<p>This is useful when you want to sample the curve with a specific step
(at least approximately).</p>
<p>Note <a class="link" href="libgwyprocess-GwySpline.html#gwy-spline-sample-uniformly" title="gwy_spline_sample_uniformly ()"><code class="function">gwy_spline_sample_uniformly()</code></a> also returns the length.</p>
<div class="refsect3">
<a name="gwy-spline-length.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -559,7 +581,7 @@ gwy_spline_length (<em class="parameter"><code><a class="link" href="libgwyproce
<div class="refsect2">
<a name="gwy-spline-sample-naturally"></a><h3>gwy_spline_sample_naturally ()</h3>
<pre class="programlisting">const <span class="returnvalue">GwyXY</span> *
-gwy_spline_sample_naturally (<em class="parameter"><code><a class="link" href="libgwyprocess-GwySpline.html#GwySpline" title="GwySpline"><span class="type">GwySpline</span></a> *spline</code></em>,
+gwy_spline_sample_naturally (<em class="parameter"><code><span class="type">GwySpline</span> *spline</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> *n</code></em>);</pre>
<p>Samples efficiently a spline curve.</p>
<p>This function calculates coordinates of points that lie on the spline curve
@@ -569,7 +591,7 @@ particularly useful for drawing the curve.</p>
curves and corner case handling.</p>
<div class="refsect3">
<a name="gwy-spline-sample-naturally.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -603,7 +625,7 @@ destroyed.</p>
<div class="refsect2">
<a name="gwy-spline-sample-uniformly"></a><h3>gwy_spline_sample_uniformly ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="returnvalue">gdouble</span></a>
-gwy_spline_sample_uniformly (<em class="parameter"><code><a class="link" href="libgwyprocess-GwySpline.html#GwySpline" title="GwySpline"><span class="type">GwySpline</span></a> *spline</code></em>,
+gwy_spline_sample_uniformly (<em class="parameter"><code><span class="type">GwySpline</span> *spline</code></em>,
<em class="parameter"><code><span class="type">GwyXY</span> *xy</code></em>,
<em class="parameter"><code><span class="type">GwyXY</span> *t</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> n</code></em>);</pre>
@@ -632,7 +654,7 @@ points coincide or the curve has only a single point the vectors may be
(0,0).</p>
<div class="refsect3">
<a name="gwy-spline-sample-uniformly.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -674,10 +696,6 @@ May be <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"
</div>
<div class="refsect1">
<a name="libgwyprocess-GwySpline.other_details"></a><h2>Types and Values</h2>
-<div class="refsect2">
-<a name="GwySpline"></a><h3>GwySpline</h3>
-<pre class="programlisting">typedef struct _GwySpline GwySpline;</pre>
-</div>
</div>
</div>
<div class="footer">
diff --git a/devel-docs/libgwyprocess/html/libgwyprocess-arithmetic.html b/devel-docs/libgwyprocess/html/libgwyprocess-arithmetic.html
index 05db0c0..fa9e4bc 100644
--- a/devel-docs/libgwyprocess/html/libgwyprocess-arithmetic.html
+++ b/devel-docs/libgwyprocess/html/libgwyprocess-arithmetic.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>arithmetic: Gwyddion Data Processing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="prev" href="GwyCalData.html" title="GwyCalData">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwyprocess-arithmetic.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -149,7 +149,7 @@ gwy_data_field_sum_fields (<em class="parameter"><code><a class="link" href="Gwy
<p>Sums two data fields.</p>
<div class="refsect3">
<a name="gwy-data-field-sum-fields.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -188,7 +188,7 @@ gwy_data_field_subtract_fields (<em class="parameter"><code><a class="link" href
<p>Subtracts one data field from another.</p>
<div class="refsect3">
<a name="gwy-data-field-subtract-fields.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -227,7 +227,7 @@ gwy_data_field_divide_fields (<em class="parameter"><code><a class="link" href="
<p>Divides one data field with another.</p>
<div class="refsect3">
<a name="gwy-data-field-divide-fields.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -266,7 +266,7 @@ gwy_data_field_multiply_fields (<em class="parameter"><code><a class="link" href
<p>Multiplies two data fields.</p>
<div class="refsect3">
<a name="gwy-data-field-multiply-fields.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -305,7 +305,7 @@ gwy_data_field_min_of_fields (<em class="parameter"><code><a class="link" href="
<p>Finds point-wise maxima of two data fields.</p>
<div class="refsect3">
<a name="gwy-data-field-min-of-fields.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -344,7 +344,7 @@ gwy_data_field_max_of_fields (<em class="parameter"><code><a class="link" href="
<p>Finds point-wise minima of two data fields.</p>
<div class="refsect3">
<a name="gwy-data-field-max-of-fields.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -383,7 +383,7 @@ gwy_data_field_hypot_of_fields (<em class="parameter"><code><a class="link" href
<p>Finds point-wise hypotenuse of two data fields.</p>
<div class="refsect3">
<a name="gwy-data-field-hypot-of-fields.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -423,7 +423,7 @@ gwy_data_field_check_compatibility (<em class="parameter"><code><a class="link"
<p>Checks whether two data fields are compatible.</p>
<div class="refsect3">
<a name="gwy-data-field-check-compatibility.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -464,7 +464,7 @@ gwy_data_line_check_compatibility (<em class="parameter"><code><a class="link" h
<p>Checks whether two data lines are compatible.</p>
<div class="refsect3">
<a name="gwy-data-line-check-compatibility.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -511,7 +511,7 @@ gwy_data_field_extend (<em class="parameter"><code><a class="link" href="GwyData
method of exterior handling.</p>
<div class="refsect3">
<a name="gwy-data-field-extend.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwyprocess/html/libgwyprocess-correct.html b/devel-docs/libgwyprocess/html/libgwyprocess-correct.html
index 56f09a6..2994d80 100644
--- a/devel-docs/libgwyprocess/html/libgwyprocess-correct.html
+++ b/devel-docs/libgwyprocess/html/libgwyprocess-correct.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>correct: Gwyddion Data Processing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="prev" href="GwyCDLine.html" title="cdline">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwyprocess-correct.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -121,6 +121,30 @@
</tr>
<tr>
<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="libgwyprocess-correct.html#gwy-data-field-affine-prepare" title="gwy_data_field_affine_prepare ()">gwy_data_field_affine_prepare</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="libgwyprocess-correct.html#gwy-data-field-measure-lattice-acf" title="gwy_data_field_measure_lattice_acf ()">gwy_data_field_measure_lattice_acf</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="libgwyprocess-correct.html#gwy-data-field-measure-lattice-psdf" title="gwy_data_field_measure_lattice_psdf ()">gwy_data_field_measure_lattice_psdf</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
<a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
</td>
<td class="function_name">
@@ -167,7 +191,7 @@
<p>The type of two-dimensional coordinate transform function.</p>
<div class="refsect3">
<a name="GwyCoordTransform2DFunc.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -233,7 +257,7 @@ worse for not much speed increase. Conversely, you may wish to increase
increased computation time.</p>
<div class="refsect3">
<a name="gwy-data-field-laplace-solve.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -292,7 +316,7 @@ non-iteratie <a class="link" href="libgwyprocess-correct.html#gwy-data-field-lap
faster and more accurate.</div>
<div class="refsect3">
<a name="gwy-data-field-correct-laplace-iteration.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -345,7 +369,7 @@ masked and unmasked) into points in <em class="parameter"><code>data_field</code
<a class="link" href="libgwyprocess-correct.html#gwy-data-field-correct-average-unmasked" title="gwy_data_field_correct_average_unmasked ()"><code class="function">gwy_data_field_correct_average_unmasked()</code></a> instead.</p>
<div class="refsect3">
<a name="gwy-data-field-correct-average.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -381,7 +405,7 @@ It is useful as the first rough step of correction of data under the mask.</p>
<p>If all data are masked the field is filled with zeroes.</p>
<div class="refsect3">
<a name="gwy-data-field-correct-average-unmasked.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -419,7 +443,7 @@ corresponds to the usual Gaussian distribution outliers detection if
is 3.</p>
<div class="refsect3">
<a name="gwy-data-field-mask-outliers.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -467,7 +491,7 @@ height.</p>
root-mean square deviation of heights.</p>
<div class="refsect3">
<a name="gwy-data-field-mask-outliers2.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -509,7 +533,7 @@ gwy_data_field_distort (<em class="parameter"><code><a class="link" href="GwyDat
<em class="parameter"><code><a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>,
<em class="parameter"><code><a class="link" href="libgwyprocess-gwyprocessenums.html#GwyInterpolationType" title="enum GwyInterpolationType"><span class="type">GwyInterpolationType</span></a> interp</code></em>,
<em class="parameter"><code><a class="link" href="libgwyprocess-gwyprocessenums.html#GwyExteriorType" title="enum GwyExteriorType"><span class="type">GwyExteriorType</span></a> exterior</code></em>,
- <em class="parameter"><code><a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> fill_value</code></em>);</pre>
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> fill_value</code></em>);</pre>
<p>Distorts a data field in the horizontal plane.</p>
<p>Note the transform function <em class="parameter"><code>invtrans</code></em>
is the inverse transform, in other
@@ -517,7 +541,7 @@ words it calculates the old coordinates from the new coordinates (the
transform would not be uniquely defined the other way round).</p>
<div class="refsect3">
<a name="gwy-data-field-distort.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -586,7 +610,7 @@ gwy_data_field_sample_distorted (<em class="parameter"><code><a class="link" hre
<em class="parameter"><code>const <span class="type">GwyXY</span> *coords</code></em>,
<em class="parameter"><code><a class="link" href="libgwyprocess-gwyprocessenums.html#GwyInterpolationType" title="enum GwyInterpolationType"><span class="type">GwyInterpolationType</span></a> interp</code></em>,
<em class="parameter"><code><a class="link" href="libgwyprocess-gwyprocessenums.html#GwyExteriorType" title="enum GwyExteriorType"><span class="type">GwyExteriorType</span></a> exterior</code></em>,
- <em class="parameter"><code><a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> fill_value</code></em>);</pre>
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> fill_value</code></em>);</pre>
<p>Resamples a data field in an arbitrarily distorted manner.</p>
<p>Each item in <em class="parameter"><code>coords</code></em>
corresponds to one pixel in <em class="parameter"><code>dest</code></em>
@@ -595,7 +619,7 @@ coordinates in <em class="parameter"><code>source</code></em>
defining the value to set in this pixel.</p>
<div class="refsect3">
<a name="gwy-data-field-sample-distorted.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -660,7 +684,7 @@ way even degenerate (non-invertible) transforms can be meaningfully used.
Also note that the (column, row) coordinate system is left-handed.</p>
<div class="refsect3">
<a name="gwy-data-field-affine.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -723,6 +747,212 @@ to
</div>
<hr>
<div class="refsect2">
+<a name="gwy-data-field-affine-prepare"></a><h3>gwy_data_field_affine_prepare ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gwy_data_field_affine_prepare (<em class="parameter"><code><a class="link" href="GwyDataField.html" title="GwyDataField"><span class="type">GwyDataField</span></a> *source</code></em>,
+ <em class="parameter"><code><a class="link" href="GwyDataField.html" title="GwyDataField"><span class="type">GwyDataField</span></a> *dest</code></em>,
+ <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> *a1a2</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> *a1a2_corr</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> *invtrans</code></em>,
+ <em class="parameter"><code><a class="link" href="libgwyprocess-gwyprocessenums.html#GwyAffineScalingType" title="enum GwyAffineScalingType"><span class="type">GwyAffineScalingType</span></a> scaling</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> prevent_rotation</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> oversampling</code></em>);</pre>
+<p>Resolves an affine transformation of a data field in the horizontal plane.</p>
+<p>This function calculates suitable arguments for <a class="link" href="libgwyprocess-correct.html#gwy-data-field-affine" title="gwy_data_field_affine ()"><code class="function">gwy_data_field_affine()</code></a>
+from given images and lattice vectors (in real coordinates).</p>
+<p>Data field <em class="parameter"><code>dest</code></em>
+ will be resized and its real dimensions and units set in
+anticipation of <a class="link" href="libgwyprocess-correct.html#gwy-data-field-affine" title="gwy_data_field_affine ()"><code class="function">gwy_data_field_affine()</code></a>. Its contents will be destroyed.</p>
+<p>Note that <em class="parameter"><code>a1a2_corr</code></em>
+ is an input-output parameter. In general, the vectors
+will be modified according to <em class="parameter"><code>scaling</code></em>
+ and <em class="parameter"><code>prevent_rotation</code></em>
+ to the actual
+vectors in <em class="parameter"><code>dest</code></em>
+ after the transformation. Only if <em class="parameter"><code>prevent_rotation</code></em>
+ is
+<a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> and <em class="parameter"><code>scaling</code></em>
+ is <a class="link" href="libgwyprocess-gwyprocessenums.html#GWY-AFFINE-SCALING-AS-GIVEN:CAPS"><code class="literal">GWY_AFFINE_SCALING_AS_GIVEN</code></a> the vectors are
+preserved.</p>
+<div class="refsect3">
+<a name="gwy-data-field-affine-prepare.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>source</p></td>
+<td class="parameter_description"><p>Source data field.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>dest</p></td>
+<td class="parameter_description"><p>Destination data field.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>a1a2</p></td>
+<td class="parameter_description"><p>Lattice vectors (or generally base vectors) in <em class="parameter"><code>source</code></em>
+, as an array
+of four components: <em class="parameter"><code>x1</code></em>
+, <em class="parameter"><code>y1</code></em>
+, <em class="parameter"><code>x2</code></em>
+and <em class="parameter"><code>y2</code></em>
+.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>a1a2_corr</p></td>
+<td class="parameter_description"><p>Correct lattice vectors (or generally base vectors) <em class="parameter"><code>dest</code></em>
+should
+have after the affine transform, in the same form as <em class="parameter"><code>a1a2</code></em>
+.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>invtrans</p></td>
+<td class="parameter_description"><p>Inverse transform as an array of six values to be filled
+according to <a class="link" href="libgwyprocess-correct.html#gwy-data-field-affine" title="gwy_data_field_affine ()"><code class="function">gwy_data_field_affine()</code></a> specification.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>scaling</p></td>
+<td class="parameter_description"><p>How (or if) to scale the correct lattice vectors.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>prevent_rotation</p></td>
+<td class="parameter_description"><p><a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> to prevent rotation of the data by rotating
+<em class="parameter"><code>a1a2_corr</code></em>
+as a whole to a direction preserving the
+data orientation. <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> to take <em class="parameter"><code>a1a2_corr</code></em>
+as given.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>oversampling</p></td>
+<td class="parameter_description"><p>Oversampling factor. Values larger than 1 mean smaller
+pixels (and more of them) in <em class="parameter"><code>dest</code></em>
+, values smaller than 1
+the opposite. Pass 1.0 for the default pixel size choice.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: <a class="link" href="api-index-2-49.html#api-index-2.49">2.49</a></p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gwy-data-field-measure-lattice-acf"></a><h3>gwy_data_field_measure_lattice_acf ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gwy_data_field_measure_lattice_acf (<em class="parameter"><code><a class="link" href="GwyDataField.html" title="GwyDataField"><span class="type">GwyDataField</span></a> *acf2d</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> *a1a2</code></em>);</pre>
+<p>Estimates or improves estimate of lattice vectors from a 2D ACF field.</p>
+<p>Note that the 2D ACF of a data field has to be passed, not the data field
+itself. The correlation function can be for instance calculated by
+<a class="link" href="libgwyprocess-stats.html#gwy-data-field-2dacf" title="gwy_data_field_2dacf ()"><code class="function">gwy_data_field_2dacf()</code></a>. However, you can calculate and/or process the
+correlation function in any way you see fit.</p>
+<p>When the vectors in <em class="parameter"><code>a1a2</code></em>
+ are zero the function attempts to estimate the
+lattice from scratch. But if <em class="parameter"><code>a1a2</code></em>
+ contains two non-zero vectors it takes
+them as approximate lattice vectors to improve.</p>
+<p>If the function return <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> the array <em class="parameter"><code>a1a2</code></em>
+ is filled with useless values
+and must be ignored.</p>
+<div class="refsect3">
+<a name="gwy-data-field-measure-lattice-acf.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>acf2d</p></td>
+<td class="parameter_description"><p>Data field containing two-dimensional autocorrelation function.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>a1a2</p></td>
+<td class="parameter_description"><p>Lattice vectors as an array of four components: <em class="parameter"><code>x1</code></em>
+, <em class="parameter"><code>y1</code></em>
+, <em class="parameter"><code>x2</code></em>
+and
+<em class="parameter"><code>y2</code></em>
+(in real coordinates).</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gwy-data-field-measure-lattice-acf.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if good lattice vectors were found, <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> on failure.</p>
+</div>
+<p class="since">Since: <a class="link" href="api-index-2-49.html#api-index-2.49">2.49</a></p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gwy-data-field-measure-lattice-psdf"></a><h3>gwy_data_field_measure_lattice_psdf ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gwy_data_field_measure_lattice_psdf (<em class="parameter"><code><a class="link" href="GwyDataField.html" title="GwyDataField"><span class="type">GwyDataField</span></a> *psdf2d</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> *a1a2</code></em>);</pre>
+<p>Estimates or improves estimate of lattice vectors from a 2D PSDF field.</p>
+<p>Note that the 2D PSDF of a data field has to be passed, not the data field
+itself. The spectral density can be for instance calculated by
+<a class="link" href="libgwyprocess-inttrans.html#gwy-data-field-2dfft" title="gwy_data_field_2dfft ()"><code class="function">gwy_data_field_2dfft()</code></a> and summing the squares of real and imaginary parts
+However, you can calculate and/or process the spectral density in any way
+you see fit.</p>
+<p>When the vectors in <em class="parameter"><code>a1a2</code></em>
+ are zero the function attempts to estimate the
+lattice from scratch. But if <em class="parameter"><code>a1a2</code></em>
+ contains two non-zero vectors it takes
+them as approximate lattice vectors to improve.</p>
+<p>If the function return <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> the array <em class="parameter"><code>a1a2</code></em>
+ is filled with useless values
+and must be ignored.</p>
+<div class="refsect3">
+<a name="gwy-data-field-measure-lattice-psdf.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>psdf2d</p></td>
+<td class="parameter_description"><p>Data field containing two-dimensional power spectrum density
+function (or alternatively Fourier coefficient modulus).</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>a1a2</p></td>
+<td class="parameter_description"><p>Lattice vectors as an array of four components: <em class="parameter"><code>x1</code></em>
+, <em class="parameter"><code>y1</code></em>
+, <em class="parameter"><code>x2</code></em>
+and
+<em class="parameter"><code>y2</code></em>
+(in real coordinates).</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gwy-data-field-measure-lattice-psdf.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if good lattice vectors were found, <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> on failure.</p>
+</div>
+<p class="since">Since: <a class="link" href="api-index-2-49.html#api-index-2.49">2.49</a></p>
+</div>
+<hr>
+<div class="refsect2">
<a name="gwy-data-line-correct-laplace"></a><h3>gwy_data_line_correct_laplace ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
gwy_data_line_correct_laplace (<em class="parameter"><code><a class="link" href="GwyDataLine.html" title="GwyDataLine"><span class="type">GwyDataLine</span></a> *data_line</code></em>,
@@ -734,7 +964,7 @@ Interior missing segments are filled with linear dependence between the edge
points. Missing segments with one end open are filled with the edge value.</p>
<div class="refsect3">
<a name="gwy-data-line-correct-laplace.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -780,7 +1010,7 @@ Zero or negative values in <em class="parameter"><code>result</code></em>
values siginify samples that are part of a scar.</p>
<div class="refsect3">
<a name="gwy-data-field-mark-scars.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -844,7 +1074,7 @@ gwy_data_field_unrotate_find_corrections
In addition an estimate is made about the prevalent one.</p>
<div class="refsect3">
<a name="gwy-data-field-unrotate-find-corrections.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwyprocess/html/libgwyprocess-correlation.html b/devel-docs/libgwyprocess/html/libgwyprocess-correlation.html
index f666132..0c0bddc 100644
--- a/devel-docs/libgwyprocess/html/libgwyprocess-correlation.html
+++ b/devel-docs/libgwyprocess/html/libgwyprocess-correlation.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>correlation: Gwyddion Data Processing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="prev" href="libgwyprocess-correct.html" title="correct">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwyprocess-correlation.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -65,7 +65,7 @@
</tr>
<tr>
<td class="function_type">
-<a class="link" href="libgwyprocess-gwyprocessenums.html#GwyComputationState" title="GwyComputationState"><span class="returnvalue">GwyComputationState</span></a> *
+<a class="link" href="libgwyprocess-gwyprocessenums.html#GwyComputationState"><span class="returnvalue">GwyComputationState</span></a> *
</td>
<td class="function_name">
<a class="link" href="libgwyprocess-correlation.html#gwy-data-field-crosscorrelate-init" title="gwy_data_field_crosscorrelate_init ()">gwy_data_field_crosscorrelate_init</a> <span class="c_punctuation">()</span>
@@ -105,7 +105,7 @@
</tr>
<tr>
<td class="function_type">
-<a class="link" href="libgwyprocess-gwyprocessenums.html#GwyComputationState" title="GwyComputationState"><span class="returnvalue">GwyComputationState</span></a> *
+<a class="link" href="libgwyprocess-gwyprocessenums.html#GwyComputationState"><span class="returnvalue">GwyComputationState</span></a> *
</td>
<td class="function_name">
<a class="link" href="libgwyprocess-correlation.html#gwy-data-field-correlate-init" title="gwy_data_field_correlate_init ()">gwy_data_field_correlate_init</a> <span class="c_punctuation">()</span>
@@ -166,7 +166,7 @@ postion of the correlation window on data is given by
function returns -1.0 (none correlation)..</p>
<div class="refsect3">
<a name="gwy-data-field-get-correlation-score.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -252,7 +252,7 @@ postion of the correlation window on data is given by
function returns -1.0 (none correlation)..</p>
<div class="refsect3">
<a name="gwy-data-field-get-weighted-correlation-score.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -341,7 +341,7 @@ in the <em class="parameter"><code>data_field2</code></em>
.</p>
<div class="refsect3">
<a name="gwy-data-field-crosscorrelate.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -402,7 +402,7 @@ used. Pass zero.</p></td>
<hr>
<div class="refsect2">
<a name="gwy-data-field-crosscorrelate-init"></a><h3>gwy_data_field_crosscorrelate_init ()</h3>
-<pre class="programlisting"><a class="link" href="libgwyprocess-gwyprocessenums.html#GwyComputationState" title="GwyComputationState"><span class="returnvalue">GwyComputationState</span></a> *
+<pre class="programlisting"><a class="link" href="libgwyprocess-gwyprocessenums.html#GwyComputationState"><span class="returnvalue">GwyComputationState</span></a> *
gwy_data_field_crosscorrelate_init (<em class="parameter"><code><a class="link" href="GwyDataField.html" title="GwyDataField"><span class="type">GwyDataField</span></a> *data_field1</code></em>,
<em class="parameter"><code><a class="link" href="GwyDataField.html" title="GwyDataField"><span class="type">GwyDataField</span></a> *data_field2</code></em>,
<em class="parameter"><code><a class="link" href="GwyDataField.html" title="GwyDataField"><span class="type">GwyDataField</span></a> *x_dist</code></em>,
@@ -416,7 +416,7 @@ gwy_data_field_crosscorrelate_init (<em class="parameter"><code><a class="link"
<p>This iterator reports its state as <a class="link" href="libgwyprocess-gwyprocessenums.html#GwyComputationStateType" title="enum GwyComputationStateType"><span class="type">GwyComputationStateType</span></a>.</p>
<div class="refsect3">
<a name="gwy-data-field-crosscorrelate-init.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -481,13 +481,13 @@ gwy_data_field_crosscorrelate_init (<em class="parameter"><code><a class="link"
<a name="gwy-data-field-crosscorrelate-set-weights"></a><h3>gwy_data_field_crosscorrelate_set_weights ()</h3>
<pre class="programlisting"><span class="returnvalue">void</span>
gwy_data_field_crosscorrelate_set_weights
- (<em class="parameter"><code><a class="link" href="libgwyprocess-gwyprocessenums.html#GwyComputationState" title="GwyComputationState"><span class="type">GwyComputationState</span></a> *state</code></em>,
+ (<em class="parameter"><code><a class="link" href="libgwyprocess-gwyprocessenums.html#GwyComputationState"><span class="type">GwyComputationState</span></a> *state</code></em>,
<em class="parameter"><code><a class="link" href="libgwyprocess-gwyprocessenums.html#GwyWindowingType" title="enum GwyWindowingType"><span class="type">GwyWindowingType</span></a> type</code></em>);</pre>
<p>Sets the weight function to be used within iterative cross-correlation algorithm. By default (not setting it),
rectangular windowing is used. This function should be called before running first iteration to get consistent results.</p>
<div class="refsect3">
<a name="gwy-data-field-crosscorrelate-set-weights.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -513,7 +513,7 @@ rectangular windowing is used. This function should be called before running fir
<a name="gwy-data-field-crosscorrelate-iteration"></a><h3>gwy_data_field_crosscorrelate_iteration ()</h3>
<pre class="programlisting"><span class="returnvalue">void</span>
gwy_data_field_crosscorrelate_iteration
- (<em class="parameter"><code><a class="link" href="libgwyprocess-gwyprocessenums.html#GwyComputationState" title="GwyComputationState"><span class="type">GwyComputationState</span></a> *state</code></em>);</pre>
+ (<em class="parameter"><code><a class="link" href="libgwyprocess-gwyprocessenums.html#GwyComputationState"><span class="type">GwyComputationState</span></a> *state</code></em>);</pre>
<p>Performs one iteration of cross-correlation.</p>
<p>Cross-correlation matches two different images of the same object under
changes.</p>
@@ -535,7 +535,7 @@ by finishing or being aborted, <a class="link" href="libgwyprocess-correlation.h
must be called to release allocated resources.</p>
<div class="refsect3">
<a name="gwy-data-field-crosscorrelate-iteration.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -554,11 +554,11 @@ must be called to release allocated resources.</p>
<a name="gwy-data-field-crosscorrelate-finalize"></a><h3>gwy_data_field_crosscorrelate_finalize ()</h3>
<pre class="programlisting"><span class="returnvalue">void</span>
gwy_data_field_crosscorrelate_finalize
- (<em class="parameter"><code><a class="link" href="libgwyprocess-gwyprocessenums.html#GwyComputationState" title="GwyComputationState"><span class="type">GwyComputationState</span></a> *state</code></em>);</pre>
+ (<em class="parameter"><code><a class="link" href="libgwyprocess-gwyprocessenums.html#GwyComputationState"><span class="type">GwyComputationState</span></a> *state</code></em>);</pre>
<p>Destroys a cross-correlation iterator, freeing all resources.</p>
<div class="refsect3">
<a name="gwy-data-field-crosscorrelate-finalize.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -596,7 +596,7 @@ the area where the kernel field fits into the data field completely are
set to -1 for <a class="link" href="libgwyprocess-gwyprocessenums.html#GWY-CORRELATION-NORMAL:CAPS"><code class="literal">GWY_CORRELATION_NORMAL</code></a>.</p>
<div class="refsect3">
<a name="gwy-data-field-correlate.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -630,7 +630,7 @@ set to -1 for <a class="link" href="libgwyprocess-gwyprocessenums.html#GWY-CORRE
<hr>
<div class="refsect2">
<a name="gwy-data-field-correlate-init"></a><h3>gwy_data_field_correlate_init ()</h3>
-<pre class="programlisting"><a class="link" href="libgwyprocess-gwyprocessenums.html#GwyComputationState" title="GwyComputationState"><span class="returnvalue">GwyComputationState</span></a> *
+<pre class="programlisting"><a class="link" href="libgwyprocess-gwyprocessenums.html#GwyComputationState"><span class="returnvalue">GwyComputationState</span></a> *
gwy_data_field_correlate_init (<em class="parameter"><code><a class="link" href="GwyDataField.html" title="GwyDataField"><span class="type">GwyDataField</span></a> *data_field</code></em>,
<em class="parameter"><code><a class="link" href="GwyDataField.html" title="GwyDataField"><span class="type">GwyDataField</span></a> *kernel_field</code></em>,
<em class="parameter"><code><a class="link" href="GwyDataField.html" title="GwyDataField"><span class="type">GwyDataField</span></a> *score</code></em>);</pre>
@@ -638,7 +638,7 @@ gwy_data_field_correlate_init (<em class="parameter"><code><a class="link" href=
<p>This iterator reports its state as <a class="link" href="libgwyprocess-gwyprocessenums.html#GwyComputationStateType" title="enum GwyComputationStateType"><span class="type">GwyComputationStateType</span></a>.</p>
<div class="refsect3">
<a name="gwy-data-field-correlate-init.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -672,7 +672,7 @@ gwy_data_field_correlate_init (<em class="parameter"><code><a class="link" href=
<div class="refsect2">
<a name="gwy-data-field-correlate-iteration"></a><h3>gwy_data_field_correlate_iteration ()</h3>
<pre class="programlisting"><span class="returnvalue">void</span>
-gwy_data_field_correlate_iteration (<em class="parameter"><code><a class="link" href="libgwyprocess-gwyprocessenums.html#GwyComputationState" title="GwyComputationState"><span class="type">GwyComputationState</span></a> *state</code></em>);</pre>
+gwy_data_field_correlate_iteration (<em class="parameter"><code><a class="link" href="libgwyprocess-gwyprocessenums.html#GwyComputationState"><span class="type">GwyComputationState</span></a> *state</code></em>);</pre>
<p>Performs one iteration of correlation.</p>
<p>An iterator can be created with <a class="link" href="libgwyprocess-correlation.html#gwy-data-field-correlate-init" title="gwy_data_field_correlate_init ()"><code class="function">gwy_data_field_correlate_init()</code></a>.
When iteration ends, either by finishing or being aborted,
@@ -680,7 +680,7 @@ When iteration ends, either by finishing or being aborted,
resources.</p>
<div class="refsect3">
<a name="gwy-data-field-correlate-iteration.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -698,11 +698,11 @@ resources.</p>
<div class="refsect2">
<a name="gwy-data-field-correlate-finalize"></a><h3>gwy_data_field_correlate_finalize ()</h3>
<pre class="programlisting"><span class="returnvalue">void</span>
-gwy_data_field_correlate_finalize (<em class="parameter"><code><a class="link" href="libgwyprocess-gwyprocessenums.html#GwyComputationState" title="GwyComputationState"><span class="type">GwyComputationState</span></a> *state</code></em>);</pre>
+gwy_data_field_correlate_finalize (<em class="parameter"><code><a class="link" href="libgwyprocess-gwyprocessenums.html#GwyComputationState"><span class="type">GwyComputationState</span></a> *state</code></em>);</pre>
<p>Destroys a correlation iterator, freeing all resources.</p>
<div class="refsect3">
<a name="gwy-data-field-correlate-finalize.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwyprocess/html/libgwyprocess-cwt.html b/devel-docs/libgwyprocess/html/libgwyprocess-cwt.html
index 059a6b3..6cc274b 100644
--- a/devel-docs/libgwyprocess/html/libgwyprocess-cwt.html
+++ b/devel-docs/libgwyprocess/html/libgwyprocess-cwt.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>cwt: Gwyddion Data Processing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="prev" href="libgwyprocess-correlation.html" title="correlation">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwyprocess-cwt.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
diff --git a/devel-docs/libgwyprocess/html/libgwyprocess-dwt.html b/devel-docs/libgwyprocess/html/libgwyprocess-dwt.html
index f1b7409..5a0d29e 100644
--- a/devel-docs/libgwyprocess/html/libgwyprocess-dwt.html
+++ b/devel-docs/libgwyprocess/html/libgwyprocess-dwt.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>dwt: Gwyddion Data Processing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="prev" href="libgwyprocess-cwt.html" title="cwt">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwyprocess-dwt.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -108,7 +108,7 @@ gwy_dwt_set_coefficients (<em class="parameter"><code><a class="link" href="GwyD
<p>Fills resampled or nely allocated data line with wavelet coefficients.</p>
<div class="refsect3">
<a name="gwy-dwt-set-coefficients.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -152,7 +152,7 @@ or <em class="parameter"><code>minsize</code></em>
= 4 to perform full decomposition (or anything between).</p>
<div class="refsect3">
<a name="gwy-data-line-dwt.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -201,7 +201,7 @@ or <em class="parameter"><code>minsize</code></em>
= 4 to perform full decomposition (or anything between).</p>
<div class="refsect3">
<a name="gwy-data-field-xdwt.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -250,7 +250,7 @@ or <em class="parameter"><code>minsize</code></em>
= 4 to perform full decomposition (or anything between).</p>
<div class="refsect3">
<a name="gwy-data-field-ydwt.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -299,7 +299,7 @@ or <em class="parameter"><code>minsize</code></em>
= 4 to perform full decomposition (or anything between).</p>
<div class="refsect3">
<a name="gwy-data-field-dwt.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -349,7 +349,7 @@ or <em class="parameter"><code>minsize</code></em>
= 4 to perform full decomposition (or anything between).</p>
<div class="refsect3">
<a name="gwy-data-field-dwt-mark-anisotropy.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwyprocess/html/libgwyprocess-elliptic.html b/devel-docs/libgwyprocess/html/libgwyprocess-elliptic.html
index d880e5f..c31aad5 100644
--- a/devel-docs/libgwyprocess/html/libgwyprocess-elliptic.html
+++ b/devel-docs/libgwyprocess/html/libgwyprocess-elliptic.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>elliptic: Gwyddion Data Processing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="prev" href="libgwyprocess-dwt.html" title="dwt">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwyprocess-elliptic.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -111,6 +111,14 @@
<a class="link" href="libgwyprocess-elliptic.html#gwy-data-field-get-circular-area-size" title="gwy_data_field_get_circular_area_size ()">gwy_data_field_get_circular_area_size</a> <span class="c_punctuation">()</span>
</td>
</tr>
+<tr>
+<td class="function_type">
+<a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="libgwyprocess-elliptic.html#gwy-data-field-local-maximum" title="gwy_data_field_local_maximum ()">gwy_data_field_local_maximum</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
</tbody>
</table></div>
</div>
@@ -205,14 +213,14 @@ gwy_data_field_elliptic_area_fill (<em class="parameter"><code><a class="link" h
<em class="parameter"><code><a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> col</code></em>,
<em class="parameter"><code><a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> row</code></em>,
<em class="parameter"><code><a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> width</code></em>,
- <em class="parameter"><code><a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> height</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> height</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> value</code></em>);</pre>
<p>Fills an elliptic region of a data field with given value.</p>
<p>The elliptic region is defined by its bounding box which must be completely
contained in the data field.</p>
<div class="refsect3">
<a name="gwy-data-field-elliptic-area-fill.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -272,7 +280,7 @@ gwy_data_field_elliptic_area_extract (<em class="parameter"><code><a class="link
contained in the data field.</p>
<div class="refsect3">
<a name="gwy-data-field-elliptic-area-extract.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -343,7 +351,7 @@ allowing to implement pixel-wise filters on elliptic areas. Values from
<a class="link" href="libgwyprocess-elliptic.html#gwy-data-field-elliptic-area-extract" title="gwy_data_field_elliptic_area_extract ()"><code class="function">gwy_data_field_elliptic_area_extract()</code></a> took them from.</p>
<div class="refsect3">
<a name="gwy-data-field-elliptic-area-unextract.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -394,7 +402,7 @@ gwy_data_field_get_elliptic_area_size (<em class="parameter"><code><a href="/usr
<p>Calculates an upper bound of the number of samples in an elliptic region.</p>
<div class="refsect3">
<a name="gwy-data-field-get-elliptic-area-size.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -432,7 +440,7 @@ gwy_data_field_circular_area_fill (<em class="parameter"><code><a class="link" h
<p>Fills an elliptic region of a data field with given value.</p>
<div class="refsect3">
<a name="gwy-data-field-circular-area-fill.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -487,7 +495,7 @@ gwy_data_field_circular_area_extract (<em class="parameter"><code><a class="link
<p>Extracts values from a circular region of a data field.</p>
<div class="refsect3">
<a name="gwy-data-field-circular-area-extract.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -554,7 +562,7 @@ area centre, i.e. to (<em class="parameter"><code>col</code></em>
.</p>
<div class="refsect3">
<a name="gwy-data-field-circular-area-extract-with-pos.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -637,7 +645,7 @@ allowing to implement pixel-wise filters on circular areas. Values from
<a class="link" href="libgwyprocess-elliptic.html#gwy-data-field-circular-area-extract" title="gwy_data_field_circular_area_extract ()"><code class="function">gwy_data_field_circular_area_extract()</code></a> took them from.</p>
<div class="refsect3">
<a name="gwy-data-field-circular-area-unextract.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -682,7 +690,7 @@ gwy_data_field_get_circular_area_size (<em class="parameter"><code><a href="/usr
<p>Calculates an upper bound of the number of samples in a circular region.</p>
<div class="refsect3">
<a name="gwy-data-field-get-circular-area-size.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -701,6 +709,75 @@ gwy_data_field_get_circular_area_size (<em class="parameter"><code><a href="/usr
bounds (or its upper bound).</p>
</div>
</div>
+<hr>
+<div class="refsect2">
+<a name="gwy-data-field-local-maximum"></a><h3>gwy_data_field_local_maximum ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gwy_data_field_local_maximum (<em class="parameter"><code><a class="link" href="GwyDataField.html" title="GwyDataField"><span class="type">GwyDataField</span></a> *dfield</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> *x</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> *y</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> ax</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> ay</code></em>);</pre>
+<p>Searches an elliptical area in a data field for local maximum.</p>
+<p>The area may stick outside the data field.</p>
+<p>The function first finds the maximum within the ellipse, intersected with
+the data field and then tries subpixel refinement. The maximum is
+considered successfully located if it is inside the data field, i.e. not on
+edge, there is no higher value in its 8-neighbourhood, and the subpixel
+refinement of its position succeeds (which usually happens when the
+first two conditions are met, but not always).</p>
+<p>Even if the function returns <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> the values of <em class="parameter"><code>x</code></em>
+ and <em class="parameter"><code>y</code></em>
+ are reasonable,
+but they may not correspond to an actual maximum.</p>
+<p>The radii can be zero. A single pixel is then examined, but if it is indeed
+a local maximum, its position is refined.</p>
+<div class="refsect3">
+<a name="gwy-data-field-local-maximum.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>dfield</p></td>
+<td class="parameter_description"><p>A two-dimensional data field.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>x</p></td>
+<td class="parameter_description"><p>Approximate maximum <em class="parameter"><code>x</code></em>
+-location to be improved (in pixels).</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>y</p></td>
+<td class="parameter_description"><p>Approximate maximum <em class="parameter"><code>y</code></em>
+-location to be improved (in pixels).</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>ax</p></td>
+<td class="parameter_description"><p>Horizontal search radius.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>ay</p></td>
+<td class="parameter_description"><p>Vertical search radius.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gwy-data-field-local-maximum.returns"></a><h4>Returns</h4>
+<p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the maximum was successfully located. <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> when the
+location is problematic and should not be used.</p>
+</div>
+<p class="since">Since: <a class="link" href="api-index-2-49.html#api-index-2.49">2.49</a></p>
+</div>
</div>
<div class="refsect1">
<a name="libgwyprocess-elliptic.other_details"></a><h2>Types and Values</h2>
diff --git a/devel-docs/libgwyprocess/html/libgwyprocess-filters.html b/devel-docs/libgwyprocess/html/libgwyprocess-filters.html
index 09d3015..f7cfd70 100644
--- a/devel-docs/libgwyprocess/html/libgwyprocess-filters.html
+++ b/devel-docs/libgwyprocess/html/libgwyprocess-filters.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>filters: Gwyddion Data Processing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="prev" href="libgwyprocess-elliptic.html" title="elliptic">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwyprocess-filters.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -124,6 +124,14 @@
<span class="returnvalue">void</span>
</td>
<td class="function_name">
+<a class="link" href="libgwyprocess-filters.html#gwy-data-field-area-ext-convolve" title="gwy_data_field_area_ext_convolve ()">gwy_data_field_area_ext_convolve</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
<a class="link" href="libgwyprocess-filters.html#gwy-data-field-convolve-1d" title="gwy_data_field_convolve_1d ()">gwy_data_field_convolve_1d</a> <span class="c_punctuation">()</span>
</td>
</tr>
@@ -140,6 +148,14 @@
<span class="returnvalue">void</span>
</td>
<td class="function_name">
+<a class="link" href="libgwyprocess-filters.html#gwy-data-field-area-ext-row-convolve" title="gwy_data_field_area_ext_row_convolve ()">gwy_data_field_area_ext_row_convolve</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
<a class="link" href="libgwyprocess-filters.html#gwy-data-field-filter-median" title="gwy_data_field_filter_median ()">gwy_data_field_filter_median</a> <span class="c_punctuation">()</span>
</td>
</tr>
@@ -436,7 +452,7 @@ gwy_data_field_normalize (<em class="parameter"><code><a class="link" href="GwyD
is filled with only one value, it is changed to 0.0.</p>
<div class="refsect3">
<a name="gwy-data-field-normalize.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -477,7 +493,7 @@ gwy_data_field_fill(<em class="parameter"><code>data_field</code></em>
).</p>
<div class="refsect3">
<a name="gwy-data-field-renormalize.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -535,7 +551,7 @@ gwy_data_field_fill(<em class="parameter"><code>data_field</code></em>
).</p>
<div class="refsect3">
<a name="gwy-data-field-area-renormalize.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -599,7 +615,7 @@ than <em class="parameter"><code>threshold</code></em>
</p>
<div class="refsect3">
<a name="gwy-data-field-threshold.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -655,7 +671,7 @@ than <em class="parameter"><code>threshold</code></em>
</p>
<div class="refsect3">
<a name="gwy-data-field-area-threshold.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -720,7 +736,7 @@ gwy_data_field_clamp (<em class="parameter"><code><a class="link" href="GwyDataF
<p>Limits data field values to a range.</p>
<div class="refsect3">
<a name="gwy-data-field-clamp.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -767,7 +783,7 @@ gwy_data_field_area_clamp (<em class="parameter"><code><a class="link" href="Gwy
<p>Limits values in a rectangular part of a data field to a range.</p>
<div class="refsect3">
<a name="gwy-data-field-area-clamp.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -860,7 +876,7 @@ errors of all output values are given by the largest input values, that is
relative precision of results small in absolute value may be poor.</p>
<div class="refsect3">
<a name="gwy-data-field-area-gather.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -944,7 +960,7 @@ gwy_data_field_convolve (<em class="parameter"><code><a class="link" href="GwyDa
<p>Convolves a data field with given kernel.</p>
<div class="refsect3">
<a name="gwy-data-field-convolve.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -981,7 +997,7 @@ gwy_data_field_area_convolve (<em class="parameter"><code><a class="link" href="
<p>Convolves a rectangular part of a data field with given kernel.</p>
<div class="refsect3">
<a name="gwy-data-field-area-convolve.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1027,6 +1043,127 @@ with.</p></td>
</div>
<hr>
<div class="refsect2">
+<a name="gwy-data-field-area-ext-convolve"></a><h3>gwy_data_field_area_ext_convolve ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gwy_data_field_area_ext_convolve (<em class="parameter"><code><a class="link" href="GwyDataField.html" title="GwyDataField"><span class="type">GwyDataField</span></a> *field</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> col</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> row</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> width</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> height</code></em>,
+ <em class="parameter"><code><a class="link" href="GwyDataField.html" title="GwyDataField"><span class="type">GwyDataField</span></a> *target</code></em>,
+ <em class="parameter"><code><a class="link" href="GwyDataField.html" title="GwyDataField"><span class="type">GwyDataField</span></a> *kernel</code></em>,
+ <em class="parameter"><code><a class="link" href="libgwyprocess-gwyprocessenums.html#GwyExteriorType" title="enum GwyExteriorType"><span class="type">GwyExteriorType</span></a> exterior</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> fill_value</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> as_integral</code></em>);</pre>
+<p>Convolve a field with a two-dimensional kernel.</p>
+<p>Pixel dimensions of <em class="parameter"><code>target</code></em>
+ may match either <em class="parameter"><code>field</code></em>
+ or just the rectangular
+area. In the former case the result is written in the same rectangular
+area; in the latter case the result fills the entire <em class="parameter"><code>target</code></em>
+.</p>
+<p>The convolution is performed with the kernel centred on the respective field
+pixels. For directions in which the kernel has an odd size this holds
+precisely. For an even-sized kernel this means the kernel centre is placed
+0.5 pixel left or up (towards lower indices) from the respective field
+pixel.</p>
+<p>See <a class="link" href="libgwyprocess-arithmetic.html#gwy-data-field-extend" title="gwy_data_field_extend ()"><code class="function">gwy_data_field_extend()</code></a> for what constitutes the exterior and how it is
+handled.</p>
+<p>If <em class="parameter"><code>as_integral</code></em>
+ is <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> the function performs a simple discrete
+convolution sum and the value units of <em class="parameter"><code>target</code></em>
+ are set to product of <em class="parameter"><code>field</code></em>
+
+and <em class="parameter"><code>kernel</code></em>
+ units.</p>
+<p>If <em class="parameter"><code>as_integral</code></em>
+ is <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> the function approximates a convolution integral.
+In this case <em class="parameter"><code>kernel</code></em>
+ should be a sampled continuous transfer function.
+The units of value <em class="parameter"><code>target</code></em>
+ are set to product of <em class="parameter"><code>field</code></em>
+ and <em class="parameter"><code>kernel</code></em>
+ value
+units and <em class="parameter"><code>field</code></em>
+ lateral units squared. Furthermore, the discrete sum is
+multiplied by the pixel size (i.e. d<em class="parameter"><code>x</code></em>
+ d<em class="parameter"><code>y</code></em>
+ in the integral).</p>
+<p>In either case, the lateral units and pixel size of <em class="parameter"><code>kernel</code></em>
+ are assumed to
+be the same as for <em class="parameter"><code>field</code></em>
+ (albeit not checked), because the convolution does
+not make sense otherwise.</p>
+<div class="refsect3">
+<a name="gwy-data-field-area-ext-convolve.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>field</p></td>
+<td class="parameter_description"><p>A two-dimensional data field.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>col</p></td>
+<td class="parameter_description"><p>Upper-left column coordinate.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>row</p></td>
+<td class="parameter_description"><p>Upper-left row coordinate.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>width</p></td>
+<td class="parameter_description"><p>Area width (number of columns).</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>height</p></td>
+<td class="parameter_description"><p>Area height (number of rows).</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>target</p></td>
+<td class="parameter_description"><p>A two-dimensional data field where the result will be placed.
+It may be <em class="parameter"><code>field</code></em>
+for an in-place modification.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>kernel</p></td>
+<td class="parameter_description"><p>Kernel to convolve <em class="parameter"><code>field</code></em>
+with.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>exterior</p></td>
+<td class="parameter_description"><p>Exterior pixels handling.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>fill_value</p></td>
+<td class="parameter_description"><p>The value to use with <a class="link" href="libgwyprocess-gwyprocessenums.html#GWY-EXTERIOR-FIXED-VALUE:CAPS"><code class="literal">GWY_EXTERIOR_FIXED_VALUE</code></a> exterior.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>as_integral</p></td>
+<td class="parameter_description"><p><a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> for normalisation and units as a convolution integral,
+<a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> as a sum.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: <a class="link" href="api-index-2-49.html#api-index-2.49">2.49</a></p>
+</div>
+<hr>
+<div class="refsect2">
<a name="gwy-data-field-convolve-1d"></a><h3>gwy_data_field_convolve_1d ()</h3>
<pre class="programlisting"><span class="returnvalue">void</span>
gwy_data_field_convolve_1d (<em class="parameter"><code><a class="link" href="GwyDataField.html" title="GwyDataField"><span class="type">GwyDataField</span></a> *data_field</code></em>,
@@ -1035,7 +1172,7 @@ gwy_data_field_convolve_1d (<em class="parameter"><code><a class="link" href="Gw
<p>Convolves a data field with given linear kernel.</p>
<div class="refsect3">
<a name="gwy-data-field-convolve-1d.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1081,7 +1218,7 @@ gwy_data_field_area_convolve_1d (<em class="parameter"><code><a class="link" hre
horizontal and vertical convolutions instead one 2D convolution.</p>
<div class="refsect3">
<a name="gwy-data-field-area-convolve-1d.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1135,6 +1272,125 @@ column-wise convolution).</p></td>
</div>
<hr>
<div class="refsect2">
+<a name="gwy-data-field-area-ext-row-convolve"></a><h3>gwy_data_field_area_ext_row_convolve ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gwy_data_field_area_ext_row_convolve (<em class="parameter"><code><a class="link" href="GwyDataField.html" title="GwyDataField"><span class="type">GwyDataField</span></a> *field</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> col</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> row</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> width</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> height</code></em>,
+ <em class="parameter"><code><a class="link" href="GwyDataField.html" title="GwyDataField"><span class="type">GwyDataField</span></a> *target</code></em>,
+ <em class="parameter"><code><a class="link" href="GwyDataLine.html" title="GwyDataLine"><span class="type">GwyDataLine</span></a> *kernel</code></em>,
+ <em class="parameter"><code><a class="link" href="libgwyprocess-gwyprocessenums.html#GwyExteriorType" title="enum GwyExteriorType"><span class="type">GwyExteriorType</span></a> exterior</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> fill_value</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> as_integral</code></em>);</pre>
+<p>Convolve a field row-wise with a one-dimensional kernel.</p>
+<p>Pixel dimensions of <em class="parameter"><code>target</code></em>
+ may match either <em class="parameter"><code>field</code></em>
+ or just the rectangular
+area. In the former case the result is written in the same rectangular
+area; in the latter case the result fills the entire <em class="parameter"><code>target</code></em>
+.</p>
+<p>The convolution is performed with the kernel centred on the respective field
+pixels. For an odd-sized kernel this holds precisely. For an even-sized
+kernel this means the kernel centre is placed 0.5 pixel to the left
+(towards lower column indices) from the respective field pixel.</p>
+<p>See <a class="link" href="libgwyprocess-arithmetic.html#gwy-data-field-extend" title="gwy_data_field_extend ()"><code class="function">gwy_data_field_extend()</code></a> for what constitutes the exterior and how it is
+handled.</p>
+<p>If <em class="parameter"><code>as_integral</code></em>
+ is <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> the function performs a simple discrete
+convolution sum and the value units of <em class="parameter"><code>target</code></em>
+ are set to product of <em class="parameter"><code>field</code></em>
+
+and <em class="parameter"><code>kernel</code></em>
+ units.</p>
+<p>If <em class="parameter"><code>as_integral</code></em>
+ is <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> the function approximates a convolution integral.
+In this case <em class="parameter"><code>kernel</code></em>
+ should be a sampled continuous transfer function.
+The units of value <em class="parameter"><code>target</code></em>
+ are set to product of <em class="parameter"><code>field</code></em>
+ and <em class="parameter"><code>kernel</code></em>
+ value
+units and <em class="parameter"><code>field</code></em>
+ lateral units. Furthermore, the discrete sum is multiplied
+by the pixel size (i.e. d<em class="parameter"><code>x</code></em>
+ in the integral).</p>
+<p>In either case, the lateral units and pixel size of <em class="parameter"><code>kernel</code></em>
+ are assumed to
+be the same as for a <em class="parameter"><code>field</code></em>
+'s row (albeit not checked), because
+the convolution does not make sense otherwise.</p>
+<div class="refsect3">
+<a name="gwy-data-field-area-ext-row-convolve.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>field</p></td>
+<td class="parameter_description"><p>A two-dimensional data field.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>col</p></td>
+<td class="parameter_description"><p>Upper-left column coordinate.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>row</p></td>
+<td class="parameter_description"><p>Upper-left row coordinate.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>width</p></td>
+<td class="parameter_description"><p>Area width (number of columns).</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>height</p></td>
+<td class="parameter_description"><p>Area height (number of rows).</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>target</p></td>
+<td class="parameter_description"><p>A two-dimensional data field where the result will be placed.
+It may be <em class="parameter"><code>field</code></em>
+for an in-place modification.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>kernel</p></td>
+<td class="parameter_description"><p>Kernel to convolve <em class="parameter"><code>field</code></em>
+with.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>exterior</p></td>
+<td class="parameter_description"><p>Exterior pixels handling.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>fill_value</p></td>
+<td class="parameter_description"><p>The value to use with <a class="link" href="libgwyprocess-gwyprocessenums.html#GWY-EXTERIOR-FIXED-VALUE:CAPS"><code class="literal">GWY_EXTERIOR_FIXED_VALUE</code></a> exterior.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>as_integral</p></td>
+<td class="parameter_description"><p><a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> for normalisation and units as a convolution integral,
+<a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> as a sum.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: <a class="link" href="api-index-2-49.html#api-index-2.49">2.49</a></p>
+</div>
+<hr>
+<div class="refsect2">
<a name="gwy-data-field-filter-median"></a><h3>gwy_data_field_filter_median ()</h3>
<pre class="programlisting"><span class="returnvalue">void</span>
gwy_data_field_filter_median (<em class="parameter"><code><a class="link" href="GwyDataField.html" title="GwyDataField"><span class="type">GwyDataField</span></a> *data_field</code></em>,
@@ -1142,7 +1398,7 @@ gwy_data_field_filter_median (<em class="parameter"><code><a class="link" href="
<p>Filters a data field with median filter.</p>
<div class="refsect3">
<a name="gwy-data-field-filter-median.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1176,7 +1432,7 @@ gwy_data_field_area_filter_median (<em class="parameter"><code><a class="link" h
<p>Filters a rectangular part of a data field with median filter.</p>
<div class="refsect3">
<a name="gwy-data-field-area-filter-median.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1227,7 +1483,7 @@ gwy_data_field_filter_mean (<em class="parameter"><code><a class="link" href="Gw
.</p>
<div class="refsect3">
<a name="gwy-data-field-filter-mean.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1263,7 +1519,7 @@ gwy_data_field_area_filter_mean (<em class="parameter"><code><a class="link" hre
<p>This method is a simple <a class="link" href="libgwyprocess-filters.html#gwy-data-field-area-gather" title="gwy_data_field_area_gather ()"><code class="function">gwy_data_field_area_gather()</code></a> wrapper.</p>
<div class="refsect3">
<a name="gwy-data-field-area-filter-mean.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1313,7 +1569,7 @@ gwy_data_field_filter_conservative (<em class="parameter"><code><a class="link"
<p>Filters a data field with conservative denoise filter.</p>
<div class="refsect3">
<a name="gwy-data-field-filter-conservative.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1348,7 +1604,7 @@ gwy_data_field_area_filter_conservative
<p>Filters a rectangular part of a data field with conservative denoise filter.</p>
<div class="refsect3">
<a name="gwy-data-field-area-filter-conservative.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1397,7 +1653,7 @@ gwy_data_field_filter_laplacian (<em class="parameter"><code><a class="link" hre
<p>Filters a data field with Laplacian filter.</p>
<div class="refsect3">
<a name="gwy-data-field-filter-laplacian.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1423,7 +1679,7 @@ gwy_data_field_area_filter_laplacian (<em class="parameter"><code><a class="link
<p>Filters a rectangular part of a data field with Laplacian filter.</p>
<div class="refsect3">
<a name="gwy-data-field-area-filter-laplacian.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1468,7 +1724,7 @@ gwy_data_field_filter_laplacian_of_gaussians
<p>Filters a data field with Laplacian of Gaussians filter.</p>
<div class="refsect3">
<a name="gwy-data-field-filter-laplacian-of-gaussians.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1497,7 +1753,7 @@ gwy_data_field_area_filter_laplacian_of_gaussians
with Laplacian of Gaussians filter.</p>
<div class="refsect3">
<a name="gwy-data-field-area-filter-laplacian-of-gaussians.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1543,7 +1799,7 @@ gwy_data_field_filter_sobel (<em class="parameter"><code><a class="link" href="G
<p>Filters a data field with a directional Sobel filter.</p>
<div class="refsect3">
<a name="gwy-data-field-filter-sobel.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1577,7 +1833,7 @@ gwy_data_field_area_filter_sobel (<em class="parameter"><code><a class="link" hr
<p>Filters a rectangular part of a data field with a directional Sobel filter.</p>
<div class="refsect3">
<a name="gwy-data-field-area-filter-sobel.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1626,7 +1882,7 @@ gwy_data_field_filter_sobel_total (<em class="parameter"><code><a class="link" h
<p>Filters a data field with total Sobel filter.</p>
<div class="refsect3">
<a name="gwy-data-field-filter-sobel-total.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1650,7 +1906,7 @@ gwy_data_field_filter_prewitt (<em class="parameter"><code><a class="link" href=
<p>Filters a data field with Prewitt filter.</p>
<div class="refsect3">
<a name="gwy-data-field-filter-prewitt.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1685,7 +1941,7 @@ gwy_data_field_area_filter_prewitt (<em class="parameter"><code><a class="link"
filter.</p>
<div class="refsect3">
<a name="gwy-data-field-area-filter-prewitt.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1734,7 +1990,7 @@ gwy_data_field_filter_prewitt_total (<em class="parameter"><code><a class="link"
<p>Filters a data field with total Prewitt filter.</p>
<div class="refsect3">
<a name="gwy-data-field-filter-prewitt-total.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1762,7 +2018,7 @@ physical units, not pixel-wise), except at the edges where the differences
are one-sided.</p>
<div class="refsect3">
<a name="gwy-data-field-filter-slope.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1799,7 +2055,7 @@ gwy_data_field_filter_dechecker (<em class="parameter"><code><a class="link" hre
<p>Filters a data field with 5x5 checker pattern removal filter.</p>
<div class="refsect3">
<a name="gwy-data-field-filter-dechecker.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1827,7 +2083,7 @@ gwy_data_field_area_filter_dechecker (<em class="parameter"><code><a class="link
filter.</p>
<div class="refsect3">
<a name="gwy-data-field-area-filter-dechecker.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1873,7 +2129,7 @@ gwy_data_field_filter_gaussian (<em class="parameter"><code><a class="link" href
<p>Filters a data field with a Gaussian filter.</p>
<div class="refsect3">
<a name="gwy-data-field-filter-gaussian.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1909,7 +2165,7 @@ gwy_data_field_area_filter_gaussian (<em class="parameter"><code><a class="link"
<p>The Gausian is normalized, i.e. it is sum-preserving.</p>
<div class="refsect3">
<a name="gwy-data-field-area-filter-gaussian.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1960,7 +2216,7 @@ gwy_data_field_filter_minimum (<em class="parameter"><code><a class="link" href=
<p>Filters a data field with minimum filter.</p>
<div class="refsect3">
<a name="gwy-data-field-filter-minimum.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1995,7 +2251,7 @@ gwy_data_field_area_filter_minimum (<em class="parameter"><code><a class="link"
<p>This operation is often called erosion filter.</p>
<div class="refsect3">
<a name="gwy-data-field-area-filter-minimum.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2045,7 +2301,7 @@ gwy_data_field_filter_maximum (<em class="parameter"><code><a class="link" href=
<p>Filters a data field with maximum filter.</p>
<div class="refsect3">
<a name="gwy-data-field-filter-maximum.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2080,7 +2336,7 @@ gwy_data_field_area_filter_maximum (<em class="parameter"><code><a class="link"
<p>This operation is often called dilation filter.</p>
<div class="refsect3">
<a name="gwy-data-field-area-filter-maximum.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2156,7 +2412,7 @@ structuring elements, are much faster for large sizes of the squares.</p>
<p>The exterior is always handled as <a class="link" href="libgwyprocess-gwyprocessenums.html#GWY-EXTERIOR-BORDER-EXTEND:CAPS"><code class="literal">GWY_EXTERIOR_BORDER_EXTEND</code></a>.</p>
<div class="refsect3">
<a name="gwy-data-field-area-filter-min-max.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2225,7 +2481,7 @@ largest disc in the sequence fits into a (2<em class="parameter"><code>size</cod
+ 1) square.</p>
<div class="refsect3">
<a name="gwy-data-field-area-filter-disc-asf.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2284,7 +2540,7 @@ gwy_data_field_filter_rms (<em class="parameter"><code><a class="link" href="Gwy
<p>Filters a data field with RMS filter.</p>
<div class="refsect3">
<a name="gwy-data-field-filter-rms.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2320,7 +2576,7 @@ gwy_data_field_area_filter_rms (<em class="parameter"><code><a class="link" href
<p>RMS filter computes root mean square in given area.</p>
<div class="refsect3">
<a name="gwy-data-field-area-filter-rms.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2369,7 +2625,7 @@ gwy_data_field_filter_kuwahara (<em class="parameter"><code><a class="link" href
<p>Filters a data field with Kuwahara filter.</p>
<div class="refsect3">
<a name="gwy-data-field-filter-kuwahara.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2396,7 +2652,7 @@ gwy_data_field_area_filter_kuwahara (<em class="parameter"><code><a class="link"
(edge-preserving smoothing) filter.</p>
<div class="refsect3">
<a name="gwy-data-field-area-filter-kuwahara.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2441,7 +2697,7 @@ gwy_data_field_filter_canny (<em class="parameter"><code><a class="link" href="G
<p>Filters a rectangular part of a data field with canny edge detector filter.</p>
<div class="refsect3">
<a name="gwy-data-field-filter-canny.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2473,7 +2729,7 @@ gwy_data_field_shade (<em class="parameter"><code><a class="link" href="GwyDataF
<p>Shades a data field.</p>
<div class="refsect3">
<a name="gwy-data-field-shade.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2519,7 +2775,7 @@ gwy_data_field_filter_harris (<em class="parameter"><code><a class="link" href="
<p>All passed data field must have the same size.</p>
<div class="refsect3">
<a name="gwy-data-field-filter-harris.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwyprocess/html/libgwyprocess-fractals.html b/devel-docs/libgwyprocess/html/libgwyprocess-fractals.html
index e5cc65d..d09977b 100644
--- a/devel-docs/libgwyprocess/html/libgwyprocess-fractals.html
+++ b/devel-docs/libgwyprocess/html/libgwyprocess-fractals.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>fractals: Gwyddion Data Processing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="prev" href="libgwyprocess-filters.html" title="filters">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwyprocess-fractals.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -138,7 +138,7 @@ gwy_data_field_fractal_partitioning (<em class="parameter"><code><a class="link"
they will contain corresponding values at each position.</p>
<div class="refsect3">
<a name="gwy-data-field-fractal-partitioning.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -184,7 +184,7 @@ gwy_data_field_fractal_cubecounting (<em class="parameter"><code><a class="link"
they will contain corresponding values at each position.</p>
<div class="refsect3">
<a name="gwy-data-field-fractal-cubecounting.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -230,7 +230,7 @@ gwy_data_field_fractal_triangulation (<em class="parameter"><code><a class="link
they will contain corresponding values at each position.</p>
<div class="refsect3">
<a name="gwy-data-field-fractal-triangulation.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -276,7 +276,7 @@ gwy_data_field_fractal_psdf (<em class="parameter"><code><a class="link" href="G
they will contain corresponding values at each position.</p>
<div class="refsect3">
<a name="gwy-data-field-fractal-psdf.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -323,7 +323,7 @@ gwy_data_field_fractal_cubecounting_dim
<a class="link" href="libgwyprocess-fractals.html#gwy-data-field-fractal-cubecounting" title="gwy_data_field_fractal_cubecounting ()"><code class="function">gwy_data_field_fractal_cubecounting()</code></a>.</p>
<div class="refsect3">
<a name="gwy-data-field-fractal-cubecounting-dim.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -374,7 +374,7 @@ gwy_data_field_fractal_triangulation_dim
<a class="link" href="libgwyprocess-fractals.html#gwy-data-field-fractal-triangulation" title="gwy_data_field_fractal_triangulation ()"><code class="function">gwy_data_field_fractal_triangulation()</code></a>.</p>
<div class="refsect3">
<a name="gwy-data-field-fractal-triangulation-dim.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -425,7 +425,7 @@ gwy_data_field_fractal_partitioning_dim
<a class="link" href="libgwyprocess-fractals.html#gwy-data-field-fractal-partitioning" title="gwy_data_field_fractal_partitioning ()"><code class="function">gwy_data_field_fractal_partitioning()</code></a>.</p>
<div class="refsect3">
<a name="gwy-data-field-fractal-partitioning-dim.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -476,7 +476,7 @@ log-log plot data.</p>
<a class="link" href="libgwyprocess-fractals.html#gwy-data-field-fractal-psdf" title="gwy_data_field_fractal_psdf ()"><code class="function">gwy_data_field_fractal_psdf()</code></a>.</p>
<div class="refsect3">
<a name="gwy-data-field-fractal-psdf-dim.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -522,7 +522,7 @@ gwy_data_field_fractal_correction (<em class="parameter"><code><a class="link" h
interpolation.</p>
<div class="refsect3">
<a name="gwy-data-field-fractal-correction.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwyprocess/html/libgwyprocess-grains.html b/devel-docs/libgwyprocess/html/libgwyprocess-grains.html
index c5cd675..2ddf8f9 100644
--- a/devel-docs/libgwyprocess/html/libgwyprocess-grains.html
+++ b/devel-docs/libgwyprocess/html/libgwyprocess-grains.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>grains: Gwyddion Data Processing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="prev" href="libgwyprocess-fractals.html" title="fractals">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwyprocess-grains.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -105,7 +105,7 @@
</tr>
<tr>
<td class="function_type">
-<a class="link" href="libgwyprocess-gwyprocessenums.html#GwyComputationState" title="GwyComputationState"><span class="returnvalue">GwyComputationState</span></a> *
+<a class="link" href="libgwyprocess-gwyprocessenums.html#GwyComputationState"><span class="returnvalue">GwyComputationState</span></a> *
</td>
<td class="function_name">
<a class="link" href="libgwyprocess-grains.html#gwy-data-field-grains-watershed-init" title="gwy_data_field_grains_watershed_init ()">gwy_data_field_grains_watershed_init</a> <span class="c_punctuation">()</span>
@@ -313,6 +313,14 @@
</tr>
<tr>
<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="libgwyprocess-grains.html#gwy-data-field-grains-thin" title="gwy_data_field_grains_thin ()">gwy_data_field_grains_thin</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
<a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
</td>
<td class="function_name">
@@ -358,7 +366,7 @@ gwy_data_field_grains_mark_curvature (<em class="parameter"><code><a class="link
<p>Marks data that are above/below curvature threshold.</p>
<div class="refsect3">
<a name="gwy-data-field-grains-mark-curvature.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -406,7 +414,7 @@ gwy_data_field_grains_mark_watershed (<em class="parameter"><code><a class="link
<p>Performs watershed algorithm.</p>
<div class="refsect3">
<a name="gwy-data-field-grains-mark-watershed.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -472,7 +480,7 @@ gwy_data_field_grains_remove_grain (<em class="parameter"><code><a class="link"
<p>Removes one grain at given position.</p>
<div class="refsect3">
<a name="gwy-data-field-grains-remove-grain.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -518,7 +526,7 @@ gwy_data_field_grains_extract_grain (<em class="parameter"><code><a class="link"
), all grains are removed.</p>
<div class="refsect3">
<a name="gwy-data-field-grains-extract-grain.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -561,7 +569,7 @@ gwy_data_field_grains_remove_by_number
.</p>
<div class="refsect3">
<a name="gwy-data-field-grains-remove-by-number.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -592,7 +600,7 @@ gwy_data_field_grains_remove_by_size (<em class="parameter"><code><a class="link
<p>Removes all grains below specified area.</p>
<div class="refsect3">
<a name="gwy-data-field-grains-remove-by-size.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -625,7 +633,7 @@ gwy_data_field_grains_remove_by_height
<p>Removes grains that are higher/lower than given threshold value.</p>
<div class="refsect3">
<a name="gwy-data-field-grains-remove-by-height.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -666,7 +674,7 @@ gwy_data_field_grains_remove_touching_border
<p>Removes all grains that touch field borders.</p>
<div class="refsect3">
<a name="gwy-data-field-grains-remove-touching-border.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -684,7 +692,7 @@ gwy_data_field_grains_remove_touching_border
<hr>
<div class="refsect2">
<a name="gwy-data-field-grains-watershed-init"></a><h3>gwy_data_field_grains_watershed_init ()</h3>
-<pre class="programlisting"><a class="link" href="libgwyprocess-gwyprocessenums.html#GwyComputationState" title="GwyComputationState"><span class="returnvalue">GwyComputationState</span></a> *
+<pre class="programlisting"><a class="link" href="libgwyprocess-gwyprocessenums.html#GwyComputationState"><span class="returnvalue">GwyComputationState</span></a> *
gwy_data_field_grains_watershed_init (<em class="parameter"><code><a class="link" href="GwyDataField.html" title="GwyDataField"><span class="type">GwyDataField</span></a> *data_field</code></em>,
<em class="parameter"><code><a class="link" href="GwyDataField.html" title="GwyDataField"><span class="type">GwyDataField</span></a> *grain_field</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> locate_steps</code></em>,
@@ -698,7 +706,7 @@ gwy_data_field_grains_watershed_init (<em class="parameter"><code><a class="link
<p>This iterator reports its state as <a class="link" href="libgwyprocess-gwyprocessenums.html#GwyWatershedStateType" title="enum GwyWatershedStateType"><span class="type">GwyWatershedStateType</span></a>.</p>
<div class="refsect3">
<a name="gwy-data-field-grains-watershed-init.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -763,7 +771,7 @@ gwy_data_field_grains_watershed_init (<em class="parameter"><code><a class="link
<a name="gwy-data-field-grains-watershed-iteration"></a><h3>gwy_data_field_grains_watershed_iteration ()</h3>
<pre class="programlisting"><span class="returnvalue">void</span>
gwy_data_field_grains_watershed_iteration
- (<em class="parameter"><code><a class="link" href="libgwyprocess-gwyprocessenums.html#GwyComputationState" title="GwyComputationState"><span class="type">GwyComputationState</span></a> *state</code></em>);</pre>
+ (<em class="parameter"><code><a class="link" href="libgwyprocess-gwyprocessenums.html#GwyComputationState"><span class="type">GwyComputationState</span></a> *state</code></em>);</pre>
<p>Performs one iteration of the watershed algorithm.</p>
<p>Fields <em class="parameter"><code>state</code></em>
and progress <em class="parameter"><code>fraction</code></em>
@@ -777,7 +785,7 @@ by finishing or being aborted, <a class="link" href="libgwyprocess-grains.html#g
must be called to release allocated resources.</p>
<div class="refsect3">
<a name="gwy-data-field-grains-watershed-iteration.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -796,11 +804,11 @@ must be called to release allocated resources.</p>
<a name="gwy-data-field-grains-watershed-finalize"></a><h3>gwy_data_field_grains_watershed_finalize ()</h3>
<pre class="programlisting"><span class="returnvalue">void</span>
gwy_data_field_grains_watershed_finalize
- (<em class="parameter"><code><a class="link" href="libgwyprocess-gwyprocessenums.html#GwyComputationState" title="GwyComputationState"><span class="type">GwyComputationState</span></a> *state</code></em>);</pre>
+ (<em class="parameter"><code><a class="link" href="libgwyprocess-gwyprocessenums.html#GwyComputationState"><span class="type">GwyComputationState</span></a> *state</code></em>);</pre>
<p>Destroys a watershed iterator, freeing all resources.</p>
<div class="refsect3">
<a name="gwy-data-field-grains-watershed-finalize.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -825,7 +833,7 @@ gwy_data_field_grains_mark_height (<em class="parameter"><code><a class="link" h
<p>Marks data that are above/below height threshold.</p>
<div class="refsect3">
<a name="gwy-data-field-grains-mark-height.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -868,7 +876,7 @@ gwy_data_field_grains_mark_slope (<em class="parameter"><code><a class="link" hr
<p>Marks data that are above/below slope threshold.</p>
<div class="refsect3">
<a name="gwy-data-field-grains-mark-slope.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -910,7 +918,7 @@ gwy_data_field_otsu_threshold (<em class="parameter"><code><a class="link" href=
inter-class variances of two classes of pixels: above and below theshold.</p>
<div class="refsect3">
<a name="gwy-data-field-otsu-threshold.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -949,7 +957,7 @@ gwy_data_field_grains_add (<em class="parameter"><code><a class="link" href="Gwy
<p></p>
<div class="refsect3">
<a name="gwy-data-field-grains-add.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -994,7 +1002,7 @@ result is stored in <em class="parameter"><code>grain_field</code></em>
<p></p>
<div class="refsect3">
<a name="gwy-data-field-grains-intersect.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1025,7 +1033,7 @@ gwy_data_field_grains_invert (<em class="parameter"><code><a class="link" href="
transformed to 0.0.</p>
<div class="refsect3">
<a name="gwy-data-field-grains-invert.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1063,7 +1071,7 @@ even original dimensions to 2 for <em class="parameter"><code>symmetrical</code>
being <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>.</p>
<div class="refsect3">
<a name="gwy-data-field-grains-autocrop.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1129,7 +1137,7 @@ gwy_data_field_number_grains (<em class="parameter"><code><a class="link" href="
<p>Numbers grains in a mask data field.</p>
<div class="refsect3">
<a name="gwy-data-field-number-grains.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1170,7 +1178,7 @@ gwy_data_field_number_grains_periodic (<em class="parameter"><code><a class="lin
of periodicity, i.e. grains can touch across the opposite field edges.</p>
<div class="refsect3">
<a name="gwy-data-field-number-grains-periodic.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1213,7 +1221,7 @@ gwy_data_field_get_grain_bounding_boxes
<p>Find bounding boxes of all grains.</p>
<div class="refsect3">
<a name="gwy-data-field-get-grain-bounding-boxes.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1278,7 +1286,7 @@ gwy_data_field_get_grain_sizes (<em class="parameter"><code><a class="link" href
covered by the mask.</p>
<div class="refsect3">
<a name="gwy-data-field-get-grain-sizes.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1361,7 +1369,7 @@ the <em class="parameter"><code>distribution</code></em>
is its offset).</p>
<div class="refsect3">
<a name="gwy-data-field-grains-get-distribution.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1453,7 +1461,7 @@ particular grain. This enables one for instance to calculate grain sizes
and grain heights and then correlate them.</p>
<div class="refsect3">
<a name="gwy-data-field-grains-get-values.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1517,7 +1525,7 @@ is more efficient if several grain quantities need to be calculated since
<a class="link" href="libgwyprocess-grains.html#gwy-data-field-grains-get-values" title="gwy_data_field_grains_get_values ()"><code class="function">gwy_data_field_grains_get_values()</code></a> can do lot of repeated work in such case.</p>
<div class="refsect3">
<a name="gwy-data-field-grains-get-quantities.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1588,7 +1596,7 @@ gwy_grain_quantity_needs_same_units (<em class="parameter"><code><a class="link"
units match.</p>
<div class="refsect3">
<a name="gwy-grain-quantity-needs-same-units.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1620,7 +1628,7 @@ gwy_grain_quantity_get_units (<em class="parameter"><code><a class="link" href="
<p>Calculates the units of a grain quantity.</p>
<div class="refsect3">
<a name="gwy-grain-quantity-get-units.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1679,7 +1687,7 @@ gwy_data_field_area_grains_tgnd (<em class="parameter"><code><a class="link" hre
calculates the distribution in the full range.</p>
<div class="refsect3">
<a name="gwy-data-field-area-grains-tgnd.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1754,7 +1762,7 @@ threshold levels. For large <em class="parameter"><code>nstats</code></em>
equivalent number of <a class="link" href="libgwyprocess-grains.html#gwy-data-field-grains-mark-height" title="gwy_data_field_grains_mark_height ()"><code class="function">gwy_data_field_grains_mark_height()</code></a> calls.</p>
<div class="refsect3">
<a name="gwy-data-field-area-grains-tgnd-range.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1839,7 +1847,7 @@ boundary, measured in pixels.</p>
transforms such as city-block or chessboard.</p>
<div class="refsect3">
<a name="gwy-data-field-grain-distance-transform.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1871,7 +1879,7 @@ only since 2.43. Use <a class="link" href="libgwyprocess-grains.html#gwy-data-f
if you need compatibility with older versions.</p>
<div class="refsect3">
<a name="gwy-data-field-grain-simple-dist-trans.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1916,7 +1924,7 @@ farther than <em class="parameter"><code>amount</code></em>
.</p>
<div class="refsect3">
<a name="gwy-data-field-grains-shrink.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1970,7 +1978,7 @@ not farther than <em class="parameter"><code>amount</code></em>
.</p>
<div class="refsect3">
<a name="gwy-data-field-grains-grow.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2010,6 +2018,32 @@ grains, without regard to grain connectivity.</p></td>
</div>
<hr>
<div class="refsect2">
+<a name="gwy-data-field-grains-thin"></a><h3>gwy_data_field_grains_thin ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gwy_data_field_grains_thin (<em class="parameter"><code><a class="link" href="GwyDataField.html" title="GwyDataField"><span class="type">GwyDataField</span></a> *data_field</code></em>);</pre>
+<p>Performs thinning of a data field containing mask.</p>
+<p>The result of thinning is a ‘skeleton’ mask consisting of single-pixel thin
+lines.</p>
+<div class="refsect3">
+<a name="gwy-data-field-grains-thin.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>data_field</p></td>
+<td class="parameter_description"><p>A data field with zeroes in empty space and nonzeroes in
+grains.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since: <a class="link" href="api-index-2-48.html#api-index-2.48">2.48</a></p>
+</div>
+<hr>
+<div class="refsect2">
<a name="gwy-data-field-fill-voids"></a><h3>gwy_data_field_fill_voids ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
gwy_data_field_fill_voids (<em class="parameter"><code><a class="link" href="GwyDataField.html" title="GwyDataField"><span class="type">GwyDataField</span></a> *data_field</code></em>,
@@ -2022,7 +2056,7 @@ in 8-connectivity because grains themselves are considered in
4-connectivity.</p>
<div class="refsect3">
<a name="gwy-data-field-fill-voids.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2080,7 +2114,7 @@ relatively (although not drastically) expensive
<a class="link" href="libgwyprocess-grains.html#gwy-data-field-number-grains" title="gwy_data_field_number_grains ()"><code class="function">gwy_data_field_number_grains()</code></a> call.</p>
<div class="refsect3">
<a name="gwy-data-field-waterpour.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2133,7 +2167,7 @@ the set. A minimum is defined analogously. A field filled with a single
value is considered to have neither minimum nor maximum.</p>
<div class="refsect3">
<a name="gwy-data-field-mark-extrema.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwyprocess/html/libgwyprocess-gwyprocess.html b/devel-docs/libgwyprocess/html/libgwyprocess-gwyprocess.html
index 267737c..d197f49 100644
--- a/devel-docs/libgwyprocess/html/libgwyprocess-gwyprocess.html
+++ b/devel-docs/libgwyprocess/html/libgwyprocess-gwyprocess.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>gwyprocess: Gwyddion Data Processing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="prev" href="GwyTriangulation.html" title="triangulation">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwyprocess-gwyprocess.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
diff --git a/devel-docs/libgwyprocess/html/libgwyprocess-gwyprocessenums.html b/devel-docs/libgwyprocess/html/libgwyprocess-gwyprocessenums.html
index dafb1c3..733b8e0 100644
--- a/devel-docs/libgwyprocess/html/libgwyprocess-gwyprocessenums.html
+++ b/devel-docs/libgwyprocess/html/libgwyprocess-gwyprocessenums.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>gwyprocessenums: Gwyddion Data Processing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="prev" href="libgwyprocess-gwyprocess.html" title="gwyprocess">
@@ -15,7 +15,8 @@
<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
<td width="100%" align="left" class="shortcuts">
<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
- <a href="#libgwyprocess-gwyprocessenums.description" class="shortcut">Description</a></span>
+ <a href="#libgwyprocess-gwyprocessenums.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span>
+ <a href="#libgwyprocess-gwyprocessenums.object-hierarchy" class="shortcut">Object Hierarchy</a></span>
</td>
<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
<td><img src="up-insensitive.png" width="16" height="16" border="0"></td>
@@ -33,7 +34,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwyprocess-gwyprocessenums.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -116,12 +117,28 @@
<a class="link" href="libgwyprocess-gwyprocessenums.html#gwy-distance-transform-type-get-enum" title="gwy_distance_transform_type_get_enum ()">gwy_distance_transform_type_get_enum</a> <span class="c_punctuation">()</span>
</td>
</tr>
+<tr>
+<td class="function_type">
+<a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="libgwyprocess-gwyprocessenums.html#gwy-computation-state-get-state" title="gwy_computation_state_get_state ()">gwy_computation_state_get_state</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#gdouble"><span class="returnvalue">gdouble</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="libgwyprocess-gwyprocessenums.html#gwy-computation-state-get-fraction" title="gwy_computation_state_get_fraction ()">gwy_computation_state_get_fraction</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
</tbody>
</table></div>
</div>
-<div class="refsect1">
+<a name="GwyComputationState"></a><div class="refsect1">
<a name="libgwyprocess-gwyprocessenums.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -224,13 +241,19 @@
<td class="function_name"><a class="link" href="libgwyprocess-gwyprocessenums.html#GwyRotateResizeType" title="enum GwyRotateResizeType">GwyRotateResizeType</a></td>
</tr>
<tr>
-<td class="datatype_keyword"> </td>
-<td class="function_name"><a class="link" href="libgwyprocess-gwyprocessenums.html#GwyComputationState" title="GwyComputationState">GwyComputationState</a></td>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="libgwyprocess-gwyprocessenums.html#GwyAffineScalingType" title="enum GwyAffineScalingType">GwyAffineScalingType</a></td>
</tr>
</tbody>
</table></div>
</div>
<div class="refsect1">
+<a name="libgwyprocess-gwyprocessenums.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="screen"> <a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#gpointer">gpointer</a>
+ <span class="lineart">╰──</span> GwyComputationState
+</pre>
+</div>
+<div class="refsect1">
<a name="libgwyprocess-gwyprocessenums.includes"></a><h2>Includes</h2>
<pre class="synopsis">#include <libprocess/gwyprocess.h>
</pre>
@@ -362,6 +385,63 @@ gwy_distance_transform_type_get_enum (<em class="parameter"><code><span class="t
</div>
<p class="since">Since: <a class="link" href="api-index-2-43.html#api-index-2.43">2.43</a></p>
</div>
+<hr>
+<div class="refsect2">
+<a name="gwy-computation-state-get-state"></a><h3>gwy_computation_state_get_state ()</h3>
+<pre class="programlisting"><a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>
+gwy_computation_state_get_state (<em class="parameter"><code><a class="link" href="libgwyprocess-gwyprocessenums.html#GwyComputationState"><span class="type">GwyComputationState</span></a> *compstate</code></em>);</pre>
+<p>Gets the state field of a computation state struct.</p>
+<p>Useful mostly for language bindings.</p>
+<div class="refsect3">
+<a name="gwy-computation-state-get-state.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>compstate</p></td>
+<td class="parameter_description"><p>Computation state.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gwy-computation-state-get-state.returns"></a><h4>Returns</h4>
+<p> The state field of <em class="parameter"><code>compstate</code></em>
+.</p>
+</div>
+<p class="since">Since: <a class="link" href="api-index-2-49.html#api-index-2.49">2.49</a></p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gwy-computation-state-get-fraction"></a><h3>gwy_computation_state_get_fraction ()</h3>
+<pre class="programlisting"><a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#gdouble"><span class="returnvalue">gdouble</span></a>
+gwy_computation_state_get_fraction (<em class="parameter"><code><a class="link" href="libgwyprocess-gwyprocessenums.html#GwyComputationState"><span class="type">GwyComputationState</span></a> *compstate</code></em>);</pre>
+<p>Gets the fraction field of a computation state struct.</p>
+<div class="refsect3">
+<a name="gwy-computation-state-get-fraction.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>compstate</p></td>
+<td class="parameter_description"><p>Computation state.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gwy-computation-state-get-fraction.returns"></a><h4>Returns</h4>
+<p> The fraction field of <em class="parameter"><code>compstate</code></em>
+.</p>
+</div>
+<p class="since">Since: <a class="link" href="api-index-2-49.html#api-index-2.49">2.49</a></p>
+</div>
</div>
<div class="refsect1">
<a name="libgwyprocess-gwyprocessenums.other_details"></a><h2>Types and Values</h2>
@@ -370,7 +450,7 @@ gwy_distance_transform_type_get_enum (<em class="parameter"><code><span class="t
<p>Mask merge type (namely used in grain processing).</p>
<div class="refsect3">
<a name="GwyMergeType.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
@@ -403,7 +483,7 @@ gwy_distance_transform_type_get_enum (<em class="parameter"><code><span class="t
cannot apply masks in exclude mode.</p>
<div class="refsect3">
<a name="GwyMaskingType.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
@@ -442,7 +522,7 @@ cannot apply masks in exclude mode.</p>
<a name="GwyWatershedStateType"></a><h3>enum GwyWatershedStateType</h3>
<div class="refsect3">
<a name="GwyWatershedStateType.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
@@ -489,7 +569,7 @@ cannot apply masks in exclude mode.</p>
<p>Plane symmetry types for rotation correction.</p>
<div class="refsect3">
<a name="GwyPlaneSymmetry.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
@@ -559,7 +639,7 @@ cannot apply masks in exclude mode.</p>
<a name="Gwy2DCWTWaveletType"></a><h3>enum Gwy2DCWTWaveletType</h3>
<div class="refsect3">
<a name="Gwy2DCWTWaveletType.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
@@ -586,7 +666,7 @@ cannot apply masks in exclude mode.</p>
<p>Orientation type.</p>
<div class="refsect3">
<a name="GwyOrientation.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
@@ -619,7 +699,7 @@ cannot apply masks in exclude mode.</p>
uses -1, the forward transform +1.</p>
<div class="refsect3">
<a name="GwyTransformDirection.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
@@ -652,7 +732,7 @@ uses -1, the forward transform +1.</p>
methods.</p>
<div class="refsect3">
<a name="GwyDataFieldCached.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
@@ -746,7 +826,7 @@ methods.</p>
<p>Common iterative computation iterator state type.</p>
<div class="refsect3">
<a name="GwyComputationStateType.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
@@ -789,7 +869,7 @@ methods.</p>
<a name="GwyDWTType"></a><h3>enum GwyDWTType</h3>
<div class="refsect3">
<a name="GwyDWTType.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
@@ -835,7 +915,7 @@ methods.</p>
<a name="GwyDWTDenoiseType"></a><h3>enum GwyDWTDenoiseType</h3>
<div class="refsect3">
<a name="GwyDWTDenoiseType.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
@@ -867,7 +947,7 @@ methods.</p>
<p>Interpolation types.</p>
<div class="refsect3">
<a name="GwyInterpolationType.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
@@ -955,7 +1035,7 @@ methods.</p>
<a class="link" href="libgwyprocess-level.html#gwy-data-field-area-fit-local-planes" title="gwy_data_field_area_fit_local_planes ()"><code class="function">gwy_data_field_area_fit_local_planes()</code></a> and similar functions.</p>
<div class="refsect3">
<a name="GwyPlaneFitQuantity.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
@@ -1021,7 +1101,7 @@ methods.</p>
<p>Frequency windowing type.</p>
<div class="refsect3">
<a name="GwyWindowingType.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
@@ -1108,7 +1188,7 @@ methods.</p>
<p>Type of tip shape presets.</p>
<div class="refsect3">
<a name="GwyTipType.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
@@ -1184,7 +1264,7 @@ methods.</p>
<a class="link" href="libgwyprocess-tip.html#gwy-tip-model-preset-create-for-zrange" title="gwy_tip_model_preset_create_for_zrange ()"><code class="function">gwy_tip_model_preset_create_for_zrange()</code></a>.</p>
<div class="refsect3">
<a name="GwyTipParamType.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
@@ -1246,7 +1326,7 @@ methods.</p>
<a name="GwyCorrelationType"></a><h3>enum GwyCorrelationType</h3>
<div class="refsect3">
<a name="GwyCorrelationType.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
@@ -1279,7 +1359,7 @@ methods.</p>
and similar functions.</p>
<div class="refsect3">
<a name="GwyGrainQuantity.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
@@ -1680,7 +1760,7 @@ and similar functions.</p>
<p>Data line and field compatibility flags.</p>
<div class="refsect3">
<a name="GwyDataCompatibilityFlags.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
@@ -1740,7 +1820,7 @@ and similar functions.</p>
<a class="link" href="libgwyprocess-stats.html#gwy-data-field-area-get-line-stats" title="gwy_data_field_area_get_line_stats ()"><code class="function">gwy_data_field_area_get_line_stats()</code></a>.</p>
<div class="refsect3">
<a name="GwyLineStatQuantity.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
@@ -1854,6 +1934,20 @@ and similar functions.</p>
</td>
<td class="enum_member_annotations"> </td>
</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GWY-LINE-STAT-MINPOS:CAPS"></a>GWY_LINE_STAT_MINPOS</p></td>
+<td class="enum_member_description">
+<p>Minimum position along the line (Since: 2.48).</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GWY-LINE-STAT-MAXPOS:CAPS"></a>GWY_LINE_STAT_MAXPOS</p></td>
+<td class="enum_member_description">
+<p>Maximum position along the line (Since: 2.48).</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
</tbody>
</table></div>
</div>
@@ -1869,7 +1963,7 @@ convolution uses mirror extension, rotation fills exterior with
a fixed value.</p>
<div class="refsect3">
<a name="GwyExteriorType.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
@@ -1933,7 +2027,7 @@ a fixed value.</p>
<p>Type of distance transform.</p>
<div class="refsect3">
<a name="GwyDistanceTransformType.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
@@ -2015,7 +2109,7 @@ a fixed value.</p>
elements.</p>
<div class="refsect3">
<a name="GwyMinMaxFilterType.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
@@ -2092,7 +2186,7 @@ elements.</p>
<p>Type of rotated data field size determination method.</p>
<div class="refsect3">
<a name="GwyRotateResizeType.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
@@ -2129,80 +2223,46 @@ elements.</p>
</div>
<hr>
<div class="refsect2">
-<a name="GwyComputationState"></a><h3>GwyComputationState</h3>
-<pre class="programlisting">typedef struct {
- guint state;
- gdouble fraction;
-} GwyComputationState;
-</pre>
-<p>State of iterative computation.</p>
-<p>Iterators usually append their own private state data, therefore it must
-not be assumed the public fields <em class="parameter"><code>state</code></em>
- and <em class="parameter"><code>fraction</code></em>
- are the only fields.</p>
-<p>A typical iteration, assuming an iterative computation `foo' with the
-default <a class="link" href="libgwyprocess-gwyprocessenums.html#GwyComputationStateType" title="enum GwyComputationStateType"><span class="type">GwyComputationStateType</span></a> state could be:</p>
-<div class="informalexample">
- <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
- <tbody>
- <tr>
- <td class="listing_lines" align="right"><pre>1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14</pre></td>
- <td class="listing_code"><pre class="programlisting"><span class="usertype">GwyComputationStateType</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">state</span><span class="symbol">;</span>
-
-<span class="normal">state </span><span class="symbol">=</span><span class="normal"> </span><span class="function">gwy_data_field_foo_init</span><span class="symbol">(</span><span class="usertype">GwyDataField</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">data_field</span><span class="symbol">,</span><span class="normal"> </span><span class="symbol">...);</span>
-<span class="keyword">do</span><span class="normal"> </span><span class="cbracket">{</span>
-<span class="normal"> </span><span class="function">gwy_data_field_foo_iteration</span><span class="symbol">(</span><span class="normal">state</span><span class="symbol">);</span>
-<span class="normal"> </span><span class="comment">/* Update progress using state->fraction,</span>
-<span class="comment"> let Gtk+ main loop run, check for abort, ... */</span>
-<span class="normal"> </span><span class="keyword">if</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">aborted</span><span class="symbol">)</span><span class="normal"> </span><span class="cbracket">{</span>
-<span class="normal"> </span><span class="function">gwy_data_field_foo_finalize</span><span class="symbol">(</span><span class="normal">state</span><span class="symbol">);</span>
-<span class="normal"> </span><span class="keyword">return</span><span class="normal"> <a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Standard-Macros.html#FALSE:CAPS">FALSE</a></span><span class="symbol">;</span>
-<span class="normal"> </span><span class="cbracket">}</span>
-<span class="cbracket">}</span><span class="normal"> </span><span class="keyword">while</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">state</span><span class="symbol">-></span><span class="normal">state </span><span class="symbol">!=</span><span class="normal"> <a href="#GWY-COMPUTATION-STATE-FINISHED:CAPS">GWY_COMPUTATION_STATE_FINISHED</a></span><span class="symbol">);</span>
-<span class="function">gwy_data_field_foo_finalize</span><span class="symbol">(</span><span class="normal">state</span><span class="symbol">);</span>
-<span class="keyword">return</span><span class="normal"> <a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Standard-Macros.html#TRUE:CAPS">TRUE</a></span><span class="symbol">;</span></pre></td>
- </tr>
- </tbody>
- </table>
-</div>
-
+<a name="GwyAffineScalingType"></a><h3>enum GwyAffineScalingType</h3>
+<p>Type of lattice vector scaling in affine transform preparation.</p>
<div class="refsect3">
-<a name="GwyComputationState.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<a name="GwyAffineScalingType.members"></a><h4>Members</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
-<col width="300px" class="struct_members_name">
-<col class="struct_members_description">
-<col width="200px" class="struct_members_annotations">
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
</colgroup>
<tbody>
<tr>
-<td class="struct_member_name"><p><a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> <em class="structfield"><code><a name="GwyComputationState.state"></a>state</code></em>;</p></td>
-<td class="struct_member_description"><p>Current computation state, usually of <a class="link" href="libgwyprocess-gwyprocessenums.html#GwyComputationStateType" title="enum GwyComputationStateType"><span class="type">GwyComputationStateType</span></a>, but
-particular iterators can define their own types.</p></td>
-<td class="struct_member_annotations"> </td>
+<td class="enum_member_name"><p><a name="GWY-AFFINE-SCALING-AS-GIVEN:CAPS"></a>GWY_AFFINE_SCALING_AS_GIVEN</p></td>
+<td class="enum_member_description">
+<p>Correct lattice vectors lengths are taken
+ as given.</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
<tr>
-<td class="struct_member_name"><p><a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> <em class="structfield"><code><a name="GwyComputationState.fraction"></a>fraction</code></em>;</p></td>
-<td class="struct_member_description"><p>Fraction of computation completed. For staged algorithms,
-the fraction refers to the current stage only.</p></td>
-<td class="struct_member_annotations"> </td>
+<td class="enum_member_name"><p><a name="GWY-AFFINE-SCALING-PRESERVE-AREA:CAPS"></a>GWY_AFFINE_SCALING_PRESERVE_AREA</p></td>
+<td class="enum_member_description">
+<p>Correct lattice vectors are scaled to
+ make the transformation area-preserving.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GWY-AFFINE-SCALING-PRESERVE-X:CAPS"></a>GWY_AFFINE_SCALING_PRESERVE_X</p></td>
+<td class="enum_member_description">
+<p>Correct lattice vectors are scaled to
+ preserve the scale along <em class="parameter"><code>x</code></em>
+-axis.</p>
+</td>
+<td class="enum_member_annotations"> </td>
</tr>
</tbody>
</table></div>
</div>
+<p class="since">Since: <a class="link" href="api-index-2-49.html#api-index-2.49">2.49</a></p>
</div>
</div>
</div>
diff --git a/devel-docs/libgwyprocess/html/libgwyprocess-hough.html b/devel-docs/libgwyprocess/html/libgwyprocess-hough.html
index c444717..c9cf753 100644
--- a/devel-docs/libgwyprocess/html/libgwyprocess-hough.html
+++ b/devel-docs/libgwyprocess/html/libgwyprocess-hough.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>hough: Gwyddion Data Processing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="prev" href="GwyGrainValue.html" title="GwyGrainValue">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwyprocess-hough.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -166,7 +166,7 @@ gwy_data_field_get_local_maxima_list (<em class="parameter"><code><a class="link
maxima are located.</p>
<div class="refsect3">
<a name="gwy-data-field-get-local-maxima-list.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwyprocess/html/libgwyprocess-interpolation.html b/devel-docs/libgwyprocess/html/libgwyprocess-interpolation.html
index 9959f6b..d519eef 100644
--- a/devel-docs/libgwyprocess/html/libgwyprocess-interpolation.html
+++ b/devel-docs/libgwyprocess/html/libgwyprocess-interpolation.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>interpolation: Gwyddion Data Processing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="prev" href="libgwyprocess-inttrans.html" title="inttrans">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwyprocess-interpolation.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -160,7 +160,7 @@ methods to get interpolated value between
two arbitrary data points.</p>
<div class="refsect3">
<a name="gwy-interpolation-get-dval.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -233,7 +233,7 @@ interpolating function with the same support size. See
interpolation coefficients.</p>
<div class="refsect3">
<a name="gwy-interpolation-get-dval-of-equidists.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -276,7 +276,7 @@ gwy_interpolation_interpolate_1d (<em class="parameter"><code><a href="/usr/shar
<a class="link" href="libgwyprocess-interpolation.html#gwy-interpolation-get-support-size" title="gwy_interpolation_get_support_size ()"><code class="function">gwy_interpolation_get_support_size()</code></a>.</p>
<div class="refsect3">
<a name="gwy-interpolation-interpolate-1d.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -320,7 +320,7 @@ gwy_interpolation_interpolate_2d (<em class="parameter"><code><a href="/usr/shar
<p>Interpolates a signle data point in two dimensions.</p>
<div class="refsect3">
<a name="gwy-interpolation-interpolate-2d.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -378,7 +378,7 @@ preprocess the data values to obtain interpolation coefficients first. On
the ohter hand they typically offer much higher interpolation quality.</p>
<div class="refsect3">
<a name="gwy-interpolation-has-interpolating-basis.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -407,7 +407,7 @@ gwy_interpolation_get_support_size (<em class="parameter"><code><a class="link"
<p>Obtains the basis support size for an interpolation type.</p>
<div class="refsect3">
<a name="gwy-interpolation-get-support-size.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -440,7 +440,7 @@ interpolating function. Therefore you can also omit it and use the data
array directly for these interpolation types.</p>
<div class="refsect3">
<a name="gwy-interpolation-resolve-coeffs-1d.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -485,7 +485,7 @@ interpolating function. Therefore you can also omit it and use the data
array directly for these interpolation types.</p>
<div class="refsect3">
<a name="gwy-interpolation-resolve-coeffs-2d.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -541,7 +541,7 @@ gwy_interpolation_resample_block_1d (<em class="parameter"><code><a href="/usr/s
<a class="link" href="GwyDataLine.html#gwy-data-line-new-resampled" title="gwy_data_line_new_resampled ()"><code class="function">gwy_data_line_new_resampled()</code></a> provide more convenient interface.</p>
<div class="refsect3">
<a name="gwy-interpolation-resample-block-1d.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -604,7 +604,7 @@ gwy_interpolation_resample_block_2d (<em class="parameter"><code><a href="/usr/s
<a class="link" href="GwyDataField.html#gwy-data-field-new-resampled" title="gwy_data_field_new_resampled ()"><code class="function">gwy_data_field_new_resampled()</code></a> provide more convenient interface.</p>
<div class="refsect3">
<a name="gwy-interpolation-resample-block-2d.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -688,7 +688,7 @@ gwy_interpolation_shift_block_1d (<em class="parameter"><code><a href="/usr/shar
<p>Shifts a one-dimensional data block by a possibly non-integer offset.</p>
<div class="refsect3">
<a name="gwy-interpolation-shift-block-1d.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwyprocess/html/libgwyprocess-inttrans.html b/devel-docs/libgwyprocess/html/libgwyprocess-inttrans.html
index 4e9f5b0..f8cf750 100644
--- a/devel-docs/libgwyprocess/html/libgwyprocess-inttrans.html
+++ b/devel-docs/libgwyprocess/html/libgwyprocess-inttrans.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>inttrans: Gwyddion Data Processing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="prev" href="libgwyprocess-hough.html" title="hough">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwyprocess-inttrans.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -179,10 +179,8 @@ and other statistical characteristics.</p>
perform no other operations on the data beside the transform itself.
This makes them suitable for applications where both forward and inverse
transform is performed.</p>
-<p>Both types of functions wrap a Fourier transform backend which can be
-currently either <a class="link" href="libgwyprocess-simpleFFT.html#gwy-fft-simple" title="gwy_fft_simple ()"><code class="function">gwy_fft_simple()</code></a>, available always, or</p>
-<a class="ulink" href="http://fftw.org/" target="_top">FFTW3</a>, available when Gwyddion was
-<p>compiled with it.</p>
+<p>Both types of functions wrap</p>
+<a class="ulink" href="http://fftw.org/" target="_top">FFTW3</a><p>routines.</p>
</div>
<div class="refsect1">
<a name="libgwyprocess-inttrans.functions_details"></a><h2>Functions</h2>
@@ -204,7 +202,7 @@ data for other reasons and thus have the freedom to choose a convenient
transform size.</p>
<div class="refsect3">
<a name="gwy-fft-find-nice-size.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -239,7 +237,7 @@ gwy_data_line_fft (<em class="parameter"><code><a class="link" href="GwyDataLine
<p>A windowing or data leveling can be applied if requested.</p>
<div class="refsect3">
<a name="gwy-data-line-fft.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -319,7 +317,7 @@ gwy_data_line_part_fft (<em class="parameter"><code><a class="link" href="GwyDat
<p>A windowing or data leveling can be applied if requested.</p>
<div class="refsect3">
<a name="gwy-data-line-part-fft.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -406,7 +404,7 @@ gwy_data_line_fft_raw (<em class="parameter"><code><a class="link" href="GwyData
by <a class="link" href="libgwyprocess-inttrans.html#gwy-fft-find-nice-size" title="gwy_fft_find_nice_size ()"><code class="function">gwy_fft_find_nice_size()</code></a>.</p>
<div class="refsect3">
<a name="gwy-data-line-fft-raw.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -465,7 +463,7 @@ gwy_data_field_1dfft (<em class="parameter"><code><a class="link" href="GwyDataF
obtain reasonable results.</p>
<div class="refsect3">
<a name="gwy-data-field-1dfft.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -557,7 +555,7 @@ Fast Fourier Transform.</p>
obtain reasonable results.</p>
<div class="refsect3">
<a name="gwy-data-field-area-1dfft.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -663,7 +661,7 @@ gwy_data_field_1dfft_raw (<em class="parameter"><code><a class="link" href="GwyD
by <a class="link" href="libgwyprocess-inttrans.html#gwy-fft-find-nice-size" title="gwy_fft_find_nice_size ()"><code class="function">gwy_fft_find_nice_size()</code></a>.</p>
<div class="refsect3">
<a name="gwy-data-field-1dfft-raw.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -730,7 +728,7 @@ obtain reasonable results.</p>
<a class="link" href="libgwyprocess-inttrans.html#gwy-data-field-fft-postprocess" title="gwy_data_field_fft_postprocess ()"><code class="function">gwy_data_field_fft_postprocess()</code></a> for that.</p>
<div class="refsect3">
<a name="gwy-data-field-2dfft.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -812,7 +810,7 @@ gwy_data_field_area_2dfft (<em class="parameter"><code><a class="link" href="Gwy
obtain reasonable results.</p>
<div class="refsect3">
<a name="gwy-data-field-area-2dfft.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -910,7 +908,7 @@ by <a class="link" href="libgwyprocess-inttrans.html#gwy-fft-find-nice-size" tit
<a class="link" href="libgwyprocess-inttrans.html#gwy-data-field-fft-postprocess" title="gwy_data_field_fft_postprocess ()"><code class="function">gwy_data_field_fft_postprocess()</code></a> for that.</p>
<div class="refsect3">
<a name="gwy-data-field-2dfft-raw.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -970,7 +968,7 @@ is odd, <a class="link" href="libgwyprocess-inttrans.html#gwy-data-field-2dfft-h
paired properly.</p>
<div class="refsect3">
<a name="gwy-data-field-2dfft-humanize.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -995,7 +993,7 @@ to reshuffle a humanized 2D FFT output back into the natural positions.</p>
<p>See <a class="link" href="libgwyprocess-inttrans.html#gwy-data-field-2dfft-humanize" title="gwy_data_field_2dfft_humanize ()"><code class="function">gwy_data_field_2dfft_humanize()</code></a> for discussion.</p>
<div class="refsect3">
<a name="gwy-data-field-2dfft-dehumanize.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1027,7 +1025,7 @@ offsets are cleared.</p>
<p>Value units are kept intact.</p>
<div class="refsect3">
<a name="gwy-data-field-fft-postprocess.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1062,7 +1060,7 @@ gwy_data_field_fft_filter_1d (<em class="parameter"><code><a class="link" href="
<p>Performs 1D FFT filtering of a data field.</p>
<div class="refsect3">
<a name="gwy-data-field-fft-filter-1d.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1114,7 +1112,7 @@ gwy_data_field_cwt (<em class="parameter"><code><a class="link" href="GwyDataFie
scale and using given wavelet.</p>
<div class="refsect3">
<a name="gwy-data-field-cwt.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwyprocess/html/libgwyprocess-level.html b/devel-docs/libgwyprocess/html/libgwyprocess-level.html
index 8d63175..9077040 100644
--- a/devel-docs/libgwyprocess/html/libgwyprocess-level.html
+++ b/devel-docs/libgwyprocess/html/libgwyprocess-level.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>level: Gwyddion Data Processing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="prev" href="libgwyprocess-interpolation.html" title="interpolation">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwyprocess-level.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -278,7 +278,7 @@ as in <a class="link" href="libgwyprocess-level.html#gwy-data-field-fit-plane" t
corner.</p>
<div class="refsect3">
<a name="gwy-data-field-area-fit-plane.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -355,7 +355,7 @@ gwy_data_field_fit_plane (<em class="parameter"><code><a class="link" href="GwyD
data[i] := data[i] - (pa + pby*i + pbx*j);</p>
<div class="refsect3">
<a name="gwy-data-field-fit-plane.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -411,7 +411,7 @@ gwy_data_field_get_ymeasure(data_field) to obtain physical plane
coefficients.</p>
<div class="refsect3">
<a name="gwy-data-field-fit-facet-plane.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -470,7 +470,7 @@ gwy_data_field_plane_level (<em class="parameter"><code><a class="link" href="Gw
<p>See <a class="link" href="libgwyprocess-level.html#gwy-data-field-fit-plane" title="gwy_data_field_fit_plane ()"><code class="function">gwy_data_field_fit_plane()</code></a> for details.</p>
<div class="refsect3">
<a name="gwy-data-field-plane-level.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -512,7 +512,7 @@ gwy_data_field_plane_rotate (<em class="parameter"><code><a class="link" href="G
<p>Performs rotation of plane along x and y axis.</p>
<div class="refsect3">
<a name="gwy-data-field-plane-rotate.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -567,7 +567,7 @@ from data inside (or outside for <em class="parameter"><code>exclude</code></em>
= <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>) the area.</p>
<div class="refsect3">
<a name="gwy-data-field-fit-lines.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -635,7 +635,7 @@ gwy_data_field_fit_polynom (<em class="parameter"><code><a class="link" href="Gw
<p>Fits a two-dimensional polynomial to a data field.</p>
<div class="refsect3">
<a name="gwy-data-field-fit-polynom.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -698,7 +698,7 @@ this method works only up to <em class="parameter"><code>col_degree</code></em>
= 6.</p>
<div class="refsect3">
<a name="gwy-data-field-area-fit-polynom.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -769,7 +769,7 @@ gwy_data_field_subtract_polynom (<em class="parameter"><code><a class="link" hre
<p>Subtracts a two-dimensional polynomial from a data field.</p>
<div class="refsect3">
<a name="gwy-data-field-subtract-polynom.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -819,7 +819,7 @@ gwy_data_field_area_subtract_polynom (<em class="parameter"><code><a class="link
field.</p>
<div class="refsect3">
<a name="gwy-data-field-area-subtract-polynom.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -885,7 +885,7 @@ gwy_data_field_fit_legendre (<em class="parameter"><code><a class="link" href="G
<p>See <a class="link" href="libgwyprocess-level.html#gwy-data-field-area-fit-legendre" title="gwy_data_field_area_fit_legendre ()"><code class="function">gwy_data_field_area_fit_legendre()</code></a> for details.</p>
<div class="refsect3">
<a name="gwy-data-field-fit-legendre.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -955,7 +955,7 @@ first row (column) corresponds to -1.0, and the last row (column) to 1.0.</p>
orthogonal on a discrete point set (if their degrees are equal mod 2).</p>
<div class="refsect3">
<a name="gwy-data-field-area-fit-legendre.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1026,7 +1026,7 @@ gwy_data_field_subtract_legendre (<em class="parameter"><code><a class="link" hr
<p>Subtracts a two-dimensional Legendre polynomial fit from a data field.</p>
<div class="refsect3">
<a name="gwy-data-field-subtract-legendre.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1079,7 +1079,7 @@ used on an area of dimensions different than the area the coefficients were
calculated for.</p>
<div class="refsect3">
<a name="gwy-data-field-area-subtract-legendre.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1144,7 +1144,7 @@ gwy_data_field_fit_poly_max (<em class="parameter"><code><a class="link" href="G
<p>See <a class="link" href="libgwyprocess-level.html#gwy-data-field-area-fit-poly-max" title="gwy_data_field_area_fit_poly_max ()"><code class="function">gwy_data_field_area_fit_poly_max()</code></a> for details.</p>
<div class="refsect3">
<a name="gwy-data-field-fit-poly-max.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1199,7 +1199,7 @@ differs by limiting the total maximum degree, while
and vertical directions independently.</p>
<div class="refsect3">
<a name="gwy-data-field-area-fit-poly-max.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1266,7 +1266,7 @@ gwy_data_field_subtract_poly_max (<em class="parameter"><code><a class="link" hr
a data field.</p>
<div class="refsect3">
<a name="gwy-data-field-subtract-poly-max.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1314,7 +1314,7 @@ used on an area of dimensions different than the area the coefficients were
calculated for.</p>
<div class="refsect3">
<a name="gwy-data-field-area-subtract-poly-max.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1377,7 +1377,7 @@ gwy_data_field_fit_poly (<em class="parameter"><code><a class="link" href="GwyDa
<p>Fit a given set of polynomial terms to a data field.</p>
<div class="refsect3">
<a name="gwy-data-field-fit-poly.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1461,7 +1461,7 @@ are always from the interval [-1,1] where -1 corresponds to the left/topmost
pixel and 1 corresponds to the bottom/rightmost pixel of the area.</p>
<div class="refsect3">
<a name="gwy-data-field-area-fit-poly.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1556,7 +1556,7 @@ gwy_data_field_subtract_poly (<em class="parameter"><code><a class="link" href="
<p>Subtract a given set of polynomial terms from a data field.</p>
<div class="refsect3">
<a name="gwy-data-field-subtract-poly.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1609,7 +1609,7 @@ gwy_data_field_area_subtract_poly (<em class="parameter"><code><a class="link" h
field.</p>
<div class="refsect3">
<a name="gwy-data-field-area-subtract-poly.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1688,7 +1688,7 @@ that is <em class="parameter"><code>GWY_PLANE_FIT_A</code></em>
is normal mean value.</p>
<div class="refsect3">
<a name="gwy-data-field-area-fit-local-planes.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1774,7 +1774,7 @@ gwy_data_field_area_local_plane_quantity
<a class="link" href="libgwyprocess-level.html#gwy-data-field-area-fit-local-planes" title="gwy_data_field_area_fit_local_planes ()"><code class="function">gwy_data_field_area_fit_local_planes()</code></a>.</p>
<div class="refsect3">
<a name="gwy-data-field-area-local-plane-quantity.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1843,7 +1843,7 @@ gwy_data_field_fit_local_planes (<em class="parameter"><code><a class="link" hre
<p>See <a class="link" href="libgwyprocess-level.html#gwy-data-field-area-fit-local-planes" title="gwy_data_field_area_fit_local_planes ()"><code class="function">gwy_data_field_area_fit_local_planes()</code></a> for details.</p>
<div class="refsect3">
<a name="gwy-data-field-fit-local-planes.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1895,7 +1895,7 @@ gwy_data_field_local_plane_quantity (<em class="parameter"><code><a class="link"
<a class="link" href="libgwyprocess-level.html#gwy-data-field-fit-local-planes" title="gwy_data_field_fit_local_planes ()"><code class="function">gwy_data_field_fit_local_planes()</code></a>.</p>
<div class="refsect3">
<a name="gwy-data-field-local-plane-quantity.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwyprocess/html/libgwyprocess-linestats.html b/devel-docs/libgwyprocess/html/libgwyprocess-linestats.html
index 3e25cff..5a43f70 100644
--- a/devel-docs/libgwyprocess/html/libgwyprocess-linestats.html
+++ b/devel-docs/libgwyprocess/html/libgwyprocess-linestats.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>linestats: Gwyddion Data Processing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="prev" href="libgwyprocess-level.html" title="level">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwyprocess-linestats.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -68,6 +68,38 @@
<a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#gdouble"><span class="returnvalue">gdouble</span></a>
</td>
<td class="function_name">
+<a class="link" href="libgwyprocess-linestats.html#gwy-data-line-min-pos-i" title="gwy_data_line_min_pos_i ()">gwy_data_line_min_pos_i</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#gdouble"><span class="returnvalue">gdouble</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="libgwyprocess-linestats.html#gwy-data-line-max-pos-i" title="gwy_data_line_max_pos_i ()">gwy_data_line_max_pos_i</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#gdouble"><span class="returnvalue">gdouble</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="libgwyprocess-linestats.html#gwy-data-line-min-pos-r" title="gwy_data_line_min_pos_r ()">gwy_data_line_min_pos_r</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#gdouble"><span class="returnvalue">gdouble</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="libgwyprocess-linestats.html#gwy-data-line-max-pos-r" title="gwy_data_line_max_pos_r ()">gwy_data_line_max_pos_r</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#gdouble"><span class="returnvalue">gdouble</span></a>
+</td>
+<td class="function_name">
<a class="link" href="libgwyprocess-linestats.html#gwy-data-line-get-avg" title="gwy_data_line_get_avg ()">gwy_data_line_get_avg</a> <span class="c_punctuation">()</span>
</td>
</tr>
@@ -153,7 +185,7 @@
</tr>
<tr>
<td class="function_type">
-<a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#gdouble"><span class="returnvalue">gdouble</span></a>
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="returnvalue">gdouble</span></a>
</td>
<td class="function_name">
<a class="link" href="libgwyprocess-linestats.html#gwy-data-line-part-get-avg" title="gwy_data_line_part_get_avg ()">gwy_data_line_part_get_avg</a> <span class="c_punctuation">()</span>
@@ -161,7 +193,7 @@
</tr>
<tr>
<td class="function_type">
-<a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#gdouble"><span class="returnvalue">gdouble</span></a>
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="returnvalue">gdouble</span></a>
</td>
<td class="function_name">
<a class="link" href="libgwyprocess-linestats.html#gwy-data-line-part-get-rms" title="gwy_data_line_part_get_rms ()">gwy_data_line_part_get_rms</a> <span class="c_punctuation">()</span>
@@ -169,7 +201,7 @@
</tr>
<tr>
<td class="function_type">
-<a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#gdouble"><span class="returnvalue">gdouble</span></a>
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="returnvalue">gdouble</span></a>
</td>
<td class="function_name">
<a class="link" href="libgwyprocess-linestats.html#gwy-data-line-part-get-tan-beta0" title="gwy_data_line_part_get_tan_beta0 ()">gwy_data_line_part_get_tan_beta0</a> <span class="c_punctuation">()</span>
@@ -177,7 +209,7 @@
</tr>
<tr>
<td class="function_type">
-<a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#gdouble"><span class="returnvalue">gdouble</span></a>
+<a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="returnvalue">gdouble</span></a>
</td>
<td class="function_name">
<a class="link" href="libgwyprocess-linestats.html#gwy-data-line-part-get-variation" title="gwy_data_line_part_get_variation ()">gwy_data_line_part_get_variation</a> <span class="c_punctuation">()</span>
@@ -363,7 +395,7 @@ gwy_data_line_get_max (<em class="parameter"><code><a class="link" href="GwyData
<p>Finds the maximum value of a data line.</p>
<div class="refsect3">
<a name="gwy-data-line-get-max.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -389,7 +421,7 @@ gwy_data_line_get_min (<em class="parameter"><code><a class="link" href="GwyData
<p>Finds the minimum value of a data line.</p>
<div class="refsect3">
<a name="gwy-data-line-get-min.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -418,7 +450,7 @@ gwy_data_line_get_min_max (<em class="parameter"><code><a class="link" href="Gwy
<p>Since 2.42</p>
<div class="refsect3">
<a name="gwy-data-line-get-min-max.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -446,13 +478,121 @@ gwy_data_line_get_min_max (<em class="parameter"><code><a class="link" href="Gwy
</div>
<hr>
<div class="refsect2">
+<a name="gwy-data-line-min-pos-i"></a><h3>gwy_data_line_min_pos_i ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="returnvalue">gdouble</span></a>
+gwy_data_line_min_pos_i (<em class="parameter"><code><a class="link" href="GwyDataLine.html" title="GwyDataLine"><span class="type">GwyDataLine</span></a> *data_line</code></em>);</pre>
+<p>Finds the minimum pixel position of a data line.</p>
+<div class="refsect3">
+<a name="gwy-data-line-min-pos-i.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>data_line</p></td>
+<td class="parameter_description"><p>A data line.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gwy-data-line-min-pos-i.returns"></a><h4>Returns</h4>
+<p> The minimum pixel position.</p>
+<p>Since 2.48</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gwy-data-line-max-pos-i"></a><h3>gwy_data_line_max_pos_i ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="returnvalue">gdouble</span></a>
+gwy_data_line_max_pos_i (<em class="parameter"><code><a class="link" href="GwyDataLine.html" title="GwyDataLine"><span class="type">GwyDataLine</span></a> *data_line</code></em>);</pre>
+<p>Finds the maximum pixel position of a data line.</p>
+<div class="refsect3">
+<a name="gwy-data-line-max-pos-i.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>data_line</p></td>
+<td class="parameter_description"><p>A data line.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gwy-data-line-max-pos-i.returns"></a><h4>Returns</h4>
+<p> The maximum pixel position.</p>
+<p>Since 2.48</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gwy-data-line-min-pos-r"></a><h3>gwy_data_line_min_pos_r ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="returnvalue">gdouble</span></a>
+gwy_data_line_min_pos_r (<em class="parameter"><code><a class="link" href="GwyDataLine.html" title="GwyDataLine"><span class="type">GwyDataLine</span></a> *data_line</code></em>);</pre>
+<p>Finds the real minimum position in a data line.</p>
+<div class="refsect3">
+<a name="gwy-data-line-min-pos-r.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>data_line</p></td>
+<td class="parameter_description"><p>A data line.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gwy-data-line-min-pos-r.returns"></a><h4>Returns</h4>
+<p> Real position for the minimum.</p>
+<p>Since 2.48</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gwy-data-line-max-pos-r"></a><h3>gwy_data_line_max_pos_r ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="returnvalue">gdouble</span></a>
+gwy_data_line_max_pos_r (<em class="parameter"><code><a class="link" href="GwyDataLine.html" title="GwyDataLine"><span class="type">GwyDataLine</span></a> *data_line</code></em>);</pre>
+<p>Finds the real maximum position in a data line.</p>
+<div class="refsect3">
+<a name="gwy-data-line-max-pos-r.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody><tr>
+<td class="parameter_name"><p>data_line</p></td>
+<td class="parameter_description"><p>A data line.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gwy-data-line-max-pos-r.returns"></a><h4>Returns</h4>
+<p> Real position for the maximum.</p>
+<p>Since 2.48</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
<a name="gwy-data-line-get-avg"></a><h3>gwy_data_line_get_avg ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="returnvalue">gdouble</span></a>
gwy_data_line_get_avg (<em class="parameter"><code><a class="link" href="GwyDataLine.html" title="GwyDataLine"><span class="type">GwyDataLine</span></a> *data_line</code></em>);</pre>
<p>Computes average value of a data line.</p>
<div class="refsect3">
<a name="gwy-data-line-get-avg.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -478,7 +618,7 @@ gwy_data_line_get_rms (<em class="parameter"><code><a class="link" href="GwyData
<p>Computes root mean square value of a data line.</p>
<div class="refsect3">
<a name="gwy-data-line-get-rms.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -504,7 +644,7 @@ gwy_data_line_get_tan_beta0 (<em class="parameter"><code><a class="link" href="G
<p>Computes root mean square slope in a data line.</p>
<div class="refsect3">
<a name="gwy-data-line-get-tan-beta0.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -532,7 +672,7 @@ gwy_data_line_get_variation (<em class="parameter"><code><a class="link" href="G
<p>See <a class="link" href="libgwyprocess-linestats.html#gwy-data-line-part-get-variation" title="gwy_data_line_part_get_variation ()"><code class="function">gwy_data_line_part_get_variation()</code></a> for definition and discussion.</p>
<div class="refsect3">
<a name="gwy-data-line-get-variation.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -559,7 +699,7 @@ gwy_data_line_get_sum (<em class="parameter"><code><a class="link" href="GwyData
<p>Computes sum of all values in a data line.</p>
<div class="refsect3">
<a name="gwy-data-line-get-sum.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -585,7 +725,7 @@ gwy_data_line_get_ra (<em class="parameter"><code><a class="link" href="GwyDataL
<p>Computes the mean absolute deviation of a data line.</p>
<div class="refsect3">
<a name="gwy-data-line-get-ra.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -612,7 +752,7 @@ gwy_data_line_get_skew (<em class="parameter"><code><a class="link" href="GwyDat
<p>Computes the skew of a data line.</p>
<div class="refsect3">
<a name="gwy-data-line-get-skew.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -639,7 +779,7 @@ gwy_data_line_get_kurtosis (<em class="parameter"><code><a class="link" href="Gw
<p>Computes the kurtosis of a data line.</p>
<div class="refsect3">
<a name="gwy-data-line-get-kurtosis.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -668,7 +808,7 @@ gwy_data_line_part_get_max (<em class="parameter"><code><a class="link" href="Gw
<p>Finds the maximum value of a part of a data line.</p>
<div class="refsect3">
<a name="gwy-data-line-part-get-max.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -708,7 +848,7 @@ gwy_data_line_part_get_min (<em class="parameter"><code><a class="link" href="Gw
<p>Finds the minimum value of a part of a data line.</p>
<div class="refsect3">
<a name="gwy-data-line-part-get-min.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -751,7 +891,7 @@ gwy_data_line_part_get_min_max (<em class="parameter"><code><a class="link" href
<p>Since 2.42</p>
<div class="refsect3">
<a name="gwy-data-line-part-get-min-max.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -797,7 +937,7 @@ gwy_data_line_part_get_avg (<em class="parameter"><code><a class="link" href="Gw
<p>Computes mean value of all values in a part of a data line.</p>
<div class="refsect3">
<a name="gwy-data-line-part-get-avg.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -837,7 +977,7 @@ gwy_data_line_part_get_rms (<em class="parameter"><code><a class="link" href="Gw
<p>Computes root mean square value of a part of a data line.</p>
<div class="refsect3">
<a name="gwy-data-line-part-get-rms.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -880,7 +1020,7 @@ to the second derivative of both HHCF and ACF at zero.</p>
<p>This roughness quantity is also known as Dq.</p>
<div class="refsect3">
<a name="gwy-data-line-part-get-tan-beta0.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -926,7 +1066,7 @@ as the value units of the line. See also
<a class="link" href="libgwyprocess-stats.html#gwy-data-field-area-get-variation" title="gwy_data_field_area_get_variation ()"><code class="function">gwy_data_field_area_get_variation()</code></a> for some more discussion.</p>
<div class="refsect3">
<a name="gwy-data-line-part-get-variation.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -967,7 +1107,7 @@ gwy_data_line_part_get_sum (<em class="parameter"><code><a class="link" href="Gw
<p>Computes sum of all values in a part of a data line.</p>
<div class="refsect3">
<a name="gwy-data-line-part-get-sum.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1007,7 +1147,7 @@ gwy_data_line_part_get_ra (<em class="parameter"><code><a class="link" href="Gwy
<p>Computes mean absolute deviation value of a part of a data line.</p>
<div class="refsect3">
<a name="gwy-data-line-part-get-ra.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1047,7 +1187,7 @@ gwy_data_line_part_get_skew (<em class="parameter"><code><a class="link" href="G
<p>Computes skew value of a part of a data line.</p>
<div class="refsect3">
<a name="gwy-data-line-part-get-skew.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1089,7 +1229,7 @@ gwy_data_line_part_get_kurtosis (<em class="parameter"><code><a class="link" hre
is zero for the Gaussian distribution (not 3).</p>
<div class="refsect3">
<a name="gwy-data-line-part-get-kurtosis.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1129,7 +1269,7 @@ gwy_data_line_get_modus (<em class="parameter"><code><a class="link" href="GwyDa
<p>See <a class="link" href="libgwyprocess-linestats.html#gwy-data-line-part-get-modus" title="gwy_data_line_part_get_modus ()"><code class="function">gwy_data_line_part_get_modus()</code></a> for details and caveats.</p>
<div class="refsect3">
<a name="gwy-data-line-get-modus.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1168,7 +1308,7 @@ gwy_data_line_part_get_modus (<em class="parameter"><code><a class="link" href="
return modus of the data itself, but modus of a histogram.</p>
<div class="refsect3">
<a name="gwy-data-line-part-get-modus.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1214,7 +1354,7 @@ gwy_data_line_get_median (<em class="parameter"><code><a class="link" href="GwyD
<p>Finds median of a data line.</p>
<div class="refsect3">
<a name="gwy-data-line-get-median.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1243,7 +1383,7 @@ gwy_data_line_part_get_median (<em class="parameter"><code><a class="link" href=
<p>Finds median of a data line part.</p>
<div class="refsect3">
<a name="gwy-data-line-part-get-median.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1286,7 +1426,7 @@ gwy_data_line_get_length (<em class="parameter"><code><a class="link" href="GwyD
values.</p>
<div class="refsect3">
<a name="gwy-data-line-get-length.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1323,7 +1463,7 @@ or Maximum Profile Peak Height <em class="parameter"><code>Rp</code></em>
.</p>
<div class="refsect3">
<a name="gwy-data-line-get-xpm.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1375,7 +1515,7 @@ or Maximum Profile Peak Depth <em class="parameter"><code>Rv</code></em>
.</p>
<div class="refsect3">
<a name="gwy-data-line-get-xvm.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1420,7 +1560,7 @@ gwy_data_line_get_xtm (<em class="parameter"><code><a class="link" href="GwyData
by <a class="link" href="libgwyprocess-linestats.html#gwy-data-line-get-xpm" title="gwy_data_line_get_xpm ()"><code class="function">gwy_data_line_get_xpm()</code></a> and <a class="link" href="libgwyprocess-linestats.html#gwy-data-line-get-xvm" title="gwy_data_line_get_xvm ()"><code class="function">gwy_data_line_get_xvm()</code></a>.</p>
<div class="refsect3">
<a name="gwy-data-line-get-xtm.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1496,7 +1636,7 @@ except when <em class="parameter"><code>v</code></em>
=0, in which case the range is set to [-1,1].</p>
<div class="refsect3">
<a name="gwy-data-line-distribution.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1564,7 +1704,7 @@ gwy_data_line_dh (<em class="parameter"><code><a class="link" href="GwyDataLine.
real data minimum and maximum value.</p>
<div class="refsect3">
<a name="gwy-data-line-dh.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1618,7 +1758,7 @@ gwy_data_line_cdh (<em class="parameter"><code><a class="link" href="GwyDataLine
real data minimum and maximum value.</p>
<div class="refsect3">
<a name="gwy-data-line-cdh.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1672,7 +1812,7 @@ gwy_data_line_da (<em class="parameter"><code><a class="link" href="GwyDataLine.
real data minimum and maximum angle value.</p>
<div class="refsect3">
<a name="gwy-data-line-da.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1724,7 +1864,7 @@ gwy_data_line_cda (<em class="parameter"><code><a class="link" href="GwyDataLine
real data minimum and maximum angle value.</p>
<div class="refsect3">
<a name="gwy-data-line-cda.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1773,7 +1913,7 @@ gwy_data_line_acf (<em class="parameter"><code><a class="link" href="GwyDataLine
</p>
<div class="refsect3">
<a name="gwy-data-line-acf.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1807,7 +1947,7 @@ gwy_data_line_hhcf (<em class="parameter"><code><a class="link" href="GwyDataLin
.</p>
<div class="refsect3">
<a name="gwy-data-line-hhcf.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1843,7 +1983,7 @@ gwy_data_line_psdf (<em class="parameter"><code><a class="link" href="GwyDataLin
units properly.</p>
<div class="refsect3">
<a name="gwy-data-line-psdf.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwyprocess/html/libgwyprocess-peaks.html b/devel-docs/libgwyprocess/html/libgwyprocess-peaks.html
index 6148f7c..0518a50 100644
--- a/devel-docs/libgwyprocess/html/libgwyprocess-peaks.html
+++ b/devel-docs/libgwyprocess/html/libgwyprocess-peaks.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>peaks: Gwyddion Data Processing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="prev" href="libgwyprocess-simpleFFT.html" title="simpleFFT">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwyprocess-peaks.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -124,7 +124,7 @@
</div>
<div class="refsect1">
<a name="libgwyprocess-peaks.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="name">
<col class="description">
@@ -175,7 +175,7 @@ gwy_peaks_copy (<em class="parameter"><code><span class="type">GwyPeaks</span> *
<p>This is mostly useful for language bindings.</p>
<div class="refsect3">
<a name="gwy-peaks-copy.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -202,7 +202,7 @@ gwy_peaks_free (<em class="parameter"><code><span class="type">GwyPeaks</span> *
<p>Frees a peak analyser and all associated data.</p>
<div class="refsect3">
<a name="gwy-peaks-free.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -229,7 +229,7 @@ background type will only be used in future analyses; it does not change the
results of the already performed analysis.</p>
<div class="refsect3">
<a name="gwy-peaks-set-background.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -263,7 +263,7 @@ only be effective in future analyses; it does not change the results of the
already performed analysis.</p>
<div class="refsect3">
<a name="gwy-peaks-set-order.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -301,7 +301,7 @@ gwy_peaks_analyze (<em class="parameter"><code><span class="type">GwyPeaks</span
subsequently requested using <a class="link" href="libgwyprocess-peaks.html#gwy-peaks-get-quantity" title="gwy_peaks_get_quantity ()"><code class="function">gwy_peaks_get_quantity()</code></a>.</p>
<div class="refsect3">
<a name="gwy-peaks-analyze.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -358,7 +358,7 @@ gwy_peaks_analyze_xy (<em class="parameter"><code><span class="type">GwyPeaks</s
subsequently requested using <a class="link" href="libgwyprocess-peaks.html#gwy-peaks-get-quantity" title="gwy_peaks_get_quantity ()"><code class="function">gwy_peaks_get_quantity()</code></a>.</p>
<div class="refsect3">
<a name="gwy-peaks-analyze-xy.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -408,7 +408,7 @@ gwy_peaks_analyze_dataline (<em class="parameter"><code><span class="type">GwyPe
subsequently requested using <a class="link" href="libgwyprocess-peaks.html#gwy-peaks-get-quantity" title="gwy_peaks_get_quantity ()"><code class="function">gwy_peaks_get_quantity()</code></a>.</p>
<div class="refsect3">
<a name="gwy-peaks-analyze-dataline.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -447,7 +447,7 @@ gwy_peaks_n_peaks (<em class="parameter"><code><span class="type">GwyPeaks</span
<p>Gets the current number of peaks of a peak analyser.</p>
<div class="refsect3">
<a name="gwy-peaks-n-peaks.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -476,7 +476,7 @@ gwy_peaks_get_quantity (<em class="parameter"><code><span class="type">GwyPeaks<
<p>Obtaines values of a given quantity for all found peaks.</p>
<div class="refsect3">
<a name="gwy-peaks-get-quantity.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -512,7 +512,7 @@ number is returned by <a class="link" href="libgwyprocess-peaks.html#gwy-peaks-n
<p>Type of background available in graph peak analysers.</p>
<div class="refsect3">
<a name="GwyPeakBackgroundType.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
@@ -545,7 +545,7 @@ number is returned by <a class="link" href="libgwyprocess-peaks.html#gwy-peaks-n
<p>Type of peak ordering by in the graph peak analyser results.</p>
<div class="refsect3">
<a name="GwyPeakOrderType.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
@@ -579,7 +579,7 @@ number is returned by <a class="link" href="libgwyprocess-peaks.html#gwy-peaks-n
<p>Type of pcharacteristics graph peak analysers can provide.</p>
<div class="refsect3">
<a name="GwyPeakQuantity.members"></a><h4>Members</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="300px" class="enum_members_name">
<col class="enum_members_description">
diff --git a/devel-docs/libgwyprocess/html/libgwyprocess-simpleFFT.html b/devel-docs/libgwyprocess/html/libgwyprocess-simpleFFT.html
index 959e6c9..5f50b3f 100644
--- a/devel-docs/libgwyprocess/html/libgwyprocess-simpleFFT.html
+++ b/devel-docs/libgwyprocess/html/libgwyprocess-simpleFFT.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>simpleFFT: Gwyddion Data Processing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="prev" href="libgwyprocess-linestats.html" title="linestats">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwyprocess-simpleFFT.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -73,13 +73,14 @@
</div>
<div class="refsect1">
<a name="libgwyprocess-simpleFFT.description"></a><h2>Description</h2>
-<p>The simple one-dimensional FFT algorithm <a class="link" href="libgwyprocess-simpleFFT.html#gwy-fft-simple" title="gwy_fft_simple ()"><code class="function">gwy_fft_simple()</code></a> is used as
-a fallback by other functions when a better implementation (FFTW3) is not
-available.</p>
-<p>You should not use it directly, as it is a waste of resources
-if FFTW3 backed is in use, neither you should feel any need to, as
-high-level functions such as <a class="link" href="libgwyprocess-inttrans.html#gwy-data-field-2dfft" title="gwy_data_field_2dfft ()"><code class="function">gwy_data_field_2dfft()</code></a> are available.</p>
-<p>Up to version 2.7 simpleFFT works only with certain tranform sizes, mostly
+<p>The simple one-dimensional FFT algorithm <a class="link" href="libgwyprocess-simpleFFT.html#gwy-fft-simple" title="gwy_fft_simple ()"><code class="function">gwy_fft_simple()</code></a> used to be
+employed as a fallback by other functions when a better implementation
+(FFTW3) was not available. Since version 2.49 it just calls the
+corresponding FFTW routine.</p>
+<p>Generally, you should either use high-level Gwyddion functions such as
+<a class="link" href="libgwyprocess-inttrans.html#gwy-data-field-2dfft-raw" title="gwy_data_field_2dfft_raw ()"><code class="function">gwy_data_field_2dfft_raw()</code></a> or, if they are insufficient, FFTW routines
+directly.</p>
+<p>Up to version 2.7 simpleFFT required certain tranform sizes, mostly
powers of 2. Since 2.8 it can handle arbitrary tranform sizes, although
sizes with large prime factors can be quite slow (still O(n*log(n)) though).</p>
</div>
@@ -97,8 +98,9 @@ gwy_fft_simple (<em class="parameter"><code><a class="link" href="libgwyprocess-
<em class="parameter"><code><a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> *out_re</code></em>,
<em class="parameter"><code><a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> *out_im</code></em>);</pre>
<p>Performs a DFT algorithm.</p>
-<p>This is a low-level function used by other FFT functions when no better
-backend is available.</p>
+<p>This is a low-level function that used to be employed by other FFT functions
+when no better backend was available. Since version 2.49 it just calls the
+corresponding FFTW routine.</p>
<p>Strides are distances between samples in input and output arrays. Use 1
for normal `dense' arrays. To use <a class="link" href="libgwyprocess-simpleFFT.html#gwy-fft-simple" title="gwy_fft_simple ()"><code class="function">gwy_fft_simple()</code></a> with interleaved arrays,
that is with alternating real and imaginary data, call it with
@@ -115,7 +117,7 @@ transform directions. By performing forward and then backward transform,
you will obtain the original array (up to rounding errors).</p>
<div class="refsect3">
<a name="gwy-fft-simple.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -180,7 +182,7 @@ gwy_fft_window (<em class="parameter"><code><a href="http://developer.gnome.org/
<p>Multiplies data by given window.</p>
<div class="refsect3">
<a name="gwy-fft-window.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -216,7 +218,7 @@ gwy_fft_window_data_field (<em class="parameter"><code><a class="link" href="Gwy
<p>Performs windowing of a data field in given direction.</p>
<div class="refsect3">
<a name="gwy-fft-window-data-field.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwyprocess/html/libgwyprocess-stats-uncertainty.html b/devel-docs/libgwyprocess/html/libgwyprocess-stats-uncertainty.html
index 7e6cf35..d934397 100644
--- a/devel-docs/libgwyprocess/html/libgwyprocess-stats-uncertainty.html
+++ b/devel-docs/libgwyprocess/html/libgwyprocess-stats-uncertainty.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>stats uncertainty: Gwyddion Data Processing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="prev" href="libgwyprocess-stats.html" title="stats">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwyprocess-stats-uncertainty.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -380,7 +380,7 @@ gwy_data_field_get_max_uncertainty (<em class="parameter"><code><a class="link"
<p>Finds the uncertainty of the maximum value of a data field.</p>
<div class="refsect3">
<a name="gwy-data-field-get-max-uncertainty.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -423,7 +423,7 @@ gwy_data_field_area_get_max_uncertainty
field.</p>
<div class="refsect3">
<a name="gwy-data-field-area-get-max-uncertainty.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -489,7 +489,7 @@ gwy_data_field_get_min_uncertainty (<em class="parameter"><code><a class="link"
<p>Finds the uncertainty of the minimum value of a data field.</p>
<div class="refsect3">
<a name="gwy-data-field-get-min-uncertainty.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -532,7 +532,7 @@ gwy_data_field_area_get_min_uncertainty
field.</p>
<div class="refsect3">
<a name="gwy-data-field-area-get-min-uncertainty.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -601,7 +601,7 @@ gwy_data_field_get_min_max_uncertainty
<p>Finds minimum and maximum values of a data field.</p>
<div class="refsect3">
<a name="gwy-data-field-get-min-max-uncertainty.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -654,7 +654,7 @@ of a data field.</p>
<a class="link" href="libgwyprocess-gwyprocessenums.html#GWY-MASK-INCLUDE:CAPS"><code class="literal">GWY_MASK_INCLUDE</code></a>.</p>
<div class="refsect3">
<a name="gwy-data-field-area-get-min-max-uncertainty.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -730,7 +730,7 @@ gwy_data_field_area_get_min_max_uncertainty_mask
part of a data field.</p>
<div class="refsect3">
<a name="gwy-data-field-area-get-min-max-uncertainty-mask.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -802,7 +802,7 @@ gwy_data_field_get_avg_uncertainty (<em class="parameter"><code><a class="link"
<p>Computes the uncertainty of the average value of a data field.</p>
<div class="refsect3">
<a name="gwy-data-field-get-avg-uncertainty.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -848,7 +848,7 @@ data field.</p>
<a class="link" href="libgwyprocess-gwyprocessenums.html#GWY-MASK-INCLUDE:CAPS"><code class="literal">GWY_MASK_INCLUDE</code></a>.</p>
<div class="refsect3">
<a name="gwy-data-field-area-get-avg-uncertainty.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -916,7 +916,7 @@ gwy_data_field_area_get_avg_uncertainty_mask
data field.</p>
<div class="refsect3">
<a name="gwy-data-field-area-get-avg-uncertainty-mask.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -982,7 +982,7 @@ gwy_data_field_get_rms_uncertainty (<em class="parameter"><code><a class="link"
<p>Computes uncertainty of root mean square value of a data field.</p>
<div class="refsect3">
<a name="gwy-data-field-get-rms-uncertainty.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1023,7 +1023,7 @@ gwy_data_field_area_get_rms_uncertainty
data field.</p>
<div class="refsect3">
<a name="gwy-data-field-area-get-rms-uncertainty.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1095,7 +1095,7 @@ gwy_data_field_area_get_rms_uncertainty_mask
rectangular part of a data field.</p>
<div class="refsect3">
<a name="gwy-data-field-area-get-rms-uncertainty-mask.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1169,7 +1169,7 @@ gwy_data_field_get_stats_uncertainties
field.</p>
<div class="refsect3">
<a name="gwy-data-field-get-stats-uncertainties.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1244,7 +1244,7 @@ gwy_data_field_area_get_stats_uncertainties
with masking mode <a class="link" href="libgwyprocess-gwyprocessenums.html#GWY-MASK-INCLUDE:CAPS"><code class="literal">GWY_MASK_INCLUDE</code></a>.</p>
<div class="refsect3">
<a name="gwy-data-field-area-get-stats-uncertainties.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1343,7 +1343,7 @@ gwy_data_field_area_get_stats_uncertainties_mask
rectangular part of a data field.</p>
<div class="refsect3">
<a name="gwy-data-field-area-get-stats-uncertainties-mask.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1444,7 +1444,7 @@ gwy_data_field_area_acf_uncertainty (<em class="parameter"><code><a class="link"
a data field.</p>
<div class="refsect3">
<a name="gwy-data-field-area-acf-uncertainty.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1526,7 +1526,7 @@ gwy_data_field_acf_uncertainty (<em class="parameter"><code><a class="link" href
field.</p>
<div class="refsect3">
<a name="gwy-data-field-acf-uncertainty.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1589,7 +1589,7 @@ gwy_data_field_area_hhcf_uncertainty (<em class="parameter"><code><a class="link
rectangular part of a data field.</p>
<div class="refsect3">
<a name="gwy-data-field-area-hhcf-uncertainty.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1669,7 +1669,7 @@ gwy_data_field_hhcf_uncertainty (<em class="parameter"><code><a class="link" hre
field.</p>
<div class="refsect3">
<a name="gwy-data-field-hhcf-uncertainty.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1727,7 +1727,7 @@ gwy_data_field_get_surface_area_uncertainty
<p>Computes uncertainty of surface area of a data field.</p>
<div class="refsect3">
<a name="gwy-data-field-get-surface-area-uncertainty.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1784,7 +1784,7 @@ gwy_data_field_area_get_surface_area_uncertainty
with masking mode <a class="link" href="libgwyprocess-gwyprocessenums.html#GWY-MASK-INCLUDE:CAPS"><code class="literal">GWY_MASK_INCLUDE</code></a>.</p>
<div class="refsect3">
<a name="gwy-data-field-area-get-surface-area-uncertainty.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1866,7 +1866,7 @@ gwy_data_field_area_get_surface_area_mask_uncertainty
are the same physical quantities.</p>
<div class="refsect3">
<a name="gwy-data-field-area-get-surface-area-mask-uncertainty.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1952,7 +1952,7 @@ gwy_data_field_area_get_median_uncertainty
with masking mode <a class="link" href="libgwyprocess-gwyprocessenums.html#GWY-MASK-INCLUDE:CAPS"><code class="literal">GWY_MASK_INCLUDE</code></a>.</p>
<div class="refsect3">
<a name="gwy-data-field-area-get-median-uncertainty.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2019,7 +2019,7 @@ gwy_data_field_area_get_median_uncertainty_mask
<p>Computes uncertainty of median value of a data field area.</p>
<div class="refsect3">
<a name="gwy-data-field-area-get-median-uncertainty-mask.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2085,7 +2085,7 @@ gwy_data_field_get_median_uncertainty (<em class="parameter"><code><a class="lin
<p>Computes uncertainty of median value of a data field.</p>
<div class="refsect3">
<a name="gwy-data-field-get-median-uncertainty.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2128,7 +2128,7 @@ gwy_data_field_area_dh_uncertainty (<em class="parameter"><code><a class="link"
data field.</p>
<div class="refsect3">
<a name="gwy-data-field-area-dh-uncertainty.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2198,7 +2198,7 @@ gwy_data_field_dh_uncertainty (<em class="parameter"><code><a class="link" href=
<p>Calculates uncertainty of distribution of heights in a data field.</p>
<div class="refsect3">
<a name="gwy-data-field-dh-uncertainty.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2255,7 +2255,7 @@ gwy_data_field_area_get_normal_coeffs_uncertainty
field.</p>
<div class="refsect3">
<a name="gwy-data-field-area-get-normal-coeffs-uncertainty.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2358,7 +2358,7 @@ gwy_data_field_get_normal_coeffs_uncertainty
<p>Computes squared uncertainty of average normal vector of a data field.</p>
<div class="refsect3">
<a name="gwy-data-field-get-normal-coeffs-uncertainty.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2438,7 +2438,7 @@ gwy_data_field_area_get_inclination_uncertainty
<p>Calculates the uncertainty of the inclination of the image (polar and azimuth angle).</p>
<div class="refsect3">
<a name="gwy-data-field-area-get-inclination-uncertainty.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2514,7 +2514,7 @@ gwy_data_field_get_inclination_uncertainty
<p>Calculates the uncertainty of the inclination of the image (polar and azimuth angle).</p>
<div class="refsect3">
<a name="gwy-data-field-get-inclination-uncertainty.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2582,7 +2582,7 @@ gwy_data_field_area_cdh_uncertainty (<em class="parameter"><code><a class="link"
rectangular part of the data field.</p>
<div class="refsect3">
<a name="gwy-data-field-area-cdh-uncertainty.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2653,7 +2653,7 @@ gwy_data_field_cdh_uncertainty (<em class="parameter"><code><a class="link" href
field.</p>
<div class="refsect3">
<a name="gwy-data-field-cdh-uncertainty.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2721,7 +2721,7 @@ gwy_data_line_acf_uncertainty (<em class="parameter"><code><a class="link" href=
</p>
<div class="refsect3">
<a name="gwy-data-line-acf-uncertainty.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2759,7 +2759,7 @@ gwy_data_line_cumulate_uncertainty (<em class="parameter"><code><a class="link"
uncertainty of the original distribution.</p>
<div class="refsect3">
<a name="gwy-data-line-cumulate-uncertainty.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2786,7 +2786,7 @@ stores results in <em class="parameter"><code>target_line</code></em>
.</p>
<div class="refsect3">
<a name="gwy-data-line-hhcf-uncertainty.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwyprocess/html/libgwyprocess-stats.html b/devel-docs/libgwyprocess/html/libgwyprocess-stats.html
index 0a7472e..d0a8218 100644
--- a/devel-docs/libgwyprocess/html/libgwyprocess-stats.html
+++ b/devel-docs/libgwyprocess/html/libgwyprocess-stats.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>stats: Gwyddion Data Processing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="prev" href="libgwyprocess-GwySpline.html" title="GwySpline">
@@ -33,7 +33,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwyprocess-stats.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -372,6 +372,14 @@
<span class="returnvalue">void</span>
</td>
<td class="function_name">
+<a class="link" href="libgwyprocess-stats.html#gwy-data-field-area-da-mask" title="gwy_data_field_area_da_mask ()">gwy_data_field_area_da_mask</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
<a class="link" href="libgwyprocess-stats.html#gwy-data-field-da" title="gwy_data_field_da ()">gwy_data_field_da</a> <span class="c_punctuation">()</span>
</td>
</tr>
@@ -388,6 +396,14 @@
<span class="returnvalue">void</span>
</td>
<td class="function_name">
+<a class="link" href="libgwyprocess-stats.html#gwy-data-field-area-cda-mask" title="gwy_data_field_area_cda_mask ()">gwy_data_field_area_cda_mask</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
<a class="link" href="libgwyprocess-stats.html#gwy-data-field-cda" title="gwy_data_field_cda ()">gwy_data_field_cda</a> <span class="c_punctuation">()</span>
</td>
</tr>
@@ -409,6 +425,14 @@
</tr>
<tr>
<td class="function_type">
+<a class="link" href="GwyDataLine.html" title="GwyDataLine"><span class="returnvalue">GwyDataLine</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="libgwyprocess-stats.html#gwy-data-field-area-row-acf" title="gwy_data_field_area_row_acf ()">gwy_data_field_area_row_acf</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
<span class="returnvalue">void</span>
</td>
<td class="function_name">
@@ -425,6 +449,14 @@
</tr>
<tr>
<td class="function_type">
+<a class="link" href="GwyDataLine.html" title="GwyDataLine"><span class="returnvalue">GwyDataLine</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="libgwyprocess-stats.html#gwy-data-field-area-row-hhcf" title="gwy_data_field_area_row_hhcf ()">gwy_data_field_area_row_hhcf</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
<span class="returnvalue">void</span>
</td>
<td class="function_name">
@@ -441,6 +473,14 @@
</tr>
<tr>
<td class="function_type">
+<a class="link" href="GwyDataLine.html" title="GwyDataLine"><span class="returnvalue">GwyDataLine</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="libgwyprocess-stats.html#gwy-data-field-area-row-psdf" title="gwy_data_field_area_row_psdf ()">gwy_data_field_area_row_psdf</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
<span class="returnvalue">void</span>
</td>
<td class="function_name">
@@ -457,6 +497,14 @@
</tr>
<tr>
<td class="function_type">
+<a class="link" href="GwyDataLine.html" title="GwyDataLine"><span class="returnvalue">GwyDataLine</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="libgwyprocess-stats.html#gwy-data-field-area-row-asg" title="gwy_data_field_area_row_asg ()">gwy_data_field_area_row_asg</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
<span class="returnvalue">void</span>
</td>
<td class="function_name">
@@ -656,7 +704,7 @@ gwy_data_field_get_max (<em class="parameter"><code><a class="link" href="GwyDat
<p>This quantity is cached.</p>
<div class="refsect3">
<a name="gwy-data-field-get-max.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -683,7 +731,7 @@ gwy_data_field_get_min (<em class="parameter"><code><a class="link" href="GwyDat
<p>This quantity is cached.</p>
<div class="refsect3">
<a name="gwy-data-field-get-min.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -711,7 +759,7 @@ gwy_data_field_get_min_max (<em class="parameter"><code><a class="link" href="Gw
<p>Finds minimum and maximum values of a data field.</p>
<div class="refsect3">
<a name="gwy-data-field-get-min-max.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -746,7 +794,7 @@ gwy_data_field_get_avg (<em class="parameter"><code><a class="link" href="GwyDat
<p>This quantity is cached.</p>
<div class="refsect3">
<a name="gwy-data-field-get-avg.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -773,7 +821,7 @@ gwy_data_field_get_rms (<em class="parameter"><code><a class="link" href="GwyDat
<p>This quantity is cached.</p>
<div class="refsect3">
<a name="gwy-data-field-get-rms.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -800,7 +848,7 @@ gwy_data_field_get_sum (<em class="parameter"><code><a class="link" href="GwyDat
<p>This quantity is cached.</p>
<div class="refsect3">
<a name="gwy-data-field-get-sum.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -827,7 +875,7 @@ gwy_data_field_get_median (<em class="parameter"><code><a class="link" href="Gwy
<p>This quantity is cached.</p>
<div class="refsect3">
<a name="gwy-data-field-get-median.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -854,7 +902,7 @@ gwy_data_field_get_surface_area (<em class="parameter"><code><a class="link" hre
<p>This quantity is cached.</p>
<div class="refsect3">
<a name="gwy-data-field-get-surface-area.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -882,7 +930,7 @@ gwy_data_field_get_variation (<em class="parameter"><code><a class="link" href="
<p>This quantity is cached.</p>
<div class="refsect3">
<a name="gwy-data-field-get-variation.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -911,7 +959,7 @@ gwy_data_field_get_entropy (<em class="parameter"><code><a class="link" href="Gw
<p>This quantity is cached.</p>
<div class="refsect3">
<a name="gwy-data-field-get-entropy.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -946,7 +994,7 @@ represent the coordinates (<em class="parameter"><code>x</code></em>
the same dimensions.</p>
<div class="refsect3">
<a name="gwy-data-field-get-entropy-2d.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -987,7 +1035,7 @@ gwy_data_field_area_get_max (<em class="parameter"><code><a class="link" href="G
<p>Finds the maximum value in a rectangular part of a data field.</p>
<div class="refsect3">
<a name="gwy-data-field-area-get-max.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1046,7 +1094,7 @@ gwy_data_field_area_get_min (<em class="parameter"><code><a class="link" href="G
<p>Finds the minimum value in a rectangular part of a data field.</p>
<div class="refsect3">
<a name="gwy-data-field-area-get-min.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1112,7 +1160,7 @@ gwy_data_field_area_get_min_max (<em class="parameter"><code><a class="link" hre
with masking mode <a class="link" href="libgwyprocess-gwyprocessenums.html#GWY-MASK-INCLUDE:CAPS"><code class="literal">GWY_MASK_INCLUDE</code></a>.</p>
<div class="refsect3">
<a name="gwy-data-field-area-get-min-max.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1179,7 +1227,7 @@ gwy_data_field_area_get_min_max_mask (<em class="parameter"><code><a class="link
<p>Finds minimum and maximum values in a rectangular part of a data field.</p>
<div class="refsect3">
<a name="gwy-data-field-area-get-min-max-mask.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1254,7 +1302,7 @@ gwy_data_field_area_get_avg (<em class="parameter"><code><a class="link" href="G
with masking mode <a class="link" href="libgwyprocess-gwyprocessenums.html#GWY-MASK-INCLUDE:CAPS"><code class="literal">GWY_MASK_INCLUDE</code></a>.</p>
<div class="refsect3">
<a name="gwy-data-field-area-get-avg.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1313,7 +1361,7 @@ gwy_data_field_area_get_avg_mask (<em class="parameter"><code><a class="link" hr
<p>Computes average value of a rectangular part of a data field.</p>
<div class="refsect3">
<a name="gwy-data-field-area-get-avg-mask.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1379,7 +1427,7 @@ gwy_data_field_area_get_rms (<em class="parameter"><code><a class="link" href="G
<p>Computes root mean square value of a rectangular part of a data field.</p>
<div class="refsect3">
<a name="gwy-data-field-area-get-rms.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1441,7 +1489,7 @@ gwy_data_field_area_get_rms_mask (<em class="parameter"><code><a class="link" hr
data field.</p>
<div class="refsect3">
<a name="gwy-data-field-area-get-rms-mask.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1511,7 +1559,7 @@ cotinguous part of the mask or inverted mask) separately and the deviations
are calculated from these mean values.</p>
<div class="refsect3">
<a name="gwy-data-field-area-get-grainwise-rms.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1580,7 +1628,7 @@ gwy_data_field_area_get_sum (<em class="parameter"><code><a class="link" href="G
with masking mode <a class="link" href="libgwyprocess-gwyprocessenums.html#GWY-MASK-INCLUDE:CAPS"><code class="literal">GWY_MASK_INCLUDE</code></a>.</p>
<div class="refsect3">
<a name="gwy-data-field-area-get-sum.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1639,7 +1687,7 @@ gwy_data_field_area_get_sum_mask (<em class="parameter"><code><a class="link" hr
<p>Sums values of a rectangular part of a data field.</p>
<div class="refsect3">
<a name="gwy-data-field-area-get-sum-mask.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1709,7 +1757,7 @@ gwy_data_field_area_get_median (<em class="parameter"><code><a class="link" href
with masking mode <a class="link" href="libgwyprocess-gwyprocessenums.html#GWY-MASK-INCLUDE:CAPS"><code class="literal">GWY_MASK_INCLUDE</code></a>.</p>
<div class="refsect3">
<a name="gwy-data-field-area-get-median.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1768,7 +1816,7 @@ gwy_data_field_area_get_median_mask (<em class="parameter"><code><a class="link"
<p>Computes median value of a data field area.</p>
<div class="refsect3">
<a name="gwy-data-field-area-get-median-mask.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1838,7 +1886,7 @@ gwy_data_field_area_get_surface_area (<em class="parameter"><code><a class="link
<a class="link" href="libgwyprocess-gwyprocessenums.html#GWY-MASK-INCLUDE:CAPS"><code class="literal">GWY_MASK_INCLUDE</code></a>.</p>
<div class="refsect3">
<a name="gwy-data-field-area-get-surface-area.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1901,7 +1949,7 @@ gwy_data_field_area_get_surface_area_mask
are the same physical quantities.</p>
<div class="refsect3">
<a name="gwy-data-field-area-get-surface-area-mask.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -1970,7 +2018,7 @@ gwy_data_field_area_get_entropy_at_scales
<p>Calculates estimates of value distribution entropy at various scales.</p>
<div class="refsect3">
<a name="gwy-data-field-area-get-entropy-at-scales.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2048,7 +2096,7 @@ gwy_data_field_get_entropy_2d_at_scales
scales.</p>
<div class="refsect3">
<a name="gwy-data-field-get-entropy-2d-at-scales.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2113,7 +2161,7 @@ non-fractal surfaces it scales with the linear dimension of the image, not
with its area, despite being an area integral.</p>
<div class="refsect3">
<a name="gwy-data-field-area-get-variation.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2196,7 +2244,7 @@ returned.</p>
<p>It should be noted that this estimate may be biased.</p>
<div class="refsect3">
<a name="gwy-data-field-area-get-entropy.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2263,7 +2311,7 @@ gwy_data_field_area_get_volume (<em class="parameter"><code><a class="link" href
<p>Computes volume of a rectangular part of a data field.</p>
<div class="refsect3">
<a name="gwy-data-field-area-get-volume.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2336,7 +2384,7 @@ subject to changes.</p>
<p>This quantity is cached.</p>
<div class="refsect3">
<a name="gwy-data-field-get-autorange.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2375,7 +2423,7 @@ gwy_data_field_get_stats (<em class="parameter"><code><a class="link" href="GwyD
<p>Computes basic statistical quantities of a data field.</p>
<div class="refsect3">
<a name="gwy-data-field-get-stats.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2441,7 +2489,7 @@ gwy_data_field_area_get_stats (<em class="parameter"><code><a class="link" href=
with masking mode <a class="link" href="libgwyprocess-gwyprocessenums.html#GWY-MASK-INCLUDE:CAPS"><code class="literal">GWY_MASK_INCLUDE</code></a>.</p>
<div class="refsect3">
<a name="gwy-data-field-area-get-stats.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2529,7 +2577,7 @@ gwy_data_field_area_get_stats_mask (<em class="parameter"><code><a class="link"
<p>Computes basic statistical quantities of a rectangular part of a data field.</p>
<div class="refsect3">
<a name="gwy-data-field-area-get-stats-mask.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2655,7 +2703,7 @@ realized:</p>
<div class="refsect3">
<a name="gwy-data-field-area-count-in-range.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2669,7 +2717,7 @@ realized:</p>
</tr>
<tr>
<td class="parameter_name"><p>mask</p></td>
-<td class="parameter_description"><p>Mask specifying which values to take into account/exclude, or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.</p></td>
+<td class="parameter_description"><p>Mask specifying which values to take into account, or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.</p></td>
<td class="parameter_annotations"> </td>
</tr>
<tr>
@@ -2741,7 +2789,7 @@ gwy_data_field_area_dh (<em class="parameter"><code><a class="link" href="GwyDat
<p>Calculates distribution of heights in a rectangular part of data field.</p>
<div class="refsect3">
<a name="gwy-data-field-area-dh.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2755,7 +2803,7 @@ gwy_data_field_area_dh (<em class="parameter"><code><a class="link" href="GwyDat
</tr>
<tr>
<td class="parameter_name"><p>mask</p></td>
-<td class="parameter_description"><p>Mask specifying which values to take into account/exclude, or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.</p></td>
+<td class="parameter_description"><p>Mask specifying which values to take into account, or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.</p></td>
<td class="parameter_annotations"> </td>
</tr>
<tr>
@@ -2804,7 +2852,7 @@ gwy_data_field_dh (<em class="parameter"><code><a class="link" href="GwyDataFiel
<p>Calculates distribution of heights in a data field.</p>
<div class="refsect3">
<a name="gwy-data-field-dh.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2848,7 +2896,7 @@ gwy_data_field_area_cdh (<em class="parameter"><code><a class="link" href="GwyDa
field.</p>
<div class="refsect3">
<a name="gwy-data-field-area-cdh.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2862,7 +2910,7 @@ field.</p>
</tr>
<tr>
<td class="parameter_name"><p>mask</p></td>
-<td class="parameter_description"><p>Mask specifying which values to take into account/exclude, or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.</p></td>
+<td class="parameter_description"><p>Mask specifying which values to take into account, or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.</p></td>
<td class="parameter_annotations"> </td>
</tr>
<tr>
@@ -2911,7 +2959,7 @@ gwy_data_field_cdh (<em class="parameter"><code><a class="link" href="GwyDataFie
<p>Calculates cumulative distribution of heights in a data field.</p>
<div class="refsect3">
<a name="gwy-data-field-cdh.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -2954,7 +3002,7 @@ gwy_data_field_area_da (<em class="parameter"><code><a class="link" href="GwyDat
<p>Calculates distribution of slopes in a rectangular part of data field.</p>
<div class="refsect3">
<a name="gwy-data-field-area-da.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -3009,6 +3057,82 @@ nonpositive, a suitable resolution is determined automatically.</p></td>
</div>
<hr>
<div class="refsect2">
+<a name="gwy-data-field-area-da-mask"></a><h3>gwy_data_field_area_da_mask ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gwy_data_field_area_da_mask (<em class="parameter"><code><a class="link" href="GwyDataField.html" title="GwyDataField"><span class="type">GwyDataField</span></a> *data_field</code></em>,
+ <em class="parameter"><code><a class="link" href="GwyDataField.html" title="GwyDataField"><span class="type">GwyDataField</span></a> *mask</code></em>,
+ <em class="parameter"><code><a class="link" href="GwyDataLine.html" title="GwyDataLine"><span class="type">GwyDataLine</span></a> *target_line</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> col</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> row</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> width</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> height</code></em>,
+ <em class="parameter"><code><a class="link" href="libgwyprocess-gwyprocessenums.html#GwyOrientation" title="enum GwyOrientation"><span class="type">GwyOrientation</span></a> orientation</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> nstats</code></em>);</pre>
+<p>Calculates distribution of slopes in a rectangular part of data field, with
+masking.</p>
+<div class="refsect3">
+<a name="gwy-data-field-area-da-mask.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>data_field</p></td>
+<td class="parameter_description"><p>A data field.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>mask</p></td>
+<td class="parameter_description"><p>Mask specifying which values to take into account, or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>target_line</p></td>
+<td class="parameter_description"><p>A data line to store the distribution to. It will be
+resampled to requested width.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>col</p></td>
+<td class="parameter_description"><p>Upper-left column coordinate.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>row</p></td>
+<td class="parameter_description"><p>Upper-left row coordinate.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>width</p></td>
+<td class="parameter_description"><p>Area width (number of columns).</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>height</p></td>
+<td class="parameter_description"><p>Area height (number of rows).</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>orientation</p></td>
+<td class="parameter_description"><p>Orientation to compute the slope distribution in.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>nstats</p></td>
+<td class="parameter_description"><p>The number of samples to take on the distribution function. If
+nonpositive, a suitable resolution is determined automatically.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: <a class="link" href="api-index-2-49.html#api-index-2.49">2.49</a></p>
+</div>
+<hr>
+<div class="refsect2">
<a name="gwy-data-field-da"></a><h3>gwy_data_field_da ()</h3>
<pre class="programlisting"><span class="returnvalue">void</span>
gwy_data_field_da (<em class="parameter"><code><a class="link" href="GwyDataField.html" title="GwyDataField"><span class="type">GwyDataField</span></a> *data_field</code></em>,
@@ -3018,7 +3142,7 @@ gwy_data_field_da (<em class="parameter"><code><a class="link" href="GwyDataFiel
<p>Calculates distribution of slopes in a data field.</p>
<div class="refsect3">
<a name="gwy-data-field-da.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -3067,7 +3191,77 @@ gwy_data_field_area_cda (<em class="parameter"><code><a class="link" href="GwyDa
field.</p>
<div class="refsect3">
<a name="gwy-data-field-area-cda.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>data_field</p></td>
+<td class="parameter_description"><p>A data field.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>target_line</p></td>
+<td class="parameter_description"><p>A data line to store the distribution to. It will be
+resampled to requested width.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>col</p></td>
+<td class="parameter_description"><p>Upper-left column coordinate.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>row</p></td>
+<td class="parameter_description"><p>Upper-left row coordinate.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>width</p></td>
+<td class="parameter_description"><p>Area width (number of columns).</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>height</p></td>
+<td class="parameter_description"><p>Area height (number of rows).</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>orientation</p></td>
+<td class="parameter_description"><p>Orientation to compute the slope distribution in.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>nstats</p></td>
+<td class="parameter_description"><p>The number of samples to take on the distribution function. If
+nonpositive, a suitable resolution is determined automatically.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gwy-data-field-area-cda-mask"></a><h3>gwy_data_field_area_cda_mask ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gwy_data_field_area_cda_mask (<em class="parameter"><code><a class="link" href="GwyDataField.html" title="GwyDataField"><span class="type">GwyDataField</span></a> *data_field</code></em>,
+ <em class="parameter"><code><a class="link" href="GwyDataField.html" title="GwyDataField"><span class="type">GwyDataField</span></a> *mask</code></em>,
+ <em class="parameter"><code><a class="link" href="GwyDataLine.html" title="GwyDataLine"><span class="type">GwyDataLine</span></a> *target_line</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> col</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> row</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> width</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> height</code></em>,
+ <em class="parameter"><code><a class="link" href="libgwyprocess-gwyprocessenums.html#GwyOrientation" title="enum GwyOrientation"><span class="type">GwyOrientation</span></a> orientation</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> nstats</code></em>);</pre>
+<p>Calculates cumulative distribution of slopes in a rectangular part of data
+field, with masking.</p>
+<div class="refsect3">
+<a name="gwy-data-field-area-cda-mask.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -3119,6 +3313,7 @@ nonpositive, a suitable resolution is determined automatically.</p></td>
</tbody>
</table></div>
</div>
+<p class="since">Since: <a class="link" href="api-index-2-49.html#api-index-2.49">2.49</a></p>
</div>
<hr>
<div class="refsect2">
@@ -3131,7 +3326,7 @@ gwy_data_field_cda (<em class="parameter"><code><a class="link" href="GwyDataFie
<p>Calculates cumulative distribution of slopes in a data field.</p>
<div class="refsect3">
<a name="gwy-data-field-cda.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -3181,7 +3376,7 @@ gwy_data_field_area_acf (<em class="parameter"><code><a class="link" href="GwyDa
a data field.</p>
<div class="refsect3">
<a name="gwy-data-field-area-acf.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -3256,7 +3451,7 @@ gwy_data_field_acf (<em class="parameter"><code><a class="link" href="GwyDataFie
<p>Calculates one-dimensional autocorrelation function of a data field.</p>
<div class="refsect3">
<a name="gwy-data-field-acf.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -3299,6 +3494,98 @@ nonpositive, data field width (height) is used.</p></td>
</div>
<hr>
<div class="refsect2">
+<a name="gwy-data-field-area-row-acf"></a><h3>gwy_data_field_area_row_acf ()</h3>
+<pre class="programlisting"><a class="link" href="GwyDataLine.html" title="GwyDataLine"><span class="returnvalue">GwyDataLine</span></a> *
+gwy_data_field_area_row_acf (<em class="parameter"><code><a class="link" href="GwyDataField.html" title="GwyDataField"><span class="type">GwyDataField</span></a> *field</code></em>,
+ <em class="parameter"><code><a class="link" href="GwyDataField.html" title="GwyDataField"><span class="type">GwyDataField</span></a> *mask</code></em>,
+ <em class="parameter"><code><a class="link" href="libgwyprocess-gwyprocessenums.html#GwyMaskingType" title="enum GwyMaskingType"><span class="type">GwyMaskingType</span></a> masking</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> col</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> row</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> width</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> height</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> level</code></em>,
+ <em class="parameter"><code><a class="link" href="GwyDataLine.html" title="GwyDataLine"><span class="type">GwyDataLine</span></a> *weights</code></em>);</pre>
+<p>Calculates the row-wise autocorrelation function (ACF) of a field.</p>
+<p>The calculated ACF has the natural number of points, i.e. <em class="parameter"><code>width</code></em>
+.</p>
+<p>Masking is performed by omitting all terms that contain excluded pixels.
+Since different rows contain different numbers of pixels, the resulting
+ACF values are calculated as a weighted sums where weight of each row's
+contribution is proportional to the number of contributing terms. In other
+words, the weighting is fair: each contributing pixel has the same influence
+on the result.</p>
+<div class="refsect3">
+<a name="gwy-data-field-area-row-acf.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>field</p></td>
+<td class="parameter_description"><p>A two-dimensional data field.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>col</p></td>
+<td class="parameter_description"><p>Upper-left column coordinate.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>row</p></td>
+<td class="parameter_description"><p>Upper-left row coordinate.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>width</p></td>
+<td class="parameter_description"><p>Area width (number of columns).</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>height</p></td>
+<td class="parameter_description"><p>Area height (number of rows).</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>mask</p></td>
+<td class="parameter_description"><p>Mask specifying which values to take into account/exclude, or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>masking</p></td>
+<td class="parameter_description"><p>Masking mode to use (has any effect only with non-<a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> <em class="parameter"><code>mask</code></em>
+).</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>level</p></td>
+<td class="parameter_description"><p>The first polynomial degree to keep in the rows, lower degrees than
+<em class="parameter"><code>level</code></em>
+are subtracted. Note only values 0 (no levelling) and 1
+(subtract the mean value of each row) are available at present. For
+SPM data, you usually wish to pass 1.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>weights</p></td>
+<td class="parameter_description"><p>Line to store the denominators to (or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>). It will be resized
+to match the returned line. The denominators are integers equal
+to the number of terms that contributed to each value. They are
+suitable as fitting weight if the ACF is fitted.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gwy-data-field-area-row-acf.returns"></a><h4>Returns</h4>
+<p> A new one-dimensional data line with the ACF.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
<a name="gwy-data-field-area-hhcf"></a><h3>gwy_data_field_area_hhcf ()</h3>
<pre class="programlisting"><span class="returnvalue">void</span>
gwy_data_field_area_hhcf (<em class="parameter"><code><a class="link" href="GwyDataField.html" title="GwyDataField"><span class="type">GwyDataField</span></a> *data_field</code></em>,
@@ -3314,7 +3601,7 @@ gwy_data_field_area_hhcf (<em class="parameter"><code><a class="link" href="GwyD
a data field.</p>
<div class="refsect3">
<a name="gwy-data-field-area-hhcf.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -3389,7 +3676,7 @@ gwy_data_field_hhcf (<em class="parameter"><code><a class="link" href="GwyDataFi
<p>Calculates one-dimensional autocorrelation function of a data field.</p>
<div class="refsect3">
<a name="gwy-data-field-hhcf.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -3432,6 +3719,99 @@ nonpositive, data field width (height) is used.</p></td>
</div>
<hr>
<div class="refsect2">
+<a name="gwy-data-field-area-row-hhcf"></a><h3>gwy_data_field_area_row_hhcf ()</h3>
+<pre class="programlisting"><a class="link" href="GwyDataLine.html" title="GwyDataLine"><span class="returnvalue">GwyDataLine</span></a> *
+gwy_data_field_area_row_hhcf (<em class="parameter"><code><a class="link" href="GwyDataField.html" title="GwyDataField"><span class="type">GwyDataField</span></a> *field</code></em>,
+ <em class="parameter"><code><a class="link" href="GwyDataField.html" title="GwyDataField"><span class="type">GwyDataField</span></a> *mask</code></em>,
+ <em class="parameter"><code><a class="link" href="libgwyprocess-gwyprocessenums.html#GwyMaskingType" title="enum GwyMaskingType"><span class="type">GwyMaskingType</span></a> masking</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> col</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> row</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> width</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> height</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> level</code></em>,
+ <em class="parameter"><code><a class="link" href="GwyDataLine.html" title="GwyDataLine"><span class="type">GwyDataLine</span></a> *weights</code></em>);</pre>
+<p>Calculates the row-wise height-height correlation function (HHCF) of a
+rectangular part of a field.</p>
+<p>The calculated HHCF has the natural number of points, i.e. <em class="parameter"><code>width</code></em>
+.</p>
+<p>Masking is performed by omitting all terms that contain excluded pixels.
+Since different rows contain different numbers of pixels, the resulting
+HHCF values are calculated as a weighted sums where weight of each row's
+contribution is proportional to the number of contributing terms. In other
+words, the weighting is fair: each contributing pixel has the same influence
+on the result.</p>
+<div class="refsect3">
+<a name="gwy-data-field-area-row-hhcf.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>field</p></td>
+<td class="parameter_description"><p>A two-dimensional data field.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>col</p></td>
+<td class="parameter_description"><p>Upper-left column coordinate.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>row</p></td>
+<td class="parameter_description"><p>Upper-left row coordinate.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>width</p></td>
+<td class="parameter_description"><p>Area width (number of columns).</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>height</p></td>
+<td class="parameter_description"><p>Area height (number of rows).</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>mask</p></td>
+<td class="parameter_description"><p>Mask specifying which values to take into account/exclude, or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>masking</p></td>
+<td class="parameter_description"><p>Masking mode to use (has any effect only with non-<a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> <em class="parameter"><code>mask</code></em>
+).</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>level</p></td>
+<td class="parameter_description"><p>The first polynomial degree to keep in the rows, lower degrees than
+<em class="parameter"><code>level</code></em>
+are subtracted. Note only values 0 (no levelling) and 1
+(subtract the mean value of each row) are available at present.
+There is no difference for HHCF.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>weights</p></td>
+<td class="parameter_description"><p>Line to store the denominators to (or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>). It will be resized
+to match the returned line. The denominators are integers equal
+to the number of terms that contributed to each value. They are
+suitable as fitting weight if the ACF is fitted.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gwy-data-field-area-row-hhcf.returns"></a><h4>Returns</h4>
+<p> A new one-dimensional data line with the HHCF.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
<a name="gwy-data-field-area-psdf"></a><h3>gwy_data_field_area_psdf ()</h3>
<pre class="programlisting"><span class="returnvalue">void</span>
gwy_data_field_area_psdf (<em class="parameter"><code><a class="link" href="GwyDataField.html" title="GwyDataField"><span class="type">GwyDataField</span></a> *data_field</code></em>,
@@ -3448,7 +3828,7 @@ gwy_data_field_area_psdf (<em class="parameter"><code><a class="link" href="GwyD
part of a data field.</p>
<div class="refsect3">
<a name="gwy-data-field-area-psdf.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -3527,7 +3907,7 @@ gwy_data_field_psdf (<em class="parameter"><code><a class="link" href="GwyDataFi
<p>Calculates one-dimensional power spectrum density function of a data field.</p>
<div class="refsect3">
<a name="gwy-data-field-psdf.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -3575,6 +3955,98 @@ nonpositive, data field width (height) is used.</p></td>
</div>
<hr>
<div class="refsect2">
+<a name="gwy-data-field-area-row-psdf"></a><h3>gwy_data_field_area_row_psdf ()</h3>
+<pre class="programlisting"><a class="link" href="GwyDataLine.html" title="GwyDataLine"><span class="returnvalue">GwyDataLine</span></a> *
+gwy_data_field_area_row_psdf (<em class="parameter"><code><a class="link" href="GwyDataField.html" title="GwyDataField"><span class="type">GwyDataField</span></a> *field</code></em>,
+ <em class="parameter"><code><a class="link" href="GwyDataField.html" title="GwyDataField"><span class="type">GwyDataField</span></a> *mask</code></em>,
+ <em class="parameter"><code><a class="link" href="libgwyprocess-gwyprocessenums.html#GwyMaskingType" title="enum GwyMaskingType"><span class="type">GwyMaskingType</span></a> masking</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> col</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> row</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> width</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> height</code></em>,
+ <em class="parameter"><code><a class="link" href="libgwyprocess-gwyprocessenums.html#GwyWindowingType" title="enum GwyWindowingType"><span class="type">GwyWindowingType</span></a> windowing</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> level</code></em>);</pre>
+<p>Calculates the row-wise power spectrum density function (PSDF) of a
+rectangular part of a field.</p>
+<p>The calculated PSDF has the natural number of points that follows from DFT,
+i.e. <em class="parameter"><code>width</code></em>
+/2+1.</p>
+<p>The reduction of the total energy by windowing is compensated by multiplying
+the PSDF to make its sum of squares equal to the input data sum of squares.</p>
+<p>Masking is performed by omitting all terms that contain excluded pixels.
+Since different rows contain different numbers of pixels, the resulting
+PSDF is calculated as a weighted sum where each row's weight is proportional
+to the number of contributing pixels. In other words, the weighting is
+fair: each contributing pixel has the same influence on the result.</p>
+<div class="refsect3">
+<a name="gwy-data-field-area-row-psdf.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>field</p></td>
+<td class="parameter_description"><p>A two-dimensional data field.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>col</p></td>
+<td class="parameter_description"><p>Upper-left column coordinate.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>row</p></td>
+<td class="parameter_description"><p>Upper-left row coordinate.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>width</p></td>
+<td class="parameter_description"><p>Area width (number of columns).</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>height</p></td>
+<td class="parameter_description"><p>Area height (number of rows).</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>mask</p></td>
+<td class="parameter_description"><p>Mask specifying which values to take into account/exclude, or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>masking</p></td>
+<td class="parameter_description"><p>Masking mode to use (has any effect only with non-<a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> <em class="parameter"><code>mask</code></em>
+).</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>windowing</p></td>
+<td class="parameter_description"><p>Windowing type to use.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>level</p></td>
+<td class="parameter_description"><p>The first polynomial degree to keep in the rows, lower degrees than
+<em class="parameter"><code>level</code></em>
+are subtracted. Note only values 0 (no levelling) and 1
+(subtract the mean value of each row) are available at present. For
+SPM data, you usually wish to pass 1.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gwy-data-field-area-row-psdf.returns"></a><h4>Returns</h4>
+<p> A new one-dimensional data line with the PSDF.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
<a name="gwy-data-field-area-rpsdf"></a><h3>gwy_data_field_area_rpsdf ()</h3>
<pre class="programlisting"><span class="returnvalue">void</span>
gwy_data_field_area_rpsdf (<em class="parameter"><code><a class="link" href="GwyDataField.html" title="GwyDataField"><span class="type">GwyDataField</span></a> *data_field</code></em>,
@@ -3590,7 +4062,7 @@ gwy_data_field_area_rpsdf (<em class="parameter"><code><a class="link" href="Gwy
part of a data field.</p>
<div class="refsect3">
<a name="gwy-data-field-area-rpsdf.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -3663,7 +4135,7 @@ gwy_data_field_rpsdf (<em class="parameter"><code><a class="link" href="GwyDataF
<p>Calculates radial power spectrum density function of a data field.</p>
<div class="refsect3">
<a name="gwy-data-field-rpsdf.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -3706,6 +4178,89 @@ nonpositive, data field width (height) is used.</p></td>
</div>
<hr>
<div class="refsect2">
+<a name="gwy-data-field-area-row-asg"></a><h3>gwy_data_field_area_row_asg ()</h3>
+<pre class="programlisting"><a class="link" href="GwyDataLine.html" title="GwyDataLine"><span class="returnvalue">GwyDataLine</span></a> *
+gwy_data_field_area_row_asg (<em class="parameter"><code><a class="link" href="GwyDataField.html" title="GwyDataField"><span class="type">GwyDataField</span></a> *field</code></em>,
+ <em class="parameter"><code><a class="link" href="GwyDataField.html" title="GwyDataField"><span class="type">GwyDataField</span></a> *mask</code></em>,
+ <em class="parameter"><code><a class="link" href="libgwyprocess-gwyprocessenums.html#GwyMaskingType" title="enum GwyMaskingType"><span class="type">GwyMaskingType</span></a> masking</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> col</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> row</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> width</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> height</code></em>,
+ <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a> level</code></em>);</pre>
+<p>Calculates the row-wise area scale graph (ASG) of a rectangular part of a
+field.</p>
+<p>The calculated ASG has the natural number of points, i.e. <em class="parameter"><code>width</code></em>
+-1.</p>
+<p>The ASG represents the apparent area excess (ratio of surface and projected
+area minus one) observed at given length scale. The quantity calculated by
+this function serves a similar purpose as ASME B46.1 area scale graph but
+is defined differently, based on the HHCF. See
+<a class="link" href="libgwyprocess-stats.html#gwy-data-field-area-row-hhcf" title="gwy_data_field_area_row_hhcf ()"><code class="function">gwy_data_field_area_row_hhcf()</code></a> for details of its calculation.</p>
+<div class="refsect3">
+<a name="gwy-data-field-area-row-asg.parameters"></a><h4>Parameters</h4>
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>field</p></td>
+<td class="parameter_description"><p>A two-dimensional data field.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>col</p></td>
+<td class="parameter_description"><p>Upper-left column coordinate.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>row</p></td>
+<td class="parameter_description"><p>Upper-left row coordinate.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>width</p></td>
+<td class="parameter_description"><p>Area width (number of columns).</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>height</p></td>
+<td class="parameter_description"><p>Area height (number of rows).</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>mask</p></td>
+<td class="parameter_description"><p>Mask specifying which values to take into account/exclude, or <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>masking</p></td>
+<td class="parameter_description"><p>Masking mode to use (has any effect only with non-<a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> <em class="parameter"><code>mask</code></em>
+).</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>level</p></td>
+<td class="parameter_description"><p>The first polynomial degree to keep in the rows, lower degrees than
+<em class="parameter"><code>level</code></em>
+are subtracted. Note only values 0 (no levelling) and 1
+(subtract the mean value of each row) are available at present.
+There is no difference for ASG.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="gwy-data-field-area-row-asg.returns"></a><h4>Returns</h4>
+<p> A new one-dimensional data line with the ASG.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
<a name="gwy-data-field-area-2dacf"></a><h3>gwy_data_field_area_2dacf ()</h3>
<pre class="programlisting"><span class="returnvalue">void</span>
gwy_data_field_area_2dacf (<em class="parameter"><code><a class="link" href="GwyDataField.html" title="GwyDataField"><span class="type">GwyDataField</span></a> *data_field</code></em>,
@@ -3728,7 +4283,7 @@ distances are calculated from smaller number of data points they become
increasingly bogus, therefore the default range is half of the size.</p>
<div class="refsect3">
<a name="gwy-data-field-area-2dacf.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -3798,7 +4353,7 @@ gwy_data_field_2dacf (<em class="parameter"><code><a class="link" href="GwyDataF
adjustable) in this function are set to their default values.</p>
<div class="refsect3">
<a name="gwy-data-field-2dacf.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -3835,7 +4390,7 @@ gwy_data_field_area_racf (<em class="parameter"><code><a class="link" href="GwyD
of a data field.</p>
<div class="refsect3">
<a name="gwy-data-field-area-racf.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -3894,7 +4449,7 @@ gwy_data_field_racf (<em class="parameter"><code><a class="link" href="GwyDataFi
<p>Calculates radially averaged autocorrelation function of a data field.</p>
<div class="refsect3">
<a name="gwy-data-field-racf.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -3941,7 +4496,7 @@ threshold value (,white pixels`) divided by the total number of samples
in the area. Is it's equivalent to 1-CDH.</p>
<div class="refsect3">
<a name="gwy-data-field-area-minkowski-volume.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -4000,7 +4555,7 @@ gwy_data_field_minkowski_volume (<em class="parameter"><code><a class="link" hre
<p>See <a class="link" href="libgwyprocess-stats.html#gwy-data-field-area-minkowski-volume" title="gwy_data_field_area_minkowski_volume ()"><code class="function">gwy_data_field_area_minkowski_volume()</code></a> for details.</p>
<div class="refsect3">
<a name="gwy-data-field-minkowski-volume.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -4048,7 +4603,7 @@ threshold value (the number of pixel sides where of neighouring pixels is
in the area.</p>
<div class="refsect3">
<a name="gwy-data-field-area-minkowski-boundary.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -4107,7 +4662,7 @@ gwy_data_field_minkowski_boundary (<em class="parameter"><code><a class="link" h
<p>See <a class="link" href="libgwyprocess-stats.html#gwy-data-field-area-minkowski-boundary" title="gwy_data_field_area_minkowski_boundary ()"><code class="function">gwy_data_field_area_minkowski_boundary()</code></a> for details.</p>
<div class="refsect3">
<a name="gwy-data-field-minkowski-boundary.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -4154,7 +4709,7 @@ pixels below threhsold (,black</code>) for each threshold value, divided by the
total number of samples in the area.</p>
<div class="refsect3">
<a name="gwy-data-field-area-minkowski-euler.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -4214,7 +4769,7 @@ a data field.</p>
<p>See <a class="link" href="libgwyprocess-stats.html#gwy-data-field-area-minkowski-euler" title="gwy_data_field_area_minkowski_euler ()"><code class="function">gwy_data_field_area_minkowski_euler()</code></a> for details.</p>
<div class="refsect3">
<a name="gwy-data-field-minkowski-euler.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -4252,7 +4807,7 @@ gwy_data_field_slope_distribution (<em class="parameter"><code><a class="link" h
<p>Computes angular slope distribution.</p>
<div class="refsect3">
<a name="gwy-data-field-slope-distribution.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -4293,7 +4848,7 @@ gwy_data_field_get_normal_coeffs (<em class="parameter"><code><a class="link" hr
<p>Computes average normal vector of a data field.</p>
<div class="refsect3">
<a name="gwy-data-field-get-normal-coeffs.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -4346,7 +4901,7 @@ gwy_data_field_area_get_normal_coeffs (<em class="parameter"><code><a class="lin
<p>Computes average normal vector of an area of a data field.</p>
<div class="refsect3">
<a name="gwy-data-field-area-get-normal-coeffs.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -4417,7 +4972,7 @@ gwy_data_field_area_get_inclination (<em class="parameter"><code><a class="link"
<p>Calculates the inclination of the image (polar and azimuth angle).</p>
<div class="refsect3">
<a name="gwy-data-field-area-get-inclination.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -4473,7 +5028,7 @@ gwy_data_field_get_inclination (<em class="parameter"><code><a class="link" href
<p>Calculates the inclination of the image (polar and azimuth angle).</p>
<div class="refsect3">
<a name="gwy-data-field-get-inclination.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -4516,7 +5071,7 @@ gwy_data_field_area_get_line_stats (<em class="parameter"><code><a class="link"
<p>Use <a class="link" href="libgwyprocess-stats.html#gwy-data-field-get-line-stats-mask" title="gwy_data_field_get_line_stats_mask ()"><code class="function">gwy_data_field_get_line_stats_mask()</code></a> for full masking type options.</p>
<div class="refsect3">
<a name="gwy-data-field-area-get-line-stats.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -4599,7 +5154,7 @@ gwy_data_field_get_line_stats_mask (<em class="parameter"><code><a class="link"
<p>Calculates a line quantity for each row or column in a data field area.</p>
<div class="refsect3">
<a name="gwy-data-field-get-line-stats-mask.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -4690,7 +5245,7 @@ gwy_data_field_get_line_stats (<em class="parameter"><code><a class="link" href=
<p>Calculates a line quantity for each row or column of a data field.</p>
<div class="refsect3">
<a name="gwy-data-field-get-line-stats.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -4733,7 +5288,7 @@ gwy_data_field_count_maxima (<em class="parameter"><code><a class="link" href="G
<p>See <a class="link" href="libgwyprocess-grains.html#gwy-data-field-mark-extrema" title="gwy_data_field_mark_extrema ()"><code class="function">gwy_data_field_mark_extrema()</code></a> for the definition of a regional maximum.</p>
<div class="refsect3">
<a name="gwy-data-field-count-maxima.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -4761,7 +5316,7 @@ gwy_data_field_count_minima (<em class="parameter"><code><a class="link" href="G
<p>See <a class="link" href="libgwyprocess-grains.html#gwy-data-field-mark-extrema" title="gwy_data_field_mark_extrema ()"><code class="function">gwy_data_field_mark_extrema()</code></a> for the definition of a regional minimum.</p>
<div class="refsect3">
<a name="gwy-data-field-count-minima.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -4803,7 +5358,7 @@ calculated for instance if either central or outer part of the disc is
excluded by masking.</p>
<div class="refsect3">
<a name="gwy-data-field-angular-average.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
diff --git a/devel-docs/libgwyprocess/html/libgwyprocess-tip.html b/devel-docs/libgwyprocess/html/libgwyprocess-tip.html
index 8b0e40c..37cec57 100644
--- a/devel-docs/libgwyprocess/html/libgwyprocess-tip.html
+++ b/devel-docs/libgwyprocess/html/libgwyprocess-tip.html
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>tip: Gwyddion Data Processing Library Reference Manual</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="up" href="index.html" title="Gwyddion Data Processing Library Reference Manual">
<link rel="prev" href="libgwyprocess-stats-uncertainty.html" title="stats uncertainty">
@@ -15,7 +15,8 @@
<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
<td width="100%" align="left" class="shortcuts">
<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
- <a href="#libgwyprocess-tip.description" class="shortcut">Description</a></span>
+ <a href="#libgwyprocess-tip.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span>
+ <a href="#libgwyprocess-tip.object-hierarchy" class="shortcut">Object Hierarchy</a></span>
</td>
<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
<td><img src="up-insensitive.png" width="16" height="16" border="0"></td>
@@ -33,7 +34,7 @@
</tr></table></div>
<div class="refsect1">
<a name="libgwyprocess-tip.functions"></a><h2>Functions</h2>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="functions_return">
<col class="functions_name">
@@ -64,14 +65,14 @@
</td>
</tr>
<tr>
-<td class="function_type">const <a class="link" href="libgwyprocess-tip.html#GwyTipModelPreset" title="struct GwyTipModelPreset"><span class="returnvalue">GwyTipModelPreset</span></a> *
+<td class="function_type">const <a class="link" href="libgwyprocess-tip.html#GwyTipModelPreset"><span class="returnvalue">GwyTipModelPreset</span></a> *
</td>
<td class="function_name">
<a class="link" href="libgwyprocess-tip.html#gwy-tip-model-get-preset" title="gwy_tip_model_get_preset ()">gwy_tip_model_get_preset</a> <span class="c_punctuation">()</span>
</td>
</tr>
<tr>
-<td class="function_type">const <a class="link" href="libgwyprocess-tip.html#GwyTipModelPreset" title="struct GwyTipModelPreset"><span class="returnvalue">GwyTipModelPreset</span></a> *
+<td class="function_type">const <a class="link" href="libgwyprocess-tip.html#GwyTipModelPreset"><span class="returnvalue">GwyTipModelPreset</span></a> *
</td>
<td class="function_name">
<a class="link" href="libgwyprocess-tip.html#gwy-tip-model-get-preset-by-name" title="gwy_tip_model_get_preset_by_name ()">gwy_tip_model_get_preset_by_name</a> <span class="c_punctuation">()</span>
@@ -173,18 +174,11 @@
</tbody>
</table></div>
</div>
-<div class="refsect1">
-<a name="libgwyprocess-tip.other"></a><h2>Types and Values</h2>
-<div class="informaltable"><table width="100%" border="0">
-<colgroup>
-<col width="150px" class="name">
-<col class="description">
-</colgroup>
-<tbody><tr>
-<td class="datatype_keyword">struct</td>
-<td class="function_name"><a class="link" href="libgwyprocess-tip.html#GwyTipModelPreset" title="struct GwyTipModelPreset">GwyTipModelPreset</a></td>
-</tr></tbody>
-</table></div>
+<a name="GwyTipModelPreset"></a><div class="refsect1">
+<a name="libgwyprocess-tip.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="screen"> <a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#gpointer">gpointer</a>
+ <span class="lineart">╰──</span> GwyTipModelPreset
+</pre>
</div>
<div class="refsect1">
<a name="libgwyprocess-tip.includes"></a><h2>Includes</h2>
@@ -232,12 +226,12 @@ gwy_tip_model_get_npresets (<em class="parameter"><code><span class="type">void<
<hr>
<div class="refsect2">
<a name="gwy-tip-model-get-preset"></a><h3>gwy_tip_model_get_preset ()</h3>
-<pre class="programlisting">const <a class="link" href="libgwyprocess-tip.html#GwyTipModelPreset" title="struct GwyTipModelPreset"><span class="returnvalue">GwyTipModelPreset</span></a> *
-gwy_tip_model_get_preset (<em class="parameter"><code><a href="http://developer.gnome.org/doc/API/2.0/gtk/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> preset_id</code></em>);</pre>
+<pre class="programlisting">const <a class="link" href="libgwyprocess-tip.html#GwyTipModelPreset"><span class="returnvalue">GwyTipModelPreset</span></a> *
+gwy_tip_model_get_preset (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> preset_id</code></em>);</pre>
<p>Get data related to tip preset.</p>
<div class="refsect3">
<a name="gwy-tip-model-get-preset.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -258,12 +252,12 @@ gwy_tip_model_get_preset (<em class="parameter"><code><a href="http://developer.
<hr>
<div class="refsect2">
<a name="gwy-tip-model-get-preset-by-name"></a><h3>gwy_tip_model_get_preset_by_name ()</h3>
-<pre class="programlisting">const <a class="link" href="libgwyprocess-tip.html#GwyTipModelPreset" title="struct GwyTipModelPreset"><span class="returnvalue">GwyTipModelPreset</span></a> *
+<pre class="programlisting">const <a class="link" href="libgwyprocess-tip.html#GwyTipModelPreset"><span class="returnvalue">GwyTipModelPreset</span></a> *
gwy_tip_model_get_preset_by_name (<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>);</pre>
<p>Get data related to preset with specified name.</p>
<div class="refsect3">
<a name="gwy-tip-model-get-preset-by-name.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -285,11 +279,11 @@ gwy_tip_model_get_preset_by_name (<em class="parameter"><code>const <a href="/us
<div class="refsect2">
<a name="gwy-tip-model-get-preset-id"></a><h3>gwy_tip_model_get_preset_id ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>
-gwy_tip_model_get_preset_id (<em class="parameter"><code>const <a class="link" href="libgwyprocess-tip.html#GwyTipModelPreset" title="struct GwyTipModelPreset"><span class="type">GwyTipModelPreset</span></a> *preset</code></em>);</pre>
+gwy_tip_model_get_preset_id (<em class="parameter"><code>const <a class="link" href="libgwyprocess-tip.html#GwyTipModelPreset"><span class="type">GwyTipModelPreset</span></a> *preset</code></em>);</pre>
<p>Get preset identifier within all presets.</p>
<div class="refsect3">
<a name="gwy-tip-model-get-preset-id.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -311,11 +305,11 @@ gwy_tip_model_get_preset_id (<em class="parameter"><code>const <a class="link" h
<div class="refsect2">
<a name="gwy-tip-model-get-preset-tip-name"></a><h3>gwy_tip_model_get_preset_tip_name ()</h3>
<pre class="programlisting">const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
-gwy_tip_model_get_preset_tip_name (<em class="parameter"><code>const <a class="link" href="libgwyprocess-tip.html#GwyTipModelPreset" title="struct GwyTipModelPreset"><span class="type">GwyTipModelPreset</span></a> *preset</code></em>);</pre>
+gwy_tip_model_get_preset_tip_name (<em class="parameter"><code>const <a class="link" href="libgwyprocess-tip.html#GwyTipModelPreset"><span class="type">GwyTipModelPreset</span></a> *preset</code></em>);</pre>
<p>Get name of the preset (e. g. "contact").</p>
<div class="refsect3">
<a name="gwy-tip-model-get-preset-tip-name.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -337,11 +331,11 @@ gwy_tip_model_get_preset_tip_name (<em class="parameter"><code>const <a class="l
<div class="refsect2">
<a name="gwy-tip-model-get-preset-group-name"></a><h3>gwy_tip_model_get_preset_group_name ()</h3>
<pre class="programlisting">const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
-gwy_tip_model_get_preset_group_name (<em class="parameter"><code>const <a class="link" href="libgwyprocess-tip.html#GwyTipModelPreset" title="struct GwyTipModelPreset"><span class="type">GwyTipModelPreset</span></a> *preset</code></em>);</pre>
+gwy_tip_model_get_preset_group_name (<em class="parameter"><code>const <a class="link" href="libgwyprocess-tip.html#GwyTipModelPreset"><span class="type">GwyTipModelPreset</span></a> *preset</code></em>);</pre>
<p>Get group name of preset (e. g. "analytical".)</p>
<div class="refsect3">
<a name="gwy-tip-model-get-preset-group-name.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -363,7 +357,7 @@ gwy_tip_model_get_preset_group_name (<em class="parameter"><code>const <a class=
<div class="refsect2">
<a name="gwy-tip-model-get-preset-nparams"></a><h3>gwy_tip_model_get_preset_nparams ()</h3>
<pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>
-gwy_tip_model_get_preset_nparams (<em class="parameter"><code>const <a class="link" href="libgwyprocess-tip.html#GwyTipModelPreset" title="struct GwyTipModelPreset"><span class="type">GwyTipModelPreset</span></a> *preset</code></em>);</pre>
+gwy_tip_model_get_preset_nparams (<em class="parameter"><code>const <a class="link" href="libgwyprocess-tip.html#GwyTipModelPreset"><span class="type">GwyTipModelPreset</span></a> *preset</code></em>);</pre>
<p>Get number of tip preset parameters.</p>
<div class="warning">In versions prior to 2.47 the function alwas returned zero and thus
was useless. You had to know the what parameters each model had and always
@@ -374,7 +368,7 @@ of parameters used in functions such as <a class="link" href="libgwyprocess-tip.
parameters the old functions take. They behave exactly as before.</div>
<div class="refsect3">
<a name="gwy-tip-model-get-preset-nparams.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -396,7 +390,7 @@ parameters the old functions take. They behave exactly as before.</div>
<div class="refsect2">
<a name="gwy-tip-model-get-preset-params"></a><h3>gwy_tip_model_get_preset_params ()</h3>
<pre class="programlisting">const <a class="link" href="libgwyprocess-gwyprocessenums.html#GwyTipParamType" title="enum GwyTipParamType"><span class="returnvalue">GwyTipParamType</span></a> *
-gwy_tip_model_get_preset_params (<em class="parameter"><code>const <a class="link" href="libgwyprocess-tip.html#GwyTipModelPreset" title="struct GwyTipModelPreset"><span class="type">GwyTipModelPreset</span></a> *preset</code></em>);</pre>
+gwy_tip_model_get_preset_params (<em class="parameter"><code>const <a class="link" href="libgwyprocess-tip.html#GwyTipModelPreset"><span class="type">GwyTipModelPreset</span></a> *preset</code></em>);</pre>
<p>Gets the list of parameters of a tip model preset.</p>
<p>All tip models have parameters from a predefined set given by the
<a class="link" href="libgwyprocess-gwyprocessenums.html#GwyTipParamType" title="enum GwyTipParamType"><span class="type">GwyTipParamType</span></a> enum.</p>
@@ -405,7 +399,7 @@ you may want to avoid tip models that have parameters with an unknown
(higher than known) id.</p>
<div class="refsect3">
<a name="gwy-tip-model-get-preset-params.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -429,7 +423,7 @@ is owned by the library and must not be modified nor freed.</p>
<div class="refsect2">
<a name="gwy-tip-model-preset-create"></a><h3>gwy_tip_model_preset_create ()</h3>
<pre class="programlisting"><span class="returnvalue">void</span>
-gwy_tip_model_preset_create (<em class="parameter"><code>const <a class="link" href="libgwyprocess-tip.html#GwyTipModelPreset" title="struct GwyTipModelPreset"><span class="type">GwyTipModelPreset</span></a> *preset</code></em>,
+gwy_tip_model_preset_create (<em class="parameter"><code>const <a class="link" href="libgwyprocess-tip.html#GwyTipModelPreset"><span class="type">GwyTipModelPreset</span></a> *preset</code></em>,
<em class="parameter"><code><a class="link" href="GwyDataField.html" title="GwyDataField"><span class="type">GwyDataField</span></a> *tip</code></em>,
<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> *params</code></em>);</pre>
<p>Fills a data field with a preset tip model.</p>
@@ -444,7 +438,7 @@ And only those parameters are passed in <em class="parameter"><code>params</code
.</p>
<div class="refsect3">
<a name="gwy-tip-model-preset-create.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -476,7 +470,7 @@ And only those parameters are passed in <em class="parameter"><code>params</code
<a name="gwy-tip-model-preset-create-for-zrange"></a><h3>gwy_tip_model_preset_create_for_zrange ()</h3>
<pre class="programlisting"><span class="returnvalue">void</span>
gwy_tip_model_preset_create_for_zrange
- (<em class="parameter"><code>const <a class="link" href="libgwyprocess-tip.html#GwyTipModelPreset" title="struct GwyTipModelPreset"><span class="type">GwyTipModelPreset</span></a> *preset</code></em>,
+ (<em class="parameter"><code>const <a class="link" href="libgwyprocess-tip.html#GwyTipModelPreset"><span class="type">GwyTipModelPreset</span></a> *preset</code></em>,
<em class="parameter"><code><a class="link" href="GwyDataField.html" title="GwyDataField"><span class="type">GwyDataField</span></a> *tip</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a> zrange</code></em>,
<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> square</code></em>,
@@ -502,7 +496,7 @@ And only those parameters are passed in <em class="parameter"><code>params</code
.</p>
<div class="refsect3">
<a name="gwy-tip-model-preset-create-for-zrange.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -558,7 +552,7 @@ equivalent to morphological dilation operation.</p>
undefined.</p>
<div class="refsect3">
<a name="gwy-tip-dilation.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -616,7 +610,7 @@ Villarrubia, which is equivalent to morphological erosion operation.</p>
undefined.</p>
<div class="refsect3">
<a name="gwy-tip-erosion.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -674,7 +668,7 @@ can be used as a mask of points where tip did not directly touch the
surface.</p>
<div class="refsect3">
<a name="gwy-tip-cmap.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -737,7 +731,7 @@ of surface range can be good. Otherwise we recommend to start with zero
threshold and increase it slowly to observe changes and choose right value.</p>
<div class="refsect3">
<a name="gwy-tip-estimate-partial.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -808,7 +802,7 @@ of surface range can be good. Otherwise we recommend to start with zero
threshold and increase it slowly to observe changes and choose right value.</p>
<div class="refsect3">
<a name="gwy-tip-estimate-full.parameters"></a><h4>Parameters</h4>
-<div class="informaltable"><table width="100%" border="0">
+<div class="informaltable"><table class="informaltable" width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
<col class="parameters_description">
@@ -861,18 +855,6 @@ threshold and increase it slowly to observe changes and choose right value.</p>
</div>
<div class="refsect1">
<a name="libgwyprocess-tip.other_details"></a><h2>Types and Values</h2>
-<div class="refsect2">
-<a name="GwyTipModelPreset"></a><h3>struct GwyTipModelPreset</h3>
-<pre class="programlisting">struct GwyTipModelPreset {
- const gchar *tip_name;
- const gchar *group_name;
- GwyTipModelFunc func;
- GwyTipGuessFunc guess;
- gint nparams;
-};
-</pre>
-<div class="warning"><p><code class="literal">GwyTipModelPreset</code> is deprecated and should not be used in newly-written code.</p></div>
-</div>
</div>
</div>
<div class="footer">
diff --git a/devel-docs/libgwyprocess/html/libgwyprocess.devhelp2 b/devel-docs/libgwyprocess/html/libgwyprocess.devhelp2
index 6fd547e..a2e6a69 100644
--- a/devel-docs/libgwyprocess/html/libgwyprocess.devhelp2
+++ b/devel-docs/libgwyprocess/html/libgwyprocess.devhelp2
@@ -66,6 +66,8 @@
<sub name="Index of new symbols in 2.45" link="api-index-2-45.html"/>
<sub name="Index of new symbols in 2.46" link="api-index-2-46.html"/>
<sub name="Index of new symbols in 2.47" link="api-index-2-47.html"/>
+ <sub name="Index of new symbols in 2.48" link="api-index-2-48.html"/>
+ <sub name="Index of new symbols in 2.49" link="api-index-2-49.html"/>
</chapters>
<functions>
<keyword type="macro" name="gwy_data_line_duplicate()" link="GwyDataLine.html#gwy-data-line-duplicate"/>
@@ -90,6 +92,7 @@
<keyword type="function" name="gwy_data_line_set_si_unit_y ()" link="GwyDataLine.html#gwy-data-line-set-si-unit-y"/>
<keyword type="function" name="gwy_data_line_get_value_format_x ()" link="GwyDataLine.html#gwy-data-line-get-value-format-x"/>
<keyword type="function" name="gwy_data_line_get_value_format_y ()" link="GwyDataLine.html#gwy-data-line-get-value-format-y"/>
+ <keyword type="function" name="gwy_data_line_copy_units ()" link="GwyDataLine.html#gwy-data-line-copy-units" since="2.49"/>
<keyword type="function" name="gwy_data_line_itor ()" link="GwyDataLine.html#gwy-data-line-itor"/>
<keyword type="function" name="gwy_data_line_rtoi ()" link="GwyDataLine.html#gwy-data-line-rtoi"/>
<keyword type="function" name="gwy_data_line_get_val ()" link="GwyDataLine.html#gwy-data-line-get-val"/>
@@ -152,6 +155,7 @@
<keyword type="function" name="gwy_data_field_set_si_unit_z ()" link="GwyDataField.html#gwy-data-field-set-si-unit-z"/>
<keyword type="function" name="gwy_data_field_get_value_format_xy ()" link="GwyDataField.html#gwy-data-field-get-value-format-xy"/>
<keyword type="function" name="gwy_data_field_get_value_format_z ()" link="GwyDataField.html#gwy-data-field-get-value-format-z"/>
+ <keyword type="function" name="gwy_data_field_copy_units ()" link="GwyDataField.html#gwy-data-field-copy-units" since="2.49"/>
<keyword type="function" name="gwy_data_field_copy_units_to_data_line ()" link="GwyDataField.html#gwy-data-field-copy-units-to-data-line"/>
<keyword type="function" name="gwy_data_line_copy_units_to_data_field ()" link="GwyDataField.html#gwy-data-line-copy-units-to-data-field"/>
<keyword type="function" name="gwy_data_field_itor ()" link="GwyDataField.html#gwy-data-field-itor"/>
@@ -166,6 +170,8 @@
<keyword type="function" name="gwy_data_field_new_rotated ()" link="GwyDataField.html#gwy-data-field-new-rotated" since="2.46"/>
<keyword type="function" name="gwy_data_field_new_rotated_90 ()" link="GwyDataField.html#gwy-data-field-new-rotated-90" since="2.46"/>
<keyword type="function" name="gwy_data_field_invert ()" link="GwyDataField.html#gwy-data-field-invert"/>
+ <keyword type="function" name="gwy_data_field_flip_xy ()" link="GwyDataField.html#gwy-data-field-flip-xy" since="2.49"/>
+ <keyword type="function" name="gwy_data_field_area_flip_xy ()" link="GwyDataField.html#gwy-data-field-area-flip-xy" since="2.49"/>
<keyword type="function" name="gwy_data_field_fill ()" link="GwyDataField.html#gwy-data-field-fill"/>
<keyword type="function" name="gwy_data_field_clear ()" link="GwyDataField.html#gwy-data-field-clear"/>
<keyword type="function" name="gwy_data_field_multiply ()" link="GwyDataField.html#gwy-data-field-multiply"/>
@@ -176,6 +182,7 @@
<keyword type="function" name="gwy_data_field_area_multiply ()" link="GwyDataField.html#gwy-data-field-area-multiply"/>
<keyword type="function" name="gwy_data_field_area_add ()" link="GwyDataField.html#gwy-data-field-area-add"/>
<keyword type="function" name="gwy_data_field_get_profile ()" link="GwyDataField.html#gwy-data-field-get-profile"/>
+ <keyword type="function" name="gwy_data_field_get_profile_mask ()" link="GwyDataField.html#gwy-data-field-get-profile-mask" since="2.49"/>
<keyword type="function" name="gwy_data_field_get_row ()" link="GwyDataField.html#gwy-data-field-get-row"/>
<keyword type="function" name="gwy_data_field_get_column ()" link="GwyDataField.html#gwy-data-field-get-column"/>
<keyword type="function" name="gwy_data_field_set_row ()" link="GwyDataField.html#gwy-data-field-set-row"/>
@@ -253,6 +260,7 @@
<keyword type="function" name="gwy_brick_set_si_unit_w ()" link="GwyBrick.html#gwy-brick-set-si-unit-w" since="2.31"/>
<keyword type="function" name="gwy_brick_get_min ()" link="GwyBrick.html#gwy-brick-get-min" since="2.31"/>
<keyword type="function" name="gwy_brick_get_max ()" link="GwyBrick.html#gwy-brick-get-max" since="2.31"/>
+ <keyword type="function" name="gwy_brick_copy_units ()" link="GwyBrick.html#gwy-brick-copy-units" since="2.49"/>
<keyword type="function" name="gwy_brick_get_value_format_x ()" link="GwyBrick.html#gwy-brick-get-value-format-x" since="2.31"/>
<keyword type="function" name="gwy_brick_get_value_format_y ()" link="GwyBrick.html#gwy-brick-get-value-format-y" since="2.31"/>
<keyword type="function" name="gwy_brick_get_value_format_z ()" link="GwyBrick.html#gwy-brick-get-value-format-z" since="2.31"/>
@@ -312,6 +320,7 @@
<keyword type="function" name="gwy_surface_set_si_unit_z ()" link="GwySurface.html#gwy-surface-set-si-unit-z" since="2.45"/>
<keyword type="function" name="gwy_surface_get_value_format_xy ()" link="GwySurface.html#gwy-surface-get-value-format-xy" since="2.45"/>
<keyword type="function" name="gwy_surface_get_value_format_z ()" link="GwySurface.html#gwy-surface-get-value-format-z" since="2.45"/>
+ <keyword type="function" name="gwy_surface_copy_units ()" link="GwySurface.html#gwy-surface-copy-units" since="2.49"/>
<keyword type="function" name="gwy_data_field_copy_units_to_surface ()" link="GwySurface.html#gwy-data-field-copy-units-to-surface" since="2.46"/>
<keyword type="function" name="gwy_surface_copy_units_to_data_field ()" link="GwySurface.html#gwy-surface-copy-units-to-data-field" since="2.46"/>
<keyword type="function" name="gwy_surface_get ()" link="GwySurface.html#gwy-surface-get" since="2.45"/>
@@ -322,6 +331,7 @@
<keyword type="function" name="gwy_surface_get_data_full ()" link="GwySurface.html#gwy-surface-get-data-full" since="2.45"/>
<keyword type="function" name="gwy_surface_set_data_full ()" link="GwySurface.html#gwy-surface-set-data-full" since="2.45"/>
<keyword type="function" name="gwy_surface_xy_is_compatible ()" link="GwySurface.html#gwy-surface-xy-is-compatible" since="2.45"/>
+ <keyword type="function" name="gwy_surface_reduce_points ()" link="GwySurface.html#gwy-surface-reduce-points" since="2.48"/>
<keyword type="struct" name="struct GwySurface" link="GwySurface.html#GwySurface-struct"/>
<keyword type="struct" name="struct GwySurfaceClass" link="GwySurface.html#GwySurfaceClass" since="2.45"/>
<keyword type="signal" name="The “data-changed” signal" link="GwySurface.html#GwySurface-data-changed"/>
@@ -393,6 +403,9 @@
<keyword type="function" name="gwy_data_field_distort ()" link="libgwyprocess-correct.html#gwy-data-field-distort" since="2.5"/>
<keyword type="function" name="gwy_data_field_sample_distorted ()" link="libgwyprocess-correct.html#gwy-data-field-sample-distorted" since="2.45"/>
<keyword type="function" name="gwy_data_field_affine ()" link="libgwyprocess-correct.html#gwy-data-field-affine" since="2.34"/>
+ <keyword type="function" name="gwy_data_field_affine_prepare ()" link="libgwyprocess-correct.html#gwy-data-field-affine-prepare" since="2.49"/>
+ <keyword type="function" name="gwy_data_field_measure_lattice_acf ()" link="libgwyprocess-correct.html#gwy-data-field-measure-lattice-acf" since="2.49"/>
+ <keyword type="function" name="gwy_data_field_measure_lattice_psdf ()" link="libgwyprocess-correct.html#gwy-data-field-measure-lattice-psdf" since="2.49"/>
<keyword type="function" name="gwy_data_line_correct_laplace ()" link="libgwyprocess-correct.html#gwy-data-line-correct-laplace" since="2.45"/>
<keyword type="function" name="gwy_data_field_mark_scars ()" link="libgwyprocess-correct.html#gwy-data-field-mark-scars" since="2.46"/>
<keyword type="function" name="gwy_data_field_unrotate_find_corrections ()" link="libgwyprocess-correct.html#gwy-data-field-unrotate-find-corrections"/>
@@ -423,6 +436,7 @@
<keyword type="function" name="gwy_data_field_circular_area_extract_with_pos ()" link="libgwyprocess-elliptic.html#gwy-data-field-circular-area-extract-with-pos" since="2.2"/>
<keyword type="function" name="gwy_data_field_circular_area_unextract ()" link="libgwyprocess-elliptic.html#gwy-data-field-circular-area-unextract"/>
<keyword type="function" name="gwy_data_field_get_circular_area_size ()" link="libgwyprocess-elliptic.html#gwy-data-field-get-circular-area-size"/>
+ <keyword type="function" name="gwy_data_field_local_maximum ()" link="libgwyprocess-elliptic.html#gwy-data-field-local-maximum" since="2.49"/>
<keyword type="function" name="gwy_data_field_normalize ()" link="libgwyprocess-filters.html#gwy-data-field-normalize"/>
<keyword type="function" name="gwy_data_field_renormalize ()" link="libgwyprocess-filters.html#gwy-data-field-renormalize"/>
<keyword type="function" name="gwy_data_field_area_renormalize ()" link="libgwyprocess-filters.html#gwy-data-field-area-renormalize" since="2.45"/>
@@ -433,8 +447,10 @@
<keyword type="function" name="gwy_data_field_area_gather ()" link="libgwyprocess-filters.html#gwy-data-field-area-gather"/>
<keyword type="function" name="gwy_data_field_convolve ()" link="libgwyprocess-filters.html#gwy-data-field-convolve"/>
<keyword type="function" name="gwy_data_field_area_convolve ()" link="libgwyprocess-filters.html#gwy-data-field-area-convolve"/>
+ <keyword type="function" name="gwy_data_field_area_ext_convolve ()" link="libgwyprocess-filters.html#gwy-data-field-area-ext-convolve" since="2.49"/>
<keyword type="function" name="gwy_data_field_convolve_1d ()" link="libgwyprocess-filters.html#gwy-data-field-convolve-1d" since="2.4"/>
<keyword type="function" name="gwy_data_field_area_convolve_1d ()" link="libgwyprocess-filters.html#gwy-data-field-area-convolve-1d" since="2.4"/>
+ <keyword type="function" name="gwy_data_field_area_ext_row_convolve ()" link="libgwyprocess-filters.html#gwy-data-field-area-ext-row-convolve" since="2.49"/>
<keyword type="function" name="gwy_data_field_filter_median ()" link="libgwyprocess-filters.html#gwy-data-field-filter-median"/>
<keyword type="function" name="gwy_data_field_area_filter_median ()" link="libgwyprocess-filters.html#gwy-data-field-area-filter-median"/>
<keyword type="function" name="gwy_data_field_filter_mean ()" link="libgwyprocess-filters.html#gwy-data-field-filter-mean"/>
@@ -512,6 +528,7 @@
<keyword type="function" name="gwy_data_field_grain_simple_dist_trans ()" link="libgwyprocess-grains.html#gwy-data-field-grain-simple-dist-trans" since="2.41"/>
<keyword type="function" name="gwy_data_field_grains_shrink ()" link="libgwyprocess-grains.html#gwy-data-field-grains-shrink" since="2.43"/>
<keyword type="function" name="gwy_data_field_grains_grow ()" link="libgwyprocess-grains.html#gwy-data-field-grains-grow" since="2.43"/>
+ <keyword type="function" name="gwy_data_field_grains_thin ()" link="libgwyprocess-grains.html#gwy-data-field-grains-thin" since="2.48"/>
<keyword type="function" name="gwy_data_field_fill_voids ()" link="libgwyprocess-grains.html#gwy-data-field-fill-voids" since="2.37"/>
<keyword type="function" name="gwy_data_field_waterpour ()" link="libgwyprocess-grains.html#gwy-data-field-waterpour" since="2.37"/>
<keyword type="function" name="gwy_data_field_mark_extrema ()" link="libgwyprocess-grains.html#gwy-data-field-mark-extrema" since="2.37"/>
@@ -602,6 +619,10 @@
<keyword type="function" name="gwy_data_line_get_max ()" link="libgwyprocess-linestats.html#gwy-data-line-get-max"/>
<keyword type="function" name="gwy_data_line_get_min ()" link="libgwyprocess-linestats.html#gwy-data-line-get-min"/>
<keyword type="function" name="gwy_data_line_get_min_max ()" link="libgwyprocess-linestats.html#gwy-data-line-get-min-max"/>
+ <keyword type="function" name="gwy_data_line_min_pos_i ()" link="libgwyprocess-linestats.html#gwy-data-line-min-pos-i"/>
+ <keyword type="function" name="gwy_data_line_max_pos_i ()" link="libgwyprocess-linestats.html#gwy-data-line-max-pos-i"/>
+ <keyword type="function" name="gwy_data_line_min_pos_r ()" link="libgwyprocess-linestats.html#gwy-data-line-min-pos-r"/>
+ <keyword type="function" name="gwy_data_line_max_pos_r ()" link="libgwyprocess-linestats.html#gwy-data-line-max-pos-r"/>
<keyword type="function" name="gwy_data_line_get_avg ()" link="libgwyprocess-linestats.html#gwy-data-line-get-avg"/>
<keyword type="function" name="gwy_data_line_get_rms ()" link="libgwyprocess-linestats.html#gwy-data-line-get-rms"/>
<keyword type="function" name="gwy_data_line_get_tan_beta0 ()" link="libgwyprocess-linestats.html#gwy-data-line-get-tan-beta0" since="2.2"/>
@@ -671,11 +692,13 @@
<keyword type="function" name="gwy_shape_fit_preset_calculate_xyz ()" link="GwyShapeFitPreset.html#gwy-shape-fit-preset-calculate-xyz" since="2.47"/>
<keyword type="function" name="gwy_shape_fit_preset_create_fitter ()" link="GwyShapeFitPreset.html#gwy-shape-fit-preset-create-fitter" since="2.47"/>
<keyword type="function" name="gwy_shape_fit_preset_fit ()" link="GwyShapeFitPreset.html#gwy-shape-fit-preset-fit" since="2.47"/>
+ <keyword type="function" name="gwy_shape_fit_preset_quick_fit ()" link="GwyShapeFitPreset.html#gwy-shape-fit-preset-quick-fit" since="2.48"/>
<keyword type="function" name="gwy_shape_fit_presets ()" link="GwyShapeFitPreset.html#gwy-shape-fit-presets" since="2.47"/>
<keyword type="struct" name="struct GwyShapeFitPreset" link="GwyShapeFitPreset.html#GwyShapeFitPreset-struct"/>
<keyword type="struct" name="struct GwyShapeFitPresetClass" link="GwyShapeFitPreset.html#GwyShapeFitPresetClass"/>
<keyword type="function" name="gwy_spline_new ()" link="libgwyprocess-GwySpline.html#gwy-spline-new" since="2.45"/>
<keyword type="function" name="gwy_spline_free ()" link="libgwyprocess-GwySpline.html#gwy-spline-free" since="2.45"/>
+ <keyword type="function" name="gwy_spline_copy ()" link="libgwyprocess-GwySpline.html#gwy-spline-copy" since="2.49"/>
<keyword type="function" name="gwy_spline_new_from_points ()" link="libgwyprocess-GwySpline.html#gwy-spline-new-from-points" since="2.45"/>
<keyword type="function" name="gwy_spline_get_npoints ()" link="libgwyprocess-GwySpline.html#gwy-spline-get-npoints" since="2.45"/>
<keyword type="function" name="gwy_spline_get_points ()" link="libgwyprocess-GwySpline.html#gwy-spline-get-points" since="2.45"/>
@@ -688,7 +711,6 @@
<keyword type="function" name="gwy_spline_length ()" link="libgwyprocess-GwySpline.html#gwy-spline-length" since="2.45"/>
<keyword type="function" name="gwy_spline_sample_naturally ()" link="libgwyprocess-GwySpline.html#gwy-spline-sample-naturally" since="2.45"/>
<keyword type="function" name="gwy_spline_sample_uniformly ()" link="libgwyprocess-GwySpline.html#gwy-spline-sample-uniformly" since="2.45"/>
- <keyword type="struct" name="GwySpline" link="libgwyprocess-GwySpline.html#GwySpline"/>
<keyword type="function" name="gwy_data_field_get_max ()" link="libgwyprocess-stats.html#gwy-data-field-get-max"/>
<keyword type="function" name="gwy_data_field_get_min ()" link="libgwyprocess-stats.html#gwy-data-field-get-min"/>
<keyword type="function" name="gwy_data_field_get_min_max ()" link="libgwyprocess-stats.html#gwy-data-field-get-min-max"/>
@@ -730,17 +752,23 @@
<keyword type="function" name="gwy_data_field_area_cdh ()" link="libgwyprocess-stats.html#gwy-data-field-area-cdh"/>
<keyword type="function" name="gwy_data_field_cdh ()" link="libgwyprocess-stats.html#gwy-data-field-cdh"/>
<keyword type="function" name="gwy_data_field_area_da ()" link="libgwyprocess-stats.html#gwy-data-field-area-da"/>
+ <keyword type="function" name="gwy_data_field_area_da_mask ()" link="libgwyprocess-stats.html#gwy-data-field-area-da-mask" since="2.49"/>
<keyword type="function" name="gwy_data_field_da ()" link="libgwyprocess-stats.html#gwy-data-field-da"/>
<keyword type="function" name="gwy_data_field_area_cda ()" link="libgwyprocess-stats.html#gwy-data-field-area-cda"/>
+ <keyword type="function" name="gwy_data_field_area_cda_mask ()" link="libgwyprocess-stats.html#gwy-data-field-area-cda-mask" since="2.49"/>
<keyword type="function" name="gwy_data_field_cda ()" link="libgwyprocess-stats.html#gwy-data-field-cda"/>
<keyword type="function" name="gwy_data_field_area_acf ()" link="libgwyprocess-stats.html#gwy-data-field-area-acf"/>
<keyword type="function" name="gwy_data_field_acf ()" link="libgwyprocess-stats.html#gwy-data-field-acf"/>
+ <keyword type="function" name="gwy_data_field_area_row_acf ()" link="libgwyprocess-stats.html#gwy-data-field-area-row-acf"/>
<keyword type="function" name="gwy_data_field_area_hhcf ()" link="libgwyprocess-stats.html#gwy-data-field-area-hhcf"/>
<keyword type="function" name="gwy_data_field_hhcf ()" link="libgwyprocess-stats.html#gwy-data-field-hhcf"/>
+ <keyword type="function" name="gwy_data_field_area_row_hhcf ()" link="libgwyprocess-stats.html#gwy-data-field-area-row-hhcf"/>
<keyword type="function" name="gwy_data_field_area_psdf ()" link="libgwyprocess-stats.html#gwy-data-field-area-psdf"/>
<keyword type="function" name="gwy_data_field_psdf ()" link="libgwyprocess-stats.html#gwy-data-field-psdf"/>
+ <keyword type="function" name="gwy_data_field_area_row_psdf ()" link="libgwyprocess-stats.html#gwy-data-field-area-row-psdf"/>
<keyword type="function" name="gwy_data_field_area_rpsdf ()" link="libgwyprocess-stats.html#gwy-data-field-area-rpsdf" since="2.7"/>
<keyword type="function" name="gwy_data_field_rpsdf ()" link="libgwyprocess-stats.html#gwy-data-field-rpsdf" since="2.7"/>
+ <keyword type="function" name="gwy_data_field_area_row_asg ()" link="libgwyprocess-stats.html#gwy-data-field-area-row-asg"/>
<keyword type="function" name="gwy_data_field_area_2dacf ()" link="libgwyprocess-stats.html#gwy-data-field-area-2dacf" since="2.7"/>
<keyword type="function" name="gwy_data_field_2dacf ()" link="libgwyprocess-stats.html#gwy-data-field-2dacf" since="2.7"/>
<keyword type="function" name="gwy_data_field_area_racf ()" link="libgwyprocess-stats.html#gwy-data-field-area-racf" since="2.22"/>
@@ -819,7 +847,6 @@
<keyword type="function" name="gwy_tip_cmap ()" link="libgwyprocess-tip.html#gwy-tip-cmap"/>
<keyword type="function" name="gwy_tip_estimate_partial ()" link="libgwyprocess-tip.html#gwy-tip-estimate-partial"/>
<keyword type="function" name="gwy_tip_estimate_full ()" link="libgwyprocess-tip.html#gwy-tip-estimate-full"/>
- <keyword type="struct" name="struct GwyTipModelPreset" link="libgwyprocess-tip.html#GwyTipModelPreset" deprecated=""/>
<keyword type="function" name="gwy_triangulation_new ()" link="GwyTriangulation.html#gwy-triangulation-new" since="2.18"/>
<keyword type="function" name="gwy_triangulation_triangulate ()" link="GwyTriangulation.html#gwy-triangulation-triangulate" since="2.18"/>
<keyword type="function" name="gwy_triangulation_triangulate_iterative ()" link="GwyTriangulation.html#gwy-triangulation-triangulate-iterative" since="2.44"/>
@@ -846,6 +873,8 @@
<keyword type="function" name="gwy_windowing_type_get_enum ()" link="libgwyprocess-gwyprocessenums.html#gwy-windowing-type-get-enum"/>
<keyword type="function" name="gwy_correlation_type_get_enum ()" link="libgwyprocess-gwyprocessenums.html#gwy-correlation-type-get-enum"/>
<keyword type="function" name="gwy_distance_transform_type_get_enum ()" link="libgwyprocess-gwyprocessenums.html#gwy-distance-transform-type-get-enum" since="2.43"/>
+ <keyword type="function" name="gwy_computation_state_get_state ()" link="libgwyprocess-gwyprocessenums.html#gwy-computation-state-get-state" since="2.49"/>
+ <keyword type="function" name="gwy_computation_state_get_fraction ()" link="libgwyprocess-gwyprocessenums.html#gwy-computation-state-get-fraction" since="2.49"/>
<keyword type="enum" name="enum GwyMergeType" link="libgwyprocess-gwyprocessenums.html#GwyMergeType"/>
<keyword type="enum" name="enum GwyMaskingType" link="libgwyprocess-gwyprocessenums.html#GwyMaskingType" since="2.12"/>
<keyword type="enum" name="enum GwyWatershedStateType" link="libgwyprocess-gwyprocessenums.html#GwyWatershedStateType"/>
@@ -870,7 +899,7 @@
<keyword type="enum" name="enum GwyDistanceTransformType" link="libgwyprocess-gwyprocessenums.html#GwyDistanceTransformType" since="2.41"/>
<keyword type="enum" name="enum GwyMinMaxFilterType" link="libgwyprocess-gwyprocessenums.html#GwyMinMaxFilterType" since="2.43"/>
<keyword type="enum" name="enum GwyRotateResizeType" link="libgwyprocess-gwyprocessenums.html#GwyRotateResizeType" since="2.46"/>
- <keyword type="struct" name="GwyComputationState" link="libgwyprocess-gwyprocessenums.html#GwyComputationState"/>
+ <keyword type="enum" name="enum GwyAffineScalingType" link="libgwyprocess-gwyprocessenums.html#GwyAffineScalingType" since="2.49"/>
<keyword type="constant" name="GWY_GRAIN_VALUE_GROUP_ID" link="GwyGrainValue.html#GWY-GRAIN-VALUE-GROUP-ID:CAPS"/>
<keyword type="constant" name="GWY_GRAIN_VALUE_GROUP_POSITION" link="GwyGrainValue.html#GWY-GRAIN-VALUE-GROUP-POSITION:CAPS"/>
<keyword type="constant" name="GWY_GRAIN_VALUE_GROUP_VALUE" link="GwyGrainValue.html#GWY-GRAIN-VALUE-GROUP-VALUE:CAPS"/>
@@ -1045,6 +1074,8 @@
<keyword type="constant" name="GWY_LINE_STAT_KURTOSIS" link="libgwyprocess-gwyprocessenums.html#GWY-LINE-STAT-KURTOSIS:CAPS"/>
<keyword type="constant" name="GWY_LINE_STAT_RANGE" link="libgwyprocess-gwyprocessenums.html#GWY-LINE-STAT-RANGE:CAPS"/>
<keyword type="constant" name="GWY_LINE_STAT_VARIATION" link="libgwyprocess-gwyprocessenums.html#GWY-LINE-STAT-VARIATION:CAPS"/>
+ <keyword type="constant" name="GWY_LINE_STAT_MINPOS" link="libgwyprocess-gwyprocessenums.html#GWY-LINE-STAT-MINPOS:CAPS"/>
+ <keyword type="constant" name="GWY_LINE_STAT_MAXPOS" link="libgwyprocess-gwyprocessenums.html#GWY-LINE-STAT-MAXPOS:CAPS"/>
<keyword type="constant" name="GWY_EXTERIOR_UNDEFINED" link="libgwyprocess-gwyprocessenums.html#GWY-EXTERIOR-UNDEFINED:CAPS"/>
<keyword type="constant" name="GWY_EXTERIOR_BORDER_EXTEND" link="libgwyprocess-gwyprocessenums.html#GWY-EXTERIOR-BORDER-EXTEND:CAPS"/>
<keyword type="constant" name="GWY_EXTERIOR_MIRROR_EXTEND" link="libgwyprocess-gwyprocessenums.html#GWY-EXTERIOR-MIRROR-EXTEND:CAPS"/>
@@ -1069,13 +1100,14 @@
<keyword type="constant" name="GWY_ROTATE_RESIZE_SAME_SIZE" link="libgwyprocess-gwyprocessenums.html#GWY-ROTATE-RESIZE-SAME-SIZE:CAPS"/>
<keyword type="constant" name="GWY_ROTATE_RESIZE_EXPAND" link="libgwyprocess-gwyprocessenums.html#GWY-ROTATE-RESIZE-EXPAND:CAPS"/>
<keyword type="constant" name="GWY_ROTATE_RESIZE_CUT" link="libgwyprocess-gwyprocessenums.html#GWY-ROTATE-RESIZE-CUT:CAPS"/>
+ <keyword type="constant" name="GWY_AFFINE_SCALING_AS_GIVEN" link="libgwyprocess-gwyprocessenums.html#GWY-AFFINE-SCALING-AS-GIVEN:CAPS"/>
+ <keyword type="constant" name="GWY_AFFINE_SCALING_PRESERVE_AREA" link="libgwyprocess-gwyprocessenums.html#GWY-AFFINE-SCALING-PRESERVE-AREA:CAPS"/>
+ <keyword type="constant" name="GWY_AFFINE_SCALING_PRESERVE_X" link="libgwyprocess-gwyprocessenums.html#GWY-AFFINE-SCALING-PRESERVE-X:CAPS"/>
<keyword type="member" name="GwySurface-struct.n" link="GwySurface.html#GwySurface-struct.n"/>
<keyword type="member" name="GwySurface-struct.data" link="GwySurface.html#GwySurface-struct.data"/>
<keyword type="member" name="GwyTriangulationData.npoints" link="GwyTriangulation.html#GwyTriangulationData.npoints"/>
<keyword type="member" name="GwyTriangulationData.size" link="GwyTriangulation.html#GwyTriangulationData.size"/>
<keyword type="member" name="GwyTriangulationData.index" link="GwyTriangulation.html#GwyTriangulationData.index"/>
<keyword type="member" name="GwyTriangulationData.neighbours" link="GwyTriangulation.html#GwyTriangulationData.neighbours"/>
- <keyword type="member" name="GwyComputationState.state" link="libgwyprocess-gwyprocessenums.html#GwyComputationState.state"/>
- <keyword type="member" name="GwyComputationState.fraction" link="libgwyprocess-gwyprocessenums.html#GwyComputationState.fraction"/>
</functions>
</book>
diff --git a/devel-docs/libgwyprocess/libgwyprocess-docs.sgml b/devel-docs/libgwyprocess/libgwyprocess-docs.sgml
index 644999b..ca02c92 100644
--- a/devel-docs/libgwyprocess/libgwyprocess-docs.sgml
+++ b/devel-docs/libgwyprocess/libgwyprocess-docs.sgml
@@ -49,129 +49,137 @@
<title>Index of all symbols</title>
<xi:include href="xml/api-index-full.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-deprec" role="deprecated">
+ <index id="api-index-deprec">
<title>Index of deprecated symbols</title>
<xi:include href="xml/api-index-deprecated.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-1" role="2.1">
+ <index id="api-index-2-1">
<title>Index of new symbols in 2.1</title>
<xi:include href="xml/api-index-2.1.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-2" role="2.2">
+ <index id="api-index-2-2">
<title>Index of new symbols in 2.2</title>
<xi:include href="xml/api-index-2.2.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-3" role="2.3">
+ <index id="api-index-2-3">
<title>Index of new symbols in 2.3</title>
<xi:include href="xml/api-index-2.3.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-4" role="2.4">
+ <index id="api-index-2-4">
<title>Index of new symbols in 2.4</title>
<xi:include href="xml/api-index-2.4.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-5" role="2.5">
+ <index id="api-index-2-5">
<title>Index of new symbols in 2.5</title>
<xi:include href="xml/api-index-2.5.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-7" role="2.7">
+ <index id="api-index-2-7">
<title>Index of new symbols in 2.7</title>
<xi:include href="xml/api-index-2.7.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-8" role="2.8">
+ <index id="api-index-2-8">
<title>Index of new symbols in 2.8</title>
<xi:include href="xml/api-index-2.8.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-11" role="2.11">
+ <index id="api-index-2-11">
<title>Index of new symbols in 2.11</title>
<xi:include href="xml/api-index-2.11.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-12" role="2.12">
+ <index id="api-index-2-12">
<title>Index of new symbols in 2.12</title>
<xi:include href="xml/api-index-2.12.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-18" role="2.18">
+ <index id="api-index-2-18">
<title>Index of new symbols in 2.18</title>
<xi:include href="xml/api-index-2.18.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-22" role="2.22">
+ <index id="api-index-2-22">
<title>Index of new symbols in 2.22</title>
<xi:include href="xml/api-index-2.22.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-23" role="2.23">
+ <index id="api-index-2-23">
<title>Index of new symbols in 2.23</title>
<xi:include href="xml/api-index-2.23.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-26" role="2.26">
+ <index id="api-index-2-26">
<title>Index of new symbols in 2.26</title>
<xi:include href="xml/api-index-2.26.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-29" role="2.29">
+ <index id="api-index-2-29">
<title>Index of new symbols in 2.29</title>
<xi:include href="xml/api-index-2.29.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-30" role="2.30">
+ <index id="api-index-2-30">
<title>Index of new symbols in 2.30</title>
<xi:include href="xml/api-index-2.30.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-31" role="2.31">
+ <index id="api-index-2-31">
<title>Index of new symbols in 2.31</title>
<xi:include href="xml/api-index-2.31.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-32" role="2.32">
+ <index id="api-index-2-32">
<title>Index of new symbols in 2.32</title>
<xi:include href="xml/api-index-2.32.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-34" role="2.34">
+ <index id="api-index-2-34">
<title>Index of new symbols in 2.34</title>
<xi:include href="xml/api-index-2.34.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-35" role="2.35">
+ <index id="api-index-2-35">
<title>Index of new symbols in 2.35</title>
<xi:include href="xml/api-index-2.35.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-36" role="2.36">
+ <index id="api-index-2-36">
<title>Index of new symbols in 2.36</title>
<xi:include href="xml/api-index-2.36.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-37" role="2.37">
+ <index id="api-index-2-37">
<title>Index of new symbols in 2.37</title>
<xi:include href="xml/api-index-2.37.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-38" role="2.38">
+ <index id="api-index-2-38">
<title>Index of new symbols in 2.38</title>
<xi:include href="xml/api-index-2.38.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-40" role="2.40">
+ <index id="api-index-2-40">
<title>Index of new symbols in 2.40</title>
<xi:include href="xml/api-index-2.40.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-41" role="2.41">
+ <index id="api-index-2-41">
<title>Index of new symbols in 2.41</title>
<xi:include href="xml/api-index-2.41.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-42" role="2.42">
+ <index id="api-index-2-42">
<title>Index of new symbols in 2.42</title>
<xi:include href="xml/api-index-2.42.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-43" role="2.43">
+ <index id="api-index-2-43">
<title>Index of new symbols in 2.43</title>
<xi:include href="xml/api-index-2.43.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-44" role="2.44">
+ <index id="api-index-2-44">
<title>Index of new symbols in 2.44</title>
<xi:include href="xml/api-index-2.44.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-45" role="2.45">
+ <index id="api-index-2-45">
<title>Index of new symbols in 2.45</title>
<xi:include href="xml/api-index-2.45.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-46" role="2.46">
+ <index id="api-index-2-46">
<title>Index of new symbols in 2.46</title>
<xi:include href="xml/api-index-2.46.xml"><xi:fallback /></xi:include>
</index>
- <index id="api-index-2-47" role="2.47">
+ <index id="api-index-2-47">
<title>Index of new symbols in 2.47</title>
<xi:include href="xml/api-index-2.47.xml"><xi:fallback /></xi:include>
</index>
+ <index id="api-index-2-48">
+ <title>Index of new symbols in 2.48</title>
+ <xi:include href="xml/api-index-2.48.xml"><xi:fallback /></xi:include>
+ </index>
+ <index id="api-index-2-49">
+ <title>Index of new symbols in 2.49</title>
+ <xi:include href="xml/api-index-2.49.xml"><xi:fallback /></xi:include>
+ </index>
<!-- API INDICES END -->
</book>
diff --git a/gwyddion.spec b/gwyddion.spec
index 3398686..3ad1668 100644
--- a/gwyddion.spec
+++ b/gwyddion.spec
@@ -1,14 +1,11 @@
-# @(#) $Id: gwyddion.spec.in 18763 2016-07-23 12:45:07Z yeti-dn $
-%{expand:%global distro_is_redhat %(test ! -f /etc/redhat-release; echo $?)}
-%{expand:%global distro_is_suse %(test ! -f /etc/SuSE-release; echo $?)}
-
+# @(#) $Id: gwyddion.spec.in 20201 2017-08-08 17:03:21Z yeti-dn $
Name: gwyddion
-Version: 2.47
-Release: 1
+Version: 2.49
+Release: 1%{?dist}
Summary: An SPM data visualization and analysis tool
Group: Applications/Engineering
-License: GNU GPL
+License: GPLv2+
URL: http://gwyddion.net/
Source0: http://gwyddion.net/download/%{version}/%{name}-%{version}.tar.xz
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(id -un)
@@ -16,70 +13,64 @@ Requires(pre): /sbin/ldconfig
Requires(postun): /sbin/ldconfig
BuildRequires: gcc-c++
-BuildRequires: gtk2-devel >= 2.14
-BuildRequires: glib2-devel >= 2.14
-BuildRequires: pango-devel >= 1.10
-BuildRequires: cairo-devel >= 1.6
-BuildRequires: gtkglext-devel
-BuildRequires: libxml2-devel
+BuildRequires: pkgconfig(gtk+-2.0) >= 2.14
+BuildRequires: pkgconfig(glib-2.0) >= 2.14
+BuildRequires: pkgconfig(pango) >= 1.12
+BuildRequires: pkgconfig(cairo) >= 1.6
+BuildRequires: pkgconfig(fftw3) >= 3.1
+BuildRequires: pkgconfig(gtkglext-1.0)
+BuildRequires: pkgconfig(libxml-2.0)
BuildRequires: zlib-devel
-BuildRequires: libwebp-devel
-BuildRequires: ruby >= 1.8
-%if %{distro_is_redhat}
-BuildRequires: rubypick
-%endif
+BuildRequires: pkgconfig(libwebp)
+BuildRequires: pkgconfig(OpenEXR)
+BuildRequires: pkgconfig(cfitsio)
+BuildRequires: pkgconfig(libpng)
+BuildRequires: pkgconfig(unique-1.0)
+BuildRequires: ruby(release) >= 1.8
BuildRequires: gettext
BuildRequires: desktop-file-utils >= 0.9
-BuildRequires: pkgconfig
BuildRequires: findutils
+BuildRequires: pkgconfig(xmu)
+BuildRequires: pkgconfig(gtksourceview-2.0)
+BuildRequires: pkgconfig(minizip)
+BuildRequires: sed
-%if %{distro_is_redhat}
-BuildRequires: libXmu-devel
-BuildRequires: pygtk2-devel
-BuildRequires: gtksourceview2-devel
-# minizip would be nice to require everywhere but it does not seem available.
-BuildRequires: minizip-devel
-%define fftw3 fftw
-%define fftw3devel fftw-devel
-%define python2devel python2-devel
-%define configureopts %{nil}
+%if 0%{?suse_version}
+BuildRequires: pkg-config
+%else
+BuildRequires: pkgconfig
%endif
-%if %{distro_is_suse}
-BuildRequires: xorg-x11-Mesa-devel
-BuildRequires: xorg-x11-libXmu-devel
-BuildRequires: python-gtk-devel
-BuildRequires: gtksourceview-devel
-BuildRequires: libzip-devel
-%define fftw3 fftw3
-%define fftw3devel fftw3-devel
-%define configureopts %{nil}
+BuildRequires: perl >= 5.005
+%if 0%{?rhl}
+BuildRequires: perl-podlators
%endif
-# Default the fftw package name to the common name in the hope the distro
-# provides that. The expansion inside %if is somehow limited, define the
-# test in two steps.
-%define fftwundefined %{?fftw3:0}%{!?fftw3:1}
-%if %{fftwundefined}
-%define fftw3 fftw
-%define fftw3devel fftw-devel
+# Obsolete? Keep for now...
+%if 0%{?suse_version}
+%define gconf2 gconf2
+%else
+%define gconf2 GConf2
%endif
+BuildRequires: %{gconf2}
-# Ditto for the python development package.
-%define python2undefined %{?python2devel:0}%{!?python2devel:1}
-%if %{python2undefined}
-%define python2devel python-devel
+%if 0%{?fedora} >= 26
+%define python2 python2
+%else
+%define python2 python
%endif
+BuildRequires: %{python2}
+BuildRequires: %{python2}-devel >= 2.7
-%ifarch %ix86
-BuildRequires: %{fftw3devel} >= 3.0
-%else
-BuildRequires: %{fftw3devel} >= 3.1
+%if 0%{?rhl}
+BuildRequires: pygtk2-devel >= 2.10
%endif
-BuildRequires: %{python2devel} >= 2.2
-# Fedora guarantees these two, other may not
-BuildRequires: perl >= 5.005
-BuildRequires: sed
+%if 0%{?suse_version}
+BuildRequires: python-gtk-devel >= 2.10
+%endif
+# otherwise...?
+
+%define configureopts %{nil}
# The only packaged perl module is private, don't expose it.
%define __perl_provides %{nil}
@@ -99,24 +90,21 @@ BuildRequires: sed
%package devel
Summary: Headers, libraries and tools for Gwyddion module development
Group: Development/Libraries
-Requires: %{name} = %{version}
+Requires: %{name}%{?_isa} = %{version}
# This pulls everything else
-Requires: gtk2-devel >= 2.8
-Requires: gtkglext-devel
-Requires: %{fftw3devel}
-%if %{distro_is_redhat}
+Requires: gtk2-devel%{?_isa} >= 2.8
+Requires: gtkglext-devel%{?_isa}
Requires: perl(:MODULE_COMPAT_%(eval "`%{__perl} -V:version`"; echo $version))
-Requires: python-abi = %(%{__python} -c "import sys ; print sys.version[:3]")
-%endif
+Requires: python-abi = 2.7
%package thumbnailer-gconf
Summary: GConf schemas for gwyddion-thumbnailer integration
Group: System Environment/Libraries
Requires: %{name} = %{version}
-Requires(pre): GConf2
-Requires(post): GConf2
-Requires(preun): GConf2
+Requires(pre): %{gconf2}
+Requires(post): %{gconf2}
+Requires(preun): %{gconf2}
%description
@@ -216,7 +204,7 @@ fi
%{_bindir}/%{name}
%{_bindir}/%{name}-thumbnailer
%defattr(-,root,root)
-%doc AUTHORS COPYING INSTALL.%{name} NEWS README THANKS
+%doc AUTHORS COPYING NEWS README THANKS
%{pkgdatadir}/pixmaps/*.png
%{pkgdatadir}/pixmaps/*.ico
%{pkgdatadir}/gradients/*
@@ -316,3 +304,7 @@ fi
%files thumbnailer-gconf
%{gconfdir}/*.schemas
+
+%changelog
+* Tue Aug 8 2017 Yeti <yeti at gwyddion.net> - 2.49-1
+- hello rpmlint, this package is partially generated
diff --git a/libdraw/Makefile.am b/libdraw/Makefile.am
index 642e145..4d106f7 100644
--- a/libdraw/Makefile.am
+++ b/libdraw/Makefile.am
@@ -1,4 +1,4 @@
-# @(#) $Id: Makefile.am 19258 2016-11-15 08:25:23Z yeti-dn $
+# @(#) $Id: Makefile.am 20269 2017-08-14 11:21:07Z yeti-dn $
libgwyddion = $(top_builddir)/libgwyddion/libgwyddion2.la
libgwyprocess = $(top_builddir)/libprocess/libgwyprocess2.la
@@ -59,7 +59,7 @@ AM_CPPFLAGS = -I$(top_srcdir) -DG_LOG_DOMAIN=\"GwyDraw\"
# Any iface change C++: 0: A
# Adding ifaces C: R: A++
# Changing ifaces C: R: 0
-libversion = -version-info 5:0:5
+libversion = -version-info 6:0:6
#libversion = -release @LIBRARY_RELEASE@
libgwydraw2_la_LDFLAGS = @GTK_LIBS@ @BASIC_LIBS@ -export-dynamic $(no_undefined) $(export_symbols) $(libversion)
libgwydraw2_la_LIBADD = $(libgwydraw_libadd)
diff --git a/libdraw/Makefile.in b/libdraw/Makefile.in
index 448ff01..387452c 100644
--- a/libdraw/Makefile.in
+++ b/libdraw/Makefile.in
@@ -14,10 +14,10 @@
@SET_MAKE@
-# @(#) $Id: Makefile.am 19258 2016-11-15 08:25:23Z yeti-dn $
+# @(#) $Id: Makefile.am 20269 2017-08-14 11:21:07Z yeti-dn $
# Generic glib-mkenum rules.
-# @(#) $Id: mkenum.mk 11705 2011-01-03 08:32:55Z yeti-dn $
+# @(#) $Id: mkenum.mk 20080 2017-07-24 16:05:52Z yeti-dn $
#
# Parameters:
# MKENUM_NAME -- output base name
@@ -273,10 +273,7 @@ EPYDOC = @EPYDOC@
EXEEXT = @EXEEXT@
EXR_CFLAGS = @EXR_CFLAGS@
EXR_LIBS = @EXR_LIBS@
-FFTW3_1_CFLAGS = @FFTW3_1_CFLAGS@
-FFTW3_1_LIBS = @FFTW3_1_LIBS@
FFTW3_CFLAGS = @FFTW3_CFLAGS@
-FFTW3_DEPENDENCY = @FFTW3_DEPENDENCY@
FFTW3_LIBS = @FFTW3_LIBS@
FGREP = @FGREP@
GCONFTOOL = @GCONFTOOL@
@@ -286,6 +283,8 @@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
GLIBC21 = @GLIBC21@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GMODULE_CFLAGS = @GMODULE_CFLAGS@
GMODULE_LIBS = @GMODULE_LIBS@
GMSGFMT = @GMSGFMT@
@@ -310,7 +309,9 @@ GTK_MAC_LIBS = @GTK_MAC_LIBS@
GWY_VERSION_MAJOR = @GWY_VERSION_MAJOR@
GWY_VERSION_MINOR = @GWY_VERSION_MINOR@
GWY_VERSION_STRING = @GWY_VERSION_STRING@
+HDRIMAGE_EXTRA_CFLAGS = @HDRIMAGE_EXTRA_CFLAGS@
HTML_DIR = @HTML_DIR@
+INKSCAPE = @INKSCAPE@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -368,6 +369,7 @@ PASCAL = @PASCAL@
PATH_SEPARATOR = @PATH_SEPARATOR@
PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
+PNGCRUSH = @PNGCRUSH@
PNG_CFLAGS = @PNG_CFLAGS@
PNG_LIBS = @PNG_LIBS@
POD2MAN = @POD2MAN@
@@ -376,17 +378,13 @@ PYGTK_CFLAGS = @PYGTK_CFLAGS@
PYGTK_CODEGENDIR = @PYGTK_CODEGENDIR@
PYGTK_LIBS = @PYGTK_LIBS@
PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
PYTHON_EXTRA_CFLAGS = @PYTHON_EXTRA_CFLAGS@
PYTHON_INCLUDES = @PYTHON_INCLUDES@
-PYTHON_LIBS = @PYTHON_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
PYTHON_PLATFORM = @PYTHON_PLATFORM@
PYTHON_PREFIX = @PYTHON_PREFIX@
-PYTHON_SYSCFG_BASECFLAGS = @PYTHON_SYSCFG_BASECFLAGS@
-PYTHON_SYSCFG_CCSHARED = @PYTHON_SYSCFG_CCSHARED@
-PYTHON_SYSCFG_LDFLAGS = @PYTHON_SYSCFG_LDFLAGS@
-PYTHON_SYSCFG_LIBDIR = @PYTHON_SYSCFG_LIBDIR@
-PYTHON_SYSCFG_LINKFORSHARED = @PYTHON_SYSCFG_LINKFORSHARED@
PYTHON_VERSION = @PYTHON_VERSION@
RANLIB = @RANLIB@
RUBY = @RUBY@
@@ -502,9 +500,6 @@ BUILT_SOURCES = $(am__append_2)
MKENUM_NAME = gwydrawtypes
MKENUM_ID = GWYDRAW_TYPES
MKENUM_HFILES = $(srcdir)/gwydrawenums.h
-
-# TODO: Detect
-GLIB_MKENUMS = glib-mkenums
mkenum_built_sources = $(MKENUM_NAME).h $(MKENUM_NAME).c
@MAINTAINER_MODE_TRUE at mkenum_stamp_files = $(MKENUM_NAME).h.stamp
@MAINTAINER_MODE_TRUE at mkenum_self = $(top_srcdir)/utils/mkenum.mk
@@ -528,7 +523,7 @@ AM_CPPFLAGS = -I$(top_srcdir) -DG_LOG_DOMAIN=\"GwyDraw\"
# Any iface change C++: 0: A
# Adding ifaces C: R: A++
# Changing ifaces C: R: 0
-libversion = -version-info 5:0:5
+libversion = -version-info 6:0:6
#libversion = -release @LIBRARY_RELEASE@
libgwydraw2_la_LDFLAGS = @GTK_LIBS@ @BASIC_LIBS@ -export-dynamic $(no_undefined) $(export_symbols) $(libversion)
libgwydraw2_la_LIBADD = $(libgwydraw_libadd)
diff --git a/libdraw/gwypixfield.c b/libdraw/gwypixfield.c
index 4d707a6..f1af4d1 100644
--- a/libdraw/gwypixfield.c
+++ b/libdraw/gwypixfield.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: gwypixfield.c 16667 2014-10-11 16:39:06Z yeti-dn $
+ * @(#) $Id: gwypixfield.c 20070 2017-07-12 07:48:27Z yeti-dn $
* Copyright (C) 2003,2014 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -262,8 +262,7 @@ gwy_draw_data_field_map_adaptive(GwyDataField *data_field,
static gint*
calc_cdh(GwyDataField *dfield, gint *cdh_size)
{
- const gdouble *data;
- gdouble q, min, max;
+ gdouble min, max;
gint i, n, xres, yres;
gint *cdh;
@@ -271,24 +270,14 @@ calc_cdh(GwyDataField *dfield, gint *cdh_size)
yres = gwy_data_field_get_yres(dfield);
gwy_data_field_get_min_max(dfield, &min, &max);
- n = GWY_ROUND(pow(xres*yres, 2.0/3.0));
- data = gwy_data_field_get_data_const(dfield);
- q = (n - 1.0)/(max - min);
- cdh = g_new(gint, n);
-
- cdh[0] = 0;
- for (i = 1; i < n; i++)
- cdh[i] = xres*yres/(2*n);
- for (i = 0; i < xres*yres; i++) {
- gint h = (gint)((data[i] - min)*q + 1);
- cdh[GWY_CLAMP(h, 0, n-1)]++;
- }
+ n = *cdh_size = GWY_ROUND(pow(xres*yres, 2.0/3.0));
+ cdh = g_new(guint, n);
+ gwy_math_histogram(gwy_data_field_get_data_const(dfield), xres*yres,
+ min, max, n, cdh);
for (i = 1; i < n; i++)
- cdh[i] += cdh[i-1];
+ cdh[i] += xres*yres/(2*n) + cdh[i-1];
cdh[0] = 0;
- *cdh_size = n;
-
return cdh;
}
@@ -310,19 +299,18 @@ gwy_pixbuf_draw_data_field_as_mask(GdkPixbuf *pixbuf,
const GwyRGBA *color)
{
int xres, yres, i, j, rowstride;
- guchar *pixels, *line;
+ guchar *pixels, *pixline;
guint32 pixel;
- const gdouble *row, *data;
- gdouble cor;
+ const gdouble *drow, *data;
+ guchar a;
g_return_if_fail(GDK_IS_PIXBUF(pixbuf));
g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
g_return_if_fail(color);
- pixel = 0xff
- | ((guint32)(guchar)floor(255.99999*color->b) << 8)
- | ((guint32)(guchar)floor(255.99999*color->g) << 16)
- | ((guint32)(guchar)floor(255.99999*color->r) << 24);
+ pixel = gwy_rgba_to_pixbuf_pixel(color);
+ a = (pixel & 0xff);
+ pixel |= 0xff;
gdk_pixbuf_fill(pixbuf, pixel);
if (!gdk_pixbuf_get_has_alpha(pixbuf))
return;
@@ -336,18 +324,12 @@ gwy_pixbuf_draw_data_field_as_mask(GdkPixbuf *pixbuf,
pixels = gdk_pixbuf_get_pixels(pixbuf);
rowstride = gdk_pixbuf_get_rowstride(pixbuf);
- cor = 255*color->a + 0.99999;
- gwy_debug("cor = %g", cor);
for (i = 0; i < yres; i++) {
- line = pixels + i*rowstride + 3;
- row = data + i*xres;
- for (j = 0; j < xres; j++, row++) {
- gdouble val = GWY_CLAMP(*row, 0.0, 1.0);
-
- *line = (guchar)(cor*val);
- line += 4;
- }
+ pixline = pixels + i*rowstride + 3;
+ drow = data + i*xres;
+ for (j = xres; j; j--, drow++, pixline += 4)
+ *pixline = (*drow >= 0.5) ? a : 0;
}
}
diff --git a/libdraw/gwyrgba.c b/libdraw/gwyrgba.c
index 5862d88..f1a1f23 100644
--- a/libdraw/gwyrgba.c
+++ b/libdraw/gwyrgba.c
@@ -1,6 +1,6 @@
/*
- * @(#) $Id: gwyrgba.c 19135 2016-10-30 14:53:30Z yeti-dn $
- * Copyright (C) 2004-2016 David Necas (Yeti), Petr Klapetek.
+ * @(#) $Id: gwyrgba.c 20069 2017-07-12 07:47:40Z yeti-dn $
+ * Copyright (C) 2004-2017 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
* This program is free software; you can redistribute it and/or modify
@@ -182,7 +182,7 @@ gwy_rgba_from_gdk_color_and_alpha(GwyRGBA *rgba,
* @src1: Color at point @x = 0.0.
* @src2: Color at point @x = 1.0.
* @x: Point in interval 0..1 to take color from.
- * @rgba: A #GwyRGBA to store result to.
+ * @rgba: A #GwyRGBA to store the result to.
*
* Linearly interpolates two colors, including alpha blending.
*
@@ -401,9 +401,9 @@ gwy_rgba_to_hex6(const GwyRGBA *rgba,
g_return_if_fail(rgba);
g_return_if_fail(hexout);
g_snprintf(hexout, 7, "%02x%02x%02x",
- float_to_gdk(rgba->r),
- float_to_gdk(rgba->g),
- float_to_gdk(rgba->b));
+ float_to_hex(rgba->r),
+ float_to_hex(rgba->g),
+ float_to_hex(rgba->b));
}
/**
@@ -427,12 +427,59 @@ gwy_rgba_to_hex8(const GwyRGBA *rgba,
g_return_if_fail(rgba);
g_return_if_fail(hexout);
g_snprintf(hexout, 9, "%02x%02x%02x%02x",
- float_to_gdk(rgba->a),
- float_to_gdk(rgba->r),
- float_to_gdk(rgba->g),
- float_to_gdk(rgba->b));
+ float_to_hex(rgba->a),
+ float_to_hex(rgba->r),
+ float_to_hex(rgba->g),
+ float_to_hex(rgba->b));
}
+/**
+ * gwy_rgba_to_pixbuf_pixel:
+ * @rgba: A RGBA color.
+ *
+ * Converts a RGBA color to pixbuf pixel.
+ *
+ * The returned pixel value includes opacity. If @rgba is partially
+ * transparent, so is the pixel.
+ *
+ * Returns: The pixel value as a 32-bit integer.
+ *
+ * Since: 2.49
+ **/
+guint32
+gwy_rgba_to_pixbuf_pixel(const GwyRGBA *rgba)
+{
+ g_return_val_if_fail(rgba, 0);
+
+ return ((guint32)float_to_hex(rgba->a)
+ | (((guint32)float_to_hex(rgba->b)) << 8)
+ | (((guint32)float_to_hex(rgba->g)) << 16)
+ | (((guint32)float_to_hex(rgba->r)) << 24));
+}
+
+/**
+ * gwy_rgba_from_pixbuf_pixel:
+ * @rgba: A #GwyRGBA to store the result to.
+ * @pixel: Pixbuf pixel value as a 32-bit integer.
+ *
+ * Converts a pixbuf pixel value to a RGBA color.
+ *
+ * The conversion includes opacity. If the opacity channel is undefined or
+ * should be ignored, you need to either set the lowest byte of @pixel to 0xff
+ * or fix @rgba afterwards.
+ *
+ * Since: 2.49
+ **/
+void
+gwy_rgba_from_pixbuf_pixel(GwyRGBA *rgba,
+ guint32 pixel)
+{
+ g_return_if_fail(rgba);
+ rgba->a = (pixel & 0xffu)/255.0;
+ rgba->b = ((pixel >> 8) & 0xffu)/255.0;
+ rgba->g = ((pixel >> 16) & 0xffu)/255.0;
+ rgba->r = ((pixel >> 24) & 0xffu)/255.0;
+}
/************************** Documentation ****************************/
diff --git a/libdraw/gwyrgba.h b/libdraw/gwyrgba.h
index 8b57272..20e0966 100644
--- a/libdraw/gwyrgba.h
+++ b/libdraw/gwyrgba.h
@@ -1,6 +1,6 @@
/*
- * @(#) $Id: gwyrgba.h 19135 2016-10-30 14:53:30Z yeti-dn $
- * Copyright (C) 2004-2016 David Necas (Yeti), Petr Klapetek.
+ * @(#) $Id: gwyrgba.h 20069 2017-07-12 07:47:40Z yeti-dn $
+ * Copyright (C) 2004-2017 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
* This program is free software; you can redistribute it and/or modify
@@ -71,6 +71,9 @@ void gwy_rgba_to_hex6 (const GwyRGBA *rgba,
gchar *hexout);
void gwy_rgba_to_hex8 (const GwyRGBA *rgba,
gchar *hexout);
+guint32 gwy_rgba_to_pixbuf_pixel (const GwyRGBA *rgba);
+void gwy_rgba_from_pixbuf_pixel (GwyRGBA *rgba,
+ guint32 pixel);
G_END_DECLS
diff --git a/libgwyddion/Makefile.am b/libgwyddion/Makefile.am
index b243f4b..210368f 100644
--- a/libgwyddion/Makefile.am
+++ b/libgwyddion/Makefile.am
@@ -1,4 +1,4 @@
-# @(#) $Id: Makefile.am 19258 2016-11-15 08:25:23Z yeti-dn $
+# @(#) $Id: Makefile.am 20269 2017-08-14 11:21:07Z yeti-dn $
libgwyddion2includedir = $(pkgincludedir)/libgwyddion
@@ -78,7 +78,7 @@ AM_CPPFLAGS = \
# Any iface change C++: 0: A
# Adding ifaces C: R: A++
# Changing ifaces C: R: 0
-libversion = -version-info 22:0:22
+libversion = -version-info 23:0:23
#libversion = -release @LIBRARY_RELEASE@
libgwyddion2_la_LDFLAGS = @BASIC_LIBS@ -export-dynamic $(no_undefined) $(export_symbols) $(libversion)
libgwyddion2_la_SOURCES = \
diff --git a/libgwyddion/Makefile.in b/libgwyddion/Makefile.in
index 2a13eaf..3fcedb2 100644
--- a/libgwyddion/Makefile.in
+++ b/libgwyddion/Makefile.in
@@ -14,10 +14,10 @@
@SET_MAKE@
-# @(#) $Id: Makefile.am 19258 2016-11-15 08:25:23Z yeti-dn $
+# @(#) $Id: Makefile.am 20269 2017-08-14 11:21:07Z yeti-dn $
# Generic glib-mkenum rules.
-# @(#) $Id: mkenum.mk 11705 2011-01-03 08:32:55Z yeti-dn $
+# @(#) $Id: mkenum.mk 20080 2017-07-24 16:05:52Z yeti-dn $
#
# Parameters:
# MKENUM_NAME -- output base name
@@ -276,10 +276,7 @@ EPYDOC = @EPYDOC@
EXEEXT = @EXEEXT@
EXR_CFLAGS = @EXR_CFLAGS@
EXR_LIBS = @EXR_LIBS@
-FFTW3_1_CFLAGS = @FFTW3_1_CFLAGS@
-FFTW3_1_LIBS = @FFTW3_1_LIBS@
FFTW3_CFLAGS = @FFTW3_CFLAGS@
-FFTW3_DEPENDENCY = @FFTW3_DEPENDENCY@
FFTW3_LIBS = @FFTW3_LIBS@
FGREP = @FGREP@
GCONFTOOL = @GCONFTOOL@
@@ -289,6 +286,8 @@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
GLIBC21 = @GLIBC21@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GMODULE_CFLAGS = @GMODULE_CFLAGS@
GMODULE_LIBS = @GMODULE_LIBS@
GMSGFMT = @GMSGFMT@
@@ -313,7 +312,9 @@ GTK_MAC_LIBS = @GTK_MAC_LIBS@
GWY_VERSION_MAJOR = @GWY_VERSION_MAJOR@
GWY_VERSION_MINOR = @GWY_VERSION_MINOR@
GWY_VERSION_STRING = @GWY_VERSION_STRING@
+HDRIMAGE_EXTRA_CFLAGS = @HDRIMAGE_EXTRA_CFLAGS@
HTML_DIR = @HTML_DIR@
+INKSCAPE = @INKSCAPE@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -371,6 +372,7 @@ PASCAL = @PASCAL@
PATH_SEPARATOR = @PATH_SEPARATOR@
PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
+PNGCRUSH = @PNGCRUSH@
PNG_CFLAGS = @PNG_CFLAGS@
PNG_LIBS = @PNG_LIBS@
POD2MAN = @POD2MAN@
@@ -379,17 +381,13 @@ PYGTK_CFLAGS = @PYGTK_CFLAGS@
PYGTK_CODEGENDIR = @PYGTK_CODEGENDIR@
PYGTK_LIBS = @PYGTK_LIBS@
PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
PYTHON_EXTRA_CFLAGS = @PYTHON_EXTRA_CFLAGS@
PYTHON_INCLUDES = @PYTHON_INCLUDES@
-PYTHON_LIBS = @PYTHON_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
PYTHON_PLATFORM = @PYTHON_PLATFORM@
PYTHON_PREFIX = @PYTHON_PREFIX@
-PYTHON_SYSCFG_BASECFLAGS = @PYTHON_SYSCFG_BASECFLAGS@
-PYTHON_SYSCFG_CCSHARED = @PYTHON_SYSCFG_CCSHARED@
-PYTHON_SYSCFG_LDFLAGS = @PYTHON_SYSCFG_LDFLAGS@
-PYTHON_SYSCFG_LIBDIR = @PYTHON_SYSCFG_LIBDIR@
-PYTHON_SYSCFG_LINKFORSHARED = @PYTHON_SYSCFG_LINKFORSHARED@
PYTHON_VERSION = @PYTHON_VERSION@
RANLIB = @RANLIB@
RUBY = @RUBY@
@@ -522,9 +520,6 @@ MKENUM_HFILES = \
$(srcdir)/gwyutils.h \
$(srcdir)/gwyexpr.h
-
-# TODO: Detect
-GLIB_MKENUMS = glib-mkenums
mkenum_built_sources = $(MKENUM_NAME).h $(MKENUM_NAME).c
@MAINTAINER_MODE_TRUE at mkenum_stamp_files = $(MKENUM_NAME).h.stamp
@MAINTAINER_MODE_TRUE at mkenum_self = $(top_srcdir)/utils/mkenum.mk
@@ -553,7 +548,7 @@ AM_CPPFLAGS = \
# Any iface change C++: 0: A
# Adding ifaces C: R: A++
# Changing ifaces C: R: 0
-libversion = -version-info 22:0:22
+libversion = -version-info 23:0:23
#libversion = -release @LIBRARY_RELEASE@
libgwyddion2_la_LDFLAGS = @BASIC_LIBS@ -export-dynamic $(no_undefined) $(export_symbols) $(libversion)
libgwyddion2_la_SOURCES = \
diff --git a/libgwyddion/gwycontainer.c b/libgwyddion/gwycontainer.c
index a73d336..a380664 100644
--- a/libgwyddion/gwycontainer.c
+++ b/libgwyddion/gwycontainer.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: gwycontainer.c 18117 2016-01-19 10:15:26Z yeti-dn $
+ * @(#) $Id: gwycontainer.c 19324 2016-11-28 22:24:36Z yeti-dn $
* Copyright (C) 2003,2004,2014 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -66,62 +66,63 @@ typedef struct {
gint i;
} SerializeData;
-static void gwy_container_serializable_init (GwySerializableIface *iface);
-static void value_destroy_func (gpointer data);
-static void gwy_container_finalize (GObject *object);
-static GValue* gwy_container_get_value_of_type (GwyContainer *container,
- GQuark key,
- GType type);
-static GValue* gwy_container_gis_value_of_type (GwyContainer *container,
- GQuark key,
- GType type);
-static gboolean gwy_container_try_set_one (GwyContainer *container,
- GQuark key,
- GValue *value);
-static void gwy_container_try_setv (GwyContainer *container,
- gsize nvalues,
- GwyKeyVal *values);
-static void gwy_container_try_set_valist (GwyContainer *container,
- va_list ap);
-static void gwy_container_set_by_name_valist (GwyContainer *container,
- va_list ap);
-static GByteArray* gwy_container_serialize (GObject *object,
- GByteArray *buffer);
-static gsize gwy_container_get_size (GObject *object);
-static void hash_serialize_func (gpointer hkey,
- gpointer hvalue,
- gpointer hdata);
-static GObject* gwy_container_deserialize (const guchar *buffer,
- gsize size,
- gsize *position);
-static gboolean hash_remove_prefix_func (gpointer hkey,
- gpointer hvalue,
- gpointer hdata);
-static void hash_foreach_func (gpointer hkey,
- gpointer hvalue,
- gpointer hdata);
-static void keys_foreach_func (gpointer hkey,
- gpointer hvalue,
- gpointer hdata);
-static void keys_by_name_foreach_func (gpointer hkey,
- gpointer hvalue,
- gpointer hdata);
-static GObject* gwy_container_duplicate_real (GObject *object);
-static void gwy_container_clone_real (GObject *source,
- GObject *copy);
-static gboolean hash_remove_all_func (void);
-static void hash_duplicate_func (gpointer hkey,
- gpointer hvalue,
- gpointer hdata);
-static GwyContainer*
- gwy_container_duplicate_by_prefix_valist(GwyContainer *container,
- va_list ap);
-static void hash_prefix_duplicate_func (gpointer hkey,
- gpointer hvalue,
- gpointer hdata);
-static void hash_find_keys_func (gpointer hkey,
- gpointer hvalue,
- gpointer hdata);
+static void gwy_container_serializable_init (GwySerializableIface *iface);
+static void value_destroy_func (gpointer data);
+static void gwy_container_finalize (GObject *object);
+static GValue* gwy_container_get_value_of_type (GwyContainer *container,
+ GQuark key,
+ GType type);
+static GValue* gwy_container_gis_value_of_type (GwyContainer *container,
+ GQuark key,
+ GType type);
+static gboolean gwy_container_try_set_one (GwyContainer *container,
+ GQuark key,
+ GValue *value);
+static void gwy_container_try_setv (GwyContainer *container,
+ gsize nvalues,
+ GwyKeyVal *values);
+static void gwy_container_try_set_valist (GwyContainer *container,
+ va_list ap);
+static void gwy_container_set_by_name_valist(GwyContainer *container,
+ va_list ap);
+static GByteArray* gwy_container_serialize (GObject *object,
+ GByteArray *buffer);
+static gsize gwy_container_get_size (GObject *object);
+static void hash_serialize_func (gpointer hkey,
+ gpointer hvalue,
+ gpointer hdata);
+static GObject* gwy_container_deserialize (const guchar *buffer,
+ gsize size,
+ gsize *position);
+static gboolean hash_remove_prefix_func (gpointer hkey,
+ gpointer hvalue,
+ gpointer hdata);
+static void hash_foreach_func (gpointer hkey,
+ gpointer hvalue,
+ gpointer hdata);
+static void keys_foreach_func (gpointer hkey,
+ gpointer hvalue,
+ gpointer hdata);
+static void keys_by_name_foreach_func (gpointer hkey,
+ gpointer hvalue,
+ gpointer hdata);
+static GObject* gwy_container_duplicate_real (GObject *object);
+static void gwy_container_clone_real (GObject *source,
+ GObject *copy);
+static gboolean hash_remove_all_func (void);
+static void hash_duplicate_func (gpointer hkey,
+ gpointer hvalue,
+ gpointer hdata);
+static GwyContainer* duplicate_by_prefix_valist (GwyContainer *container,
+ va_list ap);
+static GwyContainer* duplicate_by_prefix_do (GwyContainer *container,
+ PrefixListData *pfxlist);
+static void hash_prefix_duplicate_func (gpointer hkey,
+ gpointer hvalue,
+ gpointer hdata);
+static void hash_find_keys_func (gpointer hkey,
+ gpointer hvalue,
+ gpointer hdata);
static int pstring_compare_callback (const void *p,
const void *q);
@@ -2107,8 +2108,7 @@ hash_duplicate_func(gpointer hkey, gpointer hvalue, gpointer hdata)
* Returns: A newly created container.
**/
GwyContainer*
-gwy_container_duplicate_by_prefix(GwyContainer *container,
- ...)
+gwy_container_duplicate_by_prefix(GwyContainer *container, ...)
{
GwyContainer *duplicate;
va_list ap;
@@ -2116,15 +2116,42 @@ gwy_container_duplicate_by_prefix(GwyContainer *container,
g_return_val_if_fail(GWY_IS_CONTAINER(container), NULL);
va_start(ap, container);
- duplicate = gwy_container_duplicate_by_prefix_valist(container, ap);
+ duplicate = duplicate_by_prefix_valist(container, ap);
va_end(ap);
return duplicate;
}
+/**
+ * gwy_container_duplicate_by_prefixv:
+ * @container: A container.
+ * @n: Number of prefixes.
+ * @prefixes: List of prefixes.
+ *
+ * Duplicates a container keeping only values under given prefixes.
+ *
+ * Like gwy_container_duplicate(), this method creates a deep copy, that is
+ * contained object are physically duplicated too, not just referenced again.
+ *
+ * Returns: A newly created container.
+ *
+ * Since: 2.48
+ **/
+GwyContainer*
+gwy_container_duplicate_by_prefixv(GwyContainer *container,
+ guint n,
+ const gchar **prefixes)
+{
+ PrefixListData pfxlist;
+
+ g_return_val_if_fail(GWY_IS_CONTAINER(container), NULL);
+ pfxlist.nprefixes = n;
+ pfxlist.prefixes = prefixes;
+ return duplicate_by_prefix_do(container, &pfxlist);
+}
+
static GwyContainer*
-gwy_container_duplicate_by_prefix_valist(GwyContainer *container,
- va_list ap)
+duplicate_by_prefix_valist(GwyContainer *container, va_list ap)
{
GwyContainer *duplicate;
PrefixListData pfxlist;
@@ -2144,26 +2171,38 @@ gwy_container_duplicate_by_prefix_valist(GwyContainer *container,
pfxlist.nprefixes++;
prefix = va_arg(ap, const gchar*);
}
- pfxlist.pfxlengths = g_new(gsize, n);
- pfxlist.pfxclosed = g_new(gboolean, n);
- for (n = 0; n < pfxlist.nprefixes; n++) {
- pfxlist.pfxlengths[n] = strlen(pfxlist.prefixes[n]);
- pfxlist.pfxclosed[n] = !pfxlist.pfxlengths[n]
- || pfxlist.prefixes[n][pfxlist.pfxlengths[n] - 1]
- == GWY_CONTAINER_PATHSEP;
+
+ duplicate = duplicate_by_prefix_do(container, &pfxlist);
+ g_free(pfxlist.prefixes);
+ return duplicate;
+}
+
+static GwyContainer*
+duplicate_by_prefix_do(GwyContainer *container, PrefixListData *pfxlist)
+{
+ GwyContainer *duplicate;
+ gsize n;
+
+ pfxlist->pfxlengths = g_new(gsize, pfxlist->nprefixes);
+ pfxlist->pfxclosed = g_new(gboolean, pfxlist->nprefixes);
+ for (n = 0; n < pfxlist->nprefixes; n++) {
+ const gchar *prefix = pfxlist->prefixes[n];
+ gsize len;
+ len = pfxlist->pfxlengths[n] = strlen(prefix);
+ pfxlist->pfxclosed[n] = !len || (prefix[len - 1]
+ == GWY_CONTAINER_PATHSEP);
}
/* don't emit signals when no one can be connected */
duplicate = (GwyContainer*)gwy_container_new();
duplicate->in_construction = TRUE;
- pfxlist.container = duplicate;
+ pfxlist->container = duplicate;
g_hash_table_foreach(container->values,
- hash_prefix_duplicate_func, &pfxlist);
+ hash_prefix_duplicate_func, pfxlist);
duplicate->in_construction = FALSE;
- g_free(pfxlist.prefixes);
- g_free(pfxlist.pfxclosed);
- g_free(pfxlist.pfxlengths);
+ g_free(pfxlist->pfxclosed);
+ g_free(pfxlist->pfxlengths);
return duplicate;
}
diff --git a/libgwyddion/gwycontainer.h b/libgwyddion/gwycontainer.h
index 1e82e0f..af81da1 100644
--- a/libgwyddion/gwycontainer.h
+++ b/libgwyddion/gwycontainer.h
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: gwycontainer.h 18117 2016-01-19 10:15:26Z yeti-dn $
+ * @(#) $Id: gwycontainer.h 19818 2017-05-31 11:41:43Z yeti-dn $
* Copyright (C) 2003,2004,2014 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -78,13 +78,16 @@ gboolean gwy_container_gis_value (GwyContainer *container,
void gwy_container_set_value (GwyContainer *container,
...);
void gwy_container_set_value_by_name (GwyContainer *container,
- ...);
+ ...) G_GNUC_NULL_TERMINATED;
gboolean gwy_container_remove (GwyContainer *container,
GQuark key);
guint gwy_container_remove_by_prefix (GwyContainer *container,
const gchar *prefix);
GwyContainer* gwy_container_duplicate_by_prefix (GwyContainer *container,
...);
+GwyContainer* gwy_container_duplicate_by_prefixv (GwyContainer *container,
+ guint n,
+ const gchar **prefixes);
gint gwy_container_transfer (GwyContainer *source,
GwyContainer *dest,
const gchar *source_prefix,
diff --git a/libgwyddion/gwyddiontypes.c b/libgwyddion/gwyddiontypes.c
index a2c3c04..17024cd 100644
--- a/libgwyddion/gwyddiontypes.c
+++ b/libgwyddion/gwyddiontypes.c
@@ -40,6 +40,34 @@ gwy_nl_fit_param_flags_get_type(void)
return etype;
}
+#include "./gwyexpr.h"
+
+GType
+gwy_expr_error_get_type(void)
+{
+ static GType etype = 0;
+
+ if (etype == 0) {
+ static const GEnumValue values[] = {
+ { GWY_EXPR_ERROR_CLOSING_PARENTHESIS, "GWY_EXPR_ERROR_CLOSING_PARENTHESIS", "closing-parenthesis" },
+ { GWY_EXPR_ERROR_EMPTY, "GWY_EXPR_ERROR_EMPTY", "empty" },
+ { GWY_EXPR_ERROR_EMPTY_PARENTHESES, "GWY_EXPR_ERROR_EMPTY_PARENTHESES", "empty-parentheses" },
+ { GWY_EXPR_ERROR_GARBAGE, "GWY_EXPR_ERROR_GARBAGE", "garbage" },
+ { GWY_EXPR_ERROR_INVALID_ARGUMENT, "GWY_EXPR_ERROR_INVALID_ARGUMENT", "invalid-argument" },
+ { GWY_EXPR_ERROR_INVALID_TOKEN, "GWY_EXPR_ERROR_INVALID_TOKEN", "invalid-token" },
+ { GWY_EXPR_ERROR_MISSING_ARGUMENT, "GWY_EXPR_ERROR_MISSING_ARGUMENT", "missing-argument" },
+ { GWY_EXPR_ERROR_NOT_EXECUTABLE, "GWY_EXPR_ERROR_NOT_EXECUTABLE", "not-executable" },
+ { GWY_EXPR_ERROR_OPENING_PARENTHESIS, "GWY_EXPR_ERROR_OPENING_PARENTHESIS", "opening-parenthesis" },
+ { GWY_EXPR_ERROR_STRAY_COMMA, "GWY_EXPR_ERROR_STRAY_COMMA", "stray-comma" },
+ { GWY_EXPR_ERROR_UNRESOLVED_IDENTIFIERS, "GWY_EXPR_ERROR_UNRESOLVED_IDENTIFIERS", "unresolved-identifiers" },
+ { GWY_EXPR_ERROR_CONSTANT_NAME, "GWY_EXPR_ERROR_CONSTANT_NAME", "constant-name" },
+ { 0, NULL, NULL }
+ };
+ etype = g_enum_register_static("GwyExprError", values);
+ }
+ return etype;
+}
+
#include "./gwyutils.h"
GType
@@ -85,34 +113,6 @@ gwy_byte_order_get_type(void)
return etype;
}
-#include "./gwyexpr.h"
-
-GType
-gwy_expr_error_get_type(void)
-{
- static GType etype = 0;
-
- if (etype == 0) {
- static const GEnumValue values[] = {
- { GWY_EXPR_ERROR_CLOSING_PARENTHESIS, "GWY_EXPR_ERROR_CLOSING_PARENTHESIS", "closing-parenthesis" },
- { GWY_EXPR_ERROR_EMPTY, "GWY_EXPR_ERROR_EMPTY", "empty" },
- { GWY_EXPR_ERROR_EMPTY_PARENTHESES, "GWY_EXPR_ERROR_EMPTY_PARENTHESES", "empty-parentheses" },
- { GWY_EXPR_ERROR_GARBAGE, "GWY_EXPR_ERROR_GARBAGE", "garbage" },
- { GWY_EXPR_ERROR_INVALID_ARGUMENT, "GWY_EXPR_ERROR_INVALID_ARGUMENT", "invalid-argument" },
- { GWY_EXPR_ERROR_INVALID_TOKEN, "GWY_EXPR_ERROR_INVALID_TOKEN", "invalid-token" },
- { GWY_EXPR_ERROR_MISSING_ARGUMENT, "GWY_EXPR_ERROR_MISSING_ARGUMENT", "missing-argument" },
- { GWY_EXPR_ERROR_NOT_EXECUTABLE, "GWY_EXPR_ERROR_NOT_EXECUTABLE", "not-executable" },
- { GWY_EXPR_ERROR_OPENING_PARENTHESIS, "GWY_EXPR_ERROR_OPENING_PARENTHESIS", "opening-parenthesis" },
- { GWY_EXPR_ERROR_STRAY_COMMA, "GWY_EXPR_ERROR_STRAY_COMMA", "stray-comma" },
- { GWY_EXPR_ERROR_UNRESOLVED_IDENTIFIERS, "GWY_EXPR_ERROR_UNRESOLVED_IDENTIFIERS", "unresolved-identifiers" },
- { GWY_EXPR_ERROR_CONSTANT_NAME, "GWY_EXPR_ERROR_CONSTANT_NAME", "constant-name" },
- { 0, NULL, NULL }
- };
- etype = g_enum_register_static("GwyExprError", values);
- }
- return etype;
-}
-
/* Generated data ends here */
diff --git a/libgwyddion/gwyddiontypes.h b/libgwyddion/gwyddiontypes.h
index 518867e..f27339e 100644
--- a/libgwyddion/gwyddiontypes.h
+++ b/libgwyddion/gwyddiontypes.h
@@ -14,15 +14,15 @@ GType gwy_si_unit_format_style_get_type(void) G_GNUC_CONST;
GType gwy_nl_fit_param_flags_get_type(void) G_GNUC_CONST;
#define GWY_TYPE_NL_FIT_PARAM_FLAGS (gwy_nl_fit_param_flags_get_type())
+GType gwy_expr_error_get_type(void) G_GNUC_CONST;
+#define GWY_TYPE_EXPR_ERROR (gwy_expr_error_get_type())
+
GType gwy_raw_data_type_get_type(void) G_GNUC_CONST;
#define GWY_TYPE_RAW_DATA_TYPE (gwy_raw_data_type_get_type())
GType gwy_byte_order_get_type(void) G_GNUC_CONST;
#define GWY_TYPE_BYTE_ORDER (gwy_byte_order_get_type())
-GType gwy_expr_error_get_type(void) G_GNUC_CONST;
-#define GWY_TYPE_EXPR_ERROR (gwy_expr_error_get_type())
-
G_END_DECLS
#endif /* __GWYDDION_TYPES_H__ */
diff --git a/libgwyddion/gwyenum.h b/libgwyddion/gwyenum.h
index fe1d9ce..ea052f9 100644
--- a/libgwyddion/gwyenum.h
+++ b/libgwyddion/gwyenum.h
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: gwyenum.h 15790 2013-12-26 12:10:09Z yeti-dn $
+ * @(#) $Id: gwyenum.h 19818 2017-05-31 11:41:43Z yeti-dn $
* Copyright (C) 2005 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -43,7 +43,7 @@ const gchar* gwy_enum_to_string (gint enumval,
const GwyEnum *enum_table,
gint n);
gchar* gwy_enuml_to_string (gint enumval,
- ...);
+ ...) G_GNUC_NULL_TERMINATED;
gint gwy_string_to_flags (const gchar *str,
const GwyEnum *enum_table,
gint n,
diff --git a/libgwyddion/gwymath.c b/libgwyddion/gwymath.c
index 32c6425..2f69c5c 100644
--- a/libgwyddion/gwymath.c
+++ b/libgwyddion/gwymath.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: gwymath.c 19134 2016-10-30 14:53:05Z yeti-dn $
+ * @(#) $Id: gwymath.c 20264 2017-08-13 11:01:18Z yeti-dn $
* Copyright (C) 2003-2016 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -977,7 +977,41 @@ gwy_math_curvature(const gdouble *coeffs,
}
/**
- * gwy_math_refine_maximum:
+ * gwy_math_refine_maximum_1d:
+ * @y: Array of length 3, containing the neighbourhood values with the maximum
+ * in the centre.
+ * @x: Location to store the refined @x-coordinate.
+ *
+ * Performs subpixel refinement of parabolic a one-dimensional maximum.
+ *
+ * The central value corresponds to x-coordinate 0, distances between values
+ * are unity. The refinement is based by fitting a parabola through the
+ * maximum. If it fails or the calculated maximum lies farther than the
+ * surrounding values the function sets the refined maximum to the origin and
+ * returns %FALSE.
+ *
+ * Returns: %TRUE if the refinement succeeded, %FALSE if it failed. The value
+ * of @x is usable regardless of the return value.
+ *
+ * Since: 2.49
+ **/
+gboolean
+gwy_math_refine_maximum_1d(const gdouble *y, gdouble *x)
+{
+ gdouble b, D;
+
+ *x = 0.0;
+ D = y[2] + y[0] - 2.0*y[1];
+ b = 0.5*(y[0] - y[2]);
+ if (fabs(D) < fabs(b))
+ return FALSE;
+
+ *x = b/D;
+ return TRUE;
+}
+
+/**
+ * gwy_math_refine_maximum_2d:
* @z: Array of length 9, containing the square 3x3 neighbourhood values in
* matrix order and with the maximum in the centre.
* @x: Location to store the refined @x-coordinate.
@@ -994,11 +1028,11 @@ gwy_math_curvature(const gdouble *coeffs,
* Returns: %TRUE if the refinement succeeded, %FALSE if it failed. The values
* of @x and @y are usable regardless of the return value.
*
- * Since: 2.42
+ * Since: 2.49
**/
gboolean
-gwy_math_refine_maximum(const gdouble *z,
- gdouble *x, gdouble *y)
+gwy_math_refine_maximum_2d(const gdouble *z,
+ gdouble *x, gdouble *y)
{
gdouble sz, szx, szy, szxx, szxy, szyy;
gdouble bx, by, cxx, cxy, cyy, D, sx, sy;
@@ -1041,7 +1075,7 @@ gwy_math_refine_maximum(const gdouble *z,
/* Don't trust the sub-pixel refinement if it moves the maximum too far
* from the centre. */
- if (fabs(sx) > 1.0 || fabs(sy) > 1.0)
+ if (sx*sx + sy*sy > 2.0)
return FALSE;
*x = sx;
@@ -1050,6 +1084,250 @@ gwy_math_refine_maximum(const gdouble *z,
}
/**
+ * gwy_math_refine_maximum:
+ * @z: Array of length 9, containing the square 3x3 neighbourhood values in
+ * matrix order and with the maximum in the centre.
+ * @x: Location to store the refined @x-coordinate.
+ * @y: Location to store the refined @y-coordinate.
+ *
+ * Performs subpixel refinement of parabolic a two-dimensional maximum.
+ *
+ * An alias for gwy_math_refine_maximum_2d().
+ *
+ * Returns: %TRUE if the refinement succeeded, %FALSE if it failed. The values
+ * of @x and @y are usable regardless of the return value.
+ *
+ * Since: 2.42
+ **/
+gboolean
+gwy_math_refine_maximum(const gdouble *z, gdouble *x, gdouble *y)
+{
+ return gwy_math_refine_maximum_2d(z, x, y);
+}
+
+static guint
+estimate_regular_res(gdouble *pos, gint n, gdouble *minpos, gdouble *maxpos)
+{
+ gdouble maxstep = 0.0;
+ guint k, res;
+
+ gwy_math_sort(n, pos);
+ *minpos = pos[0];
+ *maxpos = pos[n-1];
+ gwy_debug("range [%g,%g]", *minpos, *maxpos);
+ if (maxpos <= minpos)
+ return 0;
+
+ for (k = 1; k < n; k++) {
+ if (pos[k] - pos[k-1] > maxstep)
+ maxstep = pos[k] - pos[k-1];
+ }
+ gwy_debug("maxstep %g", maxstep);
+ res = (gint)ceil((*maxpos - *minpos)/maxstep) + 1;
+ gwy_debug("estimated res %d", res);
+
+ if (n % res != 0)
+ return 0;
+
+ return res;
+}
+
+/**
+ * gwy_check_regular_2d_grid:
+ * @coords: Array of @n coordinate pairs in plane. You can also typecast
+ * #GwyXY or #GwyXYZ to doubles.
+ * @stride: Actual number of double values in one block. It must be at least
+ * 2 if @coords contains just alternating @x and @y. If you pass an
+ * typecast #GwyXYZ array give stride as 3, etc.
+ * @n: Number of items in @coords.
+ * @tolerance: Relative distance from pixel center which is still considered
+ * OK. Pass a negative value for some reasonable default.
+ * The maximum meaningful value is 0.5, beyond that the point would
+ * end up in a different pixel.
+ * @xres: Location where to store the number of columns.
+ * @yres: Location where to store the number of rows.
+ * @xymin: Location where to store the minimum coordinates (top left corner).
+ * @xystep: Location where to store the pixel size.
+ *
+ * Detects if points in plane form a regular rectangular grid oriented along
+ * the Cartesian axes.
+ *
+ * Points lying in one straight line are not considered to form a rectangle.
+ *
+ * When the function fails, i.e. the points do not form a regular grid, the
+ * values of output arguments are undefined.
+ *
+ * Returns: On success, a newly allocated array mapping grid indices
+ * (@i*@xres+ at j) to indices in @coords. %NULL is returned on failure.
+ *
+ * Since: 2.48
+ **/
+guint*
+gwy_check_regular_2d_grid(const gdouble *coords, guint stride, guint n,
+ gdouble tolerance,
+ guint *pxres, guint *pyres,
+ GwyXY *xymin, GwyXY *xystep)
+{
+ gdouble xmin, xmax, ymin, ymax, dx, dy;
+ gint xres, yres;
+ guint k;
+ gdouble *pos;
+ guint *map;
+ gboolean *encountered;
+
+ g_return_val_if_fail(stride >= 2, NULL);
+ g_return_val_if_fail(coords || !n, NULL);
+ g_return_val_if_fail(pxres && pyres && xymin && xystep, NULL);
+
+ if (n < 4)
+ return NULL;
+
+ if (tolerance < 0.0)
+ tolerance = 0.05;
+
+ pos = g_new(gdouble, n);
+ gwy_debug("estimating yres from rows");
+ for (k = 0; k < n; k++)
+ pos[k] = coords[k*stride + 1];
+ yres = estimate_regular_res(pos, n, &ymin, &ymax);
+
+ gwy_debug("estimating xres from columns");
+ for (k = 0; k < n; k++)
+ pos[k] = coords[k*stride];
+ xres = estimate_regular_res(pos, n, &xmin, &xmax);
+
+ g_free(pos);
+
+ if (yres) {
+ xres = n/yres;
+ gwy_debug("from rows xres %u, yres %u", xres, yres);
+ }
+ else if (xres) {
+ yres = n/xres;
+ gwy_debug("from columns xres %u, yres %u", xres, yres);
+ }
+ else
+ return NULL;
+
+ dx = (xmax - xmin)/(xres - 1);
+ dy = (ymax - ymin)/(yres - 1);
+ xmin -= 0.5*dx;
+ xmax += 0.5*dx;
+ ymin -= 0.5*dy;
+ ymax += 0.5*dy;
+
+ map = g_new(guint, n);
+ encountered = g_new0(gboolean, n);
+ for (k = 0; k < n; k++) {
+ gdouble y = (coords[k*stride + 1] - ymin)/dy;
+ gdouble x = (coords[k*stride + 0] - xmin)/dx;
+ gint i = (gint)floor(y);
+ gint j = (gint)floor(x);
+
+ if (i < 0 || i >= yres || j < 0 || j >= xres) {
+ g_critical("Points not inside estimated region?!");
+ goto fail;
+ }
+ if (fabs(x - j - 0.5) > tolerance || fabs(y - i - 0.5) > tolerance) {
+ gwy_debug("(%g,%g) too far from (%g,%g)", x, y, j+0.5, i+0.5);
+ goto fail;
+ }
+ if (encountered[i*xres + j])
+ goto fail;
+
+ encountered[i*xres + j] = TRUE;
+ map[i*xres + j] = k;
+ }
+
+ g_free(encountered);
+ xymin->x = xmin;
+ xymin->y = ymin;
+ xystep->x = dx;
+ xystep->y = dy;
+ *pxres = xres;
+ *pyres = yres;
+ return map;
+
+fail:
+ g_free(map);
+ g_free(encountered);
+ return NULL;
+}
+
+/**
+ * gwy_math_histogram:
+ * @values: Values to make histogram from.
+ * @n: Number of values in @values.
+ * @min: Minimum value to consider (left edge of histogram).
+ * @max: Maximum value to consider (right edge of histogram).
+ * @nbins: Number of histogram bins (number of @counts items), a positive
+ * number.
+ * @counts: Array where to store the counts.
+ *
+ * Counts the numbers of values falling into equal-sized bins.
+ *
+ * The value of @min must not be larger than @max. The values may lie outside
+ * [@min, at max]. They are not counted in the histogram, nor the returned total.
+ *
+ * Rounding rules for values exactly at the edge of two bins are arbitrary
+ * and must not be relied upon.
+ *
+ * Returns: The number of values inside the entire histogram, i.e. at most @n
+ * but possibly a reduced count.
+ *
+ * Since: 2.49
+ **/
+guint
+gwy_math_histogram(const gdouble *values,
+ guint n,
+ gdouble min,
+ gdouble max,
+ guint nbins,
+ guint *counts)
+{
+ guint i, total = 0;
+ gint nb;
+ gdouble d;
+
+ g_return_val_if_fail(nbins > 0, 0);
+ g_return_val_if_fail(counts, 0);
+ g_return_val_if_fail(values || !n, 0);
+ g_return_val_if_fail(min <= max, 0);
+
+ gwy_clear(counts, nbins);
+ d = max - min;
+ if (G_UNLIKELY(!(d > 0.0))) {
+ for (i = 0; i < n; i++) {
+ if (values[i] == min)
+ counts[0]++;
+ }
+ return counts[0];
+ }
+
+ d = nbins/d;
+ nb = nbins;
+ for (i = 0; i < n; i++) {
+ gdouble v = values[i];
+ gint bi;
+
+ if (v < min || v > max)
+ continue;
+
+ bi = (gint)floor((v - min)*d);
+ if (G_LIKELY(bi >= 0 && bi < nb)) {
+ counts[bi]++;
+ total++;
+ }
+ else if (v == max) {
+ counts[nbins-1]++;
+ total++;
+ }
+ }
+
+ return total;
+}
+
+/**
* gwy_xlnx_int:
* @x: Value to calculate @x*log(@x) of.
*
@@ -1402,8 +1680,6 @@ gwy_math_median_uncertainty(gsize n, gdouble *array, gdouble *uarray)
}
}
-
-
/************************** Documentation ****************************/
/**
diff --git a/libgwyddion/gwymath.h b/libgwyddion/gwymath.h
index 36a1085..dc05f4d 100644
--- a/libgwyddion/gwymath.h
+++ b/libgwyddion/gwymath.h
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: gwymath.h 19134 2016-10-30 14:53:05Z yeti-dn $
+ * @(#) $Id: gwymath.h 19750 2017-05-16 09:35:02Z yeti-dn $
* Copyright (C) 2003-2016 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -123,9 +123,22 @@ guint gwy_math_curvature (const gdouble *coeffs,
gdouble *xc,
gdouble *yc,
gdouble *zc);
+gboolean gwy_math_refine_maximum_1d (const gdouble *y,
+ gdouble *x);
+gboolean gwy_math_refine_maximum_2d (const gdouble *z,
+ gdouble *x,
+ gdouble *y);
gboolean gwy_math_refine_maximum (const gdouble *z,
gdouble *x,
gdouble *y);
+guint* gwy_check_regular_2d_grid (const gdouble *coords,
+ guint stride,
+ guint n,
+ gdouble tolerance,
+ guint *xres,
+ guint *yres,
+ GwyXY *xymin,
+ GwyXY *xystep) G_GNUC_MALLOC;
gdouble gwy_math_median (gsize n,
gdouble *array);
void gwy_math_sort (gsize n,
@@ -134,6 +147,12 @@ gdouble gwy_math_median_uncertainty (gsize n,
gdouble *array,
gdouble *uarray);
gdouble gwy_xlnx_int (guint x) G_GNUC_CONST;
+guint gwy_math_histogram (const gdouble *values,
+ guint n,
+ gdouble min,
+ gdouble max,
+ guint nbins,
+ guint *counts);
G_END_DECLS
diff --git a/libgwyddion/gwymathfallback.h b/libgwyddion/gwymathfallback.h
index 0f01690..6e2d95a 100644
--- a/libgwyddion/gwymathfallback.h
+++ b/libgwyddion/gwymathfallback.h
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: gwymathfallback.h 18915 2016-09-04 20:37:09Z yeti-dn $
+ * @(#) $Id: gwymathfallback.h 20151 2017-08-03 08:47:10Z yeti-dn $
* Copyright (C) 2007-2016 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -130,13 +130,19 @@ gwy_math_fallback_isnan(double x)
#endif /* GWY_MATH_NAMESPACE_CLEAN */
-#ifdef GWY_HAVE_ISINF
+/* GCC's fast math makes isinf no-op. Must use the fallback function.
+ * Gwyddion works with finite arithmetic, but we need to detect INFs upon
+ * file import and remove it. */
+#if (defined(GWY_HAVE_ISINF) && !defined(__FAST_MATH__))
#define gwy_isinf isinf
#else
#define gwy_isinf gwy_math_fallback_isinf
#endif /* GWY_HAVE_ISINF */
-#ifdef GWY_HAVE_ISNAN
+/* GCC's fast math makes isnan no-op. Must use the fallback function.
+ * Gwyddion works with finite arithmetic, but we need to detect NaNs upon
+ * file import and remove it. */
+#if (defined(GWY_HAVE_ISNAN) && !defined(__FAST_MATH__))
#define gwy_isnan isnan
#else
#define gwy_isnan gwy_math_fallback_isnan
diff --git a/libgwyddion/gwynlfit.c b/libgwyddion/gwynlfit.c
index a3acf29..bbb4c98 100644
--- a/libgwyddion/gwynlfit.c
+++ b/libgwyddion/gwynlfit.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: gwynlfit.c 19150 2016-10-31 21:34:48Z yeti-dn $
+ * @(#) $Id: gwynlfit.c 19529 2017-03-16 22:17:27Z yeti-dn $
* Copyright (C) 2000-2003 Martin Siler.
* Copyright (C) 2004-2016 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
@@ -703,7 +703,7 @@ gwy_math_nlfit_fit_real(GwyNLFitter *nlfit,
for (j = 0; j < i; j++) {
gint jid = var_param_id[j];
- if (iid == G_MAXDOUBLE || jid == G_MAXDOUBLE)
+ if (iid < 0 || jid < 0)
SLi(nlfit->covar, i, j) = 0.0;
else
SLi(nlfit->covar, i, j) = SLi(save_a, iid, jid);
@@ -1063,7 +1063,8 @@ gwy_math_nlfit_succeeded(GwyNLFitter *nlfit)
*
* Returns the standard deviation of parameter number @par.
*
- * This function makes sense only after a successful fit.
+ * This function makes sense only after a successful fit and for a free
+ * parameter.
*
* Returns: The SD of @par-th parameter.
**/
@@ -1331,7 +1332,9 @@ free_private_data(GwyNLFitter *fitter)
* @i: Data index from the set {0, 1, 2, ..., ndata-1}.
* @param: Parameters.
* @fixed_param: Which parameters should be treated as fixed (corresponding
- * entries are set to %TRUE).
+ * entries are set to %TRUE). It may be %NULL is no parameters
+ * are fixed. The function must set derivatives by fixed
+ * parameters to zero.
* @func: The fitted function.
* @user_data: User data as passed to gwy_math_nlfit_fit().
* @der: Array where the @nparam partial derivatives by each parameter are
diff --git a/libgwyddion/gwynlfitpreset.c b/libgwyddion/gwynlfitpreset.c
index 776b443..878b465 100644
--- a/libgwyddion/gwynlfitpreset.c
+++ b/libgwyddion/gwynlfitpreset.c
@@ -1,7 +1,7 @@
/*
- * @(#) $Id: gwynlfitpreset.c 19146 2016-10-31 16:29:54Z yeti-dn $
+ * @(#) $Id: gwynlfitpreset.c 20262 2017-08-12 10:49:32Z yeti-dn $
* Copyright (C) 2000-2003 Martin Siler.
- * Copyright (C) 2004 David Necas (Yeti), Petr Klapetek.
+ * Copyright (C) 2004-2017 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
* This program is free software; you can redistribute it and/or modify
@@ -33,6 +33,34 @@ gwy_nlfit_preset_new_static(const GwyNLFitPresetBuiltin *data);
G_DEFINE_TYPE(GwyNLFitPreset, gwy_nlfit_preset, GWY_TYPE_RESOURCE)
+G_GNUC_UNUSED
+static gdouble
+_gwy_gamma(gdouble x)
+{
+ static const gdouble p[] = {
+ 676.5203681218851,
+ -1259.1392167224028,
+ 771.32342877765313,
+ -176.61502916214059,
+ 12.507343278686905,
+ -0.13857109526572012,
+ 9.9843695780195716e-6,
+ 1.5056327351493116e-7
+ };
+ gdouble xi = 0.99999999999980993, t;
+ guint i;
+
+ if (x < 0.5)
+ return G_PI/(sin(G_PI*x)*_gwy_gamma(1.0 - x));
+
+ x -= 1.0;
+ for (i = 0; i < G_N_ELEMENTS(p); i++)
+ xi += p[i]/(x + i + 1);
+
+ t = x + G_N_ELEMENTS(p) - 0.5;
+ return sqrt(2.0*G_PI) * pow(t, x + 0.5) * exp(-t) * xi;
+}
+
/*********************** gaussian *****************************/
static gdouble
gauss_func(gdouble x,
@@ -759,6 +787,52 @@ exp_rpsdf_guess(gint n_dat,
*fres = TRUE;
}
+/******************** K-correlated PSDF ***************************/
+
+/* XXX: σ² = s² β(1/2, (C-1)/2)
+ * But we cannot normalise to σ² because C and σ are terribly correlated. */
+static gdouble
+kcorr_psdf_func(gdouble x,
+ G_GNUC_UNUSED gint n_param,
+ const gdouble *b,
+ G_GNUC_UNUSED gpointer user_data,
+ gboolean *fres)
+{
+ gdouble s = b[0], T = b[1], C = b[2], t;
+
+ if (T == 0.0 || C <= 0.0) {
+ *fres = FALSE;
+ return 0.0;
+ }
+ *fres = TRUE;
+ t = T*x;
+ return T*s*s/pow(1.0 + t*t, 0.5*(C + 1.0));
+}
+
+static void
+kcorr_psdf_guess(gint n_dat,
+ const gdouble *x,
+ const gdouble *y,
+ gdouble *param,
+ gboolean *fres)
+{
+ exp_psdf_guess(n_dat, x, y, param, fres);
+ /* Usually C is around 1. We probably cannot guess it better... */
+ param[2] = 0.2;
+}
+
+static GwySIUnit*
+kcorr_psdf_get_units(GwyNLFitPreset *preset,
+ guint param,
+ GwySIUnit *siunit_x,
+ GwySIUnit *siunit_y)
+{
+ if (param == 2)
+ return gwy_si_unit_new(NULL);
+
+ return psdf_get_units(preset, param, siunit_x, siunit_y);
+}
+
/************** polynomial 0th order ********************************/
static gdouble
poly_0_func(G_GNUC_UNUSED gdouble x,
@@ -1078,13 +1152,14 @@ smstep_guess(gint n_dat,
param[3] = (yleft/nleft < yright/nright) ? ymax - ymin : ymin - ymax;
else
param[3] = (xymax > xymin) ? ymax - ymin : ymin - ymax;
- param[4] = 0.0;
- param[5] = 0.0;
+ /* Using zero here prevents L-M from making progress. */
+ param[4] = 0.05*param[3]/(xmax - xmin);
+ param[5] = param[4]/(xmax - xmin);
*fres = TRUE;
}
-/******************* bent step ********************************/
+/******************* erf bent step ********************************/
static gdouble
bentstep_func(gdouble x,
G_GNUC_UNUSED gint n_param,
@@ -1109,6 +1184,31 @@ bentstep_func(gdouble x,
return f;
}
+/******************* tanh bent step ********************************/
+static gdouble
+boltzmannstep_func(gdouble x,
+ G_GNUC_UNUSED gint n_param,
+ const gdouble *b,
+ G_GNUC_UNUSED gpointer user_data,
+ gboolean *fres)
+{
+ gdouble xc = b[0], yc = b[1], w = b[2], h = b[3], alpha = b[4], beta = b[5];
+ gdouble f;
+
+ *fres = TRUE;
+
+ *fres = TRUE;
+ x -= xc;
+ w = fabs(w);
+ f = yc + alpha*x + beta*x*x;
+ if (w == 0.0)
+ f += (x > 0.0) ? 0.5*h : -0.5*h;
+ else
+ f += h*tanh(x/w)/2.0;
+
+ return f;
+}
+
/******************* power function ********************************/
static gdouble
power_func(gdouble x,
@@ -1377,6 +1477,13 @@ static const GwyNLFitParam gauss2_four_params[] = {
{ "T<sub>2</sub>", 1, 0, },
};
+/* XXX: s power is fractional, attempted to fix case-by-case */
+static const GwyNLFitParam kcorr_psdf_params[] = {
+ { "s", 0, 0, },
+ { "T", 1, 0, },
+ { "C", 0, 0, },
+};
+
static const GwyNLFitParam poly3_params[] = {
{ "a", 0, 1, },
{ "b", -1, 1, },
@@ -1501,7 +1608,7 @@ static const GwyNLFitPresetBuiltin fitting_presets[] = {
NULL,
&gauss_rpsdf_guess,
&psdf_get_units,
- &weights_linear_decrease,
+ NULL,
G_N_ELEMENTS(gauss_two_params),
gauss_two_params,
},
@@ -1580,11 +1687,25 @@ static const GwyNLFitPresetBuiltin fitting_presets[] = {
NULL,
&exp_rpsdf_guess,
&psdf_get_units,
- &weights_linear_decrease,
+ NULL,
G_N_ELEMENTS(gauss_two_params),
gauss_two_params,
},
{
+ N_("K-correlated (PSDF)"),
+ "<i>f</i>(<i>x</i>) "
+ "= s<sup>2</sup><i>T</i>"
+ "/[1 + <i>x</i><sup>2</sup><i>T</i><sup>2</sup>]"
+ "<sup><i>C</i>/2</sup>",
+ &kcorr_psdf_func,
+ NULL,
+ &kcorr_psdf_guess,
+ &kcorr_psdf_get_units,
+ NULL,
+ G_N_ELEMENTS(kcorr_psdf_params),
+ kcorr_psdf_params,
+ },
+ {
N_("Polynomial (order 0)"),
"<i>f</i>(<i>x</i>) = <i>a</i>",
&poly_0_func,
@@ -1697,6 +1818,22 @@ static const GwyNLFitPresetBuiltin fitting_presets[] = {
bentstep_params,
},
{
+ N_("Boltzmann bent step"),
+ "<i>f</i>(<i>x</i>) "
+ "= y<sub>0</sub> "
+ "+ <i>h</i>/2 tanh(<i>ξ</i>/<i>w</i>) "
+ "+ <i>α</i><i>ξ</i> "
+ "+ <i>β</i><i>ξ</i><sup>2</sup>, "
+ "<i>ξ</i> = <i>x</i> − <i>x</i><sub>0</sub>",
+ &boltzmannstep_func,
+ NULL,
+ &smstep_guess,
+ NULL,
+ NULL,
+ G_N_ELEMENTS(bentstep_params),
+ bentstep_params,
+ },
+ {
N_("Power"),
"<i>f</i>(<i>x</i>) "
"= <i>a</i> + <i>b</i><i>x</i><sup><i>c</i></sup>",
@@ -2096,6 +2233,16 @@ gwy_nlfit_presets(void)
* <member><literal>"Smooth slanted step"</literal></member>
* </simplelist>
*
+ * The following presets are available since version 2.48:
+ * <simplelist type='vert'>
+ * <member><literal>"K-correlated (PSDF)"</literal></member>
+ * </simplelist>
+ *
+ * The following presets are available since version 2.49:
+ * <simplelist type='vert'>
+ * <member><literal>"Boltzmann bent step"</literal></member>
+ * </simplelist>
+ *
* The result of the fitting is stored in a normal #GwyNLFitter, therefore the
* typical use is:
*
diff --git a/libgwyddion/gwysiunit.c b/libgwyddion/gwysiunit.c
index 3d89ae4..86c7861 100644
--- a/libgwyddion/gwysiunit.c
+++ b/libgwyddion/gwysiunit.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: gwysiunit.c 19216 2016-11-09 10:39:06Z yeti-dn $
+ * @(#) $Id: gwysiunit.c 20108 2017-07-29 13:00:31Z yeti-dn $
* Copyright (C) 2004-2016 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -563,7 +563,7 @@ gwy_si_unit_get_format(GwySIUnit *siunit,
/**
* gwy_si_unit_get_format_with_resolution:
- * @siunit: A SI unit.
+ * @siunit: An SI unit.
* @style: Unit format style.
* @maximum: The maximum value to be represented.
* @resolution: The smallest step (approximately) that should make a visible
@@ -614,7 +614,7 @@ gwy_si_unit_get_format_with_resolution(GwySIUnit *siunit,
/**
* gwy_si_unit_get_format_with_digits:
- * @siunit: A SI unit.
+ * @siunit: An SI unit.
* @style: Unit format style.
* @maximum: The maximum value to be represented.
* @sdigits: The number of significant digits the value should have.
@@ -665,12 +665,12 @@ gwy_si_unit_get_format_with_digits(GwySIUnit *siunit,
/**
* gwy_si_unit_equal:
- * @siunit1: First unit.
+ * @siunit: First unit.
* @siunit2: Second unit.
*
* Checks whether two SI units are equal.
*
- * Returns: %TRUE if units are equal.
+ * Returns: %TRUE if the units are equal.
**/
gboolean
gwy_si_unit_equal(GwySIUnit *siunit1, GwySIUnit *siunit2)
@@ -705,6 +705,47 @@ gwy_si_unit_equal(GwySIUnit *siunit1, GwySIUnit *siunit2)
return TRUE;
}
+/**
+ * gwy_si_unit_equal_string:
+ * @siunit: An SI unit.
+ * @unit_string: Unit string (it can be %NULL for an empty unit).
+ *
+ * Checks whether an SI unit corresponds to given string.
+ *
+ * Any power-of-ten prefixes are ignored. This function is mostly useful for
+ * quick comparison with simple units such as "m" and for checking whether a
+ * unit is non-empty (by comparing with %NULL or an empty string).
+ *
+ * Returns: %TRUE if the units is equivalent to the given string.
+ *
+ * Since: 2.49
+ **/
+gboolean
+gwy_si_unit_equal_string(GwySIUnit *siunit,
+ const gchar *unit_string)
+{
+ GwySIUnit *tmpunit;
+ gboolean retval;
+
+ g_return_val_if_fail(GWY_IS_SI_UNIT(siunit), FALSE);
+
+ if (!unit_string || !*unit_string)
+ return !siunit->units->len;
+
+ if (siunit->units->len == 1) {
+ GwySimpleUnit *unit = &g_array_index(siunit->units, GwySimpleUnit, 0);
+ if (gwy_strequal(g_quark_to_string(unit->unit), unit_string))
+ return TRUE;
+ /* If they differ we cannot make any conclusion. */
+ }
+
+ tmpunit = gwy_si_unit_new_parse(unit_string, NULL);
+ retval = gwy_si_unit_equal(siunit, tmpunit);
+ g_object_unref(tmpunit);
+
+ return retval;
+}
+
/* fix all kinds of sloppy and strange notations */
static void
fix_unit_name(GString *str)
diff --git a/libgwyddion/gwysiunit.h b/libgwyddion/gwysiunit.h
index 5cafeb1..16bbd93 100644
--- a/libgwyddion/gwysiunit.h
+++ b/libgwyddion/gwysiunit.h
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: gwysiunit.h 19201 2016-11-07 21:07:07Z yeti-dn $
+ * @(#) $Id: gwysiunit.h 20108 2017-07-29 13:00:31Z yeti-dn $
* Copyright (C) 2004-2016 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -92,8 +92,10 @@ GwySIUnit* gwy_si_unit_power_multiply (GwySIUnit *siunit1,
GwySIUnit *siunit2,
gint power2,
GwySIUnit *result);
-gboolean gwy_si_unit_equal (GwySIUnit *siunit1,
+gboolean gwy_si_unit_equal (GwySIUnit *siunit,
GwySIUnit *siunit2);
+gboolean gwy_si_unit_equal_string (GwySIUnit *siunit,
+ const gchar *unit_string);
GwySIValueFormat* gwy_si_unit_get_format (GwySIUnit *siunit,
GwySIUnitFormatStyle style,
diff --git a/libgwyddion/gwyutils.c b/libgwyddion/gwyutils.c
index abe1751..0daf476 100644
--- a/libgwyddion/gwyutils.c
+++ b/libgwyddion/gwyutils.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: gwyutils.c 19216 2016-11-09 10:39:06Z yeti-dn $
+ * @(#) $Id: gwyutils.c 19821 2017-05-31 15:21:55Z yeti-dn $
* Copyright (C) 2003-2016 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -1840,6 +1840,128 @@ gwy_object_set_or_reset(gpointer object,
g_object_thaw_notify(object);
}
+/**
+ * gwy_set_member_object:
+ * @instance: An object instance.
+ * @member_object: Another object to be owned by @instanced, or %NULL.
+ * @expected_type: The type of @member_object. It is checked and a critical
+ * message is emitted if it does not conform.
+ * @member_field: Pointer to location storing the current member object to
+ * be replaced by @member_object.
+ * @...: List of quadruplets of the form signal name, #GCallback callback,
+ * #gulong pointer to location to hold the signal handler id, and
+ * #GConnectFlags connection flags.
+ *
+ * Replaces a member object of another object, handling signal connection and
+ * disconnection.
+ *
+ * If @member_object is not %NULL a reference is taken, sinking any floating
+ * objects (and conversely, the reference to the previous member object is
+ * released).
+ *
+ * The purpose is to simplify bookkeeping in classes that have settable
+ * member objects and (usually but not necessarily) need to connect to some
+ * signals of these member objects. Since this function both connects and
+ * disconnects signals it must be always called with the same set of signals,
+ * including callbacks and flags, for a specific member object.
+ *
+ * Example for a <type>GwyFoo</type> class owning a #GwyGradient member object,
+ * assuming the usual conventions:
+ * |[
+ * typedef struct _GwyFooPrivate GwyFooPrivate;
+ *
+ * struct _GwyFooPrivate {
+ * GwyGradient *gradient;
+ * gulong gradient_data_changed_id;
+ * };
+ *
+ * static gboolean
+ * set_gradient(GwyFoo *foo)
+ * {
+ * GwyFooPrivate *priv = G_TYPE_INSTANCE_GET_PRIVATE(foo, GWY_TYPE_FOO,
+ * GwyFooPrivate);
+ * if (!gwy_set_member_object(foo, gradient, GWY_TYPE_GRADIENT,
+ * &priv->gradient,
+ * "data-changed", &foo_gradient_data_changed,
+ * &priv->gradient_data_changed_id,
+ * G_CONNECT_SWAPPED,
+ * NULL))
+ * return FALSE;
+ *
+ * // Do whatever else needs to be done if the gradient changes.
+ * return TRUE;
+ * }
+ * ]|
+ * The gradient setter then usually only calls
+ * <function>set_gradient()</function> and disposing of the member object again
+ * only calls <function>set_gradient()</function> but with %NULL gradient.
+ *
+ * Returns: %TRUE if @member_field was changed. %FALSE means the new
+ * member is identical to the current one and the function reduced to
+ * no-op (or that an assertion faled).
+ *
+ * Since: 2.49
+ **/
+gboolean
+gwy_set_member_object(gpointer instance,
+ gpointer member_object,
+ GType expected_type,
+ gpointer member_field,
+ ...)
+{
+ gpointer *pmember = (gpointer*)member_field;
+ gpointer old_member = *pmember;
+ const gchar *signal_name;
+
+ if (old_member == member_object)
+ return FALSE;
+
+ g_return_val_if_fail(!member_object
+ || G_TYPE_CHECK_INSTANCE_TYPE(member_object,
+ expected_type),
+ FALSE);
+
+ if (member_object)
+ g_object_ref_sink(member_object);
+
+ if (old_member) {
+ va_list ap;
+ va_start(ap, member_field);
+ for (signal_name = va_arg(ap, const gchar*);
+ signal_name;
+ signal_name = va_arg(ap, const gchar*)) {
+ G_GNUC_UNUSED GCallback handler = va_arg(ap, GCallback);
+ gulong *handler_id = va_arg(ap, gulong*);
+ G_GNUC_UNUSED GConnectFlags flags = va_arg(ap, GConnectFlags);
+ g_signal_handler_disconnect(old_member, *handler_id);
+ *handler_id = 0;
+ }
+ va_end(ap);
+ }
+
+ *pmember = member_object;
+
+ if (member_object) {
+ va_list ap;
+ va_start(ap, member_field);
+ for (signal_name = va_arg(ap, const gchar*);
+ signal_name;
+ signal_name = va_arg(ap, const gchar*)) {
+ GCallback handler = va_arg(ap, GCallback);
+ gulong *handler_id = va_arg(ap, gulong*);
+ GConnectFlags flags = va_arg(ap, GConnectFlags);
+ *handler_id = g_signal_connect_data(member_object, signal_name,
+ handler, instance, NULL,
+ flags);
+ }
+ va_end(ap);
+ }
+
+ if (old_member)
+ g_object_unref(old_member);
+
+ return TRUE;
+}
/**
* gwy_fopen:
diff --git a/libgwyddion/gwyutils.h b/libgwyddion/gwyutils.h
index 7b2effc..a806570 100644
--- a/libgwyddion/gwyutils.h
+++ b/libgwyddion/gwyutils.h
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: gwyutils.h 18799 2016-08-01 07:15:50Z yeti-dn $
+ * @(#) $Id: gwyutils.h 19821 2017-05-31 15:21:55Z yeti-dn $
* Copyright (C) 2003-2011 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -72,7 +72,7 @@ gboolean gwy_ascii_strcase_equal (gconstpointer v1,
gconstpointer v2);
guint gwy_ascii_strcase_hash (gconstpointer v);
guint gwy_stramong (const gchar *str,
- ...);
+ ...) G_GNUC_NULL_TERMINATED;
gpointer gwy_memmem (gconstpointer haystack,
gsize haystack_len,
gconstpointer needle,
@@ -112,7 +112,12 @@ void gwy_convert_raw_data (gconstpointer data,
guint gwy_raw_data_size (GwyRawDataType datatype);
void gwy_object_set_or_reset (gpointer object,
GType type,
- ...);
+ ...) G_GNUC_NULL_TERMINATED;
+gboolean gwy_set_member_object (gpointer instance,
+ gpointer member_object,
+ GType expected_type,
+ gpointer member_field,
+ ...) G_GNUC_NULL_TERMINATED;
#ifdef G_OS_WIN32
FILE* gwy_fopen (const gchar *filename,
const gchar *mode);
diff --git a/libgwyddion/gwyversion.h b/libgwyddion/gwyversion.h
index a731f56..2f84ed9 100644
--- a/libgwyddion/gwyversion.h
+++ b/libgwyddion/gwyversion.h
@@ -27,8 +27,8 @@
G_BEGIN_DECLS
#define GWY_VERSION_MAJOR 2
-#define GWY_VERSION_MINOR 47
-#define GWY_VERSION_STRING "2.47"
+#define GWY_VERSION_MINOR 49
+#define GWY_VERSION_STRING "2.49"
gint gwy_version_major(void);
gint gwy_version_minor(void);
diff --git a/libgwydgets/Makefile.am b/libgwydgets/Makefile.am
index 4bd8389..038b2c8 100644
--- a/libgwydgets/Makefile.am
+++ b/libgwydgets/Makefile.am
@@ -1,4 +1,4 @@
-# @(#) $Id: Makefile.am 19063 2016-10-12 20:44:52Z yeti-dn $
+# @(#) $Id: Makefile.am 20269 2017-08-14 11:21:07Z yeti-dn $
libgwyddion = $(top_builddir)/libgwyddion/libgwyddion2.la
libgwyprocess = $(top_builddir)/libprocess/libgwyprocess2.la
@@ -18,6 +18,7 @@ libgwydgets2include_HEADERS = \
gwy3dsetup.h \
gwy3dview.h \
gwy3dwindow.h \
+ gwyadjustbar.h \
gwyaxis.h \
gwycoloraxis.h \
gwycolorbutton.h \
@@ -91,6 +92,7 @@ MKENUM_NAME = gwydgettypes
MKENUM_ID = GWYDGET_TYPES
MKENUM_HFILES = \
$(srcdir)/gwydgetenums.h \
+ $(srcdir)/gwyadjustbar.h \
$(srcdir)/gwygrainvaluemenu.h
include $(top_srcdir)/utils/mkenum.mk
@@ -114,7 +116,7 @@ AM_CPPFLAGS = -I$(top_srcdir) -DG_LOG_DOMAIN=\"Gwydgets\"
# Any iface change C++: 0: A
# Adding ifaces C: R: A++
# Changing ifaces C: R: 0
-libversion = -version-info 23:0:23
+libversion = -version-info 25:0:25
#libversion = -release @LIBRARY_RELEASE@
libgwydgets2_la_LDFLAGS = @GTKGLEXT_LIBS@ @BASIC_LIBS@ -export-dynamic $(no_undefined) $(export_symbols) $(libversion)
libgwydgets2_la_LIBADD = $(libgwydgets_libadd)
@@ -124,6 +126,7 @@ libgwydgets2_la_SOURCES = \
gwy3dsetup.c \
gwy3dview.c \
gwy3dwindow.c \
+ gwyadjustbar.c \
gwyaxis.c \
gwyaxisdialog.c \
gwycoloraxis.c \
diff --git a/libgwydgets/Makefile.in b/libgwydgets/Makefile.in
index aa7cfae..ea4eec6 100644
--- a/libgwydgets/Makefile.in
+++ b/libgwydgets/Makefile.in
@@ -14,10 +14,10 @@
@SET_MAKE@
-# @(#) $Id: Makefile.am 19063 2016-10-12 20:44:52Z yeti-dn $
+# @(#) $Id: Makefile.am 20269 2017-08-14 11:21:07Z yeti-dn $
# Generic glib-mkenum rules.
-# @(#) $Id: mkenum.mk 11705 2011-01-03 08:32:55Z yeti-dn $
+# @(#) $Id: mkenum.mk 20080 2017-07-24 16:05:52Z yeti-dn $
#
# Parameters:
# MKENUM_NAME -- output base name
@@ -31,7 +31,7 @@
# MAINTAINERCLEANFILES
# Generic glib-genmarshal rules.
-# @(#) $Id: genmarshal.mk 11705 2011-01-03 08:32:55Z yeti-dn $
+# @(#) $Id: genmarshal.mk 20080 2017-07-24 16:05:52Z yeti-dn $
#
# Parameters:
# GENMARSHAL_NAME -- output base name
@@ -176,15 +176,15 @@ am__installdirs = "$(DESTDIR)$(libdir)" \
"$(DESTDIR)$(libgwydgets2includedir)"
LTLIBRARIES = $(lib_LTLIBRARIES)
am_libgwydgets2_la_OBJECTS = gwy3dlabel.lo gwy3dsetup.lo gwy3dview.lo \
- gwy3dwindow.lo gwyaxis.lo gwyaxisdialog.lo gwycoloraxis.lo \
- gwycolorbutton.lo gwycombobox.lo gwycurve.lo gwydataview.lo \
- gwydataviewlayer.lo gwydatawindow.lo gwydgetenums.lo \
- gwydgetmarshals.lo gwydgets.lo gwydgettypes.lo gwydgetutils.lo \
- gwygrainvaluemenu.lo gwygraph.lo gwygrapharea.lo \
- gwygraphareadialog.lo gwygraphbasics.lo gwygraphcorner.lo \
- gwygraphcurvemodel.lo gwygraphcurves.lo gwygraphdata.lo \
- gwygraphexport.lo gwygraphlabel.lo gwygraphlabeldialog.lo \
- gwygraphmodel.lo gwygraphwindow.lo \
+ gwy3dwindow.lo gwyadjustbar.lo gwyaxis.lo gwyaxisdialog.lo \
+ gwycoloraxis.lo gwycolorbutton.lo gwycombobox.lo gwycurve.lo \
+ gwydataview.lo gwydataviewlayer.lo gwydatawindow.lo \
+ gwydgetenums.lo gwydgetmarshals.lo gwydgets.lo gwydgettypes.lo \
+ gwydgetutils.lo gwygrainvaluemenu.lo gwygraph.lo \
+ gwygrapharea.lo gwygraphareadialog.lo gwygraphbasics.lo \
+ gwygraphcorner.lo gwygraphcurvemodel.lo gwygraphcurves.lo \
+ gwygraphdata.lo gwygraphexport.lo gwygraphlabel.lo \
+ gwygraphlabeldialog.lo gwygraphmodel.lo gwygraphwindow.lo \
gwygraphwindowmeasuredialog.lo gwyhmarkerbox.lo gwyhruler.lo \
gwyinventorystore.lo gwylayer-basic.lo gwylayer-mask.lo \
gwymarkerbox.lo gwynullstore.lo gwyoptionmenus.lo \
@@ -306,10 +306,7 @@ EPYDOC = @EPYDOC@
EXEEXT = @EXEEXT@
EXR_CFLAGS = @EXR_CFLAGS@
EXR_LIBS = @EXR_LIBS@
-FFTW3_1_CFLAGS = @FFTW3_1_CFLAGS@
-FFTW3_1_LIBS = @FFTW3_1_LIBS@
FFTW3_CFLAGS = @FFTW3_CFLAGS@
-FFTW3_DEPENDENCY = @FFTW3_DEPENDENCY@
FFTW3_LIBS = @FFTW3_LIBS@
FGREP = @FGREP@
GCONFTOOL = @GCONFTOOL@
@@ -319,6 +316,8 @@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
GLIBC21 = @GLIBC21@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GMODULE_CFLAGS = @GMODULE_CFLAGS@
GMODULE_LIBS = @GMODULE_LIBS@
GMSGFMT = @GMSGFMT@
@@ -343,7 +342,9 @@ GTK_MAC_LIBS = @GTK_MAC_LIBS@
GWY_VERSION_MAJOR = @GWY_VERSION_MAJOR@
GWY_VERSION_MINOR = @GWY_VERSION_MINOR@
GWY_VERSION_STRING = @GWY_VERSION_STRING@
+HDRIMAGE_EXTRA_CFLAGS = @HDRIMAGE_EXTRA_CFLAGS@
HTML_DIR = @HTML_DIR@
+INKSCAPE = @INKSCAPE@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -401,6 +402,7 @@ PASCAL = @PASCAL@
PATH_SEPARATOR = @PATH_SEPARATOR@
PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
+PNGCRUSH = @PNGCRUSH@
PNG_CFLAGS = @PNG_CFLAGS@
PNG_LIBS = @PNG_LIBS@
POD2MAN = @POD2MAN@
@@ -409,17 +411,13 @@ PYGTK_CFLAGS = @PYGTK_CFLAGS@
PYGTK_CODEGENDIR = @PYGTK_CODEGENDIR@
PYGTK_LIBS = @PYGTK_LIBS@
PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
PYTHON_EXTRA_CFLAGS = @PYTHON_EXTRA_CFLAGS@
PYTHON_INCLUDES = @PYTHON_INCLUDES@
-PYTHON_LIBS = @PYTHON_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
PYTHON_PLATFORM = @PYTHON_PLATFORM@
PYTHON_PREFIX = @PYTHON_PREFIX@
-PYTHON_SYSCFG_BASECFLAGS = @PYTHON_SYSCFG_BASECFLAGS@
-PYTHON_SYSCFG_CCSHARED = @PYTHON_SYSCFG_CCSHARED@
-PYTHON_SYSCFG_LDFLAGS = @PYTHON_SYSCFG_LDFLAGS@
-PYTHON_SYSCFG_LIBDIR = @PYTHON_SYSCFG_LIBDIR@
-PYTHON_SYSCFG_LINKFORSHARED = @PYTHON_SYSCFG_LINKFORSHARED@
PYTHON_VERSION = @PYTHON_VERSION@
RANLIB = @RANLIB@
RUBY = @RUBY@
@@ -518,6 +516,7 @@ libgwydgets2include_HEADERS = \
gwy3dsetup.h \
gwy3dview.h \
gwy3dwindow.h \
+ gwyadjustbar.h \
gwyaxis.h \
gwycoloraxis.h \
gwycolorbutton.h \
@@ -590,11 +589,9 @@ MKENUM_NAME = gwydgettypes
MKENUM_ID = GWYDGET_TYPES
MKENUM_HFILES = \
$(srcdir)/gwydgetenums.h \
+ $(srcdir)/gwyadjustbar.h \
$(srcdir)/gwygrainvaluemenu.h
-
-# TODO: Detect
-GLIB_MKENUMS = glib-mkenums
mkenum_built_sources = $(MKENUM_NAME).h $(MKENUM_NAME).c
@MAINTAINER_MODE_TRUE at mkenum_stamp_files = $(MKENUM_NAME).h.stamp
@MAINTAINER_MODE_TRUE at mkenum_self = $(top_srcdir)/utils/mkenum.mk
@@ -609,9 +606,6 @@ mkenum_built_sources = $(MKENUM_NAME).h $(MKENUM_NAME).c
GENMARSHAL_NAME = gwydgetmarshals
GENMARSHAL_PREFIX = _gwydget_marshal
-
-# TODO: Detect
-GLIB_GENMARSHAL = glib-genmarshal
genmarshal_built_sources = \
$(GENMARSHAL_NAME).h \
$(GENMARSHAL_NAME).c
@@ -626,7 +620,7 @@ AM_CPPFLAGS = -I$(top_srcdir) -DG_LOG_DOMAIN=\"Gwydgets\"
# Any iface change C++: 0: A
# Adding ifaces C: R: A++
# Changing ifaces C: R: 0
-libversion = -version-info 23:0:23
+libversion = -version-info 25:0:25
#libversion = -release @LIBRARY_RELEASE@
libgwydgets2_la_LDFLAGS = @GTKGLEXT_LIBS@ @BASIC_LIBS@ -export-dynamic $(no_undefined) $(export_symbols) $(libversion)
libgwydgets2_la_LIBADD = $(libgwydgets_libadd)
@@ -635,6 +629,7 @@ libgwydgets2_la_SOURCES = \
gwy3dsetup.c \
gwy3dview.c \
gwy3dwindow.c \
+ gwyadjustbar.c \
gwyaxis.c \
gwyaxisdialog.c \
gwycoloraxis.c \
@@ -772,6 +767,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gwy3dsetup.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gwy3dview.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gwy3dwindow.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gwyadjustbar.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gwyaxis.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gwyaxisdialog.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gwycoloraxis.Plo at am__quote@
diff --git a/libgwydgets/gwy3dsetup.c b/libgwydgets/gwy3dsetup.c
index 83fdb2f..e316bc9 100644
--- a/libgwydgets/gwy3dsetup.c
+++ b/libgwydgets/gwy3dsetup.c
@@ -1,6 +1,6 @@
/*
- * @(#) $Id: gwy3dsetup.c 18070 2016-01-11 20:55:02Z yeti-dn $
- * Copyright (C) 2006 David Necas (Yeti), Petr Klapetek.
+ * @(#) $Id: gwy3dsetup.c 20263 2017-08-12 11:13:26Z yeti-dn $
+ * Copyright (C) 2006-2017 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
* This program is free software; you can redistribute it and/or modify
@@ -42,6 +42,9 @@ enum {
PROP_LIGHT_THETA,
PROP_HIDE_MASKED,
PROP_LINE_WIDTH,
+ PROP_FMSCALE_SIZE,
+ PROP_FMSCALE_Y_ALIGN,
+ PROP_FMSCALE_RESERVE_SPACE,
PROP_LAST
};
@@ -129,9 +132,8 @@ gwy_3d_setup_class_init(Gwy3DSetupClass *klass)
(gobject_class,
PROP_FMSCALE_VISIBLE,
g_param_spec_boolean("fmscale-visible",
- "fmscale visible",
- "Whether false color bar is visible "
- "",
+ "Fmscale visible",
+ "Whether false color bar is visible",
FALSE,
G_PARAM_READWRITE));
@@ -217,6 +219,56 @@ gwy_3d_setup_class_init(Gwy3DSetupClass *klass)
"Width of axis lines and ticks, in pixels.",
1.0, 10.0, 1.0,
G_PARAM_READWRITE));
+
+ /**
+ * Gwy3DSetup:fmscale-size:
+ *
+ * Size of false colour scale relative to view height.
+ *
+ * Since: 2.49
+ **/
+ g_object_class_install_property
+ (gobject_class,
+ PROP_FMSCALE_SIZE,
+ g_param_spec_double("fmscale-size",
+ "Fmscale size",
+ "Size of false colour scale relative to "
+ "view height.",
+ 0.0, 1.0, 1.0,
+ G_PARAM_READWRITE));
+
+ /**
+ * Gwy3DSetup:fmscale-y-align:
+ *
+ * Vertical alignment of false colour scale.
+ *
+ * Since: 2.49
+ **/
+ g_object_class_install_property
+ (gobject_class,
+ PROP_FMSCALE_Y_ALIGN,
+ g_param_spec_double("fmscale-y-align",
+ "Fmscale y align",
+ "Vertical alignment of false colour scale.",
+ 0.0, 1.0, 0.5,
+ G_PARAM_READWRITE));
+ /**
+ * Gwy3DSetup:fmscale-reserve-space:
+ *
+ * Whethere to reserve entire vertical stripe of the false colour scale.
+ *
+ * Since: 2.49
+ **/
+ g_object_class_install_property
+ (gobject_class,
+ PROP_FMSCALE_RESERVE_SPACE,
+ g_param_spec_boolean("fmscale-reserve-space",
+ "Fmscale resrrve space",
+ "Whether to reserve horizontal space for "
+ "the false colour scale.",
+ TRUE,
+ G_PARAM_READWRITE));
+
}
static void
@@ -236,6 +288,9 @@ gwy_3d_setup_init(Gwy3DSetup *setup)
setup->light_phi = 0.0;
setup->light_theta = 0.0;
setup->line_width = 1.0;
+ setup->fmscale_size = 1.0;
+ setup->fmscale_yalign = 0.5;
+ setup->fmscale_reserve_space = TRUE;
}
static void
@@ -299,6 +354,18 @@ gwy_3d_setup_set_property(GObject *object,
setup->line_width = g_value_get_double(value);
break;
+ case PROP_FMSCALE_SIZE:
+ setup->fmscale_size = g_value_get_double(value);
+ break;
+
+ case PROP_FMSCALE_Y_ALIGN:
+ setup->fmscale_yalign = g_value_get_double(value);
+ break;
+
+ case PROP_FMSCALE_RESERVE_SPACE:
+ setup->fmscale_reserve_space = g_value_get_boolean(value);
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
break;
@@ -366,6 +433,18 @@ gwy_3d_setup_get_property(GObject *object,
g_value_set_double(value, setup->line_width);
break;
+ case PROP_FMSCALE_SIZE:
+ g_value_set_double(value, setup->fmscale_size);
+ break;
+
+ case PROP_FMSCALE_Y_ALIGN:
+ g_value_set_double(value, setup->fmscale_yalign);
+ break;
+
+ case PROP_FMSCALE_RESERVE_SPACE:
+ g_value_set_boolean(value, setup->fmscale_reserve_space);
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
break;
@@ -397,6 +476,9 @@ gwy_3d_setup_serialize(GObject *serializable,
{ 'd', "light-theta", &setup->light_theta, NULL, },
{ 'b', "hide-masked", &setup->hide_masked, NULL, },
{ 'd', "line-width", &setup->line_width, NULL, },
+ { 'd', "fmscale-size", &setup->fmscale_size, NULL, },
+ { 'd', "fmscale-y-align", &setup->fmscale_yalign, NULL, },
+ { 'b', "fmscale-resrrve-space", &setup->fmscale_reserve_space, NULL, },
};
return gwy_serialize_pack_object_struct(buffer,
@@ -429,6 +511,9 @@ gwy_3d_setup_get_size(GObject *object)
{ 'd', "light-theta", &setup->light_theta, NULL, },
{ 'b', "hide-masked", &setup->hide_masked, NULL, },
{ 'd', "line-width", &setup->line_width, NULL, },
+ { 'd', "fmscale-size", &setup->fmscale_size, NULL, },
+ { 'd', "fmscale-y-align", &setup->fmscale_yalign, NULL, },
+ { 'b', "fmscale-resrrve-space", &setup->fmscale_reserve_space, NULL, },
};
return gwy_serialize_get_struct_size(GWY_3D_SETUP_TYPE_NAME,
@@ -462,6 +547,9 @@ gwy_3d_setup_deserialize(const guchar *buffer,
{ 'd', "light-theta", &setup->light_theta, NULL, },
{ 'b', "hide-masked", &setup->hide_masked, NULL, },
{ 'd', "line-width", &setup->line_width, NULL, },
+ { 'd', "fmscale-size", &setup->fmscale_size, NULL, },
+ { 'd', "fmscale-y-align", &setup->fmscale_yalign, NULL, },
+ { 'b', "fmscale-resrrve-space", &setup->fmscale_reserve_space, NULL, },
};
if (!gwy_serialize_unpack_object_struct(buffer, size, position,
@@ -548,6 +636,21 @@ gwy_3d_setup_clone(GObject *source,
g_object_notify(copy, "line-width");
}
+ if (clone->fmscale_size != setup->fmscale_size) {
+ clone->fmscale_size = setup->fmscale_size;
+ g_object_notify(copy, "fmscale-size");
+ }
+
+ if (clone->fmscale_yalign != setup->fmscale_yalign) {
+ clone->fmscale_yalign = setup->fmscale_yalign;
+ g_object_notify(copy, "fmscale-y-align");
+ }
+
+ if (clone->fmscale_reserve_space != setup->fmscale_reserve_space) {
+ clone->fmscale_reserve_space = setup->fmscale_reserve_space;
+ g_object_notify(copy, "fmscale-reserve-space");
+ }
+
g_object_thaw_notify(copy);
}
@@ -576,6 +679,9 @@ gwy_3d_setup_duplicate_real(GObject *object)
duplicate->hide_masked = setup->hide_masked;
duplicate->line_width = setup->line_width;
+ duplicate->fmscale_size = setup->fmscale_size;
+ duplicate->fmscale_yalign = setup->fmscale_yalign;
+ duplicate->fmscale_reserve_space = setup->fmscale_reserve_space;
return (GObject*)duplicate;
}
diff --git a/libgwydgets/gwy3dsetup.h b/libgwydgets/gwy3dsetup.h
index 4816835..3b7c0a7 100644
--- a/libgwydgets/gwy3dsetup.h
+++ b/libgwydgets/gwy3dsetup.h
@@ -1,6 +1,6 @@
/*
- * @(#) $Id: gwy3dsetup.h 17340 2015-09-10 08:49:47Z yeti-dn $
- * Copyright (C) 2006 David Necas (Yeti), Petr Klapetek.
+ * @(#) $Id: gwy3dsetup.h 20263 2017-08-12 11:13:26Z yeti-dn $
+ * Copyright (C) 2006-2017 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
* This program is free software; you can redistribute it and/or modify
@@ -49,7 +49,7 @@ struct _Gwy3DSetup {
gboolean labels_visible;
gboolean fmscale_visible;
gboolean hide_masked;
- gboolean b_reserved3;
+ gboolean fmscale_reserve_space;
gboolean b_reserved4;
guint i_reserved1;
@@ -62,8 +62,8 @@ struct _Gwy3DSetup {
gdouble light_phi;
gdouble light_theta;
gdouble line_width;
- gdouble d_reserved_2;
- gdouble d_reserved_3;
+ gdouble fmscale_size;
+ gdouble fmscale_yalign;
gdouble d_reserved_4;
};
diff --git a/libgwydgets/gwy3dview.c b/libgwydgets/gwy3dview.c
index 80532d0..2b06999 100644
--- a/libgwydgets/gwy3dview.c
+++ b/libgwydgets/gwy3dview.c
@@ -1,6 +1,6 @@
/*
- * @(#) $Id: gwy3dview.c 19216 2016-11-09 10:39:06Z yeti-dn $
- * Copyright (C) 2003-2015 David Necas (Yeti), Petr Klapetek.
+ * @(#) $Id: gwy3dview.c 20271 2017-08-14 13:16:49Z yeti-dn $
+ * Copyright (C) 2003-2017 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
* Copyright (C) 2004 Martin Siler.
* E-mail: silerm at physics.muni.cz.
@@ -104,6 +104,14 @@ enum {
};
enum {
+ GWY_3D_JUST_LEFT_EDGE = 0,
+ GWY_3D_JUST_TOP_EDGE = 0,
+ GWY_3D_JUST_CENTER = 1,
+ GWY_3D_JUST_RIGHT_EDGE = 2,
+ GWY_3D_JUST_BOTTOM_EDGE = 2,
+};
+
+enum {
PROP_0,
PROP_MOVEMENT,
PROP_REDUCED_SIZE,
@@ -192,6 +200,8 @@ static gboolean gwy_3d_view_button_press (GtkWidget *widget,
GdkEventButton *event);
static gboolean gwy_3d_view_button_release (GtkWidget *widget,
GdkEventButton *event);
+static gboolean gwy_3d_view_scroll (GtkWidget *widget,
+ GdkEventScroll *event);
static void gwy_3d_calculate_pixel_sizes (GwyDataField *dfield,
GLfloat *dx,
GLfloat *dy);
@@ -219,8 +229,8 @@ static void gwy_3d_texture_text (Gwy3DView *gwy3dview,
GLfloat raster_z,
GLfloat rot,
guint size,
- gint vjustify,
- gint hjustify);
+ gint hjustify,
+ gint vjustify);
static gint gwy_3d_draw_fmscaletex (Gwy3DView *view);
static void gwy_3d_view_class_make_list_pool (Gwy3DListPool *pool);
static void gwy_3d_view_assign_lists (Gwy3DView *gwy3dview);
@@ -274,6 +284,7 @@ gwy_3d_view_class_init(Gwy3DViewClass *klass)
widget_class->size_allocate = gwy_3d_view_size_allocate;
widget_class->button_press_event = gwy_3d_view_button_press;
widget_class->button_release_event = gwy_3d_view_button_release;
+ widget_class->scroll_event = gwy_3d_view_scroll;
widget_class->motion_notify_event = gwy_3d_view_motion_notify;
klass->list_pool = g_new0(Gwy3DListPool, 1);
@@ -407,10 +418,10 @@ gwy_3d_view_destroy(GtkObject *object)
gwy3dview->ovlay_updated_id[i]);
gwy_data_view_layer_unplugged(GWY_DATA_VIEW_LAYER(gwy3dview->ovlays[i]));
GWY_OBJECT_UNREF(gwy3dview->ovlays[i]);
- };
+ }
g_free(gwy3dview->ovlays);
gwy3dview->ovlays = NULL;
- };
+ }
GTK_OBJECT_CLASS(gwy_3d_view_parent_class)->destroy(object);
}
@@ -763,9 +774,9 @@ gwy_3d_view_set_ovlay(Gwy3DView *gwy3dview,
for (i = 0; i < gwy3dview->novlays; i++) {
gwy_data_view_layer_unplugged(GWY_DATA_VIEW_LAYER(gwy3dview->ovlays[i]));
GWY_OBJECT_UNREF(gwy3dview->ovlays[i]);
- };
+ }
g_free(gwy3dview->ovlays);
- };
+ }
gwy3dview->ovlays = g_new(GwyPixmapLayer*, novlays);
gwy3dview->ovlay_updated_id = g_new(guint, novlays);
@@ -779,7 +790,7 @@ gwy_3d_view_set_ovlay(Gwy3DView *gwy3dview,
"updated",
G_CALLBACK(gwy_3d_view_queue_draw),
gwy3dview);
- };
+ }
gwy_3d_view_update_lists(gwy3dview);
}
@@ -958,27 +969,34 @@ static void
gwy_3d_view_setup_changed(Gwy3DView *gwy3dview,
GParamSpec *pspec)
{
+ Gwy3DSetup *setup = gwy3dview->setup;
+
gwy_debug("%p <%s>", gwy3dview, pspec ? pspec->name : "NULL");
/* TODO: must decide what needs redraw, if anything */
if (pspec) {
- if (!gwy_3d_visualisation_has_light(gwy3dview->setup->visualization)
+ if (!gwy_3d_visualisation_has_light(setup->visualization)
&& (gwy_strequal(pspec->name, "light-theta")
|| gwy_strequal(pspec->name, "light-phi")))
return;
- if (!gwy3dview->setup->axes_visible
+ if (!setup->axes_visible
&& gwy_strequal(pspec->name, "labels-visible"))
return;
if (gwy_strequal(pspec->name, "visualization")) {
gwy_3d_view_update_lists(gwy3dview);
return;
- };
+ }
if (gwy_strequal(pspec->name, "hide-masked")) {
gwy_3d_view_update_lists(gwy3dview);
return;
- };
- if (!gwy3dview->setup->axes_visible
+ }
+ if (!setup->axes_visible
&& gwy_strequal(pspec->name, "line-width"))
return;
+ if (!setup->fmscale_visible
+ && (gwy_strequal(pspec->name, "fmscale-size")
+ || gwy_strequal(pspec->name, "fmscale-y-align")
+ || gwy_strequal(pspec->name, "fmscale-reserve-space")))
+ return;
}
gwy_3d_view_queue_draw(gwy3dview);
@@ -1595,8 +1613,6 @@ gwy_3d_view_expose(GtkWidget *widget,
GLfloat h = widget->allocation.height;
gint sw = 0;
- gwy_debug(" ");
-
gwy_debug("width: %f, height: %f", w, h);
g_return_val_if_fail(GWY_IS_3D_VIEW(widget), FALSE);
@@ -1636,6 +1652,8 @@ gwy_3d_view_expose(GtkWidget *widget,
sw = gwy_3d_draw_fmscaletex(gwy3dview);
gwy_debug("Scale width: %d", sw);
+ if (!gwy3dview->setup->fmscale_reserve_space)
+ sw = 0;
glDisable(GL_TEXTURE_2D);
glEnable(GL_DEPTH_TEST);
@@ -1697,11 +1715,6 @@ gwy_3d_view_expose(GtkWidget *widget,
glCallList(gwy3dview->shape_list_base + gwy3dview->shape_current);
if (gwy3dview->setup->axes_visible)
gwy_3d_draw_axes(gwy3dview, w-sw, h);
- else {
- /* FIXME: False colour axis area is drawn as big black box without
- * this. Have no idea why. */
- glColor3f(1.0, 1.0, 1.0);
- }
if (gwy3dview->movement == GWY_3D_MOVEMENT_LIGHT && priv->button)
gwy_3d_draw_light_position(gwy3dview);
@@ -1725,8 +1738,6 @@ gwy_3d_view_button_press(GtkWidget *widget,
Gwy3DView *gwy3dview = GWY_3D_VIEW(widget);
Gwy3DViewPrivate *priv = GWY_3D_VIEW_GET_PRIVATE(gwy3dview);
- gwy_debug(" ");
-
gwy3dview->mouse_begin_x = event->x;
gwy3dview->mouse_begin_y = event->y;
priv->button = TRUE;
@@ -1751,6 +1762,30 @@ gwy_3d_view_button_release(GtkWidget *widget,
}
static gboolean
+gwy_3d_view_scroll(GtkWidget *widget, GdkEventScroll *event)
+{
+ Gwy3DView *gwy3dview = GWY_3D_VIEW(widget);
+ GdkScrollDirection dir = event->direction;
+ gboolean enlarge;
+ gdouble val, q;
+
+ enlarge = (dir == GDK_SCROLL_UP || dir == GDK_SCROLL_RIGHT);
+
+ q = exp(2.5*(enlarge ? GWY_3D_Z_DEFORMATION : -GWY_3D_Z_DEFORMATION));
+ if (event->state & GDK_SHIFT_MASK) {
+ val = gwy3dview->setup->z_scale*q;
+ g_object_set(gwy3dview->setup, "z-scale", val, NULL);
+ }
+ else {
+ val = gwy3dview->setup->scale*q;
+ val = CLAMP(val, gwy3dview->view_scale_min, gwy3dview->view_scale_max);
+ g_object_set(gwy3dview->setup, "scale", val, NULL);
+ }
+
+ return TRUE;
+}
+
+static gboolean
gwy_3d_view_motion_notify(GtkWidget *widget,
G_GNUC_UNUSED GdkEventMotion *event)
{
@@ -2024,8 +2059,8 @@ gwy_3d_make_list(Gwy3DView *gwy3dview,
Gwy3DVector *normals;
const gdouble *data;
const gdouble *mask = NULL;
- GdkPixbuf* pixbuf;
- guchar* colors;
+ GdkPixbuf *pixbuf;
+ guchar *colors;
gboolean glon;
g_return_if_fail(GWY_IS_DATA_FIELD(dfield));
@@ -2047,7 +2082,7 @@ gwy_3d_make_list(Gwy3DView *gwy3dview,
gwy_3d_calculate_pixel_sizes(dfield, &dx, &dy);
res = MAX(xres*dx, yres*dy);
if (gwy3dview->ovlays) {
- GdkPixbuf* lpb;
+ GdkPixbuf *lpb;
gint l;
pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, 0, 8, xres, yres);
@@ -2063,8 +2098,8 @@ gwy_3d_make_list(Gwy3DView *gwy3dview,
(gdouble)xres/gdk_pixbuf_get_width(lpb),
(gdouble)yres/gdk_pixbuf_get_height(lpb),
GDK_INTERP_TILES, 0xff);
- };
- };
+ }
+ }
}
else {
GwyGradient *grad = gwy3dview->gradient;
@@ -2076,7 +2111,7 @@ gwy_3d_make_list(Gwy3DView *gwy3dview,
pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, 0, 8, xres, yres);
gwy_pixbuf_draw_data_field(pixbuf, dfield, grad);
gwy_resource_release(GWY_RESOURCE(grad));
- };
+ }
colors = gdk_pixbuf_get_pixels(pixbuf);
rowstride = gdk_pixbuf_get_rowstride(pixbuf);
@@ -2095,19 +2130,19 @@ gwy_3d_make_list(Gwy3DView *gwy3dview,
gdouble z;
guchar *color;
if (gwy3dview->setup->hide_masked && mask != NULL) {
- if (mask[(yres-1 - j)*xres + i] == 0
- && mask[(yres-2 - j)*xres + i] == 0
+ if (mask[(yres-1 - j)*xres + i] == 0.0
+ && mask[(yres-2 - j)*xres + i] == 0.0
&& !glon) {
glBegin(GL_TRIANGLE_STRIP);
glon = TRUE;
- if (mask[(yres-1 - j)*xres + i - 1] > 0
- && mask[(yres-2 - j)*xres + i - 1] > 0) {
+ if (mask[(yres-1 - j)*xres + i - 1] > 0.0
+ && mask[(yres-2 - j)*xres + i - 1] > 0.0) {
GWY_3D_VERTEX(i, j);
}
- else if (mask[(yres-1 - j)*xres + i - 1] > 0) {
+ else if (mask[(yres-1 - j)*xres + i - 1] > 0.0) {
GWY_3D_VERTEX(i-1, j+1);
}
- else if (mask[(yres-2 - j)*xres + i - 1] > 0.) {
+ else if (mask[(yres-2 - j)*xres + i - 1] > 0.0) {
GWY_3D_VERTEX(i-1, j);
}
}
@@ -2124,7 +2159,7 @@ gwy_3d_make_list(Gwy3DView *gwy3dview,
else {
GWY_3D_VERTEX(i, j);
GWY_3D_VERTEX(i, j+1);
- };
+ }
}
glEnd();
}
@@ -2143,9 +2178,9 @@ gwy_3d_make_list(Gwy3DView *gwy3dview,
* multiplies the matrices
*
*/
-static void gwy_3d_util_mult_matrix(const GLdouble a[16],
- const GLdouble b[16],
- GLdouble mpMatrix[16])
+static void
+gwy_3d_util_mult_matrix(const GLdouble *a, const GLdouble *b,
+ GLdouble *mpMatrix)
{
int i, j;
@@ -2158,38 +2193,34 @@ static void gwy_3d_util_mult_matrix(const GLdouble a[16],
+ a[i*4+3]*b[3*4+j];
}
}
-};
+}
/* mpMatrix is the current model-projection-matrix */
-static void gwy_3d_util_get_mpmatrix(GLdouble mpMatrix[16])
+static void
+gwy_3d_util_get_mpmatrix(GLdouble *mpMatrix)
{
GLdouble mM[16], pM[16];
glGetDoublev(GL_MODELVIEW_MATRIX, mM);
glGetDoublev(GL_PROJECTION_MATRIX, pM);
gwy_3d_util_mult_matrix(mM, pM, mpMatrix);
-};
-
+}
/* wx,wy,wz denote the pont x,y,z will result
* in under the model-projection-matrix mpM
* and the viewport vpMatrix
*/
-static int gwy_3d_util_project(GLdouble x,
- GLdouble y,
- GLdouble z,
- const GLdouble mpM[16],
- const GLint vpMatrix[4],
- GLdouble* wx,
- GLdouble* wy,
- GLdouble* wz)
+static int
+gwy_3d_util_project(GLdouble x, GLdouble y, GLdouble z,
+ const GLdouble *mpM, const GLint *vpMatrix,
+ GLdouble *wx, GLdouble *wy, GLdouble *wz)
{
GLdouble temp[4];
/* Matrix-Vector-Product */
- temp[0] = mpM[0]*x+mpM[4]*y+mpM[8]*z+mpM[12];
- temp[1] = mpM[1]*x+mpM[5]*y+mpM[9]*z+mpM[13];
- temp[2] = mpM[2]*x+mpM[6]*y+mpM[10]*z+mpM[14];
- temp[3] = mpM[3]*x+mpM[7]*y+mpM[11]*z+mpM[15];
+ temp[0] = mpM[0]*x + mpM[4]*y + mpM[8]*z + mpM[12];
+ temp[1] = mpM[1]*x + mpM[5]*y + mpM[9]*z + mpM[13];
+ temp[2] = mpM[2]*x + mpM[6]*y + mpM[10]*z + mpM[14];
+ temp[3] = mpM[3]*x + mpM[7]*y + mpM[11]*z + mpM[15];
if (temp[3] == 0.0)
return GL_FALSE;
@@ -2198,14 +2229,15 @@ static int gwy_3d_util_project(GLdouble x,
temp[1] /= temp[3];
temp[2] /= temp[3];
- *wx = (0.5*temp[0]+0.5)*vpMatrix[2]+vpMatrix[0];
- *wy = (0.5*temp[1]+0.5)*vpMatrix[3]+vpMatrix[1];
- *wz = 0.5*temp[2]+0.5;
+ *wx = (0.5*temp[0] + 0.5)*vpMatrix[2] + vpMatrix[0];
+ *wy = (0.5*temp[1] + 0.5)*vpMatrix[3] + vpMatrix[1];
+ *wz = 0.5*temp[2] + 0.5;
return GL_TRUE;
}
-static inline int uppow2(int x)
+static inline gint
+uppow2(gint x)
{
x--;
x |= x >> 1;
@@ -2216,12 +2248,12 @@ static inline int uppow2(int x)
x++;
return x;
-};
+}
static void
gwy_3d_draw_axes(Gwy3DView *widget, gint width, gint height)
{
- GLfloat dx, dy, rx, Ax, Ay, Bx, By, Cx, Cy;
+ GLfloat dx, dy, rx, Ax, Ay, Bx, By, Cx, Cy, ticklen, xt, yt;
gdouble data_min, data_max;
gint xres, yres, res;
gboolean yfirst;
@@ -2254,6 +2286,7 @@ gwy_3d_draw_axes(Gwy3DView *widget, gint width, gint height)
gwy_gl_material_get_specular(mat_none));
glMaterialf(GL_FRONT, GL_SHININESS,
(GLfloat)gwy_gl_material_get_shininess(mat_none)*128.0f);
+
/* This is optimistic. Hope something reasonable happens when the selected
* line width is not actually supported. */
glLineWidth(widget->setup->line_width);
@@ -2262,60 +2295,78 @@ gwy_3d_draw_axes(Gwy3DView *widget, gint width, gint height)
Ay = dy*yres;
Cx = dx*xres;
yfirst = TRUE;
- } else if (rx > 90.0 && rx <= 180.0) {
+ }
+ else if (rx > 90.0 && rx <= 180.0) {
Ax = dx*xres;
Ay = dy*yres;
By = dy*yres;
yfirst = FALSE;
- } else if (rx > 180.0 && rx <= 270.0) {
+ }
+ else if (rx > 180.0 && rx <= 270.0) {
Ax = dx*xres;
Bx = dx*xres;
By = dy*yres;
Cy = dy*yres;
- yfirst = TRUE;
- } else if (rx >= 270.0 && rx <= 360.0) {
+ yfirst = TRUE;
+ }
+ else if (rx >= 270.0 && rx <= 360.0) {
Bx = dx*xres;
Cx = dx*xres;
Cy = dy*yres;
yfirst = FALSE;
}
+ ticklen = 0.01f*(dx*xres + dy*yres);
+
+ /* X, Y and Z axes */
glBegin(GL_LINE_STRIP);
- glColor3f(0.0, 0.0, 0.0);
- glVertex3f(Ax, Ay, 0.0f);
- glVertex3f(Bx, By, 0.0f);
- glVertex3f(Cx, Cy, 0.0f);
- glVertex3f(Cx, Cy, data_max - data_min);
- glEnd();
- glBegin(GL_LINES);
- glVertex3f(Ax, Ay, 0.0f);
- glVertex3f(Ax - (Cx-Bx)*0.02, Ay - (Cy-By)*0.02, 0.0f);
- glVertex3f((Ax+Bx)/2, (Ay+By)/2, 0.0f);
- glVertex3f((Ax+Bx)/2 - (Cx-Bx)*0.02,
- (Ay+By)/2 - (Cy-By)*0.02, 0.0f);
- glVertex3f(Bx, By, 0.0f);
- glVertex3f(Bx - (Cx-Bx)*0.02, By - (Cy-By)*0.02, 0.0f);
- glVertex3f(Bx, By, 0.0f);
- glVertex3f(Bx - (Ax-Bx)*0.02, By - (Ay-By)*0.02, 0.0f);
- glVertex3f((Cx+Bx)/2, (Cy+By)/2, 0.0f);
- glVertex3f((Cx+Bx)/2 - (Ax-Bx)*0.02,
- (Cy+By)/2 - (Ay-By)*0.02, 0.0f);
- glVertex3f(Cx, Cy, 0.0f);
- glVertex3f(Cx - (Ax-Bx)*0.02, Cy - (Ay-By)*0.02, 0.0f);
+ glColor3f(0.0, 0.0, 0.0);
+ glVertex2f(Ax, Ay);
+ glVertex2f(Bx, By);
+ glVertex2f(Cx, Cy);
+ glVertex3f(Cx, Cy, data_max - data_min);
glEnd();
glBegin(GL_LINES);
- glVertex3f(Cx, Cy, data_max - data_min);
- glVertex3f(Cx - (Ax-Bx)*0.02, Cy - (Ay-By)*0.02,
- data_max - data_min);
- glVertex3f(Cx, Cy, (data_max - data_min)/2);
- glVertex3f(Cx - (Ax-Bx)*0.02, Cy - (Ay-By)*0.02,
- (data_max - data_min)/2);
+ /* X-axis ticks */
+ xt = ticklen*(Bx - Cx)/(ABS(Cx - Bx) + ABS(Cy - By));
+ yt = ticklen*(By - Cy)/(ABS(Cx - Bx) + ABS(Cy - By));
+
+ glVertex2f(Ax, Ay);
+ glVertex2f(Ax + xt, Ay + yt);
+
+ glVertex2f((Ax+Bx)/2, (Ay+By)/2);
+ glVertex2f((Ax+Bx)/2 + xt, (Ay+By)/2 + yt);
+
+ glVertex2f(Bx, By);
+ glVertex2f(Bx + xt, By + yt);
+
+ /* Y-axis ticks */
+ xt = ticklen*(Bx - Ax)/(ABS(Bx - Ax) + ABS(By - Ay));
+ yt = ticklen*(By - Ay)/(ABS(Bx - Ax) + ABS(By - Ay));
+
+ glVertex2f(Bx, By);
+ glVertex2f(Bx + xt, By + yt);
+
+ glVertex2f((Cx+Bx)/2, (Cy+By)/2);
+ glVertex2f((Cx+Bx)/2 + xt, (Cy+By)/2 + yt);
+
+ glVertex2f(Cx, Cy);
+ glVertex2f(Cx + xt, Cy + yt);
+
+ /* Z-axis ticks */
+ glVertex3f(Cx, Cy, data_max - data_min);
+ glVertex3f(Cx + xt, Cy + yt, data_max - data_min);
+
+ glVertex3f(Cx, Cy, (data_max - data_min)/2);
+ glVertex3f(Cx + xt, Cy + yt, (data_max - data_min)/2);
glEnd();
/*
TODO: create bitmaps with labels in the beginning (possibly in init_gl)
into display lists and draw here
*/
+ /* FIXME: I was able to fix the ticks drawing but this is still terribly
+ * broken for non-square images. (Yeti) */
if (widget->setup->labels_visible
&& !ugly_hack_globally_disable_axis_drawing) {
guint view_size;
@@ -2343,10 +2394,10 @@ gwy_3d_draw_axes(Gwy3DView *widget, gint width, gint height)
gwy_3d_util_project(Ax, Ay, -0.0f, mpM, vpM, &sx, &sy, &sz);
gwy_3d_util_project(Bx, By, -0.0f, mpM, vpM, &tx, &ty, &tz);
- rotA = atan2((ty-sy), (tx-sx));
+ rotA = atan2(ty-sy, tx-sx);
gwy_3d_util_project(Cx, Cy, -0.0f, mpM, vpM, &sx, &sy, &sz);
- rotB = G_PI/2.-atan2((sx-tx), (sy-ty));
+ rotB = G_PI/2.0 - atan2(sx-tx, sy-ty);
gwy_3d_util_project((Ax+Bx)/2 - (Cx-Bx)*0.1,
(Ay+By)/2 - (Cy-By)*0.1,
@@ -2385,20 +2436,20 @@ gwy_3d_draw_axes(Gwy3DView *widget, gint width, gint height)
gwy_3d_texture_text(widget, yfirst ? GWY_3D_VIEW_LABEL_Y
: GWY_3D_VIEW_LABEL_X,
sx, sy, sz, rotA,
- size, 1, 1);
+ size, GWY_3D_JUST_CENTER, GWY_3D_JUST_CENTER);
gwy_3d_texture_text(widget, yfirst ? GWY_3D_VIEW_LABEL_X
: GWY_3D_VIEW_LABEL_Y,
tx, ty, tz, rotB,
- size, 1, 1);
+ size, GWY_3D_JUST_CENTER, GWY_3D_JUST_CENTER);
gwy_3d_texture_text(widget, GWY_3D_VIEW_LABEL_MAX,
vx, vy, vz, 0,
- size, 1, 0);
+ size, GWY_3D_JUST_LEFT_EDGE, GWY_3D_JUST_CENTER);
gwy_3d_texture_text(widget, GWY_3D_VIEW_LABEL_MIN,
ux, uy, uz, 0,
- size, 1, 0);
+ size, GWY_3D_JUST_LEFT_EDGE, GWY_3D_JUST_CENTER);
/* unset 2d */
glDisable(GL_BLEND);
@@ -2439,15 +2490,17 @@ gwy_3d_draw_light_position(Gwy3DView *widget)
gwy_gl_material_get_specular(mat_none));
glMaterialf(GL_FRONT, GL_SHININESS,
(GLfloat)gwy_gl_material_get_shininess(mat_none)*128.0f);
+
glPushMatrix();
plane_z = GWY_3D_Z_TRANSFORMATION
*(data_mean - data_min)/(data_max - data_min)
+ GWY_3D_Z_DISPLACEMENT;
glTranslatef(0.0f, 0.0f, plane_z);
- glRotatef(widget->setup->light_theta * RAD_2_DEG, 0.0f, 0.0f, 1.0f);
- glRotatef(-widget->setup->light_phi * RAD_2_DEG, 0.0f, 1.0f, 0.0f);
+ glRotatef(-widget->setup->light_theta * RAD_2_DEG, 0.0f, 0.0f, 1.0f);
+ glRotatef(widget->setup->light_phi * RAD_2_DEG, 0.0f, 1.0f, 0.0f);
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
+
glBegin(GL_QUAD_STRIP);
for (i = -180; i <= 180; i += 5) {
GLfloat x = cos(i * DEG_2_RAD) * G_SQRT2;
@@ -2456,13 +2509,16 @@ gwy_3d_draw_light_position(Gwy3DView *widget)
glVertex3f(x, -0.05f, z);
}
glEnd();
+
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
+
glBegin(GL_LINE_STRIP);
glVertex3f(0.0f, 0.0f, 0.0f);
glVertex3f(0.0f, 0.05f, G_SQRT2);
glVertex3f(0.0f, -0.05f, G_SQRT2);
glVertex3f(0.0f, 0.0f, 0.0f);
glEnd();
+
glPopMatrix();
}
@@ -2541,7 +2597,7 @@ gwy_3d_set_projection(Gwy3DView *gwy3dview, GLfloat aspect)
}
}
else {
- aspect = 1./aspect;
+ aspect = 1.0/aspect;
switch (gwy3dview->setup->projection) {
case GWY_3D_PROJECTION_ORTHOGRAPHIC:
glOrtho(-1.0 * GWY_3D_ORTHO_CORRECTION,
@@ -2561,13 +2617,13 @@ gwy_3d_set_projection(Gwy3DView *gwy3dview, GLfloat aspect)
}
static PangoLayout*
-gwy_3d_prepare_layout(cairo_t* cr, gdouble zoom)
+gwy_3d_prepare_layout(cairo_t *cr, gdouble zoom)
{
PangoFontDescription *fontdesc;
PangoLayout *layout;
layout = pango_cairo_create_layout(cr);
- fontdesc = pango_font_description_from_string("Helvetica 12");
+ fontdesc = pango_font_description_from_string("Arial 12");
pango_font_description_set_size(fontdesc, GWY_ROUND(0.8*PANGO_SCALE*zoom));
pango_layout_set_font_description(layout, fontdesc);
pango_font_description_free(fontdesc);
@@ -2600,7 +2656,7 @@ gwy_3d_view_render_string(gdouble size,
cr = cairo_create(surface);
clayout = gwy_3d_prepare_layout(cr, size);
- cairo_set_source_rgba(cr, 0.0, 0.0, 0.0, 1.0);
+ cairo_set_source_rgb(cr, 0.0, 0.0, 0.0);
pango_layout_set_markup(clayout, text, -1);
pango_layout_get_pixel_size(clayout, &px, &py);
*width = px;
@@ -2620,7 +2676,7 @@ gwy_3d_view_render_string(gdouble size,
surface = cairo_image_surface_create_for_data(alpha, CAIRO_FORMAT_ARGB32,
px, py, wstride);
cr = cairo_create(surface);
- cairo_set_source_rgba(cr, 0.0, 0.0, 0.0, 1.0);
+ cairo_set_source_rgb(cr, 0.0, 0.0, 0.0);
pango_cairo_update_layout(cr, clayout);
pango_layout_set_markup(clayout, text, -1);
pango_cairo_show_layout(cr, clayout);
@@ -2636,12 +2692,11 @@ gwy_3d_view_render_string(gdouble size,
}
/* image to opengl-texture */
-static GLuint
-gwy_3d_cairo_to_tex(guchar* image,
+static void
+gwy_3d_cairo_to_tex(guchar *image,
gint width, gint height, gint stride)
{
GLint w2 = uppow2(width), h2 = uppow2(height);
- GLuint t[1];
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
@@ -2651,9 +2706,7 @@ gwy_3d_cairo_to_tex(guchar* image,
glPixelStorei(GL_UNPACK_ALIGNMENT, 4);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w2, h2,
0, GL_BGRA, GL_UNSIGNED_BYTE, image);
-
- return t[0];
-};
+}
/* puts textured rectangle t into view */
static void
@@ -2669,14 +2722,21 @@ gwy_3d_draw_ctex(GLuint t,
glBindTexture(GL_TEXTURE_2D, t);
glBegin(GL_QUADS);
- glTexCoord2f(0, ht) ; glVertex2f(ho, vo);
- glTexCoord2f(0, 0); glVertex2f(ho, vo+height);
- glTexCoord2f(wt, 0); glVertex2f(ho+width, vo+height);
- glTexCoord2f(wt, ht); glVertex2f(ho+width, vo);
+ glTexCoord2f(0, ht);
+ glVertex2f(ho, vo);
+
+ glTexCoord2f(0, 0);
+ glVertex2f(ho, vo+height);
+
+ glTexCoord2f(wt, 0);
+ glVertex2f(ho+width, vo+height);
+
+ glTexCoord2f(wt, ht);
+ glVertex2f(ho+width, vo);
glEnd();
glBindTexture(GL_TEXTURE_2D, 0);
-};
+}
/* draws text using a texture */
static void
@@ -2687,8 +2747,8 @@ gwy_3d_texture_text(Gwy3DView *gwy3dview,
GLfloat raster_z,
GLfloat rot,
guint size,
- gint vjustify,
- gint hjustify)
+ gint hjustify,
+ gint vjustify)
{
GLuint tex = 0;
Gwy3DLabel *label;
@@ -2709,7 +2769,7 @@ gwy_3d_texture_text(Gwy3DView *gwy3dview,
gwy_3d_cairo_to_tex(img, width, height, stride);
glPushMatrix();
glTranslatef(raster_x+displacement_x, raster_y+displacement_y, raster_z);
- glRotatef(rot*180./G_PI, 0, 0, 1);
+ glRotatef(rot*180.0/G_PI, 0, 0, 1);
gwy_3d_draw_ctex(tex, hjustify, vjustify, width, height);
glPopMatrix();
@@ -2718,7 +2778,7 @@ gwy_3d_texture_text(Gwy3DView *gwy3dview,
/* converts GwyGradient in gradient to cairo_pattern_t in pattern */
static void
-gwy_gradient_to_cairo_pattern(cairo_pattern_t* pattern, GwyGradient* gradient)
+gwy_gradient_to_cairo_pattern(cairo_pattern_t *pattern, GwyGradient *gradient)
{
GwyGradientPoint gp;
gint i = 0, npoints = gwy_gradient_get_npoints(gradient);
@@ -2727,18 +2787,19 @@ gwy_gradient_to_cairo_pattern(cairo_pattern_t* pattern, GwyGradient* gradient)
cairo_pattern_add_color_stop_rgba(pattern, gp.x,
gp.color.r, gp.color.g, gp.color.b,
gp.color.a);
- };
-};
+ }
+}
/* puts string into PangoLayout, printf style */
static void
gwy_3d_format_layout(PangoLayout *layout,
- GString* string,
+ GString *string,
const gchar *format,
...)
{
gchar *buffer;
gint length;
+ guint i;
va_list args;
g_string_truncate(string, 0);
@@ -2750,8 +2811,22 @@ gwy_3d_format_layout(PangoLayout *layout,
/* Replace ASCII with proper minus */
if (string->str[0] == '-') {
- g_string_erase(string, 0, 1);
- g_string_prepend_unichar(string, 0x2212);
+ /* Fix -0.0 */
+ i = 1;
+ while (string->str[i] == '0')
+ i++;
+ if (string->str[i] == '.' || string->str[i] == ',')
+ i++;
+ while (string->str[i] == '0')
+ i++;
+
+ if (i > 1 && (!string->str[i] || g_ascii_isspace(string->str[i]))) {
+ g_string_erase(string, 0, 1);
+ }
+ else {
+ g_string_erase(string, 0, 1);
+ g_string_prepend_unichar(string, 0x2212);
+ }
}
pango_layout_set_markup(layout, string->str, string->len);
@@ -2773,7 +2848,7 @@ gwy_3d_step_to_prec(gdouble d)
/* prints layout onto cairo context, vertically centered */
static void
-gwy_3d_pango_cairo_show_layout_vcentered(cairo_t* cr, PangoLayout* layout)
+gwy_3d_pango_cairo_show_layout_vcentered(cairo_t *cr, PangoLayout *layout)
{
int lw, lh;
gdouble ch;
@@ -2781,7 +2856,7 @@ gwy_3d_pango_cairo_show_layout_vcentered(cairo_t* cr, PangoLayout* layout)
ch = (double)(lh)/PANGO_SCALE;
cairo_rel_move_to(cr, 0, -ch/2.0);
pango_cairo_show_layout(cr, layout);
-};
+}
/* init cario context */
static cairo_t*
@@ -2789,11 +2864,11 @@ gwy_cairo_create_cairo_context(gint width,
gint height,
cairo_surface_t **surf)
{
- cairo_t* cr;
+ cairo_t *cr;
*surf = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, width, height);
cr = cairo_create(*surf);
- cairo_set_source_rgba(cr, 1, 1, 1, 1);
+ cairo_set_source_rgb(cr, 1, 1, 1);
cairo_paint(cr);
cairo_set_source_rgb(cr, 0, 0, 0);
return cr;
@@ -2801,34 +2876,32 @@ gwy_cairo_create_cairo_context(gint width,
/* renders false color bar into returned surface */
static cairo_surface_t*
-gwy_3d_fmscaletex(gint height,
- gdouble bot,
- gdouble top,
- gint fsize,
+gwy_3d_fmscaletex(gint height, gdouble bot, gdouble top,
+ gint fontsize, gdouble line_width,
GwySIUnit *siunit,
- GwyGradient* gradient,
+ GwyGradient *gradient,
gboolean inverted,
- gint* rw, gint* rh,
+ gint *width,
gboolean noticks)
{
PangoLayout *layout;
- cairo_t* cr;
- cairo_surface_t* surf;
+ cairo_t *cr;
+ cairo_surface_t *surf;
gdouble x_max;
gdouble scale, x, m, tickdist, max;
GwySIValueFormat *format;
GString *s;
- gint tick, width, lw, layw1, layw2, layh;
+ gint tick, layw1, layw2, layh;
gint units_width, label_height, mintickdist, prec = 1;
G_GNUC_UNUSED gboolean do_draw = TRUE;
gint size, fmw, l;
- cairo_pattern_t* pattern;
+ cairo_pattern_t *pattern;
gdouble zoom;
s = g_string_new(NULL);
cr = gwy_cairo_create_cairo_context(1, 1, &surf);
- layout = gwy_3d_prepare_layout(cr, fsize);
- zoom = 0.8/12.0*(float)fsize;
+ layout = gwy_3d_prepare_layout(cr, fontsize);
+ zoom = 0.8/12.0*(float)fontsize;
x_max = MAX(fabs(bot), fabs(top));
format = gwy_si_unit_get_format(siunit, GWY_SI_UNIT_FORMAT_VFMARKUP,
@@ -2859,7 +2932,7 @@ gwy_3d_fmscaletex(gint height,
x = 10.0;
tickdist = x*m;
x = ceil(bot/tickdist)*tickdist;
- max = top-0.999999*label_height/scale;
+ max = top - 0.999999*label_height/scale;
prec = gwy_3d_step_to_prec(tickdist/format->magnitude);
/* prec computation ends here */
@@ -2872,18 +2945,15 @@ gwy_3d_fmscaletex(gint height,
l = MAX(layw1, layw2);
tick = zoom*GWY_3D_TICK_LENGTH; /* physical tick length */
- lw = 1;/* line width */
fmw = 18*zoom;
- width = fmw + 2*lw + l + 2*zoom + tick + 2;
+ *width = fmw + 2*line_width + l + 2*zoom + tick + 2;
cairo_surface_destroy(surf);
cairo_destroy(cr);
- cr = gwy_cairo_create_cairo_context(uppow2(width), uppow2(height), &surf);
- *rw = width;
- *rh = height;
+ cr = gwy_cairo_create_cairo_context(uppow2(*width), uppow2(height), &surf);
pango_cairo_update_layout(cr, layout);
- cairo_set_line_width(cr, lw);
+ cairo_set_line_width(cr, line_width);
gwy_3d_format_layout(layout, s, "%.*f", prec, bot/format->magnitude);
@@ -2897,7 +2967,7 @@ gwy_3d_fmscaletex(gint height,
if ((x-bot)*scale < label_height) {
x += tickdist;
/* cairo_translate(cr, 0, -tickdist*scale); */
- };
+ }
cairo_translate(cr, 0, -(x-bot)*scale);
@@ -2911,8 +2981,8 @@ gwy_3d_fmscaletex(gint height,
gwy_3d_pango_cairo_show_layout_vcentered(cr, layout);
cairo_translate(cr, 0, -tickdist*scale);
x += tickdist;
- };
- };
+ }
+ }
cairo_identity_matrix(cr);
cairo_translate(cr, fmw+2, label_height+0.5);
@@ -2937,28 +3007,11 @@ gwy_3d_fmscaletex(gint height,
cairo_fill(cr);
cairo_pattern_destroy(pattern);
- cairo_set_source_rgba(cr, 0, 0, 0, 1);
- cairo_rectangle(cr, 0, 0, fmw, size);
+ cairo_set_source_rgb(cr, 0, 0, 0);
+ cairo_rectangle(cr, 0, 0, fmw, size);
cairo_stroke(cr);
- /* samples = gwy_gradient_get_samples(gradient, &nsamples);
- pixels = cairo_image_surface_get_data(surf);
- rowstride = cairo_image_surface_get_stride(surf);
- for (y = 0; y < size; y++) {
- gint j, k, yi;
- guchar *row;
-
- yi = inverted ? size-1 - y : y;
- row = pixels
- + rowstride*(label_height+yi)
- + 4*(int) lw;
- k = nsamples-1 - floor(nsamples*y/size);
- for (j = 0; j < fmw; j++) {
- row[4*j + 2] = samples[4*k];
- row[4*j + 1] = samples[4*k + 1];
- row[4*j + 0] = samples[4*k + 2];
- }
- }
- */
+
+ cairo_surface_flush(surf);
gwy_si_unit_value_format_free(format);
g_object_unref(layout);
@@ -2974,41 +3027,54 @@ gwy_3d_draw_fmscaletex(Gwy3DView *view)
{
gint height = GTK_WIDGET(view)->allocation.height;
gint width = GTK_WIDGET(view)->allocation.width;
- gint size = (gint)(sqrt(MIN(width, height))*0.8);
- cairo_surface_t* surf;
+ gint fontsize = (gint)(sqrt(MIN(width, height))*0.8);
+ gint reduced_height, actual_width, he;
+ cairo_surface_t *surf;
+ Gwy3DSetup *setup = view->setup;
gdouble min, max;
gboolean noticks;
GwySIUnit *zunit;
GwyLayerBasic *blayer;
+ GwyDataField *dfield;
+
+ /* XXX: This function requires view->ovlays[0] to be present. Is is always
+ * satisfied when we can get here? */
+ g_return_val_if_fail(view->ovlays[0], 0);
+
+ reduced_height = GWY_ROUND(height * setup->fmscale_size);
+ if (reduced_height < 12)
+ return 0;
glTranslatef(width, 0, 0);
+ glColor3f(1.0, 1.0, 1.0);
blayer = GWY_LAYER_BASIC(view->ovlays[0]);
gwy_layer_basic_get_range(blayer, &min, &max);
noticks = (gwy_layer_basic_get_range_type(blayer)
== GWY_LAYER_BASIC_RANGE_ADAPT);
- /* XXX: This requires view->ovlays[0] to be present. Is is always
- * satisfied when we can get here? */
- zunit = gwy_data_field_get_si_unit_z(GWY_DATA_FIELD(view->ovlays[0]->data_field));
- surf = gwy_3d_fmscaletex(height,
- min,
- max,
- size,
+ dfield = GWY_DATA_FIELD(view->ovlays[0]->data_field);
+ zunit = gwy_data_field_get_si_unit_z(dfield);
+ surf = gwy_3d_fmscaletex(reduced_height, min, max,
+ fontsize, sqrt(setup->line_width),
zunit,
view->gradient,
- FALSE,
- &width, &height, noticks);
+ FALSE, /* FIXME: When it should be TRUE? */
+ &actual_width, noticks);
gwy_3d_cairo_to_tex(cairo_image_surface_get_data(surf),
- width,
- height,
+ actual_width,
+ reduced_height,
cairo_image_surface_get_stride(surf));
- gwy_3d_draw_ctex(0, 2, 2, width, height);
+ he = GWY_ROUND((1.0 - setup->fmscale_yalign) * (height - reduced_height));
+ glTranslatef(0, he, 0);
+
+ gwy_3d_draw_ctex(0, GWY_3D_JUST_RIGHT_EDGE, GWY_3D_JUST_BOTTOM_EDGE,
+ actual_width, reduced_height);
cairo_surface_destroy(surf);
- return width;
+ return actual_width;
}
/**
diff --git a/libgwydgets/gwy3dwindow.c b/libgwydgets/gwy3dwindow.c
index 42453a6..2acf542 100644
--- a/libgwydgets/gwy3dwindow.c
+++ b/libgwydgets/gwy3dwindow.c
@@ -1,6 +1,6 @@
/*
- * @(#) $Id: gwy3dwindow.c 19037 2016-10-08 10:40:49Z yeti-dn $
- * Copyright (C) 2004-2016 David Necas (Yeti), Petr Klapetek.
+ * @(#) $Id: gwy3dwindow.c 20263 2017-08-12 11:13:26Z yeti-dn $
+ * Copyright (C) 2004-2017 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
* This program is free software; you can redistribute it and/or modify
@@ -50,7 +50,7 @@
#define ZOOM_FACTOR 1.3195
enum {
- DEFAULT_WIDTH = 550,
+ DEFAULT_WIDTH = 620,
DEFAULT_HEIGHT = 360,
};
@@ -58,90 +58,96 @@ enum {
N_BUTTONS = GWY_3D_MOVEMENT_LIGHT + 1
};
-static void gwy_3d_window_destroy (GtkObject *object);
-static void gwy_3d_window_finalize (GObject *object);
-static GdkWindowEdge gwy_3d_window_get_grip_edge (Gwy3DWindow *gwy3dwindow);
-static void gwy_3d_window_get_grip_rect (Gwy3DWindow *gwy3dwindow,
- GdkRectangle *rect);
-static void gwy_3d_window_set_grip_cursor (Gwy3DWindow *gwy3dwindow);
-static void gwy_3d_window_create_resize_grip (Gwy3DWindow *gwy3dwindow);
-static void gwy_3d_window_direction_changed (GtkWidget *widget,
- GtkTextDirection prev_dir);
-static void gwy_3d_window_destroy_resize_grip (Gwy3DWindow *gwy3dwindow);
-static gboolean gwy_3d_window_configure (GtkWidget *widget,
- GdkEventConfigure *event);
-static void gwy_3d_window_realize (GtkWidget *widget);
-static void gwy_3d_window_unrealize (GtkWidget *widget);
-static void gwy_3d_window_map (GtkWidget *widget);
-static void gwy_3d_window_unmap (GtkWidget *widget);
-static gboolean gwy_3d_window_button_press (GtkWidget *widget,
- GdkEventButton *event);
-static gboolean gwy_3d_window_key_pressed (GtkWidget *widget,
- GdkEventKey *event);
-static gboolean gwy_3d_window_expose (GtkWidget *widget,
- GdkEventExpose *event);
-static void gwy_3d_window_resize (Gwy3DWindow *gwy3dwindow,
- gint zoomtype);
-static void gwy_3d_window_pack_buttons (Gwy3DWindow *gwy3dwindow,
- guint offset,
- GtkBox *box);
-static void gwy_3d_window_setup_adj_changed (GtkAdjustment *adj,
- Gwy3DSetup *setup);
-static void gwy_3d_window_adj_setup_changed (Gwy3DSetup *setup,
- GParamSpec *pspec,
- GtkAdjustment *adj);
-static GtkWidget* gwy_3d_window_build_basic_tab (Gwy3DWindow *window);
-static GtkWidget* gwy_3d_window_build_visual_tab (Gwy3DWindow *window);
-static GtkWidget* gwy_3d_window_build_label_tab (Gwy3DWindow *window);
-static void gwy_3d_window_set_mode (gpointer userdata,
- GtkWidget *button);
-static void gwy_3d_window_set_gradient (GtkTreeSelection *selection,
- Gwy3DWindow *gwy3dwindow);
-static void gwy_3d_window_set_material (GtkTreeSelection *selection,
- Gwy3DWindow *gwy3dwindow);
-static void gwy_3d_window_select_controls (gpointer data,
- GtkWidget *button);
-static void gwy_3d_window_set_labels (GtkWidget *combo,
- Gwy3DWindow *gwy3dwindow);
-static void gwy_3d_window_label_adj_changed (GtkAdjustment *adj,
- Gwy3DWindow *window);
-static void gwy_3d_window_projection_changed (GtkToggleButton *check,
- Gwy3DWindow *window);
-static void gwy_3d_window_show_axes_changed (GtkToggleButton *check,
- Gwy3DWindow *window);
-static void gwy_3d_window_hide_masked_changed (GtkToggleButton *check,
- Gwy3DWindow *window);
-static void gwy_3d_window_show_labels_changed (GtkToggleButton *check,
- Gwy3DWindow *window);
-static void gwy_3d_window_show_fmscale_changed (GtkToggleButton *check,
- Gwy3DWindow *window);
-static void gwy_3d_window_display_mode_changed (GtkWidget *item,
- Gwy3DWindow *window);
-static void gwy_3d_window_set_visualization (Gwy3DWindow *window,
- Gwy3DVisualization visual);
-static void gwy_3d_window_visualization_changed(Gwy3DSetup *setup,
- GParamSpec *pspec,
- Gwy3DWindow *window);
-static void gwy_3d_window_auto_scale_changed (GtkToggleButton *check,
- Gwy3DWindow *window);
-static void gwy_3d_window_labels_entry_activate(GtkEntry *entry,
- Gwy3DWindow *window);
-static void gwy_3d_window_labels_reset_clicked (Gwy3DWindow *window);
-static void gwy_3d_window_reset_visualisation (Gwy3DWindow *window);
-static void gwy_3d_window_set_tooltip (GtkWidget *widget,
- const gchar *tip_text);
-static gboolean gwy_3d_window_view_clicked (GtkWidget *gwy3dwindow,
- GdkEventButton *event,
- GtkWidget *gwy3dview);
-static void gwy_3d_window_visual_selected (GtkWidget *item,
- Gwy3DWindow *gwy3dwindow);
-static void gwy_3d_window_gradient_selected (GtkWidget *item,
- Gwy3DWindow *gwy3dwindow);
-static void gwy_3d_window_material_selected (GtkWidget *item,
- Gwy3DWindow *gwy3dwindow);
-static void gwy_3d_window_set_zscale (Gwy3DWindow *window);
-static void update_physcale_entry (Gwy3DWindow *window,
- GtkAdjustment *adj);
+static void gwy_3d_window_destroy (GtkObject *object);
+static void gwy_3d_window_finalize (GObject *object);
+static GdkWindowEdge gwy_3d_window_get_grip_edge (Gwy3DWindow *gwy3dwindow);
+static void gwy_3d_window_get_grip_rect (Gwy3DWindow *gwy3dwindow,
+ GdkRectangle *rect);
+static void gwy_3d_window_set_grip_cursor (Gwy3DWindow *gwy3dwindow);
+static void gwy_3d_window_create_resize_grip (Gwy3DWindow *gwy3dwindow);
+static void gwy_3d_window_direction_changed (GtkWidget *widget,
+ GtkTextDirection prev_dir);
+static void gwy_3d_window_destroy_resize_grip (Gwy3DWindow *gwy3dwindow);
+static gboolean gwy_3d_window_configure (GtkWidget *widget,
+ GdkEventConfigure *event);
+static void gwy_3d_window_realize (GtkWidget *widget);
+static void gwy_3d_window_unrealize (GtkWidget *widget);
+static void gwy_3d_window_map (GtkWidget *widget);
+static void gwy_3d_window_unmap (GtkWidget *widget);
+static gboolean gwy_3d_window_button_press (GtkWidget *widget,
+ GdkEventButton *event);
+static gboolean gwy_3d_window_key_pressed (GtkWidget *widget,
+ GdkEventKey *event);
+static gboolean gwy_3d_window_expose (GtkWidget *widget,
+ GdkEventExpose *event);
+static void gwy_3d_window_resize (Gwy3DWindow *gwy3dwindow,
+ gint zoomtype);
+static void gwy_3d_window_pack_buttons (Gwy3DWindow *gwy3dwindow,
+ guint offset,
+ GtkBox *box);
+static void gwy_3d_window_setup_adj_changed (GtkAdjustment *adj,
+ Gwy3DSetup *setup);
+static void gwy_3d_window_adj_setup_changed (Gwy3DSetup *setup,
+ GParamSpec *pspec,
+ GtkAdjustment *adj);
+static GtkWidget* gwy_3d_window_build_basic_tab (Gwy3DWindow *window);
+static GtkWidget* gwy_3d_window_build_visual_tab (Gwy3DWindow *window);
+static GtkWidget* gwy_3d_window_build_label_tab (Gwy3DWindow *window);
+static GtkWidget* gwy_3d_window_build_colorbar_tab (Gwy3DWindow *window);
+static void gwy_3d_window_set_mode (gpointer userdata,
+ GtkWidget *button);
+static void gwy_3d_window_set_gradient (GtkTreeSelection *selection,
+ Gwy3DWindow *gwy3dwindow);
+static void gwy_3d_window_set_material (GtkTreeSelection *selection,
+ Gwy3DWindow *gwy3dwindow);
+static void gwy_3d_window_select_controls (gpointer data,
+ GtkWidget *button);
+static void gwy_3d_window_set_labels (GtkWidget *combo,
+ Gwy3DWindow *gwy3dwindow);
+static void gwy_3d_window_label_adj_changed (GtkAdjustment *adj,
+ Gwy3DWindow *window);
+static void gwy_3d_window_projection_changed (GtkToggleButton *check,
+ Gwy3DWindow *window);
+static void gwy_3d_window_show_axes_changed (GtkToggleButton *check,
+ Gwy3DWindow *window);
+static void gwy_3d_window_hide_masked_changed (GtkToggleButton *check,
+ Gwy3DWindow *window);
+static void gwy_3d_window_show_labels_changed (GtkToggleButton *check,
+ Gwy3DWindow *window);
+static void gwy_3d_window_fmscale_rspace_changed(GtkToggleButton *check,
+ Gwy3DWindow *window);
+static void gwy_3d_window_show_fmscale_changed (GtkToggleButton *check,
+ Gwy3DWindow *window);
+static void gwy_3d_window_display_mode_changed (GtkWidget *item,
+ Gwy3DWindow *window);
+static void gwy_3d_window_set_visualization (Gwy3DWindow *window,
+ Gwy3DVisualization visual);
+static void gwy_3d_window_visualization_changed(Gwy3DSetup *setup,
+ GParamSpec *pspec,
+ Gwy3DWindow *window);
+static void gwy_3d_window_auto_scale_changed (GtkToggleButton *check,
+ Gwy3DWindow *window);
+static void gwy_3d_window_label_size_eq_changed(GtkToggleButton *check,
+ Gwy3DWindow *window);
+static void gwy_3d_window_labels_entry_activate(GtkEntry *entry,
+ Gwy3DWindow *window);
+static void gwy_3d_window_labels_reset_clicked (Gwy3DWindow *window);
+static void gwy_3d_window_reset_visualisation (Gwy3DWindow *window);
+static void gwy_3d_window_set_tooltip (GtkWidget *widget,
+ const gchar *tip_text);
+static gboolean gwy_3d_window_view_clicked (GtkWidget *gwy3dwindow,
+ GdkEventButton *event,
+ GtkWidget *gwy3dview);
+static void gwy_3d_window_visual_selected (GtkWidget *item,
+ Gwy3DWindow *gwy3dwindow);
+static void gwy_3d_window_gradient_selected (GtkWidget *item,
+ Gwy3DWindow *gwy3dwindow);
+static void gwy_3d_window_material_selected (GtkWidget *item,
+ Gwy3DWindow *gwy3dwindow);
+static void gwy_3d_window_set_zscale (Gwy3DWindow *window);
+static void update_physcale_entry (Gwy3DWindow *window,
+ GtkAdjustment *adj);
+static void sync_other_labels_to_current (Gwy3DWindow *window);
/* These are actually class data. To put them to Class struct someone would
* have to do class_ref() and live with this reference to the end of time. */
@@ -210,20 +216,20 @@ gwy_3d_window_destroy(GtkObject *object)
setup = gwy_3d_view_get_setup(GWY_3D_VIEW(gwy3dwindow->gwy3dview));
g_signal_handlers_disconnect_matched(setup,
- G_SIGNAL_MATCH_FUNC
- | G_SIGNAL_MATCH_DATA,
- 0, 0, NULL,
- gwy_3d_window_visualization_changed,
- gwy3dwindow);
+ G_SIGNAL_MATCH_FUNC
+ | G_SIGNAL_MATCH_DATA,
+ 0, 0, NULL,
+ gwy_3d_window_visualization_changed,
+ gwy3dwindow);
while (gwy3dwindow->setup_adjustments) {
adj = GTK_ADJUSTMENT(gwy3dwindow->setup_adjustments->data);
g_signal_handlers_disconnect_matched(setup,
- G_SIGNAL_MATCH_FUNC
- | G_SIGNAL_MATCH_DATA,
- 0, 0, NULL,
- gwy_3d_window_adj_setup_changed,
- adj);
+ G_SIGNAL_MATCH_FUNC
+ | G_SIGNAL_MATCH_DATA,
+ 0, 0, NULL,
+ gwy_3d_window_adj_setup_changed,
+ adj);
gwy3dwindow->setup_adjustments
= g_slist_remove(gwy3dwindow->setup_adjustments, adj);
}
@@ -327,7 +333,6 @@ gwy_3d_window_direction_changed(GtkWidget *widget,
Gwy3DWindow *gwy3dwindow = GWY_3D_WINDOW(widget);
gwy_3d_window_set_grip_cursor(gwy3dwindow);
- /* FIXME: must switch More/Less icons too */
}
static void
@@ -566,7 +571,7 @@ gwy_3d_window_pack_buttons(Gwy3DWindow *gwy3dwindow,
const buttons[] = {
{
GWY_3D_MOVEMENT_ROTATION,
- GWY_STOCK_ROTATE,
+ GWY_STOCK_ROTATE_3D,
N_("Rotate view (R)")
},
{
@@ -620,9 +625,7 @@ gwy_3d_window_new(Gwy3DView *gwy3dview)
{
Gwy3DWindow *gwy3dwindow;
GtkWidget *vbox, *hbox, *hbox2, *button;
- GtkTextDirection direction;
- gwy_debug("");
g_return_val_if_fail(GWY_IS_3D_VIEW(gwy3dview), NULL);
if (!adj_property_quark) {
@@ -634,7 +637,6 @@ gwy_3d_window_new(Gwy3DView *gwy3dview)
gtk_window_set_wmclass(GTK_WINDOW(gwy3dwindow), "data",
g_get_application_name());
gtk_window_set_resizable(GTK_WINDOW(gwy3dwindow), TRUE);
- direction = gtk_widget_get_direction(GTK_WIDGET(gwy3dwindow));
gwy3dwindow->buttons = g_new0(GtkWidget*, 2*N_BUTTONS);
gwy3dwindow->in_update = FALSE;
@@ -659,9 +661,7 @@ gwy_3d_window_new(Gwy3DView *gwy3dview)
gtk_box_pack_start(GTK_BOX(gwy3dwindow->vbox_small), button,
FALSE, FALSE, 0);
gtk_container_add(GTK_CONTAINER(button),
- gtk_image_new_from_stock(direction == GTK_TEXT_DIR_LTR
- ? GWY_STOCK_LESS
- : GWY_STOCK_MORE,
+ gtk_image_new_from_stock(GWY_STOCK_MORE,
GTK_ICON_SIZE_LARGE_TOOLBAR));
gwy_3d_window_set_tooltip(button, _("Show full controls"));
g_object_set_data(G_OBJECT(button), "gwy3dwindow", gwy3dwindow);
@@ -686,9 +686,7 @@ gwy_3d_window_new(Gwy3DView *gwy3dview)
gtk_box_pack_end(GTK_BOX(hbox2), button, FALSE, FALSE, 0);
gtk_container_add(GTK_CONTAINER(button),
- gtk_image_new_from_stock(direction == GTK_TEXT_DIR_LTR
- ? GWY_STOCK_MORE
- : GWY_STOCK_LESS,
+ gtk_image_new_from_stock(GWY_STOCK_LESS,
GTK_ICON_SIZE_LARGE_TOOLBAR));
gwy_3d_window_set_tooltip(button, _("Hide full controls"));
g_object_set_data(G_OBJECT(button), "gwy3dwindow", gwy3dwindow);
@@ -718,6 +716,11 @@ gwy_3d_window_new(Gwy3DView *gwy3dview)
gtk_notebook_append_page(GTK_NOTEBOOK(gwy3dwindow->notebook),
vbox, gtk_label_new(_("Labels")));
+ /* Colorbar table */
+ vbox = gwy_3d_window_build_colorbar_tab(gwy3dwindow);
+ gtk_notebook_append_page(GTK_NOTEBOOK(gwy3dwindow->notebook),
+ vbox, gtk_label_new(_("Colorbar")));
+
gtk_widget_show_all(hbox);
gtk_window_set_default_size(GTK_WINDOW(gwy3dwindow),
@@ -761,7 +764,15 @@ gwy_3d_window_adj_setup_changed(Gwy3DSetup *setup,
id = g_signal_handler_find(adj, G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA,
0, 0, 0, gwy_3d_window_setup_adj_changed, setup);
g_signal_handler_block(adj, id);
- gtk_adjustment_set_value(adj, rad2deg ? 180.0/G_PI*value : value);
+ if (rad2deg) {
+ value *= 180.0/G_PI;
+ if (value < -180.0 || value > 180.0) {
+ value = fmod(value, 360.0);
+ if (value < -180.0)
+ value += 360.0;
+ }
+ }
+ gtk_adjustment_set_value(adj, value);
g_signal_handler_unblock(adj, id);
}
@@ -823,27 +834,27 @@ gwy_3d_window_build_basic_tab(Gwy3DWindow *window)
row = 0;
adj = gwy_3d_window_make_setup_adj(window, setup, "rotation-x",
- -G_MAXDOUBLE, G_MAXDOUBLE, 1.0, 15.0,
- TRUE);
- spin = gwy_table_attach_spinbutton(table, row++, _("φ:"), _("deg"), adj);
+ -180.0, 180.0, 1.0, 15.0, TRUE);
+ spin = gwy_table_attach_adjbar(table, row++, _("φ:"), _("deg"),
+ adj, GWY_HSCALE_LINEAR);
adj = gwy_3d_window_make_setup_adj(window, setup, "rotation-y",
- -G_MAXDOUBLE, G_MAXDOUBLE, 1.0, 15.0,
- TRUE);
- spin = gwy_table_attach_spinbutton(table, row++,
- _("θ:"), _("deg"), adj);
+ -180.0, 180.0, 1.0, 15.0, TRUE);
+ spin = gwy_table_attach_adjbar(table, row++, _("θ:"), _("deg"),
+ adj, GWY_HSCALE_LINEAR);
adj = gwy_3d_window_make_setup_adj(window, setup, "scale",
0.05, 10.0, 0.01, 0.1,
FALSE);
- spin = gwy_table_attach_spinbutton(table, row++, _("_Scale:"), NULL, adj);
+ spin = gwy_table_attach_adjbar(table, row++, _("_Scale:"), NULL,
+ adj, GWY_HSCALE_LOG);
gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 2);
adj = gwy_3d_window_make_setup_adj(window, setup, "z-scale",
0.001, 100.0, 0.001, 1.0,
FALSE);
- spin = gwy_table_attach_spinbutton(table, row++,
- _("_Value scale:"), NULL, adj);
+ spin = gwy_table_attach_adjbar(table, row++, _("_Value scale:"), NULL,
+ adj, GWY_HSCALE_LOG);
gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 5);
g_signal_connect_swapped(adj, "value-changed",
G_CALLBACK(update_physcale_entry), window);
@@ -871,10 +882,9 @@ gwy_3d_window_build_basic_tab(Gwy3DWindow *window)
/* The range and step is what seems typically supported. */
adj = gwy_3d_window_make_setup_adj(window, setup, "line-width",
- 1.0, 10.0, 0.1, 1.0,
- FALSE);
- spin = gwy_table_attach_spinbutton(table, row++,
- _("Line _width:"), "px", adj);
+ 1.0, 10.0, 0.1, 1.0, FALSE);
+ spin = gwy_table_attach_adjbar(table, row++, _("Line _width:"), _("px"),
+ adj, GWY_HSCALE_LINEAR);
gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 1);
gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
@@ -882,7 +892,7 @@ gwy_3d_window_build_basic_tab(Gwy3DWindow *window)
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check),
setup->axes_visible);
gtk_table_attach(GTK_TABLE(table), check,
- 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect(check, "toggled",
G_CALLBACK(gwy_3d_window_show_axes_changed), window);
row++;
@@ -891,25 +901,16 @@ gwy_3d_window_build_basic_tab(Gwy3DWindow *window)
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check),
setup->labels_visible);
gtk_table_attach(GTK_TABLE(table), check,
- 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect(check, "toggled",
G_CALLBACK(gwy_3d_window_show_labels_changed), window);
row++;
- check = gtk_check_button_new_with_mnemonic(_("Show false _colorbar"));
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check),
- setup->fmscale_visible);
- gtk_table_attach(GTK_TABLE(table), check,
- 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
- g_signal_connect(check, "toggled",
- G_CALLBACK(gwy_3d_window_show_fmscale_changed), window);
- row++;
-
check = gtk_check_button_new_with_mnemonic(_("_Orthographic projection"));
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check),
!setup->projection);
gtk_table_attach(GTK_TABLE(table), check,
- 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect(check, "toggled",
G_CALLBACK(gwy_3d_window_projection_changed), window);
row++;
@@ -918,7 +919,7 @@ gwy_3d_window_build_basic_tab(Gwy3DWindow *window)
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check),
setup->hide_masked);
gtk_table_attach(GTK_TABLE(table), check,
- 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect(check, "toggled",
G_CALLBACK(gwy_3d_window_hide_masked_changed), window);
row++;
@@ -985,33 +986,15 @@ gwy_3d_window_build_visual_tab(Gwy3DWindow *window)
window,
setup->visualization);
- gtk_table_attach(GTK_TABLE(table),
- GTK_WIDGET(window->visual_mode_group->data),
- 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
- row++;
-
- gtk_table_attach(GTK_TABLE(table),
- GTK_WIDGET(window->visual_mode_group->next->data),
- 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
- row++;
-
- gtk_table_attach(GTK_TABLE(table),
- GTK_WIDGET(window->visual_mode_group->next->next->data),
- 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
- row++;
-
- gtk_table_attach(GTK_TABLE(table),
- GTK_WIDGET(window->visual_mode_group->next->next->next->data),
- 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
- row++;
-
+ row = gwy_radio_buttons_attach_to_table(window->visual_mode_group,
+ GTK_TABLE(table), 2, row);
label = gtk_label_new_with_mnemonic(_("_Material:"));
window->material_label = label;
gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
gtk_widget_set_sensitive(label, is_material);
gtk_table_attach(GTK_TABLE(table), label,
- 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
name = NULL;
@@ -1022,24 +1005,23 @@ gwy_3d_window_build_visual_tab(Gwy3DWindow *window)
window->material_menu = menu;
gtk_widget_set_sensitive(menu, is_material);
gtk_table_attach(GTK_TABLE(table), menu,
- 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
adj = gwy_3d_window_make_setup_adj(window, setup, "light-phi",
- -G_MAXDOUBLE, G_MAXDOUBLE, 1.0, 15.0,
- TRUE);
- spin = gwy_table_attach_spinbutton(table, row++,
- _("_Light φ:"), _("deg"), adj);
+ -180.0, 180.0, 1.0, 15.0, TRUE);
+ spin = gwy_table_attach_adjbar(table, row++, _("_Light φ:"), _("deg"),
+ adj, GWY_HSCALE_LINEAR);
window->lights_spin1 = spin;
- gtk_widget_set_sensitive(spin, light);
+ gwy_table_hscale_set_sensitive(adj, light);
adj = gwy_3d_window_make_setup_adj(window, setup, "light-theta",
- -G_MAXDOUBLE, G_MAXDOUBLE, 1.0, 15.0,
- TRUE);
- spin = gwy_table_attach_spinbutton(table, row++,
- _("L_ight θ:"), _("deg"), adj);
+ -180.0, 180.0, 1.0, 15.0, TRUE);
+ spin = gwy_table_attach_adjbar(table, row++, _("L_ight θ:"), _("deg"),
+ adj, GWY_HSCALE_LINEAR);
window->lights_spin2 = spin;
- gtk_widget_set_sensitive(spin, light);
+ gwy_table_hscale_set_sensitive(adj, light);
+
gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 12);
gtk_widget_set_sensitive(window->buttons[GWY_3D_MOVEMENT_LIGHT],
light);
@@ -1055,12 +1037,12 @@ gwy_3d_window_build_visual_tab(Gwy3DWindow *window)
gtk_widget_set_sensitive(menu, is_gradient || is_overlay);
window->gradient_menu = menu;
gtk_table_attach(GTK_TABLE(table), menu,
- 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
window->dataov_menu = gtk_label_new(NULL);
gtk_table_attach(GTK_TABLE(table), window->dataov_menu,
- 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
gtk_table_set_row_spacing(GTK_TABLE(table), row, 8);
@@ -1135,6 +1117,23 @@ gwy_3d_window_set_overlay_chooser(Gwy3DWindow *gwy3dwindow,
setup->visualization == GWY_3D_VISUALIZATION_OVERLAY);
}
+static guint
+find_equal_label_size(Gwy3DWindow *window)
+{
+ Gwy3DView *view;
+ guint size_x, size_y, size_min, size_max;
+
+ view = GWY_3D_VIEW(window->gwy3dview);
+ size_x = gwy_3d_view_get_label(view, GWY_3D_VIEW_LABEL_X)->size;
+ size_y = gwy_3d_view_get_label(view, GWY_3D_VIEW_LABEL_Y)->size;
+ size_min = gwy_3d_view_get_label(view, GWY_3D_VIEW_LABEL_MIN)->size;
+ size_max = gwy_3d_view_get_label(view, GWY_3D_VIEW_LABEL_MAX)->size;
+ if (size_x == size_y && size_y == size_min && size_min == size_max)
+ return size_x;
+
+ return 0;
+}
+
static GtkWidget*
gwy_3d_window_build_label_tab(Gwy3DWindow *window)
{
@@ -1155,7 +1154,7 @@ gwy_3d_window_build_label_tab(Gwy3DWindow *window)
vbox = gtk_vbox_new(FALSE, 0);
- table = gtk_table_new(8, 3, FALSE);
+ table = gtk_table_new(9, 3, FALSE);
gtk_table_set_row_spacings(GTK_TABLE(table), 2);
gtk_table_set_col_spacings(GTK_TABLE(table), 6);
gtk_container_set_border_width(GTK_CONTAINER(table), 4);
@@ -1165,31 +1164,24 @@ gwy_3d_window_build_label_tab(Gwy3DWindow *window)
combo = gwy_enum_combo_box_new(label_entries, G_N_ELEMENTS(label_entries),
G_CALLBACK(gwy_3d_window_set_labels),
window, -1, TRUE);
- gwy_table_attach_row(table, row, _("_Label:"), NULL, combo);
+ gwy_table_attach_adjbar(table, row, _("_Label:"), NULL,
+ GTK_OBJECT(combo), GWY_HSCALE_WIDGET_NO_EXPAND);
window->labels_menu = combo;
row++;
-
- label = gtk_label_new_with_mnemonic(_("_Text:"));
- gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_table_attach(GTK_TABLE(table), label,
- 0, 1, row, row+1, GTK_FILL, 0, 0, 0);
-
gwy3dlabel = gwy_3d_view_get_label(view, GWY_3D_VIEW_LABEL_X);
- entry = gtk_entry_new();
+ window->labels_text = entry = gtk_entry_new();
gtk_entry_set_max_length(GTK_ENTRY(entry), 100);
g_signal_connect(entry, "activate",
G_CALLBACK(gwy_3d_window_labels_entry_activate), window);
gtk_entry_set_text(GTK_ENTRY(entry), gwy_3d_label_get_text(gwy3dlabel));
gtk_editable_select_region(GTK_EDITABLE(entry),
0, GTK_ENTRY(entry)->text_length);
-
- gtk_table_attach(GTK_TABLE(table), entry,
- 1, 3, row, row+1, GTK_FILL, 0, 0, 0);
- window->labels_text = entry;
- gtk_table_set_row_spacing(GTK_TABLE(table), row, 8);
+ gwy_table_attach_adjbar(table, row, _("_Text:"), NULL,
+ GTK_OBJECT(entry), GWY_HSCALE_WIDGET);
row++;
+ gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
label = gtk_label_new(_("Move label"));
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
gtk_table_attach(GTK_TABLE(table), label,
@@ -1199,8 +1191,8 @@ gwy_3d_window_build_label_tab(Gwy3DWindow *window)
adj = gtk_adjustment_new(gwy3dlabel->delta_x,
-1000.0, 1000.0, 1.0, 10.0, 0.0);
g_object_set_qdata(G_OBJECT(adj), adj_property_quark, "delta-x");
- spin = gwy_table_attach_spinbutton(table, row++, _("_Horizontally:"), "px",
- adj);
+ spin = gwy_table_attach_adjbar(table, row, _("_Horizontally:"), _("px"),
+ adj, GWY_HSCALE_SQRT);
window->labels_delta_x = spin;
g_signal_connect(adj, "value-changed",
G_CALLBACK(gwy_3d_window_label_adj_changed), window);
@@ -1209,19 +1201,30 @@ gwy_3d_window_build_label_tab(Gwy3DWindow *window)
adj = gtk_adjustment_new(gwy3dlabel->delta_y,
-1000.0, 1000.0, 1.0, 10.0, 0.0);
g_object_set_qdata(G_OBJECT(adj), adj_property_quark, "delta-y");
- spin = gwy_table_attach_spinbutton(table, row++, _("_Vertically:"), "px",
- adj);
+ spin = gwy_table_attach_adjbar(table, row, _("_Vertically:"), _("px"),
+ adj, GWY_HSCALE_SQRT);
window->labels_delta_y = spin;
g_signal_connect(adj, "value-changed",
G_CALLBACK(gwy_3d_window_label_adj_changed), window);
- gtk_table_set_row_spacing(GTK_TABLE(table), row, 8);
+ row++;
+
+ gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
+ check = gtk_check_button_new_with_mnemonic(_("A_ll labels have the "
+ "same size"));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check),
+ find_equal_label_size(window));
+ gtk_table_attach(GTK_TABLE(table), check,
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
+ window->label_size_equal = check;
+ g_signal_connect(check, "toggled",
+ G_CALLBACK(gwy_3d_window_label_size_eq_changed), window);
row++;
check = gtk_check_button_new_with_mnemonic(_("Scale size _automatically"));
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check),
!gwy3dlabel->fixed_size);
gtk_table_attach(GTK_TABLE(table), check,
- 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
window->labels_autosize = check;
g_signal_connect(check, "toggled",
G_CALLBACK(gwy_3d_window_auto_scale_changed), window);
@@ -1229,9 +1232,9 @@ gwy_3d_window_build_label_tab(Gwy3DWindow *window)
adj = gtk_adjustment_new(gwy3dlabel->size, 1.0, 100.0, 1.0, 10.0, 0.0);
g_object_set_qdata(G_OBJECT(adj), adj_property_quark, "size");
- spin = gwy_table_attach_spinbutton(table, row++, _("Si_ze:"), _("pixels"),
- adj);
- gtk_widget_set_sensitive(spin, gwy3dlabel->fixed_size);
+ spin = gwy_table_attach_adjbar(table, row, _("Si_ze:"), _("px"),
+ adj, GWY_HSCALE_SQRT);
+ gwy_table_hscale_set_sensitive(adj, gwy3dlabel->fixed_size);
window->labels_size = spin;
g_signal_connect(adj, "value-changed",
G_CALLBACK(gwy_3d_window_label_adj_changed), window);
@@ -1250,6 +1253,69 @@ gwy_3d_window_build_label_tab(Gwy3DWindow *window)
return vbox;
}
+static GtkWidget*
+gwy_3d_window_build_colorbar_tab(Gwy3DWindow *window)
+{
+ Gwy3DView *view;
+ Gwy3DSetup *setup;
+ GtkWidget *vbox, *spin, *table, *check;
+ GtkObject *adj;
+ gint row;
+
+ view = GWY_3D_VIEW(window->gwy3dview);
+ setup = gwy_3d_view_get_setup(view);
+
+ vbox = gtk_vbox_new(FALSE, 0);
+
+ table = gtk_table_new(4, 3, FALSE);
+ gtk_table_set_row_spacings(GTK_TABLE(table), 2);
+ gtk_table_set_col_spacings(GTK_TABLE(table), 6);
+ gtk_container_set_border_width(GTK_CONTAINER(table), 4);
+ gtk_box_pack_start(GTK_BOX(vbox), table, TRUE, TRUE, 0);
+ row = 0;
+
+ check = gtk_check_button_new_with_mnemonic(_("Show false _colorbar"));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check),
+ setup->fmscale_visible);
+ gtk_table_attach(GTK_TABLE(table), check,
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
+ g_signal_connect(check, "toggled",
+ G_CALLBACK(gwy_3d_window_show_fmscale_changed), window);
+ row++;
+
+ check = gtk_check_button_new_with_mnemonic(_("Reserve space "
+ "for _colorbar"));
+ g_object_set_data(G_OBJECT(window),
+ "gwy-3d-window-fmscale-reserve-space", check);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check),
+ setup->fmscale_reserve_space);
+ gtk_table_attach(GTK_TABLE(table), check,
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
+ g_signal_connect(check, "toggled",
+ G_CALLBACK(gwy_3d_window_fmscale_rspace_changed), window);
+ gtk_widget_set_sensitive(check, setup->fmscale_visible);
+ row++;
+
+ adj = gwy_3d_window_make_setup_adj(window, setup, "fmscale-size",
+ 0.0, 1.0, 0.001, 0.1, FALSE);
+ g_object_set_data(G_OBJECT(window), "gwy-3d-window-fmscale-size", adj);
+ spin = gwy_table_attach_adjbar(table, row++, _("_Size:"), NULL,
+ adj, GWY_HSCALE_LINEAR);
+ gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 3);
+ gwy_table_hscale_set_sensitive(adj, setup->fmscale_visible);
+
+ adj = gwy_3d_window_make_setup_adj(window, setup, "fmscale-y-align",
+ 0.0, 1.0, 0.001, 0.1, FALSE);
+ g_object_set_data(G_OBJECT(window), "gwy-3d-window-fmscale-y-align", adj);
+ spin = gwy_table_attach_adjbar(table, row++,
+ _("_Vertical alignment:"), NULL,
+ adj, GWY_HSCALE_LINEAR);
+ gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 3);
+ gwy_table_hscale_set_sensitive(adj, setup->fmscale_visible);
+
+ return vbox;
+}
+
/**
* gwy_3d_window_get_3d_view:
* @gwy3dwindow: A 3D data view window.
@@ -1479,6 +1545,7 @@ static void
gwy_3d_window_label_adj_changed(GtkAdjustment *adj,
Gwy3DWindow *window)
{
+ GtkToggleButton *check;
Gwy3DLabel *label;
const gchar *key;
gdouble oldval, newval;
@@ -1491,6 +1558,10 @@ gwy_3d_window_label_adj_changed(GtkAdjustment *adj,
newval = gtk_adjustment_get_value(adj);
if (oldval != newval)
g_object_set(label, key, newval, NULL);
+
+ check = GTK_TOGGLE_BUTTON(window->label_size_equal);
+ if (gtk_toggle_button_get_active(check))
+ sync_other_labels_to_current(window);
}
static void
@@ -1531,7 +1602,8 @@ gwy_3d_window_show_axes_changed(GtkToggleButton *check,
Gwy3DSetup *setup;
setup = gwy_3d_view_get_setup(GWY_3D_VIEW(window->gwy3dview));
- g_object_set(setup, "axes-visible", gtk_toggle_button_get_active(check),
+ g_object_set(setup,
+ "axes-visible", gtk_toggle_button_get_active(check),
NULL);
}
@@ -1542,22 +1614,43 @@ gwy_3d_window_show_labels_changed(GtkToggleButton *check,
Gwy3DSetup *setup;
setup = gwy_3d_view_get_setup(GWY_3D_VIEW(window->gwy3dview));
- g_object_set(setup, "labels-visible", gtk_toggle_button_get_active(check),
+ g_object_set(setup,
+ "labels-visible", gtk_toggle_button_get_active(check),
NULL);
}
static void
-gwy_3d_window_show_fmscale_changed(GtkToggleButton *check,
- Gwy3DWindow *window)
+gwy_3d_window_fmscale_rspace_changed(GtkToggleButton *check,
+ Gwy3DWindow *window)
{
Gwy3DSetup *setup;
setup = gwy_3d_view_get_setup(GWY_3D_VIEW(window->gwy3dview));
- g_object_set(setup, "fmscale-visible", gtk_toggle_button_get_active(check),
+ g_object_set(setup,
+ "fmscale-reserve-space", gtk_toggle_button_get_active(check),
NULL);
}
static void
+gwy_3d_window_show_fmscale_changed(GtkToggleButton *check,
+ Gwy3DWindow *window)
+{
+ gboolean active = gtk_toggle_button_get_active(check);
+ GtkObject *adj, *button;
+ Gwy3DSetup *setup;
+
+ setup = gwy_3d_view_get_setup(GWY_3D_VIEW(window->gwy3dview));
+ g_object_set(setup, "fmscale-visible", active, NULL);
+ adj = g_object_get_data(G_OBJECT(window), "gwy-3d-window-fmscale-y-align");
+ gwy_table_hscale_set_sensitive(adj, active);
+ adj = g_object_get_data(G_OBJECT(window), "gwy-3d-window-fmscale-size");
+ gwy_table_hscale_set_sensitive(adj, active);
+ button = g_object_get_data(G_OBJECT(window),
+ "gwy-3d-window-fmscale-reserve-space");
+ gwy_table_hscale_set_sensitive(button, active);
+}
+
+static void
gwy_3d_window_display_mode_changed(GtkWidget *item,
Gwy3DWindow *window)
{
@@ -1581,8 +1674,9 @@ gwy_3d_window_set_visualization(Gwy3DWindow *window,
Gwy3DVisualization visual)
{
gboolean is_material = FALSE, is_gradient = FALSE,
- is_overlay = FALSE,
- light = FALSE;
+ is_overlay = FALSE, light = FALSE;
+ GtkAdjustment *adj;
+
if (visual == GWY_3D_VISUALIZATION_GRADIENT) {
is_gradient = TRUE;
light = FALSE;
@@ -1603,8 +1697,10 @@ gwy_3d_window_set_visualization(Gwy3DWindow *window,
gtk_widget_set_sensitive(window->material_menu, is_material);
gtk_widget_set_sensitive(window->material_label, is_material);
gtk_widget_set_sensitive(window->gradient_menu, is_gradient || is_overlay);
- gtk_widget_set_sensitive(window->lights_spin1, light);
- gtk_widget_set_sensitive(window->lights_spin2, light);
+ adj = gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(window->lights_spin1));
+ gwy_table_hscale_set_sensitive(GTK_OBJECT(adj), light);
+ adj = gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(window->lights_spin2));
+ gwy_table_hscale_set_sensitive(GTK_OBJECT(adj), light);
gtk_widget_set_sensitive(window->buttons[GWY_3D_MOVEMENT_LIGHT],
light);
gtk_widget_set_sensitive(window->buttons[N_BUTTONS + GWY_3D_MOVEMENT_LIGHT],
@@ -1633,16 +1729,37 @@ gwy_3d_window_auto_scale_changed(GtkToggleButton *check,
{
Gwy3DLabel *label;
gboolean active;
+ GtkAdjustment *adj;
gint id;
active = gtk_toggle_button_get_active(check);
- gtk_widget_set_sensitive(window->labels_size, !active);
+ adj = gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(window->labels_size));
+ gwy_table_hscale_set_sensitive(GTK_OBJECT(adj), !active);
id = gwy_enum_combo_box_get_active(GTK_COMBO_BOX(window->labels_menu));
label = gwy_3d_view_get_label(GWY_3D_VIEW(window->gwy3dview), id);
/* The check button is for the opposite of "fixed-size". */
if (!label->fixed_size == !active)
g_object_set(label, "fixed-size", !active, NULL);
+
+ /* Restore the size the (previously disabled) spin button is showing. */
+ if (label->fixed_size) {
+ adj = gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(window->labels_size));
+ gtk_adjustment_value_changed(adj);
+ }
+
+ check = GTK_TOGGLE_BUTTON(window->label_size_equal);
+ if (gtk_toggle_button_get_active(check))
+ sync_other_labels_to_current(window);
+}
+
+static void
+gwy_3d_window_label_size_eq_changed(GtkToggleButton *check, Gwy3DWindow *window)
+{
+ if (window->in_update || !gtk_toggle_button_get_active(check))
+ return;
+
+ sync_other_labels_to_current(window);
}
static void
@@ -1657,6 +1774,7 @@ gwy_3d_window_labels_entry_activate(GtkEntry *entry,
gwy_3d_label_set_text(label, gtk_entry_get_text(entry));
}
+/* This resets the current one. Should we add also a reset-all button? */
static void
gwy_3d_window_labels_reset_clicked(Gwy3DWindow *window)
{
@@ -1918,6 +2036,33 @@ update_physcale_entry(Gwy3DWindow *window, GtkAdjustment *adj)
gtk_entry_set_text(GTK_ENTRY(window->physcale_entry), buf);
}
+static void
+sync_other_labels_to_current(Gwy3DWindow *window)
+{
+ Gwy3DLabel *label;
+ gboolean fixed_size;
+ gint id, i;
+ gdouble size;
+
+ id = gwy_enum_combo_box_get_active(GTK_COMBO_BOX(window->labels_menu));
+ label = gwy_3d_view_get_label(GWY_3D_VIEW(window->gwy3dview), id);
+ size = label->size;
+ fixed_size = label->fixed_size;
+
+ for (i = 0; i < GWY_3D_VIEW_NLABELS; i++) {
+ if (i == id)
+ continue;
+
+ label = gwy_3d_view_get_label(GWY_3D_VIEW(window->gwy3dview), i);
+ if (label->size != size || label->fixed_size != fixed_size) {
+ g_object_set(label,
+ "fixed-size", fixed_size,
+ "size", size,
+ NULL);
+ }
+ }
+}
+
/************************** Documentation ****************************/
/**
diff --git a/libgwydgets/gwy3dwindow.h b/libgwydgets/gwy3dwindow.h
index cb21b23..682a209 100644
--- a/libgwydgets/gwy3dwindow.h
+++ b/libgwydgets/gwy3dwindow.h
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: gwy3dwindow.h 16431 2014-07-23 12:56:36Z yeti-dn $
+ * @(#) $Id: gwy3dwindow.h 19769 2017-05-18 08:07:41Z yeti-dn $
* Copyright (C) 2004 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -71,7 +71,7 @@ struct _Gwy3DWindow {
GtkWidget *dataov_menu;
GtkWidget *physcale_entry;
- GtkWidget *widget4;
+ GtkWidget *label_size_equal;
GtkWidget *widget5;
gboolean in_update;
diff --git a/libgwydgets/gwyadjustbar.c b/libgwydgets/gwyadjustbar.c
new file mode 100644
index 0000000..ac60a35
--- /dev/null
+++ b/libgwydgets/gwyadjustbar.c
@@ -0,0 +1,1356 @@
+/*
+ * @(#) $Id: gwyadjustbar.c 19913 2017-06-13 12:38:25Z yeti-dn $
+ * Copyright (C) 2012-2017 David Necas (Yeti).
+ * E-mail: yeti at gwyddion.net.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "config.h"
+#include <gtk/gtkmain.h>
+#include <gtk/gtksignal.h>
+#include <glib-object.h>
+
+#include <libgwyddion/gwymacros.h>
+#include <libgwyddion/gwymath.h>
+#include <libgwyddion/gwydebugobjects.h>
+#include <libprocess/datafield.h>
+#include <libdraw/gwyrgba.h>
+#include <libgwydgets/gwydgettypes.h>
+#include <libgwydgets/gwyadjustbar.h>
+
+enum {
+ PROP_0,
+ PROP_ADJUSTMENT,
+ PROP_SNAP_TO_TICKS,
+ PROP_MAPPING,
+ PROP_HAS_CHECK_BUTTON,
+ N_PROPS,
+};
+
+enum {
+ SGNL_CHANGE_VALUE,
+ N_SIGNALS
+};
+
+typedef gdouble (*MappingFunc)(gdouble value);
+
+struct _GwyAdjustBarPrivate {
+ GdkWindow *input_window;
+ GdkCursor *cursor_move;
+
+ GtkAdjustment *adjustment;
+ gulong adjustment_value_changed_id;
+ gulong adjustment_changed_id;
+ gdouble oldvalue; /* This is to avoid acting on no-change notifications. */
+ gboolean snap_to_ticks;
+ gboolean adjustment_ok;
+ gboolean dragging;
+
+ GtkWidget *check;
+ gboolean bar_sensitive;
+
+ GwyScaleMappingType mapping;
+ MappingFunc map_value;
+ MappingFunc map_position;
+ gint x;
+ gint length;
+ gdouble a;
+ gdouble b;
+};
+
+typedef struct _GwyAdjustBarPrivate AdjustBar;
+
+static void gwy_adjust_bar_dispose (GObject *object);
+static void gwy_adjust_bar_finalize (GObject *object);
+static void gwy_adjust_bar_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec);
+static void gwy_adjust_bar_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec);
+static void gwy_adjust_bar_forall (GtkContainer *container,
+ gboolean include_internals,
+ GtkCallback callback,
+ gpointer cbdata);
+static void gwy_adjust_bar_realize (GtkWidget *widget);
+static void gwy_adjust_bar_unrealize (GtkWidget *widget);
+static void gwy_adjust_bar_map (GtkWidget *widget);
+static void gwy_adjust_bar_unmap (GtkWidget *widget);
+static void gwy_adjust_bar_size_request (GtkWidget *widget,
+ GtkRequisition *requisition);
+static void gwy_adjust_bar_size_allocate (GtkWidget *widget,
+ GtkAllocation *allocation);
+static gboolean gwy_adjust_bar_expose (GtkWidget *widget,
+ GdkEventExpose *expose);
+static gboolean gwy_adjust_bar_enter_notify (GtkWidget *widget,
+ GdkEventCrossing *event);
+static gboolean gwy_adjust_bar_leave_notify (GtkWidget *widget,
+ GdkEventCrossing *event);
+static gboolean gwy_adjust_bar_scroll (GtkWidget *widget,
+ GdkEventScroll *event);
+static gboolean gwy_adjust_bar_button_press (GtkWidget *widget,
+ GdkEventButton *event);
+static gboolean gwy_adjust_bar_button_release(GtkWidget *widget,
+ GdkEventButton *event);
+static gboolean gwy_adjust_bar_motion_notify (GtkWidget *widget,
+ GdkEventMotion *event);
+static GType gwy_adjust_bar_child_type (GtkContainer *container);
+static void gwy_adjust_bar_change_value (GwyAdjustBar *adjbar,
+ gdouble newvalue);
+static gboolean set_adjustment (GwyAdjustBar *adjbar,
+ GtkAdjustment *adjustment);
+static gboolean set_snap_to_ticks (GwyAdjustBar *adjbar,
+ gboolean setting);
+static gboolean set_mapping (GwyAdjustBar *adjbar,
+ GwyScaleMappingType mapping);
+static void create_input_window (GwyAdjustBar *adjbar);
+static void destroy_input_window (GwyAdjustBar *adjbar);
+static void draw_bar (GwyAdjustBar *adjbar,
+ cairo_t *cr);
+static void adjustment_changed (GwyAdjustBar *adjbar,
+ GtkAdjustment *adjustment);
+static void adjustment_value_changed (GwyAdjustBar *adjbar,
+ GtkAdjustment *adjustment);
+static void update_mapping (GwyAdjustBar *adjbar);
+static gdouble map_value_to_position (GwyAdjustBar *adjbar,
+ gdouble value);
+static gdouble map_position_to_value (GwyAdjustBar *adjbar,
+ gdouble position);
+static gdouble map_both_linear (gdouble value);
+static void change_value (GtkWidget *widget,
+ gdouble newposition);
+static void ensure_cursors (GwyAdjustBar *adjbar);
+static void discard_cursors (GwyAdjustBar *adjbar);
+static gdouble snap_value (GwyAdjustBar *adjbar,
+ gdouble value);
+
+static const GtkBorder default_border = { 4, 4, 3, 3 };
+
+static GParamSpec *properties[N_PROPS];
+static guint signals[N_SIGNALS];
+
+G_DEFINE_TYPE(GwyAdjustBar, gwy_adjust_bar, GTK_TYPE_BIN);
+
+static void
+gwy_adjust_bar_class_init(GwyAdjustBarClass *klass)
+{
+ GObjectClass *gobject_class = G_OBJECT_CLASS(klass);
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(klass);
+ GtkContainerClass *container_class = GTK_CONTAINER_CLASS(klass);
+ guint i;
+
+ g_type_class_add_private(klass, sizeof(AdjustBar));
+
+ gobject_class->dispose = gwy_adjust_bar_dispose;
+ gobject_class->finalize = gwy_adjust_bar_finalize;
+ gobject_class->get_property = gwy_adjust_bar_get_property;
+ gobject_class->set_property = gwy_adjust_bar_set_property;
+
+ widget_class->realize = gwy_adjust_bar_realize;
+ widget_class->unrealize = gwy_adjust_bar_unrealize;
+ widget_class->map = gwy_adjust_bar_map;
+ widget_class->unmap = gwy_adjust_bar_unmap;
+ widget_class->size_request = gwy_adjust_bar_size_request;
+ widget_class->size_allocate = gwy_adjust_bar_size_allocate;
+ widget_class->expose_event = gwy_adjust_bar_expose;
+ widget_class->enter_notify_event = gwy_adjust_bar_enter_notify;
+ widget_class->leave_notify_event = gwy_adjust_bar_leave_notify;
+ widget_class->scroll_event = gwy_adjust_bar_scroll;
+ widget_class->button_press_event = gwy_adjust_bar_button_press;
+ widget_class->button_release_event = gwy_adjust_bar_button_release;
+ widget_class->motion_notify_event = gwy_adjust_bar_motion_notify;
+
+ container_class->forall = gwy_adjust_bar_forall;
+ container_class->child_type = gwy_adjust_bar_child_type;
+
+ klass->change_value = gwy_adjust_bar_change_value;
+
+ properties[PROP_ADJUSTMENT]
+ = g_param_spec_object("adjustment",
+ "Adjustment",
+ "Adjustment representing the value.",
+ GTK_TYPE_ADJUSTMENT,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+
+ properties[PROP_SNAP_TO_TICKS]
+ = g_param_spec_boolean("snap-to-ticks",
+ "Snap to ticks",
+ "Whether only values that are multiples of step "
+ "size are allowed.",
+ FALSE,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+
+ properties[PROP_MAPPING]
+ = g_param_spec_enum("mapping",
+ "Mapping",
+ "Mapping function between values and screen "
+ "positions.",
+ GWY_TYPE_SCALE_MAPPING_TYPE,
+ GWY_SCALE_MAPPING_SQRT,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+
+ properties[PROP_HAS_CHECK_BUTTON]
+ = g_param_spec_boolean("has-check-button",
+ "Has check button",
+ "Whether the adjust bar has a check button.",
+ FALSE,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+
+ for (i = 1; i < N_PROPS; i++)
+ g_object_class_install_property(gobject_class, i, properties[i]);
+
+ /**
+ * GwyAdjustBar::change-value:
+ * @gwyadjustbar: The #GwyAdjustBar which received the signal.
+ * @arg1: New value for @gwyadjustbar.
+ *
+ * The ::change-value signal is emitted when the user interactively
+ * changes the value.
+ *
+ * It is an action signal.
+ **/
+ signals[SGNL_CHANGE_VALUE]
+ = g_signal_new("change-value",
+ G_OBJECT_CLASS_TYPE(klass),
+ G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION,
+ G_STRUCT_OFFSET(GwyAdjustBarClass, change_value),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__DOUBLE,
+ G_TYPE_NONE, 1, G_TYPE_DOUBLE);
+}
+
+static void
+gwy_adjust_bar_init(GwyAdjustBar *adjbar)
+{
+ GtkWidget *label;
+ AdjustBar *priv;
+
+ priv = adjbar->priv = G_TYPE_INSTANCE_GET_PRIVATE(adjbar,
+ GWY_TYPE_ADJUST_BAR,
+ AdjustBar);
+ priv->mapping = GWY_SCALE_MAPPING_SQRT;
+ priv->bar_sensitive = TRUE;
+ GTK_WIDGET_SET_FLAGS(adjbar, GTK_NO_WINDOW);
+ label = gtk_label_new(NULL);
+ gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
+ gtk_container_add(GTK_CONTAINER(adjbar), label);
+}
+
+static void
+gwy_adjust_bar_finalize(GObject *object)
+{
+ G_OBJECT_CLASS(gwy_adjust_bar_parent_class)->finalize(object);
+}
+
+static void
+gwy_adjust_bar_dispose(GObject *object)
+{
+ GwyAdjustBar *adjbar = GWY_ADJUST_BAR(object);
+
+ set_adjustment(adjbar, NULL);
+ G_OBJECT_CLASS(gwy_adjust_bar_parent_class)->dispose(object);
+}
+
+static void
+gwy_adjust_bar_set_property(GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ GwyAdjustBar *adjbar = GWY_ADJUST_BAR(object);
+
+ switch (prop_id) {
+ case PROP_ADJUSTMENT:
+ set_adjustment(adjbar, g_value_get_object(value));
+ break;
+
+ case PROP_SNAP_TO_TICKS:
+ set_snap_to_ticks(adjbar, g_value_get_boolean(value));
+ break;
+
+ case PROP_MAPPING:
+ set_mapping(adjbar, g_value_get_enum(value));
+ break;
+
+ case PROP_HAS_CHECK_BUTTON:
+ gwy_adjust_bar_set_has_check_button(adjbar, g_value_get_boolean(value));
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gwy_adjust_bar_get_property(GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ AdjustBar *priv = GWY_ADJUST_BAR(object)->priv;
+
+ switch (prop_id) {
+ case PROP_ADJUSTMENT:
+ g_value_set_object(value, priv->adjustment);
+ break;
+
+ case PROP_SNAP_TO_TICKS:
+ g_value_set_boolean(value, priv->snap_to_ticks);
+ break;
+
+ case PROP_MAPPING:
+ g_value_set_enum(value, priv->mapping);
+ break;
+
+ case PROP_HAS_CHECK_BUTTON:
+ g_value_set_boolean(value, !!priv->check);
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gwy_adjust_bar_forall(GtkContainer *container, gboolean include_internals,
+ GtkCallback callback, gpointer cbdata)
+{
+ if (include_internals) {
+ AdjustBar *priv = GWY_ADJUST_BAR(container)->priv;
+ if (priv->check)
+ (*callback)(priv->check, cbdata);
+
+ }
+ GTK_CONTAINER_CLASS(gwy_adjust_bar_parent_class)->forall(container,
+ include_internals,
+ callback, cbdata);
+}
+
+static void
+gwy_adjust_bar_realize(GtkWidget *widget)
+{
+ GwyAdjustBar *adjbar = GWY_ADJUST_BAR(widget);
+
+ GTK_WIDGET_CLASS(gwy_adjust_bar_parent_class)->realize(widget);
+ create_input_window(adjbar);
+}
+
+static void
+gwy_adjust_bar_unrealize(GtkWidget *widget)
+{
+ GwyAdjustBar *adjbar = GWY_ADJUST_BAR(widget);
+ AdjustBar *priv = adjbar->priv;
+
+ discard_cursors(adjbar);
+ destroy_input_window(adjbar);
+ priv->adjustment_ok = FALSE;
+ GTK_WIDGET_CLASS(gwy_adjust_bar_parent_class)->unrealize(widget);
+}
+
+static void
+gwy_adjust_bar_map(GtkWidget *widget)
+{
+ GwyAdjustBar *adjbar = GWY_ADJUST_BAR(widget);
+ AdjustBar *priv = adjbar->priv;
+ GtkWidget *check = priv->check;
+
+ GTK_WIDGET_CLASS(gwy_adjust_bar_parent_class)->map(widget);
+ if (priv->input_window)
+ gdk_window_show(priv->input_window);
+ if (check
+ && GTK_WIDGET_VISIBLE(check)
+ && gtk_widget_get_child_visible(check)
+ && !GTK_WIDGET_MAPPED(check))
+ gtk_widget_map(check);
+}
+
+static void
+gwy_adjust_bar_unmap(GtkWidget *widget)
+{
+ GwyAdjustBar *adjbar = GWY_ADJUST_BAR(widget);
+ AdjustBar *priv = adjbar->priv;
+ GtkWidget *check = priv->check;
+
+ if (check)
+ gtk_widget_unmap(check);
+ if (priv->input_window)
+ gdk_window_hide(priv->input_window);
+ GTK_WIDGET_CLASS(gwy_adjust_bar_parent_class)->unmap(widget);
+}
+
+static void
+gwy_adjust_bar_size_request(GtkWidget *widget, GtkRequisition *requisition)
+{
+ AdjustBar *priv = GWY_ADJUST_BAR(widget)->priv;
+ GtkWidget *label;
+ GtkRequisition child_req;
+ gint border_width, spacing;
+
+ requisition->width = default_border.left + default_border.right;
+ requisition->height = default_border.top + default_border.bottom;
+
+ border_width = gtk_container_get_border_width(GTK_CONTAINER(widget));
+ requisition->width += 2*border_width;
+ requisition->height += 2*border_width;
+
+ label = GTK_BIN(widget)->child;
+ if (label && GTK_WIDGET_VISIBLE(label)) {
+ gtk_widget_size_request(label, &child_req);
+ requisition->width += child_req.width;
+ requisition->height += child_req.height;
+ }
+
+ if (priv->check) {
+ gtk_widget_size_request(priv->check, &child_req);
+ requisition->width += child_req.width;
+ requisition->height = MAX(requisition->height, child_req.height);
+
+ /* Reproduce checkbutton's indicator spacing internally. It puts two
+ * spacings between the check and label. So use that instead of
+ * our default border. */
+ gtk_widget_style_get(priv->check, "indicator-spacing", &spacing, NULL);
+ requisition->width += 2*spacing;
+ requisition->width -= default_border.left;
+ }
+}
+
+static void
+gwy_adjust_bar_size_allocate(GtkWidget *widget, GtkAllocation *allocation)
+{
+ AdjustBar *priv = GWY_ADJUST_BAR(widget)->priv;
+ GtkWidget *label;
+ GtkAllocation child_allocation;
+ GtkRequisition child_req;
+ gint border_width, spacing, width, h;
+
+ border_width = gtk_container_get_border_width(GTK_CONTAINER(widget));
+ widget->allocation = *allocation;
+
+ priv->x = 0;
+ width = allocation->width;
+ if (priv->check) {
+ gtk_widget_get_child_requisition(priv->check, &child_req);
+ gtk_widget_style_get(priv->check, "indicator-spacing", &spacing, NULL);
+ priv->x = child_req.width + 2*spacing - default_border.left;
+ priv->x = MAX(priv->x, 0);
+ width = MAX(width - priv->x, 1);
+
+ child_allocation.x = allocation->x;
+ child_allocation.y = allocation->y + (allocation->height
+ - child_req.height)/2;
+ child_allocation.width = child_req.width;
+ child_allocation.height = child_req.height;
+ gtk_widget_size_allocate(priv->check, &child_allocation);
+ }
+
+ gwy_debug("ALLOCATION %dx%d at (%d,%d)",
+ allocation->width, allocation->height,
+ allocation->x, allocation->y);
+ if (priv->input_window) {
+ gwy_debug("INPUT WINDOW %dx%d at (%d,%d)",
+ width, allocation->height,
+ allocation->x + priv->x, allocation->y);
+ gdk_window_move_resize(priv->input_window,
+ allocation->x + priv->x, allocation->y,
+ width, allocation->height);
+ }
+
+ label = GTK_BIN(widget)->child;
+ if (label && GTK_WIDGET_VISIBLE(label)) {
+ gtk_widget_get_child_requisition(label, &child_req);
+ h = child_req.height + (2*border_width
+ + default_border.top + default_border.bottom);
+ child_allocation.x = (allocation->x + priv->x
+ + border_width + default_border.left);
+ child_allocation.y = (allocation->y
+ + MAX(allocation->height - h, 0)/2
+ + border_width + default_border.top);
+ child_allocation.width = (width - 2*border_width
+ - default_border.left - default_border.right);
+ child_allocation.height = (allocation->height - 2*border_width
+ - default_border.top - default_border.bottom);
+ gtk_widget_size_allocate(label, &child_allocation);
+ }
+
+ update_mapping(GWY_ADJUST_BAR(widget));
+}
+
+static gboolean
+gwy_adjust_bar_expose(GtkWidget *widget, GdkEventExpose *event)
+{
+ if (GTK_WIDGET_DRAWABLE(widget)) {
+ GwyAdjustBar *adjbar = GWY_ADJUST_BAR(widget);
+ cairo_t *cr;
+
+ cr = gdk_cairo_create(gtk_widget_get_parent_window(widget));
+#ifdef DEBUG
+ {
+ cairo_set_source_rgba(cr, 0.1, 0.9, 0.2, 1.0);
+ cairo_rectangle(cr,
+ widget->allocation.x, widget->allocation.y,
+ widget->allocation.width, widget->allocation.height);
+ cairo_fill(cr);
+ }
+#endif
+ cairo_translate(cr,
+ widget->allocation.x + adjbar->priv->x,
+ widget->allocation.y);
+ draw_bar(adjbar, cr);
+ cairo_destroy(cr);
+ }
+ GTK_WIDGET_CLASS(gwy_adjust_bar_parent_class)->expose_event(widget, event);
+
+ return FALSE;
+}
+
+static gboolean
+gwy_adjust_bar_enter_notify(GtkWidget *widget,
+ G_GNUC_UNUSED GdkEventCrossing *event)
+{
+ AdjustBar *priv = GWY_ADJUST_BAR(widget)->priv;
+ GtkStateType state = GTK_WIDGET_STATE(widget);
+
+ if (!priv->bar_sensitive)
+ return FALSE;
+ ensure_cursors(GWY_ADJUST_BAR(widget));
+ if (!(state & GTK_STATE_PRELIGHT))
+ gtk_widget_set_state(widget, state | GTK_STATE_PRELIGHT);
+ return FALSE;
+}
+
+static gboolean
+gwy_adjust_bar_leave_notify(GtkWidget *widget,
+ G_GNUC_UNUSED GdkEventCrossing *event)
+{
+ AdjustBar *priv = GWY_ADJUST_BAR(widget)->priv;
+ GtkStateType state = GTK_WIDGET_STATE(widget);
+
+ if (!priv->bar_sensitive || priv->dragging)
+ return FALSE;
+ if (state & GTK_STATE_PRELIGHT)
+ gtk_widget_set_state(widget, state & ~GTK_STATE_PRELIGHT);
+ return FALSE;
+}
+
+static gboolean
+gwy_adjust_bar_scroll(GtkWidget *widget, GdkEventScroll *event)
+{
+ GdkScrollDirection dir = event->direction;
+ GwyAdjustBar *adjbar = GWY_ADJUST_BAR(widget);
+ AdjustBar *priv = adjbar->priv;
+ gdouble value, position, newposition;
+
+ if (!priv->adjustment_ok)
+ return TRUE;
+
+ value = gtk_adjustment_get_value(priv->adjustment);
+ position = map_value_to_position(adjbar, value);
+ newposition = position;
+ if (dir == GDK_SCROLL_UP || dir == GDK_SCROLL_RIGHT)
+ newposition += 1.0;
+ else
+ newposition -= 1.0;
+
+ newposition = CLAMP(newposition, 0.0, priv->length);
+ if (newposition != position)
+ change_value(widget, newposition);
+ return TRUE;
+}
+
+static gboolean
+gwy_adjust_bar_button_press(GtkWidget *widget, GdkEventButton *event)
+{
+ AdjustBar *priv = GWY_ADJUST_BAR(widget)->priv;
+
+ if (!priv->bar_sensitive || event->button != 1)
+ return FALSE;
+ priv->dragging = TRUE;
+ change_value(widget, event->x);
+ if (GTK_BIN(widget)->child)
+ gtk_widget_mnemonic_activate(GTK_BIN(widget)->child, FALSE);
+ return TRUE;
+}
+
+static gboolean
+gwy_adjust_bar_button_release(GtkWidget *widget, GdkEventButton *event)
+{
+ AdjustBar *priv = GWY_ADJUST_BAR(widget)->priv;
+
+ if (!priv->bar_sensitive || event->button != 1)
+ return FALSE;
+ change_value(widget, event->x);
+ priv->dragging = FALSE;
+ return TRUE;
+}
+
+static gboolean
+gwy_adjust_bar_motion_notify(GtkWidget *widget, GdkEventMotion *event)
+{
+ AdjustBar *priv = GWY_ADJUST_BAR(widget)->priv;
+
+ if (!priv->bar_sensitive || !(event->state & GDK_BUTTON1_MASK))
+ return FALSE;
+ change_value(widget, event->x);
+ return TRUE;
+}
+
+static GType
+gwy_adjust_bar_child_type(GtkContainer *container)
+{
+ GtkWidget *child = GTK_BIN(container)->child;
+
+ if (!child)
+ return GTK_TYPE_LABEL;
+ else
+ return G_TYPE_NONE;
+}
+
+static void
+gwy_adjust_bar_change_value(GwyAdjustBar *adjbar, gdouble newvalue)
+{
+ AdjustBar *priv = adjbar->priv;
+ gdouble value;
+
+ g_return_if_fail(priv->adjustment);
+ if (!priv->adjustment_ok)
+ return;
+
+ value = gtk_adjustment_get_value(priv->adjustment);
+ newvalue = snap_value(adjbar, newvalue);
+ if (fabs(newvalue - value) <= 1e-12*fmax(fabs(newvalue), fabs(value)))
+ return;
+
+ gtk_adjustment_set_value(priv->adjustment, newvalue);
+}
+
+/**
+ * gwy_adjust_bar_new:
+ * @adjustment: The adjustment the adjust bar should use, or %NULL.
+ * @label: Text of the adjustment bar label, or %NULL.
+ *
+ * Creates a new adjustment bar.
+ *
+ * The label text, if any, is set with mnemonic enabled. However, you still
+ * need to assign it to a widget (presumably a #GtkSpinButton) using
+ * gtk_label_set_mnemonic_widget().
+ *
+ * Returns: A new adjustment bar.
+ *
+ * Since: 2.49
+ **/
+GtkWidget*
+gwy_adjust_bar_new(GtkAdjustment *adjustment, const gchar *label)
+{
+ GwyAdjustBar *adjbar;
+
+ if (adjustment) {
+ adjbar = g_object_new(GWY_TYPE_ADJUST_BAR,
+ "adjustment", adjustment,
+ NULL);
+ }
+ else
+ adjbar = g_object_newv(GWY_TYPE_ADJUST_BAR, 0, NULL);
+
+ if (label) {
+ GtkWidget *child = GTK_BIN(adjbar)->child;
+ gtk_label_set_text_with_mnemonic(GTK_LABEL(child), label);
+ }
+
+ return GTK_WIDGET(adjbar);
+}
+
+/**
+ * gwy_adjust_bar_set_adjustment:
+ * @adjbar: An adjustment bar.
+ * @adjustment: Adjustment to use for the value.
+ *
+ * Sets the adjustment that an adjustment bar visualises.
+ *
+ * Since: 2.49
+ **/
+void
+gwy_adjust_bar_set_adjustment(GwyAdjustBar *adjbar,
+ GtkAdjustment *adjustment)
+{
+ g_return_if_fail(GWY_IS_ADJUST_BAR(adjbar));
+ g_return_if_fail(GTK_IS_ADJUSTMENT(adjustment));
+ if (!set_adjustment(adjbar, adjustment))
+ return;
+
+ g_object_notify(G_OBJECT(adjbar), "adjustment");
+}
+
+/**
+ * gwy_adjust_bar_get_adjustment:
+ * @adjbar: An adjustment bar.
+ *
+ * Obtains the adjustment that an adjustment bar visualises.
+ *
+ * Returns: The adjustment used by @adjbar. If no adjustment was set
+ * and the default one is used, function returns %NULL.
+ *
+ * Since: 2.49
+ **/
+GtkAdjustment*
+gwy_adjust_bar_get_adjustment(GwyAdjustBar *adjbar)
+{
+ g_return_val_if_fail(GWY_IS_ADJUST_BAR(adjbar), NULL);
+ return adjbar->priv->adjustment;
+}
+
+/**
+ * gwy_adjust_bar_set_snap_to_ticks:
+ * @adjbar: An adjustment bar.
+ * @setting: %TRUE to restrict values to multiples of step size,
+ * %FALSE to permit any values.
+ *
+ * Sets the snapping behaviour of an adjustment bar.
+ *
+ * Note the ‘multiples of step size’ condition in fact applies to the
+ * difference from the minimum value. The maximum adjustment value is always
+ * permissible, even if it does not satisfy this condition. Values modified by
+ * the user (i.e. emission of signal "change-value") are snapped, however,
+ * values set explicitly gtk_adjustment_set_value() are kept intact.
+ *
+ * Setting this option to %TRUE immediately causes an adjustment value change
+ * if it does not satisfy the condition.
+ *
+ * It is usually a poor idea to enable snapping for non-linear mappings.
+ *
+ * Since: 2.49
+ **/
+void
+gwy_adjust_bar_set_snap_to_ticks(GwyAdjustBar *adjbar,
+ gboolean setting)
+{
+ g_return_if_fail(GWY_IS_ADJUST_BAR(adjbar));
+ if (!set_snap_to_ticks(adjbar, setting))
+ return;
+
+ g_object_notify(G_OBJECT(adjbar), "snap-to-ticks");
+}
+
+/**
+ * gwy_adjust_bar_get_snap_to_ticks:
+ * @adjbar: An adjustment bar.
+ *
+ * Sets the snapping behaviour of an adjustment bar.
+ *
+ * Returns: %TRUE if values are restricted to multiples of step size.
+ *
+ * Since: 2.49
+ **/
+gboolean
+gwy_adjust_bar_get_snap_to_ticks(GwyAdjustBar *adjbar)
+{
+ g_return_val_if_fail(GWY_IS_ADJUST_BAR(adjbar), FALSE);
+ return !!adjbar->priv->snap_to_ticks;
+}
+
+/**
+ * gwy_adjust_bar_set_mapping:
+ * @adjbar: An adjustment bar.
+ * @mapping: Mapping function type between values and screen positions in the
+ * adjustment bar.
+ *
+ * Sets the mapping function type for an adjustment bar.
+ *
+ * Since: 2.49
+ **/
+void
+gwy_adjust_bar_set_mapping(GwyAdjustBar *adjbar,
+ GwyScaleMappingType mapping)
+{
+ g_return_if_fail(GWY_IS_ADJUST_BAR(adjbar));
+ if (!set_mapping(adjbar, mapping))
+ return;
+
+ g_object_notify(G_OBJECT(adjbar), "mapping");
+}
+
+/**
+ * gwy_adjust_bar_get_mapping:
+ * @adjbar: An adjustment bar.
+ *
+ * Gets the mapping function type of an adjustment bar.
+ *
+ * Returns: The type of mapping function between values and screen positions.
+ *
+ * Since: 2.49
+ **/
+GwyScaleMappingType
+gwy_adjust_bar_get_mapping(GwyAdjustBar *adjbar)
+{
+ g_return_val_if_fail(GWY_IS_ADJUST_BAR(adjbar), GWY_SCALE_MAPPING_LINEAR);
+ return adjbar->priv->mapping;
+}
+
+/**
+ * gwy_adjust_bar_set_has_check_button:
+ * @adjbar: An adjustment bar.
+ * @setting: %TRUE to enable a check button; %FALSE to disable it.
+ *
+ * Sets whether an adjustment bar has a check button.
+ *
+ * Since: 2.49
+ **/
+void
+gwy_adjust_bar_set_has_check_button(GwyAdjustBar *adjbar, gboolean setting)
+{
+ AdjustBar *priv;
+
+ g_return_if_fail(GWY_IS_ADJUST_BAR(adjbar));
+ priv = adjbar->priv;
+ if (!setting == !priv->check)
+ return;
+
+ if (setting) {
+ priv->check = gtk_check_button_new();
+ gtk_widget_set_parent(priv->check, GTK_WIDGET(adjbar));
+ gtk_widget_set_name(priv->check, "gwyadjbarcheck");
+ /* FIXME: Should do even if we are hidden? */
+ gtk_widget_show(priv->check);
+ }
+ else {
+ gtk_widget_destroy(priv->check);
+ priv->check = NULL;
+ }
+
+ if (GTK_WIDGET_VISIBLE(GTK_WIDGET(adjbar)))
+ gtk_widget_queue_resize(GTK_WIDGET(adjbar));
+
+ g_object_notify(G_OBJECT(adjbar), "has-check-button");
+}
+
+/**
+ * gwy_adjust_bar_get_has_check_button:
+ * @adjbar: An adjustment bar.
+ *
+ * Reports whether an adjustment bar has a check button.
+ *
+ * Returns: %TRUE if the adjustment bar has a check button.
+ *
+ * Since: 2.49
+ **/
+gboolean
+gwy_adjust_bar_get_has_check_button(GwyAdjustBar *adjbar)
+{
+ g_return_val_if_fail(GWY_IS_ADJUST_BAR(adjbar), FALSE);
+ return !!adjbar->priv->check;
+}
+
+/**
+ * gwy_adjust_bar_get_label:
+ * @adjbar: An adjustment bar.
+ *
+ * Gets the label widget inside an adjustment bar.
+ *
+ * Use gtk_label_set_mnemonic_widget() to set the mnemonic widget for the label
+ * or change the label text.
+ *
+ * Returns: The label widget.
+ *
+ * Since: 2.49
+ **/
+GtkWidget*
+gwy_adjust_bar_get_label(GwyAdjustBar *adjbar)
+{
+ g_return_val_if_fail(GWY_IS_ADJUST_BAR(adjbar), NULL);
+ return GTK_BIN(adjbar)->child;
+}
+
+/**
+ * gwy_adjust_bar_get_check_button:
+ * @adjbar: An adjustment bar.
+ *
+ * Gets the check button of an adjustment bar.
+ *
+ * Connect to the "toggled" signal of the check button. Modifying it is not
+ * recommended.
+ *
+ * Returns: The check button widget, or %NULL if there is none.
+ *
+ * Since: 2.49
+ **/
+GtkWidget*
+gwy_adjust_bar_get_check_button(GwyAdjustBar *adjbar)
+{
+ g_return_val_if_fail(GWY_IS_ADJUST_BAR(adjbar), NULL);
+ return adjbar->priv->check;
+}
+
+/**
+ * gwy_adjust_bar_set_bar_sensitive:
+ * @adjbar: An adjustment bar.
+ * @sensitive: %TRUE to make the widget's bar sensitive.
+ *
+ * Sets the sensitivity of an adjustment bar.
+ *
+ * The bar's sensitivity can be controlled separately. This is useful when
+ * @adjbar has a check button because otherwise the bar is the entire widget
+ * and the function is not different from gtk_widget_set_sensitive().
+ * However, if you want to enable and disable the adjustment bar via the check
+ * button, use this function instead of gtk_widget_set_sensitive() which would
+ * make insensitive also the check button.
+ *
+ * Since: 2.49
+ **/
+void
+gwy_adjust_bar_set_bar_sensitive(GwyAdjustBar *adjbar, gboolean sensitive)
+{
+ GtkWidget *widget;
+ AdjustBar *priv;
+
+ g_return_if_fail(GWY_IS_ADJUST_BAR(adjbar));
+ priv = adjbar->priv;
+ if (!priv->bar_sensitive == !sensitive)
+ return;
+
+ priv->bar_sensitive = sensitive;
+ if (sensitive) {
+ gtk_widget_set_sensitive(GTK_BIN(adjbar)->child, TRUE);
+ if (priv->input_window)
+ ensure_cursors(adjbar);
+ }
+ else {
+ if (priv->input_window) {
+ gdk_window_set_cursor(priv->input_window, NULL);
+ discard_cursors(adjbar);
+ }
+ gtk_widget_set_sensitive(GTK_BIN(adjbar)->child, FALSE);
+ }
+
+ widget = GTK_WIDGET(adjbar);
+ if (GTK_WIDGET_DRAWABLE(widget))
+ gtk_widget_queue_draw(widget);
+}
+
+/**
+ * gwy_adjust_bar_get_bar_sensitive:
+ * @adjbar: An adjustment bar.
+ *
+ * Reports whether an adjustment bar is sensitive.
+ *
+ * See gwy_adjust_bar_set_bar_sensitive() for discussion.
+ *
+ * Returns: %TRUE if the widget's bar is sensitive.
+ *
+ * Since: 2.49
+ **/
+gboolean
+gwy_adjust_bar_get_bar_sensitive(GwyAdjustBar *adjbar)
+{
+ g_return_val_if_fail(GWY_IS_ADJUST_BAR(adjbar), FALSE);
+ return adjbar->priv->bar_sensitive;
+}
+
+static gboolean
+set_adjustment(GwyAdjustBar *adjbar,
+ GtkAdjustment *adjustment)
+{
+ AdjustBar *priv = adjbar->priv;
+ if (!gwy_set_member_object(adjbar, adjustment, GTK_TYPE_ADJUSTMENT,
+ &priv->adjustment,
+ "changed", &adjustment_changed,
+ &priv->adjustment_changed_id,
+ G_CONNECT_SWAPPED,
+ "value-changed", &adjustment_value_changed,
+ &priv->adjustment_value_changed_id,
+ G_CONNECT_SWAPPED,
+ NULL))
+ return FALSE;
+
+ update_mapping(adjbar);
+ gtk_widget_queue_draw(GTK_WIDGET(adjbar));
+ return TRUE;
+}
+
+static gboolean
+set_snap_to_ticks(GwyAdjustBar *adjbar,
+ gboolean setting)
+{
+ AdjustBar *priv = adjbar->priv;
+ if (!setting == !priv->snap_to_ticks)
+ return FALSE;
+
+ priv->snap_to_ticks = !!setting;
+ if (setting && priv->adjustment) {
+ gdouble value = gtk_adjustment_get_value(priv->adjustment);
+ gdouble snapped = snap_value(adjbar, value);
+ if (fabs(snapped - value) > 1e-12*fmax(fabs(snapped), fabs(value)))
+ gtk_adjustment_set_value(priv->adjustment, snapped);
+ }
+
+ return TRUE;
+}
+
+static gboolean
+set_mapping(GwyAdjustBar *adjbar,
+ GwyScaleMappingType mapping)
+{
+ AdjustBar *priv = adjbar->priv;
+ if (mapping == priv->mapping)
+ return FALSE;
+
+ if (mapping > GWY_SCALE_MAPPING_LOG) {
+ g_warning("Wrong scale mapping %u.", mapping);
+ return FALSE;
+ }
+
+ priv->mapping = mapping;
+ update_mapping(adjbar);
+ gtk_widget_queue_draw(GTK_WIDGET(adjbar));
+ return TRUE;
+}
+
+static void
+create_input_window(GwyAdjustBar *adjbar)
+{
+ AdjustBar *priv = adjbar->priv;
+ GtkWidget *widget = GTK_WIDGET(adjbar);
+ GtkAllocation *allocation = &widget->allocation;
+ GdkWindowAttr attributes;
+ gint attributes_mask;
+
+ g_return_if_fail(GTK_WIDGET_REALIZED(widget));
+ if (priv->input_window)
+ return;
+
+ attributes.x = allocation->x + priv->x;
+ attributes.y = allocation->y;
+ attributes.width = priv->length;
+ attributes.height = allocation->height;
+ attributes.window_type = GDK_WINDOW_CHILD;
+ attributes.wclass = GDK_INPUT_ONLY;
+ attributes.event_mask = (gtk_widget_get_events(widget)
+ | GDK_BUTTON_PRESS_MASK
+ | GDK_BUTTON_RELEASE_MASK
+ | GDK_ENTER_NOTIFY_MASK
+ | GDK_LEAVE_NOTIFY_MASK
+ | GDK_SCROLL_MASK
+ | GDK_POINTER_MOTION_MASK
+ | GDK_POINTER_MOTION_HINT_MASK);
+ attributes_mask = GDK_WA_X | GDK_WA_Y;
+ gwy_debug("CREATE INPUT WINDOW %dx%d at (%d,%d)",
+ attributes.width, attributes.height, attributes.x, attributes.y);
+ priv->input_window = gdk_window_new(gtk_widget_get_parent_window(widget),
+ &attributes, attributes_mask);
+ gdk_window_set_user_data(priv->input_window, widget);
+}
+
+static void
+destroy_input_window(GwyAdjustBar *adjbar)
+{
+ AdjustBar *priv = adjbar->priv;
+
+ if (!priv->input_window)
+ return;
+ gwy_debug("DESTROY INPUT WINDOW");
+ gdk_window_destroy(priv->input_window);
+ priv->input_window = NULL;
+}
+
+static void
+draw_bar(GwyAdjustBar *adjbar, cairo_t *cr)
+{
+ AdjustBar *priv = adjbar->priv;
+ GtkWidget *widget = GTK_WIDGET(adjbar);
+ GtkStateType state = GTK_WIDGET_STATE(widget);
+ gdouble height = widget->allocation.height;
+ gdouble width = priv->length;
+ gdouble val, barlength = 0.0;
+ GwyRGBA base_color = { 0.3, 0.6, 1.0, 1.0 }, fcolor, bcolor;
+ GwyRGBA bgcolor = { 1.0, 1.0, 1.0, 1.0 };
+
+ if ((state & GTK_STATE_INSENSITIVE) || !priv->bar_sensitive) {
+ base_color.a *= 0.4;
+ bgcolor.a *= 0.4;
+ }
+ fcolor = bcolor = base_color;
+ fcolor.a *= (state & GTK_STATE_PRELIGHT) ? 0.5 : 0.333;
+ bgcolor.a *= (state & GTK_STATE_PRELIGHT) ? 0.5 : 0.333;
+
+ if (priv->adjustment_ok) {
+ val = gtk_adjustment_get_value(priv->adjustment);
+ barlength = map_value_to_position(adjbar, val);
+ }
+
+ if (width > 2.0 && height > 2.0) {
+ cairo_set_source_rgba(cr, bgcolor.r, bgcolor.g, bgcolor.b, bgcolor.a);
+ cairo_rectangle(cr, 1.0, 1.0, width-2.0, height-2.0);
+ cairo_fill(cr);
+ }
+
+ if (barlength < 0.5)
+ return;
+
+ cairo_set_line_width(cr, 1.0);
+ if (barlength > 2.0) {
+ cairo_rectangle(cr, 0.0, 0.0, barlength, height);
+ cairo_set_source_rgba(cr, fcolor.r, fcolor.g, fcolor.b, fcolor.a);
+ cairo_fill(cr);
+
+ cairo_rectangle(cr, 0.5, 0.5, barlength-1.0, height-1.0);
+ cairo_set_source_rgba(cr, bcolor.r, bcolor.g, bcolor.b, bcolor.a);
+ cairo_stroke(cr);
+ }
+ else {
+ cairo_rectangle(cr, 0, 0, barlength, height);
+ cairo_set_source_rgba(cr, bcolor.r, bcolor.g, bcolor.b, bcolor.a);
+ cairo_fill(cr);
+ }
+}
+
+static void
+adjustment_changed(GwyAdjustBar *adjbar,
+ G_GNUC_UNUSED GtkAdjustment *adjustment)
+{
+ update_mapping(adjbar);
+ gtk_widget_queue_draw(GTK_WIDGET(adjbar));
+}
+
+static void
+adjustment_value_changed(GwyAdjustBar *adjbar,
+ GtkAdjustment *adjustment)
+{
+ AdjustBar *priv = adjbar->priv;
+ gdouble newvalue;
+
+ if (!priv->adjustment_ok)
+ return;
+
+ newvalue = gtk_adjustment_get_value(adjustment);
+ if (newvalue == priv->oldvalue)
+ return;
+
+ priv->oldvalue = newvalue;
+ gtk_widget_queue_draw(GTK_WIDGET(adjbar));
+}
+
+static gdouble
+ssqrt(gdouble x)
+{
+ return (x < 0.0) ? -sqrt(fabs(x)) : sqrt(x);
+}
+
+static gdouble
+ssqr(gdouble x)
+{
+ return x*fabs(x);
+}
+
+static void
+update_mapping(GwyAdjustBar *adjbar)
+{
+ AdjustBar *priv = adjbar->priv;
+ gdouble lower, upper;
+
+ priv->adjustment_ok = FALSE;
+ if (!priv->adjustment)
+ return;
+
+ lower = priv->adjustment->lower;
+ upper = priv->adjustment->upper;
+
+ if (gwy_isinf(lower) || gwy_isnan(lower)
+ || gwy_isinf(upper) || gwy_isnan(upper))
+ return;
+
+ if (priv->mapping == GWY_SCALE_MAPPING_LOG) {
+ if (lower <= 0.0 || upper <= 0.0)
+ return;
+ }
+
+ priv->length = GTK_WIDGET(adjbar)->allocation.width - priv->x;
+ if (priv->length < 2)
+ return;
+
+ if (priv->mapping == GWY_SCALE_MAPPING_LINEAR)
+ priv->map_value = priv->map_position = map_both_linear;
+ else if (priv->mapping == GWY_SCALE_MAPPING_SQRT) {
+ priv->map_value = ssqrt;
+ priv->map_position = ssqr;
+ }
+ else if (priv->mapping == GWY_SCALE_MAPPING_LOG) {
+ priv->map_value = log;
+ priv->map_position = exp;
+ }
+ priv->b = priv->map_value(lower);
+ priv->a = (priv->map_value(upper) - priv->b)/priv->length;
+ if (gwy_isinf(priv->a) || gwy_isnan(priv->a) || !priv->a
+ || gwy_isinf(priv->b) || gwy_isnan(priv->b))
+ return;
+
+ priv->adjustment_ok = TRUE;
+}
+
+static gdouble
+map_value_to_position(GwyAdjustBar *adjbar, gdouble value)
+{
+ AdjustBar *priv = adjbar->priv;
+
+ return (priv->map_value(value) - priv->b)/priv->a;
+}
+
+static gdouble
+map_position_to_value(GwyAdjustBar *adjbar, gdouble position)
+{
+ AdjustBar *priv = adjbar->priv;
+
+ return priv->map_position(priv->a*position + priv->b);
+}
+
+static gdouble
+map_both_linear(gdouble value)
+{
+ return value;
+}
+
+static void
+change_value(GtkWidget *widget, gdouble newposition)
+{
+ GwyAdjustBar *adjbar = GWY_ADJUST_BAR(widget);
+ AdjustBar *priv = adjbar->priv;
+ gdouble value, newvalue;
+
+ if (!priv->adjustment_ok)
+ return;
+
+ value = gtk_adjustment_get_value(priv->adjustment);
+ newposition = CLAMP(newposition, 0.0, priv->length);
+ newvalue = map_position_to_value(adjbar, newposition);
+ if (newvalue != value)
+ g_signal_emit(adjbar, signals[SGNL_CHANGE_VALUE], 0, newvalue);
+}
+
+static void
+ensure_cursors(GwyAdjustBar *adjbar)
+{
+ AdjustBar *priv = adjbar->priv;
+ GdkDisplay *display;
+
+ if (priv->cursor_move)
+ return;
+
+ display = gtk_widget_get_display(GTK_WIDGET(adjbar));
+ priv->cursor_move = gdk_cursor_new_for_display(display,
+ GDK_SB_H_DOUBLE_ARROW);
+ gdk_window_set_cursor(priv->input_window, priv->cursor_move);
+}
+
+static void
+discard_cursors(GwyAdjustBar *adjbar)
+{
+ AdjustBar *priv = adjbar->priv;
+
+ if (priv->cursor_move) {
+ gdk_cursor_unref(priv->cursor_move);
+ priv->cursor_move = NULL;
+ }
+}
+
+static gdouble
+snap_value(GwyAdjustBar *adjbar, gdouble value)
+{
+ AdjustBar *priv = adjbar->priv;
+ gdouble step, lower, upper, m;
+
+ if (!priv->adjustment || !priv->snap_to_ticks)
+ return value;
+
+ step = priv->adjustment->step_increment;
+ if (!step)
+ return value;
+
+ lower = priv->adjustment->lower;
+ upper = priv->adjustment->upper;
+ m = 0.5*fmin(step, upper - lower);
+ if (value >= upper - m)
+ return upper;
+
+ value = GWY_ROUND((value - lower)/step)*step + lower;
+ if (value > upper)
+ value -= step;
+ if (value < lower)
+ value = lower;
+
+ return value;
+}
+
+/**
+ * SECTION: gwyadjustbar
+ * @title: GwyAdjustBar
+ * @short_description: Compact adjustment visualisation and modification
+ *
+ * #GwyAdjustBar is a compact widget for visualisation and modification of the
+ * value of an #GtkAdjustment. It can contains a label with an overlaid bar
+ * that can be clicked, dragged or modified by the scroll-wheel by the user.
+ * Since the widget does not take keyboard focus, it should be paired with a
+ * #GtkSpinButton, sharing the same adjustment. This spin button would also be
+ * the typical mnemonic widget for the adjustment bar.
+ *
+ * #GwyAdjustBar supports several different types of mapping between screen
+ * positions and values of the underlying adjustment. Nevertheless, the
+ * default mapping (signed square root, %GWY_SCALE_MAPPING_SQRT) should fit
+ * most situations.
+ **/
+
+/**
+ * GwyAdjustBar:
+ *
+ * Adjustment bar widget visualising an adjustment.
+ *
+ * The #GwyAdjustBar struct contains private data only and should be accessed
+ * using the functions below.
+ *
+ * Since: 2.49
+ **/
+
+/**
+ * GwyAdjustBarClass:
+ *
+ * Class of adjustment bars visualising adjustments.
+ *
+ * Since: 2.49
+ **/
+
+/**
+ * GwyScaleMappingType:
+ * @GWY_SCALE_MAPPING_LINEAR: Linear mapping between values and screen
+ * positions. This recommended for signed additive
+ * quantities of a limited range.
+ * @GWY_SCALE_MAPPING_SQRT: Screen positions correspond to ‘signed square
+ * roots’ of the value. This is the
+ * recommended general-purpose default mapping type as
+ * it works with both signed and usigned quantities
+ * and offers good sensitivity for both large and
+ * small values.
+ * @GWY_SCALE_MAPPING_LOG: Screen positions correspond to logarithms of values.
+ * The adjustment range must contain only positive
+ * values. For quantities of extreme ranges this
+ * mapping may be preferred to %GWY_SCALE_MAPPING_SQRT.
+ *
+ * Type of adjustment bar mapping functions.
+ *
+ * Since: 2.49
+ **/
+
+/* vim: set cin et ts=4 sw=4 cino=>1s,e0,n0,f0,{0,}0,^0,\:1s,=0,g1s,h0,t0,+1s,c3,(0,u0 : */
diff --git a/libgwydgets/gwyadjustbar.h b/libgwydgets/gwyadjustbar.h
new file mode 100644
index 0000000..d718961
--- /dev/null
+++ b/libgwydgets/gwyadjustbar.h
@@ -0,0 +1,85 @@
+/*
+ * @(#) $Id: gwyadjustbar.h 19899 2017-06-11 07:07:40Z yeti-dn $
+ * Copyright (C) 2012-2017 David Necas (Yeti).
+ * E-mail: yeti at gwyddion.net.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GWY_ADJUST_BAR_H__
+#define __GWY_ADJUST_BAR_H__
+
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
+typedef enum {
+ GWY_SCALE_MAPPING_LINEAR = 0,
+ GWY_SCALE_MAPPING_SQRT = 1,
+ GWY_SCALE_MAPPING_LOG = 2,
+} GwyScaleMappingType;
+
+#define GWY_TYPE_ADJUST_BAR (gwy_adjust_bar_get_type())
+#define GWY_ADJUST_BAR(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GWY_TYPE_ADJUST_BAR, GwyAdjustBar))
+#define GWY_ADJUST_BAR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GWY_TYPE_ADJUST_BAR, GwyAdjustBarClass))
+#define GWY_IS_ADJUST_BAR(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GWY_TYPE_ADJUST_BAR))
+#define GWY_IS_ADJUST_BAR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), GWY_TYPE_ADJUST_BAR))
+#define GWY_ADJUST_BAR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GWY_TYPE_ADJUST_BAR, GwyAdjustBarClass))
+
+typedef struct _GwyAdjustBar GwyAdjustBar;
+typedef struct _GwyAdjustBarClass GwyAdjustBarClass;
+
+struct _GwyAdjustBar {
+ GtkBin bin;
+ struct _GwyAdjustBarPrivate *priv;
+};
+
+struct _GwyAdjustBarClass {
+ /*<private>*/
+ GtkBinClass bin_class;
+
+ void (*change_value)(GwyAdjustBar *adjbar, gdouble value);
+
+ void (*reserved1)(void);
+ void (*reserved2)(void);
+};
+
+GType gwy_adjust_bar_get_type (void) G_GNUC_CONST;
+GtkWidget* gwy_adjust_bar_new (GtkAdjustment *adjustment,
+ const gchar *label);
+void gwy_adjust_bar_set_adjustment (GwyAdjustBar *adjbar,
+ GtkAdjustment *adjustment);
+GtkAdjustment* gwy_adjust_bar_get_adjustment (GwyAdjustBar *adjbar);
+void gwy_adjust_bar_set_snap_to_ticks (GwyAdjustBar *adjbar,
+ gboolean setting);
+gboolean gwy_adjust_bar_get_snap_to_ticks (GwyAdjustBar *adjbar);
+void gwy_adjust_bar_set_mapping (GwyAdjustBar *adjbar,
+ GwyScaleMappingType mapping);
+GwyScaleMappingType gwy_adjust_bar_get_mapping (GwyAdjustBar *adjbar);
+void gwy_adjust_bar_set_has_check_button(GwyAdjustBar *adjbar,
+ gboolean setting);
+gboolean gwy_adjust_bar_get_has_check_button(GwyAdjustBar *adjbar);
+void gwy_adjust_bar_set_bar_sensitive (GwyAdjustBar *adjbar,
+ gboolean sensitive);
+gboolean gwy_adjust_bar_get_bar_sensitive (GwyAdjustBar *adjbar);
+GtkWidget* gwy_adjust_bar_get_label (GwyAdjustBar *adjbar);
+GtkWidget* gwy_adjust_bar_get_check_button (GwyAdjustBar *adjbar);
+
+G_END_DECLS
+
+#endif
+
+/* vim: set cin et ts=4 sw=4 cino=>1s,e0,n0,f0,{0,}0,^0,\:1s,=0,g1s,h0,t0,+1s,c3,(0,u0 : */
diff --git a/libgwydgets/gwyaxisdialog.c b/libgwydgets/gwyaxisdialog.c
index 3d07284..b1bc6b4 100644
--- a/libgwydgets/gwyaxisdialog.c
+++ b/libgwydgets/gwyaxisdialog.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: gwyaxisdialog.c 18206 2016-01-24 22:16:43Z yeti-dn $
+ * @(#) $Id: gwyaxisdialog.c 19922 2017-06-17 12:16:45Z yeti-dn $
* Copyright (C) 2003 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -27,24 +27,8 @@
#include <libgwydgets/gwyscitext.h>
#include <libgwydgets/gwyaxisdialog.h>
-static gboolean gwy_axis_dialog_delete (GtkWidget *widget,
- GdkEventAny *event);
-/*
-static void major_length_changed_cb (GtkAdjustment *adj,
- GObject *axis);
-static void major_thickness_changed_cb(GtkAdjustment *adj,
- GObject *axis);
-static void major_maxticks_changed_cb (GtkAdjustment *adj,
- GObject *axis);
-static void minor_length_changed_cb (GtkAdjustment *adj,
- GObject *axis);
-static void minor_thickness_changed_cb(GtkAdjustment *adj,
- GObject *axis);
-static void minor_division_changed_cb (GtkAdjustment *adj,
- GObject *axis);
-static void autoscale_changed_cb (GtkToggleButton *button,
- GwyAxisDialog *dialog);
-*/
+static gboolean gwy_axis_dialog_delete(GtkWidget *widget,
+ GdkEventAny *event);
G_DEFINE_TYPE(GwyAxisDialog, _gwy_axis_dialog, GTK_TYPE_DIALOG)
@@ -59,14 +43,12 @@ _gwy_axis_dialog_class_init(GwyAxisDialogClass *klass)
static void
_gwy_axis_dialog_init(G_GNUC_UNUSED GwyAxisDialog *dialog)
{
- gwy_debug("");
}
static gboolean
gwy_axis_dialog_delete(GtkWidget *widget,
G_GNUC_UNUSED GdkEventAny *event)
{
- gwy_debug("");
gtk_widget_hide(widget);
return TRUE;
@@ -86,19 +68,11 @@ _gwy_axis_dialog_new(GwyAxis *axis)
GwyAxisDialog *dialog;
GtkWidget *label, *table;
gint row;
- /*
- gint row;
- gboolean is_auto;
- */
- gwy_debug("");
dialog = GWY_AXIS_DIALOG(g_object_new(GWY_TYPE_AXIS_DIALOG, NULL));
dialog->axis = axis;
- if (dialog->axis)
- gtk_window_set_title(GTK_WINDOW(dialog), _("Axis Properties"));
- else
- gtk_window_set_title(GTK_WINDOW(dialog), _("Label Properties"));
+ gtk_window_set_title(GTK_WINDOW(dialog), _("Axis Properties"));
gtk_dialog_add_button(GTK_DIALOG(dialog),
GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE);
@@ -111,76 +85,6 @@ _gwy_axis_dialog_new(GwyAxis *axis)
gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), table);
row = 0;
- /*
- label = gwy_label_new_header(_("Axis Settings"));
- gtk_table_attach(GTK_TABLE(table), label,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
- row++;
-
- g_object_get(dialog->axis, "auto", &is_auto, NULL);
- dialog->is_auto = gtk_check_button_new_with_mnemonic(_("_Autoscale"));
- gtk_table_attach(GTK_TABLE(table), dialog->is_auto,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
- g_signal_connect(dialog->is_auto, "toggled",
- G_CALLBACK(autoscale_changed_cb), dialog);
- row++;
-
- g_object_get(dialog->axis, "major-maxticks", &i, NULL);
- dialog->major_division = gtk_adjustment_new(i, 1, 50, 1, 5, 0);
- dialog->major_division_spin
- = gwy_table_attach_hscale(table, row, _("Major division:"), NULL,
- dialog->major_division, 0);
- g_signal_connect(dialog->major_division, "value-changed",
- G_CALLBACK(major_maxticks_changed_cb), dialog->axis);
- row++;
-
- g_object_get(dialog->axis, "major-thickness", &i, NULL);
- dialog->major_thickness = gtk_adjustment_new(i, 1, 10, 1, 5, 0);
- gwy_table_attach_spinbutton(table, row, _("Major thickness:"), NULL,
- dialog->major_thickness);
- g_signal_connect(dialog->major_thickness, "value-changed",
- G_CALLBACK(major_thickness_changed_cb), dialog->axis);
- row++;
-
- g_object_get(dialog->axis, "major-length", &i, NULL);
- dialog->major_length = gtk_adjustment_new(i, 1, 20, 1, 5, 0);
- gwy_table_attach_spinbutton(table, row, _("Major length:"), NULL,
- dialog->major_length);
- g_signal_connect(dialog->major_length, "value-changed",
- G_CALLBACK(major_length_changed_cb), dialog->axis);
- row++;
-
- g_object_get(dialog->axis, "minor-division", &i, NULL);
- dialog->minor_division = gtk_adjustment_new(i, 1, 20, 1, 5, 0);
- dialog->minor_division_spin
- = gwy_table_attach_spinbutton(table, row, _("Minor division:"),
- NULL,
- dialog->minor_division);
- g_signal_connect(dialog->minor_division, "value-changed",
- G_CALLBACK(minor_division_changed_cb), dialog->axis);
- row++;
-
- g_object_get(dialog->axis, "minor-thickness", &i, NULL);
- dialog->minor_thickness = gtk_adjustment_new(i, 1, 10, 1, 5, 0);
- gwy_table_attach_spinbutton(table, row, _("Minor thickness:"), NULL,
- dialog->minor_thickness);
- g_signal_connect(dialog->minor_thickness, "value-changed",
- G_CALLBACK(minor_thickness_changed_cb), dialog->axis);
- row++;
-
- g_object_get(dialog->axis, "minor-length", &i, NULL);
- dialog->minor_length = gtk_adjustment_new(i, 1, 20, 1, 5, 0);
- gwy_table_attach_spinbutton(table, row, _("Minor length:"), NULL,
- dialog->minor_length);
- g_signal_connect(dialog->minor_length, "value-changed",
- G_CALLBACK(minor_length_changed_cb), dialog->axis);
- gtk_table_set_row_spacing(GTK_TABLE(table), row, 8);
- row++;
-
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dialog->is_auto),
- is_auto);
- */
-
label = gwy_label_new_header(_("Label Text"));
gtk_table_attach(GTK_TABLE(table), label,
0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
@@ -202,62 +106,6 @@ _gwy_axis_dialog_get_sci_text(GtkWidget* dialog)
}
/*
-static void
-major_length_changed_cb(GtkAdjustment *adj, GObject *axis)
-{
- g_object_set(axis, "major-length", gwy_adjustment_get_int(adj), NULL);
-}
-
-static void
-major_maxticks_changed_cb(GtkAdjustment *adj, GObject *axis)
-{
- g_object_set(axis, "major-maxticks", gwy_adjustment_get_int(adj), NULL);
-}
-
-static void
-major_thickness_changed_cb(GtkAdjustment *adj, GObject *axis)
-{
- g_object_set(axis, "major-thickness", gwy_adjustment_get_int(adj), NULL);
-}
-
-static void
-minor_length_changed_cb(GtkAdjustment *adj, GObject *axis)
-{
- g_object_set(axis, "minor-length", gwy_adjustment_get_int(adj), NULL);
-}
-
-static void
-minor_thickness_changed_cb(GtkAdjustment *adj, GObject *axis)
-{
- g_object_set(axis, "minor-thickness", gwy_adjustment_get_int(adj), NULL);
-}
-
-static void
-minor_division_changed_cb(GtkAdjustment *adj, GObject *axis)
-{
- g_object_set(axis, "minor-division", gwy_adjustment_get_int(adj), NULL);
-}
-
-
-static void
-autoscale_changed_cb(GtkToggleButton *button, GwyAxisDialog *dialog)
-{
- gboolean is_auto;
-
- is_auto = gtk_toggle_button_get_active(button);
-
- gtk_widget_set_sensitive(GTK_WIDGET(dialog->minor_division_spin), !is_auto);
- gtk_widget_set_sensitive(GTK_WIDGET(dialog->major_division_spin), !is_auto);
-
- g_object_set(dialog->axis, "auto", is_auto, NULL);
- g_object_set(dialog->axis, "major-maxticks",
- gwy_adjustment_get_int(dialog->major_division), NULL);
- g_object_set(dialog->axis, "minor-division",
- gwy_adjustment_get_int(dialog->minor_division), NULL);
-}
-*/
-
-/*
* SECTION:gwyaxisdialog
* @title: GwyAxisDialog
* @short_description: Axis properties dialog
diff --git a/libgwydgets/gwycombobox.c b/libgwydgets/gwycombobox.c
index 9fcc709..c87f50f 100644
--- a/libgwydgets/gwycombobox.c
+++ b/libgwydgets/gwycombobox.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: gwycombobox.c 18289 2016-02-18 20:46:34Z yeti-dn $
+ * @(#) $Id: gwycombobox.c 20070 2017-07-12 07:48:27Z yeti-dn $
* Copyright (C) 2003-2016 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -449,10 +449,7 @@ render_curve_colour(G_GNUC_UNUSED GtkCellLayout *layout,
g_return_if_fail(gcmodel);
g_object_get(gcmodel, "color", &color, NULL);
- pixel = 0xff
- | ((guint32)(guchar)floor(255.99999*color->b) << 8)
- | ((guint32)(guchar)floor(255.99999*color->g) << 16)
- | ((guint32)(guchar)floor(255.99999*color->r) << 24);
+ pixel = 0xff | gwy_rgba_to_pixbuf_pixel(color);
gwy_rgba_free(color);
gdk_pixbuf_fill(pixbuf, pixel);
}
diff --git a/libgwydgets/gwydataview.c b/libgwydgets/gwydataview.c
index 1d02b85..42ee1ec 100644
--- a/libgwydgets/gwydataview.c
+++ b/libgwydgets/gwydataview.c
@@ -1,6 +1,6 @@
/*
- * @(#) $Id: gwydataview.c 19037 2016-10-08 10:40:49Z yeti-dn $
- * Copyright (C) 2003 David Necas (Yeti), Petr Klapetek.
+ * @(#) $Id: gwydataview.c 19491 2017-02-24 09:35:27Z yeti-dn $
+ * Copyright (C) 2003-2017 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
* This program is free software; you can redistribute it and/or modify
@@ -1213,6 +1213,8 @@ gwy_data_view_coords_xy_clamp(GwyDataView *data_view,
}
}
+/* XXX: This functions should have a return value saying whether the line
+ * intersect the area at all. But cannot do this without changing the API. */
/**
* gwy_data_view_coords_xy_cut_line:
* @data_view: A data view.
@@ -1249,15 +1251,19 @@ gwy_data_view_coords_xy_cut_line(GwyDataView *data_view,
/* Horizontal/vertical lines */
if (*x1scr == *x0scr) {
+ if (*x0scr != x0s)
+ goto fail;
*y0scr = y0s;
*y1scr = y1s;
+ return;
}
if (*y1scr == *y0scr) {
+ if (*y0scr != y0s)
+ goto fail;
*x0scr = x0s;
*x1scr = x1s;
- }
- if (*y1scr == *y0scr || *x1scr == *x0scr)
return;
+ }
/* The hard case */
x0s = *x0scr;
@@ -1298,18 +1304,20 @@ gwy_data_view_coords_xy_cut_line(GwyDataView *data_view,
i1 = i;
}
- /* The line does not intersect the boundary at all. Just return something
- * and pray... */
- if (i0 == -1) {
- *x0scr = *x1scr = xsize/2;
- *y0scr = *y1scr = ysize/2;
- return;
- }
+ if (i0 == -1)
+ goto fail;
*x0scr = GWY_ROUND(x0s + t[i0]*(x1s - x0s));
*x1scr = GWY_ROUND(x0s + t[i1]*(x1s - x0s));
*y0scr = GWY_ROUND(y0s + t[i0]*(y1s - y0s));
*y1scr = GWY_ROUND(y0s + t[i1]*(y1s - y0s));
+ return;
+
+fail:
+ /* The line does not intersect the boundary at all. Just return something
+ * and pray... */
+ *x0scr = *x1scr = xsize/2;
+ *y0scr = *y1scr = ysize/2;
}
/**
diff --git a/libgwydgets/gwydgetenums.c b/libgwydgets/gwydgetenums.c
index b78948f..4b7d6d0 100644
--- a/libgwydgets/gwydgetenums.c
+++ b/libgwydgets/gwydgetenums.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: gwydgetenums.c 18878 2016-08-24 17:22:53Z yeti-dn $
+ * @(#) $Id: gwydgetenums.c 19924 2017-06-17 12:57:41Z yeti-dn $
* Copyright (C) 2005 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -111,19 +111,26 @@ gwy_graph_curve_type_get_enum(void)
/**
* GwyHScaleStyle:
* @GWY_HSCALE_DEFAULT: Default label, hscale, spinbutton, and units widget
- * row.
- * @GWY_HSCALE_LOG: Hscale is logarithmic.
- * @GWY_HSCALE_SQRT: Hscale is square root.
- * @GWY_HSCALE_NO_SCALE: There is no hscale.
- * @GWY_HSCALE_WIDGET: An user-specified widget is used in place of hscale and
- * spinbutton.
+ * row. Note that the default mapping is linear for
+ * hscales but signed square root for adjust bars.
+ * @GWY_HSCALE_LOG: The scale mapping is logarithmic.
+ * @GWY_HSCALE_SQRT: The scale mapping is signed square root.
+ * @GWY_HSCALE_LINEAR: The scale mapping is linear. (Since 2.49)
+ * @GWY_HSCALE_NO_SCALE: There is no hscale/adjust bar.
+ * @GWY_HSCALE_WIDGET: An user-specified widget is used in place of the
+ * adjustment control(s).
* @GWY_HSCALE_WIDGET_NO_EXPAND: An user-specified widget is used in place of
* hscale and spinbutton, and it is left-aligned
* instead of taking all the alloted space.
* @GWY_HSCALE_CHECK: The label is actually a check button that controls
- * sensitivity of the row.
- *
- * Options controlling gwy_table_attach_hscale() behaviour.
+ * sensitivity of the row. This is a flag, to be bitwise
+ * or-ed with other values.
+ * @GWY_HSCALE_SNAP: The adjust bar snaps to ticks (hscales cannot snap).
+ * This is a flag, to be bitwise or-ed with other values.
+ * (Since 2.49)
+ *
+ * Options controlling gwy_table_attach_adjbar() and gwy_table_attach_hscale()
+ * behaviour.
**/
/**
diff --git a/libgwydgets/gwydgetenums.h b/libgwydgets/gwydgetenums.h
index 12b220c..cdfbf67 100644
--- a/libgwydgets/gwydgetenums.h
+++ b/libgwydgets/gwydgetenums.h
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: gwydgetenums.h 18878 2016-08-24 17:22:53Z yeti-dn $
+ * @(#) $Id: gwydgetenums.h 19924 2017-06-17 12:57:41Z yeti-dn $
* Copyright (C) 2005 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -66,15 +66,16 @@ typedef enum {
GWY_UNITS_PLACEMENT_AT_ZERO
} GwyUnitsPlacement;
-/* XXX */
typedef enum {
GWY_HSCALE_DEFAULT = 0,
GWY_HSCALE_LOG = 1,
GWY_HSCALE_SQRT = 2,
+ GWY_HSCALE_LINEAR = 3,
GWY_HSCALE_NO_SCALE = 6,
GWY_HSCALE_WIDGET = 7,
GWY_HSCALE_WIDGET_NO_EXPAND = 8,
- GWY_HSCALE_CHECK = 1024
+ GWY_HSCALE_CHECK = 1024,
+ GWY_HSCALE_SNAP = 2048,
} GwyHScaleStyle;
typedef enum {
diff --git a/libgwydgets/gwydgetmarshals.c b/libgwydgets/gwydgetmarshals.c
index dbb8c45..6baa206 100644
--- a/libgwydgets/gwydgetmarshals.c
+++ b/libgwydgets/gwydgetmarshals.c
@@ -64,9 +64,9 @@ _gwydget_marshal_VOID__INT_PARAM (GClosure *closure,
gint arg_1,
gpointer arg_2,
gpointer data2);
- register GMarshalFunc_VOID__INT_PARAM callback;
- register GCClosure *cc = (GCClosure*) closure;
- register gpointer data1, data2;
+ GMarshalFunc_VOID__INT_PARAM callback;
+ GCClosure *cc = (GCClosure*) closure;
+ gpointer data1, data2;
g_return_if_fail (n_param_values == 3);
diff --git a/libgwydgets/gwydgets.c b/libgwydgets/gwydgets.c
index 112fceb..c64cbc1 100644
--- a/libgwydgets/gwydgets.c
+++ b/libgwydgets/gwydgets.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: gwydgets.c 15598 2013-11-11 12:33:32Z yeti-dn $
+ * @(#) $Id: gwydgets.c 19833 2017-06-04 13:03:23Z yeti-dn $
* Copyright (C) 2003 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -65,6 +65,13 @@ gwy_widgets_type_init(void)
" GtkStatusbar::shadow_type = 0\n"
"}\n"
"widget \"*.gwyflatstatusbar\" style \"gwyflatstatusbar\"\n"
+ "\n"
+ /* adjust bar internal check button */
+ "style \"gwyadjbarcheck\" {\n"
+ " GtkCheckButton::focus_padding = 0\n"
+ " GtkCheckButton::focus_line_width = 0\n"
+ "}\n"
+ "widget \"*.gwyadjbarcheck\" style \"gwyadjbarcheck\"\n"
"\n");
}
diff --git a/libgwydgets/gwydgets.h b/libgwydgets/gwydgets.h
index b4c02bb..b1d2e6b 100644
--- a/libgwydgets/gwydgets.h
+++ b/libgwydgets/gwydgets.h
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: gwydgets.h 15598 2013-11-11 12:33:32Z yeti-dn $
+ * @(#) $Id: gwydgets.h 19825 2017-06-01 09:27:11Z yeti-dn $
* Copyright (C) 2003,2004 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -31,6 +31,7 @@
#include <libgwydgets/gwy3dsetup.h>
#include <libgwydgets/gwy3dview.h>
#include <libgwydgets/gwy3dwindow.h>
+#include <libgwydgets/gwyadjustbar.h>
#include <libgwydgets/gwyaxis.h>
#include <libgwydgets/gwycoloraxis.h>
#include <libgwydgets/gwycolorbutton.h>
diff --git a/libgwydgets/gwydgettypes.c b/libgwydgets/gwydgettypes.c
index c9cd194..b343490 100644
--- a/libgwydgets/gwydgettypes.c
+++ b/libgwydgets/gwydgettypes.c
@@ -120,10 +120,12 @@ gwy_hscale_style_get_type(void)
{ GWY_HSCALE_DEFAULT, "GWY_HSCALE_DEFAULT", "default" },
{ GWY_HSCALE_LOG, "GWY_HSCALE_LOG", "log" },
{ GWY_HSCALE_SQRT, "GWY_HSCALE_SQRT", "sqrt" },
+ { GWY_HSCALE_LINEAR, "GWY_HSCALE_LINEAR", "linear" },
{ GWY_HSCALE_NO_SCALE, "GWY_HSCALE_NO_SCALE", "no-scale" },
{ GWY_HSCALE_WIDGET, "GWY_HSCALE_WIDGET", "widget" },
{ GWY_HSCALE_WIDGET_NO_EXPAND, "GWY_HSCALE_WIDGET_NO_EXPAND", "widget-no-expand" },
{ GWY_HSCALE_CHECK, "GWY_HSCALE_CHECK", "check" },
+ { GWY_HSCALE_SNAP, "GWY_HSCALE_SNAP", "snap" },
{ 0, NULL, NULL }
};
etype = g_enum_register_static("GwyHScaleStyle", values);
@@ -365,6 +367,25 @@ gwy_ticks_style_get_type(void)
return etype;
}
+#include "./gwyadjustbar.h"
+
+GType
+gwy_scale_mapping_type_get_type(void)
+{
+ static GType etype = 0;
+
+ if (etype == 0) {
+ static const GEnumValue values[] = {
+ { GWY_SCALE_MAPPING_LINEAR, "GWY_SCALE_MAPPING_LINEAR", "linear" },
+ { GWY_SCALE_MAPPING_SQRT, "GWY_SCALE_MAPPING_SQRT", "sqrt" },
+ { GWY_SCALE_MAPPING_LOG, "GWY_SCALE_MAPPING_LOG", "log" },
+ { 0, NULL, NULL }
+ };
+ etype = g_enum_register_static("GwyScaleMappingType", values);
+ }
+ return etype;
+}
+
#include "./gwygrainvaluemenu.h"
GType
diff --git a/libgwydgets/gwydgettypes.h b/libgwydgets/gwydgettypes.h
index e2083fe..a7b196b 100644
--- a/libgwydgets/gwydgettypes.h
+++ b/libgwydgets/gwydgettypes.h
@@ -65,6 +65,9 @@ GType gwy_data_view_layer_type_get_type(void) G_GNUC_CONST;
GType gwy_ticks_style_get_type(void) G_GNUC_CONST;
#define GWY_TYPE_TICKS_STYLE (gwy_ticks_style_get_type())
+GType gwy_scale_mapping_type_get_type(void) G_GNUC_CONST;
+#define GWY_TYPE_SCALE_MAPPING_TYPE (gwy_scale_mapping_type_get_type())
+
GType gwy_grain_value_store_column_get_type(void) G_GNUC_CONST;
#define GWY_TYPE_GRAIN_VALUE_STORE_COLUMN (gwy_grain_value_store_column_get_type())
diff --git a/libgwydgets/gwydgetutils.c b/libgwydgets/gwydgetutils.c
index ae1fd3d..39a2718 100644
--- a/libgwydgets/gwydgetutils.c
+++ b/libgwydgets/gwydgetutils.c
@@ -1,6 +1,6 @@
/*
- * @(#) $Id: gwydgetutils.c 19127 2016-10-26 21:09:48Z yeti-dn $
- * Copyright (C) 2003 David Necas (Yeti), Petr Klapetek.
+ * @(#) $Id: gwydgetutils.c 19924 2017-06-17 12:57:41Z yeti-dn $
+ * Copyright (C) 2003-2017 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
* This program is free software; you can redistribute it and/or modify
@@ -28,8 +28,10 @@
#include <libgwyddion/gwydebugobjects.h>
#include <libdraw/gwydraw.h>
#ifndef GDK_WINDOWING_QUARTZ
+/* Produces a warning with -Wundef in Fedora. Reported as Bug 1414319. */
#include <pango/pangoft2.h>
#endif
+#include <libgwydgets/gwyadjustbar.h>
#include <libgwydgets/gwydgetutils.h>
enum {
@@ -44,6 +46,8 @@ static void gwy_hscale_update_sqrt(GtkAdjustment *adj,
GtkAdjustment *slave);
static void gwy_hscale_update_sq (GtkAdjustment *adj,
GtkAdjustment *slave);
+static void hscale_set_sensitive (GtkObject *pivot,
+ gboolean sensitive);
static void disconnect_slave (GtkWidget *slave,
GtkWidget *master);
static void disconnect_master (GtkWidget *master,
@@ -78,7 +82,7 @@ gwy_table_attach_spinbutton(GtkWidget *table,
else
adj = gtk_adjustment_new(0, 0, 0, 0, 0, 0);
- spin = gtk_spin_button_new(GTK_ADJUSTMENT(adj), 1, 0);
+ spin = gtk_spin_button_new(GTK_ADJUSTMENT(adj), 0.1, 0);
gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(spin), TRUE);
gwy_table_attach_row(table, row, name, units, spin);
@@ -166,6 +170,18 @@ gwy_table_get_child_widget(GtkWidget *table,
/************************** Scale attaching ****************************/
+static gdouble
+ssqrt(gdouble x)
+{
+ return (x < 0.0) ? -sqrt(fabs(x)) : sqrt(x);
+}
+
+static gdouble
+ssqr(gdouble x)
+{
+ return x*fabs(x);
+}
+
static void
gwy_hscale_update_log(GtkAdjustment *adj, GtkAdjustment *slave)
{
@@ -201,7 +217,7 @@ gwy_hscale_update_sqrt(GtkAdjustment *adj, GtkAdjustment *slave)
G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA,
0, 0, 0, gwy_hscale_update_sq, adj);
g_signal_handler_block(slave, id);
- gtk_adjustment_set_value(slave, sqrt(adj->value));
+ gtk_adjustment_set_value(slave, ssqrt(adj->value));
g_signal_handler_unblock(slave, id);
}
@@ -214,7 +230,7 @@ gwy_hscale_update_sq(GtkAdjustment *adj, GtkAdjustment *slave)
G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA,
0, 0, 0, gwy_hscale_update_sqrt, adj);
g_signal_handler_block(slave, id);
- gtk_adjustment_set_value(slave, adj->value*adj->value);
+ gtk_adjustment_set_value(slave, ssqr(adj->value));
g_signal_handler_unblock(slave, id);
}
@@ -224,38 +240,80 @@ gwy_hscale_update_sq(GtkAdjustment *adj, GtkAdjustment *slave)
* @pivot.
* @sensitive: %TRUE to make the row sensitive, %FALSE to insensitive.
*
- * Sets sensitivity of a group of controls create by gwy_table_attach_hscale().
+ * Sets sensitivity of a group of controls create by gwy_table_attach_hscale()
+ * or gwy_table_attach_adjbar().
*
- * Do not use with %GWY_HSCALE_CHECK, simply set state of the check button
- * in such a case.
+ * For controls without an enable/disable check button controls the sensitivity
+ * as expected. If the hscale was created with %GWY_HSCALE_CHECK you usually
+ * manage its sensitivity by setting state of the check button instead.
+ * Only use this function when you want to enable/disable the entire group
+ * of controls, including the check button.
*
- * This function can be used with rows created by gwy_table_attach_spinbutton()
- * too if the spinbutton is passed as @pivot.
+ * This function can also be used with rows created by
+ * gwy_table_attach_spinbutton() too if the spinbutton is passed as @pivot.
**/
void
-gwy_table_hscale_set_sensitive(GtkObject *pivot,
- gboolean sensitive)
+gwy_table_hscale_set_sensitive(GtkObject *pivot, gboolean sensitive)
{
- GtkWidget *widget;
- GObject *object;
+ GtkWidget *scale, *check;
+ gboolean sens = sensitive;
- object = G_OBJECT(pivot);
+ g_object_set_data(G_OBJECT(pivot), "gwy-explicit-disable",
+ GINT_TO_POINTER(!sensitive));
- if ((widget = g_object_get_data(object, "scale")))
- gtk_widget_set_sensitive(widget, sensitive);
- if ((widget = g_object_get_data(object, "middle_widget")))
- gtk_widget_set_sensitive(widget, sensitive);
- if ((widget = g_object_get_data(object, "label")))
- gtk_widget_set_sensitive(widget, sensitive);
- if ((widget = g_object_get_data(object, "units")))
- gtk_widget_set_sensitive(widget, sensitive);
+ if ((check = gwy_table_hscale_get_check(pivot))
+ && GTK_IS_CHECK_BUTTON(check)) {
+ sens = (sensitive
+ && gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(check)));
+ }
+ else
+ check = NULL;
+
+ hscale_set_sensitive(pivot, sens);
+
+ if (check) {
+ scale = gwy_table_hscale_get_scale(pivot);
+ if (scale && GWY_IS_ADJUST_BAR(scale))
+ gtk_widget_set_sensitive(scale, sensitive);
+ else
+ gtk_widget_set_sensitive(check, sensitive);
+ }
}
static void
-gwy_hscale_checkbutton_cb(GtkToggleButton *check,
- GtkObject *pivot)
+hscale_checkbutton_toggled(GtkToggleButton *check, GtkObject *pivot)
{
- gwy_table_hscale_set_sensitive(pivot, gtk_toggle_button_get_active(check));
+ gboolean sens, active;
+
+ active = gtk_toggle_button_get_active(check);
+ sens = !GPOINTER_TO_INT(g_object_get_data(G_OBJECT(pivot),
+ "gwy-explicit-disable"));
+ hscale_set_sensitive(pivot, active && sens);
+}
+
+static void
+hscale_set_sensitive(GtkObject *pivot, gboolean sensitive)
+{
+ GtkWidget *widget;
+ gboolean is_adjbar = FALSE;
+
+ widget = gwy_table_hscale_get_scale(pivot);
+ if (widget && GWY_IS_ADJUST_BAR(widget))
+ is_adjbar = TRUE;
+
+ if (is_adjbar)
+ gwy_adjust_bar_set_bar_sensitive(GWY_ADJUST_BAR(widget), sensitive);
+ else {
+ if (widget)
+ gtk_widget_set_sensitive(widget, sensitive);
+ if ((widget = gwy_table_hscale_get_label(pivot)))
+ gtk_widget_set_sensitive(widget, sensitive);
+ }
+
+ if ((widget = gwy_table_hscale_get_middle_widget(pivot)))
+ gtk_widget_set_sensitive(widget, sensitive);
+ if ((widget = gwy_table_hscale_get_units(pivot)))
+ gtk_widget_set_sensitive(widget, sensitive);
}
/**
@@ -269,28 +327,30 @@ gwy_hscale_checkbutton_cb(GtkToggleButton *check,
* @style: A mix of options an flags determining what and how will be attached
* to the table.
*
- * Attaches a spinbutton with a scale and labels, or something else to a table
+ * Attaches a spinbutton with a scale and labels, or something else, to a table
* row.
*
+ * The group of controls takes four table columns: label, scale, spinbutton
+ * and units.
+ *
* You can use functions gwy_table_hscale_get_scale(),
* gwy_table_hscale_get_check(), etc. to get the various widgets from pivot
* later.
*
- * FIXME: What exactly happens with various @style values is quite convoluted.
+ * The function usually does the right thing but what exactly happens with
+ * various @style values is a bit convoluted.
*
* Returns: The middle widget. If a spinbutton is attached, then this
* spinbutton is returned. Otherwise (in %GWY_HSCALE_WIDGET case)
* @pivot itself.
**/
GtkWidget*
-gwy_table_attach_hscale(GtkWidget *table,
- gint row,
- const gchar *name,
- const gchar *units,
+gwy_table_attach_hscale(GtkWidget *table, gint row,
+ const gchar *name, const gchar *units,
GtkObject *pivot,
GwyHScaleStyle style)
{
- GtkWidget *spin, *scale, *label, *check, *middle_widget, *align;
+ GtkWidget *spin, *scale, *label, *check = NULL, *middle_widget, *align;
GtkAdjustment *scale_adj = NULL, *adj = NULL;
GwyHScaleStyle base_style;
GtkTable *tab;
@@ -300,12 +360,13 @@ gwy_table_attach_hscale(GtkWidget *table,
g_return_val_if_fail(GTK_IS_TABLE(table), NULL);
tab = GTK_TABLE(table);
- base_style = style & ~GWY_HSCALE_CHECK;
+ base_style = style & ~(GWY_HSCALE_CHECK | GWY_HSCALE_SNAP);
switch (base_style) {
case GWY_HSCALE_DEFAULT:
case GWY_HSCALE_NO_SCALE:
case GWY_HSCALE_LOG:
case GWY_HSCALE_SQRT:
+ case GWY_HSCALE_LINEAR:
if (pivot) {
g_return_val_if_fail(GTK_IS_ADJUSTMENT(pivot), NULL);
adj = GTK_ADJUSTMENT(pivot);
@@ -313,7 +374,8 @@ gwy_table_attach_hscale(GtkWidget *table,
else {
if (base_style == GWY_HSCALE_LOG || base_style == GWY_HSCALE_SQRT)
g_warning("Nonlinear scale doesn't work with implicit adj.");
- adj = GTK_ADJUSTMENT(gtk_adjustment_new(0, 0, 0, 0, 0, 0));
+ adj = GTK_ADJUSTMENT(gtk_adjustment_new(0.01, 0.01, 1.00, 0.01, 0.1,
+ 0));
}
break;
@@ -327,11 +389,16 @@ gwy_table_attach_hscale(GtkWidget *table,
break;
}
+ if (style & GWY_HSCALE_SNAP) {
+ g_warning("gwy_table_attach_hscale() does not implement "
+ "snapping to ticks.");
+ }
+
if (base_style != GWY_HSCALE_WIDGET
&& base_style != GWY_HSCALE_WIDGET_NO_EXPAND) {
u = adj->step_increment;
digits = (u > 0.0) ? (gint)floor(-log10(u)) : 0;
- spin = gtk_spin_button_new(adj, adj->step_increment, MAX(digits, 0));
+ spin = gtk_spin_button_new(adj, 0.1, MAX(digits, 0));
u = adj->value;
gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(spin), TRUE);
gtk_spin_button_set_snap_to_ticks(GTK_SPIN_BUTTON(spin), TRUE);
@@ -357,7 +424,7 @@ gwy_table_attach_hscale(GtkWidget *table,
u = sqrt(adj->upper);
l = sqrt(adj->lower);
scale_adj
- = GTK_ADJUSTMENT(gtk_adjustment_new(sqrt(adj->value),
+ = GTK_ADJUSTMENT(gtk_adjustment_new(ssqrt(adj->value),
l, u,
(u - l)/GWY_HSCALE_WIDTH,
10*(u - l)/GWY_HSCALE_WIDTH,
@@ -387,7 +454,8 @@ gwy_table_attach_hscale(GtkWidget *table,
if (base_style == GWY_HSCALE_DEFAULT
|| base_style == GWY_HSCALE_LOG
- || base_style == GWY_HSCALE_SQRT) {
+ || base_style == GWY_HSCALE_SQRT
+ || base_style == GWY_HSCALE_LINEAR) {
scale = gtk_hscale_new(scale_adj);
gtk_scale_set_draw_value(GTK_SCALE(scale), FALSE);
gtk_widget_set_size_request(scale, GWY_HSCALE_WIDTH, -1);
@@ -396,12 +464,11 @@ gwy_table_attach_hscale(GtkWidget *table,
g_object_set_data(G_OBJECT(pivot), "scale", scale);
}
-
if (style & GWY_HSCALE_CHECK) {
check = gtk_check_button_new_with_mnemonic(name);
gtk_table_attach(tab, check, 0, 1, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect(check, "toggled",
- G_CALLBACK(gwy_hscale_checkbutton_cb), pivot);
+ G_CALLBACK(hscale_checkbutton_toggled), pivot);
g_object_set_data(G_OBJECT(pivot), "check", check);
}
else {
@@ -420,6 +487,193 @@ gwy_table_attach_hscale(GtkWidget *table,
g_object_set_data(G_OBJECT(pivot), "units", label);
}
+ if (check)
+ hscale_checkbutton_toggled(GTK_TOGGLE_BUTTON(check), pivot);
+
+ return middle_widget;
+}
+
+/**
+ * gwy_table_attach_adjbar:
+ * @table: A #GtkTable.
+ * @row: Row in @table to attach stuff to.
+ * @name: The label before @pivot widget.
+ * @units: The label after @pivot widget.
+ * @pivot: Either a #GtkAdjustment, or a widget to use instead of the spin
+ * button and scale widgets (if @style is %GWY_HSCALE_WIDGET).
+ * @style: A mix of options an flags determining what and how will be attached
+ * to the table.
+ *
+ * Attaches an adjustment bar with spinbutton and labels, or something else, to
+ * a table row.
+ *
+ * The group of controls takes three table columns: adjustment bar, spinbutton
+ * and units.
+ *
+ * You can use functions gwy_table_hscale_get_scale(),
+ * gwy_table_hscale_get_check(), etc. to get the various widgets from pivot
+ * later.
+ *
+ * The function usually does the right thing but what exactly happens with
+ * various @style values is a bit convoluted.
+ *
+ * Returns: The middle widget. If a spinbutton is attached, then this
+ * spinbutton is returned. Otherwise (in %GWY_HSCALE_WIDGET case)
+ * @pivot itself.
+ *
+ * Since: 2.49
+ **/
+GtkWidget*
+gwy_table_attach_adjbar(GtkWidget *table, gint row,
+ const gchar *name, const gchar *units,
+ GtkObject *pivot,
+ GwyHScaleStyle style)
+{
+ GtkWidget *spin, *label, *check = NULL, *middle_widget, *hbox;
+ GtkAdjustment *adj = NULL;
+ GwyHScaleStyle base_style;
+ GwyAdjustBar *adjbar;
+ GtkTable *tab;
+ gdouble u;
+ gint digits, spacing;
+
+ g_return_val_if_fail(GTK_IS_TABLE(table), NULL);
+ tab = GTK_TABLE(table);
+
+ base_style = style & ~(GWY_HSCALE_CHECK | GWY_HSCALE_SNAP);
+ switch (base_style) {
+ case GWY_HSCALE_DEFAULT:
+ case GWY_HSCALE_NO_SCALE:
+ case GWY_HSCALE_LOG:
+ case GWY_HSCALE_SQRT:
+ case GWY_HSCALE_LINEAR:
+ if (pivot) {
+ g_return_val_if_fail(GTK_IS_ADJUSTMENT(pivot), NULL);
+ adj = GTK_ADJUSTMENT(pivot);
+ }
+ else {
+ if (base_style == GWY_HSCALE_LOG || base_style == GWY_HSCALE_SQRT)
+ g_warning("Nonlinear scale doesn't work with implicit adj.");
+ adj = GTK_ADJUSTMENT(gtk_adjustment_new(0.01, 0.01, 1.00, 0.01, 0.1,
+ 0));
+ }
+ break;
+
+ case GWY_HSCALE_WIDGET:
+ case GWY_HSCALE_WIDGET_NO_EXPAND:
+ g_return_val_if_fail(GTK_IS_WIDGET(pivot), NULL);
+ break;
+
+ default:
+ g_return_val_if_reached(NULL);
+ break;
+ }
+
+ if ((style & GWY_HSCALE_SNAP)
+ && (base_style == GWY_HSCALE_NO_SCALE
+ || base_style == GWY_HSCALE_WIDGET
+ || base_style == GWY_HSCALE_WIDGET_NO_EXPAND)) {
+ g_warning("There is no adjust bar that could snap to ticks.");
+ }
+
+ if (base_style == GWY_HSCALE_WIDGET
+ || base_style == GWY_HSCALE_WIDGET_NO_EXPAND) {
+ middle_widget = GTK_WIDGET(pivot);
+
+ g_object_get(table, "column-spacing", &spacing, NULL);
+ hbox = gtk_hbox_new(FALSE, spacing);
+ gtk_table_attach(GTK_TABLE(table), hbox, 0, 2, row, row+1,
+ GTK_FILL, 0, 0, 0);
+
+ if (base_style == GWY_HSCALE_WIDGET_NO_EXPAND)
+ gtk_box_pack_end(GTK_BOX(hbox), middle_widget, FALSE, FALSE, 0);
+ else
+ gtk_box_pack_end(GTK_BOX(hbox), middle_widget, TRUE, TRUE, 0);
+
+ if (style & GWY_HSCALE_CHECK) {
+ check = gtk_check_button_new_with_mnemonic(name);
+ gtk_box_pack_start(GTK_BOX(hbox), check, FALSE, FALSE, 0);
+ g_signal_connect(check, "toggled",
+ G_CALLBACK(hscale_checkbutton_toggled), pivot);
+ g_object_set_data(G_OBJECT(pivot), "check", check);
+ }
+ else {
+ label = gtk_label_new_with_mnemonic(name);
+ gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+ gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
+ gtk_label_set_mnemonic_widget(GTK_LABEL(label), middle_widget);
+ g_object_set_data(G_OBJECT(pivot), "label", label);
+ }
+ }
+ else {
+ u = adj->step_increment;
+ digits = (u > 0.0) ? (gint)floor(-log10(u)) : 0;
+ spin = gtk_spin_button_new(adj, 0.1, MAX(digits, 0));
+ gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(spin), TRUE);
+ gtk_spin_button_set_snap_to_ticks(GTK_SPIN_BUTTON(spin), TRUE);
+ gtk_table_attach(tab, spin, 1, 2, row, row+1, GTK_FILL, 0, 0, 0);
+ middle_widget = spin;
+
+ if (base_style == GWY_HSCALE_NO_SCALE) {
+ if (style & GWY_HSCALE_CHECK) {
+ check = gtk_check_button_new_with_mnemonic(name);
+ gtk_table_attach(tab, check, 0, 1, row, row+1,
+ GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ g_signal_connect(check, "toggled",
+ G_CALLBACK(hscale_checkbutton_toggled), pivot);
+ g_object_set_data(G_OBJECT(pivot), "check", check);
+ }
+ else {
+ label = gtk_label_new_with_mnemonic(name);
+ gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+ gtk_table_attach(tab, label, 0, 1, row, row+1,
+ GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ gtk_label_set_mnemonic_widget(GTK_LABEL(label), middle_widget);
+ g_object_set_data(G_OBJECT(pivot), "label", label);
+ }
+ }
+ else {
+ adjbar = GWY_ADJUST_BAR(gwy_adjust_bar_new(adj, name));
+ if (base_style == GWY_HSCALE_LINEAR)
+ gwy_adjust_bar_set_mapping(adjbar, GWY_SCALE_MAPPING_LINEAR);
+ else if (base_style == GWY_HSCALE_SQRT)
+ gwy_adjust_bar_set_mapping(adjbar, GWY_SCALE_MAPPING_SQRT);
+ else if (base_style == GWY_HSCALE_LOG)
+ gwy_adjust_bar_set_mapping(adjbar, GWY_SCALE_MAPPING_LOG);
+
+ gtk_table_attach(tab, GTK_WIDGET(adjbar), 0, 1, row, row+1,
+ GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ g_object_set_data(G_OBJECT(pivot), "scale", adjbar);
+
+ label = gwy_adjust_bar_get_label(adjbar);
+ g_object_set_data(G_OBJECT(pivot), "label", label);
+ gtk_label_set_mnemonic_widget(GTK_LABEL(label), middle_widget);
+
+ if (style & GWY_HSCALE_CHECK) {
+ gwy_adjust_bar_set_has_check_button(adjbar, TRUE);
+ check = gwy_adjust_bar_get_check_button(adjbar);
+ g_signal_connect(check, "toggled",
+ G_CALLBACK(hscale_checkbutton_toggled), pivot);
+ g_object_set_data(G_OBJECT(pivot), "check", check);
+ }
+ if (style & GWY_HSCALE_SNAP)
+ gwy_adjust_bar_set_snap_to_ticks(adjbar, TRUE);
+ }
+ }
+
+ g_object_set_data(G_OBJECT(pivot), "middle_widget", middle_widget);
+
+ if (units) {
+ label = gtk_label_new(units);
+ gtk_label_set_use_markup(GTK_LABEL(label), TRUE);
+ gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+ gtk_table_attach(tab, label, 2, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ g_object_set_data(G_OBJECT(pivot), "units", label);
+ }
+
+ if (check)
+ hscale_checkbutton_toggled(GTK_TOGGLE_BUTTON(check), pivot);
+
return middle_widget;
}
@@ -432,6 +686,12 @@ gwy_table_attach_hscale(GtkWidget *table,
* May return %NULL if constructed with %GWY_HSCALE_NO_SCALE,
* %GWY_HSCALE_WIDGET, or %GWY_HSCALE_WIDGET_NO_EXPAND.
**/
+GtkWidget*
+gwy_table_hscale_get_scale(GtkObject *pivot)
+{
+ g_return_val_if_fail(pivot, NULL);
+ return (GtkWidget*)g_object_get_data(G_OBJECT(pivot), "scale");
+}
/**
* gwy_table_hscale_get_check:
@@ -441,6 +701,12 @@ gwy_table_attach_hscale(GtkWidget *table,
*
* May return %NULL if not constructed with %GWY_HSCALE_CHECK.
**/
+GtkWidget*
+gwy_table_hscale_get_check(GtkObject *pivot)
+{
+ g_return_val_if_fail(pivot, NULL);
+ return (GtkWidget*)g_object_get_data(G_OBJECT(pivot), "check");
+}
/**
* gwy_table_hscale_get_label:
@@ -450,6 +716,12 @@ gwy_table_attach_hscale(GtkWidget *table,
*
* May return %NULL if constructed with %GWY_HSCALE_CHECK.
**/
+GtkWidget*
+gwy_table_hscale_get_label(GtkObject *pivot)
+{
+ g_return_val_if_fail(pivot, NULL);
+ return (GtkWidget*)g_object_get_data(G_OBJECT(pivot), "label");
+}
/**
* gwy_table_hscale_get_units:
@@ -459,6 +731,12 @@ gwy_table_attach_hscale(GtkWidget *table,
*
* May return %NULL if constructed without units.
**/
+GtkWidget*
+gwy_table_hscale_get_units(GtkObject *pivot)
+{
+ g_return_val_if_fail(pivot, NULL);
+ return (GtkWidget*)g_object_get_data(G_OBJECT(pivot), "units");
+}
/**
* gwy_table_hscale_get_middle_widget:
@@ -466,6 +744,12 @@ gwy_table_attach_hscale(GtkWidget *table,
*
* Gets the middle widget associated with a pivot object.
**/
+GtkWidget*
+gwy_table_hscale_get_middle_widget(GtkObject *pivot)
+{
+ g_return_val_if_fail(pivot, NULL);
+ return (GtkWidget*)g_object_get_data(G_OBJECT(pivot), "middle_widget");
+}
/************************** Mask colors ****************************/
diff --git a/libgwydgets/gwydgetutils.h b/libgwydgets/gwydgetutils.h
index c839e2d..74db877 100644
--- a/libgwydgets/gwydgetutils.h
+++ b/libgwydgets/gwydgetutils.h
@@ -1,6 +1,6 @@
/*
- * @(#) $Id: gwydgetutils.h 15598 2013-11-11 12:33:32Z yeti-dn $
- * Copyright (C) 2003-2005 David Necas (Yeti), Petr Klapetek.
+ * @(#) $Id: gwydgetutils.h 19847 2017-06-06 08:22:50Z yeti-dn $
+ * Copyright (C) 2003-2017 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
* This program is free software; you can redistribute it and/or modify
@@ -32,35 +32,35 @@ G_BEGIN_DECLS
#define gwy_adjustment_get_int(adj) \
((gint)(gtk_adjustment_get_value(GTK_ADJUSTMENT(adj)) + 0.5))
-GtkWidget* gwy_table_attach_spinbutton (GtkWidget *table,
- gint row,
- const gchar *name,
- const gchar *units,
- GtkObject *adj);
-void gwy_table_attach_row (GtkWidget *table,
- gint row,
- const gchar *name,
- const gchar *units,
- GtkWidget *middle_widget);
-GtkWidget* gwy_table_attach_hscale (GtkWidget *table,
- gint row,
- const gchar *name,
- const gchar *units,
- GtkObject *pivot,
- GwyHScaleStyle style);
-void gwy_table_hscale_set_sensitive (GtkObject *pivot,
- gboolean sensitive);
-
-#define gwy_table_hscale_get_scale(pivot) \
- ((GtkWidget*)(g_object_get_data(G_OBJECT(pivot), "scale")))
-#define gwy_table_hscale_get_check(pivot) \
- ((GtkWidget*)(g_object_get_data(G_OBJECT(pivot), "check")))
-#define gwy_table_hscale_get_label(pivot) \
- ((GtkWidget*)(g_object_get_data(G_OBJECT(pivot), "label")))
-#define gwy_table_hscale_get_units(pivot) \
- ((GtkWidget*)(g_object_get_data(G_OBJECT(pivot), "units")))
-#define gwy_table_hscale_get_middle_widget(pivot) \
- ((GtkWidget*)(g_object_get_data(G_OBJECT(pivot), "middle_widget")))
+GtkWidget* gwy_table_attach_spinbutton (GtkWidget *table,
+ gint row,
+ const gchar *name,
+ const gchar *units,
+ GtkObject *adj);
+void gwy_table_attach_row (GtkWidget *table,
+ gint row,
+ const gchar *name,
+ const gchar *units,
+ GtkWidget *middle_widget);
+GtkWidget* gwy_table_attach_hscale (GtkWidget *table,
+ gint row,
+ const gchar *name,
+ const gchar *units,
+ GtkObject *pivot,
+ GwyHScaleStyle style);
+GtkWidget* gwy_table_attach_adjbar (GtkWidget *table,
+ gint row,
+ const gchar *name,
+ const gchar *units,
+ GtkObject *pivot,
+ GwyHScaleStyle style);
+void gwy_table_hscale_set_sensitive (GtkObject *pivot,
+ gboolean sensitive);
+GtkWidget* gwy_table_hscale_get_scale (GtkObject *pivot);
+GtkWidget* gwy_table_hscale_get_check (GtkObject *pivot);
+GtkWidget* gwy_table_hscale_get_label (GtkObject *pivot);
+GtkWidget* gwy_table_hscale_get_units (GtkObject *pivot);
+GtkWidget* gwy_table_hscale_get_middle_widget(GtkObject *pivot);
GtkWidget* gwy_table_get_child_widget (GtkWidget *table,
gint row,
diff --git a/libgwydgets/gwygraphareadialog.c b/libgwydgets/gwygraphareadialog.c
index 8c46f55..0ad7c1f 100644
--- a/libgwydgets/gwygraphareadialog.c
+++ b/libgwydgets/gwygraphareadialog.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: gwygraphareadialog.c 17484 2015-09-28 11:35:31Z yeti-dn $
+ * @(#) $Id: gwygraphareadialog.c 20070 2017-07-12 07:48:27Z yeti-dn $
* Copyright (C) 2003-2007 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -98,10 +98,10 @@ _gwy_graph_area_dialog_init(GwyGraphAreaDialog *dialog)
gint row;
gtk_window_set_title(GTK_WINDOW(dialog), _("Curve Properties"));
- dialog->prev = gwy_stock_like_button_new(_("Pre_v"), GWY_STOCK_LESS);
+ dialog->prev = gwy_stock_like_button_new(_("Pre_v"), GWY_STOCK_PREVIOUS);
gtk_dialog_add_action_widget(GTK_DIALOG(dialog), dialog->prev,
GWY_GRAPH_AREA_DIALOG_RESPONSE_PREV);
- dialog->next = gwy_stock_like_button_new(_("_Next"), GWY_STOCK_MORE);
+ dialog->next = gwy_stock_like_button_new(_("_Next"), GWY_STOCK_NEXT);
gtk_dialog_add_action_widget(GTK_DIALOG(dialog), dialog->next,
GWY_GRAPH_AREA_DIALOG_RESPONSE_NEXT);
gtk_dialog_add_button(GTK_DIALOG(dialog),
@@ -109,61 +109,53 @@ _gwy_graph_area_dialog_init(GwyGraphAreaDialog *dialog)
gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_CLOSE);
update_switcher_sensitivity(dialog);
- table = gtk_table_new(7, 4, FALSE);
+ table = gtk_table_new(7, 3, FALSE);
gtk_table_set_col_spacings(GTK_TABLE(table), 6);
gtk_table_set_row_spacings(GTK_TABLE(table), 2);
gtk_container_set_border_width(GTK_CONTAINER(table), 4);
gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), table);
row = 0;
- hbox = gtk_hbox_new(FALSE, 6);
- gtk_table_attach(GTK_TABLE(table), hbox,
- 0, 4, row, row+1, GTK_FILL, 0, 0, 0);
-
dialog->curvetype_menu
= gwy_enum_combo_box_new(gwy_graph_curve_type_get_enum(), -1,
G_CALLBACK(curvetype_changed), dialog,
0, TRUE);
- gwy_table_attach_hscale(table, row, _("Plot _style:"), NULL,
+ gwy_table_attach_adjbar(table, row, _("Plot _style:"), NULL,
GTK_OBJECT(dialog->curvetype_menu),
- GWY_HSCALE_WIDGET);
+ GWY_HSCALE_WIDGET_NO_EXPAND);
row++;
- hbox = gtk_hbox_new(FALSE, 4);
- gtk_table_attach(GTK_TABLE(table), hbox,
- 1, 3, row, row+1, GTK_FILL, 0, 0, 0);
-
dialog->color_button = gwy_color_button_new();
gwy_color_button_set_use_alpha(GWY_COLOR_BUTTON(dialog->color_button),
FALSE);
- gtk_box_pack_start(GTK_BOX(hbox), dialog->color_button, FALSE, FALSE, 0);
+ gwy_table_attach_adjbar(table, row, _("Pl_ot color:"), NULL,
+ GTK_OBJECT(dialog->color_button),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
g_signal_connect(dialog->color_button, "clicked",
G_CALLBACK(color_change), dialog);
+ hbox = gtk_widget_get_parent(dialog->color_button);
dialog->color_selector = gwy_graph_color_combo_new();
- gtk_box_pack_start(GTK_BOX(hbox), dialog->color_selector, FALSE, FALSE, 0);
+ gtk_box_pack_end(GTK_BOX(hbox), dialog->color_selector, FALSE, FALSE, 0);
+ gtk_container_child_set(GTK_CONTAINER(hbox), dialog->color_selector,
+ "position", 1,
+ NULL);
g_signal_connect(dialog->color_selector, "changed",
G_CALLBACK(color_selected), dialog);
-
- label = gtk_label_new_with_mnemonic(_("Pl_ot color:"));
- gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_table_attach(GTK_TABLE(table), label,
- 0, 1, row, row+1, GTK_FILL, 0, 0, 0);
- gtk_label_set_mnemonic_widget(GTK_LABEL(label), dialog->color_button);
row++;
dialog->pointtype_menu
= gwy_graph_combo_box_new(dialog, "point-type", TRUE,
G_CALLBACK(_gwy_graph_get_point_type_store),
GWY_GRAPH_POINT_SQUARE);
- gwy_table_attach_hscale(table, row, _("Point _type:"), NULL,
+ gwy_table_attach_adjbar(table, row, _("Point _type:"), NULL,
GTK_OBJECT(dialog->pointtype_menu),
- GWY_HSCALE_WIDGET);
+ GWY_HSCALE_WIDGET_NO_EXPAND);
row++;
dialog->pointsize = gtk_adjustment_new(6, 1, 50, 1, 5, 0);
- gwy_table_attach_hscale(table, row, _("_Point size:"), "px",
- dialog->pointsize, 0);
+ gwy_table_attach_adjbar(table, row, _("_Point size:"), _("px"),
+ dialog->pointsize, GWY_HSCALE_SQRT);
g_signal_connect(dialog->pointsize, "value-changed",
G_CALLBACK(pointsize_changed), dialog);
row++;
@@ -172,23 +164,24 @@ _gwy_graph_area_dialog_init(GwyGraphAreaDialog *dialog)
= gwy_graph_combo_box_new(dialog, "line-style", FALSE,
G_CALLBACK(_gwy_graph_get_line_style_store),
GDK_LINE_SOLID);
- gwy_table_attach_hscale(table, row, _("_Line type:"), NULL,
+ gwy_table_attach_adjbar(table, row, _("_Line type:"), NULL,
GTK_OBJECT(dialog->linestyle_menu),
- GWY_HSCALE_WIDGET);
+ GWY_HSCALE_WIDGET_NO_EXPAND);
row++;
dialog->thickness = gtk_adjustment_new(6, 1, 50, 1, 5, 0);
- gwy_table_attach_hscale(table, row, _("Line t_hickness:"), "px",
- dialog->thickness, 0);
+ gwy_table_attach_adjbar(table, row, _("Line t_hickness:"), _("px"),
+ dialog->thickness, GWY_HSCALE_SQRT);
g_signal_connect(dialog->thickness, "value-changed",
G_CALLBACK(thickness_changed), dialog);
row++;
+ gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
label = gtk_label_new_with_mnemonic(_("<b>Label Te_xt</b>"));
gtk_label_set_use_markup(GTK_LABEL(label), TRUE);
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
gtk_table_attach(GTK_TABLE(table), label,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
dialog->sci_text = gwy_sci_text_new();
@@ -714,10 +707,7 @@ render_graph_color(G_GNUC_UNUSED GtkCellLayout *cell_layout,
pixel = 0;
}
if (pixel)
- pixel = 0xff
- | ((guint32)(guchar)floor(255.99999*rgba.b) << 8)
- | ((guint32)(guchar)floor(255.99999*rgba.g) << 16)
- | ((guint32)(guchar)floor(255.99999*rgba.r) << 24);
+ pixel = 0xff | gwy_rgba_to_pixbuf_pixel(&rgba);
gdk_pixbuf_fill(pixbuf, pixel);
g_object_set(renderer, "pixbuf", pixbuf, NULL);
}
diff --git a/libgwydgets/gwygraphcurvemodel.c b/libgwydgets/gwygraphcurvemodel.c
index 666b20a..0b6795c 100644
--- a/libgwydgets/gwygraphcurvemodel.c
+++ b/libgwydgets/gwygraphcurvemodel.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: gwygraphcurvemodel.c 19127 2016-10-26 21:09:48Z yeti-dn $
+ * @(#) $Id: gwygraphcurvemodel.c 20060 2017-07-11 09:59:27Z yeti-dn $
* Copyright (C) 2005-2016 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -697,13 +697,14 @@ gwy_graph_curve_model_set_data(GwyGraphCurveModel *gcmodel,
/**
* gwy_graph_curve_model_set_data_interleaved:
* @gcmodel: A graph curve model.
- * @xydata: X data points (array of size 2*@n).
+ * @xydata: X and Y data points (array of size 2*@n).
* @n: Number of points, i.e. half the number of items in @xydata.
*
* Sets curve model data from an interleaved array.
*
* The array should contain interleaved abscissa and ordinate values:
- * x0, x0, x1, y1, x2, y2, etc.
+ * x0, y0, x1, y1, x2, y2, etc. You can also typecast an array of #GwyXY
+ * structs and pass it as @xydata.
*
* If there were calibration data in the former @gcmodel, they are removed.
*
diff --git a/libgwydgets/gwygraphcurves.c b/libgwydgets/gwygraphcurves.c
index f9311d5..3418fc6 100644
--- a/libgwydgets/gwygraphcurves.c
+++ b/libgwydgets/gwygraphcurves.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: gwygraphcurves.c 19071 2016-10-14 09:02:41Z yeti-dn $
+ * @(#) $Id: gwygraphcurves.c 20070 2017-07-12 07:48:27Z yeti-dn $
* Copyright (C) 2007 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -371,10 +371,7 @@ render_column(GtkCellLayout *column,
guint32 pixel;
g_object_get(gcmodel, "color", &color, NULL);
- pixel = 0xff
- | ((guint32)(guchar)floor(255.99999*color->b) << 8)
- | ((guint32)(guchar)floor(255.99999*color->g) << 16)
- | ((guint32)(guchar)floor(255.99999*color->r) << 24);
+ pixel = 0xff | gwy_rgba_to_pixbuf_pixel(color);
gwy_rgba_free(color);
gdk_pixbuf_fill(graph_curves->pixbuf, pixel);
}
diff --git a/libgwydgets/gwygraphlabeldialog.c b/libgwydgets/gwygraphlabeldialog.c
index 5ef63e3..1f77509 100644
--- a/libgwydgets/gwygraphlabeldialog.c
+++ b/libgwydgets/gwygraphlabeldialog.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: gwygraphlabeldialog.c 15598 2013-11-11 12:33:32Z yeti-dn $
+ * @(#) $Id: gwygraphlabeldialog.c 19923 2017-06-17 12:33:25Z yeti-dn $
* Copyright (C) 2003 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -65,14 +65,14 @@ _gwy_graph_label_dialog_init(GwyGraphLabelDialog *dialog)
GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE);
gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_CLOSE);
- table = gtk_table_new(2, 4, FALSE);
+ table = gtk_table_new(2, 3, FALSE);
gtk_table_set_row_spacings(GTK_TABLE(table), 2);
gtk_table_set_col_spacings(GTK_TABLE(table), 6);
gtk_container_set_border_width(GTK_CONTAINER(table), 4);
dialog->thickness = gtk_adjustment_new(1, 0, 6, 1, 5, 0);
- gwy_table_attach_hscale(table, row, _("Frame thickness:"), NULL,
- dialog->thickness, 0);
+ gwy_table_attach_adjbar(table, row, _("_Frame thickness:"), NULL,
+ dialog->thickness, GWY_HSCALE_LINEAR);
g_signal_connect(dialog->thickness, "value-changed",
G_CALLBACK(thickness_changed_cb), dialog);
row++;
@@ -81,8 +81,9 @@ _gwy_graph_label_dialog_init(GwyGraphLabelDialog *dialog)
= gtk_check_button_new_with_mnemonic(_("_Reversed layout"));
g_signal_connect(dialog->reversed, "toggled",
G_CALLBACK(reverse_changed_cb), dialog);
- gtk_table_attach(GTK_TABLE(table), dialog->reversed, 0, 3, row, row + 1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ gtk_table_attach(GTK_TABLE(table), dialog->reversed, 0, 2, row, row + 1,
+ GTK_FILL, 0, 0, 0);
+ row++;
gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), table);
gtk_widget_show_all(GTK_DIALOG(dialog)->vbox);
diff --git a/libgwydgets/gwyradiobuttons.c b/libgwydgets/gwyradiobuttons.c
index e70085b..626fea4 100644
--- a/libgwydgets/gwyradiobuttons.c
+++ b/libgwydgets/gwyradiobuttons.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: gwyradiobuttons.c 15598 2013-11-11 12:33:32Z yeti-dn $
+ * @(#) $Id: gwyradiobuttons.c 19837 2017-06-05 11:40:09Z yeti-dn $
* Copyright (C) 2003 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -195,7 +195,7 @@ gwy_radio_buttons_attach_to_table(GSList *group,
while (group) {
gtk_table_attach(table, GTK_WIDGET(group->data),
0, colspan, row, row + 1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ GTK_FILL, 0, 0, 0);
row++;
group = g_slist_next(group);
}
@@ -238,11 +238,13 @@ gwy_radio_buttons_set_current(GSList *group,
gint
gwy_radio_buttons_get_current(GSList *group)
{
+ setup_quark();
while (group) {
g_return_val_if_fail(GTK_IS_RADIO_BUTTON(group->data), -1);
- if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(group->data)))
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(group->data))) {
return GPOINTER_TO_INT(g_object_get_qdata(G_OBJECT(group->data),
gwyrb_quark));
+ }
group = g_slist_next(group);
}
@@ -263,6 +265,7 @@ gwy_radio_buttons_find(GSList *group,
gint value)
{
g_return_val_if_fail(group, NULL);
+ setup_quark();
while (group) {
g_return_val_if_fail(GTK_IS_RADIO_BUTTON(group->data), FALSE);
if (GPOINTER_TO_INT(g_object_get_qdata(G_OBJECT(group->data),
diff --git a/libgwydgets/gwystatusbar.c b/libgwydgets/gwystatusbar.c
index 709d4ff..e98f9d4 100644
--- a/libgwydgets/gwystatusbar.c
+++ b/libgwydgets/gwystatusbar.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: gwystatusbar.c 15598 2013-11-11 12:33:32Z yeti-dn $
+ * @(#) $Id: gwystatusbar.c 19850 2017-06-06 08:47:49Z yeti-dn $
* Copyright (C) 2004 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -87,7 +87,7 @@ gwy_statusbar_update_markup(GtkStatusbar *statusbar,
* Sets the text to display in a status bar.
*
* This method is intended for simple status bars that do not have stacks and
- * do not need contexts. It does not mix with gtk_status_bar_push(). You can
+ * do not need contexts. It does not mix with gtk_statusbar_push(). You can
* use either this simple interface or the full stacks-and-contexts API with
* #GwyStatusbar, but not both in the same status bar.
**/
diff --git a/libgwydgets/gwystock.c b/libgwydgets/gwystock.c
index 4ee98dd..76b5aa9 100644
--- a/libgwydgets/gwystock.c
+++ b/libgwydgets/gwystock.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: gwystock.c 18961 2016-09-17 07:38:23Z yeti-dn $
+ * @(#) $Id: gwystock.c 20258 2017-08-12 08:17:43Z yeti-dn $
* Copyright (C) 2003 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -372,6 +372,15 @@ file_to_icon_source(const gchar *path,
**/
/**
+ * GWY_STOCK_CORRELATION_MASK:
+ *
+ * The "Correlation-Mask" stock icon.
+ * <inlinegraphic fileref="gwy_correlation_mask-24.png" format="PNG"/>
+ *
+ * Since: 2.48
+ **/
+
+/**
* GWY_STOCK_CROP:
*
* The "Crop" stock icon.
@@ -395,6 +404,15 @@ file_to_icon_source(const gchar *path,
**/
/**
+ * GWY_STOCK_DISCONNECTED:
+ *
+ * The "Disconnected" stock icon.
+ * <inlinegraphic fileref="gwy_disconnected-24.png" format="PNG"/>
+ *
+ * Since: 2.48
+ **/
+
+/**
* GWY_STOCK_DISTANCE:
*
* The "Distance" stock icon.
@@ -518,6 +536,15 @@ file_to_icon_source(const gchar *path,
**/
/**
+ * GWY_STOCK_FFT_FILTER_1D:
+ *
+ * The "FFT-Filter-1D" stock icon.
+ * <inlinegraphic fileref="gwy_fft_filter_1d-24.png" format="PNG"/>
+ *
+ * Since: 2.48
+ **/
+
+/**
* GWY_STOCK_FFT_FILTER_2D:
*
* The "FFT-Filter-2D" stock icon.
@@ -543,6 +570,15 @@ file_to_icon_source(const gchar *path,
**/
/**
+ * GWY_STOCK_FIT_SHAPE:
+ *
+ * The "Fit-Shape" stock icon.
+ * <inlinegraphic fileref="gwy_fit_shape-24.png" format="PNG"/>
+ *
+ * Since: 2.48
+ **/
+
+/**
* GWY_STOCK_FIX_ZERO:
*
* The "Fix-Zero" stock icon.
@@ -571,6 +607,24 @@ file_to_icon_source(const gchar *path,
**/
/**
+ * GWY_STOCK_FRACTAL_CORRECTION:
+ *
+ * The "Fractal-Correction" stock icon.
+ * <inlinegraphic fileref="gwy_fractal_correction-24.png" format="PNG"/>
+ *
+ * Since: 2.48
+ **/
+
+/**
+ * GWY_STOCK_FRACTAL_MEASURE:
+ *
+ * The "Fractal-Measure" stock icon.
+ * <inlinegraphic fileref="gwy_fractal_measure-24.png" format="PNG"/>
+ *
+ * Since: 2.49
+ **/
+
+/**
* GWY_STOCK_GL_MATERIAL:
*
* The "GL-Material" stock icon.
@@ -594,6 +648,33 @@ file_to_icon_source(const gchar *path,
**/
/**
+ * GWY_STOCK_GRAIN_CORRELATION:
+ *
+ * The "Grain-Correlation" stock icon.
+ * <inlinegraphic fileref="gwy_grain_correlation-24.png" format="PNG"/>
+ *
+ * Since: 2.45
+ **/
+
+/**
+ * GWY_STOCK_GRAIN_EXSCRIBED_CIRCLE:
+ *
+ * The "Grain-Exscribed-Circle" stock icon.
+ * <inlinegraphic fileref="gwy_grain_exscribed_circle-24.png" format="PNG"/>
+ *
+ * Since: 2.45
+ **/
+
+/**
+ * GWY_STOCK_GRAIN_INSCRIBED_CIRCLE:
+ *
+ * The "Grain-Inscribed-Circle" stock icon.
+ * <inlinegraphic fileref="gwy_grain_inscribed_circle-24.png" format="PNG"/>
+ *
+ * Since: 2.45
+ **/
+
+/**
* GWY_STOCK_GRAINS:
*
* The "Grains" stock icon.
@@ -649,33 +730,6 @@ file_to_icon_source(const gchar *path,
**/
/**
- * GWY_STOCK_GRAIN_CORRELATION:
- *
- * The "Grain-Correlation" stock icon.
- * <inlinegraphic fileref="gwy_grain_correlation-24.png" format="PNG"/>
- *
- * Since: 2.45
- **/
-
-/**
- * GWY_STOCK_GRAIN_EXSCRIBED_CIRCLE:
- *
- * The "Grain-Exscribed-Circle" stock icon.
- * <inlinegraphic fileref="gwy_grain_exscribed_circle-24.png" format="PNG"/>
- *
- * Since: 2.45
- **/
-
-/**
- * GWY_STOCK_GRAIN_INSCRIBED_CIRCLE:
- *
- * The "Grain-Inscribed-Circle" stock icon.
- * <inlinegraphic fileref="gwy_grain_inscribed_circle-24.png" format="PNG"/>
- *
- * Since: 2.45
- **/
-
-/**
* GWY_STOCK_GRAPH:
*
* The "Graph" stock icon.
@@ -972,6 +1026,24 @@ file_to_icon_source(const gchar *path,
**/
/**
+ * GWY_STOCK_MARK_OUTLIERS:
+ *
+ * The "Mark-Outliers" stock icon.
+ * <inlinegraphic fileref="gwy_mark_outliers-24.png" format="PNG"/>
+ *
+ * Since: 2.48
+ **/
+
+/**
+ * GWY_STOCK_MARK_SCARS:
+ *
+ * The "Mark-Scars" stock icon.
+ * <inlinegraphic fileref="gwy_mark_scars-24.png" format="PNG"/>
+ *
+ * Since: 2.48
+ **/
+
+/**
* GWY_STOCK_MARK_WITH:
*
* The "Mark-With" stock icon.
@@ -1151,6 +1223,15 @@ file_to_icon_source(const gchar *path,
**/
/**
+ * GWY_STOCK_MASK_SET:
+ *
+ * The "Mask-Set" stock icon.
+ * <inlinegraphic fileref="gwy_mask_set-24.png" format="PNG"/>
+ *
+ * Since: 2.49
+ **/
+
+/**
* GWY_STOCK_MASK_SHRINK:
*
* The "Mask-Shrink" stock icon.
@@ -1226,6 +1307,24 @@ file_to_icon_source(const gchar *path,
**/
/**
+ * GWY_STOCK_NEXT:
+ *
+ * The "Next" stock icon.
+ * <inlinegraphic fileref="gwy_next-24.png" format="PNG"/>
+ *
+ * Since: 2.49
+ **/
+
+/**
+ * GWY_STOCK_NULL_OFFSETS:
+ *
+ * The "Null-Offsets" stock icon.
+ * <inlinegraphic fileref="gwy_null_offsets-24.png" format="PNG"/>
+ *
+ * Since: 2.48
+ **/
+
+/**
* GWY_STOCK_PALETTES:
*
* The "Palettes" stock icon.
@@ -1249,6 +1348,15 @@ file_to_icon_source(const gchar *path,
**/
/**
+ * GWY_STOCK_POLY_DISTORT:
+ *
+ * The "Poly-Distort" stock icon.
+ * <inlinegraphic fileref="gwy_poly_distort-24.png" format="PNG"/>
+ *
+ * Since: 2.46
+ **/
+
+/**
* GWY_STOCK_POLYNOM:
*
* The "Polynom" stock icon.
@@ -1265,12 +1373,12 @@ file_to_icon_source(const gchar *path,
**/
/**
- * GWY_STOCK_POLY_DISTORT:
+ * GWY_STOCK_PREVIOUS:
*
- * The "Poly-Distort" stock icon.
- * <inlinegraphic fileref="gwy_poly_distort-24.png" format="PNG"/>
+ * The "Previous" stock icon.
+ * <inlinegraphic fileref="gwy_previous-24.png" format="PNG"/>
*
- * Since: 2.46
+ * Since: 2.49
**/
/**
@@ -1329,6 +1437,15 @@ file_to_icon_source(const gchar *path,
**/
/**
+ * GWY_STOCK_ROTATE_3D:
+ *
+ * The "Rotate-3D" stock icon.
+ * <inlinegraphic fileref="gwy_rotate_3d-24.png" format="PNG"/>
+ *
+ * Since: 2.49
+ **/
+
+/**
* GWY_STOCK_ROTATE_90_CCW:
*
* The "Rotate-90-CCW" stock icon.
@@ -1476,6 +1593,15 @@ file_to_icon_source(const gchar *path,
**/
/**
+ * GWY_STOCK_SYNTHETIC_FIBRES:
+ *
+ * The "Synthetic-Fibres" stock icon.
+ * <inlinegraphic fileref="gwy_synthetic_fibres-24.png" format="PNG"/>
+ *
+ * Since: 2.49
+ **/
+
+/**
* GWY_STOCK_SYNTHETIC_LATTICE:
*
* The "Synthetic-Lattice" stock icon.
@@ -1530,6 +1656,15 @@ file_to_icon_source(const gchar *path,
**/
/**
+ * GWY_STOCK_SYNTHETIC_PHASES:
+ *
+ * The "Synthetic-Phases" stock icon.
+ * <inlinegraphic fileref="gwy_synthetic_phases-24.png" format="PNG"/>
+ *
+ * Since: 2.48
+ **/
+
+/**
* GWY_STOCK_SYNTHETIC_SPECTRAL:
*
* The "Synthetic-Spectral" stock icon.
@@ -1733,6 +1868,15 @@ file_to_icon_source(const gchar *path,
**/
/**
+ * GWY_STOCK_XY_DENOISE:
+ *
+ * The "Xy-Denoise" stock icon.
+ * <inlinegraphic fileref="gwy_xy_denoise-24.png" format="PNG"/>
+ *
+ * Since: 2.48
+ **/
+
+/**
* GWY_STOCK_ZERO_MEAN:
*
* The "Zero-Mean" stock icon.
diff --git a/libgwydgets/gwystock.h b/libgwydgets/gwystock.h
index 6047949..630dcd5 100644
--- a/libgwydgets/gwystock.h
+++ b/libgwydgets/gwystock.h
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: gwystock.h 18961 2016-09-17 07:38:23Z yeti-dn $
+ * @(#) $Id: gwystock.h 20258 2017-08-12 08:17:43Z yeti-dn $
* Copyright (C) 2003 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -40,9 +40,11 @@ G_BEGIN_DECLS
#define GWY_STOCK_COLOR_RANGE_FULL "gwy_color_range_full"
#define GWY_STOCK_CONVOLUTION "gwy_convolution"
#define GWY_STOCK_CORRECT_AFFINE "gwy_correct_affine"
+#define GWY_STOCK_CORRELATION_MASK "gwy_correlation_mask"
#define GWY_STOCK_CROP "gwy_crop"
#define GWY_STOCK_CWT "gwy_cwt"
#define GWY_STOCK_DATA_MEASURE "gwy_data_measure"
+#define GWY_STOCK_DISCONNECTED "gwy_disconnected"
#define GWY_STOCK_DISTANCE "gwy_distance"
#define GWY_STOCK_DISTANCE_TRANSFORM "gwy_distance_transform"
#define GWY_STOCK_DISTRIBUTION_ANGLE "gwy_distribution_angle"
@@ -58,16 +60,23 @@ G_BEGIN_DECLS
#define GWY_STOCK_FAVOURITE "gwy_favourite"
#define GWY_STOCK_FFT "gwy_fft"
#define GWY_STOCK_FFT_2D "gwy_fft_2d"
+#define GWY_STOCK_FFT_FILTER_1D "gwy_fft_filter_1d"
#define GWY_STOCK_FFT_FILTER_2D "gwy_fft_filter_2d"
#define GWY_STOCK_FILTER "gwy_filter"
#define GWY_STOCK_FIND_PEAKS "gwy_find_peaks"
+#define GWY_STOCK_FIT_SHAPE "gwy_fit_shape"
#define GWY_STOCK_FIX_ZERO "gwy_fix_zero"
#define GWY_STOCK_FLIP_HORIZONTALLY "gwy_flip_horizontally"
#define GWY_STOCK_FLIP_VERTICALLY "gwy_flip_vertically"
#define GWY_STOCK_FRACTAL "gwy_fractal"
+#define GWY_STOCK_FRACTAL_CORRECTION "gwy_fractal_correction"
+#define GWY_STOCK_FRACTAL_MEASURE "gwy_fractal_measure"
#define GWY_STOCK_GL_MATERIAL "gwy_gl_material"
#define GWY_STOCK_GRADIENT_HORIZONTAL "gwy_gradient_horizontal"
#define GWY_STOCK_GRADIENT_VERTICAL "gwy_gradient_vertical"
+#define GWY_STOCK_GRAIN_CORRELATION "gwy_grain_correlation"
+#define GWY_STOCK_GRAIN_EXSCRIBED_CIRCLE "gwy_grain_exscribed_circle"
+#define GWY_STOCK_GRAIN_INSCRIBED_CIRCLE "gwy_grain_inscribed_circle"
#define GWY_STOCK_GRAINS "gwy_grains"
#define GWY_STOCK_GRAINS_EDGE "gwy_grains_edge"
#define GWY_STOCK_GRAINS_EDGE_REMOVE "gwy_grains_edge_remove"
@@ -75,9 +84,6 @@ G_BEGIN_DECLS
#define GWY_STOCK_GRAINS_MEASURE "gwy_grains_measure"
#define GWY_STOCK_GRAINS_REMOVE "gwy_grains_remove"
#define GWY_STOCK_GRAINS_WATER "gwy_grains_water"
-#define GWY_STOCK_GRAIN_CORRELATION "gwy_grain_correlation"
-#define GWY_STOCK_GRAIN_EXSCRIBED_CIRCLE "gwy_grain_exscribed_circle"
-#define GWY_STOCK_GRAIN_INSCRIBED_CIRCLE "gwy_grain_inscribed_circle"
#define GWY_STOCK_GRAPH "gwy_graph"
#define GWY_STOCK_GRAPH_ALIGN "gwy_graph_align"
#define GWY_STOCK_GRAPH_CUT "gwy_graph_cut"
@@ -116,6 +122,8 @@ G_BEGIN_DECLS
#define GWY_STOCK_LOCAL_SLOPE "gwy_local_slope"
#define GWY_STOCK_LOGSCALE_HORIZONTAL "gwy_logscale_horizontal"
#define GWY_STOCK_LOGSCALE_VERTICAL "gwy_logscale_vertical"
+#define GWY_STOCK_MARK_OUTLIERS "gwy_mark_outliers"
+#define GWY_STOCK_MARK_SCARS "gwy_mark_scars"
#define GWY_STOCK_MARK_WITH "gwy_mark_with"
#define GWY_STOCK_MASK "gwy_mask"
#define GWY_STOCK_MASK_ADD "gwy_mask_add"
@@ -139,6 +147,7 @@ G_BEGIN_DECLS
#define GWY_STOCK_MASK_RECT_EXCLUSIVE "gwy_mask_rect_exclusive"
#define GWY_STOCK_MASK_RECT_INCLUSIVE "gwy_mask_rect_inclusive"
#define GWY_STOCK_MASK_REMOVE "gwy_mask_remove"
+#define GWY_STOCK_MASK_SET "gwy_mask_set"
#define GWY_STOCK_MASK_SHRINK "gwy_mask_shrink"
#define GWY_STOCK_MASK_SUBTRACT "gwy_mask_subtract"
#define GWY_STOCK_MASK_THIN "gwy_mask_thin"
@@ -148,12 +157,15 @@ G_BEGIN_DECLS
#define GWY_STOCK_MUTUAL_CROP "gwy_mutual_crop"
#define GWY_STOCK_NEURAL_APPLY "gwy_neural_apply"
#define GWY_STOCK_NEURAL_TRAIN "gwy_neural_train"
+#define GWY_STOCK_NEXT "gwy_next"
+#define GWY_STOCK_NULL_OFFSETS "gwy_null_offsets"
#define GWY_STOCK_PALETTES "gwy_palettes"
#define GWY_STOCK_PATH_LEVEL "gwy_path_level"
#define GWY_STOCK_POINTER_MEASURE "gwy_pointer_measure"
+#define GWY_STOCK_POLY_DISTORT "gwy_poly_distort"
#define GWY_STOCK_POLYNOM "gwy_polynom"
#define GWY_STOCK_POLYNOM_LEVEL "gwy_polynom_level"
-#define GWY_STOCK_POLY_DISTORT "gwy_poly_distort"
+#define GWY_STOCK_PREVIOUS "gwy_previous"
#define GWY_STOCK_PROFILE "gwy_profile"
#define GWY_STOCK_PSDF_LOG_PHI "gwy_psdf_log_phi"
#define GWY_STOCK_PSDF_SECTION "gwy_psdf_section"
@@ -161,6 +173,7 @@ G_BEGIN_DECLS
#define GWY_STOCK_REMOVE_UNDER_MASK "gwy_remove_under_mask"
#define GWY_STOCK_ROTATE "gwy_rotate"
#define GWY_STOCK_ROTATE_180 "gwy_rotate_180"
+#define GWY_STOCK_ROTATE_3D "gwy_rotate_3d"
#define GWY_STOCK_ROTATE_90_CCW "gwy_rotate_90_ccw"
#define GWY_STOCK_ROTATE_90_CW "gwy_rotate_90_cw"
#define GWY_STOCK_SCALE "gwy_scale"
@@ -180,12 +193,14 @@ G_BEGIN_DECLS
#define GWY_STOCK_SYNTHETIC_COLUMNAR "gwy_synthetic_columnar"
#define GWY_STOCK_SYNTHETIC_DIFFUSION "gwy_synthetic_diffusion"
#define GWY_STOCK_SYNTHETIC_DOMAINS "gwy_synthetic_domains"
+#define GWY_STOCK_SYNTHETIC_FIBRES "gwy_synthetic_fibres"
#define GWY_STOCK_SYNTHETIC_LATTICE "gwy_synthetic_lattice"
#define GWY_STOCK_SYNTHETIC_LINE_NOISE "gwy_synthetic_line_noise"
#define GWY_STOCK_SYNTHETIC_NOISE "gwy_synthetic_noise"
#define GWY_STOCK_SYNTHETIC_OBJECTS "gwy_synthetic_objects"
#define GWY_STOCK_SYNTHETIC_PARTICLES "gwy_synthetic_particles"
#define GWY_STOCK_SYNTHETIC_PATTERN "gwy_synthetic_pattern"
+#define GWY_STOCK_SYNTHETIC_PHASES "gwy_synthetic_phases"
#define GWY_STOCK_SYNTHETIC_SPECTRAL "gwy_synthetic_spectral"
#define GWY_STOCK_SYNTHETIC_WAVES "gwy_synthetic_waves"
#define GWY_STOCK_TILT "gwy_tilt"
@@ -209,6 +224,7 @@ G_BEGIN_DECLS
#define GWY_STOCK_VOLUME_SLICE "gwy_volume_slice"
#define GWY_STOCK_VOLUMIZE "gwy_volumize"
#define GWY_STOCK_VOLUMIZE_LAYERS "gwy_volumize_layers"
+#define GWY_STOCK_XY_DENOISE "gwy_xy_denoise"
#define GWY_STOCK_ZERO_MEAN "gwy_zero_mean"
#define GWY_STOCK_ZOOM_1_1 "gwy_zoom_1_1"
#define GWY_STOCK_ZOOM_FIT "gwy_zoom_fit"
diff --git a/libgwymodule/Makefile.am b/libgwymodule/Makefile.am
index 04ce4eb..6a887d6 100644
--- a/libgwymodule/Makefile.am
+++ b/libgwymodule/Makefile.am
@@ -1,4 +1,4 @@
-# @(#) $Id: Makefile.am 18638 2016-04-24 09:31:03Z yeti-dn $
+# @(#) $Id: Makefile.am 20269 2017-08-14 11:21:07Z yeti-dn $
libgwyddion = $(top_builddir)/libgwyddion/libgwyddion2.la
libgwyprocess = $(top_builddir)/libprocess/libgwyprocess2.la
@@ -70,7 +70,7 @@ AM_CPPFLAGS = -I$(top_srcdir) -DG_LOG_DOMAIN=\"GwyModule\"
# Any iface change C++: 0: A
# Adding ifaces C: R: A++
# Changing ifaces C: R: 0
-libversion = -version-info 9:0:9
+libversion = -version-info 11:0:11
#libversion = -release @LIBRARY_RELEASE@
libgwymodule2_la_LDFLAGS = @GMODULE_LIBS@ @GTK_LIBS@ @BASIC_LIBS@ -export-dynamic $(no_undefined) $(export_symbols) $(libversion)
libgwymodule2_la_LIBADD = $(libgwymodule_libadd)
diff --git a/libgwymodule/Makefile.in b/libgwymodule/Makefile.in
index af92df3..de5c6e3 100644
--- a/libgwymodule/Makefile.in
+++ b/libgwymodule/Makefile.in
@@ -14,10 +14,10 @@
@SET_MAKE@
-# @(#) $Id: Makefile.am 18638 2016-04-24 09:31:03Z yeti-dn $
+# @(#) $Id: Makefile.am 20269 2017-08-14 11:21:07Z yeti-dn $
# Generic glib-mkenum rules.
-# @(#) $Id: mkenum.mk 11705 2011-01-03 08:32:55Z yeti-dn $
+# @(#) $Id: mkenum.mk 20080 2017-07-24 16:05:52Z yeti-dn $
#
# Parameters:
# MKENUM_NAME -- output base name
@@ -275,10 +275,7 @@ EPYDOC = @EPYDOC@
EXEEXT = @EXEEXT@
EXR_CFLAGS = @EXR_CFLAGS@
EXR_LIBS = @EXR_LIBS@
-FFTW3_1_CFLAGS = @FFTW3_1_CFLAGS@
-FFTW3_1_LIBS = @FFTW3_1_LIBS@
FFTW3_CFLAGS = @FFTW3_CFLAGS@
-FFTW3_DEPENDENCY = @FFTW3_DEPENDENCY@
FFTW3_LIBS = @FFTW3_LIBS@
FGREP = @FGREP@
GCONFTOOL = @GCONFTOOL@
@@ -288,6 +285,8 @@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
GLIBC21 = @GLIBC21@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GMODULE_CFLAGS = @GMODULE_CFLAGS@
GMODULE_LIBS = @GMODULE_LIBS@
GMSGFMT = @GMSGFMT@
@@ -312,7 +311,9 @@ GTK_MAC_LIBS = @GTK_MAC_LIBS@
GWY_VERSION_MAJOR = @GWY_VERSION_MAJOR@
GWY_VERSION_MINOR = @GWY_VERSION_MINOR@
GWY_VERSION_STRING = @GWY_VERSION_STRING@
+HDRIMAGE_EXTRA_CFLAGS = @HDRIMAGE_EXTRA_CFLAGS@
HTML_DIR = @HTML_DIR@
+INKSCAPE = @INKSCAPE@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -370,6 +371,7 @@ PASCAL = @PASCAL@
PATH_SEPARATOR = @PATH_SEPARATOR@
PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
+PNGCRUSH = @PNGCRUSH@
PNG_CFLAGS = @PNG_CFLAGS@
PNG_LIBS = @PNG_LIBS@
POD2MAN = @POD2MAN@
@@ -378,17 +380,13 @@ PYGTK_CFLAGS = @PYGTK_CFLAGS@
PYGTK_CODEGENDIR = @PYGTK_CODEGENDIR@
PYGTK_LIBS = @PYGTK_LIBS@
PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
PYTHON_EXTRA_CFLAGS = @PYTHON_EXTRA_CFLAGS@
PYTHON_INCLUDES = @PYTHON_INCLUDES@
-PYTHON_LIBS = @PYTHON_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
PYTHON_PLATFORM = @PYTHON_PLATFORM@
PYTHON_PREFIX = @PYTHON_PREFIX@
-PYTHON_SYSCFG_BASECFLAGS = @PYTHON_SYSCFG_BASECFLAGS@
-PYTHON_SYSCFG_CCSHARED = @PYTHON_SYSCFG_CCSHARED@
-PYTHON_SYSCFG_LDFLAGS = @PYTHON_SYSCFG_LDFLAGS@
-PYTHON_SYSCFG_LIBDIR = @PYTHON_SYSCFG_LIBDIR@
-PYTHON_SYSCFG_LINKFORSHARED = @PYTHON_SYSCFG_LINKFORSHARED@
PYTHON_VERSION = @PYTHON_VERSION@
RANLIB = @RANLIB@
RUBY = @RUBY@
@@ -519,9 +517,6 @@ MKENUM_HFILES = \
$(srcdir)/gwymoduleloader.h \
$(srcdir)/gwymodule-file.h
-
-# TODO: Detect
-GLIB_MKENUMS = glib-mkenums
mkenum_built_sources = $(MKENUM_NAME).h $(MKENUM_NAME).c
@MAINTAINER_MODE_TRUE at mkenum_stamp_files = $(MKENUM_NAME).h.stamp
@MAINTAINER_MODE_TRUE at mkenum_self = $(top_srcdir)/utils/mkenum.mk
@@ -542,7 +537,7 @@ AM_CPPFLAGS = -I$(top_srcdir) -DG_LOG_DOMAIN=\"GwyModule\"
# Any iface change C++: 0: A
# Adding ifaces C: R: A++
# Changing ifaces C: R: 0
-libversion = -version-info 9:0:9
+libversion = -version-info 11:0:11
#libversion = -release @LIBRARY_RELEASE@
libgwymodule2_la_LDFLAGS = @GMODULE_LIBS@ @GTK_LIBS@ @BASIC_LIBS@ -export-dynamic $(no_undefined) $(export_symbols) $(libversion)
libgwymodule2_la_LIBADD = $(libgwymodule_libadd)
diff --git a/libgwymodule/gwymodule-file.c b/libgwymodule/gwymodule-file.c
index dec4cd6..dc7a21d 100644
--- a/libgwymodule/gwymodule-file.c
+++ b/libgwymodule/gwymodule-file.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: gwymodule-file.c 18070 2016-01-11 20:55:02Z yeti-dn $
+ * @(#) $Id: gwymodule-file.c 19428 2017-01-18 12:22:20Z yeti-dn $
* Copyright (C) 2003,2004 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -436,7 +436,7 @@ static gboolean
gwy_file_detect_fill_info(GwyFileDetectInfo *fileinfo,
gboolean only_name)
{
- struct stat st;
+ GStatBuf st;
FILE *fh;
g_return_val_if_fail(fileinfo && fileinfo->name, FALSE);
diff --git a/libgwymodule/gwymodulebrowser.c b/libgwymodule/gwymodulebrowser.c
index 6790e75..bada4f5 100644
--- a/libgwymodule/gwymodulebrowser.c
+++ b/libgwymodule/gwymodulebrowser.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: gwymodulebrowser.c 15598 2013-11-11 12:33:32Z yeti-dn $
+ * @(#) $Id: gwymodulebrowser.c 20051 2017-07-10 09:11:41Z yeti-dn $
* Copyright (C) 2003 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -25,7 +25,6 @@
#include <libgwyddion/gwymacros.h>
#include <libgwyddion/gwyutils.h>
#include <libgwymodule/gwymodulebrowser.h>
-#include "gwymoduleinternal.h"
static GtkWidget* gwy_module_browser_construct (GtkWidget *parent);
static GtkWidget* gwy_module_browser_info_table (GtkWidget *parent);
@@ -105,14 +104,14 @@ gwy_module_browser_store_module(const gchar *name,
}
static void
-gwy_module_browser_store_failure(G_GNUC_UNUSED const gchar *filename,
- _GwyModuleFailureInfo *fail_info,
+gwy_module_browser_store_failure(GwyModuleFailureInfo *fail_info,
GtkListStore *store)
{
GtkTreeIter iter;
+ const gchar *name = fail_info->modname ? fail_info->modname : "???";
gtk_list_store_insert_with_values(store, &iter, G_MAXINT,
- MODEL_NAME, fail_info->modname,
+ MODEL_NAME, name,
MODEL_INFO, fail_info,
MODEL_FAILED, TRUE,
-1);
@@ -127,7 +126,7 @@ gwy_module_browser_render(G_GNUC_UNUSED GtkTreeViewColumn *column,
{
const gchar *name;
const GwyModuleInfo *mod_info;
- const _GwyModuleFailureInfo *fail_info;
+ const GwyModuleFailureInfo *fail_info;
gboolean failed;
const gchar *text;
@@ -202,8 +201,7 @@ gwy_module_browser_construct(GtkWidget *parent)
G_TYPE_POINTER,
G_TYPE_BOOLEAN);
gwy_module_foreach((GHFunc)gwy_module_browser_store_module, store);
- _gwy_module_failure_foreach((GHFunc)gwy_module_browser_store_failure,
- store);
+ gwy_module_failure_foreach((GFunc)gwy_module_browser_store_failure, store);
gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(store),
MODEL_NAME, compare_modules, NULL, NULL);
gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(store), MODEL_NAME,
@@ -283,7 +281,7 @@ update_module_info_cb(GtkWidget *tree,
GtkTreeModel *store;
GtkTreeSelection *selection;
const GwyModuleInfo *mod_info;
- const _GwyModuleFailureInfo *fail_info;
+ const GwyModuleFailureInfo *fail_info;
const gchar *name;
gboolean failed;
GtkTreeIter iter;
@@ -317,7 +315,7 @@ update_module_info_cb(GtkWidget *tree,
gtk_label_set_text(label, fail_info->filename);
label = GTK_LABEL(g_object_get_data(G_OBJECT(parent), "failure"));
- gtk_label_set_text(label, fail_info->message);
+ gtk_label_set_text(label, fail_info->err_message);
return;
}
diff --git a/libgwymodule/gwymoduleinternal.h b/libgwymodule/gwymoduleinternal.h
index cce0b38..294f38a 100644
--- a/libgwymodule/gwymoduleinternal.h
+++ b/libgwymodule/gwymoduleinternal.h
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: gwymoduleinternal.h 18322 2016-02-22 16:55:56Z yeti-dn $
+ * @(#) $Id: gwymoduleinternal.h 20051 2017-07-10 09:11:41Z yeti-dn $
* Copyright (C) 2003 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -39,7 +39,7 @@ G_BEGIN_DECLS
/* internal module info */
typedef struct {
- GwyModuleInfo *mod_info;
+ const GwyModuleInfo *mod_info;
gchar *name;
gchar *file;
gboolean loaded;
@@ -47,19 +47,22 @@ typedef struct {
} _GwyModuleInfoInternal;
typedef struct {
- gchar *modname;
+ /* public fields, except the consts
+ * MUST correspond to GwyModuleFailureInfo */
gchar *filename;
- gchar *message;
-} _GwyModuleFailureInfo;
+ gchar *modname;
+ gchar *err_message;
+ gint err_domain;
+ gint err_code;
+ /* private fields */
+ gchar *key;
+} _GwyModuleFailureInfoInternal;
G_GNUC_INTERNAL
gboolean _gwy_module_add_registered_function(const gchar *prefix,
const gchar *name);
G_GNUC_INTERNAL
-void _gwy_module_failure_foreach (GHFunc function,
- gpointer data);
-G_GNUC_INTERNAL
gboolean _gwy_file_func_remove (const gchar *name);
G_GNUC_INTERNAL
diff --git a/libgwymodule/gwymoduleloader.c b/libgwymodule/gwymoduleloader.c
index c7fe7cd..130540f 100644
--- a/libgwymodule/gwymoduleloader.c
+++ b/libgwymodule/gwymoduleloader.c
@@ -1,6 +1,6 @@
/*
- * @(#) $Id: gwymoduleloader.c 19278 2016-11-16 16:51:38Z yeti-dn $
- * Copyright (C) 2003,2004 David Necas (Yeti), Petr Klapetek.
+ * @(#) $Id: gwymoduleloader.c 20052 2017-07-10 09:12:58Z yeti-dn $
+ * Copyright (C) 2003-2017 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
* This program is free software; you can redistribute it and/or modify
@@ -40,20 +40,38 @@ typedef struct {
gpointer data;
} GwyModuleForeachData;
-static gboolean check_python_availability (void);
-static void gwy_load_modules_in_dir (GDir *gdir,
- const gchar *dirname,
- GHashTable *mods);
-static gboolean gwy_module_pedantic_check (_GwyModuleInfoInternal *iinfo);
-static void gwy_module_get_rid_of (const gchar *modname);
-static void gwy_module_init (void);
-static const GwyModuleInfo* gwy_module_do_register_module(const gchar *modulename,
- GHashTable *mods,
- GError **error);
-static void gwy_module_register_fail (GError *myerr,
- GError **error,
- const gchar *modname,
- const gchar *filename);
+typedef struct {
+ GFunc func;
+ gpointer data;
+} GwyModuleFailForeachData;
+
+static gboolean check_python_availability (void);
+static void gwy_load_modules_in_dir (GDir *gdir,
+ const gchar *dirname,
+ GHashTable *mods);
+static gboolean gwy_module_pedantic_check (_GwyModuleInfoInternal *iinfo);
+static void gwy_module_get_rid_of (const gchar *modname);
+static void gwy_module_init (void);
+static const GwyModuleInfo* gwy_module_do_register_module (const gchar *modulename,
+ GHashTable *mods,
+ GError **error);
+static gboolean gwy_module_check_module_name (const gchar *modname,
+ GHashTable *mods,
+ GError **error);
+static gboolean register_module_with_info (GHashTable *mods,
+ const GwyModuleInfo *mod_info,
+ const gchar *filename,
+ gchar *modname,
+ gboolean in_bundle,
+ GError **error);
+static gchar* gwy_module_figure_out_name (const gchar *filename);
+static void gwy_module_register_fail (GError *myerr,
+ GError **error,
+ const gchar *modname,
+ const gchar *filename);
+static GHashTable* gwy_module_get_blocking_table (gboolean do_create);
+static gboolean gwy_module_filename_is_blocked(const gchar *filename);
+static gboolean gwy_module_name_is_blocked (const gchar *modname);
static GHashTable *modules = NULL;
static GHashTable *failures = NULL;
@@ -89,6 +107,9 @@ gwy_module_error_quark(void)
* It can be called several times (on different directories). No errors are
* reported, register modules individually with gwy_module_register_module()
* to get registration errors.
+ *
+ * If you need to prevent specific modules from loading use
+ * gwy_module_disable_registration() beforehand.
**/
void
gwy_module_register_modules(const gchar **paths)
@@ -132,13 +153,39 @@ _gwy_module_add_registered_function(const gchar *prefix,
return TRUE;
}
+static void
+gwy_module_failure_foreach_one(G_GNUC_UNUSED const gchar *key,
+ _GwyModuleFailureInfoInternal *finfo,
+ GwyModuleFailForeachData *data)
+{
+ data->func((GwyModuleFailureInfo*)finfo, data->data);
+}
+/**
+ * gwy_module_failure_foreach:
+ * @function: A #GFunc run for each module registration failure.
+ * @data: User data.
+ *
+ * Runs @function for each module that failed to register.
+ *
+ * It passes the failure info (#GwyModuleFailureInfo) as the data argument.
+ * It should be modified.
+ *
+ * Since: 2.49
+ **/
void
-_gwy_module_failure_foreach(GHFunc function,
- gpointer data)
+gwy_module_failure_foreach(GFunc function, gpointer data)
{
- if (failures)
- g_hash_table_foreach(failures, function, data);
+ GwyModuleFailForeachData fdata;
+
+ if (!failures)
+ return;
+
+ g_return_if_fail(function);
+ fdata.func = function;
+ fdata.data = data;
+ g_hash_table_foreach(failures,
+ (GHFunc)&gwy_module_failure_foreach_one, &fdata);
}
static void
@@ -146,7 +193,7 @@ gwy_module_foreach_one(const gchar *name,
_GwyModuleInfoInternal *iinfo,
GwyModuleForeachData *fdata)
{
- fdata->func((gpointer)name, iinfo->mod_info, fdata->data);
+ fdata->func((gpointer)name, (gpointer)iinfo->mod_info, fdata->data);
}
/**
@@ -229,6 +276,9 @@ gwy_module_get_functions(const gchar *name)
*
* Loads a single module.
*
+ * This function also works with bundles. The returned module info is for the
+ * bundle and thus not of much use.
+ *
* Returns: Module info on success, %NULL on failure.
**/
const GwyModuleInfo*
@@ -247,20 +297,25 @@ gwy_module_register_fail(GError *myerr,
const gchar *modname,
const gchar *filename)
{
- _GwyModuleFailureInfo *finfo;
+ _GwyModuleFailureInfoInternal *finfo;
if (!failures)
failures = g_hash_table_new(g_str_hash, g_str_equal);
- if (g_hash_table_lookup(failures, filename))
+ if (g_hash_table_lookup(failures, filename)) {
+ g_clear_error(&myerr);
return;
+ }
g_return_if_fail(myerr);
- finfo = g_new(_GwyModuleFailureInfo, 1);
+ finfo = g_new(_GwyModuleFailureInfoInternal, 1);
+ finfo->key = g_strconcat(filename, "/", modname, NULL);
finfo->modname = g_strdup(modname);
finfo->filename = g_strdup(filename);
- finfo->message = g_strdup(myerr->message);
- g_hash_table_insert(failures, finfo->filename, finfo);
+ finfo->err_message = g_strdup(myerr->message);
+ finfo->err_domain = myerr->domain;
+ finfo->err_code = myerr->code;
+ g_hash_table_insert(failures, finfo->key, finfo);
g_propagate_error(error, myerr);
}
@@ -272,44 +327,13 @@ gwy_module_do_register_module(const gchar *filename,
{
GModule *mod;
gboolean ok;
- _GwyModuleInfoInternal *iinfo;
GwyModuleInfo *mod_info = NULL;
GwyModuleQueryFunc query;
- gchar *modname, *s;
+ gchar *modname;
GError *err = NULL;
- s = g_path_get_basename(filename);
- modname = g_ascii_strdown(s, -1);
- g_free(s);
- /* FIXME: On normal platforms module names have an extension, but if
- * it doesn't, just get over it. This can happen only with explicit
- * gwy_module_register_module() as gwy_load_modules_in_dir() accepts
- * only sane names. */
- if ((s = strchr(modname, '.')))
- *s = '\0';
- if (!*modname) {
- g_set_error(&err, GWY_MODULE_ERROR, GWY_MODULE_ERROR_NAME,
- "Module name is empty");
- gwy_module_register_fail(err, error, modname, filename);
- g_free(modname);
- return NULL;
- }
-
- if (!gwy_strisident(modname, "_-", NULL))
- g_warning("Module name `%s' is not a valid identifier. "
- "It may be rejected in future.", modname);
-
- if (g_hash_table_lookup(mods, modname)) {
- g_set_error(&err, GWY_MODULE_ERROR, GWY_MODULE_ERROR_DUPLICATE,
- "Module was already registered");
- gwy_module_register_fail(err, error, modname, filename);
- g_free(modname);
- return NULL;
- }
-
- if (gwy_strequal(modname, "pygwy") && !check_python_availability()) {
- g_set_error(&err, GWY_MODULE_ERROR, GWY_MODULE_ERROR_OPEN,
- "Avoiding to register pygwy if Python is unavailable.");
+ modname = gwy_module_figure_out_name(filename);
+ if (!gwy_module_check_module_name(modname, mods, &err)) {
gwy_module_register_fail(err, error, modname, filename);
g_free(modname);
return NULL;
@@ -340,16 +364,138 @@ gwy_module_do_register_module(const gchar *filename,
if (ok) {
mod_info = query();
- if (!mod_info) {
- g_set_error(&err, GWY_MODULE_ERROR, GWY_MODULE_ERROR_INFO,
- "Module info is NULL");
- gwy_module_register_fail(err, error, modname, filename);
- ok = FALSE;
+ /* register_module_with_info() always consumes (or frees) modname */
+ ok = register_module_with_info(mods, mod_info, filename, modname, FALSE,
+ error);
+ if (ok) {
+ gwy_debug("Making module `%s' resident.", filename);
+ g_module_make_resident(mod);
+ }
+ else {
+ if (!g_module_close(mod)) {
+ g_critical("Cannot unload module `%s': %s",
+ filename, g_module_error());
+ }
+ }
+ }
+ else
+ g_free(modname);
+
+ currenly_registered_module = NULL;
+
+ return ok ? mod_info : NULL;
+}
+
+static gboolean
+register_module_bundle(GHashTable *mods, const GwyModuleInfo *bundle_info,
+ const gchar *filename, const gchar *bundlename,
+ GError **error)
+{
+ const GwyModuleInfo *mod_info;
+ GwyModuleQueryFunc query;
+ const GwyModuleRecord *records;
+ GwyModuleBundleRegisterFunc register_bundle;
+ GError *err = NULL;
+ gchar *modname;
+ guint i, nok = 0;
+
+ if (!bundle_info->register_func) {
+ g_set_error(&err, GWY_MODULE_ERROR, GWY_MODULE_ERROR_ABI,
+ "Module bundle %s info has no registration function",
+ bundlename);
+ gwy_module_register_fail(err, error, bundlename, filename);
+ return FALSE;
+ }
+
+ register_bundle = (GwyModuleBundleRegisterFunc)(bundle_info->register_func);
+ records = register_bundle();
+ if (!records) {
+ g_set_error(&err, GWY_MODULE_ERROR, GWY_MODULE_ERROR_ABI,
+ "Module bundle %s returned NULL module records",
+ bundlename);
+ gwy_module_register_fail(err, error, bundlename, filename);
+ return FALSE;
+ }
+
+ for (i = 0; records[i].query && records[i].name; i++) {
+ gwy_debug("bundle module record for %s", records[i].name);
+ if (gwy_module_name_is_blocked(records[i].name))
+ continue;
+
+ err = NULL;
+ if (!gwy_module_check_module_name(records[i].name, mods, &err)) {
+ gwy_module_register_fail(err, error, records[i].name, filename);
+ continue;
+ }
+
+ query = records[i].query;
+ modname = g_strdup(records[i].name);
+ currenly_registered_module = modname;
+ mod_info = query();
+ if (mod_info) {
+ /* TODO: Must again check duplicit names, etc. */
+ if (register_module_with_info(mods, mod_info, filename,
+ modname, TRUE, NULL))
+ nok++;
}
+ else
+ g_free(modname);
+
+ currenly_registered_module = NULL;
+ }
+
+ if (nok > 0)
+ return TRUE;
+
+ /* FIXME: Could be report errors in more detail? */
+ g_set_error(error, GWY_MODULE_ERROR, GWY_MODULE_ERROR_ABI,
+ "Module bundle %s did not successfully register any module",
+ bundlename);
+ return FALSE;
+}
+
+static gboolean
+register_module_with_info(GHashTable *mods, const GwyModuleInfo *mod_info,
+ const gchar *filename, gchar *modname,
+ gboolean in_bundle, GError **error)
+{
+ _GwyModuleInfoInternal *iinfo;
+ GError *err = NULL;
+ gboolean ok = TRUE;
+ guint abi_version;
+
+ if (!mod_info) {
+ g_set_error(&err, GWY_MODULE_ERROR, GWY_MODULE_ERROR_INFO,
+ "Module info is NULL");
+ gwy_module_register_fail(err, error, modname, filename);
+ ok = FALSE;
}
if (ok) {
- ok = mod_info->abi_version == GWY_MODULE_ABI_VERSION;
+ abi_version = mod_info->abi_version;
+ if (abi_version & GWY_MODULE_BUNDLE_FLAG) {
+ gwy_debug("bundle flag found on %s", filename);
+ if (in_bundle) {
+ g_set_error(&err, GWY_MODULE_ERROR, GWY_MODULE_ERROR_NESTING,
+ "Nested module bundles are insane "
+ "and not supported.");
+ gwy_module_register_fail(err, error, modname, filename);
+ g_free(modname);
+ return FALSE;
+ }
+ abi_version &= ~(GWY_MODULE_BUNDLE_FLAG);
+ if (abi_version == GWY_MODULE_ABI_VERSION) {
+ ok = register_module_bundle(mods, mod_info,
+ filename, modname, error);
+ g_free(modname);
+ return ok;
+ }
+ ok = FALSE;
+ }
+ else {
+ ok = (abi_version == GWY_MODULE_ABI_VERSION);
+ }
+
if (!ok) {
g_set_error(&err, GWY_MODULE_ERROR, GWY_MODULE_ERROR_ABI,
"Module ABI version %d differs from %d",
@@ -359,12 +505,12 @@ gwy_module_do_register_module(const gchar *filename,
}
if (ok) {
- ok = mod_info->register_func
- && mod_info->blurb && *mod_info->blurb
- && mod_info->author && *mod_info->author
- && mod_info->version && *mod_info->version
- && mod_info->copyright && *mod_info->copyright
- && mod_info->date && *mod_info->date;
+ ok = (mod_info->register_func
+ && mod_info->blurb && *mod_info->blurb
+ && mod_info->author && *mod_info->author
+ && mod_info->version && *mod_info->version
+ && mod_info->copyright && *mod_info->copyright
+ && mod_info->date && *mod_info->date);
if (!ok) {
g_set_error(&err, GWY_MODULE_ERROR, GWY_MODULE_ERROR_ABI,
"Module info has missing/invalid fields");
@@ -394,25 +540,63 @@ gwy_module_do_register_module(const gchar *filename,
if (ok)
gwy_module_pedantic_check(iinfo);
- else {
+ else
gwy_module_get_rid_of(iinfo->name);
- modname = NULL;
- }
}
+ else
+ g_free(modname);
- if (ok) {
- gwy_debug("Making module `%s' resident.", filename);
- g_module_make_resident(mod);
+ return ok;
+}
+
+static gchar*
+gwy_module_figure_out_name(const gchar *filename)
+{
+ gchar *modname, *s;
+ guint i;
+
+ modname = g_path_get_basename(filename);
+ for (i = 0; modname[i]; i++)
+ modname[i] = g_ascii_tolower(modname[i]);
+
+ /* FIXME: On normal platforms module names have an extension, but if
+ * it doesn't, just get over it. This can happen only with explicit
+ * gwy_module_register_module() as gwy_load_modules_in_dir() accepts
+ * only sane names. */
+ if ((s = strchr(modname, '.')))
+ *s = '\0';
+
+ return modname;
+}
+
+static gboolean
+gwy_module_check_module_name(const gchar *modname,
+ GHashTable *mods,
+ GError **error)
+{
+ if (!modname || !*modname) {
+ g_set_error(error, GWY_MODULE_ERROR, GWY_MODULE_ERROR_NAME,
+ "Module name is empty");
+ return FALSE;
}
- else {
- if (!g_module_close(mod))
- g_critical("Cannot unload module `%s': %s",
- filename, g_module_error());
- g_free(modname);
+
+ if (!gwy_strisident(modname, "_-", NULL))
+ g_warning("Module name `%s' is not a valid identifier. "
+ "It may be rejected in future.", modname);
+
+ if (g_hash_table_lookup(mods, modname)) {
+ g_set_error(error, GWY_MODULE_ERROR, GWY_MODULE_ERROR_DUPLICATE,
+ "Module was already registered");
+ return FALSE;
}
- currenly_registered_module = NULL;
- return ok ? mod_info : NULL;
+ if (gwy_strequal(modname, "pygwy") && !check_python_availability()) {
+ g_set_error(error, GWY_MODULE_ERROR, GWY_MODULE_ERROR_OPEN,
+ "Avoiding to register pygwy if Python is unavailable.");
+ return FALSE;
+ }
+
+ return TRUE;
}
/* XXX: If python is not available loading pygwy can pop up weird boxes. Fix
@@ -492,9 +676,15 @@ gwy_load_modules_in_dir(GDir *gdir,
if (!g_str_has_suffix(filename, "." G_MODULE_SUFFIX))
#endif
continue;
- modulename = g_build_filename(dirname, filename, NULL);
- gwy_module_do_register_module(modulename, mods, NULL);
- g_free(modulename);
+
+ /* FIXME: Should we block bundles here? Probably, because we may want
+ * to block things *before* we try to dlopen() them. This allows to
+ * get out of some hairy situations. */
+ if (!gwy_module_filename_is_blocked(filename)) {
+ modulename = g_build_filename(dirname, filename, NULL);
+ gwy_module_do_register_module(modulename, mods, NULL);
+ g_free(modulename);
+ }
}
}
@@ -646,10 +836,142 @@ gwy_module_lookup(const gchar *name)
{
_GwyModuleInfoInternal *info;
+ if (!modules)
+ return NULL;
+
info = g_hash_table_lookup(modules, name);
return info ? info->mod_info : NULL;
}
+/**
+ * gwy_module_disable_registration:
+ * @name: A module name.
+ *
+ * Prevents the registration of a module of given name.
+ *
+ * This function blocks future module registration using
+ * gwy_module_register_modules(). Already loaded modules are unaffected.
+ * The low-level module loading function gwy_module_register_module() always
+ * attempts to load the module, even if blocked.
+ *
+ * Since: 2.48
+ **/
+void
+gwy_module_disable_registration(const gchar *name)
+{
+ GHashTable *blocked_modules;
+ GQuark quark;
+
+ g_return_if_fail(name);
+ blocked_modules = gwy_module_get_blocking_table(TRUE);
+ quark = g_quark_from_string(name);
+ g_hash_table_insert(blocked_modules,
+ GSIZE_TO_POINTER(quark), GINT_TO_POINTER(TRUE));
+}
+
+/**
+ * gwy_module_enable_registration:
+ * @name: A module name.
+ *
+ * Unblocks the registration of a module of given name.
+ *
+ * This function influences future module registration. Already loaded modules
+ * are unaffected.
+ *
+ * Since: 2.48
+ **/
+void
+gwy_module_enable_registration(const gchar *name)
+{
+ GHashTable *blocked_modules;
+ GQuark quark;
+
+ g_return_if_fail(name);
+ blocked_modules = gwy_module_get_blocking_table(FALSE);
+ if (!blocked_modules)
+ return;
+
+ quark = g_quark_from_string(name);
+ g_hash_table_remove(blocked_modules, GSIZE_TO_POINTER(quark));
+}
+
+/**
+ * gwy_module_is_enabled:
+ * @name: A module name.
+ *
+ * Reports whether the registration of a module is enabled.
+ *
+ * If the registration of module @name was prevented using
+ * gwy_module_disable_registration() and not subsequently re-enabled
+ * using gwy_module_enabled_registration() this function returns %FALSE.
+ *
+ * The reported values only represents the current state of blocking. A module
+ * @name could have been loaded when it was not blocked.
+ *
+ * Returns: %TRUE if module @name can be registered; %FALSE when it is blocked
+ * from registration.
+ *
+ * Since: 2.48
+ **/
+gboolean
+gwy_module_is_enabled(const gchar *name)
+{
+ GHashTable *blocked_modules;
+ GQuark quark;
+
+ g_return_val_if_fail(name, FALSE);
+ blocked_modules = gwy_module_get_blocking_table(FALSE);
+ if (!blocked_modules)
+ return TRUE;
+
+ quark = g_quark_from_string(name);
+ return !g_hash_table_lookup(blocked_modules, GSIZE_TO_POINTER(quark));
+}
+
+static gboolean
+gwy_module_filename_is_blocked(const gchar *filename)
+{
+ GHashTable *blocked_modules;
+ gchar *modname;
+ GQuark quark;
+
+ blocked_modules = gwy_module_get_blocking_table(FALSE);
+ if (!blocked_modules)
+ return FALSE;
+
+ modname = gwy_module_figure_out_name(filename);
+ quark = g_quark_from_string(modname);
+ g_free(modname);
+
+ return !!g_hash_table_lookup(blocked_modules, GSIZE_TO_POINTER(quark));
+}
+
+static gboolean
+gwy_module_name_is_blocked(const gchar *modname)
+{
+ GHashTable *blocked_modules;
+ GQuark quark;
+
+ blocked_modules = gwy_module_get_blocking_table(FALSE);
+ if (!blocked_modules)
+ return FALSE;
+
+ quark = g_quark_from_string(modname);
+
+ return !!g_hash_table_lookup(blocked_modules, GSIZE_TO_POINTER(quark));
+}
+
+static GHashTable*
+gwy_module_get_blocking_table(gboolean do_create)
+{
+ static GHashTable *blocked_modules = NULL;
+
+ if (!blocked_modules && do_create)
+ blocked_modules = g_hash_table_new(g_direct_hash, g_direct_equal);
+
+ return blocked_modules;
+}
+
/************************** Documentation ****************************/
/**
@@ -679,7 +1001,7 @@ gwy_module_lookup(const gchar *name)
* The module query must be the ONLY exported symbol from a module.
*
* This macro does The Right Thing necessary to export module info in a way
- * Gwyddion understands it. Put #GWY_MODULE_QUERY with the module info
+ * Gwyddion understands it. Put %GWY_MODULE_QUERY with the module info
* (#GwyModuleInfo) of your module as its argument on a line (with NO
* semicolon after).
*
@@ -695,26 +1017,40 @@ gwy_module_lookup(const gchar *name)
* it is compiled using a C++ compiler.
**/
-/*
- * GWY_MODULE_QUERY_BUILTIN:
+/**
+ * GWY_MODULE_QUERY2:
* @mod_info: The #GwyModuleInfo structure to return as module info.
- * @name: Module name. This is the base name of the source file with dashes
- * and other non-identifier characters changed to underscores. For
- * instance module "nt-mdt.c" should pass nt_mdt.
- *
- * The declaration of module info query for built-in modules.
- *
- * See GWY_MODULE_QUERY() for discussion. Using this macro instead of
- * GWY_MODULE_QUERY() changes the name of the exported query function and
- * enables integrating the module into the gwyddion executable. This obviously
- * makes sense only for core modules that are distributed with Gwyddion,
- * however, it does no harm in third party modules as this macro functions
- * differently from GWY_MODULE_QUERY() only if preprocessor symbol
- * %GWY_MODULE_IS_BUILTIN is defined (which you do not do in an external
- * module).
- *
- * Since: 2.22
- */
+ * @mod_name: Module name. It should be identical to the file name the module
+ * would have if installed standalone, without any extension.
+ * For instance module implemented in "nt-mdt.c" and installed as
+ * "nt-mdt.so" or "nt-mdt.dll" (or with other extension, depending
+ * on the platform) should pass "nt-mdt".
+ *
+ * The module query must be the ONLY exported symbol from a module.
+ *
+ * See %GWY_MODULE_QUERY for discussion.
+ *
+ * This macro is intended for modules that can be bundled together to one big
+ * shared library for time and space optimization. This mostly makes sense
+ * only for modules included in Gwyddion itself as it contains hundreds of
+ * modules.
+ *
+ * However, it safe to use in third party modules because if modules
+ * are not bundled the macro behaves exactly as %GWY_MODULE_QUERY and the
+ * @mod_name argument is just ignored. The macro expansion differs only when
+ * %GWY_MODULE_BUNDLING is defined when including the "gwymoduleloader.h"
+ * header.
+ *
+ * Since: 2.49
+ **/
+
+/**
+ * GWY_MODULE_BUNDLE_FLAG
+ *
+ * Value to bitwise combine with %GWY_MODULE_ABI_VERSION to indicate a bundle.
+ *
+ * Since: 2.49
+ **/
/**
* GwyModuleRegisterFunc:
@@ -724,10 +1060,14 @@ gwy_module_lookup(const gchar *name)
* It actually runs particular featrue registration functions, like
* gwy_file_func_register() and gwy_process_func_register().
*
+ * If the module has a complex initialisation it may be safer to simply not
+ * register any function but return %TRUE even if it fails to set up itself
+ * correctly. The module feature unregistration is somewhat crude and,
+ * generally, unregisteration may lead to disaster when shared library
+ * unloading has unexpected side effects.
+ *
* Returns: Whether the registration succeeded. When it returns %FALSE, the
- * module and its features are unloaded (FIXME: maybe. Currenly only
- * module is unloaded, features are NOT unregistered, this can lead
- * to all kinds of disasters).
+ * module and its features are unregistered.
**/
/**
@@ -743,6 +1083,17 @@ gwy_module_lookup(const gchar *name)
**/
/**
+ * GwyModuleBundleRegisterFunc:
+ *
+ * Module bundle query function type.
+ *
+ * It returns an array of module records for all modules in the bundle,
+ * terminated by {%NULL, %NULL}.
+ *
+ * Since: 2.49
+ **/
+
+/**
* GwyModuleInfo:
* @abi_version: Gwyddion module ABI version, should be always
* #GWY_MODULE_ABI_VERSION.
@@ -759,6 +1110,29 @@ gwy_module_lookup(const gchar *name)
**/
/**
+ * GwyModuleFailureInfo:
+ * @filename: Name of the file the module was loaded from.
+ * @modname: Module name (can be %NULL and contain odd bytes).
+ * @err_message: Error message from the failed module registration.
+ * @err_domain: #GError domain from the failed module registration.
+ * @err_code: #GError code from the failed module registration.
+ *
+ * Information about a failed module registration.
+ *
+ * Since: 2.49
+ **/
+
+/**
+ * GwyModuleRecord:
+ * @query: Module query function.
+ * @name: Module name (base file name without extensions).
+ *
+ * Module record returned by bundle query function.
+ *
+ * Since: 2.49
+ **/
+
+/**
* GwyRunType:
* @GWY_RUN_NONE: None.
* @GWY_RUN_NONINTERACTIVE: The function is run non-interactively, it must not
@@ -796,6 +1170,7 @@ gwy_module_lookup(const gchar *name)
* @GWY_MODULE_ERROR_INFO: Module query function provided %NULL info.
* @GWY_MODULE_ERROR_REGISTER: The registration function returned %FALSE; or
* the module did not register any function.
+ * @GWY_MODULE_ERROR_NESTING: Nested module bundle found. (Since 2.49)
*
* Type of module loading and registration error.
**/
diff --git a/libgwymodule/gwymoduleloader.h b/libgwymodule/gwymoduleloader.h
index 56e295c..9ae4b09 100644
--- a/libgwymodule/gwymoduleloader.h
+++ b/libgwymodule/gwymoduleloader.h
@@ -1,6 +1,6 @@
/*
- * @(#) $Id: gwymoduleloader.h 15598 2013-11-11 12:33:32Z yeti-dn $
- * Copyright (C) 2003,2004 David Necas (Yeti), Petr Klapetek.
+ * @(#) $Id: gwymoduleloader.h 20051 2017-07-10 09:11:41Z yeti-dn $
+ * Copyright (C) 2003,2004,2017 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
* This program is free software; you can redistribute it and/or modify
@@ -27,6 +27,7 @@
G_BEGIN_DECLS
#define GWY_MODULE_ABI_VERSION 2
+#define GWY_MODULE_BUNDLE_FLAG 256u
#ifdef __cplusplus
#define __GWY_MODULE_QUERY_EXTERN_C extern "C"
@@ -36,7 +37,15 @@ G_BEGIN_DECLS
#define GWY_MODULE_QUERY(mod_info) \
__GWY_MODULE_QUERY_EXTERN_C G_MODULE_EXPORT GwyModuleInfo* \
- _gwy_module_query(void) { return &mod_info; } \
+ _gwy_module_query(void) { return &mod_info; }
+
+#ifdef GWY_MODULE_BUNDLING
+#define GWY_MODULE_QUERY2(mod_info,mod_name) \
+ __GWY_MODULE_QUERY_EXTERN_C G_GNUC_INTERNAL GwyModuleInfo* \
+ _gwy_module_query__##mod_name(void) { return &mod_info; }
+#else
+#define GWY_MODULE_QUERY2(mod_info,mod_name) GWY_MODULE_QUERY(mod_info)
+#endif
#define GWY_MODULE_ERROR gwy_module_error_quark()
@@ -47,14 +56,21 @@ typedef enum {
GWY_MODULE_ERROR_QUERY,
GWY_MODULE_ERROR_ABI,
GWY_MODULE_ERROR_INFO,
- GWY_MODULE_ERROR_REGISTER
+ GWY_MODULE_ERROR_REGISTER,
+ GWY_MODULE_ERROR_NESTING
} GwyModuleError;
-/* FIXME: This is a public structure, remove the underscore indirection. */
typedef struct _GwyModuleInfo GwyModuleInfo;
+typedef struct _GwyModuleRecord GwyModuleRecord;
-typedef gboolean (*GwyModuleRegisterFunc) (void);
-typedef GwyModuleInfo* (*GwyModuleQueryFunc) (void);
+typedef gboolean (*GwyModuleRegisterFunc) (void);
+typedef GwyModuleInfo* (*GwyModuleQueryFunc) (void);
+typedef const GwyModuleRecord* (*GwyModuleBundleRegisterFunc) (void);
+
+struct _GwyModuleRecord {
+ GwyModuleQueryFunc query;
+ const gchar *name;
+};
struct _GwyModuleInfo {
guint32 abi_version;
@@ -66,15 +82,28 @@ struct _GwyModuleInfo {
const gchar *date;
};
-GQuark gwy_module_error_quark (void);
-void gwy_module_register_modules (const gchar **paths);
-const GwyModuleInfo* gwy_module_lookup (const gchar *name);
-const gchar* gwy_module_get_filename (const gchar *name);
-GSList* gwy_module_get_functions (const gchar *name);
-void gwy_module_foreach (GHFunc function,
+typedef struct {
+ const gchar *filename;
+ const gchar *modname;
+ const gchar *err_message;
+ gint err_domain;
+ gint err_code;
+} GwyModuleFailureInfo;
+
+GQuark gwy_module_error_quark (void);
+void gwy_module_register_modules (const gchar **paths);
+const GwyModuleInfo* gwy_module_lookup (const gchar *name);
+const gchar* gwy_module_get_filename (const gchar *name);
+GSList* gwy_module_get_functions (const gchar *name);
+void gwy_module_foreach (GHFunc function,
+ gpointer data);
+void gwy_module_failure_foreach (GFunc function,
gpointer data);
-const GwyModuleInfo* gwy_module_register_module (const gchar *name,
+const GwyModuleInfo* gwy_module_register_module (const gchar *name,
GError **error);
+void gwy_module_disable_registration(const gchar *name);
+void gwy_module_enable_registration (const gchar *name);
+gboolean gwy_module_is_enabled (const gchar *name);
G_END_DECLS
diff --git a/libgwymodule/gwymoduletypes.c b/libgwymodule/gwymoduletypes.c
index 0da2ce3..e0e2e54 100644
--- a/libgwymodule/gwymoduletypes.c
+++ b/libgwymodule/gwymoduletypes.c
@@ -75,6 +75,7 @@ gwy_module_error_get_type(void)
{ GWY_MODULE_ERROR_ABI, "GWY_MODULE_ERROR_ABI", "abi" },
{ GWY_MODULE_ERROR_INFO, "GWY_MODULE_ERROR_INFO", "info" },
{ GWY_MODULE_ERROR_REGISTER, "GWY_MODULE_ERROR_REGISTER", "register" },
+ { GWY_MODULE_ERROR_NESTING, "GWY_MODULE_ERROR_NESTING", "nesting" },
{ 0, NULL, NULL }
};
etype = g_enum_register_static("GwyModuleError", values);
diff --git a/libprocess/Makefile.am b/libprocess/Makefile.am
index 249986c..f819277 100644
--- a/libprocess/Makefile.am
+++ b/libprocess/Makefile.am
@@ -1,4 +1,4 @@
-# @(#) $Id: Makefile.am 19258 2016-11-15 08:25:23Z yeti-dn $
+# @(#) $Id: Makefile.am 20269 2017-08-14 11:21:07Z yeti-dn $
libgwyddion = $(top_builddir)/libgwyddion/libgwyddion2.la
@@ -47,10 +47,8 @@ libgwyprocess2include_HEADERS = \
noinst_HEADERS = \
gwyprocessinternal.h \
- monte-carlo-unc.h \
morph_lib.h \
- natural.h \
- wrappers.h
+ natural.h
lib_LTLIBRARIES = libgwyprocess2.la
@@ -90,7 +88,7 @@ AM_CPPFLAGS = -I$(top_srcdir) -DG_LOG_DOMAIN=\"GwyProcess\"
# Any iface change C++: 0: A
# Adding ifaces C: R: A++
# Changing ifaces C: R: 0
-libversion = -version-info 30:0:30
+libversion = -version-info 32:0:32
#libversion = -release @LIBRARY_RELEASE@
libgwyprocess2_la_LDFLAGS = @BASIC_LIBS@ @FFTW3_LIBS@ -export-dynamic $(no_undefined) $(export_symbols) $(libversion)
libgwyprocess2_la_LIBADD = $(libgwyprocess_libadd)
@@ -101,6 +99,7 @@ libgwyprocess2_la_SOURCES = \
natural.c \
cdline.c \
correct.c \
+ correct-laplace.c \
correlation.c \
cwt.c \
datafield.c \
@@ -108,8 +107,12 @@ libgwyprocess2_la_SOURCES = \
dwt.c \
elliptic.c \
filters.c \
+ filters-minmax.c \
fractals.c \
grains.c \
+ grains-disttrans.c \
+ grains-values.c \
+ grains-wshed.c \
gwycaldata.c \
gwycalibration.c \
gwygrainvalue.c \
@@ -122,13 +125,15 @@ libgwyprocess2_la_SOURCES = \
inttrans.c \
level.c \
linestats.c \
- monte-carlo-unc.c \
morph_lib.c \
peaks.c \
simplefft.c \
spectra.c \
spline.c \
stats.c \
+ stats-acfpsdf.c \
+ stats-entropy.c \
+ stats-sum.c \
stats_uncertainty.c \
surface.c \
tip.c \
diff --git a/libprocess/Makefile.in b/libprocess/Makefile.in
index fd0d548..2837388 100644
--- a/libprocess/Makefile.in
+++ b/libprocess/Makefile.in
@@ -14,10 +14,10 @@
@SET_MAKE@
-# @(#) $Id: Makefile.am 19258 2016-11-15 08:25:23Z yeti-dn $
+# @(#) $Id: Makefile.am 20269 2017-08-14 11:21:07Z yeti-dn $
# Generic glib-mkenum rules.
-# @(#) $Id: mkenum.mk 11705 2011-01-03 08:32:55Z yeti-dn $
+# @(#) $Id: mkenum.mk 20080 2017-07-24 16:05:52Z yeti-dn $
#
# Parameters:
# MKENUM_NAME -- output base name
@@ -160,13 +160,15 @@ am__installdirs = "$(DESTDIR)$(libdir)" \
"$(DESTDIR)$(libgwyprocess2includedir)"
LTLIBRARIES = $(lib_LTLIBRARIES)
am_libgwyprocess2_la_OBJECTS = arithmetic.lo brick.lo natural.lo \
- cdline.lo correct.lo correlation.lo cwt.lo datafield.lo \
- dataline.lo dwt.lo elliptic.lo filters.lo fractals.lo \
- grains.lo gwycaldata.lo gwycalibration.lo gwygrainvalue.lo \
- gwyprocess.lo gwyprocessenums.lo gwyprocesstypes.lo \
- gwyshapefitpreset.lo hough.lo interpolation.lo inttrans.lo \
- level.lo linestats.lo monte-carlo-unc.lo morph_lib.lo peaks.lo \
- simplefft.lo spectra.lo spline.lo stats.lo \
+ cdline.lo correct.lo correct-laplace.lo correlation.lo cwt.lo \
+ datafield.lo dataline.lo dwt.lo elliptic.lo filters.lo \
+ filters-minmax.lo fractals.lo grains.lo grains-disttrans.lo \
+ grains-values.lo grains-wshed.lo gwycaldata.lo \
+ gwycalibration.lo gwygrainvalue.lo gwyprocess.lo \
+ gwyprocessenums.lo gwyprocesstypes.lo gwyshapefitpreset.lo \
+ hough.lo interpolation.lo inttrans.lo level.lo linestats.lo \
+ morph_lib.lo peaks.lo simplefft.lo spectra.lo spline.lo \
+ stats.lo stats-acfpsdf.lo stats-entropy.lo stats-sum.lo \
stats_uncertainty.lo surface.lo tip.lo triangulation.lo
libgwyprocess2_la_OBJECTS = $(am_libgwyprocess2_la_OBJECTS)
AM_V_lt = $(am__v_lt_ at AM_V@)
@@ -280,10 +282,7 @@ EPYDOC = @EPYDOC@
EXEEXT = @EXEEXT@
EXR_CFLAGS = @EXR_CFLAGS@
EXR_LIBS = @EXR_LIBS@
-FFTW3_1_CFLAGS = @FFTW3_1_CFLAGS@
-FFTW3_1_LIBS = @FFTW3_1_LIBS@
FFTW3_CFLAGS = @FFTW3_CFLAGS@
-FFTW3_DEPENDENCY = @FFTW3_DEPENDENCY@
FFTW3_LIBS = @FFTW3_LIBS@
FGREP = @FGREP@
GCONFTOOL = @GCONFTOOL@
@@ -293,6 +292,8 @@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
GLIBC21 = @GLIBC21@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GMODULE_CFLAGS = @GMODULE_CFLAGS@
GMODULE_LIBS = @GMODULE_LIBS@
GMSGFMT = @GMSGFMT@
@@ -317,7 +318,9 @@ GTK_MAC_LIBS = @GTK_MAC_LIBS@
GWY_VERSION_MAJOR = @GWY_VERSION_MAJOR@
GWY_VERSION_MINOR = @GWY_VERSION_MINOR@
GWY_VERSION_STRING = @GWY_VERSION_STRING@
+HDRIMAGE_EXTRA_CFLAGS = @HDRIMAGE_EXTRA_CFLAGS@
HTML_DIR = @HTML_DIR@
+INKSCAPE = @INKSCAPE@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -375,6 +378,7 @@ PASCAL = @PASCAL@
PATH_SEPARATOR = @PATH_SEPARATOR@
PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
+PNGCRUSH = @PNGCRUSH@
PNG_CFLAGS = @PNG_CFLAGS@
PNG_LIBS = @PNG_LIBS@
POD2MAN = @POD2MAN@
@@ -383,17 +387,13 @@ PYGTK_CFLAGS = @PYGTK_CFLAGS@
PYGTK_CODEGENDIR = @PYGTK_CODEGENDIR@
PYGTK_LIBS = @PYGTK_LIBS@
PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
PYTHON_EXTRA_CFLAGS = @PYTHON_EXTRA_CFLAGS@
PYTHON_INCLUDES = @PYTHON_INCLUDES@
-PYTHON_LIBS = @PYTHON_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
PYTHON_PLATFORM = @PYTHON_PLATFORM@
PYTHON_PREFIX = @PYTHON_PREFIX@
-PYTHON_SYSCFG_BASECFLAGS = @PYTHON_SYSCFG_BASECFLAGS@
-PYTHON_SYSCFG_CCSHARED = @PYTHON_SYSCFG_CCSHARED@
-PYTHON_SYSCFG_LDFLAGS = @PYTHON_SYSCFG_LDFLAGS@
-PYTHON_SYSCFG_LIBDIR = @PYTHON_SYSCFG_LIBDIR@
-PYTHON_SYSCFG_LINKFORSHARED = @PYTHON_SYSCFG_LINKFORSHARED@
PYTHON_VERSION = @PYTHON_VERSION@
RANLIB = @RANLIB@
RUBY = @RUBY@
@@ -521,10 +521,8 @@ libgwyprocess2include_HEADERS = \
noinst_HEADERS = \
gwyprocessinternal.h \
- monte-carlo-unc.h \
morph_lib.h \
- natural.h \
- wrappers.h
+ natural.h
lib_LTLIBRARIES = libgwyprocess2.la
@OS_MSWIN_TRUE at no_undefined = -no-undefined
@@ -544,9 +542,6 @@ MKENUM_HFILES = \
$(srcdir)/peaks.h \
$(srcdir)/gwygrainvalue.h
-
-# TODO: Detect
-GLIB_MKENUMS = glib-mkenums
mkenum_built_sources = $(MKENUM_NAME).h $(MKENUM_NAME).c
@MAINTAINER_MODE_TRUE at mkenum_stamp_files = $(MKENUM_NAME).h.stamp
@MAINTAINER_MODE_TRUE at mkenum_self = $(top_srcdir)/utils/mkenum.mk
@@ -567,7 +562,7 @@ AM_CPPFLAGS = -I$(top_srcdir) -DG_LOG_DOMAIN=\"GwyProcess\"
# Any iface change C++: 0: A
# Adding ifaces C: R: A++
# Changing ifaces C: R: 0
-libversion = -version-info 30:0:30
+libversion = -version-info 32:0:32
#libversion = -release @LIBRARY_RELEASE@
libgwyprocess2_la_LDFLAGS = @BASIC_LIBS@ @FFTW3_LIBS@ -export-dynamic $(no_undefined) $(export_symbols) $(libversion)
libgwyprocess2_la_LIBADD = $(libgwyprocess_libadd)
@@ -577,6 +572,7 @@ libgwyprocess2_la_SOURCES = \
natural.c \
cdline.c \
correct.c \
+ correct-laplace.c \
correlation.c \
cwt.c \
datafield.c \
@@ -584,8 +580,12 @@ libgwyprocess2_la_SOURCES = \
dwt.c \
elliptic.c \
filters.c \
+ filters-minmax.c \
fractals.c \
grains.c \
+ grains-disttrans.c \
+ grains-values.c \
+ grains-wshed.c \
gwycaldata.c \
gwycalibration.c \
gwygrainvalue.c \
@@ -598,13 +598,15 @@ libgwyprocess2_la_SOURCES = \
inttrans.c \
level.c \
linestats.c \
- monte-carlo-unc.c \
morph_lib.c \
peaks.c \
simplefft.c \
spectra.c \
spline.c \
stats.c \
+ stats-acfpsdf.c \
+ stats-entropy.c \
+ stats-sum.c \
stats_uncertainty.c \
surface.c \
tip.c \
@@ -693,6 +695,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/arithmetic.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/brick.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/cdline.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/correct-laplace.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/correct.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/correlation.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/cwt.Plo at am__quote@
@@ -700,8 +703,12 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dataline.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dwt.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/elliptic.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/filters-minmax.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/filters.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/fractals.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/grains-disttrans.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/grains-values.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/grains-wshed.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/grains.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gwycaldata.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gwycalibration.Plo at am__quote@
@@ -715,13 +722,15 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/inttrans.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/level.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/linestats.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/monte-carlo-unc.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/morph_lib.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/natural.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/peaks.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/simplefft.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/spectra.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/spline.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/stats-acfpsdf.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/stats-entropy.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/stats-sum.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/stats.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/stats_uncertainty.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/surface.Plo at am__quote@
diff --git a/libprocess/arithmetic.c b/libprocess/arithmetic.c
index 5ca0ad3..60543da 100644
--- a/libprocess/arithmetic.c
+++ b/libprocess/arithmetic.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: arithmetic.c 19036 2016-10-08 10:32:41Z yeti-dn $
+ * @(#) $Id: arithmetic.c 20128 2017-08-01 11:19:59Z yeti-dn $
* Copyright (C) 2003,2004 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -446,32 +446,6 @@ gwy_data_line_check_compatibility(GwyDataLine *data_line1,
return result;
}
-/* code ported from libgwy3 */
-typedef void (*RowExtendFunc)(const gdouble *in,
- gdouble *out,
- guint pos,
- guint width,
- guint res,
- guint extend_left,
- guint extend_right,
- gdouble value);
-
-typedef void (*RectExtendFunc)(const gdouble *in,
- guint inrowstride,
- gdouble *out,
- guint outrowstride,
- guint xpos,
- guint ypos,
- guint width,
- guint height,
- guint xres,
- guint yres,
- guint extend_left,
- guint extend_right,
- guint extend_up,
- guint extend_down,
- gdouble value);
-
static inline void
fill_block(gdouble *data, guint len, gdouble value)
{
@@ -729,8 +703,22 @@ rect_extend_fill(const gdouble *in, guint inrowstride,
fill_block(out2, extend_left + width + extend_right, value);
}
-static RectExtendFunc
-get_rect_extend_func(GwyExteriorType exterior)
+RowExtendFunc
+_gwy_get_row_extend_func(GwyExteriorType exterior)
+{
+ if (exterior == GWY_EXTERIOR_FIXED_VALUE)
+ return &row_extend_fill;
+ if (exterior == GWY_EXTERIOR_BORDER_EXTEND)
+ return &row_extend_border;
+ if (exterior == GWY_EXTERIOR_MIRROR_EXTEND)
+ return &row_extend_mirror;
+ if (exterior == GWY_EXTERIOR_PERIODIC)
+ return &row_extend_periodic;
+ g_return_val_if_reached(NULL);
+}
+
+RectExtendFunc
+_gwy_get_rect_extend_func(GwyExteriorType exterior)
{
if (exterior == GWY_EXTERIOR_FIXED_VALUE)
return &rect_extend_fill;
@@ -779,7 +767,7 @@ gwy_data_field_extend(GwyDataField *data_field,
g_return_val_if_fail(GWY_IS_DATA_FIELD(data_field), NULL);
- extend_rect = get_rect_extend_func(exterior);
+ extend_rect = _gwy_get_rect_extend_func(exterior);
g_return_val_if_fail(extend_rect, NULL);
width = data_field->xres;
@@ -802,10 +790,7 @@ gwy_data_field_extend(GwyDataField *data_field,
gwy_data_field_set_xoffset(target, 0.0);
gwy_data_field_set_yoffset(target, 0.0);
}
- gwy_serializable_clone(G_OBJECT(gwy_data_field_get_si_unit_xy(data_field)),
- G_OBJECT(gwy_data_field_get_si_unit_xy(target)));
- gwy_serializable_clone(G_OBJECT(gwy_data_field_get_si_unit_z(data_field)),
- G_OBJECT(gwy_data_field_get_si_unit_z(target)));
+ gwy_data_field_copy_units(data_field, target);
return target;
}
diff --git a/libprocess/brick.c b/libprocess/brick.c
index 33fe07f..40fd611 100644
--- a/libprocess/brick.c
+++ b/libprocess/brick.c
@@ -1,6 +1,6 @@
/*
- * @(#) $Id: brick.c 19108 2016-10-21 08:50:43Z yeti-dn $
- * Copyright (C) 2012-2016 David Necas (Yeti), Petr Klapetek.
+ * @(#) $Id: brick.c 20128 2017-08-01 11:19:59Z yeti-dn $
+ * Copyright (C) 2012-2017 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
* Originally based on Yeti's implementation for Gwyddion 3 branch,
@@ -24,13 +24,13 @@
#include "config.h"
#include <string.h>
-
+#include <stdlib.h>
#include <libgwyddion/gwymacros.h>
#include <libgwyddion/gwymath.h>
#include <libgwyddion/gwydebugobjects.h>
#include <libprocess/brick.h>
#include <libprocess/interpolation.h>
-#include <stdlib.h>
+#include "gwyprocessinternal.h"
#define GWY_BRICK_TYPE_NAME "GwyBrick"
@@ -118,6 +118,8 @@ gwy_brick_finalize(GObject *object)
GWY_OBJECT_UNREF(brick->si_unit_x);
GWY_OBJECT_UNREF(brick->si_unit_y);
+ GWY_OBJECT_UNREF(brick->si_unit_z);
+ GWY_OBJECT_UNREF(brick->si_unit_w);
g_free(brick->data);
G_OBJECT_CLASS(gwy_brick_parent_class)->finalize(object);
@@ -202,20 +204,12 @@ gwy_brick_new_alike(GwyBrick *model,
else
brick->data = g_new(gdouble, brick->xres * brick->yres * brick->zres);
- if (model->si_unit_x)
- brick->si_unit_x = gwy_si_unit_duplicate(model->si_unit_x);
- if (model->si_unit_y)
- brick->si_unit_y = gwy_si_unit_duplicate(model->si_unit_y);
- if (model->si_unit_z)
- brick->si_unit_z = gwy_si_unit_duplicate(model->si_unit_z);
- if (model->si_unit_w)
- brick->si_unit_w = gwy_si_unit_duplicate(model->si_unit_w);
+ gwy_brick_copy_units(model, brick);
priv = model->priv;
new_priv = brick->priv;
if (priv->zcalibration)
- new_priv->zcalibration
- = gwy_data_line_duplicate(priv->zcalibration);
+ new_priv->zcalibration = gwy_data_line_duplicate(priv->zcalibration);
return brick;
}
@@ -255,9 +249,9 @@ gwy_brick_new_part(const GwyBrick *brick,
g_return_val_if_fail(xpos >= 0 && ypos >=0 && zpos >=0
&& xres >=0 && yres >=0 && zres >= 0,
NULL);
- g_return_val_if_fail(((xpos + xres) <= brick->xres)
- && ((ypos + yres) <= brick->yres)
- && ((zpos + zres) <= brick->zres),
+ g_return_val_if_fail((xpos + xres <= brick->xres)
+ && (ypos + yres <= brick->yres)
+ && (zpos + zres <= brick->zres),
NULL);
part = gwy_brick_new(xres, yres, zres,
@@ -278,14 +272,7 @@ gwy_brick_new_part(const GwyBrick *brick,
}
}
- if (brick->si_unit_x)
- part->si_unit_x = gwy_si_unit_duplicate(brick->si_unit_x);
- if (brick->si_unit_y)
- part->si_unit_y = gwy_si_unit_duplicate(brick->si_unit_y);
- if (brick->si_unit_z)
- part->si_unit_z = gwy_si_unit_duplicate(brick->si_unit_z);
- if (brick->si_unit_w)
- part->si_unit_w = gwy_si_unit_duplicate(brick->si_unit_w);
+ gwy_brick_copy_units(brick, part);
priv = brick->priv;
if (priv->zcalibration) {
@@ -296,12 +283,9 @@ gwy_brick_new_part(const GwyBrick *brick,
}
if (keep_offsets) {
- gwy_brick_set_xoffset(part, (gdouble)xpos * brick->xreal
- / brick->xres + brick->xoff);
- gwy_brick_set_yoffset(part, (gdouble)ypos * brick->yreal
- / brick->yres + brick->yoff);
- gwy_brick_set_zoffset(part, (gdouble)zpos * brick->zreal
- / brick->zres + brick->zoff);
+ gwy_brick_set_xoffset(part, xpos*brick->xreal/brick->xres + brick->xoff);
+ gwy_brick_set_yoffset(part, ypos*brick->yreal/brick->yres + brick->yoff);
+ gwy_brick_set_zoffset(part, zpos*brick->zreal/brick->zres + brick->zoff);
}
return part;
@@ -316,24 +300,18 @@ gwy_brick_serialize(GObject *obj,
GwyBrickPrivate *priv;
guint32 datasize;
guint32 num_items = 1;
- gdouble *pxoff, *pyoff, *pzoff;
+ gpointer pxoff, pyoff, pzoff, pxunit, pyunit, pzunit, pwunit;
gpointer *calibrations = NULL;
- gwy_debug("");
- g_return_val_if_fail(GWY_IS_BRICK(obj), NULL);
-
brick = GWY_BRICK(obj);
- if (!brick->si_unit_x)
- brick->si_unit_x = gwy_si_unit_new(NULL);
- if (!brick->si_unit_y)
- brick->si_unit_y = gwy_si_unit_new(NULL);
- if (!brick->si_unit_z)
- brick->si_unit_z = gwy_si_unit_new(NULL);
- if (!brick->si_unit_w)
- brick->si_unit_w = gwy_si_unit_new(NULL);
+
pxoff = brick->xoff ? &brick->xoff : NULL;
pyoff = brick->yoff ? &brick->yoff : NULL;
pzoff = brick->zoff ? &brick->zoff : NULL;
+ pxunit = unit_pointer_if_nonempty(brick->si_unit_x);
+ pyunit = unit_pointer_if_nonempty(brick->si_unit_y);
+ pzunit = unit_pointer_if_nonempty(brick->si_unit_z);
+ pwunit = unit_pointer_if_nonempty(brick->si_unit_w);
datasize = brick->xres * brick->yres * brick->zres;
priv = (GwyBrickPrivate *)brick->priv;
@@ -357,10 +335,10 @@ gwy_brick_serialize(GObject *obj,
{ 'd', "xoff", pxoff, NULL, },
{ 'd', "yoff", pyoff, NULL, },
{ 'd', "zoff", pzoff, NULL, },
- { 'o', "si_unit_x", &brick->si_unit_x, NULL, },
- { 'o', "si_unit_y", &brick->si_unit_y, NULL, },
- { 'o', "si_unit_z", &brick->si_unit_z, NULL, },
- { 'o', "si_unit_w", &brick->si_unit_w, NULL, },
+ { 'o', "si_unit_x", pxunit, NULL, },
+ { 'o', "si_unit_y", pyunit, NULL, },
+ { 'o', "si_unit_z", pzunit, NULL, },
+ { 'o', "si_unit_w", pwunit, NULL, },
{ 'D', "data", &brick->data, &datasize, },
{ 'O', "calibration", &calibrations, &num_items, },
};
@@ -383,21 +361,18 @@ gwy_brick_get_size(GObject *obj)
GwyBrickPrivate *priv;
guint32 datasize;
guint32 num_items = 1;
+ gpointer pxoff, pyoff, pzoff, pxunit, pyunit, pzunit, pwunit;
gpointer *calibrations = NULL;
- gwy_debug("");
- g_return_val_if_fail(GWY_IS_BRICK(obj), 0);
-
brick = GWY_BRICK(obj);
- if (!brick->si_unit_x)
- brick->si_unit_x = gwy_si_unit_new(NULL);
- if (!brick->si_unit_y)
- brick->si_unit_y = gwy_si_unit_new(NULL);
- if (!brick->si_unit_z)
- brick->si_unit_z = gwy_si_unit_new(NULL);
- if (!brick->si_unit_w)
- brick->si_unit_w = gwy_si_unit_new(NULL);
+ pxoff = brick->xoff ? &brick->xoff : NULL;
+ pyoff = brick->yoff ? &brick->yoff : NULL;
+ pzoff = brick->zoff ? &brick->zoff : NULL;
+ pxunit = unit_pointer_if_nonempty(brick->si_unit_x);
+ pyunit = unit_pointer_if_nonempty(brick->si_unit_y);
+ pzunit = unit_pointer_if_nonempty(brick->si_unit_z);
+ pwunit = unit_pointer_if_nonempty(brick->si_unit_w);
datasize = brick->xres * brick->yres * brick->zres;
priv = (GwyBrickPrivate *)brick->priv;
@@ -417,13 +392,13 @@ gwy_brick_get_size(GObject *obj)
{ 'd', "xreal", &brick->xreal, NULL, },
{ 'd', "yreal", &brick->yreal, NULL, },
{ 'd', "zreal", &brick->zreal, NULL, },
- { 'd', "xoff", &brick->xoff, NULL, },
- { 'd', "yoff", &brick->yoff, NULL, },
- { 'd', "zoff", &brick->zoff, NULL, },
- { 'o', "si_unit_x", &brick->si_unit_x, NULL, },
- { 'o', "si_unit_y", &brick->si_unit_y, NULL, },
- { 'o', "si_unit_z", &brick->si_unit_z, NULL, },
- { 'o', "si_unit_w", &brick->si_unit_w, NULL, },
+ { 'd', "xoff", pxoff, NULL, },
+ { 'd', "yoff", pyoff, NULL, },
+ { 'd', "zoff", pzoff, NULL, },
+ { 'o', "si_unit_x", pxunit, NULL, },
+ { 'o', "si_unit_y", pyunit, NULL, },
+ { 'o', "si_unit_z", pzunit, NULL, },
+ { 'o', "si_unit_w", pwunit, NULL, },
{ 'D', "data", &brick->data, &datasize, },
{ 'O', "calibration", &calibrations, &num_items, },
};
@@ -589,38 +564,7 @@ gwy_brick_clone_real(GObject *source, GObject *copy)
gwy_assign(clone->data, brick->data,
brick->xres * brick->yres * brick->zres);
- /* SI Units can be NULL */
- if (brick->si_unit_x && clone->si_unit_x)
- gwy_serializable_clone(G_OBJECT(brick->si_unit_x),
- G_OBJECT(clone->si_unit_x));
- else if (brick->si_unit_x && !clone->si_unit_x)
- clone->si_unit_x = gwy_si_unit_duplicate(brick->si_unit_x);
- else if (!brick->si_unit_x && clone->si_unit_x)
- GWY_OBJECT_UNREF(clone->si_unit_x);
-
- if (brick->si_unit_y && clone->si_unit_y)
- gwy_serializable_clone(G_OBJECT(brick->si_unit_y),
- G_OBJECT(clone->si_unit_y));
- else if (brick->si_unit_y && !clone->si_unit_y)
- clone->si_unit_y = gwy_si_unit_duplicate(brick->si_unit_y);
- else if (!brick->si_unit_y && clone->si_unit_y)
- GWY_OBJECT_UNREF(clone->si_unit_y);
-
- if (brick->si_unit_z && clone->si_unit_z)
- gwy_serializable_clone(G_OBJECT(brick->si_unit_z),
- G_OBJECT(clone->si_unit_z));
- else if (brick->si_unit_z && !clone->si_unit_z)
- clone->si_unit_z = gwy_si_unit_duplicate(brick->si_unit_z);
- else if (!brick->si_unit_z && clone->si_unit_z)
- GWY_OBJECT_UNREF(clone->si_unit_z);
-
- if (brick->si_unit_w && clone->si_unit_w)
- gwy_serializable_clone(G_OBJECT(brick->si_unit_w),
- G_OBJECT(clone->si_unit_w));
- else if (brick->si_unit_w && !clone->si_unit_w)
- clone->si_unit_w = gwy_si_unit_duplicate(brick->si_unit_w);
- else if (!brick->si_unit_w && clone->si_unit_w)
- GWY_OBJECT_UNREF(clone->si_unit_w);
+ gwy_brick_copy_units(brick, clone);
priv = brick->priv;
clone_priv = clone->priv;
@@ -684,29 +628,36 @@ gwy_brick_resample(GwyBrick *brick,
brick->xres = xres;
brick->yres = yres;
brick->zres = zres;
-
- brick->data = g_renew(gdouble, brick->data, brick->xres * brick->yres * brick->zres);
+ brick->data = g_renew(gdouble, brick->data, xres*yres*zres);
return;
}
- bdata = g_new(gdouble, xres * yres * zres);
+ bdata = g_new(gdouble, xres*yres*zres);
xratio = (gdouble)brick->xres/xres;
yratio = (gdouble)brick->yres/yres;
zratio = (gdouble)brick->zres/zres;
+ if (interpolation != GWY_INTERPOLATION_ROUND) {
+ g_warning("Only the ROUND interpolation method is implemented.");
+ interpolation = GWY_INTERPOLATION_ROUND;
+ }
if (interpolation == GWY_INTERPOLATION_ROUND) {
-
- for (col=0; col<xres; col++)
- {
- for (row=0; row<yres; row++)
- {
- for (lev=0; lev<zres; lev++)
- bdata[col + xres*row + xres*yres*lev] = gwy_brick_get_val(brick, MIN((gint)(xratio*col + 0.5), brick->xres-1), MIN((gint)(yratio*row + 0.5), brick->yres-1), MIN((gint)(zratio*lev + 0.5), brick->zres-1));
+ for (col=0; col<xres; col++) {
+ for (row=0; row<yres; row++) {
+ for (lev=0; lev<zres; lev++) {
+ bdata[col + xres*row + xres*yres*lev]
+ = gwy_brick_get_val(brick,
+ MIN((gint)(xratio*col + 0.5),
+ brick->xres-1),
+ MIN((gint)(yratio*row + 0.5),
+ brick->yres-1),
+ MIN((gint)(zratio*lev + 0.5),
+ brick->zres-1));
+ }
}
}
-
}
g_free(brick->data);
@@ -714,10 +665,8 @@ gwy_brick_resample(GwyBrick *brick,
brick->xres = xres;
brick->yres = yres;
brick->zres = zres;
-
}
-
/**
* gwy_brick_get_dval:
* @brick: A data brick.
@@ -748,9 +697,17 @@ gwy_brick_get_dval(GwyBrick *a, gdouble x, gdouble y, gdouble z, gint interpolat
if (G_UNLIKELY(interpolation == GWY_INTERPOLATION_NONE))
return 0.0;
- if (x<0) x = 0;
- if (y<0) y = 0;
- if (z<0) z = 0;
+ if (x < 0)
+ x = 0;
+ if (y < 0)
+ y = 0;
+ if (z < 0)
+ z = 0;
+
+ if (interpolation != GWY_INTERPOLATION_ROUND) {
+ g_warning("Only the ROUND interpolation method is implemented.");
+ interpolation = GWY_INTERPOLATION_ROUND;
+ }
switch (interpolation) {
case GWY_INTERPOLATION_ROUND:
@@ -765,12 +722,12 @@ gwy_brick_get_dval(GwyBrick *a, gdouble x, gdouble y, gdouble z, gint interpolat
/**
* gwy_brick_get_dval_real:
* @brick: A data brick.
- * @x: Position in data brick in range [0, x resolution]. If the value is outside
- * this range, the nearest border value is returned.
- * @y: Position in data brick in range [0, y resolution]. If the value is outside
- * this range, the nearest border value is returned.
- * @z: Position in data brick in range [0, z resolution]. If the value is outside
- * this range, the nearest border value is returned.
+ * @x: Position in data brick in range [0, x resolution]. If the value is
+ * outside this range, the nearest border value is returned.
+ * @y: Position in data brick in range [0, y resolution]. If the value is
+ * outside this range, the nearest border value is returned.
+ * @z: Position in data brick in range [0, z resolution]. If the value is
+ * outside this range, the nearest border value is returned.
* @interpolation: Interpolation method to use.
*
* Gets interpolated value at arbitrary data brick point indexed by pixel
@@ -794,15 +751,22 @@ gwy_brick_get_dval_real(GwyBrick *a, gdouble x, gdouble y, gdouble z, gint inter
if (G_UNLIKELY(interpolation == GWY_INTERPOLATION_NONE))
return 0.0;
- if (x<0) x = 0;
- if (y<0) y = 0;
- if (z<0) z = 0;
-
+ if (x < 0)
+ x = 0;
+ if (y < 0)
+ y = 0;
+ if (z < 0)
+ z = 0;
xratio = a->xres/a->xreal;
yratio = a->yres/a->yreal;
zratio = a->zres/a->zreal;
+ if (interpolation != GWY_INTERPOLATION_ROUND) {
+ g_warning("Only the ROUND interpolation method is implemented.");
+ interpolation = GWY_INTERPOLATION_ROUND;
+ }
+
switch (interpolation) {
case GWY_INTERPOLATION_ROUND:
return a->data[MIN((gint)(x*xratio + 0.5), a->xres-1)
@@ -1115,7 +1079,6 @@ gwy_brick_set_zreal(GwyBrick *brick, gdouble zreal)
brick->zreal = zreal;
}
-
/**
* gwy_brick_get_si_unit_x:
* @brick: A data brick.
@@ -1222,13 +1185,7 @@ gwy_brick_set_si_unit_x(GwyBrick *brick,
GwySIUnit *si_unit)
{
g_return_if_fail(GWY_IS_BRICK(brick));
- g_return_if_fail(GWY_IS_SI_UNIT(si_unit));
- if (brick->si_unit_x == si_unit)
- return;
-
- GWY_OBJECT_UNREF(brick->si_unit_x);
- g_object_ref(si_unit);
- brick->si_unit_x = si_unit;
+ _gwy_set_object_si_unit(si_unit, &brick->si_unit_x);
}
/**
@@ -1249,13 +1206,7 @@ gwy_brick_set_si_unit_y(GwyBrick *brick,
GwySIUnit *si_unit)
{
g_return_if_fail(GWY_IS_BRICK(brick));
- g_return_if_fail(GWY_IS_SI_UNIT(si_unit));
- if (brick->si_unit_y == si_unit)
- return;
-
- GWY_OBJECT_UNREF(brick->si_unit_y);
- g_object_ref(si_unit);
- brick->si_unit_y = si_unit;
+ _gwy_set_object_si_unit(si_unit, &brick->si_unit_y);
}
/**
@@ -1276,13 +1227,7 @@ gwy_brick_set_si_unit_z(GwyBrick *brick,
GwySIUnit *si_unit)
{
g_return_if_fail(GWY_IS_BRICK(brick));
- g_return_if_fail(GWY_IS_SI_UNIT(si_unit));
- if (brick->si_unit_z == si_unit)
- return;
-
- GWY_OBJECT_UNREF(brick->si_unit_z);
- g_object_ref(si_unit);
- brick->si_unit_z = si_unit;
+ _gwy_set_object_si_unit(si_unit, &brick->si_unit_z);
}
/**
@@ -1303,13 +1248,28 @@ gwy_brick_set_si_unit_w(GwyBrick *brick,
GwySIUnit *si_unit)
{
g_return_if_fail(GWY_IS_BRICK(brick));
- g_return_if_fail(GWY_IS_SI_UNIT(si_unit));
- if (brick->si_unit_w == si_unit)
- return;
+ _gwy_set_object_si_unit(si_unit, &brick->si_unit_w);
+}
- GWY_OBJECT_UNREF(brick->si_unit_w);
- g_object_ref(si_unit);
- brick->si_unit_w = si_unit;
+/**
+ * gwy_brick_copy_units:
+ * @brick: A data brick.
+ * @target: Target data brick.
+ *
+ * Sets lateral and value units of a data brick to match another data brick.
+ *
+ * Since: 2.49
+ **/
+void
+gwy_brick_copy_units(const GwyBrick *brick, GwyBrick *target)
+{
+ g_return_if_fail(GWY_IS_BRICK(brick));
+ g_return_if_fail(GWY_IS_BRICK(target));
+
+ _gwy_assign_si_unit(brick->si_unit_x, &target->si_unit_x);
+ _gwy_assign_si_unit(brick->si_unit_y, &target->si_unit_y);
+ _gwy_assign_si_unit(brick->si_unit_z, &target->si_unit_z);
+ _gwy_assign_si_unit(brick->si_unit_w, &target->si_unit_w);
}
/**
@@ -1337,8 +1297,8 @@ gwy_brick_get_value_format_x(GwyBrick *brick,
max = brick->xreal;
unit = brick->xreal/brick->xres;
return gwy_si_unit_get_format_with_resolution
- (gwy_brick_get_si_unit_x(brick),
- style, max, unit, format);
+ (gwy_brick_get_si_unit_x(brick),
+ style, max, unit, format);
}
/**
@@ -1366,8 +1326,8 @@ gwy_brick_get_value_format_y(GwyBrick *brick,
max = brick->yreal;
unit = brick->yreal/brick->yres;
return gwy_si_unit_get_format_with_resolution
- (gwy_brick_get_si_unit_y(brick),
- style, max, unit, format);
+ (gwy_brick_get_si_unit_y(brick),
+ style, max, unit, format);
}
/**
@@ -1395,8 +1355,8 @@ gwy_brick_get_value_format_z(GwyBrick *brick,
max = brick->zreal;
unit = brick->zreal/brick->zres;
return gwy_si_unit_get_format_with_resolution
- (gwy_brick_get_si_unit_z(brick),
- style, max, unit, format);
+ (gwy_brick_get_si_unit_z(brick),
+ style, max, unit, format);
}
@@ -1413,12 +1373,14 @@ gwy_brick_get_value_format_z(GwyBrick *brick,
gdouble
gwy_brick_get_min(GwyBrick *brick)
{
- gint i;
+ gint i, n;
gdouble min = G_MAXDOUBLE;
- for (i=0; i<(brick->xres * brick->yres * brick->zres); i++)
- {
- if (brick->data[i]<min) min = brick->data[i];
+ g_return_val_if_fail(GWY_IS_BRICK(brick), 0.0);
+ n = brick->xres * brick->yres * brick->zres;
+ for (i = 0; i < n; i++) {
+ if (brick->data[i] < min)
+ min = brick->data[i];
}
return min;
}
@@ -1436,12 +1398,14 @@ gwy_brick_get_min(GwyBrick *brick)
gdouble
gwy_brick_get_max(GwyBrick *brick)
{
- gint i;
+ gint i, n;
gdouble max = -G_MAXDOUBLE;
- for (i=0; i<(brick->xres * brick->yres * brick->zres); i++)
- {
- if (brick->data[i]>max) max = brick->data[i];
+ g_return_val_if_fail(GWY_IS_BRICK(brick), 0.0);
+ n = brick->xres * brick->yres * brick->zres;
+ for (i = 0; i < n; i++) {
+ if (brick->data[i] > max)
+ max = brick->data[i];
}
return max;
}
@@ -1889,10 +1853,11 @@ void
gwy_brick_add(GwyBrick *brick,
gdouble value)
{
- gint i;
+ gint i, n;
g_return_if_fail(GWY_IS_BRICK(brick));
- for (i = 0; i < (brick->xres*brick->yres*brick->zres); i++)
+ n = brick->xres * brick->yres * brick->zres;
+ for (i = 0; i < n; i++)
brick->data[i] += value;
}
@@ -1909,10 +1874,11 @@ void
gwy_brick_multiply(GwyBrick *brick,
gdouble value)
{
- gint i;
+ gint i, n;
g_return_if_fail(GWY_IS_BRICK(brick));
- for (i = 0; i < (brick->xres*brick->yres*brick->zres); i++)
+ n = brick->xres * brick->yres * brick->zres;
+ for (i = 0; i < n; i++)
brick->data[i] *= value;
}
@@ -1950,9 +1916,9 @@ gwy_brick_extract_plane(const GwyBrick *brick,
gint depth,
G_GNUC_UNUSED gboolean keep_offsets)
{
- gint col, row, lev;
+ gint col, row, lev, xres, yres, zres;
gdouble *bdata, *ddata;
- GwySIUnit *si_unit;
+ GwySIUnit *si_unit = NULL;
g_return_if_fail(GWY_IS_BRICK(brick));
@@ -1960,66 +1926,66 @@ gwy_brick_extract_plane(const GwyBrick *brick,
|| (width > 0 && height == -1 && depth > 0)
|| (width > 0 && height > 0 && depth == -1));
- g_return_if_fail(istart >= 0 && istart < brick->xres &&
- jstart >= 0 && jstart < brick->yres &&
- kstart >= 0 && kstart < brick->zres);
+ xres = brick->xres;
+ yres = brick->yres;
+ zres = brick->zres;
+ g_return_if_fail(istart >= 0 && istart < xres &&
+ jstart >= 0 && jstart < yres &&
+ kstart >= 0 && kstart < zres);
bdata = brick->data;
if (width == -1 && height > 0 && depth > 0) {
- g_return_if_fail((jstart + height) <= brick->yres);
- g_return_if_fail((kstart + depth) <= brick->zres);
+ g_return_if_fail((jstart + height) <= yres);
+ g_return_if_fail((kstart + depth) <= zres);
gwy_data_field_resample(target, height, depth, GWY_INTERPOLATION_NONE);
ddata = gwy_data_field_get_data(target);
gwy_data_field_set_xreal(target, brick->yreal);
gwy_data_field_set_yreal(target, brick->zreal);
- si_unit = gwy_brick_get_si_unit_y((GwyBrick *) brick);
+ si_unit = brick->si_unit_y;
col = istart;
for (row = 0; row < height; row++) {
for (lev = 0; lev < depth; lev++) {
- ddata[row + lev * height] =
- bdata[col + brick->xres * (row + jstart) +
- brick->xres * brick->yres * (lev + kstart)];
+ ddata[row + lev*height] =
+ bdata[col + xres*(row + jstart) + xres*yres*(lev + kstart)];
}
}
}
else if (width > 0 && height == -1 && depth > 0) {
- g_return_if_fail((istart + width) <= brick->xres);
- g_return_if_fail((kstart + depth) <= brick->zres);
+ g_return_if_fail((istart + width) <= xres);
+ g_return_if_fail((kstart + depth) <= zres);
gwy_data_field_resample(target, width, depth, GWY_INTERPOLATION_NONE);
ddata = gwy_data_field_get_data(target);
gwy_data_field_set_xreal(target, brick->xreal);
gwy_data_field_set_yreal(target, brick->zreal);
- si_unit = gwy_brick_get_si_unit_x((GwyBrick *) brick);
+ si_unit = brick->si_unit_x;
row = jstart;
for (col = 0; col < width; col++) {
for (lev = 0; lev < depth; lev++) {
- ddata[col + lev * width] =
- bdata[col + istart + brick->xres * row +
- brick->xres * brick->yres * (lev + kstart)];
+ ddata[col + lev*width] =
+ bdata[col + istart + xres*row + xres*yres*(lev + kstart)];
}
}
}
else if (width > 0 && height > 0 && depth == -1) {
- g_return_if_fail((istart + width) <= brick->xres);
- g_return_if_fail((jstart + height) <= brick->yres);
+ g_return_if_fail((istart + width) <= xres);
+ g_return_if_fail((jstart + height) <= yres);
gwy_data_field_resample(target, width, height, GWY_INTERPOLATION_NONE);
ddata = gwy_data_field_get_data(target);
gwy_data_field_set_xreal(target, brick->xreal);
gwy_data_field_set_yreal(target, brick->yreal);
- si_unit = gwy_brick_get_si_unit_x((GwyBrick *) brick);
+ si_unit = brick->si_unit_x;
lev = kstart;
for (col = 0; col < width; col++) {
for (row = 0; row < height; row++) {
- ddata[col + row * width] =
- bdata[col + istart + brick->xres * (row + jstart) +
- brick->xres * brick->yres * (lev)];
+ ddata[col + row*width] =
+ bdata[col + istart + xres*(row + jstart) + xres*yres*(lev)];
}
}
}
@@ -2027,14 +1993,8 @@ gwy_brick_extract_plane(const GwyBrick *brick,
g_return_if_reached();
}
- si_unit = gwy_si_unit_duplicate(si_unit);
- gwy_data_field_set_si_unit_xy(target, si_unit);
- g_object_unref(si_unit);
-
- si_unit = gwy_brick_get_si_unit_w((GwyBrick *) brick);
- si_unit = gwy_si_unit_duplicate(si_unit);
- gwy_data_field_set_si_unit_z(target, si_unit);
- g_object_unref(si_unit);
+ _gwy_assign_si_unit(si_unit, &target->si_unit_xy);
+ _gwy_assign_si_unit(brick->si_unit_w, &target->si_unit_z);
}
/**
@@ -2074,9 +2034,9 @@ gwy_brick_sum_plane(const GwyBrick *brick,
gint depth,
G_GNUC_UNUSED gboolean keep_offsets)
{
- gint col, row, lev;
+ gint col, row, lev, xres, yres, zres;
gdouble *bdata, *ddata;
- GwySIUnit *si_unit;
+ GwySIUnit *si_unit = NULL;
g_return_if_fail(GWY_IS_BRICK(brick));
@@ -2084,15 +2044,18 @@ gwy_brick_sum_plane(const GwyBrick *brick,
|| (width > 0 && height == -1 && depth > 0)
|| (width > 0 && height > 0 && depth == -1));
- g_return_if_fail(istart >=0 && istart < brick->xres
- && jstart >=0 && jstart < brick->yres
- && kstart >=0 && kstart < brick->zres);
+ xres = brick->xres;
+ yres = brick->yres;
+ zres = brick->zres;
+ g_return_if_fail(istart >=0 && istart < xres
+ && jstart >=0 && jstart < yres
+ && kstart >=0 && kstart < zres);
bdata = brick->data;
if (width == -1 && height > 0 && depth > 0) {
- g_return_if_fail((jstart+height) <= brick->yres);
- g_return_if_fail((kstart+depth) <= brick->zres);
+ g_return_if_fail((jstart+height) <= yres);
+ g_return_if_fail((kstart+depth) <= zres);
gwy_data_field_resample(target, height, depth, GWY_INTERPOLATION_NONE);
gwy_data_field_clear(target);
@@ -2100,11 +2063,12 @@ gwy_brick_sum_plane(const GwyBrick *brick,
gwy_data_field_set_xreal(target, brick->yreal);
gwy_data_field_set_yreal(target, brick->zreal);
+ si_unit = brick->si_unit_y;
for (row = 0; row < height; row++) {
for (lev = 0; lev < depth; lev++) {
- for (col = 0; col < brick->xres; col++) {
- gdouble bv = bdata[col + brick->xres*(row + jstart) + brick->xres*brick->yres*(lev + kstart)];
+ for (col = 0; col < xres; col++) {
+ gdouble bv = bdata[col + xres*(row + jstart) + xres*yres*(lev + kstart)];
ddata[row + lev*height] += bv;
}
}
@@ -2112,8 +2076,8 @@ gwy_brick_sum_plane(const GwyBrick *brick,
}
if (width > 0 && height == -1 && depth > 0) {
- g_return_if_fail((istart+width) <= brick->xres);
- g_return_if_fail((kstart+depth) <= brick->zres);
+ g_return_if_fail((istart+width) <= xres);
+ g_return_if_fail((kstart+depth) <= zres);
gwy_data_field_resample(target, width, depth, GWY_INTERPOLATION_NONE);
gwy_data_field_clear(target);
@@ -2121,11 +2085,12 @@ gwy_brick_sum_plane(const GwyBrick *brick,
gwy_data_field_set_xreal(target, brick->xreal);
gwy_data_field_set_yreal(target, brick->zreal);
+ si_unit = brick->si_unit_x;
for (col = 0; col < width; col++) {
for (lev = 0; lev < depth; lev++) {
- for (row = 0; row < brick->yres; row++) {
- gdouble bv = bdata[col + istart + brick->xres*row + brick->xres*brick->yres*(lev + kstart)];
+ for (row = 0; row < yres; row++) {
+ gdouble bv = bdata[col + istart + xres*row + xres*yres*(lev + kstart)];
ddata[col + lev*width] += bv;
}
}
@@ -2133,8 +2098,8 @@ gwy_brick_sum_plane(const GwyBrick *brick,
}
if (width > 0 && height > 0 && depth == -1) {
- g_return_if_fail((istart+width) <= brick->xres);
- g_return_if_fail((jstart+height) <= brick->yres);
+ g_return_if_fail((istart+width) <= xres);
+ g_return_if_fail((jstart+height) <= yres);
gwy_data_field_resample(target, width, height, GWY_INTERPOLATION_NONE);
gwy_data_field_clear(target);
@@ -2142,22 +2107,20 @@ gwy_brick_sum_plane(const GwyBrick *brick,
gwy_data_field_set_xreal(target, brick->xreal);
gwy_data_field_set_yreal(target, brick->yreal);
+ si_unit = brick->si_unit_x;
for (col = 0; col < width; col++) {
for (row = 0; row < height; row++) {
- for (lev = 0; lev < brick->zres; lev++) {
- gdouble bv = bdata[col + istart + brick->xres*(row + jstart) + brick->xres*brick->yres*(lev)];
+ for (lev = 0; lev < zres; lev++) {
+ gdouble bv = bdata[col + istart + xres*(row + jstart) + xres*yres*(lev)];
ddata[col + row*width] += bv;
}
}
}
}
- si_unit = gwy_brick_get_si_unit_x((GwyBrick *)brick);
- gwy_data_field_set_si_unit_xy(target, si_unit);
-
- si_unit = gwy_brick_get_si_unit_w((GwyBrick *)brick);
- gwy_data_field_set_si_unit_z(target, si_unit);
+ _gwy_assign_si_unit(si_unit, &target->si_unit_xy);
+ _gwy_assign_si_unit(brick->si_unit_w, &target->si_unit_z);
}
/**
@@ -2197,9 +2160,9 @@ gwy_brick_min_plane(const GwyBrick *brick,
gint depth,
G_GNUC_UNUSED gboolean keep_offsets)
{
- gint col, row, lev;
+ gint col, row, lev, xres, yres, zres;
gdouble *bdata, *ddata;
- GwySIUnit *si_unit;
+ GwySIUnit *si_unit = NULL;
g_return_if_fail(GWY_IS_BRICK(brick));
@@ -2207,16 +2170,19 @@ gwy_brick_min_plane(const GwyBrick *brick,
|| (width > 0 && height == -1 && depth > 0)
|| (width > 0 && height > 0 && depth == -1));
- g_return_if_fail(istart >=0 && istart < brick->xres
- && jstart >=0 && jstart < brick->yres
- && kstart >=0 && kstart < brick->zres);
+ xres = brick->xres;
+ yres = brick->yres;
+ zres = brick->zres;
+ g_return_if_fail(istart >=0 && istart < xres
+ && jstart >=0 && jstart < yres
+ && kstart >=0 && kstart < zres);
bdata = brick->data;
gwy_data_field_clear(target);
if (width == -1 && height > 0 && depth > 0) {
- g_return_if_fail((jstart+height) <= brick->yres);
- g_return_if_fail((kstart+depth) <= brick->zres);
+ g_return_if_fail((jstart+height) <= yres);
+ g_return_if_fail((kstart+depth) <= zres);
gwy_data_field_resample(target, height, depth, GWY_INTERPOLATION_NONE);
gwy_data_field_fill(target, G_MAXDOUBLE);
@@ -2224,11 +2190,12 @@ gwy_brick_min_plane(const GwyBrick *brick,
gwy_data_field_set_xreal(target, brick->yreal);
gwy_data_field_set_yreal(target, brick->zreal);
+ si_unit = brick->si_unit_y;
for (row = 0; row < height; row++) {
for (lev = 0; lev < depth; lev++) {
- for (col = 0; col < brick->xres; col++) {
- gdouble bv = bdata[col + brick->xres*(row + jstart) + brick->xres*brick->yres*(lev + kstart)];
+ for (col = 0; col < xres; col++) {
+ gdouble bv = bdata[col + xres*(row + jstart) + xres*yres*(lev + kstart)];
gdouble fv = ddata[row + lev*height];
ddata[row + lev*height] = MIN(bv, fv);
}
@@ -2237,8 +2204,8 @@ gwy_brick_min_plane(const GwyBrick *brick,
}
if (width > 0 && height == -1 && depth > 0) {
- g_return_if_fail((istart+width) <= brick->xres);
- g_return_if_fail((kstart+depth) <= brick->zres);
+ g_return_if_fail((istart+width) <= xres);
+ g_return_if_fail((kstart+depth) <= zres);
gwy_data_field_resample(target, width, depth, GWY_INTERPOLATION_NONE);
gwy_data_field_fill(target, G_MAXDOUBLE);
@@ -2246,11 +2213,12 @@ gwy_brick_min_plane(const GwyBrick *brick,
gwy_data_field_set_xreal(target, brick->xreal);
gwy_data_field_set_yreal(target, brick->zreal);
+ si_unit = brick->si_unit_x;
for (col = 0; col < width; col++) {
for (lev = 0; lev < depth; lev++) {
- for (row = 0; row < brick->yres; row++) {
- gdouble bv = bdata[col + istart + brick->xres*row + brick->xres*brick->yres*(lev + kstart)];
+ for (row = 0; row < yres; row++) {
+ gdouble bv = bdata[col + istart + xres*row + xres*yres*(lev + kstart)];
gdouble fv = ddata[col + lev*width];
ddata[col + lev*width] = MIN(bv, fv);
}
@@ -2259,8 +2227,8 @@ gwy_brick_min_plane(const GwyBrick *brick,
}
if (width > 0 && height > 0 && depth == -1) {
- g_return_if_fail((istart+width) <= brick->xres);
- g_return_if_fail((jstart+height) <= brick->yres);
+ g_return_if_fail((istart+width) <= xres);
+ g_return_if_fail((jstart+height) <= yres);
gwy_data_field_resample(target, width, height, GWY_INTERPOLATION_NONE);
gwy_data_field_fill(target, G_MAXDOUBLE);
@@ -2268,11 +2236,12 @@ gwy_brick_min_plane(const GwyBrick *brick,
gwy_data_field_set_xreal(target, brick->xreal);
gwy_data_field_set_yreal(target, brick->yreal);
+ si_unit = brick->si_unit_x;
for (col = 0; col < width; col++) {
for (row = 0; row < height; row++) {
- for (lev = 0; lev < brick->zres; lev++) {
- gdouble bv = bdata[col + istart + brick->xres*(row + jstart) + brick->xres*brick->yres*(lev)];
+ for (lev = 0; lev < zres; lev++) {
+ gdouble bv = bdata[col + istart + xres*(row + jstart) + xres*yres*(lev)];
gdouble fv = ddata[col + row*width];
ddata[col + row*width] = MIN(bv, fv);
}
@@ -2280,11 +2249,8 @@ gwy_brick_min_plane(const GwyBrick *brick,
}
}
- si_unit = gwy_brick_get_si_unit_x((GwyBrick *)brick);
- gwy_data_field_set_si_unit_xy(target, si_unit);
-
- si_unit = gwy_brick_get_si_unit_w((GwyBrick *)brick);
- gwy_data_field_set_si_unit_z(target, si_unit);
+ _gwy_assign_si_unit(si_unit, &target->si_unit_xy);
+ _gwy_assign_si_unit(brick->si_unit_w, &target->si_unit_z);
}
/**
@@ -2324,9 +2290,9 @@ gwy_brick_max_plane(const GwyBrick *brick,
gint depth,
G_GNUC_UNUSED gboolean keep_offsets)
{
- gint col, row, lev;
+ gint col, row, lev, xres, yres, zres;
gdouble *bdata, *ddata;
- GwySIUnit *si_unit;
+ GwySIUnit *si_unit = NULL;
g_return_if_fail(GWY_IS_BRICK(brick));
@@ -2334,16 +2300,19 @@ gwy_brick_max_plane(const GwyBrick *brick,
|| (width > 0 && height == -1 && depth > 0)
|| (width > 0 && height > 0 && depth == -1));
- g_return_if_fail(istart >=0 && istart < brick->xres
- && jstart >=0 && jstart < brick->yres
- && kstart >=0 && kstart < brick->zres);
+ xres = brick->xres;
+ yres = brick->yres;
+ zres = brick->zres;
+ g_return_if_fail(istart >=0 && istart < xres
+ && jstart >=0 && jstart < yres
+ && kstart >=0 && kstart < zres);
bdata = brick->data;
gwy_data_field_clear(target);
if (width == -1 && height > 0 && depth > 0) {
- g_return_if_fail((jstart+height) <= brick->yres);
- g_return_if_fail((kstart+depth) <= brick->zres);
+ g_return_if_fail((jstart+height) <= yres);
+ g_return_if_fail((kstart+depth) <= zres);
gwy_data_field_resample(target, height, depth, GWY_INTERPOLATION_NONE);
gwy_data_field_fill(target, G_MINDOUBLE);
@@ -2351,11 +2320,12 @@ gwy_brick_max_plane(const GwyBrick *brick,
gwy_data_field_set_xreal(target, brick->yreal);
gwy_data_field_set_yreal(target, brick->zreal);
+ si_unit = brick->si_unit_y;
for (row = 0; row < height; row++) {
for (lev = 0; lev < depth; lev++) {
- for (col = 0; col < brick->xres; col++) {
- gdouble bv = bdata[col + brick->xres*(row + jstart) + brick->xres*brick->yres*(lev + kstart)];
+ for (col = 0; col < xres; col++) {
+ gdouble bv = bdata[col + xres*(row + jstart) + xres*yres*(lev + kstart)];
gdouble fv = ddata[row + lev*height];
ddata[row + lev*height] = MAX(bv, fv);
}
@@ -2364,8 +2334,8 @@ gwy_brick_max_plane(const GwyBrick *brick,
}
if (width > 0 && height == -1 && depth > 0) {
- g_return_if_fail((istart+width) <= brick->xres);
- g_return_if_fail((kstart+depth) <= brick->zres);
+ g_return_if_fail((istart+width) <= xres);
+ g_return_if_fail((kstart+depth) <= zres);
gwy_data_field_resample(target, width, depth, GWY_INTERPOLATION_NONE);
gwy_data_field_fill(target, G_MINDOUBLE);
@@ -2373,11 +2343,12 @@ gwy_brick_max_plane(const GwyBrick *brick,
gwy_data_field_set_xreal(target, brick->xreal);
gwy_data_field_set_yreal(target, brick->zreal);
+ si_unit = brick->si_unit_x;
for (col = 0; col < width; col++) {
for (lev = 0; lev < depth; lev++) {
- for (row = 0; row < brick->yres; row++) {
- gdouble bv = bdata[col + istart + brick->xres*row + brick->xres*brick->yres*(lev + kstart)];
+ for (row = 0; row < yres; row++) {
+ gdouble bv = bdata[col + istart + xres*row + xres*yres*(lev + kstart)];
gdouble fv = ddata[col + lev*width];
ddata[col + lev*width] = MAX(bv, fv);
}
@@ -2386,8 +2357,8 @@ gwy_brick_max_plane(const GwyBrick *brick,
}
if (width > 0 && height > 0 && depth == -1) {
- g_return_if_fail((istart+width) <= brick->xres);
- g_return_if_fail((jstart+height) <= brick->yres);
+ g_return_if_fail((istart+width) <= xres);
+ g_return_if_fail((jstart+height) <= yres);
gwy_data_field_resample(target, width, height, GWY_INTERPOLATION_NONE);
gwy_data_field_fill(target, G_MINDOUBLE);
@@ -2395,11 +2366,12 @@ gwy_brick_max_plane(const GwyBrick *brick,
gwy_data_field_set_xreal(target, brick->xreal);
gwy_data_field_set_yreal(target, brick->yreal);
+ si_unit = brick->si_unit_x;
for (col = 0; col < width; col++) {
for (row = 0; row < height; row++) {
- for (lev = 0; lev < brick->zres; lev++) {
- gdouble bv = bdata[col + istart + brick->xres*(row + jstart) + brick->xres*brick->yres*(lev)];
+ for (lev = 0; lev < zres; lev++) {
+ gdouble bv = bdata[col + istart + xres*(row + jstart) + xres*yres*(lev)];
gdouble fv = ddata[col + row*width];
ddata[col + row*width] = MAX(bv, fv);
}
@@ -2407,11 +2379,8 @@ gwy_brick_max_plane(const GwyBrick *brick,
}
}
- si_unit = gwy_brick_get_si_unit_x((GwyBrick *)brick);
- gwy_data_field_set_si_unit_xy(target, si_unit);
-
- si_unit = gwy_brick_get_si_unit_w((GwyBrick *)brick);
- gwy_data_field_set_si_unit_z(target, si_unit);
+ _gwy_assign_si_unit(si_unit, &target->si_unit_xy);
+ _gwy_assign_si_unit(brick->si_unit_w, &target->si_unit_z);
}
/**
@@ -2451,10 +2420,10 @@ gwy_brick_minpos_plane(const GwyBrick *brick,
gint depth,
G_GNUC_UNUSED gboolean keep_offsets)
{
- gint col, row, lev;
+ gint col, row, lev, xres, yres, zres;
gdouble *bdata, *ddata;
gint minpos;
- GwySIUnit *si_unit;
+ GwySIUnit *si_unit = NULL;
GwyDataLine *calibration;
gdouble *caldata;
@@ -2464,16 +2433,19 @@ gwy_brick_minpos_plane(const GwyBrick *brick,
|| (width > 0 && height == -1 && depth > 0)
|| (width > 0 && height > 0 && depth == -1));
- g_return_if_fail(istart >=0 && istart < brick->xres
- && jstart >=0 && jstart < brick->yres
- && kstart >=0 && kstart < brick->zres);
+ xres = brick->xres;
+ yres = brick->yres;
+ zres = brick->zres;
+ g_return_if_fail(istart >=0 && istart < xres
+ && jstart >=0 && jstart < yres
+ && kstart >=0 && kstart < zres);
bdata = brick->data;
gwy_data_field_clear(target);
if (width == -1 && height > 0 && depth > 0) {
- g_return_if_fail((jstart+height) <= brick->yres);
- g_return_if_fail((kstart+depth) <= brick->zres);
+ g_return_if_fail((jstart+height) <= yres);
+ g_return_if_fail((kstart+depth) <= zres);
gwy_data_field_resample(target, height, depth, GWY_INTERPOLATION_NONE);
gwy_data_field_fill(target, G_MAXDOUBLE);
@@ -2481,12 +2453,13 @@ gwy_brick_minpos_plane(const GwyBrick *brick,
gwy_data_field_set_xreal(target, brick->yreal);
gwy_data_field_set_yreal(target, brick->zreal);
+ si_unit = brick->si_unit_y;
for (row = 0; row < height; row++) {
for (lev = 0; lev < depth; lev++) {
minpos = 0;
- for (col = 0; col < brick->xres; col++) {
- gdouble bv = bdata[col + brick->xres*(row + jstart) + brick->xres*brick->yres*(lev + kstart)];
+ for (col = 0; col < xres; col++) {
+ gdouble bv = bdata[col + xres*(row + jstart) + xres*yres*(lev + kstart)];
gdouble fv = ddata[row + lev*height];
if (bv < fv)
minpos = col;
@@ -2500,8 +2473,8 @@ gwy_brick_minpos_plane(const GwyBrick *brick,
}
if (width > 0 && height == -1 && depth > 0) {
- g_return_if_fail((istart+width) <= brick->xres);
- g_return_if_fail((kstart+depth) <= brick->zres);
+ g_return_if_fail((istart+width) <= xres);
+ g_return_if_fail((kstart+depth) <= zres);
gwy_data_field_resample(target, width, depth, GWY_INTERPOLATION_NONE);
gwy_data_field_fill(target, G_MAXDOUBLE);
@@ -2509,12 +2482,13 @@ gwy_brick_minpos_plane(const GwyBrick *brick,
gwy_data_field_set_xreal(target, brick->xreal);
gwy_data_field_set_yreal(target, brick->zreal);
+ si_unit = brick->si_unit_x;
for (col = 0; col < width; col++) {
for (lev = 0; lev < depth; lev++) {
minpos = 0;
- for (row = 0; row < brick->yres; row++) {
- gdouble bv = bdata[col + istart + brick->xres*row + brick->xres*brick->yres*(lev + kstart)];
+ for (row = 0; row < yres; row++) {
+ gdouble bv = bdata[col + istart + xres*row + xres*yres*(lev + kstart)];
gdouble fv = ddata[col + lev*width];
if (bv < fv)
minpos = row;
@@ -2528,8 +2502,8 @@ gwy_brick_minpos_plane(const GwyBrick *brick,
}
if (width > 0 && height > 0 && depth == -1) {
- g_return_if_fail((istart+width) <= brick->xres);
- g_return_if_fail((jstart+height) <= brick->yres);
+ g_return_if_fail((istart+width) <= xres);
+ g_return_if_fail((jstart+height) <= yres);
gwy_data_field_resample(target, width, height, GWY_INTERPOLATION_NONE);
gwy_data_field_fill(target, G_MAXDOUBLE);
@@ -2537,6 +2511,7 @@ gwy_brick_minpos_plane(const GwyBrick *brick,
gwy_data_field_set_xreal(target, brick->xreal);
gwy_data_field_set_yreal(target, brick->yreal);
+ si_unit = brick->si_unit_x;
calibration = gwy_brick_get_zcalibration((GwyBrick *)brick);
if (calibration) {
@@ -2550,8 +2525,8 @@ gwy_brick_minpos_plane(const GwyBrick *brick,
for (col = 0; col < width; col++) {
for (row = 0; row < height; row++) {
minpos = 0;
- for (lev = 0; lev < brick->zres; lev++) {
- gdouble bv = bdata[col + istart + brick->xres*(row + jstart) + brick->xres*brick->yres*(lev)];
+ for (lev = 0; lev < zres; lev++) {
+ gdouble bv = bdata[col + istart + xres*(row + jstart) + xres*yres*(lev)];
gdouble fv = ddata[col + row*width];
if (bv < fv)
minpos = lev;
@@ -2565,8 +2540,9 @@ gwy_brick_minpos_plane(const GwyBrick *brick,
}
}
- si_unit = gwy_brick_get_si_unit_x((GwyBrick *)brick);
- gwy_data_field_set_si_unit_xy(target, si_unit);
+ _gwy_assign_si_unit(si_unit, &target->si_unit_xy);
+ /* The position is an integer. Whatever... */
+ _gwy_assign_si_unit(NULL, &target->si_unit_z);
}
/**
@@ -2606,10 +2582,10 @@ gwy_brick_maxpos_plane(const GwyBrick *brick,
gint depth,
G_GNUC_UNUSED gboolean keep_offsets)
{
- gint col, row, lev;
+ gint col, row, lev, xres, yres, zres;
gdouble *bdata, *ddata;
gint maxpos;
- GwySIUnit *si_unit;
+ GwySIUnit *si_unit = NULL;
GwyDataLine *calibration;
gdouble *caldata;
@@ -2619,16 +2595,19 @@ gwy_brick_maxpos_plane(const GwyBrick *brick,
|| (width > 0 && height == -1 && depth > 0)
|| (width > 0 && height > 0 && depth == -1));
- g_return_if_fail(istart >=0 && istart < brick->xres
- && jstart >=0 && jstart < brick->yres
- && kstart >=0 && kstart < brick->zres);
+ xres = brick->xres;
+ yres = brick->yres;
+ zres = brick->zres;
+ g_return_if_fail(istart >=0 && istart < xres
+ && jstart >=0 && jstart < yres
+ && kstart >=0 && kstart < zres);
bdata = brick->data;
gwy_data_field_clear(target);
if (width == -1 && height > 0 && depth > 0) {
- g_return_if_fail((jstart+height) <= brick->yres);
- g_return_if_fail((kstart+depth) <= brick->zres);
+ g_return_if_fail((jstart+height) <= yres);
+ g_return_if_fail((kstart+depth) <= zres);
gwy_data_field_resample(target, height, depth, GWY_INTERPOLATION_NONE);
gwy_data_field_fill(target, G_MINDOUBLE);
@@ -2636,12 +2615,13 @@ gwy_brick_maxpos_plane(const GwyBrick *brick,
gwy_data_field_set_xreal(target, brick->yreal);
gwy_data_field_set_yreal(target, brick->zreal);
+ si_unit = brick->si_unit_y;
for (row = 0; row < height; row++) {
for (lev = 0; lev < depth; lev++) {
maxpos = 0;
- for (col = 0; col < brick->xres; col++) {
- gdouble bv = bdata[col + brick->xres*(row + jstart) + brick->xres*brick->yres*(lev + kstart)];
+ for (col = 0; col < xres; col++) {
+ gdouble bv = bdata[col + xres*(row + jstart) + xres*yres*(lev + kstart)];
gdouble fv = ddata[row + lev*height];
if (bv > fv)
maxpos = col;
@@ -2655,8 +2635,8 @@ gwy_brick_maxpos_plane(const GwyBrick *brick,
}
if (width > 0 && height == -1 && depth > 0) {
- g_return_if_fail((istart+width) <= brick->xres);
- g_return_if_fail((kstart+depth) <= brick->zres);
+ g_return_if_fail((istart+width) <= xres);
+ g_return_if_fail((kstart+depth) <= zres);
gwy_data_field_resample(target, width, depth, GWY_INTERPOLATION_NONE);
gwy_data_field_fill(target, G_MINDOUBLE);
@@ -2664,12 +2644,13 @@ gwy_brick_maxpos_plane(const GwyBrick *brick,
gwy_data_field_set_xreal(target, brick->xreal);
gwy_data_field_set_yreal(target, brick->zreal);
+ si_unit = brick->si_unit_x;
for (col = 0; col < width; col++) {
for (lev = 0; lev < depth; lev++) {
maxpos = 0;
- for (row = 0; row < brick->yres; row++) {
- gdouble bv = bdata[col + istart + brick->xres*row + brick->xres*brick->yres*(lev + kstart)];
+ for (row = 0; row < yres; row++) {
+ gdouble bv = bdata[col + istart + xres*row + xres*yres*(lev + kstart)];
gdouble fv = ddata[col + lev*width];
if (bv > fv)
maxpos = row;
@@ -2683,8 +2664,8 @@ gwy_brick_maxpos_plane(const GwyBrick *brick,
}
if (width > 0 && height > 0 && depth == -1) {
- g_return_if_fail((istart+width) <= brick->xres);
- g_return_if_fail((jstart+height) <= brick->yres);
+ g_return_if_fail((istart+width) <= xres);
+ g_return_if_fail((jstart+height) <= yres);
gwy_data_field_resample(target, width, height, GWY_INTERPOLATION_NONE);
gwy_data_field_fill(target, G_MINDOUBLE);
@@ -2692,6 +2673,7 @@ gwy_brick_maxpos_plane(const GwyBrick *brick,
gwy_data_field_set_xreal(target, brick->xreal);
gwy_data_field_set_yreal(target, brick->yreal);
+ si_unit = brick->si_unit_x;
calibration = gwy_brick_get_zcalibration((GwyBrick *)brick);
if (calibration) {
@@ -2705,8 +2687,8 @@ gwy_brick_maxpos_plane(const GwyBrick *brick,
for (col = 0; col < width; col++) {
for (row = 0; row < height; row++) {
maxpos = 0;
- for (lev = 0; lev < brick->zres; lev++) {
- gdouble bv = bdata[col + istart + brick->xres*(row + jstart) + brick->xres*brick->yres*(lev)];
+ for (lev = 0; lev < zres; lev++) {
+ gdouble bv = bdata[col + istart + xres*(row + jstart) + xres*yres*(lev)];
gdouble fv = ddata[col + row*width];
if (bv > fv)
maxpos = lev;
@@ -2720,8 +2702,9 @@ gwy_brick_maxpos_plane(const GwyBrick *brick,
}
}
- si_unit = gwy_brick_get_si_unit_x((GwyBrick *)brick);
- gwy_data_field_set_si_unit_xy(target, si_unit);
+ _gwy_assign_si_unit(si_unit, &target->si_unit_xy);
+ /* The position is an integer. Whatever... */
+ _gwy_assign_si_unit(NULL, &target->si_unit_z);
}
/**
@@ -2761,9 +2744,8 @@ gwy_brick_mean_plane(const GwyBrick *brick,
gint depth,
G_GNUC_UNUSED gboolean keep_offsets)
{
- gint col, row, lev;
+ gint col, row, lev, xres, yres, zres;
gdouble *ddata;
- GwySIUnit *si_unit;
g_return_if_fail(GWY_IS_BRICK(brick));
@@ -2771,55 +2753,52 @@ gwy_brick_mean_plane(const GwyBrick *brick,
|| (width > 0 && height == -1 && depth > 0)
|| (width > 0 && height > 0 && depth == -1));
- g_return_if_fail(istart >=0 && istart < brick->xres
- && jstart >=0 && jstart < brick->yres
- && kstart >=0 && kstart < brick->zres);
+ xres = brick->xres;
+ yres = brick->yres;
+ zres = brick->zres;
+ g_return_if_fail(istart >=0 && istart < xres
+ && jstart >=0 && jstart < yres
+ && kstart >=0 && kstart < zres);
gwy_brick_sum_plane(brick, target,
istart, jstart, kstart, width, height, depth,
keep_offsets);
if (width == -1 && height > 0 && depth > 0) {
- g_return_if_fail((jstart+height) <= brick->yres);
- g_return_if_fail((kstart+depth) <= brick->zres);
+ g_return_if_fail((jstart+height) <= yres);
+ g_return_if_fail((kstart+depth) <= zres);
ddata = gwy_data_field_get_data(target);
for (row = 0; row < height; row++) {
for (lev = 0; lev < depth; lev++) {
- ddata[row + lev*height] /= brick->xres;
+ ddata[row + lev*height] /= xres;
}
}
}
if (width > 0 && height == -1 && depth > 0) {
- g_return_if_fail((istart+width) <= brick->xres);
- g_return_if_fail((kstart+depth) <= brick->zres);
+ g_return_if_fail((istart+width) <= xres);
+ g_return_if_fail((kstart+depth) <= zres);
ddata = gwy_data_field_get_data(target);
for (col = 0; col < width; col++) {
for (lev = 0; lev < depth; lev++) {
- ddata[col + lev*width] /= brick->yres;
+ ddata[col + lev*width] /= yres;
}
}
}
if (width > 0 && height > 0 && depth == -1) {
- g_return_if_fail((istart+width) <= brick->xres);
- g_return_if_fail((jstart+height) <= brick->yres);
+ g_return_if_fail((istart+width) <= xres);
+ g_return_if_fail((jstart+height) <= yres);
ddata = gwy_data_field_get_data(target);
for (col = 0; col < width; col++) {
for (row = 0; row < height; row++) {
- ddata[col + row*width] /= brick->zres;
+ ddata[col + row*width] /= zres;
}
}
}
-
- si_unit = gwy_brick_get_si_unit_x((GwyBrick *)brick);
- gwy_data_field_set_si_unit_xy(target, si_unit);
-
- si_unit = gwy_brick_get_si_unit_w((GwyBrick *)brick);
- gwy_data_field_set_si_unit_z(target, si_unit);
}
/**
@@ -2859,10 +2838,10 @@ gwy_brick_rms_plane(const GwyBrick *brick,
gint depth,
G_GNUC_UNUSED gboolean keep_offsets)
{
- gint col, row, lev;
+ gint col, row, lev, xres, yres, zres;
gdouble *bdata, *ddata, *mdata;
GwyDataField *meanfield;
- GwySIUnit *si_unit;
+ GwySIUnit *si_unit = NULL;
g_return_if_fail(GWY_IS_BRICK(brick));
@@ -2870,9 +2849,12 @@ gwy_brick_rms_plane(const GwyBrick *brick,
|| (width > 0 && height == -1 && depth > 0)
|| (width > 0 && height > 0 && depth == -1));
- g_return_if_fail(istart >=0 && istart < brick->xres
- && jstart >=0 && jstart < brick->yres
- && kstart >=0 && kstart < brick->zres);
+ xres = brick->xres;
+ yres = brick->yres;
+ zres = brick->zres;
+ g_return_if_fail(istart >= 0 && istart < xres
+ && jstart >= 0 && jstart < yres
+ && kstart >= 0 && kstart < zres);
meanfield = gwy_data_field_new(1, 1, 1.0, 1.0, FALSE);
gwy_brick_mean_plane(brick, meanfield,
@@ -2882,8 +2864,8 @@ gwy_brick_rms_plane(const GwyBrick *brick,
bdata = brick->data;
if (width == -1 && height > 0 && depth > 0) {
- g_return_if_fail((jstart+height) <= brick->yres);
- g_return_if_fail((kstart+depth) <= brick->zres);
+ g_return_if_fail((jstart+height) <= yres);
+ g_return_if_fail((kstart+depth) <= zres);
gwy_data_field_resample(target, height, depth, GWY_INTERPOLATION_NONE);
gwy_data_field_clear(target);
@@ -2892,11 +2874,12 @@ gwy_brick_rms_plane(const GwyBrick *brick,
gwy_data_field_set_xreal(target, brick->yreal);
gwy_data_field_set_yreal(target, brick->zreal);
+ si_unit = brick->si_unit_y;
for (row = 0; row < height; row++) {
for (lev = 0; lev < depth; lev++) {
- for (col = 0; col < brick->xres; col++) {
- gdouble bv = bdata[col + brick->xres*(row + jstart) + brick->xres*brick->yres*(lev + kstart)];
+ for (col = 0; col < xres; col++) {
+ gdouble bv = bdata[col + xres*(row + jstart) + xres*yres*(lev + kstart)];
gdouble mv = mdata[row + lev*height];
ddata[row + lev*height] += (bv - mv)*(bv - mv);
}
@@ -2905,15 +2888,15 @@ gwy_brick_rms_plane(const GwyBrick *brick,
for (row = 0; row < height; row++) {
for (lev = 0; lev < depth; lev++) {
- ddata[row + lev*height] /= brick->xres;
+ ddata[row + lev*height] /= xres;
ddata[row + lev*height] = sqrt(ddata[row + lev*height]);
}
}
}
if (width > 0 && height == -1 && depth > 0) {
- g_return_if_fail((istart+width) <= brick->xres);
- g_return_if_fail((kstart+depth) <= brick->zres);
+ g_return_if_fail((istart+width) <= xres);
+ g_return_if_fail((kstart+depth) <= zres);
gwy_data_field_resample(target, width, depth, GWY_INTERPOLATION_NONE);
gwy_data_field_clear(target);
@@ -2922,11 +2905,12 @@ gwy_brick_rms_plane(const GwyBrick *brick,
gwy_data_field_set_xreal(target, brick->xreal);
gwy_data_field_set_yreal(target, brick->zreal);
+ si_unit = brick->si_unit_x;
for (col = 0; col < width; col++) {
for (lev = 0; lev < depth; lev++) {
- for (row = 0; row < brick->yres; row++) {
- gdouble bv = bdata[col + istart + brick->xres*row + brick->xres*brick->yres*(lev + kstart)];
+ for (row = 0; row < yres; row++) {
+ gdouble bv = bdata[col + istart + xres*row + xres*yres*(lev + kstart)];
gdouble mv = mdata[col + lev*width];
ddata[col + lev*width] += (bv - mv)*(bv - mv);
}
@@ -2935,15 +2919,15 @@ gwy_brick_rms_plane(const GwyBrick *brick,
for (col = 0; col < width; col++) {
for (lev = 0; lev < depth; lev++) {
- ddata[col + lev*width] /= brick->yres;
+ ddata[col + lev*width] /= yres;
ddata[col + lev*width] = sqrt(ddata[col + lev*width]);
}
}
}
if (width > 0 && height > 0 && depth == -1) {
- g_return_if_fail((istart+width) <= brick->xres);
- g_return_if_fail((jstart+height) <= brick->yres);
+ g_return_if_fail((istart+width) <= xres);
+ g_return_if_fail((jstart+height) <= yres);
gwy_data_field_resample(target, width, height, GWY_INTERPOLATION_NONE);
gwy_data_field_clear(target);
@@ -2952,11 +2936,12 @@ gwy_brick_rms_plane(const GwyBrick *brick,
gwy_data_field_set_xreal(target, brick->xreal);
gwy_data_field_set_yreal(target, brick->yreal);
+ si_unit = brick->si_unit_x;
for (col = 0; col < width; col++) {
for (row = 0; row < height; row++) {
- for (lev = 0; lev < brick->zres; lev++) {
- gdouble bv = bdata[col + istart + brick->xres*(row + jstart) + brick->xres*brick->yres*(lev)];
+ for (lev = 0; lev < zres; lev++) {
+ gdouble bv = bdata[col + istart + xres*(row + jstart) + xres*yres*(lev)];
gdouble mv = mdata[col + row*width];
ddata[col + row*width] += (bv - mv)*(bv - mv);
}
@@ -2965,7 +2950,7 @@ gwy_brick_rms_plane(const GwyBrick *brick,
for (col = 0; col < width; col++) {
for (row = 0; row < height; row++) {
- ddata[col + row*width] /= brick->zres;
+ ddata[col + row*width] /= zres;
ddata[col + row*width] = sqrt(ddata[col + row*width]);
}
}
@@ -2973,11 +2958,8 @@ gwy_brick_rms_plane(const GwyBrick *brick,
g_object_unref(meanfield);
- si_unit = gwy_brick_get_si_unit_x((GwyBrick *)brick);
- gwy_data_field_set_si_unit_xy(target, si_unit);
-
- si_unit = gwy_brick_get_si_unit_w((GwyBrick *)brick);
- gwy_data_field_set_si_unit_z(target, si_unit);
+ _gwy_assign_si_unit(si_unit, &target->si_unit_xy);
+ _gwy_assign_si_unit(brick->si_unit_w, &target->si_unit_z);
}
/**
@@ -3006,121 +2988,93 @@ gwy_brick_extract_line(const GwyBrick *brick, GwyDataLine *target,
gint iend, gint jend, gint kend,
G_GNUC_UNUSED gboolean keep_offsets)
{
- gint col, row, lev;
+ gint col, row, lev, xres, yres, zres;
gdouble *bdata, *ddata;
- GwySIUnit *si_unit;
+ GwySIUnit *si_unit = NULL;
g_return_if_fail(GWY_IS_BRICK(brick));
-
- g_return_if_fail(istart >= 0 && istart <= brick->xres
- && jstart >= 0 && jstart <= brick->yres
- && kstart >= 0 && kstart <= brick->zres
- && iend >= 0 && iend <= brick->xres
- && jend >= 0 && jend <= brick->yres
- && kend >= 0 && kend <= brick->zres);
+ xres = brick->xres;
+ yres = brick->yres;
+ zres = brick->zres;
+ g_return_if_fail(istart >= 0 && istart <= xres
+ && jstart >= 0 && jstart <= yres
+ && kstart >= 0 && kstart <= zres
+ && iend >= 0 && iend <= xres
+ && jend >= 0 && jend <= yres
+ && kend >= 0 && kend <= zres);
bdata = brick->data;
if ((jstart == jend) && (kstart == kend)) {
- gwy_data_line_resample(target, abs(iend - istart),
+ gwy_data_line_resample(target, ABS(iend - istart),
GWY_INTERPOLATION_NONE);
ddata = gwy_data_line_get_data(target);
- si_unit = gwy_brick_get_si_unit_x((GwyBrick *) brick);
+ si_unit = brick->si_unit_x;
row = jstart;
lev = kstart;
- if (iend >= istart)
- for (col = 0; col < (iend - istart); col++) {
- ddata[col] =
- bdata[col + istart + brick->xres * (row) +
- brick->xres * brick->yres * (lev)];
- }
- else
- for (col = 0; col < (istart - iend); col++) {
- ddata[col] =
- bdata[iend - col - 1 + brick->xres * (row) +
- brick->xres * brick->yres * (lev)];
- }
+ if (iend >= istart) {
+ for (col = 0; col < (iend - istart); col++)
+ ddata[col] = bdata[col + istart + xres*row + xres*yres*lev];
+ }
+ else {
+ for (col = 0; col < (istart - iend); col++)
+ ddata[col] = bdata[iend - col - 1 + xres*row + xres*yres*lev];
+ }
gwy_data_line_set_offset(target,
- MIN(istart,
- iend) * brick->xreal /
- (gdouble)brick->xres);
+ MIN(istart, iend) * brick->xreal/xres);
gwy_data_line_set_real(target,
- (gdouble)abs(iend -
- istart) * brick->xreal /
- (gdouble)brick->xres);
+ ABS(iend - istart) * brick->xreal/xres);
}
else if ((istart == iend) && (kstart == kend)) {
- gwy_data_line_resample(target, abs(jend - jstart),
+ gwy_data_line_resample(target, ABS(jend - jstart),
GWY_INTERPOLATION_NONE);
ddata = gwy_data_line_get_data(target);
- si_unit = gwy_brick_get_si_unit_y((GwyBrick *) brick);
+ si_unit = brick->si_unit_y;
col = istart;
lev = kstart;
- if (jend >= jstart)
- for (row = 0; row < (jend - jstart); row++) {
- ddata[row] =
- bdata[col + brick->xres * (row + jstart) +
- brick->xres * brick->yres * (lev)];
- }
- else
- for (row = 0; row < (jstart - jend); row++) {
- ddata[row] =
- bdata[col + brick->xres * (jstart - row - 1) +
- brick->xres * brick->yres * (lev)];
- }
+ if (jend >= jstart) {
+ for (row = 0; row < (jend - jstart); row++)
+ ddata[row] = bdata[col + xres*(row + jstart) + xres*yres*lev];
+ }
+ else {
+ for (row = 0; row < (jstart - jend); row++)
+ ddata[row] = bdata[col + xres*(jstart - row - 1) + xres*yres*lev];
+ }
gwy_data_line_set_offset(target,
- MIN(jstart,
- jend) * brick->yreal /
- (gdouble)brick->yres);
+ MIN(jstart, jend) * brick->yreal/yres);
gwy_data_line_set_real(target,
- (gdouble)abs(jend -
- jstart) * brick->yreal /
- (gdouble)brick->yres);
+ ABS(jend - jstart) * brick->yreal/yres);
}
else if ((istart == iend) && (jstart == jend)) {
- gwy_data_line_resample(target, abs(kend - kstart),
+ gwy_data_line_resample(target, ABS(kend - kstart),
GWY_INTERPOLATION_NONE);
ddata = gwy_data_line_get_data(target);
- si_unit = gwy_brick_get_si_unit_z((GwyBrick *) brick);
+ si_unit = brick->si_unit_x;
col = istart;
row = jstart;
- if (kend >= kstart)
- for (lev = 0; lev < (kend - kstart); lev++) {
- ddata[lev] =
- bdata[col + brick->xres * (row) +
- brick->xres * brick->yres * (lev + kstart)];
- }
- else
- for (lev = 0; lev < (kstart - kend); lev++) {
- ddata[lev] =
- bdata[col + brick->xres * (row) +
- brick->xres * brick->yres * (kend - lev - 1)];
- }
+ if (kend >= kstart) {
+ for (lev = 0; lev < (kend - kstart); lev++)
+ ddata[lev] = bdata[col + xres*row + xres*yres*(lev + kstart)];
+ }
+ else {
+ for (lev = 0; lev < (kstart - kend); lev++)
+ ddata[lev] = bdata[col + xres*row + xres*yres*(kend - lev - 1)];
+ }
gwy_data_line_set_offset(target,
- MIN(kstart,
- kend) * brick->zreal /
- (gdouble)brick->zres);
+ MIN(kstart, kend) * brick->zreal/zres);
gwy_data_line_set_real(target,
- (gdouble)abs(kend -
- kstart) * brick->zreal /
- (gdouble)brick->zres);
+ ABS(kend - kstart) * brick->zreal/zres);
}
else {
g_return_if_reached();
}
- si_unit = gwy_si_unit_duplicate(si_unit);
- gwy_data_line_set_si_unit_x(target, si_unit);
- g_object_unref(si_unit);
-
- si_unit = gwy_brick_get_si_unit_w((GwyBrick *) brick);
- si_unit = gwy_si_unit_duplicate(si_unit);
- gwy_data_line_set_si_unit_y(target, si_unit);
- g_object_unref(si_unit);
+ _gwy_assign_si_unit(si_unit, &target->si_unit_x);
+ _gwy_assign_si_unit(brick->si_unit_w, &target->si_unit_y);
}
/**
diff --git a/libprocess/brick.h b/libprocess/brick.h
index fa5f27d..81c735b 100644
--- a/libprocess/brick.h
+++ b/libprocess/brick.h
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: brick.h 18119 2016-01-19 11:01:32Z yeti-dn $
+ * @(#) $Id: brick.h 20128 2017-08-01 11:19:59Z yeti-dn $
* Copyright (C) 2003 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -106,21 +106,6 @@ GwyBrick* gwy_brick_new_part (const GwyBrick *brick,
gboolean keep_offsets);
void gwy_brick_data_changed(GwyBrick *brick);
-/*void gwy_brick_set_size (GwyBrick *brick,
- guint xres,
- guint yres,
- guint zres,
- gboolean clear);*/
-/*void gwy_brick_copy (const GwyBrick *src,
- const GwyBrickPart *srcpart,
- GwyBrick *dest,
- guint destcol,
- guint destrow,
- guint destlevel);*/
-/*void gwy_brick_copy_full (const GwyBrick *src,
- GwyBrick *dest);*/
-/*void gwy_brick_invalidate (GwyBrick *brick);*/
-
void gwy_brick_resample (GwyBrick *brick,
gint xres,
gint yres,
@@ -162,6 +147,8 @@ void gwy_brick_set_si_unit_w (GwyBrick *brick,
GwySIUnit *si_unit);
gdouble gwy_brick_get_min (GwyBrick *brick);
gdouble gwy_brick_get_max (GwyBrick *brick);
+void gwy_brick_copy_units (const GwyBrick *brick,
+ GwyBrick *target);
GwySIValueFormat* gwy_brick_get_value_format_x(GwyBrick *brick,
GwySIUnitFormatStyle style,
GwySIValueFormat *format);
diff --git a/libprocess/correct-laplace.c b/libprocess/correct-laplace.c
new file mode 100644
index 0000000..d425275
--- /dev/null
+++ b/libprocess/correct-laplace.c
@@ -0,0 +1,1592 @@
+/*
+ * @(#) $Id: correct-laplace.c 19727 2017-05-10 17:45:37Z yeti-dn $
+ * Copyright (C) 2004-2017 David Necas (Yeti), Petr Klapetek.
+ * E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "config.h"
+#include <string.h>
+#include <libgwyddion/gwymacros.h>
+#include <libgwyddion/gwymath.h>
+#include <libprocess/datafield.h>
+#include <libprocess/stats.h>
+#include <libprocess/grains.h>
+#include <libprocess/correct.h>
+#include "gwyprocessinternal.h"
+
+enum { NONE = G_MAXUINT };
+
+typedef enum {
+ UP,
+ RIGHT,
+ DOWN,
+ LEFT,
+ NDIRECTIONS
+} LaplaceDirection;
+
+/*
+ * @len: The number of blocks. (The allocated size is usually a bit larger.)
+ * @n: Start of each neighbour in @k and @w, size @len+1.
+ * @k: Indices of neighbours for laplacian calculation, allocated size is a
+ * multiple of @len but blocks are variable-size, given by @n. These
+ * indices refer to these arrays, not the original grid.
+ * @w: Coefficient blocks (for calculation of the second derivative from
+ * neigbours), allocated size is a
+ * multiple of @len but blocks are variable-size, given by @n.
+ * @z: Values of the points, size @len.
+ * @rhs: Right-hand-sides of the points, size @len.
+ * @f: The difference between the second derivative and the value, size @len.
+ * @v: Conjugate-gradients auxiliary vector, size @len.
+ * @t: Conjugate-gradients auxiliary vector, size @len.
+ * @gindex: Where the point is placed in the original data, size @len.
+ */
+/* FIXME: Most of the coefficient sets in @w are repeated many times. We could
+ * consilidate them, replacing 3-5 doubles (typically) per iterator with one
+ * integer.
+ */
+typedef struct {
+ gsize len;
+ gsize int_size;
+ gsize float_size;
+ guint *n;
+ guint *k;
+ gdouble *w;
+ gdouble *z;
+ gdouble *rhs;
+ gdouble *f;
+ gdouble *v;
+ gdouble *t;
+ guint *gindex;
+} LaplaceIterators;
+
+typedef struct {
+ gboolean is_virtual : 1;
+ gboolean is_boundary : 1;
+ gboolean is_rhs : 1;
+
+ guint bdist; // Distance of the boundary line where ∂z/∂x = 0
+ guint step;
+ guint neighbour;
+ guint neighbour2;
+
+ gdouble rhs; // Remember the exterior data used for rhs
+ gdouble weight; // Coefficient before (z_neighbour - z_0)
+ gdouble weight2; // Coefficient before (z_neighbour2 - z_0)
+} LaplaceNeighbour;
+
+/**
+ * gwy_data_field_correct_laplace_iteration:
+ * @data_field: Data field to be corrected.
+ * @mask_field: Mask of places to be corrected.
+ * @buffer_field: Initialized to same size as mask and data.
+ * @error: Maximum change within last step.
+ * @corrfactor: Correction factor within step.
+ *
+ * Performs one interation of Laplace data correction.
+ *
+ * Tries to remove all the points in mask off the data by using
+ * iterative method similar to solving heat flux equation.
+ *
+ * Use this function repeatedly until reasonable @error is reached.
+ *
+ * <warning>For almost all purposes this function was superseded by
+ * non-iteratie gwy_data_field_laplace_solve() which is simultaneously much
+ * faster and more accurate.</warning>
+ **/
+void
+gwy_data_field_correct_laplace_iteration(GwyDataField *data_field,
+ GwyDataField *mask_field,
+ GwyDataField *buffer_field,
+ gdouble corrfactor,
+ gdouble *error)
+{
+ gint xres, yres, i, j;
+ const gdouble *mask, *data;
+ gdouble *buffer;
+ gdouble cor, cf, err;
+
+ g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
+ g_return_if_fail(GWY_IS_DATA_FIELD(mask_field));
+ g_return_if_fail(GWY_IS_DATA_FIELD(buffer_field));
+ g_return_if_fail(data_field->xres == mask_field->xres
+ && data_field->yres == mask_field->yres);
+
+ xres = data_field->xres;
+ yres = data_field->yres;
+
+ /* check buffer field */
+ if (buffer_field->xres != xres || buffer_field->yres != yres)
+ gwy_data_field_resample(buffer_field, xres, yres,
+ GWY_INTERPOLATION_NONE);
+
+ gwy_data_field_copy(data_field, buffer_field, FALSE);
+
+ data = data_field->data;
+ buffer = buffer_field->data;
+ mask = mask_field->data;
+
+ /* set boundary condition for masked boundary data */
+ if (yres >= 2) {
+ for (i = 0; i < xres; i++) {
+ if (mask[i] > 0)
+ buffer[i] = buffer[i + xres];
+ if (mask[i + xres*(yres - 1)] > 0)
+ buffer[i + xres*(yres - 1)] = buffer[i + xres*(yres - 2)];
+ }
+ }
+ if (xres >= 2) {
+ for (i = 0; i < yres; i++) {
+ if (mask[xres*i] > 0)
+ buffer[xres*i] = buffer[1 + xres*i];
+ if (mask[xres - 1 + xres*i] > 0)
+ buffer[xres - 1 + xres*i] = buffer[xres-2 + xres*i];
+ }
+ }
+
+ /* iterate */
+ err = 0.0;
+ cf = corrfactor;
+ for (i = 1; i < yres - 1; i++) {
+ for (j = 1; j < xres - 1; j++) {
+ if (mask[i*xres + j] > 0) {
+ cor = cf*((data[(i - 1)*xres + j] + data[(i + 1)*xres + j]
+ - 2*data[i*xres + j])
+ + (data[i*xres + j - 1] + data[i*xres + j + 1]
+ - 2*data[i*xres + j]));
+
+ buffer[i*xres + j] += cor;
+ cor = fabs(cor);
+ if (cor > err)
+ err = cor;
+ }
+ }
+ }
+
+ gwy_data_field_copy(buffer_field, data_field, FALSE);
+ gwy_data_field_invalidate(data_field);
+
+ if (error)
+ *error = err;
+}
+
+/***************************************************************************
+ *
+ * Efficient Laplace interpolation.
+ *
+ ***************************************************************************/
+
+static gboolean
+promote(const guint *levels, guint *buffer,
+ guint xres, guint yres,
+ guint level, guint step)
+{
+ guint nx = (xres + step-1)/step, ny = (yres + step-1)/step;
+ guint vstep = xres*step;
+ gboolean ok = FALSE;
+ guint i, j;
+
+ if (nx < 3 || ny < 3)
+ return ok;
+
+ for (i = 0; i < ny; i++) {
+ for (j = 0; j < nx; j++) {
+ guint k = (i*xres + j)*step;
+
+ if (levels[k] == level
+ && (!i || levels[k-vstep] == level)
+ && (!j || levels[k-step] == level)
+ && (j == nx-1 || levels[k+step] == level)
+ && (i == ny-1 || levels[k+vstep] == level)) {
+ buffer[k] = level+1;
+ ok = TRUE;
+ }
+ }
+ }
+
+ return ok;
+}
+
+static void
+demote(const guint *levels, guint *buffer,
+ guint xres, guint yres,
+ guint level, guint step)
+{
+ guint nx = (xres + step-1)/step, ny = (yres + step-1)/step;
+ guint vstep = xres*step;
+ guint i, j;
+
+ if (nx < 3 || ny < 3)
+ return;
+
+ for (i = 1; i < ny-1; i++) {
+ for (j = 1; j < nx-1; j++) {
+ guint k = (i*xres + j)*step;
+
+ if (levels[k] == level
+ && (levels[k-vstep-step] == level-1
+ || levels[k-vstep] == level-1
+ || levels[k-vstep+step] == level-1
+ || levels[k-step] == level-1
+ || levels[k+step] == level-1
+ || levels[k+vstep-step] == level-1
+ || levels[k+vstep] == level-1
+ || levels[k+vstep+step] == level-1)) {
+ if (buffer[k-vstep-step] > level)
+ buffer[k-vstep-step] = level;
+ if (buffer[k-vstep] > level)
+ buffer[k-vstep] = level;
+ if (buffer[k-vstep+step] > level)
+ buffer[k-vstep+step] = level;
+ if (buffer[k-step] > level)
+ buffer[k-step] = level;
+ if (buffer[k+step] > level)
+ buffer[k+step] = level;
+ if (buffer[k+vstep-step] > level)
+ buffer[k+vstep-step] = level;
+ if (buffer[k+vstep] > level)
+ buffer[k+vstep] = level;
+ if (buffer[k+vstep+step] > level)
+ buffer[k+vstep+step] = level;
+ }
+ }
+ }
+}
+
+static gboolean
+reduce(const guint *levels, guint *buffer,
+ guint xres, guint yres,
+ guint level, guint step)
+{
+ guint nx = (xres + step-1)/step, ny = (yres + step-1)/step;
+ guint halfstep = step/2;
+ guint vstep = xres*step, vhalfstep = xres*halfstep;
+ gboolean ok = FALSE;
+ gboolean right = (nx - 1)*step + halfstep < xres;
+ gboolean down = (ny - 1)*step + halfstep < yres;
+ guint i, j;
+
+ g_return_val_if_fail(step % 2 == 0, FALSE);
+
+ if (nx < 3 || ny < 3)
+ return ok;
+
+ for (i = 0; i < ny; i++) {
+ for (j = 0; j < nx; j++) {
+ guint k = (i*xres + j)*step;
+
+ if (levels[k] == level
+ && (!i || !j || levels[k-vstep-step] >= level)
+ && (!i || levels[k-vstep] == level)
+ && (!i || j == nx-1 || levels[k-vstep+step] >= level)
+ && (!j || levels[k-step] == level)
+ && (j == nx-1 || levels[k+step] == level)
+ && (i == ny-1 || !j || levels[k+vstep-step] >= level)
+ && (i == ny-1 || levels[k+vstep] == level)
+ && (i == ny-1 || j == nx-1 || levels[k+vstep+step] >= level)) {
+ buffer[k] = level+1;
+ if (i && j)
+ buffer[k-vhalfstep-halfstep] = NONE;
+ if (i)
+ buffer[k-vhalfstep] = NONE;
+ if (i && (right || j < nx-1))
+ buffer[k-vhalfstep+halfstep] = NONE;
+ if (j)
+ buffer[k-halfstep] = NONE;
+ if (right || j < nx-1)
+ buffer[k+halfstep] = NONE;
+ if ((down || i < ny-1) && j)
+ buffer[k+vhalfstep-halfstep] = NONE;
+ if (down || i < ny-1)
+ buffer[k+vhalfstep] = NONE;
+ if ((down || i < ny-1) && (right || j < nx-1))
+ buffer[k+vhalfstep+halfstep] = NONE;
+ ok = TRUE;
+ }
+ }
+ }
+
+ return ok;
+}
+
+static void
+remove_spikes(guint *levels,
+ guint xres, guint yres,
+ guint level, guint step)
+{
+ guint nx = (xres + step-1)/step, ny = (yres + step-1)/step;
+ guint i, j;
+
+ if (nx < 3 || ny < 3)
+ return;
+
+ for (i = 1; i < ny-1; i++) {
+ for (j = 1; j < nx-1; j++) {
+ guint k = (i*xres + j)*step;
+
+ if (levels[k] == level) {
+ guint su = (levels[k-xres*step] == NONE),
+ sd = (levels[k+xres*step] == NONE),
+ sl = (levels[k-step] == NONE),
+ sr = (levels[k+step] == NONE);
+
+ if ((su & sd & ~sl & ~sr) || (~su & ~sd & sl & sr))
+ levels[k] = NONE;
+ }
+ }
+ }
+}
+
+static guint
+build_levels(guint *levels, guint *buffer,
+ guint xres, guint yres)
+{
+ guint step = 1, level = 0;
+
+ gwy_assign(buffer, levels, xres*yres);
+ while (TRUE) {
+ // Promote odd levels to one-greater even levels if they do not touch
+ // lower-values levels.
+ level++;
+ if (!promote(levels, buffer, xres, yres, level, step))
+ break;
+
+ // Ensure a dense representation near the boundary.
+ if (level == 1) {
+ gwy_assign(levels, buffer, xres*yres);
+ demote(levels, buffer, xres, yres, level, step);
+ }
+
+ gwy_assign(levels, buffer, xres*yres);
+ // Clear the space around even levels and promote them to one-greater
+ // odd levels if the do not touch lower levels.
+ level++;
+ step *= 2;
+ if (!reduce(levels, buffer, xres, yres, level, step))
+ break;
+
+ // Remove even levels that would have to be interpolated from two
+ // opposide sides (they appear when both sides of it are promoted but
+ // not the point itself).
+ if (level > 1)
+ remove_spikes(buffer, xres, yres, level, step/2);
+
+ gwy_assign(levels, buffer, xres*yres);
+ }
+
+ return level;
+}
+
+static guint
+count_grid_points(const guint *levels,
+ guint xres, guint yres)
+{
+ guint k, npoints = 0;
+
+ for (k = 0; k < xres*yres; k++) {
+ if (levels[k] && levels[k] != NONE)
+ npoints++;
+ }
+
+ return npoints;
+}
+
+static void
+build_grid_index(const guint *levels,
+ guint xres, guint yres,
+ guint *gindex,
+ guint *revindex)
+{
+ guint k, n = 0;
+
+ for (k = 0; k < xres*yres; k++) {
+ if (levels[k] && levels[k] != NONE) {
+ revindex[k] = n;
+ gindex[n++] = k;
+ }
+ else
+ revindex[k] = NONE;
+ }
+}
+
+static void
+laplace_iterators_setup(LaplaceIterators *iterators,
+ guint maxneighbours)
+{
+ gsize len = iterators->len;
+
+ iterators->k = iterators->n + (len + 2);
+ iterators->gindex = iterators->k + maxneighbours*len;
+
+ iterators->rhs = iterators->z + len;
+ iterators->f = iterators->rhs + len;
+ iterators->v = iterators->f + len;
+ iterators->t = iterators->v + len;
+ iterators->w = iterators->t + len;
+}
+
+static void
+laplace_iterators_resize(LaplaceIterators *iterators,
+ guint len,
+ guint maxneighbours)
+{
+ gsize int_size = (maxneighbours + 2)*len + 2;
+ gsize float_size = (maxneighbours + 5)*len;
+
+ iterators->len = len;
+
+ if (int_size > iterators->int_size) {
+ if (G_UNLIKELY(iterators->int_size))
+ g_warning("Laplace iterators need to be enlarged (int).");
+ GWY_FREE(iterators->n);
+ iterators->n = g_new0(guint, int_size);
+ iterators->int_size = int_size;
+ }
+ else
+ gwy_clear(iterators->n, int_size);
+
+ if (float_size > iterators->float_size) {
+ if (G_UNLIKELY(iterators->float_size))
+ g_warning("Laplace iterators need to be enlarged (float).");
+ GWY_FREE(iterators->z);
+ iterators->z = g_new0(gdouble, float_size);
+ iterators->float_size = float_size;
+ }
+ else
+ gwy_clear(iterators->z, float_size);
+
+ laplace_iterators_setup(iterators, maxneighbours);
+}
+
+static LaplaceIterators*
+laplace_iterators_new(guint len, guint maxneighbours)
+{
+ LaplaceIterators *iterators = g_slice_new0(LaplaceIterators);
+ laplace_iterators_resize(iterators, len, maxneighbours);
+ return iterators;
+}
+
+static void
+laplace_iterators_free(LaplaceIterators *iterators)
+{
+ g_free(iterators->z);
+ g_free(iterators->n);
+ g_slice_free(LaplaceIterators, iterators);
+}
+
+static void
+analyse_neighbour_direction(const guint *levels,
+ const gdouble *data,
+ gint xres, gint yres,
+ gint xstep, gint ystep,
+ gint j, gint i,
+ const guint *revindex,
+ LaplaceNeighbour *nd)
+{
+ gint ineigh, jneigh, step;
+ gint xorthostep, yorthostep;
+ guint kk;
+
+ gwy_clear(nd, 1);
+ step = MAX(ABS(xstep), ABS(ystep));
+ ineigh = i + ystep;
+ jneigh = j + xstep;
+
+ // 1 Primary neighbour.
+ // 1.a Neumann boundary.
+ // The upper and left boundaries are always aligned.
+ if (ineigh < 0) {
+ g_assert(i == 0);
+ nd->is_boundary = TRUE;
+ nd->step = step;
+ return;
+ }
+ if (jneigh < 0) {
+ g_assert(j == 0);
+ nd->is_boundary = TRUE;
+ nd->step = step;
+ return;
+ }
+ // The other boundaries can be unaligned.
+ if (ineigh >= yres) {
+ nd->is_boundary = TRUE;
+ nd->bdist = yres-1 - i;
+ nd->step = step;
+ return;
+ }
+ if (jneigh >= xres) {
+ nd->is_boundary = TRUE;
+ nd->bdist = xres-1 - j;
+ nd->step = step;
+ return;
+ }
+
+ kk = ineigh*xres + jneigh;
+
+ // 1.b Dirichlet boundary.
+ if (!levels[kk]) {
+ g_assert(step == 1);
+ nd->is_rhs = TRUE;
+ nd->step = step;
+ nd->rhs = data[kk];
+ return;
+ }
+
+ // 1.c Interior.
+ if (levels[kk] != NONE) {
+ nd->neighbour = revindex[kk];
+ nd->step = step;
+ return;
+ }
+
+ // 2 Secondary neighbour.
+ ineigh = i + 2*ystep;
+ jneigh = j + 2*xstep;
+
+ // 2.a Neumann boundary.
+ // The upper and left boundaries are always aligned.
+ if (ineigh < 0) {
+ g_assert(i == 0);
+ nd->is_boundary = TRUE;
+ nd->step = 2*step;
+ return;
+ }
+ if (jneigh < 0) {
+ g_assert(j == 0);
+ nd->is_boundary = TRUE;
+ nd->step = 2*step;
+ return;
+ }
+ // The other boundaries can be unaligned.
+ if (ineigh >= yres) {
+ nd->is_boundary = TRUE;
+ nd->bdist = yres-1 - i;
+ nd->step = 2*step;
+ return;
+ }
+ if (jneigh >= xres) {
+ nd->is_boundary = TRUE;
+ nd->bdist = xres-1 - j;
+ nd->step = 2*step;
+ return;
+ }
+
+ kk = ineigh*xres + jneigh;
+ g_assert(levels[kk]); // Dirichlet boundary is always at step one.
+
+ // 2.b Interior.
+ if (levels[kk] != NONE) {
+ nd->neighbour = revindex[kk];
+ nd->step = 2*step;
+ return;
+ }
+
+ // 3 Virtual neighbour.
+ xorthostep = xstep ? 0 : ABS(ystep);
+ yorthostep = ystep ? 0 : ABS(xstep);
+ ineigh = i + 2*ystep - yorthostep;
+ jneigh = j + 2*xstep - xorthostep;
+ // The upper and left boundaries are always aligned.
+ g_assert(ineigh >= 0);
+ g_assert(jneigh >= 0);
+ kk = ineigh*xres + jneigh;
+
+ nd->is_virtual = TRUE;
+ nd->neighbour = revindex[kk];
+ nd->step = 2*step; // The long distance; the short is always half of that.
+
+ ineigh = i + 2*ystep + yorthostep;
+ jneigh = j + 2*xstep + xorthostep;
+ g_assert(ineigh < yres || jneigh < xres);
+ if (ineigh < yres && jneigh < xres) {
+ kk = ineigh*xres + jneigh;
+ nd->neighbour2 = revindex[kk];
+ g_assert(nd->neighbour2 != NONE);
+ }
+ else {
+ nd->is_boundary = TRUE;
+ if (ineigh >= yres)
+ nd->bdist = yres-1 - i;
+ else
+ nd->bdist = xres-1 - j;
+ }
+}
+
+static void
+calculate_weights(LaplaceNeighbour *nd)
+{
+ LaplaceDirection virtual_dir = NDIRECTIONS;
+ guint i, ii, ileft, iright, j, boundary_dir;
+ gboolean virtual_is_boundary;
+
+ // At most one virtual direction.
+ for (j = 0; j < NDIRECTIONS; j++) {
+ if (nd[j].is_virtual) {
+ g_assert(virtual_dir == NDIRECTIONS);
+ virtual_dir = j;
+ }
+ }
+
+ // No virtual, no mixing of z_xx and z_yy.
+ if (virtual_dir == NDIRECTIONS) {
+ for (j = 0; j < NDIRECTIONS; j++) {
+ guint jj = (j + 2) % NDIRECTIONS;
+ gdouble s, xs;
+
+ if (nd[j].is_boundary)
+ continue;
+
+ s = nd[j].step;
+ xs = nd[jj].is_boundary ? 2*nd[jj].bdist : nd[jj].step;
+ nd[j].weight = 2.0/(s + xs)/s;
+ }
+ return;
+ }
+
+ // Virtual.
+ i = virtual_dir;
+ iright = (i + 1) % NDIRECTIONS;
+ ii = (i + 2) % NDIRECTIONS;
+ ileft = (i + 3) % NDIRECTIONS;
+ boundary_dir = NDIRECTIONS;
+ virtual_is_boundary = nd[i].is_boundary;
+
+ // At most one boundary direction, except the boundary direction itself.
+ for (j = 0; j < NDIRECTIONS; j++) {
+ if (j != virtual_dir && nd[j].is_boundary) {
+ g_assert(boundary_dir == NDIRECTIONS);
+ boundary_dir = j;
+ }
+ }
+ g_assert(!virtual_is_boundary || (boundary_dir == iright
+ || boundary_dir == ileft));
+ if (boundary_dir == NDIRECTIONS) {
+ gdouble s = nd[i].step, ss = nd[ii].step;
+ gdouble sleft = nd[ileft].step, sright = nd[iright].step;
+ gdouble w = 1.0 - 0.25*s/(s + ss);
+ nd[i].weight = nd[i].weight2 = 1.0/(s + ss)/s;
+ nd[ii].weight = 2.0/(s + ss)/ss;
+ nd[ileft].weight = 2.0*w/(sleft + sright)/sleft;
+ nd[iright].weight = 2.0*w/(sleft + sright)/sright;
+ }
+ else if (boundary_dir == ii) {
+ gdouble s = nd[i].step;
+ gdouble sleft = nd[ileft].step, sright = nd[iright].step;
+ gdouble b = nd[boundary_dir].bdist;
+ gdouble w = 1.0 - 0.25*s/(s + 2*b);
+ nd[i].weight = nd[i].weight2 = 1.0/(s + 2*b)/s;
+ nd[ileft].weight = 2.0*w/(sleft + sright)/sleft;
+ nd[iright].weight = 2.0*w/(sleft + sright)/sright;
+ }
+ else {
+ guint irem = (boundary_dir + 2) % NDIRECTIONS;
+ gdouble s = nd[i].step, ss = nd[ii].step;
+ gdouble srem = nd[irem].step;
+ gdouble b = nd[boundary_dir].bdist;
+ gdouble w = 1.0 - 0.25*(s + 4*b)/(s + ss);
+ nd[i].weight = 2.0/(s + ss)/s;
+ nd[ii].weight = 2.0/(s + ss)/ss;
+ nd[irem].weight = 2.0*w/(srem + 2*b)/srem;
+ }
+}
+
+static void
+build_iterator(LaplaceNeighbour *nd,
+ LaplaceIterators *iterators,
+ guint ipt,
+ gdouble *nrhs,
+ gdouble *rhssum)
+{
+ guint i, start, npt = 0;
+ gdouble ws = 0.0, rs = 0.0;
+ gboolean sorted = FALSE;
+ guint *iter_k;
+ gdouble *iter_w;
+
+ // Figure out how many neighbours we have and sum the weights.
+ for (i = 0; i < NDIRECTIONS; i++) {
+ if (nd[i].weight) {
+ ws += nd[i].weight;
+ if (nd[i].is_rhs) {
+ g_assert(!nd[i].is_virtual);
+ g_assert(!nd[i].is_boundary);
+ rs += nd[i].rhs;
+ *nrhs += nd[i].weight;
+ }
+ else
+ npt++;
+
+ if (nd[i].weight2) {
+ g_assert(nd[i].is_virtual);
+ ws += nd[i].weight2;
+ npt++;
+ }
+ }
+ }
+ g_assert(npt > 0 && npt <= 5);
+
+ start = iterators->n[ipt];
+ iterators->n[ipt+1] = start + npt;
+ if (rs) {
+ *rhssum += rs;
+ iterators->rhs[ipt] = rs/ws;
+ }
+
+ // Create the iterators.
+ iter_w = iterators->w + start;
+ iter_k = iterators->k + start;
+ for (i = 0; i < NDIRECTIONS; i++) {
+ if (!nd[i].is_rhs && nd[i].weight) {
+ *(iter_w++) = nd[i].weight/ws;
+ *(iter_k++) = nd[i].neighbour;
+ if (nd[i].weight2) {
+ *(iter_w++) = nd[i].weight2/ws;
+ *(iter_k++) = nd[i].neighbour2;
+ }
+ }
+ }
+
+ // Sort the segments by k.
+ iter_w = iterators->w + start;
+ iter_k = iterators->k + start;
+ do {
+ sorted = TRUE;
+ for (i = 1; i < npt; i++) {
+ if (iter_k[i-1] > iter_k[i]) {
+ GWY_SWAP(guint, iter_k[i-1], iter_k[i]);
+ GWY_SWAP(gdouble, iter_w[i-1], iter_w[i]);
+ sorted = FALSE;
+ }
+ }
+ } while (!sorted);
+}
+
+static void
+build_sparse_iterators(LaplaceIterators *iterators,
+ guint *revindex,
+ const guint *levels,
+ const gdouble *data,
+ guint xres, guint yres)
+{
+ LaplaceNeighbour nd[NDIRECTIONS];
+ guint len = count_grid_points(levels, xres, yres);
+ gdouble rhssum = 0.0, nrhs = 0.0;
+ const guint *gindex;
+ guint ipt;
+
+ laplace_iterators_resize(iterators, len, 5);
+ build_grid_index(levels, xres, yres, iterators->gindex, revindex);
+
+ gindex = iterators->gindex;
+
+ for (ipt = 0; ipt < len; ipt++) {
+ guint k = gindex[ipt], i = k/xres, j = k % xres;
+ gint step = 1 << ((levels[k] - 1)/2);
+
+ analyse_neighbour_direction(levels, data, xres, yres,
+ 0, -step, j, i, revindex, nd + UP);
+ analyse_neighbour_direction(levels, data, xres, yres,
+ step, 0, j, i, revindex, nd + RIGHT);
+ analyse_neighbour_direction(levels, data, xres, yres,
+ 0, step, j, i, revindex, nd + DOWN);
+ analyse_neighbour_direction(levels, data, xres, yres,
+ -step, 0, j, i, revindex, nd + LEFT);
+
+ calculate_weights(nd);
+ build_iterator(nd, iterators, ipt, &nrhs, &rhssum);
+ }
+
+ // Initialise with the mean value of right hand sides, including
+ // multiplicity.
+ rhssum /= nrhs;
+ for (ipt = 0; ipt < len; ipt++)
+ iterators->z[ipt] = rhssum;
+}
+
+static void
+build_dense_iterators(LaplaceIterators *iterators,
+ guint *revindex,
+ const guint *levels,
+ const gdouble *data,
+ guint xres, guint yres)
+{
+ guint len = count_grid_points(levels, xres, yres);
+ const guint *gindex;
+ guint ipt;
+
+ laplace_iterators_resize(iterators, len, 4);
+ build_grid_index(levels, xres, yres, iterators->gindex, revindex);
+
+ gindex = iterators->gindex;
+ for (ipt = 0; ipt < len; ipt++) {
+ guint k = gindex[ipt], i = k/xres, j = k % xres, ws = 0, n = 0;
+ gdouble rs = 0.0;
+ guint *iter_k = iterators->k + iterators->n[ipt];
+ gdouble *iter_w = iterators->w + iterators->n[ipt];
+
+ if (i) {
+ guint kk = k-xres;
+ ws++;
+ if (levels[kk]) {
+ *(iter_k++) = revindex[kk];
+ n++;
+ }
+ else
+ rs += data[kk];
+ }
+ if (j) {
+ guint kk = k-1;
+ ws++;
+ if (levels[kk]) {
+ *(iter_k++) = revindex[kk];
+ n++;
+ }
+ else
+ rs += data[kk];
+ }
+ if (j < xres-1) {
+ guint kk = k+1;
+ ws++;
+ if (levels[kk]) {
+ *(iter_k++) = revindex[kk];
+ n++;
+ }
+ else
+ rs += data[kk];
+ }
+ if (i < yres-1) {
+ guint kk = k+xres;
+ ws++;
+ if (levels[kk]) {
+ *(iter_k++) = revindex[kk];
+ n++;
+ }
+ else
+ rs += data[kk];
+ }
+
+ iterators->z[ipt] = data[k];
+ iterators->rhs[ipt] = rs/ws;
+ iterators->n[ipt+1] = iterators->n[ipt] + n;
+ while (n--)
+ *(iter_w++) = 1.0/ws;
+ }
+}
+
+static void
+calculate_f(LaplaceIterators *iterators)
+{
+ const guint *n = iterators->n, *k = iterators->k;
+ const gdouble *z = iterators->z, *iz = iterators->z,
+ *w = iterators->w, *rhs = iterators->rhs;
+ gdouble *f = iterators->f;
+ guint l, ipt;
+
+ for (ipt = iterators->len; ipt; ipt--, n++, z++, rhs++, f++) {
+ gdouble lhs = 0.0;
+ for (l = *(n + 1) - *n; l; l--, k++, w++)
+ lhs += iz[*k]*(*w);
+ *f = (*z - lhs) - *rhs;
+ }
+}
+
+static void
+iterate_simple(LaplaceIterators *iterators)
+{
+ const gdouble *f = iterators->f;
+ gdouble *z = iterators->z;
+ guint ipt;
+
+ for (ipt = iterators->len; ipt; ipt--, z++, f++)
+ *z -= 0.8*(*f);
+}
+
+static void
+matrix_multiply(LaplaceIterators *iterators, const gdouble *v, gdouble *r)
+{
+ const guint *n = iterators->n, *k = iterators->k;
+ const gdouble *w = iterators->w, *iv = v;
+ guint l, ipt;
+
+ for (ipt = iterators->len; ipt; ipt--, n++, v++, r++) {
+ gdouble s = 0.0;
+
+ for (l = *(n + 1) - *n; l; l--, k++, w++)
+ s += iv[*k]*(*w);
+
+ *r = *v - s;
+ }
+}
+
+static gboolean
+iterate_conj_grad(LaplaceIterators *iterators)
+{
+ gdouble *z, *v = iterators->v, *t = iterators->t, *f = iterators->f;
+ gdouble S = 0.0, phi = 0.0, phiS;
+ guint ipt;
+
+ // Temporary quantities: t = A.v, S = v.t, φ = v.f
+ matrix_multiply(iterators, iterators->v, iterators->t);
+
+ for (ipt = iterators->len; ipt; ipt--, v++, t++, f++) {
+ S += (*v)*(*t);
+ phi += (*v)*(*f);
+ }
+
+ if (S < 1e-16)
+ return TRUE;
+
+ // New value and f = A.z-b
+ phiS = phi/S;
+ z = iterators->z;
+ v = iterators->v;
+ f = iterators->f;
+ t = iterators->t;
+ for (ipt = iterators->len; ipt; ipt--, z++, v++, f++, t++) {
+ *z -= phiS*(*v);
+ *f -= phiS*(*t);
+ }
+
+ // New v
+ phi = 0.0;
+ f = iterators->f;
+ t = iterators->t;
+ for (ipt = iterators->len; ipt; ipt--, t++, f++)
+ phi += (*t)*(*f);
+
+ phiS = phi/S;
+ v = iterators->v;
+ f = iterators->f;
+ for (ipt = iterators->len; ipt; ipt--, v++, f++)
+ *v = *f - phiS*(*v);
+
+ return FALSE;
+}
+
+static void
+move_result_to_data(const LaplaceIterators *iterators, gdouble *data)
+{
+ guint ipt;
+
+ for (ipt = 0; ipt < iterators->len; ipt++)
+ data[iterators->gindex[ipt]] = iterators->z[ipt];
+}
+
+static void
+interpolate(guint *levels, gdouble *data, guint xres, guint yres, guint step)
+{
+ guint nx = (xres + step-1)/step, ny = (yres + step-1)/step,
+ vstep = xres*step;
+ guint i, j;
+
+ if (nx < 3 || ny < 3)
+ return;
+
+ // Six-point interpolation
+ for (i = 0; i < ny; i++) {
+ if (i % 2 == 0) {
+ // Interpolated point horizontally in between two other points.
+ for (j = 1; j < nx; j += 2) {
+ guint k = (i*xres + j)*step;
+ if (levels[k] != NONE)
+ continue;
+
+ if (i >= 2 && i < ny-2 && j < nx-1) {
+ data[k] = (0.375*(data[k-step] + data[k+step])
+ + 0.0625*(data[k-2*vstep-step]
+ + data[k-2*vstep+step]
+ + data[k+2*vstep-step]
+ + data[k+2*vstep+step]));
+ levels[k] = (levels[k-step] + levels[k+step])/2;
+ }
+ else if (j < nx-1 && i < ny-2) {
+ // Upper boundary is aligned.
+ data[k] = (0.375*(data[k-step] + data[k+step])
+ + 0.125*(data[k+2*vstep-step]
+ + data[k+2*vstep+step]));
+ levels[k] = (levels[k-step] + levels[k+step])/2;
+ }
+ else if (j < nx-1 && i >= 2) {
+ // Lower boundary can be unaligned.
+ guint bdist = yres-1 - i*step;
+ guint a = 4*bdist + 3*step, b = step, d = 8*(bdist + step);
+ data[k] = (a*(data[k-step] + data[k+step])
+ + b*(data[k-2*vstep-step]
+ + data[k-2*vstep+step]))/d;
+ levels[k] = (levels[k-step] + levels[k+step])/2;
+ }
+ else if (i >= 2 && i < ny-2) {
+ // Right boundary can be unaligned.
+ guint bdist = xres-1 - j*step;
+ guint a = 6*step - 4*bdist, b = 2*bdist + step, d = 8*step;
+ data[k] = (a*data[k-step]
+ + b*(data[k-2*vstep-step]
+ + data[k+2*vstep-step]))/d;
+ levels[k] = levels[k-step];
+ }
+ else if (i < ny-2) {
+ // Upper boundary is aligned, right boundary can be
+ // unaligned.
+ guint bdist = xres-1 - j*step;
+ guint a = 3*step - 2*bdist, b = 2*bdist + step, d = 4*step;
+ data[k] = (a*data[k-step] + b*data[k-step+2*vstep])/d;
+ levels[k] = levels[k-step];
+ }
+ else if (i >= 2) {
+ // Lower and right boundaries can be both unaligned.
+ guint xbdist = xres-1 - j*step;
+ guint ybdist = yres-1 - i*step;
+ guint a = 3*step + 4*ybdist - 2*xbdist, b = 2*xbdist + step;
+ data[k] = (a*data[k-step] + b*data[k-2*vstep])/(a + b);
+ levels[k] = levels[k-step];
+ }
+ else {
+ g_assert_not_reached();
+ }
+ }
+ }
+ else {
+ // Interpolated point vertically in between two other points.
+ for (j = 0; j < nx; j += 2) {
+ guint k = (i*xres + j)*step;
+ if (levels[k] != NONE)
+ continue;
+
+ if (j >= 2 && j < nx-2 && i < ny-1) {
+ data[k] = (0.375*(data[k-vstep] + data[k+vstep])
+ + 0.0625*(data[k-vstep-2*step]
+ + data[k-vstep+2*step]
+ + data[k+vstep-2*step]
+ + data[k+vstep+2*step]));
+ levels[k] = (levels[k-vstep] + levels[k+vstep])/2;
+ }
+ else if (j < nx-2 && i < ny-1) {
+ // Left boundary is aligned.
+ data[k] = (0.375*(data[k-vstep] + data[k+vstep])
+ + 0.125*(data[k-vstep+2*step]
+ + data[k+vstep+2*step]));
+ levels[k] = (levels[k-vstep] + levels[k+vstep])/2;
+ }
+ else if (j >= 2 && i < ny-1) {
+ // Right boundary can be unaligned.
+ guint bdist = xres-1 - j*step;
+ guint a = 4*bdist + 3*step, b = step, d = 8*(bdist + step);
+ data[k] = (a*(data[k-vstep] + data[k+vstep])
+ + b*(data[k-vstep-2*step]
+ + data[k+vstep-2*step]))/d;
+ levels[k] = (levels[k-vstep] + levels[k+vstep])/2;
+ }
+ else if (j >= 2 && j < nx-2) {
+ // Lower boundary can be unaligned.
+ guint bdist = yres-1 - i*step;
+ guint a = 6*step - 4*bdist, b = 2*bdist + step, d = 8*step;
+ data[k] = (a*data[k-vstep]
+ + b*(data[k-vstep-2*step]
+ + data[k-vstep+2*step]))/d;
+ levels[k] = levels[k-vstep];
+ }
+ else if (j < nx-2) {
+ // Left boundary is aligned, lower boundary can be
+ // unaligned.
+ guint bdist = yres-1 - i*step;
+ guint a = 3*step - 2*bdist, b = 2*bdist + step, d = 4*step;
+ data[k] = (a*data[k-vstep] + b*data[k+2*step-vstep])/d;
+ levels[k] = levels[k-vstep];
+ }
+ else if (j >= 2) {
+ // Lower and right boundaries can be both unaligned.
+ guint xbdist = xres-1 - j*step;
+ guint ybdist = yres-1 - i*step;
+ guint a = 3*step + 4*xbdist - 2*ybdist, b = 2*ybdist + step;
+ data[k] = (a*data[k-vstep] + b*data[k-2*step])/(a + b);
+ levels[k] = levels[k-vstep];
+ }
+ else {
+ g_assert_not_reached();
+ }
+ }
+ }
+ }
+
+ // Four-point interpolation
+ for (i = 1; i < ny; i += 2) {
+ for (j = 1; j < nx; j += 2) {
+ guint k = (i*xres + j)*step;
+ if (levels[k] != NONE)
+ continue;
+
+ if (i < ny-1 && j < nx-1) {
+ data[k] = 0.25*(data[k-vstep] + data[k+vstep]
+ + data[k-step] + data[k+step]);
+ levels[k] = (levels[k-vstep] + levels[k+vstep]
+ + levels[k-step] + levels[k+step])/4;
+ }
+ else if (i < ny-1) {
+ // Right boundary can be unaligned.
+ guint bdist = xres-1 - j*step;
+ guint a = 2*bdist + step, b = 2*step, d = 4*(bdist + step);
+ data[k] = (a*(data[k-vstep] + data[k+vstep])
+ + b*data[k-step])/d;
+ levels[k] = (levels[k-vstep] + levels[k+vstep])/2;
+ }
+ else if (j < nx-1) {
+ // Lower boundary can be unaligned.
+ guint bdist = yres-1 - i*step;
+ guint a = 2*bdist + step, b = 2*step, d = 4*(bdist + step);
+ data[k] = (a*(data[k-step] + data[k+step])
+ + b*data[k-vstep])/d;
+ levels[k] = (levels[k-step] + levels[k+step])/2;
+ }
+ else {
+ // Right and lower boundary can be unaligned both.
+ guint xbdist = xres-1 - j*step;
+ guint ybdist = yres-1 - i*step;
+ guint a = 2*ybdist + step, b = 2*xbdist + step;
+ data[k] = (a*data[k-step] + b*data[k-vstep])/(a + b);
+ levels[k] = (levels[k-step] + levels[k-vstep])/2;
+ }
+ }
+ }
+}
+
+static void
+reconstruct(guint *levels, gdouble *data, guint xres, guint yres, guint level)
+{
+ guint step = 1 << ((level - 1)/2);
+
+ while (step) {
+ interpolate(levels, data, xres, yres, step);
+ step /= 2;
+ }
+}
+
+static void
+init_data_simple(gdouble *data, guint *levels, guint xres, guint yres)
+{
+ guint i, j, kk, level = 1;
+ gboolean finished = FALSE;
+
+ for (kk = 0; kk < xres*yres; kk++)
+ levels[kk] = !!levels[kk];
+
+ while (!finished) {
+ finished = TRUE;
+ for (i = 0; i < yres; i++) {
+ for (j = 0; j < xres; j++) {
+ guint k = i*xres + j, n = 0;
+ gdouble s = 0;
+
+ if (levels[k] != level)
+ continue;
+
+ if (i && levels[k-xres] < level) {
+ s += data[k-xres];
+ n++;
+ }
+ if (j && levels[k-1] < level) {
+ s += data[k-1];
+ n++;
+ }
+ if (j+1 < xres && levels[k+1] < level) {
+ s += data[k+1];
+ n++;
+ }
+ if (i+1 < yres && levels[k+xres] < level) {
+ s += data[k+xres];
+ n++;
+ }
+
+ if (n) {
+ data[k] = s/n;
+ }
+ else {
+ levels[k] = level+1;
+ finished = FALSE;
+ }
+ }
+ }
+ level++;
+ }
+}
+
+static void
+laplace_sparse(LaplaceIterators *iterators,
+ guint *revindex,
+ gdouble *data, guint *levels, guint xres, guint yres,
+ guint nconjgrad, guint nsimple)
+{
+ // Revindex is filled later, use is as a temporary xres*yres-sized buffer.
+ guint maxlevel = build_levels(levels, revindex, xres, yres);
+ gboolean finished = FALSE;
+ guint iter;
+
+ if (maxlevel < 3) {
+ // If the grain is nowhere thick just init the interior using boundary
+ // conditions and continue with dense iteration. Note for single-pixel
+ // grains init_data_simple() already produces the solution.
+ init_data_simple(data, levels, xres, yres);
+ return;
+ }
+
+ build_sparse_iterators(iterators, revindex, levels, data, xres, yres);
+ calculate_f(iterators),
+ gwy_assign(iterators->v, iterators->f, iterators->len);
+ for (iter = 0; iter < nconjgrad; iter++) {
+ if ((finished = iterate_conj_grad(iterators)))
+ break;
+ }
+ if (!finished) {
+ for (iter = 0; iter < nsimple; iter++) {
+ calculate_f(iterators);
+ iterate_simple(iterators);
+ }
+ }
+ move_result_to_data(iterators, data);
+ reconstruct(levels, data, xres, yres, maxlevel);
+}
+
+static void
+laplace_dense(LaplaceIterators *iterators,
+ guint *revindex,
+ gdouble *data, guint *levels, guint xres, guint yres,
+ guint nconjgrad, guint nsimple)
+{
+ gboolean finished = FALSE;
+ guint iter;
+
+ build_dense_iterators(iterators, revindex, levels, data, xres, yres);
+ calculate_f(iterators);
+ gwy_assign(iterators->v, iterators->f, iterators->len);
+ for (iter = 0; iter < nconjgrad; iter++) {
+ if ((finished = iterate_conj_grad(iterators)))
+ break;
+ }
+ if (!finished) {
+ for (iter = 0; iter < nsimple; iter++) {
+ calculate_f(iterators);
+ iterate_simple(iterators);
+ }
+ }
+ move_result_to_data(iterators, data);
+}
+
+// Extract grain data from full-sized @grains and @data to workspace-sized
+// @levels and @z.
+static void
+extract_grain(const gint *grains,
+ const gdouble *data,
+ guint xres,
+ const GwyDataFieldPart *fpart,
+ gint grain_id,
+ guint *levels,
+ gdouble *z)
+{
+ guint i, j;
+ const gint *grow;
+ guint *lrow;
+
+ for (i = 0; i < fpart->height; i++) {
+ gwy_assign(z + i*fpart->width,
+ data + (i + fpart->row)*xres + fpart->col,
+ fpart->width);
+ grow = grains + (i + fpart->row)*xres + fpart->col;
+ lrow = levels + i*fpart->width;
+ for (j = fpart->width; j; j--, lrow++, grow++)
+ *lrow = (*grow == grain_id);
+ }
+}
+
+// Put interpolated grain data @z back to @data.
+static void
+insert_grain(const gint *grains,
+ gdouble *data,
+ guint xres,
+ const GwyDataFieldPart *fpart,
+ gint grain_id,
+ const gdouble *z)
+{
+ guint i, j;
+
+ for (i = 0; i < fpart->height; i++) {
+ const gdouble *zrow = z + i*fpart->width;
+ const gint *grow = grains + (i + fpart->row)*xres + fpart->col;
+ gdouble *drow = data + (i + fpart->row)*xres + fpart->col;
+ for (j = fpart->width; j; j--, zrow++, drow++, grow++) {
+ if (*grow == grain_id)
+ *drow = *zrow;
+ }
+ }
+}
+
+static void
+enlarge_field_part(GwyDataFieldPart *fpart, guint xres, guint yres)
+{
+ if (fpart->col) {
+ fpart->col--;
+ fpart->width++;
+ }
+ if (fpart->col + fpart->width < xres)
+ fpart->width++;
+
+ if (fpart->row) {
+ fpart->row--;
+ fpart->height++;
+ }
+ if (fpart->row + fpart->height < yres)
+ fpart->height++;
+}
+
+/*
+ * Find the largest
+ * - grain size in the terms of pixels: this is the number of iterators for
+ * dense iteration
+ * - grain size in the terms of extended bounding box (i.e. bounding box
+ * including one more line of pixels to each side, if possible): this is
+ * the size of levels, revindex and data arrays.
+ */
+static void
+find_largest_sizes(guint xres, guint yres,
+ const GwyDataFieldPart *bboxes,
+ const guint *sizes,
+ guint gfrom, guint gto,
+ guint *size,
+ guint *bboxsize)
+{
+ guint gno, bs;
+ GwyDataFieldPart bbox;
+
+ *size = *bboxsize = 0;
+ for (gno = gfrom; gno <= gto; gno++) {
+ if (sizes[gno] > *size)
+ *size = sizes[gno];
+
+ bbox = bboxes[gno];
+ enlarge_field_part(&bbox, xres, yres);
+ bs = bbox.width * bbox.height;
+ if (bs > *bboxsize)
+ *bboxsize = bs;
+ }
+}
+
+/**
+ * gwy_data_field_laplace_solve:
+ * @field: A two-dimensional data field.
+ * @mask: A two-dimensional data field containing mask defining the areas to
+ * interpolate.
+ * @grain_id: The id number of the grain to replace with the solution of
+ * Laplace equation, from 1 to @ngrains (see
+ * gwy_data_field_grain_numbers()). Passing 0 means to replace the
+ * entire empty space outside grains while passing a negative value
+ * means to replace the entire masked area.
+ * @qprec: Speed-accuracy tuning parameter. Pass 1.0 for the default that is
+ * fast and sufficiently precise.
+ *
+ * Replaces masked areas by the solution of Laplace equation.
+ *
+ * The boundary conditions on mask boundaries are Dirichlet with values given
+ * by pixels on the outer boundary of the masked area. Boundary conditions at
+ * field edges are Neumann conditions ∂z/∂n=0 where n denotes the normal to the
+ * edge. If entire area of @field is to be replaced the problem is
+ * underspecified; @field will be filled with zeroes.
+ *
+ * For the default value of @qprec the the result should be good enough for any
+ * image processing purposes with the typical local error of order 10⁻⁵ for
+ * very large grains and possibly much smaller for small grains. You can lower
+ * @qprec down to about 0.3 or even 0.2 if speed is crucial and some precision
+ * can be sacrificed. Below that the result just starts becoming somewhat
+ * worse for not much speed increase. Conversely, you may wish to increase
+ * @qprec up to 3 or even 5 if accuracy is important and you can afford the
+ * increased computation time.
+ *
+ * Since: 2.47
+ **/
+void
+gwy_data_field_laplace_solve(GwyDataField *field,
+ GwyDataField *mask,
+ gint grain_id,
+ gdouble qprec)
+{
+ GwyDataField *ourmask;
+ guint xres, yres, maxsize, maxbboxsize;
+ gint ngrains, gfrom, gto;
+ GwyDataFieldPart *bboxes;
+ LaplaceIterators *iterators;
+ guint *levels, *revindex;
+ gint *grains;
+ guint *sizes;
+ gdouble *z;
+
+ g_return_if_fail(GWY_IS_DATA_FIELD(mask));
+ g_return_if_fail(GWY_IS_DATA_FIELD(field));
+ g_return_if_fail(mask->xres == field->xres);
+ g_return_if_fail(mask->yres == field->yres);
+
+ // To fill the entire empty space we need to divide it to grains too so
+ // work with the inverted mask.
+ if (grain_id == 0) {
+ ourmask = gwy_data_field_duplicate(mask);
+ gwy_data_field_grains_invert(ourmask);
+ grain_id = -1;
+ }
+ else
+ ourmask = g_object_ref((gpointer)mask);
+
+ xres = field->xres;
+ yres = field->yres;
+ grains = g_new0(gint, xres*yres);
+ ngrains = gwy_data_field_number_grains(ourmask, grains);
+ if (grain_id > ngrains) {
+ g_free(grains);
+ g_return_if_fail(grain_id <= ngrains);
+ }
+
+ bboxes = (GwyDataFieldPart*)gwy_data_field_get_grain_bounding_boxes(ourmask,
+ ngrains,
+ grains,
+ NULL);
+ sizes = (guint*)gwy_data_field_get_grain_sizes(ourmask, ngrains, grains,
+ NULL);
+
+ // The underspecified case.
+ if (ngrains == 1 && sizes[1] == xres*yres) {
+ gwy_data_field_clear(field);
+ g_object_unref(ourmask);
+ g_free(sizes);
+ g_free(bboxes);
+ g_free(grains);
+ return;
+ }
+
+ gfrom = (grain_id < 0) ? 1 : grain_id;
+ gto = (grain_id < 0) ? ngrains : grain_id;
+
+ // Allocate everything at the maximum size to avoid reallocations.
+ find_largest_sizes(xres, yres, bboxes, sizes, gfrom, gto,
+ &maxsize, &maxbboxsize);
+
+ levels = g_new(guint, maxbboxsize);
+ revindex = g_new(guint, maxbboxsize);
+ z = g_new(gdouble, maxbboxsize);
+ iterators = laplace_iterators_new(maxsize, 5);
+
+ for (grain_id = gfrom; grain_id <= gto; grain_id++) {
+ GwyDataFieldPart bbox = bboxes[grain_id];
+ enlarge_field_part(&bbox, xres, yres);
+ extract_grain(grains, field->data, xres, &bbox, grain_id, levels, z);
+ laplace_sparse(iterators, revindex, z, levels,
+ bbox.width, bbox.height, 60*qprec, 20*qprec);
+ if (sizes[grain_id] > 1)
+ laplace_dense(iterators, revindex, z, levels,
+ bbox.width, bbox.height, 60*qprec, 30*qprec);
+ insert_grain(grains, field->data, xres, &bbox, grain_id, z);
+ }
+
+ laplace_iterators_free(iterators);
+ g_free(z);
+ g_free(levels);
+ g_free(revindex);
+ g_free(sizes);
+ g_free(bboxes);
+ g_free(grains);
+
+ g_object_unref(ourmask);
+ gwy_data_field_invalidate(field);
+}
+
+static void
+interpolate_segment(GwyDataLine *data_line, gint from, gint to)
+{
+ gint i, res = data_line->res;
+ gdouble *d = data_line->data;
+ gdouble zl, zr;
+
+ g_assert(to < res-1 || from > 0);
+
+ if (from == 0) {
+ zr = d[to+1];
+ for (i = from; i <= to; i++)
+ d[i] = zr;
+ }
+ else if (to == res-1) {
+ zl = d[from-1];
+ for (i = from; i <= to; i++)
+ d[i] = zl;
+ }
+ else {
+ zl = d[from-1]/(to - from + 2);
+ zr = d[to+1]/(to - from + 2);
+ for (i = from; i <= to; i++)
+ d[i] = zr*(i+1 - from) + zl*(to+1 - i);
+ }
+}
+
+/**
+ * gwy_data_line_correct_laplace:
+ * @data_line: A data line.
+ * @mask_line: Mask of places to be corrected.
+ *
+ * Fills missing values in a data line using Laplace data correction.
+ *
+ * Both data lines must have the same number of values.
+ *
+ * For one-dimensional data the missing data interpolation is explicit.
+ * Interior missing segments are filled with linear dependence between the edge
+ * points. Missing segments with one end open are filled with the edge value.
+ *
+ * Returns: %TRUE if the line contained any data at all. If there are no data
+ * the %FALSE is returned and @data_line is filled with zeros.
+ *
+ * Since: 2.45
+ **/
+gboolean
+gwy_data_line_correct_laplace(GwyDataLine *data_line,
+ GwyDataLine *mask_line)
+{
+ gint start = -1, i, res;
+ const gdouble *m;
+
+ g_return_val_if_fail(GWY_IS_DATA_LINE(data_line), FALSE);
+ g_return_val_if_fail(GWY_IS_DATA_LINE(mask_line), FALSE);
+ g_return_val_if_fail(data_line->res == mask_line->res, FALSE);
+
+ res = data_line->res;
+ m = mask_line->data;
+ for (i = 0; i < res; i++) {
+ if (start == -1) {
+ if (m[i] > 0.0)
+ start = i;
+ }
+ else {
+ if (!(m[i] > 0.0)) {
+ interpolate_segment(data_line, start, i-1);
+ start = -1;
+ }
+ }
+ }
+
+ if (start == 0) {
+ gwy_data_line_clear(data_line);
+ return FALSE;
+ }
+
+ if (start != -1)
+ interpolate_segment(data_line, start, res-1);
+
+ return TRUE;
+}
+
+/* vim: set cin et ts=4 sw=4 cino=>1s,e0,n0,f0,{0,}0,^0,\:1s,=0,g1s,h0,t0,+1s,c3,(0,u0 : */
diff --git a/libprocess/correct.c b/libprocess/correct.c
index 0a14192..8e5957a 100644
--- a/libprocess/correct.c
+++ b/libprocess/correct.c
@@ -1,6 +1,6 @@
/*
- * @(#) $Id: correct.c 19145 2016-10-31 16:19:12Z yeti-dn $
- * Copyright (C) 2004-2016 David Necas (Yeti), Petr Klapetek.
+ * @(#) $Id: correct.c 20178 2017-08-07 09:17:20Z yeti-dn $
+ * Copyright (C) 2004-2017 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
* This program is free software; you can redistribute it and/or modify
@@ -20,1525 +20,44 @@
*/
#include "config.h"
+#include <stdlib.h>
#include <string.h>
#include <libgwyddion/gwymacros.h>
#include <libgwyddion/gwymath.h>
#include <libprocess/datafield.h>
+#include <libprocess/elliptic.h>
#include <libprocess/linestats.h>
#include <libprocess/stats.h>
#include <libprocess/grains.h>
+#include <libprocess/filters.h>
#include <libprocess/correct.h>
#include <libprocess/interpolation.h>
-enum { NONE = G_MAXUINT };
-
-typedef enum {
- UP,
- RIGHT,
- DOWN,
- LEFT,
- NDIRECTIONS
-} LaplaceDirection;
-
-typedef struct {
- guint col;
- guint row;
- guint width;
- guint height;
-} GwyDataFieldPart;
-
-/*
- * @len: The number of blocks. (The allocated size is usually a bit larger.)
- * @n: Start of each neighbour in @k and @w, size @len+1.
- * @k: Indices of neighbours for laplacian calculation, allocated size is a
- * multiple of @len but blocks are variable-size, given by @n. These
- * indices refer to these arrays, not the original grid.
- * @w: Coefficient blocks (for calculation of the second derivative from
- * neigbours), allocated size is a
- * multiple of @len but blocks are variable-size, given by @n.
- * @z: Values of the points, size @len.
- * @rhs: Right-hand-sides of the points, size @len.
- * @f: The difference between the second derivative and the value, size @len.
- * @v: Conjugate-gradients auxiliary vector, size @len.
- * @t: Conjugate-gradients auxiliary vector, size @len.
- * @gindex: Where the point is placed in the original data, size @len.
- */
-/* FIXME: Most of the coefficient sets in @w are repeated many times. We could
- * consilidate them, replacing 3-5 doubles (typically) per iterator with one
- * integer.
- */
-typedef struct {
- gsize len;
- gsize int_size;
- gsize float_size;
- guint *n;
- guint *k;
- gdouble *w;
- gdouble *z;
- gdouble *rhs;
- gdouble *f;
- gdouble *v;
- gdouble *t;
- guint *gindex;
-} LaplaceIterators;
-
-typedef struct {
- gboolean is_virtual : 1;
- gboolean is_boundary : 1;
- gboolean is_rhs : 1;
-
- guint bdist; // Distance of the boundary line where ∂z/∂x = 0
- guint step;
- guint neighbour;
- guint neighbour2;
-
- gdouble rhs; // Remember the exterior data used for rhs
- gdouble weight; // Coefficient before (z_neighbour - z_0)
- gdouble weight2; // Coefficient before (z_neighbour2 - z_0)
-} LaplaceNeighbour;
-
-static void gwy_data_field_distort_internal(GwyDataField *source,
- GwyDataField *dest,
- GwyInterpolationType interp,
- GwyExteriorType exterior,
- gdouble fill_value,
- const GwyXY *coords,
- GwyCoordTransform2DFunc invtrans,
- gpointer user_data);
-static gdouble unrotate_refine_correction (GwyDataLine *derdist,
- guint m,
- gdouble phi);
-static void compute_fourier_coeffs (gint nder,
- const gdouble *der,
- guint symmetry,
- gdouble *st,
- gdouble *ct);
-static void interpolate_segment (GwyDataLine *data_line,
- gint from,
- gint to);
-
-/**
- * gwy_data_field_correct_laplace_iteration:
- * @data_field: Data field to be corrected.
- * @mask_field: Mask of places to be corrected.
- * @buffer_field: Initialized to same size as mask and data.
- * @error: Maximum change within last step.
- * @corrfactor: Correction factor within step.
- *
- * Performs one interation of Laplace data correction.
- *
- * Tries to remove all the points in mask off the data by using
- * iterative method similar to solving heat flux equation.
- *
- * Use this function repeatedly until reasonable @error is reached.
- *
- * <warning>For almost all purposes this function was superseded by
- * non-iteratie gwy_data_field_laplace_solve() which is simultaneously much
- * faster and more accurate.</warning>
- **/
-void
-gwy_data_field_correct_laplace_iteration(GwyDataField *data_field,
- GwyDataField *mask_field,
- GwyDataField *buffer_field,
- gdouble corrfactor,
- gdouble *error)
-{
- gint xres, yres, i, j;
- const gdouble *mask, *data;
- gdouble *buffer;
- gdouble cor, cf, err;
-
- g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
- g_return_if_fail(GWY_IS_DATA_FIELD(mask_field));
- g_return_if_fail(GWY_IS_DATA_FIELD(buffer_field));
- g_return_if_fail(data_field->xres == mask_field->xres
- && data_field->yres == mask_field->yres);
-
- xres = data_field->xres;
- yres = data_field->yres;
-
- /* check buffer field */
- if (buffer_field->xres != xres || buffer_field->yres != yres)
- gwy_data_field_resample(buffer_field, xres, yres,
- GWY_INTERPOLATION_NONE);
-
- gwy_data_field_copy(data_field, buffer_field, FALSE);
-
- data = data_field->data;
- buffer = buffer_field->data;
- mask = mask_field->data;
-
- /* set boundary condition for masked boundary data */
- if (yres >= 2) {
- for (i = 0; i < xres; i++) {
- if (mask[i] > 0)
- buffer[i] = buffer[i + xres];
- if (mask[i + xres*(yres - 1)] > 0)
- buffer[i + xres*(yres - 1)] = buffer[i + xres*(yres - 2)];
- }
- }
- if (xres >= 2) {
- for (i = 0; i < yres; i++) {
- if (mask[xres*i] > 0)
- buffer[xres*i] = buffer[1 + xres*i];
- if (mask[xres - 1 + xres*i] > 0)
- buffer[xres - 1 + xres*i] = buffer[xres-2 + xres*i];
- }
- }
-
- /* iterate */
- err = 0.0;
- cf = corrfactor;
- for (i = 1; i < yres - 1; i++) {
- for (j = 1; j < xres - 1; j++) {
- if (mask[i*xres + j] > 0) {
- cor = cf*((data[(i - 1)*xres + j] + data[(i + 1)*xres + j]
- - 2*data[i*xres + j])
- + (data[i*xres + j - 1] + data[i*xres + j + 1]
- - 2*data[i*xres + j]));
-
- buffer[i*xres + j] += cor;
- cor = fabs(cor);
- if (cor > err)
- err = cor;
- }
- }
- }
-
- gwy_data_field_copy(buffer_field, data_field, FALSE);
- gwy_data_field_invalidate(data_field);
-
- if (error)
- *error = err;
-}
-
-/***************************************************************************
- *
- * Efficient Laplace interpolation.
- *
- ***************************************************************************/
-
-static gboolean
-promote(const guint *levels, guint *buffer,
- guint xres, guint yres,
- guint level, guint step)
-{
- guint nx = (xres + step-1)/step, ny = (yres + step-1)/step;
- guint vstep = xres*step;
- gboolean ok = FALSE;
- guint i, j;
-
- if (nx < 3 || ny < 3)
- return ok;
-
- for (i = 0; i < ny; i++) {
- for (j = 0; j < nx; j++) {
- guint k = (i*xres + j)*step;
-
- if (levels[k] == level
- && (!i || levels[k-vstep] == level)
- && (!j || levels[k-step] == level)
- && (j == nx-1 || levels[k+step] == level)
- && (i == ny-1 || levels[k+vstep] == level)) {
- buffer[k] = level+1;
- ok = TRUE;
- }
- }
- }
-
- return ok;
-}
-
-static void
-demote(const guint *levels, guint *buffer,
- guint xres, guint yres,
- guint level, guint step)
-{
- guint nx = (xres + step-1)/step, ny = (yres + step-1)/step;
- guint vstep = xres*step;
- guint i, j;
-
- if (nx < 3 || ny < 3)
- return;
-
- for (i = 1; i < ny-1; i++) {
- for (j = 1; j < nx-1; j++) {
- guint k = (i*xres + j)*step;
-
- if (levels[k] == level
- && (levels[k-vstep-step] == level-1
- || levels[k-vstep] == level-1
- || levels[k-vstep+step] == level-1
- || levels[k-step] == level-1
- || levels[k+step] == level-1
- || levels[k+vstep-step] == level-1
- || levels[k+vstep] == level-1
- || levels[k+vstep+step] == level-1)) {
- if (buffer[k-vstep-step] > level)
- buffer[k-vstep-step] = level;
- if (buffer[k-vstep] > level)
- buffer[k-vstep] = level;
- if (buffer[k-vstep+step] > level)
- buffer[k-vstep+step] = level;
- if (buffer[k-step] > level)
- buffer[k-step] = level;
- if (buffer[k+step] > level)
- buffer[k+step] = level;
- if (buffer[k+vstep-step] > level)
- buffer[k+vstep-step] = level;
- if (buffer[k+vstep] > level)
- buffer[k+vstep] = level;
- if (buffer[k+vstep+step] > level)
- buffer[k+vstep+step] = level;
- }
- }
- }
-}
-
-static gboolean
-reduce(const guint *levels, guint *buffer,
- guint xres, guint yres,
- guint level, guint step)
-{
- guint nx = (xres + step-1)/step, ny = (yres + step-1)/step;
- guint halfstep = step/2;
- guint vstep = xres*step, vhalfstep = xres*halfstep;
- gboolean ok = FALSE;
- gboolean right = (nx - 1)*step + halfstep < xres;
- gboolean down = (ny - 1)*step + halfstep < yres;
- guint i, j;
-
- g_return_val_if_fail(step % 2 == 0, FALSE);
-
- if (nx < 3 || ny < 3)
- return ok;
-
- for (i = 0; i < ny; i++) {
- for (j = 0; j < nx; j++) {
- guint k = (i*xres + j)*step;
-
- if (levels[k] == level
- && (!i || !j || levels[k-vstep-step] >= level)
- && (!i || levels[k-vstep] == level)
- && (!i || j == nx-1 || levels[k-vstep+step] >= level)
- && (!j || levels[k-step] == level)
- && (j == nx-1 || levels[k+step] == level)
- && (i == ny-1 || !j || levels[k+vstep-step] >= level)
- && (i == ny-1 || levels[k+vstep] == level)
- && (i == ny-1 || j == nx-1 || levels[k+vstep+step] >= level)) {
- buffer[k] = level+1;
- if (i && j)
- buffer[k-vhalfstep-halfstep] = NONE;
- if (i)
- buffer[k-vhalfstep] = NONE;
- if (i && (right || j < nx-1))
- buffer[k-vhalfstep+halfstep] = NONE;
- if (j)
- buffer[k-halfstep] = NONE;
- if (right || j < nx-1)
- buffer[k+halfstep] = NONE;
- if ((down || i < ny-1) && j)
- buffer[k+vhalfstep-halfstep] = NONE;
- if (down || i < ny-1)
- buffer[k+vhalfstep] = NONE;
- if ((down || i < ny-1) && (right || j < nx-1))
- buffer[k+vhalfstep+halfstep] = NONE;
- ok = TRUE;
- }
- }
- }
-
- return ok;
-}
-
-static void
-remove_spikes(guint *levels,
- guint xres, guint yres,
- guint level, guint step)
-{
- guint nx = (xres + step-1)/step, ny = (yres + step-1)/step;
- guint i, j;
-
- if (nx < 3 || ny < 3)
- return;
-
- for (i = 1; i < ny-1; i++) {
- for (j = 1; j < nx-1; j++) {
- guint k = (i*xres + j)*step;
-
- if (levels[k] == level) {
- guint su = (levels[k-xres*step] == NONE),
- sd = (levels[k+xres*step] == NONE),
- sl = (levels[k-step] == NONE),
- sr = (levels[k+step] == NONE);
-
- if ((su & sd & ~sl & ~sr) || (~su & ~sd & sl & sr))
- levels[k] = NONE;
- }
- }
- }
-}
-
-static guint
-build_levels(guint *levels, guint *buffer,
- guint xres, guint yres)
-{
- guint step = 1, level = 0;
-
- gwy_assign(buffer, levels, xres*yres);
- while (TRUE) {
- // Promote odd levels to one-greater even levels if they do not touch
- // lower-values levels.
- level++;
- if (!promote(levels, buffer, xres, yres, level, step))
- break;
-
- // Ensure a dense representation near the boundary.
- if (level == 1) {
- gwy_assign(levels, buffer, xres*yres);
- demote(levels, buffer, xres, yres, level, step);
- }
-
- gwy_assign(levels, buffer, xres*yres);
- // Clear the space around even levels and promote them to one-greater
- // odd levels if the do not touch lower levels.
- level++;
- step *= 2;
- if (!reduce(levels, buffer, xres, yres, level, step))
- break;
-
- // Remove even levels that would have to be interpolated from two
- // opposide sides (they appear when both sides of it are promoted but
- // not the point itself).
- if (level > 1)
- remove_spikes(buffer, xres, yres, level, step/2);
-
- gwy_assign(levels, buffer, xres*yres);
- }
-
- return level;
-}
-
-static guint
-count_grid_points(const guint *levels,
- guint xres, guint yres)
-{
- guint k, npoints = 0;
-
- for (k = 0; k < xres*yres; k++) {
- if (levels[k] && levels[k] != NONE)
- npoints++;
- }
-
- return npoints;
-}
-
-static void
-build_grid_index(const guint *levels,
- guint xres, guint yres,
- guint *gindex,
- guint *revindex)
-{
- guint k, n = 0;
-
- for (k = 0; k < xres*yres; k++) {
- if (levels[k] && levels[k] != NONE) {
- revindex[k] = n;
- gindex[n++] = k;
- }
- else
- revindex[k] = NONE;
- }
-}
-
-static void
-laplace_iterators_setup(LaplaceIterators *iterators,
- guint maxneighbours)
-{
- gsize len = iterators->len;
-
- iterators->k = iterators->n + (len + 2);
- iterators->gindex = iterators->k + maxneighbours*len;
-
- iterators->rhs = iterators->z + len;
- iterators->f = iterators->rhs + len;
- iterators->v = iterators->f + len;
- iterators->t = iterators->v + len;
- iterators->w = iterators->t + len;
-}
-
-static void
-laplace_iterators_resize(LaplaceIterators *iterators,
- guint len,
- guint maxneighbours)
-{
- gsize int_size = (maxneighbours + 2)*len + 2;
- gsize float_size = (maxneighbours + 5)*len;
-
- iterators->len = len;
-
- if (int_size > iterators->int_size) {
- if (G_UNLIKELY(iterators->int_size))
- g_warning("Laplace iterators need to be enlarged (int).");
- GWY_FREE(iterators->n);
- iterators->n = g_new0(guint, int_size);
- iterators->int_size = int_size;
- }
- else
- gwy_clear(iterators->n, int_size);
-
- if (float_size > iterators->float_size) {
- if (G_UNLIKELY(iterators->float_size))
- g_warning("Laplace iterators need to be enlarged (float).");
- GWY_FREE(iterators->z);
- iterators->z = g_new0(gdouble, float_size);
- iterators->float_size = float_size;
- }
- else
- gwy_clear(iterators->z, float_size);
-
- laplace_iterators_setup(iterators, maxneighbours);
-}
-
-static LaplaceIterators*
-laplace_iterators_new(guint len, guint maxneighbours)
-{
- LaplaceIterators *iterators = g_slice_new0(LaplaceIterators);
- laplace_iterators_resize(iterators, len, maxneighbours);
- return iterators;
-}
-
-static void
-laplace_iterators_free(LaplaceIterators *iterators)
-{
- g_free(iterators->z);
- g_free(iterators->n);
- g_slice_free(LaplaceIterators, iterators);
-}
-
-static void
-analyse_neighbour_direction(const guint *levels,
- const gdouble *data,
- gint xres, gint yres,
- gint xstep, gint ystep,
- gint j, gint i,
- const guint *revindex,
- LaplaceNeighbour *nd)
-{
- gint ineigh, jneigh, step;
- gint xorthostep, yorthostep;
- guint kk;
-
- gwy_clear(nd, 1);
- step = MAX(ABS(xstep), ABS(ystep));
- ineigh = i + ystep;
- jneigh = j + xstep;
-
- // 1 Primary neighbour.
- // 1.a Neumann boundary.
- // The upper and left boundaries are always aligned.
- if (ineigh < 0) {
- g_assert(i == 0);
- nd->is_boundary = TRUE;
- nd->step = step;
- return;
- }
- if (jneigh < 0) {
- g_assert(j == 0);
- nd->is_boundary = TRUE;
- nd->step = step;
- return;
- }
- // The other boundaries can be unaligned.
- if (ineigh >= yres) {
- nd->is_boundary = TRUE;
- nd->bdist = yres-1 - i;
- nd->step = step;
- return;
- }
- if (jneigh >= xres) {
- nd->is_boundary = TRUE;
- nd->bdist = xres-1 - j;
- nd->step = step;
- return;
- }
-
- kk = ineigh*xres + jneigh;
-
- // 1.b Dirichlet boundary.
- if (!levels[kk]) {
- g_assert(step == 1);
- nd->is_rhs = TRUE;
- nd->step = step;
- nd->rhs = data[kk];
- return;
- }
-
- // 1.c Interior.
- if (levels[kk] != NONE) {
- nd->neighbour = revindex[kk];
- nd->step = step;
- return;
- }
-
- // 2 Secondary neighbour.
- ineigh = i + 2*ystep;
- jneigh = j + 2*xstep;
-
- // 2.a Neumann boundary.
- // The upper and left boundaries are always aligned.
- if (ineigh < 0) {
- g_assert(i == 0);
- nd->is_boundary = TRUE;
- nd->step = 2*step;
- return;
- }
- if (jneigh < 0) {
- g_assert(j == 0);
- nd->is_boundary = TRUE;
- nd->step = 2*step;
- return;
- }
- // The other boundaries can be unaligned.
- if (ineigh >= yres) {
- nd->is_boundary = TRUE;
- nd->bdist = yres-1 - i;
- nd->step = 2*step;
- return;
- }
- if (jneigh >= xres) {
- nd->is_boundary = TRUE;
- nd->bdist = xres-1 - j;
- nd->step = 2*step;
- return;
- }
-
- kk = ineigh*xres + jneigh;
- g_assert(levels[kk]); // Dirichlet boundary is always at step one.
-
- // 2.b Interior.
- if (levels[kk] != NONE) {
- nd->neighbour = revindex[kk];
- nd->step = 2*step;
- return;
- }
-
- // 3 Virtual neighbour.
- xorthostep = xstep ? 0 : ABS(ystep);
- yorthostep = ystep ? 0 : ABS(xstep);
- ineigh = i + 2*ystep - yorthostep;
- jneigh = j + 2*xstep - xorthostep;
- // The upper and left boundaries are always aligned.
- g_assert(ineigh >= 0);
- g_assert(jneigh >= 0);
- kk = ineigh*xres + jneigh;
-
- nd->is_virtual = TRUE;
- nd->neighbour = revindex[kk];
- nd->step = 2*step; // The long distance; the short is always half of that.
-
- ineigh = i + 2*ystep + yorthostep;
- jneigh = j + 2*xstep + xorthostep;
- g_assert(ineigh < yres || jneigh < xres);
- if (ineigh < yres && jneigh < xres) {
- kk = ineigh*xres + jneigh;
- nd->neighbour2 = revindex[kk];
- g_assert(nd->neighbour2 != NONE);
- }
- else {
- nd->is_boundary = TRUE;
- if (ineigh >= yres)
- nd->bdist = yres-1 - i;
- else
- nd->bdist = xres-1 - j;
- }
-}
-
-static void
-calculate_weights(LaplaceNeighbour *nd)
-{
- LaplaceDirection virtual_dir = NDIRECTIONS;
- guint i, ii, ileft, iright, j, boundary_dir;
- gboolean virtual_is_boundary;
-
- // At most one virtual direction.
- for (j = 0; j < NDIRECTIONS; j++) {
- if (nd[j].is_virtual) {
- g_assert(virtual_dir == NDIRECTIONS);
- virtual_dir = j;
- }
- }
-
- // No virtual, no mixing of z_xx and z_yy.
- if (virtual_dir == NDIRECTIONS) {
- for (j = 0; j < NDIRECTIONS; j++) {
- guint jj = (j + 2) % NDIRECTIONS;
- gdouble s, xs;
-
- if (nd[j].is_boundary)
- continue;
-
- s = nd[j].step;
- xs = nd[jj].is_boundary ? 2*nd[jj].bdist : nd[jj].step;
- nd[j].weight = 2.0/(s + xs)/s;
- }
- return;
- }
-
- // Virtual.
- i = virtual_dir;
- iright = (i + 1) % NDIRECTIONS;
- ii = (i + 2) % NDIRECTIONS;
- ileft = (i + 3) % NDIRECTIONS;
- boundary_dir = NDIRECTIONS;
- virtual_is_boundary = nd[i].is_boundary;
-
- // At most one boundary direction, except the boundary direction itself.
- for (j = 0; j < NDIRECTIONS; j++) {
- if (j != virtual_dir && nd[j].is_boundary) {
- g_assert(boundary_dir == NDIRECTIONS);
- boundary_dir = j;
- }
- }
- g_assert(!virtual_is_boundary || (boundary_dir == iright
- || boundary_dir == ileft));
- if (boundary_dir == NDIRECTIONS) {
- gdouble s = nd[i].step, ss = nd[ii].step;
- gdouble sleft = nd[ileft].step, sright = nd[iright].step;
- gdouble w = 1.0 - 0.25*s/(s + ss);
- nd[i].weight = nd[i].weight2 = 1.0/(s + ss)/s;
- nd[ii].weight = 2.0/(s + ss)/ss;
- nd[ileft].weight = 2.0*w/(sleft + sright)/sleft;
- nd[iright].weight = 2.0*w/(sleft + sright)/sright;
- }
- else if (boundary_dir == ii) {
- gdouble s = nd[i].step;
- gdouble sleft = nd[ileft].step, sright = nd[iright].step;
- gdouble b = nd[boundary_dir].bdist;
- gdouble w = 1.0 - 0.25*s/(s + 2*b);
- nd[i].weight = nd[i].weight2 = 1.0/(s + 2*b)/s;
- nd[ileft].weight = 2.0*w/(sleft + sright)/sleft;
- nd[iright].weight = 2.0*w/(sleft + sright)/sright;
- }
- else {
- guint irem = (boundary_dir + 2) % NDIRECTIONS;
- gdouble s = nd[i].step, ss = nd[ii].step;
- gdouble srem = nd[irem].step;
- gdouble b = nd[boundary_dir].bdist;
- gdouble w = 1.0 - 0.25*(s + 4*b)/(s + ss);
- nd[i].weight = 2.0/(s + ss)/s;
- nd[ii].weight = 2.0/(s + ss)/ss;
- nd[irem].weight = 2.0*w/(srem + 2*b)/srem;
- }
-}
-
-static void
-build_iterator(LaplaceNeighbour *nd,
- LaplaceIterators *iterators,
- guint ipt,
- gdouble *nrhs,
- gdouble *rhssum)
-{
- guint i, start, npt = 0;
- gdouble ws = 0.0, rs = 0.0;
- gboolean sorted = FALSE;
- guint *iter_k;
- gdouble *iter_w;
-
- // Figure out how many neighbours we have and sum the weights.
- for (i = 0; i < NDIRECTIONS; i++) {
- if (nd[i].weight) {
- ws += nd[i].weight;
- if (nd[i].is_rhs) {
- g_assert(!nd[i].is_virtual);
- g_assert(!nd[i].is_boundary);
- rs += nd[i].rhs;
- *nrhs += nd[i].weight;
- }
- else
- npt++;
-
- if (nd[i].weight2) {
- g_assert(nd[i].is_virtual);
- ws += nd[i].weight2;
- npt++;
- }
- }
- }
- g_assert(npt > 0 && npt <= 5);
-
- start = iterators->n[ipt];
- iterators->n[ipt+1] = start + npt;
- if (rs) {
- *rhssum += rs;
- iterators->rhs[ipt] = rs/ws;
- }
-
- // Create the iterators.
- iter_w = iterators->w + start;
- iter_k = iterators->k + start;
- for (i = 0; i < NDIRECTIONS; i++) {
- if (!nd[i].is_rhs && nd[i].weight) {
- *(iter_w++) = nd[i].weight/ws;
- *(iter_k++) = nd[i].neighbour;
- if (nd[i].weight2) {
- *(iter_w++) = nd[i].weight2/ws;
- *(iter_k++) = nd[i].neighbour2;
- }
- }
- }
-
- // Sort the segments by k.
- iter_w = iterators->w + start;
- iter_k = iterators->k + start;
- do {
- sorted = TRUE;
- for (i = 1; i < npt; i++) {
- if (iter_k[i-1] > iter_k[i]) {
- GWY_SWAP(guint, iter_k[i-1], iter_k[i]);
- GWY_SWAP(gdouble, iter_w[i-1], iter_w[i]);
- sorted = FALSE;
- }
- }
- } while (!sorted);
-}
-
-static void
-build_sparse_iterators(LaplaceIterators *iterators,
- guint *revindex,
- const guint *levels,
- const gdouble *data,
- guint xres, guint yres)
-{
- LaplaceNeighbour nd[NDIRECTIONS];
- guint len = count_grid_points(levels, xres, yres);
- gdouble rhssum = 0.0, nrhs = 0.0;
- const guint *gindex;
- guint ipt;
-
- laplace_iterators_resize(iterators, len, 5);
- build_grid_index(levels, xres, yres, iterators->gindex, revindex);
-
- gindex = iterators->gindex;
-
- for (ipt = 0; ipt < len; ipt++) {
- guint k = gindex[ipt], i = k/xres, j = k % xres;
- gint step = 1 << ((levels[k] - 1)/2);
-
- analyse_neighbour_direction(levels, data, xres, yres,
- 0, -step, j, i, revindex, nd + UP);
- analyse_neighbour_direction(levels, data, xres, yres,
- step, 0, j, i, revindex, nd + RIGHT);
- analyse_neighbour_direction(levels, data, xres, yres,
- 0, step, j, i, revindex, nd + DOWN);
- analyse_neighbour_direction(levels, data, xres, yres,
- -step, 0, j, i, revindex, nd + LEFT);
-
- calculate_weights(nd);
- build_iterator(nd, iterators, ipt, &nrhs, &rhssum);
- }
-
- // Initialise with the mean value of right hand sides, including
- // multiplicity.
- rhssum /= nrhs;
- for (ipt = 0; ipt < len; ipt++)
- iterators->z[ipt] = rhssum;
-}
-
-static void
-build_dense_iterators(LaplaceIterators *iterators,
- guint *revindex,
- const guint *levels,
- const gdouble *data,
- guint xres, guint yres)
-{
- guint len = count_grid_points(levels, xres, yres);
- const guint *gindex;
- guint ipt;
-
- laplace_iterators_resize(iterators, len, 4);
- build_grid_index(levels, xres, yres, iterators->gindex, revindex);
-
- gindex = iterators->gindex;
- for (ipt = 0; ipt < len; ipt++) {
- guint k = gindex[ipt], i = k/xres, j = k % xres, ws = 0, n = 0;
- gdouble rs = 0.0;
- guint *iter_k = iterators->k + iterators->n[ipt];
- gdouble *iter_w = iterators->w + iterators->n[ipt];
-
- if (i) {
- guint kk = k-xres;
- ws++;
- if (levels[kk]) {
- *(iter_k++) = revindex[kk];
- n++;
- }
- else
- rs += data[kk];
- }
- if (j) {
- guint kk = k-1;
- ws++;
- if (levels[kk]) {
- *(iter_k++) = revindex[kk];
- n++;
- }
- else
- rs += data[kk];
- }
- if (j < xres-1) {
- guint kk = k+1;
- ws++;
- if (levels[kk]) {
- *(iter_k++) = revindex[kk];
- n++;
- }
- else
- rs += data[kk];
- }
- if (i < yres-1) {
- guint kk = k+xres;
- ws++;
- if (levels[kk]) {
- *(iter_k++) = revindex[kk];
- n++;
- }
- else
- rs += data[kk];
- }
-
- iterators->z[ipt] = data[k];
- iterators->rhs[ipt] = rs/ws;
- iterators->n[ipt+1] = iterators->n[ipt] + n;
- while (n--)
- *(iter_w++) = 1.0/ws;
- }
-}
-
-static void
-calculate_f(LaplaceIterators *iterators)
-{
- const guint *n = iterators->n, *k = iterators->k;
- const gdouble *z = iterators->z, *iz = iterators->z,
- *w = iterators->w, *rhs = iterators->rhs;
- gdouble *f = iterators->f;
- guint l, ipt;
-
- for (ipt = iterators->len; ipt; ipt--, n++, z++, rhs++, f++) {
- gdouble lhs = 0.0;
- for (l = *(n + 1) - *n; l; l--, k++, w++)
- lhs += iz[*k]*(*w);
- *f = (*z - lhs) - *rhs;
- }
-}
-
-static void
-iterate_simple(LaplaceIterators *iterators)
-{
- const gdouble *f = iterators->f;
- gdouble *z = iterators->z;
- guint ipt;
-
- for (ipt = iterators->len; ipt; ipt--, z++, f++)
- *z -= 0.8*(*f);
-}
-
-static void
-matrix_multiply(LaplaceIterators *iterators, const gdouble *v, gdouble *r)
-{
- const guint *n = iterators->n, *k = iterators->k;
- const gdouble *w = iterators->w, *iv = v;
- guint l, ipt;
-
- for (ipt = iterators->len; ipt; ipt--, n++, v++, r++) {
- gdouble s = 0.0;
-
- for (l = *(n + 1) - *n; l; l--, k++, w++)
- s += iv[*k]*(*w);
-
- *r = *v - s;
- }
-}
-
-static gboolean
-iterate_conj_grad(LaplaceIterators *iterators)
-{
- gdouble *z, *v = iterators->v, *t = iterators->t, *f = iterators->f;
- gdouble S = 0.0, phi = 0.0, phiS;
- guint ipt;
-
- // Temporary quantities: t = A.v, S = v.t, φ = v.f
- matrix_multiply(iterators, iterators->v, iterators->t);
-
- for (ipt = iterators->len; ipt; ipt--, v++, t++, f++) {
- S += (*v)*(*t);
- phi += (*v)*(*f);
- }
-
- if (S < 1e-16)
- return TRUE;
-
- // New value and f = A.z-b
- phiS = phi/S;
- z = iterators->z;
- v = iterators->v;
- f = iterators->f;
- t = iterators->t;
- for (ipt = iterators->len; ipt; ipt--, z++, v++, f++, t++) {
- *z -= phiS*(*v);
- *f -= phiS*(*t);
- }
-
- // New v
- phi = 0.0;
- f = iterators->f;
- t = iterators->t;
- for (ipt = iterators->len; ipt; ipt--, t++, f++)
- phi += (*t)*(*f);
-
- phiS = phi/S;
- v = iterators->v;
- f = iterators->f;
- for (ipt = iterators->len; ipt; ipt--, v++, f++)
- *v = *f - phiS*(*v);
-
- return FALSE;
-}
-
-static void
-move_result_to_data(const LaplaceIterators *iterators, gdouble *data)
-{
- guint ipt;
-
- for (ipt = 0; ipt < iterators->len; ipt++)
- data[iterators->gindex[ipt]] = iterators->z[ipt];
-}
-
-static void
-interpolate(guint *levels, gdouble *data, guint xres, guint yres, guint step)
-{
- guint nx = (xres + step-1)/step, ny = (yres + step-1)/step,
- vstep = xres*step;
- guint i, j;
-
- if (nx < 3 || ny < 3)
- return;
-
- // Six-point interpolation
- for (i = 0; i < ny; i++) {
- if (i % 2 == 0) {
- // Interpolated point horizontally in between two other points.
- for (j = 1; j < nx; j += 2) {
- guint k = (i*xres + j)*step;
- if (levels[k] != NONE)
- continue;
-
- if (i >= 2 && i < ny-2 && j < nx-1) {
- data[k] = (0.375*(data[k-step] + data[k+step])
- + 0.0625*(data[k-2*vstep-step]
- + data[k-2*vstep+step]
- + data[k+2*vstep-step]
- + data[k+2*vstep+step]));
- levels[k] = (levels[k-step] + levels[k+step])/2;
- }
- else if (j < nx-1 && i < ny-2) {
- // Upper boundary is aligned.
- data[k] = (0.375*(data[k-step] + data[k+step])
- + 0.125*(data[k+2*vstep-step]
- + data[k+2*vstep+step]));
- levels[k] = (levels[k-step] + levels[k+step])/2;
- }
- else if (j < nx-1 && i >= 2) {
- // Lower boundary can be unaligned.
- guint bdist = yres-1 - i*step;
- guint a = 4*bdist + 3*step, b = step, d = 8*(bdist + step);
- data[k] = (a*(data[k-step] + data[k+step])
- + b*(data[k-2*vstep-step]
- + data[k-2*vstep+step]))/d;
- levels[k] = (levels[k-step] + levels[k+step])/2;
- }
- else if (i >= 2 && i < ny-2) {
- // Right boundary can be unaligned.
- guint bdist = xres-1 - j*step;
- guint a = 6*step - 4*bdist, b = 2*bdist + step, d = 8*step;
- data[k] = (a*data[k-step]
- + b*(data[k-2*vstep-step]
- + data[k+2*vstep-step]))/d;
- levels[k] = levels[k-step];
- }
- else if (i < ny-2) {
- // Upper boundary is aligned, right boundary can be
- // unaligned.
- guint bdist = xres-1 - j*step;
- guint a = 3*step - 2*bdist, b = 2*bdist + step, d = 4*step;
- data[k] = (a*data[k-step] + b*data[k-step+2*vstep])/d;
- levels[k] = levels[k-step];
- }
- else if (i >= 2) {
- // Lower and right boundaries can be both unaligned.
- guint xbdist = xres-1 - j*step;
- guint ybdist = yres-1 - i*step;
- guint a = 3*step + 4*ybdist - 2*xbdist, b = 2*xbdist + step;
- data[k] = (a*data[k-step] + b*data[k-2*vstep])/(a + b);
- levels[k] = levels[k-step];
- }
- else {
- g_assert_not_reached();
- }
- }
- }
- else {
- // Interpolated point vertically in between two other points.
- for (j = 0; j < nx; j += 2) {
- guint k = (i*xres + j)*step;
- if (levels[k] != NONE)
- continue;
-
- if (j >= 2 && j < nx-2 && i < ny-1) {
- data[k] = (0.375*(data[k-vstep] + data[k+vstep])
- + 0.0625*(data[k-vstep-2*step]
- + data[k-vstep+2*step]
- + data[k+vstep-2*step]
- + data[k+vstep+2*step]));
- levels[k] = (levels[k-vstep] + levels[k+vstep])/2;
- }
- else if (j < nx-2 && i < ny-1) {
- // Left boundary is aligned.
- data[k] = (0.375*(data[k-vstep] + data[k+vstep])
- + 0.125*(data[k-vstep+2*step]
- + data[k+vstep+2*step]));
- levels[k] = (levels[k-vstep] + levels[k+vstep])/2;
- }
- else if (j >= 2 && i < ny-1) {
- // Right boundary can be unaligned.
- guint bdist = xres-1 - j*step;
- guint a = 4*bdist + 3*step, b = step, d = 8*(bdist + step);
- data[k] = (a*(data[k-vstep] + data[k+vstep])
- + b*(data[k-vstep-2*step]
- + data[k+vstep-2*step]))/d;
- levels[k] = (levels[k-vstep] + levels[k+vstep])/2;
- }
- else if (j >= 2 && j < nx-2) {
- // Lower boundary can be unaligned.
- guint bdist = yres-1 - i*step;
- guint a = 6*step - 4*bdist, b = 2*bdist + step, d = 8*step;
- data[k] = (a*data[k-vstep]
- + b*(data[k-vstep-2*step]
- + data[k-vstep+2*step]))/d;
- levels[k] = levels[k-vstep];
- }
- else if (j < nx-2) {
- // Left boundary is aligned, lower boundary can be
- // unaligned.
- guint bdist = yres-1 - i*step;
- guint a = 3*step - 2*bdist, b = 2*bdist + step, d = 4*step;
- data[k] = (a*data[k-vstep] + b*data[k+2*step-vstep])/d;
- levels[k] = levels[k-vstep];
- }
- else if (j >= 2) {
- // Lower and right boundaries can be both unaligned.
- guint xbdist = xres-1 - j*step;
- guint ybdist = yres-1 - i*step;
- guint a = 3*step + 4*xbdist - 2*ybdist, b = 2*ybdist + step;
- data[k] = (a*data[k-vstep] + b*data[k-2*step])/(a + b);
- levels[k] = levels[k-vstep];
- }
- else {
- g_assert_not_reached();
- }
- }
- }
- }
-
- // Four-point interpolation
- for (i = 1; i < ny; i += 2) {
- for (j = 1; j < nx; j += 2) {
- guint k = (i*xres + j)*step;
- if (levels[k] != NONE)
- continue;
-
- if (i < ny-1 && j < nx-1) {
- data[k] = 0.25*(data[k-vstep] + data[k+vstep]
- + data[k-step] + data[k+step]);
- levels[k] = (levels[k-vstep] + levels[k+vstep]
- + levels[k-step] + levels[k+step])/4;
- }
- else if (i < ny-1) {
- // Right boundary can be unaligned.
- guint bdist = xres-1 - j*step;
- guint a = 2*bdist + step, b = 2*step, d = 4*(bdist + step);
- data[k] = (a*(data[k-vstep] + data[k+vstep])
- + b*data[k-step])/d;
- levels[k] = (levels[k-vstep] + levels[k+vstep])/2;
- }
- else if (j < nx-1) {
- // Lower boundary can be unaligned.
- guint bdist = yres-1 - i*step;
- guint a = 2*bdist + step, b = 2*step, d = 4*(bdist + step);
- data[k] = (a*(data[k-step] + data[k+step])
- + b*data[k-vstep])/d;
- levels[k] = (levels[k-step] + levels[k+step])/2;
- }
- else {
- // Right and lower boundary can be unaligned both.
- guint xbdist = xres-1 - j*step;
- guint ybdist = yres-1 - i*step;
- guint a = 2*ybdist + step, b = 2*xbdist + step;
- data[k] = (a*data[k-step] + b*data[k-vstep])/(a + b);
- levels[k] = (levels[k-step] + levels[k-vstep])/2;
- }
- }
- }
-}
-
-static void
-reconstruct(guint *levels, gdouble *data, guint xres, guint yres, guint level)
-{
- guint step = 1 << ((level - 1)/2);
-
- while (step) {
- interpolate(levels, data, xres, yres, step);
- step /= 2;
- }
-}
-
-static void
-init_data_simple(gdouble *data, guint *levels, guint xres, guint yres)
-{
- guint i, j, kk, level = 1;
- gboolean finished = FALSE;
-
- for (kk = 0; kk < xres*yres; kk++)
- levels[kk] = !!levels[kk];
-
- while (!finished) {
- finished = TRUE;
- for (i = 0; i < yres; i++) {
- for (j = 0; j < xres; j++) {
- guint k = i*xres + j, n = 0;
- gdouble s = 0;
-
- if (levels[k] != level)
- continue;
-
- if (i && levels[k-xres] < level) {
- s += data[k-xres];
- n++;
- }
- if (j && levels[k-1] < level) {
- s += data[k-1];
- n++;
- }
- if (j+1 < xres && levels[k+1] < level) {
- s += data[k+1];
- n++;
- }
- if (i+1 < yres && levels[k+xres] < level) {
- s += data[k+xres];
- n++;
- }
-
- if (n) {
- data[k] = s/n;
- }
- else {
- levels[k] = level+1;
- finished = FALSE;
- }
- }
- }
- level++;
- }
-}
-
-static void
-laplace_sparse(LaplaceIterators *iterators,
- guint *revindex,
- gdouble *data, guint *levels, guint xres, guint yres,
- guint nconjgrad, guint nsimple)
-{
- // Revindex is filled later, use is as a temporary xres*yres-sized buffer.
- guint maxlevel = build_levels(levels, revindex, xres, yres);
- gboolean finished = FALSE;
- guint iter;
-
- if (maxlevel < 3) {
- // If the grain is nowhere thick just init the interior using boundary
- // conditions and continue with dense iteration. Note for single-pixel
- // grains init_data_simple() already produces the solution.
- init_data_simple(data, levels, xres, yres);
- return;
- }
-
- build_sparse_iterators(iterators, revindex, levels, data, xres, yres);
- calculate_f(iterators),
- gwy_assign(iterators->v, iterators->f, iterators->len);
- for (iter = 0; iter < nconjgrad; iter++) {
- if ((finished = iterate_conj_grad(iterators)))
- break;
- }
- if (!finished) {
- for (iter = 0; iter < nsimple; iter++) {
- calculate_f(iterators);
- iterate_simple(iterators);
- }
- }
- move_result_to_data(iterators, data);
- reconstruct(levels, data, xres, yres, maxlevel);
-}
-
-static void
-laplace_dense(LaplaceIterators *iterators,
- guint *revindex,
- gdouble *data, guint *levels, guint xres, guint yres,
- guint nconjgrad, guint nsimple)
-{
- gboolean finished = FALSE;
- guint iter;
-
- build_dense_iterators(iterators, revindex, levels, data, xres, yres);
- calculate_f(iterators);
- gwy_assign(iterators->v, iterators->f, iterators->len);
- for (iter = 0; iter < nconjgrad; iter++) {
- if ((finished = iterate_conj_grad(iterators)))
- break;
- }
- if (!finished) {
- for (iter = 0; iter < nsimple; iter++) {
- calculate_f(iterators);
- iterate_simple(iterators);
- }
- }
- move_result_to_data(iterators, data);
-}
-
-// Extract grain data from full-sized @grains and @data to workspace-sized
-// @levels and @z.
-static void
-extract_grain(const gint *grains,
- const gdouble *data,
- guint xres,
- const GwyDataFieldPart *fpart,
- gint grain_id,
- guint *levels,
- gdouble *z)
-{
- guint i, j;
- const gint *grow;
- guint *lrow;
-
- for (i = 0; i < fpart->height; i++) {
- gwy_assign(z + i*fpart->width,
- data + (i + fpart->row)*xres + fpart->col,
- fpart->width);
- grow = grains + (i + fpart->row)*xres + fpart->col;
- lrow = levels + i*fpart->width;
- for (j = fpart->width; j; j--, lrow++, grow++)
- *lrow = (*grow == grain_id);
- }
-}
-
-// Put interpolated grain data @z back to @data.
-static void
-insert_grain(const gint *grains,
- gdouble *data,
- guint xres,
- const GwyDataFieldPart *fpart,
- gint grain_id,
- const gdouble *z)
-{
- guint i, j;
-
- for (i = 0; i < fpart->height; i++) {
- const gdouble *zrow = z + i*fpart->width;
- const gint *grow = grains + (i + fpart->row)*xres + fpart->col;
- gdouble *drow = data + (i + fpart->row)*xres + fpart->col;
- for (j = fpart->width; j; j--, zrow++, drow++, grow++) {
- if (*grow == grain_id)
- *drow = *zrow;
- }
- }
-}
-
-static void
-enlarge_field_part(GwyDataFieldPart *fpart, guint xres, guint yres)
-{
- if (fpart->col) {
- fpart->col--;
- fpart->width++;
- }
- if (fpart->col + fpart->width < xres)
- fpart->width++;
-
- if (fpart->row) {
- fpart->row--;
- fpart->height++;
- }
- if (fpart->row + fpart->height < yres)
- fpart->height++;
-}
-
-/*
- * Find the largest
- * - grain size in the terms of pixels: this is the number of iterators for
- * dense iteration
- * - grain size in the terms of extended bounding box (i.e. bounding box
- * including one more line of pixels to each side, if possible): this is
- * the size of levels, revindex and data arrays.
- */
-static void
-find_largest_sizes(guint xres, guint yres,
- const GwyDataFieldPart *bboxes,
- const guint *sizes,
- guint gfrom, guint gto,
- guint *size,
- guint *bboxsize)
-{
- guint gno, bs;
- GwyDataFieldPart bbox;
-
- *size = *bboxsize = 0;
- for (gno = gfrom; gno <= gto; gno++) {
- if (sizes[gno] > *size)
- *size = sizes[gno];
-
- bbox = bboxes[gno];
- enlarge_field_part(&bbox, xres, yres);
- bs = bbox.width * bbox.height;
- if (bs > *bboxsize)
- *bboxsize = bs;
- }
-}
-
-/**
- * gwy_data_field_laplace_solve:
- * @field: A two-dimensional data field.
- * @mask: A two-dimensional data field containing mask defining the areas to
- * interpolate.
- * @grain_id: The id number of the grain to replace with the solution of
- * Laplace equation, from 1 to @ngrains (see
- * gwy_data_field_grain_numbers()). Passing 0 means to replace the
- * entire empty space outside grains while passing a negative value
- * means to replace the entire masked area.
- * @qprec: Speed-accuracy tuning parameter. Pass 1.0 for the default that is
- * fast and sufficiently precise.
- *
- * Replaces masked areas by the solution of Laplace equation.
- *
- * The boundary conditions on mask boundaries are Dirichlet with values given
- * by pixels on the outer boundary of the masked area. Boundary conditions at
- * field edges are Neumann conditions ∂z/∂n=0 where n denotes the normal to the
- * edge. If entire area of @field is to be replaced the problem is
- * underspecified; @field will be filled with zeroes.
- *
- * For the default value of @qprec the the result should be good enough for any
- * image processing purposes with the typical local error of order 10⁻⁵ for
- * very large grains and possibly much smaller for small grains. You can lower
- * @qprec down to about 0.3 or even 0.2 if speed is crucial and some precision
- * can be sacrificed. Below that the result just starts becoming somewhat
- * worse for not much speed increase. Conversely, you may wish to increase
- * @qprec up to 3 or even 5 if accuracy is important and you can afford the
- * increased computation time.
- *
- * Since: 2.47
- **/
-void
-gwy_data_field_laplace_solve(GwyDataField *field,
- GwyDataField *mask,
- gint grain_id,
- gdouble qprec)
-{
- GwyDataField *ourmask;
- guint xres, yres, maxsize, maxbboxsize;
- gint ngrains, gfrom, gto;
- GwyDataFieldPart *bboxes;
- LaplaceIterators *iterators;
- guint *levels, *revindex;
- gint *grains;
- guint *sizes;
- gdouble *z;
-
- g_return_if_fail(GWY_IS_DATA_FIELD(mask));
- g_return_if_fail(GWY_IS_DATA_FIELD(field));
- g_return_if_fail(mask->xres == field->xres);
- g_return_if_fail(mask->yres == field->yres);
-
- // To fill the entire empty space we need to divide it to grains too so
- // work with the inverted mask.
- if (grain_id == 0) {
- ourmask = gwy_data_field_duplicate(mask);
- gwy_data_field_grains_invert(ourmask);
- grain_id = -1;
- }
- else
- ourmask = g_object_ref((gpointer)mask);
-
- xres = field->xres;
- yres = field->yres;
- grains = g_new0(gint, xres*yres);
- ngrains = gwy_data_field_number_grains(ourmask, grains);
- if (grain_id > ngrains) {
- g_free(grains);
- g_return_if_fail(grain_id <= ngrains);
- }
-
- bboxes = (GwyDataFieldPart*)gwy_data_field_get_grain_bounding_boxes(ourmask,
- ngrains,
- grains,
- NULL);
- sizes = (guint*)gwy_data_field_get_grain_sizes(ourmask, ngrains, grains,
- NULL);
-
- // The underspecified case.
- if (ngrains == 1 && sizes[1] == xres*yres) {
- gwy_data_field_clear(field);
- g_object_unref(ourmask);
- g_free(sizes);
- g_free(bboxes);
- g_free(grains);
- return;
- }
-
- gfrom = (grain_id < 0) ? 1 : grain_id;
- gto = (grain_id < 0) ? ngrains : grain_id;
-
- // Allocate everything at the maximum size to avoid reallocations.
- find_largest_sizes(xres, yres, bboxes, sizes, gfrom, gto,
- &maxsize, &maxbboxsize);
-
- levels = g_new(guint, maxbboxsize);
- revindex = g_new(guint, maxbboxsize);
- z = g_new(gdouble, maxbboxsize);
- iterators = laplace_iterators_new(maxsize, 5);
-
- for (grain_id = gfrom; grain_id <= gto; grain_id++) {
- GwyDataFieldPart bbox = bboxes[grain_id];
- enlarge_field_part(&bbox, xres, yres);
- extract_grain(grains, field->data, xres, &bbox, grain_id, levels, z);
- laplace_sparse(iterators, revindex, z, levels,
- bbox.width, bbox.height, 60*qprec, 20*qprec);
- if (sizes[grain_id] > 1)
- laplace_dense(iterators, revindex, z, levels,
- bbox.width, bbox.height, 60*qprec, 30*qprec);
- insert_grain(grains, field->data, xres, &bbox, grain_id, z);
- }
-
- laplace_iterators_free(iterators);
- g_free(z);
- g_free(levels);
- g_free(revindex);
- g_free(sizes);
- g_free(bboxes);
- g_free(grains);
-
- g_object_unref(ourmask);
- gwy_data_field_invalidate(field);
-}
-
-
-
-
+typedef struct {
+ gdouble max;
+ gdouble x;
+ gdouble y;
+ gdouble d;
+ gdouble q;
+ guint basecount;
+} LatticeMaximumInfo;
+static void gwy_data_field_distort_internal(GwyDataField *source,
+ GwyDataField *dest,
+ GwyInterpolationType interp,
+ GwyExteriorType exterior,
+ gdouble fill_value,
+ const GwyXY *coords,
+ GwyCoordTransform2DFunc invtrans,
+ gpointer user_data);
+static gdouble unrotate_refine_correction (GwyDataLine *derdist,
+ guint m,
+ gdouble phi);
+static void compute_fourier_coeffs (gint nder,
+ const gdouble *der,
+ guint symmetry,
+ gdouble *st,
+ gdouble *ct);
/**
* gwy_data_field_mask_outliers:
@@ -1695,7 +214,7 @@ gwy_data_field_unrotate_find_corrections(GwyDataLine *derdist,
static const guint symm[] = { 2, 3, 4, 6 };
GwyPlaneSymmetry guess, t;
gint nder;
- gsize j, m;
+ guint j, m;
gdouble avg, max, total, phi;
const gdouble *der;
gdouble sint[G_N_ELEMENTS(symm)], cost[G_N_ELEMENTS(symm)];
@@ -2200,86 +719,705 @@ gwy_data_field_affine(GwyDataField *source,
g_object_unref(coeffield);
}
+static gdouble
+matrix2_det(const gdouble *m)
+{
+ return m[0]*m[3] - m[1]*m[2];
+}
+
+/* Permit dest = src */
+static void
+matrix2_vector2(gdouble *dest, const gdouble *m, const gdouble *src)
+{
+ gdouble xy[2];
+
+ xy[0] = m[0]*src[0] + m[1]*src[1];
+ xy[1] = m[2]*src[0] + m[3]*src[1];
+ dest[0] = xy[0];
+ dest[1] = xy[1];
+}
+
+/* Permit dest = src */
+static void
+matrix2_matrix2(gdouble *dest, const gdouble *m, const gdouble *src)
+{
+ gdouble xy[4];
+
+ xy[0] = m[0]*src[0] + m[1]*src[2];
+ xy[1] = m[0]*src[1] + m[1]*src[3];
+ xy[2] = m[2]*src[0] + m[3]*src[2];
+ xy[3] = m[2]*src[1] + m[3]*src[3];
+ dest[0] = xy[0];
+ dest[1] = xy[1];
+ dest[2] = xy[2];
+ dest[3] = xy[3];
+}
+
+/* Permit dest = src */
+static void
+invert_matrix2(gdouble *dest, const gdouble *src)
+{
+ gdouble D = matrix2_det(src);
+ gdouble xy[4];
+
+ gwy_debug("D %g", D);
+ xy[0] = src[3]/D;
+ xy[1] = -src[1]/D;
+ xy[2] = -src[2]/D;
+ xy[3] = src[0]/D;
+ dest[0] = xy[0];
+ dest[1] = xy[1];
+ dest[2] = xy[2];
+ dest[3] = xy[3];
+}
+
+static void
+corner_max(gdouble x, gdouble y, const gdouble *m, gdouble *vmax)
+{
+ gdouble v[2];
+
+ v[0] = x;
+ v[1] = y;
+ matrix2_vector2(v, m, v);
+ vmax[0] = MAX(vmax[0], fabs(v[0]));
+ vmax[1] = MAX(vmax[1], fabs(v[1]));
+}
+
+static void
+solve_transform_real(const gdouble *a1a2, const gdouble *a1a2_corr, gdouble *m)
+{
+ gdouble tmp[4];
+ tmp[0] = a1a2[0];
+ tmp[1] = a1a2[2];
+ tmp[2] = a1a2[1];
+ tmp[3] = a1a2[3];
+ invert_matrix2(m, tmp);
+ tmp[0] = a1a2_corr[0];
+ tmp[1] = a1a2_corr[2];
+ tmp[2] = a1a2_corr[1];
+ tmp[3] = a1a2_corr[3];
+ matrix2_matrix2(m, tmp, m);
+}
+
/**
- * gwy_data_line_correct_laplace:
- * @data_line: A data line.
- * @mask_line: Mask of places to be corrected.
+ * gwy_data_field_affine_prepare:
+ * @source: Source data field.
+ * @dest: Destination data field.
+ * @a1a2: Lattice vectors (or generally base vectors) in @source, as an array
+ * of four components: @x1, @y1, @x2 and @y2.
+ * @a1a2_corr: Correct lattice vectors (or generally base vectors) @dest should
+ * have after the affine transform, in the same form as @a1a2.
+ * @invtrans: Inverse transform as an array of six values to be filled
+ * according to gwy_data_field_affine() specification.
+ * @scaling: How (or if) to scale the correct lattice vectors.
+ * @prevent_rotation: %TRUE to prevent rotation of the data by rotating
+ * @a1a2_corr as a whole to a direction preserving the
+ * data orientation. %FALSE to take @a1a2_corr as given.
+ * @oversampling: Oversampling factor. Values larger than 1 mean smaller
+ * pixels (and more of them) in @dest, values smaller than 1
+ * the opposite. Pass 1.0 for the default pixel size choice.
*
- * Fills missing values in a data line using Laplace data correction.
+ * Resolves an affine transformation of a data field in the horizontal plane.
*
- * Both data lines must have the same number of values.
+ * This function calculates suitable arguments for gwy_data_field_affine()
+ * from given images and lattice vectors (in real coordinates).
*
- * For one-dimensional data the missing data interpolation is explicit.
- * Interior missing segments are filled with linear dependence between the edge
- * points. Missing segments with one end open are filled with the edge value.
+ * Data field @dest will be resized and its real dimensions and units set in
+ * anticipation of gwy_data_field_affine(). Its contents will be destroyed.
*
- * Returns: %TRUE if the line contained any data at all. If there are no data
- * the %FALSE is returned and @data_line is filled with zeros.
+ * Note that @a1a2_corr is an input-output parameter. In general, the vectors
+ * will be modified according to @scaling and @prevent_rotation to the actual
+ * vectors in @dest after the transformation. Only if @prevent_rotation is
+ * %FALSE and @scaling is %GWY_AFFINE_SCALING_AS_GIVEN the vectors are
+ * preserved.
*
- * Since: 2.45
+ * Since: 2.49
**/
-gboolean
-gwy_data_line_correct_laplace(GwyDataLine *data_line,
- GwyDataLine *mask_line)
+void
+gwy_data_field_affine_prepare(GwyDataField *source,
+ GwyDataField *dest,
+ const gdouble *a1a2,
+ gdouble *a1a2_corr,
+ gdouble *invtrans,
+ GwyAffineScalingType scaling,
+ gboolean prevent_rotation,
+ gdouble oversampling)
{
- gint start = -1, i, res;
- const gdouble *m;
-
- g_return_val_if_fail(GWY_IS_DATA_LINE(data_line), FALSE);
- g_return_val_if_fail(GWY_IS_DATA_LINE(mask_line), FALSE);
- g_return_val_if_fail(data_line->res == mask_line->res, FALSE);
-
- res = data_line->res;
- m = mask_line->data;
- for (i = 0; i < res; i++) {
- if (start == -1) {
- if (m[i] > 0.0)
- start = i;
- }
- else {
- if (!(m[i] > 0.0)) {
- interpolate_segment(data_line, start, i-1);
- start = -1;
+ gdouble dx, dy, sdx, sdy, alpha, q;
+ gdouble vmax[2], tmp[4];
+ guint xres, yres, i;
+
+ g_return_if_fail(GWY_IS_DATA_FIELD(source));
+ g_return_if_fail(GWY_IS_DATA_FIELD(dest));
+ g_return_if_fail(a1a2);
+ g_return_if_fail(a1a2_corr);
+ g_return_if_fail(invtrans);
+
+ if (!(oversampling > 0.0)) {
+ g_warning("Oversampling must be positive.");
+ oversampling = 1.0;
+ }
+ sdx = source->xreal/source->xres;
+ sdy = source->yreal/source->yres;
+
+ gwy_debug("a1a2 %g %g %g %g", a1a2[0], a1a2[1], a1a2[2], a1a2[3]);
+ gwy_debug("a1a2_corr %g %g %g %g",
+ a1a2_corr[0], a1a2_corr[1], a1a2_corr[2], a1a2_corr[3]);
+ /* This is an approximate rotation correction to get the base more or less
+ * oriented in the plane as expected and not upside down. */
+ if (prevent_rotation) {
+ alpha = atan2(-a1a2[1], a1a2[0]);
+ tmp[0] = tmp[3] = cos(alpha);
+ tmp[1] = sin(alpha);
+ tmp[2] = -sin(alpha);
+ matrix2_vector2(a1a2_corr, tmp, a1a2_corr);
+ matrix2_vector2(a1a2_corr + 2, tmp, a1a2_corr + 2);
+ }
+
+ solve_transform_real(a1a2, a1a2_corr, invtrans);
+ gwy_debug("invtrans %g %g %g %g",
+ invtrans[0], invtrans[1], invtrans[2], invtrans[3]);
+
+ /* This is the exact rotation correction. */
+ if (prevent_rotation) {
+ alpha = atan2(invtrans[2], invtrans[0]);
+ gwy_debug("alpha %g", alpha);
+ tmp[0] = tmp[3] = cos(alpha);
+ tmp[1] = sin(alpha);
+ tmp[2] = -sin(alpha);
+ matrix2_matrix2(invtrans, tmp, invtrans);
+ }
+
+ if (scaling == GWY_AFFINE_SCALING_PRESERVE_AREA)
+ q = 1.0/sqrt(fabs(matrix2_det(invtrans)));
+ else if (scaling == GWY_AFFINE_SCALING_PRESERVE_X)
+ q = 1.0/hypot(invtrans[0], invtrans[2]);
+ else
+ q = 1.0;
+
+ for (i = 0; i < 4; i++) {
+ invtrans[i] *= q;
+ /* To create the corrected lattice selection on result. */
+ a1a2_corr[i] *= q;
+ }
+ gwy_debug("invtrans %g %g %g %g",
+ invtrans[0], invtrans[1], invtrans[2], invtrans[3]);
+
+ vmax[0] = vmax[1] = 0.0;
+ corner_max(source->xreal, source->yreal, invtrans, vmax);
+ corner_max(-source->xreal, source->yreal, invtrans, vmax);
+ corner_max(source->xreal, -source->yreal, invtrans, vmax);
+ corner_max(-source->xreal, -source->yreal, invtrans, vmax);
+
+ /* Prevent information loss by using a sufficient resolution to represent
+ * original pixels. */
+ tmp[0] = sdx;
+ tmp[1] = tmp[2] = 0.0;
+ tmp[3] = sdy;
+ gwy_debug("dxdy %g %g", tmp[0], tmp[3]);
+ matrix2_matrix2(tmp, invtrans, tmp);
+ gwy_debug("pix_corr %g %g %g %g", tmp[0], tmp[1], tmp[2], tmp[3]);
+ dx = hypot(tmp[0]/G_SQRT2, tmp[1]/G_SQRT2);
+ dy = hypot(tmp[2]/G_SQRT2, tmp[3]/G_SQRT2);
+ dx = dy = MIN(dx, dy)/oversampling;
+ xres = GWY_ROUND(vmax[0]/dx);
+ yres = GWY_ROUND(vmax[1]/dy);
+ gwy_debug("dxdy_corr %g %g", dx, dy);
+ gwy_debug("res %u %u", xres, yres);
+
+ gwy_data_field_resample(dest, xres, yres, GWY_INTERPOLATION_NONE);
+ dest->xreal = dx*xres;
+ dest->yreal = dy*yres;
+ /* We could preserve the centre but that would be strange for the typical
+ * case when there are no offsets. */
+ dest->xoff = dest->yoff = 0.0;
+ gwy_data_field_copy_units(source, dest);
+
+ /* So far, we used invtrans as a temporary matrix. Now really fill it with
+ * the inverse transformation. */
+ invert_matrix2(invtrans, invtrans);
+ gwy_debug("minv %g %g %g %g",
+ invtrans[0], invtrans[1], invtrans[2], invtrans[3]);
+
+ /* Multiply from right by pixel-to-real matrix in the corrected field. */
+ tmp[0] = dx;
+ tmp[1] = tmp[2] = 0.0;
+ tmp[3] = dy;
+ matrix2_matrix2(invtrans, invtrans, tmp);
+ /* and from left by real-to-pixel matrix in the original field. */
+ tmp[0] = 1.0/sdx;
+ tmp[1] = tmp[2] = 0.0;
+ tmp[3] = 1.0/sdy;
+ matrix2_matrix2(invtrans, tmp, invtrans);
+ gwy_debug("minvpix %g %g %g %g",
+ invtrans[0], invtrans[1], invtrans[2], invtrans[3]);
+
+ invtrans[4] = 0.5*xres;
+ invtrans[5] = 0.5*yres;
+ matrix2_vector2(invtrans + 4, invtrans, invtrans + 4);
+ invtrans[4] = 0.5*source->xres - invtrans[4];
+ invtrans[5] = 0.5*source->yres - invtrans[5];
+ gwy_debug("b %g %g", invtrans[4], invtrans[5]);
+}
+
+static void
+maybe_swap_axes(gdouble *a1a2)
+{
+ gdouble phi;
+
+ phi = fmod(atan2(a1a2[1], a1a2[0]) + 4.0*G_PI - atan2(a1a2[3], a1a2[2]),
+ 2.0*G_PI);
+ if (phi > G_PI) {
+ GWY_SWAP(gdouble, a1a2[0], a1a2[2]);
+ GWY_SWAP(gdouble, a1a2[1], a1a2[3]);
+ }
+}
+
+static gboolean
+transform_vectors_real_freq(gdouble *xy)
+{
+ gdouble D = matrix2_det(xy);
+ gdouble a = fabs(xy[0]*xy[3]) + fabs(xy[1]*xy[2]);
+
+ if (fabs(D)/a < 1e-9)
+ return FALSE;
+
+ invert_matrix2(xy, xy);
+ /* Transpose. */
+ GWY_SWAP(gdouble, xy[1], xy[2]);
+ return TRUE;
+}
+
+static gint
+compare_maxima(gconstpointer pa, gconstpointer pb)
+{
+ const LatticeMaximumInfo *a = (const LatticeMaximumInfo*)pa;
+ const LatticeMaximumInfo *b = (const LatticeMaximumInfo*)pb;
+
+ if (a->basecount*a->q > b->basecount*b->q)
+ return -1;
+ if (a->basecount*a->q < b->basecount*b->q)
+ return 1;
+
+ if (a->q > b->q)
+ return -1;
+ if (a->q < b->q)
+ return 1;
+
+ /* Ensure comparison stability. This should play no role in significance
+ * sorting. */
+ if (a->y < b->y)
+ return -1;
+ if (a->y > b->y)
+ return 1;
+ if (a->x < b->x)
+ return -1;
+ if (a->x > b->x)
+ return 1;
+ return 0;
+}
+
+/* @dfield is ACF or PSDF here. */
+static gboolean
+guess_lattice(GwyDataField *dfield, gdouble *a1a2, gboolean is_psdf)
+{
+ enum { nquantities = 3 };
+ GwyGrainQuantity quantities[nquantities] = {
+ GWY_GRAIN_VALUE_MAXIMUM,
+ GWY_GRAIN_VALUE_CENTER_X,
+ GWY_GRAIN_VALUE_CENTER_Y,
+ };
+ GwyDataField *smoothed = NULL, *mask;
+ gdouble *values[nquantities];
+ LatticeMaximumInfo *maxima;
+ gint *grains;
+ guint i, j, k, ngrains;
+ gdouble dh, cphi, sphi, phi, l1, l2, d, x, y;
+ gboolean ok = FALSE;
+
+ /* Mark local maxima. */
+ mask = gwy_data_field_new_alike(dfield, FALSE);
+ if (is_psdf) {
+ smoothed = gwy_data_field_duplicate(dfield);
+ gwy_data_field_filter_gaussian(smoothed, 1.2);
+ dfield = smoothed;
+ }
+
+ gwy_data_field_mark_extrema(dfield, mask, TRUE);
+ grains = g_new0(gint, dfield->xres*dfield->yres);
+ ngrains = gwy_data_field_number_grains(mask, grains);
+ GWY_OBJECT_UNREF(mask);
+
+ /* Find the position and value of each. */
+ for (i = 0; i < nquantities; i++)
+ values[i] = g_new(gdouble, ngrains+1);
+
+ gwy_data_field_grains_get_quantities(dfield, values,
+ quantities, nquantities,
+ ngrains, grains);
+ GWY_OBJECT_UNREF(smoothed);
+
+ maxima = g_new(LatticeMaximumInfo, ngrains);
+ dh = hypot(dfield->xreal/dfield->xres, dfield->yreal/dfield->yres);
+ for (i = 0; i < ngrains; i++) {
+ maxima[i].max = values[0][i+1];
+ maxima[i].x = values[1][i+1];
+ maxima[i].y = values[2][i+1];
+ maxima[i].d = hypot(maxima[i].x, maxima[i].y);
+ maxima[i].q = maxima[i].max/(maxima[i].d + 5.0*dh);
+ maxima[i].basecount = 0;
+ }
+ for (i = 0; i < nquantities; i++)
+ g_free(values[i]);
+
+ /* Remove the central peak, i.e. anything too close to the centre */
+ i = j = 0;
+ while (i < ngrains) {
+ d = maxima[i].d;
+ maxima[j] = maxima[i];
+ if (d >= 1.8*dh)
+ j++;
+ i++;
+ }
+ ngrains = j;
+
+ if ((is_psdf && ngrains < 4) || (!is_psdf && ngrains < 14)) {
+ gwy_debug("Too few maxima (after centre removal): %d.", ngrains);
+ g_free(maxima);
+ return FALSE;
+ }
+
+ qsort(maxima, ngrains, sizeof(LatticeMaximumInfo), compare_maxima);
+#ifdef DEBUG
+ for (i = 0; i < ngrains; i++) {
+ gwy_debug("[%u] (%g, %g) %g :: %g",
+ i, maxima[i].x, maxima[i].y, maxima[i].max, maxima[i].q);
+ }
+#endif
+
+ /* Remove anything with direction opposite to the first vector. But we
+ * must carefully accept ortohogonal vectors. This is just a half-plane
+ * selection though it influences the preferred vectors, of course. */
+ gwy_debug("Base-plane selector [%u] (%g, %g) %g",
+ 0, maxima[0].x, maxima[0].y, maxima[0].max);
+ cphi = maxima[0].x/maxima[0].d;
+ sphi = maxima[0].y/maxima[0].d;
+ i = j = 1;
+ while (i < ngrains) {
+ x = cphi*maxima[i].x + sphi*maxima[i].y;
+ y = cphi*maxima[i].y - sphi*maxima[i].x;
+ maxima[j] = maxima[i];
+ if (x > 1e-9*dh || (x > -1e-9*dh && y > 1e-9*dh))
+ j++;
+ i++;
+ }
+ ngrains = j;
+
+ if ((is_psdf && ngrains < 2) || (!is_psdf && ngrains < 7)) {
+ gwy_debug("Too few maxima (after half-plane removal): %d.", ngrains);
+ g_free(maxima);
+ return FALSE;
+ }
+
+ /* Locate the most important maxima. */
+ ngrains = MIN(ngrains, 12);
+ for (i = 0; i < ngrains; i++) {
+ for (j = i+1; j < ngrains; j++) {
+ x = maxima[i].x + maxima[j].x;
+ y = maxima[i].y + maxima[j].y;
+ for (k = 0; k < ngrains; k++) {
+ if (fabs(maxima[k].x - x) < dh && fabs(maxima[k].y - y) < dh) {
+ maxima[i].basecount++;
+ maxima[j].basecount++;
+ }
}
}
}
+ qsort(maxima, ngrains, sizeof(LatticeMaximumInfo), compare_maxima);
+#ifdef DEBUG
+ for (i = 0; i < ngrains; i++) {
+ gwy_debug("[%u] (%g, %g) %g #%u",
+ i, maxima[i].x, maxima[i].y, maxima[i].max,
+ maxima[i].basecount);
+ }
+#endif
- if (start == 0) {
- gwy_data_line_clear(data_line);
+ if (!is_psdf && maxima[1].basecount < 3) {
+ g_free(maxima);
return FALSE;
}
- if (start != -1)
- interpolate_segment(data_line, start, res-1);
+ a1a2[0] = maxima[0].x;
+ a1a2[1] = maxima[0].y;
+ dh = maxima[0].d;
+ /* Exclude maxima that appear to be collinear with the first one,
+ * otherwise take the next one with the highest basecount. */
+ for (i = 1; i < ngrains; i++) {
+ for (k = 2; k < 5; k++) {
+ if (fabs(maxima[i].x/k - a1a2[0]) < 0.2*dh
+ && fabs(maxima[i].y/k - a1a2[1]) < 0.2*dh) {
+ gwy_debug("Excluding #%u for collinearity (%u).", i, k);
+ break;
+ }
+ }
+ if (k == 5) {
+ a1a2[2] = maxima[i].x;
+ a1a2[3] = maxima[i].y;
+ ok = TRUE;
+ break;
+ }
+ }
+
+ g_free(maxima);
+ if (!ok)
+ return FALSE;
+
+ /* Try to choose some sensible vectors among the equivalent choices. It
+ * does not guarantee the choice a human would make but at least make
+ * a reasonable one... */
+ for (i = 0; i < 4; i++)
+ a1a2[i] = -a1a2[i];
+ if (is_psdf)
+ transform_vectors_real_freq(a1a2);
+ maybe_swap_axes(a1a2);
+ l1 = hypot(a1a2[0], a1a2[1]);
+ l2 = hypot(a1a2[2], a1a2[3]);
+ phi = acos((a1a2[0]*a1a2[2] + a1a2[1]*a1a2[3])/(l1*l2));
+ if (phi > 0.5*G_PI) {
+ if (a1a2[0]*a1a2[3] - a1a2[1]*a1a2[2] > 0.0) {
+ a1a2[2] = -a1a2[2];
+ a1a2[3] = -a1a2[3];
+ }
+ else {
+ a1a2[0] = -a1a2[0];
+ a1a2[1] = -a1a2[1];
+ }
+ }
+ maybe_swap_axes(a1a2);
return TRUE;
}
-static void
-interpolate_segment(GwyDataLine *data_line, gint from, gint to)
+static gdouble
+refine_from_multiple(GwyDataField *dfield, gdouble *a1a2,
+ gint range, gint limit, gint xwinsize, gint ywinsize)
+{
+ gint i, j, n, nex;
+ gdouble sii, sij, sjj, six, sjx, siy, sjy, xytmp[2];
+ gdouble w, D, dx, dy, xoff, yoff;
+
+ xoff = dfield->xoff;
+ yoff = dfield->yoff;
+ dx = dfield->xreal/dfield->xres;
+ dy = dfield->yreal/dfield->yres;
+ n = nex = 0;
+ sii = sij = sjj = six = sjx = siy = sjy = 0.0;
+ for (i = -range; i <= range; i++) {
+ for (j = -range; j <= range; j++) {
+ w = i*i + j*j;
+ if (w > limit || w == 0)
+ continue;
+
+ nex++;
+ xytmp[0] = i*a1a2[0] + j*a1a2[2];
+ xytmp[1] = i*a1a2[1] + j*a1a2[3];
+
+ xytmp[0] = (xytmp[0] - xoff)/dx;
+ xytmp[1] = (xytmp[1] - yoff)/dy;
+
+ if (!gwy_data_field_local_maximum(dfield,
+ xytmp + 0, xytmp + 1,
+ xwinsize, ywinsize))
+ continue;
+
+ xytmp[0] = (xytmp[0] + 0.5)*dx + xoff;
+ xytmp[1] = (xytmp[1] + 0.5)*dy + yoff;
+
+ w = 1.0/w;
+ sii += i*i*w;
+ sij += i*j*w;
+ sjj += j*j*w;
+ six += i*xytmp[0]*w;
+ sjx += j*xytmp[0]*w;
+ siy += i*xytmp[1]*w;
+ sjy += j*xytmp[1]*w;
+ n++;
+ }
+ }
+
+ if (!n)
+ return 0.0;
+
+ D = sii*sjj - sij*sij;
+ a1a2[0] = (six*sjj - sjx*sij)/D;
+ a1a2[2] = (sjx*sii - six*sij)/D;
+ a1a2[1] = (siy*sjj - sjy*sij)/D;
+ a1a2[3] = (sjy*sii - siy*sij)/D;
+
+ return (gdouble)n/nex;
+}
+
+static gboolean
+refine_lattice(GwyDataField *dfield, gdouble *a1a2, gboolean is_psdf)
{
- gint i, res = data_line->res;
- gdouble *d = data_line->data;
- gdouble zl, zr;
+ gint xwinsize, ywinsize;
+ gdouble r, dx, dy;
+
+ dx = dfield->xreal/dfield->xres;
+ dy = dfield->yreal/dfield->yres;
+ xwinsize = (gint)(0.32*MAX(fabs(a1a2[0]), fabs(a1a2[2]))/dx + 0.5);
+ ywinsize = (gint)(0.32*MAX(fabs(a1a2[1]), fabs(a1a2[3]))/dy + 0.5);
+ gwy_debug("window size: %dx%d", xwinsize, ywinsize);
+
+ r = refine_from_multiple(dfield, a1a2, 1, 2, xwinsize, ywinsize);
+ gwy_debug("refine1(%g): (%g, %g) (%g, %g)",
+ r, a1a2[0], a1a2[1], a1a2[2], a1a2[3]);
- g_assert(to < res-1 || from > 0);
+ if (is_psdf)
+ return r >= 0.75;
- if (from == 0) {
- zr = d[to+1];
- for (i = from; i <= to; i++)
- d[i] = zr;
+ if (r == 1.0) {
+ xwinsize = 5*xwinsize/6;
+ ywinsize = 5*ywinsize/6;
+ r = refine_from_multiple(dfield, a1a2, 3, 25, xwinsize, ywinsize);
+ gwy_debug("refine3(%g): (%g, %g) (%g, %g)",
+ r, a1a2[0], a1a2[1], a1a2[2], a1a2[3]);
}
- else if (to == res-1) {
- zl = d[from-1];
- for (i = from; i <= to; i++)
- d[i] = zl;
+
+ if (r == 1.0) {
+ xwinsize = 7*xwinsize/8;
+ ywinsize = 7*ywinsize/8;
+ r = refine_from_multiple(dfield, a1a2, 5, 29, xwinsize, ywinsize);
+ gwy_debug("refine5(%g): (%g, %g) (%g, %g)",
+ r, a1a2[0], a1a2[1], a1a2[2], a1a2[3]);
}
- else {
- zl = d[from-1]/(to - from + 2);
- zr = d[to+1]/(to - from + 2);
- for (i = from; i <= to; i++)
- d[i] = zr*(i+1) + zl*(to+1 - from - i);
+
+ return r > 0.5;
+}
+
+/**
+ * gwy_data_field_measure_lattice_acf:
+ * @acf2d: Data field containing two-dimensional autocorrelation function.
+ * @a1a2: Lattice vectors as an array of four components: @x1, @y1, @x2 and
+ * @y2 (in real coordinates).
+ *
+ * Estimates or improves estimate of lattice vectors from a 2D ACF field.
+ *
+ * Note that the 2D ACF of a data field has to be passed, not the data field
+ * itself. The correlation function can be for instance calculated by
+ * gwy_data_field_2dacf(). However, you can calculate and/or process the
+ * correlation function in any way you see fit.
+ *
+ * When the vectors in @a1a2 are zero the function attempts to estimate the
+ * lattice from scratch. But if @a1a2 contains two non-zero vectors it takes
+ * them as approximate lattice vectors to improve.
+ *
+ * If the function return %FALSE the array @a1a2 is filled with useless values
+ * and must be ignored.
+ *
+ * Returns: %TRUE if good lattice vectors were found, %FALSE on failure.
+ *
+ * Since: 2.49
+ **/
+gboolean
+gwy_data_field_measure_lattice_acf(GwyDataField *acf2d, gdouble *a1a2)
+{
+ gdouble dx, dy;
+ guint i;
+
+ if ((a1a2[0] == 0.0 && a1a2[1] == 0.0)
+ || (a1a2[2] == 0.0 && a1a2[3] == 0.0)) {
+ if (!guess_lattice(acf2d, a1a2, FALSE))
+ return FALSE;
+ gwy_debug("guess: (%g, %g) (%g, %g)",
+ a1a2[0], a1a2[1], a1a2[2], a1a2[3]);
+ }
+
+ for (i = 0; i < 4; i++) {
+ if (gwy_isnan(a1a2[i]) || gwy_isinf(a1a2[i]))
+ return FALSE;
+ }
+
+ if (!refine_lattice(acf2d, a1a2, FALSE))
+ return FALSE;
+
+ for (i = 0; i < 4; i++) {
+ if (gwy_isnan(a1a2[i]) || gwy_isinf(a1a2[i]))
+ return FALSE;
+ }
+
+ /* For very skewed lattices refine() can produce two of the same vector. */
+ dx = acf2d->xreal/acf2d->xres;
+ dy = acf2d->yreal/acf2d->yres;
+ if (hypot(a1a2[0] - a1a2[2], a1a2[1] - a1a2[3]) < 1.8*hypot(dx, dy))
+ return FALSE;
+
+ return TRUE;
+}
+
+/**
+ * gwy_data_field_measure_lattice_psdf:
+ * @psdf2d: Data field containing two-dimensional power spectrum density
+ * function (or alternatively Fourier coefficient modulus).
+ * @a1a2: Lattice vectors as an array of four components: @x1, @y1, @x2 and
+ * @y2 (in real coordinates).
+ *
+ * Estimates or improves estimate of lattice vectors from a 2D PSDF field.
+ *
+ * Note that the 2D PSDF of a data field has to be passed, not the data field
+ * itself. The spectral density can be for instance calculated by
+ * gwy_data_field_2dfft() and summing the squares of real and imaginary parts
+ * However, you can calculate and/or process the spectral density in any way
+ * you see fit.
+ *
+ * When the vectors in @a1a2 are zero the function attempts to estimate the
+ * lattice from scratch. But if @a1a2 contains two non-zero vectors it takes
+ * them as approximate lattice vectors to improve.
+ *
+ * If the function return %FALSE the array @a1a2 is filled with useless values
+ * and must be ignored.
+ *
+ * Returns: %TRUE if good lattice vectors were found, %FALSE on failure.
+ *
+ * Since: 2.49
+ **/
+gboolean
+gwy_data_field_measure_lattice_psdf(GwyDataField *psdf2d, gdouble *a1a2)
+{
+ gdouble dx, dy;
+ guint i;
+
+ if ((a1a2[0] == 0.0 && a1a2[1] == 0.0)
+ || (a1a2[2] == 0.0 && a1a2[3] == 0.0)) {
+ if (!guess_lattice(psdf2d, a1a2, TRUE))
+ return FALSE;
+ gwy_debug("guess: (%g, %g) (%g, %g)",
+ a1a2[0], a1a2[1], a1a2[2], a1a2[3]);
+ }
+
+ transform_vectors_real_freq(a1a2);
+ for (i = 0; i < 4; i++) {
+ if (gwy_isnan(a1a2[i]) || gwy_isinf(a1a2[i]))
+ return FALSE;
}
+
+ if (!refine_lattice(psdf2d, a1a2, TRUE))
+ return FALSE;
+
+ transform_vectors_real_freq(a1a2);
+ gwy_debug("real: (%g, %g) (%g, %g)", a1a2[0], a1a2[1], a1a2[2], a1a2[3]);
+ for (i = 0; i < 4; i++) {
+ if (gwy_isnan(a1a2[i]) || gwy_isinf(a1a2[i]))
+ return FALSE;
+ }
+
+ /* For very skewed lattices refine() can produce two of the same vector. */
+ dx = 1.0/psdf2d->xreal;
+ dy = 1.0/psdf2d->yreal;
+ if (hypot(a1a2[0] - a1a2[2], a1a2[1] - a1a2[3]) < 1.8*hypot(dx, dy))
+ return FALSE;
+
+ return TRUE;
}
/**
diff --git a/libprocess/correct.h b/libprocess/correct.h
index 034f70f..fdbfe8b 100644
--- a/libprocess/correct.h
+++ b/libprocess/correct.h
@@ -1,6 +1,6 @@
/*
- * @(#) $Id: correct.h 19086 2016-10-16 12:18:11Z yeti-dn $
- * Copyright (C) 2003-2016 David Necas (Yeti), Petr Klapetek.
+ * @(#) $Id: correct.h 20135 2017-08-02 11:20:45Z yeti-dn $
+ * Copyright (C) 2003-2017 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
* This program is free software; you can redistribute it and/or modify
@@ -72,6 +72,18 @@ void gwy_data_field_affine (GwyDataField *source,
GwyInterpolationType interp,
GwyExteriorType exterior,
gdouble fill_value);
+void gwy_data_field_affine_prepare (GwyDataField *source,
+ GwyDataField *dest,
+ const gdouble *a1a2,
+ gdouble *a1a2_corr,
+ gdouble *invtrans,
+ GwyAffineScalingType scaling,
+ gboolean prevent_rotation,
+ gdouble oversampling);
+gboolean gwy_data_field_measure_lattice_acf (GwyDataField *acf2d,
+ gdouble *a1a2);
+gboolean gwy_data_field_measure_lattice_psdf (GwyDataField *psdf2d,
+ gdouble *a1a2);
gboolean gwy_data_line_correct_laplace (GwyDataLine *data_line,
GwyDataLine *mask_line);
void gwy_data_field_mark_scars (GwyDataField *data_field,
diff --git a/libprocess/cwt.c b/libprocess/cwt.c
index 8a9bc62..27061eb 100644
--- a/libprocess/cwt.c
+++ b/libprocess/cwt.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: cwt.c 15598 2013-11-11 12:33:32Z yeti-dn $
+ * @(#) $Id: cwt.c 19698 2017-05-03 20:18:10Z yeti-dn $
* Copyright (C) 2003 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -19,7 +19,6 @@
* Boston, MA 02110-1301, USA.
*/
-#include "config.h"
#include <libgwyddion/gwymath.h>
#include <libprocess/cwt.h>
diff --git a/libprocess/datafield.c b/libprocess/datafield.c
index 9f4c680..425762d 100644
--- a/libprocess/datafield.c
+++ b/libprocess/datafield.c
@@ -1,6 +1,6 @@
/*
- * @(#) $Id: datafield.c 19036 2016-10-08 10:32:41Z yeti-dn $
- * Copyright (C) 2003 David Necas (Yeti), Petr Klapetek.
+ * @(#) $Id: datafield.c 20128 2017-08-01 11:19:59Z yeti-dn $
+ * Copyright (C) 2003-2017 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
* This program is free software; you can redistribute it and/or modify
@@ -33,6 +33,8 @@
#define GWY_DATA_FIELD_TYPE_NAME "GwyDataField"
+enum { BLOCK_SIZE = 64 };
+
enum {
DATA_CHANGED,
LAST_SIGNAL
@@ -198,10 +200,7 @@ gwy_data_field_new_alike(GwyDataField *model,
else
data_field->data = g_new(gdouble, data_field->xres*data_field->yres);
- if (model->si_unit_xy)
- data_field->si_unit_xy = gwy_si_unit_duplicate(model->si_unit_xy);
- if (model->si_unit_z)
- data_field->si_unit_z = gwy_si_unit_duplicate(model->si_unit_z);
+ gwy_data_field_copy_units(model, data_field);
return data_field;
}
@@ -239,10 +238,7 @@ gwy_data_field_new_resampled(GwyDataField *data_field,
FALSE);
result->xoff = data_field->xoff;
result->yoff = data_field->yoff;
- if (data_field->si_unit_xy)
- result->si_unit_xy = gwy_si_unit_duplicate(data_field->si_unit_xy);
- if (data_field->si_unit_z)
- result->si_unit_z = gwy_si_unit_duplicate(data_field->si_unit_z);
+ gwy_data_field_copy_units(data_field, result);
/* Prevent rounding errors from introducing different values in constants
* field during resampling. */
@@ -266,19 +262,14 @@ gwy_data_field_serialize(GObject *obj,
{
GwyDataField *data_field;
guint32 datasize;
- gdouble *pxoff, *pyoff;
-
- gwy_debug("");
- g_return_val_if_fail(GWY_IS_DATA_FIELD(obj), NULL);
+ gpointer pxoff, pyoff, pxyunit, pzunit;
data_field = GWY_DATA_FIELD(obj);
- if (!data_field->si_unit_xy)
- data_field->si_unit_xy = gwy_si_unit_new(NULL);
- if (!data_field->si_unit_z)
- data_field->si_unit_z = gwy_si_unit_new(NULL);
datasize = data_field->xres*data_field->yres;
pxoff = data_field->xoff ? &data_field->xoff : NULL;
pyoff = data_field->yoff ? &data_field->yoff : NULL;
+ pxyunit = unit_pointer_if_nonempty(data_field->si_unit_xy);
+ pzunit = unit_pointer_if_nonempty(data_field->si_unit_z);
{
GwySerializeSpec spec[] = {
{ 'i', "xres", &data_field->xres, NULL, },
@@ -287,8 +278,8 @@ gwy_data_field_serialize(GObject *obj,
{ 'd', "yreal", &data_field->yreal, NULL, },
{ 'd', "xoff", pxoff, NULL, },
{ 'd', "yoff", pyoff, NULL, },
- { 'o', "si_unit_xy", &data_field->si_unit_xy, NULL, },
- { 'o', "si_unit_z", &data_field->si_unit_z, NULL, },
+ { 'o', "si_unit_xy", pxyunit, NULL, },
+ { 'o', "si_unit_z", pzunit, NULL, },
{ 'D', "data", &data_field->data, &datasize, },
};
return gwy_serialize_pack_object_struct(buffer,
@@ -302,26 +293,24 @@ gwy_data_field_get_size(GObject *obj)
{
GwyDataField *data_field;
guint32 datasize;
-
- gwy_debug("");
- g_return_val_if_fail(GWY_IS_DATA_FIELD(obj), 0);
+ gpointer pxoff, pyoff, pxyunit, pzunit;
data_field = GWY_DATA_FIELD(obj);
- if (!data_field->si_unit_xy)
- data_field->si_unit_xy = gwy_si_unit_new(NULL);
- if (!data_field->si_unit_z)
- data_field->si_unit_z = gwy_si_unit_new(NULL);
datasize = data_field->xres*data_field->yres;
+ pxoff = data_field->xoff ? &data_field->xoff : NULL;
+ pyoff = data_field->yoff ? &data_field->yoff : NULL;
+ pxyunit = unit_pointer_if_nonempty(data_field->si_unit_xy);
+ pzunit = unit_pointer_if_nonempty(data_field->si_unit_z);
{
GwySerializeSpec spec[] = {
{ 'i', "xres", &data_field->xres, NULL, },
{ 'i', "yres", &data_field->yres, NULL, },
{ 'd', "xreal", &data_field->xreal, NULL, },
{ 'd', "yreal", &data_field->yreal, NULL, },
- { 'd', "xoff", &data_field->xoff, NULL, },
- { 'd', "yoff", &data_field->yoff, NULL, },
- { 'o', "si_unit_xy", &data_field->si_unit_xy, NULL, },
- { 'o', "si_unit_z", &data_field->si_unit_z, NULL, },
+ { 'd', "xoff", pxoff, NULL, },
+ { 'd', "yoff", pyoff, NULL, },
+ { 'o', "si_unit_xy", pxyunit, NULL, },
+ { 'o', "si_unit_z", pzunit, NULL, },
{ 'D', "data", &data_field->data, &datasize, },
};
return gwy_serialize_get_struct_size(GWY_DATA_FIELD_TYPE_NAME,
@@ -491,22 +480,7 @@ gwy_data_field_copy(GwyDataField *src,
if (!nondata_too)
return;
- /* SI Units can be NULL */
- if (src->si_unit_xy && dest->si_unit_xy)
- gwy_serializable_clone(G_OBJECT(src->si_unit_xy),
- G_OBJECT(dest->si_unit_xy));
- else if (src->si_unit_xy && !dest->si_unit_xy)
- dest->si_unit_xy = gwy_si_unit_duplicate(src->si_unit_xy);
- else if (!src->si_unit_xy && dest->si_unit_xy)
- GWY_OBJECT_UNREF(dest->si_unit_xy);
-
- if (src->si_unit_z && dest->si_unit_z)
- gwy_serializable_clone(G_OBJECT(src->si_unit_z),
- G_OBJECT(dest->si_unit_z));
- else if (src->si_unit_z && !dest->si_unit_z)
- dest->si_unit_z = gwy_si_unit_duplicate(src->si_unit_z);
- else if (!src->si_unit_z && dest->si_unit_z)
- GWY_OBJECT_UNREF(dest->si_unit_z);
+ gwy_data_field_copy_units(src, dest);
}
/**
@@ -770,10 +744,7 @@ gwy_data_field_area_extract(GwyDataField *data_field,
data_field->data + (i + row)*data_field->xres + col,
width);
}
- if (data_field->si_unit_xy)
- result->si_unit_xy = gwy_si_unit_duplicate(data_field->si_unit_xy);
- if (data_field->si_unit_z)
- result->si_unit_z = gwy_si_unit_duplicate(data_field->si_unit_z);
+ gwy_data_field_copy_units(data_field, result);
return result;
}
@@ -1155,13 +1126,7 @@ gwy_data_field_set_si_unit_xy(GwyDataField *data_field,
GwySIUnit *si_unit)
{
g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
- g_return_if_fail(GWY_IS_SI_UNIT(si_unit));
- if (data_field->si_unit_xy == si_unit)
- return;
-
- GWY_OBJECT_UNREF(data_field->si_unit_xy);
- g_object_ref(si_unit);
- data_field->si_unit_xy = si_unit;
+ _gwy_set_object_si_unit(si_unit, &data_field->si_unit_xy);
}
/**
@@ -1180,13 +1145,7 @@ gwy_data_field_set_si_unit_z(GwyDataField *data_field,
GwySIUnit *si_unit)
{
g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
- g_return_if_fail(GWY_IS_SI_UNIT(si_unit));
- if (data_field->si_unit_z == si_unit)
- return;
-
- GWY_OBJECT_UNREF(data_field->si_unit_z);
- g_object_ref(si_unit);
- data_field->si_unit_z = si_unit;
+ _gwy_set_object_si_unit(si_unit, &data_field->si_unit_z);
}
/**
@@ -1418,7 +1377,7 @@ gwy_data_field_get_dval_real(GwyDataField *data_field, gdouble x, gdouble y,
* Rotates a data field by a given angle.
*
* This function is mostly obsolete. See gwy_data_field_new_rotated()
- * and gwy_data_field_rotated_90().
+ * and gwy_data_field_new_rotated_90().
*
* Values that get outside of data field by the rotation are lost.
* Undefined values from outside of data field that get inside are set to
@@ -1533,36 +1492,14 @@ gwy_data_field_new_rotated_90(GwyDataField *data_field,
gboolean clockwise)
{
GwyDataField *result;
- gint xres, yres, i, j;
- gdouble *dd;
- const gdouble *sd;
- xres = data_field->xres;
- yres = data_field->yres;
result = gwy_data_field_new_alike(data_field, FALSE);
- gwy_data_field_resample(result, yres, xres, GWY_INTERPOLATION_NONE);
- result->xreal = data_field->yreal;
- result->yreal = data_field->xreal;
+ gwy_data_field_flip_xy(data_field, result, FALSE);
+ /* Clockwise = flip + rowinv; Anti-clockwise = flip + colinv. */
+ gwy_data_field_invert(result, !clockwise, clockwise, FALSE);
result->xoff = data_field->yoff;
result->yoff = data_field->xoff;
- sd = data_field->data;
- dd = result->data;
- if (!clockwise) {
- for (i = 0; i < xres; i++) {
- for (j = 0; j < yres; j++) {
- dd[i*yres + j] = sd[j*xres + (xres - 1 - i)];
- }
- }
- }
- else {
- for (i = 0; i < xres; i++) {
- for (j = 0; j < yres; j++) {
- dd[i*yres + (yres - 1 - j)] = sd[j*xres + i];
- }
- }
- }
-
return result;
}
@@ -1675,8 +1612,8 @@ rotate_find_out_dimensions(GwyDataField *dfield,
*
* The returned data field has usually square pixels, the exception being when
* @angle is a multiple of %G_PI/2 when the function reduces to
- * gwy_data_field_rotated_90() and original pixels are preserved. This is of
- * concern only when @dfield has non-square pixels.
+ * gwy_data_field_new_rotated_90() and original pixels are preserved. This is
+ * of concern only when @dfield has non-square pixels.
*
* Returns: A newly created data field.
*
@@ -1791,10 +1728,7 @@ gwy_data_field_new_rotated(GwyDataField *dfield,
result = gwy_data_field_new(newxres, newyres, newxreal, newyreal, FALSE);
result->xoff = dfield->yoff + 0.5*(yreal - newxreal);
result->yoff = dfield->xoff + 0.5*(xreal - newyreal);
- if (dfield->si_unit_xy)
- result->si_unit_xy = gwy_si_unit_duplicate(dfield->si_unit_xy);
- if (dfield->si_unit_z)
- result->si_unit_z = gwy_si_unit_duplicate(dfield->si_unit_z);
+ gwy_data_field_copy_units(dfield, result);
if (exterior_mask) {
gwy_serializable_clone(G_OBJECT(result), G_OBJECT(exterior_mask));
@@ -1862,11 +1796,24 @@ gwy_data_field_new_rotated(GwyDataField *dfield,
return result;
}
+static void
+invert_array_in_place(gdouble *d, guint n)
+{
+ gdouble *e = d + n-1;
+
+ n /= 2;
+ while (n--) {
+ GWY_SWAP(gdouble, *d, *e);
+ d++;
+ e--;
+ }
+}
+
/**
* gwy_data_field_invert:
* @data_field: A data field.
- * @x: %TRUE to reflect about X axis (i.e., vertically).
- * @y: %TRUE to reflect about Y axis (i.e., horizontally).
+ * @x: %TRUE to reflect about X axis (i.e., invert columns vertically).
+ * @y: %TRUE to reflect about Y axis (i.e., invert rows horizontally).
* @z: %TRUE to invert in Z direction (i.e., invert values).
*
* Reflects amd/or inverts a data field.
@@ -1879,12 +1826,14 @@ gwy_data_field_invert(GwyDataField *data_field,
gboolean y,
gboolean z)
{
- gint i, j, n;
+ gint xres, yres, i, j, n;
gdouble avg;
gdouble *data, *flip;
g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
- n = data_field->xres*data_field->yres;
+ xres = data_field->xres;
+ yres = data_field->yres;
+ n = xres*yres;
if (z) {
avg = gwy_data_field_get_avg(data_field);
@@ -1909,24 +1858,17 @@ gwy_data_field_invert(GwyDataField *data_field,
}
if (x && y) {
- data = data_field->data;
- flip = data + n-1;
- for (i = 0; i < n/2; i++, data++, flip--)
- GWY_SWAP(gdouble, *data, *flip);
+ invert_array_in_place(data_field->data, n);
}
else if (y) {
- for (i = 0; i < data_field->yres; i++) {
- data = data_field->data + i*data_field->xres;
- flip = data + data_field->xres-1;
- for (j = 0; j < data_field->xres/2; j++, data++, flip--)
- GWY_SWAP(gdouble, *data, *flip);
- }
+ for (i = 0; i < yres; i++)
+ invert_array_in_place(data_field->data + i*xres, xres);
}
else if (x) {
- for (i = 0; i < data_field->yres/2; i++) {
- data = data_field->data + i*data_field->xres;
- flip = data_field->data + (data_field->yres-1 - i)*data_field->xres;
- for (j = 0; j < data_field->xres; j++, data++, flip++)
+ for (i = 0; i < yres/2; i++) {
+ data = data_field->data + i*xres;
+ flip = data_field->data + (yres-1 - i)*xres;
+ for (j = 0; j < xres; j++, data++, flip++)
GWY_SWAP(gdouble, *data, *flip);
}
}
@@ -1939,6 +1881,132 @@ gwy_data_field_invert(GwyDataField *data_field,
| CBIT(VAR);
}
+/* Block sizes are measured in destination, in source, the dims are swapped. */
+static inline void
+swap_block(const gdouble *sb, gdouble *db,
+ guint xblocksize, guint yblocksize,
+ guint dxres, guint sxres)
+{
+ guint i, j;
+
+ for (i = 0; i < yblocksize; i++) {
+ const gdouble *s = sb + i;
+ gdouble *d = db + i*dxres;
+ for (j = xblocksize; j; j--, d++, s += sxres)
+ *d = *s;
+ }
+}
+
+static void
+transpose_to(const GwyDataField *source,
+ guint col, guint row,
+ guint width, guint height,
+ GwyDataField *dest,
+ guint destcol, guint destrow)
+{
+ guint dxres = dest->xres, sxres = source->xres;
+ guint jmax = height/BLOCK_SIZE * BLOCK_SIZE;
+ guint imax = width/BLOCK_SIZE * BLOCK_SIZE;
+ const gdouble *sbase = source->data + sxres*row + col;
+ gdouble *dbase = dest->data + dxres*destrow + destcol;
+ guint ib, jb;
+
+ for (ib = 0; ib < imax; ib += BLOCK_SIZE) {
+ for (jb = 0; jb < jmax; jb += BLOCK_SIZE)
+ swap_block(sbase + (jb*sxres + ib), dbase + (ib*dxres + jb),
+ BLOCK_SIZE, BLOCK_SIZE, dxres, sxres);
+ if (jmax != height)
+ swap_block(sbase + (jmax*sxres + ib), dbase + (ib*dxres + jmax),
+ height - jmax, BLOCK_SIZE, dxres, sxres);
+ }
+ if (imax != width) {
+ for (jb = 0; jb < jmax; jb += BLOCK_SIZE)
+ swap_block(sbase + (jb*sxres + imax), dbase + (imax*dxres + jb),
+ BLOCK_SIZE, width - imax, dxres, sxres);
+ if (jmax != height)
+ swap_block(sbase + (jmax*sxres + imax),
+ dbase + (imax*dxres + jmax),
+ height - jmax, width - imax, dxres, sxres);
+ }
+}
+
+/**
+ * gwy_data_field_flip_xy:
+ * @src: Source data field.
+ * @dest: Destination data field.
+ * @minor: %TRUE to mirror about the minor diagonal; %FALSE to mirror about
+ * major diagonal.
+ *
+ * Copies data from one data field to another with transposition.
+ *
+ * The destination data field is resized as necessary, its real dimensions set
+ * to transposed @src dimensions and its offsets are reset. Units are not
+ * updated.
+ *
+ * Since: 2.49
+ **/
+void
+gwy_data_field_flip_xy(GwyDataField *src, GwyDataField *dest,
+ gboolean minor)
+{
+ gint xres = src->xres, yres = src->yres;
+
+ g_return_if_fail(GWY_IS_DATA_FIELD(src));
+ g_return_if_fail(GWY_IS_DATA_FIELD(dest));
+ gwy_data_field_resample(dest, yres, xres, GWY_INTERPOLATION_NONE);
+ transpose_to(src, 0, 0, xres, yres, dest, 0, 0);
+ if (minor)
+ invert_array_in_place(dest->data, xres*yres);
+ dest->yreal = src->xreal;
+ dest->xreal = src->yreal;
+ dest->xoff = dest->yoff = 0.0;
+}
+
+/**
+ * gwy_data_field_area_flip_xy:
+ * @src: Source data field.
+ * @col: Upper-left column coordinate in @src.
+ * @row: Upper-left row coordinate in @src.
+ * @width: Area width (number of columns) in @src.
+ * @height: Area height (number of rows) in @src.
+ * @dest: Destination data field.
+ * @minor: %TRUE to mirror about the minor diagonal; %FALSE to mirror about
+ * major diagonal.
+ *
+ * Copies data from a rectangular part of one data field to another with
+ * transposition.
+ *
+ * The destination data field is resized as necessary, its real dimensions set
+ * to transposed @src area dimensions and its offsets are reset. Units are not
+ * updated.
+ *
+ * Since: 2.49
+ **/
+void
+gwy_data_field_area_flip_xy(GwyDataField *src,
+ gint col, gint row, gint width, gint height,
+ GwyDataField *dest,
+ gboolean minor)
+{
+ gint xres = src->xres, yres = src->yres;
+
+ g_return_if_fail(GWY_IS_DATA_FIELD(src));
+ g_return_if_fail(GWY_IS_DATA_FIELD(dest));
+ g_return_if_fail(width > 0 && width <= xres);
+ g_return_if_fail(height > 0 && height <= yres);
+ g_return_if_fail(col >= 0 && col <= xres - width);
+ g_return_if_fail(row >= 0 && row <= yres - height);
+
+ gwy_data_field_resample(dest, height, width, GWY_INTERPOLATION_NONE);
+ transpose_to(src, col, row, width, height, dest, 0, 0);
+ if (minor)
+ invert_array_in_place(dest->data, width*height);
+
+ dest->yreal = dest->yres * gwy_data_field_get_xmeasure(src);
+ dest->xreal = dest->xres * gwy_data_field_get_ymeasure(src);
+ dest->xoff = dest->yoff = 0.0;
+}
+
/**
* gwy_data_field_fill:
* @data_field: A data field.
@@ -2598,6 +2666,141 @@ gwy_data_field_get_profile(GwyDataField *data_field,
}
/**
+ * gwy_data_field_get_profile_mask:
+ * @data_field: A data field.
+ * @ndata: Location where to store the actual number of extracted points, which
+ * may differ from @res.
+ * @xfrom: The real @x-coordinate where the line starts.
+ * @yfrom: The real @y-coordinate where line starts.
+ * @xto: The real @x-coordinate where the line ends.
+ * @yto: The real @y-coordinate where line ends.
+ * @res: Requested resolution, i.e. the number of samples to take.
+ * If nonpositive, sampling is chosen to match @data_field's.
+ * @thickness: Thickness of line to be averaged.
+ * @interpolation: Interpolation type to use.
+ *
+ * Extracts a possibly averaged profile from data field, with masking.
+ *
+ * The extracted profile can contain holes due to masking. It can also contain
+ * no points at all if the all data values along the profile were excluded due
+ * to masking – in this case %NULL is returned.
+ *
+ * Unlike gwy_data_field_get_profile(), this function takes real coordinates
+ * (without offsets), not row and column indices.
+ *
+ * Returns: A newly allocated array of #GwyXY coordinare pairs, or %NULL.
+ * The caller must free the returned array with g_free().
+ *
+ * Since: 2.49
+ **/
+GwyXY*
+gwy_data_field_get_profile_mask(GwyDataField *dfield,
+ gint *ndata,
+ GwyDataField *mask,
+ GwyMaskingType masking,
+ gdouble xfrom, gdouble yfrom,
+ gdouble xto, gdouble yto,
+ gint res,
+ gint thickness,
+ GwyInterpolationType interpolation)
+{
+ gint k, i, j, kk;
+ gdouble xreal, yreal, dx, dy, xstep, ystep, step, size, tx, ty, h;
+ gint xres, yres, tres, n;
+ GwyXY *xydata;
+ const gdouble *m;
+
+ g_return_val_if_fail(GWY_IS_DATA_FIELD(dfield), NULL);
+ g_return_val_if_fail(!mask || GWY_IS_DATA_FIELD(mask), NULL);
+ g_return_val_if_fail(ndata, NULL);
+
+ if (masking == GWY_MASK_IGNORE)
+ mask = NULL;
+ else if (!mask)
+ masking = GWY_MASK_IGNORE;
+ m = mask ? mask->data : NULL;
+
+ xres = dfield->xres;
+ yres = dfield->yres;
+ xreal = dfield->xreal;
+ yreal = dfield->yreal;
+ dx = xreal/xres;
+ dy = yreal/yres;
+
+ size = hypot(fabs(xto - xfrom)/dx + 1, fabs(yto - yfrom)/dy + 1);
+ size = MAX(size, 1.0);
+ if (res <= 0)
+ res = GWY_ROUND(size);
+
+ gwy_debug("size: %g, res: %d", size, res);
+ if (xto == xfrom && yto == yfrom) {
+ xto += 0.2*dx;
+ yto += 0.2*dy;
+ xfrom -= 0.2*dx;
+ yfrom -= 0.2*dy;
+ }
+ xstep = (xto - xfrom)/(res - 1.0);
+ ystep = (yto - yfrom)/(res - 1.0);
+ step = hypot(xstep, ystep);
+ gwy_debug("step (%g, %g)", xstep, ystep);
+
+ if (thickness <= 1) {
+ tres = 0;
+ tx = ty = 0.0;
+ }
+ else {
+ tres = 2*(thickness - 1);
+ tx = (yto - yfrom)/dy;
+ ty = -(xto - xfrom)/dx;
+ h = hypot(tx, ty);
+ tx *= dx/h * 0.5*thickness/tres;
+ ty *= dy/h * 0.5*thickness/tres;
+ }
+ gwy_debug("tres: %d, tstep (%g, %g)", tres, tx, ty);
+
+ xydata = g_new0(GwyXY, res);
+
+ n = 0;
+ for (k = 0; k < res; k++) {
+ gdouble xc = xfrom + xstep*k;
+ gdouble yc = yfrom + ystep*k;
+ gdouble z = 0.0;
+ gint w = 0;
+
+ for (kk = -tres; kk <= tres; kk++) {
+ gdouble x = xc + kk*tx;
+ gdouble y = yc + kk*ty;
+
+ x = CLAMP(x, 0.0, 0.999999*xreal);
+ y = CLAMP(y, 0.0, 0.999999*yreal);
+
+ if (masking != GWY_MASK_IGNORE) {
+ i = (gint)floor(y/dy);
+ j = (gint)floor(x/dx);
+ if ((masking == GWY_MASK_INCLUDE && m[i*xres + j] <= 0.0)
+ || (masking == GWY_MASK_EXCLUDE && m[i*xres + j] >= 1.0))
+ continue;
+ }
+
+ z += gwy_data_field_get_dval_real(dfield, x, y, interpolation);
+ w++;
+ }
+ gwy_debug("[%d] %d", k, w);
+ if (w) {
+ xydata[n].x = step*k;
+ xydata[n].y = z/w;
+ n++;
+ }
+ }
+
+ *ndata = n;
+ if (!n)
+ GWY_FREE(xydata);
+
+ return xydata;
+}
+
+/**
* gwy_data_field_get_xder:
* @data_field: A data field.
* @col: Column index.
@@ -2682,65 +2885,41 @@ gwy_data_field_get_angder(GwyDataField *data_field,
}
/**
- * gwy_data_field_copy_units_to_data_line:
- * @data_field: A data field to get units from.
- * @data_line: A data line to set units of.
+ * gwy_data_field_copy_units:
+ * @data_field: A data field.
+ * @target: Target data field.
*
- * Sets lateral and value units of a data line to match a data field.
+ * Sets lateral and value units of a data field to match another data field.
+ *
+ * Since: 2.49
**/
void
-gwy_data_field_copy_units_to_data_line(GwyDataField *data_field,
- GwyDataLine *data_line)
+gwy_data_field_copy_units(GwyDataField *data_field,
+ GwyDataField *target)
{
- g_return_if_fail(GWY_IS_DATA_LINE(data_line));
g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
+ g_return_if_fail(GWY_IS_DATA_FIELD(target));
- if (data_field->si_unit_xy && data_line->si_unit_x)
- gwy_serializable_clone(G_OBJECT(data_field->si_unit_xy),
- G_OBJECT(data_line->si_unit_x));
- else if (data_field->si_unit_xy && !data_line->si_unit_x)
- data_line->si_unit_x = gwy_si_unit_duplicate(data_field->si_unit_xy);
- else if (!data_field->si_unit_xy && data_line->si_unit_x)
- GWY_OBJECT_UNREF(data_line->si_unit_x);
-
- if (data_field->si_unit_z && data_line->si_unit_y)
- gwy_serializable_clone(G_OBJECT(data_field->si_unit_z),
- G_OBJECT(data_line->si_unit_y));
- else if (data_field->si_unit_z && !data_line->si_unit_y)
- data_line->si_unit_y = gwy_si_unit_duplicate(data_field->si_unit_z);
- else if (!data_field->si_unit_z && data_line->si_unit_y)
- GWY_OBJECT_UNREF(data_line->si_unit_y);
+ _gwy_assign_si_unit(data_field->si_unit_xy, &target->si_unit_xy);
+ _gwy_assign_si_unit(data_field->si_unit_z, &target->si_unit_z);
}
/**
- * gwy_data_line_copy_units_to_data_field:
- * @data_line: A data line to get units from.
- * @data_field: A data field to set units of.
+ * gwy_data_field_copy_units_to_data_line:
+ * @data_field: A data field to get units from.
+ * @data_line: A data line to set units of.
*
- * Sets lateral and value units of a data field to match a data line.
+ * Sets lateral and value units of a data line to match a data field.
**/
void
-gwy_data_line_copy_units_to_data_field(GwyDataLine *data_line,
- GwyDataField *data_field)
+gwy_data_field_copy_units_to_data_line(GwyDataField *data_field,
+ GwyDataLine *data_line)
{
g_return_if_fail(GWY_IS_DATA_LINE(data_line));
g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
- if (data_line->si_unit_x && data_field->si_unit_xy)
- gwy_serializable_clone(G_OBJECT(data_line->si_unit_x),
- G_OBJECT(data_field->si_unit_xy));
- else if (data_line->si_unit_x && !data_field->si_unit_xy)
- data_field->si_unit_xy = gwy_si_unit_duplicate(data_line->si_unit_x);
- else if (!data_line->si_unit_x && data_field->si_unit_xy)
- GWY_OBJECT_UNREF(data_field->si_unit_xy);
-
- if (data_line->si_unit_y && data_field->si_unit_z)
- gwy_serializable_clone(G_OBJECT(data_line->si_unit_y),
- G_OBJECT(data_field->si_unit_z));
- else if (data_line->si_unit_y && !data_field->si_unit_z)
- data_field->si_unit_z = gwy_si_unit_duplicate(data_line->si_unit_y);
- else if (!data_line->si_unit_y && data_field->si_unit_z)
- GWY_OBJECT_UNREF(data_field->si_unit_z);
+ _gwy_assign_si_unit(data_field->si_unit_xy, &data_line->si_unit_x);
+ _gwy_assign_si_unit(data_field->si_unit_z, &data_line->si_unit_y);
}
#undef gwy_data_field_invalidate
diff --git a/libprocess/datafield.h b/libprocess/datafield.h
index 4853860..d7812c0 100644
--- a/libprocess/datafield.h
+++ b/libprocess/datafield.h
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: datafield.h 18938 2016-09-09 18:36:02Z yeti-dn $
+ * @(#) $Id: datafield.h 20128 2017-08-01 11:19:59Z yeti-dn $
* Copyright (C) 2003 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -150,6 +150,8 @@ GwySIValueFormat* gwy_data_field_get_value_format_xy(GwyDataField *data_field,
GwySIValueFormat* gwy_data_field_get_value_format_z (GwyDataField *data_field,
GwySIUnitFormatStyle style,
GwySIValueFormat *format);
+void gwy_data_field_copy_units (GwyDataField *data_field,
+ GwyDataField *target);
void gwy_data_field_copy_units_to_data_line(GwyDataField *data_field,
GwyDataLine *data_line);
void gwy_data_line_copy_units_to_data_field(GwyDataLine *data_line,
@@ -165,128 +167,149 @@ gdouble gwy_data_field_rtoj (GwyDataField *data_field,
gdouble realx);
-gdouble gwy_data_field_get_val (GwyDataField *data_field,
- gint col,
- gint row);
-void gwy_data_field_set_val (GwyDataField *data_field,
- gint col,
- gint row,
- gdouble value);
-gdouble gwy_data_field_get_dval (GwyDataField *data_field,
- gdouble x,
- gdouble y,
- GwyInterpolationType interpolation);
-gdouble gwy_data_field_get_dval_real (GwyDataField *data_field,
- gdouble x,
- gdouble y,
- GwyInterpolationType interpolation);
-void gwy_data_field_rotate (GwyDataField *data_field,
- gdouble angle,
- GwyInterpolationType interpolation);
-GwyDataField* gwy_data_field_new_rotated (GwyDataField *dfield,
- GwyDataField *exterior_mask,
- gdouble angle,
- GwyInterpolationType interp,
- GwyRotateResizeType resize);
-GwyDataField* gwy_data_field_new_rotated_90 (GwyDataField *data_field,
- gboolean clockwise);
-void gwy_data_field_invert (GwyDataField *data_field,
- gboolean x,
- gboolean y,
- gboolean z);
-void gwy_data_field_fill (GwyDataField *data_field,
- gdouble value);
-void gwy_data_field_clear (GwyDataField *data_field);
-void gwy_data_field_multiply (GwyDataField *data_field,
- gdouble value);
-void gwy_data_field_add (GwyDataField *data_field,
- gdouble value);
-void gwy_data_field_area_fill (GwyDataField *data_field,
- gint col,
- gint row,
- gint width,
- gint height,
- gdouble value);
-void gwy_data_field_area_fill_mask (GwyDataField *data_field,
- GwyDataField *mask,
- GwyMaskingType mode,
- gint col,
- gint row,
- gint width,
- gint height,
- gdouble value);
-void gwy_data_field_area_clear (GwyDataField *data_field,
- gint col,
- gint row,
- gint width,
- gint height);
-void gwy_data_field_area_multiply (GwyDataField *data_field,
- gint col,
- gint row,
- gint width,
- gint height,
- gdouble value);
-void gwy_data_field_area_add (GwyDataField *data_field,
- gint col,
- gint row,
- gint width,
- gint height,
- gdouble value);
-GwyDataLine* gwy_data_field_get_profile (GwyDataField *data_field,
- GwyDataLine* data_line,
- gint scol,
- gint srow,
- gint ecol,
- gint erow,
- gint res,
- gint thickness,
- GwyInterpolationType interpolation);
-void gwy_data_field_get_row (GwyDataField *data_field,
- GwyDataLine* data_line,
- gint row);
-void gwy_data_field_get_column (GwyDataField *data_field,
- GwyDataLine* data_line,
- gint col);
-void gwy_data_field_set_row (GwyDataField *data_field,
- GwyDataLine* data_line,
- gint row);
-void gwy_data_field_set_column (GwyDataField *data_field,
- GwyDataLine* data_line,
- gint col);
-void gwy_data_field_get_row_part (GwyDataField *data_field,
- GwyDataLine* data_line,
- gint row,
- gint from,
- gint to);
-void gwy_data_field_get_column_part(GwyDataField *data_field,
- GwyDataLine* data_line,
- gint col,
- gint from,
- gint to);
-void gwy_data_field_set_row_part (GwyDataField *data_field,
- GwyDataLine* data_line,
- gint row,
- gint from,
- gint to);
-void gwy_data_field_set_column_part(GwyDataField *data_field,
- GwyDataLine* data_line,
- gint col,
- gint from,
- gint to);
-gdouble gwy_data_field_get_xder (GwyDataField *data_field,
- gint col,
- gint row);
-gdouble gwy_data_field_get_yder (GwyDataField *data_field,
- gint col,
- gint row);
-gdouble gwy_data_field_get_angder (GwyDataField *data_field,
- gint col,
- gint row,
- gdouble theta);
-void gwy_data_field_average_xyz (GwyDataField *data_field,
- GwyDataField *density_map,
- const GwyXYZ *points,
- gint npoints);
+gdouble gwy_data_field_get_val (GwyDataField *data_field,
+ gint col,
+ gint row);
+void gwy_data_field_set_val (GwyDataField *data_field,
+ gint col,
+ gint row,
+ gdouble value);
+gdouble gwy_data_field_get_dval (GwyDataField *data_field,
+ gdouble x,
+ gdouble y,
+ GwyInterpolationType interpolation);
+gdouble gwy_data_field_get_dval_real (GwyDataField *data_field,
+ gdouble x,
+ gdouble y,
+ GwyInterpolationType interpolation);
+void gwy_data_field_rotate (GwyDataField *data_field,
+ gdouble angle,
+ GwyInterpolationType interpolation);
+GwyDataField* gwy_data_field_new_rotated (GwyDataField *dfield,
+ GwyDataField *exterior_mask,
+ gdouble angle,
+ GwyInterpolationType interp,
+ GwyRotateResizeType resize);
+GwyDataField* gwy_data_field_new_rotated_90 (GwyDataField *data_field,
+ gboolean clockwise);
+void gwy_data_field_invert (GwyDataField *data_field,
+ gboolean x,
+ gboolean y,
+ gboolean z);
+void gwy_data_field_flip_xy (GwyDataField *src,
+ GwyDataField *dest,
+ gboolean minor);
+void gwy_data_field_area_flip_xy (GwyDataField *src,
+ gint col,
+ gint row,
+ gint width,
+ gint height,
+ GwyDataField *dest,
+ gboolean minor);
+void gwy_data_field_fill (GwyDataField *data_field,
+ gdouble value);
+void gwy_data_field_clear (GwyDataField *data_field);
+void gwy_data_field_multiply (GwyDataField *data_field,
+ gdouble value);
+void gwy_data_field_add (GwyDataField *data_field,
+ gdouble value);
+void gwy_data_field_area_fill (GwyDataField *data_field,
+ gint col,
+ gint row,
+ gint width,
+ gint height,
+ gdouble value);
+void gwy_data_field_area_fill_mask (GwyDataField *data_field,
+ GwyDataField *mask,
+ GwyMaskingType mode,
+ gint col,
+ gint row,
+ gint width,
+ gint height,
+ gdouble value);
+void gwy_data_field_area_clear (GwyDataField *data_field,
+ gint col,
+ gint row,
+ gint width,
+ gint height);
+void gwy_data_field_area_multiply (GwyDataField *data_field,
+ gint col,
+ gint row,
+ gint width,
+ gint height,
+ gdouble value);
+void gwy_data_field_area_add (GwyDataField *data_field,
+ gint col,
+ gint row,
+ gint width,
+ gint height,
+ gdouble value);
+GwyDataLine* gwy_data_field_get_profile (GwyDataField *data_field,
+ GwyDataLine* data_line,
+ gint scol,
+ gint srow,
+ gint ecol,
+ gint erow,
+ gint res,
+ gint thickness,
+ GwyInterpolationType interpolation);
+GwyXY* gwy_data_field_get_profile_mask(GwyDataField *data_field,
+ gint *ndata,
+ GwyDataField *mask,
+ GwyMaskingType masking,
+ gdouble xfrom,
+ gdouble yfrom,
+ gdouble xto,
+ gdouble yto,
+ gint res,
+ gint thickness,
+ GwyInterpolationType interpolation);
+void gwy_data_field_get_row (GwyDataField *data_field,
+ GwyDataLine* data_line,
+ gint row);
+void gwy_data_field_get_column (GwyDataField *data_field,
+ GwyDataLine* data_line,
+ gint col);
+void gwy_data_field_set_row (GwyDataField *data_field,
+ GwyDataLine* data_line,
+ gint row);
+void gwy_data_field_set_column (GwyDataField *data_field,
+ GwyDataLine* data_line,
+ gint col);
+void gwy_data_field_get_row_part (GwyDataField *data_field,
+ GwyDataLine* data_line,
+ gint row,
+ gint from,
+ gint to);
+void gwy_data_field_get_column_part (GwyDataField *data_field,
+ GwyDataLine* data_line,
+ gint col,
+ gint from,
+ gint to);
+void gwy_data_field_set_row_part (GwyDataField *data_field,
+ GwyDataLine* data_line,
+ gint row,
+ gint from,
+ gint to);
+void gwy_data_field_set_column_part (GwyDataField *data_field,
+ GwyDataLine* data_line,
+ gint col,
+ gint from,
+ gint to);
+gdouble gwy_data_field_get_xder (GwyDataField *data_field,
+ gint col,
+ gint row);
+gdouble gwy_data_field_get_yder (GwyDataField *data_field,
+ gint col,
+ gint row);
+gdouble gwy_data_field_get_angder (GwyDataField *data_field,
+ gint col,
+ gint row,
+ gdouble theta);
+void gwy_data_field_average_xyz (GwyDataField *data_field,
+ GwyDataField *density_map,
+ const GwyXYZ *points,
+ gint npoints);
G_END_DECLS
diff --git a/libprocess/dataline.c b/libprocess/dataline.c
index 268c274..120ec7b 100644
--- a/libprocess/dataline.c
+++ b/libprocess/dataline.c
@@ -1,6 +1,6 @@
/*
- * @(#) $Id: dataline.c 19036 2016-10-08 10:32:41Z yeti-dn $
- * Copyright (C) 2003 David Necas (Yeti), Petr Klapetek.
+ * @(#) $Id: dataline.c 20128 2017-08-01 11:19:59Z yeti-dn $
+ * Copyright (C) 2003-2017 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
* This program is free software; you can redistribute it and/or modify
@@ -25,8 +25,10 @@
#include <libgwyddion/gwymacros.h>
#include <libgwyddion/gwymath.h>
#include <libgwyddion/gwydebugobjects.h>
+#include <libprocess/datafield.h>
#include <libprocess/linestats.h>
#include <libprocess/interpolation.h>
+#include "gwyprocessinternal.h"
#define GWY_DATA_LINE_TYPE_NAME "GwyDataLine"
@@ -167,10 +169,7 @@ gwy_data_line_new_alike(GwyDataLine *model,
else
data_line->data = g_new(gdouble, data_line->res);
- if (model->si_unit_x)
- data_line->si_unit_x = gwy_si_unit_duplicate(model->si_unit_x);
- if (model->si_unit_y)
- data_line->si_unit_y = gwy_si_unit_duplicate(model->si_unit_y);
+ gwy_data_line_copy_units(model, data_line);
return data_line;
}
@@ -205,11 +204,7 @@ gwy_data_line_new_resampled(GwyDataLine *data_line,
result = gwy_data_line_new(res, data_line->real, FALSE);
result->off = data_line->off;
- if (data_line->si_unit_x)
- result->si_unit_x = gwy_si_unit_duplicate(data_line->si_unit_x);
- if (data_line->si_unit_y)
- result->si_unit_y = gwy_si_unit_duplicate(data_line->si_unit_y);
-
+ gwy_data_line_copy_units(data_line, result);
gwy_interpolation_resample_block_1d(data_line->res, data_line->data,
result->res, result->data,
interpolation, TRUE);
@@ -222,24 +217,19 @@ gwy_data_line_serialize(GObject *obj,
GByteArray *buffer)
{
GwyDataLine *data_line;
- gdouble *poff;
-
- gwy_debug("");
- g_return_val_if_fail(GWY_IS_DATA_LINE(obj), NULL);
+ gpointer poff, pxunit, pyunit;
data_line = GWY_DATA_LINE(obj);
- if (!data_line->si_unit_x)
- data_line->si_unit_x = gwy_si_unit_new(NULL);
- if (!data_line->si_unit_y)
- data_line->si_unit_y = gwy_si_unit_new(NULL);
poff = data_line->off ? &data_line->off : NULL;
+ pxunit = unit_pointer_if_nonempty(data_line->si_unit_x);
+ pyunit = unit_pointer_if_nonempty(data_line->si_unit_y);
{
GwySerializeSpec spec[] = {
{ 'i', "res", &data_line->res, NULL, },
{ 'd', "real", &data_line->real, NULL, },
{ 'd', "off", poff, NULL, },
- { 'o', "si_unit_x", &data_line->si_unit_x, NULL, },
- { 'o', "si_unit_y", &data_line->si_unit_y, NULL, },
+ { 'o', "si_unit_x", pxunit, NULL, },
+ { 'o', "si_unit_y", pyunit, NULL, },
{ 'D', "data", &data_line->data, &data_line->res, },
};
@@ -253,22 +243,19 @@ static gsize
gwy_data_line_get_size(GObject *obj)
{
GwyDataLine *data_line;
-
- gwy_debug("");
- g_return_val_if_fail(GWY_IS_DATA_LINE(obj), 0);
+ gpointer poff, pxunit, pyunit;
data_line = GWY_DATA_LINE(obj);
- if (!data_line->si_unit_x)
- data_line->si_unit_x = gwy_si_unit_new(NULL);
- if (!data_line->si_unit_y)
- data_line->si_unit_y = gwy_si_unit_new(NULL);
+ poff = data_line->off ? &data_line->off : NULL;
+ pxunit = unit_pointer_if_nonempty(data_line->si_unit_x);
+ pyunit = unit_pointer_if_nonempty(data_line->si_unit_y);
{
GwySerializeSpec spec[] = {
{ 'i', "res", &data_line->res, NULL, },
{ 'd', "real", &data_line->real, NULL, },
- { 'd', "off", &data_line->off, NULL, },
- { 'o', "si_unit_x", &data_line->si_unit_x, NULL, },
- { 'o', "si_unit_y", &data_line->si_unit_y, NULL, },
+ { 'd', "off", poff, NULL, },
+ { 'o', "si_unit_x", pxunit, NULL, },
+ { 'o', "si_unit_y", pyunit, NULL, },
{ 'D', "data", &data_line->data, &data_line->res, },
};
@@ -296,7 +283,6 @@ gwy_data_line_deserialize(const guchar *buffer,
{ 'D', "data", &data, &fsize, },
};
- gwy_debug("");
g_return_val_if_fail(buffer, NULL);
if (!gwy_serialize_unpack_object_struct(buffer, size, position,
@@ -339,7 +325,6 @@ gwy_data_line_duplicate_real(GObject *object)
{
GwyDataLine *data_line, *duplicate;
- g_return_val_if_fail(GWY_IS_DATA_LINE(object), NULL);
data_line = GWY_DATA_LINE(object);
duplicate = gwy_data_line_new_alike(data_line, FALSE);
gwy_assign(duplicate->data, data_line->data, data_line->res);
@@ -367,21 +352,8 @@ gwy_data_line_clone_real(GObject *source, GObject *copy)
gwy_assign(clone->data, data_line->data, data_line->res);
/* SI Units can be NULL */
- if (data_line->si_unit_x && clone->si_unit_x)
- gwy_serializable_clone(G_OBJECT(data_line->si_unit_x),
- G_OBJECT(clone->si_unit_x));
- else if (data_line->si_unit_x && !clone->si_unit_x)
- clone->si_unit_x = gwy_si_unit_duplicate(data_line->si_unit_x);
- else if (!data_line->si_unit_x && clone->si_unit_x)
- GWY_OBJECT_UNREF(clone->si_unit_x);
-
- if (data_line->si_unit_y && clone->si_unit_y)
- gwy_serializable_clone(G_OBJECT(data_line->si_unit_y),
- G_OBJECT(clone->si_unit_y));
- else if (data_line->si_unit_y && !clone->si_unit_y)
- clone->si_unit_y = gwy_si_unit_duplicate(data_line->si_unit_y);
- else if (!data_line->si_unit_y && clone->si_unit_y)
- GWY_OBJECT_UNREF(clone->si_unit_y);
+ _gwy_assign_si_unit(data_line->si_unit_x, &clone->si_unit_x);
+ _gwy_assign_si_unit(data_line->si_unit_y, &clone->si_unit_y);
}
/**
@@ -487,11 +459,7 @@ gwy_data_line_part_extract(GwyDataLine *data_line,
result = gwy_data_line_new(len, data_line->real*len/data_line->res, FALSE);
gwy_assign(result->data, data_line->data + from, len);
-
- if (data_line->si_unit_x)
- result->si_unit_x = gwy_si_unit_duplicate(data_line->si_unit_x);
- if (data_line->si_unit_y)
- result->si_unit_y = gwy_si_unit_duplicate(data_line->si_unit_y);
+ gwy_data_line_copy_units(data_line, result);
return result;
}
@@ -499,7 +467,7 @@ gwy_data_line_part_extract(GwyDataLine *data_line,
/**
* gwy_data_line_copy:
* @data_line: Source data line.
- * @b: Destination data line.
+ * @target: Destination data line.
*
* Copies the contents of a data line to another already allocated data line
* of the same size.
@@ -755,13 +723,7 @@ gwy_data_line_set_si_unit_x(GwyDataLine *data_line,
GwySIUnit *si_unit)
{
g_return_if_fail(GWY_IS_DATA_LINE(data_line));
- g_return_if_fail(GWY_IS_SI_UNIT(si_unit));
- if (data_line->si_unit_x == si_unit)
- return;
-
- GWY_OBJECT_UNREF(data_line->si_unit_x);
- g_object_ref(si_unit);
- data_line->si_unit_x = si_unit;
+ _gwy_set_object_si_unit(si_unit, &data_line->si_unit_x);
}
/**
@@ -769,7 +731,7 @@ gwy_data_line_set_si_unit_x(GwyDataLine *data_line,
* @data_line: A data line.
* @si_unit: SI unit to be set.
*
- * Sets the SI unit corresponding to the "height" (Z) dimension of a data
+ * Sets the SI unit corresponding to the "height" (Y) dimension of a data
* line.
*
* It does not assume a reference on @si_unit, instead it adds its own
@@ -780,13 +742,7 @@ gwy_data_line_set_si_unit_y(GwyDataLine *data_line,
GwySIUnit *si_unit)
{
g_return_if_fail(GWY_IS_DATA_LINE(data_line));
- g_return_if_fail(GWY_IS_SI_UNIT(si_unit));
- if (data_line->si_unit_y == si_unit)
- return;
-
- GWY_OBJECT_UNREF(data_line->si_unit_y);
- g_object_ref(si_unit);
- data_line->si_unit_y = si_unit;
+ _gwy_set_object_si_unit(si_unit, &data_line->si_unit_y);
}
/**
@@ -851,6 +807,44 @@ gwy_data_line_get_value_format_y(GwyDataLine *data_line,
}
/**
+ * gwy_data_line_copy_units:
+ * @data_line: A data line.
+ * @target: Destination data line.
+ *
+ * Sets lateral and value units of a data line to match another data line.
+ *
+ * Since: 2.49
+ **/
+void
+gwy_data_line_copy_units(GwyDataLine *data_line,
+ GwyDataLine *target)
+{
+ g_return_if_fail(GWY_IS_DATA_LINE(data_line));
+ g_return_if_fail(GWY_IS_DATA_LINE(target));
+
+ _gwy_assign_si_unit(data_line->si_unit_x, &target->si_unit_x);
+ _gwy_assign_si_unit(data_line->si_unit_y, &target->si_unit_y);
+}
+
+/**
+ * gwy_data_line_copy_units_to_data_field:
+ * @data_line: A data line to get units from.
+ * @data_field: A data field to set units of.
+ *
+ * Sets lateral and value units of a data field to match a data line.
+ **/
+void
+gwy_data_line_copy_units_to_data_field(GwyDataLine *data_line,
+ GwyDataField *data_field)
+{
+ g_return_if_fail(GWY_IS_DATA_LINE(data_line));
+ g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
+
+ _gwy_assign_si_unit(data_line->si_unit_x, &data_field->si_unit_xy);
+ _gwy_assign_si_unit(data_line->si_unit_y, &data_field->si_unit_z);
+}
+
+/**
* gwy_data_line_itor:
* @data_line: A data line.
* @pixpos: Pixel coordinate.
@@ -1610,7 +1604,6 @@ gwy_data_line_sqrt(GwyDataLine *data_line)
}
}
-
/************************** Documentation ****************************/
/**
diff --git a/libprocess/dataline.h b/libprocess/dataline.h
index 9690eb0..88b622c 100644
--- a/libprocess/dataline.h
+++ b/libprocess/dataline.h
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: dataline.h 18119 2016-01-19 11:01:32Z yeti-dn $
+ * @(#) $Id: dataline.h 20128 2017-08-01 11:19:59Z yeti-dn $
* Copyright (C) 2003 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -85,7 +85,7 @@ GwyDataLine* gwy_data_line_part_extract (GwyDataLine *data_line,
gint from,
gint len);
void gwy_data_line_copy (GwyDataLine *data_line,
- GwyDataLine *b);
+ GwyDataLine *target);
gdouble* gwy_data_line_get_data (GwyDataLine *data_line);
const gdouble* gwy_data_line_get_data_const (GwyDataLine *data_line);
gint gwy_data_line_get_res (GwyDataLine *data_line);
@@ -107,6 +107,8 @@ GwySIValueFormat* gwy_data_line_get_value_format_x (GwyDataLine *data_line,
GwySIValueFormat* gwy_data_line_get_value_format_y (GwyDataLine *data_line,
GwySIUnitFormatStyle style,
GwySIValueFormat *format);
+void gwy_data_line_copy_units (GwyDataLine *data_line,
+ GwyDataLine *target);
gdouble gwy_data_line_itor (GwyDataLine *data_line,
gdouble pixpos);
gdouble gwy_data_line_rtoi (GwyDataLine *data_line,
diff --git a/libprocess/dwt.c b/libprocess/dwt.c
index ccefc72..e15936d 100644
--- a/libprocess/dwt.c
+++ b/libprocess/dwt.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: dwt.c 19108 2016-10-21 08:50:43Z yeti-dn $
+ * @(#) $Id: dwt.c 19698 2017-05-03 20:18:10Z yeti-dn $
* Copyright (C) 2003 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -19,12 +19,11 @@
* Boston, MA 02110-1301, USA.
*/
-#include "config.h"
#include <string.h>
#include <libgwyddion/gwymacros.h>
#include <libgwyddion/gwymath.h>
-#include <libprocess/dwt.h>
#include <libprocess/stats.h>
+#include <libprocess/dwt.h>
typedef struct {
gint ncof;
diff --git a/libprocess/elliptic.c b/libprocess/elliptic.c
index c0ed24b..2c3382b 100644
--- a/libprocess/elliptic.c
+++ b/libprocess/elliptic.c
@@ -1,6 +1,6 @@
/*
- * @(#) $Id: elliptic.c 19036 2016-10-08 10:32:41Z yeti-dn $
- * Copyright (C) 2005-2006 David Necas (Yeti), Petr Klapetek, Chris Anderson.
+ * @(#) $Id: elliptic.c 20283 2017-08-15 08:54:48Z yeti-dn $
+ * Copyright (C) 2005-2017 David Necas (Yeti), Petr Klapetek, Chris Anderson.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net, sidewinder.asu at gmail.com.
*
* This program is free software; you can redistribute it and/or modify
@@ -19,7 +19,6 @@
* Boston, MA 02110-1301, USA.
*/
-#include "config.h"
#include <string.h>
#include <libgwyddion/gwymacros.h>
#include <libgwyddion/gwymath.h>
@@ -255,6 +254,114 @@ gwy_data_field_get_elliptic_area_size(gint width,
}
/**
+ * gwy_data_field_local_maximum:
+ * @dfield: A two-dimensional data field.
+ * @x: Approximate maximum @x-location to be improved (in pixels).
+ * @y: Approximate maximum @y-location to be improved (in pixels).
+ * @ax: Horizontal search radius.
+ * @ay: Vertical search radius.
+ *
+ * Searches an elliptical area in a data field for local maximum.
+ *
+ * The area may stick outside the data field.
+ *
+ * The function first finds the maximum within the ellipse, intersected with
+ * the data field and then tries subpixel refinement. The maximum is
+ * considered successfully located if it is inside the data field, i.e. not on
+ * edge, there is no higher value in its 8-neighbourhood, and the subpixel
+ * refinement of its position succeeds (which usually happens when the
+ * first two conditions are met, but not always).
+ *
+ * Even if the function returns %FALSE the values of @x and @y are reasonable,
+ * but they may not correspond to an actual maximum.
+ *
+ * The radii can be zero. A single pixel is then examined, but if it is indeed
+ * a local maximum, its position is refined.
+ *
+ * Returns: %TRUE if the maximum was successfully located. %FALSE when the
+ * location is problematic and should not be used.
+ *
+ * Since: 2.49
+ **/
+gboolean
+gwy_data_field_local_maximum(GwyDataField *dfield,
+ gdouble *x, gdouble *y,
+ gint ax, gint ay)
+{
+ gint xj,yi, mi, mj, i, j, k;
+ gint xres, yres, xfrom, xto, yfrom, yto;
+ gdouble xx, yy, v, max;
+ const gdouble *d;
+ gdouble z[9];
+ gboolean ok;
+
+ g_return_val_if_fail(GWY_IS_DATA_FIELD(dfield), FALSE);
+ g_return_val_if_fail(x, FALSE);
+ g_return_val_if_fail(y, FALSE);
+
+ xres = dfield->xres;
+ yres = dfield->yres;
+ xj = (gint)(*x);
+ yi = (gint)(*y);
+ ax = ABS(ax);
+ ay = ABS(ay);
+
+ gwy_debug("searching around: %g, %g (%d+-%d, %d+-%d)",
+ *x, *y, xj, ax, yi, ay);
+ mi = mj = 0;
+ max = -G_MAXDOUBLE;
+ yfrom = MAX(yi - ay, 0) - yi;
+ yto = MIN(yi + ay, yres-1) - yi;
+ for (i = yfrom; i <= yto; i++) {
+ v = i/(ay + 0.5);
+ k = (gint)floor((ax + 0.5)*sqrt(1.0 - v*v));
+ xfrom = MAX(xj - k, 0) - xj;
+ xto = MIN(xj + k, xres-1) - xj;
+ d = dfield->data + (i + yi)*xres + (xj + xfrom);
+ for (j = xfrom; j <= xto; j++, d++) {
+ if (*d > max) {
+ max = *d;
+ mi = i;
+ mj = j;
+ }
+ }
+ }
+ mj += xj;
+ mi += yi;
+ gwy_debug("pixel maximum at: %d, %d", mj, mi);
+
+ /* No pixels found at all. */
+ if (max == -G_MAXDOUBLE)
+ return FALSE;
+
+ /* Data field edge. */
+ *x = mj;
+ *y = mi;
+ if (mi == 0 || mi == yres-1 || mj == 0 || mj == xres-1)
+ return FALSE;
+
+ d = dfield->data;
+ k = mi*xres + mj;
+ for (i = -1; i <= 1; i++) {
+ for (j = -1; j <= 1; j++) {
+ v = d[k + i*xres + j];
+ /* Not an actual maximum. */
+ if ((i || j) && v > max)
+ return FALSE;
+ z[3*(i + 1) + (j + 1)] = v;
+ }
+ }
+ ok = gwy_math_refine_maximum_2d(z, &xx, &yy);
+ gwy_debug("refinement by (%g, %g)", xx, yy);
+ if (!ok)
+ return FALSE;
+
+ *x += xx;
+ *y += yy;
+ return TRUE;
+}
+
+/**
* gwy_data_field_circular_area_fill:
* @data_field: A data field.
* @col: Row index of circular area centre.
diff --git a/libprocess/elliptic.h b/libprocess/elliptic.h
index 32c8ac8..adb7d22 100644
--- a/libprocess/elliptic.h
+++ b/libprocess/elliptic.h
@@ -1,6 +1,6 @@
/*
- * @(#) $Id: elliptic.h 15598 2013-11-11 12:33:32Z yeti-dn $
- * Copyright (C) 2005-2006 David Necas (Yeti), Petr Klapetek, Chris Anderson.
+ * @(#) $Id: elliptic.h 20129 2017-08-01 20:01:48Z yeti-dn $
+ * Copyright (C) 2005-2017 David Necas (Yeti), Petr Klapetek, Chris Anderson.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net, sidewinder.asu at gmail.com.
*
* This program is free software; you can redistribute it and/or modify
@@ -26,49 +26,54 @@
G_BEGIN_DECLS
-gint gwy_data_field_elliptic_area_fill (GwyDataField *data_field,
- gint col,
- gint row,
- gint width,
- gint height,
- gdouble value);
-gint gwy_data_field_elliptic_area_extract (GwyDataField *data_field,
- gint col,
- gint row,
- gint width,
- gint height,
- gdouble *data);
-void gwy_data_field_elliptic_area_unextract (GwyDataField *data_field,
- gint col,
- gint row,
- gint width,
- gint height,
- const gdouble *data);
-gint gwy_data_field_get_elliptic_area_size (gint width,
- gint height);
-gint gwy_data_field_circular_area_fill (GwyDataField *data_field,
- gint col,
- gint row,
- gdouble radius,
- gdouble value);
-gint gwy_data_field_circular_area_extract (GwyDataField *data_field,
- gint col,
- gint row,
- gdouble radius,
- gdouble *data);
-gint gwy_data_field_circular_area_extract_with_pos(GwyDataField *data_field,
- gint col,
- gint row,
- gdouble radius,
- gdouble *data,
- gint *xpos,
- gint *ypos);
-void gwy_data_field_circular_area_unextract (GwyDataField *data_field,
- gint col,
- gint row,
- gdouble radius,
- const gdouble *data);
-gint gwy_data_field_get_circular_area_size (gdouble radius);
+gint gwy_data_field_elliptic_area_fill (GwyDataField *data_field,
+ gint col,
+ gint row,
+ gint width,
+ gint height,
+ gdouble value);
+gint gwy_data_field_elliptic_area_extract (GwyDataField *data_field,
+ gint col,
+ gint row,
+ gint width,
+ gint height,
+ gdouble *data);
+void gwy_data_field_elliptic_area_unextract (GwyDataField *data_field,
+ gint col,
+ gint row,
+ gint width,
+ gint height,
+ const gdouble *data);
+gint gwy_data_field_get_elliptic_area_size (gint width,
+ gint height);
+gint gwy_data_field_circular_area_fill (GwyDataField *data_field,
+ gint col,
+ gint row,
+ gdouble radius,
+ gdouble value);
+gint gwy_data_field_circular_area_extract (GwyDataField *data_field,
+ gint col,
+ gint row,
+ gdouble radius,
+ gdouble *data);
+gint gwy_data_field_circular_area_extract_with_pos(GwyDataField *data_field,
+ gint col,
+ gint row,
+ gdouble radius,
+ gdouble *data,
+ gint *xpos,
+ gint *ypos);
+void gwy_data_field_circular_area_unextract (GwyDataField *data_field,
+ gint col,
+ gint row,
+ gdouble radius,
+ const gdouble *data);
+gint gwy_data_field_get_circular_area_size (gdouble radius);
+gboolean gwy_data_field_local_maximum (GwyDataField *dfield,
+ gdouble *x,
+ gdouble *y,
+ gint ax,
+ gint ay);
G_END_DECLS
diff --git a/libprocess/filters-minmax.c b/libprocess/filters-minmax.c
new file mode 100644
index 0000000..b0d9247
--- /dev/null
+++ b/libprocess/filters-minmax.c
@@ -0,0 +1,1574 @@
+/*
+ * @(#) $Id: filters-minmax.c 19698 2017-05-03 20:18:10Z yeti-dn $
+ * Copyright (C) 2003-2016 David Necas (Yeti), Petr Klapetek.
+ * E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include <string.h>
+#include <stdlib.h>
+#include <libgwyddion/gwymacros.h>
+#include <libgwyddion/gwymath.h>
+#include <libprocess/filters.h>
+#include <libprocess/elliptic.h>
+#include <libprocess/stats.h>
+#include <libprocess/linestats.h>
+#include <libprocess/grains.h>
+#include "gwyprocessinternal.h"
+
+/* Data for one row. To be used in conjuction with MinMaxPrecomputedReq. */
+typedef struct {
+ gdouble *storage;
+ gdouble **each;
+ gdouble **even;
+} MinMaxPrecomputedRow;
+
+typedef struct {
+ guint sublen1; /* Even length for the even-odd scheme. */
+ guint sublen2;
+ gboolean needed;
+ gboolean even_even : 1;
+ gboolean even_odd : 1;
+} MinMaxPrecomputedLen;
+
+/* Resolved set of required block lengths and the rules how to compute them. */
+typedef struct {
+ /* NB: The array sizes are maxlen_even+1 and maxlen_each+1 because maxlen
+ * is really the maximum length, inclusive. */
+ MinMaxPrecomputedLen *each;
+ MinMaxPrecomputedLen *even;
+ guint maxlen_each;
+ guint maxlen_even;
+ guint nbuffers; /* The actual number of row buffers (for storage size) */
+} MinMaxPrecomputedReq;
+
+typedef struct {
+ guint row;
+ guint col;
+ guint len;
+} MaskSegment;
+
+typedef struct {
+ MaskSegment *segments;
+ guint nsegments;
+} MaskRLE;
+
+typedef struct {
+ MaskRLE *mrle;
+ MinMaxPrecomputedReq *req;
+ MinMaxPrecomputedRow **prows;
+ gdouble *extrowbuf;
+ guint rowbuflen;
+ guint kxres;
+ guint kyres;
+} MinMaxPrecomputed;
+
+typedef void (*MinMaxPrecomputedRowFill)(const MinMaxPrecomputedReq *req,
+ MinMaxPrecomputedRow *prow,
+ const gdouble *x,
+ guint rowlen);
+
+static void find_required_lengths_recursive(MinMaxPrecomputedReq *req,
+ guint blocklen,
+ gboolean is_even);
+
+/**
+ * gwy_data_field_area_filter_minimum:
+ * @data_field: A data field to apply minimum filter to.
+ * @size: Neighbourhood size for minimum search.
+ * @col: Upper-left column coordinate.
+ * @row: Upper-left row coordinate.
+ * @width: Area width (number of columns).
+ * @height: Area height (number of rows).
+ *
+ * Filters a rectangular part of a data field with minimum filter.
+ *
+ * This operation is often called erosion filter.
+ **/
+void
+gwy_data_field_area_filter_minimum(GwyDataField *data_field,
+ gint size,
+ gint col,
+ gint row,
+ gint width,
+ gint height)
+{
+ GwyDataField *buffer, *buffer2;
+ gint d, i, j, ip, ii, im, jp, jm;
+ gint ep, em; /* positive and negative excess */
+ gdouble *buf, *buf2;
+ gdouble v;
+
+ g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
+ g_return_if_fail(col >= 0 && row >= 0
+ && width > 0 && height > 0
+ && col + width <= data_field->xres
+ && row + height <= data_field->yres);
+ g_return_if_fail(size > 0);
+ if (size == 1)
+ return;
+
+ /* FIXME: does this silly case need an alternative implementation? */
+ if (size/2 >= MIN(width, height)) {
+ g_warning("Too large kernel size for too small area.");
+ return;
+ }
+
+ buffer = gwy_data_field_new(width, height, 1.0, 1.0, FALSE);
+ buffer2 = gwy_data_field_new(width, height, 1.0, 1.0, FALSE);
+ buf = buffer->data;
+ buf2 = buffer2->data;
+
+ d = 1;
+ gwy_data_field_area_copy(data_field, buffer, col, row, width, height, 0, 0);
+ while (3*d < size) {
+ for (i = 0; i < height; i++) {
+ ii = i*width;
+ im = MAX(i - d, 0)*width;
+ ip = MIN(i + d, height-1)*width;
+ for (j = 0; j < width; j++) {
+ jm = MAX(j - d, 0);
+ jp = MIN(j + d, width-1);
+
+ v = MIN(buf[im + jm], buf[im + jp]);
+ if (v > buf[im + j])
+ v = buf[im + j];
+ if (v > buf[ii + jm])
+ v = buf[ii + jm];
+ if (v > buf[ii + j])
+ v = buf[ii + j];
+ if (v > buf[ip + j])
+ v = buf[ip + j];
+ if (v > buf[ii + jp])
+ v = buf[ii + jp];
+ if (v > buf[ip + jm])
+ v = buf[ip + jm];
+ if (v > buf[ip + jp])
+ v = buf[ip + jp];
+
+ buf2[ii + j] = v;
+ }
+ }
+ /* XXX: This breaks the relation between buffer and buf */
+ GWY_SWAP(gdouble*, buf, buf2);
+ d *= 3;
+ }
+
+
+ /* Now we have to overlay the neighbourhoods carefully to get exactly
+ * @size-sized squares. There are two cases:
+ * 1. @size <= 2*d, it's enough to take four corner representants
+ * 2. @size > 2*d, it's necessary to take all nine representants
+ */
+ ep = size/2;
+ em = (size - 1)/2;
+
+ for (i = 0; i < height; i++) {
+ ii = i*width;
+ im = (MAX(i - em, 0) + d/2)*width;
+ ip = (MIN(i + ep, height-1) - d/2)*width;
+
+ for (j = 0; j < width; j++) {
+ jm = MAX(j - em, 0) + d/2;
+ jp = MIN(j + ep, width-1) - d/2;
+
+ v = MIN(buf[im + jm], buf[im + jp]);
+ if (2*d < size) {
+ if (v > buf[im + j])
+ v = buf[im + j];
+ if (v > buf[ii + jm])
+ v = buf[ii + jm];
+ if (v > buf[ii + j])
+ v = buf[ii + j];
+ if (v > buf[ii + jp])
+ v = buf[ii + jp];
+ if (v > buf[ip + j])
+ v = buf[ip + j];
+ }
+ if (v > buf[ip + jm])
+ v = buf[ip + jm];
+ if (v > buf[ip + jp])
+ v = buf[ip + jp];
+
+ buf2[ii + j] = v;
+ }
+ }
+ buffer->data = buf;
+ buffer2->data = buf2;
+
+ gwy_data_field_area_copy(buffer2, data_field,
+ 0, 0, width, height, col, row);
+
+ g_object_unref(buffer2);
+ g_object_unref(buffer);
+}
+
+/**
+ * gwy_data_field_filter_minimum:
+ * @data_field: A data field to apply minimum filter to.
+ * @size: Neighbourhood size for minimum search.
+ *
+ * Filters a data field with minimum filter.
+ **/
+void
+gwy_data_field_filter_minimum(GwyDataField *data_field,
+ gint size)
+{
+ g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
+ gwy_data_field_area_filter_minimum(data_field, size, 0, 0,
+ data_field->xres, data_field->yres);
+}
+
+/**
+ * gwy_data_field_area_filter_maximum:
+ * @data_field: A data field to apply maximum filter to.
+ * @size: Neighbourhood size for maximum search.
+ * @col: Upper-left column coordinate.
+ * @row: Upper-left row coordinate.
+ * @width: Area width (number of columns).
+ * @height: Area height (number of rows).
+ *
+ * Filters a rectangular part of a data field with maximum filter.
+ *
+ * This operation is often called dilation filter.
+ **/
+void
+gwy_data_field_area_filter_maximum(GwyDataField *data_field,
+ gint size,
+ gint col,
+ gint row,
+ gint width,
+ gint height)
+{
+ GwyDataField *buffer, *buffer2;
+ gint d, i, j, ip, ii, im, jp, jm;
+ gint ep, em; /* positive and negative excess */
+ gdouble *buf, *buf2;
+ gdouble v;
+
+ g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
+ g_return_if_fail(col >= 0 && row >= 0
+ && width > 0 && height > 0
+ && col + width <= data_field->xres
+ && row + height <= data_field->yres);
+ g_return_if_fail(size > 0);
+ if (size == 1)
+ return;
+
+ /* FIXME: does this silly case need an alternative implementation? */
+ if (size/2 >= MIN(width, height)) {
+ g_warning("Too large kernel size for too small area.");
+ return;
+ }
+
+ buffer = gwy_data_field_new(width, height, 1.0, 1.0, FALSE);
+ buffer2 = gwy_data_field_new(width, height, 1.0, 1.0, FALSE);
+ buf = buffer->data;
+ buf2 = buffer2->data;
+
+ d = 1;
+ gwy_data_field_area_copy(data_field, buffer, col, row, width, height, 0, 0);
+ while (3*d < size) {
+ for (i = 0; i < height; i++) {
+ ii = i*width;
+ im = MAX(i - d, 0)*width;
+ ip = MIN(i + d, height-1)*width;
+ for (j = 0; j < width; j++) {
+ jm = MAX(j - d, 0);
+ jp = MIN(j + d, width-1);
+
+ v = MAX(buf[im + jm], buf[im + jp]);
+ if (v < buf[im + j])
+ v = buf[im + j];
+ if (v < buf[ii + jm])
+ v = buf[ii + jm];
+ if (v < buf[ii + j])
+ v = buf[ii + j];
+ if (v < buf[ip + j])
+ v = buf[ip + j];
+ if (v < buf[ii + jp])
+ v = buf[ii + jp];
+ if (v < buf[ip + jm])
+ v = buf[ip + jm];
+ if (v < buf[ip + jp])
+ v = buf[ip + jp];
+
+ buf2[ii + j] = v;
+ }
+ }
+ /* XXX: This breaks the relation between buffer and buf */
+ GWY_SWAP(gdouble*, buf, buf2);
+ d *= 3;
+ }
+
+
+ /* Now we have to overlay the neighbourhoods carefully to get exactly
+ * @size-sized squares. There are two cases:
+ * 1. @size <= 2*d, it's enough to take four corner representants
+ * 2. @size > 2*d, it's necessary to take all nine representants
+ */
+ ep = size/2;
+ em = (size - 1)/2;
+
+ for (i = 0; i < height; i++) {
+ ii = i*width;
+ im = (MAX(i - em, 0) + d/2)*width;
+ ip = (MIN(i + ep, height-1) - d/2)*width;
+
+ for (j = 0; j < width; j++) {
+ jm = MAX(j - em, 0) + d/2;
+ jp = MIN(j + ep, width-1) - d/2;
+
+ v = MAX(buf[im + jm], buf[im + jp]);
+ if (2*d < size) {
+ if (v < buf[im + j])
+ v = buf[im + j];
+ if (v < buf[ii + jm])
+ v = buf[ii + jm];
+ if (v < buf[ii + j])
+ v = buf[ii + j];
+ if (v < buf[ii + jp])
+ v = buf[ii + jp];
+ if (v < buf[ip + j])
+ v = buf[ip + j];
+ }
+ if (v < buf[ip + jm])
+ v = buf[ip + jm];
+ if (v < buf[ip + jp])
+ v = buf[ip + jp];
+
+ buf2[ii + j] = v;
+ }
+ }
+ buffer->data = buf;
+ buffer2->data = buf2;
+
+ gwy_data_field_area_copy(buffer2, data_field,
+ 0, 0, width, height, col, row);
+
+ g_object_unref(buffer2);
+ g_object_unref(buffer);
+}
+
+/**
+ * gwy_data_field_filter_maximum:
+ * @data_field: A data field to apply maximum filter to.
+ * @size: Neighbourhood size for maximum search.
+ *
+ * Filters a data field with maximum filter.
+ **/
+void
+gwy_data_field_filter_maximum(GwyDataField *data_field,
+ gint size)
+{
+ g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
+ gwy_data_field_area_filter_maximum(data_field, size, 0, 0,
+ data_field->xres, data_field->yres);
+}
+
+static inline gboolean
+maybe_set_req(MinMaxPrecomputedLen *precomp)
+{
+ if (precomp->needed)
+ return TRUE;
+
+ precomp->needed = TRUE;
+ return FALSE;
+}
+
+static inline void
+fill_req_subs(MinMaxPrecomputedLen *precomp,
+ guint sublen1, guint sublen2,
+ gboolean even_odd, gboolean even_even)
+{
+ precomp->sublen1 = sublen1;
+ precomp->sublen2 = sublen2;
+ precomp->even_even = even_even;
+ precomp->even_odd = even_odd;
+ g_assert(!even_odd || !even_even);
+ g_assert(!even_odd || sublen1 % 2 == 0);
+ g_assert(!even_even || (sublen1 % 2 == 0 && sublen2 % 2 == 0));
+}
+
+static void
+find_required_lengths_recursive(MinMaxPrecomputedReq *req,
+ guint blocklen, gboolean is_even)
+{
+ MinMaxPrecomputedLen *precomp;
+ guint i, j, any = 0;
+
+ g_assert(blocklen);
+
+ if (is_even) {
+ g_assert(blocklen % 2 == 0);
+
+ precomp = req->even + blocklen;
+ if (maybe_set_req(precomp))
+ return;
+
+ if (blocklen == 2) {
+ /* Even(2) = Each(1) + Each(1) */
+ fill_req_subs(precomp, 1, 1, FALSE, FALSE);
+ find_required_lengths_recursive(req, 1, FALSE);
+ }
+ else if (blocklen % 4 == 0) {
+ /* Even(4m) = Even(2m) + Even(2m) */
+ fill_req_subs(precomp, blocklen/2, blocklen/2, FALSE, TRUE);
+ find_required_lengths_recursive(req, blocklen/2, TRUE);
+ }
+ else if (blocklen % 4 == 2) {
+ /* Even(4m+2) = Even(2m+2) + Even(2m) */
+ fill_req_subs(precomp, blocklen/2 - 1, blocklen/2 + 1, FALSE, TRUE);
+ find_required_lengths_recursive(req, blocklen/2 - 1, TRUE);
+ find_required_lengths_recursive(req, blocklen/2 + 1, TRUE);
+ }
+ else {
+ g_assert_not_reached();
+ }
+ }
+ else {
+ precomp = req->each + blocklen;
+ if (maybe_set_req(precomp))
+ return;
+
+ if (blocklen == 1) {
+ /* Even(1), this is always required. There is no construction
+ * rule, of course.*/
+ req->each[1].needed = TRUE;
+ }
+ else if (blocklen % 2 == 0) {
+ /* Try to find a split into two existing lengths. */
+ for (i = 1, j = blocklen-1; i < (blocklen + 1)/2; i++, j--) {
+ if (req->each[i].needed && req->each[j].needed) {
+ fill_req_subs(precomp, i, j, FALSE, FALSE);
+ return;
+ }
+ }
+
+ /* Each(2m) = Each(m) + Each(m) */
+ fill_req_subs(precomp, blocklen/2, blocklen/2, FALSE, FALSE);
+ find_required_lengths_recursive(req, blocklen/2, FALSE);
+ }
+ else if (blocklen % 2 == 1) {
+ /* Try to find a split into two existing lengths. */
+ for (i = 1, j = blocklen-1; i < (blocklen + 1)/2; i++, j--) {
+ if (req->each[i].needed && req->each[j].needed) {
+ fill_req_subs(precomp, i, j, FALSE, FALSE);
+ return;
+ }
+ if (req->even[i].needed && req->each[j].needed) {
+ fill_req_subs(precomp, i, j, TRUE, FALSE);
+ return;
+ }
+ if (req->each[i].needed && req->even[j].needed) {
+ fill_req_subs(precomp, j, i, TRUE, FALSE);
+ return;
+ }
+ if (req->each[i].needed)
+ any = i;
+ }
+ /* Or split to one existing and one new. */
+ if (any) {
+ fill_req_subs(precomp, any, blocklen - any, FALSE, FALSE);
+ find_required_lengths_recursive(req, blocklen - any, FALSE);
+ return;
+ }
+
+ if (blocklen % 4 == 1) {
+ /* Each(4m+1) = Even(2m) + Each(2m+1), Each(2m+1) + Even(2m) */
+ fill_req_subs(precomp, blocklen/2, blocklen/2 + 1, TRUE, FALSE);
+ find_required_lengths_recursive(req, blocklen/2, TRUE);
+ find_required_lengths_recursive(req, blocklen/2 + 1, FALSE);
+ }
+ else if (blocklen % 4 == 3) {
+ /* Each(4m+3) = Even(2m+2) + Each(2m+1), Each(2m+1) + Even(2m+2) */
+ fill_req_subs(precomp, blocklen/2 + 1, blocklen/2, TRUE, FALSE);
+ find_required_lengths_recursive(req, blocklen/2 + 1, TRUE);
+ find_required_lengths_recursive(req, blocklen/2, FALSE);
+ }
+ else {
+ g_assert_not_reached();
+ }
+ }
+ else {
+ g_assert_not_reached();
+ }
+ }
+}
+
+static int
+compare_guint(const void *pa, const void *pb)
+{
+ guint a = *(const guint*)pa, b = *(const guint*)pb;
+
+ if (a < b)
+ return -1;
+ if (a > b)
+ return 1;
+ return 0;
+}
+
+static MinMaxPrecomputedReq*
+find_required_lengths_for_set(const guint *blocklens, guint nlens)
+{
+ MinMaxPrecomputedReq *req = g_new(MinMaxPrecomputedReq, 1);
+ guint *blens = g_new(guint, 2*nlens);
+ guint i, n, maxlen;
+
+ /* Find unique lengths and sort them in ascending order to blens[],
+ * starting ar position nlens. */
+ gwy_assign(blens, blocklens, nlens);
+ qsort(blens, nlens, sizeof(guint), compare_guint);
+
+ blens[nlens] = blens[0];
+ for (i = n = 1; i < nlens; i++) {
+ if (blens[i] > blens[i-1])
+ blens[nlens + n++] = blens[i];
+ }
+
+ maxlen = blens[nlens + n-1];
+ req->maxlen_each = maxlen;
+ req->maxlen_even = maxlen;
+ req->each = g_new0(MinMaxPrecomputedLen, maxlen+1);
+ req->even = g_new0(MinMaxPrecomputedLen, maxlen+1);
+ for (i = 0; i < n; i++)
+ find_required_lengths_recursive(req, blens[nlens + i], FALSE);
+
+ g_free(blens);
+
+ for (i = maxlen; i; i--) {
+ if (req->even[i].needed)
+ break;
+ }
+ req->maxlen_even = i;
+
+ req->nbuffers = 0;
+ for (i = 1; i <= req->maxlen_each; i++) {
+ if (req->each[i].needed)
+ req->nbuffers++;
+ }
+ for (i = 2; i <= req->maxlen_even; i++) {
+ if (req->even[i].needed)
+ req->nbuffers++;
+ }
+
+ return req;
+}
+
+static void
+min_max_precomputed_req_free(MinMaxPrecomputedReq *req)
+{
+ g_free(req->each);
+ g_free(req->even);
+ g_free(req);
+}
+
+/* Allocate data buffers for all lengths. Do not allocate the Each(1) buffer,
+ * we use a direct pointer to the data row for that. */
+static MinMaxPrecomputedRow*
+min_max_precomputed_row_alloc(const MinMaxPrecomputedReq *req,
+ guint rowlen)
+{
+ MinMaxPrecomputedRow *prow = g_new0(MinMaxPrecomputedRow, 1);
+ gdouble *p;
+ guint i;
+
+ prow->storage = p = g_new(gdouble, rowlen*req->nbuffers);
+ prow->each = g_new0(gdouble*, req->maxlen_each + 1);
+ if (req->maxlen_even)
+ prow->even = g_new0(gdouble*, req->maxlen_even + 1);
+
+ for (i = 1; i <= req->maxlen_each; i++) {
+ if (req->each[i].needed) {
+ prow->each[i] = p;
+ p += rowlen;
+ }
+ }
+ for (i = 2; i <= req->maxlen_even; i++) {
+ if (req->even[i].needed) {
+ prow->even[i] = p;
+ p += rowlen;
+ }
+ }
+
+ return prow;
+}
+
+static void
+compose_max_row_data_each(gdouble *target,
+ const gdouble *sub1,
+ guint sublen1,
+ const gdouble *sub2,
+ guint sublen2,
+ guint rowlen)
+{
+ guint i, n;
+
+ g_return_if_fail(sublen1 + sublen2 <= rowlen);
+ g_return_if_fail(target);
+ g_return_if_fail(sub1);
+ g_return_if_fail(sub2);
+
+ sub2 += sublen1;
+ n = rowlen - (sublen1 + sublen2);
+ i = 0;
+ while (i <= n) {
+ target[i] = (*sub1 < *sub2) ? *sub2 : *sub1;
+ i++;
+ sub1++;
+ sub2++;
+ }
+}
+
+static void
+compose_max_row_data_even_odd(gdouble *target,
+ const gdouble *even,
+ guint evenlen,
+ const gdouble *odd,
+ guint oddlen,
+ guint rowlen)
+{
+ const gdouble *even2, *odd2;
+ guint i, n;
+
+ g_return_if_fail(evenlen + oddlen <= rowlen);
+ g_return_if_fail(evenlen % 2 == 0);
+ g_return_if_fail(target);
+ g_return_if_fail(even);
+ g_return_if_fail(odd);
+
+ odd2 = odd + 1;
+ even2 = even + oddlen + 1;
+ odd += evenlen;
+ n = rowlen - (evenlen + oddlen);
+ i = 0;
+ while (i+1 <= n) {
+ /* Now even points to an even position. */
+ target[i] = (*even < *odd) ? *odd : *even;
+ i++;
+ even += 2;
+ odd += 2;
+
+ /* Now even2 points to an even position. */
+ target[i] = (*even2 < *odd2) ? *odd2 : *even2;
+ i++;
+ even2 += 2;
+ odd2 += 2;
+ }
+
+ if (i <= n) {
+ /* Now even points to an even position. */
+ target[i] = (*even < *odd) ? *odd : *even;
+ i++;
+ }
+ if (i <= n) {
+ /* Now even2 points to an even position. */
+ target[i] = (*even2 < *odd2) ? *odd2 : *even2;
+ }
+}
+
+static void
+compose_max_row_data_even(gdouble *target,
+ const gdouble *sub1,
+ guint sublen1,
+ const gdouble *sub2,
+ guint sublen2,
+ guint rowlen)
+{
+ guint i, n;
+
+ g_return_if_fail(sublen1 + sublen2 <= rowlen);
+ g_return_if_fail(sublen1 % 2 == 0);
+ g_return_if_fail(sublen2 % 2 == 0);
+ g_return_if_fail(target);
+ g_return_if_fail(sub1);
+ g_return_if_fail(sub2);
+
+ sub2 += sublen1;
+ n = rowlen - (sublen1 + sublen2);
+ i = 0;
+ while (i <= n) {
+ target[i] = (*sub1 < *sub2) ? *sub2 : *sub1;
+ i += 2;
+ sub1 += 2;
+ sub2 += 2;
+ }
+}
+
+static void
+compose_max_row_data_two(gdouble *target,
+ const gdouble *one,
+ guint rowlen)
+{
+ guint i, n;
+
+ g_return_if_fail(2 <= rowlen);
+ g_return_if_fail(target);
+ g_return_if_fail(one);
+
+ n = rowlen - 2;
+ i = 0;
+ while (i <= n) {
+ target[i] = (*one < *(one + 1)) ? *(one + 1) : *one;
+ i += 2;
+ one += 2;
+ }
+}
+
+/* Precomputes maxima for row. Minimum is always computed from given index
+ * blocklen values *forwards*, i.e. the block is not symmetrical it starts at
+ * the given index. */
+static void
+max_precomputed_row_fill(const MinMaxPrecomputedReq *req,
+ MinMaxPrecomputedRow *prow,
+ const gdouble *x,
+ guint rowlen)
+{
+ guint blen;
+
+ /* The row itself, AKA Each(1). */
+ gwy_assign(prow->each[1], x, rowlen);
+
+ for (blen = 2; blen <= req->maxlen_each; blen++) {
+ const MinMaxPrecomputedLen *precomp;
+
+ precomp = req->each + blen;
+ if (precomp->needed) {
+ g_assert(!precomp->even_even);
+ if (precomp->even_odd) {
+ compose_max_row_data_even_odd(prow->each[blen],
+ prow->even[precomp->sublen1],
+ precomp->sublen1,
+ prow->each[precomp->sublen2],
+ precomp->sublen2,
+ rowlen);
+ }
+ else {
+ compose_max_row_data_each(prow->each[blen],
+ prow->each[precomp->sublen1],
+ precomp->sublen1,
+ prow->each[precomp->sublen2],
+ precomp->sublen2,
+ rowlen);
+ }
+ }
+
+ if (blen > req->maxlen_even)
+ continue;
+
+ precomp = req->even + blen;
+ if (precomp->needed) {
+ g_assert(!precomp->even_odd);
+ if (precomp->even_even) {
+ compose_max_row_data_even(prow->even[blen],
+ prow->even[precomp->sublen1],
+ precomp->sublen1,
+ prow->even[precomp->sublen2],
+ precomp->sublen2,
+ rowlen);
+ }
+ else {
+ g_assert(blen == 2);
+ g_assert(precomp->sublen1 == 1);
+ compose_max_row_data_two(prow->even[blen],
+ prow->each[precomp->sublen1],
+ rowlen);
+ }
+ }
+ }
+}
+
+static void
+compose_min_row_data_each(gdouble *target,
+ const gdouble *sub1,
+ guint sublen1,
+ const gdouble *sub2,
+ guint sublen2,
+ guint rowlen)
+{
+ guint i, n;
+
+ g_return_if_fail(sublen1 + sublen2 <= rowlen);
+ g_return_if_fail(target);
+ g_return_if_fail(sub1);
+ g_return_if_fail(sub2);
+
+ sub2 += sublen1;
+ n = rowlen - (sublen1 + sublen2);
+ i = 0;
+ while (i <= n) {
+ target[i] = (*sub1 > *sub2) ? *sub2 : *sub1;
+ i++;
+ sub1++;
+ sub2++;
+ }
+}
+
+static void
+compose_min_row_data_even_odd(gdouble *target,
+ const gdouble *even,
+ guint evenlen,
+ const gdouble *odd,
+ guint oddlen,
+ guint rowlen)
+{
+ const gdouble *even2, *odd2;
+ guint i, n;
+
+ g_return_if_fail(evenlen + oddlen <= rowlen);
+ g_return_if_fail(evenlen % 2 == 0);
+ g_return_if_fail(target);
+ g_return_if_fail(even);
+ g_return_if_fail(odd);
+
+ odd2 = odd + 1;
+ even2 = even + oddlen + 1;
+ odd += evenlen;
+ n = rowlen - (evenlen + oddlen);
+ i = 0;
+ while (i+1 <= n) {
+ /* Now even points to an even position. */
+ target[i] = (*even > *odd) ? *odd : *even;
+ i++;
+ even += 2;
+ odd += 2;
+
+ /* Now even2 points to an even position. */
+ target[i] = (*even2 > *odd2) ? *odd2 : *even2;
+ i++;
+ even2 += 2;
+ odd2 += 2;
+ }
+
+ if (i <= n) {
+ /* Now even points to an even position. */
+ target[i] = (*even > *odd) ? *odd : *even;
+ i++;
+ }
+ if (i <= n) {
+ /* Now even2 points to an even position. */
+ target[i] = (*even2 > *odd2) ? *odd2 : *even2;
+ }
+}
+
+static void
+compose_min_row_data_even(gdouble *target,
+ const gdouble *sub1,
+ guint sublen1,
+ const gdouble *sub2,
+ guint sublen2,
+ guint rowlen)
+{
+ guint i, n;
+
+ g_return_if_fail(sublen1 + sublen2 <= rowlen);
+ g_return_if_fail(sublen1 % 2 == 0);
+ g_return_if_fail(sublen2 % 2 == 0);
+ g_return_if_fail(target);
+ g_return_if_fail(sub1);
+ g_return_if_fail(sub2);
+
+ sub2 += sublen1;
+ n = rowlen - (sublen1 + sublen2);
+ i = 0;
+ while (i <= n) {
+ target[i] = (*sub1 > *sub2) ? *sub2 : *sub1;
+ i += 2;
+ sub1 += 2;
+ sub2 += 2;
+ }
+}
+
+static void
+compose_min_row_data_two(gdouble *target,
+ const gdouble *one,
+ guint rowlen)
+{
+ guint i, n;
+
+ g_return_if_fail(2 <= rowlen);
+ g_return_if_fail(target);
+ g_return_if_fail(one);
+
+ n = rowlen - 2;
+ i = 0;
+ while (i <= n) {
+ target[i] = (*one > *(one + 1)) ? *(one + 1) : *one;
+ i += 2;
+ one += 2;
+ }
+}
+
+/* Precomputes minima for row. Minimum is always computed from given index
+ * blocklen values *forwards*, i.e. the block is not symmetrical it starts at
+ * the given index. */
+static void
+min_precomputed_row_fill(const MinMaxPrecomputedReq *req,
+ MinMaxPrecomputedRow *prow,
+ const gdouble *x,
+ guint rowlen)
+{
+ guint blen;
+
+ /* The row itself, AKA Each(1). */
+ gwy_assign(prow->each[1], x, rowlen);
+
+ for (blen = 2; blen <= req->maxlen_each; blen++) {
+ const MinMaxPrecomputedLen *precomp;
+
+ precomp = req->each + blen;
+ if (precomp->needed) {
+ g_assert(!precomp->even_even);
+ if (precomp->even_odd) {
+ compose_min_row_data_even_odd(prow->each[blen],
+ prow->even[precomp->sublen1],
+ precomp->sublen1,
+ prow->each[precomp->sublen2],
+ precomp->sublen2,
+ rowlen);
+ }
+ else {
+ compose_min_row_data_each(prow->each[blen],
+ prow->each[precomp->sublen1],
+ precomp->sublen1,
+ prow->each[precomp->sublen2],
+ precomp->sublen2,
+ rowlen);
+ }
+ }
+
+ if (blen > req->maxlen_even)
+ continue;
+
+ precomp = req->even + blen;
+ if (precomp->needed) {
+ g_assert(!precomp->even_odd);
+ if (precomp->even_even) {
+ compose_min_row_data_even(prow->even[blen],
+ prow->even[precomp->sublen1],
+ precomp->sublen1,
+ prow->even[precomp->sublen2],
+ precomp->sublen2,
+ rowlen);
+ }
+ else {
+ g_assert(blen == 2);
+ compose_min_row_data_two(prow->even[blen],
+ prow->each[precomp->sublen1],
+ rowlen);
+ }
+ }
+ }
+}
+
+static void
+min_max_precomputed_row_copy(MinMaxPrecomputedRow *target,
+ const MinMaxPrecomputedRow *source,
+ const MinMaxPrecomputedReq *req,
+ guint rowlen)
+{
+ gwy_assign(target->storage, source->storage, rowlen*req->nbuffers);
+}
+
+static void
+min_max_precomputed_row_free(MinMaxPrecomputedRow *prow)
+{
+ g_free(prow->each);
+ g_free(prow->even);
+ g_free(prow->storage);
+ g_free(prow);
+}
+
+static MaskRLE*
+run_length_encode_mask(GwyDataField *mask)
+{
+ GArray *segments = g_array_new(FALSE, FALSE, sizeof(MaskSegment));
+ MaskRLE *mrle = g_new0(MaskRLE, 1);
+ const gdouble *data = mask->data;
+ guint xres = mask->xres, yres = mask->yres;
+ guint i, j, l;
+
+ for (i = 0; i < yres; i++) {
+ j = l = 0;
+ while (j + l < xres) {
+ if (*(data++))
+ l++;
+ else {
+ if (l) {
+ MaskSegment seg = { i, j, l };
+ g_array_append_val(segments, seg);
+ j += l;
+ l = 0;
+ }
+ j++;
+ }
+ }
+ if (l) {
+ MaskSegment seg = { i, j, l };
+ g_array_append_val(segments, seg);
+ }
+ }
+
+ mrle->nsegments = segments->len;
+ mrle->segments = (MaskSegment*)g_array_free(segments, FALSE);
+ return mrle;
+}
+
+static void
+mask_rle_free(MaskRLE *mrle)
+{
+ g_free(mrle->segments);
+ g_free(mrle);
+}
+
+/* Analyse the set of segments and make a composition plan. */
+static MinMaxPrecomputedReq*
+find_required_lengths_for_rle(const MaskRLE *mrle)
+{
+ MinMaxPrecomputedReq *req;
+ guint *lengths = g_new(guint, mrle->nsegments);
+ guint i;
+
+ for (i = 0; i < mrle->nsegments; i++)
+ lengths[i] = mrle->segments[i].len;
+ req = find_required_lengths_for_set(lengths, mrle->nsegments);
+ g_free(lengths);
+
+ return req;
+}
+
+static inline void
+fill_block(gdouble *data, guint len, gdouble value)
+{
+ while (len--)
+ *(data++) = value;
+}
+
+static inline void
+row_extend_base(const gdouble *in, gdouble *out,
+ guint *pos, guint *width, guint res,
+ guint *extend_left, guint *extend_right)
+{
+ guint e2r, e2l;
+
+ /* Expand the ROI to the right as far as possible */
+ e2r = MIN(*extend_right, res - (*pos + *width));
+ *width += e2r;
+ *extend_right -= e2r;
+
+ /* Expand the ROI to the left as far as possible */
+ e2l = MIN(*extend_left, *pos);
+ *width += e2l;
+ *extend_left -= e2l;
+ *pos -= e2l;
+
+ /* Direct copy of the ROI */
+ gwy_assign(out + *extend_left, in + *pos, *width);
+}
+
+static void
+row_extend_border(const gdouble *in, gdouble *out,
+ guint pos, guint width, guint res,
+ guint extend_left, guint extend_right,
+ G_GNUC_UNUSED gdouble value)
+{
+ row_extend_base(in, out, &pos, &width, res, &extend_left, &extend_right);
+ /* Forward-extend */
+ fill_block(out + extend_left + width, extend_right, in[res-1]);
+ /* Backward-extend */
+ fill_block(out, extend_left, in[0]);
+}
+
+static void
+mask_rle_execute_min_max(const MaskRLE *mrle, MinMaxPrecomputedRow **prows,
+ gdouble *outbuf, guint width, gboolean maximum)
+{
+ const MaskSegment *seg = mrle->segments;
+ guint n = mrle->nsegments, i, j;
+ const gdouble *segdata = prows[seg->row]->each[seg->len] + seg->col;
+
+ gwy_assign(outbuf, segdata, width);
+ seg++;
+ for (i = n-1; i; i--, seg++) {
+ segdata = prows[seg->row]->each[seg->len] + seg->col;
+ if (maximum) {
+ for (j = 0; j < width; j++) {
+ if (outbuf[j] < segdata[j])
+ outbuf[j] = segdata[j];
+ }
+ }
+ else {
+ for (j = 0; j < width; j++) {
+ if (outbuf[j] > segdata[j])
+ outbuf[j] = segdata[j];
+ }
+ }
+ }
+}
+
+static gboolean
+gwy_data_field_area_rle_analyse(GwyDataField *kernel,
+ gint width,
+ MinMaxPrecomputed *mmp)
+{
+ guint kxres, kyres, i;
+
+ kxres = kernel->xres;
+ kyres = kernel->yres;
+ mmp->rowbuflen = width + kxres-1;
+ mmp->kxres = kxres;
+ mmp->kyres = kyres;
+
+ /* Run-length encode the mask, i.e. transform it to a set of segments
+ * and their positions. */
+ mmp->mrle = run_length_encode_mask(kernel);
+ if (!mmp->mrle->nsegments) {
+ mask_rle_free(mmp->mrle);
+ return FALSE;
+ }
+
+ mmp->req = find_required_lengths_for_rle(mmp->mrle);
+
+ /* Create the row buffers for running extrema of various lengths. */
+ mmp->prows = g_new(MinMaxPrecomputedRow*, kyres);
+ for (i = 0; i < kyres; i++)
+ mmp->prows[i] = min_max_precomputed_row_alloc(mmp->req, mmp->rowbuflen);
+
+ mmp->extrowbuf = g_new(gdouble, mmp->rowbuflen);
+
+ return TRUE;
+}
+
+static int
+compare_segment(const void *pa, const void *pb)
+{
+ const MaskSegment *a = (const MaskSegment*)pa, *b = (const MaskSegment*)pb;
+
+ if (a->row < b->row)
+ return -1;
+ if (a->row > b->row)
+ return 1;
+ if (a->col < b->col)
+ return -1;
+ if (a->col > b->col)
+ return 1;
+ return 0;
+}
+
+/* Rotate the RLE data by pi. The set of block lengths does not change.
+ * Therefore, the decompositions do not change either. The only thing that
+ * changes is the positions of the RLE segments. */
+static void
+gwy_data_field_area_rle_flip(MaskRLE *mrle, guint kxres, guint kyres)
+{
+ guint i;
+
+ for (i = 0; i < mrle->nsegments; i++) {
+ MaskSegment *seg = mrle->segments + i;
+ seg->col = kxres - seg->col - seg->len;
+ seg->row = kyres-1 - seg->row;
+ }
+
+ qsort(mrle->segments, mrle->nsegments, sizeof(MaskSegment),
+ compare_segment);
+}
+
+static void
+gwy_data_field_area_rle_free(MinMaxPrecomputed *mmp)
+{
+ guint i;
+
+ g_free(mmp->extrowbuf);
+ for (i = 0; i < mmp->kyres; i++)
+ min_max_precomputed_row_free(mmp->prows[i]);
+ g_free(mmp->prows);
+ min_max_precomputed_req_free(mmp->req);
+ mask_rle_free(mmp->mrle);
+}
+
+static void
+gwy_data_field_area_min_max_execute(GwyDataField *dfield,
+ gdouble *outbuf,
+ MinMaxPrecomputed *mmp,
+ gboolean maximum,
+ gint col, gint row,
+ gint width, gint height)
+{
+ MaskRLE *mrle = mmp->mrle;
+ MinMaxPrecomputedReq *req = mmp->req;
+ MinMaxPrecomputedRow **prows = mmp->prows, *prow;
+ MinMaxPrecomputedRowFill precomp_row_fill;
+ guint xres, yres, i, ii;
+ guint extend_up, extend_down, extend_left, extend_right;
+ gdouble *d, *extrowbuf = mmp->extrowbuf;
+ guint rowbuflen = mmp->rowbuflen;
+
+ xres = dfield->xres;
+ yres = dfield->yres;
+ d = dfield->data;
+ precomp_row_fill = (maximum
+ ? max_precomputed_row_fill
+ : min_precomputed_row_fill);
+
+ /* Initialise the buffers for the zeroth row of the area. For the maximum
+ * operation we even-sized kernels to the other direction to obtain
+ * morphological operation according to definitions. */
+ if (maximum) {
+ extend_up = mmp->kyres/2;
+ extend_down = (mmp->kyres - 1)/2;
+ extend_left = mmp->kxres/2;
+ extend_right = (mmp->kxres - 1)/2;
+ }
+ else {
+ extend_up = (mmp->kyres - 1)/2;
+ extend_down = mmp->kyres/2;
+ extend_left = (mmp->kxres - 1)/2;
+ extend_right = mmp->kxres/2;
+ }
+
+ for (i = 0; i <= extend_down; i++) {
+ if (row + i < yres) {
+ row_extend_border(d + xres*(row + i), extrowbuf,
+ col, width, xres,
+ extend_left, extend_right,
+ 0.0);
+ precomp_row_fill(req, prows[i + extend_up], extrowbuf, rowbuflen);
+ }
+ else
+ min_max_precomputed_row_copy(prows[i], prows[i-1], req, rowbuflen);
+ }
+ for (i = 1; i <= extend_up; i++) {
+ ii = extend_up - i;
+ if (i <= (guint)row) {
+ row_extend_border(d + xres*(row - i), extrowbuf,
+ col, width, xres,
+ extend_left, extend_right,
+ 0.0);
+ precomp_row_fill(req, prows[ii], extrowbuf, rowbuflen);
+ }
+ else
+ min_max_precomputed_row_copy(prows[ii],
+ prows[(ii + 1) % mmp->kyres],
+ req, rowbuflen);
+ }
+
+ /* Go through the rows and extract the minima or maxima from the
+ * precomputed segment data. */
+ i = 0;
+ while (TRUE) {
+ mask_rle_execute_min_max(mrle, prows, outbuf + i*width, width, maximum);
+ i++;
+ if (i == (guint)height)
+ break;
+
+ /* Rotate physically prows[] so that the current row is at the zeroth
+ * position. We could use cyclic buffers but then all subordinate
+ * functions would know how to handle them and calculating mod() for
+ * all indexing is inefficient anyway. */
+ prow = prows[0];
+ for (ii = 0; ii < mmp->kyres-1; ii++)
+ prows[ii] = prows[ii+1];
+ prows[mmp->kyres-1] = prow;
+
+ /* Precompute the new row at the bottom. */
+ ii = row + i + extend_down;
+ if (ii < yres) {
+ row_extend_border(d + xres*ii, extrowbuf,
+ col, width, xres,
+ extend_left, extend_right,
+ 0.0);
+ precomp_row_fill(req, prow, extrowbuf, rowbuflen);
+ }
+ else {
+ g_assert(mmp->kyres >= 2);
+ min_max_precomputed_row_copy(prow, prows[mmp->kyres-2],
+ req, rowbuflen);
+ }
+ }
+}
+
+static gboolean
+kernel_is_nonempty(GwyDataField *dfield)
+{
+ guint i, n = dfield->xres * dfield->yres;
+ gdouble *d = dfield->data;
+
+ for (i = 0; i < n; i++, d++) {
+ if (*d)
+ return TRUE;
+ }
+ return FALSE;
+}
+
+/* NB: The kernel passed to this function should be non-empty. */
+static void
+gwy_data_field_area_filter_min_max_real(GwyDataField *data_field,
+ GwyDataField *kernel,
+ GwyMinMaxFilterType filtertype,
+ gint col, gint row,
+ gint width, gint height)
+{
+ MinMaxPrecomputed mmp;
+ gdouble *outbuf, *d;
+ gint i, j, xres, yres, kxres, kyres;
+
+ g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
+ g_return_if_fail(col >= 0 && row >= 0
+ && width > 0 && height > 0
+ && col + width <= data_field->xres
+ && row + height <= data_field->yres);
+
+ xres = data_field->xres;
+ yres = data_field->yres;
+ kxres = kernel->xres;
+ kyres = kernel->yres;
+ d = data_field->data;
+
+ if (filtertype == GWY_MIN_MAX_FILTER_MINIMUM
+ || filtertype == GWY_MIN_MAX_FILTER_MAXIMUM) {
+ gboolean is_max = (filtertype == GWY_MIN_MAX_FILTER_MAXIMUM);
+
+ gwy_data_field_area_rle_analyse(kernel, width, &mmp);
+ if (is_max)
+ gwy_data_field_area_rle_flip(mmp.mrle, kxres, kyres);
+ outbuf = g_new(gdouble, width*height);
+ gwy_data_field_area_min_max_execute(data_field, outbuf, &mmp, is_max,
+ col, row, width, height);
+ gwy_data_field_area_rle_free(&mmp);
+
+ d += row*xres + col;
+ for (i = 0; i < height; i++)
+ gwy_assign(d + i*xres, outbuf + i*width, width);
+ gwy_data_field_invalidate(data_field);
+ g_free(outbuf);
+ }
+ else if (filtertype == GWY_MIN_MAX_FILTER_RANGE
+ || filtertype == GWY_MIN_MAX_FILTER_NORMALIZATION) {
+ gdouble *outbuf2;
+
+ gwy_data_field_area_rle_analyse(kernel, width, &mmp);
+ outbuf = g_new(gdouble, width*height);
+ gwy_data_field_area_min_max_execute(data_field, outbuf, &mmp, FALSE,
+ col, row, width, height);
+
+ gwy_data_field_area_rle_flip(mmp.mrle, kxres, kyres);
+ outbuf2 = g_new(gdouble, width*height);
+ gwy_data_field_area_min_max_execute(data_field, outbuf2, &mmp, TRUE,
+ col, row, width, height);
+ gwy_data_field_area_rle_free(&mmp);
+
+ d += row*xres + col;
+ if (filtertype == GWY_MIN_MAX_FILTER_RANGE) {
+ for (i = 0; i < height; i++) {
+ for (j = 0; j < width; j++)
+ d[i*xres + j] = outbuf2[i*width + j] - outbuf[i*width + j];
+ }
+ }
+ else {
+ for (i = 0; i < height; i++) {
+ for (j = 0; j < width; j++) {
+ gdouble min = outbuf[i*width + j];
+ gdouble max = outbuf2[i*width + j];
+
+ if (G_UNLIKELY(min == max))
+ d[i*xres + j] = 0.5;
+ else
+ d[i*xres + j] = (d[i*xres + j] - min)/(max - min);
+ }
+ }
+ }
+ gwy_data_field_invalidate(data_field);
+ g_free(outbuf2);
+ g_free(outbuf);
+ }
+ else if (filtertype == GWY_MIN_MAX_FILTER_OPENING
+ || filtertype == GWY_MIN_MAX_FILTER_CLOSING) {
+ gboolean is_closing = (filtertype == GWY_MIN_MAX_FILTER_CLOSING);
+ /* To limit the area of application but keep the influence of
+ * surrouding pixels as if we did erosion and dilation on the entire
+ * field, we must perform the first operation in an extended area. */
+ gint extcol = MAX(0, col - kxres/2);
+ gint extrow = MAX(0, row - kyres/2);
+ gint extwidth = MIN(xres, col + width + kxres/2) - extcol;
+ gint extheight = MIN(yres, row + height + kyres/2) - extrow;
+ GwyDataField *tmpfield;
+
+ gwy_data_field_area_rle_analyse(kernel, extwidth, &mmp);
+ if (is_closing)
+ gwy_data_field_area_rle_flip(mmp.mrle, kxres, kyres);
+ tmpfield = gwy_data_field_new(extwidth, extheight, extwidth, extheight,
+ FALSE);
+ gwy_data_field_area_min_max_execute(data_field, tmpfield->data, &mmp,
+ is_closing,
+ extcol, extrow,
+ extwidth, extheight);
+
+ if (extcol == col && extrow == row
+ && extwidth == width && extheight == height) {
+ /* Avoid repeating the analysis for full-field application. */
+ gwy_data_field_area_rle_flip(mmp.mrle, kxres, kyres);
+ }
+ else {
+ gwy_data_field_area_rle_free(&mmp);
+ gwy_data_field_area_rle_analyse(kernel, width, &mmp);
+ if (!is_closing)
+ gwy_data_field_area_rle_flip(mmp.mrle, kxres, kyres);
+ }
+ outbuf = g_new(gdouble, width*height);
+ gwy_data_field_area_min_max_execute(tmpfield, outbuf, &mmp,
+ !is_closing,
+ col - extcol, row - extrow,
+ width, height);
+ gwy_data_field_area_rle_free(&mmp);
+ g_object_unref(tmpfield);
+
+ d += row*xres + col;
+ for (i = 0; i < height; i++)
+ gwy_assign(d + i*xres, outbuf + i*width, width);
+ gwy_data_field_invalidate(data_field);
+
+ g_free(outbuf);
+ }
+ else {
+ g_return_if_reached();
+ }
+}
+
+/**
+ * gwy_data_field_area_filter_min_max:
+ * @data_field: A data field to apply the filter to.
+ * @kernel: Data field defining the flat structuring element.
+ * @filtertype: The type of filter to apply.
+ * @col: Upper-left column coordinate.
+ * @row: Upper-left row coordinate.
+ * @width: Area width (number of columns).
+ * @height: Area height (number of rows).
+ *
+ * Applies a morphological operation with a flat structuring element to a
+ * part of a data field.
+ *
+ * Morphological operations with flat structuring elements can be expressed
+ * using minimum (erosion) and maximum (dilation) filters that are the basic
+ * operations this function can perform.
+ *
+ * The kernel field is a mask that defines the shape of the flat structuring
+ * element. It is reflected for all maximum operations (dilation). For
+ * symmetrical kernels this does not matter. You can use
+ * gwy_data_field_elliptic_area_fill() to create a true circular (or
+ * elliptical) kernel.
+ *
+ * The kernel is implicitly centered, i.e. it will be applied symmetrically to
+ * avoid unexpected data movement. Even-sized kernels (generally not
+ * recommended) will extend farther towards the top left image corner for
+ * minimum (erosion) and towards the bottom right corner for maximum (dilation)
+ * operations due to the reflection. If you need off-center structuring
+ * elements you can add empty rows or columns to one side of the kernel to
+ * counteract the symmetrisation.
+ *
+ * The operation is linear-time in kernel size for any convex kernel. Note
+ * gwy_data_field_area_filter_minimum() and
+ * gwy_data_field_area_filter_maximum(), which are limited to square
+ * structuring elements, are much faster for large sizes of the squares.
+ *
+ * The exterior is always handled as %GWY_EXTERIOR_BORDER_EXTEND.
+ *
+ * Since: 2.43
+ **/
+void
+gwy_data_field_area_filter_min_max(GwyDataField *data_field,
+ GwyDataField *kernel,
+ GwyMinMaxFilterType filtertype,
+ gint col, gint row,
+ gint width, gint height)
+{
+ GwyDataField *redkernel;
+
+ g_return_if_fail(GWY_IS_DATA_FIELD(kernel));
+ redkernel = gwy_data_field_duplicate(kernel);
+ gwy_data_field_grains_autocrop(redkernel, TRUE, NULL, NULL, NULL, NULL);
+ if (kernel_is_nonempty(redkernel)) {
+ gwy_data_field_area_filter_min_max_real(data_field, redkernel,
+ filtertype,
+ col, row, width, height);
+ }
+ g_object_unref(redkernel);
+}
+
+/**
+ * gwy_data_field_area_filter_disc_asf:
+ * @data_field: A data field to apply the filter to.
+ * @radius: Maximum radius of the circular structuring element, in pixels.
+ * For radius 0 and smaller the filter is no-op.
+ * @closing: %TRUE requests an opening-closing filter (i.e. ending with
+ * closing), %FALSE requests a closing-opening filter (i.e. ending
+ * with opening).
+ * @col: Upper-left column coordinate.
+ * @row: Upper-left row coordinate.
+ * @width: Area width (number of columns).
+ * @height: Area height (number of rows).
+ *
+ * Applies an alternating sequential morphological filter with a flat disc
+ * structuring element to a part of a data field.
+ *
+ * Alternating sequential filter is a filter consisting of repeated opening and
+ * closing (or closing and opening) with progressively larger structuring
+ * elements. This function performs such filtering for sequence of structuring
+ * elements consisting of true Euclidean discs with increasing radii. The
+ * largest disc in the sequence fits into a (2 at size + 1) × (2 at size + 1) square.
+ *
+ * Since: 2.43
+ **/
+void
+gwy_data_field_area_filter_disc_asf(GwyDataField *data_field,
+ gint radius,
+ gboolean closing,
+ gint col,
+ gint row,
+ gint width,
+ gint height)
+{
+ GwyMinMaxFilterType filtertype1, filtertype2;
+ gint r;
+
+ g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
+ g_return_if_fail(col >= 0 && row >= 0
+ && width > 0 && height > 0
+ && col + width <= data_field->xres
+ && row + height <= data_field->yres);
+
+ if (closing) {
+ filtertype1 = GWY_MIN_MAX_FILTER_OPENING;
+ filtertype2 = GWY_MIN_MAX_FILTER_CLOSING;
+ }
+ else {
+ filtertype1 = GWY_MIN_MAX_FILTER_CLOSING;
+ filtertype2 = GWY_MIN_MAX_FILTER_OPENING;
+ }
+
+ for (r = 1; r <= radius; r++) {
+ gint size = 2*r + 1;
+ GwyDataField *kernel = gwy_data_field_new(size, size, size, size, TRUE);
+ gwy_data_field_elliptic_area_fill(kernel, 0, 0, size, size, 1.0);
+ gwy_data_field_area_filter_min_max_real(data_field, kernel, filtertype1,
+ col, row, width, height);
+ gwy_data_field_area_filter_min_max_real(data_field, kernel, filtertype2,
+ col, row, width, height);
+ g_object_unref(kernel);
+ }
+}
+
+/* vim: set cin et ts=4 sw=4 cino=>1s,e0,n0,f0,{0,}0,^0,\:1s,=0,g1s,h0,t0,+1s,c3,(0,u0 : */
diff --git a/libprocess/filters.c b/libprocess/filters.c
index 3db0d72..fffec8d 100644
--- a/libprocess/filters.c
+++ b/libprocess/filters.c
@@ -1,6 +1,6 @@
/*
- * @(#) $Id: filters.c 19128 2016-10-26 21:25:12Z yeti-dn $
- * Copyright (C) 2003-2016 David Necas (Yeti), Petr Klapetek.
+ * @(#) $Id: filters.c 20128 2017-08-01 11:19:59Z yeti-dn $
+ * Copyright (C) 2003-2017 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
* This program is free software; you can redistribute it and/or modify
@@ -19,74 +19,18 @@
* Boston, MA 02110-1301, USA.
*/
-#include "config.h"
#include <string.h>
-#include <stdlib.h>
+#include <fftw3.h>
#include <libgwyddion/gwymacros.h>
#include <libgwyddion/gwymath.h>
#include <libprocess/filters.h>
-#include <libprocess/elliptic.h>
#include <libprocess/stats.h>
#include <libprocess/linestats.h>
-#include <libprocess/grains.h>
+#include <libprocess/inttrans.h>
#include <libprocess/arithmetic.h>
#include "gwyprocessinternal.h"
-/* Data for one row. To be used in conjuction with MinMaxPrecomputedReq. */
-typedef struct {
- gdouble *storage;
- gdouble **each;
- gdouble **even;
-} MinMaxPrecomputedRow;
-
-typedef struct {
- guint sublen1; /* Even length for the even-odd scheme. */
- guint sublen2;
- gboolean needed;
- gboolean even_even : 1;
- gboolean even_odd : 1;
-} MinMaxPrecomputedLen;
-
-/* Resolved set of required block lengths and the rules how to compute them. */
-typedef struct {
- /* NB: The array sizes are maxlen_even+1 and maxlen_each+1 because maxlen
- * is really the maximum length, inclusive. */
- MinMaxPrecomputedLen *each;
- MinMaxPrecomputedLen *even;
- guint maxlen_each;
- guint maxlen_even;
- guint nbuffers; /* The actual number of row buffers (for storage size) */
-} MinMaxPrecomputedReq;
-
-typedef struct {
- guint row;
- guint col;
- guint len;
-} MaskSegment;
-
-typedef struct {
- MaskSegment *segments;
- guint nsegments;
-} MaskRLE;
-
-typedef struct {
- MaskRLE *mrle;
- MinMaxPrecomputedReq *req;
- MinMaxPrecomputedRow **prows;
- gdouble *extrowbuf;
- guint rowbuflen;
- guint kxres;
- guint kyres;
-} MinMaxPrecomputed;
-
-typedef void (*MinMaxPrecomputedRowFill)(const MinMaxPrecomputedReq *req,
- MinMaxPrecomputedRow *prow,
- const gdouble *x,
- guint rowlen);
-
-static void find_required_lengths_recursive(MinMaxPrecomputedReq *req,
- guint blocklen,
- gboolean is_even);
+typedef gdouble (*DoubleArrayFunc)(const gdouble *results);
static gint thin_data_field(GwyDataField *data_field);
@@ -1072,6 +1016,581 @@ gwy_data_field_convolve_1d(GwyDataField *data_field,
0, 0, data_field->xres, data_field->yres);
}
+static void
+ensure_defined_exterior(GwyExteriorType *exterior, gdouble *fill_value)
+{
+ if (*exterior == GWY_EXTERIOR_UNDEFINED) {
+ g_warning("Do not use GWY_EXTERIOR_UNDEFINED for convolutions and "
+ "correlations. Fixing to zero-filled exterior.");
+ *exterior = GWY_EXTERIOR_FIXED_VALUE;
+ *fill_value = 0.0;
+ }
+}
+
+// Symmetrically means that for even @extsize- at size it holds
+// @extend_begining=@extend_end while for an odd difference it holds
+// @extend_begining+1=@extend_end, i.e. it's extended one pixel more at the
+// end.
+static void
+make_symmetrical_extension(guint size, guint extsize,
+ guint *extend_begining, guint *extend_end)
+{
+ guint extend = extsize - size;
+
+ *extend_begining = extend/2;
+ *extend_end = extend - *extend_begining;
+}
+
+static void
+row_convolve_direct(const GwyDataField *field,
+ guint col, guint row,
+ guint width, guint height,
+ GwyDataField *target,
+ guint targetcol, guint targetrow,
+ const GwyDataLine *kernel,
+ RowExtendFunc extend_row,
+ gdouble fill_value)
+{
+ guint xres = field->xres;
+ guint kres = kernel->res;
+ const gdouble *kdata = kernel->data;
+ guint size = width + kres - 1;
+ guint extend_left, extend_right, i, j, k;
+ gdouble *extdata = g_new(gdouble, size);
+
+ make_symmetrical_extension(width, size, &extend_left, &extend_right);
+
+ /* The direct method is used only if kres ≪ res. Don't bother optimising
+ * the boundaries, just make the inner loop tight. */
+ for (i = 0; i < height; i++) {
+ gdouble *trow = target->data + (targetrow + i)*target->xres + targetcol;
+ extend_row(field->data + (row + i)*xres, extdata,
+ col, width, xres, extend_left, extend_right, fill_value);
+ for (j = 0; j < width; j++) {
+ const gdouble *d = extdata + extend_left + kres/2 + j;
+ gdouble v = 0.0;
+ for (k = 0; k < kres; k++, d--)
+ v += kdata[k] * *d;
+ trow[j] = v;
+ }
+ }
+
+ g_free(extdata);
+}
+
+static inline void
+extend_kernel_row(const gdouble *kernel, guint klen,
+ gdouble *extended, guint size)
+{
+ guint llen = klen/2, rlen = klen - llen;
+ gwy_assign(extended, kernel + llen, rlen);
+ gwy_clear(extended + rlen, size - klen);
+ gwy_assign(extended + size - llen, kernel, llen);
+}
+
+static void
+extend_kernel_rect(const gdouble *kernel,
+ guint kxlen, guint kylen,
+ gdouble *extended,
+ guint xsize, guint ysize, guint rowstride)
+{
+ guint ulen = kylen/2, dlen = kylen - ulen;
+ guint i;
+
+ for (i = 0; i < dlen; i++) {
+ extend_kernel_row(kernel + (i + ulen)*kxlen, kxlen,
+ extended + i*rowstride, xsize);
+ }
+ gwy_clear(extended + dlen*rowstride, (ysize - kylen)*rowstride);
+ for (i = 0; i < ulen; i++) {
+ extend_kernel_row(kernel + i*kxlen, kxlen,
+ extended + (ysize - ulen + i)*rowstride, xsize);
+ }
+}
+
+static inline void
+complex_multiply_with(fftw_complex *a, const fftw_complex *b)
+{
+ gdouble re = (*a)[0]*(*b)[0] - (*a)[1]*(*b)[1];
+
+ (*a)[1] = (*a)[1]*(*b)[0] + (*a)[0]*(*b)[1];
+ (*a)[0] = re;
+}
+
+static void
+row_convolve_fft(GwyDataField *field,
+ guint col, guint row,
+ guint width, guint height,
+ GwyDataField *target,
+ guint targetcol, guint targetrow,
+ GwyDataLine *kernel,
+ RowExtendFunc extend_row,
+ gdouble fill_value)
+{
+ guint xres = field->xres, kres = kernel->res;
+ guint size = gwy_fft_find_nice_size(width + kres - 1);
+ // The innermost (contiguous) dimension of R2C the complex output is
+ // slightly larger than the real input. Note @cstride is measured in
+ // fftw_complex, multiply it by 2 for doubles.
+ guint cstride = size/2 + 1;
+ guint extend_left, extend_right, i, j;
+ gdouble *extdata = g_new(gdouble, size);
+ fftw_complex *datac = g_new(fftw_complex, 2*cstride);
+ fftw_complex *kernelc = datac + cstride;
+ fftw_plan dplan, cplan;
+ gdouble q;
+
+ /* The R2C plan for transforming the extended data row (or kernel). */
+ dplan = fftw_plan_dft_r2c_1d(size, extdata, datac,
+ FFTW_DESTROY_INPUT | _GWY_FFTW_PATIENCE);
+ g_assert(dplan);
+ /* The C2R plan the backward transform of the convolution of each row. */
+ cplan = fftw_plan_dft_c2r_1d(size, datac, extdata, _GWY_FFTW_PATIENCE);
+ g_assert(cplan);
+
+ // Transform the kernel.
+ extend_kernel_row(kernel->data, kres, extdata, size);
+ fftw_execute(dplan);
+ gwy_assign(kernelc, datac, cstride);
+
+ // Convolve rows
+ make_symmetrical_extension(width, size, &extend_left, &extend_right);
+ q = 1.0/size;
+ for (i = 0; i < height; i++) {
+ extend_row(field->data + (row + i)*xres, extdata,
+ col, width, xres, extend_left, extend_right, fill_value);
+ fftw_execute(dplan);
+ for (j = 0; j < cstride; j++) {
+ complex_multiply_with(datac + j, kernelc + j);
+ datac[j][0] *= q;
+ datac[j][1] *= q;
+ }
+ fftw_execute(cplan);
+ gwy_assign(target->data + (targetrow + i)*target->xres + targetcol,
+ extdata + extend_left,
+ width);
+ }
+
+ fftw_destroy_plan(cplan);
+ fftw_destroy_plan(dplan);
+ fftw_free(datac);
+ fftw_free(extdata);
+}
+
+/**
+ * gwy_data_field_area_ext_row_convolve:
+ * @field: A two-dimensional data field.
+ * @col: Upper-left column coordinate.
+ * @row: Upper-left row coordinate.
+ * @width: Area width (number of columns).
+ * @height: Area height (number of rows).
+ * @target: A two-dimensional data field where the result will be placed.
+ * It may be @field for an in-place modification.
+ * @kernel: Kernel to convolve @field with.
+ * @exterior: Exterior pixels handling.
+ * @fill_value: The value to use with %GWY_EXTERIOR_FIXED_VALUE exterior.
+ * @as_integral: %TRUE for normalisation and units as a convolution integral,
+ * %FALSE as a sum.
+ *
+ * Convolve a field row-wise with a one-dimensional kernel.
+ *
+ * Pixel dimensions of @target may match either @field or just the rectangular
+ * area. In the former case the result is written in the same rectangular
+ * area; in the latter case the result fills the entire @target.
+ *
+ * The convolution is performed with the kernel centred on the respective field
+ * pixels. For an odd-sized kernel this holds precisely. For an even-sized
+ * kernel this means the kernel centre is placed 0.5 pixel to the left
+ * (towards lower column indices) from the respective field pixel.
+ *
+ * See gwy_data_field_extend() for what constitutes the exterior and how it is
+ * handled.
+ *
+ * If @as_integral is %FALSE the function performs a simple discrete
+ * convolution sum and the value units of @target are set to product of @field
+ * and @kernel units.
+ *
+ * If @as_integral is %TRUE the function approximates a convolution integral.
+ * In this case @kernel should be a sampled continuous transfer function.
+ * The units of value @target are set to product of @field and @kernel value
+ * units and @field lateral units. Furthermore, the discrete sum is multiplied
+ * by the pixel size (i.e. d at x in the integral).
+ *
+ * In either case, the lateral units and pixel size of @kernel are assumed to
+ * be the same as for a @field's row (albeit not checked), because
+ * the convolution does not make sense otherwise.
+ *
+ * Since: 2.49
+ **/
+void
+gwy_data_field_area_ext_row_convolve(GwyDataField *field,
+ guint col, guint row,
+ guint width, guint height,
+ GwyDataField *target,
+ GwyDataLine *kernel,
+ GwyExteriorType exterior,
+ gdouble fill_value,
+ gboolean as_integral)
+{
+ guint xres, yres;
+ guint targetcol, targetrow;
+ GwySIUnit *funit, *kunit, *tunit;
+ RowExtendFunc extend_row;
+ gdouble dx, dy;
+
+ g_return_if_fail(GWY_IS_DATA_FIELD(field));
+ g_return_if_fail(GWY_IS_DATA_FIELD(target));
+ g_return_if_fail(GWY_IS_DATA_LINE(kernel));
+ xres = field->xres;
+ yres = field->yres;
+ g_return_if_fail(col < xres && row < yres);
+ g_return_if_fail(width > 0 && height > 0);
+ g_return_if_fail(col + width <= xres && row + height <= yres);
+ g_return_if_fail((target->xres == xres && target->yres == yres)
+ || (target->xres == width && target->yres == height));
+ targetcol = (target->xres == xres) ? col : 0;
+ targetrow = (target->yres == yres) ? row : 0;
+
+ ensure_defined_exterior(&exterior, &fill_value);
+ if (!(extend_row = _gwy_get_row_extend_func(exterior)))
+ return;
+
+ if (width <= 12 || kernel->res <= 3.0*(log(width) - 1.0)) {
+ row_convolve_direct(field, col, row, width, height,
+ target, targetcol, targetrow,
+ kernel, extend_row, fill_value);
+ }
+ else {
+ row_convolve_fft(field, col, row, width, height,
+ target, targetcol, targetrow,
+ kernel, extend_row, fill_value);
+ }
+
+ dx = field->xreal/field->xres;
+ dy = field->yreal/field->yres;
+ if (target != field) {
+ _gwy_assign_si_unit(field->si_unit_xy, &target->si_unit_xy);
+ target->xreal = dx*target->xres;
+ target->yreal = dy*target->yres;
+ }
+
+ funit = gwy_data_field_get_si_unit_z(field);
+ kunit = gwy_data_line_get_si_unit_y(kernel);
+ tunit = gwy_data_field_get_si_unit_z(target);
+ gwy_si_unit_multiply(funit, kunit, tunit);
+ if (as_integral) {
+ funit = gwy_data_field_get_si_unit_xy(field);
+ gwy_si_unit_multiply(tunit, funit, tunit);
+ gwy_data_field_multiply(target, dx);
+ }
+
+ gwy_data_field_invalidate(target);
+}
+
+/**
+ * multiconvolve_direct:
+ * @field: A two-dimensional data field.
+ * @col: First ROI column.
+ * @row: First RIO row.
+ * @width: ROI width.
+ * @height: RIO height.
+ * @target: A two-dimensional data field where the result will be placed.
+ * It may be @field itself.
+ * @targetcol: Column to place the result into @target.
+ * @targetrow: Target to place the result into @target.
+ * @kernel: Array of @nkernel equally-sized kernel.
+ * @nkernel: Number of items in @kernel.
+ * @combine_results: Function to combine results of individual convolutions
+ * to the final result put to @target. May be %NULL if
+ * @nkernel is 1.
+ * @extend_rect: Rectangle extending method.
+ * @fill_value: The value to use with fixed-value exterior.
+ *
+ * Performs convolution of a field with a number of equally-sized kenrels,
+ * combining the results of individual convolutions into a single value.
+ */
+static void
+multiconvolve_direct(GwyDataField *field,
+ guint col, guint row,
+ guint width, guint height,
+ GwyDataField *target,
+ guint targetcol, guint targetrow,
+ GwyDataField **kernel,
+ guint nkernel,
+ DoubleArrayFunc combine_results,
+ RectExtendFunc extend_rect,
+ gdouble fill_value)
+{
+ guint xres, yres, kxres, kyres, xsize, ysize;
+ guint extend_left, extend_right, extend_up, extend_down;
+ gdouble *extdata;
+ guint kno, i, j, ik, jk;
+
+ g_return_if_fail(nkernel);
+ g_return_if_fail(kernel);
+ g_return_if_fail(nkernel == 1 || combine_results);
+
+ xres = field->xres;
+ yres = field->yres;
+ kxres = kernel[0]->xres;
+ kyres = kernel[0]->yres;
+ for (kno = 1; kno < nkernel; kno++) {
+ g_return_if_fail(kernel[kno]->xres == kxres
+ && kernel[kno]->yres == kyres);
+ }
+
+ xsize = width + kxres - 1;
+ ysize = height + kyres - 1;
+ extdata = g_new(gdouble, xsize*ysize);
+ make_symmetrical_extension(width, xsize, &extend_left, &extend_right);
+ make_symmetrical_extension(height, ysize, &extend_up, &extend_down);
+
+ extend_rect(field->data, xres, extdata, xsize,
+ col, row, width, height, xres, yres,
+ extend_left, extend_right, extend_up, extend_down, fill_value);
+
+ /* The direct method is used only if kres ≪ res. Don't bother optimising
+ * the boundaries, just make the inner loop tight. */
+ if (nkernel == 1) {
+ const gdouble *kdata = kernel[0]->data;
+ for (i = 0; i < height; i++) {
+ gdouble *trow = target->data + ((targetrow + i)*target->xres
+ + targetcol);
+ for (j = 0; j < width; j++) {
+ const gdouble *id = extdata + (extend_up + kyres/2 + i)*xsize;
+ gdouble v = 0.0;
+ for (ik = 0; ik < kyres; ik++, id -= xsize) {
+ const gdouble *jd = id + extend_left + kxres/2 + j;
+ const gdouble *krow = kdata + ik*kxres;
+ for (jk = 0; jk < kxres; jk++, jd--)
+ v += krow[jk] * *jd;
+ }
+ trow[j] = v;
+ }
+ }
+ }
+ else {
+ for (i = 0; i < height; i++) {
+ gdouble *trow = target->data + ((targetrow + i)*target->xres
+ + targetcol);
+ for (j = 0; j < width; j++) {
+ gdouble results[nkernel];
+ for (kno = 0; kno < nkernel; kno++) {
+ const gdouble *id = extdata + (extend_up
+ + kyres/2 + i)*xsize;
+ const gdouble *kdata = kernel[kno]->data;
+ gdouble v = 0.0;
+ for (ik = 0; ik < kyres; ik++, id -= xsize) {
+ const gdouble *jd = id + extend_left + kxres/2 + j;
+ const gdouble *krow = kdata + ik*kxres;
+ for (jk = 0; jk < kxres; jk++, jd--)
+ v += krow[jk] * *jd;
+ }
+ results[kno] = v;
+ }
+ trow[j] = combine_results(results);
+ }
+ }
+ }
+
+ g_free(extdata);
+}
+
+static void
+convolve_fft(GwyDataField *field,
+ guint col, guint row,
+ guint width, guint height,
+ GwyDataField *target,
+ guint targetcol, guint targetrow,
+ GwyDataField *kernel,
+ RectExtendFunc extend_rect,
+ gdouble fill_value)
+{
+ guint xres = field->xres, yres = field->yres,
+ kxres = kernel->xres, kyres = kernel->yres;
+ guint xsize = gwy_fft_find_nice_size(width + kxres - 1);
+ guint ysize = gwy_fft_find_nice_size(height + kyres - 1);
+ // The innermost (contiguous) dimension of R2C the complex output is
+ // slightly larger than the real input. If the transform is in-place the
+ // input array needs to be padded. Note @cstride is measured in
+ // fftw_complex, multiply it by 2 for doubles.
+ guint cstride = xsize/2 + 1;
+ // Use in-place transforms. Let FFTW figure out whether allocating
+ // temporary buffers worths it or not.
+ fftw_complex *datac = g_new(fftw_complex, cstride*ysize);
+ gdouble *extdata = (gdouble*)datac;
+ fftw_complex *kernelc = g_new(fftw_complex, cstride*ysize);
+ guint extend_left, extend_right, extend_up, extend_down;
+ guint i, k;
+ fftw_plan kplan, dplan, cplan;
+ gdouble q;
+
+ make_symmetrical_extension(width, xsize, &extend_left, &extend_right);
+ make_symmetrical_extension(height, ysize, &extend_up, &extend_down);
+
+ // The R2C plan for transforming the extended kernel. The input is in
+ // extdata to make it an out-of-place transform (this also means the input
+ // data row stride is just xsize, not 2*cstride).
+ kplan = fftw_plan_dft_r2c_2d(ysize, xsize, extdata, kernelc,
+ FFTW_DESTROY_INPUT | _GWY_FFTW_PATIENCE);
+ g_assert(kplan);
+ // The R2C plan for transforming the extended data. This one is in-place.
+ dplan = fftw_plan_dft_r2c_2d(ysize, xsize, extdata, datac,
+ FFTW_DESTROY_INPUT | _GWY_FFTW_PATIENCE);
+ g_assert(dplan);
+ // The C2R plan the backward transform of the convolution. The input
+ // is in fact in kernelc to make it an out-of-place transform. So, again,
+ // the output has cstride of only xsize.
+ cplan = fftw_plan_dft_c2r_2d(ysize, xsize, kernelc, extdata,
+ _GWY_FFTW_PATIENCE);
+ g_assert(cplan);
+
+ // Transform the kernel.
+ extend_kernel_rect(kernel->data, kxres, kyres,
+ extdata, xsize, ysize, xsize);
+ fftw_execute(kplan);
+
+ // Convolve
+ extend_rect(field->data, xres, extdata, 2*cstride,
+ col, row, width, height, xres, yres,
+ extend_left, extend_right, extend_up, extend_down, fill_value);
+ fftw_execute(dplan);
+
+ q = 1.0/(xsize*ysize);
+ for (k = 0; k < cstride*ysize; k++) {
+ complex_multiply_with(kernelc + k, datac + k);
+ kernelc[k][0] *= q;
+ kernelc[k][1] *= q;
+ }
+ fftw_execute(cplan);
+
+ for (i = 0; i < height; i++) {
+ gwy_assign(target->data + (targetrow + i)*target->xres + targetcol,
+ extdata + (extend_up + i)*xsize + extend_left,
+ width);
+ }
+
+ fftw_destroy_plan(kplan);
+ fftw_destroy_plan(cplan);
+ fftw_destroy_plan(dplan);
+ fftw_free(kernelc);
+ fftw_free(datac);
+}
+
+/**
+ * gwy_data_field_area_ext_convolve:
+ * @field: A two-dimensional data field.
+ * @col: Upper-left column coordinate.
+ * @row: Upper-left row coordinate.
+ * @width: Area width (number of columns).
+ * @height: Area height (number of rows).
+ * @target: A two-dimensional data field where the result will be placed.
+ * It may be @field for an in-place modification.
+ * @kernel: Kernel to convolve @field with.
+ * @exterior: Exterior pixels handling.
+ * @fill_value: The value to use with %GWY_EXTERIOR_FIXED_VALUE exterior.
+ * @as_integral: %TRUE for normalisation and units as a convolution integral,
+ * %FALSE as a sum.
+ *
+ * Convolve a field with a two-dimensional kernel.
+ *
+ * Pixel dimensions of @target may match either @field or just the rectangular
+ * area. In the former case the result is written in the same rectangular
+ * area; in the latter case the result fills the entire @target.
+ *
+ * The convolution is performed with the kernel centred on the respective field
+ * pixels. For directions in which the kernel has an odd size this holds
+ * precisely. For an even-sized kernel this means the kernel centre is placed
+ * 0.5 pixel left or up (towards lower indices) from the respective field
+ * pixel.
+ *
+ * See gwy_data_field_extend() for what constitutes the exterior and how it is
+ * handled.
+ *
+ * If @as_integral is %FALSE the function performs a simple discrete
+ * convolution sum and the value units of @target are set to product of @field
+ * and @kernel units.
+ *
+ * If @as_integral is %TRUE the function approximates a convolution integral.
+ * In this case @kernel should be a sampled continuous transfer function.
+ * The units of value @target are set to product of @field and @kernel value
+ * units and @field lateral units squared. Furthermore, the discrete sum is
+ * multiplied by the pixel size (i.e. d at x d at y in the integral).
+ *
+ * In either case, the lateral units and pixel size of @kernel are assumed to
+ * be the same as for @field (albeit not checked), because the convolution does
+ * not make sense otherwise.
+ *
+ * Since: 2.49
+ **/
+void
+gwy_data_field_area_ext_convolve(GwyDataField *field,
+ guint col, guint row,
+ guint width, guint height,
+ GwyDataField *target,
+ GwyDataField *kernel,
+ GwyExteriorType exterior,
+ gdouble fill_value,
+ gboolean as_integral)
+{
+ guint xres, yres, size;
+ guint targetcol, targetrow;
+ GwySIUnit *funit, *kunit, *tunit;
+ RectExtendFunc extend_rect;
+ gdouble dx, dy;
+
+ g_return_if_fail(GWY_IS_DATA_FIELD(field));
+ g_return_if_fail(GWY_IS_DATA_FIELD(target));
+ g_return_if_fail(GWY_IS_DATA_FIELD(kernel));
+ xres = field->xres;
+ yres = field->yres;
+ g_return_if_fail(col < xres && row < yres);
+ g_return_if_fail(width > 0 && height > 0);
+ g_return_if_fail(col + width <= xres && row + height <= yres);
+ g_return_if_fail((target->xres == xres && target->yres == yres)
+ || (target->xres == width && target->yres == height));
+ targetcol = (target->xres == xres) ? col : 0;
+ targetrow = (target->yres == yres) ? row : 0;
+
+ ensure_defined_exterior(&exterior, &fill_value);
+ if (!(extend_rect =_gwy_get_rect_extend_func(exterior)))
+ return;
+
+ size = height*width;
+ if (size <= 25) {
+ multiconvolve_direct(field, col, row, width, height,
+ target, targetcol, targetrow,
+ &kernel, 1, NULL, extend_rect, fill_value);
+ }
+ else {
+ convolve_fft(field, col, row, width, height,
+ target, targetcol, targetrow,
+ kernel, extend_rect, fill_value);
+ }
+
+ dx = field->xreal/field->xres;
+ dy = field->yreal/field->yres;
+ if (target != field) {
+ funit = gwy_data_field_get_si_unit_xy(field);
+ tunit = gwy_data_field_get_si_unit_xy(target);
+ gwy_serializable_clone(G_OBJECT(funit), G_OBJECT(tunit));
+ target->xreal = dx*target->xres;
+ target->yreal = dy*target->yres;
+ }
+
+ funit = gwy_data_field_get_si_unit_z(field);
+ kunit = gwy_data_field_get_si_unit_z(kernel);
+ tunit = gwy_data_field_get_si_unit_z(target);
+ gwy_si_unit_multiply(funit, kunit, tunit);
+ if (as_integral) {
+ funit = gwy_data_field_get_si_unit_xy(field);
+ gwy_si_unit_power_multiply(tunit, 1, funit, 2, tunit);
+ gwy_data_field_multiply(target, dx*dy);
+ }
+
+ gwy_data_field_invalidate(target);
+}
+
/**
* gwy_data_field_area_filter_mean:
* @data_field: A data field to apply the filter to.
@@ -1341,8 +1860,8 @@ gwy_data_field_area_filter_laplacian_of_gaussians(GwyDataField *data_field,
gint i, j;
laplacian_of_gaussians = gwy_data_field_new(5, 5, 5.0, 5.0, TRUE);
- for(i = 0; i < 5; i++)
- for(j = 0; j < 5; j++)
+ for (i = 0; i < 5; i++)
+ for (j = 0; j < 5; j++)
gwy_data_field_set_val(laplacian_of_gaussians, j, i,
laplacian_of_gaussians_data[i*5+j]);
g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
@@ -2046,1491 +2565,6 @@ thin_data_field(GwyDataField *data_field)
}
/**
- * gwy_data_field_area_filter_minimum:
- * @data_field: A data field to apply minimum filter to.
- * @size: Neighbourhood size for minimum search.
- * @col: Upper-left column coordinate.
- * @row: Upper-left row coordinate.
- * @width: Area width (number of columns).
- * @height: Area height (number of rows).
- *
- * Filters a rectangular part of a data field with minimum filter.
- *
- * This operation is often called erosion filter.
- **/
-void
-gwy_data_field_area_filter_minimum(GwyDataField *data_field,
- gint size,
- gint col,
- gint row,
- gint width,
- gint height)
-{
- GwyDataField *buffer, *buffer2;
- gint d, i, j, ip, ii, im, jp, jm;
- gint ep, em; /* positive and negative excess */
- gdouble *buf, *buf2;
- gdouble v;
-
- g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
- g_return_if_fail(col >= 0 && row >= 0
- && width > 0 && height > 0
- && col + width <= data_field->xres
- && row + height <= data_field->yres);
- g_return_if_fail(size > 0);
- if (size == 1)
- return;
-
- /* FIXME: does this silly case need an alternative implementation? */
- if (size/2 >= MIN(width, height)) {
- g_warning("Too large kernel size for too small area.");
- return;
- }
-
- buffer = gwy_data_field_new(width, height, 1.0, 1.0, FALSE);
- buffer2 = gwy_data_field_new(width, height, 1.0, 1.0, FALSE);
- buf = buffer->data;
- buf2 = buffer2->data;
-
- d = 1;
- gwy_data_field_area_copy(data_field, buffer, col, row, width, height, 0, 0);
- while (3*d < size) {
- for (i = 0; i < height; i++) {
- ii = i*width;
- im = MAX(i - d, 0)*width;
- ip = MIN(i + d, height-1)*width;
- for (j = 0; j < width; j++) {
- jm = MAX(j - d, 0);
- jp = MIN(j + d, width-1);
-
- v = MIN(buf[im + jm], buf[im + jp]);
- if (v > buf[im + j])
- v = buf[im + j];
- if (v > buf[ii + jm])
- v = buf[ii + jm];
- if (v > buf[ii + j])
- v = buf[ii + j];
- if (v > buf[ip + j])
- v = buf[ip + j];
- if (v > buf[ii + jp])
- v = buf[ii + jp];
- if (v > buf[ip + jm])
- v = buf[ip + jm];
- if (v > buf[ip + jp])
- v = buf[ip + jp];
-
- buf2[ii + j] = v;
- }
- }
- /* XXX: This breaks the relation between buffer and buf */
- GWY_SWAP(gdouble*, buf, buf2);
- d *= 3;
- }
-
-
- /* Now we have to overlay the neighbourhoods carefully to get exactly
- * @size-sized squares. There are two cases:
- * 1. @size <= 2*d, it's enough to take four corner representants
- * 2. @size > 2*d, it's necessary to take all nine representants
- */
- ep = size/2;
- em = (size - 1)/2;
-
- for (i = 0; i < height; i++) {
- ii = i*width;
- im = (MAX(i - em, 0) + d/2)*width;
- ip = (MIN(i + ep, height-1) - d/2)*width;
-
- for (j = 0; j < width; j++) {
- jm = MAX(j - em, 0) + d/2;
- jp = MIN(j + ep, width-1) - d/2;
-
- v = MIN(buf[im + jm], buf[im + jp]);
- if (2*d < size) {
- if (v > buf[im + j])
- v = buf[im + j];
- if (v > buf[ii + jm])
- v = buf[ii + jm];
- if (v > buf[ii + j])
- v = buf[ii + j];
- if (v > buf[ii + jp])
- v = buf[ii + jp];
- if (v > buf[ip + j])
- v = buf[ip + j];
- }
- if (v > buf[ip + jm])
- v = buf[ip + jm];
- if (v > buf[ip + jp])
- v = buf[ip + jp];
-
- buf2[ii + j] = v;
- }
- }
- buffer->data = buf;
- buffer2->data = buf2;
-
- gwy_data_field_area_copy(buffer2, data_field,
- 0, 0, width, height, col, row);
-
- g_object_unref(buffer2);
- g_object_unref(buffer);
-}
-
-/**
- * gwy_data_field_filter_minimum:
- * @data_field: A data field to apply minimum filter to.
- * @size: Neighbourhood size for minimum search.
- *
- * Filters a data field with minimum filter.
- **/
-void
-gwy_data_field_filter_minimum(GwyDataField *data_field,
- gint size)
-{
- g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
- gwy_data_field_area_filter_minimum(data_field, size, 0, 0,
- data_field->xres, data_field->yres);
-}
-
-/**
- * gwy_data_field_area_filter_maximum:
- * @data_field: A data field to apply maximum filter to.
- * @size: Neighbourhood size for maximum search.
- * @col: Upper-left column coordinate.
- * @row: Upper-left row coordinate.
- * @width: Area width (number of columns).
- * @height: Area height (number of rows).
- *
- * Filters a rectangular part of a data field with maximum filter.
- *
- * This operation is often called dilation filter.
- **/
-void
-gwy_data_field_area_filter_maximum(GwyDataField *data_field,
- gint size,
- gint col,
- gint row,
- gint width,
- gint height)
-{
- GwyDataField *buffer, *buffer2;
- gint d, i, j, ip, ii, im, jp, jm;
- gint ep, em; /* positive and negative excess */
- gdouble *buf, *buf2;
- gdouble v;
-
- g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
- g_return_if_fail(col >= 0 && row >= 0
- && width > 0 && height > 0
- && col + width <= data_field->xres
- && row + height <= data_field->yres);
- g_return_if_fail(size > 0);
- if (size == 1)
- return;
-
- /* FIXME: does this silly case need an alternative implementation? */
- if (size/2 >= MIN(width, height)) {
- g_warning("Too large kernel size for too small area.");
- return;
- }
-
- buffer = gwy_data_field_new(width, height, 1.0, 1.0, FALSE);
- buffer2 = gwy_data_field_new(width, height, 1.0, 1.0, FALSE);
- buf = buffer->data;
- buf2 = buffer2->data;
-
- d = 1;
- gwy_data_field_area_copy(data_field, buffer, col, row, width, height, 0, 0);
- while (3*d < size) {
- for (i = 0; i < height; i++) {
- ii = i*width;
- im = MAX(i - d, 0)*width;
- ip = MIN(i + d, height-1)*width;
- for (j = 0; j < width; j++) {
- jm = MAX(j - d, 0);
- jp = MIN(j + d, width-1);
-
- v = MAX(buf[im + jm], buf[im + jp]);
- if (v < buf[im + j])
- v = buf[im + j];
- if (v < buf[ii + jm])
- v = buf[ii + jm];
- if (v < buf[ii + j])
- v = buf[ii + j];
- if (v < buf[ip + j])
- v = buf[ip + j];
- if (v < buf[ii + jp])
- v = buf[ii + jp];
- if (v < buf[ip + jm])
- v = buf[ip + jm];
- if (v < buf[ip + jp])
- v = buf[ip + jp];
-
- buf2[ii + j] = v;
- }
- }
- /* XXX: This breaks the relation between buffer and buf */
- GWY_SWAP(gdouble*, buf, buf2);
- d *= 3;
- }
-
-
- /* Now we have to overlay the neighbourhoods carefully to get exactly
- * @size-sized squares. There are two cases:
- * 1. @size <= 2*d, it's enough to take four corner representants
- * 2. @size > 2*d, it's necessary to take all nine representants
- */
- ep = size/2;
- em = (size - 1)/2;
-
- for (i = 0; i < height; i++) {
- ii = i*width;
- im = (MAX(i - em, 0) + d/2)*width;
- ip = (MIN(i + ep, height-1) - d/2)*width;
-
- for (j = 0; j < width; j++) {
- jm = MAX(j - em, 0) + d/2;
- jp = MIN(j + ep, width-1) - d/2;
-
- v = MAX(buf[im + jm], buf[im + jp]);
- if (2*d < size) {
- if (v < buf[im + j])
- v = buf[im + j];
- if (v < buf[ii + jm])
- v = buf[ii + jm];
- if (v < buf[ii + j])
- v = buf[ii + j];
- if (v < buf[ii + jp])
- v = buf[ii + jp];
- if (v < buf[ip + j])
- v = buf[ip + j];
- }
- if (v < buf[ip + jm])
- v = buf[ip + jm];
- if (v < buf[ip + jp])
- v = buf[ip + jp];
-
- buf2[ii + j] = v;
- }
- }
- buffer->data = buf;
- buffer2->data = buf2;
-
- gwy_data_field_area_copy(buffer2, data_field,
- 0, 0, width, height, col, row);
-
- g_object_unref(buffer2);
- g_object_unref(buffer);
-}
-
-/**
- * gwy_data_field_filter_maximum:
- * @data_field: A data field to apply maximum filter to.
- * @size: Neighbourhood size for maximum search.
- *
- * Filters a data field with maximum filter.
- **/
-void
-gwy_data_field_filter_maximum(GwyDataField *data_field,
- gint size)
-{
- g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
- gwy_data_field_area_filter_maximum(data_field, size, 0, 0,
- data_field->xres, data_field->yres);
-}
-
-static inline gboolean
-maybe_set_req(MinMaxPrecomputedLen *precomp)
-{
- if (precomp->needed)
- return TRUE;
-
- precomp->needed = TRUE;
- return FALSE;
-}
-
-static inline void
-fill_req_subs(MinMaxPrecomputedLen *precomp,
- guint sublen1, guint sublen2,
- gboolean even_odd, gboolean even_even)
-{
- precomp->sublen1 = sublen1;
- precomp->sublen2 = sublen2;
- precomp->even_even = even_even;
- precomp->even_odd = even_odd;
- g_assert(!even_odd || !even_even);
- g_assert(!even_odd || sublen1 % 2 == 0);
- g_assert(!even_even || (sublen1 % 2 == 0 && sublen2 % 2 == 0));
-}
-
-static void
-find_required_lengths_recursive(MinMaxPrecomputedReq *req,
- guint blocklen, gboolean is_even)
-{
- MinMaxPrecomputedLen *precomp;
- guint i, j, any = 0;
-
- g_assert(blocklen);
-
- if (is_even) {
- g_assert(blocklen % 2 == 0);
-
- precomp = req->even + blocklen;
- if (maybe_set_req(precomp))
- return;
-
- if (blocklen == 2) {
- /* Even(2) = Each(1) + Each(1) */
- fill_req_subs(precomp, 1, 1, FALSE, FALSE);
- find_required_lengths_recursive(req, 1, FALSE);
- }
- else if (blocklen % 4 == 0) {
- /* Even(4m) = Even(2m) + Even(2m) */
- fill_req_subs(precomp, blocklen/2, blocklen/2, FALSE, TRUE);
- find_required_lengths_recursive(req, blocklen/2, TRUE);
- }
- else if (blocklen % 4 == 2) {
- /* Even(4m+2) = Even(2m+2) + Even(2m) */
- fill_req_subs(precomp, blocklen/2 - 1, blocklen/2 + 1, FALSE, TRUE);
- find_required_lengths_recursive(req, blocklen/2 - 1, TRUE);
- find_required_lengths_recursive(req, blocklen/2 + 1, TRUE);
- }
- else {
- g_assert_not_reached();
- }
- }
- else {
- precomp = req->each + blocklen;
- if (maybe_set_req(precomp))
- return;
-
- if (blocklen == 1) {
- /* Even(1), this is always required. There is no construction
- * rule, of course.*/
- req->each[1].needed = TRUE;
- }
- else if (blocklen % 2 == 0) {
- /* Try to find a split into two existing lengths. */
- for (i = 1, j = blocklen-1; i < (blocklen + 1)/2; i++, j--) {
- if (req->each[i].needed && req->each[j].needed) {
- fill_req_subs(precomp, i, j, FALSE, FALSE);
- return;
- }
- }
-
- /* Each(2m) = Each(m) + Each(m) */
- fill_req_subs(precomp, blocklen/2, blocklen/2, FALSE, FALSE);
- find_required_lengths_recursive(req, blocklen/2, FALSE);
- }
- else if (blocklen % 2 == 1) {
- /* Try to find a split into two existing lengths. */
- for (i = 1, j = blocklen-1; i < (blocklen + 1)/2; i++, j--) {
- if (req->each[i].needed && req->each[j].needed) {
- fill_req_subs(precomp, i, j, FALSE, FALSE);
- return;
- }
- if (req->even[i].needed && req->each[j].needed) {
- fill_req_subs(precomp, i, j, TRUE, FALSE);
- return;
- }
- if (req->each[i].needed && req->even[j].needed) {
- fill_req_subs(precomp, j, i, TRUE, FALSE);
- return;
- }
- if (req->each[i].needed)
- any = i;
- }
- /* Or split to one existing and one new. */
- if (any) {
- fill_req_subs(precomp, any, blocklen - any, FALSE, FALSE);
- find_required_lengths_recursive(req, blocklen - any, FALSE);
- return;
- }
-
- if (blocklen % 4 == 1) {
- /* Each(4m+1) = Even(2m) + Each(2m+1), Each(2m+1) + Even(2m) */
- fill_req_subs(precomp, blocklen/2, blocklen/2 + 1, TRUE, FALSE);
- find_required_lengths_recursive(req, blocklen/2, TRUE);
- find_required_lengths_recursive(req, blocklen/2 + 1, FALSE);
- }
- else if (blocklen % 4 == 3) {
- /* Each(4m+3) = Even(2m+2) + Each(2m+1), Each(2m+1) + Even(2m+2) */
- fill_req_subs(precomp, blocklen/2 + 1, blocklen/2, TRUE, FALSE);
- find_required_lengths_recursive(req, blocklen/2 + 1, TRUE);
- find_required_lengths_recursive(req, blocklen/2, FALSE);
- }
- else {
- g_assert_not_reached();
- }
- }
- else {
- g_assert_not_reached();
- }
- }
-}
-
-static int
-compare_guint(const void *pa, const void *pb)
-{
- guint a = *(const guint*)pa, b = *(const guint*)pb;
-
- if (a < b)
- return -1;
- if (a > b)
- return 1;
- return 0;
-}
-
-static MinMaxPrecomputedReq*
-find_required_lengths_for_set(const guint *blocklens, guint nlens)
-{
- MinMaxPrecomputedReq *req = g_new(MinMaxPrecomputedReq, 1);
- guint *blens = g_new(guint, 2*nlens);
- guint i, n, maxlen;
-
- /* Find unique lengths and sort them in ascending order to blens[],
- * starting ar position nlens. */
- gwy_assign(blens, blocklens, nlens);
- qsort(blens, nlens, sizeof(guint), compare_guint);
-
- blens[nlens] = blens[0];
- for (i = n = 1; i < nlens; i++) {
- if (blens[i] > blens[i-1])
- blens[nlens + n++] = blens[i];
- }
-
- maxlen = blens[nlens + n-1];
- req->maxlen_each = maxlen;
- req->maxlen_even = maxlen;
- req->each = g_new0(MinMaxPrecomputedLen, maxlen+1);
- req->even = g_new0(MinMaxPrecomputedLen, maxlen+1);
- for (i = 0; i < n; i++)
- find_required_lengths_recursive(req, blens[nlens + i], FALSE);
-
- g_free(blens);
-
- for (i = maxlen; i; i--) {
- if (req->even[i].needed)
- break;
- }
- req->maxlen_even = i;
-
- req->nbuffers = 0;
- for (i = 1; i <= req->maxlen_each; i++) {
- if (req->each[i].needed)
- req->nbuffers++;
- }
- for (i = 2; i <= req->maxlen_even; i++) {
- if (req->even[i].needed)
- req->nbuffers++;
- }
-
- return req;
-}
-
-static void
-min_max_precomputed_req_free(MinMaxPrecomputedReq *req)
-{
- g_free(req->each);
- g_free(req->even);
- g_free(req);
-}
-
-/* Allocate data buffers for all lengths. Do not allocate the Each(1) buffer,
- * we use a direct pointer to the data row for that. */
-static MinMaxPrecomputedRow*
-min_max_precomputed_row_alloc(const MinMaxPrecomputedReq *req,
- guint rowlen)
-{
- MinMaxPrecomputedRow *prow = g_new0(MinMaxPrecomputedRow, 1);
- gdouble *p;
- guint i;
-
- prow->storage = p = g_new(gdouble, rowlen*req->nbuffers);
- prow->each = g_new0(gdouble*, req->maxlen_each + 1);
- if (req->maxlen_even)
- prow->even = g_new0(gdouble*, req->maxlen_even + 1);
-
- for (i = 1; i <= req->maxlen_each; i++) {
- if (req->each[i].needed) {
- prow->each[i] = p;
- p += rowlen;
- }
- }
- for (i = 2; i <= req->maxlen_even; i++) {
- if (req->even[i].needed) {
- prow->even[i] = p;
- p += rowlen;
- }
- }
-
- return prow;
-}
-
-static void
-compose_max_row_data_each(gdouble *target,
- const gdouble *sub1,
- guint sublen1,
- const gdouble *sub2,
- guint sublen2,
- guint rowlen)
-{
- guint i, n;
-
- g_return_if_fail(sublen1 + sublen2 <= rowlen);
- g_return_if_fail(target);
- g_return_if_fail(sub1);
- g_return_if_fail(sub2);
-
- sub2 += sublen1;
- n = rowlen - (sublen1 + sublen2);
- i = 0;
- while (i <= n) {
- target[i] = (*sub1 < *sub2) ? *sub2 : *sub1;
- i++;
- sub1++;
- sub2++;
- }
-}
-
-static void
-compose_max_row_data_even_odd(gdouble *target,
- const gdouble *even,
- guint evenlen,
- const gdouble *odd,
- guint oddlen,
- guint rowlen)
-{
- const gdouble *even2, *odd2;
- guint i, n;
-
- g_return_if_fail(evenlen + oddlen <= rowlen);
- g_return_if_fail(evenlen % 2 == 0);
- g_return_if_fail(target);
- g_return_if_fail(even);
- g_return_if_fail(odd);
-
- odd2 = odd + 1;
- even2 = even + oddlen + 1;
- odd += evenlen;
- n = rowlen - (evenlen + oddlen);
- i = 0;
- while (i+1 <= n) {
- /* Now even points to an even position. */
- target[i] = (*even < *odd) ? *odd : *even;
- i++;
- even += 2;
- odd += 2;
-
- /* Now even2 points to an even position. */
- target[i] = (*even2 < *odd2) ? *odd2 : *even2;
- i++;
- even2 += 2;
- odd2 += 2;
- }
-
- if (i <= n) {
- /* Now even points to an even position. */
- target[i] = (*even < *odd) ? *odd : *even;
- i++;
- }
- if (i <= n) {
- /* Now even2 points to an even position. */
- target[i] = (*even2 < *odd2) ? *odd2 : *even2;
- }
-}
-
-static void
-compose_max_row_data_even(gdouble *target,
- const gdouble *sub1,
- guint sublen1,
- const gdouble *sub2,
- guint sublen2,
- guint rowlen)
-{
- guint i, n;
-
- g_return_if_fail(sublen1 + sublen2 <= rowlen);
- g_return_if_fail(sublen1 % 2 == 0);
- g_return_if_fail(sublen2 % 2 == 0);
- g_return_if_fail(target);
- g_return_if_fail(sub1);
- g_return_if_fail(sub2);
-
- sub2 += sublen1;
- n = rowlen - (sublen1 + sublen2);
- i = 0;
- while (i <= n) {
- target[i] = (*sub1 < *sub2) ? *sub2 : *sub1;
- i += 2;
- sub1 += 2;
- sub2 += 2;
- }
-}
-
-static void
-compose_max_row_data_two(gdouble *target,
- const gdouble *one,
- guint rowlen)
-{
- guint i, n;
-
- g_return_if_fail(2 <= rowlen);
- g_return_if_fail(target);
- g_return_if_fail(one);
-
- n = rowlen - 2;
- i = 0;
- while (i <= n) {
- target[i] = (*one < *(one + 1)) ? *(one + 1) : *one;
- i += 2;
- one += 2;
- }
-}
-
-/* Precomputes maxima for row. Minimum is always computed from given index
- * blocklen values *forwards*, i.e. the block is not symmetrical it starts at
- * the given index. */
-static void
-max_precomputed_row_fill(const MinMaxPrecomputedReq *req,
- MinMaxPrecomputedRow *prow,
- const gdouble *x,
- guint rowlen)
-{
- guint blen;
-
- /* The row itself, AKA Each(1). */
- gwy_assign(prow->each[1], x, rowlen);
-
- for (blen = 2; blen <= req->maxlen_each; blen++) {
- const MinMaxPrecomputedLen *precomp;
-
- precomp = req->each + blen;
- if (precomp->needed) {
- g_assert(!precomp->even_even);
- if (precomp->even_odd) {
- compose_max_row_data_even_odd(prow->each[blen],
- prow->even[precomp->sublen1],
- precomp->sublen1,
- prow->each[precomp->sublen2],
- precomp->sublen2,
- rowlen);
- }
- else {
- compose_max_row_data_each(prow->each[blen],
- prow->each[precomp->sublen1],
- precomp->sublen1,
- prow->each[precomp->sublen2],
- precomp->sublen2,
- rowlen);
- }
- }
-
- if (blen > req->maxlen_even)
- continue;
-
- precomp = req->even + blen;
- if (precomp->needed) {
- g_assert(!precomp->even_odd);
- if (precomp->even_even) {
- compose_max_row_data_even(prow->even[blen],
- prow->even[precomp->sublen1],
- precomp->sublen1,
- prow->even[precomp->sublen2],
- precomp->sublen2,
- rowlen);
- }
- else {
- g_assert(blen == 2);
- g_assert(precomp->sublen1 == 1);
- compose_max_row_data_two(prow->even[blen],
- prow->each[precomp->sublen1],
- rowlen);
- }
- }
- }
-}
-
-static void
-compose_min_row_data_each(gdouble *target,
- const gdouble *sub1,
- guint sublen1,
- const gdouble *sub2,
- guint sublen2,
- guint rowlen)
-{
- guint i, n;
-
- g_return_if_fail(sublen1 + sublen2 <= rowlen);
- g_return_if_fail(target);
- g_return_if_fail(sub1);
- g_return_if_fail(sub2);
-
- sub2 += sublen1;
- n = rowlen - (sublen1 + sublen2);
- i = 0;
- while (i <= n) {
- target[i] = (*sub1 > *sub2) ? *sub2 : *sub1;
- i++;
- sub1++;
- sub2++;
- }
-}
-
-static void
-compose_min_row_data_even_odd(gdouble *target,
- const gdouble *even,
- guint evenlen,
- const gdouble *odd,
- guint oddlen,
- guint rowlen)
-{
- const gdouble *even2, *odd2;
- guint i, n;
-
- g_return_if_fail(evenlen + oddlen <= rowlen);
- g_return_if_fail(evenlen % 2 == 0);
- g_return_if_fail(target);
- g_return_if_fail(even);
- g_return_if_fail(odd);
-
- odd2 = odd + 1;
- even2 = even + oddlen + 1;
- odd += evenlen;
- n = rowlen - (evenlen + oddlen);
- i = 0;
- while (i+1 <= n) {
- /* Now even points to an even position. */
- target[i] = (*even > *odd) ? *odd : *even;
- i++;
- even += 2;
- odd += 2;
-
- /* Now even2 points to an even position. */
- target[i] = (*even2 > *odd2) ? *odd2 : *even2;
- i++;
- even2 += 2;
- odd2 += 2;
- }
-
- if (i <= n) {
- /* Now even points to an even position. */
- target[i] = (*even > *odd) ? *odd : *even;
- i++;
- }
- if (i <= n) {
- /* Now even2 points to an even position. */
- target[i] = (*even2 > *odd2) ? *odd2 : *even2;
- }
-}
-
-static void
-compose_min_row_data_even(gdouble *target,
- const gdouble *sub1,
- guint sublen1,
- const gdouble *sub2,
- guint sublen2,
- guint rowlen)
-{
- guint i, n;
-
- g_return_if_fail(sublen1 + sublen2 <= rowlen);
- g_return_if_fail(sublen1 % 2 == 0);
- g_return_if_fail(sublen2 % 2 == 0);
- g_return_if_fail(target);
- g_return_if_fail(sub1);
- g_return_if_fail(sub2);
-
- sub2 += sublen1;
- n = rowlen - (sublen1 + sublen2);
- i = 0;
- while (i <= n) {
- target[i] = (*sub1 > *sub2) ? *sub2 : *sub1;
- i += 2;
- sub1 += 2;
- sub2 += 2;
- }
-}
-
-static void
-compose_min_row_data_two(gdouble *target,
- const gdouble *one,
- guint rowlen)
-{
- guint i, n;
-
- g_return_if_fail(2 <= rowlen);
- g_return_if_fail(target);
- g_return_if_fail(one);
-
- n = rowlen - 2;
- i = 0;
- while (i <= n) {
- target[i] = (*one > *(one + 1)) ? *(one + 1) : *one;
- i += 2;
- one += 2;
- }
-}
-
-/* Precomputes minima for row. Minimum is always computed from given index
- * blocklen values *forwards*, i.e. the block is not symmetrical it starts at
- * the given index. */
-static void
-min_precomputed_row_fill(const MinMaxPrecomputedReq *req,
- MinMaxPrecomputedRow *prow,
- const gdouble *x,
- guint rowlen)
-{
- guint blen;
-
- /* The row itself, AKA Each(1). */
- gwy_assign(prow->each[1], x, rowlen);
-
- for (blen = 2; blen <= req->maxlen_each; blen++) {
- const MinMaxPrecomputedLen *precomp;
-
- precomp = req->each + blen;
- if (precomp->needed) {
- g_assert(!precomp->even_even);
- if (precomp->even_odd) {
- compose_min_row_data_even_odd(prow->each[blen],
- prow->even[precomp->sublen1],
- precomp->sublen1,
- prow->each[precomp->sublen2],
- precomp->sublen2,
- rowlen);
- }
- else {
- compose_min_row_data_each(prow->each[blen],
- prow->each[precomp->sublen1],
- precomp->sublen1,
- prow->each[precomp->sublen2],
- precomp->sublen2,
- rowlen);
- }
- }
-
- if (blen > req->maxlen_even)
- continue;
-
- precomp = req->even + blen;
- if (precomp->needed) {
- g_assert(!precomp->even_odd);
- if (precomp->even_even) {
- compose_min_row_data_even(prow->even[blen],
- prow->even[precomp->sublen1],
- precomp->sublen1,
- prow->even[precomp->sublen2],
- precomp->sublen2,
- rowlen);
- }
- else {
- g_assert(blen == 2);
- compose_min_row_data_two(prow->even[blen],
- prow->each[precomp->sublen1],
- rowlen);
- }
- }
- }
-}
-
-static void
-min_max_precomputed_row_copy(MinMaxPrecomputedRow *target,
- const MinMaxPrecomputedRow *source,
- const MinMaxPrecomputedReq *req,
- guint rowlen)
-{
- gwy_assign(target->storage, source->storage, rowlen*req->nbuffers);
-}
-
-static void
-min_max_precomputed_row_free(MinMaxPrecomputedRow *prow)
-{
- g_free(prow->each);
- g_free(prow->even);
- g_free(prow->storage);
- g_free(prow);
-}
-
-static MaskRLE*
-run_length_encode_mask(GwyDataField *mask)
-{
- GArray *segments = g_array_new(FALSE, FALSE, sizeof(MaskSegment));
- MaskRLE *mrle = g_new0(MaskRLE, 1);
- const gdouble *data = mask->data;
- guint xres = mask->xres, yres = mask->yres;
- guint i, j, l;
-
- for (i = 0; i < yres; i++) {
- j = l = 0;
- while (j + l < xres) {
- if (*(data++))
- l++;
- else {
- if (l) {
- MaskSegment seg = { i, j, l };
- g_array_append_val(segments, seg);
- j += l;
- l = 0;
- }
- j++;
- }
- }
- if (l) {
- MaskSegment seg = { i, j, l };
- g_array_append_val(segments, seg);
- }
- }
-
- mrle->nsegments = segments->len;
- mrle->segments = (MaskSegment*)g_array_free(segments, FALSE);
- return mrle;
-}
-
-static void
-mask_rle_free(MaskRLE *mrle)
-{
- g_free(mrle->segments);
- g_free(mrle);
-}
-
-/* Analyse the set of segments and make a composition plan. */
-static MinMaxPrecomputedReq*
-find_required_lengths_for_rle(const MaskRLE *mrle)
-{
- MinMaxPrecomputedReq *req;
- guint *lengths = g_new(guint, mrle->nsegments);
- guint i;
-
- for (i = 0; i < mrle->nsegments; i++)
- lengths[i] = mrle->segments[i].len;
- req = find_required_lengths_for_set(lengths, mrle->nsegments);
- g_free(lengths);
-
- return req;
-}
-
-static inline void
-fill_block(gdouble *data, guint len, gdouble value)
-{
- while (len--)
- *(data++) = value;
-}
-
-static inline void
-row_extend_base(const gdouble *in, gdouble *out,
- guint *pos, guint *width, guint res,
- guint *extend_left, guint *extend_right)
-{
- guint e2r, e2l;
-
- /* Expand the ROI to the right as far as possible */
- e2r = MIN(*extend_right, res - (*pos + *width));
- *width += e2r;
- *extend_right -= e2r;
-
- /* Expand the ROI to the left as far as possible */
- e2l = MIN(*extend_left, *pos);
- *width += e2l;
- *extend_left -= e2l;
- *pos -= e2l;
-
- /* Direct copy of the ROI */
- gwy_assign(out + *extend_left, in + *pos, *width);
-}
-
-static void
-row_extend_border(const gdouble *in, gdouble *out,
- guint pos, guint width, guint res,
- guint extend_left, guint extend_right,
- G_GNUC_UNUSED gdouble value)
-{
- row_extend_base(in, out, &pos, &width, res, &extend_left, &extend_right);
- /* Forward-extend */
- fill_block(out + extend_left + width, extend_right, in[res-1]);
- /* Backward-extend */
- fill_block(out, extend_left, in[0]);
-}
-
-static void
-mask_rle_execute_min_max(const MaskRLE *mrle, MinMaxPrecomputedRow **prows,
- gdouble *outbuf, guint width, gboolean maximum)
-{
- const MaskSegment *seg = mrle->segments;
- guint n = mrle->nsegments, i, j;
- const gdouble *segdata = prows[seg->row]->each[seg->len] + seg->col;
-
- gwy_assign(outbuf, segdata, width);
- seg++;
- for (i = n-1; i; i--, seg++) {
- segdata = prows[seg->row]->each[seg->len] + seg->col;
- if (maximum) {
- for (j = 0; j < width; j++) {
- if (outbuf[j] < segdata[j])
- outbuf[j] = segdata[j];
- }
- }
- else {
- for (j = 0; j < width; j++) {
- if (outbuf[j] > segdata[j])
- outbuf[j] = segdata[j];
- }
- }
- }
-}
-
-static gboolean
-gwy_data_field_area_rle_analyse(GwyDataField *kernel,
- gint width,
- MinMaxPrecomputed *mmp)
-{
- guint kxres, kyres, i;
-
- kxres = kernel->xres;
- kyres = kernel->yres;
- mmp->rowbuflen = width + kxres-1;
- mmp->kxres = kxres;
- mmp->kyres = kyres;
-
- /* Run-length encode the mask, i.e. transform it to a set of segments
- * and their positions. */
- mmp->mrle = run_length_encode_mask(kernel);
- if (!mmp->mrle->nsegments) {
- mask_rle_free(mmp->mrle);
- return FALSE;
- }
-
- mmp->req = find_required_lengths_for_rle(mmp->mrle);
-
- /* Create the row buffers for running extrema of various lengths. */
- mmp->prows = g_new(MinMaxPrecomputedRow*, kyres);
- for (i = 0; i < kyres; i++)
- mmp->prows[i] = min_max_precomputed_row_alloc(mmp->req, mmp->rowbuflen);
-
- mmp->extrowbuf = g_new(gdouble, mmp->rowbuflen);
-
- return TRUE;
-}
-
-static int
-compare_segment(const void *pa, const void *pb)
-{
- const MaskSegment *a = (const MaskSegment*)pa, *b = (const MaskSegment*)pb;
-
- if (a->row < b->row)
- return -1;
- if (a->row > b->row)
- return 1;
- if (a->col < b->col)
- return -1;
- if (a->col > b->col)
- return 1;
- return 0;
-}
-
-/* Rotate the RLE data by pi. The set of block lengths does not change.
- * Therefore, the decompositions do not change either. The only thing that
- * changes is the positions of the RLE segments. */
-static void
-gwy_data_field_area_rle_flip(MaskRLE *mrle, guint kxres, guint kyres)
-{
- guint i;
-
- for (i = 0; i < mrle->nsegments; i++) {
- MaskSegment *seg = mrle->segments + i;
- seg->col = kxres - seg->col - seg->len;
- seg->row = kyres-1 - seg->row;
- }
-
- qsort(mrle->segments, mrle->nsegments, sizeof(MaskSegment),
- compare_segment);
-}
-
-static void
-gwy_data_field_area_rle_free(MinMaxPrecomputed *mmp)
-{
- guint i;
-
- g_free(mmp->extrowbuf);
- for (i = 0; i < mmp->kyres; i++)
- min_max_precomputed_row_free(mmp->prows[i]);
- g_free(mmp->prows);
- min_max_precomputed_req_free(mmp->req);
- mask_rle_free(mmp->mrle);
-}
-
-static void
-gwy_data_field_area_min_max_execute(GwyDataField *dfield,
- gdouble *outbuf,
- MinMaxPrecomputed *mmp,
- gboolean maximum,
- gint col, gint row,
- gint width, gint height)
-{
- MaskRLE *mrle = mmp->mrle;
- MinMaxPrecomputedReq *req = mmp->req;
- MinMaxPrecomputedRow **prows = mmp->prows, *prow;
- MinMaxPrecomputedRowFill precomp_row_fill;
- guint xres, yres, i, ii;
- guint extend_up, extend_down, extend_left, extend_right;
- gdouble *d, *extrowbuf = mmp->extrowbuf;
- guint rowbuflen = mmp->rowbuflen;
-
- xres = dfield->xres;
- yres = dfield->yres;
- d = dfield->data;
- precomp_row_fill = (maximum
- ? max_precomputed_row_fill
- : min_precomputed_row_fill);
-
- /* Initialise the buffers for the zeroth row of the area. For the maximum
- * operation we even-sized kernels to the other direction to obtain
- * morphological operation according to definitions. */
- if (maximum) {
- extend_up = mmp->kyres/2;
- extend_down = (mmp->kyres - 1)/2;
- extend_left = mmp->kxres/2;
- extend_right = (mmp->kxres - 1)/2;
- }
- else {
- extend_up = (mmp->kyres - 1)/2;
- extend_down = mmp->kyres/2;
- extend_left = (mmp->kxres - 1)/2;
- extend_right = mmp->kxres/2;
- }
-
- for (i = 0; i <= extend_down; i++) {
- if (row + i < yres) {
- row_extend_border(d + xres*(row + i), extrowbuf,
- col, width, xres,
- extend_left, extend_right,
- 0.0);
- precomp_row_fill(req, prows[i + extend_up], extrowbuf, rowbuflen);
- }
- else
- min_max_precomputed_row_copy(prows[i], prows[i-1], req, rowbuflen);
- }
- for (i = 1; i <= extend_up; i++) {
- ii = extend_up - i;
- if (i <= (guint)row) {
- row_extend_border(d + xres*(row - i), extrowbuf,
- col, width, xres,
- extend_left, extend_right,
- 0.0);
- precomp_row_fill(req, prows[ii], extrowbuf, rowbuflen);
- }
- else
- min_max_precomputed_row_copy(prows[ii],
- prows[(ii + 1) % mmp->kyres],
- req, rowbuflen);
- }
-
- /* Go through the rows and extract the minima or maxima from the
- * precomputed segment data. */
- i = 0;
- while (TRUE) {
- mask_rle_execute_min_max(mrle, prows, outbuf + i*width, width, maximum);
- i++;
- if (i == (guint)height)
- break;
-
- /* Rotate physically prows[] so that the current row is at the zeroth
- * position. We could use cyclic buffers but then all subordinate
- * functions would know how to handle them and calculating mod() for
- * all indexing is inefficient anyway. */
- prow = prows[0];
- for (ii = 0; ii < mmp->kyres-1; ii++)
- prows[ii] = prows[ii+1];
- prows[mmp->kyres-1] = prow;
-
- /* Precompute the new row at the bottom. */
- ii = row + i + extend_down;
- if (ii < yres) {
- row_extend_border(d + xres*ii, extrowbuf,
- col, width, xres,
- extend_left, extend_right,
- 0.0);
- precomp_row_fill(req, prow, extrowbuf, rowbuflen);
- }
- else {
- g_assert(mmp->kyres >= 2);
- min_max_precomputed_row_copy(prow, prows[mmp->kyres-2],
- req, rowbuflen);
- }
- }
-}
-
-static gboolean
-kernel_is_nonempty(GwyDataField *dfield)
-{
- guint i, n = dfield->xres * dfield->yres;
- gdouble *d = dfield->data;
-
- for (i = 0; i < n; i++, d++) {
- if (*d)
- return TRUE;
- }
- return FALSE;
-}
-
-/* NB: The kernel passed to this function should be non-empty. */
-static void
-gwy_data_field_area_filter_min_max_real(GwyDataField *data_field,
- GwyDataField *kernel,
- GwyMinMaxFilterType filtertype,
- gint col, gint row,
- gint width, gint height)
-{
- MinMaxPrecomputed mmp;
- gdouble *outbuf, *d;
- gint i, j, xres, yres, kxres, kyres;
-
- g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
- g_return_if_fail(col >= 0 && row >= 0
- && width > 0 && height > 0
- && col + width <= data_field->xres
- && row + height <= data_field->yres);
-
- xres = data_field->xres;
- yres = data_field->yres;
- kxres = kernel->xres;
- kyres = kernel->yres;
- d = data_field->data;
-
- if (filtertype == GWY_MIN_MAX_FILTER_MINIMUM
- || filtertype == GWY_MIN_MAX_FILTER_MAXIMUM) {
- gboolean is_max = (filtertype == GWY_MIN_MAX_FILTER_MAXIMUM);
-
- gwy_data_field_area_rle_analyse(kernel, width, &mmp);
- if (is_max)
- gwy_data_field_area_rle_flip(mmp.mrle, kxres, kyres);
- outbuf = g_new(gdouble, width*height);
- gwy_data_field_area_min_max_execute(data_field, outbuf, &mmp, is_max,
- col, row, width, height);
- gwy_data_field_area_rle_free(&mmp);
-
- d += row*xres + col;
- for (i = 0; i < height; i++)
- gwy_assign(d + i*xres, outbuf + i*width, width);
- gwy_data_field_invalidate(data_field);
- g_free(outbuf);
- }
- else if (filtertype == GWY_MIN_MAX_FILTER_RANGE
- || filtertype == GWY_MIN_MAX_FILTER_NORMALIZATION) {
- gdouble *outbuf2;
-
- gwy_data_field_area_rle_analyse(kernel, width, &mmp);
- outbuf = g_new(gdouble, width*height);
- gwy_data_field_area_min_max_execute(data_field, outbuf, &mmp, FALSE,
- col, row, width, height);
-
- gwy_data_field_area_rle_flip(mmp.mrle, kxres, kyres);
- outbuf2 = g_new(gdouble, width*height);
- gwy_data_field_area_min_max_execute(data_field, outbuf2, &mmp, TRUE,
- col, row, width, height);
- gwy_data_field_area_rle_free(&mmp);
-
- d += row*xres + col;
- if (filtertype == GWY_MIN_MAX_FILTER_RANGE) {
- for (i = 0; i < height; i++) {
- for (j = 0; j < width; j++)
- d[i*xres + j] = outbuf2[i*width + j] - outbuf[i*width + j];
- }
- }
- else {
- for (i = 0; i < height; i++) {
- for (j = 0; j < width; j++) {
- gdouble min = outbuf[i*width + j];
- gdouble max = outbuf2[i*width + j];
-
- if (G_UNLIKELY(min == max))
- d[i*xres + j] = 0.5;
- else
- d[i*xres + j] = (d[i*xres + j] - min)/(max - min);
- }
- }
- }
- gwy_data_field_invalidate(data_field);
- g_free(outbuf2);
- g_free(outbuf);
- }
- else if (filtertype == GWY_MIN_MAX_FILTER_OPENING
- || filtertype == GWY_MIN_MAX_FILTER_CLOSING) {
- gboolean is_closing = (filtertype == GWY_MIN_MAX_FILTER_CLOSING);
- /* To limit the area of application but keep the influence of
- * surrouding pixels as if we did erosion and dilation on the entire
- * field, we must perform the first operation in an extended area. */
- gint extcol = MAX(0, col - kxres/2);
- gint extrow = MAX(0, row - kyres/2);
- gint extwidth = MIN(xres, col + width + kxres/2) - extcol;
- gint extheight = MIN(yres, row + height + kyres/2) - extrow;
- GwyDataField *tmpfield;
-
- gwy_data_field_area_rle_analyse(kernel, extwidth, &mmp);
- if (is_closing)
- gwy_data_field_area_rle_flip(mmp.mrle, kxres, kyres);
- tmpfield = gwy_data_field_new(extwidth, extheight, extwidth, extheight,
- FALSE);
- gwy_data_field_area_min_max_execute(data_field, tmpfield->data, &mmp,
- is_closing,
- extcol, extrow,
- extwidth, extheight);
-
- if (extcol == col && extrow == row
- && extwidth == width && extheight == height) {
- /* Avoid repeating the analysis for full-field application. */
- gwy_data_field_area_rle_flip(mmp.mrle, kxres, kyres);
- }
- else {
- gwy_data_field_area_rle_free(&mmp);
- gwy_data_field_area_rle_analyse(kernel, width, &mmp);
- if (!is_closing)
- gwy_data_field_area_rle_flip(mmp.mrle, kxres, kyres);
- }
- outbuf = g_new(gdouble, width*height);
- gwy_data_field_area_min_max_execute(tmpfield, outbuf, &mmp,
- !is_closing,
- col - extcol, row - extrow,
- width, height);
- gwy_data_field_area_rle_free(&mmp);
- g_object_unref(tmpfield);
-
- d += row*xres + col;
- for (i = 0; i < height; i++)
- gwy_assign(d + i*xres, outbuf + i*width, width);
- gwy_data_field_invalidate(data_field);
-
- g_free(outbuf);
- }
- else {
- g_return_if_reached();
- }
-}
-
-/**
- * gwy_data_field_area_filter_min_max:
- * @data_field: A data field to apply the filter to.
- * @kernel: Data field defining the flat structuring element.
- * @filtertype: The type of filter to apply.
- * @col: Upper-left column coordinate.
- * @row: Upper-left row coordinate.
- * @width: Area width (number of columns).
- * @height: Area height (number of rows).
- *
- * Applies a morphological operation with a flat structuring element to a
- * part of a data field.
- *
- * Morphological operations with flat structuring elements can be expressed
- * using minimum (erosion) and maximum (dilation) filters that are the basic
- * operations this function can perform.
- *
- * The kernel field is a mask that defines the shape of the flat structuring
- * element. It is reflected for all maximum operations (dilation). For
- * symmetrical kernels this does not matter. You can use
- * gwy_data_field_elliptic_area_fill() to create a true circular (or
- * elliptical) kernel.
- *
- * The kernel is implicitly centered, i.e. it will be applied symmetrically to
- * avoid unexpected data movement. Even-sized kernels (generally not
- * recommended) will extend farther towards the top left image corner for
- * minimum (erosion) and towards the bottom right corner for maximum (dilation)
- * operations due to the reflection. If you need off-center structuring
- * elements you can add empty rows or columns to one side of the kernel to
- * counteract the symmetrisation.
- *
- * The operation is linear-time in kernel size for any convex kernel. Note
- * gwy_data_field_area_filter_minimum() and
- * gwy_data_field_area_filter_maximum(), which are limited to square
- * structuring elements, are much faster for large sizes of the squares.
- *
- * The exterior is always handled as %GWY_EXTERIOR_BORDER_EXTEND.
- *
- * Since: 2.43
- **/
-void
-gwy_data_field_area_filter_min_max(GwyDataField *data_field,
- GwyDataField *kernel,
- GwyMinMaxFilterType filtertype,
- gint col, gint row,
- gint width, gint height)
-{
- GwyDataField *redkernel;
-
- g_return_if_fail(GWY_IS_DATA_FIELD(kernel));
- redkernel = gwy_data_field_duplicate(kernel);
- gwy_data_field_grains_autocrop(redkernel, TRUE, NULL, NULL, NULL, NULL);
- if (kernel_is_nonempty(redkernel)) {
- gwy_data_field_area_filter_min_max_real(data_field, redkernel,
- filtertype,
- col, row, width, height);
- }
- g_object_unref(redkernel);
-}
-
-/**
- * gwy_data_field_area_filter_disc_asf:
- * @data_field: A data field to apply the filter to.
- * @radius: Maximum radius of the circular structuring element, in pixels.
- * For radius 0 and smaller the filter is no-op.
- * @closing: %TRUE requests an opening-closing filter (i.e. ending with
- * closing), %FALSE requests a closing-opening filter (i.e. ending
- * with opening).
- * @col: Upper-left column coordinate.
- * @row: Upper-left row coordinate.
- * @width: Area width (number of columns).
- * @height: Area height (number of rows).
- *
- * Applies an alternating sequential morphological filter with a flat disc
- * structuring element to a part of a data field.
- *
- * Alternating sequential filter is a filter consisting of repeated opening and
- * closing (or closing and opening) with progressively larger structuring
- * elements. This function performs such filtering for sequence of structuring
- * elements consisting of true Euclidean discs with increasing radii. The
- * largest disc in the sequence fits into a (2 at size + 1) × (2 at size + 1) square.
- *
- * Since: 2.43
- **/
-void
-gwy_data_field_area_filter_disc_asf(GwyDataField *data_field,
- gint radius,
- gboolean closing,
- gint col,
- gint row,
- gint width,
- gint height)
-{
- GwyMinMaxFilterType filtertype1, filtertype2;
- gint r;
-
- g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
- g_return_if_fail(col >= 0 && row >= 0
- && width > 0 && height > 0
- && col + width <= data_field->xres
- && row + height <= data_field->yres);
-
- if (closing) {
- filtertype1 = GWY_MIN_MAX_FILTER_OPENING;
- filtertype2 = GWY_MIN_MAX_FILTER_CLOSING;
- }
- else {
- filtertype1 = GWY_MIN_MAX_FILTER_CLOSING;
- filtertype2 = GWY_MIN_MAX_FILTER_OPENING;
- }
-
- for (r = 1; r <= radius; r++) {
- gint size = 2*r + 1;
- GwyDataField *kernel = gwy_data_field_new(size, size, size, size, TRUE);
- gwy_data_field_elliptic_area_fill(kernel, 0, 0, size, size, 1.0);
- gwy_data_field_area_filter_min_max_real(data_field, kernel, filtertype1,
- col, row, width, height);
- gwy_data_field_area_filter_min_max_real(data_field, kernel, filtertype2,
- col, row, width, height);
- g_object_unref(kernel);
- }
-}
-
-/**
* kuwahara_block:
* @a: points to a 5x5 matrix (array of 25 doubles)
*
diff --git a/libprocess/filters.h b/libprocess/filters.h
index 42b711c..ea0d99c 100644
--- a/libprocess/filters.h
+++ b/libprocess/filters.h
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: filters.h 18539 2016-03-28 19:40:38Z yeti-dn $
+ * @(#) $Id: filters.h 19808 2017-05-30 07:32:41Z yeti-dn $
* Copyright (C) 2003-2016 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -77,6 +77,16 @@ void gwy_data_field_area_convolve (GwyDataField *data_field,
gint row,
gint width,
gint height);
+void gwy_data_field_area_ext_convolve (GwyDataField *field,
+ guint col,
+ guint row,
+ guint width,
+ guint height,
+ GwyDataField *target,
+ GwyDataField *kernel,
+ GwyExteriorType exterior,
+ gdouble fill_value,
+ gboolean as_integral);
void gwy_data_field_convolve_1d (GwyDataField *data_field,
GwyDataLine *kernel_line,
GwyOrientation orientation);
@@ -87,6 +97,16 @@ void gwy_data_field_area_convolve_1d (GwyDataField *data_field,
gint row,
gint width,
gint height);
+void gwy_data_field_area_ext_row_convolve (GwyDataField *field,
+ guint col,
+ guint row,
+ guint width,
+ guint height,
+ GwyDataField *target,
+ GwyDataLine *kernel,
+ GwyExteriorType exterior,
+ gdouble fill_value,
+ gboolean as_integral);
void gwy_data_field_filter_median (GwyDataField *data_field,
gint size);
void gwy_data_field_area_filter_median (GwyDataField *data_field,
diff --git a/libprocess/fractals.c b/libprocess/fractals.c
index cdbedfc..4ad6020 100644
--- a/libprocess/fractals.c
+++ b/libprocess/fractals.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: fractals.c 16242 2014-05-30 20:39:32Z yeti-dn $
+ * @(#) $Id: fractals.c 19698 2017-05-03 20:18:10Z yeti-dn $
* Copyright (C) 2004 Jindrich Bilek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -19,13 +19,12 @@
* Boston, MA 02110-1301, USA.
*/
-#include "config.h"
-#include <glib.h>
#include <libgwyddion/gwymacros.h>
#include <libgwyddion/gwymath.h>
#include <libgwyddion/gwyrandgenset.h>
#include <libprocess/datafield.h>
#include <libprocess/stats.h>
+#include <libprocess/fractals.h>
static void gwy_data_field_fractal_fit(GwyDataLine *xresult,
GwyDataLine *yresult,
diff --git a/libprocess/grains-disttrans.c b/libprocess/grains-disttrans.c
new file mode 100644
index 0000000..6aa889c
--- /dev/null
+++ b/libprocess/grains-disttrans.c
@@ -0,0 +1,978 @@
+/*
+ * @(#) $Id: grains-disttrans.c 19984 2017-06-26 11:18:06Z yeti-dn $
+ * Copyright (C) 2003-2017 David Necas (Yeti), Petr Klapetek.
+ * E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include <string.h>
+#include <stdlib.h>
+#include <libgwyddion/gwymacros.h>
+#include <libgwyddion/gwymath.h>
+#include <libprocess/arithmetic.h>
+#include <libprocess/grains.h>
+#include "gwyprocessinternal.h"
+
+enum {
+ SEDINF = 0x7fffffffu,
+ QUEUED = 0x80000000u,
+};
+
+typedef struct {
+ gdouble distance;
+ guint i;
+ guint j;
+} DistantPoint;
+
+typedef struct {
+ gdouble dist, ndist;
+ gint j, i;
+} ThinCandidate;
+
+typedef gboolean (*ErodeFunc)(guint *grain,
+ gint width, gint height,
+ guint id,
+ const PixelQueue *inqueue,
+ PixelQueue *outqueue);
+
+
+/* Euclidean distance transform */
+
+static inline void
+pixel_queue_add(PixelQueue *queue,
+ gint i, gint j)
+{
+ if (G_UNLIKELY(queue->len == queue->size)) {
+ queue->size = MAX(2*queue->size, 16);
+ queue->points = g_renew(GridPoint, queue->points, queue->size);
+ }
+
+ queue->points[queue->len].i = i;
+ queue->points[queue->len].j = j;
+ queue->len++;
+}
+
+// Set squared distance for all points that have an 8-neighbour outside and
+// add them to the queue.
+static void
+distance_transform_first_step(guint *distances,
+ guint xres, guint yres,
+ IntList *queue,
+ gboolean from_border)
+{
+ guint k = 0, j, i;
+
+ queue->len = 0;
+ for (i = 0; i < yres; i++) {
+ gboolean first_row = (i == 0);
+ gboolean last_row = (i == yres-1);
+
+ for (j = 0; j < xres; j++, k++) {
+ gboolean first_column = (j == 0);
+ gboolean last_column = (j == xres-1);
+
+ if (!distances[k])
+ continue;
+
+ if ((from_border && (first_row || first_column
+ || last_row || last_column))
+ || (!first_row && !distances[k-xres])
+ || (!first_column && !distances[k-1])
+ || (!last_column && !distances[k+1])
+ || (!last_row && !distances[k+xres])) {
+ distances[k] = 1;
+ int_list_add(queue, k);
+ }
+ else if ((!first_row && !first_column && !distances[k-xres-1])
+ || (!first_row && !last_column && !distances[k-xres+1])
+ || (!last_row && !first_column && !distances[k+xres-1])
+ || (!last_row && !last_column && !distances[k+xres+1])) {
+ distances[k] = 2;
+ int_list_add(queue, k);
+ }
+ }
+ }
+}
+
+static void
+distance_transform_erode_sed(guint *distances, const guint *olddist,
+ guint xres, guint yres,
+ guint l,
+ const IntList *inqueue,
+ IntList *outqueue)
+{
+ guint hvsed2 = 2*l - 1, diag2 = 2*hvsed2;
+ guint q;
+
+ outqueue->len = 0;
+
+ for (q = 0; q < inqueue->len; q++) {
+ guint k = inqueue->data[q], kk = k-xres-1;
+ guint i = k/xres, j = k % xres;
+ gboolean first_row = (i == 0);
+ gboolean last_row = (i == yres-1);
+ gboolean first_column = (j == 0);
+ gboolean last_column = (j == xres-1);
+ guint d2hv = olddist[k] + hvsed2, d2d = olddist[k] + diag2;
+
+ if (!first_row && !first_column && (distances[kk] & ~QUEUED) > d2d) {
+ if (!(distances[kk] & QUEUED))
+ int_list_add(outqueue, kk);
+ distances[kk] = QUEUED | d2d;
+ }
+ kk++;
+ if (!first_row && (distances[kk] & ~QUEUED) > d2hv) {
+ if (!(distances[kk] & QUEUED))
+ int_list_add(outqueue, kk);
+ distances[kk] = QUEUED | d2hv;
+ }
+ kk++;
+ if (!first_row && !last_column && (distances[kk] & ~QUEUED) > d2d) {
+ if (!(distances[kk] & QUEUED))
+ int_list_add(outqueue, kk);
+ distances[kk] = QUEUED | d2d;
+ }
+ kk += xres-2;
+ if (!first_column && (distances[kk] & ~QUEUED) > d2hv) {
+ if (!(distances[kk] & QUEUED))
+ int_list_add(outqueue, kk);
+ distances[kk] = QUEUED | d2hv;
+ }
+ kk += 2;
+ if (!last_column && (distances[kk] & ~QUEUED) > d2hv) {
+ if (!(distances[kk] & QUEUED))
+ int_list_add(outqueue, kk);
+ distances[kk] = QUEUED | d2hv;
+ }
+ kk += xres-2;
+ if (!last_row && !first_column && (distances[kk] & ~QUEUED) > d2d) {
+ if (!(distances[kk] & QUEUED))
+ int_list_add(outqueue, kk);
+ distances[kk] = QUEUED | d2d;
+ }
+ kk++;
+ if (!last_row && (distances[kk] & ~QUEUED) > d2hv) {
+ if (!(distances[kk] & QUEUED))
+ int_list_add(outqueue, kk);
+ distances[kk] = QUEUED | d2hv;
+ }
+ kk++;
+ if (!last_row && !last_column && (distances[kk] & ~QUEUED) > d2d) {
+ if (!(distances[kk] & QUEUED))
+ int_list_add(outqueue, kk);
+ distances[kk] = QUEUED | d2d;
+ }
+ }
+}
+
+/**
+ * _gwy_distance_transform_raw:
+ * @distances: Array @xres*@yres with nonzeroes within shapes. If all non-zero
+ * values are %SEDINF you can pass %TRUE for @infinitised.
+ * @workspace: Workspace of identical dimensions as @distances.
+ * @xres: Width.
+ * @yres: Height.
+ * @inqueue: Pre-allocated queue used by the algorithm.
+ * @outqueue: Second pre-allocated queue used by the algorithm.
+ * @from_border: %TRUE to consider image edges to be grain boundaries.
+ *
+ * Performs distance transformation.
+ *
+ * When it finishes non-zero values in @distances are squared Euclidean
+ * distances from outside pixels (including outside the field).
+ *
+ * Workspace objects @workspace, @inqueue and @outqueue do not carry any
+ * information. They are allocated by the caller to enable an efficient
+ * repeated use.
+ **/
+static void
+distance_transform_raw(guint *distances, guint *workspace,
+ guint xres, guint yres,
+ IntList *inqueue, IntList *outqueue,
+ gboolean from_border)
+{
+ guint l, q;
+
+ distance_transform_first_step(distances, xres, yres, inqueue, from_border);
+
+ for (l = 2; inqueue->len; l++) {
+ gint *qdata;
+
+ for (q = 0; q < inqueue->len; q++) {
+ guint k = inqueue->data[q];
+ workspace[k] = distances[k];
+ }
+ distance_transform_erode_sed(distances, workspace, xres, yres, l,
+ inqueue, outqueue);
+
+ qdata = outqueue->data;
+ for (q = outqueue->len; q; q--, qdata++)
+ distances[*qdata] &= ~QUEUED;
+
+ GWY_SWAP(IntList*, inqueue, outqueue);
+ }
+}
+
+static void
+gwy_data_field_grain_distance_transform_internal(GwyDataField *data_field,
+ gboolean from_border)
+{
+ IntList *inqueue, *outqueue;
+ guint xres, yres, k, inisize;
+ guint *distances, *workspace;
+ gdouble *d;
+
+ g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
+
+ xres = data_field->xres;
+ yres = data_field->yres;
+ d = data_field->data;
+ distances = g_new(guint, xres*yres);
+ workspace = g_new(guint, xres*yres);
+
+ for (k = 0; k < xres*yres; k++)
+ distances[k] = (d[k] > 0.0) ? SEDINF : 0;
+
+ inisize = (guint)(8*sqrt(xres*yres) + 16);
+ inqueue = int_list_new(inisize);
+ outqueue = int_list_new(inisize);
+
+ distance_transform_raw(distances, workspace, xres, yres, inqueue, outqueue,
+ from_border);
+
+ int_list_free(inqueue);
+ int_list_free(outqueue);
+
+ for (k = 0; k < xres*yres; k++)
+ d[k] = sqrt(distances[k]);
+ gwy_data_field_invalidate(data_field);
+
+ g_free(workspace);
+ g_free(distances);
+}
+
+/**
+ * gwy_data_field_grain_distance_transform:
+ * @data_field: A data field with zeroes in empty space and nonzeroes in
+ * grains.
+ *
+ * Performs Euclidean distance transform of a data field with grains.
+ *
+ * Each non-zero value will be replaced with Euclidean distance to the grain
+ * boundary, measured in pixels.
+ *
+ * See also gwy_data_field_grain_simple_dist_trans() for simple distance
+ * transforms such as city-block or chessboard.
+ *
+ * Since: 2.36
+ **/
+void
+gwy_data_field_grain_distance_transform(GwyDataField *data_field)
+{
+ gwy_data_field_grain_distance_transform_internal(data_field, TRUE);
+}
+
+/* Init @queue with all Von Neumann-neighbourhood boundary pixels. */
+static void
+init_erosion_4(guint *grain,
+ guint width, guint height,
+ gboolean from_border,
+ PixelQueue *queue)
+{
+ guint ifrom = from_border ? 0 : 1;
+ guint iend = from_border ? height : height-1;
+ guint jfrom = from_border ? 0 : 1;
+ guint jend = from_border ? width : width-1;
+ guint i, j, k;
+
+ queue->len = 0;
+ for (i = ifrom; i < iend; i++) {
+ k = i*width + jfrom;
+ for (j = jfrom; j < jend; j++, k++) {
+ if (!grain[k])
+ continue;
+
+ if (!i || !j || j == width-1 || i == height-1
+ || !grain[k - width] || !grain[k - 1]
+ || !grain[k + 1] || !grain[k + width]) {
+ grain[k] = 1;
+ pixel_queue_add(queue, i, j);
+ }
+ }
+ }
+}
+
+/* Init @queue with all Von Neumann-neighbourhood boundary pixels. */
+static void
+init_erosion_8(guint *grain,
+ gint width, gint height,
+ gboolean from_border,
+ PixelQueue *queue)
+{
+ guint ifrom = from_border ? 0 : 1;
+ guint iend = from_border ? height : height-1;
+ guint jfrom = from_border ? 0 : 1;
+ guint jend = from_border ? width : width-1;
+ guint i, j, k;
+
+ queue->len = 0;
+ for (i = ifrom; i < iend; i++) {
+ k = i*width + jfrom;
+ for (j = jfrom; j < jend; j++, k++) {
+ if (!grain[k])
+ continue;
+
+ if (!i || !j || j == width-1 || i == height-1
+ || !grain[k - width - 1] || !grain[k - width]
+ || !grain[k - width + 1]
+ || !grain[k - 1] || !grain[k + 1]
+ || !grain[k + width - 1] || !grain[k + width]
+ || !grain[k + width + 1]) {
+ grain[k] = 1;
+ pixel_queue_add(queue, i, j);
+ }
+ }
+ }
+}
+
+static gboolean
+erode_4(guint *grain,
+ gint width, gint height,
+ guint id,
+ const PixelQueue *inqueue,
+ PixelQueue *outqueue)
+{
+ const GridPoint *ipt = inqueue->points;
+ guint m;
+
+ outqueue->len = 0;
+ for (m = inqueue->len; m; m--, ipt++) {
+ gint i = ipt->i, j = ipt->j, k = i*width + j;
+
+ if (i && grain[k - width] == G_MAXUINT) {
+ grain[k - width] = id+1;
+ pixel_queue_add(outqueue, i-1, j);
+ }
+ if (j && grain[k - 1] == G_MAXUINT) {
+ grain[k - 1] = id+1;
+ pixel_queue_add(outqueue, i, j-1);
+ }
+ if (j < width-1 && grain[k + 1] == G_MAXUINT) {
+ grain[k + 1] = id+1;
+ pixel_queue_add(outqueue, i, j+1);
+ }
+ if (i < height-1 && grain[k + width] == G_MAXUINT) {
+ grain[k + width] = id+1;
+ pixel_queue_add(outqueue, i+1, j);
+ }
+ }
+
+ return outqueue->len;
+}
+
+static gboolean
+erode_8(guint *grain,
+ gint width, gint height,
+ guint id,
+ const PixelQueue *inqueue,
+ PixelQueue *outqueue)
+{
+ const GridPoint *ipt = inqueue->points;
+ guint m;
+
+ outqueue->len = 0;
+ for (m = inqueue->len; m; m--, ipt++) {
+ gint i = ipt->i, j = ipt->j, k = i*width + j;
+ if (i && j && grain[k - width - 1] == G_MAXUINT) {
+ grain[k - width - 1] = id+1;
+ pixel_queue_add(outqueue, i-1, j-1);
+ }
+ if (i && grain[k - width] == G_MAXUINT) {
+ grain[k - width] = id+1;
+ pixel_queue_add(outqueue, i-1, j);
+ }
+ if (i && j < width-1 && grain[k - width + 1] == G_MAXUINT) {
+ grain[k - width + 1] = id+1;
+ pixel_queue_add(outqueue, i-1, j+1);
+ }
+ if (j && grain[k - 1] == G_MAXUINT) {
+ grain[k - 1] = id+1;
+ pixel_queue_add(outqueue, i, j-1);
+ }
+ if (j < width-1 && grain[k + 1] == G_MAXUINT) {
+ grain[k + 1] = id+1;
+ pixel_queue_add(outqueue, i, j+1);
+ }
+ if (i < height-1 && j && grain[k + width - 1] == G_MAXUINT) {
+ grain[k + width - 1] = id+1;
+ pixel_queue_add(outqueue, i+1, j-1);
+ }
+ if (i < height-1 && grain[k + width] == G_MAXUINT) {
+ grain[k + width] = id+1;
+ pixel_queue_add(outqueue, i+1, j);
+ }
+ if (i < height-1 && j < width-1 && grain[k + width + 1] == G_MAXUINT) {
+ grain[k + width + 1] = id+1;
+ pixel_queue_add(outqueue, i+1, j+1);
+ }
+ }
+
+ return outqueue->len;
+}
+
+/* Perform a cityblock, chessboard or octagonal distance transform of given
+ * type using provided queues. */
+guint
+_gwy_simple_dist_trans(gint *grain, guint width, guint height,
+ gboolean from_border, GwyDistanceTransformType dtype,
+ PixelQueue *inqueue, PixelQueue *outqueue)
+{
+ ErodeFunc erode = NULL;
+ guint dist = 1;
+
+ inqueue->len = outqueue->len = 0;
+
+ if (dtype == GWY_DISTANCE_TRANSFORM_CONN4
+ || dtype == GWY_DISTANCE_TRANSFORM_OCTAGONAL48)
+ init_erosion_4(grain, width, height, from_border, inqueue);
+ else if (dtype == GWY_DISTANCE_TRANSFORM_CONN8
+ || dtype == GWY_DISTANCE_TRANSFORM_OCTAGONAL84)
+ init_erosion_8(grain, width, height, from_border, inqueue);
+
+ if (dtype == GWY_DISTANCE_TRANSFORM_CONN4
+ || dtype == GWY_DISTANCE_TRANSFORM_OCTAGONAL84)
+ erode = erode_4;
+ else if (dtype == GWY_DISTANCE_TRANSFORM_CONN8
+ || dtype == GWY_DISTANCE_TRANSFORM_OCTAGONAL48)
+ erode = erode_8;
+
+ g_return_val_if_fail(erode, 0);
+
+ while (TRUE) {
+ if (!erode(grain, width, height, dist, inqueue, outqueue))
+ break;
+ GWY_SWAP(PixelQueue*, inqueue, outqueue);
+ dist++;
+
+ if (dtype == GWY_DISTANCE_TRANSFORM_OCTAGONAL48
+ || dtype == GWY_DISTANCE_TRANSFORM_OCTAGONAL84)
+ erode = (erode == erode_4) ? erode_8 : erode_4;
+ }
+
+ if (!from_border) {
+ guint k;
+
+ /* Fix single-pixel grains touching the image borders. */
+ for (k = 0; k < width; k++) {
+ if (grain[k] == G_MAXUINT)
+ grain[k] = 1;
+ if (grain[width*(height-1) + k] == G_MAXUINT)
+ grain[width*(height-1) + k] = 1;
+ }
+
+ for (k = 0; k < height; k++) {
+ if (grain[k*width] == G_MAXUINT)
+ grain[k*width] = 1;
+ if (grain[k*width + width-1] == G_MAXUINT)
+ grain[k*width + width-1] = 1;
+ }
+ }
+
+ return dist;
+}
+
+static void
+average_octagonal_dt(GwyDataField *dfield, gboolean from_border)
+{
+ GwyDataField *tmp;
+
+ tmp = gwy_data_field_duplicate(dfield);
+ gwy_data_field_grain_simple_dist_trans(dfield,
+ GWY_DISTANCE_TRANSFORM_OCTAGONAL48,
+ from_border);
+ gwy_data_field_grain_simple_dist_trans(tmp,
+ GWY_DISTANCE_TRANSFORM_OCTAGONAL84,
+ from_border);
+ gwy_data_field_sum_fields(dfield, dfield, tmp);
+ gwy_data_field_multiply(dfield, 0.5);
+ g_object_unref(tmp);
+}
+
+/**
+ * gwy_data_field_grain_simple_dist_trans:
+ * @data_field: A data field with zeroes in empty space and nonzeroes in
+ * grains.
+ * @dtype: Type of simple distance to use.
+ * @from_border: %TRUE to consider image edges to be grain boundaries.
+ *
+ * Performs a distance transform of a data field with grains.
+ *
+ * Each non-zero value will be replaced with a distance to the grain boundary,
+ * measured in pixels.
+ *
+ * Note this function can calculate the true Euclidean distance transform
+ * only since 2.43. Use gwy_data_field_grain_distance_transform() for the EDT
+ * if you need compatibility with older versions.
+ *
+ * Since: 2.41
+ **/
+void
+gwy_data_field_grain_simple_dist_trans(GwyDataField *data_field,
+ GwyDistanceTransformType dtype,
+ gboolean from_border)
+{
+ guint *grains = NULL;
+ PixelQueue *inqueue, *outqueue;
+ gdouble *d;
+ guint xres, yres, k;
+
+ g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
+
+ if (dtype == GWY_DISTANCE_TRANSFORM_EUCLIDEAN) {
+ gwy_data_field_grain_distance_transform_internal(data_field,
+ from_border);
+ return;
+ }
+ if (dtype == GWY_DISTANCE_TRANSFORM_OCTAGONAL) {
+ average_octagonal_dt(data_field, from_border);
+ return;
+ }
+
+ g_return_if_fail(dtype <= GWY_DISTANCE_TRANSFORM_OCTAGONAL84);
+
+ xres = data_field->xres;
+ yres = data_field->yres;
+ d = data_field->data;
+ inqueue = g_slice_new0(PixelQueue);
+ outqueue = g_slice_new0(PixelQueue);
+ grains = g_new(guint, xres*yres);
+ for (k = 0; k < xres*yres; k++)
+ grains[k] = (d[k] > 0.0) ? G_MAXUINT : 0;
+
+ _gwy_simple_dist_trans(grains, xres, yres, from_border, dtype,
+ inqueue, outqueue);
+
+ for (k = 0; k < xres*yres; k++)
+ d[k] = grains[k];
+ gwy_data_field_invalidate(data_field);
+
+ g_free(grains);
+ g_free(inqueue->points);
+ g_free(outqueue->points);
+ g_slice_free(PixelQueue, inqueue);
+ g_slice_free(PixelQueue, outqueue);
+}
+
+/**
+ * gwy_data_field_grains_shrink:
+ * @data_field: A data field with zeroes in empty space and nonzeroes in
+ * grains.
+ * @amount: How much the grains should be reduced, in pixels. It is inclusive,
+ * i.e. pixels that are @amount far from the border will be removed.
+ * @dtype: Type of simple distance to use.
+ * @from_border: %TRUE to consider image edges to be grain boundaries.
+ * %FALSE to reduce grains touching field boundaries only along
+ * the boundaries.
+ *
+ * Erodes a data field containing mask by specified amount using a distance
+ * measure.
+ *
+ * Non-zero pixels in @data_field will be replaced with zeroes if they are not
+ * farther than @amount from the grain boundary as defined by @dtype.
+ *
+ * Since: 2.43
+ **/
+void
+gwy_data_field_grains_shrink(GwyDataField *data_field,
+ gdouble amount,
+ GwyDistanceTransformType dtype,
+ gboolean from_border)
+{
+ GwyDataField *edt;
+ guint xres, yres, k;
+
+ g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
+ g_return_if_fail(dtype <= GWY_DISTANCE_TRANSFORM_EUCLIDEAN);
+
+ if (amount < 0.5)
+ return;
+
+ xres = data_field->xres;
+ yres = data_field->yres;
+ edt = gwy_data_field_duplicate(data_field);
+ gwy_data_field_grain_simple_dist_trans(edt, dtype, from_border);
+ for (k = 0; k < xres*yres; k++) {
+ if (edt->data[k] <= amount + 1e-9)
+ data_field->data[k] = 0.0;
+ }
+
+ g_object_unref(edt);
+ gwy_data_field_invalidate(data_field);
+}
+
+static gint
+compare_distant_points(gconstpointer pa, gconstpointer pb)
+{
+ const DistantPoint *a = (const DistantPoint*)pa;
+ const DistantPoint *b = (const DistantPoint*)pb;
+
+ if (a->distance < b->distance)
+ return -1;
+ if (a->distance > b->distance)
+ return 1;
+ if (a->i < b->i)
+ return -1;
+ if (a->i > b->i)
+ return 1;
+ if (a->j < b->j)
+ return -1;
+ if (a->j > b->j)
+ return 1;
+ return 0;
+}
+
+static void
+grow_without_merging(GwyDataField *dfield, GwyDataField *edt, gdouble amount)
+{
+ GArray *array;
+ guint xres, yres, i, j, k, m;
+ gdouble *d, *e;
+ gint *grains;
+
+ xres = dfield->xres;
+ yres = dfield->yres;
+ d = dfield->data;
+ e = edt->data;
+ grains = g_new0(gint, xres*yres);
+ if (!gwy_data_field_number_grains(dfield, grains)) {
+ g_free(grains);
+ return;
+ }
+
+ array = g_array_sized_new(FALSE, FALSE, sizeof(DistantPoint), 1000);
+ for (i = 0; i < yres; i++) {
+ for (j = 0; j < xres; j++) {
+ gdouble eij = e[i*xres + j];
+ if (eij > 0.0 && eij <= amount) {
+ DistantPoint dp = { eij, i, j };
+ g_array_append_val(array, dp);
+ }
+ }
+ }
+ g_array_sort(array, compare_distant_points);
+
+ for (m = 0; m < array->len; m++) {
+ const DistantPoint *dp = &g_array_index(array, DistantPoint, m);
+ gint g1, g2, g3, g4, gno;
+
+ k = dp->i*xres + dp->j;
+ g1 = dp->i > 0 ? grains[k-xres] : 0;
+ g2 = dp->j > 0 ? grains[k-1] : 0;
+ g3 = dp->j < xres-1 ? grains[k+1] : 0;
+ g4 = dp->i < yres-1 ? grains[k+xres] : 0;
+ /* If all are equal or zeroes then bitwise or gives us the nonzero
+ * value sought. */
+ gno = g1 | g2 | g3 | g4;
+ if ((!g1 || g1 == gno)
+ && (!g2 || g2 == gno)
+ && (!g3 || g3 == gno)
+ && (!g4 || g4 == gno)) {
+ grains[k] = gno;
+ d[k] = 1.0;
+ }
+ }
+
+ g_array_free(array, TRUE);
+ g_free(grains);
+}
+
+/**
+ * gwy_data_field_grains_grow:
+ * @data_field: A data field with zeroes in empty space and nonzeroes in
+ * grains.
+ * @amount: How much the grains should be expanded, in pixels. It is
+ * inclusive, i.e. exterior pixels that are @amount far from the
+ * border will be filled.
+ * @dtype: Type of simple distance to use.
+ * @prevent_merging: %TRUE to prevent grain merging, i.e. the growth stops
+ * where two grains would merge. %FALSE to simply expand the
+ * grains, without regard to grain connectivity.
+ *
+ * Dilates a data field containing mask by specified amount using a distance
+ * measure.
+ *
+ * Non-positive pixels in @data_field will be replaced with ones if they are
+ * not farther than @amount from the grain boundary as defined by @dtype.
+ *
+ * Since: 2.43
+ **/
+void
+gwy_data_field_grains_grow(GwyDataField *data_field,
+ gdouble amount,
+ GwyDistanceTransformType dtype,
+ gboolean prevent_merging)
+{
+ GwyDataField *edt;
+ guint xres, yres, k;
+
+ g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
+ g_return_if_fail(dtype <= GWY_DISTANCE_TRANSFORM_EUCLIDEAN);
+
+ if (amount < 0.5)
+ return;
+
+ amount += 1e-9;
+ xres = data_field->xres;
+ yres = data_field->yres;
+ edt = gwy_data_field_duplicate(data_field);
+ gwy_data_field_grains_invert(edt);
+ gwy_data_field_grain_simple_dist_trans(edt, dtype, FALSE);
+ if (prevent_merging)
+ grow_without_merging(data_field, edt, amount);
+ else {
+ for (k = 0; k < xres*yres; k++) {
+ if (edt->data[k] <= amount)
+ data_field->data[k] = 1.0;
+ }
+ }
+ g_object_unref(edt);
+ gwy_data_field_invalidate(data_field);
+}
+
+static gint
+compare_candidate(gconstpointer pa, gconstpointer pb)
+{
+ const ThinCandidate *a = (const ThinCandidate*)pa;
+ const ThinCandidate *b = (const ThinCandidate*)pb;
+
+ /* Take pixels with lowest Euclidean distances first. */
+ if (a->dist < b->dist)
+ return -1;
+ if (a->dist > b->dist)
+ return 1;
+
+ /* If equal, take pixels with largest Euclidean distance *of their
+ * neighbours* first. This essentially mean flat edges go before corners,
+ * preserving useful branches. */
+ if (a->ndist > b->ndist)
+ return -1;
+ if (a->ndist < b->ndist)
+ return 1;
+
+ /* When desperate, sort bottom and right coordinates first so that we try
+ * to remove them first. Anyway we must impose some rule to make the
+ * sort stable. */
+ if (a->i > b->i)
+ return -1;
+ if (a->i < b->i)
+ return 1;
+ if (a->j > b->j)
+ return -1;
+ if (a->j < b->j)
+ return 1;
+
+ return 0;
+}
+
+/**
+ * gwy_data_field_grains_thin:
+ * @data_field: A data field with zeroes in empty space and nonzeroes in
+ * grains.
+ *
+ * Performs thinning of a data field containing mask.
+ *
+ * The result of thinning is a ‘skeleton’ mask consisting of single-pixel thin
+ * lines.
+ *
+ * Since: 2.48
+ **/
+void
+gwy_data_field_grains_thin(GwyDataField *mask)
+{
+ /* TRUE means removing the central pixel in a 3x3 pixel configuration does
+ * not break any currently connected parts. */
+ static const gboolean ok_to_remove[0x100] = {
+ FALSE, TRUE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE,
+ FALSE, TRUE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE,
+ TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE,
+ TRUE, TRUE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE,
+ FALSE, TRUE, FALSE, FALSE, TRUE, TRUE, FALSE, FALSE,
+ FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE,
+ TRUE, TRUE, FALSE, FALSE, TRUE, TRUE, FALSE, FALSE,
+ TRUE, TRUE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE,
+ TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE,
+ TRUE, TRUE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE,
+ TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE,
+ TRUE, TRUE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE,
+ TRUE, TRUE, FALSE, FALSE, TRUE, TRUE, FALSE, FALSE,
+ FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE,
+ TRUE, TRUE, FALSE, FALSE, TRUE, TRUE, FALSE, FALSE,
+ TRUE, TRUE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE,
+ FALSE, TRUE, FALSE, TRUE, TRUE, TRUE, FALSE, TRUE,
+ FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE,
+ TRUE, TRUE, FALSE, TRUE, TRUE, TRUE, FALSE, TRUE,
+ FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE,
+ FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE,
+ FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE,
+ FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE,
+ FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE,
+ TRUE, TRUE, FALSE, TRUE, TRUE, TRUE, FALSE, TRUE,
+ FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE,
+ TRUE, TRUE, FALSE, TRUE, TRUE, TRUE, FALSE, TRUE,
+ FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE,
+ TRUE, TRUE, FALSE, TRUE, TRUE, TRUE, FALSE, TRUE,
+ FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE,
+ TRUE, TRUE, FALSE, TRUE, TRUE, TRUE, FALSE, TRUE,
+ TRUE, TRUE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE,
+ };
+
+ GwyDataField *dfield;
+ gint i, j, k, xres, yres, ncand;
+ gdouble *d, *m;
+ ThinCandidate *candidates;
+
+ g_return_if_fail(GWY_IS_DATA_FIELD(mask));
+
+ xres = mask->xres;
+ yres = mask->yres;
+ dfield = gwy_data_field_duplicate(mask);
+ gwy_data_field_copy(mask, dfield, FALSE);
+ gwy_data_field_grain_distance_transform(dfield);
+ d = dfield->data;
+ m = mask->data;
+
+ ncand = 0;
+ for (k = 0; k < xres*yres; k++) {
+ if (d[k] > 0.0)
+ ncand++;
+ }
+
+ if (ncand < 2) {
+ /* There are no mask pixels or just a single pixel. In either case
+ * we do not have to do anything. */
+ g_object_unref(dfield);
+ return;
+ }
+
+ candidates = g_new(ThinCandidate, ncand);
+ k = 0;
+ for (i = 0; i < yres; i++) {
+ for (j = 0; j < xres; j++) {
+ if (d[i*xres + j] > 0.0) {
+ gdouble nd, ndist = 0.0, maxndist = 0.0;
+ candidates[k].i = i;
+ candidates[k].j = j;
+ candidates[k].dist = d[i*xres + j];
+
+ if (i && j) {
+ nd = d[(i-1)*xres + (j-1)];
+ ndist += nd;
+ if (nd > maxndist)
+ maxndist = nd;
+ }
+ if (i) {
+ nd = d[(i-1)*xres + j];
+ ndist += nd;
+ if (nd > maxndist)
+ maxndist = nd;
+ }
+ if (i && j < xres-1) {
+ nd = d[(i-1)*xres + (j+1)];
+ ndist += nd;
+ if (nd > maxndist)
+ maxndist = nd;
+ }
+ if (j < xres-1) {
+ nd = d[i*xres + (j+1)];
+ ndist += nd;
+ if (nd > maxndist)
+ maxndist = nd;
+ }
+ if (i < yres-1 && j < xres-1) {
+ nd = d[(i+1)*xres + (j+1)];
+ ndist += nd;
+ if (nd > maxndist)
+ maxndist = nd;
+ }
+ if (i < yres-1) {
+ nd = d[(i+1)*xres + j];
+ ndist += nd;
+ if (nd > maxndist)
+ maxndist = nd;
+ }
+ if (i < yres-1 && j) {
+ nd = d[(i+1)*xres + (j-1)];
+ ndist += nd;
+ if (nd > maxndist)
+ maxndist = nd;
+ }
+ if (j) {
+ nd = d[i*xres + (j-1)];
+ ndist += nd;
+ if (nd > maxndist)
+ maxndist = nd;
+ }
+
+ /* If the point is farther from the border than any neighbour
+ * we never remove it. */
+ if (candidates[k].dist < 0.999*maxndist) {
+ candidates[k].ndist = ndist;
+ k++;
+ }
+ }
+ }
+ }
+ ncand = k;
+
+ if (ncand) {
+ qsort(candidates, ncand, sizeof(ThinCandidate), &compare_candidate);
+
+ for (k = 0; k < ncand; k++) {
+ guint b = 0;
+
+ i = candidates[k].i;
+ j = candidates[k].j;
+ if (i && j && d[(i-1)*xres + (j-1)] > 0.0)
+ b |= 1;
+ if (i && d[(i-1)*xres + j] > 0.0)
+ b |= 2;
+ if (i && j < xres-1 && d[(i-1)*xres + (j+1)] > 0.0)
+ b |= 4;
+ if (j < xres-1 && d[i*xres + (j+1)] > 0.0)
+ b |= 8;
+ if (i < yres-1 && j < xres-1 && d[(i+1)*xres + (j+1)] > 0.0)
+ b |= 16;
+ if (i < yres-1 && d[(i+1)*xres + j] > 0.0)
+ b |= 32;
+ if (i < yres-1 && j && d[(i+1)*xres + (j-1)] > 0.0)
+ b |= 64;
+ if (j && d[i*xres + (j-1)] > 0.0)
+ b |= 128;
+
+ if (ok_to_remove[b]) {
+ d[i*xres + j] = 0.0;
+ m[i*xres + j] = 0.0;
+ }
+ }
+ }
+
+ g_free(candidates);
+ g_object_unref(dfield);
+ gwy_data_field_invalidate(mask);
+}
+
+/* vim: set cin et ts=4 sw=4 cino=>1s,e0,n0,f0,{0,}0,^0,\:1s,=0,g1s,h0,t0,+1s,c3,(0,u0 : */
diff --git a/libprocess/grains-values.c b/libprocess/grains-values.c
new file mode 100644
index 0000000..f75096f
--- /dev/null
+++ b/libprocess/grains-values.c
@@ -0,0 +1,2094 @@
+/*
+ * @(#) $Id: grains-values.c 19698 2017-05-03 20:18:10Z yeti-dn $
+ * Copyright (C) 2003-2017 David Necas (Yeti), Petr Klapetek.
+ * E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include <string.h>
+#include <libgwyddion/gwymacros.h>
+#include <libgwyddion/gwymath.h>
+#include <libprocess/linestats.h>
+#include <libprocess/arithmetic.h>
+#include <libprocess/correct.h>
+#include <libprocess/grains.h>
+#include "gwyprocessinternal.h"
+
+#define ONE G_GUINT64_CONSTANT(1)
+
+typedef struct {
+ gdouble xa;
+ gdouble ya;
+ gdouble xb;
+ gdouble yb;
+ gdouble r2;
+} Edge;
+
+typedef struct {
+ guint size;
+ guint len;
+ Edge *edges;
+} EdgeQueue;
+
+typedef struct {
+ gdouble x;
+ gdouble y;
+ gdouble R2;
+ guint size; /* For candidate sorting. */
+} InscribedDisc;
+
+enum { NDIRECTIONS = 12 };
+
+static const gdouble shift_directions[NDIRECTIONS*2] = {
+ 1.0, 0.0,
+ 0.9914448613738104, 0.1305261922200516,
+ 0.9659258262890683, 0.2588190451025207,
+ 0.9238795325112867, 0.3826834323650898,
+ 0.8660254037844387, 0.5,
+ 0.7933533402912352, 0.6087614290087207,
+ 0.7071067811865476, 0.7071067811865475,
+ 0.6087614290087207, 0.7933533402912352,
+ 0.5, 0.8660254037844386,
+ 0.3826834323650898, 0.9238795325112867,
+ 0.2588190451025207, 0.9659258262890683,
+ 0.1305261922200517, 0.9914448613738104,
+};
+
+/**
+ * gwy_data_field_grains_get_distribution:
+ * @data_field: Data field used for marking. For some quantities its values
+ * are not used, but units and physical dimensions are always
+ * taken from it.
+ * @grain_field: Data field (mask) of marked grains. Note if you pass
+ * non-%NULL @grains all grain information is taken from it and
+ * @grain_field can be even %NULL then.
+ * @distribution: Data line to store grain distribution to.
+ * @grains: Grain numbers filled with gwy_data_field_number_grains() if you
+ * have it, or %NULL (the function then finds grain numbers itself
+ * which is not efficient for repeated use on the same grain field).
+ * @ngrains: The number of grains as returned by
+ * gwy_data_field_number_grains(). Ignored in @grains is %NULL.
+ * @quantity: The quantity to calculate.
+ * @nstats: The number of samples to take on the distribution function. If
+ * nonpositive, a suitable resolution is determined automatically.
+ *
+ * Computes distribution of requested grain characteristics.
+ *
+ * Puts number of grains vs. grain value data into @distribution, units, scales
+ * and offsets of @distribution are updated accordingly.
+ *
+ * Note the @i-th bin is [@i*@dx+ at off,(@i+1)*@dx+ at off] so the central value
+ * you probably want to use for plotting is (@i+0.5)*@dx+ at off (where @dx is
+ * the @distribution data line pixel size, @off is its offset).
+ *
+ * Returns: A data line with the distribution: @distribution itself if it was
+ * not %NULL, otherwise a newly created #GwyDataLine caller must
+ * destroy. If there are no grains, %NULL is returned and
+ * @distribution is not changed.
+ **/
+GwyDataLine*
+gwy_data_field_grains_get_distribution(GwyDataField *data_field,
+ GwyDataField *grain_field,
+ GwyDataLine *distribution,
+ gint ngrains,
+ const gint *grains,
+ GwyGrainQuantity quantity,
+ gint nstats)
+{
+ GwyDataLine *values;
+ gint *mygrains = NULL;
+
+ g_return_val_if_fail(GWY_IS_DATA_FIELD(data_field), FALSE);
+ g_return_val_if_fail(grains || GWY_IS_DATA_FIELD(grain_field), FALSE);
+ g_return_val_if_fail(!grain_field
+ || (grain_field->xres == data_field->xres
+ && grain_field->yres == data_field->yres), FALSE);
+ g_return_val_if_fail(!distribution || GWY_IS_DATA_LINE(distribution),
+ FALSE);
+
+ /* Calculate raw statistics */
+ if (!grains) {
+ grains = mygrains = g_new0(gint, grain_field->xres*grain_field->yres);
+ ngrains = gwy_data_field_number_grains(grain_field, mygrains);
+ }
+ if (!ngrains) {
+ g_free(mygrains);
+ return NULL;
+ }
+
+ values = gwy_data_line_new(ngrains + 1, 1.0, FALSE);
+ gwy_data_field_grains_get_values(data_field, values->data,
+ ngrains, grains, quantity);
+ g_free(mygrains);
+
+ values->res--;
+ values->data[0] = values->data[values->res];
+
+ if (!distribution)
+ distribution = gwy_data_line_new(1, 1.0, FALSE);
+
+ gwy_data_line_distribution(values, distribution, 0.0, 0.0, FALSE, nstats);
+
+ g_object_unref(values);
+
+ return distribution;
+}
+
+/* See stats.c for description, this function calculates twice `contribution
+ * of one corner' (the twice is to move multiplications from inner loops) */
+static inline gdouble
+square_area2w_1c(gdouble z1, gdouble z2, gdouble z4, gdouble c,
+ gdouble x, gdouble y)
+{
+ return sqrt(1.0 + (z1 - z2)*(z1 - z2)/x + (z1 + z2 - c)*(z1 + z2 - c)/y)
+ + sqrt(1.0 + (z1 - z4)*(z1 - z4)/y + (z1 + z4 - c)*(z1 + z4 - c)/x);
+}
+
+/**
+ * find_grain_convex_hull:
+ * @xres: The number of columns in @grains.
+ * @yres: The number of rows in @grains.
+ * @grains: Grain numbers filled with gwy_data_field_number_grains().
+ * @pos: Position of the top-left vertex of grain's convex hull.
+ * @vertices: Array to fill with vertices.
+ *
+ * Finds vertices of a grain's convex hull.
+ *
+ * The grain is identified by @pos which must lie in a grain.
+ *
+ * The positions are returned as indices to vertex grid. NB: The size of the
+ * grid is (@xres + 1)*(@yres + 1), not @xres*@yres.
+ *
+ * The method is a bit naive, some atan2() calculations could be easily saved.
+ **/
+static void
+find_grain_convex_hull(gint xres, gint yres,
+ const gint *grains,
+ gint pos,
+ GArray *vertices)
+{
+ enum { RIGHT = 0, DOWN, LEFT, UP } newdir, dir;
+ const GridPoint *cur, *mid, *prev;
+ GridPoint v;
+ gdouble phi, phim;
+ gint initpos, gno;
+
+ g_return_if_fail(grains[pos]);
+
+ g_array_set_size(vertices, 0);
+ initpos = pos;
+ gno = grains[pos];
+ v.i = pos/xres;
+ v.j = pos % xres;
+ g_array_append_val(vertices, v);
+ newdir = RIGHT;
+
+ do {
+ dir = newdir;
+ switch (dir) {
+ case RIGHT:
+ v.j++;
+ if (v.i > 0 && v.j < xres && grains[(v.i-1)*xres + v.j] == gno)
+ newdir = UP;
+ else if (v.j < xres && grains[v.i*xres + v.j] == gno)
+ newdir = RIGHT;
+ else
+ newdir = DOWN;
+ break;
+
+ case DOWN:
+ v.i++;
+ if (v.j < xres && v.i < yres && grains[v.i*xres + v.j] == gno)
+ newdir = RIGHT;
+ else if (v.i < yres && grains[v.i*xres + v.j-1] == gno)
+ newdir = DOWN;
+ else
+ newdir = LEFT;
+ break;
+
+ case LEFT:
+ v.j--;
+ if (v.i < yres && v.j > 0 && grains[v.i*xres + v.j-1] == gno)
+ newdir = DOWN;
+ else if (v.j > 0 && grains[(v.i-1)*xres + v.j-1] == gno)
+ newdir = LEFT;
+ else
+ newdir = UP;
+ break;
+
+ case UP:
+ v.i--;
+ if (v.j > 0 && v.i > 0 && grains[(v.i-1)*xres + v.j-1] == gno)
+ newdir = LEFT;
+ else if (v.i > 0 && grains[(v.i-1)*xres + v.j] == gno)
+ newdir = UP;
+ else
+ newdir = RIGHT;
+ break;
+
+ default:
+ g_assert_not_reached();
+ break;
+ }
+
+ /* When we turn right, the previous point is a potential vertex, and
+ * it can also supersed previous vertices. */
+ if (newdir == (dir + 1) % 4) {
+ g_array_append_val(vertices, v);
+ while (vertices->len > 2) {
+ cur = &g_array_index(vertices, GridPoint, vertices->len-1);
+ mid = &g_array_index(vertices, GridPoint, vertices->len-2);
+ prev = &g_array_index(vertices, GridPoint, vertices->len-3);
+ phi = atan2(cur->i - mid->i, cur->j - mid->j);
+ phim = atan2(mid->i - prev->i, mid->j - prev->j);
+ phi = fmod(phi - phim + 4.0*G_PI, 2.0*G_PI);
+ /* This should be fairly save as (a) not real harm is done
+ * when we have an occasional extra vertex (b) the greatest
+ * possible angle is G_PI/2.0 */
+ if (phi > 1e-12 && phi < G_PI)
+ break;
+
+ /* Get rid of mid, it is in a locally concave part */
+ g_array_index(vertices, GridPoint, vertices->len-2) = *cur;
+ g_array_set_size(vertices, vertices->len-1);
+ }
+ }
+ } while (v.i*xres + v.j != initpos);
+
+ /* The last point is duplicated first point */
+ g_array_set_size(vertices, vertices->len-1);
+}
+
+/**
+ * grain_maximum_bound:
+ * @vertices: Convex hull vertex list.
+ * @qx: Scale (pixel size) in x-direction.
+ * @qy: Scale (pixel size) in y-direction.
+ * @vx: Location to store vector x component to.
+ * @vy: Location to store vector y component to.
+ *
+ * Given a list of integer convex hull vertices, return the vector between
+ * the two most distance vertices.
+ *
+ * FIXME: This is a blatantly naive O(n^2) algorithm.
+ **/
+static void
+grain_maximum_bound(GArray *vertices,
+ gdouble qx, gdouble qy,
+ gdouble *vx, gdouble *vy)
+{
+ const GridPoint *a, *x;
+ gdouble vm, v, dx, dy;
+ guint g1, g2;
+
+ vm = -G_MAXDOUBLE;
+ for (g1 = 0; g1 < vertices->len; g1++) {
+ a = &g_array_index(vertices, GridPoint, g1);
+ for (g2 = g1 + 1; g2 < vertices->len; g2++) {
+ x = &g_array_index(vertices, GridPoint, g2);
+ dx = qx*(x->j - a->j);
+ dy = qy*(x->i - a->i);
+ v = dx*dx + dy*dy;
+ if (v > vm) {
+ vm = v;
+ *vx = dx;
+ *vy = dy;
+ }
+ }
+ }
+}
+
+/**
+ * grain_minimum_bound:
+ * @vertices: Convex hull vertex list.
+ * @qx: Scale (pixel size) in x-direction.
+ * @qy: Scale (pixel size) in y-direction.
+ * @vx: Location to store vector x component to.
+ * @vy: Location to store vector y component to.
+ *
+ * Given a list of integer convex hull vertices, return the vector
+ * corresponding to the minimum linear projection.
+ *
+ * FIXME: This is a blatantly naive O(n^2) algorithm.
+ **/
+static void
+grain_minimum_bound(GArray *vertices,
+ gdouble qx, gdouble qy,
+ gdouble *vx, gdouble *vy)
+{
+ const GridPoint *a, *b, *x;
+ gdouble vm, vm1, v, s, b2, bx, by, dx, dy, vx1, vy1;
+ guint g1, g1p, g2;
+
+ g_return_if_fail(vertices->len >= 3);
+
+ vm = G_MAXDOUBLE;
+ for (g1 = 0; g1 < vertices->len; g1++) {
+ a = &g_array_index(vertices, GridPoint, g1);
+ g1p = (g1 + 1) % vertices->len;
+ b = &g_array_index(vertices, GridPoint, g1p);
+ bx = qx*(b->j - a->j);
+ by = qy*(b->i - a->i);
+ b2 = bx*bx + by*by;
+ vm1 = vx1 = vy1 = -G_MAXDOUBLE;
+ for (g2 = 0; g2 < vertices->len; g2++) {
+ x = &g_array_index(vertices, GridPoint, g2);
+ dx = qx*(x->j - a->j);
+ dy = qy*(x->i - a->i);
+ s = (dx*bx + dy*by)/b2;
+ dx -= s*bx;
+ dy -= s*by;
+ v = dx*dx + dy*dy;
+ if (v > vm1) {
+ vm1 = v;
+ vx1 = dx;
+ vy1 = dy;
+ }
+ }
+ if (vm1 < vm) {
+ vm = vm1;
+ *vx = vx1;
+ *vy = vy1;
+ }
+ }
+}
+
+static gdouble
+grain_convex_hull_area(GArray *vertices, gdouble dx, gdouble dy)
+{
+ const GridPoint *a = &g_array_index(vertices, GridPoint, 0),
+ *b = &g_array_index(vertices, GridPoint, 1),
+ *c = &g_array_index(vertices, GridPoint, 2);
+ gdouble s = 0.0;
+ guint i;
+
+ g_return_val_if_fail(vertices->len >= 4, 0.0);
+
+ for (i = 2; i < vertices->len; i++) {
+ gdouble bx = b->j - a->j, by = b->i - a->i,
+ cx = c->j - a->j, cy = c->i - a->i;
+ s += 0.5*(bx*cy - by*cx);
+ b = c;
+ c++;
+ }
+
+ return dx*dy*s;
+}
+
+static void
+grain_convex_hull_centre(GArray *vertices,
+ gdouble dx, gdouble dy,
+ gdouble *centrex, gdouble *centrey)
+{
+ const GridPoint *a = &g_array_index(vertices, GridPoint, 0),
+ *b = &g_array_index(vertices, GridPoint, 1),
+ *c = &g_array_index(vertices, GridPoint, 2);
+ gdouble s = 0.0, xc = 0.0, yc = 0.0;
+ guint i;
+
+ g_return_if_fail(vertices->len >= 4);
+
+ for (i = 2; i < vertices->len; i++) {
+ gdouble bx = b->j - a->j, by = b->i - a->i,
+ cx = c->j - a->j, cy = c->i - a->i;
+ gdouble s1 = bx*cy - by*cx;
+ xc += s1*(a->j + b->j + c->j);
+ yc += s1*(a->i + b->i + c->i);
+ s += s1;
+ b = c;
+ c++;
+ }
+ *centrex = xc*dx/(3.0*s);
+ *centrey = yc*dy/(3.0*s);
+}
+
+static gdouble
+minimize_circle_radius(InscribedDisc *circle, GArray *vertices,
+ gdouble dx, gdouble dy)
+{
+ const GridPoint *v = (const GridPoint*)vertices->data;
+ gdouble x = circle->x, y = circle->y, r2best = 0.0;
+ guint n = vertices->len;
+
+ while (n--) {
+ gdouble deltax = dx*v->j - x, deltay = dy*v->i - y;
+ gdouble r2 = deltax*deltax + deltay*deltay;
+
+ if (r2 > r2best)
+ r2best = r2;
+
+ v++;
+ }
+
+ return r2best;
+}
+
+static void
+improve_circumscribed_circle(InscribedDisc *circle, GArray *vertices,
+ gdouble dx, gdouble dy)
+{
+ gdouble eps = 1.0, improvement, qgeom = sqrt(dx*dy);
+
+ do {
+ InscribedDisc best = *circle;
+ guint i;
+
+ improvement = 0.0;
+ for (i = 0; i < NDIRECTIONS; i++) {
+ InscribedDisc cand;
+ gdouble sx = eps*qgeom*shift_directions[2*i],
+ sy = eps*qgeom*shift_directions[2*i + 1];
+
+ cand.size = circle->size;
+
+ cand.x = circle->x + sx;
+ cand.y = circle->y + sy;
+ if ((cand.R2 = minimize_circle_radius(&cand, vertices, dx, dy))
+ < best.R2)
+ best = cand;
+
+ cand.x = circle->x - sy;
+ cand.y = circle->y + sx;
+ if ((cand.R2 = minimize_circle_radius(&cand, vertices, dx, dy))
+ < best.R2)
+ best = cand;
+
+ cand.x = circle->x - sx;
+ cand.y = circle->y - sy;
+ if ((cand.R2 = minimize_circle_radius(&cand, vertices, dx, dy))
+ < best.R2)
+ best = cand;
+
+ cand.x = circle->x + sy;
+ cand.y = circle->y - sx;
+ if ((cand.R2 = minimize_circle_radius(&cand, vertices, dx, dy))
+ < best.R2)
+ best = cand;
+ }
+ if (best.R2 < circle->R2) {
+ improvement = (best.R2 - circle->R2)/(dx*dy);
+ *circle = best;
+ }
+ else {
+ eps *= 0.5;
+ }
+ } while (eps > 1e-3 || improvement > 1e-3);
+}
+
+static guint*
+grain_maybe_realloc(guint *grain, guint w, guint h, guint *grainsize)
+{
+ if (w*h > *grainsize) {
+ g_free(grain);
+ *grainsize = w*h;
+ grain = g_new(guint, *grainsize);
+ }
+ return grain;
+}
+
+static guint*
+extract_upsampled_square_pixel_grain(const guint *grains, guint xres, guint gno,
+ const gint *bbox,
+ guint *grain, guint *grainsize,
+ guint *widthup, guint *heightup,
+ gdouble dx, gdouble dy)
+{
+ gint col = bbox[0], row = bbox[1], w = bbox[2], h = bbox[3];
+ guint w2 = 2*w, h2 = 2*h;
+ guint i, j;
+
+ /* Do not bother with nearly square pixels and upsample also 2×2. */
+ if (fabs(log(dy/dx)) < 0.05) {
+ grain = grain_maybe_realloc(grain, w2, h2, grainsize);
+ for (i = 0; i < h; i++) {
+ guint k2 = w2*(2*i);
+ guint k = (i + row)*xres + col;
+ for (j = 0; j < w; j++, k++, k2 += 2) {
+ guint v = (grains[k] == gno) ? G_MAXUINT : 0;
+ grain[k2] = v;
+ grain[k2+1] = v;
+ grain[k2 + w2] = v;
+ grain[k2 + w2+1] = v;
+ }
+ }
+ }
+ else if (dy < dx) {
+ /* Horizontal upsampling, precalculate index map to use in each row. */
+ guint *indices;
+ w2 = GWY_ROUND(dx/dy*w2);
+ grain = grain_maybe_realloc(grain, w2, h2, grainsize);
+ indices = (guint*)g_slice_alloc(w2*sizeof(guint));
+ for (j = 0; j < w2; j++) {
+ gint jj = (gint)floor(0.5*j*dy/dx);
+ indices[j] = CLAMP(jj, 0, (gint)w-1);
+ }
+ for (i = 0; i < h; i++) {
+ guint k = (i + row)*xres + col;
+ guint k2 = w2*(2*i);
+ for (j = 0; j < w2; j++) {
+ guint v = (grains[k + indices[j]] == gno) ? G_MAXUINT : 0;
+ grain[k2 + j] = v;
+ grain[k2 + w2 + j] = v;
+ }
+ }
+ g_slice_free1(w2*sizeof(guint), indices);
+ }
+ else {
+ /* Vertical upsampling, rows are 2× scaled copies but uneven. */
+ h2 = GWY_ROUND(dy/dx*h2);
+ grain = grain_maybe_realloc(grain, w2, h2, grainsize);
+ for (i = 0; i < h2; i++) {
+ guint k, k2 = i*w2;
+ gint ii = (gint)floor(0.5*i*dx/dy);
+ ii = CLAMP(ii, 0, (gint)h-1);
+ k = (ii + row)*xres + col;
+ for (j = 0; j < w; j++) {
+ guint v = (grains[k + j] == gno) ? G_MAXUINT : 0;
+ grain[k2 + 2*j] = v;
+ grain[k2 + 2*j + 1] = v;
+ }
+ }
+ }
+
+ *widthup = w2;
+ *heightup = h2;
+ return grain;
+}
+
+static gint
+compare_candidates(gconstpointer a,
+ gconstpointer b)
+{
+ const InscribedDisc *da = (const InscribedDisc*)a;
+ const InscribedDisc *db = (const InscribedDisc*)b;
+
+ if (da->size > db->size)
+ return -1;
+ if (da->size < db->size)
+ return 1;
+
+ if (da->R2 < db->R2)
+ return -1;
+ if (da->R2 > db->R2)
+ return 1;
+
+ return 0;
+}
+
+static void
+find_disc_centre_candidates(GArray *candidates,
+ PixelQueue *inqueue,
+ const guint *grain,
+ guint width, guint height,
+ gdouble dx, gdouble dy,
+ gdouble centrex, gdouble centrey)
+{
+ guint m;
+
+ g_array_set_size(candidates, 0);
+ for (m = 0; m < inqueue->len; m++) {
+ GridPoint *mpt = inqueue->points + m;
+ guint i = mpt->i, j = mpt->j, k = i*width + j, size = 8*grain[k], w;
+ InscribedDisc cand;
+
+ if (i && j && (w = grain[k - width-1]) != G_MAXUINT)
+ size += w;
+ if (i && (w = grain[k - width]) != G_MAXUINT)
+ size += 2*w;
+ if (i && j < width-1 && (w = grain[k - width+1]) != G_MAXUINT)
+ size += w;
+ if (j && (w = grain[k-1]) != G_MAXUINT)
+ size += 2*w;
+ if (j < width-1 && (w = grain[k+1]) != G_MAXUINT)
+ size += 2*w;
+ if (i < height-1 && j && (w = grain[k + width-1]) != G_MAXUINT)
+ size += w;
+ if (i < height-1 && (w = grain[k + width]) != G_MAXUINT)
+ size += 2*w;
+ if (i < height-1 && j < width-1 && (w = grain[k + width+1]) != G_MAXUINT)
+ size += w;
+
+ cand.x = (mpt->j + 0.5)*dx;
+ cand.y = (mpt->i + 0.5)*dy;
+ cand.size = size;
+ /* Use R2 temporarily for distance from the entire grain centre;
+ * this is only for sorting below. */
+ cand.R2 = ((cand.x - centrex)*(cand.x - centrex)
+ + (cand.y - centrey)*(cand.y - centrey));
+ g_array_append_val(candidates, cand);
+ }
+ g_array_sort(candidates, &compare_candidates);
+}
+
+static inline void
+edge_list_add(EdgeQueue *queue,
+ gdouble xa, gdouble ya,
+ gdouble xb, gdouble yb)
+{
+ if (G_UNLIKELY(queue->len == queue->size)) {
+ queue->size = MAX(2*queue->size, 16);
+ queue->edges = g_renew(Edge, queue->edges, queue->size);
+ }
+
+ queue->edges[queue->len].xa = xa;
+ queue->edges[queue->len].ya = ya;
+ queue->edges[queue->len].xb = xb;
+ queue->edges[queue->len].yb = yb;
+ queue->len++;
+}
+
+static void
+find_all_edges(EdgeQueue *edges,
+ const gint *grains, guint xres,
+ guint gno, const gint *bbox,
+ gdouble dx, gdouble dy)
+{
+ guint col = bbox[0], row = bbox[1], w = bbox[2], h = bbox[3];
+ guint i, j;
+ guint *vertices;
+
+ edges->len = 0;
+
+ vertices = g_slice_alloc((w + 1)*sizeof(guint));
+ for (j = 0; j <= w; j++)
+ vertices[j] = G_MAXUINT;
+
+ for (i = 0; i <= h; i++) {
+ guint k = (i + row)*xres + col;
+ guint vertex = G_MAXUINT;
+
+ for (j = 0; j <= w; j++, k++) {
+ /*
+ * 1 2
+ * 3 4
+ */
+ guint g0 = i && j && grains[k - xres - 1] == gno;
+ guint g1 = i && j < w && grains[k - xres] == gno;
+ guint g2 = i < h && j && grains[k - 1] == gno;
+ guint g3 = i < h && j < w && grains[k] == gno;
+ guint g = g0 | (g1 << 1) | (g2 << 2) | (g3 << 3);
+
+ if (g == 8 || g == 7) {
+ vertex = j;
+ vertices[j] = i;
+ }
+ else if (g == 2 || g == 13) {
+ edge_list_add(edges, dx*j, dy*vertices[j], dx*j, dy*i);
+ vertex = j;
+ vertices[j] = G_MAXUINT;
+ }
+ else if (g == 4 || g == 11) {
+ edge_list_add(edges, dx*vertex, dy*i, dx*j, dy*i);
+ vertex = G_MAXUINT;
+ vertices[j] = i;
+ }
+ else if (g == 1 || g == 14) {
+ edge_list_add(edges, dx*vertex, dy*i, dx*j, dy*i);
+ edge_list_add(edges, dx*j, dy*vertices[j], dx*j, dy*i);
+ vertex = G_MAXUINT;
+ vertices[j] = G_MAXUINT;
+ }
+ else if (g == 6 || g == 9) {
+ edge_list_add(edges, dx*vertex, dy*i, dx*j, dy*i);
+ edge_list_add(edges, dx*j, dy*vertices[j], dx*j, dy*i);
+ vertex = j;
+ vertices[j] = i;
+ }
+ }
+ }
+
+ g_slice_free1((w + 1)*sizeof(guint), vertices);
+}
+
+static gdouble
+maximize_disc_radius(InscribedDisc *disc, Edge *edges, guint n)
+{
+ gdouble x = disc->x, y = disc->y, r2best = HUGE_VAL;
+
+ while (n--) {
+ gdouble rax = edges->xa - x, ray = edges->ya - y,
+ rbx = edges->xb - x, rby = edges->yb - y,
+ deltax = edges->xb - edges->xa, deltay = edges->yb - edges->ya;
+ gdouble ca = -(deltax*rax + deltay*ray),
+ cb = deltax*rbx + deltay*rby;
+
+ if (ca <= 0.0)
+ edges->r2 = rax*rax + ray*ray;
+ else if (cb <= 0.0)
+ edges->r2 = rbx*rbx + rby*rby;
+ else {
+ gdouble tx = cb*rax + ca*rbx, ty = cb*ray + ca*rby, D = ca + cb;
+ edges->r2 = (tx*tx + ty*ty)/(D*D);
+ }
+
+ if (edges->r2 < r2best)
+ r2best = edges->r2;
+ edges++;
+ }
+
+ return r2best;
+}
+
+static guint
+filter_relevant_edges(EdgeQueue *edges, gdouble r2, gdouble eps)
+{
+ Edge *edge = edges->edges, *enear = edges->edges;
+ gdouble limit = sqrt(r2) + 4.0*eps + 0.5;
+ guint i;
+
+ limit *= limit;
+ for (i = edges->len; i; i--, edge++) {
+ if (edge->r2 <= limit) {
+ if (edge != enear)
+ GWY_SWAP(Edge, *edge, *enear);
+ enear++;
+ }
+ }
+
+ return enear - edges->edges;
+}
+
+static void
+improve_inscribed_disc(InscribedDisc *disc, EdgeQueue *edges, guint dist)
+{
+ gdouble eps = 0.5 + 0.25*(dist > 4) + 0.25*(dist > 16), improvement;
+ guint nsuccessiveimprovements = 0;
+
+ do {
+ InscribedDisc best;
+ guint i, nr;
+
+ disc->R2 = maximize_disc_radius(disc, edges->edges, edges->len);
+ eps = MIN(eps, 0.5*sqrt(disc->R2));
+ best = *disc;
+ nr = filter_relevant_edges(edges, best.R2, eps);
+
+ improvement = 0.0;
+ for (i = 0; i < NDIRECTIONS; i++) {
+ InscribedDisc cand;
+ gdouble sx = eps*shift_directions[2*i],
+ sy = eps*shift_directions[2*i + 1];
+
+ cand.size = disc->size;
+
+ cand.x = disc->x + sx;
+ cand.y = disc->y + sy;
+ if ((cand.R2 = maximize_disc_radius(&cand, edges->edges, nr))
+ > best.R2)
+ best = cand;
+
+ cand.x = disc->x - sy;
+ cand.y = disc->y + sx;
+ if ((cand.R2 = maximize_disc_radius(&cand, edges->edges, nr))
+ > best.R2)
+ best = cand;
+
+ cand.x = disc->x - sx;
+ cand.y = disc->y - sy;
+ if ((cand.R2 = maximize_disc_radius(&cand, edges->edges, nr))
+ > best.R2)
+ best = cand;
+
+ cand.x = disc->x + sy;
+ cand.y = disc->y - sx;
+ if ((cand.R2 = maximize_disc_radius(&cand, edges->edges, nr))
+ > best.R2)
+ best = cand;
+ }
+
+ if (best.R2 > disc->R2) {
+ improvement = sqrt(best.R2) - sqrt(disc->R2);
+ *disc = best;
+ /* This scales up *each* successive improvement after 3 so eps can
+ * grow very quickly. */
+ if (nsuccessiveimprovements++ > 2)
+ eps *= 1.5;
+ }
+ else {
+ eps *= 0.5;
+ nsuccessiveimprovements = 0;
+ }
+ } while (eps > 1e-3 || improvement > 1e-3);
+}
+
+/**
+ * gwy_data_field_grains_get_values:
+ * @data_field: Data field used for marking. For some quantities its values
+ * are not used, but its dimensions determine the dimensions of
+ * @grains.
+ * @values: Array of size @ngrains+1 to put grain values to. It can be
+ * %NULL to allocate and return a new array.
+ * @grains: Grain numbers filled with gwy_data_field_number_grains().
+ * @ngrains: The number of grains as returned by
+ * gwy_data_field_number_grains().
+ * @quantity: The quantity to calculate.
+ *
+ * Calculates characteristics of grains.
+ *
+ * This is a bit low-level function, see also
+ * gwy_data_field_grains_get_distribution().
+ *
+ * The array @values will be filled with the requested grain value for each
+ * individual grain (0th item of @values which does not correspond to any grain
+ * will be overwritten with an arbitrary value and should be ignored).
+ *
+ * The grain numbers serve as indices in @values. Therefore as long as the
+ * same @grains is used, the same position in @values corresponds to the same
+ * particular grain. This enables one for instance to calculate grain sizes
+ * and grain heights and then correlate them.
+ *
+ * Returns: @values itself if it was not %NULL, otherwise a newly allocated
+ * array that caller has to free.
+ **/
+gdouble*
+gwy_data_field_grains_get_values(GwyDataField *data_field,
+ gdouble *values,
+ gint ngrains,
+ const gint *grains,
+ GwyGrainQuantity quantity)
+{
+ gdouble *allvalues[1];
+
+ if (!values)
+ values = g_new(gdouble, ngrains + 1);
+
+ allvalues[0] = values;
+ gwy_data_field_grains_get_quantities(data_field, allvalues,
+ &quantity, 1, ngrains, grains);
+ return values;
+}
+
+static gdouble*
+ensure_buffer(GwyGrainQuantity quantity,
+ gdouble **quantity_data,
+ guint ngrains,
+ gdouble fillvalue,
+ GList **buffers)
+{
+ gdouble *buf, *b;
+ guint gno;
+
+ if (quantity_data[quantity]) {
+ buf = quantity_data[quantity];
+ if (!fillvalue)
+ gwy_clear(buf, ngrains + 1);
+ }
+ else {
+ if (fillvalue)
+ buf = g_new(gdouble, ngrains + 1);
+ else
+ buf = g_new0(gdouble, ngrains + 1);
+ *buffers = g_list_prepend(*buffers, buf);
+ }
+ if (fillvalue) {
+ for (gno = ngrains+1, b = buf; gno; gno--)
+ *(b++) = fillvalue;
+ }
+
+ return buf;
+}
+
+/* Note all coordinates are pixel-wise, not real. For linear and quadratic,
+ * the origin is always the grain centre. */
+static void
+calculate_grain_aux(GwyDataField *data_field,
+ const gint *grains,
+ guint ngrains,
+ gint *sizes, gint *boundpos,
+ gdouble *min, gdouble *max,
+ gdouble *xvalue, gdouble *yvalue, gdouble *zvalue,
+ gdouble *linear, gdouble *quadratic)
+{
+ guint xres, yres, i, j, k, n, gno, nn;
+ gdouble z;
+ const gdouble *d;
+ const gint *g;
+ gdouble *t;
+
+ xres = data_field->xres;
+ yres = data_field->yres;
+ nn = xres*yres;
+
+ if (sizes) {
+ for (k = nn, g = grains; k; k--, g++) {
+ gno = *g;
+ sizes[gno]++;
+ }
+ }
+ if (boundpos) {
+ for (k = 0, g = grains; k < nn; k++, g++) {
+ gno = *g;
+ if (boundpos[gno] == -1)
+ boundpos[gno] = k;
+ }
+ }
+ if (min) {
+ for (k = nn, g = grains, d = data_field->data; k; k--, g++, d++) {
+ gno = *g;
+ z = *d;
+ if (z < min[gno])
+ min[gno] = z;
+ }
+ }
+ if (max) {
+ for (k = nn, g = grains, d = data_field->data; k; k--, g++, d++) {
+ gno = *g;
+ z = *d;
+ if (z > max[gno])
+ max[gno] = z;
+ }
+ }
+ if (zvalue) {
+ g_assert(sizes);
+ for (k = nn, g = grains, d = data_field->data; k; k--, g++, d++) {
+ gno = *g;
+ z = *d;
+ zvalue[gno] += z;
+ }
+ for (gno = 0; gno <= ngrains; gno++) {
+ n = sizes[gno];
+ zvalue[gno] /= n;
+ }
+ }
+ if (xvalue) {
+ g_assert(sizes);
+ g = grains;
+ for (i = 0; i < yres; i++) {
+ for (j = 0; j < xres; j++, g++) {
+ gno = *g;
+ xvalue[gno] += j;
+ }
+ }
+ for (gno = 0; gno <= ngrains; gno++) {
+ n = sizes[gno];
+ xvalue[gno] /= n;
+ }
+ }
+ if (yvalue) {
+ g_assert(sizes);
+ g = grains;
+ for (i = 0; i < yres; i++) {
+ for (j = 0; j < xres; j++, g++) {
+ gno = *g;
+ yvalue[gno] += i;
+ }
+ }
+ for (gno = 0; gno <= ngrains; gno++) {
+ n = sizes[gno];
+ yvalue[gno] /= n;
+ }
+ }
+ if (linear) {
+ g_assert(xvalue && yvalue);
+ g = grains;
+ d = data_field->data;
+ for (i = 0; i < yres; i++) {
+ for (j = 0; j < xres; j++, g++, d++) {
+ gdouble x, y;
+
+ gno = *g;
+ t = linear + 5*gno;
+ x = j - xvalue[gno];
+ y = i - yvalue[gno];
+ z = *d;
+ *(t++) += x*x;
+ *(t++) += x*y;
+ *(t++) += y*y;
+ *(t++) += x*z;
+ *t += y*z;
+ }
+ }
+ }
+ if (quadratic) {
+ g_assert(xvalue && yvalue);
+ g = grains;
+ d = data_field->data;
+ for (i = 0; i < yres; i++) {
+ for (j = 0; j < xres; j++, g++, d++) {
+ gdouble x, y, xx, yy, xy;
+
+ gno = *g;
+ t = quadratic + 12*gno;
+ x = j - xvalue[gno];
+ y = i - yvalue[gno];
+ xx = x*x;
+ xy = x*y;
+ yy = y*y;
+ z = *d;
+ *(t++) += xx*x;
+ *(t++) += xx*y;
+ *(t++) += x*yy;
+ *(t++) += y*yy;
+ *(t++) += xx*xx;
+ *(t++) += xx*xy;
+ *(t++) += xx*yy;
+ *(t++) += xy*yy;
+ *(t++) += yy*yy;
+ *(t++) += xx*z;
+ *(t++) += xy*z;
+ *t += yy*z;
+ }
+ }
+ }
+}
+
+static void
+integrate_grain_volume0(const gdouble *d, const gint *grains,
+ gint xres, gint yres,
+ gdouble *volume, guint ngrains,
+ gdouble pixelarea)
+{
+ gint i, j, gno;
+
+ gwy_clear(volume, ngrains + 1);
+ for (i = 0; i < yres; i++) {
+ for (j = 0; j < xres; j++) {
+ gint ix, ipx, imx, jp, jm;
+ gdouble v;
+
+ ix = i*xres;
+ if (!(gno = grains[ix + j]))
+ continue;
+
+ imx = (i > 0) ? ix-xres : ix;
+ ipx = (i < yres-1) ? ix+xres : ix;
+ jm = (j > 0) ? j-1 : j;
+ jp = (j < xres-1) ? j+1 : j;
+
+ v = (52.0*d[ix + j] + 10.0*(d[imx + j] + d[ix + jm]
+ + d[ix + jp] + d[ipx + j])
+ + (d[imx + jm] + d[imx + jp] + d[ipx + jm] + d[ipx + jp]));
+
+ volume[gno] += v;
+ }
+ }
+ for (gno = 0; gno <= ngrains; gno++)
+ volume[gno] *= pixelarea/96.0;
+}
+
+/**
+ * gwy_data_field_grains_get_quantities:
+ * @data_field: Data field used for marking. For some quantities its values
+ * are not used, but its dimensions determine the dimensions of
+ * @grains.
+ * @values: Array of @nquantities pointers to blocks of length @ngrains+1 to
+ * put the calculated grain values to. Each block corresponds to one
+ * requested quantity. %NULL can be passed to allocate and return a
+ * new array.
+ * @quantities: Array of @nquantities items that specify the requested
+ * #GwyGrainQuantity to put to corresponding items in @values.
+ * Quantities can repeat.
+ * @nquantities: The number of requested different grain values.
+ * @grains: Grain numbers filled with gwy_data_field_number_grains().
+ * @ngrains: The number of grains as returned by
+ * gwy_data_field_number_grains().
+ *
+ * Calculates multiple characteristics of grains simultaneously.
+ *
+ * See gwy_data_field_grains_get_values() for some discussion. This function
+ * is more efficient if several grain quantities need to be calculated since
+ * gwy_data_field_grains_get_values() can do lot of repeated work in such case.
+ *
+ * Returns: @values itself if it was not %NULL, otherwise a newly allocated
+ * array that caller has to free with g_free(), including the
+ * contained arrays.
+ *
+ * Since: 2.22
+ **/
+gdouble**
+gwy_data_field_grains_get_quantities(GwyDataField *data_field,
+ gdouble **values,
+ const GwyGrainQuantity *quantities,
+ guint nquantities,
+ guint ngrains,
+ const gint *grains)
+{
+ /* The number of built-in quantities. */
+ enum { NQ = 45 };
+ enum {
+ NEED_SIZES = 1 << 0,
+ NEED_BOUNDPOS = 1 << 1,
+ NEED_MIN = 1 << 2,
+ NEED_MAX = 1 << 3,
+ NEED_XVALUE = (1 << 4) | NEED_SIZES,
+ NEED_YVALUE = (1 << 5) | NEED_SIZES,
+ NEED_CENTRE = NEED_XVALUE | NEED_YVALUE,
+ NEED_ZVALUE = (1 << 6) | NEED_SIZES,
+ NEED_LINEAR = (1 << 7) | NEED_ZVALUE | NEED_CENTRE,
+ NEED_QUADRATIC = (1 << 8) | NEED_LINEAR,
+ NEED_BBOX = (1 << 9),
+ INVALID = G_MAXUINT
+ };
+ static const guint need_aux[NQ] = {
+ NEED_SIZES, /* projected area */
+ NEED_SIZES, /* equiv square side */
+ NEED_SIZES, /* equiv disc radius */
+ 0, /* surface area */
+ NEED_MAX, /* maximum */
+ NEED_MIN, /* minimum */
+ NEED_ZVALUE, /* mean */
+ NEED_SIZES, /* median */
+ NEED_SIZES, /* pixel area */
+ NEED_MIN | NEED_MAX, /* half-height area */
+ 0, /* flat boundary length */
+ INVALID,
+ NEED_BOUNDPOS, /* min bounding size */
+ NEED_BOUNDPOS, /* min bounding direction */
+ NEED_BOUNDPOS, /* max bounding size */
+ NEED_BOUNDPOS, /* max bounding direction */
+ NEED_XVALUE, /* centre x */
+ NEED_YVALUE, /* centre y */
+ 0, /* volume, 0-based */
+ NEED_MIN | NEED_SIZES, /* volume, min-based */
+ NEED_BBOX | NEED_SIZES, /* volume, Laplace-based */
+ INVALID,
+ INVALID,
+ NEED_LINEAR, /* slope theta */
+ NEED_LINEAR, /* slope phi */
+ 0, /* boundary minimum */
+ 0, /* boundary maximum */
+ NEED_QUADRATIC, /* curvature centre x */
+ NEED_QUADRATIC, /* curvature centre y */
+ NEED_QUADRATIC, /* curvature centre z */
+ NEED_QUADRATIC, /* curvature invrad 1 */
+ NEED_QUADRATIC, /* curvature invrad 2 */
+ NEED_QUADRATIC, /* curvature direction 1 */
+ NEED_QUADRATIC, /* curvature direction 2 */
+ NEED_CENTRE | NEED_BBOX, /* inscribed disc radius */
+ NEED_CENTRE | NEED_BBOX, /* inscribed disc centre x */
+ NEED_CENTRE | NEED_BBOX, /* inscribed disc centre y */
+ NEED_BOUNDPOS, /* convex hull area */
+ NEED_BOUNDPOS, /* circumcircle radius */
+ NEED_BOUNDPOS, /* circumcircle centre x */
+ NEED_BOUNDPOS, /* circumcircle centre y */
+ NEED_CENTRE, /* mean radius */
+ NEED_LINEAR, /* equiv ellipse major axis */
+ NEED_LINEAR, /* equiv ellipse minor axis */
+ NEED_LINEAR, /* equiv ellipse major axis angle */
+ };
+
+ gdouble *quantity_data[NQ];
+ gboolean seen[NQ];
+ GList *l, *buffers = NULL;
+ guint *sizes = NULL;
+ gint *boundpos = NULL, *bbox = NULL;
+ gdouble *xvalue = NULL, *yvalue = NULL, *zvalue = NULL,
+ *min = NULL, *max = NULL,
+ *linear = NULL, *quadratic = NULL;
+ const gdouble *d;
+ gdouble *p;
+ gdouble qh, qv, qarea, qdiag, qgeom;
+ guint xres, yres, i, j, k, nn, gno;
+
+ g_return_val_if_fail(GWY_IS_DATA_FIELD(data_field), NULL);
+ g_return_val_if_fail(grains, NULL);
+ if (!nquantities)
+ return values;
+ g_return_val_if_fail(quantities, NULL);
+
+ if (!values) {
+ values = g_new(gdouble*, nquantities);
+ for (i = 0; i < nquantities; i++)
+ values[i] = g_new0(gdouble, ngrains + 1);
+ }
+ else {
+ for (i = 0; i < nquantities; i++)
+ gwy_clear(values[i], ngrains + 1);
+ }
+
+ xres = data_field->xres;
+ yres = data_field->yres;
+ nn = xres*yres;
+ gwy_debug("ngrains: %d, nn: %d", ngrains, nn);
+
+ /* Figure out which quantities are requested. */
+ gwy_clear(quantity_data, NQ);
+ for (i = 0; i < nquantities; i++) {
+ GwyGrainQuantity quantity = quantities[i];
+
+ if ((guint)quantity >= NQ || need_aux[quantity] == INVALID) {
+ g_warning("Invalid built-in grain quantity number %u.", quantity);
+ continue;
+ }
+ /* Take the first if the same quantity is requested multiple times.
+ * We will deal with this later. */
+ if (!quantity_data[quantity])
+ quantity_data[quantity] = values[i];
+ }
+
+ /* Figure out the auxiliary data to calculate. Do this after we gathered
+ * all quantities as some auxiliary data are in fact quantities too. */
+ for (i = 0; i < nquantities; i++) {
+ GwyGrainQuantity quantity = quantities[i];
+ guint need;
+
+ if ((guint)quantity >= NQ || need_aux[quantity] == INVALID)
+ continue;
+
+ need = need_aux[quantity];
+ /* Integer data */
+ if ((need & NEED_SIZES) && !sizes) {
+ sizes = g_new0(guint, ngrains + 1);
+ buffers = g_list_prepend(buffers, sizes);
+ }
+ if ((need & NEED_BOUNDPOS) && !boundpos) {
+ boundpos = g_new(gint, ngrains + 1);
+ buffers = g_list_prepend(buffers, boundpos);
+ for (gno = 0; gno <= ngrains; gno++)
+ boundpos[gno] = -1;
+ }
+ if ((need & NEED_BBOX) && !bbox) {
+ bbox = gwy_data_field_get_grain_bounding_boxes(data_field,
+ ngrains, grains,
+ NULL);
+ buffers = g_list_prepend(buffers, bbox);
+ }
+ /* Floating point data that coincide with some quantity. An array
+ * is allocated only if the corresponding quantity is not requested.
+ * Otherwise we use the supplied array. */
+ if (need & NEED_MIN)
+ min = ensure_buffer(GWY_GRAIN_VALUE_MINIMUM, quantity_data,
+ ngrains, G_MAXDOUBLE, &buffers);
+ if (need & NEED_MAX)
+ max = ensure_buffer(GWY_GRAIN_VALUE_MAXIMUM, quantity_data,
+ ngrains, -G_MAXDOUBLE, &buffers);
+ if (need & NEED_XVALUE)
+ xvalue = ensure_buffer(GWY_GRAIN_VALUE_CENTER_X, quantity_data,
+ ngrains, 0.0, &buffers);
+ if (need & NEED_YVALUE)
+ yvalue = ensure_buffer(GWY_GRAIN_VALUE_CENTER_Y, quantity_data,
+ ngrains, 0.0, &buffers);
+ if (need & NEED_ZVALUE)
+ zvalue = ensure_buffer(GWY_GRAIN_VALUE_MEAN, quantity_data,
+ ngrains, 0.0, &buffers);
+ /* Complex floating point data */
+ if ((need & NEED_LINEAR) && !linear) {
+ linear = g_new0(gdouble, 5*(ngrains + 1));
+ buffers = g_list_prepend(buffers, linear);
+ }
+ if ((need & NEED_QUADRATIC) && !quadratic) {
+ quadratic = g_new0(gdouble, 12*(ngrains + 1));
+ buffers = g_list_prepend(buffers, quadratic);
+ }
+ }
+
+ /* Calculate auxiliary quantities (in pixel lateral coordinates) */
+ calculate_grain_aux(data_field, grains, ngrains, sizes, boundpos,
+ min, max, xvalue, yvalue, zvalue, linear, quadratic);
+
+ d = data_field->data;
+ qh = gwy_data_field_get_xmeasure(data_field);
+ qv = gwy_data_field_get_ymeasure(data_field);
+ qdiag = hypot(qh, qv);
+ qarea = qh*qv;
+ qgeom = sqrt(qarea);
+
+ /* Calculate specific requested quantities */
+ if ((p = quantity_data[GWY_GRAIN_VALUE_PIXEL_AREA])) {
+ for (gno = 0; gno <= ngrains; gno++)
+ p[gno] = sizes[gno];
+ }
+ if ((p = quantity_data[GWY_GRAIN_VALUE_PROJECTED_AREA])) {
+ for (gno = 0; gno <= ngrains; gno++)
+ p[gno] = qarea*sizes[gno];
+ }
+ if ((p = quantity_data[GWY_GRAIN_VALUE_EQUIV_SQUARE_SIDE])) {
+ for (gno = 0; gno <= ngrains; gno++)
+ p[gno] = sqrt(qarea*sizes[gno]);
+ }
+ if ((p = quantity_data[GWY_GRAIN_VALUE_EQUIV_DISC_RADIUS])) {
+ for (gno = 0; gno <= ngrains; gno++)
+ p[gno] = sqrt(qarea/G_PI*sizes[gno]);
+ }
+ if ((p = quantity_data[GWY_GRAIN_VALUE_SURFACE_AREA])) {
+ gdouble qh2 = qh*qh, qv2 = qv*qv;
+
+ gwy_clear(p, ngrains + 1);
+ /* Every contribution is calculated twice -- for each pixel (vertex)
+ * participating to a particular triangle */
+ for (i = 0; i < yres; i++) {
+ for (j = 0; j < xres; j++) {
+ gint ix, ipx, imx, jp, jm;
+ gdouble c;
+
+ ix = i*xres;
+ if (!(gno = grains[ix + j]))
+ continue;
+
+ imx = (i > 0) ? ix-xres : ix;
+ ipx = (i < yres-1) ? ix+xres : ix;
+ jm = (j > 0) ? j-1 : j;
+ jp = (j < xres-1) ? j+1 : j;
+
+ c = (d[ix + j] + d[ix + jm] + d[imx + jm] + d[imx + j])/2.0;
+ p[gno] += square_area2w_1c(d[ix + j], d[ix + jm],
+ d[imx + j], c, qh2, qv2);
+
+ c = (d[ix + j] + d[ix + jp] + d[imx + jp] + d[imx + j])/2.0;
+ p[gno] += square_area2w_1c(d[ix + j], d[ix + jp],
+ d[imx + j], c, qh2, qv2);
+
+ c = (d[ix + j] + d[ix + jm] + d[ipx + jm] + d[ipx + j])/2.0;
+ p[gno] += square_area2w_1c(d[ix + j], d[ix + jm],
+ d[ipx + j], c, qh2, qv2);
+
+ c = (d[ix + j] + d[ix + jp] + d[ipx + jp] + d[ipx + j])/2.0;
+ p[gno] += square_area2w_1c(d[ix + j], d[ix + jp],
+ d[ipx + j], c, qh2, qv2);
+ }
+ }
+ for (gno = 0; gno <= ngrains; gno++)
+ p[gno] *= qarea/8.0;
+ }
+ /* GWY_GRAIN_VALUE_MINIMUM is calculated directly. */
+ /* GWY_GRAIN_VALUE_MAXIMUM is calculated directly. */
+ /* GWY_GRAIN_VALUE_MEAN is calculated directly. */
+ if ((p = quantity_data[GWY_GRAIN_VALUE_MEDIAN])) {
+ guint *csizes = g_new0(guint, ngrains + 1);
+ guint *pos = g_new0(guint, ngrains + 1);
+ gdouble *tmp;
+
+ /* Find cumulative sizes (we care only about grains, ignore the
+ * outside-grains area) */
+ csizes[0] = 0;
+ csizes[1] = sizes[1];
+ for (gno = 2; gno <= ngrains; gno++)
+ csizes[gno] = sizes[gno] + csizes[gno-1];
+
+ tmp = g_new(gdouble, csizes[ngrains]);
+ /* Find where each grain starts in tmp sorted by grain # */
+ for (gno = 1; gno <= ngrains; gno++)
+ pos[gno] = csizes[gno-1];
+ /* Sort values by grain # to tmp */
+ for (k = 0; k < nn; k++) {
+ if ((gno = grains[k])) {
+ tmp[pos[gno]] = d[k];
+ pos[gno]++;
+ }
+ }
+ /* Find medians of each block */
+ for (gno = 1; gno <= ngrains; gno++)
+ p[gno] = gwy_math_median(csizes[gno] - csizes[gno-1],
+ tmp + csizes[gno-1]);
+ /* Finalize */
+ g_free(csizes);
+ g_free(pos);
+ g_free(tmp);
+ }
+ if ((p = quantity_data[GWY_GRAIN_VALUE_HALF_HEIGHT_AREA])) {
+ gdouble *zhalf;
+ guint *zhsizes;
+
+ /* Find the grain half-heights, i.e. (z_min + z_max)/2, first */
+ zhalf = g_new(gdouble, ngrains + 1);
+ for (gno = 0; gno <= ngrains; gno++)
+ zhalf[gno] = (min[gno] + max[gno])/2.0;
+ /* Calculate the area of pixels above the half-heights */
+ zhsizes = g_new0(gint, ngrains + 1);
+ for (k = 0; k < nn; k++) {
+ gno = grains[k];
+ if (d[k] >= zhalf[gno])
+ zhsizes[gno]++;
+ }
+ for (gno = 0; gno <= ngrains; gno++)
+ p[gno] = qarea*zhsizes[gno];
+ /* Finalize */
+ g_free(zhalf);
+ g_free(zhsizes);
+ }
+ if ((p = quantity_data[GWY_GRAIN_VALUE_FLAT_BOUNDARY_LENGTH])) {
+ gwy_clear(p, ngrains + 1);
+ /* Note the cycles go to xres and yres inclusive as we calculate the
+ * boundary, not pixel interiors. */
+ for (i = 0; i <= yres; i++) {
+ for (j = 0; j <= xres; j++) {
+ gint g1, g2, g3, g4, f;
+
+ /* Hope compiler will optimize this mess... */
+ g1 = (i > 0 && j > 0) ? grains[i*xres + j - xres - 1] : 0;
+ g2 = (i > 0 && j < xres) ? grains[i*xres + j - xres] : 0;
+ g3 = (i < yres && j > 0) ? grains[i*xres + j - 1] : 0;
+ g4 = (i < yres && j < xres) ? grains[i*xres + j] : 0;
+ f = (g1 > 0) + (g2 > 0) + (g3 > 0) + (g4 > 0);
+ if (f == 0 || f == 4)
+ continue;
+
+ if (f == 1 || f == 3) {
+ /* Try to avoid too many if-thens by using the fact they
+ * are all either zero or an identical value */
+ p[g1 | g2 | g3 | g4] += qdiag/2.0;
+ }
+ else if (g1 && g4) {
+ /* This works for both g1 == g4 and g1 != g4 */
+ p[g1] += qdiag/2.0;
+ p[g4] += qdiag/2.0;
+ }
+ else if (g2 && g3) {
+ /* This works for both g2 == g3 and g2 != g3 */
+ p[g2] += qdiag/2.0;
+ p[g3] += qdiag/2.0;
+ }
+ else if (g1 == g2)
+ p[g1 | g3] += qh;
+ else if (g1 == g3)
+ p[g1 | g2] += qv;
+ else {
+ g_assert_not_reached();
+ }
+ }
+ }
+ }
+ if (quantity_data[GWY_GRAIN_VALUE_BOUNDARY_MINIMUM]
+ || quantity_data[GWY_GRAIN_VALUE_BOUNDARY_MAXIMUM]) {
+ gdouble *pmin = quantity_data[GWY_GRAIN_VALUE_BOUNDARY_MINIMUM];
+ gdouble *pmax = quantity_data[GWY_GRAIN_VALUE_BOUNDARY_MAXIMUM];
+
+ if (pmin) {
+ for (gno = 0; gno <= ngrains; gno++)
+ pmin[gno] = G_MAXDOUBLE;
+ }
+ if (pmax) {
+ for (gno = 0; gno <= ngrains; gno++)
+ pmax[gno] = -G_MAXDOUBLE;
+ }
+
+ for (i = 0; i < yres; i++) {
+ for (j = 0; j < xres; j++) {
+ gdouble z;
+
+ /* Processing of the none-grain boundary is waste of time. */
+ if (!(gno = grains[i*xres + j]))
+ continue;
+
+ if (i && j && i < yres-1 && j < xres - 1
+ && grains[(i - 1)*xres + j] == gno
+ && grains[i*xres + j - 1] == gno
+ && grains[i*xres + j + 1] == gno
+ && grains[(i + 1)*xres + j] == gno)
+ continue;
+
+ z = d[i*xres + j];
+ if (pmin && z < pmin[gno])
+ pmin[gno] = z;
+ if (pmax && z > pmax[gno])
+ pmax[gno] = z;
+ }
+ }
+ }
+ if (quantity_data[GWY_GRAIN_VALUE_MINIMUM_BOUND_SIZE]
+ || quantity_data[GWY_GRAIN_VALUE_MINIMUM_BOUND_ANGLE]
+ || quantity_data[GWY_GRAIN_VALUE_MAXIMUM_BOUND_SIZE]
+ || quantity_data[GWY_GRAIN_VALUE_MAXIMUM_BOUND_ANGLE]
+ || quantity_data[GWY_GRAIN_VALUE_CONVEX_HULL_AREA]
+ || quantity_data[GWY_GRAIN_VALUE_CIRCUMCIRCLE_R]
+ || quantity_data[GWY_GRAIN_VALUE_CIRCUMCIRCLE_X]
+ || quantity_data[GWY_GRAIN_VALUE_CIRCUMCIRCLE_Y]) {
+ gdouble *psmin = quantity_data[GWY_GRAIN_VALUE_MINIMUM_BOUND_SIZE];
+ gdouble *psmax = quantity_data[GWY_GRAIN_VALUE_MAXIMUM_BOUND_SIZE];
+ gdouble *pamin = quantity_data[GWY_GRAIN_VALUE_MINIMUM_BOUND_ANGLE];
+ gdouble *pamax = quantity_data[GWY_GRAIN_VALUE_MAXIMUM_BOUND_ANGLE];
+ gdouble *achull = quantity_data[GWY_GRAIN_VALUE_CONVEX_HULL_AREA];
+ gdouble *circcr = quantity_data[GWY_GRAIN_VALUE_CIRCUMCIRCLE_R];
+ gdouble *circcx = quantity_data[GWY_GRAIN_VALUE_CIRCUMCIRCLE_X];
+ gdouble *circcy = quantity_data[GWY_GRAIN_VALUE_CIRCUMCIRCLE_Y];
+ GArray *vertices;
+
+ /* Find the complete convex hulls */
+ vertices = g_array_new(FALSE, FALSE, sizeof(GridPoint));
+ for (gno = 1; gno <= ngrains; gno++) {
+ gdouble dx = qh, dy = qv;
+
+ find_grain_convex_hull(xres, yres, grains, boundpos[gno], vertices);
+ if (psmin || pamin) {
+ grain_minimum_bound(vertices, qh, qv, &dx, &dy);
+ if (psmin)
+ psmin[gno] = hypot(dx, dy);
+ if (pamin) {
+ pamin[gno] = atan2(-dy, dx);
+ if (pamin[gno] <= -G_PI/2.0)
+ pamin[gno] += G_PI;
+ else if (pamin[gno] > G_PI/2.0)
+ pamin[gno] -= G_PI;
+ }
+ }
+ if (psmax || pamax) {
+ grain_maximum_bound(vertices, qh, qv, &dx, &dy);
+ if (psmax)
+ psmax[gno] = hypot(dx, dy);
+ if (pamax) {
+ pamax[gno] = atan2(-dy, dx);
+ if (pamax[gno] <= -G_PI/2.0)
+ pamax[gno] += G_PI;
+ else if (pamax[gno] > G_PI/2.0)
+ pamax[gno] -= G_PI;
+ }
+ }
+ if (achull) {
+ achull[gno] = grain_convex_hull_area(vertices, qh, qv);
+ }
+ if (circcr || circcx || circcy) {
+ InscribedDisc circle = { 0.0, 0.0, 0.0, 0 };
+
+ grain_convex_hull_centre(vertices, qh, qv,
+ &circle.x, &circle.y);
+ circle.R2 = minimize_circle_radius(&circle, vertices,
+ qh, qv);
+ improve_circumscribed_circle(&circle, vertices, qh, qv);
+
+ if (circcr)
+ circcr[gno] = sqrt(circle.R2);
+ if (circcx)
+ circcx[gno] = circle.x + data_field->xoff;
+ if (circcy)
+ circcy[gno] = circle.y + data_field->yoff;
+ }
+ }
+ /* Finalize */
+ g_array_free(vertices, TRUE);
+ }
+ /* XXX: This must go before GWY_GRAIN_VALUE_CENTER_X and
+ * GWY_GRAIN_VALUE_CENTER_Y because we want them as pixel quantities. */
+ if (quantity_data[GWY_GRAIN_VALUE_INSCRIBED_DISC_R]
+ || quantity_data[GWY_GRAIN_VALUE_INSCRIBED_DISC_X]
+ || quantity_data[GWY_GRAIN_VALUE_INSCRIBED_DISC_Y]) {
+ gdouble *inscdr = quantity_data[GWY_GRAIN_VALUE_INSCRIBED_DISC_R];
+ gdouble *inscdx = quantity_data[GWY_GRAIN_VALUE_INSCRIBED_DISC_X];
+ gdouble *inscdy = quantity_data[GWY_GRAIN_VALUE_INSCRIBED_DISC_Y];
+ guint *grain = NULL;
+ guint grainsize = 0;
+ PixelQueue *inqueue = g_slice_new0(PixelQueue);
+ PixelQueue *outqueue = g_slice_new0(PixelQueue);
+ GArray *candidates = g_array_new(FALSE, FALSE, sizeof(InscribedDisc));
+ EdgeQueue edges = { 0, 0, NULL };
+ InscribedDisc *cand;
+
+ /*
+ * For each grain:
+ * Extract it, find all boundary pixels.
+ * Use (octagnoal) erosion to find disc centre candidate(s).
+ * For each candidate:
+ * Find maximum disc that fits with this centre.
+ * By expanding/moving try to find a larger disc until we cannot
+ * improve it.
+ */
+ for (gno = 1; gno <= ngrains; gno++) {
+ guint width, height, dist;
+ gdouble dx, dy, centrex, centrey;
+ guint w = bbox[4*gno + 2], h = bbox[4*gno + 3];
+ gdouble xoff = qh*bbox[4*gno] + data_field->xoff,
+ yoff = qv*bbox[4*gno + 1] + data_field->yoff;
+ guint ncand;
+
+ /* If the grain is rectangular, calculate the disc directly.
+ * Large rectangular grains are rare but the point is to catch
+ * grains with width of height of 1 here. */
+ if (sizes[gno] == w*h) {
+ dx = 0.5*w*qh;
+ dy = 0.5*h*qv;
+ if (inscdr)
+ inscdr[gno] = 0.999*MIN(dx, dy);
+ if (inscdx)
+ inscdx[gno] = dx + xoff;
+ if (inscdy)
+ inscdy[gno] = dy + yoff;
+ continue;
+ }
+
+ /* Upsampling twice combined with octagonal erosion has the nice
+ * property that we get candidate pixels in places such as corners
+ * or junctions of one-pixel thin lines. */
+ grain = extract_upsampled_square_pixel_grain(grains, xres, gno,
+ bbox + 4*gno,
+ grain, &grainsize,
+ &width, &height,
+ qh, qv);
+ /* Size of upsamples pixel in original pixel coordinates. Normally
+ * equal to 1/2 and always approximately 1:1. */
+ dx = w*(qh/qgeom)/width;
+ dy = h*(qv/qgeom)/height;
+ /* Grain centre in squeezed pixel coordinates within the bbox. */
+ centrex = (xvalue[gno] + 0.5)*(qh/qgeom);
+ centrey = (yvalue[gno] + 0.5)*(qv/qgeom);
+
+ dist = _gwy_simple_dist_trans(grain, width, height, TRUE,
+ GWY_DISTANCE_TRANSFORM_OCTAGONAL48,
+ inqueue, outqueue);
+ if (dist % 2 == 0) {
+ GWY_SWAP(PixelQueue*, inqueue, outqueue);
+ }
+#if 0
+ for (i = 0; i < height; i++) {
+ for (j = 0; j < width; j++) {
+ if (!grain[i*width + j])
+ g_printerr("..");
+ else
+ g_printerr("%02u", grain[i*width + j]);
+ g_printerr("%c", j == width-1 ? '\n' : ' ');
+ }
+ }
+#endif
+ /* Now inqueue is always non-empty and contains max-distance
+ * pixels of the upscaled grain. */
+ find_disc_centre_candidates(candidates, inqueue,
+ grain, width, height,
+ dx, dy, centrex, centrey);
+ find_all_edges(&edges, grains, xres, gno, bbox + 4*gno,
+ qh/qgeom, qv/qgeom);
+
+ /* Try a few first candidates for the inscribed disc centre. */
+ ncand = MIN(15, candidates->len);
+ for (i = 0; i < ncand; i++) {
+ cand = &g_array_index(candidates, InscribedDisc, i);
+ improve_inscribed_disc(cand, &edges, dist);
+ }
+
+ cand = &g_array_index(candidates, InscribedDisc, 0);
+ for (i = 1; i < ncand; i++) {
+ if (g_array_index(candidates, InscribedDisc, i).R2 > cand->R2)
+ cand = &g_array_index(candidates, InscribedDisc, i);
+ }
+
+ if (inscdr)
+ inscdr[gno] = sqrt(cand->R2 * qarea);
+ if (inscdx)
+ inscdx[gno] = cand->x*qgeom + xoff;
+ if (inscdy)
+ inscdy[gno] = cand->y*qgeom + yoff;
+ }
+
+ g_free(grain);
+ g_free(inqueue->points);
+ g_free(outqueue->points);
+ g_slice_free(PixelQueue, inqueue);
+ g_slice_free(PixelQueue, outqueue);
+ g_free(edges.edges);
+ g_array_free(candidates, TRUE);
+ }
+ /* XXX: This must go before GWY_GRAIN_VALUE_CENTER_X and
+ * GWY_GRAIN_VALUE_CENTER_Y because we want them as pixel quantities. */
+ if ((p = quantity_data[GWY_GRAIN_VALUE_MEAN_RADIUS])) {
+ guint *blen = g_new0(guint, ngrains + 1);
+
+ k = 0;
+ for (i = 0; i < yres; i++) {
+ for (j = 0; j < xres; j++, k++) {
+ gdouble xc, yc;
+
+ if (!(gno = grains[k]))
+ continue;
+
+ xc = xvalue[gno];
+ yc = yvalue[gno];
+ if (!i || !grains[k - xres]) {
+ p[gno] += hypot(qh*(j+0.5 - xc), qv*(i - yc));
+ p[gno] += hypot(qh*(j+1 - xc), qv*(i - yc));
+ blen[gno] += 2;
+ }
+ if (!j || !grains[k-1]) {
+ p[gno] += hypot(qh*(j - xc), qv*(i - yc));
+ p[gno] += hypot(qh*(j - xc), qv*(i+0.5 - yc));
+ blen[gno] += 2;
+ }
+ if (j == xres-1 || !grains[k+1]) {
+ p[gno] += hypot(qh*(j+1 - xc), qv*(i+0.5 - yc));
+ p[gno] += hypot(qh*(j+1 - xc), qv*(i+1 - yc));
+ blen[gno] += 2;
+ }
+ if (i == yres-1 || !grains[k + xres]) {
+ p[gno] += hypot(qh*(j - xc), qv*(i+1 - yc));
+ p[gno] += hypot(qh*(j+0.5 - xc), qv*(i+1 - yc));
+ blen[gno] += 2;
+ }
+ }
+ }
+
+ for (gno = 1; gno <= ngrains; gno++)
+ p[gno] /= blen[gno];
+
+ g_free(blen);
+ }
+ if (quantity_data[GWY_GRAIN_VALUE_EQUIV_ELLIPSE_MAJOR]
+ || quantity_data[GWY_GRAIN_VALUE_EQUIV_ELLIPSE_MINOR]
+ || quantity_data[GWY_GRAIN_VALUE_EQUIV_ELLIPSE_ANGLE]) {
+ gdouble *amaj = quantity_data[GWY_GRAIN_VALUE_EQUIV_ELLIPSE_MAJOR];
+ gdouble *amin = quantity_data[GWY_GRAIN_VALUE_EQUIV_ELLIPSE_MINOR];
+ gdouble *phi = quantity_data[GWY_GRAIN_VALUE_EQUIV_ELLIPSE_ANGLE];
+
+ for (gno = 1; gno <= ngrains; gno++) {
+ guint n = sizes[gno];
+ gdouble *lin = linear + 5*gno;
+ gdouble Jxx = qh*qh*(lin[0] + n/12.0)*qarea;
+ gdouble Jxy = qh*qv*lin[1]*qarea;
+ gdouble Jyy = qv*qv*(lin[2] + n/12.0)*qarea;
+
+ if (phi) {
+ gdouble Jeps = 1e-9*MAX(Jxx, Jyy);
+
+ if (fabs(Jxx - Jyy) > Jeps || fabs(Jxy) > Jeps)
+ phi[gno] = 0.5*atan2(-2.0*Jxy, Jxx - Jyy);
+ else
+ phi[gno] = 0.0;
+ }
+
+ if (amaj || amin) {
+ gdouble u = Jxx + Jyy,
+ v = hypot(2.0*Jxy, Jxx - Jyy),
+ w = sqrt(G_PI*sqrt(Jxx*Jyy - Jxy*Jxy));
+
+ if (amaj)
+ amaj[gno] = sqrt((u + v)/w);
+ if (amin)
+ amin[gno] = sqrt((u - v)/w);
+ }
+ }
+
+ }
+ if ((p = quantity_data[GWY_GRAIN_VALUE_CENTER_X])) {
+ for (gno = 0; gno <= ngrains; gno++)
+ p[gno] = qh*(p[gno] + 0.5) + data_field->xoff;
+ }
+ if ((p = quantity_data[GWY_GRAIN_VALUE_CENTER_Y])) {
+ for (gno = 0; gno <= ngrains; gno++)
+ p[gno] = qv*(p[gno] + 0.5) + data_field->yoff;
+ }
+ if (quantity_data[GWY_GRAIN_VALUE_VOLUME_0]
+ || quantity_data[GWY_GRAIN_VALUE_VOLUME_MIN]) {
+ gdouble *pv0 = quantity_data[GWY_GRAIN_VALUE_VOLUME_0];
+ gdouble *pvm = quantity_data[GWY_GRAIN_VALUE_VOLUME_MIN];
+
+ if (pv0) {
+ integrate_grain_volume0(d, grains, xres, yres, pv0, ngrains, qarea);
+ if (pvm) {
+ for (gno = 0; gno <= ngrains; gno++)
+ pvm[gno] = pv0[gno] - qarea*min[gno]*sizes[gno];
+ }
+ }
+ else {
+ g_assert(pvm);
+ integrate_grain_volume0(d, grains, xres, yres, pvm, ngrains, qarea);
+ for (gno = 0; gno <= ngrains; gno++)
+ pvm[gno] -= qarea*min[gno]*sizes[gno];
+ }
+ }
+ if ((p = quantity_data[GWY_GRAIN_VALUE_VOLUME_LAPLACE])) {
+ /* Fail gracefully when there is one big `grain' over all data. */
+ if (ngrains == 1 && sizes[1] == xres*yres)
+ p[1] = 0.0;
+ else {
+ GwyDataField *difference = gwy_data_field_duplicate(data_field);
+ GwyDataField *mask = gwy_data_field_new_alike(data_field, FALSE);
+ gdouble *m = mask->data;
+
+ for (k = 0; k < nn; k++)
+ m[k] = grains[k];
+
+ gwy_data_field_laplace_solve(difference, mask, -1, 0.4);
+ g_object_unref(mask);
+ gwy_data_field_subtract_fields(difference, data_field, difference);
+ integrate_grain_volume0(difference->data, grains, xres, yres, p,
+ ngrains, qarea);
+ g_object_unref(difference);
+ }
+ }
+ if (quantity_data[GWY_GRAIN_VALUE_SLOPE_THETA]
+ || quantity_data[GWY_GRAIN_VALUE_SLOPE_PHI]) {
+ gdouble *ptheta = quantity_data[GWY_GRAIN_VALUE_SLOPE_THETA];
+ gdouble *pphi = quantity_data[GWY_GRAIN_VALUE_SLOPE_PHI];
+
+ for (gno = 1; gno <= ngrains; gno++) {
+ gdouble xx, yy, xy, xz, yz, det, bx, by;
+ gdouble *lin = linear + 5*gno;
+
+ xx = lin[0];
+ xy = lin[1];
+ yy = lin[2];
+ xz = lin[3];
+ yz = lin[4];
+ det = xx*yy - xy*xy;
+ if (det) {
+ bx = (xz*yy - xy*yz)/(qh*det);
+ by = (yz*xx - xy*xz)/(qv*det);
+ if (ptheta)
+ ptheta[gno] = atan(hypot(bx, by));
+ if (pphi)
+ pphi[gno] = atan2(by, -bx);
+ }
+ else {
+ if (ptheta)
+ ptheta[gno] = 0.0;
+ if (pphi)
+ pphi[gno] = 0.0;
+ }
+ }
+ }
+ if (quantity_data[GWY_GRAIN_VALUE_CURVATURE_CENTER_X]
+ || quantity_data[GWY_GRAIN_VALUE_CURVATURE_CENTER_Y]
+ || quantity_data[GWY_GRAIN_VALUE_CURVATURE_CENTER_Z]
+ || quantity_data[GWY_GRAIN_VALUE_CURVATURE1]
+ || quantity_data[GWY_GRAIN_VALUE_CURVATURE2]
+ || quantity_data[GWY_GRAIN_VALUE_CURVATURE_ANGLE1]
+ || quantity_data[GWY_GRAIN_VALUE_CURVATURE_ANGLE2]) {
+ gdouble *px = quantity_data[GWY_GRAIN_VALUE_CURVATURE_CENTER_X];
+ gdouble *py = quantity_data[GWY_GRAIN_VALUE_CURVATURE_CENTER_Y];
+ gdouble *pz = quantity_data[GWY_GRAIN_VALUE_CURVATURE_CENTER_Z];
+ gdouble *pk1 = quantity_data[GWY_GRAIN_VALUE_CURVATURE1];
+ gdouble *pk2 = quantity_data[GWY_GRAIN_VALUE_CURVATURE2];
+ gdouble *pa1 = quantity_data[GWY_GRAIN_VALUE_CURVATURE_ANGLE1];
+ gdouble *pa2 = quantity_data[GWY_GRAIN_VALUE_CURVATURE_ANGLE2];
+ gdouble mx = sqrt(qh/qv), my = sqrt(qv/qh);
+
+ for (gno = 1; gno <= ngrains; gno++) {
+ /* a:
+ * 0 [<1>
+ * 1 <x> <x²>
+ * 3 <y> <xy> <y²>
+ * 6 <x²> <x³> <x²y> <x⁴>
+ * 10 <xy> <x²y> <xy²> <x³y> <x²y²>
+ * 15 <y²> <xy²> <y³> <x²y²> <xy³> <y⁴>]
+ * b: [<z> <xz> <yz> <x²z> <xyz> <y²z>]
+ */
+ gdouble a[21], b[6];
+ gdouble *lin = linear + 5*gno, *quad = quadratic + 12*gno;
+ guint n = sizes[gno];
+
+ if (n >= 6) {
+ a[0] = n;
+ a[1] = a[3] = 0.0;
+ a[2] = a[6] = lin[0];
+ a[4] = a[10] = lin[1];
+ a[5] = a[15] = lin[2];
+ a[7] = quad[0];
+ a[8] = a[11] = quad[1];
+ a[9] = quad[4];
+ a[12] = a[16] = quad[2];
+ a[13] = quad[5];
+ a[14] = a[18] = quad[6];
+ a[17] = quad[3];
+ a[19] = quad[7];
+ a[20] = quad[8];
+ if (gwy_math_choleski_decompose(6, a)) {
+ b[0] = n*zvalue[gno];
+ b[1] = lin[3];
+ b[2] = lin[4];
+ b[3] = quad[9];
+ b[4] = quad[10];
+ b[5] = quad[11];
+ gwy_math_choleski_solve(6, a, b);
+ /* Get pixel aspect ratio right while keeping pixel size
+ * around 1. */
+ b[1] /= mx;
+ b[2] /= my;
+ b[3] /= mx*mx;
+ b[5] /= my*my;
+ }
+ else
+ n = 0;
+ }
+
+ /* Recycle a[] for the curvature parameters. */
+ if (n >= 6)
+ gwy_math_curvature(b, a+0, a+1, a+2, a+3, a+4, a+5, a+6);
+ else {
+ a[0] = a[1] = a[2] = a[4] = a[5] = 0.0;
+ a[3] = G_PI/2.0;
+ a[6] = zvalue[gno];
+ }
+ if (pk1)
+ pk1[gno] = a[0]/(qgeom*qgeom);
+ if (pk2)
+ pk2[gno] = a[1]/(qgeom*qgeom);
+ if (pa1)
+ pa1[gno] = a[2];
+ if (pa2)
+ pa2[gno] = a[3];
+ if (px)
+ px[gno] = qgeom*a[4] + xvalue[gno];
+ if (py)
+ py[gno] = qgeom*a[5] + yvalue[gno];
+ if (pz)
+ pz[gno] = a[6];
+ }
+ }
+
+ /* Copy quantity values to all other instances of the same quantity in
+ * @values. */
+ gwy_clear(seen, NQ);
+ for (i = 0; i < nquantities; i++) {
+ GwyGrainQuantity quantity = quantities[i];
+
+ if ((guint)quantity >= NQ || need_aux[quantity] == INVALID)
+ continue;
+
+ if (seen[quantity])
+ gwy_assign(values[i], quantity_data[quantity], ngrains + 1);
+ seen[quantity] = TRUE;
+ }
+
+ /* Finalize */
+ for (l = buffers; l; l = g_list_next(l))
+ g_free(l->data);
+ g_list_free(buffers);
+
+ return values;
+}
+
+/**
+ * gwy_grain_quantity_needs_same_units:
+ * @quantity: A grain quantity.
+ *
+ * Tests whether a grain quantity is defined only when lateral and value
+ * units match.
+ *
+ * Returns: %TRUE if @quantity is meaningless when lateral and value units
+ * differ, %FALSE if it is always defined.
+ *
+ * Since: 2.7
+ **/
+gboolean
+gwy_grain_quantity_needs_same_units(GwyGrainQuantity quantity)
+{
+ enum {
+ no_same_units = ((ONE << GWY_GRAIN_VALUE_PROJECTED_AREA)
+ | (ONE << GWY_GRAIN_VALUE_EQUIV_SQUARE_SIDE)
+ | (ONE << GWY_GRAIN_VALUE_EQUIV_DISC_RADIUS)
+ | (ONE << GWY_GRAIN_VALUE_MAXIMUM)
+ | (ONE << GWY_GRAIN_VALUE_MINIMUM)
+ | (ONE << GWY_GRAIN_VALUE_MEAN)
+ | (ONE << GWY_GRAIN_VALUE_MEDIAN)
+ | (ONE << GWY_GRAIN_VALUE_HALF_HEIGHT_AREA)
+ | (ONE << GWY_GRAIN_VALUE_FLAT_BOUNDARY_LENGTH)
+ | (ONE << GWY_GRAIN_VALUE_MINIMUM_BOUND_SIZE)
+ | (ONE << GWY_GRAIN_VALUE_MINIMUM_BOUND_ANGLE)
+ | (ONE << GWY_GRAIN_VALUE_MAXIMUM_BOUND_SIZE)
+ | (ONE << GWY_GRAIN_VALUE_MAXIMUM_BOUND_ANGLE)
+ | (ONE << GWY_GRAIN_VALUE_CENTER_X)
+ | (ONE << GWY_GRAIN_VALUE_CENTER_Y)
+ | (ONE << GWY_GRAIN_VALUE_VOLUME_0)
+ | (ONE << GWY_GRAIN_VALUE_VOLUME_MIN)
+ | (ONE << GWY_GRAIN_VALUE_VOLUME_LAPLACE)
+ | (ONE << GWY_GRAIN_VALUE_SLOPE_PHI)
+ | (ONE << GWY_GRAIN_VALUE_CURVATURE_CENTER_X)
+ | (ONE << GWY_GRAIN_VALUE_CURVATURE_CENTER_Y)
+ | (ONE << GWY_GRAIN_VALUE_CURVATURE_CENTER_Z)
+ | (ONE << GWY_GRAIN_VALUE_CURVATURE_ANGLE1)
+ | (ONE << GWY_GRAIN_VALUE_CURVATURE_ANGLE2)
+ | (ONE << GWY_GRAIN_VALUE_INSCRIBED_DISC_R)
+ | (ONE << GWY_GRAIN_VALUE_INSCRIBED_DISC_X)
+ | (ONE << GWY_GRAIN_VALUE_INSCRIBED_DISC_Y)
+ | (ONE << GWY_GRAIN_VALUE_CONVEX_HULL_AREA)
+ | (ONE << GWY_GRAIN_VALUE_CIRCUMCIRCLE_R)
+ | (ONE << GWY_GRAIN_VALUE_CIRCUMCIRCLE_X)
+ | (ONE << GWY_GRAIN_VALUE_CIRCUMCIRCLE_Y)
+ | (ONE << GWY_GRAIN_VALUE_MEAN_RADIUS)),
+ same_units = ((ONE << GWY_GRAIN_VALUE_SLOPE_THETA)
+ | (ONE << GWY_GRAIN_VALUE_SURFACE_AREA)
+ | (ONE << GWY_GRAIN_VALUE_CURVATURE1)
+ | (ONE << GWY_GRAIN_VALUE_CURVATURE2))
+ };
+
+ if ((ONE << quantity) & no_same_units)
+ return FALSE;
+ if ((ONE << quantity) & same_units)
+ return TRUE;
+ g_return_val_if_reached(FALSE);
+}
+
+/**
+ * gwy_grain_quantity_get_units:
+ * @quantity: A grain quantity.
+ * @siunitxy: Lateral SI unit of data.
+ * @siunitz: Value SI unit of data.
+ * @result: An SI unit to set to the units of @quantity.
+ * It can be %NULL, a new SI unit is created then and returned.
+ *
+ * Calculates the units of a grain quantity.
+ *
+ * Returns: When @result is %NULL, a newly creates SI unit that has to be
+ * dereferenced when no longer used later. Otherwise @result itself
+ * is simply returned, its reference count is NOT increased.
+ *
+ * Since: 2.7
+ **/
+GwySIUnit*
+gwy_grain_quantity_get_units(GwyGrainQuantity quantity,
+ GwySIUnit *siunitxy,
+ GwySIUnit *siunitz,
+ GwySIUnit *result)
+{
+ enum {
+ coord_units = ((ONE << GWY_GRAIN_VALUE_EQUIV_SQUARE_SIDE)
+ | (ONE << GWY_GRAIN_VALUE_EQUIV_DISC_RADIUS)
+ | (ONE << GWY_GRAIN_VALUE_FLAT_BOUNDARY_LENGTH)
+ | (ONE << GWY_GRAIN_VALUE_MINIMUM_BOUND_SIZE)
+ | (ONE << GWY_GRAIN_VALUE_MAXIMUM_BOUND_SIZE)
+ | (ONE << GWY_GRAIN_VALUE_CENTER_X)
+ | (ONE << GWY_GRAIN_VALUE_CENTER_Y)
+ | (ONE << GWY_GRAIN_VALUE_CURVATURE_CENTER_X)
+ | (ONE << GWY_GRAIN_VALUE_CURVATURE_CENTER_Y)
+ | (ONE << GWY_GRAIN_VALUE_INSCRIBED_DISC_R)
+ | (ONE << GWY_GRAIN_VALUE_INSCRIBED_DISC_X)
+ | (ONE << GWY_GRAIN_VALUE_INSCRIBED_DISC_Y)
+ | (ONE << GWY_GRAIN_VALUE_CIRCUMCIRCLE_R)
+ | (ONE << GWY_GRAIN_VALUE_CIRCUMCIRCLE_X)
+ | (ONE << GWY_GRAIN_VALUE_CIRCUMCIRCLE_Y)
+ | (ONE << GWY_GRAIN_VALUE_MEAN_RADIUS)),
+ icoord_units = ((ONE << GWY_GRAIN_VALUE_CURVATURE1)
+ | (ONE << GWY_GRAIN_VALUE_CURVATURE2)),
+ value_units = ((ONE << GWY_GRAIN_VALUE_MAXIMUM)
+ | (ONE << GWY_GRAIN_VALUE_MINIMUM)
+ | (ONE << GWY_GRAIN_VALUE_MEAN)
+ | (ONE << GWY_GRAIN_VALUE_MEDIAN)
+ | (ONE << GWY_GRAIN_VALUE_CURVATURE_CENTER_Z)),
+ area_units = ((ONE << GWY_GRAIN_VALUE_PROJECTED_AREA)
+ | (ONE << GWY_GRAIN_VALUE_HALF_HEIGHT_AREA)
+ | (ONE << GWY_GRAIN_VALUE_SURFACE_AREA)
+ | (ONE << GWY_GRAIN_VALUE_CONVEX_HULL_AREA)),
+ volume_units = ((ONE << GWY_GRAIN_VALUE_VOLUME_0)
+ | (ONE << GWY_GRAIN_VALUE_VOLUME_MIN)
+ | (ONE << GWY_GRAIN_VALUE_VOLUME_LAPLACE)),
+ angle_units = ((ONE << GWY_GRAIN_VALUE_MINIMUM_BOUND_ANGLE)
+ | (ONE << GWY_GRAIN_VALUE_MAXIMUM_BOUND_ANGLE)
+ | (ONE << GWY_GRAIN_VALUE_SLOPE_PHI)
+ | (ONE << GWY_GRAIN_VALUE_SLOPE_THETA)
+ | (ONE << GWY_GRAIN_VALUE_CURVATURE_ANGLE1)
+ | (ONE << GWY_GRAIN_VALUE_CURVATURE_ANGLE2))
+ };
+
+ g_return_val_if_fail(GWY_IS_SI_UNIT(siunitxy), result);
+ g_return_val_if_fail(GWY_IS_SI_UNIT(siunitz), result);
+
+ if ((ONE << quantity) & coord_units)
+ return gwy_si_unit_power(siunitxy, 1, result);
+ if ((ONE << quantity) & icoord_units)
+ return gwy_si_unit_power(siunitxy, -1, result);
+ if ((ONE << quantity) & value_units)
+ return gwy_si_unit_power(siunitz, 1, result);
+ if ((ONE << quantity) & area_units)
+ return gwy_si_unit_power(siunitxy, 2, result);
+ if ((ONE << quantity) & volume_units)
+ return gwy_si_unit_power_multiply(siunitxy, 2, siunitz, 1, result);
+ if ((ONE << quantity) & angle_units) {
+ if (!result)
+ return gwy_si_unit_new(NULL);
+ gwy_si_unit_set_from_string(result, NULL);
+ return result;
+ }
+
+ g_return_val_if_reached(result);
+}
+
+/* vim: set cin et ts=4 sw=4 cino=>1s,e0,n0,f0,{0,}0,^0,\:1s,=0,g1s,h0,t0,+1s,c3,(0,u0 : */
diff --git a/libprocess/grains-wshed.c b/libprocess/grains-wshed.c
new file mode 100644
index 0000000..623942b
--- /dev/null
+++ b/libprocess/grains-wshed.c
@@ -0,0 +1,1253 @@
+/*
+ * @(#) $Id: grains-wshed.c 20128 2017-08-01 11:19:59Z yeti-dn $
+ * Copyright (C) 2003-2017 David Necas (Yeti), Petr Klapetek.
+ * E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
+ *
+ * The quicksort algorithm was copied from GNU C library,
+ * Copyright (C) 1991, 1992, 1996, 1997, 1999 Free Software Foundation, Inc.
+ * See below.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "config.h"
+#include <string.h>
+#include <libgwyddion/gwymacros.h>
+#include <libgwyddion/gwymath.h>
+#include <libprocess/filters.h>
+#include <libprocess/stats.h>
+#include <libprocess/grains.h>
+#include "gwyprocessinternal.h"
+
+#define GRAIN_BARRIER G_MAXINT
+
+/* Watershed iterator */
+typedef struct {
+ GwyComputationState cs;
+ GwyDataField *data_field;
+ GwyDataField *grain_field;
+ gint locate_steps;
+ gint locate_thresh;
+ gdouble locate_dropsize;
+ gint wshed_steps;
+ gdouble wshed_dropsize;
+ gboolean prefilter;
+ gboolean below;
+ gint internal_i;
+ GwyDataField *min;
+ GwyDataField *water;
+ GwyDataField *mark_dfield;
+} GwyWatershedState;
+
+static gboolean step_by_one (GwyDataField *data_field,
+ gint *rcol,
+ gint *rrow);
+static void drop_step (GwyDataField *data_field,
+ GwyDataField *water_field,
+ gdouble dropsize);
+static void drop_minima (GwyDataField *water_field,
+ GwyDataField *min_field,
+ gint threshval);
+static void process_mask (GwyDataField *grain_field,
+ gint col,
+ gint row);
+static void wdrop_step (GwyDataField *data_field,
+ GwyDataField *min_field,
+ GwyDataField *water_field,
+ GwyDataField *grain_field,
+ gdouble dropsize);
+static void mark_grain_boundaries (GwyDataField *grain_field);
+static void waterpour_sort (const gdouble *d,
+ gint *idx,
+ gint n);
+
+
+/**
+ * gwy_data_field_grains_mark_watershed:
+ * @data_field: Data to be used for marking.
+ * @grain_field: Result of marking (mask).
+ * @locate_steps: Locating algorithm steps.
+ * @locate_thresh: Locating algorithm threshold.
+ * @locate_dropsize: Locating drop size.
+ * @wshed_steps: Watershed steps.
+ * @wshed_dropsize: Watershed drop size.
+ * @prefilter: Use prefiltering.
+ * @below: If %TRUE, valleys are marked, otherwise mountains are marked.
+ *
+ * Performs watershed algorithm.
+ **/
+void
+gwy_data_field_grains_mark_watershed(GwyDataField *data_field,
+ GwyDataField *grain_field,
+ gint locate_steps,
+ gint locate_thresh,
+ gdouble locate_dropsize,
+ gint wshed_steps,
+ gdouble wshed_dropsize,
+ gboolean prefilter,
+ gboolean below)
+{
+ GwyDataField *min, *water, *mark_dfield;
+ gint xres, yres, i;
+
+ g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
+ g_return_if_fail(GWY_IS_DATA_FIELD(grain_field));
+
+ xres = data_field->xres;
+ yres = data_field->yres;
+
+ min = gwy_data_field_new_alike(data_field, TRUE);
+ water = gwy_data_field_new_alike(data_field, TRUE);
+ mark_dfield = gwy_data_field_duplicate(data_field);
+ if (below)
+ gwy_data_field_multiply(mark_dfield, -1.0);
+ if (prefilter)
+ gwy_data_field_filter_median(mark_dfield, 6);
+
+ gwy_data_field_resample(grain_field, xres, yres, GWY_INTERPOLATION_NONE);
+ gwy_data_field_clear(grain_field);
+
+ /* odrop */
+ for (i = 0; i < locate_steps; i++)
+ drop_step(mark_dfield, water, locate_dropsize);
+ drop_minima(water, min, locate_thresh);
+
+ /* owatershed */
+ gwy_data_field_copy(data_field, mark_dfield, FALSE);
+ if (below)
+ gwy_data_field_multiply(mark_dfield, -1.0);
+ for (i = 0; i < wshed_steps; i++)
+ wdrop_step(mark_dfield, min, water, grain_field, wshed_dropsize);
+
+ mark_grain_boundaries(grain_field);
+
+ g_object_unref(min);
+ g_object_unref(water);
+ g_object_unref(mark_dfield);
+ gwy_data_field_invalidate(grain_field);
+}
+
+/**
+ * gwy_data_field_grains_watershed_init:
+ * @data_field: Data to be used for marking.
+ * @grain_field: Result of marking (mask).
+ * @locate_steps: Locating algorithm steps.
+ * @locate_thresh: Locating algorithm threshold.
+ * @locate_dropsize: Locating drop size.
+ * @wshed_steps: Watershed steps.
+ * @wshed_dropsize: Watershed drop size.
+ * @prefilter: Use prefiltering.
+ * @below: If %TRUE, valleys are marked, otherwise mountains are marked.
+ *
+ * Initializes the watershed algorithm.
+ *
+ * This iterator reports its state as #GwyWatershedStateType.
+ *
+ * Returns: A new watershed iterator.
+ **/
+GwyComputationState*
+gwy_data_field_grains_watershed_init(GwyDataField *data_field,
+ GwyDataField *grain_field,
+ gint locate_steps,
+ gint locate_thresh,
+ gdouble locate_dropsize,
+ gint wshed_steps,
+ gdouble wshed_dropsize,
+ gboolean prefilter,
+ gboolean below)
+{
+ GwyWatershedState *state;
+
+ g_return_val_if_fail(GWY_IS_DATA_FIELD(data_field), NULL);
+ g_return_val_if_fail(GWY_IS_DATA_FIELD(grain_field), NULL);
+
+ state = g_new0(GwyWatershedState, 1);
+
+ state->cs.state = GWY_WATERSHED_STATE_INIT;
+ state->cs.fraction = 0.0;
+ state->data_field = g_object_ref(data_field);
+ state->grain_field = g_object_ref(grain_field);
+ state->locate_steps = locate_steps;
+ state->locate_thresh = locate_thresh;
+ state->locate_dropsize = locate_dropsize;
+ state->wshed_steps = wshed_steps;
+ state->wshed_dropsize = wshed_dropsize;
+ state->prefilter = prefilter;
+ state->below = below;
+ state->internal_i = 0;
+
+ return (GwyComputationState*)state;
+}
+
+/**
+ * gwy_data_field_grains_watershed_iteration:
+ * @state: Watershed iterator.
+ *
+ * Performs one iteration of the watershed algorithm.
+ *
+ * Fields @state and progress @fraction of watershed state are updated
+ * (fraction is calculated for each phase individually). Once @state
+ * becomes %GWY_WATERSHED_STATE_FINISHED, the calculation is finised.
+ *
+ * A watershed iterator can be created with
+ * gwy_data_field_grains_watershed_init(). When iteration ends, either
+ * by finishing or being aborted, gwy_data_field_grains_watershed_finalize()
+ * must be called to release allocated resources.
+ **/
+void
+gwy_data_field_grains_watershed_iteration(GwyComputationState *cstate)
+{
+ GwyWatershedState *state = (GwyWatershedState*)cstate;
+
+ if (state->cs.state == GWY_WATERSHED_STATE_INIT) {
+ state->min = gwy_data_field_new_alike(state->data_field, TRUE);
+ state->water = gwy_data_field_new_alike(state->data_field, TRUE);
+ state->mark_dfield = gwy_data_field_duplicate(state->data_field);
+ if (state->below)
+ gwy_data_field_multiply(state->mark_dfield, -1.0);
+ if (state->prefilter)
+ gwy_data_field_filter_median(state->mark_dfield, 6);
+
+ gwy_data_field_resample(state->grain_field,
+ state->data_field->xres,
+ state->data_field->yres,
+ GWY_INTERPOLATION_NONE);
+ gwy_data_field_clear(state->grain_field);
+
+ state->cs.state = GWY_WATERSHED_STATE_LOCATE;
+ state->internal_i = 0;
+ state->cs.fraction = 0.0;
+ }
+ else if (state->cs.state == GWY_WATERSHED_STATE_LOCATE) {
+ if (state->internal_i < state->locate_steps) {
+ drop_step(state->mark_dfield, state->water, state->locate_dropsize);
+ state->internal_i += 1;
+ state->cs.fraction = (gdouble)state->internal_i/state->locate_steps;
+ }
+ else {
+ state->cs.state = GWY_WATERSHED_STATE_MIN;
+ state->internal_i = 0;
+ state->cs.fraction = 0.0;
+ }
+ }
+ else if (state->cs.state == GWY_WATERSHED_STATE_MIN) {
+ drop_minima(state->water, state->min, state->locate_thresh);
+ state->cs.state = GWY_WATERSHED_STATE_WATERSHED;
+ state->internal_i = 0;
+ state->cs.fraction = 0.0;
+ }
+ else if (state->cs.state == GWY_WATERSHED_STATE_WATERSHED) {
+ if (state->internal_i == 0) {
+ gwy_data_field_copy(state->data_field, state->mark_dfield, FALSE);
+ if (state->below)
+ gwy_data_field_multiply(state->mark_dfield, -1.0);
+ }
+ if (state->internal_i < state->wshed_steps) {
+ wdrop_step(state->mark_dfield, state->min, state->water,
+ state->grain_field, state->wshed_dropsize);
+ state->internal_i += 1;
+ state->cs.fraction = (gdouble)state->internal_i/state->wshed_steps;
+ }
+ else {
+ state->cs.state = GWY_WATERSHED_STATE_MARK;
+ state->internal_i = 0;
+ state->cs.fraction = 0.0;
+ }
+ }
+ else if (state->cs.state == GWY_WATERSHED_STATE_MARK) {
+ mark_grain_boundaries(state->grain_field);
+ state->cs.state = GWY_WATERSHED_STATE_FINISHED;
+ state->cs.fraction = 1.0;
+ }
+ else if (state->cs.state == GWY_WATERSHED_STATE_FINISHED)
+ return;
+
+ gwy_data_field_invalidate(state->grain_field);
+}
+
+/**
+ * gwy_data_field_grains_watershed_finalize:
+ * @state: Watershed iterator.
+ *
+ * Destroys a watershed iterator, freeing all resources.
+ **/
+void
+gwy_data_field_grains_watershed_finalize(GwyComputationState *cstate)
+{
+ GwyWatershedState *state = (GwyWatershedState*)cstate;
+
+ GWY_OBJECT_UNREF(state->min);
+ GWY_OBJECT_UNREF(state->water);
+ GWY_OBJECT_UNREF(state->mark_dfield);
+ GWY_OBJECT_UNREF(state->data_field);
+ GWY_OBJECT_UNREF(state->grain_field);
+ g_free(state);
+}
+
+void
+gwy_data_field_grains_splash_water(GwyDataField *data_field,
+ GwyDataField *water,
+ gint locate_steps,
+ gdouble locate_dropsize)
+{
+ GwyDataField *mark_dfield;
+ gint i;
+
+ g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
+
+ mark_dfield = gwy_data_field_duplicate(data_field);
+
+ /* odrop */
+ gwy_data_field_clear(water);
+ for (i = 0; i < locate_steps; i++)
+ drop_step(mark_dfield, water, locate_dropsize);
+
+ gwy_data_field_invalidate(water);
+ g_object_unref(mark_dfield);
+}
+
+static gboolean
+step_by_one(GwyDataField *data_field, gint *rcol, gint *rrow)
+{
+ gint xres, yres;
+ gdouble a, b, c, d, v;
+
+ xres = data_field->xres;
+ yres = data_field->yres;
+
+ if (*rcol < (xres - 1))
+ a = data_field->data[*rcol + 1 + xres*(*rrow)];
+ else
+ a = -G_MAXDOUBLE;
+
+ if (*rcol > 0)
+ b = data_field->data[*rcol - 1 + xres*(*rrow)];
+ else
+ b = -G_MAXDOUBLE;
+
+ if (*rrow < (yres - 1))
+ c = data_field->data[*rcol + xres*(*rrow + 1)];
+ else
+ c = -G_MAXDOUBLE;
+
+ if (*rrow > 0)
+ d = data_field->data[*rcol + xres*(*rrow - 1)];
+ else
+ d = -G_MAXDOUBLE;
+
+ v = data_field->data[(gint)(*rcol + xres*(*rrow))];
+
+ if (v >= a && v >= b && v >= c && v >= d) {
+ return TRUE;
+ }
+ else if (a >= v && a >= b && a >= c && a >= d) {
+ *rcol += 1;
+ return FALSE;
+ }
+ else if (b >= v && b >= a && b >= c && b >= d) {
+ *rcol -= 1;
+ return FALSE;
+ }
+ else if (c >= v && c >= b && c >= a && c >= d) {
+ *rrow += 1;
+ return FALSE;
+ }
+ else {
+ *rrow -= 1;
+ return FALSE;
+ }
+
+ return FALSE;
+}
+
+static void
+drop_step(GwyDataField *data_field, GwyDataField *water_field, gdouble dropsize)
+{
+ gint xres, yres, i;
+ gint col, row;
+ gboolean retval;
+
+ xres = data_field->xres;
+ yres = data_field->yres;
+
+ for (i = 0; i < xres*yres; i++) {
+ row = (gint)floor((gdouble)i/(gdouble)xres);
+ col = i - xres*row;
+ if (col == 0 || row == 0 || col == (xres - 1) || row == (yres - 1))
+ continue;
+
+ do {
+ retval = step_by_one(data_field, &col, &row);
+ } while (!retval);
+
+ water_field->data[col + xres*row] += 1;
+ data_field->data[col + xres*row] -= dropsize;
+
+ }
+ gwy_data_field_invalidate(water_field);
+ gwy_data_field_invalidate(data_field);
+}
+
+static void
+drop_minima(GwyDataField *water_field, GwyDataField *min_field, gint threshval)
+{
+ gint xres, yres, i, j, ngrains;
+ gint *grain_maxima, *grain_size;
+ gdouble *data;
+ gint *grains;
+
+ xres = water_field->xres;
+ yres = water_field->yres;
+ data = water_field->data;
+
+ grains = g_new0(gint, xres*yres);
+ ngrains = gwy_data_field_number_grains(water_field, grains);
+ grain_size = g_new0(gint, ngrains + 1);
+ grain_maxima = g_new(gint, ngrains + 1);
+ for (i = 1; i <= ngrains; i++)
+ grain_maxima[i] = -1;
+
+ /* sum grain sizes and find maxima */
+ for (i = 0; i < xres*yres; i++) {
+ j = grains[i];
+ if (!j)
+ continue;
+
+ grain_size[j]++;
+ if (grain_maxima[j] < 0
+ || data[grain_maxima[j]] < data[i])
+ grain_maxima[j] = i;
+ }
+ g_free(grains);
+
+ /* mark maxima */
+ for (i = 1; i <= ngrains; i++) {
+ if (grain_size[i] <= threshval)
+ continue;
+
+ min_field->data[grain_maxima[i]] = i;
+ }
+
+ g_free(grain_maxima);
+ g_free(grain_size);
+}
+
+static void
+process_mask(GwyDataField *grain_field, gint col, gint row)
+{
+ gint xres, yres, ival[4], val, i;
+ gboolean stat;
+ gdouble *data;
+
+ xres = grain_field->xres;
+ yres = grain_field->yres;
+ data = grain_field->data;
+
+ if (col == 0 || row == 0 || col == (xres - 1) || row == (yres - 1)) {
+ data[col + xres*row] = -1;
+ return;
+ }
+
+ /*if this is grain or boundary, keep it */
+ if (data[col + xres*row] != 0)
+ return;
+
+ /*if there is nothing around, do nothing */
+ if ((fabs(data[col + 1 + xres*row]) + fabs(data[col - 1 + xres*row])
+ + fabs(data[col + xres*(row + 1)]) + fabs(data[col + xres*(row - 1)]))
+ == 0)
+ return;
+
+ /*now count the grain values around */
+ ival[0] = data[col - 1 + xres*row];
+ ival[1] = data[col + xres*(row - 1)];
+ ival[2] = data[col + 1 + xres*row];
+ ival[3] = data[col + xres*(row + 1)];
+
+ val = 0;
+ stat = FALSE;
+ for (i = 0; i < 4; i++) {
+ if (val > 0 && ival[i] > 0 && ival[i] != val) {
+ /*if some value already was there and the now one is different */
+ stat = TRUE;
+ break;
+ }
+ else {
+ /*ifthere is some value */
+ if (ival[i] > 0) {
+ val = ival[i];
+ }
+ }
+ }
+
+ /*it will be boundary or grain */
+ data[col + xres*row] = stat ? -1 : val;
+}
+
+static void
+wdrop_step(GwyDataField *data_field, GwyDataField *min_field,
+ GwyDataField *water_field, GwyDataField *grain_field,
+ gdouble dropsize)
+{
+ gint xres, yres, vcol, vrow, col, row, grain;
+ gboolean retval;
+
+ xres = data_field->xres;
+ yres = data_field->yres;
+
+ grain = 0;
+ for (col = 0; col < xres; col++) {
+ for (row = 0; row < yres; row++) {
+ if (min_field->data[col + xres*row] > 0)
+ grain_field->data[col + xres*row] = grain++;
+ }
+ }
+ for (col = 1; col < xres - 1; col++) {
+ for (row = 1; row < yres - 1; row++) {
+
+ vcol = col;
+ vrow = row;
+ do {
+ retval = step_by_one(data_field, &vcol, &vrow);
+ } while (!retval);
+
+ /*now, distinguish what to change at point vi, vj */
+ process_mask(grain_field, vcol, vrow);
+ water_field->data[vcol + xres*(vrow)] += 1;
+ data_field->data[vcol + xres*(vrow)] -= dropsize;
+
+ }
+ }
+}
+
+static void
+mark_grain_boundaries(GwyDataField *grain_field)
+{
+ gint xres, yres, col, row;
+ GwyDataField *buffer;
+ gdouble *data;
+
+ xres = grain_field->xres;
+ yres = grain_field->yres;
+ /* FIXME: it is not necessary to duplicate complete data field to check
+ * a few boundary pixels. */
+ buffer = gwy_data_field_duplicate(grain_field);
+ data = buffer->data;
+
+ for (col = 1; col < xres - 1; col++) {
+ for (row = 1; row < yres - 1; row++) {
+ if (data[col + xres*row] != data[col + 1 + xres*row]
+ || data[col + xres*row] != data[col + xres*(row + 1)])
+ grain_field->data[col + xres*row] = 0;
+ }
+ }
+ g_object_unref(buffer);
+}
+
+static gint
+waterpour_decide(const gint *assigned, gint xres, gint yres, gint km)
+{
+ gint i = km/xres, j = km % xres;
+ gint idu = (i ? assigned[km-xres] : GRAIN_BARRIER),
+ idl = (j ? assigned[km-1] : GRAIN_BARRIER),
+ idr = (j < xres-1 ? assigned[km+1] : GRAIN_BARRIER),
+ idd = (i < yres-1 ? assigned[km+xres] : GRAIN_BARRIER);
+
+ if (idu == GRAIN_BARRIER || idu == 0) {
+ if (idl == GRAIN_BARRIER || idl == 0) {
+ if (idr == GRAIN_BARRIER || idr == 0) {
+ if (idd == GRAIN_BARRIER || idd == 0)
+ return 0;
+ return idd;
+ }
+ if (idd == GRAIN_BARRIER || idd == 0|| idd == idr)
+ return idr;
+ return GRAIN_BARRIER;
+ }
+ if (idr == GRAIN_BARRIER || idr == 0 || idr == idl) {
+ if (idd == GRAIN_BARRIER || idd == 0|| idd == idl)
+ return idl;
+ }
+ return GRAIN_BARRIER;
+ }
+ if (idl == GRAIN_BARRIER || idl == 0 || idl == idu) {
+ if (idr == GRAIN_BARRIER || idr == 0 || idr == idu) {
+ if (idd == GRAIN_BARRIER || idd == 0 || idd == idu)
+ return idu;
+ }
+ }
+ return GRAIN_BARRIER;
+}
+
+static gint
+mark_one_grain(const gdouble *d, gint *assigned,
+ gint xres, gint yres,
+ gint km, gint gno,
+ IntList *inqueue, IntList *outqueue)
+{
+ gint m, i, j, count = 1;
+ gdouble z = d[km];
+
+ inqueue->len = 0;
+ int_list_add(inqueue, km);
+ assigned[km] = gno;
+
+ while (inqueue->len) {
+ outqueue->len = 0;
+ for (m = 0; m < inqueue->len; m++) {
+ km = inqueue->data[m];
+ i = km/xres;
+ j = km % xres;
+
+ if (i > 0 && !assigned[km-xres] && d[km-xres] == z)
+ int_list_add(outqueue, km-xres);
+ if (j > 0 && !assigned[km-1] && d[km-1] == z)
+ int_list_add(outqueue, km-1);
+ if (j < xres-1 && !assigned[km+1] && d[km+1] == z)
+ int_list_add(outqueue, km+1);
+ if (i < yres-1 && !assigned[km+xres] && d[km+xres] == z)
+ int_list_add(outqueue, km+xres);
+ }
+
+ inqueue->len = 0;
+ for (m = 0; m < outqueue->len; m++) {
+ km = outqueue->data[m];
+ if (!assigned[km]) {
+ assigned[km] = gno;
+ int_list_add(inqueue, km);
+ count++;
+ }
+ }
+ }
+
+ return count;
+}
+
+static void
+fix_grain_numbers(gint *grains, gint *buf, gint n)
+{
+ gint gno = 0, k;
+
+ for (k = 0; k < n; k++) {
+ gint gnok = grains[k];
+ if (gnok && !buf[gnok]) {
+ buf[gnok] = ++gno;
+ }
+ }
+ for (k = 0; k < n; k++)
+ grains[k] = buf[grains[k]];
+}
+
+/**
+ * gwy_data_field_waterpour:
+ * @data_field: A data field to segmentate.
+ * @result: Data field that will be filled with the resulting mask. It will be
+ * resized to the dimensions of @data_field and its properties set
+ * accordingly.
+ * @grains: Optionally, an array with the same number of items as @data_field.
+ * If non-%NULL, it will be filled with grain numbers in the same
+ * manner as gwy_data_field_number_grains(). Pass %NULL to ignore.
+ *
+ * Performs the classical Vincent watershed segmentation of a data field.
+ *
+ * The segmentation always results in the entire field being masked with the
+ * exception of thin (8-connectivity) lines separating the segments (grains).
+ *
+ * Compared to gwy_data_field_grains_mark_watershed(), this algorithm is very
+ * fast. However, when used alone, it typically results in a serious
+ * oversegmentation as each local minimum gives raise to a grain. Furthermore,
+ * the full segmentation means that also pixels which would be considered
+ * outside any grain in the topographical sense will be assigned to some
+ * catchment basin. Therefore, pre- or postprocessing is usually necessary,
+ * using the gradient image or a more sophisticated method.
+ *
+ * The function does not assign pixels with value %HUGE_VAL or larger to any
+ * segment. This can be used to pre-mark certain areas explicitly as
+ * boundaries.
+ *
+ * Since the algorithm numbers the grains as a side effect, you can pass a
+ * @grains array and get the grain numbers immediatelly, avoiding the
+ * relatively (although not drastically) expensive
+ * gwy_data_field_number_grains() call.
+ *
+ * Returns: The number of segments (grains) in the result, excluding the
+ * separators, i.e. the same convention as in
+ * gwy_data_field_number_grains() is used.
+ *
+ * Since: 2.37
+ **/
+gint
+gwy_data_field_waterpour(GwyDataField *data_field,
+ GwyDataField *result,
+ gint *grains)
+{
+ IntList *flatqueue, *fillqueue;
+ gint xres, yres, n, k, kq, gno;
+ gint *queue, *assigned;
+ const gdouble *d;
+ gdouble *rd;
+
+ g_return_val_if_fail(GWY_IS_DATA_FIELD(data_field), 0);
+ g_return_val_if_fail(GWY_IS_DATA_FIELD(result), 0);
+
+ xres = data_field->xres;
+ yres = data_field->yres;
+ n = xres*yres;
+ gwy_data_field_resample(result, xres, yres, GWY_INTERPOLATION_NONE);
+
+ queue = g_new(gint, n);
+ for (k = 0; k < n; k++)
+ queue[k] = k;
+
+ d = data_field->data;
+ waterpour_sort(d, queue, n);
+
+ assigned = grains ? grains : g_new0(gint, n);
+ flatqueue = int_list_new(0);
+ fillqueue = int_list_new(0);
+ kq = gno = 0;
+ while (kq < n) {
+ gint len = 1, todo, um;
+ gdouble z;
+
+ k = queue[kq];
+ z = d[k];
+ if (z >= HUGE_VAL)
+ break;
+
+ while (kq + len < n && d[queue[kq + len]] == z)
+ len++;
+
+ todo = len;
+ while (todo) {
+ gint m;
+
+ um = GRAIN_BARRIER;
+ flatqueue->len = 0;
+ for (m = 0; m < len; m++) {
+ gint km = queue[kq + m];
+ gint id = assigned[km];
+ if (id)
+ continue;
+
+ if ((id = waterpour_decide(assigned, xres, yres, km))) {
+ /* Must postpone the grain number assignment. There may
+ * be conflicts later so only queue the position; we have
+ * to waterpour_decide() again. */
+ int_list_add(flatqueue, km);
+ }
+ else if (um == GRAIN_BARRIER)
+ um = m;
+ }
+
+ if (flatqueue->len) {
+ /* We have some modifications to commit. */
+ for (m = 0; m < flatqueue->len; m++) {
+ gint km = flatqueue->data[m];
+ gint id = waterpour_decide(assigned, xres, yres, km);
+ g_assert(id);
+ assigned[km] = id;
+ }
+ todo -= flatqueue->len;
+ }
+ else {
+ /* We do not have any modifications. All unassigned pixels
+ * of this height belong to new grains. */
+ break;
+ }
+ }
+
+ /* Create new grains from remaining pixels. */
+ while (todo) {
+ gint km = GRAIN_BARRIER;
+ while (um < len) {
+ k = queue[kq + um];
+ um++;
+ if (!assigned[k]) {
+ km = k;
+ break;
+ }
+ }
+ g_assert(km != GRAIN_BARRIER);
+ todo -= mark_one_grain(d, assigned, xres, yres,
+ km, ++gno, flatqueue, fillqueue);
+ }
+
+ kq += len;
+ }
+
+ while (kq < n) {
+ k = queue[kq++];
+ assigned[k] = GRAIN_BARRIER;
+ }
+
+ rd = result->data;
+ for (k = 0; k < n; k++) {
+ gint gnok = assigned[k];
+ gnok = (gnok == GRAIN_BARRIER) ? 0 : gnok;
+ assigned[k] = gnok;
+ rd[k] = !!gnok;
+ }
+
+ /* The grain numbering differs from gwy_data_field_number_grains() which
+ * performs the numbering from top left to bottom right. Since we
+ * guarantee stable grain numbers, renumber the grains to match that.
+ * Recycle @queue as a scratch buffer. */
+ if (grains) {
+ gwy_clear(queue, gno+1);
+ fix_grain_numbers(grains, queue, n);
+ }
+
+ int_list_free(fillqueue);
+ int_list_free(flatqueue);
+ g_free(queue);
+ if (!grains)
+ g_free(assigned);
+
+ result->xreal = data_field->xreal;
+ result->yreal = data_field->yreal;
+ result->xoff = data_field->xoff;
+ result->yoff = data_field->yoff;
+
+ _gwy_assign_si_unit(data_field->si_unit_xy, &result->si_unit_xy);
+ if (result->si_unit_z)
+ gwy_si_unit_set_from_string(result->si_unit_z, NULL);
+
+ gwy_data_field_invalidate(result);
+
+ return gno;
+}
+
+/* Mark sharp maxima with 2, known non-maxima with 1. */
+static guint
+mark_maxima(GwyDataField *field,
+ guint *types)
+{
+ guint xres = field->xres, yres = field->yres;
+ const gdouble *d = field->data;
+ guint i, j, k = 0, unmarked = xres*yres;
+
+ for (i = 0; i < yres; i++) {
+ for (j = 0; j < xres; j++, k++) {
+ /* Mark non-maxima. */
+ if ((i && d[k] < d[k-xres])
+ || (j && d[k] < d[k-1])
+ || (j < xres-1 && d[k] < d[k+1])
+ || (i < yres-1 && d[k] < d[k+xres])) {
+ types[k] = 1;
+ unmarked--;
+ }
+ /* Mark maxima. */
+ else if ((!i || d[k] > d[k-xres])
+ && (!j || d[k] > d[k-1])
+ && (j == xres-1 || d[k] > d[k+1])
+ && (i == yres-1 || d[k] > d[k+xres])) {
+ types[k] = 2;
+ unmarked--;
+ }
+ }
+ }
+
+ return unmarked;
+}
+
+/* Mark sharp minima with 2, known non-minima with 1. */
+static guint
+mark_minima(GwyDataField *field,
+ guint *types)
+{
+ guint xres = field->xres, yres = field->yres;
+ const gdouble *d = field->data;
+ guint i, j, k = 0, unmarked = xres*yres;
+
+ for (i = 0; i < yres; i++) {
+ for (j = 0; j < xres; j++, k++) {
+ /* Mark non-minima. */
+ if ((i && d[k] > d[k-xres])
+ || (j && d[k] > d[k-1])
+ || (j < xres-1 && d[k] > d[k+1])
+ || (i < yres-1 && d[k] > d[k+xres])) {
+ types[k] = 1;
+ unmarked--;
+ }
+ /* Mark minima. */
+ else if ((!i || d[k] < d[k-xres])
+ && (!j || d[k] < d[k-1])
+ && (j == xres-1 || d[k] < d[k+1])
+ && (i == yres-1 || d[k] < d[k+xres])) {
+ types[k] = 2;
+ unmarked--;
+ }
+ }
+ }
+
+ return unmarked;
+}
+
+/* Propagate non-maxima type to all pixels of the same value. Or minima. This
+ * alogorithm no longer depends on how the states was marked, it just
+ * propagates the 1 state though identical values. */
+static void
+propagate_non_extrema_marking(guint *types, const gdouble *d,
+ guint xres, guint yres)
+{
+ IntList *inqueue = int_list_new(16);
+ IntList *outqueue = int_list_new(16);
+ guint i, j, m, k = 0;
+
+ for (i = 0; i < yres; i++) {
+ for (j = 0; j < xres; j++, k++) {
+ if (types[k])
+ continue;
+ /* If the value is equal to some neighbour which is a known
+ * non-maximum then this pixel is also non-maximum. (If the
+ * neighbour is a known maximum this pixel cannot be unknown.) */
+ if ((i && types[k-xres] && d[k] == d[k-xres])
+ || (j && types[k-1] && d[k] == d[k-1])
+ || (j < xres-1 && types[k+1] && d[k] == d[k+1])
+ || (i < yres-1 && types[k+xres] && d[k] == d[k+xres])) {
+ types[k] = 1;
+ int_list_add(outqueue, k);
+ }
+ }
+ }
+ GWY_SWAP(IntList*, inqueue, outqueue);
+
+ while (inqueue->len) {
+ for (m = 0; m < inqueue->len; m++) {
+ k = inqueue->data[m];
+ i = k/xres;
+ j = k % xres;
+
+ /* Propagate the non-maximum type to all still unknown
+ * neighbours. Since we set them to known immediately, double
+ * queuing is avoided. */
+ if (i && !types[k-xres]) {
+ types[k-xres] = 1;
+ int_list_add(outqueue, k-xres);
+ }
+ if (j && !types[k-1]) {
+ types[k-1] = 1;
+ int_list_add(outqueue, k-1);
+ }
+ if (j < xres-1 && !types[k+1]) {
+ types[k+1] = 1;
+ int_list_add(outqueue, k+1);
+ }
+ if (i < yres-1 && !types[k+xres]) {
+ types[k+xres] = 1;
+ int_list_add(outqueue, k+xres);
+ }
+ }
+
+ inqueue->len = 0;
+ GWY_SWAP(IntList*, inqueue, outqueue);
+ }
+
+ int_list_free(inqueue);
+ int_list_free(outqueue);
+}
+
+/**
+ * gwy_data_field_mark_extrema:
+ * @dfield: A two-dimensional data field.
+ * @extrema: Target field for the extrema mask.
+ * @maxima: %TRUE to mark maxima, %FALSE to mark minima.
+ *
+ * Marks local maxima or minima in a two-dimensional field.
+ *
+ * Local (or regional) maximum is a contiguous set of pixels that have the same
+ * value and this value is sharply greater than the value of any pixel touching
+ * the set. A minimum is defined analogously. A field filled with a single
+ * value is considered to have neither minimum nor maximum.
+ *
+ * Since: 2.37
+ **/
+void
+gwy_data_field_mark_extrema(GwyDataField *dfield,
+ GwyDataField *extrema,
+ gboolean maxima)
+{
+ gdouble min, max;
+ guint xres, yres, unmarked, k;
+ guint *types;
+
+ g_return_if_fail(GWY_IS_DATA_FIELD(dfield));
+ g_return_if_fail(GWY_IS_DATA_FIELD(extrema));
+ xres = dfield->xres;
+ yres = dfield->yres;
+ g_return_if_fail(extrema->xres == xres);
+ g_return_if_fail(extrema->yres == yres);
+
+ gwy_data_field_clear(extrema);
+
+ gwy_data_field_get_min_max(dfield, &min, &max);
+ /* This takes care of 1×1 fields too. */
+ if (min == max)
+ return;
+
+ types = g_new0(guint, xres*yres);
+ unmarked = (maxima ? mark_maxima : mark_minima)(dfield, types);
+
+ if (unmarked)
+ propagate_non_extrema_marking(types, dfield->data, xres, yres);
+
+ /* Mark 1 as 0 (non-extremum); mark 0 and 2 as 1 (extremum). The remaining
+ 0s are exactly those flat areas which cannot be made non-maximum, i.e.
+ they must be maxima. Assume extrema are relatively sparse so prefer
+ fast iteration compared to fast mask bit setting. */
+ for (k = 0; k < xres*yres; k++) {
+ if (!(types[k] & 1))
+ extrema->data[k] = 1.0;
+ }
+
+ g_free(types);
+ gwy_data_field_invalidate(extrema);
+}
+
+/* Copyright (C) 1991, 1992, 1996, 1997, 1999 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Written by Douglas C. Schmidt (schmidt at ics.uci.edu).
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, write to the Free
+ Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ MA 02110-1301, USA */
+
+/* If you consider tuning this algorithm, you should consult first:
+ Engineering a sort function; Jon Bentley and M. Douglas McIlroy;
+ Software - Practice and Experience; Vol. 23 (11), 1249-1265, 1993. */
+
+typedef struct {
+ gdouble z;
+ guint k;
+} Pair;
+
+#define is_smaller_pair(a, b) \
+ ((a)->z < (b)->z || ((a)->z == (b)->z && (a)->k < (b)->k))
+
+#define PSWAP(x, y) GWY_SWAP(Pair, x, y)
+
+#define STACK_SIZE (CHAR_BIT * sizeof(gsize))
+#define PUSH(low, high) ((void) ((top->lo = (low)), (top->hi = (high)), ++top))
+#define POP(low, high) ((void) (--top, (low = top->lo), (high = top->hi)))
+#define STACK_NOT_EMPTY (stack < top)
+
+/* Order size using quicksort. This implementation incorporates
+ four optimizations discussed in Sedgewick:
+
+ 1. Non-recursive, using an explicit stack of pointer that store the
+ next array partition to sort. To save time, this maximum amount
+ of space required to store an array of SIZE_MAX is allocated on the
+ stack. Assuming a 32-bit (64 bit) integer for size_t, this needs
+ only 32 * sizeof(stack_node) == 256 bytes (for 64 bit: 1024 bytes).
+ Pretty cheap, actually.
+
+ 2. Chose the pivot element using a median-of-three decision tree.
+ This reduces the probability of selecting a bad pivot value and
+ eliminates certain extraneous comparisons.
+
+ 3. Only quicksorts TOTAL_ELEMS / MAX_THRESH partitions, leaving
+ insertion sort to order the MAX_THRESH items within each partition.
+ This is a big win, since insertion sort is faster for small, mostly
+ sorted array segments.
+
+ 4. The larger of the two sub-partitions is always pushed onto the
+ stack first, with the algorithm then concentrating on the
+ smaller partition. This *guarantees* no more than log(n)
+ stack size is needed (actually O(1) in this case)! */
+
+static void
+sort_pairs(Pair *array,
+ gsize n)
+{
+ /* Note: Specialization makes the insertion sort part relatively more
+ * efficient, after some benchmarking this seems be about the best value
+ * on Athlon 64. */
+ enum { MAX_THRESH = 20 };
+
+ // Stack node declarations used to store unfulfilled partition obligations.
+ typedef struct {
+ Pair *lo;
+ Pair *hi;
+ } stack_node;
+
+ if (n < 2)
+ /* Avoid lossage with unsigned arithmetic below. */
+ return;
+
+ if (n > MAX_THRESH) {
+ Pair *lo = array;
+ Pair *hi = lo + (n - 1);
+ stack_node stack[STACK_SIZE];
+ stack_node *top = stack + 1;
+
+ while (STACK_NOT_EMPTY) {
+ Pair *left_ptr;
+ Pair *right_ptr;
+
+ /* Select median value from among LO, MID, and HI. Rearrange
+ LO and HI so the three values are sorted. This lowers the
+ probability of picking a pathological pivot value and
+ skips a comparison for both the LEFT_PTR and RIGHT_PTR in
+ the while loops. */
+
+ Pair *mid = lo + ((hi - lo) >> 1);
+
+ if (is_smaller_pair(mid, lo))
+ PSWAP(*mid, *lo);
+ if (is_smaller_pair(hi, mid))
+ PSWAP(*mid, *hi);
+ else
+ goto jump_over;
+ if (is_smaller_pair(mid, lo))
+ PSWAP(*mid, *lo);
+
+jump_over:
+ left_ptr = lo + 1;
+ right_ptr = hi - 1;
+
+ /* Here's the famous ``collapse the walls'' section of quicksort.
+ Gotta like those tight inner loops! They are the main reason
+ that this algorithm runs much faster than others. */
+ do {
+ while (is_smaller_pair(left_ptr, mid))
+ left_ptr++;
+
+ while (is_smaller_pair(mid, right_ptr))
+ right_ptr--;
+
+ if (left_ptr < right_ptr) {
+ PSWAP(*left_ptr, *right_ptr);
+ if (mid == left_ptr)
+ mid = right_ptr;
+ else if (mid == right_ptr)
+ mid = left_ptr;
+ left_ptr++;
+ right_ptr--;
+ }
+ else if (left_ptr == right_ptr) {
+ left_ptr++;
+ right_ptr--;
+ break;
+ }
+ }
+ while (left_ptr <= right_ptr);
+
+ /* Set up pointers for next iteration. First determine whether
+ left and right partitions are below the threshold size. If so,
+ ignore one or both. Otherwise, push the larger partition's
+ bounds on the stack and continue sorting the smaller one. */
+
+ if ((gsize)(right_ptr - lo) <= MAX_THRESH) {
+ if ((gsize)(hi - left_ptr) <= MAX_THRESH)
+ /* Ignore both small partitions. */
+ POP(lo, hi);
+ else
+ /* Ignore small left partition. */
+ lo = left_ptr;
+ }
+ else if ((gsize)(hi - left_ptr) <= MAX_THRESH)
+ /* Ignore small right partition. */
+ hi = right_ptr;
+ else if ((right_ptr - lo) > (hi - left_ptr)) {
+ /* Push larger left partition indices. */
+ PUSH(lo, right_ptr);
+ lo = left_ptr;
+ }
+ else {
+ /* Push larger right partition indices. */
+ PUSH(left_ptr, hi);
+ hi = right_ptr;
+ }
+ }
+ }
+
+ /* Once the BASE_PTR array is partially sorted by quicksort the rest
+ is completely sorted using insertion sort, since this is efficient
+ for partitions below MAX_THRESH size. BASE_PTR points to the beginning
+ of the array to sort, and END_PTR points at the very last element in
+ the array (*not* one beyond it!). */
+
+ {
+ Pair *const end_ptr = array + (n - 1);
+ Pair *tmp_ptr = array;
+ Pair *thresh = MIN(end_ptr, array + MAX_THRESH);
+ Pair *run_ptr;
+
+ /* Find smallest element in first threshold and place it at the
+ array's beginning. This is the smallest array element,
+ and the operation speeds up insertion sort's inner loop. */
+
+ for (run_ptr = tmp_ptr + 1; run_ptr <= thresh; run_ptr++) {
+ if (is_smaller_pair(run_ptr, tmp_ptr))
+ tmp_ptr = run_ptr;
+ }
+
+ if (tmp_ptr != array)
+ PSWAP(*tmp_ptr, *array);
+
+ /* Insertion sort, running from left-hand-side up to right-hand-side.
+ */
+
+ run_ptr = array + 1;
+ while (++run_ptr <= end_ptr) {
+ tmp_ptr = run_ptr - 1;
+ while (is_smaller_pair(run_ptr, tmp_ptr))
+ tmp_ptr--;
+
+ tmp_ptr++;
+ if (tmp_ptr != run_ptr) {
+ Pair *hi, *lo;
+ Pair d;
+
+ d = *run_ptr;
+ for (hi = lo = run_ptr; --lo >= tmp_ptr; hi = lo)
+ *hi = *lo;
+ *hi = d;
+ }
+ }
+ }
+}
+
+static void
+waterpour_sort(const gdouble *d, gint *idx, gint n)
+{
+ Pair *pairs = g_new(Pair, n);
+ gint k;
+
+ for (k = 0; k < n; k++)
+ pairs[k] = (Pair){ d[k], k };
+
+ sort_pairs(pairs, n);
+
+ for (k = 0; k < n; k++)
+ idx[k] = pairs[k].k;
+
+ g_free(pairs);
+}
+
+/* vim: set cin et ts=4 sw=4 cino=>1s,e0,n0,f0,{0,}0,^0,\:1s,=0,g1s,h0,t0,+1s,c3,(0,u0 : */
diff --git a/libprocess/grains.c b/libprocess/grains.c
index ac179c5..99440f6 100644
--- a/libprocess/grains.c
+++ b/libprocess/grains.c
@@ -1,15 +1,11 @@
/*
- * @(#) $Id: grains.c 19199 2016-11-07 20:03:54Z yeti-dn $
- * Copyright (C) 2003-2015 David Necas (Yeti), Petr Klapetek.
+ * @(#) $Id: grains.c 19698 2017-05-03 20:18:10Z yeti-dn $
+ * Copyright (C) 2003-2017 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
* Copyright (C) 2013 Brazilian Nanotechnology National Laboratory
* E-mail: Vinicius Barboza <vinicius.barboza at lnnano.cnpem.br>
*
- * The quicksort algorithm was copied from GNU C library,
- * Copyright (C) 1991, 1992, 1996, 1997, 1999 Free Software Foundation, Inc.
- * See below.
- *
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
@@ -26,7 +22,6 @@
* Boston, MA 02110-1301, USA.
*/
-#include "config.h"
#include <string.h>
#include <libgwyddion/gwymacros.h>
#include <libgwyddion/gwymath.h>
@@ -34,86 +29,14 @@
#include <libprocess/filters.h>
#include <libprocess/arithmetic.h>
#include <libprocess/stats.h>
-#include <libprocess/correct.h>
#include <libprocess/grains.h>
-
-#define ONE G_GUINT64_CONSTANT(1)
-#define GRAIN_BARRIER G_MAXINT
+#include "gwyprocessinternal.h"
enum {
FOREGROUND_FLAG = 1,
BACKGROUND_FLAG = 0,
};
-typedef struct {
- gint i;
- gint j;
-} GridPoint;
-
-typedef struct {
- guint size;
- guint len;
- GridPoint *points;
-} PixelQueue;
-
-typedef struct {
- gdouble xa;
- gdouble ya;
- gdouble xb;
- gdouble yb;
- gdouble r2;
-} Edge;
-
-typedef struct {
- guint size;
- guint len;
- Edge *edges;
-} EdgeQueue;
-
-typedef struct {
- gdouble x;
- gdouble y;
- gdouble R2;
- guint size; /* For candidate sorting. */
-} InscribedDisc;
-
-typedef struct {
- gdouble distance;
- guint i;
- guint j;
-} DistantPoint;
-
-/* Watershed iterator */
-typedef struct {
- GwyComputationState cs;
- GwyDataField *data_field;
- GwyDataField *grain_field;
- gint locate_steps;
- gint locate_thresh;
- gdouble locate_dropsize;
- gint wshed_steps;
- gdouble wshed_dropsize;
- gboolean prefilter;
- gboolean below;
- gint internal_i;
- GwyDataField *min;
- GwyDataField *water;
- GwyDataField *mark_dfield;
-} GwyWatershedState;
-
-typedef gboolean (*ErodeFunc)(guint *grain,
- gint width, gint height,
- guint id,
- const PixelQueue *inqueue,
- PixelQueue *outqueue);
-
-static guint simple_dist_trans (gint *grain,
- guint width,
- guint height,
- gboolean from_border,
- GwyDistanceTransformType dtype,
- PixelQueue *inqueue,
- PixelQueue *outqueue);
static gdouble class_weight (GwyDataLine *hist,
gint t,
gint flag);
@@ -121,24 +44,6 @@ static gdouble class_mean (GwyDataField *dfield,
GwyDataLine *hist,
gint t,
gint flag);
-static gboolean step_by_one (GwyDataField *data_field,
- gint *rcol,
- gint *rrow);
-static void drop_step (GwyDataField *data_field,
- GwyDataField *water_field,
- gdouble dropsize);
-static void drop_minima (GwyDataField *water_field,
- GwyDataField *min_field,
- gint threshval);
-static void process_mask (GwyDataField *grain_field,
- gint col,
- gint row);
-static void wdrop_step (GwyDataField *data_field,
- GwyDataField *min_field,
- GwyDataField *water_field,
- GwyDataField *grain_field,
- gdouble dropsize);
-static void mark_grain_boundaries (GwyDataField *grain_field);
static gint* gwy_data_field_fill_grain (GwyDataField *data_field,
gint col,
gint row,
@@ -152,26 +57,6 @@ static gint gwy_data_field_fill_one_grain(gint xres,
gint grain_no,
gint *listv,
gint *listh);
-static void waterpour_sort (const gdouble *d,
- gint *idx,
- gint n);
-
-enum { NDIRECTIONS = 12 };
-
-static const gdouble shift_directions[NDIRECTIONS*2] = {
- 1.0, 0.0,
- 0.9914448613738104, 0.1305261922200516,
- 0.9659258262890683, 0.2588190451025207,
- 0.9238795325112867, 0.3826834323650898,
- 0.8660254037844387, 0.5,
- 0.7933533402912352, 0.6087614290087207,
- 0.7071067811865476, 0.7071067811865475,
- 0.6087614290087207, 0.7933533402912352,
- 0.5, 0.8660254037844386,
- 0.3826834323650898, 0.9238795325112867,
- 0.2588190451025207, 0.9659258262890683,
- 0.1305261922200517, 0.9914448613738104,
-};
/**
* gwy_data_field_grains_mark_height:
@@ -432,228 +317,6 @@ class_mean(GwyDataField *dfield,
}
/**
- * gwy_data_field_grains_mark_watershed:
- * @data_field: Data to be used for marking.
- * @grain_field: Result of marking (mask).
- * @locate_steps: Locating algorithm steps.
- * @locate_thresh: Locating algorithm threshold.
- * @locate_dropsize: Locating drop size.
- * @wshed_steps: Watershed steps.
- * @wshed_dropsize: Watershed drop size.
- * @prefilter: Use prefiltering.
- * @below: If %TRUE, valleys are marked, otherwise mountains are marked.
- *
- * Performs watershed algorithm.
- **/
-void
-gwy_data_field_grains_mark_watershed(GwyDataField *data_field,
- GwyDataField *grain_field,
- gint locate_steps,
- gint locate_thresh,
- gdouble locate_dropsize,
- gint wshed_steps,
- gdouble wshed_dropsize,
- gboolean prefilter,
- gboolean below)
-{
- GwyDataField *min, *water, *mark_dfield;
- gint xres, yres, i;
-
- g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
- g_return_if_fail(GWY_IS_DATA_FIELD(grain_field));
-
- xres = data_field->xres;
- yres = data_field->yres;
-
- min = gwy_data_field_new_alike(data_field, TRUE);
- water = gwy_data_field_new_alike(data_field, TRUE);
- mark_dfield = gwy_data_field_duplicate(data_field);
- if (below)
- gwy_data_field_multiply(mark_dfield, -1.0);
- if (prefilter)
- gwy_data_field_filter_median(mark_dfield, 6);
-
- gwy_data_field_resample(grain_field, xres, yres, GWY_INTERPOLATION_NONE);
- gwy_data_field_clear(grain_field);
-
- /* odrop */
- for (i = 0; i < locate_steps; i++)
- drop_step(mark_dfield, water, locate_dropsize);
- drop_minima(water, min, locate_thresh);
-
- /* owatershed */
- gwy_data_field_copy(data_field, mark_dfield, FALSE);
- if (below)
- gwy_data_field_multiply(mark_dfield, -1.0);
- for (i = 0; i < wshed_steps; i++)
- wdrop_step(mark_dfield, min, water, grain_field, wshed_dropsize);
-
- mark_grain_boundaries(grain_field);
-
- g_object_unref(min);
- g_object_unref(water);
- g_object_unref(mark_dfield);
- gwy_data_field_invalidate(grain_field);
-}
-
-/**
- * gwy_data_field_grains_watershed_init:
- * @data_field: Data to be used for marking.
- * @grain_field: Result of marking (mask).
- * @locate_steps: Locating algorithm steps.
- * @locate_thresh: Locating algorithm threshold.
- * @locate_dropsize: Locating drop size.
- * @wshed_steps: Watershed steps.
- * @wshed_dropsize: Watershed drop size.
- * @prefilter: Use prefiltering.
- * @below: If %TRUE, valleys are marked, otherwise mountains are marked.
- *
- * Initializes the watershed algorithm.
- *
- * This iterator reports its state as #GwyWatershedStateType.
- *
- * Returns: A new watershed iterator.
- **/
-GwyComputationState*
-gwy_data_field_grains_watershed_init(GwyDataField *data_field,
- GwyDataField *grain_field,
- gint locate_steps,
- gint locate_thresh,
- gdouble locate_dropsize,
- gint wshed_steps,
- gdouble wshed_dropsize,
- gboolean prefilter,
- gboolean below)
-{
- GwyWatershedState *state;
-
- g_return_val_if_fail(GWY_IS_DATA_FIELD(data_field), NULL);
- g_return_val_if_fail(GWY_IS_DATA_FIELD(grain_field), NULL);
-
- state = g_new0(GwyWatershedState, 1);
-
- state->cs.state = GWY_WATERSHED_STATE_INIT;
- state->cs.fraction = 0.0;
- state->data_field = g_object_ref(data_field);
- state->grain_field = g_object_ref(grain_field);
- state->locate_steps = locate_steps;
- state->locate_thresh = locate_thresh;
- state->locate_dropsize = locate_dropsize;
- state->wshed_steps = wshed_steps;
- state->wshed_dropsize = wshed_dropsize;
- state->prefilter = prefilter;
- state->below = below;
- state->internal_i = 0;
-
- return (GwyComputationState*)state;
-}
-
-/**
- * gwy_data_field_grains_watershed_iteration:
- * @state: Watershed iterator.
- *
- * Performs one iteration of the watershed algorithm.
- *
- * Fields @state and progress @fraction of watershed state are updated
- * (fraction is calculated for each phase individually). Once @state
- * becomes %GWY_WATERSHED_STATE_FINISHED, the calculation is finised.
- *
- * A watershed iterator can be created with
- * gwy_data_field_grains_watershed_init(). When iteration ends, either
- * by finishing or being aborted, gwy_data_field_grains_watershed_finalize()
- * must be called to release allocated resources.
- **/
-void
-gwy_data_field_grains_watershed_iteration(GwyComputationState *cstate)
-{
- GwyWatershedState *state = (GwyWatershedState*)cstate;
-
- if (state->cs.state == GWY_WATERSHED_STATE_INIT) {
- state->min = gwy_data_field_new_alike(state->data_field, TRUE);
- state->water = gwy_data_field_new_alike(state->data_field, TRUE);
- state->mark_dfield = gwy_data_field_duplicate(state->data_field);
- if (state->below)
- gwy_data_field_multiply(state->mark_dfield, -1.0);
- if (state->prefilter)
- gwy_data_field_filter_median(state->mark_dfield, 6);
-
- gwy_data_field_resample(state->grain_field,
- state->data_field->xres,
- state->data_field->yres,
- GWY_INTERPOLATION_NONE);
- gwy_data_field_clear(state->grain_field);
-
- state->cs.state = GWY_WATERSHED_STATE_LOCATE;
- state->internal_i = 0;
- state->cs.fraction = 0.0;
- }
- else if (state->cs.state == GWY_WATERSHED_STATE_LOCATE) {
- if (state->internal_i < state->locate_steps) {
- drop_step(state->mark_dfield, state->water, state->locate_dropsize);
- state->internal_i += 1;
- state->cs.fraction = (gdouble)state->internal_i/state->locate_steps;
- }
- else {
- state->cs.state = GWY_WATERSHED_STATE_MIN;
- state->internal_i = 0;
- state->cs.fraction = 0.0;
- }
- }
- else if (state->cs.state == GWY_WATERSHED_STATE_MIN) {
- drop_minima(state->water, state->min, state->locate_thresh);
- state->cs.state = GWY_WATERSHED_STATE_WATERSHED;
- state->internal_i = 0;
- state->cs.fraction = 0.0;
- }
- else if (state->cs.state == GWY_WATERSHED_STATE_WATERSHED) {
- if (state->internal_i == 0) {
- gwy_data_field_copy(state->data_field, state->mark_dfield, FALSE);
- if (state->below)
- gwy_data_field_multiply(state->mark_dfield, -1.0);
- }
- if (state->internal_i < state->wshed_steps) {
- wdrop_step(state->mark_dfield, state->min, state->water,
- state->grain_field, state->wshed_dropsize);
- state->internal_i += 1;
- state->cs.fraction = (gdouble)state->internal_i/state->wshed_steps;
- }
- else {
- state->cs.state = GWY_WATERSHED_STATE_MARK;
- state->internal_i = 0;
- state->cs.fraction = 0.0;
- }
- }
- else if (state->cs.state == GWY_WATERSHED_STATE_MARK) {
- mark_grain_boundaries(state->grain_field);
- state->cs.state = GWY_WATERSHED_STATE_FINISHED;
- state->cs.fraction = 1.0;
- }
- else if (state->cs.state == GWY_WATERSHED_STATE_FINISHED)
- return;
-
- gwy_data_field_invalidate(state->grain_field);
-}
-
-/**
- * gwy_data_field_grains_watershed_finalize:
- * @state: Watershed iterator.
- *
- * Destroys a watershed iterator, freeing all resources.
- **/
-void
-gwy_data_field_grains_watershed_finalize(GwyComputationState *cstate)
-{
- GwyWatershedState *state = (GwyWatershedState*)cstate;
-
- GWY_OBJECT_UNREF(state->min);
- GWY_OBJECT_UNREF(state->water);
- GWY_OBJECT_UNREF(state->mark_dfield);
- GWY_OBJECT_UNREF(state->data_field);
- GWY_OBJECT_UNREF(state->grain_field);
- g_free(state);
-}
-
-/**
* gwy_data_field_grains_remove_grain:
* @grain_field: Field of marked grains (mask).
* @col: Column inside a grain.
@@ -937,2618 +600,169 @@ gwy_data_field_grains_remove_touching_border(GwyDataField *grain_field)
}
/**
- * gwy_data_field_grains_get_distribution:
- * @data_field: Data field used for marking. For some quantities its values
- * are not used, but units and physical dimensions are always
- * taken from it.
- * @grain_field: Data field (mask) of marked grains. Note if you pass
- * non-%NULL @grains all grain information is taken from it and
- * @grain_field can be even %NULL then.
- * @distribution: Data line to store grain distribution to.
- * @grains: Grain numbers filled with gwy_data_field_number_grains() if you
- * have it, or %NULL (the function then finds grain numbers itself
- * which is not efficient for repeated use on the same grain field).
- * @ngrains: The number of grains as returned by
- * gwy_data_field_number_grains(). Ignored in @grains is %NULL.
- * @quantity: The quantity to calculate.
- * @nstats: The number of samples to take on the distribution function. If
- * nonpositive, a suitable resolution is determined automatically.
- *
- * Computes distribution of requested grain characteristics.
- *
- * Puts number of grains vs. grain value data into @distribution, units, scales
- * and offsets of @distribution are updated accordingly.
+ * gwy_data_field_grains_add:
+ * @grain_field: Field of marked grains (mask).
+ * @add_field: Field of marked grains (mask) to be added.
*
- * Note the @i-th bin is [@i*@dx+ at off,(@i+1)*@dx+ at off] so the central value
- * you probably want to use for plotting is (@i+0.5)*@dx+ at off (where @dx is
- * the @distribution data line pixel size, @off is its offset).
+ * Adds @add_field grains to @grain_field.
*
- * Returns: A data line with the distribution: @distribution itself if it was
- * not %NULL, otherwise a newly created #GwyDataLine caller must
- * destroy. If there are no grains, %NULL is returned and
- * @distribution is not changed.
+ * Note: This function is equivalent to
+ * |[
+ * gwy_data_field_max_of_fields(grain_field, grain_field, add_field);
+ * ]|
**/
-GwyDataLine*
-gwy_data_field_grains_get_distribution(GwyDataField *data_field,
- GwyDataField *grain_field,
- GwyDataLine *distribution,
- gint ngrains,
- const gint *grains,
- GwyGrainQuantity quantity,
- gint nstats)
-{
- GwyDataLine *values;
- gint *mygrains = NULL;
-
- g_return_val_if_fail(GWY_IS_DATA_FIELD(data_field), FALSE);
- g_return_val_if_fail(grains || GWY_IS_DATA_FIELD(grain_field), FALSE);
- g_return_val_if_fail(!grain_field
- || (grain_field->xres == data_field->xres
- && grain_field->yres == data_field->yres), FALSE);
- g_return_val_if_fail(!distribution || GWY_IS_DATA_LINE(distribution),
- FALSE);
-
- /* Calculate raw statistics */
- if (!grains) {
- grains = mygrains = g_new0(gint, grain_field->xres*grain_field->yres);
- ngrains = gwy_data_field_number_grains(grain_field, mygrains);
- }
- if (!ngrains) {
- g_free(mygrains);
- return NULL;
- }
-
- values = gwy_data_line_new(ngrains + 1, 1.0, FALSE);
- gwy_data_field_grains_get_values(data_field, values->data,
- ngrains, grains, quantity);
- g_free(mygrains);
-
- values->res--;
- values->data[0] = values->data[values->res];
-
- if (!distribution)
- distribution = gwy_data_line_new(1, 1.0, FALSE);
-
- gwy_data_line_distribution(values, distribution, 0.0, 0.0, FALSE, nstats);
-
- g_object_unref(values);
-
- return distribution;
-}
-
-/* See stats.c for description, this function calculates twice `contribution
- * of one corner' (the twice is to move multiplications from inner loops) */
-static inline gdouble
-square_area2w_1c(gdouble z1, gdouble z2, gdouble z4, gdouble c,
- gdouble x, gdouble y)
+void
+gwy_data_field_grains_add(GwyDataField *grain_field, GwyDataField *add_field)
{
- return sqrt(1.0 + (z1 - z2)*(z1 - z2)/x + (z1 + z2 - c)*(z1 + z2 - c)/y)
- + sqrt(1.0 + (z1 - z4)*(z1 - z4)/y + (z1 + z4 - c)*(z1 + z4 - c)/x);
+ gwy_data_field_max_of_fields(grain_field, grain_field, add_field);
}
/**
- * find_grain_convex_hull:
- * @xres: The number of columns in @grains.
- * @yres: The number of rows in @grains.
- * @grains: Grain numbers filled with gwy_data_field_number_grains().
- * @pos: Position of the top-left vertex of grain's convex hull.
- * @vertices: Array to fill with vertices.
- *
- * Finds vertices of a grain's convex hull.
- *
- * The grain is identified by @pos which must lie in a grain.
+ * gwy_data_field_grains_intersect:
+ * @grain_field: Field of marked grains (mask).
+ * @intersect_field: Field of marked grains (mask).
*
- * The positions are returned as indices to vertex grid. NB: The size of the
- * grid is (@xres + 1)*(@yres + 1), not @xres*@yres.
+ * Performs intersection betweet two grain fields,
+ * result is stored in @grain_field.
*
- * The method is a bit naive, some atan2() calculations could be easily saved.
+ * Note: This function is equivalent to
+ * |[
+ * gwy_data_field_min_of_fields(grain_field, grain_field, intersect_field);
+ * ]|
**/
-static void
-find_grain_convex_hull(gint xres, gint yres,
- const gint *grains,
- gint pos,
- GArray *vertices)
+void
+gwy_data_field_grains_intersect(GwyDataField *grain_field,
+ GwyDataField *intersect_field)
{
- enum { RIGHT = 0, DOWN, LEFT, UP } newdir, dir;
- const GridPoint *cur, *mid, *prev;
- GridPoint v;
- gdouble phi, phim;
- gint initpos, gno;
-
- g_return_if_fail(grains[pos]);
-
- g_array_set_size(vertices, 0);
- initpos = pos;
- gno = grains[pos];
- v.i = pos/xres;
- v.j = pos % xres;
- g_array_append_val(vertices, v);
- newdir = RIGHT;
-
- do {
- dir = newdir;
- switch (dir) {
- case RIGHT:
- v.j++;
- if (v.i > 0 && v.j < xres && grains[(v.i-1)*xres + v.j] == gno)
- newdir = UP;
- else if (v.j < xres && grains[v.i*xres + v.j] == gno)
- newdir = RIGHT;
- else
- newdir = DOWN;
- break;
-
- case DOWN:
- v.i++;
- if (v.j < xres && v.i < yres && grains[v.i*xres + v.j] == gno)
- newdir = RIGHT;
- else if (v.i < yres && grains[v.i*xres + v.j-1] == gno)
- newdir = DOWN;
- else
- newdir = LEFT;
- break;
-
- case LEFT:
- v.j--;
- if (v.i < yres && v.j > 0 && grains[v.i*xres + v.j-1] == gno)
- newdir = DOWN;
- else if (v.j > 0 && grains[(v.i-1)*xres + v.j-1] == gno)
- newdir = LEFT;
- else
- newdir = UP;
- break;
-
- case UP:
- v.i--;
- if (v.j > 0 && v.i > 0 && grains[(v.i-1)*xres + v.j-1] == gno)
- newdir = LEFT;
- else if (v.i > 0 && grains[(v.i-1)*xres + v.j] == gno)
- newdir = UP;
- else
- newdir = RIGHT;
- break;
-
- default:
- g_assert_not_reached();
- break;
- }
-
- /* When we turn right, the previous point is a potential vertex, and
- * it can also supersed previous vertices. */
- if (newdir == (dir + 1) % 4) {
- g_array_append_val(vertices, v);
- while (vertices->len > 2) {
- cur = &g_array_index(vertices, GridPoint, vertices->len-1);
- mid = &g_array_index(vertices, GridPoint, vertices->len-2);
- prev = &g_array_index(vertices, GridPoint, vertices->len-3);
- phi = atan2(cur->i - mid->i, cur->j - mid->j);
- phim = atan2(mid->i - prev->i, mid->j - prev->j);
- phi = fmod(phi - phim + 4.0*G_PI, 2.0*G_PI);
- /* This should be fairly save as (a) not real harm is done
- * when we have an occasional extra vertex (b) the greatest
- * possible angle is G_PI/2.0 */
- if (phi > 1e-12 && phi < G_PI)
- break;
-
- /* Get rid of mid, it is in a locally concave part */
- g_array_index(vertices, GridPoint, vertices->len-2) = *cur;
- g_array_set_size(vertices, vertices->len-1);
- }
- }
- } while (v.i*xres + v.j != initpos);
-
- /* The last point is duplicated first point */
- g_array_set_size(vertices, vertices->len-1);
+ gwy_data_field_min_of_fields(grain_field, grain_field, intersect_field);
}
/**
- * grain_maximum_bound:
- * @vertices: Convex hull vertex list.
- * @qx: Scale (pixel size) in x-direction.
- * @qy: Scale (pixel size) in y-direction.
- * @vx: Location to store vector x component to.
- * @vy: Location to store vector y component to.
+ * gwy_data_field_grains_invert:
+ * @grain_field: Data field (mask) of marked grains.
*
- * Given a list of integer convex hull vertices, return the vector between
- * the two most distance vertices.
+ * Inverts a data field representing a mask.
+ *
+ * All non-positive values are transformed to 1.0. All positive values are
+ * transformed to 0.0.
*
- * FIXME: This is a blatantly naive O(n^2) algorithm.
+ * Since: 2.43
**/
-static void
-grain_maximum_bound(GArray *vertices,
- gdouble qx, gdouble qy,
- gdouble *vx, gdouble *vy)
+void
+gwy_data_field_grains_invert(GwyDataField *grain_field)
{
- const GridPoint *a, *x;
- gdouble vm, v, dx, dy;
- guint g1, g2;
-
- vm = -G_MAXDOUBLE;
- for (g1 = 0; g1 < vertices->len; g1++) {
- a = &g_array_index(vertices, GridPoint, g1);
- for (g2 = g1 + 1; g2 < vertices->len; g2++) {
- x = &g_array_index(vertices, GridPoint, g2);
- dx = qx*(x->j - a->j);
- dy = qy*(x->i - a->i);
- v = dx*dx + dy*dy;
- if (v > vm) {
- vm = v;
- *vx = dx;
- *vy = dy;
- }
- }
+ guint xres, yres, k;
+
+ g_return_if_fail(GWY_IS_DATA_FIELD(grain_field));
+ xres = grain_field->xres;
+ yres = grain_field->yres;
+ for (k = 0; k < xres*yres; k++) {
+ if (grain_field->data[k] > 0.0)
+ grain_field->data[k] = 0.0;
+ else
+ grain_field->data[k] = 1.0;
}
}
/**
- * grain_minimum_bound:
- * @vertices: Convex hull vertex list.
- * @qx: Scale (pixel size) in x-direction.
- * @qy: Scale (pixel size) in y-direction.
- * @vx: Location to store vector x component to.
- * @vy: Location to store vector y component to.
+ * gwy_data_field_grains_autocrop:
+ * @mask_field: Data field representing a mask.
+ * @symmetrically: %TRUE to remove borders symmetrically, i.e the same number
+ * of pixels from left and right, and also top and bottom.
+ * %FALSE to remove as many empty rows and columns as possible.
+ * @left: Location to store how many column were removed from the left, or
+ * %NULL.
+ * @right: Location to store how many column were removed from the right, or
+ * %NULL.
+ * @up: Location to store how many row were removed from the top, or %NULL.
+ * @down: Location to store how many row were removed from the bottom, or
+ * %NULL.
+ *
+ * Removes empty border rows and columns from a data field representing a mask.
+ *
+ * If there are border rows and columns filled completely with non-positive
+ * values the size of the data field is reduced, removing these rows. The
+ * parameter @symmetrically controls whether the size reduction is maximum
+ * possible or symmetrical.
+ *
+ * When there is no positive value in the field the field size is reduced to
+ * the smallest possible. This means 1x1 for @symmetrical being %FALSE and
+ * even original dimensions to 2 for @symmetrical being %TRUE.
*
- * Given a list of integer convex hull vertices, return the vector
- * corresponding to the minimum linear projection.
+ * Returns: %TRUE if the field size was reduced at all. Detailed information
+ * about the reduction can be obtained from @left, @right, @up and
+ * @down.
*
- * FIXME: This is a blatantly naive O(n^2) algorithm.
+ * Since: 2.43
**/
-static void
-grain_minimum_bound(GArray *vertices,
- gdouble qx, gdouble qy,
- gdouble *vx, gdouble *vy)
+gboolean
+gwy_data_field_grains_autocrop(GwyDataField *mask_field,
+ gboolean symmetrically,
+ guint *left,
+ guint *right,
+ guint *up,
+ guint *down)
{
- const GridPoint *a, *b, *x;
- gdouble vm, vm1, v, s, b2, bx, by, dx, dy, vx1, vy1;
- guint g1, g1p, g2;
-
- g_return_if_fail(vertices->len >= 3);
-
- vm = G_MAXDOUBLE;
- for (g1 = 0; g1 < vertices->len; g1++) {
- a = &g_array_index(vertices, GridPoint, g1);
- g1p = (g1 + 1) % vertices->len;
- b = &g_array_index(vertices, GridPoint, g1p);
- bx = qx*(b->j - a->j);
- by = qy*(b->i - a->i);
- b2 = bx*bx + by*by;
- vm1 = vx1 = vy1 = -G_MAXDOUBLE;
- for (g2 = 0; g2 < vertices->len; g2++) {
- x = &g_array_index(vertices, GridPoint, g2);
- dx = qx*(x->j - a->j);
- dy = qy*(x->i - a->i);
- s = (dx*bx + dy*by)/b2;
- dx -= s*bx;
- dy -= s*by;
- v = dx*dx + dy*dy;
- if (v > vm1) {
- vm1 = v;
- vx1 = dx;
- vy1 = dy;
+ gint xres, yres, i, j, firstcol, firstrow, lastcol, lastrow;
+ const gdouble *d;
+
+ g_return_val_if_fail(GWY_IS_DATA_FIELD(mask_field), FALSE);
+ xres = mask_field->xres;
+ yres = mask_field->yres;
+ firstcol = xres;
+ firstrow = yres;
+ lastcol = lastrow = -1;
+ d = mask_field->data;
+ for (i = 0; i < yres; i++) {
+ for (j = 0; j < xres; j++, d++) {
+ if (*d > 0.0) {
+ if (G_UNLIKELY(i < firstrow))
+ firstrow = i;
+ if (G_UNLIKELY(j < firstcol))
+ firstcol = j;
+ if (G_UNLIKELY(i > lastrow))
+ lastrow = i;
+ if (G_UNLIKELY(j > lastcol))
+ lastcol = j;
}
}
- if (vm1 < vm) {
- vm = vm1;
- *vx = vx1;
- *vy = vy1;
- }
}
-}
-
-static gdouble
-grain_convex_hull_area(GArray *vertices, gdouble dx, gdouble dy)
-{
- const GridPoint *a = &g_array_index(vertices, GridPoint, 0),
- *b = &g_array_index(vertices, GridPoint, 1),
- *c = &g_array_index(vertices, GridPoint, 2);
- gdouble s = 0.0;
- guint i;
-
- g_return_val_if_fail(vertices->len >= 4, 0.0);
-
- for (i = 2; i < vertices->len; i++) {
- gdouble bx = b->j - a->j, by = b->i - a->i,
- cx = c->j - a->j, cy = c->i - a->i;
- s += 0.5*(bx*cy - by*cx);
- b = c;
- c++;
+ gwy_debug("first (%d,%d) last (%d,%d)",
+ firstcol, firstrow, lastcol, lastrow);
+ if (firstcol > lastcol) {
+ g_assert(firstrow > lastrow);
+ /* Anticipate the reduction to 2 for even-sized dimensions. */
+ lastcol = (xres - 1)/2;
+ firstcol = xres - lastcol;
+ lastrow = (yres - 1)/2;
+ firstrow = yres - lastrow;
}
-
- return dx*dy*s;
-}
-
-static void
-grain_convex_hull_centre(GArray *vertices,
- gdouble dx, gdouble dy,
- gdouble *centrex, gdouble *centrey)
-{
- const GridPoint *a = &g_array_index(vertices, GridPoint, 0),
- *b = &g_array_index(vertices, GridPoint, 1),
- *c = &g_array_index(vertices, GridPoint, 2);
- gdouble s = 0.0, xc = 0.0, yc = 0.0;
- guint i;
-
- g_return_if_fail(vertices->len >= 4);
-
- for (i = 2; i < vertices->len; i++) {
- gdouble bx = b->j - a->j, by = b->i - a->i,
- cx = c->j - a->j, cy = c->i - a->i;
- gdouble s1 = bx*cy - by*cx;
- xc += s1*(a->j + b->j + c->j);
- yc += s1*(a->i + b->i + c->i);
- s += s1;
- b = c;
- c++;
+ if (symmetrically) {
+ firstcol = MIN(firstcol, xres-1 - lastcol);
+ lastcol = xres-1 - firstcol;
+ firstrow = MIN(firstrow, yres-1 - lastrow);
+ lastrow = yres-1 - firstrow;
}
- *centrex = xc*dx/(3.0*s);
- *centrey = yc*dy/(3.0*s);
-}
-
-static gdouble
-minimize_circle_radius(InscribedDisc *circle, GArray *vertices,
- gdouble dx, gdouble dy)
-{
- const GridPoint *v = (const GridPoint*)vertices->data;
- gdouble x = circle->x, y = circle->y, r2best = 0.0;
- guint n = vertices->len;
+ lastcol++;
+ lastrow++;
- while (n--) {
- gdouble deltax = dx*v->j - x, deltay = dy*v->i - y;
- gdouble r2 = deltax*deltax + deltay*deltay;
+ if (left)
+ *left = firstcol;
+ if (right)
+ *right = xres - lastcol;
+ if (up)
+ *up = firstrow;
+ if (down)
+ *down = yres - lastrow;
- if (r2 > r2best)
- r2best = r2;
+ gwy_debug("%dx%d at (%d,%d) of %dx%d",
+ lastcol-firstcol, lastrow-firstrow, firstcol, firstrow,
+ xres, yres);
+ if (firstcol == 0 && firstrow == 0 && lastcol == xres && lastrow == yres)
+ return FALSE;
- v++;
- }
-
- return r2best;
-}
-
-static void
-improve_circumscribed_circle(InscribedDisc *circle, GArray *vertices,
- gdouble dx, gdouble dy)
-{
- gdouble eps = 1.0, improvement, qgeom = sqrt(dx*dy);
-
- do {
- InscribedDisc best = *circle;
- guint i;
-
- improvement = 0.0;
- for (i = 0; i < NDIRECTIONS; i++) {
- InscribedDisc cand;
- gdouble sx = eps*qgeom*shift_directions[2*i],
- sy = eps*qgeom*shift_directions[2*i + 1];
-
- cand.size = circle->size;
-
- cand.x = circle->x + sx;
- cand.y = circle->y + sy;
- if ((cand.R2 = minimize_circle_radius(&cand, vertices, dx, dy))
- < best.R2)
- best = cand;
-
- cand.x = circle->x - sy;
- cand.y = circle->y + sx;
- if ((cand.R2 = minimize_circle_radius(&cand, vertices, dx, dy))
- < best.R2)
- best = cand;
-
- cand.x = circle->x - sx;
- cand.y = circle->y - sy;
- if ((cand.R2 = minimize_circle_radius(&cand, vertices, dx, dy))
- < best.R2)
- best = cand;
-
- cand.x = circle->x + sy;
- cand.y = circle->y - sx;
- if ((cand.R2 = minimize_circle_radius(&cand, vertices, dx, dy))
- < best.R2)
- best = cand;
- }
- if (best.R2 < circle->R2) {
- improvement = (best.R2 - circle->R2)/(dx*dy);
- *circle = best;
- }
- else {
- eps *= 0.5;
- }
- } while (eps > 1e-3 || improvement > 1e-3);
-}
-
-static inline void
-pixel_queue_add(PixelQueue *queue,
- gint i, gint j)
-{
- if (G_UNLIKELY(queue->len == queue->size)) {
- queue->size = MAX(2*queue->size, 16);
- queue->points = g_renew(GridPoint, queue->points, queue->size);
- }
-
- queue->points[queue->len].i = i;
- queue->points[queue->len].j = j;
- queue->len++;
-}
-
-static guint*
-grain_maybe_realloc(guint *grain, guint w, guint h, guint *grainsize)
-{
- if (w*h > *grainsize) {
- g_free(grain);
- *grainsize = w*h;
- grain = g_new(guint, *grainsize);
- }
- return grain;
-}
-
-static guint*
-extract_upsampled_square_pixel_grain(const guint *grains, guint xres, guint gno,
- const gint *bbox,
- guint *grain, guint *grainsize,
- guint *widthup, guint *heightup,
- gdouble dx, gdouble dy)
-{
- gint col = bbox[0], row = bbox[1], w = bbox[2], h = bbox[3];
- guint w2 = 2*w, h2 = 2*h;
- guint i, j;
-
- /* Do not bother with nearly square pixels and upsample also 2×2. */
- if (fabs(log(dy/dx)) < 0.05) {
- grain = grain_maybe_realloc(grain, w2, h2, grainsize);
- for (i = 0; i < h; i++) {
- guint k2 = w2*(2*i);
- guint k = (i + row)*xres + col;
- for (j = 0; j < w; j++, k++, k2 += 2) {
- guint v = (grains[k] == gno) ? G_MAXUINT : 0;
- grain[k2] = v;
- grain[k2+1] = v;
- grain[k2 + w2] = v;
- grain[k2 + w2+1] = v;
- }
- }
- }
- else if (dy < dx) {
- /* Horizontal upsampling, precalculate index map to use in each row. */
- guint *indices;
- w2 = GWY_ROUND(dx/dy*w2);
- grain = grain_maybe_realloc(grain, w2, h2, grainsize);
- indices = (guint*)g_slice_alloc(w2*sizeof(guint));
- for (j = 0; j < w2; j++) {
- gint jj = (gint)floor(0.5*j*dy/dx);
- indices[j] = CLAMP(jj, 0, (gint)w-1);
- }
- for (i = 0; i < h; i++) {
- guint k = (i + row)*xres + col;
- guint k2 = w2*(2*i);
- for (j = 0; j < w2; j++) {
- guint v = (grains[k + indices[j]] == gno) ? G_MAXUINT : 0;
- grain[k2 + j] = v;
- grain[k2 + w2 + j] = v;
- }
- }
- g_slice_free1(w2*sizeof(guint), indices);
- }
- else {
- /* Vertical upsampling, rows are 2× scaled copies but uneven. */
- h2 = GWY_ROUND(dy/dx*h2);
- grain = grain_maybe_realloc(grain, w2, h2, grainsize);
- for (i = 0; i < h2; i++) {
- guint k, k2 = i*w2;
- gint ii = (gint)floor(0.5*i*dx/dy);
- ii = CLAMP(ii, 0, (gint)h-1);
- k = (ii + row)*xres + col;
- for (j = 0; j < w; j++) {
- guint v = (grains[k + j] == gno) ? G_MAXUINT : 0;
- grain[k2 + 2*j] = v;
- grain[k2 + 2*j + 1] = v;
- }
- }
- }
-
- *widthup = w2;
- *heightup = h2;
- return grain;
-}
-
-/* Init @queue with all Von Neumann-neighbourhood boundary pixels. */
-static void
-init_erosion_4(guint *grain,
- guint width, guint height,
- gboolean from_border,
- PixelQueue *queue)
-{
- guint ifrom = from_border ? 0 : 1;
- guint iend = from_border ? height : height-1;
- guint jfrom = from_border ? 0 : 1;
- guint jend = from_border ? width : width-1;
- guint i, j, k;
-
- queue->len = 0;
- for (i = ifrom; i < iend; i++) {
- k = i*width + jfrom;
- for (j = jfrom; j < jend; j++, k++) {
- if (!grain[k])
- continue;
-
- if (!i || !j || j == width-1 || i == height-1
- || !grain[k - width] || !grain[k - 1]
- || !grain[k + 1] || !grain[k + width]) {
- grain[k] = 1;
- pixel_queue_add(queue, i, j);
- }
- }
- }
-}
-
-/* Init @queue with all Von Neumann-neighbourhood boundary pixels. */
-static void
-init_erosion_8(guint *grain,
- gint width, gint height,
- gboolean from_border,
- PixelQueue *queue)
-{
- guint ifrom = from_border ? 0 : 1;
- guint iend = from_border ? height : height-1;
- guint jfrom = from_border ? 0 : 1;
- guint jend = from_border ? width : width-1;
- guint i, j, k;
-
- queue->len = 0;
- for (i = ifrom; i < iend; i++) {
- k = i*width + jfrom;
- for (j = jfrom; j < jend; j++, k++) {
- if (!grain[k])
- continue;
-
- if (!i || !j || j == width-1 || i == height-1
- || !grain[k - width - 1] || !grain[k - width]
- || !grain[k - width + 1]
- || !grain[k - 1] || !grain[k + 1]
- || !grain[k + width - 1] || !grain[k + width]
- || !grain[k + width + 1]) {
- grain[k] = 1;
- pixel_queue_add(queue, i, j);
- }
- }
- }
-}
-
-static gboolean
-erode_4(guint *grain,
- gint width, gint height,
- guint id,
- const PixelQueue *inqueue,
- PixelQueue *outqueue)
-{
- const GridPoint *ipt = inqueue->points;
- guint m;
-
- outqueue->len = 0;
- for (m = inqueue->len; m; m--, ipt++) {
- gint i = ipt->i, j = ipt->j, k = i*width + j;
-
- if (i && grain[k - width] == G_MAXUINT) {
- grain[k - width] = id+1;
- pixel_queue_add(outqueue, i-1, j);
- }
- if (j && grain[k - 1] == G_MAXUINT) {
- grain[k - 1] = id+1;
- pixel_queue_add(outqueue, i, j-1);
- }
- if (j < width-1 && grain[k + 1] == G_MAXUINT) {
- grain[k + 1] = id+1;
- pixel_queue_add(outqueue, i, j+1);
- }
- if (i < height-1 && grain[k + width] == G_MAXUINT) {
- grain[k + width] = id+1;
- pixel_queue_add(outqueue, i+1, j);
- }
- }
-
- return outqueue->len;
-}
-
-static gboolean
-erode_8(guint *grain,
- gint width, gint height,
- guint id,
- const PixelQueue *inqueue,
- PixelQueue *outqueue)
-{
- const GridPoint *ipt = inqueue->points;
- guint m;
-
- outqueue->len = 0;
- for (m = inqueue->len; m; m--, ipt++) {
- gint i = ipt->i, j = ipt->j, k = i*width + j;
- if (i && j && grain[k - width - 1] == G_MAXUINT) {
- grain[k - width - 1] = id+1;
- pixel_queue_add(outqueue, i-1, j-1);
- }
- if (i && grain[k - width] == G_MAXUINT) {
- grain[k - width] = id+1;
- pixel_queue_add(outqueue, i-1, j);
- }
- if (i && j < width-1 && grain[k - width + 1] == G_MAXUINT) {
- grain[k - width + 1] = id+1;
- pixel_queue_add(outqueue, i-1, j+1);
- }
- if (j && grain[k - 1] == G_MAXUINT) {
- grain[k - 1] = id+1;
- pixel_queue_add(outqueue, i, j-1);
- }
- if (j < width-1 && grain[k + 1] == G_MAXUINT) {
- grain[k + 1] = id+1;
- pixel_queue_add(outqueue, i, j+1);
- }
- if (i < height-1 && j && grain[k + width - 1] == G_MAXUINT) {
- grain[k + width - 1] = id+1;
- pixel_queue_add(outqueue, i+1, j-1);
- }
- if (i < height-1 && grain[k + width] == G_MAXUINT) {
- grain[k + width] = id+1;
- pixel_queue_add(outqueue, i+1, j);
- }
- if (i < height-1 && j < width-1 && grain[k + width + 1] == G_MAXUINT) {
- grain[k + width + 1] = id+1;
- pixel_queue_add(outqueue, i+1, j+1);
- }
- }
-
- return outqueue->len;
-}
-
-static gint
-compare_candidates(gconstpointer a,
- gconstpointer b)
-{
- const InscribedDisc *da = (const InscribedDisc*)a;
- const InscribedDisc *db = (const InscribedDisc*)b;
-
- if (da->size > db->size)
- return -1;
- if (da->size < db->size)
- return 1;
-
- if (da->R2 < db->R2)
- return -1;
- if (da->R2 > db->R2)
- return 1;
-
- return 0;
-}
-
-static void
-find_disc_centre_candidates(GArray *candidates,
- PixelQueue *inqueue,
- const guint *grain,
- guint width, guint height,
- gdouble dx, gdouble dy,
- gdouble centrex, gdouble centrey)
-{
- guint m;
-
- g_array_set_size(candidates, 0);
- for (m = 0; m < inqueue->len; m++) {
- GridPoint *mpt = inqueue->points + m;
- guint i = mpt->i, j = mpt->j, k = i*width + j, size = 8*grain[k], w;
- InscribedDisc cand;
-
- if (i && j && (w = grain[k - width-1]) != G_MAXUINT)
- size += w;
- if (i && (w = grain[k - width]) != G_MAXUINT)
- size += 2*w;
- if (i && j < width-1 && (w = grain[k - width+1]) != G_MAXUINT)
- size += w;
- if (j && (w = grain[k-1]) != G_MAXUINT)
- size += 2*w;
- if (j < width-1 && (w = grain[k+1]) != G_MAXUINT)
- size += 2*w;
- if (i < height-1 && j && (w = grain[k + width-1]) != G_MAXUINT)
- size += w;
- if (i < height-1 && (w = grain[k + width]) != G_MAXUINT)
- size += 2*w;
- if (i < height-1 && j < width-1 && (w = grain[k + width+1]) != G_MAXUINT)
- size += w;
-
- cand.x = (mpt->j + 0.5)*dx;
- cand.y = (mpt->i + 0.5)*dy;
- cand.size = size;
- /* Use R2 temporarily for distance from the entire grain centre;
- * this is only for sorting below. */
- cand.R2 = ((cand.x - centrex)*(cand.x - centrex)
- + (cand.y - centrey)*(cand.y - centrey));
- g_array_append_val(candidates, cand);
- }
- g_array_sort(candidates, &compare_candidates);
-}
-
-static inline void
-edge_list_add(EdgeQueue *queue,
- gdouble xa, gdouble ya,
- gdouble xb, gdouble yb)
-{
- if (G_UNLIKELY(queue->len == queue->size)) {
- queue->size = MAX(2*queue->size, 16);
- queue->edges = g_renew(Edge, queue->edges, queue->size);
- }
-
- queue->edges[queue->len].xa = xa;
- queue->edges[queue->len].ya = ya;
- queue->edges[queue->len].xb = xb;
- queue->edges[queue->len].yb = yb;
- queue->len++;
-}
-
-static void
-find_all_edges(EdgeQueue *edges,
- const gint *grains, guint xres,
- guint gno, const gint *bbox,
- gdouble dx, gdouble dy)
-{
- guint col = bbox[0], row = bbox[1], w = bbox[2], h = bbox[3];
- guint i, j;
- guint *vertices;
-
- edges->len = 0;
-
- vertices = g_slice_alloc((w + 1)*sizeof(guint));
- for (j = 0; j <= w; j++)
- vertices[j] = G_MAXUINT;
-
- for (i = 0; i <= h; i++) {
- guint k = (i + row)*xres + col;
- guint vertex = G_MAXUINT;
-
- for (j = 0; j <= w; j++, k++) {
- /*
- * 1 2
- * 3 4
- */
- guint g0 = i && j && grains[k - xres - 1] == gno;
- guint g1 = i && j < w && grains[k - xres] == gno;
- guint g2 = i < h && j && grains[k - 1] == gno;
- guint g3 = i < h && j < w && grains[k] == gno;
- guint g = g0 | (g1 << 1) | (g2 << 2) | (g3 << 3);
-
- if (g == 8 || g == 7) {
- vertex = j;
- vertices[j] = i;
- }
- else if (g == 2 || g == 13) {
- edge_list_add(edges, dx*j, dy*vertices[j], dx*j, dy*i);
- vertex = j;
- vertices[j] = G_MAXUINT;
- }
- else if (g == 4 || g == 11) {
- edge_list_add(edges, dx*vertex, dy*i, dx*j, dy*i);
- vertex = G_MAXUINT;
- vertices[j] = i;
- }
- else if (g == 1 || g == 14) {
- edge_list_add(edges, dx*vertex, dy*i, dx*j, dy*i);
- edge_list_add(edges, dx*j, dy*vertices[j], dx*j, dy*i);
- vertex = G_MAXUINT;
- vertices[j] = G_MAXUINT;
- }
- else if (g == 6 || g == 9) {
- edge_list_add(edges, dx*vertex, dy*i, dx*j, dy*i);
- edge_list_add(edges, dx*j, dy*vertices[j], dx*j, dy*i);
- vertex = j;
- vertices[j] = i;
- }
- }
- }
-
- g_slice_free1((w + 1)*sizeof(guint), vertices);
-}
-
-static gdouble
-maximize_disc_radius(InscribedDisc *disc, Edge *edges, guint n)
-{
- gdouble x = disc->x, y = disc->y, r2best = HUGE_VAL;
-
- while (n--) {
- gdouble rax = edges->xa - x, ray = edges->ya - y,
- rbx = edges->xb - x, rby = edges->yb - y,
- deltax = edges->xb - edges->xa, deltay = edges->yb - edges->ya;
- gdouble ca = -(deltax*rax + deltay*ray),
- cb = deltax*rbx + deltay*rby;
-
- if (ca <= 0.0)
- edges->r2 = rax*rax + ray*ray;
- else if (cb <= 0.0)
- edges->r2 = rbx*rbx + rby*rby;
- else {
- gdouble tx = cb*rax + ca*rbx, ty = cb*ray + ca*rby, D = ca + cb;
- edges->r2 = (tx*tx + ty*ty)/(D*D);
- }
-
- if (edges->r2 < r2best)
- r2best = edges->r2;
- edges++;
- }
-
- return r2best;
-}
-
-static guint
-filter_relevant_edges(EdgeQueue *edges, gdouble r2, gdouble eps)
-{
- Edge *edge = edges->edges, *enear = edges->edges;
- gdouble limit = sqrt(r2) + 4.0*eps + 0.5;
- guint i;
-
- limit *= limit;
- for (i = edges->len; i; i--, edge++) {
- if (edge->r2 <= limit) {
- if (edge != enear)
- GWY_SWAP(Edge, *edge, *enear);
- enear++;
- }
- }
-
- return enear - edges->edges;
-}
-
-static void
-improve_inscribed_disc(InscribedDisc *disc, EdgeQueue *edges, guint dist)
-{
- gdouble eps = 0.5 + 0.25*(dist > 4) + 0.25*(dist > 16), improvement;
- guint nsuccessiveimprovements = 0;
-
- do {
- InscribedDisc best;
- guint i, nr;
-
- disc->R2 = maximize_disc_radius(disc, edges->edges, edges->len);
- eps = MIN(eps, 0.5*sqrt(disc->R2));
- best = *disc;
- nr = filter_relevant_edges(edges, best.R2, eps);
-
- improvement = 0.0;
- for (i = 0; i < NDIRECTIONS; i++) {
- InscribedDisc cand;
- gdouble sx = eps*shift_directions[2*i],
- sy = eps*shift_directions[2*i + 1];
-
- cand.size = disc->size;
-
- cand.x = disc->x + sx;
- cand.y = disc->y + sy;
- if ((cand.R2 = maximize_disc_radius(&cand, edges->edges, nr))
- > best.R2)
- best = cand;
-
- cand.x = disc->x - sy;
- cand.y = disc->y + sx;
- if ((cand.R2 = maximize_disc_radius(&cand, edges->edges, nr))
- > best.R2)
- best = cand;
-
- cand.x = disc->x - sx;
- cand.y = disc->y - sy;
- if ((cand.R2 = maximize_disc_radius(&cand, edges->edges, nr))
- > best.R2)
- best = cand;
-
- cand.x = disc->x + sy;
- cand.y = disc->y - sx;
- if ((cand.R2 = maximize_disc_radius(&cand, edges->edges, nr))
- > best.R2)
- best = cand;
- }
-
- if (best.R2 > disc->R2) {
- improvement = sqrt(best.R2) - sqrt(disc->R2);
- *disc = best;
- /* This scales up *each* successive improvement after 3 so eps can
- * grow very quickly. */
- if (nsuccessiveimprovements++ > 2)
- eps *= 1.5;
- }
- else {
- eps *= 0.5;
- nsuccessiveimprovements = 0;
- }
- } while (eps > 1e-3 || improvement > 1e-3);
-}
-
-/**
- * gwy_data_field_grains_get_values:
- * @data_field: Data field used for marking. For some quantities its values
- * are not used, but its dimensions determine the dimensions of
- * @grains.
- * @values: Array of size @ngrains+1 to put grain values to. It can be
- * %NULL to allocate and return a new array.
- * @grains: Grain numbers filled with gwy_data_field_number_grains().
- * @ngrains: The number of grains as returned by
- * gwy_data_field_number_grains().
- * @quantity: The quantity to calculate.
- *
- * Calculates characteristics of grains.
- *
- * This is a bit low-level function, see also
- * gwy_data_field_grains_get_distribution().
- *
- * The array @values will be filled with the requested grain value for each
- * individual grain (0th item of @values which does not correspond to any grain
- * will be overwritten with an arbitrary value and should be ignored).
- *
- * The grain numbers serve as indices in @values. Therefore as long as the
- * same @grains is used, the same position in @values corresponds to the same
- * particular grain. This enables one for instance to calculate grain sizes
- * and grain heights and then correlate them.
- *
- * Returns: @values itself if it was not %NULL, otherwise a newly allocated
- * array that caller has to free.
- **/
-gdouble*
-gwy_data_field_grains_get_values(GwyDataField *data_field,
- gdouble *values,
- gint ngrains,
- const gint *grains,
- GwyGrainQuantity quantity)
-{
- gdouble *allvalues[1];
-
- if (!values)
- values = g_new(gdouble, ngrains + 1);
-
- allvalues[0] = values;
- gwy_data_field_grains_get_quantities(data_field, allvalues,
- &quantity, 1, ngrains, grains);
- return values;
-}
-
-static gdouble*
-ensure_buffer(GwyGrainQuantity quantity,
- gdouble **quantity_data,
- guint ngrains,
- gdouble fillvalue,
- GList **buffers)
-{
- gdouble *buf, *b;
- guint gno;
-
- if (quantity_data[quantity]) {
- buf = quantity_data[quantity];
- if (!fillvalue)
- gwy_clear(buf, ngrains + 1);
- }
- else {
- if (fillvalue)
- buf = g_new(gdouble, ngrains + 1);
- else
- buf = g_new0(gdouble, ngrains + 1);
- *buffers = g_list_prepend(*buffers, buf);
- }
- if (fillvalue) {
- for (gno = ngrains+1, b = buf; gno; gno--)
- *(b++) = fillvalue;
- }
-
- return buf;
-}
-
-/* Note all coordinates are pixel-wise, not real. For linear and quadratic,
- * the origin is always the grain centre. */
-static void
-calculate_grain_aux(GwyDataField *data_field,
- const gint *grains,
- guint ngrains,
- gint *sizes, gint *boundpos,
- gdouble *min, gdouble *max,
- gdouble *xvalue, gdouble *yvalue, gdouble *zvalue,
- gdouble *linear, gdouble *quadratic)
-{
- guint xres, yres, i, j, k, n, gno, nn;
- gdouble z;
- const gdouble *d;
- const gint *g;
- gdouble *t;
-
- xres = data_field->xres;
- yres = data_field->yres;
- nn = xres*yres;
-
- if (sizes) {
- for (k = nn, g = grains; k; k--, g++) {
- gno = *g;
- sizes[gno]++;
- }
- }
- if (boundpos) {
- for (k = 0, g = grains; k < nn; k++, g++) {
- gno = *g;
- if (boundpos[gno] == -1)
- boundpos[gno] = k;
- }
- }
- if (min) {
- for (k = nn, g = grains, d = data_field->data; k; k--, g++, d++) {
- gno = *g;
- z = *d;
- if (z < min[gno])
- min[gno] = z;
- }
- }
- if (max) {
- for (k = nn, g = grains, d = data_field->data; k; k--, g++, d++) {
- gno = *g;
- z = *d;
- if (z > max[gno])
- max[gno] = z;
- }
- }
- if (zvalue) {
- g_assert(sizes);
- for (k = nn, g = grains, d = data_field->data; k; k--, g++, d++) {
- gno = *g;
- z = *d;
- zvalue[gno] += z;
- }
- for (gno = 0; gno <= ngrains; gno++) {
- n = sizes[gno];
- zvalue[gno] /= n;
- }
- }
- if (xvalue) {
- g_assert(sizes);
- g = grains;
- for (i = 0; i < yres; i++) {
- for (j = 0; j < xres; j++, g++) {
- gno = *g;
- xvalue[gno] += j;
- }
- }
- for (gno = 0; gno <= ngrains; gno++) {
- n = sizes[gno];
- xvalue[gno] /= n;
- }
- }
- if (yvalue) {
- g_assert(sizes);
- g = grains;
- for (i = 0; i < yres; i++) {
- for (j = 0; j < xres; j++, g++) {
- gno = *g;
- yvalue[gno] += i;
- }
- }
- for (gno = 0; gno <= ngrains; gno++) {
- n = sizes[gno];
- yvalue[gno] /= n;
- }
- }
- if (linear) {
- g_assert(xvalue && yvalue);
- g = grains;
- d = data_field->data;
- for (i = 0; i < yres; i++) {
- for (j = 0; j < xres; j++, g++, d++) {
- gdouble x, y;
-
- gno = *g;
- t = linear + 5*gno;
- x = j - xvalue[gno];
- y = i - yvalue[gno];
- z = *d;
- *(t++) += x*x;
- *(t++) += x*y;
- *(t++) += y*y;
- *(t++) += x*z;
- *t += y*z;
- }
- }
- }
- if (quadratic) {
- g_assert(xvalue && yvalue);
- g = grains;
- d = data_field->data;
- for (i = 0; i < yres; i++) {
- for (j = 0; j < xres; j++, g++, d++) {
- gdouble x, y, xx, yy, xy;
-
- gno = *g;
- t = quadratic + 12*gno;
- x = j - xvalue[gno];
- y = i - yvalue[gno];
- xx = x*x;
- xy = x*y;
- yy = y*y;
- z = *d;
- *(t++) += xx*x;
- *(t++) += xx*y;
- *(t++) += x*yy;
- *(t++) += y*yy;
- *(t++) += xx*xx;
- *(t++) += xx*xy;
- *(t++) += xx*yy;
- *(t++) += xy*yy;
- *(t++) += yy*yy;
- *(t++) += xx*z;
- *(t++) += xy*z;
- *t += yy*z;
- }
- }
- }
-}
-
-static void
-integrate_grain_volume0(const gdouble *d, const gint *grains,
- gint xres, gint yres,
- gdouble *volume, guint ngrains,
- gdouble pixelarea)
-{
- gint i, j, gno;
-
- gwy_clear(volume, ngrains + 1);
- for (i = 0; i < yres; i++) {
- for (j = 0; j < xres; j++) {
- gint ix, ipx, imx, jp, jm;
- gdouble v;
-
- ix = i*xres;
- if (!(gno = grains[ix + j]))
- continue;
-
- imx = (i > 0) ? ix-xres : ix;
- ipx = (i < yres-1) ? ix+xres : ix;
- jm = (j > 0) ? j-1 : j;
- jp = (j < xres-1) ? j+1 : j;
-
- v = (52.0*d[ix + j] + 10.0*(d[imx + j] + d[ix + jm]
- + d[ix + jp] + d[ipx + j])
- + (d[imx + jm] + d[imx + jp] + d[ipx + jm] + d[ipx + jp]));
-
- volume[gno] += v;
- }
- }
- for (gno = 0; gno <= ngrains; gno++)
- volume[gno] *= pixelarea/96.0;
-}
-
-/**
- * gwy_data_field_grains_get_quantities:
- * @data_field: Data field used for marking. For some quantities its values
- * are not used, but its dimensions determine the dimensions of
- * @grains.
- * @values: Array of @nquantities pointers to blocks of length @ngrains+1 to
- * put the calculated grain values to. Each block corresponds to one
- * requested quantity. %NULL can be passed to allocate and return a
- * new array.
- * @quantities: Array of @nquantities items that specify the requested
- * #GwyGrainQuantity to put to corresponding items in @values.
- * Quantities can repeat.
- * @nquantities: The number of requested different grain values.
- * @grains: Grain numbers filled with gwy_data_field_number_grains().
- * @ngrains: The number of grains as returned by
- * gwy_data_field_number_grains().
- *
- * Calculates multiple characteristics of grains simultaneously.
- *
- * See gwy_data_field_grains_get_values() for some discussion. This function
- * is more efficient if several grain quantities need to be calculated since
- * gwy_data_field_grains_get_values() can do lot of repeated work in such case.
- *
- * Returns: @values itself if it was not %NULL, otherwise a newly allocated
- * array that caller has to free with g_free(), including the
- * contained arrays.
- *
- * Since: 2.22
- **/
-gdouble**
-gwy_data_field_grains_get_quantities(GwyDataField *data_field,
- gdouble **values,
- const GwyGrainQuantity *quantities,
- guint nquantities,
- guint ngrains,
- const gint *grains)
-{
- /* The number of built-in quantities. */
- enum { NQ = 45 };
- enum {
- NEED_SIZES = 1 << 0,
- NEED_BOUNDPOS = 1 << 1,
- NEED_MIN = 1 << 2,
- NEED_MAX = 1 << 3,
- NEED_XVALUE = (1 << 4) | NEED_SIZES,
- NEED_YVALUE = (1 << 5) | NEED_SIZES,
- NEED_CENTRE = NEED_XVALUE | NEED_YVALUE,
- NEED_ZVALUE = (1 << 6) | NEED_SIZES,
- NEED_LINEAR = (1 << 7) | NEED_ZVALUE | NEED_CENTRE,
- NEED_QUADRATIC = (1 << 8) | NEED_LINEAR,
- NEED_BBOX = (1 << 9),
- INVALID = G_MAXUINT
- };
- static const guint need_aux[NQ] = {
- NEED_SIZES, /* projected area */
- NEED_SIZES, /* equiv square side */
- NEED_SIZES, /* equiv disc radius */
- 0, /* surface area */
- NEED_MAX, /* maximum */
- NEED_MIN, /* minimum */
- NEED_ZVALUE, /* mean */
- NEED_SIZES, /* median */
- NEED_SIZES, /* pixel area */
- NEED_MIN | NEED_MAX, /* half-height area */
- 0, /* flat boundary length */
- INVALID,
- NEED_BOUNDPOS, /* min bounding size */
- NEED_BOUNDPOS, /* min bounding direction */
- NEED_BOUNDPOS, /* max bounding size */
- NEED_BOUNDPOS, /* max bounding direction */
- NEED_XVALUE, /* centre x */
- NEED_YVALUE, /* centre y */
- 0, /* volume, 0-based */
- NEED_MIN | NEED_SIZES, /* volume, min-based */
- NEED_BBOX | NEED_SIZES, /* volume, Laplace-based */
- INVALID,
- INVALID,
- NEED_LINEAR, /* slope theta */
- NEED_LINEAR, /* slope phi */
- 0, /* boundary minimum */
- 0, /* boundary maximum */
- NEED_QUADRATIC, /* curvature centre x */
- NEED_QUADRATIC, /* curvature centre y */
- NEED_QUADRATIC, /* curvature centre z */
- NEED_QUADRATIC, /* curvature invrad 1 */
- NEED_QUADRATIC, /* curvature invrad 2 */
- NEED_QUADRATIC, /* curvature direction 1 */
- NEED_QUADRATIC, /* curvature direction 2 */
- NEED_CENTRE | NEED_BBOX, /* inscribed disc radius */
- NEED_CENTRE | NEED_BBOX, /* inscribed disc centre x */
- NEED_CENTRE | NEED_BBOX, /* inscribed disc centre y */
- NEED_BOUNDPOS, /* convex hull area */
- NEED_BOUNDPOS, /* circumcircle radius */
- NEED_BOUNDPOS, /* circumcircle centre x */
- NEED_BOUNDPOS, /* circumcircle centre y */
- NEED_CENTRE, /* mean radius */
- NEED_LINEAR, /* equiv ellipse major axis */
- NEED_LINEAR, /* equiv ellipse minor axis */
- NEED_LINEAR, /* equiv ellipse major axis angle */
- };
-
- gdouble *quantity_data[NQ];
- gboolean seen[NQ];
- GList *l, *buffers = NULL;
- guint *sizes = NULL;
- gint *boundpos = NULL, *bbox = NULL;
- gdouble *xvalue = NULL, *yvalue = NULL, *zvalue = NULL,
- *min = NULL, *max = NULL,
- *linear = NULL, *quadratic = NULL;
- const gdouble *d;
- gdouble *p;
- gdouble qh, qv, qarea, qdiag, qgeom;
- guint xres, yres, i, j, k, nn, gno;
-
- g_return_val_if_fail(GWY_IS_DATA_FIELD(data_field), NULL);
- g_return_val_if_fail(grains, NULL);
- if (!nquantities)
- return values;
- g_return_val_if_fail(quantities, NULL);
-
- if (!values) {
- values = g_new(gdouble*, nquantities);
- for (i = 0; i < nquantities; i++)
- values[i] = g_new0(gdouble, ngrains + 1);
- }
- else {
- for (i = 0; i < nquantities; i++)
- gwy_clear(values[i], ngrains + 1);
- }
-
- xres = data_field->xres;
- yres = data_field->yres;
- nn = xres*yres;
- gwy_debug("ngrains: %d, nn: %d", ngrains, nn);
-
- /* Figure out which quantities are requested. */
- gwy_clear(quantity_data, NQ);
- for (i = 0; i < nquantities; i++) {
- GwyGrainQuantity quantity = quantities[i];
-
- if ((guint)quantity >= NQ || need_aux[quantity] == INVALID) {
- g_warning("Invalid built-in grain quantity number %u.", quantity);
- continue;
- }
- /* Take the first if the same quantity is requested multiple times.
- * We will deal with this later. */
- if (!quantity_data[quantity])
- quantity_data[quantity] = values[i];
- }
-
- /* Figure out the auxiliary data to calculate. Do this after we gathered
- * all quantities as some auxiliary data are in fact quantities too. */
- for (i = 0; i < nquantities; i++) {
- GwyGrainQuantity quantity = quantities[i];
- guint need;
-
- if ((guint)quantity >= NQ || need_aux[quantity] == INVALID)
- continue;
-
- need = need_aux[quantity];
- /* Integer data */
- if ((need & NEED_SIZES) && !sizes) {
- sizes = g_new0(guint, ngrains + 1);
- buffers = g_list_prepend(buffers, sizes);
- }
- if ((need & NEED_BOUNDPOS) && !boundpos) {
- boundpos = g_new(gint, ngrains + 1);
- buffers = g_list_prepend(buffers, boundpos);
- for (gno = 0; gno <= ngrains; gno++)
- boundpos[gno] = -1;
- }
- if ((need & NEED_BBOX) && !bbox) {
- bbox = gwy_data_field_get_grain_bounding_boxes(data_field,
- ngrains, grains,
- NULL);
- buffers = g_list_prepend(buffers, bbox);
- }
- /* Floating point data that coincide with some quantity. An array
- * is allocated only if the corresponding quantity is not requested.
- * Otherwise we use the supplied array. */
- if (need & NEED_MIN)
- min = ensure_buffer(GWY_GRAIN_VALUE_MINIMUM, quantity_data,
- ngrains, G_MAXDOUBLE, &buffers);
- if (need & NEED_MAX)
- max = ensure_buffer(GWY_GRAIN_VALUE_MAXIMUM, quantity_data,
- ngrains, -G_MAXDOUBLE, &buffers);
- if (need & NEED_XVALUE)
- xvalue = ensure_buffer(GWY_GRAIN_VALUE_CENTER_X, quantity_data,
- ngrains, 0.0, &buffers);
- if (need & NEED_YVALUE)
- yvalue = ensure_buffer(GWY_GRAIN_VALUE_CENTER_Y, quantity_data,
- ngrains, 0.0, &buffers);
- if (need & NEED_ZVALUE)
- zvalue = ensure_buffer(GWY_GRAIN_VALUE_MEAN, quantity_data,
- ngrains, 0.0, &buffers);
- /* Complex floating point data */
- if ((need & NEED_LINEAR) && !linear) {
- linear = g_new0(gdouble, 5*(ngrains + 1));
- buffers = g_list_prepend(buffers, linear);
- }
- if ((need & NEED_QUADRATIC) && !quadratic) {
- quadratic = g_new0(gdouble, 12*(ngrains + 1));
- buffers = g_list_prepend(buffers, quadratic);
- }
- }
-
- /* Calculate auxiliary quantities (in pixel lateral coordinates) */
- calculate_grain_aux(data_field, grains, ngrains, sizes, boundpos,
- min, max, xvalue, yvalue, zvalue, linear, quadratic);
-
- d = data_field->data;
- qh = gwy_data_field_get_xmeasure(data_field);
- qv = gwy_data_field_get_ymeasure(data_field);
- qdiag = hypot(qh, qv);
- qarea = qh*qv;
- qgeom = sqrt(qarea);
-
- /* Calculate specific requested quantities */
- if ((p = quantity_data[GWY_GRAIN_VALUE_PIXEL_AREA])) {
- for (gno = 0; gno <= ngrains; gno++)
- p[gno] = sizes[gno];
- }
- if ((p = quantity_data[GWY_GRAIN_VALUE_PROJECTED_AREA])) {
- for (gno = 0; gno <= ngrains; gno++)
- p[gno] = qarea*sizes[gno];
- }
- if ((p = quantity_data[GWY_GRAIN_VALUE_EQUIV_SQUARE_SIDE])) {
- for (gno = 0; gno <= ngrains; gno++)
- p[gno] = sqrt(qarea*sizes[gno]);
- }
- if ((p = quantity_data[GWY_GRAIN_VALUE_EQUIV_DISC_RADIUS])) {
- for (gno = 0; gno <= ngrains; gno++)
- p[gno] = sqrt(qarea/G_PI*sizes[gno]);
- }
- if ((p = quantity_data[GWY_GRAIN_VALUE_SURFACE_AREA])) {
- gdouble qh2 = qh*qh, qv2 = qv*qv;
-
- gwy_clear(p, ngrains + 1);
- /* Every contribution is calculated twice -- for each pixel (vertex)
- * participating to a particular triangle */
- for (i = 0; i < yres; i++) {
- for (j = 0; j < xres; j++) {
- gint ix, ipx, imx, jp, jm;
- gdouble c;
-
- ix = i*xres;
- if (!(gno = grains[ix + j]))
- continue;
-
- imx = (i > 0) ? ix-xres : ix;
- ipx = (i < yres-1) ? ix+xres : ix;
- jm = (j > 0) ? j-1 : j;
- jp = (j < xres-1) ? j+1 : j;
-
- c = (d[ix + j] + d[ix + jm] + d[imx + jm] + d[imx + j])/2.0;
- p[gno] += square_area2w_1c(d[ix + j], d[ix + jm],
- d[imx + j], c, qh2, qv2);
-
- c = (d[ix + j] + d[ix + jp] + d[imx + jp] + d[imx + j])/2.0;
- p[gno] += square_area2w_1c(d[ix + j], d[ix + jp],
- d[imx + j], c, qh2, qv2);
-
- c = (d[ix + j] + d[ix + jm] + d[ipx + jm] + d[ipx + j])/2.0;
- p[gno] += square_area2w_1c(d[ix + j], d[ix + jm],
- d[ipx + j], c, qh2, qv2);
-
- c = (d[ix + j] + d[ix + jp] + d[ipx + jp] + d[ipx + j])/2.0;
- p[gno] += square_area2w_1c(d[ix + j], d[ix + jp],
- d[ipx + j], c, qh2, qv2);
- }
- }
- for (gno = 0; gno <= ngrains; gno++)
- p[gno] *= qarea/8.0;
- }
- /* GWY_GRAIN_VALUE_MINIMUM is calculated directly. */
- /* GWY_GRAIN_VALUE_MAXIMUM is calculated directly. */
- /* GWY_GRAIN_VALUE_MEAN is calculated directly. */
- if ((p = quantity_data[GWY_GRAIN_VALUE_MEDIAN])) {
- guint *csizes = g_new0(guint, ngrains + 1);
- guint *pos = g_new0(guint, ngrains + 1);
- gdouble *tmp;
-
- /* Find cumulative sizes (we care only about grains, ignore the
- * outside-grains area) */
- csizes[0] = 0;
- csizes[1] = sizes[1];
- for (gno = 2; gno <= ngrains; gno++)
- csizes[gno] = sizes[gno] + csizes[gno-1];
-
- tmp = g_new(gdouble, csizes[ngrains]);
- /* Find where each grain starts in tmp sorted by grain # */
- for (gno = 1; gno <= ngrains; gno++)
- pos[gno] = csizes[gno-1];
- /* Sort values by grain # to tmp */
- for (k = 0; k < nn; k++) {
- if ((gno = grains[k])) {
- tmp[pos[gno]] = d[k];
- pos[gno]++;
- }
- }
- /* Find medians of each block */
- for (gno = 1; gno <= ngrains; gno++)
- p[gno] = gwy_math_median(csizes[gno] - csizes[gno-1],
- tmp + csizes[gno-1]);
- /* Finalize */
- g_free(csizes);
- g_free(pos);
- g_free(tmp);
- }
- if ((p = quantity_data[GWY_GRAIN_VALUE_HALF_HEIGHT_AREA])) {
- gdouble *zhalf;
- guint *zhsizes;
-
- /* Find the grain half-heights, i.e. (z_min + z_max)/2, first */
- zhalf = g_new(gdouble, ngrains + 1);
- for (gno = 0; gno <= ngrains; gno++)
- zhalf[gno] = (min[gno] + max[gno])/2.0;
- /* Calculate the area of pixels above the half-heights */
- zhsizes = g_new0(gint, ngrains + 1);
- for (k = 0; k < nn; k++) {
- gno = grains[k];
- if (d[k] >= zhalf[gno])
- zhsizes[gno]++;
- }
- for (gno = 0; gno <= ngrains; gno++)
- p[gno] = qarea*zhsizes[gno];
- /* Finalize */
- g_free(zhalf);
- g_free(zhsizes);
- }
- if ((p = quantity_data[GWY_GRAIN_VALUE_FLAT_BOUNDARY_LENGTH])) {
- gwy_clear(p, ngrains + 1);
- /* Note the cycles go to xres and yres inclusive as we calculate the
- * boundary, not pixel interiors. */
- for (i = 0; i <= yres; i++) {
- for (j = 0; j <= xres; j++) {
- gint g1, g2, g3, g4, f;
-
- /* Hope compiler will optimize this mess... */
- g1 = (i > 0 && j > 0) ? grains[i*xres + j - xres - 1] : 0;
- g2 = (i > 0 && j < xres) ? grains[i*xres + j - xres] : 0;
- g3 = (i < yres && j > 0) ? grains[i*xres + j - 1] : 0;
- g4 = (i < yres && j < xres) ? grains[i*xres + j] : 0;
- f = (g1 > 0) + (g2 > 0) + (g3 > 0) + (g4 > 0);
- if (f == 0 || f == 4)
- continue;
-
- if (f == 1 || f == 3) {
- /* Try to avoid too many if-thens by using the fact they
- * are all either zero or an identical value */
- p[g1 | g2 | g3 | g4] += qdiag/2.0;
- }
- else if (g1 && g4) {
- /* This works for both g1 == g4 and g1 != g4 */
- p[g1] += qdiag/2.0;
- p[g4] += qdiag/2.0;
- }
- else if (g2 && g3) {
- /* This works for both g2 == g3 and g2 != g3 */
- p[g2] += qdiag/2.0;
- p[g3] += qdiag/2.0;
- }
- else if (g1 == g2)
- p[g1 | g3] += qh;
- else if (g1 == g3)
- p[g1 | g2] += qv;
- else {
- g_assert_not_reached();
- }
- }
- }
- }
- if (quantity_data[GWY_GRAIN_VALUE_BOUNDARY_MINIMUM]
- || quantity_data[GWY_GRAIN_VALUE_BOUNDARY_MAXIMUM]) {
- gdouble *pmin = quantity_data[GWY_GRAIN_VALUE_BOUNDARY_MINIMUM];
- gdouble *pmax = quantity_data[GWY_GRAIN_VALUE_BOUNDARY_MAXIMUM];
-
- if (pmin) {
- for (gno = 0; gno <= ngrains; gno++)
- pmin[gno] = G_MAXDOUBLE;
- }
- if (pmax) {
- for (gno = 0; gno <= ngrains; gno++)
- pmax[gno] = -G_MAXDOUBLE;
- }
-
- for (i = 0; i < yres; i++) {
- for (j = 0; j < xres; j++) {
- gdouble z;
-
- /* Processing of the none-grain boundary is waste of time. */
- if (!(gno = grains[i*xres + j]))
- continue;
-
- if (i && j && i < yres-1 && j < xres - 1
- && grains[(i - 1)*xres + j] == gno
- && grains[i*xres + j - 1] == gno
- && grains[i*xres + j + 1] == gno
- && grains[(i + 1)*xres + j] == gno)
- continue;
-
- z = d[i*xres + j];
- if (pmin && z < pmin[gno])
- pmin[gno] = z;
- if (pmax && z > pmax[gno])
- pmax[gno] = z;
- }
- }
- }
- if (quantity_data[GWY_GRAIN_VALUE_MINIMUM_BOUND_SIZE]
- || quantity_data[GWY_GRAIN_VALUE_MINIMUM_BOUND_ANGLE]
- || quantity_data[GWY_GRAIN_VALUE_MAXIMUM_BOUND_SIZE]
- || quantity_data[GWY_GRAIN_VALUE_MAXIMUM_BOUND_ANGLE]
- || quantity_data[GWY_GRAIN_VALUE_CONVEX_HULL_AREA]
- || quantity_data[GWY_GRAIN_VALUE_CIRCUMCIRCLE_R]
- || quantity_data[GWY_GRAIN_VALUE_CIRCUMCIRCLE_X]
- || quantity_data[GWY_GRAIN_VALUE_CIRCUMCIRCLE_Y]) {
- gdouble *psmin = quantity_data[GWY_GRAIN_VALUE_MINIMUM_BOUND_SIZE];
- gdouble *psmax = quantity_data[GWY_GRAIN_VALUE_MAXIMUM_BOUND_SIZE];
- gdouble *pamin = quantity_data[GWY_GRAIN_VALUE_MINIMUM_BOUND_ANGLE];
- gdouble *pamax = quantity_data[GWY_GRAIN_VALUE_MAXIMUM_BOUND_ANGLE];
- gdouble *achull = quantity_data[GWY_GRAIN_VALUE_CONVEX_HULL_AREA];
- gdouble *circcr = quantity_data[GWY_GRAIN_VALUE_CIRCUMCIRCLE_R];
- gdouble *circcx = quantity_data[GWY_GRAIN_VALUE_CIRCUMCIRCLE_X];
- gdouble *circcy = quantity_data[GWY_GRAIN_VALUE_CIRCUMCIRCLE_Y];
- GArray *vertices;
-
- /* Find the complete convex hulls */
- vertices = g_array_new(FALSE, FALSE, sizeof(GridPoint));
- for (gno = 1; gno <= ngrains; gno++) {
- gdouble dx = qh, dy = qv;
-
- find_grain_convex_hull(xres, yres, grains, boundpos[gno], vertices);
- if (psmin || pamin) {
- grain_minimum_bound(vertices, qh, qv, &dx, &dy);
- if (psmin)
- psmin[gno] = hypot(dx, dy);
- if (pamin) {
- pamin[gno] = atan2(-dy, dx);
- if (pamin[gno] <= -G_PI/2.0)
- pamin[gno] += G_PI;
- else if (pamin[gno] > G_PI/2.0)
- pamin[gno] -= G_PI;
- }
- }
- if (psmax || pamax) {
- grain_maximum_bound(vertices, qh, qv, &dx, &dy);
- if (psmax)
- psmax[gno] = hypot(dx, dy);
- if (pamax) {
- pamax[gno] = atan2(-dy, dx);
- if (pamax[gno] <= -G_PI/2.0)
- pamax[gno] += G_PI;
- else if (pamax[gno] > G_PI/2.0)
- pamax[gno] -= G_PI;
- }
- }
- if (achull) {
- achull[gno] = grain_convex_hull_area(vertices, qh, qv);
- }
- if (circcr || circcx || circcy) {
- InscribedDisc circle = { 0.0, 0.0, 0.0, 0 };
-
- grain_convex_hull_centre(vertices, qh, qv,
- &circle.x, &circle.y);
- circle.R2 = minimize_circle_radius(&circle, vertices,
- qh, qv);
- improve_circumscribed_circle(&circle, vertices, qh, qv);
-
- if (circcr)
- circcr[gno] = sqrt(circle.R2);
- if (circcx)
- circcx[gno] = circle.x + data_field->xoff;
- if (circcy)
- circcy[gno] = circle.y + data_field->yoff;
- }
- }
- /* Finalize */
- g_array_free(vertices, TRUE);
- }
- /* XXX: This must go before GWY_GRAIN_VALUE_CENTER_X and
- * GWY_GRAIN_VALUE_CENTER_Y because we want them as pixel quantities. */
- if (quantity_data[GWY_GRAIN_VALUE_INSCRIBED_DISC_R]
- || quantity_data[GWY_GRAIN_VALUE_INSCRIBED_DISC_X]
- || quantity_data[GWY_GRAIN_VALUE_INSCRIBED_DISC_Y]) {
- gdouble *inscdr = quantity_data[GWY_GRAIN_VALUE_INSCRIBED_DISC_R];
- gdouble *inscdx = quantity_data[GWY_GRAIN_VALUE_INSCRIBED_DISC_X];
- gdouble *inscdy = quantity_data[GWY_GRAIN_VALUE_INSCRIBED_DISC_Y];
- guint *grain = NULL;
- guint grainsize = 0;
- PixelQueue *inqueue = g_slice_new0(PixelQueue);
- PixelQueue *outqueue = g_slice_new0(PixelQueue);
- GArray *candidates = g_array_new(FALSE, FALSE, sizeof(InscribedDisc));
- EdgeQueue edges = { 0, 0, NULL };
- InscribedDisc *cand;
-
- /*
- * For each grain:
- * Extract it, find all boundary pixels.
- * Use (octagnoal) erosion to find disc centre candidate(s).
- * For each candidate:
- * Find maximum disc that fits with this centre.
- * By expanding/moving try to find a larger disc until we cannot
- * improve it.
- */
- for (gno = 1; gno <= ngrains; gno++) {
- guint width, height, dist;
- gdouble dx, dy, centrex, centrey;
- guint w = bbox[4*gno + 2], h = bbox[4*gno + 3];
- gdouble xoff = qh*bbox[4*gno] + data_field->xoff,
- yoff = qv*bbox[4*gno + 1] + data_field->yoff;
- guint ncand;
-
- /* If the grain is rectangular, calculate the disc directly.
- * Large rectangular grains are rare but the point is to catch
- * grains with width of height of 1 here. */
- if (sizes[gno] == w*h) {
- dx = 0.5*w*qh;
- dy = 0.5*h*qv;
- if (inscdr)
- inscdr[gno] = 0.999*MIN(dx, dy);
- if (inscdx)
- inscdx[gno] = dx + xoff;
- if (inscdy)
- inscdy[gno] = dy + yoff;
- continue;
- }
-
- /* Upsampling twice combined with octagonal erosion has the nice
- * property that we get candidate pixels in places such as corners
- * or junctions of one-pixel thin lines. */
- grain = extract_upsampled_square_pixel_grain(grains, xres, gno,
- bbox + 4*gno,
- grain, &grainsize,
- &width, &height,
- qh, qv);
- /* Size of upsamples pixel in original pixel coordinates. Normally
- * equal to 1/2 and always approximately 1:1. */
- dx = w*(qh/qgeom)/width;
- dy = h*(qv/qgeom)/height;
- /* Grain centre in squeezed pixel coordinates within the bbox. */
- centrex = (xvalue[gno] + 0.5)*(qh/qgeom);
- centrey = (yvalue[gno] + 0.5)*(qv/qgeom);
-
- dist = simple_dist_trans(grain, width, height, TRUE,
- GWY_DISTANCE_TRANSFORM_OCTAGONAL48,
- inqueue, outqueue);
- if (dist % 2 == 0) {
- GWY_SWAP(PixelQueue*, inqueue, outqueue);
- }
-#if 0
- for (i = 0; i < height; i++) {
- for (j = 0; j < width; j++) {
- if (!grain[i*width + j])
- g_printerr("..");
- else
- g_printerr("%02u", grain[i*width + j]);
- g_printerr("%c", j == width-1 ? '\n' : ' ');
- }
- }
-#endif
- /* Now inqueue is always non-empty and contains max-distance
- * pixels of the upscaled grain. */
- find_disc_centre_candidates(candidates, inqueue,
- grain, width, height,
- dx, dy, centrex, centrey);
- find_all_edges(&edges, grains, xres, gno, bbox + 4*gno,
- qh/qgeom, qv/qgeom);
-
- /* Try a few first candidates for the inscribed disc centre. */
- ncand = MIN(15, candidates->len);
- for (i = 0; i < ncand; i++) {
- cand = &g_array_index(candidates, InscribedDisc, i);
- improve_inscribed_disc(cand, &edges, dist);
- }
-
- cand = &g_array_index(candidates, InscribedDisc, 0);
- for (i = 1; i < ncand; i++) {
- if (g_array_index(candidates, InscribedDisc, i).R2 > cand->R2)
- cand = &g_array_index(candidates, InscribedDisc, i);
- }
-
- if (inscdr)
- inscdr[gno] = sqrt(cand->R2 * qarea);
- if (inscdx)
- inscdx[gno] = cand->x*qgeom + xoff;
- if (inscdy)
- inscdy[gno] = cand->y*qgeom + yoff;
- }
-
- g_free(grain);
- g_free(inqueue->points);
- g_free(outqueue->points);
- g_slice_free(PixelQueue, inqueue);
- g_slice_free(PixelQueue, outqueue);
- g_free(edges.edges);
- g_array_free(candidates, TRUE);
- }
- /* XXX: This must go before GWY_GRAIN_VALUE_CENTER_X and
- * GWY_GRAIN_VALUE_CENTER_Y because we want them as pixel quantities. */
- if ((p = quantity_data[GWY_GRAIN_VALUE_MEAN_RADIUS])) {
- guint *blen = g_new0(guint, ngrains + 1);
-
- k = 0;
- for (i = 0; i < yres; i++) {
- for (j = 0; j < xres; j++, k++) {
- gdouble xc, yc;
-
- if (!(gno = grains[k]))
- continue;
-
- xc = xvalue[gno];
- yc = yvalue[gno];
- if (!i || !grains[k - xres]) {
- p[gno] += hypot(qh*(j+0.5 - xc), qv*(i - yc));
- p[gno] += hypot(qh*(j+1 - xc), qv*(i - yc));
- blen[gno] += 2;
- }
- if (!j || !grains[k-1]) {
- p[gno] += hypot(qh*(j - xc), qv*(i - yc));
- p[gno] += hypot(qh*(j - xc), qv*(i+0.5 - yc));
- blen[gno] += 2;
- }
- if (j == xres-1 || !grains[k+1]) {
- p[gno] += hypot(qh*(j+1 - xc), qv*(i+0.5 - yc));
- p[gno] += hypot(qh*(j+1 - xc), qv*(i+1 - yc));
- blen[gno] += 2;
- }
- if (i == yres-1 || !grains[k + xres]) {
- p[gno] += hypot(qh*(j - xc), qv*(i+1 - yc));
- p[gno] += hypot(qh*(j+0.5 - xc), qv*(i+1 - yc));
- blen[gno] += 2;
- }
- }
- }
-
- for (gno = 1; gno <= ngrains; gno++)
- p[gno] /= blen[gno];
-
- g_free(blen);
- }
- if (quantity_data[GWY_GRAIN_VALUE_EQUIV_ELLIPSE_MAJOR]
- || quantity_data[GWY_GRAIN_VALUE_EQUIV_ELLIPSE_MINOR]
- || quantity_data[GWY_GRAIN_VALUE_EQUIV_ELLIPSE_ANGLE]) {
- gdouble *amaj = quantity_data[GWY_GRAIN_VALUE_EQUIV_ELLIPSE_MAJOR];
- gdouble *amin = quantity_data[GWY_GRAIN_VALUE_EQUIV_ELLIPSE_MINOR];
- gdouble *phi = quantity_data[GWY_GRAIN_VALUE_EQUIV_ELLIPSE_ANGLE];
-
- for (gno = 1; gno <= ngrains; gno++) {
- guint n = sizes[gno];
- gdouble *lin = linear + 5*gno;
- gdouble Jxx = qh*qh*(lin[0] + n/12.0)*qarea;
- gdouble Jxy = qh*qv*lin[1]*qarea;
- gdouble Jyy = qv*qv*(lin[2] + n/12.0)*qarea;
-
- if (phi) {
- gdouble Jeps = 1e-9*MAX(Jxx, Jyy);
-
- if (fabs(Jxx - Jyy) > Jeps || fabs(Jxy) > Jeps)
- phi[gno] = 0.5*atan2(-2.0*Jxy, Jxx - Jyy);
- else
- phi[gno] = 0.0;
- }
-
- if (amaj || amin) {
- gdouble u = Jxx + Jyy,
- v = hypot(2.0*Jxy, Jxx - Jyy),
- w = sqrt(G_PI*sqrt(Jxx*Jyy - Jxy*Jxy));
-
- if (amaj)
- amaj[gno] = sqrt((u + v)/w);
- if (amin)
- amin[gno] = sqrt((u - v)/w);
- }
- }
-
- }
- if ((p = quantity_data[GWY_GRAIN_VALUE_CENTER_X])) {
- for (gno = 0; gno <= ngrains; gno++)
- p[gno] = qh*(p[gno] + 0.5) + data_field->xoff;
- }
- if ((p = quantity_data[GWY_GRAIN_VALUE_CENTER_Y])) {
- for (gno = 0; gno <= ngrains; gno++)
- p[gno] = qv*(p[gno] + 0.5) + data_field->yoff;
- }
- if (quantity_data[GWY_GRAIN_VALUE_VOLUME_0]
- || quantity_data[GWY_GRAIN_VALUE_VOLUME_MIN]) {
- gdouble *pv0 = quantity_data[GWY_GRAIN_VALUE_VOLUME_0];
- gdouble *pvm = quantity_data[GWY_GRAIN_VALUE_VOLUME_MIN];
-
- if (pv0) {
- integrate_grain_volume0(d, grains, xres, yres, pv0, ngrains, qarea);
- if (pvm) {
- for (gno = 0; gno <= ngrains; gno++)
- pvm[gno] = pv0[gno] - qarea*min[gno]*sizes[gno];
- }
- }
- else {
- g_assert(pvm);
- integrate_grain_volume0(d, grains, xres, yres, pvm, ngrains, qarea);
- for (gno = 0; gno <= ngrains; gno++)
- pvm[gno] -= qarea*min[gno]*sizes[gno];
- }
- }
- if ((p = quantity_data[GWY_GRAIN_VALUE_VOLUME_LAPLACE])) {
- /* Fail gracefully when there is one big `grain' over all data. */
- if (ngrains == 1 && sizes[1] == xres*yres)
- p[1] = 0.0;
- else {
- GwyDataField *difference = gwy_data_field_duplicate(data_field);
- GwyDataField *mask = gwy_data_field_new_alike(data_field, FALSE);
- gdouble *m = mask->data;
-
- for (k = 0; k < nn; k++)
- m[k] = grains[k];
-
- gwy_data_field_laplace_solve(difference, mask, -1, 0.4);
- g_object_unref(mask);
- gwy_data_field_subtract_fields(difference, data_field, difference);
- integrate_grain_volume0(difference->data, grains, xres, yres, p,
- ngrains, qarea);
- g_object_unref(difference);
- }
- }
- if (quantity_data[GWY_GRAIN_VALUE_SLOPE_THETA]
- || quantity_data[GWY_GRAIN_VALUE_SLOPE_PHI]) {
- gdouble *ptheta = quantity_data[GWY_GRAIN_VALUE_SLOPE_THETA];
- gdouble *pphi = quantity_data[GWY_GRAIN_VALUE_SLOPE_PHI];
-
- for (gno = 1; gno <= ngrains; gno++) {
- gdouble xx, yy, xy, xz, yz, det, bx, by;
- gdouble *lin = linear + 5*gno;
-
- xx = lin[0];
- xy = lin[1];
- yy = lin[2];
- xz = lin[3];
- yz = lin[4];
- det = xx*yy - xy*xy;
- if (det) {
- bx = (xz*yy - xy*yz)/(qh*det);
- by = (yz*xx - xy*xz)/(qv*det);
- if (ptheta)
- ptheta[gno] = atan(hypot(bx, by));
- if (pphi)
- pphi[gno] = atan2(by, -bx);
- }
- else {
- if (ptheta)
- ptheta[gno] = 0.0;
- if (pphi)
- pphi[gno] = 0.0;
- }
- }
- }
- if (quantity_data[GWY_GRAIN_VALUE_CURVATURE_CENTER_X]
- || quantity_data[GWY_GRAIN_VALUE_CURVATURE_CENTER_Y]
- || quantity_data[GWY_GRAIN_VALUE_CURVATURE_CENTER_Z]
- || quantity_data[GWY_GRAIN_VALUE_CURVATURE1]
- || quantity_data[GWY_GRAIN_VALUE_CURVATURE2]
- || quantity_data[GWY_GRAIN_VALUE_CURVATURE_ANGLE1]
- || quantity_data[GWY_GRAIN_VALUE_CURVATURE_ANGLE2]) {
- gdouble *px = quantity_data[GWY_GRAIN_VALUE_CURVATURE_CENTER_X];
- gdouble *py = quantity_data[GWY_GRAIN_VALUE_CURVATURE_CENTER_Y];
- gdouble *pz = quantity_data[GWY_GRAIN_VALUE_CURVATURE_CENTER_Z];
- gdouble *pk1 = quantity_data[GWY_GRAIN_VALUE_CURVATURE1];
- gdouble *pk2 = quantity_data[GWY_GRAIN_VALUE_CURVATURE2];
- gdouble *pa1 = quantity_data[GWY_GRAIN_VALUE_CURVATURE_ANGLE1];
- gdouble *pa2 = quantity_data[GWY_GRAIN_VALUE_CURVATURE_ANGLE2];
- gdouble mx = sqrt(qh/qv), my = sqrt(qv/qh);
-
- for (gno = 1; gno <= ngrains; gno++) {
- /* a:
- * 0 [<1>
- * 1 <x> <x²>
- * 3 <y> <xy> <y²>
- * 6 <x²> <x³> <x²y> <x⁴>
- * 10 <xy> <x²y> <xy²> <x³y> <x²y²>
- * 15 <y²> <xy²> <y³> <x²y²> <xy³> <y⁴>]
- * b: [<z> <xz> <yz> <x²z> <xyz> <y²z>]
- */
- gdouble a[21], b[6];
- gdouble *lin = linear + 5*gno, *quad = quadratic + 12*gno;
- guint n = sizes[gno];
-
- if (n >= 6) {
- a[0] = n;
- a[1] = a[3] = 0.0;
- a[2] = a[6] = lin[0];
- a[4] = a[10] = lin[1];
- a[5] = a[15] = lin[2];
- a[7] = quad[0];
- a[8] = a[11] = quad[1];
- a[9] = quad[4];
- a[12] = a[16] = quad[2];
- a[13] = quad[5];
- a[14] = a[18] = quad[6];
- a[17] = quad[3];
- a[19] = quad[7];
- a[20] = quad[8];
- if (gwy_math_choleski_decompose(6, a)) {
- b[0] = n*zvalue[gno];
- b[1] = lin[3];
- b[2] = lin[4];
- b[3] = quad[9];
- b[4] = quad[10];
- b[5] = quad[11];
- gwy_math_choleski_solve(6, a, b);
- /* Get pixel aspect ratio right while keeping pixel size
- * around 1. */
- b[1] /= mx;
- b[2] /= my;
- b[3] /= mx*mx;
- b[5] /= my*my;
- }
- else
- n = 0;
- }
-
- /* Recycle a[] for the curvature parameters. */
- if (n >= 6)
- gwy_math_curvature(b, a+0, a+1, a+2, a+3, a+4, a+5, a+6);
- else {
- a[0] = a[1] = a[2] = a[4] = a[5] = 0.0;
- a[3] = G_PI/2.0;
- a[6] = zvalue[gno];
- }
- if (pk1)
- pk1[gno] = a[0]/(qgeom*qgeom);
- if (pk2)
- pk2[gno] = a[1]/(qgeom*qgeom);
- if (pa1)
- pa1[gno] = a[2];
- if (pa2)
- pa2[gno] = a[3];
- if (px)
- px[gno] = qgeom*a[4] + xvalue[gno];
- if (py)
- py[gno] = qgeom*a[5] + yvalue[gno];
- if (pz)
- pz[gno] = a[6];
- }
- }
-
- /* Copy quantity values to all other instances of the same quantity in
- * @values. */
- gwy_clear(seen, NQ);
- for (i = 0; i < nquantities; i++) {
- GwyGrainQuantity quantity = quantities[i];
-
- if ((guint)quantity >= NQ || need_aux[quantity] == INVALID)
- continue;
-
- if (seen[quantity])
- gwy_assign(values[i], quantity_data[quantity], ngrains + 1);
- seen[quantity] = TRUE;
- }
-
- /* Finalize */
- for (l = buffers; l; l = g_list_next(l))
- g_free(l->data);
- g_list_free(buffers);
-
- return values;
-}
-
-/**
- * gwy_grain_quantity_needs_same_units:
- * @quantity: A grain quantity.
- *
- * Tests whether a grain quantity is defined only when lateral and value
- * units match.
- *
- * Returns: %TRUE if @quantity is meaningless when lateral and value units
- * differ, %FALSE if it is always defined.
- *
- * Since: 2.7
- **/
-gboolean
-gwy_grain_quantity_needs_same_units(GwyGrainQuantity quantity)
-{
- enum {
- no_same_units = ((ONE << GWY_GRAIN_VALUE_PROJECTED_AREA)
- | (ONE << GWY_GRAIN_VALUE_EQUIV_SQUARE_SIDE)
- | (ONE << GWY_GRAIN_VALUE_EQUIV_DISC_RADIUS)
- | (ONE << GWY_GRAIN_VALUE_MAXIMUM)
- | (ONE << GWY_GRAIN_VALUE_MINIMUM)
- | (ONE << GWY_GRAIN_VALUE_MEAN)
- | (ONE << GWY_GRAIN_VALUE_MEDIAN)
- | (ONE << GWY_GRAIN_VALUE_HALF_HEIGHT_AREA)
- | (ONE << GWY_GRAIN_VALUE_FLAT_BOUNDARY_LENGTH)
- | (ONE << GWY_GRAIN_VALUE_MINIMUM_BOUND_SIZE)
- | (ONE << GWY_GRAIN_VALUE_MINIMUM_BOUND_ANGLE)
- | (ONE << GWY_GRAIN_VALUE_MAXIMUM_BOUND_SIZE)
- | (ONE << GWY_GRAIN_VALUE_MAXIMUM_BOUND_ANGLE)
- | (ONE << GWY_GRAIN_VALUE_CENTER_X)
- | (ONE << GWY_GRAIN_VALUE_CENTER_Y)
- | (ONE << GWY_GRAIN_VALUE_VOLUME_0)
- | (ONE << GWY_GRAIN_VALUE_VOLUME_MIN)
- | (ONE << GWY_GRAIN_VALUE_VOLUME_LAPLACE)
- | (ONE << GWY_GRAIN_VALUE_SLOPE_PHI)
- | (ONE << GWY_GRAIN_VALUE_CURVATURE_CENTER_X)
- | (ONE << GWY_GRAIN_VALUE_CURVATURE_CENTER_Y)
- | (ONE << GWY_GRAIN_VALUE_CURVATURE_CENTER_Z)
- | (ONE << GWY_GRAIN_VALUE_CURVATURE_ANGLE1)
- | (ONE << GWY_GRAIN_VALUE_CURVATURE_ANGLE2)
- | (ONE << GWY_GRAIN_VALUE_INSCRIBED_DISC_R)
- | (ONE << GWY_GRAIN_VALUE_INSCRIBED_DISC_X)
- | (ONE << GWY_GRAIN_VALUE_INSCRIBED_DISC_Y)
- | (ONE << GWY_GRAIN_VALUE_CONVEX_HULL_AREA)
- | (ONE << GWY_GRAIN_VALUE_CIRCUMCIRCLE_R)
- | (ONE << GWY_GRAIN_VALUE_CIRCUMCIRCLE_X)
- | (ONE << GWY_GRAIN_VALUE_CIRCUMCIRCLE_Y)
- | (ONE << GWY_GRAIN_VALUE_MEAN_RADIUS)),
- same_units = ((ONE << GWY_GRAIN_VALUE_SLOPE_THETA)
- | (ONE << GWY_GRAIN_VALUE_SURFACE_AREA)
- | (ONE << GWY_GRAIN_VALUE_CURVATURE1)
- | (ONE << GWY_GRAIN_VALUE_CURVATURE2))
- };
-
- if ((ONE << quantity) & no_same_units)
- return FALSE;
- if ((ONE << quantity) & same_units)
- return TRUE;
- g_return_val_if_reached(FALSE);
-}
-
-/**
- * gwy_grain_quantity_get_units:
- * @quantity: A grain quantity.
- * @siunitxy: Lateral SI unit of data.
- * @siunitz: Value SI unit of data.
- * @result: An SI unit to set to the units of @quantity.
- * It can be %NULL, a new SI unit is created then and returned.
- *
- * Calculates the units of a grain quantity.
- *
- * Returns: When @result is %NULL, a newly creates SI unit that has to be
- * dereferenced when no longer used later. Otherwise @result itself
- * is simply returned, its reference count is NOT increased.
- *
- * Since: 2.7
- **/
-GwySIUnit*
-gwy_grain_quantity_get_units(GwyGrainQuantity quantity,
- GwySIUnit *siunitxy,
- GwySIUnit *siunitz,
- GwySIUnit *result)
-{
- enum {
- coord_units = ((ONE << GWY_GRAIN_VALUE_EQUIV_SQUARE_SIDE)
- | (ONE << GWY_GRAIN_VALUE_EQUIV_DISC_RADIUS)
- | (ONE << GWY_GRAIN_VALUE_FLAT_BOUNDARY_LENGTH)
- | (ONE << GWY_GRAIN_VALUE_MINIMUM_BOUND_SIZE)
- | (ONE << GWY_GRAIN_VALUE_MAXIMUM_BOUND_SIZE)
- | (ONE << GWY_GRAIN_VALUE_CENTER_X)
- | (ONE << GWY_GRAIN_VALUE_CENTER_Y)
- | (ONE << GWY_GRAIN_VALUE_CURVATURE_CENTER_X)
- | (ONE << GWY_GRAIN_VALUE_CURVATURE_CENTER_Y)
- | (ONE << GWY_GRAIN_VALUE_INSCRIBED_DISC_R)
- | (ONE << GWY_GRAIN_VALUE_INSCRIBED_DISC_X)
- | (ONE << GWY_GRAIN_VALUE_INSCRIBED_DISC_Y)
- | (ONE << GWY_GRAIN_VALUE_CIRCUMCIRCLE_R)
- | (ONE << GWY_GRAIN_VALUE_CIRCUMCIRCLE_X)
- | (ONE << GWY_GRAIN_VALUE_CIRCUMCIRCLE_Y)
- | (ONE << GWY_GRAIN_VALUE_MEAN_RADIUS)),
- icoord_units = ((ONE << GWY_GRAIN_VALUE_CURVATURE1)
- | (ONE << GWY_GRAIN_VALUE_CURVATURE2)),
- value_units = ((ONE << GWY_GRAIN_VALUE_MAXIMUM)
- | (ONE << GWY_GRAIN_VALUE_MINIMUM)
- | (ONE << GWY_GRAIN_VALUE_MEAN)
- | (ONE << GWY_GRAIN_VALUE_MEDIAN)
- | (ONE << GWY_GRAIN_VALUE_CURVATURE_CENTER_Z)),
- area_units = ((ONE << GWY_GRAIN_VALUE_PROJECTED_AREA)
- | (ONE << GWY_GRAIN_VALUE_HALF_HEIGHT_AREA)
- | (ONE << GWY_GRAIN_VALUE_SURFACE_AREA)
- | (ONE << GWY_GRAIN_VALUE_CONVEX_HULL_AREA)),
- volume_units = ((ONE << GWY_GRAIN_VALUE_VOLUME_0)
- | (ONE << GWY_GRAIN_VALUE_VOLUME_MIN)
- | (ONE << GWY_GRAIN_VALUE_VOLUME_LAPLACE)),
- angle_units = ((ONE << GWY_GRAIN_VALUE_MINIMUM_BOUND_ANGLE)
- | (ONE << GWY_GRAIN_VALUE_MAXIMUM_BOUND_ANGLE)
- | (ONE << GWY_GRAIN_VALUE_SLOPE_PHI)
- | (ONE << GWY_GRAIN_VALUE_SLOPE_THETA)
- | (ONE << GWY_GRAIN_VALUE_CURVATURE_ANGLE1)
- | (ONE << GWY_GRAIN_VALUE_CURVATURE_ANGLE2))
- };
-
- g_return_val_if_fail(GWY_IS_SI_UNIT(siunitxy), result);
- g_return_val_if_fail(GWY_IS_SI_UNIT(siunitz), result);
-
- if ((ONE << quantity) & coord_units)
- return gwy_si_unit_power(siunitxy, 1, result);
- if ((ONE << quantity) & icoord_units)
- return gwy_si_unit_power(siunitxy, -1, result);
- if ((ONE << quantity) & value_units)
- return gwy_si_unit_power(siunitz, 1, result);
- if ((ONE << quantity) & area_units)
- return gwy_si_unit_power(siunitxy, 2, result);
- if ((ONE << quantity) & volume_units)
- return gwy_si_unit_power_multiply(siunitxy, 2, siunitz, 1, result);
- if ((ONE << quantity) & angle_units) {
- if (!result)
- return gwy_si_unit_new(NULL);
- gwy_si_unit_set_from_string(result, NULL);
- return result;
- }
-
- g_return_val_if_reached(result);
-}
-
-/**
- * gwy_data_field_grains_add:
- * @grain_field: Field of marked grains (mask).
- * @add_field: Field of marked grains (mask) to be added.
- *
- * Adds @add_field grains to @grain_field.
- *
- * Note: This function is equivalent to
- * |[
- * gwy_data_field_max_of_fields(grain_field, grain_field, add_field);
- * ]|
- **/
-void
-gwy_data_field_grains_add(GwyDataField *grain_field, GwyDataField *add_field)
-{
- gwy_data_field_max_of_fields(grain_field, grain_field, add_field);
-}
-
-/**
- * gwy_data_field_grains_intersect:
- * @grain_field: Field of marked grains (mask).
- * @intersect_field: Field of marked grains (mask).
- *
- * Performs intersection betweet two grain fields,
- * result is stored in @grain_field.
- *
- * Note: This function is equivalent to
- * |[
- * gwy_data_field_min_of_fields(grain_field, grain_field, intersect_field);
- * ]|
- **/
-void
-gwy_data_field_grains_intersect(GwyDataField *grain_field,
- GwyDataField *intersect_field)
-{
- gwy_data_field_min_of_fields(grain_field, grain_field, intersect_field);
-}
-
-/**
- * gwy_data_field_grains_invert:
- * @grain_field: Data field (mask) of marked grains.
- *
- * Inverts a data field representing a mask.
- *
- * All non-positive values are transformed to 1.0. All positive values are
- * transformed to 0.0.
- *
- * Since: 2.43
- **/
-void
-gwy_data_field_grains_invert(GwyDataField *grain_field)
-{
- guint xres, yres, k;
-
- g_return_if_fail(GWY_IS_DATA_FIELD(grain_field));
- xres = grain_field->xres;
- yres = grain_field->yres;
- for (k = 0; k < xres*yres; k++) {
- if (grain_field->data[k] > 0.0)
- grain_field->data[k] = 0.0;
- else
- grain_field->data[k] = 1.0;
- }
-}
-
-/**
- * gwy_data_field_grains_autocrop:
- * @mask_field: Data field representing a mask.
- * @symmetrically: %TRUE to remove borders symmetrically, i.e the same number
- * of pixels from left and right, and also top and bottom.
- * %FALSE to remove as many empty rows and columns as possible.
- * @left: Location to store how many column were removed from the left, or
- * %NULL.
- * @right: Location to store how many column were removed from the right, or
- * %NULL.
- * @up: Location to store how many row were removed from the top, or %NULL.
- * @down: Location to store how many row were removed from the bottom, or
- * %NULL.
- *
- * Removes empty border rows and columns from a data field representing a mask.
- *
- * If there are border rows and columns filled completely with non-positive
- * values the size of the data field is reduced, removing these rows. The
- * parameter @symmetrically controls whether the size reduction is maximum
- * possible or symmetrical.
- *
- * When there is no positive value in the field the field size is reduced to
- * the smallest possible. This means 1x1 for @symmetrical being %FALSE and
- * even original dimensions to 2 for @symmetrical being %TRUE.
- *
- * Returns: %TRUE if the field size was reduced at all. Detailed information
- * about the reduction can be obtained from @left, @right, @up and
- * @down.
- *
- * Since: 2.43
- **/
-gboolean
-gwy_data_field_grains_autocrop(GwyDataField *mask_field,
- gboolean symmetrically,
- guint *left,
- guint *right,
- guint *up,
- guint *down)
-{
- gint xres, yres, i, j, firstcol, firstrow, lastcol, lastrow;
- const gdouble *d;
-
- g_return_val_if_fail(GWY_IS_DATA_FIELD(mask_field), FALSE);
- xres = mask_field->xres;
- yres = mask_field->yres;
- firstcol = xres;
- firstrow = yres;
- lastcol = lastrow = -1;
- d = mask_field->data;
- for (i = 0; i < yres; i++) {
- for (j = 0; j < xres; j++, d++) {
- if (*d > 0.0) {
- if (G_UNLIKELY(i < firstrow))
- firstrow = i;
- if (G_UNLIKELY(j < firstcol))
- firstcol = j;
- if (G_UNLIKELY(i > lastrow))
- lastrow = i;
- if (G_UNLIKELY(j > lastcol))
- lastcol = j;
- }
- }
- }
- gwy_debug("first (%d,%d) last (%d,%d)",
- firstcol, firstrow, lastcol, lastrow);
- if (firstcol > lastcol) {
- g_assert(firstrow > lastrow);
- /* Anticipate the reduction to 2 for even-sized dimensions. */
- lastcol = (xres - 1)/2;
- firstcol = xres - lastcol;
- lastrow = (yres - 1)/2;
- firstrow = yres - lastrow;
- }
- if (symmetrically) {
- firstcol = MIN(firstcol, xres-1 - lastcol);
- lastcol = xres-1 - firstcol;
- firstrow = MIN(firstrow, yres-1 - lastrow);
- lastrow = yres-1 - firstrow;
- }
- lastcol++;
- lastrow++;
-
- if (left)
- *left = firstcol;
- if (right)
- *right = xres - lastcol;
- if (up)
- *up = firstrow;
- if (down)
- *down = yres - lastrow;
-
- gwy_debug("%dx%d at (%d,%d) of %dx%d",
- lastcol-firstcol, lastrow-firstrow, firstcol, firstrow,
- xres, yres);
- if (firstcol == 0 && firstrow == 0 && lastcol == xres && lastrow == yres)
- return FALSE;
-
- gwy_data_field_resize(mask_field, firstcol, firstrow, lastcol, lastrow);
- return TRUE;
-}
-
-void
-gwy_data_field_grains_splash_water(GwyDataField *data_field,
- GwyDataField *water,
- gint locate_steps,
- gdouble locate_dropsize)
-{
- GwyDataField *mark_dfield;
- gint i;
-
- g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
-
- mark_dfield = gwy_data_field_duplicate(data_field);
-
- /* odrop */
- gwy_data_field_clear(water);
- for (i = 0; i < locate_steps; i++)
- drop_step(mark_dfield, water, locate_dropsize);
-
- gwy_data_field_invalidate(water);
- g_object_unref(mark_dfield);
-}
-
-
-/****************************************************************************/
-/*private functions*/
-
-static gboolean
-step_by_one(GwyDataField *data_field, gint *rcol, gint *rrow)
-{
- gint xres, yres;
- gdouble a, b, c, d, v;
-
- xres = data_field->xres;
- yres = data_field->yres;
-
- if (*rcol < (xres - 1))
- a = data_field->data[*rcol + 1 + xres*(*rrow)];
- else
- a = -G_MAXDOUBLE;
-
- if (*rcol > 0)
- b = data_field->data[*rcol - 1 + xres*(*rrow)];
- else
- b = -G_MAXDOUBLE;
-
- if (*rrow < (yres - 1))
- c = data_field->data[*rcol + xres*(*rrow + 1)];
- else
- c = -G_MAXDOUBLE;
-
- if (*rrow > 0)
- d = data_field->data[*rcol + xres*(*rrow - 1)];
- else
- d = -G_MAXDOUBLE;
-
- v = data_field->data[(gint)(*rcol + xres*(*rrow))];
-
- if (v >= a && v >= b && v >= c && v >= d) {
- return TRUE;
- }
- else if (a >= v && a >= b && a >= c && a >= d) {
- *rcol += 1;
- return FALSE;
- }
- else if (b >= v && b >= a && b >= c && b >= d) {
- *rcol -= 1;
- return FALSE;
- }
- else if (c >= v && c >= b && c >= a && c >= d) {
- *rrow += 1;
- return FALSE;
- }
- else {
- *rrow -= 1;
- return FALSE;
- }
-
- return FALSE;
-}
-
-static void
-drop_step(GwyDataField *data_field, GwyDataField *water_field, gdouble dropsize)
-{
- gint xres, yres, i;
- gint col, row;
- gboolean retval;
-
- xres = data_field->xres;
- yres = data_field->yres;
-
- for (i = 0; i < xres*yres; i++) {
- row = (gint)floor((gdouble)i/(gdouble)xres);
- col = i - xres*row;
- if (col == 0 || row == 0 || col == (xres - 1) || row == (yres - 1))
- continue;
-
- do {
- retval = step_by_one(data_field, &col, &row);
- } while (!retval);
-
- water_field->data[col + xres*row] += 1;
- data_field->data[col + xres*row] -= dropsize;
-
- }
- gwy_data_field_invalidate(water_field);
- gwy_data_field_invalidate(data_field);
-}
-
-static void
-drop_minima(GwyDataField *water_field, GwyDataField *min_field, gint threshval)
-{
- gint xres, yres, i, j, ngrains;
- gint *grain_maxima, *grain_size;
- gdouble *data;
- gint *grains;
-
- xres = water_field->xres;
- yres = water_field->yres;
- data = water_field->data;
-
- grains = g_new0(gint, xres*yres);
- ngrains = gwy_data_field_number_grains(water_field, grains);
- grain_size = g_new0(gint, ngrains + 1);
- grain_maxima = g_new(gint, ngrains + 1);
- for (i = 1; i <= ngrains; i++)
- grain_maxima[i] = -1;
-
- /* sum grain sizes and find maxima */
- for (i = 0; i < xres*yres; i++) {
- j = grains[i];
- if (!j)
- continue;
-
- grain_size[j]++;
- if (grain_maxima[j] < 0
- || data[grain_maxima[j]] < data[i])
- grain_maxima[j] = i;
- }
- g_free(grains);
-
- /* mark maxima */
- for (i = 1; i <= ngrains; i++) {
- if (grain_size[i] <= threshval)
- continue;
-
- min_field->data[grain_maxima[i]] = i;
- }
-
- g_free(grain_maxima);
- g_free(grain_size);
-}
-
-static void
-process_mask(GwyDataField *grain_field, gint col, gint row)
-{
- gint xres, yres, ival[4], val, i;
- gboolean stat;
- gdouble *data;
-
- xres = grain_field->xres;
- yres = grain_field->yres;
- data = grain_field->data;
-
- if (col == 0 || row == 0 || col == (xres - 1) || row == (yres - 1)) {
- data[col + xres*row] = -1;
- return;
- }
-
- /*if this is grain or boundary, keep it */
- if (data[col + xres*row] != 0)
- return;
-
- /*if there is nothing around, do nothing */
- if ((fabs(data[col + 1 + xres*row]) + fabs(data[col - 1 + xres*row])
- + fabs(data[col + xres*(row + 1)]) + fabs(data[col + xres*(row - 1)]))
- == 0)
- return;
-
- /*now count the grain values around */
- ival[0] = data[col - 1 + xres*row];
- ival[1] = data[col + xres*(row - 1)];
- ival[2] = data[col + 1 + xres*row];
- ival[3] = data[col + xres*(row + 1)];
-
- val = 0;
- stat = FALSE;
- for (i = 0; i < 4; i++) {
- if (val > 0 && ival[i] > 0 && ival[i] != val) {
- /*if some value already was there and the now one is different */
- stat = TRUE;
- break;
- }
- else {
- /*ifthere is some value */
- if (ival[i] > 0) {
- val = ival[i];
- }
- }
- }
-
- /*it will be boundary or grain */
- data[col + xres*row] = stat ? -1 : val;
-}
-
-static void
-wdrop_step(GwyDataField *data_field, GwyDataField *min_field,
- GwyDataField *water_field, GwyDataField *grain_field,
- gdouble dropsize)
-{
- gint xres, yres, vcol, vrow, col, row, grain;
- gboolean retval;
-
- xres = data_field->xres;
- yres = data_field->yres;
-
- grain = 0;
- for (col = 0; col < xres; col++) {
- for (row = 0; row < yres; row++) {
- if (min_field->data[col + xres*row] > 0)
- grain_field->data[col + xres*row] = grain++;
- }
- }
- for (col = 1; col < xres - 1; col++) {
- for (row = 1; row < yres - 1; row++) {
-
- vcol = col;
- vrow = row;
- do {
- retval = step_by_one(data_field, &vcol, &vrow);
- } while (!retval);
-
- /*now, distinguish what to change at point vi, vj */
- process_mask(grain_field, vcol, vrow);
- water_field->data[vcol + xres*(vrow)] += 1;
- data_field->data[vcol + xres*(vrow)] -= dropsize;
-
- }
- }
-}
-
-static void
-mark_grain_boundaries(GwyDataField *grain_field)
-{
- gint xres, yres, col, row;
- GwyDataField *buffer;
- gdouble *data;
-
- xres = grain_field->xres;
- yres = grain_field->yres;
- /* FIXME: it is not necessary to duplicate complete data field to check
- * a few boundary pixels. */
- buffer = gwy_data_field_duplicate(grain_field);
- data = buffer->data;
-
- for (col = 1; col < xres - 1; col++) {
- for (row = 1; row < yres - 1; row++) {
- if (data[col + xres*row] != data[col + 1 + xres*row]
- || data[col + xres*row] != data[col + xres*(row + 1)])
- grain_field->data[col + xres*row] = 0;
- }
- }
- g_object_unref(buffer);
+ gwy_data_field_resize(mask_field, firstcol, firstrow, lastcol, lastrow);
+ return TRUE;
}
/* Merge grains i and j in map with full resolution */
@@ -4259,679 +1473,81 @@ gwy_data_field_fill_one_grain(gint xres,
listh[0] = listh[1] = initial;
nh = 2;
- while (nv) {
- /* go through vertical lines and expand them horizontally */
- for (i = 0; i < nv; i += 2) {
- for (p = listv[i]; p <= listv[i + 1]; p += xres) {
- gint start, stop;
-
- /* scan left */
- start = p - 1;
- stop = (p/xres)*xres;
- for (j = start; j >= stop; j--) {
- if (visited[j] || data[j] != look_for)
- break;
- visited[j] = grain_no;
- count++;
- }
- if (j < start) {
- listh[nh++] = j + 1;
- listh[nh++] = start;
- }
-
- /* scan right */
- start = p + 1;
- stop = (p/xres + 1)*xres;
- for (j = start; j < stop; j++) {
- if (visited[j] || data[j] != look_for)
- break;
- visited[j] = grain_no;
- count++;
- }
- if (j > start) {
- listh[nh++] = start;
- listh[nh++] = j - 1;
- }
- }
- }
- nv = 0;
-
- /* go through horizontal lines and expand them vertically */
- for (i = 0; i < nh; i += 2) {
- for (p = listh[i]; p <= listh[i + 1]; p++) {
- gint start, stop;
-
- /* scan up */
- start = p - xres;
- stop = p % xres;
- for (j = start; j >= stop; j -= xres) {
- if (visited[j] || data[j] != look_for)
- break;
- visited[j] = grain_no;
- count++;
- }
- if (j < start) {
- listv[nv++] = j + xres;
- listv[nv++] = start;
- }
-
- /* scan down */
- start = p + xres;
- stop = p % xres + n;
- for (j = start; j < stop; j += xres) {
- if (visited[j] || data[j] != look_for)
- break;
- visited[j] = grain_no;
- count++;
- }
- if (j > start) {
- listv[nv++] = start;
- listv[nv++] = j - xres;
- }
- }
- }
- nh = 0;
- }
-
- return count;
-}
-
-/* Euclidean distance transform */
-
-enum {
- SEDINF = 0x7fffffffu,
- QUEUED = 0x80000000u,
-};
-
-typedef struct {
- guint size;
- guint len;
- gint *data;
-} IntList;
-
-static inline IntList*
-int_list_new(guint prealloc)
-{
- IntList *list = g_slice_new0(IntList);
- prealloc = MAX(prealloc, 16);
- list->size = prealloc;
- list->data = g_new(gint, list->size);
- return list;
-}
-
-static inline void
-int_list_add(IntList *list, gint i)
-{
- if (G_UNLIKELY(list->len == list->size)) {
- list->size = MAX(2*list->size, 16);
- list->data = g_renew(gint, list->data, list->size);
- }
-
- list->data[list->len] = i;
- list->len++;
-}
-
-static inline void
-int_list_add_unique(IntList **plist, gint i)
-{
- IntList *list;
- guint j;
-
- if (!*plist)
- *plist = int_list_new(0);
-
- list = *plist;
- for (j = 0; j < list->len; j++) {
- if (list->data[j] == i)
- return;
- }
- int_list_add(list, i);
-}
-
-static void
-int_list_free(IntList *list)
-{
- g_free(list->data);
- g_slice_free(IntList, list);
-}
-
-
-// Set squared distance for all points that have an 8-neighbour outside and
-// add them to the queue.
-static void
-distance_transform_first_step(guint *distances,
- guint xres, guint yres,
- IntList *queue,
- gboolean from_border)
-{
- guint k = 0, j, i;
-
- queue->len = 0;
- for (i = 0; i < yres; i++) {
- gboolean first_row = (i == 0);
- gboolean last_row = (i == yres-1);
-
- for (j = 0; j < xres; j++, k++) {
- gboolean first_column = (j == 0);
- gboolean last_column = (j == xres-1);
-
- if (!distances[k])
- continue;
-
- if ((from_border && (first_row || first_column
- || last_row || last_column))
- || (!first_row && !distances[k-xres])
- || (!first_column && !distances[k-1])
- || (!last_column && !distances[k+1])
- || (!last_row && !distances[k+xres])) {
- distances[k] = 1;
- int_list_add(queue, k);
- }
- else if ((!first_row && !first_column && !distances[k-xres-1])
- || (!first_row && !last_column && !distances[k-xres+1])
- || (!last_row && !first_column && !distances[k+xres-1])
- || (!last_row && !last_column && !distances[k+xres+1])) {
- distances[k] = 2;
- int_list_add(queue, k);
- }
- }
- }
-}
-
-static void
-distance_transform_erode_sed(guint *distances, const guint *olddist,
- guint xres, guint yres,
- guint l,
- const IntList *inqueue,
- IntList *outqueue)
-{
- guint hvsed2 = 2*l - 1, diag2 = 2*hvsed2;
- guint q;
-
- outqueue->len = 0;
-
- for (q = 0; q < inqueue->len; q++) {
- guint k = inqueue->data[q], kk = k-xres-1;
- guint i = k/xres, j = k % xres;
- gboolean first_row = (i == 0);
- gboolean last_row = (i == yres-1);
- gboolean first_column = (j == 0);
- gboolean last_column = (j == xres-1);
- guint d2hv = olddist[k] + hvsed2, d2d = olddist[k] + diag2;
-
- if (!first_row && !first_column && (distances[kk] & ~QUEUED) > d2d) {
- if (!(distances[kk] & QUEUED))
- int_list_add(outqueue, kk);
- distances[kk] = QUEUED | d2d;
- }
- kk++;
- if (!first_row && (distances[kk] & ~QUEUED) > d2hv) {
- if (!(distances[kk] & QUEUED))
- int_list_add(outqueue, kk);
- distances[kk] = QUEUED | d2hv;
- }
- kk++;
- if (!first_row && !last_column && (distances[kk] & ~QUEUED) > d2d) {
- if (!(distances[kk] & QUEUED))
- int_list_add(outqueue, kk);
- distances[kk] = QUEUED | d2d;
- }
- kk += xres-2;
- if (!first_column && (distances[kk] & ~QUEUED) > d2hv) {
- if (!(distances[kk] & QUEUED))
- int_list_add(outqueue, kk);
- distances[kk] = QUEUED | d2hv;
- }
- kk += 2;
- if (!last_column && (distances[kk] & ~QUEUED) > d2hv) {
- if (!(distances[kk] & QUEUED))
- int_list_add(outqueue, kk);
- distances[kk] = QUEUED | d2hv;
- }
- kk += xres-2;
- if (!last_row && !first_column && (distances[kk] & ~QUEUED) > d2d) {
- if (!(distances[kk] & QUEUED))
- int_list_add(outqueue, kk);
- distances[kk] = QUEUED | d2d;
- }
- kk++;
- if (!last_row && (distances[kk] & ~QUEUED) > d2hv) {
- if (!(distances[kk] & QUEUED))
- int_list_add(outqueue, kk);
- distances[kk] = QUEUED | d2hv;
- }
- kk++;
- if (!last_row && !last_column && (distances[kk] & ~QUEUED) > d2d) {
- if (!(distances[kk] & QUEUED))
- int_list_add(outqueue, kk);
- distances[kk] = QUEUED | d2d;
- }
- }
-}
-
-/**
- * _gwy_distance_transform_raw:
- * @distances: Array @xres*@yres with nonzeroes within shapes. If all non-zero
- * values are %SEDINF you can pass %TRUE for @infinitised.
- * @workspace: Workspace of identical dimensions as @distances.
- * @xres: Width.
- * @yres: Height.
- * @inqueue: Pre-allocated queue used by the algorithm.
- * @outqueue: Second pre-allocated queue used by the algorithm.
- * @from_border: %TRUE to consider image edges to be grain boundaries.
- *
- * Performs distance transformation.
- *
- * When it finishes non-zero values in @distances are squared Euclidean
- * distances from outside pixels (including outside the field).
- *
- * Workspace objects @workspace, @inqueue and @outqueue do not carry any
- * information. They are allocated by the caller to enable an efficient
- * repeated use.
- **/
-static void
-distance_transform_raw(guint *distances, guint *workspace,
- guint xres, guint yres,
- IntList *inqueue, IntList *outqueue,
- gboolean from_border)
-{
- guint l, q;
-
- distance_transform_first_step(distances, xres, yres, inqueue, from_border);
-
- for (l = 2; inqueue->len; l++) {
- gint *qdata;
-
- for (q = 0; q < inqueue->len; q++) {
- guint k = inqueue->data[q];
- workspace[k] = distances[k];
- }
- distance_transform_erode_sed(distances, workspace, xres, yres, l,
- inqueue, outqueue);
-
- qdata = outqueue->data;
- for (q = outqueue->len; q; q--, qdata++)
- distances[*qdata] &= ~QUEUED;
-
- GWY_SWAP(IntList*, inqueue, outqueue);
- }
-}
-
-static void
-gwy_data_field_grain_distance_transform_internal(GwyDataField *data_field,
- gboolean from_border)
-{
- IntList *inqueue, *outqueue;
- guint xres, yres, k, inisize;
- guint *distances, *workspace;
- gdouble *d;
-
- g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
-
- xres = data_field->xres;
- yres = data_field->yres;
- d = data_field->data;
- distances = g_new(guint, xres*yres);
- workspace = g_new(guint, xres*yres);
-
- for (k = 0; k < xres*yres; k++)
- distances[k] = (d[k] > 0.0) ? SEDINF : 0;
-
- inisize = (guint)(8*sqrt(xres*yres) + 16);
- inqueue = int_list_new(inisize);
- outqueue = int_list_new(inisize);
-
- distance_transform_raw(distances, workspace, xres, yres, inqueue, outqueue,
- from_border);
-
- int_list_free(inqueue);
- int_list_free(outqueue);
-
- for (k = 0; k < xres*yres; k++)
- d[k] = sqrt(distances[k]);
- gwy_data_field_invalidate(data_field);
-
- g_free(workspace);
- g_free(distances);
-}
-
-/**
- * gwy_data_field_grain_distance_transform:
- * @data_field: A data field with zeroes in empty space and nonzeroes in
- * grains.
- *
- * Performs Euclidean distance transform of a data field with grains.
- *
- * Each non-zero value will be replaced with Euclidean distance to the grain
- * boundary, measured in pixels.
- *
- * See also gwy_data_field_grain_simple_dist_trans() for simple distance
- * transforms such as city-block or chessboard.
- *
- * Since: 2.36
- **/
-void
-gwy_data_field_grain_distance_transform(GwyDataField *data_field)
-{
- gwy_data_field_grain_distance_transform_internal(data_field, TRUE);
-}
-
-/* Perform a cityblock, chessboard or octagonal distance transform of given
- * type using provided queues. */
-static guint
-simple_dist_trans(gint *grain, guint width, guint height,
- gboolean from_border, GwyDistanceTransformType dtype,
- PixelQueue *inqueue, PixelQueue *outqueue)
-{
- ErodeFunc erode = NULL;
- guint dist = 1;
-
- inqueue->len = outqueue->len = 0;
-
- if (dtype == GWY_DISTANCE_TRANSFORM_CONN4
- || dtype == GWY_DISTANCE_TRANSFORM_OCTAGONAL48)
- init_erosion_4(grain, width, height, from_border, inqueue);
- else if (dtype == GWY_DISTANCE_TRANSFORM_CONN8
- || dtype == GWY_DISTANCE_TRANSFORM_OCTAGONAL84)
- init_erosion_8(grain, width, height, from_border, inqueue);
-
- if (dtype == GWY_DISTANCE_TRANSFORM_CONN4
- || dtype == GWY_DISTANCE_TRANSFORM_OCTAGONAL84)
- erode = erode_4;
- else if (dtype == GWY_DISTANCE_TRANSFORM_CONN8
- || dtype == GWY_DISTANCE_TRANSFORM_OCTAGONAL48)
- erode = erode_8;
-
- g_return_val_if_fail(erode, 0);
-
- while (TRUE) {
- if (!erode(grain, width, height, dist, inqueue, outqueue))
- break;
- GWY_SWAP(PixelQueue*, inqueue, outqueue);
- dist++;
-
- if (dtype == GWY_DISTANCE_TRANSFORM_OCTAGONAL48
- || dtype == GWY_DISTANCE_TRANSFORM_OCTAGONAL84)
- erode = (erode == erode_4) ? erode_8 : erode_4;
- }
-
- if (!from_border) {
- guint k;
-
- /* Fix single-pixel grains touching the image borders. */
- for (k = 0; k < width; k++) {
- if (grain[k] == G_MAXUINT)
- grain[k] = 1;
- if (grain[width*(height-1) + k] == G_MAXUINT)
- grain[width*(height-1) + k] = 1;
- }
-
- for (k = 0; k < height; k++) {
- if (grain[k*width] == G_MAXUINT)
- grain[k*width] = 1;
- if (grain[k*width + width-1] == G_MAXUINT)
- grain[k*width + width-1] = 1;
- }
- }
-
- return dist;
-}
-
-static void
-average_octagonal_dt(GwyDataField *dfield, gboolean from_border)
-{
- GwyDataField *tmp;
-
- tmp = gwy_data_field_duplicate(dfield);
- gwy_data_field_grain_simple_dist_trans(dfield,
- GWY_DISTANCE_TRANSFORM_OCTAGONAL48,
- from_border);
- gwy_data_field_grain_simple_dist_trans(tmp,
- GWY_DISTANCE_TRANSFORM_OCTAGONAL84,
- from_border);
- gwy_data_field_sum_fields(dfield, dfield, tmp);
- gwy_data_field_multiply(dfield, 0.5);
- g_object_unref(tmp);
-}
-
-/**
- * gwy_data_field_grain_simple_dist_trans:
- * @data_field: A data field with zeroes in empty space and nonzeroes in
- * grains.
- * @dtype: Type of simple distance to use.
- * @from_border: %TRUE to consider image edges to be grain boundaries.
- *
- * Performs a distance transform of a data field with grains.
- *
- * Each non-zero value will be replaced with a distance to the grain boundary,
- * measured in pixels.
- *
- * Note this function can calculate the true Euclidean distance transform
- * only since 2.43. Use gwy_data_field_grain_distance_transform() for the EDT
- * if you need compatibility with older versions.
- *
- * Since: 2.41
- **/
-void
-gwy_data_field_grain_simple_dist_trans(GwyDataField *data_field,
- GwyDistanceTransformType dtype,
- gboolean from_border)
-{
- guint *grains = NULL;
- PixelQueue *inqueue, *outqueue;
- gdouble *d;
- guint xres, yres, k;
-
- g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
-
- if (dtype == GWY_DISTANCE_TRANSFORM_EUCLIDEAN) {
- gwy_data_field_grain_distance_transform_internal(data_field,
- from_border);
- return;
- }
- if (dtype == GWY_DISTANCE_TRANSFORM_OCTAGONAL) {
- average_octagonal_dt(data_field, from_border);
- return;
- }
-
- g_return_if_fail(dtype <= GWY_DISTANCE_TRANSFORM_OCTAGONAL84);
-
- xres = data_field->xres;
- yres = data_field->yres;
- d = data_field->data;
- inqueue = g_slice_new0(PixelQueue);
- outqueue = g_slice_new0(PixelQueue);
- grains = g_new(guint, xres*yres);
- for (k = 0; k < xres*yres; k++)
- grains[k] = (d[k] > 0.0) ? G_MAXUINT : 0;
-
- simple_dist_trans(grains, xres, yres, from_border, dtype,
- inqueue, outqueue);
-
- for (k = 0; k < xres*yres; k++)
- d[k] = grains[k];
-
- g_free(grains);
- g_free(inqueue->points);
- g_free(outqueue->points);
- g_slice_free(PixelQueue, inqueue);
- g_slice_free(PixelQueue, outqueue);
-}
-
-/**
- * gwy_data_field_grains_shrink:
- * @data_field: A data field with zeroes in empty space and nonzeroes in
- * grains.
- * @amount: How much the grains should be reduced, in pixels. It is inclusive,
- * i.e. pixels that are @amount far from the border will be removed.
- * @dtype: Type of simple distance to use.
- * @from_border: %TRUE to consider image edges to be grain boundaries.
- * %FALSE to reduce grains touching field boundaries only along
- * the boundaries.
- *
- * Erodes a data field containing mask by specified amount using a distance
- * measure.
- *
- * Non-zero pixels in @data_field will be replaced with zeroes if they are not
- * farther than @amount from the grain boundary as defined by @dtype.
- *
- * Since: 2.43
- **/
-void
-gwy_data_field_grains_shrink(GwyDataField *data_field,
- gdouble amount,
- GwyDistanceTransformType dtype,
- gboolean from_border)
-{
- GwyDataField *edt;
- guint xres, yres, k;
-
- g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
- g_return_if_fail(dtype <= GWY_DISTANCE_TRANSFORM_EUCLIDEAN);
-
- if (amount < 0.5)
- return;
-
- xres = data_field->xres;
- yres = data_field->yres;
- edt = gwy_data_field_duplicate(data_field);
- gwy_data_field_grain_simple_dist_trans(edt, dtype, from_border);
- for (k = 0; k < xres*yres; k++) {
- if (edt->data[k] <= amount + 1e-9)
- data_field->data[k] = 0.0;
- }
-
- g_object_unref(edt);
- gwy_data_field_invalidate(data_field);
-}
-
-static gint
-compare_distant_points(gconstpointer pa, gconstpointer pb)
-{
- const DistantPoint *a = (const DistantPoint*)pa;
- const DistantPoint *b = (const DistantPoint*)pb;
-
- if (a->distance < b->distance)
- return -1;
- if (a->distance > b->distance)
- return 1;
- if (a->i < b->i)
- return -1;
- if (a->i > b->i)
- return 1;
- if (a->j < b->j)
- return -1;
- if (a->j > b->j)
- return 1;
- return 0;
-}
-
-static void
-grow_without_merging(GwyDataField *dfield, GwyDataField *edt, gdouble amount)
-{
- GArray *array;
- guint xres, yres, i, j, k, m;
- gdouble *d, *e;
- gint *grains;
+ while (nv) {
+ /* go through vertical lines and expand them horizontally */
+ for (i = 0; i < nv; i += 2) {
+ for (p = listv[i]; p <= listv[i + 1]; p += xres) {
+ gint start, stop;
- xres = dfield->xres;
- yres = dfield->yres;
- d = dfield->data;
- e = edt->data;
- grains = g_new0(gint, xres*yres);
- if (!gwy_data_field_number_grains(dfield, grains)) {
- g_free(grains);
- return;
- }
+ /* scan left */
+ start = p - 1;
+ stop = (p/xres)*xres;
+ for (j = start; j >= stop; j--) {
+ if (visited[j] || data[j] != look_for)
+ break;
+ visited[j] = grain_no;
+ count++;
+ }
+ if (j < start) {
+ listh[nh++] = j + 1;
+ listh[nh++] = start;
+ }
- array = g_array_sized_new(FALSE, FALSE, sizeof(DistantPoint), 1000);
- for (i = 0; i < yres; i++) {
- for (j = 0; j < xres; j++) {
- gdouble eij = e[i*xres + j];
- if (eij > 0.0 && eij <= amount) {
- DistantPoint dp = { eij, i, j };
- g_array_append_val(array, dp);
+ /* scan right */
+ start = p + 1;
+ stop = (p/xres + 1)*xres;
+ for (j = start; j < stop; j++) {
+ if (visited[j] || data[j] != look_for)
+ break;
+ visited[j] = grain_no;
+ count++;
+ }
+ if (j > start) {
+ listh[nh++] = start;
+ listh[nh++] = j - 1;
+ }
}
}
- }
- g_array_sort(array, compare_distant_points);
-
- for (m = 0; m < array->len; m++) {
- const DistantPoint *dp = &g_array_index(array, DistantPoint, m);
- gint g1, g2, g3, g4, gno;
-
- k = dp->i*xres + dp->j;
- g1 = dp->i > 0 ? grains[k-xres] : 0;
- g2 = dp->j > 0 ? grains[k-1] : 0;
- g3 = dp->j < xres-1 ? grains[k+1] : 0;
- g4 = dp->i < yres-1 ? grains[k+xres] : 0;
- /* If all are equal or zeroes then bitwise or gives us the nonzero
- * value sought. */
- gno = g1 | g2 | g3 | g4;
- if ((!g1 || g1 == gno)
- && (!g2 || g2 == gno)
- && (!g3 || g3 == gno)
- && (!g4 || g4 == gno)) {
- grains[k] = gno;
- d[k] = 1.0;
- }
- }
-
- g_array_free(array, TRUE);
- g_free(grains);
-}
-
-/**
- * gwy_data_field_grains_grow:
- * @data_field: A data field with zeroes in empty space and nonzeroes in
- * grains.
- * @amount: How much the grains should be expanded, in pixels. It is
- * inclusive, i.e. exterior pixels that are @amount far from the
- * border will be filled.
- * @dtype: Type of simple distance to use.
- * @prevent_merging: %TRUE to prevent grain merging, i.e. the growth stops
- * where two grains would merge. %FALSE to simply expand the
- * grains, without regard to grain connectivity.
- *
- * Dilates a data field containing mask by specified amount using a distance
- * measure.
- *
- * Non-positive pixels in @data_field will be replaced with ones if they are
- * not farther than @amount from the grain boundary as defined by @dtype.
- *
- * Since: 2.43
- **/
-void
-gwy_data_field_grains_grow(GwyDataField *data_field,
- gdouble amount,
- GwyDistanceTransformType dtype,
- gboolean prevent_merging)
-{
- GwyDataField *edt;
- guint xres, yres, k;
+ nv = 0;
- g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
- g_return_if_fail(dtype <= GWY_DISTANCE_TRANSFORM_EUCLIDEAN);
+ /* go through horizontal lines and expand them vertically */
+ for (i = 0; i < nh; i += 2) {
+ for (p = listh[i]; p <= listh[i + 1]; p++) {
+ gint start, stop;
- if (amount < 0.5)
- return;
+ /* scan up */
+ start = p - xres;
+ stop = p % xres;
+ for (j = start; j >= stop; j -= xres) {
+ if (visited[j] || data[j] != look_for)
+ break;
+ visited[j] = grain_no;
+ count++;
+ }
+ if (j < start) {
+ listv[nv++] = j + xres;
+ listv[nv++] = start;
+ }
- amount += 1e-9;
- xres = data_field->xres;
- yres = data_field->yres;
- edt = gwy_data_field_duplicate(data_field);
- gwy_data_field_grains_invert(edt);
- gwy_data_field_grain_simple_dist_trans(edt, dtype, FALSE);
- if (prevent_merging)
- grow_without_merging(data_field, edt, amount);
- else {
- for (k = 0; k < xres*yres; k++) {
- if (edt->data[k] <= amount)
- data_field->data[k] = 1.0;
+ /* scan down */
+ start = p + xres;
+ stop = p % xres + n;
+ for (j = start; j < stop; j += xres) {
+ if (visited[j] || data[j] != look_for)
+ break;
+ visited[j] = grain_no;
+ count++;
+ }
+ if (j > start) {
+ listv[nv++] = start;
+ listv[nv++] = j - xres;
+ }
+ }
}
+ nh = 0;
}
- g_object_unref(edt);
- gwy_data_field_invalidate(data_field);
+
+ return count;
}
/**
@@ -5101,707 +1717,6 @@ gwy_data_field_fill_voids(GwyDataField *data_field,
return changed_ever;
}
-static gint
-waterpour_decide(const gint *assigned, gint xres, gint yres, gint km)
-{
- gint i = km/xres, j = km % xres;
- gint idu = (i ? assigned[km-xres] : GRAIN_BARRIER),
- idl = (j ? assigned[km-1] : GRAIN_BARRIER),
- idr = (j < xres-1 ? assigned[km+1] : GRAIN_BARRIER),
- idd = (i < yres-1 ? assigned[km+xres] : GRAIN_BARRIER);
-
- if (idu == GRAIN_BARRIER || idu == 0) {
- if (idl == GRAIN_BARRIER || idl == 0) {
- if (idr == GRAIN_BARRIER || idr == 0) {
- if (idd == GRAIN_BARRIER || idd == 0)
- return 0;
- return idd;
- }
- if (idd == GRAIN_BARRIER || idd == 0|| idd == idr)
- return idr;
- return GRAIN_BARRIER;
- }
- if (idr == GRAIN_BARRIER || idr == 0 || idr == idl) {
- if (idd == GRAIN_BARRIER || idd == 0|| idd == idl)
- return idl;
- }
- return GRAIN_BARRIER;
- }
- if (idl == GRAIN_BARRIER || idl == 0 || idl == idu) {
- if (idr == GRAIN_BARRIER || idr == 0 || idr == idu) {
- if (idd == GRAIN_BARRIER || idd == 0 || idd == idu)
- return idu;
- }
- }
- return GRAIN_BARRIER;
-}
-
-static gint
-mark_one_grain(const gdouble *d, gint *assigned,
- gint xres, gint yres,
- gint km, gint gno,
- IntList *inqueue, IntList *outqueue)
-{
- gint m, i, j, count = 1;
- gdouble z = d[km];
-
- inqueue->len = 0;
- int_list_add(inqueue, km);
- assigned[km] = gno;
-
- while (inqueue->len) {
- outqueue->len = 0;
- for (m = 0; m < inqueue->len; m++) {
- km = inqueue->data[m];
- i = km/xres;
- j = km % xres;
-
- if (i > 0 && !assigned[km-xres] && d[km-xres] == z)
- int_list_add(outqueue, km-xres);
- if (j > 0 && !assigned[km-1] && d[km-1] == z)
- int_list_add(outqueue, km-1);
- if (j < xres-1 && !assigned[km+1] && d[km+1] == z)
- int_list_add(outqueue, km+1);
- if (i < yres-1 && !assigned[km+xres] && d[km+xres] == z)
- int_list_add(outqueue, km+xres);
- }
-
- inqueue->len = 0;
- for (m = 0; m < outqueue->len; m++) {
- km = outqueue->data[m];
- if (!assigned[km]) {
- assigned[km] = gno;
- int_list_add(inqueue, km);
- count++;
- }
- }
- }
-
- return count;
-}
-
-static void
-fix_grain_numbers(gint *grains, gint *buf, gint n)
-{
- gint gno = 0, k;
-
- for (k = 0; k < n; k++) {
- gint gnok = grains[k];
- if (gnok && !buf[gnok]) {
- buf[gnok] = ++gno;
- }
- }
- for (k = 0; k < n; k++)
- grains[k] = buf[grains[k]];
-}
-
-/**
- * gwy_data_field_waterpour:
- * @data_field: A data field to segmentate.
- * @result: Data field that will be filled with the resulting mask. It will be
- * resized to the dimensions of @data_field and its properties set
- * accordingly.
- * @grains: Optionally, an array with the same number of items as @data_field.
- * If non-%NULL, it will be filled with grain numbers in the same
- * manner as gwy_data_field_number_grains(). Pass %NULL to ignore.
- *
- * Performs the classical Vincent watershed segmentation of a data field.
- *
- * The segmentation always results in the entire field being masked with the
- * exception of thin (8-connectivity) lines separating the segments (grains).
- *
- * Compared to gwy_data_field_grains_mark_watershed(), this algorithm is very
- * fast. However, when used alone, it typically results in a serious
- * oversegmentation as each local minimum gives raise to a grain. Furthermore,
- * the full segmentation means that also pixels which would be considered
- * outside any grain in the topographical sense will be assigned to some
- * catchment basin. Therefore, pre- or postprocessing is usually necessary,
- * using the gradient image or a more sophisticated method.
- *
- * The function does not assign pixels with value %HUGE_VAL or larger to any
- * segment. This can be used to pre-mark certain areas explicitly as
- * boundaries.
- *
- * Since the algorithm numbers the grains as a side effect, you can pass a
- * @grains array and get the grain numbers immediatelly, avoiding the
- * relatively (although not drastically) expensive
- * gwy_data_field_number_grains() call.
- *
- * Returns: The number of segments (grains) in the result, excluding the
- * separators, i.e. the same convention as in
- * gwy_data_field_number_grains() is used.
- *
- * Since: 2.37
- **/
-gint
-gwy_data_field_waterpour(GwyDataField *data_field,
- GwyDataField *result,
- gint *grains)
-{
- IntList *flatqueue, *fillqueue;
- gint xres, yres, n, k, kq, gno;
- gint *queue, *assigned;
- const gdouble *d;
- gdouble *rd;
-
- g_return_val_if_fail(GWY_IS_DATA_FIELD(data_field), 0);
- g_return_val_if_fail(GWY_IS_DATA_FIELD(result), 0);
-
- xres = data_field->xres;
- yres = data_field->yres;
- n = xres*yres;
- gwy_data_field_resample(result, xres, yres, GWY_INTERPOLATION_NONE);
-
- queue = g_new(gint, n);
- for (k = 0; k < n; k++)
- queue[k] = k;
-
- d = data_field->data;
- waterpour_sort(d, queue, n);
-
- assigned = grains ? grains : g_new0(gint, n);
- flatqueue = int_list_new(0);
- fillqueue = int_list_new(0);
- kq = gno = 0;
- while (kq < n) {
- gint len = 1, todo, um;
- gdouble z;
-
- k = queue[kq];
- z = d[k];
- if (z >= HUGE_VAL)
- break;
-
- while (kq + len < n && d[queue[kq + len]] == z)
- len++;
-
- todo = len;
- while (todo) {
- gint m;
-
- um = GRAIN_BARRIER;
- flatqueue->len = 0;
- for (m = 0; m < len; m++) {
- gint km = queue[kq + m];
- gint id = assigned[km];
- if (id)
- continue;
-
- if ((id = waterpour_decide(assigned, xres, yres, km))) {
- /* Must postpone the grain number assignment. There may
- * be conflicts later so only queue the position; we have
- * to waterpour_decide() again. */
- int_list_add(flatqueue, km);
- }
- else if (um == GRAIN_BARRIER)
- um = m;
- }
-
- if (flatqueue->len) {
- /* We have some modifications to commit. */
- for (m = 0; m < flatqueue->len; m++) {
- gint km = flatqueue->data[m];
- gint id = waterpour_decide(assigned, xres, yres, km);
- g_assert(id);
- assigned[km] = id;
- }
- todo -= flatqueue->len;
- }
- else {
- /* We do not have any modifications. All unassigned pixels
- * of this height belong to new grains. */
- break;
- }
- }
-
- /* Create new grains from remaining pixels. */
- while (todo) {
- gint km = GRAIN_BARRIER;
- while (um < len) {
- k = queue[kq + um];
- um++;
- if (!assigned[k]) {
- km = k;
- break;
- }
- }
- g_assert(km != GRAIN_BARRIER);
- todo -= mark_one_grain(d, assigned, xres, yres,
- km, ++gno, flatqueue, fillqueue);
- }
-
- kq += len;
- }
-
- while (kq < n) {
- k = queue[kq++];
- assigned[k] = GRAIN_BARRIER;
- }
-
- rd = result->data;
- for (k = 0; k < n; k++) {
- gint gnok = assigned[k];
- gnok = (gnok == GRAIN_BARRIER) ? 0 : gnok;
- assigned[k] = gnok;
- rd[k] = !!gnok;
- }
-
- /* The grain numbering differs from gwy_data_field_number_grains() which
- * performs the numbering from top left to bottom right. Since we
- * guarantee stable grain numbers, renumber the grains to match that.
- * Recycle @queue as a scratch buffer. */
- if (grains) {
- gwy_clear(queue, gno+1);
- fix_grain_numbers(grains, queue, n);
- }
-
- int_list_free(fillqueue);
- int_list_free(flatqueue);
- g_free(queue);
- if (!grains)
- g_free(assigned);
-
- result->xreal = data_field->xreal;
- result->yreal = data_field->yreal;
- result->xoff = data_field->xoff;
- result->yoff = data_field->yoff;
-
- /* SI Units can be NULL */
- if (data_field->si_unit_xy && result->si_unit_xy)
- gwy_serializable_clone(G_OBJECT(data_field->si_unit_xy),
- G_OBJECT(result->si_unit_xy));
- else if (data_field->si_unit_xy && !result->si_unit_xy)
- result->si_unit_xy = gwy_si_unit_duplicate(data_field->si_unit_xy);
- else if (!data_field->si_unit_xy && result->si_unit_xy)
- GWY_OBJECT_UNREF(result->si_unit_xy);
-
- if (result->si_unit_z)
- gwy_si_unit_set_from_string(result->si_unit_z, NULL);
-
- gwy_data_field_invalidate(result);
-
- return gno;
-}
-
-/* Mark sharp maxima with 2, known non-maxima with 1. */
-static guint
-mark_maxima(GwyDataField *field,
- guint *types)
-{
- guint xres = field->xres, yres = field->yres;
- const gdouble *d = field->data;
- guint i, j, k = 0, unmarked = xres*yres;
-
- for (i = 0; i < yres; i++) {
- for (j = 0; j < xres; j++, k++) {
- /* Mark non-maxima. */
- if ((i && d[k] < d[k-xres])
- || (j && d[k] < d[k-1])
- || (j < xres-1 && d[k] < d[k+1])
- || (i < yres-1 && d[k] < d[k+xres])) {
- types[k] = 1;
- unmarked--;
- }
- /* Mark maxima. */
- else if ((!i || d[k] > d[k-xres])
- && (!j || d[k] > d[k-1])
- && (j == xres-1 || d[k] > d[k+1])
- && (i == yres-1 || d[k] > d[k+xres])) {
- types[k] = 2;
- unmarked--;
- }
- }
- }
-
- return unmarked;
-}
-
-/* Mark sharp minima with 2, known non-minima with 1. */
-static guint
-mark_minima(GwyDataField *field,
- guint *types)
-{
- guint xres = field->xres, yres = field->yres;
- const gdouble *d = field->data;
- guint i, j, k = 0, unmarked = xres*yres;
-
- for (i = 0; i < yres; i++) {
- for (j = 0; j < xres; j++, k++) {
- /* Mark non-minima. */
- if ((i && d[k] > d[k-xres])
- || (j && d[k] > d[k-1])
- || (j < xres-1 && d[k] > d[k+1])
- || (i < yres-1 && d[k] > d[k+xres])) {
- types[k] = 1;
- unmarked--;
- }
- /* Mark minima. */
- else if ((!i || d[k] < d[k-xres])
- && (!j || d[k] < d[k-1])
- && (j == xres-1 || d[k] < d[k+1])
- && (i == yres-1 || d[k] < d[k+xres])) {
- types[k] = 2;
- unmarked--;
- }
- }
- }
-
- return unmarked;
-}
-
-/* Propagate non-maxima type to all pixels of the same value. Or minima. This
- * alogorithm no longer depends on how the states was marked, it just
- * propagates the 1 state though identical values. */
-static void
-propagate_non_extrema_marking(guint *types, const gdouble *d,
- guint xres, guint yres)
-{
- IntList *inqueue = int_list_new(16);
- IntList *outqueue = int_list_new(16);
- guint i, j, m, k = 0;
-
- for (i = 0; i < yres; i++) {
- for (j = 0; j < xres; j++, k++) {
- if (types[k])
- continue;
- /* If the value is equal to some neighbour which is a known
- * non-maximum then this pixel is also non-maximum. (If the
- * neighbour is a known maximum this pixel cannot be unknown.) */
- if ((i && types[k-xres] && d[k] == d[k-xres])
- || (j && types[k-1] && d[k] == d[k-1])
- || (j < xres-1 && types[k+1] && d[k] == d[k+1])
- || (i < yres-1 && types[k+xres] && d[k] == d[k+xres])) {
- types[k] = 1;
- int_list_add(outqueue, k);
- }
- }
- }
- GWY_SWAP(IntList*, inqueue, outqueue);
-
- while (inqueue->len) {
- for (m = 0; m < inqueue->len; m++) {
- k = inqueue->data[m];
- i = k/xres;
- j = k % xres;
-
- /* Propagate the non-maximum type to all still unknown
- * neighbours. Since we set them to known immediately, double
- * queuing is avoided. */
- if (i && !types[k-xres]) {
- types[k-xres] = 1;
- int_list_add(outqueue, k-xres);
- }
- if (j && !types[k-1]) {
- types[k-1] = 1;
- int_list_add(outqueue, k-1);
- }
- if (j < xres-1 && !types[k+1]) {
- types[k+1] = 1;
- int_list_add(outqueue, k+1);
- }
- if (i < yres-1 && !types[k+xres]) {
- types[k+xres] = 1;
- int_list_add(outqueue, k+xres);
- }
- }
-
- inqueue->len = 0;
- GWY_SWAP(IntList*, inqueue, outqueue);
- }
-
- int_list_free(inqueue);
- int_list_free(outqueue);
-}
-
-/**
- * gwy_data_field_mark_extrema:
- * @dfield: A two-dimensional data field.
- * @extrema: Target field for the extrema mask.
- * @maxima: %TRUE to mark maxima, %FALSE to mark minima.
- *
- * Marks local maxima or minima in a two-dimensional field.
- *
- * Local (or regional) maximum is a contiguous set of pixels that have the same
- * value and this value is sharply greater than the value of any pixel touching
- * the set. A minimum is defined analogously. A field filled with a single
- * value is considered to have neither minimum nor maximum.
- *
- * Since: 2.37
- **/
-void
-gwy_data_field_mark_extrema(GwyDataField *dfield,
- GwyDataField *extrema,
- gboolean maxima)
-{
- gdouble min, max;
- guint xres, yres, unmarked, k;
- guint *types;
-
- g_return_if_fail(GWY_IS_DATA_FIELD(dfield));
- g_return_if_fail(GWY_IS_DATA_FIELD(extrema));
- xres = dfield->xres;
- yres = dfield->yres;
- g_return_if_fail(extrema->xres == xres);
- g_return_if_fail(extrema->yres == yres);
-
- gwy_data_field_clear(extrema);
-
- gwy_data_field_get_min_max(dfield, &min, &max);
- /* This takes care of 1×1 fields too. */
- if (min == max)
- return;
-
- types = g_new0(guint, xres*yres);
- unmarked = (maxima ? mark_maxima : mark_minima)(dfield, types);
-
- if (unmarked)
- propagate_non_extrema_marking(types, dfield->data, xres, yres);
-
- /* Mark 1 as 0 (non-extremum); mark 0 and 2 as 1 (extremum). The remaining
- 0s are exactly those flat areas which cannot be made non-maximum, i.e.
- they must be maxima. Assume extrema are relatively sparse so prefer
- fast iteration compared to fast mask bit setting. */
- for (k = 0; k < xres*yres; k++) {
- if (!(types[k] & 1))
- extrema->data[k] = 1.0;
- }
-
- g_free(types);
- gwy_data_field_invalidate(extrema);
-}
-
-/* Copyright (C) 1991, 1992, 1996, 1997, 1999 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Written by Douglas C. Schmidt (schmidt at ics.uci.edu).
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, write to the Free
- Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- MA 02110-1301, USA */
-
-/* If you consider tuning this algorithm, you should consult first:
- Engineering a sort function; Jon Bentley and M. Douglas McIlroy;
- Software - Practice and Experience; Vol. 23 (11), 1249-1265, 1993. */
-
-typedef struct {
- gdouble z;
- guint k;
-} Pair;
-
-#define is_smaller_pair(a, b) \
- ((a)->z < (b)->z || ((a)->z == (b)->z && (a)->k < (b)->k))
-
-#define PSWAP(x, y) GWY_SWAP(Pair, x, y)
-
-#define STACK_SIZE (CHAR_BIT * sizeof(gsize))
-#define PUSH(low, high) ((void) ((top->lo = (low)), (top->hi = (high)), ++top))
-#define POP(low, high) ((void) (--top, (low = top->lo), (high = top->hi)))
-#define STACK_NOT_EMPTY (stack < top)
-
-/* Order size using quicksort. This implementation incorporates
- four optimizations discussed in Sedgewick:
-
- 1. Non-recursive, using an explicit stack of pointer that store the
- next array partition to sort. To save time, this maximum amount
- of space required to store an array of SIZE_MAX is allocated on the
- stack. Assuming a 32-bit (64 bit) integer for size_t, this needs
- only 32 * sizeof(stack_node) == 256 bytes (for 64 bit: 1024 bytes).
- Pretty cheap, actually.
-
- 2. Chose the pivot element using a median-of-three decision tree.
- This reduces the probability of selecting a bad pivot value and
- eliminates certain extraneous comparisons.
-
- 3. Only quicksorts TOTAL_ELEMS / MAX_THRESH partitions, leaving
- insertion sort to order the MAX_THRESH items within each partition.
- This is a big win, since insertion sort is faster for small, mostly
- sorted array segments.
-
- 4. The larger of the two sub-partitions is always pushed onto the
- stack first, with the algorithm then concentrating on the
- smaller partition. This *guarantees* no more than log(n)
- stack size is needed (actually O(1) in this case)! */
-
-static void
-sort_pairs(Pair *array,
- gsize n)
-{
- /* Note: Specialization makes the insertion sort part relatively more
- * efficient, after some benchmarking this seems be about the best value
- * on Athlon 64. */
- enum { MAX_THRESH = 20 };
-
- // Stack node declarations used to store unfulfilled partition obligations.
- typedef struct {
- Pair *lo;
- Pair *hi;
- } stack_node;
-
- if (n < 2)
- /* Avoid lossage with unsigned arithmetic below. */
- return;
-
- if (n > MAX_THRESH) {
- Pair *lo = array;
- Pair *hi = lo + (n - 1);
- stack_node stack[STACK_SIZE];
- stack_node *top = stack + 1;
-
- while (STACK_NOT_EMPTY) {
- Pair *left_ptr;
- Pair *right_ptr;
-
- /* Select median value from among LO, MID, and HI. Rearrange
- LO and HI so the three values are sorted. This lowers the
- probability of picking a pathological pivot value and
- skips a comparison for both the LEFT_PTR and RIGHT_PTR in
- the while loops. */
-
- Pair *mid = lo + ((hi - lo) >> 1);
-
- if (is_smaller_pair(mid, lo))
- PSWAP(*mid, *lo);
- if (is_smaller_pair(hi, mid))
- PSWAP(*mid, *hi);
- else
- goto jump_over;
- if (is_smaller_pair(mid, lo))
- PSWAP(*mid, *lo);
-
-jump_over:
- left_ptr = lo + 1;
- right_ptr = hi - 1;
-
- /* Here's the famous ``collapse the walls'' section of quicksort.
- Gotta like those tight inner loops! They are the main reason
- that this algorithm runs much faster than others. */
- do {
- while (is_smaller_pair(left_ptr, mid))
- left_ptr++;
-
- while (is_smaller_pair(mid, right_ptr))
- right_ptr--;
-
- if (left_ptr < right_ptr) {
- PSWAP(*left_ptr, *right_ptr);
- if (mid == left_ptr)
- mid = right_ptr;
- else if (mid == right_ptr)
- mid = left_ptr;
- left_ptr++;
- right_ptr--;
- }
- else if (left_ptr == right_ptr) {
- left_ptr++;
- right_ptr--;
- break;
- }
- }
- while (left_ptr <= right_ptr);
-
- /* Set up pointers for next iteration. First determine whether
- left and right partitions are below the threshold size. If so,
- ignore one or both. Otherwise, push the larger partition's
- bounds on the stack and continue sorting the smaller one. */
-
- if ((gsize)(right_ptr - lo) <= MAX_THRESH) {
- if ((gsize)(hi - left_ptr) <= MAX_THRESH)
- /* Ignore both small partitions. */
- POP(lo, hi);
- else
- /* Ignore small left partition. */
- lo = left_ptr;
- }
- else if ((gsize)(hi - left_ptr) <= MAX_THRESH)
- /* Ignore small right partition. */
- hi = right_ptr;
- else if ((right_ptr - lo) > (hi - left_ptr)) {
- /* Push larger left partition indices. */
- PUSH(lo, right_ptr);
- lo = left_ptr;
- }
- else {
- /* Push larger right partition indices. */
- PUSH(left_ptr, hi);
- hi = right_ptr;
- }
- }
- }
-
- /* Once the BASE_PTR array is partially sorted by quicksort the rest
- is completely sorted using insertion sort, since this is efficient
- for partitions below MAX_THRESH size. BASE_PTR points to the beginning
- of the array to sort, and END_PTR points at the very last element in
- the array (*not* one beyond it!). */
-
- {
- Pair *const end_ptr = array + (n - 1);
- Pair *tmp_ptr = array;
- Pair *thresh = MIN(end_ptr, array + MAX_THRESH);
- Pair *run_ptr;
-
- /* Find smallest element in first threshold and place it at the
- array's beginning. This is the smallest array element,
- and the operation speeds up insertion sort's inner loop. */
-
- for (run_ptr = tmp_ptr + 1; run_ptr <= thresh; run_ptr++) {
- if (is_smaller_pair(run_ptr, tmp_ptr))
- tmp_ptr = run_ptr;
- }
-
- if (tmp_ptr != array)
- PSWAP(*tmp_ptr, *array);
-
- /* Insertion sort, running from left-hand-side up to right-hand-side.
- */
-
- run_ptr = array + 1;
- while (++run_ptr <= end_ptr) {
- tmp_ptr = run_ptr - 1;
- while (is_smaller_pair(run_ptr, tmp_ptr))
- tmp_ptr--;
-
- tmp_ptr++;
- if (tmp_ptr != run_ptr) {
- Pair *hi, *lo;
- Pair d;
-
- d = *run_ptr;
- for (hi = lo = run_ptr; --lo >= tmp_ptr; hi = lo)
- *hi = *lo;
- *hi = d;
- }
- }
- }
-}
-
-static void
-waterpour_sort(const gdouble *d, gint *idx, gint n)
-{
- Pair *pairs = g_new(Pair, n);
- gint k;
-
- for (k = 0; k < n; k++)
- pairs[k] = (Pair){ d[k], k };
-
- sort_pairs(pairs, n);
-
- for (k = 0; k < n; k++)
- idx[k] = pairs[k].k;
-
- g_free(pairs);
-}
-
/************************** Documentation ****************************/
/**
diff --git a/libprocess/grains.h b/libprocess/grains.h
index 4e9da26..3d2bad7 100644
--- a/libprocess/grains.h
+++ b/libprocess/grains.h
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: grains.h 19085 2016-10-16 12:17:32Z yeti-dn $
+ * @(#) $Id: grains.h 19511 2017-03-06 22:46:13Z yeti-dn $
* Copyright (C) 2003-2015 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -167,6 +167,7 @@ void gwy_data_field_grains_grow (GwyDataField *data_field,
gdouble amount,
GwyDistanceTransformType dtype,
gboolean prevent_merging);
+void gwy_data_field_grains_thin (GwyDataField *data_field);
gboolean gwy_data_field_fill_voids (GwyDataField *data_field,
gboolean nonsimple);
gint gwy_data_field_waterpour (GwyDataField *data_field,
diff --git a/libprocess/gwygrainvalue.c b/libprocess/gwygrainvalue.c
index 8c8b878..2e1dc46 100644
--- a/libprocess/gwygrainvalue.c
+++ b/libprocess/gwygrainvalue.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: gwygrainvalue.c 17175 2015-05-23 20:53:49Z yeti-dn $
+ * @(#) $Id: gwygrainvalue.c 19698 2017-05-03 20:18:10Z yeti-dn $
* Copyright (C) 2007 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -19,12 +19,10 @@
* Boston, MA 02110-1301, USA.
*/
-#include "config.h"
#include <stdlib.h>
#include <string.h>
#include <libgwyddion/gwymacros.h>
#include <libgwyddion/gwyexpr.h>
-#include <libgwyddion/gwyutils.h>
#include <libgwyddion/gwydebugobjects.h>
#include <libprocess/gwygrainvalue.h>
#include "gwyprocessinternal.h"
diff --git a/libprocess/gwyprocess.c b/libprocess/gwyprocess.c
index a093a60..29fa337 100644
--- a/libprocess/gwyprocess.c
+++ b/libprocess/gwyprocess.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: gwyprocess.c 19101 2016-10-19 12:56:46Z yeti-dn $
+ * @(#) $Id: gwyprocess.c 20128 2017-08-01 11:19:59Z yeti-dn $
* Copyright (C) 2003-2004 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -19,12 +19,7 @@
* Boston, MA 02110-1301, USA.
*/
-#include "config.h"
-
-#ifdef HAVE_FFTW3
#include <fftw3.h>
-#endif
-
#include <libgwyddion/gwyddion.h>
#include <libprocess/gwyprocess.h>
#include "gwyprocessinternal.h"
@@ -32,12 +27,10 @@
static void
gwy_process_import_fftw_wisdom(void)
{
-#ifdef HAVE_FFTW3
G_GNUC_UNUSED gboolean ok;
ok = fftw_import_system_wisdom();
gwy_debug("FFTW3 system wisdom imported: %d", ok);
-#endif
}
/**
@@ -78,6 +71,46 @@ gwy_process_type_init(void)
gwy_process_import_fftw_wisdom();
}
+/* Transfer units by value (gwy_foo_copy_units()). */
+void
+_gwy_assign_si_unit(GwySIUnit *source, GwySIUnit **dest)
+{
+ if (source == *dest)
+ return;
+
+ if (!source || gwy_si_unit_equal_string(source, NULL)) {
+ GWY_OBJECT_UNREF(*dest);
+ return;
+ }
+
+ if (*dest)
+ gwy_serializable_clone(G_OBJECT(source), G_OBJECT(*dest));
+ else
+ *dest = gwy_si_unit_duplicate(source);
+}
+
+/* Take unit object ownership -- @objmember is presumably an object member
+ * (gwy_foo_set_si_unit_x()). */
+void
+_gwy_set_object_si_unit(GwySIUnit *unit, GwySIUnit **objmember)
+{
+ GwySIUnit *tmp;
+
+ g_return_if_fail(!unit || GWY_IS_SI_UNIT(unit));
+
+ if (unit == *objmember)
+ return;
+
+ if (!unit || gwy_si_unit_equal_string(unit, NULL)) {
+ GWY_OBJECT_UNREF(*objmember);
+ return;
+ }
+
+ tmp = *objmember;
+ *objmember = g_object_ref(unit);
+ GWY_OBJECT_UNREF(tmp);
+}
+
/************************** Documentation ****************************/
/**
diff --git a/libprocess/gwyprocessenums.c b/libprocess/gwyprocessenums.c
index dd18136..029ed6d 100644
--- a/libprocess/gwyprocessenums.c
+++ b/libprocess/gwyprocessenums.c
@@ -1,6 +1,6 @@
/*
- * @(#) $Id: gwyprocessenums.c 19145 2016-10-31 16:19:12Z yeti-dn $
- * Copyright (C) 2005 David Necas (Yeti), Petr Klapetek.
+ * @(#) $Id: gwyprocessenums.c 20155 2017-08-03 14:52:21Z yeti-dn $
+ * Copyright (C) 2005-2017 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
* This program is free software; you can redistribute it and/or modify
@@ -528,6 +528,8 @@ gwy_masking_type_get_enum(void)
* 2.42).
* @GWY_LINE_STAT_VARIATION: Variation (integral of absolute value) (Since:
* 2.42).
+ * @GWY_LINE_STAT_MINPOS: Minimum position along the line (Since: 2.48).
+ * @GWY_LINE_STAT_MAXPOS: Maximum position along the line (Since: 2.48).
*
* Line statistical quantities to be requested with
* gwy_data_field_area_get_line_stats().
@@ -679,6 +681,20 @@ gwy_distance_transform_type_get_enum(void)
**/
/**
+ * GwyAffineScalingType:
+ * @GWY_AFFINE_SCALING_AS_GIVEN: Correct lattice vectors lengths are taken
+ * as given.
+ * @GWY_AFFINE_SCALING_PRESERVE_AREA: Correct lattice vectors are scaled to
+ * make the transformation area-preserving.
+ * @GWY_AFFINE_SCALING_PRESERVE_X: Correct lattice vectors are scaled to
+ * preserve the scale along @x-axis.
+ *
+ * Type of lattice vector scaling in affine transform preparation.
+ *
+ * Since: 2.49
+ **/
+
+/**
* GwyComputationStateType:
* @GWY_COMPUTATION_STATE_INIT: Iterator was set up, the next step will
* actually create temporary data structures
@@ -724,4 +740,49 @@ gwy_distance_transform_type_get_enum(void)
* </programlisting></informalexample>
**/
+GType
+gwy_computation_state_get_type(void)
+{
+ static GType compstate_type = 0;
+
+ if (G_UNLIKELY(!compstate_type))
+ compstate_type = g_pointer_type_register_static("GwyComputationState");
+
+ return compstate_type;
+}
+
+/**
+ * gwy_computation_state_get_state:
+ * @compstate: Computation state.
+ *
+ * Gets the state field of a computation state struct.
+ *
+ * Useful mostly for language bindings.
+ *
+ * Returns: The state field of @compstate.
+ *
+ * Since: 2.49
+ **/
+gint
+gwy_computation_state_get_state(GwyComputationState *compstate)
+{
+ return compstate->state;
+}
+
+/**
+ * gwy_computation_state_get_fraction:
+ * @compstate: Computation state.
+ *
+ * Gets the fraction field of a computation state struct.
+ *
+ * Returns: The fraction field of @compstate.
+ *
+ * Since: 2.49
+ **/
+gdouble
+gwy_computation_state_get_fraction(GwyComputationState *compstate)
+{
+ return compstate->fraction;
+}
+
/* vim: set cin et ts=4 sw=4 cino=>1s,e0,n0,f0,{0,}0,^0,\:1s,=0,g1s,h0,t0,+1s,c3,(0,u0 : */
diff --git a/libprocess/gwyprocessenums.h b/libprocess/gwyprocessenums.h
index d3576f0..ac54828 100644
--- a/libprocess/gwyprocessenums.h
+++ b/libprocess/gwyprocessenums.h
@@ -1,6 +1,6 @@
/*
- * @(#) $Id: gwyprocessenums.h 19080 2016-10-14 13:59:02Z yeti-dn $
- * Copyright (C) 2005 David Necas (Yeti), Petr Klapetek.
+ * @(#) $Id: gwyprocessenums.h 20142 2017-08-02 18:25:44Z yeti-dn $
+ * Copyright (C) 2005-2017 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
* This program is free software; you can redistribute it and/or modify
@@ -245,6 +245,8 @@ typedef enum {
GWY_LINE_STAT_KURTOSIS,
GWY_LINE_STAT_RANGE,
GWY_LINE_STAT_VARIATION,
+ GWY_LINE_STAT_MINPOS,
+ GWY_LINE_STAT_MAXPOS,
} GwyLineStatQuantity;
typedef enum {
@@ -283,6 +285,12 @@ typedef enum {
GWY_ROTATE_RESIZE_CUT = 2,
} GwyRotateResizeType;
+typedef enum {
+ GWY_AFFINE_SCALING_AS_GIVEN = 0,
+ GWY_AFFINE_SCALING_PRESERVE_AREA = 1,
+ GWY_AFFINE_SCALING_PRESERVE_X = 2,
+} GwyAffineScalingType;
+
const GwyEnum* gwy_merge_type_get_enum(void) G_GNUC_CONST;
const GwyEnum* gwy_masking_type_get_enum(void) G_GNUC_CONST;
const GwyEnum* gwy_plane_symmetry_get_enum(void) G_GNUC_CONST;
@@ -301,6 +309,12 @@ typedef struct {
gdouble fraction;
} GwyComputationState;
+#define GWY_TYPE_COMPUTATION_STATE (gwy_computation_state_get_type())
+
+GType gwy_computation_state_get_type () G_GNUC_CONST;
+gint gwy_computation_state_get_state (GwyComputationState *compstate);
+gdouble gwy_computation_state_get_fraction(GwyComputationState *compstate);
+
G_END_DECLS
#endif /* __GWY_PROCESS_ENUMS_H__ */
diff --git a/libprocess/gwyprocessinternal.h b/libprocess/gwyprocessinternal.h
index ea3ea99..9903242 100644
--- a/libprocess/gwyprocessinternal.h
+++ b/libprocess/gwyprocessinternal.h
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: gwyprocessinternal.h 19101 2016-10-19 12:56:46Z yeti-dn $
+ * @(#) $Id: gwyprocessinternal.h 20128 2017-08-01 11:19:59Z yeti-dn $
* Copyright (C) 2003 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -37,22 +37,30 @@ G_BEGIN_DECLS
#define CBIT(b) (1 << GWY_DATA_FIELD_CACHE_##b)
#define CTEST(datafield, b) ((datafield)->cached & CBIT(b))
-typedef struct {
- guint col;
- guint row;
- guint width;
- guint height;
-} GwyFieldPart;
-
-/* XXX: Maybe this protoype is too detailed. Including the mask and area
- * arguments explicitly will permit certain optimistations, namely limiting
- * the working area. */
-typedef void (*GwyDataFieldScalarFunc)(GwyDataField *field,
- GwyDataField *mask,
- GwyMaskingType mode,
- const GwyFieldPart *fpart,
- gpointer params,
- gdouble *results);
+typedef void (*RowExtendFunc)(const gdouble *in,
+ gdouble *out,
+ guint pos,
+ guint width,
+ guint res,
+ guint extend_left,
+ guint extend_right,
+ gdouble value);
+
+typedef void (*RectExtendFunc)(const gdouble *in,
+ guint inrowstride,
+ gdouble *out,
+ guint outrowstride,
+ guint xpos,
+ guint ypos,
+ guint width,
+ guint height,
+ guint xres,
+ guint yres,
+ guint extend_left,
+ guint extend_right,
+ guint extend_up,
+ guint extend_down,
+ gdouble value);
G_GNUC_INTERNAL
void _gwy_cdline_class_setup_presets(void);
@@ -66,6 +74,12 @@ void _gwy_calibration_class_setup_presets(void);
G_GNUC_INTERNAL
void _gwy_shape_fit_preset_class_setup_presets(void);
+G_GNUC_INTERNAL
+RowExtendFunc _gwy_get_row_extend_func(GwyExteriorType exterior);
+
+G_GNUC_INTERNAL
+RectExtendFunc _gwy_get_rect_extend_func(GwyExteriorType exterior);
+
struct _GwySurfacePrivate {
GwySIUnit *si_unit_xy;
GwySIUnit *si_unit_z;
@@ -78,6 +92,98 @@ struct _GwySurfacePrivate {
typedef struct _GwySurfacePrivate Surface;
+typedef struct {
+ guint col;
+ guint row;
+ guint width;
+ guint height;
+} GwyDataFieldPart;
+
+typedef struct {
+ gint i;
+ gint j;
+} GridPoint;
+
+typedef struct {
+ guint size;
+ guint len;
+ GridPoint *points;
+} PixelQueue;
+
+G_GNUC_INTERNAL
+guint _gwy_simple_dist_trans(gint *grain,
+ guint width,
+ guint height,
+ gboolean from_border,
+ GwyDistanceTransformType dtype,
+ PixelQueue *inqueue,
+ PixelQueue *outqueue);
+
+typedef struct {
+ guint size;
+ guint len;
+ gint *data;
+} IntList;
+
+G_GNUC_UNUSED
+static inline IntList*
+int_list_new(guint prealloc)
+{
+ IntList *list = g_slice_new0(IntList);
+ prealloc = MAX(prealloc, 16);
+ list->size = prealloc;
+ list->data = g_new(gint, list->size);
+ return list;
+}
+
+G_GNUC_UNUSED
+static inline void
+int_list_add(IntList *list, gint i)
+{
+ if (G_UNLIKELY(list->len == list->size)) {
+ list->size = MAX(2*list->size, 16);
+ list->data = g_renew(gint, list->data, list->size);
+ }
+
+ list->data[list->len] = i;
+ list->len++;
+}
+
+G_GNUC_UNUSED
+static inline void
+int_list_add_unique(IntList **plist, gint i)
+{
+ IntList *list;
+ guint j;
+
+ if (!*plist)
+ *plist = int_list_new(0);
+
+ list = *plist;
+ for (j = 0; j < list->len; j++) {
+ if (list->data[j] == i)
+ return;
+ }
+ int_list_add(list, i);
+}
+
+G_GNUC_UNUSED
+static inline void
+int_list_free(IntList *list)
+{
+ g_free(list->data);
+ g_slice_free(IntList, list);
+}
+
+#define unit_pointer_if_nonempty(unit) \
+ (((unit) && !gwy_si_unit_equal_string((unit), NULL)) ? &(unit) : NULL)
+
+G_GNUC_INTERNAL
+void _gwy_assign_si_unit(GwySIUnit *source, GwySIUnit **dest);
+
+G_GNUC_INTERNAL
+void _gwy_set_object_si_unit(GwySIUnit *unit, GwySIUnit **objmember);
+
G_END_DECLS
#endif /* __GWYPROCESS_INTERNAL_H__ */
diff --git a/libprocess/gwyprocesstypes.c b/libprocess/gwyprocesstypes.c
index 668f7a6..4209e2b 100644
--- a/libprocess/gwyprocesstypes.c
+++ b/libprocess/gwyprocesstypes.c
@@ -431,6 +431,8 @@ gwy_line_stat_quantity_get_type(void)
{ GWY_LINE_STAT_KURTOSIS, "GWY_LINE_STAT_KURTOSIS", "kurtosis" },
{ GWY_LINE_STAT_RANGE, "GWY_LINE_STAT_RANGE", "range" },
{ GWY_LINE_STAT_VARIATION, "GWY_LINE_STAT_VARIATION", "variation" },
+ { GWY_LINE_STAT_MINPOS, "GWY_LINE_STAT_MINPOS", "minpos" },
+ { GWY_LINE_STAT_MAXPOS, "GWY_LINE_STAT_MAXPOS", "maxpos" },
{ 0, NULL, NULL }
};
etype = g_enum_register_static("GwyLineStatQuantity", values);
@@ -518,6 +520,23 @@ gwy_rotate_resize_type_get_type(void)
return etype;
}
+GType
+gwy_affine_scaling_type_get_type(void)
+{
+ static GType etype = 0;
+
+ if (etype == 0) {
+ static const GEnumValue values[] = {
+ { GWY_AFFINE_SCALING_AS_GIVEN, "GWY_AFFINE_SCALING_AS_GIVEN", "as-given" },
+ { GWY_AFFINE_SCALING_PRESERVE_AREA, "GWY_AFFINE_SCALING_PRESERVE_AREA", "preserve-area" },
+ { GWY_AFFINE_SCALING_PRESERVE_X, "GWY_AFFINE_SCALING_PRESERVE_X", "preserve-x" },
+ { 0, NULL, NULL }
+ };
+ etype = g_enum_register_static("GwyAffineScalingType", values);
+ }
+ return etype;
+}
+
#include "./peaks.h"
GType
diff --git a/libprocess/gwyprocesstypes.h b/libprocess/gwyprocesstypes.h
index c3c84cd..a1fa267 100644
--- a/libprocess/gwyprocesstypes.h
+++ b/libprocess/gwyprocesstypes.h
@@ -80,6 +80,9 @@ GType gwy_min_max_filter_type_get_type(void) G_GNUC_CONST;
GType gwy_rotate_resize_type_get_type(void) G_GNUC_CONST;
#define GWY_TYPE_ROTATE_RESIZE_TYPE (gwy_rotate_resize_type_get_type())
+GType gwy_affine_scaling_type_get_type(void) G_GNUC_CONST;
+#define GWY_TYPE_AFFINE_SCALING_TYPE (gwy_affine_scaling_type_get_type())
+
GType gwy_peak_background_type_get_type(void) G_GNUC_CONST;
#define GWY_TYPE_PEAK_BACKGROUND_TYPE (gwy_peak_background_type_get_type())
diff --git a/libprocess/gwyshapefitpreset.c b/libprocess/gwyshapefitpreset.c
index 8f49d8e..a0b1bbf 100644
--- a/libprocess/gwyshapefitpreset.c
+++ b/libprocess/gwyshapefitpreset.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: gwyshapefitpreset.c 19259 2016-11-15 08:26:23Z yeti-dn $
+ * @(#) $Id: gwyshapefitpreset.c 19380 2016-12-23 11:12:56Z pecold $
* Copyright (C) 2016 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -332,9 +332,9 @@ static gdouble enforce_secondary_flags(const FitShapeFunc *builtin,
guint i,
gdouble value);
static GwyShapeFitPreset* create_static_preset (const FitShapeFunc *function);
-static void reduce_data_size (const GwyXYZ *xyzsrc,
+static GwySurface* reduce_data_size (const GwyXYZ *xyzsrc,
guint nsrc,
- GwySurface *dest);
+ guint nred);
G_DEFINE_TYPE(GwyShapeFitPreset, gwy_shape_fit_preset, GWY_TYPE_RESOURCE)
@@ -399,6 +399,12 @@ _gwy_shape_fit_preset_class_setup_presets(void)
g_type_class_unref(klass);
}
+static guint
+calculate_nreduced(guint n)
+{
+ return (guint)sqrt(n*(gdouble)NREDLIM);
+}
+
/**
* gwy_shape_fit_preset_needs_same_units:
* @preset: A 3D geometrical shape fitting function.
@@ -983,6 +989,78 @@ gwy_shape_fit_preset_fit(GwyShapeFitPreset *preset,
return fitter;
}
+/**
+ * gwy_shape_fit_preset_quick_fit:
+ * @preset: A 3D geometrical shape fitting function.
+ * @fitter: A Marquardt-Levenberg nonlinear fitter already initialized for
+ * @preset's function, or %NULL.
+ * @points: Array of @n XYZ data defining the lateral coordinates and values
+ * to fit.
+ * @n: Number of items in @points.
+ * @params: Fitting parameters filled with initial estimates (the fitting
+ * starts from the provided values).
+ * @fixed_param: Which parameters should be treated as fixed (set
+ * corresponding element to %TRUE for them). May be %NULL if
+ * all parameters are free.
+ * @rss: Location to store the residual sum of squares, as returned by
+ * gwy_math_nlfit_fit_idx(), may be %NULL.
+ *
+ * Performs a rough non-linear least-squares fit with a 3D geometrical shape
+ * fitter.
+ *
+ * See gwy_shape_fit_preset_fit() for discussion. This functions differs by
+ * using a reduced number of points to perform the fit (unless the input set
+ * is small) and may also set fitter parameters to make the least squares
+ * method terminate faster. The input points are reduced the same way as in
+ * gwy_surface_reduce_points().
+ *
+ * Returns: Either @fitter itself, or a newly created fitter if it was %NULL.
+ *
+ * Since: 2.48
+ **/
+GwyNLFitter*
+gwy_shape_fit_preset_quick_fit(GwyShapeFitPreset *preset,
+ GwyNLFitter *fitter,
+ const GwyXYZ *points,
+ guint n,
+ gdouble *params,
+ const gboolean *fixed_param,
+ gdouble *rss)
+{
+ ShapeFitPreset *priv;
+ const FitShapeFunc *builtin;
+ guint nred = calculate_nreduced(n);
+ gdouble myrss;
+
+ g_return_val_if_fail(GWY_IS_SHAPE_FIT_PRESET(preset), NULL);
+ g_return_val_if_fail(points, NULL);
+ g_return_val_if_fail(params, NULL);
+ if (!fitter)
+ fitter = gwy_shape_fit_preset_create_fitter(preset);
+
+ gwy_math_nlfit_set_max_iterations(fitter, 30);
+ priv = preset->priv;
+ builtin = priv->builtin;
+ if (nred < n) {
+ GwySurface *surface = reduce_data_size(points, n, nred);
+ priv->xyz = surface->data;
+ myrss = gwy_math_nlfit_fit_idx_full(fitter, nred, builtin->nparams,
+ params, fixed_param, NULL, priv);
+ g_object_unref(surface);
+ }
+ else {
+ priv->xyz = points;
+ myrss = gwy_math_nlfit_fit_idx_full(fitter, n, builtin->nparams,
+ params, fixed_param, NULL, priv);
+ }
+ priv->xyz = NULL;
+ enforce_param_flags(builtin, params);
+ if (rss)
+ *rss = myrss;
+
+ return fitter;
+}
+
static void
enforce_param_flags(const FitShapeFunc *builtin, gdouble *param)
{
@@ -1014,20 +1092,23 @@ enforce_secondary_flags(const FitShapeFunc *builtin, guint i, gdouble value)
return value;
}
-static void
-reduce_data_size(const GwyXYZ *xyzsrc, guint nsrc, GwySurface *dest)
+static GwySurface*
+reduce_data_size(const GwyXYZ *xyzsrc, guint nsrc, guint nred)
{
- GwyRandGenSet *rngset = gwy_rand_gen_set_new(1);
- guint ndest = gwy_surface_get_npoints(dest);
- guint *redindex = gwy_rand_gen_set_choose_shuffle(rngset, 0, nsrc, ndest);
- GwyXYZ *xyzdest = gwy_surface_get_data(dest);
- guint i;
+ GwySurface *reduced, *surface = gwy_surface_new();
+ guint n = surface->n;
+ GwyXYZ *data = surface->data;
- for (i = 0; i < ndest; i++)
- xyzdest[i] = xyzsrc[redindex[i]];
+ /* XXX: This is a dirty trick we can only dare to attempt since we are
+ * doing it inside the library and know gwy_surface_reduce_points() does
+ * not change the @data and @n fields. Do not try it at home! */
+ surface->data = (GwyXYZ*)xyzsrc;
+ surface->n = nsrc;
+ reduced = gwy_surface_reduce_points(surface, nred);
+ surface->data = data;
+ surface->n = n;
- g_free(redindex);
- gwy_rand_gen_set_free(rngset);
+ return reduced;
}
static GwyShapeFitPreset*
@@ -1095,7 +1176,7 @@ gwy_coshm1(gdouble x)
sphi = sphi_last; \
} \
else { \
- sincos(phi, &sphi, &cphi); \
+ _gwy_sincos(phi, &sphi, &cphi); \
cphi_last = cphi; \
sphi_last = sphi; \
phi##_last = phi; \
@@ -1440,21 +1521,18 @@ estimate_projection_direction_red(const GwyXYZ *xyz, guint n,
FitShapeEstimateCache *estimcache)
{
FitShapeEstimateCache estimcachered;
- guint nred = (guint)sqrt(n*(gdouble)NREDLIM);
+ guint nred = calculate_nreduced(n);
GwySurface *surface;
gdouble phi;
if (nred >= n)
return estimate_projection_direction(xyz, n, estimcache);
- surface = gwy_surface_new_sized(nred);
- reduce_data_size(xyz, n, surface);
-
/* Make sure caching still works for the reduced data. */
+ surface = reduce_data_size(xyz, n, nred);
gwy_clear(&estimcachered, 1);
phi = estimate_projection_direction(gwy_surface_get_data_const(surface),
nred, &estimcachered);
-
g_object_unref(surface);
return phi;
diff --git a/libprocess/gwyshapefitpreset.h b/libprocess/gwyshapefitpreset.h
index 2648400..edd3109 100644
--- a/libprocess/gwyshapefitpreset.h
+++ b/libprocess/gwyshapefitpreset.h
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: gwyshapefitpreset.h 19109 2016-10-21 08:57:19Z yeti-dn $
+ * @(#) $Id: gwyshapefitpreset.h 19370 2016-12-20 21:32:00Z yeti-dn $
* Copyright (C) 2016 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -106,6 +106,13 @@ GwyNLFitter* gwy_shape_fit_preset_fit (GwyShapeFitPreset *p
gdouble *params,
const gboolean *fixed_param,
gdouble *rss);
+GwyNLFitter* gwy_shape_fit_preset_quick_fit (GwyShapeFitPreset *preset,
+ GwyNLFitter *fitter,
+ const GwyXYZ *points,
+ guint n,
+ gdouble *params,
+ const gboolean *fixed_param,
+ gdouble *rss);
GwyInventory* gwy_shape_fit_presets (void);
G_END_DECLS
diff --git a/libprocess/hough.c b/libprocess/hough.c
index 0f75a87..c1516a5 100644
--- a/libprocess/hough.c
+++ b/libprocess/hough.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: hough.c 19128 2016-10-26 21:25:12Z yeti-dn $
+ * @(#) $Id: hough.c 20129 2017-08-01 20:01:48Z yeti-dn $
* Copyright (C) 2003 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -19,14 +19,14 @@
* Boston, MA 02110-1301, USA.
*/
-#include "config.h"
#include <libgwyddion/gwymacros.h>
#include <libgwyddion/gwymath.h>
#include <libprocess/filters.h>
#include <libprocess/stats.h>
-#include <libprocess/hough.h>
#include <libprocess/grains.h>
#include <libprocess/arithmetic.h>
+#include <libprocess/elliptic.h>
+#include <libprocess/hough.h>
static void bresenhams_line (GwyDataField *dfield,
gint x1,
@@ -503,36 +503,9 @@ get_local_maximum(GwyDataField *dfield,
gint mcol, gint mrow,
gdouble *xval, gdouble *yval)
{
- gint xres, yres;
- gdouble zm, zp, z0;
- const gdouble *data;
-
- xres = dfield->xres;
- yres = dfield->yres;
- data = dfield->data;
- z0 = dfield->data[xres*mrow + mcol];
- if (mcol > 0 && mcol < xres-1) {
- zm = data[mrow*xres + mcol-1];
- zp = data[mrow*xres + mcol+1];
- if ((zm + zp - 2*z0) == 0)
- *xval = (gdouble)mcol;
- else {
- *xval = (gdouble)mcol + (zm - zp)/(zm + zp - 2*z0)/2.0;
- }
- }
- else
- *xval = (gdouble)mcol;
-
- if (mrow > 0 && mrow < yres-1) {
- zm = data[(mrow - 1)*xres + mcol];
- zp = data[(mrow + 1)*xres + mcol];
- if ((zm + zp - 2*z0) == 0)
- *yval = (gdouble)mrow;
- else
- *yval = (gdouble)mrow + (zm - zp)/(zm + zp - 2*z0)/2.0;
- }
- else
- *yval = (gdouble)mrow;
+ *xval = mcol;
+ *yval = mrow;
+ gwy_data_field_local_maximum(dfield, xval, yval, 3, 3);
}
/**
@@ -587,8 +560,7 @@ gwy_data_field_get_local_maxima_list(GwyDataField *dfield,
if (zdata[i] < value) {
if (subpixel) {
- get_local_maximum(dfield, mcol, mrow,
- &xval, &yval);
+ get_local_maximum(dfield, mcol, mrow, &xval, &yval);
zdata[i] = value;
xdata[i] = xval;
ydata[i] = yval;
diff --git a/libprocess/interpolation.c b/libprocess/interpolation.c
index 8f5d77f..5f283a5 100644
--- a/libprocess/interpolation.c
+++ b/libprocess/interpolation.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: interpolation.c 19036 2016-10-08 10:32:41Z yeti-dn $
+ * @(#) $Id: interpolation.c 19698 2017-05-03 20:18:10Z yeti-dn $
* Copyright (C) 2003 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -19,7 +19,6 @@
* Boston, MA 02110-1301, USA.
*/
-#include "config.h"
#include <string.h>
#include <libgwyddion/gwymacros.h>
#include <libgwyddion/gwymath.h>
diff --git a/libprocess/interpolation.h b/libprocess/interpolation.h
index 2fc4824..d10d9b4 100644
--- a/libprocess/interpolation.h
+++ b/libprocess/interpolation.h
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: interpolation.h 15598 2013-11-11 12:33:32Z yeti-dn $
+ * @(#) $Id: interpolation.h 19328 2016-11-29 14:21:48Z yeti-dn $
* Copyright (C) 2003 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -32,30 +32,30 @@ gdouble gwy_interpolation_get_dval(gdouble x,
gdouble y1_,
gdouble x2_,
gdouble y2_,
- GwyInterpolationType interpolation);
+ GwyInterpolationType interpolation) G_GNUC_CONST;
gdouble
gwy_interpolation_get_dval_of_equidists(gdouble x,
gdouble *data,
- GwyInterpolationType interpolation);
+ GwyInterpolationType interpolation) G_GNUC_PURE;
gdouble
gwy_interpolation_interpolate_1d(gdouble x,
const gdouble *coeff,
- GwyInterpolationType interpolation);
+ GwyInterpolationType interpolation) G_GNUC_PURE;
gdouble
gwy_interpolation_interpolate_2d(gdouble x,
gdouble y,
gint rowstride,
const gdouble *coeff,
- GwyInterpolationType interpolation);
+ GwyInterpolationType interpolation) G_GNUC_PURE;
gboolean
-gwy_interpolation_has_interpolating_basis(GwyInterpolationType interpolation);
+gwy_interpolation_has_interpolating_basis(GwyInterpolationType interpolation) G_GNUC_CONST;
gint
-gwy_interpolation_get_support_size(GwyInterpolationType interpolation);
+gwy_interpolation_get_support_size(GwyInterpolationType interpolation) G_GNUC_CONST;
void
gwy_interpolation_resolve_coeffs_1d(gint n,
diff --git a/libprocess/inttrans.c b/libprocess/inttrans.c
index 57e24b7..c8951ca 100644
--- a/libprocess/inttrans.c
+++ b/libprocess/inttrans.c
@@ -1,6 +1,6 @@
/*
- * @(#) $Id: inttrans.c 19036 2016-10-08 10:32:41Z yeti-dn $
- * Copyright (C) 2003 David Necas (Yeti), Petr Klapetek.
+ * @(#) $Id: inttrans.c 19717 2017-05-09 08:25:16Z yeti-dn $
+ * Copyright (C) 2003-2017 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
* This program is free software; you can redistribute it and/or modify
@@ -19,13 +19,8 @@
* Boston, MA 02110-1301, USA.
*/
-#include "config.h"
-
-#ifdef HAVE_FFTW3
-#include <fftw3.h>
-#endif
-
#include <string.h>
+#include <fftw3.h>
#include <libgwyddion/gwymacros.h>
#include <libgwyddion/gwymath.h>
#include <libprocess/arithmetic.h>
@@ -323,7 +318,6 @@ gwy_data_line_fft_do(GwyDataLine *rsrc,
GwyDataLine *idest,
GwyTransformDirection direction)
{
-#ifdef HAVE_FFTW3
fftw_iodim dims[1], howmany_dims[1];
gdouble *rbuf = g_memdup(rsrc->data, rsrc->res*sizeof(gdouble));
gdouble *ibuf = g_memdup(isrc->data, isrc->res*sizeof(gdouble));
@@ -337,16 +331,18 @@ gwy_data_line_fft_do(GwyDataLine *rsrc,
howmany_dims[0].os = rsrc->res;
/* Backward direction is equivalent to switching real and imaginary parts */
/* XXX: Planner destroys input. */
- if (direction == GWY_TRANSFORM_DIRECTION_BACKWARD)
+ if (direction == GWY_TRANSFORM_DIRECTION_BACKWARD) {
plan = fftw_plan_guru_split_dft(1, dims, 1, howmany_dims,
rsrc->data, isrc->data,
rdest->data, idest->data,
_GWY_FFTW_PATIENCE);
- else
+ }
+ else {
plan = fftw_plan_guru_split_dft(1, dims, 1, howmany_dims,
isrc->data, rsrc->data,
idest->data, rdest->data,
_GWY_FFTW_PATIENCE);
+ }
g_return_if_fail(plan);
gwy_assign(rsrc->data, rbuf, rsrc->res);
gwy_assign(isrc->data, ibuf, isrc->res);
@@ -357,11 +353,6 @@ gwy_data_line_fft_do(GwyDataLine *rsrc,
gwy_data_line_multiply(rdest, 1.0/sqrt(rsrc->res));
gwy_data_line_multiply(idest, 1.0/sqrt(rsrc->res));
-#else
- gwy_fft_simple(direction, rsrc->res,
- 1, rsrc->data, isrc->data,
- 1, rdest->data, idest->data);
-#endif
}
static void
@@ -371,7 +362,6 @@ gwy_data_line_fft_real_do(GwyDataLine *rsrc,
GwyDataLine *idest,
GwyTransformDirection direction)
{
-#ifdef HAVE_FFTW3
fftw_iodim dims[1], howmany_dims[1];
fftw_plan plan;
gint j;
@@ -404,13 +394,6 @@ gwy_data_line_fft_real_do(GwyDataLine *rsrc,
gwy_data_line_multiply(idest, 1.0/sqrt(rsrc->res));
else
gwy_data_line_multiply(idest, -1.0/sqrt(rsrc->res));
-#else
- /* We cannot save anything here. Or correct me... */
- gwy_data_line_clear(ibuf);
- gwy_fft_simple(direction, rsrc->res,
- 1, rsrc->data, ibuf->data,
- 1, rdest->data, idest->data);
-#endif
}
static void
@@ -588,7 +571,6 @@ gwy_data_field_2dfft_do(GwyDataField *rin,
GwyDataField *iout,
GwyTransformDirection direction)
{
-#ifdef HAVE_FFTW3
fftw_iodim dims[2], howmany_dims[1];
fftw_plan plan;
@@ -618,32 +600,6 @@ gwy_data_field_2dfft_do(GwyDataField *rin,
gwy_data_field_multiply(rout, 1.0/sqrt(rin->xres*rin->yres));
gwy_data_field_multiply(iout, 1.0/sqrt(rin->xres*rin->yres));
-#else
- gdouble *ibuf, *rbuf;
- gint j, k, xres, yres;
-
- xres = rin->xres;
- yres = rin->yres;
- for (k = 0; k < yres; k++) {
- gwy_fft_simple(direction, xres,
- 1, rin->data + k*xres, iin->data + k*xres,
- 1, rout->data + k*xres, iout->data + k*xres);
- }
- /* Use a one-row temporary buffer */
- rbuf = g_new(gdouble, 2*yres);
- ibuf = rbuf + 1;
- for (k = 0; k < xres; k++) {
- gwy_fft_simple(direction, yres,
- xres, rout->data + k, iout->data + k,
- 2, rbuf, ibuf);
- /* Move the result from buffer to iout, rout columns */
- for (j = 0; j < yres; j++) {
- rout->data[j*xres + k] = rbuf[2*j];
- iout->data[j*xres + k] = ibuf[2*j];
- }
- }
- g_free(rbuf);
-#endif
gwy_data_field_invalidate(rout);
gwy_data_field_invalidate(iout);
}
@@ -728,7 +684,6 @@ gwy_data_field_2dfft_real_do(GwyDataField *rin,
GwyTransformDirection direction)
{
gint xres = rin->xres, yres = rin->yres;
-#ifdef HAVE_FFTW3
fftw_iodim dims[2], howmany_dims[1];
fftw_plan plan;
gint j, k;
@@ -774,48 +729,6 @@ gwy_data_field_2dfft_real_do(GwyDataField *rin,
gwy_data_field_multiply(iout, 1.0/sqrt(xres*yres));
else
gwy_data_field_multiply(iout, -1.0/sqrt(xres*yres));
-#else
- GwyDataField *rbuf = gwy_data_field_duplicate(rin);
- gint k, j;
-
- for (k = 0; k+1 < yres; k += 2) {
- gdouble *re, *im, *r0, *r1, *i0, *i1;
-
- re = rout->data + k*xres;
- im = rout->data + (k + 1)*xres;
- r0 = rbuf->data + k*xres;
- r1 = rbuf->data + (k + 1)*xres;
- i0 = ibuf->data + k*xres;
- i1 = ibuf->data + (k + 1)*xres;
-
- gwy_fft_simple(direction, xres, 1, r0, r1, 1, re, im);
-
- /* Disentangle transforms of the row couples */
- r0[0] = re[0];
- i0[0] = 0.0;
- r1[0] = im[0];
- i1[0] = 0.0;
- for (j = 1; j < xres; j++) {
- r0[j] = (re[j] + re[xres - j])/2.0;
- i0[j] = (im[j] - im[xres - j])/2.0;
- r1[j] = (im[j] + im[xres - j])/2.0;
- i1[j] = (-re[j] + re[xres - j])/2.0;
- }
- }
- if (yres % 2) {
- k = xres * (yres - 1);
- gwy_clear(ibuf->data, xres);
- gwy_fft_simple(direction, xres,
- 1, rbuf->data + k, ibuf->data,
- 1, rout->data + k, iout->data + k);
-
- }
- for (k = 0; k < xres; k++)
- gwy_fft_simple(direction, yres,
- xres, rbuf->data + k, ibuf->data + k,
- xres, rout->data + k, iout->data + k);
- g_object_unref(rbuf);
-#endif
gwy_data_field_invalidate(rout);
gwy_data_field_invalidate(iout);
}
@@ -1336,7 +1249,6 @@ gwy_data_field_xfft_do(GwyDataField *rin,
GwyDataField *iout,
GwyTransformDirection direction)
{
-#ifdef HAVE_FFTW3
fftw_iodim dims[1], howmany_dims[1];
fftw_plan plan;
@@ -1368,14 +1280,6 @@ gwy_data_field_xfft_do(GwyDataField *rin,
gwy_data_field_multiply(rout, 1.0/sqrt(rin->xres));
gwy_data_field_multiply(iout, 1.0/sqrt(rin->xres));
-#else
- gint k;
-
- for (k = 0; k < rin->yres; k++)
- gwy_fft_simple(direction, rin->xres,
- 1, rin->data + k*rin->xres, iin->data + k*rin->xres,
- 1, rout->data + k*rin->xres, iout->data + k*rin->xres);
-#endif
gwy_data_field_invalidate(rout);
gwy_data_field_invalidate(iout);
}
@@ -1456,7 +1360,6 @@ gwy_data_field_xfft_real_do(GwyDataField *rin,
GwyDataField *iout,
GwyTransformDirection direction)
{
-#ifdef HAVE_FFTW3
fftw_iodim dims[1], howmany_dims[1];
fftw_plan plan;
gint j, k;
@@ -1493,45 +1396,6 @@ gwy_data_field_xfft_real_do(GwyDataField *rin,
gwy_data_field_multiply(iout, 1.0/sqrt(rin->xres));
else
gwy_data_field_multiply(iout, -1.0/sqrt(rin->xres));
-#else
- gint j, k;
-
- for (k = 0; k+1 < rin->yres; k += 2) {
- gdouble *re, *im, *r0, *r1, *i0, *i1;
-
- re = ibuf->data + k*rin->xres;
- im = ibuf->data + (k + 1)*rin->xres;
- r0 = rin->data + k*rin->xres;
- r1 = rin->data + (k + 1)*rin->xres;
-
- gwy_fft_simple(direction, rin->xres, 1, r0, r1, 1, re, im);
-
- r0 = rout->data + k*rin->xres;
- r1 = rout->data + (k + 1)*rin->xres;
- i0 = iout->data + k*rin->xres;
- i1 = iout->data + (k + 1)*rin->xres;
-
- /* Disentangle transforms of the row couples */
- r0[0] = re[0];
- i0[0] = 0.0;
- r1[0] = im[0];
- i1[0] = 0.0;
- for (j = 1; j < rin->xres; j++) {
- r0[j] = (re[j] + re[rin->xres - j])/2.0;
- i0[j] = (im[j] - im[rin->xres - j])/2.0;
- r1[j] = (im[j] + im[rin->xres - j])/2.0;
- i1[j] = (-re[j] + re[rin->xres - j])/2.0;
- }
- }
- if (rin->yres % 2) {
- k = rin->xres * (rin->yres - 1);
- gwy_clear(ibuf->data, rin->xres);
- gwy_fft_simple(direction, rin->xres,
- 1, rin->data + k, ibuf->data,
- 1, rout->data + k, iout->data + k);
-
- }
-#endif
gwy_data_field_invalidate(rout);
gwy_data_field_invalidate(iout);
}
@@ -1623,7 +1487,6 @@ gwy_data_field_yfft_do(GwyDataField *rin,
GwyDataField *iout,
GwyTransformDirection direction)
{
-#ifdef HAVE_FFTW3
fftw_iodim dims[1], howmany_dims[1];
fftw_plan plan;
@@ -1655,14 +1518,6 @@ gwy_data_field_yfft_do(GwyDataField *rin,
gwy_data_field_multiply(rout, 1.0/sqrt(rin->yres));
gwy_data_field_multiply(iout, 1.0/sqrt(rin->yres));
-#else
- gint k;
-
- for (k = 0; k < rin->xres; k++)
- gwy_fft_simple(direction, rin->yres,
- rin->xres, rin->data + k, iin->data + k,
- rin->xres, rout->data + k, iout->data + k);
-#endif
gwy_data_field_invalidate(rout);
gwy_data_field_invalidate(iout);
}
@@ -1743,7 +1598,6 @@ gwy_data_field_yfft_real_do(GwyDataField *rin,
GwyDataField *iout,
GwyTransformDirection direction)
{
-#ifdef HAVE_FFTW3
fftw_iodim dims[1], howmany_dims[1];
fftw_plan plan;
gint j, k;
@@ -1780,51 +1634,6 @@ gwy_data_field_yfft_real_do(GwyDataField *rin,
gwy_data_field_multiply(iout, 1.0/sqrt(rin->yres));
else
gwy_data_field_multiply(iout, -1.0/sqrt(rin->yres));
-#else
- gint j, k;
-
- for (k = 0; k+1 < rin->xres; k += 2) {
- gdouble *re, *im, *r0, *r1, *i0, *i1;
-
- re = ibuf->data + k;
- im = ibuf->data + (k + 1);
- r0 = rin->data + k;
- r1 = rin->data + (k + 1);
-
- /* FIXME: we could achieve better data locality by using the in
- * arrays `rotated'. */
- gwy_fft_simple(direction, rin->yres, rin->xres, r0, r1,
- rin->xres, re, im);
-
- r0 = rout->data + k;
- r1 = rout->data + (k + 1);
- i0 = iout->data + k;
- i1 = iout->data + (k + 1);
-
- /* Disentangle transforms of the row couples */
- r0[0] = re[0];
- i0[0] = 0.0;
- r1[0] = im[0];
- i1[0] = 0.0;
- for (j = 1; j < rin->yres; j++) {
- gint n = rin->xres*rin->yres, kj = rin->xres*j;
-
- r0[kj] = (re[kj] + re[n - kj])/2.0;
- i0[kj] = (im[kj] - im[n - kj])/2.0;
- r1[kj] = (im[kj] + im[n - kj])/2.0;
- i1[kj] = (-re[kj] + re[n - kj])/2.0;
- }
- }
- if (rin->xres % 2) {
- k = rin->xres - 1;
- for (j = 0; j < rin->yres; j++)
- ibuf->data[j*rin->xres + k] = 0.0;
- gwy_fft_simple(direction, rin->yres,
- rin->xres, rin->data + k, ibuf->data + k,
- rin->xres, rout->data + k, iout->data + k);
-
- }
-#endif
gwy_data_field_invalidate(rout);
gwy_data_field_invalidate(iout);
}
@@ -2037,32 +1846,23 @@ gwy_data_field_cwt(GwyDataField *data_field,
gwy_data_field_invalidate(data_field);
}
-static void
-flip_xy(GwyDataField *source, GwyDataField *dest, gboolean minor)
+static GwyDataLine*
+resample_dline_for_1d_fft_filter(GwyDataLine *dline, gint res,
+ GwyInterpolationType interpolation)
{
- gint xres, yres, i, j;
- gdouble *dd;
- const gdouble *sd;
-
- xres = gwy_data_field_get_xres(source);
- yres = gwy_data_field_get_yres(source);
- gwy_data_field_resample(dest, yres, xres, GWY_INTERPOLATION_NONE);
- sd = gwy_data_field_get_data_const(source);
- dd = gwy_data_field_get_data(dest);
- if (minor) {
- for (i = 0; i < xres; i++) {
- for (j = 0; j < yres; j++) {
- dd[i*yres + j] = sd[j*xres + (xres - 1 - i)];
- }
- }
- }
- else {
- for (i = 0; i < xres; i++) {
- for (j = 0; j < yres; j++) {
- dd[i*yres + (yres - 1 - j)] = sd[j*xres + i];
- }
- }
- }
+ GwyDataLine *half = gwy_data_line_new_resampled(dline, (res + 1)/2,
+ interpolation);
+ GwyDataLine *full = gwy_data_line_new(res, res, FALSE);
+ gint i;
+
+ /* Fill the full line symmetrically. The central element may we written
+ * twice, but with the same value. */
+ gwy_assign(full->data, half->data, half->res);
+ for (i = 0; i < half->res; i++)
+ full->data[res-1 - i] = half->data[i];
+
+ g_object_unref(half);
+ return full;
}
/**
@@ -2085,7 +1885,7 @@ gwy_data_field_fft_filter_1d(GwyDataField *data_field,
GwyOrientation orientation,
GwyInterpolationType interpolation)
{
- GwyDataField *source, *target, *iresult_field, *hlp_rdfield, *hlp_idfield;
+ GwyDataField *iresult_field, *hlp_rdfield, *hlp_idfield;
GwyDataLine *w;
gint i, j, xres, yres;
@@ -2093,60 +1893,50 @@ gwy_data_field_fft_filter_1d(GwyDataField *data_field,
g_return_if_fail(GWY_IS_DATA_FIELD(result_field));
g_return_if_fail(GWY_IS_DATA_LINE(weights));
- gwy_data_field_resample(result_field, data_field->xres, data_field->yres,
- GWY_INTERPOLATION_NONE);
-
- if (orientation == GWY_ORIENTATION_VERTICAL) {
- source = target = gwy_data_field_new_alike(data_field, FALSE);
- flip_xy(data_field, source, FALSE);
- }
- else {
- source = data_field;
- target = result_field;
- }
-
- yres = source->yres;
- xres = source->xres;
+ yres = data_field->yres;
+ xres = data_field->xres;
+ gwy_data_field_resample(result_field, xres, yres, GWY_INTERPOLATION_NONE);
- hlp_rdfield = gwy_data_field_new_alike(source, TRUE);
- hlp_idfield = gwy_data_field_new_alike(source, TRUE);
- iresult_field = gwy_data_field_new_alike(source, TRUE);
+ hlp_rdfield = gwy_data_field_new_alike(data_field, TRUE);
+ hlp_idfield = gwy_data_field_new_alike(data_field, TRUE);
+ iresult_field = gwy_data_field_new_alike(data_field, TRUE);
- gwy_data_field_1dfft_raw(source, NULL,
+ gwy_data_field_1dfft_raw(data_field, NULL,
hlp_rdfield, hlp_idfield,
- GWY_ORIENTATION_HORIZONTAL,
- GWY_TRANSFORM_DIRECTION_FORWARD);
+ orientation, GWY_TRANSFORM_DIRECTION_FORWARD);
+
+ if (orientation == GWY_ORIENTATION_VERTICAL)
+ w = resample_dline_for_1d_fft_filter(weights, yres, interpolation);
+ else
+ w = resample_dline_for_1d_fft_filter(weights, xres, interpolation);
- w = gwy_data_line_new_resampled(weights, (xres + 1)/2, interpolation);
for (i = 0; i < yres; i++) {
gdouble *rrow = hlp_rdfield->data + i*xres;
gdouble *irow = hlp_idfield->data + i*xres;
- for (j = 0; j < xres/2; j++) {
- rrow[j] *= w->data[j];
- rrow[xres-1 - j] *= w->data[j];
- irow[j] *= w->data[j];
- irow[xres-1 - j] *= w->data[j];
+ if (orientation == GWY_ORIENTATION_VERTICAL) {
+ gdouble wi = w->data[i];
+ for (j = 0; j < xres; j++) {
+ rrow[j] *= wi;
+ irow[j] *= wi;
+ }
}
- if (w->res != xres/2) {
- rrow[xres/2] *= w->data[xres/2];
- irow[xres/2] *= w->data[xres/2];
+ else {
+ gdouble *wrow = w->data;
+ for (j = 0; j < xres; j++) {
+ rrow[j] *= wrow[j];
+ irow[j] *= wrow[j];
+ }
}
}
g_object_unref(w);
gwy_data_field_1dfft_raw(hlp_rdfield, hlp_idfield,
- target, iresult_field,
- GWY_ORIENTATION_HORIZONTAL,
- GWY_TRANSFORM_DIRECTION_BACKWARD);
+ result_field, iresult_field,
+ orientation, GWY_TRANSFORM_DIRECTION_BACKWARD);
g_object_unref(iresult_field);
g_object_unref(hlp_rdfield);
g_object_unref(hlp_idfield);
-
- if (orientation == GWY_ORIENTATION_VERTICAL) {
- flip_xy(target, result_field, TRUE);
- g_object_unref(target);
- }
}
/************************** Documentation ****************************/
@@ -2169,10 +1959,9 @@ gwy_data_field_fft_filter_1d(GwyDataField *data_field,
* This makes them suitable for applications where both forward and inverse
* transform is performed.
*
- * Both types of functions wrap a Fourier transform backend which can be
- * currently either gwy_fft_simple(), available always, or
- * <ulink url="http://fftw.org/">FFTW3</ulink>, available when Gwyddion was
- * compiled with it.
+ * Both types of functions wrap
+ * <ulink url="http://fftw.org/">FFTW3</ulink>
+ * routines.
**/
/* vim: set cin et ts=4 sw=4 cino=>1s,e0,n0,f0,{0,}0,^0,\:1s,=0,g1s,h0,t0,+1s,c3,(0,u0 : */
diff --git a/libprocess/level.c b/libprocess/level.c
index 2bbfa53..c1ab96a 100644
--- a/libprocess/level.c
+++ b/libprocess/level.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: level.c 19036 2016-10-08 10:32:41Z yeti-dn $
+ * @(#) $Id: level.c 19698 2017-05-03 20:18:10Z yeti-dn $
* Copyright (C) 2003 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -19,7 +19,6 @@
* Boston, MA 02110-1301, USA.
*/
-#include "config.h"
#include <string.h>
#include <libgwyddion/gwymacros.h>
#include <libgwyddion/gwymath.h>
diff --git a/libprocess/linestats.c b/libprocess/linestats.c
index 13c055f..9f9dd75 100644
--- a/libprocess/linestats.c
+++ b/libprocess/linestats.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: linestats.c 19108 2016-10-21 08:50:43Z yeti-dn $
+ * @(#) $Id: linestats.c 20171 2017-08-06 19:49:48Z yeti-dn $
* Copyright (C) 2003 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -19,7 +19,6 @@
* Boston, MA 02110-1301, USA.
*/
-#include "config.h"
#include <string.h>
#include <libgwyddion/gwymacros.h>
#include <libgwyddion/gwymath.h>
@@ -75,6 +74,124 @@ gwy_data_line_get_min(GwyDataLine *data_line)
}
/**
+ * gwy_data_line_min_pos_i:
+ * @data_line: A data line.
+ *
+ * Finds the minimum pixel position of a data line.
+ *
+ * Returns: The minimum pixel position.
+ *
+ * Since 2.48
+ **/
+gdouble
+gwy_data_line_min_pos_i(GwyDataLine *data_line)
+{
+ gint i, res, minpos = 0;
+ gdouble min = G_MAXDOUBLE, *val;
+
+ g_return_val_if_fail(GWY_IS_DATA_LINE(data_line), 0.0);
+
+ res = data_line->res;
+ val = data_line->data;
+ for (i = 0; i < res; i++) {
+ if (G_UNLIKELY(*(val++) < min)) {
+ min = *val;
+ minpos = i;
+ }
+ }
+ return minpos;
+}
+
+/**
+ * gwy_data_line_max_pos_i:
+ * @data_line: A data line.
+ *
+ * Finds the maximum pixel position of a data line.
+ *
+ * Returns: The maximum pixel position.
+ *
+ * Since 2.48
+ **/
+gdouble
+gwy_data_line_max_pos_i(GwyDataLine *data_line)
+{
+ gint i, res, maxpos = 0;
+ gdouble max = G_MINDOUBLE, *val;
+
+ g_return_val_if_fail(GWY_IS_DATA_LINE(data_line), 0.0);
+
+ res = data_line->res;;
+ val = data_line->data;
+ for (i = 0; i < res; i++) {
+ if (G_UNLIKELY(*(val++) > max)) {
+ max = *val;
+ maxpos = i;
+ }
+ }
+ return maxpos;
+}
+
+/**
+ * gwy_data_line_min_pos_r:
+ * @data_line: A data line.
+ *
+ * Finds the real minimum position in a data line.
+ *
+ * Returns: Real position for the minimum.
+ *
+ * Since 2.48
+ **/
+gdouble
+gwy_data_line_min_pos_r(GwyDataLine *data_line)
+{
+ gint res;
+ gdouble real, offset, pos;
+
+ g_return_val_if_fail(GWY_IS_DATA_LINE(data_line), 0.0);
+
+ res = data_line->res;
+ if (G_UNLIKELY(res == 0.0)) {
+ return 0.0;
+ }
+ real = data_line->real;
+ offset = data_line->off;
+
+ pos = gwy_data_line_min_pos_i(data_line);
+
+ return pos * real / res + offset;
+}
+
+/**
+ * gwy_data_line_max_pos_r:
+ * @data_line: A data line.
+ *
+ * Finds the real maximum position in a data line.
+ *
+ * Returns: Real position for the maximum.
+ *
+ * Since 2.48
+ **/
+gdouble
+gwy_data_line_max_pos_r(GwyDataLine *data_line)
+{
+ gint res;
+ gdouble real, offset, pos;
+
+ g_return_val_if_fail(GWY_IS_DATA_LINE(data_line), 0.0);
+
+ res = data_line->res;
+ if (G_UNLIKELY(res == 0.0)) {
+ return 0.0;
+ }
+ real = data_line->real;
+ offset = data_line->off;
+
+ pos = gwy_data_line_max_pos_i(data_line);
+
+ return pos * real / res + offset;
+}
+
+/**
* gwy_data_line_get_avg:
* @data_line: A data line.
*
@@ -781,7 +898,8 @@ gwy_data_line_distribution(GwyDataLine *data_line,
{
GwySIUnit *yunit, *lineunit;
const gdouble *data;
- gint i, j, res, ndata;
+ gint i, res, ndata;
+ guint *counts;
gdouble s;
g_return_if_fail(GWY_IS_DATA_LINE(data_line));
@@ -830,20 +948,11 @@ gwy_data_line_distribution(GwyDataLine *data_line,
gwy_data_line_resample(distribution, nstats, GWY_INTERPOLATION_NONE);
gwy_data_line_clear(distribution);
- ndata = 0;
- for (i = 0; i < res; i++) {
- if (data[i] == ymax) {
- distribution->data[nstats-1] += 1.0;
- ndata++;
- }
- else {
- j = (gint)((data[i] - ymin)/s);
- if (j >= 0 && j < nstats) {
- distribution->data[j] += 1.0;
- ndata++;
- }
- }
- }
+ counts = g_new0(guint, nstats);
+ ndata = gwy_math_histogram(data, res, ymin, ymax, nstats, counts);
+ for (i = 0; i < nstats; i++)
+ distribution->data[i] = counts[i];
+ g_free(counts);
/* Set proper units and scales */
distribution->real = ymax - ymin;
@@ -881,8 +990,9 @@ gwy_data_line_dh(GwyDataLine *data_line,
gdouble ymin, gdouble ymax,
gint nsteps)
{
- gint i, n, val;
- gdouble step, nstep, imin;
+ gint i, n;
+ gdouble step;
+ guint *counts;
g_return_if_fail(GWY_IS_DATA_LINE(data_line));
g_return_if_fail(GWY_IS_DATA_LINE(target_line));
@@ -897,18 +1007,14 @@ gwy_data_line_dh(GwyDataLine *data_line,
ymax = gwy_data_line_get_max(data_line);
}
step = (ymax - ymin)/(nsteps - 1.0);
- imin = ymin/step;
- for (i = 0; i < n; i++) {
- val = (gint)((data_line->data[i]/step) - imin);
- if (G_UNLIKELY(val < 0 || val >= nsteps)) {
- /*this should never happened*/
- val = 0;
- }
- target_line->data[val] += 1.0;
- }
- nstep = n*step;
- gwy_data_line_multiply(target_line, 1.0/nstep);
+ counts = g_new0(guint, nsteps);
+ n = gwy_math_histogram(data_line->data, n, ymin, ymax, nsteps, counts);
+ for (i = 0; i < nsteps; i++)
+ target_line->data[i] = counts[i];
+ g_free(counts);
+
+ gwy_data_line_multiply(target_line, 1.0/(n*step));
target_line->off = ymin;
target_line->real = ymax - ymin;
}
@@ -938,6 +1044,7 @@ gwy_data_line_cdh(GwyDataLine *data_line,
gwy_data_line_dh(data_line, target_line, ymin, ymax, nsteps);
gwy_data_line_cumulate(target_line);
+ target_line->data[target_line->res-1] = 1.0; /* Fix rounding errors. */
}
/**
@@ -1021,6 +1128,7 @@ gwy_data_line_cda(GwyDataLine *data_line,
gwy_data_line_da(data_line, target_line, ymin, ymax, nsteps);
gwy_data_line_cumulate(target_line);
+ target_line->data[target_line->res-1] = 1.0; /* Fix rounding errors. */
}
/**
diff --git a/libprocess/linestats.h b/libprocess/linestats.h
index 93530a1..38d9080 100644
--- a/libprocess/linestats.h
+++ b/libprocess/linestats.h
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: linestats.h 17386 2015-09-14 09:22:40Z yeti-dn $
+ * @(#) $Id: linestats.h 19341 2016-12-03 08:22:08Z dn2010 $
* Copyright (C) 2003 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -31,6 +31,10 @@ gdouble gwy_data_line_get_min (GwyDataLine *data_line);
void gwy_data_line_get_min_max (GwyDataLine *data_line,
gdouble *min,
gdouble *max);
+gdouble gwy_data_line_min_pos_i (GwyDataLine *data_line);
+gdouble gwy_data_line_max_pos_i (GwyDataLine *data_line);
+gdouble gwy_data_line_min_pos_r (GwyDataLine *data_line);
+gdouble gwy_data_line_max_pos_r (GwyDataLine *data_line);
gdouble gwy_data_line_get_avg (GwyDataLine *data_line);
gdouble gwy_data_line_get_rms (GwyDataLine *data_line);
gdouble gwy_data_line_get_tan_beta0 (GwyDataLine *data_line);
diff --git a/libprocess/monte-carlo-unc.c b/libprocess/monte-carlo-unc.c
deleted file mode 100644
index b161977..0000000
--- a/libprocess/monte-carlo-unc.c
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
- * @(#) $Id: monte-carlo-unc.c 15598 2013-11-11 12:33:32Z yeti-dn $
- * Copyright (C) 2011 David Necas (Yeti).
- * E-mail: yeti at gwyddion.net.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#include <glib.h>
-#include <libgwyddion/gwymath.h>
-#include "monte-carlo-unc.h"
-
-/* Extend randomisation boundaries a bit beyond the caller-specified
- * rectangular area. */
-static void
-extend_area(GwyDataField *field,
- guint *col, guint *row,
- guint *width, guint *height,
- guint ext)
-{
- guint xres = field->xres, yres = field->yres, n;
-
- n = MIN(*col, ext);
- *col -= n;
- *width += n;
-
- n = MIN(*col + *width + ext, xres);
- *width = n - *col;
-
- n = MIN(*row, ext);
- *row -= n;
- *height += n;
-
- n = MIN(*row + *height + ext, yres);
- *height = n - *row;
-}
-
-/* XXX: Replace with some actual random field generation according to the
- * uncertainties. */
-static void
-randomise_field_area(GwyDataField *destination,
- GwyDataField *source,
- guint col,
- guint row,
- guint width,
- guint height,
- GRand *rng,
- const GwyFieldUncertainties *unc)
-{
- gdouble q = 2.0*GWY_SQRT3*unc->sigma;
- const gdouble *src = source->data + row*source->xres + col;
- gdouble *dest = destination->data + row*destination->xres + col;
- guint i, j;
-
- for (i = 0; i < height; i++) {
- const gdouble *s = src + i*source->xres;
- gdouble *d = dest + i*destination->xres;
-
- for (j = width; j; j--, s++, d++) {
- *d = *s + q*(g_rand_double(rng) - 1.0);
- }
- }
-}
-
-/**
- * _gwy_data_field_unc_scalar:
- * @field: Data field with the original data.
- * @mask: Mask to use, if any.
- * @mode: Masking mode to use.
- * @fpart: Part of the field to process, or %NULL for a full field.
- * @params: Processing parameters passed to @func.
- * @results: Array of @nresults items to store the uncertainties of the
- * @nresults scalars calculated by @func.
- * @nresults: The number of scalars function @func calculates.
- * @func: Data processing function to run on the data.
- * @unc: Uncertainties.
- *
- * Find the uncertainties of a scalar data field processing function using
- * Monte Carlo.
- **/
-void
-_gwy_data_field_unc_scalar(GwyDataField *field,
- GwyDataField *mask,
- GwyMaskingType mode,
- const GwyFieldPart *fpart,
- gpointer params,
- gdouble *results,
- guint nresults,
- GwyDataFieldScalarFunc func,
- const GwyFieldUncertainties *unc)
-{
- guint niter = 10000;
- GwyDataField *workspace;
- gdouble *accum;
- guint width, height, row, col, iter, i;
- GRand *rng;
-
- /* XXX: This should be moved to some common helper function once it's
- * needed in several places, like is done in libgwy3. */
- if (fpart) {
- col = fpart->col;
- row = fpart->row;
- width = fpart->width;
- height = fpart->height;
- }
- else {
- row = col = 0;
- width = field->xres;
- height = field->yres;
- }
- if (!mask || mode == GWY_MASK_IGNORE) {
- mask = NULL;
- mode = GWY_MASK_IGNORE;
- }
- extend_area(field, &col, &row, &width, &height, 5);
-
- workspace = gwy_data_field_duplicate(field);
- accum = g_new0(gdouble, 2*nresults);
- rng = g_rand_new();
-
- for (iter = 0; iter < niter; iter++) {
- randomise_field_area(workspace, field,
- col, row, width, height, rng, unc);
- func(workspace, mask, mode, fpart, params, results);
- for (i = 0; i < nresults; i++) {
- gdouble r = results[i];
-
- accum[2*i] += r;
- accum[2*i + 1] += r*r;
- }
- }
-
- for (i = 0; i < nresults; i++) {
- gdouble s = accum[2*i]/niter, s2 = accum[2*i + 1]/niter;
- results[i] = sqrt(MAX(s2 - s*s, 0.0));
- }
-
- g_rand_free(rng);
- g_free(accum);
- g_object_unref(workspace);
-}
-
-/* vim: set cin et ts=4 sw=4 cino=>1s,e0,n0,f0,{0,}0,^0,\:1s,=0,g1s,h0,t0,+1s,c3,(0,u0 : */
diff --git a/libprocess/monte-carlo-unc.h b/libprocess/monte-carlo-unc.h
deleted file mode 100644
index 8481501..0000000
--- a/libprocess/monte-carlo-unc.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * @(#) $Id: monte-carlo-unc.h 15598 2013-11-11 12:33:32Z yeti-dn $
- * Copyright (C) 2011 David Necas (Yeti).
- * E-mail: yeti at gwyddion.net.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-/*< private_header >*/
-
-#ifndef __GWY_PROCESS_MONTE_CARLO_UNC_H__
-#define __GWY_PROCESS_MONTE_CARLO_UNC_H__
-
-#include <libprocess/datafield.h>
-#include "gwyprocessinternal.h"
-
-G_BEGIN_DECLS
-
-typedef struct {
- /* XXX: Replace this with actual uncertainty data. */
- gdouble sigma;
-} GwyFieldUncertainties;
-
-G_GNUC_INTERNAL
-void _gwy_data_field_unc_scalar(GwyDataField *field,
- GwyDataField *mask,
- GwyMaskingType mode,
- const GwyFieldPart *fpart,
- gpointer params,
- gdouble *results,
- guint nresults,
- GwyDataFieldScalarFunc func,
- const GwyFieldUncertainties *unc);
-
-G_END_DECLS
-
-#endif /* __GWY_PROCESS_MONTE_CARLO_UNC_H__ */
-
-/* vim: set cin et ts=4 sw=4 cino=>1s,e0,n0,f0,{0,}0,^0,\:1s,=0,g1s,h0,t0,+1s,c3,(0,u0 : */
diff --git a/libprocess/simplefft.c b/libprocess/simplefft.c
index 8cbdb06..639bf7b 100644
--- a/libprocess/simplefft.c
+++ b/libprocess/simplefft.c
@@ -1,6 +1,6 @@
/*
- * @(#) $Id: simplefft.c 18438 2016-03-15 16:17:18Z yeti-dn $
- * Copyright (C) 2003-2007 David Necas (Yeti), Petr Klapetek.
+ * @(#) $Id: simplefft.c 19688 2017-05-03 14:01:57Z yeti-dn $
+ * Copyright (C) 2003-2017 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
* This program is free software; you can redistribute it and/or modify
@@ -19,79 +19,13 @@
* Boston, MA 02110-1301, USA.
*/
-/*
- * How this all works.
- *
- * There are four main components:
- *
- * - shuffle_and_twiddle() reorganizes data from one buffer to another,
- * to the order expected by the pass functions below (which is always
- * maximized stride n/p, unfortunately) and applied twiddle factors
- *
- * - pass2(), ..., pass10() perform subtransforms with sizes p=2-10 on
- * arrays of size n, i.e. they perform n/p identical transforms with
- * stride n/p, these are hand-coded
- *
- * - gpass() performs a general small-prime subtransform of size p, it is
- * O(p^2), however it makes use of some general block symmetries and thus
- * it outperforms bluestein() on smaller prime sizes
- *
- * - bluestein() is a Bluestein's arbitrary-size O(n log(n)) transform
- * algorithm that re-expresses it via a cyclic convolution of larger
- * but more factorable size, it recursively calls gwy_fft_simple() and it
- * is currently only used in on big step for everything that remains
- * after chopping off factors that passP() and gpass() can handle
- *
- * The driver routine gwy_fft_simple() decides whether a bluestein() pass is
- * necessary, performs it as the first step if it is, and then continues
- * with interleaved passP()/gpass() and shuffle_and_twiddle() for the
- * individual factors, using a temporary storage buffer with stride 1 (that
- * is never freed).
- */
-
-#include "config.h"
-#include <string.h>
+#include <fftw3.h>
#include <libgwyddion/gwymath.h>
#include <libprocess/simplefft.h>
-
-#define C3_1 0.5
-#define S3_1 0.86602540378443864676372317075293618347140262690518
-
-#define C10_1 0.80901699437494742410229341718281905886015458990288
-#define C10_2 0.30901699437494742410229341718281905886015458990289
-#define S10_1 0.58778525229247312916870595463907276859765243764313
-#define S10_2 0.95105651629515357211643933337938214340569863412574
-
-#define C5_1 C10_2
-#define C5_2 -C10_1
-#define S5_1 S10_2
-#define S5_2 S10_1
-
-#define C7_1 0.62348980185873353052500488400423981063227473089641
-#define C7_2 -0.22252093395631440428890256449679475946635556876452
-#define C7_3 -0.90096886790241912623610231950744505116591916213184
-#define S7_1 0.78183148246802980870844452667405775023233451870867
-#define S7_2 0.97492791218182360701813168299393121723278580062000
-#define S7_3 0.43388373911755812047576833284835875460999072778748
-
-#define S8_1 .70710678118654752440084436210484903928483593768846
-
-#ifdef HAVE_SINCOS
-#define _gwy_sincos sincos
-#else
-static inline void
-_gwy_sincos(gdouble x, gdouble *s, gdouble *c)
-{
- *s = sin(x);
- *c = cos(x);
-}
-#endif
+#include "gwyprocessinternal.h"
static guint smooth_upper_bound(guint n);
-typedef void (*ButterflyFunc)(guint gn,
- guint stride, gdouble *re, gdouble *im);
-
typedef gdouble (*GwyFFTWindowingFunc)(gint i, gint n);
static gdouble gwy_fft_window_hann (gint i, gint n);
@@ -147,548 +81,6 @@ gwy_fft_find_nice_size(gint size)
return smooth_upper_bound(size);
}
-/***** Scratch buffers {{{ **********************************************/
-/* We don't like GArray because it ensures the data will stay there when the
- * array size changes, which is a waste of time if it includes copying.
- * Also, we'd like to have plain gdouble* arrays, the administrative stuff
- * should not be visible. */
-#define _GWY_SCRATCH_BUFFER_ALIGNMENT 16
-#define _GWY_SCRATCH_BUFFER_BLOCK 16
-
-#define _GWY_SCRATCH_BUFFER_GET(b) \
- ((_GwyScratchBuffer*)(((guchar*)(b))-_GWY_SCRATCH_BUFFER_ALIGNMENT))
-
-#define _GWY_SCRATCH_BUFFER_ALIGN(n, l) ((MAX((n), 1) + (l)-1)/(l)*(l))
-
-#define _gwy_scratch_buffer_free_backend(b, l) \
- g_slice_free1((l)*sizeof(gdouble), (b))
-#define _gwy_scratch_buffer_alloc_backend(l) \
- g_slice_alloc((l)*sizeof(gdouble) + sizeof(_GwyScratchBufferHead))
-
-typedef union {
- struct {
- gsize alloc_len;
- } info;
- guchar keep_memory_nicely_aligned[_GWY_SCRATCH_BUFFER_ALIGNMENT];
-} _GwyScratchBufferHead;
-
-typedef struct {
- _GwyScratchBufferHead head;
- gdouble data[1]; /* Don't tempt compilers even more. */
-} _GwyScratchBuffer;
-
-static inline void
-_gwy_scratch_buffer_free(gdouble *buffer)
-{
- _GwyScratchBuffer *buf;
-
- if (buffer) {
- buf = _GWY_SCRATCH_BUFFER_GET(buffer);
- _gwy_scratch_buffer_free_backend(buf, buf->head.info.alloc_len);
- }
-}
-
-static inline gdouble*
-_gwy_scratch_buffer_ensure(gdouble *buffer, guint n)
-{
- _GwyScratchBuffer *buf;
-
- if (buffer) {
- buf = _GWY_SCRATCH_BUFFER_GET(buffer);
- if (n <= buf->head.info.alloc_len)
- return buffer;
-
- _gwy_scratch_buffer_free_backend(buf, buf->head.info.alloc_len);
- }
-
- n = _GWY_SCRATCH_BUFFER_ALIGN(n, _GWY_SCRATCH_BUFFER_ALIGNMENT);
- buf = _gwy_scratch_buffer_alloc_backend(n);
- buf->head.info.alloc_len = n;
- return &buf->data[0];
-}
-/***** }}} **************************************************************/
-
-
-/**
- * shuffle_and_twiddle:
- * @gn: The total array size.
- * @gm: The next already transformed size, i.e. the product of all factors
- * we have already handled, including @p.
- * @p: The factor we want to handle now.
- * @istride: Input data stride.
- * @in_re: Real part of input data.
- * @in_im: Imaginary part of input data.
- * @ostride: Output data stride.
- * @out_re: Real part of output data.
- * @out_im: Imaginary part of output data.
- *
- * Move data between two buffers, ensuring the result will have stride @gn/@p
- * and applying twiddle factors.
- **/
-static void
-shuffle_and_twiddle(guint gn, guint gm, guint p,
- guint istride, const gdouble *in_re, const gdouble *in_im,
- guint ostride, gdouble *out_re, gdouble *out_im)
-{
- gdouble *ff_re, *ff_im;
- guint m, k2, n1;
-
- /* k2 == 0, twiddle factors are 1 */
- for (m = 0; m < gn/gm; m++) {
- const gdouble *inb_re = in_re + istride*m;
- const gdouble *inb_im = in_im + istride*m;
- gdouble *outb_re = out_re + ostride*m;
- gdouble *outb_im = out_im + ostride*m;
-
- for (n1 = 0; n1 < p; n1++) {
- guint li = gn/gm*istride*n1;
- guint lo = gn/p*ostride*n1;
-
- outb_re[lo] = inb_re[li];
- outb_im[lo] = inb_im[li];
- }
- }
- if (gm == p)
- return;
-
- /* Other twiddle factors have to be calculated,
- but for n1 == 0 they are always 1 */
- ff_re = g_newa(gdouble, p);
- ff_im = g_newa(gdouble, p);
- for (k2 = 1; k2 < gm/p; k2++) {
- for (n1 = 1; n1 < p; n1++)
- _gwy_sincos(2.0*G_PI*n1*k2/gm, ff_im + n1, ff_re + n1);
- for (m = 0; m < gn/gm; m++) {
- const gdouble *inb_re = in_re + istride*(m + gn*p/gm*k2);
- const gdouble *inb_im = in_im + istride*(m + gn*p/gm*k2);
- gdouble *outb_re = out_re + ostride*(m + gn/gm*k2);
- gdouble *outb_im = out_im + ostride*(m + gn/gm*k2);
-
- outb_re[0] = inb_re[0];
- outb_im[0] = inb_im[0];
- for (n1 = 1; n1 < p; n1++) {
- guint li = gn/gm*istride*n1;
- guint lo = gn/p*ostride*n1;
-
- outb_re[lo] = ff_re[n1]*inb_re[li] - ff_im[n1]*inb_im[li];
- outb_im[lo] = ff_re[n1]*inb_im[li] + ff_im[n1]*inb_re[li];
- }
- }
- }
-}
-
-/* Butterflies. {{{
- * Hopefully the compiler will optimize out the excessibe assigments to
- * temporary variables. */
-static void
-pass2(guint gn, guint stride, gdouble *re, gdouble *im)
-{
- guint m;
-
- gn /= 2;
- for (m = 0; m < gn; m++) {
- gdouble z;
-
- z = re[stride*m] - re[stride*(gn + m)];
- re[stride*m] += re[stride*(gn + m)];
- re[stride*(gn + m)] = z;
-
- z = im[stride*m] - im[stride*(gn + m)];
- im[stride*m] += im[stride*(gn + m)];
- im[stride*(gn + m)] = z;
- }
-}
-
-static void
-pass3(guint gn, guint stride, gdouble *re, gdouble *im)
-{
- guint m;
-
- gn /= 3;
- for (m = 0; m < gn; m++) {
- gdouble z1re, z1im, z2re, z2im;
-
- z1re = re[stride*(gn + m)] + re[stride*(2*gn + m)];
- z1im = im[stride*(gn + m)] + im[stride*(2*gn + m)];
- /* Multiplication by i */
- z2re = (im[stride*(2*gn + m)] - im[stride*(gn + m)])*S3_1;
- z2im = (re[stride*(gn + m)] - re[stride*(2*gn + m)])*S3_1;
- re[stride*(2*gn + m)] = re[stride*m] - (z2re + 0.5*z1re);
- im[stride*(2*gn + m)] = im[stride*m] - (z2im + 0.5*z1im);
- re[stride*(gn + m)] = re[stride*m] + (z2re - 0.5*z1re);
- im[stride*(gn + m)] = im[stride*m] + (z2im - 0.5*z1im);
- re[stride*m] += z1re;
- im[stride*m] += z1im;
- }
-}
-
-static void
-pass4(guint gn, guint stride, gdouble *re, gdouble *im)
-{
- guint m;
-
- gn /= 4;
- for (m = 0; m < gn; m++) {
- gdouble z0re, z0im, z1re, z1im, z2re, z2im, z3re, z3im;
-
- /* Level 0 */
- z0re = re[stride*m] + re[stride*(2*gn + m)];
- z0im = im[stride*m] + im[stride*(2*gn + m)];
- z1re = re[stride*(gn + m)] + re[stride*(3*gn + m)];
- z1im = im[stride*(gn + m)] + im[stride*(3*gn + m)];
- z2re = re[stride*m] - re[stride*(2*gn + m)];
- z2im = im[stride*m] - im[stride*(2*gn + m)];
- z3re = re[stride*(gn + m)] - re[stride*(3*gn + m)];
- z3im = im[stride*(gn + m)] - im[stride*(3*gn + m)];
-
- /* Level 1 */
- re[stride*m] = z0re + z1re;
- im[stride*m] = z0im + z1im;
- /* Multiplication by i */
- re[stride*(gn + m)] = z2re - z3im;
- im[stride*(gn + m)] = z2im + z3re;
- re[stride*(2*gn + m)] = z0re - z1re;
- im[stride*(2*gn + m)] = z0im - z1im;
- /* Multiplication by i */
- re[stride*(3*gn + m)] = z2re + z3im;
- im[stride*(3*gn + m)] = z2im - z3re;
- }
-}
-
-static void
-pass5(guint gn, guint stride, gdouble *re, gdouble *im)
-{
- guint m;
-
- gn /= 5;
- for (m = 0; m < gn; m++) {
- gdouble w0re, w0im, w1re, w1im, w2re, w2im, w3re, w3im;
- gdouble z0re, z0im, z1re, z1im, z2re, z2im, z3re, z3im;
-
- /* Level 0 */
- z0re = re[stride*(gn + m)] + re[stride*(4*gn + m)];
- z0im = im[stride*(gn + m)] + im[stride*(4*gn + m)];
- z1re = re[stride*(gn + m)] - re[stride*(4*gn + m)];
- z1im = im[stride*(gn + m)] - im[stride*(4*gn + m)];
- z2re = re[stride*(2*gn + m)] + re[stride*(3*gn + m)];
- z2im = im[stride*(2*gn + m)] + im[stride*(3*gn + m)];
- z3re = re[stride*(2*gn + m)] - re[stride*(3*gn + m)];
- z3im = im[stride*(2*gn + m)] - im[stride*(3*gn + m)];
-
- /* Level 1 */
- w0re = re[stride*m] + C5_1*z0re + C5_2*z2re;
- w0im = im[stride*m] + C5_1*z0im + C5_2*z2im;
- w1re = re[stride*m] + C5_2*z0re + C5_1*z2re;
- w1im = im[stride*m] + C5_2*z0im + C5_1*z2im;
- /* Multiplication by i */
- w2re = -S5_1*z1im - S5_2*z3im;
- w2im = S5_1*z1re + S5_2*z3re;
- w3re = -S5_2*z1im + S5_1*z3im;
- w3im = S5_2*z1re - S5_1*z3re;
-
- /* Level 2 */
- re[stride*m] += z0re + z2re;
- im[stride*m] += z0im + z2im;
- re[stride*(gn + m)] = w0re + w2re;
- im[stride*(gn + m)] = w0im + w2im;
- re[stride*(2*gn + m)] = w1re + w3re;
- im[stride*(2*gn + m)] = w1im + w3im;
- re[stride*(3*gn + m)] = w1re - w3re;
- im[stride*(3*gn + m)] = w1im - w3im;
- re[stride*(4*gn + m)] = w0re - w2re;
- im[stride*(4*gn + m)] = w0im - w2im;
- }
-}
-
-static void
-pass6(guint gn, guint stride, gdouble *re, gdouble *im)
-{
- guint m;
-
- gn /= 6;
- for (m = 0; m < gn; m++) {
- gdouble w1re, w1im, w2re, w2im;
- gdouble w4re, w4im, w5re, w5im;
- gdouble z0re, z0im, z1re, z1im, z2re, z2im;
- gdouble z3re, z3im, z4re, z4im, z5re, z5im;
-
- /* Level 0 */
- z0re = re[stride*m] + re[stride*(3*gn + m)];
- z0im = im[stride*m] + im[stride*(3*gn + m)];
- z3re = re[stride*m] - re[stride*(3*gn + m)];
- z3im = im[stride*m] - im[stride*(3*gn + m)];
- z1re = re[stride*(gn + m)] + re[stride*(5*gn + m)];
- z1im = im[stride*(gn + m)] + im[stride*(5*gn + m)];
- z5re = re[stride*(gn + m)] - re[stride*(5*gn + m)];
- z5im = im[stride*(gn + m)] - im[stride*(5*gn + m)];
- z2re = re[stride*(2*gn + m)] + re[stride*(4*gn + m)];
- z2im = im[stride*(2*gn + m)] + im[stride*(4*gn + m)];
- z4re = re[stride*(2*gn + m)] - re[stride*(4*gn + m)];
- z4im = im[stride*(2*gn + m)] - im[stride*(4*gn + m)];
-
- /* Level 1 and Level 2 for indices 0 and 3 */
- w1re = z1re + z2re;
- w1im = z1im + z2im;
- w2re = z1re - z2re;
- w2im = z1im - z2im;
- re[stride*m] = z0re + w1re;
- im[stride*m] = z0im + w1im;
- re[stride*(3*gn + m)] = z3re - w2re;
- im[stride*(3*gn + m)] = z3im - w2im;
- w1re *= C3_1;
- w1im *= C3_1;
- w2re *= C3_1;
- w2im *= C3_1;
- /* Multiplication by i */
- w4re = -S3_1*(z4im + z5im);
- w4im = S3_1*(z4re + z5re);
- w5re = -S3_1*(z4im - z5im);
- w5im = S3_1*(z4re - z5re);
-
- /* Level 2 */
- re[stride*(gn + m)] = z3re + w2re + w4re;
- im[stride*(gn + m)] = z3im + w2im + w4im;
- re[stride*(2*gn + m)] = z0re - w1re - w5re;
- im[stride*(2*gn + m)] = z0im - w1im - w5im;
- re[stride*(4*gn + m)] = z0re - w1re + w5re;
- im[stride*(4*gn + m)] = z0im - w1im + w5im;
- re[stride*(5*gn + m)] = z3re + w2re - w4re;
- im[stride*(5*gn + m)] = z3im + w2im - w4im;
- }
-}
-
-static void
-pass7(guint gn, guint stride, gdouble *re, gdouble *im)
-{
- guint m;
-
- gn /= 7;
- for (m = 0; m < gn; m++) {
- gdouble w1re, w1im, w2re, w2im, w3re, w3im;
- gdouble w4re, w4im, w5re, w5im, w6re, w6im;
- gdouble z1re, z1im, z2re, z2im, z3re, z3im;
- gdouble z4re, z4im, z5re, z5im, z6re, z6im;
-
- /* Level 0 */
- z1re = re[stride*(gn + m)] + re[stride*(6*gn + m)];
- z1im = im[stride*(gn + m)] + im[stride*(6*gn + m)];
- z6re = re[stride*(gn + m)] - re[stride*(6*gn + m)];
- z6im = im[stride*(gn + m)] - im[stride*(6*gn + m)];
- z2re = re[stride*(2*gn + m)] + re[stride*(5*gn + m)];
- z2im = im[stride*(2*gn + m)] + im[stride*(5*gn + m)];
- z5re = re[stride*(2*gn + m)] - re[stride*(5*gn + m)];
- z5im = im[stride*(2*gn + m)] - im[stride*(5*gn + m)];
- z3re = re[stride*(3*gn + m)] + re[stride*(4*gn + m)];
- z3im = im[stride*(3*gn + m)] + im[stride*(4*gn + m)];
- z4re = re[stride*(3*gn + m)] - re[stride*(4*gn + m)];
- z4im = im[stride*(3*gn + m)] - im[stride*(4*gn + m)];
-
- /* Level 2 */
- w1re = re[stride*m] + C7_1*z1re + C7_2*z2re + C7_3*z3re;
- w1im = im[stride*m] + C7_1*z1im + C7_2*z2im + C7_3*z3im;
- w2re = re[stride*m] + C7_2*z1re + C7_3*z2re + C7_1*z3re;
- w2im = im[stride*m] + C7_2*z1im + C7_3*z2im + C7_1*z3im;
- w3re = re[stride*m] + C7_3*z1re + C7_1*z2re + C7_2*z3re;
- w3im = im[stride*m] + C7_3*z1im + C7_1*z2im + C7_2*z3im;
- /* Multiplication by i */
- w4re = -S7_2*z4im + S7_1*z5im - S7_3*z6im;
- w4im = S7_2*z4re - S7_1*z5re + S7_3*z6re;
- w5re = S7_1*z4im + S7_3*z5im - S7_2*z6im;
- w5im = -S7_1*z4re - S7_3*z5re + S7_2*z6re;
- w6re = -S7_3*z4im - S7_2*z5im - S7_1*z6im;
- w6im = S7_3*z4re + S7_2*z5re + S7_1*z6re;
-
- /* Level 3 */
- re[stride*m] += z1re + z2re + z3re;
- im[stride*m] += z1im + z2im + z3im;
- re[stride*(gn + m)] = w1re + w6re;
- im[stride*(gn + m)] = w1im + w6im;
- re[stride*(2*gn + m)] = w2re + w5re;
- im[stride*(2*gn + m)] = w2im + w5im;
- re[stride*(3*gn + m)] = w3re + w4re;
- im[stride*(3*gn + m)] = w3im + w4im;
- re[stride*(4*gn + m)] = w3re - w4re;
- im[stride*(4*gn + m)] = w3im - w4im;
- re[stride*(5*gn + m)] = w2re - w5re;
- im[stride*(5*gn + m)] = w2im - w5im;
- re[stride*(6*gn + m)] = w1re - w6re;
- im[stride*(6*gn + m)] = w1im - w6im;
- }
-}
-
-static void
-pass8(guint gn, guint stride, gdouble *re, gdouble *im)
-{
- guint m;
-
- gn /= 8;
- for (m = 0; m < gn; m++) {
- gdouble z0re, z0im, z1re, z1im, z2re, z2im, z3re, z3im;
- gdouble z4re, z4im, z5re, z5im, z6re, z6im, z7re, z7im;
- gdouble w0re, w0im, w1re, w1im, w2re, w2im, w3re, w3im;
- gdouble w4re, w4im, w5re, w5im, w6re, w6im, w7re, w7im;
-
- /* Level 0 */
- z0re = re[stride*m] + re[stride*(4*gn + m)];
- z0im = im[stride*m] + im[stride*(4*gn + m)];
- z1re = re[stride*(gn + m)] + re[stride*(5*gn + m)];
- z1im = im[stride*(gn + m)] + im[stride*(5*gn + m)];
- z2re = re[stride*(2*gn + m)] + re[stride*(6*gn + m)];
- z2im = im[stride*(2*gn + m)] + im[stride*(6*gn + m)];
- z3re = re[stride*(3*gn + m)] + re[stride*(7*gn + m)];
- z3im = im[stride*(3*gn + m)] + im[stride*(7*gn + m)];
- z4re = re[stride*m] - re[stride*(4*gn + m)];
- z4im = im[stride*m] - im[stride*(4*gn + m)];
- z5re = re[stride*(gn + m)] - re[stride*(5*gn + m)];
- z5im = im[stride*(gn + m)] - im[stride*(5*gn + m)];
- z6re = re[stride*(2*gn + m)] - re[stride*(6*gn + m)];
- z6im = im[stride*(2*gn + m)] - im[stride*(6*gn + m)];
- z7re = re[stride*(3*gn + m)] - re[stride*(7*gn + m)];
- z7im = im[stride*(3*gn + m)] - im[stride*(7*gn + m)];
-
- /* Level 1 */
- w0re = z0re + z2re;
- w0im = z0im + z2im;
- w1re = z1re + z3re;
- w1im = z1im + z3im;
- w2re = z0re - z2re;
- w2im = z0im - z2im;
- w3re = z1re - z3re;
- w3im = z1im - z3im;
- /* Multiplication by i */
- w4re = z4re - z6im;
- w4im = z4im + z6re;
- /* Multiplication by i */
- w5re = -(z5im + z7im);
- w5im = z5re + z7re;
- /* Multiplication by i */
- w6re = z4re + z6im;
- w6im = z4im - z6re;
- w7re = z5re - z7re;
- w7im = z5im - z7im;
-
- /* Level 2 and 3 */
- z5re = S8_1*(w5re + w7re);
- z5im = S8_1*(w5im + w7im);
- z7re = S8_1*(w5re - w7re);
- z7im = S8_1*(w5im - w7im);
- re[stride*m] = w0re + w1re;
- im[stride*m] = w0im + w1im;
- re[stride*(gn + m)] = w4re + z5re;
- im[stride*(gn + m)] = w4im + z5im;
- /* Multiplication by i */
- re[stride*(2*gn + m)] = w2re - w3im;
- im[stride*(2*gn + m)] = w2im + w3re;
- re[stride*(3*gn + m)] = w6re + z7re;
- im[stride*(3*gn + m)] = w6im + z7im;
- re[stride*(4*gn + m)] = w0re - w1re;
- im[stride*(4*gn + m)] = w0im - w1im;
- re[stride*(5*gn + m)] = w4re - z5re;
- im[stride*(5*gn + m)] = w4im - z5im;
- /* Multiplication by i */
- re[stride*(6*gn + m)] = w2re + w3im;
- im[stride*(6*gn + m)] = w2im - w3re;
- re[stride*(7*gn + m)] = w6re - z7re;
- im[stride*(7*gn + m)] = w6im - z7im;
- }
-}
-
-static void
-pass10(guint gn, guint stride, gdouble *re, gdouble *im)
-{
- guint m;
-
- gn /= 10;
- for (m = 0; m < gn; m++) {
- gdouble z0re, z0im, z1re, z1im, z2re, z2im, z3re, z3im, z4re, z4im;
- gdouble z5re, z5im, z6re, z6im, z7re, z7im, z8re, z8im, z9re, z9im;
- gdouble w1re, w1im, w2re, w2im, w3re, w3im, w4re, w4im;
- gdouble w6re, w6im, w7re, w7im, w8re, w8im, w9re, w9im;
-
- /* Level 0 */
- z0re = re[stride*m] + re[stride*(5*gn + m)];
- z0im = im[stride*m] + im[stride*(5*gn + m)];
- z5re = re[stride*m] - re[stride*(5*gn + m)];
- z5im = im[stride*m] - im[stride*(5*gn + m)];
- z1re = re[stride*(gn + m)] + re[stride*(9*gn + m)];
- z1im = im[stride*(gn + m)] + im[stride*(9*gn + m)];
- z9re = re[stride*(gn + m)] - re[stride*(9*gn + m)];
- z9im = im[stride*(gn + m)] - im[stride*(9*gn + m)];
- z2re = re[stride*(2*gn + m)] + re[stride*(8*gn + m)];
- z2im = im[stride*(2*gn + m)] + im[stride*(8*gn + m)];
- z8re = re[stride*(2*gn + m)] - re[stride*(8*gn + m)];
- z8im = im[stride*(2*gn + m)] - im[stride*(8*gn + m)];
- z3re = re[stride*(3*gn + m)] + re[stride*(7*gn + m)];
- z3im = im[stride*(3*gn + m)] + im[stride*(7*gn + m)];
- z7re = re[stride*(3*gn + m)] - re[stride*(7*gn + m)];
- z7im = im[stride*(3*gn + m)] - im[stride*(7*gn + m)];
- z4re = re[stride*(4*gn + m)] + re[stride*(6*gn + m)];
- z4im = im[stride*(4*gn + m)] + im[stride*(6*gn + m)];
- z6re = re[stride*(4*gn + m)] - re[stride*(6*gn + m)];
- z6im = im[stride*(4*gn + m)] - im[stride*(6*gn + m)];
-
- /* Level 1 */
- w1re = z1re + z4re;
- w1im = z1im + z4im;
- w2re = z2re + z3re;
- w2im = z2im + z3im;
- w3re = z2re - z3re;
- w3im = z2im - z3im;
- w4re = z1re - z4re;
- w4im = z1im - z4im;
- w6re = z6re + z9re;
- w6im = z6im + z9im;
- w7re = z7re + z8re;
- w7im = z7im + z8im;
- w8re = z7re - z8re;
- w8im = z7im - z8im;
- w9re = z6re - z9re;
- w9im = z6im - z9im;
-
- /* Level 2 (recycling z, except for z0 and z5) */
- z1re = z5re + C10_1*w4re + C10_2*w3re;
- z1im = z5im + C10_1*w4im + C10_2*w3im;
- z2re = z0re + C10_2*w1re - C10_1*w2re;
- z2im = z0im + C10_2*w1im - C10_1*w2im;
- z3re = z5re - C10_2*w4re - C10_1*w3re;
- z3im = z5im - C10_2*w4im - C10_1*w3im;
- z4re = z0re - C10_1*w1re + C10_2*w2re;
- z4im = z0im - C10_1*w1im + C10_2*w2im;
- /* Multiplication by i */
- z6re = S10_1*w9im - S10_2*w8im;
- z6im = -S10_1*w9re + S10_2*w8re;
- z7re = -S10_2*w6im + S10_1*w7im;
- z7im = S10_2*w6re - S10_1*w7re;
- z8re = S10_2*w9im + S10_1*w8im;
- z8im = -S10_2*w9re - S10_1*w8re;
- z9re = -S10_1*w6im - S10_2*w7im;
- z9im = S10_1*w6re + S10_2*w7re;
-
- /* Level 3 */
- re[stride*m] = z0re + w1re + w2re;
- im[stride*m] = z0im + w1im + w2im;
- re[stride*(gn + m)] = z1re + z9re;
- im[stride*(gn + m)] = z1im + z9im;
- re[stride*(2*gn + m)] = z2re + z8re;
- im[stride*(2*gn + m)] = z2im + z8im;
- re[stride*(3*gn + m)] = z3re + z7re;
- im[stride*(3*gn + m)] = z3im + z7im;
- re[stride*(4*gn + m)] = z4re + z6re;
- im[stride*(4*gn + m)] = z4im + z6im;
- re[stride*(5*gn + m)] = z5re + w3re - w4re;
- im[stride*(5*gn + m)] = z5im + w3im - w4im;
- re[stride*(6*gn + m)] = z4re - z6re;
- im[stride*(6*gn + m)] = z4im - z6im;
- re[stride*(7*gn + m)] = z3re - z7re;
- im[stride*(7*gn + m)] = z3im - z7im;
- re[stride*(8*gn + m)] = z2re - z8re;
- im[stride*(8*gn + m)] = z2im - z8im;
- re[stride*(9*gn + m)] = z1re - z9re;
- im[stride*(9*gn + m)] = z1im - z9im;
- }
-}
-/* }}} */
-
/**
* smooth_upper_bound:
* @n: A number.
@@ -723,260 +115,6 @@ smooth_upper_bound(guint n)
}
/**
- * bluestein:
- * @n: The transform size and the array size (unlike passP() and gpass(),
- * this function performs only a single transform).
- * @istride: Input data stride.
- * @in_re: Real part of input data.
- * @in_im: Imaginary part of input data.
- * @ostride: Output data stride.
- * @out_re: Real part of output data.
- * @out_im: Imaginary part of output data.
- *
- * Performs Bluestein's arbitrary-size FFT.
- *
- * Note it calls gwy_fft_simple().
- **/
-static void
-bluestein(guint n,
- guint istride, const gdouble *in_re, const gdouble *in_im,
- guint ostride, gdouble *out_re, gdouble *out_im)
-{
- static gdouble *bre = NULL;
- static guint bn = 0;
- static gdouble *are = NULL;
-
- gdouble *aim, *bim;
- gdouble q;
- guint j, nfft;
-
- nfft = smooth_upper_bound(2*n - 1);
-
- /* Calculate chirp b, Fb */
- if (bn != n) {
- bre = _gwy_scratch_buffer_ensure(bre, 4*nfft);
- bn = n;
-
- bim = bre + nfft;
- bre[0] = 1.0;
- bim[0] = 0.0;
- for (j = 1; j < (n + 1)/2; j++) {
- _gwy_sincos(G_PI*j*j/n, bim + j, bre + j);
- bre[nfft - j] = bre[j];
- bim[nfft - j] = bim[j];
- bre[nfft-n + j] = bre[n - j] = -bre[j];
- bim[nfft-n + j] = bim[n - j] = -bim[j];
- }
-
- for (j = n; j <= nfft-n; j++)
- bre[j] = bim[j] = 0.0;
-
- gwy_fft_simple(GWY_TRANSFORM_DIRECTION_FORWARD, nfft,
- 1, bre, bim, 1, bre + 2*nfft, bim + 2*nfft);
- }
- else
- bim = bre + nfft;
-
- /* Build zero-extended premultiplied a, Fa */
- are = _gwy_scratch_buffer_ensure(are, 4*nfft);
- aim = are + nfft;
-
- for (j = 0; j < n; j++) {
- are[j] = bre[j]*in_re[istride*j] + bim[j]*in_im[istride*j];
- aim[j] = bre[j]*in_im[istride*j] - bim[j]*in_re[istride*j];
- }
- gwy_clear(are + n, nfft - n);
- gwy_clear(aim + n, nfft - n);
- gwy_fft_simple(GWY_TRANSFORM_DIRECTION_FORWARD, nfft,
- 1, are, aim, 1, are + 2*nfft, aim + 2*nfft);
-
- /* Multiply Fa*Fb into Fa and transform back */
- are += 2*nfft;
- aim += 2*nfft;
- bre += 2*nfft;
- bim += 2*nfft;
- for (j = 0; j < nfft; j++) {
- gdouble x = are[j];
-
- are[j] = bre[j]*are[j] - bim[j]*aim[j];
- aim[j] = bre[j]*aim[j] + bim[j]*x;
- }
- are -= 2*nfft;
- aim -= 2*nfft;
- bre -= 2*nfft;
- bim -= 2*nfft;
- gwy_fft_simple(GWY_TRANSFORM_DIRECTION_BACKWARD, nfft,
- 1, are + 2*nfft, aim + 2*nfft, 1, are, aim);
-
- /* Store result into out */
- q = sqrt((gdouble)nfft/n);
- for (j = 0; j < n; j++) {
- out_re[ostride*j] = q*(are[j]*bre[j] + aim[j]*bim[j]);
- out_im[ostride*j] = q*(aim[j]*bre[j] - are[j]*bim[j]);
- }
-}
-
-/**
- * gpass:
- * @p: The factor we want to handle now.
- * @gn: The total array size.
- * @stride: Array stride.
- * @re: Real data.
- * @im: Imaginary data.
- *
- * Performs a general prime-sized butterfly pass.
- *
- * This is a rather naive O(N^2) method.
- *
- * All memory is stack-allocated, do not pass large @p values!
- **/
-static void
-gpass(guint p, guint gn,
- guint stride, gdouble *re, gdouble *im)
-{
- gdouble *fc, *fs, *wer, *wor, *wei, *woi;
- gdouble ucr, uci, usr, usi;
- gint *idx;
- guint q, m, n, j;
- gint k;
-
- gn /= p;
- q = (p - 1)/2;
- fc = g_newa(gdouble, 2*q);
- fs = fc + q;
- for (j = 0; j < q; j++)
- _gwy_sincos(2*G_PI*(j + 1)/p, fs + j, fc + j);
-
- idx = g_newa(gint, q*q);
- for (n = 0; n < q; n++) {
- for (j = 0; j < q; j++) {
- k = (n + 1)*(j + 1) % p;
- idx[n*q + j] = (k > (gint)q) ? k-(gint)p : k;
- }
- }
-
- wer = g_newa(gdouble, 4*q);
- wei = wer + q;
- wor = wer + 2*q;
- woi = wor + q;
- for (m = 0; m < gn; m++) {
- /* even/odd blocks */
- for (j = 1; j <= q; j++) {
- wer[j-1] = re[stride*(j*gn + m)] + re[stride*((p - j)*gn + m)];
- wor[j-1] = re[stride*(j*gn + m)] - re[stride*((p - j)*gn + m)];
- wei[j-1] = im[stride*(j*gn + m)] + im[stride*((p - j)*gn + m)];
- woi[j-1] = im[stride*(j*gn + m)] - im[stride*((p - j)*gn + m)];
- }
- /* block sums */
- for (n = 0; n < q; n++) {
- ucr = re[stride*m];
- uci = im[stride*m];
- usr = 0.0;
- usi = 0.0;
- for (j = 0; j < q; j++) {
- if ((k = idx[n*q + j]) > 0) {
- ucr += fc[k-1]*wer[j];
- uci += fc[k-1]*wei[j];
- usr += fs[k-1]*wor[j];
- usi += fs[k-1]*woi[j];
- }
- else {
- ucr += fc[-k-1]*wer[j];
- uci += fc[-k-1]*wei[j];
- usr -= fs[-k-1]*wor[j];
- usi -= fs[-k-1]*woi[j];
- }
- }
- re[stride*((n + 1)*gn + m)] = ucr - usi;
- im[stride*((n + 1)*gn + m)] = uci + usr;
- re[stride*((p-1 - n)*gn + m)] = ucr + usi;
- im[stride*((p-1 - n)*gn + m)] = uci - usr;
- }
- /* first row */
- for (j = 0; j < q; j++) {
- re[stride*m] += wer[j];
- im[stride*m] += wei[j];
- }
- }
-}
-
-/**
- * analyse_size:
- * @n: A number (transform size).
- * @pp: An array to put its factors to. The caller is responsible for it
- * being large enough.
- *
- * Factors a transform size into suitable subtransform sizes.
- *
- * The factors are not necessarily primes, they are either factors we have
- * passP() routine for (and larger compound factors are preferred then), or
- * they are prime factors handled by gpass(). If anything remains, it is
- * put to the last item and the return value is negated.
- *
- * Returns: The number of factors put into @pp, negated if the last factor
- * is a Big Ugly Number(TM).
- **/
-static gint
-analyse_size(guint n, guint *pp)
-{
- guint m, p, k;
- gint np;
-
- for (m = 1, np = 0; m < n; m *= p, np++) {
- k = n/m;
- if (k % 5 == 0)
- p = (k % 2 == 0) ? 10 : 5;
- else if (k % 3 == 0)
- p = (k % 2 == 0) ? 6 : 3;
- else if (k % 2 == 0)
- p = (k % 4 == 0) ? ((k % 8 == 0 && k != 16) ? 8 : 4) : 2;
- else if (k % 7 == 0)
- p = 7;
- /* Out of luck with nice factors. Try the less nice ones. */
- else {
- /* gpass() ceases to be competitive with bluestein() around 70.
- * Also, the required stack space exceeds 1kB. */
- static const guint primes[] = {
- 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67
- };
-
- for (m = 0; m < G_N_ELEMENTS(primes); m++) {
- p = primes[m];
- while (k % p == 0) {
- pp[np] = p;
- np++;
- k /= p;
- }
- if (k == 1)
- return np;
- }
- /* Ugly large prime factors still remain.
- * Indicate them by a negative return value. */
- pp[np] = k;
- np++;
-
- return -np;
- }
- pp[np] = p;
- }
-
- return np;
-}
-
-static void
-normalize(guint n, gdouble norm_fact,
- guint istride, const gdouble *in_re, const gdouble *in_im,
- guint ostride, gdouble *out_re, gdouble *out_im)
-{
- guint j;
-
- for (j = 0; j < n; j++) {
- out_re[ostride*j] = norm_fact*in_re[istride*j];
- out_im[ostride*j] = norm_fact*in_im[istride*j];
- }
-}
-
-/**
* gwy_fft_simple:
* @dir: Transformation direction.
* @n: Number of data points. Note only certain transform sizes are
@@ -993,8 +131,9 @@ normalize(guint n, gdouble norm_fact,
*
* Performs a DFT algorithm.
*
- * This is a low-level function used by other FFT functions when no better
- * backend is available.
+ * This is a low-level function that used to be employed by other FFT functions
+ * when no better backend was available. Since version 2.49 it just calls the
+ * corresponding FFTW routine.
*
* Strides are distances between samples in input and output arrays. Use 1
* for normal `dense' arrays. To use gwy_fft_simple() with interleaved arrays,
@@ -1016,112 +155,50 @@ gwy_fft_simple(GwyTransformDirection dir,
gdouble *out_re,
gdouble *out_im)
{
- static const ButterflyFunc butterflies[] = {
- NULL, NULL, pass2, pass3, pass4,
- pass5, pass6, pass7, pass8, NULL,
- pass10
- };
-
- static gdouble *buffer = NULL;
-
- guint *pp;
- gdouble *buf_re, *buf_im;
- guint m, j, p, k, bstride;
- gint np;
- gdouble norm_fact;
-
- /* The subroutines are written for +i in the exponent. Shoot me. */
- if (dir != GWY_TRANSFORM_DIRECTION_BACKWARD) {
- GWY_SWAP(const gdouble*, in_re, in_im);
- GWY_SWAP(gdouble*, out_re, out_im);
- }
-
- m = 1;
- pp = g_newa(guint, 21);
- np = analyse_size(n, pp);
-#ifdef DEBUG
- {
- GString *str;
-
- str = g_string_new(NULL);
- g_string_append_printf(str, "%u:", n);
- for (j = 0; j < (guint)ABS(np); j++)
- g_string_append_printf(str, " %u", pp[j]);
- if (np < 0)
- g_string_append(str, "(!)");
- gwy_debug("factorization: %s", str->str);
- g_string_free(str, TRUE);
- }
-#endif
- /* This is exteremely simplistic. Although we do not have codelets for
- * the factors, we could still factorize it and use much smaller transform
- * sizes in bluestein(). */
- if (np < 0) {
- /* bluestein() calls recursively gwy_fft_simple() and the contents of
- * buf[] is overwriten. */
- np = -np-1;
- m = pp[np];
- k = n/m;
- /* FIXME: This has a terrible memory access pattern.
- * The swapped arrays are all right, bluestein() uses a normal
- * sign convention, unlike everything else here. */
- for (j = 0; j < k; j++)
- bluestein(m,
- k*istride, in_im + j*istride, in_re + j*istride,
- k*ostride, out_im + j*ostride, out_re + j*ostride);
- if (k == 1)
- return;
- }
-
- /* XXX: This is never freed. */
- buf_re = buffer = _gwy_scratch_buffer_ensure(buffer, 2*n);
- buf_im = buf_re + n;
- bstride = 1;
+ fftw_iodim dims[1], howmany_dims[1];
+ fftw_plan plan;
+ gdouble q;
- /* Here it gets hairy.
- * We can have the data either in out or in in.
- * And we may want them either in out or in buf. */
- norm_fact = sqrt((gdouble)m/n);
- if (m > 1) {
- if (np % 2 == 0) {
- normalize(n, norm_fact,
- ostride, out_re, out_im, ostride, out_re, out_im);
+ if (G_UNLIKELY(!n))
+ return;
- GWY_SWAP(gdouble*, buf_re, out_re);
- GWY_SWAP(gdouble*, buf_im, out_im);
- GWY_SWAP(guint, bstride, ostride);
- }
- else {
- normalize(n, norm_fact,
- ostride, out_re, out_im, bstride, buf_re, buf_im);
- }
+ g_return_if_fail(istride > 0);
+ g_return_if_fail(ostride > 0);
+
+ dims[0].n = n;
+ dims[0].is = istride;
+ dims[0].os = ostride;
+ howmany_dims[0].n = 1;
+ howmany_dims[0].is = n;
+ howmany_dims[0].os = n;
+
+ /* Use FFTW_PRESERVE_INPUT to fullfill the promise we do not modify the
+ * input arrays and typecast the const away for FFTW. */
+ if (dir == GWY_TRANSFORM_DIRECTION_BACKWARD) {
+ plan = fftw_plan_guru_split_dft(1, dims, 1, howmany_dims,
+ (gdouble*)in_im, (gdouble*)in_re,
+ out_im, out_re,
+ _GWY_FFTW_PATIENCE
+ | FFTW_PRESERVE_INPUT);
}
else {
- if (np % 2 == 0 && n > 1) {
- GWY_SWAP(gdouble*, buf_re, out_re);
- GWY_SWAP(gdouble*, buf_im, out_im);
- GWY_SWAP(guint, bstride, ostride);
- }
- normalize(n, norm_fact,
- istride, in_re, in_im, ostride, out_re, out_im);
+ plan = fftw_plan_guru_split_dft(1, dims, 1, howmany_dims,
+ (gdouble*)in_re, (gdouble*)in_im,
+ out_re, out_im,
+ _GWY_FFTW_PATIENCE
+ | FFTW_PRESERVE_INPUT);
}
- /* Cooley-Tukey */
- for (k = 0; k < (guint)np; k++, m *= p) {
- p = pp[k];
- if (m > 1)
- shuffle_and_twiddle(n, m*p, p,
- bstride, buf_re, buf_im,
- ostride, out_re, out_im);
-
- if (p < G_N_ELEMENTS(butterflies))
- butterflies[p](n, ostride, out_re, out_im);
- else
- gpass(p, n, ostride, out_re, out_im);
+ g_return_if_fail(plan);
+ fftw_execute(plan);
+ fftw_destroy_plan(plan);
- GWY_SWAP(gdouble*, buf_re, out_re);
- GWY_SWAP(gdouble*, buf_im, out_im);
- GWY_SWAP(guint, bstride, ostride);
+ q = 1.0/sqrt(n);
+ while (n--) {
+ *out_re *= q;
+ *out_im *= q;
+ out_re += ostride;
+ out_im += ostride;
}
}
@@ -1319,15 +396,16 @@ gwy_fft_window_data_field(GwyDataField *dfield,
* @see_also: <link linkend="libgwyprocess-inttrans">inttrans</link>
* -- high-level integral transform functions
*
- * The simple one-dimensional FFT algorithm gwy_fft_simple() is used as
- * a fallback by other functions when a better implementation (FFTW3) is not
- * available.
+ * The simple one-dimensional FFT algorithm gwy_fft_simple() used to be
+ * employed as a fallback by other functions when a better implementation
+ * (FFTW3) was not available. Since version 2.49 it just calls the
+ * corresponding FFTW routine.
*
- * You should not use it directly, as it is a waste of resources
- * if FFTW3 backed is in use, neither you should feel any need to, as
- * high-level functions such as gwy_data_field_2dfft() are available.
+ * Generally, you should either use high-level Gwyddion functions such as
+ * gwy_data_field_2dfft_raw() or, if they are insufficient, FFTW routines
+ * directly.
*
- * Up to version 2.7 simpleFFT works only with certain tranform sizes, mostly
+ * Up to version 2.7 simpleFFT required certain tranform sizes, mostly
* powers of 2. Since 2.8 it can handle arbitrary tranform sizes, although
* sizes with large prime factors can be quite slow (still O(n*log(n)) though).
**/
diff --git a/libprocess/spectra.c b/libprocess/spectra.c
index b334ab0..c42e4b2 100644
--- a/libprocess/spectra.c
+++ b/libprocess/spectra.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: spectra.c 19108 2016-10-21 08:50:43Z yeti-dn $
+ * @(#) $Id: spectra.c 20128 2017-08-01 11:19:59Z yeti-dn $
* Copyright (C) 2006 Owain Davies, David Necas (Yeti), Petr Klapetek.
* E-mail: owain.davies at blueyonder.co.uk
* yeti at gwyddion.net, klapetek at gwyddion.net.
@@ -30,6 +30,7 @@
#include <libprocess/spectra.h>
#include <libprocess/linestats.h>
#include <libprocess/interpolation.h>
+#include "gwyprocessinternal.h"
#define GWY_SPECTRA_TYPE_NAME "GwySpectra"
/* default number number of spectra allocated to data and coords */
@@ -178,8 +179,6 @@ gwy_spectra_finalize(GObject *object)
GwySpectra *spectra = (GwySpectra*)object;
guint i;
- gwy_debug("");
-
GWY_OBJECT_UNREF(spectra->si_unit_xy);
for (i = 0; i < spectra->spectra->len; i++) {
GwySpectrum *spec = &g_array_index(spectra->spectra, GwySpectrum, i);
@@ -291,9 +290,7 @@ gwy_spectra_new_alike(GwySpectra *model)
g_return_val_if_fail(GWY_IS_SPECTRA(model), NULL);
spectra = g_object_new(GWY_TYPE_SPECTRA, NULL);
-
- if (model->si_unit_xy)
- spectra->si_unit_xy = gwy_si_unit_duplicate(model->si_unit_xy);
+ _gwy_assign_si_unit(model->si_unit_xy, &spectra->si_unit_xy);
return spectra;
}
@@ -356,23 +353,20 @@ gwy_spectra_serialize(GObject *obj,
guint32 *selected;
guint32 ncurves, ncoords, nselected;
GByteArray *retval;
-
- gwy_debug("");
- g_return_val_if_fail(GWY_IS_SPECTRA(obj), NULL);
+ gpointer pxyunit;
spectra = GWY_SPECTRA(obj);
- if (!spectra->si_unit_xy)
- spectra->si_unit_xy = gwy_si_unit_new(NULL);
separate_arrays(spectra->spectra,
&ncurves, &curves,
&ncoords, &coords,
&nselected, &selected);
+ pxyunit = unit_pointer_if_nonempty(spectra->si_unit_xy);
{
GwySerializeSpec spec[] = {
{ 's', "title", &spectra->title, NULL, },
- { 'o', "si_unit_xy", &spectra->si_unit_xy, NULL, },
+ { 'o', "si_unit_xy", pxyunit, NULL, },
{ 'D', "coords", &coords, &ncoords, },
{ 'I', "selected", &selected, &nselected, },
{ 'O', "data", &curves, &ncurves, },
@@ -401,23 +395,20 @@ gwy_spectra_get_size(GObject *obj)
guint32 *selected;
guint32 ncurves, ncoords, nselected;
gsize retval;
-
- gwy_debug("");
- g_return_val_if_fail(GWY_IS_SPECTRA(obj), 0);
+ gpointer pxyunit;
spectra = GWY_SPECTRA(obj);
- if (!spectra->si_unit_xy)
- spectra->si_unit_xy = gwy_si_unit_new(NULL);
separate_arrays(spectra->spectra,
&ncurves, &curves,
&ncoords, &coords,
&nselected, &selected);
+ pxyunit = unit_pointer_if_nonempty(spectra->si_unit_xy);
{
GwySerializeSpec spec[] = {
{ 's', "title", &spectra->title, NULL, },
- { 'o', "si_unit_xy", &spectra->si_unit_xy, NULL, },
+ { 'o', "si_unit_xy", pxyunit, NULL, },
{ 'D', "coords", &coords, &ncoords, },
{ 'I', "selected", &selected, &nselected, },
{ 'O', "data", &curves, &ncurves, },
@@ -546,8 +537,7 @@ gwy_spectra_duplicate_real(GObject *object)
spectra = GWY_SPECTRA(object);
duplicate = gwy_spectra_new_alike(spectra);
duplicate->title = g_strdup(spectra->title);
- if (spectra->si_unit_xy)
- duplicate->si_unit_xy = gwy_si_unit_duplicate(spectra->si_unit_xy);
+ _gwy_assign_si_unit(spectra->si_unit_xy, &duplicate->si_unit_xy);
g_array_append_vals(duplicate->spectra, spectra->spectra->data,
spectra->spectra->len);
@@ -595,14 +585,7 @@ gwy_spectra_clone_real(GObject *source, GObject *copy)
= gwy_data_line_duplicate(dataline);
}
- /* SI Units can be NULL */
- if (spectra->si_unit_xy && clone->si_unit_xy)
- gwy_serializable_clone(G_OBJECT(spectra->si_unit_xy),
- G_OBJECT(clone->si_unit_xy));
- else if (spectra->si_unit_xy && !clone->si_unit_xy)
- clone->si_unit_xy = gwy_si_unit_duplicate(spectra->si_unit_xy);
- else if (!spectra->si_unit_xy && clone->si_unit_xy)
- GWY_OBJECT_UNREF(clone->si_unit_xy);
+ _gwy_assign_si_unit(spectra->si_unit_xy, &clone->si_unit_xy);
}
/**
@@ -659,13 +642,7 @@ gwy_spectra_set_si_unit_xy(GwySpectra *spectra,
GwySIUnit *si_unit)
{
g_return_if_fail(GWY_IS_SPECTRA(spectra));
- g_return_if_fail(GWY_IS_SI_UNIT(si_unit));
- if (spectra->si_unit_xy == si_unit)
- return;
-
- GWY_OBJECT_UNREF(spectra->si_unit_xy);
- g_object_ref(si_unit);
- spectra->si_unit_xy = si_unit;
+ _gwy_set_object_si_unit(si_unit, &spectra->si_unit_xy);
}
/**
diff --git a/libprocess/spline.c b/libprocess/spline.c
index 699afc2..b2b75c6 100644
--- a/libprocess/spline.c
+++ b/libprocess/spline.c
@@ -1,6 +1,6 @@
/*
- * @(#) $Id: spline.c 19036 2016-10-08 10:32:41Z yeti-dn $
- * Copyright (C) 2016 David Necas (Yeti).
+ * @(#) $Id: spline.c 20156 2017-08-03 15:04:56Z yeti-dn $
+ * Copyright (C) 2016-2017 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
* This program is free software; you can redistribute it and/or modify
@@ -19,10 +19,8 @@
* Boston, MA 02110-1301, USA.
*/
-#include "config.h"
#include <string.h>
#include <libgwyddion/gwymacros.h>
-#include <libgwyddion/gwymath.h>
#include <libprocess/spline.h>
#define MAX_RECURSION_DEPTH 20
@@ -104,6 +102,20 @@ static void sample_curve_uniformly (GwySpline *spline,
GwyXY *velocities);
static void calculate_point_tangents(GwySpline *spline);
+GType
+gwy_spline_get_type(void)
+{
+ static GType spline_type = 0;
+
+ if (G_UNLIKELY(!spline_type)) {
+ spline_type = g_boxed_type_register_static("GwySpline",
+ (GBoxedCopyFunc)gwy_spline_copy,
+ (GBoxedFreeFunc)gwy_spline_free);
+ }
+
+ return spline_type;
+}
+
/**
* gwy_spline_new:
*
@@ -157,6 +169,30 @@ gwy_spline_free(GwySpline *spline)
}
/**
+ * gwy_spline_copy:
+ * @spline: A spline curve.
+ *
+ * Creates a copy of a spline curve.
+ *
+ * Returns: A newly created spline curve.
+ *
+ * Since: 2.49
+ **/
+GwySpline*
+gwy_spline_copy(GwySpline *spline)
+{
+ GwySpline *retval;
+
+ g_return_val_if_fail(spline, NULL);
+ retval = gwy_spline_new_from_points((const GwyXY*)spline->points->data,
+ spline->points->len);
+ retval->slackness = spline->slackness;
+ retval->closed = spline->closed;
+
+ return retval;
+}
+
+/**
* gwy_spline_new_from_points:
* @xy: Array of points in plane the curve will pass through.
* @n: Number of points in @xy.
diff --git a/libprocess/spline.h b/libprocess/spline.h
index f0c98a4..be0259f 100644
--- a/libprocess/spline.h
+++ b/libprocess/spline.h
@@ -1,6 +1,6 @@
/*
- * @(#) $Id: spline.h 18313 2016-02-22 08:34:52Z yeti-dn $
- * Copyright (C) 2016 David Necas (Yeti).
+ * @(#) $Id: spline.h 20157 2017-08-03 15:19:20Z yeti-dn $
+ * Copyright (C) 2016-2017 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
* This program is free software; you can redistribute it and/or modify
@@ -23,14 +23,18 @@
#define __GWY_SPLINE_H__
#include <glib.h>
-#include <libprocess/triangulation.h>
+#include <libgwyddion/gwymath.h>
G_BEGIN_DECLS
typedef struct _GwySpline GwySpline;
-GwySpline* gwy_spline_new (void);
+#define GWY_TYPE_SPLINE (gwy_spline_get_type())
+
+GType gwy_spline_get_type (void) G_GNUC_CONST;
+GwySpline* gwy_spline_new (void) G_GNUC_MALLOC;
void gwy_spline_free (GwySpline *spline);
+GwySpline* gwy_spline_copy (GwySpline *spline) G_GNUC_MALLOC;
GwySpline* gwy_spline_new_from_points (const GwyXY *xy,
guint n);
guint gwy_spline_get_npoints (GwySpline *spline);
diff --git a/libprocess/stats-acfpsdf.c b/libprocess/stats-acfpsdf.c
new file mode 100644
index 0000000..8e2892d
--- /dev/null
+++ b/libprocess/stats-acfpsdf.c
@@ -0,0 +1,2192 @@
+/*
+ * @(#) $Id: stats-acfpsdf.c 20128 2017-08-01 11:19:59Z yeti-dn $
+ * Copyright (C) 2003-2017 David Necas (Yeti), Petr Klapetek.
+ * E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include <string.h>
+#include <fftw3.h>
+#include <libgwyddion/gwymacros.h>
+#include <libgwyddion/gwymath.h>
+#include <libprocess/simplefft.h>
+#include <libprocess/datafield.h>
+#include <libprocess/correct.h>
+#include <libprocess/stats.h>
+#include <libprocess/inttrans.h>
+#include "gwyprocessinternal.h"
+
+#define gwycreal(x) ((x)[0])
+#define gwycimag(x) ((x)[1])
+
+typedef void (*GwyFFTAreaFunc)(fftw_plan plan,
+ GwyDataLine *din,
+ GwyDataLine *dout,
+ GwyDataLine *target_line);
+
+static inline void
+do_fft_acf(fftw_plan plan,
+ GwyDataLine *din,
+ GwyDataLine *dout,
+ GwyDataLine *target_line)
+{
+ gdouble *in, *out;
+ gint j, width, res;
+
+ width = target_line->res;
+ res = din->res;
+ in = din->data;
+ out = dout->data;
+
+ gwy_clear(in + width, res - width);
+
+ fftw_execute(plan);
+ in[0] = out[0]*out[0];
+ for (j = 1; j < (res + 1)/2; j++)
+ in[j] = in[res-j] = out[j]*out[j] + out[res-j]*out[res-j];
+ if (!(res % 2))
+ in[res/2] = out[res/2]*out[res/2];
+
+ fftw_execute(plan);
+ for (j = 0; j < width; j++)
+ target_line->data[j] += out[j]/(width - j);
+}
+
+static inline void
+do_fft_hhcf(fftw_plan plan,
+ GwyDataLine *din,
+ GwyDataLine *dout,
+ GwyDataLine *target_line)
+{
+ gdouble *in, *out;
+ gdouble sum;
+ gint j, width, res;
+
+ width = target_line->res;
+ res = din->res;
+ in = din->data;
+ out = dout->data;
+
+ sum = 0.0;
+ for (j = 0; j < width; j++) {
+ sum += in[j]*in[j] + in[width-1-j]*in[width-1-j];
+ target_line->data[width-1-j] += sum*res/(j+1);
+ }
+
+ gwy_clear(in + width, res - width);
+
+ fftw_execute(plan);
+ in[0] = out[0]*out[0];
+ for (j = 1; j < (res + 1)/2; j++)
+ in[j] = in[res-j] = out[j]*out[j] + out[res-j]*out[res-j];
+ if (!(res % 2))
+ in[res/2] = out[res/2]*out[res/2];
+
+ fftw_execute(plan);
+ for (j = 0; j < width; j++)
+ target_line->data[j] -= 2*out[j]/(width - j);
+}
+
+static void
+gwy_data_field_area_func_fft(GwyDataField *data_field,
+ GwyDataLine *target_line,
+ GwyFFTAreaFunc func,
+ gint col, gint row,
+ gint width, gint height,
+ GwyOrientation orientation,
+ GwyInterpolationType interpolation,
+ gint nstats)
+{
+ GwyDataLine *din, *dout;
+ fftw_plan plan;
+ gdouble *in, *out, *drow, *dcol;
+ gint i, j, xres, yres, res = 0;
+ gdouble avg;
+
+ g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
+ g_return_if_fail(GWY_IS_DATA_LINE(target_line));
+ xres = data_field->xres;
+ yres = data_field->yres;
+ g_return_if_fail(col >= 0 && row >= 0
+ && width >= 1 && height >= 1
+ && col + width <= xres
+ && row + height <= yres);
+ g_return_if_fail(orientation == GWY_ORIENTATION_HORIZONTAL
+ || orientation == GWY_ORIENTATION_VERTICAL);
+
+ switch (orientation) {
+ case GWY_ORIENTATION_HORIZONTAL:
+ res = gwy_fft_find_nice_size(2*xres);
+ gwy_data_line_resample(target_line, width, GWY_INTERPOLATION_NONE);
+ break;
+
+ case GWY_ORIENTATION_VERTICAL:
+ res = gwy_fft_find_nice_size(2*yres);
+ gwy_data_line_resample(target_line, height, GWY_INTERPOLATION_NONE);
+ break;
+ }
+ gwy_data_line_clear(target_line);
+ gwy_data_line_set_offset(target_line, 0.0);
+
+ din = gwy_data_line_new(res, 1.0, FALSE);
+ dout = gwy_data_line_new(res, 1.0, FALSE);
+ in = gwy_data_line_get_data(din);
+ out = gwy_data_line_get_data(dout);
+ plan = fftw_plan_r2r_1d(res, in, out, FFTW_R2HC, _GWY_FFTW_PATIENCE);
+ g_return_if_fail(plan);
+
+ switch (orientation) {
+ case GWY_ORIENTATION_HORIZONTAL:
+ for (i = 0; i < height; i++) {
+ drow = data_field->data + (i + row)*xres + col;
+ avg = gwy_data_field_area_get_avg(data_field, NULL,
+ col, row+i, width, 1);
+ for (j = 0; j < width; j++)
+ in[j] = drow[j] - avg;
+ func(plan, din, dout, target_line);
+ }
+ gwy_data_line_set_real(target_line,
+ gwy_data_field_jtor(data_field, width));
+ gwy_data_line_multiply(target_line, 1.0/(res*height));
+ break;
+
+ case GWY_ORIENTATION_VERTICAL:
+ for (i = 0; i < width; i++) {
+ dcol = data_field->data + row*xres + (i + col);
+ avg = gwy_data_field_area_get_avg(data_field, NULL,
+ col+i, row, 1, height);
+ for (j = 0; j < height; j++)
+ in[j] = dcol[j*xres] - avg;
+ func(plan, din, dout, target_line);
+ }
+ gwy_data_line_set_real(target_line,
+ gwy_data_field_itor(data_field, height));
+ gwy_data_line_multiply(target_line, 1.0/(res*width));
+ break;
+ }
+
+ fftw_destroy_plan(plan);
+ g_object_unref(din);
+ g_object_unref(dout);
+
+ if (nstats > 1)
+ gwy_data_line_resample(target_line, nstats, interpolation);
+}
+
+/**
+ * gwy_data_field_area_acf:
+ * @data_field: A data field.
+ * @target_line: A data line to store the distribution to. It will be
+ * resampled to requested width.
+ * @col: Upper-left column coordinate.
+ * @row: Upper-left row coordinate.
+ * @width: Area width (number of columns).
+ * @height: Area height (number of rows).
+ * @orientation: Orientation of lines (ACF is simply averaged over the
+ * other orientation).
+ * @interpolation: Interpolation to use when @nstats is given and requires
+ * resampling.
+ * @nstats: The number of samples to take on the distribution function. If
+ * nonpositive, @width (@height) is used.
+ *
+ * Calculates one-dimensional autocorrelation function of a rectangular part of
+ * a data field.
+ **/
+void
+gwy_data_field_area_acf(GwyDataField *data_field,
+ GwyDataLine *target_line,
+ gint col, gint row,
+ gint width, gint height,
+ GwyOrientation orientation,
+ GwyInterpolationType interpolation,
+ gint nstats)
+{
+ gwy_data_field_area_func_fft(data_field, target_line,
+ &do_fft_acf,
+ col, row, width, height,
+ orientation, interpolation, nstats);
+ /* Set proper units */
+ _gwy_assign_si_unit(data_field->si_unit_xy, &target_line->si_unit_x);
+ gwy_si_unit_power(gwy_data_field_get_si_unit_z(data_field), 2,
+ gwy_data_line_get_si_unit_y(target_line));
+}
+
+/**
+ * gwy_data_field_acf:
+ * @data_field: A data field.
+ * @target_line: A data line to store the distribution to. It will be
+ * resampled to requested width.
+ * @orientation: Orientation of lines (ACF is simply averaged over the
+ * other orientation).
+ * @interpolation: Interpolation to use when @nstats is given and requires
+ * resampling.
+ * @nstats: The number of samples to take on the distribution function. If
+ * nonpositive, data field width (height) is used.
+ *
+ * Calculates one-dimensional autocorrelation function of a data field.
+ **/
+void
+gwy_data_field_acf(GwyDataField *data_field,
+ GwyDataLine *target_line,
+ GwyOrientation orientation,
+ GwyInterpolationType interpolation,
+ gint nstats)
+{
+ g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
+ gwy_data_field_area_acf(data_field, target_line,
+ 0, 0, data_field->xres, data_field->yres,
+ orientation, interpolation, nstats);
+}
+
+/**
+ * gwy_data_field_area_hhcf:
+ * @data_field: A data field.
+ * @target_line: A data line to store the distribution to. It will be
+ * resampled to requested width.
+ * @col: Upper-left column coordinate.
+ * @row: Upper-left row coordinate.
+ * @width: Area width (number of columns).
+ * @height: Area height (number of rows).
+ * @orientation: Orientation of lines (HHCF is simply averaged over the
+ * other orientation).
+ * @interpolation: Interpolation to use when @nstats is given and requires
+ * resampling.
+ * @nstats: The number of samples to take on the distribution function. If
+ * nonpositive, @width (@height) is used.
+ *
+ * Calculates one-dimensional autocorrelation function of a rectangular part of
+ * a data field.
+ **/
+void
+gwy_data_field_area_hhcf(GwyDataField *data_field,
+ GwyDataLine *target_line,
+ gint col, gint row,
+ gint width, gint height,
+ GwyOrientation orientation,
+ GwyInterpolationType interpolation,
+ gint nstats)
+{
+ gwy_data_field_area_func_fft(data_field, target_line, &do_fft_hhcf,
+ col, row, width, height,
+ orientation, interpolation, nstats);
+
+ /* Set proper units */
+ _gwy_assign_si_unit(data_field->si_unit_xy, &target_line->si_unit_x);
+ gwy_si_unit_power(gwy_data_field_get_si_unit_z(data_field), 2,
+ gwy_data_line_get_si_unit_y(target_line));
+}
+
+/**
+ * gwy_data_field_hhcf:
+ * @data_field: A data field.
+ * @target_line: A data line to store the distribution to. It will be
+ * resampled to requested width.
+ * @orientation: Orientation of lines (HHCF is simply averaged over the
+ * other orientation).
+ * @interpolation: Interpolation to use when @nstats is given and requires
+ * resampling.
+ * @nstats: The number of samples to take on the distribution function. If
+ * nonpositive, data field width (height) is used.
+ *
+ * Calculates one-dimensional autocorrelation function of a data field.
+ **/
+void
+gwy_data_field_hhcf(GwyDataField *data_field,
+ GwyDataLine *target_line,
+ GwyOrientation orientation,
+ GwyInterpolationType interpolation,
+ gint nstats)
+{
+ g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
+ gwy_data_field_area_hhcf(data_field, target_line,
+ 0, 0, data_field->xres, data_field->yres,
+ orientation, interpolation, nstats);
+}
+
+/**
+ * gwy_data_field_area_psdf:
+ * @data_field: A data field.
+ * @target_line: A data line to store the distribution to. It will be
+ * resampled to requested width.
+ * @col: Upper-left column coordinate.
+ * @row: Upper-left row coordinate.
+ * @width: Area width (number of columns).
+ * @height: Area height (number of rows).
+ * @orientation: Orientation of lines (PSDF is simply averaged over the
+ * other orientation).
+ * @interpolation: Interpolation to use when @nstats is given and requires
+ * resampling.
+ * @windowing: Windowing type to use.
+ * @nstats: The number of samples to take on the distribution function. If
+ * nonpositive, data field width (height) is used.
+ *
+ * Calculates one-dimensional power spectrum density function of a rectangular
+ * part of a data field.
+ **/
+void
+gwy_data_field_area_psdf(GwyDataField *data_field,
+ GwyDataLine *target_line,
+ gint col, gint row,
+ gint width, gint height,
+ GwyOrientation orientation,
+ GwyInterpolationType interpolation,
+ GwyWindowingType windowing,
+ gint nstats)
+{
+ GwyDataField *re_field, *im_field;
+ GwySIUnit *xyunit, *zunit, *lineunit;
+ gdouble *re, *im, *target;
+ gint i, j, xres, yres, size;
+
+ g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
+ g_return_if_fail(GWY_IS_DATA_LINE(target_line));
+ xres = data_field->xres;
+ yres = data_field->yres;
+ size = (orientation == GWY_ORIENTATION_HORIZONTAL) ? width : height;
+ g_return_if_fail(col >= 0 && row >= 0
+ && width >= 1 && height >= 1
+ && size >= 4
+ && col + width <= xres
+ && row + height <= yres);
+ g_return_if_fail(orientation == GWY_ORIENTATION_HORIZONTAL
+ || orientation == GWY_ORIENTATION_VERTICAL);
+
+ if (nstats < 1)
+ nstats = size/2 - 1;
+ gwy_data_line_resample(target_line, size/2, GWY_INTERPOLATION_NONE);
+ gwy_data_line_clear(target_line);
+ gwy_data_line_set_offset(target_line, 0.0);
+
+ re_field = gwy_data_field_new(width, height, 1.0, 1.0, FALSE);
+ im_field = gwy_data_field_new(width, height, 1.0, 1.0, FALSE);
+ target = target_line->data;
+ switch (orientation) {
+ case GWY_ORIENTATION_HORIZONTAL:
+ gwy_data_field_area_1dfft(data_field, NULL, re_field, im_field,
+ col, row, width, height,
+ orientation,
+ windowing,
+ GWY_TRANSFORM_DIRECTION_FORWARD,
+ interpolation,
+ TRUE, 2);
+ re = re_field->data;
+ im = im_field->data;
+ for (i = 0; i < height; i++) {
+ for (j = 0; j < size/2; j++)
+ target[j] += re[i*width + j]*re[i*width + j]
+ + im[i*width + j]*im[i*width + j];
+ }
+ gwy_data_line_multiply(target_line,
+ data_field->xreal/xres/(2*G_PI*height));
+ gwy_data_line_set_real(target_line, G_PI*xres/data_field->xreal);
+ break;
+
+ case GWY_ORIENTATION_VERTICAL:
+ gwy_data_field_area_1dfft(data_field, NULL, re_field, im_field,
+ col, row, width, height,
+ orientation,
+ windowing,
+ GWY_TRANSFORM_DIRECTION_FORWARD,
+ interpolation,
+ TRUE, 2);
+ re = re_field->data;
+ im = im_field->data;
+ for (i = 0; i < width; i++) {
+ for (j = 0; j < size/2; j++)
+ target[j] += re[j*width + i]*re[j*width + i]
+ + im[j*width + i]*im[j*width + i];
+ }
+ gwy_data_line_multiply(target_line,
+ data_field->yreal/yres/(2*G_PI*width));
+ gwy_data_line_set_real(target_line, G_PI*yres/data_field->yreal);
+ break;
+ }
+
+ gwy_data_line_set_offset(target_line,
+ target_line->real/target_line->res);
+ gwy_data_line_resize(target_line, 1, target_line->res);
+ gwy_data_line_resample(target_line, nstats, interpolation);
+
+ g_object_unref(re_field);
+ g_object_unref(im_field);
+
+ /* Set proper units */
+ xyunit = gwy_data_field_get_si_unit_xy(data_field);
+ zunit = gwy_data_field_get_si_unit_z(data_field);
+ lineunit = gwy_data_line_get_si_unit_x(target_line);
+ gwy_si_unit_power(xyunit, -1, lineunit);
+ lineunit = gwy_data_line_get_si_unit_y(target_line);
+ gwy_si_unit_power(zunit, 2, lineunit);
+ gwy_si_unit_multiply(lineunit, xyunit, lineunit);
+}
+
+/**
+ * gwy_data_field_psdf:
+ * @data_field: A data field.
+ * @target_line: A data line to store the distribution to. It will be
+ * resampled to requested width.
+ * @orientation: Orientation of lines (PSDF is simply averaged over the
+ * other orientation).
+ * @interpolation: Interpolation to use when @nstats is given and requires
+ * resampling.
+ * @windowing: Windowing type to use.
+ * @nstats: The number of samples to take on the distribution function. If
+ * nonpositive, data field width (height) is used.
+ *
+ * Calculates one-dimensional power spectrum density function of a data field.
+ **/
+void
+gwy_data_field_psdf(GwyDataField *data_field,
+ GwyDataLine *target_line,
+ GwyOrientation orientation,
+ GwyInterpolationType interpolation,
+ GwyWindowingType windowing,
+ gint nstats)
+{
+ g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
+ gwy_data_field_area_psdf(data_field, target_line,
+ 0, 0, data_field->xres, data_field->yres,
+ orientation, interpolation, windowing, nstats);
+}
+
+/**
+ * gwy_data_field_area_rpsdf:
+ * @data_field: A data field.
+ * @target_line: A data line to store the distribution to. It will be
+ * resampled to requested width.
+ * @col: Upper-left column coordinate.
+ * @row: Upper-left row coordinate.
+ * @width: Area width (number of columns).
+ * @height: Area height (number of rows).
+ * @interpolation: Interpolation to use when @nstats is given and requires
+ * resampling.
+ * @windowing: Windowing type to use.
+ * @nstats: The number of samples to take on the distribution function. If
+ * nonpositive, data field width (height) is used.
+ *
+ * Calculates radial power spectrum density function of a rectangular
+ * part of a data field.
+ *
+ * Since: 2.7
+ **/
+void
+gwy_data_field_area_rpsdf(GwyDataField *data_field,
+ GwyDataLine *target_line,
+ gint col, gint row,
+ gint width, gint height,
+ GwyInterpolationType interpolation,
+ GwyWindowingType windowing,
+ gint nstats)
+{
+ GwyDataField *re_field, *im_field;
+ GwySIUnit *xyunit, *zunit, *lineunit;
+ gdouble *re, *im;
+ gint i, j, k, xres, yres;
+ gdouble xreal, yreal, r;
+
+ g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
+ g_return_if_fail(GWY_IS_DATA_LINE(target_line));
+ xres = data_field->xres;
+ yres = data_field->yres;
+ g_return_if_fail(col >= 0 && row >= 0
+ && width >= 4 && height >= 4
+ && col + width <= xres
+ && row + height <= yres);
+ xreal = data_field->xreal;
+ yreal = data_field->yreal;
+
+ re_field = gwy_data_field_new(width, height,
+ width*xreal/xres, height*yreal/yres,
+ FALSE);
+ im_field = gwy_data_field_new_alike(re_field, FALSE);
+ gwy_data_field_area_2dfft(data_field, NULL, re_field, im_field,
+ col, row, width, height,
+ windowing,
+ GWY_TRANSFORM_DIRECTION_FORWARD,
+ interpolation,
+ TRUE, 2);
+ re = re_field->data;
+ im = im_field->data;
+ for (i = 0; i < height; i++) {
+ for (j = 0; j < width; j++) {
+ k = i*width + j;
+ re[k] = re[k]*re[k] + im[k]*im[k];
+ }
+ }
+ g_object_unref(im_field);
+
+ gwy_data_field_fft_postprocess(re_field, TRUE);
+ r = 0.5*MAX(re_field->xreal, re_field->yreal);
+ gwy_data_field_angular_average(re_field, target_line,
+ NULL, GWY_MASK_IGNORE,
+ 0.0, 0.0, r, nstats ? nstats+1 : 0);
+ g_object_unref(re_field);
+ /* Get rid of the zero first element which is bad for logscale. */
+ nstats = target_line->res-1;
+ gwy_data_line_resize(target_line, 1, nstats+1);
+ target_line->off += target_line->real/nstats;
+
+ /* Postprocess does not use angular coordinates, fix that. */
+ target_line->real *= 2.0*G_PI;
+ target_line->off *= 2.0*G_PI;
+ r = xreal*yreal/(2.0*G_PI*width*height) * target_line->real/nstats;
+ for (k = 0; k < nstats; k++)
+ target_line->data[k] *= r*(k + 1);
+
+ /* Set proper value units */
+ xyunit = gwy_data_field_get_si_unit_xy(data_field);
+ zunit = gwy_data_field_get_si_unit_z(data_field);
+ lineunit = gwy_data_line_get_si_unit_x(target_line);
+ gwy_si_unit_power(xyunit, -1, lineunit);
+ lineunit = gwy_data_line_get_si_unit_y(target_line);
+ gwy_si_unit_power(zunit, 2, lineunit);
+ gwy_si_unit_multiply(lineunit, xyunit, lineunit);
+}
+
+/**
+ * gwy_data_field_rpsdf:
+ * @data_field: A data field.
+ * @target_line: A data line to store the distribution to. It will be
+ * resampled to requested width.
+ * @interpolation: Interpolation to use when @nstats is given and requires
+ * resampling.
+ * @windowing: Windowing type to use.
+ * @nstats: The number of samples to take on the distribution function. If
+ * nonpositive, data field width (height) is used.
+ *
+ * Calculates radial power spectrum density function of a data field.
+ *
+ * Since: 2.7
+ **/
+void
+gwy_data_field_rpsdf(GwyDataField *data_field,
+ GwyDataLine *target_line,
+ GwyInterpolationType interpolation,
+ GwyWindowingType windowing,
+ gint nstats)
+{
+ g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
+ gwy_data_field_area_rpsdf(data_field, target_line,
+ 0, 0, data_field->xres, data_field->yres,
+ interpolation, windowing, nstats);
+}
+
+/**
+ * gwy_data_field_area_racf:
+ * @data_field: A data field.
+ * @target_line: A data line to store the autocorrelation function to. It
+ * will be resampled to requested width.
+ * @col: Upper-left column coordinate.
+ * @row: Upper-left row coordinate.
+ * @width: Area width (number of columns).
+ * @height: Area height (number of rows).
+ * @nstats: The number of samples to take on the autocorrelation function. If
+ * nonpositive, a suitable resolution is chosen automatically.
+ *
+ * Calculates radially averaged autocorrelation function of a rectangular part
+ * of a data field.
+ *
+ * Since: 2.22
+ **/
+void
+gwy_data_field_area_racf(GwyDataField *data_field,
+ GwyDataLine *target_line,
+ gint col, gint row,
+ gint width, gint height,
+ gint nstats)
+{
+ GwyDataField *acf_field;
+ gint xres, yres, size;
+ gdouble r;
+
+ g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
+ g_return_if_fail(GWY_IS_DATA_LINE(target_line));
+ xres = data_field->xres;
+ yres = data_field->yres;
+ g_return_if_fail(col >= 0 && row >= 0
+ && width >= 4 && height >= 4
+ && col + width <= xres
+ && row + height <= yres);
+
+ size = MIN(width, height)/2;
+ if (nstats < 1)
+ nstats = size;
+
+ acf_field = gwy_data_field_new(2*size - 1, 2*size - 1, 1.0, 1.0, FALSE);
+ gwy_data_field_area_2dacf(data_field, acf_field,
+ col, row, width, height, size, size);
+ r = 0.5*MAX(acf_field->xreal, acf_field->yreal);
+ gwy_data_field_angular_average(acf_field, target_line,
+ NULL, GWY_MASK_IGNORE,
+ 0.0, 0.0, r, nstats);
+ g_object_unref(acf_field);
+}
+
+/**
+ * gwy_data_field_racf:
+ * @data_field: A data field.
+ * @target_line: A data line to store the autocorrelation function to. It
+ * will be resampled to requested width.
+ * @nstats: The number of samples to take on the autocorrelation function. If
+ * nonpositive, a suitable resolution is chosen automatically.
+ *
+ * Calculates radially averaged autocorrelation function of a data field.
+ *
+ * Since: 2.22
+ **/
+void
+gwy_data_field_racf(GwyDataField *data_field,
+ GwyDataLine *target_line,
+ gint nstats)
+{
+ g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
+ gwy_data_field_area_racf(data_field, target_line,
+ 0, 0, data_field->xres, data_field->yres,
+ nstats);
+}
+
+/**
+ * gwy_data_field_area_2dacf:
+ * @data_field: A data field.
+ * @target_field: A data field to store the result to. It will be resampled
+ * to (2 at xrange-1)x(2 at yrange-1).
+ * @col: Upper-left column coordinate.
+ * @row: Upper-left row coordinate.
+ * @width: Area width (number of columns).
+ * @height: Area height (number of rows).
+ * @xrange: Horizontal correlation range. Non-positive value means
+ * the default range of half of @data_field width will be used.
+ * @yrange: Vertical correlation range. Non-positive value means
+ * the default range of half of @data_field height will be used.
+ *
+ * Calculates two-dimensional autocorrelation function of a data field area.
+ *
+ * The resulting data field has the correlation corresponding to (0,0) in the
+ * centre.
+ *
+ * The maximum possible values of @xrange and @yrange are @data_field
+ * width and height, respectively. However, as the values for longer
+ * distances are calculated from smaller number of data points they become
+ * increasingly bogus, therefore the default range is half of the size.
+ *
+ * Since: 2.7
+ **/
+void
+gwy_data_field_area_2dacf(GwyDataField *data_field,
+ GwyDataField *target_field,
+ gint col, gint row,
+ gint width, gint height,
+ gint xrange, gint yrange)
+{
+ fftw_plan plan;
+ GwyDataField *re_in, *re_out, *im_out, *ibuf;
+ gdouble *src, *dst, *dstm;
+ gint i, j, xres, yres, xsize, ysize;
+ gdouble xreal, yreal, v, q;
+
+ g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
+ g_return_if_fail(GWY_IS_DATA_FIELD(target_field));
+ xres = data_field->xres;
+ yres = data_field->yres;
+ g_return_if_fail(col >= 0 && row >= 0
+ && width >= 4 && height >= 4
+ && col + width <= xres
+ && row + height <= yres);
+ if (xrange <= 0)
+ xrange = width/2;
+ if (yrange <= 0)
+ yrange = height/2;
+ g_return_if_fail(xrange <= width && yrange <= height);
+ xreal = data_field->xreal;
+ yreal = data_field->yreal;
+
+ xsize = gwy_fft_find_nice_size(width + xrange);
+ ysize = gwy_fft_find_nice_size(height + yrange);
+
+ re_in = gwy_data_field_new(xsize, height, 1.0, 1.0, TRUE);
+ re_out = gwy_data_field_new_alike(re_in, FALSE);
+ im_out = gwy_data_field_new_alike(re_in, FALSE);
+ ibuf = gwy_data_field_new_alike(re_in, FALSE);
+
+ /* Stage 1: Row-wise FFT, with zero-padded columns.
+ * No need to transform the padding rows as zero rises from zeroes. */
+ gwy_data_field_area_copy(data_field, re_in, col, row, width, height, 0, 0);
+ gwy_data_field_1dfft_raw(re_in, NULL, re_out, im_out,
+ GWY_ORIENTATION_HORIZONTAL,
+ GWY_TRANSFORM_DIRECTION_FORWARD);
+
+ /* Stage 2: Column-wise FFT, taking the norm and another column-wise FTT.
+ * We take the advantage of the fact that the order of the row- and
+ * column-wise transforms is arbitrary and that taking the norm is a
+ * local operation. */
+ /* Use interleaved arrays, this enables us to foist them as `complex'
+ * to FFTW. */
+ src = g_new(gdouble, 4*ysize);
+ dst = src + 2*ysize;
+ q = sqrt(xsize)/ysize;
+ plan = fftw_plan_dft_1d(ysize, (fftw_complex*)src, (fftw_complex*)dst,
+ FFTW_FORWARD, _GWY_FFTW_PATIENCE);
+ for (j = 0; j < xsize; j++) {
+ for (i = 0; i < height; i++) {
+ src[2*i + 0] = re_out->data[i*xsize + j];
+ src[2*i + 1] = im_out->data[i*xsize + j];
+ }
+ gwy_clear(src + 2*height, 2*(ysize - height));
+ fftw_execute(plan);
+ for (i = 0; i < ysize; i++) {
+ src[2*i] = dst[2*i]*dst[2*i] + dst[2*i + 1]*dst[2*i + 1];
+ src[2*i + 1] = 0.0;
+ }
+ fftw_execute(plan);
+ for (i = 0; i < height; i++) {
+ re_in->data[i*xsize + j] = dst[2*i + 0];
+ ibuf->data[i*xsize + j] = dst[2*i + 1];
+ }
+ }
+ fftw_destroy_plan(plan);
+ g_free(src);
+
+ /* Stage 3: The final row-wise FFT. */
+ gwy_data_field_1dfft_raw(re_in, ibuf, re_out, im_out,
+ GWY_ORIENTATION_HORIZONTAL,
+ GWY_TRANSFORM_DIRECTION_FORWARD);
+
+ g_object_unref(ibuf);
+ g_object_unref(re_in);
+ g_object_unref(im_out);
+
+ gwy_data_field_resample(target_field, 2*xrange - 1, 2*yrange - 1,
+ GWY_INTERPOLATION_NONE);
+ /* Extract the correlation data and reshuflle it to human-undestandable
+ * positions with 0.0 at the centre. */
+ for (i = 0; i < yrange; i++) {
+ src = re_out->data + i*xsize;
+ dst = target_field->data + (yrange-1 + i)*target_field->xres;
+ dstm = target_field->data + (yrange-1 - i)*target_field->xres;
+ for (j = 0; j < xrange; j++) {
+ if (j > 0) {
+ v = q*src[xsize - j]/(height - i)/(width - j);
+ if (i > 0)
+ dstm[xrange-1 + j] = v;
+ dst[xrange-1 - j] = v;
+ }
+ v = q*src[j]/(height - i)/(width - j);
+ if (i > 0)
+ dstm[xrange-1 - j] = v;
+ dst[xrange-1 + j] = v;
+ }
+ }
+ g_object_unref(re_out);
+
+ target_field->xreal = xreal*target_field->xres/xres;
+ target_field->yreal = yreal*target_field->yres/yres;
+ target_field->xoff = -0.5*target_field->xreal;
+ target_field->yoff = -0.5*target_field->yreal;
+
+ _gwy_assign_si_unit(data_field->si_unit_xy, &target_field->si_unit_xy);
+ gwy_si_unit_power(gwy_data_field_get_si_unit_z(data_field), 2,
+ gwy_data_field_get_si_unit_z(target_field));
+
+ gwy_data_field_invalidate(target_field);
+}
+
+/**
+ * gwy_data_field_2dacf:
+ * @data_field: A data field.
+ * @target_field: A data field to store the result to.
+ *
+ * Calculates two-dimensional autocorrelation function of a data field.
+ *
+ * See gwy_data_field_area_2dacf() for details. Parameters missing (not
+ * adjustable) in this function are set to their default values.
+ *
+ * Since: 2.7
+ **/
+void
+gwy_data_field_2dacf(GwyDataField *data_field,
+ GwyDataField *target_field)
+{
+ g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
+
+ gwy_data_field_area_2dacf(data_field, target_field,
+ 0, 0, data_field->xres, data_field->yres, 0, 0);
+}
+
+/* Does not really belong here, but is is used only by functions from this
+ * source file, so... */
+
+/**
+ * gwy_data_field_angular_average:
+ * @data_field: A data field.
+ * @target_line: A data line to store the distribution to. It will be
+ * resampled to @nstats size.
+ * @mask: Mask of pixels to include from/exclude in the averaging, or %NULL
+ * for full @data_field.
+ * @masking: Masking mode to use. See the introduction for description of
+ * masking modes.
+ * @x: X-coordinate of the averaging disc origin, in real coordinates
+ * including offsets.
+ * @y: Y-coordinate of the averaging disc origin, in real coordinates
+ * including offsets.
+ * @r: Radius, in real coordinates. It determines the real length of the
+ * resulting line.
+ * @nstats: The number of samples the resulting line should have. A
+ * non-positive value means the sampling will be determined
+ * automatically.
+ *
+ * Performs angular averaging of a part of a data field.
+ *
+ * The result of such averaging is an radial profile, starting from the disc
+ * centre.
+ *
+ * The function does not guarantee that @target_line will have exactly @nstats
+ * samples upon return. A cmaller number of samples than requested may be
+ * calculated for instance if either central or outer part of the disc is
+ * excluded by masking.
+ *
+ * Since: 2.42
+ **/
+void
+gwy_data_field_angular_average(GwyDataField *data_field,
+ GwyDataLine *target_line,
+ GwyDataField *mask,
+ GwyMaskingType masking,
+ gdouble x,
+ gdouble y,
+ gdouble r,
+ gint nstats)
+{
+ gint ifrom, ito, jfrom, jto, i, j, k, kfrom, kto, xres, yres;
+ gdouble xreal, yreal, dx, dy, xoff, yoff, h, rr;
+ const gdouble *d, *m;
+ gdouble *target, *weight;
+
+ g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
+ g_return_if_fail(GWY_IS_DATA_LINE(target_line));
+ g_return_if_fail(r >= 0.0);
+ xres = data_field->xres;
+ yres = data_field->yres;
+ if (masking == GWY_MASK_IGNORE)
+ mask = NULL;
+ else if (!mask)
+ masking = GWY_MASK_IGNORE;
+
+ if (mask) {
+ g_return_if_fail(GWY_IS_DATA_FIELD(mask));
+ g_return_if_fail(mask->xres == xres);
+ g_return_if_fail(mask->yres == yres);
+ }
+
+ xreal = data_field->xreal;
+ yreal = data_field->yreal;
+ xoff = data_field->xoff;
+ yoff = data_field->yoff;
+ g_return_if_fail(x >= xoff && x <= xoff + xreal);
+ g_return_if_fail(y >= yoff && y <= yoff + yreal);
+ /* Just for integer overflow; we limit i and j ranges explicitly later. */
+ r = MIN(r, hypot(xreal, yreal));
+ x -= xoff;
+ y -= yoff;
+
+ dx = xreal/xres;
+ dy = yreal/yres;
+
+ /* Prefer sampling close to the shorter step. */
+ if (nstats < 1) {
+ h = 2.0*dx*dy/(dx + dy);
+ nstats = GWY_ROUND(r/h);
+ nstats = MAX(nstats, 1);
+ }
+ h = r/nstats;
+
+ d = data_field->data;
+ m = mask ? mask->data : NULL;
+
+ gwy_data_line_resample(target_line, nstats, GWY_INTERPOLATION_NONE);
+ gwy_data_line_clear(target_line);
+ gwy_data_field_copy_units_to_data_line(data_field, target_line);
+ target_line->real = h*nstats;
+ target_line->off = 0.0;
+ target = target_line->data;
+ /* Just return something for single-point lines. */
+ if (nstats < 2 || r == 0.0) {
+ /* NB: gwy_data_field_get_dval_real() does not use offsets. */
+ target[0] = gwy_data_field_get_dval_real(data_field, x, y,
+ GWY_INTERPOLATION_ROUND);
+ return;
+ }
+
+ ifrom = (gint)floor(gwy_data_field_rtoi(data_field, y - r));
+ ifrom = MAX(ifrom, 0);
+ ito = (gint)ceil(gwy_data_field_rtoi(data_field, y + r));
+ ito = MIN(ito, yres-1);
+
+ jfrom = (gint)floor(gwy_data_field_rtoj(data_field, x - r));
+ jfrom = MAX(jfrom, 0);
+ jto = (gint)ceil(gwy_data_field_rtoj(data_field, x + r));
+ jto = MIN(jto, xres-1);
+
+ weight = g_new0(gdouble, nstats);
+ for (i = ifrom; i <= ito; i++) {
+ gdouble yy = (i + 0.5)*dy - y;
+ for (j = jfrom; j <= jto; j++) {
+ gdouble xx = (j + 0.5)*dx - x;
+ gdouble v = d[i*xres + j];
+
+ if ((masking == GWY_MASK_INCLUDE && m[i*xres + j] <= 0.0)
+ || (masking == GWY_MASK_EXCLUDE && m[i*xres + j] >= 1.0))
+ continue;
+
+ rr = sqrt(xx*xx + yy*yy)/h;
+ k = floor(rr);
+ if (k+1 >= nstats) {
+ if (k+1 == nstats) {
+ target[k] += v;
+ weight[k] += 1.0;
+ }
+ continue;
+ }
+
+ rr -= k;
+ if (rr <= 0.5)
+ rr = 2.0*rr*rr;
+ else
+ rr = 1.0 - 2.0*(1.0 - rr)*(1.0 - rr);
+
+ target[k] += (1.0 - rr)*v;
+ target[k+1] += rr*v;
+ weight[k] += 1.0 - rr;
+ weight[k+1] += rr;
+ }
+ }
+
+ /* Get rid of initial and trailing no-data segment. */
+ for (kfrom = 0; kfrom < nstats; kfrom++) {
+ if (weight[kfrom])
+ break;
+ }
+ for (kto = nstats-1; kto > kfrom; kto--) {
+ if (weight[kto])
+ break;
+ }
+ if (kto - kfrom < 2) {
+ /* XXX: This is not correct. We do not care. */
+ target_line->real = h;
+ target[0] = gwy_data_field_get_dval_real(data_field, x, y,
+ GWY_INTERPOLATION_ROUND);
+ return;
+ }
+
+ if (kfrom != 0 || kto != nstats-1) {
+ nstats = kto+1 - kfrom;
+ gwy_data_line_resize(target_line, kfrom, kto+1);
+ target = target_line->data;
+ target_line->off = kfrom*h;
+ memmove(weight, weight + kfrom, nstats*sizeof(gdouble));
+ }
+ g_assert(weight[0]);
+ g_assert(weight[nstats-1]);
+
+ /* Fill holes where we have no weight, this can occur near the start if
+ * large nstats is requested. */
+ kfrom = -1;
+ for (k = 0; k < nstats; k++) {
+ if (weight[k]) {
+ target[k] /= weight[k];
+ if (kfrom+1 != k) {
+ gdouble first = target[kfrom];
+ gdouble last = target[k];
+ for (j = kfrom+1; j < k; j++) {
+ gdouble w = (j - kfrom)/(gdouble)(k - kfrom);
+ target[j] = w*last + (1.0 - w)*first;
+ }
+ }
+ kfrom = k;
+ }
+ }
+
+ g_free(weight);
+}
+
+/**************************************************************************
+ *
+ * Masked ACF, HHCF, PSDF
+ * DOI 10.1016/j.ultramic.2012.08.002
+ *
+ **************************************************************************/
+
+static void
+row_assign_mask(GwyDataField *mask,
+ guint col,
+ guint row,
+ guint width,
+ GwyMaskingType masking,
+ gdouble *out)
+{
+ const gdouble *m = mask->data + row*mask->xres + col;
+ guint j;
+
+ if (masking == GWY_MASK_INCLUDE) {
+ for (j = width; j; j--, out++, m++)
+ *out = (*m > 0.0);
+ }
+ else {
+ for (j = width; j; j--, out++, m++)
+ *out = (*m <= 0.0);
+ }
+}
+
+static void
+row_accumulate(gdouble *accum,
+ const gdouble *data,
+ guint size)
+{
+ guint j;
+
+ for (j = size; j; j--, accum++, data++)
+ *accum += *data;
+}
+
+/* FFTW calculates unnormalised DFT so we divide the result of the first
+ * transformation with (1/√size)² = 1/size and keep the second transfrom as-is
+ * to obtain exactly g_k.
+ *
+ * Here we deviate from the paper and try to smoothly interpolate the missing
+ * values to reduce spurious high-frequency content. It helps sometimes... */
+static void
+row_divide_nonzero_with_laplace(const gdouble *numerator,
+ const gdouble *denominator,
+ gdouble *out,
+ guint size)
+{
+ GwyDataLine *line, *mask;
+ guint j;
+ gboolean have_zero = FALSE;
+
+ for (j = 0; j < size; j++) {
+ if (denominator[j] != 0)
+ out[j] = numerator[j]/denominator[j];
+ else {
+ out[j] = 0.0;
+ have_zero = TRUE;
+ }
+ }
+
+ if (!have_zero)
+ return;
+
+ line = gwy_data_line_new(size, size, FALSE);
+ gwy_assign(line->data, out, size);
+ mask = gwy_data_line_new(size, size, FALSE);
+ for (j = 0; j < size; j++)
+ mask->data[j] = (denominator[j] == 0);
+
+ gwy_data_line_correct_laplace(line, mask);
+ gwy_assign(out, line->data, size);
+
+ g_object_unref(line);
+ g_object_unref(mask);
+}
+
+static void
+row_accum_cnorm(gdouble *accum,
+ const fftw_complex *fftc,
+ guint size,
+ gdouble q)
+{
+ gdouble *out = accum, *out2 = accum + (size-1);
+ gdouble re = gwycreal(*fftc), im = gwycimag(*fftc);
+ gdouble v;
+ guint j;
+
+ q /= size;
+ v = q*(re*re + im*im);
+ *out += v;
+ out++, fftc++;
+ for (j = (size + 1)/2 - 1; j; j--, fftc++, out++, out2--) {
+ re = gwycreal(*fftc);
+ im = gwycimag(*fftc);
+ v = q*(re*re + im*im);
+ *out += v;
+ *out2 += v;
+ }
+ if (size % 2 == 0) {
+ re = gwycreal(*fftc);
+ im = gwycimag(*fftc);
+ v = q*(re*re + im*im);
+ *out += v;
+ }
+}
+
+#if 0
+static void
+row2_assign_cnorm(gdouble *out,
+ gdouble *out2,
+ const fftw_complex *fftc,
+ guint size,
+ gdouble q)
+{
+ gdouble re = gwycreal(*fftc), im = gwycimag(*fftc);
+ gdouble v;
+ guint j;
+
+ q /= size;
+ v = q*(re*re + im*im);
+ *out = v;
+ out++, fftc++;
+ for (j = (size + 1)/2 - 1; j; j--, fftc++, out++, out2--) {
+ re = gwycreal(*fftc);
+ im = gwycimag(*fftc);
+ v = q*(re*re + im*im);
+ *out = v;
+ *out2 = v;
+ }
+ if (size % 2 == 0) {
+ re = gwycreal(*fftc);
+ im = gwycimag(*fftc);
+ v = q*(re*re + im*im);
+ *out = v;
+ }
+}
+#endif
+
+static void
+row_extfft_accum_cnorm(fftw_plan plan,
+ gdouble *fftr,
+ gdouble *accum,
+ fftw_complex *fftc,
+ guint size,
+ guint width,
+ gdouble q)
+{
+ gwy_clear(fftr + width, size - width);
+ fftw_execute(plan);
+ row_accum_cnorm(accum, fftc, size, q);
+}
+
+/* Calculate the product A*B+AB*, equal to 2*(Re A Re B + Im A Im B), of two
+ * R2HC outputs (the result is added to @out including the redundant even
+ * terms). */
+static void
+row_accum_cprod(const fftw_complex *fftca,
+ const fftw_complex *fftcb,
+ gdouble *out,
+ guint size,
+ gdouble q)
+{
+ gdouble *out2 = out + size-1;
+ gdouble rea = gwycreal(*fftca), ima = gwycimag(*fftca),
+ reb = gwycreal(*fftcb), imb = gwycimag(*fftcb), v;
+ guint j;
+
+ q *= 2.0/size;
+ v = q*(rea*reb + ima*imb);
+ *out += v;
+ out++, fftca++, fftcb++;
+ for (j = (size + 1)/2 - 1; j; j--, out++, fftca++, fftcb++, out2--) {
+ rea = gwycreal(*fftca);
+ ima = gwycimag(*fftca);
+ reb = gwycreal(*fftcb);
+ imb = gwycimag(*fftcb);
+ v = q*(rea*reb + ima*imb);
+ *out += v;
+ *out2 += v;
+ }
+ if (size % 2 == 0) {
+ rea = gwycreal(*fftca);
+ ima = gwycimag(*fftca);
+ reb = gwycreal(*fftcb);
+ imb = gwycimag(*fftcb);
+ v = q*(rea*reb + ima*imb);
+ *out += v;
+ }
+}
+
+/* Used in cases when we expect the imaginary part to be zero but do not want
+ * to bother with specialised DCT. */
+static void
+row_extfft_extract_re(fftw_plan plan,
+ gdouble *fftr,
+ gdouble *out,
+ fftw_complex *fftc,
+ guint size,
+ guint width)
+{
+ guint j;
+
+ gwy_assign(fftr, out, size);
+ fftw_execute(plan);
+ for (j = 0; j < width; j++)
+ out[j] = gwycreal(fftc[j]);
+}
+
+static void
+row_extfft_symmetrise_re(fftw_plan plan,
+ gdouble *fftr,
+ gdouble *out,
+ fftw_complex *fftc,
+ guint size)
+{
+ gdouble *out2 = out + size-1;
+ guint j;
+
+ gwy_assign(fftr, out, size);
+ fftw_execute(plan);
+
+ *out = gwycreal(*fftc);
+ out++, fftc++;
+ for (j = (size + 1)/2 - 1; j; j--, fftc++, out++, out2--)
+ *out = *out2 = gwycreal(*fftc);
+ if (size % 2 == 0)
+ *out = gwycreal(*fftc);
+}
+
+/* Calculate the complex absolute value of R2HC output items, excluding the
+ * redundant even terms. So the size of @out must be @size/2 + 1. */
+static void
+row_extract_cabs(const fftw_complex *in,
+ gdouble *out,
+ guint width)
+{
+ guint j;
+
+ *out = sqrt(gwycreal(*in)*gwycreal(*in) + gwycimag(*in)*gwycimag(*in));
+ for (j = width; j; j--, out++, in++)
+ *out = sqrt(gwycreal(*in)*gwycreal(*in) + gwycimag(*in)*gwycimag(*in));
+}
+
+static void
+row_accumulate_vk(const gdouble *data,
+ gdouble *v,
+ guint size)
+{
+ const gdouble *data2 = data + (size-1);
+ gdouble sum = 0.0;
+ guint j;
+
+ v += size-1;
+ for (j = size; j; j--, data++, data2--, v--) {
+ sum += (*data)*(*data) + (*data2)*(*data2);
+ *v += sum;
+ }
+}
+
+static void
+row_copy_subtract(const gdouble *in,
+ gdouble *out,
+ guint n,
+ gdouble a)
+{
+ guint i;
+
+ for (i = n; i; i--, in++, out++)
+ *out = *in - a;
+}
+
+/* Level a row of data by subtracting the mean value. */
+static void
+row_level(const gdouble *in,
+ gdouble *out,
+ guint n)
+{
+ gdouble sumsi = 0.0;
+ const gdouble *pdata = in;
+ guint i;
+
+ for (i = n; i; i--, pdata++)
+ sumsi += *pdata;
+
+ row_copy_subtract(in, out, n, sumsi/n);
+}
+
+/* Level a row of data by subtracting the mean value of data under mask and
+ * clear (set to zero) all data not under mask. Note how the zeroes nicely
+ * ensure that the subsequent functions Just Work(TM) and don't need to know we
+ * use masking at all. */
+static guint
+row_level_mask(const gdouble *in,
+ gdouble *out,
+ guint n,
+ const gdouble *m,
+ GwyMaskingType masking)
+{
+ gdouble sumsi = 0.0, a;
+ const gdouble *pdata = in, *mdata = m;
+ guint i, nd = 0;
+
+ if (masking == GWY_MASK_INCLUDE) {
+ for (i = n; i; i--, pdata++, mdata++) {
+ if (*mdata > 0.0) {
+ sumsi += *pdata;
+ nd++;
+ }
+ }
+ }
+ else {
+ for (i = n; i; i--, pdata++, mdata++) {
+ if (*mdata <= 0.0) {
+ sumsi += *pdata;
+ nd++;
+ }
+ }
+ }
+
+ /* This can be division by zero but in that case we never use the value. */
+ a = sumsi/nd;
+ pdata = in;
+ mdata = m;
+ if (masking == GWY_MASK_INCLUDE) {
+ for (i = n; i; i--, pdata++, mdata++, out++)
+ *out = (*mdata > 0.0) ? *pdata - a : 0.0;
+ }
+ else {
+ for (i = n; i; i--, pdata++, mdata++, out++)
+ *out = (*mdata <= 0.0) ? *pdata - a : 0.0;
+ }
+
+ return nd;
+}
+
+/* Window a row using a sampled windowing function. */
+static void
+row_window(gdouble *data, const gdouble *window, guint n)
+{
+ guint i;
+
+ for (i = n; i; i--, data++, window++)
+ *data *= *window;
+}
+
+/* Level and count the number of valid data in a row */
+static guint
+row_level_and_count(const gdouble *in,
+ gdouble *out,
+ guint width,
+ GwyDataField *mask,
+ GwyMaskingType masking,
+ guint maskcol,
+ guint maskrow,
+ guint level)
+{
+ guint i, count;
+ const gdouble *m;
+
+ if (!mask || masking == GWY_MASK_IGNORE) {
+ if (level)
+ row_level(in, out, width);
+ else
+ gwy_assign(out, in, width);
+ return width;
+ }
+
+ m = mask->data + mask->xres*maskrow + maskcol;
+ if (level)
+ return row_level_mask(in, out, width, m, masking);
+
+ count = 0;
+ if (masking == GWY_MASK_INCLUDE) {
+ for (i = width; i; i--, in++, out++, m++) {
+ if (*m > 0.0) {
+ *out = *in;
+ count++;
+ }
+ else
+ *out = 0.0;
+ }
+ }
+ else {
+ for (i = width; i; i--, in++, out++, m++) {
+ if (*m <= 0.0) {
+ *out = *in;
+ count++;
+ }
+ else
+ *out = 0.0;
+ }
+ }
+ return count;
+}
+
+static void
+set_cf_units(GwyDataField *field,
+ GwyDataLine *line,
+ GwyDataLine *weights)
+{
+ gwy_data_field_copy_units_to_data_line(field, line);
+ if (line->si_unit_y)
+ gwy_si_unit_power(line->si_unit_y, 2, line->si_unit_y);
+
+ if (weights) {
+ gwy_data_field_copy_units_to_data_line(field, weights);
+ gwy_si_unit_set_from_string(gwy_data_line_get_si_unit_y(weights), NULL);
+ }
+}
+
+/**
+ * gwy_data_field_area_row_acf:
+ * @field: A two-dimensional data field.
+ * @col: Upper-left column coordinate.
+ * @row: Upper-left row coordinate.
+ * @width: Area width (number of columns).
+ * @height: Area height (number of rows).
+ * @mask: Mask specifying which values to take into account/exclude, or %NULL.
+ * @masking: Masking mode to use (has any effect only with non-%NULL @mask).
+ * @level: The first polynomial degree to keep in the rows, lower degrees than
+ * @level are subtracted. Note only values 0 (no levelling) and 1
+ * (subtract the mean value of each row) are available at present. For
+ * SPM data, you usually wish to pass 1.
+ * @weights: Line to store the denominators to (or %NULL). It will be resized
+ * to match the returned line. The denominators are integers equal
+ * to the number of terms that contributed to each value. They are
+ * suitable as fitting weight if the ACF is fitted.
+ *
+ * Calculates the row-wise autocorrelation function (ACF) of a field.
+ *
+ * The calculated ACF has the natural number of points, i.e. @width.
+ *
+ * Masking is performed by omitting all terms that contain excluded pixels.
+ * Since different rows contain different numbers of pixels, the resulting
+ * ACF values are calculated as a weighted sums where weight of each row's
+ * contribution is proportional to the number of contributing terms. In other
+ * words, the weighting is fair: each contributing pixel has the same influence
+ * on the result.
+ *
+ * Returns: A new one-dimensional data line with the ACF.
+ **/
+GwyDataLine*
+gwy_data_field_area_row_acf(GwyDataField *field,
+ GwyDataField *mask,
+ GwyMaskingType masking,
+ guint col, guint row,
+ guint width, guint height,
+ guint level,
+ GwyDataLine *weights)
+{
+ GwyDataLine *line = NULL;
+ fftw_complex *fftc;
+ const gdouble *base;
+ gdouble *fftr, *accum_data, *accum_mask;
+ guint nfullrows = 0, nemptyrows = 0;
+ guint size, cstride, i, j;
+ fftw_plan plan;
+
+ g_return_val_if_fail(GWY_IS_DATA_FIELD(field), NULL);
+ g_return_val_if_fail(!mask || GWY_IS_DATA_FIELD(mask), NULL);
+ if (mask) {
+ g_return_val_if_fail(mask->xres == field->xres
+ && mask->yres == field->yres, NULL);
+ }
+ g_return_val_if_fail(!weights || GWY_IS_DATA_LINE(weights), NULL);
+
+ if (level > 1) {
+ g_warning("Levelling degree %u is not supported, changing to 1.",
+ level);
+ level = 1;
+ }
+
+ /* Transform size must be at least twice the data size for zero padding.
+ * An even size is necessary due to alignment constraints in FFTW.
+ * Using this size for all buffers is a bit excessive but safe. */
+ line = gwy_data_line_new(width, 1.0, TRUE);
+ size = gwy_fft_find_nice_size((width + 1)/2*4);
+ /* The innermost (contiguous) dimension of R2C the complex output is
+ * slightly larger than the real input. Note @cstride is measured in
+ * fftw_complex, multiply it by 2 for doubles. */
+ cstride = size/2 + 1;
+ base = field->data + row*field->xres + col;
+ fftr = g_new(gdouble, 3*size);
+ accum_data = fftr + size;
+ accum_mask = fftr + 2*size;
+ fftc = g_new(fftw_complex, cstride);
+
+ plan = fftw_plan_dft_r2c_1d(size, fftr, fftc,
+ FFTW_DESTROY_INPUT | _GWY_FFTW_PATIENCE);
+ g_assert(plan);
+ gwy_clear(accum_data, size);
+ gwy_clear(accum_mask, size);
+
+ /* Gather squared Fourier coefficients for all rows. */
+ for (i = 0; i < height; i++) {
+ guint count = row_level_and_count(base + i*field->xres, fftr, width,
+ mask, masking, col, row + i, level);
+ if (!count) {
+ nemptyrows++;
+ continue;
+ }
+
+ /* Calculate and gather squared Fourier coefficients of the data. */
+ row_extfft_accum_cnorm(plan, fftr, accum_data, fftc, size, width, 1.0);
+
+ if (count == width) {
+ nfullrows++;
+ continue;
+ }
+
+ /* Calculate and gather squared Fourier coefficients of the mask. */
+ row_assign_mask(mask, col, row + i, width, masking, fftr);
+ row_extfft_accum_cnorm(plan, fftr, accum_mask, fftc, size, width, 1.0);
+ }
+
+ /* Numerator of G_k, i.e. FFT of squared data Fourier coefficients. */
+ row_extfft_extract_re(plan, fftr, accum_data, fftc, size, width);
+
+ /* Denominator of G_k, i.e. FFT of squared mask Fourier coefficients.
+ * Don't perform the FFT if there were no partial rows. */
+ if (nfullrows + nemptyrows < height)
+ row_extfft_extract_re(plan, fftr, accum_mask, fftc, size, width);
+
+ for (j = 0; j < width; j++) {
+ /* Denominators must be rounded to integers because they are integers
+ * and this permits to detect zeroes in the denominator. */
+ accum_mask[j] = GWY_ROUND(accum_mask[j]) + nfullrows*(width - j);
+ }
+ row_divide_nonzero_with_laplace(accum_data, accum_mask, line->data,
+ line->res);
+
+ line->real = gwy_data_field_get_xmeasure(field)*line->res;
+ /* line->off = -0.5*line->real/line->res; */
+
+ if (weights) {
+ gwy_data_line_resample(weights, line->res, GWY_INTERPOLATION_NONE);
+ gwy_data_line_set_real(weights, line->real);
+ gwy_data_line_set_offset(weights, line->off);
+ gwy_assign(weights->data, accum_mask, weights->res);
+ }
+
+ fftw_destroy_plan(plan);
+ fftw_free(fftc);
+ fftw_free(fftr);
+
+ set_cf_units(field, line, weights);
+ return line;
+}
+
+static void
+normalise_window_square(gdouble *window, guint n)
+{
+ gdouble s = 0.0;
+ guint i;
+
+ for (i = 0; i < n; i++)
+ s += window[i]*window[i];
+
+ if (!s)
+ return;
+
+ s = sqrt(n/s);
+ for (i = 0; i < n; i++)
+ window[i] *= s;
+}
+
+/**
+ * gwy_data_field_area_row_psdf:
+ * @field: A two-dimensional data field.
+ * @col: Upper-left column coordinate.
+ * @row: Upper-left row coordinate.
+ * @width: Area width (number of columns).
+ * @height: Area height (number of rows).
+ * @mask: Mask specifying which values to take into account/exclude, or %NULL.
+ * @masking: Masking mode to use (has any effect only with non-%NULL @mask).
+ * @windowing: Windowing type to use.
+ * @level: The first polynomial degree to keep in the rows, lower degrees than
+ * @level are subtracted. Note only values 0 (no levelling) and 1
+ * (subtract the mean value of each row) are available at present. For
+ * SPM data, you usually wish to pass 1.
+ *
+ * Calculates the row-wise power spectrum density function (PSDF) of a
+ * rectangular part of a field.
+ *
+ * The calculated PSDF has the natural number of points that follows from DFT,
+ * i.e. @width/2+1.
+ *
+ * The reduction of the total energy by windowing is compensated by multiplying
+ * the PSDF to make its sum of squares equal to the input data sum of squares.
+ *
+ * Masking is performed by omitting all terms that contain excluded pixels.
+ * Since different rows contain different numbers of pixels, the resulting
+ * PSDF is calculated as a weighted sum where each row's weight is proportional
+ * to the number of contributing pixels. In other words, the weighting is
+ * fair: each contributing pixel has the same influence on the result.
+ *
+ * Returns: A new one-dimensional data line with the PSDF.
+ **/
+GwyDataLine*
+gwy_data_field_area_row_psdf(GwyDataField *field,
+ GwyDataField *mask,
+ GwyMaskingType masking,
+ guint col, guint row,
+ guint width, guint height,
+ GwyWindowingType windowing,
+ guint level)
+{
+ GwyDataLine *line = NULL;
+ fftw_complex *fftc;
+ const gdouble *base;
+ gdouble *fftr, *accum_data, *accum_mask, *window;
+ guint nfullrows = 0, nemptyrows = 0;
+ guint size, cstride, i, j;
+ fftw_plan plan;
+
+ g_return_val_if_fail(GWY_IS_DATA_FIELD(field), NULL);
+ g_return_val_if_fail(!mask || GWY_IS_DATA_FIELD(mask), NULL);
+ if (mask) {
+ g_return_val_if_fail(mask->xres == field->xres
+ && mask->yres == field->yres, NULL);
+ }
+
+ if (level > 1) {
+ g_warning("Levelling degree %u is not supported, changing to 1.",
+ level);
+ level = 1;
+ }
+
+ /* The innermost (contiguous) dimension of R2C the complex output is
+ * slightly larger than the real input. Note @cstride is measured in
+ * fftw_complex, multiply it by 2 for doubles. */
+ cstride = width/2 + 1;
+ /* An even size is necessary due to alignment constraints in FFTW.
+ *Using this size for all buffers is a bit excessive but safe. */
+ line = gwy_data_line_new(cstride, 1.0, TRUE);
+ size = (width + 3)/4*4;
+ base = field->data + row*field->xres + col;
+ fftr = g_new(gdouble, 4*size);
+ accum_data = fftr + 1*size;
+ accum_mask = fftr + 2*size;
+ window = fftr + 3*size;
+ fftc = g_new(fftw_complex, cstride);
+
+ gwy_clear(accum_data, size);
+ gwy_clear(accum_mask, size);
+
+ for (j = 0; j < width; j++)
+ window[j] = 1.0;
+ gwy_fft_window(width, window, windowing);
+ normalise_window_square(window, width);
+
+ plan = fftw_plan_dft_r2c_1d(width, fftr, fftc,
+ FFTW_DESTROY_INPUT | _GWY_FFTW_PATIENCE);
+ g_assert(plan);
+ for (i = 0; i < height; i++) {
+ guint count = row_level_and_count(base + i*field->xres, fftr, width,
+ mask, masking, col, row + i, level);
+ if (!count) {
+ nemptyrows++;
+ continue;
+ }
+
+ /* Calculate and gather squared Fourier coefficients of the data. */
+ row_window(fftr, window, width);
+ row_extfft_accum_cnorm(plan, fftr, accum_data, fftc, width, width, 1.0);
+
+ if (count == width) {
+ nfullrows++;
+ continue;
+ }
+
+ /* Calculate and gather squared Fourier coefficients of the mask. */
+ row_assign_mask(mask, col, row + i, width, masking, fftr);
+ row_extfft_accum_cnorm(plan, fftr, accum_mask, fftc, width, width, 1.0);
+ }
+
+ /* Numerator of A_k, i.e. FFT of squared data Fourier coefficients. */
+ row_extfft_symmetrise_re(plan, fftr, accum_data, fftc, width);
+
+ /* Denominator of A_k, i.e. FFT of squared mask Fourier coefficients.
+ * Don't perform the FFT if there were no partial rows. */
+ if (nfullrows + nemptyrows < height)
+ row_extfft_symmetrise_re(plan, fftr, accum_mask, fftc, width);
+
+ for (j = 0; j < width; j++) {
+ /* Denominators must be rounded to integers because they are integers
+ * and this permits to detect zeroes in the denominator. */
+ accum_mask[j] = GWY_ROUND(accum_mask[j]) + nfullrows*width;
+ }
+ row_divide_nonzero_with_laplace(accum_data, accum_mask, fftr, width);
+
+ /* The transform is the other way round – for complex numbers. Since it
+ * is in fact a DCT here we don't care and run it as a forward transform. */
+ fftw_execute(plan);
+ row_extract_cabs(fftc, line->data, line->res);
+
+ fftw_destroy_plan(plan);
+ fftw_free(fftc);
+ fftw_free(fftr);
+
+ gwy_data_line_multiply(line, gwy_data_field_get_xmeasure(field)/(2*G_PI));
+ line->real = G_PI/gwy_data_field_get_xmeasure(field);
+ /* line->off = -0.5*line->real/line->res; */
+
+ gwy_si_unit_power(gwy_data_field_get_si_unit_xy(field),
+ -1,
+ gwy_data_line_get_si_unit_x(line));
+ gwy_si_unit_power_multiply(gwy_data_field_get_si_unit_xy(field), 1,
+ gwy_data_field_get_si_unit_z(field), 2,
+ gwy_data_line_get_si_unit_y(line));
+ return line;
+}
+
+/**
+ * gwy_data_field_area_row_hhcf:
+ * @field: A two-dimensional data field.
+ * @col: Upper-left column coordinate.
+ * @row: Upper-left row coordinate.
+ * @width: Area width (number of columns).
+ * @height: Area height (number of rows).
+ * @mask: Mask specifying which values to take into account/exclude, or %NULL.
+ * @masking: Masking mode to use (has any effect only with non-%NULL @mask).
+ * @level: The first polynomial degree to keep in the rows, lower degrees than
+ * @level are subtracted. Note only values 0 (no levelling) and 1
+ * (subtract the mean value of each row) are available at present.
+ * There is no difference for HHCF.
+ * @weights: Line to store the denominators to (or %NULL). It will be resized
+ * to match the returned line. The denominators are integers equal
+ * to the number of terms that contributed to each value. They are
+ * suitable as fitting weight if the ACF is fitted.
+ *
+ * Calculates the row-wise height-height correlation function (HHCF) of a
+ * rectangular part of a field.
+ *
+ * The calculated HHCF has the natural number of points, i.e. @width.
+ *
+ * Masking is performed by omitting all terms that contain excluded pixels.
+ * Since different rows contain different numbers of pixels, the resulting
+ * HHCF values are calculated as a weighted sums where weight of each row's
+ * contribution is proportional to the number of contributing terms. In other
+ * words, the weighting is fair: each contributing pixel has the same influence
+ * on the result.
+ *
+ * Returns: A new one-dimensional data line with the HHCF.
+ **/
+GwyDataLine*
+gwy_data_field_area_row_hhcf(GwyDataField *field,
+ GwyDataField *mask,
+ GwyMaskingType masking,
+ guint col, guint row,
+ guint width, guint height,
+ guint level,
+ GwyDataLine *weights)
+{
+ GwyDataLine *line = NULL;
+ fftw_complex *fftc, *tmp;
+ const gdouble *base, *q;
+ gdouble *fftr, *accum_data, *accum_mask, *accum_v, *p;
+ guint nfullrows = 0, nemptyrows = 0;
+ guint size, cstride, i, j;
+ fftw_plan plan;
+
+ g_return_val_if_fail(GWY_IS_DATA_FIELD(field), NULL);
+ g_return_val_if_fail(!mask || GWY_IS_DATA_FIELD(mask), NULL);
+ if (mask) {
+ g_return_val_if_fail(mask->xres == field->xres
+ && mask->yres == field->yres, NULL);
+ }
+ g_return_val_if_fail(!weights || GWY_IS_DATA_LINE(weights), NULL);
+
+ if (level > 1) {
+ g_warning("Levelling degree %u is not supported, changing to 1.",
+ level);
+ level = 1;
+ }
+
+ /* Transform size must be at least twice the data size for zero padding.
+ * An even size is necessary due to alignment constraints in FFTW.
+ * Using this size for all buffers is a bit excessive but safe. */
+ line = gwy_data_line_new(width, 1.0, TRUE);
+ size = gwy_fft_find_nice_size((width + 1)/2*4);
+ /* The innermost (contiguous) dimension of R2C the complex output is
+ * slightly larger than the real input. Note @cstride is measured in
+ * fftw_complex, multiply it by 2 for doubles. */
+ cstride = size/2 + 1;
+ base = field->data + row*field->xres + col;
+ fftr = g_new(gdouble, 4*size);
+ accum_data = fftr + size;
+ accum_mask = fftr + 2*size;
+ accum_v = fftr + 3*size;
+ fftc = g_new(fftw_complex, 2*cstride);
+ tmp = fftc + cstride;
+
+ plan = fftw_plan_dft_r2c_1d(size, fftr, fftc,
+ FFTW_DESTROY_INPUT | _GWY_FFTW_PATIENCE);
+ g_assert(plan);
+ gwy_clear(accum_data, size);
+ gwy_clear(accum_mask, size);
+ gwy_clear(accum_v, size);
+
+ // Gather V_ν-2|Z_ν|² for all rows, except that for full rows we actually
+ // gather just -2|Z_ν|² because v_k can be calculated without DFT.
+ for (i = 0; i < height; i++) {
+ guint count = row_level_and_count(base + i*field->xres, fftr, width,
+ mask, masking, col, row + i, level);
+ if (!count) {
+ nemptyrows++;
+ continue;
+ }
+
+ /* Calculate v_k before FFT destroys the input levelled/filtered data.
+ */
+ if (count == width)
+ row_accumulate_vk(fftr, accum_v, width);
+ else {
+ // For partial rows, we will need the data later to calculate FFT
+ // of their squares. Save them to the line that conveniently has
+ // the right size.
+ gwy_assign(line->data, fftr, width);
+ }
+
+ /* Calculate and gather -2 times squared Fourier coefficients. */
+ row_extfft_accum_cnorm(plan, fftr, accum_data, fftc, size, width, -2.0);
+
+ if (count == width) {
+ nfullrows++;
+ continue;
+ }
+
+ /* First calculate U_ν (Fourier cofficients of squared data). Save
+ * them to tmp. */
+ q = line->data;
+ p = fftr;
+ for (j = width; j; j--, p++, q++)
+ *p = (*q)*(*q);
+ gwy_clear(fftr + width, size - width);
+ fftw_execute(plan);
+ gwy_assign(tmp, fftc, cstride);
+
+ /* Mask. We need the intermediate result C_ν to combine it with U_ν. */
+ row_assign_mask(mask, col, row + i, width, masking, fftr);
+ gwy_clear(fftr + width, size - width);
+ fftw_execute(plan);
+
+ /* Accumulate V_ν (calculated from C_ν and U_ν) to accum_data. */
+ row_accum_cprod(tmp, fftc, accum_data, size, 1.0);
+
+ /* And accumulate squared mask Fourier coeffs |C_ν|². */
+ row_accum_cnorm(accum_mask, fftc, size, 1.0);
+ }
+
+ /* Numerator of H_k, excluding non-DFT data in v_k. */
+ row_extfft_extract_re(plan, fftr, accum_data, fftc, size, width);
+ /* Combine it with v_k to get the full numerator in accum_data. */
+ row_accumulate(accum_data, accum_v, width);
+
+ // Denominator of H_k, i.e. FFT of squared mask Fourier coefficients.
+ // Don't perform the FFT if there were no partial rows.
+ if (nfullrows + nemptyrows < height)
+ row_extfft_extract_re(plan, fftr, accum_mask, fftc, size, width);
+
+ for (j = 0; j < width; j++) {
+ // Denominators must be rounded to integers because they are integers
+ // and this permits to detect zeroes in the denominator.
+ accum_mask[j] = GWY_ROUND(accum_mask[j]) + nfullrows*(width - j);
+ }
+ row_divide_nonzero_with_laplace(accum_data, accum_mask, line->data,
+ line->res);
+
+ line->real = gwy_data_field_get_xmeasure(field)*line->res;
+ /* line->off = -0.5*line->real/line->res; */
+
+ if (weights) {
+ gwy_data_line_resample(weights, line->res, GWY_INTERPOLATION_NONE);
+ gwy_data_line_set_real(weights, line->real);
+ gwy_data_line_set_offset(weights, line->off);
+ gwy_assign(weights->data, accum_mask, weights->res);
+ }
+
+ fftw_destroy_plan(plan);
+ fftw_free(fftc);
+ fftw_free(fftr);
+
+ set_cf_units(field, line, weights);
+ return line;
+}
+
+/* Recalculate area excess based on second-order expansion to the true one,
+ * assuming the distribution is exponential. */
+static inline gdouble
+asg_correction(gdouble ex)
+{
+ if (ex < 1e-3)
+ return ex*(1.0 - ex*(1.0 - 3.0*ex*(1.0 - 5.0*ex*(1.0 - 7.0*ex*(1.0 - 9.0*ex*(1.0 - 11.0*ex))))));
+
+ return sqrt(0.5*G_PI*ex) * exp(0.5/ex) * erfc(sqrt(0.5/ex));
+}
+
+/**
+ * gwy_data_field_area_row_asg:
+ * @field: A two-dimensional data field.
+ * @col: Upper-left column coordinate.
+ * @row: Upper-left row coordinate.
+ * @width: Area width (number of columns).
+ * @height: Area height (number of rows).
+ * @mask: Mask specifying which values to take into account/exclude, or %NULL.
+ * @masking: Masking mode to use (has any effect only with non-%NULL @mask).
+ * @level: The first polynomial degree to keep in the rows, lower degrees than
+ * @level are subtracted. Note only values 0 (no levelling) and 1
+ * (subtract the mean value of each row) are available at present.
+ * There is no difference for ASG.
+ *
+ * Calculates the row-wise area scale graph (ASG) of a rectangular part of a
+ * field.
+ *
+ * The calculated ASG has the natural number of points, i.e. @width-1.
+ *
+ * The ASG represents the apparent area excess (ratio of surface and projected
+ * area minus one) observed at given length scale. The quantity calculated by
+ * this function serves a similar purpose as ASME B46.1 area scale graph but
+ * is defined differently, based on the HHCF. See
+ * gwy_data_field_area_row_hhcf() for details of its calculation.
+ *
+ * Returns: A new one-dimensional data line with the ASG.
+ **/
+GwyDataLine*
+gwy_data_field_area_row_asg(GwyDataField *field,
+ GwyDataField *mask,
+ GwyMaskingType masking,
+ guint col, guint row,
+ guint width, guint height,
+ guint level)
+{
+ GwyDataLine *hhcf;
+ GwyDataLine *line = NULL;
+ gdouble dx;
+ guint i;
+
+ hhcf = gwy_data_field_area_row_hhcf(field, mask, masking,
+ col, row, width, height, level, NULL);
+
+ g_return_val_if_fail(hhcf, NULL);
+ dx = hhcf->real/hhcf->res;
+ if (hhcf->res < 2) {
+ line = gwy_data_line_new(1, dx, TRUE);
+ g_object_unref(hhcf);
+ return line;
+ }
+
+ line = gwy_data_line_new(hhcf->res - 1, dx*(hhcf->res - 1), FALSE);
+ line->off = 0.5*dx;
+
+ for (i = 0; i < line->res; i++) {
+ gdouble t = (i + 0.5)*dx + line->off;
+ line->data[i] = asg_correction(hhcf->data[i+1]/(t*t));
+ }
+
+ _gwy_assign_si_unit(field->si_unit_xy, &line->si_unit_x);
+ g_object_unref(hhcf);
+
+ return line;
+}
+
+#if 0
+static void
+hhcf_running_sums(GwyDataField *rsum,
+ const gdouble *data, guint stride, guint width, guint height,
+ gdouble *buf)
+{
+ guint xres = rsum->xres, yres = rsum->yres;
+ guint xrange = xres/2, yrange = yres/2;
+ gdouble *rsdata = rsum->data;
+ guint i, j;
+
+ g_assert(xres == 2*xrange+1);
+ g_assert(yres == 2*yrange+1);
+
+ // Same-sign HHCF arguments, sums growing along the major diagonal.
+ gwy_clear(buf, width);
+ for (i = 0; i < height; i++) {
+ const gdouble *row1 = data + i*stride;
+ const gdouble *row2 = data + (height-1 - i)*stride + width-1;
+ gdouble s = 0.0;
+ for (j = 0; j < width; j++, row1++, row2--) {
+ gdouble z1 = *row1, z2 = *row2;
+ buf[j] += z1*z1 + z2*z2;
+ s += buf[j];
+ guint ii = height-1 - i, jj = width-1 - j;
+ if (ii <= yrange && jj <= xrange) {
+ rsdata[(yrange + ii)*xres + xrange + jj] = s;
+ rsdata[(yrange - ii)*xres + xrange - jj] = s;
+ }
+ }
+ }
+
+ // Opposite-sign HHCF arguments, sums growing along the minor diagonal.
+ gwy_clear(buf, width);
+ for (i = 0; i < height; i++) {
+ const gdouble *row1 = data + (height-1 - i)*stride;
+ const gdouble *row2 = data + i*stride + width-1;
+ gdouble s = 0.0;
+ for (j = 0; j < width; j++, row1++, row2--) {
+ gdouble z1 = *row1, z2 = *row2;
+ buf[j] += z1*z1 + z2*z2;
+ s += buf[j];
+ guint ii = height-1 - i, jj = width-1 - j;
+ if (ii <= yrange && jj <= xrange) {
+ rsdata[(yrange + ii)*xres + xrange - jj] = s;
+ rsdata[(yrange - ii)*xres + xrange + jj] = s;
+ }
+ }
+ }
+}
+
+static GwyDataField*
+gwy_data_field_cf(GwyDataField *field,
+ GwyDataFieldPart *fpart,
+ guint xrange, guint yrange,
+ guint level,
+ CFType type)
+{
+ guint col, row, width, height;
+
+ if (level > 1) {
+ g_warning("Levelling degree %u is not supported, changing to 1.",
+ level);
+ level = 1;
+ }
+ if (xrange >= width) {
+ g_warning("CF x range is not smaller than width, fixing it.");
+ xrange = width-1;
+ }
+ if (yrange >= height) {
+ g_warning("CF y range is not smaller than height, fixing it.");
+ yrange = height-1;
+ }
+
+ guint xsize = gwy_fft_find_nice_size(width + xrange);
+ guint ysize = gwy_fft_find_nice_size(height + yrange);
+ // The innermost (contiguous) dimension of R2C the complex output is
+ // slightly larger than the real input. Note @cstride is measured in
+ // fftw_complex, multiply it by 2 for doubles.
+ guint cxsize = xsize/2 + 1;
+ gdouble *fftr = g_new(gdouble, xsize*ysize);
+ fftw_complex *fftc = g_new(fftw_complex, cxsize*ysize);
+ fftw_plan plan = fftw_plan_dft_r2c_2d(ysize, xsize, fftr, fftc,
+ FFTW_DESTROY_INPUT
+ | _GWY_FFTW_PATIENCE);
+ g_assert(plan);
+
+ guint xres = field->xres;
+ if (level == 1) {
+ gdouble mean = gwy_data_field_mean(field, fpart, NULL, GWY_MASK_IGNORE);
+ for (guint i = 0; i < height; i++) {
+ const gdouble *drow = field->data + (i + row)*xres + col;
+ gdouble *rrow = fftr + i*xsize;
+ row_copy_subtract(drow, rrow, width, mean);
+ gwy_clear(rrow + width, xsize - width);
+ }
+ }
+ else {
+ for (guint i = 0; i < height; i++) {
+ const gdouble *drow = field->data + (i + row)*xres + col;
+ gdouble *rrow = fftr + i*xsize;
+ gwy_assign(rrow, drow, width);
+ gwy_clear(rrow + width, xsize - width);
+ }
+ }
+
+ GwyDataField *cf = gwy_data_field_new_sized(2*xrange + 1, 2*yrange + 1, TRUE);
+ guint txres = cf->xres, tyres = cf->yres;
+
+ if (type == CF_HHCF) {
+ if (yrange)
+ hhcf_running_sums(cf, fftr, xsize, width, height,
+ fftr + xsize*height);
+ else {
+ // If yrange=0 we cannot use the lower (to be zeroed) part of fftr
+ // as a temporary scratch space because there is no lower part.
+ gdouble *workspace = g_new(gdouble, width);
+ hhcf_running_sums(cf, fftr, xsize, width, height, workspace);
+ g_free(workspace);
+ }
+ }
+
+ gwy_clear(fftr + xsize*height, xsize*(ysize - height));
+
+ fftw_execute(plan);
+
+ row2_assign_cnorm(fftr, fftr + xsize-1, fftc, xsize, 1.0/ysize);
+ for (guint i = 1; i < ysize; i++) {
+ const fftw_complex *crow = fftc + i*cxsize;
+ gdouble *rrow = fftr + i*xsize,
+ *rrow2 = fftr + (ysize - i)*xsize + xsize-1;
+ row2_assign_cnorm(rrow, rrow2, crow, xsize, 1.0/ysize);
+ }
+
+ fftw_execute(plan);
+ fftw_destroy_plan(plan);
+ fftw_free(fftr);
+
+ for (guint i = 0; i <= yrange; i++) {
+ const fftw_complex *crow = fftc + i*cxsize;
+ gdouble *frow = cf->data + (yrange + i)*txres + xrange;
+ gdouble *brow = cf->data + (yrange - i)*txres + xrange;
+ if (type == CF_ACF) {
+ for (guint j = 0; j <= xrange; j++, crow++, frow++, brow--) {
+ gdouble v = gwycreal(*crow);
+ *frow = *brow = v/(height - i)/(width - j);
+ }
+ }
+ else if (type == CF_HHCF) {
+ guint from = 0;
+ if (!i) {
+ /* Don't process the central point twice. */
+ gdouble v = gwycreal(*crow);
+ *frow = (*frow - 2.0*v)/height/width;
+ from++;
+ crow++;
+ frow++;
+ brow--;
+ }
+ for (guint j = from; j <= xrange; j++, crow++, frow++, brow--) {
+ gdouble v = gwycreal(*crow);
+ *frow = (*frow - 2.0*v)/(height - i)/(width - j);
+ *brow = (*brow - 2.0*v)/(height - i)/(width - j);
+ }
+ }
+ }
+ for (guint i = 1; i <= yrange; i++) {
+ const fftw_complex *crow = fftc + (ysize - i)*cxsize + 1;
+ gdouble *frow = cf->data + (yrange - i)*txres + (xrange+1);
+ gdouble *brow = cf->data + (yrange + i)*txres + (xrange-1);
+ if (type == CF_ACF) {
+ for (guint j = 1; j <= xrange; j++, crow++, frow++, brow--) {
+ gdouble v = gwycreal(*crow);
+ *frow = *brow = v/(height - i)/(width - j);
+ }
+ }
+ else if (type == CF_HHCF) {
+ for (guint j = 1; j <= xrange; j++, crow++, frow++, brow--) {
+ gdouble v = gwycreal(*crow);
+ *frow = (*frow - 2.0*v)/(height - i)/(width - j);
+ *brow = (*brow - 2.0*v)/(height - i)/(width - j);
+ }
+ }
+ }
+ fftw_free(fftc);
+
+ gdouble dx = gwy_data_field_get_xmeasure(field), dy = gwy_data_field_get_ymeasure(field);
+ cf->xreal = dx*txres;
+ cf->yreal = dy*tyres;
+ cf->xoff = -0.5*cf->xreal;
+ cf->yoff = -0.5*cf->yreal;
+
+ _gwy_assign_unit(&cf->xunit, field->xunit);
+ _gwy_assign_unit(&cf->yunit, field->yunit);
+ gwy_si_unit_power(gwy_data_field_get_si_unit_z(cf), field->zunit, 2);
+
+ return cf;
+}
+#endif
+
+/* vim: set cin et ts=4 sw=4 cino=>1s,e0,n0,f0,{0,}0,^0,\:1s,=0,g1s,h0,t0,+1s,c3,(0,u0 : */
diff --git a/libprocess/stats-entropy.c b/libprocess/stats-entropy.c
new file mode 100644
index 0000000..1d63a88
--- /dev/null
+++ b/libprocess/stats-entropy.c
@@ -0,0 +1,1068 @@
+/*
+ * @(#) $Id: stats-entropy.c 19698 2017-05-03 20:18:10Z yeti-dn $
+ * Copyright (C) 2003-2017 David Necas (Yeti), Petr Klapetek.
+ * E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include <string.h>
+#include <libgwyddion/gwymacros.h>
+#include <libgwyddion/gwymath.h>
+#include <libprocess/datafield.h>
+#include <libprocess/stats.h>
+#include "gwyprocessinternal.h"
+
+typedef struct _BinTreeNode BinTreeNode;
+typedef struct _QuadTreeNode QuadTreeNode;
+
+struct _BinTreeNode {
+ /* This optimally uses memory on 64bit architectures where pt and
+ * children have the same size (16 bytes). */
+ union {
+ /* The at most two points inside for non-max-depth leaves. */
+ struct {
+ gdouble a;
+ gdouble b;
+ } pt;
+ /* Children for non-max-depth non-leaves. */
+ BinTreeNode *children[2];
+ } u;
+ /* Always set; for max-depth leaves it is the only meaningful field. */
+ guint count;
+};
+
+typedef struct {
+ gdouble min;
+ gdouble max;
+ BinTreeNode *root;
+ guint maxdepth;
+ gboolean degenerate;
+ gdouble degenerateS;
+} BinTree;
+
+struct _QuadTreeNode {
+ /* This optimally uses memory on 64bit architectures where pt and
+ * children have the same size (32 bytes). */
+ union {
+ /* The at most two points inside for non-max-depth leaves. */
+ struct {
+ GwyXY a;
+ GwyXY b;
+ } pt;
+ /* Children for non-max-depth non-leaves. */
+ QuadTreeNode *children[4];
+ } u;
+ /* Always set; for max-depth leaves it is the only meaningful field. */
+ guint count;
+};
+
+typedef struct {
+ GwyXY min;
+ GwyXY max;
+ QuadTreeNode *root;
+ guint maxdepth;
+ gboolean degenerate;
+ gdouble degenerateS;
+} QuadTree;
+
+/* Find the flattest part of the curve representing scaling histogram-based
+ * entropy on scale and use the value there as the entropy estimate. Handle
+ * the too-few-pixels cases gracefully.
+ *
+ * NB: We assume
+ * (1) ecurve beings from large scales. This is important only when it has
+ * lots of points because we may skip a few at the beginning then to avoid
+ * mistaking the flat part of the curve there for the inflexion point.
+ * (2) ecurve goes by powers of 2 scales, this is for the mindiff filtering.
+ */
+static gdouble
+calculate_entropy_from_scaling(const gdouble *ecurve, guint maxdiv)
+{
+ /* Initialise S to the δ-function entropy and mindiff to the half of the
+ * asymptotic value for distribution that is sum of δ-functions.
+ * This means only if the differences drops substantially from this
+ * asymptotic value we will consider is as potential inflexion point.
+ * If we get ecurve[] essentially corresponding to a set of δ-functions
+ * then we return -G_MAXDOUBLE. */
+ gdouble S = -G_MAXDOUBLE, mindiff = 0.6*G_LN2;
+ guint i, from = (maxdiv >= 12) + (maxdiv >= 36);
+
+ if (maxdiv < 1)
+ return ecurve[0];
+
+ if (maxdiv < 5) {
+ for (i = from; i <= maxdiv-2; i++) {
+ gdouble diff = 0.5*(fabs(ecurve[i+1] - ecurve[i])
+ + fabs(ecurve[i+2] - ecurve[i+1]))/G_LN2;
+ gdouble diff2 = 0.5*(fabs(ecurve[i] + ecurve[i+2]
+ - 2.0*ecurve[i+1]))/(G_LN2*G_LN2);
+ if (diff + diff2 < mindiff) {
+ S = ecurve[i+1];
+ mindiff = diff + diff2;
+ }
+ }
+ }
+ else {
+ for (i = from; i <= maxdiv-4; i++) {
+ gdouble diff = 0.25*(fabs(ecurve[i+1] - ecurve[i])
+ + fabs(ecurve[i+2] - ecurve[i+1])
+ + fabs(ecurve[i+3] - ecurve[i+2])
+ + fabs(ecurve[i+4] - ecurve[i+3]));
+ gdouble diff2 = 0.5*(fabs(ecurve[i+1] + ecurve[i+4]
+ - 2.0*ecurve[i+2]))/(G_LN2*G_LN2);
+ if (diff + diff2 < mindiff) {
+ S = (ecurve[i+1] + ecurve[i+2] + ecurve[i+3])/3.0;
+ mindiff = diff + diff2;
+ }
+ }
+ }
+
+ return S;
+}
+
+/* This is what we get on average from all possible two-point configurations if
+ * they are randomly distributed. A fairly good estimate that in practice
+ * seems to result in some deviation on the 5th significant digit, which is
+ * hardly significant at all. The contribution is the same in 1D and 2D. */
+static void
+add_estimated_unsplit_node_entropy(gdouble *S, guint maxdepth, gdouble w)
+{
+ gdouble q = 2.0*G_LN2*w;
+ guint i;
+
+ for (i = 0; i <= maxdepth; i++, S++) {
+ S[0] += q;
+ q *= 0.5;
+ }
+}
+
+static BinTreeNode*
+bin_tree_node_new(const gdouble pt)
+{
+ BinTreeNode *btnode = g_slice_new(BinTreeNode);
+ btnode->u.pt.a = pt;
+ btnode->count = 1;
+ return btnode;
+}
+
+static void
+bin_tree_add_node(BinTreeNode *btnode, const gdouble pt,
+ gdouble min, gdouble max, guint maxdepth)
+{
+ BinTreeNode *child;
+ gdouble centre;
+ guint i;
+
+ /* We reached maximum allowed subdivision. Just increase the count. */
+ if (!maxdepth) {
+ if (btnode->count <= 2)
+ gwy_clear(&btnode->u, 1);
+ btnode->count++;
+ return;
+ }
+
+ /* We will descend into subtrees. */
+ centre = 0.5*(min + max);
+
+ /* If this node has just one point add the other there and we are done. */
+ if (btnode->count == 1) {
+ btnode->u.pt.b = pt;
+ btnode->count++;
+ return;
+ }
+
+ /* We will be recursing. So if this node is a leaf start by making it
+ * non-leaf. */
+ if (btnode->count == 2) {
+ gdouble pta = btnode->u.pt.a;
+ gdouble ptb = btnode->u.pt.b;
+ guint ia = (pta > centre);
+ guint ib = (ptb > centre);
+
+ gwy_clear(&btnode->u, 1);
+ child = btnode->u.children[ia] = bin_tree_node_new(pta);
+ /* Must distinguish between creating two child nodes and creating one
+ * two-point child node. */
+ if (ia == ib) {
+ child->u.pt.b = ptb;
+ child->count = 2;
+ }
+ else
+ btnode->u.children[ib] = bin_tree_node_new(ptb);
+ }
+
+ /* Add the new point to the appropriate child. */
+ i = (pt > centre);
+ maxdepth--;
+ btnode->count++;
+
+ if ((child = btnode->u.children[i])) {
+ /* Recurse. This will end either by reaching maxdepth=0 or by
+ * successful separation in the other branch of this conditon. */
+ if (i == 0)
+ bin_tree_add_node(child, pt, min, centre, maxdepth);
+ else
+ bin_tree_add_node(child, pt, centre, max, maxdepth);
+ }
+ else {
+ /* There is nothing here yet. Add the point as a new leaf. */
+ btnode->u.children[i] = bin_tree_node_new(pt);
+ }
+}
+
+static void
+bin_tree_add(BinTree *btree, const gdouble pt)
+{
+ if (G_LIKELY(btree->root)) {
+ bin_tree_add_node(btree->root, pt,
+ btree->min, btree->max, btree->maxdepth);
+ }
+ else
+ btree->root = bin_tree_node_new(pt);
+}
+
+static void
+bin_tree_find_range(BinTree *btree, const gdouble *xdata, guint n)
+{
+ gdouble min = G_MAXDOUBLE;
+ gdouble max = -G_MAXDOUBLE;
+ guint i;
+
+ for (i = 0; i < n; i++) {
+ gdouble x = xdata[i];
+
+ if (x < min)
+ min = x;
+ if (x > max)
+ max = x;
+ }
+
+ btree->min = min;
+ btree->max = max;
+}
+
+static void
+bin_tree_node_free(BinTreeNode *btnode)
+{
+ guint i;
+
+ if (btnode->count > 2) {
+ for (i = 0; i < G_N_ELEMENTS(btnode->u.children); i++) {
+ if (btnode->u.children[i])
+ bin_tree_node_free(btnode->u.children[i]);
+ }
+ }
+ g_slice_free(BinTreeNode, btnode);
+}
+
+static void
+bin_tree_free(BinTree *btree)
+{
+ if (!btree->degenerate)
+ bin_tree_node_free(btree->root);
+ g_free(btree);
+}
+
+static BinTree*
+bin_tree_new(const gdouble *xdata, guint n, guint maxdepth)
+{
+ BinTree *btree;
+ guint i;
+
+ btree = g_new0(BinTree, 1);
+
+ if (!maxdepth)
+ maxdepth = 24;
+ btree->maxdepth = maxdepth;
+
+ bin_tree_find_range(btree, xdata, n);
+ if (!(btree->min < btree->max)) {
+ btree->degenerate = TRUE;
+ btree->degenerateS = G_MAXDOUBLE;
+ return btree;
+ }
+
+ /* Return explicit estimates for n < 4, making maxdiv at least 1 (with
+ * half-scales included, ecurve will have at least 3 points then). */
+ if (n == 2) {
+ btree->degenerate = TRUE;
+ btree->degenerateS = log(btree->max - btree->min);
+ return btree;
+ }
+ if (n == 3) {
+ btree->degenerate = TRUE;
+ btree->degenerateS = (log(btree->max - btree->min)
+ + 0.5*log(1.5) - G_LN2/3.0);
+ return btree;
+ }
+
+ for (i = 0; i < n; i++) {
+ gdouble pt = xdata[i];
+ bin_tree_add(btree, pt);
+ }
+
+ return btree;
+}
+
+static void
+bin_tree_node_entropies_at_scales(BinTreeNode *btnode, guint maxdepth,
+ gdouble *S, guint *unsplit)
+{
+ BinTreeNode *child;
+ guint i;
+
+ /* Singular points contribute to p*ln(p) always with zero. So we can stop
+ * recursion to finer subdivisions when count == 1. */
+ if (btnode->count <= 1)
+ return;
+
+ if (!maxdepth) {
+ S[0] += gwy_xlnx_int(btnode->count);
+ return;
+ }
+
+ if (btnode->count == 2) {
+ unsplit[0]++;
+ return;
+ }
+
+ S[0] += gwy_xlnx_int(btnode->count);
+ S++;
+
+ maxdepth--;
+ unsplit++;
+ for (i = 0; i < G_N_ELEMENTS(btnode->u.children); i++) {
+ if ((child = btnode->u.children[i]))
+ bin_tree_node_entropies_at_scales(child, maxdepth, S, unsplit);
+ }
+}
+
+static gdouble*
+bin_tree_entropies_at_scales(BinTree *btree, guint maxdepth)
+{
+ gdouble *S;
+ guint *unsplit;
+ guint i, n, npts;
+ gdouble Sscale;
+
+ if (!maxdepth)
+ maxdepth = btree->maxdepth;
+
+ n = maxdepth + 1;
+ S = g_new0(gdouble, n);
+
+ if (btree->degenerate) {
+ S[0] = btree->degenerateS;
+ for (i = 1; i < n; i++)
+ S[i] = S[i-1] - G_LN2;
+ return S;
+ }
+
+ unsplit = g_new0(guint, maxdepth);
+ bin_tree_node_entropies_at_scales(btree->root,
+ MIN(maxdepth, btree->maxdepth),
+ S, unsplit);
+
+ for (i = 0; i < maxdepth; i++) {
+ if (unsplit[i])
+ add_estimated_unsplit_node_entropy(S + i, maxdepth - i, unsplit[i]);
+ }
+ g_free(unsplit);
+
+ npts = btree->root->count;
+ Sscale = log(npts*(btree->max - btree->min));
+ for (i = 0; i < n; i++)
+ S[i] = Sscale - i*G_LN2 - S[i]/npts;
+
+ return S;
+}
+
+static gdouble*
+calculate_entropy_at_scales(GwyDataField *dfield,
+ GwyDataField *mask,
+ GwyMaskingType mode,
+ gint col, gint row,
+ gint width, gint height,
+ guint *maxdiv,
+ gdouble *S)
+{
+ gint xres;
+ guint i, j, n;
+ gdouble *xdata;
+ const gdouble *base;
+ gboolean must_free_xdata = TRUE;
+ gdouble *ecurve;
+ BinTree *btree;
+
+ if (mask) {
+ gwy_data_field_area_count_in_range(mask, NULL, col, row, width, height,
+ G_MAXDOUBLE, 1.0, NULL, &n);
+ if (mode == GWY_MASK_EXCLUDE)
+ n = width*height - n;
+ }
+ else
+ n = width*height;
+
+ if (!*maxdiv) {
+ if (n >= 2)
+ *maxdiv = (guint)floor(3.0*log(n)/G_LN2 + 1e-12);
+ else
+ *maxdiv = 2;
+
+ /* We will run out of significant digits in coordinates after that. */
+ *maxdiv = MIN(*maxdiv, 50);
+ }
+
+ if (n < 2) {
+ ecurve = g_new(gdouble, *maxdiv+1);
+ for (i = 0; i <= *maxdiv; i++)
+ ecurve[i] = -G_MAXDOUBLE;
+ if (S)
+ *S = -G_MAXDOUBLE;
+ return ecurve;
+ }
+
+ xres = dfield->xres;
+ base = dfield->data + row*xres + col;
+ if (n == xres*dfield->yres) {
+ /* Handle the full-field case without allocating anything. */
+ xdata = dfield->data;
+ must_free_xdata = FALSE;
+ }
+ else {
+ xdata = g_new(gdouble, n);
+ if (mask) {
+ const gdouble *mbase = mask->data + row*xres + col;
+ const gboolean invert = (mode == GWY_MASK_EXCLUDE);
+ guint k = 0;
+
+ for (i = 0; i < height; i++) {
+ const gdouble *d = base + i*xres;
+ const gdouble *m = mbase + i*xres;
+ for (j = width; j; j--, d++, m++) {
+ if ((*m < 1.0) == invert)
+ xdata[k++] = *d;
+ }
+ }
+ g_assert(k == n);
+ }
+ else {
+ for (i = 0; i < height; i++)
+ gwy_assign(xdata + i*width, base + i*xres, width);
+ }
+ }
+
+ btree = bin_tree_new(xdata, n, *maxdiv);
+ if (must_free_xdata)
+ g_free(xdata);
+
+ ecurve = bin_tree_entropies_at_scales(btree, *maxdiv);
+ if (S) {
+ if (btree->degenerate)
+ *S = btree->degenerateS;
+ else
+ *S = calculate_entropy_from_scaling(ecurve, *maxdiv);
+ }
+ bin_tree_free(btree);
+
+ return ecurve;
+}
+
+/**
+ * gwy_data_field_area_get_entropy_at_scales:
+ * @data_field: A data field.
+ * @target_line: A data line to store the result to. It will be resampled to
+ * @maxdiv+1 items.
+ * @mask: Mask specifying which values to take into account/exclude, or %NULL.
+ * @mode: Masking mode to use. See the introduction for description of
+ * masking modes.
+ * @col: Upper-left column coordinate.
+ * @row: Upper-left row coordinate.
+ * @width: Area width (number of columns).
+ * @height: Area height (number of rows).
+ * @maxdiv: Maximum number of divisions of the value range. Pass zero to
+ * choose it automatically.
+ *
+ * Calculates estimates of value distribution entropy at various scales.
+ *
+ * Returns: The best estimate, as gwy_data_field_area_get_entropy().
+ *
+ * Since: 2.44
+ **/
+gdouble
+gwy_data_field_area_get_entropy_at_scales(GwyDataField *data_field,
+ GwyDataLine *target_line,
+ GwyDataField *mask,
+ GwyMaskingType mode,
+ gint col, gint row,
+ gint width, gint height,
+ gint maxdiv)
+{
+ GwySIUnit *lineunit;
+ guint umaxdiv = (maxdiv > 0 ? maxdiv : 0);
+ gdouble *ecurve;
+ gdouble min, max, S = -G_MAXDOUBLE;
+ gint i;
+
+ g_return_val_if_fail(GWY_IS_DATA_FIELD(data_field), S);
+ g_return_val_if_fail(GWY_IS_DATA_LINE(target_line), S);
+ g_return_val_if_fail(!mask || (GWY_IS_DATA_FIELD(mask)
+ && mask->xres == data_field->xres
+ && mask->yres == data_field->yres), S);
+ g_return_val_if_fail(col >= 0 && row >= 0
+ && width >= 0 && height >= 0
+ && col + width <= data_field->xres
+ && row + height <= data_field->yres, S);
+
+ ecurve = calculate_entropy_at_scales(data_field, mask, mode,
+ col, row, width, height,
+ &umaxdiv, &S);
+ maxdiv = maxdiv ? maxdiv : umaxdiv + 1;
+ gwy_data_line_resample(target_line, maxdiv, GWY_INTERPOLATION_NONE);
+ target_line->real = maxdiv*G_LN2;
+ for (i = 0; i < maxdiv; i++)
+ target_line->data[maxdiv-1 - i] = ecurve[i];
+ g_free(ecurve);
+
+ gwy_data_field_area_get_min_max_mask(data_field, mask, mode,
+ col, row, width, height,
+ &min, &max);
+ if (max > min)
+ target_line->off = log(max - min) - (maxdiv - 0.5)*G_LN2;
+
+ lineunit = gwy_data_line_get_si_unit_x(target_line);
+ gwy_si_unit_set_from_string(lineunit, NULL);
+ lineunit = gwy_data_line_get_si_unit_y(target_line);
+ gwy_si_unit_set_from_string(lineunit, NULL);
+
+ return S;
+}
+
+/**
+ * gwy_data_field_get_entropy:
+ * @data_field: A data field.
+ *
+ * Computes the entropy of a data field.
+ *
+ * See gwy_data_field_area_get_entropy() for the definition.
+ *
+ * This quantity is cached.
+ *
+ * Returns: The value distribution entropy.
+ *
+ * Since: 2.42
+ **/
+gdouble
+gwy_data_field_get_entropy(GwyDataField *data_field)
+{
+ gdouble S = -G_MAXDOUBLE;
+ gdouble *ecurve;
+ guint maxdiv = 0;
+
+ g_return_val_if_fail(GWY_IS_DATA_FIELD(data_field), S);
+
+ gwy_debug("%s", CTEST(data_field, ENT) ? "cache" : "lame");
+ if (CTEST(data_field, ENT))
+ return CVAL(data_field, ENT);
+
+ ecurve = calculate_entropy_at_scales(data_field, NULL, GWY_MASK_IGNORE,
+ 0, 0,
+ data_field->xres, data_field->yres,
+ &maxdiv, &S);
+ g_free(ecurve);
+
+ CVAL(data_field, ENT) = S;
+ data_field->cached |= CBIT(ENT);
+
+ return S;
+}
+
+/**
+ * gwy_data_field_area_get_entropy:
+ * @data_field: A data field.
+ * @mask: Mask specifying which values to take into account/exclude, or %NULL.
+ * @mode: Masking mode to use. See the introduction for description of
+ * masking modes.
+ * @col: Upper-left column coordinate.
+ * @row: Upper-left row coordinate.
+ * @width: Area width (number of columns).
+ * @height: Area height (number of rows).
+ *
+ * Estimates the entropy of field data distribution.
+ *
+ * The estimate is calculated as @S = ln(@n Δ) − 1/@n ∑ @n_i ln(@n_i), where
+ * @n is the number of pixels considered, Δ the bin size and @n_i the count in
+ * the @i-th bin. If @S is plotted as a function of the bin size Δ, it is,
+ * generally, a growing function with a plateau for ‘reasonable’ bin sizes.
+ * The estimate is taken at the plateau. If no plateau is found, which means
+ * the distribution is effectively a sum of δ-functions, -%G_MAXDOUBLE is
+ * returned.
+ *
+ * It should be noted that this estimate may be biased.
+ *
+ * Returns: The estimated entropy of the data values. The entropy of no data
+ * or a single single is returned as -%G_MAXDOUBLE.
+ *
+ * Since: 2.42
+ **/
+gdouble
+gwy_data_field_area_get_entropy(GwyDataField *data_field,
+ GwyDataField *mask,
+ GwyMaskingType mode,
+ gint col, gint row,
+ gint width, gint height)
+{
+ gdouble S = -G_MAXDOUBLE;
+ gdouble *ecurve;
+ guint maxdiv = 0;
+
+ g_return_val_if_fail(GWY_IS_DATA_FIELD(data_field), S);
+ g_return_val_if_fail(!mask || (GWY_IS_DATA_FIELD(mask)
+ && mask->xres == data_field->xres
+ && mask->yres == data_field->yres), S);
+ g_return_val_if_fail(col >= 0 && row >= 0
+ && width >= 0 && height >= 0
+ && col + width <= data_field->xres
+ && row + height <= data_field->yres,
+ S);
+
+ /* The result is the same, but it can be cached. */
+ if ((!mask || mode == GWY_MASK_IGNORE)
+ && row == 0 && col == 0
+ && width == data_field->xres && height == data_field->yres)
+ return gwy_data_field_get_entropy(data_field);
+
+ ecurve = calculate_entropy_at_scales(data_field, mask, mode,
+ col, row, width, height,
+ &maxdiv, &S);
+ g_free(ecurve);
+ return S;
+}
+
+static QuadTreeNode*
+quad_tree_node_new(const GwyXY *pt)
+{
+ QuadTreeNode *qtnode = g_slice_new(QuadTreeNode);
+ qtnode->u.pt.a = *pt;
+ qtnode->count = 1;
+ return qtnode;
+}
+
+static void
+quad_tree_add_node(QuadTreeNode *qtnode, const GwyXY *pt,
+ GwyXY min, GwyXY max, guint maxdepth)
+{
+ QuadTreeNode *child;
+ GwyXY centre;
+ guint i;
+
+ /* We reached maximum allowed subdivision. Just increase the count. */
+ if (!maxdepth) {
+ if (qtnode->count <= 2)
+ gwy_clear(&qtnode->u, 1);
+ qtnode->count++;
+ return;
+ }
+
+ /* We will descend into subtrees. */
+ centre.x = 0.5*(min.x + max.x);
+ centre.y = 0.5*(min.y + max.y);
+
+ /* If this node has just one point add the other there and we are done. */
+ if (qtnode->count == 1) {
+ qtnode->u.pt.b = *pt;
+ qtnode->count++;
+ return;
+ }
+
+ /* We will be recursing. So if this node is a leaf start by making it
+ * non-leaf. */
+ if (qtnode->count == 2) {
+ GwyXY pta = qtnode->u.pt.a;
+ GwyXY ptb = qtnode->u.pt.b;
+ guint ia = (pta.x > centre.x) + 2*(pta.y > centre.y);
+ guint ib = (ptb.x > centre.x) + 2*(ptb.y > centre.y);
+
+ gwy_clear(&qtnode->u, 1);
+ child = qtnode->u.children[ia] = quad_tree_node_new(&pta);
+ /* Must distinguish between creating two child nodes and creating one
+ * two-point child node. */
+ if (ia == ib) {
+ child->u.pt.b = ptb;
+ child->count = 2;
+ }
+ else
+ qtnode->u.children[ib] = quad_tree_node_new(&ptb);
+ }
+
+ /* Add the new point to the appropriate child. */
+ i = (pt->x > centre.x) + 2*(pt->y > centre.y);
+ maxdepth--;
+ qtnode->count++;
+
+ if ((child = qtnode->u.children[i])) {
+ /* Recurse. This will end either by reaching maxdepth=0 or by
+ * successful separation in the other branch of this conditon. */
+ if (i == 0)
+ quad_tree_add_node(child, pt, min, centre, maxdepth);
+ else if (i == 1) {
+ min.x = centre.x;
+ max.y = centre.y;
+ quad_tree_add_node(child, pt, min, max, maxdepth);
+ }
+ else if (i == 2) {
+ max.x = centre.x;
+ min.y = centre.y;
+ quad_tree_add_node(child, pt, min, max, maxdepth);
+ }
+ else
+ quad_tree_add_node(child, pt, centre, max, maxdepth);
+ }
+ else {
+ /* There is nothing here yet. Add the point as a new leaf. */
+ qtnode->u.children[i] = quad_tree_node_new(pt);
+ }
+}
+
+static void
+quad_tree_add(QuadTree *qtree, const GwyXY *pt)
+{
+ if (G_LIKELY(qtree->root)) {
+ quad_tree_add_node(qtree->root, pt,
+ qtree->min, qtree->max, qtree->maxdepth);
+ }
+ else
+ qtree->root = quad_tree_node_new(pt);
+}
+
+static void
+quad_tree_find_range(QuadTree *qtree,
+ const gdouble *xdata, const gdouble *ydata, guint n)
+{
+ GwyXY min = { G_MAXDOUBLE, G_MAXDOUBLE };
+ GwyXY max = { -G_MAXDOUBLE, -G_MAXDOUBLE };
+ guint i;
+
+ for (i = 0; i < n; i++) {
+ gdouble x = xdata[i];
+ gdouble y = ydata[i];
+
+ if (x < min.x)
+ min.x = x;
+ if (x > max.x)
+ max.x = x;
+ if (y < min.y)
+ min.y = y;
+ if (y > max.y)
+ max.y = y;
+ }
+
+ qtree->min = min;
+ qtree->max = max;
+}
+
+static void
+quad_tree_node_free(QuadTreeNode *qtnode)
+{
+ guint i;
+
+ if (qtnode->count > 2) {
+ for (i = 0; i < G_N_ELEMENTS(qtnode->u.children); i++) {
+ if (qtnode->u.children[i])
+ quad_tree_node_free(qtnode->u.children[i]);
+ }
+ }
+ g_slice_free(QuadTreeNode, qtnode);
+}
+
+static void
+quad_tree_free(QuadTree *qtree)
+{
+ quad_tree_node_free(qtree->root);
+ g_free(qtree);
+}
+
+static QuadTree*
+quad_tree_new(const gdouble *xdata, const gdouble *ydata, guint n,
+ guint maxdepth)
+{
+ QuadTree *qtree;
+ guint i;
+
+ qtree = g_new0(QuadTree, 1);
+
+ if (!maxdepth)
+ maxdepth = 16;
+ qtree->maxdepth = maxdepth;
+
+ quad_tree_find_range(qtree, xdata, ydata, n);
+ if (!(qtree->min.x < qtree->max.x) || !(qtree->min.y < qtree->max.y)) {
+ qtree->degenerate = TRUE;
+ qtree->degenerateS = G_MAXDOUBLE;
+ return qtree;
+ }
+
+ /* Return explicit estimates for n < 4, making maxdiv at least 1 (with
+ * half-scales included, ecurve will have at least 3 points then). */
+ if (n == 2) {
+ qtree->degenerate = TRUE;
+ qtree->degenerateS = (log(qtree->max.x - qtree->min.x)
+ + log(qtree->max.y - qtree->min.y));
+ return qtree;
+ }
+ if (n == 3) {
+ qtree->degenerate = TRUE;
+ qtree->degenerateS = (log(qtree->max.x - qtree->min.x)
+ + log(qtree->max.y - qtree->min.y)
+ + 0.5*log(1.5) - 2.0*G_LN2/3.0);
+ return qtree;
+ }
+
+ for (i = 0; i < n; i++) {
+ GwyXY pt = { xdata[i], ydata[i] };
+ quad_tree_add(qtree, &pt);
+ }
+
+ return qtree;
+}
+
+static gdouble
+quad_tree_node_half_scale_entropy(QuadTreeNode *qtnode)
+{
+ QuadTreeNode *child;
+ guint cnt[G_N_ELEMENTS(qtnode->u.children)] = { 0, 0, 0, 0 };
+ guint i;
+
+ for (i = 0; i < G_N_ELEMENTS(qtnode->u.children); i++) {
+ if ((child = qtnode->u.children[i]))
+ cnt[i] = child->count;
+ }
+ return 0.5*(gwy_xlnx_int(cnt[0] + cnt[1])
+ + gwy_xlnx_int(cnt[2] + cnt[3])
+ + gwy_xlnx_int(cnt[0] + cnt[2])
+ + gwy_xlnx_int(cnt[1] + cnt[3]));
+}
+
+static void
+quad_tree_node_entropies_at_scales(QuadTreeNode *qtnode, guint maxdepth,
+ gdouble *S, guint *unsplit)
+{
+ QuadTreeNode *child;
+ guint i;
+
+ /* Singular points contribute to p*ln(p) always with zero. So we can stop
+ * recursion to finer subdivisions when count == 1. */
+ if (qtnode->count <= 1)
+ return;
+
+ if (!maxdepth) {
+ S[0] += gwy_xlnx_int(qtnode->count);
+ return;
+ }
+
+ if (qtnode->count == 2) {
+ unsplit[0]++;
+ return;
+ }
+
+ S[0] += gwy_xlnx_int(qtnode->count);
+ S++;
+
+ // Half-scale entropies we estimate as averages of horizontal and vertical
+ // binning.
+ S[0] += quad_tree_node_half_scale_entropy(qtnode);
+ S++;
+
+ maxdepth--;
+ unsplit++;
+ for (i = 0; i < G_N_ELEMENTS(qtnode->u.children); i++) {
+ if ((child = qtnode->u.children[i]))
+ quad_tree_node_entropies_at_scales(child, maxdepth, S, unsplit);
+ }
+}
+
+static gdouble*
+quad_tree_entropies_at_scales(QuadTree *qtree, guint maxdepth)
+{
+ gdouble *S;
+ guint *unsplit;
+ guint i, n, npts;
+ gdouble Sscale;
+
+ if (!maxdepth)
+ maxdepth = qtree->maxdepth;
+
+ n = 2*maxdepth + 1;
+ S = g_new0(gdouble, n);
+ unsplit = g_new0(guint, maxdepth);
+ quad_tree_node_entropies_at_scales(qtree->root,
+ MIN(maxdepth, qtree->maxdepth),
+ S, unsplit);
+
+ for (i = 0; i < maxdepth; i++) {
+ if (unsplit[i])
+ add_estimated_unsplit_node_entropy(S + 2*i, 2*(maxdepth - i),
+ unsplit[i]);
+ }
+ g_free(unsplit);
+
+ npts = qtree->root->count;
+ Sscale = log(npts
+ *(qtree->max.x - qtree->min.x)*(qtree->max.y - qtree->min.y));
+ for (i = 0; i < n; i++)
+ S[i] = Sscale - i*G_LN2 - S[i]/npts;
+
+ return S;
+}
+
+static gdouble*
+calculate_entropy_2d_at_scales(GwyDataField *xfield,
+ GwyDataField *yfield,
+ guint *maxdiv,
+ gdouble *S)
+{
+ guint xres, yres, n, i;
+ gdouble *ecurve;
+ QuadTree *qtree;
+
+ xres = xfield->xres;
+ yres = xfield->yres;
+ n = xres*yres;
+
+ if (!*maxdiv) {
+ if (n >= 2)
+ *maxdiv = (guint)floor(1.5*log(n)/G_LN2 + 1e-12);
+ else
+ *maxdiv = 1;
+
+ /* We will run out of significant digits in coordinates after that. */
+ *maxdiv = MIN(*maxdiv, 50);
+ }
+
+ if (n < 2) {
+ ecurve = g_new(gdouble, *maxdiv+1);
+ for (i = 0; i <= *maxdiv; i++)
+ ecurve[i] = -G_MAXDOUBLE;
+ if (S)
+ *S = -G_MAXDOUBLE;
+ return ecurve;
+ }
+
+ qtree = quad_tree_new(xfield->data, yfield->data, n, *maxdiv);
+ ecurve = quad_tree_entropies_at_scales(qtree, *maxdiv);
+ if (S) {
+ if (qtree->degenerate)
+ *S = qtree->degenerateS;
+ else
+ *S = calculate_entropy_from_scaling(ecurve, 2*(*maxdiv));
+ }
+ quad_tree_free(qtree);
+
+ return ecurve;
+}
+
+/**
+ * gwy_data_field_get_entropy_2d_at_scales:
+ * @xfield: A data field containing the @x-coordinates.
+ * @yfield: A data field containing the @y-coordinates.
+ * @target_line: A data line to store the result to. It will be resampled to
+ * @maxdiv+1 items.
+ * @maxdiv: Maximum number of divisions of the value range. Pass zero to
+ * choose it automatically.
+ *
+ * Calculates estimates of entropy of two-dimensional point cloud at various
+ * scales.
+ *
+ * Returns: The best estimate, as gwy_data_field_get_entropy_2d().
+ *
+ * Since: 2.44
+ **/
+gdouble
+gwy_data_field_get_entropy_2d_at_scales(GwyDataField *xfield,
+ GwyDataField *yfield,
+ GwyDataLine *target_line,
+ gint maxdiv)
+{
+ GwySIUnit *lineunit;
+ guint umaxdiv = (maxdiv > 0 ? maxdiv/2 : 0);
+ gdouble *ecurve;
+ gdouble xmin, xmax, ymin, ymax, S = -G_MAXDOUBLE;
+ gint i;
+
+ g_return_val_if_fail(GWY_IS_DATA_FIELD(xfield), S);
+ g_return_val_if_fail(GWY_IS_DATA_FIELD(yfield), S);
+ g_return_val_if_fail(GWY_IS_DATA_LINE(target_line), S);
+ g_return_val_if_fail(xfield->xres == yfield->xres, S);
+ g_return_val_if_fail(xfield->yres == yfield->yres, S);
+
+ ecurve = calculate_entropy_2d_at_scales(xfield, yfield, &umaxdiv, &S);
+ maxdiv = maxdiv ? maxdiv : 2*umaxdiv + 1;
+ gwy_data_line_resample(target_line, maxdiv, GWY_INTERPOLATION_NONE);
+ target_line->real = maxdiv*G_LN2;
+ for (i = 0; i < maxdiv; i++)
+ target_line->data[maxdiv-1 - i] = ecurve[i];
+ g_free(ecurve);
+
+ gwy_data_field_get_min_max(xfield, &xmin, &xmax);
+ gwy_data_field_get_min_max(xfield, &ymin, &ymax);
+ if ((xmax > xmin) && (ymax > ymin))
+ target_line->off = (log((xmax - xmin)*(ymax - ymin))
+ - (maxdiv - 0.5)*G_LN2);
+
+ lineunit = gwy_data_line_get_si_unit_x(target_line);
+ gwy_si_unit_set_from_string(lineunit, NULL);
+ lineunit = gwy_data_line_get_si_unit_y(target_line);
+ gwy_si_unit_set_from_string(lineunit, NULL);
+
+ return S;
+}
+
+/**
+ * gwy_data_field_get_entropy_2d:
+ * @xfield: A data field containing the @x-coordinates.
+ * @yfield: A data field containing the @y-coordinates.
+ *
+ * Computes the entropy of a two-dimensional point cloud.
+ *
+ * Each pair of corresponding @xfield and @yfield pixels is assumed to
+ * represent the coordinates (@x, at y) of a point in plane. Hence they must have
+ * the same dimensions.
+ *
+ * Returns: The two-dimensional distribution entropy.
+ *
+ * Since: 2.44
+ **/
+gdouble
+gwy_data_field_get_entropy_2d(GwyDataField *xfield,
+ GwyDataField *yfield)
+{
+ gdouble *ecurve;
+ guint maxdiv = 0;
+ gdouble S = -G_MAXDOUBLE;
+
+ g_return_val_if_fail(GWY_IS_DATA_FIELD(xfield), S);
+ g_return_val_if_fail(GWY_IS_DATA_FIELD(yfield), S);
+ g_return_val_if_fail(xfield->xres == yfield->xres, S);
+ g_return_val_if_fail(xfield->yres == yfield->yres, S);
+
+ ecurve = calculate_entropy_2d_at_scales(xfield, yfield, &maxdiv, &S);
+ g_free(ecurve);
+
+ return S;
+}
+
+/* vim: set cin et ts=4 sw=4 cino=>1s,e0,n0,f0,{0,}0,^0,\:1s,=0,g1s,h0,t0,+1s,c3,(0,u0 : */
diff --git a/libprocess/stats-sum.c b/libprocess/stats-sum.c
new file mode 100644
index 0000000..e4f0c2b
--- /dev/null
+++ b/libprocess/stats-sum.c
@@ -0,0 +1,1516 @@
+/*
+ * @(#) $Id: stats-sum.c 19698 2017-05-03 20:18:10Z yeti-dn $
+ * Copyright (C) 2003-2017 David Necas (Yeti), Petr Klapetek.
+ * E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include <string.h>
+#include <libgwyddion/gwymacros.h>
+#include <libgwyddion/gwymath.h>
+#include <libprocess/datafield.h>
+#include <libprocess/stats.h>
+#include <libprocess/linestats.h>
+#include "gwyprocessinternal.h"
+
+/**
+ * square_area1:
+ * @z1: Z-value in first corner.
+ * @z2: Z-value in second corner.
+ * @z3: Z-value in third corner.
+ * @z4: Z-value in fourth corner.
+ * @q: One fourth of rectangle projected area (x-size * ysize).
+ *
+ * Calculates approximate area of a one square pixel.
+ *
+ * Returns: The area.
+ **/
+static inline gdouble
+square_area1(gdouble z1, gdouble z2, gdouble z3, gdouble z4,
+ gdouble q)
+{
+ gdouble c;
+
+ c = (z1 + z2 + z3 + z4)/4.0;
+ z1 -= c;
+ z2 -= c;
+ z3 -= c;
+ z4 -= c;
+
+ return (sqrt(1.0 + 2.0*(z1*z1 + z2*z2)/q)
+ + sqrt(1.0 + 2.0*(z2*z2 + z3*z3)/q)
+ + sqrt(1.0 + 2.0*(z3*z3 + z4*z4)/q)
+ + sqrt(1.0 + 2.0*(z4*z4 + z1*z1)/q));
+}
+
+/**
+ * square_area1w:
+ * @z1: Z-value in first corner.
+ * @z2: Z-value in second corner.
+ * @z3: Z-value in third corner.
+ * @z4: Z-value in fourth corner.
+ * @w1: Weight of first corner (0 or 1).
+ * @w2: Weight of second corner (0 or 1).
+ * @w3: Weight of third corner (0 or 1).
+ * @w4: Weight of fourth corner (0 or 1).
+ * @q: One fourth of rectangle projected area (x-size * ysize).
+ *
+ * Calculates approximate area of a one square pixel with some corners possibly
+ * missing.
+ *
+ * Returns: The area.
+ **/
+static inline gdouble
+square_area1w(gdouble z1, gdouble z2, gdouble z3, gdouble z4,
+ gint w1, gint w2, gint w3, gint w4,
+ gdouble q)
+{
+ gdouble c;
+
+ c = (z1 + z2 + z3 + z4)/4.0;
+ z1 -= c;
+ z2 -= c;
+ z3 -= c;
+ z4 -= c;
+
+ return ((w1 + w2)*sqrt(1.0 + 2.0*(z1*z1 + z2*z2)/q)
+ + (w2 + w3)*sqrt(1.0 + 2.0*(z2*z2 + z3*z3)/q)
+ + (w3 + w4)*sqrt(1.0 + 2.0*(z3*z3 + z4*z4)/q)
+ + (w4 + w1)*sqrt(1.0 + 2.0*(z4*z4 + z1*z1)/q))/2.0;
+}
+
+/**
+ * square_area2:
+ * @z1: Z-value in first corner.
+ * @z2: Z-value in second corner.
+ * @z3: Z-value in third corner.
+ * @z4: Z-value in fourth corner.
+ * @x: One fourth of square of rectangle width (x-size).
+ * @y: One fourth of square of rectangle height (y-size).
+ *
+ * Calculates approximate area of a one general rectangular pixel.
+ *
+ * Returns: The area.
+ **/
+static inline gdouble
+square_area2(gdouble z1, gdouble z2, gdouble z3, gdouble z4,
+ gdouble x, gdouble y)
+{
+ gdouble c;
+
+ c = (z1 + z2 + z3 + z4)/2.0;
+
+ return (sqrt(1.0 + (z1 - z2)*(z1 - z2)/x
+ + (z1 + z2 - c)*(z1 + z2 - c)/y)
+ + sqrt(1.0 + (z2 - z3)*(z2 - z3)/y
+ + (z2 + z3 - c)*(z2 + z3 - c)/x)
+ + sqrt(1.0 + (z3 - z4)*(z3 - z4)/x
+ + (z3 + z4 - c)*(z3 + z4 - c)/y)
+ + sqrt(1.0 + (z1 - z4)*(z1 - z4)/y
+ + (z1 + z4 - c)*(z1 + z4 - c)/x));
+}
+
+/**
+ * square_area2w:
+ * @z1: Z-value in first corner.
+ * @z2: Z-value in second corner.
+ * @z3: Z-value in third corner.
+ * @z4: Z-value in fourth corner.
+ * @w1: Weight of first corner (0 or 1).
+ * @w2: Weight of second corner (0 or 1).
+ * @w3: Weight of third corner (0 or 1).
+ * @w4: Weight of fourth corner (0 or 1).
+ * @x: One fourth of square of rectangle width (x-size).
+ * @y: One fourth of square of rectangle height (y-size).
+ *
+ * Calculates approximate area of a one general rectangular pixel with some
+ * corners possibly missing.
+ *
+ * Returns: The area.
+ **/
+static inline gdouble
+square_area2w(gdouble z1, gdouble z2, gdouble z3, gdouble z4,
+ gint w1, gint w2, gint w3, gint w4,
+ gdouble x, gdouble y)
+{
+ gdouble c;
+
+ c = (z1 + z2 + z3 + z4)/2.0;
+
+ return ((w1 + w2)*sqrt(1.0 + (z1 - z2)*(z1 - z2)/x
+ + (z1 + z2 - c)*(z1 + z2 - c)/y)
+ + (w2 + w3)*sqrt(1.0 + (z2 - z3)*(z2 - z3)/y
+ + (z2 + z3 - c)*(z2 + z3 - c)/x)
+ + (w3 + w4)*sqrt(1.0 + (z3 - z4)*(z3 - z4)/x
+ + (z3 + z4 - c)*(z3 + z4 - c)/y)
+ + (w4 + w1)*sqrt(1.0 + (z1 - z4)*(z1 - z4)/y
+ + (z1 + z4 - c)*(z1 + z4 - c)/x))/2.0;
+}
+
+/**
+ * stripe_area1:
+ * @n: The number of values in @r, @rr, @m.
+ * @stride: Stride in @r, @rr, @m.
+ * @r: Array of @n z-values of vertices, this row of vertices is considered
+ * inside.
+ * @rr: Array of @n z-values of vertices, this row of vertices is considered
+ * outside.
+ * @m: Mask for @r (@rr does not need mask since it has zero weight by
+ * definition), or %NULL to sum over all @r vertices.
+ * @mode: Masking mode.
+ * @q: One fourth of rectangle projected area (x-size * ysize).
+ *
+ * Calculates approximate area of a half-pixel stripe.
+ *
+ * Returns: The area.
+ **/
+static gdouble
+stripe_area1(gint n,
+ gint stride,
+ const gdouble *r,
+ const gdouble *rr,
+ const gdouble *m,
+ GwyMaskingType mode,
+ gdouble q)
+{
+ gdouble sum = 0.0;
+ gint j;
+
+ if (m && mode != GWY_MASK_IGNORE) {
+ if (mode == GWY_MASK_INCLUDE) {
+ for (j = 0; j < n-1; j++)
+ sum += square_area1w(r[j*stride], r[(j + 1)*stride],
+ rr[(j + 1)*stride], rr[j*stride],
+ m[j*stride] > 0.0, m[(j + 1)*stride] > 0.0,
+ 0, 0,
+ q);
+ }
+ else {
+ for (j = 0; j < n-1; j++)
+ sum += square_area1w(r[j*stride], r[(j + 1)*stride],
+ rr[(j + 1)*stride], rr[j*stride],
+ m[j*stride] < 1.0, m[(j + 1)*stride] < 1.0,
+ 0, 0,
+ q);
+ }
+ }
+ else {
+ for (j = 0; j < n-1; j++)
+ sum += square_area1w(r[j*stride], r[(j + 1)*stride],
+ rr[(j + 1)*stride], rr[j*stride],
+ 1, 1, 0, 0,
+ q);
+ }
+
+ return sum;
+}
+
+/**
+ * stripe_area2:
+ * @n: The number of values in @r, @rr, @m.
+ * @stride: Stride in @r, @rr, @m.
+ * @r: Array of @n z-values of vertices, this row of vertices is considered
+ * inside.
+ * @rr: Array of @n z-values of vertices, this row of vertices is considered
+ * outside.
+ * @m: Mask for @r (@rr does not need mask since it has zero weight by
+ * definition), or %NULL to sum over all @r vertices.
+ * @x: One fourth of square of rectangle width (x-size).
+ * @y: One fourth of square of rectangle height (y-size).
+ *
+ * Calculates approximate area of a half-pixel stripe.
+ *
+ * Returns: The area.
+ **/
+static gdouble
+stripe_area2(gint n,
+ gint stride,
+ const gdouble *r,
+ const gdouble *rr,
+ const gdouble *m,
+ GwyMaskingType mode,
+ gdouble x,
+ gdouble y)
+{
+ gdouble sum = 0.0;
+ gint j;
+
+ if (m && mode == GWY_MASK_INCLUDE) {
+ for (j = 0; j < n-1; j++)
+ sum += square_area2w(r[j*stride], r[(j + 1)*stride],
+ rr[(j + 1)*stride], rr[j*stride],
+ m[j*stride] > 0.0, m[(j + 1)*stride] > 0.0,
+ 0, 0,
+ x, y);
+ }
+ else if (m && mode == GWY_MASK_EXCLUDE) {
+ for (j = 0; j < n-1; j++)
+ sum += square_area2w(r[j*stride], r[(j + 1)*stride],
+ rr[(j + 1)*stride], rr[j*stride],
+ m[j*stride] < 1.0, m[(j + 1)*stride] < 1.0,
+ 0, 0,
+ x, y);
+ }
+ else {
+ for (j = 0; j < n-1; j++)
+ sum += square_area2w(r[j*stride], r[(j + 1)*stride],
+ rr[(j + 1)*stride], rr[j*stride],
+ 1, 1, 0, 0,
+ x, y);
+ }
+
+ return sum;
+}
+
+static gdouble
+calculate_surface_area(GwyDataField *dfield,
+ GwyDataField *mask,
+ GwyMaskingType mode,
+ gint col, gint row,
+ gint width, gint height)
+{
+ const gdouble *r, *m, *dataul, *maskul;
+ gint i, j, xres, yres, s;
+ gdouble x, y, q, sum = 0.0;
+
+ /* special cases */
+ if (!width || !height)
+ return sum;
+
+ xres = dfield->xres;
+ yres = dfield->yres;
+ x = dfield->xreal/dfield->xres;
+ y = dfield->yreal/dfield->yres;
+ q = x*y;
+ x = x*x;
+ y = y*y;
+ dataul = dfield->data + xres*row + col;
+
+ if (mask && mode != GWY_MASK_IGNORE) {
+ maskul = mask->data + xres*row + col;
+ if (fabs(log(x/y)) < 1e-7) {
+ /* Inside */
+ for (i = 0; i < height-1; i++) {
+ r = dataul + xres*i;
+ m = maskul + xres*i;
+ if (mode == GWY_MASK_INCLUDE) {
+ for (j = 0; j < width-1; j++)
+ sum += square_area1w(r[j], r[j+1],
+ r[j+xres+1], r[j+xres],
+ m[j] > 0.0, m[j+1] > 0.0,
+ m[j+xres+1] > 0.0, m[j+xres] > 0.0,
+ q);
+ }
+ else {
+ for (j = 0; j < width-1; j++)
+ sum += square_area1w(r[j], r[j+1],
+ r[j+xres+1], r[j+xres],
+ m[j] < 1.0, m[j+1] < 1.0,
+ m[j+xres+1] < 1.0, m[j+xres] < 1.0,
+ q);
+ }
+ }
+
+ /* Top row */
+ s = !(row == 0);
+ sum += stripe_area1(width, 1, dataul, dataul - s*xres,
+ maskul, mode, q);
+
+ /* Bottom row */
+ s = !(row + height == yres);
+ sum += stripe_area1(width, 1,
+ dataul + xres*(height-1),
+ dataul + xres*(height-1 + s),
+ maskul + xres*(height-1), mode, q);
+
+ /* Left column */
+ s = !(col == 0);
+ sum += stripe_area1(height, xres, dataul, dataul - s,
+ maskul, mode, q);
+ /* Right column */
+ s = !(col + width == xres);
+ sum += stripe_area1(height, xres,
+ dataul + width-1, dataul + width-1 + s,
+ maskul + width-1, mode, q);
+ }
+ else {
+ /* Inside */
+ for (i = 0; i < height-1; i++) {
+ r = dataul + xres*i;
+ m = maskul + xres*i;
+ if (mode == GWY_MASK_INCLUDE) {
+ for (j = 0; j < width-1; j++)
+ sum += square_area2w(r[j], r[j+1],
+ r[j+xres+1], r[j+xres],
+ m[j] > 0.0, m[j+1] > 0.0,
+ m[j+xres+1] > 0.0, m[j+xres] > 0.0,
+ x, y);
+ }
+ else {
+ for (j = 0; j < width-1; j++)
+ sum += square_area2w(r[j], r[j+1],
+ r[j+xres+1], r[j+xres],
+ m[j] < 1.0, m[j+1] < 1.0,
+ m[j+xres+1] < 1.0, m[j+xres] < 1.0,
+ x, y);
+ }
+ }
+
+ /* Top row */
+ s = !(row == 0);
+ sum += stripe_area2(width, 1, dataul, dataul - s*xres, maskul,
+ mode, x, y);
+
+ /* Bottom row */
+ s = !(row + height == yres);
+ sum += stripe_area2(width, 1,
+ dataul + xres*(height-1),
+ dataul + xres*(height-1 + s),
+ maskul + xres*(height-1),
+ mode, x, y);
+
+ /* Left column */
+ s = !(col == 0);
+ sum += stripe_area2(height, xres, dataul, dataul - s, maskul,
+ mode, y, x);
+
+ /* Right column */
+ s = !(col + width == xres);
+ sum += stripe_area2(height, xres,
+ dataul + width-1, dataul + width-1 + s,
+ maskul + width-1,
+ mode, y, x);
+ }
+
+ /* Just take the four corner quater-pixels as flat. */
+ if (mode == GWY_MASK_INCLUDE) {
+ if (maskul[0] > 0.0)
+ sum += 1.0;
+ if (maskul[width-1] > 0.0)
+ sum += 1.0;
+ if (maskul[xres*(height-1)] > 0.0)
+ sum += 1.0;
+ if (maskul[xres*(height-1) + width-1] > 0.0)
+ sum += 1.0;
+ }
+ else {
+ if (maskul[0] < 1.0)
+ sum += 1.0;
+ if (maskul[width-1] < 1.0)
+ sum += 1.0;
+ if (maskul[xres*(height-1)] < 1.0)
+ sum += 1.0;
+ if (maskul[xres*(height-1) + width-1] < 1.0)
+ sum += 1.0;
+ }
+ }
+ else {
+ if (fabs(log(x/y)) < 1e-7) {
+ /* Inside */
+ for (i = 0; i < height-1; i++) {
+ r = dataul + xres*i;
+ for (j = 0; j < width-1; j++)
+ sum += square_area1(r[j], r[j+1], r[j+xres+1], r[j+xres],
+ q);
+ }
+
+ /* Top row */
+ s = !(row == 0);
+ sum += stripe_area1(width, 1, dataul, dataul - s*xres,
+ NULL, GWY_MASK_IGNORE, q);
+
+ /* Bottom row */
+ s = !(row + height == yres);
+ sum += stripe_area1(width, 1,
+ dataul + xres*(height-1),
+ dataul + xres*(height-1 + s),
+ NULL, GWY_MASK_IGNORE, q);
+
+ /* Left column */
+ s = !(col == 0);
+ sum += stripe_area1(height, xres, dataul, dataul - s,
+ NULL, GWY_MASK_IGNORE, q);
+
+ /* Right column */
+ s = !(col + width == xres);
+ sum += stripe_area1(height, xres,
+ dataul + width-1, dataul + width-1 + s,
+ NULL, GWY_MASK_IGNORE, q);
+ }
+ else {
+ for (i = 0; i < height-1; i++) {
+ r = dataul + xres*i;
+ for (j = 0; j < width-1; j++)
+ sum += square_area2(r[j], r[j+1], r[j+xres+1], r[j+xres],
+ x, y);
+ }
+
+ /* Top row */
+ s = !(row == 0);
+ sum += stripe_area2(width, 1, dataul, dataul - s*xres, NULL,
+ GWY_MASK_IGNORE, x, y);
+
+ /* Bottom row */
+ s = !(row + height == yres);
+ sum += stripe_area2(width, 1,
+ dataul + xres*(height-1),
+ dataul + xres*(height-1 + s),
+ NULL,
+ GWY_MASK_IGNORE, x, y);
+
+ /* Left column */
+ s = !(col == 0);
+ sum += stripe_area2(height, xres, dataul, dataul - s, NULL,
+ GWY_MASK_IGNORE, y, x);
+
+ /* Right column */
+ s = !(col + width == xres);
+ sum += stripe_area2(height, xres,
+ dataul + width-1, dataul + width-1 + s, NULL,
+ GWY_MASK_IGNORE, y, x);
+ }
+
+ /* Just take the four corner quater-pixels as flat. */
+ sum += 4.0;
+ }
+
+ return sum*q/4;
+}
+
+/**
+ * gwy_data_field_get_surface_area:
+ * @data_field: A data field.
+ *
+ * Computes surface area of a data field.
+ *
+ * This quantity is cached.
+ *
+ * Returns: The surface area.
+ **/
+gdouble
+gwy_data_field_get_surface_area(GwyDataField *data_field)
+{
+ gdouble area = 0.0;
+
+ g_return_val_if_fail(GWY_IS_DATA_FIELD(data_field), area);
+
+ gwy_debug("%s", CTEST(data_field, ARE) ? "cache" : "lame");
+ if (CTEST(data_field, ARE))
+ return CVAL(data_field, ARE);
+
+ area = calculate_surface_area(data_field, NULL, GWY_MASK_IGNORE,
+ 0, 0, data_field->xres, data_field->yres);
+
+ CVAL(data_field, ARE) = area;
+ data_field->cached |= CBIT(ARE);
+
+ return area;
+}
+
+/**
+ * gwy_data_field_area_get_surface_area:
+ * @data_field: A data field.
+ * @mask: Mask specifying which values to take into account/exclude, or %NULL.
+ * @col: Upper-left column coordinate.
+ * @row: Upper-left row coordinate.
+ * @width: Area width (number of columns).
+ * @height: Area height (number of rows).
+ *
+ * Computes surface area of a rectangular part of a data field.
+ *
+ * This function is equivalent to calling
+ * @gwy_data_field_area_get_surface_area_mask() with masking mode
+ * %GWY_MASK_INCLUDE.
+ *
+ * Returns: The surface area.
+ **/
+gdouble
+gwy_data_field_area_get_surface_area(GwyDataField *data_field,
+ GwyDataField *mask,
+ gint col, gint row,
+ gint width, gint height)
+{
+ return gwy_data_field_area_get_surface_area_mask(data_field, mask,
+ GWY_MASK_INCLUDE,
+ col, row, width, height);
+}
+
+/**
+ * gwy_data_field_area_get_surface_area_mask:
+ * @data_field: A data field.
+ * @mask: Mask specifying which values to take into account/exclude, or %NULL.
+ * @mode: Masking mode to use. See the introduction for description of
+ * masking modes.
+ * @col: Upper-left column coordinate.
+ * @row: Upper-left row coordinate.
+ * @width: Area width (number of columns).
+ * @height: Area height (number of rows).
+ *
+ * Computes surface area of a rectangular part of a data field.
+ *
+ * This quantity makes sense only if the lateral dimensions and values of
+ * @data_field are the same physical quantities.
+ *
+ * Returns: The surface area.
+ *
+ * Since: 2.18
+ **/
+gdouble
+gwy_data_field_area_get_surface_area_mask(GwyDataField *data_field,
+ GwyDataField *mask,
+ GwyMaskingType mode,
+ gint col, gint row,
+ gint width, gint height)
+{
+ gdouble area = 0.0;
+
+ g_return_val_if_fail(GWY_IS_DATA_FIELD(data_field), area);
+ g_return_val_if_fail(!mask || (GWY_IS_DATA_FIELD(mask)
+ && mask->xres == data_field->xres
+ && mask->yres == data_field->yres), area);
+ g_return_val_if_fail(col >= 0 && row >= 0
+ && width >= 0 && height >= 0
+ && col + width <= data_field->xres
+ && row + height <= data_field->yres,
+ area);
+
+ /* The result is the same, but it can be cached. */
+ if ((!mask || mode == GWY_MASK_IGNORE)
+ && row == 0 && col == 0
+ && width == data_field->xres && height == data_field->yres)
+ return gwy_data_field_get_surface_area(data_field);
+
+ return calculate_surface_area(data_field, mask, mode,
+ col, row, width, height);
+}
+
+/**
+ * square_var1:
+ * @z1: Z-value in first corner.
+ * @z2: Z-value in second corner.
+ * @z3: Z-value in third corner.
+ * @z4: Z-value in fourth corner.
+ * @q: One fourth of rectangle projected var (x-size * ysize).
+ *
+ * Calculates approximate variation of a one square pixel.
+ *
+ * Returns: The variation.
+ **/
+static inline gdouble
+square_var1(gdouble z1, gdouble z2, gdouble z3, gdouble z4,
+ gdouble q)
+{
+ gdouble z12 = z1 - z2, z23 = z2 - z3, z34 = z3 - z4, z41 = z4 - z1;
+
+ return (sqrt((z12*z12 + z41*z41)/q)
+ + sqrt((z23*z23 + z12*z12)/q)
+ + sqrt((z34*z34 + z23*z23)/q)
+ + sqrt((z41*z41 + z34*z34)/q));
+}
+
+/**
+ * square_var1w:
+ * @z1: Z-value in first corner.
+ * @z2: Z-value in second corner.
+ * @z3: Z-value in third corner.
+ * @z4: Z-value in fourth corner.
+ * @w1: Weight of first corner (0 or 1).
+ * @w2: Weight of second corner (0 or 1).
+ * @w3: Weight of third corner (0 or 1).
+ * @w4: Weight of fourth corner (0 or 1).
+ * @q: One fourth of rectangle projected var (x-size * ysize).
+ *
+ * Calculates approximate variation of a one square pixel with some corners
+ * possibly missing.
+ *
+ * Returns: The variation.
+ **/
+static inline gdouble
+square_var1w(gdouble z1, gdouble z2, gdouble z3, gdouble z4,
+ gint w1, gint w2, gint w3, gint w4,
+ gdouble q)
+{
+ gdouble z12 = z1 - z2, z23 = z2 - z3, z34 = z3 - z4, z41 = z4 - z1;
+
+ return (w1*sqrt((z12*z12 + z41*z41)/q)
+ + w2*sqrt((z23*z23 + z12*z12)/q)
+ + w3*sqrt((z34*z34 + z23*z23)/q)
+ + w4*sqrt((z41*z41 + z34*z34)/q));
+}
+
+/**
+ * square_var2:
+ * @z1: Z-value in first corner.
+ * @z2: Z-value in second corner.
+ * @z3: Z-value in third corner.
+ * @z4: Z-value in fourth corner.
+ * @x: One fourth of square of rectangle width (x-size).
+ * @y: One fourth of square of rectangle height (y-size).
+ *
+ * Calculates approximate variation of a one general rectangular pixel.
+ *
+ * Returns: The variation.
+ **/
+static inline gdouble
+square_var2(gdouble z1, gdouble z2, gdouble z3, gdouble z4,
+ gdouble x, gdouble y)
+{
+ gdouble z12 = z1 - z2, z23 = z2 - z3, z34 = z3 - z4, z41 = z4 - z1;
+
+ return (sqrt(z12*z12/x + z41*z41/y)
+ + sqrt(z23*z23/y + z12*z12/x)
+ + sqrt(z34*z34/x + z23*z23/y)
+ + sqrt(z41*z41/y + z34*z34/x));
+}
+
+/**
+ * square_var2w:
+ * @z1: Z-value in first corner.
+ * @z2: Z-value in second corner.
+ * @z3: Z-value in third corner.
+ * @z4: Z-value in fourth corner.
+ * @w1: Weight of first corner (0 or 1).
+ * @w2: Weight of second corner (0 or 1).
+ * @w3: Weight of third corner (0 or 1).
+ * @w4: Weight of fourth corner (0 or 1).
+ * @x: One fourth of square of rectangle width (x-size).
+ * @y: One fourth of square of rectangle height (y-size).
+ *
+ * Calculates approximate variation of a one general rectangular pixel with
+ * some corners possibly missing.
+ *
+ * Returns: The variation.
+ **/
+static inline gdouble
+square_var2w(gdouble z1, gdouble z2, gdouble z3, gdouble z4,
+ gint w1, gint w2, gint w3, gint w4,
+ gdouble x, gdouble y)
+{
+ gdouble z12 = z1 - z2, z23 = z2 - z3, z34 = z3 - z4, z41 = z4 - z1;
+
+ return (w1*sqrt(z12*z12/x + z41*z41/y)
+ + w2*sqrt(z23*z23/y + z12*z12/x)
+ + w3*sqrt(z34*z34/x + z23*z23/y)
+ + w4*sqrt(z41*z41/y + z34*z34/x));
+}
+
+/**
+ * stripe_var1:
+ * @n: The number of values in @r, @rr, @m.
+ * @stride: Stride in @r, @rr, @m.
+ * @r: Array of @n z-values of vertices, this row of vertices is considered
+ * inside.
+ * @rr: Array of @n z-values of vertices, this row of vertices is considered
+ * outside.
+ * @m: Mask for @r (@rr does not need mask since it has zero weight by
+ * definition), or %NULL to sum over all @r vertices.
+ * @mode: Masking mode.
+ * @q: One fourth of rectangle projected var (x-size * ysize).
+ *
+ * Calculates approximate variation of a half-pixel stripe.
+ *
+ * Returns: The variation.
+ **/
+static gdouble
+stripe_var1(gint n,
+ gint stride,
+ const gdouble *r,
+ const gdouble *rr,
+ const gdouble *m,
+ GwyMaskingType mode,
+ gdouble q)
+{
+ gdouble sum = 0.0;
+ gint j;
+
+ if (m && mode != GWY_MASK_IGNORE) {
+ if (mode == GWY_MASK_INCLUDE) {
+ for (j = 0; j < n-1; j++)
+ sum += square_var1w(r[j*stride], r[(j + 1)*stride],
+ rr[(j + 1)*stride], rr[j*stride],
+ m[j*stride] > 0.0, m[(j + 1)*stride] > 0.0,
+ 0, 0,
+ q);
+ }
+ else {
+ for (j = 0; j < n-1; j++)
+ sum += square_var1w(r[j*stride], r[(j + 1)*stride],
+ rr[(j + 1)*stride], rr[j*stride],
+ m[j*stride] < 1.0, m[(j + 1)*stride] < 1.0,
+ 0, 0,
+ q);
+ }
+ }
+ else {
+ for (j = 0; j < n-1; j++)
+ sum += square_var1w(r[j*stride], r[(j + 1)*stride],
+ rr[(j + 1)*stride], rr[j*stride],
+ 1, 1, 0, 0,
+ q);
+ }
+
+ return sum;
+}
+
+/**
+ * stripe_var2:
+ * @n: The number of values in @r, @rr, @m.
+ * @stride: Stride in @r, @rr, @m.
+ * @r: Array of @n z-values of vertices, this row of vertices is considered
+ * inside.
+ * @rr: Array of @n z-values of vertices, this row of vertices is considered
+ * outside.
+ * @m: Mask for @r (@rr does not need mask since it has zero weight by
+ * definition), or %NULL to sum over all @r vertices.
+ * @x: One fourth of square of rectangle width (x-size).
+ * @y: One fourth of square of rectangle height (y-size).
+ *
+ * Calculates approximate variation of a half-pixel stripe.
+ *
+ * Returns: The variation.
+ **/
+static gdouble
+stripe_var2(gint n,
+ gint stride,
+ const gdouble *r,
+ const gdouble *rr,
+ const gdouble *m,
+ GwyMaskingType mode,
+ gdouble x,
+ gdouble y)
+{
+ gdouble sum = 0.0;
+ gint j;
+
+ if (m && mode == GWY_MASK_INCLUDE) {
+ for (j = 0; j < n-1; j++)
+ sum += square_var2w(r[j*stride], r[(j + 1)*stride],
+ rr[(j + 1)*stride], rr[j*stride],
+ m[j*stride] > 0.0, m[(j + 1)*stride] > 0.0,
+ 0, 0,
+ x, y);
+ }
+ else if (m && mode == GWY_MASK_EXCLUDE) {
+ for (j = 0; j < n-1; j++)
+ sum += square_var2w(r[j*stride], r[(j + 1)*stride],
+ rr[(j + 1)*stride], rr[j*stride],
+ m[j*stride] < 1.0, m[(j + 1)*stride] < 1.0,
+ 0, 0,
+ x, y);
+ }
+ else {
+ for (j = 0; j < n-1; j++)
+ sum += square_var2w(r[j*stride], r[(j + 1)*stride],
+ rr[(j + 1)*stride], rr[j*stride],
+ 1, 1, 0, 0,
+ x, y);
+ }
+
+ return sum;
+}
+
+static gdouble
+calculate_variation(GwyDataField *dfield,
+ GwyDataField *mask,
+ GwyMaskingType mode,
+ gint col, gint row,
+ gint width, gint height)
+{
+ const gdouble *r, *m, *dataul, *maskul;
+ gint i, j, xres, yres, s;
+ gdouble x, y, q, sum = 0.0;
+
+ /* special cases */
+ if (!width || !height)
+ return sum;
+
+ xres = dfield->xres;
+ yres = dfield->yres;
+ x = dfield->xreal/dfield->xres;
+ y = dfield->yreal/dfield->yres;
+ q = x*y;
+ x = x*x;
+ y = y*y;
+ dataul = dfield->data + xres*row + col;
+
+ if (mask && mode != GWY_MASK_IGNORE) {
+ maskul = mask->data + xres*row + col;
+ if (fabs(log(x/y)) < 1e-7) {
+ /* Inside */
+ for (i = 0; i < height-1; i++) {
+ r = dataul + xres*i;
+ m = maskul + xres*i;
+ if (mode == GWY_MASK_INCLUDE) {
+ for (j = 0; j < width-1; j++)
+ sum += square_var1w(r[j], r[j+1],
+ r[j+xres+1], r[j+xres],
+ m[j] > 0.0, m[j+1] > 0.0,
+ m[j+xres+1] > 0.0, m[j+xres] > 0.0,
+ q);
+ }
+ else {
+ for (j = 0; j < width-1; j++)
+ sum += square_var1w(r[j], r[j+1],
+ r[j+xres+1], r[j+xres],
+ m[j] < 1.0, m[j+1] < 1.0,
+ m[j+xres+1] < 1.0, m[j+xres] < 1.0,
+ q);
+ }
+ }
+
+ /* Top row */
+ s = !(row == 0);
+ sum += stripe_var1(width, 1, dataul, dataul - s*xres,
+ maskul, mode, q);
+
+ /* Bottom row */
+ s = !(row + height == yres);
+ sum += stripe_var1(width, 1,
+ dataul + xres*(height-1),
+ dataul + xres*(height-1 + s),
+ maskul + xres*(height-1), mode, q);
+
+ /* Left column */
+ s = !(col == 0);
+ sum += stripe_var1(height, xres, dataul, dataul - s,
+ maskul, mode, q);
+ /* Right column */
+ s = !(col + width == xres);
+ sum += stripe_var1(height, xres,
+ dataul + width-1, dataul + width-1 + s,
+ maskul + width-1, mode, q);
+ }
+ else {
+ /* Inside */
+ for (i = 0; i < height-1; i++) {
+ r = dataul + xres*i;
+ m = maskul + xres*i;
+ if (mode == GWY_MASK_INCLUDE) {
+ for (j = 0; j < width-1; j++)
+ sum += square_var2w(r[j], r[j+1],
+ r[j+xres+1], r[j+xres],
+ m[j] > 0.0, m[j+1] > 0.0,
+ m[j+xres+1] > 0.0, m[j+xres] > 0.0,
+ x, y);
+ }
+ else {
+ for (j = 0; j < width-1; j++)
+ sum += square_var2w(r[j], r[j+1],
+ r[j+xres+1], r[j+xres],
+ m[j] < 1.0, m[j+1] < 1.0,
+ m[j+xres+1] < 1.0, m[j+xres] < 1.0,
+ x, y);
+ }
+ }
+
+ /* Top row */
+ s = !(row == 0);
+ sum += stripe_var2(width, 1, dataul, dataul - s*xres, maskul,
+ mode, x, y);
+
+ /* Bottom row */
+ s = !(row + height == yres);
+ sum += stripe_var2(width, 1,
+ dataul + xres*(height-1),
+ dataul + xres*(height-1 + s),
+ maskul + xres*(height-1),
+ mode, x, y);
+
+ /* Left column */
+ s = !(col == 0);
+ sum += stripe_var2(height, xres, dataul, dataul - s, maskul,
+ mode, y, x);
+
+ /* Right column */
+ s = !(col + width == xres);
+ sum += stripe_var2(height, xres,
+ dataul + width-1, dataul + width-1 + s,
+ maskul + width-1,
+ mode, y, x);
+ }
+ }
+ else {
+ if (fabs(log(x/y)) < 1e-7) {
+ /* Inside */
+ for (i = 0; i < height-1; i++) {
+ r = dataul + xres*i;
+ for (j = 0; j < width-1; j++)
+ sum += square_var1(r[j], r[j+1], r[j+xres+1], r[j+xres],
+ q);
+ }
+
+ /* Top row */
+ s = !(row == 0);
+ sum += stripe_var1(width, 1, dataul, dataul - s*xres,
+ NULL, GWY_MASK_IGNORE, q);
+
+ /* Bottom row */
+ s = !(row + height == yres);
+ sum += stripe_var1(width, 1,
+ dataul + xres*(height-1),
+ dataul + xres*(height-1 + s),
+ NULL, GWY_MASK_IGNORE, q);
+
+ /* Left column */
+ s = !(col == 0);
+ sum += stripe_var1(height, xres, dataul, dataul - s,
+ NULL, GWY_MASK_IGNORE, q);
+
+ /* Right column */
+ s = !(col + width == xres);
+ sum += stripe_var1(height, xres,
+ dataul + width-1, dataul + width-1 + s,
+ NULL, GWY_MASK_IGNORE, q);
+ }
+ else {
+ for (i = 0; i < height-1; i++) {
+ r = dataul + xres*i;
+ for (j = 0; j < width-1; j++)
+ sum += square_var2(r[j], r[j+1], r[j+xres+1], r[j+xres],
+ x, y);
+ }
+
+ /* Top row */
+ s = !(row == 0);
+ sum += stripe_var2(width, 1, dataul, dataul - s*xres, NULL,
+ GWY_MASK_IGNORE, x, y);
+
+ /* Bottom row */
+ s = !(row + height == yres);
+ sum += stripe_var2(width, 1,
+ dataul + xres*(height-1),
+ dataul + xres*(height-1 + s),
+ NULL,
+ GWY_MASK_IGNORE, x, y);
+
+ /* Left column */
+ s = !(col == 0);
+ sum += stripe_var2(height, xres, dataul, dataul - s, NULL,
+ GWY_MASK_IGNORE, y, x);
+
+ /* Right column */
+ s = !(col + width == xres);
+ sum += stripe_var2(height, xres,
+ dataul + width-1, dataul + width-1 + s, NULL,
+ GWY_MASK_IGNORE, y, x);
+ }
+ }
+
+ return sum*q/4;
+}
+
+/**
+ * gwy_data_field_get_variation:
+ * @data_field: A data field.
+ *
+ * Computes the total variation of a data field.
+ *
+ * See gwy_data_field_area_get_variation() for the definition.
+ *
+ * This quantity is cached.
+ *
+ * Returns: The variation.
+ *
+ * Since: 2.38
+ **/
+gdouble
+gwy_data_field_get_variation(GwyDataField *data_field)
+{
+ gdouble var = 0.0;
+
+ g_return_val_if_fail(GWY_IS_DATA_FIELD(data_field), var);
+
+ gwy_debug("%s", CTEST(data_field, VAR) ? "cache" : "lame");
+ if (CTEST(data_field, VAR))
+ return CVAL(data_field, VAR);
+
+ var = calculate_variation(data_field, NULL, GWY_MASK_IGNORE,
+ 0, 0, data_field->xres, data_field->yres);
+
+ CVAL(data_field, VAR) = var;
+ data_field->cached |= CBIT(VAR);
+
+ return var;
+}
+
+/**
+ * gwy_data_field_area_get_variation:
+ * @data_field: A data field.
+ * @mask: Mask specifying which values to take into account/exclude, or %NULL.
+ * @mode: Masking mode to use. See the introduction for description of
+ * masking modes.
+ * @col: Upper-left column coordinate.
+ * @row: Upper-left row coordinate.
+ * @width: Area width (number of columns).
+ * @height: Area height (number of rows).
+ *
+ * Computes the total variation of a rectangular part of a data field.
+ *
+ * The total variation is estimated as the integral of the absolute value of
+ * local gradient.
+ *
+ * This quantity has the somewhat odd units of value unit times lateral unit.
+ * It can be envisioned as follows. If the surface has just two height levels
+ * (upper and lower planes) then the quantity is the length of the boundary
+ * between the upper and lower part, multiplied by the step height. If the
+ * surface is piece-wise constant, then the variation is the step height
+ * integrated along the boundaries between the constant parts. Therefore, for
+ * non-fractal surfaces it scales with the linear dimension of the image, not
+ * with its area, despite being an area integral.
+ *
+ * Returns: The variation.
+ *
+ * Since: 2.38
+ **/
+gdouble
+gwy_data_field_area_get_variation(GwyDataField *data_field,
+ GwyDataField *mask,
+ GwyMaskingType mode,
+ gint col, gint row,
+ gint width, gint height)
+{
+ gdouble var = 0.0;
+
+ g_return_val_if_fail(GWY_IS_DATA_FIELD(data_field), var);
+ g_return_val_if_fail(!mask || (GWY_IS_DATA_FIELD(mask)
+ && mask->xres == data_field->xres
+ && mask->yres == data_field->yres), var);
+ g_return_val_if_fail(col >= 0 && row >= 0
+ && width >= 0 && height >= 0
+ && col + width <= data_field->xres
+ && row + height <= data_field->yres,
+ var);
+
+ /* The result is the same, but it can be cached. */
+ if ((!mask || mode == GWY_MASK_IGNORE)
+ && row == 0 && col == 0
+ && width == data_field->xres && height == data_field->yres)
+ return gwy_data_field_get_variation(data_field);
+
+ return calculate_variation(data_field, mask, mode,
+ col, row, width, height);
+}
+
+/**
+ * square_volume:
+ * @z1: Z-value in first corner.
+ * @z2: Z-value in second corner.
+ * @z3: Z-value in third corner.
+ * @z4: Z-value in fourth corner.
+ *
+ * Calculates approximate volume of a one square pixel.
+ *
+ * Returns: The volume.
+ **/
+static inline gdouble
+square_volume(gdouble z1, gdouble z2, gdouble z3, gdouble z4)
+{
+ gdouble c;
+
+ c = (z1 + z2 + z3 + z4)/4.0;
+
+ return c;
+}
+
+/**
+ * square_volumew:
+ * @z1: Z-value in first corner.
+ * @z2: Z-value in second corner.
+ * @z3: Z-value in third corner.
+ * @z4: Z-value in fourth corner.
+ * @w1: Weight of first corner (0 or 1).
+ * @w2: Weight of second corner (0 or 1).
+ * @w3: Weight of third corner (0 or 1).
+ * @w4: Weight of fourth corner (0 or 1).
+ *
+ * Calculates approximate volume of a one square pixel with some corners
+ * possibly missing.
+ *
+ * Returns: The volume.
+ **/
+static inline gdouble
+square_volumew(gdouble z1, gdouble z2, gdouble z3, gdouble z4,
+ gint w1, gint w2, gint w3, gint w4)
+{
+ gdouble c;
+
+ c = (z1 + z2 + z3 + z4)/4.0;
+
+ return (w1*(3.0*z1 + z2 + z4 + c)
+ + w2*(3.0*z2 + z1 + z3 + c)
+ + w3*(3.0*z3 + z2 + z4 + c)
+ + w4*(3.0*z4 + z3 + z1 + c))/24.0;
+}
+
+/**
+ * stripe_volume:
+ * @n: The number of values in @r, @rr, @m.
+ * @stride: Stride in @r, @rr, @m.
+ * @r: Array of @n z-values of vertices, this row of vertices is considered
+ * inside.
+ * @rr: Array of @n z-values of vertices, this row of vertices is considered
+ * outside.
+ * @m: Mask for @r (@rr does not need mask since it has zero weight by
+ * definition), or %NULL to sum over all @r vertices.
+ *
+ * Calculates approximate volume of a half-pixel stripe.
+ *
+ * Returns: The volume.
+ **/
+static gdouble
+stripe_volume(gint n,
+ gint stride,
+ const gdouble *r,
+ const gdouble *rr,
+ const gdouble *m)
+{
+ gdouble sum = 0.0;
+ gint j;
+
+ if (m) {
+ for (j = 0; j < n-1; j++)
+ sum += square_volumew(r[j*stride], r[(j + 1)*stride],
+ rr[(j + 1)*stride], rr[j*stride],
+ m[j*stride] > 0.0, m[(j + 1)*stride] > 0.0,
+ 0, 0);
+ }
+ else {
+ for (j = 0; j < n-1; j++)
+ sum += square_volumew(r[j*stride], r[(j + 1)*stride],
+ rr[(j + 1)*stride], rr[j*stride],
+ 1, 1, 0, 0);
+ }
+
+ return sum;
+}
+
+/**
+ * stripe_volumeb:
+ * @n: The number of values in @r, @rr, @m.
+ * @stride: Stride in @r, @rr, @m.
+ * @r: Array of @n z-values of vertices, this row of vertices is considered
+ * inside.
+ * @rr: Array of @n z-values of vertices, this row of vertices is considered
+ * outside.
+ * @b: Array of @n z-values of basis, this row of vertices is considered
+ * inside.
+ * @br: Array of @n z-values of basis, this row of vertices is considered
+ * outside.
+ * @m: Mask for @r (@rr does not need mask since it has zero weight by
+ * definition), or %NULL to sum over all @r vertices.
+ *
+ * Calculates approximate volume of a half-pixel stripe, taken from basis.
+ *
+ * Returns: The volume.
+ **/
+static gdouble
+stripe_volumeb(gint n,
+ gint stride,
+ const gdouble *r,
+ const gdouble *rr,
+ const gdouble *b,
+ const gdouble *br,
+ const gdouble *m)
+{
+ gdouble sum = 0.0;
+ gint j;
+
+ if (m) {
+ for (j = 0; j < n-1; j++)
+ sum += square_volumew(r[j*stride] - b[j*stride],
+ r[(j + 1)*stride] - b[(j + 1)*stride],
+ rr[(j + 1)*stride] - br[(j + 1)*stride],
+ rr[j*stride] - br[j*stride],
+ m[j*stride] > 0.0,
+ m[(j + 1)*stride] > 0.0,
+ 0, 0);
+ }
+ else {
+ for (j = 0; j < n-1; j++)
+ sum += square_volumew(r[j*stride] - b[j*stride],
+ r[(j + 1)*stride] - b[(j + 1)*stride],
+ rr[(j + 1)*stride] - br[(j + 1)*stride],
+ rr[j*stride] - br[j*stride],
+ 1, 1, 0, 0);
+ }
+
+ return sum;
+}
+
+static gdouble
+calculate_volume(GwyDataField *dfield,
+ GwyDataField *basis,
+ GwyDataField *mask,
+ gint col, gint row,
+ gint width, gint height)
+{
+ const gdouble *r, *m, *b, *dataul, *maskul, *basisul;
+ gint i, j, xres, yres, s;
+ gdouble sum = 0.0;
+
+ /* special cases */
+ if (!width || !height)
+ return sum;
+
+ xres = dfield->xres;
+ yres = dfield->yres;
+ dataul = dfield->data + xres*row + col;
+
+ if (mask) {
+ maskul = mask->data + xres*row + col;
+ if (!basis) {
+ /* Inside */
+ for (i = 0; i < height-1; i++) {
+ r = dataul + xres*i;
+ m = maskul + xres*i;
+ for (j = 0; j < width-1; j++)
+ sum += square_volumew(r[j], r[j+1],
+ r[j+xres+1], r[j+xres],
+ m[j] > 0.0, m[j+1] > 0.0,
+ m[j+xres+1] > 0.0, m[j+xres] > 0.0);
+ }
+
+ /* Top row */
+ s = !(row == 0);
+ sum += stripe_volume(width, 1, dataul, dataul - s*xres, maskul);
+
+ /* Bottom row */
+ s = !(row + height == yres);
+ sum += stripe_volume(width, 1,
+ dataul + xres*(height-1),
+ dataul + xres*(height-1 + s),
+ maskul + xres*(height-1));
+
+ /* Left column */
+ s = !(col == 0);
+ sum += stripe_volume(height, xres, dataul, dataul - s, maskul);
+
+ /* Right column */
+ s = !(col + width == xres);
+ sum += stripe_volume(height, xres,
+ dataul + width-1, dataul + width-1 + s,
+ maskul + width-1);
+
+ /* Just take the four corner quater-pixels as flat. */
+ if (maskul[0])
+ sum += dataul[0]/4.0;
+ if (maskul[width-1])
+ sum += dataul[width-1]/4.0;
+ if (maskul[xres*(height-1)])
+ sum += dataul[xres*(height-1)]/4.0;
+ if (maskul[xres*(height-1) + width-1])
+ sum += dataul[xres*(height-1) + width-1]/4.0;
+ }
+ else {
+ basisul = basis->data + xres*row + col;
+
+ /* Inside */
+ for (i = 0; i < height-1; i++) {
+ r = dataul + xres*i;
+ m = maskul + xres*i;
+ b = basisul + xres*i;
+ for (j = 0; j < width-1; j++)
+ sum += square_volumew(r[j] - b[j],
+ r[j+1] - b[j+1],
+ r[j+xres+1] - b[j+xres+1],
+ r[j+xres] - b[j+xres],
+ m[j] > 0.0, m[j+1] > 0.0,
+ m[j+xres+1] > 0.0, m[j+xres] > 0.0);
+ }
+
+ /* Top row */
+ s = !(row == 0);
+ sum += stripe_volumeb(width, 1,
+ dataul, dataul - s*xres,
+ basisul, basisul - s*xres,
+ maskul);
+
+ /* Bottom row */
+ s = !(row + height == yres);
+ sum += stripe_volumeb(width, 1,
+ dataul + xres*(height-1),
+ dataul + xres*(height-1 + s),
+ basisul + xres*(height-1),
+ basisul + xres*(height-1 + s),
+ maskul + xres*(height-1));
+
+ /* Left column */
+ s = !(col == 0);
+ sum += stripe_volumeb(height, xres,
+ dataul, dataul - s,
+ basisul, basisul - s,
+ maskul);
+
+ /* Right column */
+ s = !(col + width == xres);
+ sum += stripe_volumeb(height, xres,
+ dataul + width-1, dataul + width-1 + s,
+ basisul + width-1, basisul + width-1 + s,
+ maskul + width-1);
+
+ /* Just take the four corner quater-pixels as flat. */
+ if (maskul[0])
+ sum += (dataul[0] - basisul[0])/4.0;
+ if (maskul[width-1])
+ sum += (dataul[width-1] - basisul[width-1])/4.0;
+ if (maskul[xres*(height-1)])
+ sum += (dataul[xres*(height-1)] - basisul[xres*(height-1)])/4.0;
+ if (maskul[xres*(height-1) + width-1])
+ sum += (dataul[xres*(height-1) + width-1]
+ - basisul[xres*(height-1) + width-1])/4.0;
+ }
+ }
+ else {
+ if (!basis) {
+ /* Inside */
+ for (i = 0; i < height-1; i++) {
+ r = dataul + xres*i;
+ for (j = 0; j < width-1; j++)
+ sum += square_volume(r[j], r[j+1], r[j+xres+1], r[j+xres]);
+ }
+
+ /* Top row */
+ s = !(row == 0);
+ sum += stripe_volume(width, 1, dataul, dataul - s*xres, NULL);
+
+ /* Bottom row */
+ s = !(row + height == yres);
+ sum += stripe_volume(width, 1,
+ dataul + xres*(height-1),
+ dataul + xres*(height-1 + s),
+ NULL);
+
+ /* Left column */
+ s = !(col == 0);
+ sum += stripe_volume(height, xres, dataul, dataul - s, NULL);
+
+ /* Right column */
+ s = !(col + width == xres);
+ sum += stripe_volume(height, xres,
+ dataul + width-1, dataul + width-1 + s,
+ NULL);
+
+ /* Just take the four corner quater-pixels as flat. */
+ sum += dataul[0]/4.0;
+ sum += dataul[width-1]/4.0;
+ sum += dataul[xres*(height-1)]/4.0;
+ sum += dataul[xres*(height-1) + width-1]/4.0;
+ }
+ else {
+ basisul = basis->data + xres*row + col;
+
+ /* Inside */
+ for (i = 0; i < height-1; i++) {
+ r = dataul + xres*i;
+ b = basisul + xres*i;
+ for (j = 0; j < width-1; j++)
+ sum += square_volume(r[j] - b[j],
+ r[j+1] - b[j+1],
+ r[j+xres+1] - b[j+xres+1],
+ r[j+xres] - b[j+xres]);
+ }
+
+ /* Top row */
+ s = !(row == 0);
+ sum += stripe_volumeb(width, 1,
+ dataul, dataul - s*xres,
+ basisul, basisul - s*xres,
+ NULL);
+
+ /* Bottom row */
+ s = !(row + height == yres);
+ sum += stripe_volumeb(width, 1,
+ dataul + xres*(height-1),
+ dataul + xres*(height-1 + s),
+ basisul + xres*(height-1),
+ basisul + xres*(height-1 + s),
+ NULL);
+
+ /* Left column */
+ s = !(col == 0);
+ sum += stripe_volumeb(height, xres,
+ dataul, dataul - s,
+ basisul, basisul - s,
+ NULL);
+
+ /* Right column */
+ s = !(col + width == xres);
+ sum += stripe_volumeb(height, xres,
+ dataul + width-1, dataul + width-1 + s,
+ basisul + width-1, basisul + width-1 + s,
+ NULL);
+
+ /* Just take the four corner quater-pixels as flat. */
+ sum += (dataul[0] - basisul[0])/4.0;
+ sum += (dataul[width-1] - basisul[width-1])/4.0;
+ sum += (dataul[xres*(height-1)] - basisul[xres*(height-1)])/4.0;
+ sum += (dataul[xres*(height-1) + width-1]
+ - basisul[xres*(height-1) + width-1])/4.0;
+ }
+ }
+
+ return sum* dfield->xreal/dfield->xres * dfield->yreal/dfield->yres;
+}
+
+/* Don't define gwy_data_field_get_volume() without mask and basis, it would
+ * just be a complicate way to calculate gwy_data_field_get_sum() */
+
+/**
+ * gwy_data_field_area_get_volume:
+ * @data_field: A data field.
+ * @basis: The basis or background for volume calculation if not %NULL.
+ * The height of each vertex is then the difference between
+ * @data_field value and @basis value. Value %NULL is the same
+ * as passing all zeroes for the basis.
+ * @mask: Mask specifying which values to take into account/exclude, or %NULL.
+ * @col: Upper-left column coordinate.
+ * @row: Upper-left row coordinate.
+ * @width: Area width (number of columns).
+ * @height: Area height (number of rows).
+ *
+ * Computes volume of a rectangular part of a data field.
+ *
+ * Returns: The volume.
+ *
+ * Since: 2.3
+ **/
+gdouble
+gwy_data_field_area_get_volume(GwyDataField *data_field,
+ GwyDataField *basis,
+ GwyDataField *mask,
+ gint col, gint row,
+ gint width, gint height)
+{
+ gdouble vol = 0.0;
+
+ g_return_val_if_fail(GWY_IS_DATA_FIELD(data_field), vol);
+ g_return_val_if_fail(!basis || (GWY_IS_DATA_FIELD(basis)
+ && basis->xres == data_field->xres
+ && basis->yres == data_field->yres), vol);
+ g_return_val_if_fail(!mask || (GWY_IS_DATA_FIELD(mask)
+ && mask->xres == data_field->xres
+ && mask->yres == data_field->yres), vol);
+ g_return_val_if_fail(col >= 0 && row >= 0
+ && width >= 0 && height >= 0
+ && col + width <= data_field->xres
+ && row + height <= data_field->yres,
+ vol);
+
+ return calculate_volume(data_field, basis, mask, col, row, width, height);
+}
+
+/* vim: set cin et ts=4 sw=4 cino=>1s,e0,n0,f0,{0,}0,^0,\:1s,=0,g1s,h0,t0,+1s,c3,(0,u0 : */
diff --git a/libprocess/stats.c b/libprocess/stats.c
index 2530dba..9a00bb1 100644
--- a/libprocess/stats.c
+++ b/libprocess/stats.c
@@ -1,6 +1,6 @@
/*
- * @(#) $Id: stats.c 19216 2016-11-09 10:39:06Z yeti-dn $
- * Copyright (C) 2003-2009 David Necas (Yeti), Petr Klapetek.
+ * @(#) $Id: stats.c 19788 2017-05-22 12:59:28Z yeti-dn $
+ * Copyright (C) 2003-2017 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
* This program is free software; you can redistribute it and/or modify
@@ -19,13 +19,7 @@
* Boston, MA 02110-1301, USA.
*/
-#include "config.h"
#include <string.h>
-
-#ifdef HAVE_FFTW3
-#include <fftw3.h>
-#endif
-
#include <libgwyddion/gwymacros.h>
#include <libgwyddion/gwymath.h>
#include <libprocess/datafield.h>
@@ -33,66 +27,10 @@
#include <libprocess/stats.h>
#include <libprocess/linestats.h>
#include <libprocess/grains.h>
-#include <libprocess/inttrans.h>
-#include <libprocess/simplefft.h>
#include "gwyprocessinternal.h"
-#include "wrappers.h"
typedef gdouble (*LineStatFunc)(GwyDataLine *dline);
-typedef struct _BinTreeNode BinTreeNode;
-typedef struct _QuadTreeNode QuadTreeNode;
-
-struct _BinTreeNode {
- /* This optimally uses memory on 64bit architectures where pt and
- * children have the same size (16 bytes). */
- union {
- /* The at most two points inside for non-max-depth leaves. */
- struct {
- gdouble a;
- gdouble b;
- } pt;
- /* Children for non-max-depth non-leaves. */
- BinTreeNode *children[2];
- } u;
- /* Always set; for max-depth leaves it is the only meaningful field. */
- guint count;
-};
-
-typedef struct {
- gdouble min;
- gdouble max;
- BinTreeNode *root;
- guint maxdepth;
- gboolean degenerate;
- gdouble degenerateS;
-} BinTree;
-
-struct _QuadTreeNode {
- /* This optimally uses memory on 64bit architectures where pt and
- * children have the same size (32 bytes). */
- union {
- /* The at most two points inside for non-max-depth leaves. */
- struct {
- GwyXY a;
- GwyXY b;
- } pt;
- /* Children for non-max-depth non-leaves. */
- QuadTreeNode *children[4];
- } u;
- /* Always set; for max-depth leaves it is the only meaningful field. */
- guint count;
-};
-
-typedef struct {
- GwyXY min;
- GwyXY max;
- QuadTreeNode *root;
- guint maxdepth;
- gboolean degenerate;
- gdouble degenerateS;
-} QuadTree;
-
/**
* gwy_data_field_get_max:
* @data_field: A data field.
@@ -522,22 +460,6 @@ gwy_data_field_area_get_min_max_mask(GwyDataField *data_field,
*max = max1;
}
-void
-_gwy_data_field_get_min_max(GwyDataField *field,
- GwyDataField *mask,
- GwyMaskingType mode,
- const GwyFieldPart *fpart,
- G_GNUC_UNUSED gpointer params,
- gdouble *results)
-{
- gwy_data_field_area_get_min_max_mask(field, mask, mode,
- fpart ? fpart->col : 0,
- fpart ? fpart->row : 0,
- fpart ? fpart->width : field->xres,
- fpart ? fpart->height : field->yres,
- results, results + 1);
-}
-
/**
* gwy_data_field_get_sum:
* @data_field: A data field.
@@ -1379,7 +1301,7 @@ gwy_data_field_area_get_stats_mask(GwyDataField *dfield,
/**
* gwy_data_field_area_count_in_range:
* @data_field: A data field.
- * @mask: Mask specifying which values to take into account/exclude, or %NULL.
+ * @mask: Mask specifying which values to take into account, or %NULL.
* @col: Upper-left column coordinate.
* @row: Upper-left row coordinate.
* @width: Area width (number of columns).
@@ -1478,7 +1400,7 @@ gwy_data_field_area_count_in_range(GwyDataField *data_field,
/**
* gwy_data_field_area_dh:
* @data_field: A data field.
- * @mask: Mask specifying which values to take into account/exclude, or %NULL.
+ * @mask: Mask specifying which values to take into account, or %NULL.
* @target_line: A data line to store the distribution to. It will be
* resampled to requested width.
* @col: Upper-left column coordinate.
@@ -1501,25 +1423,28 @@ gwy_data_field_area_dh(GwyDataField *data_field,
GwySIUnit *fieldunit, *lineunit, *rhounit;
gdouble min, max;
const gdouble *drow, *mrow;
- gint i, j, k;
+ gint xres, yres, i, j;
+ guint *counts;
guint nn;
g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
+ xres = data_field->xres;
+ yres = data_field->yres;
g_return_if_fail(!mask || (GWY_IS_DATA_FIELD(mask)
- && mask->xres == data_field->xres
- && mask->yres == data_field->yres));
+ && mask->xres == xres
+ && mask->yres == yres));
g_return_if_fail(GWY_IS_DATA_LINE(target_line));
g_return_if_fail(col >= 0 && row >= 0
&& width >= 1 && height >= 1
- && col + width <= data_field->xres
- && row + height <= data_field->yres);
+ && col + width <= xres
+ && row + height <= yres);
if (mask) {
nn = 0;
for (i = 0; i < height; i++) {
- mrow = mask->data + (i + row)*mask->xres + col;
+ mrow = mask->data + (i + row)*xres + col;
for (j = 0; j < width; j++) {
- if (mrow[j])
+ if (mrow[j] > 0.0)
nn++;
}
}
@@ -1533,7 +1458,6 @@ gwy_data_field_area_dh(GwyDataField *data_field,
}
gwy_data_line_resample(target_line, nstats, GWY_INTERPOLATION_NONE);
- gwy_data_line_clear(target_line);
gwy_data_field_area_get_min_max(data_field, nn ? mask : NULL,
col, row, width, height,
&min, &max);
@@ -1546,7 +1470,13 @@ gwy_data_field_area_dh(GwyDataField *data_field,
gwy_si_unit_power(lineunit, -1, rhounit);
/* Handle border cases */
+ if (!nn) {
+ gwy_data_line_clear(target_line);
+ gwy_data_line_set_real(target_line, min ? max : 1.0);
+ return;
+ }
if (min == max) {
+ gwy_data_line_clear(target_line);
gwy_data_line_set_real(target_line, min ? max : 1.0);
target_line->data[0] = nstats/gwy_data_line_get_real(target_line);
return;
@@ -1555,42 +1485,33 @@ gwy_data_field_area_dh(GwyDataField *data_field,
/* Calculate height distribution */
gwy_data_line_set_real(target_line, max - min);
gwy_data_line_set_offset(target_line, min);
+ counts = g_new(guint, nstats);
+
if (mask) {
+ gdouble *values = g_new(gdouble, nn);
+
+ nn = 0;
for (i = 0; i < height; i++) {
- drow = data_field->data + (i + row)*data_field->xres + col;
- mrow = mask->data + (i + row)*mask->xres + col;
+ drow = data_field->data + (i + row)*xres + col;
+ mrow = mask->data + (i + row)*xres + col;
for (j = 0; j < width; j++) {
- if (mrow[j]) {
- k = (gint)((drow[j] - min)/(max - min)*nstats);
- /* Fix rounding errors */
- if (G_UNLIKELY(k >= nstats))
- k = nstats-1;
- else if (G_UNLIKELY(k < 0))
- k = 0;
-
- target_line->data[k] += 1;
- }
+ if (mrow[j] > 0.0)
+ values[nn++] = drow[j];
}
}
+ nn = gwy_math_histogram(values, nn, min, max, nstats, counts);
+ g_free(values);
}
else {
- for (i = 0; i < height; i++) {
- drow = data_field->data + (i + row)*data_field->xres + col;
-
- for (j = 0; j < width; j++) {
- k = (gint)((drow[j] - min)/(max - min)*nstats);
- /* Fix rounding errors */
- if (G_UNLIKELY(k >= nstats))
- k = nstats-1;
- else if (G_UNLIKELY(k < 0))
- k = 0;
-
- target_line->data[k] += 1;
- }
- }
+ nn = gwy_math_histogram(data_field->data, nn,
+ min, max, nstats, counts);
}
+ for (i = 0; i < nstats; i++)
+ target_line->data[i] = counts[i];
+ g_free(counts);
+
/* Normalize integral to 1 */
gwy_data_line_multiply(target_line, nstats/(max - min)/MAX(nn, 1));
}
@@ -1619,7 +1540,7 @@ gwy_data_field_dh(GwyDataField *data_field,
/**
* gwy_data_field_area_cdh:
* @data_field: A data field.
- * @mask: Mask specifying which values to take into account/exclude, or %NULL.
+ * @mask: Mask specifying which values to take into account, or %NULL.
* @target_line: A data line to store the distribution to. It will be
* resampled to requested width.
* @col: Upper-left column coordinate.
@@ -1647,6 +1568,7 @@ gwy_data_field_area_cdh(GwyDataField *data_field,
nstats);
gwy_data_line_cumulate(target_line);
gwy_data_line_multiply(target_line, gwy_data_line_itor(target_line, 1));
+ target_line->data[target_line->res-1] = 1.0; /* Fix rounding errors. */
/* Update units after integration */
lineunit = gwy_data_line_get_si_unit_x(target_line);
@@ -1676,8 +1598,9 @@ gwy_data_field_cdh(GwyDataField *data_field,
}
/**
- * gwy_data_field_area_da:
+ * gwy_data_field_area_da_mask:
* @data_field: A data field.
+ * @mask: Mask specifying which values to take into account, or %NULL.
* @target_line: A data line to store the distribution to. It will be
* resampled to requested width.
* @col: Upper-left column coordinate.
@@ -1688,96 +1611,153 @@ gwy_data_field_cdh(GwyDataField *data_field,
* @nstats: The number of samples to take on the distribution function. If
* nonpositive, a suitable resolution is determined automatically.
*
- * Calculates distribution of slopes in a rectangular part of data field.
+ * Calculates distribution of slopes in a rectangular part of data field, with
+ * masking.
+ *
+ * Since: 2.49
**/
void
-gwy_data_field_area_da(GwyDataField *data_field,
- GwyDataLine *target_line,
- gint col, gint row,
- gint width, gint height,
- GwyOrientation orientation,
- gint nstats)
+gwy_data_field_area_da_mask(GwyDataField *data_field,
+ GwyDataField *mask,
+ GwyDataLine *target_line,
+ gint col, gint row,
+ gint width, gint height,
+ GwyOrientation orientation,
+ gint nstats)
{
GwySIUnit *lineunit, *rhounit;
- GwyDataField *der;
- const gdouble *drow;
- gdouble *derrow;
- gdouble q;
- gint xres, yres, i, j, size;
+ const gdouble *drow, *mrow;
+ gdouble *values;
+ guint *counts;
+ gdouble min, max, q;
+ gint xres, yres, i, j, nn;
g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
xres = data_field->xres;
yres = data_field->yres;
- size = (orientation == GWY_ORIENTATION_HORIZONTAL) ? width : height;
g_return_if_fail(col >= 0 && row >= 0
&& width >= 1 && height >= 1
- && size >= 2
&& col + width <= xres
&& row + height <= yres);
+ g_return_if_fail(!mask || (GWY_IS_DATA_FIELD(mask)
+ && mask->xres == xres
+ && mask->yres == yres));
+ g_return_if_fail(GWY_IS_DATA_LINE(target_line));
- /* Create a temporary data field from horizontal/vertical derivations
- * and then simply use gwy_data_field_dh().
- * XXX: Should not such a thing exist as a public method? */
- der = gwy_data_field_new(width, height,
- data_field->xreal*width/xres,
- data_field->yreal*height/yres,
- FALSE);
+ if (mask) {
+ nn = 0;
+ if (orientation == GWY_ORIENTATION_VERTICAL) {
+ for (i = 0; i < height-1; i++) {
+ mrow = mask->data + (i + row)*xres + col;
+ for (j = 0; j < width; j++) {
+ if (mrow[j] > 0.0 && mrow[j+xres] > 0.0)
+ nn++;
+ }
+ }
+ }
+ else {
+ for (i = 0; i < height; i++) {
+ mrow = mask->data + (i + row)*xres + col;
+ for (j = 0; j < width-1; j++) {
+ if (mrow[j] > 0.0 && mrow[j+1] > 0.0)
+ nn++;
+ }
+ }
+ }
+ }
+ else {
+ if (orientation == GWY_ORIENTATION_VERTICAL)
+ nn = width*(height - 1);
+ else
+ nn = (width - 1)*height;
+ }
- switch (orientation) {
- case GWY_ORIENTATION_HORIZONTAL:
- q = xres/data_field->xreal;
- /* Instead of testing border columns in each gwy_data_field_get_xder()
- * call, special-case them explicitely */
- for (i = 0; i < height; i++) {
- drow = data_field->data + (i + row)*xres + col;
- derrow = der->data + i*width;
+ if (nstats < 1) {
+ nstats = floor(3.49*cbrt(nn) + 0.5);
+ nstats = MAX(nstats, 2);
+ }
- derrow[0] = drow[1] - drow[0];
- for (j = 1; j < width-1; j++)
- derrow[j] = (drow[j+1] - drow[j-1])/2.0;
- if (width > 1)
- derrow[j] = drow[width-1] - drow[width-2];
- }
- break;
+ gwy_data_line_resample(target_line, nstats, GWY_INTERPOLATION_NONE);
- case GWY_ORIENTATION_VERTICAL:
+ if (orientation == GWY_ORIENTATION_VERTICAL)
q = yres/data_field->yreal;
- /* Instead of testing border rows in each gwy_data_field_get_yder()
- * call, special-case them explicitely */
- drow = data_field->data + row*xres + col;
- derrow = der->data;
- for (j = 0; j < width; j++)
- derrow[j] = *(drow + j+xres) - *(drow + j);
-
- for (i = 1; i < height-1; i++) {
- drow = data_field->data + (i + row)*xres + col;
- derrow = der->data + i*width;
+ else
+ q = xres/data_field->xreal;
- for (j = 0; j < width; j++)
- derrow[j] = (*(drow + j+xres) - *(drow + j-xres))/2.0;
+ values = g_new(gdouble, MAX(nn, 1));
+ nn = 0;
+ if (mask) {
+ if (orientation == GWY_ORIENTATION_VERTICAL) {
+ for (i = 0; i < height-1; i++) {
+ mrow = mask->data + (i + row)*xres + col;
+ drow = data_field->data + (i + row)*xres + col;
+ for (j = 0; j < width; j++) {
+ if (mrow[j] > 0.0 && mrow[j+xres] > 0.0)
+ values[nn++] = q*(drow[j+xres] - drow[j]);
+ }
+ }
}
-
- if (height > 1) {
- drow = data_field->data + (row + height-1)*xres + col;
- derrow = der->data + (height-1)*width;
- for (j = 0; j < width; j++)
- derrow[j] = *(drow + j) - *(drow + j-xres);
+ else {
+ for (i = 0; i < height; i++) {
+ mrow = mask->data + (i + row)*xres + col;
+ drow = data_field->data + (i + row)*xres + col;
+ for (j = 0; j < width-1; j++) {
+ if (mrow[j] > 0.0 && mrow[j+1] > 0.0)
+ values[nn++] = q*(drow[j+1] - drow[j]);
+ }
+ }
}
- break;
+ }
+ else {
+ if (orientation == GWY_ORIENTATION_VERTICAL) {
+ for (i = 0; i < height-1; i++) {
+ drow = data_field->data + (i + row)*xres + col;
+ for (j = 0; j < width; j++)
+ values[nn++] = q*(drow[j+xres] - drow[j]);
+ }
+ }
+ else {
+ for (i = 0; i < height; i++) {
+ drow = data_field->data + (i + row)*xres + col;
+ for (j = 0; j < width-1; j++)
+ values[nn++] = q*(drow[j+1] - drow[j]);
+ }
+ }
+ }
- default:
- g_assert_not_reached();
- break;
+ min = max = values[0];
+ for (i = 1; i < nn; i++) {
+ if (values[i] < min)
+ min = values[i];
+ if (values[i] > max)
+ max = values[i];
+ }
+
+ /* Handle border cases */
+ if (!nn) {
+ gwy_data_line_clear(target_line);
+ gwy_data_line_set_real(target_line, 1.0);
+ gwy_data_line_set_offset(target_line, -0.5);
+ return;
+ }
+ if (min == max) {
+ gwy_data_line_clear(target_line);
+ gwy_data_line_set_real(target_line, min ? max : 1.0);
+ target_line->data[0] = nstats/gwy_data_line_get_real(target_line);
+ return;
}
- gwy_data_field_dh(der, target_line, nstats);
- /* Fix derivation normalization. At the same time we have to multiply
- * target_line values with inverse factor to keep integral intact */
- gwy_data_line_set_real(target_line, q*gwy_data_line_get_real(target_line));
- gwy_data_line_set_offset(target_line,
- q*gwy_data_line_get_offset(target_line));
- gwy_data_line_multiply(target_line, 1.0/q);
- g_object_unref(der);
+ counts = g_new(guint, nstats);
+ nn = gwy_math_histogram(values, nn, min, max, nstats, counts);
+ g_free(values);
+
+ for (i = 0; i < nstats; i++)
+ target_line->data[i] = counts[i];
+ g_free(counts);
+
+ gwy_data_line_set_real(target_line, max - min);
+ gwy_data_line_set_offset(target_line, min);
+ gwy_data_line_multiply(target_line, nstats/(max - min)/nn);
/* Set proper units */
lineunit = gwy_data_line_get_si_unit_x(target_line);
@@ -1789,6 +1769,33 @@ gwy_data_field_area_da(GwyDataField *data_field,
}
/**
+ * gwy_data_field_area_da:
+ * @data_field: A data field.
+ * @target_line: A data line to store the distribution to. It will be
+ * resampled to requested width.
+ * @col: Upper-left column coordinate.
+ * @row: Upper-left row coordinate.
+ * @width: Area width (number of columns).
+ * @height: Area height (number of rows).
+ * @orientation: Orientation to compute the slope distribution in.
+ * @nstats: The number of samples to take on the distribution function. If
+ * nonpositive, a suitable resolution is determined automatically.
+ *
+ * Calculates distribution of slopes in a rectangular part of data field.
+ **/
+void
+gwy_data_field_area_da(GwyDataField *data_field,
+ GwyDataLine *target_line,
+ gint col, gint row,
+ gint width, gint height,
+ GwyOrientation orientation,
+ gint nstats)
+{
+ gwy_data_field_area_da_mask(data_field, NULL, target_line,
+ col, row, width, height, orientation, nstats);
+}
+
+/**
* gwy_data_field_da:
* @data_field: A data field.
* @target_line: A data line to store the distribution to. It will be
@@ -1805,7 +1812,6 @@ gwy_data_field_da(GwyDataField *data_field,
GwyOrientation orientation,
gint nstats)
{
- g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
gwy_data_field_area_da(data_field, target_line,
0, 0, data_field->xres, data_field->yres,
orientation, nstats);
@@ -1835,13 +1841,45 @@ gwy_data_field_area_cda(GwyDataField *data_field,
GwyOrientation orientation,
gint nstats)
{
+ gwy_data_field_area_cda_mask(data_field, NULL, target_line,
+ col, row, width, height, orientation, nstats);
+}
+
+/**
+ * gwy_data_field_area_cda_mask:
+ * @data_field: A data field.
+ * @target_line: A data line to store the distribution to. It will be
+ * resampled to requested width.
+ * @col: Upper-left column coordinate.
+ * @row: Upper-left row coordinate.
+ * @width: Area width (number of columns).
+ * @height: Area height (number of rows).
+ * @orientation: Orientation to compute the slope distribution in.
+ * @nstats: The number of samples to take on the distribution function. If
+ * nonpositive, a suitable resolution is determined automatically.
+ *
+ * Calculates cumulative distribution of slopes in a rectangular part of data
+ * field, with masking.
+ *
+ * Since: 2.49
+ **/
+void
+gwy_data_field_area_cda_mask(GwyDataField *data_field,
+ GwyDataField *mask,
+ GwyDataLine *target_line,
+ gint col, gint row,
+ gint width, gint height,
+ GwyOrientation orientation,
+ gint nstats)
+{
GwySIUnit *lineunit, *rhounit;
- gwy_data_field_area_da(data_field, target_line,
- col, row, width, height,
- orientation, nstats);
+ gwy_data_field_area_da_mask(data_field, mask, target_line,
+ col, row, width, height,
+ orientation, nstats);
gwy_data_line_cumulate(target_line);
gwy_data_line_multiply(target_line, gwy_data_line_itor(target_line, 1));
+ target_line->data[target_line->res-1] = 1.0; /* Fix rounding errors. */
/* Update units after integration */
lineunit = gwy_data_line_get_si_unit_x(target_line);
@@ -1872,233 +1910,8 @@ gwy_data_field_cda(GwyDataField *data_field,
orientation, nstats);
}
-#ifdef HAVE_FFTW3
-typedef void (*GwyFFTAreaFunc)(fftw_plan plan,
- GwyDataLine *din,
- GwyDataLine *dout,
- GwyDataLine *target_line);
-
-static inline void
-do_fft_acf(fftw_plan plan,
- GwyDataLine *din,
- GwyDataLine *dout,
- GwyDataLine *target_line)
-{
- gdouble *in, *out;
- gint j, width, res;
-
- width = target_line->res;
- res = din->res;
- in = din->data;
- out = dout->data;
-
- gwy_clear(in + width, res - width);
-
- fftw_execute(plan);
- in[0] = out[0]*out[0];
- for (j = 1; j < (res + 1)/2; j++)
- in[j] = in[res-j] = out[j]*out[j] + out[res-j]*out[res-j];
- if (!(res % 2))
- in[res/2] = out[res/2]*out[res/2];
-
- fftw_execute(plan);
- for (j = 0; j < width; j++)
- target_line->data[j] += out[j]/(width - j);
-}
-
-static inline void
-do_fft_hhcf(fftw_plan plan,
- GwyDataLine *din,
- GwyDataLine *dout,
- GwyDataLine *target_line)
-{
- gdouble *in, *out;
- gdouble sum;
- gint j, width, res;
-
- width = target_line->res;
- res = din->res;
- in = din->data;
- out = dout->data;
-
- sum = 0.0;
- for (j = 0; j < width; j++) {
- sum += in[j]*in[j] + in[width-1-j]*in[width-1-j];
- target_line->data[width-1-j] += sum*res/(j+1);
- }
-
- gwy_clear(in + width, res - width);
-
- fftw_execute(plan);
- in[0] = out[0]*out[0];
- for (j = 1; j < (res + 1)/2; j++)
- in[j] = in[res-j] = out[j]*out[j] + out[res-j]*out[res-j];
- if (!(res % 2))
- in[res/2] = out[res/2]*out[res/2];
-
- fftw_execute(plan);
- for (j = 0; j < width; j++)
- target_line->data[j] -= 2*out[j]/(width - j);
-}
-
-static void
-gwy_data_field_area_func_fft(GwyDataField *data_field,
- GwyDataLine *target_line,
- GwyFFTAreaFunc func,
- gint col, gint row,
- gint width, gint height,
- GwyOrientation orientation,
- GwyInterpolationType interpolation,
- gint nstats)
-{
- GwyDataLine *din, *dout;
- fftw_plan plan;
- gdouble *in, *out, *drow, *dcol;
- gint i, j, xres, yres, res = 0;
- gdouble avg;
-
- g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
- g_return_if_fail(GWY_IS_DATA_LINE(target_line));
- xres = data_field->xres;
- yres = data_field->yres;
- g_return_if_fail(col >= 0 && row >= 0
- && width >= 1 && height >= 1
- && col + width <= xres
- && row + height <= yres);
- g_return_if_fail(orientation == GWY_ORIENTATION_HORIZONTAL
- || orientation == GWY_ORIENTATION_VERTICAL);
-
- switch (orientation) {
- case GWY_ORIENTATION_HORIZONTAL:
- res = gwy_fft_find_nice_size(2*xres);
- gwy_data_line_resample(target_line, width, GWY_INTERPOLATION_NONE);
- break;
-
- case GWY_ORIENTATION_VERTICAL:
- res = gwy_fft_find_nice_size(2*yres);
- gwy_data_line_resample(target_line, height, GWY_INTERPOLATION_NONE);
- break;
- }
- gwy_data_line_clear(target_line);
- gwy_data_line_set_offset(target_line, 0.0);
-
- din = gwy_data_line_new(res, 1.0, FALSE);
- dout = gwy_data_line_new(res, 1.0, FALSE);
- in = gwy_data_line_get_data(din);
- out = gwy_data_line_get_data(dout);
- plan = fftw_plan_r2r_1d(res, in, out, FFTW_R2HC, _GWY_FFTW_PATIENCE);
- g_return_if_fail(plan);
-
- switch (orientation) {
- case GWY_ORIENTATION_HORIZONTAL:
- for (i = 0; i < height; i++) {
- drow = data_field->data + (i + row)*xres + col;
- avg = gwy_data_field_area_get_avg(data_field, NULL,
- col, row+i, width, 1);
- for (j = 0; j < width; j++)
- in[j] = drow[j] - avg;
- func(plan, din, dout, target_line);
- }
- gwy_data_line_set_real(target_line,
- gwy_data_field_jtor(data_field, width));
- gwy_data_line_multiply(target_line, 1.0/(res*height));
- break;
-
- case GWY_ORIENTATION_VERTICAL:
- for (i = 0; i < width; i++) {
- dcol = data_field->data + row*xres + (i + col);
- avg = gwy_data_field_area_get_avg(data_field, NULL,
- col+i, row, 1, height);
- for (j = 0; j < height; j++)
- in[j] = dcol[j*xres] - avg;
- func(plan, din, dout, target_line);
- }
- gwy_data_line_set_real(target_line,
- gwy_data_field_itor(data_field, height));
- gwy_data_line_multiply(target_line, 1.0/(res*width));
- break;
- }
-
- fftw_destroy_plan(plan);
- g_object_unref(din);
- g_object_unref(dout);
-
- if (nstats > 1)
- gwy_data_line_resample(target_line, nstats, interpolation);
-}
-#else /* HAVE_FFTW3 */
-typedef void (*GwyLameAreaFunc)(GwyDataLine *source,
- GwyDataLine *target);
-
-static void
-gwy_data_field_area_func_lame(GwyDataField *data_field,
- GwyDataLine *target_line,
- GwyLameAreaFunc func,
- gint col, gint row,
- gint width, gint height,
- GwyOrientation orientation,
- GwyInterpolationType interpolation,
- gint nstats)
-{
- GwyDataLine *data_line, *tmp_line;
- gint i, j, xres, yres, size;
-
- g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
- g_return_if_fail(GWY_IS_DATA_LINE(target_line));
- xres = data_field->xres;
- yres = data_field->yres;
- g_return_if_fail(col >= 0 && row >= 0
- && width >= 1 && height >= 1
- && col + width <= xres
- && row + height <= yres);
- g_return_if_fail(orientation == GWY_ORIENTATION_HORIZONTAL
- || orientation == GWY_ORIENTATION_VERTICAL);
-
- size = (orientation == GWY_ORIENTATION_HORIZONTAL) ? width : height;
- data_line = gwy_data_line_new(size, 1.0, FALSE);
- tmp_line = gwy_data_line_new(size, 1.0, FALSE);
- gwy_data_line_resample(target_line, size, GWY_INTERPOLATION_NONE);
- gwy_data_line_clear(target_line);
- gwy_data_line_set_offset(target_line, 0.0);
-
- switch (orientation) {
- case GWY_ORIENTATION_HORIZONTAL:
- for (i = 0; i < height; i++) {
- gwy_data_field_get_row_part(data_field, data_line, row+i,
- col, col+width);
- func(data_line, tmp_line);
- for (j = 0; j < width; j++)
- target_line->data[j] += tmp_line->data[j];
- }
- gwy_data_line_set_real(target_line,
- gwy_data_field_jtor(data_field, width));
- gwy_data_line_multiply(target_line, 1.0/height);
- break;
-
- case GWY_ORIENTATION_VERTICAL:
- for (i = 0; i < width; i++) {
- gwy_data_field_get_column_part(data_field, data_line, col+i,
- row, row+height);
- func(data_line, tmp_line);
- for (j = 0; j < height; j++)
- target_line->data[j] += tmp_line->data[j];
- }
- gwy_data_line_set_real(target_line,
- gwy_data_field_itor(data_field, height));
- gwy_data_line_multiply(target_line, 1.0/width);
- break;
- }
-
- g_object_unref(data_line);
- g_object_unref(tmp_line);
-
- if (nstats > 1)
- gwy_data_line_resample(target_line, nstats, interpolation);
-}
-#endif /* HAVE_FFTW3 */
-
/**
- * gwy_data_field_area_acf:
+ * gwy_data_field_area_minkowski_volume:
* @data_field: A data field.
* @target_line: A data line to store the distribution to. It will be
* resampled to requested width.
@@ -2106,3412 +1919,254 @@ gwy_data_field_area_func_lame(GwyDataField *data_field,
* @row: Upper-left row coordinate.
* @width: Area width (number of columns).
* @height: Area height (number of rows).
- * @orientation: Orientation of lines (ACF is simply averaged over the
- * other orientation).
- * @interpolation: Interpolation to use when @nstats is given and requires
- * resampling.
* @nstats: The number of samples to take on the distribution function. If
- * nonpositive, @width (@height) is used.
- *
- * Calculates one-dimensional autocorrelation function of a rectangular part of
- * a data field.
- **/
-void
-gwy_data_field_area_acf(GwyDataField *data_field,
- GwyDataLine *target_line,
- gint col, gint row,
- gint width, gint height,
- GwyOrientation orientation,
- GwyInterpolationType interpolation,
- gint nstats)
-{
- GwySIUnit *fieldunit, *lineunit;
-
-#ifdef HAVE_FFTW3
- gwy_data_field_area_func_fft(data_field, target_line,
- &do_fft_acf,
- col, row, width, height,
- orientation, interpolation, nstats);
-#else
- gwy_data_field_area_func_lame(data_field, target_line,
- &gwy_data_line_acf,
- col, row, width, height,
- orientation, interpolation, nstats);
-#endif /* HAVE_FFTW3 */
-
- /* Set proper units */
- fieldunit = gwy_data_field_get_si_unit_xy(data_field);
- lineunit = gwy_data_line_get_si_unit_x(target_line);
- gwy_serializable_clone(G_OBJECT(fieldunit), G_OBJECT(lineunit));
- lineunit = gwy_data_line_get_si_unit_y(target_line);
- gwy_si_unit_power(gwy_data_field_get_si_unit_z(data_field), 2, lineunit);
-}
-
-/**
- * gwy_data_field_acf:
- * @data_field: A data field.
- * @target_line: A data line to store the distribution to. It will be
- * resampled to requested width.
- * @orientation: Orientation of lines (ACF is simply averaged over the
- * other orientation).
- * @interpolation: Interpolation to use when @nstats is given and requires
- * resampling.
- * @nstats: The number of samples to take on the distribution function. If
- * nonpositive, data field width (height) is used.
- *
- * Calculates one-dimensional autocorrelation function of a data field.
- **/
-void
-gwy_data_field_acf(GwyDataField *data_field,
- GwyDataLine *target_line,
- GwyOrientation orientation,
- GwyInterpolationType interpolation,
- gint nstats)
-{
- g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
- gwy_data_field_area_acf(data_field, target_line,
- 0, 0, data_field->xres, data_field->yres,
- orientation, interpolation, nstats);
-}
-
-/**
- * gwy_data_field_area_hhcf:
- * @data_field: A data field.
- * @target_line: A data line to store the distribution to. It will be
- * resampled to requested width.
- * @col: Upper-left column coordinate.
- * @row: Upper-left row coordinate.
- * @width: Area width (number of columns).
- * @height: Area height (number of rows).
- * @orientation: Orientation of lines (HHCF is simply averaged over the
- * other orientation).
- * @interpolation: Interpolation to use when @nstats is given and requires
- * resampling.
- * @nstats: The number of samples to take on the distribution function. If
- * nonpositive, @width (@height) is used.
- *
- * Calculates one-dimensional autocorrelation function of a rectangular part of
- * a data field.
- **/
-void
-gwy_data_field_area_hhcf(GwyDataField *data_field,
- GwyDataLine *target_line,
- gint col, gint row,
- gint width, gint height,
- GwyOrientation orientation,
- GwyInterpolationType interpolation,
- gint nstats)
-{
- GwySIUnit *fieldunit, *lineunit;
-
-#ifdef HAVE_FFTW3
- gwy_data_field_area_func_fft(data_field, target_line, &do_fft_hhcf,
- col, row, width, height,
- orientation, interpolation, nstats);
-#else
- gwy_data_field_area_func_lame(data_field, target_line,
- &gwy_data_line_hhcf,
- col, row, width, height,
- orientation, interpolation, nstats);
-#endif /* HAVE_FFTW3 */
-
- /* Set proper units */
- fieldunit = gwy_data_field_get_si_unit_xy(data_field);
- lineunit = gwy_data_line_get_si_unit_x(target_line);
- gwy_serializable_clone(G_OBJECT(fieldunit), G_OBJECT(lineunit));
- lineunit = gwy_data_line_get_si_unit_y(target_line);
- gwy_si_unit_power(gwy_data_field_get_si_unit_z(data_field), 2, lineunit);
-}
-
-/**
- * gwy_data_field_hhcf:
- * @data_field: A data field.
- * @target_line: A data line to store the distribution to. It will be
- * resampled to requested width.
- * @orientation: Orientation of lines (HHCF is simply averaged over the
- * other orientation).
- * @interpolation: Interpolation to use when @nstats is given and requires
- * resampling.
- * @nstats: The number of samples to take on the distribution function. If
- * nonpositive, data field width (height) is used.
- *
- * Calculates one-dimensional autocorrelation function of a data field.
- **/
-void
-gwy_data_field_hhcf(GwyDataField *data_field,
- GwyDataLine *target_line,
- GwyOrientation orientation,
- GwyInterpolationType interpolation,
- gint nstats)
-{
- g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
- gwy_data_field_area_hhcf(data_field, target_line,
- 0, 0, data_field->xres, data_field->yres,
- orientation, interpolation, nstats);
-}
-
-/**
- * gwy_data_field_area_psdf:
- * @data_field: A data field.
- * @target_line: A data line to store the distribution to. It will be
- * resampled to requested width.
- * @col: Upper-left column coordinate.
- * @row: Upper-left row coordinate.
- * @width: Area width (number of columns).
- * @height: Area height (number of rows).
- * @orientation: Orientation of lines (PSDF is simply averaged over the
- * other orientation).
- * @interpolation: Interpolation to use when @nstats is given and requires
- * resampling.
- * @windowing: Windowing type to use.
- * @nstats: The number of samples to take on the distribution function. If
- * nonpositive, data field width (height) is used.
- *
- * Calculates one-dimensional power spectrum density function of a rectangular
- * part of a data field.
- **/
-void
-gwy_data_field_area_psdf(GwyDataField *data_field,
- GwyDataLine *target_line,
- gint col, gint row,
- gint width, gint height,
- GwyOrientation orientation,
- GwyInterpolationType interpolation,
- GwyWindowingType windowing,
- gint nstats)
-{
- GwyDataField *re_field, *im_field;
- GwySIUnit *xyunit, *zunit, *lineunit;
- gdouble *re, *im, *target;
- gint i, j, xres, yres, size;
-
- g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
- g_return_if_fail(GWY_IS_DATA_LINE(target_line));
- xres = data_field->xres;
- yres = data_field->yres;
- size = (orientation == GWY_ORIENTATION_HORIZONTAL) ? width : height;
- g_return_if_fail(col >= 0 && row >= 0
- && width >= 1 && height >= 1
- && size >= 4
- && col + width <= xres
- && row + height <= yres);
- g_return_if_fail(orientation == GWY_ORIENTATION_HORIZONTAL
- || orientation == GWY_ORIENTATION_VERTICAL);
-
- if (nstats < 1)
- nstats = size/2 - 1;
- gwy_data_line_resample(target_line, size/2, GWY_INTERPOLATION_NONE);
- gwy_data_line_clear(target_line);
- gwy_data_line_set_offset(target_line, 0.0);
-
- re_field = gwy_data_field_new(width, height, 1.0, 1.0, FALSE);
- im_field = gwy_data_field_new(width, height, 1.0, 1.0, FALSE);
- target = target_line->data;
- switch (orientation) {
- case GWY_ORIENTATION_HORIZONTAL:
- gwy_data_field_area_1dfft(data_field, NULL, re_field, im_field,
- col, row, width, height,
- orientation,
- windowing,
- GWY_TRANSFORM_DIRECTION_FORWARD,
- interpolation,
- TRUE, 2);
- re = re_field->data;
- im = im_field->data;
- for (i = 0; i < height; i++) {
- for (j = 0; j < size/2; j++)
- target[j] += re[i*width + j]*re[i*width + j]
- + im[i*width + j]*im[i*width + j];
- }
- gwy_data_line_multiply(target_line,
- data_field->xreal/xres/(2*G_PI*height));
- gwy_data_line_set_real(target_line, G_PI*xres/data_field->xreal);
- break;
-
- case GWY_ORIENTATION_VERTICAL:
- gwy_data_field_area_1dfft(data_field, NULL, re_field, im_field,
- col, row, width, height,
- orientation,
- windowing,
- GWY_TRANSFORM_DIRECTION_FORWARD,
- interpolation,
- TRUE, 2);
- re = re_field->data;
- im = im_field->data;
- for (i = 0; i < width; i++) {
- for (j = 0; j < size/2; j++)
- target[j] += re[j*width + i]*re[j*width + i]
- + im[j*width + i]*im[j*width + i];
- }
- gwy_data_line_multiply(target_line,
- data_field->yreal/yres/(2*G_PI*width));
- gwy_data_line_set_real(target_line, G_PI*yres/data_field->yreal);
- break;
- }
-
- gwy_data_line_set_offset(target_line,
- target_line->real/target_line->res);
- gwy_data_line_resize(target_line, 1, target_line->res);
- gwy_data_line_resample(target_line, nstats, interpolation);
-
- g_object_unref(re_field);
- g_object_unref(im_field);
-
- /* Set proper units */
- xyunit = gwy_data_field_get_si_unit_xy(data_field);
- zunit = gwy_data_field_get_si_unit_z(data_field);
- lineunit = gwy_data_line_get_si_unit_x(target_line);
- gwy_si_unit_power(xyunit, -1, lineunit);
- lineunit = gwy_data_line_get_si_unit_y(target_line);
- gwy_si_unit_power(zunit, 2, lineunit);
- gwy_si_unit_multiply(lineunit, xyunit, lineunit);
-}
-
-/**
- * gwy_data_field_psdf:
- * @data_field: A data field.
- * @target_line: A data line to store the distribution to. It will be
- * resampled to requested width.
- * @orientation: Orientation of lines (PSDF is simply averaged over the
- * other orientation).
- * @interpolation: Interpolation to use when @nstats is given and requires
- * resampling.
- * @windowing: Windowing type to use.
- * @nstats: The number of samples to take on the distribution function. If
- * nonpositive, data field width (height) is used.
- *
- * Calculates one-dimensional power spectrum density function of a data field.
- **/
-void
-gwy_data_field_psdf(GwyDataField *data_field,
- GwyDataLine *target_line,
- GwyOrientation orientation,
- GwyInterpolationType interpolation,
- GwyWindowingType windowing,
- gint nstats)
-{
- g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
- gwy_data_field_area_psdf(data_field, target_line,
- 0, 0, data_field->xres, data_field->yres,
- orientation, interpolation, windowing, nstats);
-}
-
-/**
- * gwy_data_field_area_rpsdf:
- * @data_field: A data field.
- * @target_line: A data line to store the distribution to. It will be
- * resampled to requested width.
- * @col: Upper-left column coordinate.
- * @row: Upper-left row coordinate.
- * @width: Area width (number of columns).
- * @height: Area height (number of rows).
- * @interpolation: Interpolation to use when @nstats is given and requires
- * resampling.
- * @windowing: Windowing type to use.
- * @nstats: The number of samples to take on the distribution function. If
- * nonpositive, data field width (height) is used.
+ * nonpositive, a suitable resolution is determined automatically.
*
- * Calculates radial power spectrum density function of a rectangular
- * part of a data field.
+ * Calculates Minkowski volume functional of a rectangular part of a data
+ * field.
*
- * Since: 2.7
+ * Volume functional is calculated as the number of values above each
+ * threshold value (,white pixels`) divided by the total number of samples
+ * in the area. Is it's equivalent to 1-CDH.
**/
void
-gwy_data_field_area_rpsdf(GwyDataField *data_field,
- GwyDataLine *target_line,
- gint col, gint row,
- gint width, gint height,
- GwyInterpolationType interpolation,
- GwyWindowingType windowing,
- gint nstats)
+gwy_data_field_area_minkowski_volume(GwyDataField *data_field,
+ GwyDataLine *target_line,
+ gint col, gint row,
+ gint width, gint height,
+ gint nstats)
{
- GwyDataField *re_field, *im_field;
- GwySIUnit *xyunit, *zunit, *lineunit;
- gdouble *re, *im;
- gint i, j, k, xres, yres;
- gdouble xreal, yreal, r;
-
- g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
- g_return_if_fail(GWY_IS_DATA_LINE(target_line));
- xres = data_field->xres;
- yres = data_field->yres;
- g_return_if_fail(col >= 0 && row >= 0
- && width >= 4 && height >= 4
- && col + width <= xres
- && row + height <= yres);
- xreal = data_field->xreal;
- yreal = data_field->yreal;
-
- re_field = gwy_data_field_new(width, height,
- width*xreal/xres, height*yreal/yres,
- FALSE);
- im_field = gwy_data_field_new_alike(re_field, FALSE);
- gwy_data_field_area_2dfft(data_field, NULL, re_field, im_field,
- col, row, width, height,
- windowing,
- GWY_TRANSFORM_DIRECTION_FORWARD,
- interpolation,
- TRUE, 2);
- re = re_field->data;
- im = im_field->data;
- for (i = 0; i < height; i++) {
- for (j = 0; j < width; j++) {
- k = i*width + j;
- re[k] = re[k]*re[k] + im[k]*im[k];
- }
- }
- g_object_unref(im_field);
-
- gwy_data_field_fft_postprocess(re_field, TRUE);
- r = 0.5*MAX(re_field->xreal, re_field->yreal);
- gwy_data_field_angular_average(re_field, target_line,
- NULL, GWY_MASK_IGNORE,
- 0.0, 0.0, r, nstats ? nstats+1 : 0);
- g_object_unref(re_field);
- /* Get rid of the zero first element which is bad for logscale. */
- nstats = target_line->res-1;
- gwy_data_line_resize(target_line, 1, nstats+1);
- target_line->off += target_line->real/nstats;
-
- /* Postprocess does not use angular coordinates, fix that. */
- target_line->real *= 2.0*G_PI;
- target_line->off *= 2.0*G_PI;
- r = xreal*yreal/(2.0*G_PI*width*height) * target_line->real/nstats;
- for (k = 0; k < nstats; k++)
- target_line->data[k] *= r*(k + 1);
-
- /* Set proper value units */
- xyunit = gwy_data_field_get_si_unit_xy(data_field);
- zunit = gwy_data_field_get_si_unit_z(data_field);
- lineunit = gwy_data_line_get_si_unit_x(target_line);
- gwy_si_unit_power(xyunit, -1, lineunit);
- lineunit = gwy_data_line_get_si_unit_y(target_line);
- gwy_si_unit_power(zunit, 2, lineunit);
- gwy_si_unit_multiply(lineunit, xyunit, lineunit);
+ gwy_data_field_area_cdh(data_field, NULL, target_line,
+ col, row, width, height,
+ nstats);
+ gwy_data_line_multiply(target_line, -1.0);
+ gwy_data_line_add(target_line, 1.0);
}
/**
- * gwy_data_field_rpsdf:
+ * gwy_data_field_minkowski_volume:
* @data_field: A data field.
* @target_line: A data line to store the distribution to. It will be
* resampled to requested width.
- * @interpolation: Interpolation to use when @nstats is given and requires
- * resampling.
- * @windowing: Windowing type to use.
* @nstats: The number of samples to take on the distribution function. If
- * nonpositive, data field width (height) is used.
- *
- * Calculates radial power spectrum density function of a data field.
- *
- * Since: 2.7
- **/
-void
-gwy_data_field_rpsdf(GwyDataField *data_field,
- GwyDataLine *target_line,
- GwyInterpolationType interpolation,
- GwyWindowingType windowing,
- gint nstats)
-{
- g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
- gwy_data_field_area_rpsdf(data_field, target_line,
- 0, 0, data_field->xres, data_field->yres,
- interpolation, windowing, nstats);
-}
-
-/**
- * gwy_data_field_area_racf:
- * @data_field: A data field.
- * @target_line: A data line to store the autocorrelation function to. It
- * will be resampled to requested width.
- * @col: Upper-left column coordinate.
- * @row: Upper-left row coordinate.
- * @width: Area width (number of columns).
- * @height: Area height (number of rows).
- * @nstats: The number of samples to take on the autocorrelation function. If
- * nonpositive, a suitable resolution is chosen automatically.
- *
- * Calculates radially averaged autocorrelation function of a rectangular part
- * of a data field.
- *
- * Since: 2.22
- **/
-void
-gwy_data_field_area_racf(GwyDataField *data_field,
- GwyDataLine *target_line,
- gint col, gint row,
- gint width, gint height,
- gint nstats)
-{
- GwyDataField *acf_field;
- gint xres, yres, size;
- gdouble r;
-
- g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
- g_return_if_fail(GWY_IS_DATA_LINE(target_line));
- xres = data_field->xres;
- yres = data_field->yres;
- g_return_if_fail(col >= 0 && row >= 0
- && width >= 4 && height >= 4
- && col + width <= xres
- && row + height <= yres);
-
- size = MIN(width, height)/2;
- if (nstats < 1)
- nstats = size;
-
- acf_field = gwy_data_field_new(2*size - 1, 2*size - 1, 1.0, 1.0, FALSE);
- gwy_data_field_area_2dacf(data_field, acf_field,
- col, row, width, height, size, size);
- r = 0.5*MAX(acf_field->xreal, acf_field->yreal);
- gwy_data_field_angular_average(acf_field, target_line,
- NULL, GWY_MASK_IGNORE,
- 0.0, 0.0, r, nstats);
- g_object_unref(acf_field);
-}
-
-/**
- * gwy_data_field_racf:
- * @data_field: A data field.
- * @target_line: A data line to store the autocorrelation function to. It
- * will be resampled to requested width.
- * @nstats: The number of samples to take on the autocorrelation function. If
- * nonpositive, a suitable resolution is chosen automatically.
- *
- * Calculates radially averaged autocorrelation function of a data field.
- *
- * Since: 2.22
- **/
-void
-gwy_data_field_racf(GwyDataField *data_field,
- GwyDataLine *target_line,
- gint nstats)
-{
- g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
- gwy_data_field_area_racf(data_field, target_line,
- 0, 0, data_field->xres, data_field->yres,
- nstats);
-}
-
-/**
- * gwy_data_field_area_2dacf:
- * @data_field: A data field.
- * @target_field: A data field to store the result to. It will be resampled
- * to (2 at xrange-1)x(2 at yrange-1).
- * @col: Upper-left column coordinate.
- * @row: Upper-left row coordinate.
- * @width: Area width (number of columns).
- * @height: Area height (number of rows).
- * @xrange: Horizontal correlation range. Non-positive value means
- * the default range of half of @data_field width will be used.
- * @yrange: Vertical correlation range. Non-positive value means
- * the default range of half of @data_field height will be used.
- *
- * Calculates two-dimensional autocorrelation function of a data field area.
- *
- * The resulting data field has the correlation corresponding to (0,0) in the
- * centre.
- *
- * The maximum possible values of @xrange and @yrange are @data_field
- * width and height, respectively. However, as the values for longer
- * distances are calculated from smaller number of data points they become
- * increasingly bogus, therefore the default range is half of the size.
- *
- * Since: 2.7
- **/
-void
-gwy_data_field_area_2dacf(GwyDataField *data_field,
- GwyDataField *target_field,
- gint col, gint row,
- gint width, gint height,
- gint xrange, gint yrange)
-{
-#ifdef HAVE_FFTW3
- fftw_plan plan;
-#endif
- GwyDataField *re_in, *re_out, *im_out, *ibuf;
- GwySIUnit *xyunit, *zunit, *unit;
- gdouble *src, *dst, *dstm;
- gint i, j, xres, yres, xsize, ysize;
- gdouble xreal, yreal, v, q;
-
- g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
- g_return_if_fail(GWY_IS_DATA_FIELD(target_field));
- xres = data_field->xres;
- yres = data_field->yres;
- g_return_if_fail(col >= 0 && row >= 0
- && width >= 4 && height >= 4
- && col + width <= xres
- && row + height <= yres);
- if (xrange <= 0)
- xrange = width/2;
- if (yrange <= 0)
- yrange = height/2;
- g_return_if_fail(xrange <= width && yrange <= height);
- xreal = data_field->xreal;
- yreal = data_field->yreal;
-
- xsize = gwy_fft_find_nice_size(width + xrange);
- ysize = gwy_fft_find_nice_size(height + yrange);
-
- re_in = gwy_data_field_new(xsize, height, 1.0, 1.0, TRUE);
- re_out = gwy_data_field_new_alike(re_in, FALSE);
- im_out = gwy_data_field_new_alike(re_in, FALSE);
- ibuf = gwy_data_field_new_alike(re_in, FALSE);
-
- /* Stage 1: Row-wise FFT, with zero-padded columns.
- * No need to transform the padding rows as zero rises from zeroes. */
- gwy_data_field_area_copy(data_field, re_in, col, row, width, height, 0, 0);
- gwy_data_field_1dfft_raw(re_in, NULL, re_out, im_out,
- GWY_ORIENTATION_HORIZONTAL,
- GWY_TRANSFORM_DIRECTION_FORWARD);
-
- /* Stage 2: Column-wise FFT, taking the norm and another column-wise FTT.
- * We take the advantage of the fact that the order of the row- and
- * column-wise transforms is arbitrary and that taking the norm is a
- * local operation. */
- /* Use interleaved arrays, this enables us to foist them as `complex'
- * to FFTW. */
- src = g_new(gdouble, 4*ysize);
- dst = src + 2*ysize;
-#ifdef HAVE_FFTW3
- q = sqrt(xsize)/ysize;
- plan = fftw_plan_dft_1d(ysize, (fftw_complex*)src, (fftw_complex*)dst,
- FFTW_FORWARD, _GWY_FFTW_PATIENCE);
-#else
- q = sqrt(xsize*ysize);
-#endif
- for (j = 0; j < xsize; j++) {
- for (i = 0; i < height; i++) {
- src[2*i + 0] = re_out->data[i*xsize + j];
- src[2*i + 1] = im_out->data[i*xsize + j];
- }
- gwy_clear(src + 2*height, 2*(ysize - height));
-#ifdef HAVE_FFTW3
- fftw_execute(plan);
-#else
- gwy_fft_simple(GWY_TRANSFORM_DIRECTION_FORWARD, ysize,
- 2, src, src + 1,
- 2, dst, dst + 1);
-#endif
- for (i = 0; i < ysize; i++) {
- src[2*i] = dst[2*i]*dst[2*i] + dst[2*i + 1]*dst[2*i + 1];
- src[2*i + 1] = 0.0;
- }
-#ifdef HAVE_FFTW3
- fftw_execute(plan);
-#else
- gwy_fft_simple(GWY_TRANSFORM_DIRECTION_FORWARD, ysize,
- 2, src, src + 1,
- 2, dst, dst + 1);
-#endif
- for (i = 0; i < height; i++) {
- re_in->data[i*xsize + j] = dst[2*i + 0];
- ibuf->data[i*xsize + j] = dst[2*i + 1];
- }
- }
-#ifdef HAVE_FFTW3
- fftw_destroy_plan(plan);
-#endif
- g_free(src);
-
- /* Stage 3: The final row-wise FFT. */
- gwy_data_field_1dfft_raw(re_in, ibuf, re_out, im_out,
- GWY_ORIENTATION_HORIZONTAL,
- GWY_TRANSFORM_DIRECTION_FORWARD);
-
- g_object_unref(ibuf);
- g_object_unref(re_in);
- g_object_unref(im_out);
-
- gwy_data_field_resample(target_field, 2*xrange - 1, 2*yrange - 1,
- GWY_INTERPOLATION_NONE);
- /* Extract the correlation data and reshuflle it to human-undestandable
- * positions with 0.0 at the centre. */
- for (i = 0; i < yrange; i++) {
- src = re_out->data + i*xsize;
- dst = target_field->data + (yrange-1 + i)*target_field->xres;
- dstm = target_field->data + (yrange-1 - i)*target_field->xres;
- for (j = 0; j < xrange; j++) {
- if (j > 0) {
- v = q*src[xsize - j]/(height - i)/(width - j);
- if (i > 0)
- dstm[xrange-1 + j] = v;
- dst[xrange-1 - j] = v;
- }
- v = q*src[j]/(height - i)/(width - j);
- if (i > 0)
- dstm[xrange-1 - j] = v;
- dst[xrange-1 + j] = v;
- }
- }
- g_object_unref(re_out);
-
- target_field->xreal = xreal*target_field->xres/xres;
- target_field->yreal = yreal*target_field->yres/yres;
- target_field->xoff = -0.5*target_field->xreal;
- target_field->yoff = -0.5*target_field->yreal;
-
- xyunit = gwy_data_field_get_si_unit_xy(data_field);
- zunit = gwy_data_field_get_si_unit_z(data_field);
- unit = gwy_data_field_get_si_unit_xy(target_field);
- gwy_serializable_clone(G_OBJECT(xyunit), G_OBJECT(unit));
- unit = gwy_data_field_get_si_unit_z(target_field);
- gwy_si_unit_power(zunit, 2, unit);
-
- gwy_data_field_invalidate(target_field);
-}
-
-/**
- * gwy_data_field_2dacf:
- * @data_field: A data field.
- * @target_field: A data field to store the result to.
- *
- * Calculates two-dimensional autocorrelation function of a data field.
+ * nonpositive, a suitable resolution is determined automatically.
*
- * See gwy_data_field_area_2dacf() for details. Parameters missing (not
- * adjustable) in this function are set to their default values.
+ * Calculates Minkowski volume functional of a data field.
*
- * Since: 2.7
- **/
-void
-gwy_data_field_2dacf(GwyDataField *data_field,
- GwyDataField *target_field)
-{
- g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
-
- gwy_data_field_area_2dacf(data_field, target_field,
- 0, 0, data_field->xres, data_field->yres, 0, 0);
-}
-
-/**
- * gwy_data_field_area_minkowski_volume:
- * @data_field: A data field.
- * @target_line: A data line to store the distribution to. It will be
- * resampled to requested width.
- * @col: Upper-left column coordinate.
- * @row: Upper-left row coordinate.
- * @width: Area width (number of columns).
- * @height: Area height (number of rows).
- * @nstats: The number of samples to take on the distribution function. If
- * nonpositive, a suitable resolution is determined automatically.
- *
- * Calculates Minkowski volume functional of a rectangular part of a data
- * field.
- *
- * Volume functional is calculated as the number of values above each
- * threshold value (,white pixels`) divided by the total number of samples
- * in the area. Is it's equivalent to 1-CDH.
- **/
-void
-gwy_data_field_area_minkowski_volume(GwyDataField *data_field,
- GwyDataLine *target_line,
- gint col, gint row,
- gint width, gint height,
- gint nstats)
-{
- gwy_data_field_area_cdh(data_field, NULL, target_line,
- col, row, width, height,
- nstats);
- gwy_data_line_multiply(target_line, -1.0);
- gwy_data_line_add(target_line, 1.0);
-}
-
-/**
- * gwy_data_field_minkowski_volume:
- * @data_field: A data field.
- * @target_line: A data line to store the distribution to. It will be
- * resampled to requested width.
- * @nstats: The number of samples to take on the distribution function. If
- * nonpositive, a suitable resolution is determined automatically.
- *
- * Calculates Minkowski volume functional of a data field.
- *
- * See gwy_data_field_area_minkowski_volume() for details.
+ * See gwy_data_field_area_minkowski_volume() for details.
**/
void
gwy_data_field_minkowski_volume(GwyDataField *data_field,
GwyDataLine *target_line,
gint nstats)
-{
- gwy_data_field_cdh(data_field, target_line, nstats);
- gwy_data_line_multiply(target_line, -1.0);
- gwy_data_line_add(target_line, 1.0);
-}
-
-/**
- * gwy_data_field_area_minkowski_boundary:
- * @data_field: A data field.
- * @target_line: A data line to store the distribution to. It will be
- * resampled to requested width.
- * @col: Upper-left column coordinate.
- * @row: Upper-left row coordinate.
- * @width: Area width (number of columns).
- * @height: Area height (number of rows).
- * @nstats: The number of samples to take on the distribution function. If
- * nonpositive, a suitable resolution is determined automatically.
- *
- * Calculates Minkowski boundary functional of a rectangular part of a data
- * field.
- *
- * Boundary functional is calculated as the number of boundaries for each
- * threshold value (the number of pixel sides where of neighouring pixels is
- * ,white` and the other ,black`) divided by the total number of samples
- * in the area.
- **/
-void
-gwy_data_field_area_minkowski_boundary(GwyDataField *data_field,
- GwyDataLine *target_line,
- gint col, gint row,
- gint width, gint height,
- gint nstats)
-{
- GwySIUnit *fieldunit, *lineunit;
- const gdouble *data;
- gdouble *line;
- gdouble min, max, q;
- gint xres, i, j, k, k0, kr, kd;
-
- g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
- g_return_if_fail(GWY_IS_DATA_LINE(target_line));
- g_return_if_fail(col >= 0 && row >= 0
- && width >= 0 && height >= 0
- && col + width <= data_field->xres
- && row + height <= data_field->yres);
-
- if (nstats < 1) {
- nstats = floor(3.49*cbrt(width*height) + 0.5);
- nstats = MAX(nstats, 2);
- }
-
- gwy_data_line_resample(target_line, nstats, GWY_INTERPOLATION_NONE);
- gwy_data_line_clear(target_line);
- gwy_data_field_area_get_min_max(data_field, NULL,
- col, row, width, height,
- &min, &max);
- /* There are no boundaries on a totally flat sufrace */
- if (min == max || width == 0 || height == 0)
- return;
-
- xres = data_field->xres;
- q = nstats/(max - min);
- line = target_line->data;
-
- for (i = 0; i < height-1; i++) {
- kr = (gint)((data_field->data[i*xres + col] - min)*q);
- for (j = 0; j < width-1; j++) {
- data = data_field->data + (i + row)*xres + (col + j);
-
- k0 = kr;
-
- kr = (gint)((data[1] - min)*q);
- for (k = MAX(MIN(k0, kr), 0); k < MIN(MAX(k0, kr), nstats); k++)
- line[k] += 1;
-
- kd = (gint)((data[xres] - min)*q);
- for (k = MAX(MIN(k0, kd), 0); k < MIN(MAX(k0, kd), nstats); k++)
- line[k] += 1;
- }
- }
-
- gwy_data_line_multiply(target_line, 1.0/(width*height));
- gwy_data_line_set_real(target_line, max - min);
- gwy_data_line_set_offset(target_line, min);
-
- /* Set proper units */
- fieldunit = gwy_data_field_get_si_unit_z(data_field);
- lineunit = gwy_data_line_get_si_unit_x(target_line);
- gwy_serializable_clone(G_OBJECT(fieldunit), G_OBJECT(lineunit));
- lineunit = gwy_data_line_get_si_unit_y(target_line);
- gwy_si_unit_set_from_string(lineunit, NULL);
-}
-
-/**
- * gwy_data_field_minkowski_boundary:
- * @data_field: A data field.
- * @target_line: A data line to store the distribution to. It will be
- * resampled to requested width.
- * @nstats: The number of samples to take on the distribution function. If
- * nonpositive, a suitable resolution is determined automatically.
- *
- * Calculates Minkowski boundary functional of a data field.
- *
- * See gwy_data_field_area_minkowski_boundary() for details.
- **/
-void
-gwy_data_field_minkowski_boundary(GwyDataField *data_field,
- GwyDataLine *target_line,
- gint nstats)
-{
- g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
- gwy_data_field_area_minkowski_boundary(data_field, target_line,
- 0, 0,
- data_field->xres, data_field->yres,
- nstats);
-}
-
-/**
- * gwy_data_field_area_minkowski_euler:
- * @data_field: A data field.
- * @target_line: A data line to store the distribution to. It will be
- * resampled to requested width.
- * @col: Upper-left column coordinate.
- * @row: Upper-left row coordinate.
- * @width: Area width (number of columns).
- * @height: Area height (number of rows).
- * @nstats: The number of samples to take on the distribution function. If
- * nonpositive, a suitable resolution is determined automatically.
- *
- * Calculates Minkowski connectivity functional (Euler characteristics) of
- * a rectangular part of a data field.
- *
- * Connectivity functional is calculated as the number connected areas of
- * pixels above threhsold (,white`) minus the number of connected areas of
- * pixels below threhsold (,black`) for each threshold value, divided by the
- * total number of samples in the area.
- **/
-void
-gwy_data_field_area_minkowski_euler(GwyDataField *data_field,
- GwyDataLine *target_line,
- gint col, gint row,
- gint width, gint height,
- gint nstats)
-{
- GwySIUnit *fieldunit, *lineunit;
- GwyDataLine *tmp_line;
- gint i;
-
- g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
- g_return_if_fail(GWY_IS_DATA_LINE(target_line));
- g_return_if_fail(col >= 0 && row >= 0
- && width >= 0 && height >= 0
- && col + width <= data_field->xres
- && row + height <= data_field->yres);
-
- if (nstats < 1) {
- nstats = floor(3.49*cbrt(width*height) + 0.5);
- nstats = MAX(nstats, 2);
- }
-
- gwy_data_line_resample(target_line, nstats, GWY_INTERPOLATION_NONE);
- tmp_line = gwy_data_line_new_alike(target_line, FALSE);
-
- gwy_data_field_area_grains_tgnd(data_field, target_line,
- col, row, width, height,
- FALSE, nstats);
- gwy_data_field_area_grains_tgnd(data_field, tmp_line,
- col, row, width, height,
- TRUE, nstats);
-
- for (i = 0; i < nstats; i++)
- target_line->data[i] -= tmp_line->data[nstats-1 - i];
- g_object_unref(tmp_line);
-
- gwy_data_line_multiply(target_line, 1.0/(width*height));
- gwy_data_line_invert(target_line, TRUE, FALSE);
-
- /* Set proper units */
- fieldunit = gwy_data_field_get_si_unit_z(data_field);
- lineunit = gwy_data_line_get_si_unit_x(target_line);
- gwy_serializable_clone(G_OBJECT(fieldunit), G_OBJECT(lineunit));
- lineunit = gwy_data_line_get_si_unit_y(target_line);
- gwy_si_unit_set_from_string(lineunit, NULL);
-}
-
-/**
- * gwy_data_field_minkowski_euler:
- * @data_field: A data field.
- * @target_line: A data line to store the distribution to. It will be
- * resampled to requested width.
- * @nstats: The number of samples to take on the distribution function. If
- * nonpositive, a suitable resolution is determined automatically.
- *
- * Calculates Minkowski connectivity functional (Euler characteristics) of
- * a data field.
- *
- * See gwy_data_field_area_minkowski_euler() for details.
- **/
-void
-gwy_data_field_minkowski_euler(GwyDataField *data_field,
- GwyDataLine *target_line,
- gint nstats)
-{
- g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
- gwy_data_field_area_minkowski_euler(data_field, target_line,
- 0, 0,
- data_field->xres, data_field->yres,
- nstats);
-}
-
-/**
- * square_area1:
- * @z1: Z-value in first corner.
- * @z2: Z-value in second corner.
- * @z3: Z-value in third corner.
- * @z4: Z-value in fourth corner.
- * @q: One fourth of rectangle projected area (x-size * ysize).
- *
- * Calculates approximate area of a one square pixel.
- *
- * Returns: The area.
- **/
-static inline gdouble
-square_area1(gdouble z1, gdouble z2, gdouble z3, gdouble z4,
- gdouble q)
-{
- gdouble c;
-
- c = (z1 + z2 + z3 + z4)/4.0;
- z1 -= c;
- z2 -= c;
- z3 -= c;
- z4 -= c;
-
- return (sqrt(1.0 + 2.0*(z1*z1 + z2*z2)/q)
- + sqrt(1.0 + 2.0*(z2*z2 + z3*z3)/q)
- + sqrt(1.0 + 2.0*(z3*z3 + z4*z4)/q)
- + sqrt(1.0 + 2.0*(z4*z4 + z1*z1)/q));
-}
-
-/**
- * square_area1w:
- * @z1: Z-value in first corner.
- * @z2: Z-value in second corner.
- * @z3: Z-value in third corner.
- * @z4: Z-value in fourth corner.
- * @w1: Weight of first corner (0 or 1).
- * @w2: Weight of second corner (0 or 1).
- * @w3: Weight of third corner (0 or 1).
- * @w4: Weight of fourth corner (0 or 1).
- * @q: One fourth of rectangle projected area (x-size * ysize).
- *
- * Calculates approximate area of a one square pixel with some corners possibly
- * missing.
- *
- * Returns: The area.
- **/
-static inline gdouble
-square_area1w(gdouble z1, gdouble z2, gdouble z3, gdouble z4,
- gint w1, gint w2, gint w3, gint w4,
- gdouble q)
-{
- gdouble c;
-
- c = (z1 + z2 + z3 + z4)/4.0;
- z1 -= c;
- z2 -= c;
- z3 -= c;
- z4 -= c;
-
- return ((w1 + w2)*sqrt(1.0 + 2.0*(z1*z1 + z2*z2)/q)
- + (w2 + w3)*sqrt(1.0 + 2.0*(z2*z2 + z3*z3)/q)
- + (w3 + w4)*sqrt(1.0 + 2.0*(z3*z3 + z4*z4)/q)
- + (w4 + w1)*sqrt(1.0 + 2.0*(z4*z4 + z1*z1)/q))/2.0;
-}
-
-/**
- * square_area2:
- * @z1: Z-value in first corner.
- * @z2: Z-value in second corner.
- * @z3: Z-value in third corner.
- * @z4: Z-value in fourth corner.
- * @x: One fourth of square of rectangle width (x-size).
- * @y: One fourth of square of rectangle height (y-size).
- *
- * Calculates approximate area of a one general rectangular pixel.
- *
- * Returns: The area.
- **/
-static inline gdouble
-square_area2(gdouble z1, gdouble z2, gdouble z3, gdouble z4,
- gdouble x, gdouble y)
-{
- gdouble c;
-
- c = (z1 + z2 + z3 + z4)/2.0;
-
- return (sqrt(1.0 + (z1 - z2)*(z1 - z2)/x
- + (z1 + z2 - c)*(z1 + z2 - c)/y)
- + sqrt(1.0 + (z2 - z3)*(z2 - z3)/y
- + (z2 + z3 - c)*(z2 + z3 - c)/x)
- + sqrt(1.0 + (z3 - z4)*(z3 - z4)/x
- + (z3 + z4 - c)*(z3 + z4 - c)/y)
- + sqrt(1.0 + (z1 - z4)*(z1 - z4)/y
- + (z1 + z4 - c)*(z1 + z4 - c)/x));
-}
-
-/**
- * square_area2w:
- * @z1: Z-value in first corner.
- * @z2: Z-value in second corner.
- * @z3: Z-value in third corner.
- * @z4: Z-value in fourth corner.
- * @w1: Weight of first corner (0 or 1).
- * @w2: Weight of second corner (0 or 1).
- * @w3: Weight of third corner (0 or 1).
- * @w4: Weight of fourth corner (0 or 1).
- * @x: One fourth of square of rectangle width (x-size).
- * @y: One fourth of square of rectangle height (y-size).
- *
- * Calculates approximate area of a one general rectangular pixel with some
- * corners possibly missing.
- *
- * Returns: The area.
- **/
-static inline gdouble
-square_area2w(gdouble z1, gdouble z2, gdouble z3, gdouble z4,
- gint w1, gint w2, gint w3, gint w4,
- gdouble x, gdouble y)
-{
- gdouble c;
-
- c = (z1 + z2 + z3 + z4)/2.0;
-
- return ((w1 + w2)*sqrt(1.0 + (z1 - z2)*(z1 - z2)/x
- + (z1 + z2 - c)*(z1 + z2 - c)/y)
- + (w2 + w3)*sqrt(1.0 + (z2 - z3)*(z2 - z3)/y
- + (z2 + z3 - c)*(z2 + z3 - c)/x)
- + (w3 + w4)*sqrt(1.0 + (z3 - z4)*(z3 - z4)/x
- + (z3 + z4 - c)*(z3 + z4 - c)/y)
- + (w4 + w1)*sqrt(1.0 + (z1 - z4)*(z1 - z4)/y
- + (z1 + z4 - c)*(z1 + z4 - c)/x))/2.0;
-}
-
-/**
- * stripe_area1:
- * @n: The number of values in @r, @rr, @m.
- * @stride: Stride in @r, @rr, @m.
- * @r: Array of @n z-values of vertices, this row of vertices is considered
- * inside.
- * @rr: Array of @n z-values of vertices, this row of vertices is considered
- * outside.
- * @m: Mask for @r (@rr does not need mask since it has zero weight by
- * definition), or %NULL to sum over all @r vertices.
- * @mode: Masking mode.
- * @q: One fourth of rectangle projected area (x-size * ysize).
- *
- * Calculates approximate area of a half-pixel stripe.
- *
- * Returns: The area.
- **/
-static gdouble
-stripe_area1(gint n,
- gint stride,
- const gdouble *r,
- const gdouble *rr,
- const gdouble *m,
- GwyMaskingType mode,
- gdouble q)
-{
- gdouble sum = 0.0;
- gint j;
-
- if (m && mode != GWY_MASK_IGNORE) {
- if (mode == GWY_MASK_INCLUDE) {
- for (j = 0; j < n-1; j++)
- sum += square_area1w(r[j*stride], r[(j + 1)*stride],
- rr[(j + 1)*stride], rr[j*stride],
- m[j*stride] > 0.0, m[(j + 1)*stride] > 0.0,
- 0, 0,
- q);
- }
- else {
- for (j = 0; j < n-1; j++)
- sum += square_area1w(r[j*stride], r[(j + 1)*stride],
- rr[(j + 1)*stride], rr[j*stride],
- m[j*stride] < 1.0, m[(j + 1)*stride] < 1.0,
- 0, 0,
- q);
- }
- }
- else {
- for (j = 0; j < n-1; j++)
- sum += square_area1w(r[j*stride], r[(j + 1)*stride],
- rr[(j + 1)*stride], rr[j*stride],
- 1, 1, 0, 0,
- q);
- }
-
- return sum;
-}
-
-/**
- * stripe_area2:
- * @n: The number of values in @r, @rr, @m.
- * @stride: Stride in @r, @rr, @m.
- * @r: Array of @n z-values of vertices, this row of vertices is considered
- * inside.
- * @rr: Array of @n z-values of vertices, this row of vertices is considered
- * outside.
- * @m: Mask for @r (@rr does not need mask since it has zero weight by
- * definition), or %NULL to sum over all @r vertices.
- * @x: One fourth of square of rectangle width (x-size).
- * @y: One fourth of square of rectangle height (y-size).
- *
- * Calculates approximate area of a half-pixel stripe.
- *
- * Returns: The area.
- **/
-static gdouble
-stripe_area2(gint n,
- gint stride,
- const gdouble *r,
- const gdouble *rr,
- const gdouble *m,
- GwyMaskingType mode,
- gdouble x,
- gdouble y)
-{
- gdouble sum = 0.0;
- gint j;
-
- if (m && mode == GWY_MASK_INCLUDE) {
- for (j = 0; j < n-1; j++)
- sum += square_area2w(r[j*stride], r[(j + 1)*stride],
- rr[(j + 1)*stride], rr[j*stride],
- m[j*stride] > 0.0, m[(j + 1)*stride] > 0.0,
- 0, 0,
- x, y);
- }
- else if (m && mode == GWY_MASK_EXCLUDE) {
- for (j = 0; j < n-1; j++)
- sum += square_area2w(r[j*stride], r[(j + 1)*stride],
- rr[(j + 1)*stride], rr[j*stride],
- m[j*stride] < 1.0, m[(j + 1)*stride] < 1.0,
- 0, 0,
- x, y);
- }
- else {
- for (j = 0; j < n-1; j++)
- sum += square_area2w(r[j*stride], r[(j + 1)*stride],
- rr[(j + 1)*stride], rr[j*stride],
- 1, 1, 0, 0,
- x, y);
- }
-
- return sum;
-}
-
-static gdouble
-calculate_surface_area(GwyDataField *dfield,
- GwyDataField *mask,
- GwyMaskingType mode,
- gint col, gint row,
- gint width, gint height)
-{
- const gdouble *r, *m, *dataul, *maskul;
- gint i, j, xres, yres, s;
- gdouble x, y, q, sum = 0.0;
-
- /* special cases */
- if (!width || !height)
- return sum;
-
- xres = dfield->xres;
- yres = dfield->yres;
- x = dfield->xreal/dfield->xres;
- y = dfield->yreal/dfield->yres;
- q = x*y;
- x = x*x;
- y = y*y;
- dataul = dfield->data + xres*row + col;
-
- if (mask && mode != GWY_MASK_IGNORE) {
- maskul = mask->data + xres*row + col;
- if (fabs(log(x/y)) < 1e-7) {
- /* Inside */
- for (i = 0; i < height-1; i++) {
- r = dataul + xres*i;
- m = maskul + xres*i;
- if (mode == GWY_MASK_INCLUDE) {
- for (j = 0; j < width-1; j++)
- sum += square_area1w(r[j], r[j+1],
- r[j+xres+1], r[j+xres],
- m[j] > 0.0, m[j+1] > 0.0,
- m[j+xres+1] > 0.0, m[j+xres] > 0.0,
- q);
- }
- else {
- for (j = 0; j < width-1; j++)
- sum += square_area1w(r[j], r[j+1],
- r[j+xres+1], r[j+xres],
- m[j] < 1.0, m[j+1] < 1.0,
- m[j+xres+1] < 1.0, m[j+xres] < 1.0,
- q);
- }
- }
-
- /* Top row */
- s = !(row == 0);
- sum += stripe_area1(width, 1, dataul, dataul - s*xres,
- maskul, mode, q);
-
- /* Bottom row */
- s = !(row + height == yres);
- sum += stripe_area1(width, 1,
- dataul + xres*(height-1),
- dataul + xres*(height-1 + s),
- maskul + xres*(height-1), mode, q);
-
- /* Left column */
- s = !(col == 0);
- sum += stripe_area1(height, xres, dataul, dataul - s,
- maskul, mode, q);
- /* Right column */
- s = !(col + width == xres);
- sum += stripe_area1(height, xres,
- dataul + width-1, dataul + width-1 + s,
- maskul + width-1, mode, q);
- }
- else {
- /* Inside */
- for (i = 0; i < height-1; i++) {
- r = dataul + xres*i;
- m = maskul + xres*i;
- if (mode == GWY_MASK_INCLUDE) {
- for (j = 0; j < width-1; j++)
- sum += square_area2w(r[j], r[j+1],
- r[j+xres+1], r[j+xres],
- m[j] > 0.0, m[j+1] > 0.0,
- m[j+xres+1] > 0.0, m[j+xres] > 0.0,
- x, y);
- }
- else {
- for (j = 0; j < width-1; j++)
- sum += square_area2w(r[j], r[j+1],
- r[j+xres+1], r[j+xres],
- m[j] < 1.0, m[j+1] < 1.0,
- m[j+xres+1] < 1.0, m[j+xres] < 1.0,
- x, y);
- }
- }
-
- /* Top row */
- s = !(row == 0);
- sum += stripe_area2(width, 1, dataul, dataul - s*xres, maskul,
- mode, x, y);
-
- /* Bottom row */
- s = !(row + height == yres);
- sum += stripe_area2(width, 1,
- dataul + xres*(height-1),
- dataul + xres*(height-1 + s),
- maskul + xres*(height-1),
- mode, x, y);
-
- /* Left column */
- s = !(col == 0);
- sum += stripe_area2(height, xres, dataul, dataul - s, maskul,
- mode, y, x);
-
- /* Right column */
- s = !(col + width == xres);
- sum += stripe_area2(height, xres,
- dataul + width-1, dataul + width-1 + s,
- maskul + width-1,
- mode, y, x);
- }
-
- /* Just take the four corner quater-pixels as flat. */
- if (mode == GWY_MASK_INCLUDE) {
- if (maskul[0] > 0.0)
- sum += 1.0;
- if (maskul[width-1] > 0.0)
- sum += 1.0;
- if (maskul[xres*(height-1)] > 0.0)
- sum += 1.0;
- if (maskul[xres*(height-1) + width-1] > 0.0)
- sum += 1.0;
- }
- else {
- if (maskul[0] < 1.0)
- sum += 1.0;
- if (maskul[width-1] < 1.0)
- sum += 1.0;
- if (maskul[xres*(height-1)] < 1.0)
- sum += 1.0;
- if (maskul[xres*(height-1) + width-1] < 1.0)
- sum += 1.0;
- }
- }
- else {
- if (fabs(log(x/y)) < 1e-7) {
- /* Inside */
- for (i = 0; i < height-1; i++) {
- r = dataul + xres*i;
- for (j = 0; j < width-1; j++)
- sum += square_area1(r[j], r[j+1], r[j+xres+1], r[j+xres],
- q);
- }
-
- /* Top row */
- s = !(row == 0);
- sum += stripe_area1(width, 1, dataul, dataul - s*xres,
- NULL, GWY_MASK_IGNORE, q);
-
- /* Bottom row */
- s = !(row + height == yres);
- sum += stripe_area1(width, 1,
- dataul + xres*(height-1),
- dataul + xres*(height-1 + s),
- NULL, GWY_MASK_IGNORE, q);
-
- /* Left column */
- s = !(col == 0);
- sum += stripe_area1(height, xres, dataul, dataul - s,
- NULL, GWY_MASK_IGNORE, q);
-
- /* Right column */
- s = !(col + width == xres);
- sum += stripe_area1(height, xres,
- dataul + width-1, dataul + width-1 + s,
- NULL, GWY_MASK_IGNORE, q);
- }
- else {
- for (i = 0; i < height-1; i++) {
- r = dataul + xres*i;
- for (j = 0; j < width-1; j++)
- sum += square_area2(r[j], r[j+1], r[j+xres+1], r[j+xres],
- x, y);
- }
-
- /* Top row */
- s = !(row == 0);
- sum += stripe_area2(width, 1, dataul, dataul - s*xres, NULL,
- GWY_MASK_IGNORE, x, y);
-
- /* Bottom row */
- s = !(row + height == yres);
- sum += stripe_area2(width, 1,
- dataul + xres*(height-1),
- dataul + xres*(height-1 + s),
- NULL,
- GWY_MASK_IGNORE, x, y);
-
- /* Left column */
- s = !(col == 0);
- sum += stripe_area2(height, xres, dataul, dataul - s, NULL,
- GWY_MASK_IGNORE, y, x);
-
- /* Right column */
- s = !(col + width == xres);
- sum += stripe_area2(height, xres,
- dataul + width-1, dataul + width-1 + s, NULL,
- GWY_MASK_IGNORE, y, x);
- }
-
- /* Just take the four corner quater-pixels as flat. */
- sum += 4.0;
- }
-
- return sum*q/4;
-}
-
-/**
- * gwy_data_field_get_surface_area:
- * @data_field: A data field.
- *
- * Computes surface area of a data field.
- *
- * This quantity is cached.
- *
- * Returns: The surface area.
- **/
-gdouble
-gwy_data_field_get_surface_area(GwyDataField *data_field)
-{
- gdouble area = 0.0;
-
- g_return_val_if_fail(GWY_IS_DATA_FIELD(data_field), area);
-
- gwy_debug("%s", CTEST(data_field, ARE) ? "cache" : "lame");
- if (CTEST(data_field, ARE))
- return CVAL(data_field, ARE);
-
- area = calculate_surface_area(data_field, NULL, GWY_MASK_IGNORE,
- 0, 0, data_field->xres, data_field->yres);
-
- CVAL(data_field, ARE) = area;
- data_field->cached |= CBIT(ARE);
-
- return area;
-}
-
-/**
- * gwy_data_field_area_get_surface_area:
- * @data_field: A data field.
- * @mask: Mask specifying which values to take into account/exclude, or %NULL.
- * @col: Upper-left column coordinate.
- * @row: Upper-left row coordinate.
- * @width: Area width (number of columns).
- * @height: Area height (number of rows).
- *
- * Computes surface area of a rectangular part of a data field.
- *
- * This function is equivalent to calling
- * @gwy_data_field_area_get_surface_area_mask() with masking mode
- * %GWY_MASK_INCLUDE.
- *
- * Returns: The surface area.
- **/
-gdouble
-gwy_data_field_area_get_surface_area(GwyDataField *data_field,
- GwyDataField *mask,
- gint col, gint row,
- gint width, gint height)
-{
- return gwy_data_field_area_get_surface_area_mask(data_field, mask,
- GWY_MASK_INCLUDE,
- col, row, width, height);
-}
-
-/**
- * gwy_data_field_area_get_surface_area_mask:
- * @data_field: A data field.
- * @mask: Mask specifying which values to take into account/exclude, or %NULL.
- * @mode: Masking mode to use. See the introduction for description of
- * masking modes.
- * @col: Upper-left column coordinate.
- * @row: Upper-left row coordinate.
- * @width: Area width (number of columns).
- * @height: Area height (number of rows).
- *
- * Computes surface area of a rectangular part of a data field.
- *
- * This quantity makes sense only if the lateral dimensions and values of
- * @data_field are the same physical quantities.
- *
- * Returns: The surface area.
- *
- * Since: 2.18
- **/
-gdouble
-gwy_data_field_area_get_surface_area_mask(GwyDataField *data_field,
- GwyDataField *mask,
- GwyMaskingType mode,
- gint col, gint row,
- gint width, gint height)
-{
- gdouble area = 0.0;
-
- g_return_val_if_fail(GWY_IS_DATA_FIELD(data_field), area);
- g_return_val_if_fail(!mask || (GWY_IS_DATA_FIELD(mask)
- && mask->xres == data_field->xres
- && mask->yres == data_field->yres), area);
- g_return_val_if_fail(col >= 0 && row >= 0
- && width >= 0 && height >= 0
- && col + width <= data_field->xres
- && row + height <= data_field->yres,
- area);
-
- /* The result is the same, but it can be cached. */
- if ((!mask || mode == GWY_MASK_IGNORE)
- && row == 0 && col == 0
- && width == data_field->xres && height == data_field->yres)
- return gwy_data_field_get_surface_area(data_field);
-
- return calculate_surface_area(data_field, mask, mode,
- col, row, width, height);
-}
-
-/**
- * square_var1:
- * @z1: Z-value in first corner.
- * @z2: Z-value in second corner.
- * @z3: Z-value in third corner.
- * @z4: Z-value in fourth corner.
- * @q: One fourth of rectangle projected var (x-size * ysize).
- *
- * Calculates approximate variation of a one square pixel.
- *
- * Returns: The variation.
- **/
-static inline gdouble
-square_var1(gdouble z1, gdouble z2, gdouble z3, gdouble z4,
- gdouble q)
-{
- gdouble z12 = z1 - z2, z23 = z2 - z3, z34 = z3 - z4, z41 = z4 - z1;
-
- return (sqrt((z12*z12 + z41*z41)/q)
- + sqrt((z23*z23 + z12*z12)/q)
- + sqrt((z34*z34 + z23*z23)/q)
- + sqrt((z41*z41 + z34*z34)/q));
-}
-
-/**
- * square_var1w:
- * @z1: Z-value in first corner.
- * @z2: Z-value in second corner.
- * @z3: Z-value in third corner.
- * @z4: Z-value in fourth corner.
- * @w1: Weight of first corner (0 or 1).
- * @w2: Weight of second corner (0 or 1).
- * @w3: Weight of third corner (0 or 1).
- * @w4: Weight of fourth corner (0 or 1).
- * @q: One fourth of rectangle projected var (x-size * ysize).
- *
- * Calculates approximate variation of a one square pixel with some corners
- * possibly missing.
- *
- * Returns: The variation.
- **/
-static inline gdouble
-square_var1w(gdouble z1, gdouble z2, gdouble z3, gdouble z4,
- gint w1, gint w2, gint w3, gint w4,
- gdouble q)
-{
- gdouble z12 = z1 - z2, z23 = z2 - z3, z34 = z3 - z4, z41 = z4 - z1;
-
- return (w1*sqrt((z12*z12 + z41*z41)/q)
- + w2*sqrt((z23*z23 + z12*z12)/q)
- + w3*sqrt((z34*z34 + z23*z23)/q)
- + w4*sqrt((z41*z41 + z34*z34)/q));
-}
-
-/**
- * square_var2:
- * @z1: Z-value in first corner.
- * @z2: Z-value in second corner.
- * @z3: Z-value in third corner.
- * @z4: Z-value in fourth corner.
- * @x: One fourth of square of rectangle width (x-size).
- * @y: One fourth of square of rectangle height (y-size).
- *
- * Calculates approximate variation of a one general rectangular pixel.
- *
- * Returns: The variation.
- **/
-static inline gdouble
-square_var2(gdouble z1, gdouble z2, gdouble z3, gdouble z4,
- gdouble x, gdouble y)
-{
- gdouble z12 = z1 - z2, z23 = z2 - z3, z34 = z3 - z4, z41 = z4 - z1;
-
- return (sqrt(z12*z12/x + z41*z41/y)
- + sqrt(z23*z23/y + z12*z12/x)
- + sqrt(z34*z34/x + z23*z23/y)
- + sqrt(z41*z41/y + z34*z34/x));
-}
-
-/**
- * square_var2w:
- * @z1: Z-value in first corner.
- * @z2: Z-value in second corner.
- * @z3: Z-value in third corner.
- * @z4: Z-value in fourth corner.
- * @w1: Weight of first corner (0 or 1).
- * @w2: Weight of second corner (0 or 1).
- * @w3: Weight of third corner (0 or 1).
- * @w4: Weight of fourth corner (0 or 1).
- * @x: One fourth of square of rectangle width (x-size).
- * @y: One fourth of square of rectangle height (y-size).
- *
- * Calculates approximate variation of a one general rectangular pixel with
- * some corners possibly missing.
- *
- * Returns: The variation.
- **/
-static inline gdouble
-square_var2w(gdouble z1, gdouble z2, gdouble z3, gdouble z4,
- gint w1, gint w2, gint w3, gint w4,
- gdouble x, gdouble y)
-{
- gdouble z12 = z1 - z2, z23 = z2 - z3, z34 = z3 - z4, z41 = z4 - z1;
-
- return (w1*sqrt(z12*z12/x + z41*z41/y)
- + w2*sqrt(z23*z23/y + z12*z12/x)
- + w3*sqrt(z34*z34/x + z23*z23/y)
- + w4*sqrt(z41*z41/y + z34*z34/x));
-}
-
-/**
- * stripe_var1:
- * @n: The number of values in @r, @rr, @m.
- * @stride: Stride in @r, @rr, @m.
- * @r: Array of @n z-values of vertices, this row of vertices is considered
- * inside.
- * @rr: Array of @n z-values of vertices, this row of vertices is considered
- * outside.
- * @m: Mask for @r (@rr does not need mask since it has zero weight by
- * definition), or %NULL to sum over all @r vertices.
- * @mode: Masking mode.
- * @q: One fourth of rectangle projected var (x-size * ysize).
- *
- * Calculates approximate variation of a half-pixel stripe.
- *
- * Returns: The variation.
- **/
-static gdouble
-stripe_var1(gint n,
- gint stride,
- const gdouble *r,
- const gdouble *rr,
- const gdouble *m,
- GwyMaskingType mode,
- gdouble q)
-{
- gdouble sum = 0.0;
- gint j;
-
- if (m && mode != GWY_MASK_IGNORE) {
- if (mode == GWY_MASK_INCLUDE) {
- for (j = 0; j < n-1; j++)
- sum += square_var1w(r[j*stride], r[(j + 1)*stride],
- rr[(j + 1)*stride], rr[j*stride],
- m[j*stride] > 0.0, m[(j + 1)*stride] > 0.0,
- 0, 0,
- q);
- }
- else {
- for (j = 0; j < n-1; j++)
- sum += square_var1w(r[j*stride], r[(j + 1)*stride],
- rr[(j + 1)*stride], rr[j*stride],
- m[j*stride] < 1.0, m[(j + 1)*stride] < 1.0,
- 0, 0,
- q);
- }
- }
- else {
- for (j = 0; j < n-1; j++)
- sum += square_var1w(r[j*stride], r[(j + 1)*stride],
- rr[(j + 1)*stride], rr[j*stride],
- 1, 1, 0, 0,
- q);
- }
-
- return sum;
-}
-
-/**
- * stripe_var2:
- * @n: The number of values in @r, @rr, @m.
- * @stride: Stride in @r, @rr, @m.
- * @r: Array of @n z-values of vertices, this row of vertices is considered
- * inside.
- * @rr: Array of @n z-values of vertices, this row of vertices is considered
- * outside.
- * @m: Mask for @r (@rr does not need mask since it has zero weight by
- * definition), or %NULL to sum over all @r vertices.
- * @x: One fourth of square of rectangle width (x-size).
- * @y: One fourth of square of rectangle height (y-size).
- *
- * Calculates approximate variation of a half-pixel stripe.
- *
- * Returns: The variation.
- **/
-static gdouble
-stripe_var2(gint n,
- gint stride,
- const gdouble *r,
- const gdouble *rr,
- const gdouble *m,
- GwyMaskingType mode,
- gdouble x,
- gdouble y)
-{
- gdouble sum = 0.0;
- gint j;
-
- if (m && mode == GWY_MASK_INCLUDE) {
- for (j = 0; j < n-1; j++)
- sum += square_var2w(r[j*stride], r[(j + 1)*stride],
- rr[(j + 1)*stride], rr[j*stride],
- m[j*stride] > 0.0, m[(j + 1)*stride] > 0.0,
- 0, 0,
- x, y);
- }
- else if (m && mode == GWY_MASK_EXCLUDE) {
- for (j = 0; j < n-1; j++)
- sum += square_var2w(r[j*stride], r[(j + 1)*stride],
- rr[(j + 1)*stride], rr[j*stride],
- m[j*stride] < 1.0, m[(j + 1)*stride] < 1.0,
- 0, 0,
- x, y);
- }
- else {
- for (j = 0; j < n-1; j++)
- sum += square_var2w(r[j*stride], r[(j + 1)*stride],
- rr[(j + 1)*stride], rr[j*stride],
- 1, 1, 0, 0,
- x, y);
- }
-
- return sum;
-}
-
-static gdouble
-calculate_variation(GwyDataField *dfield,
- GwyDataField *mask,
- GwyMaskingType mode,
- gint col, gint row,
- gint width, gint height)
-{
- const gdouble *r, *m, *dataul, *maskul;
- gint i, j, xres, yres, s;
- gdouble x, y, q, sum = 0.0;
-
- /* special cases */
- if (!width || !height)
- return sum;
-
- xres = dfield->xres;
- yres = dfield->yres;
- x = dfield->xreal/dfield->xres;
- y = dfield->yreal/dfield->yres;
- q = x*y;
- x = x*x;
- y = y*y;
- dataul = dfield->data + xres*row + col;
-
- if (mask && mode != GWY_MASK_IGNORE) {
- maskul = mask->data + xres*row + col;
- if (fabs(log(x/y)) < 1e-7) {
- /* Inside */
- for (i = 0; i < height-1; i++) {
- r = dataul + xres*i;
- m = maskul + xres*i;
- if (mode == GWY_MASK_INCLUDE) {
- for (j = 0; j < width-1; j++)
- sum += square_var1w(r[j], r[j+1],
- r[j+xres+1], r[j+xres],
- m[j] > 0.0, m[j+1] > 0.0,
- m[j+xres+1] > 0.0, m[j+xres] > 0.0,
- q);
- }
- else {
- for (j = 0; j < width-1; j++)
- sum += square_var1w(r[j], r[j+1],
- r[j+xres+1], r[j+xres],
- m[j] < 1.0, m[j+1] < 1.0,
- m[j+xres+1] < 1.0, m[j+xres] < 1.0,
- q);
- }
- }
-
- /* Top row */
- s = !(row == 0);
- sum += stripe_var1(width, 1, dataul, dataul - s*xres,
- maskul, mode, q);
-
- /* Bottom row */
- s = !(row + height == yres);
- sum += stripe_var1(width, 1,
- dataul + xres*(height-1),
- dataul + xres*(height-1 + s),
- maskul + xres*(height-1), mode, q);
-
- /* Left column */
- s = !(col == 0);
- sum += stripe_var1(height, xres, dataul, dataul - s,
- maskul, mode, q);
- /* Right column */
- s = !(col + width == xres);
- sum += stripe_var1(height, xres,
- dataul + width-1, dataul + width-1 + s,
- maskul + width-1, mode, q);
- }
- else {
- /* Inside */
- for (i = 0; i < height-1; i++) {
- r = dataul + xres*i;
- m = maskul + xres*i;
- if (mode == GWY_MASK_INCLUDE) {
- for (j = 0; j < width-1; j++)
- sum += square_var2w(r[j], r[j+1],
- r[j+xres+1], r[j+xres],
- m[j] > 0.0, m[j+1] > 0.0,
- m[j+xres+1] > 0.0, m[j+xres] > 0.0,
- x, y);
- }
- else {
- for (j = 0; j < width-1; j++)
- sum += square_var2w(r[j], r[j+1],
- r[j+xres+1], r[j+xres],
- m[j] < 1.0, m[j+1] < 1.0,
- m[j+xres+1] < 1.0, m[j+xres] < 1.0,
- x, y);
- }
- }
-
- /* Top row */
- s = !(row == 0);
- sum += stripe_var2(width, 1, dataul, dataul - s*xres, maskul,
- mode, x, y);
-
- /* Bottom row */
- s = !(row + height == yres);
- sum += stripe_var2(width, 1,
- dataul + xres*(height-1),
- dataul + xres*(height-1 + s),
- maskul + xres*(height-1),
- mode, x, y);
-
- /* Left column */
- s = !(col == 0);
- sum += stripe_var2(height, xres, dataul, dataul - s, maskul,
- mode, y, x);
-
- /* Right column */
- s = !(col + width == xres);
- sum += stripe_var2(height, xres,
- dataul + width-1, dataul + width-1 + s,
- maskul + width-1,
- mode, y, x);
- }
- }
- else {
- if (fabs(log(x/y)) < 1e-7) {
- /* Inside */
- for (i = 0; i < height-1; i++) {
- r = dataul + xres*i;
- for (j = 0; j < width-1; j++)
- sum += square_var1(r[j], r[j+1], r[j+xres+1], r[j+xres],
- q);
- }
-
- /* Top row */
- s = !(row == 0);
- sum += stripe_var1(width, 1, dataul, dataul - s*xres,
- NULL, GWY_MASK_IGNORE, q);
-
- /* Bottom row */
- s = !(row + height == yres);
- sum += stripe_var1(width, 1,
- dataul + xres*(height-1),
- dataul + xres*(height-1 + s),
- NULL, GWY_MASK_IGNORE, q);
-
- /* Left column */
- s = !(col == 0);
- sum += stripe_var1(height, xres, dataul, dataul - s,
- NULL, GWY_MASK_IGNORE, q);
-
- /* Right column */
- s = !(col + width == xres);
- sum += stripe_var1(height, xres,
- dataul + width-1, dataul + width-1 + s,
- NULL, GWY_MASK_IGNORE, q);
- }
- else {
- for (i = 0; i < height-1; i++) {
- r = dataul + xres*i;
- for (j = 0; j < width-1; j++)
- sum += square_var2(r[j], r[j+1], r[j+xres+1], r[j+xres],
- x, y);
- }
-
- /* Top row */
- s = !(row == 0);
- sum += stripe_var2(width, 1, dataul, dataul - s*xres, NULL,
- GWY_MASK_IGNORE, x, y);
-
- /* Bottom row */
- s = !(row + height == yres);
- sum += stripe_var2(width, 1,
- dataul + xres*(height-1),
- dataul + xres*(height-1 + s),
- NULL,
- GWY_MASK_IGNORE, x, y);
-
- /* Left column */
- s = !(col == 0);
- sum += stripe_var2(height, xres, dataul, dataul - s, NULL,
- GWY_MASK_IGNORE, y, x);
-
- /* Right column */
- s = !(col + width == xres);
- sum += stripe_var2(height, xres,
- dataul + width-1, dataul + width-1 + s, NULL,
- GWY_MASK_IGNORE, y, x);
- }
- }
-
- return sum*q/4;
-}
-
-/**
- * gwy_data_field_get_variation:
- * @data_field: A data field.
- *
- * Computes the total variation of a data field.
- *
- * See gwy_data_field_area_get_variation() for the definition.
- *
- * This quantity is cached.
- *
- * Returns: The variation.
- *
- * Since: 2.38
- **/
-gdouble
-gwy_data_field_get_variation(GwyDataField *data_field)
-{
- gdouble var = 0.0;
-
- g_return_val_if_fail(GWY_IS_DATA_FIELD(data_field), var);
-
- gwy_debug("%s", CTEST(data_field, VAR) ? "cache" : "lame");
- if (CTEST(data_field, VAR))
- return CVAL(data_field, VAR);
-
- var = calculate_variation(data_field, NULL, GWY_MASK_IGNORE,
- 0, 0, data_field->xres, data_field->yres);
-
- CVAL(data_field, VAR) = var;
- data_field->cached |= CBIT(VAR);
-
- return var;
-}
-
-/**
- * gwy_data_field_area_get_variation:
- * @data_field: A data field.
- * @mask: Mask specifying which values to take into account/exclude, or %NULL.
- * @mode: Masking mode to use. See the introduction for description of
- * masking modes.
- * @col: Upper-left column coordinate.
- * @row: Upper-left row coordinate.
- * @width: Area width (number of columns).
- * @height: Area height (number of rows).
- *
- * Computes the total variation of a rectangular part of a data field.
- *
- * The total variation is estimated as the integral of the absolute value of
- * local gradient.
- *
- * This quantity has the somewhat odd units of value unit times lateral unit.
- * It can be envisioned as follows. If the surface has just two height levels
- * (upper and lower planes) then the quantity is the length of the boundary
- * between the upper and lower part, multiplied by the step height. If the
- * surface is piece-wise constant, then the variation is the step height
- * integrated along the boundaries between the constant parts. Therefore, for
- * non-fractal surfaces it scales with the linear dimension of the image, not
- * with its area, despite being an area integral.
- *
- * Returns: The variation.
- *
- * Since: 2.38
- **/
-gdouble
-gwy_data_field_area_get_variation(GwyDataField *data_field,
- GwyDataField *mask,
- GwyMaskingType mode,
- gint col, gint row,
- gint width, gint height)
-{
- gdouble var = 0.0;
-
- g_return_val_if_fail(GWY_IS_DATA_FIELD(data_field), var);
- g_return_val_if_fail(!mask || (GWY_IS_DATA_FIELD(mask)
- && mask->xres == data_field->xres
- && mask->yres == data_field->yres), var);
- g_return_val_if_fail(col >= 0 && row >= 0
- && width >= 0 && height >= 0
- && col + width <= data_field->xres
- && row + height <= data_field->yres,
- var);
-
- /* The result is the same, but it can be cached. */
- if ((!mask || mode == GWY_MASK_IGNORE)
- && row == 0 && col == 0
- && width == data_field->xres && height == data_field->yres)
- return gwy_data_field_get_variation(data_field);
-
- return calculate_variation(data_field, mask, mode,
- col, row, width, height);
-}
-
-/**
- * square_volume:
- * @z1: Z-value in first corner.
- * @z2: Z-value in second corner.
- * @z3: Z-value in third corner.
- * @z4: Z-value in fourth corner.
- *
- * Calculates approximate volume of a one square pixel.
- *
- * Returns: The volume.
- **/
-static inline gdouble
-square_volume(gdouble z1, gdouble z2, gdouble z3, gdouble z4)
-{
- gdouble c;
-
- c = (z1 + z2 + z3 + z4)/4.0;
-
- return c;
-}
-
-/**
- * square_volumew:
- * @z1: Z-value in first corner.
- * @z2: Z-value in second corner.
- * @z3: Z-value in third corner.
- * @z4: Z-value in fourth corner.
- * @w1: Weight of first corner (0 or 1).
- * @w2: Weight of second corner (0 or 1).
- * @w3: Weight of third corner (0 or 1).
- * @w4: Weight of fourth corner (0 or 1).
- *
- * Calculates approximate volume of a one square pixel with some corners
- * possibly missing.
- *
- * Returns: The volume.
- **/
-static inline gdouble
-square_volumew(gdouble z1, gdouble z2, gdouble z3, gdouble z4,
- gint w1, gint w2, gint w3, gint w4)
-{
- gdouble c;
-
- c = (z1 + z2 + z3 + z4)/4.0;
-
- return (w1*(3.0*z1 + z2 + z4 + c)
- + w2*(3.0*z2 + z1 + z3 + c)
- + w3*(3.0*z3 + z2 + z4 + c)
- + w4*(3.0*z4 + z3 + z1 + c))/24.0;
-}
-
-/**
- * stripe_volume:
- * @n: The number of values in @r, @rr, @m.
- * @stride: Stride in @r, @rr, @m.
- * @r: Array of @n z-values of vertices, this row of vertices is considered
- * inside.
- * @rr: Array of @n z-values of vertices, this row of vertices is considered
- * outside.
- * @m: Mask for @r (@rr does not need mask since it has zero weight by
- * definition), or %NULL to sum over all @r vertices.
- *
- * Calculates approximate volume of a half-pixel stripe.
- *
- * Returns: The volume.
- **/
-static gdouble
-stripe_volume(gint n,
- gint stride,
- const gdouble *r,
- const gdouble *rr,
- const gdouble *m)
-{
- gdouble sum = 0.0;
- gint j;
-
- if (m) {
- for (j = 0; j < n-1; j++)
- sum += square_volumew(r[j*stride], r[(j + 1)*stride],
- rr[(j + 1)*stride], rr[j*stride],
- m[j*stride] > 0.0, m[(j + 1)*stride] > 0.0,
- 0, 0);
- }
- else {
- for (j = 0; j < n-1; j++)
- sum += square_volumew(r[j*stride], r[(j + 1)*stride],
- rr[(j + 1)*stride], rr[j*stride],
- 1, 1, 0, 0);
- }
-
- return sum;
-}
-
-/**
- * stripe_volumeb:
- * @n: The number of values in @r, @rr, @m.
- * @stride: Stride in @r, @rr, @m.
- * @r: Array of @n z-values of vertices, this row of vertices is considered
- * inside.
- * @rr: Array of @n z-values of vertices, this row of vertices is considered
- * outside.
- * @b: Array of @n z-values of basis, this row of vertices is considered
- * inside.
- * @br: Array of @n z-values of basis, this row of vertices is considered
- * outside.
- * @m: Mask for @r (@rr does not need mask since it has zero weight by
- * definition), or %NULL to sum over all @r vertices.
- *
- * Calculates approximate volume of a half-pixel stripe, taken from basis.
- *
- * Returns: The volume.
- **/
-static gdouble
-stripe_volumeb(gint n,
- gint stride,
- const gdouble *r,
- const gdouble *rr,
- const gdouble *b,
- const gdouble *br,
- const gdouble *m)
-{
- gdouble sum = 0.0;
- gint j;
-
- if (m) {
- for (j = 0; j < n-1; j++)
- sum += square_volumew(r[j*stride] - b[j*stride],
- r[(j + 1)*stride] - b[(j + 1)*stride],
- rr[(j + 1)*stride] - br[(j + 1)*stride],
- rr[j*stride] - br[j*stride],
- m[j*stride] > 0.0,
- m[(j + 1)*stride] > 0.0,
- 0, 0);
- }
- else {
- for (j = 0; j < n-1; j++)
- sum += square_volumew(r[j*stride] - b[j*stride],
- r[(j + 1)*stride] - b[(j + 1)*stride],
- rr[(j + 1)*stride] - br[(j + 1)*stride],
- rr[j*stride] - br[j*stride],
- 1, 1, 0, 0);
- }
-
- return sum;
-}
-
-static gdouble
-calculate_volume(GwyDataField *dfield,
- GwyDataField *basis,
- GwyDataField *mask,
- gint col, gint row,
- gint width, gint height)
-{
- const gdouble *r, *m, *b, *dataul, *maskul, *basisul;
- gint i, j, xres, yres, s;
- gdouble sum = 0.0;
-
- /* special cases */
- if (!width || !height)
- return sum;
-
- xres = dfield->xres;
- yres = dfield->yres;
- dataul = dfield->data + xres*row + col;
-
- if (mask) {
- maskul = mask->data + xres*row + col;
- if (!basis) {
- /* Inside */
- for (i = 0; i < height-1; i++) {
- r = dataul + xres*i;
- m = maskul + xres*i;
- for (j = 0; j < width-1; j++)
- sum += square_volumew(r[j], r[j+1],
- r[j+xres+1], r[j+xres],
- m[j] > 0.0, m[j+1] > 0.0,
- m[j+xres+1] > 0.0, m[j+xres] > 0.0);
- }
-
- /* Top row */
- s = !(row == 0);
- sum += stripe_volume(width, 1, dataul, dataul - s*xres, maskul);
-
- /* Bottom row */
- s = !(row + height == yres);
- sum += stripe_volume(width, 1,
- dataul + xres*(height-1),
- dataul + xres*(height-1 + s),
- maskul + xres*(height-1));
-
- /* Left column */
- s = !(col == 0);
- sum += stripe_volume(height, xres, dataul, dataul - s, maskul);
-
- /* Right column */
- s = !(col + width == xres);
- sum += stripe_volume(height, xres,
- dataul + width-1, dataul + width-1 + s,
- maskul + width-1);
-
- /* Just take the four corner quater-pixels as flat. */
- if (maskul[0])
- sum += dataul[0]/4.0;
- if (maskul[width-1])
- sum += dataul[width-1]/4.0;
- if (maskul[xres*(height-1)])
- sum += dataul[xres*(height-1)]/4.0;
- if (maskul[xres*(height-1) + width-1])
- sum += dataul[xres*(height-1) + width-1]/4.0;
- }
- else {
- basisul = basis->data + xres*row + col;
-
- /* Inside */
- for (i = 0; i < height-1; i++) {
- r = dataul + xres*i;
- m = maskul + xres*i;
- b = basisul + xres*i;
- for (j = 0; j < width-1; j++)
- sum += square_volumew(r[j] - b[j],
- r[j+1] - b[j+1],
- r[j+xres+1] - b[j+xres+1],
- r[j+xres] - b[j+xres],
- m[j] > 0.0, m[j+1] > 0.0,
- m[j+xres+1] > 0.0, m[j+xres] > 0.0);
- }
-
- /* Top row */
- s = !(row == 0);
- sum += stripe_volumeb(width, 1,
- dataul, dataul - s*xres,
- basisul, basisul - s*xres,
- maskul);
-
- /* Bottom row */
- s = !(row + height == yres);
- sum += stripe_volumeb(width, 1,
- dataul + xres*(height-1),
- dataul + xres*(height-1 + s),
- basisul + xres*(height-1),
- basisul + xres*(height-1 + s),
- maskul + xres*(height-1));
-
- /* Left column */
- s = !(col == 0);
- sum += stripe_volumeb(height, xres,
- dataul, dataul - s,
- basisul, basisul - s,
- maskul);
-
- /* Right column */
- s = !(col + width == xres);
- sum += stripe_volumeb(height, xres,
- dataul + width-1, dataul + width-1 + s,
- basisul + width-1, basisul + width-1 + s,
- maskul + width-1);
-
- /* Just take the four corner quater-pixels as flat. */
- if (maskul[0])
- sum += (dataul[0] - basisul[0])/4.0;
- if (maskul[width-1])
- sum += (dataul[width-1] - basisul[width-1])/4.0;
- if (maskul[xres*(height-1)])
- sum += (dataul[xres*(height-1)] - basisul[xres*(height-1)])/4.0;
- if (maskul[xres*(height-1) + width-1])
- sum += (dataul[xres*(height-1) + width-1]
- - basisul[xres*(height-1) + width-1])/4.0;
- }
- }
- else {
- if (!basis) {
- /* Inside */
- for (i = 0; i < height-1; i++) {
- r = dataul + xres*i;
- for (j = 0; j < width-1; j++)
- sum += square_volume(r[j], r[j+1], r[j+xres+1], r[j+xres]);
- }
-
- /* Top row */
- s = !(row == 0);
- sum += stripe_volume(width, 1, dataul, dataul - s*xres, NULL);
-
- /* Bottom row */
- s = !(row + height == yres);
- sum += stripe_volume(width, 1,
- dataul + xres*(height-1),
- dataul + xres*(height-1 + s),
- NULL);
-
- /* Left column */
- s = !(col == 0);
- sum += stripe_volume(height, xres, dataul, dataul - s, NULL);
-
- /* Right column */
- s = !(col + width == xres);
- sum += stripe_volume(height, xres,
- dataul + width-1, dataul + width-1 + s,
- NULL);
-
- /* Just take the four corner quater-pixels as flat. */
- sum += dataul[0]/4.0;
- sum += dataul[width-1]/4.0;
- sum += dataul[xres*(height-1)]/4.0;
- sum += dataul[xres*(height-1) + width-1]/4.0;
- }
- else {
- basisul = basis->data + xres*row + col;
-
- /* Inside */
- for (i = 0; i < height-1; i++) {
- r = dataul + xres*i;
- b = basisul + xres*i;
- for (j = 0; j < width-1; j++)
- sum += square_volume(r[j] - b[j],
- r[j+1] - b[j+1],
- r[j+xres+1] - b[j+xres+1],
- r[j+xres] - b[j+xres]);
- }
-
- /* Top row */
- s = !(row == 0);
- sum += stripe_volumeb(width, 1,
- dataul, dataul - s*xres,
- basisul, basisul - s*xres,
- NULL);
-
- /* Bottom row */
- s = !(row + height == yres);
- sum += stripe_volumeb(width, 1,
- dataul + xres*(height-1),
- dataul + xres*(height-1 + s),
- basisul + xres*(height-1),
- basisul + xres*(height-1 + s),
- NULL);
-
- /* Left column */
- s = !(col == 0);
- sum += stripe_volumeb(height, xres,
- dataul, dataul - s,
- basisul, basisul - s,
- NULL);
-
- /* Right column */
- s = !(col + width == xres);
- sum += stripe_volumeb(height, xres,
- dataul + width-1, dataul + width-1 + s,
- basisul + width-1, basisul + width-1 + s,
- NULL);
-
- /* Just take the four corner quater-pixels as flat. */
- sum += (dataul[0] - basisul[0])/4.0;
- sum += (dataul[width-1] - basisul[width-1])/4.0;
- sum += (dataul[xres*(height-1)] - basisul[xres*(height-1)])/4.0;
- sum += (dataul[xres*(height-1) + width-1]
- - basisul[xres*(height-1) + width-1])/4.0;
- }
- }
-
- return sum* dfield->xreal/dfield->xres * dfield->yreal/dfield->yres;
-}
-
-/* Don't define gwy_data_field_get_volume() without mask and basis, it would
- * just be a complicate way to calculate gwy_data_field_get_sum() */
-
-/**
- * gwy_data_field_area_get_volume:
- * @data_field: A data field.
- * @basis: The basis or background for volume calculation if not %NULL.
- * The height of each vertex is then the difference between
- * @data_field value and @basis value. Value %NULL is the same
- * as passing all zeroes for the basis.
- * @mask: Mask specifying which values to take into account/exclude, or %NULL.
- * @col: Upper-left column coordinate.
- * @row: Upper-left row coordinate.
- * @width: Area width (number of columns).
- * @height: Area height (number of rows).
- *
- * Computes volume of a rectangular part of a data field.
- *
- * Returns: The volume.
- *
- * Since: 2.3
- **/
-gdouble
-gwy_data_field_area_get_volume(GwyDataField *data_field,
- GwyDataField *basis,
- GwyDataField *mask,
- gint col, gint row,
- gint width, gint height)
-{
- gdouble vol = 0.0;
-
- g_return_val_if_fail(GWY_IS_DATA_FIELD(data_field), vol);
- g_return_val_if_fail(!basis || (GWY_IS_DATA_FIELD(basis)
- && basis->xres == data_field->xres
- && basis->yres == data_field->yres), vol);
- g_return_val_if_fail(!mask || (GWY_IS_DATA_FIELD(mask)
- && mask->xres == data_field->xres
- && mask->yres == data_field->yres), vol);
- g_return_val_if_fail(col >= 0 && row >= 0
- && width >= 0 && height >= 0
- && col + width <= data_field->xres
- && row + height <= data_field->yres,
- vol);
-
- return calculate_volume(data_field, basis, mask, col, row, width, height);
-}
-
-/* Find the flattest part of the curve representing scaling histogram-based
- * entropy on scale and use the value there as the entropy estimate. Handle
- * the too-few-pixels cases gracefully.
- *
- * NB: We assume
- * (1) ecurve beings from large scales. This is important only when it has
- * lots of points because we may skip a few at the beginning then to avoid
- * mistaking the flat part of the curve there for the inflexion point.
- * (2) ecurve goes by powers of 2 scales, this is for the mindiff filtering.
- */
-static gdouble
-calculate_entropy_from_scaling(const gdouble *ecurve, guint maxdiv)
-{
- /* Initialise S to the δ-function entropy and mindiff to the half of the
- * asymptotic value for distribution that is sum of δ-functions.
- * This means only if the differences drops substantially from this
- * asymptotic value we will consider is as potential inflexion point.
- * If we get ecurve[] essentially corresponding to a set of δ-functions
- * then we return -G_MAXDOUBLE. */
- gdouble S = -G_MAXDOUBLE, mindiff = 0.6*G_LN2;
- guint i, from = (maxdiv >= 12) + (maxdiv >= 36);
-
- if (maxdiv < 1)
- return ecurve[0];
-
- if (maxdiv < 5) {
- for (i = from; i <= maxdiv-2; i++) {
- gdouble diff = 0.5*(fabs(ecurve[i+1] - ecurve[i])
- + fabs(ecurve[i+2] - ecurve[i+1]))/G_LN2;
- gdouble diff2 = 0.5*(fabs(ecurve[i] + ecurve[i+2]
- - 2.0*ecurve[i+1]))/(G_LN2*G_LN2);
- if (diff + diff2 < mindiff) {
- S = ecurve[i+1];
- mindiff = diff + diff2;
- }
- }
- }
- else {
- for (i = from; i <= maxdiv-4; i++) {
- gdouble diff = 0.25*(fabs(ecurve[i+1] - ecurve[i])
- + fabs(ecurve[i+2] - ecurve[i+1])
- + fabs(ecurve[i+3] - ecurve[i+2])
- + fabs(ecurve[i+4] - ecurve[i+3]));
- gdouble diff2 = 0.5*(fabs(ecurve[i+1] + ecurve[i+4]
- - 2.0*ecurve[i+2]))/(G_LN2*G_LN2);
- if (diff + diff2 < mindiff) {
- S = (ecurve[i+1] + ecurve[i+2] + ecurve[i+3])/3.0;
- mindiff = diff + diff2;
- }
- }
- }
-
- return S;
-}
-
-/* This is what we get on average from all possible two-point configurations if
- * they are randomly distributed. A fairly good estimate that in practice
- * seems to result in some deviation on the 5th significant digit, which is
- * hardly significant at all. The contribution is the same in 1D and 2D. */
-static void
-add_estimated_unsplit_node_entropy(gdouble *S, guint maxdepth, gdouble w)
-{
- gdouble q = 2.0*G_LN2*w;
- guint i;
-
- for (i = 0; i <= maxdepth; i++, S++) {
- S[0] += q;
- q *= 0.5;
- }
-}
-
-static BinTreeNode*
-bin_tree_node_new(const gdouble pt)
-{
- BinTreeNode *btnode = g_slice_new(BinTreeNode);
- btnode->u.pt.a = pt;
- btnode->count = 1;
- return btnode;
-}
-
-static void
-bin_tree_add_node(BinTreeNode *btnode, const gdouble pt,
- gdouble min, gdouble max, guint maxdepth)
-{
- BinTreeNode *child;
- gdouble centre;
- guint i;
-
- /* We reached maximum allowed subdivision. Just increase the count. */
- if (!maxdepth) {
- if (btnode->count <= 2)
- gwy_clear(&btnode->u, 1);
- btnode->count++;
- return;
- }
-
- /* We will descend into subtrees. */
- centre = 0.5*(min + max);
-
- /* If this node has just one point add the other there and we are done. */
- if (btnode->count == 1) {
- btnode->u.pt.b = pt;
- btnode->count++;
- return;
- }
-
- /* We will be recursing. So if this node is a leaf start by making it
- * non-leaf. */
- if (btnode->count == 2) {
- gdouble pta = btnode->u.pt.a;
- gdouble ptb = btnode->u.pt.b;
- guint ia = (pta > centre);
- guint ib = (ptb > centre);
-
- gwy_clear(&btnode->u, 1);
- child = btnode->u.children[ia] = bin_tree_node_new(pta);
- /* Must distinguish between creating two child nodes and creating one
- * two-point child node. */
- if (ia == ib) {
- child->u.pt.b = ptb;
- child->count = 2;
- }
- else
- btnode->u.children[ib] = bin_tree_node_new(ptb);
- }
-
- /* Add the new point to the appropriate child. */
- i = (pt > centre);
- maxdepth--;
- btnode->count++;
-
- if ((child = btnode->u.children[i])) {
- /* Recurse. This will end either by reaching maxdepth=0 or by
- * successful separation in the other branch of this conditon. */
- if (i == 0)
- bin_tree_add_node(child, pt, min, centre, maxdepth);
- else
- bin_tree_add_node(child, pt, centre, max, maxdepth);
- }
- else {
- /* There is nothing here yet. Add the point as a new leaf. */
- btnode->u.children[i] = bin_tree_node_new(pt);
- }
-}
-
-static void
-bin_tree_add(BinTree *btree, const gdouble pt)
-{
- if (G_LIKELY(btree->root)) {
- bin_tree_add_node(btree->root, pt,
- btree->min, btree->max, btree->maxdepth);
- }
- else
- btree->root = bin_tree_node_new(pt);
-}
-
-static void
-bin_tree_find_range(BinTree *btree, const gdouble *xdata, guint n)
-{
- gdouble min = G_MAXDOUBLE;
- gdouble max = -G_MAXDOUBLE;
- guint i;
-
- for (i = 0; i < n; i++) {
- gdouble x = xdata[i];
-
- if (x < min)
- min = x;
- if (x > max)
- max = x;
- }
-
- btree->min = min;
- btree->max = max;
-}
-
-static void
-bin_tree_node_free(BinTreeNode *btnode)
-{
- guint i;
-
- if (btnode->count > 2) {
- for (i = 0; i < G_N_ELEMENTS(btnode->u.children); i++) {
- if (btnode->u.children[i])
- bin_tree_node_free(btnode->u.children[i]);
- }
- }
- g_slice_free(BinTreeNode, btnode);
-}
-
-static void
-bin_tree_free(BinTree *btree)
-{
- if (!btree->degenerate)
- bin_tree_node_free(btree->root);
- g_free(btree);
-}
-
-static BinTree*
-bin_tree_new(const gdouble *xdata, guint n, guint maxdepth)
-{
- BinTree *btree;
- guint i;
-
- btree = g_new0(BinTree, 1);
-
- if (!maxdepth)
- maxdepth = 24;
- btree->maxdepth = maxdepth;
-
- bin_tree_find_range(btree, xdata, n);
- if (!(btree->min < btree->max)) {
- btree->degenerate = TRUE;
- btree->degenerateS = G_MAXDOUBLE;
- return btree;
- }
-
- /* Return explicit estimates for n < 4, making maxdiv at least 1 (with
- * half-scales included, ecurve will have at least 3 points then). */
- if (n == 2) {
- btree->degenerate = TRUE;
- btree->degenerateS = log(btree->max - btree->min);
- return btree;
- }
- if (n == 3) {
- btree->degenerate = TRUE;
- btree->degenerateS = (log(btree->max - btree->min)
- + 0.5*log(1.5) - G_LN2/3.0);
- return btree;
- }
-
- for (i = 0; i < n; i++) {
- gdouble pt = xdata[i];
- bin_tree_add(btree, pt);
- }
-
- return btree;
-}
-
-static void
-bin_tree_node_entropies_at_scales(BinTreeNode *btnode, guint maxdepth,
- gdouble *S, guint *unsplit)
-{
- BinTreeNode *child;
- guint i;
-
- /* Singular points contribute to p*ln(p) always with zero. So we can stop
- * recursion to finer subdivisions when count == 1. */
- if (btnode->count <= 1)
- return;
-
- if (!maxdepth) {
- S[0] += gwy_xlnx_int(btnode->count);
- return;
- }
-
- if (btnode->count == 2) {
- unsplit[0]++;
- return;
- }
-
- S[0] += gwy_xlnx_int(btnode->count);
- S++;
-
- maxdepth--;
- unsplit++;
- for (i = 0; i < G_N_ELEMENTS(btnode->u.children); i++) {
- if ((child = btnode->u.children[i]))
- bin_tree_node_entropies_at_scales(child, maxdepth, S, unsplit);
- }
-}
-
-static gdouble*
-bin_tree_entropies_at_scales(BinTree *btree, guint maxdepth)
-{
- gdouble *S;
- guint *unsplit;
- guint i, n, npts;
- gdouble Sscale;
-
- if (!maxdepth)
- maxdepth = btree->maxdepth;
-
- n = maxdepth + 1;
- S = g_new0(gdouble, n);
-
- if (btree->degenerate) {
- S[0] = btree->degenerateS;
- for (i = 1; i < n; i++)
- S[i] = S[i-1] - G_LN2;
- return S;
- }
-
- unsplit = g_new0(guint, maxdepth);
- bin_tree_node_entropies_at_scales(btree->root,
- MIN(maxdepth, btree->maxdepth),
- S, unsplit);
-
- for (i = 0; i < maxdepth; i++) {
- if (unsplit[i])
- add_estimated_unsplit_node_entropy(S + i, maxdepth - i, unsplit[i]);
- }
- g_free(unsplit);
-
- npts = btree->root->count;
- Sscale = log(npts*(btree->max - btree->min));
- for (i = 0; i < n; i++)
- S[i] = Sscale - i*G_LN2 - S[i]/npts;
-
- return S;
-}
-
-static gdouble*
-calculate_entropy_at_scales(GwyDataField *dfield,
- GwyDataField *mask,
- GwyMaskingType mode,
- gint col, gint row,
- gint width, gint height,
- guint *maxdiv,
- gdouble *S)
-{
- gint xres;
- guint i, j, n;
- gdouble *xdata;
- const gdouble *base;
- gboolean must_free_xdata = TRUE;
- gdouble *ecurve;
- BinTree *btree;
-
- if (mask) {
- gwy_data_field_area_count_in_range(mask, NULL, col, row, width, height,
- G_MAXDOUBLE, 1.0, NULL, &n);
- if (mode == GWY_MASK_EXCLUDE)
- n = width*height - n;
- }
- else
- n = width*height;
-
- if (!*maxdiv) {
- if (n >= 2)
- *maxdiv = (guint)floor(3.0*log(n)/G_LN2 + 1e-12);
- else
- *maxdiv = 2;
-
- /* We will run out of significant digits in coordinates after that. */
- *maxdiv = MIN(*maxdiv, 50);
- }
-
- if (n < 2) {
- ecurve = g_new(gdouble, *maxdiv+1);
- for (i = 0; i <= *maxdiv; i++)
- ecurve[i] = -G_MAXDOUBLE;
- if (S)
- *S = -G_MAXDOUBLE;
- return ecurve;
- }
-
- xres = dfield->xres;
- base = dfield->data + row*xres + col;
- if (n == xres*dfield->yres) {
- /* Handle the full-field case without allocating anything. */
- xdata = dfield->data;
- must_free_xdata = FALSE;
- }
- else {
- xdata = g_new(gdouble, n);
- if (mask) {
- const gdouble *mbase = mask->data + row*xres + col;
- const gboolean invert = (mode == GWY_MASK_EXCLUDE);
- guint k = 0;
-
- for (i = 0; i < height; i++) {
- const gdouble *d = base + i*xres;
- const gdouble *m = mbase + i*xres;
- for (j = width; j; j--, d++, m++) {
- if ((*m < 1.0) == invert)
- xdata[k++] = *d;
- }
- }
- g_assert(k == n);
- }
- else {
- for (i = 0; i < height; i++)
- gwy_assign(xdata + i*width, base + i*xres, width);
- }
- }
-
- btree = bin_tree_new(xdata, n, *maxdiv);
- if (must_free_xdata)
- g_free(xdata);
-
- ecurve = bin_tree_entropies_at_scales(btree, *maxdiv);
- if (S) {
- if (btree->degenerate)
- *S = btree->degenerateS;
- else
- *S = calculate_entropy_from_scaling(ecurve, *maxdiv);
- }
- bin_tree_free(btree);
-
- return ecurve;
-}
-
-/**
- * gwy_data_field_area_get_entropy_at_scales:
- * @data_field: A data field.
- * @target_line: A data line to store the result to. It will be resampled to
- * @maxdiv+1 items.
- * @mask: Mask specifying which values to take into account/exclude, or %NULL.
- * @mode: Masking mode to use. See the introduction for description of
- * masking modes.
- * @col: Upper-left column coordinate.
- * @row: Upper-left row coordinate.
- * @width: Area width (number of columns).
- * @height: Area height (number of rows).
- * @maxdiv: Maximum number of divisions of the value range. Pass zero to
- * choose it automatically.
- *
- * Calculates estimates of value distribution entropy at various scales.
- *
- * Returns: The best estimate, as gwy_data_field_area_get_entropy().
- *
- * Since: 2.44
- **/
-gdouble
-gwy_data_field_area_get_entropy_at_scales(GwyDataField *data_field,
- GwyDataLine *target_line,
- GwyDataField *mask,
- GwyMaskingType mode,
- gint col, gint row,
- gint width, gint height,
- gint maxdiv)
-{
- GwySIUnit *lineunit;
- guint umaxdiv = (maxdiv > 0 ? maxdiv : 0);
- gdouble *ecurve;
- gdouble min, max, S = -G_MAXDOUBLE;
- gint i;
-
- g_return_val_if_fail(GWY_IS_DATA_FIELD(data_field), S);
- g_return_val_if_fail(GWY_IS_DATA_LINE(target_line), S);
- g_return_val_if_fail(!mask || (GWY_IS_DATA_FIELD(mask)
- && mask->xres == data_field->xres
- && mask->yres == data_field->yres), S);
- g_return_val_if_fail(col >= 0 && row >= 0
- && width >= 0 && height >= 0
- && col + width <= data_field->xres
- && row + height <= data_field->yres, S);
-
- ecurve = calculate_entropy_at_scales(data_field, mask, mode,
- col, row, width, height,
- &umaxdiv, &S);
- maxdiv = maxdiv ? maxdiv : umaxdiv + 1;
- gwy_data_line_resample(target_line, maxdiv, GWY_INTERPOLATION_NONE);
- target_line->real = maxdiv*G_LN2;
- for (i = 0; i < maxdiv; i++)
- target_line->data[maxdiv-1 - i] = ecurve[i];
- g_free(ecurve);
-
- gwy_data_field_area_get_min_max_mask(data_field, mask, mode,
- col, row, width, height,
- &min, &max);
- if (max > min)
- target_line->off = log(max - min) - (maxdiv - 0.5)*G_LN2;
-
- lineunit = gwy_data_line_get_si_unit_x(target_line);
- gwy_si_unit_set_from_string(lineunit, NULL);
- lineunit = gwy_data_line_get_si_unit_y(target_line);
- gwy_si_unit_set_from_string(lineunit, NULL);
-
- return S;
-}
-
-/**
- * gwy_data_field_get_entropy:
- * @data_field: A data field.
- *
- * Computes the entropy of a data field.
- *
- * See gwy_data_field_area_get_entropy() for the definition.
- *
- * This quantity is cached.
- *
- * Returns: The value distribution entropy.
- *
- * Since: 2.42
- **/
-gdouble
-gwy_data_field_get_entropy(GwyDataField *data_field)
-{
- gdouble S = -G_MAXDOUBLE;
- gdouble *ecurve;
- guint maxdiv = 0;
-
- g_return_val_if_fail(GWY_IS_DATA_FIELD(data_field), S);
-
- gwy_debug("%s", CTEST(data_field, ENT) ? "cache" : "lame");
- if (CTEST(data_field, ENT))
- return CVAL(data_field, ENT);
-
- ecurve = calculate_entropy_at_scales(data_field, NULL, GWY_MASK_IGNORE,
- 0, 0,
- data_field->xres, data_field->yres,
- &maxdiv, &S);
- g_free(ecurve);
-
- CVAL(data_field, ENT) = S;
- data_field->cached |= CBIT(ENT);
-
- return S;
-}
-
-/**
- * gwy_data_field_area_get_entropy:
- * @data_field: A data field.
- * @mask: Mask specifying which values to take into account/exclude, or %NULL.
- * @mode: Masking mode to use. See the introduction for description of
- * masking modes.
- * @col: Upper-left column coordinate.
- * @row: Upper-left row coordinate.
- * @width: Area width (number of columns).
- * @height: Area height (number of rows).
- *
- * Estimates the entropy of field data distribution.
- *
- * The estimate is calculated as @S = ln(@n Δ) − 1/@n ∑ @n_i ln(@n_i), where
- * @n is the number of pixels considered, Δ the bin size and @n_i the count in
- * the @i-th bin. If @S is plotted as a function of the bin size Δ, it is,
- * generally, a growing function with a plateau for ‘reasonable’ bin sizes.
- * The estimate is taken at the plateau. If no plateau is found, which means
- * the distribution is effectively a sum of δ-functions, -%G_MAXDOUBLE is
- * returned.
- *
- * It should be noted that this estimate may be biased.
- *
- * Returns: The estimated entropy of the data values. The entropy of no data
- * or a single single is returned as -%G_MAXDOUBLE.
- *
- * Since: 2.42
- **/
-gdouble
-gwy_data_field_area_get_entropy(GwyDataField *data_field,
- GwyDataField *mask,
- GwyMaskingType mode,
- gint col, gint row,
- gint width, gint height)
-{
- gdouble S = -G_MAXDOUBLE;
- gdouble *ecurve;
- guint maxdiv = 0;
-
- g_return_val_if_fail(GWY_IS_DATA_FIELD(data_field), S);
- g_return_val_if_fail(!mask || (GWY_IS_DATA_FIELD(mask)
- && mask->xres == data_field->xres
- && mask->yres == data_field->yres), S);
- g_return_val_if_fail(col >= 0 && row >= 0
- && width >= 0 && height >= 0
- && col + width <= data_field->xres
- && row + height <= data_field->yres,
- S);
-
- /* The result is the same, but it can be cached. */
- if ((!mask || mode == GWY_MASK_IGNORE)
- && row == 0 && col == 0
- && width == data_field->xres && height == data_field->yres)
- return gwy_data_field_get_entropy(data_field);
-
- ecurve = calculate_entropy_at_scales(data_field, mask, mode,
- col, row, width, height,
- &maxdiv, &S);
- g_free(ecurve);
- return S;
-}
-
-static QuadTreeNode*
-quad_tree_node_new(const GwyXY *pt)
-{
- QuadTreeNode *qtnode = g_slice_new(QuadTreeNode);
- qtnode->u.pt.a = *pt;
- qtnode->count = 1;
- return qtnode;
-}
-
-static void
-quad_tree_add_node(QuadTreeNode *qtnode, const GwyXY *pt,
- GwyXY min, GwyXY max, guint maxdepth)
-{
- QuadTreeNode *child;
- GwyXY centre;
- guint i;
-
- /* We reached maximum allowed subdivision. Just increase the count. */
- if (!maxdepth) {
- if (qtnode->count <= 2)
- gwy_clear(&qtnode->u, 1);
- qtnode->count++;
- return;
- }
-
- /* We will descend into subtrees. */
- centre.x = 0.5*(min.x + max.x);
- centre.y = 0.5*(min.y + max.y);
-
- /* If this node has just one point add the other there and we are done. */
- if (qtnode->count == 1) {
- qtnode->u.pt.b = *pt;
- qtnode->count++;
- return;
- }
-
- /* We will be recursing. So if this node is a leaf start by making it
- * non-leaf. */
- if (qtnode->count == 2) {
- GwyXY pta = qtnode->u.pt.a;
- GwyXY ptb = qtnode->u.pt.b;
- guint ia = (pta.x > centre.x) + 2*(pta.y > centre.y);
- guint ib = (ptb.x > centre.x) + 2*(ptb.y > centre.y);
-
- gwy_clear(&qtnode->u, 1);
- child = qtnode->u.children[ia] = quad_tree_node_new(&pta);
- /* Must distinguish between creating two child nodes and creating one
- * two-point child node. */
- if (ia == ib) {
- child->u.pt.b = ptb;
- child->count = 2;
- }
- else
- qtnode->u.children[ib] = quad_tree_node_new(&ptb);
- }
-
- /* Add the new point to the appropriate child. */
- i = (pt->x > centre.x) + 2*(pt->y > centre.y);
- maxdepth--;
- qtnode->count++;
-
- if ((child = qtnode->u.children[i])) {
- /* Recurse. This will end either by reaching maxdepth=0 or by
- * successful separation in the other branch of this conditon. */
- if (i == 0)
- quad_tree_add_node(child, pt, min, centre, maxdepth);
- else if (i == 1) {
- min.x = centre.x;
- max.y = centre.y;
- quad_tree_add_node(child, pt, min, max, maxdepth);
- }
- else if (i == 2) {
- max.x = centre.x;
- min.y = centre.y;
- quad_tree_add_node(child, pt, min, max, maxdepth);
- }
- else
- quad_tree_add_node(child, pt, centre, max, maxdepth);
- }
- else {
- /* There is nothing here yet. Add the point as a new leaf. */
- qtnode->u.children[i] = quad_tree_node_new(pt);
- }
-}
-
-static void
-quad_tree_add(QuadTree *qtree, const GwyXY *pt)
-{
- if (G_LIKELY(qtree->root)) {
- quad_tree_add_node(qtree->root, pt,
- qtree->min, qtree->max, qtree->maxdepth);
- }
- else
- qtree->root = quad_tree_node_new(pt);
-}
-
-static void
-quad_tree_find_range(QuadTree *qtree,
- const gdouble *xdata, const gdouble *ydata, guint n)
-{
- GwyXY min = { G_MAXDOUBLE, G_MAXDOUBLE };
- GwyXY max = { -G_MAXDOUBLE, -G_MAXDOUBLE };
- guint i;
-
- for (i = 0; i < n; i++) {
- gdouble x = xdata[i];
- gdouble y = ydata[i];
-
- if (x < min.x)
- min.x = x;
- if (x > max.x)
- max.x = x;
- if (y < min.y)
- min.y = y;
- if (y > max.y)
- max.y = y;
- }
-
- qtree->min = min;
- qtree->max = max;
-}
-
-static void
-quad_tree_node_free(QuadTreeNode *qtnode)
-{
- guint i;
-
- if (qtnode->count > 2) {
- for (i = 0; i < G_N_ELEMENTS(qtnode->u.children); i++) {
- if (qtnode->u.children[i])
- quad_tree_node_free(qtnode->u.children[i]);
- }
- }
- g_slice_free(QuadTreeNode, qtnode);
-}
-
-static void
-quad_tree_free(QuadTree *qtree)
-{
- quad_tree_node_free(qtree->root);
- g_free(qtree);
-}
-
-static QuadTree*
-quad_tree_new(const gdouble *xdata, const gdouble *ydata, guint n,
- guint maxdepth)
-{
- QuadTree *qtree;
- guint i;
-
- qtree = g_new0(QuadTree, 1);
-
- if (!maxdepth)
- maxdepth = 16;
- qtree->maxdepth = maxdepth;
-
- quad_tree_find_range(qtree, xdata, ydata, n);
- if (!(qtree->min.x < qtree->max.x) || !(qtree->min.y < qtree->max.y)) {
- qtree->degenerate = TRUE;
- qtree->degenerateS = G_MAXDOUBLE;
- return qtree;
- }
-
- /* Return explicit estimates for n < 4, making maxdiv at least 1 (with
- * half-scales included, ecurve will have at least 3 points then). */
- if (n == 2) {
- qtree->degenerate = TRUE;
- qtree->degenerateS = (log(qtree->max.x - qtree->min.x)
- + log(qtree->max.y - qtree->min.y));
- return qtree;
- }
- if (n == 3) {
- qtree->degenerate = TRUE;
- qtree->degenerateS = (log(qtree->max.x - qtree->min.x)
- + log(qtree->max.y - qtree->min.y)
- + 0.5*log(1.5) - 2.0*G_LN2/3.0);
- return qtree;
- }
-
- for (i = 0; i < n; i++) {
- GwyXY pt = { xdata[i], ydata[i] };
- quad_tree_add(qtree, &pt);
- }
-
- return qtree;
-}
-
-static gdouble
-quad_tree_node_half_scale_entropy(QuadTreeNode *qtnode)
-{
- QuadTreeNode *child;
- guint cnt[G_N_ELEMENTS(qtnode->u.children)] = { 0, 0, 0, 0 };
- guint i;
-
- for (i = 0; i < G_N_ELEMENTS(qtnode->u.children); i++) {
- if ((child = qtnode->u.children[i]))
- cnt[i] = child->count;
- }
- return 0.5*(gwy_xlnx_int(cnt[0] + cnt[1])
- + gwy_xlnx_int(cnt[2] + cnt[3])
- + gwy_xlnx_int(cnt[0] + cnt[2])
- + gwy_xlnx_int(cnt[1] + cnt[3]));
+{
+ gwy_data_field_cdh(data_field, target_line, nstats);
+ gwy_data_line_multiply(target_line, -1.0);
+ gwy_data_line_add(target_line, 1.0);
}
-static void
-quad_tree_node_entropies_at_scales(QuadTreeNode *qtnode, guint maxdepth,
- gdouble *S, guint *unsplit)
+/**
+ * gwy_data_field_area_minkowski_boundary:
+ * @data_field: A data field.
+ * @target_line: A data line to store the distribution to. It will be
+ * resampled to requested width.
+ * @col: Upper-left column coordinate.
+ * @row: Upper-left row coordinate.
+ * @width: Area width (number of columns).
+ * @height: Area height (number of rows).
+ * @nstats: The number of samples to take on the distribution function. If
+ * nonpositive, a suitable resolution is determined automatically.
+ *
+ * Calculates Minkowski boundary functional of a rectangular part of a data
+ * field.
+ *
+ * Boundary functional is calculated as the number of boundaries for each
+ * threshold value (the number of pixel sides where of neighouring pixels is
+ * ,white` and the other ,black`) divided by the total number of samples
+ * in the area.
+ **/
+void
+gwy_data_field_area_minkowski_boundary(GwyDataField *data_field,
+ GwyDataLine *target_line,
+ gint col, gint row,
+ gint width, gint height,
+ gint nstats)
{
- QuadTreeNode *child;
- guint i;
+ GwySIUnit *fieldunit, *lineunit;
+ const gdouble *data;
+ gdouble *line;
+ gdouble min, max, q;
+ gint xres, i, j, k, k0, kr, kd;
- /* Singular points contribute to p*ln(p) always with zero. So we can stop
- * recursion to finer subdivisions when count == 1. */
- if (qtnode->count <= 1)
- return;
+ g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
+ g_return_if_fail(GWY_IS_DATA_LINE(target_line));
+ g_return_if_fail(col >= 0 && row >= 0
+ && width >= 0 && height >= 0
+ && col + width <= data_field->xres
+ && row + height <= data_field->yres);
- if (!maxdepth) {
- S[0] += gwy_xlnx_int(qtnode->count);
- return;
+ if (nstats < 1) {
+ nstats = floor(3.49*cbrt(width*height) + 0.5);
+ nstats = MAX(nstats, 2);
}
- if (qtnode->count == 2) {
- unsplit[0]++;
+ gwy_data_line_resample(target_line, nstats, GWY_INTERPOLATION_NONE);
+ gwy_data_line_clear(target_line);
+ gwy_data_field_area_get_min_max(data_field, NULL,
+ col, row, width, height,
+ &min, &max);
+ /* There are no boundaries on a totally flat sufrace */
+ if (min == max || width == 0 || height == 0)
return;
- }
- S[0] += gwy_xlnx_int(qtnode->count);
- S++;
+ xres = data_field->xres;
+ q = nstats/(max - min);
+ line = target_line->data;
- // Half-scale entropies we estimate as averages of horizontal and vertical
- // binning.
- S[0] += quad_tree_node_half_scale_entropy(qtnode);
- S++;
+ for (i = 0; i < height-1; i++) {
+ kr = (gint)((data_field->data[i*xres + col] - min)*q);
+ for (j = 0; j < width-1; j++) {
+ data = data_field->data + (i + row)*xres + (col + j);
- maxdepth--;
- unsplit++;
- for (i = 0; i < G_N_ELEMENTS(qtnode->u.children); i++) {
- if ((child = qtnode->u.children[i]))
- quad_tree_node_entropies_at_scales(child, maxdepth, S, unsplit);
- }
-}
+ k0 = kr;
-static gdouble*
-quad_tree_entropies_at_scales(QuadTree *qtree, guint maxdepth)
-{
- gdouble *S;
- guint *unsplit;
- guint i, n, npts;
- gdouble Sscale;
-
- if (!maxdepth)
- maxdepth = qtree->maxdepth;
-
- n = 2*maxdepth + 1;
- S = g_new0(gdouble, n);
- unsplit = g_new0(guint, maxdepth);
- quad_tree_node_entropies_at_scales(qtree->root,
- MIN(maxdepth, qtree->maxdepth),
- S, unsplit);
-
- for (i = 0; i < maxdepth; i++) {
- if (unsplit[i])
- add_estimated_unsplit_node_entropy(S + 2*i, 2*(maxdepth - i),
- unsplit[i]);
+ kr = (gint)((data[1] - min)*q);
+ for (k = MAX(MIN(k0, kr), 0); k < MIN(MAX(k0, kr), nstats); k++)
+ line[k] += 1;
+
+ kd = (gint)((data[xres] - min)*q);
+ for (k = MAX(MIN(k0, kd), 0); k < MIN(MAX(k0, kd), nstats); k++)
+ line[k] += 1;
+ }
}
- g_free(unsplit);
- npts = qtree->root->count;
- Sscale = log(npts
- *(qtree->max.x - qtree->min.x)*(qtree->max.y - qtree->min.y));
- for (i = 0; i < n; i++)
- S[i] = Sscale - i*G_LN2 - S[i]/npts;
+ gwy_data_line_multiply(target_line, 1.0/(width*height));
+ gwy_data_line_set_real(target_line, max - min);
+ gwy_data_line_set_offset(target_line, min);
- return S;
+ /* Set proper units */
+ fieldunit = gwy_data_field_get_si_unit_z(data_field);
+ lineunit = gwy_data_line_get_si_unit_x(target_line);
+ gwy_serializable_clone(G_OBJECT(fieldunit), G_OBJECT(lineunit));
+ lineunit = gwy_data_line_get_si_unit_y(target_line);
+ gwy_si_unit_set_from_string(lineunit, NULL);
}
-static gdouble*
-calculate_entropy_2d_at_scales(GwyDataField *xfield,
- GwyDataField *yfield,
- guint *maxdiv,
- gdouble *S)
+/**
+ * gwy_data_field_minkowski_boundary:
+ * @data_field: A data field.
+ * @target_line: A data line to store the distribution to. It will be
+ * resampled to requested width.
+ * @nstats: The number of samples to take on the distribution function. If
+ * nonpositive, a suitable resolution is determined automatically.
+ *
+ * Calculates Minkowski boundary functional of a data field.
+ *
+ * See gwy_data_field_area_minkowski_boundary() for details.
+ **/
+void
+gwy_data_field_minkowski_boundary(GwyDataField *data_field,
+ GwyDataLine *target_line,
+ gint nstats)
{
- guint xres, yres, n, i;
- gdouble *ecurve;
- QuadTree *qtree;
-
- xres = xfield->xres;
- yres = xfield->yres;
- n = xres*yres;
-
- if (!*maxdiv) {
- if (n >= 2)
- *maxdiv = (guint)floor(1.5*log(n)/G_LN2 + 1e-12);
- else
- *maxdiv = 1;
-
- /* We will run out of significant digits in coordinates after that. */
- *maxdiv = MIN(*maxdiv, 50);
- }
-
- if (n < 2) {
- ecurve = g_new(gdouble, *maxdiv+1);
- for (i = 0; i <= *maxdiv; i++)
- ecurve[i] = -G_MAXDOUBLE;
- if (S)
- *S = -G_MAXDOUBLE;
- return ecurve;
- }
-
- qtree = quad_tree_new(xfield->data, yfield->data, n, *maxdiv);
- ecurve = quad_tree_entropies_at_scales(qtree, *maxdiv);
- if (S) {
- if (qtree->degenerate)
- *S = qtree->degenerateS;
- else
- *S = calculate_entropy_from_scaling(ecurve, 2*(*maxdiv));
- }
- quad_tree_free(qtree);
-
- return ecurve;
+ g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
+ gwy_data_field_area_minkowski_boundary(data_field, target_line,
+ 0, 0,
+ data_field->xres, data_field->yres,
+ nstats);
}
/**
- * gwy_data_field_get_entropy_2d_at_scales:
- * @xfield: A data field containing the @x-coordinates.
- * @yfield: A data field containing the @y-coordinates.
- * @target_line: A data line to store the result to. It will be resampled to
- * @maxdiv+1 items.
- * @maxdiv: Maximum number of divisions of the value range. Pass zero to
- * choose it automatically.
- *
- * Calculates estimates of entropy of two-dimensional point cloud at various
- * scales.
+ * gwy_data_field_area_minkowski_euler:
+ * @data_field: A data field.
+ * @target_line: A data line to store the distribution to. It will be
+ * resampled to requested width.
+ * @col: Upper-left column coordinate.
+ * @row: Upper-left row coordinate.
+ * @width: Area width (number of columns).
+ * @height: Area height (number of rows).
+ * @nstats: The number of samples to take on the distribution function. If
+ * nonpositive, a suitable resolution is determined automatically.
*
- * Returns: The best estimate, as gwy_data_field_get_entropy_2d().
+ * Calculates Minkowski connectivity functional (Euler characteristics) of
+ * a rectangular part of a data field.
*
- * Since: 2.44
+ * Connectivity functional is calculated as the number connected areas of
+ * pixels above threhsold (,white`) minus the number of connected areas of
+ * pixels below threhsold (,black`) for each threshold value, divided by the
+ * total number of samples in the area.
**/
-gdouble
-gwy_data_field_get_entropy_2d_at_scales(GwyDataField *xfield,
- GwyDataField *yfield,
- GwyDataLine *target_line,
- gint maxdiv)
+void
+gwy_data_field_area_minkowski_euler(GwyDataField *data_field,
+ GwyDataLine *target_line,
+ gint col, gint row,
+ gint width, gint height,
+ gint nstats)
{
- GwySIUnit *lineunit;
- guint umaxdiv = (maxdiv > 0 ? maxdiv/2 : 0);
- gdouble *ecurve;
- gdouble xmin, xmax, ymin, ymax, S = -G_MAXDOUBLE;
+ GwySIUnit *fieldunit, *lineunit;
+ GwyDataLine *tmp_line;
gint i;
- g_return_val_if_fail(GWY_IS_DATA_FIELD(xfield), S);
- g_return_val_if_fail(GWY_IS_DATA_FIELD(yfield), S);
- g_return_val_if_fail(GWY_IS_DATA_LINE(target_line), S);
- g_return_val_if_fail(xfield->xres == yfield->xres, S);
- g_return_val_if_fail(xfield->yres == yfield->yres, S);
-
- ecurve = calculate_entropy_2d_at_scales(xfield, yfield, &umaxdiv, &S);
- maxdiv = maxdiv ? maxdiv : 2*umaxdiv + 1;
- gwy_data_line_resample(target_line, maxdiv, GWY_INTERPOLATION_NONE);
- target_line->real = maxdiv*G_LN2;
- for (i = 0; i < maxdiv; i++)
- target_line->data[maxdiv-1 - i] = ecurve[i];
- g_free(ecurve);
-
- gwy_data_field_get_min_max(xfield, &xmin, &xmax);
- gwy_data_field_get_min_max(xfield, &ymin, &ymax);
- if ((xmax > xmin) && (ymax > ymin))
- target_line->off = (log((xmax - xmin)*(ymax - ymin))
- - (maxdiv - 0.5)*G_LN2);
+ g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
+ g_return_if_fail(GWY_IS_DATA_LINE(target_line));
+ g_return_if_fail(col >= 0 && row >= 0
+ && width >= 0 && height >= 0
+ && col + width <= data_field->xres
+ && row + height <= data_field->yres);
+
+ if (nstats < 1) {
+ nstats = floor(3.49*cbrt(width*height) + 0.5);
+ nstats = MAX(nstats, 2);
+ }
+
+ gwy_data_line_resample(target_line, nstats, GWY_INTERPOLATION_NONE);
+ tmp_line = gwy_data_line_new_alike(target_line, FALSE);
+
+ gwy_data_field_area_grains_tgnd(data_field, target_line,
+ col, row, width, height,
+ FALSE, nstats);
+ gwy_data_field_area_grains_tgnd(data_field, tmp_line,
+ col, row, width, height,
+ TRUE, nstats);
+
+ for (i = 0; i < nstats; i++)
+ target_line->data[i] -= tmp_line->data[nstats-1 - i];
+ g_object_unref(tmp_line);
+
+ gwy_data_line_multiply(target_line, 1.0/(width*height));
+ gwy_data_line_invert(target_line, TRUE, FALSE);
+ /* Set proper units */
+ fieldunit = gwy_data_field_get_si_unit_z(data_field);
lineunit = gwy_data_line_get_si_unit_x(target_line);
- gwy_si_unit_set_from_string(lineunit, NULL);
+ gwy_serializable_clone(G_OBJECT(fieldunit), G_OBJECT(lineunit));
lineunit = gwy_data_line_get_si_unit_y(target_line);
gwy_si_unit_set_from_string(lineunit, NULL);
-
- return S;
}
/**
- * gwy_data_field_get_entropy_2d:
- * @xfield: A data field containing the @x-coordinates.
- * @yfield: A data field containing the @y-coordinates.
- *
- * Computes the entropy of a two-dimensional point cloud.
- *
- * Each pair of corresponding @xfield and @yfield pixels is assumed to
- * represent the coordinates (@x, at y) of a point in plane. Hence they must have
- * the same dimensions.
+ * gwy_data_field_minkowski_euler:
+ * @data_field: A data field.
+ * @target_line: A data line to store the distribution to. It will be
+ * resampled to requested width.
+ * @nstats: The number of samples to take on the distribution function. If
+ * nonpositive, a suitable resolution is determined automatically.
*
- * Returns: The two-dimensional distribution entropy.
+ * Calculates Minkowski connectivity functional (Euler characteristics) of
+ * a data field.
*
- * Since: 2.44
+ * See gwy_data_field_area_minkowski_euler() for details.
**/
-gdouble
-gwy_data_field_get_entropy_2d(GwyDataField *xfield,
- GwyDataField *yfield)
+void
+gwy_data_field_minkowski_euler(GwyDataField *data_field,
+ GwyDataLine *target_line,
+ gint nstats)
{
- gdouble *ecurve;
- guint maxdiv = 0;
- gdouble S = -G_MAXDOUBLE;
-
- g_return_val_if_fail(GWY_IS_DATA_FIELD(xfield), S);
- g_return_val_if_fail(GWY_IS_DATA_FIELD(yfield), S);
- g_return_val_if_fail(xfield->xres == yfield->xres, S);
- g_return_val_if_fail(xfield->yres == yfield->yres, S);
-
- ecurve = calculate_entropy_2d_at_scales(xfield, yfield, &maxdiv, &S);
- g_free(ecurve);
-
- return S;
+ g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
+ gwy_data_field_area_minkowski_euler(data_field, target_line,
+ 0, 0,
+ data_field->xres, data_field->yres,
+ nstats);
}
/**
@@ -6389,199 +3044,6 @@ gwy_data_field_count_minima(GwyDataField *data_field)
return ngrains;
}
-/**
- * gwy_data_field_angular_average:
- * @data_field: A data field.
- * @target_line: A data line to store the distribution to. It will be
- * resampled to @nstats size.
- * @mask: Mask of pixels to include from/exclude in the averaging, or %NULL
- * for full @data_field.
- * @masking: Masking mode to use. See the introduction for description of
- * masking modes.
- * @x: X-coordinate of the averaging disc origin, in real coordinates
- * including offsets.
- * @y: Y-coordinate of the averaging disc origin, in real coordinates
- * including offsets.
- * @r: Radius, in real coordinates. It determines the real length of the
- * resulting line.
- * @nstats: The number of samples the resulting line should have. A
- * non-positive value means the sampling will be determined
- * automatically.
- *
- * Performs angular averaging of a part of a data field.
- *
- * The result of such averaging is an radial profile, starting from the disc
- * centre.
- *
- * The function does not guarantee that @target_line will have exactly @nstats
- * samples upon return. A cmaller number of samples than requested may be
- * calculated for instance if either central or outer part of the disc is
- * excluded by masking.
- *
- * Since: 2.42
- **/
-void
-gwy_data_field_angular_average(GwyDataField *data_field,
- GwyDataLine *target_line,
- GwyDataField *mask,
- GwyMaskingType masking,
- gdouble x,
- gdouble y,
- gdouble r,
- gint nstats)
-{
- gint ifrom, ito, jfrom, jto, i, j, k, kfrom, kto, xres, yres;
- gdouble xreal, yreal, dx, dy, xoff, yoff, h, rr;
- const gdouble *d, *m;
- gdouble *target, *weight;
-
- g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
- g_return_if_fail(GWY_IS_DATA_LINE(target_line));
- g_return_if_fail(r >= 0.0);
- xres = data_field->xres;
- yres = data_field->yres;
- if (masking == GWY_MASK_IGNORE)
- mask = NULL;
- else if (!mask)
- masking = GWY_MASK_IGNORE;
-
- if (mask) {
- g_return_if_fail(GWY_IS_DATA_FIELD(mask));
- g_return_if_fail(mask->xres == xres);
- g_return_if_fail(mask->yres == yres);
- }
-
- xreal = data_field->xreal;
- yreal = data_field->yreal;
- xoff = data_field->xoff;
- yoff = data_field->yoff;
- g_return_if_fail(x >= xoff && x <= xoff + xreal);
- g_return_if_fail(y >= yoff && y <= yoff + yreal);
- /* Just for integer overflow; we limit i and j ranges explicitly later. */
- r = MIN(r, hypot(xreal, yreal));
- x -= xoff;
- y -= yoff;
-
- dx = xreal/xres;
- dy = yreal/yres;
-
- /* Prefer sampling close to the shorter step. */
- if (nstats < 1) {
- h = 2.0*dx*dy/(dx + dy);
- nstats = GWY_ROUND(r/h);
- nstats = MAX(nstats, 1);
- }
- h = r/nstats;
-
- d = data_field->data;
- m = mask ? mask->data : NULL;
-
- gwy_data_line_resample(target_line, nstats, GWY_INTERPOLATION_NONE);
- gwy_data_line_clear(target_line);
- gwy_data_field_copy_units_to_data_line(data_field, target_line);
- target_line->real = h*nstats;
- target_line->off = 0.0;
- target = target_line->data;
- /* Just return something for single-point lines. */
- if (nstats < 2 || r == 0.0) {
- /* NB: gwy_data_field_get_dval_real() does not use offsets. */
- target[0] = gwy_data_field_get_dval_real(data_field, x, y,
- GWY_INTERPOLATION_ROUND);
- return;
- }
-
- ifrom = (gint)floor(gwy_data_field_rtoi(data_field, y - r));
- ifrom = MAX(ifrom, 0);
- ito = (gint)ceil(gwy_data_field_rtoi(data_field, y + r));
- ito = MIN(ito, yres-1);
-
- jfrom = (gint)floor(gwy_data_field_rtoj(data_field, x - r));
- jfrom = MAX(jfrom, 0);
- jto = (gint)ceil(gwy_data_field_rtoj(data_field, x + r));
- jto = MIN(jto, xres-1);
-
- weight = g_new0(gdouble, nstats);
- for (i = ifrom; i <= ito; i++) {
- gdouble yy = (i + 0.5)*dy - y;
- for (j = jfrom; j <= jto; j++) {
- gdouble xx = (j + 0.5)*dx - x;
- gdouble v = d[i*xres + j];
-
- if ((masking == GWY_MASK_INCLUDE && m[i*xres + j] <= 0.0)
- || (masking == GWY_MASK_EXCLUDE && m[i*xres + j] >= 1.0))
- continue;
-
- rr = sqrt(xx*xx + yy*yy)/h;
- k = floor(rr);
- if (k+1 >= nstats) {
- if (k+1 == nstats) {
- target[k] += v;
- weight[k] += 1.0;
- }
- continue;
- }
-
- rr -= k;
- if (rr <= 0.5)
- rr = 2.0*rr*rr;
- else
- rr = 1.0 - 2.0*(1.0 - rr)*(1.0 - rr);
-
- target[k] += (1.0 - rr)*v;
- target[k+1] += rr*v;
- weight[k] += 1.0 - rr;
- weight[k+1] += rr;
- }
- }
-
- /* Get rid of initial and trailing no-data segment. */
- for (kfrom = 0; kfrom < nstats; kfrom++) {
- if (weight[kfrom])
- break;
- }
- for (kto = nstats-1; kto > kfrom; kto--) {
- if (weight[kto])
- break;
- }
- if (kto - kfrom < 2) {
- /* XXX: This is not correct. We do not care. */
- target_line->real = h;
- target[0] = gwy_data_field_get_dval_real(data_field, x, y,
- GWY_INTERPOLATION_ROUND);
- return;
- }
-
- if (kfrom != 0 || kto != nstats-1) {
- nstats = kto+1 - kfrom;
- gwy_data_line_resize(target_line, kfrom, kto+1);
- target = target_line->data;
- target_line->off = kfrom*h;
- memmove(weight, weight + kfrom, nstats*sizeof(gdouble));
- }
- g_assert(weight[0]);
- g_assert(weight[nstats-1]);
-
- /* Fill holes where we have no weight, this can occur near the start if
- * large nstats is requested. */
- kfrom = -1;
- for (k = 0; k < nstats; k++) {
- if (weight[k]) {
- target[k] /= weight[k];
- if (kfrom+1 != k) {
- gdouble first = target[kfrom];
- gdouble last = target[k];
- for (j = kfrom+1; j < k; j++) {
- gdouble w = (j - kfrom)/(gdouble)(k - kfrom);
- target[j] = w*last + (1.0 - w)*first;
- }
- }
- kfrom = k;
- }
- }
-
- g_free(weight);
-}
-
/************************** Documentation ****************************/
/**
diff --git a/libprocess/stats.h b/libprocess/stats.h
index dee0cb1..421055e 100644
--- a/libprocess/stats.h
+++ b/libprocess/stats.h
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: stats.h 18844 2016-08-16 15:36:42Z yeti-dn $
+ * @(#) $Id: stats.h 19788 2017-05-22 12:59:28Z yeti-dn $
* Copyright (C) 2003-2009 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -196,6 +196,7 @@ void gwy_data_field_get_stats (GwyDataField *data_field,
gdouble *rms,
gdouble *skew,
gdouble *kurtosis);
+
#ifndef GWY_DISABLE_DEPRECATED
void gwy_data_field_area_get_stats (GwyDataField *data_field,
GwyDataField *mask,
@@ -209,231 +210,297 @@ void gwy_data_field_area_get_stats (GwyDataField *data_field,
gdouble *skew,
gdouble *kurtosis);
#endif
-void gwy_data_field_area_get_stats_mask (GwyDataField *data_field,
- GwyDataField *mask,
- GwyMaskingType mode,
- gint col,
- gint row,
- gint width,
- gint height,
- gdouble *avg,
- gdouble *ra,
- gdouble *rms,
- gdouble *skew,
- gdouble *kurtosis);
-void gwy_data_field_area_count_in_range (GwyDataField *data_field,
- GwyDataField *mask,
- gint col, gint row,
- gint width, gint height,
- gdouble below,
- gdouble above,
- gint *nbelow,
- gint *nabove);
-void gwy_data_field_area_dh (GwyDataField *data_field,
- GwyDataField *mask,
- GwyDataLine *target_line,
- gint col,
- gint row,
- gint width,
- gint height,
- gint nstats);
-void gwy_data_field_dh (GwyDataField *data_field,
- GwyDataLine *target_line,
- gint nstats);
-void gwy_data_field_area_cdh (GwyDataField *data_field,
- GwyDataField *mask,
- GwyDataLine *target_line,
- gint col,
- gint row,
- gint width,
- gint height,
- gint nstats);
-void gwy_data_field_cdh (GwyDataField *data_field,
- GwyDataLine *target_line,
- gint nstats);
-void gwy_data_field_area_da (GwyDataField *data_field,
- GwyDataLine *target_line,
- gint col,
- gint row,
- gint width,
- gint height,
- GwyOrientation orientation,
- gint nstats);
-void gwy_data_field_da (GwyDataField *data_field,
- GwyDataLine *target_line,
- GwyOrientation orientation,
- gint nstats);
-void gwy_data_field_area_cda (GwyDataField *data_field,
- GwyDataLine *target_line,
- gint col,
- gint row,
- gint width,
- gint height,
- GwyOrientation orientation,
- gint nstats);
-void gwy_data_field_cda (GwyDataField *data_field,
- GwyDataLine *target_line,
- GwyOrientation orientation,
- gint nstats);
-void gwy_data_field_area_acf (GwyDataField *data_field,
- GwyDataLine *target_line,
- gint col,
- gint row,
- gint width,
- gint height,
- GwyOrientation orientation,
- GwyInterpolationType interpolation,
- gint nstats);
-void gwy_data_field_acf (GwyDataField *data_field,
- GwyDataLine *target_line,
- GwyOrientation orientation,
- GwyInterpolationType interpolation,
- gint nstats);
-void gwy_data_field_area_hhcf (GwyDataField *data_field,
- GwyDataLine *target_line,
- gint col,
- gint row,
- gint width,
- gint height,
- GwyOrientation orientation,
- GwyInterpolationType interpolation,
- gint nstats);
-void gwy_data_field_hhcf (GwyDataField *data_field,
- GwyDataLine *target_line,
- GwyOrientation orientation,
- GwyInterpolationType interpolation,
- gint nstats);
-void gwy_data_field_area_psdf (GwyDataField *data_field,
- GwyDataLine *target_line,
- gint col,
- gint row,
- gint width,
- gint height,
- GwyOrientation orientation,
- GwyInterpolationType interpolation,
- GwyWindowingType windowing,
- gint nstats);
-void gwy_data_field_psdf (GwyDataField *data_field,
- GwyDataLine *target_line,
- GwyOrientation orientation,
- GwyInterpolationType interpolation,
- GwyWindowingType windowing,
- gint nstats);
-void gwy_data_field_area_rpsdf (GwyDataField *data_field,
- GwyDataLine *target_line,
- gint col,
- gint row,
- gint width,
- gint height,
- GwyInterpolationType interpolation,
- GwyWindowingType windowing,
- gint nstats);
-void gwy_data_field_rpsdf (GwyDataField *data_field,
- GwyDataLine *target_line,
- GwyInterpolationType interpolation,
- GwyWindowingType windowing,
- gint nstats);
-void gwy_data_field_area_2dacf (GwyDataField *data_field,
- GwyDataField *target_field,
- gint col,
- gint row,
- gint width,
- gint height,
- gint xrange,
- gint yrange);
-void gwy_data_field_2dacf (GwyDataField *data_field,
- GwyDataField *target_field);
-void gwy_data_field_area_racf (GwyDataField *data_field,
- GwyDataLine *target_line,
- gint col,
- gint row,
- gint width,
- gint height,
- gint nstats);
-void gwy_data_field_racf (GwyDataField *data_field,
- GwyDataLine *target_line,
- gint nstats);
-void gwy_data_field_area_minkowski_volume(GwyDataField *data_field,
- GwyDataLine *target_line,
- gint col, gint row,
- gint width, gint height,
- gint nstats);
-void gwy_data_field_minkowski_volume (GwyDataField *data_field,
- GwyDataLine *target_line,
- gint nstats);
-void gwy_data_field_area_minkowski_boundary(GwyDataField *data_field,
- GwyDataLine *target_line,
- gint col, gint row,
- gint width, gint height,
- gint nstats);
-void gwy_data_field_minkowski_boundary (GwyDataField *data_field,
- GwyDataLine *target_line,
- gint nstats);
-void gwy_data_field_area_minkowski_euler (GwyDataField *data_field,
- GwyDataLine *target_line,
- gint col, gint row,
- gint width, gint height,
- gint nstats);
-void gwy_data_field_minkowski_euler (GwyDataField *data_field,
- GwyDataLine *target_line,
- gint nstats);
-void gwy_data_field_slope_distribution (GwyDataField *data_field,
- GwyDataLine *derdist,
- gint kernel_size);
-void gwy_data_field_get_normal_coeffs (GwyDataField *data_field,
- gdouble *nx,
- gdouble *ny,
- gdouble *nz,
- gboolean normalize1);
-void gwy_data_field_area_get_normal_coeffs(GwyDataField *data_field,
- gint col,
- gint row,
- gint width,
- gint height,
- gdouble *nx,
- gdouble *ny,
- gdouble *nz,
- gboolean normalize1);
-void gwy_data_field_area_get_inclination (GwyDataField *data_field,
- gint col,
- gint row,
- gint width,
- gint height,
- gdouble *theta,
- gdouble *phi);
-void gwy_data_field_get_inclination (GwyDataField *data_field,
- gdouble *theta,
- gdouble *phi);
-void gwy_data_field_area_get_line_stats (GwyDataField *data_field,
- GwyDataField *mask,
- GwyDataLine *target_line,
- gint col, gint row,
- gint width, gint height,
- GwyLineStatQuantity quantity,
- GwyOrientation orientation);
-void gwy_data_field_get_line_stats_mask (GwyDataField *data_field,
- GwyDataField *mask,
- GwyMaskingType masking,
- GwyDataLine *target_line,
- GwyDataLine *weights,
- gint col, gint row,
- gint width, gint height,
- GwyLineStatQuantity quantity,
- GwyOrientation orientation);
-void gwy_data_field_get_line_stats (GwyDataField *data_field,
- GwyDataLine *target_line,
- GwyLineStatQuantity quantity,
- GwyOrientation orientation);
-guint gwy_data_field_count_maxima (GwyDataField *data_field);
-guint gwy_data_field_count_minima (GwyDataField *data_field);
-void gwy_data_field_angular_average (GwyDataField *data_field,
- GwyDataLine *target_line,
- GwyDataField *mask,
- GwyMaskingType masking,
- gdouble x,
- gdouble y,
- gdouble r,
- gint nstats);
+
+void gwy_data_field_area_get_stats_mask (GwyDataField *data_field,
+ GwyDataField *mask,
+ GwyMaskingType mode,
+ gint col,
+ gint row,
+ gint width,
+ gint height,
+ gdouble *avg,
+ gdouble *ra,
+ gdouble *rms,
+ gdouble *skew,
+ gdouble *kurtosis);
+void gwy_data_field_area_count_in_range (GwyDataField *data_field,
+ GwyDataField *mask,
+ gint col,
+ gint row,
+ gint width,
+ gint height,
+ gdouble below,
+ gdouble above,
+ gint *nbelow,
+ gint *nabove);
+void gwy_data_field_area_dh (GwyDataField *data_field,
+ GwyDataField *mask,
+ GwyDataLine *target_line,
+ gint col,
+ gint row,
+ gint width,
+ gint height,
+ gint nstats);
+void gwy_data_field_dh (GwyDataField *data_field,
+ GwyDataLine *target_line,
+ gint nstats);
+void gwy_data_field_area_cdh (GwyDataField *data_field,
+ GwyDataField *mask,
+ GwyDataLine *target_line,
+ gint col,
+ gint row,
+ gint width,
+ gint height,
+ gint nstats);
+void gwy_data_field_cdh (GwyDataField *data_field,
+ GwyDataLine *target_line,
+ gint nstats);
+void gwy_data_field_area_da (GwyDataField *data_field,
+ GwyDataLine *target_line,
+ gint col,
+ gint row,
+ gint width,
+ gint height,
+ GwyOrientation orientation,
+ gint nstats);
+void gwy_data_field_area_da_mask (GwyDataField *data_field,
+ GwyDataField *mask,
+ GwyDataLine *target_line,
+ gint col,
+ gint row,
+ gint width,
+ gint height,
+ GwyOrientation orientation,
+ gint nstats);
+void gwy_data_field_da (GwyDataField *data_field,
+ GwyDataLine *target_line,
+ GwyOrientation orientation,
+ gint nstats);
+void gwy_data_field_area_cda (GwyDataField *data_field,
+ GwyDataLine *target_line,
+ gint col,
+ gint row,
+ gint width,
+ gint height,
+ GwyOrientation orientation,
+ gint nstats);
+void gwy_data_field_area_cda_mask (GwyDataField *data_field,
+ GwyDataField *mask,
+ GwyDataLine *target_line,
+ gint col,
+ gint row,
+ gint width,
+ gint height,
+ GwyOrientation orientation,
+ gint nstats);
+void gwy_data_field_cda (GwyDataField *data_field,
+ GwyDataLine *target_line,
+ GwyOrientation orientation,
+ gint nstats);
+void gwy_data_field_area_acf (GwyDataField *data_field,
+ GwyDataLine *target_line,
+ gint col,
+ gint row,
+ gint width,
+ gint height,
+ GwyOrientation orientation,
+ GwyInterpolationType interpolation,
+ gint nstats);
+void gwy_data_field_acf (GwyDataField *data_field,
+ GwyDataLine *target_line,
+ GwyOrientation orientation,
+ GwyInterpolationType interpolation,
+ gint nstats);
+GwyDataLine* gwy_data_field_area_row_acf (GwyDataField *field,
+ GwyDataField *mask,
+ GwyMaskingType masking,
+ guint col,
+ guint row,
+ guint width,
+ guint height,
+ guint level,
+ GwyDataLine *weights);
+void gwy_data_field_area_hhcf (GwyDataField *data_field,
+ GwyDataLine *target_line,
+ gint col,
+ gint row,
+ gint width,
+ gint height,
+ GwyOrientation orientation,
+ GwyInterpolationType interpolation,
+ gint nstats);
+void gwy_data_field_hhcf (GwyDataField *data_field,
+ GwyDataLine *target_line,
+ GwyOrientation orientation,
+ GwyInterpolationType interpolation,
+ gint nstats);
+GwyDataLine* gwy_data_field_area_row_hhcf (GwyDataField *field,
+ GwyDataField *mask,
+ GwyMaskingType masking,
+ guint col,
+ guint row,
+ guint width,
+ guint height,
+ guint level,
+ GwyDataLine *weights);
+void gwy_data_field_area_psdf (GwyDataField *data_field,
+ GwyDataLine *target_line,
+ gint col,
+ gint row,
+ gint width,
+ gint height,
+ GwyOrientation orientation,
+ GwyInterpolationType interpolation,
+ GwyWindowingType windowing,
+ gint nstats);
+void gwy_data_field_psdf (GwyDataField *data_field,
+ GwyDataLine *target_line,
+ GwyOrientation orientation,
+ GwyInterpolationType interpolation,
+ GwyWindowingType windowing,
+ gint nstats);
+GwyDataLine* gwy_data_field_area_row_psdf (GwyDataField *field,
+ GwyDataField *mask,
+ GwyMaskingType masking,
+ guint col,
+ guint row,
+ guint width,
+ guint height,
+ GwyWindowingType windowing,
+ guint level);
+void gwy_data_field_area_rpsdf (GwyDataField *data_field,
+ GwyDataLine *target_line,
+ gint col,
+ gint row,
+ gint width,
+ gint height,
+ GwyInterpolationType interpolation,
+ GwyWindowingType windowing,
+ gint nstats);
+void gwy_data_field_rpsdf (GwyDataField *data_field,
+ GwyDataLine *target_line,
+ GwyInterpolationType interpolation,
+ GwyWindowingType windowing,
+ gint nstats);
+GwyDataLine* gwy_data_field_area_row_asg (GwyDataField *field,
+ GwyDataField *mask,
+ GwyMaskingType masking,
+ guint col,
+ guint row,
+ guint width,
+ guint height,
+ guint level);
+void gwy_data_field_area_2dacf (GwyDataField *data_field,
+ GwyDataField *target_field,
+ gint col,
+ gint row,
+ gint width,
+ gint height,
+ gint xrange,
+ gint yrange);
+void gwy_data_field_2dacf (GwyDataField *data_field,
+ GwyDataField *target_field);
+void gwy_data_field_area_racf (GwyDataField *data_field,
+ GwyDataLine *target_line,
+ gint col,
+ gint row,
+ gint width,
+ gint height,
+ gint nstats);
+void gwy_data_field_racf (GwyDataField *data_field,
+ GwyDataLine *target_line,
+ gint nstats);
+void gwy_data_field_area_minkowski_volume (GwyDataField *data_field,
+ GwyDataLine *target_line,
+ gint col,
+ gint row,
+ gint width,
+ gint height,
+ gint nstats);
+void gwy_data_field_minkowski_volume (GwyDataField *data_field,
+ GwyDataLine *target_line,
+ gint nstats);
+void gwy_data_field_area_minkowski_boundary(GwyDataField *data_field,
+ GwyDataLine *target_line,
+ gint col,
+ gint row,
+ gint width,
+ gint height,
+ gint nstats);
+void gwy_data_field_minkowski_boundary (GwyDataField *data_field,
+ GwyDataLine *target_line,
+ gint nstats);
+void gwy_data_field_area_minkowski_euler (GwyDataField *data_field,
+ GwyDataLine *target_line,
+ gint col,
+ gint row,
+ gint width,
+ gint height,
+ gint nstats);
+void gwy_data_field_minkowski_euler (GwyDataField *data_field,
+ GwyDataLine *target_line,
+ gint nstats);
+void gwy_data_field_slope_distribution (GwyDataField *data_field,
+ GwyDataLine *derdist,
+ gint kernel_size);
+void gwy_data_field_get_normal_coeffs (GwyDataField *data_field,
+ gdouble *nx,
+ gdouble *ny,
+ gdouble *nz,
+ gboolean normalize1);
+void gwy_data_field_area_get_normal_coeffs (GwyDataField *data_field,
+ gint col,
+ gint row,
+ gint width,
+ gint height,
+ gdouble *nx,
+ gdouble *ny,
+ gdouble *nz,
+ gboolean normalize1);
+void gwy_data_field_area_get_inclination (GwyDataField *data_field,
+ gint col,
+ gint row,
+ gint width,
+ gint height,
+ gdouble *theta,
+ gdouble *phi);
+void gwy_data_field_get_inclination (GwyDataField *data_field,
+ gdouble *theta,
+ gdouble *phi);
+void gwy_data_field_area_get_line_stats (GwyDataField *data_field,
+ GwyDataField *mask,
+ GwyDataLine *target_line,
+ gint col,
+ gint row,
+ gint width,
+ gint height,
+ GwyLineStatQuantity quantity,
+ GwyOrientation orientation);
+void gwy_data_field_get_line_stats_mask (GwyDataField *data_field,
+ GwyDataField *mask,
+ GwyMaskingType masking,
+ GwyDataLine *target_line,
+ GwyDataLine *weights,
+ gint col,
+ gint row,
+ gint width,
+ gint height,
+ GwyLineStatQuantity quantity,
+ GwyOrientation orientation);
+void gwy_data_field_get_line_stats (GwyDataField *data_field,
+ GwyDataLine *target_line,
+ GwyLineStatQuantity quantity,
+ GwyOrientation orientation);
+guint gwy_data_field_count_maxima (GwyDataField *data_field);
+guint gwy_data_field_count_minima (GwyDataField *data_field);
+void gwy_data_field_angular_average (GwyDataField *data_field,
+ GwyDataLine *target_line,
+ GwyDataField *mask,
+ GwyMaskingType masking,
+ gdouble x,
+ gdouble y,
+ gdouble r,
+ gint nstats);
G_END_DECLS
diff --git a/libprocess/stats_uncertainty.c b/libprocess/stats_uncertainty.c
index ff8f75b..16743e5 100644
--- a/libprocess/stats_uncertainty.c
+++ b/libprocess/stats_uncertainty.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: stats_uncertainty.c 19216 2016-11-09 10:39:06Z yeti-dn $
+ * @(#) $Id: stats_uncertainty.c 19692 2017-05-03 17:20:06Z yeti-dn $
* Copyright (C) 2003-2009 Anna Campbellova
* E-mail: acampbellova at cmi.cz.
*
@@ -22,10 +22,6 @@
#include "config.h"
#include <string.h>
-#ifdef HAVE_FFTW3
-#include <fftw3.h>
-#endif
-
#include <libgwyddion/gwymacros.h>
#include <libgwyddion/gwymath.h>
#include <libprocess/datafield.h>
@@ -37,28 +33,6 @@
#include <libprocess/inttrans.h>
#include <libprocess/simplefft.h>
#include "gwyprocessinternal.h"
-#include "monte-carlo-unc.h"
-#include "wrappers.h"
-
-/* XXX: This is just an example. Does not use any actual uncertainties. */
-G_GNUC_UNUSED
-static void
-_gwy_data_field_area_min_max_unc(GwyDataField *field,
- G_GNUC_UNUSED GwyDataField *uncz_field,
- GwyDataField *mask, GwyMaskingType mode,
- gint col, gint row,
- gint width, gint height,
- gdouble *min, gdouble *max)
-{
- GwyFieldPart fpart = { col, row, width, height };
- GwyFieldUncertainties unc = { 1.0 };
- gdouble results[2];
-
- _gwy_data_field_unc_scalar(field, mask, mode, &fpart, NULL, results, 2,
- &_gwy_data_field_get_min_max, &unc);
- *min = results[0];
- *max = results[1];
-}
/**
* gwy_data_field_get_max_uncertainty:
diff --git a/libprocess/surface.c b/libprocess/surface.c
index 25124b0..168e35e 100644
--- a/libprocess/surface.c
+++ b/libprocess/surface.c
@@ -1,6 +1,6 @@
/*
- * $Id: surface.c 19186 2016-11-06 18:10:10Z yeti-dn $
- * Copyright (C) 2011-2016 David Nečas (Yeti).
+ * $Id: surface.c 20128 2017-08-01 11:19:59Z yeti-dn $
+ * Copyright (C) 2011-2017 David Nečas (Yeti).
* E-mail: yeti at gwyddion.net.
*
* This program is free software; you can redistribute it and/or modify
@@ -25,6 +25,7 @@
#include <libgwyddion/gwymacros.h>
#include <libgwyddion/gwymath.h>
#include <libgwyddion/gwymd5.h>
+#include <libgwyddion/gwyrandgenset.h>
#include <libgwyddion/gwydebugobjects.h>
#include <libprocess/surface.h>
#include <libprocess/stats.h>
@@ -50,7 +51,7 @@ static GObject* gwy_surface_duplicate_real (GObject *serializable);
static void gwy_surface_clone_real (GObject *destination,
GObject *source);
static void copy_info (GwySurface *dest,
- const GwySurface *src);
+ GwySurface *src);
static void ensure_ranges (GwySurface *surface);
static void ensure_checksum (GwySurface *surface);
@@ -121,17 +122,6 @@ free_data(GwySurface *surface)
}
static void
-ensure_units(GwySurface *surface)
-{
- Surface *priv = surface->priv;
-
- if (!priv->si_unit_xy)
- priv->si_unit_xy = gwy_si_unit_new(NULL);
- if (!priv->si_unit_z)
- priv->si_unit_z = gwy_si_unit_new(NULL);
-}
-
-static void
gwy_surface_finalize(GObject *object)
{
GwySurface *surface = GWY_SURFACE(object);
@@ -154,16 +144,18 @@ gwy_surface_serialize(GObject *obj,
{
GwySurface *surface;
guint32 datasize;
+ gpointer pxyunit, pzunit;
g_return_val_if_fail(GWY_IS_SURFACE(obj), NULL);
surface = GWY_SURFACE(obj);
- ensure_units(surface);
datasize = 3*surface->n;
+ pxyunit = unit_pointer_if_nonempty(surface->priv->si_unit_xy);
+ pzunit = unit_pointer_if_nonempty(surface->priv->si_unit_z);
{
GwySerializeSpec spec[] = {
- { 'o', "si_unit_xy", &surface->priv->si_unit_xy, NULL, },
- { 'o', "si_unit_z", &surface->priv->si_unit_z, NULL, },
+ { 'o', "si_unit_xy", pxyunit, NULL, },
+ { 'o', "si_unit_z", pzunit, NULL, },
{ 'D', "data", &surface->data, &datasize, },
};
return gwy_serialize_pack_object_struct(buffer,
@@ -177,16 +169,18 @@ gwy_surface_get_size(GObject *obj)
{
GwySurface *surface;
guint32 datasize;
+ gpointer pxyunit, pzunit;
g_return_val_if_fail(GWY_IS_SURFACE(obj), 0);
surface = GWY_SURFACE(obj);
- ensure_units(surface);
datasize = 3*surface->n;
+ pxyunit = unit_pointer_if_nonempty(surface->priv->si_unit_xy);
+ pzunit = unit_pointer_if_nonempty(surface->priv->si_unit_z);
{
GwySerializeSpec spec[] = {
- { 'o', "si_unit_xy", &surface->priv->si_unit_xy, NULL, },
- { 'o', "si_unit_z", &surface->priv->si_unit_z, NULL, },
+ { 'o', "si_unit_xy", pxyunit, NULL, },
+ { 'o', "si_unit_z", pzunit, NULL, },
{ 'D', "data", &surface->data, &datasize, },
};
return gwy_serialize_get_struct_size(GWY_SURFACE_TYPE_NAME,
@@ -279,31 +273,14 @@ gwy_surface_clone_real(GObject *source, GObject *copy)
}
static void
-copy_info(GwySurface *dest,
- const GwySurface *src)
+copy_info(GwySurface *dest, GwySurface *src)
{
Surface *dpriv = dest->priv, *spriv = src->priv;
- /* SI Units can be NULL */
- if (spriv->si_unit_xy && dpriv->si_unit_xy)
- gwy_serializable_clone(G_OBJECT(spriv->si_unit_xy),
- G_OBJECT(dpriv->si_unit_xy));
- else if (spriv->si_unit_xy && !dpriv->si_unit_xy)
- dpriv->si_unit_xy = gwy_si_unit_duplicate(spriv->si_unit_xy);
- else if (!spriv->si_unit_xy && dpriv->si_unit_xy)
- GWY_OBJECT_UNREF(dpriv->si_unit_xy);
-
- if (spriv->si_unit_z && dpriv->si_unit_z)
- gwy_serializable_clone(G_OBJECT(spriv->si_unit_z),
- G_OBJECT(dpriv->si_unit_z));
- else if (spriv->si_unit_z && !dpriv->si_unit_z)
- dpriv->si_unit_z = gwy_si_unit_duplicate(spriv->si_unit_z);
- else if (!spriv->si_unit_z && dpriv->si_unit_z)
- GWY_OBJECT_UNREF(dpriv->si_unit_z);
-
dpriv->cached_ranges = spriv->cached_ranges;
dpriv->min = spriv->min;
dpriv->max = spriv->max;
+ gwy_surface_copy_units(src, dest);
dpriv->cached_checksum = spriv->cached_checksum;
gwy_assign(dpriv->checksum, spriv->checksum, G_N_ELEMENTS(spriv->checksum));
@@ -768,13 +745,7 @@ gwy_surface_set_si_unit_xy(GwySurface *surface,
GwySIUnit *si_unit)
{
g_return_if_fail(GWY_IS_SURFACE(surface));
- g_return_if_fail(GWY_IS_SI_UNIT(si_unit));
- if (surface->priv->si_unit_xy == si_unit)
- return;
-
- GWY_OBJECT_UNREF(surface->priv->si_unit_xy);
- g_object_ref(si_unit);
- surface->priv->si_unit_xy = si_unit;
+ _gwy_set_object_si_unit(si_unit, &surface->priv->si_unit_xy);
}
/**
@@ -794,13 +765,7 @@ gwy_surface_set_si_unit_z(GwySurface *surface,
GwySIUnit *si_unit)
{
g_return_if_fail(GWY_IS_SURFACE(surface));
- g_return_if_fail(GWY_IS_SI_UNIT(si_unit));
- if (surface->priv->si_unit_z == si_unit)
- return;
-
- GWY_OBJECT_UNREF(surface->priv->si_unit_z);
- g_object_ref(si_unit);
- surface->priv->si_unit_z = si_unit;
+ _gwy_set_object_si_unit(si_unit, &surface->priv->si_unit_z);
}
/**
@@ -890,6 +855,26 @@ gwy_surface_get_value_format_z(GwySurface *surface,
}
/**
+ * gwy_surface_copy_units:
+ * @surface: A surface.
+ * @target: Target surface.
+ *
+ * Sets lateral and value units of a surface to match another surface.
+ *
+ * Since: 2.49
+ **/
+void
+gwy_surface_copy_units(GwySurface *surface,
+ GwySurface *target)
+{
+ g_return_if_fail(GWY_IS_SURFACE(surface));
+ g_return_if_fail(GWY_IS_SURFACE(target));
+
+ _gwy_assign_si_unit(surface->priv->si_unit_xy, &target->priv->si_unit_xy);
+ _gwy_assign_si_unit(surface->priv->si_unit_z, &target->priv->si_unit_z);
+}
+
+/**
* gwy_data_field_copy_units_to_surface:
* @data_field: A two-dimensional data field.
* @surface: A surface.
@@ -908,21 +893,8 @@ gwy_data_field_copy_units_to_surface(GwyDataField *data_field,
g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
priv = surface->priv;
- if (data_field->si_unit_xy && priv->si_unit_xy)
- gwy_serializable_clone(G_OBJECT(data_field->si_unit_xy),
- G_OBJECT(priv->si_unit_xy));
- else if (data_field->si_unit_xy && !priv->si_unit_xy)
- priv->si_unit_xy = gwy_si_unit_duplicate(data_field->si_unit_xy);
- else if (!data_field->si_unit_xy && priv->si_unit_xy)
- GWY_OBJECT_UNREF(priv->si_unit_xy);
-
- if (data_field->si_unit_z && priv->si_unit_z)
- gwy_serializable_clone(G_OBJECT(data_field->si_unit_z),
- G_OBJECT(priv->si_unit_z));
- else if (data_field->si_unit_z && !priv->si_unit_z)
- priv->si_unit_z = gwy_si_unit_duplicate(data_field->si_unit_z);
- else if (!data_field->si_unit_z && priv->si_unit_z)
- GWY_OBJECT_UNREF(priv->si_unit_z);
+ _gwy_assign_si_unit(data_field->si_unit_xy, &priv->si_unit_xy);
+ _gwy_assign_si_unit(data_field->si_unit_z, &priv->si_unit_z);
}
/**
@@ -944,21 +916,8 @@ gwy_surface_copy_units_to_data_field(GwySurface *surface,
g_return_if_fail(GWY_IS_DATA_FIELD(data_field));
priv = surface->priv;
- if (priv->si_unit_xy && data_field->si_unit_xy)
- gwy_serializable_clone(G_OBJECT(priv->si_unit_xy),
- G_OBJECT(data_field->si_unit_xy));
- else if (priv->si_unit_xy && !data_field->si_unit_xy)
- data_field->si_unit_xy = gwy_si_unit_duplicate(priv->si_unit_xy);
- else if (!priv->si_unit_xy && data_field->si_unit_xy)
- GWY_OBJECT_UNREF(data_field->si_unit_xy);
-
- if (priv->si_unit_z && data_field->si_unit_z)
- gwy_serializable_clone(G_OBJECT(priv->si_unit_z),
- G_OBJECT(data_field->si_unit_z));
- else if (priv->si_unit_z && !data_field->si_unit_z)
- data_field->si_unit_z = gwy_si_unit_duplicate(priv->si_unit_z);
- else if (!priv->si_unit_z && data_field->si_unit_z)
- GWY_OBJECT_UNREF(data_field->si_unit_z);
+ _gwy_assign_si_unit(priv->si_unit_xy, &data_field->si_unit_xy);
+ _gwy_assign_si_unit(priv->si_unit_z, &data_field->si_unit_z);
}
/**
@@ -1206,13 +1165,19 @@ gboolean
gwy_surface_xy_is_compatible(GwySurface *surface,
GwySurface *othersurface)
{
+ GwySIUnit *sunit, *ounit;
+ gboolean sempty, oempty;
+
g_return_val_if_fail(GWY_IS_SURFACE(surface), FALSE);
g_return_val_if_fail(GWY_IS_SURFACE(othersurface), FALSE);
- ensure_units(surface);
- ensure_units(othersurface);
- if (!gwy_si_unit_equal(surface->priv->si_unit_xy,
- othersurface->priv->si_unit_xy))
+ sunit = surface->priv->si_unit_xy;
+ ounit = othersurface->priv->si_unit_xy;
+ sempty = (!sunit || gwy_si_unit_equal_string(sunit, NULL));
+ oempty = (!ounit || gwy_si_unit_equal_string(ounit, NULL));
+ if ((sempty && !oempty)
+ || (!sempty && oempty)
+ || (!sempty && !oempty && !gwy_si_unit_equal(sunit, ounit)))
return FALSE;
ensure_checksum(surface);
@@ -1244,6 +1209,221 @@ ensure_checksum(GwySurface *surface)
}
/**
+ * gwy_surface_reduce_points:
+ * @surface: A surface.
+ * @npoints: Requested number of points in the reduced surface. If it is not
+ * smaller than the number of points in @surface then the function
+ * behaves like gwy_surface_duplicate().
+ *
+ * Creates a similar surface with smaller number of points.
+ *
+ * The functions attempts to choose points from the original surface to cover
+ * its full area, even though points from dense regions are still more likely
+ * to be found in the result than points from sparse regions. As the main
+ * purpose to enable quick rough operations that may take long time with the
+ * full surface, the focus is on speed not fidelity.
+ *
+ * The function may employ random selection and thus be be non-deterministic.
+ *
+ * Returns: A newly created #GwySurface with reduced number of points.
+ *
+ * Since: 2.48
+ **/
+GwySurface*
+gwy_surface_reduce_points(GwySurface *surface, guint npoints)
+{
+ GwyXYZ *srcdata, *destdata;
+ GwySurface *retval;
+ GwyRandGenSet *rngset;
+ GRand *rng;
+ gdouble xmin, xmax, ymin, ymax, xlen, ylen, d;
+ gboolean x_is_degenerate, y_is_degenerate;
+ gint k, n, xres = 1, yres = 1, i, j;
+ guint *redindex, *pts = NULL;
+ gint *grid;
+ guint ngrid = 0;
+
+ g_return_val_if_fail(GWY_IS_SURFACE(surface), NULL);
+ n = surface->n;
+ if (npoints >= surface->n)
+ return gwy_surface_duplicate(surface);
+ if (!npoints)
+ return gwy_surface_new_alike(surface);
+
+ gwy_debug("reducing from %u to %u", surface->n, npoints);
+ rngset = gwy_rand_gen_set_new(1);
+ rng = gwy_rand_gen_set_rng(rngset, 0);
+ srcdata = surface->data;
+
+ retval = gwy_surface_new_alike(surface);
+ retval->n = npoints;
+ alloc_data(retval);
+ destdata = retval->data;
+
+ /* If a reasonable number of points is requested try to spread them. */
+ if (npoints > 3) {
+ gwy_surface_get_xrange(surface, &xmin, &xmax);
+ gwy_surface_get_yrange(surface, &ymin, &ymax);
+ xlen = xmax - xmin;
+ ylen = ymax - ymin;
+ x_is_degenerate = (xmin >= xmax);
+ y_is_degenerate = (ymin >= ymax);
+ if (x_is_degenerate && y_is_degenerate) {
+ /* Choose points randomly */
+ gwy_debug("both x and y are degenerate");
+ d = 0.5*fmax(fabs(xmax), fabs(ymax));
+ if (d == 0.0)
+ d = 1.0;
+ }
+ if (x_is_degenerate && !y_is_degenerate) {
+ gwy_debug("x is degenerate");
+ /* Vertical line */
+ xres = 1;
+ yres = 3*npoints;
+ d = 0.5*ylen/yres;
+ }
+ else if (y_is_degenerate && !x_is_degenerate) {
+ gwy_debug("y is degenerate");
+ /* Horizontal line */
+ xres = 3*npoints;
+ yres = 1;
+ d = 0.5*xlen/xres;
+ }
+ else {
+ gwy_debug("neither x nor y is degenerate");
+ d = sqrt(4.0*xlen*ylen/npoints);
+ if (xlen >= ylen) {
+ yres = (gint)floor(ylen/d + 0.5);
+ xres = (4*npoints + yres-1)/yres;
+ gwy_debug("choosing using x");
+ }
+ else {
+ xres = (gint)floor(xlen/d + 0.5);
+ yres = (4*npoints + xres-1)/xres;
+ gwy_debug("choosing using y");
+ }
+ d *= 0.5;
+ }
+ if (!xres || !yres)
+ xres = yres = 1;
+ xmin -= d;
+ ymin -= d;
+ xmax += d;
+ ymax += d;
+ xlen = xmax - xmin;
+ ylen = ymax - ymin;
+ gwy_debug("xres %d, yres %d", xres, yres);
+ }
+
+ if (xres == 1 && yres == 1) {
+ redindex = gwy_rand_gen_set_choose_shuffle(rngset, 0, n, npoints);
+ for (k = 0; k < (gint)npoints; k++)
+ destdata[k] = srcdata[redindex[k]];
+ g_free(redindex);
+ gwy_rand_gen_set_free(rngset);
+ gwy_surface_invalidate(retval);
+ return retval;
+ }
+
+ /* Count the number of points in each rectangle. */
+ grid = g_new0(gint, xres*yres);
+ ngrid = 0;
+ for (k = 0; k < n; k++) {
+ j = (gint)floor((srcdata[k].x - xmin)/xlen*xres);
+ i = (gint)floor((srcdata[k].y - ymin)/ylen*yres);
+ j = GWY_CLAMP(j, 0, xres-1);
+ i = GWY_CLAMP(i, 0, yres-1);
+ if (!grid[i*xres + j])
+ ngrid++;
+ grid[i*xres + j]++;
+ }
+ gwy_debug("points in rectangles %u", ngrid);
+
+ /* Select one point in each rectangle by generating the index of
+ * point we should retain. */
+ if (ngrid < npoints) {
+ /* Use a point from each rectangle and then fill the rest randomly. */
+ for (i = 0; i < xres*yres; i++) {
+ if (grid[i] > 1)
+ grid[i] = g_rand_int_range(rng, 1, grid[i]+1);
+ }
+ /* Find the indices of selected points. */
+ pts = g_new0(guint, surface->n);
+ for (k = ngrid = 0; k < n; k++) {
+ j = (gint)floor((srcdata[k].x - xmin)/xlen*xres);
+ i = (gint)floor((srcdata[k].y - ymin)/ylen*yres);
+ j = GWY_CLAMP(j, 0, xres-1);
+ i = GWY_CLAMP(i, 0, yres-1);
+ if (grid[i*xres + j] > 1)
+ grid[i*xres + j]--;
+ else if (grid[i*xres + j] == 1) {
+ destdata[ngrid++] = srcdata[k];
+ pts[k] = TRUE;
+ grid[i*xres + j] = 0;
+ }
+ }
+
+ /* Start filling the new surface with points from rectangles. */
+ gwy_debug("filled from grid %u", ngrid);
+
+ /* Fill the rest with randomly selected points. */
+ for (i = j = 0; i < n; i++) {
+ if (!pts[i])
+ pts[j++] = i;
+ }
+ redindex = gwy_rand_gen_set_choose_shuffle(rngset, 0,
+ surface->n - ngrid,
+ npoints - ngrid);
+ for (k = 0; k < (gint)(npoints - ngrid); k++)
+ destdata[ngrid + k] = srcdata[pts[redindex[k]]];
+
+ g_free(pts);
+ g_free(redindex);
+ gwy_debug("filled randomly %u", (npoints - ngrid));
+ }
+ else {
+ if (ngrid > npoints) {
+ /* We have more points in rectangles than requested so remove some
+ * of them randomly. */
+ gwy_debug("removing %u rectangles", ngrid - npoints);
+ pts = g_new0(guint, ngrid);
+ for (i = j = 0; i < xres*yres; i++) {
+ if (grid[i])
+ pts[j++] = i;
+ }
+ redindex = gwy_rand_gen_set_choose_shuffle(rngset, 0, ngrid,
+ ngrid - npoints);
+ for (i = 0; i < ngrid - npoints; i++)
+ grid[pts[redindex[i]]] = 0;
+ g_free(redindex);
+ g_free(pts);
+ }
+
+ /* Use a point from each remaining rectangle. */
+ for (i = 0; i < xres*yres; i++) {
+ if (grid[i] > 1)
+ grid[i] = g_rand_int_range(rng, 1, grid[i]+1);
+ }
+ for (k = ngrid = 0; k < n; k++) {
+ j = (gint)floor((srcdata[k].x - xmin)/xlen*xres);
+ i = (gint)floor((srcdata[k].y - ymin)/ylen*yres);
+ j = GWY_CLAMP(j, 0, xres-1);
+ i = GWY_CLAMP(i, 0, yres-1);
+ if (grid[i*xres + j] > 1)
+ grid[i*xres + j]--;
+ else if (grid[i*xres + j] == 1) {
+ destdata[ngrid++] = srcdata[k];
+ grid[i*xres + j] = 0;
+ }
+ }
+ }
+ g_free(grid);
+ gwy_rand_gen_set_free(rngset);
+
+ return retval;
+}
+
+/**
* SECTION:surface
* @title: GwySurface
* @short_description: General two-dimensional data
diff --git a/libprocess/surface.h b/libprocess/surface.h
index 20ad62e..6ee2726 100644
--- a/libprocess/surface.h
+++ b/libprocess/surface.h
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: surface.h 18950 2016-09-12 08:34:24Z yeti-dn $
+ * @(#) $Id: surface.h 20128 2017-08-01 11:19:59Z yeti-dn $
* Copyright (C) 2011-2016 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -66,67 +66,71 @@ struct _GwySurfaceClass {
#define gwy_surface_clone(dest, src) \
(gwy_serializable_clone(G_OBJECT(dest), G_OBJECT(src)))
-GType gwy_surface_get_type (void) G_GNUC_CONST;
-GwySurface* gwy_surface_new (void);
-GwySurface* gwy_surface_new_sized (guint n);
-GwySurface* gwy_surface_new_from_data (const GwyXYZ *points,
- guint n);
-GwySurface* gwy_surface_new_alike (GwySurface *model);
-GwySurface* gwy_surface_new_part (GwySurface *surface,
- gdouble xfrom,
- gdouble xto,
- gdouble yfrom,
- gdouble yto);
-GwyXYZ* gwy_surface_get_data (GwySurface *surface);
-const GwyXYZ* gwy_surface_get_data_const (GwySurface *surface);
-guint gwy_surface_get_npoints (GwySurface *surface);
-void gwy_surface_data_changed (GwySurface *surface);
-void gwy_surface_copy (GwySurface *src,
- GwySurface *dest);
-void gwy_surface_invalidate (GwySurface *surface);
-void gwy_surface_set_from_data_field(GwySurface *surface,
- GwyDataField *data_field);
+GType gwy_surface_get_type (void) G_GNUC_CONST;
+GwySurface* gwy_surface_new (void);
+GwySurface* gwy_surface_new_sized (guint n);
+GwySurface* gwy_surface_new_from_data (const GwyXYZ *points,
+ guint n);
+GwySurface* gwy_surface_new_alike (GwySurface *model);
+GwySurface* gwy_surface_new_part (GwySurface *surface,
+ gdouble xfrom,
+ gdouble xto,
+ gdouble yfrom,
+ gdouble yto);
+GwyXYZ* gwy_surface_get_data (GwySurface *surface);
+const GwyXYZ* gwy_surface_get_data_const (GwySurface *surface);
+guint gwy_surface_get_npoints (GwySurface *surface);
+void gwy_surface_data_changed (GwySurface *surface);
+void gwy_surface_copy (GwySurface *src,
+ GwySurface *dest);
+void gwy_surface_invalidate (GwySurface *surface);
+void gwy_surface_set_from_data_field (GwySurface *surface,
+ GwyDataField *data_field);
void gwy_surface_set_from_data_field_mask(GwySurface *surface,
GwyDataField *data_field,
GwyDataField *mask,
GwyMaskingType masking);
-GwySIUnit* gwy_surface_get_si_unit_xy (GwySurface *surface);
-GwySIUnit* gwy_surface_get_si_unit_z (GwySurface *surface);
-void gwy_surface_set_si_unit_xy (GwySurface *surface,
- GwySIUnit *si_unit);
-void gwy_surface_set_si_unit_z (GwySurface *surface,
- GwySIUnit *si_unit);
-GwySIValueFormat* gwy_surface_get_value_format_xy(GwySurface *surface,
- GwySIUnitFormatStyle style,
- GwySIValueFormat *format);
-GwySIValueFormat* gwy_surface_get_value_format_z (GwySurface *surface,
- GwySIUnitFormatStyle style,
- GwySIValueFormat *format);
-void gwy_data_field_copy_units_to_surface(GwyDataField *data_field,
- GwySurface *surface);
-void gwy_surface_copy_units_to_data_field(GwySurface *surface,
- GwyDataField *data_field);
-GwyXYZ gwy_surface_get (GwySurface *surface,
- guint pos);
-void gwy_surface_set (GwySurface *surface,
- guint pos,
- GwyXYZ point);
-void gwy_surface_get_xrange (GwySurface *surface,
- gdouble *min,
- gdouble *max);
-void gwy_surface_get_yrange (GwySurface *surface,
- gdouble *min,
- gdouble *max);
-void gwy_surface_get_min_max (GwySurface *surface,
- gdouble *min,
- gdouble *max);
-const GwyXYZ* gwy_surface_get_data_full (GwySurface *surface,
- guint *n);
-void gwy_surface_set_data_full (GwySurface *surface,
- const GwyXYZ *points,
- guint n);
-gboolean gwy_surface_xy_is_compatible (GwySurface *surface,
- GwySurface *othersurface);
+GwySIUnit* gwy_surface_get_si_unit_xy (GwySurface *surface);
+GwySIUnit* gwy_surface_get_si_unit_z (GwySurface *surface);
+void gwy_surface_set_si_unit_xy (GwySurface *surface,
+ GwySIUnit *si_unit);
+void gwy_surface_set_si_unit_z (GwySurface *surface,
+ GwySIUnit *si_unit);
+GwySIValueFormat* gwy_surface_get_value_format_xy (GwySurface *surface,
+ GwySIUnitFormatStyle style,
+ GwySIValueFormat *format);
+GwySIValueFormat* gwy_surface_get_value_format_z (GwySurface *surface,
+ GwySIUnitFormatStyle style,
+ GwySIValueFormat *format);
+void gwy_surface_copy_units (GwySurface *surface,
+ GwySurface *target);
+void gwy_data_field_copy_units_to_surface(GwyDataField *data_field,
+ GwySurface *surface);
+void gwy_surface_copy_units_to_data_field(GwySurface *surface,
+ GwyDataField *data_field);
+GwyXYZ gwy_surface_get (GwySurface *surface,
+ guint pos);
+void gwy_surface_set (GwySurface *surface,
+ guint pos,
+ GwyXYZ point);
+void gwy_surface_get_xrange (GwySurface *surface,
+ gdouble *min,
+ gdouble *max);
+void gwy_surface_get_yrange (GwySurface *surface,
+ gdouble *min,
+ gdouble *max);
+void gwy_surface_get_min_max (GwySurface *surface,
+ gdouble *min,
+ gdouble *max);
+const GwyXYZ* gwy_surface_get_data_full (GwySurface *surface,
+ guint *n);
+void gwy_surface_set_data_full (GwySurface *surface,
+ const GwyXYZ *points,
+ guint n);
+gboolean gwy_surface_xy_is_compatible (GwySurface *surface,
+ GwySurface *othersurface);
+GwySurface* gwy_surface_reduce_points (GwySurface *surface,
+ guint npoints);
G_END_DECLS
diff --git a/libprocess/tip.c b/libprocess/tip.c
index 041faea..f2c8976 100644
--- a/libprocess/tip.c
+++ b/libprocess/tip.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: tip.c 19251 2016-11-14 08:42:00Z yeti-dn $
+ * @(#) $Id: tip.c 20155 2017-08-03 14:52:21Z yeti-dn $
* Copyright (C) 2003-2016 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -19,16 +19,14 @@
* Boston, MA 02110-1301, USA.
*/
-#include "config.h"
#include <string.h>
#include <libgwyddion/gwymacros.h>
#include <libgwyddion/gwymath.h>
#include <libprocess/filters.h>
#include <libprocess/stats.h>
#include <libprocess/grains.h>
-#include <libprocess/morph_lib.h>
-
-/* INTERPOLATION: New (not applicable). */
+#include <libprocess/tip.h>
+#include "morph_lib.h"
/* Update when new parameter type is added. */
enum {
@@ -44,6 +42,17 @@ typedef struct {
const GwyTipParamType *params;
} GwyTipModelPresetReal;
+GType
+gwy_tip_model_preset_get_type(void)
+{
+ static GType tipmodel_type = 0;
+
+ if (G_UNLIKELY(!tipmodel_type))
+ tipmodel_type = g_pointer_type_register_static("GwyTipModelPreset");
+
+ return tipmodel_type;
+}
+
static void
guess_symmetrical(GwyDataField *data,
gdouble height,
diff --git a/libprocess/tip.h b/libprocess/tip.h
index b742456..b188ea0 100644
--- a/libprocess/tip.h
+++ b/libprocess/tip.h
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: tip.h 19080 2016-10-14 13:59:02Z yeti-dn $
+ * @(#) $Id: tip.h 20145 2017-08-02 20:31:19Z yeti-dn $
* Copyright (C) 2003-2016 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -52,6 +52,9 @@ struct _GwyTipModelPreset {
};
#endif
+#define GWY_TYPE_TIP_MODEL_PRESET (gwy_tip_model_preset_get_type())
+
+GType gwy_tip_model_preset_get_type (void) G_GNUC_CONST;
gint gwy_tip_model_get_npresets (void);
const GwyTipModelPreset* gwy_tip_model_get_preset (gint preset_id);
const GwyTipModelPreset* gwy_tip_model_get_preset_by_name (const gchar *name);
diff --git a/libprocess/triangulation.c b/libprocess/triangulation.c
index 0e724b6..42cc37a 100644
--- a/libprocess/triangulation.c
+++ b/libprocess/triangulation.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: triangulation.c 19071 2016-10-14 09:02:41Z yeti-dn $
+ * @(#) $Id: triangulation.c 19698 2017-05-03 20:18:10Z yeti-dn $
* Copyright (C) 2009 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -18,7 +18,6 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*/
-#include "config.h"
#include <string.h>
#include <math.h>
#include <libgwyddion/gwymacros.h>
diff --git a/libprocess/wrappers.h b/libprocess/wrappers.h
deleted file mode 100644
index 26ad4cc..0000000
--- a/libprocess/wrappers.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * @(#) $Id: wrappers.h 15598 2013-11-11 12:33:32Z yeti-dn $
- * Copyright (C) 2011 David Necas (Yeti).
- * E-mail: yeti at gwyddion.net.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-/*< private_header >*/
-
-#ifndef __GWY_PROCESS_WRAPPERS_H__
-#define __GWY_PROCESS_WRAPPERS_H__
-
-#include <libprocess/datafield.h>
-#include "gwyprocessinternal.h"
-
-G_BEGIN_DECLS
-
-G_GNUC_INTERNAL
-void _gwy_data_field_get_min_max(GwyDataField *field,
- GwyDataField *mask,
- GwyMaskingType mode,
- const GwyFieldPart *fpart,
- gpointer params,
- gdouble *results);
-
-G_END_DECLS
-
-#endif /* __GWY_PROCESS_WRAPPERS_H__ */
-
-/* vim: set cin et ts=4 sw=4 cino=>1s,e0,n0,f0,{0,}0,^0,\:1s,=0,g1s,h0,t0,+1s,c3,(0,u0 : */
diff --git a/m4/Makefile.in b/m4/Makefile.in
index b641451..dd05ab9 100644
--- a/m4/Makefile.in
+++ b/m4/Makefile.in
@@ -171,10 +171,7 @@ EPYDOC = @EPYDOC@
EXEEXT = @EXEEXT@
EXR_CFLAGS = @EXR_CFLAGS@
EXR_LIBS = @EXR_LIBS@
-FFTW3_1_CFLAGS = @FFTW3_1_CFLAGS@
-FFTW3_1_LIBS = @FFTW3_1_LIBS@
FFTW3_CFLAGS = @FFTW3_CFLAGS@
-FFTW3_DEPENDENCY = @FFTW3_DEPENDENCY@
FFTW3_LIBS = @FFTW3_LIBS@
FGREP = @FGREP@
GCONFTOOL = @GCONFTOOL@
@@ -184,6 +181,8 @@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
GLIBC21 = @GLIBC21@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GMODULE_CFLAGS = @GMODULE_CFLAGS@
GMODULE_LIBS = @GMODULE_LIBS@
GMSGFMT = @GMSGFMT@
@@ -208,7 +207,9 @@ GTK_MAC_LIBS = @GTK_MAC_LIBS@
GWY_VERSION_MAJOR = @GWY_VERSION_MAJOR@
GWY_VERSION_MINOR = @GWY_VERSION_MINOR@
GWY_VERSION_STRING = @GWY_VERSION_STRING@
+HDRIMAGE_EXTRA_CFLAGS = @HDRIMAGE_EXTRA_CFLAGS@
HTML_DIR = @HTML_DIR@
+INKSCAPE = @INKSCAPE@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -266,6 +267,7 @@ PASCAL = @PASCAL@
PATH_SEPARATOR = @PATH_SEPARATOR@
PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
+PNGCRUSH = @PNGCRUSH@
PNG_CFLAGS = @PNG_CFLAGS@
PNG_LIBS = @PNG_LIBS@
POD2MAN = @POD2MAN@
@@ -274,17 +276,13 @@ PYGTK_CFLAGS = @PYGTK_CFLAGS@
PYGTK_CODEGENDIR = @PYGTK_CODEGENDIR@
PYGTK_LIBS = @PYGTK_LIBS@
PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
PYTHON_EXTRA_CFLAGS = @PYTHON_EXTRA_CFLAGS@
PYTHON_INCLUDES = @PYTHON_INCLUDES@
-PYTHON_LIBS = @PYTHON_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
PYTHON_PLATFORM = @PYTHON_PLATFORM@
PYTHON_PREFIX = @PYTHON_PREFIX@
-PYTHON_SYSCFG_BASECFLAGS = @PYTHON_SYSCFG_BASECFLAGS@
-PYTHON_SYSCFG_CCSHARED = @PYTHON_SYSCFG_CCSHARED@
-PYTHON_SYSCFG_LDFLAGS = @PYTHON_SYSCFG_LDFLAGS@
-PYTHON_SYSCFG_LIBDIR = @PYTHON_SYSCFG_LIBDIR@
-PYTHON_SYSCFG_LINKFORSHARED = @PYTHON_SYSCFG_LINKFORSHARED@
PYTHON_VERSION = @PYTHON_VERSION@
RANLIB = @RANLIB@
RUBY = @RUBY@
diff --git a/m4/gwy-enable.m4 b/m4/gwy-enable.m4
index 9a3674e..e14b3c6 100644
--- a/m4/gwy-enable.m4
+++ b/m4/gwy-enable.m4
@@ -4,12 +4,12 @@ AC_DEFUN([GWY_ENABLE],
[
AC_ARG_ENABLE([$1],
AS_HELP_STRING([--enable-$1],
- [$3 @<:@default=@:>@ifelse([$4],,[yes],[$4])]),
+ [$3 @<:@default=ifelse($4,,yes,$4)@:>@]),
[case "${enableval}" in
yes|no) ifelse([$2],,[enable_$1="$enableval"],[enable_$2="$enableval"]) ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-$1) ;;
esac],
- [ifelse([$2],,[enable_$1=ifelse([$4],,[yes],[$4])],[enable_$2=ifelse([$4],,[yes],[$4])])])
+ [ifelse($2,,[enable_$1=ifelse($4,,yes,$4)],[enable_$2=ifelse($4,,yes,$4)])])
])
dnl Create simple --with option $1, creating enable_$2 with help text $3,
@@ -18,10 +18,10 @@ AC_DEFUN([GWY_WITH],
[
AC_ARG_WITH([$1],
AS_HELP_STRING([--with-$1],
- [$3 @<:@default=@:>@ifelse([$4],,[yes],[$4])]),
+ [$3 @<:@default=ifelse($4,,yes,$4)@:>@]),
[case "${withval}" in
yes|no) ifelse([$2],,[enable_$1="$withval"],[enable_$2="$withval"]) ;;
*) AC_MSG_ERROR(bad value ${withval} for --with-$1) ;;
esac],
- [ifelse([$2],,[enable_$1=ifelse([$4],,[yes],[$4])],[enable_$2=ifelse([$4],,[yes],[$4])])])
+ [ifelse($2,,[enable_$1=ifelse($4,,yes,$4)],[enable_$2=ifelse($4,,yes,$4)])])
])
diff --git a/m4/gwy-python.m4 b/m4/gwy-python.m4
index 8c95d9c..c2fc441 100644
--- a/m4/gwy-python.m4
+++ b/m4/gwy-python.m4
@@ -1,78 +1,67 @@
-dnl GWY_PYTHON_SYSCFG_VAR(VARIABLE [,ACTION-ON-SUCCESS [,ACTION-ON-FAILURE]])
-dnl VARIABLE is a distutils.sysconfig variable such as LINKFORSHARED;
-dnl output variable PYTHON_SYSCFG_${VARIABLE} is always created,
-dnl filled with the value of VARIABLE on success, left empty on
-dnl failure
-dnl ACTION-ON-SUCCESS is executed when the value of VARIABLE was successfully
-dnl obtained
-dnl ACTION-ON-FAILURE is executed on any kind of failure (can't run Python
-dnl or anything)
-dnl
-dnl Requires: AM_PATH_PYTHON, as you probably want a particular minimum Python
-dnl version, call it yourself beforehand
-AC_DEFUN([GWY_PYTHON_SYSCFG_VAR],
-[
-AC_REQUIRE([AM_PATH_PYTHON])dnl
-AC_SUBST([PYTHON_SYSCFG_$1])
-AC_MSG_CHECKING([for python build option $1])
-if test -n "$PYTHON_SYSCFG_$1"; then
- AC_MSG_RESULT([$PYTHON_SYSCFG_$1])
- export PYTHON_SYSCFG_$1
- $2
+dnl Try to link a test program with already determined PYTHON_INCLUDES and
+dnl PYTHON_LDFLAGS (by whatever means necessary).
+dnl $1 = action on success
+dnl $2 = action on failure
+
+AC_DEFUN([GWY_PYTHON_TRY_LINK],
+[ac_save_CPPFLAGS="$CPPFLAGS"
+ac_save_LIBS="$LIBS"
+CPPFLAGS="$LIBS $PYTHON_INCLUDES"
+LIBS="$LIBS $PYTHON_LDFLAGS"
+AC_MSG_CHECKING([if we can link a test Python program])
+AC_LANG_PUSH([C])
+AC_LINK_IFELSE([
+AC_LANG_PROGRAM([[#include <Python.h>]],
+ [[Py_Initialize();]])
+],dnl
+[AC_MSG_RESULT([yes])
+$1],dnl
+[AC_MSG_RESULT([no])
+$2])
+AC_LANG_POP([C])
+CPPFLAGS="$ac_save_CPPFLAGS"
+LIBS="$ac_save_LIBS"
+])
+
+dnl Find flags for with-Python compilation and linking.
+dnl Originally suggested by wichert.
+dnl Rewritten by Yeti.
+dnl $1 = list of Python versions to try
+dnl $2 = action on success
+dnl $3 = action on failure
+AC_DEFUN([GWY_PYTHON_DEVEL],
+[if test "x$1" != x; then
+ for version in $1 ; do
+ AC_PATH_TOOL([PYTHON_CONFIG], [python$version-config])
+ if test "x$PYTHON_CONFIG" != x; then
+ PYTHON_VERSION=$version
+ break
+ fi
+ done
else
-cat >conftest.py <<\_______EOF
-import sys, distutils.sysconfig
-x = sys.argv[[1]].strip()
-v = distutils.sysconfig.get_config_var(x)
-if not isinstance(v, str):
- sys.stderr.write('Value of %s is not a string' % x)
- sys.exit(1)
-print 'PYTHON_SYSCFG_%s="%s"' % (x, v)
-print 'ac_res="%s"' % v
-_______EOF
+ AC_PATH_TOOL([PYTHON_CONFIG], [python-config])
+ if test "x$PYTHON_CONFIG" != x; then
+ PYTHON_VERSION=$(python -c "import sys;print '.'.join(map(str, sys.version_info@<:@:2@:>@))")
+ fi
+fi
-if $PYTHON conftest.py $1 >conftest.file 2>conftest.err && test ! -s conftest.err; then
- eval `cat conftest.file`
- AC_MSG_RESULT([$ac_res])
+if test "x$PYTHON_CONFIG" != x; then
+ PYTHON_INCLUDES="$("$PYTHON_CONFIG" --includes)"
+ PYTHON_LDFLAGS="$("$PYTHON_CONFIG" --ldflags)"
+ GWY_PYTHON_TRY_LINK([],[PYTHON_CONFIG=])
+fi
+
+if test "x$PYTHON_CONFIG" != x; then
$2
+ :
else
- AC_MSG_RESULT([unknown])
- cat conftest.err >&5
- echo "$as_me: failed program was:" >&5
- sed 's/^/| /' conftest.py >&5
- eval PYTHON_SYSCFG_$1=
+ PYTHON_INCLUDES=
+ PYTHON_LDFLAGS=
$3
fi
-rm -f conftest.py conftest.err conftest.file
-fi
-])
-
-## Find the install dirs for the python installation.
-## By James Henstridge
-## Fixed by Yeti because does not work on MS Windows
-dnl a macro to check for ability to create python extensions
-dnl AM_CHECK_PYTHON_HEADERS([ACTION-IF-POSSIBLE], [ACTION-IF-NOT-POSSIBLE])
-dnl function also defines PYTHON_INCLUDES
-AC_DEFUN([GWY_CHECK_PYTHON_HEADERS],
-[AC_REQUIRE([AM_PATH_PYTHON])
-AC_MSG_CHECKING(for headers required to compile python extensions)
-dnl deduce PYTHON_INCLUDES
-py_prefix=`$PYTHON -c "import sys; sys.stdout.write(sys.prefix.replace('\\\\\\\\','/'))"`
-py_exec_prefix=`$PYTHON -c "import sys; sys.stdout.write(sys.exec_prefix.replace('\\\\\\\\','/'))"`
-PYTHON_INCLUDES="-I${py_prefix}/include/python${PYTHON_VERSION}"
-if test "$py_prefix" != "$py_exec_prefix"; then
- PYTHON_INCLUDES="$PYTHON_INCLUDES -I${py_exec_prefix}/include/python${PYTHON_VERSION}"
-fi
-AC_SUBST(PYTHON_INCLUDES)
-dnl check if the headers exist:
-save_CPPFLAGS="$CPPFLAGS"
-CPPFLAGS="$CPPFLAGS $PYTHON_INCLUDES"
-AC_TRY_CPP([#include <Python.h>],dnl
-[AC_MSG_RESULT(found)
-$1],dnl
-[AC_MSG_RESULT(not found)
-$2])
-CPPFLAGS="$save_CPPFLAGS"
+AC_SUBST([PYTHON_VERSION])
+AC_SUBST([PYTHON_INCLUDES])
+AC_SUBST([PYTHON_LDFLAGS])
])
diff --git a/modules/Makefile.in b/modules/Makefile.in
index 34e7ffc..3b1a040 100644
--- a/modules/Makefile.in
+++ b/modules/Makefile.in
@@ -300,10 +300,7 @@ EPYDOC = @EPYDOC@
EXEEXT = @EXEEXT@
EXR_CFLAGS = @EXR_CFLAGS@
EXR_LIBS = @EXR_LIBS@
-FFTW3_1_CFLAGS = @FFTW3_1_CFLAGS@
-FFTW3_1_LIBS = @FFTW3_1_LIBS@
FFTW3_CFLAGS = @FFTW3_CFLAGS@
-FFTW3_DEPENDENCY = @FFTW3_DEPENDENCY@
FFTW3_LIBS = @FFTW3_LIBS@
FGREP = @FGREP@
GCONFTOOL = @GCONFTOOL@
@@ -313,6 +310,8 @@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
GLIBC21 = @GLIBC21@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GMODULE_CFLAGS = @GMODULE_CFLAGS@
GMODULE_LIBS = @GMODULE_LIBS@
GMSGFMT = @GMSGFMT@
@@ -337,7 +336,9 @@ GTK_MAC_LIBS = @GTK_MAC_LIBS@
GWY_VERSION_MAJOR = @GWY_VERSION_MAJOR@
GWY_VERSION_MINOR = @GWY_VERSION_MINOR@
GWY_VERSION_STRING = @GWY_VERSION_STRING@
+HDRIMAGE_EXTRA_CFLAGS = @HDRIMAGE_EXTRA_CFLAGS@
HTML_DIR = @HTML_DIR@
+INKSCAPE = @INKSCAPE@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -395,6 +396,7 @@ PASCAL = @PASCAL@
PATH_SEPARATOR = @PATH_SEPARATOR@
PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
+PNGCRUSH = @PNGCRUSH@
PNG_CFLAGS = @PNG_CFLAGS@
PNG_LIBS = @PNG_LIBS@
POD2MAN = @POD2MAN@
@@ -403,17 +405,13 @@ PYGTK_CFLAGS = @PYGTK_CFLAGS@
PYGTK_CODEGENDIR = @PYGTK_CODEGENDIR@
PYGTK_LIBS = @PYGTK_LIBS@
PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
PYTHON_EXTRA_CFLAGS = @PYTHON_EXTRA_CFLAGS@
PYTHON_INCLUDES = @PYTHON_INCLUDES@
-PYTHON_LIBS = @PYTHON_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
PYTHON_PLATFORM = @PYTHON_PLATFORM@
PYTHON_PREFIX = @PYTHON_PREFIX@
-PYTHON_SYSCFG_BASECFLAGS = @PYTHON_SYSCFG_BASECFLAGS@
-PYTHON_SYSCFG_CCSHARED = @PYTHON_SYSCFG_CCSHARED@
-PYTHON_SYSCFG_LDFLAGS = @PYTHON_SYSCFG_LDFLAGS@
-PYTHON_SYSCFG_LIBDIR = @PYTHON_SYSCFG_LIBDIR@
-PYTHON_SYSCFG_LINKFORSHARED = @PYTHON_SYSCFG_LINKFORSHARED@
PYTHON_VERSION = @PYTHON_VERSION@
RANLIB = @RANLIB@
RUBY = @RUBY@
diff --git a/modules/file/Makefile.am b/modules/file/Makefile.am
index 6757a0e..e9ffd97 100644
--- a/modules/file/Makefile.am
+++ b/modules/file/Makefile.am
@@ -1,4 +1,4 @@
-# @(#) $Id: Makefile.am 18773 2016-07-26 05:53:30Z yeti-dn $
+# @(#) $Id: Makefile.am 20186 2017-08-07 14:15:17Z yeti-dn $
# For each optional module foo there is variable foo_module that should be set
# to foo.la when the module is enabled.
@@ -105,7 +105,8 @@ hdrimage_module =
disabled_sources += hdrimage.cc
endif
-# Some modules require ‘any ZIP library’. We must choose one.
+# Some modules require ‘any ZIP library’. We must choose one. Configure
+# should ensure at most one of the following is enabled.
if HAVE_LIBZIP
zip_cflags = @LIBZIP_CFLAGS@
zip_libs = @LIBZIP_LIBS@
@@ -119,27 +120,29 @@ endif
# These modules compile also without the respective libraries so just add the
# flags if the libraries are available.
createc_la_LIBADD = @ZLIB@
-nrrdfile_la_LIBADD = @ZLIB@ @BZIP2@
-pixmap_la_LIBADD = @PNG_LIBS@
-pixmap_la_CFLAGS = $(AM_CFLAGS) @PNG_CFLAGS@
+hdrimage_la_LIBADD = @EXR_LIBS@ @PNG_LIBS@
+hdrimage_la_CXXFLAGS = $(AM_CXXFLAGS) @PNG_CFLAGS@ @EXR_CFLAGS@ @HDRIMAGE_EXTRA_CFLAGS@
imgexport_la_LIBADD = @PNG_LIBS@ @WEBP_LIBS@
imgexport_la_CFLAGS = $(AM_CFLAGS) @PNG_CFLAGS@ @WEBP_CFLAGS@
-rhk_sm4_la_LIBADD = @ZLIB@
-hdrimage_la_LIBADD = @EXR_LIBS@ @PNG_LIBS@
-hdrimage_la_CXXFLAGS = $(AM_CXXFLAGS) @PNG_CFLAGS@ @EXR_CFLAGS@
jpkscan_la_CFLAGS = $(AM_CFLAGS) $(zip_cflags)
jpkscan_la_LIBADD = $(zip_libs)
+nrrdfile_la_LIBADD = @ZLIB@ @BZIP2@
+pixmap_la_LIBADD = @PNG_LIBS@
+pixmap_la_CFLAGS = $(AM_CFLAGS) @PNG_CFLAGS@
+rhk_sm4_la_LIBADD = @ZLIB@
filedir = $(pkglibdir)/modules/file
-file_LTLIBRARIES = \
+# Only bundle modules without own dependencies. If something goes wrong with
+# any required libraries at run-time, it will at most break these individual
+# unbundled modules, not the bundle.
+bundlable_modules = \
accurexii-txt.la \
aistfile.la \
alicona.la \
ambfile.la \
anfatec.la \
apefile.la \
- $(apedaxfile_module) \
asciiexport.la \
assing-afm.la \
attocube.la \
@@ -148,8 +151,8 @@ file_LTLIBRARIES = \
burleigh_bii.la \
burleigh_exp.la \
codevfile.la \
- createc.la \
csmfile.la \
+ dektakvca.la \
dektakxml.la \
dimensionfile.la \
dmefile.la \
@@ -157,7 +160,6 @@ file_LTLIBRARIES = \
dumbfile.la \
ecsfile.la \
ezdfile.la \
- $(fitsfile_module) \
femtoscan.la \
femtoscan-txt.la \
gdeffile.la \
@@ -165,23 +167,19 @@ file_LTLIBRARIES = \
gwyfile.la \
gxyzffile.la \
hdf4file.la \
- $(hdrimage_module) \
hitachi-afm.la \
hitachi-sem.la \
igorfile.la \
- imgexport.la \
intelliwave.la \
intematix.la \
iso28600.la \
jeol.la \
- jpkscan.la \
jspmfile.la \
keyence.la \
leica.la \
lextfile.la \
magellan.la \
mapvue.la \
- $(matfile_module) \
metropro.la \
microprof.la \
miffile.la \
@@ -191,15 +189,12 @@ file_LTLIBRARIES = \
nanomagnetics.la \
nanonics.la \
nanonis.la \
- $(nanoobserver_module) \
nanoscan.la \
- $(nanoscantech_module) \
nanoscope-ii.la \
nanoscope.la \
nanotop.la \
netcdf.la \
nmmxyz.la \
- nrrdfile.la \
nt-mdt.la \
nxiifile.la \
oldmda.la \
@@ -209,8 +204,6 @@ file_LTLIBRARIES = \
omicronflat.la \
omicronmatrix.la \
opdfile.la \
- $(opengps_module) \
- pixmap.la \
pnifile.la \
pltfile.la \
princetonspe.la \
@@ -222,23 +215,19 @@ file_LTLIBRARIES = \
rawxyz.la \
renishaw.la \
rhk-sm3.la \
- rhk-sm4.la \
rhk-spm32.la \
robotics.la \
s94file.la \
sdfile.la \
seiko.la \
sensofar.la \
- $(sensofarx_module) \
sensolytics.la \
shimadzu.la \
sicmfile.la \
sis.la \
spip-asc.la \
- $(spml_module) \
spmlab.la \
spmlabf.la \
- $(spmxfile_module) \
stmprg.la \
stpfile.la \
surffile.la \
@@ -254,8 +243,37 @@ file_LTLIBRARIES = \
wsxmfile.la \
xyzexport.la \
zeiss.la \
+ zeisslsm.la \
zemax.la
+# file_modules is either the bundle or all the individual modules.
+if MODULE_BUNDLING
+file_modules = file.la
+BUILT_SOURCES = file.c
+file_la_CFLAGS = $(AM_CFLAGS) -DGWY_MODULE_BUNDLING
+else
+file_modules = $(bundlable_modules)
+endif
+
+file_LTLIBRARIES = \
+ $(file_modules) \
+ createc.la \
+ imgexport.la \
+ jpkscan.la \
+ nrrdfile.la \
+ pixmap.la \
+ rhk-sm4.la \
+ $(apedaxfile_module) \
+ $(fitsfile_module) \
+ $(hdrimage_module) \
+ $(matfile_module) \
+ $(nanoobserver_module) \
+ $(nanoscantech_module) \
+ $(opengps_module) \
+ $(sensofarx_module) \
+ $(spml_module) \
+ $(spmxfile_module)
+
noinst_HEADERS = \
err.h \
get.h
@@ -268,6 +286,11 @@ if OS_MSWIN
no_undefined = -no-undefined
endif
+AM_CPPFLAGS = -I$(top_srcdir) -DG_LOG_DOMAIN=\"Module\"
+AM_CFLAGS = @COMMON_CFLAGS@
+AM_CXXFLAGS = @COMMON_CXXFLAGS@
+AM_LDFLAGS = -avoid-version -module $(no_undefined) $(module_libadd)
+
if MODULE_DEPENDENCIES
module_libadd = \
$(top_builddir)/app/libgwyapp2.la \
@@ -279,11 +302,15 @@ module_libadd = \
@GTK_LIBS@
endif
-AM_CPPFLAGS = -I$(top_srcdir) -DG_LOG_DOMAIN=\"Module\"
-AM_CFLAGS = @COMMON_CFLAGS@
-AM_CXXFLAGS = @COMMON_CXXFLAGS@
-AM_LDFLAGS = -avoid-version -module $(no_undefined) $(module_libadd)
+# Standalone modules
+createc_la_SOURCES = createc.c
+imgexport_la_SOURCES = imgexport.c imgexportpreset.h gwytiff.h image-keys.h
+jpkscan_la_SOURCES = jpkscan.c jpk.h gwytiff.h
+pixmap_la_SOURCES = pixmap.c gwytiff.h image-keys.h
+rhk_sm4_la_SOURCES = rhk-sm4.c
+nrrdfile_la_SOURCES = nrrdfile.c
+# Bundlable modules, must be listed in file_la_SOURCES below.
accurexii_txt_la_SOURCES = accurexii-txt.c
aistfile_la_SOURCES = aistfile.c
alicona_la_SOURCES = alicona.c
@@ -297,9 +324,9 @@ bcrfile_la_SOURCES = bcrfile.c
burleigh_la_SOURCES = burleigh.c
burleigh_bii_la_SOURCES = burleigh_bii.c
burleigh_exp_la_SOURCES = burleigh_exp.c
-createc_la_SOURCES = createc.c
codevfile_la_SOURCES = codevfile.c
csmfile_la_SOURCES = csmfile.c
+dektakvca_la_SOURCES = dektakvca.c
dektakxml_la_SOURCES = dektakxml.c
dimensionfile_la_SOURCES = dimensionfile.c
dmefile_la_SOURCES = dmefile.c
@@ -317,12 +344,10 @@ hdf4file_la_SOURCES = hdf4file.c
hitachi_afm_la_SOURCES = hitachi-afm.c
hitachi_sem_la_SOURCES = hitachi-sem.c
igorfile_la_SOURCES = igorfile.c
-imgexport_la_SOURCES = imgexport.c imgexportpreset.h gwytiff.h image-keys.h
intelliwave_la_SOURCES = intelliwave.c
intematix_la_SOURCES = intematix.c gwytiff.h
iso28600_la_SOURCES = iso28600.c
jeol_la_SOURCES = jeol.c
-jpkscan_la_SOURCES = jpkscan.c jpk.h gwytiff.h
jspmfile_la_SOURCES = jspmfile.c
keyence_la_SOURCES = keyence.c
leica_la_SOURCES = leica.c
@@ -344,17 +369,15 @@ nanoscope_la_SOURCES = nanoscope.c
nanotop_la_SOURCES = nanotop.c
netcdf_la_SOURCES = netcdf.c
nmmxyz_la_SOURCES = nmmxyz.c
-nrrdfile_la_SOURCES = nrrdfile.c
nt_mdt_la_SOURCES = nt-mdt.c
nxiifile_la_SOURCES = nxiifile.c
oldmda_la_SOURCES = oldmda.c
ols_la_SOURCES = ols.c gwytiff.h
-ometiff_la_SOURCES = ometiff.c
+ometiff_la_SOURCES = ometiff.c gwytiff.h
omicron_la_SOURCES = omicron.c
omicronflat_la_SOURCES = omicronflat.c
omicronmatrix_la_SOURCES = omicronmatrix.c
opdfile_la_SOURCES = opdfile.c
-pixmap_la_SOURCES = pixmap.c gwytiff.h image-keys.h
pnifile_la_SOURCES = pnifile.c
pltfile_la_SOURCES = pltfile.c
princetonspe_la_SOURCES = princetonspe.c
@@ -366,7 +389,6 @@ rawgraph_la_SOURCES = rawgraph.c
rawxyz_la_SOURCES = rawxyz.c
renishaw_la_SOURCES = renishaw.c
rhk_sm3_la_SOURCES = rhk-sm3.c
-rhk_sm4_la_SOURCES = rhk-sm4.c
rhk_spm32_la_SOURCES = rhk-spm32.c
robotics_la_SOURCES = robotics.c
s94file_la_SOURCES = s94file.c
@@ -384,7 +406,7 @@ stmprg_la_SOURCES = stmprg.c
stpfile_la_SOURCES = stpfile.c
surffile_la_SOURCES = surffile.c
tiaser_la_SOURCES = tiaser.c
-tescan_la_SOURCES = tescan.c
+tescan_la_SOURCES = tescan.c gwytiff.h
unisoku_la_SOURCES = unisoku.c
vtkfile_la_SOURCES = vtkfile.c
win_stm_la_SOURCES = win_stm.c
@@ -394,8 +416,125 @@ witec_asc_la_SOURCES = witec-asc.c
wsffile_la_SOURCES = wsffile.c
wsxmfile_la_SOURCES = wsxmfile.c
xyzexport_la_SOURCES = xyzexport.c
-zeiss_la_SOURCES = zeiss.c
+zeiss_la_SOURCES = zeiss.c gwytiff.h
+zeisslsm_la_SOURCES = zeisslsm.c gwytiff.h
zemax_la_SOURCES = zemax.c
+file_la_SOURCES = \
+ $(accurexii_txt_la_SOURCES) \
+ $(aistfile_la_SOURCES) \
+ $(alicona_la_SOURCES) \
+ $(ambfile_la_SOURCES) \
+ $(anfatec_la_SOURCES) \
+ $(apefile_la_SOURCES) \
+ $(asciiexport_la_SOURCES) \
+ $(assing_afm_la_SOURCES) \
+ $(attocube_la_SOURCES) \
+ $(bcrfile_la_SOURCES) \
+ $(burleigh_la_SOURCES) \
+ $(burleigh_bii_la_SOURCES) \
+ $(burleigh_exp_la_SOURCES) \
+ $(codevfile_la_SOURCES) \
+ $(csmfile_la_SOURCES) \
+ $(dektakvca_la_SOURCES) \
+ $(dektakxml_la_SOURCES) \
+ $(dimensionfile_la_SOURCES) \
+ $(dmefile_la_SOURCES) \
+ $(dm3file_la_SOURCES) \
+ $(dumbfile_la_SOURCES) \
+ $(ecsfile_la_SOURCES) \
+ $(ezdfile_la_SOURCES) \
+ $(femtoscan_la_SOURCES) \
+ $(femtoscan_txt_la_SOURCES) \
+ $(gdeffile_la_SOURCES) \
+ $(gsffile_la_SOURCES) \
+ $(gwyfile_la_SOURCES) \
+ $(gxyzffile_la_SOURCES) \
+ $(hdf4file_la_SOURCES) \
+ $(hitachi_afm_la_SOURCES) \
+ $(hitachi_sem_la_SOURCES) \
+ $(igorfile_la_SOURCES) \
+ $(intelliwave_la_SOURCES) \
+ $(intematix_la_SOURCES) \
+ $(iso28600_la_SOURCES) \
+ $(jeol_la_SOURCES) \
+ $(jspmfile_la_SOURCES) \
+ $(keyence_la_SOURCES) \
+ $(leica_la_SOURCES) \
+ $(lextfile_la_SOURCES) \
+ $(magellan_la_SOURCES) \
+ $(mapvue_la_SOURCES) \
+ $(metropro_la_SOURCES) \
+ $(microprof_la_SOURCES) \
+ $(miffile_la_SOURCES) \
+ $(mifile_la_SOURCES) \
+ $(mulfile_la_SOURCES) \
+ $(nanoeducator_la_SOURCES) \
+ $(nanomagnetics_la_SOURCES) \
+ $(nanonics_la_SOURCES) \
+ $(nanonis_la_SOURCES) \
+ $(nanoscan_la_SOURCES) \
+ $(nanoscope_ii_la_SOURCES) \
+ $(nanoscope_la_SOURCES) \
+ $(nanotop_la_SOURCES) \
+ $(netcdf_la_SOURCES) \
+ $(nmmxyz_la_SOURCES) \
+ $(nt_mdt_la_SOURCES) \
+ $(nxiifile_la_SOURCES) \
+ $(oldmda_la_SOURCES) \
+ $(ols_la_SOURCES) \
+ $(ometiff_la_SOURCES) \
+ $(omicron_la_SOURCES) \
+ $(omicronflat_la_SOURCES) \
+ $(omicronmatrix_la_SOURCES) \
+ $(opdfile_la_SOURCES) \
+ $(pnifile_la_SOURCES) \
+ $(pltfile_la_SOURCES) \
+ $(princetonspe_la_SOURCES) \
+ $(psia_la_SOURCES) \
+ $(pt3file_la_SOURCES) \
+ $(quesant_la_SOURCES) \
+ $(rawfile_la_SOURCES) \
+ $(rawgraph_la_SOURCES) \
+ $(rawxyz_la_SOURCES) \
+ $(renishaw_la_SOURCES) \
+ $(rhk_sm3_la_SOURCES) \
+ $(rhk_spm32_la_SOURCES) \
+ $(robotics_la_SOURCES) \
+ $(s94file_la_SOURCES) \
+ $(sdfile_la_SOURCES) \
+ $(seiko_la_SOURCES) \
+ $(sensofar_la_SOURCES) \
+ $(sensolytics_la_SOURCES) \
+ $(shimadzu_la_SOURCES) \
+ $(sicmfile_la_SOURCES) \
+ $(sis_la_SOURCES) \
+ $(spip_asc_la_SOURCES) \
+ $(spmlab_la_SOURCES) \
+ $(spmlabf_la_SOURCES) \
+ $(stmprg_la_SOURCES) \
+ $(stpfile_la_SOURCES) \
+ $(surffile_la_SOURCES) \
+ $(tiaser_la_SOURCES) \
+ $(tescan_la_SOURCES) \
+ $(unisoku_la_SOURCES) \
+ $(vtkfile_la_SOURCES) \
+ $(win_stm_la_SOURCES) \
+ $(wipfile_la_SOURCES) \
+ $(witfile_la_SOURCES) \
+ $(witec_asc_la_SOURCES) \
+ $(wsffile_la_SOURCES) \
+ $(wsxmfile_la_SOURCES) \
+ $(xyzexport_la_SOURCES) \
+ $(zeiss_la_SOURCES) \
+ $(zeisslsm_la_SOURCES) \
+ $(zemax_la_SOURCES) \
+ file.c
+
+file.c: $(srcdir)/Makefile.am $(top_builddir)/config.status $(top_srcdir)/utils/gen-module-bundle.sh
+ $(SHELL) $(top_srcdir)/utils/gen-module-bundle.sh file.c $(bundlable_modules)
+
+CLEAN_FILES = file.c
+
clean-local:
rm -f core.* *~
diff --git a/modules/file/Makefile.in b/modules/file/Makefile.in
index 5ab28e7..208073f 100644
--- a/modules/file/Makefile.in
+++ b/modules/file/Makefile.in
@@ -14,7 +14,7 @@
@SET_MAKE@
-# @(#) $Id: Makefile.am 18773 2016-07-26 05:53:30Z yeti-dn $
+# @(#) $Id: Makefile.am 20186 2017-08-07 14:15:17Z yeti-dn $
VPATH = @srcdir@
@@ -154,18 +154,23 @@ AM_V_lt = $(am__v_lt_ at AM_V@)
am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
am__v_lt_0 = --silent
am__v_lt_1 =
+ at MODULE_BUNDLING_FALSE@am_accurexii_txt_la_rpath = -rpath $(filedir)
aistfile_la_LIBADD =
am_aistfile_la_OBJECTS = aistfile.lo
aistfile_la_OBJECTS = $(am_aistfile_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_aistfile_la_rpath = -rpath $(filedir)
alicona_la_LIBADD =
am_alicona_la_OBJECTS = alicona.lo
alicona_la_OBJECTS = $(am_alicona_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_alicona_la_rpath = -rpath $(filedir)
ambfile_la_LIBADD =
am_ambfile_la_OBJECTS = ambfile.lo
ambfile_la_OBJECTS = $(am_ambfile_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_ambfile_la_rpath = -rpath $(filedir)
anfatec_la_LIBADD =
am_anfatec_la_OBJECTS = anfatec.lo
anfatec_la_OBJECTS = $(am_anfatec_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_anfatec_la_rpath = -rpath $(filedir)
am__DEPENDENCIES_1 =
@HAVE_ANY_ZIP_TRUE@@HAVE_XML2_TRUE at apedaxfile_la_DEPENDENCIES = \
@HAVE_ANY_ZIP_TRUE@@HAVE_XML2_TRUE@ $(am__DEPENDENCIES_1)
@@ -180,63 +185,237 @@ apedaxfile_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
apefile_la_LIBADD =
am_apefile_la_OBJECTS = apefile.lo
apefile_la_OBJECTS = $(am_apefile_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_apefile_la_rpath = -rpath $(filedir)
asciiexport_la_LIBADD =
am_asciiexport_la_OBJECTS = asciiexport.lo
asciiexport_la_OBJECTS = $(am_asciiexport_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_asciiexport_la_rpath = -rpath $(filedir)
assing_afm_la_LIBADD =
am_assing_afm_la_OBJECTS = assing-afm.lo
assing_afm_la_OBJECTS = $(am_assing_afm_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_assing_afm_la_rpath = -rpath $(filedir)
attocube_la_LIBADD =
am_attocube_la_OBJECTS = attocube.lo
attocube_la_OBJECTS = $(am_attocube_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_attocube_la_rpath = -rpath $(filedir)
bcrfile_la_LIBADD =
am_bcrfile_la_OBJECTS = bcrfile.lo
bcrfile_la_OBJECTS = $(am_bcrfile_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_bcrfile_la_rpath = -rpath $(filedir)
burleigh_la_LIBADD =
am_burleigh_la_OBJECTS = burleigh.lo
burleigh_la_OBJECTS = $(am_burleigh_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_burleigh_la_rpath = -rpath $(filedir)
burleigh_bii_la_LIBADD =
am_burleigh_bii_la_OBJECTS = burleigh_bii.lo
burleigh_bii_la_OBJECTS = $(am_burleigh_bii_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_burleigh_bii_la_rpath = -rpath $(filedir)
burleigh_exp_la_LIBADD =
am_burleigh_exp_la_OBJECTS = burleigh_exp.lo
burleigh_exp_la_OBJECTS = $(am_burleigh_exp_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_burleigh_exp_la_rpath = -rpath $(filedir)
codevfile_la_LIBADD =
am_codevfile_la_OBJECTS = codevfile.lo
codevfile_la_OBJECTS = $(am_codevfile_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_codevfile_la_rpath = -rpath $(filedir)
createc_la_DEPENDENCIES =
am_createc_la_OBJECTS = createc.lo
createc_la_OBJECTS = $(am_createc_la_OBJECTS)
csmfile_la_LIBADD =
am_csmfile_la_OBJECTS = csmfile.lo
csmfile_la_OBJECTS = $(am_csmfile_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_csmfile_la_rpath = -rpath $(filedir)
+dektakvca_la_LIBADD =
+am_dektakvca_la_OBJECTS = dektakvca.lo
+dektakvca_la_OBJECTS = $(am_dektakvca_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_dektakvca_la_rpath = -rpath $(filedir)
dektakxml_la_LIBADD =
am_dektakxml_la_OBJECTS = dektakxml.lo
dektakxml_la_OBJECTS = $(am_dektakxml_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_dektakxml_la_rpath = -rpath $(filedir)
dimensionfile_la_LIBADD =
am_dimensionfile_la_OBJECTS = dimensionfile.lo
dimensionfile_la_OBJECTS = $(am_dimensionfile_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_dimensionfile_la_rpath = -rpath $(filedir)
dm3file_la_LIBADD =
am_dm3file_la_OBJECTS = dm3file.lo
dm3file_la_OBJECTS = $(am_dm3file_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_dm3file_la_rpath = -rpath $(filedir)
dmefile_la_LIBADD =
am_dmefile_la_OBJECTS = dmefile.lo
dmefile_la_OBJECTS = $(am_dmefile_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_dmefile_la_rpath = -rpath $(filedir)
dumbfile_la_LIBADD =
am_dumbfile_la_OBJECTS = dumbfile.lo
dumbfile_la_OBJECTS = $(am_dumbfile_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_dumbfile_la_rpath = -rpath $(filedir)
ecsfile_la_LIBADD =
am_ecsfile_la_OBJECTS = ecsfile.lo
ecsfile_la_OBJECTS = $(am_ecsfile_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_ecsfile_la_rpath = -rpath $(filedir)
ezdfile_la_LIBADD =
am_ezdfile_la_OBJECTS = ezdfile.lo
ezdfile_la_OBJECTS = $(am_ezdfile_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_ezdfile_la_rpath = -rpath $(filedir)
femtoscan_txt_la_LIBADD =
am_femtoscan_txt_la_OBJECTS = femtoscan-txt.lo
femtoscan_txt_la_OBJECTS = $(am_femtoscan_txt_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_femtoscan_txt_la_rpath = -rpath $(filedir)
femtoscan_la_LIBADD =
am_femtoscan_la_OBJECTS = femtoscan.lo
femtoscan_la_OBJECTS = $(am_femtoscan_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_femtoscan_la_rpath = -rpath $(filedir)
+file_la_LIBADD =
+am__objects_1 = file_la-accurexii-txt.lo
+am__objects_2 = file_la-aistfile.lo
+am__objects_3 = file_la-alicona.lo
+am__objects_4 = file_la-ambfile.lo
+am__objects_5 = file_la-anfatec.lo
+am__objects_6 = file_la-apefile.lo
+am__objects_7 = file_la-asciiexport.lo
+am__objects_8 = file_la-assing-afm.lo
+am__objects_9 = file_la-attocube.lo
+am__objects_10 = file_la-bcrfile.lo
+am__objects_11 = file_la-burleigh.lo
+am__objects_12 = file_la-burleigh_bii.lo
+am__objects_13 = file_la-burleigh_exp.lo
+am__objects_14 = file_la-codevfile.lo
+am__objects_15 = file_la-csmfile.lo
+am__objects_16 = file_la-dektakvca.lo
+am__objects_17 = file_la-dektakxml.lo
+am__objects_18 = file_la-dimensionfile.lo
+am__objects_19 = file_la-dmefile.lo
+am__objects_20 = file_la-dm3file.lo
+am__objects_21 = file_la-dumbfile.lo
+am__objects_22 = file_la-ecsfile.lo
+am__objects_23 = file_la-ezdfile.lo
+am__objects_24 = file_la-femtoscan.lo
+am__objects_25 = file_la-femtoscan-txt.lo
+am__objects_26 = file_la-gdeffile.lo
+am__objects_27 = file_la-gsffile.lo
+am__objects_28 = file_la-gwyfile.lo
+am__objects_29 = file_la-gxyzffile.lo
+am__objects_30 = file_la-hdf4file.lo
+am__objects_31 = file_la-hitachi-afm.lo
+am__objects_32 = file_la-hitachi-sem.lo
+am__objects_33 = file_la-igorfile.lo
+am__objects_34 = file_la-intelliwave.lo
+am__objects_35 = file_la-intematix.lo
+am__objects_36 = file_la-iso28600.lo
+am__objects_37 = file_la-jeol.lo
+am__objects_38 = file_la-jspmfile.lo
+am__objects_39 = file_la-keyence.lo
+am__objects_40 = file_la-leica.lo
+am__objects_41 = file_la-lextfile.lo
+am__objects_42 = file_la-magellan.lo
+am__objects_43 = file_la-mapvue.lo
+am__objects_44 = file_la-metropro.lo
+am__objects_45 = file_la-microprof.lo
+am__objects_46 = file_la-miffile.lo
+am__objects_47 = file_la-mifile.lo
+am__objects_48 = file_la-mulfile.lo
+am__objects_49 = file_la-nanoeducator.lo
+am__objects_50 = file_la-nanomagnetics.lo
+am__objects_51 = file_la-nanonics.lo
+am__objects_52 = file_la-nanonis.lo
+am__objects_53 = file_la-nanoscan.lo
+am__objects_54 = file_la-nanoscope-ii.lo
+am__objects_55 = file_la-nanoscope.lo
+am__objects_56 = file_la-nanotop.lo
+am__objects_57 = file_la-netcdf.lo
+am__objects_58 = file_la-nmmxyz.lo
+am__objects_59 = file_la-nt-mdt.lo
+am__objects_60 = file_la-nxiifile.lo
+am__objects_61 = file_la-oldmda.lo
+am__objects_62 = file_la-ols.lo
+am__objects_63 = file_la-ometiff.lo
+am__objects_64 = file_la-omicron.lo
+am__objects_65 = file_la-omicronflat.lo
+am__objects_66 = file_la-omicronmatrix.lo
+am__objects_67 = file_la-opdfile.lo
+am__objects_68 = file_la-pnifile.lo
+am__objects_69 = file_la-pltfile.lo
+am__objects_70 = file_la-princetonspe.lo
+am__objects_71 = file_la-psia.lo
+am__objects_72 = file_la-pt3file.lo
+am__objects_73 = file_la-quesant.lo
+am__objects_74 = file_la-rawfile.lo
+am__objects_75 = file_la-rawgraph.lo
+am__objects_76 = file_la-rawxyz.lo
+am__objects_77 = file_la-renishaw.lo
+am__objects_78 = file_la-rhk-sm3.lo
+am__objects_79 = file_la-rhk-spm32.lo
+am__objects_80 = file_la-robotics.lo
+am__objects_81 = file_la-s94file.lo
+am__objects_82 = file_la-sdfile.lo
+am__objects_83 = file_la-seiko.lo
+am__objects_84 = file_la-sensofar.lo
+am__objects_85 = file_la-sensolytics.lo
+am__objects_86 = file_la-shimadzu.lo
+am__objects_87 = file_la-sicmfile.lo
+am__objects_88 = file_la-sis.lo
+am__objects_89 = file_la-spip-asc.lo
+am__objects_90 = file_la-spmlab.lo
+am__objects_91 = file_la-spmlabf.lo
+am__objects_92 = file_la-stmprg.lo
+am__objects_93 = file_la-stpfile.lo
+am__objects_94 = file_la-surffile.lo
+am__objects_95 = file_la-tiaser.lo
+am__objects_96 = file_la-tescan.lo
+am__objects_97 = file_la-unisoku.lo
+am__objects_98 = file_la-vtkfile.lo
+am__objects_99 = file_la-win_stm.lo
+am__objects_100 = file_la-wipfile.lo
+am__objects_101 = file_la-witfile.lo
+am__objects_102 = file_la-witec-asc.lo
+am__objects_103 = file_la-wsffile.lo
+am__objects_104 = file_la-wsxmfile.lo
+am__objects_105 = file_la-xyzexport.lo
+am__objects_106 = file_la-zeiss.lo
+am__objects_107 = file_la-zeisslsm.lo
+am__objects_108 = file_la-zemax.lo
+am_file_la_OBJECTS = $(am__objects_1) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4) $(am__objects_5) \
+ $(am__objects_6) $(am__objects_7) $(am__objects_8) \
+ $(am__objects_9) $(am__objects_10) $(am__objects_11) \
+ $(am__objects_12) $(am__objects_13) $(am__objects_14) \
+ $(am__objects_15) $(am__objects_16) $(am__objects_17) \
+ $(am__objects_18) $(am__objects_19) $(am__objects_20) \
+ $(am__objects_21) $(am__objects_22) $(am__objects_23) \
+ $(am__objects_24) $(am__objects_25) $(am__objects_26) \
+ $(am__objects_27) $(am__objects_28) $(am__objects_29) \
+ $(am__objects_30) $(am__objects_31) $(am__objects_32) \
+ $(am__objects_33) $(am__objects_34) $(am__objects_35) \
+ $(am__objects_36) $(am__objects_37) $(am__objects_38) \
+ $(am__objects_39) $(am__objects_40) $(am__objects_41) \
+ $(am__objects_42) $(am__objects_43) $(am__objects_44) \
+ $(am__objects_45) $(am__objects_46) $(am__objects_47) \
+ $(am__objects_48) $(am__objects_49) $(am__objects_50) \
+ $(am__objects_51) $(am__objects_52) $(am__objects_53) \
+ $(am__objects_54) $(am__objects_55) $(am__objects_56) \
+ $(am__objects_57) $(am__objects_58) $(am__objects_59) \
+ $(am__objects_60) $(am__objects_61) $(am__objects_62) \
+ $(am__objects_63) $(am__objects_64) $(am__objects_65) \
+ $(am__objects_66) $(am__objects_67) $(am__objects_68) \
+ $(am__objects_69) $(am__objects_70) $(am__objects_71) \
+ $(am__objects_72) $(am__objects_73) $(am__objects_74) \
+ $(am__objects_75) $(am__objects_76) $(am__objects_77) \
+ $(am__objects_78) $(am__objects_79) $(am__objects_80) \
+ $(am__objects_81) $(am__objects_82) $(am__objects_83) \
+ $(am__objects_84) $(am__objects_85) $(am__objects_86) \
+ $(am__objects_87) $(am__objects_88) $(am__objects_89) \
+ $(am__objects_90) $(am__objects_91) $(am__objects_92) \
+ $(am__objects_93) $(am__objects_94) $(am__objects_95) \
+ $(am__objects_96) $(am__objects_97) $(am__objects_98) \
+ $(am__objects_99) $(am__objects_100) $(am__objects_101) \
+ $(am__objects_102) $(am__objects_103) $(am__objects_104) \
+ $(am__objects_105) $(am__objects_106) $(am__objects_107) \
+ $(am__objects_108) file_la-file.lo
+file_la_OBJECTS = $(am_file_la_OBJECTS)
+file_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(file_la_CFLAGS) \
+ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+ at MODULE_BUNDLING_TRUE@am_file_la_rpath = -rpath $(filedir)
fitsfile_la_DEPENDENCIES =
am__fitsfile_la_SOURCES_DIST = fitsfile.c
@HAVE_CFITSIO_TRUE at am_fitsfile_la_OBJECTS = fitsfile_la-fitsfile.lo
@@ -248,18 +427,23 @@ fitsfile_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
gdeffile_la_LIBADD =
am_gdeffile_la_OBJECTS = gdeffile.lo
gdeffile_la_OBJECTS = $(am_gdeffile_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_gdeffile_la_rpath = -rpath $(filedir)
gsffile_la_LIBADD =
am_gsffile_la_OBJECTS = gsffile.lo
gsffile_la_OBJECTS = $(am_gsffile_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_gsffile_la_rpath = -rpath $(filedir)
gwyfile_la_LIBADD =
am_gwyfile_la_OBJECTS = gwyfile.lo
gwyfile_la_OBJECTS = $(am_gwyfile_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_gwyfile_la_rpath = -rpath $(filedir)
gxyzffile_la_LIBADD =
am_gxyzffile_la_OBJECTS = gxyzffile.lo
gxyzffile_la_OBJECTS = $(am_gxyzffile_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_gxyzffile_la_rpath = -rpath $(filedir)
hdf4file_la_LIBADD =
am_hdf4file_la_OBJECTS = hdf4file.lo
hdf4file_la_OBJECTS = $(am_hdf4file_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_hdf4file_la_rpath = -rpath $(filedir)
hdrimage_la_DEPENDENCIES =
am__hdrimage_la_SOURCES_DIST = hdrimage.cc gwytiff.h image-keys.h
@HAVE_CXX_TRUE at am_hdrimage_la_OBJECTS = hdrimage_la-hdrimage.lo
@@ -271,12 +455,15 @@ hdrimage_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
hitachi_afm_la_LIBADD =
am_hitachi_afm_la_OBJECTS = hitachi-afm.lo
hitachi_afm_la_OBJECTS = $(am_hitachi_afm_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_hitachi_afm_la_rpath = -rpath $(filedir)
hitachi_sem_la_LIBADD =
am_hitachi_sem_la_OBJECTS = hitachi-sem.lo
hitachi_sem_la_OBJECTS = $(am_hitachi_sem_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_hitachi_sem_la_rpath = -rpath $(filedir)
igorfile_la_LIBADD =
am_igorfile_la_OBJECTS = igorfile.lo
igorfile_la_OBJECTS = $(am_igorfile_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_igorfile_la_rpath = -rpath $(filedir)
imgexport_la_DEPENDENCIES =
am_imgexport_la_OBJECTS = imgexport_la-imgexport.lo
imgexport_la_OBJECTS = $(am_imgexport_la_OBJECTS)
@@ -286,15 +473,19 @@ imgexport_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
intelliwave_la_LIBADD =
am_intelliwave_la_OBJECTS = intelliwave.lo
intelliwave_la_OBJECTS = $(am_intelliwave_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_intelliwave_la_rpath = -rpath $(filedir)
intematix_la_LIBADD =
am_intematix_la_OBJECTS = intematix.lo
intematix_la_OBJECTS = $(am_intematix_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_intematix_la_rpath = -rpath $(filedir)
iso28600_la_LIBADD =
am_iso28600_la_OBJECTS = iso28600.lo
iso28600_la_OBJECTS = $(am_iso28600_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_iso28600_la_rpath = -rpath $(filedir)
jeol_la_LIBADD =
am_jeol_la_OBJECTS = jeol.lo
jeol_la_OBJECTS = $(am_jeol_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_jeol_la_rpath = -rpath $(filedir)
jpkscan_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
am_jpkscan_la_OBJECTS = jpkscan_la-jpkscan.lo
jpkscan_la_OBJECTS = $(am_jpkscan_la_OBJECTS)
@@ -304,48 +495,63 @@ jpkscan_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
jspmfile_la_LIBADD =
am_jspmfile_la_OBJECTS = jspmfile.lo
jspmfile_la_OBJECTS = $(am_jspmfile_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_jspmfile_la_rpath = -rpath $(filedir)
keyence_la_LIBADD =
am_keyence_la_OBJECTS = keyence.lo
keyence_la_OBJECTS = $(am_keyence_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_keyence_la_rpath = -rpath $(filedir)
leica_la_LIBADD =
am_leica_la_OBJECTS = leica.lo
leica_la_OBJECTS = $(am_leica_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_leica_la_rpath = -rpath $(filedir)
lextfile_la_LIBADD =
am_lextfile_la_OBJECTS = lextfile.lo
lextfile_la_OBJECTS = $(am_lextfile_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_lextfile_la_rpath = -rpath $(filedir)
magellan_la_LIBADD =
am_magellan_la_OBJECTS = magellan.lo
magellan_la_OBJECTS = $(am_magellan_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_magellan_la_rpath = -rpath $(filedir)
mapvue_la_LIBADD =
am_mapvue_la_OBJECTS = mapvue.lo
mapvue_la_OBJECTS = $(am_mapvue_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_mapvue_la_rpath = -rpath $(filedir)
metropro_la_LIBADD =
am_metropro_la_OBJECTS = metropro.lo
metropro_la_OBJECTS = $(am_metropro_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_metropro_la_rpath = -rpath $(filedir)
microprof_la_LIBADD =
am_microprof_la_OBJECTS = microprof.lo
microprof_la_OBJECTS = $(am_microprof_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_microprof_la_rpath = -rpath $(filedir)
miffile_la_LIBADD =
am_miffile_la_OBJECTS = miffile.lo
miffile_la_OBJECTS = $(am_miffile_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_miffile_la_rpath = -rpath $(filedir)
mifile_la_LIBADD =
am_mifile_la_OBJECTS = mifile.lo
mifile_la_OBJECTS = $(am_mifile_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_mifile_la_rpath = -rpath $(filedir)
mulfile_la_LIBADD =
am_mulfile_la_OBJECTS = mulfile.lo
mulfile_la_OBJECTS = $(am_mulfile_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_mulfile_la_rpath = -rpath $(filedir)
nanoeducator_la_LIBADD =
am_nanoeducator_la_OBJECTS = nanoeducator.lo
nanoeducator_la_OBJECTS = $(am_nanoeducator_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_nanoeducator_la_rpath = -rpath $(filedir)
nanomagnetics_la_LIBADD =
am_nanomagnetics_la_OBJECTS = nanomagnetics.lo
nanomagnetics_la_OBJECTS = $(am_nanomagnetics_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_nanomagnetics_la_rpath = -rpath $(filedir)
nanonics_la_LIBADD =
am_nanonics_la_OBJECTS = nanonics.lo
nanonics_la_OBJECTS = $(am_nanonics_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_nanonics_la_rpath = -rpath $(filedir)
nanonis_la_LIBADD =
am_nanonis_la_OBJECTS = nanonis.lo
nanonis_la_OBJECTS = $(am_nanonis_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_nanonis_la_rpath = -rpath $(filedir)
@HAVE_ANY_ZIP_TRUE at nanoobserver_la_DEPENDENCIES = \
@HAVE_ANY_ZIP_TRUE@ $(am__DEPENDENCIES_1)
am__nanoobserver_la_SOURCES_DIST = nanoobserver.c gwyzip.h
@@ -360,6 +566,7 @@ nanoobserver_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
nanoscan_la_LIBADD =
am_nanoscan_la_OBJECTS = nanoscan.lo
nanoscan_la_OBJECTS = $(am_nanoscan_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_nanoscan_la_rpath = -rpath $(filedir)
@HAVE_ANY_ZIP_TRUE at nanoscantech_la_DEPENDENCIES = \
@HAVE_ANY_ZIP_TRUE@ $(am__DEPENDENCIES_1)
am__nanoscantech_la_SOURCES_DIST = nanoscantech.c gwyzip.h
@@ -374,48 +581,62 @@ nanoscantech_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
nanoscope_ii_la_LIBADD =
am_nanoscope_ii_la_OBJECTS = nanoscope-ii.lo
nanoscope_ii_la_OBJECTS = $(am_nanoscope_ii_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_nanoscope_ii_la_rpath = -rpath $(filedir)
nanoscope_la_LIBADD =
am_nanoscope_la_OBJECTS = nanoscope.lo
nanoscope_la_OBJECTS = $(am_nanoscope_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_nanoscope_la_rpath = -rpath $(filedir)
nanotop_la_LIBADD =
am_nanotop_la_OBJECTS = nanotop.lo
nanotop_la_OBJECTS = $(am_nanotop_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_nanotop_la_rpath = -rpath $(filedir)
netcdf_la_LIBADD =
am_netcdf_la_OBJECTS = netcdf.lo
netcdf_la_OBJECTS = $(am_netcdf_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_netcdf_la_rpath = -rpath $(filedir)
nmmxyz_la_LIBADD =
am_nmmxyz_la_OBJECTS = nmmxyz.lo
nmmxyz_la_OBJECTS = $(am_nmmxyz_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_nmmxyz_la_rpath = -rpath $(filedir)
nrrdfile_la_DEPENDENCIES =
am_nrrdfile_la_OBJECTS = nrrdfile.lo
nrrdfile_la_OBJECTS = $(am_nrrdfile_la_OBJECTS)
nt_mdt_la_LIBADD =
am_nt_mdt_la_OBJECTS = nt-mdt.lo
nt_mdt_la_OBJECTS = $(am_nt_mdt_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_nt_mdt_la_rpath = -rpath $(filedir)
nxiifile_la_LIBADD =
am_nxiifile_la_OBJECTS = nxiifile.lo
nxiifile_la_OBJECTS = $(am_nxiifile_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_nxiifile_la_rpath = -rpath $(filedir)
oldmda_la_LIBADD =
am_oldmda_la_OBJECTS = oldmda.lo
oldmda_la_OBJECTS = $(am_oldmda_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_oldmda_la_rpath = -rpath $(filedir)
ols_la_LIBADD =
am_ols_la_OBJECTS = ols.lo
ols_la_OBJECTS = $(am_ols_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_ols_la_rpath = -rpath $(filedir)
ometiff_la_LIBADD =
am_ometiff_la_OBJECTS = ometiff.lo
ometiff_la_OBJECTS = $(am_ometiff_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_ometiff_la_rpath = -rpath $(filedir)
omicron_la_LIBADD =
am_omicron_la_OBJECTS = omicron.lo
omicron_la_OBJECTS = $(am_omicron_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_omicron_la_rpath = -rpath $(filedir)
omicronflat_la_LIBADD =
am_omicronflat_la_OBJECTS = omicronflat.lo
omicronflat_la_OBJECTS = $(am_omicronflat_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_omicronflat_la_rpath = -rpath $(filedir)
omicronmatrix_la_LIBADD =
am_omicronmatrix_la_OBJECTS = omicronmatrix.lo
omicronmatrix_la_OBJECTS = $(am_omicronmatrix_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_omicronmatrix_la_rpath = -rpath $(filedir)
opdfile_la_LIBADD =
am_opdfile_la_OBJECTS = opdfile.lo
opdfile_la_OBJECTS = $(am_opdfile_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_opdfile_la_rpath = -rpath $(filedir)
@HAVE_ANY_ZIP_TRUE at opengps_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__opengps_la_SOURCES_DIST = opengps.c gwyzip.h
@HAVE_ANY_ZIP_TRUE at am_opengps_la_OBJECTS = opengps_la-opengps.lo
@@ -433,57 +654,74 @@ pixmap_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
pltfile_la_LIBADD =
am_pltfile_la_OBJECTS = pltfile.lo
pltfile_la_OBJECTS = $(am_pltfile_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_pltfile_la_rpath = -rpath $(filedir)
pnifile_la_LIBADD =
am_pnifile_la_OBJECTS = pnifile.lo
pnifile_la_OBJECTS = $(am_pnifile_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_pnifile_la_rpath = -rpath $(filedir)
princetonspe_la_LIBADD =
am_princetonspe_la_OBJECTS = princetonspe.lo
princetonspe_la_OBJECTS = $(am_princetonspe_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_princetonspe_la_rpath = -rpath $(filedir)
psia_la_LIBADD =
am_psia_la_OBJECTS = psia.lo
psia_la_OBJECTS = $(am_psia_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_psia_la_rpath = -rpath $(filedir)
pt3file_la_LIBADD =
am_pt3file_la_OBJECTS = pt3file.lo
pt3file_la_OBJECTS = $(am_pt3file_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_pt3file_la_rpath = -rpath $(filedir)
quesant_la_LIBADD =
am_quesant_la_OBJECTS = quesant.lo
quesant_la_OBJECTS = $(am_quesant_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_quesant_la_rpath = -rpath $(filedir)
rawfile_la_LIBADD =
am_rawfile_la_OBJECTS = rawfile.lo
rawfile_la_OBJECTS = $(am_rawfile_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_rawfile_la_rpath = -rpath $(filedir)
rawgraph_la_LIBADD =
am_rawgraph_la_OBJECTS = rawgraph.lo
rawgraph_la_OBJECTS = $(am_rawgraph_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_rawgraph_la_rpath = -rpath $(filedir)
rawxyz_la_LIBADD =
am_rawxyz_la_OBJECTS = rawxyz.lo
rawxyz_la_OBJECTS = $(am_rawxyz_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_rawxyz_la_rpath = -rpath $(filedir)
renishaw_la_LIBADD =
am_renishaw_la_OBJECTS = renishaw.lo
renishaw_la_OBJECTS = $(am_renishaw_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_renishaw_la_rpath = -rpath $(filedir)
rhk_sm3_la_LIBADD =
am_rhk_sm3_la_OBJECTS = rhk-sm3.lo
rhk_sm3_la_OBJECTS = $(am_rhk_sm3_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_rhk_sm3_la_rpath = -rpath $(filedir)
rhk_sm4_la_DEPENDENCIES =
am_rhk_sm4_la_OBJECTS = rhk-sm4.lo
rhk_sm4_la_OBJECTS = $(am_rhk_sm4_la_OBJECTS)
rhk_spm32_la_LIBADD =
am_rhk_spm32_la_OBJECTS = rhk-spm32.lo
rhk_spm32_la_OBJECTS = $(am_rhk_spm32_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_rhk_spm32_la_rpath = -rpath $(filedir)
robotics_la_LIBADD =
am_robotics_la_OBJECTS = robotics.lo
robotics_la_OBJECTS = $(am_robotics_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_robotics_la_rpath = -rpath $(filedir)
s94file_la_LIBADD =
am_s94file_la_OBJECTS = s94file.lo
s94file_la_OBJECTS = $(am_s94file_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_s94file_la_rpath = -rpath $(filedir)
sdfile_la_LIBADD =
am_sdfile_la_OBJECTS = sdfile.lo
sdfile_la_OBJECTS = $(am_sdfile_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_sdfile_la_rpath = -rpath $(filedir)
seiko_la_LIBADD =
am_seiko_la_OBJECTS = seiko.lo
seiko_la_OBJECTS = $(am_seiko_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_seiko_la_rpath = -rpath $(filedir)
sensofar_la_LIBADD =
am_sensofar_la_OBJECTS = sensofar.lo
sensofar_la_OBJECTS = $(am_sensofar_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_sensofar_la_rpath = -rpath $(filedir)
@HAVE_ANY_ZIP_TRUE at sensofarx_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__sensofarx_la_SOURCES_DIST = sensofarx.c
@HAVE_ANY_ZIP_TRUE at am_sensofarx_la_OBJECTS = \
@@ -496,18 +734,23 @@ sensofarx_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
sensolytics_la_LIBADD =
am_sensolytics_la_OBJECTS = sensolytics.lo
sensolytics_la_OBJECTS = $(am_sensolytics_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_sensolytics_la_rpath = -rpath $(filedir)
shimadzu_la_LIBADD =
am_shimadzu_la_OBJECTS = shimadzu.lo
shimadzu_la_OBJECTS = $(am_shimadzu_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_shimadzu_la_rpath = -rpath $(filedir)
sicmfile_la_LIBADD =
am_sicmfile_la_OBJECTS = sicmfile.lo
sicmfile_la_OBJECTS = $(am_sicmfile_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_sicmfile_la_rpath = -rpath $(filedir)
sis_la_LIBADD =
am_sis_la_OBJECTS = sis.lo
sis_la_OBJECTS = $(am_sis_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_sis_la_rpath = -rpath $(filedir)
spip_asc_la_LIBADD =
am_spip_asc_la_OBJECTS = spip-asc.lo
spip_asc_la_OBJECTS = $(am_spip_asc_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_spip_asc_la_rpath = -rpath $(filedir)
spml_la_DEPENDENCIES =
am__spml_la_SOURCES_DIST = spml.c spml-utils.h
@HAVE_XML2_TRUE@@HAVE_ZLIB_TRUE at am_spml_la_OBJECTS = spml_la-spml.lo
@@ -519,9 +762,11 @@ spml_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
spmlab_la_LIBADD =
am_spmlab_la_OBJECTS = spmlab.lo
spmlab_la_OBJECTS = $(am_spmlab_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_spmlab_la_rpath = -rpath $(filedir)
spmlabf_la_LIBADD =
am_spmlabf_la_OBJECTS = spmlabf.lo
spmlabf_la_OBJECTS = $(am_spmlabf_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_spmlabf_la_rpath = -rpath $(filedir)
@HAVE_ANY_ZIP_TRUE at spmxfile_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__spmxfile_la_SOURCES_DIST = spmxfile.c gwyzip.h
@HAVE_ANY_ZIP_TRUE at am_spmxfile_la_OBJECTS = spmxfile_la-spmxfile.lo
@@ -533,51 +778,71 @@ spmxfile_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
stmprg_la_LIBADD =
am_stmprg_la_OBJECTS = stmprg.lo
stmprg_la_OBJECTS = $(am_stmprg_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_stmprg_la_rpath = -rpath $(filedir)
stpfile_la_LIBADD =
am_stpfile_la_OBJECTS = stpfile.lo
stpfile_la_OBJECTS = $(am_stpfile_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_stpfile_la_rpath = -rpath $(filedir)
surffile_la_LIBADD =
am_surffile_la_OBJECTS = surffile.lo
surffile_la_OBJECTS = $(am_surffile_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_surffile_la_rpath = -rpath $(filedir)
tescan_la_LIBADD =
am_tescan_la_OBJECTS = tescan.lo
tescan_la_OBJECTS = $(am_tescan_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_tescan_la_rpath = -rpath $(filedir)
tiaser_la_LIBADD =
am_tiaser_la_OBJECTS = tiaser.lo
tiaser_la_OBJECTS = $(am_tiaser_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_tiaser_la_rpath = -rpath $(filedir)
unisoku_la_LIBADD =
am_unisoku_la_OBJECTS = unisoku.lo
unisoku_la_OBJECTS = $(am_unisoku_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_unisoku_la_rpath = -rpath $(filedir)
vtkfile_la_LIBADD =
am_vtkfile_la_OBJECTS = vtkfile.lo
vtkfile_la_OBJECTS = $(am_vtkfile_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_vtkfile_la_rpath = -rpath $(filedir)
win_stm_la_LIBADD =
am_win_stm_la_OBJECTS = win_stm.lo
win_stm_la_OBJECTS = $(am_win_stm_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_win_stm_la_rpath = -rpath $(filedir)
wipfile_la_LIBADD =
am_wipfile_la_OBJECTS = wipfile.lo
wipfile_la_OBJECTS = $(am_wipfile_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_wipfile_la_rpath = -rpath $(filedir)
witec_asc_la_LIBADD =
am_witec_asc_la_OBJECTS = witec-asc.lo
witec_asc_la_OBJECTS = $(am_witec_asc_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_witec_asc_la_rpath = -rpath $(filedir)
witfile_la_LIBADD =
am_witfile_la_OBJECTS = witfile.lo
witfile_la_OBJECTS = $(am_witfile_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_witfile_la_rpath = -rpath $(filedir)
wsffile_la_LIBADD =
am_wsffile_la_OBJECTS = wsffile.lo
wsffile_la_OBJECTS = $(am_wsffile_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_wsffile_la_rpath = -rpath $(filedir)
wsxmfile_la_LIBADD =
am_wsxmfile_la_OBJECTS = wsxmfile.lo
wsxmfile_la_OBJECTS = $(am_wsxmfile_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_wsxmfile_la_rpath = -rpath $(filedir)
xyzexport_la_LIBADD =
am_xyzexport_la_OBJECTS = xyzexport.lo
xyzexport_la_OBJECTS = $(am_xyzexport_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_xyzexport_la_rpath = -rpath $(filedir)
zeiss_la_LIBADD =
am_zeiss_la_OBJECTS = zeiss.lo
zeiss_la_OBJECTS = $(am_zeiss_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_zeiss_la_rpath = -rpath $(filedir)
+zeisslsm_la_LIBADD =
+am_zeisslsm_la_OBJECTS = zeisslsm.lo
+zeisslsm_la_OBJECTS = $(am_zeisslsm_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_zeisslsm_la_rpath = -rpath $(filedir)
zemax_la_LIBADD =
am_zemax_la_OBJECTS = zemax.lo
zemax_la_OBJECTS = $(am_zemax_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_zemax_la_rpath = -rpath $(filedir)
AM_V_P = $(am__v_P_ at AM_V@)
am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
am__v_P_0 = false
@@ -638,11 +903,12 @@ SOURCES = $(accurexii_txt_la_SOURCES) $(aistfile_la_SOURCES) \
$(bcrfile_la_SOURCES) $(burleigh_la_SOURCES) \
$(burleigh_bii_la_SOURCES) $(burleigh_exp_la_SOURCES) \
$(codevfile_la_SOURCES) $(createc_la_SOURCES) \
- $(csmfile_la_SOURCES) $(dektakxml_la_SOURCES) \
- $(dimensionfile_la_SOURCES) $(dm3file_la_SOURCES) \
- $(dmefile_la_SOURCES) $(dumbfile_la_SOURCES) \
- $(ecsfile_la_SOURCES) $(ezdfile_la_SOURCES) \
- $(femtoscan_txt_la_SOURCES) $(femtoscan_la_SOURCES) \
+ $(csmfile_la_SOURCES) $(dektakvca_la_SOURCES) \
+ $(dektakxml_la_SOURCES) $(dimensionfile_la_SOURCES) \
+ $(dm3file_la_SOURCES) $(dmefile_la_SOURCES) \
+ $(dumbfile_la_SOURCES) $(ecsfile_la_SOURCES) \
+ $(ezdfile_la_SOURCES) $(femtoscan_txt_la_SOURCES) \
+ $(femtoscan_la_SOURCES) $(file_la_SOURCES) \
$(fitsfile_la_SOURCES) $(gdeffile_la_SOURCES) \
$(gsffile_la_SOURCES) $(gwyfile_la_SOURCES) \
$(gxyzffile_la_SOURCES) $(hdf4file_la_SOURCES) \
@@ -688,7 +954,7 @@ SOURCES = $(accurexii_txt_la_SOURCES) $(aistfile_la_SOURCES) \
$(wipfile_la_SOURCES) $(witec_asc_la_SOURCES) \
$(witfile_la_SOURCES) $(wsffile_la_SOURCES) \
$(wsxmfile_la_SOURCES) $(xyzexport_la_SOURCES) \
- $(zeiss_la_SOURCES) $(zemax_la_SOURCES)
+ $(zeiss_la_SOURCES) $(zeisslsm_la_SOURCES) $(zemax_la_SOURCES)
DIST_SOURCES = $(accurexii_txt_la_SOURCES) $(aistfile_la_SOURCES) \
$(alicona_la_SOURCES) $(ambfile_la_SOURCES) \
$(anfatec_la_SOURCES) $(am__apedaxfile_la_SOURCES_DIST) \
@@ -697,11 +963,12 @@ DIST_SOURCES = $(accurexii_txt_la_SOURCES) $(aistfile_la_SOURCES) \
$(bcrfile_la_SOURCES) $(burleigh_la_SOURCES) \
$(burleigh_bii_la_SOURCES) $(burleigh_exp_la_SOURCES) \
$(codevfile_la_SOURCES) $(createc_la_SOURCES) \
- $(csmfile_la_SOURCES) $(dektakxml_la_SOURCES) \
- $(dimensionfile_la_SOURCES) $(dm3file_la_SOURCES) \
- $(dmefile_la_SOURCES) $(dumbfile_la_SOURCES) \
- $(ecsfile_la_SOURCES) $(ezdfile_la_SOURCES) \
- $(femtoscan_txt_la_SOURCES) $(femtoscan_la_SOURCES) \
+ $(csmfile_la_SOURCES) $(dektakvca_la_SOURCES) \
+ $(dektakxml_la_SOURCES) $(dimensionfile_la_SOURCES) \
+ $(dm3file_la_SOURCES) $(dmefile_la_SOURCES) \
+ $(dumbfile_la_SOURCES) $(ecsfile_la_SOURCES) \
+ $(ezdfile_la_SOURCES) $(femtoscan_txt_la_SOURCES) \
+ $(femtoscan_la_SOURCES) $(file_la_SOURCES) \
$(am__fitsfile_la_SOURCES_DIST) $(gdeffile_la_SOURCES) \
$(gsffile_la_SOURCES) $(gwyfile_la_SOURCES) \
$(gxyzffile_la_SOURCES) $(hdf4file_la_SOURCES) \
@@ -748,7 +1015,7 @@ DIST_SOURCES = $(accurexii_txt_la_SOURCES) $(aistfile_la_SOURCES) \
$(witec_asc_la_SOURCES) $(witfile_la_SOURCES) \
$(wsffile_la_SOURCES) $(wsxmfile_la_SOURCES) \
$(xyzexport_la_SOURCES) $(zeiss_la_SOURCES) \
- $(zemax_la_SOURCES)
+ $(zeisslsm_la_SOURCES) $(zemax_la_SOURCES)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
@@ -815,10 +1082,7 @@ EPYDOC = @EPYDOC@
EXEEXT = @EXEEXT@
EXR_CFLAGS = @EXR_CFLAGS@
EXR_LIBS = @EXR_LIBS@
-FFTW3_1_CFLAGS = @FFTW3_1_CFLAGS@
-FFTW3_1_LIBS = @FFTW3_1_LIBS@
FFTW3_CFLAGS = @FFTW3_CFLAGS@
-FFTW3_DEPENDENCY = @FFTW3_DEPENDENCY@
FFTW3_LIBS = @FFTW3_LIBS@
FGREP = @FGREP@
GCONFTOOL = @GCONFTOOL@
@@ -828,6 +1092,8 @@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
GLIBC21 = @GLIBC21@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GMODULE_CFLAGS = @GMODULE_CFLAGS@
GMODULE_LIBS = @GMODULE_LIBS@
GMSGFMT = @GMSGFMT@
@@ -852,7 +1118,9 @@ GTK_MAC_LIBS = @GTK_MAC_LIBS@
GWY_VERSION_MAJOR = @GWY_VERSION_MAJOR@
GWY_VERSION_MINOR = @GWY_VERSION_MINOR@
GWY_VERSION_STRING = @GWY_VERSION_STRING@
+HDRIMAGE_EXTRA_CFLAGS = @HDRIMAGE_EXTRA_CFLAGS@
HTML_DIR = @HTML_DIR@
+INKSCAPE = @INKSCAPE@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -910,6 +1178,7 @@ PASCAL = @PASCAL@
PATH_SEPARATOR = @PATH_SEPARATOR@
PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
+PNGCRUSH = @PNGCRUSH@
PNG_CFLAGS = @PNG_CFLAGS@
PNG_LIBS = @PNG_LIBS@
POD2MAN = @POD2MAN@
@@ -918,17 +1187,13 @@ PYGTK_CFLAGS = @PYGTK_CFLAGS@
PYGTK_CODEGENDIR = @PYGTK_CODEGENDIR@
PYGTK_LIBS = @PYGTK_LIBS@
PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
PYTHON_EXTRA_CFLAGS = @PYTHON_EXTRA_CFLAGS@
PYTHON_INCLUDES = @PYTHON_INCLUDES@
-PYTHON_LIBS = @PYTHON_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
PYTHON_PLATFORM = @PYTHON_PLATFORM@
PYTHON_PREFIX = @PYTHON_PREFIX@
-PYTHON_SYSCFG_BASECFLAGS = @PYTHON_SYSCFG_BASECFLAGS@
-PYTHON_SYSCFG_CCSHARED = @PYTHON_SYSCFG_CCSHARED@
-PYTHON_SYSCFG_LDFLAGS = @PYTHON_SYSCFG_LDFLAGS@
-PYTHON_SYSCFG_LIBDIR = @PYTHON_SYSCFG_LIBDIR@
-PYTHON_SYSCFG_LINKFORSHARED = @PYTHON_SYSCFG_LINKFORSHARED@
PYTHON_VERSION = @PYTHON_VERSION@
RANLIB = @RANLIB@
RUBY = @RUBY@
@@ -1088,7 +1353,8 @@ matfile_module =
@HAVE_CXX_TRUE at hdrimage_module = hdrimage.la
@HAVE_CXX_TRUE at hdrimage_la_SOURCES = hdrimage.cc gwytiff.h image-keys.h
-# Some modules require ‘any ZIP library’. We must choose one.
+# Some modules require ‘any ZIP library’. We must choose one. Configure
+# should ensure at most one of the following is enabled.
@HAVE_LIBZIP_TRUE at zip_cflags = @LIBZIP_CFLAGS@
@HAVE_MINIZIP_TRUE at zip_cflags = @MINIZIP_CFLAGS@
@HAVE_LIBZIP_TRUE at zip_libs = @LIBZIP_LIBS@
@@ -1097,25 +1363,28 @@ matfile_module =
# These modules compile also without the respective libraries so just add the
# flags if the libraries are available.
createc_la_LIBADD = @ZLIB@
-nrrdfile_la_LIBADD = @ZLIB@ @BZIP2@
-pixmap_la_LIBADD = @PNG_LIBS@
-pixmap_la_CFLAGS = $(AM_CFLAGS) @PNG_CFLAGS@
+hdrimage_la_LIBADD = @EXR_LIBS@ @PNG_LIBS@
+hdrimage_la_CXXFLAGS = $(AM_CXXFLAGS) @PNG_CFLAGS@ @EXR_CFLAGS@ @HDRIMAGE_EXTRA_CFLAGS@
imgexport_la_LIBADD = @PNG_LIBS@ @WEBP_LIBS@
imgexport_la_CFLAGS = $(AM_CFLAGS) @PNG_CFLAGS@ @WEBP_CFLAGS@
-rhk_sm4_la_LIBADD = @ZLIB@
-hdrimage_la_LIBADD = @EXR_LIBS@ @PNG_LIBS@
-hdrimage_la_CXXFLAGS = $(AM_CXXFLAGS) @PNG_CFLAGS@ @EXR_CFLAGS@
jpkscan_la_CFLAGS = $(AM_CFLAGS) $(zip_cflags)
jpkscan_la_LIBADD = $(zip_libs)
+nrrdfile_la_LIBADD = @ZLIB@ @BZIP2@
+pixmap_la_LIBADD = @PNG_LIBS@
+pixmap_la_CFLAGS = $(AM_CFLAGS) @PNG_CFLAGS@
+rhk_sm4_la_LIBADD = @ZLIB@
filedir = $(pkglibdir)/modules/file
-file_LTLIBRARIES = \
+
+# Only bundle modules without own dependencies. If something goes wrong with
+# any required libraries at run-time, it will at most break these individual
+# unbundled modules, not the bundle.
+bundlable_modules = \
accurexii-txt.la \
aistfile.la \
alicona.la \
ambfile.la \
anfatec.la \
apefile.la \
- $(apedaxfile_module) \
asciiexport.la \
assing-afm.la \
attocube.la \
@@ -1124,8 +1393,8 @@ file_LTLIBRARIES = \
burleigh_bii.la \
burleigh_exp.la \
codevfile.la \
- createc.la \
csmfile.la \
+ dektakvca.la \
dektakxml.la \
dimensionfile.la \
dmefile.la \
@@ -1133,7 +1402,6 @@ file_LTLIBRARIES = \
dumbfile.la \
ecsfile.la \
ezdfile.la \
- $(fitsfile_module) \
femtoscan.la \
femtoscan-txt.la \
gdeffile.la \
@@ -1141,23 +1409,19 @@ file_LTLIBRARIES = \
gwyfile.la \
gxyzffile.la \
hdf4file.la \
- $(hdrimage_module) \
hitachi-afm.la \
hitachi-sem.la \
igorfile.la \
- imgexport.la \
intelliwave.la \
intematix.la \
iso28600.la \
jeol.la \
- jpkscan.la \
jspmfile.la \
keyence.la \
leica.la \
lextfile.la \
magellan.la \
mapvue.la \
- $(matfile_module) \
metropro.la \
microprof.la \
miffile.la \
@@ -1167,15 +1431,12 @@ file_LTLIBRARIES = \
nanomagnetics.la \
nanonics.la \
nanonis.la \
- $(nanoobserver_module) \
nanoscan.la \
- $(nanoscantech_module) \
nanoscope-ii.la \
nanoscope.la \
nanotop.la \
netcdf.la \
nmmxyz.la \
- nrrdfile.la \
nt-mdt.la \
nxiifile.la \
oldmda.la \
@@ -1185,8 +1446,6 @@ file_LTLIBRARIES = \
omicronflat.la \
omicronmatrix.la \
opdfile.la \
- $(opengps_module) \
- pixmap.la \
pnifile.la \
pltfile.la \
princetonspe.la \
@@ -1198,23 +1457,19 @@ file_LTLIBRARIES = \
rawxyz.la \
renishaw.la \
rhk-sm3.la \
- rhk-sm4.la \
rhk-spm32.la \
robotics.la \
s94file.la \
sdfile.la \
seiko.la \
sensofar.la \
- $(sensofarx_module) \
sensolytics.la \
shimadzu.la \
sicmfile.la \
sis.la \
spip-asc.la \
- $(spml_module) \
spmlab.la \
spmlabf.la \
- $(spmxfile_module) \
stmprg.la \
stpfile.la \
surffile.la \
@@ -1230,8 +1485,34 @@ file_LTLIBRARIES = \
wsxmfile.la \
xyzexport.la \
zeiss.la \
+ zeisslsm.la \
zemax.la
+ at MODULE_BUNDLING_FALSE@file_modules = $(bundlable_modules)
+
+# file_modules is either the bundle or all the individual modules.
+ at MODULE_BUNDLING_TRUE@file_modules = file.la
+ at MODULE_BUNDLING_TRUE@BUILT_SOURCES = file.c
+ at MODULE_BUNDLING_TRUE@file_la_CFLAGS = $(AM_CFLAGS) -DGWY_MODULE_BUNDLING
+file_LTLIBRARIES = \
+ $(file_modules) \
+ createc.la \
+ imgexport.la \
+ jpkscan.la \
+ nrrdfile.la \
+ pixmap.la \
+ rhk-sm4.la \
+ $(apedaxfile_module) \
+ $(fitsfile_module) \
+ $(hdrimage_module) \
+ $(matfile_module) \
+ $(nanoobserver_module) \
+ $(nanoscantech_module) \
+ $(opengps_module) \
+ $(sensofarx_module) \
+ $(spml_module) \
+ $(spmxfile_module)
+
noinst_HEADERS = \
err.h \
get.h
@@ -1241,6 +1522,10 @@ EXTRA_DIST = \
1CHECKLIST
@OS_MSWIN_TRUE at no_undefined = -no-undefined
+AM_CPPFLAGS = -I$(top_srcdir) -DG_LOG_DOMAIN=\"Module\"
+AM_CFLAGS = @COMMON_CFLAGS@
+AM_CXXFLAGS = @COMMON_CXXFLAGS@
+AM_LDFLAGS = -avoid-version -module $(no_undefined) $(module_libadd)
@MODULE_DEPENDENCIES_TRUE at module_libadd = \
@MODULE_DEPENDENCIES_TRUE@ $(top_builddir)/app/libgwyapp2.la \
@MODULE_DEPENDENCIES_TRUE@ $(top_builddir)/libdraw/libgwydraw2.la \
@@ -1250,10 +1535,16 @@ EXTRA_DIST = \
@MODULE_DEPENDENCIES_TRUE@ $(top_builddir)/libprocess/libgwyprocess2.la \
@MODULE_DEPENDENCIES_TRUE@ @GTK_LIBS@
-AM_CPPFLAGS = -I$(top_srcdir) -DG_LOG_DOMAIN=\"Module\"
-AM_CFLAGS = @COMMON_CFLAGS@
-AM_CXXFLAGS = @COMMON_CXXFLAGS@
-AM_LDFLAGS = -avoid-version -module $(no_undefined) $(module_libadd)
+
+# Standalone modules
+createc_la_SOURCES = createc.c
+imgexport_la_SOURCES = imgexport.c imgexportpreset.h gwytiff.h image-keys.h
+jpkscan_la_SOURCES = jpkscan.c jpk.h gwytiff.h
+pixmap_la_SOURCES = pixmap.c gwytiff.h image-keys.h
+rhk_sm4_la_SOURCES = rhk-sm4.c
+nrrdfile_la_SOURCES = nrrdfile.c
+
+# Bundlable modules, must be listed in file_la_SOURCES below.
accurexii_txt_la_SOURCES = accurexii-txt.c
aistfile_la_SOURCES = aistfile.c
alicona_la_SOURCES = alicona.c
@@ -1267,9 +1558,9 @@ bcrfile_la_SOURCES = bcrfile.c
burleigh_la_SOURCES = burleigh.c
burleigh_bii_la_SOURCES = burleigh_bii.c
burleigh_exp_la_SOURCES = burleigh_exp.c
-createc_la_SOURCES = createc.c
codevfile_la_SOURCES = codevfile.c
csmfile_la_SOURCES = csmfile.c
+dektakvca_la_SOURCES = dektakvca.c
dektakxml_la_SOURCES = dektakxml.c
dimensionfile_la_SOURCES = dimensionfile.c
dmefile_la_SOURCES = dmefile.c
@@ -1287,12 +1578,10 @@ hdf4file_la_SOURCES = hdf4file.c
hitachi_afm_la_SOURCES = hitachi-afm.c
hitachi_sem_la_SOURCES = hitachi-sem.c
igorfile_la_SOURCES = igorfile.c
-imgexport_la_SOURCES = imgexport.c imgexportpreset.h gwytiff.h image-keys.h
intelliwave_la_SOURCES = intelliwave.c
intematix_la_SOURCES = intematix.c gwytiff.h
iso28600_la_SOURCES = iso28600.c
jeol_la_SOURCES = jeol.c
-jpkscan_la_SOURCES = jpkscan.c jpk.h gwytiff.h
jspmfile_la_SOURCES = jspmfile.c
keyence_la_SOURCES = keyence.c
leica_la_SOURCES = leica.c
@@ -1314,17 +1603,15 @@ nanoscope_la_SOURCES = nanoscope.c
nanotop_la_SOURCES = nanotop.c
netcdf_la_SOURCES = netcdf.c
nmmxyz_la_SOURCES = nmmxyz.c
-nrrdfile_la_SOURCES = nrrdfile.c
nt_mdt_la_SOURCES = nt-mdt.c
nxiifile_la_SOURCES = nxiifile.c
oldmda_la_SOURCES = oldmda.c
ols_la_SOURCES = ols.c gwytiff.h
-ometiff_la_SOURCES = ometiff.c
+ometiff_la_SOURCES = ometiff.c gwytiff.h
omicron_la_SOURCES = omicron.c
omicronflat_la_SOURCES = omicronflat.c
omicronmatrix_la_SOURCES = omicronmatrix.c
opdfile_la_SOURCES = opdfile.c
-pixmap_la_SOURCES = pixmap.c gwytiff.h image-keys.h
pnifile_la_SOURCES = pnifile.c
pltfile_la_SOURCES = pltfile.c
princetonspe_la_SOURCES = princetonspe.c
@@ -1336,7 +1623,6 @@ rawgraph_la_SOURCES = rawgraph.c
rawxyz_la_SOURCES = rawxyz.c
renishaw_la_SOURCES = renishaw.c
rhk_sm3_la_SOURCES = rhk-sm3.c
-rhk_sm4_la_SOURCES = rhk-sm4.c
rhk_spm32_la_SOURCES = rhk-spm32.c
robotics_la_SOURCES = robotics.c
s94file_la_SOURCES = s94file.c
@@ -1354,7 +1640,7 @@ stmprg_la_SOURCES = stmprg.c
stpfile_la_SOURCES = stpfile.c
surffile_la_SOURCES = surffile.c
tiaser_la_SOURCES = tiaser.c
-tescan_la_SOURCES = tescan.c
+tescan_la_SOURCES = tescan.c gwytiff.h
unisoku_la_SOURCES = unisoku.c
vtkfile_la_SOURCES = vtkfile.c
win_stm_la_SOURCES = win_stm.c
@@ -1364,9 +1650,123 @@ witec_asc_la_SOURCES = witec-asc.c
wsffile_la_SOURCES = wsffile.c
wsxmfile_la_SOURCES = wsxmfile.c
xyzexport_la_SOURCES = xyzexport.c
-zeiss_la_SOURCES = zeiss.c
+zeiss_la_SOURCES = zeiss.c gwytiff.h
+zeisslsm_la_SOURCES = zeisslsm.c gwytiff.h
zemax_la_SOURCES = zemax.c
-all: all-am
+file_la_SOURCES = \
+ $(accurexii_txt_la_SOURCES) \
+ $(aistfile_la_SOURCES) \
+ $(alicona_la_SOURCES) \
+ $(ambfile_la_SOURCES) \
+ $(anfatec_la_SOURCES) \
+ $(apefile_la_SOURCES) \
+ $(asciiexport_la_SOURCES) \
+ $(assing_afm_la_SOURCES) \
+ $(attocube_la_SOURCES) \
+ $(bcrfile_la_SOURCES) \
+ $(burleigh_la_SOURCES) \
+ $(burleigh_bii_la_SOURCES) \
+ $(burleigh_exp_la_SOURCES) \
+ $(codevfile_la_SOURCES) \
+ $(csmfile_la_SOURCES) \
+ $(dektakvca_la_SOURCES) \
+ $(dektakxml_la_SOURCES) \
+ $(dimensionfile_la_SOURCES) \
+ $(dmefile_la_SOURCES) \
+ $(dm3file_la_SOURCES) \
+ $(dumbfile_la_SOURCES) \
+ $(ecsfile_la_SOURCES) \
+ $(ezdfile_la_SOURCES) \
+ $(femtoscan_la_SOURCES) \
+ $(femtoscan_txt_la_SOURCES) \
+ $(gdeffile_la_SOURCES) \
+ $(gsffile_la_SOURCES) \
+ $(gwyfile_la_SOURCES) \
+ $(gxyzffile_la_SOURCES) \
+ $(hdf4file_la_SOURCES) \
+ $(hitachi_afm_la_SOURCES) \
+ $(hitachi_sem_la_SOURCES) \
+ $(igorfile_la_SOURCES) \
+ $(intelliwave_la_SOURCES) \
+ $(intematix_la_SOURCES) \
+ $(iso28600_la_SOURCES) \
+ $(jeol_la_SOURCES) \
+ $(jspmfile_la_SOURCES) \
+ $(keyence_la_SOURCES) \
+ $(leica_la_SOURCES) \
+ $(lextfile_la_SOURCES) \
+ $(magellan_la_SOURCES) \
+ $(mapvue_la_SOURCES) \
+ $(metropro_la_SOURCES) \
+ $(microprof_la_SOURCES) \
+ $(miffile_la_SOURCES) \
+ $(mifile_la_SOURCES) \
+ $(mulfile_la_SOURCES) \
+ $(nanoeducator_la_SOURCES) \
+ $(nanomagnetics_la_SOURCES) \
+ $(nanonics_la_SOURCES) \
+ $(nanonis_la_SOURCES) \
+ $(nanoscan_la_SOURCES) \
+ $(nanoscope_ii_la_SOURCES) \
+ $(nanoscope_la_SOURCES) \
+ $(nanotop_la_SOURCES) \
+ $(netcdf_la_SOURCES) \
+ $(nmmxyz_la_SOURCES) \
+ $(nt_mdt_la_SOURCES) \
+ $(nxiifile_la_SOURCES) \
+ $(oldmda_la_SOURCES) \
+ $(ols_la_SOURCES) \
+ $(ometiff_la_SOURCES) \
+ $(omicron_la_SOURCES) \
+ $(omicronflat_la_SOURCES) \
+ $(omicronmatrix_la_SOURCES) \
+ $(opdfile_la_SOURCES) \
+ $(pnifile_la_SOURCES) \
+ $(pltfile_la_SOURCES) \
+ $(princetonspe_la_SOURCES) \
+ $(psia_la_SOURCES) \
+ $(pt3file_la_SOURCES) \
+ $(quesant_la_SOURCES) \
+ $(rawfile_la_SOURCES) \
+ $(rawgraph_la_SOURCES) \
+ $(rawxyz_la_SOURCES) \
+ $(renishaw_la_SOURCES) \
+ $(rhk_sm3_la_SOURCES) \
+ $(rhk_spm32_la_SOURCES) \
+ $(robotics_la_SOURCES) \
+ $(s94file_la_SOURCES) \
+ $(sdfile_la_SOURCES) \
+ $(seiko_la_SOURCES) \
+ $(sensofar_la_SOURCES) \
+ $(sensolytics_la_SOURCES) \
+ $(shimadzu_la_SOURCES) \
+ $(sicmfile_la_SOURCES) \
+ $(sis_la_SOURCES) \
+ $(spip_asc_la_SOURCES) \
+ $(spmlab_la_SOURCES) \
+ $(spmlabf_la_SOURCES) \
+ $(stmprg_la_SOURCES) \
+ $(stpfile_la_SOURCES) \
+ $(surffile_la_SOURCES) \
+ $(tiaser_la_SOURCES) \
+ $(tescan_la_SOURCES) \
+ $(unisoku_la_SOURCES) \
+ $(vtkfile_la_SOURCES) \
+ $(win_stm_la_SOURCES) \
+ $(wipfile_la_SOURCES) \
+ $(witfile_la_SOURCES) \
+ $(witec_asc_la_SOURCES) \
+ $(wsffile_la_SOURCES) \
+ $(wsxmfile_la_SOURCES) \
+ $(xyzexport_la_SOURCES) \
+ $(zeiss_la_SOURCES) \
+ $(zeisslsm_la_SOURCES) \
+ $(zemax_la_SOURCES) \
+ file.c
+
+CLEAN_FILES = file.c
+all: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) all-am
.SUFFIXES:
.SUFFIXES: .c .cc .lo .o .obj
@@ -1436,229 +1836,235 @@ clean-fileLTLIBRARIES:
}
accurexii-txt.la: $(accurexii_txt_la_OBJECTS) $(accurexii_txt_la_DEPENDENCIES) $(EXTRA_accurexii_txt_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(accurexii_txt_la_OBJECTS) $(accurexii_txt_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_accurexii_txt_la_rpath) $(accurexii_txt_la_OBJECTS) $(accurexii_txt_la_LIBADD) $(LIBS)
aistfile.la: $(aistfile_la_OBJECTS) $(aistfile_la_DEPENDENCIES) $(EXTRA_aistfile_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(aistfile_la_OBJECTS) $(aistfile_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_aistfile_la_rpath) $(aistfile_la_OBJECTS) $(aistfile_la_LIBADD) $(LIBS)
alicona.la: $(alicona_la_OBJECTS) $(alicona_la_DEPENDENCIES) $(EXTRA_alicona_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(alicona_la_OBJECTS) $(alicona_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_alicona_la_rpath) $(alicona_la_OBJECTS) $(alicona_la_LIBADD) $(LIBS)
ambfile.la: $(ambfile_la_OBJECTS) $(ambfile_la_DEPENDENCIES) $(EXTRA_ambfile_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(ambfile_la_OBJECTS) $(ambfile_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_ambfile_la_rpath) $(ambfile_la_OBJECTS) $(ambfile_la_LIBADD) $(LIBS)
anfatec.la: $(anfatec_la_OBJECTS) $(anfatec_la_DEPENDENCIES) $(EXTRA_anfatec_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(anfatec_la_OBJECTS) $(anfatec_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_anfatec_la_rpath) $(anfatec_la_OBJECTS) $(anfatec_la_LIBADD) $(LIBS)
apedaxfile.la: $(apedaxfile_la_OBJECTS) $(apedaxfile_la_DEPENDENCIES) $(EXTRA_apedaxfile_la_DEPENDENCIES)
$(AM_V_CCLD)$(apedaxfile_la_LINK) $(am_apedaxfile_la_rpath) $(apedaxfile_la_OBJECTS) $(apedaxfile_la_LIBADD) $(LIBS)
apefile.la: $(apefile_la_OBJECTS) $(apefile_la_DEPENDENCIES) $(EXTRA_apefile_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(apefile_la_OBJECTS) $(apefile_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_apefile_la_rpath) $(apefile_la_OBJECTS) $(apefile_la_LIBADD) $(LIBS)
asciiexport.la: $(asciiexport_la_OBJECTS) $(asciiexport_la_DEPENDENCIES) $(EXTRA_asciiexport_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(asciiexport_la_OBJECTS) $(asciiexport_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_asciiexport_la_rpath) $(asciiexport_la_OBJECTS) $(asciiexport_la_LIBADD) $(LIBS)
assing-afm.la: $(assing_afm_la_OBJECTS) $(assing_afm_la_DEPENDENCIES) $(EXTRA_assing_afm_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(assing_afm_la_OBJECTS) $(assing_afm_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_assing_afm_la_rpath) $(assing_afm_la_OBJECTS) $(assing_afm_la_LIBADD) $(LIBS)
attocube.la: $(attocube_la_OBJECTS) $(attocube_la_DEPENDENCIES) $(EXTRA_attocube_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(attocube_la_OBJECTS) $(attocube_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_attocube_la_rpath) $(attocube_la_OBJECTS) $(attocube_la_LIBADD) $(LIBS)
bcrfile.la: $(bcrfile_la_OBJECTS) $(bcrfile_la_DEPENDENCIES) $(EXTRA_bcrfile_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(bcrfile_la_OBJECTS) $(bcrfile_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_bcrfile_la_rpath) $(bcrfile_la_OBJECTS) $(bcrfile_la_LIBADD) $(LIBS)
burleigh.la: $(burleigh_la_OBJECTS) $(burleigh_la_DEPENDENCIES) $(EXTRA_burleigh_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(burleigh_la_OBJECTS) $(burleigh_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_burleigh_la_rpath) $(burleigh_la_OBJECTS) $(burleigh_la_LIBADD) $(LIBS)
burleigh_bii.la: $(burleigh_bii_la_OBJECTS) $(burleigh_bii_la_DEPENDENCIES) $(EXTRA_burleigh_bii_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(burleigh_bii_la_OBJECTS) $(burleigh_bii_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_burleigh_bii_la_rpath) $(burleigh_bii_la_OBJECTS) $(burleigh_bii_la_LIBADD) $(LIBS)
burleigh_exp.la: $(burleigh_exp_la_OBJECTS) $(burleigh_exp_la_DEPENDENCIES) $(EXTRA_burleigh_exp_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(burleigh_exp_la_OBJECTS) $(burleigh_exp_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_burleigh_exp_la_rpath) $(burleigh_exp_la_OBJECTS) $(burleigh_exp_la_LIBADD) $(LIBS)
codevfile.la: $(codevfile_la_OBJECTS) $(codevfile_la_DEPENDENCIES) $(EXTRA_codevfile_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(codevfile_la_OBJECTS) $(codevfile_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_codevfile_la_rpath) $(codevfile_la_OBJECTS) $(codevfile_la_LIBADD) $(LIBS)
createc.la: $(createc_la_OBJECTS) $(createc_la_DEPENDENCIES) $(EXTRA_createc_la_DEPENDENCIES)
$(AM_V_CCLD)$(LINK) -rpath $(filedir) $(createc_la_OBJECTS) $(createc_la_LIBADD) $(LIBS)
csmfile.la: $(csmfile_la_OBJECTS) $(csmfile_la_DEPENDENCIES) $(EXTRA_csmfile_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(csmfile_la_OBJECTS) $(csmfile_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_csmfile_la_rpath) $(csmfile_la_OBJECTS) $(csmfile_la_LIBADD) $(LIBS)
+
+dektakvca.la: $(dektakvca_la_OBJECTS) $(dektakvca_la_DEPENDENCIES) $(EXTRA_dektakvca_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(LINK) $(am_dektakvca_la_rpath) $(dektakvca_la_OBJECTS) $(dektakvca_la_LIBADD) $(LIBS)
dektakxml.la: $(dektakxml_la_OBJECTS) $(dektakxml_la_DEPENDENCIES) $(EXTRA_dektakxml_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(dektakxml_la_OBJECTS) $(dektakxml_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_dektakxml_la_rpath) $(dektakxml_la_OBJECTS) $(dektakxml_la_LIBADD) $(LIBS)
dimensionfile.la: $(dimensionfile_la_OBJECTS) $(dimensionfile_la_DEPENDENCIES) $(EXTRA_dimensionfile_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(dimensionfile_la_OBJECTS) $(dimensionfile_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_dimensionfile_la_rpath) $(dimensionfile_la_OBJECTS) $(dimensionfile_la_LIBADD) $(LIBS)
dm3file.la: $(dm3file_la_OBJECTS) $(dm3file_la_DEPENDENCIES) $(EXTRA_dm3file_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(dm3file_la_OBJECTS) $(dm3file_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_dm3file_la_rpath) $(dm3file_la_OBJECTS) $(dm3file_la_LIBADD) $(LIBS)
dmefile.la: $(dmefile_la_OBJECTS) $(dmefile_la_DEPENDENCIES) $(EXTRA_dmefile_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(dmefile_la_OBJECTS) $(dmefile_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_dmefile_la_rpath) $(dmefile_la_OBJECTS) $(dmefile_la_LIBADD) $(LIBS)
dumbfile.la: $(dumbfile_la_OBJECTS) $(dumbfile_la_DEPENDENCIES) $(EXTRA_dumbfile_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(dumbfile_la_OBJECTS) $(dumbfile_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_dumbfile_la_rpath) $(dumbfile_la_OBJECTS) $(dumbfile_la_LIBADD) $(LIBS)
ecsfile.la: $(ecsfile_la_OBJECTS) $(ecsfile_la_DEPENDENCIES) $(EXTRA_ecsfile_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(ecsfile_la_OBJECTS) $(ecsfile_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_ecsfile_la_rpath) $(ecsfile_la_OBJECTS) $(ecsfile_la_LIBADD) $(LIBS)
ezdfile.la: $(ezdfile_la_OBJECTS) $(ezdfile_la_DEPENDENCIES) $(EXTRA_ezdfile_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(ezdfile_la_OBJECTS) $(ezdfile_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_ezdfile_la_rpath) $(ezdfile_la_OBJECTS) $(ezdfile_la_LIBADD) $(LIBS)
femtoscan-txt.la: $(femtoscan_txt_la_OBJECTS) $(femtoscan_txt_la_DEPENDENCIES) $(EXTRA_femtoscan_txt_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(femtoscan_txt_la_OBJECTS) $(femtoscan_txt_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_femtoscan_txt_la_rpath) $(femtoscan_txt_la_OBJECTS) $(femtoscan_txt_la_LIBADD) $(LIBS)
femtoscan.la: $(femtoscan_la_OBJECTS) $(femtoscan_la_DEPENDENCIES) $(EXTRA_femtoscan_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(femtoscan_la_OBJECTS) $(femtoscan_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_femtoscan_la_rpath) $(femtoscan_la_OBJECTS) $(femtoscan_la_LIBADD) $(LIBS)
+
+file.la: $(file_la_OBJECTS) $(file_la_DEPENDENCIES) $(EXTRA_file_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(file_la_LINK) $(am_file_la_rpath) $(file_la_OBJECTS) $(file_la_LIBADD) $(LIBS)
fitsfile.la: $(fitsfile_la_OBJECTS) $(fitsfile_la_DEPENDENCIES) $(EXTRA_fitsfile_la_DEPENDENCIES)
$(AM_V_CCLD)$(fitsfile_la_LINK) $(am_fitsfile_la_rpath) $(fitsfile_la_OBJECTS) $(fitsfile_la_LIBADD) $(LIBS)
gdeffile.la: $(gdeffile_la_OBJECTS) $(gdeffile_la_DEPENDENCIES) $(EXTRA_gdeffile_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(gdeffile_la_OBJECTS) $(gdeffile_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_gdeffile_la_rpath) $(gdeffile_la_OBJECTS) $(gdeffile_la_LIBADD) $(LIBS)
gsffile.la: $(gsffile_la_OBJECTS) $(gsffile_la_DEPENDENCIES) $(EXTRA_gsffile_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(gsffile_la_OBJECTS) $(gsffile_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_gsffile_la_rpath) $(gsffile_la_OBJECTS) $(gsffile_la_LIBADD) $(LIBS)
gwyfile.la: $(gwyfile_la_OBJECTS) $(gwyfile_la_DEPENDENCIES) $(EXTRA_gwyfile_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(gwyfile_la_OBJECTS) $(gwyfile_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_gwyfile_la_rpath) $(gwyfile_la_OBJECTS) $(gwyfile_la_LIBADD) $(LIBS)
gxyzffile.la: $(gxyzffile_la_OBJECTS) $(gxyzffile_la_DEPENDENCIES) $(EXTRA_gxyzffile_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(gxyzffile_la_OBJECTS) $(gxyzffile_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_gxyzffile_la_rpath) $(gxyzffile_la_OBJECTS) $(gxyzffile_la_LIBADD) $(LIBS)
hdf4file.la: $(hdf4file_la_OBJECTS) $(hdf4file_la_DEPENDENCIES) $(EXTRA_hdf4file_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(hdf4file_la_OBJECTS) $(hdf4file_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_hdf4file_la_rpath) $(hdf4file_la_OBJECTS) $(hdf4file_la_LIBADD) $(LIBS)
hdrimage.la: $(hdrimage_la_OBJECTS) $(hdrimage_la_DEPENDENCIES) $(EXTRA_hdrimage_la_DEPENDENCIES)
$(AM_V_CXXLD)$(hdrimage_la_LINK) $(am_hdrimage_la_rpath) $(hdrimage_la_OBJECTS) $(hdrimage_la_LIBADD) $(LIBS)
hitachi-afm.la: $(hitachi_afm_la_OBJECTS) $(hitachi_afm_la_DEPENDENCIES) $(EXTRA_hitachi_afm_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(hitachi_afm_la_OBJECTS) $(hitachi_afm_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_hitachi_afm_la_rpath) $(hitachi_afm_la_OBJECTS) $(hitachi_afm_la_LIBADD) $(LIBS)
hitachi-sem.la: $(hitachi_sem_la_OBJECTS) $(hitachi_sem_la_DEPENDENCIES) $(EXTRA_hitachi_sem_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(hitachi_sem_la_OBJECTS) $(hitachi_sem_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_hitachi_sem_la_rpath) $(hitachi_sem_la_OBJECTS) $(hitachi_sem_la_LIBADD) $(LIBS)
igorfile.la: $(igorfile_la_OBJECTS) $(igorfile_la_DEPENDENCIES) $(EXTRA_igorfile_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(igorfile_la_OBJECTS) $(igorfile_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_igorfile_la_rpath) $(igorfile_la_OBJECTS) $(igorfile_la_LIBADD) $(LIBS)
imgexport.la: $(imgexport_la_OBJECTS) $(imgexport_la_DEPENDENCIES) $(EXTRA_imgexport_la_DEPENDENCIES)
$(AM_V_CCLD)$(imgexport_la_LINK) -rpath $(filedir) $(imgexport_la_OBJECTS) $(imgexport_la_LIBADD) $(LIBS)
intelliwave.la: $(intelliwave_la_OBJECTS) $(intelliwave_la_DEPENDENCIES) $(EXTRA_intelliwave_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(intelliwave_la_OBJECTS) $(intelliwave_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_intelliwave_la_rpath) $(intelliwave_la_OBJECTS) $(intelliwave_la_LIBADD) $(LIBS)
intematix.la: $(intematix_la_OBJECTS) $(intematix_la_DEPENDENCIES) $(EXTRA_intematix_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(intematix_la_OBJECTS) $(intematix_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_intematix_la_rpath) $(intematix_la_OBJECTS) $(intematix_la_LIBADD) $(LIBS)
iso28600.la: $(iso28600_la_OBJECTS) $(iso28600_la_DEPENDENCIES) $(EXTRA_iso28600_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(iso28600_la_OBJECTS) $(iso28600_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_iso28600_la_rpath) $(iso28600_la_OBJECTS) $(iso28600_la_LIBADD) $(LIBS)
jeol.la: $(jeol_la_OBJECTS) $(jeol_la_DEPENDENCIES) $(EXTRA_jeol_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(jeol_la_OBJECTS) $(jeol_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_jeol_la_rpath) $(jeol_la_OBJECTS) $(jeol_la_LIBADD) $(LIBS)
jpkscan.la: $(jpkscan_la_OBJECTS) $(jpkscan_la_DEPENDENCIES) $(EXTRA_jpkscan_la_DEPENDENCIES)
$(AM_V_CCLD)$(jpkscan_la_LINK) -rpath $(filedir) $(jpkscan_la_OBJECTS) $(jpkscan_la_LIBADD) $(LIBS)
jspmfile.la: $(jspmfile_la_OBJECTS) $(jspmfile_la_DEPENDENCIES) $(EXTRA_jspmfile_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(jspmfile_la_OBJECTS) $(jspmfile_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_jspmfile_la_rpath) $(jspmfile_la_OBJECTS) $(jspmfile_la_LIBADD) $(LIBS)
keyence.la: $(keyence_la_OBJECTS) $(keyence_la_DEPENDENCIES) $(EXTRA_keyence_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(keyence_la_OBJECTS) $(keyence_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_keyence_la_rpath) $(keyence_la_OBJECTS) $(keyence_la_LIBADD) $(LIBS)
leica.la: $(leica_la_OBJECTS) $(leica_la_DEPENDENCIES) $(EXTRA_leica_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(leica_la_OBJECTS) $(leica_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_leica_la_rpath) $(leica_la_OBJECTS) $(leica_la_LIBADD) $(LIBS)
lextfile.la: $(lextfile_la_OBJECTS) $(lextfile_la_DEPENDENCIES) $(EXTRA_lextfile_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(lextfile_la_OBJECTS) $(lextfile_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_lextfile_la_rpath) $(lextfile_la_OBJECTS) $(lextfile_la_LIBADD) $(LIBS)
magellan.la: $(magellan_la_OBJECTS) $(magellan_la_DEPENDENCIES) $(EXTRA_magellan_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(magellan_la_OBJECTS) $(magellan_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_magellan_la_rpath) $(magellan_la_OBJECTS) $(magellan_la_LIBADD) $(LIBS)
mapvue.la: $(mapvue_la_OBJECTS) $(mapvue_la_DEPENDENCIES) $(EXTRA_mapvue_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(mapvue_la_OBJECTS) $(mapvue_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_mapvue_la_rpath) $(mapvue_la_OBJECTS) $(mapvue_la_LIBADD) $(LIBS)
metropro.la: $(metropro_la_OBJECTS) $(metropro_la_DEPENDENCIES) $(EXTRA_metropro_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(metropro_la_OBJECTS) $(metropro_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_metropro_la_rpath) $(metropro_la_OBJECTS) $(metropro_la_LIBADD) $(LIBS)
microprof.la: $(microprof_la_OBJECTS) $(microprof_la_DEPENDENCIES) $(EXTRA_microprof_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(microprof_la_OBJECTS) $(microprof_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_microprof_la_rpath) $(microprof_la_OBJECTS) $(microprof_la_LIBADD) $(LIBS)
miffile.la: $(miffile_la_OBJECTS) $(miffile_la_DEPENDENCIES) $(EXTRA_miffile_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(miffile_la_OBJECTS) $(miffile_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_miffile_la_rpath) $(miffile_la_OBJECTS) $(miffile_la_LIBADD) $(LIBS)
mifile.la: $(mifile_la_OBJECTS) $(mifile_la_DEPENDENCIES) $(EXTRA_mifile_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(mifile_la_OBJECTS) $(mifile_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_mifile_la_rpath) $(mifile_la_OBJECTS) $(mifile_la_LIBADD) $(LIBS)
mulfile.la: $(mulfile_la_OBJECTS) $(mulfile_la_DEPENDENCIES) $(EXTRA_mulfile_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(mulfile_la_OBJECTS) $(mulfile_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_mulfile_la_rpath) $(mulfile_la_OBJECTS) $(mulfile_la_LIBADD) $(LIBS)
nanoeducator.la: $(nanoeducator_la_OBJECTS) $(nanoeducator_la_DEPENDENCIES) $(EXTRA_nanoeducator_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(nanoeducator_la_OBJECTS) $(nanoeducator_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_nanoeducator_la_rpath) $(nanoeducator_la_OBJECTS) $(nanoeducator_la_LIBADD) $(LIBS)
nanomagnetics.la: $(nanomagnetics_la_OBJECTS) $(nanomagnetics_la_DEPENDENCIES) $(EXTRA_nanomagnetics_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(nanomagnetics_la_OBJECTS) $(nanomagnetics_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_nanomagnetics_la_rpath) $(nanomagnetics_la_OBJECTS) $(nanomagnetics_la_LIBADD) $(LIBS)
nanonics.la: $(nanonics_la_OBJECTS) $(nanonics_la_DEPENDENCIES) $(EXTRA_nanonics_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(nanonics_la_OBJECTS) $(nanonics_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_nanonics_la_rpath) $(nanonics_la_OBJECTS) $(nanonics_la_LIBADD) $(LIBS)
nanonis.la: $(nanonis_la_OBJECTS) $(nanonis_la_DEPENDENCIES) $(EXTRA_nanonis_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(nanonis_la_OBJECTS) $(nanonis_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_nanonis_la_rpath) $(nanonis_la_OBJECTS) $(nanonis_la_LIBADD) $(LIBS)
nanoobserver.la: $(nanoobserver_la_OBJECTS) $(nanoobserver_la_DEPENDENCIES) $(EXTRA_nanoobserver_la_DEPENDENCIES)
$(AM_V_CCLD)$(nanoobserver_la_LINK) $(am_nanoobserver_la_rpath) $(nanoobserver_la_OBJECTS) $(nanoobserver_la_LIBADD) $(LIBS)
nanoscan.la: $(nanoscan_la_OBJECTS) $(nanoscan_la_DEPENDENCIES) $(EXTRA_nanoscan_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(nanoscan_la_OBJECTS) $(nanoscan_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_nanoscan_la_rpath) $(nanoscan_la_OBJECTS) $(nanoscan_la_LIBADD) $(LIBS)
nanoscantech.la: $(nanoscantech_la_OBJECTS) $(nanoscantech_la_DEPENDENCIES) $(EXTRA_nanoscantech_la_DEPENDENCIES)
$(AM_V_CCLD)$(nanoscantech_la_LINK) $(am_nanoscantech_la_rpath) $(nanoscantech_la_OBJECTS) $(nanoscantech_la_LIBADD) $(LIBS)
nanoscope-ii.la: $(nanoscope_ii_la_OBJECTS) $(nanoscope_ii_la_DEPENDENCIES) $(EXTRA_nanoscope_ii_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(nanoscope_ii_la_OBJECTS) $(nanoscope_ii_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_nanoscope_ii_la_rpath) $(nanoscope_ii_la_OBJECTS) $(nanoscope_ii_la_LIBADD) $(LIBS)
nanoscope.la: $(nanoscope_la_OBJECTS) $(nanoscope_la_DEPENDENCIES) $(EXTRA_nanoscope_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(nanoscope_la_OBJECTS) $(nanoscope_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_nanoscope_la_rpath) $(nanoscope_la_OBJECTS) $(nanoscope_la_LIBADD) $(LIBS)
nanotop.la: $(nanotop_la_OBJECTS) $(nanotop_la_DEPENDENCIES) $(EXTRA_nanotop_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(nanotop_la_OBJECTS) $(nanotop_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_nanotop_la_rpath) $(nanotop_la_OBJECTS) $(nanotop_la_LIBADD) $(LIBS)
netcdf.la: $(netcdf_la_OBJECTS) $(netcdf_la_DEPENDENCIES) $(EXTRA_netcdf_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(netcdf_la_OBJECTS) $(netcdf_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_netcdf_la_rpath) $(netcdf_la_OBJECTS) $(netcdf_la_LIBADD) $(LIBS)
nmmxyz.la: $(nmmxyz_la_OBJECTS) $(nmmxyz_la_DEPENDENCIES) $(EXTRA_nmmxyz_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(nmmxyz_la_OBJECTS) $(nmmxyz_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_nmmxyz_la_rpath) $(nmmxyz_la_OBJECTS) $(nmmxyz_la_LIBADD) $(LIBS)
nrrdfile.la: $(nrrdfile_la_OBJECTS) $(nrrdfile_la_DEPENDENCIES) $(EXTRA_nrrdfile_la_DEPENDENCIES)
$(AM_V_CCLD)$(LINK) -rpath $(filedir) $(nrrdfile_la_OBJECTS) $(nrrdfile_la_LIBADD) $(LIBS)
nt-mdt.la: $(nt_mdt_la_OBJECTS) $(nt_mdt_la_DEPENDENCIES) $(EXTRA_nt_mdt_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(nt_mdt_la_OBJECTS) $(nt_mdt_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_nt_mdt_la_rpath) $(nt_mdt_la_OBJECTS) $(nt_mdt_la_LIBADD) $(LIBS)
nxiifile.la: $(nxiifile_la_OBJECTS) $(nxiifile_la_DEPENDENCIES) $(EXTRA_nxiifile_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(nxiifile_la_OBJECTS) $(nxiifile_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_nxiifile_la_rpath) $(nxiifile_la_OBJECTS) $(nxiifile_la_LIBADD) $(LIBS)
oldmda.la: $(oldmda_la_OBJECTS) $(oldmda_la_DEPENDENCIES) $(EXTRA_oldmda_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(oldmda_la_OBJECTS) $(oldmda_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_oldmda_la_rpath) $(oldmda_la_OBJECTS) $(oldmda_la_LIBADD) $(LIBS)
ols.la: $(ols_la_OBJECTS) $(ols_la_DEPENDENCIES) $(EXTRA_ols_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(ols_la_OBJECTS) $(ols_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_ols_la_rpath) $(ols_la_OBJECTS) $(ols_la_LIBADD) $(LIBS)
ometiff.la: $(ometiff_la_OBJECTS) $(ometiff_la_DEPENDENCIES) $(EXTRA_ometiff_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(ometiff_la_OBJECTS) $(ometiff_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_ometiff_la_rpath) $(ometiff_la_OBJECTS) $(ometiff_la_LIBADD) $(LIBS)
omicron.la: $(omicron_la_OBJECTS) $(omicron_la_DEPENDENCIES) $(EXTRA_omicron_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(omicron_la_OBJECTS) $(omicron_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_omicron_la_rpath) $(omicron_la_OBJECTS) $(omicron_la_LIBADD) $(LIBS)
omicronflat.la: $(omicronflat_la_OBJECTS) $(omicronflat_la_DEPENDENCIES) $(EXTRA_omicronflat_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(omicronflat_la_OBJECTS) $(omicronflat_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_omicronflat_la_rpath) $(omicronflat_la_OBJECTS) $(omicronflat_la_LIBADD) $(LIBS)
omicronmatrix.la: $(omicronmatrix_la_OBJECTS) $(omicronmatrix_la_DEPENDENCIES) $(EXTRA_omicronmatrix_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(omicronmatrix_la_OBJECTS) $(omicronmatrix_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_omicronmatrix_la_rpath) $(omicronmatrix_la_OBJECTS) $(omicronmatrix_la_LIBADD) $(LIBS)
opdfile.la: $(opdfile_la_OBJECTS) $(opdfile_la_DEPENDENCIES) $(EXTRA_opdfile_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(opdfile_la_OBJECTS) $(opdfile_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_opdfile_la_rpath) $(opdfile_la_OBJECTS) $(opdfile_la_LIBADD) $(LIBS)
opengps.la: $(opengps_la_OBJECTS) $(opengps_la_DEPENDENCIES) $(EXTRA_opengps_la_DEPENDENCIES)
$(AM_V_CCLD)$(opengps_la_LINK) $(am_opengps_la_rpath) $(opengps_la_OBJECTS) $(opengps_la_LIBADD) $(LIBS)
@@ -1667,136 +2073,139 @@ pixmap.la: $(pixmap_la_OBJECTS) $(pixmap_la_DEPENDENCIES) $(EXTRA_pixmap_la_DEPE
$(AM_V_CCLD)$(pixmap_la_LINK) -rpath $(filedir) $(pixmap_la_OBJECTS) $(pixmap_la_LIBADD) $(LIBS)
pltfile.la: $(pltfile_la_OBJECTS) $(pltfile_la_DEPENDENCIES) $(EXTRA_pltfile_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(pltfile_la_OBJECTS) $(pltfile_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_pltfile_la_rpath) $(pltfile_la_OBJECTS) $(pltfile_la_LIBADD) $(LIBS)
pnifile.la: $(pnifile_la_OBJECTS) $(pnifile_la_DEPENDENCIES) $(EXTRA_pnifile_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(pnifile_la_OBJECTS) $(pnifile_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_pnifile_la_rpath) $(pnifile_la_OBJECTS) $(pnifile_la_LIBADD) $(LIBS)
princetonspe.la: $(princetonspe_la_OBJECTS) $(princetonspe_la_DEPENDENCIES) $(EXTRA_princetonspe_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(princetonspe_la_OBJECTS) $(princetonspe_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_princetonspe_la_rpath) $(princetonspe_la_OBJECTS) $(princetonspe_la_LIBADD) $(LIBS)
psia.la: $(psia_la_OBJECTS) $(psia_la_DEPENDENCIES) $(EXTRA_psia_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(psia_la_OBJECTS) $(psia_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_psia_la_rpath) $(psia_la_OBJECTS) $(psia_la_LIBADD) $(LIBS)
pt3file.la: $(pt3file_la_OBJECTS) $(pt3file_la_DEPENDENCIES) $(EXTRA_pt3file_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(pt3file_la_OBJECTS) $(pt3file_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_pt3file_la_rpath) $(pt3file_la_OBJECTS) $(pt3file_la_LIBADD) $(LIBS)
quesant.la: $(quesant_la_OBJECTS) $(quesant_la_DEPENDENCIES) $(EXTRA_quesant_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(quesant_la_OBJECTS) $(quesant_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_quesant_la_rpath) $(quesant_la_OBJECTS) $(quesant_la_LIBADD) $(LIBS)
rawfile.la: $(rawfile_la_OBJECTS) $(rawfile_la_DEPENDENCIES) $(EXTRA_rawfile_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(rawfile_la_OBJECTS) $(rawfile_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_rawfile_la_rpath) $(rawfile_la_OBJECTS) $(rawfile_la_LIBADD) $(LIBS)
rawgraph.la: $(rawgraph_la_OBJECTS) $(rawgraph_la_DEPENDENCIES) $(EXTRA_rawgraph_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(rawgraph_la_OBJECTS) $(rawgraph_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_rawgraph_la_rpath) $(rawgraph_la_OBJECTS) $(rawgraph_la_LIBADD) $(LIBS)
rawxyz.la: $(rawxyz_la_OBJECTS) $(rawxyz_la_DEPENDENCIES) $(EXTRA_rawxyz_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(rawxyz_la_OBJECTS) $(rawxyz_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_rawxyz_la_rpath) $(rawxyz_la_OBJECTS) $(rawxyz_la_LIBADD) $(LIBS)
renishaw.la: $(renishaw_la_OBJECTS) $(renishaw_la_DEPENDENCIES) $(EXTRA_renishaw_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(renishaw_la_OBJECTS) $(renishaw_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_renishaw_la_rpath) $(renishaw_la_OBJECTS) $(renishaw_la_LIBADD) $(LIBS)
rhk-sm3.la: $(rhk_sm3_la_OBJECTS) $(rhk_sm3_la_DEPENDENCIES) $(EXTRA_rhk_sm3_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(rhk_sm3_la_OBJECTS) $(rhk_sm3_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_rhk_sm3_la_rpath) $(rhk_sm3_la_OBJECTS) $(rhk_sm3_la_LIBADD) $(LIBS)
rhk-sm4.la: $(rhk_sm4_la_OBJECTS) $(rhk_sm4_la_DEPENDENCIES) $(EXTRA_rhk_sm4_la_DEPENDENCIES)
$(AM_V_CCLD)$(LINK) -rpath $(filedir) $(rhk_sm4_la_OBJECTS) $(rhk_sm4_la_LIBADD) $(LIBS)
rhk-spm32.la: $(rhk_spm32_la_OBJECTS) $(rhk_spm32_la_DEPENDENCIES) $(EXTRA_rhk_spm32_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(rhk_spm32_la_OBJECTS) $(rhk_spm32_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_rhk_spm32_la_rpath) $(rhk_spm32_la_OBJECTS) $(rhk_spm32_la_LIBADD) $(LIBS)
robotics.la: $(robotics_la_OBJECTS) $(robotics_la_DEPENDENCIES) $(EXTRA_robotics_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(robotics_la_OBJECTS) $(robotics_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_robotics_la_rpath) $(robotics_la_OBJECTS) $(robotics_la_LIBADD) $(LIBS)
s94file.la: $(s94file_la_OBJECTS) $(s94file_la_DEPENDENCIES) $(EXTRA_s94file_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(s94file_la_OBJECTS) $(s94file_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_s94file_la_rpath) $(s94file_la_OBJECTS) $(s94file_la_LIBADD) $(LIBS)
sdfile.la: $(sdfile_la_OBJECTS) $(sdfile_la_DEPENDENCIES) $(EXTRA_sdfile_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(sdfile_la_OBJECTS) $(sdfile_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_sdfile_la_rpath) $(sdfile_la_OBJECTS) $(sdfile_la_LIBADD) $(LIBS)
seiko.la: $(seiko_la_OBJECTS) $(seiko_la_DEPENDENCIES) $(EXTRA_seiko_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(seiko_la_OBJECTS) $(seiko_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_seiko_la_rpath) $(seiko_la_OBJECTS) $(seiko_la_LIBADD) $(LIBS)
sensofar.la: $(sensofar_la_OBJECTS) $(sensofar_la_DEPENDENCIES) $(EXTRA_sensofar_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(sensofar_la_OBJECTS) $(sensofar_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_sensofar_la_rpath) $(sensofar_la_OBJECTS) $(sensofar_la_LIBADD) $(LIBS)
sensofarx.la: $(sensofarx_la_OBJECTS) $(sensofarx_la_DEPENDENCIES) $(EXTRA_sensofarx_la_DEPENDENCIES)
$(AM_V_CCLD)$(sensofarx_la_LINK) $(am_sensofarx_la_rpath) $(sensofarx_la_OBJECTS) $(sensofarx_la_LIBADD) $(LIBS)
sensolytics.la: $(sensolytics_la_OBJECTS) $(sensolytics_la_DEPENDENCIES) $(EXTRA_sensolytics_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(sensolytics_la_OBJECTS) $(sensolytics_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_sensolytics_la_rpath) $(sensolytics_la_OBJECTS) $(sensolytics_la_LIBADD) $(LIBS)
shimadzu.la: $(shimadzu_la_OBJECTS) $(shimadzu_la_DEPENDENCIES) $(EXTRA_shimadzu_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(shimadzu_la_OBJECTS) $(shimadzu_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_shimadzu_la_rpath) $(shimadzu_la_OBJECTS) $(shimadzu_la_LIBADD) $(LIBS)
sicmfile.la: $(sicmfile_la_OBJECTS) $(sicmfile_la_DEPENDENCIES) $(EXTRA_sicmfile_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(sicmfile_la_OBJECTS) $(sicmfile_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_sicmfile_la_rpath) $(sicmfile_la_OBJECTS) $(sicmfile_la_LIBADD) $(LIBS)
sis.la: $(sis_la_OBJECTS) $(sis_la_DEPENDENCIES) $(EXTRA_sis_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(sis_la_OBJECTS) $(sis_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_sis_la_rpath) $(sis_la_OBJECTS) $(sis_la_LIBADD) $(LIBS)
spip-asc.la: $(spip_asc_la_OBJECTS) $(spip_asc_la_DEPENDENCIES) $(EXTRA_spip_asc_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(spip_asc_la_OBJECTS) $(spip_asc_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_spip_asc_la_rpath) $(spip_asc_la_OBJECTS) $(spip_asc_la_LIBADD) $(LIBS)
spml.la: $(spml_la_OBJECTS) $(spml_la_DEPENDENCIES) $(EXTRA_spml_la_DEPENDENCIES)
$(AM_V_CCLD)$(spml_la_LINK) $(am_spml_la_rpath) $(spml_la_OBJECTS) $(spml_la_LIBADD) $(LIBS)
spmlab.la: $(spmlab_la_OBJECTS) $(spmlab_la_DEPENDENCIES) $(EXTRA_spmlab_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(spmlab_la_OBJECTS) $(spmlab_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_spmlab_la_rpath) $(spmlab_la_OBJECTS) $(spmlab_la_LIBADD) $(LIBS)
spmlabf.la: $(spmlabf_la_OBJECTS) $(spmlabf_la_DEPENDENCIES) $(EXTRA_spmlabf_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(spmlabf_la_OBJECTS) $(spmlabf_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_spmlabf_la_rpath) $(spmlabf_la_OBJECTS) $(spmlabf_la_LIBADD) $(LIBS)
spmxfile.la: $(spmxfile_la_OBJECTS) $(spmxfile_la_DEPENDENCIES) $(EXTRA_spmxfile_la_DEPENDENCIES)
$(AM_V_CCLD)$(spmxfile_la_LINK) $(am_spmxfile_la_rpath) $(spmxfile_la_OBJECTS) $(spmxfile_la_LIBADD) $(LIBS)
stmprg.la: $(stmprg_la_OBJECTS) $(stmprg_la_DEPENDENCIES) $(EXTRA_stmprg_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(stmprg_la_OBJECTS) $(stmprg_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_stmprg_la_rpath) $(stmprg_la_OBJECTS) $(stmprg_la_LIBADD) $(LIBS)
stpfile.la: $(stpfile_la_OBJECTS) $(stpfile_la_DEPENDENCIES) $(EXTRA_stpfile_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(stpfile_la_OBJECTS) $(stpfile_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_stpfile_la_rpath) $(stpfile_la_OBJECTS) $(stpfile_la_LIBADD) $(LIBS)
surffile.la: $(surffile_la_OBJECTS) $(surffile_la_DEPENDENCIES) $(EXTRA_surffile_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(surffile_la_OBJECTS) $(surffile_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_surffile_la_rpath) $(surffile_la_OBJECTS) $(surffile_la_LIBADD) $(LIBS)
tescan.la: $(tescan_la_OBJECTS) $(tescan_la_DEPENDENCIES) $(EXTRA_tescan_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(tescan_la_OBJECTS) $(tescan_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_tescan_la_rpath) $(tescan_la_OBJECTS) $(tescan_la_LIBADD) $(LIBS)
tiaser.la: $(tiaser_la_OBJECTS) $(tiaser_la_DEPENDENCIES) $(EXTRA_tiaser_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(tiaser_la_OBJECTS) $(tiaser_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_tiaser_la_rpath) $(tiaser_la_OBJECTS) $(tiaser_la_LIBADD) $(LIBS)
unisoku.la: $(unisoku_la_OBJECTS) $(unisoku_la_DEPENDENCIES) $(EXTRA_unisoku_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(unisoku_la_OBJECTS) $(unisoku_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_unisoku_la_rpath) $(unisoku_la_OBJECTS) $(unisoku_la_LIBADD) $(LIBS)
vtkfile.la: $(vtkfile_la_OBJECTS) $(vtkfile_la_DEPENDENCIES) $(EXTRA_vtkfile_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(vtkfile_la_OBJECTS) $(vtkfile_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_vtkfile_la_rpath) $(vtkfile_la_OBJECTS) $(vtkfile_la_LIBADD) $(LIBS)
win_stm.la: $(win_stm_la_OBJECTS) $(win_stm_la_DEPENDENCIES) $(EXTRA_win_stm_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(win_stm_la_OBJECTS) $(win_stm_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_win_stm_la_rpath) $(win_stm_la_OBJECTS) $(win_stm_la_LIBADD) $(LIBS)
wipfile.la: $(wipfile_la_OBJECTS) $(wipfile_la_DEPENDENCIES) $(EXTRA_wipfile_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(wipfile_la_OBJECTS) $(wipfile_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_wipfile_la_rpath) $(wipfile_la_OBJECTS) $(wipfile_la_LIBADD) $(LIBS)
witec-asc.la: $(witec_asc_la_OBJECTS) $(witec_asc_la_DEPENDENCIES) $(EXTRA_witec_asc_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(witec_asc_la_OBJECTS) $(witec_asc_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_witec_asc_la_rpath) $(witec_asc_la_OBJECTS) $(witec_asc_la_LIBADD) $(LIBS)
witfile.la: $(witfile_la_OBJECTS) $(witfile_la_DEPENDENCIES) $(EXTRA_witfile_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(witfile_la_OBJECTS) $(witfile_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_witfile_la_rpath) $(witfile_la_OBJECTS) $(witfile_la_LIBADD) $(LIBS)
wsffile.la: $(wsffile_la_OBJECTS) $(wsffile_la_DEPENDENCIES) $(EXTRA_wsffile_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(wsffile_la_OBJECTS) $(wsffile_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_wsffile_la_rpath) $(wsffile_la_OBJECTS) $(wsffile_la_LIBADD) $(LIBS)
wsxmfile.la: $(wsxmfile_la_OBJECTS) $(wsxmfile_la_DEPENDENCIES) $(EXTRA_wsxmfile_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(wsxmfile_la_OBJECTS) $(wsxmfile_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_wsxmfile_la_rpath) $(wsxmfile_la_OBJECTS) $(wsxmfile_la_LIBADD) $(LIBS)
xyzexport.la: $(xyzexport_la_OBJECTS) $(xyzexport_la_DEPENDENCIES) $(EXTRA_xyzexport_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(xyzexport_la_OBJECTS) $(xyzexport_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_xyzexport_la_rpath) $(xyzexport_la_OBJECTS) $(xyzexport_la_LIBADD) $(LIBS)
zeiss.la: $(zeiss_la_OBJECTS) $(zeiss_la_DEPENDENCIES) $(EXTRA_zeiss_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(zeiss_la_OBJECTS) $(zeiss_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_zeiss_la_rpath) $(zeiss_la_OBJECTS) $(zeiss_la_LIBADD) $(LIBS)
+
+zeisslsm.la: $(zeisslsm_la_OBJECTS) $(zeisslsm_la_DEPENDENCIES) $(EXTRA_zeisslsm_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(LINK) $(am_zeisslsm_la_rpath) $(zeisslsm_la_OBJECTS) $(zeisslsm_la_LIBADD) $(LIBS)
zemax.la: $(zemax_la_OBJECTS) $(zemax_la_DEPENDENCIES) $(EXTRA_zemax_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(filedir) $(zemax_la_OBJECTS) $(zemax_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_zemax_la_rpath) $(zemax_la_OBJECTS) $(zemax_la_LIBADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@@ -1821,6 +2230,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/codevfile.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/createc.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/csmfile.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dektakvca.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dektakxml.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dimensionfile.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dm3file.Plo at am__quote@
@@ -1830,6 +2240,115 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ezdfile.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/femtoscan-txt.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/femtoscan.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-accurexii-txt.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-aistfile.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-alicona.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-ambfile.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-anfatec.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-apefile.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-asciiexport.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-assing-afm.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-attocube.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-bcrfile.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-burleigh.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-burleigh_bii.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-burleigh_exp.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-codevfile.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-csmfile.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-dektakvca.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-dektakxml.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-dimensionfile.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-dm3file.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-dmefile.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-dumbfile.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-ecsfile.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-ezdfile.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-femtoscan-txt.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-femtoscan.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-file.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-gdeffile.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-gsffile.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-gwyfile.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-gxyzffile.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-hdf4file.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-hitachi-afm.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-hitachi-sem.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-igorfile.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-intelliwave.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-intematix.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-iso28600.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-jeol.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-jspmfile.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-keyence.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-leica.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-lextfile.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-magellan.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-mapvue.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-metropro.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-microprof.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-miffile.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-mifile.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-mulfile.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-nanoeducator.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-nanomagnetics.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-nanonics.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-nanonis.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-nanoscan.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-nanoscope-ii.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-nanoscope.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-nanotop.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-netcdf.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-nmmxyz.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-nt-mdt.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-nxiifile.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-oldmda.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-ols.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-ometiff.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-omicron.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-omicronflat.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-omicronmatrix.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-opdfile.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-pltfile.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-pnifile.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-princetonspe.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-psia.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-pt3file.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-quesant.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-rawfile.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-rawgraph.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-rawxyz.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-renishaw.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-rhk-sm3.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-rhk-spm32.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-robotics.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-s94file.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-sdfile.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-seiko.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-sensofar.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-sensolytics.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-shimadzu.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-sicmfile.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-sis.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-spip-asc.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-spmlab.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-spmlabf.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-stmprg.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-stpfile.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-surffile.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-tescan.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-tiaser.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-unisoku.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-vtkfile.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-win_stm.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-wipfile.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-witec-asc.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-witfile.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-wsffile.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-wsxmfile.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-xyzexport.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-zeiss.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-zeisslsm.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file_la-zemax.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/fitsfile_la-fitsfile.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gdeffile.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gsffile.Plo at am__quote@
@@ -1924,6 +2443,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/wsxmfile.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/xyzexport.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/zeiss.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/zeisslsm.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/zemax.Plo at am__quote@
.c.o:
@@ -1954,6 +2474,769 @@ apedaxfile_la-apedaxfile.lo: apedaxfile.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(apedaxfile_la_CFLAGS) $(CFLAGS) -c -o apedaxfile_la-apedaxfile.lo `test -f 'apedaxfile.c' || echo '$(srcdir)/'`apedaxfile.c
+file_la-accurexii-txt.lo: accurexii-txt.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-accurexii-txt.lo -MD -MP -MF $(DEPDIR)/file_la-accurexii-txt.Tpo -c -o file_la-accurexii-txt.lo `test -f 'accurexii-txt.c' || echo '$(srcdir)/'`accurexii-txt.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-accurexii-txt.Tpo $(DEPDIR)/file_la-accurexii-txt.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='accurexii-txt.c' object='file_la-accurexii-txt.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-accurexii-txt.lo `test -f 'accurexii-txt.c' || echo '$(srcdir)/'`accurexii-txt.c
+
+file_la-aistfile.lo: aistfile.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-aistfile.lo -MD -MP -MF $(DEPDIR)/file_la-aistfile.Tpo -c -o file_la-aistfile.lo `test -f 'aistfile.c' || echo '$(srcdir)/'`aistfile.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-aistfile.Tpo $(DEPDIR)/file_la-aistfile.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='aistfile.c' object='file_la-aistfile.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-aistfile.lo `test -f 'aistfile.c' || echo '$(srcdir)/'`aistfile.c
+
+file_la-alicona.lo: alicona.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-alicona.lo -MD -MP -MF $(DEPDIR)/file_la-alicona.Tpo -c -o file_la-alicona.lo `test -f 'alicona.c' || echo '$(srcdir)/'`alicona.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-alicona.Tpo $(DEPDIR)/file_la-alicona.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='alicona.c' object='file_la-alicona.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-alicona.lo `test -f 'alicona.c' || echo '$(srcdir)/'`alicona.c
+
+file_la-ambfile.lo: ambfile.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-ambfile.lo -MD -MP -MF $(DEPDIR)/file_la-ambfile.Tpo -c -o file_la-ambfile.lo `test -f 'ambfile.c' || echo '$(srcdir)/'`ambfile.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-ambfile.Tpo $(DEPDIR)/file_la-ambfile.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ambfile.c' object='file_la-ambfile.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-ambfile.lo `test -f 'ambfile.c' || echo '$(srcdir)/'`ambfile.c
+
+file_la-anfatec.lo: anfatec.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-anfatec.lo -MD -MP -MF $(DEPDIR)/file_la-anfatec.Tpo -c -o file_la-anfatec.lo `test -f 'anfatec.c' || echo '$(srcdir)/'`anfatec.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-anfatec.Tpo $(DEPDIR)/file_la-anfatec.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='anfatec.c' object='file_la-anfatec.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-anfatec.lo `test -f 'anfatec.c' || echo '$(srcdir)/'`anfatec.c
+
+file_la-apefile.lo: apefile.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-apefile.lo -MD -MP -MF $(DEPDIR)/file_la-apefile.Tpo -c -o file_la-apefile.lo `test -f 'apefile.c' || echo '$(srcdir)/'`apefile.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-apefile.Tpo $(DEPDIR)/file_la-apefile.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='apefile.c' object='file_la-apefile.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-apefile.lo `test -f 'apefile.c' || echo '$(srcdir)/'`apefile.c
+
+file_la-asciiexport.lo: asciiexport.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-asciiexport.lo -MD -MP -MF $(DEPDIR)/file_la-asciiexport.Tpo -c -o file_la-asciiexport.lo `test -f 'asciiexport.c' || echo '$(srcdir)/'`asciiexport.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-asciiexport.Tpo $(DEPDIR)/file_la-asciiexport.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='asciiexport.c' object='file_la-asciiexport.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-asciiexport.lo `test -f 'asciiexport.c' || echo '$(srcdir)/'`asciiexport.c
+
+file_la-assing-afm.lo: assing-afm.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-assing-afm.lo -MD -MP -MF $(DEPDIR)/file_la-assing-afm.Tpo -c -o file_la-assing-afm.lo `test -f 'assing-afm.c' || echo '$(srcdir)/'`assing-afm.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-assing-afm.Tpo $(DEPDIR)/file_la-assing-afm.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='assing-afm.c' object='file_la-assing-afm.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-assing-afm.lo `test -f 'assing-afm.c' || echo '$(srcdir)/'`assing-afm.c
+
+file_la-attocube.lo: attocube.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-attocube.lo -MD -MP -MF $(DEPDIR)/file_la-attocube.Tpo -c -o file_la-attocube.lo `test -f 'attocube.c' || echo '$(srcdir)/'`attocube.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-attocube.Tpo $(DEPDIR)/file_la-attocube.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='attocube.c' object='file_la-attocube.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-attocube.lo `test -f 'attocube.c' || echo '$(srcdir)/'`attocube.c
+
+file_la-bcrfile.lo: bcrfile.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-bcrfile.lo -MD -MP -MF $(DEPDIR)/file_la-bcrfile.Tpo -c -o file_la-bcrfile.lo `test -f 'bcrfile.c' || echo '$(srcdir)/'`bcrfile.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-bcrfile.Tpo $(DEPDIR)/file_la-bcrfile.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='bcrfile.c' object='file_la-bcrfile.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-bcrfile.lo `test -f 'bcrfile.c' || echo '$(srcdir)/'`bcrfile.c
+
+file_la-burleigh.lo: burleigh.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-burleigh.lo -MD -MP -MF $(DEPDIR)/file_la-burleigh.Tpo -c -o file_la-burleigh.lo `test -f 'burleigh.c' || echo '$(srcdir)/'`burleigh.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-burleigh.Tpo $(DEPDIR)/file_la-burleigh.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='burleigh.c' object='file_la-burleigh.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-burleigh.lo `test -f 'burleigh.c' || echo '$(srcdir)/'`burleigh.c
+
+file_la-burleigh_bii.lo: burleigh_bii.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-burleigh_bii.lo -MD -MP -MF $(DEPDIR)/file_la-burleigh_bii.Tpo -c -o file_la-burleigh_bii.lo `test -f 'burleigh_bii.c' || echo '$(srcdir)/'`burleigh_bii.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-burleigh_bii.Tpo $(DEPDIR)/file_la-burleigh_bii.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='burleigh_bii.c' object='file_la-burleigh_bii.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-burleigh_bii.lo `test -f 'burleigh_bii.c' || echo '$(srcdir)/'`burleigh_bii.c
+
+file_la-burleigh_exp.lo: burleigh_exp.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-burleigh_exp.lo -MD -MP -MF $(DEPDIR)/file_la-burleigh_exp.Tpo -c -o file_la-burleigh_exp.lo `test -f 'burleigh_exp.c' || echo '$(srcdir)/'`burleigh_exp.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-burleigh_exp.Tpo $(DEPDIR)/file_la-burleigh_exp.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='burleigh_exp.c' object='file_la-burleigh_exp.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-burleigh_exp.lo `test -f 'burleigh_exp.c' || echo '$(srcdir)/'`burleigh_exp.c
+
+file_la-codevfile.lo: codevfile.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-codevfile.lo -MD -MP -MF $(DEPDIR)/file_la-codevfile.Tpo -c -o file_la-codevfile.lo `test -f 'codevfile.c' || echo '$(srcdir)/'`codevfile.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-codevfile.Tpo $(DEPDIR)/file_la-codevfile.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='codevfile.c' object='file_la-codevfile.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-codevfile.lo `test -f 'codevfile.c' || echo '$(srcdir)/'`codevfile.c
+
+file_la-csmfile.lo: csmfile.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-csmfile.lo -MD -MP -MF $(DEPDIR)/file_la-csmfile.Tpo -c -o file_la-csmfile.lo `test -f 'csmfile.c' || echo '$(srcdir)/'`csmfile.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-csmfile.Tpo $(DEPDIR)/file_la-csmfile.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='csmfile.c' object='file_la-csmfile.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-csmfile.lo `test -f 'csmfile.c' || echo '$(srcdir)/'`csmfile.c
+
+file_la-dektakvca.lo: dektakvca.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-dektakvca.lo -MD -MP -MF $(DEPDIR)/file_la-dektakvca.Tpo -c -o file_la-dektakvca.lo `test -f 'dektakvca.c' || echo '$(srcdir)/'`dektakvca.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-dektakvca.Tpo $(DEPDIR)/file_la-dektakvca.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dektakvca.c' object='file_la-dektakvca.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-dektakvca.lo `test -f 'dektakvca.c' || echo '$(srcdir)/'`dektakvca.c
+
+file_la-dektakxml.lo: dektakxml.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-dektakxml.lo -MD -MP -MF $(DEPDIR)/file_la-dektakxml.Tpo -c -o file_la-dektakxml.lo `test -f 'dektakxml.c' || echo '$(srcdir)/'`dektakxml.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-dektakxml.Tpo $(DEPDIR)/file_la-dektakxml.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dektakxml.c' object='file_la-dektakxml.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-dektakxml.lo `test -f 'dektakxml.c' || echo '$(srcdir)/'`dektakxml.c
+
+file_la-dimensionfile.lo: dimensionfile.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-dimensionfile.lo -MD -MP -MF $(DEPDIR)/file_la-dimensionfile.Tpo -c -o file_la-dimensionfile.lo `test -f 'dimensionfile.c' || echo '$(srcdir)/'`dimensionfile.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-dimensionfile.Tpo $(DEPDIR)/file_la-dimensionfile.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dimensionfile.c' object='file_la-dimensionfile.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-dimensionfile.lo `test -f 'dimensionfile.c' || echo '$(srcdir)/'`dimensionfile.c
+
+file_la-dmefile.lo: dmefile.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-dmefile.lo -MD -MP -MF $(DEPDIR)/file_la-dmefile.Tpo -c -o file_la-dmefile.lo `test -f 'dmefile.c' || echo '$(srcdir)/'`dmefile.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-dmefile.Tpo $(DEPDIR)/file_la-dmefile.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dmefile.c' object='file_la-dmefile.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-dmefile.lo `test -f 'dmefile.c' || echo '$(srcdir)/'`dmefile.c
+
+file_la-dm3file.lo: dm3file.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-dm3file.lo -MD -MP -MF $(DEPDIR)/file_la-dm3file.Tpo -c -o file_la-dm3file.lo `test -f 'dm3file.c' || echo '$(srcdir)/'`dm3file.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-dm3file.Tpo $(DEPDIR)/file_la-dm3file.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dm3file.c' object='file_la-dm3file.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-dm3file.lo `test -f 'dm3file.c' || echo '$(srcdir)/'`dm3file.c
+
+file_la-dumbfile.lo: dumbfile.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-dumbfile.lo -MD -MP -MF $(DEPDIR)/file_la-dumbfile.Tpo -c -o file_la-dumbfile.lo `test -f 'dumbfile.c' || echo '$(srcdir)/'`dumbfile.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-dumbfile.Tpo $(DEPDIR)/file_la-dumbfile.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dumbfile.c' object='file_la-dumbfile.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-dumbfile.lo `test -f 'dumbfile.c' || echo '$(srcdir)/'`dumbfile.c
+
+file_la-ecsfile.lo: ecsfile.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-ecsfile.lo -MD -MP -MF $(DEPDIR)/file_la-ecsfile.Tpo -c -o file_la-ecsfile.lo `test -f 'ecsfile.c' || echo '$(srcdir)/'`ecsfile.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-ecsfile.Tpo $(DEPDIR)/file_la-ecsfile.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ecsfile.c' object='file_la-ecsfile.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-ecsfile.lo `test -f 'ecsfile.c' || echo '$(srcdir)/'`ecsfile.c
+
+file_la-ezdfile.lo: ezdfile.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-ezdfile.lo -MD -MP -MF $(DEPDIR)/file_la-ezdfile.Tpo -c -o file_la-ezdfile.lo `test -f 'ezdfile.c' || echo '$(srcdir)/'`ezdfile.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-ezdfile.Tpo $(DEPDIR)/file_la-ezdfile.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ezdfile.c' object='file_la-ezdfile.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-ezdfile.lo `test -f 'ezdfile.c' || echo '$(srcdir)/'`ezdfile.c
+
+file_la-femtoscan.lo: femtoscan.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-femtoscan.lo -MD -MP -MF $(DEPDIR)/file_la-femtoscan.Tpo -c -o file_la-femtoscan.lo `test -f 'femtoscan.c' || echo '$(srcdir)/'`femtoscan.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-femtoscan.Tpo $(DEPDIR)/file_la-femtoscan.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='femtoscan.c' object='file_la-femtoscan.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-femtoscan.lo `test -f 'femtoscan.c' || echo '$(srcdir)/'`femtoscan.c
+
+file_la-femtoscan-txt.lo: femtoscan-txt.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-femtoscan-txt.lo -MD -MP -MF $(DEPDIR)/file_la-femtoscan-txt.Tpo -c -o file_la-femtoscan-txt.lo `test -f 'femtoscan-txt.c' || echo '$(srcdir)/'`femtoscan-txt.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-femtoscan-txt.Tpo $(DEPDIR)/file_la-femtoscan-txt.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='femtoscan-txt.c' object='file_la-femtoscan-txt.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-femtoscan-txt.lo `test -f 'femtoscan-txt.c' || echo '$(srcdir)/'`femtoscan-txt.c
+
+file_la-gdeffile.lo: gdeffile.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-gdeffile.lo -MD -MP -MF $(DEPDIR)/file_la-gdeffile.Tpo -c -o file_la-gdeffile.lo `test -f 'gdeffile.c' || echo '$(srcdir)/'`gdeffile.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-gdeffile.Tpo $(DEPDIR)/file_la-gdeffile.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gdeffile.c' object='file_la-gdeffile.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-gdeffile.lo `test -f 'gdeffile.c' || echo '$(srcdir)/'`gdeffile.c
+
+file_la-gsffile.lo: gsffile.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-gsffile.lo -MD -MP -MF $(DEPDIR)/file_la-gsffile.Tpo -c -o file_la-gsffile.lo `test -f 'gsffile.c' || echo '$(srcdir)/'`gsffile.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-gsffile.Tpo $(DEPDIR)/file_la-gsffile.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gsffile.c' object='file_la-gsffile.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-gsffile.lo `test -f 'gsffile.c' || echo '$(srcdir)/'`gsffile.c
+
+file_la-gwyfile.lo: gwyfile.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-gwyfile.lo -MD -MP -MF $(DEPDIR)/file_la-gwyfile.Tpo -c -o file_la-gwyfile.lo `test -f 'gwyfile.c' || echo '$(srcdir)/'`gwyfile.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-gwyfile.Tpo $(DEPDIR)/file_la-gwyfile.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gwyfile.c' object='file_la-gwyfile.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-gwyfile.lo `test -f 'gwyfile.c' || echo '$(srcdir)/'`gwyfile.c
+
+file_la-gxyzffile.lo: gxyzffile.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-gxyzffile.lo -MD -MP -MF $(DEPDIR)/file_la-gxyzffile.Tpo -c -o file_la-gxyzffile.lo `test -f 'gxyzffile.c' || echo '$(srcdir)/'`gxyzffile.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-gxyzffile.Tpo $(DEPDIR)/file_la-gxyzffile.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gxyzffile.c' object='file_la-gxyzffile.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-gxyzffile.lo `test -f 'gxyzffile.c' || echo '$(srcdir)/'`gxyzffile.c
+
+file_la-hdf4file.lo: hdf4file.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-hdf4file.lo -MD -MP -MF $(DEPDIR)/file_la-hdf4file.Tpo -c -o file_la-hdf4file.lo `test -f 'hdf4file.c' || echo '$(srcdir)/'`hdf4file.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-hdf4file.Tpo $(DEPDIR)/file_la-hdf4file.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hdf4file.c' object='file_la-hdf4file.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-hdf4file.lo `test -f 'hdf4file.c' || echo '$(srcdir)/'`hdf4file.c
+
+file_la-hitachi-afm.lo: hitachi-afm.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-hitachi-afm.lo -MD -MP -MF $(DEPDIR)/file_la-hitachi-afm.Tpo -c -o file_la-hitachi-afm.lo `test -f 'hitachi-afm.c' || echo '$(srcdir)/'`hitachi-afm.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-hitachi-afm.Tpo $(DEPDIR)/file_la-hitachi-afm.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hitachi-afm.c' object='file_la-hitachi-afm.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-hitachi-afm.lo `test -f 'hitachi-afm.c' || echo '$(srcdir)/'`hitachi-afm.c
+
+file_la-hitachi-sem.lo: hitachi-sem.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-hitachi-sem.lo -MD -MP -MF $(DEPDIR)/file_la-hitachi-sem.Tpo -c -o file_la-hitachi-sem.lo `test -f 'hitachi-sem.c' || echo '$(srcdir)/'`hitachi-sem.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-hitachi-sem.Tpo $(DEPDIR)/file_la-hitachi-sem.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hitachi-sem.c' object='file_la-hitachi-sem.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-hitachi-sem.lo `test -f 'hitachi-sem.c' || echo '$(srcdir)/'`hitachi-sem.c
+
+file_la-igorfile.lo: igorfile.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-igorfile.lo -MD -MP -MF $(DEPDIR)/file_la-igorfile.Tpo -c -o file_la-igorfile.lo `test -f 'igorfile.c' || echo '$(srcdir)/'`igorfile.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-igorfile.Tpo $(DEPDIR)/file_la-igorfile.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='igorfile.c' object='file_la-igorfile.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-igorfile.lo `test -f 'igorfile.c' || echo '$(srcdir)/'`igorfile.c
+
+file_la-intelliwave.lo: intelliwave.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-intelliwave.lo -MD -MP -MF $(DEPDIR)/file_la-intelliwave.Tpo -c -o file_la-intelliwave.lo `test -f 'intelliwave.c' || echo '$(srcdir)/'`intelliwave.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-intelliwave.Tpo $(DEPDIR)/file_la-intelliwave.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='intelliwave.c' object='file_la-intelliwave.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-intelliwave.lo `test -f 'intelliwave.c' || echo '$(srcdir)/'`intelliwave.c
+
+file_la-intematix.lo: intematix.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-intematix.lo -MD -MP -MF $(DEPDIR)/file_la-intematix.Tpo -c -o file_la-intematix.lo `test -f 'intematix.c' || echo '$(srcdir)/'`intematix.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-intematix.Tpo $(DEPDIR)/file_la-intematix.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='intematix.c' object='file_la-intematix.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-intematix.lo `test -f 'intematix.c' || echo '$(srcdir)/'`intematix.c
+
+file_la-iso28600.lo: iso28600.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-iso28600.lo -MD -MP -MF $(DEPDIR)/file_la-iso28600.Tpo -c -o file_la-iso28600.lo `test -f 'iso28600.c' || echo '$(srcdir)/'`iso28600.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-iso28600.Tpo $(DEPDIR)/file_la-iso28600.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='iso28600.c' object='file_la-iso28600.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-iso28600.lo `test -f 'iso28600.c' || echo '$(srcdir)/'`iso28600.c
+
+file_la-jeol.lo: jeol.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-jeol.lo -MD -MP -MF $(DEPDIR)/file_la-jeol.Tpo -c -o file_la-jeol.lo `test -f 'jeol.c' || echo '$(srcdir)/'`jeol.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-jeol.Tpo $(DEPDIR)/file_la-jeol.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='jeol.c' object='file_la-jeol.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-jeol.lo `test -f 'jeol.c' || echo '$(srcdir)/'`jeol.c
+
+file_la-jspmfile.lo: jspmfile.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-jspmfile.lo -MD -MP -MF $(DEPDIR)/file_la-jspmfile.Tpo -c -o file_la-jspmfile.lo `test -f 'jspmfile.c' || echo '$(srcdir)/'`jspmfile.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-jspmfile.Tpo $(DEPDIR)/file_la-jspmfile.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='jspmfile.c' object='file_la-jspmfile.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-jspmfile.lo `test -f 'jspmfile.c' || echo '$(srcdir)/'`jspmfile.c
+
+file_la-keyence.lo: keyence.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-keyence.lo -MD -MP -MF $(DEPDIR)/file_la-keyence.Tpo -c -o file_la-keyence.lo `test -f 'keyence.c' || echo '$(srcdir)/'`keyence.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-keyence.Tpo $(DEPDIR)/file_la-keyence.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='keyence.c' object='file_la-keyence.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-keyence.lo `test -f 'keyence.c' || echo '$(srcdir)/'`keyence.c
+
+file_la-leica.lo: leica.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-leica.lo -MD -MP -MF $(DEPDIR)/file_la-leica.Tpo -c -o file_la-leica.lo `test -f 'leica.c' || echo '$(srcdir)/'`leica.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-leica.Tpo $(DEPDIR)/file_la-leica.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='leica.c' object='file_la-leica.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-leica.lo `test -f 'leica.c' || echo '$(srcdir)/'`leica.c
+
+file_la-lextfile.lo: lextfile.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-lextfile.lo -MD -MP -MF $(DEPDIR)/file_la-lextfile.Tpo -c -o file_la-lextfile.lo `test -f 'lextfile.c' || echo '$(srcdir)/'`lextfile.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-lextfile.Tpo $(DEPDIR)/file_la-lextfile.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lextfile.c' object='file_la-lextfile.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-lextfile.lo `test -f 'lextfile.c' || echo '$(srcdir)/'`lextfile.c
+
+file_la-magellan.lo: magellan.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-magellan.lo -MD -MP -MF $(DEPDIR)/file_la-magellan.Tpo -c -o file_la-magellan.lo `test -f 'magellan.c' || echo '$(srcdir)/'`magellan.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-magellan.Tpo $(DEPDIR)/file_la-magellan.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='magellan.c' object='file_la-magellan.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-magellan.lo `test -f 'magellan.c' || echo '$(srcdir)/'`magellan.c
+
+file_la-mapvue.lo: mapvue.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-mapvue.lo -MD -MP -MF $(DEPDIR)/file_la-mapvue.Tpo -c -o file_la-mapvue.lo `test -f 'mapvue.c' || echo '$(srcdir)/'`mapvue.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-mapvue.Tpo $(DEPDIR)/file_la-mapvue.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mapvue.c' object='file_la-mapvue.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-mapvue.lo `test -f 'mapvue.c' || echo '$(srcdir)/'`mapvue.c
+
+file_la-metropro.lo: metropro.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-metropro.lo -MD -MP -MF $(DEPDIR)/file_la-metropro.Tpo -c -o file_la-metropro.lo `test -f 'metropro.c' || echo '$(srcdir)/'`metropro.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-metropro.Tpo $(DEPDIR)/file_la-metropro.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='metropro.c' object='file_la-metropro.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-metropro.lo `test -f 'metropro.c' || echo '$(srcdir)/'`metropro.c
+
+file_la-microprof.lo: microprof.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-microprof.lo -MD -MP -MF $(DEPDIR)/file_la-microprof.Tpo -c -o file_la-microprof.lo `test -f 'microprof.c' || echo '$(srcdir)/'`microprof.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-microprof.Tpo $(DEPDIR)/file_la-microprof.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='microprof.c' object='file_la-microprof.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-microprof.lo `test -f 'microprof.c' || echo '$(srcdir)/'`microprof.c
+
+file_la-miffile.lo: miffile.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-miffile.lo -MD -MP -MF $(DEPDIR)/file_la-miffile.Tpo -c -o file_la-miffile.lo `test -f 'miffile.c' || echo '$(srcdir)/'`miffile.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-miffile.Tpo $(DEPDIR)/file_la-miffile.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='miffile.c' object='file_la-miffile.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-miffile.lo `test -f 'miffile.c' || echo '$(srcdir)/'`miffile.c
+
+file_la-mifile.lo: mifile.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-mifile.lo -MD -MP -MF $(DEPDIR)/file_la-mifile.Tpo -c -o file_la-mifile.lo `test -f 'mifile.c' || echo '$(srcdir)/'`mifile.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-mifile.Tpo $(DEPDIR)/file_la-mifile.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mifile.c' object='file_la-mifile.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-mifile.lo `test -f 'mifile.c' || echo '$(srcdir)/'`mifile.c
+
+file_la-mulfile.lo: mulfile.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-mulfile.lo -MD -MP -MF $(DEPDIR)/file_la-mulfile.Tpo -c -o file_la-mulfile.lo `test -f 'mulfile.c' || echo '$(srcdir)/'`mulfile.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-mulfile.Tpo $(DEPDIR)/file_la-mulfile.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mulfile.c' object='file_la-mulfile.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-mulfile.lo `test -f 'mulfile.c' || echo '$(srcdir)/'`mulfile.c
+
+file_la-nanoeducator.lo: nanoeducator.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-nanoeducator.lo -MD -MP -MF $(DEPDIR)/file_la-nanoeducator.Tpo -c -o file_la-nanoeducator.lo `test -f 'nanoeducator.c' || echo '$(srcdir)/'`nanoeducator.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-nanoeducator.Tpo $(DEPDIR)/file_la-nanoeducator.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nanoeducator.c' object='file_la-nanoeducator.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-nanoeducator.lo `test -f 'nanoeducator.c' || echo '$(srcdir)/'`nanoeducator.c
+
+file_la-nanomagnetics.lo: nanomagnetics.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-nanomagnetics.lo -MD -MP -MF $(DEPDIR)/file_la-nanomagnetics.Tpo -c -o file_la-nanomagnetics.lo `test -f 'nanomagnetics.c' || echo '$(srcdir)/'`nanomagnetics.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-nanomagnetics.Tpo $(DEPDIR)/file_la-nanomagnetics.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nanomagnetics.c' object='file_la-nanomagnetics.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-nanomagnetics.lo `test -f 'nanomagnetics.c' || echo '$(srcdir)/'`nanomagnetics.c
+
+file_la-nanonics.lo: nanonics.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-nanonics.lo -MD -MP -MF $(DEPDIR)/file_la-nanonics.Tpo -c -o file_la-nanonics.lo `test -f 'nanonics.c' || echo '$(srcdir)/'`nanonics.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-nanonics.Tpo $(DEPDIR)/file_la-nanonics.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nanonics.c' object='file_la-nanonics.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-nanonics.lo `test -f 'nanonics.c' || echo '$(srcdir)/'`nanonics.c
+
+file_la-nanonis.lo: nanonis.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-nanonis.lo -MD -MP -MF $(DEPDIR)/file_la-nanonis.Tpo -c -o file_la-nanonis.lo `test -f 'nanonis.c' || echo '$(srcdir)/'`nanonis.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-nanonis.Tpo $(DEPDIR)/file_la-nanonis.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nanonis.c' object='file_la-nanonis.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-nanonis.lo `test -f 'nanonis.c' || echo '$(srcdir)/'`nanonis.c
+
+file_la-nanoscan.lo: nanoscan.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-nanoscan.lo -MD -MP -MF $(DEPDIR)/file_la-nanoscan.Tpo -c -o file_la-nanoscan.lo `test -f 'nanoscan.c' || echo '$(srcdir)/'`nanoscan.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-nanoscan.Tpo $(DEPDIR)/file_la-nanoscan.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nanoscan.c' object='file_la-nanoscan.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-nanoscan.lo `test -f 'nanoscan.c' || echo '$(srcdir)/'`nanoscan.c
+
+file_la-nanoscope-ii.lo: nanoscope-ii.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-nanoscope-ii.lo -MD -MP -MF $(DEPDIR)/file_la-nanoscope-ii.Tpo -c -o file_la-nanoscope-ii.lo `test -f 'nanoscope-ii.c' || echo '$(srcdir)/'`nanoscope-ii.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-nanoscope-ii.Tpo $(DEPDIR)/file_la-nanoscope-ii.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nanoscope-ii.c' object='file_la-nanoscope-ii.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-nanoscope-ii.lo `test -f 'nanoscope-ii.c' || echo '$(srcdir)/'`nanoscope-ii.c
+
+file_la-nanoscope.lo: nanoscope.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-nanoscope.lo -MD -MP -MF $(DEPDIR)/file_la-nanoscope.Tpo -c -o file_la-nanoscope.lo `test -f 'nanoscope.c' || echo '$(srcdir)/'`nanoscope.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-nanoscope.Tpo $(DEPDIR)/file_la-nanoscope.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nanoscope.c' object='file_la-nanoscope.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-nanoscope.lo `test -f 'nanoscope.c' || echo '$(srcdir)/'`nanoscope.c
+
+file_la-nanotop.lo: nanotop.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-nanotop.lo -MD -MP -MF $(DEPDIR)/file_la-nanotop.Tpo -c -o file_la-nanotop.lo `test -f 'nanotop.c' || echo '$(srcdir)/'`nanotop.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-nanotop.Tpo $(DEPDIR)/file_la-nanotop.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nanotop.c' object='file_la-nanotop.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-nanotop.lo `test -f 'nanotop.c' || echo '$(srcdir)/'`nanotop.c
+
+file_la-netcdf.lo: netcdf.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-netcdf.lo -MD -MP -MF $(DEPDIR)/file_la-netcdf.Tpo -c -o file_la-netcdf.lo `test -f 'netcdf.c' || echo '$(srcdir)/'`netcdf.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-netcdf.Tpo $(DEPDIR)/file_la-netcdf.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='netcdf.c' object='file_la-netcdf.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-netcdf.lo `test -f 'netcdf.c' || echo '$(srcdir)/'`netcdf.c
+
+file_la-nmmxyz.lo: nmmxyz.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-nmmxyz.lo -MD -MP -MF $(DEPDIR)/file_la-nmmxyz.Tpo -c -o file_la-nmmxyz.lo `test -f 'nmmxyz.c' || echo '$(srcdir)/'`nmmxyz.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-nmmxyz.Tpo $(DEPDIR)/file_la-nmmxyz.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nmmxyz.c' object='file_la-nmmxyz.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-nmmxyz.lo `test -f 'nmmxyz.c' || echo '$(srcdir)/'`nmmxyz.c
+
+file_la-nt-mdt.lo: nt-mdt.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-nt-mdt.lo -MD -MP -MF $(DEPDIR)/file_la-nt-mdt.Tpo -c -o file_la-nt-mdt.lo `test -f 'nt-mdt.c' || echo '$(srcdir)/'`nt-mdt.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-nt-mdt.Tpo $(DEPDIR)/file_la-nt-mdt.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nt-mdt.c' object='file_la-nt-mdt.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-nt-mdt.lo `test -f 'nt-mdt.c' || echo '$(srcdir)/'`nt-mdt.c
+
+file_la-nxiifile.lo: nxiifile.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-nxiifile.lo -MD -MP -MF $(DEPDIR)/file_la-nxiifile.Tpo -c -o file_la-nxiifile.lo `test -f 'nxiifile.c' || echo '$(srcdir)/'`nxiifile.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-nxiifile.Tpo $(DEPDIR)/file_la-nxiifile.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nxiifile.c' object='file_la-nxiifile.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-nxiifile.lo `test -f 'nxiifile.c' || echo '$(srcdir)/'`nxiifile.c
+
+file_la-oldmda.lo: oldmda.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-oldmda.lo -MD -MP -MF $(DEPDIR)/file_la-oldmda.Tpo -c -o file_la-oldmda.lo `test -f 'oldmda.c' || echo '$(srcdir)/'`oldmda.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-oldmda.Tpo $(DEPDIR)/file_la-oldmda.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='oldmda.c' object='file_la-oldmda.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-oldmda.lo `test -f 'oldmda.c' || echo '$(srcdir)/'`oldmda.c
+
+file_la-ols.lo: ols.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-ols.lo -MD -MP -MF $(DEPDIR)/file_la-ols.Tpo -c -o file_la-ols.lo `test -f 'ols.c' || echo '$(srcdir)/'`ols.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-ols.Tpo $(DEPDIR)/file_la-ols.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ols.c' object='file_la-ols.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-ols.lo `test -f 'ols.c' || echo '$(srcdir)/'`ols.c
+
+file_la-ometiff.lo: ometiff.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-ometiff.lo -MD -MP -MF $(DEPDIR)/file_la-ometiff.Tpo -c -o file_la-ometiff.lo `test -f 'ometiff.c' || echo '$(srcdir)/'`ometiff.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-ometiff.Tpo $(DEPDIR)/file_la-ometiff.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ometiff.c' object='file_la-ometiff.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-ometiff.lo `test -f 'ometiff.c' || echo '$(srcdir)/'`ometiff.c
+
+file_la-omicron.lo: omicron.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-omicron.lo -MD -MP -MF $(DEPDIR)/file_la-omicron.Tpo -c -o file_la-omicron.lo `test -f 'omicron.c' || echo '$(srcdir)/'`omicron.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-omicron.Tpo $(DEPDIR)/file_la-omicron.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='omicron.c' object='file_la-omicron.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-omicron.lo `test -f 'omicron.c' || echo '$(srcdir)/'`omicron.c
+
+file_la-omicronflat.lo: omicronflat.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-omicronflat.lo -MD -MP -MF $(DEPDIR)/file_la-omicronflat.Tpo -c -o file_la-omicronflat.lo `test -f 'omicronflat.c' || echo '$(srcdir)/'`omicronflat.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-omicronflat.Tpo $(DEPDIR)/file_la-omicronflat.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='omicronflat.c' object='file_la-omicronflat.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-omicronflat.lo `test -f 'omicronflat.c' || echo '$(srcdir)/'`omicronflat.c
+
+file_la-omicronmatrix.lo: omicronmatrix.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-omicronmatrix.lo -MD -MP -MF $(DEPDIR)/file_la-omicronmatrix.Tpo -c -o file_la-omicronmatrix.lo `test -f 'omicronmatrix.c' || echo '$(srcdir)/'`omicronmatrix.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-omicronmatrix.Tpo $(DEPDIR)/file_la-omicronmatrix.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='omicronmatrix.c' object='file_la-omicronmatrix.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-omicronmatrix.lo `test -f 'omicronmatrix.c' || echo '$(srcdir)/'`omicronmatrix.c
+
+file_la-opdfile.lo: opdfile.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-opdfile.lo -MD -MP -MF $(DEPDIR)/file_la-opdfile.Tpo -c -o file_la-opdfile.lo `test -f 'opdfile.c' || echo '$(srcdir)/'`opdfile.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-opdfile.Tpo $(DEPDIR)/file_la-opdfile.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='opdfile.c' object='file_la-opdfile.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-opdfile.lo `test -f 'opdfile.c' || echo '$(srcdir)/'`opdfile.c
+
+file_la-pnifile.lo: pnifile.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-pnifile.lo -MD -MP -MF $(DEPDIR)/file_la-pnifile.Tpo -c -o file_la-pnifile.lo `test -f 'pnifile.c' || echo '$(srcdir)/'`pnifile.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-pnifile.Tpo $(DEPDIR)/file_la-pnifile.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='pnifile.c' object='file_la-pnifile.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-pnifile.lo `test -f 'pnifile.c' || echo '$(srcdir)/'`pnifile.c
+
+file_la-pltfile.lo: pltfile.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-pltfile.lo -MD -MP -MF $(DEPDIR)/file_la-pltfile.Tpo -c -o file_la-pltfile.lo `test -f 'pltfile.c' || echo '$(srcdir)/'`pltfile.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-pltfile.Tpo $(DEPDIR)/file_la-pltfile.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='pltfile.c' object='file_la-pltfile.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-pltfile.lo `test -f 'pltfile.c' || echo '$(srcdir)/'`pltfile.c
+
+file_la-princetonspe.lo: princetonspe.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-princetonspe.lo -MD -MP -MF $(DEPDIR)/file_la-princetonspe.Tpo -c -o file_la-princetonspe.lo `test -f 'princetonspe.c' || echo '$(srcdir)/'`princetonspe.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-princetonspe.Tpo $(DEPDIR)/file_la-princetonspe.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='princetonspe.c' object='file_la-princetonspe.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-princetonspe.lo `test -f 'princetonspe.c' || echo '$(srcdir)/'`princetonspe.c
+
+file_la-psia.lo: psia.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-psia.lo -MD -MP -MF $(DEPDIR)/file_la-psia.Tpo -c -o file_la-psia.lo `test -f 'psia.c' || echo '$(srcdir)/'`psia.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-psia.Tpo $(DEPDIR)/file_la-psia.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='psia.c' object='file_la-psia.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-psia.lo `test -f 'psia.c' || echo '$(srcdir)/'`psia.c
+
+file_la-pt3file.lo: pt3file.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-pt3file.lo -MD -MP -MF $(DEPDIR)/file_la-pt3file.Tpo -c -o file_la-pt3file.lo `test -f 'pt3file.c' || echo '$(srcdir)/'`pt3file.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-pt3file.Tpo $(DEPDIR)/file_la-pt3file.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='pt3file.c' object='file_la-pt3file.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-pt3file.lo `test -f 'pt3file.c' || echo '$(srcdir)/'`pt3file.c
+
+file_la-quesant.lo: quesant.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-quesant.lo -MD -MP -MF $(DEPDIR)/file_la-quesant.Tpo -c -o file_la-quesant.lo `test -f 'quesant.c' || echo '$(srcdir)/'`quesant.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-quesant.Tpo $(DEPDIR)/file_la-quesant.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='quesant.c' object='file_la-quesant.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-quesant.lo `test -f 'quesant.c' || echo '$(srcdir)/'`quesant.c
+
+file_la-rawfile.lo: rawfile.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-rawfile.lo -MD -MP -MF $(DEPDIR)/file_la-rawfile.Tpo -c -o file_la-rawfile.lo `test -f 'rawfile.c' || echo '$(srcdir)/'`rawfile.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-rawfile.Tpo $(DEPDIR)/file_la-rawfile.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rawfile.c' object='file_la-rawfile.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-rawfile.lo `test -f 'rawfile.c' || echo '$(srcdir)/'`rawfile.c
+
+file_la-rawgraph.lo: rawgraph.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-rawgraph.lo -MD -MP -MF $(DEPDIR)/file_la-rawgraph.Tpo -c -o file_la-rawgraph.lo `test -f 'rawgraph.c' || echo '$(srcdir)/'`rawgraph.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-rawgraph.Tpo $(DEPDIR)/file_la-rawgraph.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rawgraph.c' object='file_la-rawgraph.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-rawgraph.lo `test -f 'rawgraph.c' || echo '$(srcdir)/'`rawgraph.c
+
+file_la-rawxyz.lo: rawxyz.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-rawxyz.lo -MD -MP -MF $(DEPDIR)/file_la-rawxyz.Tpo -c -o file_la-rawxyz.lo `test -f 'rawxyz.c' || echo '$(srcdir)/'`rawxyz.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-rawxyz.Tpo $(DEPDIR)/file_la-rawxyz.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rawxyz.c' object='file_la-rawxyz.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-rawxyz.lo `test -f 'rawxyz.c' || echo '$(srcdir)/'`rawxyz.c
+
+file_la-renishaw.lo: renishaw.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-renishaw.lo -MD -MP -MF $(DEPDIR)/file_la-renishaw.Tpo -c -o file_la-renishaw.lo `test -f 'renishaw.c' || echo '$(srcdir)/'`renishaw.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-renishaw.Tpo $(DEPDIR)/file_la-renishaw.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='renishaw.c' object='file_la-renishaw.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-renishaw.lo `test -f 'renishaw.c' || echo '$(srcdir)/'`renishaw.c
+
+file_la-rhk-sm3.lo: rhk-sm3.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-rhk-sm3.lo -MD -MP -MF $(DEPDIR)/file_la-rhk-sm3.Tpo -c -o file_la-rhk-sm3.lo `test -f 'rhk-sm3.c' || echo '$(srcdir)/'`rhk-sm3.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-rhk-sm3.Tpo $(DEPDIR)/file_la-rhk-sm3.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rhk-sm3.c' object='file_la-rhk-sm3.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-rhk-sm3.lo `test -f 'rhk-sm3.c' || echo '$(srcdir)/'`rhk-sm3.c
+
+file_la-rhk-spm32.lo: rhk-spm32.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-rhk-spm32.lo -MD -MP -MF $(DEPDIR)/file_la-rhk-spm32.Tpo -c -o file_la-rhk-spm32.lo `test -f 'rhk-spm32.c' || echo '$(srcdir)/'`rhk-spm32.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-rhk-spm32.Tpo $(DEPDIR)/file_la-rhk-spm32.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rhk-spm32.c' object='file_la-rhk-spm32.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-rhk-spm32.lo `test -f 'rhk-spm32.c' || echo '$(srcdir)/'`rhk-spm32.c
+
+file_la-robotics.lo: robotics.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-robotics.lo -MD -MP -MF $(DEPDIR)/file_la-robotics.Tpo -c -o file_la-robotics.lo `test -f 'robotics.c' || echo '$(srcdir)/'`robotics.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-robotics.Tpo $(DEPDIR)/file_la-robotics.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='robotics.c' object='file_la-robotics.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-robotics.lo `test -f 'robotics.c' || echo '$(srcdir)/'`robotics.c
+
+file_la-s94file.lo: s94file.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-s94file.lo -MD -MP -MF $(DEPDIR)/file_la-s94file.Tpo -c -o file_la-s94file.lo `test -f 's94file.c' || echo '$(srcdir)/'`s94file.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-s94file.Tpo $(DEPDIR)/file_la-s94file.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='s94file.c' object='file_la-s94file.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-s94file.lo `test -f 's94file.c' || echo '$(srcdir)/'`s94file.c
+
+file_la-sdfile.lo: sdfile.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-sdfile.lo -MD -MP -MF $(DEPDIR)/file_la-sdfile.Tpo -c -o file_la-sdfile.lo `test -f 'sdfile.c' || echo '$(srcdir)/'`sdfile.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-sdfile.Tpo $(DEPDIR)/file_la-sdfile.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sdfile.c' object='file_la-sdfile.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-sdfile.lo `test -f 'sdfile.c' || echo '$(srcdir)/'`sdfile.c
+
+file_la-seiko.lo: seiko.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-seiko.lo -MD -MP -MF $(DEPDIR)/file_la-seiko.Tpo -c -o file_la-seiko.lo `test -f 'seiko.c' || echo '$(srcdir)/'`seiko.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-seiko.Tpo $(DEPDIR)/file_la-seiko.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='seiko.c' object='file_la-seiko.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-seiko.lo `test -f 'seiko.c' || echo '$(srcdir)/'`seiko.c
+
+file_la-sensofar.lo: sensofar.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-sensofar.lo -MD -MP -MF $(DEPDIR)/file_la-sensofar.Tpo -c -o file_la-sensofar.lo `test -f 'sensofar.c' || echo '$(srcdir)/'`sensofar.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-sensofar.Tpo $(DEPDIR)/file_la-sensofar.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sensofar.c' object='file_la-sensofar.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-sensofar.lo `test -f 'sensofar.c' || echo '$(srcdir)/'`sensofar.c
+
+file_la-sensolytics.lo: sensolytics.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-sensolytics.lo -MD -MP -MF $(DEPDIR)/file_la-sensolytics.Tpo -c -o file_la-sensolytics.lo `test -f 'sensolytics.c' || echo '$(srcdir)/'`sensolytics.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-sensolytics.Tpo $(DEPDIR)/file_la-sensolytics.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sensolytics.c' object='file_la-sensolytics.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-sensolytics.lo `test -f 'sensolytics.c' || echo '$(srcdir)/'`sensolytics.c
+
+file_la-shimadzu.lo: shimadzu.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-shimadzu.lo -MD -MP -MF $(DEPDIR)/file_la-shimadzu.Tpo -c -o file_la-shimadzu.lo `test -f 'shimadzu.c' || echo '$(srcdir)/'`shimadzu.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-shimadzu.Tpo $(DEPDIR)/file_la-shimadzu.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='shimadzu.c' object='file_la-shimadzu.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-shimadzu.lo `test -f 'shimadzu.c' || echo '$(srcdir)/'`shimadzu.c
+
+file_la-sicmfile.lo: sicmfile.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-sicmfile.lo -MD -MP -MF $(DEPDIR)/file_la-sicmfile.Tpo -c -o file_la-sicmfile.lo `test -f 'sicmfile.c' || echo '$(srcdir)/'`sicmfile.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-sicmfile.Tpo $(DEPDIR)/file_la-sicmfile.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sicmfile.c' object='file_la-sicmfile.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-sicmfile.lo `test -f 'sicmfile.c' || echo '$(srcdir)/'`sicmfile.c
+
+file_la-sis.lo: sis.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-sis.lo -MD -MP -MF $(DEPDIR)/file_la-sis.Tpo -c -o file_la-sis.lo `test -f 'sis.c' || echo '$(srcdir)/'`sis.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-sis.Tpo $(DEPDIR)/file_la-sis.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sis.c' object='file_la-sis.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-sis.lo `test -f 'sis.c' || echo '$(srcdir)/'`sis.c
+
+file_la-spip-asc.lo: spip-asc.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-spip-asc.lo -MD -MP -MF $(DEPDIR)/file_la-spip-asc.Tpo -c -o file_la-spip-asc.lo `test -f 'spip-asc.c' || echo '$(srcdir)/'`spip-asc.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-spip-asc.Tpo $(DEPDIR)/file_la-spip-asc.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='spip-asc.c' object='file_la-spip-asc.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-spip-asc.lo `test -f 'spip-asc.c' || echo '$(srcdir)/'`spip-asc.c
+
+file_la-spmlab.lo: spmlab.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-spmlab.lo -MD -MP -MF $(DEPDIR)/file_la-spmlab.Tpo -c -o file_la-spmlab.lo `test -f 'spmlab.c' || echo '$(srcdir)/'`spmlab.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-spmlab.Tpo $(DEPDIR)/file_la-spmlab.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='spmlab.c' object='file_la-spmlab.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-spmlab.lo `test -f 'spmlab.c' || echo '$(srcdir)/'`spmlab.c
+
+file_la-spmlabf.lo: spmlabf.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-spmlabf.lo -MD -MP -MF $(DEPDIR)/file_la-spmlabf.Tpo -c -o file_la-spmlabf.lo `test -f 'spmlabf.c' || echo '$(srcdir)/'`spmlabf.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-spmlabf.Tpo $(DEPDIR)/file_la-spmlabf.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='spmlabf.c' object='file_la-spmlabf.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-spmlabf.lo `test -f 'spmlabf.c' || echo '$(srcdir)/'`spmlabf.c
+
+file_la-stmprg.lo: stmprg.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-stmprg.lo -MD -MP -MF $(DEPDIR)/file_la-stmprg.Tpo -c -o file_la-stmprg.lo `test -f 'stmprg.c' || echo '$(srcdir)/'`stmprg.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-stmprg.Tpo $(DEPDIR)/file_la-stmprg.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='stmprg.c' object='file_la-stmprg.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-stmprg.lo `test -f 'stmprg.c' || echo '$(srcdir)/'`stmprg.c
+
+file_la-stpfile.lo: stpfile.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-stpfile.lo -MD -MP -MF $(DEPDIR)/file_la-stpfile.Tpo -c -o file_la-stpfile.lo `test -f 'stpfile.c' || echo '$(srcdir)/'`stpfile.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-stpfile.Tpo $(DEPDIR)/file_la-stpfile.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='stpfile.c' object='file_la-stpfile.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-stpfile.lo `test -f 'stpfile.c' || echo '$(srcdir)/'`stpfile.c
+
+file_la-surffile.lo: surffile.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-surffile.lo -MD -MP -MF $(DEPDIR)/file_la-surffile.Tpo -c -o file_la-surffile.lo `test -f 'surffile.c' || echo '$(srcdir)/'`surffile.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-surffile.Tpo $(DEPDIR)/file_la-surffile.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='surffile.c' object='file_la-surffile.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-surffile.lo `test -f 'surffile.c' || echo '$(srcdir)/'`surffile.c
+
+file_la-tiaser.lo: tiaser.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-tiaser.lo -MD -MP -MF $(DEPDIR)/file_la-tiaser.Tpo -c -o file_la-tiaser.lo `test -f 'tiaser.c' || echo '$(srcdir)/'`tiaser.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-tiaser.Tpo $(DEPDIR)/file_la-tiaser.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tiaser.c' object='file_la-tiaser.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-tiaser.lo `test -f 'tiaser.c' || echo '$(srcdir)/'`tiaser.c
+
+file_la-tescan.lo: tescan.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-tescan.lo -MD -MP -MF $(DEPDIR)/file_la-tescan.Tpo -c -o file_la-tescan.lo `test -f 'tescan.c' || echo '$(srcdir)/'`tescan.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-tescan.Tpo $(DEPDIR)/file_la-tescan.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tescan.c' object='file_la-tescan.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-tescan.lo `test -f 'tescan.c' || echo '$(srcdir)/'`tescan.c
+
+file_la-unisoku.lo: unisoku.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-unisoku.lo -MD -MP -MF $(DEPDIR)/file_la-unisoku.Tpo -c -o file_la-unisoku.lo `test -f 'unisoku.c' || echo '$(srcdir)/'`unisoku.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-unisoku.Tpo $(DEPDIR)/file_la-unisoku.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unisoku.c' object='file_la-unisoku.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-unisoku.lo `test -f 'unisoku.c' || echo '$(srcdir)/'`unisoku.c
+
+file_la-vtkfile.lo: vtkfile.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-vtkfile.lo -MD -MP -MF $(DEPDIR)/file_la-vtkfile.Tpo -c -o file_la-vtkfile.lo `test -f 'vtkfile.c' || echo '$(srcdir)/'`vtkfile.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-vtkfile.Tpo $(DEPDIR)/file_la-vtkfile.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vtkfile.c' object='file_la-vtkfile.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-vtkfile.lo `test -f 'vtkfile.c' || echo '$(srcdir)/'`vtkfile.c
+
+file_la-win_stm.lo: win_stm.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-win_stm.lo -MD -MP -MF $(DEPDIR)/file_la-win_stm.Tpo -c -o file_la-win_stm.lo `test -f 'win_stm.c' || echo '$(srcdir)/'`win_stm.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-win_stm.Tpo $(DEPDIR)/file_la-win_stm.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='win_stm.c' object='file_la-win_stm.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-win_stm.lo `test -f 'win_stm.c' || echo '$(srcdir)/'`win_stm.c
+
+file_la-wipfile.lo: wipfile.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-wipfile.lo -MD -MP -MF $(DEPDIR)/file_la-wipfile.Tpo -c -o file_la-wipfile.lo `test -f 'wipfile.c' || echo '$(srcdir)/'`wipfile.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-wipfile.Tpo $(DEPDIR)/file_la-wipfile.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='wipfile.c' object='file_la-wipfile.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-wipfile.lo `test -f 'wipfile.c' || echo '$(srcdir)/'`wipfile.c
+
+file_la-witfile.lo: witfile.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-witfile.lo -MD -MP -MF $(DEPDIR)/file_la-witfile.Tpo -c -o file_la-witfile.lo `test -f 'witfile.c' || echo '$(srcdir)/'`witfile.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-witfile.Tpo $(DEPDIR)/file_la-witfile.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='witfile.c' object='file_la-witfile.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-witfile.lo `test -f 'witfile.c' || echo '$(srcdir)/'`witfile.c
+
+file_la-witec-asc.lo: witec-asc.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-witec-asc.lo -MD -MP -MF $(DEPDIR)/file_la-witec-asc.Tpo -c -o file_la-witec-asc.lo `test -f 'witec-asc.c' || echo '$(srcdir)/'`witec-asc.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-witec-asc.Tpo $(DEPDIR)/file_la-witec-asc.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='witec-asc.c' object='file_la-witec-asc.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-witec-asc.lo `test -f 'witec-asc.c' || echo '$(srcdir)/'`witec-asc.c
+
+file_la-wsffile.lo: wsffile.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-wsffile.lo -MD -MP -MF $(DEPDIR)/file_la-wsffile.Tpo -c -o file_la-wsffile.lo `test -f 'wsffile.c' || echo '$(srcdir)/'`wsffile.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-wsffile.Tpo $(DEPDIR)/file_la-wsffile.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='wsffile.c' object='file_la-wsffile.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-wsffile.lo `test -f 'wsffile.c' || echo '$(srcdir)/'`wsffile.c
+
+file_la-wsxmfile.lo: wsxmfile.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-wsxmfile.lo -MD -MP -MF $(DEPDIR)/file_la-wsxmfile.Tpo -c -o file_la-wsxmfile.lo `test -f 'wsxmfile.c' || echo '$(srcdir)/'`wsxmfile.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-wsxmfile.Tpo $(DEPDIR)/file_la-wsxmfile.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='wsxmfile.c' object='file_la-wsxmfile.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-wsxmfile.lo `test -f 'wsxmfile.c' || echo '$(srcdir)/'`wsxmfile.c
+
+file_la-xyzexport.lo: xyzexport.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-xyzexport.lo -MD -MP -MF $(DEPDIR)/file_la-xyzexport.Tpo -c -o file_la-xyzexport.lo `test -f 'xyzexport.c' || echo '$(srcdir)/'`xyzexport.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-xyzexport.Tpo $(DEPDIR)/file_la-xyzexport.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xyzexport.c' object='file_la-xyzexport.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-xyzexport.lo `test -f 'xyzexport.c' || echo '$(srcdir)/'`xyzexport.c
+
+file_la-zeiss.lo: zeiss.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-zeiss.lo -MD -MP -MF $(DEPDIR)/file_la-zeiss.Tpo -c -o file_la-zeiss.lo `test -f 'zeiss.c' || echo '$(srcdir)/'`zeiss.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-zeiss.Tpo $(DEPDIR)/file_la-zeiss.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='zeiss.c' object='file_la-zeiss.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-zeiss.lo `test -f 'zeiss.c' || echo '$(srcdir)/'`zeiss.c
+
+file_la-zeisslsm.lo: zeisslsm.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-zeisslsm.lo -MD -MP -MF $(DEPDIR)/file_la-zeisslsm.Tpo -c -o file_la-zeisslsm.lo `test -f 'zeisslsm.c' || echo '$(srcdir)/'`zeisslsm.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-zeisslsm.Tpo $(DEPDIR)/file_la-zeisslsm.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='zeisslsm.c' object='file_la-zeisslsm.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-zeisslsm.lo `test -f 'zeisslsm.c' || echo '$(srcdir)/'`zeisslsm.c
+
+file_la-zemax.lo: zemax.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-zemax.lo -MD -MP -MF $(DEPDIR)/file_la-zemax.Tpo -c -o file_la-zemax.lo `test -f 'zemax.c' || echo '$(srcdir)/'`zemax.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-zemax.Tpo $(DEPDIR)/file_la-zemax.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='zemax.c' object='file_la-zemax.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-zemax.lo `test -f 'zemax.c' || echo '$(srcdir)/'`zemax.c
+
+file_la-file.lo: file.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -MT file_la-file.lo -MD -MP -MF $(DEPDIR)/file_la-file.Tpo -c -o file_la-file.lo `test -f 'file.c' || echo '$(srcdir)/'`file.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/file_la-file.Tpo $(DEPDIR)/file_la-file.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='file.c' object='file_la-file.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(file_la_CFLAGS) $(CFLAGS) -c -o file_la-file.lo `test -f 'file.c' || echo '$(srcdir)/'`file.c
+
fitsfile_la-fitsfile.lo: fitsfile.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fitsfile_la_CFLAGS) $(CFLAGS) -MT fitsfile_la-fitsfile.lo -MD -MP -MF $(DEPDIR)/fitsfile_la-fitsfile.Tpo -c -o fitsfile_la-fitsfile.lo `test -f 'fitsfile.c' || echo '$(srcdir)/'`fitsfile.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/fitsfile_la-fitsfile.Tpo $(DEPDIR)/fitsfile_la-fitsfile.Plo
@@ -2141,13 +3424,15 @@ distdir: $(DISTFILES)
fi; \
done
check-am: all-am
-check: check-am
+check: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) check-am
all-am: Makefile $(LTLIBRARIES) $(HEADERS)
installdirs:
for dir in "$(DESTDIR)$(filedir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
-install: install-am
+install: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
@@ -2177,6 +3462,7 @@ distclean-generic:
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
clean: clean-am
clean-am: clean-fileLTLIBRARIES clean-generic clean-libtool \
@@ -2248,7 +3534,7 @@ ps-am:
uninstall-am: uninstall-fileLTLIBRARIES
-.MAKE: install-am install-strip
+.MAKE: all check install install-am install-strip
.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \
clean-fileLTLIBRARIES clean-generic clean-libtool clean-local \
@@ -2268,6 +3554,9 @@ uninstall-am: uninstall-fileLTLIBRARIES
.PRECIOUS: Makefile
+file.c: $(srcdir)/Makefile.am $(top_builddir)/config.status $(top_srcdir)/utils/gen-module-bundle.sh
+ $(SHELL) $(top_srcdir)/utils/gen-module-bundle.sh file.c $(bundlable_modules)
+
clean-local:
rm -f core.* *~
diff --git a/modules/file/accurexii-txt.c b/modules/file/accurexii-txt.c
index ecfabbe..92e308b 100644
--- a/modules/file/accurexii-txt.c
+++ b/modules/file/accurexii-txt.c
@@ -1,5 +1,5 @@
/*
- * $Id: accurexii-txt.c 16387 2014-07-10 10:41:50Z yeti-dn $
+ * $Id: accurexii-txt.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2014 David Necas (Yeti).
*
* This program is free software; you can redistribute it and/or modify
@@ -77,7 +77,7 @@ static GwyModuleInfo module_info = {
"2014",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, accurexii_txt)
static gboolean
module_register(void)
diff --git a/modules/file/aistfile.c b/modules/file/aistfile.c
index c8dba97..940dca2 100644
--- a/modules/file/aistfile.c
+++ b/modules/file/aistfile.c
@@ -1,5 +1,5 @@
/*
- * $Id: aistfile.c 17187 2015-06-05 05:32:45Z pecold $
+ * $Id: aistfile.c 20195 2017-08-08 06:10:25Z yeti-dn $
* Copyright (C) 2009 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -62,10 +62,6 @@
#include "err.h"
-#ifdef _MSC_VER
-#define swab _swab
-#endif
-
#define EXTENSION ".aist"
typedef struct {
@@ -126,12 +122,12 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Imports AIST-NT data files."),
"Yeti <yeti at gwyddion.net>",
- "0.5",
+ "0.5.1",
"David Nečas (Yeti)",
"2009",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, aistfile)
static gboolean
module_register(void)
@@ -624,7 +620,8 @@ read_qt_string(const guchar **p, gsize *size, gchar **value)
}
else if (G_BYTE_ORDER == G_LITTLE_ENDIAN) {
utf16native = must_free = g_new(gunichar2, len/sizeof(gunichar2));
- swab(*p, (gpointer)must_free, len);
+ gwy_memcpy_byte_swap(*p, (guint8*)must_free,
+ 2, len/sizeof(gunichar2), 1);
}
*value = g_utf16_to_utf8(utf16native, len/sizeof(gunichar2), NULL, NULL,
NULL);
diff --git a/modules/file/alicona.c b/modules/file/alicona.c
index fc1efe7..39c6bed 100644
--- a/modules/file/alicona.c
+++ b/modules/file/alicona.c
@@ -1,5 +1,5 @@
/*
- * $Id: alicona.c 17187 2015-06-05 05:32:45Z pecold $
+ * $Id: alicona.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2011 David Necas (Yeti).
*
* This program is free software; you can redistribute it and/or modify
@@ -151,7 +151,7 @@ static GwyModuleInfo module_info = {
"2011",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, alicona)
static gboolean
module_register(void)
diff --git a/modules/file/ambfile.c b/modules/file/ambfile.c
index f71026c..38d1fd9 100644
--- a/modules/file/ambfile.c
+++ b/modules/file/ambfile.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: ambfile.c 18884 2016-08-26 06:59:41Z yeti-dn $
+ * @(#) $Id: ambfile.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2005 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -67,8 +67,7 @@
enum {
HEADER_SIZE = 65,
- XRES_OFFSET = 0x31,
- YRES_OFFSET = 0x35,
+ PARAM_OFFSET = 0x31,
};
static gboolean module_register(void);
@@ -83,12 +82,12 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Imports Ambios AMB data files."),
"Yeti <yeti at gwyddion.net>",
- "0.2",
+ "0.3",
"David Nečas (Yeti)",
"2011",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, ambfile)
static gboolean
module_register(void)
@@ -126,11 +125,11 @@ amb_load(const gchar *filename,
GwyContainer *container = NULL;
guchar *buffer = NULL;
const guchar *p;
- gdouble *data;
- guint i, j;
gsize size = 0;
GError *err = NULL;
guint xres, yres;
+ gdouble xreal;
+ G_GNUC_UNUSED gdouble q;
GwyDataField *dfield;
if (!gwy_file_get_contents(filename, &buffer, &size, &err)) {
@@ -143,9 +142,8 @@ amb_load(const gchar *filename,
}
/* The two bytes before are usually zeroes */
- p = buffer + XRES_OFFSET;
+ p = buffer + PARAM_OFFSET;
xres = gwy_get_guint32_le(&p);
- p = buffer + YRES_OFFSET;
yres = gwy_get_guint32_le(&p);
gwy_debug("xres: %u yres: %u", xres, yres);
/* The four bytes after might be a float, then there are four more bytes. */
@@ -154,15 +152,16 @@ amb_load(const gchar *filename,
if (err_SIZE_MISMATCH(error, 4*xres*yres + HEADER_SIZE, size, TRUE))
goto fail;
- dfield = gwy_data_field_new(xres, yres, 1.0, 1.0*yres/xres,
- FALSE);
- data = gwy_data_field_get_data(dfield);
- p = buffer + HEADER_SIZE;
- for (i = 0; i < yres; i++) {
- for (j = 0; j < xres; j++)
- data[i*xres + j] = gwy_get_gfloat_le(&p);
- }
+ xreal = gwy_get_gfloat_le(&p) * 1e-3;
+ /* FIXME: I do not know what the second number means. It does not seem to
+ * be z-scale because z scaling does not change when the number changes. */
+ q = gwy_get_gfloat_le(&p);
+ gwy_debug("xreal: %g, q: %g", xreal, q);
+ dfield = gwy_data_field_new(xres, yres, xreal, xreal, FALSE);
+ gwy_convert_raw_data(buffer + HEADER_SIZE, xres*yres, 1,
+ GWY_RAW_DATA_FLOAT, GWY_BYTE_ORDER_LITTLE_ENDIAN,
+ gwy_data_field_get_data(dfield), 1e-3, 0.0);
gwy_si_unit_set_from_string(gwy_data_field_get_si_unit_xy(dfield), "m");
gwy_si_unit_set_from_string(gwy_data_field_get_si_unit_z(dfield), "m");
@@ -170,6 +169,7 @@ amb_load(const gchar *filename,
gwy_container_set_object_by_name(container, "/0/data", dfield);
gwy_container_set_string_by_name(container, "/0/data/title",
g_strdup("Topography"));
+ gwy_app_channel_check_nonsquare(container, 0);
g_object_unref(dfield);
gwy_file_channel_import_log_add(container, 0, NULL, filename);
diff --git a/modules/file/anfatec.c b/modules/file/anfatec.c
index 38f1f1a..65fe090 100644
--- a/modules/file/anfatec.c
+++ b/modules/file/anfatec.c
@@ -1,5 +1,5 @@
/*
- * $Id: anfatec.c 19071 2016-10-14 09:02:41Z yeti-dn $
+ * $Id: anfatec.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2010 David Necas (Yeti)
* E-mail: yeti at gwyddion.net
*
@@ -91,7 +91,7 @@ static GwyModuleInfo module_info = {
"2010",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, anfatec)
static gboolean
module_register(void)
diff --git a/modules/file/apedaxfile.c b/modules/file/apedaxfile.c
index 1144b66..c21a0ea 100644
--- a/modules/file/apedaxfile.c
+++ b/modules/file/apedaxfile.c
@@ -1,5 +1,5 @@
/*
- * $Id: apedaxfile.c 19044 2016-10-08 19:10:46Z yeti-dn $
+ * $Id: apedaxfile.c 19549 2017-03-27 08:34:42Z yeti-dn $
* Copyright (C) 2005 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -213,31 +213,33 @@ static const APEXmlField dax_stm[] = {
/*Prototypes*/
-static gboolean module_register (void);
-static gint apedax_detect (const GwyFileDetectInfo *fileinfo,
- gboolean only_name);
-static GwyContainer* apedax_load (const gchar *filename,
- GwyRunType mode,
- GError **error);
-static GwyContainer* apedax_get_meta (guchar *scan_xml_content,
- gsize content_size,
- gboolean apdt_file);
-static gchar* apedax_get_xml_node_as_string (xmlDocPtr doc,
- const gchar *node_xpath);
-static GwyDataField* apedax_get_data_field (GwyZipFile uFile,
- const gchar *chFileName,
- const APEScanSize *scan_size,
- gchar *zUnit,
- gdouble scale,
- GError **error);
-static gboolean apedax_get_channels_data (GwyZipFile uFile,
- guchar *scan_xml_content,
- gsize content_size,
- const gchar *filename,
- GwyContainer *container,
- GwyContainer *meta,
- const APEScanSize *scan_size,
- GError **error);
+static gboolean module_register (void);
+static gint apedax_detect (const GwyFileDetectInfo *fileinfo,
+ gboolean only_name);
+static gboolean apedax_is_plausible_file (const guchar *filehead,
+ gsize len);
+static GwyContainer* apedax_load (const gchar *filename,
+ GwyRunType mode,
+ GError **error);
+static GwyContainer* apedax_get_meta (guchar *scan_xml_content,
+ gsize content_size,
+ gboolean apdt_file);
+static gchar* apedax_get_xml_node_as_string(xmlDocPtr doc,
+ const gchar *node_xpath);
+static GwyDataField* apedax_get_data_field (GwyZipFile uFile,
+ const gchar *chFileName,
+ const APEScanSize *scan_size,
+ gchar *zUnit,
+ gdouble scale,
+ GError **error);
+static gboolean apedax_get_channels_data (GwyZipFile uFile,
+ guchar *scan_xml_content,
+ gsize content_size,
+ const gchar *filename,
+ GwyContainer *container,
+ GwyContainer *meta,
+ const APEScanSize *scan_size,
+ GError **error);
static gboolean apedax_is_xml_valid (guchar *scan_xml_content,
gsize content_size);
@@ -260,7 +262,7 @@ static GwyModuleInfo module_info = {
"Andrea Cervesato <infos at aperesearch.com>, "
"Gianfranco Gallizia <infos at aperesearch.com>, "
"Samo Ziberna <infos at aperesearch.com>",
- "0.7",
+ "0.8",
"A.P.E. Research srl",
"2015"
};
@@ -306,6 +308,11 @@ apedax_detect(const GwyFileDetectInfo *fileinfo,
else
return 0;
+ /* Weed out surely non-DAX files before calling possibly expensive ZIP
+ * functions. */
+ if (!apedax_is_plausible_file(fileinfo->head, fileinfo->buffer_len))
+ return 0;
+
gwy_debug("Opening the file with MiniZIP");
uFile = gwyzip_open(fileinfo->name);
@@ -334,6 +341,23 @@ apedax_detect(const GwyFileDetectInfo *fileinfo,
return score;
}
+/* Try to find the name of an expected file somewhere. */
+static gboolean
+apedax_is_plausible_file(const guchar *filehead, gsize len)
+{
+ static const gchar *filenames[] = {
+ ".bin", "scan.xml",
+ };
+ guint i;
+
+ for (i = 0; i < G_N_ELEMENTS(filenames); i++) {
+ if (gwy_memmem(filehead, len, filenames[i], strlen(filenames[i])))
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
/*Load function*/
static GwyContainer*
diff --git a/modules/file/apefile.c b/modules/file/apefile.c
index ec936cf..97ae8e0 100644
--- a/modules/file/apefile.c
+++ b/modules/file/apefile.c
@@ -1,5 +1,5 @@
/*
- * $Id: apefile.c 17817 2015-12-09 21:35:07Z yeti-dn $
+ * $Id: apefile.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2005 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -200,7 +200,7 @@ static GwyModuleInfo module_info = {
"2005",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, apefile)
static gboolean
module_register(void)
diff --git a/modules/file/asciiexport.c b/modules/file/asciiexport.c
index 99e2b51..bee4e08 100644
--- a/modules/file/asciiexport.c
+++ b/modules/file/asciiexport.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: asciiexport.c 17719 2015-11-06 08:46:13Z pecold $
+ * @(#) $Id: asciiexport.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2003,2007 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -79,7 +79,7 @@ static GwyModuleInfo module_info = {
"2004",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, asciiexport)
static gboolean
module_register(void)
diff --git a/modules/file/assing-afm.c b/modules/file/assing-afm.c
index ae3ff39..0129ab0 100644
--- a/modules/file/assing-afm.c
+++ b/modules/file/assing-afm.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: assing-afm.c 18007 2016-01-06 23:14:44Z yeti-dn $
+ * @(#) $Id: assing-afm.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2005 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -76,7 +76,7 @@ static GwyModuleInfo module_info = {
"2005",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, assing_afm)
static gboolean
module_register(void)
diff --git a/modules/file/attocube.c b/modules/file/attocube.c
index 56ada60..98549a3 100644
--- a/modules/file/attocube.c
+++ b/modules/file/attocube.c
@@ -1,5 +1,5 @@
/*
- * $Id: attocube.c 17718 2015-11-06 08:04:04Z pecold $
+ * $Id: attocube.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2009 David Necas (Yeti).
*
* This program is free software; you can redistribute it and/or modify
@@ -88,7 +88,7 @@ static GwyModuleInfo module_info = {
"2009",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, attocube)
static gboolean
module_register(void)
@@ -271,6 +271,12 @@ asc_load(const gchar *filename,
if ((value = g_hash_table_lookup(hash, "scanspeed")))
gwy_container_set_string_by_name(meta, "Scan Speed", g_strdup(value));
+ if ((value = g_hash_table_lookup(hash, "x-offset")))
+ gwy_container_set_string_by_name(meta, "X Offset", g_strdup(value));
+
+ if ((value = g_hash_table_lookup(hash, "y-offset")))
+ gwy_container_set_string_by_name(meta, "Y Offset", g_strdup(value));
+
gwy_file_channel_import_log_add(container, 0, NULL, filename);
fail:
diff --git a/modules/file/bcrfile.c b/modules/file/bcrfile.c
index b2e968b..74b0916 100644
--- a/modules/file/bcrfile.c
+++ b/modules/file/bcrfile.c
@@ -1,5 +1,5 @@
/*
- * $Id: bcrfile.c 19216 2016-11-09 10:39:06Z yeti-dn $
+ * $Id: bcrfile.c 20196 2017-08-08 06:13:38Z yeti-dn $
* Copyright (C) 2005 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -76,11 +76,6 @@
#include "err.h"
-#ifdef _MSC_VER
-#define swab _swab
-#endif
-
-
/* in characters, not bytes */
#define HEADER_SIZE 2048
@@ -145,12 +140,12 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Imports Image Metrology BCR data files."),
"Yeti <yeti at gwyddion.net>",
- "0.15",
+ "0.16",
"David Nečas (Yeti) & Petr Klapetek",
"2005",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, bcrfile)
static gboolean
module_register(void)
@@ -228,7 +223,7 @@ bcrfile_load(const gchar *filename,
#endif
#if (G_BYTE_ORDER == G_BIG_ENDIAN)
s = g_new(gunichar2, HEADER_SIZE);
- swab(buffer, s, header_size);
+ gwy_memcpy_byte_swap(buffer, (guint8*)s, 2, HEADER_SIZE, 1);
#endif
header = g_utf16_to_utf8(s, HEADER_SIZE, 0, 0, &err);
g_free(s);
diff --git a/modules/file/burleigh.c b/modules/file/burleigh.c
index afcd722..f36c643 100644
--- a/modules/file/burleigh.c
+++ b/modules/file/burleigh.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: burleigh.c 19071 2016-10-14 09:02:41Z yeti-dn $
+ * @(#) $Id: burleigh.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2006 David Necas (Yeti), Petr Klapetek, Hans-Peter Doerr.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net,
* doerr at cip.physik.uni-freiburg.de.
@@ -131,7 +131,7 @@ static GwyModuleInfo module_info = {
"2006",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, burleigh)
static gboolean
module_register(void)
diff --git a/modules/file/burleigh_bii.c b/modules/file/burleigh_bii.c
index de16780..796a6af 100644
--- a/modules/file/burleigh_bii.c
+++ b/modules/file/burleigh_bii.c
@@ -79,7 +79,7 @@ static GwyModuleInfo module_info = {
"2008",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, burleigh_bii)
static gboolean
module_register(void)
diff --git a/modules/file/burleigh_exp.c b/modules/file/burleigh_exp.c
index 9274d76..903d43d 100644
--- a/modules/file/burleigh_exp.c
+++ b/modules/file/burleigh_exp.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: burleigh_exp.c 19216 2016-11-09 10:39:06Z yeti-dn $
+ * @(#) $Id: burleigh_exp.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2007 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -92,7 +92,7 @@ static GwyModuleInfo module_info = {
"2007",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, burleigh_exp)
static gboolean
module_register(void)
diff --git a/modules/file/codevfile.c b/modules/file/codevfile.c
index f2efd95..4a329ca 100644
--- a/modules/file/codevfile.c
+++ b/modules/file/codevfile.c
@@ -1,5 +1,5 @@
/*
- * $Id: codevfile.c 19044 2016-10-08 19:10:46Z yeti-dn $
+ * $Id: codevfile.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2011 David Necas (Yeti).
*
* This program is free software; you can redistribute it and/or modify
@@ -75,7 +75,7 @@ static GwyModuleInfo module_info = {
"2011",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, codevfile)
static gboolean
module_register(void)
diff --git a/modules/file/csmfile.c b/modules/file/csmfile.c
index 88c667f..9c26e14 100644
--- a/modules/file/csmfile.c
+++ b/modules/file/csmfile.c
@@ -1,5 +1,5 @@
/*
- * $Id: csmfile.c 19044 2016-10-08 19:10:46Z yeti-dn $
+ * $Id: csmfile.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2011 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -87,7 +87,7 @@ static GwyModuleInfo module_info = {
"2011",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, csmfile)
static gboolean
module_register(void)
diff --git a/modules/file/dektakvca.c b/modules/file/dektakvca.c
new file mode 100644
index 0000000..1f1a691
--- /dev/null
+++ b/modules/file/dektakvca.c
@@ -0,0 +1,1037 @@
+/*
+ * $Id: dektakvca.c 19948 2017-06-22 14:05:41Z yeti-dn $
+ * Copyright (C) 2017 David Necas (Yeti).
+ * E-mail: yeti at gwyddion.net.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+/**
+ * [FILE-MAGIC-FREEDESKTOP]
+ * <mime-type type="application/x-dektak-opdx">
+ * <comment>Dektak OPDx profilometry data</comment>
+ * <magic priority="80">
+ * <match type="string" offset="0" value="VCA DATA\x01\x00\x00\x55"/>
+ * </magic>
+ * </mime-type>
+ **/
+
+/**
+ * [FILE-MAGIC-FILEMAGIC]
+ * # Dektak (binary serialisation)
+ * 0 string VCA\ DATA\x01\x00\x00\x55 Dektak OPDx profilometry data
+ **/
+
+/**
+ * [FILE-MAGIC-USERGUIDE]
+ * Dektak OPDx profilometry data
+ * .OPDx
+ * Read
+ **/
+
+#include "config.h"
+#include <string.h>
+#include <stdlib.h>
+#include <libgwyddion/gwymacros.h>
+#include <libgwyddion/gwyutils.h>
+#include <libgwyddion/gwymath.h>
+#include <libprocess/datafield.h>
+#include <libgwymodule/gwymodule-file.h>
+#include <app/data-browser.h>
+#include <app/gwymoduleutils-file.h>
+
+#include "err.h"
+#include "get.h"
+
+#define MAGIC "VCA DATA\x01\x00\x00\x55"
+#define MAGIC_SIZE (sizeof(MAGIC)-1)
+
+#define EXTENSION ".OPDx"
+
+#define MEAS_SETTINGS "/MetaData/MeasurementSettings"
+#define RAW_1D_DATA "/1D_Data/Raw"
+#define ANY_2D_DATA "/2D_Data/"
+
+enum {
+ TIMESTAMP_SIZE = 9,
+ UNIT_EXTRA = 12,
+ DOUBLE_ARRAY_EXTRA = 5,
+};
+
+/* Int16s are probably either 0x08, 0x09 or 0x04, 0x05 */
+typedef enum {
+ DEKTAK_MATRIX = 0x00, /* Too lazy to assign an actual type id? */
+ DEKTAK_BOOLEAN = 0x01, /* Takes value 0 and 1 */
+ DEKTAK_SINT32 = 0x06,
+ DEKTAK_UINT32 = 0x07,
+ DEKTAK_SINT64 = 0x0a,
+ DEKTAK_UINT64 = 0x0b,
+ DEKTAK_FLOAT = 0x0c, /* Single precision float */
+ DEKTAK_DOUBLE = 0x0d, /* Double precision float */
+ DEKTAK_TYPE_ID = 0x0e, /* Compound type holding some kind of type id */
+ DEKTAK_STRING = 0x12, /* Free-form string value */
+ DEKTAK_QUANTITY = 0x13, /* Value with units (compound type) */
+ DEKTAK_TIME_STAMP = 0x15, /* Datetime (string/9-byte binary) */
+ DEKTAK_UNITS = 0x18, /* Units (compound type) */
+ DEKTAK_DOUBLE_ARRAY = 0x40, /* Raw data array, in XML Base64-encoded */
+ DEKTAK_STRING_LIST = 0x42, /* List of Str */
+ DEKTAK_RAW_DATA = 0x46, /* Parent/wrapper tag of raw data */
+ DEKTAK_RAW_DATA_2D = 0x47, /* Parent/wrapper tag of raw data */
+ DEKTAK_POS_RAW_DATA = 0x7c, /* Base64-encoded positions, not sure how
+ it differs from 64 */
+ DEKTAK_CONTAINER = 0x7d, /* General nested data structure */
+ DEKTAK_TERMINATOR = 0x7f, /* Always the last item.
+ Usually a couple of 0xff bytes inside. */
+} DektakTypeID;
+
+/* Points directly to the memory buffer. We use it for all kind of blocks
+ * in the file: containers, raw data regions, strings and also the file itself.
+ */
+typedef struct {
+ const guchar *p;
+ guint32 len;
+} DektakBuf;
+
+/* Quantities have name, symbol and value (in that units presumably).
+ * Units have name, symbol, conversion factor *to* (not from) the unit and
+ * then some stuff. Possibly boolean flags? */
+typedef struct {
+ gdouble value;
+ DektakBuf name;
+ DektakBuf symbol;
+ guchar extra[UNIT_EXTRA];
+} DektakQuantUnit;
+
+typedef struct {
+ DektakQuantUnit unit;
+ gdouble divisor;
+ guint64 count;
+ DektakBuf buf;
+} DektakRawPos1D;
+
+typedef struct {
+ DektakQuantUnit unitx;
+ DektakQuantUnit unity;
+ gdouble divisorx;
+ gdouble divisory;
+} DektakRawPos2D;
+
+typedef struct {
+ DektakBuf another_name;
+ guint32 some_int;
+ guint32 xres;
+ guint32 yres;
+ DektakBuf buf;
+} DektakMatrix;
+
+typedef union {
+ gboolean b;
+ guint32 ui;
+ gint32 si;
+ guint64 uq;
+ gint64 sq;
+ gdouble d;
+ guint8 timestamp[TIMESTAMP_SIZE]; /* Format unknown. */
+ DektakBuf buf;
+ DektakQuantUnit qun;
+ DektakRawPos1D rawpos1d;
+ DektakRawPos2D rawpos2d;
+ DektakMatrix matrix;
+ GArray *strlist; /* Contains heap-allocated data. */
+} DektakItemData;
+
+typedef struct {
+ DektakBuf typename;
+ guint typeid;
+ DektakItemData data;
+} DektakItem;
+
+static gboolean module_register (void);
+static gint dektakvca_detect(const GwyFileDetectInfo *fileinfo,
+ gboolean only_name);
+static GwyContainer* dektakvca_load (const gchar *filename,
+ GwyRunType mode,
+ GError **error);
+static gboolean find_1d_data (GHashTable *hash,
+ GwyContainer *container,
+ GString *str,
+ GError **error);
+static gboolean find_2d_data (GHashTable *hash,
+ GwyContainer *container,
+ GString *str,
+ GError **error);
+static GwyContainer* create_meta (GHashTable *hash);
+static GwySIUnit* find_quantity (GHashTable *hash,
+ const gchar *key,
+ GString *str,
+ gdouble *value,
+ GError **error);
+static const DektakItem* find_item (GHashTable *hash,
+ const gchar *path,
+ guint expected_type,
+ gboolean fail_if_not_found,
+ GError **error);
+static gboolean read_item (const DektakBuf *buf,
+ guint32 *pos,
+ GHashTable *hash,
+ GString *path,
+ GError **error);
+static void dektak_item_free(gpointer p);
+
+static GwyModuleInfo module_info = {
+ GWY_MODULE_ABI_VERSION,
+ &module_register,
+ N_("Imports Dektak OPDx data files."),
+ "Yeti <yeti at gwyddion.net>",
+ "0.1",
+ "David Nečas (Yeti)",
+ "2017",
+};
+
+GWY_MODULE_QUERY2(module_info, dektakvca)
+
+static gboolean
+module_register(void)
+{
+ gwy_file_func_register("dektakvca",
+ N_("Dektak OPDx data files (.OPDx)"),
+ (GwyFileDetectFunc)&dektakvca_detect,
+ (GwyFileLoadFunc)&dektakvca_load,
+ NULL,
+ NULL);
+
+ return TRUE;
+}
+
+static gint
+dektakvca_detect(const GwyFileDetectInfo *fileinfo,
+ gboolean only_name)
+{
+ const gchar *head = fileinfo->head;
+
+ if (only_name)
+ return g_str_has_suffix(fileinfo->name_lowercase, EXTENSION) ? 20 : 0;
+
+ if (fileinfo->buffer_len <= MAGIC_SIZE
+ || memcmp(head, MAGIC, MAGIC_SIZE) != 0)
+ return 0;
+
+ return 100;
+}
+
+static GwyContainer*
+dektakvca_load(const gchar *filename,
+ G_GNUC_UNUSED GwyRunType mode,
+ GError **error)
+{
+ GwyContainer *container = NULL;
+ guchar *buffer = NULL;
+ gsize size = 0;
+ GError *err = NULL;
+ GHashTable *hash;
+ GString *str;
+ DektakBuf buf;
+ guint pos;
+
+ if (!gwy_file_get_contents(filename, &buffer, &size, &err)) {
+ err_GET_FILE_CONTENTS(error, &err);
+ return NULL;
+ }
+ if (size < MAGIC_SIZE || memcmp(buffer, MAGIC, MAGIC_SIZE) != 0) {
+ gwy_file_abandon_contents(buffer, size, NULL);
+ err_FILE_TYPE(error, "Dektak OPDx");
+ return NULL;
+ }
+
+ hash = g_hash_table_new_full(g_str_hash, g_str_equal,
+ g_free, dektak_item_free);
+ str = g_string_new(NULL);
+ buf.len = size;
+ buf.p = buffer;
+
+ pos = MAGIC_SIZE;
+ while (pos < size) {
+ if (!read_item(&buf, &pos, hash, str, error))
+ goto fail;
+ }
+
+ /* Many things have two values, one in measurement settings and the other
+ * in the data. The value in data seems to be the actual one, the value
+ * in settings is nominal? */
+ container = gwy_container_new();
+ if (!find_1d_data(hash, container, str, error)) {
+ GWY_OBJECT_UNREF(container);
+ goto fail;
+ }
+
+ if (!find_2d_data(hash, container, str, error)) {
+ GWY_OBJECT_UNREF(container);
+ goto fail;
+ }
+
+ if (!gwy_container_get_n_items(container)) {
+ err_NO_DATA(error);
+ GWY_OBJECT_UNREF(container);
+ }
+
+
+fail:
+ g_hash_table_destroy(hash);
+ g_string_free(str, TRUE);
+ gwy_file_abandon_contents(buffer, size, NULL);
+
+ return container;
+}
+
+/* Only returns FALSE when @error is set. When it does not seem there are
+ * 1D data it returns TRUE; must check if @container has anyhthing in it
+ * later. */
+static gboolean
+find_1d_data(GHashTable *hash, GwyContainer *container, GString *str,
+ GError **error)
+{
+ GwyGraphModel *gmodel;
+ GwyGraphCurveModel *gcmodel;
+ const DektakItem *item;
+ GwySIUnit *xunit = NULL, *yunit = NULL;
+ const guchar *rawydata, *rawxdata = NULL;
+ gdouble *xdata, *ydata;
+ guint i, res;
+ gdouble real, qy, qx;
+ gboolean ok = FALSE;
+
+ /* If there are SamplesToLog for 1D data, expect 1D data to be present. */
+ if (!(item = find_item(hash, MEAS_SETTINGS "/SamplesToLog",
+ DEKTAK_UINT64, FALSE, NULL)))
+ return TRUE;
+
+ res = item->data.uq;
+ gwy_debug("res %u", res);
+
+ if (!(xunit = find_quantity(hash, MEAS_SETTINGS "/ScanLength", str,
+ &real, error)))
+ goto fail;
+ gwy_debug("real %g", real);
+
+ if (!(yunit = find_quantity(hash, RAW_1D_DATA "/DataScale", str,
+ &qy, error)))
+ goto fail;
+ gwy_debug("qy %g", qy);
+
+ /* Values -- they must be present. */
+ if (!(item = find_item(hash, RAW_1D_DATA "/Array",
+ DEKTAK_DOUBLE_ARRAY, TRUE, NULL))) {
+ err_NO_DATA(error);
+ goto fail;
+ }
+ if (err_SIZE_MISMATCH(error,
+ DOUBLE_ARRAY_EXTRA + res*sizeof(gdouble),
+ item->data.buf.len,
+ TRUE))
+ goto fail;
+ rawydata = item->data.buf.p + 5;
+
+ /* Positions -- optional. */
+ if ((item = find_item(hash, RAW_1D_DATA "/PositionFunction",
+ DEKTAK_POS_RAW_DATA, TRUE, NULL))) {
+ if (err_SIZE_MISMATCH(error,
+ res*sizeof(gdouble), item->data.rawpos1d.buf.len,
+ TRUE))
+ goto fail;
+ rawxdata = item->data.rawpos1d.buf.p;
+ qx = 1.0/item->data.rawpos1d.unit.value;
+ }
+
+ /* Use DataKind as the title. */
+ g_string_truncate(str, 0);
+ if ((item = find_item(hash, "/MetaData/DataKind",
+ DEKTAK_STRING, FALSE, NULL)))
+ g_string_append_len(str, item->data.buf.p, item->data.buf.len);
+ else
+ g_string_append(str, "Curve");
+
+ /* Create the graph. */
+ xdata = g_new(gdouble, res);
+ if (rawxdata) {
+ gwy_convert_raw_data(rawxdata, res, 1,
+ GWY_RAW_DATA_DOUBLE, GWY_BYTE_ORDER_LITTLE_ENDIAN,
+ xdata, qx, 0.0);
+ }
+ else {
+ for (i = 0; i < res; i++)
+ xdata[i] = real*i/(res - 1.0);
+ }
+
+ ydata = g_new(gdouble, res);
+ gwy_convert_raw_data(rawydata, res, 1,
+ GWY_RAW_DATA_DOUBLE, GWY_BYTE_ORDER_LITTLE_ENDIAN,
+ ydata, qy, 0.0);
+
+ gmodel = gwy_graph_model_new();
+ gcmodel = gwy_graph_curve_model_new();
+ g_object_set(gcmodel,
+ "mode", GWY_GRAPH_CURVE_LINE,
+ "color", gwy_graph_get_preset_color(0),
+ "description", str->str,
+ NULL);
+ gwy_graph_curve_model_set_data(gcmodel, xdata, ydata, res);
+ gwy_graph_model_add_curve(gmodel, gcmodel);
+ g_object_unref(gcmodel);
+ g_free(xdata);
+ g_free(ydata);
+
+ g_object_set(gmodel,
+ "si-unit-x", xunit,
+ "si-unit-y", yunit,
+ "title", str->str,
+ NULL);
+ gwy_container_set_object(container,
+ gwy_app_get_graph_key_for_id(0), gmodel);
+ g_object_unref(gmodel);
+
+ ok = TRUE;
+
+fail:
+ GWY_OBJECT_UNREF(xunit);
+ GWY_OBJECT_UNREF(yunit);
+
+ return ok;
+}
+
+static void
+find_2d_data_matrix(gpointer key, gpointer value, gpointer user_data)
+{
+ const gchar *name = (const gchar*)key;
+ const DektakItem *item = (const DektakItem*)value;
+ GPtrArray *channels = (GPtrArray*)user_data;
+ const gchar *s;
+
+ if (item->typeid != DEKTAK_MATRIX)
+ return;
+ if (strncmp(name, ANY_2D_DATA, 9) != 0)
+ return;
+ if (!(s = strchr(name + 9, '/')))
+ return;
+ if (!gwy_strequal(s + 1, "Matrix"))
+ return;
+
+ g_ptr_array_add(channels, g_strndup(name + 9, s - name - 9));
+ gwy_debug("found 2D channel %s",
+ (gchar*)g_ptr_array_index(channels, channels->len-1));
+}
+
+static gboolean
+find_2d_data(GHashTable *hash, GwyContainer *container, GString *str,
+ GError **error)
+{
+ GwySIUnit *xunit = NULL, *yunit = NULL, *zunit = NULL;
+ GwyContainer *meta;
+ GPtrArray *channels;
+ GwyDataField *dfield, *mask;
+ const DektakItem *item;
+ gboolean ok = FALSE;
+ const guchar *rawdata;
+ guint i, len, xres, yres;
+ gdouble xreal, yreal, q = 1.0;
+ GString *s;
+ GQuark quark;
+
+ channels = g_ptr_array_new();
+ g_hash_table_foreach(hash, find_2d_data_matrix, channels);
+ if (!channels->len) {
+ g_ptr_array_free(channels, TRUE);
+ return TRUE;
+ }
+
+ s = g_string_new(NULL);
+ for (i = 0; i < channels->len; i++) {
+ g_string_assign(str, ANY_2D_DATA);
+ g_string_append(str, (gchar*)g_ptr_array_index(channels, i));
+ len = str->len;
+
+ g_string_append(str, "/Matrix");
+ item = find_item(hash, str->str, DEKTAK_MATRIX, TRUE, NULL);
+ /* Must correspond to what find_2d_data_matrix() found. */
+ g_return_val_if_fail(item, FALSE);
+
+ rawdata = item->data.matrix.buf.p;
+ xres = item->data.matrix.xres;
+ yres = item->data.matrix.yres;
+ if (err_DIMENSION(error, xres) || err_DIMENSION(error, yres))
+ goto fail;
+
+ g_string_truncate(str, len);
+ g_string_append(str, "/Dimension1Extent");
+ if (!(yunit = find_quantity(hash, str->str, s, &yreal, error)))
+ goto fail;
+ gwy_debug("yreal %g", yreal);
+
+ g_string_truncate(str, len);
+ g_string_append(str, "/Dimension2Extent");
+ if (!(xunit = find_quantity(hash, str->str, s, &xreal, error)))
+ goto fail;
+ gwy_debug("xreal %g", xreal);
+
+ g_string_truncate(str, len);
+ g_string_append(str, "/DataScale");
+ if (!(zunit = find_quantity(hash, str->str, s, &q, error)))
+ goto fail;
+ gwy_debug("q %g", q);
+
+ if (!gwy_si_unit_equal(xunit, yunit)) {
+ g_warning("Different x and y units are not representable, "
+ "ignoring y.");
+ }
+
+ dfield = gwy_data_field_new(xres, yres, xreal, yreal, FALSE);
+ gwy_data_field_set_si_unit_xy(dfield, xunit);
+ gwy_data_field_set_si_unit_z(dfield, zunit);
+
+ gwy_convert_raw_data(rawdata, xres*yres, 1,
+ GWY_RAW_DATA_FLOAT, GWY_BYTE_ORDER_LITTLE_ENDIAN,
+ gwy_data_field_get_data(dfield), q, 0.0);
+
+ quark = gwy_app_get_data_key_for_id(i);
+ gwy_container_set_object(container, quark, dfield);
+ if ((mask = gwy_app_channel_mask_of_nans(dfield, TRUE))) {
+ quark = gwy_app_get_mask_key_for_id(i);
+ gwy_container_set_object(container, quark, mask);
+ g_object_unref(mask);
+ }
+ g_object_unref(dfield);
+
+ quark = gwy_app_get_data_title_key_for_id(i);
+ gwy_container_set_const_string(container, quark,
+ g_ptr_array_index(channels, i));
+
+ GWY_OBJECT_UNREF(xunit);
+ GWY_OBJECT_UNREF(yunit);
+ GWY_OBJECT_UNREF(zunit);
+
+ if ((meta = create_meta(hash))) {
+ quark = gwy_app_get_data_meta_key_for_id(i);
+ gwy_container_set_object(container, quark, meta);
+ g_object_unref(meta);
+ }
+ }
+ ok = TRUE;
+
+fail:
+ GWY_OBJECT_UNREF(xunit);
+ GWY_OBJECT_UNREF(yunit);
+ GWY_OBJECT_UNREF(zunit);
+ g_string_free(s, TRUE);
+ for (i = 0; i < channels->len; i++)
+ g_free(g_ptr_array_index(channels, i));
+ g_ptr_array_free(channels, TRUE);
+ return ok;
+}
+
+static void
+create_meta_item(gpointer key, gpointer value, gpointer user_data)
+{
+ const gchar *name = (const gchar*)key;
+ const DektakItem *item = (const DektakItem*)value;
+ GwyContainer *meta = (GwyContainer*)user_data;
+ gchar *metakey, *metavalue;
+
+ if (!g_str_has_prefix(name, "/MetaData/"))
+ return;
+
+ if (item->typeid == DEKTAK_BOOLEAN)
+ metavalue = g_strdup(item->data.b ? "True" : "False");
+ else if (item->typeid == DEKTAK_SINT32)
+ metavalue = g_strdup_printf("%d", item->data.si);
+ else if (item->typeid == DEKTAK_UINT32)
+ metavalue = g_strdup_printf("%u", item->data.ui);
+ else if (item->typeid == DEKTAK_SINT64)
+ metavalue = g_strdup_printf("%" G_GINT64_FORMAT, item->data.sq);
+ else if (item->typeid == DEKTAK_UINT64)
+ metavalue = g_strdup_printf("%" G_GUINT64_FORMAT, item->data.uq);
+ else if (item->typeid == DEKTAK_DOUBLE || item->typeid == DEKTAK_FLOAT)
+ metavalue = g_strdup_printf("%g", item->data.d);
+ else if (item->typeid == DEKTAK_STRING)
+ metavalue = g_strndup(item->data.buf.p, item->data.buf.len);
+ else if (item->typeid == DEKTAK_QUANTITY) {
+ metavalue = g_strdup_printf("%g %.*s", item->data.qun.value,
+ item->data.qun.symbol.len,
+ item->data.qun.symbol.p);
+ }
+ else if (item->typeid == DEKTAK_STRING_LIST) {
+ GArray *strlist = item->data.strlist;
+ const DektakBuf *str;
+ guint i, len = 0;
+
+ for (i = 0; i < strlist->len; i++) {
+ str = &g_array_index(strlist, DektakBuf, i);
+ len += str->len + 1;
+ }
+
+ if (len) {
+ metavalue = g_new(gchar, len);
+ len = 0;
+ for (i = 0; i < strlist->len; i++) {
+ str = &g_array_index(strlist, DektakBuf, i);
+ memcpy(metavalue + len, str->p, str->len);
+ len += str->len;
+ metavalue[len] = ' ';
+ len++;
+ }
+ metavalue[len-1] = '\0';
+ }
+ else
+ metavalue = g_strdup("");
+ }
+ else {
+ gwy_debug("unhandled meta %02x %s\n", item->typeid, name);
+ return;
+ }
+
+ metakey = gwy_strreplace(name + 10, "/", "::", (gsize)-1);
+ gwy_container_set_string_by_name(meta, metakey, (const guchar*)metavalue);
+ g_free(metakey);
+}
+
+static GwyContainer*
+create_meta(GHashTable *hash)
+{
+ GwyContainer *meta = gwy_container_new();
+
+ g_hash_table_foreach(hash, create_meta_item, meta);
+ if (gwy_container_get_n_items(meta))
+ return meta;
+
+ g_object_unref(meta);
+ return NULL;
+}
+
+static GwySIUnit*
+find_quantity(GHashTable *hash, const gchar *key, GString *str,
+ gdouble *value, GError **error)
+{
+ const DektakItem *item;
+ GwySIUnit *unit;
+ gint power10;
+
+ if (!(item = find_item(hash, key, DEKTAK_QUANTITY, TRUE, error)))
+ return NULL;
+ g_string_truncate(str, 0);
+ g_string_append_len(str,
+ item->data.qun.symbol.p, item->data.qun.symbol.len);
+ unit = gwy_si_unit_new_parse(str->str, &power10);
+ *value = item->data.qun.value * pow10(power10);
+
+ return unit;
+}
+
+static const DektakItem*
+find_item(GHashTable *hash, const gchar *path, guint expected_type,
+ gboolean fail_if_not_found, GError **error)
+{
+ const DektakItem *item = g_hash_table_lookup(hash, path);
+
+ if (!item) {
+ if (fail_if_not_found)
+ err_MISSING_FIELD(error, path);
+ return NULL;
+ }
+ if (expected_type && item->typeid != expected_type) {
+ if (fail_if_not_found) {
+ g_set_error(error, GWY_MODULE_FILE_ERROR,
+ GWY_MODULE_FILE_ERROR_DATA,
+ _("Item `%s' has unexpected type %u instead of %u."),
+ path, item->typeid, expected_type);
+ }
+ return NULL;
+ }
+ return item;
+}
+
+static gboolean
+read_with_check(const DektakBuf *buf, guint32 *pos, guint32 nbytes, void *out)
+{
+ if (buf->len < nbytes || *pos > buf->len - nbytes)
+ return FALSE;
+ memcpy(out, buf->p + *pos, nbytes);
+ *pos += nbytes;
+ return TRUE;
+}
+
+static gboolean
+read_int16(const DektakBuf *buf, guint32 *pos, guint16 *i)
+{
+ if (read_with_check(buf, pos, sizeof(guint16), i)) {
+ *i = GUINT16_FROM_LE(*i);
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static gboolean
+read_int32(const DektakBuf *buf, guint32 *pos, guint32 *i)
+{
+ if (read_with_check(buf, pos, sizeof(guint32), i)) {
+ *i = GUINT32_FROM_LE(*i);
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static gboolean
+read_int64(const DektakBuf *buf, guint32 *pos, guint64 *i)
+{
+ if (read_with_check(buf, pos, sizeof(guint64), i)) {
+ *i = GUINT64_FROM_LE(*i);
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static gboolean
+read_float(const DektakBuf *buf, guint32 *pos, gdouble *f)
+{
+ union { guint32 i; gfloat f; } u;
+ if (read_with_check(buf, pos, sizeof(guint32), &u)) {
+ u.i = GUINT32_FROM_LE(u.i);
+ *f = u.f;
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static gboolean
+read_double(const DektakBuf *buf, guint32 *pos, gdouble *f)
+{
+ union { guint64 i; gdouble f; } u;
+ if (read_with_check(buf, pos, sizeof(guint64), &u)) {
+ u.i = GUINT64_FROM_LE(u.i);
+ *f = u.f;
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static gboolean
+read_varlen(const DektakBuf *buf, guint32 *pos, guint32 *l)
+{
+ guint8 lenlen;
+ if (!read_with_check(buf, pos, 1, &lenlen))
+ return FALSE;
+
+ if (lenlen == 1) {
+ guint8 len;
+ if (!read_with_check(buf, pos, 1, &len))
+ return FALSE;
+ *l = len;
+ }
+ else if (lenlen == 2) {
+ guint16 len;
+ if (!read_int16(buf, pos, &len))
+ return FALSE;
+ *l = len;
+ }
+ else if (lenlen == 4) {
+ guint32 len;
+ if (!read_int32(buf, pos, &len))
+ return FALSE;
+ *l = len;
+ }
+ else {
+ /* XXX: We should to report a different error type here, like
+ * "Unsupported length length". */
+ return FALSE;
+ }
+ return TRUE;
+}
+
+/* Name has always 4byte size, unlike a string which has varlength. */
+static gboolean
+read_name(const DektakBuf *buf, guint32 *pos, DektakBuf *str)
+{
+ if (!read_int32(buf, pos, &str->len))
+ return FALSE;
+ if (buf->len < str->len || *pos > buf->len - str->len)
+ return FALSE;
+ str->p = buf->p + *pos;
+ *pos += str->len;
+ return TRUE;
+}
+
+/* NB: it moves @pos to the end of the structure because @p becomes the inner
+ * content buffer. */
+static gboolean
+read_structured(const DektakBuf *buf, guint32 *pos, DektakBuf *content)
+{
+ if (!read_varlen(buf, pos, &content->len))
+ return FALSE;
+ if (buf->len < content->len || *pos > buf->len - content->len)
+ return FALSE;
+ content->p = buf->p + *pos;
+ *pos += content->len;
+ return TRUE;
+}
+
+/* NB: it moves @pos to the end of the structure because @content becomes the
+ * inner content buffer. */
+static gboolean
+read_named_struct(const DektakBuf *buf, guint32 *pos,
+ DektakBuf *typename, DektakBuf *content)
+{
+ if (!read_name(buf, pos, typename))
+ return FALSE;
+ if (!read_structured(buf, pos, content))
+ return FALSE;
+ return TRUE;
+}
+
+/* Helper function; the structure seems to be repeated in various places. */
+static gboolean
+read_quantunit_content(const DektakBuf *buf, guint32 *pos, gboolean is_unit,
+ DektakQuantUnit *unit)
+{
+ if (!is_unit) {
+ if (!read_double(buf, pos, &unit->value))
+ return FALSE;
+ }
+ if (!read_name(buf, pos, &unit->name))
+ return FALSE;
+ if (!read_name(buf, pos, &unit->symbol))
+ return FALSE;
+ if (is_unit) {
+ if (!read_double(buf, pos, &unit->value))
+ return FALSE;
+ if (!read_with_check(buf, pos, UNIT_EXTRA, &unit->extra[0]))
+ return FALSE;
+ }
+ return TRUE;
+}
+
+static gboolean
+read_dimension2d_content(const DektakBuf *buf, guint32 *pos,
+ DektakQuantUnit *unit, gdouble *divisor)
+{
+ if (!read_double(buf, pos, &unit->value))
+ return FALSE;
+ if (!read_name(buf, pos, &unit->name))
+ return FALSE;
+ if (!read_name(buf, pos, &unit->symbol))
+ return FALSE;
+ if (!read_double(buf, pos, divisor))
+ return FALSE;
+ if (!read_with_check(buf, pos, UNIT_EXTRA, &unit->extra[0]))
+ return FALSE;
+ return TRUE;
+}
+
+static gboolean
+read_item(const DektakBuf *buf, guint32 *pos, GHashTable *hash, GString *path,
+ GError **error)
+{
+ DektakItem item;
+ DektakBuf name, content, s;
+ guint8 typeid, b8;
+ guint orig_path_len = path->len;
+ guint32 itempos = 0;
+
+ if (!read_name(buf, pos, &name))
+ goto fail;
+
+ g_string_append_c(path, '/');
+ g_string_append_len(path, (gchar*)name.p, name.len);
+
+ if (!read_with_check(buf, pos, 1, &typeid))
+ goto fail;
+
+ gwy_clear(&item, 1);
+ item.typeid = typeid;
+
+ /* Simple types. */
+ if (typeid == DEKTAK_BOOLEAN) {
+ if (!read_with_check(buf, pos, 1, &b8))
+ goto fail;
+ item.data.b = b8;
+ }
+ else if (typeid == DEKTAK_SINT32 || typeid == DEKTAK_UINT32) {
+ if (!read_int32(buf, pos, &item.data.ui))
+ goto fail;
+ }
+ else if (typeid == DEKTAK_SINT64 || typeid == DEKTAK_UINT64) {
+ if (!read_int64(buf, pos, &item.data.uq))
+ goto fail;
+ }
+ else if (typeid == DEKTAK_FLOAT) {
+ if (!read_float(buf, pos, &item.data.d))
+ goto fail;
+ }
+ else if (typeid == DEKTAK_DOUBLE) {
+ if (!read_double(buf, pos, &item.data.d))
+ goto fail;
+ }
+ else if (typeid == DEKTAK_TIME_STAMP) {
+ if (!read_with_check(buf, pos, TIMESTAMP_SIZE, &item.data.timestamp[0]))
+ goto fail;
+ }
+ else if (typeid == DEKTAK_STRING) {
+ if (!read_structured(buf, pos, &item.data.buf))
+ goto fail;
+ }
+ else if (typeid == DEKTAK_QUANTITY) {
+ if (!read_structured(buf, pos, &content))
+ goto fail;
+ if (!read_quantunit_content(&content, &itempos, FALSE, &item.data.qun))
+ goto fail;
+ }
+ else if (typeid == DEKTAK_UNITS) {
+ if (!read_structured(buf, pos, &content))
+ goto fail;
+ if (!read_quantunit_content(&content, &itempos, TRUE, &item.data.qun))
+ goto fail;
+ }
+ else if (typeid == DEKTAK_TERMINATOR) {
+ /* There are usually some 0xff bytes. Not sure what to think about
+ * them. */
+ *pos = buf->len;
+ }
+ /* Container types. Cannot tell any difference between these two. Raw
+ * data purpose seems to be wrapping actual raw data in something
+ * container-like. */
+ else if (typeid == DEKTAK_CONTAINER
+ || typeid == DEKTAK_RAW_DATA
+ || typeid == DEKTAK_RAW_DATA_2D) {
+ if (!read_structured(buf, pos, &content))
+ goto fail;
+ while (itempos < content.len) {
+ if (!read_item(&content, &itempos, hash, path, error))
+ return FALSE;
+ }
+ }
+ /* Types with string type name (i.e. untyped serialised junk we have to
+ * know how to read). */
+ else if (typeid == DEKTAK_DOUBLE_ARRAY) {
+ /* Must check if array size is 8*something + 5. But later. */
+ if (!read_named_struct(buf, pos, &item.typename, &item.data.buf))
+ goto fail;
+ }
+ else if (typeid == DEKTAK_STRING_LIST) {
+ if (!read_named_struct(buf, pos, &item.typename, &content))
+ goto fail;
+ item.data.strlist = g_array_new(FALSE, FALSE, sizeof(DektakBuf));
+ while (itempos < content.len) {
+ if (!read_name(&content, &itempos, &s)) {
+ g_array_free(item.data.strlist, TRUE);
+ goto fail;
+ }
+ g_array_append_val(item.data.strlist, s);
+ }
+ }
+ else if (typeid == DEKTAK_TYPE_ID) {
+ /* The type id is presumably an integral type because in XML it is
+ * represented by an integer literal. But it is represented as a
+ * byte buffer. */
+ if (!read_named_struct(buf, pos, &item.typename, &item.data.buf))
+ goto fail;
+ }
+ else if (typeid == DEKTAK_POS_RAW_DATA) {
+ /* Unfortunately, we have to know if we are readin 1D or 2D at this
+ * point because the structs differ. Bummer. */
+ if (g_str_has_prefix(path->str, "/2D_Data")) {
+ gwy_debug("assuming 2D for pos raw data");
+ if (!read_named_struct(buf, pos, &item.typename, &content))
+ goto fail;
+
+ if (!read_dimension2d_content(&content, &itempos,
+ &item.data.rawpos2d.unitx,
+ &item.data.rawpos2d.divisorx))
+ goto fail;
+ if (!read_dimension2d_content(&content, &itempos,
+ &item.data.rawpos2d.unity,
+ &item.data.rawpos2d.divisory))
+ goto fail;
+ }
+ else {
+ if (!g_str_has_prefix(path->str, "/1D_Data")) {
+ g_warning("Cannot tell if we have 1D or 2D data, assuming 1D.");
+ }
+ gwy_debug("assuming 1D for pos raw data");
+ if (!read_named_struct(buf, pos, &item.typename, &content))
+ goto fail;
+
+ /* This is exactly as a UNIT record, but it does not carry the type
+ * byte. Whatever. */
+ if (!read_quantunit_content(&content, &itempos, TRUE,
+ &item.data.rawpos1d.unit))
+ goto fail;
+ if (!read_int64(&content, &itempos, &item.data.rawpos1d.count))
+ goto fail;
+ /* Must check if item count matches the buffer size. But later. */
+ item.data.rawpos1d.buf = content;
+ item.data.rawpos1d.buf.p += itempos;
+ item.data.rawpos1d.buf.len -= itempos;
+ }
+ }
+ else if (typeid == DEKTAK_MATRIX) {
+ if (!read_name(buf, pos, &item.typename))
+ goto fail;
+ /* This is usually zero... */
+ if (!read_int32(buf, pos, &item.data.matrix.some_int))
+ goto fail;
+ if (!read_name(buf, pos, &item.data.matrix.another_name))
+ goto fail;
+ /* The length includes the following xres and yres. */
+ if (!read_varlen(buf, pos, &item.data.matrix.buf.len))
+ goto fail;
+ if (!read_int32(buf, pos, &item.data.matrix.yres))
+ goto fail;
+ if (!read_int32(buf, pos, &item.data.matrix.xres))
+ goto fail;
+ if (item.data.matrix.buf.len < 2*sizeof(guint32))
+ goto fail;
+ item.data.matrix.buf.len -= 2*sizeof(guint32);
+ item.data.matrix.buf.p = buf->p + *pos;
+ if (buf->len - *pos < item.data.matrix.buf.len)
+ goto fail;
+ *pos += item.data.matrix.buf.len;
+ }
+ else {
+ err_DATA_TYPE(error, typeid);
+ return FALSE;
+ }
+
+ gwy_debug("%s (typeid %02x)", path->str, typeid);
+ g_hash_table_insert(hash,
+ g_strndup(path->str, path->len),
+ g_slice_dup(DektakItem, &item));
+ g_string_truncate(path, orig_path_len);
+ return TRUE;
+
+fail:
+ g_set_error(error, GWY_MODULE_FILE_ERROR, GWY_MODULE_FILE_ERROR_DATA,
+ _("Truncated data inside item %s."), path->str);
+ return FALSE;
+}
+
+static void
+dektak_item_free(gpointer p)
+{
+ DektakItem *item = (DektakItem*)p;
+
+ /* Currently the only data type with heap-allocated data. */
+ if (item->typeid == DEKTAK_STRING_LIST)
+ g_array_free(item->data.strlist, TRUE);
+ g_slice_free(DektakItem, item);
+}
+
+/* vim: set cin et ts=4 sw=4 cino=>1s,e0,n0,f0,{0,}0,^0,\:1s,=0,g1s,h0,t0,+1s,c3,(0,u0 : */
diff --git a/modules/file/dektakxml.c b/modules/file/dektakxml.c
index c711803..b9bac2e 100644
--- a/modules/file/dektakxml.c
+++ b/modules/file/dektakxml.c
@@ -1,5 +1,5 @@
/*
- * $Id: dektakxml.c 18781 2016-07-28 10:48:52Z yeti-dn $
+ * $Id: dektakxml.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2016 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -33,7 +33,7 @@
/**
* [FILE-MAGIC-FILEMAGIC]
- * # SIS
+ * # Dektak (text serialisation)
* 0 string \x3c?xml
* >&0 search/80 \x3cDataContainer\ typeid="125" Dektak XML profilometry data
**/
@@ -72,25 +72,6 @@
#define RAW_1D_DATA "/DataContainer/1D_Data/Raw"
#define Micrometre 1e-6
-/* This is what I guessed from observing the XML. At this moment we ignore
- * the type ids anyway. */
-typedef enum {
- DEKTAKXML_BOOLEAN = 1, /* Takes value 0 and 1 */
- DEKTAKXML_COUNT = 11, /* Positive integer which is an item count */
- DEKTAKXML_DOUBLE = 12, /* Any number */
- DEKTAKXML_INT = 13, /* Arbitrary integer */
- DEKTAKXML_TYPE_ID = 14, /* Type id, some kind of enum? */
- DEKTAKXML_STRING = 18, /* Free-form string value */
- DEKTAKXML_VALUE_UNIT = 19, /* Have Value and Unit children */
- DEKTAKXML_TIME_STAMP = 21, /* Datetime (formatted as string) */
- DEKTAKXML_BASE64 = 64, /* Base64-encoded raw data array */
- DEKTAKXML_STRING_LIST = 66, /* List of Str */
- DEKTAKXML_RAW_DATA = 70, /* Parent/wrapper tag of raw data */
- DEKTAKXML_POS_RAW_DATA = 124, /* Base64-encoded positions, not sure how
- it differs from 64 */
- DEKTAKXML_CONTAINER = 125, /* General nested data structure */
-} DektakXMLTypeID;
-
typedef struct {
gchar *name;
gsize len;
@@ -100,7 +81,6 @@ typedef struct {
typedef struct {
GHashTable *hash;
GString *path;
- GPtrArray *channels;
GArray *rawdata;
} DektakXMLFile;
@@ -142,7 +122,7 @@ static GwyModuleInfo module_info = {
"2016",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, dektakxml)
static gboolean
module_register(void)
@@ -239,9 +219,9 @@ dektakxml_load(const gchar *filename,
* in the data. The value in data seems to be the actual one, the value
* in settings is nominal? */
if (!require_keys(dxfile.hash, error,
- RAW_1D_DATA "/NumPoints",
- RAW_1D_DATA "/Extent/Value",
- RAW_1D_DATA "/Extent/Unit",
+ MEAS_SETTINGS "/SamplesToLog",
+ MEAS_SETTINGS "/ScanLength/Value",
+ MEAS_SETTINGS "/ScanLength/Unit",
RAW_1D_DATA "/DataScale/Value",
RAW_1D_DATA "/DataScale/Unit",
NULL))
@@ -352,7 +332,6 @@ dektakxml_init(DektakXMLFile *dxfile)
dxfile->hash = g_hash_table_new_full(g_str_hash, g_str_equal,
g_free, g_free);
dxfile->path = g_string_new(NULL);
- dxfile->channels = g_ptr_array_new();
dxfile->rawdata = g_array_new(FALSE, FALSE, sizeof(DektakXMLRawData));
}
@@ -366,16 +345,10 @@ dektakxml_free(DektakXMLFile *dxfile)
if (dxfile->path)
g_string_free(dxfile->path, TRUE);
- if (dxfile->channels) {
- for (i = 0; i < dxfile->channels->len; i++)
- g_free(g_ptr_array_index(dxfile->channels, i));
- g_ptr_array_free(dxfile->channels, TRUE);
- }
-
if (dxfile->rawdata) {
for (i = 0; i < dxfile->rawdata->len; i++) {
DektakXMLRawData *rawdata = &g_array_index(dxfile->rawdata,
- DektakXMLRawData, i);
+ DektakXMLRawData, i);
g_free(rawdata->name);
g_free(rawdata->data);
}
diff --git a/modules/file/dimensionfile.c b/modules/file/dimensionfile.c
index 7581a0e..da0006e 100644
--- a/modules/file/dimensionfile.c
+++ b/modules/file/dimensionfile.c
@@ -1,5 +1,5 @@
/*
- * $Id: dimensionfile.c 19044 2016-10-08 19:10:46Z yeti-dn $
+ * $Id: dimensionfile.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2016 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -75,7 +75,7 @@ static GwyModuleInfo module_info = {
"2016",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, dimensionfile)
static gboolean
module_register(void)
diff --git a/modules/file/dm3file.c b/modules/file/dm3file.c
index e9c242f..cdfb10d 100644
--- a/modules/file/dm3file.c
+++ b/modules/file/dm3file.c
@@ -1,5 +1,5 @@
/*
- * $Id: dm3file.c 19044 2016-10-08 19:10:46Z yeti-dn $
+ * $Id: dm3file.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2012 David Necas (Yeti).
*
* This program is free software; you can redistribute it and/or modify
@@ -278,7 +278,7 @@ static GwyModuleInfo module_info = {
"2012",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, dm3file)
static gboolean
module_register(void)
diff --git a/modules/file/dmefile.c b/modules/file/dmefile.c
index f46b95a..30a2102 100644
--- a/modules/file/dmefile.c
+++ b/modules/file/dmefile.c
@@ -1,5 +1,5 @@
/*
- * $Id: dmefile.c 18071 2016-01-11 21:00:49Z yeti-dn $
+ * $Id: dmefile.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2006 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -135,7 +135,7 @@ static GwyModuleInfo module_info = {
"2006",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, dmefile)
static gboolean
module_register(void)
diff --git a/modules/file/dumbfile.c b/modules/file/dumbfile.c
index b34fa38..62c310b 100644
--- a/modules/file/dumbfile.c
+++ b/modules/file/dumbfile.c
@@ -1,5 +1,5 @@
/*
- * $Id: dumbfile.c 19044 2016-10-08 19:10:46Z yeti-dn $
+ * $Id: dumbfile.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2009 David Necas (Yeti).
*
* This program is free software; you can redistribute it and/or modify
@@ -74,7 +74,7 @@ static GwyModuleInfo module_info = {
"2011",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, dumbfile)
static gboolean
module_register(void)
diff --git a/modules/file/ecsfile.c b/modules/file/ecsfile.c
index 22b2c09..9053952 100644
--- a/modules/file/ecsfile.c
+++ b/modules/file/ecsfile.c
@@ -1,5 +1,5 @@
/*
- * $Id: ecsfile.c 19044 2016-10-08 19:10:46Z yeti-dn $
+ * $Id: ecsfile.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2006 David Necas (Yeti), Petr Klapetek, Markus Pristovsek
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net,
* prissi at gift.physik.tu-berlin.de.
@@ -88,7 +88,7 @@ static GwyModuleInfo module_info = {
"2006",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, ecsfile)
static gboolean
module_register(void)
diff --git a/modules/file/ezdfile.c b/modules/file/ezdfile.c
index 2a05563..a5f1400 100644
--- a/modules/file/ezdfile.c
+++ b/modules/file/ezdfile.c
@@ -1,5 +1,5 @@
/*
- * $Id: ezdfile.c 16387 2014-07-10 10:41:50Z yeti-dn $
+ * $Id: ezdfile.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2005 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -139,7 +139,7 @@ static GwyModuleInfo module_info = {
"2005",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, ezdfile)
static gboolean
module_register(void)
diff --git a/modules/file/femtoscan-txt.c b/modules/file/femtoscan-txt.c
index 1423060..520d959 100644
--- a/modules/file/femtoscan-txt.c
+++ b/modules/file/femtoscan-txt.c
@@ -1,5 +1,5 @@
/*
- * $Id: femtoscan-txt.c 19044 2016-10-08 19:10:46Z yeti-dn $
+ * $Id: femtoscan-txt.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2014 David Necas (Yeti).
*
* This program is free software; you can redistribute it and/or modify
@@ -81,7 +81,7 @@ static GwyModuleInfo module_info = {
"2014",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, femtoscan_txt)
static gboolean
module_register(void)
diff --git a/modules/file/femtoscan.c b/modules/file/femtoscan.c
index a6a7a39..605b8dc 100644
--- a/modules/file/femtoscan.c
+++ b/modules/file/femtoscan.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: femtoscan.c 19044 2016-10-08 19:10:46Z yeti-dn $
+ * @(#) $Id: femtoscan.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2014 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -85,7 +85,7 @@ static GwyModuleInfo module_info = {
"2014",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, femtoscan)
static gboolean
module_register(void)
diff --git a/modules/file/file.c b/modules/file/file.c
new file mode 100644
index 0000000..77de51f
--- /dev/null
+++ b/modules/file/file.c
@@ -0,0 +1,240 @@
+/* This is a GENERATED file. */
+#include <glib.h>
+#include <libgwymodule/gwymodule.h>
+
+static const GwyModuleRecord* register_bundle(void);
+
+static GwyModuleInfo module_info = {
+ GWY_MODULE_ABI_VERSION | GWY_MODULE_BUNDLE_FLAG,
+ (GwyModuleRegisterFunc)®ister_bundle,
+ NULL, NULL, NULL, NULL, NULL,
+};
+
+GWY_MODULE_QUERY(module_info)
+
+GwyModuleInfo* _gwy_module_query__accurexii_txt(void);
+GwyModuleInfo* _gwy_module_query__aistfile(void);
+GwyModuleInfo* _gwy_module_query__alicona(void);
+GwyModuleInfo* _gwy_module_query__ambfile(void);
+GwyModuleInfo* _gwy_module_query__anfatec(void);
+GwyModuleInfo* _gwy_module_query__apefile(void);
+GwyModuleInfo* _gwy_module_query__asciiexport(void);
+GwyModuleInfo* _gwy_module_query__assing_afm(void);
+GwyModuleInfo* _gwy_module_query__attocube(void);
+GwyModuleInfo* _gwy_module_query__bcrfile(void);
+GwyModuleInfo* _gwy_module_query__burleigh(void);
+GwyModuleInfo* _gwy_module_query__burleigh_bii(void);
+GwyModuleInfo* _gwy_module_query__burleigh_exp(void);
+GwyModuleInfo* _gwy_module_query__codevfile(void);
+GwyModuleInfo* _gwy_module_query__csmfile(void);
+GwyModuleInfo* _gwy_module_query__dektakvca(void);
+GwyModuleInfo* _gwy_module_query__dektakxml(void);
+GwyModuleInfo* _gwy_module_query__dimensionfile(void);
+GwyModuleInfo* _gwy_module_query__dmefile(void);
+GwyModuleInfo* _gwy_module_query__dm3file(void);
+GwyModuleInfo* _gwy_module_query__dumbfile(void);
+GwyModuleInfo* _gwy_module_query__ecsfile(void);
+GwyModuleInfo* _gwy_module_query__ezdfile(void);
+GwyModuleInfo* _gwy_module_query__femtoscan(void);
+GwyModuleInfo* _gwy_module_query__femtoscan_txt(void);
+GwyModuleInfo* _gwy_module_query__gdeffile(void);
+GwyModuleInfo* _gwy_module_query__gsffile(void);
+GwyModuleInfo* _gwy_module_query__gwyfile(void);
+GwyModuleInfo* _gwy_module_query__gxyzffile(void);
+GwyModuleInfo* _gwy_module_query__hdf4file(void);
+GwyModuleInfo* _gwy_module_query__hitachi_afm(void);
+GwyModuleInfo* _gwy_module_query__hitachi_sem(void);
+GwyModuleInfo* _gwy_module_query__igorfile(void);
+GwyModuleInfo* _gwy_module_query__intelliwave(void);
+GwyModuleInfo* _gwy_module_query__intematix(void);
+GwyModuleInfo* _gwy_module_query__iso28600(void);
+GwyModuleInfo* _gwy_module_query__jeol(void);
+GwyModuleInfo* _gwy_module_query__jspmfile(void);
+GwyModuleInfo* _gwy_module_query__keyence(void);
+GwyModuleInfo* _gwy_module_query__leica(void);
+GwyModuleInfo* _gwy_module_query__lextfile(void);
+GwyModuleInfo* _gwy_module_query__magellan(void);
+GwyModuleInfo* _gwy_module_query__mapvue(void);
+GwyModuleInfo* _gwy_module_query__metropro(void);
+GwyModuleInfo* _gwy_module_query__microprof(void);
+GwyModuleInfo* _gwy_module_query__miffile(void);
+GwyModuleInfo* _gwy_module_query__mifile(void);
+GwyModuleInfo* _gwy_module_query__mulfile(void);
+GwyModuleInfo* _gwy_module_query__nanoeducator(void);
+GwyModuleInfo* _gwy_module_query__nanomagnetics(void);
+GwyModuleInfo* _gwy_module_query__nanonics(void);
+GwyModuleInfo* _gwy_module_query__nanonis(void);
+GwyModuleInfo* _gwy_module_query__nanoscan(void);
+GwyModuleInfo* _gwy_module_query__nanoscope_ii(void);
+GwyModuleInfo* _gwy_module_query__nanoscope(void);
+GwyModuleInfo* _gwy_module_query__nanotop(void);
+GwyModuleInfo* _gwy_module_query__netcdf(void);
+GwyModuleInfo* _gwy_module_query__nmmxyz(void);
+GwyModuleInfo* _gwy_module_query__nt_mdt(void);
+GwyModuleInfo* _gwy_module_query__nxiifile(void);
+GwyModuleInfo* _gwy_module_query__oldmda(void);
+GwyModuleInfo* _gwy_module_query__ols(void);
+GwyModuleInfo* _gwy_module_query__ometiff(void);
+GwyModuleInfo* _gwy_module_query__omicron(void);
+GwyModuleInfo* _gwy_module_query__omicronflat(void);
+GwyModuleInfo* _gwy_module_query__omicronmatrix(void);
+GwyModuleInfo* _gwy_module_query__opdfile(void);
+GwyModuleInfo* _gwy_module_query__pnifile(void);
+GwyModuleInfo* _gwy_module_query__pltfile(void);
+GwyModuleInfo* _gwy_module_query__princetonspe(void);
+GwyModuleInfo* _gwy_module_query__psia(void);
+GwyModuleInfo* _gwy_module_query__pt3file(void);
+GwyModuleInfo* _gwy_module_query__quesant(void);
+GwyModuleInfo* _gwy_module_query__rawfile(void);
+GwyModuleInfo* _gwy_module_query__rawgraph(void);
+GwyModuleInfo* _gwy_module_query__rawxyz(void);
+GwyModuleInfo* _gwy_module_query__renishaw(void);
+GwyModuleInfo* _gwy_module_query__rhk_sm3(void);
+GwyModuleInfo* _gwy_module_query__rhk_spm32(void);
+GwyModuleInfo* _gwy_module_query__robotics(void);
+GwyModuleInfo* _gwy_module_query__s94file(void);
+GwyModuleInfo* _gwy_module_query__sdfile(void);
+GwyModuleInfo* _gwy_module_query__seiko(void);
+GwyModuleInfo* _gwy_module_query__sensofar(void);
+GwyModuleInfo* _gwy_module_query__sensolytics(void);
+GwyModuleInfo* _gwy_module_query__shimadzu(void);
+GwyModuleInfo* _gwy_module_query__sicmfile(void);
+GwyModuleInfo* _gwy_module_query__sis(void);
+GwyModuleInfo* _gwy_module_query__spip_asc(void);
+GwyModuleInfo* _gwy_module_query__spmlab(void);
+GwyModuleInfo* _gwy_module_query__spmlabf(void);
+GwyModuleInfo* _gwy_module_query__stmprg(void);
+GwyModuleInfo* _gwy_module_query__stpfile(void);
+GwyModuleInfo* _gwy_module_query__surffile(void);
+GwyModuleInfo* _gwy_module_query__tescan(void);
+GwyModuleInfo* _gwy_module_query__tiaser(void);
+GwyModuleInfo* _gwy_module_query__unisoku(void);
+GwyModuleInfo* _gwy_module_query__vtkfile(void);
+GwyModuleInfo* _gwy_module_query__win_stm(void);
+GwyModuleInfo* _gwy_module_query__wipfile(void);
+GwyModuleInfo* _gwy_module_query__witec_asc(void);
+GwyModuleInfo* _gwy_module_query__witfile(void);
+GwyModuleInfo* _gwy_module_query__wsffile(void);
+GwyModuleInfo* _gwy_module_query__wsxmfile(void);
+GwyModuleInfo* _gwy_module_query__xyzexport(void);
+GwyModuleInfo* _gwy_module_query__zeiss(void);
+GwyModuleInfo* _gwy_module_query__zeisslsm(void);
+GwyModuleInfo* _gwy_module_query__zemax(void);
+
+static const GwyModuleRecord modules[] = {
+ { _gwy_module_query__accurexii_txt, "accurexii-txt", },
+ { _gwy_module_query__aistfile, "aistfile", },
+ { _gwy_module_query__alicona, "alicona", },
+ { _gwy_module_query__ambfile, "ambfile", },
+ { _gwy_module_query__anfatec, "anfatec", },
+ { _gwy_module_query__apefile, "apefile", },
+ { _gwy_module_query__asciiexport, "asciiexport", },
+ { _gwy_module_query__assing_afm, "assing-afm", },
+ { _gwy_module_query__attocube, "attocube", },
+ { _gwy_module_query__bcrfile, "bcrfile", },
+ { _gwy_module_query__burleigh, "burleigh", },
+ { _gwy_module_query__burleigh_bii, "burleigh_bii", },
+ { _gwy_module_query__burleigh_exp, "burleigh_exp", },
+ { _gwy_module_query__codevfile, "codevfile", },
+ { _gwy_module_query__csmfile, "csmfile", },
+ { _gwy_module_query__dektakvca, "dektakvca", },
+ { _gwy_module_query__dektakxml, "dektakxml", },
+ { _gwy_module_query__dimensionfile, "dimensionfile", },
+ { _gwy_module_query__dmefile, "dmefile", },
+ { _gwy_module_query__dm3file, "dm3file", },
+ { _gwy_module_query__dumbfile, "dumbfile", },
+ { _gwy_module_query__ecsfile, "ecsfile", },
+ { _gwy_module_query__ezdfile, "ezdfile", },
+ { _gwy_module_query__femtoscan, "femtoscan", },
+ { _gwy_module_query__femtoscan_txt, "femtoscan-txt", },
+ { _gwy_module_query__gdeffile, "gdeffile", },
+ { _gwy_module_query__gsffile, "gsffile", },
+ { _gwy_module_query__gwyfile, "gwyfile", },
+ { _gwy_module_query__gxyzffile, "gxyzffile", },
+ { _gwy_module_query__hdf4file, "hdf4file", },
+ { _gwy_module_query__hitachi_afm, "hitachi-afm", },
+ { _gwy_module_query__hitachi_sem, "hitachi-sem", },
+ { _gwy_module_query__igorfile, "igorfile", },
+ { _gwy_module_query__intelliwave, "intelliwave", },
+ { _gwy_module_query__intematix, "intematix", },
+ { _gwy_module_query__iso28600, "iso28600", },
+ { _gwy_module_query__jeol, "jeol", },
+ { _gwy_module_query__jspmfile, "jspmfile", },
+ { _gwy_module_query__keyence, "keyence", },
+ { _gwy_module_query__leica, "leica", },
+ { _gwy_module_query__lextfile, "lextfile", },
+ { _gwy_module_query__magellan, "magellan", },
+ { _gwy_module_query__mapvue, "mapvue", },
+ { _gwy_module_query__metropro, "metropro", },
+ { _gwy_module_query__microprof, "microprof", },
+ { _gwy_module_query__miffile, "miffile", },
+ { _gwy_module_query__mifile, "mifile", },
+ { _gwy_module_query__mulfile, "mulfile", },
+ { _gwy_module_query__nanoeducator, "nanoeducator", },
+ { _gwy_module_query__nanomagnetics, "nanomagnetics", },
+ { _gwy_module_query__nanonics, "nanonics", },
+ { _gwy_module_query__nanonis, "nanonis", },
+ { _gwy_module_query__nanoscan, "nanoscan", },
+ { _gwy_module_query__nanoscope_ii, "nanoscope-ii", },
+ { _gwy_module_query__nanoscope, "nanoscope", },
+ { _gwy_module_query__nanotop, "nanotop", },
+ { _gwy_module_query__netcdf, "netcdf", },
+ { _gwy_module_query__nmmxyz, "nmmxyz", },
+ { _gwy_module_query__nt_mdt, "nt-mdt", },
+ { _gwy_module_query__nxiifile, "nxiifile", },
+ { _gwy_module_query__oldmda, "oldmda", },
+ { _gwy_module_query__ols, "ols", },
+ { _gwy_module_query__ometiff, "ometiff", },
+ { _gwy_module_query__omicron, "omicron", },
+ { _gwy_module_query__omicronflat, "omicronflat", },
+ { _gwy_module_query__omicronmatrix, "omicronmatrix", },
+ { _gwy_module_query__opdfile, "opdfile", },
+ { _gwy_module_query__pnifile, "pnifile", },
+ { _gwy_module_query__pltfile, "pltfile", },
+ { _gwy_module_query__princetonspe, "princetonspe", },
+ { _gwy_module_query__psia, "psia", },
+ { _gwy_module_query__pt3file, "pt3file", },
+ { _gwy_module_query__quesant, "quesant", },
+ { _gwy_module_query__rawfile, "rawfile", },
+ { _gwy_module_query__rawgraph, "rawgraph", },
+ { _gwy_module_query__rawxyz, "rawxyz", },
+ { _gwy_module_query__renishaw, "renishaw", },
+ { _gwy_module_query__rhk_sm3, "rhk-sm3", },
+ { _gwy_module_query__rhk_spm32, "rhk-spm32", },
+ { _gwy_module_query__robotics, "robotics", },
+ { _gwy_module_query__s94file, "s94file", },
+ { _gwy_module_query__sdfile, "sdfile", },
+ { _gwy_module_query__seiko, "seiko", },
+ { _gwy_module_query__sensofar, "sensofar", },
+ { _gwy_module_query__sensolytics, "sensolytics", },
+ { _gwy_module_query__shimadzu, "shimadzu", },
+ { _gwy_module_query__sicmfile, "sicmfile", },
+ { _gwy_module_query__sis, "sis", },
+ { _gwy_module_query__spip_asc, "spip-asc", },
+ { _gwy_module_query__spmlab, "spmlab", },
+ { _gwy_module_query__spmlabf, "spmlabf", },
+ { _gwy_module_query__stmprg, "stmprg", },
+ { _gwy_module_query__stpfile, "stpfile", },
+ { _gwy_module_query__surffile, "surffile", },
+ { _gwy_module_query__tescan, "tescan", },
+ { _gwy_module_query__tiaser, "tiaser", },
+ { _gwy_module_query__unisoku, "unisoku", },
+ { _gwy_module_query__vtkfile, "vtkfile", },
+ { _gwy_module_query__win_stm, "win_stm", },
+ { _gwy_module_query__wipfile, "wipfile", },
+ { _gwy_module_query__witec_asc, "witec-asc", },
+ { _gwy_module_query__witfile, "witfile", },
+ { _gwy_module_query__wsffile, "wsffile", },
+ { _gwy_module_query__wsxmfile, "wsxmfile", },
+ { _gwy_module_query__xyzexport, "xyzexport", },
+ { _gwy_module_query__zeiss, "zeiss", },
+ { _gwy_module_query__zeisslsm, "zeisslsm", },
+ { _gwy_module_query__zemax, "zemax", },
+ { NULL, NULL, },
+};
+
+static const GwyModuleRecord*
+register_bundle(void)
+{
+ return modules;
+}
diff --git a/modules/file/gdeffile.c b/modules/file/gdeffile.c
index bf727c4..765c2ab 100644
--- a/modules/file/gdeffile.c
+++ b/modules/file/gdeffile.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: gdeffile.c 17718 2015-11-06 08:04:04Z pecold $
+ * @(#) $Id: gdeffile.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2010 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -133,7 +133,7 @@ static GwyModuleInfo module_info = {
"2010",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, gdeffile)
static gboolean
module_register(void)
diff --git a/modules/file/gsffile.c b/modules/file/gsffile.c
index 7cc9a9b..6167763 100644
--- a/modules/file/gsffile.c
+++ b/modules/file/gsffile.c
@@ -1,5 +1,5 @@
/*
- * $Id: gsffile.c 17719 2015-11-06 08:46:13Z pecold $
+ * $Id: gsffile.c 20109 2017-07-29 13:06:01Z yeti-dn $
* Copyright (C) 2009 David Necas (Yeti).
*
* This program is free software; you can redistribute it and/or modify
@@ -95,7 +95,7 @@ static GwyModuleInfo module_info = {
"2010",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, gsffile)
static gboolean
module_register(void)
@@ -314,7 +314,7 @@ gsf_export(GwyContainer *container,
const gdouble *d;
gdouble v;
gchar *s;
- GwySIUnit *unit, *emptyunit;
+ GwySIUnit *unit;
FILE *fh;
gwy_app_data_browser_get_current(GWY_APP_DATA_FIELD, &dfield,
@@ -343,20 +343,18 @@ gsf_export(GwyContainer *container,
if ((v = gwy_data_field_get_yoffset(dfield)))
append_num(header, "YOffset", v);
- emptyunit = gwy_si_unit_new(NULL);
unit = gwy_data_field_get_si_unit_xy(dfield);
- if (!gwy_si_unit_equal(unit, emptyunit)) {
+ if (!gwy_si_unit_equal_string(unit, NULL)) {
s = gwy_si_unit_get_string(unit, GWY_SI_UNIT_FORMAT_PLAIN);
g_string_append_printf(header, "XYUnits = %s\n", s);
g_free(s);
}
unit = gwy_data_field_get_si_unit_z(dfield);
- if (!gwy_si_unit_equal(unit, emptyunit)) {
+ if (!gwy_si_unit_equal_string(unit, NULL)) {
s = gwy_si_unit_get_string(unit, GWY_SI_UNIT_FORMAT_PLAIN);
g_string_append_printf(header, "ZUnits = %s\n", s);
g_free(s);
}
- g_object_unref(emptyunit);
s = gwy_app_get_data_field_title(container, id);
g_string_append_printf(header, "Title = %s\n", s);
diff --git a/modules/file/gwyfile.c b/modules/file/gwyfile.c
index 3661e79..76b2713 100644
--- a/modules/file/gwyfile.c
+++ b/modules/file/gwyfile.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: gwyfile.c 19044 2016-10-08 19:10:46Z yeti-dn $
+ * @(#) $Id: gwyfile.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2003-2006 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -108,7 +108,7 @@ static GwyModuleInfo module_info = {
"2003",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, gwyfile)
static gboolean
module_register(void)
diff --git a/modules/file/gwytiff.h b/modules/file/gwytiff.h
index 33d2048..b510c5b 100644
--- a/modules/file/gwytiff.h
+++ b/modules/file/gwytiff.h
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: gwytiff.h 19049 2016-10-10 13:53:53Z yeti-dn $
+ * @(#) $Id: gwytiff.h 19394 2017-01-05 15:12:04Z dn2010 $
* Copyright (C) 2007-2016 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -101,6 +101,8 @@ typedef enum {
GWY_TIFFTAG_SOFTWARE = 305,
GWY_TIFFTAG_DATE_TIME = 306,
GWY_TIFFTAG_ARTIST = 315,
+ GWY_TIFFTAG_PREDICTOR = 317,
+ GWY_TIFFTAG_COLORMAP = 320,
GWY_TIFFTAG_TILE_WIDTH = 322,
GWY_TIFFTAG_TILE_LENGTH = 323,
GWY_TIFFTAG_TILE_OFFSETS = 324,
@@ -113,6 +115,7 @@ typedef enum {
* standard if needed. */
typedef enum {
GWY_TIFF_COMPRESSION_NONE = 1,
+ GWY_TIFF_COMPRESSION_LZW = 5,
} GwyTIFFCompression;
typedef enum {
diff --git a/modules/file/gxyzffile.c b/modules/file/gxyzffile.c
index b8fb0a2..8b10703 100644
--- a/modules/file/gxyzffile.c
+++ b/modules/file/gxyzffile.c
@@ -1,5 +1,5 @@
/*
- * $Id: gxyzffile.c 19044 2016-10-08 19:10:46Z yeti-dn $
+ * $Id: gxyzffile.c 20109 2017-07-29 13:06:01Z yeti-dn $
* Copyright (C) 2013-2016 David Necas (Yeti).
*
* This program is free software; you can redistribute it and/or modify
@@ -122,7 +122,7 @@ static GwyModuleInfo module_info = {
"2013",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, gxyzffile)
static gboolean
module_register(void)
@@ -667,7 +667,6 @@ write_header(FILE *fh, guint nchannels, guint npoints,
GError **error)
{
static const gchar zeros[8] = { 0, 0, 0, 0, 0, 0, 0, 0 };
- GwySIUnit *emptyunit;
GString *header;
gchar *s;
guint i, padding;
@@ -676,22 +675,19 @@ write_header(FILE *fh, guint nchannels, guint npoints,
g_string_append_printf(header, "NChannels = %u\n", nchannels);
g_string_append_printf(header, "NPoints = %u\n", npoints);
- emptyunit = gwy_si_unit_new(NULL);
-
- if (!gwy_si_unit_equal(xyunit, emptyunit)) {
+ if (!gwy_si_unit_equal_string(xyunit, NULL)) {
s = gwy_si_unit_get_string(xyunit, GWY_SI_UNIT_FORMAT_PLAIN);
g_string_append_printf(header, "XYUnits = %s\n", s);
g_free(s);
}
for (i = 0; i < nchannels; i++) {
- if (!gwy_si_unit_equal(zunits[i], emptyunit)) {
+ if (!gwy_si_unit_equal_string(zunits[i], NULL)) {
s = gwy_si_unit_get_string(zunits[i], GWY_SI_UNIT_FORMAT_PLAIN);
g_string_append_printf(header, "ZUnits%u = %s\n", i+1, s);
g_free(s);
}
}
- g_object_unref(emptyunit);
for (i = 0; i < nchannels; i++)
g_string_append_printf(header, "Title%u = %s\n", i, titles[i]);
diff --git a/modules/file/hdf4file.c b/modules/file/hdf4file.c
index bbefec9..c89ac3b 100644
--- a/modules/file/hdf4file.c
+++ b/modules/file/hdf4file.c
@@ -1,5 +1,5 @@
/*
- * $Id: hdf4file.c 16387 2014-07-10 10:41:50Z yeti-dn $
+ * $Id: hdf4file.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2006 David Necas (Yeti), Petr Klapetek, Markus Pristovsek
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net,
* prissi at gift.physik.tu-berlin.de.
@@ -343,7 +343,7 @@ static GwyModuleInfo module_info = {
"2006",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, hdf4file)
static gboolean
module_register(void)
diff --git a/modules/file/hitachi-afm.c b/modules/file/hitachi-afm.c
index 495948a..acdf141 100644
--- a/modules/file/hitachi-afm.c
+++ b/modules/file/hitachi-afm.c
@@ -1,5 +1,5 @@
/*
- * $Id: hitachi-afm.c 16387 2014-07-10 10:41:50Z yeti-dn $
+ * $Id: hitachi-afm.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2005 David Necas (Yeti), Petr Klapetek, Markus Pristovsek
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
* prissi at gift.physik.tu-berlin.de.
@@ -111,7 +111,7 @@ static GwyModuleInfo module_info = {
"2005",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, hitachi_afm)
static gboolean
module_register(void)
diff --git a/modules/file/hitachi-sem.c b/modules/file/hitachi-sem.c
index 95dea54..163b3f2 100644
--- a/modules/file/hitachi-sem.c
+++ b/modules/file/hitachi-sem.c
@@ -1,5 +1,5 @@
/*
- * $Id: hitachi-sem.c 19044 2016-10-08 19:10:46Z yeti-dn $
+ * $Id: hitachi-sem.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2011 David Necas (Yeti).
*
* This program is free software; you can redistribute it and/or modify
@@ -88,7 +88,7 @@ static GwyModuleInfo module_info = {
"2011",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, hitachi_sem)
static gboolean
module_register(void)
diff --git a/modules/file/igorfile.c b/modules/file/igorfile.c
index 0793100..3bd8d44 100644
--- a/modules/file/igorfile.c
+++ b/modules/file/igorfile.c
@@ -1,6 +1,6 @@
/*
- * $Id: igorfile.c 19044 2016-10-08 19:10:46Z yeti-dn $
- * Copyright (C) 2009 David Necas (Yeti).
+ * $Id: igorfile.c 19948 2017-06-22 14:05:41Z yeti-dn $
+ * Copyright (C) 2009-2017 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
* This program is free software; you can redistribute it and/or modify
@@ -32,16 +32,19 @@
* [FILE-MAGIC-USERGUIDE]
* WaveMetrics IGOR binary wave v5
* .ibw
- * Read
+ * Read Export
**/
#include "config.h"
#include <string.h>
#include <stdlib.h>
+#include <stdio.h>
+#include <glib/gstdio.h>
#include <libgwyddion/gwymacros.h>
#include <libgwyddion/gwyutils.h>
#include <libgwyddion/gwymath.h>
#include <libprocess/stats.h>
+#include <libprocess/arithmetic.h>
#include <libgwymodule/gwymodule-file.h>
#include <app/gwymoduleutils-file.h>
#include <app/data-browser.h>
@@ -166,33 +169,40 @@ typedef struct {
GwyContainer *channelmeta;
} IgorFile;
-static gboolean module_register (void);
-static gint igor_detect (const GwyFileDetectInfo *fileinfo,
- gboolean only_name);
-static GwyContainer* igor_load (const gchar *filename,
- GwyRunType mode,
- GError **error);
-static guint igor_read_headers (IgorFile *igorfile,
- const guchar *buffer,
- gsize size,
- gboolean check_only,
- GError **error);
-static guint igor_checksum (gconstpointer buffer,
- gsize size,
- gboolean lsb);
-static guint igor_data_type_size (IgorDataType type);
-static GwyDataField* igor_read_data_field (const IgorFile *igorfile,
- const guchar *buffer,
- guint i,
- const gchar *zunits,
- gboolean imaginary);
-static GwyContainer* igor_get_metadata (IgorFile *igorfile,
- guint id);
-static GPtrArray* read_channel_labels (const gchar *p,
- guint n,
- guint l);
-static gchar* canonicalize_title (const gchar *title);
-static const gchar* channel_title_to_units(const gchar *title);
+static gboolean module_register (void);
+static gint igor_detect (const GwyFileDetectInfo *fileinfo,
+ gboolean only_name);
+static GwyContainer* igor_load (const gchar *filename,
+ GwyRunType mode,
+ GError **error);
+static gboolean igor_export (GwyContainer *data,
+ const gchar *filename,
+ GwyRunType mode,
+ GError **error);
+static guint igor_read_headers (IgorFile *igorfile,
+ const guchar *buffer,
+ gsize size,
+ gboolean check_only,
+ GError **error);
+static guint igor_checksum (gconstpointer buffer,
+ gsize size,
+ gboolean lsb);
+static guint igor_data_type_size (IgorDataType type);
+static GwyDataField* igor_read_data_field (const IgorFile *igorfile,
+ const guchar *buffer,
+ guint i,
+ const gchar *zunits,
+ gboolean is_imaginary);
+static GwyContainer* igor_get_metadata (IgorFile *igorfile,
+ guint id);
+static GPtrArray* read_channel_labels (const gchar *p,
+ guint n,
+ guint l);
+static gchar* canonicalize_title (const gchar *title);
+static const gchar* channel_title_to_units (const gchar *title);
+static gint* find_compatible_channels(GwyContainer *container,
+ GwyDataField *dfield,
+ guint *n);
static GwyModuleInfo module_info = {
GWY_MODULE_ABI_VERSION,
@@ -204,7 +214,7 @@ static GwyModuleInfo module_info = {
"2009",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, igorfile)
static gboolean
module_register(void)
@@ -214,7 +224,7 @@ module_register(void)
(GwyFileDetectFunc)&igor_detect,
(GwyFileLoadFunc)&igor_load,
NULL,
- NULL);
+ (GwyFileSaveFunc)&igor_export);
return TRUE;
}
@@ -287,7 +297,8 @@ igor_load(const gchar *filename,
xres = wave5->n_dim[0];
yres = wave5->n_dim[1];
igorfile.nchannels = wave5->n_dim[2];
- if (igorfile.nchannels==0) igorfile.nchannels=1;
+ if (igorfile.nchannels == 0)
+ igorfile.nchannels = 1;
if (!xres || !yres || !igorfile.nchannels || wave5->n_dim[3]) {
g_set_error(error, GWY_MODULE_FILE_ERROR, GWY_MODULE_FILE_ERROR_DATA,
@@ -327,7 +338,7 @@ igor_load(const gchar *filename,
goto fail;
p = buffer + igorfile.headers_size + expected_size;
- gwy_debug("remaning data size: %lu", (gulong)(size - (p - buffer)));
+ gwy_debug("remaining data size: %lu", (gulong)(size - (p - buffer)));
p += igorfile.header.formula_size;
if ((igorfile.variant == IGOR_ASYLUM_FORCE
@@ -352,8 +363,8 @@ igor_load(const gchar *filename,
/* FIXME: The labels are mandatory only in Asylum Research files. */
nlabels = igorfile.header.dim_labels_size[2]/(MAX_WAVE_NAME5+1);
- expected_size = (MAX_WAVE_NAME5 + 1)*(nlabels);
- if ((p - buffer) + expected_size > size ) {
+ expected_size = (MAX_WAVE_NAME5 + 1)*nlabels;
+ if ((p - buffer) + expected_size > size) {
g_set_error(error, GWY_MODULE_FILE_ERROR, GWY_MODULE_FILE_ERROR_DATA,
_("Cannot read channel labels."));
goto fail;
@@ -614,6 +625,7 @@ igor_read_headers(IgorFile *igorfile,
get_CHARARRAY(wave5->whpad1, &p);
wave5->wh_version = igorfile->get_guint16(&p);
get_CHARARRAY0(wave5->bname, &p);
+ gwy_debug("bname %s", wave5->bname);
wave5->whpad2 = igorfile->get_guint32(&p);
wave5->dfolder = igorfile->get_guint32(&p);
for (i = 0; i < MAXDIMS; i++) {
@@ -695,7 +707,7 @@ igor_read_data_field(const IgorFile *igorfile,
const guchar *buffer,
guint i,
const gchar *zunits,
- gboolean imaginary)
+ gboolean is_imaginary)
{
const IgorWaveHeader5 *wave5;
guint n, xres, yres, skip;
@@ -717,9 +729,9 @@ igor_read_data_field(const IgorFile *igorfile,
FALSE);
data = gwy_data_field_get_data(dfield);
- g_return_val_if_fail(!imaginary || (wave5->type & IGOR_COMPLEX), dfield);
- skip = imaginary ? igorfile->type_size/2 : 0;
- if (imaginary)
+ g_return_val_if_fail(!is_imaginary || (wave5->type & IGOR_COMPLEX), dfield);
+ skip = is_imaginary ? igorfile->type_size/2 : 0;
+ if (is_imaginary)
p += skip;
/* TODO: Support extended units */
@@ -931,4 +943,299 @@ igor_get_metadata(IgorFile *igorfile,
return igorfile->channelmeta;
}
+static inline guint
+append_uint16(GByteArray *content, guint16 u16)
+{
+ guint pos = content->len;
+
+ u16 = GUINT16_TO_LE(u16);
+ g_byte_array_append(content, (guint8*)&u16, sizeof(guint16));
+ return pos;
+}
+
+static inline guint
+append_uint32(GByteArray *content, guint32 u32)
+{
+ guint pos = content->len;
+
+ u32 = GUINT32_TO_LE(u32);
+ g_byte_array_append(content, (guint8*)&u32, sizeof(guint32));
+ return pos;
+}
+
+static inline void
+append_double(GByteArray *content, gdouble dbl)
+{
+ union { guchar pp[8]; double d; } u;
+
+ u.d = dbl;
+#if (G_BYTE_ORDER == G_BIG_ENDIAN)
+ GWY_SWAP(guchar, u.pp[0], u.pp[7]);
+ GWY_SWAP(guchar, u.pp[1], u.pp[6]);
+ GWY_SWAP(guchar, u.pp[2], u.pp[5]);
+ GWY_SWAP(guchar, u.pp[3], u.pp[4]);
+#endif
+ g_byte_array_append(content, u.pp, sizeof(gdouble));
+}
+
+static inline void
+append_zeros(GByteArray *content, guint len)
+{
+ guint8 *zeros;
+ guint64 z64 = 0;
+
+ if (len <= 8) {
+ g_byte_array_append(content, (guint8*)&z64, len);
+ return;
+ }
+
+ zeros = g_new0(guint8, len);
+ g_byte_array_append(content, zeros, len);
+ g_free(zeros);
+}
+
+static inline void
+append_string(GByteArray *content, const gchar *str, guint maxlen)
+{
+ guint len;
+
+ if (!str) {
+ append_zeros(content, maxlen+1);
+ return;
+ }
+
+ len = strlen(str);
+ g_byte_array_append(content, str, MIN(len, maxlen));
+ append_zeros(content, maxlen+1 - MIN(len, maxlen));
+}
+
+static gboolean
+igor_export(GwyContainer *data,
+ const gchar *filename,
+ G_GNUC_UNUSED GwyRunType mode,
+ GError **error)
+{
+ GByteArray *header = NULL;
+ GwyDataField *dfield;
+ GwySIUnit *xyunit, *zunit;
+ const gdouble *d, *drow;
+ gfloat *dfl = NULL, *frow;
+ gint *ids = NULL;
+ FILE *fh = NULL;
+ gboolean ok = FALSE;
+ guint chksumpos;
+ guint xres, yres, n, npts, nchannels, i, j, k, wantlen;
+ gdouble xreal, yreal;
+ guint16 chksum;
+ gchar *title, *title_latin1, *unitstr;
+ gchar bname[MAX_WAVE_NAME5+1];
+ GQuark quark;
+
+ gwy_app_data_browser_get_current(GWY_APP_DATA_FIELD, &dfield, 0);
+ if (!dfield) {
+ err_NO_CHANNEL_EXPORT(error);
+ return FALSE;
+ }
+
+ ids = find_compatible_channels(data, dfield, &nchannels);
+ g_return_val_if_fail(nchannels > 0, FALSE);
+
+ if (!(fh = gwy_fopen(filename, "wb"))) {
+ err_OPEN_WRITE(error);
+ g_free(ids);
+ return FALSE;
+ }
+
+ xres = gwy_data_field_get_xres(dfield);
+ yres = gwy_data_field_get_yres(dfield);
+ xreal = gwy_data_field_get_xreal(dfield);
+ yreal = gwy_data_field_get_yreal(dfield);
+ xyunit = gwy_data_field_get_si_unit_xy(dfield);
+ zunit = gwy_data_field_get_si_unit_z(dfield);
+
+ n = xres*yres;
+ npts = nchannels*n;
+
+ wantlen = HEADER_SIZE5 + WAVE_SIZE5;
+ header = g_byte_array_sized_new(wantlen);
+
+ /* File header. */
+ append_uint16(header, 0x0005u); /* Version. */
+ chksumpos = append_uint16(header, 0); /* Checksum - TBD later. */
+ append_uint32(header, WAVE_SIZE5 + npts*sizeof(gfloat)); /* WFM size */
+ append_uint32(header, 0); /* formula size */
+ append_uint32(header, 0); /* note size */
+ append_uint32(header, 0); /* extended data units size */
+ for (i = 0; i < MAXDIMS; i++)
+ append_uint32(header, 0); /* extended dimension unit sizes */
+
+ /* extended dimension label sizes: x, y, channel, 4D */
+ append_uint32(header, 0);
+ append_uint32(header, 0);
+ append_uint32(header, nchannels*(MAX_WAVE_NAME5 + 1));
+ append_uint32(header, 0);
+
+ append_uint32(header, 0); /* string indices for text waves */
+ append_uint32(header, 0); /* options1, reserved */
+ append_uint32(header, 0); /* options2, reserved */
+
+ /* Wave header. */
+ append_uint32(header, 0); /* next */
+ append_uint32(header, 0); /* creation date */
+ append_uint32(header, 0); /* modification date */
+ append_uint32(header, npts); /* npts */
+ append_uint16(header, IGOR_SINGLE); /* type */
+ append_uint16(header, 0); /* lock */
+ append_zeros(header, 6); /* whpad1 */
+ append_uint16(header, 1); /* wh_version */
+ /* Igor complains if the field is empty. Also it does not like it being
+ * the same as something else... */
+ g_snprintf(bname, sizeof(bname), "gwy%u", g_random_int());
+ append_string(header, bname, MAX_WAVE_NAME5); /* bname */
+ append_zeros(header, 4); /* whpad2 */
+ append_uint32(header, 0); /* dfolder */
+
+ append_uint32(header, xres); /* n_dim[0] */
+ append_uint32(header, yres); /* n_dim[1] */
+ append_uint32(header, nchannels); /* n_dim[2] */
+ append_uint32(header, 0); /* n_dim[3] */
+
+ append_double(header, xreal/xres); /* sfA[0] */
+ append_double(header, yreal/yres); /* sfA[1] */
+ append_double(header, 1.0); /* sfA[2] */
+ append_double(header, 1.0); /* sfA[3] */
+
+ /* FIXME: We could store offsets but they may differ among the fields. */
+ append_double(header, 0.0); /* sfB[0] */
+ append_double(header, 0.0); /* sfB[1] */
+ append_double(header, 0.0); /* sfB[2] */
+ append_double(header, 0.0); /* sfB[3] */
+
+ /* natural data units */
+ unitstr = gwy_si_unit_get_string(zunit, GWY_SI_UNIT_FORMAT_PLAIN);
+ if (strlen(unitstr) == 1)
+ append_string(header, unitstr, MAX_UNIT_CHARS);
+ else
+ append_string(header, NULL, MAX_UNIT_CHARS);
+
+ /* dimension units */
+ unitstr = gwy_si_unit_get_string(xyunit, GWY_SI_UNIT_FORMAT_PLAIN);
+ if (strlen(unitstr) == 1) {
+ append_string(header, unitstr, MAX_UNIT_CHARS);
+ append_string(header, unitstr, MAX_UNIT_CHARS);
+ }
+ else {
+ append_string(header, NULL, MAX_UNIT_CHARS);
+ append_string(header, NULL, MAX_UNIT_CHARS);
+ }
+ g_free(unitstr);
+ for (i = 2; i < MAXDIMS; i++)
+ append_string(header, NULL, MAX_UNIT_CHARS);
+
+ append_uint16(header, 0); /* fsValid */
+ append_uint16(header, 0); /* whpad3 */
+ append_double(header, 0.0); /* top full scale */
+ append_double(header, 0.0); /* bottom full scale */
+
+ gwy_debug("header len %u", header->len);
+
+ if (header->len < wantlen)
+ append_zeros(header, wantlen - header->len);
+ chksum = igor_checksum(header->data, header->len, TRUE);
+ gwy_debug("checksum %04x", chksum);
+ chksum = ((chksum + 0xffff) & 0xffff) ^ 0xffff;
+ header->data[chksumpos] = chksum % 0x100;
+ header->data[chksumpos+1] = chksum/0x100;
+
+ if (!(ok = (fwrite(header->data, 1, header->len, fh) == header->len))) {
+ err_WRITE(error);
+ goto fail;
+ }
+
+ dfl = g_new(gfloat, n);
+ for (k = 0; ids[k] >= 0; k++) {
+ quark = gwy_app_get_data_key_for_id(ids[k]);
+ dfield = gwy_container_get_object(data, quark);
+ d = gwy_data_field_get_data_const(dfield);
+ for (i = 0; i < yres; i++) {
+ frow = dfl + i*xres;
+ drow = d + (yres-1 - i)*xres;
+ for (j = 0; j < xres; j++) {
+#if (G_BYTE_ORDER == G_BIG_ENDIAN)
+ {
+ union { guchar pp[4]; gfloat f; } u;
+
+ u.f = drow[j];
+ GWY_SWAP(guchar, u.pp[0], u.pp[3]);
+ GWY_SWAP(guchar, u.pp[1], u.pp[2]);
+ frow[j] = u.f;
+ }
+#else
+ frow[j] = drow[j];
+#endif
+ }
+ }
+
+ if (!(ok = (fwrite(dfl, sizeof(gfloat), n, fh) == n))) {
+ err_WRITE(error);
+ goto fail;
+ }
+ }
+
+ g_byte_array_set_size(header, 0);
+ for (k = 0; ids[k] >= 0; k++) {
+ title = gwy_app_get_data_field_title(data, ids[k]);
+ title_latin1 = g_convert(title, -1, "ISO-8859-1", "UTF-8",
+ NULL, NULL, NULL);
+ append_string(header, title_latin1, MAX_WAVE_NAME5);
+ g_free(title_latin1);
+ g_free(title);
+ }
+
+ if (!(ok = (fwrite(header->data, 1, header->len, fh) == header->len))) {
+ err_WRITE(error);
+ goto fail;
+ }
+
+ ok = TRUE;
+
+fail:
+ fclose(fh);
+ if (!ok)
+ g_unlink(filename);
+ g_free(ids);
+ g_free(dfl);
+ if (header)
+ g_byte_array_free(header, TRUE);
+
+ return ok;
+}
+
+static gint*
+find_compatible_channels(GwyContainer *container,
+ GwyDataField *dfield,
+ guint *n)
+{
+ GwyDataField *otherfield;
+ GQuark quark;
+ guint i, j;
+ gint *ids;
+
+ ids = gwy_app_data_browser_get_data_ids(container);
+ for (i = j = 0; ids[i] >= 0; i++) {
+ quark = gwy_app_get_data_key_for_id(ids[i]);
+ otherfield = gwy_container_get_object(container, quark);
+ if (gwy_data_field_check_compatibility(dfield, otherfield,
+ GWY_DATA_COMPATIBILITY_ALL) != 0)
+ continue;
+
+ ids[j++] = ids[i];
+ }
+ g_assert(j > 0);
+ *n = j;
+ ids[j] = -1;
+
+ return ids;
+}
+
/* vim: set cin et ts=4 sw=4 cino=>1s,e0,n0,f0,{0,}0,^0,\:1s,=0,g1s,h0,t0,+1s,c3,(0,u0 : */
diff --git a/modules/file/imgexport.c b/modules/file/imgexport.c
index 1b4d7e4..3b68a2f 100644
--- a/modules/file/imgexport.c
+++ b/modules/file/imgexport.c
@@ -1,6 +1,6 @@
/*
- * @(#) $Id: imgexport.c 19219 2016-11-09 20:12:49Z yeti-dn $
- * Copyright (C) 2014-2016 David Necas (Yeti).
+ * @(#) $Id: imgexport.c 19926 2017-06-17 13:20:28Z yeti-dn $
+ * Copyright (C) 2014-2017 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
* This program is free software; you can redistribute it and/or modify
@@ -212,9 +212,7 @@ typedef struct {
GtkObject *inset_opacity;
GSList *inset_pos;
GtkWidget *inset_pos_label[6];
- GtkWidget *inset_length_label;
GtkWidget *inset_length;
- GtkWidget *inset_length_auto;
GtkWidget *inset_draw_ticks;
GtkWidget *inset_draw_label;
GtkWidget *inset_draw_text_above;
@@ -225,7 +223,6 @@ typedef struct {
GtkWidget *draw_mask;
GtkWidget *draw_maskkey;
GtkWidget *mask_key;
- GtkWidget *mask_key_label;
GtkObject *maskkey_gap;
GtkWidget *interpolation;
GSList *ztype;
@@ -298,24 +295,26 @@ typedef struct _ImgExportFormat {
gboolean supports_transparency;
} ImgExportFormat;
-static gboolean module_register (void);
-static gint img_export_detect (const GwyFileDetectInfo *fileinfo,
- gboolean only_name,
- const gchar *name);
-static gboolean img_export_export (GwyContainer *data,
- const gchar *filename,
- GwyRunType mode,
- GError **error,
- const gchar *name);
-static void img_export_free_env (ImgExportEnv *env);
-static void img_export_load_args (GwyContainer *container,
- ImgExportArgs *args);
-static void img_export_save_args (GwyContainer *container,
- ImgExportArgs *args);
-static gchar* scalebar_auto_length (GwyDataField *dfield,
- gdouble *p);
-static gdouble inset_length_ok (GwyDataField *dfield,
- const gchar *inset_length);
+static gboolean module_register (void);
+static gint img_export_detect (const GwyFileDetectInfo *fileinfo,
+ gboolean only_name,
+ const gchar *name);
+static gboolean img_export_export (GwyContainer *data,
+ const gchar *filename,
+ GwyRunType mode,
+ GError **error,
+ const gchar *name);
+static void img_export_free_env (ImgExportEnv *env);
+static void select_a_real_font (ImgExportArgs *args,
+ GtkWidget *widget);
+static void img_export_load_args(GwyContainer *container,
+ ImgExportArgs *args);
+static void img_export_save_args(GwyContainer *container,
+ ImgExportArgs *args);
+static gchar* scalebar_auto_length(GwyDataField *dfield,
+ gdouble *p);
+static gdouble inset_length_ok (GwyDataField *dfield,
+ const gchar *inset_length);
#ifdef HAVE_PNG
static gboolean write_image_png16(ImgExportArgs *args,
@@ -514,7 +513,7 @@ static GwyModuleInfo module_info = {
"Export to some formats relies on GDK and other libraries thus may "
"be installation-dependent."),
"Yeti <yeti at gwyddion.net>",
- "2.1",
+ "2.4",
"David Nečas (Yeti)",
"2014",
};
@@ -933,12 +932,12 @@ find_hruler_ticks(const ImgExportArgs *args, ImgExportSizes *sizes,
gwy_debug("unit '%s'", vf->units);
offset /= vf->magnitude;
real /= vf->magnitude;
- format_layout_numeric(args, layout, &logical1, s,
- "%.*f", vf->precision, -real);
- gwy_debug("right '%s'", s->str);
format_layout_numeric(args, layout, &logical2, s,
"%.*f %s", vf->precision, offset, vf->units);
gwy_debug("first '%s'", s->str);
+ format_layout_numeric(args, layout, &logical1, s,
+ "%.*f", vf->precision, real + offset);
+ gwy_debug("right '%s'", s->str);
height = MAX(logical1.height/pangoscale, logical2.height/pangoscale);
sizes->hruler_label_height = height;
@@ -1177,10 +1176,13 @@ find_fmscale_ticks(const ImgExportArgs *args, ImgExportSizes *sizes,
measure_fmscale_label(vf, args, sizes, layout, s);
height = sizes->fmruler_label_height;
+ /* We can afford somewhat denser ticks for adaptive mapping. However,
+ * when there are labels we definitely want the distance to the next tick
+ * to be much larger than to the correct tick. */
if (env->fm_rangetype == GWY_LAYER_BASIC_RANGE_ADAPT)
- n = CLAMP(GWY_ROUND(size/height), 1, 36);
+ n = CLAMP(GWY_ROUND(1.2*size/height), 1, 40);
else
- n = CLAMP(GWY_ROUND(size/height), 1, 12);
+ n = CLAMP(GWY_ROUND(0.7*size/height), 1, 15);
gwy_debug("nticks %u", n);
ticks->step = real/n;
@@ -1200,6 +1202,7 @@ find_fmscale_ticks(const ImgExportArgs *args, ImgExportSizes *sizes,
}
}
gwy_debug("base %g, step %g", ticks->base, ticks->step);
+ gwy_debug("tick distance/label height ratio %g", size/n/height);
if (args->fix_fmscale_precision) {
/* Do everything as normal and override the precision at the end. */
@@ -1292,7 +1295,8 @@ measure_title(const ImgExportArgs *args, ImgExportSizes *sizes,
if (!s->len)
format_layout(layout, &logical, s, "%s", env->title);
- /* Straight. This is rotated according to the type when drawing. */
+ /* Straight. This is rotated according to the type when drawing.
+ * NB: rect->h can be negative; the measurement must deal with it. */
gap = fs*args->title_gap;
if (args->title_type != IMGEXPORT_TITLE_FMSCALE)
gap = MAX(gap, 0.0);
@@ -1482,7 +1486,7 @@ calculate_sizes(const ImgExportArgs *args,
/* Canvas */
sizes->canvas.w = sizes->fmruler.x + sizes->fmruler.w + borderw;
if (args->title_type == IMGEXPORT_TITLE_FMSCALE)
- sizes->canvas.w += sizes->title.h;
+ sizes->canvas.w += MAX(sizes->title.h, 0.0);
sizes->canvas.h = (sizes->image.y + sizes->image.h + sizes->maskkey.h
+ borderw);
@@ -1805,22 +1809,22 @@ draw_hruler(const ImgExportArgs *args,
GString *s,
cairo_t *cr)
{
+ GwySIValueFormat *vf = sizes->vf_hruler;
GwyDataField *dfield = args->env->dfield;
- gdouble xreal = gwy_data_field_get_xreal(dfield);
- gdouble xoffset = gwy_data_field_get_xoffset(dfield);
const ImgExportRect *rect = &sizes->hruler;
const RulerTicks *ticks = &sizes->hruler_ticks;
- GwySIValueFormat *vf = sizes->vf_hruler;
const GwyRGBA *color = &args->linetext_color;
gdouble lw = sizes->sizes.line_width;
gdouble tl = sizes->sizes.tick_length;
- gdouble x, bs, scale, ximg;
+ gdouble x, bs, scale, ximg, xreal, xoffset;
gboolean units_placed = FALSE;
if (args->xytype != IMGEXPORT_LATERAL_RULERS)
return;
- scale = (rect->w - lw)/(xreal/vf->magnitude);
+ xreal = gwy_data_field_get_xreal(dfield)/vf->magnitude;
+ xoffset = gwy_data_field_get_xoffset(dfield)/vf->magnitude;
+ scale = (rect->w - lw)/xreal;
bs = ticks->step*ticks->base;
cairo_save(cr);
@@ -1869,21 +1873,21 @@ draw_vruler(const ImgExportArgs *args,
GString *s,
cairo_t *cr)
{
+ GwySIValueFormat *vf = sizes->vf_vruler;
GwyDataField *dfield = args->env->dfield;
- gdouble yreal = gwy_data_field_get_yreal(dfield);
- gdouble yoffset = gwy_data_field_get_yoffset(dfield);
const ImgExportRect *rect = &sizes->vruler;
const RulerTicks *ticks = &sizes->vruler_ticks;
- GwySIValueFormat *vf = sizes->vf_vruler;
const GwyRGBA *color = &args->linetext_color;
gdouble lw = sizes->sizes.line_width;
gdouble tl = sizes->sizes.tick_length;
- gdouble y, bs, scale, yimg;
+ gdouble y, bs, scale, yimg, yreal, yoffset;
if (args->xytype != IMGEXPORT_LATERAL_RULERS)
return;
- scale = (rect->h - lw)/(yreal/vf->magnitude);
+ yreal = gwy_data_field_get_yreal(dfield)/vf->magnitude;
+ yoffset = gwy_data_field_get_yoffset(dfield)/vf->magnitude;
+ scale = (rect->h - lw)/yreal;
bs = ticks->step*ticks->base;
cairo_save(cr);
@@ -2162,9 +2166,8 @@ draw_fmruler(const ImgExportArgs *args,
gdouble lw = sizes->sizes.line_width;
gdouble tl = sizes->sizes.tick_length;
gdouble uw = sizes->fmruler_units_width;
- gdouble z, bs, scale, yimg, min, max, real, w;
- PangoRectangle logical;
- gboolean inverted = env->fm_inverted;
+ gdouble z, bs, scale, yimg, min, max, real, w, yoff;
+ PangoRectangle logical, ink;
GArray *mticks;
guint nticks, i;
@@ -2200,8 +2203,10 @@ draw_fmruler(const ImgExportArgs *args,
format_layout_numeric(args, layout, &logical, s,
"%.*f %s", vf->precision, max, vf->units);
w = logical.width/pangoscale;
+ pango_layout_get_extents(layout, &ink, NULL);
+ yoff = (logical.height - (ink.height + ink.y))/pangoscale;
gwy_debug("max '%s' (%g x %g)", s->str, w, logical.height/pangoscale);
- cairo_move_to(cr, rect->w - w, lw);
+ cairo_move_to(cr, rect->w - w, lw - 0.5*yoff);
pango_cairo_show_layout(cr, layout);
format_layout_numeric(args, layout, &logical, s,
"%.*f", vf->precision, min);
@@ -2245,14 +2250,16 @@ draw_fmruler(const ImgExportArgs *args,
cairo_set_line_width(cr, lw);
for (i = 0; i < nticks; i++) {
z = g_array_index(mticks, gdouble, i);
- if (inverted)
- yimg = (z - min)*scale + lw;
- else
- yimg = (max - z)*scale + lw;
-
- if (yimg <= sizes->fmruler_label_height + 4.0*lw
- || yimg + sizes->fmruler_label_height + 4.0*lw >= rect->h)
- continue;
+ yimg = (max - z)*scale + lw;
+ if (env->fm_rangetype == GWY_LAYER_BASIC_RANGE_ADAPT) {
+ if (yimg <= lw || yimg + lw >= rect->h)
+ continue;
+ }
+ else {
+ if (yimg <= sizes->fmruler_label_height + 4.0*lw
+ || yimg + sizes->fmruler_label_height + 4.0*lw >= rect->h)
+ continue;
+ }
cairo_move_to(cr, 0.0, yimg);
cairo_rel_line_to(cr, tl, 0.0);
@@ -2271,12 +2278,7 @@ draw_fmruler(const ImgExportArgs *args,
for (i = 0; i < nticks; i++) {
z = g_array_index(mticks, gdouble, i);
z = fixzero(z);
-
- if (inverted)
- yimg = (z - min)*scale + lw;
- else
- yimg = (max - z)*scale + lw;
-
+ yimg = (max - z)*scale + lw;
if (yimg <= sizes->fmruler_label_height + 4.0*lw
|| yimg + 2.0*sizes->fmruler_label_height + 4.0*lw >= rect->h)
continue;
@@ -2284,7 +2286,7 @@ draw_fmruler(const ImgExportArgs *args,
format_layout_numeric(args, layout, &logical, s,
"%.*f", vf->precision, z);
w = logical.width/pangoscale;
- cairo_move_to(cr, rect->w - uw - w, yimg);
+ cairo_move_to(cr, rect->w - uw - w, yimg - 0.5*yoff);
pango_cairo_show_layout(cr, layout);
};
cairo_restore(cr);
@@ -2979,46 +2981,60 @@ create_colour_control(GtkTable *table,
ImgExportColourControls *colourctrl)
{
GtkWidget *label, *colour, *setblack, *setwhite, *hbox;
+ GtkSizeGroup *coloursize;
+ gboolean do_unref = FALSE;
gint ncols;
- label = gtk_label_new_with_mnemonic(name);
- gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_table_attach(table, label,
- 0, 1, row, row+1, GTK_FILL, 0, 0, 0);
-
- hbox = gtk_hbox_new(TRUE, 4);
+ hbox = gtk_hbox_new(FALSE, 2);
g_object_get(table, "n-columns", &ncols, NULL);
gtk_table_attach(table, hbox,
- 1, ncols, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, ncols-1, row, row+1, GTK_FILL, 0, 0, 0);
+
+ coloursize = g_object_get_data(G_OBJECT(table), "colour-size-group");
+ if (!coloursize) {
+ coloursize = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
+ g_object_set_data(G_OBJECT(table), "colour-size-group", coloursize);
+ do_unref = TRUE;
+ }
+
+ label = gtk_label_new_with_mnemonic(name);
+ gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
colour = gwy_color_button_new_with_color(target);
- gtk_label_set_mnemonic_widget(GTK_LABEL(label), colour);
- gwy_color_button_set_use_alpha(GWY_COLOR_BUTTON(colour), FALSE);
- gtk_box_pack_start(GTK_BOX(hbox), colour, TRUE, TRUE, 0);
- g_object_set_data(G_OBJECT(colour), "target", target);
- g_signal_connect_swapped(colour, "clicked",
- G_CALLBACK(select_colour), controls);
+
+ setwhite = gtk_button_new_with_label(_("White"));
+ gtk_size_group_add_widget(coloursize, setwhite);
+ gtk_box_pack_end(GTK_BOX(hbox), setwhite, FALSE, FALSE, 0);
+ g_object_set_data(G_OBJECT(setwhite), "target", target);
+ g_object_set_data(G_OBJECT(setwhite), "settocolour", (gpointer)&white);
+ g_object_set_data(G_OBJECT(setwhite), "colourbutton", colour);
+ g_signal_connect_swapped(setwhite, "clicked",
+ G_CALLBACK(set_colour_to), controls);
setblack = gtk_button_new_with_label(_("Black"));
- gtk_box_pack_start(GTK_BOX(hbox), setblack, TRUE, TRUE, 0);
+ gtk_size_group_add_widget(coloursize, setblack);
+ gtk_box_pack_end(GTK_BOX(hbox), setblack, FALSE, FALSE, 0);
g_object_set_data(G_OBJECT(setblack), "target", target);
g_object_set_data(G_OBJECT(setblack), "settocolour", (gpointer)&black);
g_object_set_data(G_OBJECT(setblack), "colourbutton", colour);
g_signal_connect_swapped(setblack, "clicked",
G_CALLBACK(set_colour_to), controls);
- setwhite = gtk_button_new_with_label(_("White"));
- gtk_box_pack_start(GTK_BOX(hbox), setwhite, TRUE, TRUE, 0);
- g_object_set_data(G_OBJECT(setwhite), "target", target);
- g_object_set_data(G_OBJECT(setwhite), "settocolour", (gpointer)&white);
- g_object_set_data(G_OBJECT(setwhite), "colourbutton", colour);
- g_signal_connect_swapped(setwhite, "clicked",
- G_CALLBACK(set_colour_to), controls);
+ gtk_label_set_mnemonic_widget(GTK_LABEL(label), colour);
+ gtk_size_group_add_widget(coloursize, colour);
+ gwy_color_button_set_use_alpha(GWY_COLOR_BUTTON(colour), FALSE);
+ gtk_box_pack_end(GTK_BOX(hbox), colour, FALSE, FALSE, 0);
+ g_object_set_data(G_OBJECT(colour), "target", target);
+ g_signal_connect_swapped(colour, "clicked",
+ G_CALLBACK(select_colour), controls);
colourctrl->label = label;
colourctrl->button = colour;
colourctrl->setblack = setblack;
colourctrl->setwhite = setwhite;
+
+ if (do_unref)
+ g_object_unref(coloursize);
}
static void
@@ -3029,7 +3045,7 @@ create_basic_controls(ImgExportControls *controls)
gboolean is_vector = !!env->format->write_vector;
gboolean can_transp = !!env->format->supports_transparency;
const gchar *sizeunit;
- GtkWidget *table, *spin, *label;
+ GtkWidget *table, *spin;
GCallback width_cb, height_cb;
gint row = 0, digits;
@@ -3041,7 +3057,7 @@ create_basic_controls(ImgExportControls *controls)
gtk_table_attach(GTK_TABLE(table),
gwy_label_new_header(_("Physical Dimensions")),
- 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
if (is_vector) {
@@ -3050,21 +3066,19 @@ create_basic_controls(ImgExportControls *controls)
controls->pxwidth = gtk_adjustment_new(args->pxwidth, 0.01, 254.0,
0.001, 0.1, 0);
- spin = gwy_table_attach_spinbutton(table, row, _("Pi_xel size:"), "mm",
- controls->pxwidth);
+ spin = gwy_table_attach_adjbar(table, row++, _("Pi_xel size:"), "mm",
+ controls->pxwidth, GWY_HSCALE_LOG);
gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 3);
g_signal_connect_swapped(controls->pxwidth, "value-changed",
G_CALLBACK(pxwidth_changed), controls);
- row++;
controls->ppi = gtk_adjustment_new(ppi, 0.1, 2540.0, 0.01, 100.0, 0);
- spin = gwy_table_attach_spinbutton(table, row,
- _("Pixels per _inch:"), NULL,
- controls->ppi);
+ spin = gwy_table_attach_adjbar(table, row++,
+ _("Pixels per _inch:"), NULL,
+ controls->ppi, GWY_HSCALE_LOG);
gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 2);
g_signal_connect_swapped(controls->ppi, "value-changed",
G_CALLBACK(ppi_changed), controls);
- row++;
sizeunit = "mm";
digits = 1;
@@ -3085,12 +3099,11 @@ create_basic_controls(ImgExportControls *controls)
digits = 0;
controls->zoom = gtk_adjustment_new(args->zoom, minzoom, maxzoom,
0.001, 1.0, 0);
- spin = gwy_table_attach_spinbutton(table, row,
- _("_Zoom:"), NULL, controls->zoom);
+ spin = gwy_table_attach_adjbar(table, row++, _("_Zoom:"), NULL,
+ controls->zoom, GWY_HSCALE_LOG);
gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 3);
g_signal_connect_swapped(controls->zoom, "value-changed",
G_CALLBACK(zoom_changed), controls);
- row++;
controls->width = gtk_adjustment_new(w, 2.0, 16384.0, 1.0, 10.0, 0);
controls->height = gtk_adjustment_new(h, 2.0, 16384.0, 1.0, 10.0, 0);
@@ -3098,98 +3111,85 @@ create_basic_controls(ImgExportControls *controls)
height_cb = G_CALLBACK(height_changed_pixmap);
}
- spin = gwy_table_attach_spinbutton(table, row, _("_Width:"), sizeunit,
- controls->width);
+ spin = gwy_table_attach_adjbar(table, row++, _("_Width:"), sizeunit,
+ controls->width, GWY_HSCALE_LOG);
gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), digits);
g_signal_connect_swapped(controls->width, "value-changed",
G_CALLBACK(width_cb), controls);
- row++;
- spin = gwy_table_attach_spinbutton(table, row, _("_Height:"), sizeunit,
- controls->height);
+ spin = gwy_table_attach_adjbar(table, row++, _("_Height:"), sizeunit,
+ controls->height, GWY_HSCALE_LOG);
gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), digits);
g_signal_connect_swapped(controls->height, "value-changed",
height_cb, controls);
- row++;
gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
gtk_table_attach(GTK_TABLE(table),
gwy_label_new_header(_("Parameters")),
- 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
- label = gtk_label_new_with_mnemonic(_("_Font:"));
- gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_table_attach(GTK_TABLE(table), label,
- 0, 1, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
-
controls->font = gtk_font_button_new();
- gtk_label_set_mnemonic_widget(GTK_LABEL(label), controls->font);
gtk_font_button_set_show_size(GTK_FONT_BUTTON(controls->font), FALSE);
gtk_font_button_set_use_font(GTK_FONT_BUTTON(controls->font), TRUE);
update_selected_font(controls);
- gtk_table_attach(GTK_TABLE(table), controls->font,
- 1, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ gwy_table_attach_adjbar(table, row++, _("_Font:"), NULL,
+ GTK_OBJECT(controls->font),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
g_signal_connect_swapped(controls->font, "font-set",
G_CALLBACK(font_changed), controls);
- row++;
controls->font_size = gtk_adjustment_new(args->sizes.font_size,
1.0, 1024.0, 1.0, 10.0, 0);
- spin = gwy_table_attach_spinbutton(GTK_WIDGET(table), row,
- _("_Font size:"), NULL,
- controls->font_size);
+ spin = gwy_table_attach_adjbar(GTK_WIDGET(table), row++,
+ _("_Font size:"), NULL,
+ controls->font_size, GWY_HSCALE_LOG);
gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 1);
g_signal_connect_swapped(controls->font_size, "value-changed",
G_CALLBACK(font_size_changed), controls);
- row++;
controls->line_width = gtk_adjustment_new(args->sizes.line_width,
0.0, 16.0, 0.01, 1.0, 0);
- spin = gwy_table_attach_spinbutton(GTK_WIDGET(table), row,
- _("Line t_hickness:"), NULL,
- controls->line_width);
+ spin = gwy_table_attach_adjbar(GTK_WIDGET(table), row++,
+ _("Line t_hickness:"), NULL,
+ controls->line_width, GWY_HSCALE_SQRT);
gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 2);
g_signal_connect_swapped(controls->line_width, "value-changed",
G_CALLBACK(line_width_changed), controls);
- row++;
controls->outline_width = gtk_adjustment_new(args->sizes.outline_width,
0.0, 16.0, 0.01, 1.0, 0);
- spin = gwy_table_attach_spinbutton(GTK_WIDGET(table), row,
- _("O_utline thickness:"), NULL,
- controls->outline_width);
+ spin = gwy_table_attach_adjbar(GTK_WIDGET(table), row++,
+ _("O_utline thickness:"), NULL,
+ controls->outline_width, GWY_HSCALE_SQRT);
gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 2);
g_signal_connect_swapped(controls->outline_width, "value-changed",
G_CALLBACK(outline_width_changed), controls);
- row++;
controls->border_width = gtk_adjustment_new(args->sizes.border_width,
0.0, 1024.0, 0.1, 1.0, 0);
- spin = gwy_table_attach_spinbutton(GTK_WIDGET(table), row,
- _("_Border width:"), NULL,
- controls->border_width);
+ spin = gwy_table_attach_adjbar(GTK_WIDGET(table), row++,
+ _("_Border width:"), NULL,
+ controls->border_width, GWY_HSCALE_SQRT);
gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 1);
g_signal_connect_swapped(controls->border_width, "value-changed",
G_CALLBACK(border_width_changed), controls);
- row++;
controls->tick_length = gtk_adjustment_new(args->sizes.tick_length,
0.0, 1024.0, 0.1, 1.0, 0);
- spin = gwy_table_attach_spinbutton(GTK_WIDGET(table), row,
- _("_Tick length:"), NULL,
- controls->tick_length);
+ spin = gwy_table_attach_adjbar(GTK_WIDGET(table), row++,
+ _("_Tick length:"), NULL,
+ controls->tick_length, GWY_HSCALE_SQRT);
gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 1);
g_signal_connect_swapped(controls->tick_length, "value-changed",
G_CALLBACK(tick_length_changed), controls);
- row++;
controls->scale_font
= gtk_check_button_new_with_mnemonic(_("Tie sizes to _data pixels"));
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls->scale_font),
args->scale_font);
gtk_table_attach(GTK_TABLE(table), controls->scale_font,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect_swapped(controls->scale_font, "toggled",
G_CALLBACK(scale_font_changed), controls);
row++;
@@ -3200,7 +3200,7 @@ create_basic_controls(ImgExportControls *controls)
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls->decomma),
args->decomma);
gtk_table_attach(GTK_TABLE(table), controls->decomma,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect_swapped(controls->decomma, "toggled",
G_CALLBACK(decimal_comma_changed), controls);
row++;
@@ -3208,13 +3208,12 @@ create_basic_controls(ImgExportControls *controls)
gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
gtk_table_attach(GTK_TABLE(table),
gwy_label_new_header(_("Colors")),
- 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
create_colour_control(GTK_TABLE(table), row++,
_("_Line and text color:"), &args->linetext_color,
controls, &controls->linetext_colour);
- row++;
if (can_transp) {
controls->transparent_bg
@@ -3222,7 +3221,7 @@ create_basic_controls(ImgExportControls *controls)
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls->transparent_bg),
args->transparent_bg);
gtk_table_attach(GTK_TABLE(table), controls->transparent_bg,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect_swapped(controls->transparent_bg, "toggled",
G_CALLBACK(transparent_bg_changed), controls);
row++;
@@ -3231,7 +3230,6 @@ create_basic_controls(ImgExportControls *controls)
create_colour_control(GTK_TABLE(table), row++,
_("_Background color:"), &args->bg_color,
controls, &controls->bg_colour);
- row++;
update_basic_sensitivity(controls);
}
@@ -3248,9 +3246,8 @@ update_lateral_sensitivity(ImgExportControls *controls)
update_colour_controls_sensitivity(&controls->inset_outline_colour,
insetsens);
gwy_table_hscale_set_sensitive(controls->inset_opacity, insetsens);
- gtk_widget_set_sensitive(controls->inset_length_label, insetsens);
- gtk_widget_set_sensitive(controls->inset_length, insetsens);
- gtk_widget_set_sensitive(controls->inset_length_auto, insetsens);
+ gwy_table_hscale_set_sensitive(GTK_OBJECT(controls->inset_length),
+ insetsens);
gtk_widget_set_sensitive(controls->inset_draw_ticks, insetsens);
gtk_widget_set_sensitive(controls->inset_draw_label, insetsens);
gtk_widget_set_sensitive(controls->inset_draw_text_above, insetsens);
@@ -3277,17 +3274,12 @@ update_value_sensitivity(ImgExportControls *controls)
gwy_table_hscale_set_sensitive(controls->fmscale_gap, fmsens);
gwy_table_hscale_set_sensitive(controls->fmscale_precision, fmsens);
- gtk_widget_set_sensitive(gwy_table_hscale_get_check(controls->fmscale_precision),
- fmsens);
gwy_table_hscale_set_sensitive(controls->kilo_threshold,
- fmsens || titlesens);
- gtk_widget_set_sensitive(gwy_table_hscale_get_check(controls->kilo_threshold),
- fmsens || titlesens);
+ (fmsens || titlesens));
gwy_table_hscale_set_sensitive(controls->title_gap, titlesens);
gtk_widget_set_sensitive(controls->draw_frame, framesens);
gtk_widget_set_sensitive(controls->draw_maskkey, masksens);
- gtk_widget_set_sensitive(controls->mask_key, maskkeysens);
- gtk_widget_set_sensitive(controls->mask_key_label, maskkeysens);
+ gwy_table_hscale_set_sensitive(GTK_OBJECT(controls->mask_key), maskkeysens);
gwy_table_hscale_set_sensitive(controls->maskkey_gap, maskkeysens);
}
@@ -3408,72 +3400,85 @@ inset_length_changed(ImgExportControls *controls,
update_preview(controls);
}
-static GtkObject*
-attach_gap(GtkWidget *table,
- const gchar *label,
- gint row,
- gdouble max,
- gdouble value)
-{
- GtkWidget *widget;
- GtkObject *adj;
-
- adj = gtk_adjustment_new(value, 0.0, max, 0.01, 0.1, 0);
- gwy_table_attach_hscale(table, row, label, NULL, adj, GWY_HSCALE_DEFAULT);
-
- /* Make the hscale take more columns to accommodate for inset position
- * controls. */
- widget = gwy_table_get_child_widget(table, row, 2);
- g_object_ref(widget);
- gtk_container_remove(GTK_CONTAINER(table), widget);
- gtk_table_attach(GTK_TABLE(table), widget,
- 3, 4, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
- g_object_unref(widget);
-
- widget = gwy_table_get_child_widget(table, row, 1);
- g_object_ref(widget);
- gtk_container_remove(GTK_CONTAINER(table), widget);
- gtk_table_attach(GTK_TABLE(table), widget,
- 1, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
- g_object_unref(widget);
-
- return adj;
-}
-
static void
inset_pos_add(ImgExportControls *controls,
- GtkTable *table,
- InsetPosType pos,
- gint col, gint row)
+ GtkTable *table, gint row, gint col,
+ InsetPosType pos)
{
- GtkWidget *button;
+ GtkWidget *button, *align;
+ align = gtk_alignment_new(0.5, 0.5, 0.0, 0.0);
+ gtk_table_attach(table, align, col, col+1, row, row+1, GTK_FILL, 0, 0, 0);
button = gtk_radio_button_new_with_label(controls->inset_pos, NULL);
if (pos == controls->args->inset_pos)
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE);
controls->inset_pos = gtk_radio_button_get_group(GTK_RADIO_BUTTON(button));
g_object_set_qdata(G_OBJECT(button), controls->rb_quark,
GUINT_TO_POINTER(pos));
- gtk_table_attach(table, button, col, col+1, row, row+1, 0, 0, 0, 0);
+ gtk_container_add(GTK_CONTAINER(align), button);
g_signal_connect_swapped(button, "clicked",
G_CALLBACK(inset_pos_changed), controls);
}
+static GtkWidget*
+create_inset_pos_table(ImgExportControls *controls)
+{
+ GtkWidget *label;
+ GtkTable *table;
+
+ table = GTK_TABLE(gtk_table_new(3, 4, FALSE));
+ gtk_table_set_row_spacings(table, 2);
+ gtk_table_set_col_spacings(table, 6);
+
+ controls->inset_pos_label[0] = label = gwy_label_new_header(_("Placement"));
+ gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
+ gtk_table_attach(table, label, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+
+ controls->inset_pos_label[1] = label = gtk_label_new(_("left"));
+ gtk_table_attach(table, label, 1, 2, 0, 1, GTK_FILL, 0, 0, 0);
+
+ controls->inset_pos_label[2] = label = gtk_label_new(_("center"));
+ gtk_table_attach(table, label, 2, 3, 0, 1, GTK_FILL, 0, 0, 0);
+
+ controls->inset_pos_label[3] = label = gtk_label_new(_("right"));
+ gtk_table_attach(table, label, 3, 4, 0, 1, GTK_FILL, 0, 0, 0);
+
+ controls->rb_quark = g_quark_from_string("gwy-radiobuttons-key");
+
+ controls->inset_pos_label[4] = label = gtk_label_new(_("top"));
+ gtk_misc_set_alignment(GTK_MISC(label), 1.0, 0.5);
+ gtk_table_attach(table, label, 0, 1, 1, 2, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+
+ inset_pos_add(controls, table, 1, 1, INSET_POS_TOP_LEFT);
+ inset_pos_add(controls, table, 1, 2, INSET_POS_TOP_CENTER);
+ inset_pos_add(controls, table, 1, 3, INSET_POS_TOP_RIGHT);
+
+ controls->inset_pos_label[5] = label = gtk_label_new(_("bottom"));
+ gtk_misc_set_alignment(GTK_MISC(label), 1.0, 0.5);
+ gtk_table_attach(table, label, 0, 1, 2, 3, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+
+ inset_pos_add(controls, table, 2, 1, INSET_POS_BOTTOM_LEFT);
+ inset_pos_add(controls, table, 2, 2, INSET_POS_BOTTOM_CENTER);
+ inset_pos_add(controls, table, 2, 3, INSET_POS_BOTTOM_RIGHT);
+
+ return GTK_WIDGET(table);
+}
+
static void
create_lateral_controls(ImgExportControls *controls)
{
ImgExportArgs *args = controls->args;
- GtkWidget *table, *label;
+ GtkWidget *table, *label, *button, *postable;
gint row = 0;
- table = controls->table_lateral = gtk_table_new(18, 4, FALSE);
+ table = controls->table_lateral = gtk_table_new(15, 3, FALSE);
gtk_container_set_border_width(GTK_CONTAINER(table), 4);
gtk_table_set_row_spacings(GTK_TABLE(table), 2);
gtk_table_set_col_spacings(GTK_TABLE(table), 6);
label = gwy_label_new_header(_("Lateral scale"));
gtk_table_attach(GTK_TABLE(table), label, 0, 3, row, row+1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ GTK_FILL, 0, 0, 0);
row++;
controls->xytype
@@ -3481,116 +3486,76 @@ create_lateral_controls(ImgExportControls *controls)
G_CALLBACK(xytype_changed), controls,
args->xytype);
row = gwy_radio_buttons_attach_to_table(controls->xytype, GTK_TABLE(table),
- 3, row);
-
- controls->inset_length_label
- = label = gtk_label_new_with_mnemonic(_("_Length:"));
- gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_table_attach(GTK_TABLE(table), label, 0, 1, row, row+1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 2, row);
controls->inset_length = gtk_entry_new();
gtk_entry_set_width_chars(GTK_ENTRY(controls->inset_length), 8);
gtk_entry_set_text(GTK_ENTRY(controls->inset_length),
controls->args->inset_length);
gwy_widget_set_activate_on_unfocus(controls->inset_length, TRUE);
- gtk_label_set_mnemonic_widget(GTK_LABEL(label), controls->inset_length);
+ gwy_table_attach_adjbar(table, row, _("_Length:"), NULL,
+ GTK_OBJECT(controls->inset_length),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
g_signal_connect_swapped(controls->inset_length, "activate",
G_CALLBACK(inset_length_changed), controls);
- gtk_table_attach(GTK_TABLE(table), controls->inset_length,
- 1, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
- controls->inset_length_auto = gtk_button_new_with_mnemonic(_("_Auto"));
- g_signal_connect_swapped(controls->inset_length_auto, "clicked",
+ button = gtk_button_new_with_mnemonic(_("_Auto"));
+ g_object_set_data(G_OBJECT(controls->inset_length), "units", button);
+ g_signal_connect_swapped(button, "clicked",
G_CALLBACK(inset_length_set_auto), controls);
- gtk_table_attach(GTK_TABLE(table), controls->inset_length_auto,
- 3, 4, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ gtk_table_attach(GTK_TABLE(table), button,
+ 2, 3, row, row+1, GTK_FILL, 0, 0, 0);
row++;
gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
- controls->inset_pos_label[0] = label = gwy_label_new_header(_("Placement"));
- gtk_table_attach(GTK_TABLE(table), label, 0, 1, row, row+1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
-
- controls->inset_pos_label[1] = label = gtk_label_new(_("left"));
- gtk_table_attach(GTK_TABLE(table), label, 1, 2, row, row+1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
-
- controls->inset_pos_label[2] = label = gtk_label_new(_("center"));
- gtk_table_attach(GTK_TABLE(table), label, 2, 3, row, row+1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
-
- controls->inset_pos_label[3] = label = gtk_label_new(_("right"));
- gtk_table_attach(GTK_TABLE(table), label, 3, 4, row, row+1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
- row++;
-
- controls->inset_pos_label[4] = label = gtk_label_new(_("top"));
- gtk_misc_set_alignment(GTK_MISC(label), 1.0, 0.5);
- gtk_table_attach(GTK_TABLE(table), label, 0, 1, row, row+1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
-
- controls->rb_quark = g_quark_from_string("gwy-radiobuttons-key");
-
- inset_pos_add(controls, GTK_TABLE(table), INSET_POS_TOP_LEFT, 1, row);
- inset_pos_add(controls, GTK_TABLE(table), INSET_POS_TOP_CENTER, 2, row);
- inset_pos_add(controls, GTK_TABLE(table), INSET_POS_TOP_RIGHT, 3, row);
- row++;
-
- controls->inset_pos_label[5] = label = gtk_label_new(_("bottom"));
- gtk_misc_set_alignment(GTK_MISC(label), 1.0, 0.5);
- gtk_table_attach(GTK_TABLE(table), label, 0, 1, row, row+1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
-
- inset_pos_add(controls, GTK_TABLE(table), INSET_POS_BOTTOM_LEFT, 1, row);
- inset_pos_add(controls, GTK_TABLE(table), INSET_POS_BOTTOM_CENTER, 2, row);
- inset_pos_add(controls, GTK_TABLE(table), INSET_POS_BOTTOM_RIGHT, 3, row);
+ postable = create_inset_pos_table(controls);
+ gtk_table_attach(GTK_TABLE(table), postable,
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
-
- controls->inset_xgap = attach_gap(table, _("Hori_zontal gap:"), row, 4.0,
- args->inset_xgap);
+ controls->inset_xgap = gtk_adjustment_new(args->inset_xgap,
+ 0.0, 4.0, 0.01, 0.1, 0);
+ gwy_table_attach_adjbar(table, row++, _("Hori_zontal gap:"), NULL,
+ controls->inset_xgap, GWY_HSCALE_LINEAR);
g_signal_connect_swapped(controls->inset_xgap, "value-changed",
G_CALLBACK(inset_xgap_changed), controls);
- row++;
- controls->inset_ygap = attach_gap(table, _("_Vertical gap:"), row, 2.0,
- args->inset_ygap);
+ controls->inset_ygap = gtk_adjustment_new(args->inset_ygap,
+ 0.0, 2.0, 0.01, 0.1, 0);
+ gwy_table_attach_adjbar(table, row++, _("_Vertical gap:"), NULL,
+ controls->inset_ygap, GWY_HSCALE_LINEAR);
g_signal_connect_swapped(controls->inset_ygap, "value-changed",
G_CALLBACK(inset_ygap_changed), controls);
- row++;
gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
label = gwy_label_new_header(_("Options"));
- gtk_table_attach(GTK_TABLE(table), label, 0, 3, row, row+1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ gtk_table_attach(GTK_TABLE(table), label, 0, 2, row, row+1,
+ GTK_FILL, 0, 0, 0);
row++;
create_colour_control(GTK_TABLE(table), row++,
_("Colo_r:"), &args->inset_color,
controls, &controls->inset_colour);
- row++;
create_colour_control(GTK_TABLE(table), row++,
_("Out_line color:"), &args->inset_outline_color,
controls, &controls->inset_outline_colour);
- row++;
- controls->inset_opacity = attach_gap(table, _("O_pacity:"), row, 1.0,
- args->inset_color.a);
+ controls->inset_opacity = gtk_adjustment_new(args->inset_color.a,
+ 0.0, 1.0, 0.001, 0.1, 0);
+ gwy_table_attach_adjbar(table, row++, _("O_pacity:"), NULL,
+ controls->inset_opacity, GWY_HSCALE_LINEAR);
g_signal_connect_swapped(controls->inset_opacity, "value-changed",
G_CALLBACK(inset_opacity_changed), controls);
- row++;
gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
-
controls->inset_draw_ticks
= gtk_check_button_new_with_mnemonic(_("Draw _ticks"));
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls->inset_draw_ticks),
args->inset_draw_ticks);
gtk_table_attach(GTK_TABLE(table), controls->inset_draw_ticks,
- 0, 4, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect_swapped(controls->inset_draw_ticks, "toggled",
G_CALLBACK(inset_draw_ticks_changed), controls);
row++;
@@ -3600,7 +3565,7 @@ create_lateral_controls(ImgExportControls *controls)
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls->inset_draw_label),
args->inset_draw_label);
gtk_table_attach(GTK_TABLE(table), controls->inset_draw_label,
- 0, 4, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect_swapped(controls->inset_draw_label, "toggled",
G_CALLBACK(inset_draw_label_changed), controls);
row++;
@@ -3610,7 +3575,7 @@ create_lateral_controls(ImgExportControls *controls)
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls->inset_draw_text_above),
args->inset_draw_text_above);
gtk_table_attach(GTK_TABLE(table), controls->inset_draw_text_above,
- 0, 4, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect_swapped(controls->inset_draw_text_above, "toggled",
G_CALLBACK(inset_draw_text_above_changed),
controls);
@@ -3771,13 +3736,13 @@ create_value_controls(ImgExportControls *controls)
gtk_table_set_col_spacings(GTK_TABLE(table), 6);
gtk_table_attach(GTK_TABLE(table), gwy_label_new_header(_("Image")),
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
row++;
label = gtk_label_new_with_mnemonic(_("_Interpolation type:"));
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
gtk_table_attach(GTK_TABLE(table), label,
- 0, 1, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 1, row, row+1, GTK_FILL, 0, 0, 0);
if (controls->args->env->format->write_vector) {
/* Vector formats can only handle these two. */
@@ -3800,14 +3765,14 @@ create_value_controls(ImgExportControls *controls)
}
gtk_label_set_mnemonic_widget(GTK_LABEL(label), controls->interpolation);
gtk_table_attach(GTK_TABLE(table), controls->interpolation,
- 1, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 1, 3, row, row+1, GTK_FILL, 0, 0, 0);
row++;
controls->draw_frame
= check = gtk_check_button_new_with_mnemonic(_("Draw _frame"));
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check), args->draw_frame);
- gtk_table_attach(GTK_TABLE(table), check, 0, 3, row, row+1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ gtk_table_attach(GTK_TABLE(table), check, 0, 2, row, row+1,
+ GTK_FILL, 0, 0, 0);
g_signal_connect_swapped(check, "toggled",
G_CALLBACK(draw_frame_changed), controls);
row++;
@@ -3816,8 +3781,8 @@ create_value_controls(ImgExportControls *controls)
= check = gtk_check_button_new_with_mnemonic(_("Draw _mask"));
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check), args->draw_mask);
gtk_widget_set_sensitive(check, !!env->mask);
- gtk_table_attach(GTK_TABLE(table), check, 0, 3, row, row+1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ gtk_table_attach(GTK_TABLE(table), check, 0, 2, row, row+1,
+ GTK_FILL, 0, 0, 0);
g_signal_connect_swapped(check, "toggled",
G_CALLBACK(draw_mask_changed), controls);
row++;
@@ -3826,40 +3791,33 @@ create_value_controls(ImgExportControls *controls)
= check = gtk_check_button_new_with_mnemonic(_("Draw mask _legend"));
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check), args->draw_maskkey);
gtk_widget_set_sensitive(check, !!env->mask && args->draw_mask);
- gtk_table_attach(GTK_TABLE(table), check, 0, 3, row, row+1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ gtk_table_attach(GTK_TABLE(table), check, 0, 2, row, row+1,
+ GTK_FILL, 0, 0, 0);
g_signal_connect_swapped(check, "toggled",
G_CALLBACK(draw_maskkey_changed), controls);
row++;
- controls->mask_key_label
- = label = gtk_label_new_with_mnemonic(_("_Label:"));
- gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_table_attach(GTK_TABLE(table), label, 0, 1, row, row+1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
-
controls->mask_key = gtk_entry_new();
gtk_entry_set_width_chars(GTK_ENTRY(controls->mask_key), 8);
gtk_entry_set_text(GTK_ENTRY(controls->mask_key), controls->args->mask_key);
gwy_widget_set_activate_on_unfocus(controls->mask_key, TRUE);
- gtk_label_set_mnemonic_widget(GTK_LABEL(label), controls->mask_key);
g_signal_connect_swapped(controls->mask_key, "activate",
G_CALLBACK(mask_key_changed), controls);
- gtk_table_attach(GTK_TABLE(table), controls->mask_key,
- 1, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ gwy_table_attach_adjbar(table, row++, _("_Label:"), NULL,
+ GTK_OBJECT(controls->mask_key), GWY_HSCALE_WIDGET);
row++;
controls->maskkey_gap = gtk_adjustment_new(args->maskkey_gap,
0.0, 2.0, 0.01, 0.1, 0);
- gwy_table_attach_hscale(table, row, _("_Vertical gap:"), NULL,
- controls->maskkey_gap, GWY_HSCALE_DEFAULT);
+ gwy_table_attach_adjbar(table, row, _("_Vertical gap:"), NULL,
+ controls->maskkey_gap, GWY_HSCALE_LINEAR);
g_signal_connect_swapped(controls->maskkey_gap, "value-changed",
G_CALLBACK(maskkey_gap_changed), controls);
row++;
gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
gtk_table_attach(GTK_TABLE(table), gwy_label_new_header(_("Value Scale")),
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
controls->ztype
@@ -3867,26 +3825,25 @@ create_value_controls(ImgExportControls *controls)
G_CALLBACK(ztype_changed), controls,
args->ztype);
row = gwy_radio_buttons_attach_to_table(controls->ztype,
- GTK_TABLE(table), 3, row);
+ GTK_TABLE(table), 2, row);
controls->fmscale_gap = gtk_adjustment_new(args->fmscale_gap,
0.0, 2.0, 0.01, 0.1, 0);
- gwy_table_attach_hscale(table, row, _("Hori_zontal gap:"), NULL,
- controls->fmscale_gap, GWY_HSCALE_DEFAULT);
+ gwy_table_attach_adjbar(table, row, _("Hori_zontal gap:"), NULL,
+ controls->fmscale_gap, GWY_HSCALE_LINEAR);
g_signal_connect_swapped(controls->fmscale_gap, "value-changed",
G_CALLBACK(fmscale_gap_changed), controls);
row++;
controls->fmscale_precision = gtk_adjustment_new(args->fmscale_precision,
0.0, 16.0, 1.0, 5.0, 0);
- gwy_table_attach_hscale(table, row, _("Fi_xed precision:"), NULL,
- controls->fmscale_precision, GWY_HSCALE_CHECK);
+ gwy_table_attach_adjbar(table, row, _("Fi_xed precision:"), NULL,
+ controls->fmscale_precision,
+ GWY_HSCALE_LINEAR | GWY_HSCALE_CHECK | GWY_HSCALE_SNAP);
controls->fix_fmscale_precision
= gwy_table_hscale_get_check(controls->fmscale_precision);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls->fix_fmscale_precision),
args->fix_fmscale_precision);
- gwy_table_hscale_set_sensitive(controls->fmscale_precision,
- args->fix_fmscale_precision);
g_signal_connect_swapped(controls->fmscale_precision, "value-changed",
G_CALLBACK(fmscale_precision_changed), controls);
g_signal_connect_swapped(controls->fix_fmscale_precision, "toggled",
@@ -3895,15 +3852,13 @@ create_value_controls(ImgExportControls *controls)
controls->kilo_threshold = gtk_adjustment_new(args->kilo_threshold,
1.0, 100000.0, 1.0, 100.0, 0);
- gwy_table_attach_hscale(table, row, _("Fixed _kilo threshold:"), NULL,
+ gwy_table_attach_adjbar(table, row, _("Fixed _kilo threshold:"), NULL,
controls->kilo_threshold,
GWY_HSCALE_CHECK | GWY_HSCALE_LOG);
controls->fix_kilo_threshold
= gwy_table_hscale_get_check(controls->kilo_threshold);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls->fix_kilo_threshold),
args->fix_kilo_threshold);
- gwy_table_hscale_set_sensitive(controls->kilo_threshold,
- args->fix_kilo_threshold);
g_signal_connect_swapped(controls->kilo_threshold, "value-changed",
G_CALLBACK(kilo_threshold_changed), controls);
g_signal_connect_swapped(controls->fix_kilo_threshold, "toggled",
@@ -3912,27 +3867,22 @@ create_value_controls(ImgExportControls *controls)
gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
gtk_table_attach(GTK_TABLE(table), gwy_label_new_header(_("Title")),
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
- label = gtk_label_new_with_mnemonic(_("Posi_tion:"));
- gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_table_attach(GTK_TABLE(table), label,
- 0, 1, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
-
controls->title_type
= gwy_enum_combo_box_new(title_types, G_N_ELEMENTS(title_types),
G_CALLBACK(title_type_changed), controls,
args->title_type, TRUE);
- gtk_label_set_mnemonic_widget(GTK_LABEL(label), controls->title_type);
- gtk_table_attach(GTK_TABLE(table), controls->title_type,
- 1, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ gwy_table_attach_adjbar(table, row, _("Posi_tion:"), NULL,
+ GTK_OBJECT(controls->title_type),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
row++;
controls->title_gap = gtk_adjustment_new(args->title_gap,
- -1.0, 1.0, 0.01, 0.1, 0);
- gwy_table_attach_hscale(table, row, _("_Gap:"), NULL,
- controls->title_gap, GWY_HSCALE_DEFAULT);
+ -2.0, 1.0, 0.01, 0.1, 0);
+ gwy_table_attach_adjbar(table, row, _("_Gap:"), NULL,
+ controls->title_gap, GWY_HSCALE_LINEAR);
g_signal_connect_swapped(controls->title_gap, "value-changed",
G_CALLBACK(title_gap_changed), controls);
row++;
@@ -3941,8 +3891,8 @@ create_value_controls(ImgExportControls *controls)
= check = gtk_check_button_new_with_mnemonic(_("Put _units to title"));
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls->units_in_title),
args->units_in_title);
- gtk_table_attach(GTK_TABLE(table), check, 0, 3, row, row+1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ gtk_table_attach(GTK_TABLE(table), check, 0, 2, row, row+1,
+ GTK_FILL, 0, 0, 0);
g_signal_connect_swapped(check, "toggled",
G_CALLBACK(units_in_title_changed), controls);
row++;
@@ -4126,7 +4076,7 @@ create_selection_controls(ImgExportControls *controls)
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check),
args->draw_selection);
gtk_table_attach(GTK_TABLE(table), check, 0, 3, row, row+1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ GTK_FILL, 0, 0, 0);
g_signal_connect_swapped(check, "toggled",
G_CALLBACK(draw_selection_changed), controls);
row++;
@@ -4136,7 +4086,7 @@ create_selection_controls(ImgExportControls *controls)
controls->selections = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
treeview = GTK_TREE_VIEW(controls->selections);
gtk_table_attach(GTK_TABLE(table), controls->selections, 0, 3, row, row+1,
- GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+ GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
row++;
treesel = gtk_tree_view_get_selection(treeview);
@@ -4183,17 +4133,15 @@ create_selection_controls(ImgExportControls *controls)
create_colour_control(GTK_TABLE(table), row++,
_("Colo_r:"), &args->sel_color,
controls, &controls->sel_colour);
- row++;
create_colour_control(GTK_TABLE(table), row++,
_("Out_line color:"), &args->sel_outline_color,
controls, &controls->sel_outline_colour);
- row++;
controls->sel_opacity = gtk_adjustment_new(args->sel_color.a,
0.0, 1.0, 0.001, 0.1, 0);
- gwy_table_attach_hscale(table, row, _("O_pacity:"), NULL,
- controls->sel_opacity, GWY_HSCALE_DEFAULT);
+ gwy_table_attach_adjbar(table, row, _("O_pacity:"), NULL,
+ controls->sel_opacity, GWY_HSCALE_LINEAR);
g_signal_connect_swapped(controls->sel_opacity, "value-changed",
G_CALLBACK(sel_opacity_changed), controls);
row++;
@@ -4202,7 +4150,7 @@ create_selection_controls(ImgExportControls *controls)
controls->sel_options_label = gwy_label_new_header(_("Options"));
gtk_table_attach(GTK_TABLE(table), controls->sel_options_label,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
controls->sel_row_start = row;
@@ -4245,7 +4193,7 @@ reset_to_preset(ImgExportControls *controls,
args->linetext_color = src->linetext_color;
gwy_color_button_set_color(GWY_COLOR_BUTTON(controls->linetext_colour.button),
&args->linetext_color);
- args->bg_color = src->linetext_color;
+ args->bg_color = src->bg_color;
gwy_color_button_set_color(GWY_COLOR_BUTTON(controls->bg_colour.button),
&args->bg_color);
@@ -4764,6 +4712,7 @@ img_export_dialog(ImgExportArgs *args)
gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK);
g_free(title);
controls.dialog = dialog;
+ select_a_real_font(args, dialog);
g_signal_connect_swapped(dialog, "destroy",
G_CALLBACK(unqueue_preview), &controls);
@@ -6458,7 +6407,7 @@ options_sel_line(ImgExportControls *controls)
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check),
args->sel_number_objects);
gtk_table_attach(table, check, 0, 3, row, row+1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ GTK_FILL, 0, 0, 0);
g_signal_connect_swapped(check, "toggled",
G_CALLBACK(sel_number_objects_changed), controls);
controls->sel_options = g_slist_prepend(controls->sel_options, check);
@@ -6489,7 +6438,7 @@ options_sel_point(ImgExportControls *controls)
g_signal_connect_swapped(check, "toggled",
G_CALLBACK(sel_number_objects_changed), controls);
gtk_table_attach(table, check, 0, 3, row, row+1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ GTK_FILL, 0, 0, 0);
controls->sel_options = g_slist_prepend(controls->sel_options, check);
row++;
@@ -6572,6 +6521,64 @@ static const gchar zoom_key[] = "/module/pixmap/zoom";
static const gchar ztype_key[] = "/module/pixmap/ztype";
static void
+select_a_real_font(ImgExportArgs *args, GtkWidget *widget)
+{
+ static const gchar *fonts_to_try[] = {
+ /* Linux */
+ "Liberation Sans",
+ "Nimbus Sans L",
+ /* OS X */
+ "Lucida Grande",
+ "Helvetica Neue",
+ /* Windows, but Arial is quite ubiquitous. */
+ "Arial",
+ "Helvetica",
+ /* Alias, can be something odd... */
+ "Sans",
+ };
+
+ PangoContext *context;
+ PangoFontFamily **families = NULL;
+ const gchar *name, *currname;
+ gint nfamilies, i;
+ guint j;
+
+ context = gtk_widget_get_pango_context(widget);
+ pango_context_list_families(context, &families, &nfamilies);
+
+ currname = args->font;
+ for (i = 0; i < nfamilies; i++) {
+ name = pango_font_family_get_name(families[i]);
+ if (g_ascii_strcasecmp(currname, name) == 0) {
+ /* The font from settings seems available. Use it. */
+ gwy_debug("found font %s", currname);
+ g_free(families);
+ return;
+ }
+ }
+ gwy_debug("did not find font %s", currname);
+
+ /* We do not have the font from settings. Try to find some other sane
+ * sans font. */
+ for (j = 0; j < G_N_ELEMENTS(fonts_to_try); j++) {
+ currname = fonts_to_try[j];
+ for (i = 0; i < nfamilies; i++) {
+ name = pango_font_family_get_name(families[i]);
+ if (g_ascii_strcasecmp(currname, name) == 0) {
+ gwy_debug("found font %s", currname);
+ g_free(args->font);
+ args->font = g_strdup(currname);
+ g_free(families);
+ return;
+ }
+ }
+ }
+
+ /* Shrug and proceed... */
+ g_free(families);
+}
+
+static void
img_export_free_env(ImgExportEnv *env)
{
if (env->grey)
diff --git a/modules/file/imgexportpreset.h b/modules/file/imgexportpreset.h
index 486429d..d51a69e 100644
--- a/modules/file/imgexportpreset.h
+++ b/modules/file/imgexportpreset.h
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: imgexportpreset.h 19082 2016-10-14 20:40:18Z dn2010 $
+ * @(#) $Id: imgexportpreset.h 19917 2017-06-15 12:28:10Z yeti-dn $
* Copyright (C) 2014-2016 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -162,7 +162,7 @@ static const ImgExportArgs img_export_defaults = {
GWYRGBA_WHITE, GWYRGBA_WHITE, INSET_POS_BOTTOM_RIGHT,
GWYRGBA_BLACK, GWYRGBA_WHITE, TRUE,
TRUE, TRUE, FALSE, TRUE,
- "Helvetica", TRUE,
+ "Arial", TRUE,
FALSE, TRUE, TRUE, FALSE,
1.0, 1.0, 1.0, 0.0, 1.0,
FALSE, 2,
@@ -269,7 +269,7 @@ img_export_sanitize_args(ImgExportArgs *args)
args->fmscale_gap = CLAMP(args->fmscale_gap, 0.0, 2.0);
args->inset_xgap = CLAMP(args->inset_xgap, 0.0, 4.0);
args->inset_ygap = CLAMP(args->inset_ygap, 0.0, 2.0);
- args->title_gap = CLAMP(args->title_gap, -1.0, 1.0);
+ args->title_gap = CLAMP(args->title_gap, -2.0, 1.0);
args->fix_fmscale_precision = !!args->fix_fmscale_precision;
args->fmscale_precision = CLAMP(args->fmscale_precision, 0, 16);
args->fix_kilo_threshold = !!args->fix_kilo_threshold;
diff --git a/modules/file/intelliwave.c b/modules/file/intelliwave.c
index 99c7c20..ed9c43a 100644
--- a/modules/file/intelliwave.c
+++ b/modules/file/intelliwave.c
@@ -1,5 +1,5 @@
/*
- * $Id: intelliwave.c 19216 2016-11-09 10:39:06Z yeti-dn $
+ * $Id: intelliwave.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2016 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -235,7 +235,7 @@ static GwyModuleInfo module_info = {
"2016",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, intelliwave)
static gboolean
module_register(void)
diff --git a/modules/file/intematix.c b/modules/file/intematix.c
index 17cf641..ae73dba 100644
--- a/modules/file/intematix.c
+++ b/modules/file/intematix.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: intematix.c 17718 2015-11-06 08:04:04Z pecold $
+ * @(#) $Id: intematix.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2007 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -129,7 +129,7 @@ static GwyModuleInfo module_info = {
"2006",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, intematix)
static gboolean
module_register(void)
diff --git a/modules/file/iso28600.c b/modules/file/iso28600.c
index 29ac22d..da1f936 100644
--- a/modules/file/iso28600.c
+++ b/modules/file/iso28600.c
@@ -1,6 +1,6 @@
/*
- * $Id: iso28600.c 19044 2016-10-08 19:10:46Z yeti-dn $
- * Copyright (C) 2011 David Necas (Yeti).
+ * $Id: iso28600.c 19948 2017-06-22 14:05:41Z yeti-dn $
+ * Copyright (C) 2011-2016 David Necas (Yeti).
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -170,6 +170,15 @@ static GwyContainer* load_channels (ISO28600FieldValue *header,
gdouble xreal,
gdouble yreal,
GError **error);
+static GwyContainer* load_xyz_data (ISO28600FieldValue *header,
+ const gchar *filename,
+ gchar **strings,
+ gchar **p,
+ ISO28600ExperimentMode experiment,
+ guint nchannels,
+ gdouble qx,
+ gdouble qy,
+ GError **error);
static GwyContainer* load_spectra_graphs(ISO28600FieldValue *header,
gchar **p,
ISO28600SpectroscopyScanMode smode,
@@ -533,12 +542,12 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Imports and exports ISO 28600:2011 SPM data transfer format."),
"Yeti <yeti at gwyddion.net>",
- "0.2",
+ "0.4",
"David Nečas (Yeti)",
"2011",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, iso28600)
static gboolean
module_register(void)
@@ -600,34 +609,6 @@ iso28600_load(const gchar *filename,
guint xres, yres, nchannels;
gdouble xreal, yreal;
- if (header[16].enumerated.value != ISO28600_SCAN_REGULAR_MAPPING) {
- g_set_error(error, GWY_MODULE_FILE_ERROR,
- GWY_MODULE_FILE_ERROR_DATA,
- _("Only regular mappings are implemented but "
- "file has mapping type ‘%s’."),
- header[16].enumerated.str);
- goto fail;
- }
- xres = header[23].i;
- yres = header[24].i;
- if (err_DIMENSION(error, xres) || err_DIMENSION(error, yres))
- goto fail;
-
- xreal = header[27].d;
- yreal = header[28].d;
- if (!((xreal = fabs(xreal)) > 0)) {
- g_warning("Real x size is 0.0, fixing to 1.0");
- xreal = 1.0;
- }
- if (!((yreal = fabs(yreal)) > 0)) {
- g_warning("Real y size is 0.0, fixing to 1.0");
- yreal = 1.0;
- }
- xreal *= pow10(header[25].unit.power10);
- yreal *= pow10(header[26].unit.power10);
- if (!gwy_si_unit_equal(header[25].unit.unit, header[26].unit.unit))
- g_warning("X and Y units differ, using X");
-
nchannels = 1;
if (experiment == ISO28600_EXPERIMENT_MAP_MC) {
nchannels = header[93].i;
@@ -636,11 +617,49 @@ iso28600_load(const gchar *filename,
goto fail;
}
}
+ if (!gwy_si_unit_equal(header[25].unit.unit, header[26].unit.unit))
+ g_warning("X and Y units differ, using X");
- container = load_channels(header, filename, strings, &p,
- experiment, nchannels,
- xres, yres, xreal, yreal,
- error);
+ if (header[16].enumerated.value == ISO28600_SCAN_IRREGULAR_MAPPING) {
+ /* Ignore all area information because we have explicit X and Y
+ * coordinates of each point. Just precalculate the factors. */
+ xreal = pow10(header[25].unit.power10);
+ yreal = pow10(header[26].unit.power10);
+ container = load_xyz_data(header, filename, strings, &p,
+ experiment, nchannels, xreal, yreal,
+ error);
+ }
+ else if (header[16].enumerated.value == ISO28600_SCAN_REGULAR_MAPPING) {
+ xres = header[23].i;
+ yres = header[24].i;
+ if (err_DIMENSION(error, xres) || err_DIMENSION(error, yres))
+ goto fail;
+
+ xreal = header[27].d;
+ yreal = header[28].d;
+ if (!((xreal = fabs(xreal)) > 0)) {
+ g_warning("Real x size is 0.0, fixing to 1.0");
+ xreal = 1.0;
+ }
+ if (!((yreal = fabs(yreal)) > 0)) {
+ g_warning("Real y size is 0.0, fixing to 1.0");
+ yreal = 1.0;
+ }
+ xreal *= pow10(header[25].unit.power10);
+ yreal *= pow10(header[26].unit.power10);
+ container = load_channels(header, filename, strings, &p,
+ experiment, nchannels,
+ xres, yres, xreal, yreal,
+ error);
+ }
+ else {
+ g_set_error(error, GWY_MODULE_FILE_ERROR,
+ GWY_MODULE_FILE_ERROR_DATA,
+ _("Only regular and irregular mappings are implemented "
+ "but the file has mapping type ‘%s’."),
+ header[16].enumerated.str);
+ goto fail;
+ }
}
if (experiment == ISO28600_EXPERIMENT_SPEC_SC
|| experiment == ISO28600_EXPERIMENT_SPEC_MC) {
@@ -724,6 +743,7 @@ load_channels(ISO28600FieldValue *header,
gdouble *datas[MAX_CHANNELS];
gdouble powers10[MAX_CHANNELS];
gchar *line, *end;
+ GQuark quark;
guint id, k;
for (id = 0; id < nchannels; id++) {
@@ -752,7 +772,7 @@ load_channels(ISO28600FieldValue *header,
if (!line) {
g_set_error(error, GWY_MODULE_FILE_ERROR,
GWY_MODULE_FILE_ERROR_DATA,
- _("End of file reached when reading sample #%d of %d"),
+ _("End of file reached when reading sample #%u of %u"),
k, xres*yres);
goto fail;
}
@@ -762,11 +782,14 @@ load_channels(ISO28600FieldValue *header,
g_set_error(error, GWY_MODULE_FILE_ERROR,
GWY_MODULE_FILE_ERROR_DATA,
_("Malformed data encountered when reading sample "
- "#%d of %d"),
- k, xres*yres);
+ "#%u"),
+ k);
goto fail;
}
line = end;
+ /* The standard specifies comma separator. */
+ while (g_ascii_isspace(*line) || *line == ',')
+ line++;
}
}
if (!line || !gwy_strequal(line, EOD_MAGIC)) {
@@ -779,16 +802,13 @@ load_channels(ISO28600FieldValue *header,
for (id = 0; id < nchannels; id++) {
GwyContainer *meta;
const gchar *title;
- GQuark quark = gwy_app_get_data_key_for_id(id);
+ quark = gwy_app_get_data_key_for_id(id);
gwy_container_set_object(container, quark, fields[id]);
- meta = get_meta(header, strings, id);
- if (meta) {
- gchar key[40];
-
- g_snprintf(key, sizeof(key), "/%d/meta", id);
- gwy_container_set_object_by_name(container, key, meta);
+ if ((meta = get_meta(header, strings, id))) {
+ quark = gwy_app_get_data_meta_key_for_id(id);
+ gwy_container_set_object(container, quark, meta);
g_object_unref(meta);
}
@@ -798,10 +818,8 @@ load_channels(ISO28600FieldValue *header,
title = header[94 + 3*id].s;
if (strlen(title)) {
- gchar key[40];
-
- g_snprintf(key, sizeof(key), "/%d/data/title", id);
- gwy_container_set_string_by_name(container, key, g_strdup(title));
+ quark = gwy_app_get_data_title_key_for_id(id);
+ gwy_container_set_const_string(container, quark, title);
}
gwy_file_channel_import_log_add(container, id, NULL, filename);
@@ -814,6 +832,124 @@ fail:
return container;
}
+static GwyContainer*
+load_xyz_data(ISO28600FieldValue *header,
+ const gchar *filename,
+ gchar **strings,
+ gchar **p,
+ ISO28600ExperimentMode experiment,
+ guint nchannels,
+ gdouble qx, gdouble qy,
+ GError **error)
+{
+ GwyContainer *container = NULL;
+ gdouble powers10[MAX_CHANNELS+2];
+ GArray *alldata;
+ gchar *line, *end;
+ guint id, k;
+
+ powers10[0] = qx;
+ powers10[1] = qy;
+ for (id = 0; id < nchannels; id++) {
+ if (experiment == ISO28600_EXPERIMENT_MAP_SC)
+ powers10[id+2] = pow10(header[69].unit.power10);
+ else
+ powers10[id+2] = pow10(header[95 + 3*id].unit.power10);
+ }
+
+ /* It is not clear how many rows with data there are because the
+ * specification is obviously nonsensical, using 1..M×N range even for
+ * irregular data. */
+ alldata = g_array_new(FALSE, FALSE, sizeof(gdouble));
+ k = 0;
+ while ((line = gwy_str_next_line(p))) {
+ if (gwy_strequal(line, EOD_MAGIC))
+ break;
+ for (id = 0; id < nchannels+2; id++) {
+ gdouble v = powers10[id]*g_ascii_strtod(line, &end);
+ if (line == end) {
+ g_set_error(error, GWY_MODULE_FILE_ERROR,
+ GWY_MODULE_FILE_ERROR_DATA,
+ _("Malformed data encountered when reading sample "
+ "#%u")
+ , k);
+ goto fail;
+ }
+ g_array_append_val(alldata, v);
+ line = end;
+ /* The standard specifies comma separator. */
+ while (g_ascii_isspace(*line) || *line == ',')
+ line++;
+ }
+ }
+ if (!line || !gwy_strequal(line, EOD_MAGIC)) {
+ g_set_error(error, GWY_MODULE_FILE_ERROR, GWY_MODULE_FILE_ERROR_DATA,
+ _("Missing end-of-data marker."));
+ goto fail;
+ }
+
+ container = gwy_container_new();
+ k = alldata->len/(nchannels + 2);
+ for (id = 0; id < nchannels; id++) {
+ GQuark quark;
+ GwyContainer *meta;
+ const gchar *title;
+ GwySurface *surface;
+ GwySIUnit *unit;
+ GwyXYZ *data;
+ guint i;
+
+ surface = gwy_surface_new_sized(k);
+ data = gwy_surface_get_data(surface);
+ for (i = 0; i < k; i++) {
+ GwyXYZ pt;
+
+ pt.x = g_array_index(alldata, gdouble, (nchannels + 2)*i);
+ pt.y = g_array_index(alldata, gdouble, (nchannels + 2)*i + 1);
+ pt.z = g_array_index(alldata, gdouble, (nchannels + 2)*i + 2 + id);
+ data[i] = pt;
+ }
+ unit = gwy_surface_get_si_unit_xy(surface);
+ gwy_serializable_clone(G_OBJECT(header[25].unit.unit), G_OBJECT(unit));
+ unit = gwy_surface_get_si_unit_z(surface);
+ if (experiment == ISO28600_EXPERIMENT_MAP_SC) {
+ gwy_serializable_clone(G_OBJECT(header[69].unit.unit),
+ G_OBJECT(unit));
+ }
+ else {
+ gwy_serializable_clone(G_OBJECT(header[95 + 3*id].unit.unit),
+ G_OBJECT(unit));
+ }
+
+ quark = gwy_app_get_data_key_for_id(id);
+ gwy_container_set_object(container, quark, surface);
+
+ if ((meta = get_meta(header, strings, id))) {
+ quark = gwy_app_get_surface_meta_key_for_id(id);
+ gwy_container_set_object(container, quark, meta);
+ g_object_unref(meta);
+ }
+
+ if (experiment == ISO28600_EXPERIMENT_MAP_SC)
+ title = header[68].s;
+ else
+ title = header[94 + 3*id].s;
+
+ if (strlen(title)) {
+ quark = gwy_app_get_surface_title_key_for_id(id);
+ gwy_container_set_const_string(container, quark, title);
+ }
+
+ gwy_file_xyz_import_log_add(container, id, NULL, filename);
+ g_object_unref(surface);
+ }
+
+fail:
+ g_array_free(alldata, TRUE);
+
+ return container;
+}
+
/* XXX: The data format for spectroscopy is not well described so I estimate
* it is how I would do it. */
static GwyContainer*
@@ -940,7 +1076,7 @@ get_meta(ISO28600FieldValue *header,
static const GwyEnum fields_without_units[] = {
{ "deg", 33 }, { "V", 40 }, { "K", 49 }, { "Pa", 50 }, { "%", 51 },
{ "N/m", 56 }, { "Hz", 57 }, { "deg", 59 }, { "deg", 60 },
- { "deg", 61 },
+ { "deg", 61 },
};
gint year, month, day, hour, minute, second, offset;
GwyContainer *meta = gwy_container_new();
diff --git a/modules/file/jeol.c b/modules/file/jeol.c
index f842bc7..2cac8f7 100644
--- a/modules/file/jeol.c
+++ b/modules/file/jeol.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: jeol.c 17859 2015-12-17 11:59:01Z yeti-dn $
+ * @(#) $Id: jeol.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2006 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -541,7 +541,7 @@ static GwyModuleInfo module_info = {
"2006",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, jeol)
static gboolean
module_register(void)
diff --git a/modules/file/jpkscan.c b/modules/file/jpkscan.c
index 05558ee..d2950e6 100644
--- a/modules/file/jpkscan.c
+++ b/modules/file/jpkscan.c
@@ -1,11 +1,11 @@
/*
- * @(#) $Id: jpkscan.c 19097 2016-10-18 21:19:05Z dn2010 $
+ * @(#) $Id: jpkscan.c 19673 2017-05-01 16:03:55Z yeti-dn $
* Loader for JPK Image Scans.
* Copyright (C) 2005 JPK Instruments AG.
* Written by Sven Neumann <neumann at jpk.com>.
*
* Rewritten to use GwyTIFF and spectra added by Yeti <yeti at gwyddion.net>.
- * Copyright (C) 2009-2015 David Necas (Yeti).
+ * Copyright (C) 2009-2017 David Necas (Yeti).
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -46,21 +46,25 @@
/**
* [FILE-MAGIC-USERGUIDE]
* JPK Instruments
- * .jpk .jpk-qi-image
- * Read SPS
+ * .jpk .jpk-qi-image .jpk-force .jpk-force-map .jpk-qi-data
+ * Read SPS Volume
**/
#include "config.h"
#include <string.h>
#include <stdlib.h>
+#include <stdio.h>
+#include <glib/gstdio.h>
#include <libgwyddion/gwymacros.h>
#include <libgwyddion/gwymath.h>
#include <libgwyddion/gwyutils.h>
#include <libgwymodule/gwymodule-file.h>
#include <libprocess/stats.h>
+#include <libprocess/grains.h>
#include <libgwydgets/gwygraphmodel.h>
#include <app/gwymoduleutils-file.h>
#include <app/data-browser.h>
+#include <app/wait.h>
#include "err.h"
#include "jpk.h"
@@ -93,9 +97,12 @@ typedef enum {
} JPKForceFileType;
typedef struct {
- GHashTable *header_properties;
+ /* Segment header properties. */
/* Concatenated data of all channels. */
- guint ndata;
+ guint ndata; /* Points per curve from settings. The actual
+ number of values measured can be smaller and is
+ stored in measured_ndata[] for each map point. */
+ guint *measured_ndata;
gdouble *data;
const gchar **units; /* For all channels */
const gchar *segment_style; /* This is extend, retract, pause. */
@@ -104,7 +111,10 @@ typedef struct {
} JPKForceData;
typedef struct {
+ const gchar *filename;
+
GRegex *segment_regex;
+ GRegex *index_regex;
GRegex *index_segment_regex;
GString *str; /* General scratch buffer. */
GString *sstr; /* Inner scratch buffer for lookup_property(). */
@@ -116,21 +126,31 @@ typedef struct {
guint nids;
guint *ids;
guint nsegs;
- guint npoints;
+ guint npoints; /* Number of positions (xy coordinates) */
guint nchannels;
gint height_cid;
gchar **channel_names;
const gchar **default_cals;
+ /* We have only data[nseg] (with all channels and points in one block).
+ * The most coarse index is map point, then channel, then spectrum value. */
JPKForceData *data;
/* For maps/QI */
- GHashTable **point_header_properties;
- guint xres;
+ guint xres; /* Detected */
guint yres;
-
- /* The backend storage for all the hash tables. We must keep those we
+ guint ilength; /* Grid dimensions from the header */
+ guint jlength;
+ GwyXY *coordinates;
+ GwyXY xyorigin;
+ GwyXY xystep;
+ gboolean *have_coordinates;
+ guint *pointmap; /* Image pixel index → file data point id (index). */
+ guint imgid; /* Next free image id. */
+
+ /* The backend storage for all the hash tables. We must keep buffers we
* created hashes from because the strings point directly to the buffers. */
GSList *buffers;
+ GHashTable *last_hash;
} JPKForceFile;
static gboolean module_register (void);
@@ -169,35 +189,77 @@ static gint jpkforce_detect (const GwyFileDetectInfo *file
static GwyContainer* jpkforce_load (const gchar *filename,
GwyRunType mode,
GError **error);
+static void read_embedded_image_file (GwyContainer *container,
+ GwyZipFile zipfile,
+ JPKForceFile *jpkfile);
+static void check_regular_grid (JPKForceFile *jpkfile);
static guint create_force_curves (GwyContainer *container,
JPKForceFile *jpkfile);
static gboolean read_curve_data (GwyZipFile zipfile,
JPKForceFile *jpkfile,
GError **error);
+static guint create_volume_data (GwyContainer *container,
+ JPKForceFile *jpkfile,
+ GwySetFractionFunc set_fraction,
+ GError **error);
+static void create_aux_datafield (GwyContainer *container,
+ JPKForceFile *jpkfile,
+ GwyDataField *srcfield,
+ GwyDataField *mask,
+ const gchar *name,
+ const JPKForceData *data);
+static guint create_sps_data (GwyContainer *container,
+ JPKForceFile *jpkfile,
+ GwySetFractionFunc set_fraction,
+ GError **error);
+static gboolean read_forcemap_data (GwyZipFile zipfile,
+ JPKForceFile *jpkfile,
+ GwySetFractionFunc set_fraction,
+ GError **error);
static gboolean read_raw_data (GwyZipFile zipfile,
JPKForceFile *jpkfile,
JPKForceData *data,
+ GHashTable *hash,
+ const gchar *datatype,
+ guint ptid,
+ guint cid,
+ guint ndata,
+ GError **error);
+static gboolean read_computed_data (JPKForceFile *jpkfile,
+ GHashTable *header_properties,
+ JPKForceData *data,
const gchar *datatype,
- guint i,
+ guint ptid,
+ guint cid,
+ guint ndata,
GError **error);
+static void find_segment_settings (JPKForceFile *jpkfile,
+ GHashTable *header_properties,
+ guint sid);
static guint find_segment_npoints (JPKForceFile *jpkfile,
GHashTable *header_properties,
GError **error);
-static gchar* find_sgement_name (GHashTable *header_properties);
+static gchar* find_sgement_name (GHashTable *segment_properties,
+ GHashTable *shared_properties,
+ guint sid,
+ GString *str);
static gboolean apply_default_channel_scaling(JPKForceFile *jpkfile,
JPKForceData *data,
- guint i);
+ GHashTable *header_properties,
+ guint cid,
+ gsize datablockoff);
static gboolean find_scaling_parameters (JPKForceFile *jpkfile,
GHashTable *header_properties,
const gchar *subkey,
- guint i,
+ guint cid,
gdouble *multiplier,
gdouble *offset,
- const gchar **unit);
+ const gchar **unit,
+ gboolean ignore_missing);
static const gchar* lookup_channel_property (JPKForceFile *jpkfile,
GHashTable *header_properties,
const gchar *subkey,
- guint i,
+ guint cid,
gboolean fail_if_not_found,
GError **error);
static const gchar* lookup_property (JPKForceFile *jpkfile,
@@ -213,14 +275,15 @@ static gboolean analyse_segment_ids (JPKForceFile *jpkfile,
GError **error);
static gboolean analyse_map_segment_ids (JPKForceFile *jpkfile,
GError **error);
-static gboolean enumerate_segments (GwyZipFile zipfile,
- JPKForceFile *jpkfile);
-static gboolean enumerate_map_segments (GwyZipFile zipfile,
- JPKForceFile *jpkfile);
-static void jpk_force_file_free (JPKForceFile *jpkfile);
+static gboolean scan_file_enumerate_segments (GwyZipFile zipfile,
+ JPKForceFile *jpkfile,
+ GwySetMessageFunc set_fraction,
+ GError **error);
static GHashTable* parse_header_properties (GwyZipFile zipfile,
JPKForceFile *jpkfile,
GError **error);
+static void free_last_hash (JPKForceFile *jpkfile);
+static void jpk_force_file_free (JPKForceFile *jpkfile);
#endif
static GwyModuleInfo module_info = {
@@ -370,6 +433,11 @@ jpkscan_load(const gchar *filename,
gwy_tiff_free(tiff);
g_object_unref(meta);
+ if (!gwy_container_get_n_items(container)) {
+ err_NO_DATA(error);
+ GWY_OBJECT_UNREF(container);
+ }
+
return container;
}
@@ -465,11 +533,17 @@ jpk_load_channel(const GwyTIFF *tiff,
gwy_tiff_get_bool(tiff, idx, JPK_TIFFTAG_Grid_Reflect, &reflect);
data = gwy_data_field_get_data(dfield);
- for (j = 0; j < reader->height; j++)
+ for (j = 0; j < reader->height; j++) {
gwy_tiff_read_image_row(tiff, reader, 0,
reflect ? j : reader->height-1 - j,
mult, offset,
data + j*reader->width);
+ }
+
+ if (gwy_tiff_get_float0(tiff, JPK_TIFFTAG_Grid_x0, &offset))
+ gwy_data_field_set_xoffset(dfield, offset);
+ if (gwy_tiff_get_float0(tiff, JPK_TIFFTAG_Grid_y0, &offset))
+ gwy_data_field_set_yoffset(dfield, offset);
/* Add the GwyDataField to the container */
@@ -646,13 +720,15 @@ jpkforce_detect(const GwyFileDetectInfo *fileinfo,
static GwyContainer*
jpkforce_load(const gchar *filename,
- G_GNUC_UNUSED GwyRunType mode,
+ GwyRunType mode,
GError **error)
{
GwyContainer *container = NULL;
JPKForceFile jpkfile;
GwyZipFile zipfile;
+ gboolean waiting = FALSE;
+ gwy_debug("open file");
zipfile = gwyzip_open(filename);
if (!zipfile) {
g_set_error(error, GWY_MODULE_FILE_ERROR,
@@ -663,60 +739,102 @@ jpkforce_load(const gchar *filename,
gwy_clear(&jpkfile, 1);
- /* The main properties must exist. */
- if (!gwyzip_locate_file(zipfile, "header.properties", TRUE, error)
- || !(jpkfile.header_properties = parse_header_properties(zipfile,
- &jpkfile,
- error)))
- goto fail;
-
- /* Optional. */
- if (gwyzip_locate_file(zipfile, "shared-data/header.properties", TRUE,
- NULL)) {
- jpkfile.shared_header_properties = parse_header_properties(zipfile,
- &jpkfile,
- NULL);
- }
-
jpkfile.height_cid = -1;
jpkfile.str = g_string_new(NULL);
jpkfile.sstr = g_string_new(NULL);
jpkfile.qstr = g_string_new(NULL);
jpkfile.segment_regex
= g_regex_new("^segments/([0-9]+)/(.*)$", G_REGEX_OPTIMIZE, 0, NULL);
+ jpkfile.index_regex
+ = g_regex_new("^index/([0-9]+)/(.*)$", G_REGEX_OPTIMIZE, 0, NULL);
jpkfile.index_segment_regex
= g_regex_new("^index/([0-9]+)/segments/([0-9]+)/(.*)$",
G_REGEX_OPTIMIZE, 0, NULL);
+ jpkfile.filename = filename;
+
+ gwy_debug("starting scanning");
+ if (mode == GWY_RUN_INTERACTIVE) {
+ g_string_printf(jpkfile.str,
+ _("Scanning file (%u curves)..."), 0);
+ gwy_app_wait_start(NULL, jpkfile.str->str);
+ waiting = TRUE;
+ }
+ if (!scan_file_enumerate_segments(zipfile, &jpkfile,
+ waiting ? gwy_app_wait_set_message : NULL,
+ error))
+ goto fail;
- if (enumerate_segments(zipfile, &jpkfile)) {
- jpkfile.type = JPK_FORCE_CURVES;
+ if (jpkfile.type == JPK_FORCE_CURVES) {
if (!analyse_segment_ids(&jpkfile, error))
goto fail;
}
- else if (enumerate_map_segments(zipfile, &jpkfile)) {
- jpkfile.type = JPK_FORCE_MAP;
+ else if (jpkfile.type == JPK_FORCE_MAP) {
+ /* The image file should be near the beginning so hopefully this
+ * locate-file operation does not take several seconds. */
if (gwyzip_locate_file(zipfile, "data-image.jpk-qi-image", TRUE, NULL))
jpkfile.type = JPK_FORCE_QI;
if (!analyse_map_segment_ids(&jpkfile, error))
goto fail;
}
else {
- err_NO_DATA(error);
- goto fail;
+ g_assert_not_reached();
}
if (!enumerate_channels(&jpkfile, jpkfile.shared_header_properties, FALSE,
error))
goto fail;
- jpkfile.data = g_new0(JPKForceData, jpkfile.nids);
- container = gwy_container_new();
+ jpkfile.data = g_new0(JPKForceData, jpkfile.nsegs);
if (jpkfile.type == JPK_FORCE_CURVES) {
if (!read_curve_data(zipfile, &jpkfile, error))
goto fail;
+ container = gwy_container_new();
create_force_curves(container, &jpkfile);
}
else {
+ jpkfile.coordinates = g_new(GwyXY, jpkfile.npoints);
+ jpkfile.have_coordinates = g_new0(gboolean, jpkfile.npoints);
+ if (waiting) {
+ if (!gwy_app_wait_set_message(_("Reading files..."))
+ || !gwy_app_wait_set_fraction(0.0)) {
+ err_CANCELLED(error);
+ goto fail;
+ }
+ }
+ if (!read_forcemap_data(zipfile, &jpkfile,
+ waiting ? gwy_app_wait_set_fraction : NULL,
+ error))
+ goto fail;
+
+ check_regular_grid(&jpkfile);
+ container = gwy_container_new();
+ read_embedded_image_file(container, zipfile, &jpkfile);
+
+ if (jpkfile.pointmap) {
+ /* Regular grid with complete rows. */
+ if (waiting) {
+ if (!gwy_app_wait_set_message(_("Creating volume data..."))
+ || !gwy_app_wait_set_fraction(0.0)) {
+ err_CANCELLED(error);
+ GWY_OBJECT_UNREF(container);
+ goto fail;
+ }
+ }
+ if (!create_volume_data(container, &jpkfile,
+ waiting ? gwy_app_wait_set_fraction : NULL,
+ error)) {
+ GWY_OBJECT_UNREF(container);
+ goto fail;
+ }
+ }
+ else {
+ if (!create_sps_data(container, &jpkfile,
+ waiting ? gwy_app_wait_set_fraction : NULL,
+ error)) {
+ GWY_OBJECT_UNREF(container);
+ goto fail;
+ }
+ }
}
if (!gwy_container_get_n_items(container)) {
@@ -728,10 +846,121 @@ jpkforce_load(const gchar *filename,
fail:
gwyzip_close(zipfile);
jpk_force_file_free(&jpkfile);
+ if (waiting)
+ gwy_app_wait_finish();
return container;
}
+/* Extract the embedded image to a temporary file and use jpkscan_load() to
+ * load it. Do not complain if something goes wrong. We take the embedded
+ * image as a bonus if we can load it. */
+static void
+read_embedded_image_file(GwyContainer *container,
+ GwyZipFile zipfile, JPKForceFile *jpkfile)
+{
+ GwyContainer *embcontainer;
+ guchar *content = NULL, *p;
+ gchar *filename = NULL;
+ gsize size;
+ gssize bytes_written;
+ gint *ids;
+ guint i;
+ gint fd;
+
+ if (!gwyzip_locate_file(zipfile, "data-image.jpk-qi-image", TRUE, NULL))
+ return;
+
+ if (!(content = gwyzip_get_file_content(zipfile, &size, NULL)))
+ return;
+
+ fd = g_file_open_tmp("gwyddion-jpkscan-XXXXXX.jpk-qi-image", &filename,
+ NULL);
+ if (fd == -1)
+ goto fail;
+
+ p = content;
+ while (size) {
+ bytes_written = write(fd, p, size);
+ if (bytes_written <= 0) {
+ /* We might want to try again when we get zero written bytes or an
+ * error such as EAGAIN, EWOULDBLOCK or EINTR. But in this
+ * context, screw it. */
+ close(fd);
+ goto fail;
+ }
+ p += bytes_written;
+ size -= bytes_written;
+ }
+
+ embcontainer = jpkscan_load(filename, GWY_RUN_NONINTERACTIVE, NULL);
+ close(fd);
+ if (embcontainer) {
+ gwy_container_transfer(embcontainer, container, "/", "/", FALSE);
+ g_object_unref(embcontainer);
+
+ ids = gwy_app_data_browser_get_data_ids(container);
+ for (i = 0; ids[i] != -1; i++) {
+ if (ids[i] >= jpkfile->imgid)
+ jpkfile->imgid = ids[i]+1;
+ }
+ g_free(ids);
+ }
+
+fail:
+ if (filename) {
+ g_unlink(filename);
+ g_free(filename);
+ }
+ g_free(content);
+}
+
+
+static void
+check_regular_grid(JPKForceFile *jpkfile)
+{
+ guint npoints = jpkfile->npoints;
+ guint *pointmap;
+
+ if (!npoints)
+ return;
+
+ pointmap = gwy_check_regular_2d_grid((gdouble*)jpkfile->coordinates,
+ 2, npoints, -1.0,
+ &jpkfile->xres,
+ &jpkfile->yres,
+ &jpkfile->xyorigin,
+ &jpkfile->xystep);
+ gwy_debug("first attempt %p", pointmap);
+ if (pointmap) {
+ jpkfile->pointmap = pointmap;
+ return;
+ }
+
+ if (jpkfile->ilength < 2 || jpkfile->jlength < 2)
+ return;
+ if (jpkfile->ilength*jpkfile->jlength == npoints)
+ return;
+ if (npoints < jpkfile->jlength)
+ return;
+
+ /* For an incomplete measurement, try cutting it to full rows. If we
+ * still do not get a regular grid just give up. */
+ npoints = (npoints/jpkfile->jlength)*jpkfile->jlength;
+ pointmap = gwy_check_regular_2d_grid((gdouble*)jpkfile->coordinates,
+ 2, npoints, -1.0,
+ &jpkfile->xres,
+ &jpkfile->yres,
+ &jpkfile->xyorigin,
+ &jpkfile->xystep);
+ gwy_debug("second attempt %p", pointmap);
+ if (pointmap) {
+ jpkfile->pointmap = pointmap;
+ jpkfile->npoints = npoints;
+ return;
+ }
+}
+
static gboolean
err_IRREGULAR_NUMBERING(GError **error)
{
@@ -791,7 +1020,7 @@ compare_uint2(gconstpointer a, gconstpointer b)
}
static gchar*
-match_segment_filename(const gchar *filename, GRegex *regex, gint *id)
+match_segment_or_index_filename(const gchar *filename, GRegex *regex, gint *id)
{
GMatchInfo *info;
gchar *s;
@@ -867,6 +1096,7 @@ create_force_curves(GwyContainer *container, JPKForceFile *jpkfile)
ydata = data->data + cid * ndata;
gcmodel = gwy_graph_curve_model_new();
gwy_graph_curve_model_set_data(gcmodel, xdata, ydata, ndata);
+ gwy_graph_curve_model_enforce_order(gcmodel);
g_object_set(gcmodel,
"mode", GWY_GRAPH_CURVE_LINE,
"color", gwy_graph_get_preset_color(i++),
@@ -903,25 +1133,31 @@ create_force_curves(GwyContainer *container, JPKForceFile *jpkfile)
static gboolean
read_curve_data(GwyZipFile zipfile, JPKForceFile *jpkfile, GError **error)
{
+ JPKForceData *data;
GString *str = jpkfile->str;
+ guint sid;
- if (!gwyzip_first_file(zipfile, NULL)) {
- /* Internal error ??? */
- err_NO_DATA(error);
+ if (!gwyzip_first_file(zipfile, error))
return FALSE;
+
+ if (jpkfile->shared_header_properties) {
+ for (sid = 0; sid < jpkfile->nsegs; sid++)
+ find_segment_settings(jpkfile, jpkfile->shared_header_properties,
+ sid);
}
do {
gchar *filename = NULL, *suffix = NULL;
GHashTable *hash;
- guint id, i, ndata;
+ guint cid, ndata;
gboolean ok;
- if (!gwyzip_get_current_filename(zipfile, &filename, NULL))
- continue;
+ if (!gwyzip_get_current_filename(zipfile, &filename, error))
+ return FALSE;
/* Find the header. */
- suffix = match_segment_filename(filename, jpkfile->segment_regex, &id);
+ suffix = match_segment_or_index_filename(filename,
+ jpkfile->segment_regex, &sid);
g_free(filename);
if (!suffix)
@@ -931,48 +1167,42 @@ read_curve_data(GwyZipFile zipfile, JPKForceFile *jpkfile, GError **error)
if (!ok)
continue;
- g_assert(id <= jpkfile->nids);
- g_assert(jpkfile->data[id].header_properties == NULL);
+ g_assert(sid <= jpkfile->nsegs);
+ data = jpkfile->data + sid;
hash = parse_header_properties(zipfile, jpkfile, error);
- jpkfile->data[id].header_properties = hash;
- /* FIXME FIXME: A segment many not have numpoints if data were not
- * collected. */
+ /* A segment many not have numpoints if data were not collected.
+ * But for single curves this means a bad file anyway. */
if (!hash
|| !enumerate_channels(jpkfile, hash, TRUE, error)
|| !(ndata = find_segment_npoints(jpkfile, hash, error)))
return FALSE;
- jpkfile->data[id].segment_style
- = g_hash_table_lookup(hash, "force-segment-header.settings"
- ".segment-settings.style");
- jpkfile->data[id].segment_type
- = g_hash_table_lookup(hash, "force-segment-header.settings"
- ".segment-settings.type");
- jpkfile->data[id].segment_name = find_sgement_name(hash);
-
- gwy_debug("%u, npts = %u", id, ndata);
- jpkfile->data[id].ndata = ndata;
- jpkfile->data[id].data = g_new(gdouble, ndata*jpkfile->nchannels);
- jpkfile->data[id].units = g_new(const gchar*, jpkfile->nchannels);
+ gwy_debug("%u, npts = %u", sid, ndata);
+ if (data->ndata && ndata != data->ndata) {
+ /* Can this happen for non-maps? */
+ gwy_debug("number of measured data differs from settings");
+ }
+ /* Anyway, we have just a single curve set so let the segment header
+ * override any shared settings. */
+ data->ndata = ndata;
+ data->data = g_new(gdouble, ndata*jpkfile->nchannels);
+ data->units = g_new0(const gchar*, jpkfile->nchannels);
+ find_segment_settings(jpkfile, hash, sid);
+
/* Expect corresponding data files next. */
- for (i = 0; i < jpkfile->nchannels; i++) {
+ for (cid = 0; cid < jpkfile->nchannels; cid++) {
const gchar *datafilename, *datatype;
if (!(datatype = lookup_channel_property(jpkfile, hash, "type",
- i, TRUE, error)))
+ cid, TRUE, error)))
return FALSE;
- gwy_debug("data.type %s", datatype);
- if (gwy_strequal(datatype, "constant-data")) {
- g_warning("Cannot handle constant-data yet.");
- /* TODO: handle constant data. */
- continue;
- }
-
- if (gwy_strequal(datatype, "raster-data")) {
- g_warning("Cannot handle raster-data yet.");
- /* TODO: handle ramp data. */
+ /* Handle computed data. There is no corresponding file. */
+ if (gwy_stramong(datatype, "constant-data", "raster-data", NULL)) {
+ if (!read_computed_data(jpkfile, hash, data,
+ datatype, 0, cid, ndata, error))
+ return FALSE;
continue;
}
@@ -982,10 +1212,10 @@ read_curve_data(GwyZipFile zipfile, JPKForceFile *jpkfile, GError **error)
if (!(datafilename = lookup_channel_property(jpkfile, hash,
"file.name",
- i, TRUE, error)))
+ cid, TRUE, error)))
return FALSE;
- g_string_printf(str, "segments/%u/%s", id, datafilename);
+ g_string_printf(str, "segments/%u/%s", sid, datafilename);
if (!gwyzip_get_current_filename(zipfile, &filename, error))
return FALSE;
gwy_debug("expecting file <%s>, found <%s>", str->str, filename);
@@ -994,32 +1224,700 @@ read_curve_data(GwyZipFile zipfile, JPKForceFile *jpkfile, GError **error)
g_free(filename);
return FALSE;
}
+ g_free(filename);
/* Read the data. */
- if (!read_raw_data(zipfile, jpkfile, jpkfile->data + id,
- datatype, i, error)) {
+ if (!read_raw_data(zipfile, jpkfile, data, hash,
+ datatype, 0, cid, ndata, error))
+ return FALSE;
+ apply_default_channel_scaling(jpkfile, data, hash, cid, cid*ndata);
+ }
+
+ free_last_hash(jpkfile);
+
+ } while (gwyzip_next_file(zipfile, NULL));
+
+ return TRUE;
+}
+
+static gboolean
+analyse_height_channel_range(JPKForceData *data, const guint *pointmap,
+ guint nchannels, guint npoints,
+ gint height_cid,
+ GwyDataField *min_field,
+ GwyDataField *range_field,
+ GwyDataField *mask)
+{
+ guint ij, k, ndata = data->ndata, measured_ndata, np;
+ gdouble *dm = gwy_data_field_get_data(min_field);
+ gdouble *dr = gwy_data_field_get_data(range_field);
+ gdouble *m = gwy_data_field_get_data(mask);
+
+ np = 0;
+ /* ij indexes image points (so the fields are already unshuffled); we then
+ * analyse the curve at pointmap[ij] */
+ for (ij = 0; ij < npoints; ij++) {
+ gdouble zmin = G_MAXDOUBLE, zmax = -G_MAXDOUBLE;
+ const gdouble *ptdata;
+
+ ptdata = data->data + ndata*(height_cid + pointmap[ij]*nchannels);
+ measured_ndata = data->measured_ndata[pointmap[ij]];
+ if (measured_ndata >= 2) {
+ for (k = 0; k < measured_ndata; k++) {
+ gdouble z = ptdata[k];
+ if (z < zmin)
+ zmin = z;
+ if (z > zmax)
+ zmax = z;
+ }
+ dm[ij] = zmin;
+ dr[ij] = zmax - zmin;
+ m[ij] = 1.0;
+ np++;
+ }
+ else {
+ dm[ij] = dr[ij] = m[ij] = 0.0;
+ }
+ }
+ if (!np)
+ return FALSE;
+
+ return TRUE;
+}
+
+static int
+compare_double(gconstpointer a, gconstpointer b)
+{
+ const double da = *(const double*)a;
+ const double db = *(const double*)b;
+
+ if (da < db)
+ return -1;
+ if (da > db)
+ return 1;
+ return 0;
+}
+
+/* Enforce interpolation to regular z because there is, in principle, no
+ * guarantee the z values in individual spectra are compatible in any manner.
+ * But we have shared z. This can cause some information loss... */
+static void
+rasterise_spectrum_curve(GwyXY *data, guint ndata,
+ const gdouble *abscissa, gdouble *out,
+ guint nout, guint outstride)
+{
+ guint i, j;
+
+ g_assert(ndata > 0);
+
+ qsort(data, ndata, sizeof(GwyXY), compare_double);
+
+ /* Fill the leading segment before the data start with the first value.
+ * This should not happen except for rounding errors. */
+ i = j = 0;
+ while (i < nout && abscissa[i] <= data[j].x) {
+ *out = data[j].y;
+ out += outstride;
+ i++;
+ }
+
+ /* Interpolate until we reach the end of available values or fill the
+ * entire output array. */
+ while (i < nout && j < ndata-1) {
+ /* Invariant: abscissa[i] >= data[j].x */
+ if (abscissa[i] == data[j].x)
+ *out = data[j].y;
+ else {
+ gdouble d = data[j+1].x - data[j].x;
+ if (G_LIKELY(d > 0.0)) {
+ gdouble t = (abscissa[i] - data[j].x)/d;
+ *out = t*data[j+1].y + (1.0 - t)*data[j].y;
+ }
+ else
+ *out = data[j].y;
+ }
+ out += outstride;
+ i++;
+ /* Possibly move forward in input, preserving the invariant. */
+ while (i < nout && j < ndata-1 && abscissa[i] > data[j+1].x)
+ j++;
+ }
+
+ /* There may be a trailing segment after the last input value because the
+ * curve shorter. In this case we must have j == ndata-1. Filling with
+ * the last value seems reasonable. */
+ while (i < nout) {
+ *out = data[ndata-1].y;
+ out += outstride;
+ i++;
+ }
+}
+
+static guint
+create_volume_data(GwyContainer *container, JPKForceFile *jpkfile,
+ GwySetFractionFunc set_fraction,
+ GError **error)
+{
+ guint sid, cid, height_cid = jpkfile->height_cid;
+ guint nbricks, ij, k, nchannels = jpkfile->nchannels;
+ guint xres = jpkfile->xres, yres = jpkfile->yres;
+ guint noutdata, ndata;
+ GwyDataField *min_field, *range_field, *mask, *dfield;
+ gdouble *abscissa = NULL;
+ gdouble progres_denom, zmin, zrange;
+ GwyXY *curve = NULL;
+
+ g_return_val_if_fail(height_cid < jpkfile->nchannels, 0);
+
+ min_field = gwy_data_field_new(xres, yres,
+ jpkfile->xystep.x*xres,
+ jpkfile->xystep.y*yres,
+ FALSE);
+ gwy_si_unit_set_from_string(gwy_data_field_get_si_unit_xy(min_field), "m");
+ gwy_si_unit_set_from_string(gwy_data_field_get_si_unit_z(min_field), "m");
+ gwy_data_field_set_xoffset(min_field, jpkfile->xyorigin.x);
+ gwy_data_field_set_yoffset(min_field, jpkfile->xyorigin.y);
+ range_field = gwy_data_field_new_alike(min_field, FALSE);
+ mask = gwy_data_field_new_alike(min_field, FALSE);
+ gwy_si_unit_set_from_string(gwy_data_field_get_si_unit_z(mask), NULL);
+
+ /* FIXME: Pessimistic. But that is probably better than the opposite. */
+ progres_denom = jpkfile->nsegs*(nchannels - 1.0)*xres*yres;
+
+ nbricks = 0;
+ /* XXX: Segments z-{extend,retract}-height should have linear height. But
+ * segments z-{extend,retract}-force do not. What is more problematic, the
+ * z data can be different in each point. So we cannot just attach
+ * a calibration; we need to interpolate the data to a regular z grid. */
+ for (sid = 0; sid < jpkfile->nsegs; sid++) {
+ JPKForceData *data = jpkfile->data + sid;
+ gdouble hstep;
+
+ if (gwy_strequal(data->segment_style, "pause"))
+ continue;
+
+ if (!analyse_height_channel_range(data, jpkfile->pointmap,
+ nchannels, xres*yres, height_cid,
+ min_field, range_field, mask)) {
+ g_warning("No curves with reasonable number of points found "
+ "for segment %u.", sid);
+ continue;
+ }
+
+ ndata = data->ndata;
+ hstep = gwy_data_field_area_get_median(range_field, mask,
+ 0, 0, xres, yres)/ndata;
+ gwy_data_field_area_get_min_max(range_field, mask,
+ 0, 0, xres, yres, NULL, &zrange);
+ noutdata = GWY_ROUND(zrange/hstep);
+ noutdata = MIN(noutdata, 2*ndata);
+
+ curve = g_renew(GwyXY, curve, noutdata);
+ abscissa = g_renew(gdouble, abscissa, noutdata);
+ for (k = 0; k < noutdata; k++)
+ abscissa[k] = k/(noutdata-1.0) * zrange;
+
+ for (cid = 0; cid < nchannels; cid++) {
+ GwyBrick *brick;
+ gdouble *bdata;
+ gchar *title;
+ GQuark key;
+
+ if (cid == height_cid)
+ continue;
+
+ brick = gwy_brick_new(xres, yres, noutdata,
+ jpkfile->xystep.x*xres,
+ jpkfile->xystep.y*yres,
+ zrange,
+ FALSE);
+ bdata = gwy_brick_get_data(brick);
+ /* ij indexes image points; we then extract the curve at
+ * pointmap[ij] */
+ for (ij = 0; ij < xres*yres; ij++) {
+ const gdouble *zdata, *wdata;
+ guint measured_ndata, kpt;
+
+ kpt = jpkfile->pointmap[ij];
+ zdata = data->data + ndata*(height_cid + kpt*nchannels);
+ wdata = data->data + ndata*(cid + kpt*nchannels);
+ measured_ndata = data->measured_ndata[kpt];
+
+ if (measured_ndata > 2) {
+ zmin = min_field->data[ij];
+ for (k = 0; k < measured_ndata; k++) {
+ curve[k].x = zdata[k] - zmin;
+ curve[k].y = wdata[k];
+ }
+ rasterise_spectrum_curve(curve, measured_ndata, abscissa,
+ bdata + ij, noutdata, xres*yres);
+ }
+ else {
+ /* Fill missing curves with zeros. */
+ for (k = 0; k < noutdata; k++)
+ bdata[ij + k*xres*yres] = 0.0;
+ }
+
+ if (set_fraction && ij % 1000 == 0) {
+ if (!set_fraction((nbricks*xres*yres + ij)/progres_denom)) {
+ err_CANCELLED(error);
+ g_object_unref(brick);
+ nbricks = 0;
+ goto fail;
+ }
+ }
+ }
+
+ gwy_brick_set_xoffset(brick, jpkfile->xyorigin.x);
+ gwy_brick_set_yoffset(brick, jpkfile->xyorigin.y);
+ gwy_brick_set_zoffset(brick, gwy_data_field_get_min(min_field));
+
+ gwy_si_unit_set_from_string(gwy_brick_get_si_unit_x(brick), "m");
+ gwy_si_unit_set_from_string(gwy_brick_get_si_unit_y(brick), "m");
+ gwy_si_unit_set_from_string(gwy_brick_get_si_unit_z(brick),
+ data->units[height_cid]);
+ gwy_si_unit_set_from_string(gwy_brick_get_si_unit_w(brick),
+ data->units[cid]);
+
+ key = gwy_app_get_brick_key_for_id(nbricks);
+ gwy_container_set_object(container, key, brick);
+ g_object_unref(brick);
+
+ title = g_strdup_printf("%s [%s]",
+ jpkfile->channel_names[cid],
+ data->segment_name);
+ key = gwy_app_get_brick_title_key_for_id(nbricks);
+ gwy_container_set_string(container, key, title);
+
+ dfield = gwy_data_field_new(xres, yres,
+ gwy_brick_get_xreal(brick),
+ gwy_brick_get_yreal(brick),
+ FALSE);
+ gwy_brick_mean_plane(brick, dfield, 0, 0, 0, xres, yres, -1, FALSE);
+ key = gwy_app_get_brick_preview_key_for_id(nbricks);
+ gwy_container_set_object(container, key, dfield);
+ g_object_unref(dfield);
+
+ nbricks++;
+ }
+
+ gwy_data_field_grains_invert(mask);
+ create_aux_datafield(container, jpkfile, min_field, mask,
+ "Force curve start", data);
+ create_aux_datafield(container, jpkfile, range_field, mask,
+ "Force curve length", data);
+ }
+
+fail:
+ g_free(curve);
+ g_free(abscissa);
+ g_object_unref(min_field);
+ g_object_unref(range_field);
+ g_object_unref(mask);
+
+ return nbricks;
+}
+
+static void
+create_aux_datafield(GwyContainer *container, JPKForceFile *jpkfile,
+ GwyDataField *srcfield, GwyDataField *mask,
+ const gchar *name, const JPKForceData *data)
+{
+ GwyDataField *dfield;
+ gchar *title;
+ GQuark key;
+
+ dfield = gwy_data_field_duplicate(srcfield);
+ key = gwy_app_get_data_key_for_id(jpkfile->imgid);
+ gwy_container_set_object(container, key, dfield);
+ g_object_unref(dfield);
+
+ key = gwy_app_get_data_title_key_for_id(jpkfile->imgid);
+ title = g_strdup_printf("%s [%s]", name, data->segment_name);
+ gwy_container_set_string(container, key, title);
+
+ if (gwy_data_field_get_max(mask) > 0.0) {
+ dfield = gwy_data_field_duplicate(mask);
+ key = gwy_app_get_mask_key_for_id(jpkfile->imgid);
+ gwy_container_set_object(container, key, dfield);
+ g_object_unref(dfield);
+ }
+ gwy_file_channel_import_log_add(container, jpkfile->imgid, NULL,
+ jpkfile->filename);
+ jpkfile->imgid++;
+}
+
+static guint
+create_sps_data(GwyContainer *container, JPKForceFile *jpkfile,
+ GwySetFractionFunc set_fraction,
+ GError **error)
+{
+ guint sid, cid, height_cid = jpkfile->height_cid;
+ guint nspec, ij, k, nchannels = jpkfile->nchannels;
+ guint xres = jpkfile->xres, yres = jpkfile->yres;
+ guint noutdata, ndata;
+ GwyDataField *min_field, *range_field, *mask;
+ gdouble *abscissa = NULL;
+ gdouble progres_denom, zmin, zrange;
+ GwyXY *curve = NULL;
+
+ g_return_val_if_fail(height_cid < jpkfile->nchannels, 0);
+
+ min_field = gwy_data_field_new(xres, yres,
+ jpkfile->xystep.x*xres,
+ jpkfile->xystep.y*yres,
+ FALSE);
+ gwy_si_unit_set_from_string(gwy_data_field_get_si_unit_xy(min_field), "m");
+ gwy_si_unit_set_from_string(gwy_data_field_get_si_unit_z(min_field), "m");
+ range_field = gwy_data_field_new_alike(min_field, FALSE);
+ mask = gwy_data_field_new_alike(min_field, FALSE);
+ gwy_si_unit_set_from_string(gwy_data_field_get_si_unit_z(mask), NULL);
+
+ /* FIXME: Pessimistic. But that is probably better than the opposite. */
+ progres_denom = jpkfile->nsegs*(nchannels - 1.0)*xres*yres;
+
+ nspec = 0;
+ for (sid = 0; sid < jpkfile->nsegs; sid++) {
+ JPKForceData *data = jpkfile->data + sid;
+ gdouble hstep;
+
+ if (gwy_strequal(data->segment_style, "pause"))
+ continue;
+
+ if (!analyse_height_channel_range(data, jpkfile->pointmap,
+ nchannels, xres*yres, height_cid,
+ min_field, range_field, mask)) {
+ g_warning("No curves with reasonable number of points found "
+ "for segment %u.", sid);
+ continue;
+ }
+
+ ndata = data->ndata;
+ hstep = gwy_data_field_area_get_median(range_field, mask,
+ 0, 0, xres, yres)/ndata;
+ gwy_data_field_area_get_min_max(range_field, mask,
+ 0, 0, xres, yres, NULL, &zrange);
+ noutdata = GWY_ROUND(zrange/hstep);
+ noutdata = MIN(noutdata, 2*ndata);
+
+ curve = g_renew(GwyXY, curve, noutdata);
+ abscissa = g_renew(gdouble, abscissa, noutdata);
+ for (k = 0; k < noutdata; k++)
+ abscissa[k] = k/(noutdata-1.0) * zrange;
+
+ for (cid = 0; cid < nchannels; cid++) {
+ GwySpectra *spectra;
+ GwyDataLine *sps;
+ gchar *title;
+ GQuark key;
+
+ if (cid == height_cid)
+ continue;
+
+ spectra = gwy_spectra_new();
+ /* ij indexes image points; we then extract the curve at
+ * pointmap[ij] */
+ for (ij = 0; ij < xres*yres; ij++) {
+ const gdouble *zdata, *wdata;
+ gdouble *sdata;
+ guint measured_ndata, kpt;
+
+ kpt = jpkfile->pointmap[ij];
+ zdata = data->data + ndata*(height_cid + kpt*nchannels);
+ wdata = data->data + ndata*(cid + kpt*nchannels);
+ measured_ndata = data->measured_ndata[kpt];
+
+ if (measured_ndata < 3)
+ continue;
+
+ zmin = min_field->data[ij];
+ for (k = 0; k < measured_ndata; k++) {
+ curve[k].x = zdata[k] - zmin;
+ curve[k].y = wdata[k];
+ }
+ sps = gwy_data_line_new(measured_ndata,
+ zrange*measured_ndata/(noutdata - 1.0),
+ FALSE);
+ gwy_data_line_set_offset(sps, zmin);
+ gwy_si_unit_set_from_string(gwy_data_line_get_si_unit_x(sps),
+ data->units[height_cid]);
+ gwy_si_unit_set_from_string(gwy_data_line_get_si_unit_y(sps),
+ data->units[cid]);
+
+ sdata = gwy_data_line_get_data(sps);
+ rasterise_spectrum_curve(curve, measured_ndata, abscissa,
+ sdata, measured_ndata, 1);
+
+ gwy_spectra_add_spectrum(spectra, sps,
+ jpkfile->coordinates[kpt].x,
+ jpkfile->coordinates[kpt].y);
+ g_object_unref(sps);
+
+ if (set_fraction && ij % 1000 == 0) {
+ if (!set_fraction((nspec*xres*yres + ij)/progres_denom)) {
+ err_CANCELLED(error);
+ g_object_unref(spectra);
+ nspec = 0;
+ goto fail;
+ }
+ }
+ }
+
+ gwy_si_unit_set_from_string(gwy_spectra_get_si_unit_xy(spectra),
+ "m");
+
+ key = gwy_app_get_spectra_key_for_id(nspec);
+ gwy_container_set_object(container, key, spectra);
+ g_object_unref(spectra);
+
+ title = g_strdup_printf("%s [%s]",
+ jpkfile->channel_names[cid],
+ data->segment_name);
+ gwy_spectra_set_title(spectra, title);
+ g_free(title);
+
+ nspec++;
+ }
+ }
+
+fail:
+ g_free(curve);
+ g_free(abscissa);
+ g_object_unref(min_field);
+ g_object_unref(range_field);
+ g_object_unref(mask);
+
+ return nspec;
+}
+
+static inline const gchar*
+lookup_either(GHashTable *hash, const gchar *key1, const gchar *key2)
+{
+ const gchar *s;
+
+ if ((s = g_hash_table_lookup(hash, key1)))
+ return s;
+ if ((s = g_hash_table_lookup(hash, key2)))
+ return s;
+ return NULL;
+}
+
+static gboolean
+read_forcemap_data(GwyZipFile zipfile, JPKForceFile *jpkfile,
+ GwySetFractionFunc set_fraction, GError **error)
+{
+ GHashTable *hash;
+ JPKForceData *data;
+ GString *str = jpkfile->str;
+ const gchar *s;
+ guint sid, ptid;
+
+ if (!gwyzip_first_file(zipfile, error))
+ return FALSE;
+
+ /* FIXME: Which dimension is i and which is j? */
+ hash = jpkfile->header_properties;
+ if ((s = lookup_either(hash,
+ "quantitative-imaging-map.position-pattern."
+ "grid.ilength",
+ "force-scan-map.position-pattern."
+ "grid.ilength"))) {
+ jpkfile->ilength = atoi(s);
+ gwy_debug("ilength from header %u", jpkfile->ilength);
+ }
+ if ((s = lookup_either(hash,
+ "quantitative-imaging-map.position-pattern."
+ "grid.jlength",
+ "force-scan-map.position-pattern."
+ "grid.jlength"))) {
+ jpkfile->jlength = atoi(s);
+ gwy_debug("jlength from header %u", jpkfile->jlength);
+ }
+
+ /* XXX: Cannot continue without knowing the number of points from
+ * settings. Would like avoid allocating all curve data one by one.
+ * Though we might be forced to do that at the end? */
+ if (!jpkfile->shared_header_properties) {
+ err_MISSING_FIELD(error, "num-points");
+ return FALSE;
+ }
+
+ for (sid = 0; sid < jpkfile->nsegs; sid++) {
+ data = jpkfile->data + sid;
+ find_segment_settings(jpkfile, jpkfile->shared_header_properties, sid);
+ if (!data->ndata) {
+ err_MISSING_FIELD(error, "num-points");
+ }
+ /* NB: We cannot allocate anything here. Must, unfortunately, wait for
+ * enumerate_channels() to be run for the first time. */
+ data->measured_ndata = g_new0(guint, jpkfile->npoints);
+ }
+
+ do {
+ gchar *filename = NULL, *suffix = NULL;
+ guint cid, ndata;
+ gsize datablockoff;
+ gboolean ok;
+
+ if (!gwyzip_get_current_filename(zipfile, &filename, error))
+ return FALSE;
+
+ /* The point header comes after the segment data. But that is not
+ * of much help because there may be missing segments. */
+ suffix = match_segment_or_index_filename(filename, jpkfile->index_regex,
+ &ptid);
+ if (suffix && gwy_strequal(suffix, "header.properties")) {
+ g_free(filename);
+ g_free(suffix);
+
+ g_assert(ptid <= jpkfile->npoints);
+
+ hash = parse_header_properties(zipfile, jpkfile, error);
+ if (!hash)
+ return FALSE;
+ if (!(s = lookup_either(hash,
+ "quantitative-imaging-series.header."
+ "position.x",
+ "force-scan-series.header."
+ "position.x"))) {
+ err_MISSING_FIELD(error, "position.x");
+ return FALSE;
+ }
+ jpkfile->coordinates[ptid].x = g_ascii_strtod(s, NULL);
+ if (!(s = lookup_either(hash,
+ "quantitative-imaging-series.header."
+ "position.y",
+ "force-scan-series.header."
+ "position.y"))) {
+ err_MISSING_FIELD(error, "position.y");
+ return FALSE;
+ }
+ jpkfile->coordinates[ptid].y = g_ascii_strtod(s, NULL);
+ jpkfile->have_coordinates[ptid] = TRUE;
+ free_last_hash(jpkfile);
+ continue;
+ }
+ g_free(suffix);
+
+ /* Find the header. */
+ suffix = match_map_segment_filename(filename,
+ jpkfile->index_segment_regex,
+ &ptid, &sid);
+ g_free(filename);
+
+ if (!suffix)
+ continue;
+ ok = gwy_strequal(suffix, "segment-header.properties");
+ g_free(suffix);
+ /* This should only happen with the directory entry, not any actual
+ * file. */
+ if (!ok)
+ continue;
+
+ g_assert(sid <= jpkfile->nsegs);
+ g_assert(ptid <= jpkfile->npoints);
+
+ data = jpkfile->data + sid;
+ if (set_fraction && ptid % 1000 == 0) {
+ if (!set_fraction((gdouble)ptid/jpkfile->npoints)) {
+ err_CANCELLED(error);
+ return FALSE;
+ }
+ }
+
+ hash = parse_header_properties(zipfile, jpkfile, error);
+ if (!hash
+ || !enumerate_channels(jpkfile, hash, TRUE, error)
+ || !(ndata = find_segment_npoints(jpkfile, hash, error)))
+ return FALSE;
+
+ if (!data->data) {
+ data->data = g_new(gdouble,
+ data->ndata*jpkfile->nchannels*jpkfile->npoints);
+ data->units = g_new0(const gchar*, jpkfile->nchannels);
+ }
+
+ //gwy_debug("%u, %u, npts = %u", ptid, sid, ndata);
+ data->measured_ndata[ptid] = ndata;
+ find_segment_settings(jpkfile, hash, sid);
+
+ /* Expect corresponding data files next. */
+ for (cid = 0; cid < jpkfile->nchannels; cid++) {
+ const gchar *datafilename, *datatype;
+
+ if (!(datatype = lookup_channel_property(jpkfile, hash, "type",
+ cid, TRUE, error)))
+ return FALSE;
+
+ //gwy_debug("data.type %s", datatype);
+ /* Handle computed data. There is no corresponding file. */
+ if (gwy_stramong(datatype, "constant-data", "raster-data", NULL)) {
+ if (!read_computed_data(jpkfile, hash, data,
+ datatype, ptid, cid, ndata, error))
+ return FALSE;
+ continue;
+ }
+
+ /* Otherwise we have actual data and expect a file name. */
+ if (!gwyzip_next_file(zipfile, error))
+ return FALSE;
+
+ if (!(datafilename = lookup_channel_property(jpkfile, hash,
+ "file.name",
+ cid, TRUE, error)))
+ return FALSE;
+
+ g_string_printf(str, "index/%u/segments/%u/%s",
+ ptid, sid, datafilename);
+ if (!gwyzip_get_current_filename(zipfile, &filename, error))
+ return FALSE;
+ //gwy_debug("expecting file <%s>, found <%s>", str->str, filename);
+ if (!gwy_strequal(filename, str->str)) {
+ err_DATA_FILE_NAME(error, str->str, filename);
g_free(filename);
return FALSE;
}
g_free(filename);
- apply_default_channel_scaling(jpkfile, jpkfile->data + id, i);
+
+ /* Read the data. */
+ if (!read_raw_data(zipfile, jpkfile, data, hash,
+ datatype, ptid, cid, ndata, error))
+ return FALSE;
+
+ datablockoff = (ptid*jpkfile->nchannels + cid)*data->ndata;
+ apply_default_channel_scaling(jpkfile, data, hash,
+ cid, datablockoff);
}
+
+ free_last_hash(jpkfile);
+
} while (gwyzip_next_file(zipfile, NULL));
+ for (ptid = 0; ptid < jpkfile->npoints; ptid++) {
+ if (!jpkfile->have_coordinates[ptid]) {
+ g_set_error(error, GWY_MODULE_FILE_ERROR,
+ GWY_MODULE_FILE_ERROR_DATA,
+ _("Header properties file for index %u is missing."),
+ ptid);
+ return FALSE;
+ }
+ }
+
return TRUE;
}
static gboolean
read_raw_data(GwyZipFile zipfile, JPKForceFile *jpkfile,
- JPKForceData *data, const gchar *datatype, guint i,
+ JPKForceData *data, GHashTable *hash, const gchar *datatype,
+ guint ptid, guint cid, guint ndata,
GError **error)
{
GwyRawDataType rawtype;
- GHashTable *hash = data->header_properties;
const gchar *encoder = "";
- gsize size;
+ gsize size, datablockoff;
guchar *bytes;
gdouble q, off;
+ gboolean is_float;
if (gwy_stramong(datatype, "float-data", "float", NULL))
rawtype = GWY_RAW_DATA_FLOAT;
@@ -1028,7 +1926,7 @@ read_raw_data(GwyZipFile zipfile, JPKForceFile *jpkfile,
else if (gwy_stramong(datatype, "short-data", "memory-short-data", "short",
NULL)) {
if (!(encoder = lookup_channel_property(jpkfile, hash, "encoder.type",
- i, TRUE, error)))
+ cid, TRUE, error)))
return FALSE;
if (gwy_stramong(encoder, "unsignedshort", "unsignedshort-limited",
NULL))
@@ -1044,7 +1942,7 @@ read_raw_data(GwyZipFile zipfile, JPKForceFile *jpkfile,
else if (gwy_stramong(datatype, "integer-data", "memory-integer-data",
NULL)) {
if (!(encoder = lookup_channel_property(jpkfile, hash, "encoder.type",
- i, TRUE, error)))
+ cid, TRUE, error)))
return FALSE;
if (gwy_stramong(encoder, "unsignedinteger", "unsignedinteger-limited",
NULL))
@@ -1060,7 +1958,7 @@ read_raw_data(GwyZipFile zipfile, JPKForceFile *jpkfile,
else if (gwy_stramong(datatype, "long-data", "memory-long-data", "long",
NULL)) {
if (!(encoder = lookup_channel_property(jpkfile, hash, "encoder.type",
- i, TRUE, error)))
+ cid, TRUE, error)))
return FALSE;
if (gwy_stramong(encoder, "unsignedlong", "unsignedlong-limited",
NULL))
@@ -1081,7 +1979,7 @@ read_raw_data(GwyZipFile zipfile, JPKForceFile *jpkfile,
if (!(bytes = gwyzip_get_file_content(zipfile, &size, error)))
return FALSE;
- if (err_SIZE_MISMATCH(error, data->ndata*gwy_raw_data_size(rawtype), size,
+ if (err_SIZE_MISMATCH(error, ndata*gwy_raw_data_size(rawtype), size,
TRUE)) {
g_free(bytes);
return FALSE;
@@ -1090,29 +1988,125 @@ read_raw_data(GwyZipFile zipfile, JPKForceFile *jpkfile,
/* Apply the encoder conversion factors. These convert raw data to some
* sensor physical values, typically Volts. Conversions to values we
* actually want to display are done later. */
- find_scaling_parameters(jpkfile, hash, "encoder", i,
- &q, &off, data->units + i);
- gwy_convert_raw_data(bytes, data->ndata, 1, rawtype,
+ /* Apparently floating point data do not need encoder (makes sense but
+ * the file spec is unclear in this regard). */
+ is_float = (rawtype == GWY_RAW_DATA_DOUBLE
+ || rawtype == GWY_RAW_DATA_FLOAT);
+ find_scaling_parameters(jpkfile, hash, "encoder", cid,
+ &q, &off, data->units + cid,
+ is_float);
+ /* Use allocate ndata from settings, not actual ndata for segment here! */
+ datablockoff = (ptid*jpkfile->nchannels + cid)*data->ndata;
+ gwy_convert_raw_data(bytes, ndata, 1, rawtype,
GWY_BYTE_ORDER_BIG_ENDIAN,
- data->data + i*data->ndata, q, off);
+ data->data + datablockoff, q, off);
g_free(bytes);
- gwy_debug("read %u (%s,%s) data points",
- data->ndata, datatype, encoder);
+ //gwy_debug("read %u (%s,%s) data points", ndata, datatype, encoder);
return TRUE;
}
+static gboolean
+read_computed_data(JPKForceFile *jpkfile, GHashTable *header_properties,
+ JPKForceData *data, const gchar *datatype,
+ guint ptid, guint cid, guint ndata,
+ GError **error)
+{
+ gsize datablockoff;
+ const gchar *s;
+ gdouble value, start, step;
+ gdouble *d;
+ guint j;
+
+ /* Use allocate ndata from settings, not actual ndata for segment here! */
+ datablockoff = (ptid*jpkfile->nchannels + cid)*data->ndata;
+ d = data->data + datablockoff;
+
+ if (gwy_strequal(datatype, "constant-data")) {
+ if (!(s = lookup_channel_property(jpkfile, header_properties,
+ "value", cid, TRUE, error)))
+ return FALSE;
+ value = g_ascii_strtod(s, NULL);
+
+ for (j = 0; j < ndata; j++)
+ d[j] = value;
+ return TRUE;
+ }
+
+ if (gwy_strequal(datatype, "raster-data")) {
+ if (!(s = lookup_channel_property(jpkfile, header_properties,
+ "start", cid, TRUE, error)))
+ return FALSE;
+ start = g_ascii_strtod(s, NULL);
+ if (!(s = lookup_channel_property(jpkfile, header_properties,
+ "step", cid, TRUE, error)))
+ return FALSE;
+ step = g_ascii_strtod(s, NULL);
+
+ for (j = 0; j < ndata; j++)
+ d[j] = start + j*step;
+ return TRUE;
+ }
+
+ g_assert_not_reached();
+ return FALSE;
+}
+
+static void
+find_segment_settings(JPKForceFile *jpkfile,
+ GHashTable *header_properties, guint sid)
+{
+ GHashTable *shared_properties = jpkfile->shared_header_properties;
+ JPKForceData *data = jpkfile->data + sid;
+ GString *str = jpkfile->str;
+ const gchar *s;
+
+ g_free(data->segment_name);
+ data->segment_name = find_sgement_name(header_properties, shared_properties,
+ sid, str);
+ //gwy_debug("segment %u name: %s", sid, data->segment_name);
+ /* FIXME: Should we fail when segment_name is NULL? */
+
+ data->segment_style = g_hash_table_lookup(header_properties,
+ "force-segment-header.settings"
+ ".segment-settings.style");
+ if (!data->segment_style && shared_properties) {
+ g_string_printf(str, "force-segment-header-info.%u.settings."
+ "segment-settings.style", sid);
+ data->segment_style = g_hash_table_lookup(shared_properties, str->str);
+ }
+ //gwy_debug("segment %u style: %s", sid, data->segment_style);
+
+ if (!data->ndata && shared_properties) {
+ g_string_printf(str, "force-segment-header-info.%u.settings."
+ "segment-settings.num-points", sid);
+ if ((s = g_hash_table_lookup(shared_properties, str->str)))
+ data->ndata = atoi(s);
+ }
+ //gwy_debug("segment %u num-points: %u", sid, data->ndata);
+
+ data->segment_type = g_hash_table_lookup(header_properties,
+ "force-segment-header.settings"
+ ".segment-settings.type");
+ if (!data->segment_type && shared_properties) {
+ g_string_printf(str, "force-segment-header-info.%u.settings."
+ "segment-settings.type", sid);
+ data->segment_type = g_hash_table_lookup(shared_properties, str->str);
+ }
+ //gwy_debug("segment %u type: %s", sid, data->segment_type);
+}
+
static guint
find_segment_npoints(JPKForceFile *jpkfile,
GHashTable *header_properties, GError **error)
{
- guint i, npts = 0;
+ guint cid, npts = 0;
const gchar *s;
- for (i = 0; i < jpkfile->nchannels; i++) {
+ for (cid = 0; cid < jpkfile->nchannels; cid++) {
if (!(s = lookup_channel_property(jpkfile, header_properties,
- "num-points", i, TRUE, error)))
+ "num-points", cid, TRUE, error)))
return 0;
- if (i) {
+ if (cid) {
if (atoi(s) != npts) {
err_INVALID(error, jpkfile->str->str);
return 0;
@@ -1128,21 +2122,41 @@ find_segment_npoints(JPKForceFile *jpkfile,
return npts;
}
+static const gchar*
+lookup_similar(GHashTable *hash, GString *str, guint len, const gchar *newend)
+{
+ g_string_truncate(str, len);
+ g_string_append(str, newend);
+ return g_hash_table_lookup(hash, str->str);
+}
+
static gchar*
-find_sgement_name(GHashTable *header_properties)
+find_sgement_name(GHashTable *segment_properties, GHashTable *shared_properties,
+ guint sid, GString *str)
{
+ GHashTable *hash;
const gchar *t, *name, *prefix, *suffix;
+ guint len;
gchar *s;
- t = g_hash_table_lookup(header_properties,
- "force-segment-header.settings"
- ".segment-settings.identifier.type");
- name = g_hash_table_lookup(header_properties,
- "force-segment-header.settings"
- ".segment-settings.identifier.name");
+ /* Figure out the correct leading part of the path. */
+ hash = segment_properties;
+ g_string_assign(str, "force-segment-header.settings."
+ "segment-settings.identifier.");
+ len = str->len;
+ name = lookup_similar(hash, str, len, "name");
+ if (!name && shared_properties) {
+ hash = shared_properties;
+ g_string_printf(str, "force-segment-header-info.%u.settings."
+ "segment-settings.identifier.", sid);
+ len = str->len;
+ name = lookup_similar(hash, str, len, "name");
+ }
if (!name)
return NULL;
+ /* Use this leading part for all other keys. */
+ t = lookup_similar(hash, str, len, "type");
if (!t) {
g_warning("Missing identifier type.");
return g_strdup(name);
@@ -1154,12 +2168,8 @@ find_sgement_name(GHashTable *header_properties)
return s;
}
if (gwy_strequal(t, "ExtendedStandard")) {
- prefix = g_hash_table_lookup(header_properties,
- "force-segment-header.settings"
- ".segment-settings.identifier.prefix");
- suffix = g_hash_table_lookup(header_properties,
- "force-segment-header.settings"
- ".segment-settings.identifier.suffix");
+ prefix = lookup_similar(hash, str, len, "prefix");
+ suffix = lookup_similar(hash, str, len, "suffix");
if (prefix && suffix)
return g_strconcat(prefix, name, suffix, NULL);
g_warning("Prefix or suffix missing for ExtendedStandard identifier.");
@@ -1177,37 +2187,38 @@ find_sgement_name(GHashTable *header_properties)
static gboolean
apply_default_channel_scaling(JPKForceFile *jpkfile,
JPKForceData *data,
- guint i)
+ GHashTable *header_properties,
+ guint cid,
+ gsize datablockoff)
{
- GHashTable *header_properties = data->header_properties;
const gchar *default_cal;
gdouble q, off;
gdouble *d;
gchar *key;
guint j, ndata;
- if (!(default_cal = jpkfile->default_cals[i])) {
+ if (!(default_cal = jpkfile->default_cals[cid])) {
default_cal = lookup_channel_property(jpkfile, header_properties,
"conversion-set.conversions.default",
- i, FALSE, NULL);
+ cid, FALSE, NULL);
if (!default_cal) {
g_warning("Cannot find the default conversion.");
return FALSE;
}
else
- jpkfile->default_cals[i] = default_cal;
+ jpkfile->default_cals[cid] = default_cal;
}
key = g_strconcat("conversion-set.conversion.", default_cal, NULL);
- if (!find_scaling_parameters(jpkfile, header_properties, key, i,
- &q, &off, data->units + i)) {
+ if (!find_scaling_parameters(jpkfile, header_properties, key, cid,
+ &q, &off, data->units + cid, FALSE)) {
g_free(key);
return FALSE;
}
g_free(key);
ndata = data->ndata;
- d = data->data + i*ndata;
+ d = data->data + datablockoff;
for (j = 0; j < ndata; j++)
d[j] = q*d[j] + off;
@@ -1219,17 +2230,19 @@ lookup_scaling_property(JPKForceFile *jpkfile,
GHashTable *hash,
const gchar *subkey,
guint len,
- guint i,
- const gchar *expected_value)
+ guint cid,
+ const gchar *expected_value,
+ gboolean ignore_missing)
{
GString *key = jpkfile->qstr;
const gchar *s;
g_string_truncate(key, len);
g_string_append(key, subkey);
- s = lookup_channel_property(jpkfile, hash, key->str, i, FALSE, NULL);
+ s = lookup_channel_property(jpkfile, hash, key->str, cid, FALSE, NULL);
if (!s) {
- g_warning("Cannot find %s.", key->str);
+ if (!ignore_missing)
+ g_warning("Cannot find %s.", key->str);
return NULL;
}
if (expected_value && !gwy_strequal(s, expected_value)) {
@@ -1247,10 +2260,11 @@ static gboolean
find_scaling_parameters(JPKForceFile *jpkfile,
GHashTable *hash,
const gchar *subkey,
- guint i,
+ guint cid,
gdouble *multiplier,
gdouble *offset,
- const gchar **unit)
+ const gchar **unit,
+ gboolean ignore_missing)
{
/* There seem to be different unit styles. Documentation says just "unit"
* but I see "unit.type" and "unit.unit" for the actual unit. Try both. */
@@ -1278,7 +2292,7 @@ find_scaling_parameters(JPKForceFile *jpkfile,
* already know we are at the base calibration by looking at
* "conversions.base" but we do not bother at present. */
g_string_append(key, "defined");
- if ((s = lookup_channel_property(jpkfile, hash, key->str, i, FALSE, NULL))
+ if ((s = lookup_channel_property(jpkfile, hash, key->str, cid, FALSE, NULL))
&& gwy_strequal(s, "false"))
return TRUE;
@@ -1286,20 +2300,23 @@ find_scaling_parameters(JPKForceFile *jpkfile,
g_string_append(key, "scaling.");
len = key->len;
- if (!lookup_scaling_property(jpkfile, hash, "type", len, i, "linear"))
+ if (!lookup_scaling_property(jpkfile, hash, "type", len, cid,
+ "linear", ignore_missing))
return FALSE;
- if (!lookup_scaling_property(jpkfile, hash, "style", len, i,
- "offsetmultiplier"))
+ if (!lookup_scaling_property(jpkfile, hash, "style", len, cid,
+ "offsetmultiplier", ignore_missing))
return FALSE;
- if ((s = lookup_scaling_property(jpkfile, hash, "offset", len, i, NULL)))
+ if ((s = lookup_scaling_property(jpkfile, hash, "offset", len, cid,
+ NULL, ignore_missing)))
*offset = g_ascii_strtod(s, NULL);
- if ((s = lookup_scaling_property(jpkfile, hash, "multiplier", len, i, NULL)))
+ if ((s = lookup_scaling_property(jpkfile, hash, "multiplier", len, cid,
+ NULL, ignore_missing)))
*multiplier = g_ascii_strtod(s, NULL);
for (j = 0; j < G_N_ELEMENTS(unit_keys); j++) {
g_string_truncate(key, len);
g_string_append(key, unit_keys[j]);
- s = lookup_channel_property(jpkfile, hash, key->str, i, FALSE, NULL);
+ s = lookup_channel_property(jpkfile, hash, key->str, cid, FALSE, NULL);
if (s) {
*unit = s;
break;
@@ -1313,7 +2330,7 @@ find_scaling_parameters(JPKForceFile *jpkfile,
g_string_assign(key, subkey);
len = key->len;
g_string_append(key, ".base-calibration-slot");
- bcs = lookup_channel_property(jpkfile, hash, key->str, i, FALSE, NULL);
+ bcs = lookup_channel_property(jpkfile, hash, key->str, cid, FALSE, NULL);
if (!bcs)
return TRUE;
@@ -1328,8 +2345,9 @@ find_scaling_parameters(JPKForceFile *jpkfile,
g_string_truncate(key, s+1 - subkey);
g_string_append(key, bcs);
bcskey = g_strdup(key->str);
- if (find_scaling_parameters(jpkfile, hash, bcskey, i,
- &base_multipler, &base_offset, &base_unit)) {
+ if (find_scaling_parameters(jpkfile, hash, bcskey, cid,
+ &base_multipler, &base_offset, &base_unit,
+ FALSE)) {
g_free(bcskey);
*multiplier *= base_multipler;
*offset += *multiplier * base_offset;
@@ -1370,15 +2388,19 @@ lookup_channel_property(JPKForceFile *jpkfile,
g_string_append(str, "lcd-info.");
g_string_append(str, subkey);
if ((retval = lookup_property(jpkfile, header_properties, str->str,
- fail_if_not_found, &err)))
+ fail_if_not_found,
+ fail_if_not_found ? &err : NULL)))
return retval;
g_string_truncate(str, len);
g_string_append(str, "data.");
g_string_append(str, subkey);
if ((retval = lookup_property(jpkfile, header_properties, str->str,
- FALSE, NULL)))
+ FALSE, NULL))) {
+ if (fail_if_not_found)
+ g_clear_error(&err);
return retval;
+ }
if (fail_if_not_found) {
/* @err cannot be set otherwise. */
@@ -1428,7 +2450,7 @@ lookup_property(JPKForceFile *jpkfile,
g_string_append_c(sstr, '.');
g_string_append(sstr, s);
g_string_append(sstr, key + len);
- gwy_debug("shared properties key <%s>", sstr->str);
+ //gwy_debug("shared properties key <%s>", sstr->str);
if ((s = g_hash_table_lookup(jpkfile->shared_header_properties, sstr->str)))
return s;
@@ -1508,8 +2530,9 @@ analyse_segment_ids(JPKForceFile *jpkfile, GError **error)
g_assert(jpkfile->type == JPK_FORCE_CURVES);
for (i = 0; i < nids; i++) {
- if (jpkfile->ids[i] != i)
+ if (jpkfile->ids[i] != i) {
return err_IRREGULAR_NUMBERING(error);
+ }
}
jpkfile->nsegs = nids;
@@ -1517,111 +2540,252 @@ analyse_segment_ids(JPKForceFile *jpkfile, GError **error)
return TRUE;
}
+static void
+add_id_to_array(gpointer hkey, G_GNUC_UNUSED gpointer hval, gpointer user_data)
+{
+ guint id = GPOINTER_TO_UINT(hkey);
+ GArray *array = (GArray*)user_data;
+
+ g_array_append_val(array, id);
+}
+
static gboolean
analyse_map_segment_ids(JPKForceFile *jpkfile, GError **error)
{
- guint i, j, k, nids = jpkfile->nids;
- guint nsegs, npoints, idx0, idx;
+ GHashTable *idhash;
+ GArray *idlist;
+ guint *allids;
+ guint i, j, k, kk, nids = jpkfile->nids;
+ guint nsegs, npoints, idx;
g_assert(jpkfile->type == JPK_FORCE_MAP || jpkfile->type == JPK_FORCE_QI);
- idx0 = jpkfile->ids[0];
- for (i = 1; i < nids; i++) {
+ gwy_debug("nids %u", nids);
+
+ idhash = g_hash_table_new(g_direct_hash, g_direct_equal);
+ for (i = 0; i < nids; i++) {
+ idx = jpkfile->ids[2*i + 1];
+ g_hash_table_insert(idhash,
+ GUINT_TO_POINTER(idx), GUINT_TO_POINTER(TRUE));
+ }
+ idlist = g_array_new(FALSE, FALSE, sizeof(guint));
+ g_hash_table_foreach(idhash, add_id_to_array, idlist);
+ g_array_sort(idlist, compare_uint);
+ nsegs = idlist->len;
+
+ gwy_debug("segment ids (%u)", nsegs);
+ for (i = 0; i < nsegs; i++) {
+ if (g_array_index(idlist, guint, i) != i) {
+ g_array_free(idlist, TRUE);
+ g_hash_table_destroy(idhash);
+ return err_IRREGULAR_NUMBERING(error);
+ }
+ }
+
+ g_hash_table_steal_all(idhash);
+ for (i = 0; i < nids; i++) {
idx = jpkfile->ids[2*i];
- if (idx != idx0)
- break;
+ g_hash_table_insert(idhash,
+ GUINT_TO_POINTER(idx), GUINT_TO_POINTER(TRUE));
}
- nsegs = i;
- if (nids % nsegs != 0)
- return err_IRREGULAR_NUMBERING(error);
+ g_array_set_size(idlist, 0);
+ g_hash_table_foreach(idhash, add_id_to_array, idlist);
+ g_array_sort(idlist, compare_uint);
+ npoints = idlist->len;
- npoints = nids/nsegs;
+ gwy_debug("point ids (%u)", npoints);
for (i = 0; i < npoints; i++) {
- for (j = 0; j < nsegs; j++) {
- k = i*nsegs + j;
- if (jpkfile->ids[2*k] != i || jpkfile->ids[2*k + 1] != j)
- return err_IRREGULAR_NUMBERING(error);
+ if (g_array_index(idlist, guint, i) != i) {
+ g_array_free(idlist, TRUE);
+ g_hash_table_destroy(idhash);
+ return err_IRREGULAR_NUMBERING(error);
}
}
+ g_array_free(idlist, TRUE);
+ g_hash_table_destroy(idhash);
+
+ /* There can be some missing spectra. But if there is too large disparity
+ * between nsegs*npoints and the number of curves then something is amiss.
+ * We do not want to try allocating a huge chunk of memory in result... */
+ if (nids/npoints > nsegs+1)
+ return err_IRREGULAR_NUMBERING(error);
jpkfile->nsegs = nsegs;
jpkfile->npoints = npoints;
- return TRUE;
-}
-
-static gboolean
-enumerate_segments(GwyZipFile zipfile, JPKForceFile *jpkfile)
-{
- GArray *ids;
- if (!gwyzip_first_file(zipfile, NULL))
- return FALSE;
-
- ids = g_array_new(FALSE, FALSE, sizeof(gint));
- do {
- gchar *filename = NULL, *suffix = NULL;
- guint id;
-
- if (!gwyzip_get_current_filename(zipfile, &filename, NULL))
- continue;
+ gwy_debug("expecting missing %u curves", nsegs*npoints - nids);
+ if (nids == nsegs*npoints)
+ return TRUE;
- if ((suffix = match_segment_filename(filename,
- jpkfile->segment_regex,
- &id))) {
- if (gwy_strequal(suffix, "segment-header.properties")) {
- g_array_append_val(ids, id);
- gwy_debug("segment: %s -> %u", filename, id);
+ /* Some curves are missing. Insert markers to the ids[] array so that
+ * we have it formally complete. */
+ allids = g_new(guint, 2*nids*npoints);
+ kk = k = 0;
+ for (i = 0; i < npoints; i++) {
+ for (j = 0; j < nsegs; j++) {
+ k = i*nsegs + j;
+ if (jpkfile->ids[2*kk] != i || jpkfile->ids[2*kk + 1] != j) {
+ allids[2*k] = allids[2*k + 1] = G_MAXUINT;
+ }
+ else {
+ allids[2*k] = i;
+ allids[2*k + 1] = j;
+ kk++;
}
- g_free(suffix);
}
- g_free(filename);
- } while (gwyzip_next_file(zipfile, NULL));
-
- if (!ids->len) {
- g_array_free(ids, TRUE);
- return FALSE;
}
+ gwy_debug("%u missing curves", k+1 - kk);
+ GWY_SWAP(guint*, jpkfile->ids, allids);
- g_array_sort(ids, compare_uint);
- jpkfile->nids = ids->len;
- jpkfile->ids = (guint*)g_array_free(ids, FALSE);
return TRUE;
}
+/*
+ * We want to avoid:
+ * - gwyzip_locate_file() on files that can be at the end; for instance shared
+ * header properties
+ * - scanning the file twice to figure out what kind of data we are dealing
+ * with
+ * Either takes a *long* time.
+ *
+ * So here we gather info about curve segments, read any special file we come
+ * across along the way and decide the file type, all in a single pass.
+ */
static gboolean
-enumerate_map_segments(GwyZipFile zipfile, JPKForceFile *jpkfile)
+scan_file_enumerate_segments(GwyZipFile zipfile, JPKForceFile *jpkfile,
+ GwySetMessageFunc set_message,
+ GError **error)
{
- GArray *ids;
+ GRegex *seg_regex = jpkfile->segment_regex,
+ *map_regex = jpkfile->index_segment_regex;
+ GHashTable *hash;
+ GArray *ids = NULL;
- if (!gwyzip_first_file(zipfile, NULL))
+ gwy_debug("file");
+ if (!gwyzip_first_file(zipfile, error))
return FALSE;
- ids = g_array_new(FALSE, FALSE, 2*sizeof(gint));
do {
gchar *filename = NULL, *suffix = NULL;
- guint id[2];
+ guint id, id2[2];
- if (!gwyzip_get_current_filename(zipfile, &filename, NULL))
- continue;
+ if (!gwyzip_get_current_filename(zipfile, &filename, error)) {
+ if (ids)
+ g_array_free(ids, TRUE);
+ return FALSE;
+ }
- if ((suffix = match_map_segment_filename(filename,
- jpkfile->index_segment_regex,
- id + 0, id + 1))) {
- if (gwy_strequal(suffix, "segment-header.properties")) {
- g_array_append_val(ids, id);
- gwy_debug("map segment: %s -> %u,%u", filename, id[0], id[1]);
+ if (gwy_strequal(filename, "header.properties")) {
+ /* If we encounter main header.properties read it. */
+ if (jpkfile->header_properties)
+ g_warning("%s found twice, using the first one", filename);
+ else {
+ if (!(hash = parse_header_properties(zipfile, jpkfile,
+ error))) {
+ if (ids)
+ g_array_free(ids, TRUE);
+ g_free(filename);
+ return FALSE;
+ }
+ jpkfile->header_properties = hash;
+ jpkfile->last_hash = NULL; /* Take ownership. */
+ }
+ }
+ else if (gwy_strequal(filename, "shared-data/header.properties")) {
+ /* If we encounter shared header.properties read it. */
+ if (jpkfile->shared_header_properties)
+ g_warning("%s found twice, using the first one", filename);
+ else {
+ if (!(hash = parse_header_properties(zipfile, jpkfile,
+ error))) {
+ if (ids)
+ g_array_free(ids, TRUE);
+ g_free(filename);
+ return FALSE;
+ }
+ jpkfile->shared_header_properties = hash;
+ jpkfile->last_hash = NULL; /* Take ownership. */
+ }
+ }
+ else if (jpkfile->type == JPK_FORCE_MAP) {
+ /* File type known (MAP vs QI resolved later), try to get ids. */
+ if ((suffix = match_map_segment_filename(filename, map_regex,
+ id2 + 0, id2 + 1))) {
+ if (gwy_strequal(suffix, "segment-header.properties")) {
+ g_array_append_val(ids, id2);
+ if (set_message && ids->len % 10000 == 0) {
+ g_string_printf(jpkfile->str,
+ _("Scanning file (%u curves)..."),
+ ids->len);
+ if (!set_message(jpkfile->str->str)) {
+ g_free(suffix);
+ g_free(filename);
+ err_CANCELLED(error);
+ g_array_free(ids, TRUE);
+ return FALSE;
+ }
+ }
+ }
+ g_free(suffix);
+ }
+ }
+ else if (jpkfile->type == JPK_FORCE_CURVES) {
+ /* File type known, try to get id. */
+ if ((suffix = match_segment_or_index_filename(filename, seg_regex,
+ &id))) {
+ if (gwy_strequal(suffix, "segment-header.properties")) {
+ g_array_append_val(ids, id);
+ gwy_debug("segment: %s -> %u", filename, id);
+ }
+ g_free(suffix);
+ }
+ }
+ else {
+ /* Try to decide the file type. */
+ if ((suffix = match_map_segment_filename(filename, map_regex,
+ id2 + 0, id2 + 1))) {
+ if (gwy_strequal(suffix, "segment-header.properties")) {
+ jpkfile->type = JPK_FORCE_MAP;
+ ids = g_array_new(FALSE, FALSE, 2*sizeof(gint));
+ g_array_append_val(ids, id2);
+ }
+ g_free(suffix);
+ }
+ else if ((suffix = match_segment_or_index_filename(filename,
+ seg_regex,
+ &id))) {
+ if (gwy_strequal(suffix, "segment-header.properties")) {
+ jpkfile->type = JPK_FORCE_CURVES;
+ ids = g_array_new(FALSE, FALSE, sizeof(gint));
+ g_array_append_val(ids, id);
+ gwy_debug("segment: %s -> %u", filename, id);
+ }
+ g_free(suffix);
}
- g_free(suffix);
}
g_free(filename);
} while (gwyzip_next_file(zipfile, NULL));
- if (!ids->len) {
+ if (!ids) {
+ err_NO_DATA(error);
+ return FALSE;
+ }
+ g_assert(jpkfile->type);
+
+ if (!jpkfile->header_properties) {
+ g_set_error(error, GWY_MODULE_FILE_ERROR, GWY_MODULE_FILE_ERROR_IO,
+ _("File %s is missing in the zip file."),
+ "header.properties");
g_array_free(ids, TRUE);
return FALSE;
}
- g_array_sort(ids, compare_uint2);
+ if (jpkfile->type == JPK_FORCE_MAP)
+ g_array_sort(ids, compare_uint2);
+ else
+ g_array_sort(ids, compare_uint);
+
jpkfile->nids = ids->len;
+ gwy_debug("total nids: %u", jpkfile->nids);
jpkfile->ids = (guint*)g_array_free(ids, FALSE);
return TRUE;
}
@@ -1639,13 +2803,17 @@ parse_header_properties(GwyZipFile zipfile, JPKForceFile *jpkfile,
return NULL;
jpkfile->buffers = g_slist_prepend(jpkfile->buffers, contents);
- hash = g_hash_table_new(g_str_hash, g_str_equal);
gwy_clear(&parser, 1);
parser.comment_prefix = "#";
parser.key_value_separator = "=";
hash = gwy_text_header_parse((gchar*)contents, &parser, NULL, error);
-#ifdef DEBUG
+ if (hash && jpkfile->last_hash) {
+ g_warning("Overwriting last_hash, memory leak is imminent.");
+ }
+ jpkfile->last_hash = hash;
+//#ifdef DEBUG
+#if 0
if (hash) {
gchar *filename;
if (gwyzip_get_current_filename(zipfile, &filename, NULL)) {
@@ -1662,12 +2830,25 @@ parse_header_properties(GwyZipFile zipfile, JPKForceFile *jpkfile,
}
static void
+free_last_hash(JPKForceFile *jpkfile)
+{
+ g_hash_table_destroy(jpkfile->last_hash);
+ jpkfile->last_hash = NULL;
+
+ g_free(jpkfile->buffers->data);
+ jpkfile->buffers = g_slist_delete_link(jpkfile->buffers, jpkfile->buffers);
+}
+
+static void
jpk_force_file_free(JPKForceFile *jpkfile)
{
GSList *l;
guint i;
g_free(jpkfile->ids);
+ g_free(jpkfile->coordinates);
+ g_free(jpkfile->pointmap);
+ g_free(jpkfile->have_coordinates);
for (i = 0; i < jpkfile->nchannels; i++)
g_free(jpkfile->channel_names[i]);
@@ -1676,6 +2857,8 @@ jpk_force_file_free(JPKForceFile *jpkfile)
if (jpkfile->segment_regex)
g_regex_unref(jpkfile->segment_regex);
+ if (jpkfile->index_regex)
+ g_regex_unref(jpkfile->index_regex);
if (jpkfile->index_segment_regex)
g_regex_unref(jpkfile->index_segment_regex);
@@ -1692,27 +2875,19 @@ jpk_force_file_free(JPKForceFile *jpkfile)
if (jpkfile->shared_header_properties)
g_hash_table_destroy(jpkfile->shared_header_properties);
- if (jpkfile->point_header_properties) {
- for (i = 0; i < jpkfile->npoints; i++) {
- if (jpkfile->point_header_properties[i])
- g_hash_table_destroy(jpkfile->point_header_properties[i]);
- }
- g_free(jpkfile->point_header_properties);
- }
-
if (jpkfile->data) {
- for (i = 0; i < jpkfile->nids; i++) {
- if (jpkfile->data[i].header_properties)
- g_hash_table_destroy(jpkfile->data[i].header_properties);
+ for (i = 0; i < jpkfile->nsegs; i++) {
g_free(jpkfile->data[i].data);
g_free(jpkfile->data[i].segment_name);
g_free(jpkfile->data[i].units);
+ g_free(jpkfile->data[i].measured_ndata);
}
g_free(jpkfile->data);
}
while ((l = jpkfile->buffers)) {
jpkfile->buffers = g_slist_next(l);
+ g_free(l->data);
g_slist_free_1(l);
}
}
diff --git a/modules/file/jspmfile.c b/modules/file/jspmfile.c
index 720f1ef..90f5a99 100644
--- a/modules/file/jspmfile.c
+++ b/modules/file/jspmfile.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: jspmfile.c 16831 2014-11-29 10:08:47Z yeti-dn $
+ * @(#) $Id: jspmfile.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2014 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -192,7 +192,7 @@ static GwyModuleInfo module_info = {
"2014",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, jspmfile)
static gboolean
module_register(void)
diff --git a/modules/file/keyence.c b/modules/file/keyence.c
index 5cfe757..9b4869e 100644
--- a/modules/file/keyence.c
+++ b/modules/file/keyence.c
@@ -1,5 +1,5 @@
/*
- * $Id: keyence.c 18034 2016-01-08 14:02:03Z yeti-dn $
+ * $Id: keyence.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2015 David Necas (Yeti).
*
* This program is free software; you can redistribute it and/or modify
@@ -319,7 +319,7 @@ static GwyModuleInfo module_info = {
"2015",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, keyence)
static gboolean
module_register(void)
diff --git a/modules/file/leica.c b/modules/file/leica.c
index d703855..3b30cef 100644
--- a/modules/file/leica.c
+++ b/modules/file/leica.c
@@ -1,5 +1,5 @@
/*
- * $Id: leica.c 19130 2016-10-27 20:58:23Z dn2010 $
+ * $Id: leica.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2014 Daniil Bratashov (dn2010), David Necas (Yeti)..
*
* E-mail: dn2010 at gmail.com.
@@ -180,7 +180,7 @@ static GwyModuleInfo module_info = {
"2016",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, leica)
static gboolean
module_register(void)
diff --git a/modules/file/lextfile.c b/modules/file/lextfile.c
index 0a272f2..35ff94e 100644
--- a/modules/file/lextfile.c
+++ b/modules/file/lextfile.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: lextfile.c 16387 2014-07-10 10:41:50Z yeti-dn $
+ * @(#) $Id: lextfile.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2010 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -84,7 +84,7 @@ static GwyModuleInfo module_info = {
"2010",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, lextfile)
static gboolean
module_register(void)
diff --git a/modules/file/magellan.c b/modules/file/magellan.c
index ac3fb67..a72622b 100644
--- a/modules/file/magellan.c
+++ b/modules/file/magellan.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: magellan.c 17801 2015-12-03 15:02:50Z yeti-dn $
+ * @(#) $Id: magellan.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2013 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -65,7 +65,7 @@ static GwyModuleInfo module_info = {
"2013",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, magellan)
static gboolean
module_register(void)
diff --git a/modules/file/mapvue.c b/modules/file/mapvue.c
index 2a3dd73..5d88e74 100644
--- a/modules/file/mapvue.c
+++ b/modules/file/mapvue.c
@@ -1,5 +1,5 @@
/*
- * $Id: mapvue.c 16387 2014-07-10 10:41:50Z yeti-dn $
+ * $Id: mapvue.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2009,2011 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -471,7 +471,7 @@ static GwyModuleInfo module_info = {
"2009",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, mapvue)
static gboolean
module_register(void)
diff --git a/modules/file/metropro.c b/modules/file/metropro.c
index b7b8d19..eb26af3 100644
--- a/modules/file/metropro.c
+++ b/modules/file/metropro.c
@@ -1,5 +1,5 @@
/*
- * $Id: metropro.c 19044 2016-10-08 19:10:46Z yeti-dn $
+ * $Id: metropro.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2006,2014 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -344,7 +344,7 @@ static GwyModuleInfo module_info = {
"2006",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, metropro)
static gboolean
module_register(void)
diff --git a/modules/file/microprof.c b/modules/file/microprof.c
index 935815e..b30c2b6 100644
--- a/modules/file/microprof.c
+++ b/modules/file/microprof.c
@@ -1,6 +1,6 @@
/*
* $Id: microprof.c 6038 2006-05-23 09:16:26Z yeti-dn $
- * Copyright (C) 2005 David Necas (Yeti), Petr Klapetek.
+ * Copyright (C) 2005-2016 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
* This program is free software; you can redistribute it and/or modify
@@ -84,11 +84,13 @@
#define EXTENSION_TXT ".txt"
enum {
- MICROPROF_HEADER_SIZE = 124,
+ MICROPROF_HEADER_SIZE = 122,
MICROPROF_MIN_TEXT_SIZE = 80,
};
typedef struct {
+ gchar *comment1;
+ gchar *comment2;
guint xres;
guint yres;
gdouble xrange;
@@ -105,6 +107,12 @@ static gint microprof_txt_detect (const GwyFileDetectInfo *fileinfo
static GwyContainer* microprof_load (const gchar *filename,
GwyRunType mode,
GError **error);
+static gboolean microprof_read_string (const guchar *buffer,
+ gsize size,
+ gsize pos,
+ gchar **pstr,
+ guint *len,
+ GError **error);
static GwyDataField* microprof_read_data_field(const MicroProfFile *mfile,
const guchar *buffer);
static GwyContainer* microprof_txt_load (const gchar *filename,
@@ -116,12 +124,12 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Imports MicroProf FRT profilometer data files."),
"Yeti <yeti at gwyddion.net>",
- "0.5",
+ "0.6",
"David Nečas (Yeti) & Petr Klapetek",
"2006",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, microprof)
static gboolean
module_register(void)
@@ -149,7 +157,7 @@ microprof_detect(const GwyFileDetectInfo *fileinfo,
if (only_name)
return g_str_has_suffix(fileinfo->name_lowercase, EXTENSION) ? 10 : 0;
- if (fileinfo->file_size < MICROPROF_HEADER_SIZE
+ if (fileinfo->file_size < MICROPROF_HEADER_SIZE + 1
|| fileinfo->buffer_len < MAGIC_SIZE
|| memcmp(fileinfo->head, MAGIC, MAGIC_SIZE) != 0)
return 0;
@@ -205,24 +213,29 @@ microprof_load(const gchar *filename,
GError **error)
{
enum {
- XRES = 0x0026, YRES = 0x002a,
- XRANGE = 0x0038, YRANGE = 0x0040,
- ZRANGE = 0x006e,
+ COMMENT1_OFFSET = 0x0014,
+ COMMENT2_OFFSET = 0x001a,
+ XRES_OFFSET = 0x0024,
+ YRES_OFFSET = 0x0028,
+ XRANGE_OFFSET = 0x0036,
+ YRANGE_OFFSET = 0x003e,
+ ZRANGE_OFFSET = 0x006c,
};
- GwyContainer *container = NULL;
+ GwyContainer *container = NULL, *meta = NULL;
guchar *buffer = NULL;
const guchar *p;
MicroProfFile mfile;
- gsize size = 0;
+ gsize size = 0, extra_len = 0;
GError *err = NULL;
- guint i, ndata, datasize;
+ guint i, ndata, datasize, len;
if (!gwy_file_get_contents(filename, &buffer, &size, &err)) {
err_GET_FILE_CONTENTS(error, &err);
return NULL;
}
- if (size < MICROPROF_HEADER_SIZE) {
+ gwy_clear(&mfile, 1);
+ if (size < MICROPROF_HEADER_SIZE + 1) {
err_TOO_SHORT(error);
goto fail;
}
@@ -232,37 +245,60 @@ microprof_load(const gchar *filename,
goto fail;
}
- p = buffer + XRES;
+ if (!microprof_read_string(buffer, size, COMMENT1_OFFSET + extra_len,
+ &mfile.comment1, &len, error))
+ goto fail;
+ extra_len += len;
+
+ if (!microprof_read_string(buffer, size, COMMENT2_OFFSET + extra_len,
+ &mfile.comment2, &len, error))
+ goto fail;
+ extra_len += len;
+
+ gwy_debug("reading xres from offset 0x%04lx",
+ (gulong)(XRES_OFFSET + extra_len));
+ p = buffer + XRES_OFFSET + extra_len;
mfile.xres = gwy_get_guint16_le(&p);
+ gwy_debug("xres %u", mfile.xres);
if (err_DIMENSION(error, mfile.xres))
goto fail;
- p = buffer + YRES;
+ gwy_debug("reading yres from offset 0x%04lx",
+ (gulong)(YRES_OFFSET + extra_len));
+ p = buffer + YRES_OFFSET + extra_len;
mfile.yres = gwy_get_guint16_le(&p);
+ gwy_debug("yres %u", mfile.yres);
if (err_DIMENSION(error, mfile.xres))
goto fail;
- p = buffer + XRANGE;
+ gwy_debug("reading xrange from offset 0x%04lx",
+ (gulong)(XRANGE_OFFSET + extra_len));
+ p = buffer + XRANGE_OFFSET + extra_len;
mfile.xrange = gwy_get_gdouble_le(&p);
if (!(mfile.xrange = fabs(mfile.xrange))) {
g_warning("Real x size is 0.0, fixing to 1.0");
mfile.xrange = 1.0;
}
- p = buffer + YRANGE;
+ gwy_debug("reading yrange from offset 0x%04lx",
+ (gulong)(YRANGE_OFFSET + extra_len));
+ p = buffer + YRANGE_OFFSET + extra_len;
mfile.yrange = gwy_get_gdouble_le(&p);
if (!(mfile.yrange = fabs(mfile.yrange))) {
g_warning("Real y size is 0.0, fixing to 1.0");
mfile.yrange = 1.0;
}
- p = buffer + ZRANGE;
+ p = buffer + ZRANGE_OFFSET + extra_len;
mfile.zscale = gwy_get_gdouble_le(&p);
datasize = 2*mfile.xres*mfile.yres;
- if (err_SIZE_MISMATCH(error, datasize, size - MICROPROF_HEADER_SIZE, FALSE))
+ if (err_SIZE_MISMATCH(error, datasize,
+ size - MICROPROF_HEADER_SIZE - extra_len, FALSE))
goto fail;
/* FIXME: There is weird stuff between channels. Need specs.
+ * Moreover, the second image seems to be byte-to-byte identical.
+ * So maybe ignoring it is the right thing to do.
ndata = (size - MICROPROF_HEADER_SIZE)/datasize;
if (!ndata) {
err_NO_DATA(error);
@@ -272,26 +308,77 @@ microprof_load(const gchar *filename,
ndata = 1;
container = gwy_container_new();
- mfile.data = buffer + MICROPROF_HEADER_SIZE;
+ if (mfile.comment1 || mfile.comment2) {
+ meta = gwy_container_new();
+ if (mfile.comment1) {
+ gwy_container_set_const_string_by_name(meta, "Comment 1",
+ mfile.comment1);
+ }
+ if (mfile.comment2) {
+ gwy_container_set_const_string_by_name(meta, "Comment 2",
+ mfile.comment2);
+ }
+ }
+
+ mfile.data = buffer + MICROPROF_HEADER_SIZE + extra_len;
for (i = 0; i < ndata; i++) {
GwyDataField *dfield;
GQuark quark;
- dfield = microprof_read_data_field(&mfile,
- mfile.data + i*datasize);
+ dfield = microprof_read_data_field(&mfile, mfile.data + i*datasize);
quark = gwy_app_get_data_key_for_id(i);
gwy_container_set_object(container, quark, dfield);
g_object_unref(dfield);
+ /* FIXME: Duplicate meta if we ever are going to have multiple
+ * channels here. */
+ if (meta) {
+ quark = gwy_app_get_data_meta_key_for_id(i);
+ gwy_container_set_object(container, quark, meta);
+ }
+
gwy_app_channel_title_fall_back(container, i);
gwy_file_channel_import_log_add(container, i, NULL, filename);
}
+ GWY_OBJECT_UNREF(meta);
+
fail:
+ g_free(mfile.comment1);
+ g_free(mfile.comment2);
gwy_file_abandon_contents(buffer, size, NULL);
return container;
}
+static gboolean
+microprof_read_string(const guchar *buffer, gsize size, gsize pos,
+ gchar **pstr, guint *len, GError **error)
+{
+ const guchar *p;
+
+ if (pos > size - sizeof(guint32)) {
+ g_set_error(error, GWY_MODULE_FILE_ERROR, GWY_MODULE_FILE_ERROR_DATA,
+ _("File header is truncated."));
+ return FALSE;
+ }
+
+ gwy_debug("reading string len from offset 0x%04lx", (gulong)pos);
+ p = buffer + pos;
+ *len = gwy_get_guint32_le(&p);
+ gwy_debug("string length %u", *len);
+ if (*len < 2)
+ return TRUE;
+
+ pos += sizeof(guint32);
+ if (*len > size - pos) {
+ g_set_error(error, GWY_MODULE_FILE_ERROR, GWY_MODULE_FILE_ERROR_DATA,
+ _("File header is truncated."));
+ return FALSE;
+ }
+ *pstr = g_strndup(p, *len);
+ return TRUE;
+}
+
static GwyDataField*
microprof_read_data_field(const MicroProfFile *mfile,
const guchar *buffer)
diff --git a/modules/file/miffile.c b/modules/file/miffile.c
index 846a94e..ef24110 100644
--- a/modules/file/miffile.c
+++ b/modules/file/miffile.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: miffile.c 17718 2015-11-06 08:04:04Z pecold $
+ * @(#) $Id: miffile.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2010 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -204,7 +204,7 @@ static GwyModuleInfo module_info = {
"2010",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, miffile)
static gboolean
module_register(void)
diff --git a/modules/file/mifile.c b/modules/file/mifile.c
index 8324c98..d9708d8 100644
--- a/modules/file/mifile.c
+++ b/modules/file/mifile.c
@@ -1,5 +1,5 @@
/*
- * $Id: mifile.c 17957 2016-01-03 11:11:32Z dn2010 $
+ * $Id: mifile.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2005 Chris Anderson, Molecular Imaging Corp.
* E-mail: sidewinder.asu at gmail.com
*
@@ -181,7 +181,7 @@ static GwyModuleInfo module_info = {
"2006",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, mifile)
static gboolean
module_register(void)
diff --git a/modules/file/mulfile.c b/modules/file/mulfile.c
index cb81a9b..16d0e6b 100644
--- a/modules/file/mulfile.c
+++ b/modules/file/mulfile.c
@@ -1,5 +1,5 @@
/*
- * $Id: mulfile.c 19071 2016-10-14 09:02:41Z yeti-dn $
+ * $Id: mulfile.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2011 David Necas (Yeti).
*
* This program is free software; you can redistribute it and/or modify
@@ -164,7 +164,7 @@ static GwyModuleInfo module_info = {
"2011",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, mulfile)
static gboolean
module_register(void)
diff --git a/modules/file/nanoeducator.c b/modules/file/nanoeducator.c
index 72dab2d..d7827b9 100644
--- a/modules/file/nanoeducator.c
+++ b/modules/file/nanoeducator.c
@@ -1,5 +1,5 @@
/*
- * $Id: nanoeducator.c 19071 2016-10-14 09:02:41Z yeti-dn $
+ * $Id: nanoeducator.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2009 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -294,7 +294,7 @@ static GwyModuleInfo module_info = {
"2009",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, nanoeducator)
static gboolean
module_register(void)
diff --git a/modules/file/nanomagnetics.c b/modules/file/nanomagnetics.c
index d30a1b5..18fc35c 100644
--- a/modules/file/nanomagnetics.c
+++ b/modules/file/nanomagnetics.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: nanomagnetics.c 19216 2016-11-09 10:39:06Z yeti-dn $
+ * @(#) $Id: nanomagnetics.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2012 Sameer Grover, David Necas (Yeti).
* E-mail: sameer.grover.1 at gmail.com, yeti at gwyddion.net.
*
@@ -406,7 +406,7 @@ static GwyModuleInfo module_info = {
"2012",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, nanomagnetics)
static gboolean
module_register(void)
diff --git a/modules/file/nanonics.c b/modules/file/nanonics.c
index 0e989a7..932c476 100644
--- a/modules/file/nanonics.c
+++ b/modules/file/nanonics.c
@@ -1,5 +1,5 @@
/*
- * $Id: nanonics.c 17180 2015-05-25 09:21:15Z yeti-dn $
+ * $Id: nanonics.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2009-2011 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -108,7 +108,7 @@ static GwyModuleInfo module_info = {
"2009",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, nanonics)
static gboolean
module_register(void)
diff --git a/modules/file/nanonis.c b/modules/file/nanonis.c
index 25b6b7e..ee97db2 100644
--- a/modules/file/nanonis.c
+++ b/modules/file/nanonis.c
@@ -1,5 +1,5 @@
/*
- * $Id: nanonis.c 19029 2016-10-04 12:37:34Z yeti-dn $
+ * $Id: nanonis.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2006,2015 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -122,7 +122,7 @@ static const GwyEnum directions[] = {
{ "both", DIR_BOTH, },
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, nanonis)
static gboolean
module_register(void)
diff --git a/modules/file/nanoobserver.c b/modules/file/nanoobserver.c
index 3d56f9f..f640f22 100644
--- a/modules/file/nanoobserver.c
+++ b/modules/file/nanoobserver.c
@@ -1,6 +1,6 @@
/*
- * $Id: nanoobserver.c 19044 2016-10-08 19:10:46Z yeti-dn $
- * Copyright (C) 2012 David Necas (Yeti).
+ * $Id: nanoobserver.c 19476 2017-02-15 18:11:18Z yeti-dn $
+ * Copyright (C) 2012-2017 David Necas (Yeti).
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -29,17 +29,26 @@
/**
* [FILE-MAGIC-FILEMAGIC]
- * # NanoObserver
+ * # Nano-Solution/NanoObserver 1.23
* # A ZIP archive, we have to look for Scan/Measure.xml as the first file.
* 0 string PK\x03\x04
- * >30 string Scan/Measure.xml Nanomagnetics NMI SPM data version 3
+ * >30 string Scan/Measure.xml Nano-Solution SPM data version 1.23
+ **/
+
+/**
+ * [FILE-MAGIC-FILEMAGIC]
+ * # Nano-Solution/NanoObserver 1.33
+ * # A ZIP archive, we have to look for NAO_v133.txt as the first file.
+ * # This is a dummy file put there exactly for indentification purposes.
+ * 0 string PK\x03\x04
+ * >30 string NAO_v133.txt Nano-Solution SPM data version 1.33
**/
/**
* [FILE-MAGIC-USERGUIDE]
- * NanoObserver
+ * Nano-Solution/NanoObserver
* .nao
- * Read
+ * Read SPS
**/
#include "config.h"
@@ -58,61 +67,140 @@
#define MAGIC "PK\x03\x04"
#define MAGIC_SIZE (sizeof(MAGIC)-1)
-#define MAGIC0 "Scan"
-#define MAGIC1 "Scan/Streams.xml"
-#define MAGIC2 "Scan/Measure.xml"
-#define MAGIC3 "Scan/Data"
+
+#define MAGIC123_0 "Scan"
+#define MAGIC123_1 "Scan/Streams.xml"
+#define MAGIC123_2 "Scan/Measure.xml"
+#define MAGIC123_3 "Scan/Data"
+
+#define MAGIC133_0 "NAO_v133.txt"
+#define MAGIC133_1 "Data/Imaging.xml"
+#define MAGIC133_2 "Data/Spectro.xml"
+
#define BLOODY_UTF8_BOM "\xef\xbb\xbf"
#define EXTENSION ".nao"
-typedef enum {
- DIR_BAD,
- DIR_FORWARD,
- DIR_BACKWARD,
-} NAODirection;
-
typedef struct {
gchar *name;
gchar *units;
+ gchar *dir;
+ /* 1.33 only */
+ gchar *filename;
} NAOStream;
typedef struct {
+ gchar *dir;
+ gchar *name;
+ gchar *unit;
+ /* What the header says */
+ guint capacity;
+ guint sizeused;
+ /* Actual data */
+ guint nvalues;
+ gdouble *values;
+} NAOSpectrumData;
+
+typedef struct {
+ /* Filled from imaging header, if any. */
+ gdouble x;
+ gdouble y;
+ gchar *filename;
+ /* Filled by parsing spectrum XML file. */
+ GHashTable *hash;
+ GArray *specdata;
+ gdouble sweep_from;
+ gdouble sweep_to;
+ gchar *sweep_unit;
+ /* Borrowed from main NAOFile. */
+ GString *path;
+ /* Workspace */
+ gchar *current_name;
+ gchar *current_unit;
+ gchar *spectro_parameters;
+ guint current_specdata_id;
+} NAOSpectrum;
+
+typedef struct {
guint xres;
guint yres;
gdouble xreal;
gdouble yreal;
- guint nstreams;
- NAOStream *streams;
+ GArray *streams;
+ GArray *spectra;
GHashTable *hash;
+ GwyContainer *meta;
/* Workspace */
- gboolean have_resolution;
- gboolean have_size;
GString *path;
+ gchar *current_name;
+ gchar *current_unit;
+ gchar *imaging_parameters;
+ /* For the log */
+ const gchar *filename;
} NAOFile;
-static gboolean module_register (void);
-static gint nao_detect (const GwyFileDetectInfo *fileinfo,
- gboolean only_name);
-static GwyContainer* nao_load (const gchar *filename,
- GwyRunType mode,
- GError **error);
-static void add_meta (gpointer hkey,
- gpointer hvalue,
- gpointer user_data);
-static GwyDataField* nao_read_field (GwyZipFile zipfile,
- NAOFile *naofile,
- guint id);
-static gboolean nao_parse_measure (GwyZipFile zipfile,
- NAOFile *naofile,
- GError **error);
-static void nao_file_free (NAOFile *naofile);
+static gboolean module_register (void);
+static gint nao_detect (const GwyFileDetectInfo *fileinfo,
+ gboolean only_name);
+static gint nao123_detect (const GwyFileDetectInfo *fileinfo);
+static gint nao133_detect (const GwyFileDetectInfo *fileinfo);
+static GwyContainer* nao_load (const gchar *filename,
+ GwyRunType mode,
+ GError **error);
+static GwyContainer* nao123_load (GwyZipFile zipfile,
+ NAOFile *naofile,
+ GError **error);
+static GwyContainer* nao133_imaging_load (GwyZipFile zipfile,
+ NAOFile *naofile,
+ GError **error);
+static GwyContainer* nao133_spectro_load (GwyZipFile zipfile,
+ NAOFile *naofile,
+ GError **error);
+static void add_meta (gpointer hkey,
+ gpointer hvalue,
+ gpointer user_data);
+static GwyDataField* nao_read_field (GwyZipFile zipfile,
+ NAOFile *naofile,
+ guint id,
+ GError **error);
+static gboolean nao_parse_xml_header (GwyZipFile zipfile,
+ NAOFile *naofile,
+ const gchar *filename,
+ GMarkupParser *parser,
+ GError **error);
+static gboolean nao133_parse_spectrum (GwyZipFile zipfile,
+ NAOSpectrum *spectrum,
+ GError **error);
+static void create_channel (NAOFile *naofile,
+ GwyDataField *dfield,
+ NAOStream *stream,
+ guint channelno,
+ GwyContainer *container);
+static void create_spectra (NAOFile *naofile,
+ GwyContainer *container);
+static GwyDataLine* create_dataline_for_spectrum(NAOSpectrumData *specdata,
+ NAOSpectrum *spectrum);
+static void add_dline_to_spectra (GPtrArray *sps,
+ GwyDataLine *dline,
+ const gchar *xtitle,
+ const gchar *name,
+ const gchar *dir,
+ gdouble x,
+ gdouble y);
+static gboolean find_size_and_resolution (NAOFile *naofile,
+ GError **error);
+static gboolean find_spectrum_abscissa (NAOSpectrum *spectrum,
+ GError **error);
+static const gchar* find_attribute (const gchar **attribute_names,
+ const gchar **attribute_values,
+ const gchar *attrname);
+static void nao_file_free (NAOFile *naofile);
static GwyModuleInfo module_info = {
GWY_MODULE_ABI_VERSION,
&module_register,
- N_("Reads NanoObserver .nao files."),
+ N_("Reads Nano-Solution/NanoObserver .nao files."),
"Yeti <yeti at gwyddion.net>",
- "1.4",
+ "2.0",
"David Nečas (Yeti)",
"2012",
};
@@ -123,7 +211,7 @@ static gboolean
module_register(void)
{
gwy_file_func_register("nanoobserver",
- N_("NanoObserver data (.nao)"),
+ N_("Nano-Solution/NanoObserver data (.nao)"),
(GwyFileDetectFunc)&nao_detect,
(GwyFileLoadFunc)&nao_load,
NULL,
@@ -136,7 +224,7 @@ static gint
nao_detect(const GwyFileDetectInfo *fileinfo,
gboolean only_name)
{
- GwyZipFile zipfile;
+ gint score;
if (only_name)
return g_str_has_suffix(fileinfo->name_lowercase, EXTENSION) ? 15 : 0;
@@ -146,31 +234,114 @@ nao_detect(const GwyFileDetectInfo *fileinfo,
|| memcmp(fileinfo->head, MAGIC, MAGIC_SIZE) != 0)
return 0;
+ /* Format versions. */
+ if ((score = nao133_detect(fileinfo)) > 0)
+ return score;
+ if ((score = nao123_detect(fileinfo)) > 0)
+ return score;
+
+ return 0;
+}
+
+static gint
+nao123_detect(const GwyFileDetectInfo *fileinfo)
+{
+ GwyZipFile zipfile;
+ gint score = 0;
+
/* It contains directory Scan so this should be somewehre near the begining
* of the file. */
- if (!gwy_memmem(fileinfo->head, fileinfo->buffer_len,
- MAGIC0, sizeof(MAGIC0)-1))
+ if (gwy_memmem(fileinfo->head, fileinfo->buffer_len,
+ MAGIC123_0, sizeof(MAGIC123_0)-1)) {
+ gwy_debug("found magic0 %s", MAGIC123_0);
+ }
+ else {
+ gwy_debug("not found magic0 %s", MAGIC123_0);
return 0;
- if (!gwy_memmem(fileinfo->head, fileinfo->buffer_len,
- MAGIC1, sizeof(MAGIC1)-1)
- && !gwy_memmem(fileinfo->head, fileinfo->buffer_len,
- MAGIC2, sizeof(MAGIC2)-1)
- && !gwy_memmem(fileinfo->head, fileinfo->buffer_len,
- MAGIC3, sizeof(MAGIC3)-1))
+ }
+
+ if (gwy_memmem(fileinfo->head, fileinfo->buffer_len,
+ MAGIC123_1, sizeof(MAGIC123_1)-1)) {
+ gwy_debug("found magic1 %s", MAGIC123_1);
+ }
+ else if (gwy_memmem(fileinfo->head, fileinfo->buffer_len,
+ MAGIC123_2, sizeof(MAGIC123_2)-1)) {
+ gwy_debug("found magic2 %s", MAGIC123_2);
+ }
+ else if (gwy_memmem(fileinfo->head, fileinfo->buffer_len,
+ MAGIC123_3, sizeof(MAGIC123_3)-1)) {
+ gwy_debug("found magic3 %s", MAGIC123_3);
+ }
+ else {
+ gwy_debug("no magic filename fragment found.");
return 0;
+ }
/* We have to realy look inside. */
if (!(zipfile = gwyzip_open(fileinfo->name)))
return 0;
- if (!gwyzip_locate_file(zipfile, "Scan/Measure.xml", 1, NULL)) {
- gwyzip_close(zipfile);
+ if (gwyzip_locate_file(zipfile, "Scan/Measure.xml", 1, NULL)) {
+ gwy_debug("found Scan/Measure.xml in the archive");
+ score = 100;
+ }
+ else {
+ gwy_debug("cannot find Scan/Measure.xml in the archive");
+ }
+ gwyzip_close(zipfile);
+
+ return score;
+}
+
+static gint
+nao133_detect(const GwyFileDetectInfo *fileinfo)
+{
+ GwyZipFile zipfile;
+ gint score = 0;
+
+ /* It contains directory Scan so this should be somewehre near the begining
+ * of the file. */
+ if (gwy_memmem(fileinfo->head, fileinfo->buffer_len,
+ MAGIC133_0, sizeof(MAGIC133_0)-1)) {
+ gwy_debug("found magic0 %s", MAGIC133_0);
+ }
+ else {
+ gwy_debug("not found magic0 %s", MAGIC133_0);
+ return 0;
+ }
+
+ if (gwy_memmem(fileinfo->head, fileinfo->buffer_len,
+ MAGIC133_1, sizeof(MAGIC133_1)-1)) {
+ gwy_debug("found magic1 %s", MAGIC133_1);
+ }
+ else if (gwy_memmem(fileinfo->head, fileinfo->buffer_len,
+ MAGIC133_2, sizeof(MAGIC133_2)-1)) {
+ gwy_debug("found magic2 %s", MAGIC133_2);
+ }
+ else {
+ gwy_debug("no magic filename fragment found.");
return 0;
}
+ /* We have to realy look inside. */
+ if (!(zipfile = gwyzip_open(fileinfo->name)))
+ return 0;
+
+ if (gwyzip_locate_file(zipfile, "Data/Imaging.xml", 1, NULL)) {
+ gwy_debug("found Data/Imaging.xml in the archive");
+ score = 100;
+ }
+ else if (gwyzip_locate_file(zipfile, "Data/Spectro.xml", 1, NULL)) {
+ gwy_debug("found Data/Spectro.xml in the archive");
+ score = 100;
+ }
+ else {
+ gwy_debug("cannot find neither Data/Imaging.xml nor Data/Spectro.xml "
+ "in the archive");
+ }
gwyzip_close(zipfile);
- return 100;
+ return score;
}
static GwyContainer*
@@ -178,13 +349,9 @@ nao_load(const gchar *filename,
G_GNUC_UNUSED GwyRunType mode,
GError **error)
{
- GwyContainer *container = NULL, *meta = NULL;
- gchar *filename_curr;
+ GwyContainer *container = NULL;
NAOFile naofile;
GwyZipFile zipfile;
- NAODirection dir;
- guint id, channelno = 0;
- gboolean status;
zipfile = gwyzip_open(filename);
if (!zipfile) {
@@ -195,85 +362,24 @@ nao_load(const gchar *filename,
}
gwy_clear(&naofile, 1);
- if (!nao_parse_measure(zipfile, &naofile, error))
- goto fail;
-
- status = gwyzip_first_file(zipfile, error);
- if (!status)
- goto fail;
-
- container = gwy_container_new();
- if (g_hash_table_size(naofile.hash)) {
- meta = gwy_container_new();
- g_hash_table_foreach(naofile.hash, &add_meta, meta);
+ naofile.filename = filename;
+ if (gwyzip_locate_file(zipfile, "NAO_v133.txt", 1, NULL)) {
+ if (gwyzip_locate_file(zipfile, "Data/Imaging.xml", 1, NULL))
+ container = nao133_imaging_load(zipfile, &naofile, error);
+ else if (gwyzip_locate_file(zipfile, "Data/Spectro.xml", 1, NULL))
+ container = nao133_spectro_load(zipfile, &naofile, error);
+ else
+ err_FILE_TYPE(error, "Nano-Solution");
}
-
- while (status && gwyzip_get_current_filename(zipfile, &filename_curr,
- NULL)) {
- if (g_str_has_prefix(filename_curr, "Scan/Data/")) {
- const gchar *dataname = filename_curr + strlen("Scan/Data/");
- dir = DIR_BAD;
-
- gwy_debug("dataname <%s>", dataname);
- for (id = 0; id < naofile.nstreams; id++) {
- guint len = strlen(naofile.streams[id].name);
- if (strncmp(dataname, naofile.streams[id].name, len) == 0) {
- if (gwy_strequal(dataname + len, "_Left.dat"))
- dir = DIR_FORWARD;
- else if (gwy_strequal(dataname + len, "_Right.dat"))
- dir = DIR_BACKWARD;
- }
- if (dir != DIR_BAD)
- break;
- }
- if (dir != DIR_BAD) {
- GwyDataField *field = nao_read_field(zipfile, &naofile, id);
- if (field) {
- GQuark key = gwy_app_get_data_key_for_id(channelno);
- gchar *strkey, *title;
-
- gwy_container_set_object(container, key, field);
- g_object_unref(field);
-
- strkey = g_strdup_printf("/%u/data/title", channelno);
- title = g_strdup_printf("%s %s",
- naofile.streams[id].name,
- dir == DIR_FORWARD ? "Left" : "Right");
- gwy_container_set_string_by_name(container, strkey, title);
- g_free(strkey);
-
- if (meta) {
- GwyContainer *thismeta;
-
- strkey = g_strdup_printf("/%u/meta", channelno);
- thismeta = GWY_CONTAINER(gwy_serializable_duplicate
- (G_OBJECT(meta)));
- gwy_container_set_object_by_name(container, strkey,
- thismeta);
- g_object_unref(thismeta);
- g_free(strkey);
- }
- gwy_file_channel_import_log_add(container, channelno,
- NULL, filename);
-
- channelno++;
- }
- }
-
- }
- g_free(filename_curr);
- status = gwyzip_next_file(zipfile, NULL);
+ else if (gwyzip_locate_file(zipfile, "Scan/Measure.xml", 1, NULL)) {
+ container = nao123_load(zipfile, &naofile, error);
+ }
+ else {
+ err_FILE_TYPE(error, "Nano-Solution");
}
-fail:
gwyzip_close(zipfile);
nao_file_free(&naofile);
- GWY_OBJECT_UNREF(meta);
- if (!channelno) {
- GWY_OBJECT_UNREF(container);
- if (error && !*error)
- err_NO_DATA(error);
- }
return container;
}
@@ -286,33 +392,34 @@ add_meta(gpointer hkey, gpointer hvalue, gpointer user_data)
}
static GwyDataField*
-nao_read_field(GwyZipFile zipfile, NAOFile *naofile, guint id)
+nao_read_field(GwyZipFile zipfile, NAOFile *naofile, guint id, GError **error)
{
gsize size, expected_size;
guint width, G_GNUC_UNUSED height, nscanlines, i, j;
- guchar *buffer = gwyzip_get_file_content(zipfile, &size, NULL);
- const guchar *p = buffer;
+ guchar *buffer;
+ const guchar *p;
+ const gchar *units;
GwyDataField *field;
gdouble *data;
- if (!buffer)
+ if (!(buffer = gwyzip_get_file_content(zipfile, &size, error)))
return NULL;
if (size < 3*4 + 4 + 4) {
- g_warning("Too short data file (%lu bytes).", (gulong)size);
+ g_set_error(error, GWY_MODULE_FILE_ERROR, GWY_MODULE_FILE_ERROR_DATA,
+ _("Data block is truncated"));
g_free(buffer);
return NULL;
}
+ p = buffer;
width = gwy_get_guint32_le(&p);
height = gwy_get_guint32_le(&p);
nscanlines = gwy_get_guint32_le(&p);
gwy_debug("[%u] %u %u %u", id, width, height, nscanlines);
expected_size = 3*4 + 4*nscanlines*(width + 1);
- if (size != expected_size) {
- g_warning("Data file size %lu does not match expected %lu.",
- (gulong)size, (gulong)expected_size);
+ if (err_SIZE_MISMATCH(error, expected_size, size, TRUE)) {
g_free(buffer);
return NULL;
}
@@ -337,23 +444,22 @@ nao_read_field(GwyZipFile zipfile, NAOFile *naofile, guint id)
/* Older versions of the format had human-readable units there but we
* disregard these. */
- gwy_si_unit_set_from_string(gwy_data_field_get_si_unit_z(field),
- naofile->streams[id].units);
+ units = g_array_index(naofile->streams, NAOStream, id).units;
+ gwy_si_unit_set_from_string(gwy_data_field_get_si_unit_z(field), units);
gwy_si_unit_set_from_string(gwy_data_field_get_si_unit_xy(field), "m");
return field;
}
static void
-nao_streams_start_element(G_GNUC_UNUSED GMarkupParseContext *context,
- const gchar *element_name,
- const gchar **attribute_names,
- const gchar **attribute_values,
- gpointer user_data,
- G_GNUC_UNUSED GError **error)
+nao123_start_element(G_GNUC_UNUSED GMarkupParseContext *context,
+ const gchar *element_name,
+ const gchar **attribute_names,
+ const gchar **attribute_values,
+ gpointer user_data,
+ G_GNUC_UNUSED GError **error)
{
NAOFile *naofile = (NAOFile*)user_data;
- guint i;
gchar *path;
g_string_append_c(naofile->path, '/');
@@ -361,30 +467,27 @@ nao_streams_start_element(G_GNUC_UNUSED GMarkupParseContext *context,
path = naofile->path->str;
if (gwy_strequal(path, "/Measure/Streams/Stream")) {
- const gchar *name = NULL, *unit = NULL;
- gwy_debug("Stream");
- for (i = 0; attribute_names[i]; i++) {
- if (gwy_strequal(attribute_names[i], "Id"))
- name = attribute_values[i];
- else if (gwy_strequal(attribute_names[i], "Unit"))
- unit = attribute_values[i];
- }
- if (name && unit) {
+ const gchar *name, *unit;
+
+ gwy_debug(element_name);
+ if ((name = find_attribute(attribute_names, attribute_values, "Id"))
+ && (unit = find_attribute(attribute_names, attribute_values,
+ "Unit"))) {
+ NAOStream stream;
gwy_debug("Adding stream %s [%s]", name, unit);
- naofile->streams = g_renew(NAOStream, naofile->streams,
- naofile->nstreams+1);
- naofile->streams[naofile->nstreams].name = g_strdup(name);
- naofile->streams[naofile->nstreams].units = g_strdup(unit);
- naofile->nstreams++;
+ gwy_clear(&stream, 1);
+ stream.name = g_strdup(name);
+ stream.units = g_strdup(unit);
+ g_array_append_val(naofile->streams, stream);
}
}
}
static void
-nao_streams_end_element(G_GNUC_UNUSED GMarkupParseContext *context,
- const gchar *element_name,
- gpointer user_data,
- G_GNUC_UNUSED GError **error)
+nao123_end_element(G_GNUC_UNUSED GMarkupParseContext *context,
+ const gchar *element_name,
+ gpointer user_data,
+ G_GNUC_UNUSED GError **error)
{
NAOFile *naofile = (NAOFile*)user_data;
guint n = strlen(element_name), len = naofile->path->len;
@@ -397,62 +500,364 @@ nao_streams_end_element(G_GNUC_UNUSED GMarkupParseContext *context,
}
static void
-nao_streams_text(G_GNUC_UNUSED GMarkupParseContext *context,
- const gchar *text,
- gsize text_len,
- gpointer user_data,
- G_GNUC_UNUSED GError **error)
+nao123_text(G_GNUC_UNUSED GMarkupParseContext *context,
+ const gchar *text,
+ gsize text_len,
+ gpointer user_data,
+ G_GNUC_UNUSED GError **error)
{
NAOFile *naofile = (NAOFile*)user_data;
gchar *path = naofile->path->str;
- if (gwy_strequal(path, "/Measure/Parameters/Resolution")) {
- gchar *s = g_strndup(text, text_len);
- gwy_debug("Resolution");
- if (sscanf(s, "%u, %u", &naofile->xres, &naofile->yres) == 2
- && !err_DIMENSION(NULL, naofile->xres)
- && !err_DIMENSION(NULL, naofile->yres))
- naofile->have_resolution = TRUE;
- g_free(s);
- }
- else if (gwy_strequal(path, "/Measure/Parameters/Size")) {
- gchar *end, *s = g_strndup(text, text_len);
- gwy_debug("Size");
- if ((naofile->xreal = g_ascii_strtod(s, &end)) > 0.0
- && *end == ','
- && (naofile->yreal = g_ascii_strtod(end+1, NULL)) > 0.0)
- naofile->have_size = TRUE;
- g_free(s);
- }
- else if (g_str_has_prefix(path, "/Measure/Parameters/")) {
+ if (g_str_has_prefix(path, "/Measure/Parameters/")) {
gchar *name = g_strdup(path + strlen("/Measure/Parameters/"));
gchar *value = g_strndup(text, text_len);
g_strdelimit(name, "/", ' ');
g_strstrip(value);
- if (strlen(value))
+ if (strlen(value)) {
+ if (!naofile->hash) {
+ naofile->hash = g_hash_table_new_full(g_str_hash, g_str_equal,
+ g_free, g_free);
+ }
g_hash_table_replace(naofile->hash, name, value);
+ }
else
g_free(value);
}
}
-static gboolean
-nao_parse_measure(GwyZipFile zipfile,
- NAOFile *naofile,
- GError **error)
+static GwyContainer*
+nao123_load(GwyZipFile zipfile, NAOFile *naofile, GError **error)
+{
+ GMarkupParser parser = {
+ &nao123_start_element,
+ &nao123_end_element,
+ &nao123_text,
+ NULL,
+ NULL,
+ };
+ GwyContainer *container = NULL;
+ gchar *filename_curr;
+ guint len, id, channelno = 0;
+ gboolean status;
+
+ if (!nao_parse_xml_header(zipfile, naofile, "Scan/Measure.xml", &parser,
+ error))
+ goto fail;
+
+ status = gwyzip_first_file(zipfile, error);
+ if (!status)
+ goto fail;
+
+ container = gwy_container_new();
+ while (status && gwyzip_get_current_filename(zipfile, &filename_curr,
+ NULL)) {
+ if (g_str_has_prefix(filename_curr, "Scan/Data/")) {
+ const gchar *dataname = filename_curr + strlen("Scan/Data/");
+ NAOStream *stream = NULL;
+
+ gwy_debug("dataname <%s>", dataname);
+ for (id = 0; id < naofile->streams->len; id++) {
+ stream = &g_array_index(naofile->streams, NAOStream, id);
+ len = strlen(stream->name);
+ if (strncmp(dataname, stream->name, len) == 0) {
+ if (gwy_strequal(dataname + len, "_Left.dat"))
+ stream->dir = g_strdup("Left");
+ else if (gwy_strequal(dataname + len, "_Right.dat"))
+ stream->dir = g_strdup("Right");
+ }
+ if (stream->dir)
+ break;
+ }
+ if (stream->dir) {
+ GwyDataField *dfield = nao_read_field(zipfile, naofile, id,
+ error);
+ if (!dfield)
+ goto fail;
+ create_channel(naofile, dfield, stream, channelno, container);
+ channelno++;
+ }
+ }
+ g_free(filename_curr);
+ status = gwyzip_next_file(zipfile, NULL);
+ }
+
+fail:
+ if (!container || !gwy_container_get_n_items(container)) {
+ GWY_OBJECT_UNREF(container);
+ if (error && !*error)
+ err_NO_DATA(error);
+ }
+
+ return container;
+}
+
+static void
+nao133_imaging_start_element(G_GNUC_UNUSED GMarkupParseContext *context,
+ const gchar *element_name,
+ const gchar **attribute_names,
+ const gchar **attribute_values,
+ gpointer user_data,
+ G_GNUC_UNUSED GError **error)
+{
+ NAOFile *naofile = (NAOFile*)user_data;
+ gchar *path;
+ guint n, i;
+
+ g_string_append_c(naofile->path, '/');
+ g_string_append(naofile->path, element_name);
+ path = naofile->path->str;
+
+ /* The channels are a mess in 1.33. They are listed three times but units
+ * are only given in the ‘view’ part, not as units of the data files
+ * themselves. Try to piece the information toegether... */
+ if (gwy_strequal(path, "/Imaging/ChannelList/ChannelData")) {
+ const gchar *s;
+ gwy_debug(element_name);
+ if ((s = find_attribute(attribute_names, attribute_values, "Name")))
+ naofile->current_name = g_strdup(s);
+ if ((s = find_attribute(attribute_names, attribute_values, "Unit"))) {
+ gwy_debug("Found Unit on ChannelData");
+ naofile->current_unit = g_strdup(s);
+ }
+ }
+ else if (gwy_stramong(path,
+ "/Imaging/ChannelList/ChannelData/Left",
+ "/Imaging/ChannelList/ChannelData/Right",
+ NULL)) {
+ const gchar *filename;
+ gwy_debug(element_name);
+ if (naofile->current_name &&
+ (filename = find_attribute(attribute_names, attribute_values,
+ "NaoSubFile"))) {
+ NAOStream stream;
+ gwy_clear(&stream, 1);
+ stream.name = g_strdup(naofile->current_name);
+ stream.filename = g_strdelimit(g_strdup(filename), "\\", '/');
+ stream.dir = g_strdup(element_name);
+ if (naofile->current_unit)
+ stream.units = g_strdup(naofile->current_unit);
+ g_array_append_val(naofile->streams, stream);
+ }
+ }
+ else if (gwy_strequal(path, "/Imaging/ImagingView/ChannelView")) {
+ const gchar *name, *unit;
+ gwy_debug(element_name);
+ if ((name = find_attribute(attribute_names, attribute_values, "Name"))
+ && (unit = find_attribute(attribute_names, attribute_values,
+ "Unit"))) {
+ n = naofile->streams->len;
+ for (i = 0; i < n; i++) {
+ NAOStream *stream = &g_array_index(naofile->streams, NAOStream,
+ i);
+ /* Use ChannelView unit only of there is no in ChannelData. */
+ if (gwy_strequal(stream->name, name) && !stream->units) {
+ gwy_debug("Found Unit on ChannelView");
+ g_free(stream->units);
+ stream->units = g_strdup(unit);
+ }
+ }
+ }
+ }
+ /* Spectra. The GridMode attribute is only informational. Each spectrum
+ * always has X and Y, and that is what we need. */
+ else if (gwy_strequal(path, "/Imaging/FlexGrid/Locus")) {
+ const gchar *filename, *x, *y;
+ gwy_debug(element_name);
+ if ((filename = find_attribute(attribute_names, attribute_values,
+ "NaoSubFile"))
+ && (x = find_attribute(attribute_names, attribute_values, "X"))
+ && (y = find_attribute(attribute_names, attribute_values, "Y"))) {
+ NAOSpectrum spectrum;
+ gwy_clear(&spectrum, 1);
+ spectrum.filename = g_strdelimit(g_strdup(filename), "\\", '/');
+ spectrum.x = atoi(x);
+ spectrum.y = atoi(y);
+ g_array_append_val(naofile->spectra, spectrum);
+ }
+ }
+}
+
+static void
+nao133_imaging_end_element(G_GNUC_UNUSED GMarkupParseContext *context,
+ const gchar *element_name,
+ gpointer user_data,
+ G_GNUC_UNUSED GError **error)
+{
+ NAOFile *naofile = (NAOFile*)user_data;
+ guint n = strlen(element_name), len = naofile->path->len;
+ gchar *path = naofile->path->str;
+
+ g_return_if_fail(g_str_has_suffix(path, element_name));
+ g_return_if_fail(len > n);
+ g_return_if_fail(path[len-1 - n] == '/');
+ if (gwy_strequal(path, "/Imaging/ChannelList/ChannelData")) {
+ GWY_FREE(naofile->current_name);
+ GWY_FREE(naofile->current_unit);
+ }
+ g_string_set_size(naofile->path, len-1 - n);
+}
+
+static void
+nao133_imaging_text(G_GNUC_UNUSED GMarkupParseContext *context,
+ const gchar *text,
+ gsize text_len,
+ gpointer user_data,
+ G_GNUC_UNUSED GError **error)
+{
+ NAOFile *naofile = (NAOFile*)user_data;
+ gchar *path = naofile->path->str;
+
+ /* The parameters are a mess in 1.33. There is a nested plain text header
+ * inside a XML tag. Why on Earth someone did that whey they already had
+ * everything represented in XML... */
+ if (gwy_strequal(path, "/Imaging/ImagingParameters")) {
+ GwyTextHeaderParser parser;
+ GHashTable *hash;
+ gchar *imaging_parameters = g_strndup(text, text_len);
+
+ gwy_clear(&parser, 1);
+ parser.key_value_separator = "=";
+ hash = gwy_text_header_parse(imaging_parameters, &parser, NULL, NULL);
+ if (naofile->hash && hash) {
+ g_warning("Multiple ImagingParameter tags. Using the last one.");
+ g_free(naofile->imaging_parameters);
+ g_hash_table_destroy(naofile->hash);
+ }
+ if (hash) {
+ naofile->imaging_parameters = imaging_parameters;
+ naofile->hash = hash;
+ }
+ else
+ g_free(imaging_parameters);
+ }
+}
+
+/* NB: This can be imaging + spectroscopy, just not standalone spectra cuves. */
+static GwyContainer*
+nao133_imaging_load(GwyZipFile zipfile, NAOFile *naofile, GError **error)
{
GMarkupParser parser = {
- &nao_streams_start_element,
- &nao_streams_end_element,
- &nao_streams_text,
+ &nao133_imaging_start_element,
+ &nao133_imaging_end_element,
+ &nao133_imaging_text,
NULL,
NULL,
};
+ GwyContainer *container = NULL;
+ GwyDataField *dfield;
+ guint id;
+
+ if (!nao_parse_xml_header(zipfile, naofile, "Data/Imaging.xml", &parser,
+ error))
+ goto fail;
+
+ container = gwy_container_new();
+ for (id = 0; id < naofile->streams->len; id++) {
+ NAOStream *stream = &g_array_index(naofile->streams, NAOStream, id);
+
+ if (!gwyzip_locate_file(zipfile, stream->filename, 1, error))
+ goto fail;
+ if (!(dfield = nao_read_field(zipfile, naofile, id, error)))
+ goto fail;
+
+ create_channel(naofile, dfield, stream, id, container);
+ }
+
+ for (id = 0; id < naofile->spectra->len; id++) {
+ NAOSpectrum *spectrum = &g_array_index(naofile->spectra, NAOSpectrum,
+ id);
+ /* Do not fail when a spectrum curve data are not found. According to
+ * Scientec-CSI a spectrum NaoSubFile only means the spectrum was
+ * planned. But it might not be actually measured. */
+ if (!gwyzip_locate_file(zipfile, spectrum->filename, 1, NULL))
+ continue;
+ spectrum->path = naofile->path;
+ if (!nao133_parse_spectrum(zipfile, spectrum, error))
+ goto fail;
+ }
+ create_spectra(naofile, container);
+
+ if (!gwy_container_get_n_items(container)) {
+ err_NO_DATA(error);
+ goto fail;
+ }
+ return container;
+
+fail:
+ GWY_OBJECT_UNREF(container);
+ return NULL;
+}
+
+/* The pure spectra case. We do not know how to recalculate pixel coordinates
+ * to real coordinates so we import the spectra as graph curves. */
+static GwyContainer*
+nao133_spectro_load(GwyZipFile zipfile, NAOFile *naofile, GError **error)
+{
+ GwyContainer *container = NULL;
+ const gchar *xtitle;
+ NAOSpectrum spectrum;
+ guint j;
+
+ /* Do this for unified cleanup after we are done. */
+ naofile->path = g_string_new(NULL);
+ naofile->spectra = g_array_new(FALSE, FALSE, sizeof(NAOSpectrum));
+
+ gwy_clear(&spectrum, 1);
+ spectrum.path = naofile->path;
+ g_array_append_val(naofile->spectra, spectrum);
+
+ if (!nao133_parse_spectrum(zipfile, &spectrum, error))
+ goto fail;
+
+ container = gwy_container_new();
+ xtitle = g_hash_table_lookup(spectrum.hash, "SweepSignal");
+
+ for (j = 0; j < spectrum.specdata->len; j++) {
+ NAOSpectrumData *specdata = &g_array_index(spectrum.specdata,
+ NAOSpectrumData, j);
+ GwyDataLine *dline = create_dataline_for_spectrum(specdata, &spectrum);
+ GwyGraphModel *gmodel = gwy_graph_model_new();
+ GwyGraphCurveModel *gcmodel = gwy_graph_curve_model_new();
+ gchar *fullname = g_strconcat(specdata->name, " ", specdata->dir, NULL);
+ GQuark key;
+
+ gwy_graph_curve_model_set_data_from_dataline(gcmodel, dline, 0, 0);
+ gwy_graph_model_set_units_from_data_line(gmodel, dline);
+ g_object_unref(dline);
+ g_object_set(gcmodel,
+ "mode", GWY_GRAPH_CURVE_LINE,
+ "description", fullname,
+ NULL);
+ g_free(fullname);
+ gwy_graph_model_add_curve(gmodel, gcmodel);
+ g_object_unref(gcmodel);
+ g_object_set(gmodel,
+ "title", specdata->name,
+ "axis-label-left", specdata->name,
+ NULL);
+ if (xtitle)
+ g_object_set(gmodel, "axis-label-bottom", xtitle, NULL);
+
+ key = gwy_app_get_graph_key_for_id(j);
+ gwy_container_set_object(container, key, gmodel);
+ g_object_unref(gmodel);
+ }
+
+fail:
+ return container;
+}
+
+static gboolean
+nao_parse_xml_header(GwyZipFile zipfile, NAOFile *naofile,
+ const gchar *filename, GMarkupParser *parser,
+ GError **error)
+{
GMarkupParseContext *context = NULL;
guchar *content = NULL, *s;
gboolean ok = FALSE;
- if (!gwyzip_locate_file(zipfile, "Scan/Measure.xml", 1, error)
+ if (!gwyzip_locate_file(zipfile, filename, 1, error)
|| !(content = gwyzip_get_file_content(zipfile, NULL, error)))
return FALSE;
@@ -463,28 +868,205 @@ nao_parse_measure(GwyZipFile zipfile,
if (!naofile->path)
naofile->path = g_string_new(NULL);
- if (!naofile->hash)
- naofile->hash = g_hash_table_new_full(g_str_hash, g_str_equal,
- g_free, g_free);
+ naofile->streams = g_array_new(FALSE, FALSE, sizeof(NAOStream));
+ naofile->spectra = g_array_new(FALSE, FALSE, sizeof(NAOSpectrum));
- context = g_markup_parse_context_new(&parser, 0, naofile, NULL);
+ context = g_markup_parse_context_new(parser, 0, naofile, NULL);
if (!g_markup_parse_context_parse(context, s, -1, error))
goto fail;
if (!g_markup_parse_context_end_parse(context, error))
goto fail;
-
- if (!naofile->have_resolution) {
- err_MISSING_FIELD(error, "Resolution");
+ if (!find_size_and_resolution(naofile, error))
goto fail;
- }
- if (!naofile->have_size) {
- err_MISSING_FIELD(error, "Size");
+ gwy_debug("nstreams %u", (guint)naofile->streams->len);
+ if (!naofile->streams->len) {
+ err_NO_DATA(error);
goto fail;
}
- if (!naofile->nstreams) {
+ ok = TRUE;
+
+ if (g_hash_table_size(naofile->hash)) {
+ naofile->meta = gwy_container_new();
+ g_hash_table_foreach(naofile->hash, &add_meta, naofile->meta);
+ }
+
+fail:
+ if (context)
+ g_markup_parse_context_free(context);
+ g_free(content);
+
+ return ok;
+}
+
+static void
+nao133_spectro_start_element(G_GNUC_UNUSED GMarkupParseContext *context,
+ const gchar *element_name,
+ const gchar **attribute_names,
+ const gchar **attribute_values,
+ gpointer user_data,
+ G_GNUC_UNUSED GError **error)
+{
+ NAOSpectrum *spectrum = (NAOSpectrum*)user_data;
+ gchar *path;
+
+ g_string_append_c(spectrum->path, '/');
+ g_string_append(spectrum->path, element_name);
+ path = spectrum->path->str;
+
+ if (gwy_strequal(path, "/Spectroscopy/SpectroData/ChannelData")) {
+ const gchar *name, *unit;
+ gwy_debug(element_name);
+ if ((name = find_attribute(attribute_names, attribute_values, "Name"))
+ && (unit = find_attribute(attribute_names, attribute_values,
+ "Unit"))) {
+ spectrum->current_name = g_strdup(name);
+ spectrum->current_unit = g_strdup(unit);
+ }
+ }
+ else if (gwy_strequal(path,
+ "/Spectroscopy/SpectroData/ChannelData/PassData")) {
+ const gchar *name, *capacity, *sizeused;
+ gwy_debug(element_name);
+ if ((name = find_attribute(attribute_names, attribute_values, "Name"))
+ && (capacity = find_attribute(attribute_names, attribute_values,
+ "Capacity"))
+ && (sizeused = find_attribute(attribute_names, attribute_values,
+ "SizeUsed"))) {
+ NAOSpectrumData specdata;
+ gwy_clear(&specdata, 1);
+ specdata.capacity = atoi(capacity);
+ specdata.sizeused = atoi(sizeused);
+ specdata.dir = g_strdup(name);
+ specdata.name = g_strdup(spectrum->current_name);
+ specdata.unit = g_strdup(spectrum->current_unit);
+ spectrum->current_specdata_id = spectrum->specdata->len;
+ g_array_append_val(spectrum->specdata, specdata);
+ }
+ }
+}
+
+static void
+nao133_spectro_end_element(G_GNUC_UNUSED GMarkupParseContext *context,
+ const gchar *element_name,
+ gpointer user_data,
+ G_GNUC_UNUSED GError **error)
+{
+ NAOSpectrum *spectrum = (NAOSpectrum*)user_data;
+ guint n = strlen(element_name), len = spectrum->path->len;
+ gchar *path = spectrum->path->str;
+
+ g_return_if_fail(g_str_has_suffix(path, element_name));
+ g_return_if_fail(len > n);
+ g_return_if_fail(path[len-1 - n] == '/');
+ if (gwy_strequal(path, "/Spectroscopy/SpectroData/ChannelData")) {
+ GWY_FREE(spectrum->current_name);
+ GWY_FREE(spectrum->current_unit);
+ }
+ else if (gwy_strequal(path,
+ "/Spectroscopy/SpectroData/ChannelData/PassData")) {
+ spectrum->current_specdata_id = G_MAXUINT;
+ }
+ g_string_set_size(spectrum->path, len-1 - n);
+}
+
+static void
+nao133_spectro_text(G_GNUC_UNUSED GMarkupParseContext *context,
+ const gchar *text,
+ gsize text_len,
+ gpointer user_data,
+ G_GNUC_UNUSED GError **error)
+{
+ NAOSpectrum *spectrum = (NAOSpectrum*)user_data;
+ gchar *path = spectrum->path->str;
+
+ /* The per-spectrum metadata. Unfortunately, there is no place in GWY
+ * files for them; but we use them to construct the GwySpectra. */
+ if (gwy_strequal(path, "/Spectroscopy/SpectroParameters")) {
+ GwyTextHeaderParser parser;
+ GHashTable *hash;
+ gchar *spectro_parameters = g_strndup(text, text_len);
+
+ gwy_clear(&parser, 1);
+ parser.key_value_separator = "=";
+ hash = gwy_text_header_parse(spectro_parameters, &parser, NULL, NULL);
+ if (spectrum->hash && hash) {
+ g_warning("Multiple SpectroParameters tags. Using the last one.");
+ g_free(spectrum->spectro_parameters);
+ g_hash_table_destroy(spectrum->hash);
+ }
+ if (hash) {
+ spectrum->spectro_parameters = spectro_parameters;
+ spectrum->hash = hash;
+ }
+ else
+ g_free(spectro_parameters);
+ }
+ /* The actual data, represented as a list of plain text data values. */
+ else if (gwy_strequal(path,
+ "/Spectroscopy/SpectroData/ChannelData/PassData")
+ && spectrum->current_specdata_id != G_MAXUINT) {
+ NAOSpectrumData *specdata = &g_array_index(spectrum->specdata,
+ NAOSpectrumData,
+ spectrum->current_specdata_id);
+ gchar *end;
+ GArray *values = g_array_new(FALSE, FALSE, sizeof(gdouble));
+
+ while (TRUE) {
+ gdouble v = g_ascii_strtod(text, &end);
+ if (end == text)
+ break;
+ g_array_append_val(values, v);
+ text = end;
+ }
+ /* Limit the number of point to SizeUsed. */
+ values->len = MIN(values->len, specdata->sizeused);
+ if (values->len) {
+ specdata->nvalues = values->len;
+ specdata->values = (gdouble*)g_array_free(values, FALSE);
+ }
+ else
+ g_array_free(values, TRUE);
+ }
+}
+
+static gboolean
+nao133_parse_spectrum(GwyZipFile zipfile, NAOSpectrum *spectrum, GError **error)
+{
+ GMarkupParser parser = {
+ &nao133_spectro_start_element,
+ &nao133_spectro_end_element,
+ &nao133_spectro_text,
+ NULL,
+ NULL,
+ };
+ GMarkupParseContext *context = NULL;
+ guchar *content = NULL, *s;
+ gboolean ok = FALSE;
+
+ if (!(content = gwyzip_get_file_content(zipfile, NULL, error)))
+ return FALSE;
+
+ gwy_strkill(content, "\r");
+ s = content;
+ if (g_str_has_prefix(s, BLOODY_UTF8_BOM))
+ s += strlen(BLOODY_UTF8_BOM);
+
+ spectrum->specdata = g_array_new(FALSE, FALSE, sizeof(NAOSpectrumData));
+
+ context = g_markup_parse_context_new(&parser, 0, spectrum, NULL);
+ if (!g_markup_parse_context_parse(context, s, -1, error))
+ goto fail;
+ if (!g_markup_parse_context_end_parse(context, error))
+ goto fail;
+ gwy_debug("nspecdata %u", (guint)spectrum->specdata->len);
+ if (!spectrum->specdata->len) {
+ /* A bit misleading? */
err_NO_DATA(error);
goto fail;
}
+ if (!find_spectrum_abscissa(spectrum, error))
+ goto fail;
+
ok = TRUE;
fail:
@@ -496,13 +1078,310 @@ fail:
}
static void
-nao_file_free(NAOFile *naofile)
+create_channel(NAOFile *naofile, GwyDataField *dfield,
+ NAOStream *stream, guint channelno, GwyContainer *container)
+{
+ GwyContainer *meta;
+ GQuark key;
+ gchar *title;
+
+ key = gwy_app_get_data_key_for_id(channelno);
+ gwy_container_set_object(container, key, dfield);
+ g_object_unref(dfield);
+
+ key = gwy_app_get_data_title_key_for_id(channelno);
+ title = g_strconcat(stream->name, " ", stream->dir, NULL);
+ gwy_container_set_string(container, key, title);
+
+ if (naofile->meta) {
+ key = gwy_app_get_data_meta_key_for_id(channelno);
+ meta = gwy_container_duplicate(naofile->meta);
+ gwy_container_set_object(container, key, meta);
+ g_object_unref(meta);
+ }
+ gwy_file_channel_import_log_add(container, channelno,
+ NULL, naofile->filename);
+}
+
+/* We must organise spectra differently than in the file: split them by channel
+ * and direction but group different positions to one GwySpectra object. */
+static void
+create_spectra(NAOFile *naofile, GwyContainer *container)
+{
+ GwyDataField *dfield = NULL;
+ GPtrArray *sps;
+ guint i, j, id;
+
+ if (!naofile->spectra || !naofile->spectra->len)
+ return;
+
+ if (!gwy_container_gis_object(container, gwy_app_get_data_key_for_id(0),
+ (GObject**)&dfield)) {
+ g_warning("Cannot convert spectra pixel coordinates to real "
+ "because there is no image.");
+ }
+
+ sps = g_ptr_array_new();
+ for (i = 0; i < naofile->spectra->len; i++) {
+ NAOSpectrum *spectrum = &g_array_index(naofile->spectra, NAOSpectrum,
+ i);
+ const gchar *xtitle;
+
+ /* Spectrum planned, but not measured. */
+ if (!spectrum->specdata)
+ continue;
+
+ if (dfield) {
+ spectrum->x = gwy_data_field_jtor(dfield, spectrum->x + 0.5);
+ spectrum->y = gwy_data_field_itor(dfield,
+ dfield->yres - 0.5 - spectrum->y);
+ }
+
+ xtitle = g_hash_table_lookup(spectrum->hash, "SweepSignal");
+ for (j = 0; j < spectrum->specdata->len; j++) {
+ NAOSpectrumData *specdata = &g_array_index(spectrum->specdata,
+ NAOSpectrumData, j);
+ GwyDataLine *dline = create_dataline_for_spectrum(specdata,
+ spectrum);
+ add_dline_to_spectra(sps, dline,
+ xtitle, specdata->name, specdata->dir,
+ spectrum->x, spectrum->y);
+ }
+ }
+
+ for (id = 0; id < sps->len; id++) {
+ GwySpectra *spectra = (GwySpectra*)g_ptr_array_index(sps, id);
+ GQuark key = gwy_app_get_spectra_key_for_id(id);
+ gwy_container_set_object(container, key, spectra);
+ g_object_unref(spectra);
+ }
+ g_ptr_array_free(sps, TRUE);
+}
+
+static GwyDataLine*
+create_dataline_for_spectrum(NAOSpectrumData *specdata, NAOSpectrum *spectrum)
+{
+ GwyDataLine *dline;
+ gdouble real = spectrum->sweep_to - spectrum->sweep_from;
+
+ if (!(fabs(real) > 0.0)) {
+ g_warning("Spectrum sweep range is zero, fixing to 1.0");
+ real = 1.0;
+ }
+
+ dline = gwy_data_line_new(specdata->nvalues, fabs(real), FALSE);
+ gwy_assign(gwy_data_line_get_data(dline), specdata->values,
+ specdata->nvalues);
+
+ if (real > 0.0)
+ gwy_data_line_set_offset(dline, spectrum->sweep_from);
+ else {
+ gwy_data_line_invert(dline, TRUE, FALSE);
+ gwy_data_line_set_offset(dline, spectrum->sweep_to);
+ }
+
+ gwy_si_unit_set_from_string(gwy_data_line_get_si_unit_x(dline),
+ spectrum->sweep_unit);
+ gwy_si_unit_set_from_string(gwy_data_line_get_si_unit_y(dline),
+ specdata->unit);
+
+ return dline;
+}
+
+static void
+add_dline_to_spectra(GPtrArray *sps, GwyDataLine *dline,
+ const gchar *xtitle, const gchar *name, const gchar *dir,
+ gdouble x, gdouble y)
+{
+ gchar *fullname = g_strconcat(name, " ", dir, NULL);
+ const gchar *specxlabel;
+ GwyDataLine *firstspec;
+ GwySpectra *spectra = NULL;
+ guint i;
+
+ gwy_debug("looking for <%s><%s><%s>", fullname, name, xtitle);
+ /* Find spectra set that matches all the attributes. */
+ for (i = 0; i < sps->len; i++) {
+ spectra = (GwySpectra*)g_ptr_array_index(sps, i);
+ firstspec = gwy_spectra_get_spectrum(spectra, 0);
+ specxlabel = gwy_spectra_get_spectrum_x_label(spectra);
+ if (gwy_strequal(gwy_spectra_get_title(spectra), fullname)
+ && gwy_strequal(gwy_spectra_get_spectrum_y_label(spectra), name)
+ && ((!specxlabel && !xtitle)
+ || (specxlabel && xtitle && gwy_strequal(specxlabel, xtitle)))
+ && gwy_si_unit_equal(gwy_data_line_get_si_unit_x(dline),
+ gwy_data_line_get_si_unit_x(firstspec))
+ && gwy_si_unit_equal(gwy_data_line_get_si_unit_y(dline),
+ gwy_data_line_get_si_unit_y(firstspec)))
+ break;
+ spectra = NULL;
+ }
+
+ if (!spectra) {
+ spectra = gwy_spectra_new();
+ gwy_spectra_set_title(spectra, fullname);
+ gwy_spectra_set_spectrum_y_label(spectra, name);
+ if (xtitle)
+ gwy_spectra_set_spectrum_x_label(spectra, xtitle);
+ gwy_si_unit_set_from_string(gwy_spectra_get_si_unit_xy(spectra), "m");
+ g_ptr_array_add(sps, spectra);
+ }
+
+ gwy_spectra_add_spectrum(spectra, dline, x, y);
+ g_object_unref(dline);
+ g_free(fullname);
+}
+
+static gboolean
+find_size_and_resolution(NAOFile *naofile, GError **error)
+{
+ GHashTable *hash = naofile->hash;
+ const gchar *value;
+
+ /* Ensure the parameter hash table exists. It may not if there is no
+ * parameters part or (in 1.23) is empty. */
+ if (!hash) {
+ err_MISSING_FIELD(error, "Resolution");
+ return FALSE;
+ }
+
+ if ((value = g_hash_table_lookup(hash, "Resolution"))) {
+ if (sscanf(value, "%u, %u", &naofile->xres, &naofile->yres) != 2) {
+ err_INVALID(error, "Resolution");
+ return FALSE;
+ }
+ if (err_DIMENSION(error, naofile->xres)
+ || err_DIMENSION(error, naofile->yres))
+ return FALSE;
+ }
+ else {
+ err_MISSING_FIELD(error, "Resolution");
+ return FALSE;
+ }
+ gwy_debug("xres %u, yres %u", naofile->xres, naofile->yres);
+
+ if ((value = g_hash_table_lookup(hash, "Size"))) {
+ gchar *end, *s = g_strdup(value);
+ if ((naofile->xreal = g_ascii_strtod(s, &end)) > 0.0
+ && *end == ','
+ && (naofile->yreal = g_ascii_strtod(end+1, NULL)) > 0.0) {
+ /* OK. */
+ }
+ else {
+ g_free(s);
+ err_INVALID(error, "Size");
+ return FALSE;
+ }
+ g_free(s);
+ }
+ else {
+ err_MISSING_FIELD(error, "Size");
+ return FALSE;
+ }
+ gwy_debug("xreal %g, yreal %g", naofile->xreal, naofile->yreal);
+
+ return TRUE;
+}
+
+static gboolean
+find_spectrum_abscissa(NAOSpectrum *spectrum, GError **error)
+{
+ GHashTable *hash = spectrum->hash;
+ const gchar *value;
+
+ /* Ensure the parameter hash table exists. */
+ if (!hash) {
+ err_MISSING_FIELD(error, "SweepFromValue");
+ return FALSE;
+ }
+
+ if ((value = g_hash_table_lookup(hash, "SweepFromValue"))) {
+ spectrum->sweep_from = g_ascii_strtod(value, NULL);
+ }
+ else {
+ err_MISSING_FIELD(error, "SweepFromValue");
+ return FALSE;
+ }
+
+ if ((value = g_hash_table_lookup(hash, "SweepToValue"))) {
+ spectrum->sweep_to = g_ascii_strtod(value, NULL);
+ }
+ else {
+ err_MISSING_FIELD(error, "SweepToValue");
+ return FALSE;
+ }
+ gwy_debug("sweep from %g to %g", spectrum->sweep_from, spectrum->sweep_to);
+
+ if ((value = g_hash_table_lookup(hash, "SweepSignalUnitName"))
+ || (value = g_hash_table_lookup(hash, "SweepSignalUnitSymbol"))) {
+ spectrum->sweep_unit = g_strdup(value);
+ }
+ else {
+ err_MISSING_FIELD(error, "SweepSignalUnitName");
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static const gchar*
+find_attribute(const gchar **attribute_names, const gchar **attribute_values,
+ const gchar *attrname)
{
guint i;
- for (i = 0; i < naofile->nstreams; i++) {
- g_free(naofile->streams[i].name);
- g_free(naofile->streams[i].units);
+ if (!attribute_names)
+ return NULL;
+
+ for (i = 0; attribute_names[i]; i++) {
+ if (gwy_strequal(attribute_names[i], attrname))
+ return attribute_values[i];
+ }
+
+ return NULL;
+}
+
+static void
+nao_file_free(NAOFile *naofile)
+{
+ guint i, j;
+
+ if (naofile->streams) {
+ for (i = 0; i < naofile->streams->len; i++) {
+ NAOStream *stream = &g_array_index(naofile->streams, NAOStream, i);
+ g_free(stream->name);
+ g_free(stream->units);
+ g_free(stream->filename);
+ g_free(stream->dir);
+ }
+ g_array_free(naofile->streams, TRUE);
+ }
+ if (naofile->spectra) {
+ GArray *spectra = naofile->spectra;
+ for (i = 0; i < spectra->len; i++) {
+ NAOSpectrum *spectrum = &g_array_index(spectra, NAOSpectrum, i);
+ if (spectrum->specdata) {
+ GArray *specdatas = spectrum->specdata;
+ for (j = 0; j < specdatas->len; j++) {
+ NAOSpectrumData *specdata = &g_array_index(specdatas,
+ NAOSpectrumData,
+ j);
+ g_free(specdata->dir);
+ g_free(specdata->name);
+ g_free(specdata->unit);
+ g_free(specdata->values);
+ }
+ g_array_free(specdatas, TRUE);
+ }
+ if (spectrum->hash)
+ g_hash_table_destroy(spectrum->hash);
+ g_free(spectrum->sweep_unit);
+ g_free(spectrum->spectro_parameters);
+ g_free(spectrum->current_name);
+ g_free(spectrum->current_unit);
+ g_free(spectrum->filename);
+ }
+ g_array_free(naofile->spectra, TRUE);
}
if (naofile->hash) {
g_hash_table_destroy(naofile->hash);
@@ -512,7 +1391,9 @@ nao_file_free(NAOFile *naofile)
g_string_free(naofile->path, TRUE);
naofile->path = NULL;
}
- g_free(naofile->streams);
+ g_free(naofile->current_name);
+ g_free(naofile->imaging_parameters);
+ GWY_OBJECT_UNREF(naofile->meta);
}
/* vim: set cin et ts=4 sw=4 cino=>1s,e0,n0,f0,{0,}0,^0,\:1s,=0,g1s,h0,t0,+1s,c3,(0,u0 : */
diff --git a/modules/file/nanoscan.c b/modules/file/nanoscan.c
index abe4365..0bfa7bd 100644
--- a/modules/file/nanoscan.c
+++ b/modules/file/nanoscan.c
@@ -1,5 +1,5 @@
/*
- * $Id: nanoscan.c 19044 2016-10-08 19:10:46Z yeti-dn $
+ * $Id: nanoscan.c 20152 2017-08-03 08:50:44Z yeti-dn $
* Copyright (C) 2009 David Necas (Yeti).
*
* This program is free software; you can redistribute it and/or modify
@@ -44,6 +44,7 @@
#include <libgwyddion/gwymath.h>
#include <libgwyddion/gwyutils.h>
#include <libprocess/stats.h>
+#include <libprocess/correct.h>
#include <libgwymodule/gwymodule-file.h>
#include <app/gwymoduleutils-file.h>
#include <app/data-browser.h>
@@ -101,6 +102,7 @@ typedef struct {
gchar *name;
gchar *zunits;
gfloat *data;
+ guint ndata; /* May be smaller than expected for incomplete measurement. */
NanoScanDirection direction;
gboolean already_added;
} NanoScanChannel;
@@ -180,6 +182,7 @@ static void add_meta (NanoScanFile *nfile,
gchar *value);
static gfloat* read_channel_data (const gchar *value,
guint npixels,
+ guint *actual_npixels,
GError **error);
static GwyModuleInfo module_info = {
@@ -187,12 +190,12 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Imports NanoScan XML files."),
"Yeti <yeti at gwyddion.net>",
- "0.5",
+ "0.7",
"David Nečas (Yeti)",
"2009",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, nanoscan)
static gboolean
module_register(void)
@@ -367,42 +370,62 @@ add_channel(GwyContainer *container,
NanoScanChannel *channel,
gint id)
{
- GwyDataField *dfield;
+ GwyDataField *dfield, *mask = NULL;
GwySIUnit *unit;
- gint power10;
gdouble *d;
GQuark quark;
- gchar *key, *title;
- gdouble q = 1.0;
- gint i, j;
-
- dfield = gwy_data_field_new(nfile->xres, nfile->yres,
- nfile->xreal, nfile->yreal,
+ gchar *title;
+ gdouble yreal, q = 1.0;
+ gint nrows, i, power10;
+
+ nrows = (channel->ndata + nfile->xres-1)/nfile->xres;
+ gwy_debug("nrows %d, yres %d", nrows, nfile->yres);
+ yreal = nfile->yreal*nrows/nfile->yres;
+ dfield = gwy_data_field_new(nfile->xres, nrows, nfile->xreal, yreal,
FALSE);
if (nfile->xyunits) {
unit = gwy_data_field_get_si_unit_xy(dfield);
gwy_si_unit_set_from_string_parse(unit, nfile->xyunits, &power10);
gwy_data_field_set_xreal(dfield, pow10(power10)*nfile->xreal);
- gwy_data_field_set_yreal(dfield, pow10(power10)*nfile->yreal);
+ gwy_data_field_set_yreal(dfield, pow10(power10)*yreal);
}
if (channel->zunits) {
unit = gwy_data_field_get_si_unit_z(dfield);
gwy_si_unit_set_from_string_parse(unit, channel->zunits, &power10);
q = pow10(power10);
}
+
d = gwy_data_field_get_data(dfield);
- for (i = 0; i < nfile->yres; i++) {
- for (j = 0; j < nfile->xres; j++) {
- d[(nfile->yres-1 - i)*nfile->xres + j]
- = q*channel->data[i*nfile->xres + j];
- }
+ for (i = 0; i < channel->ndata; i++)
+ d[i] = q*channel->data[i];
+ gwy_data_field_invert(dfield, TRUE, FALSE, FALSE);
+
+ /* Create a mask that is the union of invalid and missing values. */
+ mask = gwy_app_channel_mask_of_nans(dfield, FALSE);
+ if (channel->ndata % nfile->xres != 0) {
+ if (!mask)
+ mask = gwy_data_field_new_alike(dfield, TRUE);
+
+ d = gwy_data_field_get_data(mask);
+ for (i = channel->ndata; i < nfile->xres*nrows; i++)
+ d[i] = 1.0;
}
+
+ if (mask)
+ gwy_data_field_laplace_solve(dfield, mask, -1, 1.0);
+
quark = gwy_app_get_data_key_for_id(id);
gwy_container_set_object(container, quark, dfield);
g_object_unref(dfield);
+ if (mask) {
+ quark = gwy_app_get_mask_key_for_id(id);
+ gwy_container_set_object(container, quark, mask);
+ g_object_unref(mask);
+ }
+
if (channel->name) {
- key = g_strconcat(g_quark_to_string(quark), "/title", NULL);
+ quark = gwy_app_get_data_title_key_for_id(id);
if (channel->direction == SCAN_FORWARD)
title = g_strconcat(channel->name, " [Forward]", NULL);
else if (channel->direction == SCAN_BACKWARD)
@@ -411,8 +434,7 @@ add_channel(GwyContainer *container,
title = channel->name;
channel->name = NULL;
}
- gwy_container_set_string_by_name(container, key, title);
- g_free(key);
+ gwy_container_set_string(container, quark, title);
}
gwy_file_channel_import_log_add(container, id, NULL, filename);
channel->already_added = TRUE;
@@ -466,8 +488,8 @@ add_curve_model(NanoScanFile *nfile,
gdouble *d;
gint power10, j;
- real = axis0->stop - axis0->start;
- dline = gwy_data_line_new(nfile->xres, real, FALSE);
+ real = (axis0->stop - axis0->start)*channel->ndata/nfile->xres;
+ dline = gwy_data_line_new(channel->ndata, real, FALSE);
gwy_data_line_set_offset(dline, axis0->start);
if (axis0->units) {
unit = gwy_data_line_get_si_unit_x(dline);
@@ -481,9 +503,8 @@ add_curve_model(NanoScanFile *nfile,
q = pow10(power10);
}
d = gwy_data_line_get_data(dline);
- for (j = 0; j < nfile->xres; j++) {
+ for (j = 0; j < channel->ndata; j++)
d[j] = q*channel->data[j];
- }
gcmodel = gwy_graph_curve_model_new();
gwy_graph_curve_model_set_data_from_dataline(gcmodel, dline, 0, 0);
g_object_set(gcmodel,
@@ -558,10 +579,16 @@ add_multicurve_model(NanoScanFile *nfile,
gdouble real, yval, q = 1.0;
gdouble *d;
gchar *descr;
- gint power10, j;
+ gint start, npts, power10, j;
- real = axis0->stop - axis0->start;
- dline = gwy_data_line_new(nfile->xres, real, FALSE);
+ /* Completely missing line. */
+ start = i*nfile->xres;
+ if (start >= channel->ndata)
+ return;
+
+ npts = MAX(channel->ndata - start, nfile->xres);
+ real = (axis0->stop - axis0->start)*npts/nfile->xres;
+ dline = gwy_data_line_new(nfile->xres, real, TRUE);
gwy_data_line_set_offset(dline, axis0->start);
if (axis0->units) {
unit = gwy_data_line_get_si_unit_x(dline);
@@ -575,9 +602,8 @@ add_multicurve_model(NanoScanFile *nfile,
q = pow10(power10);
}
d = gwy_data_line_get_data(dline);
- for (j = 0; j < nfile->xres; j++) {
- d[j] = q*channel->data[i*nfile->xres + j];
- }
+ for (j = 0; j < npts; j++)
+ d[j] = q*channel->data[start + j];
gcmodel = gwy_graph_curve_model_new();
gwy_graph_curve_model_set_data_from_dataline(gcmodel, dline, 0, 0);
yval = i/(nfile->yres - 1.0)*(axis1->stop - axis1->start) + axis1->start;
@@ -825,7 +851,7 @@ text(G_GNUC_UNUSED GMarkupParseContext *context,
else if (gwy_strequal(path, "/data")) {
g_free(channel->data);
channel->data = read_channel_data(val, nfile->xres * nfile->yres,
- error);
+ &channel->ndata, error);
gwy_debug("DATA: %p", channel->data);
}
}
@@ -899,19 +925,22 @@ add_meta(NanoScanFile *nfile,
static gfloat*
read_channel_data(const gchar *value,
guint npixels,
+ guint *actual_npixels,
GError **error)
{
guchar *mem;
gsize len;
mem = g_base64_decode(value, &len);
- if (len != npixels*sizeof(gfloat)) {
+ if (!len || len % sizeof(gfloat) != 0 || len > npixels*sizeof(gfloat)) {
g_set_error(error, G_MARKUP_ERROR, G_MARKUP_ERROR_INVALID_CONTENT,
_("Wrong size of Base64 encoded data."));
g_free(mem);
+ *actual_npixels = 0;
return NULL;
}
+ *actual_npixels = len/sizeof(gfloat);
return (gfloat*)mem;
}
diff --git a/modules/file/nanoscope-ii.c b/modules/file/nanoscope-ii.c
index cd6dc89..69676a7 100644
--- a/modules/file/nanoscope-ii.c
+++ b/modules/file/nanoscope-ii.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: nanoscope-ii.c 16387 2014-07-10 10:41:50Z yeti-dn $
+ * @(#) $Id: nanoscope-ii.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2004 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -90,7 +90,7 @@ static GwyModuleInfo module_info = {
"2007",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, nanoscope_ii)
static gboolean
module_register(void)
diff --git a/modules/file/nanoscope.c b/modules/file/nanoscope.c
index 7aa5874..1432700 100644
--- a/modules/file/nanoscope.c
+++ b/modules/file/nanoscope.c
@@ -1,6 +1,6 @@
/*
- * @(#) $Id: nanoscope.c 19044 2016-10-08 19:10:46Z yeti-dn $
- * Copyright (C) 2004-2015 David Necas (Yeti), Petr Klapetek.
+ * @(#) $Id: nanoscope.c 19948 2017-06-22 14:05:41Z yeti-dn $
+ * Copyright (C) 2004-2017 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
* This program is free software; you can redistribute it and/or modify
@@ -25,6 +25,7 @@
* <comment>Nanoscope III SPM data</comment>
* <magic priority="80">
* <match type="string" offset="0" value="\\*File list\r\n"/>
+ * <match type="string" offset="0" value="\\*EC File list\r\n"/>
* <match type="string" offset="0" value="?*File list\r\n"/>
* </magic>
* </mime-type>
@@ -35,6 +36,7 @@
* # Nanoscope III
* # Two header variants.
* 0 string \\*File\ list\x0d\x0a Nanoscope III SPM binary data
+ * 0 string \\*EC\ File\ list\x0d\x0a Nanoscope III electrochemistry SPM binary data
* 0 string ?*File\ list\x0d\x0a Nanoscope III SPM text data
**/
@@ -72,6 +74,9 @@
#define MAGIC_FORCE_BIN "\\*Force file list\r\n"
#define MAGIC_FORCE_SIZE (sizeof(MAGIC_FORCE_BIN)-1)
+#define MAGIC_EC_BIN "\\*EC File list\r\n"
+#define MAGIC_EC_SIZE (sizeof(MAGIC_EC_BIN)-1)
+
typedef enum {
NANOSCOPE_FILE_TYPE_NONE = 0,
NANOSCOPE_FILE_TYPE_BIN,
@@ -207,12 +212,12 @@ static GwyModuleInfo module_info = {
N_("Imports Veeco (Digital Instruments) Nanoscope data files, "
"version 3 or newer."),
"Yeti <yeti at gwyddion.net>",
- "0.34",
+ "0.35",
"David Nečas (Yeti) & Petr Klapetek",
"2004",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, nanoscope)
static gboolean
module_register(void)
@@ -239,7 +244,8 @@ nanoscope_detect(const GwyFileDetectInfo *fileinfo,
if (fileinfo->buffer_len > MAGIC_SIZE
&& (!memcmp(fileinfo->head, MAGIC_TXT_PARTIAL, MAGIC_SIZE_PARTIAL)
|| !memcmp(fileinfo->head, MAGIC_BIN_PARTIAL, MAGIC_SIZE_PARTIAL)
- || !memcmp(fileinfo->head, MAGIC_FORCE_BIN, MAGIC_FORCE_SIZE)))
+ || !memcmp(fileinfo->head, MAGIC_FORCE_BIN, MAGIC_FORCE_SIZE)
+ || !memcmp(fileinfo->head, MAGIC_EC_BIN, MAGIC_EC_SIZE)))
score = 100;
return score;
@@ -275,7 +281,8 @@ nanoscope_load(const gchar *filename,
if (size > MAGIC_SIZE) {
if (!memcmp(buffer, MAGIC_TXT, MAGIC_SIZE))
file_type = NANOSCOPE_FILE_TYPE_TXT;
- else if (!memcmp(buffer, MAGIC_BIN, MAGIC_SIZE))
+ else if (!memcmp(buffer, MAGIC_BIN, MAGIC_SIZE)
+ || !memcmp(buffer, MAGIC_EC_BIN, MAGIC_EC_SIZE))
file_type = NANOSCOPE_FILE_TYPE_BIN;
else if (!memcmp(buffer, MAGIC_FORCE_BIN, MAGIC_FORCE_SIZE))
file_type = NANOSCOPE_FILE_TYPE_FORCE_BIN;
diff --git a/modules/file/nanotop.c b/modules/file/nanotop.c
index 5e6009a..7c443eb 100644
--- a/modules/file/nanotop.c
+++ b/modules/file/nanotop.c
@@ -111,7 +111,7 @@ static GwyModuleInfo module_info = {
"2006",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, nanotop)
static gboolean
module_register(void)
diff --git a/modules/file/netcdf.c b/modules/file/netcdf.c
index 3939fc6..15ae51b 100644
--- a/modules/file/netcdf.c
+++ b/modules/file/netcdf.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: netcdf.c 16816 2014-11-21 10:34:00Z yeti-dn $
+ * @(#) $Id: netcdf.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2006 David Necas (Yeti), Petr Klapetek, Niv Levy.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net, nivl2000 at gmail.com.
*
@@ -193,7 +193,7 @@ static GwyModuleInfo module_info = {
"2006",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, netcdf)
static gboolean
module_register(void)
diff --git a/modules/file/nmmxyz.c b/modules/file/nmmxyz.c
index 87451fe..a7d24c3 100644
--- a/modules/file/nmmxyz.c
+++ b/modules/file/nmmxyz.c
@@ -1,5 +1,5 @@
/*
- * $Id: nmmxyz.c 19280 2016-11-16 17:31:41Z yeti-dn $
+ * $Id: nmmxyz.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2016 David Necas (Yeti).
*
* This program is free software; you can redistribute it and/or modify
@@ -206,7 +206,7 @@ static GwyModuleInfo module_info = {
"2016",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, nmmxyz)
static gboolean
module_register(void)
diff --git a/modules/file/nt-mdt.c b/modules/file/nt-mdt.c
index 7df83fb..78e0356 100644
--- a/modules/file/nt-mdt.c
+++ b/modules/file/nt-mdt.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: nt-mdt.c 19131 2016-10-30 11:28:17Z dn2010 $
+ * @(#) $Id: nt-mdt.c 20185 2017-08-07 13:59:41Z yeti-dn $
* Copyright (C) 2004 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -148,7 +148,8 @@ typedef enum {
MDT_UNIT_RESERVED_DOS1 = 36,
MDT_UNIT_RESERVED_DOS2 = 37,
MDT_UNIT_RESERVED_DOS3 = 38,
- MDT_UNIT_RESERVED_DOS4 = 39
+ MDT_UNIT_RESERVED_DOS4 = 39,
+ MDT_UNIT_HERZ = 1170
} MDTUnit;
typedef enum {
@@ -342,8 +343,11 @@ typedef struct {
gint sp_4u;
gint sp_4i;
gint sp_nx;
- gchar sp_reserved[3];
- gchar sp_ev2;
+ gchar sp_reserved[95];
+ gchar sp_ver;
+ guint scn_guid;
+
+ //gchar sp_ev2;
/* XXX: much more stuff can be here */
/* Frame mode stuff */
@@ -360,6 +364,7 @@ typedef struct {
guint title_len;
const guchar *title;
gchar *xmlstuff;
+ MDTFrameType frame_type;
} MDTSpectroscopyDataFrame;
typedef struct {
@@ -621,7 +626,7 @@ static const GwyEnum frame_types[] = {
{ "MDA", MDT_FRAME_MDA },
{ "Palette", MDT_FRAME_PALETTE },
{ "Curves", MDT_FRAME_CURVES },
- { "New Curves", MDT_FRAME_CURVES_NEW }
+ { "New Curves", MDT_FRAME_CURVES_NEW }
};
#endif
@@ -677,6 +682,7 @@ static const GwyEnum mdt_units[] = {
{ "", MDT_UNIT_RESERVED_DOS2 },
{ "", MDT_UNIT_RESERVED_DOS3 },
{ "", MDT_UNIT_RESERVED_DOS4 },
+ { "Hz", MDT_UNIT_HERZ },
};
#else /* {{{ */
/* This code block was GENERATED by flatten.py.
@@ -686,7 +692,7 @@ static const gchar mdt_units_name[] =
"1/cm\000\000\000\000\000m\000cm\000mm\000µm\000nm\000Å\000nA\000V"
"\000\000kHz\000deg\000%\000°C\000V\000s\000ms\000µs\000ns\000\000px"
"\000\000\000\000\000\000A\000mA\000µA\000nA\000pA\000V\000mV\000µV"
- "\000nV\000pV\000N\000mN\000µN\000nN\000pN\000\000\000\000\000";
+ "\000nV\000pV\000N\000mN\000µN\000nN\000pN\000\000\000\000\000\000Hz";
static const GwyFlatEnum mdt_units[] = {
{ 0, MDT_UNIT_RAMAN_SHIFT },
@@ -739,6 +745,7 @@ static const GwyFlatEnum mdt_units[] = {
{ 117, MDT_UNIT_RESERVED_DOS2 },
{ 118, MDT_UNIT_RESERVED_DOS3 },
{ 119, MDT_UNIT_RESERVED_DOS4 },
+ { 120, MDT_UNIT_HERZ },
};
#endif /* }}} */
@@ -842,12 +849,12 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Imports NT-MDT data files."),
"Yeti <yeti at gwyddion.net>",
- "0.22",
+ "0.23",
"David Nečas (Yeti) & Petr Klapetek",
"2004",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, nt_mdt)
static gboolean
module_register(void)
@@ -1512,7 +1519,7 @@ mdt_scanned_data_vars(const guchar *p,
p += 14 + frame->fm_ndots * 16;
}
- if (frame->fm_xres * frame->fm_yres) {
+ if (frame->fm_xres && frame->fm_yres) {
frame->image = p;
p += sizeof(gint16)*frame->fm_xres*frame->fm_yres;
}
@@ -1619,10 +1626,13 @@ mdt_spectroscopy_data_vars(const guchar *p,
(guint)(frame_size - (p - fstart)));
if (frame->fm_ndots) {
frame->dots = p;
- p += 14 + frame->fm_ndots * 16;
+ if (frame->frame_type == MDT_FRAME_SPECTROSCOPY)
+ p += frame->fm_ndots * 4;
+ else if (frame->frame_type == MDT_FRAME_CURVES)
+ p += 14 + frame->fm_ndots * 16;
}
- if (frame->fm_xres * frame->fm_yres) {
+ if (frame->fm_xres && frame->fm_yres) {
frame->data = p;
p += sizeof(gint16)*frame->fm_xres*frame->fm_yres;
}
@@ -1930,6 +1940,7 @@ mdt_real_load(const guchar *buffer,
}
spframe = g_new0(MDTSpectroscopyDataFrame, 1);
+ spframe->frame_type = frame->type;
if (!mdt_spectroscopy_data_vars(p, fstart, spframe,
frame->size, frame->var_size, error))
return FALSE;
@@ -2059,6 +2070,7 @@ extract_scanned_spectrum (MDTSpectroscopyDataFrame *dataframe, guint number)
const gint16 *p;
const gchar *unit;
gchar *framename;
+
unit = gwy_flat_enum_to_string(dataframe->x_scale.unit,
G_N_ELEMENTS(mdt_units),
mdt_units, mdt_units_name);
@@ -2256,7 +2268,7 @@ static GwySpectra* extract_sps_curve (MDTSpectroscopyDataFrame *dataframe,
gdouble *ydata = NULL;
G_GNUC_UNUSED gdouble xreal, zscale;
gdouble deltax;
- gint power10x, power10z, power10coordxy;
+ gint power10x, power10z, power10coordxy = 0;
const guchar *p;
const gchar *unit;
gchar *framename;
@@ -2285,13 +2297,19 @@ static GwySpectra* extract_sps_curve (MDTSpectroscopyDataFrame *dataframe,
coordheader.headersize = gwy_get_gint32_le(&p);
coordheader.coordsize = gwy_get_gint32_le(&p);
coordheader.version = gwy_get_gint32_le(&p);
- coordheader.xyunits = (MDTUnit)gwy_get_gint16_le(&p);
+ coordheader.xyunits = gwy_get_gint16_le(&p);
+ gwy_debug("headersize=%d coordsize=%d ver=%d xyunits=%d",
+ coordheader.headersize,
+ coordheader.coordsize,
+ coordheader.version,
+ coordheader.xyunits);
spectra = gwy_spectra_new();
unit = gwy_flat_enum_to_string(coordheader.xyunits,
G_N_ELEMENTS(mdt_units),
mdt_units, mdt_units_name);
+ gwy_debug("unit=%s", unit);
siunitcoordxy = gwy_si_unit_new_parse(unit, &power10coordxy);
gwy_spectra_set_si_unit_xy(spectra, siunitcoordxy);
g_object_unref(siunitcoordxy);
@@ -2304,6 +2322,11 @@ static GwySpectra* extract_sps_curve (MDTSpectroscopyDataFrame *dataframe,
coordinates[i].coordy = gwy_get_gfloat_le(&p);
coordinates[i].forward_size = gwy_get_gint32_le(&p);
coordinates[i].backward_size = gwy_get_gint32_le(&p);
+ gwy_debug("i=%d x=%g y=%g forw_size=%d backw_size=%d", i,
+ coordinates[i].coordx,
+ coordinates[i].coordy,
+ coordinates[i].forward_size,
+ coordinates[i].backward_size);
}
p = dataframe->data;
diff --git a/modules/file/nxiifile.c b/modules/file/nxiifile.c
index f4f417e..3b84742 100644
--- a/modules/file/nxiifile.c
+++ b/modules/file/nxiifile.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: nxiifile.c 16650 2014-10-08 07:47:07Z yeti-dn $
+ * @(#) $Id: nxiifile.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2014 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -120,7 +120,7 @@ static GwyModuleInfo module_info = {
"2014",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, nxiifile)
static gboolean
module_register(void)
diff --git a/modules/file/oldmda.c b/modules/file/oldmda.c
index fedf064..72200ae 100644
--- a/modules/file/oldmda.c
+++ b/modules/file/oldmda.c
@@ -1,5 +1,5 @@
/*
- * $Id: oldmda.c 18234 2016-01-27 14:57:31Z yeti-dn $
+ * $Id: oldmda.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2010-2011 David Necas (Yeti), Petr Klapetek,
* Daniil Bratashov (dn2010)
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net, dn2010 at gmail.com
@@ -155,7 +155,7 @@ static GwyModuleInfo module_info = {
"2012",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, oldmda)
static gboolean
module_register(void)
diff --git a/modules/file/ols.c b/modules/file/ols.c
index 8fc8d32..4c6f313 100644
--- a/modules/file/ols.c
+++ b/modules/file/ols.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: ols.c 16387 2014-07-10 10:41:50Z yeti-dn $
+ * @(#) $Id: ols.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2006 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -69,7 +69,7 @@ static GwyModuleInfo module_info = {
"2008",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, ols)
static gboolean
module_register(void)
diff --git a/modules/file/ometiff.c b/modules/file/ometiff.c
index 5520cf9..1b88c3a 100644
--- a/modules/file/ometiff.c
+++ b/modules/file/ometiff.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: ometiff.c 18616 2016-04-21 15:06:40Z yeti-dn $
+ * @(#) $Id: ometiff.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2013-2016 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -158,7 +158,7 @@ static GwyModuleInfo module_info = {
"2013",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, ometiff)
static gboolean
module_register(void)
diff --git a/modules/file/omicron.c b/modules/file/omicron.c
index 33f7bdf..0101519 100644
--- a/modules/file/omicron.c
+++ b/modules/file/omicron.c
@@ -1,5 +1,5 @@
/*
- * $Id: omicron.c 19071 2016-10-14 09:02:41Z yeti-dn $
+ * $Id: omicron.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2006-2011 David Necas (Yeti), Petr Klapetek, Markus Pristovsek
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net,
* prissi at gift.physik.tu-berlin.de.
@@ -168,7 +168,7 @@ static GwyModuleInfo module_info = {
"2006",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, omicron)
static gboolean
module_register(void)
diff --git a/modules/file/omicronflat.c b/modules/file/omicronflat.c
index 7409784..9631022 100644
--- a/modules/file/omicronflat.c
+++ b/modules/file/omicronflat.c
@@ -1,5 +1,5 @@
/*
- * $Id: omicronflat.c 19044 2016-10-08 19:10:46Z yeti-dn $
+ * $Id: omicronflat.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2015 David Necas (Yeti).
*
* This program is free software; you can redistribute it and/or modify
@@ -362,7 +362,7 @@ static GwyModuleInfo module_info = {
"2015",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, omicronflat)
static gboolean
module_register(void)
diff --git a/modules/file/omicronmatrix.c b/modules/file/omicronmatrix.c
index ad28b34..ba20a29 100644
--- a/modules/file/omicronmatrix.c
+++ b/modules/file/omicronmatrix.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: omicronmatrix.c 18440 2016-03-15 18:44:30Z yeti-dn $
+ * @(#) $Id: omicronmatrix.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2008, Philipp Rahe, David Necas
* E-mail: hquerquadrat at gmail.com
*
@@ -204,7 +204,7 @@ static GwyModuleInfo module_info = {
"2008",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, omicronmatrix)
static gboolean module_register(void)
{
diff --git a/modules/file/opdfile.c b/modules/file/opdfile.c
index 5ae59a2..3c40776 100644
--- a/modules/file/opdfile.c
+++ b/modules/file/opdfile.c
@@ -1,6 +1,6 @@
/*
- * $Id: opdfile.c 19044 2016-10-08 19:10:46Z yeti-dn $
- * Copyright (C) 2008 David Necas (Yeti).
+ * $Id: opdfile.c 20092 2017-07-26 10:28:17Z yeti-dn $
+ * Copyright (C) 2008-2017 David Necas (Yeti).
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -82,7 +82,7 @@
#define MAGIC_SIZE (sizeof(MAGIC)-1)
#define EXTENSION ".opd"
-#define MAGIC_ASC "Wyko ASCII Data File Format 0\t0\t1"
+#define MAGIC_ASC "Wyko ASCII Data File Format "
#define MAGIC_ASC_SIZE (sizeof(MAGIC_ASC)-1)
#define EXTENSION_ASC ".asc"
@@ -105,6 +105,10 @@ enum {
OPD_FLOAT = 7,
OPD_DOUBLE = 8,
OPD_LONG = 12,
+ /* Serialised structs; some look like bits of OPDx, some do not. If this
+ * appears positions in the file are off. Unfortunately not just of the
+ * binary stuff but apparently also of other things. */
+ OPD_BINARY_STUFF = 15,
} OPDDataType;
typedef enum {
@@ -113,6 +117,12 @@ typedef enum {
OPD_ARRAY_BYTE = 1,
} OPDArrayType;
+typedef enum {
+ OPD_STANDARD_IMAGE = 0,
+ OPD_XYZ_PIXEL = 1,
+ OPD_XYZ_REAL = 2,
+} OPDArrayFormat;
+
/* The header consists of a sequence of these creatures. */
typedef struct {
/* This is in the file */
@@ -159,6 +169,7 @@ static void store_asc_meta (gpointer key,
gpointer value,
gpointer user_data);
static GwyDataField* get_asc_data_field(gchar **p,
+ OPDArrayFormat format,
guint xres,
guint yres,
gdouble pixel_size,
@@ -187,12 +198,12 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Imports Wyko OPD and ASC files."),
"Yeti <yeti at gwyddion.net>",
- "0.8",
+ "0.11",
"David Nečas (Yeti)",
"2008",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, opdfile)
static gboolean
module_register(void)
@@ -303,6 +314,11 @@ opd_load(const gchar *filename,
}
nblocks = j;
+ /* XXX: There can be a block called "\xcaxtendedKe\xfds" at the end that
+ * provides mapping from the names truncated to 16 bytes to full names.
+ * Unfortunately, it is of type OPD_BINARY_STUFF and therefore in a
+ * different position in the file than @pos says... */
+
if (!check_sizes(header, nblocks, error))
goto fail;
@@ -416,10 +432,16 @@ get_block(OPDBlock *block, const guchar **p)
if (strncmp(block->name, "AdjustVSI_", sizeof("AdjustVSI_")-1) == 0
&& block->type == 7
&& block->size == 2) {
- g_warning("Changing the type of field %s from float to short.",
- block->name);
+ gwy_info("Changing the type of field %s from float to short.",
+ block->name);
block->type = 6;
}
+ if (gwy_strequal(block->name, "ImageModificat~0")
+ && block->type == 7
+ && block->size == 40) {
+ gwy_info("Changing the size of field %s from 40 to 4.", block->name);
+ block->size = 4;
+ }
}
static gboolean
@@ -705,6 +727,9 @@ opd_asc_load(const gchar *filename,
gchar *line, *p, *s, *buffer = NULL;
GHashTable *hash = NULL;
guint j, xres = 0, yres = 0;
+ OPDArrayFormat format;
+ gint tmp;
+ gboolean real_units, is_float;
gsize size;
GError *err = NULL;
@@ -715,10 +740,22 @@ opd_asc_load(const gchar *filename,
p = buffer;
line = gwy_str_next_line(&p);
- if (!gwy_strequal(line, MAGIC_ASC)) {
+ if (!g_str_has_prefix(line, MAGIC_ASC)) {
err_FILE_TYPE(error, "Wyko ASC data");
goto fail;
}
+ if (sscanf(line + MAGIC_ASC_SIZE, "%d %d %d",
+ &tmp, &real_units, &is_float) != 3) {
+ err_INVALID(error, "Data File Format");
+ goto fail;
+ }
+ format = tmp;
+ gwy_debug("array format %d, real units %d, is float %d",
+ format, real_units, is_float);
+ if (format < 0 || format > 2) {
+ err_UNSUPPORTED(error, "Array Format");
+ goto fail;
+ }
container = gwy_container_new();
hash = g_hash_table_new(g_str_hash, g_str_equal);
@@ -754,7 +791,7 @@ opd_asc_load(const gchar *filename,
if (gwy_stramong(line, "OPD", "SAMPLE_DATA", "RAW_DATA", "RAW DATA",
"Image", "Intensity", "SecArr_0", "Raw",
NULL)) {
- gdouble pixel_size, wavelength, mult = 1.0, aspect = 1.0;
+ gdouble pixel_size, wavelength, mult = 1.0, aspect = 1.0, zcalib;
gboolean intensity;
gchar *k;
@@ -782,27 +819,28 @@ opd_asc_load(const gchar *filename,
if ((s = g_hash_table_lookup(hash, "Aspect")))
aspect = g_ascii_strtod(s, NULL);
+ /* Should only occur in integer-data files. Have not seen any... */
if ((s = g_hash_table_lookup(hash, "Mult")))
mult = g_ascii_strtod(s, NULL);
- /* TODO: mult, aspect */
+ intensity = gwy_stramong(line,
+ "Image", "Intensity", "SecArr_0", NULL);
- wavelength *= Nanometer;
pixel_size *= Milimeter;
- wavelength /= mult;
+ zcalib = Nanometer*mult;
+ if (!intensity && !real_units)
+ zcalib *= wavelength;
dfield = mfield = NULL;
- intensity = gwy_stramong(line,
- "Image", "Intensity", "SecArr_0", NULL);
- dfield = get_asc_data_field(&p, xres, yres,
- pixel_size, aspect,
- intensity ? 1.0 : wavelength,
+ dfield = get_asc_data_field(&p, format, xres, yres,
+ pixel_size, aspect, zcalib,
intensity ? "" : "m",
intensity ? NULL : &mfield);
if (!dfield) {
g_set_error(error, GWY_MODULE_FILE_ERROR,
GWY_MODULE_FILE_ERROR_DATA,
_("Truncated data in block %s"), line);
+ GWY_OBJECT_UNREF(container);
goto fail;
}
@@ -851,7 +889,7 @@ opd_asc_load(const gchar *filename,
g_object_unref(meta);
}
else {
- g_object_unref(container);
+ GWY_OBJECT_UNREF(container);
err_NO_DATA(error);
}
@@ -881,14 +919,15 @@ store_asc_meta(gpointer key,
static GwyDataField*
get_asc_data_field(gchar **p,
- guint xres, guint yres,
- gdouble pixel_size, gdouble aspect, gdouble wavelength,
+ OPDArrayFormat format, guint xres, guint yres,
+ gdouble pixel_size, gdouble aspect, gdouble zcalib,
const gchar *zunits,
GwyDataField **maskfield)
{
GwyDataField *dfield, *mfield;
GwySIUnit *siunit;
gdouble *data, *mdata;
+ const gchar *sprev;
guint mcount, i, j;
gchar *s;
@@ -912,27 +951,60 @@ get_asc_data_field(gchar **p,
data = gwy_data_field_get_data(dfield);
mdata = gwy_data_field_get_data(mfield);
- for (j = 0; j < xres; j++) {
- if (!(s = gwy_str_next_line(p)))
- goto fail;
+ if (format == OPD_XYZ_PIXEL || format == OPD_XYZ_REAL) {
+ gwy_debug("assuming XYZ format");
+ for (j = 0; j < xres; j++) {
+ for (i = yres; i; i--) {
+ if (!(s = gwy_str_next_line(p)))
+ goto fail;
+
+ /* Y and X, we just ignore them */
+ if (!(s = strchr(s, '\t')))
+ goto fail;
+ s++;
+ if (!(s = strchr(s, '\t')))
+ goto fail;
+ s++;
- for (i = yres; i; i--) {
- const gchar *sprev = s;
+ sprev = s;
+ if (strncmp(s, "Bad", 3) == 0) {
+ mdata[(i - 1)*xres + j] = 0.0;
+ s += 3;
+ }
+ else
+ data[(i - 1)*xres + j] = g_ascii_strtod(s, &s)*zcalib;
- if (strncmp(s, "Bad", 3) == 0) {
- mdata[(i - 1)*xres + j] = 0.0;
- s += 3;
+ if (s == sprev)
+ goto fail;
}
- else
- data[(i - 1)*xres + j] = g_ascii_strtod(s, &s)*wavelength;
+ }
+ }
+ else if (format == OPD_STANDARD_IMAGE) {
+ gwy_debug("assuming data matrix format");
+ for (j = 0; j < xres; j++) {
+ if (!(s = gwy_str_next_line(p)))
+ goto fail;
- while (g_ascii_isspace(*s))
- s++;
+ for (i = yres; i; i--) {
+ sprev = s;
+ if (strncmp(s, "Bad", 3) == 0) {
+ mdata[(i - 1)*xres + j] = 0.0;
+ s += 3;
+ }
+ else
+ data[(i - 1)*xres + j] = g_ascii_strtod(s, &s)*zcalib;
- if (s == sprev)
- goto fail;
+ while (g_ascii_isspace(*s))
+ s++;
+
+ if (s == sprev)
+ goto fail;
+ }
}
}
+ else {
+ g_assert_not_reached();
+ }
mcount = gwy_app_channel_remove_bad_data(dfield, mfield);
diff --git a/modules/file/pltfile.c b/modules/file/pltfile.c
index 88ddb86..1a0de19 100644
--- a/modules/file/pltfile.c
+++ b/modules/file/pltfile.c
@@ -1,5 +1,5 @@
/*
- * $Id: pltfile.c 17718 2015-11-06 08:04:04Z pecold $
+ * $Id: pltfile.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2009 David Necas (Yeti).
*
* This program is free software; you can redistribute it and/or modify
@@ -83,7 +83,7 @@ static GwyModuleInfo module_info = {
"2009",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, pltfile)
static gboolean
module_register(void)
diff --git a/modules/file/pnifile.c b/modules/file/pnifile.c
index 3023fce..c91b63f 100644
--- a/modules/file/pnifile.c
+++ b/modules/file/pnifile.c
@@ -1,5 +1,5 @@
/*
- * $Id: pnifile.c 16387 2014-07-10 10:41:50Z yeti-dn $
+ * $Id: pnifile.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2006 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -125,7 +125,7 @@ static GwyModuleInfo module_info = {
"2006",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, pnifile)
static gboolean
module_register(void)
diff --git a/modules/file/princetonspe.c b/modules/file/princetonspe.c
index 439dc5b..4e15d29 100644
--- a/modules/file/princetonspe.c
+++ b/modules/file/princetonspe.c
@@ -1,5 +1,5 @@
/*
- * $Id: princetonspe.c 17639 2015-10-23 07:38:32Z yeti-dn $
+ * $Id: princetonspe.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2015 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -114,7 +114,7 @@ static GwyModuleInfo module_info = {
"2015",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, princetonspe)
static gboolean
module_register(void)
diff --git a/modules/file/psia.c b/modules/file/psia.c
index 79b5b5c..224348b 100644
--- a/modules/file/psia.c
+++ b/modules/file/psia.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: psia.c 18034 2016-01-08 14:02:03Z yeti-dn $
+ * @(#) $Id: psia.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2006 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -245,7 +245,7 @@ static GwyModuleInfo module_info = {
"2006",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, psia)
static gboolean
module_register(void)
diff --git a/modules/file/pt3file.c b/modules/file/pt3file.c
index 2093179..593090a 100644
--- a/modules/file/pt3file.c
+++ b/modules/file/pt3file.c
@@ -1,5 +1,5 @@
/*
- * $Id: pt3file.c 19216 2016-11-09 10:39:06Z yeti-dn $
+ * $Id: pt3file.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2009 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -300,7 +300,7 @@ static GwyModuleInfo module_info = {
"2009",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, pt3file)
static gboolean
module_register(void)
diff --git a/modules/file/quesant.c b/modules/file/quesant.c
index 7b57089..7c78eaf 100644
--- a/modules/file/quesant.c
+++ b/modules/file/quesant.c
@@ -72,7 +72,7 @@ static GwyModuleInfo module_info = {
"2008",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, quesant)
static gboolean
module_register(void)
diff --git a/modules/file/rawfile.c b/modules/file/rawfile.c
index 4234492..e3954e0 100644
--- a/modules/file/rawfile.c
+++ b/modules/file/rawfile.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: rawfile.c 17842 2015-12-14 22:02:16Z yeti-dn $
+ * @(#) $Id: rawfile.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2003,2004 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -315,7 +315,7 @@ static const gboolean xymeasureeq_default = TRUE;
/* for read_ascii_data() error reporting */
static GQuark error_domain = 0;
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, rawfile)
static gboolean
module_register(void)
diff --git a/modules/file/rawgraph.c b/modules/file/rawgraph.c
index 0c56b45..0e7928e 100644
--- a/modules/file/rawgraph.c
+++ b/modules/file/rawgraph.c
@@ -1,5 +1,5 @@
/*
- * $Id: rawgraph.c 19044 2016-10-08 19:10:46Z yeti-dn $
+ * $Id: rawgraph.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2009 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -111,7 +111,7 @@ static GwyModuleInfo module_info = {
"2009",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, rawgraph)
static gboolean
module_register(void)
diff --git a/modules/file/rawxyz.c b/modules/file/rawxyz.c
index 052dac5..1d7564e 100644
--- a/modules/file/rawxyz.c
+++ b/modules/file/rawxyz.c
@@ -1,5 +1,5 @@
/*
- * $Id: rawxyz.c 19044 2016-10-08 19:10:46Z yeti-dn $
+ * $Id: rawxyz.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2009-2016 David Necas (Yeti).
*
* This program is free software; you can redistribute it and/or modify
@@ -104,7 +104,7 @@ static GwyModuleInfo module_info = {
"2009",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, rawxyz)
static gboolean
module_register(void)
diff --git a/modules/file/renishaw.c b/modules/file/renishaw.c
index 05970bd..2f5b287 100644
--- a/modules/file/renishaw.c
+++ b/modules/file/renishaw.c
@@ -1,5 +1,5 @@
/*
- * $Id: renishaw.c 18238 2016-01-27 21:14:14Z yeti-dn $
+ * $Id: renishaw.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2014 Daniil Bratashov (dn2010), David Necas (Yeti)..
* Data structures and constants are copyright (c) 2011 Renishaw plc.
*
@@ -372,7 +372,7 @@ static GwyModuleInfo module_info = {
"2014",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, renishaw)
static gboolean
module_register(void)
@@ -715,6 +715,9 @@ wdf_load(const gchar *filename,
gwy_graph_curve_model_set_data(gcmodel, xdata, ydata, zres);
g_free(xdata);
g_free(ydata);
+ if (!gwy_graph_curve_model_is_ordered(gcmodel)) {
+ gwy_graph_curve_model_enforce_order(gcmodel);
+ }
gwy_graph_model_add_curve(gmodel, gcmodel);
g_object_unref(gcmodel);
g_free(title);
@@ -764,6 +767,9 @@ wdf_load(const gchar *filename,
g_free(title);
gwy_graph_curve_model_set_data(gcmodel, xdata, ydata, zres);
g_free(ydata);
+ if (!gwy_graph_curve_model_is_ordered(gcmodel)) {
+ gwy_graph_curve_model_enforce_order(gcmodel);
+ }
gwy_graph_model_add_curve(gmodel, gcmodel);
g_object_unref(gcmodel);
}
@@ -1235,6 +1241,9 @@ wdf_load(const gchar *filename,
NULL);
gwy_graph_curve_model_set_data(gcmodel,
xdata, ydata, zres);
+ if (!gwy_graph_curve_model_is_ordered(gcmodel)) {
+ gwy_graph_curve_model_enforce_order(gcmodel);
+ }
gwy_graph_model_add_curve(gmodel, gcmodel);
g_object_unref(gcmodel);
g_free(title);
diff --git a/modules/file/rhk-sm3.c b/modules/file/rhk-sm3.c
index 1e6b8e4..e6aee64 100644
--- a/modules/file/rhk-sm3.c
+++ b/modules/file/rhk-sm3.c
@@ -1,5 +1,5 @@
/*
- * $Id: rhk-sm3.c 17795 2015-11-30 13:56:39Z yeti-dn $
+ * $Id: rhk-sm3.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2005,2008 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -247,7 +247,7 @@ static const GwyEnum scan_directions[] = {
{ "Down", RHK_SCAN_DOWN, },
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, rhk_sm3)
static gboolean
module_register(void)
diff --git a/modules/file/rhk-spm32.c b/modules/file/rhk-spm32.c
index 07ddd1e..d3584c3 100644
--- a/modules/file/rhk-spm32.c
+++ b/modules/file/rhk-spm32.c
@@ -1,5 +1,5 @@
/*
- * $Id: rhk-spm32.c 19216 2016-11-09 10:39:06Z yeti-dn $
+ * $Id: rhk-spm32.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2005 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -187,7 +187,7 @@ static const GwyEnum scan_directions[] = {
{ "Down", RHK_SCAN_DOWN, },
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, rhk_spm32)
static gboolean
module_register(void)
diff --git a/modules/file/robotics.c b/modules/file/robotics.c
index e5a316c..3d10012 100644
--- a/modules/file/robotics.c
+++ b/modules/file/robotics.c
@@ -85,7 +85,7 @@ static GwyModuleInfo module_info = {
"2011",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, robotics)
static gboolean
module_register(void)
diff --git a/modules/file/s94file.c b/modules/file/s94file.c
index c2ca1a2..e8b7db4 100644
--- a/modules/file/s94file.c
+++ b/modules/file/s94file.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: s94file.c 17718 2015-11-06 08:04:04Z pecold $
+ * @(#) $Id: s94file.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2013 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -100,7 +100,7 @@ static GwyModuleInfo module_info = {
"2013",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, s94file)
static gboolean
module_register(void)
diff --git a/modules/file/sdfile.c b/modules/file/sdfile.c
index 486c3c9..11d8727 100644
--- a/modules/file/sdfile.c
+++ b/modules/file/sdfile.c
@@ -1,5 +1,5 @@
/*
- * $Id: sdfile.c 17718 2015-11-06 08:04:04Z pecold $
+ * $Id: sdfile.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2005 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -161,7 +161,7 @@ static GwyModuleInfo module_info = {
static const guint type_sizes[] = { 1, 2, 4, 4, 1, 2, 4, 8 };
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, sdfile)
static gboolean
module_register(void)
diff --git a/modules/file/seiko.c b/modules/file/seiko.c
index 97863b5..ac3cb6f 100644
--- a/modules/file/seiko.c
+++ b/modules/file/seiko.c
@@ -1,5 +1,5 @@
/*
- * $Id: seiko.c 18613 2016-04-19 19:35:15Z yeti-dn $
+ * $Id: seiko.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2006 David Necas (Yeti), Markus Pristovsek.
* E-mail: yeti at gwyddion.net, prissi at gift.physik.tu-berlin.de.
*
@@ -117,12 +117,12 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Imports Seiko XQB, XQD, XQT and XQP files."),
"Yeti <yeti at gwyddion.net>",
- "0.12",
+ "0.13",
"David Nečas (Yeti) & Markus Pristovsek",
"2006",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, seiko)
static gboolean
module_register(void)
@@ -183,6 +183,7 @@ seiko_load(const gchar *filename,
GwyDataField *dfield = NULL;
SeikoDataType datatype = SEIKO_TOPOGRAPHY;
gchar *comment;
+ const gchar *extension;
if (!gwy_file_get_contents(filename, &buffer, &size, &err)) {
err_GET_FILE_CONTENTS(error, &err);
@@ -206,12 +207,12 @@ seiko_load(const gchar *filename,
/* FIXME: I was not able to reverse-engineer what identifies the type.
* May need a large set of files. */
- if (g_str_has_suffix(filename, ".xqp")
- || g_str_has_suffix(filename, ".XQP"))
- datatype = SEIKO_PHASE;
- else if (g_str_has_suffix(filename, ".xqi")
- || g_str_has_suffix(filename, ".XQI"))
- datatype = SEIKO_CURRENT;
+ if ((extension = strrchr(filename, '.'))) {
+ if (gwy_stramong(extension+1, "xqp", "XQP", "xqpx", "XQPX", NULL))
+ datatype = SEIKO_PHASE;
+ else if (gwy_stramong(extension+1, "xqi", "XQI", "xqix", "XQIX", NULL))
+ datatype = SEIKO_CURRENT;
+ }
dfield = read_data_field(buffer, size, datatype, error);
if (!dfield) {
@@ -258,7 +259,7 @@ read_data_field(const guchar *buffer,
};
gint xres, yres;
G_GNUC_UNUSED guint version;
- guint endfile, datastart;
+ guint endfile, datastart, imgsize;
gdouble xreal, yreal, q, z0;
GwyDataField *dfield;
GwySIUnit *siunit;
@@ -284,9 +285,18 @@ read_data_field(const guchar *buffer,
if (err_DIMENSION(error, xres) || err_DIMENSION(error, yres))
return NULL;
- if (err_SIZE_MISMATCH(error, xres*yres*sizeof(gint16), endfile - datastart,
- TRUE))
- return NULL;
+ imgsize = xres*yres*sizeof(guint16);
+ if (err_SIZE_MISMATCH(error, imgsize, endfile - datastart, TRUE)) {
+ /* The XQ?X files can have multiple images. And each also comes with
+ * an extra headers. We at least try to import the first one. */
+ guint nimages = (endfile - datastart)/imgsize;
+
+ gwy_debug("nimages: %u", nimages);
+ if (endfile - datastart == nimages*imgsize + (nimages-1)*HEADER_SIZE)
+ g_clear_error(error);
+ else
+ return NULL;
+ }
p = buffer + XSCALE_OFFSET;
xreal = gwy_get_gdouble_le(&p) * Nanometer;
diff --git a/modules/file/sensofar.c b/modules/file/sensofar.c
index 792d8a8..56902db 100644
--- a/modules/file/sensofar.c
+++ b/modules/file/sensofar.c
@@ -205,7 +205,7 @@ static GwyModuleInfo module_info = {
"2008",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, sensofar)
static gboolean
module_register(void)
diff --git a/modules/file/sensolytics.c b/modules/file/sensolytics.c
index d4c8ced..fb2bd89 100644
--- a/modules/file/sensolytics.c
+++ b/modules/file/sensolytics.c
@@ -1,5 +1,5 @@
/*
- * $Id: sensolytics.c 17718 2015-11-06 08:04:04Z pecold $
+ * $Id: sensolytics.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2009 David Necas (Yeti).
*
* This program is free software; you can redistribute it and/or modify
@@ -115,7 +115,7 @@ static GwyModuleInfo module_info = {
"2009",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, sensolytics)
static gboolean
module_register(void)
diff --git a/modules/file/shimadzu.c b/modules/file/shimadzu.c
index 39d5e7f..9a8fbc7 100644
--- a/modules/file/shimadzu.c
+++ b/modules/file/shimadzu.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: shimadzu.c 19044 2016-10-08 19:10:46Z yeti-dn $
+ * @(#) $Id: shimadzu.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2007 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -137,7 +137,7 @@ static GwyModuleInfo module_info = {
"2007",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, shimadzu)
static gboolean
module_register(void)
diff --git a/modules/file/sicmfile.c b/modules/file/sicmfile.c
index 26d4495..009e6db 100644
--- a/modules/file/sicmfile.c
+++ b/modules/file/sicmfile.c
@@ -1,5 +1,5 @@
/*
- * $Id: sicmfile.c 16387 2014-07-10 10:41:50Z yeti-dn $
+ * $Id: sicmfile.c 19948 2017-06-22 14:05:41Z yeti-dn $
* IonScope SICM file format importer
* Copyright (C) 2008-2010 Matthew Caldwell.
* E-mail: m.caldwell at ucl.ac.uk
@@ -198,7 +198,7 @@ static GwyModuleInfo module_info =
"Matthew Caldwell",
"2007-2010",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, sicmfile)
/*--------------------------------------------------------------------------*/
diff --git a/modules/file/sis.c b/modules/file/sis.c
index fe77a08..ed389b5 100644
--- a/modules/file/sis.c
+++ b/modules/file/sis.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: sis.c 19216 2016-11-09 10:39:06Z yeti-dn $
+ * @(#) $Id: sis.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2004 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -468,7 +468,7 @@ static GwyModuleInfo module_info = {
"2004",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, sis)
static gboolean
module_register(void)
diff --git a/modules/file/spip-asc.c b/modules/file/spip-asc.c
index 03ce2a8..1cf0ef4 100644
--- a/modules/file/spip-asc.c
+++ b/modules/file/spip-asc.c
@@ -1,5 +1,5 @@
/*
- * $Id: spip-asc.c 19044 2016-10-08 19:10:46Z yeti-dn $
+ * $Id: spip-asc.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2009 David Necas (Yeti).
*
* This program is free software; you can redistribute it and/or modify
@@ -95,7 +95,7 @@ static GwyModuleInfo module_info = {
"2009",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, spip_asc)
static gboolean
module_register(void)
diff --git a/modules/file/spmlab.c b/modules/file/spmlab.c
index cf71dc4..9aa5199 100644
--- a/modules/file/spmlab.c
+++ b/modules/file/spmlab.c
@@ -1,6 +1,6 @@
/*
- * $Id: spmlab.c 17550 2015-10-12 22:28:25Z yeti-dn $
- * Copyright (C) 2004 David Necas (Yeti), Petr Klapetek.
+ * $Id: spmlab.c 19948 2017-06-22 14:05:41Z yeti-dn $
+ * Copyright (C) 2004-2016 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
* Roughly based on code in Kasgira by MV <kasigra at seznam.cz>.
@@ -108,34 +108,78 @@
#include <libprocess/datafield.h>
#include <libgwymodule/gwymodule-file.h>
#include <app/gwymoduleutils-file.h>
+#include <app/data-browser.h>
#include "err.h"
-static gboolean module_register(void);
-static gint spmlab_detect (const GwyFileDetectInfo *fileinfo,
- gboolean only_name);
-static GwyContainer* spmlab_load (const gchar *filename,
- GwyRunType mode,
- GError **error);
-static GwyDataField* read_data_field(const guchar *buffer,
- guint size,
- guchar version,
- gchar **title,
- gint *direction,
- GError **error);
-static gchar* type_to_title (guint type);
+typedef struct {
+ guint dataoffset;
+ guint xres;
+ guint yres;
+ guint nlayers;
+ gint datatype;
+ gchar version;
+ gint direction;
+ gint datamode;
+ gint probetype;
+ gint stagetype;
+ gdouble xoff;
+ gdouble yoff;
+ gdouble xreal;
+ gdouble yreal;
+ gdouble q;
+ gdouble z0;
+ gdouble qrate;
+ gdouble layers_from;
+ gdouble layers_to;
+ GwySIUnit *unitxy;
+ GwySIUnit *unitz;
+ GwySIUnit *unitrate;
+ gchar *datatype_str;
+ gchar *probetype_str;
+ gchar *datamode_str;
+ gchar *model_str;
+ gchar *release;
+ gchar *datetime;
+ gchar *description;
+ gchar *scantype;
+} SPMLabFile;
+
+static gboolean module_register (void);
+static gint spmlab_detect (const GwyFileDetectInfo *fileinfo,
+ gboolean only_name);
+static GwyContainer* spmlab_load (const gchar *filename,
+ GwyRunType mode,
+ GError **error);
+static gboolean spmlab_read_header (SPMLabFile *slfile,
+ const guchar *buffer,
+ guint size,
+ GError **error);
+static void read_data_field (SPMLabFile *slfile,
+ const guchar *buffer,
+ GwyContainer *container,
+ guint i);
+static void add_meta (SPMLabFile *slfile,
+ GwyContainer *container,
+ guint i);
+static void spmlab_file_free (SPMLabFile *slfile);
+static const gchar* datatype_to_string (gint type);
+static const gchar* datamode_to_string (gint mode);
+static const gchar* stagetype_to_string(gint type);
+static const gchar* probetype_to_string(gint type);
+static const gchar* direction_to_string(gint type);
static GwyModuleInfo module_info = {
GWY_MODULE_ABI_VERSION,
&module_register,
N_("Imports Thermicroscopes SpmLab R3 to R7 data files."),
"Yeti <yeti at gwyddion.net>",
- "0.11",
+ "0.12",
"David Nečas (Yeti) & Petr Klapetek",
"2005",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, spmlab)
static gboolean
module_register(void)
@@ -195,60 +239,60 @@ spmlab_load(const gchar *filename,
{
GwyContainer *container = NULL;
guchar *buffer = NULL;
- gsize size = 0;
+ gsize size = 0, datablocksize;
GError *err = NULL;
- GwyDataField *dfield = NULL;
- gchar *title = NULL;
- gint dir;
+ SPMLabFile slfile;
+ guint i;
if (!gwy_file_get_contents(filename, &buffer, &size, &err)) {
err_GET_FILE_CONTENTS(error, &err);
return NULL;
}
- /* 2048 is wrong. moreover it differs for r5 and r4, kasigra uses 5752 for
- * r5 */
- if (size < 2048) {
- err_TOO_SHORT(error);
- gwy_file_abandon_contents(buffer, size, NULL);
- return NULL;
- }
+ gwy_clear(&slfile, 1);
if (buffer[0] != '#' || buffer[1] != 'R') {
err_FILE_TYPE(error, "Thermicroscopes SpmLab");
- gwy_file_abandon_contents(buffer, size, NULL);
- return NULL;
+ goto fail;
}
- switch (buffer[2]) {
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- dfield = read_data_field(buffer, size, buffer[2], &title, &dir, error);
- break;
-
- default:
+ slfile.version = buffer[2];
+ if (slfile.version < '3' || slfile.version > '7') {
g_set_error(error, GWY_MODULE_FILE_ERROR, GWY_MODULE_FILE_ERROR_DATA,
_("Unknown format version %c."), buffer[2]);
- break;
+ goto fail;
+ }
+ /* 2048 is wrong; moreover, it differs for r5 and r4, kasigra uses 5752 for
+ * r5. But we essentially need a value larger than the last thing we read
+ * from the header. */
+ if (size < 2048 || (slfile.version == 7 && size < 3216)) {
+ err_TOO_SHORT(error);
+ goto fail;
}
- gwy_file_abandon_contents(buffer, size, NULL);
- if (!dfield)
- return NULL;
-
- container = gwy_container_new();
- gwy_container_set_object_by_name(container, "/0/data", dfield);
- g_object_unref(dfield);
-
- if (title)
- gwy_container_set_string_by_name(container, "/0/data/title", title);
- else
- gwy_app_channel_title_fall_back(container, 0);
+ if (!spmlab_read_header(&slfile, buffer, size, error))
+ goto fail;
+ if (!slfile.nlayers) {
+ g_warning("Zero nlayers.");
+ slfile.nlayers = 1;
+ }
+ datablocksize = slfile.xres*slfile.yres*sizeof(guint16);
+ /* err_SIZE_MISMATCH() gets hairy with multiple channels and integer
+ * overflow possibility... */
+ if (slfile.dataoffset >= size
+ || (size - slfile.dataoffset)/datablocksize < slfile.nlayers) {
+ g_set_error(error, GWY_MODULE_FILE_ERROR, GWY_MODULE_FILE_ERROR_DATA,
+ _("Data block is truncated."));
+ goto fail;
+ }
- gwy_file_channel_import_log_add(container, 0, NULL, filename);
- /* TODO: Store direction to metadata, if known */
+ container = gwy_container_new();
+ for (i = 0; i < slfile.nlayers; i++) {
+ read_data_field(&slfile, buffer, container, i);
+ gwy_file_channel_import_log_add(container, i, NULL, filename);
+ }
+fail:
+ spmlab_file_free(&slfile);
+ gwy_file_abandon_contents(buffer, size, NULL);
return container;
}
@@ -258,48 +302,64 @@ get_gfloat_le_as_double(const guchar **p)
return gwy_get_gfloat_le(p);
}
-static GwyDataField*
-read_data_field(const guchar *buffer,
- guint size,
- guchar version,
- gchar **title,
- gint *direction,
- GError **error)
+static gboolean
+spmlab_read_header(SPMLabFile *slfile,
+ const guchar *buffer, guint size, GError **error)
{
- enum { MIN_REMAINDER = 2620 };
- /* information offsets in different versions, in r5+ relative to data
- * start, in order:
- * data offset,
- * pixel dimensions,
- * physical dimensions,
- * value multiplier,
- * unit string,
- * data type, (if zero, use channel title)
- * channel title (if zero, use data type)
- */
- const guint offsets34[] = {
- 0x0104, 0x0196, 0x01a2, 0x01b2, 0x01c2, 0x0400, 0x0000
+ enum {
+ UNIT_LEN = 10,
+ RELEASE_LEN = 16,
+ DATETIME_LEN = 20,
+ DESCRIPTION_LEN = 40,
+ STRING_LEN = 64,
+ TITLE_LEN = 256,
+ SCANTYPE_LEN = 6,
+ MIN_REMAINDER = 2620,
};
- const guint offsets56[] = {
- 0x0104, 0x025c, 0x0268, 0x0288, 0x02a0, 0x0708, 0x0000
+ /* Different version have the same information at different offsets.
+ * Use an indirect indexing to find things... */
+ enum {
+ DATASTART_IDX = 0,
+ PIXDIM_IDX = 1,
+ PHYSDIM_IDX = 2,
+ SCALING_IDX = 3,
+ UNITSTR_IDX = 4,
+ DATATYPE_IDX = 5, /* if offset is zero use channel title */
+ STRINGS_IDX = 6, /* if offset is zero use data type */
+ NLAYERS_IDX = 7,
+ SCANTYPE_IDX = 8,
+ LAYERPOS_IDX = 9,
+ NOFFSETS
};
- const guint offsets7[] = {
- 0x0104, 0x029c, 0x02a8, 0x02c8, 0x02e0, 0x0000, 0x0b90
+ /* Information offsets in the various versions, in r5+ relative to data
+ * start. */
+ const guint offsets34[NOFFSETS] = {
+ 0x0104, 0x0196, 0x01a2, 0x01b2, 0x01c2, 0x0400, 0x0000, 0x01e0, 0x0458,
+ 0x0000,
};
- gint xres, yres, doffset, i, power10, type;
- gdouble xreal, yreal, q, z0;
- GwyDataField *dfield;
- GwySIUnit *unitxy, *unitz;
- gdouble *data;
- const guint *offset;
+ const guint offsets56[NOFFSETS] = {
+ 0x0104, 0x025c, 0x0268, 0x0288, 0x02a0, 0x0708, 0x0000, 0x02be, 0x0798,
+ 0x08c0,
+ };
+ const guint offsets7[NOFFSETS] = {
+ 0x0104, 0x029c, 0x02a8, 0x02c8, 0x02e0, 0x0000, 0x0a58, 0x02fe, 0x0000,
+ 0x0000,
+ };
+ gint power10;
+ const guint *offsets;
const guchar *p, *r, *last;
+ gchar *s;
+ gchar version = slfile->version;
/* get floats in single precision from r4 but double from r5+ */
gdouble (*getflt)(const guchar**);
- *title = NULL;
- *direction = -1;
+ slfile->datatype = -1;
+ slfile->direction = -1;
+ slfile->datamode = -1;
+ slfile->probetype = -1;
+ slfile->stagetype = -1;
- if (version == '5' || version == '6' || version == '7') {
+ if (version >= '5' && version <= '7') {
/* There are more headers in r5,
* try to find something that looks like #R5. */
last = r = buffer;
@@ -312,112 +372,333 @@ read_data_field(const guchar *buffer,
else
r = p + 1;
}
- offset = (version == '7') ? &offsets7[0] : &offsets56[0];
+ offsets = (version == '7' ? offsets7 : offsets56);
+ /* Everything is relative to data start in r5+. */
+ slfile->dataoffset += last - buffer;
buffer = last;
getflt = &gwy_get_gdouble_le;
}
else {
- offset = &offsets34[0];
+ offsets = offsets34;
getflt = &get_gfloat_le_as_double;
}
- p = buffer + *(offset++);
- doffset = gwy_get_guint32_le(&p); /* this appears to be the same number
- as in the ASCII miniheader -- so get
- it here since it's easier */
- gwy_debug("data offset = %u", doffset);
- p = buffer + *(offset++);
- xres = gwy_get_guint32_le(&p);
- yres = gwy_get_guint32_le(&p);
- if (err_DIMENSION(error, xres) || err_DIMENSION(error, yres))
- return NULL;
- p = buffer + *(offset++);
- xreal = -getflt(&p);
- xreal += getflt(&p);
- yreal = -getflt(&p);
- yreal += getflt(&p);
- if (!((xreal = fabs(xreal)) > 0)) {
+ /* This appears to be the same number as in the ASCII miniheader -- so get
+ * it here since it's easier */
+ p = buffer + offsets[DATASTART_IDX];
+ slfile->dataoffset += gwy_get_guint32_le(&p);
+ gwy_debug("data offset = %u", slfile->dataoffset);
+
+ /* The release string includes also header size of it needs to be cleaned
+ * up for metadata. */
+ slfile->release = g_strndup(p, RELEASE_LEN);
+ p += RELEASE_LEN;
+ slfile->datetime = g_strndup(p, DATETIME_LEN);
+ p += DATETIME_LEN;
+ slfile->description = g_strndup(p, DESCRIPTION_LEN);
+ p += DESCRIPTION_LEN;
+
+ gwy_debug("release %s", slfile->release);
+ gwy_debug("datetime %s", slfile->datetime);
+
+ p = buffer + offsets[NLAYERS_IDX];
+ slfile->nlayers = gwy_get_guint16_le(&p);
+ gwy_debug("nlayers %u", slfile->nlayers);
+
+ p = buffer + offsets[PIXDIM_IDX];
+ slfile->xres = gwy_get_guint32_le(&p);
+ slfile->yres = gwy_get_guint32_le(&p);
+ if (err_DIMENSION(error, slfile->xres)
+ || err_DIMENSION(error, slfile->yres))
+ return FALSE;
+
+ p = buffer + offsets[PHYSDIM_IDX];
+ slfile->xoff = -getflt(&p);
+ slfile->xreal = getflt(&p) - slfile->xoff;
+ if (!((slfile->xreal = fabs(slfile->xreal)) > 0)) {
g_warning("Real x size is 0.0, fixing to 1.0");
- xreal = 1.0;
+ slfile->xreal = 1.0;
}
- if (!((yreal = fabs(yreal)) > 0)) {
+ slfile->yoff = -getflt(&p);
+ slfile->yreal = getflt(&p) - slfile->yoff;
+ if (!((slfile->yreal = fabs(slfile->yreal)) > 0)) {
g_warning("Real y size is 0.0, fixing to 1.0");
- yreal = 1.0;
+ slfile->yreal = 1.0;
}
- p = buffer + *(offset++);
- q = getflt(&p);
- z0 = getflt(&p);
+
+ p = buffer + offsets[SCALING_IDX];
+ slfile->q = getflt(&p);
+ slfile->z0 = getflt(&p);
gwy_debug("xreal.raw = %g, yreal.raw = %g, q.raw = %g, z0.raw = %g",
- xreal, yreal, q, z0);
- p = buffer + *(offset++);
- unitz = gwy_si_unit_new_parse(p, &power10);
- q *= pow10(power10);
- z0 *= pow10(power10);
- unitxy = gwy_si_unit_new_parse(p + 10, &power10);
- xreal *= pow10(power10);
- yreal *= pow10(power10);
+ slfile->xreal, slfile->yreal, slfile->q, slfile->z0);
+
+ p = buffer + offsets[UNITSTR_IDX];
+ s = g_strndup(p, UNIT_LEN);
+ slfile->unitz = gwy_si_unit_new_parse(s, &power10);
+ g_free(s);
+ slfile->q *= pow10(power10);
+ slfile->z0 *= pow10(power10);
+
+ p += UNIT_LEN;
+ s = g_strndup(p, UNIT_LEN);
+ slfile->unitxy = gwy_si_unit_new_parse(s, &power10);
+ g_free(s);
+ slfile->xreal *= pow10(power10);
+ slfile->yreal *= pow10(power10);
+ slfile->xoff *= pow10(power10);
+ slfile->yoff *= pow10(power10);
gwy_debug("xres = %d, yres = %d, xreal = %g, yreal = %g, q = %g, z0 = %g",
- xres, yres, xreal, yreal, q, z0);
- gwy_debug("unitxy = %s, unitz = %s", p, p + 10);
-
- if (offset[1]) {
- /* We know channel title */
- offset++;
- p = buffer + *(offset++);
- *title = g_strndup(p, size - (p - buffer));
- gwy_debug("title = <%s>", *title);
+ slfile->xres, slfile->yres, slfile->xreal, slfile->yreal,
+ slfile->q, slfile->z0);
+
+ p += UNIT_LEN;
+ s = g_strndup(p, UNIT_LEN);
+ slfile->unitrate = gwy_si_unit_new_parse(s, &power10);
+ g_free(s);
+ slfile->qrate = pow10(power10);
+
+ /* Optional stuff, i.e. this that either exists only in some version or
+ * we only know how to read in certain versions. */
+ if (offsets[STRINGS_IDX]) {
+ p = buffer + offsets[STRINGS_IDX];
+ slfile->probetype_str = g_strndup(p, size - (p - buffer));
+ p += STRING_LEN;
+ slfile->model_str = g_strndup(p, size - (p - buffer));
+ p += STRING_LEN;
+ p += 184; /* No idea why. Perhaps there can be something between. */
+ slfile->datatype_str = g_strndup(p, size - (p - buffer));
+ p += TITLE_LEN;
+ slfile->datamode_str = g_strndup(p, size - (p - buffer));
+ gwy_debug("title = <%s>", slfile->datatype_str);
}
- else {
- /* We know data type */
- p = buffer + *(offset++);
- type = gwy_get_guint16_le(&p);
- *direction = gwy_get_guint16_le(&p);
- gwy_debug("type = %d, dir = %d", type, *direction);
- offset++;
- *title = type_to_title(type);
+ if (offsets[DATATYPE_IDX]) {
+ p = buffer + offsets[DATATYPE_IDX];
+ slfile->datatype = gwy_get_gint16_le(&p);
+ slfile->direction = gwy_get_gint16_le(&p);
+ slfile->datamode = gwy_get_gint16_le(&p);
+ gwy_debug("type = %d, dir = %d", slfile->datatype, slfile->direction);
+ }
+ if (offsets[SCANTYPE_IDX]) {
+ p = buffer + offsets[SCANTYPE_IDX];
+ slfile->scantype = g_strndup(p, SCANTYPE_LEN);
+ p += SCANTYPE_LEN;
+ slfile->probetype = gwy_get_gint16_le(&p);
+ slfile->stagetype = gwy_get_gint16_le(&p);
+ }
+ if (offsets[LAYERPOS_IDX]) {
+ p = buffer + offsets[LAYERPOS_IDX];
+ slfile->layers_from = getflt(&p);
+ slfile->layers_to = getflt(&p);
}
- p = buffer + doffset;
- if (err_SIZE_MISMATCH(error, 2*xres*yres, size - (p - buffer), FALSE))
- return NULL;
+ if (!slfile->datatype_str)
+ slfile->datatype_str = g_strdup(datatype_to_string(slfile->datatype));
+
+ return TRUE;
+}
+
+static void
+read_data_field(SPMLabFile *slfile, const guchar *buffer,
+ GwyContainer *container, guint i)
+{
+ const guchar *p = buffer + slfile->dataoffset;
+ guint xres = slfile->xres, yres = slfile->yres, nlayers = slfile->nlayers;
+ gsize datablocksize;
+ GwyDataField *dfield;
+ GQuark key;
+
+ datablocksize = slfile->xres*slfile->yres*sizeof(guint16);
+ dfield = gwy_data_field_new(xres, yres, slfile->xreal, slfile->yreal,
+ FALSE);
+ gwy_serializable_clone(G_OBJECT(slfile->unitxy),
+ G_OBJECT(gwy_data_field_get_si_unit_xy(dfield)));
+ gwy_serializable_clone(G_OBJECT(slfile->unitz),
+ G_OBJECT(gwy_data_field_get_si_unit_z(dfield)));
+ gwy_convert_raw_data(p + i*datablocksize, xres*yres, 1,
+ GWY_RAW_DATA_UINT16, GWY_BYTE_ORDER_LITTLE_ENDIAN,
+ gwy_data_field_get_data(dfield),
+ slfile->q, slfile->z0);
+
+ key = gwy_app_get_data_key_for_id(i);
+ gwy_container_set_object(container, key, dfield);
+ g_object_unref(dfield);
+
+ if (slfile->datatype_str) {
+ key = gwy_app_get_data_title_key_for_id(i);
+ if (nlayers < 2) {
+ gwy_container_set_const_string(container, key,
+ slfile->datatype_str);
+ }
+ else {
+ gdouble from = slfile->layers_from, to = slfile->layers_to, z;
+ gchar *title;
+
+ if (from || to) {
+ z = (i*(to - from)/(nlayers - 1.0) + from);
+ title = g_strdup_printf("%s (%g nm)", slfile->datatype_str, z);
+ }
+ else
+ title = g_strdup_printf("%s %u", slfile->datatype_str, i+1);
+ gwy_container_set_string(container, key, (const guchar*)title);
+ }
+ }
+ else
+ gwy_app_channel_title_fall_back(container, i);
- dfield = gwy_data_field_new(xres, yres, xreal, yreal, FALSE);
- gwy_data_field_set_si_unit_xy(dfield, unitxy);
- g_object_unref(unitxy);
- gwy_data_field_set_si_unit_z(dfield, unitz);
- g_object_unref(unitz);
- data = gwy_data_field_get_data(dfield);
- for (i = 0; i < xres*yres; i++)
- data[i] = (p[2*i] + 256.0*p[2*i + 1])*q + z0;
+ add_meta(slfile, container, i);
+}
+
+static void
+add_meta(SPMLabFile *slfile, GwyContainer *container, guint i)
+{
+ GwyContainer *meta = gwy_container_new();
+ const gchar *s;
+ GQuark key;
+
+ if ((s = slfile->datetime) && *s)
+ gwy_container_set_const_string_by_name(meta, "Date and time", s);
+ if ((s = slfile->description) && *s)
+ gwy_container_set_const_string_by_name(meta, "Description", s);
+ if ((s = slfile->scantype) && *s)
+ gwy_container_set_const_string_by_name(meta, "Scan type", s);
+ if ((s = slfile->model_str) && *s)
+ gwy_container_set_const_string_by_name(meta, "Scan type", s);
+
+ if (slfile->release && (s = strrchr(slfile->release, '#'))) {
+ gwy_container_set_string_by_name(meta, "Version",
+ g_strndup(slfile->release,
+ s+1 - slfile->release));
+ }
+
+ if (((s = slfile->datatype_str) && *s)
+ || (s = datatype_to_string(slfile->datatype)))
+ gwy_container_set_const_string_by_name(meta, "Data type", s);
- return dfield;
+ if (((s = slfile->datamode_str) && *s)
+ || (s = datamode_to_string(slfile->datamode)))
+ gwy_container_set_const_string_by_name(meta, "Data mode", s);
+
+ if (((s = slfile->probetype_str) && *s)
+ || (s = probetype_to_string(slfile->probetype)))
+ gwy_container_set_const_string_by_name(meta, "Probe type", s);
+
+ if ((s = stagetype_to_string(slfile->stagetype)))
+ gwy_container_set_const_string_by_name(meta, "Stage type", s);
+ if ((s = direction_to_string(slfile->direction)))
+ gwy_container_set_const_string_by_name(meta, "Direction", s);
+
+ if (gwy_container_get_n_items(meta)) {
+ key = gwy_app_get_data_meta_key_for_id(i);
+ gwy_container_set_object(container, key, meta);
+ }
+ g_object_unref(meta);
}
-static gchar*
-type_to_title(guint type)
+static void
+spmlab_file_free(SPMLabFile *slfile)
{
- const gchar *title;
-
- title = gwy_enuml_to_string(type,
- "Height", 0,
- "Current", 1,
- "FFM", 2,
- "Spect", 3,
- "SpectV", 4,
- "ADC1", 5,
- "ADC2", 6,
- "TipV", 7,
- "DAC1", 8,
- "DAC2", 9,
- "ZPiezo", 10,
- "Height error", 11,
- "Linearized Z", 12,
- "Feedback", 13,
- NULL);
- if (*title)
- return g_strdup(title);
-
- return NULL;
+ GWY_OBJECT_UNREF(slfile->unitxy);
+ GWY_OBJECT_UNREF(slfile->unitz);
+ GWY_OBJECT_UNREF(slfile->unitrate);
+ g_free(slfile->release);
+ g_free(slfile->datetime);
+ g_free(slfile->description);
+ g_free(slfile->datatype_str);
+ g_free(slfile->probetype_str);
+ g_free(slfile->datamode_str);
+ g_free(slfile->model_str);
+}
+
+static const gchar*
+datatype_to_string(gint type)
+{
+ const gchar *str;
+
+ str = gwy_enuml_to_string(type,
+ "Height", 0,
+ "Current", 1,
+ "FFM", 2,
+ "Spect", 3,
+ "SpectV", 4,
+ "ADC1", 5,
+ "ADC2", 6,
+ "TipV", 7,
+ "DAC1", 8,
+ "DAC2", 9,
+ "ZPiezo", 10,
+ "Height error", 11,
+ "Linearized Z", 12,
+ "Feedback", 13,
+ NULL);
+ return *str ? str : NULL;
+}
+
+static const gchar*
+datamode_to_string(gint mode)
+{
+ const gchar *str;
+
+ str = gwy_enuml_to_string(mode,
+ "Image", 0,
+ "Cits", 1,
+ "Dits", 2,
+ "FIS", 3,
+ "MFM", 4,
+ "EFM", 5,
+ "IV", 10,
+ "IS", 11,
+ "FS", 12,
+ "MS", 13,
+ "ES", 14,
+ "Electrochemistry", 15,
+ "Electrochemistry_Line_Average", 16,
+ NULL);
+ return *str ? str : NULL;
+}
+
+static const gchar*
+stagetype_to_string(gint type)
+{
+ const gchar *str;
+
+ str = gwy_enuml_to_string(type,
+ "Discoverer_AFM", 0,
+ "Discoverer_STM", 2,
+ "Explorer_AFM", 3,
+ "Explorer_STM", 4,
+ "Universal", 5,
+ "SNOM", 6,
+ "Observer_AFM", 7,
+ "Observer_STM", 8,
+ "Topocron_AFM", 9,
+ "Topocron_STM", 10,
+ "Topocron", 12,
+ NULL);
+ return *str ? str : NULL;
+}
+
+static const gchar*
+probetype_to_string(gint type)
+{
+ const gchar *str;
+
+ str = gwy_enuml_to_string(type,
+ "AFM", 0,
+ "STM", 1,
+ NULL);
+ return *str ? str : NULL;
+}
+
+static const gchar*
+direction_to_string(gint type)
+{
+ const gchar *str;
+
+ str = gwy_enuml_to_string(type,
+ "Forward", 0,
+ "Reverse", 1,
+ NULL);
+ return *str ? str : NULL;
}
/* vim: set cin et ts=4 sw=4 cino=>1s,e0,n0,f0,{0,}0,^0,\:1s,=0,g1s,h0,t0,+1s,c3,(0,u0 : */
diff --git a/modules/file/spmlabf.c b/modules/file/spmlabf.c
index 4e3876e..ec0cb1b 100644
--- a/modules/file/spmlabf.c
+++ b/modules/file/spmlabf.c
@@ -1,5 +1,5 @@
/*
- * $Id: spmlabf.c 19044 2016-10-08 19:10:46Z yeti-dn $
+ * $Id: spmlabf.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2008 David Necas (Yeti).
*
* This program is free software; you can redistribute it and/or modify
@@ -83,7 +83,7 @@ static GwyModuleInfo module_info = {
"2008",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, spmlabf)
static gboolean
module_register(void)
diff --git a/modules/file/stmprg.c b/modules/file/stmprg.c
index efa6a32..b40c645 100644
--- a/modules/file/stmprg.c
+++ b/modules/file/stmprg.c
@@ -1,5 +1,5 @@
/*
- * $Id: stmprg.c 16611 2014-09-27 15:59:35Z yeti-dn $
+ * $Id: stmprg.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2004 Rok Zitko
* E-mail: rok.zitko at ijs.si
*
@@ -236,7 +236,7 @@ static GwyModuleInfo module_info = {
"2004",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, stmprg)
static gboolean
module_register(void)
diff --git a/modules/file/stpfile.c b/modules/file/stpfile.c
index c8fa165..080bb9a 100644
--- a/modules/file/stpfile.c
+++ b/modules/file/stpfile.c
@@ -1,5 +1,5 @@
/*
- * $Id: stpfile.c 19216 2016-11-09 10:39:06Z yeti-dn $
+ * $Id: stpfile.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2005 David Necas (Yeti), Petr Klstptek.
* E-mail: yeti at gwyddion.net, klstptek at gwyddion.net.
*
@@ -144,7 +144,7 @@ static GwyModuleInfo module_info = {
"2006",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, stpfile)
static gboolean
module_register(void)
diff --git a/modules/file/surffile.c b/modules/file/surffile.c
index 97813f3..67313df 100644
--- a/modules/file/surffile.c
+++ b/modules/file/surffile.c
@@ -1,5 +1,5 @@
/*
- * $Id: surffile.c 17719 2015-11-06 08:46:13Z pecold $
+ * $Id: surffile.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2005 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -296,7 +296,7 @@ static GwyModuleInfo module_info = {
"2006",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, surffile)
static gboolean
module_register(void)
diff --git a/modules/file/tescan.c b/modules/file/tescan.c
index eab0102..ff83726 100644
--- a/modules/file/tescan.c
+++ b/modules/file/tescan.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: tescan.c 16387 2014-07-10 10:41:50Z yeti-dn $
+ * @(#) $Id: tescan.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2013 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -98,7 +98,7 @@ static GwyModuleInfo module_info = {
"2013",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, tescan)
static gboolean
module_register(void)
diff --git a/modules/file/tiaser.c b/modules/file/tiaser.c
index cf6f4e1..37ad4d5 100644
--- a/modules/file/tiaser.c
+++ b/modules/file/tiaser.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: tiaser.c 17718 2015-11-06 08:04:04Z pecold $
+ * @(#) $Id: tiaser.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2012 David Necas (Yeti), Daniil Bratashov (dn2010).
* E-mail: yeti at gwyddion.net, dn2010 at gmail.com.
*
@@ -183,7 +183,7 @@ static GwyModuleInfo module_info = {
"2012",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, tiaser)
static gboolean
module_register(void)
diff --git a/modules/file/unisoku.c b/modules/file/unisoku.c
index 6bf90da..9760045 100644
--- a/modules/file/unisoku.c
+++ b/modules/file/unisoku.c
@@ -1,5 +1,5 @@
/*
- * $Id: unisoku.c 16387 2014-07-10 10:41:50Z yeti-dn $
+ * $Id: unisoku.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2005 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -151,7 +151,7 @@ static GwyModuleInfo module_info = {
static const guint type_sizes[] = { 0, 0, 1, 1, 2, 2, 0, 0, 4 };
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, unisoku)
static gboolean
module_register(void)
diff --git a/modules/file/vtkfile.c b/modules/file/vtkfile.c
index b84b22a..76120de 100644
--- a/modules/file/vtkfile.c
+++ b/modules/file/vtkfile.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: vtkfile.c 17719 2015-11-06 08:46:13Z pecold $
+ * @(#) $Id: vtkfile.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2012 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -58,7 +58,7 @@ static GwyModuleInfo module_info = {
"2012",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, vtkfile)
static gboolean
module_register(void)
diff --git a/modules/file/win_stm.c b/modules/file/win_stm.c
index 8d0c9a1..53b79f8 100644
--- a/modules/file/win_stm.c
+++ b/modules/file/win_stm.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: win_stm.c 17718 2015-11-06 08:04:04Z pecold $
+ * @(#) $Id: win_stm.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2014 Jeffrey J. Schwartz.
* E-mail: schwartz at physics.ucla.edu
*
@@ -85,7 +85,7 @@ static GwyModuleInfo module_info = {
"April 2014",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, win_stm)
static gboolean
module_register(void)
diff --git a/modules/file/wipfile.c b/modules/file/wipfile.c
index 9bf81b2..a63f1b1 100644
--- a/modules/file/wipfile.c
+++ b/modules/file/wipfile.c
@@ -1,5 +1,5 @@
/*
- * $Id: wipfile.c 19130 2016-10-27 20:58:23Z dn2010 $
+ * $Id: wipfile.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2010-2011 David Necas (Yeti), Petr Klapetek,
* Daniil Bratashov (dn2010)
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net, dn2010 at gmail.com
@@ -77,6 +77,9 @@
#define EXTENSION ".wip"
+#define H (4.135667662E-15)
+#define C (299792458)
+
typedef enum {
WIP_TAG_LIST = 0, /* list of other tags */
WIP_TAG_EXTENDED = 1, /* x86 FPU native type, 10 bytes */
@@ -155,6 +158,13 @@ typedef struct {
gchar *unitname; /* nm */
} WIPSpectralTransform;
+/* TDSpectralInterpretation for spectra */
+typedef struct {
+ guint id;
+ WIPUnitIndex unitindex;
+ gdouble excitation_wavelength;
+} WIPSpectralInterpretation;
+
typedef struct {
guint id;
gchar *unitname;
@@ -185,6 +195,7 @@ typedef struct {
} WIPGraph;
typedef struct {
+ guint version;
guint sizex;
guint sizey;
guint postransformid;
@@ -217,66 +228,64 @@ typedef struct {
GNode *node;
} WIPIdNode;
-static gboolean module_register (void);
-static gint wip_detect (const GwyFileDetectInfo *fileinfo,
- gboolean only_name);
-static WIPTag* wip_read_tag (guchar **pos,
- gsize *start,
- gsize *end);
-static void wip_free_tag (WIPTag *tag);
-static GwyContainer* wip_load (const gchar *filename,
- GwyRunType mode,
- GError **error);
-static void wip_read_all_tags (const guchar *buffer,
- gsize start, gsize end,
- GNode *tagtree, gint n);
-static gboolean wip_free_leave (GNode *node,
- G_GNUC_UNUSED gpointer data);
-static gboolean wip_read_graph_tags (GNode *node,
- gpointer header);
-static gboolean wip_read_sp_transform_tags(GNode *node,
- gpointer transform);
-static gboolean wip_read_space_tr_tag (GNode *node,
- gpointer transform);
-static gboolean wip_read_axis_tags (GNode *node,
- gpointer axis);
-static gboolean wip_read_bitmap_tags (GNode *node,
- gpointer data);
-static gboolean wip_find_by_id (GNode *node,
- gpointer idnode);
-static gboolean wip_read_caption (GNode *node,
- gpointer caption);
-static GwyDataField *
- wip_read_bmp (const guchar *bmpdata,
- gsize datasize,
- gdouble xscale,
- gdouble yscale,
- gint power10xy);
-static gdouble wip_pixel_to_lambda (gint i,
- WIPSpectralTransform *transform);
-static GwyGraphModel*
- wip_read_graph (GNode *node);
-static GwyBrick* wip_read_graph_image (GNode *node);
-static void wip_flip_xy (GwyDataField *source,
- GwyDataField *dest);
-static GwyDataField *
- wip_read_image (GNode *node);
-static GwyDataField *
- wip_read_bitmap (GNode *node);
-static gboolean wip_read_data (GNode *node,
- gpointer filedata);
+static gboolean module_register (void);
+static gint wip_detect (const GwyFileDetectInfo *fileinfo,
+ gboolean only_name);
+static WIPTag* wip_read_tag (guchar **pos,
+ gsize *start,
+ gsize *end);
+static void wip_free_tag (WIPTag *tag);
+static GwyContainer* wip_load (const gchar *filename,
+ GwyRunType mode,
+ GError **error);
+static void wip_read_all_tags (const guchar *buffer,
+ gsize start,
+ gsize end,
+ GNode *tagtree,
+ gint n);
+static gboolean wip_free_leave (GNode *node,
+ G_GNUC_UNUSED gpointer data);
+static gboolean wip_read_graph_tags (GNode *node,
+ gpointer header);
+static gboolean wip_read_sp_transform_tags(GNode *node,
+ gpointer transform);
+static gboolean wip_read_sp_interpr_tags (GNode *node,
+ gpointer interp);
+static gboolean wip_read_space_tr_tag (GNode *node,
+ gpointer transform);
+static gboolean wip_read_axis_tags (GNode *node,
+ gpointer axis);
+static gboolean wip_read_bitmap_tags (GNode *node,
+ gpointer data);
+static gboolean wip_find_by_id (GNode *node,
+ gpointer idnode);
+static gboolean wip_read_caption (GNode *node,
+ gpointer caption);
+static GwyDataField* wip_read_bmp (const guchar *bmpdata,
+ gsize datasize,
+ gdouble xscale,
+ gdouble yscale,
+ gint power10xy);
+static gdouble wip_pixel_to_lambda (gint i,
+ WIPSpectralTransform *transform);
+static GwyGraphModel* wip_read_graph (GNode *node);
+static GwyBrick* wip_read_graph_image (GNode *node);
+static GwyDataField* wip_read_image (GNode *node);
+static GwyDataField* wip_read_bitmap (GNode *node);
+static gboolean wip_read_data (GNode *node,
+ gpointer filedata);
static GwyModuleInfo module_info = {
GWY_MODULE_ABI_VERSION,
&module_register,
N_("Imports WItec Project data files."),
"Daniil Bratashov <dn2010 at gmail.com>",
- "0.6",
+ "0.8",
"David Nečas (Yeti) & Petr Klapetek & Daniil Bratashov",
"2010",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, wipfile)
static gboolean
module_register(void)
@@ -338,8 +347,9 @@ wip_read_tag(guchar **pos, gsize *start, gsize *end)
}
tag->data = (gpointer)p;
- gwy_debug("%d %s %d %lld %lld\n", tag->name_length,
- tag->name, tag->type, tag->data_start, tag->data_end);
+ gwy_debug("%d %s %d %" G_GUINT64_FORMAT " %" G_GUINT64_FORMAT "\n",
+ tag->name_length, tag->name, tag->type, tag->data_start,
+ tag->data_end);
*pos = (guchar *)p;
@@ -438,7 +448,9 @@ wip_read_image_tags(GNode *node, gpointer header)
tag = node->data;
imageheader = (WIPImage *)header;
p = tag->data;
- if (!strncmp(tag->name, "SizeX", 5))
+ if (!strncmp(tag->name, "Version", 7))
+ imageheader->version = gwy_get_gint32_le(&p);
+ else if (!strncmp(tag->name, "SizeX", 5))
imageheader->sizex = gwy_get_gint32_le(&p);
else if (!strncmp(tag->name, "SizeY", 5))
imageheader->sizey = gwy_get_gint32_le(&p);
@@ -510,6 +522,25 @@ wip_read_sp_transform_tags(GNode *node,
}
static gboolean
+wip_read_sp_interpr_tags(GNode *node,
+ gpointer interp)
+{
+ WIPTag *tag;
+ WIPSpectralInterpretation *sp_interp;
+ const guchar *p;
+
+ tag = node->data;
+ sp_interp = (WIPSpectralInterpretation *)interp;
+ p = tag->data;
+ if (!strncmp(tag->name, "UnitIndex", 9))
+ sp_interp->unitindex = gwy_get_gint32_le(&p);
+ else if (!strncmp(tag->name, "ExcitationWaveLength", 20))
+ sp_interp->excitation_wavelength = gwy_get_gdouble_le(&p);
+
+ return FALSE;
+}
+
+static gboolean
wip_read_space_tr_tag(GNode *node, gpointer transform)
{
WIPTag *tag;
@@ -733,6 +764,7 @@ wip_read_graph(GNode *node)
{
WIPGraph *header;
WIPSpectralTransform *xtransform;
+ WIPSpectralInterpretation *xinterp;
WIPAxis *yaxis;
WIPIdNode *idnode;
GwyGraphModel *gmodel;
@@ -801,10 +833,69 @@ wip_read_graph(GNode *node)
xdata[i] = wip_pixel_to_lambda(i, xtransform);
}
+ idnode->id = header->xinterpid;
+ g_node_traverse(g_node_get_root(node),
+ G_LEVEL_ORDER, G_TRAVERSE_ALL, -1,
+ wip_find_by_id, (gpointer)idnode);
+
+ xinterp = g_new0(WIPSpectralInterpretation, 1);
+ g_node_traverse(idnode->node->parent->parent,
+ G_LEVEL_ORDER, G_TRAVERSE_ALL, -1,
+ wip_read_sp_interpr_tags,
+ (gpointer)xinterp);
+
+ /* recalculating to right units */
if (xtransform->unitname != NULL) {
- siunitx = gwy_si_unit_new("m");
- for (i = 0; i < numpoints; i++)
- xdata[i] = xdata[i] * 1e-9;
+ if ((xinterp->unitindex == WIP_UNIT_NANOMETER)
+ || (xinterp->unitindex == WIP_UNIT_MIKROMETER)) {
+ siunitx = gwy_si_unit_new("m");
+ for (i = 0; i < numpoints; i++)
+ xdata[i] = xdata[i] * 1e-9;
+ }
+ else if (xinterp->unitindex == WIP_UNIT_SM_1) {
+ siunitx = gwy_si_unit_new("1/m");
+ for (i = 0; i < numpoints; i++)
+ xdata[i] = 1.0 / (xdata[i] * 1e-9);
+ }
+ else if (xinterp->unitindex == WIP_UNIT_RAMAN_SHIFT) {
+ if (xinterp->excitation_wavelength == 0.0) {
+ siunitx = gwy_si_unit_new("m");
+ for (i = 0; i < numpoints; i++)
+ xdata[i] = xdata[i] * 1e-9;
+ }
+ else {
+ siunitx = gwy_si_unit_new("1/m");
+ for (i = 0; i < numpoints; i++)
+ xdata[i]
+ = 1.0 / (xinterp->excitation_wavelength * 1e-9)
+ - 1.0 / (xdata[i] * 1e-9);
+ }
+ }
+ else if ((xinterp->unitindex == WIP_UNIT_EV)
+ || (xinterp->unitindex == WIP_UNIT_MEV)) {
+ siunitx = gwy_si_unit_new("eV");
+ for (i = 0; i < numpoints; i++)
+ xdata[i] = H * C / (xdata[i] * 1e-9);
+ }
+ else if ((xinterp->unitindex == WIP_UNIT_EV_REL)
+ || (xinterp->unitindex == WIP_UNIT_MEV_REL)) {
+ if (xinterp->excitation_wavelength == 0.0) {
+ siunitx = gwy_si_unit_new("m");
+ for (i = 0; i < numpoints; i++)
+ xdata[i] = xdata[i] * 1e-9;
+ }
+ else {
+ siunitx = gwy_si_unit_new("eV");
+ for (i = 0; i < numpoints; i++)
+ xdata[i] = (H * C / (xinterp->excitation_wavelength * 1e-9)
+ - H * C / (xdata[i] * 1e-9));
+ }
+ }
+ else {
+ siunitx = gwy_si_unit_new("m");
+ for (i = 0; i < numpoints; i++)
+ xdata[i] = xdata[i] * 1e-9;
+ }
}
else
siunitx = gwy_si_unit_new("pixels");
@@ -813,21 +904,22 @@ wip_read_graph(GNode *node)
g_free(xtransform->unitname);
}
g_free(xtransform);
+ g_free(xinterp);
/* Try to read y units */
idnode->id = header->zinterpid;
g_node_traverse(g_node_get_root(node),
- G_LEVEL_ORDER, G_TRAVERSE_ALL, -1,
- wip_find_by_id, (gpointer)idnode);
+ G_LEVEL_ORDER, G_TRAVERSE_ALL, -1,
+ wip_find_by_id, (gpointer)idnode);
yaxis = g_new0(WIPAxis, 1);
g_node_traverse(idnode->node->parent->parent,
- G_LEVEL_ORDER, G_TRAVERSE_ALL, -1,
- wip_read_axis_tags,
- (gpointer)yaxis);
+ G_LEVEL_ORDER, G_TRAVERSE_ALL, -1,
+ wip_read_axis_tags,
+ (gpointer)yaxis);
if (yaxis->unitname)
siunity = gwy_si_unit_new(yaxis->unitname);
else
- siunity = gwy_si_unit_new("");
+ siunity = gwy_si_unit_new(NULL);
g_free(yaxis);
/* Packing */
@@ -847,6 +939,9 @@ wip_read_graph(GNode *node)
gwy_graph_curve_model_set_data(gcmodel, xdata, ydata, numpoints);
g_free(xdata);
g_free(ydata);
+ if (!gwy_graph_curve_model_is_ordered(gcmodel)) {
+ gwy_graph_curve_model_enforce_order(gcmodel);
+ }
gwy_graph_model_add_curve(gmodel, gcmodel);
g_object_unref(gcmodel);
g_string_free(caption, TRUE);
@@ -860,6 +955,7 @@ wip_read_graph_image(GNode *node)
{
WIPGraph *header;
WIPSpectralTransform *xtransform;
+ WIPSpectralInterpretation *xinterp;
WIPAxis *waxis;
WIPSpaceTransform *xyaxis;
WIPIdNode *idnode;
@@ -893,13 +989,13 @@ wip_read_graph_image(GNode *node)
yres = header->sizey;
zres = header->sizegraph;
- gwy_debug("numpoints * databytes = %d, datasize = %d\n",
- xres * yres * zres * WIPDataSize[header->datatype],
- header->datasize);
+ gwy_debug("numpoints * databytes = %" G_GSIZE_FORMAT ", datasize = %" G_GSIZE_FORMAT "\n",
+ xres * yres * zres * WIPDataSize[header->datatype],
+ header->datasize);
if ((xres * yres * zres <= 0)
- || (header->datatype > 10)
- || (header->datasize != WIPDataSize[header->datatype]
- * xres * yres * zres)) {
+ || (header->datatype > 10)
+ || (header->datasize != (WIPDataSize[header->datatype]
+ * xres * yres * zres))) {
g_free(header);
return NULL;
}
@@ -908,18 +1004,18 @@ wip_read_graph_image(GNode *node)
idnode = g_new0(WIPIdNode, 1);
idnode->id = header->spacetransformid;
g_node_traverse(g_node_get_root(node),
- G_LEVEL_ORDER, G_TRAVERSE_ALL, -1,
- wip_find_by_id, (gpointer)idnode);
+ G_LEVEL_ORDER, G_TRAVERSE_ALL, -1,
+ wip_find_by_id, (gpointer)idnode);
xyaxis = g_new0(WIPSpaceTransform, 1);
g_node_traverse(idnode->node->parent->parent,
- G_LEVEL_ORDER, G_TRAVERSE_ALL, -1,
- wip_read_space_tr_tag, (gpointer)xyaxis);
+ G_LEVEL_ORDER, G_TRAVERSE_ALL, -1,
+ wip_read_space_tr_tag, (gpointer)xyaxis);
if (xyaxis->unitname)
siunitxy = gwy_si_unit_new_parse(xyaxis->unitname, &power10xy);
else
- siunitxy = gwy_si_unit_new("");
+ siunitxy = gwy_si_unit_new(NULL);
xscale = xyaxis->scale[0];
yscale = xyaxis->scale[4];
if (xscale == 0.0) {
@@ -941,17 +1037,17 @@ wip_read_graph_image(GNode *node)
/* Try to read w units */
idnode->id = header->zinterpid;
g_node_traverse(g_node_get_root(node),
- G_LEVEL_ORDER, G_TRAVERSE_ALL, -1,
- wip_find_by_id, (gpointer)idnode);
+ G_LEVEL_ORDER, G_TRAVERSE_ALL, -1,
+ wip_find_by_id, (gpointer)idnode);
waxis = g_new0(WIPAxis, 1);
g_node_traverse(idnode->node->parent->parent,
- G_LEVEL_ORDER, G_TRAVERSE_ALL, -1,
- wip_read_axis_tags,
- (gpointer)waxis);
+ G_LEVEL_ORDER, G_TRAVERSE_ALL, -1,
+ wip_read_axis_tags,
+ (gpointer)waxis);
if (waxis->unitname)
siunitw = gwy_si_unit_new_parse(waxis->unitname, &power10w);
else
- siunitw = gwy_si_unit_new("");
+ siunitw = gwy_si_unit_new(NULL);
g_free(waxis);
wscale = pow(10.0, power10w);
if (wscale == 0.0)
@@ -1065,6 +1161,17 @@ wip_read_graph_image(GNode *node)
g_warning("Wrong datatype");
}
+ idnode->id = header->xinterpid;
+ g_node_traverse(g_node_get_root(node),
+ G_LEVEL_ORDER, G_TRAVERSE_ALL, -1,
+ wip_find_by_id, (gpointer)idnode);
+
+ xinterp = g_new0(WIPSpectralInterpretation, 1);
+ g_node_traverse(idnode->node->parent->parent,
+ G_LEVEL_ORDER, G_TRAVERSE_ALL, -1,
+ wip_read_sp_interpr_tags,
+ (gpointer)xinterp);
+
/* Try to read zcalibration */
idnode->id = header->xtransformid;
g_node_traverse(g_node_get_root(node),
@@ -1087,13 +1194,63 @@ wip_read_graph_image(GNode *node)
for (i = 0; i < zres; i++)
data[i] = wip_pixel_to_lambda(i, xtransform);
+ /* recalculating to right units */
if (xtransform->unitname != NULL) {
- siunitz = gwy_si_unit_new("m");
- for (i = 0; i < zres; i++)
- data[i] *= 1e-9;
+ if ((xinterp->unitindex == WIP_UNIT_NANOMETER)
+ || (xinterp->unitindex == WIP_UNIT_MIKROMETER)) {
+ siunitz = gwy_si_unit_new("m");
+ for (i = 0; i < zres; i++)
+ data[i] = data[i] * 1e-9;
+ }
+ else if (xinterp->unitindex == WIP_UNIT_SM_1) {
+ siunitz = gwy_si_unit_new("1/m");
+ for (i = 0; i < zres; i++)
+ data[i] = 1.0 / (data[i] * 1e-9);
+ }
+ else if (xinterp->unitindex == WIP_UNIT_RAMAN_SHIFT) {
+ if (xinterp->excitation_wavelength == 0.0) {
+ siunitz = gwy_si_unit_new("m");
+ for (i = 0; i < zres; i++)
+ data[i] = data[i] * 1e-9;
+ }
+ else {
+ siunitz = gwy_si_unit_new("1/m");
+ for (i = 0; i < zres; i++)
+ data[i]
+ = 1.0 / (xinterp->excitation_wavelength * 1e-9)
+ - 1.0 / (data[i] * 1e-9);
+ }
+ }
+ else if ((xinterp->unitindex == WIP_UNIT_EV)
+ || (xinterp->unitindex == WIP_UNIT_MEV)) {
+ siunitz = gwy_si_unit_new("eV");
+ for (i = 0; i < zres; i++)
+ data[i] = H * C / (data[i] * 1e-9);
+ }
+ else if ((xinterp->unitindex == WIP_UNIT_EV_REL)
+ || (xinterp->unitindex == WIP_UNIT_MEV_REL)) {
+ if (xinterp->excitation_wavelength == 0.0) {
+ siunitz = gwy_si_unit_new("m");
+ for (i = 0; i < zres; i++)
+ data[i] = data[i] * 1e-9;
+ }
+ else {
+ siunitz = gwy_si_unit_new("eV");
+ for (i = 0; i < zres; i++)
+ data[i]
+ = H*C / (xinterp->excitation_wavelength * 1e-9)
+ - H * C / (data[i] * 1e-9);
+ }
+ }
+ else {
+ siunitz = gwy_si_unit_new("m");
+ for (i = 0; i < zres; i++)
+ data[i] = data[i] * 1e-9;
+ }
}
else
siunitz = gwy_si_unit_new("pixels");
+
gwy_data_line_set_si_unit_y(cal, siunitz);
gwy_brick_set_zcalibration(brick, cal);
g_object_unref(cal);
@@ -1106,6 +1263,7 @@ wip_read_graph_image(GNode *node)
g_free(xtransform->unitname);
}
g_free(xtransform);
+ g_free(xinterp);
gwy_brick_set_si_unit_x(brick, siunitxy);
gwy_brick_set_si_unit_y(brick, siunitxy);
@@ -1121,29 +1279,6 @@ wip_read_graph_image(GNode *node)
return brick;
}
-static void
-wip_flip_xy(GwyDataField *source, GwyDataField *dest)
-{
- gint xres, yres, i, j;
- gdouble *dd;
- const gdouble *sd;
-
- xres = gwy_data_field_get_xres(source);
- yres = gwy_data_field_get_yres(source);
- gwy_data_field_resample(dest, yres, xres, GWY_INTERPOLATION_NONE);
- sd = gwy_data_field_get_data_const(source);
- dd = gwy_data_field_get_data(dest);
-
- for (i = 0; i < xres; i++) {
- for (j = 0; j < yres; j++) {
- dd[i*yres + (yres - 1 - j)] = sd[j*xres + i];
- }
- }
-
- gwy_data_field_set_xreal(dest, gwy_data_field_get_yreal(source));
- gwy_data_field_set_yreal(dest, gwy_data_field_get_xreal(source));
-}
-
static GwyDataField*
wip_read_image(GNode *node)
{
@@ -1165,13 +1300,13 @@ wip_read_image(GNode *node)
header = g_new0(WIPImage, 1);
g_node_traverse(node, G_LEVEL_ORDER, G_TRAVERSE_ALL, -1,
- wip_read_image_tags, (gpointer)header);
+ wip_read_image_tags, (gpointer)header);
if ((header->datatype > 11)
- || (header->sizex != header->xrange)
- || (header->sizey != header->yrange)
- || (header->datasize != WIPDataSize[header->datatype]
- * header->sizex * header->sizey)) {
+ || (header->sizex != header->xrange)
+ || (header->sizey != header->yrange)
+ || (header->datasize != (WIPDataSize[header->datatype]
+ * header->sizex * header->sizey))) {
g_free(header);
return NULL;
}
@@ -1180,32 +1315,32 @@ wip_read_image(GNode *node)
idnode = g_new0(WIPIdNode, 1);
idnode->id = header->zinterpid;
g_node_traverse(g_node_get_root(node),
- G_LEVEL_ORDER, G_TRAVERSE_ALL, -1,
- wip_find_by_id, (gpointer)idnode);
+ G_LEVEL_ORDER, G_TRAVERSE_ALL, -1,
+ wip_find_by_id, (gpointer)idnode);
zaxis = g_new0(WIPAxis, 1);
g_node_traverse(idnode->node->parent->parent,
- G_LEVEL_ORDER, G_TRAVERSE_ALL, -1,
- wip_read_axis_tags,
- (gpointer)zaxis);
+ G_LEVEL_ORDER, G_TRAVERSE_ALL, -1,
+ wip_read_axis_tags,
+ (gpointer)zaxis);
if (zaxis->unitname)
siunitz = gwy_si_unit_new_parse(zaxis->unitname, &power10z);
else
- siunitz = gwy_si_unit_new("");
+ siunitz = gwy_si_unit_new(NULL);
g_free(zaxis);
/* Try to read xy units and scale */
idnode->id = header->postransformid;
g_node_traverse(g_node_get_root(node),
- G_LEVEL_ORDER, G_TRAVERSE_ALL, -1,
- wip_find_by_id, (gpointer)idnode);
+ G_LEVEL_ORDER, G_TRAVERSE_ALL, -1,
+ wip_find_by_id, (gpointer)idnode);
xyaxis = g_new0(WIPSpaceTransform, 1);
g_node_traverse(idnode->node->parent->parent,
- G_LEVEL_ORDER, G_TRAVERSE_ALL, -1,
- wip_read_space_tr_tag, (gpointer)xyaxis);
+ G_LEVEL_ORDER, G_TRAVERSE_ALL, -1,
+ wip_read_space_tr_tag, (gpointer)xyaxis);
if (xyaxis->unitname)
siunitxy = gwy_si_unit_new_parse(xyaxis->unitname, &power10xy);
else
- siunitxy = gwy_si_unit_new("");
+ siunitxy = gwy_si_unit_new(NULL);
xscale = xyaxis->scale[0];
yscale = xyaxis->scale[4];
if (yscale == 0.0) {
@@ -1227,79 +1362,141 @@ wip_read_image(GNode *node)
g_free(xyaxis);
g_free(idnode);
+ zscale = pow(10.0, power10z);
+ if (zscale == 0.0)
+ zscale = 1.0;
+ p = header->data;
+
/* Reading actual data
+ *
+ * FIXME
+ *
* data is stored in strange way in TDImage, so it is more
* simple to swap X and Y axes here to read them correctly
* and rotate datafield in the end of procedure */
- dfield2 = gwy_data_field_new(header->sizey, header->sizex,
- header->sizey * pow(10.0, power10xy) * yscale,
- header->sizex * pow(10.0, power10xy) * xscale,
- FALSE);
- data = gwy_data_field_get_data(dfield2);
+ if (header->version == 0) {
+ dfield2 = gwy_data_field_new(header->sizey, header->sizex,
+ header->sizey * pow(10.0, power10xy) * yscale,
+ header->sizex * pow(10.0, power10xy) * xscale,
+ FALSE);
+ data = gwy_data_field_get_data(dfield2);
+
+ switch (header->datatype) {
+ case WIP_DATA_LIST:
+ case WIP_DATA_EXTENDED:
+ /* cannot read this */
+ break;
+ case WIP_DATA_FLOAT:
+ for (i = 0; i < header->sizex * header->sizey; i++)
+ data[i] = zscale * gwy_get_gfloat_le(&p);
+ break;
+ case WIP_DATA_DOUBLE:
+ for (i = 0; i < header->sizex * header->sizey; i++)
+ data[i] = zscale * gwy_get_gdouble_le(&p);
+ break;
+ case WIP_DATA_INT8:
+ case WIP_DATA_UINT8:
+ case WIP_DATA_BOOL:
+ for (i = 0; i < header->sizex * header->sizey; i++)
+ data[i] = *(p++) * zscale;
+ break;
+ case WIP_DATA_INT64:
+ for (i = 0; i < header->sizex * header->sizey; i++) {
+ data[i] = GINT64_FROM_LE(*(const gint64 *)p) * zscale;
+ p += 8;
+ }
+ break;
+ case WIP_DATA_INT32:
+ for (i = 0; i < header->sizex * header->sizey; i++) {
+ data[i] = GINT32_FROM_LE(*(const gint32 *)p) * zscale;
+ p += 4;
+ }
+ break;
+ case WIP_DATA_INT16:
+ for (i = 0; i < header->sizex * header->sizey; i++) {
+ data[i] = GINT16_FROM_LE(*(const gint16 *)p) * zscale;
+ p += 2;
+ }
+ break;
+ case WIP_DATA_UINT32:
+ for (i = 0; i < header->sizex * header->sizey; i++) {
+ data[i] = GUINT32_FROM_LE(*(const guint32 *)p) * zscale;
+ p += 4;
+ }
+ break;
+ case WIP_DATA_UINT16:
+ for (i = 0; i < header->sizex * header->sizey; i++) {
+ data[i] = GUINT16_FROM_LE(*(const guint16 *)p) * zscale;
+ p += 2;
+ }
+ break;
+ default:
+ g_warning("Wrong datatype");
+ }
- zscale = pow(10.0, power10z);
- if (zscale == 0.0)
- zscale = 1.0;
- p = header->data;
- switch (header->datatype) {
- case WIP_DATA_LIST:
- case WIP_DATA_EXTENDED:
- /* cannot read this */
- break;
- case WIP_DATA_FLOAT:
- for (i = 0; i < header->sizex * header->sizey; i++)
- data[i] = zscale * gwy_get_gfloat_le(&p);
- break;
- case WIP_DATA_DOUBLE:
- for (i = 0; i < header->sizex * header->sizey; i++)
- data[i] = zscale * gwy_get_gdouble_le(&p);
- break;
- case WIP_DATA_INT8:
- case WIP_DATA_UINT8:
- case WIP_DATA_BOOL:
- for (i = 0; i < header->sizex * header->sizey; i++)
- data[i] = *(p++) * zscale;
- break;
- case WIP_DATA_INT64:
- for (i = 0; i < header->sizex * header->sizey; i++) {
- data[i] = GINT64_FROM_LE(*(const gint64 *)p) * zscale;
- p += 8;
- }
- break;
- case WIP_DATA_INT32:
- for (i = 0; i < header->sizex * header->sizey; i++) {
- data[i] = GINT32_FROM_LE(*(const gint32 *)p) * zscale;
- p += 4;
- }
- break;
- case WIP_DATA_INT16:
- for (i = 0; i < header->sizex * header->sizey; i++) {
- data[i] = GINT16_FROM_LE(*(const gint16 *)p) * zscale;
- p += 2;
- }
- break;
- case WIP_DATA_UINT32:
- for (i = 0; i < header->sizex * header->sizey; i++) {
- data[i] = GUINT32_FROM_LE(*(const guint32 *)p) * zscale;
- p += 4;
- }
- break;
- case WIP_DATA_UINT16:
- for (i = 0; i < header->sizex * header->sizey; i++) {
- data[i] = GUINT16_FROM_LE(*(const guint16 *)p) * zscale;
- p += 2;
- }
- break;
- default:
- g_warning("Wrong datatype");
+ dfield = gwy_data_field_new_rotated_90(dfield2, TRUE);
+ g_object_unref(dfield2);
}
+ else {
+ dfield = gwy_data_field_new(header->sizex, header->sizey,
+ header->sizex * pow(10.0, power10xy) * xscale,
+ header->sizey * pow(10.0, power10xy) * yscale,
+ FALSE);
+ data = gwy_data_field_get_data(dfield);
- dfield = gwy_data_field_new(header->sizex, header->sizey,
- header->sizex * pow(10.0, power10xy) * xscale,
- header->sizey * pow(10.0, power10xy) * yscale,
- FALSE);
- wip_flip_xy(dfield2, dfield);
- g_object_unref(dfield2);
+ switch (header->datatype) {
+ case WIP_DATA_LIST:
+ case WIP_DATA_EXTENDED:
+ /* cannot read this */
+ break;
+ case WIP_DATA_FLOAT:
+ for (i = 0; i < header->sizex * header->sizey; i++)
+ data[i] = zscale * gwy_get_gfloat_le(&p);
+ break;
+ case WIP_DATA_DOUBLE:
+ for (i = 0; i < header->sizex * header->sizey; i++)
+ data[i] = zscale * gwy_get_gdouble_le(&p);
+ break;
+ case WIP_DATA_INT8:
+ case WIP_DATA_UINT8:
+ case WIP_DATA_BOOL:
+ for (i = 0; i < header->sizex * header->sizey; i++)
+ data[i] = *(p++) * zscale;
+ break;
+ case WIP_DATA_INT64:
+ for (i = 0; i < header->sizex * header->sizey; i++) {
+ data[i] = GINT64_FROM_LE(*(const gint64 *)p) * zscale;
+ p += 8;
+ }
+ break;
+ case WIP_DATA_INT32:
+ for (i = 0; i < header->sizex * header->sizey; i++) {
+ data[i] = GINT32_FROM_LE(*(const gint32 *)p) * zscale;
+ p += 4;
+ }
+ break;
+ case WIP_DATA_INT16:
+ for (i = 0; i < header->sizex * header->sizey; i++) {
+ data[i] = GINT16_FROM_LE(*(const gint16 *)p) * zscale;
+ p += 2;
+ }
+ break;
+ case WIP_DATA_UINT32:
+ for (i = 0; i < header->sizex * header->sizey; i++) {
+ data[i] = GUINT32_FROM_LE(*(const guint32 *)p) * zscale;
+ p += 4;
+ }
+ break;
+ case WIP_DATA_UINT16:
+ for (i = 0; i < header->sizex * header->sizey; i++) {
+ data[i] = GUINT16_FROM_LE(*(const guint16 *)p) * zscale;
+ p += 2;
+ }
+ break;
+ default:
+ g_warning("Wrong datatype");
+ }
+ }
gwy_data_field_set_si_unit_z(dfield, siunitz);
gwy_data_field_set_si_unit_xy(dfield, siunitxy);
@@ -1343,7 +1540,7 @@ wip_read_bitmap(GNode *node)
if (xyaxis->unitname)
siunitxy = gwy_si_unit_new_parse(xyaxis->unitname, &power10xy);
else
- siunitxy = gwy_si_unit_new("");
+ siunitxy = gwy_si_unit_new(NULL);
xscale = xyaxis->scale[0];
yscale = xyaxis->scale[4];
if (yscale == 0.0) {
diff --git a/modules/file/witec-asc.c b/modules/file/witec-asc.c
index 8c5a37d..f82c71a 100644
--- a/modules/file/witec-asc.c
+++ b/modules/file/witec-asc.c
@@ -1,5 +1,5 @@
/*
- * $Id: witec-asc.c 19044 2016-10-08 19:10:46Z yeti-dn $
+ * $Id: witec-asc.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2011 David Necas (Yeti).
*
* This program is free software; you can redistribute it and/or modify
@@ -78,7 +78,7 @@ static GwyModuleInfo module_info = {
"2011",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, witec_asc)
static gboolean
module_register(void)
diff --git a/modules/file/witfile.c b/modules/file/witfile.c
index 27070fd..51ab9ea 100644
--- a/modules/file/witfile.c
+++ b/modules/file/witfile.c
@@ -1,5 +1,5 @@
/*
- * $Id: witfile.c 16387 2014-07-10 10:41:50Z yeti-dn $
+ * $Id: witfile.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2005 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -215,7 +215,7 @@ static GwyModuleInfo module_info = {
"2005",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, witfile)
static gboolean
module_register(void)
diff --git a/modules/file/wsffile.c b/modules/file/wsffile.c
index 116e19f..4b1642a 100644
--- a/modules/file/wsffile.c
+++ b/modules/file/wsffile.c
@@ -1,5 +1,5 @@
/*
- * $Id: wsffile.c 19044 2016-10-08 19:10:46Z yeti-dn $
+ * $Id: wsffile.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2011 David Necas (Yeti).
*
* This program is free software; you can redistribute it and/or modify
@@ -88,7 +88,7 @@ static GwyModuleInfo module_info = {
"2011",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, wsffile)
static gboolean
module_register(void)
diff --git a/modules/file/wsxmfile.c b/modules/file/wsxmfile.c
index a6b1dd9..136acda 100644
--- a/modules/file/wsxmfile.c
+++ b/modules/file/wsxmfile.c
@@ -1,5 +1,5 @@
/*
- * $Id: wsxmfile.c 18379 2016-03-03 11:42:28Z yeti-dn $
+ * $Id: wsxmfile.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2005 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -102,7 +102,7 @@ static GwyModuleInfo module_info = {
"2005",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, wsxmfile)
static gboolean
module_register(void)
diff --git a/modules/file/xyzexport.c b/modules/file/xyzexport.c
index 6cb49e8..9d9e7b1 100644
--- a/modules/file/xyzexport.c
+++ b/modules/file/xyzexport.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: xyzexport.c 18474 2016-03-21 10:33:53Z yeti-dn $
+ * @(#) $Id: xyzexport.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2015-2016 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -93,7 +93,7 @@ static GwyModuleInfo module_info = {
"2015",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, xyzexport)
static gboolean
module_register(void)
@@ -210,6 +210,9 @@ xyzexport_export(G_GNUC_UNUSED GwyContainer *data,
&title);
}
+ if (!title)
+ title = _("Untitled");
+
if (mode == GWY_RUN_INTERACTIVE) {
ok = xyzexport_export_dialog(&args, !!mfield, needs_decimal_dot,
pageno, title);
diff --git a/modules/file/zeiss.c b/modules/file/zeiss.c
index cd7c0d6..aa9a6a2 100644
--- a/modules/file/zeiss.c
+++ b/modules/file/zeiss.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: zeiss.c 17800 2015-12-03 15:01:54Z yeti-dn $
+ * @(#) $Id: zeiss.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2011 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -65,7 +65,7 @@ static GwyModuleInfo module_info = {
"2011",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, zeiss)
static gboolean
module_register(void)
diff --git a/modules/file/zeisslsm.c b/modules/file/zeisslsm.c
new file mode 100644
index 0000000..b597821
--- /dev/null
+++ b/modules/file/zeisslsm.c
@@ -0,0 +1,1552 @@
+/*
+ * $Id: zeisslsm.c 19948 2017-06-22 14:05:41Z yeti-dn $
+ * Copyright (C) 2017 David Necas (Yeti), Daniil Bratashov (dn2010).
+ * E-mail: dn2010 at gwyddion.net.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+ /*
+ * It is easier to re-implement parts of (not so) TIFF loading here
+ * than to add kludges into GwyTIFF.
+ *
+ * LZW Compression is unimplemented now.
+ *
+ * It is based on LSMfile description from:
+ * http://ibb.gsf.de/homepage/karsten.rodenacker/IDL/Lsmfile.doc
+ * Please note that it has incorrect TIF_CZ_LSMINFO tag layout,
+ * 3 elements of type gdouble with X, Y and Z offsets are skipped
+ * there.
+ *
+ * Also BioImage XD source code was used as more modern reference
+ * about format features.
+ */
+
+/**
+ * [FILE-MAGIC-FREEDESKTOP]
+ * <mime-type type="application/x-zeiss-lsm-spm">
+ * <comment>Carl Zeiss CLSM images</comment>
+ * <glob pattern="*.lsm"/>
+ * <glob pattern="*.LSM"/>
+ * </mime-type>
+ **/
+
+/**
+ * [FILE-MAGIC-USERGUIDE]
+ * Carl Zeiss CLSM images
+ * .lsm
+ * Read Volume
+ **/
+
+#include "config.h"
+#include <stdlib.h>
+#include <libgwyddion/gwymath.h>
+#include <libprocess/stats.h>
+#include <app/gwymoduleutils-file.h>
+#include <app/data-browser.h>
+#include "err.h"
+#include "gwytiff.h"
+
+#define EXTENSION ".lsm"
+
+enum {
+ ZEISS_LSM_HEADER_TAG = 34412,
+};
+
+typedef enum {
+ LSM_TIFF_SUB_FILE_TYPE_IMAGE = 0,
+ LSM_TIFF_SUB_FILE_TYPE_THUMBNAIL = 1,
+} LSMTIFFSubFileType;
+
+typedef enum {
+ LSM_SCANTYPE_XYZ = 0,
+ LSM_SCANTYPE_XZ = 1,
+ LSM_SCANTYPE_LINE = 2,
+ LSM_SCANTYPE_TIMESERIES_XY = 3,
+ LSM_SCANTYPE_TIMESERIES_XZ = 4,
+ LSM_SCANTYPE_TIMESERIES_MEAN_ROI = 5,
+ LSM_SCANTYPE_TIMESERIES_XYZ = 6,
+ LSM_SCANTYPE_SPLINE = 7,
+ LSM_SCANTYPE_SPLINE_XZ = 8,
+ LSM_SCANTYPE_TIMESERIES_SPLINE = 9,
+ LSM_SCANTYPE_TIMESERIES_POINT = 10,
+} LSMHeaderScanType;
+
+typedef enum {
+ LSM_LUT_NORMAL = 0,
+ LSM_LUT_ORIGINAL = 1,
+ LSM_LUT_RAMP = 2,
+ LSM_LUT_POLYLINE = 3,
+ LSM_LUT_SPLINE = 4,
+ LSM_LUT_GAMMA = 5,
+} LSMLUTType;
+
+typedef enum {
+ LSM_SUBBLOCK_RECORDING = 0x10000000,
+ LSM_SUBBLOCK_LASERS = 0x30000000,
+ LSM_SUBBLOCK_LASER = 0x50000000,
+ LSM_SUBBLOCK_TRACKS = 0x20000000,
+ LSM_SUBBLOCK_TRACK = 0x40000000,
+ LSM_SUBBLOCK_DETECTION_CHANNELS = 0x60000000,
+ LSM_SUBBLOCK_DETECTION_CHANNEL = 0x70000000,
+ LSM_SUBBLOCK_ILLUMINATION_CHANNELS = 0x80000000,
+ LSM_SUBBLOCK_ILLUMINATION_CHANNEL = 0x90000000,
+ LSM_SUBBLOCK_BEAM_SPLITTERS = 0xA0000000,
+ LSM_SUBBLOCK_BEAM_SPLITTER = 0xB0000000,
+ LSM_SUBBLOCK_DATA_CHANNELS = 0xC0000000,
+ LSM_SUBBLOCK_DATA_CHANNEL = 0xD0000000,
+ LSM_SUBBLOCK_TIMERS = 0x11000000,
+ LSM_SUBBLOCK_TIMER = 0x12000000,
+ LSM_SUBBLOCK_MARKERS = 0x13000000,
+ LSM_SUBBLOCK_MARKER = 0x14000000,
+ LSM_SUBBLOCK_END = 0xFFFFFFFF,
+} LSMScanInfoEntry;
+
+typedef enum {
+ LSM_RECORDING_ENTRY_NAME = 0x10000001,
+ LSM_RECORDING_ENTRY_DESCRIPTION = 0x10000002,
+ LSM_RECORDING_ENTRY_NOTES = 0x10000003,
+ LSM_RECORDING_ENTRY_OBJECTIVE = 0x10000004,
+ LSM_RECORDING_ENTRY_PROCESSING_SUMMARY = 0x10000005,
+ LSM_RECORDING_ENTRY_SPECIAL_SCAN_MODE = 0x10000006,
+ LSM_RECORDING_ENTRY_SCAN_TYPE = 0x10000007,
+ LSM_RECORDING_ENTRY_SCAN_MODE = 0x10000008,
+ LSM_RECORDING_ENTRY_NUMBER_OF_STACKS = 0x10000009,
+ LSM_RECORDING_ENTRY_LINES_PER_PLANE = 0x1000000A,
+ LSM_RECORDING_ENTRY_SAMPLES_PER_LINE = 0x1000000B,
+ LSM_RECORDING_ENTRY_PLANES_PER_VOLUME = 0x1000000C,
+ LSM_RECORDING_ENTRY_IMAGES_WIDTH = 0x1000000D,
+ LSM_RECORDING_ENTRY_IMAGES_HEIGHT = 0x1000000E,
+ LSM_RECORDING_ENTRY_IMAGES_NUMBER_PLANES = 0x1000000F,
+ LSM_RECORDING_ENTRY_IMAGES_NUMBER_STACKS = 0x10000010,
+ LSM_RECORDING_ENTRY_IMAGES_NUMBER_CHANNELS = 0x10000011,
+ LSM_RECORDING_ENTRY_LINSCAN_XY_SIZE = 0x10000012,
+ LSM_RECORDING_ENTRY_SCAN_DIRECTION = 0x10000013,
+ LSM_RECORDING_ENTRY_TIME_SERIES = 0x10000014,
+ LSM_RECORDING_ENTRY_ORIGINAL_SCAN_DATA = 0x10000015,
+ LSM_RECORDING_ENTRY_ZOOM_X = 0x10000016,
+ LSM_RECORDING_ENTRY_ZOOM_Y = 0x10000017,
+ LSM_RECORDING_ENTRY_ZOOM_Z = 0x10000018,
+ LSM_RECORDING_ENTRY_SAMPLE_0X = 0x10000019,
+ LSM_RECORDING_ENTRY_SAMPLE_0Y = 0x1000001A,
+ LSM_RECORDING_ENTRY_SAMPLE_0Z = 0x1000001B,
+ LSM_RECORDING_ENTRY_SAMPLE_SPACING = 0x1000001C,
+ LSM_RECORDING_ENTRY_LINE_SPACING = 0x1000001D,
+ LSM_RECORDING_ENTRY_PLANE_SPACING = 0x1000001E,
+ LSM_RECORDING_ENTRY_PLANE_WIDTH = 0x1000001F,
+ LSM_RECORDING_ENTRY_PLANE_HEIGHT = 0x10000020,
+ LSM_RECORDING_ENTRY_VOLUME_DEPTH = 0x10000021,
+ LSM_RECORDING_ENTRY_ROTATION = 0x10000034,
+ LSM_RECORDING_ENTRY_NUTATION = 0x10000023,
+ LSM_RECORDING_ENTRY_PRECESSION = 0x10000035,
+ LSM_RECORDING_ENTRY_SAMPLE_0TIME = 0x10000036,
+ LSM_RECORDING_ENTRY_START_SCAN_TRIGGER_IN = 0x10000037,
+ LSM_RECORDING_ENTRY_START_SCAN_TRIGGER_OUT = 0x10000038,
+ LSM_RECORDING_ENTRY_START_SCAN_EVENT = 0x10000039,
+ LSM_RECORDING_ENTRY_START_SCAN_TIME = 0x10000040,
+ LSM_RECORDING_ENTRY_STOP_SCAN_TRIGGER_IN = 0x10000041,
+ LSM_RECORDING_ENTRY_STOP_SCAN_TRIGGER_OUT = 0x10000042,
+ LSM_RECORDING_ENTRY_STOP_SCAN_EVENT = 0x10000043,
+ LSM_RECORDING_ENTRY_STOP_SCAN_TIME = 0x10000044,
+ LSM_RECORDING_ENTRY_USE_ROIS = 0x10000045,
+ LSM_RECORDING_ENTRY_USE_REDUCED_MEMORY_ROIS,
+} LSMEntryRecordingMarkers;
+
+typedef enum {
+ LSM_TRACK_ENTRY_MULTIPLEX_TYPE = 0x40000001,
+ LSM_TRACK_ENTRY_MULTIPLEX_ORDER = 0x40000002,
+ LSM_TRACK_ENTRY_SAMPLING_MODE = 0x40000003,
+ LSM_TRACK_ENTRY_SAMPLING_METHOD = 0x40000004,
+ LSM_TRACK_ENTRY_SAMPLING_NUMBER = 0x40000005,
+ LSM_TRACK_ENTRY_ACQUIRE = 0x40000006,
+ LSM_TRACK_ENTRY_SAMPLE_OBSERVATION_TIME = 0x40000007,
+ LSM_TRACK_ENTRY_TIME_BETWEEN_STACKS = 0x4000000B,
+ LSM_TRACK_ENTRY_NAME = 0x4000000C,
+ LSM_TRACK_ENTRY_COLLIMATOR1_NAME = 0x4000000D,
+ LSM_TRACK_ENTRY_COLLIMATOR1_POSITION = 0x4000000E,
+ LSM_TRACK_ENTRY_COLLIMATOR2_NAME = 0x4000000F,
+ LSM_TRACK_ENTRY_COLLIMATOR2_POSITION = 0x40000010,
+ LSM_TRACK_ENTRY_IS_BLEACH_TRACK = 0x40000011,
+ LSM_TRACK_ENTRY_IS_BLEACH_AFTER_SCAN_NUMBER = 0x40000012,
+ LSM_TRACK_ENTRY_BLEACH_SCAN_NUMBER = 0x40000013,
+ LSM_TRACK_ENTRY_TRIGGER_IN = 0x40000014,
+ LSM_TRACK_ENTRY_TRIGGER_OUT = 0x40000015,
+ LSM_TRACK_ENTRY_IS_RATIO_TRACK = 0x40000016,
+ LSM_TRACK_ENTRY_BLEACH_COUNT = 0x40000017,
+} LSMTrackMarkers;
+
+typedef enum {
+ LSM_LASER_ENTRY_NAME = 0x50000001,
+ LSM_LASER_ENTRY_ACQUIRE = 0x50000002,
+ LSM_LASER_ENTRY_POWER = 0x50000003,
+} LSMLaserMarkers;
+
+typedef enum {
+ LSM_DETCHANNEL_ENTRY_INTEGRATION_MODE = 0x70000001,
+ LSM_DETCHANNEL_ENTRY_SPECIAL_MODE = 0x70000002,
+ LSM_DETCHANNEL_ENTRY_DETECTOR_GAIN_FIRST = 0x70000003,
+ LSM_DETCHANNEL_ENTRY_DETECTOR_GAIN_LAST = 0x70000004,
+ LSM_DETCHANNEL_ENTRY_AMPLIFIER_GAIN_FIRST = 0x70000005,
+ LSM_DETCHANNEL_ENTRY_AMPLIFIER_GAIN_LAST = 0x70000006,
+ LSM_DETCHANNEL_ENTRY_AMPLIFIER_OFFS_FIRST = 0x70000007,
+ LSM_DETCHANNEL_ENTRY_AMPLIFIER_OFFS_LAST = 0x70000008,
+ LSM_DETCHANNEL_ENTRY_PINHOLE_DIAMETER = 0x70000009,
+ LSM_DETCHANNEL_ENTRY_COUNTING_TRIGGER = 0x7000000A,
+ LSM_DETCHANNEL_ENTRY_ACQUIRE = 0x7000000B,
+ LSM_DETCHANNEL_POINT_DETECTOR_NAME = 0x7000000C,
+ LSM_DETCHANNEL_AMPLIFIER_NAME = 0x7000000D,
+ LSM_DETCHANNEL_PINHOLE_NAME = 0x7000000E,
+ LSM_DETCHANNEL_FILTER_SET_NAME = 0x7000000F,
+ LSM_DETCHANNEL_FILTER_NAME = 0x70000010,
+ LSM_DETCHANNEL_INTEGRATOR_NAME = 0x70000013,
+ LSM_DETCHANNEL_DETECTION_CHANNEL_NAME = 0x70000014,
+} LSMDetectorMarkers;
+
+typedef enum {
+ LSM_TYPE_SUBBLOCK = 0,
+ LSM_TYPE_LONG = 4,
+ LSM_TYPE_RATIONAL = 5,
+ LSM_TYPE_ASCII = 2,
+} LSMScanInfoType;
+
+typedef struct {
+ LSMTIFFSubFileType filetype;
+ guint64 image_width;
+ guint64 image_height;
+ guint strips_number;
+ guint *bits_per_sample;
+ GwyTIFFCompression compression;
+ GwyTIFFPhotometric photometric;
+ guint32 *strip_offsets;
+ guint samples_per_pixel;
+ guint32 *strip_byte_counts;
+ GwyTIFFPlanarConfig planar_config;
+} LSMTIFFDirectory;
+
+typedef struct {
+ guint32 magic_number;
+ gint32 size;
+ gint32 xres;
+ gint32 yres;
+ gint32 zres;
+ gint32 channels;
+ gint32 time_res;
+ gint32 intensity_datatype;
+ gint32 thumbnail_xres;
+ gint32 thumbnail_yres;
+ gdouble x_voxel_size;
+ gdouble y_voxel_size;
+ gdouble z_voxel_size;
+ gdouble x_origin;
+ gdouble y_origin;
+ gdouble z_origin;
+ guint32 scan_type;
+ guint32 datatype;
+ guint32 offset_vector_overlay;
+ guint32 offset_input_lut;
+ guint32 offset_output_lut;
+ guint32 offset_channel_colors_names;
+ gdouble time_interval;
+ guint32 offset_channel_data_types;
+ guint32 offset_scan_information;
+ guint32 offset_ks_data;
+ guint32 offset_timestamps;
+ guint32 offset_events_list;
+ guint32 offset_roi;
+ guint32 offset_bleach_roi;
+ guint32 offset_next_recording;
+ guint32 reserved[90]; /* Must be zeros */
+} LSMHeaderTag;
+
+typedef struct {
+ gint32 block_size;
+ gint32 numcolors;
+ gint32 numnames;
+ gint32 offset_colors;
+ gint32 offset_names;
+ gint32 mono;
+ GArray *colors;
+ GPtrArray *names;
+} LSMNamesColors;
+
+typedef struct {
+ guint32 block_size;
+ guint32 number_of_subblocks;
+ guint32 channels_number;
+ LSMLUTType lut_type; /* guint32 */
+ guint32 advanced;
+ guint32 actual_channel;
+ guint32 reserved[9];
+} LSMLookupTable;
+
+typedef struct {
+ guint32 entry; /* guint32 */
+ LSMScanInfoType type; /* guint32 */
+ guint32 size;
+ gpointer data;
+} LSMEntry;
+
+typedef struct {
+ gchar *name;
+ gchar *description;
+ gchar *notes;
+ gchar *objective;
+ gchar *processing_summary;
+ gchar *special_scan_mode;
+ gchar *scan_mode;
+ guint32 number_of_stacks;
+ guint32 lines_per_plane;
+ guint32 samples_per_line;
+ guint32 planes_per_volume;
+ guint32 images_width;
+ guint32 images_height;
+ guint32 images_number_planes;
+ guint32 images_number_stacks;
+ guint32 images_number_channels;
+ guint32 linscan_xy_size;
+ guint32 scan_direction;
+ guint32 time_series;
+ guint32 original_scan_data;
+ gdouble zoomx;
+ gdouble zoomy;
+ gdouble zoomz;
+ gdouble sample0x;
+ gdouble sample0y;
+ gdouble sample0z;
+ gdouble sample_spacing;
+ gdouble line_spacing;
+ gdouble plane_spacing;
+ gdouble plane_width;
+ gdouble plane_height;
+ gdouble volume_depth;
+ gdouble rotation;
+ gdouble nutation;
+ gdouble precession;
+ gdouble sample0_time;
+ gchar *start_scan_trigger_in;
+ gchar *start_scan_trigger_out;
+ guint32 start_scan_event;
+ gdouble start_scan_time;
+ gchar *stop_scan_trigger_in;
+ gchar *stop_scan_trigger_out;
+ guint32 stop_scan_event;
+ gdouble stop_scan_time;
+ guint32 use_rois;
+ guint32 use_reduced_memory_rois;
+ gchar *laser_name;
+ guint32 laser_acquire;
+ gdouble laser_power;
+} LSMEntryRecording;
+
+static gboolean module_register (void);
+static gint lsm_detect (const GwyFileDetectInfo *fileinfo,
+ gboolean only_name);
+static GwyContainer* lsm_load (const gchar *filename,
+ GwyRunType mode,
+ GError **error);
+static GwyContainer* lsm_load_tiff (const GwyTIFF *tiff,
+ const gchar *filename,
+ GError **error);
+static LSMTIFFDirectory* lsm_read_directory (const GwyTIFF *tiff,
+ guint dirno,
+ GError **error);
+static LSMHeaderTag* lsm_read_header_tag (const GwyTIFF *tiff,
+ const GwyTIFFEntry *tag,
+ GError **error);
+static LSMNamesColors* lsm_read_names_colors (const GwyTIFF *tiff,
+ guint32 offset,
+ GError **error);
+static LSMEntryRecording* lsm_read_recording (const GwyTIFF *tiff,
+ GwyContainer *meta,
+ guint32 offset,
+ GError **error);
+static LSMEntry* lsm_read_entry (const GwyTIFF *tiff,
+ guint32 offset,
+ GError **error);
+
+static GwyModuleInfo module_info = {
+ GWY_MODULE_ABI_VERSION,
+ module_register,
+ N_("Imports Carl Zeiss CLSM images."),
+ "Daniil Bratashov <dn2010 at gwyddion.net>",
+ "0.3",
+ "Daniil Bratashov (dn2010), David Nečas (Yeti)",
+ "2017",
+};
+
+GWY_MODULE_QUERY2(module_info, zeisslsm)
+
+static gboolean
+module_register(void)
+{
+ gwy_file_func_register("zeisslsm",
+ N_("Carl Zeiss CLSM images (.lsm)"),
+ (GwyFileDetectFunc)&lsm_detect,
+ (GwyFileLoadFunc)&lsm_load,
+ NULL,
+ NULL);
+
+ return TRUE;
+}
+
+static gint
+lsm_detect(const GwyFileDetectInfo *fileinfo, gboolean only_name)
+{
+ GwyTIFF *tiff = NULL;
+ gint score = 0;
+ GwyTIFFVersion version = GWY_TIFF_CLASSIC;
+ guint byteorder = G_LITTLE_ENDIAN;
+ const GwyTIFFEntry *lsm_tag = NULL;
+
+ if (only_name)
+ return (g_str_has_suffix(fileinfo->name_lowercase, EXTENSION))
+ ? 20 : 0;
+
+ /* Weed out non-TIFFs */
+ if (!gwy_tiff_detect(fileinfo->head, fileinfo->buffer_len,
+ &version, &byteorder))
+ return 0;
+
+ if ((tiff = gwy_tiff_load(fileinfo->name, NULL))
+ && (lsm_tag = gwy_tiff_find_tag(tiff, 0, ZEISS_LSM_HEADER_TAG))) {
+ score = 100;
+ }
+
+ if (tiff)
+ g_free(tiff);
+
+ return score;
+}
+
+static GwyContainer*
+lsm_load(const gchar *filename,
+ G_GNUC_UNUSED GwyRunType mode,
+ GError **error)
+{
+
+ GwyTIFF *tiff;
+ GwyContainer *container = NULL;
+
+ tiff = gwy_tiff_load(filename, error);
+ if (!tiff)
+ return NULL;
+
+ container = lsm_load_tiff(tiff, filename, error);
+
+ gwy_tiff_free(tiff);
+
+ return container;
+}
+
+static GwyContainer*
+lsm_load_tiff(const GwyTIFF *tiff,
+ const gchar *filename,
+ GError **error)
+{
+ GwyContainer *container = NULL, *meta = NULL;
+ GwyDataLine *dataline = NULL;
+ GwyGraphCurveModel *gcmodel;
+ GwyGraphModel *gmodel = NULL;
+ GwyDataField *dfield = NULL, *preview;
+ GwyBrick *brick;
+ GwySIUnit *siunit;
+ gint i, j, k, l, volumes, ndirs, z, xres = 0, yres = 0, zres = 0;
+ gint color;
+ gdouble xreal = 1.0, yreal = 1.0, zreal = 1.0;
+ gchar *key, *name, *lutname;
+ gdouble *data, *bdata;
+ const GwyTIFFEntry *lsm_tag;
+ LSMTIFFDirectory *directory;
+ LSMHeaderTag *header_tag = NULL;
+ LSMNamesColors *names_colors = NULL;
+ LSMEntryRecording *recording = NULL;
+ const guchar *p;
+ gboolean is_image = FALSE, is_volume = FALSE, is_line = FALSE;
+ GArray *bricks, *bricks_preview;
+
+ if (!(lsm_tag = gwy_tiff_find_tag(tiff, 0, ZEISS_LSM_HEADER_TAG))) {
+ err_FILE_TYPE(error, "Carl Zeiss LSM");
+ goto fail;
+ }
+
+ if (!(header_tag = lsm_read_header_tag(tiff, lsm_tag, error))) {
+ err_FILE_TYPE(error, "Carl Zeiss LSM");
+ goto fail;
+ }
+
+ names_colors = lsm_read_names_colors(tiff,
+ header_tag->offset_channel_colors_names,
+ error);
+ meta = gwy_container_new();
+ recording = lsm_read_recording(tiff, meta,
+ header_tag->offset_scan_information,
+ error);
+
+ ndirs = gwy_tiff_get_n_dirs(tiff);
+ gwy_debug("ndirs=%u", ndirs);
+
+ container = gwy_container_new();
+ k = 0; /* number of images in resulting file */
+ volumes = 0;
+
+ is_image = FALSE;
+ is_volume = FALSE;
+ is_line = FALSE;
+ bricks = g_array_new(FALSE, FALSE, sizeof(GwyBrick*));
+ bricks_preview = g_array_new(FALSE, FALSE, sizeof(GwyBrick*));
+
+ for (i = 0; i < ndirs; i++) {
+ gwy_debug("directory #%u", i);
+ if (!(directory = lsm_read_directory(tiff, i, error))) {
+ err_FILE_TYPE(error, "Carl Zeiss LSM");
+ goto fail;
+ }
+
+ switch (header_tag->scan_type) {
+ case LSM_SCANTYPE_XYZ:
+ xres = directory->image_width;
+ yres = directory->image_height;
+ zres = header_tag->zres;
+ xreal = xres * header_tag->x_voxel_size;
+ yreal = yres * header_tag->y_voxel_size;
+ zreal = zres * header_tag->z_voxel_size;
+ if (directory->image_width != header_tag->xres) {
+ xreal = header_tag->xres * header_tag->x_voxel_size;
+ yreal = header_tag->yres * header_tag->y_voxel_size;
+ }
+ if (header_tag->zres > 1)
+ is_volume = TRUE;
+ else
+ is_image = TRUE;
+ break;
+ case LSM_SCANTYPE_XZ:
+ xres = directory->image_width;
+ yres = directory->image_height;
+ xreal = xres * header_tag->x_voxel_size;
+ yreal = yres * header_tag->z_voxel_size;
+ if (directory->image_width != header_tag->xres) {
+ xreal = header_tag->xres * header_tag->x_voxel_size;
+ yreal = header_tag->zres * header_tag->z_voxel_size;
+ }
+ is_image = TRUE;
+ break;
+ case LSM_SCANTYPE_LINE:
+ xres = directory->image_width;
+ yres = directory->image_height;
+ xreal = xres * header_tag->x_voxel_size;
+ yreal = 1.0;
+ if (directory->image_width != header_tag->xres)
+ xreal = header_tag->xres * header_tag->x_voxel_size;
+ is_line = TRUE;
+ siunit = gwy_si_unit_new("m");
+ gmodel = g_object_new(GWY_TYPE_GRAPH_MODEL,
+ "si-unit-x", siunit,
+ NULL);
+ g_object_unref(siunit);
+ break;
+ case LSM_SCANTYPE_TIMESERIES_XY:
+ xres = directory->image_width;
+ yres = directory->image_height;
+ zres = ndirs / 2;
+ xreal = xres * header_tag->x_voxel_size;
+ yreal = yres * header_tag->y_voxel_size;
+ if (directory->image_width != header_tag->xres) {
+ xreal = header_tag->xres * header_tag->x_voxel_size;
+ yreal = header_tag->yres * header_tag->y_voxel_size;
+ }
+ zreal = ndirs / 2 * header_tag->time_interval;
+ is_volume = TRUE;
+ break;
+ case LSM_SCANTYPE_TIMESERIES_XZ:
+ xres = directory->image_width;
+ yres = directory->image_height;
+ zres = ndirs / 2;
+ xreal = xres * header_tag->x_voxel_size;
+ yreal = yres * header_tag->z_voxel_size;
+ zreal = ndirs / 2 * header_tag->time_interval;
+ if (directory->image_width != header_tag->xres) {
+ xreal = header_tag->xres * header_tag->x_voxel_size;
+ yreal = header_tag->zres * header_tag->z_voxel_size;
+ }
+ is_volume = TRUE;
+ break;
+ case LSM_SCANTYPE_TIMESERIES_MEAN_ROI:
+ xres = directory->image_width;
+ yres = directory->image_height;
+ xreal = directory->image_width;
+ yreal = directory->image_height * header_tag->time_interval;
+ is_image = TRUE;
+ break;
+ default:
+ // FIXME: there is files with broken scantype
+ xres = directory->image_width;
+ yres = directory->image_height;
+ zres = header_tag->zres;
+ xreal = xres * header_tag->x_voxel_size;
+ yreal = yres * header_tag->y_voxel_size;
+ zreal = zres * header_tag->z_voxel_size;
+ if (directory->image_width != header_tag->xres) {
+ xreal = header_tag->xres * header_tag->x_voxel_size;
+ yreal = header_tag->yres * header_tag->y_voxel_size;
+ }
+ if (header_tag->zres > 1)
+ is_volume = TRUE;
+ else
+ is_image = TRUE;
+ break;
+ }
+
+ for (j = 0; j < directory->strips_number; j++) {
+ if ((is_image) || (is_volume)) {
+ dfield = gwy_data_field_new(xres, yres,
+ xreal, yreal, TRUE);
+ data = gwy_data_field_get_data(dfield);
+ }
+ else if (is_line) {
+ dataline = gwy_data_line_new(xres, xreal, TRUE);
+ data = gwy_data_line_get_data(dataline);
+ }
+ else {
+ err_FILE_TYPE(error, "Carl Zeiss LSM");
+ goto fail;
+ }
+
+ p = tiff->data + directory->strip_offsets[j];
+ if (directory->bits_per_sample[j] == 8)
+ for (l = 0; l < xres * yres; l++)
+ *(data++) = *(p++);
+ else if ((directory->bits_per_sample[j] == 12)
+ || (directory->bits_per_sample[j] == 16))
+ for (l = 0; l < xres * yres; l++)
+ *(data++) = gwy_get_guint16_le(&p);
+ else if (directory->bits_per_sample[j] == 32)
+ for (l = 0; l < xres * yres; l++)
+ *(data++) = gwy_get_gfloat_le(&p);
+ else {
+ if (is_line)
+ g_object_unref(dataline);
+ else
+ g_object_unref(dfield);
+ continue;
+ }
+
+ if (is_line) {
+ gcmodel = g_object_new(GWY_TYPE_GRAPH_CURVE_MODEL,
+ "mode", GWY_GRAPH_CURVE_LINE,
+ "color", gwy_graph_get_preset_color(k),
+ NULL);
+ gwy_graph_curve_model_set_data_from_dataline(gcmodel,
+ dataline,
+ 0, 0);
+ gwy_graph_model_add_curve(gmodel, gcmodel);
+ g_object_unref(gcmodel);
+ }
+
+ if (is_image) {
+ siunit = gwy_si_unit_new("m");
+ gwy_data_field_set_si_unit_xy(dfield, siunit);
+ g_object_unref(siunit);
+ key = g_strdup_printf("/%d/data", k);
+ gwy_container_set_object_by_name(container,
+ key, dfield);
+ g_free(key);
+ g_object_unref(dfield);
+ if (gwy_container_get_n_items(meta)) {
+ key = g_strdup_printf("/%d/meta", k);
+ gwy_container_set_object_by_name(container, key,
+ meta);
+ g_free(key);
+ }
+ gwy_file_channel_import_log_add(container,
+ k, NULL, filename);
+
+ if (names_colors && (i % 2 == 0)) {
+ key = g_strdup_printf("/%d/data/title", k);
+ name = (gchar *)g_ptr_array_index(names_colors->names,
+ j);
+ gwy_container_set_string_by_name(container, key,
+ g_strdup(name));
+ g_free(key);
+
+ color = g_array_index(names_colors->colors,
+ gint32, j);
+ if (color == 255) {
+ lutname = g_strdup_printf("RGB-Red");
+ }
+ else if (color == 65280) {
+ lutname = g_strdup_printf("RGB-Green");
+ }
+ else if (color == 16711680) {
+ lutname = g_strdup_printf("RGB-Blue");
+ }
+ else {
+ lutname = g_strdup_printf("Gray");
+ }
+ key = g_strdup_printf("/%u/base/palette",
+ k);
+ gwy_container_set_string_by_name(container,
+ key,
+ lutname);
+ g_free(key);
+ }
+ else {
+ key = g_strdup_printf("/%d/data/title", k);
+ gwy_container_set_string_by_name(container, key,
+ g_strdup_printf("LSM Image %u (channel %u)",
+ i / 2, j));
+ g_free(key);
+
+ if ((directory->photometric
+ == GWY_TIFF_PHOTOMETRIC_RGB)
+ && (j == 0))
+ lutname = g_strdup_printf("RGB-Red");
+ else if ((directory->photometric
+ == GWY_TIFF_PHOTOMETRIC_RGB)
+ && (j == 1))
+ lutname = g_strdup_printf("RGB-Green");
+ else if ((directory->photometric
+ == GWY_TIFF_PHOTOMETRIC_RGB)
+ && (j == 2))
+ lutname = g_strdup_printf("RGB-Blue");
+ else {
+ lutname = g_strdup_printf("Gray");
+ }
+ key = g_strdup_printf("/%u/base/palette", k);
+ gwy_container_set_string_by_name(container,
+ key,
+ lutname);
+ } /* else */
+ }
+
+ if (is_volume) {
+ if ((i % (zres * 2) == 0)
+ || (i % (zres * 2) == 1)) {
+ brick = gwy_brick_new(xres, yres, zres,
+ xreal, yreal, zreal,
+ TRUE);
+
+ siunit = gwy_si_unit_new("m");
+ gwy_brick_set_si_unit_x(brick, siunit);
+ g_object_unref(siunit);
+ siunit = gwy_si_unit_new("m");
+ gwy_brick_set_si_unit_y(brick, siunit);
+ g_object_unref(siunit);
+ if (header_tag->scan_type == LSM_SCANTYPE_XYZ) {
+ siunit = gwy_si_unit_new("m");
+ gwy_brick_set_si_unit_x(brick, siunit);
+ g_object_unref(siunit);
+ }
+ else {
+ siunit = gwy_si_unit_new("s");
+ gwy_brick_set_si_unit_x(brick, siunit);
+ g_object_unref(siunit);
+ }
+
+ if (i % (zres * 2) == 0)
+ g_array_insert_val(bricks, j, brick);
+ else
+ g_array_insert_val(bricks_preview, j, brick);
+
+ key = g_strdup_printf("/brick/%d", volumes + 1);
+ gwy_container_set_object_by_name(container,
+ key, brick);
+ g_free(key);
+ g_object_unref(brick);
+
+ if (gwy_container_get_n_items(meta)) {
+ key = g_strdup_printf("brick/%d/meta",
+ volumes + 1);
+ gwy_container_set_object_by_name(container, key,
+ meta);
+ g_free(key);
+ }
+
+ if (names_colors && (i % 2 == 0)) {
+ key = g_strdup_printf("/brick/%d/title",
+ volumes + 1);
+ name = (gchar *)g_ptr_array_index(names_colors->names,
+ j);
+ gwy_container_set_string_by_name(container, key,
+ g_strdup(name));
+ g_free(key);
+
+ color = g_array_index(names_colors->colors,
+ gint32, j);
+ if (color == 255) {
+ lutname = g_strdup_printf("RGB-Red");
+ }
+ else if (color == 65280) {
+ lutname = g_strdup_printf("RGB-Green");
+ }
+ else if (color == 16711680) {
+ lutname = g_strdup_printf("RGB-Blue");
+ }
+ else {
+ lutname = g_strdup_printf("Gray");
+ }
+ key = g_strdup_printf("/brick/%d/preview/palette",
+ volumes + 1);
+ gwy_container_set_string_by_name(container,
+ key,
+ lutname);
+ g_free(key);
+ }
+ else {
+ key = g_strdup_printf("/brick/%d/title",
+ volumes + 1);
+ gwy_container_set_string_by_name(container, key,
+ g_strdup_printf("LSM Volume %d (channel %u)",
+ i / 2 / zres,
+ j));
+ g_free(key);
+
+ if ((directory->photometric
+ == GWY_TIFF_PHOTOMETRIC_RGB)
+ && (j == 0))
+ lutname = g_strdup_printf("RGB-Red");
+ else if ((directory->photometric
+ == GWY_TIFF_PHOTOMETRIC_RGB)
+ && (j == 1))
+ lutname = g_strdup_printf("RGB-Green");
+ else if ((directory->photometric
+ == GWY_TIFF_PHOTOMETRIC_RGB)
+ && (j == 2))
+ lutname = g_strdup_printf("RGB-Blue");
+ else {
+ lutname = g_strdup_printf("Gray");
+ }
+ key = g_strdup_printf("/brick/%d/preview/palette",
+ volumes + 1);
+ gwy_container_set_string_by_name(container,
+ key,
+ lutname);
+ g_free(key);
+ } /* else */
+ volumes++;
+ }
+
+ z = (i % zres) / 2;
+ if (i % 2)
+ brick = g_array_index(bricks_preview, GwyBrick*, j);
+ else
+ brick = g_array_index(bricks, GwyBrick*, j);
+
+ bdata = gwy_brick_get_data(brick);
+ data = gwy_data_field_get_data(dfield);
+ memcpy(bdata + z * directory->image_width * directory->image_height,
+ data, directory->image_width * directory->image_height * sizeof(gdouble));
+ }
+ k++;
+ } /* for j */
+
+ g_free(directory->bits_per_sample);
+ g_free(directory->strip_offsets);
+ g_free(directory->strip_byte_counts);
+ g_free(directory);
+ } /* for i */
+
+ g_array_free(bricks, TRUE);
+ g_array_free(bricks_preview, TRUE);
+
+ if (is_volume) {
+ for (i = 0; i < volumes; i++) {
+ key = g_strdup_printf("/brick/%d", i + 1);
+ gwy_container_gis_object_by_name(container,
+ key,
+ &brick);
+ g_free(key);
+
+ xres = gwy_brick_get_xres(brick);
+ yres = gwy_brick_get_yres(brick);
+ preview = gwy_data_field_new(xres, yres,
+ 1.0, 1.0, FALSE);
+ gwy_brick_mean_plane(brick, preview,
+ 0, 0, 0,
+ xres, yres, -1,
+ FALSE);
+ key = g_strdup_printf("/brick/%d/preview", i + 1);
+ gwy_container_set_object_by_name(container,
+ key,
+ preview);
+ g_free(key);
+ g_object_unref(preview);
+
+ gwy_file_volume_import_log_add(container,
+ i+1, NULL, filename);
+ }
+ }
+
+ if (is_line) {
+ gwy_container_set_object_by_name(container,
+ "/0/graph/graph/1", gmodel);
+ g_object_unref(gmodel);
+ }
+
+fail:
+ if (header_tag) {
+ g_free(header_tag);
+ }
+ if (names_colors) {
+ g_array_free(names_colors->colors, TRUE);
+ g_ptr_array_free(names_colors->names, TRUE);
+ g_free(names_colors);
+ }
+ /* The strings are already eaten by meta. */
+ g_free(recording);
+
+ return container;
+}
+
+static LSMTIFFDirectory*
+lsm_read_directory(const GwyTIFF *tiff, guint dirno, GError **error)
+{
+ guint i, j, offset;
+ GArray *direntries;
+ GwyTIFFEntry *tag;
+ const guchar *p;
+ LSMTIFFDirectory *lsmdir;
+
+ lsmdir = g_new(LSMTIFFDirectory, 1);
+ direntries = g_ptr_array_index(tiff->dirs, dirno);
+ for (i = 0; i < direntries->len; i++) {
+ tag = &g_array_index(direntries, GwyTIFFEntry, i);
+ gwy_debug("tag=%u type=%d count=%" G_GUINT64_FORMAT "",
+ tag->tag, tag->type, tag->count);
+ switch (tag->tag) {
+ case GWY_TIFFTAG_SUB_FILE_TYPE:
+ p = tag->value;
+ lsmdir->filetype = gwy_get_guint32_le(&p);
+ gwy_debug("filetype=%d", lsmdir->filetype);
+ break;
+ case GWY_TIFFTAG_IMAGE_WIDTH:
+ p = tag->value;
+ lsmdir->image_width = gwy_get_guint32_le(&p);
+ gwy_debug("imgwidth=%" G_GUINT64_FORMAT "",
+ lsmdir->image_width);
+ break;
+ case GWY_TIFFTAG_IMAGE_LENGTH:
+ p = tag->value;
+ lsmdir->image_height = gwy_get_guint32_le(&p);
+ gwy_debug("imgheight=%" G_GUINT64_FORMAT "",
+ lsmdir->image_height);
+ break;
+ case GWY_TIFFTAG_BITS_PER_SAMPLE:
+ p = tag->value;
+ offset = gwy_get_guint32_le(&p);
+ gwy_debug("offset = %d", offset);
+ lsmdir->bits_per_sample
+ = g_new0(guint, MAX(tag->count, 1));
+ if (tag->count == 1)
+ lsmdir->bits_per_sample[0] = offset;
+ else {
+ p = tiff->data + offset;
+ for (j = 0; j < tag->count; j++) {
+ lsmdir->bits_per_sample[j]
+ = gwy_get_guint16_le(&p);
+ gwy_debug("bps[%d]=%d",
+ j , lsmdir->bits_per_sample[j]);
+ }
+ }
+ break;
+ case GWY_TIFFTAG_COMPRESSION:
+ p = tag->value;
+ lsmdir->compression = gwy_get_guint16_le(&p);
+ gwy_debug("compression=%d", lsmdir->compression);
+ if (lsmdir->compression != GWY_TIFF_COMPRESSION_NONE) {
+ // FIXME: LZW is unsupported
+ g_set_error(error,
+ GWY_MODULE_FILE_ERROR,
+ GWY_MODULE_FILE_ERROR_DATA,
+ _("Compression type %u is not supported."),
+ lsmdir->compression);
+ g_free(lsmdir);
+ return NULL;
+ }
+ break;
+ case GWY_TIFFTAG_PHOTOMETRIC:
+ p = tag->value;
+ lsmdir->photometric = gwy_get_guint16_le(&p);
+ gwy_debug("photometric=%d", lsmdir->photometric);
+ break;
+ case GWY_TIFFTAG_STRIP_OFFSETS:
+ p = tag->value;
+ offset = gwy_get_guint32_le(&p);
+ gwy_debug("offset = %d", offset);
+ lsmdir->strips_number = tag->count;
+ lsmdir->strip_offsets= g_new0(guint, MAX(tag->count, 1));
+ if (tag->count == 1)
+ lsmdir->strip_offsets[0] = offset;
+ else {
+ p = tiff->data + offset;
+ for (j = 0; j < tag->count; j++) {
+
+ lsmdir->strip_offsets[j]
+ = gwy_get_guint32_le(&p);
+ gwy_debug("strip offset[%d]=%d",
+ j , lsmdir->strip_offsets[j]);
+ }
+ }
+ break;
+ case GWY_TIFFTAG_SAMPLES_PER_PIXEL:
+ p = tag->value;
+ lsmdir->samples_per_pixel = gwy_get_guint16_le(&p);
+ gwy_debug("samples per pixel=%d",
+ lsmdir->samples_per_pixel);
+ break;
+ case GWY_TIFFTAG_STRIP_BYTE_COUNTS:
+ p = tag->value;
+ offset = gwy_get_guint32_le(&p);
+ gwy_debug("offset = %d", offset);
+ lsmdir->strip_byte_counts
+ = g_new0(guint, MAX(tag->count, 1));
+ if (tag->count == 1)
+ lsmdir->strip_byte_counts[0] = offset;
+ else {
+ p = tiff->data + offset;
+ for (j = 0; j < tag->count; j++) {
+ lsmdir->strip_byte_counts[j]
+ = gwy_get_guint32_le(&p);
+ gwy_debug("strip byte counts[%d]=%d",
+ j , lsmdir->strip_byte_counts[j]);
+ }
+ }
+ break;
+ case GWY_TIFFTAG_PLANAR_CONFIG:
+ p = tag->value;
+ lsmdir->planar_config = gwy_get_guint16_le(&p);
+ gwy_debug("planar config=%d", lsmdir->planar_config);
+ break;
+ case ZEISS_LSM_HEADER_TAG:
+ break;
+ default:
+ break;
+ }
+ }
+
+ return lsmdir;
+}
+
+static LSMHeaderTag*
+lsm_read_header_tag(const GwyTIFF *tiff,
+ const GwyTIFFEntry *tag, GError **error)
+{
+ LSMHeaderTag *header_tag;
+ guint offset;
+ const guchar *p;
+
+ header_tag = g_new0(LSMHeaderTag, 1);
+ p = tag->value;
+ offset = gwy_get_guint32_le(&p);
+ p = tiff->data + offset;
+ header_tag->magic_number = gwy_get_guint32_le(&p);
+ if ((header_tag->magic_number != 0x00300494C)
+ && (header_tag->magic_number != 0x00400494C)) {
+ err_FILE_TYPE(error, "Carl Zeiss LSM");
+ g_free(header_tag);
+ return NULL;
+ }
+ gwy_debug("magic=%x", header_tag->magic_number);
+ header_tag->size = gwy_get_gint32_le(&p);
+ header_tag->xres = gwy_get_gint32_le(&p);
+ header_tag->yres = gwy_get_gint32_le(&p);
+ header_tag->zres = gwy_get_gint32_le(&p);
+ header_tag->channels = gwy_get_gint32_le(&p);
+ header_tag->time_res = gwy_get_gint32_le(&p);
+ header_tag->intensity_datatype = gwy_get_gint32_le(&p);
+ header_tag->thumbnail_xres = gwy_get_gint32_le(&p);
+ header_tag->thumbnail_yres = gwy_get_gint32_le(&p);
+ header_tag->x_voxel_size = gwy_get_gdouble_le(&p);
+ header_tag->y_voxel_size = gwy_get_gdouble_le(&p);
+ header_tag->z_voxel_size = gwy_get_gdouble_le(&p);
+ header_tag->x_origin = gwy_get_gdouble_le(&p);
+ header_tag->y_origin = gwy_get_gdouble_le(&p);
+ header_tag->z_origin = gwy_get_gdouble_le(&p);
+ header_tag->scan_type = gwy_get_guint32_le(&p);
+ header_tag->datatype = gwy_get_guint32_le(&p);
+ header_tag->offset_vector_overlay = gwy_get_guint32_le(&p);
+ header_tag->offset_input_lut = gwy_get_guint32_le(&p);
+ header_tag->offset_output_lut = gwy_get_guint32_le(&p);
+ header_tag->offset_channel_colors_names = gwy_get_guint32_le(&p);
+ header_tag->time_interval = gwy_get_gdouble_le(&p);
+ header_tag->offset_channel_data_types = gwy_get_guint32_le(&p);
+ header_tag->offset_scan_information = gwy_get_guint32_le(&p);
+ header_tag->offset_ks_data = gwy_get_guint32_le(&p);
+ header_tag->offset_timestamps = gwy_get_guint32_le(&p);
+ header_tag->offset_events_list = gwy_get_guint32_le(&p);
+ header_tag->offset_roi = gwy_get_guint32_le(&p);
+ header_tag->offset_bleach_roi = gwy_get_guint32_le(&p);
+ header_tag->offset_next_recording = gwy_get_guint32_le(&p);
+
+ gwy_debug("channels=%d", header_tag->channels);
+ gwy_debug("scan type=%u", header_tag->scan_type);
+ gwy_debug("xres=%d yres=%d zres=%d",
+ header_tag->xres,
+ header_tag->yres,
+ header_tag->zres);
+ gwy_debug("xsize=%g, ysize=%g zsize=%g timesize=%g",
+ header_tag->x_voxel_size,
+ header_tag->y_voxel_size,
+ header_tag->z_voxel_size,
+ header_tag->time_interval);
+ return header_tag;
+}
+
+static LSMNamesColors *
+lsm_read_names_colors(const GwyTIFF *tiff,
+ guint32 offset,
+ G_GNUC_UNUSED GError **error)
+{
+ LSMNamesColors *names_colors;
+ const guchar *p;
+ gchar *name, *nameu;
+ gint32 color;
+ gint i;
+ gsize len, size;
+
+ if (offset == 0) {
+ gwy_debug("No names and colors structure");
+ return NULL;
+ }
+ names_colors = g_new0(LSMNamesColors, 1);
+ p = tiff->data + offset;
+
+ names_colors->block_size = gwy_get_gint32_le(&p);
+ names_colors->numcolors = gwy_get_gint32_le(&p);
+ names_colors->numnames = gwy_get_gint32_le(&p);
+ names_colors->offset_colors = gwy_get_gint32_le(&p);
+ names_colors->offset_names = gwy_get_gint32_le(&p);
+ names_colors->mono = gwy_get_gint32_le(&p);
+ names_colors->colors = g_array_sized_new(FALSE, TRUE,
+ sizeof(gint32),
+ names_colors->numcolors);
+ p = tiff->data + offset + names_colors->offset_colors;
+ for (i = 0; i < names_colors->numcolors; i++) {
+ color = gwy_get_gint32_le(&p);
+ g_array_append_val (names_colors->colors, color);
+ gwy_debug("color [%d] = %d", i, color);
+ }
+ p = tiff->data + offset + names_colors->offset_names;
+ names_colors->names = g_ptr_array_sized_new(names_colors->numnames);
+ gwy_debug("num names=%d", names_colors->numnames);
+ len = 0;
+ size = names_colors->block_size - names_colors->offset_names - len;
+ for (i = 0; i < names_colors->numnames; i++) {
+ name = g_malloc0(size + 1);
+ while ((*(p++) < 32) && ((len++) < size));
+ while ((*p) && (len < size)) {
+ *(name + (len++)) = *(p++);
+ }
+ gwy_debug("name[%d]=%s", i, name);
+ nameu = g_convert(name, len, "UTF-8", "ISO-8859-1",
+ NULL, NULL, NULL);
+ g_free(name);
+ g_ptr_array_add(names_colors->names, (gpointer)nameu);
+ }
+
+ return names_colors;
+}
+
+static LSMEntryRecording*
+lsm_read_recording (const GwyTIFF *tiff,
+ GwyContainer *meta,
+ guint32 offset,
+ G_GNUC_UNUSED GError **error)
+{
+ LSMEntryRecording *recording;
+ LSMEntry *entry;
+ const guchar *p;
+
+ if (offset == 0) {
+ gwy_debug("No recordings");
+ return NULL;
+ }
+
+ p = tiff->data + offset;
+ entry = g_new0(LSMEntry, 1);
+ recording = g_new0(LSMEntryRecording, 1);
+ while (entry->entry != LSM_SUBBLOCK_END) {
+ if (entry)
+ g_free(entry);
+ entry = lsm_read_entry(tiff, offset, error);
+
+ gwy_debug("entry = %x type=%d size=%d",
+ entry->entry, entry->type, entry->size);
+ if (entry->entry == LSM_RECORDING_ENTRY_NAME) {
+ recording->name = g_convert(entry->data, entry->size,
+ "UTF-8", "ISO-8859-1",
+ NULL, NULL, NULL);
+ gwy_container_set_string_by_name(meta, "Name",
+ recording->name);
+ }
+ else if (entry->entry == LSM_RECORDING_ENTRY_DESCRIPTION) {
+ recording->description = g_convert(entry->data, entry->size,
+ "UTF-8", "ISO-8859-1",
+ NULL, NULL, NULL);
+ gwy_container_set_string_by_name(meta, "Description",
+ recording->description);
+ }
+ else if (entry->entry == LSM_RECORDING_ENTRY_NOTES) {
+ recording->notes = g_convert(entry->data, entry->size,
+ "UTF-8", "ISO-8859-1",
+ NULL, NULL, NULL);
+ gwy_container_set_string_by_name(meta, "Notes",
+ recording->notes);
+ }
+ else if (entry->entry == LSM_RECORDING_ENTRY_OBJECTIVE) {
+ recording->objective = g_convert(entry->data, entry->size,
+ "UTF-8", "ISO-8859-1",
+ NULL, NULL, NULL);
+ gwy_container_set_string_by_name(meta, "Objective",
+ recording->objective);
+ }
+ else if (entry->entry == LSM_RECORDING_ENTRY_PROCESSING_SUMMARY) {
+ recording->processing_summary = g_convert(entry->data,
+ entry->size,
+ "UTF-8",
+ "ISO-8859-1",
+ NULL, NULL, NULL);
+ gwy_container_set_string_by_name(meta, "Processing summary",
+ recording->processing_summary);
+
+ }
+ else if (entry->entry == LSM_RECORDING_ENTRY_SPECIAL_SCAN_MODE) {
+ recording->special_scan_mode = g_convert(entry->data,
+ entry->size,
+ "UTF-8",
+ "ISO-8859-1",
+ NULL, NULL, NULL);
+ gwy_container_set_string_by_name(meta, "Special scan mode",
+ recording->special_scan_mode);
+ }
+ else if (entry->entry == LSM_RECORDING_ENTRY_SCAN_TYPE) {
+ /* Should be empty string */
+ }
+ else if (entry->entry == LSM_RECORDING_ENTRY_SCAN_MODE) {
+ recording->scan_mode = g_convert(entry->data, entry->size,
+ "UTF-8", "ISO-8859-1",
+ NULL, NULL, NULL);
+ gwy_container_set_string_by_name(meta, "Scan mode",
+ recording->scan_mode);
+ }
+ else if (entry->entry == LSM_RECORDING_ENTRY_NUMBER_OF_STACKS) {
+ p = entry->data;
+ recording->number_of_stacks = gwy_get_guint32_le(&p);
+ gwy_container_set_string_by_name(meta, "Number of stacks",
+ g_strdup_printf("%d", recording->number_of_stacks));
+ }
+ else if (entry->entry == LSM_RECORDING_ENTRY_LINES_PER_PLANE) {
+ p = entry->data;
+ recording->lines_per_plane = gwy_get_guint32_le(&p);
+ gwy_container_set_string_by_name(meta, "Lines per plane",
+ g_strdup_printf("%d", recording->lines_per_plane));
+ }
+ else if (entry->entry == LSM_RECORDING_ENTRY_SAMPLES_PER_LINE) {
+ p = entry->data;
+ recording->samples_per_line = gwy_get_guint32_le(&p);
+ gwy_container_set_string_by_name(meta, "Samples per line",
+ g_strdup_printf("%d", recording->samples_per_line));
+ }
+ else if (entry->entry == LSM_RECORDING_ENTRY_PLANES_PER_VOLUME) {
+ p = entry->data;
+ recording->planes_per_volume = gwy_get_guint32_le(&p);
+ gwy_container_set_string_by_name(meta, "Planes per volume",
+ g_strdup_printf("%d", recording->planes_per_volume));
+ }
+ else if (entry->entry == LSM_RECORDING_ENTRY_IMAGES_WIDTH) {
+ p = entry->data;
+ recording->images_width = gwy_get_guint32_le(&p);
+ gwy_container_set_string_by_name(meta, "Images width",
+ g_strdup_printf("%d", recording->images_width));
+
+ }
+ else if (entry->entry == LSM_RECORDING_ENTRY_IMAGES_HEIGHT) {
+ p = entry->data;
+ recording->images_height = gwy_get_guint32_le(&p);
+ gwy_container_set_string_by_name(meta, "Images height",
+ g_strdup_printf("%d", recording->images_height));
+ }
+ else if (entry->entry == LSM_RECORDING_ENTRY_IMAGES_NUMBER_PLANES) {
+ p = entry->data;
+ recording->images_number_planes = gwy_get_guint32_le(&p);
+ gwy_container_set_string_by_name(meta,
+ "Images number of planes",
+ g_strdup_printf("%d",
+ recording->images_number_planes));
+ }
+ else if (entry->entry == LSM_RECORDING_ENTRY_IMAGES_NUMBER_STACKS) {
+ p = entry->data;
+ recording->images_number_stacks = gwy_get_guint32_le(&p);
+ gwy_container_set_string_by_name(meta,
+ "Images number of stacks",
+ g_strdup_printf("%d",
+ recording->images_number_stacks));
+ }
+ else if (entry->entry == LSM_RECORDING_ENTRY_IMAGES_NUMBER_CHANNELS) {
+ p = entry->data;
+ recording->images_number_channels = gwy_get_guint32_le(&p);
+ gwy_container_set_string_by_name(meta,
+ "Images number of channels",
+ g_strdup_printf("%d",
+ recording->images_number_channels));
+ }
+ else if (entry->entry == LSM_RECORDING_ENTRY_LINSCAN_XY_SIZE) {
+ p = entry->data;
+ recording->linscan_xy_size = gwy_get_guint32_le(&p);
+ gwy_container_set_string_by_name(meta, "Linescan XY size",
+ g_strdup_printf("%d", recording->linscan_xy_size));
+ }
+ else if (entry->entry == LSM_RECORDING_ENTRY_SCAN_DIRECTION) {
+ p = entry->data;
+ recording->scan_direction = gwy_get_guint32_le(&p);
+ gwy_container_set_string_by_name(meta, "Scan direction",
+ g_strdup_printf("%s", recording->scan_direction ?
+ "Bidirectional" : "Unidirectional"));
+ }
+ else if (entry->entry == LSM_RECORDING_ENTRY_TIME_SERIES) {
+ p = entry->data;
+ recording->time_series = gwy_get_guint32_le(&p);
+ gwy_container_set_string_by_name(meta, "Time series",
+ g_strdup_printf("%s", recording->time_series ?
+ "True" : "False"));
+ }
+ else if (entry->entry == LSM_RECORDING_ENTRY_ORIGINAL_SCAN_DATA) {
+ p = entry->data;
+ recording->original_scan_data = gwy_get_guint32_le(&p);
+ gwy_container_set_string_by_name(meta, "Original scan data",
+ g_strdup_printf("%s", recording->original_scan_data ?
+ "Original" : "Modified"));
+ }
+ else if (entry->entry == LSM_RECORDING_ENTRY_ZOOM_X) {
+ p = entry->data;
+ recording->zoomx = gwy_get_gdouble_le(&p);
+ gwy_container_set_string_by_name(meta, "X zoom",
+ g_strdup_printf("%g", recording->zoomx));
+ }
+ else if (entry->entry == LSM_RECORDING_ENTRY_ZOOM_Y) {
+ p = entry->data;
+ recording->zoomy = gwy_get_gdouble_le(&p);
+ gwy_container_set_string_by_name(meta, "Y zoom",
+ g_strdup_printf("%g", recording->zoomy));
+ }
+ else if (entry->entry == LSM_RECORDING_ENTRY_ZOOM_Z) {
+ p = entry->data;
+ recording->zoomz = gwy_get_gdouble_le(&p);
+ gwy_container_set_string_by_name(meta, "Z zoom",
+ g_strdup_printf("%g", recording->zoomz));
+ }
+ else if (entry->entry == LSM_RECORDING_ENTRY_SAMPLE_0X) {
+ p = entry->data;
+ recording->sample0x = gwy_get_gdouble_le(&p);
+ gwy_container_set_string_by_name(meta, "Sample 0 X",
+ g_strdup_printf("%g mkm", recording->sample0x));
+ }
+ else if (entry->entry == LSM_RECORDING_ENTRY_SAMPLE_0Y) {
+ p = entry->data;
+ recording->sample0y = gwy_get_gdouble_le(&p);
+ gwy_container_set_string_by_name(meta, "Sample 0 Y",
+ g_strdup_printf("%g mkm", recording->sample0y));
+ }
+ else if (entry->entry == LSM_RECORDING_ENTRY_SAMPLE_0Z) {
+ p = entry->data;
+ recording->sample0z = gwy_get_gdouble_le(&p);
+ gwy_container_set_string_by_name(meta, "Sample 0 Z",
+ g_strdup_printf("%g mkm", recording->sample0z));
+ }
+ else if (entry->entry == LSM_RECORDING_ENTRY_SAMPLE_SPACING) {
+ p = entry->data;
+ recording->sample_spacing = gwy_get_gdouble_le(&p);
+ gwy_container_set_string_by_name(meta, "Sample spacing",
+ g_strdup_printf("%g mkm", recording->sample_spacing));
+ }
+ else if (entry->entry == LSM_RECORDING_ENTRY_LINE_SPACING) {
+ p = entry->data;
+ recording->line_spacing = gwy_get_gdouble_le(&p);
+ gwy_container_set_string_by_name(meta, "Line spacing",
+ g_strdup_printf("%g mkm", recording->line_spacing));
+
+ }
+ else if (entry->entry == LSM_RECORDING_ENTRY_PLANE_SPACING) {
+ p = entry->data;
+ recording->plane_spacing = gwy_get_gdouble_le(&p);
+ gwy_container_set_string_by_name(meta, "Plane spacing",
+ g_strdup_printf("%g mkm", recording->plane_spacing));
+
+ }
+ else if (entry->entry == LSM_RECORDING_ENTRY_PLANE_WIDTH) {
+ p = entry->data;
+ recording->plane_width = gwy_get_gdouble_le(&p);
+ gwy_container_set_string_by_name(meta, "Plane width",
+ g_strdup_printf("%g mkm", recording->plane_width));
+ }
+ else if (entry->entry == LSM_RECORDING_ENTRY_PLANE_HEIGHT) {
+ p = entry->data;
+ recording->plane_height = gwy_get_gdouble_le(&p);
+ gwy_container_set_string_by_name(meta, "Plane height",
+ g_strdup_printf("%g mkm", recording->plane_height));
+
+ }
+ else if (entry->entry == LSM_RECORDING_ENTRY_VOLUME_DEPTH) {
+ p = entry->data;
+ recording->volume_depth = gwy_get_gdouble_le(&p);
+ gwy_container_set_string_by_name(meta, "Volume depth",
+ g_strdup_printf("%g mkm", recording->volume_depth));
+
+ }
+ else if (entry->entry == LSM_RECORDING_ENTRY_ROTATION) {
+ p = entry->data;
+ recording->rotation = gwy_get_gdouble_le(&p);
+ gwy_container_set_string_by_name(meta, "Rotation",
+ g_strdup_printf("%g degrees", recording->rotation));
+
+ }
+ else if (entry->entry == LSM_RECORDING_ENTRY_NUTATION) {
+ p = entry->data;
+ recording->nutation = gwy_get_gdouble_le(&p);
+ }
+ else if (entry->entry == LSM_RECORDING_ENTRY_PRECESSION) {
+ p = entry->data;
+ recording->precession = gwy_get_gdouble_le(&p);
+ }
+ else if (entry->entry == LSM_RECORDING_ENTRY_SAMPLE_0TIME) {
+ p = entry->data;
+ recording->sample0_time = gwy_get_gdouble_le(&p);
+ gwy_container_set_string_by_name(meta, "Sample 0 time",
+ g_strdup_printf("%g", recording->sample0_time));
+
+ }
+ else if (entry->entry == LSM_RECORDING_ENTRY_START_SCAN_TRIGGER_IN) {
+ recording->start_scan_trigger_in = g_convert(entry->data,
+ entry->size,
+ "UTF-8",
+ "ISO-8859-1",
+ NULL, NULL,
+ NULL);
+ gwy_container_set_string_by_name(meta, "Start scan trigger in",
+ recording->start_scan_trigger_in);
+ }
+ else if (entry->entry == LSM_RECORDING_ENTRY_START_SCAN_TRIGGER_OUT) {
+ recording->start_scan_trigger_out = g_convert(entry->data,
+ entry->size,
+ "UTF-8",
+ "ISO-8859-1",
+ NULL, NULL,
+ NULL);
+ gwy_container_set_string_by_name(meta, "Start scan trigger out",
+ recording->start_scan_trigger_out);
+ }
+ else if (entry->entry == LSM_RECORDING_ENTRY_START_SCAN_EVENT) {
+ p = entry->data;
+ recording->start_scan_event = gwy_get_guint32_le(&p);
+ gwy_container_set_string_by_name(meta, "Start scan event",
+ g_strdup_printf("%d", recording->start_scan_event));
+ }
+ else if (entry->entry == LSM_RECORDING_ENTRY_START_SCAN_TIME) {
+ p = entry->data;
+ recording->start_scan_time = gwy_get_gdouble_le(&p);
+ gwy_container_set_string_by_name(meta, "Start scan time",
+ g_strdup_printf("%g", recording->start_scan_time));
+ }
+ else if (entry->entry == LSM_RECORDING_ENTRY_STOP_SCAN_TRIGGER_IN) {
+ recording->stop_scan_trigger_in = g_convert(entry->data,
+ entry->size,
+ "UTF-8",
+ "ISO-8859-1",
+ NULL, NULL,
+ NULL);
+ gwy_container_set_string_by_name(meta, "Stop scan trigger in",
+ recording->stop_scan_trigger_in);
+ }
+ else if (entry->entry == LSM_RECORDING_ENTRY_STOP_SCAN_TRIGGER_OUT) {
+ recording->stop_scan_trigger_out = g_convert(entry->data,
+ entry->size,
+ "UTF-8",
+ "ISO-8859-1",
+ NULL, NULL,
+ NULL);
+ gwy_container_set_string_by_name(meta, "Stop scan trigger out",
+ recording->start_scan_trigger_out);
+ }
+ else if (entry->entry == LSM_RECORDING_ENTRY_STOP_SCAN_EVENT) {
+ p = entry->data;
+ recording->stop_scan_event = gwy_get_guint32_le(&p);
+ gwy_container_set_string_by_name(meta, "Stop scan event",
+ g_strdup_printf("%d", recording->stop_scan_event));
+ }
+ else if (entry->entry == LSM_RECORDING_ENTRY_STOP_SCAN_TIME) {
+ p = entry->data;
+ recording->stop_scan_time = gwy_get_gdouble_le(&p);
+ gwy_container_set_string_by_name(meta, "Stop scan time",
+ g_strdup_printf("%g", recording->stop_scan_time));
+ }
+ else if (entry->entry == LSM_RECORDING_ENTRY_USE_ROIS) {
+ p = entry->data;
+ recording->use_rois = gwy_get_guint32_le(&p);
+ }
+ else if (entry->entry == LSM_RECORDING_ENTRY_USE_REDUCED_MEMORY_ROIS) {
+ p = entry->data;
+ recording->use_reduced_memory_rois = gwy_get_guint32_le(&p);
+ }
+ else if (entry->entry == LSM_LASER_ENTRY_NAME) {
+ recording->laser_name = g_convert(entry->data, entry->size,
+ "UTF-8", "ISO-8859-1",
+ NULL, NULL, NULL);
+ gwy_container_set_string_by_name(meta, "Laser name",
+ recording->laser_name);
+ }
+ else if (entry->entry == LSM_LASER_ENTRY_ACQUIRE) {
+ p = entry->data;
+ recording->laser_acquire = gwy_get_guint32_le(&p);
+ gwy_container_set_string_by_name(meta, "Laser acquire",
+ g_strdup_printf("%s", recording->laser_acquire ?
+ "Enabled" : "Disabled"));
+ }
+ else if (entry->entry == LSM_LASER_ENTRY_POWER) {
+ p = entry->data;
+ recording->laser_power = gwy_get_gdouble_le(&p);
+ gwy_container_set_string_by_name(meta, "Laser power",
+ g_strdup_printf("%g mW", recording->laser_power));
+ }
+
+ offset += 12 + entry->size;
+ }
+
+
+ if (entry) {
+ g_free(entry);
+ }
+
+ return recording;
+}
+
+static LSMEntry*
+lsm_read_entry (const GwyTIFF *tiff,
+ guint32 offset,
+ G_GNUC_UNUSED GError **error)
+{
+ LSMEntry *entry;
+ const guchar *p;
+
+ entry = g_new0(LSMEntry, 1);
+ p = tiff->data + offset;
+ entry->entry = gwy_get_guint32_le(&p);
+ entry->type = gwy_get_guint32_le(&p);
+ entry->size = gwy_get_guint32_le(&p);
+ entry->data = (gpointer)p;
+
+ return entry;
+}
+
+/* vim: set cin et ts=4 sw=4 cino=>1s,e0,n0,f0,{0,}0,^0,\:1s,=0,g1s,h0,t0,+1s,c3,(0,u0 : */
diff --git a/modules/file/zemax.c b/modules/file/zemax.c
index a5e6f8c..51cbadb 100644
--- a/modules/file/zemax.c
+++ b/modules/file/zemax.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: zemax.c 19044 2016-10-08 19:10:46Z yeti-dn $
+ * @(#) $Id: zemax.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2013 David Necas (Yeti).
* E-mail: yeti at gwyddion.net
*
@@ -76,7 +76,7 @@ static GwyModuleInfo module_info = {
"2013",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, zemax)
static gboolean
module_register(void)
diff --git a/modules/graph/Makefile.am b/modules/graph/Makefile.am
index 794a6d1..99fb769 100644
--- a/modules/graph/Makefile.am
+++ b/modules/graph/Makefile.am
@@ -1,8 +1,11 @@
-# @(#) $Id: Makefile.am 19205 2016-11-08 10:24:40Z yeti-dn $
+# @(#) $Id: Makefile.am 20001 2017-06-29 21:52:24Z yeti-dn $
graphdir = $(pkglibdir)/modules/graph
-graph_LTLIBRARIES = \
+# Only bundle modules without own dependencies. If something goes wrong with
+# any required libraries at run-time, it will at most break these individual
+# unbundled modules, not the bundle.
+bundlable_modules = \
graph_align.la \
graph_cd.la \
graph_cut.la \
@@ -15,16 +18,25 @@ graph_LTLIBRARIES = \
graph_fit.la \
graph_level.la \
graph_logscale.la \
- graph_peaks.la
+ graph_peaks.la \
+ graph_stats.la
+
+# graph_modules is either the bundle or all the individual modules.
+if MODULE_BUNDLING
+graph_modules = graph.la
+BUILT_SOURCES = graph.c
+graph_la_CFLAGS = $(AM_CFLAGS) -DGWY_MODULE_BUNDLING
+else
+graph_modules = $(bundlable_modules)
+endif
+
+graph_LTLIBRARIES = \
+ $(graph_modules)
if OS_MSWIN
no_undefined = -no-undefined
endif
-AM_CPPFLAGS = -I$(top_srcdir) -DG_LOG_DOMAIN=\"Module\"
-AM_CFLAGS = @COMMON_CFLAGS@
-AM_LDFLAGS = -avoid-version -module $(no_undefined) $(module_libadd)
-
if MODULE_DEPENDENCIES
module_libadd = \
$(top_builddir)/app/libgwyapp2.la \
@@ -36,6 +48,11 @@ module_libadd = \
@GTK_LIBS@
endif
+AM_CPPFLAGS = -I$(top_srcdir) -DG_LOG_DOMAIN=\"Module\"
+AM_CFLAGS = @COMMON_CFLAGS@
+AM_LDFLAGS = -avoid-version -module $(no_undefined) $(module_libadd)
+
+# Bundlable modules, must be listed in tools_la_SOURCES below.
graph_align_la_SOURCES = graph_align.c
graph_cd_la_SOURCES = graph_cd.c
graph_cut_la_SOURCES = graph_cut.c
@@ -49,6 +66,29 @@ graph_fit_la_SOURCES = graph_fit.c
graph_level_la_SOURCES = graph_level.c
graph_logscale_la_SOURCES = graph_logscale.c
graph_peaks_la_SOURCES = graph_peaks.c
+graph_stats_la_SOURCES = graph_stats.c
+
+graph_la_SOURCES = \
+ $(graph_align_la_SOURCES) \
+ $(graph_cd_la_SOURCES) \
+ $(graph_cut_la_SOURCES) \
+ $(graph_dos_spectrum_la_SOURCES) \
+ $(graph_export_ascii_la_SOURCES) \
+ $(graph_export_bitmap_la_SOURCES) \
+ $(graph_export_vector_la_SOURCES) \
+ $(graph_fdfit_la_SOURCES) \
+ $(graph_filter_la_SOURCES) \
+ $(graph_fit_la_SOURCES) \
+ $(graph_level_la_SOURCES) \
+ $(graph_logscale_la_SOURCES) \
+ $(graph_peaks_la_SOURCES) \
+ $(graph_stats_la_SOURCES) \
+ graph.c
+
+graph.c: $(srcdir)/Makefile.am $(top_srcdir)/utils/gen-module-bundle.sh
+ $(SHELL) $(top_srcdir)/utils/gen-module-bundle.sh graph.c $(bundlable_modules)
+
+CLEAN_FILES = graph.c
clean-local:
rm -f core.* *~
diff --git a/modules/graph/Makefile.in b/modules/graph/Makefile.in
index e0f2632..645cc43 100644
--- a/modules/graph/Makefile.in
+++ b/modules/graph/Makefile.in
@@ -14,7 +14,7 @@
@SET_MAKE@
-# @(#) $Id: Makefile.am 19205 2016-11-08 10:24:40Z yeti-dn $
+# @(#) $Id: Makefile.am 20001 2017-06-29 21:52:24Z yeti-dn $
VPATH = @srcdir@
am__is_gnu_make = { \
@@ -138,49 +138,96 @@ am__uninstall_files_from_dir = { \
}
am__installdirs = "$(DESTDIR)$(graphdir)"
LTLIBRARIES = $(graph_LTLIBRARIES)
-graph_align_la_LIBADD =
-am_graph_align_la_OBJECTS = graph_align.lo
-graph_align_la_OBJECTS = $(am_graph_align_la_OBJECTS)
+graph_la_LIBADD =
+am__objects_1 = graph_la-graph_align.lo
+am__objects_2 = graph_la-graph_cd.lo
+am__objects_3 = graph_la-graph_cut.lo
+am__objects_4 = graph_la-graph_dos_spectrum.lo
+am__objects_5 = graph_la-graph_export_ascii.lo
+am__objects_6 = graph_la-graph_export_bitmap.lo
+am__objects_7 = graph_la-graph_export_vector.lo
+am__objects_8 = graph_la-graph_fdfit.lo
+am__objects_9 = graph_la-graph_filter.lo
+am__objects_10 = graph_la-graph_fit.lo
+am__objects_11 = graph_la-graph_level.lo
+am__objects_12 = graph_la-graph_logscale.lo
+am__objects_13 = graph_la-graph_peaks.lo
+am__objects_14 = graph_la-graph_stats.lo
+am_graph_la_OBJECTS = $(am__objects_1) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4) $(am__objects_5) \
+ $(am__objects_6) $(am__objects_7) $(am__objects_8) \
+ $(am__objects_9) $(am__objects_10) $(am__objects_11) \
+ $(am__objects_12) $(am__objects_13) $(am__objects_14) \
+ graph_la-graph.lo
+graph_la_OBJECTS = $(am_graph_la_OBJECTS)
AM_V_lt = $(am__v_lt_ at AM_V@)
am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
am__v_lt_0 = --silent
am__v_lt_1 =
+graph_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(graph_la_CFLAGS) \
+ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+ at MODULE_BUNDLING_TRUE@am_graph_la_rpath = -rpath $(graphdir)
+graph_align_la_LIBADD =
+am_graph_align_la_OBJECTS = graph_align.lo
+graph_align_la_OBJECTS = $(am_graph_align_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_graph_align_la_rpath = -rpath $(graphdir)
graph_cd_la_LIBADD =
am_graph_cd_la_OBJECTS = graph_cd.lo
graph_cd_la_OBJECTS = $(am_graph_cd_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_graph_cd_la_rpath = -rpath $(graphdir)
graph_cut_la_LIBADD =
am_graph_cut_la_OBJECTS = graph_cut.lo
graph_cut_la_OBJECTS = $(am_graph_cut_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_graph_cut_la_rpath = -rpath $(graphdir)
graph_dos_spectrum_la_LIBADD =
am_graph_dos_spectrum_la_OBJECTS = graph_dos_spectrum.lo
graph_dos_spectrum_la_OBJECTS = $(am_graph_dos_spectrum_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_graph_dos_spectrum_la_rpath = -rpath \
+ at MODULE_BUNDLING_FALSE@ $(graphdir)
graph_export_ascii_la_LIBADD =
am_graph_export_ascii_la_OBJECTS = graph_export_ascii.lo
graph_export_ascii_la_OBJECTS = $(am_graph_export_ascii_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_graph_export_ascii_la_rpath = -rpath \
+ at MODULE_BUNDLING_FALSE@ $(graphdir)
graph_export_bitmap_la_LIBADD =
am_graph_export_bitmap_la_OBJECTS = graph_export_bitmap.lo
graph_export_bitmap_la_OBJECTS = $(am_graph_export_bitmap_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_graph_export_bitmap_la_rpath = -rpath \
+ at MODULE_BUNDLING_FALSE@ $(graphdir)
graph_export_vector_la_LIBADD =
am_graph_export_vector_la_OBJECTS = graph_export_vector.lo
graph_export_vector_la_OBJECTS = $(am_graph_export_vector_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_graph_export_vector_la_rpath = -rpath \
+ at MODULE_BUNDLING_FALSE@ $(graphdir)
graph_fdfit_la_LIBADD =
am_graph_fdfit_la_OBJECTS = graph_fdfit.lo
graph_fdfit_la_OBJECTS = $(am_graph_fdfit_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_graph_fdfit_la_rpath = -rpath $(graphdir)
graph_filter_la_LIBADD =
am_graph_filter_la_OBJECTS = graph_filter.lo
graph_filter_la_OBJECTS = $(am_graph_filter_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_graph_filter_la_rpath = -rpath $(graphdir)
graph_fit_la_LIBADD =
am_graph_fit_la_OBJECTS = graph_fit.lo
graph_fit_la_OBJECTS = $(am_graph_fit_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_graph_fit_la_rpath = -rpath $(graphdir)
graph_level_la_LIBADD =
am_graph_level_la_OBJECTS = graph_level.lo
graph_level_la_OBJECTS = $(am_graph_level_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_graph_level_la_rpath = -rpath $(graphdir)
graph_logscale_la_LIBADD =
am_graph_logscale_la_OBJECTS = graph_logscale.lo
graph_logscale_la_OBJECTS = $(am_graph_logscale_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_graph_logscale_la_rpath = -rpath $(graphdir)
graph_peaks_la_LIBADD =
am_graph_peaks_la_OBJECTS = graph_peaks.lo
graph_peaks_la_OBJECTS = $(am_graph_peaks_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_graph_peaks_la_rpath = -rpath $(graphdir)
+graph_stats_la_LIBADD =
+am_graph_stats_la_OBJECTS = graph_stats.lo
+graph_stats_la_OBJECTS = $(am_graph_stats_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_graph_stats_la_rpath = -rpath $(graphdir)
AM_V_P = $(am__v_P_ at AM_V@)
am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
am__v_P_0 = false
@@ -215,22 +262,24 @@ AM_V_CCLD = $(am__v_CCLD_ at AM_V@)
am__v_CCLD_ = $(am__v_CCLD_ at AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
-SOURCES = $(graph_align_la_SOURCES) $(graph_cd_la_SOURCES) \
- $(graph_cut_la_SOURCES) $(graph_dos_spectrum_la_SOURCES) \
+SOURCES = $(graph_la_SOURCES) $(graph_align_la_SOURCES) \
+ $(graph_cd_la_SOURCES) $(graph_cut_la_SOURCES) \
+ $(graph_dos_spectrum_la_SOURCES) \
$(graph_export_ascii_la_SOURCES) \
$(graph_export_bitmap_la_SOURCES) \
$(graph_export_vector_la_SOURCES) $(graph_fdfit_la_SOURCES) \
$(graph_filter_la_SOURCES) $(graph_fit_la_SOURCES) \
$(graph_level_la_SOURCES) $(graph_logscale_la_SOURCES) \
- $(graph_peaks_la_SOURCES)
-DIST_SOURCES = $(graph_align_la_SOURCES) $(graph_cd_la_SOURCES) \
- $(graph_cut_la_SOURCES) $(graph_dos_spectrum_la_SOURCES) \
+ $(graph_peaks_la_SOURCES) $(graph_stats_la_SOURCES)
+DIST_SOURCES = $(graph_la_SOURCES) $(graph_align_la_SOURCES) \
+ $(graph_cd_la_SOURCES) $(graph_cut_la_SOURCES) \
+ $(graph_dos_spectrum_la_SOURCES) \
$(graph_export_ascii_la_SOURCES) \
$(graph_export_bitmap_la_SOURCES) \
$(graph_export_vector_la_SOURCES) $(graph_fdfit_la_SOURCES) \
$(graph_filter_la_SOURCES) $(graph_fit_la_SOURCES) \
$(graph_level_la_SOURCES) $(graph_logscale_la_SOURCES) \
- $(graph_peaks_la_SOURCES)
+ $(graph_peaks_la_SOURCES) $(graph_stats_la_SOURCES)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
@@ -296,10 +345,7 @@ EPYDOC = @EPYDOC@
EXEEXT = @EXEEXT@
EXR_CFLAGS = @EXR_CFLAGS@
EXR_LIBS = @EXR_LIBS@
-FFTW3_1_CFLAGS = @FFTW3_1_CFLAGS@
-FFTW3_1_LIBS = @FFTW3_1_LIBS@
FFTW3_CFLAGS = @FFTW3_CFLAGS@
-FFTW3_DEPENDENCY = @FFTW3_DEPENDENCY@
FFTW3_LIBS = @FFTW3_LIBS@
FGREP = @FGREP@
GCONFTOOL = @GCONFTOOL@
@@ -309,6 +355,8 @@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
GLIBC21 = @GLIBC21@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GMODULE_CFLAGS = @GMODULE_CFLAGS@
GMODULE_LIBS = @GMODULE_LIBS@
GMSGFMT = @GMSGFMT@
@@ -333,7 +381,9 @@ GTK_MAC_LIBS = @GTK_MAC_LIBS@
GWY_VERSION_MAJOR = @GWY_VERSION_MAJOR@
GWY_VERSION_MINOR = @GWY_VERSION_MINOR@
GWY_VERSION_STRING = @GWY_VERSION_STRING@
+HDRIMAGE_EXTRA_CFLAGS = @HDRIMAGE_EXTRA_CFLAGS@
HTML_DIR = @HTML_DIR@
+INKSCAPE = @INKSCAPE@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -391,6 +441,7 @@ PASCAL = @PASCAL@
PATH_SEPARATOR = @PATH_SEPARATOR@
PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
+PNGCRUSH = @PNGCRUSH@
PNG_CFLAGS = @PNG_CFLAGS@
PNG_LIBS = @PNG_LIBS@
POD2MAN = @POD2MAN@
@@ -399,17 +450,13 @@ PYGTK_CFLAGS = @PYGTK_CFLAGS@
PYGTK_CODEGENDIR = @PYGTK_CODEGENDIR@
PYGTK_LIBS = @PYGTK_LIBS@
PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
PYTHON_EXTRA_CFLAGS = @PYTHON_EXTRA_CFLAGS@
PYTHON_INCLUDES = @PYTHON_INCLUDES@
-PYTHON_LIBS = @PYTHON_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
PYTHON_PLATFORM = @PYTHON_PLATFORM@
PYTHON_PREFIX = @PYTHON_PREFIX@
-PYTHON_SYSCFG_BASECFLAGS = @PYTHON_SYSCFG_BASECFLAGS@
-PYTHON_SYSCFG_CCSHARED = @PYTHON_SYSCFG_CCSHARED@
-PYTHON_SYSCFG_LDFLAGS = @PYTHON_SYSCFG_LDFLAGS@
-PYTHON_SYSCFG_LIBDIR = @PYTHON_SYSCFG_LIBDIR@
-PYTHON_SYSCFG_LINKFORSHARED = @PYTHON_SYSCFG_LINKFORSHARED@
PYTHON_VERSION = @PYTHON_VERSION@
RANLIB = @RANLIB@
RUBY = @RUBY@
@@ -495,7 +542,11 @@ top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
graphdir = $(pkglibdir)/modules/graph
-graph_LTLIBRARIES = \
+
+# Only bundle modules without own dependencies. If something goes wrong with
+# any required libraries at run-time, it will at most break these individual
+# unbundled modules, not the bundle.
+bundlable_modules = \
graph_align.la \
graph_cd.la \
graph_cut.la \
@@ -508,12 +559,19 @@ graph_LTLIBRARIES = \
graph_fit.la \
graph_level.la \
graph_logscale.la \
- graph_peaks.la
+ graph_peaks.la \
+ graph_stats.la
+
+ at MODULE_BUNDLING_FALSE@graph_modules = $(bundlable_modules)
+
+# graph_modules is either the bundle or all the individual modules.
+ at MODULE_BUNDLING_TRUE@graph_modules = graph.la
+ at MODULE_BUNDLING_TRUE@BUILT_SOURCES = graph.c
+ at MODULE_BUNDLING_TRUE@graph_la_CFLAGS = $(AM_CFLAGS) -DGWY_MODULE_BUNDLING
+graph_LTLIBRARIES = \
+ $(graph_modules)
@OS_MSWIN_TRUE at no_undefined = -no-undefined
-AM_CPPFLAGS = -I$(top_srcdir) -DG_LOG_DOMAIN=\"Module\"
-AM_CFLAGS = @COMMON_CFLAGS@
-AM_LDFLAGS = -avoid-version -module $(no_undefined) $(module_libadd)
@MODULE_DEPENDENCIES_TRUE at module_libadd = \
@MODULE_DEPENDENCIES_TRUE@ $(top_builddir)/app/libgwyapp2.la \
@MODULE_DEPENDENCIES_TRUE@ $(top_builddir)/libdraw/libgwydraw2.la \
@@ -523,6 +581,11 @@ AM_LDFLAGS = -avoid-version -module $(no_undefined) $(module_libadd)
@MODULE_DEPENDENCIES_TRUE@ $(top_builddir)/libprocess/libgwyprocess2.la \
@MODULE_DEPENDENCIES_TRUE@ @GTK_LIBS@
+AM_CPPFLAGS = -I$(top_srcdir) -DG_LOG_DOMAIN=\"Module\"
+AM_CFLAGS = @COMMON_CFLAGS@
+AM_LDFLAGS = -avoid-version -module $(no_undefined) $(module_libadd)
+
+# Bundlable modules, must be listed in tools_la_SOURCES below.
graph_align_la_SOURCES = graph_align.c
graph_cd_la_SOURCES = graph_cd.c
graph_cut_la_SOURCES = graph_cut.c
@@ -536,7 +599,27 @@ graph_fit_la_SOURCES = graph_fit.c
graph_level_la_SOURCES = graph_level.c
graph_logscale_la_SOURCES = graph_logscale.c
graph_peaks_la_SOURCES = graph_peaks.c
-all: all-am
+graph_stats_la_SOURCES = graph_stats.c
+graph_la_SOURCES = \
+ $(graph_align_la_SOURCES) \
+ $(graph_cd_la_SOURCES) \
+ $(graph_cut_la_SOURCES) \
+ $(graph_dos_spectrum_la_SOURCES) \
+ $(graph_export_ascii_la_SOURCES) \
+ $(graph_export_bitmap_la_SOURCES) \
+ $(graph_export_vector_la_SOURCES) \
+ $(graph_fdfit_la_SOURCES) \
+ $(graph_filter_la_SOURCES) \
+ $(graph_fit_la_SOURCES) \
+ $(graph_level_la_SOURCES) \
+ $(graph_logscale_la_SOURCES) \
+ $(graph_peaks_la_SOURCES) \
+ $(graph_stats_la_SOURCES) \
+ graph.c
+
+CLEAN_FILES = graph.c
+all: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) all-am
.SUFFIXES:
.SUFFIXES: .c .lo .o .obj
@@ -605,44 +688,50 @@ clean-graphLTLIBRARIES:
rm -f $${locs}; \
}
+graph.la: $(graph_la_OBJECTS) $(graph_la_DEPENDENCIES) $(EXTRA_graph_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(graph_la_LINK) $(am_graph_la_rpath) $(graph_la_OBJECTS) $(graph_la_LIBADD) $(LIBS)
+
graph_align.la: $(graph_align_la_OBJECTS) $(graph_align_la_DEPENDENCIES) $(EXTRA_graph_align_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(graphdir) $(graph_align_la_OBJECTS) $(graph_align_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_graph_align_la_rpath) $(graph_align_la_OBJECTS) $(graph_align_la_LIBADD) $(LIBS)
graph_cd.la: $(graph_cd_la_OBJECTS) $(graph_cd_la_DEPENDENCIES) $(EXTRA_graph_cd_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(graphdir) $(graph_cd_la_OBJECTS) $(graph_cd_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_graph_cd_la_rpath) $(graph_cd_la_OBJECTS) $(graph_cd_la_LIBADD) $(LIBS)
graph_cut.la: $(graph_cut_la_OBJECTS) $(graph_cut_la_DEPENDENCIES) $(EXTRA_graph_cut_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(graphdir) $(graph_cut_la_OBJECTS) $(graph_cut_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_graph_cut_la_rpath) $(graph_cut_la_OBJECTS) $(graph_cut_la_LIBADD) $(LIBS)
graph_dos_spectrum.la: $(graph_dos_spectrum_la_OBJECTS) $(graph_dos_spectrum_la_DEPENDENCIES) $(EXTRA_graph_dos_spectrum_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(graphdir) $(graph_dos_spectrum_la_OBJECTS) $(graph_dos_spectrum_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_graph_dos_spectrum_la_rpath) $(graph_dos_spectrum_la_OBJECTS) $(graph_dos_spectrum_la_LIBADD) $(LIBS)
graph_export_ascii.la: $(graph_export_ascii_la_OBJECTS) $(graph_export_ascii_la_DEPENDENCIES) $(EXTRA_graph_export_ascii_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(graphdir) $(graph_export_ascii_la_OBJECTS) $(graph_export_ascii_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_graph_export_ascii_la_rpath) $(graph_export_ascii_la_OBJECTS) $(graph_export_ascii_la_LIBADD) $(LIBS)
graph_export_bitmap.la: $(graph_export_bitmap_la_OBJECTS) $(graph_export_bitmap_la_DEPENDENCIES) $(EXTRA_graph_export_bitmap_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(graphdir) $(graph_export_bitmap_la_OBJECTS) $(graph_export_bitmap_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_graph_export_bitmap_la_rpath) $(graph_export_bitmap_la_OBJECTS) $(graph_export_bitmap_la_LIBADD) $(LIBS)
graph_export_vector.la: $(graph_export_vector_la_OBJECTS) $(graph_export_vector_la_DEPENDENCIES) $(EXTRA_graph_export_vector_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(graphdir) $(graph_export_vector_la_OBJECTS) $(graph_export_vector_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_graph_export_vector_la_rpath) $(graph_export_vector_la_OBJECTS) $(graph_export_vector_la_LIBADD) $(LIBS)
graph_fdfit.la: $(graph_fdfit_la_OBJECTS) $(graph_fdfit_la_DEPENDENCIES) $(EXTRA_graph_fdfit_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(graphdir) $(graph_fdfit_la_OBJECTS) $(graph_fdfit_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_graph_fdfit_la_rpath) $(graph_fdfit_la_OBJECTS) $(graph_fdfit_la_LIBADD) $(LIBS)
graph_filter.la: $(graph_filter_la_OBJECTS) $(graph_filter_la_DEPENDENCIES) $(EXTRA_graph_filter_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(graphdir) $(graph_filter_la_OBJECTS) $(graph_filter_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_graph_filter_la_rpath) $(graph_filter_la_OBJECTS) $(graph_filter_la_LIBADD) $(LIBS)
graph_fit.la: $(graph_fit_la_OBJECTS) $(graph_fit_la_DEPENDENCIES) $(EXTRA_graph_fit_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(graphdir) $(graph_fit_la_OBJECTS) $(graph_fit_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_graph_fit_la_rpath) $(graph_fit_la_OBJECTS) $(graph_fit_la_LIBADD) $(LIBS)
graph_level.la: $(graph_level_la_OBJECTS) $(graph_level_la_DEPENDENCIES) $(EXTRA_graph_level_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(graphdir) $(graph_level_la_OBJECTS) $(graph_level_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_graph_level_la_rpath) $(graph_level_la_OBJECTS) $(graph_level_la_LIBADD) $(LIBS)
graph_logscale.la: $(graph_logscale_la_OBJECTS) $(graph_logscale_la_DEPENDENCIES) $(EXTRA_graph_logscale_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(graphdir) $(graph_logscale_la_OBJECTS) $(graph_logscale_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_graph_logscale_la_rpath) $(graph_logscale_la_OBJECTS) $(graph_logscale_la_LIBADD) $(LIBS)
graph_peaks.la: $(graph_peaks_la_OBJECTS) $(graph_peaks_la_DEPENDENCIES) $(EXTRA_graph_peaks_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(graphdir) $(graph_peaks_la_OBJECTS) $(graph_peaks_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_graph_peaks_la_rpath) $(graph_peaks_la_OBJECTS) $(graph_peaks_la_LIBADD) $(LIBS)
+
+graph_stats.la: $(graph_stats_la_OBJECTS) $(graph_stats_la_DEPENDENCIES) $(EXTRA_graph_stats_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(LINK) $(am_graph_stats_la_rpath) $(graph_stats_la_OBJECTS) $(graph_stats_la_LIBADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@@ -660,9 +749,25 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/graph_fdfit.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/graph_filter.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/graph_fit.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/graph_la-graph.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/graph_la-graph_align.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/graph_la-graph_cd.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/graph_la-graph_cut.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/graph_la-graph_dos_spectrum.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/graph_la-graph_export_ascii.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/graph_la-graph_export_bitmap.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/graph_la-graph_export_vector.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/graph_la-graph_fdfit.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/graph_la-graph_filter.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/graph_la-graph_fit.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/graph_la-graph_level.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/graph_la-graph_logscale.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/graph_la-graph_peaks.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/graph_la-graph_stats.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/graph_level.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/graph_logscale.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/graph_peaks.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/graph_stats.Plo at am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@@ -685,6 +790,111 @@ distclean-compile:
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LTCOMPILE) -c -o $@ $<
+graph_la-graph_align.lo: graph_align.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(graph_la_CFLAGS) $(CFLAGS) -MT graph_la-graph_align.lo -MD -MP -MF $(DEPDIR)/graph_la-graph_align.Tpo -c -o graph_la-graph_align.lo `test -f 'graph_align.c' || echo '$(srcdir)/'`graph_align.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/graph_la-graph_align.Tpo $(DEPDIR)/graph_la-graph_align.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='graph_align.c' object='graph_la-graph_align.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(graph_la_CFLAGS) $(CFLAGS) -c -o graph_la-graph_align.lo `test -f 'graph_align.c' || echo '$(srcdir)/'`graph_align.c
+
+graph_la-graph_cd.lo: graph_cd.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(graph_la_CFLAGS) $(CFLAGS) -MT graph_la-graph_cd.lo -MD -MP -MF $(DEPDIR)/graph_la-graph_cd.Tpo -c -o graph_la-graph_cd.lo `test -f 'graph_cd.c' || echo '$(srcdir)/'`graph_cd.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/graph_la-graph_cd.Tpo $(DEPDIR)/graph_la-graph_cd.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='graph_cd.c' object='graph_la-graph_cd.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(graph_la_CFLAGS) $(CFLAGS) -c -o graph_la-graph_cd.lo `test -f 'graph_cd.c' || echo '$(srcdir)/'`graph_cd.c
+
+graph_la-graph_cut.lo: graph_cut.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(graph_la_CFLAGS) $(CFLAGS) -MT graph_la-graph_cut.lo -MD -MP -MF $(DEPDIR)/graph_la-graph_cut.Tpo -c -o graph_la-graph_cut.lo `test -f 'graph_cut.c' || echo '$(srcdir)/'`graph_cut.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/graph_la-graph_cut.Tpo $(DEPDIR)/graph_la-graph_cut.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='graph_cut.c' object='graph_la-graph_cut.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(graph_la_CFLAGS) $(CFLAGS) -c -o graph_la-graph_cut.lo `test -f 'graph_cut.c' || echo '$(srcdir)/'`graph_cut.c
+
+graph_la-graph_dos_spectrum.lo: graph_dos_spectrum.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(graph_la_CFLAGS) $(CFLAGS) -MT graph_la-graph_dos_spectrum.lo -MD -MP -MF $(DEPDIR)/graph_la-graph_dos_spectrum.Tpo -c -o graph_la-graph_dos_spectrum.lo `test -f 'graph_dos_spectrum.c' || echo '$(srcdir)/'`graph_dos_spectrum.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/graph_la-graph_dos_spectrum.Tpo $(DEPDIR)/graph_la-graph_dos_spectrum.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='graph_dos_spectrum.c' object='graph_la-graph_dos_spectrum.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(graph_la_CFLAGS) $(CFLAGS) -c -o graph_la-graph_dos_spectrum.lo `test -f 'graph_dos_spectrum.c' || echo '$(srcdir)/'`graph_dos_spectrum.c
+
+graph_la-graph_export_ascii.lo: graph_export_ascii.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(graph_la_CFLAGS) $(CFLAGS) -MT graph_la-graph_export_ascii.lo -MD -MP -MF $(DEPDIR)/graph_la-graph_export_ascii.Tpo -c -o graph_la-graph_export_ascii.lo `test -f 'graph_export_ascii.c' || echo '$(srcdir)/'`graph_export_ascii.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/graph_la-graph_export_ascii.Tpo $(DEPDIR)/graph_la-graph_export_ascii.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='graph_export_ascii.c' object='graph_la-graph_export_ascii.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(graph_la_CFLAGS) $(CFLAGS) -c -o graph_la-graph_export_ascii.lo `test -f 'graph_export_ascii.c' || echo '$(srcdir)/'`graph_export_ascii.c
+
+graph_la-graph_export_bitmap.lo: graph_export_bitmap.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(graph_la_CFLAGS) $(CFLAGS) -MT graph_la-graph_export_bitmap.lo -MD -MP -MF $(DEPDIR)/graph_la-graph_export_bitmap.Tpo -c -o graph_la-graph_export_bitmap.lo `test -f 'graph_export_bitmap.c' || echo '$(srcdir)/'`graph_export_bitmap.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/graph_la-graph_export_bitmap.Tpo $(DEPDIR)/graph_la-graph_export_bitmap.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='graph_export_bitmap.c' object='graph_la-graph_export_bitmap.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(graph_la_CFLAGS) $(CFLAGS) -c -o graph_la-graph_export_bitmap.lo `test -f 'graph_export_bitmap.c' || echo '$(srcdir)/'`graph_export_bitmap.c
+
+graph_la-graph_export_vector.lo: graph_export_vector.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(graph_la_CFLAGS) $(CFLAGS) -MT graph_la-graph_export_vector.lo -MD -MP -MF $(DEPDIR)/graph_la-graph_export_vector.Tpo -c -o graph_la-graph_export_vector.lo `test -f 'graph_export_vector.c' || echo '$(srcdir)/'`graph_export_vector.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/graph_la-graph_export_vector.Tpo $(DEPDIR)/graph_la-graph_export_vector.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='graph_export_vector.c' object='graph_la-graph_export_vector.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(graph_la_CFLAGS) $(CFLAGS) -c -o graph_la-graph_export_vector.lo `test -f 'graph_export_vector.c' || echo '$(srcdir)/'`graph_export_vector.c
+
+graph_la-graph_fdfit.lo: graph_fdfit.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(graph_la_CFLAGS) $(CFLAGS) -MT graph_la-graph_fdfit.lo -MD -MP -MF $(DEPDIR)/graph_la-graph_fdfit.Tpo -c -o graph_la-graph_fdfit.lo `test -f 'graph_fdfit.c' || echo '$(srcdir)/'`graph_fdfit.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/graph_la-graph_fdfit.Tpo $(DEPDIR)/graph_la-graph_fdfit.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='graph_fdfit.c' object='graph_la-graph_fdfit.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(graph_la_CFLAGS) $(CFLAGS) -c -o graph_la-graph_fdfit.lo `test -f 'graph_fdfit.c' || echo '$(srcdir)/'`graph_fdfit.c
+
+graph_la-graph_filter.lo: graph_filter.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(graph_la_CFLAGS) $(CFLAGS) -MT graph_la-graph_filter.lo -MD -MP -MF $(DEPDIR)/graph_la-graph_filter.Tpo -c -o graph_la-graph_filter.lo `test -f 'graph_filter.c' || echo '$(srcdir)/'`graph_filter.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/graph_la-graph_filter.Tpo $(DEPDIR)/graph_la-graph_filter.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='graph_filter.c' object='graph_la-graph_filter.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(graph_la_CFLAGS) $(CFLAGS) -c -o graph_la-graph_filter.lo `test -f 'graph_filter.c' || echo '$(srcdir)/'`graph_filter.c
+
+graph_la-graph_fit.lo: graph_fit.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(graph_la_CFLAGS) $(CFLAGS) -MT graph_la-graph_fit.lo -MD -MP -MF $(DEPDIR)/graph_la-graph_fit.Tpo -c -o graph_la-graph_fit.lo `test -f 'graph_fit.c' || echo '$(srcdir)/'`graph_fit.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/graph_la-graph_fit.Tpo $(DEPDIR)/graph_la-graph_fit.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='graph_fit.c' object='graph_la-graph_fit.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(graph_la_CFLAGS) $(CFLAGS) -c -o graph_la-graph_fit.lo `test -f 'graph_fit.c' || echo '$(srcdir)/'`graph_fit.c
+
+graph_la-graph_level.lo: graph_level.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(graph_la_CFLAGS) $(CFLAGS) -MT graph_la-graph_level.lo -MD -MP -MF $(DEPDIR)/graph_la-graph_level.Tpo -c -o graph_la-graph_level.lo `test -f 'graph_level.c' || echo '$(srcdir)/'`graph_level.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/graph_la-graph_level.Tpo $(DEPDIR)/graph_la-graph_level.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='graph_level.c' object='graph_la-graph_level.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(graph_la_CFLAGS) $(CFLAGS) -c -o graph_la-graph_level.lo `test -f 'graph_level.c' || echo '$(srcdir)/'`graph_level.c
+
+graph_la-graph_logscale.lo: graph_logscale.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(graph_la_CFLAGS) $(CFLAGS) -MT graph_la-graph_logscale.lo -MD -MP -MF $(DEPDIR)/graph_la-graph_logscale.Tpo -c -o graph_la-graph_logscale.lo `test -f 'graph_logscale.c' || echo '$(srcdir)/'`graph_logscale.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/graph_la-graph_logscale.Tpo $(DEPDIR)/graph_la-graph_logscale.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='graph_logscale.c' object='graph_la-graph_logscale.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(graph_la_CFLAGS) $(CFLAGS) -c -o graph_la-graph_logscale.lo `test -f 'graph_logscale.c' || echo '$(srcdir)/'`graph_logscale.c
+
+graph_la-graph_peaks.lo: graph_peaks.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(graph_la_CFLAGS) $(CFLAGS) -MT graph_la-graph_peaks.lo -MD -MP -MF $(DEPDIR)/graph_la-graph_peaks.Tpo -c -o graph_la-graph_peaks.lo `test -f 'graph_peaks.c' || echo '$(srcdir)/'`graph_peaks.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/graph_la-graph_peaks.Tpo $(DEPDIR)/graph_la-graph_peaks.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='graph_peaks.c' object='graph_la-graph_peaks.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(graph_la_CFLAGS) $(CFLAGS) -c -o graph_la-graph_peaks.lo `test -f 'graph_peaks.c' || echo '$(srcdir)/'`graph_peaks.c
+
+graph_la-graph_stats.lo: graph_stats.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(graph_la_CFLAGS) $(CFLAGS) -MT graph_la-graph_stats.lo -MD -MP -MF $(DEPDIR)/graph_la-graph_stats.Tpo -c -o graph_la-graph_stats.lo `test -f 'graph_stats.c' || echo '$(srcdir)/'`graph_stats.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/graph_la-graph_stats.Tpo $(DEPDIR)/graph_la-graph_stats.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='graph_stats.c' object='graph_la-graph_stats.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(graph_la_CFLAGS) $(CFLAGS) -c -o graph_la-graph_stats.lo `test -f 'graph_stats.c' || echo '$(srcdir)/'`graph_stats.c
+
+graph_la-graph.lo: graph.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(graph_la_CFLAGS) $(CFLAGS) -MT graph_la-graph.lo -MD -MP -MF $(DEPDIR)/graph_la-graph.Tpo -c -o graph_la-graph.lo `test -f 'graph.c' || echo '$(srcdir)/'`graph.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/graph_la-graph.Tpo $(DEPDIR)/graph_la-graph.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='graph.c' object='graph_la-graph.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(graph_la_CFLAGS) $(CFLAGS) -c -o graph_la-graph.lo `test -f 'graph.c' || echo '$(srcdir)/'`graph.c
+
mostlyclean-libtool:
-rm -f *.lo
@@ -774,13 +984,15 @@ distdir: $(DISTFILES)
fi; \
done
check-am: all-am
-check: check-am
+check: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) check-am
all-am: Makefile $(LTLIBRARIES)
installdirs:
for dir in "$(DESTDIR)$(graphdir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
-install: install-am
+install: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
@@ -810,6 +1022,7 @@ distclean-generic:
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
clean: clean-am
clean-am: clean-generic clean-graphLTLIBRARIES clean-libtool \
@@ -881,7 +1094,7 @@ ps-am:
uninstall-am: uninstall-graphLTLIBRARIES
-.MAKE: install-am install-strip
+.MAKE: all check install install-am install-strip
.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
clean-graphLTLIBRARIES clean-libtool clean-local cscopelist-am \
@@ -901,6 +1114,9 @@ uninstall-am: uninstall-graphLTLIBRARIES
.PRECIOUS: Makefile
+graph.c: $(srcdir)/Makefile.am $(top_srcdir)/utils/gen-module-bundle.sh
+ $(SHELL) $(top_srcdir)/utils/gen-module-bundle.sh graph.c $(bundlable_modules)
+
clean-local:
rm -f core.* *~
diff --git a/modules/graph/graph.c b/modules/graph/graph.c
new file mode 100644
index 0000000..ef7a8db
--- /dev/null
+++ b/modules/graph/graph.c
@@ -0,0 +1,52 @@
+/* This is a GENERATED file. */
+#include <glib.h>
+#include <libgwymodule/gwymodule.h>
+
+static const GwyModuleRecord* register_bundle(void);
+
+static GwyModuleInfo module_info = {
+ GWY_MODULE_ABI_VERSION | GWY_MODULE_BUNDLE_FLAG,
+ (GwyModuleRegisterFunc)®ister_bundle,
+ NULL, NULL, NULL, NULL, NULL,
+};
+
+GWY_MODULE_QUERY(module_info)
+
+GwyModuleInfo* _gwy_module_query__graph_align(void);
+GwyModuleInfo* _gwy_module_query__graph_cd(void);
+GwyModuleInfo* _gwy_module_query__graph_cut(void);
+GwyModuleInfo* _gwy_module_query__graph_dos_spectrum(void);
+GwyModuleInfo* _gwy_module_query__graph_export_ascii(void);
+GwyModuleInfo* _gwy_module_query__graph_export_bitmap(void);
+GwyModuleInfo* _gwy_module_query__graph_export_vector(void);
+GwyModuleInfo* _gwy_module_query__graph_fdfit(void);
+GwyModuleInfo* _gwy_module_query__graph_filter(void);
+GwyModuleInfo* _gwy_module_query__graph_fit(void);
+GwyModuleInfo* _gwy_module_query__graph_level(void);
+GwyModuleInfo* _gwy_module_query__graph_logscale(void);
+GwyModuleInfo* _gwy_module_query__graph_peaks(void);
+GwyModuleInfo* _gwy_module_query__graph_stats(void);
+
+static const GwyModuleRecord modules[] = {
+ { _gwy_module_query__graph_align, "graph_align", },
+ { _gwy_module_query__graph_cd, "graph_cd", },
+ { _gwy_module_query__graph_cut, "graph_cut", },
+ { _gwy_module_query__graph_dos_spectrum, "graph_dos_spectrum", },
+ { _gwy_module_query__graph_export_ascii, "graph_export_ascii", },
+ { _gwy_module_query__graph_export_bitmap, "graph_export_bitmap", },
+ { _gwy_module_query__graph_export_vector, "graph_export_vector", },
+ { _gwy_module_query__graph_fdfit, "graph_fdfit", },
+ { _gwy_module_query__graph_filter, "graph_filter", },
+ { _gwy_module_query__graph_fit, "graph_fit", },
+ { _gwy_module_query__graph_level, "graph_level", },
+ { _gwy_module_query__graph_logscale, "graph_logscale", },
+ { _gwy_module_query__graph_peaks, "graph_peaks", },
+ { _gwy_module_query__graph_stats, "graph_stats", },
+ { NULL, NULL, },
+};
+
+static const GwyModuleRecord*
+register_bundle(void)
+{
+ return modules;
+}
diff --git a/modules/graph/graph_align.c b/modules/graph/graph_align.c
index b7270dc..9b50693 100644
--- a/modules/graph/graph_align.c
+++ b/modules/graph/graph_align.c
@@ -1,6 +1,6 @@
/*
- * @(#) $Id: graph_align.c 18293 2016-02-18 23:46:53Z yeti-dn $
- * Copyright (C) 2015 David Necas (Yeti).
+ * @(#) $Id: graph_align.c 20068 2017-07-11 14:17:55Z yeti-dn $
+ * Copyright (C) 2015-2017 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
* This program is free software; you can redistribute it and/or modify
@@ -23,6 +23,7 @@
#include <stdlib.h>
#include <libgwyddion/gwymacros.h>
#include <libgwyddion/gwymath.h>
+#include <libprocess/correct.h>
#include <libgwydgets/gwygraphmodel.h>
#include <libgwydgets/gwystock.h>
#include <libgwymodule/gwymodule-graph.h>
@@ -40,7 +41,9 @@ static void align_two_curves(GwyGraphCurveModel *base,
static gdouble find_best_offset(const gdouble *a,
gint na,
const gdouble *b,
- gint nb);
+ gint nb,
+ gint off_from,
+ gint off_to);
static gdouble* regularise (const PointXY *xydata,
gint ndata,
gdouble dx,
@@ -56,12 +59,12 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Aligns graph curves."),
"Yeti <yeti at gwyddion.net>",
- "1.1",
+ "1.2",
"David Nečas (Yeti)",
"2015",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, graph_align)
static gboolean
module_register(void)
@@ -165,8 +168,9 @@ align_two_curves(GwyGraphCurveModel *base,
{
PointXY *cxydata, *bxydata;
gdouble *cline, *bline, *newcxdata, *newcydata;
- gint cndata, bndata, cn, bn, i;
+ gint cndata, bndata, cn, bn, i, off_from, off_to;
gdouble clen, dx, blen, off;
+ gboolean sane_dx = TRUE;
bndata = gwy_graph_curve_model_get_ndata(base);
bxydata = extract_xy_data(base);
@@ -183,6 +187,7 @@ align_two_curves(GwyGraphCurveModel *base,
* without going insane. */
dx = clen/120.0;
if ((bxydata[bndata-1].x - bxydata[0].x)/dx > 1e5) {
+ sane_dx = FALSE;
dx = 1e5/blen;
if (clen/dx < cndata)
return;
@@ -190,16 +195,36 @@ align_two_curves(GwyGraphCurveModel *base,
bline = regularise(bxydata, bndata, dx, &bn);
cline = regularise(cxydata, cndata, dx, &cn);
- off = find_best_offset(cline, cn, bline, bn);
+
+ off_from = -((2*cn + 1)/5);
+ off_to = bn - (3*cn + 1)/5;
+ gwy_debug("regularised base n: %d, curve n: %d", bn, cn);
+ off = find_best_offset(bline, bn, cline, cn, off_from, off_to);
g_free(bline);
g_free(cline);
- off = dx*off + (cxydata[0].x - bxydata[0].x);
+ /* Perform a second stage finer search when we have lots of points. */
+ if (sane_dx && bndata > 300 && cndata > 300 && bndata + cndata > 800) {
+ dx = clen/1200.0;
+ if ((bxydata[bndata-1].x - bxydata[0].x)/dx < 1e5) {
+ bline = regularise(bxydata, bndata, dx, &bn);
+ cline = regularise(cxydata, cndata, dx, &cn);
+
+ off_from = (gint)floor((off - 1)*10 - 1);
+ off_to = (gint)ceil((off + 1)*10 + 1);
+ off = find_best_offset(bline, bn, cline, cn, off_from, off_to);
+
+ g_free(bline);
+ g_free(cline);
+ }
+ }
+
+ off = dx*off + (bxydata[0].x - cxydata[0].x);
newcxdata = g_new(gdouble, cndata);
newcydata = g_new(gdouble, cndata);
for (i = 0; i < cndata; i++) {
- newcxdata[i] = cxydata[i].x - off;
+ newcxdata[i] = cxydata[i].x + off;
newcydata[i] = cxydata[i].y;
}
@@ -210,19 +235,20 @@ align_two_curves(GwyGraphCurveModel *base,
g_free(bxydata);
}
+/* Generally, @a should be the longer (base) curve, @b the shorter (being
+ * aligned) curve. */
static gdouble
find_best_offset(const gdouble *a, gint na,
- const gdouble *b, gint nb)
+ const gdouble *b, gint nb,
+ gint off_from, gint off_to)
{
gdouble scores[3] = { 0.0, 0.0, 0.0 };
gdouble prev, score = G_MAXDOUBLE, bestscore = G_MAXDOUBLE;
- gint off, off_from, off_to, bestoff = 0;
+ gint off, bestoff = 0;
gdouble off0, subpixoff = 0.0;
g_assert(nb > 4);
- off_from = -((2*na + 1)/5);
- off_to = na - (3*na + 1)/5;
off0 = 0.5*(off_from + off_to);
gwy_debug("off range [%d, %d]", off_from, off_to);
@@ -240,7 +266,7 @@ find_best_offset(const gdouble *a, gint na,
if (off == bestoff+1) {
scores[2] = score;
}
- /*g_printerr("%d %g\n", off, score);*/
+ //g_printerr("%d %g\n", off, score);
}
gwy_debug("best offset %d [%g %g %g]",
@@ -256,6 +282,9 @@ find_best_offset(const gdouble *a, gint na,
return bestoff + subpixoff;
}
+/* @boff is how much we move @b. If @boff < 0 we move it to the left and
+ * if @boff > 0 we move it to the right. If @boff = 0 then @a and @b left
+ * edges are aligned. */
static gdouble
difference_score(const gdouble *a, gint na,
const gdouble *b, gint nb,
@@ -281,7 +310,7 @@ difference_score(const gdouble *a, gint na,
b += bfrom;
for (i = 0; i < len; i++) {
gdouble d = a[i] - b[i];
- s += fabs(d);
+ s += d*d;
}
return s/len;
@@ -291,11 +320,14 @@ static gdouble*
regularise(const PointXY *xydata, gint ndata, gdouble dx, gint *pn)
{
gint n = floor((xydata[ndata-1].x - xydata[0].x)/dx) + 1;
- gint i, j, k, ic;
+ gint i, ic, nzero;
+ GwyDataLine *dline, *wline;
gdouble *data, *weight;
- data = g_new0(gdouble, n);
- weight = g_new0(gdouble, n);
+ dline = gwy_data_line_new(n, n, TRUE);
+ wline = gwy_data_line_new(n, n, TRUE);
+ data = gwy_data_line_get_data(dline);
+ weight = gwy_data_line_get_data(wline);
*pn = n;
for (ic = 0; ic < ndata; ic++) {
@@ -306,42 +338,33 @@ regularise(const PointXY *xydata, gint ndata, gdouble dx, gint *pn)
weight[i] += 1.0;
}
+ nzero = 0;
for (i = 0; i < n; i++) {
if (weight[i])
data[i] /= weight[i];
+ else
+ nzero++;
}
if (!weight[0]) {
data[0] = xydata[0].y;
weight[0] = 1.0;
+ nzero--;
}
if (!weight[n-1]) {
data[n-1] = xydata[ndata-1].y;
weight[n-1] = 1.0;
+ nzero--;
}
- i = 1;
- while (i < n-1) {
- gdouble yf, yt;
-
- if (weight[i]) {
- i++;
- continue;
- }
-
- for (j = i+1; !weight[j]; j++)
- ;
-
- i--;
- yf = xydata[i].y;
- yt = xydata[j].y;
- for (k = i; k < j; k++) {
- data[k] = (yf*(j - k) + yt*(k - i))/(j - i);
- }
-
- i = j+1;
+ if (nzero) {
+ for (i = 0; i < n; i++)
+ weight[i] = (weight[i] <= 0.0);
+ gwy_data_line_correct_laplace(dline, wline);
}
+ data = g_memdup(data, n*sizeof(gdouble));
- g_free(weight);
+ g_object_unref(dline);
+ g_object_unref(wline);
return data;
}
diff --git a/modules/graph/graph_cd.c b/modules/graph/graph_cd.c
index 8fab4fd..a9ebff8 100644
--- a/modules/graph/graph_cd.c
+++ b/modules/graph/graph_cd.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: graph_cd.c 18290 2016-02-18 20:54:52Z yeti-dn $
+ * @(#) $Id: graph_cd.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2003-2016 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -140,7 +140,7 @@ static GwyModuleInfo module_info = {
"2004",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, graph_cd)
static gboolean
module_register(void)
diff --git a/modules/graph/graph_cut.c b/modules/graph/graph_cut.c
index e98261d..24a7631 100644
--- a/modules/graph/graph_cut.c
+++ b/modules/graph/graph_cut.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: graph_cut.c 18953 2016-09-13 09:47:56Z yeti-dn $
+ * @(#) $Id: graph_cut.c 19999 2017-06-29 21:48:28Z yeti-dn $
* Copyright (C) 2003-2016 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -52,7 +52,6 @@ typedef struct {
GtkWidget *from;
GtkWidget *to;
GtkWidget *curve;
- GtkWidget *curve_label;
GtkWidget *all;
} CutControls;
@@ -92,7 +91,7 @@ static GwyModuleInfo module_info = {
"2007",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, graph_cut)
static gboolean
module_register(void)
@@ -163,25 +162,19 @@ cut_dialog(CutArgs *args)
row = 0;
/* Curve to cut */
- controls.curve_label = gtk_label_new_with_mnemonic(_("_Graph curve:"));
- gtk_misc_set_alignment(GTK_MISC(controls.curve_label), 0.0, 0.5);
- gtk_table_attach(GTK_TABLE(table), controls.curve_label,
- 0, 1, row, row+1, GTK_FILL, 0, 0, 0);
-
- controls.curve
- = gwy_combo_box_graph_curve_new(G_CALLBACK(curve_changed), &controls,
- gmodel, args->curve);
- gtk_label_set_mnemonic_widget(GTK_LABEL(controls.curve_label),
- controls.curve);
- gtk_table_attach(GTK_TABLE(table), controls.curve,
- 1, 2, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ controls.curve = gwy_combo_box_graph_curve_new(G_CALLBACK(curve_changed),
+ &controls,
+ gmodel, args->curve);
+ gwy_table_attach_adjbar(table, row, _("_Graph curve:"), NULL,
+ GTK_OBJECT(controls.curve),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
row++;
controls.all = gtk_check_button_new_with_mnemonic(_("Cut _all curves"));
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.all),
args->all);
gtk_table_attach(GTK_TABLE(table), controls.all,
- 0, 2, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect(controls.all, "toggled",
G_CALLBACK(all_changed), &controls);
row++;
@@ -243,26 +236,12 @@ cut_dialog(CutArgs *args)
pick_curves(&controls);
update_sensitivity(&controls);
- do {
- response = gtk_dialog_run(GTK_DIALOG(dialog));
+ response = gtk_dialog_run(GTK_DIALOG(dialog));
+ if (response == GTK_RESPONSE_OK)
cut_fetch_entry(&controls);
- switch (response) {
- case GTK_RESPONSE_CANCEL:
- case GTK_RESPONSE_DELETE_EVENT:
- gtk_widget_destroy(dialog);
- return;
- break;
-
- case GTK_RESPONSE_OK:
- do_cut(args);
- gtk_widget_destroy(dialog);
- break;
-
- default:
- g_assert_not_reached();
- break;
- }
- } while (response != GTK_RESPONSE_OK);
+ gtk_widget_destroy(dialog);
+ if (response == GTK_RESPONSE_OK)
+ do_cut(args);
}
static void
@@ -411,7 +390,6 @@ graph_selected(GwySelection* selection,
}
-
static void
range_changed(GtkWidget *entry,
CutControls *controls)
@@ -491,8 +469,7 @@ update_sensitivity(CutControls *controls)
{
gboolean csens = !controls->args->all;
- gtk_widget_set_sensitive(controls->curve, csens);
- gtk_widget_set_sensitive(controls->curve_label, csens);
+ gwy_table_hscale_set_sensitive(GTK_OBJECT(controls->curve), csens);
}
static const gchar all_key[] = "/module/graph_cut/all";
diff --git a/modules/graph/graph_dos_spectrum.c b/modules/graph/graph_dos_spectrum.c
index c79e0d2..d4b5e7b 100644
--- a/modules/graph/graph_dos_spectrum.c
+++ b/modules/graph/graph_dos_spectrum.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: graph_dos_spectrum.c 18256 2016-02-05 19:53:16Z yeti-dn $
+ * @(#) $Id: graph_dos_spectrum.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2010, David Necas (Yeti), Petr Klapetek, Daniil Bratashov
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net, dn2010 at gmail.com
*
@@ -46,7 +46,7 @@ static GwyModuleInfo module_info = {
"2010",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, graph_dos_spectrum)
static gboolean
module_register(void)
diff --git a/modules/graph/graph_export_ascii.c b/modules/graph/graph_export_ascii.c
index 321fda2..8cc8493 100644
--- a/modules/graph/graph_export_ascii.c
+++ b/modules/graph/graph_export_ascii.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: graph_export_ascii.c 19205 2016-11-08 10:24:40Z yeti-dn $
+ * @(#) $Id: graph_export_ascii.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2006,2014-2016 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -67,7 +67,7 @@ static GwyModuleInfo module_info = {
"2006",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, graph_export_ascii)
static gboolean
module_register(void)
diff --git a/modules/graph/graph_export_bitmap.c b/modules/graph/graph_export_bitmap.c
index ccf795f..7e20c69 100644
--- a/modules/graph/graph_export_bitmap.c
+++ b/modules/graph/graph_export_bitmap.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: graph_export_bitmap.c 18256 2016-02-05 19:53:16Z yeti-dn $
+ * @(#) $Id: graph_export_bitmap.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2006 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -40,7 +40,7 @@ static GwyModuleInfo module_info = {
"2006",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, graph_export_bitmap)
static gboolean
module_register(void)
diff --git a/modules/graph/graph_export_vector.c b/modules/graph/graph_export_vector.c
index 0f293cd..3e9cf7d 100644
--- a/modules/graph/graph_export_vector.c
+++ b/modules/graph/graph_export_vector.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: graph_export_vector.c 18234 2016-01-27 14:57:31Z yeti-dn $
+ * @(#) $Id: graph_export_vector.c 20278 2017-08-14 15:11:19Z yeti-dn $
* Copyright (C) 2006 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -23,6 +23,7 @@
#include <gtk/gtk.h>
#include <libgwyddion/gwymacros.h>
#include <libgwydgets/gwygraphmodel.h>
+#include <libgwydgets/gwystock.h>
#include <libgwymodule/gwymodule-graph.h>
#include <app/gwyapp.h>
@@ -39,7 +40,7 @@ static GwyModuleInfo module_info = {
"2006",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, graph_export_vector)
static gboolean
module_register(void)
@@ -47,7 +48,7 @@ module_register(void)
gwy_graph_func_register("graph_export_vector",
(GwyGraphFunc)&export,
N_("/Export _PostScript"),
- NULL,
+ GWY_STOCK_GRAPH_EXPORT_VECTOR,
GWY_MENU_FLAG_GRAPH,
N_("Export graph to PostScript"));
diff --git a/modules/graph/graph_fdfit.c b/modules/graph/graph_fdfit.c
index 0aced03..61d0665 100644
--- a/modules/graph/graph_fdfit.c
+++ b/modules/graph/graph_fdfit.c
@@ -1,6 +1,6 @@
/*
- * @(#) $Id: graph_fdfit.c 19147 2016-10-31 16:30:37Z yeti-dn $
- * Copyright (C) 2003-2016 David Necas (Yeti), Petr Klapetek.
+ * @(#) $Id: graph_fdfit.c 19948 2017-06-22 14:05:41Z yeti-dn $
+ * Copyright (C) 2003-2017 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
* This program is free software; you can redistribute it and/or modify
@@ -44,6 +44,7 @@ enum {
RESPONSE_FIT,
RESPONSE_PLOT,
RESPONSE_SAVE,
+ RESPONSE_COPY,
};
typedef struct {
@@ -167,12 +168,12 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Fit force-distance data"),
"Petr Klapetek <klapetek at gwyddion.net>",
- "1.4",
+ "1.5",
"David Nečas (Yeti) & Petr Klapetek",
"2007",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, graph_fdfit)
static gboolean
module_register(void)
@@ -229,6 +230,8 @@ fit_dialog(FitArgs *args)
FitControls controls;
gint response, row, ncurves;
GString *report;
+ GtkClipboard *clipboard;
+ GdkDisplay *display;
gdouble xmin, xmax;
controls.args = args;
@@ -256,7 +259,11 @@ fit_dialog(FitArgs *args)
gtk_dialog_add_button(GTK_DIALOG(dialog),
_("_Plot Inits"), RESPONSE_PLOT);
gtk_dialog_add_button(GTK_DIALOG(dialog),
+ GTK_STOCK_COPY, RESPONSE_COPY);
+ gtk_dialog_set_response_sensitive(GTK_DIALOG(dialog), RESPONSE_COPY, FALSE);
+ gtk_dialog_add_button(GTK_DIALOG(dialog),
GTK_STOCK_SAVE, RESPONSE_SAVE);
+ gtk_dialog_set_response_sensitive(GTK_DIALOG(dialog), RESPONSE_SAVE, FALSE);
gtk_dialog_add_button(GTK_DIALOG(dialog),
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL);
gtk_dialog_add_button(GTK_DIALOG(dialog),
@@ -493,6 +500,15 @@ fit_dialog(FitArgs *args)
g_string_free(report, TRUE);
break;
+ case RESPONSE_COPY:
+ report = create_fit_report(args);
+ display = gtk_widget_get_display(dialog);
+ clipboard = gtk_clipboard_get_for_display(display,
+ GDK_SELECTION_CLIPBOARD);
+ gtk_clipboard_set_text(clipboard, report->str, -1);
+ g_string_free(report, TRUE);
+ break;
+
case RESPONSE_ESTIMATE:
fit_estimate(&controls);
break;
@@ -772,7 +788,7 @@ fit_do(FitControls *controls)
for (i = 0; i < nparams; i++) {
arg = &g_array_index(args->param, FitParamArg, i);
arg->value = param[i];
- arg->error = error[i];
+ arg->error = arg->fix ? 0.0 : error[i];
fit_param_row_update_value(controls, i, errorknown);
}
@@ -912,6 +928,8 @@ fit_set_state(FitControls *controls,
gtk_dialog_set_response_sensitive(GTK_DIALOG(controls->dialog),
RESPONSE_SAVE, is_fitted);
+ gtk_dialog_set_response_sensitive(GTK_DIALOG(controls->dialog),
+ RESPONSE_COPY, is_fitted);
if (args->is_fitted && !is_fitted) {
if (gwy_graph_model_get_n_curves(args->graph_model) == 2)
diff --git a/modules/graph/graph_filter.c b/modules/graph/graph_filter.c
index e47171a..c56feef 100644
--- a/modules/graph/graph_filter.c
+++ b/modules/graph/graph_filter.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: graph_filter.c 18262 2016-02-07 07:19:02Z yeti-dn $
+ * @(#) $Id: graph_filter.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2012 David Necas (Yeti), Petr Klapetek,
* Daniil Bratashov.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net, dn2010 at gmail.com.
@@ -44,7 +44,7 @@ static GwyModuleInfo module_info = {
"2012",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, graph_filter)
static gboolean
module_register(void)
diff --git a/modules/graph/graph_fit.c b/modules/graph/graph_fit.c
index a43f862..7ae82a1 100644
--- a/modules/graph/graph_fit.c
+++ b/modules/graph/graph_fit.c
@@ -1,6 +1,6 @@
/*
- * @(#) $Id: graph_fit.c 19147 2016-10-31 16:30:37Z yeti-dn $
- * Copyright (C) 2003-2016 David Necas (Yeti), Petr Klapetek.
+ * @(#) $Id: graph_fit.c 19948 2017-06-22 14:05:41Z yeti-dn $
+ * Copyright (C) 2003-2017 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
* This program is free software; you can redistribute it and/or modify
@@ -44,6 +44,7 @@ enum {
RESPONSE_FIT,
RESPONSE_PLOT,
RESPONSE_SAVE,
+ RESPONSE_COPY,
};
typedef struct {
@@ -180,12 +181,12 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Fit graph with function"),
"Petr Klapetek <klapetek at gwyddion.net>",
- "2.9",
+ "2.10",
"David Nečas (Yeti) & Petr Klapetek",
"2004",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, graph_fit)
static gboolean
module_register(void)
@@ -246,6 +247,8 @@ fit_dialog(FitArgs *args, GwyContainer *container)
FitControls controls;
gint response, row, ncurves;
GString *report;
+ GtkClipboard *clipboard;
+ GdkDisplay *display;
gdouble xmin, xmax;
controls.args = args;
@@ -275,7 +278,11 @@ fit_dialog(FitArgs *args, GwyContainer *container)
gtk_dialog_add_button(GTK_DIALOG(dialog),
_("_Plot Inits"), RESPONSE_PLOT);
gtk_dialog_add_button(GTK_DIALOG(dialog),
+ GTK_STOCK_COPY, RESPONSE_COPY);
+ gtk_dialog_set_response_sensitive(GTK_DIALOG(dialog), RESPONSE_COPY, FALSE);
+ gtk_dialog_add_button(GTK_DIALOG(dialog),
GTK_STOCK_SAVE, RESPONSE_SAVE);
+ gtk_dialog_set_response_sensitive(GTK_DIALOG(dialog), RESPONSE_SAVE, FALSE);
gtk_dialog_add_button(GTK_DIALOG(dialog),
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL);
gtk_dialog_add_button(GTK_DIALOG(dialog),
@@ -533,6 +540,15 @@ fit_dialog(FitArgs *args, GwyContainer *container)
g_string_free(report, TRUE);
break;
+ case RESPONSE_COPY:
+ report = create_fit_report(args);
+ display = gtk_widget_get_display(dialog);
+ clipboard = gtk_clipboard_get_for_display(display,
+ GDK_SELECTION_CLIPBOARD);
+ gtk_clipboard_set_text(clipboard, report->str, -1);
+ g_string_free(report, TRUE);
+ break;
+
case RESPONSE_ESTIMATE:
fit_estimate(&controls);
break;
@@ -826,7 +842,7 @@ fit_do(FitControls *controls)
for (i = 0; i < nparams; i++) {
arg = &g_array_index(args->param, FitParamArg, i);
arg->value = param[i];
- arg->error = error[i];
+ arg->error = arg->fix ? 0.0 : error[i];
fit_param_row_update_value(controls, i, errorknown);
}
@@ -987,6 +1003,8 @@ fit_set_state(FitControls *controls,
gtk_dialog_set_response_sensitive(GTK_DIALOG(controls->dialog),
RESPONSE_SAVE, is_fitted);
+ gtk_dialog_set_response_sensitive(GTK_DIALOG(controls->dialog),
+ RESPONSE_COPY, is_fitted);
if (args->is_fitted && !is_fitted) {
if (gwy_graph_model_get_n_curves(args->graph_model) == 2)
diff --git a/modules/graph/graph_level.c b/modules/graph/graph_level.c
index 543298f..0b76e7d 100644
--- a/modules/graph/graph_level.c
+++ b/modules/graph/graph_level.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: graph_level.c 18262 2016-02-07 07:19:02Z yeti-dn $
+ * @(#) $Id: graph_level.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2003 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -43,7 +43,7 @@ static GwyModuleInfo module_info = {
"2005",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, graph_level)
static gboolean
module_register(void)
diff --git a/modules/graph/graph_logscale.c b/modules/graph/graph_logscale.c
index c1e8b35..ab1aef0 100644
--- a/modules/graph/graph_logscale.c
+++ b/modules/graph/graph_logscale.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: graph_logscale.c 19252 2016-11-14 08:43:05Z yeti-dn $
+ * @(#) $Id: graph_logscale.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2016 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -83,7 +83,7 @@ static GwyModuleInfo module_info = {
"2016",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, graph_logscale)
static gboolean
module_register(void)
diff --git a/modules/graph/graph_peaks.c b/modules/graph/graph_peaks.c
index 2776e43..43efd29 100644
--- a/modules/graph/graph_peaks.c
+++ b/modules/graph/graph_peaks.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: graph_peaks.c 19071 2016-10-14 09:02:41Z yeti-dn $
+ * @(#) $Id: graph_peaks.c 19999 2017-06-29 21:48:28Z yeti-dn $
* Copyright (C) 2016 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -117,12 +117,12 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Finds peaks on graph curves."),
"Yeti <yeti at gwyddion.net>",
- "1.2",
+ "1.3",
"David Nečas (Yeti)",
"2016",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, graph_peaks)
static gboolean
module_register(void)
@@ -141,11 +141,9 @@ static void
graph_peaks(GwyGraph *graph)
{
PeaksArgs args;
- GwyGraphModel *parent_gmodel;
- parent_gmodel = gwy_graph_get_model(graph);
load_args(gwy_app_settings_get(), &args);
- graph_peaks_dialogue(parent_gmodel, &args);
+ graph_peaks_dialogue(gwy_graph_get_model(graph), &args);
save_args(gwy_app_settings_get(), &args);
}
@@ -162,11 +160,11 @@ graph_peaks_dialogue(GwyGraphModel *parent_gmodel, PeaksArgs *args)
{ N_("Bilateral minimum"), GWY_PEAK_BACKGROUND_MMSTEP, },
};
- GtkWidget *dialogue, *hbox, *table, *label, *scwin, *hbox2, *button;
+ GtkWidget *dialogue, *hbox, *table, *scwin, *hbox2, *button;
GwyGraphModel *gmodel;
GwyGraphArea *area;
PeaksControls controls;
- gint response, row;
+ gint row;
gwy_clear(&controls, 1);
controls.args = args;
@@ -177,10 +175,9 @@ graph_peaks_dialogue(GwyGraphModel *parent_gmodel, PeaksArgs *args)
dialogue = gtk_dialog_new_with_buttons(_("Graph Peaks"), NULL, 0, NULL);
controls.dialogue = dialogue;
- gtk_dialog_add_button(GTK_DIALOG(dialogue),
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL);
- gtk_dialog_add_button(GTK_DIALOG(dialogue),
- GTK_STOCK_OK, GTK_RESPONSE_OK);
+ gtk_dialog_add_button(GTK_DIALOG(dialogue), GTK_STOCK_OK, GTK_RESPONSE_OK);
+ gtk_dialog_add_button(GTK_DIALOG(dialogue), GTK_STOCK_CANCEL,
+ GTK_RESPONSE_CANCEL);
gwy_help_add_to_graph_dialog(GTK_DIALOG(dialogue), GWY_HELP_DEFAULT);
gtk_dialog_set_default_response(GTK_DIALOG(dialogue), GTK_RESPONSE_OK);
@@ -189,58 +186,44 @@ graph_peaks_dialogue(GwyGraphModel *parent_gmodel, PeaksArgs *args)
TRUE, TRUE, 0);
/* Parameters */
- table = gtk_table_new(6, 4, FALSE);
+ table = gtk_table_new(6, 2, FALSE);
gtk_table_set_row_spacings(GTK_TABLE(table), 2);
gtk_table_set_col_spacings(GTK_TABLE(table), 6);
gtk_box_pack_start(GTK_BOX(hbox), table, FALSE, FALSE, 0);
gtk_container_set_border_width(GTK_CONTAINER(table), 4);
row = 0;
- label = gtk_label_new_with_mnemonic(_("_Graph curve:"));
- gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_table_attach(GTK_TABLE(table), label,
- 0, 1, row, row+1, GTK_FILL, 0, 0, 0);
-
- controls.curve
- = gwy_combo_box_graph_curve_new(G_CALLBACK(curve_changed), &controls,
- parent_gmodel, args->curve);
- gtk_label_set_mnemonic_widget(GTK_LABEL(label), controls.curve);
- gtk_table_attach(GTK_TABLE(table), controls.curve,
- 1, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ controls.curve = gwy_combo_box_graph_curve_new(G_CALLBACK(curve_changed),
+ &controls,
+ parent_gmodel, args->curve);
+ gwy_table_attach_adjbar(table, row, _("_Graph curve:"), NULL,
+ GTK_OBJECT(controls.curve),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
row++;
- label = gtk_label_new_with_mnemonic(_("_Background type:"));
- gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_table_attach(GTK_TABLE(table), label,
- 0, 1, row, row+1, GTK_FILL, 0, 0, 0);
-
- controls.background
- = gwy_enum_combo_box_new(background_types,
- G_N_ELEMENTS(background_types),
- G_CALLBACK(background_changed), &controls,
- args->background, TRUE);
- gtk_label_set_mnemonic_widget(GTK_LABEL(label), controls.background);
- gtk_table_attach(GTK_TABLE(table), controls.background,
- 1, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ controls.background = gwy_enum_combo_box_new(background_types,
+ G_N_ELEMENTS(background_types),
+ G_CALLBACK(background_changed),
+ &controls,
+ args->background, TRUE);
+ gwy_table_attach_adjbar(table, row, _("_Background type:"), NULL,
+ GTK_OBJECT(controls.background),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
row++;
- label = gtk_label_new_with_mnemonic(_("Order peaks _by:"));
- gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_table_attach(GTK_TABLE(table), label,
- 0, 1, row, row+1, GTK_FILL, 0, 0, 0);
-
- controls.order
- = gwy_enum_combo_box_new(order_types, G_N_ELEMENTS(order_types),
- G_CALLBACK(order_changed), &controls,
- args->order, TRUE);
- gtk_label_set_mnemonic_widget(GTK_LABEL(label), controls.order);
- gtk_table_attach(GTK_TABLE(table), controls.order,
- 1, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ controls.order = gwy_enum_combo_box_new(order_types,
+ G_N_ELEMENTS(order_types),
+ G_CALLBACK(order_changed),
+ &controls,
+ args->order, TRUE);
+ gwy_table_attach_adjbar(table, row, _("Order peaks _by:"), NULL,
+ GTK_OBJECT(controls.order),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
row++;
controls.npeaks = gtk_adjustment_new(args->npeaks, 1, 128, 1, 10, 0);
- gwy_table_attach_hscale(table, row, _("Number of _peaks:"), NULL,
- controls.npeaks, GWY_HSCALE_DEFAULT);
+ gwy_table_attach_adjbar(table, row, _("Number of _peaks:"), NULL,
+ controls.npeaks, GWY_HSCALE_SQRT | GWY_HSCALE_SNAP);
g_signal_connect(controls.npeaks, "value-changed",
G_CALLBACK(npeaks_changed), &controls);
row++;
@@ -252,13 +235,12 @@ graph_peaks_dialogue(GwyGraphModel *parent_gmodel, PeaksArgs *args)
GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
gtk_container_add(GTK_CONTAINER(scwin), controls.peaklist);
gtk_table_attach(GTK_TABLE(table), scwin,
- 0, 3, row, row+1,
- GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
row++;
hbox2 = gtk_hbox_new(FALSE, 0);
gtk_table_attach(GTK_TABLE(table), hbox2,
- 0, 4, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
button = add_aux_button(hbox2, GTK_STOCK_SAVE, _("Save table to a file"));
g_signal_connect_swapped(button, "clicked",
@@ -284,25 +266,8 @@ graph_peaks_dialogue(GwyGraphModel *parent_gmodel, PeaksArgs *args)
curve_changed(GTK_COMBO_BOX(controls.curve), &controls);
gtk_widget_show_all(dialogue);
-
- do {
- response = gtk_dialog_run(GTK_DIALOG(dialogue));
- switch (response) {
- case GTK_RESPONSE_CANCEL:
- case GTK_RESPONSE_DELETE_EVENT:
- gtk_widget_destroy(dialogue);
- return;
- break;
-
- case GTK_RESPONSE_OK:
- gtk_widget_destroy(dialogue);
- break;
-
- default:
- g_assert_not_reached();
- break;
- }
- } while (response != GTK_RESPONSE_OK);
+ gtk_dialog_run(GTK_DIALOG(dialogue));
+ gtk_widget_destroy(dialogue);
g_array_free(controls.peaks_sorted, TRUE);
g_array_free(controls.peaks, TRUE);
@@ -454,7 +419,6 @@ curve_changed(GtkComboBox *combo,
g_object_set(controls->npeaks,
"upper", (gdouble)controls->peaks->len,
NULL);
-
}
static void
diff --git a/modules/graph/graph_stats.c b/modules/graph/graph_stats.c
new file mode 100644
index 0000000..068b6c6
--- /dev/null
+++ b/modules/graph/graph_stats.c
@@ -0,0 +1,953 @@
+/*
+ * @(#) $Id: graph_stats.c 20004 2017-06-30 10:21:20Z yeti-dn $
+ * Copyright (C) 2016 David Necas (Yeti).
+ * E-mail: yeti at gwyddion.net.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "config.h"
+#include <stdlib.h>
+#include <string.h>
+#include <libgwyddion/gwymacros.h>
+#include <libgwyddion/gwymath.h>
+#include <libprocess/linestats.h>
+#include <libgwydgets/gwygraphmodel.h>
+#include <libgwydgets/gwycombobox.h>
+#include <libgwydgets/gwynullstore.h>
+#include <libgwydgets/gwystock.h>
+#include <libgwydgets/gwydgetutils.h>
+#include <libgwymodule/gwymodule-graph.h>
+#include <app/gwymoduleutils.h>
+#include <app/gwyapp.h>
+
+typedef struct {
+ const gchar *name;
+ gsize offset;
+} StatsLabel;
+
+typedef struct {
+ guint pos;
+ guint npts;
+
+ /* Valid from 1 points. */
+ gdouble min;
+ gdouble max;
+ gdouble avg;
+ gdouble median;
+ /* Valid from 2 points. */
+ gdouble ra;
+ gdouble rms;
+ gdouble skew;
+ gdouble kurtosis;
+ gdouble projlen;
+ gdouble length;
+ gdouble variation;
+ gdouble integralavg;
+ gdouble integral;
+ gdouble integralp;
+ gdouble integraln;
+ gdouble integral2;
+} StatsResults;
+
+typedef struct {
+ gint curve;
+ gdouble from;
+ gdouble to;
+} StatsArgs;
+
+typedef struct {
+ GwyGraphModel *parent_gmodel;
+ StatsArgs *args;
+ StatsResults stats;
+ GwySIValueFormat *xvf;
+ GwySIValueFormat *yvf;
+ GwySIValueFormat *areavf;
+ GwySIValueFormat *lenvf;
+ GwySIValueFormat *varvf;
+ gulong recalculate_id;
+
+ GtkWidget *dialogue;
+ GtkWidget *graph;
+ GtkWidget *curve;
+ GtkWidget *from;
+ GtkWidget *to;
+ GtkWidget *npts;
+
+ GtkWidget *min;
+ GtkWidget *max;
+ GtkWidget *avg;
+ GtkWidget *median;
+ GtkWidget *ra;
+ GtkWidget *rms;
+ GtkWidget *skew;
+ GtkWidget *kurtosis;
+ GtkWidget *projlen;
+ GtkWidget *length;
+ GtkWidget *variation;
+ GtkWidget *integralavg;
+ GtkWidget *integral;
+ GtkWidget *integralp;
+ GtkWidget *integraln;
+ GtkWidget *integral2;
+} StatsControls;
+
+static gboolean module_register (void);
+static void graph_stats (GwyGraph *graph);
+static void graph_stats_dialogue (GwyGraphModel *gmodel,
+ StatsArgs *args);
+static GtkWidget* add_aux_button (GtkWidget *hbox,
+ const gchar *stock_id,
+ const gchar *tooltip);
+static void curve_changed (GtkComboBox *combo,
+ StatsControls *controls);
+static void range_changed (GtkWidget *entry,
+ StatsControls *controls);
+static void stats_limit_selection (StatsControls *controls,
+ gboolean curve_switch);
+static void stats_get_full_x_range(StatsControls *controls,
+ gdouble *xmin,
+ gdouble *xmax);
+static void graph_selected (GwySelection* selection,
+ gint i,
+ StatsControls *controls);
+static gboolean update_stats_table (gpointer user_data);
+static void invalidate (StatsControls *controls);
+static void graph_stats_save (StatsControls *controls);
+static void graph_stats_copy (StatsControls *controls);
+static gchar* format_report (StatsControls *controls);
+static void compute_stats (GwyGraphCurveModel *gcmodel,
+ StatsResults *stats,
+ gdouble from,
+ gdouble to);
+
+/* There are no presistent settings. */
+static const StatsArgs stats_defaults = {
+ 0, -G_MAXDOUBLE, G_MAXDOUBLE,
+};
+
+/* NB: The order of the values is important for create_report()! */
+
+/* Simple values, disregarding abscissa */
+static const StatsLabel values_simple[] = {
+ { N_("Minimum:"), G_STRUCT_OFFSET(StatsControls, min), },
+ { N_("Maximum:"), G_STRUCT_OFFSET(StatsControls, max), },
+ { N_("Average value:"), G_STRUCT_OFFSET(StatsControls, avg), },
+ { N_("Median:"), G_STRUCT_OFFSET(StatsControls, median), },
+ { N_("Ra:"), G_STRUCT_OFFSET(StatsControls, ra), },
+ { N_("Rms (Rq):"), G_STRUCT_OFFSET(StatsControls, rms), },
+ { N_("Skew:"), G_STRUCT_OFFSET(StatsControls, skew), },
+ { N_("Kurtosis:"), G_STRUCT_OFFSET(StatsControls, kurtosis), },
+};
+
+/* Integrals */
+static const StatsLabel values_integral[] = {
+ { N_("Projected length:"), G_STRUCT_OFFSET(StatsControls, projlen), },
+ { N_("Developed length:"), G_STRUCT_OFFSET(StatsControls, length), },
+ { N_("Variation:"), G_STRUCT_OFFSET(StatsControls, variation), },
+ { N_("Average value:"), G_STRUCT_OFFSET(StatsControls, integralavg), },
+ { N_("Area under curve:"), G_STRUCT_OFFSET(StatsControls, integral), },
+ { N_("Positive area:"), G_STRUCT_OFFSET(StatsControls, integralp), },
+ { N_("Negative area:"), G_STRUCT_OFFSET(StatsControls, integraln), },
+ { N_("Root mean square:"), G_STRUCT_OFFSET(StatsControls, integral2), },
+};
+
+static GwyModuleInfo module_info = {
+ GWY_MODULE_ABI_VERSION,
+ &module_register,
+ N_("Calculates simple graph curve statistics."),
+ "Yeti <yeti at gwyddion.net>",
+ "1.0",
+ "David Nečas (Yeti)",
+ "2017",
+};
+
+GWY_MODULE_QUERY2(module_info, graph_stats)
+
+static gboolean
+module_register(void)
+{
+ gwy_graph_func_register("graph_stats",
+ (GwyGraphFunc)&graph_stats,
+ N_("/_Statistics..."),
+ NULL,
+ GWY_MENU_FLAG_GRAPH,
+ N_("Calculate graph curve statistics"));
+
+ return TRUE;
+}
+
+static void
+graph_stats(GwyGraph *graph)
+{
+ StatsArgs args = stats_defaults;
+
+ graph_stats_dialogue(gwy_graph_get_model(graph), &args);
+}
+
+/* This seems to be the safe way of doing things. Calling g_source_remove()
+ * and gtk_widget_destroy() seems a race. */
+static void
+cancel_update(gpointer p, G_GNUC_UNUSED GObject *dialogue)
+{
+ gulong *sid = (gulong*)p;
+
+ if (*sid) {
+ g_source_remove(*sid);
+ *sid = 0;
+ }
+}
+
+static void
+graph_stats_dialogue(GwyGraphModel *parent_gmodel, StatsArgs *args)
+{
+ GtkWidget *dialogue, *hbox, *table, *hbox2, *button, *label;
+ GtkWidget **plabel;
+ GwyGraphArea *area;
+ GwyGraphModel *gmodel;
+ GwySelection *selection;
+ StatsControls controls;
+ gint row;
+ gdouble xrange, min, max;
+ GwySIUnit *xunit;
+ guint i;
+
+ gwy_clear(&controls, 1);
+ controls.args = args;
+ controls.parent_gmodel = parent_gmodel;
+ gmodel = gwy_graph_model_new_alike(parent_gmodel);
+
+ g_object_get(parent_gmodel, "si-unit-x", &xunit, NULL);
+ gwy_graph_model_get_x_range(parent_gmodel, &min, &max);
+ xrange = MAX(fabs(max), fabs(min));
+ controls.xvf
+ = gwy_si_unit_get_format_with_digits(xunit, GWY_SI_UNIT_FORMAT_VFMARKUP,
+ xrange, 3, NULL);
+ g_object_unref(xunit);
+
+ dialogue = gtk_dialog_new_with_buttons(_("Graph Statistics"),
+ NULL, 0, NULL);
+ controls.dialogue = dialogue;
+ gtk_dialog_add_button(GTK_DIALOG(dialogue), GTK_STOCK_OK, GTK_RESPONSE_OK);
+ gtk_dialog_add_button(GTK_DIALOG(dialogue), GTK_STOCK_CANCEL,
+ GTK_RESPONSE_CANCEL);
+ gwy_help_add_to_graph_dialog(GTK_DIALOG(dialogue), GWY_HELP_DEFAULT);
+ gtk_dialog_set_default_response(GTK_DIALOG(dialogue), GTK_RESPONSE_OK);
+
+ hbox = gtk_hbox_new(FALSE, 2);
+ gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialogue)->vbox), hbox,
+ TRUE, TRUE, 0);
+
+ /* Parameters */
+ table = gtk_table_new(6
+ + G_N_ELEMENTS(values_simple)
+ + G_N_ELEMENTS(values_integral),
+ 2, FALSE);
+ gtk_table_set_row_spacings(GTK_TABLE(table), 2);
+ gtk_table_set_col_spacings(GTK_TABLE(table), 6);
+ gtk_box_pack_start(GTK_BOX(hbox), table, FALSE, FALSE, 0);
+ gtk_container_set_border_width(GTK_CONTAINER(table), 4);
+ row = 0;
+
+ controls.curve = gwy_combo_box_graph_curve_new(G_CALLBACK(curve_changed),
+ &controls,
+ parent_gmodel, args->curve);
+ gwy_table_attach_adjbar(table, row, _("_Graph curve:"), NULL,
+ GTK_OBJECT(controls.curve),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
+ row++;
+
+ /* Range */
+ hbox2 = gtk_hbox_new(FALSE, 6);
+ gtk_table_attach(GTK_TABLE(table), hbox2,
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
+ row++;
+
+ label = gtk_label_new(_("Range:"));
+ gtk_box_pack_start(GTK_BOX(hbox2), label, FALSE, FALSE, 0);
+
+ controls.from = gtk_entry_new();
+ g_object_set_data(G_OBJECT(controls.from), "id", (gpointer)"from");
+ gtk_entry_set_width_chars(GTK_ENTRY(controls.from), 8);
+ gtk_box_pack_start(GTK_BOX(hbox2), controls.from, FALSE, FALSE, 0);
+ g_signal_connect(controls.from, "activate",
+ G_CALLBACK(range_changed), &controls);
+ gwy_widget_set_activate_on_unfocus(controls.from, TRUE);
+
+ label = gtk_label_new(gwy_sgettext("range|to"));
+ gtk_box_pack_start(GTK_BOX(hbox2), label, FALSE, FALSE, 0);
+
+ controls.to = gtk_entry_new();
+ g_object_set_data(G_OBJECT(controls.to), "id", (gpointer)"to");
+ gtk_entry_set_width_chars(GTK_ENTRY(controls.to), 8);
+ gtk_box_pack_start(GTK_BOX(hbox2), controls.to, FALSE, FALSE, 0);
+ g_signal_connect(controls.to, "activate",
+ G_CALLBACK(range_changed), &controls);
+ gwy_widget_set_activate_on_unfocus(controls.to, TRUE);
+
+ label = gtk_label_new(NULL);
+ gtk_label_set_markup(GTK_LABEL(label), controls.xvf->units);
+ gtk_box_pack_start(GTK_BOX(hbox2), label, FALSE, FALSE, 0);
+
+ label = gtk_label_new(_("Number of points:"));
+ gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, row, row+1,
+ GTK_EXPAND | GTK_FILL, 0, 0, 0);
+
+ controls.npts = gtk_label_new(NULL);
+ gtk_misc_set_alignment(GTK_MISC(controls.npts), 1.0, 0.5);
+ gtk_label_set_selectable(GTK_LABEL(controls.npts), TRUE);
+ gtk_table_attach(GTK_TABLE(table), controls.npts, 1, 2, row, row+1,
+ GTK_FILL, 0, 0, 0);
+ row++;
+
+ /* Results */
+ gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
+ gtk_table_attach(GTK_TABLE(table),
+ gwy_label_new_header(_("Simple Parameters")),
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
+ row++;
+
+ for (i = 0; i < G_N_ELEMENTS(values_simple); i++) {
+ label = gtk_label_new(_(values_simple[i].name));
+ gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, row, row+1,
+ GTK_EXPAND | GTK_FILL, 0, 0, 0);
+
+ plabel = (GtkWidget**)G_STRUCT_MEMBER_P(&controls,
+ values_simple[i].offset);
+ *plabel = gtk_label_new(NULL);
+ gtk_misc_set_alignment(GTK_MISC(*plabel), 1.0, 0.5);
+ gtk_label_set_selectable(GTK_LABEL(*plabel), TRUE);
+ gtk_table_attach(GTK_TABLE(table), *plabel, 1, 2, row, row+1,
+ GTK_FILL, 0, 0, 0);
+
+ row++;
+ }
+
+ gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
+ gtk_table_attach(GTK_TABLE(table), gwy_label_new_header(_("Integrals")),
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
+ row++;
+
+ for (i = 0; i < G_N_ELEMENTS(values_integral); i++) {
+ label = gtk_label_new(_(values_integral[i].name));
+ gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, row, row+1,
+ GTK_EXPAND | GTK_FILL, 0, 0, 0);
+
+ plabel = (GtkWidget**)G_STRUCT_MEMBER_P(&controls,
+ values_integral[i].offset);
+ *plabel = gtk_label_new(NULL);
+ gtk_misc_set_alignment(GTK_MISC(*plabel), 1.0, 0.5);
+ gtk_label_set_selectable(GTK_LABEL(*plabel), TRUE);
+ gtk_table_attach(GTK_TABLE(table), *plabel, 1, 2, row, row+1,
+ GTK_FILL, 0, 0, 0);
+
+ row++;
+ }
+
+ hbox2 = gtk_hbox_new(FALSE, 0);
+ gtk_table_attach(GTK_TABLE(table), hbox2,
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
+
+ button = add_aux_button(hbox2, GTK_STOCK_SAVE, _("Save table to a file"));
+ g_signal_connect_swapped(button, "clicked",
+ G_CALLBACK(graph_stats_save), &controls);
+
+ button = add_aux_button(hbox2, GTK_STOCK_COPY, _("Copy table to clipboard"));
+ g_signal_connect_swapped(button, "clicked",
+ G_CALLBACK(graph_stats_copy), &controls);
+ row++;
+
+ /* Graph */
+ controls.graph = gwy_graph_new(gmodel);
+ g_object_unref(gmodel);
+ gtk_widget_set_size_request(controls.graph, 400, 300);
+
+ gwy_graph_enable_user_input(GWY_GRAPH(controls.graph), FALSE);
+ gtk_box_pack_start(GTK_BOX(hbox), controls.graph, TRUE, TRUE, 0);
+ gwy_graph_set_status(GWY_GRAPH(controls.graph), GWY_GRAPH_STATUS_XSEL);
+
+ area = GWY_GRAPH_AREA(gwy_graph_get_area(GWY_GRAPH(controls.graph)));
+ selection = gwy_graph_area_get_selection(area, GWY_GRAPH_STATUS_XSEL);
+ gwy_selection_set_max_objects(selection, 1);
+ g_signal_connect(selection, "changed",
+ G_CALLBACK(graph_selected), &controls);
+
+ curve_changed(GTK_COMBO_BOX(controls.curve), &controls);
+ graph_selected(selection, -1, &controls);
+
+ g_object_weak_ref(G_OBJECT(dialogue), cancel_update,
+ &controls.recalculate_id);
+ gtk_widget_show_all(dialogue);
+ gtk_dialog_run(GTK_DIALOG(dialogue));
+ gtk_widget_destroy(dialogue);
+
+ gwy_si_unit_value_format_free(controls.xvf);
+ if (controls.yvf)
+ gwy_si_unit_value_format_free(controls.yvf);
+ if (controls.areavf)
+ gwy_si_unit_value_format_free(controls.areavf);
+ if (controls.lenvf)
+ gwy_si_unit_value_format_free(controls.lenvf);
+ if (controls.varvf)
+ gwy_si_unit_value_format_free(controls.varvf);
+}
+
+static GtkWidget*
+add_aux_button(GtkWidget *hbox,
+ const gchar *stock_id,
+ const gchar *tooltip)
+{
+ GtkTooltips *tips;
+ GtkWidget *button;
+
+ tips = gwy_app_get_tooltips();
+ button = gtk_button_new();
+ gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE);
+ gtk_tooltips_set_tip(tips, button, tooltip, NULL);
+ gtk_container_add(GTK_CONTAINER(button),
+ gtk_image_new_from_stock(stock_id,
+ GTK_ICON_SIZE_SMALL_TOOLBAR));
+ gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 0);
+
+ return button;
+}
+
+static void
+curve_changed(GtkComboBox *combo, StatsControls *controls)
+{
+ StatsArgs *args = controls->args;
+ GwyGraphModel *gmodel;
+ GwyGraphCurveModel *gcmodel;
+
+ args->curve = gwy_enum_combo_box_get_active(combo);
+ gmodel = gwy_graph_get_model(GWY_GRAPH(controls->graph));
+ gwy_graph_model_remove_all_curves(gmodel);
+ gcmodel = gwy_graph_model_get_curve(controls->parent_gmodel, args->curve);
+ if (gwy_graph_curve_model_is_ordered(gcmodel))
+ gwy_graph_model_add_curve(gmodel, gcmodel);
+ else {
+ gcmodel = gwy_graph_curve_model_duplicate(gcmodel);
+ gwy_graph_curve_model_enforce_order(gcmodel);
+ gwy_graph_model_add_curve(gmodel, gcmodel);
+ g_object_unref(gcmodel);
+ }
+ invalidate(controls);
+}
+
+static void
+range_changed(GtkWidget *entry, StatsControls *controls)
+{
+ const gchar *id;
+ gdouble *x, newval;
+
+ id = g_object_get_data(G_OBJECT(entry), "id");
+ if (gwy_strequal(id, "from"))
+ x = &controls->args->from;
+ else
+ x = &controls->args->to;
+
+ newval = atof(gtk_entry_get_text(GTK_ENTRY(entry)));
+ newval *= controls->xvf->magnitude;
+ if (newval == *x)
+ return;
+ *x = newval;
+ stats_limit_selection(controls, FALSE);
+}
+
+static void
+stats_limit_selection(StatsControls *controls, gboolean curve_switch)
+{
+ GwySelection *selection;
+ GwyGraphArea *area;
+ gdouble xmin, xmax;
+
+ area = GWY_GRAPH_AREA(gwy_graph_get_area(GWY_GRAPH(controls->graph)));
+ selection = gwy_graph_area_get_selection(area, GWY_GRAPH_STATUS_XSEL);
+
+ if (curve_switch && !gwy_selection_get_data(selection, NULL)) {
+ graph_selected(selection, -1, controls);
+ return;
+ }
+
+ stats_get_full_x_range(controls, &xmin, &xmax);
+ controls->args->from = CLAMP(controls->args->from, xmin, xmax);
+ controls->args->to = CLAMP(controls->args->to, xmin, xmax);
+
+ if (controls->args->from == xmin && controls->args->to == xmax)
+ gwy_selection_clear(selection);
+ else {
+ gdouble range[2];
+
+ range[0] = controls->args->from;
+ range[1] = controls->args->to;
+ gwy_selection_set_object(selection, 0, range);
+ }
+}
+
+static void
+stats_get_full_x_range(StatsControls *controls,
+ gdouble *xmin, gdouble *xmax)
+{
+ GwyGraphModel *gmodel;
+ GwyGraphCurveModel *gcmodel;
+
+ gmodel = gwy_graph_get_model(GWY_GRAPH(controls->graph));
+ gcmodel = gwy_graph_model_get_curve(gmodel, 0);
+ gwy_graph_curve_model_get_x_range(gcmodel, xmin, xmax);
+}
+
+static void
+graph_selected(GwySelection* selection,
+ gint i,
+ StatsControls *controls)
+{
+ GwySIValueFormat *xvf = controls->xvf;
+ StatsArgs *args;
+ gchar buffer[24];
+ gdouble range[2];
+ gint nselections;
+ gdouble power10;
+
+ g_return_if_fail(i <= 0);
+
+ args = controls->args;
+ nselections = gwy_selection_get_data(selection, NULL);
+ gwy_selection_get_object(selection, 0, range);
+
+ if (nselections <= 0 || range[0] == range[1])
+ stats_get_full_x_range(controls, &args->from, &args->to);
+ else {
+ args->from = MIN(range[0], range[1]);
+ args->to = MAX(range[0], range[1]);
+ }
+ power10 = pow10(xvf->precision);
+ g_snprintf(buffer, sizeof(buffer), "%.*f",
+ xvf->precision,
+ floor(args->from*power10/xvf->magnitude)/power10);
+ gtk_entry_set_text(GTK_ENTRY(controls->from), buffer);
+ g_snprintf(buffer, sizeof(buffer), "%.*f",
+ xvf->precision,
+ ceil(args->to*power10/xvf->magnitude)/power10);
+ gtk_entry_set_text(GTK_ENTRY(controls->to), buffer);
+
+ invalidate(controls);
+}
+
+static void
+invalidate(StatsControls *controls)
+{
+ if (controls->recalculate_id)
+ return;
+
+ controls->recalculate_id = g_idle_add(update_stats_table, controls);
+}
+
+static void
+update_label(GwySIValueFormat *units,
+ GtkWidget *label,
+ gdouble value)
+{
+ static gchar buffer[64];
+
+ g_return_if_fail(units);
+ g_return_if_fail(GTK_IS_LABEL(label));
+
+ g_snprintf(buffer, sizeof(buffer), "%.*f%s%s",
+ units->precision, value/units->magnitude,
+ *units->units ? " " : "", units->units);
+ gtk_label_set_markup(GTK_LABEL(label), buffer);
+}
+
+static gboolean
+update_stats_table(gpointer user_data)
+{
+ StatsControls *controls = (StatsControls*)user_data;
+ StatsArgs *args = controls->args;
+ StatsResults *stats = &controls->stats;
+ GwyGraphModel *gmodel;
+ GwyGraphCurveModel *gcmodel;
+ GwySIUnit *xunit = NULL, *yunit = NULL, *areaunit = NULL;
+ gboolean same_units;
+ gchar buffer[64];
+
+ gmodel = gwy_graph_get_model(GWY_GRAPH(controls->graph));
+ gcmodel = gwy_graph_model_get_curve(gmodel, 0);
+ compute_stats(gcmodel, &controls->stats, args->from, args->to);
+
+ g_snprintf(buffer, sizeof(buffer), "%u", stats->npts);
+ gtk_label_set_text(GTK_LABEL(controls->npts), buffer);
+
+ if (stats->npts < 2) {
+ gtk_label_set_text(GTK_LABEL(controls->ra), NULL);
+ gtk_label_set_text(GTK_LABEL(controls->rms), NULL);
+ gtk_label_set_text(GTK_LABEL(controls->skew), NULL);
+ gtk_label_set_text(GTK_LABEL(controls->kurtosis), NULL);
+ gtk_label_set_text(GTK_LABEL(controls->projlen), NULL);
+ gtk_label_set_text(GTK_LABEL(controls->length), NULL);
+ gtk_label_set_text(GTK_LABEL(controls->variation), NULL);
+ gtk_label_set_text(GTK_LABEL(controls->integralavg), NULL);
+ gtk_label_set_text(GTK_LABEL(controls->integral), NULL);
+ gtk_label_set_text(GTK_LABEL(controls->integralp), NULL);
+ gtk_label_set_text(GTK_LABEL(controls->integraln), NULL);
+ gtk_label_set_text(GTK_LABEL(controls->integral2), NULL);
+ }
+
+ if (stats->npts < 1) {
+ gtk_label_set_text(GTK_LABEL(controls->min), NULL);
+ gtk_label_set_text(GTK_LABEL(controls->max), NULL);
+ gtk_label_set_text(GTK_LABEL(controls->avg), NULL);
+ gtk_label_set_text(GTK_LABEL(controls->median), NULL);
+ goto finish;
+ }
+
+ g_object_get(gmodel,
+ "si-unit-x", &xunit,
+ "si-unit-y", &yunit,
+ NULL);
+ same_units = gwy_si_unit_equal(xunit, yunit);
+ areaunit = gwy_si_unit_multiply(xunit, yunit, NULL);
+
+ controls->yvf
+ = gwy_si_unit_get_format_with_digits(yunit, GWY_SI_UNIT_FORMAT_VFMARKUP,
+ MAX(fabs(stats->min),
+ fabs(stats->max)),
+ 3, controls->yvf);
+ controls->areavf
+ = gwy_si_unit_get_format_with_digits(areaunit,
+ GWY_SI_UNIT_FORMAT_VFMARKUP,
+ MAX(fabs(stats->integralp),
+ fabs(stats->integraln)),
+ 3, controls->areavf);
+ controls->lenvf
+ = gwy_si_unit_get_format_with_digits(xunit,
+ GWY_SI_UNIT_FORMAT_VFMARKUP,
+ stats->length, 3, controls->lenvf);
+ controls->varvf
+ = gwy_si_unit_get_format_with_digits(xunit,
+ GWY_SI_UNIT_FORMAT_VFMARKUP,
+ stats->variation,
+ 3, controls->varvf);
+
+ update_label(controls->yvf, controls->min, stats->min);
+ update_label(controls->yvf, controls->max, stats->max);
+ update_label(controls->yvf, controls->avg, stats->avg);
+ update_label(controls->yvf, controls->median, stats->median);
+ update_label(controls->yvf, controls->rms, stats->rms);
+ update_label(controls->yvf, controls->ra, stats->ra);
+
+ g_snprintf(buffer, sizeof(buffer), "%.3g", stats->skew);
+ gtk_label_set_text(GTK_LABEL(controls->skew), buffer);
+ g_snprintf(buffer, sizeof(buffer), "%.3g", stats->kurtosis);
+ gtk_label_set_text(GTK_LABEL(controls->kurtosis), buffer);
+
+ update_label(controls->xvf, controls->projlen, stats->projlen);
+ if (same_units)
+ update_label(controls->lenvf, controls->length, stats->length);
+ else
+ gtk_label_set_text(GTK_LABEL(controls->length), _("N.A."));
+
+ update_label(controls->varvf, controls->variation, stats->variation);
+ update_label(controls->yvf, controls->integralavg, stats->integralavg);
+ update_label(controls->areavf, controls->integral, stats->integral);
+ update_label(controls->areavf, controls->integralp, stats->integralp);
+ update_label(controls->areavf, controls->integraln, stats->integraln);
+ update_label(controls->yvf, controls->integral2, stats->integral2);
+
+finish:
+ GWY_OBJECT_UNREF(areaunit);
+ GWY_OBJECT_UNREF(yunit);
+ GWY_OBJECT_UNREF(xunit);
+
+ controls->recalculate_id = 0;
+ return FALSE;
+}
+
+static void
+graph_stats_save(StatsControls *controls)
+{
+ gchar *text = format_report(controls);
+
+ gwy_save_auxiliary_data(_("Save Curve Statistics"),
+ GTK_WINDOW(controls->dialogue),
+ -1, text);
+ g_free(text);
+}
+
+static void
+graph_stats_copy(StatsControls *controls)
+{
+ GtkClipboard *clipboard;
+ GdkDisplay *display;
+ gchar *text = format_report(controls);
+
+ display = gtk_widget_get_display(controls->dialogue);
+ clipboard = gtk_clipboard_get_for_display(display, GDK_SELECTION_CLIPBOARD);
+ gtk_clipboard_set_text(clipboard, text, -1);
+ g_free(text);
+}
+
+static void
+append_report_line_label(GString *report, const gchar *label, guint width)
+{
+ guint len = g_utf8_strlen(label, -1);
+
+ g_string_append(report, label);
+ while (len++ < width)
+ g_string_append_c(report, ' ');
+}
+
+static void
+append_report_line_vf(GString *report, const gchar *label, gdouble value,
+ GwySIValueFormat *vf, guint width)
+{
+ append_report_line_label(report, label, width);
+ g_string_append_printf(report, "%.*f%s%s\n",
+ vf->precision + 1, value/vf->magnitude,
+ *vf->units ? " " : "", vf->units);
+}
+
+static void
+append_report_line_plain(GString *report, const gchar *label, gdouble value,
+ const gchar *format, guint width)
+{
+ append_report_line_label(report, label, width);
+ g_string_append_printf(report, format, value);
+ g_string_append_c(report, '\n');
+}
+
+static gchar*
+format_report(StatsControls *controls)
+{
+ StatsResults *stats = &controls->stats;
+ StatsArgs *args = controls->args;
+ const StatsLabel *labels;
+ GString *report = g_string_new(NULL);
+ GwySIValueFormat *xvf, *yvf, *areavf, *lenvf, *varvf;
+ GwySIUnit *xunit = NULL, *yunit = NULL, *areaunit = NULL;
+ GwyGraphModel *gmodel = gwy_graph_get_model(GWY_GRAPH(controls->graph));
+ GwyGraphCurveModel *gcmodel;
+ gdouble xrange, min, max;
+ gboolean same_units;
+ guint maxw, i;
+
+ if (controls->recalculate_id) {
+ gcmodel = gwy_graph_model_get_curve(gmodel, 0);
+ g_source_remove(controls->recalculate_id);
+ controls->recalculate_id = 0;
+ compute_stats(gcmodel, &controls->stats, args->from, args->to);
+ }
+
+ maxw = g_utf8_strlen(_("Number of points:"), -1);
+ labels = values_simple;
+ for (i = 0; i < G_N_ELEMENTS(values_simple); i++) {
+ guint len = g_utf8_strlen(_(labels[i].name), -1);
+ maxw = MAX(maxw, len);
+ }
+ labels = values_integral;
+ for (i = 0; i < G_N_ELEMENTS(values_integral); i++) {
+ guint len = g_utf8_strlen(_(labels[i].name), -1);
+ maxw = MAX(maxw, len);
+ }
+ maxw++;
+
+ g_object_get(gmodel,
+ "si-unit-x", &xunit,
+ "si-unit-y", &yunit,
+ NULL);
+ same_units = gwy_si_unit_equal(xunit, yunit);
+ areaunit = gwy_si_unit_multiply(xunit, yunit, NULL);
+
+ gwy_graph_model_get_x_range(gmodel, &min, &max);
+ xrange = MAX(fabs(max), fabs(min));
+ xvf = gwy_si_unit_get_format_with_digits(xunit, GWY_SI_UNIT_FORMAT_PLAIN,
+ xrange, 3, NULL);
+ yvf = gwy_si_unit_get_format_with_digits(yunit, GWY_SI_UNIT_FORMAT_PLAIN,
+ MAX(fabs(stats->min),
+ fabs(stats->max)), 3, NULL);
+ areavf = gwy_si_unit_get_format_with_digits(areaunit,
+ GWY_SI_UNIT_FORMAT_PLAIN,
+ MAX(fabs(stats->integralp),
+ fabs(stats->integraln)),
+ 3, NULL);
+ lenvf = gwy_si_unit_get_format_with_digits(xunit, GWY_SI_UNIT_FORMAT_PLAIN,
+ stats->length, 3, NULL);
+ varvf = gwy_si_unit_get_format_with_digits(xunit, GWY_SI_UNIT_FORMAT_PLAIN,
+ stats->variation, 3, NULL);
+
+ append_report_line_label(report, _("Range:"), maxw);
+ g_string_append_printf(report, "%.*f %s %.*f %s\n",
+ xvf->precision, args->from/xvf->magnitude,
+ gwy_sgettext("range|to"),
+ xvf->precision, args->to/xvf->magnitude,
+ xvf->units);
+
+ append_report_line_plain(report, _("Number of points:"), stats->npts,
+ "%.0f", maxw);
+ g_string_append_c(report, '\n');
+
+ if (stats->npts < 1)
+ goto finish;
+
+ append_report_line_label(report, _("Simple Parameters"), maxw);
+ g_string_append_c(report, '\n');
+
+ labels = values_simple;
+ append_report_line_vf(report, _(labels[0].name), stats->min, yvf, maxw);
+ append_report_line_vf(report, _(labels[1].name), stats->max, yvf, maxw);
+ append_report_line_vf(report, _(labels[2].name), stats->avg, yvf, maxw);
+ append_report_line_vf(report, _(labels[3].name), stats->median, yvf, maxw);
+ if (stats->npts < 2)
+ goto finish;
+
+ append_report_line_vf(report, _(labels[4].name), stats->ra, yvf, maxw);
+ append_report_line_vf(report, _(labels[5].name), stats->rms, yvf, maxw);
+ append_report_line_plain(report, _(labels[6].name),
+ stats->skew, "%.4g", maxw);
+ append_report_line_plain(report, _(labels[7].name),
+ stats->kurtosis, "%.4g", maxw);
+ g_string_append_c(report, '\n');
+
+ append_report_line_label(report, _("Integrals"), maxw);
+ g_string_append_c(report, '\n');
+
+ labels = values_integral;
+ append_report_line_vf(report, _(labels[0].name), stats->projlen, xvf, maxw);
+ if (same_units) {
+ append_report_line_vf(report, _(labels[1].name), stats->length,
+ lenvf, maxw);
+ }
+ append_report_line_vf(report, _(labels[2].name), stats->variation,
+ varvf, maxw);
+ append_report_line_vf(report, _(labels[3].name), stats->integralavg,
+ yvf, maxw);
+ append_report_line_vf(report, _(labels[4].name), stats->integral,
+ areavf, maxw);
+ append_report_line_vf(report, _(labels[5].name), stats->integralp,
+ areavf, maxw);
+ append_report_line_vf(report, _(labels[6].name), stats->integraln,
+ areavf, maxw);
+ append_report_line_vf(report, _(labels[7].name), stats->integral2,
+ controls->yvf, maxw);
+
+finish:
+ g_object_unref(xunit);
+ g_object_unref(yunit);
+ g_object_unref(areaunit);
+ gwy_si_unit_value_format_free(xvf);
+ gwy_si_unit_value_format_free(yvf);
+ gwy_si_unit_value_format_free(areavf);
+ gwy_si_unit_value_format_free(lenvf);
+ gwy_si_unit_value_format_free(varvf);
+
+ return g_string_free(report, FALSE);
+}
+
+static void
+compute_stats(GwyGraphCurveModel *gcmodel,
+ StatsResults *stats,
+ gdouble from, gdouble to)
+{
+ GwyDataLine *dline;
+ const gdouble *xdata, *ydata;
+ guint ndata, i, pos, len;
+
+ gwy_clear(stats, 1);
+ xdata = gwy_graph_curve_model_get_xdata(gcmodel);
+ ydata = gwy_graph_curve_model_get_ydata(gcmodel);
+ ndata = gwy_graph_curve_model_get_ndata(gcmodel);
+
+ for (pos = 0; pos < ndata && xdata[pos] < from; pos++)
+ pos++;
+ for (len = ndata; len && xdata[len-1] > to; len--)
+ len--;
+
+ if (len <= pos)
+ return;
+
+ len -= pos;
+ stats->pos = pos;
+ stats->npts = len;
+
+ /* Calculate simple quantities only depending on the value distribution
+ * using DataLine methods. */
+ dline = gwy_data_line_new(len, 1.0, FALSE);
+ gwy_assign(gwy_data_line_get_data(dline), ydata + pos, len);
+ gwy_data_line_get_min_max(dline, &stats->min, &stats->max);
+ stats->avg = gwy_data_line_get_avg(dline);
+ stats->median = gwy_data_line_get_median(dline);
+ if (len > 1) {
+ stats->rms = gwy_data_line_get_rms(dline);
+ stats->ra = gwy_data_line_get_ra(dline);
+ stats->skew = gwy_data_line_get_skew(dline);
+ stats->kurtosis = gwy_data_line_get_kurtosis(dline);
+ }
+ g_object_unref(dline);
+ if (len < 2)
+ return;
+
+ stats->projlen = xdata[pos + len-1] - xdata[pos];
+ for (i = 0; i < len-1; i++) {
+ gdouble y1 = ydata[pos + i], y2 = ydata[pos + i+1];
+ gdouble dx = xdata[pos + i+1] - xdata[pos + i];
+ gdouble x, dpos = 0.0, dneg = 0.0, d2 = 0.0;
+
+ stats->length += sqrt((y2 - y1)*(y2 - y1) + dx*dx);
+ stats->variation += fabs(y2 - y1);
+ if (dx <= 0.0)
+ continue;
+
+ if (y1 >= 0.0 && y2 >= 0.0) {
+ dpos = (y1 + y2)*dx;
+ d2 = (y1*y1 + y2*y2)*dx;
+ }
+ else if (y1 <= 0.0 && y2 <= 0.0) {
+ dneg = (y1 + y2)*dx;
+ d2 = (y1*y1 + y2*y2)*dx;
+ }
+ else if (y1 > 0.0 && y2 < 0.0) {
+ x = y1/(y1 - y2)*dx;
+ dpos = y1*x;
+ dneg = y2*(dx - x);
+ d2 = (y1*y1*x + y2*y2*(dx - x));
+ }
+ else if (y1 < 0.0 && y2 > 0.0) {
+ x = y2/(y2 - y1)*dx;
+ dpos = y2*x;
+ dneg = y1*(dx - x);
+ d2 = (y1*y1*(dx - x) + y2*y2*x);
+ }
+ else {
+ g_warning("Impossible curve value signs.");
+ continue;
+ }
+ stats->integralp += dpos;
+ stats->integraln += dneg;
+ stats->integral += dpos + dneg;
+ stats->integral2 += d2;
+ }
+
+ stats->integralp *= 0.5;
+ stats->integraln *= 0.5;
+ stats->integral *= 0.5;
+ stats->integral2 *= 0.5;
+ stats->integralavg = stats->integral/stats->projlen;
+ stats->integral2 = sqrt(stats->integral2/stats->projlen);
+}
+
+/* vim: set cin et ts=4 sw=4 cino=>1s,e0,n0,f0,{0,}0,^0,\:1s,=0,g1s,h0,t0,+1s,c3,(0,u0 : */
diff --git a/modules/layer/Makefile.am b/modules/layer/Makefile.am
index e38333d..bef554b 100644
--- a/modules/layer/Makefile.am
+++ b/modules/layer/Makefile.am
@@ -1,8 +1,11 @@
-# @(#) $Id: Makefile.am 18127 2016-01-19 15:51:06Z yeti-dn $
+# @(#) $Id: Makefile.am 20001 2017-06-29 21:52:24Z yeti-dn $
layerdir = $(pkglibdir)/modules/layer
-layer_LTLIBRARIES = \
+# Only bundle modules without own dependencies. If something goes wrong with
+# any required libraries at run-time, it will at most break these individual
+# unbundled modules, not the bundle.
+bundlable_modules = \
axis.la \
ellipse.la \
lattice.la \
@@ -11,6 +14,18 @@ layer_LTLIBRARIES = \
point.la \
rectangle.la
+# layer_modules is either the bundle or all the individual modules.
+if MODULE_BUNDLING
+layer_modules = layer.la
+BUILT_SOURCES = layer.c
+layer_la_CFLAGS = $(AM_CFLAGS) -DGWY_MODULE_BUNDLING
+else
+layer_modules = $(bundlable_modules)
+endif
+
+layer_LTLIBRARIES = \
+ $(layer_modules)
+
noinst_HEADERS = \
layer.h
@@ -18,10 +33,6 @@ if OS_MSWIN
no_undefined = -no-undefined
endif
-AM_CPPFLAGS = -I$(top_srcdir) -DG_LOG_DOMAIN=\"Module\"
-AM_CFLAGS = @COMMON_CFLAGS@
-AM_LDFLAGS = -avoid-version -module $(no_undefined) $(module_libadd)
-
if MODULE_DEPENDENCIES
module_libadd = \
$(top_builddir)/app/libgwyapp2.la \
@@ -33,6 +44,11 @@ module_libadd = \
@GTK_LIBS@
endif
+AM_CPPFLAGS = -I$(top_srcdir) -DG_LOG_DOMAIN=\"Module\"
+AM_CFLAGS = @COMMON_CFLAGS@
+AM_LDFLAGS = -avoid-version -module $(no_undefined) $(module_libadd)
+
+# Bundlable modules, must be listed in layer_la_SOURCES below.
axis_la_SOURCES = axis.c
ellipse_la_SOURCES = ellipse.c
lattice_la_SOURCES = lattice.c
@@ -41,5 +57,21 @@ path_la_SOURCES = path.c
point_la_SOURCES = point.c
rectangle_la_SOURCES = rectangle.c
+layer_la_SOURCES = \
+ $(axis_la_SOURCES) \
+ $(ellipse_la_SOURCES) \
+ $(lattice_la_SOURCES) \
+ $(line_la_SOURCES) \
+ $(path_la_SOURCES) \
+ $(point_la_SOURCES) \
+ $(rectangle_la_SOURCES) \
+ layer.h \
+ layer.c
+
+layer.c: $(srcdir)/Makefile.am $(top_srcdir)/utils/gen-module-bundle.sh
+ $(SHELL) $(top_srcdir)/utils/gen-module-bundle.sh layer.c $(bundlable_modules)
+
+CLEAN_FILES = layer.c
+
clean-local:
rm -f core.* *~
diff --git a/modules/layer/Makefile.in b/modules/layer/Makefile.in
index d15f693..b3177a8 100644
--- a/modules/layer/Makefile.in
+++ b/modules/layer/Makefile.in
@@ -14,7 +14,7 @@
@SET_MAKE@
-# @(#) $Id: Makefile.am 18127 2016-01-19 15:51:06Z yeti-dn $
+# @(#) $Id: Makefile.am 20001 2017-06-29 21:52:24Z yeti-dn $
VPATH = @srcdir@
@@ -147,24 +147,47 @@ AM_V_lt = $(am__v_lt_ at AM_V@)
am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
am__v_lt_0 = --silent
am__v_lt_1 =
+ at MODULE_BUNDLING_FALSE@am_axis_la_rpath = -rpath $(layerdir)
ellipse_la_LIBADD =
am_ellipse_la_OBJECTS = ellipse.lo
ellipse_la_OBJECTS = $(am_ellipse_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_ellipse_la_rpath = -rpath $(layerdir)
lattice_la_LIBADD =
am_lattice_la_OBJECTS = lattice.lo
lattice_la_OBJECTS = $(am_lattice_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_lattice_la_rpath = -rpath $(layerdir)
+layer_la_LIBADD =
+am__objects_1 = layer_la-axis.lo
+am__objects_2 = layer_la-ellipse.lo
+am__objects_3 = layer_la-lattice.lo
+am__objects_4 = layer_la-line.lo
+am__objects_5 = layer_la-path.lo
+am__objects_6 = layer_la-point.lo
+am__objects_7 = layer_la-rectangle.lo
+am_layer_la_OBJECTS = $(am__objects_1) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4) $(am__objects_5) \
+ $(am__objects_6) $(am__objects_7) layer_la-layer.lo
+layer_la_OBJECTS = $(am_layer_la_OBJECTS)
+layer_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(layer_la_CFLAGS) \
+ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+ at MODULE_BUNDLING_TRUE@am_layer_la_rpath = -rpath $(layerdir)
line_la_LIBADD =
am_line_la_OBJECTS = line.lo
line_la_OBJECTS = $(am_line_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_line_la_rpath = -rpath $(layerdir)
path_la_LIBADD =
am_path_la_OBJECTS = path.lo
path_la_OBJECTS = $(am_path_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_path_la_rpath = -rpath $(layerdir)
point_la_LIBADD =
am_point_la_OBJECTS = point.lo
point_la_OBJECTS = $(am_point_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_point_la_rpath = -rpath $(layerdir)
rectangle_la_LIBADD =
am_rectangle_la_OBJECTS = rectangle.lo
rectangle_la_OBJECTS = $(am_rectangle_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_rectangle_la_rpath = -rpath $(layerdir)
AM_V_P = $(am__v_P_ at AM_V@)
am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
am__v_P_0 = false
@@ -200,11 +223,11 @@ am__v_CCLD_ = $(am__v_CCLD_ at AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
SOURCES = $(axis_la_SOURCES) $(ellipse_la_SOURCES) \
- $(lattice_la_SOURCES) $(line_la_SOURCES) $(path_la_SOURCES) \
- $(point_la_SOURCES) $(rectangle_la_SOURCES)
+ $(lattice_la_SOURCES) $(layer_la_SOURCES) $(line_la_SOURCES) \
+ $(path_la_SOURCES) $(point_la_SOURCES) $(rectangle_la_SOURCES)
DIST_SOURCES = $(axis_la_SOURCES) $(ellipse_la_SOURCES) \
- $(lattice_la_SOURCES) $(line_la_SOURCES) $(path_la_SOURCES) \
- $(point_la_SOURCES) $(rectangle_la_SOURCES)
+ $(lattice_la_SOURCES) $(layer_la_SOURCES) $(line_la_SOURCES) \
+ $(path_la_SOURCES) $(point_la_SOURCES) $(rectangle_la_SOURCES)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
@@ -271,10 +294,7 @@ EPYDOC = @EPYDOC@
EXEEXT = @EXEEXT@
EXR_CFLAGS = @EXR_CFLAGS@
EXR_LIBS = @EXR_LIBS@
-FFTW3_1_CFLAGS = @FFTW3_1_CFLAGS@
-FFTW3_1_LIBS = @FFTW3_1_LIBS@
FFTW3_CFLAGS = @FFTW3_CFLAGS@
-FFTW3_DEPENDENCY = @FFTW3_DEPENDENCY@
FFTW3_LIBS = @FFTW3_LIBS@
FGREP = @FGREP@
GCONFTOOL = @GCONFTOOL@
@@ -284,6 +304,8 @@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
GLIBC21 = @GLIBC21@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GMODULE_CFLAGS = @GMODULE_CFLAGS@
GMODULE_LIBS = @GMODULE_LIBS@
GMSGFMT = @GMSGFMT@
@@ -308,7 +330,9 @@ GTK_MAC_LIBS = @GTK_MAC_LIBS@
GWY_VERSION_MAJOR = @GWY_VERSION_MAJOR@
GWY_VERSION_MINOR = @GWY_VERSION_MINOR@
GWY_VERSION_STRING = @GWY_VERSION_STRING@
+HDRIMAGE_EXTRA_CFLAGS = @HDRIMAGE_EXTRA_CFLAGS@
HTML_DIR = @HTML_DIR@
+INKSCAPE = @INKSCAPE@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -366,6 +390,7 @@ PASCAL = @PASCAL@
PATH_SEPARATOR = @PATH_SEPARATOR@
PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
+PNGCRUSH = @PNGCRUSH@
PNG_CFLAGS = @PNG_CFLAGS@
PNG_LIBS = @PNG_LIBS@
POD2MAN = @POD2MAN@
@@ -374,17 +399,13 @@ PYGTK_CFLAGS = @PYGTK_CFLAGS@
PYGTK_CODEGENDIR = @PYGTK_CODEGENDIR@
PYGTK_LIBS = @PYGTK_LIBS@
PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
PYTHON_EXTRA_CFLAGS = @PYTHON_EXTRA_CFLAGS@
PYTHON_INCLUDES = @PYTHON_INCLUDES@
-PYTHON_LIBS = @PYTHON_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
PYTHON_PLATFORM = @PYTHON_PLATFORM@
PYTHON_PREFIX = @PYTHON_PREFIX@
-PYTHON_SYSCFG_BASECFLAGS = @PYTHON_SYSCFG_BASECFLAGS@
-PYTHON_SYSCFG_CCSHARED = @PYTHON_SYSCFG_CCSHARED@
-PYTHON_SYSCFG_LDFLAGS = @PYTHON_SYSCFG_LDFLAGS@
-PYTHON_SYSCFG_LIBDIR = @PYTHON_SYSCFG_LIBDIR@
-PYTHON_SYSCFG_LINKFORSHARED = @PYTHON_SYSCFG_LINKFORSHARED@
PYTHON_VERSION = @PYTHON_VERSION@
RANLIB = @RANLIB@
RUBY = @RUBY@
@@ -470,7 +491,11 @@ top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
layerdir = $(pkglibdir)/modules/layer
-layer_LTLIBRARIES = \
+
+# Only bundle modules without own dependencies. If something goes wrong with
+# any required libraries at run-time, it will at most break these individual
+# unbundled modules, not the bundle.
+bundlable_modules = \
axis.la \
ellipse.la \
lattice.la \
@@ -479,13 +504,19 @@ layer_LTLIBRARIES = \
point.la \
rectangle.la
+ at MODULE_BUNDLING_FALSE@layer_modules = $(bundlable_modules)
+
+# layer_modules is either the bundle or all the individual modules.
+ at MODULE_BUNDLING_TRUE@layer_modules = layer.la
+ at MODULE_BUNDLING_TRUE@BUILT_SOURCES = layer.c
+ at MODULE_BUNDLING_TRUE@layer_la_CFLAGS = $(AM_CFLAGS) -DGWY_MODULE_BUNDLING
+layer_LTLIBRARIES = \
+ $(layer_modules)
+
noinst_HEADERS = \
layer.h
@OS_MSWIN_TRUE at no_undefined = -no-undefined
-AM_CPPFLAGS = -I$(top_srcdir) -DG_LOG_DOMAIN=\"Module\"
-AM_CFLAGS = @COMMON_CFLAGS@
-AM_LDFLAGS = -avoid-version -module $(no_undefined) $(module_libadd)
@MODULE_DEPENDENCIES_TRUE at module_libadd = \
@MODULE_DEPENDENCIES_TRUE@ $(top_builddir)/app/libgwyapp2.la \
@MODULE_DEPENDENCIES_TRUE@ $(top_builddir)/libdraw/libgwydraw2.la \
@@ -495,6 +526,11 @@ AM_LDFLAGS = -avoid-version -module $(no_undefined) $(module_libadd)
@MODULE_DEPENDENCIES_TRUE@ $(top_builddir)/libprocess/libgwyprocess2.la \
@MODULE_DEPENDENCIES_TRUE@ @GTK_LIBS@
+AM_CPPFLAGS = -I$(top_srcdir) -DG_LOG_DOMAIN=\"Module\"
+AM_CFLAGS = @COMMON_CFLAGS@
+AM_LDFLAGS = -avoid-version -module $(no_undefined) $(module_libadd)
+
+# Bundlable modules, must be listed in layer_la_SOURCES below.
axis_la_SOURCES = axis.c
ellipse_la_SOURCES = ellipse.c
lattice_la_SOURCES = lattice.c
@@ -502,7 +538,20 @@ line_la_SOURCES = line.c
path_la_SOURCES = path.c
point_la_SOURCES = point.c
rectangle_la_SOURCES = rectangle.c
-all: all-am
+layer_la_SOURCES = \
+ $(axis_la_SOURCES) \
+ $(ellipse_la_SOURCES) \
+ $(lattice_la_SOURCES) \
+ $(line_la_SOURCES) \
+ $(path_la_SOURCES) \
+ $(point_la_SOURCES) \
+ $(rectangle_la_SOURCES) \
+ layer.h \
+ layer.c
+
+CLEAN_FILES = layer.c
+all: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) all-am
.SUFFIXES:
.SUFFIXES: .c .lo .o .obj
@@ -572,25 +621,28 @@ clean-layerLTLIBRARIES:
}
axis.la: $(axis_la_OBJECTS) $(axis_la_DEPENDENCIES) $(EXTRA_axis_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(layerdir) $(axis_la_OBJECTS) $(axis_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_axis_la_rpath) $(axis_la_OBJECTS) $(axis_la_LIBADD) $(LIBS)
ellipse.la: $(ellipse_la_OBJECTS) $(ellipse_la_DEPENDENCIES) $(EXTRA_ellipse_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(layerdir) $(ellipse_la_OBJECTS) $(ellipse_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_ellipse_la_rpath) $(ellipse_la_OBJECTS) $(ellipse_la_LIBADD) $(LIBS)
lattice.la: $(lattice_la_OBJECTS) $(lattice_la_DEPENDENCIES) $(EXTRA_lattice_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(layerdir) $(lattice_la_OBJECTS) $(lattice_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_lattice_la_rpath) $(lattice_la_OBJECTS) $(lattice_la_LIBADD) $(LIBS)
+
+layer.la: $(layer_la_OBJECTS) $(layer_la_DEPENDENCIES) $(EXTRA_layer_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(layer_la_LINK) $(am_layer_la_rpath) $(layer_la_OBJECTS) $(layer_la_LIBADD) $(LIBS)
line.la: $(line_la_OBJECTS) $(line_la_DEPENDENCIES) $(EXTRA_line_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(layerdir) $(line_la_OBJECTS) $(line_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_line_la_rpath) $(line_la_OBJECTS) $(line_la_LIBADD) $(LIBS)
path.la: $(path_la_OBJECTS) $(path_la_DEPENDENCIES) $(EXTRA_path_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(layerdir) $(path_la_OBJECTS) $(path_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_path_la_rpath) $(path_la_OBJECTS) $(path_la_LIBADD) $(LIBS)
point.la: $(point_la_OBJECTS) $(point_la_DEPENDENCIES) $(EXTRA_point_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(layerdir) $(point_la_OBJECTS) $(point_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_point_la_rpath) $(point_la_OBJECTS) $(point_la_LIBADD) $(LIBS)
rectangle.la: $(rectangle_la_OBJECTS) $(rectangle_la_DEPENDENCIES) $(EXTRA_rectangle_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(layerdir) $(rectangle_la_OBJECTS) $(rectangle_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_rectangle_la_rpath) $(rectangle_la_OBJECTS) $(rectangle_la_LIBADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@@ -601,6 +653,14 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/axis.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ellipse.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lattice.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/layer_la-axis.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/layer_la-ellipse.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/layer_la-lattice.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/layer_la-layer.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/layer_la-line.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/layer_la-path.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/layer_la-point.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/layer_la-rectangle.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/line.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/path.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/point.Plo at am__quote@
@@ -627,6 +687,62 @@ distclean-compile:
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LTCOMPILE) -c -o $@ $<
+layer_la-axis.lo: axis.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(layer_la_CFLAGS) $(CFLAGS) -MT layer_la-axis.lo -MD -MP -MF $(DEPDIR)/layer_la-axis.Tpo -c -o layer_la-axis.lo `test -f 'axis.c' || echo '$(srcdir)/'`axis.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/layer_la-axis.Tpo $(DEPDIR)/layer_la-axis.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='axis.c' object='layer_la-axis.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(layer_la_CFLAGS) $(CFLAGS) -c -o layer_la-axis.lo `test -f 'axis.c' || echo '$(srcdir)/'`axis.c
+
+layer_la-ellipse.lo: ellipse.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(layer_la_CFLAGS) $(CFLAGS) -MT layer_la-ellipse.lo -MD -MP -MF $(DEPDIR)/layer_la-ellipse.Tpo -c -o layer_la-ellipse.lo `test -f 'ellipse.c' || echo '$(srcdir)/'`ellipse.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/layer_la-ellipse.Tpo $(DEPDIR)/layer_la-ellipse.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ellipse.c' object='layer_la-ellipse.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(layer_la_CFLAGS) $(CFLAGS) -c -o layer_la-ellipse.lo `test -f 'ellipse.c' || echo '$(srcdir)/'`ellipse.c
+
+layer_la-lattice.lo: lattice.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(layer_la_CFLAGS) $(CFLAGS) -MT layer_la-lattice.lo -MD -MP -MF $(DEPDIR)/layer_la-lattice.Tpo -c -o layer_la-lattice.lo `test -f 'lattice.c' || echo '$(srcdir)/'`lattice.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/layer_la-lattice.Tpo $(DEPDIR)/layer_la-lattice.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lattice.c' object='layer_la-lattice.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(layer_la_CFLAGS) $(CFLAGS) -c -o layer_la-lattice.lo `test -f 'lattice.c' || echo '$(srcdir)/'`lattice.c
+
+layer_la-line.lo: line.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(layer_la_CFLAGS) $(CFLAGS) -MT layer_la-line.lo -MD -MP -MF $(DEPDIR)/layer_la-line.Tpo -c -o layer_la-line.lo `test -f 'line.c' || echo '$(srcdir)/'`line.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/layer_la-line.Tpo $(DEPDIR)/layer_la-line.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='line.c' object='layer_la-line.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(layer_la_CFLAGS) $(CFLAGS) -c -o layer_la-line.lo `test -f 'line.c' || echo '$(srcdir)/'`line.c
+
+layer_la-path.lo: path.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(layer_la_CFLAGS) $(CFLAGS) -MT layer_la-path.lo -MD -MP -MF $(DEPDIR)/layer_la-path.Tpo -c -o layer_la-path.lo `test -f 'path.c' || echo '$(srcdir)/'`path.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/layer_la-path.Tpo $(DEPDIR)/layer_la-path.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='path.c' object='layer_la-path.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(layer_la_CFLAGS) $(CFLAGS) -c -o layer_la-path.lo `test -f 'path.c' || echo '$(srcdir)/'`path.c
+
+layer_la-point.lo: point.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(layer_la_CFLAGS) $(CFLAGS) -MT layer_la-point.lo -MD -MP -MF $(DEPDIR)/layer_la-point.Tpo -c -o layer_la-point.lo `test -f 'point.c' || echo '$(srcdir)/'`point.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/layer_la-point.Tpo $(DEPDIR)/layer_la-point.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='point.c' object='layer_la-point.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(layer_la_CFLAGS) $(CFLAGS) -c -o layer_la-point.lo `test -f 'point.c' || echo '$(srcdir)/'`point.c
+
+layer_la-rectangle.lo: rectangle.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(layer_la_CFLAGS) $(CFLAGS) -MT layer_la-rectangle.lo -MD -MP -MF $(DEPDIR)/layer_la-rectangle.Tpo -c -o layer_la-rectangle.lo `test -f 'rectangle.c' || echo '$(srcdir)/'`rectangle.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/layer_la-rectangle.Tpo $(DEPDIR)/layer_la-rectangle.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rectangle.c' object='layer_la-rectangle.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(layer_la_CFLAGS) $(CFLAGS) -c -o layer_la-rectangle.lo `test -f 'rectangle.c' || echo '$(srcdir)/'`rectangle.c
+
+layer_la-layer.lo: layer.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(layer_la_CFLAGS) $(CFLAGS) -MT layer_la-layer.lo -MD -MP -MF $(DEPDIR)/layer_la-layer.Tpo -c -o layer_la-layer.lo `test -f 'layer.c' || echo '$(srcdir)/'`layer.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/layer_la-layer.Tpo $(DEPDIR)/layer_la-layer.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='layer.c' object='layer_la-layer.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(layer_la_CFLAGS) $(CFLAGS) -c -o layer_la-layer.lo `test -f 'layer.c' || echo '$(srcdir)/'`layer.c
+
mostlyclean-libtool:
-rm -f *.lo
@@ -716,13 +832,15 @@ distdir: $(DISTFILES)
fi; \
done
check-am: all-am
-check: check-am
+check: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) check-am
all-am: Makefile $(LTLIBRARIES) $(HEADERS)
installdirs:
for dir in "$(DESTDIR)$(layerdir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
-install: install-am
+install: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
@@ -752,6 +870,7 @@ distclean-generic:
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
clean: clean-am
clean-am: clean-generic clean-layerLTLIBRARIES clean-libtool \
@@ -823,7 +942,7 @@ ps-am:
uninstall-am: uninstall-layerLTLIBRARIES
-.MAKE: install-am install-strip
+.MAKE: all check install install-am install-strip
.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
clean-layerLTLIBRARIES clean-libtool clean-local cscopelist-am \
@@ -843,6 +962,9 @@ uninstall-am: uninstall-layerLTLIBRARIES
.PRECIOUS: Makefile
+layer.c: $(srcdir)/Makefile.am $(top_srcdir)/utils/gen-module-bundle.sh
+ $(SHELL) $(top_srcdir)/utils/gen-module-bundle.sh layer.c $(bundlable_modules)
+
clean-local:
rm -f core.* *~
diff --git a/modules/layer/axis.c b/modules/layer/axis.c
index b66a1fa..4ccfdbe 100644
--- a/modules/layer/axis.c
+++ b/modules/layer/axis.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: axis.c 17612 2015-10-19 12:54:58Z yeti-dn $
+ * @(#) $Id: axis.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2003-2006 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -147,7 +147,7 @@ static GwyModuleInfo module_info = {
"2004",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, axis)
G_DEFINE_TYPE_EXTENDED
(GwySelectionAxis, gwy_selection_axis, GWY_TYPE_SELECTION, 0,
diff --git a/modules/layer/ellipse.c b/modules/layer/ellipse.c
index 1b5919b..7be0811 100644
--- a/modules/layer/ellipse.c
+++ b/modules/layer/ellipse.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: ellipse.c 17612 2015-10-19 12:54:58Z yeti-dn $
+ * @(#) $Id: ellipse.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2005-2006 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -147,7 +147,7 @@ static GwyModuleInfo module_info = {
"2005",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, ellipse)
G_DEFINE_TYPE(GwySelectionEllipse, gwy_selection_ellipse,
GWY_TYPE_SELECTION)
diff --git a/modules/layer/lattice.c b/modules/layer/lattice.c
index 8486a20..87c7898 100644
--- a/modules/layer/lattice.c
+++ b/modules/layer/lattice.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: lattice.c 15691 2013-12-02 00:07:14Z yeti-dn $
+ * @(#) $Id: lattice.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2013 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -130,7 +130,7 @@ static GwyModuleInfo module_info = {
"2013",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, lattice)
G_DEFINE_TYPE(GwySelectionLattice, gwy_selection_lattice, GWY_TYPE_SELECTION)
G_DEFINE_TYPE(GwyLayerLattice, gwy_layer_lattice, GWY_TYPE_VECTOR_LAYER)
diff --git a/modules/layer/layer.c b/modules/layer/layer.c
new file mode 100644
index 0000000..0d34054
--- /dev/null
+++ b/modules/layer/layer.c
@@ -0,0 +1,38 @@
+/* This is a GENERATED file. */
+#include <glib.h>
+#include <libgwymodule/gwymodule.h>
+
+static const GwyModuleRecord* register_bundle(void);
+
+static GwyModuleInfo module_info = {
+ GWY_MODULE_ABI_VERSION | GWY_MODULE_BUNDLE_FLAG,
+ (GwyModuleRegisterFunc)®ister_bundle,
+ NULL, NULL, NULL, NULL, NULL,
+};
+
+GWY_MODULE_QUERY(module_info)
+
+GwyModuleInfo* _gwy_module_query__axis(void);
+GwyModuleInfo* _gwy_module_query__ellipse(void);
+GwyModuleInfo* _gwy_module_query__lattice(void);
+GwyModuleInfo* _gwy_module_query__line(void);
+GwyModuleInfo* _gwy_module_query__path(void);
+GwyModuleInfo* _gwy_module_query__point(void);
+GwyModuleInfo* _gwy_module_query__rectangle(void);
+
+static const GwyModuleRecord modules[] = {
+ { _gwy_module_query__axis, "axis", },
+ { _gwy_module_query__ellipse, "ellipse", },
+ { _gwy_module_query__lattice, "lattice", },
+ { _gwy_module_query__line, "line", },
+ { _gwy_module_query__path, "path", },
+ { _gwy_module_query__point, "point", },
+ { _gwy_module_query__rectangle, "rectangle", },
+ { NULL, NULL, },
+};
+
+static const GwyModuleRecord*
+register_bundle(void)
+{
+ return modules;
+}
diff --git a/modules/layer/line.c b/modules/layer/line.c
index a8e5d87..f821959 100644
--- a/modules/layer/line.c
+++ b/modules/layer/line.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: line.c 18148 2016-01-21 16:26:38Z yeti-dn $
+ * @(#) $Id: line.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2003-2008 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -181,7 +181,7 @@ static GwyModuleInfo module_info = {
"2004",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, line)
G_DEFINE_TYPE(GwySelectionLine, gwy_selection_line, GWY_TYPE_SELECTION)
G_DEFINE_TYPE(GwyLayerLine, gwy_layer_line, GWY_TYPE_VECTOR_LAYER)
diff --git a/modules/layer/path.c b/modules/layer/path.c
index b61350e..a25399c 100644
--- a/modules/layer/path.c
+++ b/modules/layer/path.c
@@ -175,7 +175,7 @@ static GwyModuleInfo module_info = {
"2016",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, path)
G_DEFINE_TYPE_EXTENDED
(GwySelectionPath, gwy_selection_path, GWY_TYPE_SELECTION, 0,
diff --git a/modules/layer/point.c b/modules/layer/point.c
index 13b898a..8654ab2 100644
--- a/modules/layer/point.c
+++ b/modules/layer/point.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: point.c 18234 2016-01-27 14:57:31Z yeti-dn $
+ * @(#) $Id: point.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2003-2006 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -174,7 +174,7 @@ static GwyModuleInfo module_info = {
"2004",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, point)
G_DEFINE_TYPE(GwySelectionPoint, gwy_selection_point, GWY_TYPE_SELECTION)
G_DEFINE_TYPE(GwyLayerPoint, gwy_layer_point, GWY_TYPE_VECTOR_LAYER)
diff --git a/modules/layer/rectangle.c b/modules/layer/rectangle.c
index 748c520..0677b6e 100644
--- a/modules/layer/rectangle.c
+++ b/modules/layer/rectangle.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: rectangle.c 17612 2015-10-19 12:54:58Z yeti-dn $
+ * @(#) $Id: rectangle.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2003-2006 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -151,7 +151,7 @@ static GwyModuleInfo module_info = {
"2004",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, rectangle)
G_DEFINE_TYPE(GwySelectionRectangle, gwy_selection_rectangle,
GWY_TYPE_SELECTION)
diff --git a/modules/process/Makefile.am b/modules/process/Makefile.am
index bbf62fd..4ba03f8 100644
--- a/modules/process/Makefile.am
+++ b/modules/process/Makefile.am
@@ -1,4 +1,4 @@
-# @(#) $Id: Makefile.am 18853 2016-08-17 19:14:16Z yeti-dn $
+# @(#) $Id: Makefile.am 20104 2017-07-29 09:23:41Z yeti-dn $
# Put sources that are for some reason disabled yet present in svn checkouts
# here. This makes them distributed and translations of their messages are
@@ -9,7 +9,10 @@ disabled_sources = \
processdir = $(pkglibdir)/modules/process
-process_LTLIBRARIES = \
+# Only bundle modules without own dependencies. If something goes wrong with
+# any required libraries at run-time, it will at most break these individual
+# unbundled modules, not the bundle.
+bundlable_modules = \
acf2d.la \
angle_dist.la \
arithmetic.la \
@@ -46,6 +49,7 @@ process_LTLIBRARIES = \
fft_filter_2d.la \
fft_profile.la \
fft_synth.la \
+ fibre_synth.la \
fit-shape.la \
flatten_base.la \
fraccor.la \
@@ -77,22 +81,31 @@ process_LTLIBRARIES = \
mask_distribute.la \
mask_edt.la \
mask_morph.la \
+ mask_noisify.la \
maskops.la \
mcrop.la \
measure_lattice.la \
median-bg.la \
merge.la \
+ mfm_current.la \
+ mfm_field.la \
+ mfm_findshift.la \
+ mfm_parallel.la \
+ mfm_shift.la \
neural.la \
noise_synth.la \
obj_synth.la \
otsu_threshold.la \
outliers.la \
pat_synth.la \
+ phase_synth.la \
pid.la \
polylevel.la \
polydistort.la \
presentationops.la \
psdf_logphi.la \
+ psf.la \
+ psf-fit.la \
rank.la \
rotate.la \
semsim.la \
@@ -101,6 +114,7 @@ process_LTLIBRARIES = \
shade.la \
slope_dist.la \
sphere-revolve.la \
+ stitch.la \
straighten_path.la \
threshold.la \
tilt.la \
@@ -115,6 +129,18 @@ process_LTLIBRARIES = \
xydenoise.la \
xyzize.la
+# process_modules is either the bundle or all the individual modules.
+if MODULE_BUNDLING
+process_modules = process.la
+BUILT_SOURCES = process.c
+process_la_CFLAGS = $(AM_CFLAGS) -DGWY_MODULE_BUNDLING
+else
+process_modules = $(bundlable_modules)
+endif
+
+process_LTLIBRARIES = \
+ $(process_modules)
+
EXTRA_DIST = \
$(disabled_sources)
@@ -122,10 +148,6 @@ if OS_MSWIN
no_undefined = -no-undefined
endif
-AM_CPPFLAGS = -I$(top_srcdir) -DG_LOG_DOMAIN=\"Module\"
-AM_CFLAGS = @COMMON_CFLAGS@
-AM_LDFLAGS = -avoid-version -module $(no_undefined) $(module_libadd)
-
if MODULE_DEPENDENCIES
module_libadd = \
$(top_builddir)/app/libgwyapp2.la \
@@ -137,6 +159,11 @@ module_libadd = \
@GTK_LIBS@
endif
+AM_CPPFLAGS = -I$(top_srcdir) -DG_LOG_DOMAIN=\"Module\"
+AM_CFLAGS = @COMMON_CFLAGS@
+AM_LDFLAGS = -avoid-version -module $(no_undefined) $(module_libadd)
+
+# Bundlable modules, must be listed in process_la_SOURCES below.
acf2d_la_SOURCES = acf2d.c
angle_dist_la_SOURCES = angle_dist.c preview.h
arithmetic_la_SOURCES = arithmetic.c preview.h
@@ -157,6 +184,7 @@ cwt_la_SOURCES = cwt.c preview.h
curvature_la_SOURCES = curvature.c preview.h
deposit_synth_la_SOURCES = deposit_synth.c dimensions.h preview.h
diff_synth_la_SOURCES = diff_synth.c dimensions.h synth.h preview.h
+domain_synth_la_SOURCES = domain_synth.c dimensions.h preview.h
drift_la_SOURCES = drift.c preview.h
dwt_la_SOURCES = dwt.c preview.h
dwtanisotropy_la_SOURCES = dwtanisotropy.c
@@ -172,6 +200,7 @@ fft_filter_2d_la_SOURCES = fft_filter_2d.c preview.h
fft_profile_la_SOURCES = fft_profile.c preview.h
fft_la_SOURCES = fft.c preview.h
fft_synth_la_SOURCES = fft_synth.c dimensions.h synth.h preview.h
+fibre_synth_la_SOURCES = fibre_synth.c dimensions.h synth.h preview.h
fit_shape_la_SOURCES = fit-shape.c preview.h
flatten_base_la_SOURCES = flatten_base.c
fractal_la_SOURCES = fractal.c preview.h
@@ -203,11 +232,17 @@ maskcor_la_SOURCES = maskcor.c
mask_distribute_la_SOURCES = mask_distribute.c preview.h
mask_edt_la_SOURCES = mask_edt.c
mask_morph_la_SOURCES = mask_morph.c
+mask_noisify_la_SOURCES = mask_noisify.c
maskops_la_SOURCES = maskops.c
mcrop_la_SOURCES = mcrop.c
measure_lattice_la_SOURCES = measure_lattice.c preview.h
median_bg_la_SOURCES = median-bg.c preview.h
merge_la_SOURCES = merge.c
+mfm_current_la_SOURCES = mfm_current.c mfmops.h
+mfm_field_la_SOURCES = mfm_field.c mfmops.h
+mfm_findshift_la_SOURCES = mfm_findshift.c mfmops.h
+mfm_parallel_la_SOURCES = mfm_parallel.c mfmops.h
+mfm_shift_la_SOURCES = mfm_shift.c mfmops.h
#nanoindent_adjust_la_SOURCES = nanoindent_adjust.c
neural_la_SOURCES = neural.c neuraldata.h
noise_synth_la_SOURCES = noise_synth.c dimensions.h synth.h preview.h
@@ -215,11 +250,14 @@ obj_synth_la_SOURCES = obj_synth.c dimensions.h synth.h preview.h
otsu_threshold_la_SOURCES = otsu_threshold.c
outliers_la_SOURCES = outliers.c
pat_synth_la_SOURCES = pat_synth.c dimensions.h synth.h preview.h
+phase_synth_la_SOURCES = phase_synth.c dimensions.h synth.h preview.h
pid_la_SOURCES = pid.c preview.h
polylevel_la_SOURCES = polylevel.c preview.h
polydistort_la_SOURCES = polydistort.c preview.h
presentationops_la_SOURCES = presentationops.c
psdf_logphi_la_SOURCES = psdf_logphi.c preview.h
+psf_la_SOURCES = psf.c preview.h mfmops.h
+psf_fit_la_SOURCES = psf-fit.c
rank_la_SOURCES = rank.c preview.h
rotate_la_SOURCES = rotate.c preview.h
scale_la_SOURCES = scale.c preview.h
@@ -228,6 +266,7 @@ semsim_la_SOURCES = semsim.c preview.h
shade_la_SOURCES = shade.c preview.h
slope_dist_la_SOURCES = slope_dist.c preview.h
sphere_revolve_la_SOURCES = sphere-revolve.c preview.h
+stitch_la_SOURCES = stitch.c
straighten_path_la_SOURCES = straighten_path.c preview.h
#superresolution_la_SOURCES = superresolution.c
threshold_la_SOURCES = threshold.c preview.h
@@ -243,6 +282,129 @@ wpour_mark_la_SOURCES = wpour_mark.c preview.h
xydenoise_la_SOURCES = xydenoise.c
xyzize_la_SOURCES = xyzize.c
+process_la_SOURCES = \
+ $(acf2d_la_SOURCES) \
+ $(angle_dist_la_SOURCES) \
+ $(arithmetic_la_SOURCES) \
+ $(averaging_la_SOURCES) \
+ $(basicops_la_SOURCES) \
+ $(bdep_synth_la_SOURCES) \
+ $(calcoefs_load_la_SOURCES) \
+ $(calcoefs_new_la_SOURCES) \
+ $(calcoefs_simple_la_SOURCES) \
+ $(calcoefs_view_la_SOURCES) \
+ $(calibrate_la_SOURCES) \
+ $(coerce_la_SOURCES) \
+ $(col_synth_la_SOURCES) \
+ $(convolution_filter_la_SOURCES) \
+ $(correct_affine_la_SOURCES) \
+ $(crosscor_la_SOURCES) \
+ $(cwt_la_SOURCES) \
+ $(curvature_la_SOURCES) \
+ $(deposit_synth_la_SOURCES) \
+ $(diff_synth_la_SOURCES) \
+ $(domain_synth_la_SOURCES) \
+ $(drift_la_SOURCES) \
+ $(dwt_la_SOURCES) \
+ $(dwtanisotropy_la_SOURCES) \
+ $(edge_la_SOURCES) \
+ $(entropy_la_SOURCES) \
+ $(extend_la_SOURCES) \
+ $(extract_path_la_SOURCES) \
+ $(facet_analysis_la_SOURCES) \
+ $(facet_level_la_SOURCES) \
+ $(fbm_synth_la_SOURCES) \
+ $(fft_filter_1d_la_SOURCES) \
+ $(fft_filter_2d_la_SOURCES) \
+ $(fft_profile_la_SOURCES) \
+ $(fft_la_SOURCES) \
+ $(fft_synth_la_SOURCES) \
+ $(fibre_synth_la_SOURCES) \
+ $(fit_shape_la_SOURCES) \
+ $(flatten_base_la_SOURCES) \
+ $(fractal_la_SOURCES) \
+ $(fraccor_la_SOURCES) \
+ $(gradient_la_SOURCES) \
+ $(grain_cross_la_SOURCES) \
+ $(grain_dist_la_SOURCES) \
+ $(grain_edge_la_SOURCES) \
+ $(grain_filter_la_SOURCES) \
+ $(grain_mark_la_SOURCES) \
+ $(grain_stat_la_SOURCES) \
+ $(grain_wshed_la_SOURCES) \
+ $(hough_la_SOURCES) \
+ $(immerse_la_SOURCES) \
+ $(indent_analyze_la_SOURCES) \
+ $(laplace_la_SOURCES) \
+ $(lat_synth_la_SOURCES) \
+ $(latsim_la_SOURCES) \
+ $(level_la_SOURCES) \
+ $(level_grains_la_SOURCES) \
+ $(linecorrect_la_SOURCES) \
+ $(linematch_la_SOURCES) \
+ $(lno_synth_la_SOURCES) \
+ $(local_contrast_la_SOURCES) \
+ $(logistic_la_SOURCES) \
+ $(mark_disconn_la_SOURCES) \
+ $(mark_with_la_SOURCES) \
+ $(maskcor_la_SOURCES) \
+ $(mask_distribute_la_SOURCES) \
+ $(mask_edt_la_SOURCES) \
+ $(mask_morph_la_SOURCES) \
+ $(mask_noisify_la_SOURCES) \
+ $(maskops_la_SOURCES) \
+ $(mcrop_la_SOURCES) \
+ $(measure_lattice_la_SOURCES) \
+ $(median_bg_la_SOURCES) \
+ $(merge_la_SOURCES) \
+ $(mfm_current_la_SOURCES) \
+ $(mfm_field_la_SOURCES) \
+ $(mfm_findshift_la_SOURCES) \
+ $(mfm_parallel_la_SOURCES) \
+ $(mfm_shift_la_SOURCES) \
+ $(neural_la_SOURCES) \
+ $(noise_synth_la_SOURCES) \
+ $(obj_synth_la_SOURCES) \
+ $(otsu_threshold_la_SOURCES) \
+ $(outliers_la_SOURCES) \
+ $(pat_synth_la_SOURCES) \
+ $(phase_synth_la_SOURCES) \
+ $(pid_la_SOURCES) \
+ $(polylevel_la_SOURCES) \
+ $(polydistort_la_SOURCES) \
+ $(presentationops_la_SOURCES) \
+ $(psdf_logphi_la_SOURCES) \
+ $(psf_la_SOURCES) \
+ $(psf_fit_la_SOURCES) \
+ $(rank_la_SOURCES) \
+ $(rotate_la_SOURCES) \
+ $(scale_la_SOURCES) \
+ $(scars_la_SOURCES) \
+ $(semsim_la_SOURCES) \
+ $(shade_la_SOURCES) \
+ $(slope_dist_la_SOURCES) \
+ $(sphere_revolve_la_SOURCES) \
+ $(stitch_la_SOURCES) \
+ $(straighten_path_la_SOURCES) \
+ $(threshold_la_SOURCES) \
+ $(tilt_la_SOURCES) \
+ $(tip_blind_la_SOURCES) \
+ $(tip_model_la_SOURCES) \
+ $(tipops_la_SOURCES) \
+ $(unrotate_la_SOURCES) \
+ $(volumize_la_SOURCES) \
+ $(volumize_layers_la_SOURCES) \
+ $(wave_synth_la_SOURCES) \
+ $(wpour_mark_la_SOURCES) \
+ $(xydenoise_la_SOURCES) \
+ $(xyzize_la_SOURCES) \
+ process.c
+
+process.c: $(srcdir)/Makefile.am $(top_srcdir)/utils/gen-module-bundle.sh
+ $(SHELL) $(top_srcdir)/utils/gen-module-bundle.sh process.c $(bundlable_modules)
+
+CLEAN_FILES = process.c
+
clean-local:
rm -f core.* *~
diff --git a/modules/process/Makefile.in b/modules/process/Makefile.in
index c55a390..2247232 100644
--- a/modules/process/Makefile.in
+++ b/modules/process/Makefile.in
@@ -14,7 +14,7 @@
@SET_MAKE@
-# @(#) $Id: Makefile.am 18853 2016-08-17 19:14:16Z yeti-dn $
+# @(#) $Id: Makefile.am 20104 2017-07-29 09:23:41Z yeti-dn $
VPATH = @srcdir@
am__is_gnu_make = { \
@@ -145,315 +145,643 @@ AM_V_lt = $(am__v_lt_ at AM_V@)
am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
am__v_lt_0 = --silent
am__v_lt_1 =
+ at MODULE_BUNDLING_FALSE@am_acf2d_la_rpath = -rpath $(processdir)
angle_dist_la_LIBADD =
am_angle_dist_la_OBJECTS = angle_dist.lo
angle_dist_la_OBJECTS = $(am_angle_dist_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_angle_dist_la_rpath = -rpath $(processdir)
arithmetic_la_LIBADD =
am_arithmetic_la_OBJECTS = arithmetic.lo
arithmetic_la_OBJECTS = $(am_arithmetic_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_arithmetic_la_rpath = -rpath $(processdir)
averaging_la_LIBADD =
am_averaging_la_OBJECTS = averaging.lo
averaging_la_OBJECTS = $(am_averaging_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_averaging_la_rpath = -rpath $(processdir)
basicops_la_LIBADD =
am_basicops_la_OBJECTS = basicops.lo
basicops_la_OBJECTS = $(am_basicops_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_basicops_la_rpath = -rpath $(processdir)
bdep_synth_la_LIBADD =
am_bdep_synth_la_OBJECTS = bdep_synth.lo
bdep_synth_la_OBJECTS = $(am_bdep_synth_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_bdep_synth_la_rpath = -rpath $(processdir)
calcoefs_load_la_LIBADD =
am_calcoefs_load_la_OBJECTS = calcoefs_load.lo
calcoefs_load_la_OBJECTS = $(am_calcoefs_load_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_calcoefs_load_la_rpath = -rpath \
+ at MODULE_BUNDLING_FALSE@ $(processdir)
calcoefs_new_la_LIBADD =
am_calcoefs_new_la_OBJECTS = calcoefs_new.lo
calcoefs_new_la_OBJECTS = $(am_calcoefs_new_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_calcoefs_new_la_rpath = -rpath $(processdir)
calcoefs_simple_la_LIBADD =
am_calcoefs_simple_la_OBJECTS = calcoefs_simple.lo
calcoefs_simple_la_OBJECTS = $(am_calcoefs_simple_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_calcoefs_simple_la_rpath = -rpath \
+ at MODULE_BUNDLING_FALSE@ $(processdir)
calcoefs_view_la_LIBADD =
am_calcoefs_view_la_OBJECTS = calcoefs_view.lo
calcoefs_view_la_OBJECTS = $(am_calcoefs_view_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_calcoefs_view_la_rpath = -rpath \
+ at MODULE_BUNDLING_FALSE@ $(processdir)
calibrate_la_LIBADD =
am_calibrate_la_OBJECTS = calibrate.lo
calibrate_la_OBJECTS = $(am_calibrate_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_calibrate_la_rpath = -rpath $(processdir)
coerce_la_LIBADD =
am_coerce_la_OBJECTS = coerce.lo
coerce_la_OBJECTS = $(am_coerce_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_coerce_la_rpath = -rpath $(processdir)
col_synth_la_LIBADD =
am_col_synth_la_OBJECTS = col_synth.lo
col_synth_la_OBJECTS = $(am_col_synth_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_col_synth_la_rpath = -rpath $(processdir)
convolution_filter_la_LIBADD =
am_convolution_filter_la_OBJECTS = convolution_filter.lo
convolution_filter_la_OBJECTS = $(am_convolution_filter_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_convolution_filter_la_rpath = -rpath \
+ at MODULE_BUNDLING_FALSE@ $(processdir)
correct_affine_la_LIBADD =
am_correct_affine_la_OBJECTS = correct_affine.lo
correct_affine_la_OBJECTS = $(am_correct_affine_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_correct_affine_la_rpath = -rpath \
+ at MODULE_BUNDLING_FALSE@ $(processdir)
crosscor_la_LIBADD =
am_crosscor_la_OBJECTS = crosscor.lo
crosscor_la_OBJECTS = $(am_crosscor_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_crosscor_la_rpath = -rpath $(processdir)
curvature_la_LIBADD =
am_curvature_la_OBJECTS = curvature.lo
curvature_la_OBJECTS = $(am_curvature_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_curvature_la_rpath = -rpath $(processdir)
cwt_la_LIBADD =
am_cwt_la_OBJECTS = cwt.lo
cwt_la_OBJECTS = $(am_cwt_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_cwt_la_rpath = -rpath $(processdir)
deposit_synth_la_LIBADD =
am_deposit_synth_la_OBJECTS = deposit_synth.lo
deposit_synth_la_OBJECTS = $(am_deposit_synth_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_deposit_synth_la_rpath = -rpath \
+ at MODULE_BUNDLING_FALSE@ $(processdir)
diff_synth_la_LIBADD =
am_diff_synth_la_OBJECTS = diff_synth.lo
diff_synth_la_OBJECTS = $(am_diff_synth_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_diff_synth_la_rpath = -rpath $(processdir)
domain_synth_la_LIBADD =
-domain_synth_la_SOURCES = domain_synth.c
-domain_synth_la_OBJECTS = domain_synth.lo
+am_domain_synth_la_OBJECTS = domain_synth.lo
+domain_synth_la_OBJECTS = $(am_domain_synth_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_domain_synth_la_rpath = -rpath $(processdir)
drift_la_LIBADD =
am_drift_la_OBJECTS = drift.lo
drift_la_OBJECTS = $(am_drift_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_drift_la_rpath = -rpath $(processdir)
dwt_la_LIBADD =
am_dwt_la_OBJECTS = dwt.lo
dwt_la_OBJECTS = $(am_dwt_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_dwt_la_rpath = -rpath $(processdir)
dwtanisotropy_la_LIBADD =
am_dwtanisotropy_la_OBJECTS = dwtanisotropy.lo
dwtanisotropy_la_OBJECTS = $(am_dwtanisotropy_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_dwtanisotropy_la_rpath = -rpath \
+ at MODULE_BUNDLING_FALSE@ $(processdir)
edge_la_LIBADD =
am_edge_la_OBJECTS = edge.lo
edge_la_OBJECTS = $(am_edge_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_edge_la_rpath = -rpath $(processdir)
entropy_la_LIBADD =
am_entropy_la_OBJECTS = entropy.lo
entropy_la_OBJECTS = $(am_entropy_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_entropy_la_rpath = -rpath $(processdir)
extend_la_LIBADD =
am_extend_la_OBJECTS = extend.lo
extend_la_OBJECTS = $(am_extend_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_extend_la_rpath = -rpath $(processdir)
extract_path_la_LIBADD =
am_extract_path_la_OBJECTS = extract_path.lo
extract_path_la_OBJECTS = $(am_extract_path_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_extract_path_la_rpath = -rpath $(processdir)
facet_level_la_LIBADD =
am_facet_level_la_OBJECTS = facet-level.lo
facet_level_la_OBJECTS = $(am_facet_level_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_facet_level_la_rpath = -rpath $(processdir)
facet_analysis_la_LIBADD =
am_facet_analysis_la_OBJECTS = facet_analysis.lo
facet_analysis_la_OBJECTS = $(am_facet_analysis_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_facet_analysis_la_rpath = -rpath \
+ at MODULE_BUNDLING_FALSE@ $(processdir)
fbm_synth_la_LIBADD =
am_fbm_synth_la_OBJECTS = fbm_synth.lo
fbm_synth_la_OBJECTS = $(am_fbm_synth_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_fbm_synth_la_rpath = -rpath $(processdir)
fft_la_LIBADD =
am_fft_la_OBJECTS = fft.lo
fft_la_OBJECTS = $(am_fft_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_fft_la_rpath = -rpath $(processdir)
fft_filter_1d_la_LIBADD =
am_fft_filter_1d_la_OBJECTS = fft_filter_1d.lo
fft_filter_1d_la_OBJECTS = $(am_fft_filter_1d_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_fft_filter_1d_la_rpath = -rpath \
+ at MODULE_BUNDLING_FALSE@ $(processdir)
fft_filter_2d_la_LIBADD =
am_fft_filter_2d_la_OBJECTS = fft_filter_2d.lo
fft_filter_2d_la_OBJECTS = $(am_fft_filter_2d_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_fft_filter_2d_la_rpath = -rpath \
+ at MODULE_BUNDLING_FALSE@ $(processdir)
fft_profile_la_LIBADD =
am_fft_profile_la_OBJECTS = fft_profile.lo
fft_profile_la_OBJECTS = $(am_fft_profile_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_fft_profile_la_rpath = -rpath $(processdir)
fft_synth_la_LIBADD =
am_fft_synth_la_OBJECTS = fft_synth.lo
fft_synth_la_OBJECTS = $(am_fft_synth_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_fft_synth_la_rpath = -rpath $(processdir)
+fibre_synth_la_LIBADD =
+am_fibre_synth_la_OBJECTS = fibre_synth.lo
+fibre_synth_la_OBJECTS = $(am_fibre_synth_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_fibre_synth_la_rpath = -rpath $(processdir)
fit_shape_la_LIBADD =
am_fit_shape_la_OBJECTS = fit-shape.lo
fit_shape_la_OBJECTS = $(am_fit_shape_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_fit_shape_la_rpath = -rpath $(processdir)
flatten_base_la_LIBADD =
am_flatten_base_la_OBJECTS = flatten_base.lo
flatten_base_la_OBJECTS = $(am_flatten_base_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_flatten_base_la_rpath = -rpath $(processdir)
fraccor_la_LIBADD =
am_fraccor_la_OBJECTS = fraccor.lo
fraccor_la_OBJECTS = $(am_fraccor_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_fraccor_la_rpath = -rpath $(processdir)
fractal_la_LIBADD =
am_fractal_la_OBJECTS = fractal.lo
fractal_la_OBJECTS = $(am_fractal_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_fractal_la_rpath = -rpath $(processdir)
gradient_la_LIBADD =
am_gradient_la_OBJECTS = gradient.lo
gradient_la_OBJECTS = $(am_gradient_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_gradient_la_rpath = -rpath $(processdir)
grain_cross_la_LIBADD =
am_grain_cross_la_OBJECTS = grain_cross.lo
grain_cross_la_OBJECTS = $(am_grain_cross_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_grain_cross_la_rpath = -rpath $(processdir)
grain_dist_la_LIBADD =
am_grain_dist_la_OBJECTS = grain_dist.lo
grain_dist_la_OBJECTS = $(am_grain_dist_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_grain_dist_la_rpath = -rpath $(processdir)
grain_edge_la_LIBADD =
am_grain_edge_la_OBJECTS = grain_edge.lo
grain_edge_la_OBJECTS = $(am_grain_edge_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_grain_edge_la_rpath = -rpath $(processdir)
grain_filter_la_LIBADD =
am_grain_filter_la_OBJECTS = grain_filter.lo
grain_filter_la_OBJECTS = $(am_grain_filter_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_grain_filter_la_rpath = -rpath $(processdir)
grain_mark_la_LIBADD =
am_grain_mark_la_OBJECTS = grain_mark.lo
grain_mark_la_OBJECTS = $(am_grain_mark_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_grain_mark_la_rpath = -rpath $(processdir)
grain_stat_la_LIBADD =
am_grain_stat_la_OBJECTS = grain_stat.lo
grain_stat_la_OBJECTS = $(am_grain_stat_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_grain_stat_la_rpath = -rpath $(processdir)
grain_wshed_la_LIBADD =
am_grain_wshed_la_OBJECTS = grain_wshed.lo
grain_wshed_la_OBJECTS = $(am_grain_wshed_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_grain_wshed_la_rpath = -rpath $(processdir)
hough_la_LIBADD =
am_hough_la_OBJECTS = hough.lo
hough_la_OBJECTS = $(am_hough_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_hough_la_rpath = -rpath $(processdir)
immerse_la_LIBADD =
am_immerse_la_OBJECTS = immerse.lo
immerse_la_OBJECTS = $(am_immerse_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_immerse_la_rpath = -rpath $(processdir)
indent_analyze_la_LIBADD =
am_indent_analyze_la_OBJECTS = indent_analyze.lo
indent_analyze_la_OBJECTS = $(am_indent_analyze_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_indent_analyze_la_rpath = -rpath \
+ at MODULE_BUNDLING_FALSE@ $(processdir)
laplace_la_LIBADD =
am_laplace_la_OBJECTS = laplace.lo
laplace_la_OBJECTS = $(am_laplace_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_laplace_la_rpath = -rpath $(processdir)
lat_synth_la_LIBADD =
am_lat_synth_la_OBJECTS = lat_synth.lo
lat_synth_la_OBJECTS = $(am_lat_synth_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_lat_synth_la_rpath = -rpath $(processdir)
latsim_la_LIBADD =
am_latsim_la_OBJECTS = latsim.lo
latsim_la_OBJECTS = $(am_latsim_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_latsim_la_rpath = -rpath $(processdir)
level_la_LIBADD =
am_level_la_OBJECTS = level.lo
level_la_OBJECTS = $(am_level_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_level_la_rpath = -rpath $(processdir)
level_grains_la_LIBADD =
am_level_grains_la_OBJECTS = level_grains.lo
level_grains_la_OBJECTS = $(am_level_grains_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_level_grains_la_rpath = -rpath $(processdir)
linecorrect_la_LIBADD =
am_linecorrect_la_OBJECTS = linecorrect.lo
linecorrect_la_OBJECTS = $(am_linecorrect_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_linecorrect_la_rpath = -rpath $(processdir)
linematch_la_LIBADD =
am_linematch_la_OBJECTS = linematch.lo
linematch_la_OBJECTS = $(am_linematch_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_linematch_la_rpath = -rpath $(processdir)
lno_synth_la_LIBADD =
am_lno_synth_la_OBJECTS = lno_synth.lo
lno_synth_la_OBJECTS = $(am_lno_synth_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_lno_synth_la_rpath = -rpath $(processdir)
local_contrast_la_LIBADD =
am_local_contrast_la_OBJECTS = local_contrast.lo
local_contrast_la_OBJECTS = $(am_local_contrast_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_local_contrast_la_rpath = -rpath \
+ at MODULE_BUNDLING_FALSE@ $(processdir)
logistic_la_LIBADD =
am_logistic_la_OBJECTS = logistic.lo
logistic_la_OBJECTS = $(am_logistic_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_logistic_la_rpath = -rpath $(processdir)
mark_disconn_la_LIBADD =
am_mark_disconn_la_OBJECTS = mark_disconn.lo
mark_disconn_la_OBJECTS = $(am_mark_disconn_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_mark_disconn_la_rpath = -rpath $(processdir)
mark_with_la_LIBADD =
am_mark_with_la_OBJECTS = mark_with.lo
mark_with_la_OBJECTS = $(am_mark_with_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_mark_with_la_rpath = -rpath $(processdir)
mask_distribute_la_LIBADD =
am_mask_distribute_la_OBJECTS = mask_distribute.lo
mask_distribute_la_OBJECTS = $(am_mask_distribute_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_mask_distribute_la_rpath = -rpath \
+ at MODULE_BUNDLING_FALSE@ $(processdir)
mask_edt_la_LIBADD =
am_mask_edt_la_OBJECTS = mask_edt.lo
mask_edt_la_OBJECTS = $(am_mask_edt_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_mask_edt_la_rpath = -rpath $(processdir)
mask_morph_la_LIBADD =
am_mask_morph_la_OBJECTS = mask_morph.lo
mask_morph_la_OBJECTS = $(am_mask_morph_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_mask_morph_la_rpath = -rpath $(processdir)
+mask_noisify_la_LIBADD =
+am_mask_noisify_la_OBJECTS = mask_noisify.lo
+mask_noisify_la_OBJECTS = $(am_mask_noisify_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_mask_noisify_la_rpath = -rpath $(processdir)
maskcor_la_LIBADD =
am_maskcor_la_OBJECTS = maskcor.lo
maskcor_la_OBJECTS = $(am_maskcor_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_maskcor_la_rpath = -rpath $(processdir)
maskops_la_LIBADD =
am_maskops_la_OBJECTS = maskops.lo
maskops_la_OBJECTS = $(am_maskops_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_maskops_la_rpath = -rpath $(processdir)
mcrop_la_LIBADD =
am_mcrop_la_OBJECTS = mcrop.lo
mcrop_la_OBJECTS = $(am_mcrop_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_mcrop_la_rpath = -rpath $(processdir)
measure_lattice_la_LIBADD =
am_measure_lattice_la_OBJECTS = measure_lattice.lo
measure_lattice_la_OBJECTS = $(am_measure_lattice_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_measure_lattice_la_rpath = -rpath \
+ at MODULE_BUNDLING_FALSE@ $(processdir)
median_bg_la_LIBADD =
am_median_bg_la_OBJECTS = median-bg.lo
median_bg_la_OBJECTS = $(am_median_bg_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_median_bg_la_rpath = -rpath $(processdir)
merge_la_LIBADD =
am_merge_la_OBJECTS = merge.lo
merge_la_OBJECTS = $(am_merge_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_merge_la_rpath = -rpath $(processdir)
+mfm_current_la_LIBADD =
+am_mfm_current_la_OBJECTS = mfm_current.lo
+mfm_current_la_OBJECTS = $(am_mfm_current_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_mfm_current_la_rpath = -rpath $(processdir)
+mfm_field_la_LIBADD =
+am_mfm_field_la_OBJECTS = mfm_field.lo
+mfm_field_la_OBJECTS = $(am_mfm_field_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_mfm_field_la_rpath = -rpath $(processdir)
+mfm_findshift_la_LIBADD =
+am_mfm_findshift_la_OBJECTS = mfm_findshift.lo
+mfm_findshift_la_OBJECTS = $(am_mfm_findshift_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_mfm_findshift_la_rpath = -rpath \
+ at MODULE_BUNDLING_FALSE@ $(processdir)
+mfm_parallel_la_LIBADD =
+am_mfm_parallel_la_OBJECTS = mfm_parallel.lo
+mfm_parallel_la_OBJECTS = $(am_mfm_parallel_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_mfm_parallel_la_rpath = -rpath $(processdir)
+mfm_shift_la_LIBADD =
+am_mfm_shift_la_OBJECTS = mfm_shift.lo
+mfm_shift_la_OBJECTS = $(am_mfm_shift_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_mfm_shift_la_rpath = -rpath $(processdir)
neural_la_LIBADD =
am_neural_la_OBJECTS = neural.lo
neural_la_OBJECTS = $(am_neural_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_neural_la_rpath = -rpath $(processdir)
noise_synth_la_LIBADD =
am_noise_synth_la_OBJECTS = noise_synth.lo
noise_synth_la_OBJECTS = $(am_noise_synth_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_noise_synth_la_rpath = -rpath $(processdir)
obj_synth_la_LIBADD =
am_obj_synth_la_OBJECTS = obj_synth.lo
obj_synth_la_OBJECTS = $(am_obj_synth_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_obj_synth_la_rpath = -rpath $(processdir)
otsu_threshold_la_LIBADD =
am_otsu_threshold_la_OBJECTS = otsu_threshold.lo
otsu_threshold_la_OBJECTS = $(am_otsu_threshold_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_otsu_threshold_la_rpath = -rpath \
+ at MODULE_BUNDLING_FALSE@ $(processdir)
outliers_la_LIBADD =
am_outliers_la_OBJECTS = outliers.lo
outliers_la_OBJECTS = $(am_outliers_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_outliers_la_rpath = -rpath $(processdir)
pat_synth_la_LIBADD =
am_pat_synth_la_OBJECTS = pat_synth.lo
pat_synth_la_OBJECTS = $(am_pat_synth_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_pat_synth_la_rpath = -rpath $(processdir)
+phase_synth_la_LIBADD =
+am_phase_synth_la_OBJECTS = phase_synth.lo
+phase_synth_la_OBJECTS = $(am_phase_synth_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_phase_synth_la_rpath = -rpath $(processdir)
pid_la_LIBADD =
am_pid_la_OBJECTS = pid.lo
pid_la_OBJECTS = $(am_pid_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_pid_la_rpath = -rpath $(processdir)
polydistort_la_LIBADD =
am_polydistort_la_OBJECTS = polydistort.lo
polydistort_la_OBJECTS = $(am_polydistort_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_polydistort_la_rpath = -rpath $(processdir)
polylevel_la_LIBADD =
am_polylevel_la_OBJECTS = polylevel.lo
polylevel_la_OBJECTS = $(am_polylevel_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_polylevel_la_rpath = -rpath $(processdir)
presentationops_la_LIBADD =
am_presentationops_la_OBJECTS = presentationops.lo
presentationops_la_OBJECTS = $(am_presentationops_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_presentationops_la_rpath = -rpath \
+ at MODULE_BUNDLING_FALSE@ $(processdir)
+process_la_LIBADD =
+am__objects_1 = process_la-acf2d.lo
+am__objects_2 = process_la-angle_dist.lo
+am__objects_3 = process_la-arithmetic.lo
+am__objects_4 = process_la-averaging.lo
+am__objects_5 = process_la-basicops.lo
+am__objects_6 = process_la-bdep_synth.lo
+am__objects_7 = process_la-calcoefs_load.lo
+am__objects_8 = process_la-calcoefs_new.lo
+am__objects_9 = process_la-calcoefs_simple.lo
+am__objects_10 = process_la-calcoefs_view.lo
+am__objects_11 = process_la-calibrate.lo
+am__objects_12 = process_la-coerce.lo
+am__objects_13 = process_la-col_synth.lo
+am__objects_14 = process_la-convolution_filter.lo
+am__objects_15 = process_la-correct_affine.lo
+am__objects_16 = process_la-crosscor.lo
+am__objects_17 = process_la-cwt.lo
+am__objects_18 = process_la-curvature.lo
+am__objects_19 = process_la-deposit_synth.lo
+am__objects_20 = process_la-diff_synth.lo
+am__objects_21 = process_la-domain_synth.lo
+am__objects_22 = process_la-drift.lo
+am__objects_23 = process_la-dwt.lo
+am__objects_24 = process_la-dwtanisotropy.lo
+am__objects_25 = process_la-edge.lo
+am__objects_26 = process_la-entropy.lo
+am__objects_27 = process_la-extend.lo
+am__objects_28 = process_la-extract_path.lo
+am__objects_29 = process_la-facet_analysis.lo
+am__objects_30 = process_la-facet-level.lo
+am__objects_31 = process_la-fbm_synth.lo
+am__objects_32 = process_la-fft_filter_1d.lo
+am__objects_33 = process_la-fft_filter_2d.lo
+am__objects_34 = process_la-fft_profile.lo
+am__objects_35 = process_la-fft.lo
+am__objects_36 = process_la-fft_synth.lo
+am__objects_37 = process_la-fibre_synth.lo
+am__objects_38 = process_la-fit-shape.lo
+am__objects_39 = process_la-flatten_base.lo
+am__objects_40 = process_la-fractal.lo
+am__objects_41 = process_la-fraccor.lo
+am__objects_42 = process_la-gradient.lo
+am__objects_43 = process_la-grain_cross.lo
+am__objects_44 = process_la-grain_dist.lo
+am__objects_45 = process_la-grain_edge.lo
+am__objects_46 = process_la-grain_filter.lo
+am__objects_47 = process_la-grain_mark.lo
+am__objects_48 = process_la-grain_stat.lo
+am__objects_49 = process_la-grain_wshed.lo
+am__objects_50 = process_la-hough.lo
+am__objects_51 = process_la-immerse.lo
+am__objects_52 = process_la-indent_analyze.lo
+am__objects_53 = process_la-laplace.lo
+am__objects_54 = process_la-lat_synth.lo
+am__objects_55 = process_la-latsim.lo
+am__objects_56 = process_la-level.lo
+am__objects_57 = process_la-level_grains.lo
+am__objects_58 = process_la-linecorrect.lo
+am__objects_59 = process_la-linematch.lo
+am__objects_60 = process_la-lno_synth.lo
+am__objects_61 = process_la-local_contrast.lo
+am__objects_62 = process_la-logistic.lo
+am__objects_63 = process_la-mark_disconn.lo
+am__objects_64 = process_la-mark_with.lo
+am__objects_65 = process_la-maskcor.lo
+am__objects_66 = process_la-mask_distribute.lo
+am__objects_67 = process_la-mask_edt.lo
+am__objects_68 = process_la-mask_morph.lo
+am__objects_69 = process_la-mask_noisify.lo
+am__objects_70 = process_la-maskops.lo
+am__objects_71 = process_la-mcrop.lo
+am__objects_72 = process_la-measure_lattice.lo
+am__objects_73 = process_la-median-bg.lo
+am__objects_74 = process_la-merge.lo
+am__objects_75 = process_la-mfm_current.lo
+am__objects_76 = process_la-mfm_field.lo
+am__objects_77 = process_la-mfm_findshift.lo
+am__objects_78 = process_la-mfm_parallel.lo
+am__objects_79 = process_la-mfm_shift.lo
+am__objects_80 = process_la-neural.lo
+am__objects_81 = process_la-noise_synth.lo
+am__objects_82 = process_la-obj_synth.lo
+am__objects_83 = process_la-otsu_threshold.lo
+am__objects_84 = process_la-outliers.lo
+am__objects_85 = process_la-pat_synth.lo
+am__objects_86 = process_la-phase_synth.lo
+am__objects_87 = process_la-pid.lo
+am__objects_88 = process_la-polylevel.lo
+am__objects_89 = process_la-polydistort.lo
+am__objects_90 = process_la-presentationops.lo
+am__objects_91 = process_la-psdf_logphi.lo
+am__objects_92 = process_la-psf.lo
+am__objects_93 = process_la-psf-fit.lo
+am__objects_94 = process_la-rank.lo
+am__objects_95 = process_la-rotate.lo
+am__objects_96 = process_la-scale.lo
+am__objects_97 = process_la-scars.lo
+am__objects_98 = process_la-semsim.lo
+am__objects_99 = process_la-shade.lo
+am__objects_100 = process_la-slope_dist.lo
+am__objects_101 = process_la-sphere-revolve.lo
+am__objects_102 = process_la-stitch.lo
+am__objects_103 = process_la-straighten_path.lo
+am__objects_104 = process_la-threshold.lo
+am__objects_105 = process_la-tilt.lo
+am__objects_106 = process_la-tip_blind.lo
+am__objects_107 = process_la-tip_model.lo
+am__objects_108 = process_la-tipops.lo
+am__objects_109 = process_la-unrotate.lo
+am__objects_110 = process_la-volumize.lo
+am__objects_111 = process_la-volumize_layers.lo
+am__objects_112 = process_la-wave_synth.lo
+am__objects_113 = process_la-wpour_mark.lo
+am__objects_114 = process_la-xydenoise.lo
+am__objects_115 = process_la-xyzize.lo
+am_process_la_OBJECTS = $(am__objects_1) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4) $(am__objects_5) \
+ $(am__objects_6) $(am__objects_7) $(am__objects_8) \
+ $(am__objects_9) $(am__objects_10) $(am__objects_11) \
+ $(am__objects_12) $(am__objects_13) $(am__objects_14) \
+ $(am__objects_15) $(am__objects_16) $(am__objects_17) \
+ $(am__objects_18) $(am__objects_19) $(am__objects_20) \
+ $(am__objects_21) $(am__objects_22) $(am__objects_23) \
+ $(am__objects_24) $(am__objects_25) $(am__objects_26) \
+ $(am__objects_27) $(am__objects_28) $(am__objects_29) \
+ $(am__objects_30) $(am__objects_31) $(am__objects_32) \
+ $(am__objects_33) $(am__objects_34) $(am__objects_35) \
+ $(am__objects_36) $(am__objects_37) $(am__objects_38) \
+ $(am__objects_39) $(am__objects_40) $(am__objects_41) \
+ $(am__objects_42) $(am__objects_43) $(am__objects_44) \
+ $(am__objects_45) $(am__objects_46) $(am__objects_47) \
+ $(am__objects_48) $(am__objects_49) $(am__objects_50) \
+ $(am__objects_51) $(am__objects_52) $(am__objects_53) \
+ $(am__objects_54) $(am__objects_55) $(am__objects_56) \
+ $(am__objects_57) $(am__objects_58) $(am__objects_59) \
+ $(am__objects_60) $(am__objects_61) $(am__objects_62) \
+ $(am__objects_63) $(am__objects_64) $(am__objects_65) \
+ $(am__objects_66) $(am__objects_67) $(am__objects_68) \
+ $(am__objects_69) $(am__objects_70) $(am__objects_71) \
+ $(am__objects_72) $(am__objects_73) $(am__objects_74) \
+ $(am__objects_75) $(am__objects_76) $(am__objects_77) \
+ $(am__objects_78) $(am__objects_79) $(am__objects_80) \
+ $(am__objects_81) $(am__objects_82) $(am__objects_83) \
+ $(am__objects_84) $(am__objects_85) $(am__objects_86) \
+ $(am__objects_87) $(am__objects_88) $(am__objects_89) \
+ $(am__objects_90) $(am__objects_91) $(am__objects_92) \
+ $(am__objects_93) $(am__objects_94) $(am__objects_95) \
+ $(am__objects_96) $(am__objects_97) $(am__objects_98) \
+ $(am__objects_99) $(am__objects_100) $(am__objects_101) \
+ $(am__objects_102) $(am__objects_103) $(am__objects_104) \
+ $(am__objects_105) $(am__objects_106) $(am__objects_107) \
+ $(am__objects_108) $(am__objects_109) $(am__objects_110) \
+ $(am__objects_111) $(am__objects_112) $(am__objects_113) \
+ $(am__objects_114) $(am__objects_115) process_la-process.lo
+process_la_OBJECTS = $(am_process_la_OBJECTS)
+process_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(process_la_CFLAGS) \
+ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+ at MODULE_BUNDLING_TRUE@am_process_la_rpath = -rpath $(processdir)
psdf_logphi_la_LIBADD =
am_psdf_logphi_la_OBJECTS = psdf_logphi.lo
psdf_logphi_la_OBJECTS = $(am_psdf_logphi_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_psdf_logphi_la_rpath = -rpath $(processdir)
+psf_fit_la_LIBADD =
+am_psf_fit_la_OBJECTS = psf-fit.lo
+psf_fit_la_OBJECTS = $(am_psf_fit_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_psf_fit_la_rpath = -rpath $(processdir)
+psf_la_LIBADD =
+am_psf_la_OBJECTS = psf.lo
+psf_la_OBJECTS = $(am_psf_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_psf_la_rpath = -rpath $(processdir)
rank_la_LIBADD =
am_rank_la_OBJECTS = rank.lo
rank_la_OBJECTS = $(am_rank_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_rank_la_rpath = -rpath $(processdir)
rotate_la_LIBADD =
am_rotate_la_OBJECTS = rotate.lo
rotate_la_OBJECTS = $(am_rotate_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_rotate_la_rpath = -rpath $(processdir)
scale_la_LIBADD =
am_scale_la_OBJECTS = scale.lo
scale_la_OBJECTS = $(am_scale_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_scale_la_rpath = -rpath $(processdir)
scars_la_LIBADD =
am_scars_la_OBJECTS = scars.lo
scars_la_OBJECTS = $(am_scars_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_scars_la_rpath = -rpath $(processdir)
semsim_la_LIBADD =
am_semsim_la_OBJECTS = semsim.lo
semsim_la_OBJECTS = $(am_semsim_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_semsim_la_rpath = -rpath $(processdir)
shade_la_LIBADD =
am_shade_la_OBJECTS = shade.lo
shade_la_OBJECTS = $(am_shade_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_shade_la_rpath = -rpath $(processdir)
slope_dist_la_LIBADD =
am_slope_dist_la_OBJECTS = slope_dist.lo
slope_dist_la_OBJECTS = $(am_slope_dist_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_slope_dist_la_rpath = -rpath $(processdir)
sphere_revolve_la_LIBADD =
am_sphere_revolve_la_OBJECTS = sphere-revolve.lo
sphere_revolve_la_OBJECTS = $(am_sphere_revolve_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_sphere_revolve_la_rpath = -rpath \
+ at MODULE_BUNDLING_FALSE@ $(processdir)
+stitch_la_LIBADD =
+am_stitch_la_OBJECTS = stitch.lo
+stitch_la_OBJECTS = $(am_stitch_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_stitch_la_rpath = -rpath $(processdir)
straighten_path_la_LIBADD =
am_straighten_path_la_OBJECTS = straighten_path.lo
straighten_path_la_OBJECTS = $(am_straighten_path_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_straighten_path_la_rpath = -rpath \
+ at MODULE_BUNDLING_FALSE@ $(processdir)
threshold_la_LIBADD =
am_threshold_la_OBJECTS = threshold.lo
threshold_la_OBJECTS = $(am_threshold_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_threshold_la_rpath = -rpath $(processdir)
tilt_la_LIBADD =
am_tilt_la_OBJECTS = tilt.lo
tilt_la_OBJECTS = $(am_tilt_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_tilt_la_rpath = -rpath $(processdir)
tip_blind_la_LIBADD =
am_tip_blind_la_OBJECTS = tip_blind.lo
tip_blind_la_OBJECTS = $(am_tip_blind_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_tip_blind_la_rpath = -rpath $(processdir)
tip_model_la_LIBADD =
am_tip_model_la_OBJECTS = tip_model.lo
tip_model_la_OBJECTS = $(am_tip_model_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_tip_model_la_rpath = -rpath $(processdir)
tipops_la_LIBADD =
am_tipops_la_OBJECTS = tipops.lo
tipops_la_OBJECTS = $(am_tipops_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_tipops_la_rpath = -rpath $(processdir)
unrotate_la_LIBADD =
am_unrotate_la_OBJECTS = unrotate.lo
unrotate_la_OBJECTS = $(am_unrotate_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_unrotate_la_rpath = -rpath $(processdir)
volumize_la_LIBADD =
am_volumize_la_OBJECTS = volumize.lo
volumize_la_OBJECTS = $(am_volumize_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_volumize_la_rpath = -rpath $(processdir)
volumize_layers_la_LIBADD =
am_volumize_layers_la_OBJECTS = volumize_layers.lo
volumize_layers_la_OBJECTS = $(am_volumize_layers_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_volumize_layers_la_rpath = -rpath \
+ at MODULE_BUNDLING_FALSE@ $(processdir)
wave_synth_la_LIBADD =
am_wave_synth_la_OBJECTS = wave_synth.lo
wave_synth_la_OBJECTS = $(am_wave_synth_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_wave_synth_la_rpath = -rpath $(processdir)
wpour_mark_la_LIBADD =
am_wpour_mark_la_OBJECTS = wpour_mark.lo
wpour_mark_la_OBJECTS = $(am_wpour_mark_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_wpour_mark_la_rpath = -rpath $(processdir)
xydenoise_la_LIBADD =
am_xydenoise_la_OBJECTS = xydenoise.lo
xydenoise_la_OBJECTS = $(am_xydenoise_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_xydenoise_la_rpath = -rpath $(processdir)
xyzize_la_LIBADD =
am_xyzize_la_OBJECTS = xyzize.lo
xyzize_la_OBJECTS = $(am_xyzize_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_xyzize_la_rpath = -rpath $(processdir)
AM_V_P = $(am__v_P_ at AM_V@)
am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
am__v_P_0 = false
@@ -498,40 +826,46 @@ SOURCES = $(acf2d_la_SOURCES) $(angle_dist_la_SOURCES) \
$(correct_affine_la_SOURCES) $(crosscor_la_SOURCES) \
$(curvature_la_SOURCES) $(cwt_la_SOURCES) \
$(deposit_synth_la_SOURCES) $(diff_synth_la_SOURCES) \
- domain_synth.c $(drift_la_SOURCES) $(dwt_la_SOURCES) \
- $(dwtanisotropy_la_SOURCES) $(edge_la_SOURCES) \
- $(entropy_la_SOURCES) $(extend_la_SOURCES) \
+ $(domain_synth_la_SOURCES) $(drift_la_SOURCES) \
+ $(dwt_la_SOURCES) $(dwtanisotropy_la_SOURCES) \
+ $(edge_la_SOURCES) $(entropy_la_SOURCES) $(extend_la_SOURCES) \
$(extract_path_la_SOURCES) $(facet_level_la_SOURCES) \
$(facet_analysis_la_SOURCES) $(fbm_synth_la_SOURCES) \
$(fft_la_SOURCES) $(fft_filter_1d_la_SOURCES) \
$(fft_filter_2d_la_SOURCES) $(fft_profile_la_SOURCES) \
- $(fft_synth_la_SOURCES) $(fit_shape_la_SOURCES) \
- $(flatten_base_la_SOURCES) $(fraccor_la_SOURCES) \
- $(fractal_la_SOURCES) $(gradient_la_SOURCES) \
- $(grain_cross_la_SOURCES) $(grain_dist_la_SOURCES) \
- $(grain_edge_la_SOURCES) $(grain_filter_la_SOURCES) \
- $(grain_mark_la_SOURCES) $(grain_stat_la_SOURCES) \
- $(grain_wshed_la_SOURCES) $(hough_la_SOURCES) \
- $(immerse_la_SOURCES) $(indent_analyze_la_SOURCES) \
- $(laplace_la_SOURCES) $(lat_synth_la_SOURCES) \
- $(latsim_la_SOURCES) $(level_la_SOURCES) \
- $(level_grains_la_SOURCES) $(linecorrect_la_SOURCES) \
- $(linematch_la_SOURCES) $(lno_synth_la_SOURCES) \
- $(local_contrast_la_SOURCES) $(logistic_la_SOURCES) \
- $(mark_disconn_la_SOURCES) $(mark_with_la_SOURCES) \
- $(mask_distribute_la_SOURCES) $(mask_edt_la_SOURCES) \
- $(mask_morph_la_SOURCES) $(maskcor_la_SOURCES) \
+ $(fft_synth_la_SOURCES) $(fibre_synth_la_SOURCES) \
+ $(fit_shape_la_SOURCES) $(flatten_base_la_SOURCES) \
+ $(fraccor_la_SOURCES) $(fractal_la_SOURCES) \
+ $(gradient_la_SOURCES) $(grain_cross_la_SOURCES) \
+ $(grain_dist_la_SOURCES) $(grain_edge_la_SOURCES) \
+ $(grain_filter_la_SOURCES) $(grain_mark_la_SOURCES) \
+ $(grain_stat_la_SOURCES) $(grain_wshed_la_SOURCES) \
+ $(hough_la_SOURCES) $(immerse_la_SOURCES) \
+ $(indent_analyze_la_SOURCES) $(laplace_la_SOURCES) \
+ $(lat_synth_la_SOURCES) $(latsim_la_SOURCES) \
+ $(level_la_SOURCES) $(level_grains_la_SOURCES) \
+ $(linecorrect_la_SOURCES) $(linematch_la_SOURCES) \
+ $(lno_synth_la_SOURCES) $(local_contrast_la_SOURCES) \
+ $(logistic_la_SOURCES) $(mark_disconn_la_SOURCES) \
+ $(mark_with_la_SOURCES) $(mask_distribute_la_SOURCES) \
+ $(mask_edt_la_SOURCES) $(mask_morph_la_SOURCES) \
+ $(mask_noisify_la_SOURCES) $(maskcor_la_SOURCES) \
$(maskops_la_SOURCES) $(mcrop_la_SOURCES) \
$(measure_lattice_la_SOURCES) $(median_bg_la_SOURCES) \
- $(merge_la_SOURCES) $(neural_la_SOURCES) \
- $(noise_synth_la_SOURCES) $(obj_synth_la_SOURCES) \
- $(otsu_threshold_la_SOURCES) $(outliers_la_SOURCES) \
- $(pat_synth_la_SOURCES) $(pid_la_SOURCES) \
+ $(merge_la_SOURCES) $(mfm_current_la_SOURCES) \
+ $(mfm_field_la_SOURCES) $(mfm_findshift_la_SOURCES) \
+ $(mfm_parallel_la_SOURCES) $(mfm_shift_la_SOURCES) \
+ $(neural_la_SOURCES) $(noise_synth_la_SOURCES) \
+ $(obj_synth_la_SOURCES) $(otsu_threshold_la_SOURCES) \
+ $(outliers_la_SOURCES) $(pat_synth_la_SOURCES) \
+ $(phase_synth_la_SOURCES) $(pid_la_SOURCES) \
$(polydistort_la_SOURCES) $(polylevel_la_SOURCES) \
- $(presentationops_la_SOURCES) $(psdf_logphi_la_SOURCES) \
- $(rank_la_SOURCES) $(rotate_la_SOURCES) $(scale_la_SOURCES) \
- $(scars_la_SOURCES) $(semsim_la_SOURCES) $(shade_la_SOURCES) \
- $(slope_dist_la_SOURCES) $(sphere_revolve_la_SOURCES) \
+ $(presentationops_la_SOURCES) $(process_la_SOURCES) \
+ $(psdf_logphi_la_SOURCES) $(psf_fit_la_SOURCES) \
+ $(psf_la_SOURCES) $(rank_la_SOURCES) $(rotate_la_SOURCES) \
+ $(scale_la_SOURCES) $(scars_la_SOURCES) $(semsim_la_SOURCES) \
+ $(shade_la_SOURCES) $(slope_dist_la_SOURCES) \
+ $(sphere_revolve_la_SOURCES) $(stitch_la_SOURCES) \
$(straighten_path_la_SOURCES) $(threshold_la_SOURCES) \
$(tilt_la_SOURCES) $(tip_blind_la_SOURCES) \
$(tip_model_la_SOURCES) $(tipops_la_SOURCES) \
@@ -549,40 +883,46 @@ DIST_SOURCES = $(acf2d_la_SOURCES) $(angle_dist_la_SOURCES) \
$(correct_affine_la_SOURCES) $(crosscor_la_SOURCES) \
$(curvature_la_SOURCES) $(cwt_la_SOURCES) \
$(deposit_synth_la_SOURCES) $(diff_synth_la_SOURCES) \
- domain_synth.c $(drift_la_SOURCES) $(dwt_la_SOURCES) \
- $(dwtanisotropy_la_SOURCES) $(edge_la_SOURCES) \
- $(entropy_la_SOURCES) $(extend_la_SOURCES) \
+ $(domain_synth_la_SOURCES) $(drift_la_SOURCES) \
+ $(dwt_la_SOURCES) $(dwtanisotropy_la_SOURCES) \
+ $(edge_la_SOURCES) $(entropy_la_SOURCES) $(extend_la_SOURCES) \
$(extract_path_la_SOURCES) $(facet_level_la_SOURCES) \
$(facet_analysis_la_SOURCES) $(fbm_synth_la_SOURCES) \
$(fft_la_SOURCES) $(fft_filter_1d_la_SOURCES) \
$(fft_filter_2d_la_SOURCES) $(fft_profile_la_SOURCES) \
- $(fft_synth_la_SOURCES) $(fit_shape_la_SOURCES) \
- $(flatten_base_la_SOURCES) $(fraccor_la_SOURCES) \
- $(fractal_la_SOURCES) $(gradient_la_SOURCES) \
- $(grain_cross_la_SOURCES) $(grain_dist_la_SOURCES) \
- $(grain_edge_la_SOURCES) $(grain_filter_la_SOURCES) \
- $(grain_mark_la_SOURCES) $(grain_stat_la_SOURCES) \
- $(grain_wshed_la_SOURCES) $(hough_la_SOURCES) \
- $(immerse_la_SOURCES) $(indent_analyze_la_SOURCES) \
- $(laplace_la_SOURCES) $(lat_synth_la_SOURCES) \
- $(latsim_la_SOURCES) $(level_la_SOURCES) \
- $(level_grains_la_SOURCES) $(linecorrect_la_SOURCES) \
- $(linematch_la_SOURCES) $(lno_synth_la_SOURCES) \
- $(local_contrast_la_SOURCES) $(logistic_la_SOURCES) \
- $(mark_disconn_la_SOURCES) $(mark_with_la_SOURCES) \
- $(mask_distribute_la_SOURCES) $(mask_edt_la_SOURCES) \
- $(mask_morph_la_SOURCES) $(maskcor_la_SOURCES) \
+ $(fft_synth_la_SOURCES) $(fibre_synth_la_SOURCES) \
+ $(fit_shape_la_SOURCES) $(flatten_base_la_SOURCES) \
+ $(fraccor_la_SOURCES) $(fractal_la_SOURCES) \
+ $(gradient_la_SOURCES) $(grain_cross_la_SOURCES) \
+ $(grain_dist_la_SOURCES) $(grain_edge_la_SOURCES) \
+ $(grain_filter_la_SOURCES) $(grain_mark_la_SOURCES) \
+ $(grain_stat_la_SOURCES) $(grain_wshed_la_SOURCES) \
+ $(hough_la_SOURCES) $(immerse_la_SOURCES) \
+ $(indent_analyze_la_SOURCES) $(laplace_la_SOURCES) \
+ $(lat_synth_la_SOURCES) $(latsim_la_SOURCES) \
+ $(level_la_SOURCES) $(level_grains_la_SOURCES) \
+ $(linecorrect_la_SOURCES) $(linematch_la_SOURCES) \
+ $(lno_synth_la_SOURCES) $(local_contrast_la_SOURCES) \
+ $(logistic_la_SOURCES) $(mark_disconn_la_SOURCES) \
+ $(mark_with_la_SOURCES) $(mask_distribute_la_SOURCES) \
+ $(mask_edt_la_SOURCES) $(mask_morph_la_SOURCES) \
+ $(mask_noisify_la_SOURCES) $(maskcor_la_SOURCES) \
$(maskops_la_SOURCES) $(mcrop_la_SOURCES) \
$(measure_lattice_la_SOURCES) $(median_bg_la_SOURCES) \
- $(merge_la_SOURCES) $(neural_la_SOURCES) \
- $(noise_synth_la_SOURCES) $(obj_synth_la_SOURCES) \
- $(otsu_threshold_la_SOURCES) $(outliers_la_SOURCES) \
- $(pat_synth_la_SOURCES) $(pid_la_SOURCES) \
+ $(merge_la_SOURCES) $(mfm_current_la_SOURCES) \
+ $(mfm_field_la_SOURCES) $(mfm_findshift_la_SOURCES) \
+ $(mfm_parallel_la_SOURCES) $(mfm_shift_la_SOURCES) \
+ $(neural_la_SOURCES) $(noise_synth_la_SOURCES) \
+ $(obj_synth_la_SOURCES) $(otsu_threshold_la_SOURCES) \
+ $(outliers_la_SOURCES) $(pat_synth_la_SOURCES) \
+ $(phase_synth_la_SOURCES) $(pid_la_SOURCES) \
$(polydistort_la_SOURCES) $(polylevel_la_SOURCES) \
- $(presentationops_la_SOURCES) $(psdf_logphi_la_SOURCES) \
- $(rank_la_SOURCES) $(rotate_la_SOURCES) $(scale_la_SOURCES) \
- $(scars_la_SOURCES) $(semsim_la_SOURCES) $(shade_la_SOURCES) \
- $(slope_dist_la_SOURCES) $(sphere_revolve_la_SOURCES) \
+ $(presentationops_la_SOURCES) $(process_la_SOURCES) \
+ $(psdf_logphi_la_SOURCES) $(psf_fit_la_SOURCES) \
+ $(psf_la_SOURCES) $(rank_la_SOURCES) $(rotate_la_SOURCES) \
+ $(scale_la_SOURCES) $(scars_la_SOURCES) $(semsim_la_SOURCES) \
+ $(shade_la_SOURCES) $(slope_dist_la_SOURCES) \
+ $(sphere_revolve_la_SOURCES) $(stitch_la_SOURCES) \
$(straighten_path_la_SOURCES) $(threshold_la_SOURCES) \
$(tilt_la_SOURCES) $(tip_blind_la_SOURCES) \
$(tip_model_la_SOURCES) $(tipops_la_SOURCES) \
@@ -655,10 +995,7 @@ EPYDOC = @EPYDOC@
EXEEXT = @EXEEXT@
EXR_CFLAGS = @EXR_CFLAGS@
EXR_LIBS = @EXR_LIBS@
-FFTW3_1_CFLAGS = @FFTW3_1_CFLAGS@
-FFTW3_1_LIBS = @FFTW3_1_LIBS@
FFTW3_CFLAGS = @FFTW3_CFLAGS@
-FFTW3_DEPENDENCY = @FFTW3_DEPENDENCY@
FFTW3_LIBS = @FFTW3_LIBS@
FGREP = @FGREP@
GCONFTOOL = @GCONFTOOL@
@@ -668,6 +1005,8 @@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
GLIBC21 = @GLIBC21@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GMODULE_CFLAGS = @GMODULE_CFLAGS@
GMODULE_LIBS = @GMODULE_LIBS@
GMSGFMT = @GMSGFMT@
@@ -692,7 +1031,9 @@ GTK_MAC_LIBS = @GTK_MAC_LIBS@
GWY_VERSION_MAJOR = @GWY_VERSION_MAJOR@
GWY_VERSION_MINOR = @GWY_VERSION_MINOR@
GWY_VERSION_STRING = @GWY_VERSION_STRING@
+HDRIMAGE_EXTRA_CFLAGS = @HDRIMAGE_EXTRA_CFLAGS@
HTML_DIR = @HTML_DIR@
+INKSCAPE = @INKSCAPE@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -750,6 +1091,7 @@ PASCAL = @PASCAL@
PATH_SEPARATOR = @PATH_SEPARATOR@
PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
+PNGCRUSH = @PNGCRUSH@
PNG_CFLAGS = @PNG_CFLAGS@
PNG_LIBS = @PNG_LIBS@
POD2MAN = @POD2MAN@
@@ -758,17 +1100,13 @@ PYGTK_CFLAGS = @PYGTK_CFLAGS@
PYGTK_CODEGENDIR = @PYGTK_CODEGENDIR@
PYGTK_LIBS = @PYGTK_LIBS@
PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
PYTHON_EXTRA_CFLAGS = @PYTHON_EXTRA_CFLAGS@
PYTHON_INCLUDES = @PYTHON_INCLUDES@
-PYTHON_LIBS = @PYTHON_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
PYTHON_PLATFORM = @PYTHON_PLATFORM@
PYTHON_PREFIX = @PYTHON_PREFIX@
-PYTHON_SYSCFG_BASECFLAGS = @PYTHON_SYSCFG_BASECFLAGS@
-PYTHON_SYSCFG_CCSHARED = @PYTHON_SYSCFG_CCSHARED@
-PYTHON_SYSCFG_LDFLAGS = @PYTHON_SYSCFG_LDFLAGS@
-PYTHON_SYSCFG_LIBDIR = @PYTHON_SYSCFG_LIBDIR@
-PYTHON_SYSCFG_LINKFORSHARED = @PYTHON_SYSCFG_LINKFORSHARED@
PYTHON_VERSION = @PYTHON_VERSION@
RANLIB = @RANLIB@
RUBY = @RUBY@
@@ -862,7 +1200,11 @@ disabled_sources = \
superresolution.c
processdir = $(pkglibdir)/modules/process
-process_LTLIBRARIES = \
+
+# Only bundle modules without own dependencies. If something goes wrong with
+# any required libraries at run-time, it will at most break these individual
+# unbundled modules, not the bundle.
+bundlable_modules = \
acf2d.la \
angle_dist.la \
arithmetic.la \
@@ -899,6 +1241,7 @@ process_LTLIBRARIES = \
fft_filter_2d.la \
fft_profile.la \
fft_synth.la \
+ fibre_synth.la \
fit-shape.la \
flatten_base.la \
fraccor.la \
@@ -930,22 +1273,31 @@ process_LTLIBRARIES = \
mask_distribute.la \
mask_edt.la \
mask_morph.la \
+ mask_noisify.la \
maskops.la \
mcrop.la \
measure_lattice.la \
median-bg.la \
merge.la \
+ mfm_current.la \
+ mfm_field.la \
+ mfm_findshift.la \
+ mfm_parallel.la \
+ mfm_shift.la \
neural.la \
noise_synth.la \
obj_synth.la \
otsu_threshold.la \
outliers.la \
pat_synth.la \
+ phase_synth.la \
pid.la \
polylevel.la \
polydistort.la \
presentationops.la \
psdf_logphi.la \
+ psf.la \
+ psf-fit.la \
rank.la \
rotate.la \
semsim.la \
@@ -954,6 +1306,7 @@ process_LTLIBRARIES = \
shade.la \
slope_dist.la \
sphere-revolve.la \
+ stitch.la \
straighten_path.la \
threshold.la \
tilt.la \
@@ -968,13 +1321,19 @@ process_LTLIBRARIES = \
xydenoise.la \
xyzize.la
+ at MODULE_BUNDLING_FALSE@process_modules = $(bundlable_modules)
+
+# process_modules is either the bundle or all the individual modules.
+ at MODULE_BUNDLING_TRUE@process_modules = process.la
+ at MODULE_BUNDLING_TRUE@BUILT_SOURCES = process.c
+ at MODULE_BUNDLING_TRUE@process_la_CFLAGS = $(AM_CFLAGS) -DGWY_MODULE_BUNDLING
+process_LTLIBRARIES = \
+ $(process_modules)
+
EXTRA_DIST = \
$(disabled_sources)
@OS_MSWIN_TRUE at no_undefined = -no-undefined
-AM_CPPFLAGS = -I$(top_srcdir) -DG_LOG_DOMAIN=\"Module\"
-AM_CFLAGS = @COMMON_CFLAGS@
-AM_LDFLAGS = -avoid-version -module $(no_undefined) $(module_libadd)
@MODULE_DEPENDENCIES_TRUE at module_libadd = \
@MODULE_DEPENDENCIES_TRUE@ $(top_builddir)/app/libgwyapp2.la \
@MODULE_DEPENDENCIES_TRUE@ $(top_builddir)/libdraw/libgwydraw2.la \
@@ -984,6 +1343,11 @@ AM_LDFLAGS = -avoid-version -module $(no_undefined) $(module_libadd)
@MODULE_DEPENDENCIES_TRUE@ $(top_builddir)/libprocess/libgwyprocess2.la \
@MODULE_DEPENDENCIES_TRUE@ @GTK_LIBS@
+AM_CPPFLAGS = -I$(top_srcdir) -DG_LOG_DOMAIN=\"Module\"
+AM_CFLAGS = @COMMON_CFLAGS@
+AM_LDFLAGS = -avoid-version -module $(no_undefined) $(module_libadd)
+
+# Bundlable modules, must be listed in process_la_SOURCES below.
acf2d_la_SOURCES = acf2d.c
angle_dist_la_SOURCES = angle_dist.c preview.h
arithmetic_la_SOURCES = arithmetic.c preview.h
@@ -1004,6 +1368,7 @@ cwt_la_SOURCES = cwt.c preview.h
curvature_la_SOURCES = curvature.c preview.h
deposit_synth_la_SOURCES = deposit_synth.c dimensions.h preview.h
diff_synth_la_SOURCES = diff_synth.c dimensions.h synth.h preview.h
+domain_synth_la_SOURCES = domain_synth.c dimensions.h preview.h
drift_la_SOURCES = drift.c preview.h
dwt_la_SOURCES = dwt.c preview.h
dwtanisotropy_la_SOURCES = dwtanisotropy.c
@@ -1019,6 +1384,7 @@ fft_filter_2d_la_SOURCES = fft_filter_2d.c preview.h
fft_profile_la_SOURCES = fft_profile.c preview.h
fft_la_SOURCES = fft.c preview.h
fft_synth_la_SOURCES = fft_synth.c dimensions.h synth.h preview.h
+fibre_synth_la_SOURCES = fibre_synth.c dimensions.h synth.h preview.h
fit_shape_la_SOURCES = fit-shape.c preview.h
flatten_base_la_SOURCES = flatten_base.c
fractal_la_SOURCES = fractal.c preview.h
@@ -1050,11 +1416,17 @@ maskcor_la_SOURCES = maskcor.c
mask_distribute_la_SOURCES = mask_distribute.c preview.h
mask_edt_la_SOURCES = mask_edt.c
mask_morph_la_SOURCES = mask_morph.c
+mask_noisify_la_SOURCES = mask_noisify.c
maskops_la_SOURCES = maskops.c
mcrop_la_SOURCES = mcrop.c
measure_lattice_la_SOURCES = measure_lattice.c preview.h
median_bg_la_SOURCES = median-bg.c preview.h
merge_la_SOURCES = merge.c
+mfm_current_la_SOURCES = mfm_current.c mfmops.h
+mfm_field_la_SOURCES = mfm_field.c mfmops.h
+mfm_findshift_la_SOURCES = mfm_findshift.c mfmops.h
+mfm_parallel_la_SOURCES = mfm_parallel.c mfmops.h
+mfm_shift_la_SOURCES = mfm_shift.c mfmops.h
#nanoindent_adjust_la_SOURCES = nanoindent_adjust.c
neural_la_SOURCES = neural.c neuraldata.h
noise_synth_la_SOURCES = noise_synth.c dimensions.h synth.h preview.h
@@ -1062,11 +1434,14 @@ obj_synth_la_SOURCES = obj_synth.c dimensions.h synth.h preview.h
otsu_threshold_la_SOURCES = otsu_threshold.c
outliers_la_SOURCES = outliers.c
pat_synth_la_SOURCES = pat_synth.c dimensions.h synth.h preview.h
+phase_synth_la_SOURCES = phase_synth.c dimensions.h synth.h preview.h
pid_la_SOURCES = pid.c preview.h
polylevel_la_SOURCES = polylevel.c preview.h
polydistort_la_SOURCES = polydistort.c preview.h
presentationops_la_SOURCES = presentationops.c
psdf_logphi_la_SOURCES = psdf_logphi.c preview.h
+psf_la_SOURCES = psf.c preview.h mfmops.h
+psf_fit_la_SOURCES = psf-fit.c
rank_la_SOURCES = rank.c preview.h
rotate_la_SOURCES = rotate.c preview.h
scale_la_SOURCES = scale.c preview.h
@@ -1075,6 +1450,7 @@ semsim_la_SOURCES = semsim.c preview.h
shade_la_SOURCES = shade.c preview.h
slope_dist_la_SOURCES = slope_dist.c preview.h
sphere_revolve_la_SOURCES = sphere-revolve.c preview.h
+stitch_la_SOURCES = stitch.c
straighten_path_la_SOURCES = straighten_path.c preview.h
#superresolution_la_SOURCES = superresolution.c
threshold_la_SOURCES = threshold.c preview.h
@@ -1089,7 +1465,127 @@ wave_synth_la_SOURCES = wave_synth.c dimensions.h synth.h preview.h
wpour_mark_la_SOURCES = wpour_mark.c preview.h
xydenoise_la_SOURCES = xydenoise.c
xyzize_la_SOURCES = xyzize.c
-all: all-am
+process_la_SOURCES = \
+ $(acf2d_la_SOURCES) \
+ $(angle_dist_la_SOURCES) \
+ $(arithmetic_la_SOURCES) \
+ $(averaging_la_SOURCES) \
+ $(basicops_la_SOURCES) \
+ $(bdep_synth_la_SOURCES) \
+ $(calcoefs_load_la_SOURCES) \
+ $(calcoefs_new_la_SOURCES) \
+ $(calcoefs_simple_la_SOURCES) \
+ $(calcoefs_view_la_SOURCES) \
+ $(calibrate_la_SOURCES) \
+ $(coerce_la_SOURCES) \
+ $(col_synth_la_SOURCES) \
+ $(convolution_filter_la_SOURCES) \
+ $(correct_affine_la_SOURCES) \
+ $(crosscor_la_SOURCES) \
+ $(cwt_la_SOURCES) \
+ $(curvature_la_SOURCES) \
+ $(deposit_synth_la_SOURCES) \
+ $(diff_synth_la_SOURCES) \
+ $(domain_synth_la_SOURCES) \
+ $(drift_la_SOURCES) \
+ $(dwt_la_SOURCES) \
+ $(dwtanisotropy_la_SOURCES) \
+ $(edge_la_SOURCES) \
+ $(entropy_la_SOURCES) \
+ $(extend_la_SOURCES) \
+ $(extract_path_la_SOURCES) \
+ $(facet_analysis_la_SOURCES) \
+ $(facet_level_la_SOURCES) \
+ $(fbm_synth_la_SOURCES) \
+ $(fft_filter_1d_la_SOURCES) \
+ $(fft_filter_2d_la_SOURCES) \
+ $(fft_profile_la_SOURCES) \
+ $(fft_la_SOURCES) \
+ $(fft_synth_la_SOURCES) \
+ $(fibre_synth_la_SOURCES) \
+ $(fit_shape_la_SOURCES) \
+ $(flatten_base_la_SOURCES) \
+ $(fractal_la_SOURCES) \
+ $(fraccor_la_SOURCES) \
+ $(gradient_la_SOURCES) \
+ $(grain_cross_la_SOURCES) \
+ $(grain_dist_la_SOURCES) \
+ $(grain_edge_la_SOURCES) \
+ $(grain_filter_la_SOURCES) \
+ $(grain_mark_la_SOURCES) \
+ $(grain_stat_la_SOURCES) \
+ $(grain_wshed_la_SOURCES) \
+ $(hough_la_SOURCES) \
+ $(immerse_la_SOURCES) \
+ $(indent_analyze_la_SOURCES) \
+ $(laplace_la_SOURCES) \
+ $(lat_synth_la_SOURCES) \
+ $(latsim_la_SOURCES) \
+ $(level_la_SOURCES) \
+ $(level_grains_la_SOURCES) \
+ $(linecorrect_la_SOURCES) \
+ $(linematch_la_SOURCES) \
+ $(lno_synth_la_SOURCES) \
+ $(local_contrast_la_SOURCES) \
+ $(logistic_la_SOURCES) \
+ $(mark_disconn_la_SOURCES) \
+ $(mark_with_la_SOURCES) \
+ $(maskcor_la_SOURCES) \
+ $(mask_distribute_la_SOURCES) \
+ $(mask_edt_la_SOURCES) \
+ $(mask_morph_la_SOURCES) \
+ $(mask_noisify_la_SOURCES) \
+ $(maskops_la_SOURCES) \
+ $(mcrop_la_SOURCES) \
+ $(measure_lattice_la_SOURCES) \
+ $(median_bg_la_SOURCES) \
+ $(merge_la_SOURCES) \
+ $(mfm_current_la_SOURCES) \
+ $(mfm_field_la_SOURCES) \
+ $(mfm_findshift_la_SOURCES) \
+ $(mfm_parallel_la_SOURCES) \
+ $(mfm_shift_la_SOURCES) \
+ $(neural_la_SOURCES) \
+ $(noise_synth_la_SOURCES) \
+ $(obj_synth_la_SOURCES) \
+ $(otsu_threshold_la_SOURCES) \
+ $(outliers_la_SOURCES) \
+ $(pat_synth_la_SOURCES) \
+ $(phase_synth_la_SOURCES) \
+ $(pid_la_SOURCES) \
+ $(polylevel_la_SOURCES) \
+ $(polydistort_la_SOURCES) \
+ $(presentationops_la_SOURCES) \
+ $(psdf_logphi_la_SOURCES) \
+ $(psf_la_SOURCES) \
+ $(psf_fit_la_SOURCES) \
+ $(rank_la_SOURCES) \
+ $(rotate_la_SOURCES) \
+ $(scale_la_SOURCES) \
+ $(scars_la_SOURCES) \
+ $(semsim_la_SOURCES) \
+ $(shade_la_SOURCES) \
+ $(slope_dist_la_SOURCES) \
+ $(sphere_revolve_la_SOURCES) \
+ $(stitch_la_SOURCES) \
+ $(straighten_path_la_SOURCES) \
+ $(threshold_la_SOURCES) \
+ $(tilt_la_SOURCES) \
+ $(tip_blind_la_SOURCES) \
+ $(tip_model_la_SOURCES) \
+ $(tipops_la_SOURCES) \
+ $(unrotate_la_SOURCES) \
+ $(volumize_la_SOURCES) \
+ $(volumize_layers_la_SOURCES) \
+ $(wave_synth_la_SOURCES) \
+ $(wpour_mark_la_SOURCES) \
+ $(xydenoise_la_SOURCES) \
+ $(xyzize_la_SOURCES) \
+ process.c
+
+CLEAN_FILES = process.c
+all: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) all-am
.SUFFIXES:
.SUFFIXES: .c .lo .o .obj
@@ -1159,316 +1655,352 @@ clean-processLTLIBRARIES:
}
acf2d.la: $(acf2d_la_OBJECTS) $(acf2d_la_DEPENDENCIES) $(EXTRA_acf2d_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(acf2d_la_OBJECTS) $(acf2d_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_acf2d_la_rpath) $(acf2d_la_OBJECTS) $(acf2d_la_LIBADD) $(LIBS)
angle_dist.la: $(angle_dist_la_OBJECTS) $(angle_dist_la_DEPENDENCIES) $(EXTRA_angle_dist_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(angle_dist_la_OBJECTS) $(angle_dist_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_angle_dist_la_rpath) $(angle_dist_la_OBJECTS) $(angle_dist_la_LIBADD) $(LIBS)
arithmetic.la: $(arithmetic_la_OBJECTS) $(arithmetic_la_DEPENDENCIES) $(EXTRA_arithmetic_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(arithmetic_la_OBJECTS) $(arithmetic_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_arithmetic_la_rpath) $(arithmetic_la_OBJECTS) $(arithmetic_la_LIBADD) $(LIBS)
averaging.la: $(averaging_la_OBJECTS) $(averaging_la_DEPENDENCIES) $(EXTRA_averaging_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(averaging_la_OBJECTS) $(averaging_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_averaging_la_rpath) $(averaging_la_OBJECTS) $(averaging_la_LIBADD) $(LIBS)
basicops.la: $(basicops_la_OBJECTS) $(basicops_la_DEPENDENCIES) $(EXTRA_basicops_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(basicops_la_OBJECTS) $(basicops_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_basicops_la_rpath) $(basicops_la_OBJECTS) $(basicops_la_LIBADD) $(LIBS)
bdep_synth.la: $(bdep_synth_la_OBJECTS) $(bdep_synth_la_DEPENDENCIES) $(EXTRA_bdep_synth_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(bdep_synth_la_OBJECTS) $(bdep_synth_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_bdep_synth_la_rpath) $(bdep_synth_la_OBJECTS) $(bdep_synth_la_LIBADD) $(LIBS)
calcoefs_load.la: $(calcoefs_load_la_OBJECTS) $(calcoefs_load_la_DEPENDENCIES) $(EXTRA_calcoefs_load_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(calcoefs_load_la_OBJECTS) $(calcoefs_load_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_calcoefs_load_la_rpath) $(calcoefs_load_la_OBJECTS) $(calcoefs_load_la_LIBADD) $(LIBS)
calcoefs_new.la: $(calcoefs_new_la_OBJECTS) $(calcoefs_new_la_DEPENDENCIES) $(EXTRA_calcoefs_new_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(calcoefs_new_la_OBJECTS) $(calcoefs_new_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_calcoefs_new_la_rpath) $(calcoefs_new_la_OBJECTS) $(calcoefs_new_la_LIBADD) $(LIBS)
calcoefs_simple.la: $(calcoefs_simple_la_OBJECTS) $(calcoefs_simple_la_DEPENDENCIES) $(EXTRA_calcoefs_simple_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(calcoefs_simple_la_OBJECTS) $(calcoefs_simple_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_calcoefs_simple_la_rpath) $(calcoefs_simple_la_OBJECTS) $(calcoefs_simple_la_LIBADD) $(LIBS)
calcoefs_view.la: $(calcoefs_view_la_OBJECTS) $(calcoefs_view_la_DEPENDENCIES) $(EXTRA_calcoefs_view_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(calcoefs_view_la_OBJECTS) $(calcoefs_view_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_calcoefs_view_la_rpath) $(calcoefs_view_la_OBJECTS) $(calcoefs_view_la_LIBADD) $(LIBS)
calibrate.la: $(calibrate_la_OBJECTS) $(calibrate_la_DEPENDENCIES) $(EXTRA_calibrate_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(calibrate_la_OBJECTS) $(calibrate_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_calibrate_la_rpath) $(calibrate_la_OBJECTS) $(calibrate_la_LIBADD) $(LIBS)
coerce.la: $(coerce_la_OBJECTS) $(coerce_la_DEPENDENCIES) $(EXTRA_coerce_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(coerce_la_OBJECTS) $(coerce_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_coerce_la_rpath) $(coerce_la_OBJECTS) $(coerce_la_LIBADD) $(LIBS)
col_synth.la: $(col_synth_la_OBJECTS) $(col_synth_la_DEPENDENCIES) $(EXTRA_col_synth_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(col_synth_la_OBJECTS) $(col_synth_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_col_synth_la_rpath) $(col_synth_la_OBJECTS) $(col_synth_la_LIBADD) $(LIBS)
convolution_filter.la: $(convolution_filter_la_OBJECTS) $(convolution_filter_la_DEPENDENCIES) $(EXTRA_convolution_filter_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(convolution_filter_la_OBJECTS) $(convolution_filter_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_convolution_filter_la_rpath) $(convolution_filter_la_OBJECTS) $(convolution_filter_la_LIBADD) $(LIBS)
correct_affine.la: $(correct_affine_la_OBJECTS) $(correct_affine_la_DEPENDENCIES) $(EXTRA_correct_affine_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(correct_affine_la_OBJECTS) $(correct_affine_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_correct_affine_la_rpath) $(correct_affine_la_OBJECTS) $(correct_affine_la_LIBADD) $(LIBS)
crosscor.la: $(crosscor_la_OBJECTS) $(crosscor_la_DEPENDENCIES) $(EXTRA_crosscor_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(crosscor_la_OBJECTS) $(crosscor_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_crosscor_la_rpath) $(crosscor_la_OBJECTS) $(crosscor_la_LIBADD) $(LIBS)
curvature.la: $(curvature_la_OBJECTS) $(curvature_la_DEPENDENCIES) $(EXTRA_curvature_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(curvature_la_OBJECTS) $(curvature_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_curvature_la_rpath) $(curvature_la_OBJECTS) $(curvature_la_LIBADD) $(LIBS)
cwt.la: $(cwt_la_OBJECTS) $(cwt_la_DEPENDENCIES) $(EXTRA_cwt_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(cwt_la_OBJECTS) $(cwt_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_cwt_la_rpath) $(cwt_la_OBJECTS) $(cwt_la_LIBADD) $(LIBS)
deposit_synth.la: $(deposit_synth_la_OBJECTS) $(deposit_synth_la_DEPENDENCIES) $(EXTRA_deposit_synth_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(deposit_synth_la_OBJECTS) $(deposit_synth_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_deposit_synth_la_rpath) $(deposit_synth_la_OBJECTS) $(deposit_synth_la_LIBADD) $(LIBS)
diff_synth.la: $(diff_synth_la_OBJECTS) $(diff_synth_la_DEPENDENCIES) $(EXTRA_diff_synth_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(diff_synth_la_OBJECTS) $(diff_synth_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_diff_synth_la_rpath) $(diff_synth_la_OBJECTS) $(diff_synth_la_LIBADD) $(LIBS)
domain_synth.la: $(domain_synth_la_OBJECTS) $(domain_synth_la_DEPENDENCIES) $(EXTRA_domain_synth_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(domain_synth_la_OBJECTS) $(domain_synth_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_domain_synth_la_rpath) $(domain_synth_la_OBJECTS) $(domain_synth_la_LIBADD) $(LIBS)
drift.la: $(drift_la_OBJECTS) $(drift_la_DEPENDENCIES) $(EXTRA_drift_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(drift_la_OBJECTS) $(drift_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_drift_la_rpath) $(drift_la_OBJECTS) $(drift_la_LIBADD) $(LIBS)
dwt.la: $(dwt_la_OBJECTS) $(dwt_la_DEPENDENCIES) $(EXTRA_dwt_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(dwt_la_OBJECTS) $(dwt_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_dwt_la_rpath) $(dwt_la_OBJECTS) $(dwt_la_LIBADD) $(LIBS)
dwtanisotropy.la: $(dwtanisotropy_la_OBJECTS) $(dwtanisotropy_la_DEPENDENCIES) $(EXTRA_dwtanisotropy_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(dwtanisotropy_la_OBJECTS) $(dwtanisotropy_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_dwtanisotropy_la_rpath) $(dwtanisotropy_la_OBJECTS) $(dwtanisotropy_la_LIBADD) $(LIBS)
edge.la: $(edge_la_OBJECTS) $(edge_la_DEPENDENCIES) $(EXTRA_edge_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(edge_la_OBJECTS) $(edge_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_edge_la_rpath) $(edge_la_OBJECTS) $(edge_la_LIBADD) $(LIBS)
entropy.la: $(entropy_la_OBJECTS) $(entropy_la_DEPENDENCIES) $(EXTRA_entropy_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(entropy_la_OBJECTS) $(entropy_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_entropy_la_rpath) $(entropy_la_OBJECTS) $(entropy_la_LIBADD) $(LIBS)
extend.la: $(extend_la_OBJECTS) $(extend_la_DEPENDENCIES) $(EXTRA_extend_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(extend_la_OBJECTS) $(extend_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_extend_la_rpath) $(extend_la_OBJECTS) $(extend_la_LIBADD) $(LIBS)
extract_path.la: $(extract_path_la_OBJECTS) $(extract_path_la_DEPENDENCIES) $(EXTRA_extract_path_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(extract_path_la_OBJECTS) $(extract_path_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_extract_path_la_rpath) $(extract_path_la_OBJECTS) $(extract_path_la_LIBADD) $(LIBS)
facet-level.la: $(facet_level_la_OBJECTS) $(facet_level_la_DEPENDENCIES) $(EXTRA_facet_level_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(facet_level_la_OBJECTS) $(facet_level_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_facet_level_la_rpath) $(facet_level_la_OBJECTS) $(facet_level_la_LIBADD) $(LIBS)
facet_analysis.la: $(facet_analysis_la_OBJECTS) $(facet_analysis_la_DEPENDENCIES) $(EXTRA_facet_analysis_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(facet_analysis_la_OBJECTS) $(facet_analysis_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_facet_analysis_la_rpath) $(facet_analysis_la_OBJECTS) $(facet_analysis_la_LIBADD) $(LIBS)
fbm_synth.la: $(fbm_synth_la_OBJECTS) $(fbm_synth_la_DEPENDENCIES) $(EXTRA_fbm_synth_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(fbm_synth_la_OBJECTS) $(fbm_synth_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_fbm_synth_la_rpath) $(fbm_synth_la_OBJECTS) $(fbm_synth_la_LIBADD) $(LIBS)
fft.la: $(fft_la_OBJECTS) $(fft_la_DEPENDENCIES) $(EXTRA_fft_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(fft_la_OBJECTS) $(fft_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_fft_la_rpath) $(fft_la_OBJECTS) $(fft_la_LIBADD) $(LIBS)
fft_filter_1d.la: $(fft_filter_1d_la_OBJECTS) $(fft_filter_1d_la_DEPENDENCIES) $(EXTRA_fft_filter_1d_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(fft_filter_1d_la_OBJECTS) $(fft_filter_1d_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_fft_filter_1d_la_rpath) $(fft_filter_1d_la_OBJECTS) $(fft_filter_1d_la_LIBADD) $(LIBS)
fft_filter_2d.la: $(fft_filter_2d_la_OBJECTS) $(fft_filter_2d_la_DEPENDENCIES) $(EXTRA_fft_filter_2d_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(fft_filter_2d_la_OBJECTS) $(fft_filter_2d_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_fft_filter_2d_la_rpath) $(fft_filter_2d_la_OBJECTS) $(fft_filter_2d_la_LIBADD) $(LIBS)
fft_profile.la: $(fft_profile_la_OBJECTS) $(fft_profile_la_DEPENDENCIES) $(EXTRA_fft_profile_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(fft_profile_la_OBJECTS) $(fft_profile_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_fft_profile_la_rpath) $(fft_profile_la_OBJECTS) $(fft_profile_la_LIBADD) $(LIBS)
fft_synth.la: $(fft_synth_la_OBJECTS) $(fft_synth_la_DEPENDENCIES) $(EXTRA_fft_synth_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(fft_synth_la_OBJECTS) $(fft_synth_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_fft_synth_la_rpath) $(fft_synth_la_OBJECTS) $(fft_synth_la_LIBADD) $(LIBS)
+
+fibre_synth.la: $(fibre_synth_la_OBJECTS) $(fibre_synth_la_DEPENDENCIES) $(EXTRA_fibre_synth_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(LINK) $(am_fibre_synth_la_rpath) $(fibre_synth_la_OBJECTS) $(fibre_synth_la_LIBADD) $(LIBS)
fit-shape.la: $(fit_shape_la_OBJECTS) $(fit_shape_la_DEPENDENCIES) $(EXTRA_fit_shape_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(fit_shape_la_OBJECTS) $(fit_shape_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_fit_shape_la_rpath) $(fit_shape_la_OBJECTS) $(fit_shape_la_LIBADD) $(LIBS)
flatten_base.la: $(flatten_base_la_OBJECTS) $(flatten_base_la_DEPENDENCIES) $(EXTRA_flatten_base_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(flatten_base_la_OBJECTS) $(flatten_base_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_flatten_base_la_rpath) $(flatten_base_la_OBJECTS) $(flatten_base_la_LIBADD) $(LIBS)
fraccor.la: $(fraccor_la_OBJECTS) $(fraccor_la_DEPENDENCIES) $(EXTRA_fraccor_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(fraccor_la_OBJECTS) $(fraccor_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_fraccor_la_rpath) $(fraccor_la_OBJECTS) $(fraccor_la_LIBADD) $(LIBS)
fractal.la: $(fractal_la_OBJECTS) $(fractal_la_DEPENDENCIES) $(EXTRA_fractal_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(fractal_la_OBJECTS) $(fractal_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_fractal_la_rpath) $(fractal_la_OBJECTS) $(fractal_la_LIBADD) $(LIBS)
gradient.la: $(gradient_la_OBJECTS) $(gradient_la_DEPENDENCIES) $(EXTRA_gradient_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(gradient_la_OBJECTS) $(gradient_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_gradient_la_rpath) $(gradient_la_OBJECTS) $(gradient_la_LIBADD) $(LIBS)
grain_cross.la: $(grain_cross_la_OBJECTS) $(grain_cross_la_DEPENDENCIES) $(EXTRA_grain_cross_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(grain_cross_la_OBJECTS) $(grain_cross_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_grain_cross_la_rpath) $(grain_cross_la_OBJECTS) $(grain_cross_la_LIBADD) $(LIBS)
grain_dist.la: $(grain_dist_la_OBJECTS) $(grain_dist_la_DEPENDENCIES) $(EXTRA_grain_dist_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(grain_dist_la_OBJECTS) $(grain_dist_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_grain_dist_la_rpath) $(grain_dist_la_OBJECTS) $(grain_dist_la_LIBADD) $(LIBS)
grain_edge.la: $(grain_edge_la_OBJECTS) $(grain_edge_la_DEPENDENCIES) $(EXTRA_grain_edge_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(grain_edge_la_OBJECTS) $(grain_edge_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_grain_edge_la_rpath) $(grain_edge_la_OBJECTS) $(grain_edge_la_LIBADD) $(LIBS)
grain_filter.la: $(grain_filter_la_OBJECTS) $(grain_filter_la_DEPENDENCIES) $(EXTRA_grain_filter_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(grain_filter_la_OBJECTS) $(grain_filter_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_grain_filter_la_rpath) $(grain_filter_la_OBJECTS) $(grain_filter_la_LIBADD) $(LIBS)
grain_mark.la: $(grain_mark_la_OBJECTS) $(grain_mark_la_DEPENDENCIES) $(EXTRA_grain_mark_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(grain_mark_la_OBJECTS) $(grain_mark_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_grain_mark_la_rpath) $(grain_mark_la_OBJECTS) $(grain_mark_la_LIBADD) $(LIBS)
grain_stat.la: $(grain_stat_la_OBJECTS) $(grain_stat_la_DEPENDENCIES) $(EXTRA_grain_stat_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(grain_stat_la_OBJECTS) $(grain_stat_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_grain_stat_la_rpath) $(grain_stat_la_OBJECTS) $(grain_stat_la_LIBADD) $(LIBS)
grain_wshed.la: $(grain_wshed_la_OBJECTS) $(grain_wshed_la_DEPENDENCIES) $(EXTRA_grain_wshed_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(grain_wshed_la_OBJECTS) $(grain_wshed_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_grain_wshed_la_rpath) $(grain_wshed_la_OBJECTS) $(grain_wshed_la_LIBADD) $(LIBS)
hough.la: $(hough_la_OBJECTS) $(hough_la_DEPENDENCIES) $(EXTRA_hough_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(hough_la_OBJECTS) $(hough_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_hough_la_rpath) $(hough_la_OBJECTS) $(hough_la_LIBADD) $(LIBS)
immerse.la: $(immerse_la_OBJECTS) $(immerse_la_DEPENDENCIES) $(EXTRA_immerse_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(immerse_la_OBJECTS) $(immerse_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_immerse_la_rpath) $(immerse_la_OBJECTS) $(immerse_la_LIBADD) $(LIBS)
indent_analyze.la: $(indent_analyze_la_OBJECTS) $(indent_analyze_la_DEPENDENCIES) $(EXTRA_indent_analyze_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(indent_analyze_la_OBJECTS) $(indent_analyze_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_indent_analyze_la_rpath) $(indent_analyze_la_OBJECTS) $(indent_analyze_la_LIBADD) $(LIBS)
laplace.la: $(laplace_la_OBJECTS) $(laplace_la_DEPENDENCIES) $(EXTRA_laplace_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(laplace_la_OBJECTS) $(laplace_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_laplace_la_rpath) $(laplace_la_OBJECTS) $(laplace_la_LIBADD) $(LIBS)
lat_synth.la: $(lat_synth_la_OBJECTS) $(lat_synth_la_DEPENDENCIES) $(EXTRA_lat_synth_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(lat_synth_la_OBJECTS) $(lat_synth_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_lat_synth_la_rpath) $(lat_synth_la_OBJECTS) $(lat_synth_la_LIBADD) $(LIBS)
latsim.la: $(latsim_la_OBJECTS) $(latsim_la_DEPENDENCIES) $(EXTRA_latsim_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(latsim_la_OBJECTS) $(latsim_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_latsim_la_rpath) $(latsim_la_OBJECTS) $(latsim_la_LIBADD) $(LIBS)
level.la: $(level_la_OBJECTS) $(level_la_DEPENDENCIES) $(EXTRA_level_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(level_la_OBJECTS) $(level_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_level_la_rpath) $(level_la_OBJECTS) $(level_la_LIBADD) $(LIBS)
level_grains.la: $(level_grains_la_OBJECTS) $(level_grains_la_DEPENDENCIES) $(EXTRA_level_grains_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(level_grains_la_OBJECTS) $(level_grains_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_level_grains_la_rpath) $(level_grains_la_OBJECTS) $(level_grains_la_LIBADD) $(LIBS)
linecorrect.la: $(linecorrect_la_OBJECTS) $(linecorrect_la_DEPENDENCIES) $(EXTRA_linecorrect_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(linecorrect_la_OBJECTS) $(linecorrect_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_linecorrect_la_rpath) $(linecorrect_la_OBJECTS) $(linecorrect_la_LIBADD) $(LIBS)
linematch.la: $(linematch_la_OBJECTS) $(linematch_la_DEPENDENCIES) $(EXTRA_linematch_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(linematch_la_OBJECTS) $(linematch_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_linematch_la_rpath) $(linematch_la_OBJECTS) $(linematch_la_LIBADD) $(LIBS)
lno_synth.la: $(lno_synth_la_OBJECTS) $(lno_synth_la_DEPENDENCIES) $(EXTRA_lno_synth_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(lno_synth_la_OBJECTS) $(lno_synth_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_lno_synth_la_rpath) $(lno_synth_la_OBJECTS) $(lno_synth_la_LIBADD) $(LIBS)
local_contrast.la: $(local_contrast_la_OBJECTS) $(local_contrast_la_DEPENDENCIES) $(EXTRA_local_contrast_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(local_contrast_la_OBJECTS) $(local_contrast_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_local_contrast_la_rpath) $(local_contrast_la_OBJECTS) $(local_contrast_la_LIBADD) $(LIBS)
logistic.la: $(logistic_la_OBJECTS) $(logistic_la_DEPENDENCIES) $(EXTRA_logistic_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(logistic_la_OBJECTS) $(logistic_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_logistic_la_rpath) $(logistic_la_OBJECTS) $(logistic_la_LIBADD) $(LIBS)
mark_disconn.la: $(mark_disconn_la_OBJECTS) $(mark_disconn_la_DEPENDENCIES) $(EXTRA_mark_disconn_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(mark_disconn_la_OBJECTS) $(mark_disconn_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_mark_disconn_la_rpath) $(mark_disconn_la_OBJECTS) $(mark_disconn_la_LIBADD) $(LIBS)
mark_with.la: $(mark_with_la_OBJECTS) $(mark_with_la_DEPENDENCIES) $(EXTRA_mark_with_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(mark_with_la_OBJECTS) $(mark_with_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_mark_with_la_rpath) $(mark_with_la_OBJECTS) $(mark_with_la_LIBADD) $(LIBS)
mask_distribute.la: $(mask_distribute_la_OBJECTS) $(mask_distribute_la_DEPENDENCIES) $(EXTRA_mask_distribute_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(mask_distribute_la_OBJECTS) $(mask_distribute_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_mask_distribute_la_rpath) $(mask_distribute_la_OBJECTS) $(mask_distribute_la_LIBADD) $(LIBS)
mask_edt.la: $(mask_edt_la_OBJECTS) $(mask_edt_la_DEPENDENCIES) $(EXTRA_mask_edt_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(mask_edt_la_OBJECTS) $(mask_edt_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_mask_edt_la_rpath) $(mask_edt_la_OBJECTS) $(mask_edt_la_LIBADD) $(LIBS)
mask_morph.la: $(mask_morph_la_OBJECTS) $(mask_morph_la_DEPENDENCIES) $(EXTRA_mask_morph_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(mask_morph_la_OBJECTS) $(mask_morph_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_mask_morph_la_rpath) $(mask_morph_la_OBJECTS) $(mask_morph_la_LIBADD) $(LIBS)
+
+mask_noisify.la: $(mask_noisify_la_OBJECTS) $(mask_noisify_la_DEPENDENCIES) $(EXTRA_mask_noisify_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(LINK) $(am_mask_noisify_la_rpath) $(mask_noisify_la_OBJECTS) $(mask_noisify_la_LIBADD) $(LIBS)
maskcor.la: $(maskcor_la_OBJECTS) $(maskcor_la_DEPENDENCIES) $(EXTRA_maskcor_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(maskcor_la_OBJECTS) $(maskcor_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_maskcor_la_rpath) $(maskcor_la_OBJECTS) $(maskcor_la_LIBADD) $(LIBS)
maskops.la: $(maskops_la_OBJECTS) $(maskops_la_DEPENDENCIES) $(EXTRA_maskops_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(maskops_la_OBJECTS) $(maskops_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_maskops_la_rpath) $(maskops_la_OBJECTS) $(maskops_la_LIBADD) $(LIBS)
mcrop.la: $(mcrop_la_OBJECTS) $(mcrop_la_DEPENDENCIES) $(EXTRA_mcrop_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(mcrop_la_OBJECTS) $(mcrop_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_mcrop_la_rpath) $(mcrop_la_OBJECTS) $(mcrop_la_LIBADD) $(LIBS)
measure_lattice.la: $(measure_lattice_la_OBJECTS) $(measure_lattice_la_DEPENDENCIES) $(EXTRA_measure_lattice_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(measure_lattice_la_OBJECTS) $(measure_lattice_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_measure_lattice_la_rpath) $(measure_lattice_la_OBJECTS) $(measure_lattice_la_LIBADD) $(LIBS)
median-bg.la: $(median_bg_la_OBJECTS) $(median_bg_la_DEPENDENCIES) $(EXTRA_median_bg_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(median_bg_la_OBJECTS) $(median_bg_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_median_bg_la_rpath) $(median_bg_la_OBJECTS) $(median_bg_la_LIBADD) $(LIBS)
merge.la: $(merge_la_OBJECTS) $(merge_la_DEPENDENCIES) $(EXTRA_merge_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(merge_la_OBJECTS) $(merge_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_merge_la_rpath) $(merge_la_OBJECTS) $(merge_la_LIBADD) $(LIBS)
+
+mfm_current.la: $(mfm_current_la_OBJECTS) $(mfm_current_la_DEPENDENCIES) $(EXTRA_mfm_current_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(LINK) $(am_mfm_current_la_rpath) $(mfm_current_la_OBJECTS) $(mfm_current_la_LIBADD) $(LIBS)
+
+mfm_field.la: $(mfm_field_la_OBJECTS) $(mfm_field_la_DEPENDENCIES) $(EXTRA_mfm_field_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(LINK) $(am_mfm_field_la_rpath) $(mfm_field_la_OBJECTS) $(mfm_field_la_LIBADD) $(LIBS)
+
+mfm_findshift.la: $(mfm_findshift_la_OBJECTS) $(mfm_findshift_la_DEPENDENCIES) $(EXTRA_mfm_findshift_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(LINK) $(am_mfm_findshift_la_rpath) $(mfm_findshift_la_OBJECTS) $(mfm_findshift_la_LIBADD) $(LIBS)
+
+mfm_parallel.la: $(mfm_parallel_la_OBJECTS) $(mfm_parallel_la_DEPENDENCIES) $(EXTRA_mfm_parallel_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(LINK) $(am_mfm_parallel_la_rpath) $(mfm_parallel_la_OBJECTS) $(mfm_parallel_la_LIBADD) $(LIBS)
+
+mfm_shift.la: $(mfm_shift_la_OBJECTS) $(mfm_shift_la_DEPENDENCIES) $(EXTRA_mfm_shift_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(LINK) $(am_mfm_shift_la_rpath) $(mfm_shift_la_OBJECTS) $(mfm_shift_la_LIBADD) $(LIBS)
neural.la: $(neural_la_OBJECTS) $(neural_la_DEPENDENCIES) $(EXTRA_neural_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(neural_la_OBJECTS) $(neural_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_neural_la_rpath) $(neural_la_OBJECTS) $(neural_la_LIBADD) $(LIBS)
noise_synth.la: $(noise_synth_la_OBJECTS) $(noise_synth_la_DEPENDENCIES) $(EXTRA_noise_synth_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(noise_synth_la_OBJECTS) $(noise_synth_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_noise_synth_la_rpath) $(noise_synth_la_OBJECTS) $(noise_synth_la_LIBADD) $(LIBS)
obj_synth.la: $(obj_synth_la_OBJECTS) $(obj_synth_la_DEPENDENCIES) $(EXTRA_obj_synth_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(obj_synth_la_OBJECTS) $(obj_synth_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_obj_synth_la_rpath) $(obj_synth_la_OBJECTS) $(obj_synth_la_LIBADD) $(LIBS)
otsu_threshold.la: $(otsu_threshold_la_OBJECTS) $(otsu_threshold_la_DEPENDENCIES) $(EXTRA_otsu_threshold_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(otsu_threshold_la_OBJECTS) $(otsu_threshold_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_otsu_threshold_la_rpath) $(otsu_threshold_la_OBJECTS) $(otsu_threshold_la_LIBADD) $(LIBS)
outliers.la: $(outliers_la_OBJECTS) $(outliers_la_DEPENDENCIES) $(EXTRA_outliers_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(outliers_la_OBJECTS) $(outliers_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_outliers_la_rpath) $(outliers_la_OBJECTS) $(outliers_la_LIBADD) $(LIBS)
pat_synth.la: $(pat_synth_la_OBJECTS) $(pat_synth_la_DEPENDENCIES) $(EXTRA_pat_synth_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(pat_synth_la_OBJECTS) $(pat_synth_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_pat_synth_la_rpath) $(pat_synth_la_OBJECTS) $(pat_synth_la_LIBADD) $(LIBS)
+
+phase_synth.la: $(phase_synth_la_OBJECTS) $(phase_synth_la_DEPENDENCIES) $(EXTRA_phase_synth_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(LINK) $(am_phase_synth_la_rpath) $(phase_synth_la_OBJECTS) $(phase_synth_la_LIBADD) $(LIBS)
pid.la: $(pid_la_OBJECTS) $(pid_la_DEPENDENCIES) $(EXTRA_pid_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(pid_la_OBJECTS) $(pid_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_pid_la_rpath) $(pid_la_OBJECTS) $(pid_la_LIBADD) $(LIBS)
polydistort.la: $(polydistort_la_OBJECTS) $(polydistort_la_DEPENDENCIES) $(EXTRA_polydistort_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(polydistort_la_OBJECTS) $(polydistort_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_polydistort_la_rpath) $(polydistort_la_OBJECTS) $(polydistort_la_LIBADD) $(LIBS)
polylevel.la: $(polylevel_la_OBJECTS) $(polylevel_la_DEPENDENCIES) $(EXTRA_polylevel_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(polylevel_la_OBJECTS) $(polylevel_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_polylevel_la_rpath) $(polylevel_la_OBJECTS) $(polylevel_la_LIBADD) $(LIBS)
presentationops.la: $(presentationops_la_OBJECTS) $(presentationops_la_DEPENDENCIES) $(EXTRA_presentationops_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(presentationops_la_OBJECTS) $(presentationops_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_presentationops_la_rpath) $(presentationops_la_OBJECTS) $(presentationops_la_LIBADD) $(LIBS)
+
+process.la: $(process_la_OBJECTS) $(process_la_DEPENDENCIES) $(EXTRA_process_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(process_la_LINK) $(am_process_la_rpath) $(process_la_OBJECTS) $(process_la_LIBADD) $(LIBS)
psdf_logphi.la: $(psdf_logphi_la_OBJECTS) $(psdf_logphi_la_DEPENDENCIES) $(EXTRA_psdf_logphi_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(psdf_logphi_la_OBJECTS) $(psdf_logphi_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_psdf_logphi_la_rpath) $(psdf_logphi_la_OBJECTS) $(psdf_logphi_la_LIBADD) $(LIBS)
+
+psf-fit.la: $(psf_fit_la_OBJECTS) $(psf_fit_la_DEPENDENCIES) $(EXTRA_psf_fit_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(LINK) $(am_psf_fit_la_rpath) $(psf_fit_la_OBJECTS) $(psf_fit_la_LIBADD) $(LIBS)
+
+psf.la: $(psf_la_OBJECTS) $(psf_la_DEPENDENCIES) $(EXTRA_psf_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(LINK) $(am_psf_la_rpath) $(psf_la_OBJECTS) $(psf_la_LIBADD) $(LIBS)
rank.la: $(rank_la_OBJECTS) $(rank_la_DEPENDENCIES) $(EXTRA_rank_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(rank_la_OBJECTS) $(rank_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_rank_la_rpath) $(rank_la_OBJECTS) $(rank_la_LIBADD) $(LIBS)
rotate.la: $(rotate_la_OBJECTS) $(rotate_la_DEPENDENCIES) $(EXTRA_rotate_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(rotate_la_OBJECTS) $(rotate_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_rotate_la_rpath) $(rotate_la_OBJECTS) $(rotate_la_LIBADD) $(LIBS)
scale.la: $(scale_la_OBJECTS) $(scale_la_DEPENDENCIES) $(EXTRA_scale_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(scale_la_OBJECTS) $(scale_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_scale_la_rpath) $(scale_la_OBJECTS) $(scale_la_LIBADD) $(LIBS)
scars.la: $(scars_la_OBJECTS) $(scars_la_DEPENDENCIES) $(EXTRA_scars_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(scars_la_OBJECTS) $(scars_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_scars_la_rpath) $(scars_la_OBJECTS) $(scars_la_LIBADD) $(LIBS)
semsim.la: $(semsim_la_OBJECTS) $(semsim_la_DEPENDENCIES) $(EXTRA_semsim_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(semsim_la_OBJECTS) $(semsim_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_semsim_la_rpath) $(semsim_la_OBJECTS) $(semsim_la_LIBADD) $(LIBS)
shade.la: $(shade_la_OBJECTS) $(shade_la_DEPENDENCIES) $(EXTRA_shade_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(shade_la_OBJECTS) $(shade_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_shade_la_rpath) $(shade_la_OBJECTS) $(shade_la_LIBADD) $(LIBS)
slope_dist.la: $(slope_dist_la_OBJECTS) $(slope_dist_la_DEPENDENCIES) $(EXTRA_slope_dist_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(slope_dist_la_OBJECTS) $(slope_dist_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_slope_dist_la_rpath) $(slope_dist_la_OBJECTS) $(slope_dist_la_LIBADD) $(LIBS)
sphere-revolve.la: $(sphere_revolve_la_OBJECTS) $(sphere_revolve_la_DEPENDENCIES) $(EXTRA_sphere_revolve_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(sphere_revolve_la_OBJECTS) $(sphere_revolve_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_sphere_revolve_la_rpath) $(sphere_revolve_la_OBJECTS) $(sphere_revolve_la_LIBADD) $(LIBS)
+
+stitch.la: $(stitch_la_OBJECTS) $(stitch_la_DEPENDENCIES) $(EXTRA_stitch_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(LINK) $(am_stitch_la_rpath) $(stitch_la_OBJECTS) $(stitch_la_LIBADD) $(LIBS)
straighten_path.la: $(straighten_path_la_OBJECTS) $(straighten_path_la_DEPENDENCIES) $(EXTRA_straighten_path_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(straighten_path_la_OBJECTS) $(straighten_path_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_straighten_path_la_rpath) $(straighten_path_la_OBJECTS) $(straighten_path_la_LIBADD) $(LIBS)
threshold.la: $(threshold_la_OBJECTS) $(threshold_la_DEPENDENCIES) $(EXTRA_threshold_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(threshold_la_OBJECTS) $(threshold_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_threshold_la_rpath) $(threshold_la_OBJECTS) $(threshold_la_LIBADD) $(LIBS)
tilt.la: $(tilt_la_OBJECTS) $(tilt_la_DEPENDENCIES) $(EXTRA_tilt_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(tilt_la_OBJECTS) $(tilt_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_tilt_la_rpath) $(tilt_la_OBJECTS) $(tilt_la_LIBADD) $(LIBS)
tip_blind.la: $(tip_blind_la_OBJECTS) $(tip_blind_la_DEPENDENCIES) $(EXTRA_tip_blind_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(tip_blind_la_OBJECTS) $(tip_blind_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_tip_blind_la_rpath) $(tip_blind_la_OBJECTS) $(tip_blind_la_LIBADD) $(LIBS)
tip_model.la: $(tip_model_la_OBJECTS) $(tip_model_la_DEPENDENCIES) $(EXTRA_tip_model_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(tip_model_la_OBJECTS) $(tip_model_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_tip_model_la_rpath) $(tip_model_la_OBJECTS) $(tip_model_la_LIBADD) $(LIBS)
tipops.la: $(tipops_la_OBJECTS) $(tipops_la_DEPENDENCIES) $(EXTRA_tipops_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(tipops_la_OBJECTS) $(tipops_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_tipops_la_rpath) $(tipops_la_OBJECTS) $(tipops_la_LIBADD) $(LIBS)
unrotate.la: $(unrotate_la_OBJECTS) $(unrotate_la_DEPENDENCIES) $(EXTRA_unrotate_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(unrotate_la_OBJECTS) $(unrotate_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_unrotate_la_rpath) $(unrotate_la_OBJECTS) $(unrotate_la_LIBADD) $(LIBS)
volumize.la: $(volumize_la_OBJECTS) $(volumize_la_DEPENDENCIES) $(EXTRA_volumize_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(volumize_la_OBJECTS) $(volumize_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_volumize_la_rpath) $(volumize_la_OBJECTS) $(volumize_la_LIBADD) $(LIBS)
volumize_layers.la: $(volumize_layers_la_OBJECTS) $(volumize_layers_la_DEPENDENCIES) $(EXTRA_volumize_layers_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(volumize_layers_la_OBJECTS) $(volumize_layers_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_volumize_layers_la_rpath) $(volumize_layers_la_OBJECTS) $(volumize_layers_la_LIBADD) $(LIBS)
wave_synth.la: $(wave_synth_la_OBJECTS) $(wave_synth_la_DEPENDENCIES) $(EXTRA_wave_synth_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(wave_synth_la_OBJECTS) $(wave_synth_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_wave_synth_la_rpath) $(wave_synth_la_OBJECTS) $(wave_synth_la_LIBADD) $(LIBS)
wpour_mark.la: $(wpour_mark_la_OBJECTS) $(wpour_mark_la_DEPENDENCIES) $(EXTRA_wpour_mark_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(wpour_mark_la_OBJECTS) $(wpour_mark_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_wpour_mark_la_rpath) $(wpour_mark_la_OBJECTS) $(wpour_mark_la_LIBADD) $(LIBS)
xydenoise.la: $(xydenoise_la_OBJECTS) $(xydenoise_la_DEPENDENCIES) $(EXTRA_xydenoise_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(xydenoise_la_OBJECTS) $(xydenoise_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_xydenoise_la_rpath) $(xydenoise_la_OBJECTS) $(xydenoise_la_LIBADD) $(LIBS)
xyzize.la: $(xyzize_la_OBJECTS) $(xyzize_la_DEPENDENCIES) $(EXTRA_xyzize_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(processdir) $(xyzize_la_OBJECTS) $(xyzize_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_xyzize_la_rpath) $(xyzize_la_OBJECTS) $(xyzize_la_LIBADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@@ -1512,6 +2044,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/fft_filter_2d.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/fft_profile.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/fft_synth.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/fibre_synth.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/fit-shape.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/flatten_base.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/fraccor.Plo at am__quote@
@@ -1542,23 +2075,148 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mask_distribute.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mask_edt.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mask_morph.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mask_noisify.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/maskcor.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/maskops.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mcrop.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/measure_lattice.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/median-bg.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/merge.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mfm_current.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mfm_field.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mfm_findshift.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mfm_parallel.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mfm_shift.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/neural.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/noise_synth.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/obj_synth.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/otsu_threshold.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/outliers.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/pat_synth.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/phase_synth.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/pid.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/polydistort.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/polylevel.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/presentationops.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-acf2d.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-angle_dist.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-arithmetic.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-averaging.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-basicops.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-bdep_synth.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-calcoefs_load.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-calcoefs_new.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-calcoefs_simple.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-calcoefs_view.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-calibrate.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-coerce.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-col_synth.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-convolution_filter.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-correct_affine.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-crosscor.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-curvature.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-cwt.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-deposit_synth.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-diff_synth.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-domain_synth.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-drift.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-dwt.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-dwtanisotropy.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-edge.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-entropy.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-extend.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-extract_path.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-facet-level.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-facet_analysis.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-fbm_synth.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-fft.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-fft_filter_1d.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-fft_filter_2d.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-fft_profile.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-fft_synth.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-fibre_synth.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-fit-shape.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-flatten_base.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-fraccor.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-fractal.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-gradient.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-grain_cross.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-grain_dist.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-grain_edge.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-grain_filter.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-grain_mark.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-grain_stat.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-grain_wshed.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-hough.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-immerse.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-indent_analyze.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-laplace.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-lat_synth.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-latsim.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-level.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-level_grains.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-linecorrect.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-linematch.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-lno_synth.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-local_contrast.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-logistic.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-mark_disconn.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-mark_with.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-mask_distribute.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-mask_edt.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-mask_morph.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-mask_noisify.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-maskcor.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-maskops.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-mcrop.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-measure_lattice.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-median-bg.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-merge.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-mfm_current.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-mfm_field.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-mfm_findshift.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-mfm_parallel.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-mfm_shift.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-neural.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-noise_synth.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-obj_synth.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-otsu_threshold.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-outliers.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-pat_synth.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-phase_synth.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-pid.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-polydistort.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-polylevel.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-presentationops.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-process.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-psdf_logphi.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-psf-fit.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-psf.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-rank.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-rotate.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-scale.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-scars.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-semsim.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-shade.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-slope_dist.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-sphere-revolve.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-stitch.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-straighten_path.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-threshold.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-tilt.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-tip_blind.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-tip_model.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-tipops.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-unrotate.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-volumize.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-volumize_layers.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-wave_synth.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-wpour_mark.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-xydenoise.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/process_la-xyzize.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/psdf_logphi.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/psf-fit.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/psf.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/rank.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/rotate.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/scale.Plo at am__quote@
@@ -1567,6 +2225,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/shade.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/slope_dist.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/sphere-revolve.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/stitch.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/straighten_path.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/threshold.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/tilt.Plo at am__quote@
@@ -1602,6 +2261,818 @@ distclean-compile:
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LTCOMPILE) -c -o $@ $<
+process_la-acf2d.lo: acf2d.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-acf2d.lo -MD -MP -MF $(DEPDIR)/process_la-acf2d.Tpo -c -o process_la-acf2d.lo `test -f 'acf2d.c' || echo '$(srcdir)/'`acf2d.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-acf2d.Tpo $(DEPDIR)/process_la-acf2d.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='acf2d.c' object='process_la-acf2d.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-acf2d.lo `test -f 'acf2d.c' || echo '$(srcdir)/'`acf2d.c
+
+process_la-angle_dist.lo: angle_dist.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-angle_dist.lo -MD -MP -MF $(DEPDIR)/process_la-angle_dist.Tpo -c -o process_la-angle_dist.lo `test -f 'angle_dist.c' || echo '$(srcdir)/'`angle_dist.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-angle_dist.Tpo $(DEPDIR)/process_la-angle_dist.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='angle_dist.c' object='process_la-angle_dist.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-angle_dist.lo `test -f 'angle_dist.c' || echo '$(srcdir)/'`angle_dist.c
+
+process_la-arithmetic.lo: arithmetic.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-arithmetic.lo -MD -MP -MF $(DEPDIR)/process_la-arithmetic.Tpo -c -o process_la-arithmetic.lo `test -f 'arithmetic.c' || echo '$(srcdir)/'`arithmetic.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-arithmetic.Tpo $(DEPDIR)/process_la-arithmetic.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='arithmetic.c' object='process_la-arithmetic.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-arithmetic.lo `test -f 'arithmetic.c' || echo '$(srcdir)/'`arithmetic.c
+
+process_la-averaging.lo: averaging.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-averaging.lo -MD -MP -MF $(DEPDIR)/process_la-averaging.Tpo -c -o process_la-averaging.lo `test -f 'averaging.c' || echo '$(srcdir)/'`averaging.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-averaging.Tpo $(DEPDIR)/process_la-averaging.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='averaging.c' object='process_la-averaging.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-averaging.lo `test -f 'averaging.c' || echo '$(srcdir)/'`averaging.c
+
+process_la-basicops.lo: basicops.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-basicops.lo -MD -MP -MF $(DEPDIR)/process_la-basicops.Tpo -c -o process_la-basicops.lo `test -f 'basicops.c' || echo '$(srcdir)/'`basicops.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-basicops.Tpo $(DEPDIR)/process_la-basicops.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='basicops.c' object='process_la-basicops.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-basicops.lo `test -f 'basicops.c' || echo '$(srcdir)/'`basicops.c
+
+process_la-bdep_synth.lo: bdep_synth.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-bdep_synth.lo -MD -MP -MF $(DEPDIR)/process_la-bdep_synth.Tpo -c -o process_la-bdep_synth.lo `test -f 'bdep_synth.c' || echo '$(srcdir)/'`bdep_synth.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-bdep_synth.Tpo $(DEPDIR)/process_la-bdep_synth.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='bdep_synth.c' object='process_la-bdep_synth.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-bdep_synth.lo `test -f 'bdep_synth.c' || echo '$(srcdir)/'`bdep_synth.c
+
+process_la-calcoefs_load.lo: calcoefs_load.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-calcoefs_load.lo -MD -MP -MF $(DEPDIR)/process_la-calcoefs_load.Tpo -c -o process_la-calcoefs_load.lo `test -f 'calcoefs_load.c' || echo '$(srcdir)/'`calcoefs_load.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-calcoefs_load.Tpo $(DEPDIR)/process_la-calcoefs_load.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='calcoefs_load.c' object='process_la-calcoefs_load.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-calcoefs_load.lo `test -f 'calcoefs_load.c' || echo '$(srcdir)/'`calcoefs_load.c
+
+process_la-calcoefs_new.lo: calcoefs_new.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-calcoefs_new.lo -MD -MP -MF $(DEPDIR)/process_la-calcoefs_new.Tpo -c -o process_la-calcoefs_new.lo `test -f 'calcoefs_new.c' || echo '$(srcdir)/'`calcoefs_new.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-calcoefs_new.Tpo $(DEPDIR)/process_la-calcoefs_new.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='calcoefs_new.c' object='process_la-calcoefs_new.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-calcoefs_new.lo `test -f 'calcoefs_new.c' || echo '$(srcdir)/'`calcoefs_new.c
+
+process_la-calcoefs_simple.lo: calcoefs_simple.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-calcoefs_simple.lo -MD -MP -MF $(DEPDIR)/process_la-calcoefs_simple.Tpo -c -o process_la-calcoefs_simple.lo `test -f 'calcoefs_simple.c' || echo '$(srcdir)/'`calcoefs_simple.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-calcoefs_simple.Tpo $(DEPDIR)/process_la-calcoefs_simple.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='calcoefs_simple.c' object='process_la-calcoefs_simple.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-calcoefs_simple.lo `test -f 'calcoefs_simple.c' || echo '$(srcdir)/'`calcoefs_simple.c
+
+process_la-calcoefs_view.lo: calcoefs_view.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-calcoefs_view.lo -MD -MP -MF $(DEPDIR)/process_la-calcoefs_view.Tpo -c -o process_la-calcoefs_view.lo `test -f 'calcoefs_view.c' || echo '$(srcdir)/'`calcoefs_view.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-calcoefs_view.Tpo $(DEPDIR)/process_la-calcoefs_view.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='calcoefs_view.c' object='process_la-calcoefs_view.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-calcoefs_view.lo `test -f 'calcoefs_view.c' || echo '$(srcdir)/'`calcoefs_view.c
+
+process_la-calibrate.lo: calibrate.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-calibrate.lo -MD -MP -MF $(DEPDIR)/process_la-calibrate.Tpo -c -o process_la-calibrate.lo `test -f 'calibrate.c' || echo '$(srcdir)/'`calibrate.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-calibrate.Tpo $(DEPDIR)/process_la-calibrate.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='calibrate.c' object='process_la-calibrate.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-calibrate.lo `test -f 'calibrate.c' || echo '$(srcdir)/'`calibrate.c
+
+process_la-coerce.lo: coerce.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-coerce.lo -MD -MP -MF $(DEPDIR)/process_la-coerce.Tpo -c -o process_la-coerce.lo `test -f 'coerce.c' || echo '$(srcdir)/'`coerce.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-coerce.Tpo $(DEPDIR)/process_la-coerce.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='coerce.c' object='process_la-coerce.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-coerce.lo `test -f 'coerce.c' || echo '$(srcdir)/'`coerce.c
+
+process_la-col_synth.lo: col_synth.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-col_synth.lo -MD -MP -MF $(DEPDIR)/process_la-col_synth.Tpo -c -o process_la-col_synth.lo `test -f 'col_synth.c' || echo '$(srcdir)/'`col_synth.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-col_synth.Tpo $(DEPDIR)/process_la-col_synth.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='col_synth.c' object='process_la-col_synth.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-col_synth.lo `test -f 'col_synth.c' || echo '$(srcdir)/'`col_synth.c
+
+process_la-convolution_filter.lo: convolution_filter.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-convolution_filter.lo -MD -MP -MF $(DEPDIR)/process_la-convolution_filter.Tpo -c -o process_la-convolution_filter.lo `test -f 'convolution_filter.c' || echo '$(srcdir)/'`convolution_filter.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-convolution_filter.Tpo $(DEPDIR)/process_la-convolution_filter.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='convolution_filter.c' object='process_la-convolution_filter.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-convolution_filter.lo `test -f 'convolution_filter.c' || echo '$(srcdir)/'`convolution_filter.c
+
+process_la-correct_affine.lo: correct_affine.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-correct_affine.lo -MD -MP -MF $(DEPDIR)/process_la-correct_affine.Tpo -c -o process_la-correct_affine.lo `test -f 'correct_affine.c' || echo '$(srcdir)/'`correct_affine.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-correct_affine.Tpo $(DEPDIR)/process_la-correct_affine.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='correct_affine.c' object='process_la-correct_affine.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-correct_affine.lo `test -f 'correct_affine.c' || echo '$(srcdir)/'`correct_affine.c
+
+process_la-crosscor.lo: crosscor.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-crosscor.lo -MD -MP -MF $(DEPDIR)/process_la-crosscor.Tpo -c -o process_la-crosscor.lo `test -f 'crosscor.c' || echo '$(srcdir)/'`crosscor.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-crosscor.Tpo $(DEPDIR)/process_la-crosscor.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='crosscor.c' object='process_la-crosscor.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-crosscor.lo `test -f 'crosscor.c' || echo '$(srcdir)/'`crosscor.c
+
+process_la-cwt.lo: cwt.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-cwt.lo -MD -MP -MF $(DEPDIR)/process_la-cwt.Tpo -c -o process_la-cwt.lo `test -f 'cwt.c' || echo '$(srcdir)/'`cwt.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-cwt.Tpo $(DEPDIR)/process_la-cwt.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cwt.c' object='process_la-cwt.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-cwt.lo `test -f 'cwt.c' || echo '$(srcdir)/'`cwt.c
+
+process_la-curvature.lo: curvature.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-curvature.lo -MD -MP -MF $(DEPDIR)/process_la-curvature.Tpo -c -o process_la-curvature.lo `test -f 'curvature.c' || echo '$(srcdir)/'`curvature.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-curvature.Tpo $(DEPDIR)/process_la-curvature.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='curvature.c' object='process_la-curvature.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-curvature.lo `test -f 'curvature.c' || echo '$(srcdir)/'`curvature.c
+
+process_la-deposit_synth.lo: deposit_synth.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-deposit_synth.lo -MD -MP -MF $(DEPDIR)/process_la-deposit_synth.Tpo -c -o process_la-deposit_synth.lo `test -f 'deposit_synth.c' || echo '$(srcdir)/'`deposit_synth.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-deposit_synth.Tpo $(DEPDIR)/process_la-deposit_synth.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='deposit_synth.c' object='process_la-deposit_synth.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-deposit_synth.lo `test -f 'deposit_synth.c' || echo '$(srcdir)/'`deposit_synth.c
+
+process_la-diff_synth.lo: diff_synth.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-diff_synth.lo -MD -MP -MF $(DEPDIR)/process_la-diff_synth.Tpo -c -o process_la-diff_synth.lo `test -f 'diff_synth.c' || echo '$(srcdir)/'`diff_synth.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-diff_synth.Tpo $(DEPDIR)/process_la-diff_synth.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='diff_synth.c' object='process_la-diff_synth.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-diff_synth.lo `test -f 'diff_synth.c' || echo '$(srcdir)/'`diff_synth.c
+
+process_la-domain_synth.lo: domain_synth.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-domain_synth.lo -MD -MP -MF $(DEPDIR)/process_la-domain_synth.Tpo -c -o process_la-domain_synth.lo `test -f 'domain_synth.c' || echo '$(srcdir)/'`domain_synth.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-domain_synth.Tpo $(DEPDIR)/process_la-domain_synth.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='domain_synth.c' object='process_la-domain_synth.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-domain_synth.lo `test -f 'domain_synth.c' || echo '$(srcdir)/'`domain_synth.c
+
+process_la-drift.lo: drift.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-drift.lo -MD -MP -MF $(DEPDIR)/process_la-drift.Tpo -c -o process_la-drift.lo `test -f 'drift.c' || echo '$(srcdir)/'`drift.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-drift.Tpo $(DEPDIR)/process_la-drift.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='drift.c' object='process_la-drift.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-drift.lo `test -f 'drift.c' || echo '$(srcdir)/'`drift.c
+
+process_la-dwt.lo: dwt.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-dwt.lo -MD -MP -MF $(DEPDIR)/process_la-dwt.Tpo -c -o process_la-dwt.lo `test -f 'dwt.c' || echo '$(srcdir)/'`dwt.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-dwt.Tpo $(DEPDIR)/process_la-dwt.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dwt.c' object='process_la-dwt.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-dwt.lo `test -f 'dwt.c' || echo '$(srcdir)/'`dwt.c
+
+process_la-dwtanisotropy.lo: dwtanisotropy.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-dwtanisotropy.lo -MD -MP -MF $(DEPDIR)/process_la-dwtanisotropy.Tpo -c -o process_la-dwtanisotropy.lo `test -f 'dwtanisotropy.c' || echo '$(srcdir)/'`dwtanisotropy.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-dwtanisotropy.Tpo $(DEPDIR)/process_la-dwtanisotropy.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dwtanisotropy.c' object='process_la-dwtanisotropy.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-dwtanisotropy.lo `test -f 'dwtanisotropy.c' || echo '$(srcdir)/'`dwtanisotropy.c
+
+process_la-edge.lo: edge.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-edge.lo -MD -MP -MF $(DEPDIR)/process_la-edge.Tpo -c -o process_la-edge.lo `test -f 'edge.c' || echo '$(srcdir)/'`edge.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-edge.Tpo $(DEPDIR)/process_la-edge.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='edge.c' object='process_la-edge.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-edge.lo `test -f 'edge.c' || echo '$(srcdir)/'`edge.c
+
+process_la-entropy.lo: entropy.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-entropy.lo -MD -MP -MF $(DEPDIR)/process_la-entropy.Tpo -c -o process_la-entropy.lo `test -f 'entropy.c' || echo '$(srcdir)/'`entropy.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-entropy.Tpo $(DEPDIR)/process_la-entropy.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='entropy.c' object='process_la-entropy.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-entropy.lo `test -f 'entropy.c' || echo '$(srcdir)/'`entropy.c
+
+process_la-extend.lo: extend.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-extend.lo -MD -MP -MF $(DEPDIR)/process_la-extend.Tpo -c -o process_la-extend.lo `test -f 'extend.c' || echo '$(srcdir)/'`extend.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-extend.Tpo $(DEPDIR)/process_la-extend.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='extend.c' object='process_la-extend.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-extend.lo `test -f 'extend.c' || echo '$(srcdir)/'`extend.c
+
+process_la-extract_path.lo: extract_path.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-extract_path.lo -MD -MP -MF $(DEPDIR)/process_la-extract_path.Tpo -c -o process_la-extract_path.lo `test -f 'extract_path.c' || echo '$(srcdir)/'`extract_path.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-extract_path.Tpo $(DEPDIR)/process_la-extract_path.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='extract_path.c' object='process_la-extract_path.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-extract_path.lo `test -f 'extract_path.c' || echo '$(srcdir)/'`extract_path.c
+
+process_la-facet_analysis.lo: facet_analysis.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-facet_analysis.lo -MD -MP -MF $(DEPDIR)/process_la-facet_analysis.Tpo -c -o process_la-facet_analysis.lo `test -f 'facet_analysis.c' || echo '$(srcdir)/'`facet_analysis.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-facet_analysis.Tpo $(DEPDIR)/process_la-facet_analysis.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='facet_analysis.c' object='process_la-facet_analysis.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-facet_analysis.lo `test -f 'facet_analysis.c' || echo '$(srcdir)/'`facet_analysis.c
+
+process_la-facet-level.lo: facet-level.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-facet-level.lo -MD -MP -MF $(DEPDIR)/process_la-facet-level.Tpo -c -o process_la-facet-level.lo `test -f 'facet-level.c' || echo '$(srcdir)/'`facet-level.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-facet-level.Tpo $(DEPDIR)/process_la-facet-level.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='facet-level.c' object='process_la-facet-level.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-facet-level.lo `test -f 'facet-level.c' || echo '$(srcdir)/'`facet-level.c
+
+process_la-fbm_synth.lo: fbm_synth.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-fbm_synth.lo -MD -MP -MF $(DEPDIR)/process_la-fbm_synth.Tpo -c -o process_la-fbm_synth.lo `test -f 'fbm_synth.c' || echo '$(srcdir)/'`fbm_synth.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-fbm_synth.Tpo $(DEPDIR)/process_la-fbm_synth.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fbm_synth.c' object='process_la-fbm_synth.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-fbm_synth.lo `test -f 'fbm_synth.c' || echo '$(srcdir)/'`fbm_synth.c
+
+process_la-fft_filter_1d.lo: fft_filter_1d.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-fft_filter_1d.lo -MD -MP -MF $(DEPDIR)/process_la-fft_filter_1d.Tpo -c -o process_la-fft_filter_1d.lo `test -f 'fft_filter_1d.c' || echo '$(srcdir)/'`fft_filter_1d.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-fft_filter_1d.Tpo $(DEPDIR)/process_la-fft_filter_1d.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fft_filter_1d.c' object='process_la-fft_filter_1d.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-fft_filter_1d.lo `test -f 'fft_filter_1d.c' || echo '$(srcdir)/'`fft_filter_1d.c
+
+process_la-fft_filter_2d.lo: fft_filter_2d.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-fft_filter_2d.lo -MD -MP -MF $(DEPDIR)/process_la-fft_filter_2d.Tpo -c -o process_la-fft_filter_2d.lo `test -f 'fft_filter_2d.c' || echo '$(srcdir)/'`fft_filter_2d.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-fft_filter_2d.Tpo $(DEPDIR)/process_la-fft_filter_2d.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fft_filter_2d.c' object='process_la-fft_filter_2d.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-fft_filter_2d.lo `test -f 'fft_filter_2d.c' || echo '$(srcdir)/'`fft_filter_2d.c
+
+process_la-fft_profile.lo: fft_profile.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-fft_profile.lo -MD -MP -MF $(DEPDIR)/process_la-fft_profile.Tpo -c -o process_la-fft_profile.lo `test -f 'fft_profile.c' || echo '$(srcdir)/'`fft_profile.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-fft_profile.Tpo $(DEPDIR)/process_la-fft_profile.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fft_profile.c' object='process_la-fft_profile.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-fft_profile.lo `test -f 'fft_profile.c' || echo '$(srcdir)/'`fft_profile.c
+
+process_la-fft.lo: fft.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-fft.lo -MD -MP -MF $(DEPDIR)/process_la-fft.Tpo -c -o process_la-fft.lo `test -f 'fft.c' || echo '$(srcdir)/'`fft.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-fft.Tpo $(DEPDIR)/process_la-fft.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fft.c' object='process_la-fft.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-fft.lo `test -f 'fft.c' || echo '$(srcdir)/'`fft.c
+
+process_la-fft_synth.lo: fft_synth.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-fft_synth.lo -MD -MP -MF $(DEPDIR)/process_la-fft_synth.Tpo -c -o process_la-fft_synth.lo `test -f 'fft_synth.c' || echo '$(srcdir)/'`fft_synth.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-fft_synth.Tpo $(DEPDIR)/process_la-fft_synth.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fft_synth.c' object='process_la-fft_synth.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-fft_synth.lo `test -f 'fft_synth.c' || echo '$(srcdir)/'`fft_synth.c
+
+process_la-fibre_synth.lo: fibre_synth.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-fibre_synth.lo -MD -MP -MF $(DEPDIR)/process_la-fibre_synth.Tpo -c -o process_la-fibre_synth.lo `test -f 'fibre_synth.c' || echo '$(srcdir)/'`fibre_synth.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-fibre_synth.Tpo $(DEPDIR)/process_la-fibre_synth.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fibre_synth.c' object='process_la-fibre_synth.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-fibre_synth.lo `test -f 'fibre_synth.c' || echo '$(srcdir)/'`fibre_synth.c
+
+process_la-fit-shape.lo: fit-shape.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-fit-shape.lo -MD -MP -MF $(DEPDIR)/process_la-fit-shape.Tpo -c -o process_la-fit-shape.lo `test -f 'fit-shape.c' || echo '$(srcdir)/'`fit-shape.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-fit-shape.Tpo $(DEPDIR)/process_la-fit-shape.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fit-shape.c' object='process_la-fit-shape.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-fit-shape.lo `test -f 'fit-shape.c' || echo '$(srcdir)/'`fit-shape.c
+
+process_la-flatten_base.lo: flatten_base.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-flatten_base.lo -MD -MP -MF $(DEPDIR)/process_la-flatten_base.Tpo -c -o process_la-flatten_base.lo `test -f 'flatten_base.c' || echo '$(srcdir)/'`flatten_base.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-flatten_base.Tpo $(DEPDIR)/process_la-flatten_base.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='flatten_base.c' object='process_la-flatten_base.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-flatten_base.lo `test -f 'flatten_base.c' || echo '$(srcdir)/'`flatten_base.c
+
+process_la-fractal.lo: fractal.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-fractal.lo -MD -MP -MF $(DEPDIR)/process_la-fractal.Tpo -c -o process_la-fractal.lo `test -f 'fractal.c' || echo '$(srcdir)/'`fractal.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-fractal.Tpo $(DEPDIR)/process_la-fractal.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fractal.c' object='process_la-fractal.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-fractal.lo `test -f 'fractal.c' || echo '$(srcdir)/'`fractal.c
+
+process_la-fraccor.lo: fraccor.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-fraccor.lo -MD -MP -MF $(DEPDIR)/process_la-fraccor.Tpo -c -o process_la-fraccor.lo `test -f 'fraccor.c' || echo '$(srcdir)/'`fraccor.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-fraccor.Tpo $(DEPDIR)/process_la-fraccor.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fraccor.c' object='process_la-fraccor.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-fraccor.lo `test -f 'fraccor.c' || echo '$(srcdir)/'`fraccor.c
+
+process_la-gradient.lo: gradient.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-gradient.lo -MD -MP -MF $(DEPDIR)/process_la-gradient.Tpo -c -o process_la-gradient.lo `test -f 'gradient.c' || echo '$(srcdir)/'`gradient.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-gradient.Tpo $(DEPDIR)/process_la-gradient.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gradient.c' object='process_la-gradient.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-gradient.lo `test -f 'gradient.c' || echo '$(srcdir)/'`gradient.c
+
+process_la-grain_cross.lo: grain_cross.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-grain_cross.lo -MD -MP -MF $(DEPDIR)/process_la-grain_cross.Tpo -c -o process_la-grain_cross.lo `test -f 'grain_cross.c' || echo '$(srcdir)/'`grain_cross.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-grain_cross.Tpo $(DEPDIR)/process_la-grain_cross.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grain_cross.c' object='process_la-grain_cross.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-grain_cross.lo `test -f 'grain_cross.c' || echo '$(srcdir)/'`grain_cross.c
+
+process_la-grain_dist.lo: grain_dist.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-grain_dist.lo -MD -MP -MF $(DEPDIR)/process_la-grain_dist.Tpo -c -o process_la-grain_dist.lo `test -f 'grain_dist.c' || echo '$(srcdir)/'`grain_dist.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-grain_dist.Tpo $(DEPDIR)/process_la-grain_dist.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grain_dist.c' object='process_la-grain_dist.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-grain_dist.lo `test -f 'grain_dist.c' || echo '$(srcdir)/'`grain_dist.c
+
+process_la-grain_edge.lo: grain_edge.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-grain_edge.lo -MD -MP -MF $(DEPDIR)/process_la-grain_edge.Tpo -c -o process_la-grain_edge.lo `test -f 'grain_edge.c' || echo '$(srcdir)/'`grain_edge.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-grain_edge.Tpo $(DEPDIR)/process_la-grain_edge.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grain_edge.c' object='process_la-grain_edge.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-grain_edge.lo `test -f 'grain_edge.c' || echo '$(srcdir)/'`grain_edge.c
+
+process_la-grain_filter.lo: grain_filter.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-grain_filter.lo -MD -MP -MF $(DEPDIR)/process_la-grain_filter.Tpo -c -o process_la-grain_filter.lo `test -f 'grain_filter.c' || echo '$(srcdir)/'`grain_filter.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-grain_filter.Tpo $(DEPDIR)/process_la-grain_filter.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grain_filter.c' object='process_la-grain_filter.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-grain_filter.lo `test -f 'grain_filter.c' || echo '$(srcdir)/'`grain_filter.c
+
+process_la-grain_mark.lo: grain_mark.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-grain_mark.lo -MD -MP -MF $(DEPDIR)/process_la-grain_mark.Tpo -c -o process_la-grain_mark.lo `test -f 'grain_mark.c' || echo '$(srcdir)/'`grain_mark.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-grain_mark.Tpo $(DEPDIR)/process_la-grain_mark.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grain_mark.c' object='process_la-grain_mark.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-grain_mark.lo `test -f 'grain_mark.c' || echo '$(srcdir)/'`grain_mark.c
+
+process_la-grain_stat.lo: grain_stat.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-grain_stat.lo -MD -MP -MF $(DEPDIR)/process_la-grain_stat.Tpo -c -o process_la-grain_stat.lo `test -f 'grain_stat.c' || echo '$(srcdir)/'`grain_stat.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-grain_stat.Tpo $(DEPDIR)/process_la-grain_stat.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grain_stat.c' object='process_la-grain_stat.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-grain_stat.lo `test -f 'grain_stat.c' || echo '$(srcdir)/'`grain_stat.c
+
+process_la-grain_wshed.lo: grain_wshed.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-grain_wshed.lo -MD -MP -MF $(DEPDIR)/process_la-grain_wshed.Tpo -c -o process_la-grain_wshed.lo `test -f 'grain_wshed.c' || echo '$(srcdir)/'`grain_wshed.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-grain_wshed.Tpo $(DEPDIR)/process_la-grain_wshed.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grain_wshed.c' object='process_la-grain_wshed.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-grain_wshed.lo `test -f 'grain_wshed.c' || echo '$(srcdir)/'`grain_wshed.c
+
+process_la-hough.lo: hough.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-hough.lo -MD -MP -MF $(DEPDIR)/process_la-hough.Tpo -c -o process_la-hough.lo `test -f 'hough.c' || echo '$(srcdir)/'`hough.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-hough.Tpo $(DEPDIR)/process_la-hough.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hough.c' object='process_la-hough.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-hough.lo `test -f 'hough.c' || echo '$(srcdir)/'`hough.c
+
+process_la-immerse.lo: immerse.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-immerse.lo -MD -MP -MF $(DEPDIR)/process_la-immerse.Tpo -c -o process_la-immerse.lo `test -f 'immerse.c' || echo '$(srcdir)/'`immerse.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-immerse.Tpo $(DEPDIR)/process_la-immerse.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='immerse.c' object='process_la-immerse.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-immerse.lo `test -f 'immerse.c' || echo '$(srcdir)/'`immerse.c
+
+process_la-indent_analyze.lo: indent_analyze.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-indent_analyze.lo -MD -MP -MF $(DEPDIR)/process_la-indent_analyze.Tpo -c -o process_la-indent_analyze.lo `test -f 'indent_analyze.c' || echo '$(srcdir)/'`indent_analyze.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-indent_analyze.Tpo $(DEPDIR)/process_la-indent_analyze.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='indent_analyze.c' object='process_la-indent_analyze.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-indent_analyze.lo `test -f 'indent_analyze.c' || echo '$(srcdir)/'`indent_analyze.c
+
+process_la-laplace.lo: laplace.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-laplace.lo -MD -MP -MF $(DEPDIR)/process_la-laplace.Tpo -c -o process_la-laplace.lo `test -f 'laplace.c' || echo '$(srcdir)/'`laplace.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-laplace.Tpo $(DEPDIR)/process_la-laplace.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='laplace.c' object='process_la-laplace.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-laplace.lo `test -f 'laplace.c' || echo '$(srcdir)/'`laplace.c
+
+process_la-lat_synth.lo: lat_synth.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-lat_synth.lo -MD -MP -MF $(DEPDIR)/process_la-lat_synth.Tpo -c -o process_la-lat_synth.lo `test -f 'lat_synth.c' || echo '$(srcdir)/'`lat_synth.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-lat_synth.Tpo $(DEPDIR)/process_la-lat_synth.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lat_synth.c' object='process_la-lat_synth.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-lat_synth.lo `test -f 'lat_synth.c' || echo '$(srcdir)/'`lat_synth.c
+
+process_la-latsim.lo: latsim.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-latsim.lo -MD -MP -MF $(DEPDIR)/process_la-latsim.Tpo -c -o process_la-latsim.lo `test -f 'latsim.c' || echo '$(srcdir)/'`latsim.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-latsim.Tpo $(DEPDIR)/process_la-latsim.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='latsim.c' object='process_la-latsim.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-latsim.lo `test -f 'latsim.c' || echo '$(srcdir)/'`latsim.c
+
+process_la-level.lo: level.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-level.lo -MD -MP -MF $(DEPDIR)/process_la-level.Tpo -c -o process_la-level.lo `test -f 'level.c' || echo '$(srcdir)/'`level.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-level.Tpo $(DEPDIR)/process_la-level.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='level.c' object='process_la-level.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-level.lo `test -f 'level.c' || echo '$(srcdir)/'`level.c
+
+process_la-level_grains.lo: level_grains.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-level_grains.lo -MD -MP -MF $(DEPDIR)/process_la-level_grains.Tpo -c -o process_la-level_grains.lo `test -f 'level_grains.c' || echo '$(srcdir)/'`level_grains.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-level_grains.Tpo $(DEPDIR)/process_la-level_grains.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='level_grains.c' object='process_la-level_grains.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-level_grains.lo `test -f 'level_grains.c' || echo '$(srcdir)/'`level_grains.c
+
+process_la-linecorrect.lo: linecorrect.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-linecorrect.lo -MD -MP -MF $(DEPDIR)/process_la-linecorrect.Tpo -c -o process_la-linecorrect.lo `test -f 'linecorrect.c' || echo '$(srcdir)/'`linecorrect.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-linecorrect.Tpo $(DEPDIR)/process_la-linecorrect.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='linecorrect.c' object='process_la-linecorrect.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-linecorrect.lo `test -f 'linecorrect.c' || echo '$(srcdir)/'`linecorrect.c
+
+process_la-linematch.lo: linematch.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-linematch.lo -MD -MP -MF $(DEPDIR)/process_la-linematch.Tpo -c -o process_la-linematch.lo `test -f 'linematch.c' || echo '$(srcdir)/'`linematch.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-linematch.Tpo $(DEPDIR)/process_la-linematch.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='linematch.c' object='process_la-linematch.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-linematch.lo `test -f 'linematch.c' || echo '$(srcdir)/'`linematch.c
+
+process_la-lno_synth.lo: lno_synth.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-lno_synth.lo -MD -MP -MF $(DEPDIR)/process_la-lno_synth.Tpo -c -o process_la-lno_synth.lo `test -f 'lno_synth.c' || echo '$(srcdir)/'`lno_synth.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-lno_synth.Tpo $(DEPDIR)/process_la-lno_synth.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lno_synth.c' object='process_la-lno_synth.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-lno_synth.lo `test -f 'lno_synth.c' || echo '$(srcdir)/'`lno_synth.c
+
+process_la-local_contrast.lo: local_contrast.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-local_contrast.lo -MD -MP -MF $(DEPDIR)/process_la-local_contrast.Tpo -c -o process_la-local_contrast.lo `test -f 'local_contrast.c' || echo '$(srcdir)/'`local_contrast.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-local_contrast.Tpo $(DEPDIR)/process_la-local_contrast.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='local_contrast.c' object='process_la-local_contrast.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-local_contrast.lo `test -f 'local_contrast.c' || echo '$(srcdir)/'`local_contrast.c
+
+process_la-logistic.lo: logistic.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-logistic.lo -MD -MP -MF $(DEPDIR)/process_la-logistic.Tpo -c -o process_la-logistic.lo `test -f 'logistic.c' || echo '$(srcdir)/'`logistic.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-logistic.Tpo $(DEPDIR)/process_la-logistic.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='logistic.c' object='process_la-logistic.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-logistic.lo `test -f 'logistic.c' || echo '$(srcdir)/'`logistic.c
+
+process_la-mark_disconn.lo: mark_disconn.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-mark_disconn.lo -MD -MP -MF $(DEPDIR)/process_la-mark_disconn.Tpo -c -o process_la-mark_disconn.lo `test -f 'mark_disconn.c' || echo '$(srcdir)/'`mark_disconn.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-mark_disconn.Tpo $(DEPDIR)/process_la-mark_disconn.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mark_disconn.c' object='process_la-mark_disconn.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-mark_disconn.lo `test -f 'mark_disconn.c' || echo '$(srcdir)/'`mark_disconn.c
+
+process_la-mark_with.lo: mark_with.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-mark_with.lo -MD -MP -MF $(DEPDIR)/process_la-mark_with.Tpo -c -o process_la-mark_with.lo `test -f 'mark_with.c' || echo '$(srcdir)/'`mark_with.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-mark_with.Tpo $(DEPDIR)/process_la-mark_with.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mark_with.c' object='process_la-mark_with.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-mark_with.lo `test -f 'mark_with.c' || echo '$(srcdir)/'`mark_with.c
+
+process_la-maskcor.lo: maskcor.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-maskcor.lo -MD -MP -MF $(DEPDIR)/process_la-maskcor.Tpo -c -o process_la-maskcor.lo `test -f 'maskcor.c' || echo '$(srcdir)/'`maskcor.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-maskcor.Tpo $(DEPDIR)/process_la-maskcor.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='maskcor.c' object='process_la-maskcor.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-maskcor.lo `test -f 'maskcor.c' || echo '$(srcdir)/'`maskcor.c
+
+process_la-mask_distribute.lo: mask_distribute.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-mask_distribute.lo -MD -MP -MF $(DEPDIR)/process_la-mask_distribute.Tpo -c -o process_la-mask_distribute.lo `test -f 'mask_distribute.c' || echo '$(srcdir)/'`mask_distribute.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-mask_distribute.Tpo $(DEPDIR)/process_la-mask_distribute.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mask_distribute.c' object='process_la-mask_distribute.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-mask_distribute.lo `test -f 'mask_distribute.c' || echo '$(srcdir)/'`mask_distribute.c
+
+process_la-mask_edt.lo: mask_edt.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-mask_edt.lo -MD -MP -MF $(DEPDIR)/process_la-mask_edt.Tpo -c -o process_la-mask_edt.lo `test -f 'mask_edt.c' || echo '$(srcdir)/'`mask_edt.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-mask_edt.Tpo $(DEPDIR)/process_la-mask_edt.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mask_edt.c' object='process_la-mask_edt.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-mask_edt.lo `test -f 'mask_edt.c' || echo '$(srcdir)/'`mask_edt.c
+
+process_la-mask_morph.lo: mask_morph.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-mask_morph.lo -MD -MP -MF $(DEPDIR)/process_la-mask_morph.Tpo -c -o process_la-mask_morph.lo `test -f 'mask_morph.c' || echo '$(srcdir)/'`mask_morph.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-mask_morph.Tpo $(DEPDIR)/process_la-mask_morph.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mask_morph.c' object='process_la-mask_morph.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-mask_morph.lo `test -f 'mask_morph.c' || echo '$(srcdir)/'`mask_morph.c
+
+process_la-mask_noisify.lo: mask_noisify.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-mask_noisify.lo -MD -MP -MF $(DEPDIR)/process_la-mask_noisify.Tpo -c -o process_la-mask_noisify.lo `test -f 'mask_noisify.c' || echo '$(srcdir)/'`mask_noisify.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-mask_noisify.Tpo $(DEPDIR)/process_la-mask_noisify.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mask_noisify.c' object='process_la-mask_noisify.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-mask_noisify.lo `test -f 'mask_noisify.c' || echo '$(srcdir)/'`mask_noisify.c
+
+process_la-maskops.lo: maskops.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-maskops.lo -MD -MP -MF $(DEPDIR)/process_la-maskops.Tpo -c -o process_la-maskops.lo `test -f 'maskops.c' || echo '$(srcdir)/'`maskops.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-maskops.Tpo $(DEPDIR)/process_la-maskops.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='maskops.c' object='process_la-maskops.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-maskops.lo `test -f 'maskops.c' || echo '$(srcdir)/'`maskops.c
+
+process_la-mcrop.lo: mcrop.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-mcrop.lo -MD -MP -MF $(DEPDIR)/process_la-mcrop.Tpo -c -o process_la-mcrop.lo `test -f 'mcrop.c' || echo '$(srcdir)/'`mcrop.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-mcrop.Tpo $(DEPDIR)/process_la-mcrop.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mcrop.c' object='process_la-mcrop.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-mcrop.lo `test -f 'mcrop.c' || echo '$(srcdir)/'`mcrop.c
+
+process_la-measure_lattice.lo: measure_lattice.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-measure_lattice.lo -MD -MP -MF $(DEPDIR)/process_la-measure_lattice.Tpo -c -o process_la-measure_lattice.lo `test -f 'measure_lattice.c' || echo '$(srcdir)/'`measure_lattice.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-measure_lattice.Tpo $(DEPDIR)/process_la-measure_lattice.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='measure_lattice.c' object='process_la-measure_lattice.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-measure_lattice.lo `test -f 'measure_lattice.c' || echo '$(srcdir)/'`measure_lattice.c
+
+process_la-median-bg.lo: median-bg.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-median-bg.lo -MD -MP -MF $(DEPDIR)/process_la-median-bg.Tpo -c -o process_la-median-bg.lo `test -f 'median-bg.c' || echo '$(srcdir)/'`median-bg.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-median-bg.Tpo $(DEPDIR)/process_la-median-bg.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='median-bg.c' object='process_la-median-bg.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-median-bg.lo `test -f 'median-bg.c' || echo '$(srcdir)/'`median-bg.c
+
+process_la-merge.lo: merge.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-merge.lo -MD -MP -MF $(DEPDIR)/process_la-merge.Tpo -c -o process_la-merge.lo `test -f 'merge.c' || echo '$(srcdir)/'`merge.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-merge.Tpo $(DEPDIR)/process_la-merge.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='merge.c' object='process_la-merge.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-merge.lo `test -f 'merge.c' || echo '$(srcdir)/'`merge.c
+
+process_la-mfm_current.lo: mfm_current.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-mfm_current.lo -MD -MP -MF $(DEPDIR)/process_la-mfm_current.Tpo -c -o process_la-mfm_current.lo `test -f 'mfm_current.c' || echo '$(srcdir)/'`mfm_current.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-mfm_current.Tpo $(DEPDIR)/process_la-mfm_current.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfm_current.c' object='process_la-mfm_current.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-mfm_current.lo `test -f 'mfm_current.c' || echo '$(srcdir)/'`mfm_current.c
+
+process_la-mfm_field.lo: mfm_field.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-mfm_field.lo -MD -MP -MF $(DEPDIR)/process_la-mfm_field.Tpo -c -o process_la-mfm_field.lo `test -f 'mfm_field.c' || echo '$(srcdir)/'`mfm_field.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-mfm_field.Tpo $(DEPDIR)/process_la-mfm_field.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfm_field.c' object='process_la-mfm_field.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-mfm_field.lo `test -f 'mfm_field.c' || echo '$(srcdir)/'`mfm_field.c
+
+process_la-mfm_findshift.lo: mfm_findshift.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-mfm_findshift.lo -MD -MP -MF $(DEPDIR)/process_la-mfm_findshift.Tpo -c -o process_la-mfm_findshift.lo `test -f 'mfm_findshift.c' || echo '$(srcdir)/'`mfm_findshift.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-mfm_findshift.Tpo $(DEPDIR)/process_la-mfm_findshift.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfm_findshift.c' object='process_la-mfm_findshift.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-mfm_findshift.lo `test -f 'mfm_findshift.c' || echo '$(srcdir)/'`mfm_findshift.c
+
+process_la-mfm_parallel.lo: mfm_parallel.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-mfm_parallel.lo -MD -MP -MF $(DEPDIR)/process_la-mfm_parallel.Tpo -c -o process_la-mfm_parallel.lo `test -f 'mfm_parallel.c' || echo '$(srcdir)/'`mfm_parallel.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-mfm_parallel.Tpo $(DEPDIR)/process_la-mfm_parallel.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfm_parallel.c' object='process_la-mfm_parallel.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-mfm_parallel.lo `test -f 'mfm_parallel.c' || echo '$(srcdir)/'`mfm_parallel.c
+
+process_la-mfm_shift.lo: mfm_shift.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-mfm_shift.lo -MD -MP -MF $(DEPDIR)/process_la-mfm_shift.Tpo -c -o process_la-mfm_shift.lo `test -f 'mfm_shift.c' || echo '$(srcdir)/'`mfm_shift.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-mfm_shift.Tpo $(DEPDIR)/process_la-mfm_shift.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mfm_shift.c' object='process_la-mfm_shift.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-mfm_shift.lo `test -f 'mfm_shift.c' || echo '$(srcdir)/'`mfm_shift.c
+
+process_la-neural.lo: neural.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-neural.lo -MD -MP -MF $(DEPDIR)/process_la-neural.Tpo -c -o process_la-neural.lo `test -f 'neural.c' || echo '$(srcdir)/'`neural.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-neural.Tpo $(DEPDIR)/process_la-neural.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='neural.c' object='process_la-neural.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-neural.lo `test -f 'neural.c' || echo '$(srcdir)/'`neural.c
+
+process_la-noise_synth.lo: noise_synth.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-noise_synth.lo -MD -MP -MF $(DEPDIR)/process_la-noise_synth.Tpo -c -o process_la-noise_synth.lo `test -f 'noise_synth.c' || echo '$(srcdir)/'`noise_synth.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-noise_synth.Tpo $(DEPDIR)/process_la-noise_synth.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='noise_synth.c' object='process_la-noise_synth.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-noise_synth.lo `test -f 'noise_synth.c' || echo '$(srcdir)/'`noise_synth.c
+
+process_la-obj_synth.lo: obj_synth.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-obj_synth.lo -MD -MP -MF $(DEPDIR)/process_la-obj_synth.Tpo -c -o process_la-obj_synth.lo `test -f 'obj_synth.c' || echo '$(srcdir)/'`obj_synth.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-obj_synth.Tpo $(DEPDIR)/process_la-obj_synth.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='obj_synth.c' object='process_la-obj_synth.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-obj_synth.lo `test -f 'obj_synth.c' || echo '$(srcdir)/'`obj_synth.c
+
+process_la-otsu_threshold.lo: otsu_threshold.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-otsu_threshold.lo -MD -MP -MF $(DEPDIR)/process_la-otsu_threshold.Tpo -c -o process_la-otsu_threshold.lo `test -f 'otsu_threshold.c' || echo '$(srcdir)/'`otsu_threshold.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-otsu_threshold.Tpo $(DEPDIR)/process_la-otsu_threshold.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='otsu_threshold.c' object='process_la-otsu_threshold.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-otsu_threshold.lo `test -f 'otsu_threshold.c' || echo '$(srcdir)/'`otsu_threshold.c
+
+process_la-outliers.lo: outliers.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-outliers.lo -MD -MP -MF $(DEPDIR)/process_la-outliers.Tpo -c -o process_la-outliers.lo `test -f 'outliers.c' || echo '$(srcdir)/'`outliers.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-outliers.Tpo $(DEPDIR)/process_la-outliers.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='outliers.c' object='process_la-outliers.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-outliers.lo `test -f 'outliers.c' || echo '$(srcdir)/'`outliers.c
+
+process_la-pat_synth.lo: pat_synth.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-pat_synth.lo -MD -MP -MF $(DEPDIR)/process_la-pat_synth.Tpo -c -o process_la-pat_synth.lo `test -f 'pat_synth.c' || echo '$(srcdir)/'`pat_synth.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-pat_synth.Tpo $(DEPDIR)/process_la-pat_synth.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='pat_synth.c' object='process_la-pat_synth.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-pat_synth.lo `test -f 'pat_synth.c' || echo '$(srcdir)/'`pat_synth.c
+
+process_la-phase_synth.lo: phase_synth.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-phase_synth.lo -MD -MP -MF $(DEPDIR)/process_la-phase_synth.Tpo -c -o process_la-phase_synth.lo `test -f 'phase_synth.c' || echo '$(srcdir)/'`phase_synth.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-phase_synth.Tpo $(DEPDIR)/process_la-phase_synth.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='phase_synth.c' object='process_la-phase_synth.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-phase_synth.lo `test -f 'phase_synth.c' || echo '$(srcdir)/'`phase_synth.c
+
+process_la-pid.lo: pid.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-pid.lo -MD -MP -MF $(DEPDIR)/process_la-pid.Tpo -c -o process_la-pid.lo `test -f 'pid.c' || echo '$(srcdir)/'`pid.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-pid.Tpo $(DEPDIR)/process_la-pid.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='pid.c' object='process_la-pid.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-pid.lo `test -f 'pid.c' || echo '$(srcdir)/'`pid.c
+
+process_la-polylevel.lo: polylevel.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-polylevel.lo -MD -MP -MF $(DEPDIR)/process_la-polylevel.Tpo -c -o process_la-polylevel.lo `test -f 'polylevel.c' || echo '$(srcdir)/'`polylevel.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-polylevel.Tpo $(DEPDIR)/process_la-polylevel.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='polylevel.c' object='process_la-polylevel.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-polylevel.lo `test -f 'polylevel.c' || echo '$(srcdir)/'`polylevel.c
+
+process_la-polydistort.lo: polydistort.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-polydistort.lo -MD -MP -MF $(DEPDIR)/process_la-polydistort.Tpo -c -o process_la-polydistort.lo `test -f 'polydistort.c' || echo '$(srcdir)/'`polydistort.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-polydistort.Tpo $(DEPDIR)/process_la-polydistort.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='polydistort.c' object='process_la-polydistort.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-polydistort.lo `test -f 'polydistort.c' || echo '$(srcdir)/'`polydistort.c
+
+process_la-presentationops.lo: presentationops.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-presentationops.lo -MD -MP -MF $(DEPDIR)/process_la-presentationops.Tpo -c -o process_la-presentationops.lo `test -f 'presentationops.c' || echo '$(srcdir)/'`presentationops.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-presentationops.Tpo $(DEPDIR)/process_la-presentationops.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='presentationops.c' object='process_la-presentationops.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-presentationops.lo `test -f 'presentationops.c' || echo '$(srcdir)/'`presentationops.c
+
+process_la-psdf_logphi.lo: psdf_logphi.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-psdf_logphi.lo -MD -MP -MF $(DEPDIR)/process_la-psdf_logphi.Tpo -c -o process_la-psdf_logphi.lo `test -f 'psdf_logphi.c' || echo '$(srcdir)/'`psdf_logphi.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-psdf_logphi.Tpo $(DEPDIR)/process_la-psdf_logphi.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='psdf_logphi.c' object='process_la-psdf_logphi.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-psdf_logphi.lo `test -f 'psdf_logphi.c' || echo '$(srcdir)/'`psdf_logphi.c
+
+process_la-psf.lo: psf.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-psf.lo -MD -MP -MF $(DEPDIR)/process_la-psf.Tpo -c -o process_la-psf.lo `test -f 'psf.c' || echo '$(srcdir)/'`psf.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-psf.Tpo $(DEPDIR)/process_la-psf.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='psf.c' object='process_la-psf.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-psf.lo `test -f 'psf.c' || echo '$(srcdir)/'`psf.c
+
+process_la-psf-fit.lo: psf-fit.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-psf-fit.lo -MD -MP -MF $(DEPDIR)/process_la-psf-fit.Tpo -c -o process_la-psf-fit.lo `test -f 'psf-fit.c' || echo '$(srcdir)/'`psf-fit.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-psf-fit.Tpo $(DEPDIR)/process_la-psf-fit.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='psf-fit.c' object='process_la-psf-fit.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-psf-fit.lo `test -f 'psf-fit.c' || echo '$(srcdir)/'`psf-fit.c
+
+process_la-rank.lo: rank.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-rank.lo -MD -MP -MF $(DEPDIR)/process_la-rank.Tpo -c -o process_la-rank.lo `test -f 'rank.c' || echo '$(srcdir)/'`rank.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-rank.Tpo $(DEPDIR)/process_la-rank.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rank.c' object='process_la-rank.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-rank.lo `test -f 'rank.c' || echo '$(srcdir)/'`rank.c
+
+process_la-rotate.lo: rotate.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-rotate.lo -MD -MP -MF $(DEPDIR)/process_la-rotate.Tpo -c -o process_la-rotate.lo `test -f 'rotate.c' || echo '$(srcdir)/'`rotate.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-rotate.Tpo $(DEPDIR)/process_la-rotate.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rotate.c' object='process_la-rotate.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-rotate.lo `test -f 'rotate.c' || echo '$(srcdir)/'`rotate.c
+
+process_la-scale.lo: scale.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-scale.lo -MD -MP -MF $(DEPDIR)/process_la-scale.Tpo -c -o process_la-scale.lo `test -f 'scale.c' || echo '$(srcdir)/'`scale.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-scale.Tpo $(DEPDIR)/process_la-scale.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='scale.c' object='process_la-scale.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-scale.lo `test -f 'scale.c' || echo '$(srcdir)/'`scale.c
+
+process_la-scars.lo: scars.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-scars.lo -MD -MP -MF $(DEPDIR)/process_la-scars.Tpo -c -o process_la-scars.lo `test -f 'scars.c' || echo '$(srcdir)/'`scars.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-scars.Tpo $(DEPDIR)/process_la-scars.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='scars.c' object='process_la-scars.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-scars.lo `test -f 'scars.c' || echo '$(srcdir)/'`scars.c
+
+process_la-semsim.lo: semsim.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-semsim.lo -MD -MP -MF $(DEPDIR)/process_la-semsim.Tpo -c -o process_la-semsim.lo `test -f 'semsim.c' || echo '$(srcdir)/'`semsim.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-semsim.Tpo $(DEPDIR)/process_la-semsim.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='semsim.c' object='process_la-semsim.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-semsim.lo `test -f 'semsim.c' || echo '$(srcdir)/'`semsim.c
+
+process_la-shade.lo: shade.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-shade.lo -MD -MP -MF $(DEPDIR)/process_la-shade.Tpo -c -o process_la-shade.lo `test -f 'shade.c' || echo '$(srcdir)/'`shade.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-shade.Tpo $(DEPDIR)/process_la-shade.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='shade.c' object='process_la-shade.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-shade.lo `test -f 'shade.c' || echo '$(srcdir)/'`shade.c
+
+process_la-slope_dist.lo: slope_dist.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-slope_dist.lo -MD -MP -MF $(DEPDIR)/process_la-slope_dist.Tpo -c -o process_la-slope_dist.lo `test -f 'slope_dist.c' || echo '$(srcdir)/'`slope_dist.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-slope_dist.Tpo $(DEPDIR)/process_la-slope_dist.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='slope_dist.c' object='process_la-slope_dist.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-slope_dist.lo `test -f 'slope_dist.c' || echo '$(srcdir)/'`slope_dist.c
+
+process_la-sphere-revolve.lo: sphere-revolve.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-sphere-revolve.lo -MD -MP -MF $(DEPDIR)/process_la-sphere-revolve.Tpo -c -o process_la-sphere-revolve.lo `test -f 'sphere-revolve.c' || echo '$(srcdir)/'`sphere-revolve.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-sphere-revolve.Tpo $(DEPDIR)/process_la-sphere-revolve.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sphere-revolve.c' object='process_la-sphere-revolve.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-sphere-revolve.lo `test -f 'sphere-revolve.c' || echo '$(srcdir)/'`sphere-revolve.c
+
+process_la-stitch.lo: stitch.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-stitch.lo -MD -MP -MF $(DEPDIR)/process_la-stitch.Tpo -c -o process_la-stitch.lo `test -f 'stitch.c' || echo '$(srcdir)/'`stitch.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-stitch.Tpo $(DEPDIR)/process_la-stitch.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='stitch.c' object='process_la-stitch.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-stitch.lo `test -f 'stitch.c' || echo '$(srcdir)/'`stitch.c
+
+process_la-straighten_path.lo: straighten_path.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-straighten_path.lo -MD -MP -MF $(DEPDIR)/process_la-straighten_path.Tpo -c -o process_la-straighten_path.lo `test -f 'straighten_path.c' || echo '$(srcdir)/'`straighten_path.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-straighten_path.Tpo $(DEPDIR)/process_la-straighten_path.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='straighten_path.c' object='process_la-straighten_path.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-straighten_path.lo `test -f 'straighten_path.c' || echo '$(srcdir)/'`straighten_path.c
+
+process_la-threshold.lo: threshold.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-threshold.lo -MD -MP -MF $(DEPDIR)/process_la-threshold.Tpo -c -o process_la-threshold.lo `test -f 'threshold.c' || echo '$(srcdir)/'`threshold.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-threshold.Tpo $(DEPDIR)/process_la-threshold.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='threshold.c' object='process_la-threshold.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-threshold.lo `test -f 'threshold.c' || echo '$(srcdir)/'`threshold.c
+
+process_la-tilt.lo: tilt.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-tilt.lo -MD -MP -MF $(DEPDIR)/process_la-tilt.Tpo -c -o process_la-tilt.lo `test -f 'tilt.c' || echo '$(srcdir)/'`tilt.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-tilt.Tpo $(DEPDIR)/process_la-tilt.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tilt.c' object='process_la-tilt.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-tilt.lo `test -f 'tilt.c' || echo '$(srcdir)/'`tilt.c
+
+process_la-tip_blind.lo: tip_blind.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-tip_blind.lo -MD -MP -MF $(DEPDIR)/process_la-tip_blind.Tpo -c -o process_la-tip_blind.lo `test -f 'tip_blind.c' || echo '$(srcdir)/'`tip_blind.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-tip_blind.Tpo $(DEPDIR)/process_la-tip_blind.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tip_blind.c' object='process_la-tip_blind.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-tip_blind.lo `test -f 'tip_blind.c' || echo '$(srcdir)/'`tip_blind.c
+
+process_la-tip_model.lo: tip_model.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-tip_model.lo -MD -MP -MF $(DEPDIR)/process_la-tip_model.Tpo -c -o process_la-tip_model.lo `test -f 'tip_model.c' || echo '$(srcdir)/'`tip_model.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-tip_model.Tpo $(DEPDIR)/process_la-tip_model.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tip_model.c' object='process_la-tip_model.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-tip_model.lo `test -f 'tip_model.c' || echo '$(srcdir)/'`tip_model.c
+
+process_la-tipops.lo: tipops.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-tipops.lo -MD -MP -MF $(DEPDIR)/process_la-tipops.Tpo -c -o process_la-tipops.lo `test -f 'tipops.c' || echo '$(srcdir)/'`tipops.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-tipops.Tpo $(DEPDIR)/process_la-tipops.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tipops.c' object='process_la-tipops.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-tipops.lo `test -f 'tipops.c' || echo '$(srcdir)/'`tipops.c
+
+process_la-unrotate.lo: unrotate.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-unrotate.lo -MD -MP -MF $(DEPDIR)/process_la-unrotate.Tpo -c -o process_la-unrotate.lo `test -f 'unrotate.c' || echo '$(srcdir)/'`unrotate.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-unrotate.Tpo $(DEPDIR)/process_la-unrotate.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unrotate.c' object='process_la-unrotate.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-unrotate.lo `test -f 'unrotate.c' || echo '$(srcdir)/'`unrotate.c
+
+process_la-volumize.lo: volumize.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-volumize.lo -MD -MP -MF $(DEPDIR)/process_la-volumize.Tpo -c -o process_la-volumize.lo `test -f 'volumize.c' || echo '$(srcdir)/'`volumize.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-volumize.Tpo $(DEPDIR)/process_la-volumize.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='volumize.c' object='process_la-volumize.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-volumize.lo `test -f 'volumize.c' || echo '$(srcdir)/'`volumize.c
+
+process_la-volumize_layers.lo: volumize_layers.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-volumize_layers.lo -MD -MP -MF $(DEPDIR)/process_la-volumize_layers.Tpo -c -o process_la-volumize_layers.lo `test -f 'volumize_layers.c' || echo '$(srcdir)/'`volumize_layers.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-volumize_layers.Tpo $(DEPDIR)/process_la-volumize_layers.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='volumize_layers.c' object='process_la-volumize_layers.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-volumize_layers.lo `test -f 'volumize_layers.c' || echo '$(srcdir)/'`volumize_layers.c
+
+process_la-wave_synth.lo: wave_synth.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-wave_synth.lo -MD -MP -MF $(DEPDIR)/process_la-wave_synth.Tpo -c -o process_la-wave_synth.lo `test -f 'wave_synth.c' || echo '$(srcdir)/'`wave_synth.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-wave_synth.Tpo $(DEPDIR)/process_la-wave_synth.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='wave_synth.c' object='process_la-wave_synth.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-wave_synth.lo `test -f 'wave_synth.c' || echo '$(srcdir)/'`wave_synth.c
+
+process_la-wpour_mark.lo: wpour_mark.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-wpour_mark.lo -MD -MP -MF $(DEPDIR)/process_la-wpour_mark.Tpo -c -o process_la-wpour_mark.lo `test -f 'wpour_mark.c' || echo '$(srcdir)/'`wpour_mark.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-wpour_mark.Tpo $(DEPDIR)/process_la-wpour_mark.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='wpour_mark.c' object='process_la-wpour_mark.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-wpour_mark.lo `test -f 'wpour_mark.c' || echo '$(srcdir)/'`wpour_mark.c
+
+process_la-xydenoise.lo: xydenoise.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-xydenoise.lo -MD -MP -MF $(DEPDIR)/process_la-xydenoise.Tpo -c -o process_la-xydenoise.lo `test -f 'xydenoise.c' || echo '$(srcdir)/'`xydenoise.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-xydenoise.Tpo $(DEPDIR)/process_la-xydenoise.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xydenoise.c' object='process_la-xydenoise.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-xydenoise.lo `test -f 'xydenoise.c' || echo '$(srcdir)/'`xydenoise.c
+
+process_la-xyzize.lo: xyzize.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-xyzize.lo -MD -MP -MF $(DEPDIR)/process_la-xyzize.Tpo -c -o process_la-xyzize.lo `test -f 'xyzize.c' || echo '$(srcdir)/'`xyzize.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-xyzize.Tpo $(DEPDIR)/process_la-xyzize.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xyzize.c' object='process_la-xyzize.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-xyzize.lo `test -f 'xyzize.c' || echo '$(srcdir)/'`xyzize.c
+
+process_la-process.lo: process.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -MT process_la-process.lo -MD -MP -MF $(DEPDIR)/process_la-process.Tpo -c -o process_la-process.lo `test -f 'process.c' || echo '$(srcdir)/'`process.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/process_la-process.Tpo $(DEPDIR)/process_la-process.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='process.c' object='process_la-process.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(process_la_CFLAGS) $(CFLAGS) -c -o process_la-process.lo `test -f 'process.c' || echo '$(srcdir)/'`process.c
+
mostlyclean-libtool:
-rm -f *.lo
@@ -1691,13 +3162,15 @@ distdir: $(DISTFILES)
fi; \
done
check-am: all-am
-check: check-am
+check: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) check-am
all-am: Makefile $(LTLIBRARIES)
installdirs:
for dir in "$(DESTDIR)$(processdir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
-install: install-am
+install: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
@@ -1727,6 +3200,7 @@ distclean-generic:
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
clean: clean-am
clean-am: clean-generic clean-libtool clean-local \
@@ -1798,7 +3272,7 @@ ps-am:
uninstall-am: uninstall-processLTLIBRARIES
-.MAKE: install-am install-strip
+.MAKE: all check install install-am install-strip
.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
clean-libtool clean-local clean-processLTLIBRARIES \
@@ -1818,6 +3292,9 @@ uninstall-am: uninstall-processLTLIBRARIES
.PRECIOUS: Makefile
+process.c: $(srcdir)/Makefile.am $(top_srcdir)/utils/gen-module-bundle.sh
+ $(SHELL) $(top_srcdir)/utils/gen-module-bundle.sh process.c $(bundlable_modules)
+
clean-local:
rm -f core.* *~
diff --git a/modules/process/acf2d.c b/modules/process/acf2d.c
index 63727fe..549b697 100644
--- a/modules/process/acf2d.c
+++ b/modules/process/acf2d.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: acf2d.c 16388 2014-07-10 14:26:53Z yeti-dn $
+ * @(#) $Id: acf2d.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2007 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -41,7 +41,7 @@ static GwyModuleInfo module_info = {
"2007",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, acf2d)
static gboolean
module_register(void)
diff --git a/modules/process/angle_dist.c b/modules/process/angle_dist.c
index a4e76d3..2004f67 100644
--- a/modules/process/angle_dist.c
+++ b/modules/process/angle_dist.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: angle_dist.c 18665 2016-04-26 20:42:48Z yeti-dn $
+ * @(#) $Id: angle_dist.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2004 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -102,12 +102,12 @@ static GwyModuleInfo module_info = {
N_("Calculates two-dimensional distribution of angles, "
"that is projections of slopes to all directions."),
"Yeti <yeti at gwyddion.net>",
- "1.8",
+ "1.9",
"David Nečas (Yeti) & Petr Klapetek",
"2004",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, angle_dist)
static gboolean
module_register(void)
@@ -176,7 +176,7 @@ angle_dialog(AngleArgs *args)
gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK);
gwy_help_add_to_proc_dialog(GTK_DIALOG(dialog), GWY_HELP_DEFAULT);
- table = gtk_table_new(5, 4, FALSE);
+ table = gtk_table_new(5, 3, FALSE);
gtk_table_set_row_spacings(GTK_TABLE(table), 2);
gtk_table_set_col_spacings(GTK_TABLE(table), 6);
gtk_container_set_border_width(GTK_CONTAINER(table), 4);
@@ -185,33 +185,33 @@ angle_dialog(AngleArgs *args)
row = 0;
controls.size = gtk_adjustment_new(args->size, 10, MAX_OUT_SIZE, 1, 10, 0);
- gwy_table_attach_hscale(table, row, _("Output _size:"), "px",
- controls.size, 0);
+ gwy_table_attach_adjbar(table, row, _("Output _size:"), _("px"),
+ controls.size, GWY_HSCALE_SQRT);
row++;
controls.steps = gtk_adjustment_new(args->steps, 6, MAX_STEPS, 1, 10, 0);
- gwy_table_attach_hscale(table, row, _("_Number of steps:"), NULL,
+ gwy_table_attach_adjbar(table, row, _("_Number of steps:"), NULL,
controls.steps, GWY_HSCALE_SQRT);
row++;
controls.logscale
= gtk_check_button_new_with_mnemonic(_("_Logarithmic value scale"));
gtk_table_attach(GTK_TABLE(table), controls.logscale,
- 0, 4, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
controls.fit_plane
= gtk_check_button_new_with_mnemonic(_("Use local plane _fitting"));
gtk_table_attach(GTK_TABLE(table), controls.fit_plane,
- 0, 4, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect(controls.fit_plane, "toggled",
G_CALLBACK(angle_fit_plane_cb), &controls);
row++;
controls.kernel_size = gtk_adjustment_new(args->kernel_size,
2, 16, 1, 4, 0);
- gwy_table_attach_hscale(table, row, _("_Plane size:"), "px",
- controls.kernel_size, 0);
+ gwy_table_attach_adjbar(table, row, _("_Plane size:"), _("px"),
+ controls.kernel_size, GWY_HSCALE_LINEAR);
row++;
angle_dialog_update_controls(&controls, args);
diff --git a/modules/process/arithmetic.c b/modules/process/arithmetic.c
index 1527c2a..bbb9c58 100644
--- a/modules/process/arithmetic.c
+++ b/modules/process/arithmetic.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: arithmetic.c 19216 2016-11-09 10:39:06Z yeti-dn $
+ * @(#) $Id: arithmetic.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2003-2013 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -144,7 +144,7 @@ static GwyModuleInfo module_info = {
"2004",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, arithmetic)
static gboolean
module_register(void)
@@ -270,7 +270,7 @@ arithmetic_dialog(GwyContainer *data,
label = gtk_label_new_with_mnemonic(_("_Expression:"));
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
gtk_table_attach(GTK_TABLE(table), label, 0, 2, row, row+1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ GTK_FILL, 0, 0, 0);
row++;
entry = gtk_combo_box_entry_new_with_model(args->history, 0);
@@ -285,22 +285,22 @@ arithmetic_dialog(GwyContainer *data,
gtk_label_set_mnemonic_widget(GTK_LABEL(label), entry);
row++;
- controls.result = label = gtk_label_new("");
+ controls.result = label = gtk_label_new(NULL);
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
gtk_table_attach(GTK_TABLE(table), label, 0, 2, row, row+1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ GTK_FILL, 0, 0, 0);
row++;
gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
label = gtk_label_new(_("Operands"));
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
gtk_table_attach(GTK_TABLE(table), label, 0, 2, row, row+1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ GTK_FILL, 0, 0, 0);
label = gtk_label_new(_("Units"));
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
gtk_table_attach(GTK_TABLE(table), label, 2, 3, row, row+1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ GTK_FILL, 0, 0, 0);
row++;
controls.dataunits = NULL;
@@ -311,7 +311,7 @@ arithmetic_dialog(GwyContainer *data,
gwy_strkill(args->name[i], "_");
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
gtk_table_attach(GTK_TABLE(table), label, 0, 1, row, row+1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ GTK_FILL, 0, 0, 0);
args->name[NARGS*ARITHMETIC_MASK + i] = g_strdup_printf("m%d", i+1);
args->name[NARGS*ARITHMETIC_DER_X + i] = g_strdup_printf("bx%d", i+1);
@@ -348,7 +348,7 @@ arithmetic_dialog(GwyContainer *data,
hbox2 = gtk_hbox_new(FALSE, 6);
gtk_table_attach(GTK_TABLE(table), hbox2, 0, 2, row, row+1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ GTK_FILL, 0, 0, 0);
label = gtk_label_new_with_mnemonic(_("Specify un_its:"));
gtk_box_pack_start(GTK_BOX(hbox2), label, FALSE, FALSE, 0);
diff --git a/modules/process/averaging.c b/modules/process/averaging.c
index 0a19f64..812b072 100644
--- a/modules/process/averaging.c
+++ b/modules/process/averaging.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: averaging.c 18234 2016-01-27 14:57:31Z yeti-dn $
+ * @(#) $Id: averaging.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2011, David Necas (Yeti), Petr Klapetek, Daniil Bratashov
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net, dn2010 at gmail.com
*
@@ -57,7 +57,7 @@ static GwyModuleInfo module_info = {
"2011",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, averaging)
static gboolean
module_register(void)
diff --git a/modules/process/basicops.c b/modules/process/basicops.c
index 9fd5c18..8c821ab 100644
--- a/modules/process/basicops.c
+++ b/modules/process/basicops.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: basicops.c 18937 2016-09-09 09:04:59Z yeti-dn $
+ * @(#) $Id: basicops.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2003-2004 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -58,7 +58,7 @@ static GwyModuleInfo module_info = {
"2003",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, basicops)
static gboolean
module_register(void)
@@ -116,7 +116,7 @@ module_register(void)
gwy_process_func_register("null_offsets",
(GwyProcessFunc)&null_offsets,
N_("/_Basic Operations/_Null Offsets"),
- NULL,
+ GWY_STOCK_NULL_OFFSETS,
BASICOPS_RUN_MODES,
GWY_MENU_FLAG_DATA,
N_("Null horizontal offsets, moving the origin "
diff --git a/modules/process/bdep_synth.c b/modules/process/bdep_synth.c
index 82e858b..789358a 100644
--- a/modules/process/bdep_synth.c
+++ b/modules/process/bdep_synth.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: bdep_synth.c 19044 2016-10-08 19:10:46Z yeti-dn $
+ * @(#) $Id: bdep_synth.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2015 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -149,19 +149,19 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Generates surfaces by ballistic deposition."),
"Yeti <yeti at gwyddion.net>",
- "1.1",
+ "1.2",
"David Nečas (Yeti)",
"2015",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, bdep_synth)
static gboolean
module_register(void)
{
gwy_process_func_register("bdep_synth",
(GwyProcessFunc)&bdep_synth,
- N_("/S_ynthetic/_Ballistic..."),
+ N_("/S_ynthetic/_Deposition/_Ballistic..."),
GWY_STOCK_SYNTHETIC_BALLISTIC_DEPOSITION,
BDEP_SYNTH_RUN_MODES,
0,
@@ -406,7 +406,7 @@ bdep_synth_dialog(BDepSynthArgs *args,
gwy_dimensions_get_widget(controls.dims),
gtk_label_new(_("Dimensions")));
- table = gtk_table_new(4 + (dfield_template ? 1 : 0), 4, FALSE);
+ table = gtk_table_new(4 + (dfield_template ? 1 : 0), 3, FALSE);
/* This is used only for synt.h helpers. */
controls.table = GTK_TABLE(table);
gtk_table_set_row_spacings(GTK_TABLE(table), 2);
@@ -419,7 +419,7 @@ bdep_synth_dialog(BDepSynthArgs *args,
controls.coverage = gtk_adjustment_new(args->coverage,
0.01, 10000.0, 0.01, 1.0, 0);
g_object_set_data(G_OBJECT(controls.coverage), "target", &args->coverage);
- gwy_table_attach_hscale(table, row, _("Co_verage:"), NULL,
+ gwy_table_attach_adjbar(table, row, _("Co_verage:"), NULL,
controls.coverage, GWY_HSCALE_LOG);
g_signal_connect_swapped(controls.coverage, "value-changed",
G_CALLBACK(gwy_synth_double_changed), &controls);
@@ -431,11 +431,11 @@ bdep_synth_dialog(BDepSynthArgs *args,
if (dfield_template) {
controls.height_init
- = gtk_button_new_with_mnemonic(_("_Like Current Channel"));
+ = gtk_button_new_with_mnemonic(_("_Like Current Image"));
g_signal_connect_swapped(controls.height_init, "clicked",
G_CALLBACK(height_init_clicked), &controls);
gtk_table_attach(GTK_TABLE(table), controls.height_init,
- 1, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
}
@@ -443,7 +443,7 @@ bdep_synth_dialog(BDepSynthArgs *args,
&controls.height_noise,
&args->height_noise);
- table = gtk_table_new(1 + GRAPH_NFLAGS, 4, FALSE);
+ table = gtk_table_new(1 + GRAPH_NFLAGS, 3, FALSE);
/* This is used only for synt.h helpers. */
controls.table = GTK_TABLE(table);
gtk_table_set_row_spacings(GTK_TABLE(table), 2);
@@ -456,7 +456,7 @@ bdep_synth_dialog(BDepSynthArgs *args,
label = gtk_label_new(_("Plot graphs:"));
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
gtk_table_attach(GTK_TABLE(table), label,
- 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
for (i = 0; i < GRAPH_NFLAGS; i++) {
diff --git a/modules/process/calcoefs_load.c b/modules/process/calcoefs_load.c
index 24d9514..d663397 100644
--- a/modules/process/calcoefs_load.c
+++ b/modules/process/calcoefs_load.c
@@ -89,7 +89,7 @@ static GwyModuleInfo module_info = {
"2010",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, calcoefs_load)
static gboolean
module_register(void)
diff --git a/modules/process/calcoefs_new.c b/modules/process/calcoefs_new.c
index b1b2e35..2d5186b 100644
--- a/modules/process/calcoefs_new.c
+++ b/modules/process/calcoefs_new.c
@@ -177,7 +177,7 @@ static GwyModuleInfo module_info = {
"2010",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, calcoefs_new)
static gboolean
module_register(void)
diff --git a/modules/process/calcoefs_simple.c b/modules/process/calcoefs_simple.c
index 3787705..5d6f35c 100644
--- a/modules/process/calcoefs_simple.c
+++ b/modules/process/calcoefs_simple.c
@@ -173,7 +173,7 @@ static GwyModuleInfo module_info = {
"2010",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, calcoefs_simple)
static gboolean
module_register(void)
diff --git a/modules/process/calcoefs_view.c b/modules/process/calcoefs_view.c
index 11ea0c1..d0791ab 100644
--- a/modules/process/calcoefs_view.c
+++ b/modules/process/calcoefs_view.c
@@ -240,7 +240,7 @@ static GwyModuleInfo module_info = {
"2010",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, calcoefs_view)
static gboolean
module_register(void)
diff --git a/modules/process/calibrate.c b/modules/process/calibrate.c
index 389d259..349e415 100644
--- a/modules/process/calibrate.c
+++ b/modules/process/calibrate.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: calibrate.c 18537 2016-03-28 18:11:19Z yeti-dn $
+ * @(#) $Id: calibrate.c 19967 2017-06-23 20:54:47Z yeti-dn $
* Copyright (C) 2003-2013 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -77,10 +77,6 @@ typedef struct {
GtkObject *xratio;
GtkObject *yratio;
GtkObject *zratio;
- GtkWidget *xratio_spin;
- GtkWidget *xratio_label;
- GtkWidget *yratio_spin;
- GtkWidget *yratio_label;
GtkWidget *match_size;
GtkWidget *size_chooser;
GtkWidget *xyexponent;
@@ -93,10 +89,6 @@ typedef struct {
GtkObject *xreal;
GtkObject *yreal;
GtkObject *zreal;
- GtkWidget *xreal_spin;
- GtkWidget *xreal_label;
- GtkWidget *yreal_spin;
- GtkWidget *yreal_label;
GtkObject *x0;
GtkObject *y0;
GtkObject *zshift;
@@ -179,12 +171,12 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Recalibrates scan lateral dimensions or value range."),
"Petr Klapetek <klapetek at gwyddion.net>",
- "2.14",
+ "2.16",
"David Nečas (Yeti) & Petr Klapetek",
"2003",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, calibrate)
static gboolean
module_register(void)
@@ -381,7 +373,7 @@ static gboolean
calibrate_dialog(CalibrateArgs *args,
GwyDataField *dfield)
{
- GtkWidget *dialog, *spin, *table, *label;
+ GtkWidget *dialog, *spin, *table, *label, *hbox;
GwyDataChooser *chooser;
GwySIUnit *unit;
CalibrateControls controls;
@@ -408,211 +400,173 @@ calibrate_dialog(CalibrateArgs *args,
row = 0;
/***** New Real Dimensions *****/
- label = gwy_label_new_header(_("New Real Dimensions"));
- gtk_table_attach(GTK_TABLE(table), label,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
- row++;
- controls.match_size
- = gtk_check_button_new_with_mnemonic(_("_Match pixel size:"));
- gtk_table_attach(GTK_TABLE(table), controls.match_size,
- 0, 1, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
- g_signal_connect(controls.match_size, "toggled",
- G_CALLBACK(match_size_changed), &controls);
+ gtk_table_attach(GTK_TABLE(table),
+ gwy_label_new_header(_("New Real Dimensions")),
+ 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ row++;
controls.size_chooser = gwy_data_chooser_new_channels();
chooser = GWY_DATA_CHOOSER(controls.size_chooser);
- gtk_widget_set_sensitive(controls.size_chooser, FALSE);
gwy_data_chooser_set_filter(chooser, mould_filter, &args->targetid, NULL);
if (!gwy_data_chooser_set_active_id(chooser, &args->sizeid))
args->match_size = FALSE;
+ gwy_table_attach_adjbar(table, row, _("_Match pixel size:"), NULL,
+ GTK_OBJECT(controls.size_chooser),
+ GWY_HSCALE_CHECK | GWY_HSCALE_WIDGET_NO_EXPAND);
+ controls.match_size
+ = gwy_table_hscale_get_check(GTK_OBJECT(controls.size_chooser));
+ g_signal_connect(controls.match_size, "toggled",
+ G_CALLBACK(match_size_changed), &controls);
+
if (gwy_data_chooser_get_active(chooser, NULL)) {
+ /* XXX: Extend the chooser one column to the right. Dirty. */
+ if ((hbox = gtk_widget_get_parent(controls.size_chooser))
+ && GTK_IS_HBOX(hbox)) {
+ gtk_container_child_set(GTK_CONTAINER(table), hbox,
+ "right-attach", 3,
+ NULL);
+ }
g_signal_connect(controls.size_chooser, "changed",
G_CALLBACK(size_channel_changed), &controls);
}
else {
- gtk_widget_set_sensitive(controls.match_size, FALSE);
+ gwy_table_hscale_set_sensitive(GTK_OBJECT(controls.size_chooser),
+ FALSE);
gtk_widget_set_no_show_all(controls.match_size, TRUE);
gtk_widget_set_no_show_all(controls.size_chooser, TRUE);
args->match_size = FALSE;
}
- gtk_table_attach_defaults(GTK_TABLE(table), controls.size_chooser,
- 1, 3, row, row+1);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.match_size),
+ args->match_size);
row++;
- label = gtk_label_new_with_mnemonic(_("_X range:"));
- controls.xreal_label = label;
- gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_table_attach(GTK_TABLE(table), label,
- 0, 1, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
-
controls.xreal = gtk_adjustment_new(args->xreal/pow10(args->xyexponent),
0.01, 10000, 1, 10, 0);
- spin = gtk_spin_button_new(GTK_ADJUSTMENT(controls.xreal), 1, 2);
- controls.xreal_spin = spin;
- gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(spin), TRUE);
- gtk_table_attach(GTK_TABLE(table), spin,
- 1, 2, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ spin = gwy_table_attach_adjbar(table, row, _("_X range:"), NULL,
+ controls.xreal, GWY_HSCALE_LOG);
+ gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 3);
unit = gwy_data_field_get_si_unit_xy(dfield);
controls.xyexponent
= gwy_combo_box_metric_unit_new(G_CALLBACK(xyexponent_changed),
&controls, -15, 6, unit,
args->xyexponent);
- gtk_table_attach(GTK_TABLE(table), controls.xyexponent, 2, 3, row, row+2,
- GTK_EXPAND | GTK_FILL | GTK_SHRINK, 0, 0, 0);
+ gtk_table_attach(GTK_TABLE(table), controls.xyexponent,
+ 2, 3, row, row+2, GTK_FILL | GTK_SHRINK, 0, 0, 0);
controls.xyunits = gtk_button_new_with_label(gwy_sgettext("verb|Change"));
g_object_set_data(G_OBJECT(controls.xyunits), "id", (gpointer)"xy");
gtk_table_attach(GTK_TABLE(table), controls.xyunits,
- 3, 4, row, row+2,
- GTK_EXPAND | GTK_FILL | GTK_SHRINK, 0, 0, 0);
+ 3, 4, row, row+2, GTK_FILL | GTK_SHRINK, 0, 0, 0);
row++;
- label = gtk_label_new_with_mnemonic(_("_Y range:"));
- controls.yreal_label = label;
- gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_table_attach(GTK_TABLE(table), label,
- 0, 1, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
-
controls.yreal = gtk_adjustment_new(args->yreal/pow10(args->xyexponent),
0.01, 10000, 1, 10, 0);
- spin = gtk_spin_button_new(GTK_ADJUSTMENT(controls.yreal), 1, 2);
- controls.yreal_spin = spin;
- gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(spin), TRUE);
- gtk_table_attach(GTK_TABLE(table), spin,
- 1, 2, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ spin = gwy_table_attach_adjbar(table, row, _("_Y range:"), NULL,
+ controls.yreal, GWY_HSCALE_LOG);
+ gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 3);
row++;
- controls.square
- = gtk_check_button_new_with_mnemonic(_("_Square samples"));
+ controls.square = gtk_check_button_new_with_mnemonic(_("_Square samples"));
gtk_table_attach(GTK_TABLE(table), controls.square,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
/***** Lateral Offsets *****/
- label = gtk_label_new_with_mnemonic(_("_X offset:"));
- gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_table_attach(GTK_TABLE(table), label,
- 0, 1, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
-
controls.x0 = gtk_adjustment_new(args->x0/pow10(args->xyexponent),
-10000, 10000, 1, 10, 0);
- spin = gtk_spin_button_new(GTK_ADJUSTMENT(controls.x0), 1, 2);
- gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(spin), TRUE);
- gtk_table_attach(GTK_TABLE(table), spin,
- 1, 2, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ spin = gwy_table_attach_adjbar(table, row, _("_X offset:"), NULL,
+ controls.x0, GWY_HSCALE_SQRT);
+ gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 2);
row++;
- label = gtk_label_new_with_mnemonic(_("_Y offset:"));
- gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_table_attach(GTK_TABLE(table), label,
- 0, 1, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
-
controls.y0 = gtk_adjustment_new(args->y0/pow10(args->xyexponent),
-10000, 10000, 1, 10, 0);
- spin = gtk_spin_button_new(GTK_ADJUSTMENT(controls.y0), 1, 2);
- gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(spin), TRUE);
- gtk_table_attach(GTK_TABLE(table), spin,
- 1, 2, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
- gtk_table_set_row_spacing(GTK_TABLE(table), row, 8);
+ spin = gwy_table_attach_adjbar(table, row, _("_Y offset:"), NULL,
+ controls.y0, GWY_HSCALE_SQRT);
+ gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 2);
row++;
/***** Value Range *****/
- label = gwy_label_new_header(_("Value Range"));
- gtk_table_attach(GTK_TABLE(table), label,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
- row++;
- label = gtk_label_new_with_mnemonic(_("_Z range:"));
- gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_table_attach(GTK_TABLE(table), label,
- 0, 1, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
+ gtk_table_attach(GTK_TABLE(table), gwy_label_new_header(_("Value Range")),
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
+ row++;
- controls.zreal = gtk_adjustment_new(args->zreal/pow10(args->zexponent),
- -10000, 10000, 1, 10, 0);
- spin = gtk_spin_button_new(GTK_ADJUSTMENT(controls.zreal), 1, 2);
- gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(spin), TRUE);
- gtk_table_attach(GTK_TABLE(table), spin,
- 1, 2, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ controls.zreal = gtk_adjustment_new(args->zreal/pow10(args->xyexponent),
+ -10000, 10000, 1, 10, 0);
+ spin = gwy_table_attach_adjbar(table, row, _("_Z range:"), NULL,
+ controls.zreal, GWY_HSCALE_SQRT);
+ gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 2);
unit = gwy_data_field_get_si_unit_z(dfield);
controls.zexponent
= gwy_combo_box_metric_unit_new(G_CALLBACK(zexponent_changed),
&controls, -15, 6, unit,
args->zexponent);
- gtk_table_attach(GTK_TABLE(table), controls.zexponent, 2, 3, row, row+1,
- GTK_EXPAND | GTK_FILL | GTK_SHRINK, 0, 0, 0);
+ gtk_table_attach(GTK_TABLE(table), controls.zexponent,
+ 2, 3, row, row+1, GTK_FILL | GTK_SHRINK, 0, 0, 0);
controls.zunits = gtk_button_new_with_label(gwy_sgettext("verb|Change"));
g_object_set_data(G_OBJECT(controls.zunits), "id", (gpointer)"z");
gtk_table_attach(GTK_TABLE(table), controls.zunits,
- 3, 4, row, row+1,
- GTK_EXPAND | GTK_FILL | GTK_SHRINK, 0, 0, 0);
+ 3, 4, row, row+1, GTK_FILL | GTK_SHRINK, 0, 0, 0);
row++;
/***** Value Shift *****/
- label = gtk_label_new_with_mnemonic(_("Z shi_ft:"));
- gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_table_attach(GTK_TABLE(table), label,
- 0, 1, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
-
- controls.zshift = gtk_adjustment_new(args->zshift/pow10(args->zexponent),
- -10000, 10000, 1, 10, 0);
- spin = gtk_spin_button_new(GTK_ADJUSTMENT(controls.zshift), 1, 2);
- gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(spin), TRUE);
- gtk_table_attach(GTK_TABLE(table), spin,
- 1, 2, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
- gtk_table_set_row_spacing(GTK_TABLE(table), row, 8);
+ controls.zshift = gtk_adjustment_new(args->zshift/pow10(args->xyexponent),
+ -10000, 10000, 1, 10, 0);
+ spin = gwy_table_attach_adjbar(table, row, _("Z shi_ft:"), NULL,
+ controls.zshift, GWY_HSCALE_SQRT);
+ gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 2);
row++;
/***** Calibration Coefficients *****/
- label = gwy_label_new_header(_("Calibration Coefficients"));
- gtk_table_attach(GTK_TABLE(table), label,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+
+ gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
+ gtk_table_attach(GTK_TABLE(table),
+ gwy_label_new_header(_("Calibration Coefficients")),
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
controls.xratio = gtk_adjustment_new(args->xratio, 0.001, 1000, 0.1, 1, 0);
- spin = gwy_table_attach_spinbutton(table, row,
- _("_X calibration factor:"), "",
- controls.xratio);
- controls.xratio_spin = spin;
- controls.xratio_label = gwy_table_get_child_widget(table, row, 0);
- controls.xpower10 = gwy_table_get_child_widget(table, row, 2);
+ spin = gwy_table_attach_adjbar(table, row, _("_X calibration factor:"), " ",
+ controls.xratio, GWY_HSCALE_LOG);
gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 3);
+ controls.xpower10 = gwy_table_hscale_get_units(controls.xratio);
row++;
controls.yratio = gtk_adjustment_new(args->yratio, 0.001, 1000, 0.1, 1, 0);
- spin = gwy_table_attach_spinbutton(table, row,
- _("_Y calibration factor:"), "",
- controls.yratio);
- controls.yratio_spin = spin;
- controls.yratio_label = gwy_table_get_child_widget(table, row, 0);
- controls.ypower10 = gwy_table_get_child_widget(table, row, 2);
+ spin = gwy_table_attach_adjbar(table, row, _("_Y calibration factor:"), " ",
+ controls.yratio, GWY_HSCALE_LOG);
gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 3);
+ controls.ypower10 = gwy_table_hscale_get_units(controls.yratio);
row++;
controls.zratio = gtk_adjustment_new(args->zratio, -1000, 1000, 0.1, 1, 0);
- spin = gwy_table_attach_spinbutton(table, row,
- _("_Z calibration factor:"), "",
- controls.zratio);
- controls.zpower10 = gwy_table_get_child_widget(table, row, 2);
+ spin = gwy_table_attach_adjbar(table, row, _("_Z calibration factor:"), " ",
+ controls.zratio, GWY_HSCALE_SQRT);
gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 3);
+ controls.zpower10 = gwy_table_hscale_get_units(controls.zratio);
row++;
/***** Options *****/
+
+ gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
label = gwy_label_new_header(_("Options"));
gtk_table_attach(GTK_TABLE(table), label,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
controls.new_channel
- = gtk_check_button_new_with_mnemonic(_("Create new channel"));
+ = gtk_check_button_new_with_mnemonic(_("Create new image"));
gtk_table_attach(GTK_TABLE(table), controls.new_channel,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
g_signal_connect(controls.xreal, "value-changed",
@@ -718,6 +672,12 @@ dialog_reset(CalibrateControls *controls,
calibrate_defaults.zshift);
calibrate_dialog_update(controls, args);
+
+ args->zreal = args->zorig;
+ args->xreal = args->xorig;
+ args->yreal = args->yorig;
+ args->x0 = args->x0orig;
+ args->y0 = args->y0orig;
}
static void
@@ -725,13 +685,22 @@ xratio_changed(GtkAdjustment *adj,
CalibrateControls *controls)
{
CalibrateArgs *args = controls->args;
+ gdouble newratio;
if (controls->in_update)
return;
controls->in_update = TRUE;
- args->xratio = gtk_adjustment_get_value(adj)
- * pow10(args->xyexponent - args->xyorigexp);
+ newratio = gtk_adjustment_get_value(adj) * pow10(args->xyexponent
+ - args->xyorigexp);
+ /* XXX: Sometimes a strange infinite update cycle far in non-significant
+ * digits can occur. Not sure why. */
+ if (fabs(log(newratio/args->xratio)) < 1e-8) {
+ controls->in_update = FALSE;
+ return;
+ }
+
+ args->xratio = newratio;
args->xreal = args->xratio * args->xorig;
if (args->square) {
args->yreal = args->xreal/args->xres * args->yres;
@@ -746,13 +715,22 @@ yratio_changed(GtkAdjustment *adj,
CalibrateControls *controls)
{
CalibrateArgs *args = controls->args;
+ gdouble newratio;
if (controls->in_update)
return;
controls->in_update = TRUE;
- args->yratio = gtk_adjustment_get_value(adj)
- * pow10(args->xyexponent - args->xyorigexp);
+ newratio = gtk_adjustment_get_value(adj) * pow10(args->xyexponent
+ - args->xyorigexp);
+ /* XXX: Sometimes a strange infinite update cycle far in non-significant
+ * digits can occur. Not sure why. */
+ if (fabs(log(newratio/args->yratio)) < 1e-8) {
+ controls->in_update = FALSE;
+ return;
+ }
+
+ args->yratio = newratio;
args->yreal = args->yratio * args->yorig;
if (args->square) {
args->xreal = args->yreal/args->yres * args->xres;
@@ -767,16 +745,23 @@ zratio_changed(GtkAdjustment *adj,
CalibrateControls *controls)
{
CalibrateArgs *args = controls->args;
+ gdouble newratio;
if (controls->in_update)
return;
controls->in_update = TRUE;
- args->zratio = gtk_adjustment_get_value(adj)
- * pow10(args->zexponent - args->zorigexp);
+ newratio = gtk_adjustment_get_value(adj) * pow10(args->zexponent
+ - args->zorigexp);
+ /* XXX: Sometimes a strange infinite update cycle far in non-significant
+ * digits can occur. Not sure why. */
+ if (fabs(log(newratio/args->zratio)) < 1e-8) {
+ controls->in_update = FALSE;
+ return;
+ }
+ args->zratio = newratio;
args->zreal = args->zratio * args->zorig;
-
calibrate_dialog_update(controls, args);
controls->in_update = FALSE;
}
@@ -786,12 +771,21 @@ xreal_changed(GtkAdjustment *adj,
CalibrateControls *controls)
{
CalibrateArgs *args = controls->args;
+ gdouble newxreal;
if (controls->in_update)
return;
controls->in_update = TRUE;
- args->xreal = gtk_adjustment_get_value(adj) * pow10(args->xyexponent);
+ newxreal = gtk_adjustment_get_value(adj) * pow10(args->xyexponent);
+ /* XXX: Sometimes a strange infinite update cycle far in non-significant
+ * digits can occur. Not sure why. */
+ if (fabs(log(newxreal/args->xreal)) < 1e-8) {
+ controls->in_update = FALSE;
+ return;
+ }
+
+ args->xreal = newxreal;
args->xratio = args->xreal/args->xorig;
if (args->square) {
args->yreal = args->xreal/args->xres * args->yres;
@@ -807,13 +801,21 @@ yreal_changed(GtkAdjustment *adj,
CalibrateControls *controls)
{
CalibrateArgs *args = controls->args;
+ gdouble newyreal;
if (controls->in_update)
return;
controls->in_update = TRUE;
+ newyreal = gtk_adjustment_get_value(adj) * pow10(args->xyexponent);
+ /* XXX: Sometimes a strange infinite update cycle far in non-significant
+ * digits can occur. Not sure why. */
+ if (fabs(log(newyreal/args->yreal)) < 1e-8) {
+ controls->in_update = FALSE;
+ return;
+ }
- args->yreal = gtk_adjustment_get_value(adj) * pow10(args->xyexponent);
+ args->yreal = newyreal;
args->yratio = args->yreal/args->yorig;
if (args->square) {
args->xreal = args->yreal/args->yres * args->xres;
@@ -828,15 +830,23 @@ x0_changed(GtkAdjustment *adj,
CalibrateControls *controls)
{
CalibrateArgs *args = controls->args;
+ gdouble newx0;
if (controls->in_update)
return;
controls->in_update = TRUE;
- args->x0 = gtk_adjustment_get_value(adj) * pow10(args->xyexponent);
+ newx0 = gtk_adjustment_get_value(adj) * pow10(args->xyexponent);
+ /* XXX: Sometimes a strange infinite update cycle far in non-significant
+ * digits can occur. Not sure why. */
+ if (newx0 == args->x0 || fabs(log(newx0/args->x0)) < 1e-8) {
+ controls->in_update = FALSE;
+ return;
+ }
+
+ args->x0 = newx0;
calibrate_dialog_update(controls, args);
controls->in_update = FALSE;
-
}
static void
@@ -844,13 +854,21 @@ y0_changed(GtkAdjustment *adj,
CalibrateControls *controls)
{
CalibrateArgs *args = controls->args;
+ gdouble newy0;
if (controls->in_update)
return;
controls->in_update = TRUE;
+ newy0 = gtk_adjustment_get_value(adj) * pow10(args->xyexponent);
+ /* XXX: Sometimes a strange infinite update cycle far in non-significant
+ * digits can occur. Not sure why. */
+ if (newy0 == args->y0 || fabs(log(newy0/args->y0)) < 1e-8) {
+ controls->in_update = FALSE;
+ return;
+ }
- args->y0 = gtk_adjustment_get_value(adj) * pow10(args->xyexponent);
+ args->y0 = newy0;
calibrate_dialog_update(controls, args);
controls->in_update = FALSE;
}
@@ -860,13 +878,21 @@ zshift_changed(GtkAdjustment *adj,
CalibrateControls *controls)
{
CalibrateArgs *args = controls->args;
+ gdouble newzshift;
if (controls->in_update)
return;
controls->in_update = TRUE;
+ newzshift = gtk_adjustment_get_value(adj) * pow10(args->zexponent);
+ /* XXX: Sometimes a strange infinite update cycle far in non-significant
+ * digits can occur. Not sure why. */
+ if (newzshift == args->zshift || fabs(log(newzshift/args->zshift)) < 1e-8) {
+ controls->in_update = FALSE;
+ return;
+ }
- args->zshift = gtk_adjustment_get_value(adj) * pow10(args->zexponent);
+ args->zshift = newzshift;
calibrate_dialog_update(controls, args);
controls->in_update = FALSE;
}
@@ -876,13 +902,21 @@ zreal_changed(GtkAdjustment *adj,
CalibrateControls *controls)
{
CalibrateArgs *args = controls->args;
+ gdouble newzreal;
if (controls->in_update)
return;
controls->in_update = TRUE;
+ newzreal = gtk_adjustment_get_value(adj) * pow10(args->zexponent);
+ /* XXX: Sometimes a strange infinite update cycle far in non-significant
+ * digits can occur. Not sure why. */
+ if (fabs(log(newzreal/args->zreal)) < 1e-8) {
+ controls->in_update = FALSE;
+ return;
+ }
- args->zreal = gtk_adjustment_get_value(adj) * pow10(args->zexponent);
+ args->zreal = newzreal;
args->zratio = args->zreal/args->zorig;
calibrate_dialog_update(controls, args);
controls->in_update = FALSE;
@@ -1029,15 +1063,10 @@ match_size_changed(GtkToggleButton *toggle,
gboolean matching = gtk_toggle_button_get_active(toggle);
controls->args->match_size = matching;
- gtk_widget_set_sensitive(controls->size_chooser, matching);
- gtk_widget_set_sensitive(controls->xreal_spin, !matching);
- gtk_widget_set_sensitive(controls->xreal_label, !matching);
- gtk_widget_set_sensitive(controls->yreal_spin, !matching);
- gtk_widget_set_sensitive(controls->yreal_label, !matching);
- gtk_widget_set_sensitive(controls->xratio_spin, !matching);
- gtk_widget_set_sensitive(controls->xratio_label, !matching);
- gtk_widget_set_sensitive(controls->yratio_spin, !matching);
- gtk_widget_set_sensitive(controls->yratio_label, !matching);
+ gwy_table_hscale_set_sensitive(controls->xreal, !matching);
+ gwy_table_hscale_set_sensitive(controls->yreal, !matching);
+ gwy_table_hscale_set_sensitive(controls->xratio, !matching);
+ gwy_table_hscale_set_sensitive(controls->yratio, !matching);
gtk_widget_set_sensitive(controls->xyunits, !matching);
gtk_widget_set_sensitive(controls->xyexponent, !matching);
gtk_widget_set_sensitive(controls->square, !matching);
@@ -1046,9 +1075,10 @@ match_size_changed(GtkToggleButton *toggle,
gtk_dialog_set_response_sensitive(GTK_DIALOG(controls->dialog),
GTK_RESPONSE_OK, !matching);
- if (matching)
+ if (matching) {
size_channel_changed(GWY_DATA_CHOOSER(controls->size_chooser),
controls);
+ }
}
static void
diff --git a/modules/process/coerce.c b/modules/process/coerce.c
index b181ed5..3706623 100644
--- a/modules/process/coerce.c
+++ b/modules/process/coerce.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: coerce.c 19044 2016-10-08 19:10:46Z yeti-dn $
+ * @(#) $Id: coerce.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2016 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -163,7 +163,7 @@ static GwyModuleInfo module_info = {
"2016",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, coerce)
static gboolean
module_register(void)
@@ -279,7 +279,7 @@ coerce_dialogue(CoerceArgs *args, GwyContainer *data, gint id)
gtk_box_pack_start(GTK_BOX(vbox), controls.view, FALSE, FALSE, 0);
table = gtk_table_new(COERCE_NDISTRIBUTIONS + COERCE_NPROCESSING + 6,
- 4, FALSE);
+ 3, FALSE);
gtk_table_set_row_spacings(GTK_TABLE(table), 2);
gtk_table_set_col_spacings(GTK_TABLE(table), 6);
gtk_container_set_border_width(GTK_CONTAINER(table), 4);
@@ -289,7 +289,7 @@ coerce_dialogue(CoerceArgs *args, GwyContainer *data, gint id)
label = gtk_label_new(_("Coerce value distribution to:"));
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
gtk_table_attach(GTK_TABLE(table), label,
- 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
controls.distribution
@@ -300,8 +300,8 @@ coerce_dialogue(CoerceArgs *args, GwyContainer *data, gint id)
GtkWidget *widget = GTK_WIDGET(l->data);
CoerceDistributionType dist = gwy_radio_button_get_value(widget);
- gtk_table_attach(GTK_TABLE(table), widget, 0, 3, row, row + 1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ gtk_table_attach(GTK_TABLE(table), widget, 0, 2, row, row + 1,
+ GTK_FILL, 0, 0, 0);
row++;
if (dist == COERCE_DISTRIBUTION_DATA) {
@@ -312,9 +312,9 @@ coerce_dialogue(CoerceArgs *args, GwyContainer *data, gint id)
&template_filter, dfield, NULL);
gwy_data_chooser_set_active_id(chooser, &args->template);
gwy_data_chooser_get_active_id(chooser, &args->template);
- gwy_table_attach_hscale(table, row, _("_Template:"), NULL,
+ gwy_table_attach_adjbar(table, row, _("_Template:"), NULL,
GTK_OBJECT(controls.template),
- GWY_HSCALE_WIDGET);
+ GWY_HSCALE_WIDGET_NO_EXPAND);
g_signal_connect(controls.template, "changed",
G_CALLBACK(template_changed), &controls);
row++;
@@ -328,15 +328,15 @@ coerce_dialogue(CoerceArgs *args, GwyContainer *data, gint id)
_("Same area"),
COERCE_LEVELS_EQUIAREA,
NULL);
- gwy_table_attach_hscale(table, row, _("_Type:"), NULL,
+ gwy_table_attach_adjbar(table, row, _("_Type:"), NULL,
GTK_OBJECT(controls.level_type),
- GWY_HSCALE_WIDGET);
+ GWY_HSCALE_WIDGET_NO_EXPAND);
row++;
controls.nlevels = gtk_adjustment_new(args->nlevels,
2.0, 16384.0,
1.0, 100.0, 0.0);
- gwy_table_attach_hscale(table, row, _("Number of _levels:"), NULL,
+ gwy_table_attach_adjbar(table, row, _("Number of _levels:"), NULL,
controls.nlevels, GWY_HSCALE_LOG);
g_signal_connect(controls.nlevels, "value-changed",
G_CALLBACK(nlevels_changed), &controls);
@@ -349,7 +349,7 @@ coerce_dialogue(CoerceArgs *args, GwyContainer *data, gint id)
label = gtk_label_new(_("Data processing:"));
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
gtk_table_attach(GTK_TABLE(table), label,
- 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
controls.processing
@@ -357,20 +357,19 @@ coerce_dialogue(CoerceArgs *args, GwyContainer *data, gint id)
G_CALLBACK(processing_changed), &controls,
args->processing);
row = gwy_radio_buttons_attach_to_table(controls.processing,
- GTK_TABLE(table),
- 3, row);
+ GTK_TABLE(table), 2, row);
gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
label = gwy_label_new_header(_("Options"));
gtk_table_attach(GTK_TABLE(table), label,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
controls.update = gtk_check_button_new_with_mnemonic(_("I_nstant updates"));
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.update),
args->update);
gtk_table_attach(GTK_TABLE(table), controls.update,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect(controls.update, "toggled",
G_CALLBACK(update_changed), &controls);
row++;
diff --git a/modules/process/col_synth.c b/modules/process/col_synth.c
index 032c107..72a2553 100644
--- a/modules/process/col_synth.c
+++ b/modules/process/col_synth.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: col_synth.c 19124 2016-10-25 19:12:11Z yeti-dn $
+ * @(#) $Id: col_synth.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2014 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -198,14 +198,14 @@ static GwyModuleInfo module_info = {
"2014",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, col_synth)
static gboolean
module_register(void)
{
gwy_process_func_register("col_synth",
(GwyProcessFunc)&col_synth,
- N_("/S_ynthetic/_Columnar..."),
+ N_("/S_ynthetic/_Deposition/_Columnar..."),
GWY_STOCK_SYNTHETIC_COLUMNAR,
COL_SYNTH_RUN_MODES,
0,
@@ -457,7 +457,7 @@ col_synth_dialog(ColSynthArgs *args,
gwy_dimensions_get_widget(controls.dims),
gtk_label_new(_("Dimensions")));
- table = gtk_table_new(20 + (dfield_template ? 1 : 0), 4, FALSE);
+ table = gtk_table_new(20 + (dfield_template ? 1 : 0), 3, FALSE);
/* This is used only for synt.h helpers. */
controls.table = GTK_TABLE(table);
gtk_table_set_row_spacings(GTK_TABLE(table), 2);
@@ -470,7 +470,7 @@ col_synth_dialog(ColSynthArgs *args,
controls.coverage = gtk_adjustment_new(args->coverage,
0.001, 2000.0, 0.001, 1.0, 0);
g_object_set_data(G_OBJECT(controls.coverage), "target", &args->coverage);
- gwy_table_attach_hscale(table, row, _("Co_verage:"), NULL,
+ gwy_table_attach_adjbar(table, row, _("Co_verage:"), NULL,
controls.coverage, GWY_HSCALE_SQRT);
g_signal_connect_swapped(controls.coverage, "value-changed",
G_CALLBACK(gwy_synth_double_changed), &controls);
@@ -478,12 +478,12 @@ col_synth_dialog(ColSynthArgs *args,
gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
gtk_table_attach(GTK_TABLE(table), gwy_label_new_header(_("Particle Size")),
- 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
controls.height = gtk_adjustment_new(args->height, 0.1, 10.0, 0.1, 1.0, 0);
g_object_set_data(G_OBJECT(controls.height), "target", &args->height);
- gwy_table_attach_hscale(table, row, _("_Height:"), "px",
+ gwy_table_attach_adjbar(table, row, _("_Height:"), _("px"),
controls.height, GWY_HSCALE_SQRT);
g_signal_connect_swapped(controls.height, "value-changed",
G_CALLBACK(gwy_synth_double_changed), &controls);
@@ -496,7 +496,7 @@ col_synth_dialog(ColSynthArgs *args,
gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
gtk_table_attach(GTK_TABLE(table),
gwy_label_new_header(_("Incidence")),
- 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
row = gwy_synth_attach_angle(&controls, row, &controls.theta, &args->theta,
@@ -514,24 +514,25 @@ col_synth_dialog(ColSynthArgs *args,
gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
gtk_table_attach(GTK_TABLE(table),
gwy_label_new_header(_("Options")),
- 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
controls.relaxation = relaxation_selector_new(&controls);
- gwy_table_attach_hscale(table, row, _("Relaxation type:"), NULL,
- GTK_OBJECT(controls.relaxation), GWY_HSCALE_WIDGET);
+ gwy_table_attach_adjbar(table, row, _("Relaxation type:"), NULL,
+ GTK_OBJECT(controls.relaxation),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
row++;
controls.melting = gtk_adjustment_new(args->melting,
0.0, 1.0, 0.0001, 0.01, 0);
g_object_set_data(G_OBJECT(controls.melting), "target", &args->melting);
- gwy_table_attach_hscale(table, row, _("_Melting:"), NULL,
+ gwy_table_attach_adjbar(table, row, _("_Melting:"), NULL,
controls.melting, GWY_HSCALE_SQRT);
g_signal_connect_swapped(controls.melting, "value-changed",
G_CALLBACK(gwy_synth_double_changed), &controls);
row++;
- table = gtk_table_new(1 + GRAPH_NFLAGS, 4, FALSE);
+ table = gtk_table_new(1 + GRAPH_NFLAGS, 3, FALSE);
/* This is used only for synt.h helpers. */
controls.table = GTK_TABLE(table);
gtk_table_set_row_spacings(GTK_TABLE(table), 2);
@@ -554,7 +555,7 @@ col_synth_dialog(ColSynthArgs *args,
toggle = GTK_TOGGLE_BUTTON(controls.graph_flags[i]);
gtk_toggle_button_set_active(toggle, args->graph_flags[i]);
gtk_table_attach(GTK_TABLE(table), controls.graph_flags[i],
- 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect(toggle, "toggled",
G_CALLBACK(gwy_synth_boolean_changed_silent),
&args->graph_flags[i]);
diff --git a/modules/process/convolution_filter.c b/modules/process/convolution_filter.c
index f5d0eec..50ba5a3 100644
--- a/modules/process/convolution_filter.c
+++ b/modules/process/convolution_filter.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: convolution_filter.c 19216 2016-11-09 10:39:06Z yeti-dn $
+ * @(#) $Id: convolution_filter.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2003 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -136,7 +136,7 @@ static GwyModuleInfo module_info = {
"2006",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, convolution_filter)
static gboolean
module_register(void)
@@ -347,7 +347,7 @@ convolution_filter_create_filter_tab(ConvolutionControls *controls)
gtk_box_pack_start(GTK_BOX(hbox2), table, FALSE, FALSE, 0);
gtk_table_attach(GTK_TABLE(table), gwy_label_new_header(_("Size")),
- 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 1, 0, 1, GTK_FILL, 0, 0, 0);
controls->sizes
= gwy_radio_buttons_create(sizes, nsizes,
G_CALLBACK(convolution_filter_size_changed),
@@ -390,7 +390,7 @@ convolution_filter_create_filter_tab(ConvolutionControls *controls)
controls->divisor_auto = gtk_check_button_new_with_mnemonic(_("_automatic"));
gtk_table_attach(GTK_TABLE(table), controls->divisor_auto,
- 2, 3, 0, 1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 2, 3, 0, 1, GTK_FILL, 0, 0, 0);
g_signal_connect(controls->divisor_auto, "toggled",
G_CALLBACK(convolution_filter_autodiv_changed), controls);
diff --git a/modules/process/correct_affine.c b/modules/process/correct_affine.c
index 41973e8..7931225 100644
--- a/modules/process/correct_affine.c
+++ b/modules/process/correct_affine.c
@@ -1,6 +1,6 @@
/*
- * @(#) $Id: correct_affine.c 18537 2016-03-28 18:11:19Z yeti-dn $
- * Copyright (C) 2013-2014 David Necas (Yeti).
+ * @(#) $Id: correct_affine.c 20137 2017-08-02 11:21:46Z yeti-dn $
+ * Copyright (C) 2013-2017 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
* This program is free software; you can redistribute it and/or modify
@@ -29,6 +29,7 @@
#include <libprocess/arithmetic.h>
#include <libprocess/stats.h>
#include <libprocess/correct.h>
+#include <libprocess/elliptic.h>
#include <libgwydgets/gwyradiobuttons.h>
#include <libgwydgets/gwycombobox.h>
#include <libgwydgets/gwystock.h>
@@ -69,12 +70,6 @@ typedef enum {
ZOOM_16 = 16
} ZoomType;
-typedef enum {
- SCALING_AS_GIVEN,
- SCALING_PRESERVE_AREA,
- SCALING_PRESERVE_X,
-} ScalingType;
-
typedef struct {
gdouble a1;
gdouble a2;
@@ -86,9 +81,10 @@ typedef struct {
gdouble a2;
gdouble phi;
gboolean different_lengths;
- gboolean avoid_rotation;
+ gboolean distribute;
+ gboolean fix_hacf;
GwyInterpolationType interp;
- ScalingType scaling;
+ GwyAffineScalingType scaling;
gint preset;
ZoomType zoom;
@@ -108,6 +104,8 @@ typedef struct {
GtkWidget *acffield;
GtkWidget *interp;
GtkWidget *scaling;
+ GtkWidget *distribute;
+ GtkWidget *fix_hacf;
GwySIValueFormat *vf;
GwySIValueFormat *vfphi;
/* Actual */
@@ -120,7 +118,6 @@ typedef struct {
GtkWidget *a2_len;
GtkWidget *a2_phi;
GtkWidget *phi;
- GtkWidget *refine;
GtkWidget *preset;
gdouble xy[4];
/* Correct (wanted) */
@@ -134,89 +131,81 @@ typedef struct {
gulong recalculate_id;
} AffcorControls;
-static gboolean module_register (void);
-static void correct_affine (GwyContainer *data,
- GwyRunType run);
-static gint affcor_dialog (AffcorArgs *args,
- GwyContainer *data,
- GwyDataField *dfield,
- gint id);
-static GtkWidget* make_lattice_table (AffcorControls *controls);
-static GtkWidget* add_lattice_entry (GtkTable *table,
- const gchar *name,
- gdouble value,
- GwySensitivityGroup *sens,
- guint flags,
- gint *row,
- GwySIValueFormat *vf);
-static gboolean filter_acffield (GwyContainer *data,
- gint id,
- gpointer user_data);
-static void a1_changed_manually (GtkEntry *entry,
- AffcorControls *controls);
-static void a2_changed_manually (GtkEntry *entry,
- AffcorControls *controls);
-static void init_selection (GwySelection *selection,
- GwyDataField *dfield);
-static void image_mode_changed (GtkToggleButton *button,
- AffcorControls *controls);
-static void zoom_changed (GtkRadioButton *button,
- AffcorControls *controls);
-static void preset_changed (GtkComboBox *combo,
- AffcorControls *controls);
-static void a1_changed (AffcorControls *controls,
- GtkEntry *entry);
-static void a2_changed (AffcorControls *controls,
- GtkEntry *entry);
-static void phi_changed (AffcorControls *controls,
- GtkEntry *entry);
-static void acffield_changed (AffcorControls *controls,
- GwyDataChooser *chooser);
-static void calculate_acffield_full (AffcorControls *controls,
- GwyDataField *dfield);
-static void calculate_acffield (AffcorControls *controls);
-static void different_lengths_toggled(AffcorControls *controls,
- GtkToggleButton *toggle);
-static void refine (AffcorControls *controls);
-static void selection_changed (AffcorControls *controls);
-static void interp_changed (GtkComboBox *combo,
- AffcorControls *controls);
-static void scaling_changed (GtkComboBox *combo,
- AffcorControls *controls);
-static void invalidate (AffcorControls *controls);
-static gboolean recalculate (gpointer user_data);
-static void do_correction (AffcorControls *controls);
-static void corner_max (gdouble x,
- gdouble y,
- const gdouble *m,
- gdouble *vmax);
-static void solve_transform_real (const gdouble *a1a2,
- const gdouble *a1a2_corr,
- gdouble *m);
-static void find_maximum (GwyDataField *dfield,
- gdouble *x,
- gdouble *y,
- gint xwinsize,
- gint ywinsize);
-static void matrix_vector (gdouble *dest,
- const gdouble *m,
- const gdouble *src);
-static void matrix_matrix (gdouble *dest,
- const gdouble *m,
- const gdouble *src);
-static void invert_matrix (gdouble *dest,
- const gdouble *src);
-static gdouble matrix_det (const gdouble *m);
-static void affcor_load_args (GwyContainer *container,
- AffcorArgs *args);
-static void affcor_save_args (GwyContainer *container,
- AffcorArgs *args);
-static void affcor_sanitize_args (AffcorArgs *args);
+static gboolean module_register (void);
+static void correct_affine (GwyContainer *data,
+ GwyRunType run);
+static gint affcor_dialog (AffcorArgs *args,
+ GwyContainer *data,
+ GwyDataField *dfield,
+ gint id,
+ gdouble *a1a2);
+static GtkWidget* make_lattice_table (AffcorControls *controls);
+static GtkWidget* add_lattice_entry (GtkTable *table,
+ const gchar *name,
+ gdouble value,
+ GwySensitivityGroup *sens,
+ guint flags,
+ gint *row,
+ GwySIValueFormat *vf);
+static gboolean filter_acffield (GwyContainer *data,
+ gint id,
+ gpointer user_data);
+static void a1_changed_manually (GtkEntry *entry,
+ AffcorControls *controls);
+static void a2_changed_manually (GtkEntry *entry,
+ AffcorControls *controls);
+static void init_selection (AffcorControls *controls);
+static void image_mode_changed (GtkToggleButton *button,
+ AffcorControls *controls);
+static void zoom_changed (GtkRadioButton *button,
+ AffcorControls *controls);
+static void preset_changed (GtkComboBox *combo,
+ AffcorControls *controls);
+static void a1_changed (AffcorControls *controls,
+ GtkEntry *entry);
+static void a2_changed (AffcorControls *controls,
+ GtkEntry *entry);
+static void phi_changed (AffcorControls *controls,
+ GtkEntry *entry);
+static void acffield_changed (AffcorControls *controls,
+ GwyDataChooser *chooser);
+static void calculate_acffield_full (AffcorControls *controls,
+ GwyDataField *dfield);
+static GwyDataField* get_full_acffield (AffcorControls *controls);
+static void calculate_acffield (AffcorControls *controls);
+static void different_lengths_changed(AffcorControls *controls,
+ GtkToggleButton *toggle);
+static void distribute_changed (AffcorControls *controls,
+ GtkToggleButton *toggle);
+static void fix_hacf_changed (AffcorControls *controls,
+ GtkToggleButton *toggle);
+static void refine (AffcorControls *controls);
+static void do_estimate (AffcorControls *controls);
+static void selection_changed (AffcorControls *controls);
+static void interp_changed (GtkComboBox *combo,
+ AffcorControls *controls);
+static void scaling_changed (GtkComboBox *combo,
+ AffcorControls *controls);
+static void invalidate (AffcorControls *controls);
+static gboolean recalculate (gpointer user_data);
+static void do_correction (AffcorControls *controls);
+static void fill_correct_vectors (const AffcorArgs *args,
+ gdouble *a1a2);
+static GwyDataField* create_corrected_dfield (GwyDataField *dfield,
+ const gdouble *a1a2,
+ gdouble *a1a2_corr,
+ GwyInterpolationType interp,
+ GwyAffineScalingType scaling);
+static void affcor_load_args (GwyContainer *container,
+ AffcorArgs *args);
+static void affcor_save_args (GwyContainer *container,
+ AffcorArgs *args);
+static void affcor_sanitize_args (AffcorArgs *args);
static const AffcorArgs affcor_defaults = {
1.0, 1.0, 90.0, FALSE,
- TRUE,
- GWY_INTERPOLATION_LINEAR, SCALING_AS_GIVEN,
+ FALSE, FALSE,
+ GWY_INTERPOLATION_LINEAR, GWY_AFFINE_SCALING_AS_GIVEN,
-1,
ZOOM_1, IMAGE_DATA,
};
@@ -231,12 +220,12 @@ static GwyModuleInfo module_info = {
N_("Corrects affine distortion of images by matching image Bravais "
"lattice to the true one."),
"Yeti <yeti at gwyddion.net>",
- "1.6",
+ "2.0",
"David Nečas (Yeti)",
"2013",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, correct_affine)
static gboolean
module_register(void)
@@ -255,9 +244,19 @@ module_register(void)
static void
correct_affine(GwyContainer *data, GwyRunType run)
{
+ const guint compat_flags = (GWY_DATA_COMPATIBILITY_RES
+ | GWY_DATA_COMPATIBILITY_REAL
+ | GWY_DATA_COMPATIBILITY_LATERAL);
AffcorArgs args;
- GwyDataField *dfield;
- gint id, newid;
+ GwyDataField *dfield, *ofield, *corrected;
+ gint id, newid, corrid;
+ gint *all_channels;
+ gdouble a1a2_corr[4], a1a2[4];
+ GType type;
+ GwySelection *selection;
+ gchar *s, *t;
+ GQuark quark;
+ guint i;
g_return_if_fail(run & AFFINE_RUN_MODES);
g_return_if_fail(g_type_from_name("GwyLayerLattice"));
@@ -267,17 +266,63 @@ correct_affine(GwyContainer *data, GwyRunType run)
0);
g_return_if_fail(dfield);
- newid = affcor_dialog(&args, data, dfield, id);
+ newid = affcor_dialog(&args, data, dfield, id, a1a2);
affcor_save_args(gwy_app_settings_get(), &args);
- if (newid != -1)
- gwy_app_channel_log_add_proc(data, id, newid);
+ if (newid == -1)
+ return;
+
+ gwy_app_channel_log_add_proc(data, id, newid);
+
+ if (!args.distribute)
+ return;
+
+ all_channels = gwy_app_data_browser_get_data_ids(data);
+ type = g_type_from_name("GwySelectionLattice");
+ for (i = 0; all_channels[i] != -1; i++) {
+ if (all_channels[i] == id || all_channels[i] == newid)
+ continue;
+
+ quark = gwy_app_get_data_key_for_id(all_channels[i]);
+ ofield = gwy_container_get_object(data, quark);
+ if (gwy_data_field_check_compatibility(dfield, ofield, compat_flags))
+ continue;
+
+ fill_correct_vectors(&args, a1a2_corr);
+ corrected = create_corrected_dfield(ofield, a1a2, a1a2_corr,
+ args.interp, args.scaling);
+ corrid = gwy_app_data_browser_add_data_field(corrected, data, FALSE);
+ gwy_app_sync_data_items(data, data, all_channels[i], corrid, FALSE,
+ GWY_DATA_ITEM_RANGE_TYPE,
+ GWY_DATA_ITEM_RANGE,
+ GWY_DATA_ITEM_GRADIENT,
+ 0);
+ g_object_unref(corrected);
+
+ selection = g_object_newv(type, 0, NULL);
+ gwy_selection_set_data(selection, 1, a1a2_corr);
+ s = g_strdup_printf("/%d/select/lattice", corrid);
+ gwy_container_set_object_by_name(data, s, selection);
+ g_object_unref(selection);
+ g_free(s);
+
+ s = gwy_app_get_data_field_title(data, all_channels[i]);
+ t = g_strconcat(s, " ", _("Corrected"), NULL);
+ quark = gwy_app_get_data_title_key_for_id(corrid);
+ gwy_container_set_string(data, quark, (const guchar*)t);
+ g_free(s);
+
+ gwy_app_channel_log_add_proc(data, all_channels[i], corrid);
+ }
+
+ g_free(all_channels);
}
static gint
affcor_dialog(AffcorArgs *args,
GwyContainer *data,
GwyDataField *dfield,
- gint id)
+ gint id,
+ gdouble *a1a2)
{
GtkWidget *hbox, *hbox2, *label, *button, *lattable, *alignment;
GtkDialog *dialog;
@@ -288,8 +333,8 @@ affcor_dialog(AffcorArgs *args,
gint response, row, newid = -1;
GObject *selection;
gchar selkey[40];
- GwySIUnit *unitphi;
guint flags;
+ gchar *s, *t;
gwy_clear(&controls, 1);
controls.args = args;
@@ -299,6 +344,9 @@ affcor_dialog(AffcorArgs *args,
NULL, 0, NULL);
dialog = GTK_DIALOG(controls.dialog);
gtk_dialog_add_button(dialog, _("_Reset"), RESPONSE_RESET);
+ gtk_dialog_add_button(dialog, gwy_sgettext("verb|_Estimate"),
+ RESPONSE_ESTIMATE);
+ gtk_dialog_add_button(dialog, _("_Refine"), RESPONSE_REFINE);
gtk_dialog_add_button(dialog, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL);
button = gtk_dialog_add_button(dialog, GTK_STOCK_OK, GTK_RESPONSE_OK);
gtk_dialog_set_default_response(dialog, GTK_RESPONSE_OK);
@@ -341,16 +389,16 @@ affcor_dialog(AffcorArgs *args,
gtk_container_add(GTK_CONTAINER(alignment), controls.view);
- table = GTK_TABLE(gtk_table_new(17, 4, FALSE));
+ table = GTK_TABLE(gtk_table_new(20, 4, FALSE));
gtk_table_set_row_spacings(table, 2);
gtk_table_set_col_spacings(table, 6);
gtk_container_set_border_width(GTK_CONTAINER(table), 4);
- gtk_box_pack_end(GTK_BOX(hbox), GTK_WIDGET(table), FALSE, FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(table), TRUE, TRUE, 0);
row = 0;
label = gwy_label_new_header(_("Preview Options"));
gtk_table_attach(GTK_TABLE(table), label, 0, 2, row, row+1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ GTK_FILL, 0, 0, 0);
row++;
label = gtk_label_new(_("Display:"));
@@ -373,7 +421,7 @@ affcor_dialog(AffcorArgs *args,
hbox2 = gtk_hbox_new(FALSE, 8);
gtk_table_attach(GTK_TABLE(table), hbox2, 0, 4, row, row+1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ GTK_FILL, 0, 0, 0);
label = gtk_label_new(_("ACF zoom:"));
gtk_box_pack_start(GTK_BOX(hbox2), label, FALSE, FALSE, 0);
@@ -390,6 +438,16 @@ affcor_dialog(AffcorArgs *args,
}
row++;
+ controls.fix_hacf
+ = gtk_check_button_new_with_mnemonic(_("Interpolate _horizontal ACF"));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.fix_hacf),
+ args->fix_hacf);
+ gtk_table_attach(table, controls.fix_hacf,
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
+ g_signal_connect_swapped(controls.fix_hacf, "toggled",
+ G_CALLBACK(fix_hacf_changed), &controls);
+ row++;
+
gtk_table_set_row_spacing(table, row-1, 8);
label = gwy_label_new_header(_("Lattice Vectors"));
gtk_table_attach(table, label, 0, 5, row, row+1, GTK_FILL, 0, 0, 0);
@@ -400,18 +458,10 @@ affcor_dialog(AffcorArgs *args,
GWY_SI_UNIT_FORMAT_MARKUP, NULL);
controls.vf->precision += 2;
- unitphi = gwy_si_unit_new("deg");
- controls.vfphi
- = gwy_si_unit_get_format_with_resolution(unitphi,
- GWY_SI_UNIT_FORMAT_MARKUP,
- 180.0, 0.01, NULL);
- g_object_unref(unitphi);
+ controls.vfphi = gwy_si_unit_value_format_new(G_PI/180.0, 2, _("deg"));
lattable = make_lattice_table(&controls);
- gtk_table_attach(table, lattable,
- 0, 5, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
- g_signal_connect_swapped(controls.refine, "clicked",
- G_CALLBACK(refine), &controls);
+ gtk_table_attach(table, lattable, 0, 5, row, row+1, GTK_FILL, 0, 0, 0);
gtk_table_set_row_spacing(table, row, 8);
row++;
@@ -431,7 +481,7 @@ affcor_dialog(AffcorArgs *args,
"HOPG", 0,
NULL);
gtk_table_attach(table, controls.preset,
- 2, 5, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 2, 5, row, row+1, GTK_FILL, 0, 0, 0);
gtk_label_set_mnemonic_widget(GTK_LABEL(label), controls.preset);
row++;
@@ -450,7 +500,7 @@ affcor_dialog(AffcorArgs *args,
gtk_table_attach(table, controls.different_lengths,
3, 5, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect_swapped(controls.different_lengths, "toggled",
- G_CALLBACK(different_lengths_toggled), &controls);
+ G_CALLBACK(different_lengths_changed), &controls);
controls.a2_corr = add_lattice_entry(table, "a<sub>2</sub>:", args->a2,
controls.sens,
@@ -460,7 +510,7 @@ affcor_dialog(AffcorArgs *args,
g_signal_connect_swapped(controls.a2_corr, "changed",
G_CALLBACK(a2_changed), &controls);
- controls.phi_corr = add_lattice_entry(table, "ϕ:", args->phi*180.0/G_PI,
+ controls.phi_corr = add_lattice_entry(table, "ϕ:", args->phi,
controls.sens, SENS_USER_LATTICE,
&row, controls.vfphi);
g_signal_connect_swapped(controls.phi_corr, "changed",
@@ -495,7 +545,7 @@ affcor_dialog(AffcorArgs *args,
args->interp, TRUE);
gtk_label_set_mnemonic_widget(GTK_LABEL(label), controls.interp);
gtk_table_attach(table, controls.interp,
- 2, 5, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 2, 5, row, row+1, GTK_FILL, 0, 0, 0);
row++;
label = gtk_label_new_with_mnemonic(_("_Scaling:"));
@@ -505,13 +555,27 @@ affcor_dialog(AffcorArgs *args,
controls.scaling
= gwy_enum_combo_box_newl(G_CALLBACK(scaling_changed), &controls,
args->scaling,
- _("Exactly as specified"), SCALING_AS_GIVEN,
- _("Preserve area"), SCALING_PRESERVE_AREA,
- _("Preserve X scale"), SCALING_PRESERVE_X,
+ _("Exactly as specified"),
+ GWY_AFFINE_SCALING_AS_GIVEN,
+ _("Preserve area"),
+ GWY_AFFINE_SCALING_PRESERVE_AREA,
+ _("Preserve X scale"),
+ GWY_AFFINE_SCALING_PRESERVE_X,
NULL);
gtk_label_set_mnemonic_widget(GTK_LABEL(label), controls.scaling);
gtk_table_attach(table, controls.scaling,
- 2, 5, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 2, 5, row, row+1, GTK_FILL, 0, 0, 0);
+ row++;
+
+ controls.distribute
+ = gtk_check_button_new_with_mnemonic(_("_Apply to all "
+ "compatible images"));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.distribute),
+ args->distribute);
+ gtk_table_attach(table, controls.distribute,
+ 0, 4, row, row+1, GTK_FILL, 0, 0, 0);
+ g_signal_connect_swapped(controls.distribute, "toggled",
+ G_CALLBACK(distribute_changed), &controls);
row++;
g_snprintf(selkey, sizeof(selkey), "/%d/select/lattice", id);
@@ -519,10 +583,9 @@ affcor_dialog(AffcorArgs *args,
&& gwy_selection_get_data(GWY_SELECTION(selection), NULL) == 1)
gwy_serializable_clone(selection, G_OBJECT(controls.selection));
else
- init_selection(controls.selection, dfield);
+ do_estimate(&controls);
- controls.selection_corr
- = GWY_SELECTION(gwy_serializable_duplicate(G_OBJECT(controls.selection)));
+ controls.selection_corr = gwy_selection_duplicate(controls.selection);
flags = args->different_lengths ? SENS_DIFFERENT_LENGTHS : 0;
gwy_sensitivity_group_set_state(controls.sens,
@@ -544,7 +607,15 @@ affcor_dialog(AffcorArgs *args,
break;
case RESPONSE_RESET:
- init_selection(controls.selection, dfield);
+ init_selection(&controls);
+ break;
+
+ case RESPONSE_ESTIMATE:
+ do_estimate(&controls);
+ break;
+
+ case RESPONSE_REFINE:
+ refine(&controls);
break;
default:
@@ -556,9 +627,14 @@ affcor_dialog(AffcorArgs *args,
if (!controls.calculated)
do_correction(&controls);
+ gwy_selection_get_object(controls.selection, 0, a1a2);
corrected = gwy_container_get_object_by_name(controls.mydata, "/2/data");
newid = gwy_app_data_browser_add_data_field(corrected, data, TRUE);
- gwy_app_set_data_field_title(data, newid, _("Corrected"));
+ s = gwy_app_get_data_field_title(data, id);
+ t = g_strconcat(s, " ", _("Corrected"), NULL);
+ gwy_container_set_string(data, gwy_app_get_data_title_key_for_id(newid),
+ (const guchar*)t);
+ g_free(s);
gwy_app_sync_data_items(data, data, id, newid, FALSE,
GWY_DATA_ITEM_RANGE_TYPE,
GWY_DATA_ITEM_RANGE,
@@ -592,7 +668,7 @@ finalize:
static GtkWidget*
make_lattice_table(AffcorControls *controls)
{
- GtkWidget *table, *label, *button, *entry;
+ GtkWidget *table, *label, *entry;
GString *str = g_string_new(NULL);
table = gtk_table_new(4, 5, FALSE);
@@ -638,7 +714,8 @@ make_lattice_table(AffcorControls *controls)
gtk_entry_set_width_chars(GTK_ENTRY(entry), 8);
g_object_set_data(G_OBJECT(entry), "id", (gpointer)"x");
gwy_widget_set_activate_on_unfocus(entry, TRUE);
- gtk_table_attach(GTK_TABLE(table), entry, 1, 2, 1, 2, GTK_FILL, 0, 0, 0);
+ gtk_table_attach(GTK_TABLE(table), entry, 1, 2, 1, 2,
+ GTK_EXPAND | GTK_FILL, 0, 0, 0);
g_signal_connect(entry, "activate",
G_CALLBACK(a1_changed_manually), controls);
@@ -646,7 +723,8 @@ make_lattice_table(AffcorControls *controls)
gtk_entry_set_width_chars(GTK_ENTRY(entry), 8);
g_object_set_data(G_OBJECT(entry), "id", (gpointer)"y");
gwy_widget_set_activate_on_unfocus(entry, TRUE);
- gtk_table_attach(GTK_TABLE(table), entry, 2, 3, 1, 2, GTK_FILL, 0, 0, 0);
+ gtk_table_attach(GTK_TABLE(table), entry, 2, 3, 1, 2,
+ GTK_EXPAND | GTK_FILL, 0, 0, 0);
g_signal_connect(entry, "activate",
G_CALLBACK(a1_changed_manually), controls);
@@ -654,7 +732,8 @@ make_lattice_table(AffcorControls *controls)
gtk_entry_set_width_chars(GTK_ENTRY(entry), 8);
g_object_set_data(G_OBJECT(entry), "id", (gpointer)"len");
gwy_widget_set_activate_on_unfocus(entry, TRUE);
- gtk_table_attach(GTK_TABLE(table), entry, 3, 4, 1, 2, GTK_FILL, 0, 0, 0);
+ gtk_table_attach(GTK_TABLE(table), entry, 3, 4, 1, 2,
+ GTK_EXPAND | GTK_FILL, 0, 0, 0);
g_signal_connect(entry, "activate",
G_CALLBACK(a1_changed_manually), controls);
@@ -662,7 +741,8 @@ make_lattice_table(AffcorControls *controls)
gtk_entry_set_width_chars(GTK_ENTRY(entry), 8);
g_object_set_data(G_OBJECT(entry), "id", (gpointer)"phi");
gwy_widget_set_activate_on_unfocus(entry, TRUE);
- gtk_table_attach(GTK_TABLE(table), entry, 4, 5, 1, 2, GTK_FILL, 0, 0, 0);
+ gtk_table_attach(GTK_TABLE(table), entry, 4, 5, 1, 2,
+ GTK_EXPAND | GTK_FILL, 0, 0, 0);
g_signal_connect(entry, "activate",
G_CALLBACK(a1_changed_manually), controls);
@@ -676,7 +756,8 @@ make_lattice_table(AffcorControls *controls)
gtk_entry_set_width_chars(GTK_ENTRY(entry), 8);
g_object_set_data(G_OBJECT(entry), "id", (gpointer)"x");
gwy_widget_set_activate_on_unfocus(entry, TRUE);
- gtk_table_attach(GTK_TABLE(table), entry, 1, 2, 2, 3, GTK_FILL, 0, 0, 0);
+ gtk_table_attach(GTK_TABLE(table), entry, 1, 2, 2, 3,
+ GTK_EXPAND | GTK_FILL, 0, 0, 0);
g_signal_connect(entry, "activate",
G_CALLBACK(a2_changed_manually), controls);
@@ -684,7 +765,8 @@ make_lattice_table(AffcorControls *controls)
gtk_entry_set_width_chars(GTK_ENTRY(entry), 8);
g_object_set_data(G_OBJECT(entry), "id", (gpointer)"y");
gwy_widget_set_activate_on_unfocus(entry, TRUE);
- gtk_table_attach(GTK_TABLE(table), entry, 2, 3, 2, 3, GTK_FILL, 0, 0, 0);
+ gtk_table_attach(GTK_TABLE(table), entry, 2, 3, 2, 3,
+ GTK_EXPAND | GTK_FILL, 0, 0, 0);
g_signal_connect(entry, "activate",
G_CALLBACK(a2_changed_manually), controls);
@@ -692,7 +774,8 @@ make_lattice_table(AffcorControls *controls)
gtk_entry_set_width_chars(GTK_ENTRY(entry), 8);
g_object_set_data(G_OBJECT(entry), "id", (gpointer)"len");
gwy_widget_set_activate_on_unfocus(entry, TRUE);
- gtk_table_attach(GTK_TABLE(table), entry, 3, 4, 2, 3, GTK_FILL, 0, 0, 0);
+ gtk_table_attach(GTK_TABLE(table), entry, 3, 4, 2, 3,
+ GTK_EXPAND | GTK_FILL, 0, 0, 0);
g_signal_connect(entry, "activate",
G_CALLBACK(a2_changed_manually), controls);
@@ -700,7 +783,8 @@ make_lattice_table(AffcorControls *controls)
gtk_entry_set_width_chars(GTK_ENTRY(entry), 8);
g_object_set_data(G_OBJECT(entry), "id", (gpointer)"phi");
gwy_widget_set_activate_on_unfocus(entry, TRUE);
- gtk_table_attach(GTK_TABLE(table), entry, 4, 5, 2, 3, GTK_FILL, 0, 0, 0);
+ gtk_table_attach(GTK_TABLE(table), entry, 4, 5, 2, 3,
+ GTK_EXPAND | GTK_FILL, 0, 0, 0);
g_signal_connect(entry, "activate",
G_CALLBACK(a2_changed_manually), controls);
@@ -714,10 +798,6 @@ make_lattice_table(AffcorControls *controls)
gtk_misc_set_alignment(GTK_MISC(label), .0, 0.5);
gtk_table_attach(GTK_TABLE(table), label, 4, 5, 3, 4, GTK_FILL, 0, 0, 0);
- controls->refine = button = gtk_button_new_with_mnemonic(_("Re_fine"));
- gtk_table_attach(GTK_TABLE(table), button,
- 0, 3, 3, 4, GTK_FILL, 0, 0, 0);
-
g_string_free(str, TRUE);
return table;
@@ -753,7 +833,7 @@ add_lattice_entry(GtkTable *table,
gtk_entry_set_width_chars(GTK_ENTRY(entry), 6);
g_free(buf);
gtk_table_attach(table, entry,
- 1, 2, *row, *row+1, GTK_FILL, 0, 0, 0);
+ 1, 2, *row, *row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
gwy_sensitivity_group_add_widget(sens, entry, flags);
(*row)++;
@@ -863,14 +943,15 @@ a2_changed_manually(GtkEntry *entry,
}
static void
-init_selection(GwySelection *selection,
- GwyDataField *dfield)
+init_selection(AffcorControls *controls)
{
+ GwyDataField *dfield;
gdouble xy[4] = { 0.0, 0.0, 0.0, 0.0 };
+ dfield = gwy_container_get_object_by_name(controls->mydata, "/0/data");
xy[0] = dfield->xreal/20;
xy[3] = -dfield->yreal/20;
- gwy_selection_set_data(selection, 1, xy);
+ gwy_selection_set_data(controls->selection, 1, xy);
}
static void
@@ -966,7 +1047,7 @@ preset_changed(GtkComboBox *combo,
gtk_entry_set_text(GTK_ENTRY(controls->a1_corr), str->str);
g_string_printf(str, "%g", preset->a2/controls->vf->magnitude);
gtk_entry_set_text(GTK_ENTRY(controls->a2_corr), str->str);
- g_string_printf(str, "%g", preset->phi/G_PI*180.0/controls->vfphi->magnitude);
+ g_string_printf(str, "%g", preset->phi/controls->vfphi->magnitude);
gtk_entry_set_text(GTK_ENTRY(controls->phi_corr), str->str);
g_string_free(str, TRUE);
@@ -982,7 +1063,7 @@ a1_changed(AffcorControls *controls,
guint flags;
buf = gtk_entry_get_text(entry);
- args->a1 = g_strtod(buf, NULL);
+ args->a1 = g_strtod(buf, NULL) * controls->vf->magnitude;
if (args->a1 > 0.0)
controls->invalid_corr &= ~INVALID_A1;
else
@@ -1005,7 +1086,7 @@ a2_changed(AffcorControls *controls,
guint flags;
buf = gtk_entry_get_text(entry);
- args->a2 = g_strtod(buf, NULL);
+ args->a2 = g_strtod(buf, NULL) * controls->vf->magnitude;
if (args->a2 > 0.0)
controls->invalid_corr &= ~INVALID_A2;
else
@@ -1054,7 +1135,8 @@ static void
calculate_acffield_full(AffcorControls *controls,
GwyDataField *dfield)
{
- GwyDataField *acf;
+ GwyDataField *acf, *mid, *mask;
+ GwyDataLine *hacf;
guint acfwidth, acfheight;
dfield = gwy_data_field_duplicate(dfield);
@@ -1068,22 +1150,68 @@ calculate_acffield_full(AffcorControls *controls,
gwy_container_set_object_by_name(controls->mydata, "/1/data/full", acf);
g_object_unref(acf);
+ /* Remember the middle row as we may replace it. */
+ acfheight = gwy_data_field_get_yres(acf);
+ acfwidth = gwy_data_field_get_xres(acf);
+ hacf = gwy_data_line_new(acfwidth, 1.0, FALSE);
+ gwy_data_field_get_row(acf, hacf, acfheight/2);
+ gwy_container_set_object_by_name(controls->mydata, "/1/hacf", hacf);
+ g_object_unref(hacf);
+
+ /* Remember interpolated middle row. */
+ mid = gwy_data_field_area_extract(acf, 0, acfheight/2-1, acfwidth, 3);
+ mask = gwy_data_field_new(acfwidth, 3, acfwidth, 3, TRUE);
+ gwy_data_field_area_fill(mask, 0, 1, acfwidth, 1, 1.0);
+ gwy_data_field_set_val(mask, acfwidth/2, 1, 0.0);
+ gwy_data_field_laplace_solve(mid, mask, -1, 1.0);
+ hacf = gwy_data_line_new(acfwidth, 1.0, FALSE);
+ gwy_data_field_get_row(mid, hacf, 1);
+ gwy_container_set_object_by_name(controls->mydata, "/1/hacf-fixed", hacf);
+ g_object_unref(hacf);
+ g_object_unref(mask);
+ g_object_unref(mid);
+
calculate_acffield(controls);
}
+static GwyDataField*
+get_full_acffield(AffcorControls *controls)
+{
+ GwyDataField *acf;
+ GwyDataLine *hacf;
+ guint yres;
+ const gchar *key;
+
+ acf = GWY_DATA_FIELD(gwy_container_get_object_by_name(controls->mydata,
+ "/1/data/full"));
+ yres = gwy_data_field_get_yres(acf);
+
+ if (controls->args->fix_hacf)
+ key = "/1/hacf-fixed";
+ else
+ key = "/1/hacf";
+
+ hacf = GWY_DATA_LINE(gwy_container_get_object_by_name(controls->mydata,
+ key));
+ gwy_data_field_set_row(acf, hacf, yres/2);
+
+ return acf;
+}
+
static void
calculate_acffield(AffcorControls *controls)
{
ZoomType zoom = controls->args->zoom;
GwyDataField *acf;
+ guint xres, yres, width, height;
+
+ acf = get_full_acffield(controls);
+ xres = gwy_data_field_get_xres(acf);
+ yres = gwy_data_field_get_yres(acf);
- acf = GWY_DATA_FIELD(gwy_container_get_object_by_name(controls->mydata,
- "/1/data/full"));
if (zoom != ZOOM_1) {
- guint xres = acf->xres;
- guint yres = acf->yres;
- guint width = (xres/zoom) | 1;
- guint height = (yres/zoom) | 1;
+ width = (xres/zoom) | 1;
+ height = (yres/zoom) | 1;
if (width < 17)
width = MAX(width, MIN(17, xres));
@@ -1098,13 +1226,14 @@ calculate_acffield(AffcorControls *controls)
gwy_data_field_set_yoffset(acf, -0.5*acf->yreal);
}
gwy_container_set_object_by_name(controls->mydata, "/1/data", acf);
+ gwy_data_field_data_changed(acf);
if (controls->args->image_mode == IMAGE_ACF)
gwy_set_data_preview_size(GWY_DATA_VIEW(controls->view), PREVIEW_SIZE);
}
static void
-different_lengths_toggled(AffcorControls *controls,
+different_lengths_changed(AffcorControls *controls,
GtkToggleButton *toggle)
{
AffcorArgs *args = controls->args;
@@ -1121,34 +1250,49 @@ different_lengths_toggled(AffcorControls *controls,
}
static void
+distribute_changed(AffcorControls *controls,
+ GtkToggleButton *toggle)
+{
+ AffcorArgs *args = controls->args;
+
+ args->distribute = gtk_toggle_button_get_active(toggle);
+}
+
+static void
+fix_hacf_changed(AffcorControls *controls,
+ GtkToggleButton *toggle)
+{
+ AffcorArgs *args = controls->args;
+
+ args->fix_hacf = gtk_toggle_button_get_active(toggle);
+ calculate_acffield(controls);
+}
+
+static void
refine(AffcorControls *controls)
{
GwyDataField *acf;
- gint xwinsize, ywinsize;
gdouble xy[4];
if (!gwy_selection_get_object(controls->selection, 0, xy))
return;
- acf = GWY_DATA_FIELD(gwy_container_get_object_by_name(controls->mydata,
- "/1/data"));
- xwinsize = (gint)(0.32*MAX(fabs(xy[0]), fabs(xy[2]))
- /gwy_data_field_get_xmeasure(acf) + 0.5);
- ywinsize = (gint)(0.32*MAX(fabs(xy[1]), fabs(xy[3]))
- /gwy_data_field_get_ymeasure(acf) + 0.5);
- gwy_debug("window size: %dx%d", xwinsize, ywinsize);
-
- xy[0] = (xy[0] - acf->xoff)/gwy_data_field_get_xmeasure(acf);
- xy[1] = (xy[1] - acf->yoff)/gwy_data_field_get_ymeasure(acf);
- xy[2] = (xy[2] - acf->xoff)/gwy_data_field_get_xmeasure(acf);
- xy[3] = (xy[3] - acf->yoff)/gwy_data_field_get_ymeasure(acf);
- find_maximum(acf, xy + 0, xy + 1, xwinsize, ywinsize);
- find_maximum(acf, xy + 2, xy + 3, xwinsize, ywinsize);
- xy[0] = (xy[0] + 0.5)*gwy_data_field_get_xmeasure(acf) + acf->xoff;
- xy[1] = (xy[1] + 0.5)*gwy_data_field_get_ymeasure(acf) + acf->yoff;
- xy[2] = (xy[2] + 0.5)*gwy_data_field_get_xmeasure(acf) + acf->xoff;
- xy[3] = (xy[3] + 0.5)*gwy_data_field_get_ymeasure(acf) + acf->yoff;
- gwy_selection_set_object(controls->selection, 0, xy);
+ acf = get_full_acffield(controls);
+ if (gwy_data_field_measure_lattice_psdf(acf, xy))
+ gwy_selection_set_object(controls->selection, 0, xy);
+}
+
+static void
+do_estimate(AffcorControls *controls)
+{
+ GwyDataField *acf;
+
+ acf = get_full_acffield(controls);
+ gwy_clear(controls->xy, 4);
+ if (gwy_data_field_measure_lattice_acf(acf, controls->xy))
+ gwy_selection_set_object(controls->selection, 0, controls->xy);
+ else
+ init_selection(controls);
}
static void
@@ -1185,7 +1329,7 @@ selection_changed(AffcorControls *controls)
vf = controls->vfphi;
phi1 = atan2(-xy[1], xy[0]);
- g_string_printf(str, "%.*f", vf->precision, 180.0/G_PI*phi1/vf->magnitude);
+ g_string_printf(str, "%.*f", vf->precision, phi1/vf->magnitude);
gtk_entry_set_text(GTK_ENTRY(controls->a1_phi), str->str);
vf = controls->vf;
@@ -1201,13 +1345,13 @@ selection_changed(AffcorControls *controls)
vf = controls->vfphi;
phi2 = atan2(-xy[3], xy[2]);
- g_string_printf(str, "%.*f", vf->precision, 180.0/G_PI*phi2/vf->magnitude);
+ g_string_printf(str, "%.*f", vf->precision, phi2/vf->magnitude);
gtk_entry_set_text(GTK_ENTRY(controls->a2_phi), str->str);
phi = phi2 - phi1;
if (phi < 0.0)
phi += 2.0*G_PI;
- g_string_printf(str, "%.*f", vf->precision, 180.0/G_PI*phi/vf->magnitude);
+ g_string_printf(str, "%.*f", vf->precision, phi/vf->magnitude);
gtk_label_set_text(GTK_LABEL(controls->phi), str->str);
g_string_free(str, TRUE);
@@ -1273,255 +1417,62 @@ do_correction(AffcorControls *controls)
{
AffcorArgs *args = controls->args;
GwyDataField *dfield, *corrected;
- gdouble dx, dy, q = 1.0;
- gdouble a1a2_corr[4], a1a2[4], m[6], vmax[2], tmp[4];
- guint xres, yres, i;
-
- gwy_selection_get_object(controls->selection, 0, a1a2);
- gwy_debug("a1a2 %g %g %g %g", a1a2[0], a1a2[1], a1a2[2], a1a2[3]);
- a1a2_corr[0] = args->a1 * controls->vf->magnitude;
- a1a2_corr[1] = 0.0;
- a1a2_corr[2] = args->a2 * controls->vf->magnitude * cos(args->phi);
- a1a2_corr[3] = -args->a2 * controls->vf->magnitude * sin(args->phi);
- gwy_debug("a1a2_corr %g %g %g %g",
- a1a2_corr[0], a1a2_corr[1], a1a2_corr[2], a1a2_corr[3]);
- /* This is an approximate rotation correction to get the base more or less
- * oriented in the plane as expected and not upside down. */
- if (args->avoid_rotation) {
- gdouble alpha = atan2(-a1a2[1], a1a2[0]);
- tmp[0] = tmp[3] = cos(alpha);
- tmp[1] = sin(alpha);
- tmp[2] = -sin(alpha);
- matrix_vector(a1a2_corr, tmp, a1a2_corr);
- matrix_vector(a1a2_corr + 2, tmp, a1a2_corr + 2);
- }
- solve_transform_real(a1a2, a1a2_corr, m);
- gwy_debug("m %g %g %g %g", m[0], m[1], m[2], m[3]);
-
- /* This is the exact rotation correction. */
- if (args->avoid_rotation) {
- gdouble alpha = atan2(m[2], m[0]);
- tmp[0] = tmp[3] = cos(alpha);
- tmp[1] = sin(alpha);
- tmp[2] = -sin(alpha);
- matrix_matrix(m, tmp, m);
- }
-
- if (args->scaling == SCALING_PRESERVE_AREA)
- q = 1.0/sqrt(matrix_det(m));
- else if (args->scaling == SCALING_PRESERVE_X)
- q = 1.0/hypot(m[0], m[2]);
-
- for (i = 0; i < 4; i++) {
- m[i] *= q;
- /* To create the corrected lattice selection on result. */
- a1a2_corr[i] *= q;
- }
-
- /* Now save the corrected lattice selection on result. */
- gwy_selection_set_data(controls->selection_corr, 1, a1a2_corr);
+ gdouble a1a2_corr[4], a1a2[4];
dfield = GWY_DATA_FIELD(gwy_container_get_object_by_name(controls->mydata,
"/0/data"));
-
- vmax[0] = vmax[1] = 0.0;
- corner_max(dfield->xreal, dfield->yreal, m, vmax);
- corner_max(-dfield->xreal, dfield->yreal, m, vmax);
- corner_max(dfield->xreal, -dfield->yreal, m, vmax);
- corner_max(-dfield->xreal, -dfield->yreal, m, vmax);
-
- /* Prevent information loss by using a sufficient resolution to represent
- * original pixels. */
- tmp[0] = gwy_data_field_get_xmeasure(dfield);
- tmp[1] = tmp[2] = 0.0;
- tmp[3] = gwy_data_field_get_ymeasure(dfield);
- gwy_debug("dxdy %g %g", tmp[0], tmp[3]);
- matrix_matrix(tmp, m, tmp);
- gwy_debug("pix_corr %g %g %g %g", tmp[0], tmp[1], tmp[2], tmp[3]);
- dx = hypot(tmp[0]/G_SQRT2, tmp[1]/G_SQRT2);
- dy = hypot(tmp[2]/G_SQRT2, tmp[3]/G_SQRT2);
- dx = dy = MIN(dx, dy);
- xres = GWY_ROUND(vmax[0]/dx);
- yres = GWY_ROUND(vmax[1]/dy);
- gwy_debug("dxdy_corr %g %g", dx, dy);
- gwy_debug("res %u %u", xres, yres);
-
- corrected = gwy_data_field_new(xres, yres, dx*xres, dy*yres, FALSE);
- gwy_serializable_clone(G_OBJECT(gwy_data_field_get_si_unit_xy(dfield)),
- G_OBJECT(gwy_data_field_get_si_unit_xy(corrected)));
- gwy_serializable_clone(G_OBJECT(gwy_data_field_get_si_unit_z(dfield)),
- G_OBJECT(gwy_data_field_get_si_unit_z(corrected)));
-
- invert_matrix(m, m);
- gwy_debug("minv %g %g %g %g", m[0], m[1], m[2], m[3]);
-
- /* Multiply from right by pixel-to-real matrix in the corrected field. */
- tmp[0] = gwy_data_field_get_xmeasure(corrected);
- tmp[1] = tmp[2] = 0.0;
- tmp[3] = gwy_data_field_get_ymeasure(corrected);
- matrix_matrix(m, m, tmp);
- /* and from left by real-to-pixel matrix in the original field. */
- tmp[0] = 1.0/gwy_data_field_get_xmeasure(dfield);
- tmp[1] = tmp[2] = 0.0;
- tmp[3] = 1.0/gwy_data_field_get_ymeasure(dfield);
- matrix_matrix(m, tmp, m);
- gwy_debug("minvpix %g %g %g %g", m[0], m[1], m[2], m[3]);
-
- m[4] = 0.5*corrected->xres;
- m[5] = 0.5*corrected->yres;
- matrix_vector(m + 4, m, m + 4);
- m[4] = 0.5*dfield->xres - m[4];
- m[5] = 0.5*dfield->yres - m[5];
- gwy_debug("b %g %g", m[4], m[5]);
- gwy_data_field_affine(dfield, corrected, m, controls->args->interp,
- GWY_EXTERIOR_FIXED_VALUE,
- gwy_data_field_get_avg(dfield));
-
+ gwy_selection_get_object(controls->selection, 0, a1a2);
+ fill_correct_vectors(args, a1a2_corr);
+ corrected = create_corrected_dfield(dfield, a1a2, a1a2_corr,
+ args->interp, args->scaling);
gwy_container_set_object_by_name(controls->mydata, "/2/data", corrected);
g_object_unref(corrected);
- controls->calculated = TRUE;
-}
-
-static void
-corner_max(gdouble x, gdouble y, const gdouble *m, gdouble *vmax)
-{
- gdouble v[2];
-
- v[0] = x;
- v[1] = y;
- matrix_vector(v, m, v);
- vmax[0] = MAX(vmax[0], fabs(v[0]));
- vmax[1] = MAX(vmax[1], fabs(v[1]));
-}
-
-static void
-solve_transform_real(const gdouble *a1a2,
- const gdouble *a1a2_corr,
- gdouble *m)
-{
- gdouble tmp[4];
- tmp[0] = a1a2[0];
- tmp[1] = a1a2[2];
- tmp[2] = a1a2[1];
- tmp[3] = a1a2[3];
- invert_matrix(m, tmp);
- tmp[0] = a1a2_corr[0];
- tmp[1] = a1a2_corr[2];
- tmp[2] = a1a2_corr[1];
- tmp[3] = a1a2_corr[3];
- matrix_matrix(m, tmp, m);
-}
-
-static void
-find_maximum(GwyDataField *dfield,
- gdouble *x, gdouble *y,
- gint xwinsize, gint ywinsize)
-{
- gint xj = (gint)*x, yi = (gint)*y;
- gdouble v, max = -G_MAXDOUBLE;
- gint mi = yi, mj = xj, i, j;
- gint xres = dfield->xres, yres = dfield->yres;
- const gdouble *d = dfield->data;
- gdouble z[9];
-
- gwy_debug("searching from: %g, %g", *x, *y);
- for (i = -ywinsize; i <= ywinsize; i++) {
- if (i + yi < 0 || i + yi > yres-1)
- continue;
- for (j = -xwinsize; j <= xwinsize; j++) {
- if (j + xj < 0 || j + xj > xres-1)
- continue;
-
- v = d[(i + yi)*xres + (j + xj)];
- if (v > max) {
- max = v;
- mi = i + yi;
- mj = j + xj;
- }
- }
- }
- gwy_debug("pixel maximum at: %d, %d", *mj, *mi);
- /* Don't try any sub-pixel refinement if it's on the edge. */
- if (mi >= 1 && mi+1 <= yres-1 && mj >= 1 && mj+1 <= xres-1) {
- for (i = -1; i <= 1; i++) {
- for (j = -1; j <= 1; j++)
- z[3*(i + 1) + (j + 1)] = d[(mi + i)*xres + (mj + j)];
- }
- gwy_math_refine_maximum(z, x, y);
- gwy_debug("refinement by (%g, %g)", *x, *y);
- }
- else {
- *x = *y = 0.0;
- }
-
- *x += mj;
- *y += mi;
-}
-
-/* Permit dest = src */
-static void
-matrix_vector(gdouble *dest,
- const gdouble *m,
- const gdouble *src)
-{
- gdouble xy[2];
+ /* Now save the corrected lattice selection on result. */
+ gwy_selection_set_data(controls->selection_corr, 1, a1a2_corr);
- xy[0] = m[0]*src[0] + m[1]*src[1];
- xy[1] = m[2]*src[0] + m[3]*src[1];
- dest[0] = xy[0];
- dest[1] = xy[1];
+ controls->calculated = TRUE;
}
-/* Permit dest = src */
static void
-matrix_matrix(gdouble *dest,
- const gdouble *m,
- const gdouble *src)
+fill_correct_vectors(const AffcorArgs *args, gdouble *a1a2)
{
- gdouble xy[4];
-
- xy[0] = m[0]*src[0] + m[1]*src[2];
- xy[1] = m[0]*src[1] + m[1]*src[3];
- xy[2] = m[2]*src[0] + m[3]*src[2];
- xy[3] = m[2]*src[1] + m[3]*src[3];
- dest[0] = xy[0];
- dest[1] = xy[1];
- dest[2] = xy[2];
- dest[3] = xy[3];
+ a1a2[0] = args->a1;
+ a1a2[1] = 0.0;
+ a1a2[2] = args->a2 * cos(args->phi);
+ a1a2[3] = -args->a2 * sin(args->phi);
}
-/* Permit dest = src */
-static void
-invert_matrix(gdouble *dest,
- const gdouble *src)
+/* NB: a1a2_corr is modified according to scaling to be correct for the
+ * returned data field. */
+static GwyDataField*
+create_corrected_dfield(GwyDataField *dfield,
+ const gdouble *a1a2,
+ gdouble *a1a2_corr,
+ GwyInterpolationType interp,
+ GwyAffineScalingType scaling)
{
- gdouble D = matrix_det(src);
- gdouble xy[4];
+ GwyDataField *corrected;
+ gdouble invtrans[6];
- gwy_debug("D %g", D);
- xy[0] = src[3]/D;
- xy[1] = -src[1]/D;
- xy[2] = -src[2]/D;
- xy[3] = src[0]/D;
- dest[0] = xy[0];
- dest[1] = xy[1];
- dest[2] = xy[2];
- dest[3] = xy[3];
-}
+ corrected = gwy_data_field_new(1, 1, 1.0, 1.0, FALSE);
+ gwy_data_field_affine_prepare(dfield, corrected, a1a2, a1a2_corr, invtrans,
+ scaling, TRUE, 1.0);
+ gwy_data_field_affine(dfield, corrected, invtrans, interp,
+ GWY_EXTERIOR_FIXED_VALUE,
+ gwy_data_field_get_avg(dfield));
-static gdouble
-matrix_det(const gdouble *m)
-{
- return m[0]*m[3] - m[1]*m[2];
+ return corrected;
}
-static const gchar preset_key[] = "/module/correct_affine/preset";
static const gchar a1_key[] = "/module/correct_affine/a1";
static const gchar a2_key[] = "/module/correct_affine/a2";
-static const gchar phi_key[] = "/module/correct_affine/phi";
static const gchar different_lengths_key[] = "/module/correct_affine/different-lengths";
+static const gchar distribute_key[] = "/module/correct_affine/distribute";
+static const gchar fix_hacf_key[] = "/module/correct_affine/fix_hacf";
static const gchar interp_key[] = "/module/correct_affine/interpolation";
+static const gchar phi_key[] = "/module/correct_affine/phi";
+static const gchar preset_key[] = "/module/correct_affine/preset";
static const gchar scaling_key[] = "/module/correct_affine/scaling";
static const gchar zoom_key[] = "/module/correct_affine/zoom";
@@ -1530,10 +1481,12 @@ affcor_sanitize_args(AffcorArgs *args)
{
args->interp = gwy_enum_sanitize_value(args->interp,
GWY_TYPE_INTERPOLATION_TYPE);
- args->scaling = MIN(args->scaling, SCALING_PRESERVE_X);
+ args->scaling = MIN(args->scaling, GWY_AFFINE_SCALING_PRESERVE_X);
args->preset = CLAMP(args->preset,
USER_DEFINED_LATTICE,
(gint)G_N_ELEMENTS(lattice_presets)-1);
+ args->fix_hacf = !!args->fix_hacf;
+ args->distribute = !!args->distribute;
if (args->zoom != ZOOM_1 && args->zoom != ZOOM_4 && args->zoom != ZOOM_16)
args->zoom = affcor_defaults.zoom;
@@ -1576,6 +1529,9 @@ affcor_load_args(GwyContainer *container,
gwy_container_gis_enum_by_name(container, scaling_key, &args->scaling);
gwy_container_gis_int32_by_name(container, preset_key, &args->preset);
gwy_container_gis_enum_by_name(container, zoom_key, &args->zoom);
+ gwy_container_gis_boolean_by_name(container, fix_hacf_key, &args->fix_hacf);
+ gwy_container_gis_boolean_by_name(container, distribute_key,
+ &args->distribute);
affcor_sanitize_args(args);
}
@@ -1593,6 +1549,9 @@ affcor_save_args(GwyContainer *container,
gwy_container_set_enum_by_name(container, scaling_key, args->scaling);
gwy_container_set_int32_by_name(container, preset_key, args->preset);
gwy_container_set_enum_by_name(container, zoom_key, args->zoom);
+ gwy_container_set_boolean_by_name(container, fix_hacf_key, args->fix_hacf);
+ gwy_container_set_boolean_by_name(container, distribute_key,
+ args->distribute);
}
/* vim: set cin et ts=4 sw=4 cino=>1s,e0,n0,f0,{0,}0,^0,\:1s,=0,g1s,h0,t0,+1s,c3,(0,u0 : */
diff --git a/modules/process/crosscor.c b/modules/process/crosscor.c
index 4617824..2790168 100644
--- a/modules/process/crosscor.c
+++ b/modules/process/crosscor.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: crosscor.c 19089 2016-10-16 12:47:38Z yeti-dn $
+ * @(#) $Id: crosscor.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2004 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -156,12 +156,12 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Calculates cross-correlation of two data fields."),
"Petr Klapetek <klapetek at gwyddion.net>",
- "1.10",
+ "1.11",
"David Nečas (Yeti) & Petr Klapetek",
"2004",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, crosscor)
static gboolean
module_register(void)
@@ -204,7 +204,7 @@ static gboolean
crosscor_dialog(CrosscorArgs *args)
{
CrosscorControls controls;
- GtkWidget *dialog, *table, *label, *combo, *button, *spin;
+ GtkWidget *dialog, *table, *label, *combo, *button;
GwyDataChooser *chooser;
gint row, response;
gboolean ok = FALSE;
@@ -218,7 +218,7 @@ crosscor_dialog(CrosscorArgs *args)
gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK);
gwy_help_add_to_proc_dialog(GTK_DIALOG(dialog), GWY_HELP_DEFAULT);
- table = gtk_table_new(9, 4, FALSE);
+ table = gtk_table_new(9, 3, FALSE);
gtk_table_set_row_spacings(GTK_TABLE(table), 2);
gtk_table_set_col_spacings(GTK_TABLE(table), 6);
gtk_container_set_border_width(GTK_CONTAINER(table), 4);
@@ -235,113 +235,90 @@ crosscor_dialog(CrosscorArgs *args)
g_signal_connect(chooser, "changed",
G_CALLBACK(crosscor_data_changed), &args->op2);
crosscor_data_changed(chooser, &args->op2);
- gwy_table_attach_hscale(table, row, _("Co_rrelate with:"), NULL,
- GTK_OBJECT(chooser), GWY_HSCALE_WIDGET);
- gtk_table_set_row_spacing(GTK_TABLE(table), row, 8);
+ gwy_table_attach_adjbar(table, row, _("Co_rrelate with:"), NULL,
+ GTK_OBJECT(chooser), GWY_HSCALE_WIDGET_NO_EXPAND);
row++;
/* Search size */
+ gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
label = gtk_label_new(_("Search size"));
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_table_attach(GTK_TABLE(table), label, 0, 4, row, row+1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ gtk_table_attach(GTK_TABLE(table), label, 0, 2, row, row+1,
+ GTK_FILL, 0, 0, 0);
row++;
controls.search_area_x = gtk_adjustment_new(args->search_x,
0.0, 200.0, 1, 5, 0);
- gwy_table_attach_hscale(table, row, _("_Width:"), "px",
- controls.search_area_x, 0);
-
+ gwy_table_attach_adjbar(table, row, _("_Width:"), _("px"),
+ controls.search_area_x, GWY_HSCALE_SQRT);
g_signal_connect(controls.search_area_x, "value-changed",
- G_CALLBACK(crosscor_update_areas_cb),
- &controls);
-
+ G_CALLBACK(crosscor_update_areas_cb), &controls);
row++;
controls.search_area_y = gtk_adjustment_new(args->search_y,
0.0, 200.0, 1, 5, 0);
- gwy_table_attach_hscale(table, row, _("H_eight:"), "px",
- controls.search_area_y, 0);
- gtk_table_set_row_spacing(GTK_TABLE(table), row, 8);
+ gwy_table_attach_adjbar(table, row, _("H_eight:"), _("px"),
+ controls.search_area_y, GWY_HSCALE_SQRT);
g_signal_connect(controls.search_area_y, "value-changed",
- G_CALLBACK(crosscor_update_areas_cb),
- &controls);
-
+ G_CALLBACK(crosscor_update_areas_cb), &controls);
row++;
- label = gtk_label_new(_("Global offset of 2nd channel"));
- gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_table_attach(GTK_TABLE(table), label, 0, 2, row, row+1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
-
+ gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
button = gtk_button_new_with_mnemonic(_("_Guess"));
- gtk_table_attach(GTK_TABLE(table), button, 2, 4, row, row+1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ gwy_table_attach_adjbar(table, row, _("Global offset of 2nd channel"), NULL,
+ GTK_OBJECT(button), GWY_HSCALE_WIDGET_NO_EXPAND);
g_signal_connect_swapped(button, "clicked",
- G_CALLBACK(guess_offsets), &controls);
-
-
+ G_CALLBACK(guess_offsets), &controls);
row++;
-
controls.search_area_xoffset = gtk_adjustment_new(args->search_xoffset,
-200.0, 200.0, 1, 5, 0);
- gwy_table_attach_hscale(table, row, _("_X offset:"), "px",
- controls.search_area_xoffset, 0);
-
+ gwy_table_attach_adjbar(table, row, _("_X offset:"), _("px"),
+ controls.search_area_xoffset, GWY_HSCALE_SQRT);
g_signal_connect(controls.search_area_xoffset, "value-changed",
- G_CALLBACK(crosscor_update_areas_cb),
- &controls);
-
+ G_CALLBACK(crosscor_update_areas_cb), &controls);
row++;
controls.search_area_yoffset = gtk_adjustment_new(args->search_yoffset,
-200.0, 200.0, 1, 5, 0);
- gwy_table_attach_hscale(table, row, _("_Y offset:"), "px",
- controls.search_area_yoffset, 0);
- gtk_table_set_row_spacing(GTK_TABLE(table), row, 8);
+ gwy_table_attach_adjbar(table, row, _("_Y offset:"), _("px"),
+ controls.search_area_yoffset, GWY_HSCALE_SQRT);
g_signal_connect(controls.search_area_yoffset, "value-changed",
- G_CALLBACK(crosscor_update_areas_cb),
- &controls);
-
+ G_CALLBACK(crosscor_update_areas_cb), &controls);
row++;
-
/* Window size */
+ gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
label = gtk_label_new(_("Window size"));
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_table_attach(GTK_TABLE(table), label, 0, 4, row, row+1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ gtk_table_attach(GTK_TABLE(table), label, 0, 2, row, row+1,
+ GTK_FILL, 0, 0, 0);
row++;
controls.window_area_x = gtk_adjustment_new(args->window_x,
0.0, 100.0, 1, 5, 0);
- gwy_table_attach_hscale(table, row, _("W_idth:"), "px",
- controls.window_area_x, 0);
+ gwy_table_attach_adjbar(table, row, _("W_idth:"), _("px"),
+ controls.window_area_x, GWY_HSCALE_SQRT);
g_signal_connect(controls.window_area_x, "value-changed",
- G_CALLBACK(crosscor_update_areas_cb),
- &controls);
-
+ G_CALLBACK(crosscor_update_areas_cb), &controls);
row++;
controls.window_area_y = gtk_adjustment_new(args->window_y,
0.0, 100.0, 1, 5, 0);
- gwy_table_attach_hscale(table, row, _("Hei_ght:"), "px",
- controls.window_area_y, 0);
- gtk_table_set_row_spacing(GTK_TABLE(table), row, 8);
+ gwy_table_attach_adjbar(table, row, _("Hei_ght:"), _("px"),
+ controls.window_area_y, GWY_HSCALE_SQRT);
g_signal_connect(controls.window_area_y, "value-changed",
- G_CALLBACK(crosscor_update_areas_cb),
- &controls);
+ G_CALLBACK(crosscor_update_areas_cb), &controls);
row++;
-
+ gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
controls.window
= gwy_enum_combo_box_new(gwy_windowing_type_get_enum(), -1,
G_CALLBACK(gwy_enum_combo_box_update_int),
&args->window, args->window, TRUE);
- gwy_table_attach_hscale(table, row, _("_Windowing type:"), NULL,
+ gwy_table_attach_adjbar(table, row, _("_Windowing type:"), NULL,
GTK_OBJECT(controls.window),
- GWY_HSCALE_WIDGET);
+ GWY_HSCALE_WIDGET_NO_EXPAND);
row++;
/* Result */
@@ -354,15 +331,15 @@ crosscor_dialog(CrosscorArgs *args)
_("Angle"), GWY_CROSSCOR_DIR,
_("Score"), GWY_CROSSCOR_SCORE,
NULL);
- gwy_table_attach_hscale(table, row, _("Output _type:"), NULL,
- GTK_OBJECT(combo), GWY_HSCALE_WIDGET);
+ gwy_table_attach_adjbar(table, row, _("Output _type:"), NULL,
+ GTK_OBJECT(combo), GWY_HSCALE_WIDGET_NO_EXPAND);
row++;
/* Do mask of thresholds */
controls.add_ls_mask = gtk_check_button_new_with_mnemonic
(_("Add _low score results mask"));
- gtk_table_attach(GTK_TABLE(table), controls.add_ls_mask, 0, 4, row, row+1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ gtk_table_attach(GTK_TABLE(table), controls.add_ls_mask, 0, 2, row, row+1,
+ GTK_FILL, 0, 0, 0);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.add_ls_mask),
args->add_ls_mask);
g_signal_connect(controls.add_ls_mask, "toggled",
@@ -371,16 +348,17 @@ crosscor_dialog(CrosscorArgs *args)
controls.threshold = gtk_adjustment_new(args->threshold,
-1, 1, 0.005, 0.05, 0);
- gwy_table_attach_hscale(table, row, _("T_hreshold:"), NULL,
- controls.threshold, 0);
+ gwy_table_attach_adjbar(table, row, _("T_hreshold:"), NULL,
+ controls.threshold, GWY_HSCALE_LINEAR);
gwy_table_hscale_set_sensitive(controls.threshold, args->add_ls_mask);
row++;
/* Allow multiple channel cross-correlation */
+ gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
controls.multiple = gtk_check_button_new_with_mnemonic
(_("Multichannel cross-corelation"));
- gtk_table_attach(GTK_TABLE(table), controls.multiple, 0, 4, row, row+1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ gtk_table_attach(GTK_TABLE(table), controls.multiple, 0, 2, row, row+1,
+ GTK_FILL, 0, 0, 0);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.multiple),
args->multiple);
g_signal_connect(controls.multiple, "toggled",
@@ -397,11 +375,10 @@ crosscor_dialog(CrosscorArgs *args)
g_signal_connect(controls.chooser_op3, "changed",
G_CALLBACK(crosscor_data_changed), &args->op3);
crosscor_data_changed(chooser, &args->op3);
- gwy_table_attach_hscale(table, row, _("Second _source data:"), NULL,
- GTK_OBJECT(controls.chooser_op3), GWY_HSCALE_WIDGET);
- gtk_table_set_row_spacing(GTK_TABLE(table), row, 8);
+ gwy_table_attach_adjbar(table, row, _("Second _source data:"), NULL,
+ GTK_OBJECT(controls.chooser_op3),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
gtk_widget_set_sensitive(controls.chooser_op3, args->multiple);
-
row++;
/* Second set to correlate with: second data */
@@ -414,60 +391,56 @@ crosscor_dialog(CrosscorArgs *args)
g_signal_connect(controls.chooser_op4, "changed",
G_CALLBACK(crosscor_data_changed), &args->op4);
crosscor_data_changed(chooser, &args->op4);
- gwy_table_attach_hscale(table, row, _("Correlate with:"), NULL,
- GTK_OBJECT(controls.chooser_op4), GWY_HSCALE_WIDGET);
- gtk_table_set_row_spacing(GTK_TABLE(table), row, 8);
+ gwy_table_attach_adjbar(table, row, _("Correlate with:"), NULL,
+ GTK_OBJECT(controls.chooser_op4),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
gtk_widget_set_sensitive(controls.chooser_op4, args->multiple);
row++;
/*postprocessing*/
+ gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
label = gtk_label_new(_("Postprocess:"));
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_table_attach(GTK_TABLE(table), label, 0, 4, row, row+1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ gtk_table_attach(GTK_TABLE(table), label, 0, 2, row, row+1,
+ GTK_FILL, 0, 0, 0);
row++;
- controls.gaussian = gtk_check_button_new_with_mnemonic
- (_("Apply Ga_ussian filter of width: "));
- gtk_table_attach(GTK_TABLE(table), controls.gaussian, 0, 3, row, row+1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ controls.gaussian_width = gtk_adjustment_new(args->gaussian_width,
+ 2, 100, 1, 5, 0);
+ gwy_table_attach_adjbar(table, row,
+ _("Apply Ga_ussian filter of width:"), NULL,
+ controls.gaussian_width,
+ GWY_HSCALE_CHECK | GWY_HSCALE_SQRT);
+ controls.gaussian = gwy_table_hscale_get_check(controls.gaussian_width);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.gaussian),
args->gaussian);
g_signal_connect(controls.gaussian, "toggled",
G_CALLBACK(gaussian_changed_cb), &controls);
-
- controls.gaussian_width = gtk_adjustment_new(args->gaussian_width, 2, 100, 1, 5, 0);
- spin = gtk_spin_button_new(GTK_ADJUSTMENT(controls.gaussian_width), 1, 2);
g_signal_connect(controls.gaussian_width, "value-changed",
G_CALLBACK(gaussian_width_changed_cb), &controls);
-
- gtk_table_attach(GTK_TABLE(table), spin, 3, 4, row, row+1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
-
-
row++;
- controls.extend = gtk_check_button_new_with_mnemonic
- (_("Extend results to borders"));
- gtk_table_attach(GTK_TABLE(table), controls.extend, 0, 4, row, row+1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ controls.extend
+ = gtk_check_button_new_with_label(_("Extend results to borders"));
+ gtk_table_attach(GTK_TABLE(table), controls.extend, 0, 2, row, row+1,
+ GTK_FILL, 0, 0, 0);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.extend),
args->extend);
g_signal_connect(controls.extend, "toggled",
G_CALLBACK(extend_changed_cb), &controls);
row++;
- controls.correct = gtk_check_button_new_with_mnemonic
- (_("Create corrected data from 2nd channel"));
- gtk_table_attach(GTK_TABLE(table), controls.correct, 0, 4, row, row+1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ controls.correct = gtk_check_button_new_with_label(_("Create corrected "
+ "data from 2nd "
+ "channel"));
+ gtk_table_attach(GTK_TABLE(table), controls.correct, 0, 2, row, row+1,
+ GTK_FILL, 0, 0, 0);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.correct),
args->correct);
g_signal_connect(controls.correct, "toggled",
G_CALLBACK(correct_changed_cb), &controls);
row++;
-
gtk_widget_show_all(dialog);
do {
diff --git a/modules/process/curvature.c b/modules/process/curvature.c
index 0201682..856783c 100644
--- a/modules/process/curvature.c
+++ b/modules/process/curvature.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: curvature.c 18537 2016-03-28 18:11:19Z yeti-dn $
+ * @(#) $Id: curvature.c 20064 2017-07-11 12:06:26Z yeti-dn $
* Copyright (C) 2009-2015 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.net.
*
@@ -67,7 +67,6 @@ typedef struct {
GtkWidget *set_selection;
GtkWidget *plot_graph;
GtkWidget *target_graph;
- GtkWidget *target_hbox;
GtkWidget *view;
GtkWidget *graph;
GtkWidget *warning;
@@ -162,12 +161,12 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Calculates overall curvature."),
"Yeti <yeti at gwyddion.net>",
- "1.3",
+ "1.5",
"David Nečas (Yeti)",
"2009",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, curvature)
static gboolean
module_register(void)
@@ -395,6 +394,9 @@ curvature_calculate(GwyDataField *dfield,
xreal, yreal, i1 + i, i2 + i);
}
+ params[PARAM_X0] += gwy_data_field_get_xoffset(dfield);
+ params[PARAM_Y0] += gwy_data_field_get_yoffset(dfield);
+
return ok;
}
@@ -594,7 +596,7 @@ curvature_dialog(CurvatureArgs *args,
GwyDataField *mfield,
gint id)
{
- GtkWidget *dialog, *table, *label, *hbox, *vbox, *treeview, *button, *hbox2;
+ GtkWidget *dialog, *table, *label, *hbox, *vbox, *treeview, *button;
GwyDataChooser *chooser;
GtkTreeSelection *selection;
GtkTreeViewColumn *column;
@@ -644,7 +646,7 @@ curvature_dialog(CurvatureArgs *args,
g_object_set(controls.selection, "max-objects", 2, NULL);
gtk_box_pack_start(GTK_BOX(vbox), controls.view, FALSE, FALSE, 4);
- table = gtk_table_new(5 + (mfield ? 4 : 0), 4, FALSE);
+ table = gtk_table_new(5 + (mfield ? 4 : 0), 3, FALSE);
gtk_table_set_row_spacings(GTK_TABLE(table), 2);
gtk_table_set_col_spacings(GTK_TABLE(table), 6);
gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0);
@@ -653,13 +655,13 @@ curvature_dialog(CurvatureArgs *args,
label = gwy_label_new_header(_("Output Type"));
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
gtk_table_attach(GTK_TABLE(table), label,
- 0, 4, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
controls.set_selection
= gtk_check_button_new_with_mnemonic(_("_Set selection"));
gtk_table_attach(GTK_TABLE(table), controls.set_selection,
- 0, 4, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.set_selection),
args->set_selection);
g_signal_connect(controls.set_selection, "toggled",
@@ -669,7 +671,7 @@ curvature_dialog(CurvatureArgs *args,
controls.plot_graph
= gtk_check_button_new_with_mnemonic(_("_Plot graph"));
gtk_table_attach(GTK_TABLE(table), controls.plot_graph,
- 0, 4, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.plot_graph),
args->plot_graph);
g_signal_connect(controls.plot_graph, "toggled",
@@ -677,15 +679,6 @@ curvature_dialog(CurvatureArgs *args,
row++;
gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
- controls.target_hbox = hbox2 = gtk_hbox_new(FALSE, 6);
- gtk_widget_set_sensitive(controls.target_hbox, args->plot_graph);
- gtk_table_attach(GTK_TABLE(table), hbox2,
- 0, 4, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
-
- label = gtk_label_new_with_mnemonic(_("Target _graph:"));
- gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_box_pack_start(GTK_BOX(hbox2), label, FALSE, FALSE, 0);
-
controls.target_graph = gwy_data_chooser_new_graphs();
chooser = GWY_DATA_CHOOSER(controls.target_graph);
gwy_data_chooser_set_none(chooser, _("New graph"));
@@ -693,8 +686,11 @@ curvature_dialog(CurvatureArgs *args,
gwy_data_chooser_set_filter(chooser, filter_target_graphs, &controls, NULL);
gwy_data_chooser_set_active_id(chooser, &args->target_graph);
gwy_data_chooser_get_active_id(chooser, &args->target_graph);
- gtk_label_set_mnemonic_widget(GTK_LABEL(label), controls.target_graph);
- gtk_box_pack_end(GTK_BOX(hbox2), controls.target_graph, FALSE, FALSE, 0);
+ gwy_table_attach_adjbar(GTK_WIDGET(table), row, _("Target _graph:"), NULL,
+ GTK_OBJECT(controls.target_graph),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
+ gwy_table_hscale_set_sensitive(GTK_OBJECT(controls.target_graph),
+ args->plot_graph);
g_signal_connect_swapped(controls.target_graph, "changed",
G_CALLBACK(target_graph_changed), &controls);
row++;
@@ -726,6 +722,7 @@ curvature_dialog(CurvatureArgs *args,
gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 0);
controls.graph = gwy_graph_new(controls.gmodel);
+ gwy_graph_enable_user_input(GWY_GRAPH(controls.graph), FALSE);
gtk_widget_set_size_request(controls.graph, 320, 260);
g_object_unref(controls.gmodel);
@@ -858,7 +855,8 @@ curvature_plot_graph_changed(GtkToggleButton *button,
CurvatureArgs *args = controls->args;
args->plot_graph = gtk_toggle_button_get_active(button);
- gtk_widget_set_sensitive(controls->target_hbox, args->plot_graph);
+ gwy_table_hscale_set_sensitive(GTK_OBJECT(controls->target_graph),
+ args->plot_graph);
}
static void
diff --git a/modules/process/cwt.c b/modules/process/cwt.c
index 59124e4..d0c9092 100644
--- a/modules/process/cwt.c
+++ b/modules/process/cwt.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: cwt.c 18537 2016-03-28 18:11:19Z yeti-dn $
+ * @(#) $Id: cwt.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2003 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -65,12 +65,12 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Two-dimensional CWT (Continuous Wavelet Transform)."),
"Petr Klapetek <klapetek at gwyddion.net>",
- "1.5",
+ "1.6",
"David Nečas (Yeti) & Petr Klapetek",
"2003",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, cwt)
static gboolean
module_register(void)
@@ -129,7 +129,7 @@ cwt_dialog(CWTArgs *args)
{
GtkWidget *dialog, *table;
CWTControls controls;
- gint response;
+ gint response, row;
dialog = gtk_dialog_new_with_buttons(_("2D CWT"), NULL, 0,
_("_Reset"), RESPONSE_RESET,
@@ -139,24 +139,27 @@ cwt_dialog(CWTArgs *args)
gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK);
gwy_help_add_to_proc_dialog(GTK_DIALOG(dialog), GWY_HELP_DEFAULT);
- table = gtk_table_new(4, 4, FALSE);
+ table = gtk_table_new(2, 3, FALSE);
gtk_table_set_row_spacings(GTK_TABLE(table), 2);
gtk_table_set_col_spacings(GTK_TABLE(table), 6);
gtk_container_set_border_width(GTK_CONTAINER(table), 4);
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), table,
FALSE, FALSE, 4);
-
+ row = 0;
controls.scale = gtk_adjustment_new(args->scale, 0.0, 1000.0, 1, 10, 0);
- gwy_table_attach_spinbutton(table, 1, _("_Scale:"), _("pixels"),
- controls.scale);
+ gwy_table_attach_adjbar(table, row, _("_Scale:"), _("px"),
+ controls.scale, GWY_HSCALE_DEFAULT);
+ row++;
controls.wavelet
= gwy_enum_combo_box_new(gwy_2d_cwt_wavelet_type_get_enum(), -1,
G_CALLBACK(gwy_enum_combo_box_update_int),
&args->wavelet, args->wavelet, TRUE);
- gwy_table_attach_row(table, 3, _("_Wavelet type:"), "",
- controls.wavelet);
+ gwy_table_attach_adjbar(table, row, _("_Wavelet type:"), NULL,
+ GTK_OBJECT(controls.wavelet),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
+ row++;
gtk_widget_show_all(dialog);
do {
diff --git a/modules/process/deposit_synth.c b/modules/process/deposit_synth.c
index bda0056..6ffad2b 100644
--- a/modules/process/deposit_synth.c
+++ b/modules/process/deposit_synth.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: deposit_synth.c 19071 2016-10-14 09:02:41Z yeti-dn $
+ * @(#) $Id: deposit_synth.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2007,2009,2010 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -169,19 +169,19 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Generates particles using simple dynamical model"),
"Petr Klapetek <klapetek at gwyddion.net>",
- "1.4",
+ "1.5",
"Petr Klapetek",
"2010",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, deposit_synth)
static gboolean
module_register(void)
{
gwy_process_func_register("deposit_synth",
(GwyProcessFunc)&deposit_synth,
- N_("/S_ynthetic/_Particles..."),
+ N_("/S_ynthetic/_Deposition/_Particles..."),
GWY_STOCK_SYNTHETIC_PARTICLES,
DEPOSIT_SYNTH_RUN_MODES,
0,
@@ -339,6 +339,7 @@ deposit_synth_dialog(DepositSynthArgs *args,
gboolean finished;
gint response;
gint row, newid;
+ gdouble power10;
gwy_clear(&controls, 1);
controls.in_init = TRUE;
@@ -410,11 +411,13 @@ deposit_synth_dialog(DepositSynthArgs *args,
gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
gwy_dimensions_get_widget(controls.dims),
gtk_label_new(_("Dimensions")));
- if (controls.dims->add)
+ if (controls.dims->add) {
g_signal_connect_swapped(controls.dims->add, "toggled",
- G_CALLBACK(deposit_synth_invalidate), &controls);
+ G_CALLBACK(deposit_synth_invalidate),
+ &controls);
+ }
- table = gtk_table_new(12 + (dfield_template ? 1 : 0), 5, FALSE);
+ table = gtk_table_new(12 + (dfield_template ? 1 : 0), 3, FALSE);
gtk_table_set_row_spacings(GTK_TABLE(table), 2);
gtk_table_set_col_spacings(GTK_TABLE(table), 6);
gtk_container_set_border_width(GTK_CONTAINER(table), 4);
@@ -422,10 +425,12 @@ deposit_synth_dialog(DepositSynthArgs *args,
gtk_label_new(_("Generator")));
row = 0;
- controls.size = gtk_adjustment_new(args->size/pow10(controls.dims->args->xypow10),
- 0, 100.0, 0.1, 1.0, 0);
- spin = gwy_table_attach_hscale(table, row, _("Particle r_adius:"), controls.dims->args->xyunits,
- controls.size, GWY_HSCALE_DEFAULT);
+ power10 = pow10(controls.dims->args->xypow10);
+ controls.size = gtk_adjustment_new(args->size/power10,
+ 0, 100.0, 0.1, 1.0, 0);
+ spin = gwy_table_attach_adjbar(table, row, _("Particle r_adius:"),
+ controls.dims->args->xyunits,
+ controls.size, GWY_HSCALE_SQRT);
gtk_spin_button_set_snap_to_ticks(GTK_SPIN_BUTTON(spin), FALSE);
gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 4);
controls.size_units = gwy_table_hscale_get_units(controls.size);
@@ -433,10 +438,11 @@ deposit_synth_dialog(DepositSynthArgs *args,
G_CALLBACK(size_changed), &controls);
row++;
- controls.width = gtk_adjustment_new(args->width/pow10(controls.dims->args->xypow10),
+ controls.width = gtk_adjustment_new(args->width/power10,
0, 100.0, 0.1, 1.0, 0);
- spin = gwy_table_attach_hscale(table, row, _("Distribution _width:"), controls.dims->args->xyunits,
- controls.width, GWY_HSCALE_DEFAULT);
+ spin = gwy_table_attach_adjbar(table, row, _("Distribution _width:"),
+ controls.dims->args->xyunits,
+ controls.width, GWY_HSCALE_SQRT);
gtk_spin_button_set_snap_to_ticks(GTK_SPIN_BUTTON(spin), FALSE);
gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 4);
controls.width_units = gwy_table_hscale_get_units(controls.width);
@@ -446,31 +452,25 @@ deposit_synth_dialog(DepositSynthArgs *args,
controls.coverage = gtk_adjustment_new(args->coverage,
0.0, 100, 0.1, 1, 0);
- gwy_table_attach_hscale(table, row, _("Surface _coverage:"),
- "%",
- controls.coverage, GWY_HSCALE_DEFAULT);
+ gwy_table_attach_adjbar(table, row, _("Co_verage:"), "%",
+ controls.coverage, GWY_HSCALE_LINEAR);
g_signal_connect_swapped(controls.coverage, "value-changed",
G_CALLBACK(coverage_changed), &controls);
row++;
- controls.revise = gtk_adjustment_new(args->revise,
- 0.0, 10000, 1, 10, 0);
- gwy_table_attach_hscale(table, row, _("_Relax steps:"),
- "",
- controls.revise, GWY_HSCALE_DEFAULT);
+ controls.revise = gtk_adjustment_new(args->revise, 0.0, 10000, 1, 10, 0);
+ gwy_table_attach_adjbar(table, row, _("_Relax steps:"), NULL,
+ controls.revise, GWY_HSCALE_SQRT);
g_signal_connect_swapped(controls.revise, "value-changed",
G_CALLBACK(revise_changed), &controls);
row++;
-
- controls.message = gtk_label_new("");
+ controls.message = gtk_label_new(NULL);
gtk_misc_set_alignment(GTK_MISC(controls.message), 0.0, 0.5);
gtk_table_attach(GTK_TABLE(table), controls.message,
0, 4, row, row+1, GTK_FILL, 0, 0, 0);
row++;
-
-
gtk_widget_show_all(dialog);
controls.in_init = FALSE;
/* Must be done when widgets are shown, see GtkNotebook docs */
@@ -602,7 +602,8 @@ update_controls(DepositSynthControls *controls,
gtk_adjustment_set_value(GTK_ADJUSTMENT(controls->seed), args->seed);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls->randomize),
args->randomize);
- gtk_adjustment_set_value(GTK_ADJUSTMENT(controls->size), args->size/pow10(controls->dims->args->xypow10));
+ gtk_adjustment_set_value(GTK_ADJUSTMENT(controls->size),
+ args->size/pow10(controls->dims->args->xypow10));
gtk_adjustment_set_value(GTK_ADJUSTMENT(controls->width),
args->width/pow10(controls->dims->args->xypow10));
gtk_adjustment_set_value(GTK_ADJUSTMENT(controls->coverage),
@@ -694,14 +695,11 @@ page_switched(DepositSynthControls *controls,
GwyDimensions *dims = controls->dims;
if (controls->size_units)
- gtk_label_set_markup(GTK_LABEL(controls->size_units),
- dims->xyvf->units);
+ gtk_label_set_markup(GTK_LABEL(controls->size_units),
+ dims->xyvf->units);
if (controls->width_units)
- gtk_label_set_markup(GTK_LABEL(controls->width_units),
- dims->xyvf->units);
-
- //update_size_value(controls);
- //update_width_value(controls);
+ gtk_label_set_markup(GTK_LABEL(controls->width_units),
+ dims->xyvf->units);
}
}
@@ -724,36 +722,38 @@ static void
size_changed(DepositSynthControls *controls,
GtkAdjustment *adj)
{
- controls->args->size = gtk_adjustment_get_value(adj)*pow10(controls->dims->args->xypow10);
- deposit_synth_invalidate(controls);
+ gdouble power10 = pow10(controls->dims->args->xypow10);
+ controls->args->size = gtk_adjustment_get_value(adj)*power10;
+ deposit_synth_invalidate(controls);
}
+
static void
width_changed(DepositSynthControls *controls,
GtkAdjustment *adj)
{
- controls->args->width = gtk_adjustment_get_value(adj)*pow10(controls->dims->args->xypow10);
- deposit_synth_invalidate(controls);
+ gdouble power10 = pow10(controls->dims->args->xypow10);
+ controls->args->width = gtk_adjustment_get_value(adj)*power10;
+ deposit_synth_invalidate(controls);
}
+
static void
coverage_changed(DepositSynthControls *controls,
GtkAdjustment *adj)
{
controls->args->coverage = gtk_adjustment_get_value(adj);
deposit_synth_invalidate(controls);
-
}
+
static void
revise_changed(DepositSynthControls *controls,
GtkAdjustment *adj)
{
controls->args->revise = gtk_adjustment_get_value(adj);
deposit_synth_invalidate(controls);
-
}
-
static void
deposit_synth_invalidate(DepositSynthControls *controls)
{
@@ -776,7 +776,6 @@ preview_gsource(gpointer user_data)
return FALSE;
}
-
static void
preview(DepositSynthControls *controls)
{
diff --git a/modules/process/diff_synth.c b/modules/process/diff_synth.c
index b03d9fd..643e038 100644
--- a/modules/process/diff_synth.c
+++ b/modules/process/diff_synth.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: diff_synth.c 19044 2016-10-08 19:10:46Z yeti-dn $
+ * @(#) $Id: diff_synth.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2014 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -218,14 +218,14 @@ static GwyModuleInfo module_info = {
"2014",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, diff_synth)
static gboolean
module_register(void)
{
gwy_process_func_register("diff_synth",
(GwyProcessFunc)&diff_synth,
- N_("/S_ynthetic/_Diffusion..."),
+ N_("/S_ynthetic/_Deposition/_Diffusion..."),
GWY_STOCK_SYNTHETIC_DIFFUSION,
DIFF_SYNTH_RUN_MODES,
0,
@@ -476,7 +476,7 @@ diff_synth_dialog(DiffSynthArgs *args,
gwy_dimensions_get_widget(controls.dims),
gtk_label_new(_("Dimensions")));
- table = gtk_table_new(15 + (dfield_template ? 1 : 0), 4, FALSE);
+ table = gtk_table_new(15 + (dfield_template ? 1 : 0), 3, FALSE);
/* This is used only for synt.h helpers. */
controls.table = GTK_TABLE(table);
gtk_table_set_row_spacings(GTK_TABLE(table), 2);
@@ -489,7 +489,7 @@ diff_synth_dialog(DiffSynthArgs *args,
controls.coverage = gtk_adjustment_new(args->coverage,
0.0, 16.0, 0.001, 1.0, 0);
g_object_set_data(G_OBJECT(controls.coverage), "target", &args->coverage);
- gwy_table_attach_hscale(table, row, _("Co_verage:"), NULL,
+ gwy_table_attach_adjbar(table, row, _("Co_verage:"), NULL,
controls.coverage, GWY_HSCALE_SQRT);
g_signal_connect_swapped(controls.coverage, "value-changed",
G_CALLBACK(gwy_synth_double_changed), &controls);
@@ -497,8 +497,8 @@ diff_synth_dialog(DiffSynthArgs *args,
controls.flux = gtk_adjustment_new(args->flux, -13.0, -3.0, 0.01, 1.0, 0);
g_object_set_data(G_OBJECT(controls.flux), "target", &args->flux);
- gwy_table_attach_hscale(table, row, _("_Flux:"), "log<sub>10</sub>",
- controls.flux, GWY_HSCALE_DEFAULT);
+ gwy_table_attach_adjbar(table, row, _("_Flux:"), "log<sub>10</sub>",
+ controls.flux, GWY_HSCALE_LINEAR);
g_signal_connect_swapped(controls.flux, "value-changed",
G_CALLBACK(gwy_synth_double_changed), &controls);
row++;
@@ -509,25 +509,24 @@ diff_synth_dialog(DiffSynthArgs *args,
if (dfield_template) {
controls.height_init
- = gtk_button_new_with_mnemonic(_("_Like Current Channel"));
+ = gtk_button_new_with_mnemonic(_("_Like Current Image"));
g_signal_connect_swapped(controls.height_init, "clicked",
G_CALLBACK(height_init_clicked), &controls);
gtk_table_attach(GTK_TABLE(table), controls.height_init,
- 1, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
}
gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
-
label = gwy_label_new_header(_("Probabilities"));
- gtk_table_attach(GTK_TABLE(table), label, 0, 3, row, row+1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ gtk_table_attach(GTK_TABLE(table), label, 0, 2, row, row+1,
+ GTK_FILL, 0, 0, 0);
row++;
controls.p_stick = gtk_adjustment_new(args->p_stick,
0.0, 1.0, 0.0001, 0.1, 0);
g_object_set_data(G_OBJECT(controls.p_stick), "target", &args->p_stick);
- gwy_table_attach_hscale(table, row, _("_Sticking:"), NULL,
+ gwy_table_attach_adjbar(table, row, _("_Sticking:"), NULL,
controls.p_stick, GWY_HSCALE_SQRT);
g_signal_connect_swapped(controls.p_stick, "value-changed",
G_CALLBACK(gwy_synth_double_changed), &controls);
@@ -536,7 +535,7 @@ diff_synth_dialog(DiffSynthArgs *args,
controls.p_break = gtk_adjustment_new(args->p_break,
0.0, 1.0, 0.0001, 0.1, 0);
g_object_set_data(G_OBJECT(controls.p_break), "target", &args->p_break);
- gwy_table_attach_hscale(table, row, _("_Activation:"), NULL,
+ gwy_table_attach_adjbar(table, row, _("_Activation:"), NULL,
controls.p_break, GWY_HSCALE_SQRT);
g_signal_connect_swapped(controls.p_break, "value-changed",
G_CALLBACK(gwy_synth_double_changed), &controls);
@@ -545,14 +544,14 @@ diff_synth_dialog(DiffSynthArgs *args,
controls.schwoebel = gtk_adjustment_new(args->schwoebel,
-12.0, 0.0, 0.01, 1.0, 0);
g_object_set_data(G_OBJECT(controls.schwoebel), "target", &args->schwoebel);
- gwy_table_attach_hscale(table, row, _("Passing Sch_woebel:"),
+ gwy_table_attach_adjbar(table, row, _("Passing Sch_woebel:"),
"log<sub>10</sub>",
- controls.schwoebel, GWY_HSCALE_DEFAULT);
+ controls.schwoebel, GWY_HSCALE_LINEAR);
g_signal_connect_swapped(controls.schwoebel, "value-changed",
G_CALLBACK(gwy_synth_double_changed), &controls);
row++;
- table = gtk_table_new(1 + GRAPH_NFLAGS, 4, FALSE);
+ table = gtk_table_new(1 + GRAPH_NFLAGS, 3, FALSE);
/* This is used only for synt.h helpers. */
controls.table = GTK_TABLE(table);
gtk_table_set_row_spacings(GTK_TABLE(table), 2);
@@ -575,7 +574,7 @@ diff_synth_dialog(DiffSynthArgs *args,
toggle = GTK_TOGGLE_BUTTON(controls.graph_flags[i]);
gtk_toggle_button_set_active(toggle, args->graph_flags[i]);
gtk_table_attach(GTK_TABLE(table), controls.graph_flags[i],
- 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect(toggle, "toggled",
G_CALLBACK(gwy_synth_boolean_changed_silent),
&args->graph_flags[i]);
diff --git a/modules/process/dimensions.h b/modules/process/dimensions.h
index 434cad6..eb09a19 100644
--- a/modules/process/dimensions.h
+++ b/modules/process/dimensions.h
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: dimensions.h 18278 2016-02-13 16:57:55Z yeti-dn $
+ * @(#) $Id: dimensions.h 19907 2017-06-11 18:03:15Z yeti-dn $
* Copyright (C) 2009 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -37,7 +37,7 @@ typedef struct {
gchar *zunits;
gint xypow10;
gint zpow10;
- gboolean replace; /* do not create a new channel */
+ gboolean replace; /* do not create a new image */
gboolean add; /* starts from the current, but may create new */
} GwyDimensionArgs;
@@ -68,6 +68,9 @@ typedef struct {
GtkWidget *zunits;
GtkWidget *replace;
GtkWidget *add;
+ GtkWidget *units_label;
+ GtkWidget *unit_xy_label;
+ GtkWidget *unit_z_label;
gboolean in_update;
} GwyDimensions;
@@ -78,28 +81,19 @@ gwy_dimensions_make_res(GtkTable *table,
const gchar *name,
gint value)
{
- GtkWidget *label, *spin;
- GtkAdjustment *adj;
+ GtkWidget *spin;
GtkObject *obj;
- label = gtk_label_new_with_mnemonic(name);
- gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gwy_sensitivity_group_add_widget(sensgroup, label, GWY_DIMENSIONS_SENS);
- gtk_table_attach(table, label, 0, 1, row, row+1, GTK_FILL, 0, 0, 0);
-
obj = gtk_adjustment_new(value, 2, 32768, 1, 100, 0);
- adj = GTK_ADJUSTMENT(obj);
- spin = gtk_spin_button_new(adj, 0, 0);
- gtk_label_set_mnemonic_widget(GTK_LABEL(label), spin);
+ spin = gwy_table_attach_adjbar(GTK_WIDGET(table), row, name, _("px"),
+ obj, GWY_HSCALE_LOG);
gwy_sensitivity_group_add_widget(sensgroup, spin, GWY_DIMENSIONS_SENS);
- gtk_table_attach(table, spin, 1, 2, row, row+1, GTK_FILL, 0, 0, 0);
-
- label = gtk_label_new("px");
- gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gwy_sensitivity_group_add_widget(sensgroup, label, GWY_DIMENSIONS_SENS);
- gtk_table_attach(table, label, 2, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ gwy_sensitivity_group_add_widget(sensgroup, gwy_table_hscale_get_label(obj),
+ GWY_DIMENSIONS_SENS);
+ gwy_sensitivity_group_add_widget(sensgroup, gwy_table_hscale_get_units(obj),
+ GWY_DIMENSIONS_SENS);
- return adj;
+ return GTK_ADJUSTMENT(obj);
}
static GtkAdjustment*
@@ -111,29 +105,19 @@ gwy_dimensions_make_real(GtkTable *table,
const gchar *units,
GtkWidget **unitlab)
{
- GtkWidget *label, *spin;
- GtkAdjustment *adj;
+ GtkWidget *spin;
GtkObject *obj;
- label = gtk_label_new_with_mnemonic(name);
- gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gwy_sensitivity_group_add_widget(sensgroup, label, GWY_DIMENSIONS_SENS);
- gtk_table_attach(table, label, 0, 1, row, row+1, GTK_FILL, 0, 0, 0);
-
obj = gtk_adjustment_new(value, 0.001, 10000.0, 1, 100, 0);
- adj = GTK_ADJUSTMENT(obj);
- spin = gtk_spin_button_new(adj, 0, 3);
- gtk_label_set_mnemonic_widget(GTK_LABEL(label), spin);
+ spin = gwy_table_attach_adjbar(GTK_WIDGET(table), row, name, units,
+ obj, GWY_HSCALE_LOG);
gwy_sensitivity_group_add_widget(sensgroup, spin, GWY_DIMENSIONS_SENS);
- gtk_table_attach(table, spin, 1, 2, row, row+1, GTK_FILL, 0, 0, 0);
-
- *unitlab = gtk_label_new(units);
- gtk_label_set_use_markup(GTK_LABEL(*unitlab), TRUE);
- gtk_misc_set_alignment(GTK_MISC(*unitlab), 0.0, 0.5);
+ gwy_sensitivity_group_add_widget(sensgroup, gwy_table_hscale_get_label(obj),
+ GWY_DIMENSIONS_SENS);
+ *unitlab = gwy_table_hscale_get_units(obj);
gwy_sensitivity_group_add_widget(sensgroup, *unitlab, GWY_DIMENSIONS_SENS);
- gtk_table_attach(table, *unitlab, 2, 3, row, row+1, GTK_FILL, 0, 0, 0);
- return adj;
+ return GTK_ADJUSTMENT(obj);
}
static GtkWidget*
@@ -143,20 +127,18 @@ gwy_dimensions_make_units(GtkTable *table,
const gchar *name,
gint pwr,
GwySIUnit *siunit,
- GtkWidget **combo)
+ GtkWidget **combo,
+ GtkWidget **label)
{
- GtkWidget *label, *changer;
-
- label = gtk_label_new_with_mnemonic(name);
- gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gwy_sensitivity_group_add_widget(sensgroup, label, GWY_DIMENSIONS_SENS);
- gtk_table_attach(table, label, 0, 1, row, row+1, GTK_FILL, 0, 0, 0);
+ GtkWidget *changer;
*combo = gwy_combo_box_metric_unit_new(NULL, NULL,
pwr - 6, pwr + 6, siunit, pwr);
- gtk_label_set_mnemonic_widget(GTK_LABEL(label), *combo);
+ gwy_table_attach_adjbar(GTK_WIDGET(table), row, name, NULL,
+ GTK_OBJECT(*combo), GWY_HSCALE_WIDGET_NO_EXPAND);
gwy_sensitivity_group_add_widget(sensgroup, *combo, GWY_DIMENSIONS_SENS);
- gtk_table_attach(table, *combo, 1, 2, row, row+1, GTK_FILL, 0, 0, 0);
+ *label = gwy_table_hscale_get_label(GTK_OBJECT(*combo));
+ gwy_sensitivity_group_add_widget(sensgroup, *label, GWY_DIMENSIONS_SENS);
changer = gtk_button_new_with_label(gwy_sgettext("verb|Change"));
gwy_sensitivity_group_add_widget(sensgroup, changer, GWY_DIMENSIONS_SENS);
@@ -444,7 +426,7 @@ gwy_dimensions_new(GwyDimensionArgs *args,
/* Resolution */
label = gwy_label_new_header(_("Resolution"));
gwy_sensitivity_group_add_widget(sensgroup, label, GWY_DIMENSIONS_SENS);
- gtk_table_attach(table, label, 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ gtk_table_attach(table, label, 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
dims->xres = gwy_dimensions_make_res(table, sensgroup, row++,
@@ -459,14 +441,14 @@ gwy_dimensions_new(GwyDimensionArgs *args,
args->xres == args->yres);
gwy_sensitivity_group_add_widget(sensgroup, dims->xyreseq,
GWY_DIMENSIONS_SENS);
- gtk_table_attach(table, dims->xyreseq, 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ gtk_table_attach(table, dims->xyreseq, 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
gtk_table_set_row_spacing(table, row, 12);
row++;
/* Physical dimensions */
label = gwy_label_new_header(_("Physical Dimensions"));
gwy_sensitivity_group_add_widget(sensgroup, label, GWY_DIMENSIONS_SENS);
- gtk_table_attach(table, label, 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ gtk_table_attach(table, label, 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
dims->xreal = gwy_dimensions_make_real(table, sensgroup, row++,
@@ -480,30 +462,35 @@ gwy_dimensions_new(GwyDimensionArgs *args,
gtk_table_set_row_spacing(table, row-1, 12);
/* Units */
- label = gwy_label_new_header(_("Units"));
- gwy_sensitivity_group_add_widget(sensgroup, label, GWY_DIMENSIONS_SENS);
- gtk_table_attach(table, label, 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ dims->units_label = gwy_label_new_header(_("Units"));
+ gwy_sensitivity_group_add_widget(sensgroup, dims->units_label,
+ GWY_DIMENSIONS_SENS);
+ gtk_table_attach(table, dims->units_label, 0, 2, row, row+1,
+ GTK_FILL, 0, 0, 0);
row++;
dims->xyunits = gwy_dimensions_make_units(table, sensgroup, row++,
_("_Dimension units:"),
args->xypow10, dims->xysiunit,
- &dims->xypow10);
+ &dims->xypow10,
+ &dims->unit_xy_label);
dims->zunits = gwy_dimensions_make_units(table, sensgroup, row++,
_("_Value units:"),
args->zpow10, dims->zsiunit,
- &dims->zpow10);
+ &dims->zpow10,
+ &dims->unit_z_label);
/* Template */
if (dims->template_) {
gtk_table_set_row_spacing(table, row-1, 12);
- label = gwy_label_new_header(_("Current Channel"));
- gtk_table_attach(table, label, 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ label = gwy_label_new_header(_("Current Image"));
+ gtk_table_attach(table, label, 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
- button = gtk_button_new_with_mnemonic(_("_Take Dimensions from Current Channel"));
+ button = gtk_button_new_with_mnemonic(_("_Take Dimensions from "
+ "Current Image"));
gwy_sensitivity_group_add_widget(sensgroup, button,
GWY_DIMENSIONS_SENS);
gtk_table_attach(table, button, 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
@@ -512,19 +499,19 @@ gwy_dimensions_new(GwyDimensionArgs *args,
row++;
button = gtk_check_button_new_with_mnemonic(_("_Replace the current "
- "channel"));
+ "image"));
dims->replace = button;
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), args->replace);
- gtk_table_attach(table, button, 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ gtk_table_attach(table, button, 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect_swapped(button, "toggled",
G_CALLBACK(gwy_dimensions_replace), dims);
row++;
button = gtk_check_button_new_with_mnemonic(_("_Start from the current "
- "channel"));
+ "image"));
dims->add = button;
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), args->add);
- gtk_table_attach(table, button, 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ gtk_table_attach(table, button, 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect_swapped(button, "toggled",
G_CALLBACK(gwy_dimensions_add), dims);
row++;
diff --git a/modules/process/domain_synth.c b/modules/process/domain_synth.c
index 6b5e468..0bb778b 100644
--- a/modules/process/domain_synth.c
+++ b/modules/process/domain_synth.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: domain_synth.c 19044 2016-10-08 19:10:46Z yeti-dn $
+ * @(#) $Id: domain_synth.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2014 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -169,7 +169,7 @@ static GwyModuleInfo module_info = {
"2014",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, domain_synth)
static gboolean
module_register(void)
@@ -429,7 +429,7 @@ domain_synth_dialog(DomainSynthArgs *args,
gwy_dimensions_get_widget(controls.dims),
gtk_label_new(_("Dimensions")));
- table = gtk_table_new(12 + (dfield_template ? 1 : 0), 4, FALSE);
+ table = gtk_table_new(12 + (dfield_template ? 1 : 0), 3, FALSE);
controls.table = GTK_TABLE(table);
gtk_table_set_row_spacings(GTK_TABLE(table), 2);
gtk_table_set_col_spacings(GTK_TABLE(table), 6);
@@ -439,28 +439,28 @@ domain_synth_dialog(DomainSynthArgs *args,
row = 0;
controls.preview_quantity = preview_quantity_selector_new(&controls);
- gwy_table_attach_hscale(table, row, _("_Preview quantity:"), NULL,
+ gwy_table_attach_adjbar(table, row, _("_Preview quantity:"), NULL,
GTK_OBJECT(controls.preview_quantity),
- GWY_HSCALE_WIDGET);
+ GWY_HSCALE_WIDGET_NO_EXPAND);
row++;
gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
gtk_table_attach(GTK_TABLE(table),
gwy_label_new_header(_("Simulation Parameters")),
- 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
controls.niters = gtk_adjustment_new(args->niters, 1, 10000, 1, 10, 0);
g_object_set_data(G_OBJECT(controls.niters), "target", &args->niters);
- gwy_table_attach_hscale(table, row, _("_Number of iterations:"), NULL,
- GTK_OBJECT(controls.niters), GWY_HSCALE_SQRT);
+ gwy_table_attach_adjbar(table, row, _("_Number of iterations:"), NULL,
+ GTK_OBJECT(controls.niters), GWY_HSCALE_LOG);
g_signal_connect_swapped(controls.niters, "value-changed",
G_CALLBACK(gwy_synth_int_changed), &controls);
row++;
controls.T = gtk_adjustment_new(args->T, 0.001, 5.0, 0.001, 0.1, 0);
g_object_set_data(G_OBJECT(controls.T), "target", &args->T);
- gwy_table_attach_hscale(table, row, _("_Temperature:"), NULL,
+ gwy_table_attach_adjbar(table, row, _("_Temperature:"), NULL,
GTK_OBJECT(controls.T), GWY_HSCALE_SQRT);
g_signal_connect_swapped(controls.T, "value-changed",
G_CALLBACK(gwy_synth_double_changed), &controls);
@@ -468,7 +468,7 @@ domain_synth_dialog(DomainSynthArgs *args,
controls.B = gtk_adjustment_new(args->B, 0.001, 100.0, 0.1, 10, 0);
g_object_set_data(G_OBJECT(controls.B), "target", &args->B);
- gwy_table_attach_hscale(table, row, _("_Inhibitor strength:"), NULL,
+ gwy_table_attach_adjbar(table, row, _("_Inhibitor strength:"), NULL,
GTK_OBJECT(controls.B), GWY_HSCALE_SQRT);
g_signal_connect_swapped(controls.B, "value-changed",
G_CALLBACK(gwy_synth_double_changed), &controls);
@@ -476,7 +476,7 @@ domain_synth_dialog(DomainSynthArgs *args,
controls.mu = gtk_adjustment_new(args->mu, 0.001, 100.0, 0.1, 10, 0);
g_object_set_data(G_OBJECT(controls.mu), "target", &args->mu);
- gwy_table_attach_hscale(table, row, _("In_hibitor coupling:"), NULL,
+ gwy_table_attach_adjbar(table, row, _("In_hibitor coupling:"), NULL,
GTK_OBJECT(controls.mu), GWY_HSCALE_SQRT);
g_signal_connect_swapped(controls.mu, "value-changed",
G_CALLBACK(gwy_synth_double_changed), &controls);
@@ -484,7 +484,7 @@ domain_synth_dialog(DomainSynthArgs *args,
controls.nu = gtk_adjustment_new(args->nu, -5.0, 5.0, 0.001, 0.1, 0);
g_object_set_data(G_OBJECT(controls.nu), "target", &args->nu);
- gwy_table_attach_hscale(table, row, _("_Bias:"), NULL,
+ gwy_table_attach_adjbar(table, row, _("_Bias:"), NULL,
GTK_OBJECT(controls.nu), GWY_HSCALE_DEFAULT);
g_signal_connect_swapped(controls.nu, "value-changed",
G_CALLBACK(gwy_synth_double_changed), &controls);
@@ -492,7 +492,7 @@ domain_synth_dialog(DomainSynthArgs *args,
controls.dt = gtk_adjustment_new(args->dt, 0.001, 1000.0, 0.001, 1.0, 0);
g_object_set_data(G_OBJECT(controls.dt), "target", &args->dt);
- gwy_table_attach_hscale(table, row, _("_Monte Carlo time step:"),
+ gwy_table_attach_adjbar(table, row, _("_Monte Carlo time step:"),
"×10<sup>-3</sup>",
GTK_OBJECT(controls.dt), GWY_HSCALE_LOG);
g_signal_connect_swapped(controls.dt, "value-changed",
@@ -511,11 +511,11 @@ domain_synth_dialog(DomainSynthArgs *args,
if (dfield_template) {
controls.height_init
- = gtk_button_new_with_mnemonic(_("_Like Current Channel"));
+ = gtk_button_new_with_mnemonic(_("_Like Current Image"));
g_signal_connect_swapped(controls.height_init, "clicked",
G_CALLBACK(height_init_clicked), &controls);
gtk_table_attach(GTK_TABLE(table), controls.height_init,
- 1, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
}
@@ -523,7 +523,7 @@ domain_synth_dialog(DomainSynthArgs *args,
label = gtk_label_new(_("Output type:"));
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
gtk_table_attach(GTK_TABLE(table), label,
- 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
for (i = 0; i < QUANTITY_NTYPES; i++) {
@@ -534,7 +534,7 @@ domain_synth_dialog(DomainSynthArgs *args,
g_object_set_data(G_OBJECT(controls.quantity[i]), "value",
GUINT_TO_POINTER(i));
gtk_table_attach(GTK_TABLE(table), controls.quantity[i],
- 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect(controls.quantity[i], "toggled",
G_CALLBACK(output_quantity_toggled), &controls);
row++;
diff --git a/modules/process/drift.c b/modules/process/drift.c
index 3dd7aef..a61ef8f 100644
--- a/modules/process/drift.c
+++ b/modules/process/drift.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: drift.c 19044 2016-10-08 19:10:46Z yeti-dn $
+ * @(#) $Id: drift.c 20116 2017-07-31 10:28:57Z yeti-dn $
* Copyright (C) 2007,2008 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -163,7 +163,7 @@ static const DriftArgs drift_defaults = {
FALSE,
GWY_INTERPOLATION_BSPLINE,
FALSE,
- FALSE,
+ TRUE,
GWY_APP_DATA_ID_NONE,
};
@@ -179,7 +179,7 @@ static GwyModuleInfo module_info = {
"2007",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, drift)
static gboolean
module_register(void)
@@ -276,7 +276,7 @@ drift_dialog(DriftArgs *args,
"si-unit-y", unit,
NULL);
- table = gtk_table_new(11, 4, FALSE);
+ table = gtk_table_new(11, 3, FALSE);
gtk_table_set_row_spacings(GTK_TABLE(table), 2);
gtk_table_set_col_spacings(GTK_TABLE(table), 6);
gtk_container_set_border_width(GTK_CONTAINER(table), 4);
@@ -284,8 +284,9 @@ drift_dialog(DriftArgs *args,
row = 0;
controls.range = gtk_adjustment_new(args->range, 1.0, 50.0, 1.0, 5.0, 0);
- gwy_table_attach_hscale(table, row, _("_Search range:"), _("rows"),
- controls.range, GWY_HSCALE_DEFAULT);
+ gwy_table_attach_adjbar(table, row, _("_Search range:"), _("rows"),
+ controls.range,
+ GWY_HSCALE_LINEAR | GWY_HSCALE_SNAP);
g_signal_connect_swapped(controls.range, "value-changed",
G_CALLBACK(range_changed), &controls);
row++;
@@ -294,7 +295,7 @@ drift_dialog(DriftArgs *args,
= gwy_enum_combo_box_new(gwy_interpolation_type_get_enum(), -1,
G_CALLBACK(gwy_enum_combo_box_update_int),
&args->interp, args->interp, TRUE);
- gwy_table_attach_hscale(table, row, _("_Interpolation type:"), NULL,
+ gwy_table_attach_adjbar(table, row, _("_Interpolation type:"), NULL,
GTK_OBJECT(controls.interp),
GWY_HSCALE_WIDGET_NO_EXPAND);
gtk_table_set_row_spacing(GTK_TABLE(table), row, 8);
@@ -305,7 +306,7 @@ drift_dialog(DriftArgs *args,
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.do_correct),
args->do_correct);
gtk_table_attach(GTK_TABLE(table), controls.do_correct,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect_swapped(controls.do_correct, "toggled",
G_CALLBACK(do_correct_changed), &controls);
row++;
@@ -315,7 +316,7 @@ drift_dialog(DriftArgs *args,
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.exclude_linear),
args->exclude_linear);
gtk_table_attach(GTK_TABLE(table), controls.exclude_linear,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect_swapped(controls.exclude_linear, "toggled",
G_CALLBACK(exclude_linear_changed), &controls);
row++;
@@ -325,7 +326,7 @@ drift_dialog(DriftArgs *args,
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.do_graph),
args->do_graph);
gtk_table_attach(GTK_TABLE(table), controls.do_graph,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect_swapped(controls.do_graph, "toggled",
G_CALLBACK(do_graph_changed), &controls);
row++;
@@ -334,10 +335,6 @@ drift_dialog(DriftArgs *args,
gtk_table_attach(GTK_TABLE(table), hbox2,
0, 4, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
- label = gtk_label_new_with_mnemonic(_("Target _graph:"));
- gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_box_pack_start(GTK_BOX(hbox2), label, FALSE, FALSE, 0);
-
controls.target_graph = gwy_data_chooser_new_graphs();
chooser = GWY_DATA_CHOOSER(controls.target_graph);
gwy_data_chooser_set_none(chooser, _("New graph"));
@@ -345,9 +342,11 @@ drift_dialog(DriftArgs *args,
gwy_data_chooser_set_filter(chooser, filter_target_graphs, &controls, NULL);
gwy_data_chooser_set_active_id(chooser, &args->target_graph);
gwy_data_chooser_get_active_id(chooser, &args->target_graph);
- gtk_label_set_mnemonic_widget(GTK_LABEL(label), controls.target_graph);
- gtk_widget_set_sensitive(hbox2, args->do_graph);
- gtk_box_pack_end(GTK_BOX(hbox2), controls.target_graph, FALSE, FALSE, 0);
+ gwy_table_attach_adjbar(table, row, _("Target _graph:"), NULL,
+ GTK_OBJECT(controls.target_graph),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
+ gwy_table_hscale_set_sensitive(GTK_OBJECT(controls.target_graph),
+ args->do_graph);
g_signal_connect_swapped(controls.target_graph, "changed",
G_CALLBACK(target_graph_changed), &controls);
row++;
@@ -356,7 +355,7 @@ drift_dialog(DriftArgs *args,
label = gtk_label_new(_("Preview:"));
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
gtk_table_attach(GTK_TABLE(table), label,
- 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
controls.preview_type
@@ -366,30 +365,32 @@ drift_dialog(DriftArgs *args,
_("Drift _lines"), PREVIEW_MASK,
NULL);
row = gwy_radio_buttons_attach_to_table(controls.preview_type,
- GTK_TABLE(table), 3, row);
+ GTK_TABLE(table), 2, row);
gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
controls.color_button = create_mask_color_button(controls.mydata, dialog,
0);
- gwy_table_attach_hscale(table, row, _("_Mask color:"), NULL,
+ gwy_table_attach_adjbar(table, row, _("_Mask color:"), NULL,
GTK_OBJECT(controls.color_button),
GWY_HSCALE_WIDGET_NO_EXPAND);
row++;
- controls.distribute = gtk_check_button_new_with_label(_("Distribute"));
+ controls.distribute
+ = gtk_check_button_new_with_mnemonic(_("_Apply to all "
+ "compatible images"));
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.distribute),
args->distribute);
- gtk_table_attach(GTK_TABLE(table), controls.distribute, 0, 3,
- row, row +1, GTK_FILL, 0, 0, 0);
+ gtk_table_attach(GTK_TABLE(table), controls.distribute,
+ 0, 2, row, row +1, GTK_FILL, 0, 0, 0);
g_signal_connect_swapped(controls.distribute, "toggled",
G_CALLBACK(distribute_changed), &controls);
row++;
- controls.replace = gtk_check_button_new_with_label(_("Replace"));
+ controls.replace = gtk_check_button_new_with_label(_("Create new image"));
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.replace),
- args->replace);
- gtk_table_attach(GTK_TABLE(table), controls.replace, 0, 3,
- row, row +1, GTK_FILL, 0, 0, 0);
+ !args->replace);
+ gtk_table_attach(GTK_TABLE(table), controls.replace,
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect_swapped(controls.replace, "toggled",
G_CALLBACK(replace_changed), &controls);
row++;
@@ -660,7 +661,8 @@ do_graph_changed(DriftControls *controls,
{
DriftArgs *args = controls->args;
args->do_graph = gtk_toggle_button_get_active(toggle);
- gtk_widget_set_sensitive(controls->target_hbox, args->do_graph);
+ gwy_table_hscale_set_sensitive(GTK_OBJECT(controls->target_graph),
+ args->do_graph);
update_target_graphs(controls);
drift_invalidate(controls);
}
@@ -693,7 +695,7 @@ static void
replace_changed(DriftControls *controls,
GtkToggleButton *toggle)
{
- controls->args->replace = gtk_toggle_button_get_active(toggle);
+ controls->args->replace = !gtk_toggle_button_get_active(toggle);
drift_invalidate(controls);
}
diff --git a/modules/process/dwt.c b/modules/process/dwt.c
index cfb5e80..7d74229 100644
--- a/modules/process/dwt.c
+++ b/modules/process/dwt.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: dwt.c 18537 2016-03-28 18:11:19Z yeti-dn $
+ * @(#) $Id: dwt.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2003 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -77,7 +77,7 @@ static GwyModuleInfo module_info = {
"2003",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, dwt)
static gboolean
module_register(void)
diff --git a/modules/process/dwtanisotropy.c b/modules/process/dwtanisotropy.c
index 746f6dd..acff5ef 100644
--- a/modules/process/dwtanisotropy.c
+++ b/modules/process/dwtanisotropy.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: dwtanisotropy.c 18537 2016-03-28 18:11:19Z yeti-dn $
+ * @(#) $Id: dwtanisotropy.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2003 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -54,9 +54,9 @@ static gboolean module_register (void);
static void dwt_anisotropy (GwyContainer *data,
GwyRunType run);
static gboolean dwt_anisotropy_dialog (DWTAnisotropyArgs *args);
-static void ratio_changed_cb (GtkAdjustment *adj,
+static void ratio_changed (GtkAdjustment *adj,
DWTAnisotropyArgs *args);
-static void lowlimit_changed_cb (GtkAdjustment *adj,
+static void lowlimit_changed (GtkAdjustment *adj,
DWTAnisotropyArgs *args);
static void dwt_anisotropy_dialog_update(DWTAnisotropyControls *controls,
DWTAnisotropyArgs *args);
@@ -79,12 +79,12 @@ static GwyModuleInfo module_info = {
&module_register,
N_("2D DWT anisotropy detection based on X/Y components ratio."),
"Petr Klapetek <klapetek at gwyddion.net>",
- "1.7",
+ "1.8",
"David Nečas (Yeti) & Petr Klapetek",
"2003",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, dwtanisotropy)
static gboolean
module_register(void)
@@ -176,9 +176,9 @@ dwt_anisotropy(GwyContainer *data, GwyRunType run)
static gboolean
dwt_anisotropy_dialog(DWTAnisotropyArgs *args)
{
- GtkWidget *dialog, *table;
+ GtkWidget *dialog, *table, *spin;
DWTAnisotropyControls controls;
- gint response;
+ gint response, row;
dialog = gtk_dialog_new_with_buttons(_("2D DWT Anisotropy"), NULL, 0,
_("_Reset"), RESPONSE_RESET,
@@ -188,41 +188,46 @@ dwt_anisotropy_dialog(DWTAnisotropyArgs *args)
gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK);
gwy_help_add_to_proc_dialog(GTK_DIALOG(dialog), GWY_HELP_DEFAULT);
- table = gtk_table_new(2, 5, FALSE);
+ table = gtk_table_new(4, 3, FALSE);
gtk_table_set_row_spacings(GTK_TABLE(table), 2);
gtk_table_set_col_spacings(GTK_TABLE(table), 6);
gtk_container_set_border_width(GTK_CONTAINER(table), 4);
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), table,
FALSE, FALSE, 4);
+ row = 0;
controls.interp
= gwy_enum_combo_box_new(gwy_interpolation_type_get_enum(), -1,
G_CALLBACK(gwy_enum_combo_box_update_int),
&args->interp, args->interp, TRUE);
- gwy_table_attach_row(table, 1, _("_Interpolation type:"), "",
- controls.interp);
+ gwy_table_attach_adjbar(table, row, _("_Interpolation type:"), NULL,
+ GTK_OBJECT(controls.interp),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
+ row++;
controls.wavelet
= gwy_enum_combo_box_new(gwy_dwt_type_get_enum(), -1,
G_CALLBACK(gwy_enum_combo_box_update_int),
&args->wavelet, args->wavelet, TRUE);
- gwy_table_attach_row(table, 2, _("_Wavelet type:"), "", controls.wavelet);
-
- controls.ratio = gtk_adjustment_new(args->ratio,
- 0.0001, 10.0, 1, 0.1, 0);
- gwy_table_attach_spinbutton(table, 3,
- _("X/Y ratio threshold:"), NULL,
- controls.ratio);
+ gwy_table_attach_adjbar(table, row, _("_Wavelet type:"), NULL,
+ GTK_OBJECT(controls.wavelet),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
+ row++;
+
+ controls.ratio = gtk_adjustment_new(args->ratio, 0.0001, 10.0, 1, 0.1, 0);
+ spin = gwy_table_attach_adjbar(table, row, _("X/Y ratio threshold:"), NULL,
+ controls.ratio, GWY_HSCALE_LOG);
+ gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 4);
g_signal_connect(controls.ratio, "value-changed",
- G_CALLBACK(ratio_changed_cb), args);
+ G_CALLBACK(ratio_changed), args);
+ row++;
- controls.lowlimit = gtk_adjustment_new(args->lowlimit,
- 1, 20, 1, 1, 0);
- gwy_table_attach_spinbutton(table, 4,
- _("Low level exclude limit:"), NULL,
- controls.lowlimit);
+ controls.lowlimit = gtk_adjustment_new(args->lowlimit, 1, 20, 1, 1, 0);
+ gwy_table_attach_adjbar(table, row, _("Low level exclude limit:"), NULL,
+ controls.lowlimit,
+ GWY_HSCALE_LINEAR | GWY_HSCALE_SNAP);
g_signal_connect(controls.lowlimit, "value-changed",
- G_CALLBACK(lowlimit_changed_cb), args);
+ G_CALLBACK(lowlimit_changed), args);
gtk_widget_show_all(dialog);
do {
@@ -255,13 +260,13 @@ dwt_anisotropy_dialog(DWTAnisotropyArgs *args)
}
static void
-ratio_changed_cb(GtkAdjustment *adj, DWTAnisotropyArgs *args)
+ratio_changed(GtkAdjustment *adj, DWTAnisotropyArgs *args)
{
args->ratio = gtk_adjustment_get_value(adj);
}
static void
-lowlimit_changed_cb(GtkAdjustment *adj, DWTAnisotropyArgs *args)
+lowlimit_changed(GtkAdjustment *adj, DWTAnisotropyArgs *args)
{
args->lowlimit = gtk_adjustment_get_value(adj);
}
diff --git a/modules/process/edge.c b/modules/process/edge.c
index 3cbf7ff..8c21658 100644
--- a/modules/process/edge.c
+++ b/modules/process/edge.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: edge.c 19216 2016-11-09 10:39:06Z yeti-dn $
+ * @(#) $Id: edge.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2003-2007,2012 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -148,7 +148,7 @@ static GwyModuleInfo module_info = {
"2004",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, edge)
static gboolean
module_register(void)
@@ -660,7 +660,7 @@ zero_crossing_dialog(ZeroCrossingArgs *args,
controls.view = create_preview(controls.mydata, 0, PREVIEW_SIZE, FALSE);
gtk_box_pack_start(GTK_BOX(hbox), controls.view, FALSE, FALSE, 4);
- table = gtk_table_new(7, 4, FALSE);
+ table = gtk_table_new(7, 3, FALSE);
gtk_table_set_row_spacings(GTK_TABLE(table), 2);
gtk_table_set_col_spacings(GTK_TABLE(table), 6);
gtk_container_set_border_width(GTK_CONTAINER(table), 4);
@@ -669,8 +669,8 @@ zero_crossing_dialog(ZeroCrossingArgs *args,
adj = gtk_adjustment_new(args->gaussian_fwhm, 0.0, 20.0, 0.1, 1.0, 0);
controls.gaussian_fwhm = adj;
- gwy_table_attach_hscale(table, row, _("_Gaussian FWHM:"), "px", adj,
- GWY_HSCALE_DEFAULT);
+ gwy_table_attach_adjbar(table, row, _("_Gaussian FWHM:"), _("px"),
+ adj, GWY_HSCALE_SQRT);
g_signal_connect(adj, "value-changed",
G_CALLBACK(zero_crossing_gaussian_fwhm_changed),
&controls);
@@ -678,8 +678,8 @@ zero_crossing_dialog(ZeroCrossingArgs *args,
adj = gtk_adjustment_new(args->threshold, 0.0, 3.0, 0.01, 0.1, 0);
controls.threshold = adj;
- gwy_table_attach_hscale(table, row, _("_Threshold:"), _("NRMS"), adj,
- GWY_HSCALE_DEFAULT);
+ gwy_table_attach_adjbar(table, row, _("_Threshold:"), _("NRMS"), adj,
+ GWY_HSCALE_SQRT);
g_signal_connect(adj, "value-changed",
G_CALLBACK(zero_crossing_threshold_changed), &controls);
gtk_table_set_row_spacing(GTK_TABLE(table), row, 8);
@@ -688,7 +688,7 @@ zero_crossing_dialog(ZeroCrossingArgs *args,
label = gtk_label_new(gwy_sgettext("verb|Display"));
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
gtk_table_attach(GTK_TABLE(table), label,
- 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
controls.display_group
@@ -699,14 +699,14 @@ zero_crossing_dialog(ZeroCrossingArgs *args,
_("Detected st_ep"), DISPLAY_SHOW,
NULL);
row = gwy_radio_buttons_attach_to_table(controls.display_group,
- GTK_TABLE(table), 3, row);
+ GTK_TABLE(table), 2, row);
gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
controls.update = gtk_check_button_new_with_mnemonic(_("I_nstant updates"));
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.update),
args->update);
gtk_table_attach(GTK_TABLE(table), controls.update,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect(controls.update, "toggled",
G_CALLBACK(zero_crossing_update_changed), &controls);
diff --git a/modules/process/entropy.c b/modules/process/entropy.c
index 7074afe..751b99b 100644
--- a/modules/process/entropy.c
+++ b/modules/process/entropy.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: entropy.c 18537 2016-03-28 18:11:19Z yeti-dn $
+ * @(#) $Id: entropy.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2015 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -111,12 +111,12 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Visualizes entropy calculation for value and slope distribution."),
"Yeti <yeti at gwyddion.net>",
- "1.0",
+ "1.1",
"David Nečas (Yeti)",
"2015",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, entropy)
static gboolean
module_register(void)
@@ -190,7 +190,7 @@ entropy_dialog(EntropyArgs *args, GwyDataField *dfield, GwyDataField *mfield)
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), hbox,
TRUE, TRUE, 0);
- table = gtk_table_new(8 + 4*(!!mfield), 4, FALSE);
+ table = gtk_table_new(8 + 4*(!!mfield), 3, FALSE);
gtk_table_set_row_spacings(GTK_TABLE(table), 2);
gtk_table_set_col_spacings(GTK_TABLE(table), 6);
gtk_container_set_border_width(GTK_CONTAINER(table), 4);
@@ -208,12 +208,12 @@ entropy_dialog(EntropyArgs *args, GwyDataField *dfield, GwyDataField *mfield)
ENTROPY_ANGLES,
NULL);
row = gwy_radio_buttons_attach_to_table(controls.mode,
- GTK_TABLE(table), 3, row);
+ GTK_TABLE(table), 2, row);
if (mfield) {
gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
label = gwy_label_new_header(_("Masking Mode"));
gtk_table_attach(GTK_TABLE(table), label,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
controls.masking
@@ -221,7 +221,7 @@ entropy_dialog(EntropyArgs *args, GwyDataField *dfield, GwyDataField *mfield)
G_CALLBACK(masking_changed), &controls,
args->masking);
row = gwy_radio_buttons_attach_to_table(controls.masking,
- GTK_TABLE(table), 3, row);
+ GTK_TABLE(table), 2, row);
}
else
controls.masking = NULL;
@@ -232,15 +232,15 @@ entropy_dialog(EntropyArgs *args, GwyDataField *dfield, GwyDataField *mfield)
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.fit_plane),
args->fit_plane);
gtk_table_attach(GTK_TABLE(table), controls.fit_plane,
- 0, 4, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect_swapped(controls.fit_plane, "toggled",
G_CALLBACK(fit_plane_changed), &controls);
row++;
controls.kernel_size = gtk_adjustment_new(args->kernel_size,
2, 16, 1, 4, 0);
- gwy_table_attach_hscale(table, row, _("_Plane size:"), "px",
- controls.kernel_size, 0);
+ gwy_table_attach_adjbar(table, row, _("_Plane size:"), _("px"),
+ controls.kernel_size, GWY_HSCALE_LINEAR);
g_signal_connect_swapped(controls.kernel_size, "value-changed",
G_CALLBACK(kernel_size_changed), &controls);
row++;
@@ -251,7 +251,7 @@ entropy_dialog(EntropyArgs *args, GwyDataField *dfield, GwyDataField *mfield)
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.zoom_in),
args->zoom_in);
gtk_table_attach(GTK_TABLE(table), controls.zoom_in,
- 0, 4, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect_swapped(controls.zoom_in, "toggled",
G_CALLBACK(zoom_in_changed), &controls);
row++;
@@ -259,22 +259,22 @@ entropy_dialog(EntropyArgs *args, GwyDataField *dfield, GwyDataField *mfield)
label = gtk_label_new(_("Entropy:"));
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
gtk_table_attach(GTK_TABLE(table), label,
- 0, 2, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 1, row, row+1, GTK_FILL, 0, 0, 0);
label = gtk_label_new("");
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
gtk_table_attach(GTK_TABLE(table), label,
- 2, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 1, 2, row, row+1, GTK_FILL, 0, 0, 0);
controls.entropy = label;
row++;
label = gtk_label_new(_("Entropy deficit:"));
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
gtk_table_attach(GTK_TABLE(table), label,
- 0, 2, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 1, row, row+1, GTK_FILL, 0, 0, 0);
label = gtk_label_new("");
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
gtk_table_attach(GTK_TABLE(table), label,
- 2, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 1, 2, row, row+1, GTK_FILL, 0, 0, 0);
controls.entropydef = label;
row++;
@@ -283,6 +283,7 @@ entropy_dialog(EntropyArgs *args, GwyDataField *dfield, GwyDataField *mfield)
gmodel = gwy_graph_model_new();
controls.graph = gwy_graph_new(gmodel);
g_object_unref(gmodel);
+ gwy_graph_enable_user_input(GWY_GRAPH(controls.graph), FALSE);
gtk_widget_set_size_request(controls.graph, 400, 320);
gtk_box_pack_start(GTK_BOX(hbox), controls.graph, TRUE, TRUE, 0);
diff --git a/modules/process/extend.c b/modules/process/extend.c
index b51bcac..f647c1a 100644
--- a/modules/process/extend.c
+++ b/modules/process/extend.c
@@ -1,6 +1,6 @@
/*
- * @(#) $Id: extend.c 18537 2016-03-28 18:11:19Z yeti-dn $
- * Copyright (C) 2010-2014 David Necas (Yeti).
+ * @(#) $Id: extend.c 19948 2017-06-22 14:05:41Z yeti-dn $
+ * Copyright (C) 2010-2017 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
* This program is free software; you can redistribute it and/or modify
@@ -106,12 +106,12 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Extends image by adding borders."),
"Yeti <yeti at gwyddion.net>",
- "1.2",
+ "1.3",
"David Nečas (Yeti)",
"2012",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, extend)
static gboolean
module_register(void)
@@ -213,33 +213,33 @@ extend_dialog(ExtendArgs *args)
/* Borders */
label = gwy_label_new_header(_("Borders"));
gtk_table_attach(GTK_TABLE(table), label,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
controls.up = gtk_adjustment_new(args->up, 0, EXTEND_MAX, 1, 10, 0);
- gwy_table_attach_hscale(table, row, _("_Up:"), "px",
- controls.up, GWY_HSCALE_SQRT);
+ gwy_table_attach_adjbar(table, row, _("_Up:"), _("px"),
+ controls.up, GWY_HSCALE_DEFAULT);
g_signal_connect(controls.up, "value-changed",
G_CALLBACK(up_changed), &controls);
row++;
controls.down = gtk_adjustment_new(args->down, 0, EXTEND_MAX, 1, 10, 0);
- gwy_table_attach_hscale(table, row, _("_Down:"), "px",
- controls.down, GWY_HSCALE_SQRT);
+ gwy_table_attach_adjbar(table, row, _("_Down:"), _("px"),
+ controls.down, GWY_HSCALE_DEFAULT);
g_signal_connect(controls.down, "value-changed",
G_CALLBACK(down_changed), &controls);
row++;
controls.left = gtk_adjustment_new(args->left, 0, EXTEND_MAX, 1, 10, 0);
- gwy_table_attach_hscale(table, row, _("_Left:"), "px",
- controls.left, GWY_HSCALE_SQRT);
+ gwy_table_attach_adjbar(table, row, _("_Left:"), _("px"),
+ controls.left, GWY_HSCALE_DEFAULT);
g_signal_connect(controls.left, "value-changed",
G_CALLBACK(left_changed), &controls);
row++;
controls.right = gtk_adjustment_new(args->right, 0, EXTEND_MAX, 1, 10, 0);
- gwy_table_attach_hscale(table, row, _("_Right:"), "px",
- controls.right, GWY_HSCALE_SQRT);
+ gwy_table_attach_adjbar(table, row, _("_Right:"), _("px"),
+ controls.right, GWY_HSCALE_DEFAULT);
g_signal_connect(controls.right, "value-changed",
G_CALLBACK(right_changed), &controls);
row++;
@@ -249,7 +249,7 @@ extend_dialog(ExtendArgs *args)
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.symmetrical),
controls.is_symmetrical);
gtk_table_attach(GTK_TABLE(table), controls.symmetrical,
- 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect(controls.symmetrical, "toggled",
G_CALLBACK(symmetrical_toggled), &controls);
row++;
@@ -258,7 +258,7 @@ extend_dialog(ExtendArgs *args)
gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
label = gwy_label_new_header(_("Options"));
gtk_table_attach(GTK_TABLE(table), label,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
controls.exterior
@@ -272,7 +272,7 @@ extend_dialog(ExtendArgs *args)
gwy_sgettext("exterior|Periodic"),
GWY_EXTERIOR_PERIODIC,
NULL);
- gwy_table_attach_hscale(table, row, _("_Exterior type:"), NULL,
+ gwy_table_attach_adjbar(table, row, _("_Exterior type:"), NULL,
GTK_OBJECT(controls.exterior),
GWY_HSCALE_WIDGET_NO_EXPAND);
gtk_table_set_row_spacing(GTK_TABLE(table), row, 8);
@@ -284,17 +284,17 @@ extend_dialog(ExtendArgs *args)
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.keep_offsets),
args->keep_offsets);
gtk_table_attach(GTK_TABLE(table), controls.keep_offsets,
- 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect(controls.keep_offsets, "toggled",
G_CALLBACK(keep_offsets_toggled), &controls);
row++;
controls.new_channel
- = gtk_check_button_new_with_mnemonic(_("Create new channel"));
+ = gtk_check_button_new_with_mnemonic(_("Create new image"));
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.new_channel),
args->new_channel);
gtk_table_attach(GTK_TABLE(table), controls.new_channel,
- 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect(controls.new_channel, "toggled",
G_CALLBACK(new_channel_toggled), &controls);
row++;
diff --git a/modules/process/extract_path.c b/modules/process/extract_path.c
index 95f1d39..a0a90eb 100644
--- a/modules/process/extract_path.c
+++ b/modules/process/extract_path.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: extract_path.c 18886 2016-08-26 08:26:22Z yeti-dn $
+ * @(#) $Id: extract_path.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2016 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -91,7 +91,7 @@ static GwyModuleInfo module_info = {
"2016",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, extract_path)
static gboolean
module_register(void)
diff --git a/modules/process/facet-level.c b/modules/process/facet-level.c
index 304efb6..cc0412c 100644
--- a/modules/process/facet-level.c
+++ b/modules/process/facet-level.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: facet-level.c 18537 2016-03-28 18:11:19Z yeti-dn $
+ * @(#) $Id: facet-level.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2004,2008 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -70,7 +70,7 @@ static GwyModuleInfo module_info = {
"2004",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, facet_level)
static gboolean
module_register(void)
@@ -206,14 +206,14 @@ level_dialog(LevelArgs *args,
label = gwy_label_new_header(_("Masking Mode"));
gtk_table_attach(GTK_TABLE(table), label,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
controls.masking = gwy_radio_buttons_create(gwy_masking_type_get_enum(), -1,
G_CALLBACK(masking_changed),
&controls, args->masking);
row = gwy_radio_buttons_attach_to_table(controls.masking, GTK_TABLE(table),
- 3, row);
+ 2, row);
gtk_widget_show_all(dialog);
do {
diff --git a/modules/process/facet_analysis.c b/modules/process/facet_analysis.c
index fb58c24..8be86dd 100644
--- a/modules/process/facet_analysis.c
+++ b/modules/process/facet_analysis.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: facet_analysis.c 18537 2016-03-28 18:11:19Z yeti-dn $
+ * @(#) $Id: facet_analysis.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2003-2015 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -35,6 +35,7 @@
#include <libprocess/filters.h>
#include <libprocess/grains.h>
#include <libgwydgets/gwycombobox.h>
+#include <libgwydgets/gwyradiobuttons.h>
#include <libgwymodule/gwymodule-process.h>
#include <app/gwymoduleutils.h>
#include <app/gwyapp.h>
@@ -73,7 +74,7 @@ typedef struct {
GtkObject *tolerance;
GtkObject *kernel_size;
GtkWidget *combine;
- GtkWidget *combine_type;
+ GSList *combine_type;
GtkWidget *color_button;
GwyContainer *mydata;
GwyContainer *fdata;
@@ -112,10 +113,9 @@ static void update_average_angle (FacetsControls *controls,
static void preview_selection_updated (GwySelection *selection,
gint id,
FacetsControls *controls);
-static void combine_changed (GtkToggleButton *toggle,
- FacetsControls *controls);
-static void combine_type_changed (GtkComboBox *combo,
- FacetsControls *controls);
+static void combine_changed (FacetsControls *controls,
+ GtkToggleButton *toggle);
+static void combine_type_changed (FacetsControls *controls);
static void gwy_data_field_mark_facets (GwyDataField *dtheta,
GwyDataField *dphi,
gdouble theta0,
@@ -163,12 +163,12 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Visualizes, marks and measures facet orientation."),
"Yeti <yeti at gwyddion.net>",
- "1.9",
+ "1.11",
"David Nečas (Yeti) & Petr Klapetek",
"2005",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, facet_analysis)
static gboolean
module_register(void)
@@ -227,7 +227,7 @@ add_angle_label(GtkWidget *table,
GtkWidget *label;
GtkRequisition req;
- label = gtk_label_new("-188.00 deg");
+ label = gtk_label_new("-188.00");
gtk_widget_size_request(label, &req);
gtk_label_set_text(GTK_LABEL(label), name);
@@ -235,11 +235,16 @@ add_angle_label(GtkWidget *table,
gtk_table_attach(GTK_TABLE(table), label,
0, 1, *row, *row+1, GTK_FILL, 0, 0, 0);
+ label = gtk_label_new(_("deg"));
+ gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
+ gtk_table_attach(GTK_TABLE(table), label,
+ 2, 3, *row, *row+1, GTK_FILL, 0, 0, 0);
+
label = gtk_label_new(NULL);
gtk_widget_set_size_request(label, req.width, -1);
gtk_misc_set_alignment(GTK_MISC(label), 1.0, 0.5);
gtk_table_attach(GTK_TABLE(table), label,
- 1, 2, *row, *row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 1, 2, *row, *row+1, GTK_FILL, 0, 0, 0);
(*row)++;
return label;
@@ -255,7 +260,6 @@ facets_dialog(FacetsArgs *args,
GQuark mquark)
{
GtkWidget *dialog, *table, *hbox, *hbox2, *vbox, *label, *scale, *button;
- GtkWidget *spin;
FacetsControls controls;
gint response;
GwySelection *selection;
@@ -314,7 +318,7 @@ facets_dialog(FacetsArgs *args,
/* Info table */
- table = gtk_table_new(7, 2, FALSE);
+ table = gtk_table_new(7, 3, FALSE);
gtk_table_set_row_spacings(GTK_TABLE(table), 2);
gtk_table_set_col_spacings(GTK_TABLE(table), 6);
gtk_container_set_border_width(GTK_CONTAINER(table), 4);
@@ -332,12 +336,12 @@ facets_dialog(FacetsArgs *args,
button = gtk_button_new_with_mnemonic(_("_Find Maximum"));
gtk_table_attach(GTK_TABLE(table), button,
- 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect_swapped(button, "clicked",
G_CALLBACK(facet_view_reset_maximum), &controls);
- gtk_table_set_row_spacing(GTK_TABLE(table), row, 8);
row++;
+ gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
label = gwy_label_new_header(_("Mean Normal"));
gtk_table_attach(GTK_TABLE(table), label,
0, 2, row, row+1, GTK_FILL, 0, 0, 0);
@@ -345,66 +349,45 @@ facets_dialog(FacetsArgs *args,
controls.mtheta_label = add_angle_label(table, _("θ:"), &row);
controls.mphi_label = add_angle_label(table, _("φ:"), &row);
- gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
- label = gtk_label_new_with_mnemonic(_("Facet plane size:"));
- gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_table_attach(GTK_TABLE(table), label,
- 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
- row++;
+ table = gtk_table_new(5 + 1*(!!mfield), 3, FALSE);
+ gtk_table_set_row_spacings(GTK_TABLE(table), 2);
+ gtk_table_set_col_spacings(GTK_TABLE(table), 6);
+ gtk_container_set_border_width(GTK_CONTAINER(table), 4);
+ gtk_box_pack_start(GTK_BOX(vbox), table, TRUE, TRUE, 4);
+ row = 0;
controls.kernel_size = gtk_adjustment_new(args->kernel_size,
0.0, MAX_PLANE_SIZE, 1.0, 1.0, 0);
- spin = gtk_spin_button_new(GTK_ADJUSTMENT(controls.kernel_size), 0.0, 0);
- gtk_label_set_mnemonic_widget(GTK_LABEL(label), spin);
- gtk_table_attach(GTK_TABLE(table), spin,
- 0, 1, row, row+1, 0, 0, 0, 0);
+ gwy_table_attach_adjbar(table, row, _("Facet plane size:"), _("px"),
+ controls.kernel_size, GWY_HSCALE_LINEAR);
g_signal_connect(controls.kernel_size, "value-changed",
G_CALLBACK(facet_view_recompute), &controls);
row++;
- table = gtk_table_new(4 + 2*(!!mfield), 4, FALSE);
- gtk_table_set_row_spacings(GTK_TABLE(table), 2);
- gtk_table_set_col_spacings(GTK_TABLE(table), 6);
- gtk_container_set_border_width(GTK_CONTAINER(table), 4);
- gtk_box_pack_start(GTK_BOX(vbox), table, TRUE, TRUE, 4);
- row = 0;
-
controls.tolerance = gtk_adjustment_new(args->tolerance*180.0/G_PI,
0.0, 15.0, 0.01, 0.1, 0);
- scale = gwy_table_attach_hscale(table, row++, _("_Tolerance:"), _("deg"),
- controls.tolerance, 0);
+ scale = gwy_table_attach_adjbar(table, row++, _("_Tolerance:"), _("deg"),
+ controls.tolerance, GWY_HSCALE_SQRT);
gtk_spin_button_set_digits(GTK_SPIN_BUTTON(scale), 3);
g_signal_connect(controls.tolerance, "value-changed",
G_CALLBACK(facets_tolerance_changed), &controls);
if (mfield) {
gwy_container_set_object_by_name(controls.fdata, "/1/mask", mfield);
- controls.combine
- = gtk_check_button_new_with_mnemonic(_("Com_bine with "
- "existing mask"));
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.combine),
- args->combine);
- gtk_table_attach(GTK_TABLE(table), controls.combine,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
- g_signal_connect(controls.combine, "toggled",
- G_CALLBACK(combine_changed), &controls);
- row++;
-
- controls.combine_type
- = gwy_enum_combo_box_new(gwy_merge_type_get_enum(), -1,
- G_CALLBACK(combine_type_changed), &controls,
- args->combine_type, TRUE);
- gwy_table_attach_hscale(table, row, _("Operation:"), NULL,
- GTK_OBJECT(controls.combine_type),
- GWY_HSCALE_WIDGET);
- gtk_table_set_row_spacing(GTK_TABLE(table), row, 8);
+ create_mask_merge_buttons(table, row, NULL,
+ args->combine,
+ G_CALLBACK(combine_changed),
+ args->combine_type,
+ G_CALLBACK(combine_type_changed),
+ &controls,
+ &controls.combine, &controls.combine_type);
row++;
}
controls.color_button = create_mask_color_button(controls.mydata, dialog,
0);
- gwy_table_attach_hscale(table, row, _("_Mask color:"), NULL,
+ gwy_table_attach_adjbar(table, row, _("_Mask color:"), NULL,
GTK_OBJECT(controls.color_button),
GWY_HSCALE_WIDGET_NO_EXPAND);
row++;
@@ -417,7 +400,7 @@ facets_dialog(FacetsArgs *args,
gtk_label_set_line_wrap(GTK_LABEL(label), TRUE);
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
gtk_table_attach(GTK_TABLE(table), label,
- 0, 4, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
row++;
}
@@ -581,11 +564,11 @@ facet_view_selection_updated(GwySelection *selection,
y = xy[1] - G_SQRT2/q;
xy_to_angles(x, y, &theta, &phi);
- g_snprintf(s, sizeof(s), "%.2f deg", 180.0/G_PI*theta);
+ g_snprintf(s, sizeof(s), "%.2f", 180.0/G_PI*theta);
gtk_label_set_text(GTK_LABEL(controls->theta_label), s);
controls->args->theta0 = theta;
- g_snprintf(s, sizeof(s), "%.2f deg", 180.0/G_PI*phi);
+ g_snprintf(s, sizeof(s), "%.2f", 180.0/G_PI*phi);
gtk_label_set_text(GTK_LABEL(controls->phi_label), s);
controls->args->phi0 = phi;
@@ -614,9 +597,9 @@ update_average_angle(FacetsControls *controls,
"/0/mask"));
calculate_average_angle(dtheta, dphi, mask, &theta, &phi);
- g_snprintf(s, sizeof(s), "%.2f deg", 180.0/G_PI*theta);
+ g_snprintf(s, sizeof(s), "%.2f", 180.0/G_PI*theta);
gtk_label_set_text(GTK_LABEL(controls->mtheta_label), s);
- g_snprintf(s, sizeof(s), "%.2f deg", 180.0/G_PI*phi);
+ g_snprintf(s, sizeof(s), "%.2f", 180.0/G_PI*phi);
gtk_label_set_text(GTK_LABEL(controls->mphi_label), s);
}
@@ -691,21 +674,20 @@ gwy_data_field_mark_facets(GwyDataField *dtheta,
GwyDataField *mask)
{
gdouble cr, cth0, sth0, cro;
- const gdouble *xd, *yd;
+ const gdouble *td, *fd;
gdouble *md;
- gint i;
+ guint i, n;
cr = cos(tolerance);
cth0 = cos(theta0);
sth0 = sin(theta0);
- xd = gwy_data_field_get_data_const(dtheta);
- yd = gwy_data_field_get_data_const(dphi);
+ td = gwy_data_field_get_data_const(dtheta);
+ fd = gwy_data_field_get_data_const(dphi);
md = gwy_data_field_get_data(mask);
- for (i = gwy_data_field_get_xres(dtheta)*gwy_data_field_get_yres(dtheta);
- i;
- i--, xd++, yd++, md++) {
- cro = cth0*cos(*xd) + sth0*sin(*xd)*cos(*yd - phi0);
+ n = gwy_data_field_get_xres(dtheta)*gwy_data_field_get_yres(dtheta);
+ for (i = n; i; i--, td++, fd++, md++) {
+ cro = cth0*cos(*td) + sth0*sin(*td)*cos(*fd - phi0);
*md = (cro >= cr);
}
}
@@ -921,15 +903,16 @@ facets_tolerance_changed(GtkAdjustment *adj,
}
static void
-combine_changed(GtkToggleButton *toggle, FacetsControls *controls)
+combine_changed(FacetsControls *controls, GtkToggleButton *toggle)
{
controls->args->combine = gtk_toggle_button_get_active(toggle);
}
static void
-combine_type_changed(GtkComboBox *combo, FacetsControls *controls)
+combine_type_changed(FacetsControls *controls)
{
- controls->args->combine_type = gwy_enum_combo_box_get_active(combo);
+ controls->args->combine_type
+ = gwy_radio_buttons_get_current(controls->combine_type);
}
static void
diff --git a/modules/process/fbm_synth.c b/modules/process/fbm_synth.c
index a88abac..12f8afa 100644
--- a/modules/process/fbm_synth.c
+++ b/modules/process/fbm_synth.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: fbm_synth.c 19044 2016-10-08 19:10:46Z yeti-dn $
+ * @(#) $Id: fbm_synth.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2014 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -161,12 +161,12 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Generates random surfaces similar to fractional Brownian motion."),
"Yeti <yeti at gwyddion.net>",
- "1.0",
+ "1.1",
"David Nečas (Yeti)",
"2014",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, fbm_synth)
static gboolean
module_register(void)
@@ -362,7 +362,7 @@ fbm_synth_dialog(FBMSynthArgs *args,
g_signal_connect_swapped(controls.dims->add, "toggled",
G_CALLBACK(fbm_synth_invalidate), &controls);
- table = gtk_table_new(6 + (dfield_template ? 1 : 0), 4, FALSE);
+ table = gtk_table_new(6 + (dfield_template ? 1 : 0), 3, FALSE);
controls.table = GTK_TABLE(table);
gtk_table_set_row_spacings(controls.table, 2);
gtk_table_set_col_spacings(controls.table, 6);
@@ -372,28 +372,28 @@ fbm_synth_dialog(FBMSynthArgs *args,
row = 0;
controls.H = gtk_adjustment_new(args->H, -0.999, 0.999, 0.001, 0.1, 0);
- gwy_table_attach_hscale(table, row, _("_Hurst exponent:"), NULL,
- controls.H, GWY_HSCALE_DEFAULT);
+ gwy_table_attach_adjbar(table, row, _("_Hurst exponent:"), NULL,
+ controls.H, GWY_HSCALE_LINEAR);
g_signal_connect_swapped(controls.H, "value-changed",
G_CALLBACK(H_changed), &controls);
row++;
controls.hom_scale = gtk_adjustment_new(args->hom_scale,
2, 8192, 1, 10, 0);
- gwy_table_attach_hscale(table, row, _("_Stationarity scale:"), "px",
+ gwy_table_attach_adjbar(table, row, _("_Stationarity scale:"), _("px"),
controls.hom_scale, GWY_HSCALE_SQRT);
g_signal_connect_swapped(controls.hom_scale, "value-changed",
G_CALLBACK(hom_scale_changed), &controls);
row++;
controls.distribution = distribution_selector_new(&controls);
- gwy_table_attach_hscale(table, row, _("_Distribution:"), NULL,
+ gwy_table_attach_adjbar(table, row, _("_Distribution:"), NULL,
GTK_OBJECT(controls.distribution),
- GWY_HSCALE_WIDGET);
+ GWY_HSCALE_WIDGET_NO_EXPAND);
row++;
controls.power = gtk_adjustment_new(args->power, 2.01, 12.0, 0.01, 0.1, 0);
- gwy_table_attach_hscale(table, row, _("Po_wer:"), NULL,
+ gwy_table_attach_adjbar(table, row, _("Po_wer:"), NULL,
controls.power, GWY_HSCALE_SQRT);
gwy_table_hscale_set_sensitive(controls.power,
args->distribution == FBM_DISTRIBUTION_POWER);
@@ -402,18 +402,17 @@ fbm_synth_dialog(FBMSynthArgs *args,
row++;
gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
-
row = gwy_synth_attach_height(&controls, row,
&controls.sigma, &args->sigma,
_("_RMS:"), NULL, &controls.sigma_units);
if (dfield_template) {
controls.sigma_init
- = gtk_button_new_with_mnemonic(_("_Like Current Channel"));
+ = gtk_button_new_with_mnemonic(_("_Like Current Image"));
g_signal_connect_swapped(controls.sigma_init, "clicked",
G_CALLBACK(sigma_init_clicked), &controls);
gtk_table_attach(GTK_TABLE(table), controls.sigma_init,
- 1, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
}
diff --git a/modules/process/fft.c b/modules/process/fft.c
index f332cf5..1a57c9a 100644
--- a/modules/process/fft.c
+++ b/modules/process/fft.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: fft.c 19044 2016-10-08 19:10:46Z yeti-dn $
+ * @(#) $Id: fft.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2003-2015 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -124,12 +124,12 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Two-dimensional FFT (Fast Fourier Transform)."),
"Petr Klapetek <klapetek at gwyddion.net>",
- "2.1",
+ "2.2",
"David Nečas (Yeti) & Petr Klapetek",
"2003",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, fft)
static gboolean
module_register(void)
@@ -340,7 +340,7 @@ fft_dialog(FFTArgs *args,
gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK);
gwy_help_add_to_proc_dialog(GTK_DIALOG(dialog), GWY_HELP_DEFAULT);
- table = gtk_table_new(7, 4, FALSE);
+ table = gtk_table_new(7, 3, FALSE);
gtk_table_set_row_spacings(GTK_TABLE(table), 2);
gtk_table_set_col_spacings(GTK_TABLE(table), 6);
gtk_container_set_border_width(GTK_CONTAINER(table), 4);
@@ -351,7 +351,7 @@ fft_dialog(FFTArgs *args,
controls.raw_transform
= gtk_check_button_new_with_mnemonic(_("Ra_w transform"));
gtk_table_attach(GTK_TABLE(table), controls.raw_transform,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.raw_transform),
args->raw_transform);
g_signal_connect(controls.raw_transform, "toggled",
@@ -363,15 +363,13 @@ fft_dialog(FFTArgs *args,
fft_imgpart_filter, dfield, NULL);
gwy_data_chooser_set_active_id(GWY_DATA_CHOOSER(controls.imgpart),
&args->imgpart);
- gwy_table_attach_hscale(table, row, _("I_maginary part:"), NULL,
+ gwy_table_attach_adjbar(table, row, _("I_maginary part:"), NULL,
GTK_OBJECT(controls.imgpart),
- GWY_HSCALE_WIDGET | GWY_HSCALE_CHECK);
+ GWY_HSCALE_WIDGET_NO_EXPAND | GWY_HSCALE_CHECK);
controls.use_imgpart
= gwy_table_hscale_get_check(GTK_OBJECT(controls.imgpart));
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.use_imgpart),
args->use_imgpart);
- gwy_table_hscale_set_sensitive(GTK_OBJECT(controls.imgpart),
- args->use_imgpart);
g_signal_connect(controls.imgpart, "changed",
G_CALLBACK(imgpart_changed), args);
g_signal_connect(controls.use_imgpart, "toggled",
@@ -381,7 +379,7 @@ fft_dialog(FFTArgs *args,
controls.inverse_transform
= gtk_check_button_new_with_mnemonic(_("_Inverse transform"));
gtk_table_attach(GTK_TABLE(table), controls.inverse_transform,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.inverse_transform),
args->inverse_transform);
g_signal_connect(controls.inverse_transform, "toggled",
@@ -392,9 +390,9 @@ fft_dialog(FFTArgs *args,
= gwy_enum_combo_box_new(fft_outputs, G_N_ELEMENTS(fft_outputs),
G_CALLBACK(gwy_enum_combo_box_update_int),
&args->out, args->out, TRUE);
- gwy_table_attach_hscale(table, row, _("Output _type:"), NULL,
+ gwy_table_attach_adjbar(table, row, _("Output _type:"), NULL,
GTK_OBJECT(controls.out),
- GWY_HSCALE_WIDGET);
+ GWY_HSCALE_WIDGET_NO_EXPAND);
row++;
gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
@@ -402,16 +400,16 @@ fft_dialog(FFTArgs *args,
= gwy_enum_combo_box_new(gwy_windowing_type_get_enum(), -1,
G_CALLBACK(gwy_enum_combo_box_update_int),
&args->window, args->window, TRUE);
- gwy_table_attach_hscale(table, row, _("_Windowing type:"), NULL,
+ gwy_table_attach_adjbar(table, row, _("_Windowing type:"), NULL,
GTK_OBJECT(controls.window),
- GWY_HSCALE_WIDGET);
+ GWY_HSCALE_WIDGET_NO_EXPAND);
row++;
controls.zeromean
= gtk_check_button_new_with_mnemonic(_("Subtract mean _value "
"beforehand"));
gtk_table_attach(GTK_TABLE(table), controls.zeromean,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.zeromean),
args->zeromean);
g_signal_connect(controls.zeromean, "toggled",
@@ -421,7 +419,7 @@ fft_dialog(FFTArgs *args,
controls.preserverms
= gtk_check_button_new_with_mnemonic(_("_Preserve RMS"));
gtk_table_attach(GTK_TABLE(table), controls.preserverms,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.preserverms),
args->preserverms);
g_signal_connect(controls.preserverms, "toggled",
diff --git a/modules/process/fft_filter_1d.c b/modules/process/fft_filter_1d.c
index 93a5726..b754a9c 100644
--- a/modules/process/fft_filter_1d.c
+++ b/modules/process/fft_filter_1d.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: fft_filter_1d.c 18537 2016-03-28 18:11:19Z yeti-dn $
+ * @(#) $Id: fft_filter_1d.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2004 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -30,6 +30,7 @@
#include <libprocess/arithmetic.h>
#include <libgwydgets/gwygraph.h>
#include <libgwydgets/gwycombobox.h>
+#include <libgwydgets/gwystock.h>
#include <libgwymodule/gwymodule-process.h>
#include <app/gwymoduleutils.h>
#include <app/gwyapp.h>
@@ -121,7 +122,7 @@ static GwyModuleInfo module_info = {
"2004",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, fft_filter_1d)
static gboolean
module_register(void)
@@ -129,7 +130,7 @@ module_register(void)
gwy_process_func_register("fft_filter_1d",
(GwyProcessFunc)&fftf_1d,
N_("/_Correct Data/1D _FFT Filtering..."),
- NULL,
+ GWY_STOCK_FFT_FILTER_1D,
FFTF_1D_RUN_MODES,
GWY_MENU_FLAG_DATA,
N_("1D FFT Filtering"));
@@ -239,6 +240,7 @@ fftf_1d_dialog(Fftf1dArgs *args,
controls.graph = gwy_graph_new(controls.gmodel);
gwy_graph_set_status(GWY_GRAPH(controls.graph), GWY_GRAPH_STATUS_XSEL);
gtk_widget_set_size_request(controls.graph, -1, PREVIEW_HALF_SIZE);
+ gwy_graph_enable_user_input(GWY_GRAPH(controls.graph), FALSE);
gtk_box_pack_start(GTK_BOX(hbox), controls.graph, TRUE, TRUE, 4);
area = GWY_GRAPH_AREA(gwy_graph_get_area(GWY_GRAPH(controls.graph)));
diff --git a/modules/process/fft_filter_2d.c b/modules/process/fft_filter_2d.c
index 5132304..fe64b59 100644
--- a/modules/process/fft_filter_2d.c
+++ b/modules/process/fft_filter_2d.c
@@ -1,5 +1,5 @@
/*
- * $Id: fft_filter_2d.c 19044 2016-10-08 19:10:46Z yeti-dn $
+ * $Id: fft_filter_2d.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2005 Christopher Anderson, Molecular Imaging Corp.
* E-mail: Chris Anderson (sidewinder.asu at gmail.com)
* Copyright (C) 2011 David Necas (Yeti).
@@ -162,7 +162,7 @@ static GwyModuleInfo module_info = {
"2005",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, fft_filter_2d)
static gboolean
module_register(void)
@@ -454,12 +454,12 @@ run_dialog(ControlsType *controls)
label = gwy_label_new_header(_("Filter Mask"));
gtk_table_attach(GTK_TABLE(table), label, 0, 2, row, row+1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ GTK_FILL, 0, 0, 0);
row++;
hbox2 = gtk_hbox_new(FALSE, 0);
gtk_table_attach(GTK_TABLE(table), hbox2, 0, 1, row, row+1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ GTK_FILL, 0, 0, 0);
/* MODE/SHAPE Buttons */
group = NULL;
@@ -485,7 +485,7 @@ run_dialog(ControlsType *controls)
/* Remaining controls: */
hbox2 = gtk_vbox_new(FALSE, 0);
gtk_table_attach(GTK_TABLE(table), hbox2, 1, 2, row, row+3,
- GTK_EXPAND | GTK_FILL, 0, 4, 0);
+ GTK_FILL, 0, 4, 0);
button = gwy_stock_like_button_new(_("_Undo"), GTK_STOCK_UNDO);
gwy_sensitivity_group_add_widget(controls->sensgroup, button,
@@ -519,7 +519,7 @@ run_dialog(ControlsType *controls)
gtk_tooltips_set_tip(tips, button,
g_hash_table_lookup(hash_tips, "origin"), NULL);
gtk_table_attach(GTK_TABLE(table), button, 0, 1, row, row+1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ GTK_FILL, 0, 0, 0);
set_toggled(button, controls->snap);
g_signal_connect(button, "clicked", G_CALLBACK(snap_cb), controls);
@@ -529,7 +529,7 @@ run_dialog(ControlsType *controls)
label = gwy_label_new_header(_("Preview Options"));
gtk_table_attach(GTK_TABLE(table), label, 0, 2, row, row+1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ GTK_FILL, 0, 0, 0);
row++;
label = gtk_label_new(_("Display:"));
@@ -540,7 +540,7 @@ run_dialog(ControlsType *controls)
hbox2 = gtk_vbox_new(FALSE, 0);
gtk_table_attach(GTK_TABLE(table), hbox2, 0, 1, row, row+1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ GTK_FILL, 0, 0, 0);
group = NULL;
for (i = 0; i < G_N_ELEMENTS(prev_modes); i++) {
@@ -561,7 +561,7 @@ run_dialog(ControlsType *controls)
/* Zoom */
hbox2 = gtk_hbox_new(FALSE, 8);
gtk_table_attach(GTK_TABLE(table), hbox2, 0, 2, row, row+1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ GTK_FILL, 0, 0, 0);
label = gtk_label_new(_("Zoom:"));
gtk_box_pack_start(GTK_BOX(hbox2), label, FALSE, FALSE, 0);
gwy_sensitivity_group_add_widget(controls->sensgroup, label, SENS_EDIT);
@@ -585,13 +585,13 @@ run_dialog(ControlsType *controls)
/* Output */
label = gwy_label_new_header(_("Output Options"));
gtk_table_attach(GTK_TABLE(table), label, 0, 2, row, row+1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ GTK_FILL, 0, 0, 0);
row++;
label = gtk_label_new(_("Output type:"));
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
gtk_table_attach(GTK_TABLE(table), label, 0, 2, row, row+1,
- GTK_EXPAND | GTK_FILL, 0, 0, 2);
+ GTK_FILL, 0, 0, 2);
row++;
for (i = 0; i < G_N_ELEMENTS(out_modes); i++) {
@@ -601,7 +601,7 @@ run_dialog(ControlsType *controls)
if (controls->out_mode & out_modes[i].out_mode)
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check), TRUE);
gtk_table_attach(GTK_TABLE(table), check, 0, 2, row, row+1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ GTK_FILL, 0, 0, 0);
g_signal_connect(check, "toggled",
G_CALLBACK(out_mode_changed), controls);
row++;
diff --git a/modules/process/fft_profile.c b/modules/process/fft_profile.c
index 75b748e..0effcbe 100644
--- a/modules/process/fft_profile.c
+++ b/modules/process/fft_profile.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: fft_profile.c 18626 2016-04-22 10:15:13Z yeti-dn $
+ * @(#) $Id: fft_profile.c 20063 2017-07-11 11:03:01Z yeti-dn $
* Copyright (C) 2009 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -70,7 +70,6 @@ typedef struct {
GwyGraphModel *gmodel;
GtkWidget *separate;
GtkWidget *target_graph;
- GtkWidget *target_hbox;
GwyContainer *mydata;
} ProfControls;
@@ -125,12 +124,12 @@ static GwyModuleInfo module_info = {
N_("Reads radial sections of two-dimensional power spectrum density "
"function."),
"Yeti <yeti at gwyddion.net>",
- "1.3",
+ "1.4",
"David Nečas (Yeti)",
"2009",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, fft_profile)
static gboolean
module_register(void)
@@ -171,7 +170,7 @@ prof_dialog(ProfArgs *args,
GwyDataField *dfield,
gint id)
{
- GtkWidget *hbox, *hbox2, *vbox, *label;
+ GtkWidget *hbox, *vbox;
GwyDataChooser *chooser;
GtkTable *table;
GtkDialog *dialog;
@@ -253,7 +252,7 @@ prof_dialog(ProfArgs *args,
gwy_graph_area_enable_user_input(area, FALSE);
gtk_box_pack_start(GTK_BOX(vbox), controls.graph, TRUE, TRUE, 0);
- table = GTK_TABLE(gtk_table_new(4, 4, FALSE));
+ table = GTK_TABLE(gtk_table_new(4, 3, FALSE));
gtk_table_set_row_spacings(table, 2);
gtk_table_set_col_spacings(table, 6);
gtk_container_set_border_width(GTK_CONTAINER(table), 4);
@@ -263,7 +262,8 @@ prof_dialog(ProfArgs *args,
controls.resolution = gtk_adjustment_new(controls.args->resolution,
MIN_RESOLUTION, MAX_RESOLUTION,
1, 10, 0);
- gwy_table_attach_hscale(GTK_WIDGET(table), row, _("_Fix res.:"), NULL,
+ gwy_table_attach_adjbar(GTK_WIDGET(table), row,
+ _("_Fixed resolution:"), NULL,
controls.resolution,
GWY_HSCALE_CHECK | GWY_HSCALE_SQRT);
g_signal_connect_swapped(controls.resolution, "value-changed",
@@ -273,44 +273,28 @@ prof_dialog(ProfArgs *args,
controls.args->fixres);
g_signal_connect_swapped(controls.fixres, "toggled",
G_CALLBACK(prof_fixres_changed), &controls);
- gwy_table_hscale_set_sensitive(controls.resolution, controls.args->fixres);
row++;
controls.separate = gtk_check_button_new_with_mnemonic(_("_Separate curves"));
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.separate),
args->separate);
gtk_table_attach(table, controls.separate,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect_swapped(controls.separate, "toggled",
G_CALLBACK(prof_separate_changed), &controls);
row++;
- hbox2 = gtk_hbox_new(FALSE, 6);
- gtk_table_attach(table, hbox2,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
-
- label = gtk_label_new_with_mnemonic(_("_Interpolation type:"));
- gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_box_pack_start(GTK_BOX(hbox2), label, FALSE, FALSE, 0);
-
controls.interpolation
= gwy_enum_combo_box_new(gwy_interpolation_type_get_enum(), -1,
G_CALLBACK(prof_interpolation_changed),
&controls,
controls.args->interpolation, TRUE);
- gtk_label_set_mnemonic_widget(GTK_LABEL(label), controls.interpolation);
- gtk_box_pack_end(GTK_BOX(hbox2), controls.interpolation, FALSE, FALSE, 0);
+ gwy_table_attach_adjbar(GTK_WIDGET(table), row,
+ _("_Interpolation type:"), NULL,
+ GTK_OBJECT(controls.interpolation),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
row++;
- controls.target_hbox = hbox2 = gtk_hbox_new(FALSE, 6);
- gtk_widget_set_sensitive(hbox2, !args->separate);
- gtk_table_attach(GTK_TABLE(table), hbox2,
- 0, 4, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
-
- label = gtk_label_new_with_mnemonic(_("Target _graph:"));
- gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_box_pack_start(GTK_BOX(hbox2), label, FALSE, FALSE, 0);
-
controls.target_graph = gwy_data_chooser_new_graphs();
chooser = GWY_DATA_CHOOSER(controls.target_graph);
gwy_data_chooser_set_none(chooser, _("New graph"));
@@ -318,8 +302,10 @@ prof_dialog(ProfArgs *args,
gwy_data_chooser_set_filter(chooser, filter_target_graphs, &controls, NULL);
gwy_data_chooser_set_active_id(chooser, &args->target_graph);
gwy_data_chooser_get_active_id(chooser, &args->target_graph);
- gtk_label_set_mnemonic_widget(GTK_LABEL(label), controls.target_graph);
- gtk_box_pack_end(GTK_BOX(hbox2), controls.target_graph, FALSE, FALSE, 0);
+ gwy_table_attach_adjbar(GTK_WIDGET(table), row,
+ _("Target _graph:"), NULL,
+ GTK_OBJECT(controls.target_graph),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
g_signal_connect_swapped(controls.target_graph, "changed",
G_CALLBACK(target_graph_changed), &controls);
row++;
@@ -388,7 +374,8 @@ prof_separate_changed(ProfControls *controls)
ProfArgs *args = controls->args;
args->separate
= gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(controls->separate));
- gtk_widget_set_sensitive(controls->target_hbox, !args->separate);
+ gwy_table_hscale_set_sensitive(GTK_OBJECT(controls->target_graph),
+ !args->separate);
update_target_graphs(controls);
}
diff --git a/modules/process/fft_synth.c b/modules/process/fft_synth.c
index dbcbe4d..14490ce 100644
--- a/modules/process/fft_synth.c
+++ b/modules/process/fft_synth.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: fft_synth.c 19044 2016-10-08 19:10:46Z yeti-dn $
+ * @(#) $Id: fft_synth.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2007,2009,2010,2013 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -178,12 +178,12 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Generates random surfaces using spectral synthesis."),
"Yeti <yeti at gwyddion.net>",
- "1.5",
+ "1.6",
"David Nečas (Yeti)",
"2009",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, fft_synth)
static gboolean
module_register(void)
@@ -400,7 +400,7 @@ fft_synth_dialog(FFTSynthArgs *args,
g_signal_connect_swapped(controls.dims->add, "toggled",
G_CALLBACK(fft_synth_invalidate), &controls);
- table = gtk_table_new(14 + (dfield_template ? 1 : 0), 5, FALSE);
+ table = gtk_table_new(14 + (dfield_template ? 1 : 0), 3, FALSE);
controls.table = GTK_TABLE(table);
gtk_table_set_row_spacings(controls.table, 2);
gtk_table_set_col_spacings(controls.table, 6);
@@ -415,19 +415,19 @@ fft_synth_dialog(FFTSynthArgs *args,
if (dfield_template) {
controls.sigma_init
- = gtk_button_new_with_mnemonic(_("_Like Current Channel"));
+ = gtk_button_new_with_mnemonic(_("_Like Current Image"));
g_signal_connect_swapped(controls.sigma_init, "clicked",
G_CALLBACK(sigma_init_clicked), &controls);
gtk_table_attach(GTK_TABLE(table), controls.sigma_init,
- 1, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
}
gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
controls.freq_min = gtk_adjustment_new(args->freq_min,
0.0, G_SQRT2*G_PI, 0.001, 0.1, 0);
- gwy_table_attach_hscale(table, row, _("M_inimum frequency:"),
- "px<sup>-1</sup>",
+ gwy_table_attach_adjbar(table, row,
+ _("M_inimum frequency:"), _("px<sup>-1</sup>"),
controls.freq_min, GWY_HSCALE_SQRT);
g_signal_connect_swapped(controls.freq_min, "value-changed",
G_CALLBACK(freq_min_changed), &controls);
@@ -436,18 +436,18 @@ fft_synth_dialog(FFTSynthArgs *args,
controls.freq_min_value = gtk_label_new(NULL);
gtk_misc_set_alignment(GTK_MISC(controls.freq_min_value), 1.0, 0.5);
gtk_table_attach(GTK_TABLE(table), controls.freq_min_value,
- 2, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 1, 2, row, row+1, GTK_FILL, 0, 0, 0);
controls.freq_min_units = gtk_label_new(NULL);
gtk_misc_set_alignment(GTK_MISC(controls.freq_min_units), 0.0, 0.5);
gtk_table_attach(GTK_TABLE(table), controls.freq_min_units,
- 3, 4, row, row+1, GTK_FILL, 0, 0, 0);
+ 2, 3, row, row+1, GTK_FILL, 0, 0, 0);
row++;
controls.freq_max = gtk_adjustment_new(args->freq_max,
0.0, G_SQRT2*G_PI, 0.001, 0.1, 0);
- gwy_table_attach_hscale(table, row, _("Ma_ximum frequency:"),
- "px<sup>-1</sup>",
+ gwy_table_attach_adjbar(table, row,
+ _("Ma_ximum frequency:"), _("px<sup>-1</sup>"),
controls.freq_max, GWY_HSCALE_SQRT);
g_signal_connect_swapped(controls.freq_max, "value-changed",
G_CALLBACK(freq_max_changed), &controls);
@@ -456,12 +456,12 @@ fft_synth_dialog(FFTSynthArgs *args,
controls.freq_max_value = gtk_label_new(NULL);
gtk_misc_set_alignment(GTK_MISC(controls.freq_max_value), 1.0, 0.5);
gtk_table_attach(GTK_TABLE(table), controls.freq_max_value,
- 2, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 1, 2, row, row+1, GTK_FILL, 0, 0, 0);
controls.freq_max_units = gtk_label_new(NULL);
gtk_misc_set_alignment(GTK_MISC(controls.freq_max_units), 0.0, 0.5);
gtk_table_attach(GTK_TABLE(table), controls.freq_max_units,
- 3, 4, row, row+1, GTK_FILL, 0, 0, 0);
+ 2, 3, row, row+1, GTK_FILL, 0, 0, 0);
gtk_table_set_row_spacing(GTK_TABLE(table), row, 8);
row++;
@@ -470,7 +470,7 @@ fft_synth_dialog(FFTSynthArgs *args,
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.gauss_enable),
args->gauss_enable);
gtk_table_attach(GTK_TABLE(table), controls.gauss_enable,
- 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect_swapped(controls.gauss_enable, "toggled",
G_CALLBACK(gauss_enable_changed), &controls);
row++;
@@ -493,7 +493,7 @@ fft_synth_dialog(FFTSynthArgs *args,
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.lorentz_enable),
args->lorentz_enable);
gtk_table_attach(GTK_TABLE(table), controls.lorentz_enable,
- 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect_swapped(controls.lorentz_enable, "toggled",
G_CALLBACK(lorentz_enable_changed), &controls);
row++;
@@ -523,7 +523,7 @@ fft_synth_dialog(FFTSynthArgs *args,
controls.power_p = gtk_adjustment_new(args->power_p,
0.0, 5.0, 0.01, 0.1, 0);
- spin = gwy_table_attach_hscale(table, row, _("Po_wer:"), NULL,
+ spin = gwy_table_attach_adjbar(table, row, _("Po_wer:"), NULL,
controls.power_p, 0);
gtk_spin_button_set_snap_to_ticks(GTK_SPIN_BUTTON(spin), FALSE);
gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 3);
@@ -843,7 +843,7 @@ fft_synth_do(const FFTSynthArgs *args,
gdouble y = (i <= yres/2 ? i : yres-i)/(0.5*yres);
for (j = 0; j < xres; j++) {
gdouble x = (j <= xres/2 ? j : xres-j)/(0.5*xres);
- gdouble r = hypot(x, y);
+ gdouble r = sqrt(x*x + y*y);
if (r < freq_min || r > freq_max) {
/* XXX: This is necessary for stability! */
diff --git a/modules/process/fibre_synth.c b/modules/process/fibre_synth.c
new file mode 100644
index 0000000..627119f
--- /dev/null
+++ b/modules/process/fibre_synth.c
@@ -0,0 +1,1617 @@
+/*
+ * @(#) $Id: fibre_synth.c 20267 2017-08-14 11:07:02Z yeti-dn $
+ * Copyright (C) 2009-2017 David Necas (Yeti).
+ * E-mail: yeti at gwyddion.net.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "config.h"
+#include <string.h>
+#include <gtk/gtk.h>
+#include <libgwyddion/gwymacros.h>
+#include <libgwyddion/gwymath.h>
+#include <libgwyddion/gwyrandgenset.h>
+#include <libprocess/stats.h>
+#include <libprocess/arithmetic.h>
+#include <libprocess/spline.h>
+#include <libgwydgets/gwystock.h>
+#include <libgwymodule/gwymodule-process.h>
+#include <app/gwyapp.h>
+#include "dimensions.h"
+#include "preview.h"
+
+#define FIBRE_SYNTH_RUN_MODES (GWY_RUN_IMMEDIATE | GWY_RUN_INTERACTIVE)
+
+/* Large spline oversampling is OK because straight segments converge very
+ * quickly so we only get substantial oversampling in sharp turns – and we want
+ * it there. */
+#define OVERSAMPLE 12.0
+
+/* Always consume this many random numbers from RNG_DEFORM when creating
+ * a spline for generator stability. */
+enum {
+ FIBRE_MAX_POINTS = 80,
+};
+
+enum {
+ PAGE_DIMENSIONS = 0,
+ PAGE_GENERATOR = 1,
+ PAGE_PLACEMENT = 2,
+ PAGE_NPAGES
+};
+
+typedef enum {
+ RNG_WIDTH,
+ RNG_HEIGHT,
+ RNG_POSITION,
+ RNG_ANGLE,
+ RNG_HTRUNC,
+ RNG_DEFORM,
+ RNG_SEGVAR,
+ RNG_NRNGS
+} FibreSynthRng;
+
+typedef enum {
+ FIBRE_SYNTH_CIRCLE = 0,
+ FIBRE_SYNTH_TRIANGLE = 1,
+ FIBRE_SYNTH_SQUARE = 2,
+ FIBRE_SYNTH_PARABOLA = 3,
+ FIBRE_SYNTH_QUADRATIC = 4,
+ FIBRE_SYNTH_NTYPES
+} FibreSynthType;
+
+typedef struct _FibreSynthControls FibreSynthControls;
+
+typedef struct {
+ guint size;
+ guint len;
+ gint *data;
+} IntList;
+
+typedef struct {
+ gdouble u;
+ gdouble wfactor;
+ gdouble hfactor;
+} FibreSegmentVar;
+
+typedef gdouble (*FibreShapeFunc)(gdouble v);
+
+/* This scheme makes the object type list easily reordeable in the GUI without
+ * changing the ids. */
+typedef struct {
+ FibreSynthType type;
+ const gchar *name;
+} FibreSynthFeature;
+
+typedef struct {
+ gint active_page;
+ gint seed;
+ gboolean randomize;
+ gboolean update;
+ FibreSynthType type;
+ gdouble coverage;
+ gdouble width;
+ gdouble width_noise;
+ gdouble width_var;
+ gdouble height;
+ gboolean height_bound;
+ gdouble height_noise;
+ gdouble height_var;
+ gdouble htrunc;
+ gdouble htrunc_noise;
+ gdouble angle;
+ gdouble angle_noise;
+ gdouble latdeform;
+ gdouble latdeform_noise;
+ gdouble lendeform;
+ gdouble lendeform_noise;
+ gdouble deform_density;
+} FibreSynthArgs;
+
+struct _FibreSynthControls {
+ FibreSynthArgs *args;
+ GwyDimensions *dims;
+ GwyRandGenSet *rngset;
+ GtkWidget *dialog;
+ GtkWidget *view;
+ GtkWidget *update;
+ GtkWidget *update_now;
+ GtkObject *seed;
+ GtkWidget *randomize;
+ GtkTable *table;
+ GtkWidget *type;
+ GtkObject *coverage;
+ GtkWidget *coverage_value;
+ GtkWidget *coverage_units;
+ GtkObject *width;
+ GtkWidget *width_value;
+ GtkWidget *width_units;
+ GtkObject *width_noise;
+ GtkObject *width_var;
+ GtkObject *height;
+ GtkWidget *height_units;
+ GtkWidget *height_init;
+ GtkWidget *height_bound;
+ GtkObject *height_noise;
+ GtkObject *height_var;
+ GtkObject *htrunc;
+ GtkObject *htrunc_noise;
+ GtkObject *angle;
+ GtkObject *angle_noise;
+ GtkObject *latdeform;
+ GtkObject *latdeform_noise;
+ GtkObject *lendeform;
+ GtkObject *lendeform_noise;
+ GtkObject *deform_density;
+ GwyContainer *mydata;
+ GwyDataField *surface;
+ gdouble pxsize;
+ gdouble zscale;
+ gboolean in_init;
+ gulong sid;
+};
+
+static gboolean module_register (void);
+static void fibre_synth (GwyContainer *data,
+ GwyRunType run);
+static void run_noninteractive (FibreSynthArgs *args,
+ const GwyDimensionArgs *dimsargs,
+ GwyRandGenSet *rngset,
+ GwyContainer *data,
+ GwyDataField *dfield,
+ gint oldid,
+ GQuark quark);
+static gboolean fibre_synth_dialog (FibreSynthArgs *args,
+ GwyDimensionArgs *dimsargs,
+ GwyRandGenSet *rngset,
+ GwyContainer *data,
+ GwyDataField *dfield,
+ gint id);
+static GtkWidget* shape_selector_new (FibreSynthControls *controls);
+static void update_controls (FibreSynthControls *controls,
+ FibreSynthArgs *args);
+static void page_switched (FibreSynthControls *controls,
+ GtkNotebookPage *page,
+ gint pagenum);
+static void update_values (FibreSynthControls *controls);
+static void shape_selected (GtkComboBox *combo,
+ FibreSynthControls *controls);
+static void height_init_clicked (FibreSynthControls *controls);
+static void update_coverage_value (FibreSynthControls *controls);
+static gint attach_deformation (FibreSynthControls *controls,
+ const gchar *name,
+ gint row,
+ GtkObject **adj,
+ gdouble *target);
+static gint attach_segvar (FibreSynthControls *controls,
+ gint row,
+ GtkObject **adj,
+ gdouble *target);
+static void fibre_synth_invalidate(FibreSynthControls *controls);
+static gboolean preview_gsource (gpointer user_data);
+static void preview (FibreSynthControls *controls);
+static gboolean fibre_synth_do (const FibreSynthArgs *args,
+ const GwyDimensionArgs *dimsargs,
+ GwyRandGenSet *rngset,
+ GwyDataField *dfield,
+ GwySetMessageFunc set_message,
+ GwySetFractionFunc set_fraction);
+static void fibre_synth_add_one (GwyDataField *surface,
+ GwyDataField *fibre,
+ GwyDataField *ucoord,
+ IntList *usedpts,
+ GwySpline *spline,
+ GArray *segvar,
+ const FibreSynthArgs *args,
+ const GwyDimensionArgs *dimsargs,
+ GwyRandGenSet *rngset);
+static glong calculate_n_fibres (const FibreSynthArgs *args,
+ guint xres,
+ guint yres);
+static void fibre_synth_load_args (GwyContainer *container,
+ FibreSynthArgs *args,
+ GwyDimensionArgs *dimsargs);
+static void fibre_synth_save_args (GwyContainer *container,
+ const FibreSynthArgs *args,
+ const GwyDimensionArgs *dimsargs);
+
+#define GWY_SYNTH_CONTROLS FibreSynthControls
+#define GWY_SYNTH_INVALIDATE(controls) \
+ update_coverage_value(controls); \
+ fibre_synth_invalidate(controls)
+
+#include "synth.h"
+
+static const FibreSynthArgs fibre_synth_defaults = {
+ PAGE_DIMENSIONS,
+ 42, TRUE, TRUE,
+ FIBRE_SYNTH_CIRCLE,
+ 0.5,
+ 5.0, 0.0, 0.0,
+ 1.0, TRUE, 0.0, 0.0,
+ 1.0, 0.0,
+ 0.0, 0.0,
+ 0.1, 0.0,
+ 0.05, 0.0,
+ 5.0,
+};
+
+static const GwyDimensionArgs dims_defaults = GWY_DIMENSION_ARGS_INIT;
+
+static const FibreSynthFeature features[] = {
+ { FIBRE_SYNTH_CIRCLE, N_("Semi-circle"), },
+ { FIBRE_SYNTH_TRIANGLE, N_("Triangle"), },
+ { FIBRE_SYNTH_SQUARE, N_("Rectangle"), },
+ { FIBRE_SYNTH_PARABOLA, N_("Parabola"), },
+ { FIBRE_SYNTH_QUADRATIC, N_("Quadratic spline"), },
+};
+
+static GwyModuleInfo module_info = {
+ GWY_MODULE_ABI_VERSION,
+ &module_register,
+ N_("Generates surfaces composed from randomly placed fibers."),
+ "Yeti <yeti at gwyddion.net>",
+ "1.0",
+ "David Nečas (Yeti)",
+ "2017",
+};
+
+GWY_MODULE_QUERY2(module_info, fibre_synth)
+
+static gboolean
+module_register(void)
+{
+ gwy_process_func_register("fibre_synth",
+ (GwyProcessFunc)&fibre_synth,
+ N_("/S_ynthetic/_Deposition/_Fibers..."),
+ GWY_STOCK_SYNTHETIC_FIBRES,
+ FIBRE_SYNTH_RUN_MODES,
+ 0,
+ N_("Generate surface of randomly placed fibers"));
+
+ return TRUE;
+}
+
+static void
+fibre_synth(GwyContainer *data, GwyRunType run)
+{
+ FibreSynthArgs args;
+ GwyDimensionArgs dimsargs;
+ GwyRandGenSet *rngset;
+ GwyDataField *dfield;
+ GQuark quark;
+ gint id;
+
+ g_return_if_fail(run & FIBRE_SYNTH_RUN_MODES);
+ fibre_synth_load_args(gwy_app_settings_get(), &args, &dimsargs);
+ gwy_app_data_browser_get_current(GWY_APP_DATA_FIELD, &dfield,
+ GWY_APP_DATA_FIELD_ID, &id,
+ GWY_APP_DATA_FIELD_KEY, &quark,
+ 0);
+
+ rngset = gwy_rand_gen_set_new(RNG_NRNGS);
+ if (run == GWY_RUN_IMMEDIATE
+ || fibre_synth_dialog(&args, &dimsargs, rngset, data, dfield, id))
+ run_noninteractive(&args, &dimsargs, rngset, data, dfield, id, quark);
+
+ if (run == GWY_RUN_INTERACTIVE)
+ fibre_synth_save_args(gwy_app_settings_get(), &args, &dimsargs);
+
+ gwy_rand_gen_set_free(rngset);
+ gwy_dimensions_free_args(&dimsargs);
+}
+
+static void
+run_noninteractive(FibreSynthArgs *args,
+ const GwyDimensionArgs *dimsargs,
+ GwyRandGenSet *rngset,
+ GwyContainer *data,
+ GwyDataField *dfield,
+ gint oldid,
+ GQuark quark)
+{
+ GwyDataField *newfield;
+ GwySIUnit *siunit;
+ gboolean replace = dimsargs->replace && dfield;
+ gboolean add = dimsargs->add && dfield;
+ gboolean ok;
+ gint newid;
+
+ if (args->randomize)
+ args->seed = g_random_int() & 0x7fffffff;
+
+ if (add || replace) {
+ if (add)
+ newfield = gwy_data_field_duplicate(dfield);
+ else
+ newfield = gwy_data_field_new_alike(dfield, TRUE);
+ }
+ else {
+ gdouble mag = pow10(dimsargs->xypow10) * dimsargs->measure;
+ newfield = gwy_data_field_new(dimsargs->xres, dimsargs->yres,
+ mag*dimsargs->xres, mag*dimsargs->yres,
+ TRUE);
+
+ siunit = gwy_data_field_get_si_unit_xy(newfield);
+ gwy_si_unit_set_from_string(siunit, dimsargs->xyunits);
+
+ siunit = gwy_data_field_get_si_unit_z(newfield);
+ gwy_si_unit_set_from_string(siunit, dimsargs->zunits);
+ }
+
+ gwy_app_wait_start(gwy_app_find_window_for_channel(data, oldid),
+ _("Initializing..."));
+ ok = fibre_synth_do(args, dimsargs, rngset, newfield,
+ gwy_app_wait_set_message, gwy_app_wait_set_fraction);
+ gwy_app_wait_finish();
+
+ if (!ok) {
+ g_object_unref(newfield);
+ return;
+ }
+
+ if (replace) {
+ gwy_app_undo_qcheckpointv(data, 1, &quark);
+ gwy_container_set_object(data, gwy_app_get_data_key_for_id(oldid),
+ newfield);
+ gwy_app_channel_log_add_proc(data, oldid, oldid);
+ g_object_unref(newfield);
+ newid = oldid;
+ }
+ else {
+ if (data) {
+ newid = gwy_app_data_browser_add_data_field(newfield, data, TRUE);
+ if (oldid != -1)
+ gwy_app_sync_data_items(data, data, oldid, newid, FALSE,
+ GWY_DATA_ITEM_GRADIENT,
+ 0);
+ }
+ else {
+ newid = 0;
+ data = gwy_container_new();
+ gwy_container_set_object(data, gwy_app_get_data_key_for_id(newid),
+ newfield);
+ gwy_app_data_browser_add(data);
+ gwy_app_data_browser_reset_visibility(data,
+ GWY_VISIBILITY_RESET_SHOW_ALL);
+ g_object_unref(data);
+ }
+
+ gwy_app_set_data_field_title(data, newid, _("Generated"));
+ gwy_app_channel_log_add_proc(data, add ? oldid : -1, newid);
+ g_object_unref(newfield);
+ }
+}
+
+static gboolean
+fibre_synth_dialog(FibreSynthArgs *args,
+ GwyDimensionArgs *dimsargs,
+ GwyRandGenSet *rngset,
+ GwyContainer *data,
+ GwyDataField *dfield_template,
+ gint id)
+{
+ GtkWidget *dialog, *table, *vbox, *hbox, *notebook;
+ FibreSynthControls controls;
+ GwyDataField *dfield;
+ gboolean finished;
+ gint response;
+ gint row;
+
+ gwy_clear(&controls, 1);
+ controls.in_init = TRUE;
+ controls.args = args;
+ controls.rngset = rngset;
+ controls.pxsize = 1.0;
+ dialog = gtk_dialog_new_with_buttons(_("Random Fibers"),
+ NULL, 0,
+ _("_Reset"), RESPONSE_RESET,
+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+ GTK_STOCK_OK, GTK_RESPONSE_OK,
+ NULL);
+ gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK);
+ gwy_help_add_to_proc_dialog(GTK_DIALOG(dialog), GWY_HELP_DEFAULT);
+ controls.dialog = dialog;
+
+ hbox = gtk_hbox_new(FALSE, 2);
+ gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), hbox,
+ FALSE, FALSE, 4);
+
+ vbox = gtk_vbox_new(FALSE, 4);
+ gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 4);
+
+ controls.mydata = gwy_container_new();
+ dfield = gwy_data_field_new(PREVIEW_SIZE, PREVIEW_SIZE,
+ dimsargs->measure*PREVIEW_SIZE,
+ dimsargs->measure*PREVIEW_SIZE,
+ TRUE);
+ gwy_container_set_object_by_name(controls.mydata, "/0/data", dfield);
+ if (dfield_template) {
+ gwy_app_sync_data_items(data, controls.mydata, id, 0, FALSE,
+ GWY_DATA_ITEM_PALETTE,
+ 0);
+ controls.surface = gwy_synth_surface_for_preview(dfield_template,
+ PREVIEW_SIZE);
+ controls.zscale = 3.0*gwy_data_field_get_rms(dfield_template);
+ }
+ controls.view = create_preview(controls.mydata, 0, PREVIEW_SIZE, FALSE);
+ gtk_box_pack_start(GTK_BOX(vbox), controls.view, FALSE, FALSE, 0);
+
+ gtk_box_pack_start(GTK_BOX(vbox),
+ gwy_synth_instant_updates_new(&controls,
+ &controls.update_now,
+ &controls.update,
+ &args->update),
+ FALSE, FALSE, 0);
+ g_signal_connect_swapped(controls.update_now, "clicked",
+ G_CALLBACK(preview), &controls);
+
+ gtk_box_pack_start(GTK_BOX(vbox),
+ gwy_synth_random_seed_new(&controls,
+ &controls.seed, &args->seed),
+ FALSE, FALSE, 0);
+
+ controls.randomize = gwy_synth_randomize_new(&args->randomize);
+ gtk_box_pack_start(GTK_BOX(vbox), controls.randomize, FALSE, FALSE, 0);
+
+ notebook = gtk_notebook_new();
+ gtk_box_pack_start(GTK_BOX(hbox), notebook, TRUE, TRUE, 4);
+ g_signal_connect_swapped(notebook, "switch-page",
+ G_CALLBACK(page_switched), &controls);
+
+ controls.dims = gwy_dimensions_new(dimsargs, dfield_template);
+ gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
+ gwy_dimensions_get_widget(controls.dims),
+ gtk_label_new(_("Dimensions")));
+ if (controls.dims->add)
+ g_signal_connect_swapped(controls.dims->add, "toggled",
+ G_CALLBACK(fibre_synth_invalidate), &controls);
+
+ table = gtk_table_new(15 + (dfield_template ? 1 : 0), 3, FALSE);
+ controls.table = GTK_TABLE(table);
+ gtk_table_set_row_spacings(GTK_TABLE(table), 2);
+ gtk_table_set_col_spacings(GTK_TABLE(table), 6);
+ gtk_container_set_border_width(GTK_CONTAINER(table), 4);
+ gtk_notebook_append_page(GTK_NOTEBOOK(notebook), table,
+ gtk_label_new(_("Generator")));
+ row = 0;
+
+ controls.type = shape_selector_new(&controls);
+ gwy_table_attach_adjbar(table, row, _("_Shape:"), NULL,
+ GTK_OBJECT(controls.type),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
+ row++;
+
+ controls.coverage = gtk_adjustment_new(args->coverage,
+ 0.001, 20.0, 0.001, 1.0, 0);
+ g_object_set_data(G_OBJECT(controls.coverage), "target", &args->coverage);
+ gwy_table_attach_adjbar(table, row, _("Co_verage:"), NULL,
+ controls.coverage, GWY_HSCALE_SQRT);
+ g_signal_connect_swapped(controls.coverage, "value-changed",
+ G_CALLBACK(gwy_synth_double_changed), &controls);
+ row++;
+
+ controls.coverage_value = gtk_label_new(NULL);
+ gtk_misc_set_alignment(GTK_MISC(controls.coverage_value), 1.0, 0.5);
+ gtk_table_attach(controls.table, controls.coverage_value,
+ 1, 2, row, row+1, GTK_FILL, 0, 0, 0);
+
+ controls.coverage_units = gtk_label_new(_("obj."));
+ gtk_misc_set_alignment(GTK_MISC(controls.coverage_units), 0.0, 0.5);
+ gtk_table_attach(GTK_TABLE(table), controls.coverage_units,
+ 2, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ gtk_table_set_row_spacing(GTK_TABLE(table), row, 8);
+ row++;
+
+ gtk_table_attach(GTK_TABLE(table), gwy_label_new_header(_("Size")),
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
+ row++;
+
+ controls.width = gtk_adjustment_new(args->width, 1.0, 1000.0, 0.1, 10.0, 0);
+ row = gwy_synth_attach_lateral(&controls, row, controls.width, &args->width,
+ _("_Width:"), GWY_HSCALE_LOG, NULL,
+ &controls.width_value,
+ &controls.width_units);
+ row = gwy_synth_attach_variance(&controls, row,
+ &controls.width_noise, &args->width_noise);
+ row = attach_segvar(&controls, row, &controls.width_var, &args->width_var);
+
+ gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
+ gtk_table_attach(GTK_TABLE(table), gwy_label_new_header(_("Height")),
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
+ row++;
+
+ row = gwy_synth_attach_height(&controls, row,
+ &controls.height, &args->height,
+ _("_Height:"), NULL, &controls.height_units);
+
+ if (dfield_template) {
+ controls.height_init
+ = gtk_button_new_with_mnemonic(_("_Like Current Image"));
+ g_signal_connect_swapped(controls.height_init, "clicked",
+ G_CALLBACK(height_init_clicked), &controls);
+ gtk_table_attach(GTK_TABLE(table), controls.height_init,
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
+ row++;
+ }
+
+ controls.height_bound
+ = gtk_check_button_new_with_mnemonic(_("Scales _with width"));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.height_bound),
+ args->height_bound);
+ g_object_set_data(G_OBJECT(controls.height_bound),
+ "target", &args->height_bound);
+ gtk_table_attach(GTK_TABLE(table), controls.height_bound,
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
+ g_signal_connect_swapped(controls.height_bound, "toggled",
+ G_CALLBACK(gwy_synth_boolean_changed), &controls);
+ row++;
+
+ row = gwy_synth_attach_variance(&controls, row,
+ &controls.height_noise,
+ &args->height_noise);
+ row = attach_segvar(&controls, row, &controls.height_var,
+ &args->height_var);
+
+ row = gwy_synth_attach_truncation(&controls, row,
+ &controls.htrunc, &args->htrunc);
+ row = gwy_synth_attach_variance(&controls, row,
+ &controls.htrunc_noise,
+ &args->htrunc_noise);
+
+ table = gtk_table_new(8, 3, FALSE);
+ controls.table = GTK_TABLE(table);
+ gtk_table_set_row_spacings(GTK_TABLE(table), 2);
+ gtk_table_set_col_spacings(GTK_TABLE(table), 6);
+ gtk_container_set_border_width(GTK_CONTAINER(table), 4);
+ gtk_notebook_append_page(GTK_NOTEBOOK(notebook), table,
+ gtk_label_new(_("Placement")));
+ row = 0;
+
+ row = gwy_synth_attach_orientation(&controls, row,
+ &controls.angle, &args->angle);
+ row = gwy_synth_attach_variance(&controls, row,
+ &controls.angle_noise, &args->angle_noise);
+
+ gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
+ gtk_table_attach(GTK_TABLE(table), gwy_label_new_header(_("Deformation")),
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
+ row++;
+
+ controls.deform_density
+ = gtk_adjustment_new(args->deform_density,
+ 0.5, FIBRE_MAX_POINTS - 1.0, 0.01, 1.0, 0.0);
+ g_object_set_data(G_OBJECT(controls.deform_density), "target",
+ &args->deform_density);
+ gwy_table_attach_adjbar(table, row, _("Densi_ty:"), NULL,
+ controls.deform_density, GWY_HSCALE_SQRT);
+ g_signal_connect_swapped(controls.deform_density, "value-changed",
+ G_CALLBACK(gwy_synth_double_changed), &controls);
+ row++;
+
+ gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
+ row = attach_deformation(&controls, _("_Lateral:"), row,
+ &controls.latdeform, &args->latdeform);
+ row = gwy_synth_attach_variance(&controls, row,
+ &controls.latdeform_noise,
+ &args->latdeform_noise);
+
+ gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
+ row = attach_deformation(&controls, _("Le_ngthwise:"), row,
+ &controls.lendeform, &args->lendeform);
+ row = gwy_synth_attach_variance(&controls, row,
+ &controls.lendeform_noise,
+ &args->lendeform_noise);
+
+ gtk_widget_show_all(dialog);
+ controls.in_init = FALSE;
+ /* Must be done when widgets are shown, see GtkNotebook docs */
+ gtk_notebook_set_current_page(GTK_NOTEBOOK(notebook), args->active_page);
+ update_values(&controls);
+ fibre_synth_invalidate(&controls);
+
+ finished = FALSE;
+ while (!finished) {
+ response = gtk_dialog_run(GTK_DIALOG(dialog));
+ switch (response) {
+ case GTK_RESPONSE_CANCEL:
+ case GTK_RESPONSE_DELETE_EVENT:
+ case GTK_RESPONSE_OK:
+ gtk_widget_destroy(dialog);
+ case GTK_RESPONSE_NONE:
+ finished = TRUE;
+ break;
+
+ case RESPONSE_RESET:
+ {
+ gboolean temp = args->update;
+ gint temp2 = args->active_page;
+ *args = fibre_synth_defaults;
+ args->active_page = temp2;
+ args->update = temp;
+ }
+ controls.in_init = TRUE;
+ update_controls(&controls, args);
+ controls.in_init = FALSE;
+ if (args->update)
+ preview(&controls);
+ break;
+
+ default:
+ g_assert_not_reached();
+ break;
+ }
+ }
+
+ if (controls.sid) {
+ g_source_remove(controls.sid);
+ controls.sid = 0;
+ }
+ g_object_unref(controls.mydata);
+ GWY_OBJECT_UNREF(controls.surface);
+ gwy_dimensions_free(controls.dims);
+
+ return response == GTK_RESPONSE_OK;
+}
+
+static GtkWidget*
+shape_selector_new(FibreSynthControls *controls)
+{
+ GtkWidget *combo;
+ GwyEnum *model;
+ guint n, i;
+
+ n = G_N_ELEMENTS(features);
+ model = g_new(GwyEnum, n);
+ for (i = 0; i < n; i++) {
+ model[i].value = features[i].type;
+ model[i].name = features[i].name;
+ }
+
+ combo = gwy_enum_combo_box_new(model, n,
+ G_CALLBACK(shape_selected), controls,
+ controls->args->type, TRUE);
+ g_object_weak_ref(G_OBJECT(combo), (GWeakNotify)g_free, model);
+
+ return combo;
+}
+
+static void
+update_controls(FibreSynthControls *controls,
+ FibreSynthArgs *args)
+{
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls->update),
+ args->update);
+ gtk_adjustment_set_value(GTK_ADJUSTMENT(controls->seed), args->seed);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls->randomize),
+ args->randomize);
+ gtk_adjustment_set_value(GTK_ADJUSTMENT(controls->coverage),
+ args->coverage);
+ gtk_adjustment_set_value(GTK_ADJUSTMENT(controls->width), args->width);
+ gtk_adjustment_set_value(GTK_ADJUSTMENT(controls->width_noise),
+ args->width_noise);
+ gtk_adjustment_set_value(GTK_ADJUSTMENT(controls->height), args->height);
+ gtk_adjustment_set_value(GTK_ADJUSTMENT(controls->height_noise),
+ args->height_noise);
+ gtk_adjustment_set_value(GTK_ADJUSTMENT(controls->htrunc), args->htrunc);
+ gtk_adjustment_set_value(GTK_ADJUSTMENT(controls->htrunc_noise),
+ args->htrunc_noise);
+ gtk_adjustment_set_value(GTK_ADJUSTMENT(controls->angle), args->angle);
+ gtk_adjustment_set_value(GTK_ADJUSTMENT(controls->angle_noise),
+ args->angle_noise);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls->height_bound),
+ args->height_bound);
+ gwy_enum_combo_box_set_active(GTK_COMBO_BOX(controls->type), args->type);
+}
+
+static void
+page_switched(FibreSynthControls *controls,
+ G_GNUC_UNUSED GtkNotebookPage *page,
+ gint pagenum)
+{
+ if (controls->in_init)
+ return;
+
+ controls->args->active_page = pagenum;
+ if (pagenum == PAGE_GENERATOR)
+ update_values(controls);
+}
+
+static void
+update_values(FibreSynthControls *controls)
+{
+ GwyDimensions *dims = controls->dims;
+
+ controls->pxsize = dims->args->measure * pow10(dims->args->xypow10);
+ if (controls->height_units)
+ gtk_label_set_markup(GTK_LABEL(controls->height_units),
+ dims->zvf->units);
+ gtk_label_set_markup(GTK_LABEL(controls->width_units),
+ dims->xyvf->units);
+
+ gwy_synth_update_lateral(controls, GTK_ADJUSTMENT(controls->width));
+ update_coverage_value(controls);
+}
+
+static void
+shape_selected(GtkComboBox *combo,
+ FibreSynthControls *controls)
+{
+ controls->args->type = gwy_enum_combo_box_get_active(combo);
+ update_coverage_value(controls);
+ fibre_synth_invalidate(controls);
+}
+
+static void
+height_init_clicked(FibreSynthControls *controls)
+{
+ gdouble mag = pow10(controls->dims->args->zpow10);
+ gtk_adjustment_set_value(GTK_ADJUSTMENT(controls->height),
+ controls->zscale/mag);
+}
+
+static void
+update_coverage_value(FibreSynthControls *controls)
+{
+ glong nobjects;
+ guchar buf[32];
+
+ if (controls->in_init)
+ return;
+
+ nobjects = calculate_n_fibres(controls->args,
+ controls->dims->args->xres,
+ controls->dims->args->yres);
+ g_snprintf(buf, sizeof(buf), "%ld", nobjects);
+ gtk_label_set_text(GTK_LABEL(controls->coverage_value), buf);
+}
+
+static gint
+attach_deformation(FibreSynthControls *controls,
+ const gchar *name,
+ gint row,
+ GtkObject **adj,
+ gdouble *target)
+{
+ GtkWidget *spin;
+
+ *adj = gtk_adjustment_new(*target, 0.0, 1.0, 0.001, 0.1, 0);
+ g_object_set_data(G_OBJECT(*adj), "target", target);
+
+ spin = gwy_table_attach_adjbar(GTK_WIDGET(controls->table),
+ row, name, NULL, *adj,
+ GWY_HSCALE_SQRT);
+ gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 3);
+ g_signal_connect_swapped(*adj, "value-changed",
+ G_CALLBACK(gwy_synth_double_changed), controls);
+
+ row++;
+
+ return row;
+}
+
+static gint
+attach_segvar(FibreSynthControls *controls,
+ gint row,
+ GtkObject **adj,
+ gdouble *target)
+{
+ GtkWidget *spin;
+
+ *adj = gtk_adjustment_new(*target, 0.0, 1.0, 0.001, 0.1, 0);
+ g_object_set_data(G_OBJECT(*adj), "target", target);
+
+ spin = gwy_table_attach_adjbar(GTK_WIDGET(controls->table),
+ row, _("Along fiber:"), NULL, *adj,
+ GWY_HSCALE_SQRT);
+ gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 3);
+ g_signal_connect_swapped(*adj, "value-changed",
+ G_CALLBACK(gwy_synth_double_changed), controls);
+
+ row++;
+
+ return row;
+}
+
+static void
+fibre_synth_invalidate(FibreSynthControls *controls)
+{
+ /* create preview if instant updates are on */
+ if (controls->args->update && !controls->in_init && !controls->sid) {
+ controls->sid = g_idle_add_full(G_PRIORITY_LOW, preview_gsource,
+ controls, NULL);
+ }
+}
+
+static gboolean
+preview_gsource(gpointer user_data)
+{
+ FibreSynthControls *controls = (FibreSynthControls*)user_data;
+ controls->sid = 0;
+
+ preview(controls);
+
+ return FALSE;
+}
+
+static void
+preview(FibreSynthControls *controls)
+{
+ FibreSynthArgs *args = controls->args;
+ GwyDataField *dfield;
+ gboolean ok;
+
+ dfield = GWY_DATA_FIELD(gwy_container_get_object_by_name(controls->mydata,
+ "/0/data"));
+ if (controls->dims->args->add && controls->surface)
+ gwy_data_field_copy(controls->surface, dfield, FALSE);
+ else
+ gwy_data_field_clear(dfield);
+
+ if (args->update) {
+ fibre_synth_do(args, controls->dims->args, controls->rngset, dfield,
+ NULL, NULL);
+ gwy_data_field_data_changed(dfield);
+ return;
+ }
+
+ gwy_app_wait_start(GTK_WINDOW(controls->dialog), _("Initializing..."));
+ ok = fibre_synth_do(args, controls->dims->args, controls->rngset, dfield,
+ gwy_app_wait_set_message, gwy_app_wait_set_fraction);
+ gwy_app_wait_finish();
+
+ if (!ok) {
+ if (controls->dims->args->add && controls->surface)
+ gwy_data_field_copy(controls->surface, dfield, FALSE);
+ else
+ gwy_data_field_clear(dfield);
+ }
+ gwy_data_field_data_changed(dfield);
+}
+
+static inline IntList*
+int_list_new(guint prealloc)
+{
+ IntList *list = g_slice_new0(IntList);
+ prealloc = MAX(prealloc, 16);
+ list->size = prealloc;
+ list->data = g_new(gint, list->size);
+ return list;
+}
+
+static inline void
+int_list_add(IntList *list, gint i)
+{
+ if (G_UNLIKELY(list->len == list->size)) {
+ list->size = MAX(2*list->size, 16);
+ list->data = g_renew(gint, list->data, list->size);
+ }
+
+ list->data[list->len] = i;
+ list->len++;
+}
+
+static inline void
+int_list_free(IntList *list)
+{
+ g_free(list->data);
+ g_slice_free(IntList, list);
+}
+
+static inline GwyXY
+vecdiff(const GwyXY *a, const GwyXY *b)
+{
+ GwyXY r;
+
+ r.x = a->x - b->x;
+ r.y = a->y - b->y;
+
+ return r;
+}
+
+static inline GwyXY
+veclincomb(const GwyXY *a, gdouble qa, const GwyXY *b, gdouble qb)
+{
+ GwyXY r;
+
+ r.x = qa*a->x + qb*b->x;
+ r.y = qa*a->y + qb*b->y;
+
+ return r;
+}
+
+static inline gdouble
+dotprod(const GwyXY *a, const GwyXY *b)
+{
+ return a->x*b->x + a->y*b->y;
+}
+
+static inline gdouble
+vecnorm2(const GwyXY *a)
+{
+ return a->x*a->x + a->y*a->y;
+}
+
+static inline gdouble
+vecprodz(const GwyXY *a, const GwyXY *b)
+{
+ return a->x*b->y - a->y*b->x;
+}
+
+static void
+order_trapezoid_vertically(const GwyXY *p, const GwyXY *q,
+ const GwyXY *pp, const GwyXY *qq,
+ const GwyXY **top, const GwyXY **m1,
+ const GwyXY **m2, const GwyXY **bottom)
+{
+ const GwyXY *pts[4];
+ guint i, j;
+
+ pts[0] = p;
+ pts[1] = q;
+ pts[2] = pp;
+ pts[3] = qq;
+ for (i = 0; i < 3; i++) {
+ for (j = i; j < 4; j++) {
+ if (pts[i]->y > pts[j]->y
+ || (pts[i]->y == pts[j]->y && pts[i]->x == pts[j]->x))
+ GWY_SWAP(const GwyXY*, pts[i], pts[j]);
+ }
+ }
+
+ *top = pts[0];
+ *m1 = pts[1];
+ *m2 = pts[2];
+ *bottom = pts[3];
+}
+
+static void
+fill_vsegment(const GwyXY *lfrom, const GwyXY *lto,
+ const GwyXY *rfrom, const GwyXY *rto,
+ gdouble *fdata, gdouble *udata, gint xres, gint yres,
+ gint ifrom, gint ito,
+ const GwyXY *r, const GwyXY *rp, const GwyXY *rq, const GwyXY *d,
+ gdouble wp, gdouble wq, gdouble lp, gdouble lq,
+ gboolean positive,
+ IntList *usedpts)
+{
+ gdouble denoml, denomr;
+ gint i, j, jfrom, jto, jleftlim, jrightlim;
+ gdouble tl, tr, u, v, s, w, dnorm;
+ gdouble *frow, *urow;
+ GwyXY pt, rr;
+
+ dnorm = vecnorm2(d);
+ denoml = MAX(lto->y - lfrom->y, 1e-9);
+ denomr = MAX(rto->y - rfrom->y, 1e-9);
+
+ jleftlim = (gint)floor(fmin(lfrom->x, lto->x) - 1.0);
+ jleftlim = MAX(jleftlim, 0);
+ jrightlim = (gint)ceil(fmax(rfrom->x, rto->x) + 1.0);
+ jrightlim = MIN(jrightlim, xres-1);
+
+ for (i = ifrom; i <= ito; i++) {
+ tl = (i - lfrom->y)/denoml;
+ jfrom = (gint)floor(tl*lto->x + (1.0 - tl)*lfrom->x);
+ jfrom = MAX(jfrom, jleftlim);
+
+ tr = (i - rfrom->y)/denomr;
+ jto = (gint)ceil(tr*rto->x + (1.0 - tr)*rfrom->x);
+ jto = MIN(jto, jrightlim);
+
+ pt.y = i - r->y;
+ frow = fdata + i*xres;
+ urow = udata + i*xres;
+ g_assert_cmpint(i, >=, 0);
+ g_assert_cmpint(i, <, yres);
+ for (j = jfrom; j <= jto; j++) {
+ pt.x = j - r->x;
+ /* u is the approximate coordinate along the segment
+ * v is the approximate distance from the centre
+ * both are from [0, 1] inside the trapezoid.
+ * Exact coordinates can be introduced and calculated but it
+ * seems to require solving some ugly quadratic equations and is
+ * not necessary for rendering the fibre. If we want fibre height
+ * varying continuously along its length we also need to remember u
+ * coordinates somewhere. */
+ u = dotprod(&pt, d)/dnorm + 0.5;
+ u = CLAMP(u, 0.0, 1.0);
+ w = wp*(1.0 - u) + wq*u;
+ rr = veclincomb(rp, 1.0 - u, rq, u);
+ /* This is one Newton iteration of w*|r'| from initial estimate
+ * |r'| ≈ w, which should be always good. It avoid slow sqrt()
+ * and as a bonus, it is a sum of two positive terms so it has to
+ * behave nicely. */
+ s = 0.5*(w*w + vecnorm2(&rr));
+ v = dotprod(&pt, &rr)/s;
+ g_assert_cmpint(j, >=, 0);
+ g_assert_cmpint(j, <, xres);
+ if (v >= 0.0 && v <= 1.0 && v < fabs(frow[j])) {
+ /* Only add the pixel when first encountering it. */
+ if (frow[j] == G_MAXDOUBLE)
+ int_list_add(usedpts, i*xres + j);
+ frow[j] = positive ? v : -v;
+ urow[j] = lp*(1.0 - u) + lq*u;
+ }
+ }
+ }
+}
+
+/* p-q is the fibre ‘spine’, pp-qq is the outer boundary. */
+static void
+fill_trapezoid(gdouble *fdata, gdouble *udata, gint xres, gint yres,
+ const GwyXY *p, const GwyXY *q,
+ const GwyXY *pp, const GwyXY *qq,
+ gdouble wp, gdouble wq, gdouble lp, gdouble lq,
+ gboolean positive, IntList *usedpts)
+{
+ const GwyXY *top, *mid1, *mid2, *bottom;
+ const GwyXY *lfrom, *lto, *rfrom, *rto;
+ GwyXY d, dd, diag, s, r, rp, rq;
+ gboolean mid1_is_right, mid2_is_right;
+ gint ifrom, ito;
+
+ /* If we are totally outside, abort. This does not detect trapezoids
+ * hugging the rectangle boundary line, but there are only a small
+ * fraction of them. */
+ if (fmin(fmin(p->x, q->x), fmin(pp->x, qq->x)) > xres+1.0)
+ return;
+ if (fmin(fmin(p->y, q->y), fmin(pp->y, qq->y)) > yres+1.0)
+ return;
+ if (fmax(fmax(p->x, q->x), fmax(pp->x, qq->x)) < -1.0)
+ return;
+ if (fmax(fmax(p->y, q->y), fmax(pp->y, qq->y)) < -1.0)
+ return;
+
+ /* If the points on the outer boundary are in reverse order (too large
+ * width compared to local curvature), just invert the order to get some
+ * kind of untwisted trapezoid. The result still does not have to be
+ * convex, but the filling does not fail if the outer boundary is weird
+ * because we do not use the pp-qq vector. */
+ d = vecdiff(q, p);
+ dd = vecdiff(qq, pp);
+ if (dotprod(&d, &dd) < 0.0) {
+ GWY_SWAP(const GwyXY*, pp, qq);
+ }
+
+ r = veclincomb(p, 0.5, q, 0.5);
+ rp = vecdiff(pp, p);
+ rq = vecdiff(qq, q);
+
+ order_trapezoid_vertically(p, q, pp, qq, &top, &mid1, &mid2, &bottom);
+ diag = vecdiff(bottom, top);
+ s = vecdiff(mid1, top);
+ mid1_is_right = (vecprodz(&s, &diag) >= 0.0);
+ s = vecdiff(mid2, top);
+ mid2_is_right = (vecprodz(&s, &diag) > 0.0);
+
+ /* The top triangle. May be skipped if the top line is horizontal. */
+ if (mid1->y > top->y + 1e-9) {
+ ifrom = (gint)floor(top->y);
+ ifrom = MAX(ifrom, 0);
+ ito = (gint)ceil(mid1->y);
+ ito = MIN(ito, yres-1);
+
+ lfrom = rfrom = top;
+ rto = mid1_is_right ? mid1 : (mid2_is_right ? mid2 : bottom);
+ lto = mid1_is_right ? (mid2_is_right ? bottom : mid2) : mid1;
+ fill_vsegment(lfrom, lto, rfrom, rto,
+ fdata, udata, xres, yres, ifrom, ito,
+ &r, &rp, &rq, &d, wp, wq, lp, lq, positive, usedpts);
+ }
+
+ /* The middle part. May be skipped if the mid1 and mid2 are on the same
+ * horizontal line.*/
+ if (mid2->y > mid1->y + 1e-9) {
+ ifrom = (gint)floor(mid1->y);
+ ifrom = MAX(ifrom, 0);
+ ito = (gint)ceil(mid2->y);
+ ito = MIN(ito, yres-1);
+
+ lfrom = mid1_is_right ? top : mid1;
+ rfrom = mid1_is_right ? mid1 : top;
+ lto = mid2_is_right ? bottom : mid2;
+ rto = mid2_is_right ? mid2 : bottom;
+ fill_vsegment(lfrom, lto, rfrom, rto,
+ fdata, udata, xres, yres, ifrom, ito,
+ &r, &rp, &rq, &d, wp, wq, lp, lq, positive, usedpts);
+ }
+
+ /* The bottom triangle. May be skipped if the bottom line is horizontal. */
+ if (bottom->y > mid2->y + 1e-9) {
+ ifrom = (gint)floor(mid2->y);
+ ifrom = MAX(ifrom, 0);
+ ito = (gint)ceil(bottom->y);
+ ito = MIN(ito, yres-1);
+
+ lfrom = mid2_is_right ? (mid1_is_right ? bottom : mid1) : mid2;
+ rfrom = mid2_is_right ? mid2 : (mid1_is_right ? mid1 : top);
+ lto = rto = bottom;
+ fill_vsegment(lfrom, lto, rfrom, rto,
+ fdata, udata, xres, yres, ifrom, ito,
+ &r, &rp, &rq, &d, wp, wq, lp, lq, positive, usedpts);
+ }
+}
+
+static gboolean
+fibre_synth_do(const FibreSynthArgs *args,
+ const GwyDimensionArgs *dimsargs,
+ GwyRandGenSet *rngset,
+ GwyDataField *dfield,
+ GwySetMessageFunc set_message,
+ GwySetFractionFunc set_fraction)
+{
+ GwyDataField *fibre, *ucoord, *extfield;
+ GwySpline *spline;
+ GArray *segvar;
+ IntList *usedpts;
+ guint i, nfib, xres, yres, extw;
+ gboolean ok = FALSE;
+
+ gwy_rand_gen_set_init(rngset, args->seed);
+
+ xres = gwy_data_field_get_xres(dfield);
+ yres = gwy_data_field_get_yres(dfield);
+ extw = MIN(xres, yres)/8 + GWY_ROUND(2*args->width) + 16;
+ extfield = gwy_data_field_extend(dfield, extw, extw, extw, extw,
+ GWY_EXTERIOR_BORDER_EXTEND, 0.0, FALSE);
+
+ usedpts = int_list_new(0);
+ segvar = g_array_new(FALSE, FALSE, sizeof(FibreSegmentVar));
+ fibre = gwy_data_field_new_alike(extfield, TRUE);
+ ucoord = gwy_data_field_new_alike(extfield, TRUE);
+ spline = gwy_spline_new();
+ gwy_data_field_fill(fibre, G_MAXDOUBLE);
+
+ if (set_message && !set_message(_("Generating fibers...")))
+ goto finish;
+
+ nfib = calculate_n_fibres(args, xres, yres);
+ for (i = 0; i < nfib; i++) {
+ fibre_synth_add_one(extfield, fibre, ucoord, usedpts, spline, segvar,
+ args, dimsargs, rngset);
+ if (set_fraction && !set_fraction((i + 1.0)/nfib))
+ goto finish;
+ }
+ gwy_data_field_area_copy(extfield, dfield, extw, extw, xres, yres, 0, 0);
+
+ ok = TRUE;
+
+finish:
+ g_array_free(segvar, TRUE);
+ gwy_spline_free(spline);
+ int_list_free(usedpts);
+ g_object_unref(extfield);
+ g_object_unref(fibre);
+ g_object_unref(ucoord);
+
+ return ok;
+}
+
+static gdouble
+generate_deformed(GwyRandGenSet *rngset, gdouble deformation, gdouble noise)
+{
+ gdouble delta;
+
+ delta = gwy_rand_gen_set_gaussian(rngset, RNG_DEFORM, noise);
+ delta = deformation*exp(delta);
+ return gwy_rand_gen_set_gaussian(rngset, RNG_DEFORM, delta);
+}
+
+static void
+calculate_segment_var(const GwyXY *xy, guint n, GArray *segvar,
+ GwyRandGenSet *rngset, gdouble ptstep,
+ gdouble width_var,
+ gdouble height_var, gboolean height_bound)
+{
+ FibreSegmentVar *segvardata;
+ gdouble s, l;
+ guint i;
+
+ g_array_set_size(segvar, n);
+ segvardata = &g_array_index(segvar, FibreSegmentVar, 0);
+ segvardata[0].u = 0.0;
+ segvardata[0].wfactor = 0.0;
+ segvardata[0].hfactor = 0.0;
+ for (i = 1; i < n; i++) {
+ GwyXY d = vecdiff(xy + i, xy + i-1);
+
+ l = sqrt(vecnorm2(&d))/OVERSAMPLE;
+ segvardata[i].u = segvardata[i-1].u + l;
+
+ /* Mix a new random number with the previous one for short segments. */
+ l = fmin(l/ptstep, 1.0);
+ l *= l;
+ s = gwy_rand_gen_set_gaussian(rngset, RNG_SEGVAR, width_var);
+ segvardata[i].wfactor = (1.0 - l)*segvardata[i-1].wfactor + l*s;
+ s = gwy_rand_gen_set_gaussian(rngset, RNG_SEGVAR, height_var);
+ segvardata[i].hfactor = (1.0 - l)*segvardata[i-1].hfactor + l*s;
+ }
+
+ for (i = 0; i < n; i++) {
+ segvardata[i].wfactor = exp(2.0*segvardata[i].wfactor);
+ segvardata[i].hfactor = exp(2.0*segvardata[i].hfactor);
+ if (height_bound)
+ segvardata[i].hfactor *= segvardata[i].wfactor;
+ }
+}
+
+static void
+generate_fibre_spline(gint xres, gint yres,
+ GwySpline *spline,
+ GArray *segvar,
+ const FibreSynthArgs *args,
+ GwyRandGenSet *rngset)
+{
+ static GwyXY points[2*FIBRE_MAX_POINTS + 1];
+
+ const GwyXY *xy;
+ gdouble angle = args->angle, ca, sa;
+ gdouble xoff, yoff, x, y, s, ptstep;
+ guint i, npts;
+
+ angle = args->angle;
+ if (args->angle_noise)
+ angle += gwy_rand_gen_set_gaussian(rngset, RNG_ANGLE,
+ 2*args->angle_noise);
+ ca = cos(angle);
+ sa = sin(angle);
+
+ s = hypot(xres, yres);
+ x = s*(gwy_rand_gen_set_double(rngset, RNG_POSITION) - 0.5);
+ y = s*(gwy_rand_gen_set_double(rngset, RNG_POSITION) - 0.5);
+ xoff = xres/2 + ca*x + sa*y;
+ yoff = yres/2 - sa*x + ca*y;
+ ptstep = s/args->deform_density;
+
+ /* Generate the full number of points for image stability when parameters
+ * change. */
+ points[FIBRE_MAX_POINTS].x = xoff;
+ points[FIBRE_MAX_POINTS].y = yoff;
+ for (i = 1; i < FIBRE_MAX_POINTS; i++) {
+ x = ptstep*(i + generate_deformed(rngset,
+ args->lendeform,
+ args->lendeform_noise));
+ y = ptstep*generate_deformed(rngset,
+ args->latdeform, args->latdeform_noise);
+ points[FIBRE_MAX_POINTS + i].x = ca*x + sa*y + xoff;
+ points[FIBRE_MAX_POINTS + i].y = -sa*x + ca*y + yoff;
+
+ x = -ptstep*(i + generate_deformed(rngset,
+ args->lendeform,
+ args->lendeform_noise));
+ y = ptstep*generate_deformed(rngset,
+ args->latdeform, args->latdeform_noise);
+ points[FIBRE_MAX_POINTS - i].x = ca*x + sa*y + xoff;
+ points[FIBRE_MAX_POINTS - i].y = -sa*x + ca*y + yoff;
+ }
+
+ /* Generate the last point always undisturbed so it cannot lie inside. */
+ x = ptstep*FIBRE_MAX_POINTS;
+ points[2*FIBRE_MAX_POINTS].x = ca*x + xoff;
+ points[2*FIBRE_MAX_POINTS].y = -sa*x + yoff;
+
+ x = -ptstep*FIBRE_MAX_POINTS;
+ points[0].x = ca*x + xoff;
+ points[0].y = -sa*x + yoff;
+
+ for (i = 0; i < G_N_ELEMENTS(points); i++) {
+ points[i].x *= OVERSAMPLE;
+ points[i].y *= OVERSAMPLE;
+ }
+
+ gwy_spline_set_points(spline, points, 2*FIBRE_MAX_POINTS + 1);
+
+ /* XXX: This depends on spline not freeing xy[] before it makes a copy. */
+ xy = gwy_spline_sample_naturally(spline, &npts);
+ gwy_spline_set_points(spline, xy, npts);
+
+ calculate_segment_var(xy, npts, segvar, rngset, ptstep,
+ args->width_var,
+ args->height_var, args->height_bound);
+}
+
+static void
+fibre_synth_add_one(GwyDataField *surface,
+ GwyDataField *fibre,
+ GwyDataField *ucoord,
+ IntList *usedpts,
+ GwySpline *spline,
+ GArray *segvar,
+ const FibreSynthArgs *args,
+ const GwyDimensionArgs *dimsargs,
+ GwyRandGenSet *rngset)
+{
+ gdouble height_base = args->height * pow10(dimsargs->zpow10);
+ FibreSegmentVar *segvardata;
+ gdouble z, m, width, height, htrunc, u;
+ guint i, k, npts;
+ const GwyXY *xy, *txy;
+ gint j, xres, yres;
+ gdouble *data, *fdata, *udata;
+ gboolean needs_heightvar;
+
+ xres = gwy_data_field_get_xres(fibre);
+ yres = gwy_data_field_get_yres(fibre);
+ fdata = gwy_data_field_get_data(fibre);
+ udata = gwy_data_field_get_data(ucoord);
+ data = gwy_data_field_get_data(surface);
+
+ needs_heightvar = (args->height_var > 0.0
+ || (args->width_var > 0.0 && args->height_bound));
+
+ width = 0.5*args->width;
+ if (args->width_noise) {
+ width *= exp(gwy_rand_gen_set_gaussian(rngset, RNG_WIDTH,
+ args->width_noise));
+ }
+
+ height = height_base;
+ if (args->height_bound)
+ height *= width/args->width;
+ if (args->height_noise) {
+ height *= exp(gwy_rand_gen_set_gaussian(rngset, RNG_HEIGHT,
+ args->height_noise));
+ }
+
+ /* Use a specific distribution for htrunc. */
+ if (args->htrunc_noise) {
+ gdouble q = exp(gwy_rand_gen_set_gaussian(rngset, RNG_HTRUNC,
+ args->htrunc_noise));
+ htrunc = q/(q + 1.0/args->htrunc - 1.0);
+ }
+ else
+ htrunc = args->htrunc;
+
+ generate_fibre_spline(xres, yres, spline, segvar, args, rngset);
+ npts = gwy_spline_get_npoints(spline);
+ xy = gwy_spline_get_points(spline);
+ txy = gwy_spline_get_tangents(spline);
+ segvardata = &g_array_index(segvar, FibreSegmentVar, 0);
+
+ for (k = 0; k+1 < npts; k++) {
+ GwyXY p, q, pp, qq;
+ gdouble wp = width*segvardata[k].wfactor;
+ gdouble wq = width*segvardata[k+1].wfactor;
+
+ p.x = xy[k].x/OVERSAMPLE;
+ p.y = xy[k].y/OVERSAMPLE;
+ q.x = xy[k+1].x/OVERSAMPLE;
+ q.y = xy[k+1].y/OVERSAMPLE;
+
+ pp.x = p.x - wp*txy[k].y;
+ pp.y = p.y + wp*txy[k].x;
+ qq.x = q.x - wq*txy[k+1].y;
+ qq.y = q.y + wq*txy[k+1].x;
+ fill_trapezoid(fdata, udata, xres, yres, &p, &q, &pp, &qq,
+ wp, wq, k, k+1, TRUE, usedpts);
+
+ pp.x = p.x + wp*txy[k].y;
+ pp.y = p.y - wp*txy[k].x;
+ qq.x = q.x + wq*txy[k+1].y;
+ qq.y = q.y - wq*txy[k+1].x;
+ fill_trapezoid(fdata, udata, xres, yres, &p, &q, &pp, &qq,
+ wp, wq, k, k+1, FALSE, usedpts);
+ }
+
+ m = G_MAXDOUBLE;
+ for (k = 0; k < usedpts->len; k++)
+ m = fmin(m, data[usedpts->data[k]]);
+ for (k = 0; k < usedpts->len; k++) {
+ i = usedpts->data[k];
+ z = fdata[i];
+ if (args->type == FIBRE_SYNTH_CIRCLE)
+ z = sqrt(1.0 - fmin(z*z, 1.0));
+ else if (args->type == FIBRE_SYNTH_TRIANGLE)
+ z = 1.0 - fabs(z);
+ else if (args->type == FIBRE_SYNTH_SQUARE)
+ z = 1.0;
+ else if (args->type == FIBRE_SYNTH_PARABOLA)
+ z = 1.0 - z*z;
+ else if (args->type == FIBRE_SYNTH_QUADRATIC) {
+ z = fabs(z);
+ z = (z <= 1.0/3.0) ? 0.75*(1.0 - 3*z*z) : 1.125*(1.0 - z)*(1.0 - z);
+ }
+ else {
+ g_assert_not_reached();
+ }
+
+ if (z > htrunc)
+ z = htrunc;
+ z *= height;
+
+ if (needs_heightvar) {
+ u = udata[i];
+ j = floor(u);
+ u -= j;
+ if (G_UNLIKELY(j >= npts-1)) {
+ j = npts-2;
+ u = 1.0;
+ }
+ else if (G_UNLIKELY(j < 0)) {
+ j = 0;
+ u = 0.0;
+ }
+ z *= (1.0 - u)*segvardata[j].hfactor + u*segvardata[j+1].hfactor;
+ }
+
+ data[i] = fmax(data[i], m + z);
+ fdata[i] = G_MAXDOUBLE;
+ }
+ usedpts->len = 0;
+}
+
+static glong
+calculate_n_fibres(const FibreSynthArgs *args, guint xres, guint yres)
+{
+ /* The distribution of area differs from the distribution of widths. */
+ gdouble noise_corr = exp(args->width_noise*args->width_noise);
+ /* FIXME: Should correct for deformation which increases the length,
+ * possibly for orientation distribution (orthogonal are shorter but
+ * more likely completely inside, so the dependence is unclear). */
+ gdouble length = hypot(xres, yres);
+ gdouble mean_fibre_area = 0.125*args->width * length * noise_corr;
+ gdouble must_cover = args->coverage*xres*yres;
+ return (glong)ceil(must_cover/mean_fibre_area);
+}
+
+static const gchar active_page_key[] = "/module/fibre_synth/active_page";
+static const gchar angle_key[] = "/module/fibre_synth/angle";
+static const gchar angle_noise_key[] = "/module/fibre_synth/angle_noise";
+static const gchar coverage_key[] = "/module/fibre_synth/coverage";
+static const gchar deform_density_key[] = "/module/fibre_synth/deform_density";
+static const gchar height_bound_key[] = "/module/fibre_synth/height_bound";
+static const gchar height_key[] = "/module/fibre_synth/height";
+static const gchar height_noise_key[] = "/module/fibre_synth/height_noise";
+static const gchar htrunc_key[] = "/module/fibre_synth/htrunc";
+static const gchar htrunc_noise_key[] = "/module/fibre_synth/htrunc_noise";
+static const gchar latdeform_key[] = "/module/fibre_synth/latdeform";
+static const gchar latdeform_noise_key[] = "/module/fibre_synth/latdeform_noise";
+static const gchar lendeform_key[] = "/module/fibre_synth/lendeform";
+static const gchar lendeform_noise_key[] = "/module/fibre_synth/lendeform_noise";
+static const gchar prefix[] = "/module/fibre_synth";
+static const gchar randomize_key[] = "/module/fibre_synth/randomize";
+static const gchar seed_key[] = "/module/fibre_synth/seed";
+static const gchar type_key[] = "/module/fibre_synth/type";
+static const gchar update_key[] = "/module/fibre_synth/update";
+static const gchar width_key[] = "/module/fibre_synth/width";
+static const gchar width_noise_key[] = "/module/fibre_synth/width_noise";
+static const gchar width_var_key[] = "/module/fibre_synth/width_var";
+static const gchar height_var_key[] = "/module/fibre_synth/height_var";
+
+static void
+fibre_synth_sanitize_args(FibreSynthArgs *args)
+{
+ args->active_page = CLAMP(args->active_page,
+ PAGE_DIMENSIONS, PAGE_NPAGES-1);
+ args->update = !!args->update;
+ args->seed = MAX(0, args->seed);
+ args->randomize = !!args->randomize;
+ args->type = MIN(args->type, FIBRE_SYNTH_NTYPES-1);
+ args->coverage = CLAMP(args->coverage, 0.001, 20.0);
+ args->width = CLAMP(args->width, 1.0, 1000.0);
+ args->width_noise = CLAMP(args->width_noise, 0.0, 1.0);
+ args->width_var = CLAMP(args->width_var, 0.0, 1.0);
+ args->height = CLAMP(args->height, 0.001, 10000.0);
+ args->height_noise = CLAMP(args->height_noise, 0.0, 1.0);
+ args->height_var = CLAMP(args->height_var, 0.0, 1.0);
+ args->height_bound = !!args->height_bound;
+ args->htrunc = CLAMP(args->htrunc, 0.001, 1.0);
+ args->htrunc_noise = CLAMP(args->htrunc_noise, 0.0, 1.0);
+ args->angle = CLAMP(args->angle, -G_PI, G_PI);
+ args->angle_noise = CLAMP(args->angle_noise, 0.0, 1.0);
+ args->latdeform = CLAMP(args->latdeform, 0.0, 1.0);
+ args->latdeform_noise = CLAMP(args->latdeform_noise, 0.0, 1.0);
+ args->lendeform = CLAMP(args->lendeform, 0.0, 1.0);
+ args->lendeform_noise = CLAMP(args->lendeform_noise, 0.0, 1.0);
+ args->deform_density = CLAMP(args->deform_density,
+ 0.5, FIBRE_MAX_POINTS - 1.0);
+}
+
+static void
+fibre_synth_load_args(GwyContainer *container,
+ FibreSynthArgs *args,
+ GwyDimensionArgs *dimsargs)
+{
+ *args = fibre_synth_defaults;
+
+ gwy_container_gis_int32_by_name(container, active_page_key,
+ &args->active_page);
+ gwy_container_gis_boolean_by_name(container, update_key, &args->update);
+ gwy_container_gis_int32_by_name(container, seed_key, &args->seed);
+ gwy_container_gis_boolean_by_name(container, randomize_key,
+ &args->randomize);
+ gwy_container_gis_enum_by_name(container, type_key, &args->type);
+ gwy_container_gis_double_by_name(container, coverage_key, &args->coverage);
+ gwy_container_gis_double_by_name(container, width_key, &args->width);
+ gwy_container_gis_double_by_name(container, width_noise_key,
+ &args->width_noise);
+ gwy_container_gis_double_by_name(container, width_var_key,
+ &args->width_var);
+ gwy_container_gis_double_by_name(container, height_key, &args->height);
+ gwy_container_gis_double_by_name(container, height_noise_key,
+ &args->height_noise);
+ gwy_container_gis_double_by_name(container, height_var_key,
+ &args->height_var);
+ gwy_container_gis_boolean_by_name(container, height_bound_key,
+ &args->height_bound);
+ gwy_container_gis_double_by_name(container, htrunc_key, &args->htrunc);
+ gwy_container_gis_double_by_name(container, htrunc_noise_key,
+ &args->htrunc_noise);
+ gwy_container_gis_double_by_name(container, angle_key, &args->angle);
+ gwy_container_gis_double_by_name(container, angle_noise_key,
+ &args->angle_noise);
+ gwy_container_gis_double_by_name(container, latdeform_key,
+ &args->latdeform);
+ gwy_container_gis_double_by_name(container, latdeform_noise_key,
+ &args->latdeform_noise);
+ gwy_container_gis_double_by_name(container, lendeform_key,
+ &args->lendeform);
+ gwy_container_gis_double_by_name(container, lendeform_noise_key,
+ &args->lendeform_noise);
+ gwy_container_gis_double_by_name(container, deform_density_key,
+ &args->deform_density);
+ fibre_synth_sanitize_args(args);
+
+ gwy_clear(dimsargs, 1);
+ gwy_dimensions_copy_args(&dims_defaults, dimsargs);
+ gwy_dimensions_load_args(dimsargs, container, prefix);
+}
+
+static void
+fibre_synth_save_args(GwyContainer *container,
+ const FibreSynthArgs *args,
+ const GwyDimensionArgs *dimsargs)
+{
+ gwy_container_set_int32_by_name(container, active_page_key,
+ args->active_page);
+ gwy_container_set_boolean_by_name(container, update_key, args->update);
+ gwy_container_set_int32_by_name(container, seed_key, args->seed);
+ gwy_container_set_boolean_by_name(container, randomize_key,
+ args->randomize);
+ gwy_container_set_enum_by_name(container, type_key, args->type);
+ gwy_container_set_double_by_name(container, coverage_key, args->coverage);
+ gwy_container_set_double_by_name(container, width_key, args->width);
+ gwy_container_set_double_by_name(container, width_noise_key,
+ args->width_noise);
+ gwy_container_set_double_by_name(container, width_var_key, args->width_var);
+ gwy_container_set_double_by_name(container, height_key, args->height);
+ gwy_container_set_double_by_name(container, height_noise_key,
+ args->height_noise);
+ gwy_container_set_double_by_name(container, height_var_key,
+ args->height_var);
+ gwy_container_set_boolean_by_name(container, height_bound_key,
+ args->height_bound);
+ gwy_container_set_double_by_name(container, htrunc_key, args->htrunc);
+ gwy_container_set_double_by_name(container, htrunc_noise_key,
+ args->htrunc_noise);
+ gwy_container_set_double_by_name(container, angle_key, args->angle);
+ gwy_container_set_double_by_name(container, angle_noise_key,
+ args->angle_noise);
+ gwy_container_set_double_by_name(container, latdeform_key, args->latdeform);
+ gwy_container_set_double_by_name(container, latdeform_noise_key,
+ args->latdeform_noise);
+ gwy_container_set_double_by_name(container, lendeform_key, args->lendeform);
+ gwy_container_set_double_by_name(container, lendeform_noise_key,
+ args->lendeform_noise);
+ gwy_container_set_double_by_name(container, deform_density_key,
+ args->deform_density);
+
+ gwy_dimensions_save_args(dimsargs, container, prefix);
+}
+
+/* vim: set cin et ts=4 sw=4 cino=>1s,e0,n0,f0,{0,}0,^0,\:1s,=0,g1s,h0,t0,+1s,c3,(0,u0 : */
diff --git a/modules/process/fit-shape.c b/modules/process/fit-shape.c
index 537d0c2..7f086b8 100644
--- a/modules/process/fit-shape.c
+++ b/modules/process/fit-shape.c
@@ -1,6 +1,6 @@
/*
- * @(#) $Id: fit-shape.c 19147 2016-10-31 16:30:37Z yeti-dn $
- * Copyright (C) 2016 David Necas (Yeti).
+ * @(#) $Id: fit-shape.c 19948 2017-06-22 14:05:41Z yeti-dn $
+ * Copyright (C) 2016-2017 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
* This program is free software; you can redistribute it and/or modify
@@ -40,6 +40,7 @@
#include <libprocess/gwyshapefitpreset.h>
#include <libgwydgets/gwycombobox.h>
#include <libgwydgets/gwyradiobuttons.h>
+#include <libgwydgets/gwystock.h>
#include <libgwydgets/gwyinventorystore.h>
#include <libgwymodule/gwymodule-process.h>
#include <libgwymodule/gwymodule-xyz.h>
@@ -219,7 +220,7 @@ static void update_correl_table (FitShapeControls *controls,
GwyNLFitter *fitter);
static void update_secondary_table (FitShapeControls *controls);
static void fit_shape_estimate (FitShapeControls *controls);
-static void fit_shape_reduced_fit (FitShapeControls *controls);
+static void fit_shape_quick_fit (FitShapeControls *controls);
static void fit_shape_full_fit (FitShapeControls *controls);
static void fit_copy_correl_matrix (FitShapeControls *controls,
GwyNLFitter *fitter);
@@ -234,22 +235,15 @@ static void fit_context_resize_params (FitShapeContext *ctx,
static void fit_context_free (FitShapeContext *ctx);
static GwyNLFitter* fit (GwyShapeFitPreset *preset,
const FitShapeContext *ctx,
- guint maxiter,
gdouble *param,
gdouble *rss,
GwySetFractionFunc set_fraction,
GwySetMessageFunc set_message,
+ gboolean quick_fit,
gboolean geometric_fit);
-static GwyNLFitter* fit_reduced (GwyShapeFitPreset *preset,
- const FitShapeContext *ctx,
- gdouble *param,
- gdouble *rss);
static void calculate_field (GwyShapeFitPreset *preset,
const gdouble *params,
GwyDataField *dfield);
-static void reduce_data_size (const GwyXYZ *xyzsrc,
- guint nsrc,
- GwySurface *dest);
static GString* create_fit_report (FitShapeControls *controls);
static void fit_shape_load_args (GwyContainer *container,
FitShapeArgs *args);
@@ -269,12 +263,12 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Fits predefined geometrical shapes to data."),
"Yeti <yeti at gwyddion.net>",
- "1.1",
+ "1.3",
"David Nečas (Yeti)",
"2016",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, fit_shape)
static gboolean
module_register(void)
@@ -282,14 +276,14 @@ module_register(void)
gwy_process_func_register("fit_shape",
(GwyProcessFunc)&fit_shape,
N_("/_Level/_Fit Shape..."),
- NULL,
+ GWY_STOCK_FIT_SHAPE,
FIT_SHAPE_RUN_MODES,
GWY_MENU_FLAG_DATA,
N_("Fit geometrical shapes"));
gwy_xyz_func_register("xyz_fit_shape",
(GwyXYZFunc)&fit_shape_xyz,
N_("/_Fit Shape..."),
- NULL,
+ GWY_STOCK_FIT_SHAPE,
FIT_SHAPE_RUN_MODES,
GWY_MENU_FLAG_XYZ,
N_("Fit geometrical shapes"));
@@ -348,6 +342,8 @@ fit_shape_dialogue(FitShapeArgs *args,
{
GtkWidget *dialogue, *notebook, *widget, *vbox, *hbox, *alignment,
*hbox2, *label;
+ GtkClipboard *clipboard;
+ GdkDisplay *display;
FitShapeControls controls;
FitShapeContext ctx;
GwyDataField *mydfield = NULL;
@@ -361,13 +357,11 @@ fit_shape_dialogue(FitShapeArgs *args,
controls.ctx = &ctx;
controls.id = id;
- xyunit = gwy_data_field_get_si_unit_xy(dfield);
- zunit = gwy_data_field_get_si_unit_z(dfield);
- controls.same_units = gwy_si_unit_equal(xyunit, zunit);
-
if (surface) {
controls.pageno = GWY_PAGE_XYZS;
controls.title = gwy_app_get_surface_title(data, id);
+ xyunit = gwy_surface_get_si_unit_xy(surface);
+ zunit = gwy_surface_get_si_unit_z(surface);
mydfield = gwy_data_field_new(1, 1, 1.0, 1.0, FALSE);
gwy_preview_surface_to_datafield(surface, mydfield,
PREVIEW_SIZE, PREVIEW_SIZE,
@@ -377,17 +371,24 @@ fit_shape_dialogue(FitShapeArgs *args,
else if (dfield) {
controls.pageno = GWY_PAGE_CHANNELS;
controls.title = gwy_app_get_data_field_title(data, id);
+ xyunit = gwy_data_field_get_si_unit_xy(dfield);
+ zunit = gwy_data_field_get_si_unit_z(dfield);
+
}
else {
g_return_if_reached();
}
+ controls.same_units = gwy_si_unit_equal(xyunit, zunit);
+
controls.diff_gradient = gwy_inventory_new_item(gwy_gradients(),
GWY_GRADIENT_DEFAULT,
FIT_GRADIENT_NAME);
gwy_resource_use(GWY_RESOURCE(controls.diff_gradient));
dialogue = gtk_dialog_new_with_buttons(_("Fit Shape"), NULL, 0,
+ GTK_STOCK_COPY,
+ RESPONSE_COPY,
GTK_STOCK_SAVE,
RESPONSE_SAVE,
gwy_sgettext("verb|_Fit"),
@@ -510,7 +511,7 @@ fit_shape_dialogue(FitShapeArgs *args,
break;
case RESPONSE_CALCULATE:
- fit_shape_reduced_fit(&controls);
+ fit_shape_quick_fit(&controls);
break;
case RESPONSE_ESTIMATE:
@@ -524,6 +525,15 @@ fit_shape_dialogue(FitShapeArgs *args,
g_string_free(report, TRUE);
break;
+ case RESPONSE_COPY:
+ report = create_fit_report(&controls);
+ display = gtk_widget_get_display(dialogue);
+ clipboard = gtk_clipboard_get_for_display(display,
+ GDK_SELECTION_CLIPBOARD);
+ gtk_clipboard_set_text(clipboard, report->str, -1);
+ g_string_free(report, TRUE);
+ break;
+
default:
g_assert_not_reached();
break;
@@ -669,7 +679,7 @@ basic_tab_new(FitShapeControls *controls, GwyDataField *mfield)
hbox = gtk_hbox_new(FALSE, 0);
- table = gtk_table_new(8 + !!controls->same_units + 4*(!!mfield), 4, FALSE);
+ table = gtk_table_new(8 + !!controls->same_units + 4*(!!mfield), 3, FALSE);
gtk_container_set_border_width(GTK_CONTAINER(table), 4);
gtk_table_set_row_spacings(GTK_TABLE(table), 2);
gtk_table_set_col_spacings(GTK_TABLE(table), 6);
@@ -677,23 +687,25 @@ basic_tab_new(FitShapeControls *controls, GwyDataField *mfield)
row = 0;
controls->function = function_menu_new(args->function, controls);
- gwy_table_attach_hscale(table, row, _("_Function type:"), NULL,
- GTK_OBJECT(controls->function), GWY_HSCALE_WIDGET);
+ gwy_table_attach_adjbar(table, row, _("_Function type:"), NULL,
+ GTK_OBJECT(controls->function),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
row++;
controls->output
= gwy_enum_combo_box_new(outputs, G_N_ELEMENTS(outputs),
G_CALLBACK(output_changed), controls,
args->output, TRUE);
- gwy_table_attach_hscale(table, row, _("Output _type:"), NULL,
- GTK_OBJECT(controls->output), GWY_HSCALE_WIDGET);
+ gwy_table_attach_adjbar(table, row, _("Output _type:"), NULL,
+ GTK_OBJECT(controls->output),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
row++;
gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
label = gtk_label_new(_("Preview:"));
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
gtk_table_attach(GTK_TABLE(table), label,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
controls->display
@@ -701,7 +713,7 @@ basic_tab_new(FitShapeControls *controls, GwyDataField *mfield)
G_CALLBACK(display_changed),
controls, args->display);
row = gwy_radio_buttons_attach_to_table(controls->display,
- GTK_TABLE(table), 3, row);
+ GTK_TABLE(table), 2, row);
row++;
controls->diff_colourmap
@@ -710,7 +722,7 @@ basic_tab_new(FitShapeControls *controls, GwyDataField *mfield)
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls->diff_colourmap),
args->diff_colourmap);
gtk_table_attach(GTK_TABLE(table), controls->diff_colourmap,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect(controls->diff_colourmap, "toggled",
G_CALLBACK(diff_colourmap_changed), controls);
row++;
@@ -721,7 +733,7 @@ basic_tab_new(FitShapeControls *controls, GwyDataField *mfield)
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls->geometric_fit),
args->geometric_fit);
gtk_table_attach(GTK_TABLE(table), controls->geometric_fit,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect(controls->geometric_fit, "toggled",
G_CALLBACK(geometric_fit_changed), controls);
row++;
@@ -742,7 +754,7 @@ basic_tab_add_masking(FitShapeControls *controls, GtkWidget *table, gint row)
gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
label = gwy_label_new_header(_("Masking Mode"));
gtk_table_attach(GTK_TABLE(table), label,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
controls->masking
@@ -750,7 +762,7 @@ basic_tab_add_masking(FitShapeControls *controls, GtkWidget *table, gint row)
G_CALLBACK(masking_changed),
controls, args->masking);
row = gwy_radio_buttons_attach_to_table(controls->masking,
- GTK_TABLE(table), 3, row);
+ GTK_TABLE(table), 2, row);
row++;
controls->diff_excluded
@@ -759,7 +771,7 @@ basic_tab_add_masking(FitShapeControls *controls, GtkWidget *table, gint row)
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls->diff_excluded),
args->diff_excluded);
gtk_table_attach(GTK_TABLE(table), controls->diff_excluded,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect(controls->diff_excluded, "toggled",
G_CALLBACK(diff_excluded_changed), controls);
row++;
@@ -1588,7 +1600,7 @@ fit_shape_estimate(FitShapeControls *controls)
}
static void
-fit_shape_reduced_fit(FitShapeControls *controls)
+fit_shape_quick_fit(FitShapeControls *controls)
{
const FitShapeContext *ctx = controls->ctx;
GwyNLFitter *fitter;
@@ -1596,11 +1608,13 @@ fit_shape_reduced_fit(FitShapeControls *controls)
guint nparams;
gwy_app_wait_cursor_start(GTK_WINDOW(controls->dialogue));
- gwy_debug("start reduced fit");
+ gwy_debug("start quick fit");
update_all_param_values(controls);
nparams = gwy_shape_fit_preset_get_nparams(controls->preset);
gwy_assign(controls->alt_param, controls->param, nparams);
- fitter = fit_reduced(controls->preset, ctx, controls->param, &rss);
+ fitter = fit(controls->preset, ctx, controls->param, &rss, NULL, NULL,
+ TRUE, controls->args->geometric_fit);
+
if (rss >= 0.0)
controls->state = FIT_SHAPE_QUICK_FITTED;
else
@@ -1634,9 +1648,9 @@ fit_shape_full_fit(FitShapeControls *controls)
nparams = gwy_shape_fit_preset_get_nparams(controls->preset);
update_all_param_values(controls);
gwy_assign(controls->alt_param, controls->param, nparams);
- fitter = fit(controls->preset, ctx, G_MAXUINT, controls->param, &rss,
+ fitter = fit(controls->preset, ctx, controls->param, &rss,
gwy_app_wait_set_fraction, gwy_app_wait_set_message,
- controls->args->geometric_fit);
+ FALSE, controls->args->geometric_fit);
if (rss >= 0.0)
controls->state = FIT_SHAPE_FITTED;
@@ -1860,6 +1874,9 @@ update_fit_state(FitShapeControls *controls)
gtk_dialog_set_response_sensitive(GTK_DIALOG(controls->dialogue),
RESPONSE_SAVE,
controls->state == FIT_SHAPE_FITTED);
+ gtk_dialog_set_response_sensitive(GTK_DIALOG(controls->dialogue),
+ RESPONSE_COPY,
+ controls->state == FIT_SHAPE_FITTED);
}
static void
@@ -1889,8 +1906,12 @@ update_fit_results(FitShapeControls *controls, GwyNLFitter *fitter)
if (is_fitted) {
nparams = gwy_shape_fit_preset_get_nparams(controls->preset);
- for (i = 0; i < nparams; i++)
- controls->param_err[i] = gwy_math_nlfit_get_sigma(fitter, i);
+ for (i = 0; i < nparams; i++) {
+ if (ctx->param_fixed[i])
+ controls->param_err[i] = 0.0;
+ else
+ controls->param_err[i] = gwy_math_nlfit_get_sigma(fitter, i);
+ }
}
dfield = gwy_container_get_object_by_name(controls->mydata, "/0/data");
@@ -1966,54 +1987,31 @@ fit_context_free(FitShapeContext *ctx)
static GwyNLFitter*
fit(GwyShapeFitPreset *preset, const FitShapeContext *ctx,
- guint maxiter, gdouble *param, gdouble *rss,
+ gdouble *param, gdouble *rss,
GwySetFractionFunc set_fraction, GwySetMessageFunc set_message,
- gboolean geometric_fit)
+ gboolean quick_fit, gboolean geometric_fit)
{
GwyNLFitter *fitter;
fitter = gwy_shape_fit_preset_create_fitter(preset);
if (set_fraction || set_message)
gwy_math_nlfit_set_callbacks(fitter, set_fraction, set_message);
- if (maxiter != G_MAXUINT)
- gwy_math_nlfit_set_max_iterations(fitter, maxiter);
if (geometric_fit)
gwy_math_nlfit_set_approx_geometric(fitter, TRUE);
- gwy_shape_fit_preset_fit(preset, fitter, ctx->xyz, ctx->n,
- param, ctx->param_fixed, rss);
+ if (quick_fit) {
+ gwy_shape_fit_preset_quick_fit(preset, fitter, ctx->xyz, ctx->n,
+ param, ctx->param_fixed, rss);
+ }
+ else {
+ gwy_shape_fit_preset_fit(preset, fitter, ctx->xyz, ctx->n,
+ param, ctx->param_fixed, rss);
+ }
gwy_debug("rss from nlfit %g", *rss);
return fitter;
}
-/* XXX XXX XXX XXX XXX This is duplicated in gwyshapefitpreset.c and it should
- * probably go to the library. There we can do something better in the future
- * than random choice, for instance a mix of spatially uniform and random
- * choice. */
-static GwyNLFitter*
-fit_reduced(GwyShapeFitPreset *preset, const FitShapeContext *ctx,
- gdouble *param, gdouble *rss)
-{
- GwyNLFitter *fitter;
- FitShapeContext ctxred;
- guint nred = (guint)sqrt(ctx->n*(gdouble)NREDLIM);
-
- if (nred >= ctx->n)
- return fit(preset, ctx, 30, param, rss, NULL, NULL, FALSE);
-
- ctxred = *ctx;
- ctxred.n = nred;
- ctxred.surface = gwy_surface_new_sized(nred);
- ctxred.xyz = gwy_surface_get_data_const(ctxred.surface);
- reduce_data_size(gwy_surface_get_data_const(ctx->surface), ctx->n,
- ctxred.surface);
- fitter = fit(preset, &ctxred, 30, param, rss, NULL, NULL, FALSE);
- g_object_unref(ctxred.surface);
-
- return fitter;
-}
-
static void
calculate_field(GwyShapeFitPreset *preset, const gdouble *params,
GwyDataField *dfield)
@@ -2030,22 +2028,6 @@ calculate_field(GwyShapeFitPreset *preset, const gdouble *params,
g_object_unref(surface);
}
-static void
-reduce_data_size(const GwyXYZ *xyzsrc, guint nsrc, GwySurface *dest)
-{
- GwyRandGenSet *rngset = gwy_rand_gen_set_new(1);
- guint ndest = gwy_surface_get_npoints(dest);
- guint *redindex = gwy_rand_gen_set_choose_shuffle(rngset, 0, nsrc, ndest);
- GwyXYZ *xyzdest = gwy_surface_get_data(dest);
- guint i;
-
- for (i = 0; i < ndest; i++)
- xyzdest[i] = xyzsrc[redindex[i]];
-
- g_free(redindex);
- gwy_rand_gen_set_free(rngset);
-}
-
static GString*
create_fit_report(FitShapeControls *controls)
{
@@ -2250,6 +2232,8 @@ fit_shape_save_args(GwyContainer *container,
args->diff_colourmap);
gwy_container_set_boolean_by_name(container, diff_excluded_key,
args->diff_excluded);
+ gwy_container_set_boolean_by_name(container, geometric_fit_key,
+ args->geometric_fit);
}
/* vim: set cin et ts=4 sw=4 cino=>1s,e0,n0,f0,{0,}0,^0,\:1s,=0,g1s,h0,t0,+1s,c3,(0,u0 : */
diff --git a/modules/process/flatten_base.c b/modules/process/flatten_base.c
index 301e029..603fe2c 100644
--- a/modules/process/flatten_base.c
+++ b/modules/process/flatten_base.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: flatten_base.c 19155 2016-11-01 08:49:49Z yeti-dn $
+ * @(#) $Id: flatten_base.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2014 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -48,7 +48,7 @@ static GwyModuleInfo module_info = {
"2014",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, flatten_base)
static gboolean
module_register(void)
diff --git a/modules/process/fraccor.c b/modules/process/fraccor.c
index 674b162..e7466ca 100644
--- a/modules/process/fraccor.c
+++ b/modules/process/fraccor.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: fraccor.c 16388 2014-07-10 14:26:53Z yeti-dn $
+ * @(#) $Id: fraccor.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2004 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -23,6 +23,7 @@
#include <libgwyddion/gwymacros.h>
#include <libprocess/datafield.h>
#include <libprocess/fractals.h>
+#include <libgwydgets/gwystock.h>
#include <libgwymodule/gwymodule-process.h>
#include <app/gwyapp.h>
@@ -42,7 +43,7 @@ static GwyModuleInfo module_info = {
"2004",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, fraccor)
static gboolean
module_register(void)
@@ -50,7 +51,7 @@ module_register(void)
gwy_process_func_register("fraccor",
(GwyProcessFunc)&fraccor,
N_("/_Correct Data/_Fractal Correction"),
- NULL,
+ GWY_STOCK_FRACTAL_CORRECTION,
FRACCOR_RUN_MODES,
GWY_MENU_FLAG_DATA_MASK | GWY_MENU_FLAG_DATA,
N_("Interpolate data under mask with fractal "
diff --git a/modules/process/fractal.c b/modules/process/fractal.c
index a1f9f26..b7b1370 100644
--- a/modules/process/fractal.c
+++ b/modules/process/fractal.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: fractal.c 18537 2016-03-28 18:11:19Z yeti-dn $
+ * @(#) $Id: fractal.c 19972 2017-06-24 09:15:44Z yeti-dn $
* Copyright (C) 2003-2006 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -85,10 +85,6 @@ static void fractal (GwyContainer *data,
GwyRunType run);
static void fractal_dialog (FractalArgs *args,
GwyContainer *data);
-static GtkWidget* attach_value_row (GtkWidget *table,
- gint row,
- const gchar *description,
- const gchar *value);
static void interp_changed_cb (GtkWidget *combo,
FractalArgs *args);
static void out_changed_cb (GtkWidget *combo,
@@ -173,12 +169,12 @@ static GwyModuleInfo module_info = {
N_("Calculates fractal dimension using several methods "
"(partitioning, box counting, triangulation, power spectrum)."),
"Jindřich Bilek & Petr Klapetek <klapetek at gwyddion.net>",
- "1.8",
+ "1.9",
"David Nečas (Yeti) & Petr Klapetek & Jindřich Bílek",
"2004",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, fractal)
static gboolean
module_register(void)
@@ -186,7 +182,7 @@ module_register(void)
gwy_process_func_register("fractal",
(GwyProcessFunc)&fractal,
N_("/_Statistics/_Fractal Dimension..."),
- GWY_STOCK_FRACTAL,
+ GWY_STOCK_FRACTAL_MEASURE,
FRACTAL_RUN_MODES,
GWY_MENU_FLAG_DATA,
N_("Calculate fractal dimension"));
@@ -208,7 +204,7 @@ fractal(GwyContainer *data, GwyRunType run)
static void
fractal_dialog(FractalArgs *args, GwyContainer *data)
{
- GtkWidget *dialog, *table, *hbox, *vbox, *label, *button, *hbox2;
+ GtkWidget *dialog, *table, *hbox, *vbox;
GwyDataChooser *chooser;
GwyGraphArea *area;
GwySelection *selection;
@@ -225,8 +221,9 @@ fractal_dialog(FractalArgs *args, GwyContainer *data)
/* The axes should be unitless so no unit initialisation is necessary. */
dialog = gtk_dialog_new_with_buttons(_("Fractal Dimension"), NULL, 0, NULL);
- button = gwy_stock_like_button_new(_("Reco_mpute"), GTK_STOCK_EXECUTE);
- gtk_dialog_add_action_widget(GTK_DIALOG(dialog), button,
+ gtk_dialog_add_action_widget(GTK_DIALOG(dialog),
+ gwy_stock_like_button_new(_("_Update"),
+ GTK_STOCK_EXECUTE),
RESPONSE_CALCULATE);
gtk_dialog_add_button(GTK_DIALOG(dialog), _("_Reset"), RESPONSE_RESET);
gtk_dialog_add_button(GTK_DIALOG(dialog),
@@ -244,70 +241,51 @@ fractal_dialog(FractalArgs *args, GwyContainer *data)
gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 0);
/* Parameters */
- table = gtk_table_new(4, 2, FALSE);
+ table = gtk_table_new(GWY_FRACTAL_NMETHODS + 7, 3, FALSE);
gtk_table_set_row_spacings(GTK_TABLE(table), 2);
gtk_table_set_col_spacings(GTK_TABLE(table), 6);
gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0);
row = 0;
- label = gtk_label_new_with_mnemonic(_("_Interpolation type:"));
- gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_table_attach(GTK_TABLE(table), label,
- 0, 2, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ controls.out = gwy_enum_combo_box_new(methods, G_N_ELEMENTS(methods),
+ G_CALLBACK(out_changed_cb), &controls,
+ args->out, TRUE);
+ gwy_table_attach_adjbar(table, row, _("_Method:"), NULL,
+ GTK_OBJECT(controls.out),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
row++;
controls.interp
= gwy_enum_combo_box_new(gwy_interpolation_type_get_enum(), -1,
G_CALLBACK(interp_changed_cb), args,
args->interp, TRUE);
- gtk_label_set_mnemonic_widget(GTK_LABEL(label), controls.interp);
- gtk_table_attach(GTK_TABLE(table), controls.interp,
- 0, 2, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
- gtk_table_set_row_spacing(GTK_TABLE(table), row, 8);
- row++;
-
- label = gtk_label_new_with_mnemonic(_("_Method:"));
- gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_table_attach(GTK_TABLE(table), label,
- 0, 2, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
- row++;
-
- controls.out = gwy_enum_combo_box_new(methods, G_N_ELEMENTS(methods),
- G_CALLBACK(out_changed_cb), &controls,
- args->out, TRUE);
- gtk_label_set_mnemonic_widget(GTK_LABEL(label), controls.out);
- gtk_table_attach(GTK_TABLE(table), controls.out,
- 0, 2, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ gwy_table_attach_adjbar(table, row, _("_Interpolation type:"), NULL,
+ GTK_OBJECT(controls.interp),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
row++;
/* Area */
- table = gtk_table_new(3, 2, FALSE);
- gtk_table_set_row_spacings(GTK_TABLE(table), 2);
- gtk_table_set_col_spacings(GTK_TABLE(table), 6);
- gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0);
- row = 0;
-
- label = gwy_label_new_header(_("Fit Area"));
- gtk_table_attach(GTK_TABLE(table), label,
- 0, 2, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
+ gtk_table_attach(GTK_TABLE(table), gwy_label_new_header(_("Fit Area")),
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
- controls.from = attach_value_row(table, row, _("From:"), _("minimum"));
+ controls.from = gtk_label_new(_("minimum"));
+ gwy_table_attach_adjbar(table, row, _("From:"), NULL,
+ GTK_OBJECT(controls.from),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
row++;
- controls.to = attach_value_row(table, row, _("To:"), _("maximum"));
+ controls.to = gtk_label_new(_("maximum"));
+ gwy_table_attach_adjbar(table, row, _("To:"), NULL,
+ GTK_OBJECT(controls.to),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
row++;
/* Results */
- table = gtk_table_new(GWY_FRACTAL_NMETHODS + 1, 2, FALSE);
- gtk_table_set_row_spacings(GTK_TABLE(table), 2);
- gtk_table_set_col_spacings(GTK_TABLE(table), 6);
- gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0);
- row = 0;
-
- label = gwy_label_new_header(_("Result"));
- gtk_table_attach(GTK_TABLE(table), label,
- 0, 2, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
+ gtk_table_attach(GTK_TABLE(table), gwy_label_new_header(_("Result")),
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
/* FIXME: This is a latinism. */
@@ -315,20 +293,16 @@ fractal_dialog(FractalArgs *args, GwyContainer *data)
for (i = 0; i < GWY_FRACTAL_NMETHODS; i++) {
g_string_assign(str, _(methods[i].name));
g_string_append_c(str, ':');
- controls.results[i] = attach_value_row(table, row, str->str, NULL);
+ controls.results[i] = gtk_label_new(NULL);
+ gwy_table_attach_adjbar(table, row, str->str, NULL,
+ GTK_OBJECT(controls.results[i]),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
gtk_label_set_selectable(GTK_LABEL(controls.results[i]), TRUE);
row++;
}
g_string_free(str, TRUE);
row++;
- hbox2 = gtk_hbox_new(FALSE, 6);
- gtk_box_pack_start(GTK_BOX(vbox), hbox2, FALSE, FALSE, 0);
-
- label = gtk_label_new_with_mnemonic(_("Target _graph:"));
- gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_box_pack_start(GTK_BOX(hbox2), label, FALSE, FALSE, 0);
-
controls.target_graph = gwy_data_chooser_new_graphs();
chooser = GWY_DATA_CHOOSER(controls.target_graph);
gwy_data_chooser_set_none(chooser, _("New graph"));
@@ -336,8 +310,9 @@ fractal_dialog(FractalArgs *args, GwyContainer *data)
gwy_data_chooser_set_filter(chooser, filter_target_graphs, &controls, NULL);
gwy_data_chooser_set_active_id(chooser, &args->target_graph);
gwy_data_chooser_get_active_id(chooser, &args->target_graph);
- gtk_label_set_mnemonic_widget(GTK_LABEL(label), controls.target_graph);
- gtk_box_pack_end(GTK_BOX(hbox2), controls.target_graph, FALSE, FALSE, 0);
+ gwy_table_attach_adjbar(table, row, _("Target _graph:"), NULL,
+ GTK_OBJECT(controls.target_graph),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
g_signal_connect_swapped(controls.target_graph, "changed",
G_CALLBACK(target_graph_changed), &controls);
row++;
@@ -394,25 +369,6 @@ fractal_dialog(FractalArgs *args, GwyContainer *data)
gtk_widget_destroy(dialog);
}
-static GtkWidget*
-attach_value_row(GtkWidget *table, gint row,
- const gchar *description, const gchar *value)
-{
- GtkWidget *label;
-
- label = gtk_label_new(description);
- gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_table_attach(GTK_TABLE(table), label,
- 0, 1, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
-
- label = gtk_label_new(value);
- gtk_misc_set_alignment(GTK_MISC(label), 1.0, 0.5);
- gtk_table_attach(GTK_TABLE(table), label,
- 1, 2, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
-
- return label;
-}
-
static void
interp_changed_cb(GtkWidget *combo,
FractalArgs *args)
diff --git a/modules/process/gradient.c b/modules/process/gradient.c
index c67b755..0fbf0ee 100644
--- a/modules/process/gradient.c
+++ b/modules/process/gradient.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: gradient.c 16388 2014-07-10 14:26:53Z yeti-dn $
+ * @(#) $Id: gradient.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2003 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -48,7 +48,7 @@ static GwyModuleInfo module_info = {
"2004",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, gradient)
static gboolean
module_register(void)
diff --git a/modules/process/grain_cross.c b/modules/process/grain_cross.c
index 1c19bde..9a12960 100644
--- a/modules/process/grain_cross.c
+++ b/modules/process/grain_cross.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: grain_cross.c 18626 2016-04-22 10:15:13Z yeti-dn $
+ * @(#) $Id: grain_cross.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2007 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -105,7 +105,7 @@ static GwyModuleInfo module_info = {
"2007",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, grain_cross)
static gboolean
module_register(void)
@@ -233,6 +233,7 @@ grain_cross_dialog(GrainCrossArgs *args,
gmodel = create_corr_graph(args, dfield);
controls.graph = gwy_graph_new(gmodel);
gtk_widget_set_size_request(controls.graph, 320, -1);
+ gwy_graph_enable_user_input(GWY_GRAPH(controls.graph), FALSE);
g_object_unref(gmodel);
gtk_table_attach(GTK_TABLE(table), controls.graph, 0, 1, 0, 3,
GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
diff --git a/modules/process/grain_dist.c b/modules/process/grain_dist.c
index dbfd5ab..aa128c6 100644
--- a/modules/process/grain_dist.c
+++ b/modules/process/grain_dist.c
@@ -1,6 +1,6 @@
/*
- * @(#) $Id: grain_dist.c 18537 2016-03-28 18:11:19Z yeti-dn $
- * Copyright (C) 2003-2012 David Necas (Yeti), Petr Klapetek, Sven Neumann.
+ * @(#) $Id: grain_dist.c 20063 2017-07-11 11:03:01Z yeti-dn $
+ * Copyright (C) 2003-2017 David Necas (Yeti), Petr Klapetek, Sven Neumann.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net, neumann at jpk.com.
*
* This program is free software; you can redistribute it and/or modify
@@ -153,7 +153,7 @@ static GwyModuleInfo module_info = {
N_("Evaluates distribution of grains (continuous parts of mask)."),
"Petr Klapetek <petr at klapetek.cz>, Sven Neumann <neumann at jpk.com>, "
"Yeti <yeti at gwyddion.net>",
- "4.2",
+ "4.3",
"David Nečas (Yeti) & Petr Klapetek & Sven Neumann",
"2003",
};
@@ -165,7 +165,7 @@ static const gchar add_comment_key[] = "/module/grain_dist/add_comment";
static const gchar selected_key[] = "/module/grain_dist/selected";
static const gchar expanded_key[] = "/module/grain_dist/expanded";
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, grain_dist)
static gboolean
module_register(void)
@@ -256,6 +256,7 @@ grain_dist_dialog(GrainDistArgs *args,
gmodel = gwy_graph_model_new();
controls.graph = gwy_graph_new(gmodel);
gtk_widget_set_size_request(controls.graph, 360, -1);
+ gwy_graph_enable_user_input(GWY_GRAPH(controls.graph), FALSE);
g_object_unref(gmodel);
gtk_box_pack_start(GTK_BOX(hbox), controls.graph, TRUE, TRUE, 4);
@@ -291,7 +292,7 @@ grain_dist_dialog(GrainDistArgs *args,
G_CALLBACK(selected_changed), &controls);
/* Options */
- table = GTK_TABLE(gtk_table_new(5, 4, FALSE));
+ table = GTK_TABLE(gtk_table_new(5, 3, FALSE));
gtk_table_set_row_spacings(table, 2);
gtk_table_set_col_spacings(table, 6);
gtk_container_set_border_width(GTK_CONTAINER(table), 4);
@@ -304,12 +305,12 @@ grain_dist_dialog(GrainDistArgs *args,
args->mode);
gtk_table_attach(table, gwy_label_new_header(_("Options")),
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
l = controls.mode;
gtk_table_attach(table, GTK_WIDGET(l->data),
- 0, 4, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
l = g_slist_next(l);
row++;
@@ -319,13 +320,13 @@ grain_dist_dialog(GrainDistArgs *args,
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.add_comment),
args->add_comment);
gtk_table_attach(table, controls.add_comment,
- 0, 4, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect_swapped(controls.add_comment, "toggled",
G_CALLBACK(add_comment_changed), &controls);
row++;
gtk_table_attach(table, GTK_WIDGET(l->data),
- 0, 4, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
l = g_slist_next(l);
gtk_table_set_row_spacing(table, row, 8);
row++;
@@ -333,7 +334,8 @@ grain_dist_dialog(GrainDistArgs *args,
controls.resolution = gtk_adjustment_new(args->resolution,
MIN_RESOLUTION, MAX_RESOLUTION,
1, 10, 0);
- gwy_table_attach_hscale(GTK_WIDGET(table), row, _("_Fix res.:"), NULL,
+ gwy_table_attach_adjbar(GTK_WIDGET(table), row,
+ _("_Fixed resolution:"), NULL,
controls.resolution, GWY_HSCALE_CHECK);
controls.fixres = gwy_table_hscale_get_check(controls.resolution);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.fixres),
@@ -438,24 +440,16 @@ static void
update_sensitivity(GrainDistControls *controls, GrainDistArgs *args)
{
GtkTreeView *treeview;
- GtkWidget *check, *w;
- check = gwy_table_hscale_get_check(controls->resolution);
switch (args->mode) {
case MODE_GRAPH:
gtk_widget_set_sensitive(controls->add_comment, FALSE);
- gtk_widget_set_sensitive(check, TRUE);
- gtk_toggle_button_toggled(GTK_TOGGLE_BUTTON(check));
- gtk_toggle_button_toggled(GTK_TOGGLE_BUTTON(check));
+ gwy_table_hscale_set_sensitive(controls->resolution, TRUE);
break;
case MODE_RAW:
gtk_widget_set_sensitive(controls->add_comment, TRUE);
- gtk_widget_set_sensitive(check, FALSE);
- w = gwy_table_hscale_get_scale(controls->resolution);
- gtk_widget_set_sensitive(w, FALSE);
- w = gwy_table_hscale_get_middle_widget(controls->resolution);
- gtk_widget_set_sensitive(w, FALSE);
+ gwy_table_hscale_set_sensitive(controls->resolution, FALSE);
break;
default:
diff --git a/modules/process/grain_edge.c b/modules/process/grain_edge.c
index 9887fa7..892ea7c 100644
--- a/modules/process/grain_edge.c
+++ b/modules/process/grain_edge.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: grain_edge.c 18673 2016-05-03 13:08:36Z dn2010 $
+ * @(#) $Id: grain_edge.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2011 David Necas (Yeti), Petr Klapetek, Daniil Bratashov.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net, dn2010 at gmail.com.
*
@@ -27,6 +27,7 @@
#include <libprocess/grains.h>
#include <libprocess/stats.h>
#include <libgwydgets/gwycombobox.h>
+#include <libgwydgets/gwyradiobuttons.h>
#include <libgwydgets/gwystock.h>
#include <libgwymodule/gwymodule-process.h>
#include <app/gwymoduleutils.h>
@@ -48,7 +49,7 @@ typedef struct {
GwyContainer *mydata;
GtkObject *threshold_laplasian;
GtkWidget *combine;
- GtkWidget *combine_type;
+ GSList *combine_type;
GtkWidget *color_button;
GtkWidget *update;
GEdgeArgs *args;
@@ -75,8 +76,6 @@ static void gedge_dialog_update_values (GEdgeControls *controls,
GEdgeArgs *args);
static void update_changed (GEdgeControls *controls);
static void gedge_invalidate (GEdgeControls *controls);
-static void gedge_invalidate2 (gpointer instance,
- GEdgeControls *controls);
static void preview (GEdgeControls *controls,
GEdgeArgs *args);
static void gedge_process (GwyDataField *dfield,
@@ -99,12 +98,12 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Marks grains by edge detection method."),
"Daniil Bratashov <dn2010 at gmail.com>",
- "0.3",
+ "0.5",
"David Nečas (Yeti) & Petr Klapetek & Daniil Bratashov",
"2011",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, grain_edge)
static gboolean
module_register(void)
@@ -151,7 +150,7 @@ table_attach_threshold(GtkWidget *table, gint *row, const gchar *name,
gpointer data)
{
*adj = gtk_adjustment_new(value, 0.0, 100.0, 0.1, 5, 0);
- gwy_table_attach_hscale(table, *row, name, "%", *adj, GWY_HSCALE_DEFAULT);
+ gwy_table_attach_adjbar(table, *row, name, "%", *adj, GWY_HSCALE_DEFAULT);
g_signal_connect_swapped(*adj, "value-changed",
G_CALLBACK(gedge_invalidate), data);
(*row)++;
@@ -235,7 +234,7 @@ gedge_dialog(GEdgeArgs *args,
controls.view = create_preview(controls.mydata, 0, PREVIEW_SIZE, TRUE);
gtk_box_pack_start(GTK_BOX(hbox), controls.view, FALSE, FALSE, 4);
- table = gtk_table_new(5, 4, FALSE);
+ table = gtk_table_new(5, 3, FALSE);
gtk_table_set_row_spacings(GTK_TABLE(table), 2);
gtk_table_set_col_spacings(GTK_TABLE(table), 6);
gtk_container_set_border_width(GTK_CONTAINER(table), 4);
@@ -243,7 +242,7 @@ gedge_dialog(GEdgeArgs *args,
row = 0;
gtk_table_attach(GTK_TABLE(table), gwy_label_new_header(_("Threshold")),
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
table_attach_threshold(table, &row, _("_Laplacian:"),
@@ -253,36 +252,24 @@ gedge_dialog(GEdgeArgs *args,
gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
gtk_table_attach(GTK_TABLE(table), gwy_label_new_header(_("Options")),
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
if (mfield) {
gwy_container_set_object_by_name(controls.mydata, "/1/mask", mfield);
- controls.combine
- = gtk_check_button_new_with_mnemonic(_("Com_bine with "
- "existing mask"));
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.combine),
- args->combine);
- gtk_table_attach(GTK_TABLE(table), controls.combine,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
- g_signal_connect_swapped(controls.combine, "toggled",
- G_CALLBACK(gedge_invalidate), &controls);
- row++;
-
- controls.combine_type
- = gwy_enum_combo_box_new(gwy_merge_type_get_enum(), -1,
- G_CALLBACK(gedge_invalidate2), &controls,
- args->combine_type, TRUE);
- gwy_table_attach_hscale(table, row, _("Operation:"), NULL,
- GTK_OBJECT(controls.combine_type),
- GWY_HSCALE_WIDGET);
- gtk_table_set_row_spacing(GTK_TABLE(table), row, 8);
+ create_mask_merge_buttons(table, row, NULL,
+ args->combine,
+ G_CALLBACK(gedge_invalidate),
+ args->combine_type,
+ G_CALLBACK(gedge_invalidate),
+ &controls,
+ &controls.combine, &controls.combine_type);
row++;
}
controls.color_button = create_mask_color_button(controls.mydata, dialog,
0);
- gwy_table_attach_hscale(table, row, _("_Mask color:"), NULL,
+ gwy_table_attach_adjbar(table, row, _("_Mask color:"), NULL,
GTK_OBJECT(controls.color_button),
GWY_HSCALE_WIDGET_NO_EXPAND);
row++;
@@ -291,7 +278,7 @@ gedge_dialog(GEdgeArgs *args,
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.update),
args->update);
gtk_table_attach(GTK_TABLE(table), controls.update,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect_swapped(controls.update, "toggled",
G_CALLBACK(update_changed), &controls);
@@ -367,13 +354,12 @@ gedge_dialog_update_controls(GEdgeControls *controls,
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls->update),
args->update);
- if (!controls->combine)
- return;
-
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls->combine),
- args->combine);
- gwy_enum_combo_box_set_active(GTK_COMBO_BOX(controls->combine_type),
- args->combine_type);
+ if (controls->combine) {
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls->combine),
+ args->combine);
+ gwy_radio_buttons_set_current(controls->combine_type,
+ args->combine_type);
+ }
}
static void
@@ -385,13 +371,12 @@ gedge_dialog_update_values(GEdgeControls *controls,
args->update
= gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(controls->update));
- if (!controls->combine)
- return;
-
- args->combine
- = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(controls->combine));
- args->combine_type
- = gwy_enum_combo_box_get_active(GTK_COMBO_BOX(controls->combine_type));
+ if (controls->combine) {
+ args->combine
+ = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(controls->combine));
+ args->combine_type
+ = gwy_radio_buttons_get_current(controls->combine_type);
+ }
}
static void
@@ -405,13 +390,6 @@ gedge_invalidate(GEdgeControls *controls)
}
static void
-gedge_invalidate2(G_GNUC_UNUSED gpointer instance,
- GEdgeControls *controls)
-{
- gedge_invalidate(controls);
-}
-
-static void
preview(GEdgeControls *controls,
GEdgeArgs *args)
{
diff --git a/modules/process/grain_filter.c b/modules/process/grain_filter.c
index 9bbc8d1..fc51b6e 100644
--- a/modules/process/grain_filter.c
+++ b/modules/process/grain_filter.c
@@ -1,6 +1,6 @@
/*
- * @(#) $Id: grain_filter.c 18537 2016-03-28 18:11:19Z yeti-dn $
- * Copyright (C) 2014 David Necas (Yeti).
+ * @(#) $Id: grain_filter.c 19948 2017-06-22 14:05:41Z yeti-dn $
+ * Copyright (C) 2014-2017 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
* This program is free software; you can redistribute it and/or modify
@@ -29,6 +29,7 @@
#include <libprocess/grains.h>
#include <libgwydgets/gwystock.h>
#include <libgwydgets/gwycombobox.h>
+#include <libgwydgets/gwyadjustbar.h>
#include <libgwydgets/gwygrainvaluemenu.h>
#include <libgwymodule/gwymodule-process.h>
#include <app/gwymoduleutils.h>
@@ -94,12 +95,10 @@ typedef struct {
GwySIValueFormat *vf[NQUANTITIES];
GtkWidget *header[NQUANTITIES];
GtkObject *lower[NQUANTITIES];
- GtkWidget *lower_label[NQUANTITIES];
GtkWidget *lower_scale[NQUANTITIES];
GtkWidget *lower_entry[NQUANTITIES];
GtkWidget *lower_units[NQUANTITIES];
GtkObject *upper[NQUANTITIES];
- GtkWidget *upper_label[NQUANTITIES];
GtkWidget *upper_scale[NQUANTITIES];
GtkWidget *upper_entry[NQUANTITIES];
GtkWidget *upper_units[NQUANTITIES];
@@ -195,12 +194,12 @@ static GwyModuleInfo module_info = {
N_("Filters grains by their properties, using logical expressions "
"and thresholds."),
"Yeti <yeti at gwyddion.net>",
- "1.1",
+ "1.2",
"David Nečas (Yeti)",
"2014",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, grain_filter)
static gboolean
module_register(void)
@@ -362,7 +361,7 @@ gfilter_dialog(GFilterArgs *args,
gtk_label_set_mnemonic_widget(GTK_LABEL(label), controls.color_button);
gtk_box_pack_start(GTK_BOX(hbox2), controls.color_button, FALSE, FALSE, 0);
- table = gtk_table_new(10, 4, FALSE);
+ table = gtk_table_new(10, 3, FALSE);
gtk_table_set_row_spacings(GTK_TABLE(table), 2);
gtk_table_set_col_spacings(GTK_TABLE(table), 6);
gtk_container_set_border_width(GTK_CONTAINER(table), 4);
@@ -373,8 +372,8 @@ gfilter_dialog(GFilterArgs *args,
scwin = gtk_scrolled_window_new(NULL, NULL);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scwin),
GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
- gtk_table_attach(GTK_TABLE(table), scwin, 0, 4, row, row+1,
- GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+ gtk_table_attach(GTK_TABLE(table), scwin, 0, 3, row, row+1,
+ GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
controls.values = gwy_grain_value_tree_view_new(FALSE,
"name", "symbol_markup",
@@ -401,7 +400,7 @@ gfilter_dialog(GFilterArgs *args,
g_signal_connect_swapped(controls.set_as[i], "clicked",
G_CALLBACK(set_as_clicked), &controls);
}
- gwy_table_attach_hscale(table, row++,
+ gwy_table_attach_adjbar(table, row++,
_("Set selected as:"), NULL,
GTK_OBJECT(hbox2), GWY_HSCALE_WIDGET_NO_EXPAND);
@@ -416,7 +415,7 @@ gfilter_dialog(GFilterArgs *args,
"(A ∧ B) ∨ C", GRAIN_LOGICAL_A_AND_B_OR_C,
"(A ∨ B) ∧ C", GRAIN_LOGICAL_A_OR_B_AND_C,
NULL);
- gwy_table_attach_hscale(table, row++,
+ gwy_table_attach_adjbar(table, row++,
_("Keep grains satisfying:"), NULL,
GTK_OBJECT(controls.logical_op),
GWY_HSCALE_WIDGET);
@@ -427,33 +426,25 @@ gfilter_dialog(GFilterArgs *args,
controls.header[i] = gtk_label_new(NULL);
gtk_misc_set_alignment(GTK_MISC(controls.header[i]), 0.0, 0.5);
gtk_table_attach(GTK_TABLE(table), controls.header[i],
- 0, 4, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
/* The values are set properly later. */
- controls.lower_label[i] = gtk_label_new(_("Lower threshold:"));
- gtk_misc_set_alignment(GTK_MISC(controls.lower_label[i]), 0.0, 0.5);
- gtk_table_attach(GTK_TABLE(table), controls.lower_label[i],
- 0, 1, row, row+1, GTK_FILL, 0, 0, 0);
-
- controls.lower[i] = gtk_adjustment_new(0.0, 0.0, 0.0,
- 1.0, 10.0, 0.0);
+ controls.lower[i] = gtk_adjustment_new(0.0, 0.0, 0.0, 1.0, 10.0, 0.0);
g_object_set_data(G_OBJECT(controls.lower[i]), "id",
GUINT_TO_POINTER(i));
g_signal_connect_swapped(controls.lower[i], "value-changed",
G_CALLBACK(threshold_changed), &controls);
controls.lower_scale[i]
- = gtk_hscale_new(GTK_ADJUSTMENT(controls.lower[i]));
- gtk_scale_set_draw_value(GTK_SCALE(controls.lower_scale[i]), FALSE);
- gtk_widget_set_size_request(controls.lower_scale[i],
- GWY_HSCALE_WIDTH, -1);
+ = gwy_adjust_bar_new(GTK_ADJUSTMENT(controls.lower[i]),
+ _("Lower threshold:"));
gtk_table_attach(GTK_TABLE(table), controls.lower_scale[i],
- 1, 2, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 1, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
controls.lower_entry[i] = gtk_entry_new();
gtk_entry_set_width_chars(GTK_ENTRY(controls.lower_entry[i]), 8);
gtk_table_attach(GTK_TABLE(table), controls.lower_entry[i],
- 2, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 1, 2, row, row+1, GTK_FILL, 0, 0, 0);
gwy_widget_set_activate_on_unfocus(controls.lower_entry[i], TRUE);
g_object_set_data(G_OBJECT(controls.lower_entry[i]), "id",
GUINT_TO_POINTER(i));
@@ -463,32 +454,24 @@ gfilter_dialog(GFilterArgs *args,
controls.lower_units[i] = gtk_label_new(NULL);
gtk_misc_set_alignment(GTK_MISC(controls.lower_units[i]), 0.0, 0.5);
gtk_table_attach(GTK_TABLE(table), controls.lower_units[i],
- 3, 4, row, row+1, GTK_FILL, 0, 0, 0);
+ 2, 3, row, row+1, GTK_FILL, 0, 0, 0);
row++;
- controls.upper_label[i] = gtk_label_new(_("Upper threshold:"));
- gtk_misc_set_alignment(GTK_MISC(controls.upper_label[i]), 0.0, 0.5);
- gtk_table_attach(GTK_TABLE(table), controls.upper_label[i],
- 0, 1, row, row+1, GTK_FILL, 0, 0, 0);
-
- controls.upper[i] = gtk_adjustment_new(0.0, 0.0, 0.0,
- 1.0, 10.0, 0.0);
+ controls.upper[i] = gtk_adjustment_new(0.0, 0.0, 0.0, 1.0, 10.0, 0.0);
g_object_set_data(G_OBJECT(controls.upper[i]), "id",
GUINT_TO_POINTER(i | IS_UPPER));
g_signal_connect_swapped(controls.upper[i], "value-changed",
G_CALLBACK(threshold_changed), &controls);
controls.upper_scale[i]
- = gtk_hscale_new(GTK_ADJUSTMENT(controls.upper[i]));
- gtk_scale_set_draw_value(GTK_SCALE(controls.upper_scale[i]), FALSE);
- gtk_widget_set_size_request(controls.upper_scale[i],
- GWY_HSCALE_WIDTH, -1);
+ = gwy_adjust_bar_new(GTK_ADJUSTMENT(controls.upper[i]),
+ _("Upper threshold:"));
gtk_table_attach(GTK_TABLE(table), controls.upper_scale[i],
- 1, 2, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 1, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
controls.upper_entry[i] = gtk_entry_new();
gtk_entry_set_width_chars(GTK_ENTRY(controls.upper_entry[i]), 8);
gtk_table_attach(GTK_TABLE(table), controls.upper_entry[i],
- 2, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 1, 2, row, row+1, GTK_FILL, 0, 0, 0);
gwy_widget_set_activate_on_unfocus(controls.upper_entry[i], TRUE);
g_object_set_data(G_OBJECT(controls.upper_entry[i]), "id",
GUINT_TO_POINTER(i | IS_UPPER));
@@ -498,7 +481,7 @@ gfilter_dialog(GFilterArgs *args,
controls.upper_units[i] = gtk_label_new(NULL);
gtk_misc_set_alignment(GTK_MISC(controls.upper_units[i]), 0.0, 0.5);
gtk_table_attach(GTK_TABLE(table), controls.upper_units[i],
- 3, 4, row, row+1, GTK_FILL, 0, 0, 0);
+ 2, 3, row, row+1, GTK_FILL, 0, 0, 0);
row++;
}
@@ -775,11 +758,9 @@ logical_op_changed(GtkComboBox *combo, GFilterControls *controls)
if (sens) {
gtk_widget_show(controls->set_as[i]);
gtk_widget_show(controls->header[i]);
- gtk_widget_show(controls->lower_label[i]);
gtk_widget_show(controls->lower_scale[i]);
gtk_widget_show(controls->lower_entry[i]);
gtk_widget_show(controls->lower_units[i]);
- gtk_widget_show(controls->upper_label[i]);
gtk_widget_show(controls->upper_scale[i]);
gtk_widget_show(controls->upper_entry[i]);
gtk_widget_show(controls->upper_units[i]);
@@ -787,11 +768,9 @@ logical_op_changed(GtkComboBox *combo, GFilterControls *controls)
else {
gtk_widget_hide(controls->set_as[i]);
gtk_widget_hide(controls->header[i]);
- gtk_widget_hide(controls->lower_label[i]);
gtk_widget_hide(controls->lower_scale[i]);
gtk_widget_hide(controls->lower_entry[i]);
gtk_widget_hide(controls->lower_units[i]);
- gtk_widget_hide(controls->upper_label[i]);
gtk_widget_hide(controls->upper_scale[i]);
gtk_widget_hide(controls->upper_entry[i]);
gtk_widget_hide(controls->upper_units[i]);
diff --git a/modules/process/grain_mark.c b/modules/process/grain_mark.c
index a550d25..07f555e 100644
--- a/modules/process/grain_mark.c
+++ b/modules/process/grain_mark.c
@@ -1,6 +1,6 @@
/*
- * @(#) $Id: grain_mark.c 18537 2016-03-28 18:11:19Z yeti-dn $
- * Copyright (C) 2004-2015 David Necas (Yeti), Petr Klapetek.
+ * @(#) $Id: grain_mark.c 19948 2017-06-22 14:05:41Z yeti-dn $
+ * Copyright (C) 2004-2017 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
* This program is free software; you can redistribute it and/or modify
@@ -27,7 +27,7 @@
#include <libprocess/grains.h>
#include <libprocess/stats.h>
#include <libgwydgets/gwycombobox.h>
-#include <libgwydgets/gwystock.h>
+#include <libgwydgets/gwyradiobuttons.h>
#include <libgwymodule/gwymodule-process.h>
#include <app/gwymoduleutils.h>
#include <app/gwyapp.h>
@@ -70,9 +70,9 @@ typedef struct {
GwySIValueFormat *format_height;
GtkObject *threshold_slope;
GtkObject *threshold_lap;
- GtkWidget *merge;
+ GSList *merge_type;
GtkWidget *combine;
- GtkWidget *combine_type;
+ GSList *combine_type;
GtkWidget *color_button;
GtkWidget *update;
GwyContainer *mydata;
@@ -103,8 +103,6 @@ static void mark_dialog_update_values (MarkControls *controls,
static void update_threshold_value (MarkControls *controls);
static void update_change_cb (MarkControls *controls);
static void mark_invalidate (MarkControls *controls);
-static void mark_invalidate2 (gpointer whatever,
- MarkControls *controls);
static void preview (MarkControls *controls,
MarkArgs *args);
static void mask_process (GwyDataField *dfield,
@@ -138,12 +136,12 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Marks grains by thresholding (height, slope, curvature)."),
"Petr Klapetek <petr at klapetek.cz>",
- "1.18",
+ "1.20",
"David Nečas (Yeti) & Petr Klapetek",
"2003",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, grain_mark)
static gboolean
module_register(void)
@@ -192,7 +190,8 @@ table_attach_threshold(GtkWidget *table, gint *row, const gchar *name,
gpointer data)
{
*adj = gtk_adjustment_new(value, 0.0, 100.0, 0.1, 5, 0);
- gwy_table_attach_hscale(table, *row, name, "%", *adj, GWY_HSCALE_CHECK);
+ gwy_table_attach_adjbar(table, *row, name, "%", *adj,
+ GWY_HSCALE_CHECK | GWY_HSCALE_LINEAR);
*check = gwy_table_hscale_get_check(*adj);
g_signal_connect_swapped(*adj, "value-changed",
G_CALLBACK(mark_invalidate), data);
@@ -271,7 +270,7 @@ mark_dialog(MarkArgs *args,
controls.view = create_preview(controls.mydata, 0, PREVIEW_SIZE, TRUE);
gtk_box_pack_start(GTK_BOX(hbox), controls.view, FALSE, FALSE, 4);
- table = gtk_table_new(10 + 2*(!!existing_mask), 4, FALSE);
+ table = gtk_table_new(10 + 1*(!!existing_mask), 3, FALSE);
gtk_table_set_row_spacings(GTK_TABLE(table), 2);
gtk_table_set_col_spacings(GTK_TABLE(table), 6);
gtk_container_set_border_width(GTK_CONTAINER(table), 4);
@@ -279,7 +278,7 @@ mark_dialog(MarkArgs *args,
row = 0;
gtk_table_attach(GTK_TABLE(table), gwy_label_new_header(_("Threshold by")),
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
table_attach_threshold(table, &row, _("_Height:"),
@@ -290,7 +289,7 @@ mark_dialog(MarkArgs *args,
controls.value_height = gtk_label_new(NULL);
gtk_misc_set_alignment(GTK_MISC(controls.value_height), 1.0, 0.5);
gtk_table_attach(GTK_TABLE(table), controls.value_height,
- 2, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 1, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect_swapped(controls.threshold_height, "value-changed",
G_CALLBACK(update_threshold_value), &controls);
gwy_widget_sync_sensitivity(pivot, controls.value_height);
@@ -302,7 +301,7 @@ mark_dialog(MarkArgs *args,
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
gtk_label_set_markup(GTK_LABEL(label), controls.format_height->units);
gtk_table_attach(GTK_TABLE(table), label,
- 3, 4, row, row+1, GTK_FILL, 0, 0, 0);
+ 2, 3, row, row+1, GTK_FILL, 0, 0, 0);
gwy_widget_sync_sensitivity(pivot, label);
gtk_table_set_row_spacing(GTK_TABLE(table), row, 8);
@@ -317,63 +316,49 @@ mark_dialog(MarkArgs *args,
&controls.is_lap, &controls);
gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
- controls.merge
- = gwy_enum_combo_box_new(gwy_merge_type_get_enum(), -1,
- G_CALLBACK(mark_invalidate2), &controls,
- args->merge_type, TRUE);
- gwy_table_attach_hscale(table, row, _("Criteria combination:"), NULL,
- GTK_OBJECT(controls.merge), GWY_HSCALE_WIDGET);
- row++;
-
controls.inverted = gtk_check_button_new_with_mnemonic(_("_Invert height"));
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.inverted),
args->inverted);
gtk_table_attach(GTK_TABLE(table), controls.inverted,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect_swapped(controls.inverted, "toggled",
G_CALLBACK(mark_invalidate), &controls);
row++;
+ create_mask_merge_buttons(table, row, _("Criteria combination:"),
+ TRUE, NULL,
+ args->merge_type, G_CALLBACK(mark_invalidate),
+ &controls, NULL, &controls.merge_type);
+ row++;
+
gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
gtk_table_attach(GTK_TABLE(table), gwy_label_new_header(_("Options")),
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
- if (existing_mask) {
- controls.combine
- = gtk_check_button_new_with_mnemonic(_("Com_bine with "
- "existing mask"));
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.combine),
- args->combine);
- gtk_table_attach(GTK_TABLE(table), controls.combine,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
- g_signal_connect_swapped(controls.combine, "toggled",
- G_CALLBACK(mark_invalidate), &controls);
- row++;
-
- controls.combine_type
- = gwy_enum_combo_box_new(gwy_merge_type_get_enum(), -1,
- G_CALLBACK(mark_invalidate2), &controls,
- args->combine_type, TRUE);
- gwy_table_attach_hscale(table, row, _("Operation:"), NULL,
- GTK_OBJECT(controls.combine_type),
- GWY_HSCALE_WIDGET);
- gtk_table_set_row_spacing(GTK_TABLE(table), row, 8);
- row++;
- }
-
controls.color_button = create_mask_color_button(controls.mydata, dialog,
0);
- gwy_table_attach_hscale(table, row++, _("_Mask color:"), NULL,
+ gwy_table_attach_adjbar(table, row++, _("_Mask color:"), NULL,
GTK_OBJECT(controls.color_button),
GWY_HSCALE_WIDGET_NO_EXPAND);
row++;
+ if (existing_mask) {
+ create_mask_merge_buttons(table, row, NULL,
+ args->combine,
+ G_CALLBACK(mark_invalidate),
+ args->combine_type,
+ G_CALLBACK(mark_invalidate),
+ &controls,
+ &controls.combine, &controls.combine_type);
+ row++;
+ }
+
controls.update = gtk_check_button_new_with_mnemonic(_("I_nstant updates"));
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.update),
args->update);
gtk_table_attach(GTK_TABLE(table), controls.update,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect_swapped(controls.update, "toggled",
G_CALLBACK(update_change_cb), &controls);
@@ -485,12 +470,11 @@ mark_dialog_update_controls(MarkControls *controls,
args->is_lap);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls->update),
args->update);
- gwy_enum_combo_box_set_active(GTK_COMBO_BOX(controls->merge),
- args->merge_type);
+ gwy_radio_buttons_set_current(controls->merge_type, args->merge_type);
if (controls->combine) {
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls->combine),
args->combine);
- gwy_enum_combo_box_set_active(GTK_COMBO_BOX(controls->combine_type),
+ gwy_radio_buttons_set_current(controls->combine_type,
args->combine_type);
}
}
@@ -515,13 +499,12 @@ mark_dialog_update_values(MarkControls *controls,
= gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(controls->is_lap));
args->update
= gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(controls->update));
- args->merge_type
- = gwy_enum_combo_box_get_active(GTK_COMBO_BOX(controls->merge));
+ args->merge_type = gwy_radio_buttons_get_current(controls->merge_type);
if (controls->combine) {
args->combine = gtk_toggle_button_get_active
(GTK_TOGGLE_BUTTON(controls->combine));
- args->combine_type = gwy_enum_combo_box_get_active
- (GTK_COMBO_BOX(controls->combine_type));
+ args->combine_type
+ = gwy_radio_buttons_get_current(controls->combine_type);
}
}
@@ -567,12 +550,6 @@ update_change_cb(MarkControls *controls)
}
static void
-mark_invalidate2(G_GNUC_UNUSED gpointer whatever, MarkControls *controls)
-{
- mark_invalidate(controls);
-}
-
-static void
preview(MarkControls *controls,
MarkArgs *args)
{
diff --git a/modules/process/grain_stat.c b/modules/process/grain_stat.c
index c87c58f..ccbe3c8 100644
--- a/modules/process/grain_stat.c
+++ b/modules/process/grain_stat.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: grain_stat.c 18877 2016-08-24 14:48:29Z yeti-dn $
+ * @(#) $Id: grain_stat.c 19950 2017-06-22 15:03:32Z yeti-dn $
* Copyright (C) 2014 David Necas (Yeti), Petr Klapetek, Sven Neumann.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net, neumann at jpk.com.
*
@@ -59,7 +59,7 @@ static GwyModuleInfo module_info = {
"2015",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, grain_stat)
static gboolean
module_register(void)
@@ -74,7 +74,7 @@ module_register(void)
gwy_process_func_register("grain_inscribe_discs",
(GwyProcessFunc)&grain_inscribe_discs,
N_("/_Grains/Select _Inscribed Discs"),
- GWY_STOCK_GRAIN_EXSCRIBED_CIRCLE,
+ GWY_STOCK_GRAIN_INSCRIBED_CIRCLE,
INSCRIBE_RUN_MODES,
GWY_MENU_FLAG_DATA | GWY_MENU_FLAG_DATA_MASK,
N_("Create a selection visualizing discs "
@@ -82,7 +82,7 @@ module_register(void)
gwy_process_func_register("grain_exscribe_circles",
(GwyProcessFunc)&grain_exscribe_circles,
N_("/_Grains/Select _Circumscribed Circles"),
- GWY_STOCK_GRAIN_INSCRIBED_CIRCLE,
+ GWY_STOCK_GRAIN_EXSCRIBED_CIRCLE,
INSCRIBE_RUN_MODES,
GWY_MENU_FLAG_DATA | GWY_MENU_FLAG_DATA_MASK,
N_("Create a selection visualizing grain "
diff --git a/modules/process/grain_wshed.c b/modules/process/grain_wshed.c
index 2377f9d..16936b6 100644
--- a/modules/process/grain_wshed.c
+++ b/modules/process/grain_wshed.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: grain_wshed.c 18537 2016-03-28 18:11:19Z yeti-dn $
+ * @(#) $Id: grain_wshed.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2004 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -26,6 +26,7 @@
#include <libprocess/stats.h>
#include <libprocess/grains.h>
#include <libgwydgets/gwystock.h>
+#include <libgwydgets/gwydgetutils.h>
#include <libgwymodule/gwymodule-process.h>
#include <app/gwymoduleutils.h>
#include <app/gwyapp.h>
@@ -100,12 +101,12 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Marks grains by watershed algorithm."),
"Petr Klapetek <petr at klapetek.cz>",
- "1.17",
+ "1.18",
"David Nečas (Yeti) & Petr Klapetek",
"2004",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, grain_wshed)
static gboolean
module_register(void)
@@ -189,7 +190,7 @@ wshed_dialog(WshedArgs *args,
controls.view = create_preview(controls.mydata, 0, PREVIEW_SIZE, TRUE);
gtk_box_pack_start(GTK_BOX(hbox), controls.view, FALSE, FALSE, 4);
- table = gtk_table_new(9, 4, FALSE);
+ table = gtk_table_new(9, 3, FALSE);
gtk_table_set_row_spacings(GTK_TABLE(table), 2);
gtk_table_set_col_spacings(GTK_TABLE(table), 6);
gtk_container_set_border_width(GTK_CONTAINER(table), 4);
@@ -198,20 +199,21 @@ wshed_dialog(WshedArgs *args,
label = gwy_label_new_header(_("Grain Location"));
gtk_table_attach(GTK_TABLE(table), label,
- 0, 2, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
controls.locate_steps = gtk_adjustment_new(args->locate_steps,
1.0, 100.0, 1, 5, 0);
- gwy_table_attach_hscale(table, row, _("_Number of steps:"), "",
- controls.locate_steps, 0);
+ gwy_table_attach_adjbar(table, row, _("_Number of steps:"), NULL,
+ controls.locate_steps,
+ GWY_HSCALE_SQRT | GWY_HSCALE_SNAP);
g_signal_connect_swapped(controls.locate_steps, "value-changed",
G_CALLBACK(wshed_invalidate), &controls);
row++;
controls.locate_dropsize = gtk_adjustment_new(args->locate_dropsize,
0.01, 100.0, 0.1, 5, 0);
- spin = gwy_table_attach_hscale(table, row, _("_Drop size:"), "%",
+ spin = gwy_table_attach_adjbar(table, row, _("_Drop size:"), "%",
controls.locate_dropsize, 0);
gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 2);
g_signal_connect_swapped(controls.locate_dropsize, "value-changed",
@@ -220,28 +222,30 @@ wshed_dialog(WshedArgs *args,
row++;
controls.locate_thresh = gtk_adjustment_new(args->locate_thresh,
0.0, 100.0, 1, 5, 0);
- gwy_table_attach_hscale(table, row, _("T_hreshold:"), "px<sup>2</sup>",
- controls.locate_thresh, 0);
+ gwy_table_attach_adjbar(table, row, _("T_hreshold:"), "px<sup>2</sup>",
+ controls.locate_thresh,
+ GWY_HSCALE_SQRT | GWY_HSCALE_SNAP);
g_signal_connect_swapped(controls.locate_thresh, "value-changed",
G_CALLBACK(wshed_invalidate), &controls);
gtk_table_set_row_spacing(GTK_TABLE(table), row, 8);
row++;
gtk_table_attach(GTK_TABLE(table), gwy_label_new_header(_("Segmentation")),
- 0, 2, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
controls.wshed_steps = gtk_adjustment_new(args->wshed_steps,
1.0, 1000.0, 1, 5, 0);
- gwy_table_attach_hscale(table, row, _("Num_ber of steps:"), "",
- controls.wshed_steps, 0);
+ gwy_table_attach_adjbar(table, row, _("Num_ber of steps:"), NULL,
+ controls.wshed_steps,
+ GWY_HSCALE_SQRT | GWY_HSCALE_SNAP);
g_signal_connect_swapped(controls.wshed_steps, "value-changed",
G_CALLBACK(wshed_invalidate), &controls);
row++;
controls.wshed_dropsize = gtk_adjustment_new(args->wshed_dropsize,
0.01, 100.0, 0.1, 5, 0);
- spin = gwy_table_attach_hscale(table, row, _("Dr_op size:"), "%",
+ spin = gwy_table_attach_adjbar(table, row, _("Dr_op size:"), "%",
controls.wshed_dropsize, 0);
gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 2);
g_signal_connect_swapped(controls.wshed_dropsize, "value-changed",
@@ -250,21 +254,21 @@ wshed_dialog(WshedArgs *args,
row++;
gtk_table_attach(GTK_TABLE(table), gwy_label_new_header(_("Options")),
- 0, 2, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
controls.inverted = gtk_check_button_new_with_mnemonic(_("_Invert height"));
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.inverted),
args->inverted);
gtk_table_attach(GTK_TABLE(table), controls.inverted,
- 0, 4, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect_swapped(controls.inverted, "toggled",
G_CALLBACK(wshed_invalidate), &controls);
row++;
controls.color_button = create_mask_color_button(controls.mydata, dialog,
0);
- gwy_table_attach_hscale(table, row, _("_Mask color:"), NULL,
+ gwy_table_attach_adjbar(table, row, _("_Mask color:"), NULL,
GTK_OBJECT(controls.color_button),
GWY_HSCALE_WIDGET_NO_EXPAND);
row++;
diff --git a/modules/process/hough.c b/modules/process/hough.c
index 1c09749..ecc0105 100644
--- a/modules/process/hough.c
+++ b/modules/process/hough.c
@@ -1,4 +1,5 @@
/*
+ * @(#) $Id: hough.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2003 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -45,23 +46,24 @@ typedef struct {
} HoughArgs;
typedef struct {
+ HoughArgs *args;
GtkWidget *output;
GtkObject *circle_size;
GtkWidget *circle_spin;
} HoughControls;
-static gboolean module_register (void);
-static void hough (GwyContainer *data,
- GwyRunType run);
-static gboolean hough_dialog (HoughArgs *args);
-static void hough_load_args (GwyContainer *container,
- HoughArgs *args);
-static void hough_save_args (GwyContainer *container,
- HoughArgs *args);
-static void hough_dialog_update (HoughControls *controls,
- HoughArgs *args);
-static void type_changed_cb (GtkComboBox *combo,
- HoughControls *controls);
+static gboolean module_register (void);
+static void hough (GwyContainer *data,
+ GwyRunType run);
+static gboolean hough_dialog (HoughArgs *args);
+static void hough_load_args (GwyContainer *container,
+ HoughArgs *args);
+static void hough_save_args (GwyContainer *container,
+ HoughArgs *args);
+static void hough_dialog_update(HoughControls *controls,
+ HoughArgs *args);
+static void output_changed (GtkComboBox *combo,
+ HoughControls *controls);
static const HoughArgs hough_defaults = {
GWY_HOUGH_OUTPUT_LINE,
@@ -73,12 +75,12 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Hough transform."),
"Petr Klapetek <klapetek at gwyddion.net>",
- "1.2",
+ "1.3",
"David Nečas (Yeti) & Petr Klapetek",
"2006",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, hough)
static gboolean
module_register(void)
@@ -102,7 +104,7 @@ hough(GwyContainer *data, GwyRunType run)
gboolean ok;
HoughArgs args;
gint id, newid;
- gchar title[30];
+ gchar *title;
g_return_if_fail(run & HOUGH_RUN_MODES);
gwy_app_data_browser_get_current(GWY_APP_DATA_FIELD, &dfield,
@@ -132,21 +134,12 @@ hough(GwyContainer *data, GwyRunType run)
gwy_data_field_filter_sobel(f1, GWY_ORIENTATION_HORIZONTAL);
gwy_data_field_filter_sobel(f2, GWY_ORIENTATION_VERTICAL);
if (args.output == GWY_HOUGH_OUTPUT_LINE) {
- g_snprintf(title, sizeof(title), "Hough line");
- gwy_data_field_hough_line(edgefield,
- f1,
- f2,
- result,
- 1,
- FALSE);
+ title = g_strdup(_("Hough line"));
+ gwy_data_field_hough_line(edgefield, f1, f2, result, 1, FALSE);
}
else {
- g_snprintf(title, sizeof(title), "Hough circle r=%d px",
- args.circle_size);
- gwy_data_field_hough_circle(edgefield,
- f1,
- f2,
- result,
+ title = g_strdup_printf(_("Hough circle r=%d"), args.circle_size);
+ gwy_data_field_hough_circle(edgefield, f1, f2, result,
args.circle_size);
}
@@ -158,11 +151,11 @@ hough(GwyContainer *data, GwyRunType run)
g_object_unref(edgefield);
g_object_unref(f1);
g_object_unref(f2);
+ g_free(title);
gwy_app_channel_log_add_proc(data, id, newid);
}
-
static gboolean
hough_dialog(HoughArgs *args)
{
@@ -175,6 +168,8 @@ hough_dialog(HoughArgs *args)
HoughControls controls;
gint response, row;
+ controls.args = args;
+
dialog = gtk_dialog_new_with_buttons(_("Hough Transform"), NULL, 0,
_("_Reset"), RESPONSE_RESET,
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
@@ -183,13 +178,12 @@ hough_dialog(HoughArgs *args)
gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK);
gwy_help_add_to_proc_dialog(GTK_DIALOG(dialog), GWY_HELP_DEFAULT);
- table = gtk_table_new(4, 4, FALSE);
+ table = gtk_table_new(4, 3, FALSE);
gtk_table_set_row_spacings(GTK_TABLE(table), 2);
gtk_table_set_col_spacings(GTK_TABLE(table), 6);
gtk_container_set_border_width(GTK_CONTAINER(table), 4);
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), table,
FALSE, FALSE, 4);
-
row = 0;
controls.output
@@ -197,20 +191,19 @@ hough_dialog(HoughArgs *args)
G_CALLBACK(gwy_enum_combo_box_update_int),
&args->output, args->output, TRUE);
g_signal_connect(GTK_COMBO_BOX(controls.output), "changed",
- G_CALLBACK(type_changed_cb), &controls);
- gwy_table_attach_row(table, row, _("_Transform type:"), NULL,
- controls.output);
-
-
-
+ G_CALLBACK(output_changed), &controls);
+ gwy_table_attach_adjbar(table, row, _("_Transform type:"), NULL,
+ GTK_OBJECT(controls.output),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
row++;
-
- controls.circle_size
- = gtk_adjustment_new(args->circle_size, 1.0, 1000.0, 1, 10, 0);
- controls.circle_spin
- = gwy_table_attach_spinbutton(table, 1, _("_Circle size:"), _("pixels"),
- controls.circle_size);
+ controls.circle_size = gtk_adjustment_new(args->circle_size,
+ 1.0, 1000.0, 1, 10, 0);
+ controls.circle_spin = gwy_table_attach_adjbar(table, 1,
+ _("_Circle size:"), _("px"),
+ controls.circle_size,
+ GWY_HSCALE_DEFAULT);
+ row++;
hough_dialog_update(&controls, args);
@@ -249,24 +242,22 @@ hough_dialog(HoughArgs *args)
}
static void
-type_changed_cb(GtkComboBox *combo, HoughControls *controls)
+output_changed(GtkComboBox *combo, HoughControls *controls)
{
- if (gwy_enum_combo_box_get_active(combo) == GWY_HOUGH_OUTPUT_CIRCLE)
- gtk_widget_set_sensitive(controls->circle_spin, TRUE);
- else
- gtk_widget_set_sensitive(controls->circle_spin, FALSE);
+ gboolean is_circ;
+
+ controls->args->output = gwy_enum_combo_box_get_active(combo);
+ is_circ = (controls->args->output == GWY_HOUGH_OUTPUT_CIRCLE);
+ gwy_table_hscale_set_sensitive(controls->circle_size, is_circ);
}
static void
-hough_dialog_update(HoughControls *controls,
- HoughArgs *args)
+hough_dialog_update(HoughControls *controls, HoughArgs *args)
{
+ gwy_enum_combo_box_set_active(GTK_COMBO_BOX(controls->output),
+ args->output);
gtk_adjustment_set_value(GTK_ADJUSTMENT(controls->circle_size),
args->circle_size);
- if (args->output == GWY_HOUGH_OUTPUT_CIRCLE)
- gtk_widget_set_sensitive(controls->circle_spin, TRUE);
- else
- gtk_widget_set_sensitive(controls->circle_spin, FALSE);
}
static const gchar output_key[] = "/module/hough/output";
@@ -280,8 +271,7 @@ hough_sanitize_args(HoughArgs *args)
}
static void
-hough_load_args(GwyContainer *container,
- HoughArgs *args)
+hough_load_args(GwyContainer *container, HoughArgs *args)
{
*args = hough_defaults;
@@ -292,8 +282,7 @@ hough_load_args(GwyContainer *container,
}
static void
-hough_save_args(GwyContainer *container,
- HoughArgs *args)
+hough_save_args(GwyContainer *container, HoughArgs *args)
{
gwy_container_set_enum_by_name(container, output_key, args->output);
gwy_container_set_int32_by_name(container, circle_size_key,
diff --git a/modules/process/immerse.c b/modules/process/immerse.c
index 8b6fa0e..6fdba95 100644
--- a/modules/process/immerse.c
+++ b/modules/process/immerse.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: immerse.c 19216 2016-11-09 10:39:06Z yeti-dn $
+ * @(#) $Id: immerse.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2004 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -78,6 +78,7 @@ typedef struct {
GwyContainer *mydata;
GtkWidget *view;
GtkWidget *pos;
+ GtkWidget *pos_units;
GSList *sampling;
GSList *leveling;
GtkWidget *draw_frame;
@@ -161,12 +162,12 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Immerse high resolution detail into overall image."),
"Petr Klapetek <klapetek at gwyddion.net>",
- "2.5",
+ "2.6",
"David Nečas (Yeti) & Petr Klapetek",
"2006",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, immerse)
static gboolean
module_register(void)
@@ -287,7 +288,7 @@ immerse_dialog(ImmerseArgs *args)
gwy_data_chooser_get_active_id(GWY_DATA_CHOOSER(chooser), &args->detail);
g_signal_connect(chooser, "changed",
G_CALLBACK(immerse_detail_cb), &controls);
- gwy_table_attach_hscale(table, row, _("_Detail image:"), NULL,
+ gwy_table_attach_adjbar(table, row, _("_Detail image:"), NULL,
GTK_OBJECT(chooser), GWY_HSCALE_WIDGET_NO_EXPAND);
row++;
@@ -298,17 +299,22 @@ immerse_dialog(ImmerseArgs *args)
0, 1, row, row+1, GTK_FILL, 0, 0, 0);
controls.pos = gtk_label_new(NULL);
- gtk_misc_set_alignment(GTK_MISC(controls.pos), 0.0, 0.5);
+ gtk_misc_set_alignment(GTK_MISC(controls.pos), 1.0, 0.5);
gtk_table_attach(GTK_TABLE(table), controls.pos,
- 1, 3, row, row+1, GTK_FILL, 0, 0, 0);
- gtk_table_set_row_spacing(GTK_TABLE(table), row, 8);
+ 1, 2, row, row+1, GTK_FILL, 0, 0, 0);
+
+ controls.pos_units = gtk_label_new(NULL);
+ gtk_misc_set_alignment(GTK_MISC(controls.pos_units), 0.0, 0.5);
+ gtk_table_attach(GTK_TABLE(table), controls.pos_units,
+ 2, 3, row, row+1, GTK_FILL, 0, 0, 0);
row++;
/* Sampling */
+ gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
label = gtk_label_new(_("Result Sampling"));
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
gtk_table_attach(GTK_TABLE(table), label,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
controls.sampling
@@ -329,7 +335,7 @@ immerse_dialog(ImmerseArgs *args)
label = gtk_label_new(_("Detail Leveling"));
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
gtk_table_attach(GTK_TABLE(table), label,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
controls.leveling
@@ -342,13 +348,13 @@ immerse_dialog(ImmerseArgs *args)
NULL);
row = gwy_radio_buttons_attach_to_table(controls.leveling, GTK_TABLE(table),
- 4, row);
- gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
+ 2, row);
/* Draw frame */
+ gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
controls.draw_frame = gtk_check_button_new_with_mnemonic(_("Show _frame"));
gtk_table_attach(GTK_TABLE(table), controls.draw_frame,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.draw_frame),
args->draw_frame);
g_signal_connect(controls.draw_frame, "toggled",
@@ -968,15 +974,16 @@ immerse_clamp_detail_offset(ImmerseControls *controls,
controls->args->xpos = xpos;
controls->args->ypos = ypos;
- s = g_strdup_printf("(%.*f, %.*f) %s",
+ s = g_strdup_printf("(%.*f, %.*f)",
controls->vf->precision + 1,
xpos/controls->vf->magnitude,
controls->vf->precision + 1,
- ypos/controls->vf->magnitude,
- controls->vf->units);
+ ypos/controls->vf->magnitude);
gtk_label_set_text(GTK_LABEL(controls->pos), s);
g_free(s);
+ gtk_label_set_text(GTK_LABEL(controls->pos_units), controls->vf->units);
+
if (GTK_WIDGET_DRAWABLE(controls->view))
gtk_widget_queue_draw(controls->view);
return TRUE;
diff --git a/modules/process/indent_analyze.c b/modules/process/indent_analyze.c
index 3a7e68e..37802df 100644
--- a/modules/process/indent_analyze.c
+++ b/modules/process/indent_analyze.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: indent_analyze.c 19216 2016-11-09 10:39:06Z yeti-dn $
+ * @(#) $Id: indent_analyze.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2006 Lukas Chvatal, David Necas (Yeti), Petr Klapetek.
* E-mail: chvatal at physics.muni.cz, yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -104,7 +104,6 @@ typedef struct {
gdouble plane_tol; /* what to consider as belonging to plane/percents
of max-min */
gdouble phi_tol;
- gdouble theta_tol; /* XXX: not implemented */
gdouble plane_x;
gdouble plane_y;
@@ -135,22 +134,20 @@ typedef struct {
gint what_mark;
gint how_mark;
- gint plane_correct; /* XXX: not implemented */
GwyIndentorType indentor;
gint nof_sides;
} IndentAnalyzeArgs;
typedef struct {
- GtkWidget *w_plane_correct;
- GtkWidget *w_how_mark;
- GtkWidget *w_what_mark;
- GtkWidget *w_indentor;
+ GtkWidget *how_mark;
+ GtkWidget *what_mark;
+ GtkWidget *indentor;
- GtkObject *w_plane_tol;
- GtkObject *w_nof_sides;
- GtkObject *w_phi_tol;
- GtkObject *w_theta_tol;
+ GtkObject *plane_tol;
+ GtkObject *nof_sides;
+ GtkObject *phi_tol;
+ GtkObject *theta_tol;
GtkWidget *view;
GwyContainer *mydata;
@@ -159,32 +156,23 @@ typedef struct {
gboolean computed;
/* labels */
- GtkWidget *w_min_xy;
- GtkWidget *w_max_xy;
- GtkWidget *w_minmax;
+ GtkWidget *min_xy;
+ GtkWidget *max_xy;
+ GtkWidget *minmax;
- GtkWidget *w_volume_above;
- GtkWidget *w_volume_below;
- GtkWidget *w_volume_dif;
+ GtkWidget *volume_dif;
- GtkWidget *w_area_above;
- GtkWidget *w_area_below;
- GtkWidget *w_area_plane;
+ GtkWidget *volume_indent;
+ GtkWidget *surface_indent;
+ GtkWidget *area_indent;
- GtkWidget *w_surface_above;
- GtkWidget *w_surface_below;
+ GtkWidget *area_indent_exp;
+ GtkWidget *surface_indent_exp;
- GtkWidget *w_volume_indent;
- GtkWidget *w_surface_indent;
- GtkWidget *w_area_indent;
-
- GtkWidget *w_area_indent_exp;
- GtkWidget *w_surface_indent_exp;
-
- GtkWidget *w_surface_innerpileup;
- GtkWidget *w_surface_outerpileup;
- GtkWidget *w_area_innerpileup;
- GtkWidget *w_area_outerpileup;
+ GtkWidget *surface_innerpileup;
+ GtkWidget *surface_outerpileup;
+ GtkWidget *area_innerpileup;
+ GtkWidget *area_outerpileup;
GtkFileSelection *filesel;
@@ -209,9 +197,6 @@ static gboolean indent_analyze(GwyContainer *data, GwyRunType run);
static gboolean indent_analyze_dialog(GwyContainer *data,
IndentAnalyzeArgs *args);
-static void dialog_update(IndentAnalyzeControls *controls,
- IndentAnalyzeArgs *args);
-
/*static void plane_correct_cb(GtkWidget *item, IndentAnalyzeControls *controls);*/
static void how_mark_cb(GtkWidget *item, IndentAnalyzeControls *controls);
static void what_mark_cb(GtkWidget *item, IndentAnalyzeControls *controls);
@@ -302,15 +287,12 @@ static GwyModuleInfo module_info = {
(GwyModuleRegisterFunc) &module_register,
N_("Analyses nanoindentation structure (volumes, surfaces, ...)."),
"Lukáš Chvátal <chvatal at physics.muni.cz>",
- "0.1.4",
+ "0.1.5",
"Lukáš Chvátal",
"2005",
};
-/* This is the ONLY exported symbol. The argument is the module info.
- * NO semicolon after. */
-GWY_MODULE_QUERY(module_info)
-
+GWY_MODULE_QUERY2(module_info, indent_analyze);
static gboolean
module_register(void)
@@ -340,7 +322,8 @@ indent_analyze(GwyContainer *data, GwyRunType run)
load_args(gwy_app_settings_get(), &args);
indent_analyze_dialog(data, &args);
save_args(gwy_app_settings_get(), &args);
- } else {
+ }
+ else {
g_warning("Non-interactive mode not supported.");
}
@@ -361,7 +344,6 @@ create_preview_data(IndentAnalyzeControls *controls)
GwyDataField *dfield = NULL, *mask;
gint oldid;
// No zoom, zoom disorder final result
- // gdouble zoomval;
const GwyRGBA mask_color = { 1.0, 0.0, 0.00, 0.5 };
gwy_app_data_browser_get_current(GWY_APP_DATA_FIELD, &dfield,
@@ -373,12 +355,6 @@ create_preview_data(IndentAnalyzeControls *controls)
preview_container = gwy_container_new();
dfield = gwy_data_field_duplicate(dfield);
- // No zoom because it disorder mask on original image.
- // zoomval = (gdouble)PREVIEW_SIZE/MAX(xres, yres);
- // gwy_data_field_resample(dfield, xres*zoomval, yres*zoomval,
- // GWY_INTERPOLATION_LINEAR);
-
-
gwy_container_set_object_by_name(preview_container, "/0/data", dfield);
mask = create_mask_field(dfield);
gwy_data_field_clear(mask);
@@ -393,11 +369,19 @@ create_preview_data(IndentAnalyzeControls *controls)
*/
gwy_rgba_store_to_container(gwy_rgba_copy(&mask_color),
- preview_container, "/0/mask");
+ preview_container, "/0/mask");
}
return preview_container;
}
+
+static void
+use_markup_in_label(GtkObject *pivot)
+{
+ GtkWidget *label = gwy_table_hscale_get_label(pivot);
+ gtk_label_set_use_markup(GTK_LABEL(label), TRUE);
+}
+
/** Create table with statistical info.
*
* \param controls build object
@@ -407,221 +391,163 @@ create_preview_data(IndentAnalyzeControls *controls)
static GtkWidget*
create_parameters_table(IndentAnalyzeControls * controls)
{
- IndentAnalyzeArgs * args = controls->args;
- int row = 0;
- GtkWidget *table = 0, *label;
- GwyDataField *dfield;
- GwySIValueFormat *siformat;
- GString *siu;
-
- /* TABLE */
- table = gtk_table_new(8, 3, FALSE);
- gtk_table_set_row_spacings(GTK_TABLE(table), 2);
- gtk_table_set_col_spacings(GTK_TABLE(table), 6);
- gtk_container_set_border_width(GTK_CONTAINER(table), 4);
-
- /*
- controls.w_plane_correct
- = gwy_option_menu_create(plane_correct_enum,
- G_N_ELEMENTS(plane_correct_enum),
- "menu_plane_correct",
- G_CALLBACK(plane_correct_cb), &controls,
- args->plane_correct);
- gwy_table_attach_hscale(table, row, _("Data field _leveling:"), NULL,
- GTK_OBJECT(controls.w_plane_correct),
- GWY_HSCALE_WIDGET);
+ IndentAnalyzeArgs * args = controls->args;
+ int row = 0;
+ GtkWidget *table = NULL;
+ GwyDataField *dfield;
+ GwySIValueFormat *siformat;
+ GString *siu;
+
+ /* TABLE */
+ table = gtk_table_new(8, 3, FALSE);
+ gtk_table_set_row_spacings(GTK_TABLE(table), 2);
+ gtk_table_set_col_spacings(GTK_TABLE(table), 6);
+ gtk_container_set_border_width(GTK_CONTAINER(table), 4);
+
+ controls->what_mark = gwy_enum_combo_box_new(what_mark_enum,
+ G_N_ELEMENTS(what_mark_enum), G_CALLBACK(what_mark_cb), controls,
+ args->what_mark, TRUE);
+ gwy_table_attach_adjbar(table, row++, _("Marked _areas:"), NULL,
+ GTK_OBJECT(controls->what_mark),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
+
+ controls->indentor = gwy_enum_combo_box_new(indentor_enum,
+ G_N_ELEMENTS(indentor_enum),
+ G_CALLBACK(indentor_changed_cb),
+ controls, args->indentor,
+ TRUE);
+ gwy_table_attach_adjbar(table, row++, _("_Indentor type:"), NULL,
+ GTK_OBJECT(controls->indentor),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
+
+ controls->how_mark = gwy_enum_combo_box_new(how_mark_enum,
+ G_N_ELEMENTS(how_mark_enum),
+ G_CALLBACK(how_mark_cb),
+ controls, args->how_mark,
+ TRUE);
+ gwy_table_attach_adjbar(table, row++, _("_Mask creation type:"), NULL,
+ GTK_OBJECT(controls->how_mark),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
+
+ controls->plane_tol = gtk_adjustment_new(args->plane_tol, 0, 100, 0.1, 1,
+ 0);
+ gwy_table_attach_adjbar(table, row++, _("Ref. plane _tolerance:"), "%",
+ controls->plane_tol, GWY_HSCALE_SQRT);
+
+ controls->phi_tol = gtk_adjustment_new(args->phi_tol, 0, 180, 0.1, 10, 0);
+ gwy_table_attach_adjbar(table, row++, _("Angle _1 tolerance:"), _("deg"),
+ controls->phi_tol, GWY_HSCALE_SQRT);
+
+ /* "statistical" labels */
+ dfield = GWY_DATA_FIELD(gwy_container_get_object_by_name(controls->mydata,
+ "/0/data"));
+ if (!dfield) {
+ g_warning("Cannot get /0/data from controls->mydata.");
+ }
+ siformat = gwy_data_field_get_value_format_xy(dfield,
+ GWY_SI_UNIT_FORMAT_PLAIN,
+ NULL);
+ if (!siformat) {
+ g_warning("Cannot get siformat from /0/data");
+ }
+ siu = g_string_new(siformat->units);
+
+ controls->min_xy = gtk_label_new(NULL);
+ gwy_table_attach_adjbar(table, row++, _("Indent center at"), siu->str,
+ GTK_OBJECT(controls->min_xy),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
+ controls->max_xy = gtk_label_new(NULL);
+ gwy_table_attach_adjbar(table, row++, _("Maximum at"), siu->str,
+ GTK_OBJECT(controls->max_xy),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
+ controls->minmax = gtk_label_new(NULL);
+ gwy_table_attach_adjbar(table, row++, _("Max-min difference"), siu->str,
+ GTK_OBJECT(controls->minmax),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
+
+ /* XXX: Wrong, must actually square the units. */
+ g_string_append(siu, "<sup>2</sup>");
+
+ controls->surface_indent_exp = gtk_label_new(NULL);
+ gwy_table_attach_adjbar(table, row, _("Expected A<sub>d</sub>:"), siu->str,
+ GTK_OBJECT(controls->surface_indent_exp),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
+ use_markup_in_label(GTK_OBJECT(controls->surface_indent_exp));
row++;
- */
- controls->w_what_mark = gwy_enum_combo_box_new(what_mark_enum,
- G_N_ELEMENTS(what_mark_enum), G_CALLBACK(what_mark_cb), controls,
- args->what_mark, TRUE);
- gwy_table_attach_hscale(table, row++, _("Marked _areas:"), NULL,
- GTK_OBJECT(controls->w_what_mark), GWY_HSCALE_WIDGET);
-
- controls->w_indentor = gwy_enum_combo_box_new(indentor_enum,
- G_N_ELEMENTS(indentor_enum), G_CALLBACK(indentor_changed_cb),
- controls, args->indentor, TRUE);
- gwy_table_attach_hscale(table, row++, _("_Indentor type:"), NULL,
- GTK_OBJECT(controls->w_indentor), GWY_HSCALE_WIDGET);
-
- controls->w_how_mark = gwy_enum_combo_box_new(how_mark_enum,
- G_N_ELEMENTS(how_mark_enum), G_CALLBACK(how_mark_cb), controls,
- args->how_mark, TRUE);
- gwy_table_attach_hscale(table, row++, _("_Mask creation type:"), NULL,
- GTK_OBJECT(controls->w_how_mark), GWY_HSCALE_WIDGET);
-
- controls->w_plane_tol = gtk_adjustment_new(args->plane_tol, 0, 100, 0.1, 1,
- 0);
- gwy_table_attach_hscale(table, row++, _("Ref. plane _tolerance:"), "%",
- controls->w_plane_tol, 0);
-
- controls->w_phi_tol = gtk_adjustment_new(args->phi_tol, 0, 180, 0.1, 10, 0);
- gwy_table_attach_hscale(table, row++, _("Angle _1 tolerance:"), _("deg"),
- controls->w_phi_tol, 0);
-
- /* XXX: what the hell is this for?
- controls.w_theta_tol = gtk_adjustment_new(args->theta_tol,
- 0, 90, 0.1, 10, 0);
- spin = gwy_table_attach_hscale(table, row, _("T_heta range:"), _("deg"),
- controls.w_theta_tol, 0);
+ controls->area_indent_exp = gtk_label_new(NULL);
+ gwy_table_attach_adjbar(table, row, _("Expected A<sub>p</sub>:"), siu->str,
+ GTK_OBJECT(controls->area_indent_exp),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
+ use_markup_in_label(GTK_OBJECT(controls->area_indent_exp));
row++;
- */
-
- /* "statistical" labels */
- dfield = GWY_DATA_FIELD(gwy_container_get_object_by_name(controls->mydata,
- "/0/data"));
- if (!dfield) {
- g_warning("Cannot get /0/data from controls->mydata.");
- }
- siformat = gwy_data_field_get_value_format_xy(dfield,
- GWY_SI_UNIT_FORMAT_PLAIN, NULL);
- if (!siformat) {
- g_warning("Cannot get siformat from /0/data");
- }
- siu = g_string_new(siformat->units);
-
- controls->w_min_xy = gtk_label_new("");
- gwy_table_attach_row(table, row++, _("Indent center at"), siu->str,
- controls->w_min_xy);
- controls->w_max_xy = gtk_label_new("");
- gwy_table_attach_row(table, row++, _("Maximum at"), siu->str,
- controls->w_max_xy);
- controls->w_minmax = gtk_label_new("");
- gwy_table_attach_row(table, row++, _("Max-min difference"), siu->str,
- controls->w_minmax);
-
- g_string_append(siu, "<sup>2</sup>");
-
- controls->w_surface_indent_exp = gtk_label_new("");
- gwy_table_attach_row(table, row, _("Expected A<sub>d</sub>:"), siu->str,
- controls->w_surface_indent_exp);
- if ( (label = gwy_table_get_child_widget(table, row, 0)) ) {
- gtk_label_set_markup_with_mnemonic(GTK_LABEL(label),
- gtk_label_get_text(GTK_LABEL(label)) );
- }
- row++;
- controls->w_area_indent_exp = gtk_label_new("");
- gwy_table_attach_row(table, row, _("Expected A<sub>p</sub>:"), siu->str,
- controls->w_area_indent_exp);
- if ( (label = gwy_table_get_child_widget(table, row, 0)) ) {
- gtk_label_set_markup_with_mnemonic(GTK_LABEL(label),
- gtk_label_get_text(GTK_LABEL(label)) );
- }
- row++;
- gtk_table_attach(GTK_TABLE(table), gtk_hseparator_new(), 0, 2, row, row + 1,
- (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (GTK_EXPAND
- | GTK_FILL), 0, 0);
- row++;
-
- /*
- controls.w_area_above = gtk_label_new ("");
- gtk_label_set_justify( &controls.w_area_above, GTK_JUSTIFY_RIGHT);
- gwy_table_attach_row(table, row, _("Area above"), siu->str,controls.w_area_above);
- row++;
- controls.w_area_below = gtk_label_new ("");
- gwy_table_attach_row(table, row, _("Area below"), siu->str,controls.w_area_below);
- row++;
- controls.w_area_plane = gtk_label_new ("");
- gwy_table_attach_row(table, row, _("Area of plane"), siu->str,controls.w_area_plane);
+ /* XXX: Wrong, must actually cube the units. */
+ g_string_assign(siu, siformat->units);
+ g_string_append(siu, "<sup>3</sup>");
+ controls->volume_dif = gtk_label_new(NULL);
+ gwy_table_attach_adjbar(table, row++, _("Volume above-below"), siu->str,
+ GTK_OBJECT(controls->volume_dif),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
+
+ controls->volume_indent = gtk_label_new(NULL);
+ gwy_table_attach_adjbar(table, row++, _("Indent. volume"), siu->str,
+ GTK_OBJECT(controls->volume_indent),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
+
+ /* XXX: Wrong, must actually square the units. */
+ g_string_assign(siu, siformat->units);
+ g_string_append(siu, "<sup>2</sup>");
+ controls->surface_indent = gtk_label_new(NULL);
+ gwy_table_attach_adjbar(table, row, _("Indent. A<sub>d</sub>"), siu->str,
+ GTK_OBJECT(controls->surface_indent),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
+ use_markup_in_label(GTK_OBJECT(controls->surface_indent));
row++;
- controls.w_surface_above = gtk_label_new ("");
- gwy_table_attach_row(table, row, _("Surface above"), siu->str,controls.w_surface_above);
- row++;
- controls.w_surface_below = gtk_label_new ("");
- gwy_table_attach_row(table, row, _("Surface below"), siu->str,controls.w_surface_below);
+ controls->area_indent = gtk_label_new(NULL);
+ gwy_table_attach_adjbar(table, row, _("Indent. A<sub>p</sub>"), siu->str,
+ GTK_OBJECT(controls->area_indent),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
+ use_markup_in_label(GTK_OBJECT(controls->area_indent));
row++;
- */
- g_string_assign(siu, siformat->units);
- g_string_append(siu, "<sup>3</sup>");
- /*
- controls.w_volume_above = gtk_label_new ("");
- gwy_table_attach_row(table, row, _("Volume above"), siu->str,controls.w_volume_above);
+ controls->surface_innerpileup = gtk_label_new(NULL);
+ gwy_table_attach_adjbar(table, row,
+ _("Inner Pile-Up A<sub>d</sub>"), siu->str,
+ GTK_OBJECT(controls->surface_innerpileup),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
+ use_markup_in_label(GTK_OBJECT(controls->surface_innerpileup));
row++;
- controls.w_volume_below = gtk_label_new ("");
- gwy_table_attach_row(table, row, _("Volume below"), siu->str,controls.w_volume_below);
- row++;
- */
- controls->w_volume_dif = gtk_label_new("");
- gwy_table_attach_row(table, row++, _("Volume above-below"), siu->str,
- controls->w_volume_dif);
-
- gtk_table_attach(GTK_TABLE(table), gtk_hseparator_new(), 0, 2, row, row + 1,
- (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (GTK_EXPAND
- | GTK_FILL), 0, 0);
- row++;
-
- controls->w_volume_indent = gtk_label_new("");
- gwy_table_attach_row(table, row++, _("Indent. volume"), siu->str,
- controls->w_volume_indent);
-
- g_string_assign(siu, siformat->units);
- g_string_append(siu, "<sup>2</sup>");
- controls->w_surface_indent = gtk_label_new("");
- gwy_table_attach_row(table, row, _("Indent. A<sub>d</sub>"), siu->str,
- controls->w_surface_indent);
- if ( (label = gwy_table_get_child_widget(table, row, 0)) ) {
- gtk_label_set_markup_with_mnemonic(GTK_LABEL(label),
- gtk_label_get_text(GTK_LABEL(label)) );
- }
- row++;
-
- controls->w_area_indent = gtk_label_new("");
- gwy_table_attach_row(table, row, _("Indent. A<sub>p</sub>"), siu->str,
- controls->w_area_indent);
- if ( (label = gwy_table_get_child_widget(table, row, 0)) ) {
- gtk_label_set_markup_with_mnemonic(GTK_LABEL(label),
- gtk_label_get_text(GTK_LABEL(label)) );
- }
- row++;
-
- gtk_table_attach(GTK_TABLE(table), gtk_hseparator_new(), 0, 2, row, row + 1,
- (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (GTK_EXPAND
- | GTK_FILL), 0, 0);
- row++;
-
- controls->w_surface_innerpileup = gtk_label_new("");
- gwy_table_attach_row(table, row, _("Inner Pile-Up A<sub>d</sub>"), siu->str,
- controls->w_surface_innerpileup);
- if ( (label = gwy_table_get_child_widget(table, row, 0)) ) {
- gtk_label_set_markup_with_mnemonic(GTK_LABEL(label),
- gtk_label_get_text(GTK_LABEL(label)) );
- }
- row++;
- controls->w_area_innerpileup = gtk_label_new("");
- gwy_table_attach_row(table, row, _("Inner Pile-Up A<sub>p</sub>"), siu->str,
- controls->w_area_innerpileup);
- if ( (label = gwy_table_get_child_widget(table, row, 0)) ) {
- gtk_label_set_markup_with_mnemonic(GTK_LABEL(label),
- gtk_label_get_text(GTK_LABEL(label)) );
- }
+ controls->area_innerpileup = gtk_label_new(NULL);
+ gwy_table_attach_adjbar(table, row,
+ _("Inner Pile-Up A<sub>p</sub>"), siu->str,
+ GTK_OBJECT(controls->area_innerpileup),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
+ use_markup_in_label(GTK_OBJECT(controls->area_innerpileup));
+ row++;
- row++;
- controls->w_surface_outerpileup = gtk_label_new("");
- gwy_table_attach_row(table, row, _("Outer Pile-Up A<sub>d</sub>"), siu->str,
- controls->w_surface_outerpileup);
- if ( (label = gwy_table_get_child_widget(table, row, 0)) ) {
- gtk_label_set_markup_with_mnemonic(GTK_LABEL(label),
- gtk_label_get_text(GTK_LABEL(label)) );
- }
+ controls->surface_outerpileup = gtk_label_new(NULL);
+ gwy_table_attach_adjbar(table, row,
+ _("Outer Pile-Up A<sub>d</sub>"), siu->str,
+ GTK_OBJECT(controls->surface_outerpileup),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
+ use_markup_in_label(GTK_OBJECT(controls->surface_outerpileup));
+ row++;
- row++;
- controls->w_area_outerpileup = gtk_label_new("");
- gwy_table_attach_row(table, row, _("Outer Pile-Up A<sub>p</sub>"), siu->str,
- controls->w_area_outerpileup);
- if ( (label = gwy_table_get_child_widget(table, row, 0)) ) {
- gtk_label_set_markup_with_mnemonic(GTK_LABEL(label),
- gtk_label_get_text(GTK_LABEL(label)) );
- }
+ controls->area_outerpileup = gtk_label_new(NULL);
+ gwy_table_attach_adjbar(table, row,
+ _("Outer Pile-Up A<sub>p</sub>"), siu->str,
+ GTK_OBJECT(controls->area_outerpileup),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
+ use_markup_in_label(GTK_OBJECT(controls->area_outerpileup));
+ row++;
- g_string_free(siu, TRUE);
- gwy_si_unit_value_format_free(siformat);
+ g_string_free(siu, TRUE);
+ gwy_si_unit_value_format_free(siformat);
- return table;
+ return table;
}
/** Create and run analyze dialog
@@ -637,7 +563,6 @@ indent_analyze_dialog(GwyContainer *data, IndentAnalyzeArgs * args)
GtkWidget *dialog, *table, *hbox;
IndentAnalyzeControls controls;
gint response;
- //gdouble zoomval;
GtkObject *layer;
controls.args = args;
@@ -669,7 +594,8 @@ indent_analyze_dialog(GwyContainer *data, IndentAnalyzeArgs * args)
gwy_data_view_set_alpha_layer(GWY_DATA_VIEW(controls.view),
GWY_PIXMAP_LAYER(layer));
gtk_box_pack_start(GTK_BOX(hbox), controls.view, TRUE, TRUE, 4);
- //gtk_widget_show_all(GTK_WIDGET(controls.view));
+ gwy_data_view_set_data_prefix(GWY_DATA_VIEW(controls.view), "/0/data");
+ gwy_set_data_preview_size(GWY_DATA_VIEW(controls.view), PREVIEW_SIZE);
table = create_parameters_table(&controls);
gtk_box_pack_start(GTK_BOX(hbox), table, FALSE, FALSE, 4);
@@ -843,31 +769,24 @@ set_mask_at(GwyDataField *mask, gint x, gint y, gdouble m, gint how)
switch (how) {
case GWY_HOW_MARK_NEW:
- act_mask = im;
- break;
+ act_mask = im;
+ break;
case GWY_HOW_MARK_AND:
- act_mask = (act_mask && im);
- break;
+ act_mask = (act_mask && im);
+ break;
case GWY_HOW_MARK_OR:
- act_mask = (act_mask || im);
- /* if(act_mask){
- FILE* fl = gwy_fopen ("setmask.txt","a");
- gwy_fprintf(fl, "[%d %d]%d %d %lf\n", x,y,act_mask, im, (double)(act_mask || im));
- fclose(fl);
- }
- gwy_data_field_area_fill(mask,10,10,20,20,(double)act_mask);
- */
- break;
+ act_mask = (act_mask || im);
+ break;
case GWY_HOW_MARK_NOT:
- act_mask = !im;
- break;
+ act_mask = !im;
+ break;
case GWY_HOW_MARK_XOR:
- act_mask = !(act_mask || im);
- break;
+ act_mask = !(act_mask || im);
+ break;
}
gwy_data_field_set_val(mask, x, y, (double)act_mask);
}
@@ -891,27 +810,8 @@ level_data(IndentAnalyzeControls *c)
&(args->plane_y));
}
-/*
- switch(args->plane_correct)
- {
- case GWY_PLANE_LEVEL:
- while (iter--) {
- gwy_data_field_plane_level(dfield, args->plane_c, args->plane_x, args->plane_y);
- get_field_slope_from_border (dfield, &(args->plane_c), &(args->plane_x), &(args->plane_y));
- }
- break;
-
- case GWY_PLANE_ROTATE:
- gwy_data_field_plane_rotate(dfield,
- 180/G_PI*atan2(args->plane_x, 1),
- 180/G_PI*atan2(args->plane_y, 1),
- GWY_INTERPOLATION_LINEAR);
- break;
- }
-*/
}
-
typedef struct {
gint x;
gint y;
@@ -924,8 +824,11 @@ typedef struct {
#define FLOOD_MAX_DEPTH 1000
-static void indentmask_flood_fill(GwyDataField *indentmask, gint i, gint j,
- GwyDataField *dfield, FloodFillInfo * ffi)
+/* XXX XXX XXX: This could probably just mask areas according to a condition,
+ * number grains, and keep just a selected grain. But who knows... */
+static void
+indentmask_flood_fill(GwyDataField *indentmask, gint i, gint j,
+ GwyDataField *dfield, FloodFillInfo * ffi)
{
gint test = 0;
gdouble c_f, c_t;
@@ -986,10 +889,10 @@ static void indentmask_flood_fill(GwyDataField *indentmask, gint i, gint j,
if (s || rr) {
// check if point is inside datafield
if (tail->x + rr >= 0 && tail->x + rr < dfield_xres
- && tail->y + s >= 0 && tail->y + s < dfield_yres)
- {
- gdouble val = gwy_data_field_get_val(indentmask, tail->x
- + rr, tail->y + s);
+ && tail->y + s >= 0 && tail->y + s < dfield_yres) {
+ gdouble val = gwy_data_field_get_val(indentmask,
+ tail->x + rr,
+ tail->y + s);
if (!val) {
head->x = tail->x + rr;
head->y = tail->y + s;
@@ -1001,9 +904,6 @@ static void indentmask_flood_fill(GwyDataField *indentmask, gint i, gint j,
gwy_data_field_set_val(indentmask, tail->x + rr,
tail->y + s, FLOOD_QUEUED);
}
- } else {
- printf("start %d %d, want to set %d %d, dimensions %d %d\n", i, j, tail->x
- + rr, tail->y + s, dfield_xres, dfield_yres);
}
}
}
@@ -1276,7 +1176,7 @@ indent_analyze_ok(GwyContainer *data, IndentAnalyzeControls * controls)
{
//GwyDataField *dfield;
GObject *maskfield;
- GString *mask_name = g_string_new("");
+ GString *mask_name = g_string_new(NULL);
// get right ID of datafield
g_string_printf(mask_name, "/%d/mask", controls->dfield_id);
@@ -1304,9 +1204,8 @@ compute_and_preview(IndentAnalyzeControls * controls)
GwyDataField *maskfield = 0, *dfield;
GwyPixmapLayer *layer;
- dfield =
- GWY_DATA_FIELD(gwy_container_get_object_by_name
- (controls->mydata, "/0/data"));
+ dfield = GWY_DATA_FIELD(gwy_container_get_object_by_name
+ (controls->mydata, "/0/data"));
read_data_from_controls(controls);
@@ -1340,79 +1239,34 @@ compute_and_preview(IndentAnalyzeControls * controls)
/* =========== dialog control functions ========================= */
static void
-dialog_update(G_GNUC_UNUSED IndentAnalyzeControls *controls,
- G_GNUC_UNUSED IndentAnalyzeArgs *args)
-{
-
- /*
- gwy_option_menu_set_history(controls->w_plane_correct, "menu_plane_correct",
- args->plane_correct);
- */
- /*
- gwy_option_menu_set_history(controls->w_how_mark, "menu_how_mark",
- args->how_mark);
- gwy_option_menu_set_history(controls->w_what_mark, "menu_what_mark",
- args->what_mark);
- */
-}
-
-/*
-static void
-plane_correct_cb(GtkWidget *item, IndentAnalyzeControls * controls)
-{
- controls->args->plane_correct
- =
- GPOINTER_TO_UINT(g_object_get_data
- (G_OBJECT(item), "menu_plane_correct"));
- dialog_update(controls, controls->args);
-}
-*/
-
-static void
what_mark_cb(GtkWidget *item, IndentAnalyzeControls * controls)
{
- controls->args->what_mark
- = gtk_combo_box_get_active(GTK_COMBO_BOX(item));
- //= GPOINTER_TO_UINT(g_object_get_data(G_OBJECT(item), "menu_what_mark"));
- dialog_update(controls, controls->args);
+ controls->args->what_mark = gtk_combo_box_get_active(GTK_COMBO_BOX(item));
}
static void
how_mark_cb(GtkWidget *item, IndentAnalyzeControls * controls)
{
- controls->args->how_mark
- = gtk_combo_box_get_active(GTK_COMBO_BOX(item));
- //= GPOINTER_TO_UINT(g_object_get_data(G_OBJECT(item), "menu_how_mark"));
- dialog_update(controls, controls->args);
+ controls->args->how_mark = gtk_combo_box_get_active(GTK_COMBO_BOX(item));
}
static void
indentor_changed_cb(GtkWidget *item, IndentAnalyzeControls * controls)
{
- controls->args->indentor =
- gtk_combo_box_get_active(GTK_COMBO_BOX(item));
- //= GPOINTER_TO_UINT(g_object_get_data(G_OBJECT(item), "indentor-type"));
-
-
- dialog_update(controls, controls->args);
- printf("indentor type %d\n", controls->args->indentor);
+ controls->args->indentor = gtk_combo_box_get_active(GTK_COMBO_BOX(item));
gtk_combo_box_get_active(GTK_COMBO_BOX(item));
}
-
static const gchar *what_mark_key = "/module/nanoindent/what_mark";
static const gchar *how_mark_key = "/module/nanoindent/how_mark";
-static const gchar *plane_correct_key = "/module/nanoindent/plane_correct";
static const gchar *indentor_key = "/module/nanoindent/indentor";
static const gchar *plane_tol_key = "/module/nanoindent/plane_tol";
static const gchar *phi_tol_key = "/module/nanoindent/phi_tol";
-static const gchar *theta_tol_key = "/module/nanoindent/theta_tol";
static void
sanitize_args(IndentAnalyzeArgs * args)
{
- args->plane_correct = MIN(args->plane_correct, GWY_PLANE_ROTATE);
args->what_mark = MIN(args->what_mark, GWY_WHAT_MARK_FACESBORDER);
args->how_mark = MIN(args->how_mark, GWY_HOW_MARK_XOR);
args->indentor = MIN(args->indentor, GWY_INDENTOR_CUBECORNER);
@@ -1422,16 +1276,12 @@ sanitize_args(IndentAnalyzeArgs * args)
static void
load_args(GwyContainer *container, IndentAnalyzeArgs * args)
{
- args->plane_correct = GWY_PLANE_LEVEL;
args->what_mark = GWY_WHAT_MARK_NOTHING;
args->how_mark = GWY_HOW_MARK_NEW;
args->indentor = GWY_INDENTOR_VICKERS;
args->plane_tol = 1.0;
args->phi_tol = 8.0;
- args->theta_tol = 8.0;
- gwy_container_gis_enum_by_name(container, plane_correct_key,
- &args->plane_correct);
gwy_container_gis_enum_by_name(container, what_mark_key,
&args->what_mark);
gwy_container_gis_enum_by_name(container, how_mark_key,
@@ -1443,18 +1293,12 @@ load_args(GwyContainer *container, IndentAnalyzeArgs * args)
&args->plane_tol);
gwy_container_gis_double_by_name(container, phi_tol_key,
&args->phi_tol);
- gwy_container_gis_double_by_name(container, theta_tol_key,
- &args->theta_tol);
sanitize_args(args);
}
static void
save_args(GwyContainer *container, IndentAnalyzeArgs * args)
{
- /*
- gwy_container_set_enum_by_name(container, plane_correct_key,
- args->plane_correct);
- */
gwy_container_set_enum_by_name(container, what_mark_key, args->what_mark);
gwy_container_set_enum_by_name(container, how_mark_key, args->how_mark);
gwy_container_set_enum_by_name(container, indentor_key, args->indentor);
@@ -1462,7 +1306,6 @@ save_args(GwyContainer *container, IndentAnalyzeArgs * args)
gwy_container_set_double_by_name(container, plane_tol_key, args->plane_tol);
/*
gwy_container_set_double_by_name(container, phi_tol_key, args->phi_tol);
- gwy_container_set_double_by_name(container, theta_tol_key, args->theta_tol);
*/
}
@@ -1471,11 +1314,9 @@ static void
read_data_from_controls(IndentAnalyzeControls *c)
{
c->args->plane_tol =
- gtk_adjustment_get_value(GTK_ADJUSTMENT(c->w_plane_tol));
+ gtk_adjustment_get_value(GTK_ADJUSTMENT(c->plane_tol));
/*
- c->args->phi_tol = gtk_adjustment_get_value(GTK_ADJUSTMENT(c->w_phi_tol));
- c->args->theta_tol =
- gtk_adjustment_get_value(GTK_ADJUSTMENT(c->w_theta_tol));
+ c->args->phi_tol = gtk_adjustment_get_value(GTK_ADJUSTMENT(c->phi_tol));
*/
}
@@ -1494,56 +1335,38 @@ update_data_labels(IndentAnalyzeControls *c)
g_snprintf(str, str_len, "[%d, %d]px: %lf", c->args->minx, c->args->miny,
c->args->min_val/mag);
- gtk_label_set_text(GTK_LABEL(c->w_min_xy), str);
+ gtk_label_set_text(GTK_LABEL(c->min_xy), str);
g_snprintf(str, str_len, "[%d, %d]px: %lf", c->args->maxx, c->args->maxy,
c->args->max_val/mag);
- gtk_label_set_text(GTK_LABEL(c->w_max_xy), str);
+ gtk_label_set_text(GTK_LABEL(c->max_xy), str);
g_snprintf(str, str_len, "%lf", (c->args->max_val - c->args->min_val)/mag);
- gtk_label_set_text(GTK_LABEL(c->w_minmax), str);
-/*
- sprintf (str, "%g (%.1lf %%)", c->args->area_above/mag/mag, 100.*(c->args->area_above/sxy));
- gtk_label_set_text(c->w_area_above, str);
- sprintf (str, "%g (%.1lf %%)", c->args->area_below/mag/mag, 100.*(c->args->area_below/sxy));
- gtk_label_set_text(c->w_area_below, str);
- sprintf (str, "%g (%.1lf %%)", c->args->area_plane/mag/mag, 100.*(c->args->area_plane/sxy));
- gtk_label_set_text(c->w_area_plane, str);
-
- sprintf (str, "%g (+%.1f %%)", c->args->surface_above/mag/mag, 100.*c->args->surface_above/c->args->area_above);
- gtk_label_set_text(c->w_surface_above, str);
- sprintf (str, "%g (+%.1lf %%)", c->args->surface_below/mag/mag, 100.*c->args->surface_below/c->args->surface_below);
- gtk_label_set_text(c->w_surface_below, str);
-
- sprintf (str, "%g", c->args->volume_above/mag/mag/mag);
- gtk_label_set_text(c->w_volume_above, str);
- sprintf (str, "%g", c->args->volume_below/mag/mag/mag);
- gtk_label_set_text(c->w_volume_below, str);
-*/
+ gtk_label_set_text(GTK_LABEL(c->minmax), str);
g_snprintf(str, str_len, "%g",
(c->args->volume_above - c->args->volume_below)/mag/mag/mag);
- gtk_label_set_text(GTK_LABEL(c->w_volume_dif), str);
+ gtk_label_set_text(GTK_LABEL(c->volume_dif), str);
g_snprintf(str, str_len, "%g", c->args->volume_indent/mag/mag/mag);
- gtk_label_set_text(GTK_LABEL(c->w_volume_indent), str);
+ gtk_label_set_text(GTK_LABEL(c->volume_indent), str);
g_snprintf(str, str_len, "%g", c->args->surface_indent/mag/mag);
- gtk_label_set_text(GTK_LABEL(c->w_surface_indent), str);
+ gtk_label_set_text(GTK_LABEL(c->surface_indent), str);
g_snprintf(str, str_len, "%g", (c->args->area_indent)/mag/mag);
- gtk_label_set_text(GTK_LABEL(c->w_area_indent), str);
+ gtk_label_set_text(GTK_LABEL(c->area_indent), str);
g_snprintf(str, str_len, "%g", c->args->surface_indent_exp/mag/mag);
- gtk_label_set_text(GTK_LABEL(c->w_surface_indent_exp), str);
+ gtk_label_set_text(GTK_LABEL(c->surface_indent_exp), str);
g_snprintf(str, str_len, "%g", (c->args->area_indent_exp)/mag/mag);
- gtk_label_set_text(GTK_LABEL(c->w_area_indent_exp), str);
+ gtk_label_set_text(GTK_LABEL(c->area_indent_exp), str);
g_snprintf(str, str_len, "%g", c->args->surface_innerpileup/mag/mag);
- gtk_label_set_text(GTK_LABEL(c->w_surface_innerpileup), str);
+ gtk_label_set_text(GTK_LABEL(c->surface_innerpileup), str);
g_snprintf(str, str_len, "%g", (c->args->area_innerpileup)/mag/mag);
- gtk_label_set_text(GTK_LABEL(c->w_area_innerpileup), str);
+ gtk_label_set_text(GTK_LABEL(c->area_innerpileup), str);
g_snprintf(str, str_len, "%g", c->args->surface_outerpileup/mag/mag);
- gtk_label_set_text(GTK_LABEL(c->w_surface_outerpileup), str);
+ gtk_label_set_text(GTK_LABEL(c->surface_outerpileup), str);
g_snprintf(str, str_len, "%g", (c->args->area_outerpileup)/mag/mag);
- gtk_label_set_text(GTK_LABEL(c->w_area_outerpileup), str);
+ gtk_label_set_text(GTK_LABEL(c->area_outerpileup), str);
}
static void
@@ -1597,7 +1420,7 @@ save_statistics_dialog(IndentAnalyzeControls *c,
sxy = gwy_data_field_get_xreal(dfield) * gwy_data_field_get_yreal(dfield);
vf = gwy_data_field_get_value_format_xy(dfield, GWY_SI_UNIT_FORMAT_PLAIN, NULL);
/*
- siunit = gwy_si_unit_new("");
+ siunit = gwy_si_unit_new(NULL);
gwy_si_unit_power(gwy_data_field_get_si_unit_xy(dfield), 2, siunit);
vf2 = gwy_si_unit_get_format(siunit, args->area_plane, NULL);
gwy_si_unit_multiply(siunit, gwy_data_field_get_si_unit_z(dfield), siunit);
diff --git a/modules/process/laplace.c b/modules/process/laplace.c
index 540ea69..af35ddb 100644
--- a/modules/process/laplace.c
+++ b/modules/process/laplace.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: laplace.c 19089 2016-10-16 12:47:38Z yeti-dn $
+ * @(#) $Id: laplace.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2004 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -46,7 +46,7 @@ static GwyModuleInfo module_info = {
"2004",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, laplace)
static gboolean
module_register(void)
diff --git a/modules/process/lat_synth.c b/modules/process/lat_synth.c
index 038f26e..0bd041a 100644
--- a/modules/process/lat_synth.c
+++ b/modules/process/lat_synth.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: lat_synth.c 19122 2016-10-24 18:50:48Z yeti-dn $
+ * @(#) $Id: lat_synth.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2014-2016 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -404,12 +404,12 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Generates surfaces based on regular or random lattices."),
"Yeti <yeti at gwyddion.net>",
- "1.1",
+ "1.2",
"David Nečas (Yeti)",
"2014",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, lat_synth)
static gboolean
module_register(void)
@@ -628,7 +628,7 @@ lat_synth_dialog(LatSynthArgs *args,
g_signal_connect_swapped(controls.dims->add, "toggled",
G_CALLBACK(lat_synth_invalidate), &controls);
- table = gtk_table_new(5, 4, FALSE);
+ table = gtk_table_new(5, 3, FALSE);
controls.table = GTK_TABLE(table);
gtk_table_set_row_spacings(GTK_TABLE(table), 2);
gtk_table_set_col_spacings(GTK_TABLE(table), 6);
@@ -641,9 +641,9 @@ lat_synth_dialog(LatSynthArgs *args,
= gwy_enum_combo_box_new(lattice_types, G_N_ELEMENTS(lattice_types),
G_CALLBACK(lattice_type_selected), &controls,
args->lattice_type, TRUE);
- gwy_table_attach_hscale(table, row, _("_Lattice:"), NULL,
+ gwy_table_attach_adjbar(table, row, _("_Lattice:"), NULL,
GTK_OBJECT(controls.lattice_type),
- GWY_HSCALE_WIDGET);
+ GWY_HSCALE_WIDGET_NO_EXPAND);
row++;
controls.size = gtk_adjustment_new(args->size, 4.0, 1000.0, 0.1, 10.0, 0);
@@ -659,7 +659,7 @@ lat_synth_dialog(LatSynthArgs *args,
0.0, 16.0, 0.001, 0.1, 0);
g_object_set_data(G_OBJECT(controls.lrelaxation),
"target", &args->lrelaxation);
- gwy_table_attach_hscale(table, row, _("Lattice rela_xation:"), NULL,
+ gwy_table_attach_adjbar(table, row, _("Lattice rela_xation:"), NULL,
controls.lrelaxation, GWY_HSCALE_SQRT);
g_signal_connect_swapped(controls.lrelaxation, "value-changed",
G_CALLBACK(gwy_synth_double_changed), &controls);
@@ -671,7 +671,7 @@ lat_synth_dialog(LatSynthArgs *args,
0.0, 200.0, 0.01, 10.0, 0);
g_object_set_data(G_OBJECT(controls.hrelaxation),
"target", &args->hrelaxation);
- gwy_table_attach_hscale(table, row, _("_Height relaxation:"), NULL,
+ gwy_table_attach_adjbar(table, row, _("_Height relaxation:"), NULL,
controls.hrelaxation, GWY_HSCALE_SQRT);
g_signal_connect_swapped(controls.hrelaxation, "value-changed",
G_CALLBACK(gwy_synth_double_changed), &controls);
@@ -696,7 +696,7 @@ lat_synth_dialog(LatSynthArgs *args,
g_signal_connect_swapped(controls.sigma, "value-changed",
G_CALLBACK(invalidate_lattice), &controls);
- table = gtk_table_new(9, 4, FALSE);
+ table = gtk_table_new(9, 3, FALSE);
controls.table = GTK_TABLE(table);
gtk_table_set_row_spacings(GTK_TABLE(table), 2);
gtk_table_set_col_spacings(GTK_TABLE(table), 6);
@@ -709,43 +709,43 @@ lat_synth_dialog(LatSynthArgs *args,
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scwin),
GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
gtk_widget_set_size_request(scwin, -1, 240);
- gtk_table_attach(GTK_TABLE(table), scwin, 0, 4, row, row+1,
- GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+ gtk_table_attach(GTK_TABLE(table), scwin, 0, 3, row, row+1,
+ GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
create_surface_treeview(&controls);
gtk_container_add(GTK_CONTAINER(scwin), controls.surfaces);
row++;
- controls.surface_header = gtk_label_new("");
+ controls.surface_header = gtk_label_new(NULL);
gtk_misc_set_alignment(GTK_MISC(controls.surface_header), 0.0, 0.5);
gtk_table_attach(GTK_TABLE(table), controls.surface_header,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
controls.weight = gtk_adjustment_new(0.0, -1.0, 1.0, 0.001, 0.1, 0);
- gwy_table_attach_hscale(table, row, _("_Weight:"), NULL,
- controls.weight, GWY_HSCALE_DEFAULT);
+ gwy_table_attach_adjbar(table, row, _("_Weight:"), NULL,
+ controls.weight, GWY_HSCALE_LINEAR);
g_signal_connect_swapped(controls.weight, "value-changed",
G_CALLBACK(weight_changed), &controls);
row++;
controls.lower = gtk_adjustment_new(0.0, 0.0, 1.0, 0.001, 0.1, 0);
- gwy_table_attach_hscale(table, row, _("Lower threshold:"), NULL,
- controls.lower, GWY_HSCALE_DEFAULT);
+ gwy_table_attach_adjbar(table, row, _("Lower threshold:"), NULL,
+ controls.lower, GWY_HSCALE_LINEAR);
g_signal_connect_swapped(controls.lower, "value-changed",
G_CALLBACK(lower_changed), &controls);
row++;
controls.upper = gtk_adjustment_new(0.0, 0.0, 1.0, 0.001, 0.1, 0);
- gwy_table_attach_hscale(table, row, _("Upper threshold:"), NULL,
- controls.upper, GWY_HSCALE_DEFAULT);
+ gwy_table_attach_adjbar(table, row, _("Upper threshold:"), NULL,
+ controls.upper, GWY_HSCALE_LINEAR);
g_signal_connect_swapped(controls.upper, "value-changed",
G_CALLBACK(upper_changed), &controls);
row++;
gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
gtk_table_attach(GTK_TABLE(table), gwy_label_new_header(_("Height")),
- 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
row = gwy_synth_attach_height(&controls, row,
@@ -755,11 +755,11 @@ lat_synth_dialog(LatSynthArgs *args,
if (dfield_template) {
controls.height_init
- = gtk_button_new_with_mnemonic(_("_Like Current Channel"));
+ = gtk_button_new_with_mnemonic(_("_Like Current Image"));
g_signal_connect_swapped(controls.height_init, "clicked",
G_CALLBACK(height_init_clicked), &controls);
gtk_table_attach(GTK_TABLE(table), controls.height_init,
- 1, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
}
diff --git a/modules/process/latsim.c b/modules/process/latsim.c
index ed1365f..8a07a07 100644
--- a/modules/process/latsim.c
+++ b/modules/process/latsim.c
@@ -75,12 +75,12 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Lateral force simulator"),
"Petr Klapetek <klapetek at gwyddion.net>",
- "1.1",
+ "1.2",
"David Nečas (Yeti) & Petr Klapetek",
"2012",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, latsim)
static gboolean
module_register(void)
@@ -172,25 +172,23 @@ latsim_dialog(LatSimArgs *args)
controls.mu = gtk_adjustment_new(args->mu, 0.001, 100, 0.1, 1, 0);
- spin = gwy_table_attach_spinbutton(table, row, _("_Friction coef.:"), "",
- controls.mu);
+ spin = gwy_table_attach_adjbar(table, row, _("_Friction coef.:"), NULL,
+ controls.mu, GWY_HSCALE_LOG);
gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 1);
row++;
controls.load = gtk_adjustment_new(args->load, 0.0, 1000, 1, 10, 0);
- spin = gwy_table_attach_spinbutton(table, row, _("_Normal force:"), "nN",
- controls.load);
+ spin = gwy_table_attach_adjbar(table, row, _("_Normal force:"), "nN",
+ controls.load, GWY_HSCALE_SQRT);
gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 1);
row++;
controls.adhesion = gtk_adjustment_new(args->adhesion, 0.0, 1000, 1, 10, 0);
- spin = gwy_table_attach_spinbutton(table, row, _("_Adhesion force:"), "nN",
- controls.adhesion);
+ spin = gwy_table_attach_adjbar(table, row, _("_Adhesion force:"), "nN",
+ controls.adhesion, GWY_HSCALE_SQRT);
gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 1);
row++;
-
-
gtk_widget_show_all(dialog);
do {
response = gtk_dialog_run(GTK_DIALOG(dialog));
diff --git a/modules/process/level.c b/modules/process/level.c
index 166dc6e..e0ad482 100644
--- a/modules/process/level.c
+++ b/modules/process/level.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: level.c 19044 2016-10-08 19:10:46Z yeti-dn $
+ * @(#) $Id: level.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2003-2016 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -78,7 +78,7 @@ static GwyModuleInfo module_info = {
"2003",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, level)
static gboolean
module_register(void)
@@ -258,7 +258,7 @@ level_dialog(LevelArgs *args,
label = gwy_label_new_header(_("Masking Mode"));
gtk_table_attach(GTK_TABLE(table), label,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
row++;
controls.masking = gwy_radio_buttons_create(gwy_masking_type_get_enum(), -1,
diff --git a/modules/process/level_grains.c b/modules/process/level_grains.c
index 56e5934..b9351a8 100644
--- a/modules/process/level_grains.c
+++ b/modules/process/level_grains.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: level_grains.c 19089 2016-10-16 12:47:38Z yeti-dn $
+ * @(#) $Id: level_grains.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2011 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -89,7 +89,7 @@ static GwyModuleInfo module_info = {
"2011",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, level_grains)
static gboolean
module_register(void)
diff --git a/modules/process/linecorrect.c b/modules/process/linecorrect.c
index ea260dc..af77cf8 100644
--- a/modules/process/linecorrect.c
+++ b/modules/process/linecorrect.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: linecorrect.c 19044 2016-10-08 19:10:46Z yeti-dn $
+ * @(#) $Id: linecorrect.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2003 David Necas (Yeti), Petr Klapetek, Luke Somers.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net, lsomers at sas.upenn.edu.
*
@@ -35,8 +35,6 @@
#define LINECORR_RUN_MODES GWY_RUN_IMMEDIATE
-#define GOLDEN_RATIO .6180339887498948482
-
typedef struct {
gdouble *a;
gdouble *b;
@@ -58,7 +56,7 @@ static GwyModuleInfo module_info = {
"2004",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, linecorrect)
static gboolean
module_register(void)
diff --git a/modules/process/linematch.c b/modules/process/linematch.c
index 5fbbf47..f7f194e 100644
--- a/modules/process/linematch.c
+++ b/modules/process/linematch.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: linematch.c 19044 2016-10-08 19:10:46Z yeti-dn $
+ * @(#) $Id: linematch.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2015 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -106,9 +106,6 @@ static void slope_level_row_shifts (GwyDataLine *shifts);
static void apply_row_shifts (GwyDataField *dfield,
GwyDataField *bg,
GwyDataLine *shifts);
-static void flip_xy (GwyDataField *source,
- GwyDataField *dest,
- gboolean minor);
static gboolean linematch_dialog (LineMatchArgs *args,
GwyContainer *data,
GwyDataField *dfield,
@@ -167,12 +164,12 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Aligns rows by various methods."),
"Yeti <yeti at gwyddion.net>",
- "1.4",
+ "1.5",
"David Nečas (Yeti)",
"2015",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, linematch)
static gboolean
module_register(void)
@@ -295,11 +292,11 @@ linematch_do(GwyDataField *mask,
mymask = mask;
if (args->direction == GWY_ORIENTATION_VERTICAL) {
tmpresult = gwy_data_field_new_alike(args->result, FALSE);
- flip_xy(args->result, tmpresult, FALSE);
+ gwy_data_field_flip_xy(args->result, tmpresult, FALSE);
GWY_SWAP(GwyDataField*, args->result, tmpresult);
if (mask) {
mymask = gwy_data_field_new_alike(mask, FALSE);
- flip_xy(mask, mymask, FALSE);
+ gwy_data_field_flip_xy(mask, mymask, FALSE);
}
}
@@ -328,9 +325,9 @@ linematch_do(GwyDataField *mask,
/* Transpose back if necessary. */
if (args->direction == GWY_ORIENTATION_VERTICAL) {
GWY_OBJECT_UNREF(mymask);
- flip_xy(args->result, tmpresult, TRUE);
+ gwy_data_field_flip_xy(args->result, tmpresult, TRUE);
GWY_SWAP(GwyDataField*, args->result, tmpresult);
- flip_xy(args->bg, tmpresult, TRUE);
+ gwy_data_field_flip_xy(args->bg, tmpresult, TRUE);
gwy_data_field_resample(args->bg,
args->result->xres, args->result->yres,
GWY_INTERPOLATION_NONE);
@@ -740,36 +737,6 @@ apply_row_shifts(GwyDataField *dfield, GwyDataField *bg,
}
}
-static void
-flip_xy(GwyDataField *source, GwyDataField *dest, gboolean minor)
-{
- gint xres, yres, i, j;
- gdouble *dd;
- const gdouble *sd;
-
- xres = gwy_data_field_get_xres(source);
- yres = gwy_data_field_get_yres(source);
- gwy_data_field_resample(dest, yres, xres, GWY_INTERPOLATION_NONE);
- sd = gwy_data_field_get_data_const(source);
- dd = gwy_data_field_get_data(dest);
- if (minor) {
- for (i = 0; i < xres; i++) {
- for (j = 0; j < yres; j++) {
- dd[i*yres + j] = sd[j*xres + (xres - 1 - i)];
- }
- }
- }
- else {
- for (i = 0; i < xres; i++) {
- for (j = 0; j < yres; j++) {
- dd[i*yres + (yres - 1 - j)] = sd[j*xres + i];
- }
- }
- }
- gwy_data_field_set_xreal(dest, gwy_data_field_get_yreal(source));
- gwy_data_field_set_yreal(dest, gwy_data_field_get_xreal(source));
-}
-
static gboolean
linematch_dialog(LineMatchArgs *args,
GwyContainer *data,
@@ -818,7 +785,7 @@ linematch_dialog(LineMatchArgs *args,
gtk_container_add(GTK_CONTAINER(alignment), controls.dataview);
gtk_box_pack_start(GTK_BOX(hbox), alignment, FALSE, FALSE, 4);
- table = gtk_table_new(7 + LINE_LEVEL_NMETHODS + (mfield ? 4 : 0), 4, FALSE);
+ table = gtk_table_new(7 + LINE_LEVEL_NMETHODS + (mfield ? 4 : 0), 3, FALSE);
gtk_table_set_row_spacings(GTK_TABLE(table), 2);
gtk_table_set_col_spacings(GTK_TABLE(table), 6);
gtk_container_set_border_width(GTK_CONTAINER(table), 4);
@@ -828,7 +795,7 @@ linematch_dialog(LineMatchArgs *args,
label = gtk_label_new(_("Method:"));
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
gtk_table_attach(GTK_TABLE(table), label,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
controls.method_group
@@ -836,13 +803,13 @@ linematch_dialog(LineMatchArgs *args,
G_CALLBACK(method_changed),
&controls, args->method);
row = gwy_radio_buttons_attach_to_table(controls.method_group,
- GTK_TABLE(table), 3, row);
+ GTK_TABLE(table), 2, row);
controls.max_degree = gtk_adjustment_new(args->max_degree,
0, MAX_DEGREE, 1, 1, 0);
- gwy_table_attach_hscale(table, row++,
- _("_Polynomial degree:"), NULL,
- controls.max_degree, 0);
+ gwy_table_attach_adjbar(table, row++, _("_Polynomial degree:"), NULL,
+ controls.max_degree,
+ GWY_HSCALE_LINEAR | GWY_HSCALE_SNAP);
gwy_table_hscale_set_sensitive(GTK_OBJECT(controls.max_degree),
args->method == LINE_LEVEL_POLY);
g_signal_connect_swapped(controls.max_degree, "value-changed",
@@ -851,15 +818,16 @@ linematch_dialog(LineMatchArgs *args,
gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
label = gwy_label_new_header(_("Options"));
gtk_table_attach(GTK_TABLE(table), label,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
controls.direction
= gwy_enum_combo_box_new(gwy_orientation_get_enum(), -1,
G_CALLBACK(direction_changed), &controls,
args->direction, TRUE);
- gwy_table_attach_row(table, row, _("_Direction:"), NULL,
- controls.direction);
+ gwy_table_attach_adjbar(table, row, _("_Direction:"), NULL,
+ GTK_OBJECT(controls.direction),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
row++;
controls.do_extract
@@ -882,11 +850,6 @@ linematch_dialog(LineMatchArgs *args,
G_CALLBACK(do_plot_changed), &controls);
row++;
- label = gtk_label_new_with_mnemonic(_("Target _graph:"));
- gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_table_attach(GTK_TABLE(table), label,
- 0, 1, row, row+1, GTK_FILL, 0, 0, 0);
-
controls.target_graph = gwy_data_chooser_new_graphs();
chooser = GWY_DATA_CHOOSER(controls.target_graph);
gwy_data_chooser_set_none(chooser, _("New graph"));
@@ -894,9 +857,9 @@ linematch_dialog(LineMatchArgs *args,
gwy_data_chooser_set_filter(chooser, filter_target_graphs, &controls, NULL);
gwy_data_chooser_set_active_id(chooser, &args->target_graph);
gwy_data_chooser_get_active_id(chooser, &args->target_graph);
- gtk_label_set_mnemonic_widget(GTK_LABEL(label), controls.target_graph);
- gtk_table_attach(GTK_TABLE(table), controls.target_graph,
- 1, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ gwy_table_attach_adjbar(table, row, _("Target _graph:"), NULL,
+ GTK_OBJECT(controls.target_graph),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
g_signal_connect_swapped(controls.target_graph, "changed",
G_CALLBACK(target_graph_changed), &controls);
row++;
@@ -905,7 +868,7 @@ linematch_dialog(LineMatchArgs *args,
gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
label = gwy_label_new_header(_("Masking Mode"));
gtk_table_attach(GTK_TABLE(table), label,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
row++;
controls.masking_group
diff --git a/modules/process/lno_synth.c b/modules/process/lno_synth.c
index d899f89..ccf1491 100644
--- a/modules/process/lno_synth.c
+++ b/modules/process/lno_synth.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: lno_synth.c 19044 2016-10-08 19:10:46Z yeti-dn $
+ * @(#) $Id: lno_synth.c 20105 2017-07-29 09:24:09Z yeti-dn $
* Copyright (C) 2010 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -35,8 +35,6 @@
#include "dimensions.h"
#include "preview.h"
-#define GWY_SQRT6 2.449489742783178098197284074705
-
#define LNO_SYNTH_RUN_MODES (GWY_RUN_IMMEDIATE | GWY_RUN_INTERACTIVE)
#define DECLARE_LNOISE(name) \
@@ -279,7 +277,7 @@ static GwyModuleInfo module_info = {
"2010",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, lno_synth)
static gboolean
module_register(void)
@@ -492,7 +490,7 @@ lno_synth_dialog(LNoSynthArgs *args,
g_signal_connect_swapped(controls.dims->add, "toggled",
G_CALLBACK(lno_synth_invalidate), &controls);
- table = gtk_table_new(9 + (dfield_template ? 1 : 0), 4, FALSE);
+ table = gtk_table_new(9 + (dfield_template ? 1 : 0), 3, FALSE);
controls.table = GTK_TABLE(table);
gtk_table_set_row_spacings(controls.table, 2);
gtk_table_set_col_spacings(controls.table, 6);
@@ -502,18 +500,18 @@ lno_synth_dialog(LNoSynthArgs *args,
row = 0;
gtk_table_attach(controls.table, gwy_label_new_header(_("Distribution")),
- 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
controls.distribution = distribution_selector_new(&controls);
- gwy_table_attach_hscale(table, row, _("_Distribution:"), NULL,
+ gwy_table_attach_adjbar(table, row, _("_Distribution:"), NULL,
GTK_OBJECT(controls.distribution),
- GWY_HSCALE_WIDGET);
+ GWY_HSCALE_WIDGET_NO_EXPAND);
row++;
- label = gtk_label_new(_("Direction:"));
+ label = gtk_label_new(_("Noise type:"));
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_table_attach(GTK_TABLE(table), label, 0, 1, row, row+1,
+ gtk_table_attach(GTK_TABLE(table), label, 0, 2, row, row+1,
GTK_FILL, 0, 0, 0);
row++;
@@ -525,7 +523,7 @@ lno_synth_dialog(LNoSynthArgs *args,
_("One-sided _negative"), LNO_DIRECTION_DOWN,
NULL);
row = gwy_radio_buttons_attach_to_table(controls.direction,
- GTK_TABLE(table), 3, row);
+ GTK_TABLE(table), 2, row);
gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
row = gwy_synth_attach_height(&controls, row,
@@ -534,22 +532,23 @@ lno_synth_dialog(LNoSynthArgs *args,
if (dfield_template) {
controls.sigma_init
- = gtk_button_new_with_mnemonic(_("_Like Current Channel"));
+ = gtk_button_new_with_mnemonic(_("_Like Current Image"));
g_signal_connect_swapped(controls.sigma_init, "clicked",
G_CALLBACK(sigma_init_clicked), &controls);
gtk_table_attach(GTK_TABLE(table), controls.sigma_init,
- 1, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
}
gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
gtk_table_attach(controls.table, gwy_label_new_header(_("Noise Type")),
- 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
controls.type = noise_selector_new(&controls);
- gwy_table_attach_hscale(table, row, _("_Noise type:"), NULL,
- GTK_OBJECT(controls.type), GWY_HSCALE_WIDGET);
+ gwy_table_attach_adjbar(table, row, _("_Noise type:"), NULL,
+ GTK_OBJECT(controls.type),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
row++;
g_object_set_data(G_OBJECT(controls.table),
@@ -849,9 +848,9 @@ create_gui_steps(LNoSynthControls *controls)
0.001, 100.0, 0.001, 1.0, 0);
g_object_set_data(G_OBJECT(pcontrols->density),
"target", &pargs->density);
- gwy_table_attach_hscale(GTK_WIDGET(controls->table),
- row, _("Densi_ty:"), NULL, pcontrols->density,
- GWY_HSCALE_LOG);
+ gwy_table_attach_adjbar(GTK_WIDGET(controls->table), row,
+ _("Densi_ty:"), NULL,
+ pcontrols->density, GWY_HSCALE_LOG);
g_signal_connect_swapped(pcontrols->density, "value-changed",
G_CALLBACK(gwy_synth_double_changed), controls);
row++;
@@ -860,9 +859,9 @@ create_gui_steps(LNoSynthControls *controls)
0.0, 1.0, 0.001, 0.1, 0);
g_object_set_data(G_OBJECT(pcontrols->lineprob),
"target", &pargs->lineprob);
- gwy_table_attach_hscale(GTK_WIDGET(controls->table),
- row, _("_Within line:"), NULL, pcontrols->lineprob,
- GWY_HSCALE_DEFAULT);
+ gwy_table_attach_adjbar(GTK_WIDGET(controls->table), row,
+ _("_Within line:"), NULL,
+ pcontrols->lineprob, GWY_HSCALE_SQRT);
g_signal_connect_swapped(pcontrols->lineprob, "value-changed",
G_CALLBACK(gwy_synth_double_changed), controls);
row++;
@@ -874,7 +873,7 @@ create_gui_steps(LNoSynthControls *controls)
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(pcontrols->cumulative),
pargs->cumulative);
gtk_table_attach(controls->table, pcontrols->cumulative,
- 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect_swapped(pcontrols->cumulative, "toggled",
G_CALLBACK(gwy_synth_boolean_changed), controls);
row++;
@@ -1038,8 +1037,9 @@ create_gui_scars(LNoSynthControls *controls)
pcontrols->coverage = gtk_adjustment_new(pargs->coverage,
0.0001, 10.0, 0.0001, 0.1, 0);
- gwy_table_attach_hscale(GTK_WIDGET(controls->table), row, _("Co_verage:"),
- NULL, pcontrols->coverage, GWY_HSCALE_SQRT);
+ gwy_table_attach_adjbar(GTK_WIDGET(controls->table), row,
+ _("Co_verage:"), NULL,
+ pcontrols->coverage, GWY_HSCALE_SQRT);
g_object_set_data(G_OBJECT(pcontrols->coverage),
"target", &pargs->coverage);
g_signal_connect_swapped(pcontrols->coverage, "value-changed",
@@ -1218,9 +1218,9 @@ create_gui_ridges(LNoSynthControls *controls)
0.001, 100.0, 0.001, 1.0, 0);
g_object_set_data(G_OBJECT(pcontrols->density),
"target", &pargs->density);
- gwy_table_attach_hscale(GTK_WIDGET(controls->table),
- row, _("Densi_ty:"), NULL, pcontrols->density,
- GWY_HSCALE_LOG);
+ gwy_table_attach_adjbar(GTK_WIDGET(controls->table), row,
+ _("Densi_ty:"), NULL,
+ pcontrols->density, GWY_HSCALE_LOG);
g_signal_connect_swapped(pcontrols->density, "value-changed",
G_CALLBACK(gwy_synth_double_changed), controls);
row++;
@@ -1229,9 +1229,9 @@ create_gui_ridges(LNoSynthControls *controls)
0.0, 1.0, 0.001, 0.1, 0);
g_object_set_data(G_OBJECT(pcontrols->lineprob),
"target", &pargs->lineprob);
- gwy_table_attach_hscale(GTK_WIDGET(controls->table),
- row, _("_Within line:"), NULL, pcontrols->lineprob,
- GWY_HSCALE_DEFAULT);
+ gwy_table_attach_adjbar(GTK_WIDGET(controls->table), row,
+ _("_Within line:"), NULL,
+ pcontrols->lineprob, GWY_HSCALE_SQRT);
g_signal_connect_swapped(pcontrols->lineprob, "value-changed",
G_CALLBACK(gwy_synth_double_changed), controls);
row++;
@@ -1239,9 +1239,9 @@ create_gui_ridges(LNoSynthControls *controls)
pcontrols->width = gtk_adjustment_new(pargs->width,
0.0001, 1.0, 0.0001, 0.01, 0);
g_object_set_data(G_OBJECT(pcontrols->width), "target", &pargs->width);
- gwy_table_attach_hscale(GTK_WIDGET(controls->table),
- row, _("Wi_dth:"), NULL, pcontrols->width,
- GWY_HSCALE_SQRT);
+ gwy_table_attach_adjbar(GTK_WIDGET(controls->table), row,
+ _("Wi_dth:"), NULL,
+ pcontrols->width, GWY_HSCALE_SQRT);
g_signal_connect_swapped(pcontrols->width, "value-changed",
G_CALLBACK(gwy_synth_double_changed), controls);
row++;
diff --git a/modules/process/local_contrast.c b/modules/process/local_contrast.c
index 64c3963..f589ae9 100644
--- a/modules/process/local_contrast.c
+++ b/modules/process/local_contrast.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: local_contrast.c 18537 2016-03-28 18:11:19Z yeti-dn $
+ * @(#) $Id: local_contrast.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2003 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -76,12 +76,12 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Maximizes local contrast."),
"Yeti <yeti at gwyddion.net>",
- "1.3",
+ "1.4",
"David Nečas (Yeti) & Petr Klapetek",
"2005",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, local_contrast)
static gboolean
module_register(void)
@@ -134,7 +134,7 @@ contrast_dialog(ContrastArgs *args)
gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK);
gwy_help_add_to_proc_dialog(GTK_DIALOG(dialog), GWY_HELP_DEFAULT);
- table = gtk_table_new(3, 4, FALSE);
+ table = gtk_table_new(3, 3, FALSE);
gtk_table_set_row_spacings(GTK_TABLE(table), 2);
gtk_table_set_col_spacings(GTK_TABLE(table), 6);
gtk_container_set_border_width(GTK_CONTAINER(table), 4);
@@ -143,16 +143,16 @@ contrast_dialog(ContrastArgs *args)
row = 0;
controls.size = gtk_adjustment_new(args->size, 1, MAX_SIZE, 1, 5, 0);
- gwy_table_attach_hscale(table, row++, _("Kernel _size:"), "px",
- controls.size, 0);
+ gwy_table_attach_adjbar(table, row++, _("Kernel _size:"), _("px"),
+ controls.size, GWY_HSCALE_LINEAR);
controls.depth = gtk_adjustment_new(args->depth, 2, MAX_DEPTH, 1, 2, 0);
- gwy_table_attach_hscale(table, row++, _("Blending _depth:"), NULL,
- controls.depth, 0);
+ gwy_table_attach_adjbar(table, row++, _("Blending _depth:"), NULL,
+ controls.depth, GWY_HSCALE_LINEAR);
controls.weight = gtk_adjustment_new(args->weight, 0.0, 1.0, 0.01, 0.1, 0);
- gwy_table_attach_hscale(table, row++, _("_Weight:"), NULL,
- controls.weight, 0);
+ gwy_table_attach_adjbar(table, row++, _("_Weight:"), NULL,
+ controls.weight, GWY_HSCALE_LINEAR);
gtk_widget_show_all(dialog);
do {
diff --git a/modules/process/logistic.c b/modules/process/logistic.c
index 73e8b5f..4f69e5d 100644
--- a/modules/process/logistic.c
+++ b/modules/process/logistic.c
@@ -1,6 +1,6 @@
/*
- * @(#) $Id: logistic.c 19068 2016-10-13 18:41:54Z dn2010 $
- * Copyright (C) 2016 David Necas (Yeti), Petr Klapetek,
+ * @(#) $Id: logistic.c 19948 2017-06-22 14:05:41Z yeti-dn $
+ * Copyright (C) 2016-2017 David Necas (Yeti), Petr Klapetek,
* Daniil Bratashov.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net,
* dn2010 at gwyddion.net
@@ -30,8 +30,8 @@
#include <libprocess/stats.h>
#include <libprocess/filters.h>
#include <libgwydgets/gwystock.h>
+#include <libgwydgets/gwyradiobuttons.h>
#include <libgwydgets/gwydgetutils.h>
-#include <libgwydgets/gwydgets.h>
#include <libgwymodule/gwymodule-process.h>
#include <app/gwyapp.h>
#include <string.h>
@@ -121,12 +121,12 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Trains logistic regression to mark grains."),
"Daniil Bratashov <dn2010 at gwyddion.net>",
- "0.2",
+ "0.3",
"David Nečas (Yeti) & Petr Klapetek & Daniil Bratashov",
"2016",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, logistic)
static gboolean
module_register(void)
@@ -241,7 +241,7 @@ logistic_dialog(G_GNUC_UNUSED GwyContainer *data, LogisticArgs *args)
gwy_help_add_to_proc_dialog(GTK_DIALOG(dialog), GWY_HELP_DEFAULT);
controls.dialog = dialog;
- table = gtk_table_new(9, 4, FALSE);
+ table = gtk_table_new(9, 3, FALSE);
gtk_table_set_row_spacings(GTK_TABLE(table), 2);
gtk_table_set_col_spacings(GTK_TABLE(table), 6);
gtk_container_set_border_width(GTK_CONTAINER(table), 4);
@@ -257,18 +257,17 @@ logistic_dialog(G_GNUC_UNUSED GwyContainer *data, LogisticArgs *args)
LOGISTIC_MODE_TRAIN,
NULL);
button = gwy_radio_buttons_find(controls.mode, LOGISTIC_MODE_TRAIN);
- gtk_table_attach(GTK_TABLE(table), button, 0, 3, row, row+1,
+ gtk_table_attach(GTK_TABLE(table), button, 0, 2, row, row+1,
GTK_FILL, 0, 0, 0);
row++;
button = gwy_radio_buttons_find(controls.mode, LOGISTIC_MODE_USE);
- gtk_table_attach(GTK_TABLE(table), button, 0, 3, row, row+1,
+ gtk_table_attach(GTK_TABLE(table), button, 0, 2, row, row+1,
GTK_FILL, 0, 0, 0);
row++;
- gtk_table_attach(GTK_TABLE(table),
- gwy_label_new_header(_("Features")),
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ gtk_table_attach(GTK_TABLE(table), gwy_label_new_header(_("Features")),
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
controls.use_gaussians
@@ -276,20 +275,18 @@ logistic_dialog(G_GNUC_UNUSED GwyContainer *data, LogisticArgs *args)
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.use_gaussians),
args->use_gaussians);
gtk_table_attach(GTK_TABLE(table), controls.use_gaussians,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect_swapped(controls.use_gaussians, "toggled",
- G_CALLBACK(logistic_invalidate),
- &controls);
+ G_CALLBACK(logistic_invalidate), &controls);
row++;
- controls.ngaussians
- = gtk_adjustment_new(args->ngaussians, 1, 10, 1, 2, 0);
- gwy_table_attach_hscale(table, row,
+ controls.ngaussians = gtk_adjustment_new(args->ngaussians, 1, 10, 1, 2, 0);
+ gwy_table_attach_adjbar(table, row,
_("_Number of Gaussians:"), NULL,
- controls.ngaussians, GWY_HSCALE_DEFAULT);
+ controls.ngaussians,
+ GWY_HSCALE_LINEAR | GWY_HSCALE_SNAP);
g_signal_connect_swapped(controls.ngaussians, "value-changed",
- G_CALLBACK(logistic_invalidate),
- &controls);
+ G_CALLBACK(logistic_invalidate), &controls);
row++;
controls.use_sobel
@@ -297,10 +294,9 @@ logistic_dialog(G_GNUC_UNUSED GwyContainer *data, LogisticArgs *args)
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.use_sobel),
args->use_sobel);
gtk_table_attach(GTK_TABLE(table), controls.use_sobel,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect_swapped(controls.use_sobel, "toggled",
- G_CALLBACK(logistic_invalidate),
- &controls);
+ G_CALLBACK(logistic_invalidate), &controls);
row++;
controls.use_laplasian
@@ -308,10 +304,9 @@ logistic_dialog(G_GNUC_UNUSED GwyContainer *data, LogisticArgs *args)
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.use_laplasian),
args->use_laplasian);
gtk_table_attach(GTK_TABLE(table), controls.use_laplasian,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect_swapped(controls.use_laplasian, "toggled",
- G_CALLBACK(logistic_invalidate),
- &controls);
+ G_CALLBACK(logistic_invalidate), &controls);
row++;
controls.use_hessian
@@ -319,20 +314,18 @@ logistic_dialog(G_GNUC_UNUSED GwyContainer *data, LogisticArgs *args)
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.use_hessian),
args->use_hessian);
gtk_table_attach(GTK_TABLE(table), controls.use_hessian,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect_swapped(controls.use_hessian, "toggled",
- G_CALLBACK(logistic_invalidate),
- &controls);
+ G_CALLBACK(logistic_invalidate), &controls);
row++;
controls.lambda
= gtk_adjustment_new(args->lambda, 0.0, 10.0, 0.1, 1.0, 0);
- gwy_table_attach_hscale(table, row,
+ gwy_table_attach_adjbar(table, row,
_("_Regularization parameter:"), NULL,
controls.lambda, GWY_HSCALE_DEFAULT);
g_signal_connect_swapped(controls.lambda, "value-changed",
- G_CALLBACK(logistic_invalidate),
- &controls);
+ G_CALLBACK(logistic_invalidate), &controls);
row++;
logistic_dialog_update(&controls, args);
diff --git a/modules/process/mark_disconn.c b/modules/process/mark_disconn.c
index 6347cd4..c77cdac 100644
--- a/modules/process/mark_disconn.c
+++ b/modules/process/mark_disconn.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: mark_disconn.c 19044 2016-10-08 19:10:46Z yeti-dn $
+ * @(#) $Id: mark_disconn.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2015 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -31,6 +31,7 @@
#include <libprocess/linestats.h>
#include <libgwydgets/gwyradiobuttons.h>
#include <libgwydgets/gwycombobox.h>
+#include <libgwydgets/gwystock.h>
#include <libgwymodule/gwymodule-process.h>
#include <app/gwymoduleutils.h>
#include <app/gwyapp.h>
@@ -62,7 +63,7 @@ typedef struct {
GtkWidget *view;
GtkWidget *color_button;
GtkWidget *combine;
- GtkWidget *combine_type;
+ GSList *combine_type;
} DisconnControls;
static gboolean module_register (void);
@@ -83,10 +84,9 @@ static void size_changed (GtkAdjustment *adj,
DisconnControls *controls);
static void threshold_changed (GtkAdjustment *adj,
DisconnControls *controls);
-static void combine_changed (GtkToggleButton *toggle,
- DisconnControls *controls);
-static void combine_type_changed (GtkComboBox *combo,
- DisconnControls *controls);
+static void combine_changed (DisconnControls *controls,
+ GtkToggleButton *toggle);
+static void combine_type_changed (DisconnControls *controls);
static void disconn_load_args (GwyContainer *container,
DisconnArgs *args);
static void disconn_save_args (GwyContainer *container,
@@ -103,12 +103,12 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Creates mask of values disconnected to the rest."),
"Yeti <yeti at gwyddion.net>",
- "1.2",
+ "1.4",
"David Nečas (Yeti)",
"2015",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, mark_disconn)
static gboolean
module_register(void)
@@ -116,7 +116,7 @@ module_register(void)
gwy_process_func_register("mark_disconn",
(GwyProcessFunc)&mark_disconn,
N_("/_Correct Data/Mask of _Disconnected..."),
- NULL,
+ GWY_STOCK_DISCONNECTED,
DISCONN_RUN_MODES,
GWY_MENU_FLAG_DATA,
N_("Mark data disconnected from other values"));
@@ -148,8 +148,8 @@ mark_disconn(GwyContainer *data,
_("Initializing..."));
if (!disconn_do(dfield, maskfield, &args))
GWY_OBJECT_UNREF(maskfield);
- disconn_save_args(gwy_app_settings_get(), &args);
}
+ disconn_save_args(gwy_app_settings_get(), &args);
if (!maskfield)
return;
@@ -239,7 +239,7 @@ disconn_dialog(DisconnArgs *args, GwyContainer *data, gint id)
controls.view = create_preview(controls.mydata, 0, PREVIEW_SIZE, TRUE);
gtk_box_pack_start(GTK_BOX(hbox), controls.view, FALSE, FALSE, 4);
- table = gtk_table_new(8 + 2*(!!existing_mask), 4, FALSE);
+ table = gtk_table_new(8 + 2*(!!existing_mask), 3, FALSE);
gtk_table_set_row_spacings(GTK_TABLE(table), 2);
gtk_table_set_col_spacings(GTK_TABLE(table), 6);
gtk_container_set_border_width(GTK_CONTAINER(table), 4);
@@ -249,27 +249,28 @@ disconn_dialog(DisconnArgs *args, GwyContainer *data, gint id)
label = gtk_label_new(_("Defect type:"));
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
gtk_table_attach(GTK_TABLE(table), label,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
group = gwy_radio_buttons_create(types, G_N_ELEMENTS(types),
G_CALLBACK(type_changed), &controls,
args->type);
controls.type = group;
- row = gwy_radio_buttons_attach_to_table(group, GTK_TABLE(table), 3, row);
+ row = gwy_radio_buttons_attach_to_table(group, GTK_TABLE(table), 2, row);
gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
controls.size = gtk_adjustment_new(args->size, 1, 256, 1, 10, 0);
- gwy_table_attach_hscale(table, row, _("Defect _radius:"), "px",
- controls.size, GWY_HSCALE_SQRT);
+ gwy_table_attach_adjbar(table, row, _("Defect _radius:"), _("px"),
+ controls.size,
+ GWY_HSCALE_SQRT | GWY_HSCALE_SNAP);
g_signal_connect(controls.size, "value-changed",
G_CALLBACK(size_changed), &controls);
row++;
controls.threshold = gtk_adjustment_new(args->threshold,
0.0, 1.0, 0.001, 0.1, 0);
- spin = gwy_table_attach_hscale(table, row, _("_Threshold:"), NULL,
- controls.threshold, GWY_HSCALE_SQRT);
+ spin = gwy_table_attach_adjbar(table, row, _("_Threshold:"), NULL,
+ controls.threshold, GWY_HSCALE_DEFAULT);
gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 4);
g_signal_connect(controls.threshold, "value-changed",
G_CALLBACK(threshold_changed), &controls);
@@ -278,36 +279,23 @@ disconn_dialog(DisconnArgs *args, GwyContainer *data, gint id)
gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
label = gwy_label_new_header(_("Options"));
gtk_table_attach(GTK_TABLE(table), label,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
if (existing_mask) {
- controls.combine
- = gtk_check_button_new_with_mnemonic(_("Com_bine with "
- "existing mask"));
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.combine),
- args->combine);
- gtk_table_attach(GTK_TABLE(table), controls.combine,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
- g_signal_connect(controls.combine, "toggled",
- G_CALLBACK(combine_changed), &controls);
- row++;
-
- controls.combine_type
- = gwy_enum_combo_box_new(gwy_merge_type_get_enum(), -1,
- G_CALLBACK(combine_type_changed),
- &controls,
- args->combine_type, TRUE);
- gwy_table_attach_hscale(table, row, _("Operation:"), NULL,
- GTK_OBJECT(controls.combine_type),
- GWY_HSCALE_WIDGET);
- gtk_table_set_row_spacing(GTK_TABLE(table), row, 8);
+ create_mask_merge_buttons(table, row, NULL,
+ args->combine,
+ G_CALLBACK(combine_changed),
+ args->combine_type,
+ G_CALLBACK(combine_type_changed),
+ &controls,
+ &controls.combine, &controls.combine_type);
row++;
}
controls.color_button = create_mask_color_button(controls.mydata, dialog,
0);
- gwy_table_attach_hscale(table, row, _("_Mask color:"), NULL,
+ gwy_table_attach_adjbar(table, row, _("_Mask color:"), NULL,
GTK_OBJECT(controls.color_button),
GWY_HSCALE_WIDGET_NO_EXPAND);
row++;
@@ -410,15 +398,16 @@ threshold_changed(GtkAdjustment *adj, DisconnControls *controls)
}
static void
-combine_changed(GtkToggleButton *toggle, DisconnControls *controls)
+combine_changed(DisconnControls *controls, GtkToggleButton *toggle)
{
controls->args->combine = gtk_toggle_button_get_active(toggle);
}
static void
-combine_type_changed(GtkComboBox *combo, DisconnControls *controls)
+combine_type_changed(DisconnControls *controls)
{
- controls->args->combine_type = gwy_enum_combo_box_get_active(combo);
+ controls->args->combine_type
+ = gwy_radio_buttons_get_current(controls->combine_type);
}
/* Remove from mask pixels with values that do not belong to the largest
diff --git a/modules/process/mark_with.c b/modules/process/mark_with.c
index 30661fa..dfb084a 100644
--- a/modules/process/mark_with.c
+++ b/modules/process/mark_with.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: mark_with.c 18537 2016-03-28 18:11:19Z yeti-dn $
+ * @(#) $Id: mark_with.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2009 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -138,12 +138,12 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Creates or modifies a mask using other channels."),
"Yeti <yeti at gwyddion.net>",
- "1.4",
+ "1.5",
"David Nečas (Yeti)",
"2009",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, mark_with)
static gboolean
module_register(void)
@@ -180,11 +180,12 @@ static void
mark_dialog(MarkArgs *args,
GQuark mquark)
{
- GtkWidget *dialog, *hbox, *vbox, *label, *vbox2;
+ GtkWidget *dialog, *hbox, *vbox, *label, *vbox2, *hbox2;
GtkTable *table;
MarkControls controls;
GwyContainer *data;
GwyDataField *dfield;
+ GtkSizeGroup *combosizes;
GSList *l;
gint response, row;
guint i;
@@ -220,7 +221,7 @@ mark_dialog(MarkArgs *args,
gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 0);
/* Controls */
- table = GTK_TABLE(gtk_table_new(13, 4, FALSE));
+ table = GTK_TABLE(gtk_table_new(13, 3, FALSE));
gtk_table_set_row_spacings(table, 2);
gtk_table_set_col_spacings(table, 6);
gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(table), FALSE, TRUE, 0);
@@ -240,7 +241,7 @@ mark_dialog(MarkArgs *args,
_("_Subtract mask"), MASK_EDIT_REMOVE,
_("_Intersect masks"), MASK_EDIT_INTERSECT,
NULL);
- row = gwy_radio_buttons_attach_to_table(controls.operation, table, 3, row);
+ row = gwy_radio_buttons_attach_to_table(controls.operation, table, 2, row);
gtk_table_set_row_spacing(table, row-1, 8);
/* Mark with */
@@ -259,11 +260,13 @@ mark_dialog(MarkArgs *args,
gwy_sgettext("with|_Presentation"),
MARK_WITH_SHOW,
NULL);
+ combosizes = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
for (l = controls.mark_with; l; l = g_slist_next(l)) {
GwyDataChooser *chooser;
- gtk_table_attach(table, GTK_WIDGET(l->data),
- 0, 1, row, row+1, GTK_FILL, 0, 0, 0);
+ hbox2 = gtk_hbox_new(FALSE, 6);
+ gtk_table_attach(table, hbox2, 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
+ gtk_box_pack_start(GTK_BOX(hbox2), GTK_WIDGET(l->data), FALSE, TRUE, 0);
i = gwy_radio_button_get_value(GTK_WIDGET(l->data));
controls.channels[i] = gwy_data_chooser_new_channels();
chooser = GWY_DATA_CHOOSER(controls.channels[i]);
@@ -278,28 +281,29 @@ mark_dialog(MarkArgs *args,
else
gwy_data_chooser_set_filter(chooser, &show_attach_filter,
&args->target, NULL);
- gtk_table_attach(table, controls.channels[i],
- 1, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ gtk_box_pack_end(GTK_BOX(hbox2), controls.channels[i], FALSE, TRUE, 0);
+ gtk_size_group_add_widget(combosizes, controls.channels[i]);
controls.has_any[i] = !!gwy_data_chooser_get_active(chooser, NULL);
- gtk_widget_set_sensitive(GTK_WIDGET(l->data), controls.has_any[i]);
+ gtk_widget_set_sensitive(hbox2, controls.has_any[i]);
gwy_data_chooser_get_active_id(chooser, args->source + i);
g_signal_connect(chooser, "changed",
G_CALLBACK(channel_changed), &controls);
row++;
}
+ g_object_unref(combosizes);
gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
/* Range */
label = gtk_label_new(_("Marked data range:"));
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_table_attach(table, label, 0, 1, row, row+1, GTK_FILL, 0, 0, 0);
+ gtk_table_attach(table, label, 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
/* Minimum */
controls.min = GTK_ADJUSTMENT(gtk_adjustment_new(100.0*args->min,
0.0, 100.0, 0.01, 1.0, 0));
- gwy_table_attach_hscale(GTK_WIDGET(table), row, _("_Minimum:"), "%",
- GTK_OBJECT(controls.min), 0);
+ gwy_table_attach_adjbar(GTK_WIDGET(table), row, _("_Minimum:"), "%",
+ GTK_OBJECT(controls.min), GWY_HSCALE_LINEAR);
g_signal_connect_swapped(controls.min, "value-changed",
G_CALLBACK(min_changed), &controls);
row++;
@@ -307,8 +311,8 @@ mark_dialog(MarkArgs *args,
/* Maximum */
controls.max = GTK_ADJUSTMENT(gtk_adjustment_new(100.0*args->max,
0.0, 100.0, 0.01, 1.0, 0));
- gwy_table_attach_hscale(GTK_WIDGET(table), row, _("M_aximum:"), "%",
- GTK_OBJECT(controls.max), 0);
+ gwy_table_attach_adjbar(GTK_WIDGET(table), row, _("M_aximum:"), "%",
+ GTK_OBJECT(controls.max), GWY_HSCALE_LINEAR);
g_signal_connect_swapped(controls.max, "value-changed",
G_CALLBACK(max_changed), &controls);
gtk_table_set_row_spacing(table, row, 8);
diff --git a/modules/process/mask_distribute.c b/modules/process/mask_distribute.c
index 6ad8864..7c07b49 100644
--- a/modules/process/mask_distribute.c
+++ b/modules/process/mask_distribute.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: mask_distribute.c 18626 2016-04-22 10:15:13Z yeti-dn $
+ * @(#) $Id: mask_distribute.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2003-2004 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -91,7 +91,7 @@ static GwyModuleInfo module_info = {
"2015",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, mask_distribute)
static gboolean
module_register(void)
@@ -165,7 +165,7 @@ mask_distrib_dialog(MaskDistribArgs *args)
label = gwy_label_new_header(_("Distribute to:"));
gtk_table_attach(GTK_TABLE(table), label,
- 0, 1, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 1, row, row+1, GTK_FILL, 0, 0, 0);
row++;
controls.mode = gwy_radio_buttons_create(modes, G_N_ELEMENTS(modes),
@@ -180,7 +180,7 @@ mask_distrib_dialog(MaskDistribArgs *args)
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.keep_existing),
args->keep_existing);
gtk_table_attach(GTK_TABLE(table), controls.keep_existing,
- 0, 1, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 1, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect(controls.keep_existing, "toggled",
G_CALLBACK(keep_existing_changed), &controls);
row++;
diff --git a/modules/process/mask_edt.c b/modules/process/mask_edt.c
index bd0ac1e..803cbf1 100644
--- a/modules/process/mask_edt.c
+++ b/modules/process/mask_edt.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: mask_edt.c 18960 2016-09-15 21:32:48Z yeti-dn $
+ * @(#) $Id: mask_edt.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2014-2015 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -43,11 +43,6 @@ typedef enum {
} MaskEdtType;
typedef struct {
- gdouble dist, ndist;
- gint j, i;
-} ThinCandidate;
-
-typedef struct {
MaskEdtType mask_type;
GwyDistanceTransformType dist_type;
gboolean from_border;
@@ -64,7 +59,6 @@ typedef struct {
static gboolean module_register (void);
static void mask_thin (GwyContainer *data,
GwyRunType run);
-static void thin_mask (GwyDataField *mask);
static void mask_edt (GwyContainer *data,
GwyRunType run);
static gboolean maskedt_dialog (MaskEdtArgs *args);
@@ -94,12 +88,12 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Performs simple and true Euclidean distance transforms of masks."),
"Yeti <yeti at gwyddion.net>",
- "2.1",
+ "2.2",
"David Nečas (Yeti)",
"2014",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, mask_edt)
static gboolean
module_register(void)
@@ -137,171 +131,11 @@ mask_thin(GwyContainer *data, GwyRunType run)
g_return_if_fail(mfield);
gwy_app_undo_qcheckpointv(data, 1, &quark);
- thin_mask(mfield);
+ gwy_data_field_grains_thin(mfield);
gwy_data_field_data_changed(mfield);
gwy_app_channel_log_add_proc(data, id, id);
}
-static gint
-compare_candidate(gconstpointer pa, gconstpointer pb)
-{
- const ThinCandidate *a = (const ThinCandidate*)pa;
- const ThinCandidate *b = (const ThinCandidate*)pb;
-
- /* Take pixels with lowest Euclidean distances first. */
- if (a->dist < b->dist)
- return -1;
- if (a->dist > b->dist)
- return 1;
-
- /* If equal, take pixels with largest Euclidean distance *of their
- * neighbours* first. This essentially mean flat edges go before corners,
- * preserving useful branches. */
- if (a->ndist > b->ndist)
- return -1;
- if (a->ndist < b->ndist)
- return 1;
-
- /* When desperate, sort bottom and right coordinates first so that we try
- * to remove them first. Anyway we must impose some rule to make the
- * sort stable. */
- if (a->i > b->i)
- return -1;
- if (a->i < b->i)
- return 1;
- if (a->j > b->j)
- return -1;
- if (a->j < b->j)
- return 1;
-
- return 0;
-}
-
-static void
-thin_mask(GwyDataField *mask)
-{
- /* TRUE means removing the central pixel in a 3x3 pixel configuration does
- * not break any currently connected parts. */
- static const gboolean ok_to_remove[0x100] = {
- TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE,
- TRUE, TRUE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE,
- TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE,
- TRUE, TRUE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE,
- TRUE, TRUE, FALSE, FALSE, TRUE, TRUE, FALSE, FALSE,
- FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE,
- TRUE, TRUE, FALSE, FALSE, TRUE, TRUE, FALSE, FALSE,
- TRUE, TRUE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE,
- TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE,
- TRUE, TRUE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE,
- TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE,
- TRUE, TRUE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE,
- TRUE, TRUE, FALSE, FALSE, TRUE, TRUE, FALSE, FALSE,
- FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE,
- TRUE, TRUE, FALSE, FALSE, TRUE, TRUE, FALSE, FALSE,
- TRUE, TRUE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE,
- TRUE, TRUE, FALSE, TRUE, TRUE, TRUE, FALSE, TRUE,
- FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE,
- TRUE, TRUE, FALSE, TRUE, TRUE, TRUE, FALSE, TRUE,
- FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE,
- FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE,
- FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE,
- FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE,
- FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE,
- TRUE, TRUE, FALSE, TRUE, TRUE, TRUE, FALSE, TRUE,
- FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE,
- TRUE, TRUE, FALSE, TRUE, TRUE, TRUE, FALSE, TRUE,
- FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE,
- TRUE, TRUE, FALSE, TRUE, TRUE, TRUE, FALSE, TRUE,
- FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE,
- TRUE, TRUE, FALSE, TRUE, TRUE, TRUE, FALSE, TRUE,
- TRUE, TRUE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE,
- };
-
- GwyDataField *dfield;
- gint i, j, k, xres = mask->xres, yres = mask->yres, ncand;
- gdouble *d, *m;
- ThinCandidate *candidates;
-
- dfield = gwy_data_field_duplicate(mask);
- gwy_data_field_copy(mask, dfield, FALSE);
- gwy_data_field_grain_distance_transform(dfield);
- d = gwy_data_field_get_data(dfield);
- m = gwy_data_field_get_data(mask);
-
- ncand = 0;
- for (k = 0; k < xres*yres; k++) {
- if (d[k] > 0.0)
- ncand++;
- }
-
- candidates = g_new(ThinCandidate, ncand);
- k = 0;
- for (i = 0; i < yres; i++) {
- for (j = 0; j < xres; j++) {
- if (d[i*xres + j] > 0.0) {
- gdouble ndist = 0.0;
- candidates[k].i = i;
- candidates[k].j = j;
- candidates[k].dist = d[i*xres + j];
-
- if (i && j)
- ndist += d[(i-1)*xres + (j-1)];
- if (i)
- ndist += d[(i-1)*xres + j];
- if (i && j < xres-1)
- ndist += d[(i-1)*xres + (j+1)];
- if (j < xres-1)
- ndist += d[i*xres + (j+1)];
- if (i < yres-1 && j < xres-1)
- ndist += d[(i+1)*xres + (j+1)];
- if (i < yres-1)
- ndist += d[(i+1)*xres + j];
- if (i < yres-1 && j)
- ndist += d[(i+1)*xres + (j-1)];
- if (j)
- ndist += d[i*xres + (j-1)];
-
- candidates[k].ndist = ndist;
- k++;
- }
- }
- }
- g_assert(k == ncand);
-
- qsort(candidates, ncand, sizeof(ThinCandidate), &compare_candidate);
-
- for (k = 0; k < ncand; k++) {
- guint b = 0;
-
- i = candidates[k].i;
- j = candidates[k].j;
- if (i && j && d[(i-1)*xres + (j-1)] > 0.0)
- b |= 1;
- if (i && d[(i-1)*xres + j] > 0.0)
- b |= 2;
- if (i && j < xres-1 && d[(i-1)*xres + (j+1)] > 0.0)
- b |= 4;
- if (j < xres-1 && d[i*xres + (j+1)] > 0.0)
- b |= 8;
- if (i < yres-1 && j < xres-1 && d[(i+1)*xres + (j+1)] > 0.0)
- b |= 16;
- if (i < yres-1 && d[(i+1)*xres + j] > 0.0)
- b |= 32;
- if (i < yres-1 && j && d[(i+1)*xres + (j-1)] > 0.0)
- b |= 64;
- if (j && d[i*xres + (j-1)] > 0.0)
- b |= 128;
-
- if (ok_to_remove[b]) {
- d[i*xres + j] = 0.0;
- m[i*xres + j] = 0.0;
- }
- }
-
- g_free(candidates);
- g_object_unref(dfield);
-}
-
static void
mask_edt(GwyContainer *data, GwyRunType run)
{
@@ -360,7 +194,7 @@ maskedt_dialog(MaskEdtArgs *args)
gwy_help_add_to_proc_dialog(GTK_DIALOG(dialog), GWY_HELP_DEFAULT);
controls.dialog = dialog;
- table = gtk_table_new(6, 4, FALSE);
+ table = gtk_table_new(6, 3, FALSE);
gtk_table_set_row_spacings(GTK_TABLE(table), 2);
gtk_table_set_col_spacings(GTK_TABLE(table), 6);
gtk_container_set_border_width(GTK_CONTAINER(table), 4);
@@ -370,14 +204,14 @@ maskedt_dialog(MaskEdtArgs *args)
= gwy_enum_combo_box_new(gwy_distance_transform_type_get_enum(), -1,
G_CALLBACK(dist_type_changed), &controls,
args->dist_type, TRUE);
- gwy_table_attach_hscale(table, row++, _("_Distance type:"), NULL,
+ gwy_table_attach_adjbar(table, row++, _("_Distance type:"), NULL,
GTK_OBJECT(controls.dist_type),
- GWY_HSCALE_WIDGET);
+ GWY_HSCALE_WIDGET_NO_EXPAND);
label = gtk_label_new(_("Output type:"));
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
gtk_table_attach(GTK_TABLE(table), label,
- 0, 1, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
controls.mask_type = gwy_radio_buttons_create(mask_types,
@@ -387,15 +221,15 @@ maskedt_dialog(MaskEdtArgs *args)
args->mask_type);
row = gwy_radio_buttons_attach_to_table(controls.mask_type,
GTK_TABLE(table),
- 3, row);
- gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
+ 2, row);
+ gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
controls.from_border
= gtk_check_button_new_with_mnemonic(_("Shrink from _border"));
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.from_border),
args->from_border);
gtk_table_attach(GTK_TABLE(table), controls.from_border,
- 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect(controls.from_border, "toggled",
G_CALLBACK(from_border_changed), &controls);
row++;
diff --git a/modules/process/mask_morph.c b/modules/process/mask_morph.c
index 9ce8ad5..495ba84 100644
--- a/modules/process/mask_morph.c
+++ b/modules/process/mask_morph.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: mask_morph.c 18626 2016-04-22 10:15:13Z yeti-dn $
+ * @(#) $Id: mask_morph.c 20105 2017-07-29 09:24:09Z yeti-dn $
* Copyright (C) 2015 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -35,7 +35,6 @@
#include <app/gwymoduleutils.h>
#define MASKMORPH_RUN_MODES (GWY_RUN_IMMEDIATE | GWY_RUN_INTERACTIVE)
-#define MASKTHIN_RUN_MODES GWY_RUN_IMMEDIATE
typedef enum {
MASKMORPH_EROSION = 0,
@@ -116,19 +115,19 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Performs basic morphological operations with masks."),
"Yeti <yeti at gwyddion.net>",
- "1.0",
+ "1.1",
"David Nečas (Yeti)",
"2015",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, mask_morph)
static gboolean
module_register(void)
{
gwy_process_func_register("mask_morph",
(GwyProcessFunc)&mask_morph,
- N_("/_Mask/Morphological Operation..."),
+ N_("/_Mask/Morpho_logical Operation..."),
GWY_STOCK_MASK_MORPH,
MASKMORPH_RUN_MODES,
GWY_MENU_FLAG_DATA_MASK | GWY_MENU_FLAG_DATA,
@@ -201,7 +200,7 @@ maskmorph_dialog(MaskMorphArgs *args, GwyDataField *mask)
controls.dialog = dialog;
table = gtk_table_new(MASKMORPH_NOPERATIONS + MASKMORPH_NSHAPES + 5,
- 4, FALSE);
+ 3, FALSE);
gtk_table_set_row_spacings(GTK_TABLE(table), 2);
gtk_table_set_col_spacings(GTK_TABLE(table), 6);
gtk_container_set_border_width(GTK_CONTAINER(table), 4);
@@ -210,7 +209,7 @@ maskmorph_dialog(MaskMorphArgs *args, GwyDataField *mask)
label = gtk_label_new(_("Operation:"));
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
gtk_table_attach(GTK_TABLE(table), label,
- 0, 1, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
controls.mode
@@ -218,13 +217,13 @@ maskmorph_dialog(MaskMorphArgs *args, GwyDataField *mask)
G_CALLBACK(mode_changed), &controls,
args->mode);
row = gwy_radio_buttons_attach_to_table(controls.mode, GTK_TABLE(table),
- 3, row);
+ 2, row);
gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
label = gtk_label_new(_("Structuring element:"));
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
gtk_table_attach(GTK_TABLE(table), label,
- 0, 1, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
controls.shape
@@ -232,11 +231,11 @@ maskmorph_dialog(MaskMorphArgs *args, GwyDataField *mask)
G_CALLBACK(shape_changed), &controls,
args->shape);
row = gwy_radio_buttons_attach_to_table(controls.shape, GTK_TABLE(table),
- 3, row);
+ 2, row);
controls.radius = gtk_adjustment_new(args->radius, 1, 1025, 1, 10, 0);
- gwy_table_attach_hscale(table, row, _("_Radius:"), "px", controls.radius,
- GWY_HSCALE_SQRT);
+ gwy_table_attach_adjbar(table, row, _("_Radius:"), _("px"),
+ controls.radius, GWY_HSCALE_SQRT);
g_signal_connect(controls.radius, "value-changed",
G_CALLBACK(radius_changed), &controls);
row++;
@@ -246,8 +245,9 @@ maskmorph_dialog(MaskMorphArgs *args, GwyDataField *mask)
&args->kernel);
gwy_data_chooser_set_filter(GWY_DATA_CHOOSER(controls.kernel),
&kernel_filter, mask, NULL);
- gwy_table_attach_hscale(table, row, _("_Mask:"), NULL,
- GTK_OBJECT(controls.kernel), GWY_HSCALE_WIDGET);
+ gwy_table_attach_adjbar(table, row, _("_Mask:"), NULL,
+ GTK_OBJECT(controls.kernel),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
has_kernel = gwy_data_chooser_get_active_id(GWY_DATA_CHOOSER(controls.kernel),
&args->kernel);
g_signal_connect(controls.kernel, "changed",
@@ -259,7 +259,7 @@ maskmorph_dialog(MaskMorphArgs *args, GwyDataField *mask)
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.crop_kernel),
args->crop_kernel);
gtk_table_attach(GTK_TABLE(table), controls.crop_kernel,
- 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect(controls.crop_kernel, "toggled",
G_CALLBACK(crop_kernel_changed), &controls);
diff --git a/modules/process/mask_noisify.c b/modules/process/mask_noisify.c
new file mode 100644
index 0000000..dd6b58c
--- /dev/null
+++ b/modules/process/mask_noisify.c
@@ -0,0 +1,333 @@
+/*
+ * @(#) $Id: mask_noisify.c 20104 2017-07-29 09:23:41Z yeti-dn $
+ * Copyright (C) 2017 David Necas (Yeti).
+ * E-mail: yeti at gwyddion.net.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "config.h"
+#include <stdlib.h>
+#include <libgwyddion/gwymacros.h>
+#include <libgwyddion/gwyrandgenset.h>
+#include <libprocess/grains.h>
+#include <libgwydgets/gwyradiobuttons.h>
+#include <libgwydgets/gwystock.h>
+#include <libgwydgets/gwydgetutils.h>
+#include <libgwymodule/gwymodule-process.h>
+#include <app/gwyapp.h>
+
+#define NOSIFYMASK_RUN_MODES (GWY_RUN_IMMEDIATE | GWY_RUN_INTERACTIVE)
+
+typedef enum {
+ NOISE_DIRECTION_BOTH = 0,
+ NOISE_DIRECTION_UP = 1,
+ NOISE_DIRECTION_DOWN = 2,
+ NOISE_DIRECTION_NTYPES
+} NoiseDirectionType;
+
+typedef struct {
+ NoiseDirectionType direction;
+ gdouble density;
+ gboolean only_boundaries;
+} MaskNoiseArgs;
+
+typedef struct {
+ MaskNoiseArgs *args;
+ GtkWidget *dialog;
+ GSList *direction;
+ GtkObject *density;
+ GtkWidget *only_boundaries;
+} MaskNoiseControls;
+
+static gboolean module_register (void);
+static void mask_noisify (GwyContainer *data,
+ GwyRunType run);
+static gboolean masknoise_dialog (MaskNoiseArgs *args);
+static void direction_type_changed (GtkWidget *button,
+ MaskNoiseControls *controls);
+static void density_changed (GtkAdjustment *adj,
+ MaskNoiseControls *controls);
+static void only_boundaries_changed(GtkToggleButton *toggle,
+ MaskNoiseControls *controls);
+static void masknoise_do (GwyDataField *mfield,
+ MaskNoiseArgs *args);
+static void masknoise_sanitize_args(MaskNoiseArgs *args);
+static void masknoise_load_args (GwyContainer *settings,
+ MaskNoiseArgs *args);
+static void masknoise_save_args (GwyContainer *settings,
+ MaskNoiseArgs *args);
+
+static const MaskNoiseArgs masknoise_defaults = {
+ NOISE_DIRECTION_BOTH,
+ 0.1,
+ FALSE,
+};
+
+static GwyModuleInfo module_info = {
+ GWY_MODULE_ABI_VERSION,
+ &module_register,
+ N_("Adds salt and/or pepper noise to mask."),
+ "Yeti <yeti at gwyddion.net>",
+ "1.0",
+ "David Nečas (Yeti)",
+ "2017",
+};
+
+GWY_MODULE_QUERY2(module_info, mask_noisify)
+
+static gboolean
+module_register(void)
+{
+ gwy_process_func_register("mask_noisify",
+ (GwyProcessFunc)&mask_noisify,
+ N_("/_Mask/_Noisify..."),
+ NULL,
+ NOSIFYMASK_RUN_MODES,
+ GWY_MENU_FLAG_DATA_MASK | GWY_MENU_FLAG_DATA,
+ N_("Add noise to mask"));
+
+ return TRUE;
+}
+
+static void
+mask_noisify(GwyContainer *data, GwyRunType run)
+{
+ GwyDataField *mfield;
+ MaskNoiseArgs args;
+ GQuark quark;
+ gint id;
+
+ g_return_if_fail(run & NOSIFYMASK_RUN_MODES);
+ gwy_app_data_browser_get_current(GWY_APP_MASK_FIELD, &mfield,
+ GWY_APP_MASK_FIELD_KEY, &quark,
+ GWY_APP_DATA_FIELD_ID, &id,
+ 0);
+ g_return_if_fail(mfield);
+
+ masknoise_load_args(gwy_app_settings_get(), &args);
+ if (run == GWY_RUN_IMMEDIATE || masknoise_dialog(&args)) {
+ gwy_app_undo_qcheckpointv(data, 1, &quark);
+ masknoise_do(mfield, &args);
+ gwy_data_field_data_changed(mfield);
+ gwy_app_channel_log_add_proc(data, id, id);
+ }
+ masknoise_save_args(gwy_app_settings_get(), &args);
+}
+
+static gboolean
+masknoise_dialog(MaskNoiseArgs *args)
+{
+ MaskNoiseControls controls;
+ GtkWidget *dialog;
+ GtkWidget *table, *label;
+ gint response, row = 0;
+
+ controls.args = args;
+
+ dialog = gtk_dialog_new_with_buttons(_("Noisify Mask"),
+ NULL, 0,
+ GTK_STOCK_CANCEL,
+ GTK_RESPONSE_CANCEL,
+ GTK_STOCK_OK,
+ GTK_RESPONSE_OK,
+ NULL);
+ gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK);
+ gwy_help_add_to_proc_dialog(GTK_DIALOG(dialog), GWY_HELP_DEFAULT);
+ controls.dialog = dialog;
+
+ table = gtk_table_new(NOISE_DIRECTION_NTYPES + 3, 3, FALSE);
+ gtk_table_set_row_spacings(GTK_TABLE(table), 2);
+ gtk_table_set_col_spacings(GTK_TABLE(table), 6);
+ gtk_container_set_border_width(GTK_CONTAINER(table), 4);
+ gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), table, TRUE, TRUE, 0);
+
+ label = gtk_label_new(_("Noise type:"));
+ gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
+ gtk_table_attach(GTK_TABLE(table), label,
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
+ row++;
+
+ controls.direction
+ = gwy_radio_buttons_createl(G_CALLBACK(direction_type_changed),
+ &controls, args->direction,
+ _("S_ymmetrical"), NOISE_DIRECTION_BOTH,
+ _("One-sided _positive"), NOISE_DIRECTION_UP,
+ _("One-sided _negative"), NOISE_DIRECTION_DOWN,
+ NULL);
+ row = gwy_radio_buttons_attach_to_table(controls.direction,
+ GTK_TABLE(table), 2, row);
+
+ gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
+ controls.density = gtk_adjustment_new(args->density, 0.0, 1.0, 0.0001, 0.1,
+ 0);
+ gwy_table_attach_adjbar(table, row, _("Densi_ty:"), NULL,
+ controls.density, GWY_HSCALE_SQRT);
+ g_signal_connect(controls.density, "value-changed",
+ G_CALLBACK(density_changed), &controls);
+ row++;
+
+ controls.only_boundaries
+ = gtk_check_button_new_with_mnemonic(_("_Alter only boundaries"));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.only_boundaries),
+ args->only_boundaries);
+ gtk_table_attach(GTK_TABLE(table), controls.only_boundaries,
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
+ g_signal_connect(controls.only_boundaries, "toggled",
+ G_CALLBACK(only_boundaries_changed), &controls);
+
+ gtk_widget_show_all(dialog);
+
+ do {
+ response = gtk_dialog_run(GTK_DIALOG(dialog));
+ switch (response) {
+ case GTK_RESPONSE_CANCEL:
+ case GTK_RESPONSE_DELETE_EVENT:
+ gtk_widget_destroy(dialog);
+ case GTK_RESPONSE_NONE:
+ return FALSE;
+ break;
+
+ case GTK_RESPONSE_OK:
+ break;
+
+ default:
+ g_assert_not_reached();
+ break;
+ }
+ } while (response != GTK_RESPONSE_OK);
+
+ gtk_widget_destroy(dialog);
+
+ return TRUE;
+}
+
+static void
+direction_type_changed(GtkWidget *button, MaskNoiseControls *controls)
+{
+ controls->args->direction = gwy_radio_button_get_value(button);
+}
+
+static void
+density_changed(GtkAdjustment *adj, MaskNoiseControls *controls)
+{
+ controls->args->density = gtk_adjustment_get_value(adj);
+}
+
+static void
+only_boundaries_changed(GtkToggleButton *toggle, MaskNoiseControls *controls)
+{
+ controls->args->only_boundaries = gtk_toggle_button_get_active(toggle);
+}
+
+static void
+masknoise_do(GwyDataField *mask, MaskNoiseArgs *args)
+{
+ GwyRandGenSet *rngset = gwy_rand_gen_set_new(1);
+ NoiseDirectionType direction = args->direction;
+ gboolean only_boundaries = args->only_boundaries, on_boundary;
+ guint xres, yres, iter, i, j, n, nind, k, have_bits = 0;
+ gint is_m, change_to;
+ guint *indices;
+ gdouble *m;
+ guint32 r;
+
+ xres = gwy_data_field_get_xres(mask);
+ yres = gwy_data_field_get_yres(mask);
+ n = xres*yres;
+ nind = GWY_ROUND(n*args->density);
+ indices = gwy_rand_gen_set_choose_shuffle(rngset, 0, n, nind);
+ m = gwy_data_field_get_data(mask);
+
+ for (iter = 0; iter < nind; iter++) {
+ k = indices[iter];
+
+ /* No-ops. */
+ is_m = (m[k] > 0.0);
+ if (direction == NOISE_DIRECTION_UP)
+ change_to = 1;
+ else if (direction == NOISE_DIRECTION_DOWN)
+ change_to = 0;
+ else {
+ if (!have_bits) {
+ r = gwy_rand_gen_set_int(rngset, 0);
+ have_bits = 32;
+ }
+ change_to = (r & 1);
+ have_bits--;
+ }
+ if (!change_to == !is_m)
+ continue;
+
+ /* Are we on a boundary? This cannot be pre-determined because we
+ * allow progressive boundary alteration. */
+ if (only_boundaries) {
+ on_boundary = FALSE;
+ i = k/xres;
+ j = k % xres;
+ if (!on_boundary && i > 0 && !is_m == !(m[k-xres] <= 0.0))
+ on_boundary = TRUE;
+ if (!on_boundary && j > 0 && !is_m == !(m[k-1] <= 0.0))
+ on_boundary = TRUE;
+ if (!on_boundary && j < xres-1 && !is_m == !(m[k+1] <= 0.0))
+ on_boundary = TRUE;
+ if (!on_boundary && i < yres-1 && !is_m == !(m[k+xres] <= 0.0))
+ on_boundary = TRUE;
+ if (!on_boundary)
+ continue;
+ }
+
+ m[k] = change_to;
+ }
+
+ g_free(indices);
+}
+
+static const gchar density_key[] = "/module/mask_noisify/density";
+static const gchar direction_key[] = "/module/mask_noisify/direction";
+static const gchar only_boundaries_key[] = "/module/mask_noisify/only_boundaries";
+
+static void
+masknoise_sanitize_args(MaskNoiseArgs *args)
+{
+ args->direction = MIN(args->direction, NOISE_DIRECTION_NTYPES-1);
+ args->density = CLAMP(args->density, 0.0, 1.0);
+ args->only_boundaries = !!args->only_boundaries;
+}
+
+static void
+masknoise_load_args(GwyContainer *settings,
+ MaskNoiseArgs *args)
+{
+ *args = masknoise_defaults;
+ gwy_container_gis_enum_by_name(settings, direction_key, &args->direction);
+ gwy_container_gis_double_by_name(settings, density_key, &args->density);
+ gwy_container_gis_boolean_by_name(settings, only_boundaries_key,
+ &args->only_boundaries);
+ masknoise_sanitize_args(args);
+}
+
+static void
+masknoise_save_args(GwyContainer *settings,
+ MaskNoiseArgs *args)
+{
+ gwy_container_set_enum_by_name(settings, direction_key, args->direction);
+ gwy_container_set_double_by_name(settings, density_key, args->density);
+ gwy_container_set_boolean_by_name(settings, only_boundaries_key,
+ args->only_boundaries);
+}
+
+/* vim: set cin et ts=4 sw=4 cino=>1s,e0,n0,f0,{0,}0,^0,\:1s,=0,g1s,h0,t0,+1s,c3,(0,u0 : */
diff --git a/modules/process/maskcor.c b/modules/process/maskcor.c
index ec22d07..c6c8f83 100644
--- a/modules/process/maskcor.c
+++ b/modules/process/maskcor.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: maskcor.c 18665 2016-04-26 20:42:48Z yeti-dn $
+ * @(#) $Id: maskcor.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2004 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -27,6 +27,7 @@
#include <libprocess/filters.h>
#include <libgwydgets/gwydgetutils.h>
#include <libgwydgets/gwycombobox.h>
+#include <libgwydgets/gwystock.h>
#include <libgwymodule/gwymodule-process.h>
#include <app/gwymoduleutils.h>
#include <app/gwyapp.h>
@@ -85,12 +86,12 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Creates mask by correlation with another data."),
"Petr Klapetek <klapetek at gwyddion.net>",
- "1.8",
+ "1.9",
"David Nečas (Yeti) & Petr Klapetek",
"2004",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, maskcor)
static gboolean
module_register(void)
@@ -98,7 +99,7 @@ module_register(void)
gwy_process_func_register("maskcor",
(GwyProcessFunc)&maskcor,
N_("/M_ultidata/_Mask by Correlation..."),
- NULL,
+ GWY_STOCK_CORRELATION_MASK,
MASKCOR_RUN_MODES,
GWY_MENU_FLAG_DATA,
N_("Create mask by correlation with another "
@@ -145,7 +146,7 @@ maskcor_dialog(MaskcorArgs *args)
gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK);
gwy_help_add_to_proc_dialog(GTK_DIALOG(dialog), GWY_HELP_DEFAULT);
- table = gtk_table_new(5, 4, FALSE);
+ table = gtk_table_new(5, 3, FALSE);
gtk_table_set_row_spacings(GTK_TABLE(table), 2);
gtk_table_set_col_spacings(GTK_TABLE(table), 6);
gtk_container_set_border_width(GTK_CONTAINER(table), 4);
@@ -162,8 +163,8 @@ maskcor_dialog(MaskcorArgs *args)
gwy_data_chooser_get_active_id(GWY_DATA_CHOOSER(chooser), &args->kernel);
g_signal_connect(chooser, "changed",
G_CALLBACK(maskcor_kernel_changed), &args->kernel);
- gwy_table_attach_hscale(table, row, _("Correlation _kernel:"), NULL,
- GTK_OBJECT(chooser), GWY_HSCALE_WIDGET);
+ gwy_table_attach_adjbar(table, row, _("Correlation _kernel:"), NULL,
+ GTK_OBJECT(chooser), GWY_HSCALE_WIDGET_NO_EXPAND);
row++;
/* Result */
@@ -173,19 +174,22 @@ maskcor_dialog(MaskcorArgs *args)
_("Correlation maxima"), GWY_MASKCOR_MAXIMA,
_("Correlation score"), GWY_MASKCOR_SCORE,
NULL);
- gwy_table_attach_row(table, row, _("Output _type:"), NULL, combo);
+ gwy_table_attach_adjbar(table, row, _("Output _type:"), NULL,
+ GTK_OBJECT(combo), GWY_HSCALE_WIDGET_NO_EXPAND);
row++;
/* Parameters */
method = gwy_enum_combo_box_new(gwy_correlation_type_get_enum(), -1,
G_CALLBACK(gwy_enum_combo_box_update_int),
&args->method, args->method, TRUE);
- gwy_table_attach_row(table, row, _("Correlation _method:"), NULL, method);
+ gwy_table_attach_adjbar(table, row, _("Correlation _method:"), NULL,
+ GTK_OBJECT(method), GWY_HSCALE_WIDGET_NO_EXPAND);
row++;
adj = gtk_adjustment_new(args->threshold, -1.0, 1.0, 0.01, 0.1, 0);
controls.threshold = adj;
- spin = gwy_table_attach_hscale(table, row, _("T_hreshold:"), NULL, adj, 0);
+ spin = gwy_table_attach_adjbar(table, row, _("T_hreshold:"), NULL,
+ adj, GWY_HSCALE_LINEAR);
gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 3);
gwy_table_hscale_set_sensitive(adj, args->result != GWY_MASKCOR_SCORE);
g_signal_connect(adj, "value-changed",
diff --git a/modules/process/maskops.c b/modules/process/maskops.c
index 462e749..eb5bfdd 100644
--- a/modules/process/maskops.c
+++ b/modules/process/maskops.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: maskops.c 18960 2016-09-15 21:32:48Z yeti-dn $
+ * @(#) $Id: maskops.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2003-2004 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -50,7 +50,7 @@ static GwyModuleInfo module_info = {
"2004",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, maskops)
static gboolean
module_register(void)
@@ -75,7 +75,7 @@ module_register(void)
GWY_STOCK_MASK_EXTRACT,
MASKOPS_RUN_MODES,
GWY_MENU_FLAG_DATA_MASK | GWY_MENU_FLAG_DATA,
- N_("Extract mask to a new channel"));
+ N_("Extract mask to a new image"));
gwy_process_func_register("grain_rem_touching",
(GwyProcessFunc)&remove_touching,
N_("/_Grains/_Remove Edge-Touching"),
diff --git a/modules/process/mcrop.c b/modules/process/mcrop.c
index f1b7079..65c4eb2 100644
--- a/modules/process/mcrop.c
+++ b/modules/process/mcrop.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: mcrop.c 18960 2016-09-15 21:32:48Z yeti-dn $
+ * @(#) $Id: mcrop.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2010, David Necas (Yeti), Petr Klapetek, Daniil Bratashov
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net, dn2010 at gmail.com
*
@@ -64,7 +64,7 @@ static GwyModuleInfo module_info = {
"2010",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, mcrop)
static gboolean
module_register(void)
@@ -168,11 +168,10 @@ static gboolean mcrop_dialog (GwyAppDataId *op1, GwyAppDataId *op2)
g_object_set_data(G_OBJECT(chooser), "dialog", dialog);
gwy_data_chooser_set_filter(GWY_DATA_CHOOSER(chooser),
mcrop_data_filter, op1, NULL);
- g_signal_connect(chooser, "changed",
- G_CALLBACK(mcrop_data_cb), op2);
+ g_signal_connect(chooser, "changed", G_CALLBACK(mcrop_data_cb), op2);
mcrop_data_cb(GWY_DATA_CHOOSER(chooser), op2);
- gwy_table_attach_hscale(table, 1, _("_Select second argument:"), NULL,
- GTK_OBJECT(chooser), GWY_HSCALE_WIDGET);
+ gwy_table_attach_adjbar(table, 0, _("_Select second argument:"), NULL,
+ GTK_OBJECT(chooser), GWY_HSCALE_WIDGET_NO_EXPAND);
gtk_widget_show_all(dialog);
diff --git a/modules/process/measure_lattice.c b/modules/process/measure_lattice.c
index a25dbdb..ce34906 100644
--- a/modules/process/measure_lattice.c
+++ b/modules/process/measure_lattice.c
@@ -1,6 +1,6 @@
/*
- * @(#) $Id: measure_lattice.c 19044 2016-10-08 19:10:46Z yeti-dn $
- * Copyright (C) 2015 David Necas (Yeti).
+ * @(#) $Id: measure_lattice.c 20136 2017-08-02 11:21:20Z yeti-dn $
+ * Copyright (C) 2015-2017 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
* This program is free software; you can redistribute it and/or modify
@@ -31,6 +31,7 @@
#include <libprocess/correct.h>
#include <libprocess/filters.h>
#include <libprocess/grains.h>
+#include <libprocess/elliptic.h>
#include <libprocess/inttrans.h>
#include <libgwydgets/gwydataview.h>
#include <libgwydgets/gwylayer-basic.h>
@@ -66,19 +67,11 @@ typedef enum {
} ZoomType;
typedef struct {
- gdouble max;
- gdouble x;
- gdouble y;
- gdouble d;
- gdouble q;
- guint basecount;
-} MaximumInfo;
-
-typedef struct {
ImageMode image_mode;
SelectionMode selection_mode;
ZoomType zoom_acf;
ZoomType zoom_psdf;
+ gboolean fix_hacf;
/* Cache */
GType lattice_layer;
GType point_layer;
@@ -98,6 +91,7 @@ typedef struct {
GSList *zoom;
GSList *image_mode;
GSList *selection_mode;
+ GtkWidget *fix_hacf;
GwySIValueFormat *vf;
GwySIValueFormat *vfphi;
GtkWidget *a1_x;
@@ -128,8 +122,8 @@ static void lat_meas_copy (LatMeasControls *controls);
static void lat_meas_save (LatMeasControls *controls);
static gchar* format_report (LatMeasControls *controls);
static void do_estimate (LatMeasControls *controls);
+static void refine (LatMeasControls *controls);
static void init_selection (LatMeasControls *controls);
-static gboolean smart_init_selection (LatMeasControls *controls);
static void set_selection (LatMeasControls *controls,
const gdouble *xy);
static gboolean get_selection (LatMeasControls *controls,
@@ -140,18 +134,14 @@ static void selection_mode_changed(GtkToggleButton *button,
LatMeasControls *controls);
static void zoom_changed (GtkRadioButton *button,
LatMeasControls *controls);
+static void fix_hacf_changed (LatMeasControls *controls,
+ GtkToggleButton *toggle);
static void calculate_acf_full (LatMeasControls *controls,
GwyDataField *dfield);
static void calculate_psdf_full (LatMeasControls *controls,
GwyDataField *dfield);
static void calculate_zoomed_field(LatMeasControls *controls);
-static void refine (LatMeasControls *controls);
static void selection_changed (LatMeasControls *controls);
-static void find_maximum (GwyDataField *dfield,
- gdouble *x,
- gdouble *y,
- gint xwinsize,
- gint ywinsize);
static gboolean transform_selection (gdouble *xy);
static void invert_matrix (gdouble *dest,
const gdouble *src);
@@ -164,6 +154,7 @@ static void sanitize_args (LatMeasArgs *args);
static const LatMeasArgs lat_meas_defaults = {
IMAGE_DATA, SELECTION_LATTICE, ZOOM_1, ZOOM_1,
+ FALSE,
/* Cache */
0, 0, 0, 0,
};
@@ -173,12 +164,12 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Measures parameters of two-dimensional lattices."),
"Yeti <yeti at gwyddion.net>",
- "1.0",
+ "2.0",
"David Nečas (Yeti)",
"2015",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, measure_lattice)
static gboolean
module_register(void)
@@ -236,7 +227,6 @@ lat_meas_dialog(LatMeasArgs *args,
GwyPixmapLayer *layer;
GwyVectorLayer *vlayer;
GwySelection *selection;
- GwySIUnit *unitphi;
gchar selkey[40];
gwy_clear(&controls, 1);
@@ -311,7 +301,7 @@ lat_meas_dialog(LatMeasArgs *args,
gtk_container_add(GTK_CONTAINER(alignment), controls.view);
- table = GTK_TABLE(gtk_table_new(10, 4, FALSE));
+ table = GTK_TABLE(gtk_table_new(11, 4, FALSE));
gtk_table_set_row_spacings(table, 2);
gtk_table_set_col_spacings(table, 6);
gtk_container_set_border_width(GTK_CONTAINER(table), 4);
@@ -335,7 +325,7 @@ lat_meas_dialog(LatMeasArgs *args,
hbox2 = gtk_hbox_new(FALSE, 8);
gtk_table_attach(GTK_TABLE(table), hbox2, 0, 4, row, row+1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ GTK_FILL, 0, 0, 0);
label = controls.zoom_label = gtk_label_new(_("Zoom:"));
gtk_box_pack_start(GTK_BOX(hbox2), label, FALSE, FALSE, 0);
@@ -352,6 +342,16 @@ lat_meas_dialog(LatMeasArgs *args,
}
row++;
+ controls.fix_hacf
+ = gtk_check_button_new_with_mnemonic(_("Interpolate _horizontal ACF"));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.fix_hacf),
+ args->fix_hacf);
+ gtk_table_attach(table, controls.fix_hacf,
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
+ g_signal_connect_swapped(controls.fix_hacf, "toggled",
+ G_CALLBACK(fix_hacf_changed), &controls);
+ row++;
+
gtk_table_set_row_spacing(table, row-1, 8);
label = gtk_label_new(_("Show lattice as:"));
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
@@ -378,16 +378,10 @@ lat_meas_dialog(LatMeasArgs *args,
GWY_SI_UNIT_FORMAT_MARKUP, NULL);
controls.vf->precision += 2;
- unitphi = gwy_si_unit_new("deg");
- controls.vfphi
- = gwy_si_unit_get_format_with_resolution(unitphi,
- GWY_SI_UNIT_FORMAT_MARKUP,
- 180.0, 0.01, NULL);
- g_object_unref(unitphi);
+ controls.vfphi = gwy_si_unit_value_format_new(G_PI/180.0, 2, _("deg"));
lattable = make_lattice_table(&controls);
- gtk_table_attach(table, lattable,
- 0, 4, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ gtk_table_attach(table, lattable, 0, 4, row, row+1, GTK_FILL, 0, 0, 0);
row++;
hbox = gtk_hbox_new(FALSE, 0);
@@ -407,9 +401,8 @@ lat_meas_dialog(LatMeasArgs *args,
if (gwy_selection_get_object(selection, 0, controls.xy))
set_selection(&controls, controls.xy);
}
- else {
+ else
do_estimate(&controls);
- }
gwy_radio_buttons_set_current(controls.selection_mode, selection_mode);
gwy_radio_buttons_set_current(controls.image_mode, image_mode);
@@ -646,7 +639,7 @@ format_report(LatMeasControls *controls)
vf->precision, h/vf->magnitude, vf->units);
g_ptr_array_add(report, g_strdup(str->str));
- phi = 180.0/G_PI*atan2(-xy[2*i + 1], xy[2*i + 0]);
+ phi = atan2(-xy[2*i + 1], xy[2*i + 0]);
g_string_printf(str, _("Angle %d:"), i+1);
g_ptr_array_add(report, g_strdup(str->str));
g_string_printf(str, "%.*f %s",
@@ -660,7 +653,6 @@ format_report(LatMeasControls *controls)
phi = atan2(-xy[3], xy[2]) - atan2(-xy[1], xy[0]);
if (phi < 0.0)
phi += 2.0*G_PI;
- phi *= 180.0/G_PI;
g_string_assign(str, _("Angle:"));
g_ptr_array_add(report, g_strdup(str->str));
@@ -697,24 +689,53 @@ format_report(LatMeasControls *controls)
return g_string_free(str, FALSE);
}
+static GwyDataField*
+get_full_dfield_for_mode(LatMeasControls *controls)
+{
+ LatMeasArgs *args = controls->args;
+ GwyDataField *dfield;
+ GwyDataLine *hacf;
+ const gchar *key;
+
+ if (args->image_mode == IMAGE_PSDF)
+ key = "/3/data/full";
+ else
+ key = "/2/data/full";
+
+ dfield = GWY_DATA_FIELD(gwy_container_get_object_by_name(controls->mydata,
+ key));
+
+ if (args->image_mode == IMAGE_ACF) {
+ if (args->fix_hacf)
+ key = "/2/hacf-fixed";
+ else
+ key = "/2/hacf";
+
+ hacf = GWY_DATA_LINE(gwy_container_get_object_by_name(controls->mydata,
+ key));
+ gwy_data_field_set_row(dfield, hacf, gwy_data_field_get_yres(dfield)/2);
+ }
+
+ return dfield;
+}
+
static void
do_estimate(LatMeasControls *controls)
{
- if (smart_init_selection(controls)) {
- GwyDataField *dfield;
- gdouble dh;
+ GwyDataField *dfield;
+ gboolean ok;
- refine(controls);
- /* Check if refine() did not produce two of the same vector which can
- * sometime happen with very skewed patterns. */
- dfield = gwy_container_get_object_by_name(controls->mydata, "/0/data");
- dh = hypot(gwy_data_field_get_xmeasure(dfield),
- gwy_data_field_get_ymeasure(dfield));
- if (hypot(controls->xy[0] - controls->xy[2],
- controls->xy[1] - controls->xy[3]) > 1.8*dh)
- return;
- }
- init_selection(controls);
+ dfield = get_full_dfield_for_mode(controls);
+ gwy_clear(controls->xy, 4);
+ if (controls->args->image_mode == IMAGE_PSDF)
+ ok = gwy_data_field_measure_lattice_psdf(dfield, controls->xy);
+ else
+ ok = gwy_data_field_measure_lattice_acf(dfield, controls->xy);
+
+ if (ok)
+ set_selection(controls, controls->xy);
+ else
+ init_selection(controls);
}
static void
@@ -730,207 +751,6 @@ init_selection(LatMeasControls *controls)
set_selection(controls, controls->xy);
}
-static gint
-compare_maxima(gconstpointer pa, gconstpointer pb)
-{
- const MaximumInfo *a = (const MaximumInfo*)pa;
- const MaximumInfo *b = (const MaximumInfo*)pb;
-
- if (a->basecount*a->q > b->basecount*b->q)
- return -1;
- if (a->basecount*a->q < b->basecount*b->q)
- return 1;
-
- if (a->q > b->q)
- return -1;
- if (a->q < b->q)
- return 1;
-
- /* Ensure comparison stability. This should play no role in significance
- * sorting. */
- if (a->y < b->y)
- return -1;
- if (a->y > b->y)
- return 1;
- if (a->x < b->x)
- return -1;
- if (a->x > b->x)
- return 1;
- return 0;
-}
-
-/* Intended for ACF (or PSDF, but that requires transformation), not the
- * original data. */
-static gboolean
-smart_init_selection(LatMeasControls *controls)
-{
- enum { nquantities = 3 };
- GwyGrainQuantity quantities[nquantities] = {
- GWY_GRAIN_VALUE_MAXIMUM,
- GWY_GRAIN_VALUE_CENTER_X,
- GWY_GRAIN_VALUE_CENTER_Y,
- };
- GwyDataField *dfield, *smoothed, *mask;
- gdouble *values[nquantities];
- MaximumInfo *maxima;
- gint *grains;
- guint i, j, k, ngrains;
- gboolean ok = FALSE;
- gdouble dh, cphi, sphi;
-
- dfield = gwy_container_get_object_by_name(controls->mydata, "/2/data/full");
- smoothed = gwy_data_field_duplicate(dfield);
- mask = gwy_data_field_new_alike(dfield, FALSE);
-
- /* Mark local maxima. */
- gwy_data_field_filter_gaussian(smoothed, 0.5);
- gwy_data_field_mark_extrema(smoothed, mask, TRUE);
- grains = g_new0(gint, dfield->xres*dfield->yres);
- ngrains = gwy_data_field_number_grains(mask, grains);
- GWY_OBJECT_UNREF(mask);
-
- /* Find the position and value of each. */
- for (i = 0; i < nquantities; i++)
- values[i] = g_new(gdouble, ngrains+1);
-
- gwy_data_field_grains_get_quantities(smoothed, values,
- quantities, nquantities,
- ngrains, grains);
- GWY_OBJECT_UNREF(smoothed);
-
- maxima = g_new(MaximumInfo, ngrains);
- dh = hypot(gwy_data_field_get_xmeasure(dfield),
- gwy_data_field_get_ymeasure(dfield));
- for (i = 0; i < ngrains; i++) {
- maxima[i].max = values[0][i+1];
- maxima[i].x = values[1][i+1];
- maxima[i].y = values[2][i+1];
- maxima[i].d = hypot(maxima[i].x, maxima[i].y);
- maxima[i].q = maxima[i].max/(maxima[i].d + 5.0*dh);
- maxima[i].basecount = 0;
- }
- for (i = 0; i < nquantities; i++)
- g_free(values[i]);
-
- /* Remove the central peak, i.e. anything too close to the centre */
- i = j = 0;
- while (i < ngrains) {
- gdouble d = maxima[i].d;
- maxima[j] = maxima[i];
- if (d >= 1.8*dh)
- j++;
- i++;
- }
- ngrains = j;
-
- if (ngrains < 10) {
- gwy_debug("Too few maxima (after centre removal): %d.", ngrains);
- g_free(maxima);
- return FALSE;
- }
-
- qsort(maxima, ngrains, sizeof(MaximumInfo), compare_maxima);
-#ifdef DEBUG
- for (i = 0; i < ngrains; i++) {
- gwy_debug("[%u] (%g, %g) %g :: %g",
- i, maxima[i].x, maxima[i].y, maxima[i].max, maxima[i].q);
- }
-#endif
-
- /* Remove anything with direction opposite to the first vector. But we
- * must carefully accept ortohogonal vectors. This is just a half-plane
- * selection though it influences the preferred vectors, of course. */
- gwy_debug("Base-plane selector [%u] (%g, %g) %g",
- 0, maxima[0].x, maxima[0].y, maxima[0].max);
- cphi = maxima[0].x/maxima[0].d;
- sphi = maxima[0].y/maxima[0].d;
- i = j = 1;
- while (i < ngrains) {
- gdouble x = cphi*maxima[i].x + sphi*maxima[i].y,
- y = cphi*maxima[i].y - sphi*maxima[i].x;
- maxima[j] = maxima[i];
- if (x > 1e-9*dh || (x > -1e-9*dh && y > 1e-9*dh))
- j++;
- i++;
- }
- ngrains = j;
-
- if (ngrains < 10) {
- gwy_debug("Too few maxima (after half-plane removal): %d.", ngrains);
- g_free(maxima);
- return FALSE;
- }
-
- /* Locate the most important maxima. */
- ngrains = MIN(ngrains, 12);
- for (i = 0; i < ngrains; i++) {
- for (j = i+1; j < ngrains; j++) {
- gdouble x = maxima[i].x + maxima[j].x;
- gdouble y = maxima[i].y + maxima[j].y;
- for (k = 0; k < ngrains; k++) {
- if (fabs(maxima[k].x - x) < dh && fabs(maxima[k].y - y) < dh) {
- maxima[i].basecount++;
- maxima[j].basecount++;
- }
- }
- }
- }
- qsort(maxima, ngrains, sizeof(MaximumInfo), compare_maxima);
-#ifdef DEBUG
- for (i = 0; i < ngrains; i++) {
- gwy_debug("[%u] (%g, %g) %g #%u",
- i, maxima[i].x, maxima[i].y, maxima[i].max,
- maxima[i].basecount);
- }
-#endif
-
- if (maxima[1].basecount >= 3) {
- gdouble xy[4];
-
- xy[0] = maxima[0].x;
- xy[1] = maxima[0].y;
- dh = maxima[0].d;
- /* Exclude maxima that appear to be collinear with the first one,
- * otherwise take the next one with the highest basecount. */
- for (i = 1; i < ngrains; i++) {
- for (k = 2; k < 5; k++) {
- if (fabs(maxima[i].x/k - xy[0]) < 0.2*dh
- && fabs(maxima[i].y/k - xy[1]) < 0.2*dh) {
- gwy_debug("Excluding #%u for collinearity (%u).", i, k);
- break;
- }
- }
- if (k == 5) {
- xy[2] = maxima[i].x;
- xy[3] = maxima[i].y;
- ok = TRUE;
- break;
- }
- }
-
- if (ok) {
- gdouble phi;
-
- /* Try to choose some sensible vectors among the equivalent
- * choices. */
- for (i = 0; i < 4; i++)
- xy[i] = -xy[i];
-
- phi = fmod(atan2(xy[1], xy[0]) + 4.0*G_PI - atan2(xy[3], xy[2]),
- 2.0*G_PI);
- if (phi > G_PI) {
- GWY_SWAP(gdouble, xy[0], xy[2]);
- GWY_SWAP(gdouble, xy[1], xy[3]);
- }
- set_selection(controls, xy);
- }
- }
-
- g_free(maxima);
-
- return ok;
-}
-
static void
set_selection(LatMeasControls *controls, const gdouble *xy)
{
@@ -1060,7 +880,7 @@ image_mode_changed(G_GNUC_UNUSED GtkToggleButton *button,
if (mode == IMAGE_ACF)
gwy_container_set_enum_by_name(controls->mydata,
"/1/base/range-type",
- GWY_LAYER_BASIC_RANGE_FULL);
+ GWY_LAYER_BASIC_RANGE_AUTO);
else
gwy_container_set_enum_by_name(controls->mydata,
"/1/base/range-type",
@@ -1163,22 +983,55 @@ zoom_changed(GtkRadioButton *button,
}
static void
+fix_hacf_changed(LatMeasControls *controls,
+ GtkToggleButton *toggle)
+{
+ LatMeasArgs *args = controls->args;
+
+ args->fix_hacf = gtk_toggle_button_get_active(toggle);
+ if (args->image_mode == IMAGE_ACF)
+ calculate_zoomed_field(controls);
+}
+
+static void
calculate_acf_full(LatMeasControls *controls,
GwyDataField *dfield)
{
- GwyDataField *acf;
+ GwyDataField *acf, *mid, *mask;
+ GwyDataLine *hacf;
guint acfwidth, acfheight;
dfield = gwy_data_field_duplicate(dfield);
gwy_data_field_add(dfield, -gwy_data_field_get_avg(dfield));
acf = gwy_data_field_new_alike(dfield, FALSE);
- acfwidth = MIN(MAX(3*dfield->xres/8, 64), dfield->xres/2);
- acfheight = MIN(MAX(3*dfield->yres/8, 64), dfield->yres/2);
+ acfwidth = dfield->xres/2;
+ acfheight = dfield->yres/2;
gwy_data_field_area_2dacf(dfield, acf, 0, 0, dfield->xres, dfield->yres,
acfwidth, acfheight);
g_object_unref(dfield);
gwy_container_set_object_by_name(controls->mydata, "/2/data/full", acf);
g_object_unref(acf);
+
+ /* Remember the middle row as we may replace it. */
+ acfheight = gwy_data_field_get_yres(acf);
+ acfwidth = gwy_data_field_get_xres(acf);
+ hacf = gwy_data_line_new(acfwidth, 1.0, FALSE);
+ gwy_data_field_get_row(acf, hacf, acfheight/2);
+ gwy_container_set_object_by_name(controls->mydata, "/2/hacf", hacf);
+ g_object_unref(hacf);
+
+ /* Remember interpolated middle row. */
+ mid = gwy_data_field_area_extract(acf, 0, acfheight/2-1, acfwidth, 3);
+ mask = gwy_data_field_new(acfwidth, 3, acfwidth, 3, TRUE);
+ gwy_data_field_area_fill(mask, 0, 1, acfwidth, 1, 1.0);
+ gwy_data_field_set_val(mask, acfwidth/2, 1, 0.0);
+ gwy_data_field_laplace_solve(mid, mask, -1, 1.0);
+ hacf = gwy_data_line_new(acfwidth, 1.0, FALSE);
+ gwy_data_field_get_row(mid, hacf, 1);
+ gwy_container_set_object_by_name(controls->mydata, "/2/hacf-fixed", hacf);
+ g_object_unref(hacf);
+ g_object_unref(mask);
+ g_object_unref(mid);
}
static gint
@@ -1229,29 +1082,25 @@ calculate_zoomed_field(LatMeasControls *controls)
LatMeasArgs *args = controls->args;
ZoomType zoom;
GwyDataField *zoomed;
- const gchar *key = NULL;
+ guint xres, yres, width, height;
- if (args->image_mode == IMAGE_ACF) {
+ if (args->image_mode == IMAGE_ACF)
zoom = args->zoom_acf;
- key = "/2/data/full";
- }
- else if (args->image_mode == IMAGE_PSDF) {
+ else if (args->image_mode == IMAGE_PSDF)
zoom = args->zoom_psdf;
- key = "/3/data/full";
- }
else
return;
- zoomed = GWY_DATA_FIELD(gwy_container_get_object_by_name(controls->mydata,
- key));
+ zoomed = get_full_dfield_for_mode(controls);
+ xres = gwy_data_field_get_xres(zoomed);
+ yres = gwy_data_field_get_yres(zoomed);
+
if (zoom == ZOOM_1) {
g_object_ref(zoomed);
}
else {
- guint xres = zoomed->xres;
- guint yres = zoomed->yres;
- guint width = (xres/zoom) | 1;
- guint height = (yres/zoom) | 1;
+ width = (xres/zoom) | 1;
+ height = (yres/zoom) | 1;
if (width < 17)
width = MAX(width, MIN(17, xres));
@@ -1274,45 +1123,20 @@ static void
refine(LatMeasControls *controls)
{
GwyDataField *dfield;
- gint xwinsize, ywinsize;
- const gchar *key = NULL;
gdouble xy[4];
+ gboolean ok;
if (!get_selection(controls, xy))
return;
- if (controls->args->image_mode == IMAGE_PSDF) {
- /* For refine we need selection coordinates for the visible image
- * which is PSDF, not the real-space lattice. */
- transform_selection(xy);
- key = "/3/data/full";
- }
- else
- key = "/2/data/full";
-
- dfield = GWY_DATA_FIELD(gwy_container_get_object_by_name(controls->mydata,
- key));
- xwinsize = (gint)(0.32*MAX(fabs(xy[0]), fabs(xy[2]))
- /gwy_data_field_get_xmeasure(dfield) + 0.5);
- ywinsize = (gint)(0.32*MAX(fabs(xy[1]), fabs(xy[3]))
- /gwy_data_field_get_ymeasure(dfield) + 0.5);
- gwy_debug("window size: %dx%d", xwinsize, ywinsize);
-
- xy[0] = (xy[0] - dfield->xoff)/gwy_data_field_get_xmeasure(dfield);
- xy[1] = (xy[1] - dfield->yoff)/gwy_data_field_get_ymeasure(dfield);
- xy[2] = (xy[2] - dfield->xoff)/gwy_data_field_get_xmeasure(dfield);
- xy[3] = (xy[3] - dfield->yoff)/gwy_data_field_get_ymeasure(dfield);
- find_maximum(dfield, xy + 0, xy + 1, xwinsize, ywinsize);
- find_maximum(dfield, xy + 2, xy + 3, xwinsize, ywinsize);
- xy[0] = (xy[0] + 0.5)*gwy_data_field_get_xmeasure(dfield) + dfield->xoff;
- xy[1] = (xy[1] + 0.5)*gwy_data_field_get_ymeasure(dfield) + dfield->yoff;
- xy[2] = (xy[2] + 0.5)*gwy_data_field_get_xmeasure(dfield) + dfield->xoff;
- xy[3] = (xy[3] + 0.5)*gwy_data_field_get_ymeasure(dfield) + dfield->yoff;
-
+ dfield = get_full_dfield_for_mode(controls);
if (controls->args->image_mode == IMAGE_PSDF)
- transform_selection(xy);
+ ok = gwy_data_field_measure_lattice_psdf(dfield, xy);
+ else
+ ok = gwy_data_field_measure_lattice_acf(dfield, xy);
- set_selection(controls, xy);
+ if (ok)
+ set_selection(controls, xy);
}
static void
@@ -1339,7 +1163,7 @@ selection_changed(LatMeasControls *controls)
vf = controls->vfphi;
phi1 = atan2(-xy[1], xy[0]);
- g_string_printf(str, "%.*f", vf->precision, 180.0/G_PI*phi1/vf->magnitude);
+ g_string_printf(str, "%.*f", vf->precision, phi1/vf->magnitude);
gtk_label_set_text(GTK_LABEL(controls->a1_phi), str->str);
vf = controls->vf;
@@ -1355,65 +1179,18 @@ selection_changed(LatMeasControls *controls)
vf = controls->vfphi;
phi2 = atan2(-xy[3], xy[2]);
- g_string_printf(str, "%.*f", vf->precision, 180.0/G_PI*phi2/vf->magnitude);
+ g_string_printf(str, "%.*f", vf->precision, phi2/vf->magnitude);
gtk_label_set_text(GTK_LABEL(controls->a2_phi), str->str);
phi = phi2 - phi1;
if (phi < 0.0)
phi += 2.0*G_PI;
- g_string_printf(str, "%.*f", vf->precision, 180.0/G_PI*phi/vf->magnitude);
+ g_string_printf(str, "%.*f", vf->precision, phi/vf->magnitude);
gtk_label_set_text(GTK_LABEL(controls->phi), str->str);
g_string_free(str, TRUE);
}
-static void
-find_maximum(GwyDataField *dfield,
- gdouble *x, gdouble *y,
- gint xwinsize, gint ywinsize)
-{
- gint xj = (gint)*x, yi = (gint)*y;
- gdouble v, max = -G_MAXDOUBLE;
- gint mi = yi, mj = xj, i, j;
- gint xres = dfield->xres, yres = dfield->yres;
- const gdouble *d = dfield->data;
- gdouble z[9];
-
- gwy_debug("searching from: %g, %g", *x, *y);
- for (i = -ywinsize; i <= ywinsize; i++) {
- if (i + yi < 0 || i + yi > yres-1)
- continue;
- for (j = -xwinsize; j <= xwinsize; j++) {
- if (j + xj < 0 || j + xj > xres-1)
- continue;
-
- v = d[(i + yi)*xres + (j + xj)];
- if (v > max) {
- max = v;
- mi = i + yi;
- mj = j + xj;
- }
- }
- }
- gwy_debug("pixel maximum at: %d, %d", *mj, *mi);
-
- /* Don't try any sub-pixel refinement if it's on the edge. */
- if (mi >= 1 && mi+1 <= yres-1 && mj >= 1 && mj+1 <= xres-1) {
- for (i = -1; i <= 1; i++) {
- for (j = -1; j <= 1; j++)
- z[3*(i + 1) + (j + 1)] = d[(mi + i)*xres + (mj + j)];
- }
- gwy_math_refine_maximum(z, x, y);
- gwy_debug("refinement by (%g, %g)", *x, *y);
- }
- else {
- *x = *y = 0.0;
- }
-
- *x += mj;
- *y += mi;
-}
-
static gboolean
transform_selection(gdouble *xy)
{
@@ -1454,6 +1231,7 @@ matrix_det(const gdouble *m)
return m[0]*m[3] - m[1]*m[2];
}
+static const gchar fix_hacf_key[] = "/module/measure_lattice/fix_hacf";
static const gchar image_mode_key[] = "/module/measure_lattice/image_mode";
static const gchar selection_mode_key[] = "/module/measure_lattice/selection_mode";
static const gchar zoom_acf_key[] = "/module/measure_lattice/zoom_acf";
@@ -1464,6 +1242,7 @@ sanitize_args(LatMeasArgs *args)
{
args->selection_mode = MIN(args->selection_mode, SELECTION_NMODES-1);
args->image_mode = MIN(args->image_mode, IMAGE_NMODES-1);
+ args->fix_hacf = !!args->fix_hacf;
if (args->zoom_acf != ZOOM_1
&& args->zoom_acf != ZOOM_4
&& args->zoom_acf != ZOOM_16)
@@ -1485,6 +1264,7 @@ load_args(GwyContainer *container, LatMeasArgs *args)
&args->selection_mode);
gwy_container_gis_enum_by_name(container, zoom_acf_key, &args->zoom_acf);
gwy_container_gis_enum_by_name(container, zoom_psdf_key, &args->zoom_psdf);
+ gwy_container_gis_boolean_by_name(container, fix_hacf_key, &args->fix_hacf);
sanitize_args(args);
}
@@ -1497,6 +1277,7 @@ save_args(GwyContainer *container, LatMeasArgs *args)
args->selection_mode);
gwy_container_set_enum_by_name(container, zoom_acf_key, args->zoom_acf);
gwy_container_set_enum_by_name(container, zoom_psdf_key, args->zoom_psdf);
+ gwy_container_set_boolean_by_name(container, fix_hacf_key, args->fix_hacf);
}
/* vim: set cin et ts=4 sw=4 cino=>1s,e0,n0,f0,{0,}0,^0,\:1s,=0,g1s,h0,t0,+1s,c3,(0,u0 : */
diff --git a/modules/process/median-bg.c b/modules/process/median-bg.c
index 0b7c1f8..f93941d 100644
--- a/modules/process/median-bg.c
+++ b/modules/process/median-bg.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: median-bg.c 19044 2016-10-08 19:10:46Z yeti-dn $
+ * @(#) $Id: median-bg.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2004 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -82,12 +82,12 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Subtracts background using a rank-based algorithm."),
"Yeti <yeti at gwyddion.net>",
- "1.5",
+ "1.6",
"David Nečas (Yeti) & Petr Klapetek",
"2004",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, median_bg)
static gboolean
module_register(void)
@@ -184,7 +184,7 @@ median_dialog(MedianBgArgs *args)
gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK);
gwy_help_add_to_proc_dialog(GTK_DIALOG(dialog), GWY_HELP_DEFAULT);
- table = gtk_table_new(5, 4, FALSE);
+ table = gtk_table_new(5, 3, FALSE);
gtk_table_set_row_spacings(GTK_TABLE(table), 2);
gtk_table_set_col_spacings(GTK_TABLE(table), 6);
gtk_container_set_border_width(GTK_CONTAINER(table), 4);
@@ -196,7 +196,7 @@ median_dialog(MedianBgArgs *args)
q = args->pixelsize/args->valform->magnitude;
gwy_debug("q = %f", q);
controls.radius = gtk_adjustment_new(q*args->size, q, 1024*q, q, 10*q, 0);
- spin = gwy_table_attach_hscale(table, row, _("Real _radius:"),
+ spin = gwy_table_attach_adjbar(table, row, _("Real _radius:"),
args->valform->units,
controls.radius, GWY_HSCALE_SQRT);
gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), args->valform->precision);
@@ -206,7 +206,7 @@ median_dialog(MedianBgArgs *args)
row++;
controls.size = gtk_adjustment_new(args->size, 1, 1024, 1, 10, 0);
- spin = gwy_table_attach_hscale(table, row, _("_Pixel radius:"), "px",
+ spin = gwy_table_attach_adjbar(table, row, _("_Pixel radius:"), _("px"),
controls.size, GWY_HSCALE_SQRT);
g_object_set_data(G_OBJECT(controls.size), "controls", &controls);
g_signal_connect(controls.size, "value-changed",
@@ -216,7 +216,7 @@ median_dialog(MedianBgArgs *args)
controls.do_extract
= gtk_check_button_new_with_mnemonic(_("E_xtract background"));
gtk_table_attach(GTK_TABLE(table), controls.do_extract,
- 0, 4, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.do_extract),
args->do_extract);
g_signal_connect(controls.do_extract, "toggled",
diff --git a/modules/process/merge.c b/modules/process/merge.c
index 9f38565..d167337 100644
--- a/modules/process/merge.c
+++ b/modules/process/merge.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: merge.c 19071 2016-10-14 09:02:41Z yeti-dn $
+ * @(#) $Id: merge.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2004,2014-2016 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -219,7 +219,7 @@ static GwyModuleInfo module_info = {
"2006",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, merge)
static gboolean
module_register(void)
@@ -282,7 +282,7 @@ merge_dialog(MergeArgs *args)
gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK);
gwy_help_add_to_proc_dialog(GTK_DIALOG(dialog), GWY_HELP_DEFAULT);
- table = gtk_table_new(6, 4, FALSE);
+ table = gtk_table_new(6, 3, FALSE);
gtk_table_set_row_spacings(GTK_TABLE(table), 2);
gtk_table_set_col_spacings(GTK_TABLE(table), 6);
gtk_container_set_border_width(GTK_CONTAINER(table), 4);
@@ -299,8 +299,8 @@ merge_dialog(MergeArgs *args)
g_signal_connect_swapped(chooser, "changed",
G_CALLBACK(merge_data_changed), &controls);
merge_data_changed(&controls, chooser);
- gwy_table_attach_hscale(table, row, _("_Merge with:"), NULL,
- GTK_OBJECT(chooser), GWY_HSCALE_WIDGET);
+ gwy_table_attach_adjbar(table, row, _("_Merge with:"), NULL,
+ GTK_OBJECT(chooser), GWY_HSCALE_WIDGET_NO_EXPAND);
row++;
/* Parameters */
@@ -308,15 +308,15 @@ merge_dialog(MergeArgs *args)
G_CALLBACK(merge_direction_changed),
&controls,
args->direction, TRUE);
- gwy_table_attach_hscale(table, row, _("_Put second operand:"), NULL,
- GTK_OBJECT(combo), GWY_HSCALE_WIDGET);
+ gwy_table_attach_adjbar(table, row, _("_Put second operand:"), NULL,
+ GTK_OBJECT(combo), GWY_HSCALE_WIDGET_NO_EXPAND);
row++;
combo = gwy_enum_combo_box_new(modes, G_N_ELEMENTS(modes),
G_CALLBACK(merge_mode_changed), &controls,
args->mode, TRUE);
- gwy_table_attach_hscale(table, row, _("_Align second operand:"), NULL,
- GTK_OBJECT(combo), GWY_HSCALE_WIDGET);
+ gwy_table_attach_adjbar(table, row, _("_Align second operand:"), NULL,
+ GTK_OBJECT(combo), GWY_HSCALE_WIDGET_NO_EXPAND);
row++;
combo = gwy_enum_combo_box_new(boundaries, G_N_ELEMENTS(boundaries),
@@ -324,8 +324,8 @@ merge_dialog(MergeArgs *args)
&controls,
args->boundary, TRUE);
controls.boundary = combo;
- gwy_table_attach_hscale(table, row, _("_Boundary treatment:"), NULL,
- GTK_OBJECT(combo), GWY_HSCALE_WIDGET);
+ gwy_table_attach_adjbar(table, row, _("_Boundary treatment:"), NULL,
+ GTK_OBJECT(combo), GWY_HSCALE_WIDGET_NO_EXPAND);
row++;
check = gtk_check_button_new_with_mnemonic(_("Crop result to _avoid "
@@ -334,7 +334,7 @@ merge_dialog(MergeArgs *args)
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check),
args->crop_to_rectangle);
gtk_table_attach(GTK_TABLE(table), check,
- 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect_swapped(check, "toggled",
G_CALLBACK(crop_to_rectangle_changed), &controls);
row++;
@@ -343,7 +343,7 @@ merge_dialog(MergeArgs *args)
controls.create_mask = check;
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check), args->create_mask);
gtk_table_attach(GTK_TABLE(table), check,
- 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect_swapped(check, "toggled",
G_CALLBACK(create_mask_changed), &controls);
row++;
diff --git a/modules/process/mfm_current.c b/modules/process/mfm_current.c
new file mode 100644
index 0000000..58f71d9
--- /dev/null
+++ b/modules/process/mfm_current.c
@@ -0,0 +1,923 @@
+/*
+ * @(#) $Id: mfm_current.c 19948 2017-06-22 14:05:41Z yeti-dn $
+ * Copyright (C) 2017 David Necas (Yeti), Petr Klapetek.
+ * E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "config.h"
+#include <string.h>
+#include <gtk/gtk.h>
+#include <libgwyddion/gwymacros.h>
+#include <libgwyddion/gwymath.h>
+#include <libgwyddion/gwyrandgenset.h>
+#include <libprocess/stats.h>
+#include <libprocess/arithmetic.h>
+#include <libgwydgets/gwyradiobuttons.h>
+#include <libgwydgets/gwystock.h>
+#include <libgwymodule/gwymodule-process.h>
+#include <app/gwyapp.h>
+#include "preview.h"
+#include "dimensions.h"
+#include "mfmops.h"
+
+#define MFM_CURRENT_RUN_MODES (GWY_RUN_IMMEDIATE | GWY_RUN_INTERACTIVE)
+
+enum {
+ PAGE_DIMENSIONS = 0,
+ PAGE_GENERATOR = 1,
+ PAGE_NPAGES
+};
+
+typedef enum {
+ GWY_MFM_CURRENT_OUTPUT_HX = 0,
+ GWY_MFM_CURRENT_OUTPUT_HZ = 1,
+ GWY_MFM_CURRENT_OUTPUT_FORCE = 2,
+ GWY_MFM_CURRENT_OUTPUT_FORCE_DX = 3,
+ GWY_MFM_CURRENT_OUTPUT_FORCE_DDX = 4
+} GwyMfmCurrentOutputType;
+
+typedef struct {
+ gint active_page;
+ gboolean update;
+ GwyMfmCurrentOutputType out;
+ GwyMfmProbeType probe;
+ gdouble height;
+ gdouble current;
+ gdouble width;
+ gdouble position;
+ gdouble mtip;
+ gdouble bx;
+ gdouble by;
+ gdouble length;
+
+} MfmCurrentArgs;
+
+typedef struct {
+ MfmCurrentArgs *args;
+ GwyDimensions *dims;
+ GtkWidget *dialog;
+ GtkWidget *view;
+ GtkWidget *update;
+ GtkWidget *update_now;
+ GtkWidget *out;
+ GtkWidget *probe;
+ GtkObject *height;
+ GtkObject *current;
+ GtkObject *mtip;
+ GtkObject *bx;
+ GtkObject *by;
+ GtkObject *length;
+ GtkObject *width;
+ GtkObject *position;
+ GtkObject *size_b;
+ GtkObject *size_c;
+ GtkTable *table;
+ GwyContainer *mydata;
+ GwyDataField *surface;
+ gdouble pxsize;
+ gdouble zscale;
+ gboolean in_init;
+ gulong sid;
+} MfmCurrentControls;
+
+static gboolean module_register (void);
+static void mfm_current (GwyContainer *data,
+ GwyRunType run);
+static void run_noninteractive (MfmCurrentArgs *args,
+ const GwyDimensionArgs *dimsargs,
+ GwyContainer *data,
+ GwyDataField *dfield,
+ gint oldid,
+ GQuark quark);
+static gboolean mfm_current_dialog (MfmCurrentArgs *args,
+ GwyDimensionArgs *dimsargs,
+ GwyContainer *data,
+ GwyDataField *dfield,
+ gint id);
+static void update_controls (MfmCurrentControls *controls,
+ MfmCurrentArgs *args);
+static void page_switched (MfmCurrentControls *controls,
+ GtkNotebookPage *page,
+ gint pagenum);
+static void update_values (MfmCurrentControls *controls);
+static void mfm_current_invalidate (MfmCurrentControls *controls);
+static gboolean preview_gsource (gpointer user_data);
+static void preview (MfmCurrentControls *controls);
+static void mfm_current_do (const MfmCurrentArgs *args,
+ const GwyDimensionArgs *dimsargs,
+ GwyDataField *dfield);
+static void mfm_current_load_args (GwyContainer *container,
+ MfmCurrentArgs *args,
+ GwyDimensionArgs *dimsargs);
+static void mfm_current_save_args (GwyContainer *container,
+ const MfmCurrentArgs *args,
+ const GwyDimensionArgs *dimsargs);
+static void probe_changed (GtkComboBox *combo,
+ MfmCurrentControls *controls);
+static void out_changed (GtkComboBox *combo,
+ MfmCurrentControls *controls);
+
+static void update_sensitivity (MfmCurrentControls *controls);
+static void xyunits_changed (MfmCurrentControls *controls);
+
+
+#define GWY_SYNTH_CONTROLS MfmCurrentControls
+#define GWY_SYNTH_INVALIDATE(controls) \
+ mfm_current_invalidate(controls)
+
+#include "synth.h"
+
+
+static const MfmCurrentArgs mfm_current_defaults = {
+ PAGE_DIMENSIONS, TRUE,
+ GWY_MFM_CURRENT_OUTPUT_HZ,
+ GWY_MFM_PROBE_CHARGE,
+ 100, 1, 100,
+ 50, 1,
+ 10, 10, 500,
+
+};
+
+
+static const GwyDimensionArgs dims_defaults = MFM_DIMENSION_ARGS_INIT;
+
+
+static GwyModuleInfo module_info = {
+ GWY_MODULE_ABI_VERSION,
+ &module_register,
+ N_("Simulation of current line magnetic field"),
+ "Petr Klapetek <klapetek at gwyddion.net>",
+ "1.1",
+ "David Nečas (Yeti) & Petr Klapetek",
+ "2017",
+};
+
+GWY_MODULE_QUERY2(module_info, mfm_current)
+
+static gboolean
+module_register(void)
+{
+ gwy_process_func_register("mfm_current",
+ (GwyProcessFunc)&mfm_current,
+ N_("/SPM M_odes/_MFM/_Current Line Field..."),
+ NULL,
+ MFM_CURRENT_RUN_MODES,
+ 0,
+ N_("Simulate stray field above current line"));
+
+ return TRUE;
+}
+
+
+static void
+mfm_current(GwyContainer *data, GwyRunType run)
+{
+ MfmCurrentArgs args;
+ GwyDimensionArgs dimsargs;
+ GwyDataField *dfield;
+ GQuark quark;
+ gint id;
+
+ g_return_if_fail(run & MFM_CURRENT_RUN_MODES);
+ mfm_current_load_args(gwy_app_settings_get(), &args, &dimsargs);
+
+ //this should be always in meters at start
+ dimsargs.xyunits = g_strdup("m");
+
+ gwy_app_data_browser_get_current(GWY_APP_DATA_FIELD, &dfield,
+ GWY_APP_DATA_FIELD_ID, &id,
+ GWY_APP_DATA_FIELD_KEY, &quark,
+ 0);
+
+ if (run == GWY_RUN_IMMEDIATE
+ || mfm_current_dialog(&args, &dimsargs, data, dfield, id))
+ run_noninteractive(&args, &dimsargs, data, dfield, id, quark);
+
+ if (run == GWY_RUN_INTERACTIVE)
+ mfm_current_save_args(gwy_app_settings_get(), &args, &dimsargs);
+
+ gwy_dimensions_free_args(&dimsargs);
+}
+
+static void
+run_noninteractive(MfmCurrentArgs *args,
+ const GwyDimensionArgs *dimsargs,
+ GwyContainer *data,
+ GwyDataField *dfield,
+ gint oldid,
+ GQuark quark)
+{
+ GwySIUnit *siunit;
+ gboolean replace = dimsargs->replace && dfield;
+ gboolean add = dimsargs->add && dfield;
+ gint newid;
+
+ if (replace) {
+ /* Always take a reference so that we can always unref. */
+ g_object_ref(dfield);
+
+ gwy_app_undo_qcheckpointv(data, 1, &quark);
+ if (!add)
+ gwy_data_field_clear(dfield);
+
+ gwy_app_channel_log_add_proc(data, oldid, oldid);
+ }
+ else {
+ if (add)
+ dfield = gwy_data_field_duplicate(dfield);
+ else {
+ gdouble mag = pow10(dimsargs->xypow10) * dimsargs->measure;
+ dfield = gwy_data_field_new(dimsargs->xres, dimsargs->yres,
+ mag*dimsargs->xres, mag*dimsargs->yres,
+ TRUE);
+
+ siunit = gwy_data_field_get_si_unit_xy(dfield);
+ gwy_si_unit_set_from_string(siunit, dimsargs->xyunits);
+
+ siunit = gwy_data_field_get_si_unit_z(dfield);
+ gwy_si_unit_set_from_string(siunit, dimsargs->zunits);
+ }
+ }
+
+ mfm_current_do(args, dimsargs, dfield);
+
+ if (replace)
+ gwy_data_field_data_changed(dfield);
+ else {
+ if (data) {
+ newid = gwy_app_data_browser_add_data_field(dfield, data, TRUE);
+ if (oldid != -1)
+ gwy_app_sync_data_items(data, data, oldid, newid, FALSE,
+ GWY_DATA_ITEM_GRADIENT,
+ 0);
+ }
+ else {
+ newid = 0;
+ data = gwy_container_new();
+ gwy_container_set_object(data, gwy_app_get_data_key_for_id(newid),
+ dfield);
+ gwy_app_data_browser_add(data);
+ gwy_app_data_browser_reset_visibility(data,
+ GWY_VISIBILITY_RESET_SHOW_ALL);
+ g_object_unref(data);
+ }
+
+ gwy_app_set_data_field_title(data, newid, _("Simulated field"));
+ gwy_app_channel_log_add_proc(data, add ? oldid : -1, newid);
+ }
+ g_object_unref(dfield);
+}
+
+static gboolean
+mfm_current_dialog(MfmCurrentArgs *args,
+ GwyDimensionArgs *dimsargs,
+ GwyContainer *data,
+ GwyDataField *dfield_template,
+ gint id)
+{
+ GtkWidget *dialog, *table, *vbox, *hbox, *notebook;
+ MfmCurrentControls controls;
+ GwyDataField *dfield;
+ gboolean finished;
+ gint response;
+ gint row;
+ static const GwyEnum mfm_current_outputs[] = {
+ {
+ "H<sub>x</sub>",
+ GWY_MFM_CURRENT_OUTPUT_HX,
+ },
+ {
+ "H<sub>z</sub>",
+ GWY_MFM_CURRENT_OUTPUT_HZ,
+ },
+ {
+ "F<sub>z</sub>",
+ GWY_MFM_CURRENT_OUTPUT_FORCE,
+ },
+ {
+ "dF<sub>z</sub>/dz",
+ GWY_MFM_CURRENT_OUTPUT_FORCE_DX,
+ },
+ {
+ "d<sup>2</sup>F<sub>z</sub>/dz<sup>2</sup>",
+ GWY_MFM_CURRENT_OUTPUT_FORCE_DDX,
+ },
+ };
+ static const GwyEnum mfm_current_probes[] = {
+ { N_("Point charge"), GWY_MFM_PROBE_CHARGE, },
+ { N_("Bar"), GWY_MFM_PROBE_BAR, },
+ };
+
+
+ gwy_clear(&controls, 1);
+ controls.in_init = TRUE;
+ controls.args = args;
+ dialog = gtk_dialog_new_with_buttons(_("Current Line Stray Field"),
+ NULL, 0,
+ _("_Reset"), RESPONSE_RESET,
+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+ GTK_STOCK_OK, GTK_RESPONSE_OK,
+ NULL);
+ gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK);
+ gwy_help_add_to_proc_dialog(GTK_DIALOG(dialog), GWY_HELP_DEFAULT);
+ controls.dialog = dialog;
+
+ hbox = gtk_hbox_new(FALSE, 2);
+ gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), hbox,
+ FALSE, FALSE, 4);
+
+ vbox = gtk_vbox_new(FALSE, 4);
+ gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 4);
+
+ controls.mydata = gwy_container_new();
+ dfield = gwy_data_field_new(PREVIEW_SIZE, PREVIEW_SIZE,
+ pow10(dimsargs->xypow10)*dimsargs->measure*PREVIEW_SIZE,
+ pow10(dimsargs->xypow10)*dimsargs->measure*PREVIEW_SIZE,
+ TRUE);
+ gwy_container_set_object_by_name(controls.mydata, "/0/data", dfield);
+ if (dfield_template) {
+ gwy_app_sync_data_items(data, controls.mydata, id, 0, FALSE,
+ GWY_DATA_ITEM_PALETTE,
+ 0);
+ controls.surface = gwy_synth_surface_for_preview(dfield_template,
+ PREVIEW_SIZE);
+ controls.zscale = gwy_data_field_get_rms(dfield_template);
+ }
+ controls.view = create_preview(controls.mydata, 0, PREVIEW_SIZE, FALSE);
+ gtk_box_pack_start(GTK_BOX(vbox), controls.view, FALSE, FALSE, 0);
+
+ gtk_box_pack_start(GTK_BOX(vbox),
+ gwy_synth_instant_updates_new(&controls,
+ &controls.update_now,
+ &controls.update,
+ &args->update),
+ FALSE, FALSE, 0);
+ g_signal_connect_swapped(controls.update_now, "clicked",
+ G_CALLBACK(preview), &controls);
+
+
+
+ notebook = gtk_notebook_new();
+ gtk_box_pack_start(GTK_BOX(hbox), notebook, TRUE, TRUE, 4);
+ g_signal_connect_swapped(notebook, "switch-page",
+ G_CALLBACK(page_switched), &controls);
+
+ controls.dims = gwy_dimensions_new(dimsargs, dfield_template);
+ gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
+ gwy_dimensions_get_widget(controls.dims),
+ gtk_label_new(_("Dimensions")));
+ if (controls.dims->add)
+ g_signal_connect_swapped(controls.dims->add, "toggled",
+ G_CALLBACK(mfm_current_invalidate), &controls);
+
+ g_signal_connect_swapped(controls.dims->xypow10, "changed",
+ G_CALLBACK(xyunits_changed), &controls);
+ g_signal_connect_swapped(controls.dims->xreal, "value-changed",
+ G_CALLBACK(xyunits_changed), &controls);
+ g_signal_connect_swapped(controls.dims->yreal, "value-changed",
+ G_CALLBACK(xyunits_changed), &controls);
+
+
+ gtk_widget_set_no_show_all(controls.dims->xyunits, TRUE);
+ gtk_widget_hide(controls.dims->xyunits);
+ gtk_widget_set_no_show_all(controls.dims->zunits, TRUE);
+ gtk_widget_hide(controls.dims->zunits);
+ gtk_widget_set_no_show_all(controls.dims->zpow10, TRUE);
+ gtk_widget_hide(controls.dims->zpow10);
+ gtk_widget_set_no_show_all(controls.dims->unit_z_label, TRUE);
+ gtk_widget_hide(controls.dims->unit_z_label);
+
+
+ table = gtk_table_new(8 + (dfield_template ? 1 : 0), 3, FALSE);
+ controls.table = GTK_TABLE(table);
+ gtk_table_set_row_spacings(controls.table, 2);
+ gtk_table_set_col_spacings(controls.table, 6);
+ gtk_container_set_border_width(GTK_CONTAINER(table), 4);
+ gtk_notebook_append_page(GTK_NOTEBOOK(notebook), table,
+ gtk_label_new(_("Generator")));
+ row = 0;
+
+ gtk_table_attach(GTK_TABLE(table), gwy_label_new_header(_("Output")),
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
+ row++;
+
+ controls.height = gtk_adjustment_new(args->height, 1, 1000, 1, 10, 0);
+ gwy_table_attach_adjbar(table, row, _("_Output plane height:"), "nm",
+ controls.height, GWY_HSCALE_SQRT);
+ g_object_set_data(G_OBJECT(controls.height), "controls", &controls);
+ g_signal_connect_swapped(controls.height, "value-changed",
+ G_CALLBACK(update_values), &controls);
+ row++;
+
+ controls.width = gtk_adjustment_new(args->width, 1, 1000, 1, 10, 0);
+ gwy_table_attach_adjbar(table, row, _("_Stripe width:"), "nm",
+ controls.width, GWY_HSCALE_SQRT);
+ g_object_set_data(G_OBJECT(controls.width), "controls", &controls);
+ g_signal_connect_swapped(controls.width, "value-changed",
+ G_CALLBACK(update_values), &controls);
+ row++;
+
+ controls.current = gtk_adjustment_new(args->current, -1000, 1000, 1, 10, 0);
+ gwy_table_attach_adjbar(table, row, _("Stripe _current:"), "mA",
+ controls.current, GWY_HSCALE_SQRT);
+ g_object_set_data(G_OBJECT(controls.current), "controls", &controls);
+ g_signal_connect_swapped(controls.current, "value-changed",
+ G_CALLBACK(update_values), &controls);
+ row++;
+
+ controls.position = gtk_adjustment_new(args->position, 0, 100, 1, 10, 0);
+ gwy_table_attach_adjbar(table, row, _("_Position:"), "%",
+ controls.position, GWY_HSCALE_SQRT);
+ g_object_set_data(G_OBJECT(controls.position), "controls", &controls);
+ g_signal_connect_swapped(controls.position, "value-changed",
+ G_CALLBACK(update_values), &controls);
+ row++;
+
+ controls.out = gwy_enum_combo_box_new(mfm_current_outputs,
+ G_N_ELEMENTS(mfm_current_outputs),
+ G_CALLBACK(out_changed),
+ &controls, args->out, TRUE);
+ gwy_table_attach_adjbar(table, row, _("Output _type:"), NULL,
+ GTK_OBJECT(controls.out),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
+ row++;
+
+ gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
+ gtk_table_attach(GTK_TABLE(table), gwy_label_new_header(_("Probe")),
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
+ row++;
+
+ controls.probe = gwy_enum_combo_box_new(mfm_current_probes,
+ G_N_ELEMENTS(mfm_current_probes),
+ G_CALLBACK(probe_changed),
+ &controls, args->probe, TRUE);
+ gwy_table_attach_adjbar(table, row, _("P_robe type:"), NULL,
+ GTK_OBJECT(controls.probe),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
+ row++;
+
+ controls.mtip = gtk_adjustment_new(args->mtip, 1, 10000, 1, 10, 0);
+ gwy_table_attach_adjbar(table, row, _("Tip _magnetization:"), "kA/m",
+ controls.mtip, GWY_HSCALE_LOG);
+ g_object_set_data(G_OBJECT(controls.mtip), "controls", &controls);
+ g_signal_connect_swapped(controls.mtip, "value-changed",
+ G_CALLBACK(update_values), &controls);
+ row++;
+
+
+ controls.bx = gtk_adjustment_new(args->bx, 1, 1000, 1, 10, 0);
+ gwy_table_attach_adjbar(table, row, _("Bar width _x:"), "nm",
+ controls.bx, GWY_HSCALE_SQRT);
+ g_object_set_data(G_OBJECT(controls.bx), "controls", &controls);
+ g_signal_connect_swapped(controls.bx, "value-changed",
+ G_CALLBACK(update_values), &controls);
+ row++;
+
+
+ controls.by = gtk_adjustment_new(args->by, 1, 1000, 1, 10, 0);
+ gwy_table_attach_adjbar(table, row, _("Bar width _y:"), "nm",
+ controls.by, GWY_HSCALE_SQRT);
+ g_object_set_data(G_OBJECT(controls.by), "controls", &controls);
+ g_signal_connect_swapped(controls.by, "value-changed",
+ G_CALLBACK(update_values), &controls);
+ row++;
+
+
+ controls.length = gtk_adjustment_new(args->length, 1, 10000, 1, 10, 0);
+ gwy_table_attach_adjbar(table, row, _("Bar length (_z):"), "nm",
+ controls.length, GWY_HSCALE_LOG);
+ g_object_set_data(G_OBJECT(controls.length), "controls", &controls);
+ g_signal_connect_swapped(controls.length, "value-changed",
+ G_CALLBACK(update_values), &controls);
+ row++;
+
+
+ update_sensitivity(&controls);
+
+ gtk_widget_show_all(dialog);
+ controls.in_init = FALSE;
+ /* Must be done when widgets are shown, see GtkNotebook docs */
+ gtk_notebook_set_current_page(GTK_NOTEBOOK(notebook), args->active_page);
+ update_values(&controls);
+ mfm_current_invalidate(&controls);
+
+ finished = FALSE;
+ while (!finished) {
+ response = gtk_dialog_run(GTK_DIALOG(dialog));
+ switch (response) {
+ case GTK_RESPONSE_CANCEL:
+ case GTK_RESPONSE_DELETE_EVENT:
+ case GTK_RESPONSE_OK:
+ gtk_widget_destroy(dialog);
+ case GTK_RESPONSE_NONE:
+ finished = TRUE;
+ break;
+
+ case RESPONSE_RESET:
+ {
+ gboolean temp = args->update;
+ gint temp2 = args->active_page;
+ *args = mfm_current_defaults;
+ args->active_page = temp2;
+ args->update = temp;
+ }
+ controls.in_init = TRUE;
+ update_controls(&controls, args);
+ controls.in_init = FALSE;
+ if (args->update)
+ preview(&controls);
+ break;
+
+ default:
+ g_assert_not_reached();
+ break;
+ }
+ }
+
+ if (controls.sid) {
+ g_source_remove(controls.sid);
+ controls.sid = 0;
+ }
+ g_object_unref(controls.mydata);
+ GWY_OBJECT_UNREF(controls.surface);
+ gwy_dimensions_free(controls.dims);
+
+ return response == GTK_RESPONSE_OK;
+}
+
+
+static void
+update_controls(MfmCurrentControls *controls,
+ MfmCurrentArgs *args)
+{
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls->update),
+ args->update);
+
+ gwy_enum_combo_box_set_active(GTK_COMBO_BOX(controls->out),
+ args->out);
+ gwy_enum_combo_box_set_active(GTK_COMBO_BOX(controls->probe),
+ args->probe);
+
+ gtk_adjustment_set_value(GTK_ADJUSTMENT(controls->height), args->height);
+ gtk_adjustment_set_value(GTK_ADJUSTMENT(controls->current), args->current);
+ gtk_adjustment_set_value(GTK_ADJUSTMENT(controls->position), args->position);
+ gtk_adjustment_set_value(GTK_ADJUSTMENT(controls->width), args->width);
+ gtk_adjustment_set_value(GTK_ADJUSTMENT(controls->mtip), args->mtip);
+ gtk_adjustment_set_value(GTK_ADJUSTMENT(controls->bx), args->bx);
+ gtk_adjustment_set_value(GTK_ADJUSTMENT(controls->by), args->by);
+ gtk_adjustment_set_value(GTK_ADJUSTMENT(controls->length), args->length);
+}
+
+static void
+update_sensitivity(MfmCurrentControls *controls)
+{
+ gboolean is_force = TRUE, is_bar = FALSE;
+
+ if (controls->args->out == GWY_MFM_CURRENT_OUTPUT_HZ
+ || controls->args->out == GWY_MFM_CURRENT_OUTPUT_HX)
+ is_force = FALSE;
+ if (controls->args->probe == GWY_MFM_PROBE_BAR)
+ is_bar = TRUE;
+ if (!is_force)
+ is_bar = FALSE;
+
+ gwy_table_hscale_set_sensitive(GTK_OBJECT(controls->probe), is_force);
+ gwy_table_hscale_set_sensitive(controls->mtip, is_bar);
+ gwy_table_hscale_set_sensitive(controls->bx, is_bar);
+ gwy_table_hscale_set_sensitive(controls->by, is_bar);
+ gwy_table_hscale_set_sensitive(controls->length, is_bar);
+}
+
+static void
+xyunits_changed(MfmCurrentControls *controls)
+{
+ gdouble mag;
+ GwyDataField *dfield;
+
+ update_values(controls);
+
+ dfield = GWY_DATA_FIELD(gwy_container_get_object_by_name(controls->mydata,
+ "/0/data"));
+
+ mag = pow10(controls->dims->args->xypow10) * controls->dims->args->measure;
+ gwy_data_field_set_xreal(dfield, mag*controls->dims->args->xres);
+ gwy_data_field_set_yreal(dfield, mag*controls->dims->args->yres);
+
+ mfm_current_invalidate(controls);
+}
+
+static void
+probe_changed(GtkComboBox *combo, MfmCurrentControls *controls)
+{
+ controls->args->probe = gwy_enum_combo_box_get_active(combo);
+ update_sensitivity(controls);
+ mfm_current_invalidate(controls);
+}
+
+static void
+out_changed(GtkComboBox *combo, MfmCurrentControls *controls)
+{
+ controls->args->out = gwy_enum_combo_box_get_active(combo);
+ update_sensitivity(controls);
+ mfm_current_invalidate(controls);
+}
+
+
+static void
+page_switched(MfmCurrentControls *controls,
+ G_GNUC_UNUSED GtkNotebookPage *page,
+ gint pagenum)
+{
+ if (controls->in_init)
+ return;
+
+ controls->args->active_page = pagenum;
+
+ if (pagenum == PAGE_GENERATOR)
+ update_values(controls);
+}
+
+static void
+update_values(MfmCurrentControls *controls)
+{
+ GwyDimensions *dims = controls->dims;
+
+ controls->pxsize = dims->args->measure * pow10(dims->args->xypow10);
+
+ controls->args->current = gtk_adjustment_get_value(GTK_ADJUSTMENT(controls->current));
+ controls->args->position = gtk_adjustment_get_value(GTK_ADJUSTMENT(controls->position));
+ controls->args->width = gtk_adjustment_get_value(GTK_ADJUSTMENT(controls->width));
+ controls->args->height = gtk_adjustment_get_value(GTK_ADJUSTMENT(controls->height));
+ controls->args->mtip = gtk_adjustment_get_value(GTK_ADJUSTMENT(controls->mtip));
+ controls->args->bx = gtk_adjustment_get_value(GTK_ADJUSTMENT(controls->bx));
+ controls->args->by = gtk_adjustment_get_value(GTK_ADJUSTMENT(controls->by));
+ controls->args->length = gtk_adjustment_get_value(GTK_ADJUSTMENT(controls->length));
+
+ controls->args->probe = gwy_enum_combo_box_get_active(GTK_COMBO_BOX(controls->probe));
+ controls->args->out = gwy_enum_combo_box_get_active(GTK_COMBO_BOX(controls->out));
+
+ update_sensitivity(controls);
+ mfm_current_invalidate(controls);
+
+
+}
+
+static void
+mfm_current_invalidate(MfmCurrentControls *controls)
+{
+ /* create preview if instant updates are on */
+ if (controls->args->update && !controls->in_init && !controls->sid) {
+ controls->sid = g_idle_add_full(G_PRIORITY_LOW, preview_gsource,
+ controls, NULL);
+ }
+}
+
+static gboolean
+preview_gsource(gpointer user_data)
+{
+ MfmCurrentControls *controls = (MfmCurrentControls*)user_data;
+ controls->sid = 0;
+
+ preview(controls);
+
+ return FALSE;
+}
+
+static void
+preview(MfmCurrentControls *controls)
+{
+ MfmCurrentArgs *args = controls->args;
+ GwyDataField *dfield;
+
+ dfield = GWY_DATA_FIELD(gwy_container_get_object_by_name(controls->mydata,
+ "/0/data"));
+ if (controls->dims->args->add && controls->surface)
+ gwy_data_field_copy(controls->surface, dfield, FALSE);
+ else
+ gwy_data_field_clear(dfield);
+
+ mfm_current_do(args, controls->dims->args, dfield);
+
+ gwy_data_field_data_changed(dfield);
+}
+
+static void
+mfm_current_do(const MfmCurrentArgs *args,
+ G_GNUC_UNUSED const GwyDimensionArgs *dimsargs,
+ GwyDataField *dfield)
+{
+ GwyDataField *fz=NULL, *fza, *fzb, *fzc;
+ gdouble dd = 1.0e-9;
+ gdouble position = args->position*gwy_data_field_get_xreal(dfield)/100.0;
+
+ if (args->out == GWY_MFM_CURRENT_OUTPUT_HX)
+ {
+ mfm_current_create_h(dfield, args->height*1e-9, args->width*1e-9,
+ position, args->current*1e-3,
+ GWY_MFM_COMPONENT_HX);
+ gwy_data_field_set_si_unit_z(dfield, gwy_si_unit_new("A/m"));
+
+ }
+ else if (args->out == GWY_MFM_CURRENT_OUTPUT_HZ || args->out == GWY_MFM_CURRENT_OUTPUT_FORCE)
+ {
+ mfm_current_create_h(dfield, args->height*1e-9, args->width*1e-9,
+ position, args->current*1e-3,
+ GWY_MFM_COMPONENT_HZ);
+
+ if (args->out == GWY_MFM_CURRENT_OUTPUT_FORCE)
+ {
+ fz = gwy_data_field_new_alike(dfield, TRUE);
+
+ mfm_perpendicular_force_from_field(dfield, fz,
+ args->probe, args->mtip*1e3,
+ args->bx*1e-9, args->by*1e-9, args->length*1e-9);
+ gwy_data_field_copy(fz, dfield, FALSE);
+ gwy_data_field_set_si_unit_z(dfield, gwy_si_unit_new("N"));
+
+ gwy_object_unref(fz);
+ } else {
+ gwy_data_field_set_si_unit_z(dfield, gwy_si_unit_new("A/m"));
+ }
+ }
+
+ else if (args->out == GWY_MFM_CURRENT_OUTPUT_FORCE_DX) //this is done numerically now
+ {
+ fza = gwy_data_field_new_alike(dfield, TRUE);
+ fzb = gwy_data_field_new_alike(dfield, TRUE);
+ fz = gwy_data_field_new_alike(dfield, TRUE);
+
+
+ mfm_current_create_h(dfield, args->height*1e-9-dd, args->width*1e-9,
+ position, args->current*1e-3,
+ GWY_MFM_COMPONENT_HZ);
+
+ mfm_perpendicular_force_from_field(dfield, fza,
+ args->probe, args->mtip*1e3,
+ args->bx*1e-9, args->by*1e-9, args->length*1e-9);
+
+ mfm_current_create_h(dfield, args->height*1e-9+dd, args->width*1e-9,
+ position, args->current*1e-3,
+ GWY_MFM_COMPONENT_HZ);
+
+ mfm_perpendicular_force_from_field(dfield, fzb,
+ args->probe, args->mtip*1e3,
+ args->bx*1e-9, args->by*1e-9, args->length*1e-9);
+
+ gwy_data_field_subtract_fields(fz, fza, fzb);
+ gwy_data_field_multiply(fz, 0.5/dd);
+
+ gwy_object_unref(fza);
+ gwy_object_unref(fzb);
+
+ gwy_data_field_copy(fz, dfield, FALSE);
+ gwy_data_field_set_si_unit_z(dfield, gwy_si_unit_new("N/m"));
+
+ gwy_object_unref(fz);
+
+ }
+ else if (args->out == GWY_MFM_CURRENT_OUTPUT_FORCE_DDX) //this is done numerically now
+ {
+ fza = gwy_data_field_new_alike(dfield, TRUE);
+ fzb = gwy_data_field_new_alike(dfield, TRUE);
+ fzc = gwy_data_field_new_alike(dfield, TRUE);
+ fz = gwy_data_field_new_alike(dfield, TRUE);
+
+
+ mfm_current_create_h(dfield, args->height*1e-9-dd, args->width*1e-9,
+ position, args->current*1e-3,
+ GWY_MFM_COMPONENT_HZ);
+
+ mfm_perpendicular_force_from_field(dfield, fza,
+ args->probe, args->mtip*1e3,
+ args->bx*1e-9, args->by*1e-9, args->length*1e-9);
+
+ mfm_current_create_h(dfield, args->height*1e-9, args->width*1e-9,
+ position, args->current*1e-3,
+ GWY_MFM_COMPONENT_HZ);
+
+ mfm_perpendicular_force_from_field(dfield, fzb,
+ args->probe, args->mtip*1e3,
+ args->bx*1e-9, args->by*1e-9, args->length*1e-9);
+
+ mfm_current_create_h(dfield, args->height*1e-9+dd, args->width*1e-9,
+ position, args->current*1e-3,
+ GWY_MFM_COMPONENT_HZ);
+
+ mfm_perpendicular_force_from_field(dfield, fzc,
+ args->probe, args->mtip*1e3,
+ args->bx*1e-9, args->by*1e-9, args->length*1e-9);
+
+ gwy_data_field_multiply(fzb, 2.0);
+ gwy_data_field_sum_fields(fz, fza, fzc);
+ gwy_data_field_subtract_fields(fz, fz, fzb);
+
+ gwy_data_field_multiply(fz, 1.0/(dd*dd));
+
+ gwy_object_unref(fza);
+ gwy_object_unref(fzb);
+ gwy_object_unref(fzc);
+
+ gwy_data_field_copy(fz, dfield, FALSE);
+ gwy_data_field_set_si_unit_z(dfield, gwy_si_unit_new("N/m²"));
+
+ gwy_object_unref(fz);
+
+ }
+}
+
+
+static const gchar prefix[] = "/module/mfm_current";
+static const gchar active_page_key[] = "/module/mfm_current/active_page";
+static const gchar update_key[] = "/module/mfm_current/update";
+static const gchar out_key[] = "/module/mfm_current/out";
+static const gchar probe_key[] = "/module/mfm_current/probe";
+static const gchar height_key[] = "/module/mfm_current/height";
+static const gchar current_key[] = "/module/mfm_current/current";
+static const gchar width_key[] = "/module/mfm_current/width";
+static const gchar position_key[] = "/module/mfm_current/position";
+static const gchar mtip_key[] = "/module/mfm_current/mtip";
+static const gchar bx_key[] = "/module/mfm_current/bx";
+static const gchar by_key[] = "/module/mfm_current/by";
+static const gchar length_key[] = "/module/mfm_current/length";
+
+
+static void
+mfm_current_sanitize_args(MfmCurrentArgs *args)
+{
+ args->active_page = CLAMP(args->active_page,
+ PAGE_DIMENSIONS, PAGE_NPAGES-1);
+ args->update = !!args->update;
+ args->out = CLAMP(args->out, 0, GWY_MFM_CURRENT_OUTPUT_FORCE_DDX);
+ args->probe = CLAMP(args->probe, 0, GWY_MFM_PROBE_BAR);
+ args->position = CLAMP(args->position, 0, 100);
+}
+
+static void
+mfm_current_load_args(GwyContainer *container,
+ MfmCurrentArgs *args,
+ GwyDimensionArgs *dimsargs)
+{
+ *args = mfm_current_defaults;
+
+ gwy_container_gis_int32_by_name(container, active_page_key,
+ &args->active_page);
+ gwy_container_gis_boolean_by_name(container, update_key, &args->update);
+
+ gwy_container_gis_enum_by_name(container, probe_key, &args->probe);
+ gwy_container_gis_enum_by_name(container, out_key, &args->out);
+ gwy_container_gis_double_by_name(container, height_key, &args->height);
+ gwy_container_gis_double_by_name(container, current_key, &args->current);
+ gwy_container_gis_double_by_name(container, width_key, &args->width);
+ gwy_container_gis_double_by_name(container, position_key, &args->position);
+ gwy_container_gis_double_by_name(container, mtip_key, &args->mtip);
+ gwy_container_gis_double_by_name(container, bx_key, &args->bx);
+ gwy_container_gis_double_by_name(container, by_key, &args->by);
+ gwy_container_gis_double_by_name(container, length_key, &args->length);
+
+ mfm_current_sanitize_args(args);
+
+ gwy_clear(dimsargs, 1);
+ gwy_dimensions_copy_args(&dims_defaults, dimsargs);
+ gwy_dimensions_load_args(dimsargs, container, prefix);
+}
+
+static void
+mfm_current_save_args(GwyContainer *container,
+ const MfmCurrentArgs *args,
+ const GwyDimensionArgs *dimsargs)
+{
+ gwy_container_set_int32_by_name(container, active_page_key,
+ args->active_page);
+ gwy_container_set_boolean_by_name(container, update_key, args->update);
+
+ gwy_container_set_enum_by_name(container, probe_key, args->probe);
+ gwy_container_set_enum_by_name(container, out_key, args->out);
+ gwy_container_set_double_by_name(container, height_key, args->height);
+ gwy_container_set_double_by_name(container, current_key, args->current);
+ gwy_container_set_double_by_name(container, width_key, args->width);
+ gwy_container_set_double_by_name(container, position_key, args->position);
+ gwy_container_set_double_by_name(container, mtip_key, args->mtip);
+ gwy_container_set_double_by_name(container, bx_key, args->bx);
+ gwy_container_set_double_by_name(container, by_key, args->by);
+ gwy_container_set_double_by_name(container, length_key, args->length);
+
+
+ gwy_dimensions_save_args(dimsargs, container, prefix);
+}
+
+/* vim: set cin et ts=4 sw=4 cino=>1s,e0,n0,f0,{0,}0,^0,\:1s,=0,g1s,h0,t0,+1s,c3,(0,u0 : */
diff --git a/modules/process/mfm_field.c b/modules/process/mfm_field.c
new file mode 100644
index 0000000..fcd7348
--- /dev/null
+++ b/modules/process/mfm_field.c
@@ -0,0 +1,789 @@
+/*
+ * @(#) $Id: mfm_field.c 19948 2017-06-22 14:05:41Z yeti-dn $
+ * Copyright (C) 2003-2015 David Necas (Yeti), Petr Klapetek.
+ * E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "config.h"
+#include <gtk/gtk.h>
+#include <libgwyddion/gwymacros.h>
+#include <libgwyddion/gwymath.h>
+#include <libprocess/gwyprocesstypes.h>
+#include <libprocess/arithmetic.h>
+#include <libprocess/inttrans.h>
+#include <libprocess/stats.h>
+#include <libgwydgets/gwydgetutils.h>
+#include <libgwydgets/gwycombobox.h>
+#include <libgwydgets/gwystock.h>
+#include <libgwymodule/gwymodule-process.h>
+#include <app/gwymoduleutils.h>
+#include <app/gwyapp.h>
+#include "mfmops.h"
+#include "preview.h"
+
+#define MFM_FIELD_RUN_MODES (GWY_RUN_IMMEDIATE | GWY_RUN_INTERACTIVE)
+
+typedef enum {
+ GWY_MFM_FIELD_OUTPUT_FIELD = 0,
+ GWY_MFM_FIELD_OUTPUT_FORCE = 1,
+ GWY_MFM_FIELD_OUTPUT_FORCE_DX = 2,
+ GWY_MFM_FIELD_OUTPUT_FORCE_DDX = 3
+} GwyMfmFieldOutputType;
+
+
+typedef struct {
+ GwyMfmFieldOutputType out;
+ GwyMfmProbeType probe;
+ gboolean walls;
+ gdouble height;
+ gdouble thickness;
+ gdouble sigma;
+ gdouble mtip;
+ gdouble bx;
+ gdouble by;
+ gdouble length;
+ gdouble wall_a;
+ gdouble wall_kn;
+ gboolean update;
+} MfmFieldArgs;
+
+typedef struct {
+ MfmFieldArgs *args;
+ GtkWidget *out;
+ GtkWidget *probe;
+ GtkWidget *walls;
+ GtkWidget *update;
+ GtkObject *height;
+ GtkObject *thickness;
+ GtkObject *sigma;
+ GtkObject *mtip;
+ GtkObject *bx;
+ GtkObject *by;
+ GtkObject *length;
+ GtkObject *wall_a;
+ GtkObject *wall_kn;
+ GwyDataField *result;
+ GwyDataField *mfield;
+ GtkWidget *view;
+ GwyContainer *mydata;
+
+} MfmFieldControls;
+
+static gboolean module_register (void);
+static void mfm_field (GwyContainer *data,
+ GwyRunType run);
+static void mfm_field_do (MfmFieldArgs *args,
+ GwyDataField *mfield,
+ GwyDataField *out);
+static gboolean mfm_field_dialog (MfmFieldArgs *args,
+ GwyContainer *data);
+static void walls_changed (GtkToggleButton *button,
+ MfmFieldControls *controls);
+static void update_changed (GtkToggleButton *button,
+ MfmFieldControls *controls);
+static void update_sensitivity (MfmFieldControls *controls);
+static void preview (MfmFieldControls *controls,
+ MfmFieldArgs *args);
+static void mfm_field_load_args (GwyContainer *container,
+ MfmFieldArgs *args);
+static void mfm_field_save_args (GwyContainer *container,
+ MfmFieldArgs *args);
+static void mfm_field_sanitize_args (MfmFieldArgs *args);
+static void sigma_changed (GtkAdjustment *adj,
+ MfmFieldControls *controls);
+static void height_changed (GtkAdjustment *adj,
+ MfmFieldControls *controls);
+static void thickness_changed (GtkAdjustment *adj,
+ MfmFieldControls *controls);
+static void wall_a_changed (GtkAdjustment *adj,
+ MfmFieldControls *controls);
+static void wall_kn_changed (GtkAdjustment *adj,
+ MfmFieldControls *controls);
+static void bx_changed (GtkAdjustment *adj,
+ MfmFieldControls *controls);
+static void by_changed (GtkAdjustment *adj,
+ MfmFieldControls *controls);
+static void mtip_changed (GtkAdjustment *adj,
+ MfmFieldControls *controls);
+static void length_changed (GtkAdjustment *adj,
+ MfmFieldControls *controls);
+static void probe_changed (GtkComboBox *combo,
+ MfmFieldControls *controls);
+static void out_changed (GtkComboBox *combo,
+ MfmFieldControls *controls);
+static void mfm_field_dialog_update (MfmFieldControls *controls,
+ MfmFieldArgs *args);
+
+static const MfmFieldArgs mfm_field_defaults = {
+ GWY_MFM_FIELD_OUTPUT_FIELD,
+ GWY_MFM_PROBE_CHARGE,
+ FALSE,
+ 100, 100, 1,
+ 1, 10, 10, 1000,
+ 28, 540,
+ FALSE,
+};
+
+
+static GwyModuleInfo module_info = {
+ GWY_MODULE_ABI_VERSION,
+ &module_register,
+ N_("Simulation of magnetic field above perpendicular media"),
+ "Petr Klapetek <klapetek at gwyddion.net>",
+ "1.1",
+ "David Nečas (Yeti) & Petr Klapetek",
+ "2017",
+};
+
+GWY_MODULE_QUERY2(module_info, mfm_field)
+
+static gboolean
+module_register(void)
+{
+ gwy_process_func_register("mfm_field",
+ (GwyProcessFunc)&mfm_field,
+ N_("/SPM M_odes/_MFM/_Perpendicular Media Field..."),
+ NULL,
+ MFM_FIELD_RUN_MODES,
+ GWY_MENU_FLAG_DATA | GWY_MENU_FLAG_DATA_MASK,
+ N_("Compute stray field above perpendicular magnetic medium"));
+
+ return TRUE;
+}
+
+static void
+mfm_field(GwyContainer *data, GwyRunType run)
+{
+ GwyDataField *mfield, *out;
+ MfmFieldArgs args;
+ gboolean ok;
+ gint id, newid, datano;
+ g_return_if_fail(run & MFM_FIELD_RUN_MODES);
+
+ gwy_app_data_browser_get_current(GWY_APP_MASK_FIELD, &mfield,
+ GWY_APP_DATA_FIELD_ID, &id,
+ GWY_APP_CONTAINER_ID, &datano,
+ 0);
+ g_return_if_fail(mfield);
+
+ mfm_field_load_args(gwy_app_settings_get(), &args);
+
+ if (run == GWY_RUN_INTERACTIVE) {
+ ok = mfm_field_dialog(&args, data);
+ mfm_field_save_args(gwy_app_settings_get(), &args);
+ if (!ok)
+ return;
+ }
+
+ //do the computation
+
+ out = gwy_data_field_new_alike(mfield, FALSE);
+ mfm_field_do(&args, mfield, out);
+
+ if (args.out == GWY_MFM_FIELD_OUTPUT_FIELD) {
+ newid = gwy_app_data_browser_add_data_field(out, data, TRUE);
+ gwy_app_sync_data_items(data, data, id, newid, FALSE,
+ GWY_DATA_ITEM_GRADIENT,
+ GWY_DATA_ITEM_MASK_COLOR,
+ 0);
+
+ gwy_app_set_data_field_title(data, newid, "Hz");
+ gwy_app_channel_log_add_proc(data, id, newid);
+ }
+ else if (args.out == GWY_MFM_FIELD_OUTPUT_FORCE) {
+ newid = gwy_app_data_browser_add_data_field(out, data, TRUE);
+ gwy_app_sync_data_items(data, data, id, newid, FALSE,
+ GWY_DATA_ITEM_GRADIENT,
+ GWY_DATA_ITEM_MASK_COLOR,
+ 0);
+
+ gwy_app_set_data_field_title(data, newid, "Fz");
+ gwy_app_channel_log_add_proc(data, id, newid);
+ }
+ else if (args.out == GWY_MFM_FIELD_OUTPUT_FORCE_DX) {
+ newid = gwy_app_data_browser_add_data_field(out, data, TRUE);
+ gwy_app_sync_data_items(data, data, id, newid, FALSE,
+ GWY_DATA_ITEM_GRADIENT,
+ GWY_DATA_ITEM_MASK_COLOR,
+ 0);
+
+ gwy_app_set_data_field_title(data, newid, "dFz/dz");
+ gwy_app_channel_log_add_proc(data, id, newid);
+ }
+ else if (args.out == GWY_MFM_FIELD_OUTPUT_FORCE_DDX) {
+ newid = gwy_app_data_browser_add_data_field(out, data, TRUE);
+ gwy_app_sync_data_items(data, data, id, newid, FALSE,
+ GWY_DATA_ITEM_GRADIENT,
+ GWY_DATA_ITEM_MASK_COLOR,
+ 0);
+
+ gwy_app_set_data_field_title(data, newid, "d²Fz/dz²");
+ gwy_app_channel_log_add_proc(data, id, newid);
+
+ }
+
+ g_object_unref(out);
+}
+
+
+static gboolean
+mfm_field_dialog(MfmFieldArgs *args, GwyContainer *data)
+{
+ static const GwyEnum mfm_field_outputs[] = {
+ {
+ "H<sub>z</sub>",
+ GWY_MFM_FIELD_OUTPUT_FIELD,
+ },
+ {
+ "F<sub>z</sub>",
+ GWY_MFM_FIELD_OUTPUT_FORCE,
+ },
+ {
+ "dF<sub>z</sub>/dz",
+ GWY_MFM_FIELD_OUTPUT_FORCE_DX,
+ },
+ {
+ "d<sup>2</sup>F<sub>z</sub>/dz<sup>2</sup>",
+ GWY_MFM_FIELD_OUTPUT_FORCE_DDX,
+ },
+ };
+ static const GwyEnum mfm_field_probes[] = {
+ { N_("Point charge"), GWY_MFM_PROBE_CHARGE, },
+ { N_("Bar"), GWY_MFM_PROBE_BAR, },
+ };
+ GtkWidget *dialog, *table, *hbox;
+ MfmFieldControls controls;
+ gint response, row, id, datano;
+
+ controls.args = args;
+
+
+ dialog = gtk_dialog_new_with_buttons(_("Perpendicular Media Stray Field"), NULL, 0, NULL);
+ gtk_dialog_add_action_widget(GTK_DIALOG(dialog),
+ gwy_stock_like_button_new(_("_Update"),
+ GTK_STOCK_EXECUTE),
+ RESPONSE_PREVIEW);
+ gtk_dialog_add_button(GTK_DIALOG(dialog), _("_Reset"), RESPONSE_RESET);
+ gtk_dialog_add_button(GTK_DIALOG(dialog),
+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL);
+ gtk_dialog_add_button(GTK_DIALOG(dialog),
+ GTK_STOCK_OK, GTK_RESPONSE_OK);
+ gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK);
+ gwy_help_add_to_proc_dialog(GTK_DIALOG(dialog), GWY_HELP_DEFAULT);
+
+
+ hbox = gtk_hbox_new(FALSE, 2);
+ gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), GTK_WIDGET(hbox),
+ FALSE, FALSE, 4);
+
+ gwy_app_data_browser_get_current(GWY_APP_MASK_FIELD, &controls.mfield,
+ GWY_APP_DATA_FIELD_ID, &id,
+ GWY_APP_CONTAINER_ID, &datano,
+ 0);
+ controls.result = gwy_data_field_new_alike(controls.mfield, TRUE);
+
+ controls.mydata = gwy_container_new();
+ gwy_container_set_object_by_name(controls.mydata, "/0/data", controls.result);
+ gwy_app_sync_data_items(data, controls.mydata, id, 0, FALSE,
+ GWY_DATA_ITEM_PALETTE,
+ GWY_DATA_ITEM_MASK_COLOR,
+ GWY_DATA_ITEM_RANGE,
+ GWY_DATA_ITEM_REAL_SQUARE,
+ 0);
+ controls.view = create_preview(controls.mydata, 0, PREVIEW_SIZE, TRUE);
+ gtk_box_pack_start(GTK_BOX(hbox), controls.view, FALSE, FALSE, 4);
+
+ table = gtk_table_new(13, 3, FALSE);
+ gtk_table_set_row_spacings(GTK_TABLE(table), 2);
+ gtk_table_set_col_spacings(GTK_TABLE(table), 6);
+ gtk_container_set_border_width(GTK_CONTAINER(table), 4);
+ gtk_box_pack_start(GTK_BOX(hbox), table,
+ FALSE, FALSE, 4);
+ row = 0;
+
+ controls.height = gtk_adjustment_new(args->height, 0, 1000, 1, 10, 0);
+ gwy_table_attach_adjbar(table, row, _("_Output plane height:"), "nm",
+ controls.height, GWY_HSCALE_SQRT);
+ g_object_set_data(G_OBJECT(controls.height), "controls", &controls);
+ g_signal_connect(controls.height, "value-changed",
+ G_CALLBACK(height_changed), &controls);
+ row++;
+
+ controls.thickness = gtk_adjustment_new(args->thickness, 0, 1000, 1, 10, 0);
+ gwy_table_attach_adjbar(table, row, _("_Film thickness:"), "nm",
+ controls.thickness, GWY_HSCALE_SQRT);
+ g_object_set_data(G_OBJECT(controls.thickness), "controls", &controls);
+ g_signal_connect(controls.thickness, "value-changed",
+ G_CALLBACK(thickness_changed), &controls);
+ row++;
+
+ controls.sigma = gtk_adjustment_new(args->sigma, 1, 1000, 1, 10, 0);
+ gwy_table_attach_adjbar(table, row, _("_Magnetic charge:"), "kA/m",
+ controls.sigma, GWY_HSCALE_SQRT);
+ g_object_set_data(G_OBJECT(controls.sigma), "controls", &controls);
+ g_signal_connect(controls.sigma, "value-changed",
+ G_CALLBACK(sigma_changed), &controls);
+ row++;
+
+ controls.walls
+ = gtk_check_button_new_with_mnemonic(_("Include domain _walls"));
+ gtk_table_attach(GTK_TABLE(table), controls.walls,
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.walls),
+ args->walls);
+ g_signal_connect(controls.walls, "toggled",
+ G_CALLBACK(walls_changed), &controls);
+ row++;
+
+ controls.wall_a = gtk_adjustment_new(args->wall_a, 1, 1000, 1, 10, 0);
+ gwy_table_attach_adjbar(table, row, _("_Exchange constant:"), "pJ/m",
+ controls.wall_a, GWY_HSCALE_SQRT);
+ g_object_set_data(G_OBJECT(controls.wall_a), "controls", &controls);
+ g_signal_connect(controls.wall_a, "value-changed",
+ G_CALLBACK(wall_a_changed), &controls);
+ row++;
+
+ controls.wall_kn = gtk_adjustment_new(args->wall_kn, 1, 1000, 1, 10, 0);
+ gwy_table_attach_adjbar(table, row, _("_Uniaxial anisotropy:"), "kJ/m³",
+ controls.wall_kn, GWY_HSCALE_SQRT);
+ g_object_set_data(G_OBJECT(controls.wall_kn), "controls", &controls);
+ g_signal_connect(controls.wall_kn, "value-changed",
+ G_CALLBACK(wall_kn_changed), &controls);
+ row++;
+
+ controls.out = gwy_enum_combo_box_new(mfm_field_outputs,
+ G_N_ELEMENTS(mfm_field_outputs),
+ G_CALLBACK(out_changed),
+ &controls, args->out, TRUE);
+ gwy_table_attach_adjbar(table, row, _("Output _type:"), NULL,
+ GTK_OBJECT(controls.out),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
+ row++;
+
+ gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
+ controls.probe = gwy_enum_combo_box_new(mfm_field_probes,
+ G_N_ELEMENTS(mfm_field_probes),
+ G_CALLBACK(probe_changed),
+ &controls, args->probe, TRUE);
+ gwy_table_attach_adjbar(table, row, _("_Probe type:"), NULL,
+ GTK_OBJECT(controls.probe),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
+ row++;
+
+ controls.mtip = gtk_adjustment_new(args->mtip, 1, 10000, 1, 10, 0);
+ gwy_table_attach_adjbar(table, row, _("Tip _magnetization:"), "kA/m",
+ controls.mtip, GWY_HSCALE_LOG);
+ g_object_set_data(G_OBJECT(controls.mtip), "controls", &controls);
+ g_signal_connect(controls.mtip, "value-changed",
+ G_CALLBACK(mtip_changed), &controls);
+ row++;
+
+ controls.bx = gtk_adjustment_new(args->bx, 1, 1000, 1, 10, 0);
+ gwy_table_attach_adjbar(table, row, _("Bar width _x:"), "nm",
+ controls.bx, GWY_HSCALE_SQRT);
+ g_object_set_data(G_OBJECT(controls.bx), "controls", &controls);
+ g_signal_connect(controls.bx, "value-changed",
+ G_CALLBACK(bx_changed), &controls);
+ row++;
+
+ controls.by = gtk_adjustment_new(args->by, 1, 1000, 1, 10, 0);
+ gwy_table_attach_adjbar(table, row, _("Bar width _y:"), "nm",
+ controls.by, GWY_HSCALE_SQRT);
+ g_object_set_data(G_OBJECT(controls.by), "controls", &controls);
+ g_signal_connect(controls.by, "value-changed",
+ G_CALLBACK(by_changed), &controls);
+ row++;
+
+ controls.length = gtk_adjustment_new(args->length, 1, 10000, 1, 10, 0);
+ gwy_table_attach_adjbar(table, row, _("Bar length (_z):"), "nm",
+ controls.length, GWY_HSCALE_LOG);
+ g_object_set_data(G_OBJECT(controls.length), "controls", &controls);
+ g_signal_connect(controls.length, "value-changed",
+ G_CALLBACK(length_changed), &controls);
+ row++;
+
+ controls.update = gtk_check_button_new_with_mnemonic(_("I_nstant updates"));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.update),
+ args->update);
+ gtk_table_attach(GTK_TABLE(table), controls.update,
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
+ g_signal_connect(controls.update, "toggled",
+ G_CALLBACK(update_changed), &controls);
+ row++;
+
+ update_sensitivity(&controls);
+ if (args->update)
+ preview(&controls, args);
+
+ gtk_widget_show_all(dialog);
+ do {
+ response = gtk_dialog_run(GTK_DIALOG(dialog));
+ switch (response) {
+ case GTK_RESPONSE_CANCEL:
+ case GTK_RESPONSE_DELETE_EVENT:
+ gtk_widget_destroy(dialog);
+ case GTK_RESPONSE_NONE:
+ return FALSE;
+ break;
+
+ case GTK_RESPONSE_OK:
+ break;
+
+ case RESPONSE_PREVIEW:
+ preview(&controls, args);
+ break;
+
+ case RESPONSE_RESET:
+ {
+ *args = mfm_field_defaults;
+ mfm_field_dialog_update(&controls, args);
+ }
+ break;
+
+ default:
+ g_assert_not_reached();
+ break;
+ }
+ } while (response != GTK_RESPONSE_OK);
+
+ gtk_widget_destroy(dialog);
+
+ return TRUE;
+}
+
+
+static void
+sigma_changed(GtkAdjustment *adj, MfmFieldControls *controls)
+{
+ controls->args->sigma = gtk_adjustment_get_value(adj);
+}
+
+static void
+mfm_field_do(MfmFieldArgs *args, GwyDataField *mfield, GwyDataField *out)
+{
+ GwyDataField *fz=NULL, *fza, *fzb, *fzc;
+ gdouble dd = 1.0e-9;
+
+
+ if (args->out == GWY_MFM_FIELD_OUTPUT_FIELD || args->out == GWY_MFM_FIELD_OUTPUT_FORCE) {
+ mfm_perpendicular_stray_field(mfield, out, args->height*1e-9, args->thickness*1e-9, args->sigma,
+ args->walls, args->wall_a*1e-12, args->wall_kn*1e3);
+
+ if (args->out == GWY_MFM_FIELD_OUTPUT_FORCE)
+ {
+ fz = gwy_data_field_new_alike(out, TRUE);
+
+ mfm_perpendicular_force_from_field(out, fz,
+ args->probe, args->mtip*1e3,
+ args->bx*1e-9, args->by*1e-9, args->length*1e-9);
+ gwy_data_field_copy(fz, out, FALSE);
+ gwy_object_unref(fz);
+ }
+ }
+ else if (args->out == GWY_MFM_FIELD_OUTPUT_FORCE_DX) //this is done numerically now
+ {
+ fza = gwy_data_field_new_alike(out, TRUE);
+ fzb = gwy_data_field_new_alike(out, TRUE);
+ fz = gwy_data_field_new_alike(out, TRUE);
+
+
+ mfm_perpendicular_stray_field(mfield, out, args->height*1e-9-dd, args->thickness*1e-9, args->sigma,
+ args->walls, args->wall_a*1e-12, args->wall_kn*1e3);
+ mfm_perpendicular_force_from_field(out, fza,
+ args->probe, args->mtip*1e3,
+ args->bx*1e-9, args->by*1e-9, args->length*1e-9);
+
+ mfm_perpendicular_stray_field(mfield, out, args->height*1e-9+dd, args->thickness*1e-9, args->sigma,
+ args->walls, args->wall_a*1e-12, args->wall_kn*1e3);
+ mfm_perpendicular_force_from_field(out, fzb,
+ args->probe, args->mtip*1e3,
+ args->bx*1e-9, args->by*1e-9, args->length*1e-9);
+
+ gwy_data_field_subtract_fields(fz, fza, fzb);
+ gwy_data_field_multiply(fz, 0.5/dd);
+
+ gwy_object_unref(fza);
+ gwy_object_unref(fzb);
+
+ gwy_data_field_copy(fz, out, FALSE);
+ gwy_object_unref(fz);
+
+ }
+ else if (args->out == GWY_MFM_FIELD_OUTPUT_FORCE_DDX) //this is done numerically now
+ {
+ fza = gwy_data_field_new_alike(out, TRUE);
+ fzb = gwy_data_field_new_alike(out, TRUE);
+ fzc = gwy_data_field_new_alike(out, TRUE);
+ fz = gwy_data_field_new_alike(out, TRUE);
+
+
+ mfm_perpendicular_stray_field(mfield, out, args->height*1e-9-dd, args->thickness*1e-9, args->sigma,
+ args->walls, args->wall_a*1e-12, args->wall_kn*1e3);
+ mfm_perpendicular_force_from_field(out, fza,
+ args->probe, args->mtip*1e3,
+ args->bx*1e-9, args->by*1e-9, args->length*1e-9);
+
+ mfm_perpendicular_stray_field(mfield, out, args->height*1e-9, args->thickness*1e-9, args->sigma,
+ args->walls, args->wall_a*1e-12, args->wall_kn*1e3);
+ mfm_perpendicular_force_from_field(out, fzb,
+ args->probe, args->mtip*1e3,
+ args->bx*1e-9, args->by*1e-9, args->length*1e-9);
+
+ mfm_perpendicular_stray_field(mfield, out, args->height*1e-9+dd, args->thickness*1e-9, args->sigma,
+ args->walls, args->wall_a*1e-12, args->wall_kn*1e3);
+ mfm_perpendicular_force_from_field(out, fzc,
+ args->probe, args->mtip*1e3,
+ args->bx*1e-9, args->by*1e-9, args->length*1e-9);
+
+ gwy_data_field_multiply(fzb, 2.0);
+ gwy_data_field_sum_fields(fz, fza, fzc);
+ gwy_data_field_subtract_fields(fz, fz, fzb);
+
+ gwy_data_field_multiply(fz, 1.0/(dd*dd));
+
+ gwy_object_unref(fza);
+ gwy_object_unref(fzb);
+ gwy_object_unref(fzc);
+
+ gwy_data_field_copy(fz, out, FALSE);
+ gwy_object_unref(fz);
+
+ }
+}
+
+
+static void
+preview(MfmFieldControls *controls,
+ MfmFieldArgs *args)
+{
+ mfm_field_do(args, controls->mfield, controls->result);
+ gwy_data_field_data_changed(controls->result);
+}
+
+
+static void
+wall_a_changed(GtkAdjustment *adj, MfmFieldControls *controls)
+{
+ controls->args->wall_a = gtk_adjustment_get_value(adj);
+ if (controls->args->update) preview(controls, controls->args);
+}
+
+static void
+wall_kn_changed(GtkAdjustment *adj, MfmFieldControls *controls)
+{
+ controls->args->wall_kn = gtk_adjustment_get_value(adj);
+ if (controls->args->update) preview(controls, controls->args);
+}
+
+static void
+height_changed(GtkAdjustment *adj, MfmFieldControls *controls)
+{
+ controls->args->height = gtk_adjustment_get_value(adj);
+ if (controls->args->update) preview(controls, controls->args);
+}
+
+static void
+thickness_changed(GtkAdjustment *adj, MfmFieldControls *controls)
+{
+ controls->args->thickness = gtk_adjustment_get_value(adj);
+ if (controls->args->update) preview(controls, controls->args);
+}
+
+static void
+mtip_changed(GtkAdjustment *adj, MfmFieldControls *controls)
+{
+ controls->args->mtip = gtk_adjustment_get_value(adj);
+ if (controls->args->update) preview(controls, controls->args);
+}
+
+static void
+bx_changed(GtkAdjustment *adj, MfmFieldControls *controls)
+{
+ controls->args->bx = gtk_adjustment_get_value(adj);
+ if (controls->args->update) preview(controls, controls->args);
+}
+
+static void
+by_changed(GtkAdjustment *adj, MfmFieldControls *controls)
+{
+ controls->args->by = gtk_adjustment_get_value(adj);
+ if (controls->args->update) preview(controls, controls->args);
+}
+
+static void
+length_changed(GtkAdjustment *adj, MfmFieldControls *controls)
+{
+ controls->args->length = gtk_adjustment_get_value(adj);
+ if (controls->args->update) preview(controls, controls->args);
+}
+
+static void
+update_changed(GtkToggleButton *button, MfmFieldControls *controls)
+{
+ controls->args->update = gtk_toggle_button_get_active(button);
+ if (controls->args->update) preview(controls, controls->args);
+}
+
+static void
+walls_changed(GtkToggleButton *button, MfmFieldControls *controls)
+{
+ controls->args->walls = gtk_toggle_button_get_active(button);
+ update_sensitivity(controls);
+ if (controls->args->update) preview(controls, controls->args);
+}
+
+static void
+probe_changed(GtkComboBox *combo,
+ MfmFieldControls *controls)
+{
+ controls->args->probe = gwy_enum_combo_box_get_active(combo);
+ update_sensitivity(controls);
+ if (controls->args->update) preview(controls, controls->args);
+}
+
+static void
+out_changed(GtkComboBox *combo,
+ MfmFieldControls *controls)
+{
+ controls->args->out = gwy_enum_combo_box_get_active(combo);
+ update_sensitivity(controls);
+ if (controls->args->update) preview(controls, controls->args);
+}
+
+
+static void
+update_sensitivity(MfmFieldControls *controls)
+{
+ gboolean is_walls = controls->args->walls;
+ gboolean is_force = TRUE, is_bar = FALSE;
+
+ if (controls->args->out == GWY_MFM_FIELD_OUTPUT_FIELD)
+ is_force = FALSE;
+ if (controls->args->probe == GWY_MFM_PROBE_BAR)
+ is_bar = TRUE;
+ if (!is_force)
+ is_bar = FALSE;
+
+ gtk_widget_set_sensitive(controls->probe, is_force);
+
+ gwy_table_hscale_set_sensitive(controls->wall_a, is_walls);
+ gwy_table_hscale_set_sensitive(controls->wall_kn, is_walls);
+
+ gwy_table_hscale_set_sensitive(controls->mtip, is_bar);
+ gwy_table_hscale_set_sensitive(controls->bx, is_bar);
+ gwy_table_hscale_set_sensitive(controls->by, is_bar);
+ gwy_table_hscale_set_sensitive(controls->length, is_bar);
+
+}
+
+static void
+mfm_field_dialog_update(MfmFieldControls *controls,
+ MfmFieldArgs *args)
+{
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls->walls),
+ args->walls);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls->update),
+ args->update);
+ gwy_enum_combo_box_set_active(GTK_COMBO_BOX(controls->out),
+ args->out);
+ gwy_enum_combo_box_set_active(GTK_COMBO_BOX(controls->probe),
+ args->probe);
+
+ gtk_adjustment_set_value(GTK_ADJUSTMENT(controls->height), args->height);
+ gtk_adjustment_set_value(GTK_ADJUSTMENT(controls->thickness), args->thickness);
+ gtk_adjustment_set_value(GTK_ADJUSTMENT(controls->sigma), args->sigma);
+ gtk_adjustment_set_value(GTK_ADJUSTMENT(controls->wall_a), args->wall_a);
+ gtk_adjustment_set_value(GTK_ADJUSTMENT(controls->wall_kn), args->wall_kn);
+ gtk_adjustment_set_value(GTK_ADJUSTMENT(controls->mtip), args->mtip);
+ gtk_adjustment_set_value(GTK_ADJUSTMENT(controls->bx), args->bx);
+ gtk_adjustment_set_value(GTK_ADJUSTMENT(controls->by), args->by);
+ gtk_adjustment_set_value(GTK_ADJUSTMENT(controls->length), args->length);
+
+}
+static const gchar walls_key[] = "/module/mfm_field/walls";
+static const gchar update_key[] = "/module/mfm_field/update";
+static const gchar out_key[] = "/module/mfm_field/out";
+static const gchar probe_key[] = "/module/mfm_field/probe";
+static const gchar height_key[] = "/module/mfm_field/height";
+static const gchar thickness_key[] = "/module/mfm_field/thickness";
+static const gchar sigma_key[] = "/module/mfm_field/sigma";
+static const gchar wall_a_key[] = "/module/mfm_field/wall_a";
+static const gchar wall_kn_key[] = "/module/mfm_field/wall_kn";
+static const gchar mtip_key[] = "/module/mfm_field/mtip";
+static const gchar bx_key[] = "/module/mfm_field/bx";
+static const gchar by_key[] = "/module/mfm_field/by";
+static const gchar length_key[] = "/module/mfm_field/length";
+
+static void
+mfm_field_sanitize_args(MfmFieldArgs *args)
+{
+ args->walls = !!args->walls;
+ args->update = !!args->update;
+ args->out = CLAMP(args->out, 0, GWY_MFM_FIELD_OUTPUT_FORCE_DDX);
+ args->probe = CLAMP(args->probe, 0, GWY_MFM_PROBE_BAR);
+}
+
+static void
+mfm_field_load_args(GwyContainer *container,
+ MfmFieldArgs *args)
+{
+ *args = mfm_field_defaults;
+
+ gwy_container_gis_boolean_by_name(container, walls_key,
+ &args->walls);
+ gwy_container_gis_boolean_by_name(container, update_key,
+ &args->update);
+ gwy_container_gis_enum_by_name(container, probe_key, &args->probe);
+ gwy_container_gis_enum_by_name(container, out_key, &args->out);
+ gwy_container_gis_double_by_name(container, height_key, &args->height);
+ gwy_container_gis_double_by_name(container, thickness_key, &args->thickness);
+ gwy_container_gis_double_by_name(container, sigma_key, &args->sigma);
+ gwy_container_gis_double_by_name(container, wall_a_key, &args->wall_a);
+ gwy_container_gis_double_by_name(container, wall_kn_key, &args->wall_kn);
+ gwy_container_gis_double_by_name(container, mtip_key, &args->mtip);
+ gwy_container_gis_double_by_name(container, bx_key, &args->bx);
+ gwy_container_gis_double_by_name(container, by_key, &args->by);
+ gwy_container_gis_double_by_name(container, length_key, &args->length);
+
+
+ mfm_field_sanitize_args(args);
+}
+
+static void
+mfm_field_save_args(GwyContainer *container,
+ MfmFieldArgs *args)
+{
+ gwy_container_set_boolean_by_name(container, walls_key,
+ args->walls);
+ gwy_container_set_boolean_by_name(container, update_key,
+ args->update);
+ gwy_container_set_enum_by_name(container, probe_key, args->probe);
+ gwy_container_set_enum_by_name(container, out_key, args->out);
+ gwy_container_set_double_by_name(container, height_key, args->height);
+ gwy_container_set_double_by_name(container, thickness_key, args->thickness);
+ gwy_container_set_double_by_name(container, sigma_key, args->sigma);
+ gwy_container_set_double_by_name(container, wall_a_key, args->wall_a);
+ gwy_container_set_double_by_name(container, wall_kn_key, args->wall_kn);
+ gwy_container_set_double_by_name(container, mtip_key, args->mtip);
+ gwy_container_set_double_by_name(container, bx_key, args->bx);
+ gwy_container_set_double_by_name(container, by_key, args->by);
+ gwy_container_set_double_by_name(container, length_key, args->length);
+
+}
+
+/* vim: set cin et ts=4 sw=4 cino=>1s,e0,n0,f0,{0,}0,^0,\:1s,=0,g1s,h0,t0,+1s,c3,(0,u0 : */
diff --git a/modules/process/mfm_findshift.c b/modules/process/mfm_findshift.c
new file mode 100644
index 0000000..7e7321a
--- /dev/null
+++ b/modules/process/mfm_findshift.c
@@ -0,0 +1,404 @@
+/*
+ * @(#) $Id: mfm_findshift.c 19948 2017-06-22 14:05:41Z yeti-dn $
+ * Copyright (C) 2017 David Necas (Yeti), Petr Klapetek.
+ * E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "config.h"
+#include <gtk/gtk.h>
+#include <libgwyddion/gwymacros.h>
+#include <libgwyddion/gwymath.h>
+#include <libprocess/gwyprocesstypes.h>
+#include <libprocess/arithmetic.h>
+#include <libprocess/inttrans.h>
+#include <libprocess/stats.h>
+#include <libgwydgets/gwydgetutils.h>
+#include <libgwydgets/gwycombobox.h>
+#include <libgwydgets/gwystock.h>
+#include <libgwymodule/gwymodule-process.h>
+#include <app/gwymoduleutils.h>
+#include <app/gwyapp.h>
+#include "mfmops.h"
+#include "preview.h"
+
+#define MFM_FINDSHIFT_RUN_MODES (GWY_RUN_IMMEDIATE | GWY_RUN_INTERACTIVE)
+
+typedef struct {
+ gdouble start;
+ gdouble stop;
+ GwyAppDataId op1;
+ GwyAppDataId op2;
+} MfmFindshiftArgs;
+
+typedef struct {
+ MfmFindshiftArgs *args;
+ GtkObject *start;
+ GtkObject *stop;
+ GtkWidget *chooser_op2;
+} MfmFindshiftControls;
+
+static gboolean module_register (void);
+static void mfm_findshift (GwyContainer *data,
+ GwyRunType run);
+static gboolean mfm_findshift_dialog (MfmFindshiftArgs *args);
+
+static void mfm_findshift_load_args (GwyContainer *container,
+ MfmFindshiftArgs *args);
+static void mfm_findshift_save_args (GwyContainer *container,
+ MfmFindshiftArgs *args);
+static void mfm_findshift_sanitize_args (MfmFindshiftArgs *args);
+static void start_changed (GtkAdjustment *adj,
+ MfmFindshiftControls *controls);
+static void stop_changed (GtkAdjustment *adj,
+ MfmFindshiftControls *controls);
+static void mfm_findshift_dialog_update (MfmFindshiftControls *controls,
+ MfmFindshiftArgs *args);
+static void mfm_findshift_data_changed (GwyDataChooser *chooser,
+ GwyAppDataId *object);
+static gboolean mfm_findshift_data_filter (GwyContainer *data,
+ gint id,
+ gpointer user_data);
+
+
+static GwyAppDataId op2_id = GWY_APP_DATA_ID_NONE;
+
+static const MfmFindshiftArgs mfm_findshift_defaults = {
+ 10, 20, GWY_APP_DATA_ID_NONE, GWY_APP_DATA_ID_NONE,
+};
+
+
+static GwyModuleInfo module_info = {
+ GWY_MODULE_ABI_VERSION,
+ &module_register,
+ N_("Lift height difference estimation from data blur"),
+ "Petr Klapetek <klapetek at gwyddion.net>",
+ "1.1",
+ "David Nečas (Yeti) & Petr Klapetek",
+ "2017",
+};
+
+GWY_MODULE_QUERY2(module_info, mfm_findshift)
+
+static gboolean
+module_register(void)
+{
+ gwy_process_func_register("mfm_findshift",
+ (GwyProcessFunc)&mfm_findshift,
+ N_("/SPM M_odes/_MFM/_Estimate Shift in Z..."),
+ NULL,
+ MFM_FINDSHIFT_RUN_MODES,
+ GWY_MENU_FLAG_DATA,
+ N_("Estimate lift height difference in MFM data"));
+
+ return TRUE;
+}
+
+static void
+mfm_findshift(GwyContainer *data, GwyRunType run)
+{
+ GwyDataField *dfield1, *dfield2, *out;
+ GtkWidget *dialog;
+ MfmFindshiftArgs args;
+ gboolean ok;
+ gint newid;
+ GQuark quark;
+ GwyContainer *mydata;
+ gdouble diff, mindiff, shift, minshift=0;
+ gdouble shiftstep, shiftstart, shiftstop;
+ gint level;
+
+ g_return_if_fail(run & MFM_FINDSHIFT_RUN_MODES);
+
+ mfm_findshift_load_args(gwy_app_settings_get(), &args);
+
+ gwy_app_data_browser_get_current(GWY_APP_DATA_FIELD_ID, &args.op1.id,
+ GWY_APP_CONTAINER_ID, &args.op1.datano,
+ 0);
+
+ if (run == GWY_RUN_INTERACTIVE) {
+ ok = mfm_findshift_dialog(&args);
+ mfm_findshift_save_args(gwy_app_settings_get(), &args);
+ if (!ok)
+ return;
+ }
+
+ //do the computation
+
+ mydata = gwy_app_data_browser_get(args.op1.datano);
+ quark = gwy_app_get_data_key_for_id(args.op1.id);
+ dfield1 = GWY_DATA_FIELD(gwy_container_get_object(mydata, quark));
+
+ mydata = gwy_app_data_browser_get(args.op2.datano);
+ quark = gwy_app_get_data_key_for_id(args.op2.id);
+ dfield2 = GWY_DATA_FIELD(gwy_container_get_object(mydata, quark));
+
+
+ out = gwy_data_field_new_alike(dfield1, FALSE);
+
+ shiftstart = args.start*1e-9;
+ shiftstop = args.stop*1e-9;
+
+ if (shiftstop<shiftstart) {
+ shift = shiftstart;
+ shiftstart = shiftstop;
+ shiftstop = shift;
+ }
+
+ //simple brute force search for beginning
+ shiftstep = (shiftstop-shiftstart)/4.0;
+
+ gwy_app_wait_start(gwy_app_find_window_for_channel(data, args.op1.id),
+ _("Searching..."));
+
+ for (level = 0; level < 10; level++) {
+ mindiff = G_MAXDOUBLE;
+ for (shift = shiftstart; shift <= shiftstop; shift += shiftstep) {
+ mfm_shift_z(dfield1, out, -shift);
+ gwy_data_field_subtract_fields(out, dfield2, out);
+ diff = gwy_data_field_get_rms(out);
+
+ if (diff<mindiff) {
+ minshift = shift;
+ mindiff = diff;
+ }
+ }
+
+ shiftstart = minshift - shiftstep;
+ shiftstop = minshift + shiftstep;
+ shiftstep = (shiftstop - shiftstart)/5.0;
+
+ gwy_app_wait_set_fraction((gdouble)level/10.0);
+
+ if (shiftstep < 0.1e-9)
+ break;
+ }
+
+ dialog = gtk_message_dialog_new(gwy_app_find_window_for_channel(data, args.op1.id),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_INFO,
+ GTK_BUTTONS_CLOSE,
+ "%s %g nm",
+ _("Estimated shift:"), minshift*1e9);
+ gtk_dialog_run(GTK_DIALOG(dialog));
+ gtk_widget_destroy(dialog);
+
+ mfm_shift_z(dfield1, out, -minshift);
+ gwy_data_field_subtract_fields(out, dfield2, out);
+
+ gwy_app_wait_finish();
+
+ newid = gwy_app_data_browser_add_data_field(out, data, TRUE);
+ gwy_app_sync_data_items(data, data, args.op1.id, newid, FALSE,
+ GWY_DATA_ITEM_GRADIENT,
+ GWY_DATA_ITEM_MASK_COLOR,
+ 0);
+
+ gwy_app_set_data_field_title(data, newid, _("Shifted field difference"));
+ gwy_app_channel_log_add_proc(data, args.op1.id, newid);
+
+ g_object_unref(out);
+}
+
+
+static gboolean
+mfm_findshift_dialog(MfmFindshiftArgs *args)
+{
+ GtkWidget *dialog, *table;
+ GwyDataChooser *chooser;
+ MfmFindshiftControls controls;
+ gint response, row;
+
+ controls.args = args;
+
+ dialog = gtk_dialog_new_with_buttons(_("Estimate Lift Height Shift"),
+ NULL, 0, NULL);
+ gtk_dialog_add_button(GTK_DIALOG(dialog), _("_Reset"), RESPONSE_RESET);
+ gtk_dialog_add_button(GTK_DIALOG(dialog),
+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL);
+ gtk_dialog_add_button(GTK_DIALOG(dialog),
+ GTK_STOCK_OK, GTK_RESPONSE_OK);
+ gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK);
+ gwy_help_add_to_proc_dialog(GTK_DIALOG(dialog), GWY_HELP_DEFAULT);
+
+ table = gtk_table_new(7, 3, FALSE);
+ gtk_table_set_row_spacings(GTK_TABLE(table), 2);
+ gtk_table_set_col_spacings(GTK_TABLE(table), 6);
+ gtk_container_set_border_width(GTK_CONTAINER(table), 4);
+ gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), table,
+ FALSE, FALSE, 4);
+ row = 0;
+
+ controls.chooser_op2 = gwy_data_chooser_new_channels();
+ chooser = GWY_DATA_CHOOSER(controls.chooser_op2);
+ g_object_set_data(G_OBJECT(chooser), "dialog", dialog);
+ gwy_data_chooser_set_active_id(chooser, &args->op2);
+ gwy_data_chooser_set_filter(chooser,
+ mfm_findshift_data_filter, &args->op1, NULL);
+ g_signal_connect(chooser, "changed",
+ G_CALLBACK(mfm_findshift_data_changed), &args->op2);
+ mfm_findshift_data_changed(chooser, &args->op2);
+ gwy_table_attach_adjbar(table, row, _("Data to compare:"), NULL,
+ GTK_OBJECT(chooser), GWY_HSCALE_WIDGET_NO_EXPAND);
+ gtk_table_set_row_spacing(GTK_TABLE(table), row, 8);
+ row++;
+
+ controls.start = gtk_adjustment_new(args->start, -1000, 1000, 1, 10, 0);
+ gwy_table_attach_adjbar(table, row, _("Search _from:"), "nm",
+ controls.start, GWY_HSCALE_SQRT);
+ g_object_set_data(G_OBJECT(controls.start), "controls", &controls);
+ g_signal_connect(controls.start, "value-changed",
+ G_CALLBACK(start_changed), &controls);
+ row++;
+
+ controls.stop = gtk_adjustment_new(args->stop, -1000, 1000, 1, 10, 0);
+ gwy_table_attach_adjbar(table, row, _("Search _to:"), "nm",
+ controls.stop, GWY_HSCALE_SQRT);
+ g_object_set_data(G_OBJECT(controls.stop), "controls", &controls);
+ g_signal_connect(controls.stop, "value-changed",
+ G_CALLBACK(stop_changed), &controls);
+ row++;
+
+ gtk_widget_show_all(dialog);
+ do {
+ response = gtk_dialog_run(GTK_DIALOG(dialog));
+ switch (response) {
+ case GTK_RESPONSE_CANCEL:
+ case GTK_RESPONSE_DELETE_EVENT:
+ gtk_widget_destroy(dialog);
+ case GTK_RESPONSE_NONE:
+ return FALSE;
+ break;
+
+ case GTK_RESPONSE_OK:
+ break;
+
+ case RESPONSE_RESET:
+ {
+ *args = mfm_findshift_defaults;
+ mfm_findshift_dialog_update(&controls, args);
+ }
+ break;
+
+ default:
+ g_assert_not_reached();
+ break;
+ }
+ } while (response != GTK_RESPONSE_OK);
+
+ gtk_widget_destroy(dialog);
+
+ return TRUE;
+}
+
+
+static void
+start_changed(GtkAdjustment *adj, MfmFindshiftControls *controls)
+{
+ controls->args->start = gtk_adjustment_get_value(adj);
+}
+
+static void
+stop_changed(GtkAdjustment *adj, MfmFindshiftControls *controls)
+{
+ controls->args->stop = gtk_adjustment_get_value(adj);
+}
+
+static void
+mfm_findshift_data_changed(GwyDataChooser *chooser,
+ GwyAppDataId *object)
+{
+ GtkWidget *dialog;
+
+ gwy_data_chooser_get_active_id(chooser, object);
+ gwy_debug("data: %d %d", object->datano, object->id);
+
+ dialog = g_object_get_data(G_OBJECT(chooser), "dialog");
+ g_assert(GTK_IS_DIALOG(dialog));
+ gtk_dialog_set_response_sensitive(GTK_DIALOG(dialog), GTK_RESPONSE_OK,
+ object->datano);
+}
+
+static gboolean
+mfm_findshift_data_filter(GwyContainer *data,
+ gint id,
+ gpointer user_data)
+{
+
+ GwyAppDataId *object = (GwyAppDataId*)user_data;
+ GwyDataField *op1, *op2;
+ GQuark quark;
+
+ quark = gwy_app_get_data_key_for_id(id);
+ op1 = GWY_DATA_FIELD(gwy_container_get_object(data, quark));
+
+ data = gwy_app_data_browser_get(object->datano);
+ quark = gwy_app_get_data_key_for_id(object->id);
+ op2 = GWY_DATA_FIELD(gwy_container_get_object(data, quark));
+
+ /* It does not make sense to crosscorrelate with itself */
+ if (op1 == op2)
+ return FALSE;
+
+ return !gwy_data_field_check_compatibility(op1, op2,
+ GWY_DATA_COMPATIBILITY_RES
+ | GWY_DATA_COMPATIBILITY_REAL
+ | GWY_DATA_COMPATIBILITY_LATERAL
+ | GWY_DATA_COMPATIBILITY_VALUE);
+}
+
+static void
+mfm_findshift_dialog_update(MfmFindshiftControls *controls,
+ MfmFindshiftArgs *args)
+{
+ gtk_adjustment_set_value(GTK_ADJUSTMENT(controls->start), args->start);
+ gtk_adjustment_set_value(GTK_ADJUSTMENT(controls->stop), args->stop);
+
+}
+
+static const gchar start_key[] = "/module/mfm_findshift/start";
+static const gchar stop_key[] = "/module/mfm_findshift/stop";
+
+static void
+mfm_findshift_sanitize_args(MfmFindshiftArgs *args)
+{
+ gwy_app_data_id_verify_channel(&args->op2);
+}
+
+static void
+mfm_findshift_load_args(GwyContainer *container,
+ MfmFindshiftArgs *args)
+{
+ *args = mfm_findshift_defaults;
+
+ gwy_container_gis_double_by_name(container, start_key, &args->start);
+ gwy_container_gis_double_by_name(container, stop_key, &args->stop);
+ args->op2 = op2_id;
+
+ mfm_findshift_sanitize_args(args);
+}
+
+static void
+mfm_findshift_save_args(GwyContainer *container,
+ MfmFindshiftArgs *args)
+{
+ op2_id = args->op2;
+ gwy_container_set_double_by_name(container, start_key, args->start);
+ gwy_container_set_double_by_name(container, stop_key, args->stop);
+}
+
+/* vim: set cin et ts=4 sw=4 cino=>1s,e0,n0,f0,{0,}0,^0,\:1s,=0,g1s,h0,t0,+1s,c3,(0,u0 : */
diff --git a/modules/process/mfm_parallel.c b/modules/process/mfm_parallel.c
new file mode 100644
index 0000000..e502b25
--- /dev/null
+++ b/modules/process/mfm_parallel.c
@@ -0,0 +1,937 @@
+/*
+ * @(#) $Id: mfm_parallel.c 19948 2017-06-22 14:05:41Z yeti-dn $
+ * Copyright (C) 2017 David Necas (Yeti), Petr Klapetek.
+ * E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "config.h"
+#include <string.h>
+#include <gtk/gtk.h>
+#include <libgwyddion/gwymacros.h>
+#include <libgwyddion/gwymath.h>
+#include <libgwyddion/gwyrandgenset.h>
+#include <libprocess/stats.h>
+#include <libprocess/arithmetic.h>
+#include <libgwydgets/gwyradiobuttons.h>
+#include <libgwydgets/gwystock.h>
+#include <libgwymodule/gwymodule-process.h>
+#include <app/gwyapp.h>
+#include "preview.h"
+#include "dimensions.h"
+#include "mfmops.h"
+
+#define MFM_PARALLEL_RUN_MODES (GWY_RUN_IMMEDIATE | GWY_RUN_INTERACTIVE)
+
+enum {
+ PAGE_DIMENSIONS = 0,
+ PAGE_GENERATOR = 1,
+ PAGE_NPAGES
+};
+
+typedef enum {
+ GWY_MFM_PARALLEL_OUTPUT_HX = 0,
+ GWY_MFM_PARALLEL_OUTPUT_HZ = 1,
+ GWY_MFM_PARALLEL_OUTPUT_FORCE = 2,
+ GWY_MFM_PARALLEL_OUTPUT_FORCE_DX = 3,
+ GWY_MFM_PARALLEL_OUTPUT_FORCE_DDX = 4
+} GwyMfmParallelOutputType;
+
+typedef struct {
+ gint active_page;
+ gboolean update;
+ GwyMfmParallelOutputType out;
+ GwyMfmProbeType probe;
+ gdouble height;
+ gdouble thickness;
+ gdouble magnetisation;
+ gdouble size_a;
+ gdouble size_b;
+ gdouble size_c;
+ gdouble mtip;
+ gdouble bx;
+ gdouble by;
+ gdouble length;
+
+} MfmParallelArgs;
+
+typedef struct {
+ MfmParallelArgs *args;
+ GwyDimensions *dims;
+ GtkWidget *dialog;
+ GtkWidget *view;
+ GtkWidget *update;
+ GtkWidget *update_now;
+ GtkWidget *out;
+ GtkWidget *probe;
+ GtkObject *height;
+ GtkObject *thickness;
+ GtkObject *magnetisation;
+ GtkObject *mtip;
+ GtkObject *bx;
+ GtkObject *by;
+ GtkObject *length;
+ GtkObject *size_a;
+ GtkObject *size_b;
+ GtkObject *size_c;
+ GtkTable *table;
+ GwyContainer *mydata;
+ GwyDataField *surface;
+ gdouble pxsize;
+ gdouble zscale;
+ gboolean in_init;
+ gulong sid;
+} MfmParallelControls;
+
+static gboolean module_register (void);
+static void mfm_parallel (GwyContainer *data,
+ GwyRunType run);
+static void run_noninteractive (MfmParallelArgs *args,
+ const GwyDimensionArgs *dimsargs,
+ GwyContainer *data,
+ GwyDataField *dfield,
+ gint oldid,
+ GQuark quark);
+static gboolean mfm_parallel_dialog (MfmParallelArgs *args,
+ GwyDimensionArgs *dimsargs,
+ GwyContainer *data,
+ GwyDataField *dfield,
+ gint id);
+static void update_controls (MfmParallelControls *controls,
+ MfmParallelArgs *args);
+static void page_switched (MfmParallelControls *controls,
+ GtkNotebookPage *page,
+ gint pagenum);
+static void update_values (MfmParallelControls *controls);
+static void mfm_parallel_invalidate (MfmParallelControls *controls);
+static gboolean preview_gsource (gpointer user_data);
+static void preview (MfmParallelControls *controls);
+static void mfm_parallel_do (const MfmParallelArgs *args,
+ const GwyDimensionArgs *dimsargs,
+ GwyDataField *dfield);
+static void mfm_parallel_load_args (GwyContainer *container,
+ MfmParallelArgs *args,
+ GwyDimensionArgs *dimsargs);
+static void mfm_parallel_save_args (GwyContainer *container,
+ const MfmParallelArgs *args,
+ const GwyDimensionArgs *dimsargs);
+static void probe_changed (GtkComboBox *combo,
+ MfmParallelControls *controls);
+static void out_changed (GtkComboBox *combo,
+ MfmParallelControls *controls);
+
+static void update_sensitivity (MfmParallelControls *controls);
+static void xyunits_changed (MfmParallelControls *controls);
+
+
+
+#define GWY_SYNTH_CONTROLS MfmParallelControls
+#define GWY_SYNTH_INVALIDATE(controls) \
+ mfm_parallel_invalidate(controls)
+
+#include "synth.h"
+
+
+static const MfmParallelArgs mfm_parallel_defaults = {
+ PAGE_DIMENSIONS, TRUE,
+ GWY_MFM_PARALLEL_OUTPUT_HZ,
+ GWY_MFM_PROBE_CHARGE,
+ 100, 100, 1,
+ 200, 200, 10, 1,
+ 10, 10, 500,
+
+};
+
+static const GwyDimensionArgs dims_defaults = MFM_DIMENSION_ARGS_INIT;
+
+
+static GwyModuleInfo module_info = {
+ GWY_MODULE_ABI_VERSION,
+ &module_register,
+ N_("Simulation of parallel magnetic media"),
+ "Petr Klapetek <klapetek at gwyddion.net>",
+ "1.1",
+ "David Nečas (Yeti) & Petr Klapetek",
+ "2017",
+};
+
+GWY_MODULE_QUERY2(module_info, mfm_parallel)
+
+static gboolean
+module_register(void)
+{
+ gwy_process_func_register("mfm_parallel",
+ (GwyProcessFunc)&mfm_parallel,
+ N_("/SPM M_odes/_MFM/Para_llel Media Field..."),
+ NULL,
+ MFM_PARALLEL_RUN_MODES,
+ 0,
+ N_("Simulate stray field above parallel magnetic medium"));
+
+ return TRUE;
+}
+
+
+static void
+mfm_parallel(GwyContainer *data, GwyRunType run)
+{
+ MfmParallelArgs args;
+ GwyDimensionArgs dimsargs;
+ GwyDataField *dfield;
+ GQuark quark;
+ gint id;
+
+ g_return_if_fail(run & MFM_PARALLEL_RUN_MODES);
+ mfm_parallel_load_args(gwy_app_settings_get(), &args, &dimsargs);
+
+ //this should be always in meters at start
+ dimsargs.xyunits = g_strdup("m");
+
+ gwy_app_data_browser_get_current(GWY_APP_DATA_FIELD, &dfield,
+ GWY_APP_DATA_FIELD_ID, &id,
+ GWY_APP_DATA_FIELD_KEY, &quark,
+ 0);
+
+ if (run == GWY_RUN_IMMEDIATE
+ || mfm_parallel_dialog(&args, &dimsargs, data, dfield, id))
+ run_noninteractive(&args, &dimsargs, data, dfield, id, quark);
+
+ if (run == GWY_RUN_INTERACTIVE)
+ mfm_parallel_save_args(gwy_app_settings_get(), &args, &dimsargs);
+
+ gwy_dimensions_free_args(&dimsargs);
+}
+
+static void
+run_noninteractive(MfmParallelArgs *args,
+ const GwyDimensionArgs *dimsargs,
+ GwyContainer *data,
+ GwyDataField *dfield,
+ gint oldid,
+ GQuark quark)
+{
+ GwySIUnit *siunit;
+ gboolean replace = dimsargs->replace && dfield;
+ gboolean add = dimsargs->add && dfield;
+ gint newid;
+
+ if (replace) {
+ /* Always take a reference so that we can always unref. */
+ g_object_ref(dfield);
+
+ gwy_app_undo_qcheckpointv(data, 1, &quark);
+ if (!add)
+ gwy_data_field_clear(dfield);
+
+ gwy_app_channel_log_add_proc(data, oldid, oldid);
+ }
+ else {
+ if (add)
+ dfield = gwy_data_field_duplicate(dfield);
+ else {
+ gdouble mag = pow10(dimsargs->xypow10) * dimsargs->measure;
+ dfield = gwy_data_field_new(dimsargs->xres, dimsargs->yres,
+ mag*dimsargs->xres, mag*dimsargs->yres,
+ TRUE);
+
+ siunit = gwy_data_field_get_si_unit_xy(dfield);
+ gwy_si_unit_set_from_string(siunit, dimsargs->xyunits);
+
+ siunit = gwy_data_field_get_si_unit_z(dfield);
+ gwy_si_unit_set_from_string(siunit, dimsargs->zunits);
+ }
+ }
+
+ mfm_parallel_do(args, dimsargs, dfield);
+
+ if (replace)
+ gwy_data_field_data_changed(dfield);
+ else {
+ if (data) {
+ newid = gwy_app_data_browser_add_data_field(dfield, data, TRUE);
+ if (oldid != -1)
+ gwy_app_sync_data_items(data, data, oldid, newid, FALSE,
+ GWY_DATA_ITEM_GRADIENT,
+ 0);
+ }
+ else {
+ newid = 0;
+ data = gwy_container_new();
+ gwy_container_set_object(data, gwy_app_get_data_key_for_id(newid),
+ dfield);
+ gwy_app_data_browser_add(data);
+ gwy_app_data_browser_reset_visibility(data,
+ GWY_VISIBILITY_RESET_SHOW_ALL);
+ g_object_unref(data);
+ }
+
+ gwy_app_set_data_field_title(data, newid, _("Simulated field"));
+ gwy_app_channel_log_add_proc(data, add ? oldid : -1, newid);
+ }
+ g_object_unref(dfield);
+}
+
+static gboolean
+mfm_parallel_dialog(MfmParallelArgs *args,
+ GwyDimensionArgs *dimsargs,
+ GwyContainer *data,
+ GwyDataField *dfield_template,
+ gint id)
+{
+ GtkWidget *dialog, *table, *vbox, *hbox, *notebook;
+ MfmParallelControls controls;
+ GwyDataField *dfield;
+ gboolean finished;
+ gint response;
+ gint row;
+ static const GwyEnum mfm_parallel_outputs[] = {
+ {
+ "H<sub>x</sub>",
+ GWY_MFM_PARALLEL_OUTPUT_HX,
+ },
+ {
+ "H<sub>z</sub>",
+ GWY_MFM_PARALLEL_OUTPUT_HZ,
+ },
+ {
+ "F<sub>z</sub>",
+ GWY_MFM_PARALLEL_OUTPUT_FORCE,
+ },
+ {
+ "dF<sub>z</sub>/dz",
+ GWY_MFM_PARALLEL_OUTPUT_FORCE_DX,
+ },
+ {
+ "d<sup>2</sup>F<sub>z</sub>/dz<sup>2</sup>",
+ GWY_MFM_PARALLEL_OUTPUT_FORCE_DDX,
+ },
+ };
+ static const GwyEnum mfm_parallel_probes[] = {
+ { N_("Point charge"), GWY_MFM_PROBE_CHARGE, },
+ { N_("Bar"), GWY_MFM_PROBE_BAR, },
+ };
+
+ gwy_clear(&controls, 1);
+ controls.in_init = TRUE;
+ controls.args = args;
+ dialog = gtk_dialog_new_with_buttons(_("Parallel Media Stray Field"),
+ NULL, 0,
+ _("_Reset"), RESPONSE_RESET,
+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+ GTK_STOCK_OK, GTK_RESPONSE_OK,
+ NULL);
+ gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK);
+ gwy_help_add_to_proc_dialog(GTK_DIALOG(dialog), GWY_HELP_DEFAULT);
+ controls.dialog = dialog;
+
+ hbox = gtk_hbox_new(FALSE, 2);
+ gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), hbox,
+ FALSE, FALSE, 4);
+
+ vbox = gtk_vbox_new(FALSE, 4);
+ gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 4);
+
+ controls.mydata = gwy_container_new();
+ dfield = gwy_data_field_new(PREVIEW_SIZE, PREVIEW_SIZE,
+ pow10(dimsargs->xypow10)*dimsargs->measure*PREVIEW_SIZE,
+ pow10(dimsargs->xypow10)*dimsargs->measure*PREVIEW_SIZE,
+ TRUE);
+ gwy_container_set_object_by_name(controls.mydata, "/0/data", dfield);
+ if (dfield_template) {
+ gwy_app_sync_data_items(data, controls.mydata, id, 0, FALSE,
+ GWY_DATA_ITEM_PALETTE,
+ 0);
+ controls.surface = gwy_synth_surface_for_preview(dfield_template,
+ PREVIEW_SIZE);
+ controls.zscale = gwy_data_field_get_rms(dfield_template);
+ }
+ controls.view = create_preview(controls.mydata, 0, PREVIEW_SIZE, FALSE);
+ gtk_box_pack_start(GTK_BOX(vbox), controls.view, FALSE, FALSE, 0);
+
+ gtk_box_pack_start(GTK_BOX(vbox),
+ gwy_synth_instant_updates_new(&controls,
+ &controls.update_now,
+ &controls.update,
+ &args->update),
+ FALSE, FALSE, 0);
+ g_signal_connect_swapped(controls.update_now, "clicked",
+ G_CALLBACK(preview), &controls);
+
+
+
+ notebook = gtk_notebook_new();
+ gtk_box_pack_start(GTK_BOX(hbox), notebook, TRUE, TRUE, 4);
+ g_signal_connect_swapped(notebook, "switch-page",
+ G_CALLBACK(page_switched), &controls);
+
+ controls.dims = gwy_dimensions_new(dimsargs, dfield_template);
+ gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
+ gwy_dimensions_get_widget(controls.dims),
+ gtk_label_new(_("Dimensions")));
+ if (controls.dims->add)
+ g_signal_connect_swapped(controls.dims->add, "toggled",
+ G_CALLBACK(mfm_parallel_invalidate), &controls);
+
+ g_signal_connect_swapped(controls.dims->xypow10, "changed",
+ G_CALLBACK(xyunits_changed), &controls);
+ g_signal_connect_swapped(controls.dims->xreal, "value-changed",
+ G_CALLBACK(xyunits_changed), &controls);
+ g_signal_connect_swapped(controls.dims->yreal, "value-changed",
+ G_CALLBACK(xyunits_changed), &controls);
+
+ gtk_widget_set_no_show_all(controls.dims->xyunits, TRUE);
+ gtk_widget_hide(controls.dims->xyunits);
+ gtk_widget_set_no_show_all(controls.dims->zunits, TRUE);
+ gtk_widget_hide(controls.dims->zunits);
+ gtk_widget_set_no_show_all(controls.dims->zpow10, TRUE);
+ gtk_widget_hide(controls.dims->zpow10);
+ gtk_widget_set_no_show_all(controls.dims->unit_z_label, TRUE);
+ gtk_widget_hide(controls.dims->unit_z_label);
+
+ table = gtk_table_new(12 + (dfield_template ? 1 : 0), 3, FALSE);
+ controls.table = GTK_TABLE(table);
+ gtk_table_set_row_spacings(controls.table, 2);
+ gtk_table_set_col_spacings(controls.table, 6);
+ gtk_container_set_border_width(GTK_CONTAINER(table), 4);
+ gtk_notebook_append_page(GTK_NOTEBOOK(notebook), table,
+ gtk_label_new(_("Generator")));
+ row = 0;
+
+ controls.height = gtk_adjustment_new(args->height, 1, 1000, 1, 10, 0);
+ gwy_table_attach_adjbar(table, row, _("_Output plane height:"), "nm",
+ controls.height, GWY_HSCALE_SQRT);
+ g_object_set_data(G_OBJECT(controls.height), "controls", &controls);
+ g_signal_connect_swapped(controls.height, "value-changed",
+ G_CALLBACK(update_values), &controls);
+ row++;
+
+ controls.thickness = gtk_adjustment_new(args->thickness, 0, 1000, 1, 10, 0);
+ gwy_table_attach_adjbar(table, row, _("_Film thickness:"), "nm",
+ controls.thickness, GWY_HSCALE_SQRT);
+ g_object_set_data(G_OBJECT(controls.thickness), "controls", &controls);
+ g_signal_connect_swapped(controls.thickness, "value-changed",
+ G_CALLBACK(update_values), &controls);
+ row++;
+
+ controls.magnetisation = gtk_adjustment_new(args->magnetisation, 1, 1000, 1, 10, 0);
+ gwy_table_attach_adjbar(table, row, _("_Remanent magnetization:"), "kA/m",
+ controls.magnetisation, GWY_HSCALE_SQRT);
+ g_object_set_data(G_OBJECT(controls.magnetisation), "controls", &controls);
+ g_signal_connect_swapped(controls.magnetisation, "value-changed",
+ G_CALLBACK(update_values), &controls);
+ row++;
+
+ controls.size_a = gtk_adjustment_new(args->size_a, 1, 1000, 1, 10, 0);
+ gwy_table_attach_adjbar(table, row, _("Size _A (dir. left):"), "nm",
+ controls.size_a, GWY_HSCALE_SQRT);
+ g_object_set_data(G_OBJECT(controls.size_a), "controls", &controls);
+ g_signal_connect_swapped(controls.size_a, "value-changed",
+ G_CALLBACK(update_values), &controls);
+ row++;
+
+ controls.size_b = gtk_adjustment_new(args->size_b, 1, 1000, 1, 10, 0);
+ gwy_table_attach_adjbar(table, row, _("Size _B (dir. right):"), "nm",
+ controls.size_b, GWY_HSCALE_SQRT);
+ g_object_set_data(G_OBJECT(controls.size_b), "controls", &controls);
+ g_signal_connect_swapped(controls.size_b, "value-changed",
+ G_CALLBACK(update_values), &controls);
+ row++;
+
+ controls.size_c = gtk_adjustment_new(args->size_c, 1, 1000, 1, 10, 0);
+ gwy_table_attach_adjbar(table, row, _("_Gap size:"), "nm",
+ controls.size_c, GWY_HSCALE_SQRT);
+ g_object_set_data(G_OBJECT(controls.size_c), "controls", &controls);
+ g_signal_connect_swapped(controls.size_c, "value-changed",
+ G_CALLBACK(update_values), &controls);
+ row++;
+
+ controls.out = gwy_enum_combo_box_new(mfm_parallel_outputs,
+ G_N_ELEMENTS(mfm_parallel_outputs),
+ G_CALLBACK(out_changed),
+ &controls, args->out, TRUE);
+ gwy_table_attach_adjbar(table, row, _("Output _type:"), NULL,
+ GTK_OBJECT(controls.out),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
+ row++;
+
+ gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
+ controls.probe = gwy_enum_combo_box_new(mfm_parallel_probes,
+ G_N_ELEMENTS(mfm_parallel_probes),
+ G_CALLBACK(probe_changed),
+ &controls, args->probe, TRUE);
+ gwy_table_attach_adjbar(table, row, _("_Probe type:"), NULL,
+ GTK_OBJECT(controls.probe),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
+ row++;
+
+ controls.mtip = gtk_adjustment_new(args->mtip, 1, 10000, 1, 10, 0);
+ gwy_table_attach_adjbar(table, row, _("Tip _magnetization:"), "kA/m",
+ controls.mtip, GWY_HSCALE_LOG);
+ g_object_set_data(G_OBJECT(controls.mtip), "controls", &controls);
+ g_signal_connect_swapped(controls.mtip, "value-changed",
+ G_CALLBACK(update_values), &controls);
+ row++;
+
+
+ controls.bx = gtk_adjustment_new(args->bx, 1, 1000, 1, 10, 0);
+ gwy_table_attach_adjbar(table, row, _("Bar width _x:"), "nm",
+ controls.bx, GWY_HSCALE_SQRT);
+ g_object_set_data(G_OBJECT(controls.bx), "controls", &controls);
+ g_signal_connect_swapped(controls.bx, "value-changed",
+ G_CALLBACK(update_values), &controls);
+ row++;
+
+
+ controls.by = gtk_adjustment_new(args->by, 1, 1000, 1, 10, 0);
+ gwy_table_attach_adjbar(table, row, _("Bar width _y:"), "nm",
+ controls.by, GWY_HSCALE_SQRT);
+ g_object_set_data(G_OBJECT(controls.by), "controls", &controls);
+ g_signal_connect_swapped(controls.by, "value-changed",
+ G_CALLBACK(update_values), &controls);
+ row++;
+
+
+ controls.length = gtk_adjustment_new(args->length, 1, 10000, 1, 10, 0);
+ gwy_table_attach_adjbar(table, row, _("Bar length (_z):"), "nm",
+ controls.length, GWY_HSCALE_LOG);
+ g_object_set_data(G_OBJECT(controls.length), "controls", &controls);
+ g_signal_connect_swapped(controls.length, "value-changed",
+ G_CALLBACK(update_values), &controls);
+ row++;
+
+ update_sensitivity(&controls);
+
+ gtk_widget_show_all(dialog);
+ controls.in_init = FALSE;
+ /* Must be done when widgets are shown, see GtkNotebook docs */
+ gtk_notebook_set_current_page(GTK_NOTEBOOK(notebook), args->active_page);
+ update_values(&controls);
+ mfm_parallel_invalidate(&controls);
+
+ finished = FALSE;
+ while (!finished) {
+ response = gtk_dialog_run(GTK_DIALOG(dialog));
+ switch (response) {
+ case GTK_RESPONSE_CANCEL:
+ case GTK_RESPONSE_DELETE_EVENT:
+ case GTK_RESPONSE_OK:
+ gtk_widget_destroy(dialog);
+ case GTK_RESPONSE_NONE:
+ finished = TRUE;
+ break;
+
+ case RESPONSE_RESET:
+ {
+ gboolean temp = args->update;
+ gint temp2 = args->active_page;
+ *args = mfm_parallel_defaults;
+ args->active_page = temp2;
+ args->update = temp;
+ }
+ controls.in_init = TRUE;
+ update_controls(&controls, args);
+ controls.in_init = FALSE;
+ if (args->update)
+ preview(&controls);
+ break;
+
+ default:
+ g_assert_not_reached();
+ break;
+ }
+ }
+
+ if (controls.sid) {
+ g_source_remove(controls.sid);
+ controls.sid = 0;
+ }
+ g_object_unref(controls.mydata);
+ GWY_OBJECT_UNREF(controls.surface);
+ gwy_dimensions_free(controls.dims);
+
+ return response == GTK_RESPONSE_OK;
+}
+
+
+static void
+update_controls(MfmParallelControls *controls,
+ MfmParallelArgs *args)
+{
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls->update),
+ args->update);
+
+ gwy_enum_combo_box_set_active(GTK_COMBO_BOX(controls->out),
+ args->out);
+ gwy_enum_combo_box_set_active(GTK_COMBO_BOX(controls->probe),
+ args->probe);
+
+ gtk_adjustment_set_value(GTK_ADJUSTMENT(controls->height), args->height);
+ gtk_adjustment_set_value(GTK_ADJUSTMENT(controls->thickness), args->thickness);
+ gtk_adjustment_set_value(GTK_ADJUSTMENT(controls->magnetisation), args->magnetisation);
+ gtk_adjustment_set_value(GTK_ADJUSTMENT(controls->size_a), args->size_a);
+ gtk_adjustment_set_value(GTK_ADJUSTMENT(controls->size_b), args->size_b);
+ gtk_adjustment_set_value(GTK_ADJUSTMENT(controls->size_c), args->size_c);
+ gtk_adjustment_set_value(GTK_ADJUSTMENT(controls->mtip), args->mtip);
+ gtk_adjustment_set_value(GTK_ADJUSTMENT(controls->bx), args->bx);
+ gtk_adjustment_set_value(GTK_ADJUSTMENT(controls->by), args->by);
+ gtk_adjustment_set_value(GTK_ADJUSTMENT(controls->length), args->length);
+
+}
+
+static void
+update_sensitivity(MfmParallelControls *controls)
+{
+ gboolean is_force = TRUE, is_bar = FALSE;
+
+ if (controls->args->out == GWY_MFM_PARALLEL_OUTPUT_HZ
+ || controls->args->out == GWY_MFM_PARALLEL_OUTPUT_HX)
+ is_force = FALSE;
+ if (controls->args->probe == GWY_MFM_PROBE_BAR)
+ is_bar = TRUE;
+ if (!is_force)
+ is_bar = FALSE;
+
+ gwy_table_hscale_set_sensitive(GTK_OBJECT(controls->probe), is_force);
+ gwy_table_hscale_set_sensitive(controls->mtip, is_bar);
+ gwy_table_hscale_set_sensitive(controls->bx, is_bar);
+ gwy_table_hscale_set_sensitive(controls->by, is_bar);
+ gwy_table_hscale_set_sensitive(controls->length, is_bar);
+}
+
+static void
+xyunits_changed(MfmParallelControls *controls)
+{
+ gdouble mag;
+ GwyDataField *dfield;
+
+ update_values(controls);
+
+ dfield = GWY_DATA_FIELD(gwy_container_get_object_by_name(controls->mydata,
+ "/0/data"));
+
+ mag = pow10(controls->dims->args->xypow10) * controls->dims->args->measure;
+ gwy_data_field_set_xreal(dfield, mag*controls->dims->args->xres);
+ gwy_data_field_set_yreal(dfield, mag*controls->dims->args->yres);
+
+ mfm_parallel_invalidate(controls);
+}
+
+
+
+static void
+probe_changed(GtkComboBox *combo,
+ MfmParallelControls *controls)
+{
+ controls->args->probe = gwy_enum_combo_box_get_active(combo);
+ update_sensitivity(controls);
+ mfm_parallel_invalidate(controls);
+}
+
+static void
+out_changed(GtkComboBox *combo,
+ MfmParallelControls *controls)
+{
+ controls->args->out = gwy_enum_combo_box_get_active(combo);
+ update_sensitivity(controls);
+ mfm_parallel_invalidate(controls);
+}
+
+
+static void
+page_switched(MfmParallelControls *controls,
+ G_GNUC_UNUSED GtkNotebookPage *page,
+ gint pagenum)
+{
+ if (controls->in_init)
+ return;
+
+ controls->args->active_page = pagenum;
+
+ if (pagenum == PAGE_GENERATOR)
+ update_values(controls);
+}
+
+static void
+update_values(MfmParallelControls *controls)
+{
+ GwyDimensions *dims = controls->dims;
+
+ controls->pxsize = dims->args->measure * pow10(dims->args->xypow10);
+
+ controls->args->magnetisation = gtk_adjustment_get_value(GTK_ADJUSTMENT(controls->magnetisation));
+ controls->args->size_a = gtk_adjustment_get_value(GTK_ADJUSTMENT(controls->size_a));
+ controls->args->size_b = gtk_adjustment_get_value(GTK_ADJUSTMENT(controls->size_b));
+ controls->args->size_c = gtk_adjustment_get_value(GTK_ADJUSTMENT(controls->size_c));
+ controls->args->height = gtk_adjustment_get_value(GTK_ADJUSTMENT(controls->height));
+ controls->args->thickness = gtk_adjustment_get_value(GTK_ADJUSTMENT(controls->thickness));
+ controls->args->mtip = gtk_adjustment_get_value(GTK_ADJUSTMENT(controls->mtip));
+ controls->args->bx = gtk_adjustment_get_value(GTK_ADJUSTMENT(controls->bx));
+ controls->args->by = gtk_adjustment_get_value(GTK_ADJUSTMENT(controls->by));
+ controls->args->length = gtk_adjustment_get_value(GTK_ADJUSTMENT(controls->length));
+
+ controls->args->probe = gwy_enum_combo_box_get_active(GTK_COMBO_BOX(controls->probe));
+ controls->args->out = gwy_enum_combo_box_get_active(GTK_COMBO_BOX(controls->out));
+
+ update_sensitivity(controls);
+ mfm_parallel_invalidate(controls);
+
+
+}
+
+static void
+mfm_parallel_invalidate(MfmParallelControls *controls)
+{
+ /* create preview if instant updates are on */
+ if (controls->args->update && !controls->in_init && !controls->sid) {
+ controls->sid = g_idle_add_full(G_PRIORITY_LOW, preview_gsource,
+ controls, NULL);
+ }
+}
+
+static gboolean
+preview_gsource(gpointer user_data)
+{
+ MfmParallelControls *controls = (MfmParallelControls*)user_data;
+ controls->sid = 0;
+
+ preview(controls);
+
+ return FALSE;
+}
+
+static void
+preview(MfmParallelControls *controls)
+{
+ MfmParallelArgs *args = controls->args;
+ GwyDataField *dfield;
+
+ dfield = GWY_DATA_FIELD(gwy_container_get_object_by_name(controls->mydata,
+ "/0/data"));
+ if (controls->dims->args->add && controls->surface)
+ gwy_data_field_copy(controls->surface, dfield, FALSE);
+ else
+ gwy_data_field_clear(dfield);
+
+ mfm_parallel_do(args, controls->dims->args, dfield);
+
+ gwy_data_field_data_changed(dfield);
+}
+
+static void
+mfm_parallel_do(const MfmParallelArgs *args,
+ G_GNUC_UNUSED const GwyDimensionArgs *dimsargs,
+ GwyDataField *dfield)
+{
+ GwyDataField *fz=NULL, *fza, *fzb, *fzc;
+ gdouble dd = 1.0e-9;
+
+
+ if (args->out == GWY_MFM_PARALLEL_OUTPUT_HX) {
+ mfm_parallel_create_h(dfield, args->height*1e-9, args->size_a*1e-9,
+ args->size_b*1e-9, args->size_c*1e-9, args->magnetisation,
+ args->thickness*1e-9, GWY_MFM_COMPONENT_HX);
+ gwy_data_field_set_si_unit_z(dfield, gwy_si_unit_new("A/m"));
+ }
+ else if (args->out == GWY_MFM_PARALLEL_OUTPUT_HZ || args->out == GWY_MFM_PARALLEL_OUTPUT_FORCE)
+ {
+ mfm_parallel_create_h(dfield, args->height*1e-9, args->size_a*1e-9,
+ args->size_b*1e-9, args->size_c*1e-9, args->magnetisation,
+ args->thickness*1e-9, GWY_MFM_COMPONENT_HZ);
+
+ if (args->out == GWY_MFM_PARALLEL_OUTPUT_FORCE)
+ {
+ fz = gwy_data_field_new_alike(dfield, TRUE);
+
+ mfm_perpendicular_force_from_field(dfield, fz,
+ args->probe, args->mtip*1e3,
+ args->bx*1e-9, args->by*1e-9, args->length*1e-9);
+ gwy_data_field_copy(fz, dfield, FALSE);
+ gwy_data_field_set_si_unit_z(dfield, gwy_si_unit_new("N"));
+ gwy_object_unref(fz);
+ } else {
+ gwy_data_field_set_si_unit_z(dfield, gwy_si_unit_new("A/m"));
+ }
+ }
+
+ else if (args->out == GWY_MFM_PARALLEL_OUTPUT_FORCE_DX) //this is done numerically now
+ {
+ fza = gwy_data_field_new_alike(dfield, TRUE);
+ fzb = gwy_data_field_new_alike(dfield, TRUE);
+ fz = gwy_data_field_new_alike(dfield, TRUE);
+
+
+ mfm_parallel_create_h(dfield, args->height*1e-9-dd, args->size_a*1e-9,
+ args->size_b*1e-9, args->size_c*1e-9, args->magnetisation,
+ args->thickness*1e-9, GWY_MFM_COMPONENT_HZ);
+
+ mfm_perpendicular_force_from_field(dfield, fza,
+ args->probe, args->mtip*1e3,
+ args->bx*1e-9, args->by*1e-9, args->length*1e-9);
+
+ mfm_parallel_create_h(dfield, args->height*1e-9+dd, args->size_a*1e-9,
+ args->size_b*1e-9, args->size_c*1e-9, args->magnetisation,
+ args->thickness*1e-9, GWY_MFM_COMPONENT_HZ);
+
+ mfm_perpendicular_force_from_field(dfield, fzb,
+ args->probe, args->mtip*1e3,
+ args->bx*1e-9, args->by*1e-9, args->length*1e-9);
+
+ gwy_data_field_subtract_fields(fz, fza, fzb);
+ gwy_data_field_multiply(fz, 0.5/dd);
+
+ gwy_object_unref(fza);
+ gwy_object_unref(fzb);
+
+ gwy_data_field_copy(fz, dfield, FALSE);
+ gwy_data_field_set_si_unit_z(dfield, gwy_si_unit_new("N/m"));
+ gwy_object_unref(fz);
+
+ }
+ else if (args->out == GWY_MFM_PARALLEL_OUTPUT_FORCE_DDX) //this is done numerically now
+ {
+ fza = gwy_data_field_new_alike(dfield, TRUE);
+ fzb = gwy_data_field_new_alike(dfield, TRUE);
+ fzc = gwy_data_field_new_alike(dfield, TRUE);
+ fz = gwy_data_field_new_alike(dfield, TRUE);
+
+
+ mfm_parallel_create_h(dfield, args->height*1e-9-dd, args->size_a*1e-9,
+ args->size_b*1e-9, args->size_c*1e-9, args->magnetisation,
+ args->thickness*1e-9, GWY_MFM_COMPONENT_HZ);
+
+ mfm_perpendicular_force_from_field(dfield, fza,
+ args->probe, args->mtip*1e3,
+ args->bx*1e-9, args->by*1e-9, args->length*1e-9);
+
+ mfm_parallel_create_h(dfield, args->height*1e-9, args->size_a*1e-9,
+ args->size_b*1e-9, args->size_c*1e-9, args->magnetisation,
+ args->thickness*1e-9, GWY_MFM_COMPONENT_HZ);
+
+ mfm_perpendicular_force_from_field(dfield, fzb,
+ args->probe, args->mtip*1e3,
+ args->bx*1e-9, args->by*1e-9, args->length*1e-9);
+
+ mfm_parallel_create_h(dfield, args->height*1e-9+dd, args->size_a*1e-9,
+ args->size_b*1e-9, args->size_c*1e-9, args->magnetisation,
+ args->thickness*1e-9, GWY_MFM_COMPONENT_HZ);
+
+ mfm_perpendicular_force_from_field(dfield, fzc,
+ args->probe, args->mtip*1e3,
+ args->bx*1e-9, args->by*1e-9, args->length*1e-9);
+
+ gwy_data_field_multiply(fzb, 2.0);
+ gwy_data_field_sum_fields(fz, fza, fzc);
+ gwy_data_field_subtract_fields(fz, fz, fzb);
+
+ gwy_data_field_multiply(fz, 1.0/(dd*dd));
+
+ gwy_object_unref(fza);
+ gwy_object_unref(fzb);
+ gwy_object_unref(fzc);
+
+ gwy_data_field_copy(fz, dfield, FALSE);
+ gwy_data_field_set_si_unit_z(dfield, gwy_si_unit_new("N/m²"));
+ gwy_object_unref(fz);
+
+ }
+}
+
+
+static const gchar prefix[] = "/module/mfm_parallel";
+static const gchar active_page_key[] = "/module/mfm_parallel/active_page";
+static const gchar update_key[] = "/module/mfm_parallel/update";
+static const gchar out_key[] = "/module/mfm_parallel/out";
+static const gchar probe_key[] = "/module/mfm_parallel/probe";
+static const gchar height_key[] = "/module/mfm_parallel/height";
+static const gchar thickness_key[] = "/module/mfm_parallel/thickness";
+static const gchar magnetisation_key[] = "/module/mfm_parallel/magnetisation";
+static const gchar size_a_key[] = "/module/mfm_parallel/size_a";
+static const gchar size_b_key[] = "/module/mfm_parallel/size_b";
+static const gchar size_c_key[] = "/module/mfm_parallel/size_c";
+static const gchar mtip_key[] = "/module/mfm_parallel/mtip";
+static const gchar bx_key[] = "/module/mfm_parallel/bx";
+static const gchar by_key[] = "/module/mfm_parallel/by";
+static const gchar length_key[] = "/module/mfm_parallel/length";
+
+
+static void
+mfm_parallel_sanitize_args(MfmParallelArgs *args)
+{
+ args->active_page = CLAMP(args->active_page,
+ PAGE_DIMENSIONS, PAGE_NPAGES-1);
+ args->update = !!args->update;
+ args->out = CLAMP(args->out, 0, GWY_MFM_PARALLEL_OUTPUT_FORCE_DDX);
+ args->probe = CLAMP(args->probe, 0, GWY_MFM_PROBE_BAR);
+}
+
+static void
+mfm_parallel_load_args(GwyContainer *container,
+ MfmParallelArgs *args,
+ GwyDimensionArgs *dimsargs)
+{
+ *args = mfm_parallel_defaults;
+
+ gwy_container_gis_int32_by_name(container, active_page_key,
+ &args->active_page);
+ gwy_container_gis_boolean_by_name(container, update_key, &args->update);
+
+ gwy_container_gis_enum_by_name(container, probe_key, &args->probe);
+ gwy_container_gis_enum_by_name(container, out_key, &args->out);
+ gwy_container_gis_double_by_name(container, height_key, &args->height);
+ gwy_container_gis_double_by_name(container, thickness_key, &args->thickness);
+ gwy_container_gis_double_by_name(container, magnetisation_key, &args->magnetisation);
+ gwy_container_gis_double_by_name(container, size_a_key, &args->size_a);
+ gwy_container_gis_double_by_name(container, size_b_key, &args->size_b);
+ gwy_container_gis_double_by_name(container, size_c_key, &args->size_c);
+ gwy_container_gis_double_by_name(container, mtip_key, &args->mtip);
+ gwy_container_gis_double_by_name(container, bx_key, &args->bx);
+ gwy_container_gis_double_by_name(container, by_key, &args->by);
+ gwy_container_gis_double_by_name(container, length_key, &args->length);
+
+ mfm_parallel_sanitize_args(args);
+
+ gwy_clear(dimsargs, 1);
+ gwy_dimensions_copy_args(&dims_defaults, dimsargs);
+ gwy_dimensions_load_args(dimsargs, container, prefix);
+}
+
+static void
+mfm_parallel_save_args(GwyContainer *container,
+ const MfmParallelArgs *args,
+ const GwyDimensionArgs *dimsargs)
+{
+ gwy_container_set_int32_by_name(container, active_page_key,
+ args->active_page);
+ gwy_container_set_boolean_by_name(container, update_key, args->update);
+
+ gwy_container_set_enum_by_name(container, probe_key, args->probe);
+ gwy_container_set_enum_by_name(container, out_key, args->out);
+ gwy_container_set_double_by_name(container, height_key, args->height);
+ gwy_container_set_double_by_name(container, thickness_key, args->thickness);
+ gwy_container_set_double_by_name(container, magnetisation_key, args->magnetisation);
+ gwy_container_set_double_by_name(container, size_a_key, args->size_a);
+ gwy_container_set_double_by_name(container, size_b_key, args->size_b);
+ gwy_container_set_double_by_name(container, size_c_key, args->size_c);
+ gwy_container_set_double_by_name(container, mtip_key, args->mtip);
+ gwy_container_set_double_by_name(container, bx_key, args->bx);
+ gwy_container_set_double_by_name(container, by_key, args->by);
+ gwy_container_set_double_by_name(container, length_key, args->length);
+
+ gwy_dimensions_save_args(dimsargs, container, prefix);
+}
+
+/* vim: set cin et ts=4 sw=4 cino=>1s,e0,n0,f0,{0,}0,^0,\:1s,=0,g1s,h0,t0,+1s,c3,(0,u0 : */
diff --git a/modules/process/mfm_shift.c b/modules/process/mfm_shift.c
new file mode 100644
index 0000000..f01dde0
--- /dev/null
+++ b/modules/process/mfm_shift.c
@@ -0,0 +1,333 @@
+/*
+ * @(#) $Id: mfm_shift.c 19948 2017-06-22 14:05:41Z yeti-dn $
+ * Copyright (C) 2017 David Necas (Yeti), Petr Klapetek.
+ * E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "config.h"
+#include <gtk/gtk.h>
+#include <libgwyddion/gwymacros.h>
+#include <libgwyddion/gwymath.h>
+#include <libprocess/gwyprocesstypes.h>
+#include <libprocess/arithmetic.h>
+#include <libprocess/inttrans.h>
+#include <libprocess/stats.h>
+#include <libgwydgets/gwydgetutils.h>
+#include <libgwydgets/gwycombobox.h>
+#include <libgwydgets/gwystock.h>
+#include <libgwymodule/gwymodule-process.h>
+#include <app/gwymoduleutils.h>
+#include <app/gwyapp.h>
+#include "mfmops.h"
+#include "preview.h"
+
+#define MFM_SHIFT_RUN_MODES (GWY_RUN_IMMEDIATE | GWY_RUN_INTERACTIVE)
+
+typedef struct {
+ gdouble height;
+ gboolean update;
+} MfmShiftArgs;
+
+typedef struct {
+ MfmShiftArgs *args;
+ GtkObject *height;
+ GtkWidget *update;
+ GwyDataField *result;
+ GwyDataField *dfield;
+ GtkWidget *view;
+ GwyContainer *mydata;
+} MfmShiftControls;
+
+static gboolean module_register (void);
+static void mfm_shift (GwyContainer *data,
+ GwyRunType run);
+static void mfm_shift_do (MfmShiftArgs *args,
+ GwyDataField *dfield,
+ GwyDataField *out);
+static gboolean mfm_shift_dialog (MfmShiftArgs *args,
+ GwyContainer *data);
+
+static void mfm_shift_load_args (GwyContainer *container,
+ MfmShiftArgs *args);
+static void mfm_shift_save_args (GwyContainer *container,
+ MfmShiftArgs *args);
+static void mfm_shift_sanitize_args (MfmShiftArgs *args);
+static void height_changed (GtkAdjustment *adj,
+ MfmShiftControls *controls);
+static void update_changed (GtkToggleButton *button,
+ MfmShiftControls *controls);
+static void preview (MfmShiftControls *controls,
+ MfmShiftArgs *args);
+static void mfm_shift_dialog_update (MfmShiftControls *controls,
+ MfmShiftArgs *args);
+
+static const MfmShiftArgs mfm_shift_defaults = {
+ 10, TRUE,
+};
+
+
+static GwyModuleInfo module_info = {
+ GWY_MODULE_ABI_VERSION,
+ &module_register,
+ N_("Simulation of magnetic field z component change for another level"),
+ "Petr Klapetek <klapetek at gwyddion.net>",
+ "1.0",
+ "David Nečas (Yeti) & Petr Klapetek",
+ "2017",
+};
+
+GWY_MODULE_QUERY2(module_info, mfm_shift)
+
+static gboolean
+module_register(void)
+{
+ gwy_process_func_register("mfm_shift",
+ (GwyProcessFunc)&mfm_shift,
+ N_("/SPM M_odes/_MFM/_Field Shift in Z..."),
+ NULL,
+ MFM_SHIFT_RUN_MODES,
+ GWY_MENU_FLAG_DATA,
+ N_("Compute stray field shift for another z level"));
+
+ return TRUE;
+}
+
+static void
+mfm_shift(GwyContainer *data, GwyRunType run)
+{
+ GwyDataField *dfield, *out;
+ MfmShiftArgs args;
+ gboolean ok;
+ gint id, newid, datano;
+
+ g_return_if_fail(run & MFM_SHIFT_RUN_MODES);
+
+ gwy_app_data_browser_get_current(GWY_APP_DATA_FIELD, &dfield,
+ GWY_APP_DATA_FIELD_ID, &id,
+ GWY_APP_CONTAINER_ID, &datano,
+ 0);
+ g_return_if_fail(dfield);
+
+ mfm_shift_load_args(gwy_app_settings_get(), &args);
+
+ if (run == GWY_RUN_INTERACTIVE) {
+ ok = mfm_shift_dialog(&args, data);
+ mfm_shift_save_args(gwy_app_settings_get(), &args);
+ if (!ok)
+ return;
+ }
+
+ //do the computation
+
+ out = gwy_data_field_new_alike(dfield, FALSE);
+ mfm_shift_do(&args, dfield, out);
+
+ newid = gwy_app_data_browser_add_data_field(out, data, TRUE);
+ gwy_app_sync_data_items(data, data, id, newid, FALSE,
+ GWY_DATA_ITEM_GRADIENT,
+ GWY_DATA_ITEM_MASK_COLOR,
+ 0);
+
+ gwy_app_set_data_field_title(data, newid, _("Shifted field"));
+ gwy_app_channel_log_add_proc(data, id, newid);
+
+ g_object_unref(out);
+
+
+}
+
+
+static gboolean
+mfm_shift_dialog(MfmShiftArgs *args, GwyContainer *data)
+{
+ GtkWidget *dialog, *table, *hbox;
+ MfmShiftControls controls;
+ gint response, row, id, datano;
+
+ controls.args = args;
+
+ dialog = gtk_dialog_new_with_buttons(_("Stray Field Plane Shift"),
+ NULL, 0, NULL);
+ gtk_dialog_add_action_widget(GTK_DIALOG(dialog),
+ gwy_stock_like_button_new(_("_Update"),
+ GTK_STOCK_EXECUTE),
+ RESPONSE_PREVIEW);
+ gtk_dialog_add_button(GTK_DIALOG(dialog), _("_Reset"), RESPONSE_RESET);
+ gtk_dialog_add_button(GTK_DIALOG(dialog),
+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL);
+ gtk_dialog_add_button(GTK_DIALOG(dialog),
+ GTK_STOCK_OK, GTK_RESPONSE_OK);
+ gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK);
+ gwy_help_add_to_proc_dialog(GTK_DIALOG(dialog), GWY_HELP_DEFAULT);
+
+
+ hbox = gtk_hbox_new(FALSE, 2);
+ gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), GTK_WIDGET(hbox),
+ FALSE, FALSE, 4);
+
+ gwy_app_data_browser_get_current(GWY_APP_DATA_FIELD, &controls.dfield,
+ GWY_APP_DATA_FIELD_ID, &id,
+ GWY_APP_CONTAINER_ID, &datano,
+ 0);
+ controls.result = gwy_data_field_new_alike(controls.dfield, TRUE);
+
+ controls.mydata = gwy_container_new();
+ gwy_container_set_object_by_name(controls.mydata, "/0/data", controls.result);
+ gwy_app_sync_data_items(data, controls.mydata, id, 0, FALSE,
+ GWY_DATA_ITEM_PALETTE,
+ GWY_DATA_ITEM_MASK_COLOR,
+ GWY_DATA_ITEM_RANGE,
+ GWY_DATA_ITEM_REAL_SQUARE,
+ 0);
+ controls.view = create_preview(controls.mydata, 0, PREVIEW_SIZE, TRUE);
+ gtk_box_pack_start(GTK_BOX(hbox), controls.view, FALSE, FALSE, 4);
+
+
+ table = gtk_table_new(2, 3, FALSE);
+ gtk_table_set_row_spacings(GTK_TABLE(table), 2);
+ gtk_table_set_col_spacings(GTK_TABLE(table), 6);
+ gtk_container_set_border_width(GTK_CONTAINER(table), 4);
+ gtk_box_pack_start(GTK_BOX(hbox), table, TRUE, TRUE, 4);
+ row = 0;
+
+ controls.height = gtk_adjustment_new(args->height, -1000, 1000, 1, 10, 0);
+ gwy_table_attach_adjbar(table, row, _("_Z shift by:"), "nm",
+ controls.height, GWY_HSCALE_SQRT);
+ g_object_set_data(G_OBJECT(controls.height), "controls", &controls);
+ g_signal_connect(controls.height, "value-changed",
+ G_CALLBACK(height_changed), &controls);
+ row++;
+
+ controls.update = gtk_check_button_new_with_mnemonic(_("I_nstant updates"));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.update),
+ args->update);
+ gtk_table_attach(GTK_TABLE(table), controls.update,
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
+ g_signal_connect(controls.update, "toggled",
+ G_CALLBACK(update_changed), &controls);
+ row++;
+
+ if (args->update)
+ preview(&controls, args);
+
+ gtk_widget_show_all(dialog);
+ do {
+ response = gtk_dialog_run(GTK_DIALOG(dialog));
+ switch (response) {
+ case GTK_RESPONSE_CANCEL:
+ case GTK_RESPONSE_DELETE_EVENT:
+ gtk_widget_destroy(dialog);
+ case GTK_RESPONSE_NONE:
+ return FALSE;
+ break;
+
+ case GTK_RESPONSE_OK:
+ break;
+
+ case RESPONSE_PREVIEW:
+ preview(&controls, args);
+ break;
+
+ case RESPONSE_RESET:
+ {
+ *args = mfm_shift_defaults;
+ mfm_shift_dialog_update(&controls, args);
+ }
+ break;
+
+ default:
+ g_assert_not_reached();
+ break;
+ }
+ } while (response != GTK_RESPONSE_OK);
+
+ gtk_widget_destroy(dialog);
+
+ return TRUE;
+}
+
+static void
+preview(MfmShiftControls *controls,
+ MfmShiftArgs *args)
+{
+ mfm_shift_do(args, controls->dfield, controls->result);
+ gwy_data_field_data_changed(controls->result);
+}
+
+static void
+mfm_shift_do(MfmShiftArgs *args, GwyDataField *dfield, GwyDataField *out)
+{
+ mfm_shift_z(dfield, out, -args->height*1e-9);
+}
+
+static void
+height_changed(GtkAdjustment *adj, MfmShiftControls *controls)
+{
+ controls->args->height = gtk_adjustment_get_value(adj);
+ if (controls->args->update)
+ preview(controls, controls->args);
+}
+
+static void
+update_changed(GtkToggleButton *button, MfmShiftControls *controls)
+{
+ controls->args->update = gtk_toggle_button_get_active(button);
+ if (controls->args->update)
+ preview(controls, controls->args);
+}
+
+static void
+mfm_shift_dialog_update(MfmShiftControls *controls,
+ MfmShiftArgs *args)
+{
+ gtk_adjustment_set_value(GTK_ADJUSTMENT(controls->height), args->height);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls->update),
+ args->update);
+}
+
+static const gchar update_key[] = "/module/mfm_shift/update";
+static const gchar height_key[] = "/module/mfm_shift/height";
+
+static void
+mfm_shift_sanitize_args(MfmShiftArgs *args)
+{
+ args->update = !!args->update;
+}
+
+static void
+mfm_shift_load_args(GwyContainer *container,
+ MfmShiftArgs *args)
+{
+ *args = mfm_shift_defaults;
+
+ gwy_container_gis_boolean_by_name(container, update_key,
+ &args->update);
+ gwy_container_gis_double_by_name(container, height_key, &args->height);
+ mfm_shift_sanitize_args(args);
+}
+
+static void
+mfm_shift_save_args(GwyContainer *container,
+ MfmShiftArgs *args)
+{
+ gwy_container_set_boolean_by_name(container, update_key,
+ args->update);
+ gwy_container_set_double_by_name(container, height_key, args->height);
+}
+
+/* vim: set cin et ts=4 sw=4 cino=>1s,e0,n0,f0,{0,}0,^0,\:1s,=0,g1s,h0,t0,+1s,c3,(0,u0 : */
diff --git a/modules/process/mfmops.h b/modules/process/mfmops.h
new file mode 100644
index 0000000..142c7b0
--- /dev/null
+++ b/modules/process/mfmops.h
@@ -0,0 +1,435 @@
+/*
+ * @(#) $Id: mfmops.h 19810 2017-05-30 07:38:06Z yeti-dn $
+ * Copyright (C) 2017 David Necas (Yeti), Petr Klapetek.
+ * E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GWY_PROCESS_MFMOPS_H__
+#define __GWY_PROCESS_MFMOPS_H__
+
+#include <libprocess/gwyprocesstypes.h>
+#include <libprocess/arithmetic.h>
+#include <libprocess/inttrans.h>
+#include <libprocess/filters.h>
+#include <libprocess/stats.h>
+
+#define MU_0 1.256637061435917295e-6
+#define EPSILON_0 8.854187817620389850e-12
+
+#define MFM_DIMENSION_ARGS_INIT \
+ { 256, 256, 5.0, (gpointer)"m", NULL, -9, 0, FALSE, FALSE }
+
+typedef enum {
+ GWY_MFM_PROBE_CHARGE = 0,
+ GWY_MFM_PROBE_BAR = 1
+} GwyMfmProbeType;
+
+typedef enum {
+ GWY_MFM_COMPONENT_HX = 0,
+ GWY_MFM_COMPONENT_HY = 1,
+ GWY_MFM_COMPONENT_HZ = 2
+} GwyMfmComponentType;
+
+G_GNUC_UNUSED
+static void
+mfm_perpendicular_create_field_mask(GwyDataField *fieldmask, gdouble height,
+ gdouble thickness)
+{
+ gint i, j;
+ gdouble kx, ky, k;
+ gdouble *data = gwy_data_field_get_data(fieldmask);
+
+ gint xres = gwy_data_field_get_xres(fieldmask);
+ gint yres = gwy_data_field_get_yres(fieldmask);
+ gdouble xreal = gwy_data_field_get_xreal(fieldmask);
+ gdouble yreal = gwy_data_field_get_yreal(fieldmask);
+
+ for (i = 0; i < yres; i++) {
+ for (j = 0; j < xres; j++) {
+
+ kx = fabs(i - xres/2)/xreal;
+ ky = fabs(j - yres/2)/yreal;
+
+ k = hypot(kx, ky);
+
+ data[i*xres + j] = 0.5*(exp(-k*height)*(1.0-exp(-k*thickness)));
+
+ }
+ }
+}
+
+G_GNUC_UNUSED
+static void
+mfm_perpendicular_create_wall_mask(GwyDataField *wm, gdouble a, gdouble kn)
+{
+ gint i, j;
+ gdouble x, y, s, *data;
+ gdouble delta = G_PI*sqrt(a/kn);
+
+ gint xres = gwy_data_field_get_xres(wm);
+ gint yres = gwy_data_field_get_yres(wm);
+ gdouble xreal = gwy_data_field_get_xreal(wm);
+ gdouble yreal = gwy_data_field_get_yreal(wm);
+
+ data = gwy_data_field_get_data(wm);
+ for (i = 0; i < yres; i++) {
+ for (j = 0; j < xres; j++) {
+
+ x = fabs(i - xres/2)*xreal/(gdouble)xres;
+ y = fabs(j - yres/2)*yreal/(gdouble)yres;
+
+ s = hypot(x, y);
+
+ data[i*xres + j] = 1.0/(cosh(G_PI*s/delta));
+ }
+ }
+}
+
+G_GNUC_UNUSED
+static inline gdouble
+mysinc(gdouble x)
+{
+ if (x == 0.0)
+ return 1;
+ else
+ return sin(x)/x;
+}
+
+G_GNUC_UNUSED
+static void
+mfm_perpendicular_create_ftf(GwyDataField *ftf, gdouble mtip,
+ gdouble bx, gdouble by, gdouble length,
+ GwyMfmProbeType type)
+{
+ gint i, j;
+ gdouble kx, ky, k, *data;
+
+
+ gint xres = gwy_data_field_get_xres(ftf);
+ gint yres = gwy_data_field_get_yres(ftf);
+ gdouble xreal = gwy_data_field_get_xreal(ftf);
+ gdouble yreal = gwy_data_field_get_yreal(ftf);
+
+ if (type == GWY_MFM_PROBE_CHARGE)
+ gwy_data_field_fill(ftf, -MU_0*mtip*bx*by);
+ else {
+ data = gwy_data_field_get_data(ftf);
+ for (i = 0; i < yres; i++) {
+ for (j = 0; j < xres; j++) {
+ kx = fabs(i - xres/2)/xreal;
+ ky = fabs(j - yres/2)/yreal;
+
+ k = hypot(kx, ky);
+
+ data[i*xres + j] = -MU_0*mtip*bx*by*mysinc(kx*bx/2)*mysinc(ky*by/2)
+ *(1-exp(-k*length));
+ }
+ }
+ }
+}
+
+G_GNUC_UNUSED
+static void
+mfm_perpendicular_stray_field(GwyDataField *mfield, GwyDataField *out,
+ gdouble height, gdouble thickness,
+ gdouble sigma,
+ gboolean walls, gdouble wall_a, gdouble wall_kn)
+{
+ GwyDataField *rea, *ima, *reb, *imb, *fieldmask, *wallmask;
+
+ rea = gwy_data_field_new_alike(mfield, TRUE);
+ reb = gwy_data_field_new_alike(mfield, TRUE);
+ ima = gwy_data_field_new_alike(mfield, TRUE);
+ imb = gwy_data_field_new_alike(mfield, TRUE);
+ fieldmask = gwy_data_field_new_alike(mfield, TRUE);
+ wallmask = gwy_data_field_new_alike(mfield, TRUE);
+
+ gwy_data_field_copy(mfield, rea, FALSE);
+ gwy_data_field_multiply(rea, 2*sigma);
+ gwy_data_field_add(rea, -sigma);
+
+ if (walls) {
+ mfm_perpendicular_create_wall_mask(wallmask, wall_a, wall_kn);
+ gwy_data_field_area_ext_convolve(rea,
+ 0, 0,
+ gwy_data_field_get_xres(rea),
+ gwy_data_field_get_yres(rea),
+ rea, wallmask,
+ GWY_EXTERIOR_MIRROR_EXTEND, 0.0,
+ FALSE);
+ }
+
+ gwy_data_field_2dfft_raw(rea, NULL, reb, imb,
+ GWY_TRANSFORM_DIRECTION_FORWARD);
+
+ gwy_data_field_2dfft_humanize(reb);
+ gwy_data_field_2dfft_humanize(imb);
+
+ mfm_perpendicular_create_field_mask(fieldmask, height, thickness);
+
+ gwy_data_field_multiply_fields(reb, reb, fieldmask);
+ gwy_data_field_multiply_fields(imb, imb, fieldmask);
+
+ gwy_data_field_2dfft_dehumanize(reb);
+ gwy_data_field_2dfft_dehumanize(imb);
+ gwy_data_field_2dfft_raw(reb, imb, rea, ima,
+ GWY_TRANSFORM_DIRECTION_BACKWARD);
+
+ gwy_data_field_copy(rea, out, FALSE);
+
+ gwy_object_unref(rea);
+ gwy_object_unref(reb);
+ gwy_object_unref(ima);
+ gwy_object_unref(imb);
+ gwy_object_unref(fieldmask);
+ gwy_object_unref(wallmask);
+}
+
+G_GNUC_UNUSED
+static void
+mfm_perpendicular_force_from_field(GwyDataField *hz, GwyDataField *fz,
+ GwyMfmProbeType type, gdouble mtip,
+ gdouble bx, gdouble by, gdouble length)
+{
+ GwyDataField *rea, *ima, *reb, *imb, *ftf;
+
+ rea = gwy_data_field_new_alike(hz, TRUE);
+ reb = gwy_data_field_new_alike(hz, TRUE);
+ ima = gwy_data_field_new_alike(hz, TRUE);
+ imb = gwy_data_field_new_alike(hz, TRUE);
+ ftf = gwy_data_field_new_alike(hz, TRUE);
+
+ gwy_data_field_copy(hz, rea, FALSE);
+
+ gwy_data_field_2dfft_raw(rea, NULL, reb, imb,
+ GWY_TRANSFORM_DIRECTION_FORWARD);
+
+ gwy_data_field_2dfft_humanize(reb);
+ gwy_data_field_2dfft_humanize(imb);
+
+ mfm_perpendicular_create_ftf(ftf, mtip,
+ bx, by, length, type);
+
+ gwy_data_field_multiply_fields(reb, reb, ftf);
+ gwy_data_field_multiply_fields(imb, imb, ftf);
+
+ gwy_data_field_2dfft_dehumanize(reb);
+ gwy_data_field_2dfft_dehumanize(imb);
+ gwy_data_field_2dfft_raw(reb, imb, rea, ima,
+ GWY_TRANSFORM_DIRECTION_BACKWARD);
+
+
+ gwy_data_field_copy(rea, fz, FALSE);
+
+ gwy_object_unref(rea);
+ gwy_object_unref(reb);
+ gwy_object_unref(ima);
+ gwy_object_unref(imb);
+ gwy_object_unref(ftf);
+
+}
+
+G_GNUC_UNUSED
+static void
+mfm_create_ztf(GwyDataField *ztf, gdouble zdiff)
+{
+ gint i, j;
+ gdouble kx, ky, k, *data;
+
+ gint xres = gwy_data_field_get_xres(ztf);
+ gint yres = gwy_data_field_get_yres(ztf);
+ gdouble xreal = gwy_data_field_get_xreal(ztf);
+ gdouble yreal = gwy_data_field_get_yreal(ztf);
+
+ data = gwy_data_field_get_data(ztf);
+
+ for (i = 0; i < yres; i++) {
+ for (j = 0; j < xres; j++) {
+ kx = fabs(i - xres/2)/xreal;
+ ky = fabs(j - yres/2)/yreal;
+
+ k = hypot(kx, ky);
+
+ data[i*xres + j] = exp(k*zdiff);
+ }
+ }
+
+}
+
+G_GNUC_UNUSED
+static void
+mfm_shift_z(GwyDataField *dfield, GwyDataField *out, gdouble zdiff)
+{
+
+ GwyDataField *rea, *ima, *reb, *imb, *ztf;
+
+ rea = gwy_data_field_new_alike(dfield, TRUE);
+ reb = gwy_data_field_new_alike(dfield, TRUE);
+ ima = gwy_data_field_new_alike(dfield, TRUE);
+ imb = gwy_data_field_new_alike(dfield, TRUE);
+ ztf = gwy_data_field_new_alike(dfield, TRUE);
+
+ gwy_data_field_copy(dfield, rea, FALSE);
+
+ gwy_data_field_2dfft_raw(rea, NULL, reb, imb,
+ GWY_TRANSFORM_DIRECTION_FORWARD);
+
+ gwy_data_field_2dfft_humanize(reb);
+ gwy_data_field_2dfft_humanize(imb);
+
+ mfm_create_ztf(ztf, zdiff);
+
+ gwy_data_field_multiply_fields(reb, reb, ztf);
+ gwy_data_field_multiply_fields(imb, imb, ztf);
+
+ gwy_data_field_2dfft_dehumanize(reb);
+ gwy_data_field_2dfft_dehumanize(imb);
+ gwy_data_field_2dfft_raw(reb, imb, rea, ima,
+ GWY_TRANSFORM_DIRECTION_BACKWARD);
+
+
+ gwy_data_field_copy(rea, out, FALSE);
+
+ gwy_object_unref(rea);
+ gwy_object_unref(reb);
+ gwy_object_unref(ima);
+ gwy_object_unref(imb);
+ gwy_object_unref(ztf);
+}
+
+G_GNUC_UNUSED
+static void
+mfm_parallel_create_h(GwyDataField *h, gdouble height, gdouble size_a,
+ gdouble size_b, gdouble size_c, gdouble magnetisation,
+ gdouble thickness, GwyMfmComponentType component)
+{
+ gint i, j, k;
+ gdouble x, pos, *data, val;
+
+ gint *xlist, *dirlist, nlist;
+
+ gint xres = gwy_data_field_get_xres(h);
+ gint yres = gwy_data_field_get_yres(h);
+ gdouble xreal = gwy_data_field_get_xreal(h);
+
+ xlist = g_new(gint, 100*xres);
+ dirlist = g_new(gint, 100*xres);
+
+ nlist = 0;
+ pos = -20*(size_a+size_b+thickness+height);
+
+ xlist[nlist] = pos*(gdouble)xres/xreal;
+ dirlist[nlist] = 1;
+ nlist++;
+
+ do {
+ pos += size_a + size_c/2;
+ xlist[nlist] = pos*(gdouble)xres/xreal;
+ dirlist[nlist] = -1;
+ nlist++;
+
+ pos += size_b + size_c/2;
+ xlist[nlist] = pos*(gdouble)xres/xreal;
+ dirlist[nlist] = 1;
+ nlist++;
+
+ } while (pos < xreal+20*(size_a+size_b+thickness+height)
+ && nlist < 10*xres-1);
+
+ data = gwy_data_field_get_data(h);
+
+ for (k = 0; k < nlist; k++) {
+ for (j = 0; j < xres; j++) {
+
+ x = ((gdouble)j - xlist[k])*xreal/(gdouble)xres;
+
+ if (component == GWY_MFM_COMPONENT_HX)
+ val = -dirlist[k]*4*magnetisation
+ *(atan((x*(thickness+height))/(x*x + size_c*size_c + size_c*(thickness+height)))
+ -atan((x*height)/(x*x + size_c*size_c + size_c*height)));
+ else if (component == GWY_MFM_COMPONENT_HY)
+ val = 0;
+ else if (component == GWY_MFM_COMPONENT_HZ)
+ val = dirlist[k]*2*magnetisation
+ *log((x*x + (size_c + height + thickness)*(size_c + height + thickness))
+ /(x*x + (size_c + height)*(size_c + height)));
+ else {
+ g_return_if_reached();
+ }
+
+ for (i = 0; i < yres; i++) {
+ data[i*xres + j] += val;
+ }
+ }
+ }
+
+ g_free(xlist);
+ g_free(dirlist);
+}
+
+G_GNUC_UNUSED
+static void
+mfm_current_create_h(GwyDataField *h, gdouble height, gdouble width,
+ gdouble position, gdouble current,
+ GwyMfmComponentType component)
+{
+ gint i, j;
+ gdouble x, *data, val;
+ gint xres = gwy_data_field_get_xres(h);
+ gint yres = gwy_data_field_get_yres(h);
+ gdouble xreal = gwy_data_field_get_xreal(h);
+
+ data = gwy_data_field_get_data(h);
+
+ for (j = 0; j < xres; j++) {
+ x = j*xreal/xres - position;
+
+ if (component == GWY_MFM_COMPONENT_HX)
+ val = -current/(2*G_PI*width)*(atan((x-width/2)/height) - atan((x+width/2)/height));
+ else if (component == GWY_MFM_COMPONENT_HY)
+ val = 0;
+ else if (component == GWY_MFM_COMPONENT_HZ)
+ val = current/(2*G_PI*width)*log(fabs(cos(atan((x+width/2)/height))/cos(atan((x-width/2)/height))));
+ else {
+ g_return_if_reached();
+ }
+
+ for (i = 0; i < yres; i++) {
+ data[i*xres + j] += val;
+ }
+ }
+}
+
+G_GNUC_UNUSED
+static void
+set_transfer_function_units(GwyDataField *source, GwyDataField *image,
+ GwyDataField *transferfunc)
+{
+ GwySIUnit *sunit, *iunit, *tunit, *xyunit;
+
+ xyunit = gwy_data_field_get_si_unit_xy(image);
+ sunit = gwy_data_field_get_si_unit_z(source);
+ iunit = gwy_data_field_get_si_unit_z(image);
+ tunit = gwy_data_field_get_si_unit_z(transferfunc);
+ gwy_si_unit_divide(iunit, sunit, tunit);
+ gwy_si_unit_power_multiply(tunit, 1, xyunit, -2, tunit);
+}
+
+#endif
+
+/* vim: set cin et ts=4 sw=4 cino=>1s,e0,n0,f0,{0,}0,^0,\:1s,=0,g1s,h0,t0,+1s,c3,(0,u0 : */
diff --git a/modules/process/nanoindent_adjust.c b/modules/process/nanoindent_adjust.c
index 6709eb5..cf1335f 100644
--- a/modules/process/nanoindent_adjust.c
+++ b/modules/process/nanoindent_adjust.c
@@ -1,4 +1,4 @@
-/* @(#) $Id: nanoindent_adjust.c 18158 2016-01-22 19:36:39Z yeti-dn $
+/* @(#) $Id: nanoindent_adjust.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2004 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -93,7 +93,7 @@ static GwyModuleInfo module_info = {
"2004",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, nanoindent_adjust)
static gboolean
module_register(void)
@@ -226,8 +226,9 @@ nanoindent_adjust_window_construct(NanoindentAdjustArgs *args)
= gwy_enum_combo_box_new(gwy_interpolation_type_get_enum(), -1,
G_CALLBACK(interp_changed_cb), args,
args->interp, TRUE);
- gwy_table_attach_hscale(table, 5, _("_Interpolation type:"), NULL,
- GTK_OBJECT(controls.interp), GWY_HSCALE_WIDGET);
+ gwy_table_attach_adjbar(table, 5, _("_Interpolation type:"), NULL,
+ GTK_OBJECT(controls.interp),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
gtk_widget_show_all(dialog);
diff --git a/modules/process/neural.c b/modules/process/neural.c
index 8f24d01..dc73833 100644
--- a/modules/process/neural.c
+++ b/modules/process/neural.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: neural.c 19044 2016-10-08 19:10:46Z yeti-dn $
+ * @(#) $Id: neural.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2012 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -203,12 +203,12 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Neural network SPM data processing"),
"Petr Klapetek <klapetek at gwyddion.net>",
- "2.2",
+ "2.3",
"David Nečas (Yeti) & Petr Klapetek",
"2012",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, neural)
static gboolean
module_register(void)
@@ -455,7 +455,7 @@ neural_train_dialog(NeuralTrainArgs *args)
NeuralTrainControls controls;
NeuralNetworkData *nndata;
GwyContainer *mydata;
- GtkWidget *dialog, *table, *label, *spin, *hbox, *bbox, *vbox, *notebook,
+ GtkWidget *dialog, *table, *label, *hbox, *bbox, *vbox, *notebook,
*scroll, *button;
GtkTreeModel *filtermodel;
GtkTreeSelection *tselect;
@@ -497,6 +497,7 @@ neural_train_dialog(NeuralTrainArgs *args)
NULL);
controls.errgraph = gwy_graph_new(controls.gmodel);
gtk_widget_set_size_request(controls.errgraph, -1, 200);
+ gwy_graph_enable_user_input(GWY_GRAPH(controls.errgraph), FALSE);
gtk_box_pack_start(GTK_BOX(vbox), controls.errgraph, TRUE, TRUE, 0);
gcmodel = gwy_graph_curve_model_new();
@@ -508,7 +509,7 @@ neural_train_dialog(NeuralTrainArgs *args)
gtk_box_pack_start(GTK_BOX(hbox), notebook, TRUE, TRUE, 4);
/* Training */
- table = gtk_table_new(14, 4, FALSE);
+ table = gtk_table_new(14, 3, FALSE);
gtk_container_set_border_width(GTK_CONTAINER(table), 4);
gtk_table_set_row_spacings(GTK_TABLE(table), 2);
gtk_table_set_col_spacings(GTK_TABLE(table), 6);
@@ -517,8 +518,9 @@ neural_train_dialog(NeuralTrainArgs *args)
row = 0;
controls.tmodel = gwy_data_chooser_new_channels();
- gwy_table_attach_hscale(table, row, _("_Model:"), NULL,
- GTK_OBJECT(controls.tmodel), GWY_HSCALE_WIDGET);
+ gwy_table_attach_adjbar(table, row, _("_Model:"), NULL,
+ GTK_OBJECT(controls.tmodel),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
gwy_data_chooser_set_active_id(GWY_DATA_CHOOSER(controls.tmodel),
&args->tmodel);
g_object_set_data(G_OBJECT(controls.tmodel), "id", (gpointer)"model");
@@ -527,8 +529,9 @@ neural_train_dialog(NeuralTrainArgs *args)
row++;
controls.tsignal = gwy_data_chooser_new_channels();
- gwy_table_attach_hscale(table, row, _("_Signal:"), NULL,
- GTK_OBJECT(controls.tsignal), GWY_HSCALE_WIDGET);
+ gwy_table_attach_adjbar(table, row, _("_Signal:"), NULL,
+ GTK_OBJECT(controls.tsignal),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
gwy_data_chooser_set_active_id(GWY_DATA_CHOOSER(controls.tsignal),
&args->tsignal);
g_object_set_data(G_OBJECT(controls.tsignal), "id", (gpointer)"signal");
@@ -538,8 +541,9 @@ neural_train_dialog(NeuralTrainArgs *args)
controls.trainsteps = gtk_adjustment_new(args->trainsteps,
0, 10000, 1, 100, 0);
- gwy_table_attach_hscale(table, row, _("Training ste_ps:"), NULL,
- GTK_OBJECT(controls.trainsteps), GWY_HSCALE_SQRT);
+ gwy_table_attach_adjbar(table, row, _("Training ste_ps:"), NULL,
+ GTK_OBJECT(controls.trainsteps),
+ GWY_HSCALE_SQRT | GWY_HSCALE_SNAP);
g_signal_connect_swapped(controls.trainsteps, "value-changed",
G_CALLBACK(train_steps_changed), &controls);
row++;
@@ -570,7 +574,7 @@ neural_train_dialog(NeuralTrainArgs *args)
bbox = gtk_hbutton_box_new();
gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_START);
gtk_table_attach(GTK_TABLE(table), bbox,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
controls.train = gtk_button_new_with_mnemonic(gwy_sgettext("verb|_Train"));
gtk_container_add(GTK_CONTAINER(bbox), controls.train);
@@ -592,7 +596,7 @@ neural_train_dialog(NeuralTrainArgs *args)
gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
controls.masking_label = label = gwy_label_new_header(_("Masking Mode"));
gtk_table_attach(GTK_TABLE(table), label,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
group = gwy_radio_buttons_create(gwy_masking_type_get_enum(), -1,
@@ -612,29 +616,29 @@ neural_train_dialog(NeuralTrainArgs *args)
label = gwy_label_new_header(_("Network"));
gtk_table_attach(GTK_TABLE(table), label, 0, 2, row, row+1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ GTK_FILL, 0, 0, 0);
row++;
controls.width = gtk_adjustment_new(nndata->width, 1, 100, 1, 10, 0);
- spin = gwy_table_attach_spinbutton(table, row, _("Window _width:"), "px",
- controls.width);
- gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 0);
+ gwy_table_attach_adjbar(table, row, _("Window _width:"), _("px"),
+ controls.width,
+ GWY_HSCALE_SQRT | GWY_HSCALE_SNAP);
g_signal_connect_swapped(controls.width, "value-changed",
G_CALLBACK(width_changed), &controls);
row++;
controls.height = gtk_adjustment_new(nndata->height, 1, 100, 1, 10, 0);
- spin = gwy_table_attach_spinbutton(table, row, _("Window h_eight:"), "px",
- controls.height);
- gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 0);
+ gwy_table_attach_adjbar(table, row, _("Window h_eight:"), _("px"),
+ controls.height,
+ GWY_HSCALE_SQRT | GWY_HSCALE_SNAP);
g_signal_connect_swapped(controls.height, "value-changed",
G_CALLBACK(height_changed), &controls);
row++;
controls.nhidden = gtk_adjustment_new(nndata->nhidden, 1, 30, 1, 10, 0);
- spin = gwy_table_attach_spinbutton(table, row, _("_Hidden nodes:"), NULL,
- controls.nhidden);
- gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 0);
+ gwy_table_attach_adjbar(table, row, _("_Hidden nodes:"), NULL,
+ controls.nhidden,
+ GWY_HSCALE_LINEAR | GWY_HSCALE_SNAP);
g_signal_connect_swapped(controls.nhidden, "value-changed",
G_CALLBACK(nhidden_changed), &controls);
row++;
@@ -647,24 +651,27 @@ neural_train_dialog(NeuralTrainArgs *args)
controls.inpowerxy = gtk_adjustment_new(nndata->inpowerxy,
-12, 12, 1, 10, 0);
- spin = gwy_table_attach_spinbutton(table, row, _("Power of source _XY:"),
- NULL, controls.inpowerxy);
+ gwy_table_attach_adjbar(table, row, _("Power of source _XY:"), NULL,
+ controls.inpowerxy,
+ GWY_HSCALE_LINEAR | GWY_HSCALE_SNAP);
g_signal_connect_swapped(controls.inpowerxy, "value-changed",
G_CALLBACK(inpowerxy_changed), &controls);
row++;
controls.inpowerz = gtk_adjustment_new(nndata->inpowerz,
- -12, 12, 1, 10, 0);
- spin = gwy_table_attach_spinbutton(table, row, _("Power of source _Z:"),
- NULL, controls.inpowerz);
+ -12, 12, 1, 10, 0);
+ gwy_table_attach_adjbar(table, row, _("Power of source _Z:"), NULL,
+ controls.inpowerz,
+ GWY_HSCALE_LINEAR | GWY_HSCALE_SNAP);
g_signal_connect_swapped(controls.inpowerz, "value-changed",
G_CALLBACK(inpowerz_changed), &controls);
row++;
controls.outunits = gtk_entry_new();
gtk_entry_set_text(GTK_ENTRY(controls.outunits), nndata->outunits);
- gwy_table_attach_row(table, row, _("_Fixed units:"), NULL,
- controls.outunits);
+ gwy_table_attach_adjbar(table, row, _("_Fixed units:"), NULL,
+ GTK_OBJECT(controls.outunits),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
g_signal_connect_swapped(controls.outunits, "changed",
G_CALLBACK(outunits_changed), &controls);
row++;
diff --git a/modules/process/noise_synth.c b/modules/process/noise_synth.c
index a17effd..76d68d4 100644
--- a/modules/process/noise_synth.c
+++ b/modules/process/noise_synth.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: noise_synth.c 19044 2016-10-08 19:10:46Z yeti-dn $
+ * @(#) $Id: noise_synth.c 20105 2017-07-29 09:24:09Z yeti-dn $
* Copyright (C) 2010 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -34,8 +34,6 @@
#include "preview.h"
#include "dimensions.h"
-#define GWY_SQRT6 2.449489742783178098197284074705
-
#define NOISE_SYNTH_RUN_MODES (GWY_RUN_IMMEDIATE | GWY_RUN_INTERACTIVE)
#define DECLARE_NOISE(name) \
@@ -195,12 +193,12 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Generates uncorrelated random noise."),
"Yeti <yeti at gwyddion.net>",
- "1.2",
+ "1.3",
"David Nečas (Yeti)",
"2010",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, noise_synth)
static gboolean
module_register(void)
@@ -316,10 +314,10 @@ run_noninteractive(NoiseSynthArgs *args,
static gboolean
noise_synth_dialog(NoiseSynthArgs *args,
- GwyDimensionArgs *dimsargs,
- GwyContainer *data,
- GwyDataField *dfield_template,
- gint id)
+ GwyDimensionArgs *dimsargs,
+ GwyContainer *data,
+ GwyDataField *dfield_template,
+ gint id)
{
GtkWidget *dialog, *table, *vbox, *hbox, *notebook, *label;
NoiseSynthControls controls;
@@ -396,7 +394,7 @@ noise_synth_dialog(NoiseSynthArgs *args,
g_signal_connect_swapped(controls.dims->add, "toggled",
G_CALLBACK(noise_synth_invalidate), &controls);
- table = gtk_table_new(6 + (dfield_template ? 1 : 0), 4, FALSE);
+ table = gtk_table_new(6 + (dfield_template ? 1 : 0), 3, FALSE);
controls.table = GTK_TABLE(table);
gtk_table_set_row_spacings(controls.table, 2);
gtk_table_set_col_spacings(controls.table, 6);
@@ -406,14 +404,14 @@ noise_synth_dialog(NoiseSynthArgs *args,
row = 0;
controls.distribution = distribution_selector_new(&controls);
- gwy_table_attach_hscale(table, row, _("_Distribution:"), NULL,
+ gwy_table_attach_adjbar(table, row, _("_Distribution:"), NULL,
GTK_OBJECT(controls.distribution),
- GWY_HSCALE_WIDGET);
+ GWY_HSCALE_WIDGET_NO_EXPAND);
row++;
- label = gtk_label_new(_("Direction:"));
+ label = gtk_label_new(_("Noise type:"));
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_table_attach(GTK_TABLE(table), label, 0, 1, row, row+1,
+ gtk_table_attach(GTK_TABLE(table), label, 0, 2, row, row+1,
GTK_FILL, 0, 0, 0);
row++;
@@ -425,7 +423,7 @@ noise_synth_dialog(NoiseSynthArgs *args,
_("One-sided _negative"), NOISE_DIRECTION_DOWN,
NULL);
row = gwy_radio_buttons_attach_to_table(controls.direction,
- GTK_TABLE(table), 3, row);
+ GTK_TABLE(table), 2, row);
gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
row = gwy_synth_attach_height(&controls, row,
@@ -434,11 +432,11 @@ noise_synth_dialog(NoiseSynthArgs *args,
if (dfield_template) {
controls.sigma_init
- = gtk_button_new_with_mnemonic(_("_Like Current Channel"));
+ = gtk_button_new_with_mnemonic(_("_Like Current Image"));
g_signal_connect_swapped(controls.sigma_init, "clicked",
G_CALLBACK(sigma_init_clicked), &controls);
gtk_table_attach(GTK_TABLE(table), controls.sigma_init,
- 1, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
}
diff --git a/modules/process/obj_synth.c b/modules/process/obj_synth.c
index bed936e..41cf2de 100644
--- a/modules/process/obj_synth.c
+++ b/modules/process/obj_synth.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: obj_synth.c 19189 2016-11-06 20:09:54Z yeti-dn $
+ * @(#) $Id: obj_synth.c 20038 2017-07-07 10:43:16Z yeti-dn $
* Copyright (C) 2009-2016 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -194,10 +194,6 @@ static void shape_selected (GtkComboBox *combo,
static void sculpt_type_changed (GtkComboBox *combo,
ObjSynthControls *controls);
static void height_init_clicked (ObjSynthControls *controls);
-static gint attach_truncation (ObjSynthControls *controls,
- gint row,
- GtkObject **adj,
- gdouble *target);
static void update_coverage_value(ObjSynthControls *controls);
static void obj_synth_invalidate (ObjSynthControls *controls);
static gboolean preview_gsource (gpointer user_data);
@@ -295,14 +291,14 @@ static GwyModuleInfo module_info = {
"2009",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, obj_synth)
static gboolean
module_register(void)
{
gwy_process_func_register("obj_synth",
(GwyProcessFunc)&obj_synth,
- N_("/S_ynthetic/_Objects..."),
+ N_("/S_ynthetic/_Deposition/_Objects..."),
GWY_STOCK_SYNTHETIC_OBJECTS,
OBJ_SYNTH_RUN_MODES,
0,
@@ -330,10 +326,11 @@ obj_synth(GwyContainer *data, GwyRunType run)
rngset = gwy_rand_gen_set_new(RNG_NRNGS);
if (run == GWY_RUN_IMMEDIATE
- || obj_synth_dialog(&args, &dimsargs, rngset, data, dfield, id)) {
- obj_synth_save_args(gwy_app_settings_get(), &args, &dimsargs);
+ || obj_synth_dialog(&args, &dimsargs, rngset, data, dfield, id))
run_noninteractive(&args, &dimsargs, rngset, data, dfield, id, quark);
- }
+
+ if (run == GWY_RUN_INTERACTIVE)
+ obj_synth_save_args(gwy_app_settings_get(), &args, &dimsargs);
gwy_rand_gen_set_free(rngset);
gwy_dimensions_free_args(&dimsargs);
@@ -500,7 +497,7 @@ obj_synth_dialog(ObjSynthArgs *args,
g_signal_connect_swapped(controls.dims->add, "toggled",
G_CALLBACK(obj_synth_invalidate), &controls);
- table = gtk_table_new(19 + (dfield_template ? 1 : 0), 4, FALSE);
+ table = gtk_table_new(19 + (dfield_template ? 1 : 0), 3, FALSE);
controls.table = GTK_TABLE(table);
gtk_table_set_row_spacings(GTK_TABLE(table), 2);
gtk_table_set_col_spacings(GTK_TABLE(table), 6);
@@ -510,14 +507,15 @@ obj_synth_dialog(ObjSynthArgs *args,
row = 0;
controls.type = shape_selector_new(&controls);
- gwy_table_attach_hscale(table, row, _("_Shape:"), NULL,
- GTK_OBJECT(controls.type), GWY_HSCALE_WIDGET);
+ gwy_table_attach_adjbar(table, row, _("_Shape:"), NULL,
+ GTK_OBJECT(controls.type),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
row++;
controls.coverage = gtk_adjustment_new(args->coverage,
0.001, 50.0, 0.001, 1.0, 0);
g_object_set_data(G_OBJECT(controls.coverage), "target", &args->coverage);
- gwy_table_attach_hscale(table, row, _("Co_verage:"), NULL,
+ gwy_table_attach_adjbar(table, row, _("Co_verage:"), NULL,
controls.coverage, GWY_HSCALE_SQRT);
g_signal_connect_swapped(controls.coverage, "value-changed",
G_CALLBACK(gwy_synth_double_changed), &controls);
@@ -526,17 +524,17 @@ obj_synth_dialog(ObjSynthArgs *args,
controls.coverage_value = gtk_label_new(NULL);
gtk_misc_set_alignment(GTK_MISC(controls.coverage_value), 1.0, 0.5);
gtk_table_attach(controls.table, controls.coverage_value,
- 2, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 1, 2, row, row+1, GTK_FILL, 0, 0, 0);
controls.coverage_units = gtk_label_new(_("obj."));
gtk_misc_set_alignment(GTK_MISC(controls.coverage_units), 0.0, 0.5);
gtk_table_attach(GTK_TABLE(table), controls.coverage_units,
- 3, 4, row, row+1, GTK_FILL, 0, 0, 0);
+ 2, 3, row, row+1, GTK_FILL, 0, 0, 0);
gtk_table_set_row_spacing(GTK_TABLE(table), row, 8);
row++;
gtk_table_attach(GTK_TABLE(table), gwy_label_new_header(_("Size")),
- 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
controls.size = gtk_adjustment_new(args->size, 1.0, 1000.0, 0.1, 10.0, 0);
@@ -549,13 +547,13 @@ obj_synth_dialog(ObjSynthArgs *args,
gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
gtk_table_attach(controls.table, gwy_label_new_header(_("Aspect Ratio")),
- 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
controls.aspect = gtk_adjustment_new(args->aspect,
0.2, 5.0, 0.01, 1.0, 0);
g_object_set_data(G_OBJECT(controls.aspect), "target", &args->aspect);
- gwy_table_attach_hscale(table, row, _("_Aspect ratio:"), NULL,
+ gwy_table_attach_adjbar(table, row, _("_Aspect ratio:"), NULL,
controls.aspect, GWY_HSCALE_LOG);
g_signal_connect_swapped(controls.aspect, "value-changed",
G_CALLBACK(gwy_synth_double_changed), &controls);
@@ -567,7 +565,7 @@ obj_synth_dialog(ObjSynthArgs *args,
gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
gtk_table_attach(GTK_TABLE(table), gwy_label_new_header(_("Height")),
- 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
row = gwy_synth_attach_height(&controls, row,
@@ -576,11 +574,11 @@ obj_synth_dialog(ObjSynthArgs *args,
if (dfield_template) {
controls.height_init
- = gtk_button_new_with_mnemonic(_("_Like Current Channel"));
+ = gtk_button_new_with_mnemonic(_("_Like Current Image"));
g_signal_connect_swapped(controls.height_init, "clicked",
G_CALLBACK(height_init_clicked), &controls);
gtk_table_attach(GTK_TABLE(table), controls.height_init,
- 1, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
}
@@ -591,7 +589,7 @@ obj_synth_dialog(ObjSynthArgs *args,
g_object_set_data(G_OBJECT(controls.height_bound),
"target", &args->height_bound);
gtk_table_attach(GTK_TABLE(table), controls.height_bound,
- 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect_swapped(controls.height_bound, "toggled",
G_CALLBACK(gwy_synth_boolean_changed), &controls);
row++;
@@ -600,7 +598,8 @@ obj_synth_dialog(ObjSynthArgs *args,
&controls.height_noise,
&args->height_noise);
- row = attach_truncation(&controls, row, &controls.htrunc, &args->htrunc);
+ row = gwy_synth_attach_truncation(&controls, row,
+ &controls.htrunc, &args->htrunc);
row = gwy_synth_attach_variance(&controls, row,
&controls.htrunc_noise,
&args->htrunc_noise);
@@ -609,7 +608,7 @@ obj_synth_dialog(ObjSynthArgs *args,
= gwy_enum_combo_box_new(sculpt_types, G_N_ELEMENTS(sculpt_types),
G_CALLBACK(sculpt_type_changed), &controls,
args->sculpt, TRUE);
- gwy_table_attach_hscale(table, row, _("_Feature type:"), NULL,
+ gwy_table_attach_adjbar(table, row, _("_Feature type:"), NULL,
GTK_OBJECT(controls.sculpt), GWY_HSCALE_WIDGET);
row++;
@@ -790,31 +789,6 @@ height_init_clicked(ObjSynthControls *controls)
controls->zscale/mag);
}
-static gint
-attach_truncation(ObjSynthControls *controls,
- gint row,
- GtkObject **adj,
- gdouble *target)
-{
- GtkWidget *spin;
-
- gtk_table_set_row_spacing(controls->table, row-1, 8);
- *adj = gtk_adjustment_new(*target,
- 0.001, 1.0, 0.001, 0.1, 0);
- g_object_set_data(G_OBJECT(*adj), "target", target);
-
- spin = gwy_table_attach_hscale(GTK_WIDGET(controls->table),
- row, _("_Truncate:"), NULL, *adj,
- GWY_HSCALE_DEFAULT);
- gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 3);
- g_signal_connect_swapped(*adj, "value-changed",
- G_CALLBACK(gwy_synth_double_changed), controls);
-
- row++;
-
- return row;
-}
-
static void
update_coverage_value(ObjSynthControls *controls)
{
@@ -966,7 +940,7 @@ object_synth_iter(GwyDataField *surface,
angle += gwy_rand_gen_set_gaussian(rngset, RNG_ANGLE,
2*args->angle_noise);
- // Use a specific distribution for htrunc.
+ /* Use a specific distribution for htrunc. */
if (args->htrunc_noise) {
gdouble q = exp(gwy_rand_gen_set_gaussian(rngset, RNG_HTRUNC,
args->htrunc_noise));
diff --git a/modules/process/otsu_threshold.c b/modules/process/otsu_threshold.c
index 7734e1c..a7eb3db 100644
--- a/modules/process/otsu_threshold.c
+++ b/modules/process/otsu_threshold.c
@@ -1,4 +1,5 @@
/*
+ * @(#) $Id: otsu_threshold.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2013 Brazilian Nanotechnology National Laboratory
* E-mail: Vinicius Barboza <vinicius.barboza at lnnano.cnpem.br>
*
@@ -44,7 +45,7 @@ static GwyModuleInfo module_info = {
};
/* Module query */
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, otsu_threshold)
/* Module register */
static gboolean
@@ -52,13 +53,12 @@ module_register(void)
{
gwy_process_func_register("otsu-threshold",
(GwyProcessFunc)&otsu_threshold,
- N_("/_Grains/_Mark by Otsu's..."),
+ N_("/_Grains/_Mark by Otsu's"),
NULL,
OTSU_RUN_MODES,
GWY_MENU_FLAG_DATA,
N_("Automated threshold using Otsu's method "
- "on heights.")
- );
+ "on heights."));
return TRUE;
}
diff --git a/modules/process/outliers.c b/modules/process/outliers.c
index 665dd0c..f7c64fa 100644
--- a/modules/process/outliers.c
+++ b/modules/process/outliers.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: outliers.c 17691 2015-11-01 10:27:46Z yeti-dn $
+ * @(#) $Id: outliers.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2004,2008 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -24,6 +24,7 @@
#include <libgwyddion/gwymath.h>
#include <libprocess/correct.h>
#include <libprocess/stats.h>
+#include <libgwydgets/gwystock.h>
#include <libgwymodule/gwymodule-process.h>
#include <app/gwyapp.h>
#include "preview.h"
@@ -39,12 +40,12 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Creates mask of outliers."),
"Petr Klapetek <klapetek at gwyddion.net>",
- "1.4",
+ "1.5",
"David Nečas (Yeti) & Petr Klapetek",
"2004",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, outliers)
static gboolean
module_register(void)
@@ -52,7 +53,7 @@ module_register(void)
gwy_process_func_register("outliers",
(GwyProcessFunc)&outliers,
N_("/_Correct Data/Mask of _Outliers"),
- NULL,
+ GWY_STOCK_MARK_OUTLIERS,
OUTLIERS_RUN_MODES,
GWY_MENU_FLAG_DATA,
N_("Mark data farther than 3σ from mean value"));
@@ -78,12 +79,7 @@ outliers(GwyContainer *data, GwyRunType run)
0);
g_return_if_fail(dfield && dquark);
has_mask = !!maskfield;
-
- /* Always owning a reference simplifies the logic. */
- if (has_mask)
- g_object_ref(maskfield);
- else
- maskfield = create_mask_field(dfield);
+ maskfield = create_mask_field(dfield);
gwy_data_field_mask_outliers(dfield, maskfield, thresh);
@@ -96,22 +92,16 @@ outliers(GwyContainer *data, GwyRunType run)
0.0, 0.0, &count, NULL);
count = xres*yres - count;
- if (count || has_mask)
+ if (count || has_mask) {
gwy_app_undo_qcheckpointv(data, 1, &mquark);
- if (count) {
- if (has_mask)
- gwy_data_field_data_changed(maskfield);
- else
+ if (count)
gwy_container_set_object(data, mquark, maskfield);
- }
- else {
- if (has_mask)
+ else
gwy_container_remove(data, mquark);
- /* otherwise: do nothing */
- }
- gwy_app_channel_log_add_proc(data, id, id);
+ gwy_app_channel_log_add_proc(data, id, id);
+ }
g_object_unref(maskfield);
}
diff --git a/modules/process/pat_synth.c b/modules/process/pat_synth.c
index 4db4730..090f43f 100644
--- a/modules/process/pat_synth.c
+++ b/modules/process/pat_synth.c
@@ -1,6 +1,6 @@
/*
- * @(#) $Id: pat_synth.c 19044 2016-10-08 19:10:46Z yeti-dn $
- * Copyright (C) 2010,2011 David Necas (Yeti).
+ * @(#) $Id: pat_synth.c 19948 2017-06-22 14:05:41Z yeti-dn $
+ * Copyright (C) 2010-2017 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
* This program is free software; you can redistribute it and/or modify
@@ -221,12 +221,12 @@ static GwyModuleInfo module_info = {
N_("Generates surfaces representing simple patterns "
"(steps, ridges, ...)."),
"Yeti <yeti at gwyddion.net>",
- "1.5",
+ "1.6",
"David Nečas (Yeti)",
"2010",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, pat_synth)
static gboolean
module_register(void)
@@ -444,7 +444,7 @@ pat_synth_dialog(PatSynthArgs *args,
g_signal_connect_swapped(controls.dims->add, "toggled",
G_CALLBACK(pat_synth_invalidate), &controls);
- table = gtk_table_new(1, 4, FALSE);
+ table = gtk_table_new(1, 3, FALSE);
controls.table_parameters = GTK_TABLE(table);
gtk_table_set_row_spacings(controls.table_parameters, 2);
gtk_table_set_col_spacings(controls.table_parameters, 6);
@@ -455,8 +455,9 @@ pat_synth_dialog(PatSynthArgs *args,
row = 0;
controls.type = pattern_selector_new(&controls);
- gwy_table_attach_hscale(table, row, _("_Pattern:"), NULL,
- GTK_OBJECT(controls.type), GWY_HSCALE_WIDGET);
+ gwy_table_attach_adjbar(table, row, _("_Pattern:"), NULL,
+ GTK_OBJECT(controls.type),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
row++;
g_object_set_data(G_OBJECT(table), "base-rows", GINT_TO_POINTER(row));
diff --git a/modules/process/phase_synth.c b/modules/process/phase_synth.c
new file mode 100644
index 0000000..f6e3212
--- /dev/null
+++ b/modules/process/phase_synth.c
@@ -0,0 +1,808 @@
+/*
+ * @(#) $Id: phase_synth.c 19948 2017-06-22 14:05:41Z yeti-dn $
+ * Copyright (C) 2017 David Necas (Yeti).
+ * E-mail: yeti at gwyddion.net.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "config.h"
+#include <string.h>
+#include <stdlib.h>
+#include <gtk/gtk.h>
+#include <libgwyddion/gwymacros.h>
+#include <libgwyddion/gwymath.h>
+#include <libgwyddion/gwyrandgenset.h>
+#include <libprocess/arithmetic.h>
+#include <libprocess/elliptic.h>
+#include <libprocess/filters.h>
+#include <libprocess/grains.h>
+#include <libprocess/inttrans.h>
+#include <libprocess/stats.h>
+#include <libgwymodule/gwymodule-process.h>
+#include <libgwydgets/gwystock.h>
+#include <app/gwyapp.h>
+#include "preview.h"
+#include "dimensions.h"
+
+#define PHASE_SYNTH_RUN_MODES (GWY_RUN_IMMEDIATE | GWY_RUN_INTERACTIVE)
+
+enum {
+ PAGE_DIMENSIONS = 0,
+ PAGE_GENERATOR = 1,
+ PAGE_NPAGES
+};
+
+typedef struct {
+ gint active_page;
+ gint seed;
+ gboolean randomize;
+ gboolean update;
+ gdouble size;
+ gdouble size_noise;
+ gdouble height;
+} PhaseSynthArgs;
+
+typedef struct {
+ PhaseSynthArgs *args;
+ GwyDimensions *dims;
+ GtkWidget *dialog;
+ GtkWidget *view;
+ GtkWidget *update;
+ GtkWidget *update_now;
+ GtkObject *seed;
+ GtkTable *table;
+ GtkWidget *randomize;
+ GtkObject *size;
+ GtkWidget *size_value;
+ GtkWidget *size_units;
+ GtkObject *size_noise;
+ GtkObject *height;
+ GtkWidget *height_units;
+ GtkWidget *height_init;
+ GwyContainer *mydata;
+ GwyDataField *surface;
+ GwyDataField *phases;
+ gdouble pxsize;
+ gdouble zscale;
+ gboolean in_init;
+ gulong sid;
+} PhaseSynthControls;
+
+static gboolean module_register (void);
+static void phase_synth (GwyContainer *data,
+ GwyRunType run);
+static void run_noninteractive (PhaseSynthArgs *args,
+ const GwyDimensionArgs *dimsargs,
+ GwyContainer *data,
+ GwyDataField *dfield,
+ gint oldid,
+ GQuark quark);
+static gboolean phase_synth_dialog (PhaseSynthArgs *args,
+ GwyDimensionArgs *dimsargs,
+ GwyContainer *data,
+ GwyDataField *dfield,
+ gint id);
+static void update_controls (PhaseSynthControls *controls,
+ PhaseSynthArgs *args);
+static void page_switched (PhaseSynthControls *controls,
+ GtkNotebookPage *page,
+ gint pagenum);
+static void update_values (PhaseSynthControls *controls);
+static void height_init_clicked (PhaseSynthControls *controls);
+static void phase_synth_invalidate(PhaseSynthControls *controls);
+static gboolean preview_gsource (gpointer user_data);
+static void preview (PhaseSynthControls *controls);
+static void phase_synth_do (const PhaseSynthArgs *args,
+ const GwyDimensionArgs *dimsargs,
+ GwyDataField *dfield);
+static void phase_synth_load_args (GwyContainer *container,
+ PhaseSynthArgs *args,
+ GwyDimensionArgs *dimsargs);
+static void phase_synth_save_args (GwyContainer *container,
+ const PhaseSynthArgs *args,
+ const GwyDimensionArgs *dimsargs);
+
+#define GWY_SYNTH_CONTROLS PhaseSynthControls
+#define GWY_SYNTH_INVALIDATE(controls) \
+ phase_synth_invalidate(controls)
+
+#include "synth.h"
+
+static const PhaseSynthArgs phase_synth_defaults = {
+ PAGE_DIMENSIONS,
+ 42, TRUE, TRUE,
+ 20.0, 0.05, 1.0,
+};
+
+static const GwyDimensionArgs dims_defaults = GWY_DIMENSION_ARGS_INIT;
+
+static GwyModuleInfo module_info = {
+ GWY_MODULE_ABI_VERSION,
+ &module_register,
+ N_("Generates phase-separated structures."),
+ "Yeti <yeti at gwyddion.net>",
+ "1.1",
+ "David Nečas (Yeti)",
+ "2017",
+};
+
+GWY_MODULE_QUERY2(module_info, phase_synth)
+
+static gboolean
+module_register(void)
+{
+ gwy_process_func_register("phase_synth",
+ (GwyProcessFunc)&phase_synth,
+ N_("/S_ynthetic/P_hases..."),
+ GWY_STOCK_SYNTHETIC_PHASES,
+ PHASE_SYNTH_RUN_MODES,
+ 0,
+ N_("Generate surface with separated phases"));
+
+ return TRUE;
+}
+
+static void
+phase_synth(GwyContainer *data, GwyRunType run)
+{
+ PhaseSynthArgs args;
+ GwyDimensionArgs dimsargs;
+ GwyDataField *dfield;
+ GQuark quark;
+ gint id;
+
+ g_return_if_fail(run & PHASE_SYNTH_RUN_MODES);
+ phase_synth_load_args(gwy_app_settings_get(), &args, &dimsargs);
+ gwy_app_data_browser_get_current(GWY_APP_DATA_FIELD, &dfield,
+ GWY_APP_DATA_FIELD_ID, &id,
+ GWY_APP_DATA_FIELD_KEY, &quark,
+ 0);
+
+ if (run == GWY_RUN_IMMEDIATE
+ || phase_synth_dialog(&args, &dimsargs, data, dfield, id))
+ run_noninteractive(&args, &dimsargs, data, dfield, id, quark);
+
+ if (run == GWY_RUN_INTERACTIVE)
+ phase_synth_save_args(gwy_app_settings_get(), &args, &dimsargs);
+
+ gwy_dimensions_free_args(&dimsargs);
+}
+
+static gboolean
+phase_synth_dialog(PhaseSynthArgs *args,
+ GwyDimensionArgs *dimsargs,
+ GwyContainer *data,
+ GwyDataField *dfield_template,
+ gint id)
+{
+ GtkWidget *dialog, *table, *vbox, *hbox, *notebook, *spin;
+ PhaseSynthControls controls;
+ GwyDataField *dfield;
+ GtkObject *adj;
+ gboolean finished;
+ gint response;
+ gint row;
+
+ gwy_clear(&controls, 1);
+ controls.in_init = TRUE;
+ controls.args = args;
+ dialog = gtk_dialog_new_with_buttons(_("Separated Phases"),
+ NULL, 0,
+ _("_Reset"), RESPONSE_RESET,
+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+ GTK_STOCK_OK, GTK_RESPONSE_OK,
+ NULL);
+ gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK);
+ gwy_help_add_to_proc_dialog(GTK_DIALOG(dialog), GWY_HELP_DEFAULT);
+ controls.dialog = dialog;
+
+ hbox = gtk_hbox_new(FALSE, 2);
+ gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), hbox,
+ FALSE, FALSE, 4);
+
+ vbox = gtk_vbox_new(FALSE, 4);
+ gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 4);
+
+ controls.mydata = gwy_container_new();
+ dfield = gwy_data_field_new(PREVIEW_SIZE, PREVIEW_SIZE,
+ dimsargs->measure*PREVIEW_SIZE,
+ dimsargs->measure*PREVIEW_SIZE,
+ TRUE);
+ gwy_container_set_object_by_name(controls.mydata, "/0/data", dfield);
+ controls.phases = gwy_data_field_new_alike(dfield, FALSE);
+ if (dfield_template) {
+ gwy_app_sync_data_items(data, controls.mydata, id, 0, FALSE,
+ GWY_DATA_ITEM_PALETTE,
+ 0);
+ controls.surface = gwy_synth_surface_for_preview(dfield_template,
+ PREVIEW_SIZE);
+ controls.zscale = gwy_data_field_get_rms(dfield_template);
+ }
+ controls.view = create_preview(controls.mydata, 0, PREVIEW_SIZE, FALSE);
+ gtk_box_pack_start(GTK_BOX(vbox), controls.view, FALSE, FALSE, 0);
+
+ gtk_box_pack_start(GTK_BOX(vbox),
+ gwy_synth_instant_updates_new(&controls,
+ &controls.update_now,
+ &controls.update,
+ &args->update),
+ FALSE, FALSE, 0);
+ g_signal_connect_swapped(controls.update_now, "clicked",
+ G_CALLBACK(preview), &controls);
+
+ gtk_box_pack_start(GTK_BOX(vbox),
+ gwy_synth_random_seed_new(&controls,
+ &controls.seed, &args->seed),
+ FALSE, FALSE, 0);
+
+ controls.randomize = gwy_synth_randomize_new(&args->randomize);
+ gtk_box_pack_start(GTK_BOX(vbox), controls.randomize, FALSE, FALSE, 0);
+
+ notebook = gtk_notebook_new();
+ gtk_box_pack_start(GTK_BOX(hbox), notebook, TRUE, TRUE, 4);
+ g_signal_connect_swapped(notebook, "switch-page",
+ G_CALLBACK(page_switched), &controls);
+
+ controls.dims = gwy_dimensions_new(dimsargs, dfield_template);
+ gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
+ gwy_dimensions_get_widget(controls.dims),
+ gtk_label_new(_("Dimensions")));
+ if (controls.dims->add)
+ g_signal_connect_swapped(controls.dims->add, "toggled",
+ G_CALLBACK(phase_synth_invalidate), &controls);
+
+ table = gtk_table_new(3 + (dfield_template ? 1 : 0), 3, FALSE);
+ controls.table = GTK_TABLE(table);
+ gtk_table_set_row_spacings(controls.table, 2);
+ gtk_table_set_col_spacings(controls.table, 6);
+ gtk_container_set_border_width(GTK_CONTAINER(table), 4);
+ gtk_notebook_append_page(GTK_NOTEBOOK(notebook), table,
+ gtk_label_new(_("Generator")));
+ row = 0;
+
+ controls.size = gtk_adjustment_new(args->size, 1.0, 1000.0, 0.1, 10.0, 0);
+ row = gwy_synth_attach_lateral(&controls, row, controls.size, &args->size,
+ _("_Size:"), GWY_HSCALE_LOG,
+ NULL,
+ &controls.size_value, &controls.size_units);
+
+ adj = gtk_adjustment_new(args->size_noise, 0.001, 0.5, 0.001, 0.1, 0);
+ g_object_set_data(G_OBJECT(adj), "target", &args->size_noise);
+
+ spin = gwy_table_attach_adjbar(GTK_WIDGET(controls.table),
+ row, _("Size s_pread:"), NULL, adj,
+ GWY_HSCALE_SQRT);
+ gtk_spin_button_set_snap_to_ticks(GTK_SPIN_BUTTON(spin), FALSE);
+ gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 3);
+ g_signal_connect_swapped(adj, "value-changed",
+ G_CALLBACK(gwy_synth_double_changed), &controls);
+ row++;
+
+ gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
+ row = gwy_synth_attach_height(&controls, row,
+ &controls.height, &args->height,
+ _("_Height:"), NULL, &controls.height_units);
+
+ if (dfield_template) {
+ controls.height_init
+ = gtk_button_new_with_mnemonic(_("_Like Current Image"));
+ g_signal_connect_swapped(controls.height_init, "clicked",
+ G_CALLBACK(height_init_clicked), &controls);
+ gtk_table_attach(GTK_TABLE(table), controls.height_init,
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
+ row++;
+ }
+
+ gtk_widget_show_all(dialog);
+ controls.in_init = FALSE;
+ /* Must be done when widgets are shown, see GtkNotebook docs */
+ gtk_notebook_set_current_page(GTK_NOTEBOOK(notebook), args->active_page);
+ update_values(&controls);
+ phase_synth_invalidate(&controls);
+
+ finished = FALSE;
+ while (!finished) {
+ response = gtk_dialog_run(GTK_DIALOG(dialog));
+ switch (response) {
+ case GTK_RESPONSE_CANCEL:
+ case GTK_RESPONSE_DELETE_EVENT:
+ case GTK_RESPONSE_OK:
+ gtk_widget_destroy(dialog);
+ case GTK_RESPONSE_NONE:
+ finished = TRUE;
+ break;
+
+ case RESPONSE_RESET:
+ {
+ gboolean temp = args->update;
+ gint temp2 = args->active_page;
+ *args = phase_synth_defaults;
+ args->active_page = temp2;
+ args->update = temp;
+ }
+ controls.in_init = TRUE;
+ update_controls(&controls, args);
+ controls.in_init = FALSE;
+ if (args->update)
+ preview(&controls);
+ break;
+
+ default:
+ g_assert_not_reached();
+ break;
+ }
+ }
+
+ if (controls.sid) {
+ g_source_remove(controls.sid);
+ controls.sid = 0;
+ }
+ g_object_unref(controls.mydata);
+ GWY_OBJECT_UNREF(controls.surface);
+ GWY_OBJECT_UNREF(controls.phases);
+ gwy_dimensions_free(controls.dims);
+
+ return response == GTK_RESPONSE_OK;
+}
+
+static void
+update_controls(PhaseSynthControls *controls,
+ PhaseSynthArgs *args)
+{
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls->update),
+ args->update);
+ gtk_adjustment_set_value(GTK_ADJUSTMENT(controls->seed), args->seed);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls->randomize),
+ args->randomize);
+ gtk_adjustment_set_value(GTK_ADJUSTMENT(controls->height), args->height);
+ gtk_adjustment_set_value(GTK_ADJUSTMENT(controls->size),
+ args->size);
+}
+
+static void
+page_switched(PhaseSynthControls *controls,
+ G_GNUC_UNUSED GtkNotebookPage *page,
+ gint pagenum)
+{
+ if (controls->in_init)
+ return;
+
+ controls->args->active_page = pagenum;
+
+ if (pagenum == PAGE_GENERATOR)
+ update_values(controls);
+}
+
+static void
+update_values(PhaseSynthControls *controls)
+{
+ GwyDimensions *dims = controls->dims;
+
+ controls->pxsize = dims->args->measure * pow10(dims->args->xypow10);
+ if (controls->height_units)
+ gtk_label_set_markup(GTK_LABEL(controls->height_units),
+ dims->zvf->units);
+ gtk_label_set_markup(GTK_LABEL(controls->size_units),
+ dims->xyvf->units);
+
+ gwy_synth_update_lateral(controls, GTK_ADJUSTMENT(controls->size));
+}
+
+static void
+height_init_clicked(PhaseSynthControls *controls)
+{
+ gdouble mag = pow10(controls->dims->args->zpow10);
+ gtk_adjustment_set_value(GTK_ADJUSTMENT(controls->height),
+ controls->zscale/mag);
+}
+
+static void
+phase_synth_invalidate(PhaseSynthControls *controls)
+{
+ /* create preview if instant updates are on */
+ if (controls->args->update && !controls->in_init && !controls->sid) {
+ controls->sid = g_idle_add_full(G_PRIORITY_LOW, preview_gsource,
+ controls, NULL);
+ }
+}
+
+static gboolean
+preview_gsource(gpointer user_data)
+{
+ PhaseSynthControls *controls = (PhaseSynthControls*)user_data;
+ controls->sid = 0;
+
+ preview(controls);
+
+ return FALSE;
+}
+
+static void
+preview(PhaseSynthControls *controls)
+{
+ PhaseSynthArgs *args = controls->args;
+ GwyDataField *dfield;
+
+ dfield = GWY_DATA_FIELD(gwy_container_get_object_by_name(controls->mydata,
+ "/0/data"));
+ if (controls->dims->args->add && controls->surface)
+ gwy_data_field_copy(controls->surface, dfield, FALSE);
+ else
+ gwy_data_field_clear(dfield);
+
+ phase_synth_do(args, controls->dims->args, dfield);
+
+ gwy_data_field_data_changed(dfield);
+}
+
+static void
+run_noninteractive(PhaseSynthArgs *args,
+ const GwyDimensionArgs *dimsargs,
+ GwyContainer *data,
+ GwyDataField *dfield,
+ gint oldid,
+ GQuark quark)
+{
+ GwySIUnit *siunit;
+ gboolean replace = dimsargs->replace && dfield;
+ gboolean add = dimsargs->add && dfield;
+ gint newid;
+
+ if (args->randomize)
+ args->seed = g_random_int() & 0x7fffffff;
+
+ if (replace) {
+ /* Always take a reference so that we can always unref. */
+ g_object_ref(dfield);
+
+ gwy_app_undo_qcheckpointv(data, 1, &quark);
+ if (!add)
+ gwy_data_field_clear(dfield);
+
+ gwy_app_channel_log_add_proc(data, oldid, oldid);
+ }
+ else {
+ if (add)
+ dfield = gwy_data_field_duplicate(dfield);
+ else {
+ gdouble mag = pow10(dimsargs->xypow10) * dimsargs->measure;
+ dfield = gwy_data_field_new(dimsargs->xres, dimsargs->yres,
+ mag*dimsargs->xres, mag*dimsargs->yres,
+ TRUE);
+
+ siunit = gwy_data_field_get_si_unit_xy(dfield);
+ gwy_si_unit_set_from_string(siunit, dimsargs->xyunits);
+
+ siunit = gwy_data_field_get_si_unit_z(dfield);
+ gwy_si_unit_set_from_string(siunit, dimsargs->zunits);
+ }
+ }
+
+ phase_synth_do(args, dimsargs, dfield);
+
+ if (replace)
+ gwy_data_field_data_changed(dfield);
+ else {
+ if (data) {
+ newid = gwy_app_data_browser_add_data_field(dfield, data, TRUE);
+ if (oldid != -1)
+ gwy_app_sync_data_items(data, data, oldid, newid, FALSE,
+ GWY_DATA_ITEM_GRADIENT,
+ 0);
+ }
+ else {
+ newid = 0;
+ data = gwy_container_new();
+ gwy_container_set_object(data, gwy_app_get_data_key_for_id(newid),
+ dfield);
+ gwy_app_data_browser_add(data);
+ gwy_app_data_browser_reset_visibility(data,
+ GWY_VISIBILITY_RESET_SHOW_ALL);
+ g_object_unref(data);
+ }
+
+ gwy_app_set_data_field_title(data, newid, _("Generated"));
+ gwy_app_channel_log_add_proc(data, add ? oldid : -1, newid);
+ }
+ g_object_unref(dfield);
+}
+
+#ifdef HAVE_SINCOS
+#define _gwy_sincos sincos
+#else
+static inline void
+_gwy_sincos(gdouble x, gdouble *s, gdouble *c)
+{
+ *s = sin(x);
+ *c = cos(x);
+}
+#endif
+
+static void
+generate_narrow_freq_surface(gdouble freq, gdouble freq_range,
+ GwyDataField *buf_re, GwyDataField *buf_im,
+ GwyDataField *out_re, GwyDataField *out_im,
+ GRand *rng)
+{
+ gdouble *re, *im;
+ gint xres, yres, i, j, k;
+
+ re = gwy_data_field_get_data(buf_re);
+ im = gwy_data_field_get_data(buf_im);
+
+ xres = gwy_data_field_get_xres(out_re);
+ yres = gwy_data_field_get_yres(out_re);
+
+ freq /= G_PI;
+ freq_range /= G_PI;
+
+ k = 0;
+ for (i = 0; i < yres; i++) {
+ gdouble y = (i <= yres/2 ? i : yres-i)/(0.5*yres);
+ for (j = 0; j < xres; j++) {
+ gdouble x = (j <= xres/2 ? j : xres-j)/(0.5*xres);
+ gdouble r = sqrt(x*x + y*y);
+ gdouble f, phi, s, c;
+
+ phi = 2.0*G_PI*g_rand_double(rng);
+ f = g_rand_double(rng);
+ r = fabs((r - freq)/freq_range);
+ if (r > 30.0)
+ re[k] = im[k] = 0.0;
+ else {
+ _gwy_sincos(phi, &s, &c);
+ r = exp(r);
+ f /= r + 1.0/r;
+ re[k] = f*s;
+ im[k] = f*c;
+ }
+ k++;
+ }
+ }
+ re[0] = im[0] = 0.0;
+
+ gwy_data_field_2dfft_raw(buf_re, buf_im, out_re, out_im,
+ GWY_TRANSFORM_DIRECTION_BACKWARD);
+}
+
+static void
+threshold_based_on_distance(GwyDataField *dfield,
+ GwyDataField *buf1,
+ GwyDataField *buf2,
+ GwyDataField *result)
+{
+ gdouble thresh;
+
+ thresh = gwy_data_field_otsu_threshold(dfield);
+
+ gwy_data_field_copy(dfield, buf1, FALSE);
+ gwy_data_field_threshold(buf1, thresh, 0.0, 1.0);
+ gwy_data_field_grains_invert(buf1);
+ gwy_data_field_grains_thin(buf1);
+ gwy_data_field_mark_extrema(dfield, result, FALSE);
+ gwy_data_field_max_of_fields(buf1, result, buf1);
+ gwy_data_field_grains_invert(buf1);
+ gwy_data_field_grain_distance_transform(buf1);
+
+ gwy_data_field_copy(dfield, buf2, FALSE);
+ gwy_data_field_threshold(buf2, thresh, 0.0, 1.0);
+ gwy_data_field_grains_thin(buf2);
+ gwy_data_field_mark_extrema(dfield, result, TRUE);
+ gwy_data_field_max_of_fields(buf2, result, buf2);
+ gwy_data_field_grains_invert(buf2);
+ gwy_data_field_grain_distance_transform(buf2);
+
+ gwy_data_field_subtract_fields(result, buf1, buf2);
+ gwy_data_field_threshold(result, 0.0, 0.0, 1.0);
+}
+
+#if 0
+static GwyXY*
+find_extrema_pointset(GwyDataField *dfield, GwyDataField *buf, gboolean maxima,
+ guint *npoints)
+{
+ const GwyGrainQuantity quantities[] = {
+ GWY_GRAIN_VALUE_CENTER_X, GWY_GRAIN_VALUE_CENTER_Y,
+ };
+ guint xres = gwy_data_field_get_xres(dfield);
+ guint yres = gwy_data_field_get_yres(dfield);
+ gint *grains = g_new0(gint, xres*yres);
+ gdouble **values;
+ guint ngrains, i;
+ GwyXY *coords;
+
+ gwy_data_field_mark_extrema(dfield, buf, maxima);
+ ngrains = gwy_data_field_number_grains(buf, grains);
+
+ values = gwy_data_field_grains_get_quantities(dfield, NULL, quantities, 2,
+ ngrains, grains);
+ coords = g_new(GwyXY, ngrains);
+ for (i = 0; i < ngrains; i++) {
+ coords[i].x = values[0][i+1];
+ coords[i].y = values[1][i+1];
+ }
+
+ g_free(grains);
+ g_free(values[0]);
+ g_free(values[1]);
+ g_free(values);
+
+ *npoints = ngrains;
+ return coords;
+}
+#endif
+
+static void
+regularise_with_asf(GwyDataField *dfield, GwyDataField *buf,
+ GwyDataField *kernel, guint maxksize)
+{
+ guint i, res, xres = dfield->xres, yres = dfield->yres;
+
+ gwy_data_field_copy(dfield, buf, FALSE);
+ for (i = 1; i <= maxksize; i++) {
+ res = 2*i + 1;
+ gwy_data_field_resample(kernel, res, res, GWY_INTERPOLATION_NONE);
+ gwy_data_field_clear(kernel);
+ gwy_data_field_elliptic_area_fill(kernel, 0, 0, res, res, 1.0);
+
+ gwy_data_field_area_filter_min_max(dfield, kernel,
+ GWY_MIN_MAX_FILTER_OPENING,
+ 0, 0, xres, yres);
+ gwy_data_field_area_filter_min_max(dfield, kernel,
+ GWY_MIN_MAX_FILTER_CLOSING,
+ 0, 0, xres, yres);
+
+ gwy_data_field_area_filter_min_max(buf, kernel,
+ GWY_MIN_MAX_FILTER_CLOSING,
+ 0, 0, xres, yres);
+ gwy_data_field_area_filter_min_max(buf, kernel,
+ GWY_MIN_MAX_FILTER_OPENING,
+ 0, 0, xres, yres);
+ }
+ gwy_data_field_sum_fields(dfield, buf, dfield);
+ gwy_data_field_multiply(dfield, 0.5);
+}
+
+static void
+phase_synth_do(const PhaseSynthArgs *args,
+ const GwyDimensionArgs *dimsargs,
+ GwyDataField *dfield)
+{
+ GwyDataField *buf1, *buf2, *buf3, *kernel, *tmp;
+ guint xres, yres, kxres, kyres, extsize, asfradius;
+ GwyRandGenSet *rngset;
+ gdouble freq_range = args->size_noise, freq = G_PI/args->size;
+
+ /* spread is relative */
+ freq_range *= freq;
+ /* rough mean frequency correction */
+ freq /= 1.0 + pow(freq_range/freq, 2)/3.0;
+
+ kxres = GWY_ROUND(2.0*G_PI/freq * 1.2) | 1;
+ kyres = GWY_ROUND(2.0*G_PI/freq * 1.2) | 1;
+ extsize = GWY_ROUND(G_PI/freq);
+ asfradius = GWY_ROUND(0.08*2.0*G_PI/freq);
+ gwy_debug("kernel %ux%u, extsize %u, asf %u",
+ kxres, kyres, extsize, asfradius);
+
+ xres = gwy_data_field_get_xres(dfield);
+ yres = gwy_data_field_get_yres(dfield);
+
+ buf1 = gwy_data_field_new_alike(dfield, FALSE);
+ buf2 = gwy_data_field_new_alike(dfield, FALSE);
+ buf3 = gwy_data_field_new_alike(dfield, FALSE);
+
+ rngset = gwy_rand_gen_set_new(1);
+ gwy_rand_gen_set_init(rngset, args->seed);
+
+ generate_narrow_freq_surface(freq, freq_range, buf1, buf2, dfield, buf3,
+ gwy_rand_gen_set_rng(rngset, 0));
+ tmp = gwy_data_field_extend(dfield, extsize, extsize, extsize, extsize,
+ GWY_EXTERIOR_PERIODIC, 0.0, FALSE);
+ gwy_data_field_resample(buf1, tmp->xres, tmp->yres, GWY_INTERPOLATION_NONE);
+ gwy_data_field_resample(buf2, tmp->xres, tmp->yres, GWY_INTERPOLATION_NONE);
+ gwy_data_field_resample(buf3, tmp->xres, tmp->yres, GWY_INTERPOLATION_NONE);
+
+ kernel = gwy_data_field_new(kxres, kyres, 1.0, 1.0, TRUE);
+ gwy_data_field_elliptic_area_fill(kernel, 0, 0, kxres, kyres, 1.0);
+ gwy_data_field_area_filter_min_max(dfield, kernel,
+ GWY_MIN_MAX_FILTER_NORMALIZATION,
+ 0, 0, xres, yres);
+ gwy_data_field_copy(tmp, buf3, FALSE);
+ threshold_based_on_distance(buf3, buf1, buf2, tmp);
+ regularise_with_asf(tmp, buf1, kernel, asfradius);
+
+ gwy_data_field_area_copy(tmp, dfield,
+ extsize, extsize, dfield->xres, dfield->yres,
+ 0, 0);
+ gwy_data_field_multiply(dfield, args->height * pow10(dimsargs->zpow10));
+
+ g_object_unref(kernel);
+ g_object_unref(tmp);
+ g_object_unref(buf1);
+ g_object_unref(buf2);
+ g_object_unref(buf3);
+
+ gwy_rand_gen_set_free(rngset);
+}
+
+static const gchar prefix[] = "/module/phase_synth";
+static const gchar active_page_key[] = "/module/phase_synth/active_page";
+static const gchar height_key[] = "/module/phase_synth/height";
+static const gchar randomize_key[] = "/module/phase_synth/randomize";
+static const gchar seed_key[] = "/module/phase_synth/seed";
+static const gchar size_key[] = "/module/phase_synth/size";
+static const gchar size_noise_key[] = "/module/phase_synth/size_noise";
+static const gchar update_key[] = "/module/phase_synth/update";
+
+static void
+phase_synth_sanitize_args(PhaseSynthArgs *args)
+{
+ args->active_page = CLAMP(args->active_page,
+ PAGE_DIMENSIONS, PAGE_NPAGES-1);
+ args->update = !!args->update;
+ args->seed = MAX(0, args->seed);
+ args->randomize = !!args->randomize;
+ args->size = CLAMP(args->size, 1.0, 1000.0);
+ args->size_noise = CLAMP(args->size_noise, 0.001, 0.5);
+ args->height = CLAMP(args->height, 0.001, 10000.0);
+}
+
+static void
+phase_synth_load_args(GwyContainer *container,
+ PhaseSynthArgs *args,
+ GwyDimensionArgs *dimsargs)
+{
+ *args = phase_synth_defaults;
+
+ gwy_container_gis_int32_by_name(container, active_page_key,
+ &args->active_page);
+ gwy_container_gis_boolean_by_name(container, update_key, &args->update);
+ gwy_container_gis_int32_by_name(container, seed_key, &args->seed);
+ gwy_container_gis_boolean_by_name(container, randomize_key,
+ &args->randomize);
+ gwy_container_gis_double_by_name(container, height_key, &args->height);
+ gwy_container_gis_double_by_name(container, size_key, &args->size);
+ gwy_container_gis_double_by_name(container, size_noise_key,
+ &args->size_noise);
+ phase_synth_sanitize_args(args);
+
+ gwy_clear(dimsargs, 1);
+ gwy_dimensions_copy_args(&dims_defaults, dimsargs);
+ gwy_dimensions_load_args(dimsargs, container, prefix);
+}
+
+static void
+phase_synth_save_args(GwyContainer *container,
+ const PhaseSynthArgs *args,
+ const GwyDimensionArgs *dimsargs)
+{
+ gwy_container_set_int32_by_name(container, active_page_key,
+ args->active_page);
+ gwy_container_set_boolean_by_name(container, update_key, args->update);
+ gwy_container_set_int32_by_name(container, seed_key, args->seed);
+ gwy_container_set_boolean_by_name(container, randomize_key,
+ args->randomize);
+ gwy_container_set_double_by_name(container, height_key, args->height);
+ gwy_container_set_double_by_name(container, size_key, args->size);
+ gwy_container_set_double_by_name(container, size_noise_key,
+ args->size_noise);
+
+ gwy_dimensions_save_args(dimsargs, container, prefix);
+}
+
+/* vim: set cin et ts=4 sw=4 cino=>1s,e0,n0,f0,{0,}0,^0,\:1s,=0,g1s,h0,t0,+1s,c3,(0,u0 : */
diff --git a/modules/process/pid.c b/modules/process/pid.c
index 8cc7884..b24bd18 100644
--- a/modules/process/pid.c
+++ b/modules/process/pid.c
@@ -78,7 +78,6 @@ static gboolean run_pid (GwyDataField *dfield,
static void pid_values_update (PIDControls *controls,
PIDArgs *args);
-
static const PIDArgs pid_defaults = {
1,
1,
@@ -100,7 +99,7 @@ static GwyModuleInfo module_info = {
"2012",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, pid)
static gboolean
module_register(void)
@@ -191,9 +190,8 @@ static gboolean
pid_dialog(PIDArgs *args)
{
GtkWidget *dialog, *table, *spin;
- gint row = 0;
+ gint response, row = 0;
PIDControls controls;
- gint response;
dialog = gtk_dialog_new_with_buttons(_("PID simulation"), NULL, 0,
_("_Reset"), RESPONSE_RESET,
@@ -203,7 +201,7 @@ pid_dialog(PIDArgs *args)
gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK);
gwy_help_add_to_proc_dialog(GTK_DIALOG(dialog), GWY_HELP_DEFAULT);
- table = gtk_table_new(4, 4, FALSE);
+ table = gtk_table_new(4, 3, FALSE);
gtk_table_set_row_spacings(GTK_TABLE(table), 2);
gtk_table_set_col_spacings(GTK_TABLE(table), 6);
gtk_container_set_border_width(GTK_CONTAINER(table), 4);
@@ -211,57 +209,60 @@ pid_dialog(PIDArgs *args)
FALSE, FALSE, 4);
- controls.proportional = gtk_adjustment_new(args->proportional, 0.0, 100, 0.1, 1, 0);
- spin = gwy_table_attach_spinbutton(table, row, _("_Proportional:"), "",
- controls.proportional);
+ controls.proportional = gtk_adjustment_new(args->proportional,
+ 0.0, 100, 0.1, 1, 0);
+ spin = gwy_table_attach_adjbar(table, row, _("_Proportional:"), NULL,
+ controls.proportional, GWY_HSCALE_SQRT);
gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 1);
row++;
controls.integral = gtk_adjustment_new(args->integral, 0.0, 100, 0.1, 1, 0);
- spin = gwy_table_attach_spinbutton(table, row, _("_Integral:"), "",
- controls.integral);
+ spin = gwy_table_attach_adjbar(table, row, _("_Integral:"), NULL,
+ controls.integral, GWY_HSCALE_SQRT);
gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 1);
row++;
controls.tau = gtk_adjustment_new(args->tau, 2, 100, 1, 1, 0);
- spin = gwy_table_attach_spinbutton(table, row, _("_Integration steps:"), "",
- controls.tau);
+ spin = gwy_table_attach_adjbar(table, row, _("_Integration steps:"), NULL,
+ controls.tau,
+ GWY_HSCALE_SQRT | GWY_HSCALE_SNAP);
gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 0);
row++;
-
- controls.derivative = gtk_adjustment_new(args->derivative, 0.0, 100, 0.1, 1, 0);
- spin = gwy_table_attach_spinbutton(table, row, _("_Derivative:"), "",
- controls.derivative);
+ controls.derivative = gtk_adjustment_new(args->derivative,
+ 0.0, 100, 0.1, 1, 0);
+ spin = gwy_table_attach_adjbar(table, row, _("_Derivative:"), NULL,
+ controls.derivative, GWY_HSCALE_SQRT);
gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 1);
-
row++;
controls.ratio = gtk_adjustment_new(args->ratio, 1, 1000, 1, 10, 0);
- gwy_table_attach_spinbutton(table, row, _("PID/scan speed _ratio:"), "",
- controls.ratio);
+ gwy_table_attach_adjbar(table, row, _("PID/scan speed _ratio:"), NULL,
+ controls.ratio, GWY_HSCALE_SQRT);
gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 0);
row++;
-/* controls.fpower = gtk_adjustment_new(args->fpower, 1, 20, 1, 10, 0);
- gwy_table_attach_spinbutton(table, row, _("Force power law:"), "",
- controls.fpower);
+ /*
+ controls.fpower = gtk_adjustment_new(args->fpower, 1, 20, 1, 10, 0);
+ gwy_table_attach_adjbar(table, row, _("Force power law:"), NULL,
+ controls.fpower,
+ GWY_HSCALE_LINEAR | GWY_HSCALE_SNAP);
gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 0);
- row++;*/
+ row++;
+ */
controls.fstrength = gtk_adjustment_new(args->fstrength, 0, 1000, 1, 10, 0);
- gwy_table_attach_spinbutton(table, row, _("Force strength:"), "",
- controls.fstrength);
+ gwy_table_attach_adjbar(table, row, _("Force strength:"), NULL,
+ controls.fstrength, GWY_HSCALE_SQRT);
gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 1);
row++;
controls.fsetpoint = gtk_adjustment_new(args->fsetpoint, 0, 1000, 1, 10, 0);
- gwy_table_attach_spinbutton(table, row, _("Force setpoint:"), "",
- controls.fsetpoint);
+ gwy_table_attach_adjbar(table, row, _("Force setpoint:"), NULL,
+ controls.fsetpoint, GWY_HSCALE_SQRT);
gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 1);
row++;
-
gtk_widget_show_all(dialog);
do {
response = gtk_dialog_run(GTK_DIALOG(dialog));
@@ -349,7 +350,6 @@ run_pid(GwyDataField *dfield, GwyContainer *data, gint id, GwyDataField *fw, Gwy
dfrev = gwy_data_field_get_data(frev);
surface = gwy_data_field_get_data(dfield);
-
/*primitive normalisation*/
zpos = surface[0];
setpoint = args->fsetpoint;
@@ -359,36 +359,41 @@ run_pid(GwyDataField *dfield, GwyContainer *data, gint id, GwyDataField *fw, Gwy
nprev = args->tau;
/*scan, forming forward and backward data and error signals*/
- if (!gwy_app_wait_set_message(_("Scanning..."))) return 0;
+ if (!gwy_app_wait_set_message(_("Scanning..."))) {
+ gwy_app_wait_finish();
+ return FALSE;
+ }
- for (trow=-2; trow<(2*yres); trow++) //start with one complete scan line that is then throwen away
- {
+ //start with one complete scan line that is then throwen away
+ for (trow = -2; trow < 2*yres; trow++) {
revdir = trow%2;
row = MAX(0, trow/2);
- for (tcol=0; tcol<xres; tcol++)
- {
- if (revdir) col = xres-tcol-1;
- else col = tcol;
+ for (tcol=0; tcol<xres; tcol++) {
+ if (revdir)
+ col = xres-tcol-1;
+ else
+ col = tcol;
- for (i=0; i<args->ratio; i++) { //here comes the ratio between scanning and feedback bandwidth
+ for (i = 0; i < args->ratio; i++) { //here comes the ratio between scanning and feedback bandwidth
force = strength*(surface[row*xres + col]-zpos);
//force = strength*pow((surface[row*xres + col]-zpos), args->fpower);
- for (j=nprev; j>0; j--)
- previous[j]=previous[j-1];
- previous[0] = (force-setpoint);
+ for (j = nprev; j > 0; j--)
+ previous[j] = previous[j-1];
+ previous[0] = force - setpoint;
accumulator = 0;
- for (j=0; j<nprev; j++) accumulator += previous[j]*(gdouble)(nprev-j)/(gdouble)nprev;
+ for (j = 0; j < nprev; j++)
+ accumulator += previous[j]*(nprev-j)/nprev;
accumulator/=nprev;
zpos += (args->proportional*(force-setpoint)
+ args->integral*accumulator
+ args->derivative*(previous[0]-previous[1])/args->ratio)*zrange;
}
- if (gwy_isinf(zpos) || gwy_isnan(zpos) || gwy_isinf(force) || gwy_isnan(force))
- {
+ if (gwy_isinf(zpos) || gwy_isnan(zpos)
+ || gwy_isinf(force) || gwy_isnan(force)) {
dialog = gtk_message_dialog_new(GTK_WINDOW(gwy_app_find_window_for_channel(data, id)),
GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_ERROR,
@@ -398,7 +403,7 @@ run_pid(GwyDataField *dfield, GwyContainer *data, gint id, GwyDataField *fw, Gwy
gtk_widget_destroy(dialog);
gwy_app_wait_finish();
- return 0;
+ return FALSE;
}
if (trow >= 0) {
@@ -413,12 +418,14 @@ run_pid(GwyDataField *dfield, GwyContainer *data, gint id, GwyDataField *fw, Gwy
}
}
- if (!gwy_app_wait_set_fraction((gdouble)row/(gdouble)yres))
- return 0;
+ if (!gwy_app_wait_set_fraction((gdouble)row/(gdouble)yres)) {
+ gwy_app_wait_finish();
+ return FALSE;
+ }
}
gwy_app_wait_finish();
- return 1;
+ return TRUE;
}
static void
@@ -463,7 +470,6 @@ pid_sanitize_args(PIDArgs *args)
args->fpower = CLAMP(args->fpower, 1, 20);
args->fstrength = CLAMP(args->fstrength, 0.0, 1000.0);
args->fsetpoint = CLAMP(args->fsetpoint, 0.0, 1000.0);
-
}
static void
@@ -480,7 +486,6 @@ pid_load_args(GwyContainer *container,
gwy_container_gis_int32_by_name(container, fpower_key, &args->fpower);
gwy_container_gis_double_by_name(container, fstrength_key, &args->fstrength);
gwy_container_gis_double_by_name(container, fsetpoint_key, &args->fsetpoint);
-
pid_sanitize_args(args);
}
@@ -496,7 +501,6 @@ pid_save_args(GwyContainer *container,
gwy_container_set_int32_by_name(container, fpower_key, args->fpower);
gwy_container_set_double_by_name(container, fstrength_key, args->fstrength);
gwy_container_gis_double_by_name(container, fsetpoint_key, &args->fsetpoint);
-
}
/* vim: set cin et ts=4 sw=4 cino=>1s,e0,n0,f0,{0,}0,^0,\:1s,=0,g1s,h0,t0,+1s,c3,(0,u0 : */
diff --git a/modules/process/polydistort.c b/modules/process/polydistort.c
index cddfadd..0578d6d 100644
--- a/modules/process/polydistort.c
+++ b/modules/process/polydistort.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: polydistort.c 19044 2016-10-08 19:10:46Z yeti-dn $
+ * @(#) $Id: polydistort.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2007,2008 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -138,7 +138,7 @@ static GwyModuleInfo module_info = {
"2007",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, polydistort)
static gboolean
module_register(void)
@@ -190,7 +190,7 @@ distort_dialog(DistortArgs *args,
GwyDataField *sfield,
gint id)
{
- GtkWidget *dialog, *table, *hbox, *label;
+ GtkWidget *dialog, *table, *hbox, *label, *align;
DistortControls controls;
gint response;
GSList *l;
@@ -221,6 +221,9 @@ distort_dialog(DistortArgs *args,
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), hbox,
FALSE, FALSE, 4);
+ align = gtk_alignment_new(0.0, 0.0, 0.0, 0.0);
+ gtk_box_pack_start(GTK_BOX(hbox), align, FALSE, FALSE, 4);
+
controls.mydata = gwy_container_new();
gwy_container_set_object_by_name(controls.mydata, "/0/data", dfield);
gwy_app_sync_data_items(data, controls.mydata, id, 0, FALSE,
@@ -231,9 +234,9 @@ distort_dialog(DistortArgs *args,
0);
controls.view = create_preview(controls.mydata, 0, PREVIEW_SIZE, FALSE);
g_object_unref(controls.mydata);
- gtk_box_pack_start(GTK_BOX(hbox), controls.view, FALSE, FALSE, 4);
+ gtk_container_add(GTK_CONTAINER(align), controls.view);
- table = gtk_table_new(7, 4, FALSE);
+ table = gtk_table_new(7, 3, FALSE);
gtk_table_set_row_spacings(GTK_TABLE(table), 2);
gtk_table_set_col_spacings(GTK_TABLE(table), 6);
gtk_container_set_border_width(GTK_CONTAINER(table), 4);
@@ -244,7 +247,7 @@ distort_dialog(DistortArgs *args,
= gwy_enum_combo_box_new(gwy_interpolation_type_get_enum(), -1,
G_CALLBACK(interp_changed), &controls,
args->interp, TRUE);
- gwy_table_attach_hscale(table, row, _("_Interpolation type:"), NULL,
+ gwy_table_attach_adjbar(table, row, _("_Interpolation type:"), NULL,
GTK_OBJECT(controls.interp),
GWY_HSCALE_WIDGET_NO_EXPAND);
row++;
@@ -260,7 +263,7 @@ distort_dialog(DistortArgs *args,
gwy_sgettext("exterior|Periodic"),
GWY_EXTERIOR_PERIODIC,
NULL);
- gwy_table_attach_hscale(table, row, _("_Exterior type:"), NULL,
+ gwy_table_attach_adjbar(table, row, _("_Exterior type:"), NULL,
GTK_OBJECT(controls.exterior),
GWY_HSCALE_WIDGET_NO_EXPAND);
gtk_table_set_row_spacing(GTK_TABLE(table), row, 8);
@@ -268,7 +271,7 @@ distort_dialog(DistortArgs *args,
hbox = gtk_hbox_new(FALSE, 6);
gtk_table_attach(GTK_TABLE(table), hbox,
- 0, 4, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
gtk_table_set_row_spacing(GTK_TABLE(table), row, 8);
row++;
@@ -295,13 +298,13 @@ distort_dialog(DistortArgs *args,
G_CALLBACK(g_free), controls.xcoeff);
gtk_table_attach(GTK_TABLE(table),
coeff_table_new(controls.xcoeff, (gpointer)"x", &controls),
- 0, 4, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
gtk_table_set_row_spacing(GTK_TABLE(table), row, 8);
row++;
gtk_table_attach(GTK_TABLE(table),
gwy_label_new_header(_("Y Coefficients")),
- 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
controls.ycoeff = g_new0(GtkWidget*, NCOEFF);
@@ -309,7 +312,7 @@ distort_dialog(DistortArgs *args,
G_CALLBACK(g_free), controls.ycoeff);
gtk_table_attach(GTK_TABLE(table),
coeff_table_new(controls.ycoeff, (gpointer)"y", &controls),
- 0, 4, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
gtk_table_set_row_spacing(GTK_TABLE(table), row, 8);
row++;
@@ -317,7 +320,7 @@ distort_dialog(DistortArgs *args,
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.update),
args->update);
gtk_table_attach(GTK_TABLE(table), controls.update,
- 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect(controls.update, "toggled",
G_CALLBACK(update_changed), &controls);
row++;
diff --git a/modules/process/polylevel.c b/modules/process/polylevel.c
index 81fae80..32ddd9c 100644
--- a/modules/process/polylevel.c
+++ b/modules/process/polylevel.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: polylevel.c 18537 2016-03-28 18:11:19Z yeti-dn $
+ * @(#) $Id: polylevel.c 19976 2017-06-24 10:47:58Z yeti-dn $
* Copyright (C) 2004,2008 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -142,12 +142,12 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Subtracts polynomial background."),
"Yeti <yeti at gwyddion.net>",
- "3.2",
+ "3.3",
"David Nečas (Yeti) & Petr Klapetek",
"2004",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, polylevel)
static gboolean
module_register(void)
@@ -155,7 +155,7 @@ module_register(void)
gwy_process_func_register("polylevel",
(GwyProcessFunc)&poly_level,
N_("/_Level/_Polynomial Background..."),
- GWY_STOCK_POLYNOM,
+ GWY_STOCK_POLYNOM_LEVEL,
POLYLEVEL_RUN_MODES,
GWY_MENU_FLAG_DATA,
N_("Remove polynomial background"));
@@ -412,15 +412,15 @@ poly_level_dialog(PolyLevelArgs *args,
label = gtk_label_new(_("Leveled data"));
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
gtk_table_attach(GTK_TABLE(table), label, 0, 1, row, row+1,
- GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+ GTK_FILL, GTK_FILL, 0, 0);
label = gtk_label_new(_("Background"));
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
gtk_table_attach(GTK_TABLE(table), label, 1, 2, row, row+1,
- GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+ GTK_FILL, GTK_FILL, 0, 0);
row++;
- table = gtk_table_new(7 + (mfield ? 4 : 0), 4, FALSE);
+ table = gtk_table_new(7 + (mfield ? 4 : 0), 3, FALSE);
gtk_table_set_row_spacings(GTK_TABLE(table), 2);
gtk_table_set_col_spacings(GTK_TABLE(table), 6);
gtk_container_set_border_width(GTK_CONTAINER(table), 4);
@@ -433,29 +433,31 @@ poly_level_dialog(PolyLevelArgs *args,
&controls,
args->independent);
gtk_table_attach(GTK_TABLE(table), GTK_WIDGET(controls.type_group->data),
- 0, 4, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
controls.col_degree = gtk_adjustment_new(args->col_degree,
0, MAX_DEGREE, 1, 1, 0);
- gwy_table_attach_hscale(table, row++,
+ gwy_table_attach_adjbar(table, row++,
_("_Horizontal polynom degree:"), NULL,
- controls.col_degree, 0);
+ controls.col_degree,
+ GWY_HSCALE_LINEAR | GWY_HSCALE_SNAP);
g_signal_connect(controls.col_degree, "value-changed",
G_CALLBACK(poly_level_degree_changed), &controls);
controls.row_degree = gtk_adjustment_new(args->row_degree,
0, MAX_DEGREE, 1, 1, 0);
- gwy_table_attach_hscale(table, row++,
+ gwy_table_attach_adjbar(table, row++,
_("_Vertical polynom degree:"), NULL,
- controls.row_degree, 0);
+ controls.row_degree,
+ GWY_HSCALE_LINEAR | GWY_HSCALE_SNAP);
g_signal_connect(controls.row_degree, "value-changed",
G_CALLBACK(poly_level_degree_changed), &controls);
controls.same_degree
= gtk_check_button_new_with_mnemonic(_("_Same degrees"));
gtk_table_attach(GTK_TABLE(table), controls.same_degree,
- 0, 4, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.same_degree),
args->same_degree);
g_signal_connect(controls.same_degree, "toggled",
@@ -465,14 +467,15 @@ poly_level_dialog(PolyLevelArgs *args,
gtk_table_attach(GTK_TABLE(table),
GTK_WIDGET(controls.type_group->next->data),
- 0, 4, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
controls.max_degree = gtk_adjustment_new(args->max_degree,
0, MAX_DEGREE, 1, 1, 0);
- gwy_table_attach_hscale(table, row,
+ gwy_table_attach_adjbar(table, row,
_("_Maximum polynom degree:"), NULL,
- controls.max_degree, 0);
+ controls.max_degree,
+ GWY_HSCALE_LINEAR | GWY_HSCALE_SNAP);
g_signal_connect(controls.max_degree, "value-changed",
G_CALLBACK(poly_level_max_degree_changed), &controls);
gtk_table_set_row_spacing(GTK_TABLE(table), row, 8);
@@ -481,7 +484,7 @@ poly_level_dialog(PolyLevelArgs *args,
controls.do_extract
= gtk_check_button_new_with_mnemonic(_("E_xtract background"));
gtk_table_attach(GTK_TABLE(table), controls.do_extract,
- 0, 4, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.do_extract),
args->do_extract);
gtk_table_set_row_spacing(GTK_TABLE(table), row, 8);
@@ -490,7 +493,7 @@ poly_level_dialog(PolyLevelArgs *args,
if (mfield) {
label = gwy_label_new_header(_("Masking Mode"));
gtk_table_attach(GTK_TABLE(table), label,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
controls.masking_group
@@ -498,7 +501,7 @@ poly_level_dialog(PolyLevelArgs *args,
G_CALLBACK(poly_level_masking_changed),
&controls, args->masking);
row = gwy_radio_buttons_attach_to_table(controls.masking_group,
- GTK_TABLE(table), 3, row);
+ GTK_TABLE(table), 2, row);
}
else
controls.masking_group = NULL;
diff --git a/modules/process/presentationops.c b/modules/process/presentationops.c
index fe89426..348a41b 100644
--- a/modules/process/presentationops.c
+++ b/modules/process/presentationops.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: presentationops.c 17087 2015-05-02 10:38:25Z yeti-dn $
+ * @(#) $Id: presentationops.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2003-2004 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -60,7 +60,7 @@ static GwyModuleInfo module_info = {
"2004",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, presentationops)
static gboolean
module_register(void)
@@ -78,7 +78,7 @@ module_register(void)
NULL,
PRESENTATIONOPS_RUN_MODES,
GWY_MENU_FLAG_DATA_SHOW | GWY_MENU_FLAG_DATA,
- N_("Extract presentation to a new channel"));
+ N_("Extract presentation to a new image"));
gwy_process_func_register("presentation_attach",
(GwyProcessFunc)&presentation_attach,
N_("/_Presentation/_Attach Presentation..."),
@@ -230,7 +230,7 @@ presentation_attach(GwyContainer *data,
label = gtk_label_new_with_mnemonic(_("_Data to attach:"));
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
gtk_table_attach(GTK_TABLE(table), label, 0, 1, row, row+1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ GTK_FILL, 0, 0, 0);
chooser = gwy_data_chooser_new_channels();
gwy_data_chooser_set_filter(GWY_DATA_CHOOSER(chooser),
@@ -238,7 +238,7 @@ presentation_attach(GwyContainer *data,
gwy_data_chooser_set_active_id(GWY_DATA_CHOOSER(chooser),
&attach_source_id);
gtk_table_attach(GTK_TABLE(table), chooser, 1, 2, row, row+1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ GTK_FILL, 0, 0, 0);
gtk_label_set_mnemonic_widget(GTK_LABEL(label), chooser);
gtk_table_set_row_spacing(GTK_TABLE(table), row, 8);
row++;
diff --git a/modules/process/preview.h b/modules/process/preview.h
index f6a6fd7..8ad2385 100644
--- a/modules/process/preview.h
+++ b/modules/process/preview.h
@@ -1,6 +1,6 @@
/*
- * @(#) $Id: preview.h 18537 2016-03-28 18:11:19Z yeti-dn $
- * Copyright (C) 2015 David Necas (Yeti).
+ * @(#) $Id: preview.h 19887 2017-06-09 18:26:57Z yeti-dn $
+ * Copyright (C) 2015-2017 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
* This program is free software; you can redistribute it and/or modify
@@ -27,7 +27,10 @@
#include <libgwydgets/gwydataview.h>
#include <libgwydgets/gwylayer-basic.h>
#include <libgwydgets/gwylayer-mask.h>
+#include <libgwydgets/gwystock.h>
+#include <libgwydgets/gwyradiobuttons.h>
#include <libgwydgets/gwydgetutils.h>
+#include <app/menu.h>
#include <app/gwymoduleutils.h>
#include <app/data-browser.h>
@@ -50,6 +53,7 @@ enum {
RESPONSE_CALCULATE = 7,
RESPONSE_LOAD = 8,
RESPONSE_SAVE = 9,
+ RESPONSE_COPY = 10,
};
G_GNUC_UNUSED
@@ -215,6 +219,90 @@ create_mask_field(GwyDataField *dfield)
return dfield;
}
+static void
+mask_merge_enabled_changed(GtkToggleButton *toggle, GtkWidget *widget)
+{
+ gtk_widget_set_sensitive(widget, gtk_toggle_button_get_active(toggle));
+}
+
+/* Pass NULL @pcheck if you do not want a checkbox.
+ * XXX: Cannot work with both hscale and adjbar. Must use with adjbar. */
+G_GNUC_UNUSED
+static void
+create_mask_merge_buttons(GtkWidget *table, gint row, const gchar *name,
+ gboolean enabled, GCallback enabled_callback,
+ GwyMergeType merge, GCallback merge_type_callback,
+ gpointer user_data,
+ GtkWidget **pcheck, GSList **ptype)
+{
+ GtkTooltips *tips;
+ GSList *group, *l;
+ GtkWidget *hbox, *button, *label;
+ GQuark quark = g_quark_from_string("gwy-radiobuttons-key");
+ gint value;
+
+ if (!name)
+ name = _("Combine with existing mask:");
+
+ tips = gwy_app_get_tooltips();
+
+ button = gtk_radio_button_new(NULL);
+ g_object_set_qdata(G_OBJECT(button), quark,
+ GINT_TO_POINTER(GWY_MERGE_INTERSECTION));
+ gtk_container_add(GTK_CONTAINER(button),
+ gtk_image_new_from_stock(GWY_STOCK_MASK_INTERSECT,
+ GTK_ICON_SIZE_BUTTON));
+ gtk_tooltips_set_tip(tips, button, _("Intersection"), NULL);
+
+ button = gtk_radio_button_new_from_widget(GTK_RADIO_BUTTON(button));
+ g_object_set_qdata(G_OBJECT(button), quark,
+ GINT_TO_POINTER(GWY_MERGE_UNION));
+ gtk_container_add(GTK_CONTAINER(button),
+ gtk_image_new_from_stock(GWY_STOCK_MASK_ADD,
+ GTK_ICON_SIZE_BUTTON));
+ gtk_tooltips_set_tip(tips, button, _("Union"), NULL);
+
+ group = *ptype = gtk_radio_button_get_group(GTK_RADIO_BUTTON(button));
+ hbox = gtk_hbox_new(FALSE, 0);
+ gtk_table_attach(GTK_TABLE(table), hbox,
+ 1, 2, row, row+1, GTK_FILL, 0, 0, 0);
+
+ for (l = group; l; l = g_slist_next(l)) {
+ button = (GtkWidget*)l->data;
+ gtk_toggle_button_set_mode(GTK_TOGGLE_BUTTON(button), FALSE);
+ gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 0);
+
+ value = GPOINTER_TO_INT(g_object_get_qdata(G_OBJECT(button), quark));
+ if (value == merge)
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE);
+ }
+
+ if (merge_type_callback) {
+ for (l = group; l; l = g_slist_next(l)) {
+ g_signal_connect_swapped(l->data, "clicked",
+ merge_type_callback, user_data);
+ }
+ }
+
+ if (pcheck) {
+ label = *pcheck = gtk_check_button_new_with_mnemonic(name);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(label), enabled);
+ gtk_widget_set_sensitive(hbox, enabled);
+ g_signal_connect(label, "toggled",
+ G_CALLBACK(mask_merge_enabled_changed), hbox);
+ if (enabled_callback) {
+ g_signal_connect_swapped(*pcheck, "toggled",
+ enabled_callback, user_data);
+ }
+ }
+ else {
+ label = gtk_label_new(name);
+ gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
+ }
+ gtk_table_attach(GTK_TABLE(table), label,
+ 0, 1, row, row+1, GTK_FILL, 0, 0, 0);
+}
+
#endif
/* vim: set cin et ts=4 sw=4 cino=>1s,e0,n0,f0,{0,}0,^0,\:1s,=0,g1s,h0,t0,+1s,c3,(0,u0 : */
diff --git a/modules/process/process.c b/modules/process/process.c
new file mode 100644
index 0000000..411dc65
--- /dev/null
+++ b/modules/process/process.c
@@ -0,0 +1,254 @@
+/* This is a GENERATED file. */
+#include <glib.h>
+#include <libgwymodule/gwymodule.h>
+
+static const GwyModuleRecord* register_bundle(void);
+
+static GwyModuleInfo module_info = {
+ GWY_MODULE_ABI_VERSION | GWY_MODULE_BUNDLE_FLAG,
+ (GwyModuleRegisterFunc)®ister_bundle,
+ NULL, NULL, NULL, NULL, NULL,
+};
+
+GWY_MODULE_QUERY(module_info)
+
+GwyModuleInfo* _gwy_module_query__acf2d(void);
+GwyModuleInfo* _gwy_module_query__angle_dist(void);
+GwyModuleInfo* _gwy_module_query__arithmetic(void);
+GwyModuleInfo* _gwy_module_query__averaging(void);
+GwyModuleInfo* _gwy_module_query__basicops(void);
+GwyModuleInfo* _gwy_module_query__bdep_synth(void);
+GwyModuleInfo* _gwy_module_query__calcoefs_load(void);
+GwyModuleInfo* _gwy_module_query__calcoefs_new(void);
+GwyModuleInfo* _gwy_module_query__calcoefs_simple(void);
+GwyModuleInfo* _gwy_module_query__calcoefs_view(void);
+GwyModuleInfo* _gwy_module_query__calibrate(void);
+GwyModuleInfo* _gwy_module_query__coerce(void);
+GwyModuleInfo* _gwy_module_query__col_synth(void);
+GwyModuleInfo* _gwy_module_query__convolution_filter(void);
+GwyModuleInfo* _gwy_module_query__correct_affine(void);
+GwyModuleInfo* _gwy_module_query__crosscor(void);
+GwyModuleInfo* _gwy_module_query__curvature(void);
+GwyModuleInfo* _gwy_module_query__cwt(void);
+GwyModuleInfo* _gwy_module_query__deposit_synth(void);
+GwyModuleInfo* _gwy_module_query__diff_synth(void);
+GwyModuleInfo* _gwy_module_query__domain_synth(void);
+GwyModuleInfo* _gwy_module_query__drift(void);
+GwyModuleInfo* _gwy_module_query__dwt(void);
+GwyModuleInfo* _gwy_module_query__dwtanisotropy(void);
+GwyModuleInfo* _gwy_module_query__edge(void);
+GwyModuleInfo* _gwy_module_query__entropy(void);
+GwyModuleInfo* _gwy_module_query__extend(void);
+GwyModuleInfo* _gwy_module_query__extract_path(void);
+GwyModuleInfo* _gwy_module_query__facet_level(void);
+GwyModuleInfo* _gwy_module_query__facet_analysis(void);
+GwyModuleInfo* _gwy_module_query__fbm_synth(void);
+GwyModuleInfo* _gwy_module_query__fft(void);
+GwyModuleInfo* _gwy_module_query__fft_filter_1d(void);
+GwyModuleInfo* _gwy_module_query__fft_filter_2d(void);
+GwyModuleInfo* _gwy_module_query__fft_profile(void);
+GwyModuleInfo* _gwy_module_query__fft_synth(void);
+GwyModuleInfo* _gwy_module_query__fibre_synth(void);
+GwyModuleInfo* _gwy_module_query__fit_shape(void);
+GwyModuleInfo* _gwy_module_query__flatten_base(void);
+GwyModuleInfo* _gwy_module_query__fraccor(void);
+GwyModuleInfo* _gwy_module_query__fractal(void);
+GwyModuleInfo* _gwy_module_query__gradient(void);
+GwyModuleInfo* _gwy_module_query__grain_cross(void);
+GwyModuleInfo* _gwy_module_query__grain_dist(void);
+GwyModuleInfo* _gwy_module_query__grain_edge(void);
+GwyModuleInfo* _gwy_module_query__grain_filter(void);
+GwyModuleInfo* _gwy_module_query__grain_mark(void);
+GwyModuleInfo* _gwy_module_query__grain_stat(void);
+GwyModuleInfo* _gwy_module_query__grain_wshed(void);
+GwyModuleInfo* _gwy_module_query__hough(void);
+GwyModuleInfo* _gwy_module_query__immerse(void);
+GwyModuleInfo* _gwy_module_query__indent_analyze(void);
+GwyModuleInfo* _gwy_module_query__laplace(void);
+GwyModuleInfo* _gwy_module_query__latsim(void);
+GwyModuleInfo* _gwy_module_query__lat_synth(void);
+GwyModuleInfo* _gwy_module_query__level(void);
+GwyModuleInfo* _gwy_module_query__level_grains(void);
+GwyModuleInfo* _gwy_module_query__linecorrect(void);
+GwyModuleInfo* _gwy_module_query__linematch(void);
+GwyModuleInfo* _gwy_module_query__lno_synth(void);
+GwyModuleInfo* _gwy_module_query__local_contrast(void);
+GwyModuleInfo* _gwy_module_query__logistic(void);
+GwyModuleInfo* _gwy_module_query__mark_disconn(void);
+GwyModuleInfo* _gwy_module_query__mark_with(void);
+GwyModuleInfo* _gwy_module_query__maskcor(void);
+GwyModuleInfo* _gwy_module_query__mask_distribute(void);
+GwyModuleInfo* _gwy_module_query__mask_edt(void);
+GwyModuleInfo* _gwy_module_query__mask_morph(void);
+GwyModuleInfo* _gwy_module_query__mask_noisify(void);
+GwyModuleInfo* _gwy_module_query__maskops(void);
+GwyModuleInfo* _gwy_module_query__mcrop(void);
+GwyModuleInfo* _gwy_module_query__measure_lattice(void);
+GwyModuleInfo* _gwy_module_query__median_bg(void);
+GwyModuleInfo* _gwy_module_query__merge(void);
+GwyModuleInfo* _gwy_module_query__mfm_current(void);
+GwyModuleInfo* _gwy_module_query__mfm_field(void);
+GwyModuleInfo* _gwy_module_query__mfm_findshift(void);
+GwyModuleInfo* _gwy_module_query__mfm_parallel(void);
+GwyModuleInfo* _gwy_module_query__mfm_shift(void);
+GwyModuleInfo* _gwy_module_query__neural(void);
+GwyModuleInfo* _gwy_module_query__noise_synth(void);
+GwyModuleInfo* _gwy_module_query__obj_synth(void);
+GwyModuleInfo* _gwy_module_query__otsu_threshold(void);
+GwyModuleInfo* _gwy_module_query__outliers(void);
+GwyModuleInfo* _gwy_module_query__pat_synth(void);
+GwyModuleInfo* _gwy_module_query__phase_synth(void);
+GwyModuleInfo* _gwy_module_query__pid(void);
+GwyModuleInfo* _gwy_module_query__polylevel(void);
+GwyModuleInfo* _gwy_module_query__polydistort(void);
+GwyModuleInfo* _gwy_module_query__presentationops(void);
+GwyModuleInfo* _gwy_module_query__psdf_logphi(void);
+GwyModuleInfo* _gwy_module_query__psf(void);
+GwyModuleInfo* _gwy_module_query__psf_fit(void);
+GwyModuleInfo* _gwy_module_query__rank(void);
+GwyModuleInfo* _gwy_module_query__rotate(void);
+GwyModuleInfo* _gwy_module_query__semsim(void);
+GwyModuleInfo* _gwy_module_query__scale(void);
+GwyModuleInfo* _gwy_module_query__scars(void);
+GwyModuleInfo* _gwy_module_query__shade(void);
+GwyModuleInfo* _gwy_module_query__slope_dist(void);
+GwyModuleInfo* _gwy_module_query__sphere_revolve(void);
+GwyModuleInfo* _gwy_module_query__stitch(void);
+GwyModuleInfo* _gwy_module_query__straighten_path(void);
+GwyModuleInfo* _gwy_module_query__threshold(void);
+GwyModuleInfo* _gwy_module_query__tilt(void);
+GwyModuleInfo* _gwy_module_query__tip_blind(void);
+GwyModuleInfo* _gwy_module_query__tip_model(void);
+GwyModuleInfo* _gwy_module_query__tipops(void);
+GwyModuleInfo* _gwy_module_query__unrotate(void);
+GwyModuleInfo* _gwy_module_query__volumize(void);
+GwyModuleInfo* _gwy_module_query__volumize_layers(void);
+GwyModuleInfo* _gwy_module_query__wave_synth(void);
+GwyModuleInfo* _gwy_module_query__wpour_mark(void);
+GwyModuleInfo* _gwy_module_query__xydenoise(void);
+GwyModuleInfo* _gwy_module_query__xyzize(void);
+
+static const GwyModuleRecord modules[] = {
+ { _gwy_module_query__acf2d, "acf2d", },
+ { _gwy_module_query__angle_dist, "angle_dist", },
+ { _gwy_module_query__arithmetic, "arithmetic", },
+ { _gwy_module_query__averaging, "averaging", },
+ { _gwy_module_query__basicops, "basicops", },
+ { _gwy_module_query__bdep_synth, "bdep_synth", },
+ { _gwy_module_query__calcoefs_load, "calcoefs_load", },
+ { _gwy_module_query__calcoefs_new, "calcoefs_new", },
+ { _gwy_module_query__calcoefs_simple, "calcoefs_simple", },
+ { _gwy_module_query__calcoefs_view, "calcoefs_view", },
+ { _gwy_module_query__calibrate, "calibrate", },
+ { _gwy_module_query__coerce, "coerce", },
+ { _gwy_module_query__col_synth, "col_synth", },
+ { _gwy_module_query__convolution_filter, "convolution_filter", },
+ { _gwy_module_query__correct_affine, "correct_affine", },
+ { _gwy_module_query__crosscor, "crosscor", },
+ { _gwy_module_query__curvature, "curvature", },
+ { _gwy_module_query__cwt, "cwt", },
+ { _gwy_module_query__deposit_synth, "deposit_synth", },
+ { _gwy_module_query__diff_synth, "diff_synth", },
+ { _gwy_module_query__domain_synth, "domain_synth", },
+ { _gwy_module_query__drift, "drift", },
+ { _gwy_module_query__dwt, "dwt", },
+ { _gwy_module_query__dwtanisotropy, "dwtanisotropy", },
+ { _gwy_module_query__edge, "edge", },
+ { _gwy_module_query__entropy, "entropy", },
+ { _gwy_module_query__extend, "extend", },
+ { _gwy_module_query__extract_path, "extract_path", },
+ { _gwy_module_query__facet_level, "facet-level", },
+ { _gwy_module_query__facet_analysis, "facet_analysis", },
+ { _gwy_module_query__fbm_synth, "fbm_synth", },
+ { _gwy_module_query__fft, "fft", },
+ { _gwy_module_query__fft_filter_1d, "fft_filter_1d", },
+ { _gwy_module_query__fft_filter_2d, "fft_filter_2d", },
+ { _gwy_module_query__fft_profile, "fft_profile", },
+ { _gwy_module_query__fft_synth, "fft_synth", },
+ { _gwy_module_query__fibre_synth, "fibre_synth", },
+ { _gwy_module_query__fit_shape, "fit-shape", },
+ { _gwy_module_query__flatten_base, "flatten_base", },
+ { _gwy_module_query__fraccor, "fraccor", },
+ { _gwy_module_query__fractal, "fractal", },
+ { _gwy_module_query__gradient, "gradient", },
+ { _gwy_module_query__grain_cross, "grain_cross", },
+ { _gwy_module_query__grain_dist, "grain_dist", },
+ { _gwy_module_query__grain_edge, "grain_edge", },
+ { _gwy_module_query__grain_filter, "grain_filter", },
+ { _gwy_module_query__grain_mark, "grain_mark", },
+ { _gwy_module_query__grain_stat, "grain_stat", },
+ { _gwy_module_query__grain_wshed, "grain_wshed", },
+ { _gwy_module_query__hough, "hough", },
+ { _gwy_module_query__immerse, "immerse", },
+ { _gwy_module_query__indent_analyze, "indent_analyze", },
+ { _gwy_module_query__laplace, "laplace", },
+ { _gwy_module_query__latsim, "latsim", },
+ { _gwy_module_query__lat_synth, "lat_synth", },
+ { _gwy_module_query__level, "level", },
+ { _gwy_module_query__level_grains, "level_grains", },
+ { _gwy_module_query__linecorrect, "linecorrect", },
+ { _gwy_module_query__linematch, "linematch", },
+ { _gwy_module_query__lno_synth, "lno_synth", },
+ { _gwy_module_query__local_contrast, "local_contrast", },
+ { _gwy_module_query__logistic, "logistic", },
+ { _gwy_module_query__mark_disconn, "mark_disconn", },
+ { _gwy_module_query__mark_with, "mark_with", },
+ { _gwy_module_query__maskcor, "maskcor", },
+ { _gwy_module_query__mask_distribute, "mask_distribute", },
+ { _gwy_module_query__mask_edt, "mask_edt", },
+ { _gwy_module_query__mask_morph, "mask_morph", },
+ { _gwy_module_query__mask_noisify, "mask_noisify", },
+ { _gwy_module_query__maskops, "maskops", },
+ { _gwy_module_query__mcrop, "mcrop", },
+ { _gwy_module_query__measure_lattice, "measure_lattice", },
+ { _gwy_module_query__median_bg, "median-bg", },
+ { _gwy_module_query__merge, "merge", },
+ { _gwy_module_query__mfm_current, "mfm_current", },
+ { _gwy_module_query__mfm_field, "mfm_field", },
+ { _gwy_module_query__mfm_findshift, "mfm_findshift", },
+ { _gwy_module_query__mfm_parallel, "mfm_parallel", },
+ { _gwy_module_query__mfm_shift, "mfm_shift", },
+ { _gwy_module_query__neural, "neural", },
+ { _gwy_module_query__noise_synth, "noise_synth", },
+ { _gwy_module_query__obj_synth, "obj_synth", },
+ { _gwy_module_query__otsu_threshold, "otsu_threshold", },
+ { _gwy_module_query__outliers, "outliers", },
+ { _gwy_module_query__pat_synth, "pat_synth", },
+ { _gwy_module_query__phase_synth, "phase_synth", },
+ { _gwy_module_query__pid, "pid", },
+ { _gwy_module_query__polylevel, "polylevel", },
+ { _gwy_module_query__polydistort, "polydistort", },
+ { _gwy_module_query__presentationops, "presentationops", },
+ { _gwy_module_query__psdf_logphi, "psdf_logphi", },
+ { _gwy_module_query__psf, "psf", },
+ { _gwy_module_query__psf_fit, "psf-fit", },
+ { _gwy_module_query__rank, "rank", },
+ { _gwy_module_query__rotate, "rotate", },
+ { _gwy_module_query__semsim, "semsim", },
+ { _gwy_module_query__scale, "scale", },
+ { _gwy_module_query__scars, "scars", },
+ { _gwy_module_query__shade, "shade", },
+ { _gwy_module_query__slope_dist, "slope_dist", },
+ { _gwy_module_query__sphere_revolve, "sphere-revolve", },
+ { _gwy_module_query__stitch, "stitch", },
+ { _gwy_module_query__straighten_path, "straighten_path", },
+ { _gwy_module_query__threshold, "threshold", },
+ { _gwy_module_query__tilt, "tilt", },
+ { _gwy_module_query__tip_blind, "tip_blind", },
+ { _gwy_module_query__tip_model, "tip_model", },
+ { _gwy_module_query__tipops, "tipops", },
+ { _gwy_module_query__unrotate, "unrotate", },
+ { _gwy_module_query__volumize, "volumize", },
+ { _gwy_module_query__volumize_layers, "volumize_layers", },
+ { _gwy_module_query__wave_synth, "wave_synth", },
+ { _gwy_module_query__wpour_mark, "wpour_mark", },
+ { _gwy_module_query__xydenoise, "xydenoise", },
+ { _gwy_module_query__xyzize, "xyzize", },
+ { NULL, NULL, },
+};
+
+static const GwyModuleRecord*
+register_bundle(void)
+{
+ return modules;
+}
diff --git a/modules/process/psdf_logphi.c b/modules/process/psdf_logphi.c
index 297ac57..f5d5366 100644
--- a/modules/process/psdf_logphi.c
+++ b/modules/process/psdf_logphi.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: psdf_logphi.c 18626 2016-04-22 10:15:13Z yeti-dn $
+ * @(#) $Id: psdf_logphi.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2015 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -76,12 +76,12 @@ static GwyModuleInfo module_info = {
N_("Two-dimensional FFT (Fast Fourier Transform) transformed to "
"coordinates (log-frequency, angle)."),
"Yeti <yeti at gwyddion.net>",
- "1.0",
+ "1.1",
"David Nečas (Yeti)",
"2015",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, psdf_logphi)
static gboolean
module_register(void)
@@ -253,7 +253,7 @@ psdflp_dialog(PSDFLPArgs *args)
gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK);
gwy_help_add_to_proc_dialog(GTK_DIALOG(dialog), GWY_HELP_DEFAULT);
- table = gtk_table_new(2, 4, FALSE);
+ table = gtk_table_new(2, 2, FALSE);
gtk_table_set_row_spacings(GTK_TABLE(table), 2);
gtk_table_set_col_spacings(GTK_TABLE(table), 6);
gtk_container_set_border_width(GTK_CONTAINER(table), 4);
@@ -265,14 +265,15 @@ psdflp_dialog(PSDFLPArgs *args)
= gwy_enum_combo_box_new(gwy_windowing_type_get_enum(), -1,
G_CALLBACK(gwy_enum_combo_box_update_int),
&args->window, args->window, TRUE);
- gwy_table_attach_row(table, row, _("_Windowing type:"), NULL,
- controls.window);
+ gwy_table_attach_adjbar(table, row, _("_Windowing type:"), NULL,
+ GTK_OBJECT(controls.window),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
g_signal_connect_swapped(controls.window, "changed",
G_CALLBACK(windowing_changed), &controls);
row++;
controls.sigma = gtk_adjustment_new(args->sigma, 0.0, 40.0, 0.01, 1.0, 0);
- gwy_table_attach_hscale(table, row, _("Gaussian _smoothing:"), "px",
+ gwy_table_attach_adjbar(table, row, _("Gaussian _smoothing:"), _("px"),
controls.sigma, GWY_HSCALE_SQRT);
g_signal_connect_swapped(controls.sigma, "value-changed",
G_CALLBACK(sigma_changed), &controls);
diff --git a/modules/process/psf-fit.c b/modules/process/psf-fit.c
new file mode 100644
index 0000000..44f1cc0
--- /dev/null
+++ b/modules/process/psf-fit.c
@@ -0,0 +1,841 @@
+/*
+ * @(#) $Id: psf-fit.c 19948 2017-06-22 14:05:41Z yeti-dn $
+ * Copyright (C) 2017 David Necas (Yeti), Petr Klapetek.
+ * E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "config.h"
+#include <gtk/gtk.h>
+#include <libgwyddion/gwymacros.h>
+#include <libgwyddion/gwymath.h>
+#include <libgwyddion/gwynlfit.h>
+#include <libprocess/gwyprocesstypes.h>
+#include <libprocess/arithmetic.h>
+#include <libprocess/inttrans.h>
+#include <libgwydgets/gwycombobox.h>
+#include <libgwydgets/gwystock.h>
+#include <libgwymodule/gwymodule-process.h>
+#include <app/gwymoduleutils.h>
+#include <app/gwyapp.h>
+#include "mfmops.h"
+
+#define PSF_RUN_MODES (GWY_RUN_IMMEDIATE | GWY_RUN_INTERACTIVE)
+
+#define DECLARE_PSF(name) \
+ static gdouble psf_##name##_fit_func (guint i, \
+ const gdouble *param, \
+ gpointer user_data, \
+ gboolean *success); \
+ static void psf_##name##_fit_diff (guint i, \
+ const gdouble *param, \
+ const gboolean *fixed_param, \
+ GwyNLFitIdxFunc func, \
+ gpointer user_data, \
+ gdouble *der, \
+ gboolean *success); \
+ static gboolean psf_##name##_init_params(GwyDataField *model_re, \
+ GwyDataField *model_im, \
+ GwyDataField *data_re, \
+ GwyDataField *data_im, \
+ GwyDataField *freq_x, \
+ GwyDataField *freq_y, \
+ gdouble *params); \
+ static void psf_##name##_fill_psf (GwyDataField *freq_x, \
+ GwyDataField *freq_y, \
+ GwyDataField *buf_re, \
+ GwyDataField *buf_im, \
+ GwyDataField *psf, \
+ GwyDataField *psf_fft, \
+ const gdouble *param);
+
+typedef enum {
+ PSF_FUNC_GAUSSIAN = 0,
+ PSF_FUNC_AGAUSSIAN = 1,
+ PSF_FUNC_NFUNCTIONS,
+} PSFFunctionType;
+
+typedef struct {
+ PSFFunctionType function;
+ GwyAppDataId op1;
+ GwyAppDataId op2;
+} PSFArgs;
+
+typedef gboolean (*PSFParamInitFunc)(GwyDataField *model_re,
+ GwyDataField *model_im,
+ GwyDataField *data_re,
+ GwyDataField *data_im,
+ GwyDataField *freq_x,
+ GwyDataField *freq_y,
+ gdouble *params);
+typedef void (*PSFFillFunc)(GwyDataField *freq_x,
+ GwyDataField *freq_y,
+ GwyDataField *buf_re,
+ GwyDataField *buf_im,
+ GwyDataField *psf,
+ GwyDataField *psf_fft,
+ const gdouble *params);
+
+typedef struct {
+ const gchar *name;
+ GwyNLFitIdxFunc func;
+ GwyNLFitIdxDiffFunc diff;
+ PSFParamInitFunc initpar;
+ PSFFillFunc fill;
+ guint nparams;
+} PSFFunction;
+
+typedef struct {
+ guint xres;
+ guint yres;
+ gdouble *xfreq;
+ gdouble *yfreq;
+ gdouble *model_re;
+ gdouble *model_im;
+ gdouble *data_re;
+ gdouble *data_im;
+} PSFEstimateData;
+
+typedef struct {
+ PSFArgs *args;
+ GtkWidget *chooser_op2;
+ GtkWidget *function;
+ GtkWidget *dialogue;
+} PSFControls;
+
+static gboolean module_register (void);
+static void psf (GwyContainer *data,
+ GwyRunType run);
+static gboolean psf_dialogue (PSFArgs *args);
+static GtkWidget* create_function_menu(GCallback callback,
+ gpointer cbdata,
+ gint current);
+static void psf_data_changed (GwyDataChooser *chooser,
+ GwyAppDataId *object);
+static gboolean psf_data_filter (GwyContainer *data,
+ gint id,
+ gpointer user_data);
+static void function_changed (GtkComboBox *combo,
+ PSFControls *controls);
+static void fit_psf (GwyDataField *model,
+ GwyDataField *data,
+ GwyDataField *psf,
+ GwyDataField *convolved,
+ const PSFFunction *func);
+static void psf_load_args (GwyContainer *container,
+ PSFArgs *args);
+static void psf_save_args (GwyContainer *container,
+ PSFArgs *args);
+static void psf_sanitize_args (PSFArgs *args);
+
+DECLARE_PSF(gaussian);
+DECLARE_PSF(agaussian);
+
+static GwyAppDataId op2_id = GWY_APP_DATA_ID_NONE;
+
+static const PSFArgs psf_defaults = {
+ PSF_FUNC_GAUSSIAN,
+ GWY_APP_DATA_ID_NONE, GWY_APP_DATA_ID_NONE
+};
+
+static const PSFFunction functions[] = {
+ {
+ N_("Gaussian"),
+ psf_gaussian_fit_func,
+ psf_gaussian_fit_diff,
+ psf_gaussian_init_params,
+ psf_gaussian_fill_psf,
+ 2,
+ },
+ {
+ N_("Gaussian (asymmetric)"),
+ psf_agaussian_fit_func,
+ psf_agaussian_fit_diff,
+ psf_agaussian_init_params,
+ psf_agaussian_fill_psf,
+ 3,
+ },
+};
+
+static GwyModuleInfo module_info = {
+ GWY_MODULE_ABI_VERSION,
+ &module_register,
+ N_("Point spread function estimation by fitting explicit function form."),
+ "Yeti <yeti at gwyddion.net>",
+ "1.1",
+ "David Nečas (Yeti) & Petr Klapetek",
+ "2017",
+};
+
+GWY_MODULE_QUERY2(module_info, psf_fit)
+
+static gboolean
+module_register(void)
+{
+ gwy_process_func_register("psf-fit",
+ (GwyProcessFunc)&psf,
+ N_("/_Statistics/_PSF Fit..."),
+ NULL,
+ PSF_RUN_MODES,
+ GWY_MENU_FLAG_DATA,
+ N_("Fit PSF from known data and image"));
+
+ return TRUE;
+}
+
+static void
+psf(GwyContainer *data, GwyRunType run)
+{
+ GwyDataField *model, *dfield, *psf, *convolved;
+ PSFArgs args;
+ gboolean ok;
+ GQuark quark;
+ GwyContainer *mydata;
+ gint newid;
+ gdouble q;
+
+ g_return_if_fail(run & PSF_RUN_MODES);
+
+ psf_load_args(gwy_app_settings_get(), &args);
+
+ gwy_app_data_browser_get_current(GWY_APP_DATA_FIELD_ID, &args.op1.id,
+ GWY_APP_CONTAINER_ID, &args.op1.datano,
+ 0);
+
+ ok = psf_dialogue(&args);
+ psf_save_args(gwy_app_settings_get(), &args);
+ if (!ok)
+ return;
+
+ mydata = gwy_app_data_browser_get(args.op1.datano);
+ quark = gwy_app_get_data_key_for_id(args.op1.id);
+ dfield = GWY_DATA_FIELD(gwy_container_get_object(mydata, quark));
+
+ mydata = gwy_app_data_browser_get(args.op2.datano);
+ quark = gwy_app_get_data_key_for_id(args.op2.id);
+ model = GWY_DATA_FIELD(gwy_container_get_object(mydata, quark));
+
+ psf = gwy_data_field_new_alike(dfield, FALSE);
+ convolved = gwy_data_field_new_alike(dfield, FALSE);
+ fit_psf(model, dfield, psf, convolved, functions + args.function);
+
+ /* See psf.c for normalisation convention. */
+ q = sqrt(gwy_data_field_get_xres(dfield)*gwy_data_field_get_yres(dfield))
+ /(gwy_data_field_get_xreal(dfield)*gwy_data_field_get_yreal(dfield));
+
+ gwy_data_field_multiply(psf, q);
+ newid = gwy_app_data_browser_add_data_field(psf, data, TRUE);
+ gwy_app_sync_data_items(data, data, args.op1.id, newid, FALSE,
+ GWY_DATA_ITEM_GRADIENT,
+ GWY_DATA_ITEM_MASK_COLOR,
+ 0);
+ gwy_app_set_data_field_title(data, newid, _("PSF"));
+ gwy_app_channel_log_add_proc(data, args.op1.id, newid);
+
+ newid = gwy_app_data_browser_add_data_field(convolved, data, TRUE);
+ gwy_app_sync_data_items(data, data, args.op1.id, newid, FALSE,
+ GWY_DATA_ITEM_GRADIENT,
+ GWY_DATA_ITEM_MASK_COLOR,
+ 0);
+ gwy_app_set_data_field_title(data, newid, _("PSF*P"));
+ gwy_app_channel_log_add_proc(data, args.op1.id, newid);
+
+ g_object_unref(psf);
+ g_object_unref(convolved);
+}
+
+static gboolean
+psf_dialogue(PSFArgs *args)
+{
+ PSFControls controls;
+ GtkWidget *dialogue, *table, *label;
+ GwyDataChooser *chooser;
+ gint response, row;
+
+ controls.args = args;
+
+ dialogue = gtk_dialog_new_with_buttons(_("Fit PSF"), NULL, 0,
+ GTK_STOCK_CANCEL,
+ GTK_RESPONSE_CANCEL,
+ GTK_STOCK_OK,
+ GTK_RESPONSE_OK,
+ NULL);
+ gtk_dialog_set_default_response(GTK_DIALOG(dialogue), GTK_RESPONSE_OK);
+ gwy_help_add_to_proc_dialog(GTK_DIALOG(dialogue), GWY_HELP_DEFAULT);
+ controls.dialogue = dialogue;
+
+ table = gtk_table_new(2, 2, FALSE);
+ gtk_table_set_row_spacings(GTK_TABLE(table), 2);
+ gtk_table_set_col_spacings(GTK_TABLE(table), 6);
+ gtk_container_set_border_width(GTK_CONTAINER(table), 4);
+ gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialogue)->vbox), table,
+ TRUE, TRUE, 4);
+ row = 0;
+
+ label = gtk_label_new_with_mnemonic(_("_Ideal response:"));
+ gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, row, row+1,
+ GTK_FILL, 0, 0, 0);
+
+ controls.chooser_op2 = gwy_data_chooser_new_channels();
+ chooser = GWY_DATA_CHOOSER(controls.chooser_op2);
+ g_object_set_data(G_OBJECT(chooser), "dialog", dialogue);
+ gwy_data_chooser_set_active_id(chooser, &args->op2);
+ gwy_data_chooser_set_filter(chooser,
+ psf_data_filter, &args->op1, NULL);
+ gtk_table_attach(GTK_TABLE(table), controls.chooser_op2, 1, 2, row, row+1,
+ GTK_FILL, 0, 0, 0);
+ gtk_label_set_mnemonic_widget(GTK_LABEL(label), controls.chooser_op2);
+ g_signal_connect(chooser, "changed",
+ G_CALLBACK(psf_data_changed), &args->op2);
+ psf_data_changed(chooser, &args->op2);
+ row++;
+
+ label = gtk_label_new_with_mnemonic(_("_Function type:"));
+ gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, row, row+1,
+ GTK_FILL, 0, 0, 0);
+
+ controls.function = create_function_menu(G_CALLBACK(function_changed),
+ &controls,
+ args->function);
+ gtk_table_attach(GTK_TABLE(table), controls.function, 1, 2, row, row+1,
+ GTK_FILL, 0, 0, 0);
+ gtk_label_set_mnemonic_widget(GTK_LABEL(label), controls.function);
+ row++;
+
+ gtk_widget_show_all(dialogue);
+
+ do {
+ response = gtk_dialog_run(GTK_DIALOG(dialogue));
+ switch (response) {
+ case GTK_RESPONSE_CANCEL:
+ case GTK_RESPONSE_DELETE_EVENT:
+ gtk_widget_destroy(dialogue);
+ case GTK_RESPONSE_NONE:
+ return FALSE;
+ break;
+
+ case GTK_RESPONSE_OK:
+ break;
+
+ default:
+ g_assert_not_reached();
+ break;
+ }
+ } while (response != GTK_RESPONSE_OK);
+
+ gtk_widget_destroy(dialogue);
+
+ return TRUE;
+}
+
+static GtkWidget*
+create_function_menu(GCallback callback, gpointer cbdata, gint current)
+{
+ static GwyEnum *entries = NULL;
+
+ if (!entries) {
+ guint i;
+
+ entries = g_new(GwyEnum, PSF_FUNC_NFUNCTIONS);
+ for (i = 0; i < PSF_FUNC_NFUNCTIONS; i++) {
+ entries[i].value = i;
+ entries[i].name = functions[i].name;
+ }
+ }
+
+ return gwy_enum_combo_box_new(entries, PSF_FUNC_NFUNCTIONS,
+ callback, cbdata, current, TRUE);
+}
+
+static void
+psf_data_changed(GwyDataChooser *chooser, GwyAppDataId *object)
+{
+ GtkWidget *dialog;
+
+ gwy_data_chooser_get_active_id(chooser, object);
+ gwy_debug("data: %d %d", object->datano, object->id);
+
+ dialog = g_object_get_data(G_OBJECT(chooser), "dialog");
+ g_assert(GTK_IS_DIALOG(dialog));
+ gtk_dialog_set_response_sensitive(GTK_DIALOG(dialog), GTK_RESPONSE_OK,
+ object->datano);
+}
+
+static gboolean
+psf_data_filter(GwyContainer *data, gint id, gpointer user_data)
+{
+
+ GwyAppDataId *object = (GwyAppDataId*)user_data;
+ GwyDataField *op1, *op2;
+ GQuark quark;
+
+ quark = gwy_app_get_data_key_for_id(id);
+ op1 = GWY_DATA_FIELD(gwy_container_get_object(data, quark));
+
+ data = gwy_app_data_browser_get(object->datano);
+ quark = gwy_app_get_data_key_for_id(object->id);
+ op2 = GWY_DATA_FIELD(gwy_container_get_object(data, quark));
+
+ if (op1 == op2)
+ return FALSE;
+
+ return !gwy_data_field_check_compatibility(op1, op2,
+ GWY_DATA_COMPATIBILITY_RES
+ | GWY_DATA_COMPATIBILITY_REAL
+ | GWY_DATA_COMPATIBILITY_LATERAL);
+}
+
+static void
+function_changed(GtkComboBox *combo, PSFControls *controls)
+{
+ controls->args->function = gwy_enum_combo_box_get_active(combo);
+}
+
+static gdouble
+calculate_root_mean_square_complex(const gdouble *pre, const gdouble *pim,
+ guint xres, guint yres)
+{
+ guint k;
+ gdouble sum = 0.0;
+
+ for (k = 0; k < xres*yres; k++)
+ sum += pre[k]*pre[k] + pim[k]*pim[k];
+
+ return sqrt(sum);
+}
+
+static void
+precaulcate_frequencies(GwyDataField *model,
+ GwyDataField *freq_x, GwyDataField *freq_y)
+{
+ guint xres = gwy_data_field_get_xres(model),
+ yres = gwy_data_field_get_yres(model);
+ gdouble sx = 2.0*G_PI/gwy_data_field_get_xreal(model),
+ sy = 2.0*G_PI/gwy_data_field_get_yreal(model);
+ gdouble *fx = gwy_data_field_get_data(freq_x);
+ gdouble *fy = gwy_data_field_get_data(freq_y);
+ gdouble vx, vy;
+ guint i, j;
+
+ fx[0] = fy[0] = 0.0;
+
+ for (j = 1; j <= xres/2; j++) {
+ vx = j*sx;
+ fx[xres-j] = -vx;
+ fx[j] = vx;
+ fy[j] = fy[xres-1] = 0.0;
+ }
+
+ for (i = 1; i <= yres/2; i++) {
+ vy = i*sy;
+ fx[i*xres] = fx[(yres-i)*xres] = 0.0;
+ fy[(yres-i)*xres] = -vy;
+ fy[i*xres] = vy;
+ }
+
+ for (i = 1; i <= yres/2; i++) {
+ vy = i*sy;
+ for (j = 1; j <= xres/2; j++) {
+ vx = j*sx;
+ fx[(yres-i)*xres + xres-j] = -vx;
+ fx[i*xres + xres-j] = -vx;
+ fx[(yres-i)*xres + j] = vx;
+ fx[i*xres + j] = vx;
+ fy[(yres-i)*xres + xres-j] = -vy;
+ fy[(yres-i)*xres + j] = -vy;
+ fy[i*xres + xres-j] = vy;
+ fy[i*xres + j] = vy;
+ }
+ }
+}
+
+/* Suppress higher frequencies somewhat; they are lots of them and contain
+ * noise.
+ * Do not bother with weighting inside the fitting when we can just
+ * premultiply model and data to achieve the same effect on cheap. */
+static void
+weight_fourier_components(GwyDataField *fftfield,
+ GwyDataField *freq_x, GwyDataField *freq_y)
+{
+ guint xres = gwy_data_field_get_xres(fftfield),
+ yres = gwy_data_field_get_yres(fftfield);
+ const gdouble *fx = gwy_data_field_get_data(freq_x);
+ const gdouble *fy = gwy_data_field_get_data(freq_y);
+ gdouble *d = gwy_data_field_get_data(fftfield);
+ guint k = (yres/2)*xres + xres/2;
+ gdouble fmax2 = fx[k]*fx[k] + fy[k]*fy[k];
+ gdouble factor = 3.0/fmax2;
+
+ for (k = 0; k < xres*yres; k++)
+ d[k] /= 1.0 + factor*(fx[k]*fx[k] + fy[k]*fy[k]);
+}
+
+#ifdef DEBUG
+static void
+debug_print_params(const PSFFunction *func, const gdouble *params)
+{
+ GString *str = g_string_new(NULL);
+ guint i;
+
+ for (i = 0; i < func->nparams; i++)
+ g_string_append_printf(str, " %g", params[i]);
+ gwy_debug("params %s", str->str);
+ g_string_free(str, TRUE);
+}
+#else
+#define debug_print_params(func,params) /* */
+#endif
+
+static void
+fit_psf(GwyDataField *model, GwyDataField *data,
+ GwyDataField *psf, GwyDataField *convolved,
+ const PSFFunction *func)
+{
+ PSFEstimateData psfedata;
+ guint xres = gwy_data_field_get_xres(model),
+ yres = gwy_data_field_get_yres(model);
+ GwyDataField *model_re, *model_im, *data_re, *data_im, *freq_x, *freq_y;
+ GwyNLFitter *fitter = NULL;
+ gdouble rss;
+ gdouble *params = g_new(gdouble, func->nparams);
+
+ freq_x = gwy_data_field_new_alike(model, FALSE);
+ freq_y = gwy_data_field_new_alike(model, FALSE);
+ precaulcate_frequencies(model, freq_x, freq_y);
+
+ model_re = gwy_data_field_new_alike(model, FALSE);
+ model_im = gwy_data_field_new_alike(model, FALSE);
+ gwy_data_field_2dfft_raw(model, NULL, model_re, model_im,
+ GWY_TRANSFORM_DIRECTION_FORWARD);
+
+ data_re = gwy_data_field_new_alike(data, FALSE);
+ data_im = gwy_data_field_new_alike(data, FALSE);
+ gwy_data_field_2dfft_raw(data, NULL, data_re, data_im,
+ GWY_TRANSFORM_DIRECTION_FORWARD);
+
+ /* There can be a constant offset between the two fields. Ignore it. */
+ gwy_data_field_set_val(model_re, 0, 0, 0.0);
+ gwy_data_field_set_val(data_re, 0, 0, 0.0);
+
+ if (!func->initpar(model_re, model_im, data_re, data_im,
+ freq_x, freq_y, params)) {
+ g_warning("Initial parameter estimation failed.");
+ gwy_data_field_clear(psf);
+ gwy_data_field_set_val(psf, 0, 0, 1.0);
+ goto fail;
+ }
+
+ weight_fourier_components(model_re, freq_x, freq_y);
+ weight_fourier_components(model_im, freq_x, freq_y);
+ weight_fourier_components(data_re, freq_x, freq_y);
+ weight_fourier_components(data_im, freq_x, freq_y);
+
+ psfedata.xres = xres;
+ psfedata.yres = yres;
+ psfedata.model_re = gwy_data_field_get_data(model_re);
+ psfedata.model_im = gwy_data_field_get_data(model_im);
+ psfedata.data_re = gwy_data_field_get_data(data_re);
+ psfedata.data_im = gwy_data_field_get_data(data_im);
+ psfedata.xfreq = gwy_data_field_get_data(freq_x);
+ psfedata.yfreq = gwy_data_field_get_data(freq_y);
+
+ fitter = gwy_math_nlfit_new_idx(func->func, func->diff);
+ rss = gwy_math_nlfit_fit_idx(fitter, 2*xres*yres,
+ func->nparams, params, &psfedata);
+ gwy_debug("Fitted rss %g", rss);
+ if (!(rss >= 0.0)) {
+ g_warning("Initial parameter estimation failed.");
+ gwy_data_field_clear(psf);
+ gwy_data_field_set_val(psf, 0, 0, 1.0);
+ goto fail;
+ }
+ debug_print_params(func, params);
+
+ /* Use freq_x as a buffer for FFT(psf) */
+ func->fill(freq_x, freq_y, data_re, data_im, psf, freq_x, params);
+ /* Must do FFT again because we weighted the fields. */
+ gwy_data_field_2dfft_raw(model, NULL, model_re, model_im,
+ GWY_TRANSFORM_DIRECTION_FORWARD);
+
+ gwy_data_field_multiply_fields(data_re, model_re, freq_x);
+ gwy_data_field_multiply_fields(data_im, model_im, freq_x);
+ gwy_data_field_2dfft_raw(data_re, data_im, convolved, model_im,
+ GWY_TRANSFORM_DIRECTION_BACKWARD);
+
+ set_transfer_function_units(model, data, psf);
+
+fail:
+ if (fitter)
+ gwy_math_nlfit_free(fitter);
+ g_free(params);
+ g_object_unref(freq_x);
+ g_object_unref(freq_y);
+ g_object_unref(data_im);
+ g_object_unref(data_re);
+ g_object_unref(model_re);
+ g_object_unref(model_im);
+}
+
+static gdouble
+estimate_width(const gdouble *pre, const gdouble *pim,
+ const gdouble *fx, const gdouble *fy,
+ guint xres, guint yres)
+{
+ guint k;
+ gdouble sum = 0.0;
+
+ for (k = 0; k < xres*yres; k++)
+ sum += (fx[k]*fx[k] + fy[k]*fy[k])*(pre[k]*pre[k] + pim[k]*pim[k]);
+
+ return sqrt(sum);
+}
+
+/* We fit G*model on data, so our residuum function is G*model-data. */
+static gdouble
+psf_gaussian_fit_func(guint i, const gdouble *param, gpointer user_data,
+ gboolean *success)
+{
+ PSFEstimateData *psfedata = (PSFEstimateData*)user_data;
+ guint k = i/2;
+ gdouble A = param[0], width = param[1];
+ gdouble fx = psfedata->xfreq[k], fy = psfedata->yfreq[k];
+ gdouble r2 = (fx*fx + fy*fy)/(width*width);
+ gdouble g, m, d;
+
+ if (G_UNLIKELY(width == 0.0)) {
+ *success = FALSE;
+ return 0.0;
+ }
+
+ *success = TRUE;
+ g = exp(-r2);
+ m = (i % 2) ? psfedata->model_im[k] : psfedata->model_re[k];
+ d = (i % 2) ? psfedata->data_im[k] : psfedata->data_re[k];
+ return A*g*m - d;
+}
+
+static void
+psf_gaussian_fit_diff(guint i,
+ const gdouble *param, const gboolean *fixed_param,
+ G_GNUC_UNUSED GwyNLFitIdxFunc func, gpointer user_data,
+ gdouble *der,
+ gboolean *success)
+{
+ PSFEstimateData *psfedata = (PSFEstimateData*)user_data;
+ guint k = i/2;
+ gdouble A = param[0], width = param[1];
+ gdouble fx = psfedata->xfreq[k], fy = psfedata->yfreq[k];
+ gdouble r2 = (fx*fx + fy*fy)/(width*width);
+ gdouble g, m;
+
+ if (G_UNLIKELY(width == 0.0)) {
+ *success = FALSE;
+ return;
+ }
+
+ *success = TRUE;
+ g = exp(-r2);
+ m = (i % 2) ? psfedata->model_im[k] : psfedata->model_re[k];
+ der[0] = (fixed_param && fixed_param[0]) ? 0.0 : g*m;
+ der[1] = (fixed_param && fixed_param[1]) ? 0.0 : 2.0*A/width*r2*g*m;
+}
+
+static gboolean
+psf_gaussian_init_params(GwyDataField *model_re, GwyDataField *model_im,
+ GwyDataField *data_re, GwyDataField *data_im,
+ GwyDataField *freq_x, GwyDataField *freq_y,
+ gdouble *params)
+{
+ guint xres = gwy_data_field_get_xres(model_re),
+ yres = gwy_data_field_get_yres(model_re);
+ const gdouble *mre = gwy_data_field_get_data_const(model_re);
+ const gdouble *mim = gwy_data_field_get_data_const(model_im);
+ const gdouble *dre = gwy_data_field_get_data_const(data_re);
+ const gdouble *dim = gwy_data_field_get_data_const(data_im);
+ const gdouble *fx = gwy_data_field_get_data_const(freq_x);
+ const gdouble *fy = gwy_data_field_get_data_const(freq_y);
+ gdouble q_model, q_data, w_model, w_data;
+
+ /* Amplitude. */
+ q_model = calculate_root_mean_square_complex(mre, mim, xres, yres);
+ q_data = calculate_root_mean_square_complex(dre, dim, xres, yres);
+ if (!q_model || !q_data)
+ params[0] = 0.0;
+ else
+ params[0] = q_data/q_model;
+ gwy_debug("q_model %g, q_data %g => amplitude %g",
+ q_model, q_data, params[0]);
+
+ /* Width. */
+ w_model = estimate_width(mre, mim, fx, fy, xres, yres)/q_model;
+ w_data = estimate_width(dre, dim, fx, fy, xres, yres)/q_data;
+ params[1] = 0.7*sqrt(fmax(w_model*w_model - w_data*w_data, 0.0))
+ + 0.3*MIN(w_model, w_data);
+ gwy_debug("w_model %g, w_data %g => width %g",
+ w_model, w_data, params[1]);
+
+ return params[0] > 0.0 && params[1] > 0.0;
+}
+
+static void
+psf_gaussian_fill_psf(GwyDataField *freq_x, GwyDataField *freq_y,
+ G_GNUC_UNUSED GwyDataField *buf_re, GwyDataField *buf_im,
+ GwyDataField *psf, GwyDataField *psf_fft,
+ const gdouble *param)
+{
+ gdouble A = param[0], w = param[1];
+ guint xres = gwy_data_field_get_xres(freq_x),
+ yres = gwy_data_field_get_yres(freq_x);
+ const gdouble *fx = gwy_data_field_get_data_const(freq_x);
+ const gdouble *fy = gwy_data_field_get_data_const(freq_y);
+ gdouble *pf = gwy_data_field_get_data(psf_fft);
+ gdouble r2, g;
+ guint k;
+
+ for (k = 0; k < xres*yres; k++) {
+ r2 = (fx[k]*fx[k] + fy[k]*fy[k])/(w*w);
+ g = exp(-r2);
+ pf[k] = A*g;
+ }
+
+ gwy_data_field_2dfft_raw(psf_fft, NULL, psf, buf_im,
+ GWY_TRANSFORM_DIRECTION_BACKWARD);
+ gwy_data_field_2dfft_humanize(psf);
+}
+
+static gdouble
+psf_agaussian_fit_func(guint i, const gdouble *param, gpointer user_data,
+ gboolean *success)
+{
+ PSFEstimateData *psfedata = (PSFEstimateData*)user_data;
+ guint k = i/2;
+ gdouble A = param[0], widthx = param[1], widthy = param[2];
+ gdouble fx = psfedata->xfreq[k]/widthx, fy = psfedata->yfreq[k]/widthy;
+ gdouble r2 = fx*fx + fy*fy;
+ gdouble g, m, d;
+
+ if (G_UNLIKELY(widthx == 0.0 || widthy == 0.0)) {
+ *success = FALSE;
+ return 0.0;
+ }
+
+ *success = TRUE;
+ g = exp(-r2);
+ m = (i % 2) ? psfedata->model_im[k] : psfedata->model_re[k];
+ d = (i % 2) ? psfedata->data_im[k] : psfedata->data_re[k];
+ return A*g*m - d;
+}
+
+static void
+psf_agaussian_fit_diff(guint i,
+ const gdouble *param, const gboolean *fixed_param,
+ G_GNUC_UNUSED GwyNLFitIdxFunc func, gpointer user_data,
+ gdouble *der,
+ gboolean *success)
+{
+ PSFEstimateData *psfedata = (PSFEstimateData*)user_data;
+ guint k = i/2;
+ gdouble A = param[0], widthx = param[1], widthy = param[2];
+ gdouble fx = psfedata->xfreq[k]/widthx, fy = psfedata->yfreq[k]/widthy;
+ gdouble r2 = fx*fx + fy*fy;
+ gdouble g, m;
+
+ if (G_UNLIKELY(widthx == 0.0 || widthy == 0.0)) {
+ *success = FALSE;
+ return;
+ }
+
+ *success = TRUE;
+ g = exp(-r2);
+ m = (i % 2) ? psfedata->model_im[k] : psfedata->model_re[k];
+ der[0] = (fixed_param && fixed_param[0]) ? 0.0 : g*m;
+ der[1] = (fixed_param && fixed_param[1]) ? 0.0 : 2.0*A/widthx*fx*fx*g*m;
+ der[2] = (fixed_param && fixed_param[2]) ? 0.0 : 2.0*A/widthy*fy*fy*g*m;
+}
+
+static gboolean
+psf_agaussian_init_params(GwyDataField *model_re, GwyDataField *model_im,
+ GwyDataField *data_re, GwyDataField *data_im,
+ GwyDataField *freq_x, GwyDataField *freq_y,
+ gdouble *params)
+{
+ if (!psf_gaussian_init_params(model_re, model_im, data_re, data_im,
+ freq_x, freq_y, params))
+ return FALSE;
+
+ params[2] = params[1];
+ return TRUE;
+}
+
+static void
+psf_agaussian_fill_psf(GwyDataField *freq_x, GwyDataField *freq_y,
+ G_GNUC_UNUSED GwyDataField *buf_re, GwyDataField *buf_im,
+ GwyDataField *psf, GwyDataField *psf_fft,
+ const gdouble *param)
+{
+ gdouble A = param[0], wx = param[1], wy = param[2];
+ guint xres = gwy_data_field_get_xres(freq_x),
+ yres = gwy_data_field_get_yres(freq_x);
+ const gdouble *fx = gwy_data_field_get_data_const(freq_x);
+ const gdouble *fy = gwy_data_field_get_data_const(freq_y);
+ gdouble *pf = gwy_data_field_get_data(psf_fft);
+ gdouble r2, g;
+ guint k;
+
+ for (k = 0; k < xres*yres; k++) {
+ r2 = fx[k]*fx[k]/(wx*wx) + fy[k]*fy[k]/(wy*wy);
+ g = exp(-r2);
+ pf[k] = A*g;
+ }
+
+ gwy_data_field_2dfft_raw(psf_fft, NULL, psf, buf_im,
+ GWY_TRANSFORM_DIRECTION_BACKWARD);
+ gwy_data_field_2dfft_humanize(psf);
+}
+
+static const gchar function_key[] = "/module/psf-fit/function";
+
+static void
+psf_sanitize_args(PSFArgs *args)
+{
+ args->function = CLAMP(args->function, 0, PSF_FUNC_NFUNCTIONS-1);
+ gwy_app_data_id_verify_channel(&args->op2);
+}
+
+static void
+psf_load_args(GwyContainer *container,
+ PSFArgs *args)
+{
+ *args = psf_defaults;
+
+ gwy_container_gis_enum_by_name(container, function_key, &args->function);
+ args->op2 = op2_id;
+ psf_sanitize_args(args);
+}
+
+static void
+psf_save_args(GwyContainer *container,
+ PSFArgs *args)
+{
+ op2_id = args->op2;
+
+ gwy_container_set_enum_by_name(container, function_key, args->function);
+}
+
+/* vim: set cin et ts=4 sw=4 cino=>1s,e0,n0,f0,{0,}0,^0,\:1s,=0,g1s,h0,t0,+1s,c3,(0,u0 : */
diff --git a/modules/process/psf.c b/modules/process/psf.c
new file mode 100644
index 0000000..c6805f4
--- /dev/null
+++ b/modules/process/psf.c
@@ -0,0 +1,750 @@
+/*
+ * @(#) $Id: psf.c 19948 2017-06-22 14:05:41Z yeti-dn $
+ * Copyright (C) 2017 David Necas (Yeti), Petr Klapetek.
+ * E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "config.h"
+#include <gtk/gtk.h>
+#include <libgwyddion/gwymacros.h>
+#include <libgwyddion/gwymath.h>
+#include <libprocess/gwyprocesstypes.h>
+#include <libprocess/arithmetic.h>
+#include <libprocess/inttrans.h>
+#include <libprocess/stats.h>
+#include <libgwydgets/gwydgetutils.h>
+#include <libgwydgets/gwycombobox.h>
+#include <libgwydgets/gwystock.h>
+#include <libgwymodule/gwymodule-process.h>
+#include <app/gwymoduleutils.h>
+#include <app/gwyapp.h>
+#include "mfmops.h"
+#include "preview.h"
+
+#define PSF_RUN_MODES GWY_RUN_INTERACTIVE
+
+#define field_convolve_default(field, kernel) \
+ gwy_data_field_area_ext_convolve((field), \
+ 0, 0, \
+ gwy_data_field_get_xres(field), \
+ gwy_data_field_get_yres(field), \
+ (field), (kernel), \
+ GWY_EXTERIOR_MIRROR_EXTEND, 0.0, TRUE)
+
+typedef enum {
+ GWY_PSF_DISPLAY_DATA = 0,
+ GWY_PSF_DISPLAY_RESULT = 1,
+ GWY_PSF_DISPLAY_CONVOLVED = 2,
+ GWY_PSF_DISPLAY_DIFF = 3
+} GwyPsfDisplayType;
+
+typedef struct {
+ gdouble sigma;
+ GwyAppDataId op1;
+ GwyAppDataId op2;
+ gboolean update;
+ GwyPsfDisplayType display;
+} PsfArgs;
+
+typedef struct {
+ PsfArgs *args;
+ GtkObject *sigma;
+ GtkWidget *chooser_op2;
+ GtkWidget *update;
+ GtkWidget *display;
+ GwyDataField *result;
+ GwyDataField *dfield;
+ GtkWidget *view;
+ GwyContainer *mydata;
+ GtkWidget *dialog;
+} PsfControls;
+
+static gboolean module_register (void);
+static void psf (GwyContainer *data,
+ GwyRunType run);
+static gboolean psf_dialog (PsfArgs *args,
+ GwyContainer *data);
+static void psf_load_args (GwyContainer *container,
+ PsfArgs *args);
+static void psf_save_args (GwyContainer *container,
+ PsfArgs *args);
+static void psf_sanitize_args (PsfArgs *args);
+static void sigma_changed (GtkAdjustment *adj,
+ PsfControls *controls);
+static void psf_data_changed (GwyDataChooser *chooser,
+ GwyAppDataId *object);
+static gboolean psf_data_filter (GwyContainer *data,
+ gint id,
+ gpointer user_data);
+static void update_changed (GtkToggleButton *button,
+ PsfControls *controls);
+static void preview (PsfControls *controls,
+ PsfArgs *args);
+static void display_changed (GtkComboBox *combo,
+ PsfControls *controls);
+static void calculate_psf (GwyDataField *measured,
+ GwyDataField *ideal,
+ GwyDataField *psf,
+ gdouble sigma);
+static gboolean fit (PsfArgs *args,
+ GwySetFractionFunc set_fraction);
+
+static GwyAppDataId op2_id = GWY_APP_DATA_ID_NONE;
+
+static const PsfArgs psf_defaults = {
+ 10, GWY_APP_DATA_ID_NONE, GWY_APP_DATA_ID_NONE, TRUE, GWY_PSF_DISPLAY_RESULT,
+};
+
+
+static GwyModuleInfo module_info = {
+ GWY_MODULE_ABI_VERSION,
+ &module_register,
+ N_("Point spread function estimation"),
+ "Petr Klapetek <klapetek at gwyddion.net>",
+ "1.1",
+ "David Nečas (Yeti) & Petr Klapetek",
+ "2017",
+};
+
+GWY_MODULE_QUERY2(module_info, psf)
+
+static gboolean
+module_register(void)
+{
+ gwy_process_func_register("psf",
+ (GwyProcessFunc)&psf,
+ N_("/_Statistics/_PSF Guess..."),
+ NULL,
+ PSF_RUN_MODES,
+ GWY_MENU_FLAG_DATA,
+ N_("Estimate PSF from known data and image"));
+
+ return TRUE;
+}
+
+static void
+psf(GwyContainer *data, GwyRunType run)
+{
+ GwyDataField *dfield1, *dfield2, *psf, *psfb, *convolved, *subtracted;
+ PsfArgs args;
+ gboolean ok;
+ GQuark quark;
+ GwyContainer *mydata;
+ gint newid;
+
+ g_return_if_fail(run & PSF_RUN_MODES);
+
+ psf_load_args(gwy_app_settings_get(), &args);
+
+ gwy_app_data_browser_get_current(GWY_APP_DATA_FIELD_ID, &args.op1.id,
+ GWY_APP_CONTAINER_ID, &args.op1.datano,
+ 0);
+
+ ok = psf_dialog(&args, data);
+ psf_save_args(gwy_app_settings_get(), &args);
+ if (!ok)
+ return;
+
+ mydata = gwy_app_data_browser_get(args.op1.datano);
+ quark = gwy_app_get_data_key_for_id(args.op1.id);
+ dfield1 = GWY_DATA_FIELD(gwy_container_get_object(mydata, quark));
+
+ mydata = gwy_app_data_browser_get(args.op2.datano);
+ quark = gwy_app_get_data_key_for_id(args.op2.id);
+ dfield2 = GWY_DATA_FIELD(gwy_container_get_object(mydata, quark));
+
+ psf = gwy_data_field_new_alike(dfield1, TRUE);
+ calculate_psf(dfield1, dfield2, psf, args.sigma/100);
+
+ psfb = gwy_data_field_duplicate(psf);
+ newid = gwy_app_data_browser_add_data_field(psfb, data, TRUE);
+ gwy_app_sync_data_items(data, data, args.op1.id, newid, FALSE,
+ GWY_DATA_ITEM_GRADIENT,
+ GWY_DATA_ITEM_MASK_COLOR,
+ 0);
+
+ gwy_app_set_data_field_title(data, newid, _("PSF"));
+ gwy_app_channel_log_add_proc(data, args.op1.id, newid);
+ gwy_object_unref(psfb);
+
+ convolved = gwy_data_field_new_alike(dfield1, TRUE);
+ gwy_data_field_copy(dfield2, convolved, TRUE);
+ field_convolve_default(convolved, psf);
+
+ newid = gwy_app_data_browser_add_data_field(convolved, data, TRUE);
+ gwy_app_sync_data_items(data, data, args.op1.id, newid, FALSE,
+ GWY_DATA_ITEM_GRADIENT,
+ GWY_DATA_ITEM_MASK_COLOR,
+ 0);
+
+ gwy_app_set_data_field_title(data, newid, _("PSF*P"));
+ gwy_app_channel_log_add_proc(data, args.op1.id, newid);
+
+
+ subtracted = gwy_data_field_duplicate(convolved);
+ gwy_data_field_subtract_fields(subtracted, convolved, dfield1);
+
+ newid = gwy_app_data_browser_add_data_field(subtracted, data, TRUE);
+ gwy_app_sync_data_items(data, data, args.op1.id, newid, FALSE,
+ GWY_DATA_ITEM_GRADIENT,
+ GWY_DATA_ITEM_MASK_COLOR,
+ 0);
+
+ gwy_app_set_data_field_title(data, newid, _("PSF*P - I"));
+ gwy_app_channel_log_add_proc(data, args.op1.id, newid);
+
+
+ g_object_unref(psf);
+ g_object_unref(convolved);
+ g_object_unref(subtracted);
+}
+
+static gboolean
+psf_dialog(PsfArgs *args, GwyContainer *data)
+{
+ GtkWidget *dialog, *table, *hbox, *spin;
+ GwyDataChooser *chooser;
+ PsfControls controls;
+ gint response, row, G_GNUC_UNUSED datano, id;
+ GQuark quark;
+ GwyContainer *mydata;
+ gboolean ok;
+
+ static const GwyEnum psf_outputs[] = {
+ { N_("Data"), GWY_PSF_DISPLAY_DATA, },
+ { N_("PSF"), GWY_PSF_DISPLAY_RESULT, },
+ { N_("Convolved"), GWY_PSF_DISPLAY_CONVOLVED, },
+ { N_("Difference"), GWY_PSF_DISPLAY_DIFF, },
+ };
+
+ controls.args = args;
+
+ dialog = gtk_dialog_new_with_buttons(_("Estimate PSF"), NULL, 0,
+ _("_Fit"), RESPONSE_ESTIMATE,
+ _("_Plot Inits"), RESPONSE_PREVIEW,
+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+ GTK_STOCK_OK, GTK_RESPONSE_OK,
+ NULL);
+ gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK);
+ gtk_dialog_set_response_sensitive(GTK_DIALOG(dialog), RESPONSE_PREVIEW,
+ !args->update);
+ controls.dialog = dialog;
+
+ hbox = gtk_hbox_new(FALSE, 2);
+ gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), GTK_WIDGET(hbox),
+ FALSE, FALSE, 4);
+
+ mydata = gwy_app_data_browser_get(args->op1.datano);
+ quark = gwy_app_get_data_key_for_id(args->op1.id);
+ datano = args->op1.datano;
+ id = args->op1.id;
+ controls.dfield = GWY_DATA_FIELD(gwy_container_get_object(mydata, quark));
+ controls.result = gwy_data_field_new_alike(controls.dfield, TRUE);
+
+ controls.mydata = gwy_container_new();
+ gwy_container_set_object_by_name(controls.mydata, "/0/data",
+ controls.result);
+ gwy_app_sync_data_items(data, controls.mydata, id, 0, FALSE,
+ GWY_DATA_ITEM_PALETTE,
+ GWY_DATA_ITEM_MASK_COLOR,
+ GWY_DATA_ITEM_RANGE,
+ GWY_DATA_ITEM_REAL_SQUARE,
+ 0);
+ controls.view = create_preview(controls.mydata, 0, PREVIEW_SIZE, TRUE);
+ gtk_box_pack_start(GTK_BOX(hbox), controls.view, FALSE, FALSE, 4);
+
+ table = gtk_table_new(7, 3, FALSE);
+ gtk_table_set_row_spacings(GTK_TABLE(table), 2);
+ gtk_table_set_col_spacings(GTK_TABLE(table), 6);
+ gtk_container_set_border_width(GTK_CONTAINER(table), 4);
+ gtk_box_pack_start(GTK_BOX(hbox), table, TRUE, TRUE, 4);
+ row = 0;
+
+ controls.chooser_op2 = gwy_data_chooser_new_channels();
+ chooser = GWY_DATA_CHOOSER(controls.chooser_op2);
+ g_object_set_data(G_OBJECT(chooser), "dialog", dialog);
+ gwy_data_chooser_set_active_id(chooser, &args->op2);
+ gwy_data_chooser_set_filter(chooser, psf_data_filter, &args->op1, NULL);
+ g_signal_connect(chooser, "changed",
+ G_CALLBACK(psf_data_changed), &args->op2);
+ psf_data_changed(chooser, &args->op2);
+ gwy_table_attach_adjbar(table, row, _("_Ideal response:"), NULL,
+ GTK_OBJECT(chooser), GWY_HSCALE_WIDGET_NO_EXPAND);
+ gtk_table_set_row_spacing(GTK_TABLE(table), row, 8);
+ row++;
+
+ controls.display
+ = gwy_enum_combo_box_new(psf_outputs, G_N_ELEMENTS(psf_outputs),
+ G_CALLBACK(display_changed),
+ &controls, args->display, TRUE);
+ gwy_table_attach_adjbar(table, row, _("_Display:"), NULL,
+ GTK_OBJECT(controls.display),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
+ row++;
+
+ controls.sigma = gtk_adjustment_new(args->sigma, 1e-5, 1e2, 1e-5, 1, 0);
+ spin = gwy_table_attach_adjbar(table, row, _("_Sigma init:"), "%",
+ controls.sigma, GWY_HSCALE_LOG);
+ gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 7);
+ g_object_set_data(G_OBJECT(controls.sigma), "controls", &controls);
+ g_signal_connect(controls.sigma, "value-changed",
+ G_CALLBACK(sigma_changed), &controls);
+ row++;
+
+ controls.update = gtk_check_button_new_with_mnemonic(_("I_nstant updates"));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.update),
+ args->update);
+ gtk_table_attach(GTK_TABLE(table), controls.update,
+ 0, 2, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ g_signal_connect(controls.update, "toggled",
+ G_CALLBACK(update_changed), &controls);
+ row++;
+
+ if (controls.args->update)
+ preview(&controls, controls.args);
+
+ gtk_widget_show_all(dialog);
+ do {
+ response = gtk_dialog_run(GTK_DIALOG(dialog));
+ switch (response) {
+ case GTK_RESPONSE_CANCEL:
+ case GTK_RESPONSE_DELETE_EVENT:
+ gtk_widget_destroy(dialog);
+ case GTK_RESPONSE_NONE:
+ return FALSE;
+ break;
+
+ case GTK_RESPONSE_OK:
+ break;
+
+ case RESPONSE_PREVIEW:
+ preview(&controls, args);
+ break;
+
+ case RESPONSE_ESTIMATE:
+ gwy_app_wait_start(GTK_WINDOW(dialog), _("Searching..."));
+ gwy_app_wait_set_fraction(0.0);
+ ok = fit(args, gwy_app_wait_set_fraction);
+ gwy_app_wait_finish();
+ if (ok) {
+ gtk_adjustment_set_value(GTK_ADJUSTMENT(controls.sigma),
+ args->sigma);
+ if (!controls.args->update)
+ preview(&controls, args);
+ }
+ break;
+
+ default:
+ g_assert_not_reached();
+ break;
+ }
+ } while (response != GTK_RESPONSE_OK);
+
+ gtk_widget_destroy(dialog);
+
+ return TRUE;
+}
+
+static void
+display_changed(GtkComboBox *combo, PsfControls *controls)
+{
+ controls->args->display = gwy_enum_combo_box_get_active(combo);
+ if (controls->args->update)
+ preview(controls, controls->args);
+}
+
+static void
+sigma_changed(GtkAdjustment *adj, PsfControls *controls)
+{
+ controls->args->sigma = gtk_adjustment_get_value(adj);
+ if (controls->args->update)
+ preview(controls, controls->args);
+}
+
+static void
+update_changed(GtkToggleButton *button, PsfControls *controls)
+{
+ controls->args->update = gtk_toggle_button_get_active(button);
+ gtk_dialog_set_response_sensitive(GTK_DIALOG(controls->dialog),
+ RESPONSE_PREVIEW,
+ !controls->args->update);
+ if (controls->args->update)
+ preview(controls, controls->args);
+}
+
+static gdouble
+mean_square(GwyDataField *dfield)
+{
+ const gdouble *d = gwy_data_field_get_data_const(dfield);
+ guint i, n = dfield->xres * dfield->yres;
+ gdouble s = 0.0;
+
+ for (i = 0; i < n; i++)
+ s += d[i]*d[i];
+
+ return s/n;
+}
+
+static gdouble
+normalised_square_gradient_integral(GwyDataField *dfield)
+{
+ const gdouble *d = gwy_data_field_get_data_const(dfield);
+ guint i, j, k, xres = dfield->xres, yres = dfield->yres;
+ gdouble s = 0.0, m, min, max, dx, dy, hx, hy;
+
+ gwy_data_field_get_min_max(dfield, &min, &max);
+ hx = gwy_data_field_get_xmeasure(dfield);
+ hy = gwy_data_field_get_ymeasure(dfield);
+ if (fabs(log(hx/hy) - 1.0) < 1e-5) {
+ /* We can factor out the step here. */
+ for (i = 0; i < yres-1; i++) {
+ k = i*xres;
+ for (j = 0; j < xres-1; j++, k++) {
+ dx = d[k+1] - d[k];
+ dy = d[k+xres] - d[k];
+ s += dx*dx + dy*dy;
+ }
+ }
+ /* Convert the plain sum to an integral. */
+ s /= hx*hy;
+ }
+ else {
+ for (i = 0; i < yres-1; i++) {
+ k = i*xres;
+ for (j = 0; j < xres-1; j++, k++) {
+ dx = (d[k+1] - d[k])/hx;
+ dy = (d[k+xres] - d[k])/hy;
+ s += dx*dx + dy*dy;
+ }
+ }
+ /* Convert the plain sum to an integral. */
+ s *= hx*hy;
+ }
+
+ /* Normalise. */
+ m = fmax(fabs(min), fabs(max));
+ return s/(G_PI*m*m);
+}
+
+static gboolean
+fit(PsfArgs *args, GwySetFractionFunc set_fraction)
+{
+ GwyDataField *dfield1, *dfield2, *psf, *convolved;
+ GQuark quark;
+ GwyContainer *mydata;
+ gdouble sigma, msq, m;
+ gint isigma;
+ guint i, im, n;
+ GArray *results;
+
+ mydata = gwy_app_data_browser_get(args->op1.datano);
+ quark = gwy_app_get_data_key_for_id(args->op1.id);
+ dfield1 = GWY_DATA_FIELD(gwy_container_get_object(mydata, quark));
+
+ mydata = gwy_app_data_browser_get(args->op2.datano);
+ quark = gwy_app_get_data_key_for_id(args->op2.id);
+ dfield2 = GWY_DATA_FIELD(gwy_container_get_object(mydata, quark));
+
+ psf = gwy_data_field_new_alike(dfield1, TRUE);
+ convolved = gwy_data_field_new_alike(dfield1, TRUE);
+
+ results = g_array_new(FALSE, FALSE, sizeof(gdouble));
+ for (isigma = -14; isigma <= 0; isigma += 1) {
+ sigma = pow10(0.5*isigma);
+ g_array_append_val(results, sigma);
+
+ calculate_psf(dfield1, dfield2, psf, sigma);
+ msq = normalised_square_gradient_integral(psf);
+ g_array_append_val(results, msq);
+
+ gwy_data_field_copy(dfield2, convolved, TRUE);
+ field_convolve_default(convolved, psf);
+ gwy_data_field_subtract_fields(convolved, convolved, dfield1);
+ /* Differences must be calculated from zero, not mean plane. */
+ msq = mean_square(convolved);
+ g_array_append_val(results, msq);
+
+ if (set_fraction && !set_fraction((isigma + 14.0)/15.0)) {
+ g_object_unref(convolved);
+ g_object_unref(psf);
+ g_array_free(results, TRUE);
+ return FALSE;
+ }
+ }
+ g_object_unref(convolved);
+ g_object_unref(psf);
+
+ n = results->len/3;
+
+ /* Normalise both square sums using the edge (maximum) values. */
+ m = g_array_index(results, gdouble, 1);
+ for (i = 1; i < n; i++) {
+ msq = g_array_index(results, gdouble, 3*i + 1);
+ if (msq > m)
+ m = msq;
+ }
+ for (i = 0; i < n; i++)
+ g_array_index(results, gdouble, 3*i + 1) /= m;
+
+ m = g_array_index(results, gdouble, 2);
+ for (i = 1; i < n; i++) {
+ msq = g_array_index(results, gdouble, 3*i + 2);
+ if (msq > m)
+ m = msq;
+ }
+ for (i = 0; i < n; i++)
+ g_array_index(results, gdouble, 3*i + 2) /= m;
+
+ /* Find minimum. */
+ m = G_MAXDOUBLE;
+ im = 0;
+ for (i = 0; i < n; i++) {
+ msq = (g_array_index(results, gdouble, 3*i + 1)
+ + g_array_index(results, gdouble, 3*i + 2));
+ if (msq < m) {
+ im = i;
+ m = msq;
+ }
+ }
+
+ /* Attempt to refine minimum position. */
+ if (im > 0 && im < n-1) {
+ gdouble c[3];
+ gdouble x, sigma1, sigma2;
+
+ for (i = 0; i < 3; i++) {
+ c[i] = -(g_array_index(results, gdouble, 3*(im-1 + i) + 1)
+ + g_array_index(results, gdouble, 3*(im-1 + i) + 2));
+ }
+ gwy_math_refine_maximum_1d(c, &x);
+ if (x < 0.0) {
+ x += 1.0;
+ im -= 1;
+ }
+ sigma1 = g_array_index(results, gdouble, 3*im);
+ sigma2 = g_array_index(results, gdouble, 3*(im + 1));
+ sigma = exp((1.0 - x)*log(sigma1) + x*log(sigma2));
+ }
+ else
+ sigma = g_array_index(results, gdouble, 3*im);
+
+ args->sigma = 100.0*sigma;
+ g_array_free(results, TRUE);
+
+ return TRUE;
+}
+
+static void
+preview(PsfControls *controls, PsfArgs *args)
+{
+ GwyDataField *dfield1, *dfield2, *psf, *convolved;
+ GQuark quark;
+ GwyContainer *mydata;
+ gdouble realsigma;
+
+ mydata = gwy_app_data_browser_get(args->op1.datano);
+ quark = gwy_app_get_data_key_for_id(args->op1.id);
+ dfield1 = GWY_DATA_FIELD(gwy_container_get_object(mydata, quark));
+
+ if (args->op2.datano < 0 || args->op2.id < 0) {
+ if (args->display == GWY_PSF_DISPLAY_DATA)
+ gwy_data_field_copy(dfield1, controls->result, TRUE);
+ else
+ gwy_data_field_clear(controls->result);
+ gwy_data_field_data_changed(controls->result);
+ return;
+ }
+
+ mydata = gwy_app_data_browser_get(args->op2.datano);
+ quark = gwy_app_get_data_key_for_id(args->op2.id);
+ dfield2 = GWY_DATA_FIELD(gwy_container_get_object(mydata, quark));
+
+ psf = gwy_data_field_new_alike(dfield1, TRUE);
+
+ realsigma = args->sigma/100.0;
+ calculate_psf(dfield1, dfield2, psf, realsigma);
+
+ if (args->display == GWY_PSF_DISPLAY_DATA) {
+ gwy_data_field_copy(dfield1, controls->result, TRUE);
+ gwy_data_field_data_changed(controls->result);
+ }
+ else if (args->display == GWY_PSF_DISPLAY_RESULT) {
+ gwy_data_field_copy(psf, controls->result, TRUE);
+ gwy_data_field_data_changed(controls->result);
+ }
+ else if (args->display == GWY_PSF_DISPLAY_CONVOLVED) {
+ convolved = gwy_data_field_new_alike(dfield1, TRUE);
+ gwy_data_field_copy(dfield2, convolved, TRUE);
+ field_convolve_default(convolved, psf);
+ gwy_data_field_copy(convolved, controls->result, TRUE);
+ gwy_data_field_data_changed(controls->result);
+ gwy_object_unref(convolved);
+
+ }
+ else {
+ convolved = gwy_data_field_new_alike(dfield1, TRUE);
+ gwy_data_field_copy(dfield2, convolved, TRUE);
+ field_convolve_default(convolved, psf);
+ gwy_data_field_subtract_fields(convolved, convolved, dfield1);
+ gwy_data_field_copy(convolved, controls->result, TRUE);
+ gwy_data_field_data_changed(controls->result);
+ gwy_object_unref(convolved);
+ }
+}
+
+static void
+psf_data_changed(GwyDataChooser *chooser, GwyAppDataId *object)
+{
+ GtkWidget *dialog;
+
+ gwy_data_chooser_get_active_id(chooser, object);
+ gwy_debug("data: %d %d", object->datano, object->id);
+
+ dialog = g_object_get_data(G_OBJECT(chooser), "dialog");
+ g_assert(GTK_IS_DIALOG(dialog));
+ gtk_dialog_set_response_sensitive(GTK_DIALOG(dialog), GTK_RESPONSE_OK,
+ object->datano);
+}
+
+static gboolean
+psf_data_filter(GwyContainer *data, gint id, gpointer user_data)
+{
+
+ GwyAppDataId *object = (GwyAppDataId*)user_data;
+ GwyDataField *op1, *op2;
+ GQuark quark;
+
+ quark = gwy_app_get_data_key_for_id(id);
+ op1 = GWY_DATA_FIELD(gwy_container_get_object(data, quark));
+
+ data = gwy_app_data_browser_get(object->datano);
+ quark = gwy_app_get_data_key_for_id(object->id);
+ op2 = GWY_DATA_FIELD(gwy_container_get_object(data, quark));
+
+ /* It does not make sense to crosscorrelate with itself */
+ if (op1 == op2)
+ return FALSE;
+
+ return !gwy_data_field_check_compatibility(op1, op2,
+ GWY_DATA_COMPATIBILITY_RES
+ | GWY_DATA_COMPATIBILITY_REAL
+ | GWY_DATA_COMPATIBILITY_LATERAL);
+}
+
+/*
+ * XXX: I*P should be an integral. The plain convolution sum needs to be
+ * multiplied by area/npixels to approximate the integral. This also means
+ * we have to *divide* the estimated PSF by the same factor.
+ */
+static void
+calculate_psf(GwyDataField *measured, GwyDataField *ideal,
+ GwyDataField *psf, gdouble sigma)
+{
+ GwyDataField *frideal, *fiideal, *frmeasured, *fimeasured,
+ *frpsf, *fipsf, *ipsf;
+ gint i;
+ gint xres = gwy_data_field_get_xres(measured);
+ gint yres = gwy_data_field_get_yres(measured);
+ gdouble *frmdata, *fimdata, *fridata, *fiidata, *frpsfdata, *fipsfdata;
+ gdouble rv, iv, inorm, realsigma, rs2, min, max, q;
+
+ frideal = gwy_data_field_new_alike(measured, TRUE);
+ fiideal = gwy_data_field_new_alike(measured, TRUE);
+ frmeasured = gwy_data_field_new_alike(measured, TRUE);
+ fimeasured = gwy_data_field_new_alike(measured, TRUE);
+ frpsf = gwy_data_field_new_alike(measured, TRUE);
+ fipsf = gwy_data_field_new_alike(measured, TRUE);
+ ipsf = gwy_data_field_new_alike(measured, TRUE);
+
+ gwy_data_field_2dfft_raw(measured, NULL, frmeasured, fimeasured,
+ GWY_TRANSFORM_DIRECTION_FORWARD);
+ gwy_data_field_2dfft_raw(ideal, NULL, frideal, fiideal,
+ GWY_TRANSFORM_DIRECTION_FORWARD);
+
+ frmdata = gwy_data_field_get_data(frmeasured);
+ fimdata = gwy_data_field_get_data(fimeasured);
+ fridata = gwy_data_field_get_data(frideal);
+ fiidata = gwy_data_field_get_data(fiideal);
+
+ frpsfdata = gwy_data_field_get_data(frpsf);
+ fipsfdata = gwy_data_field_get_data(fipsf);
+
+ gwy_data_field_get_min_max(frideal, &min, &max);
+ realsigma = sigma*(max - min);
+ rs2 = realsigma*realsigma;
+ q = sqrt(xres*yres)/(gwy_data_field_get_xreal(ideal)
+ * gwy_data_field_get_yreal(ideal));
+
+ for (i = 0; i < xres*yres; i++) {
+ inorm = fridata[i]*fridata[i] + fiidata[i]*fiidata[i];
+
+ rv = (frmdata[i]*fridata[i] + fimdata[i]*fiidata[i])/(inorm + rs2);
+ iv = (-frmdata[i]*fiidata[i] + fimdata[i]*fridata[i])/(inorm + rs2);
+
+ frpsfdata[i] = rv*q;
+ fipsfdata[i] = iv*q;
+ }
+
+ gwy_data_field_2dfft_raw(frpsf, fipsf, psf, ipsf,
+ GWY_TRANSFORM_DIRECTION_BACKWARD);
+ gwy_data_field_2dfft_humanize(psf);
+ set_transfer_function_units(ideal, measured, psf);
+
+ gwy_object_unref(frideal);
+ gwy_object_unref(fiideal);
+ gwy_object_unref(frmeasured);
+ gwy_object_unref(fimeasured);
+ gwy_object_unref(frpsf);
+ gwy_object_unref(fipsf);
+ gwy_object_unref(ipsf);
+}
+
+static const gchar sigma_key[] = "/module/psf/sigma";
+static const gchar update_key[] = "/module/psf/update";
+static const gchar display_key[] = "/module/psf/display";
+
+static void
+psf_sanitize_args(PsfArgs *args)
+{
+ gwy_app_data_id_verify_channel(&args->op2);
+}
+
+static void
+psf_load_args(GwyContainer *container, PsfArgs *args)
+{
+ *args = psf_defaults;
+
+ gwy_container_gis_boolean_by_name(container, update_key, &args->update);
+ gwy_container_gis_enum_by_name(container, display_key, &args->display);
+ gwy_container_gis_double_by_name(container, sigma_key, &args->sigma);
+ args->op2 = op2_id;
+
+ psf_sanitize_args(args);
+}
+
+static void
+psf_save_args(GwyContainer *container, PsfArgs *args)
+{
+ op2_id = args->op2;
+
+ gwy_container_set_boolean_by_name(container, update_key, args->update);
+ gwy_container_set_enum_by_name(container, display_key, args->display);
+ gwy_container_set_double_by_name(container, sigma_key, args->sigma);
+}
+
+/* vim: set cin et ts=4 sw=4 cino=>1s,e0,n0,f0,{0,}0,^0,\:1s,=0,g1s,h0,t0,+1s,c3,(0,u0 : */
diff --git a/modules/process/rank.c b/modules/process/rank.c
index d6fffbd..a2a492e 100644
--- a/modules/process/rank.c
+++ b/modules/process/rank.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: rank.c 18665 2016-04-26 20:42:48Z yeti-dn $
+ * @(#) $Id: rank.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2014-2015 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -91,12 +91,12 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Enhances local contrast using a rank transform."),
"Yeti <yeti at gwyddion.net>",
- "2.1",
+ "2.2",
"David Nečas (Yeti) & Petr Klapetek",
"2014",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, rank)
static gboolean
module_register(void)
@@ -162,7 +162,7 @@ rank_dialog(RankArgs *args)
gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK);
gwy_help_add_to_proc_dialog(GTK_DIALOG(dialog), GWY_HELP_DEFAULT);
- table = gtk_table_new(2 + G_N_ELEMENTS(types), 4, FALSE);
+ table = gtk_table_new(2 + G_N_ELEMENTS(types), 3, FALSE);
gtk_table_set_row_spacings(GTK_TABLE(table), 2);
gtk_table_set_col_spacings(GTK_TABLE(table), 6);
gtk_container_set_border_width(GTK_CONTAINER(table), 4);
@@ -172,7 +172,7 @@ rank_dialog(RankArgs *args)
label = gtk_label_new(_("Filter type:"));
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_table_attach(GTK_TABLE(table), label, 0, 3, row, row+1,
+ gtk_table_attach(GTK_TABLE(table), label, 0, 2, row, row+1,
GTK_FILL, 0, 0, 0);
row++;
@@ -181,12 +181,12 @@ rank_dialog(RankArgs *args)
&controls,
args->type);
row = gwy_radio_buttons_attach_to_table(controls.type, GTK_TABLE(table),
- 3, row);
+ 2, row);
gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
controls.size = gtk_adjustment_new(args->size, 1, MAX_SIZE, 1, 10, 0);
- gwy_table_attach_hscale(table, row++, _("Kernel _size:"), "px",
- controls.size, 0);
+ gwy_table_attach_adjbar(table, row++, _("Kernel _size:"), _("px"),
+ controls.size, GWY_HSCALE_DEFAULT);
g_signal_connect_swapped(controls.size, "value-changed",
G_CALLBACK(size_changed), &controls);
diff --git a/modules/process/rotate.c b/modules/process/rotate.c
index 42be52d..8ecc0e6 100644
--- a/modules/process/rotate.c
+++ b/modules/process/rotate.c
@@ -1,6 +1,6 @@
/*
- * @(#) $Id: rotate.c 18945 2016-09-11 10:39:11Z yeti-dn $
- * Copyright (C) 2003-2016 David Necas (Yeti), Petr Klapetek.
+ * @(#) $Id: rotate.c 19948 2017-06-22 14:05:41Z yeti-dn $
+ * Copyright (C) 2003-2017 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
* This program is free software; you can redistribute it and/or modify
@@ -95,12 +95,12 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Rotates data by arbitrary angle."),
"Yeti <yeti at gwyddion.net>",
- "2.0",
+ "2.2",
"David Nečas (Yeti) & Petr Klapetek",
"2003",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, rotate)
static gboolean
module_register(void)
@@ -252,7 +252,7 @@ rotate_dialog(RotateArgs *args,
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), hbox,
FALSE, FALSE, 4);
- table = gtk_table_new(8, 4, FALSE);
+ table = gtk_table_new(8, 3, FALSE);
gtk_table_set_row_spacings(GTK_TABLE(table), 2);
gtk_table_set_col_spacings(GTK_TABLE(table), 6);
gtk_container_set_border_width(GTK_CONTAINER(table), 4);
@@ -261,8 +261,8 @@ rotate_dialog(RotateArgs *args,
controls.angle = gtk_adjustment_new(args->angle*180.0/G_PI,
-360, 360, 0.01, 5, 0);
- gwy_table_attach_hscale(table, row, _("Rotate by _angle:"), _("deg"),
- controls.angle, 0);
+ gwy_table_attach_adjbar(table, row, _("Rotate by _angle:"), _("deg"),
+ controls.angle, GWY_HSCALE_LINEAR);
g_signal_connect(controls.angle, "value-changed",
G_CALLBACK(angle_changed), &controls);
row++;
@@ -271,7 +271,7 @@ rotate_dialog(RotateArgs *args,
= gwy_enum_combo_box_new(gwy_interpolation_type_get_enum(), -1,
G_CALLBACK(interp_changed), &controls,
args->interp, TRUE);
- gwy_table_attach_hscale(table, row, _("_Interpolation type:"), NULL,
+ gwy_table_attach_adjbar(table, row, _("_Interpolation type:"), NULL,
GTK_OBJECT(controls.interp),
GWY_HSCALE_WIDGET_NO_EXPAND);
row++;
@@ -281,7 +281,7 @@ rotate_dialog(RotateArgs *args,
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.show_grid),
args->show_grid);
gtk_table_attach(GTK_TABLE(table), controls.show_grid,
- 0, 4, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect(controls.show_grid, "toggled",
G_CALLBACK(show_grid_changed), &controls);
row++;
@@ -291,7 +291,7 @@ rotate_dialog(RotateArgs *args,
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.create_mask),
args->create_mask);
gtk_table_attach(GTK_TABLE(table), controls.create_mask,
- 0, 4, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect(controls.create_mask, "toggled",
G_CALLBACK(create_mask_changed), &controls);
row++;
@@ -300,7 +300,7 @@ rotate_dialog(RotateArgs *args,
label = gtk_label_new(_("Result size:"));
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
gtk_table_attach(GTK_TABLE(table), label,
- 0, 4, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
controls.resize
@@ -314,13 +314,13 @@ rotate_dialog(RotateArgs *args,
GWY_ROTATE_RESIZE_CUT,
NULL);
row = gwy_radio_buttons_attach_to_table(controls.resize,
- GTK_TABLE(table), 4, row);
+ GTK_TABLE(table), 2, row);
controls.data = create_preview_data(data);
controls.data_view = create_preview(controls.data, 0, PREVIEW_SIZE, FALSE);
g_object_unref(controls.data);
controls.selection = create_vector_layer(GWY_DATA_VIEW(controls.data_view),
- 0, "Lattice", TRUE);
+ 0, "Lattice", FALSE);
gwy_selection_set_max_objects(controls.selection, 1);
gtk_box_pack_start(GTK_BOX(hbox), controls.data_view, FALSE, FALSE, 8);
diff --git a/modules/process/scale.c b/modules/process/scale.c
index da4062d..e526552 100644
--- a/modules/process/scale.c
+++ b/modules/process/scale.c
@@ -1,6 +1,6 @@
/*
- * @(#) $Id: scale.c 18537 2016-03-28 18:11:19Z yeti-dn $
- * Copyright (C) 2003 David Necas (Yeti), Petr Klapetek.
+ * @(#) $Id: scale.c 19948 2017-06-22 14:05:41Z yeti-dn $
+ * Copyright (C) 2003-2017 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
* This program is free software; you can redistribute it and/or modify
@@ -56,25 +56,25 @@ typedef struct {
gboolean in_update;
} ScaleControls;
-static gboolean module_register (void);
-static void scale (GwyContainer *data,
- GwyRunType run);
-static gboolean scale_dialog (ScaleArgs *args);
-static void proportional_changed_cb (GtkToggleButton *check_button,
- ScaleArgs *args);
-static void scale_changed_cb (GtkAdjustment *adj,
- ScaleArgs *args);
-static void width_changed_cb (GtkAdjustment *adj,
- ScaleArgs *args);
-static void height_changed_cb (GtkAdjustment *adj,
- ScaleArgs *args);
-static void scale_dialog_update (ScaleControls *controls,
- ScaleArgs *args);
-static void scale_sanitize_args (ScaleArgs *args);
-static void scale_load_args (GwyContainer *container,
- ScaleArgs *args);
-static void scale_save_args (GwyContainer *container,
- ScaleArgs *args);
+static gboolean module_register (void);
+static void scale (GwyContainer *data,
+ GwyRunType run);
+static gboolean scale_dialog (ScaleArgs *args);
+static void proportional_changed(GtkToggleButton *check_button,
+ ScaleArgs *args);
+static void scale_changed (GtkAdjustment *adj,
+ ScaleArgs *args);
+static void width_changed (GtkAdjustment *adj,
+ ScaleArgs *args);
+static void height_changed (GtkAdjustment *adj,
+ ScaleArgs *args);
+static void scale_dialog_update (ScaleControls *controls,
+ ScaleArgs *args);
+static void scale_sanitize_args (ScaleArgs *args);
+static void scale_load_args (GwyContainer *container,
+ ScaleArgs *args);
+static void scale_save_args (GwyContainer *container,
+ ScaleArgs *args);
static const ScaleArgs scale_defaults = {
1.0,
@@ -92,12 +92,12 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Scales data by arbitrary factor."),
"Yeti <yeti at gwyddion.net>",
- "1.7",
+ "1.8",
"David Nečas (Yeti) & Petr Klapetek & Dirk Kähler",
"2003",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, scale)
static gboolean
module_register(void)
@@ -190,7 +190,7 @@ scale_dialog(ScaleArgs *args)
GtkWidget *dialog, *table, *spin;
ScaleControls controls;
gdouble adjmin, step = 1e-4;
- gint response;
+ gint response, row;
dialog = gtk_dialog_new_with_buttons(gwy_sgettext("verb|Scale"), NULL, 0,
_("_Reset"), RESPONSE_RESET,
@@ -200,12 +200,13 @@ scale_dialog(ScaleArgs *args)
gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK);
gwy_help_add_to_proc_dialog(GTK_DIALOG(dialog), GWY_HELP_DEFAULT);
- table = gtk_table_new(4, 5, FALSE);
+ table = gtk_table_new(4, 3, FALSE);
gtk_table_set_row_spacings(GTK_TABLE(table), 2);
gtk_table_set_col_spacings(GTK_TABLE(table), 6);
gtk_container_set_border_width(GTK_CONTAINER(table), 4);
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), table,
FALSE, FALSE, 4);
+ row = 0;
adjmin = GWY_ROUND(2.0/MIN(args->org_xres, args->org_yres)/step)*step;
controls.ratio = gtk_adjustment_new(args->ratio,
@@ -213,50 +214,55 @@ scale_dialog(ScaleArgs *args)
16384.0/MAX(args->org_xres,
args->org_yres),
step, 0.1, 0);
- spin = gwy_table_attach_hscale(table, 0, _("Scale by _ratio:"), NULL,
+ spin = gwy_table_attach_adjbar(table, row, _("Scale by _ratio:"), NULL,
controls.ratio, GWY_HSCALE_LOG);
gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 4);
g_object_set_data(G_OBJECT(controls.ratio), "controls", &controls);
g_signal_connect(controls.ratio, "value-changed",
- G_CALLBACK(scale_changed_cb), args);
+ G_CALLBACK(scale_changed), args);
controls.proportional
= gtk_check_button_new_with_mnemonic(_("_proportional"));
- gtk_table_attach_defaults(GTK_TABLE(table), controls.proportional,
- 3, 4, 0, 1);
+ gtk_table_attach(GTK_TABLE(table), controls.proportional, 2, 3, row, row+1,
+ GTK_FILL, 0, 0, 0);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.proportional),
args->proportional);
g_object_set_data(G_OBJECT(controls.proportional), "controls", &controls);
g_signal_connect(controls.proportional, "toggled",
- G_CALLBACK(proportional_changed_cb), args);
+ G_CALLBACK(proportional_changed), args);
+ row++;
controls.xres = gtk_adjustment_new(args->ratio*args->xres,
- 2, 16384, 1, 10, 0);
- spin = gwy_table_attach_hscale(table, 1, _("New _width:"), "px",
+ row, 16384, 1, 10, 0);
+ spin = gwy_table_attach_adjbar(table, 1, _("New _width:"), _("px"),
controls.xres, GWY_HSCALE_LOG);
g_object_set_data(G_OBJECT(controls.xres), "controls", &controls);
g_signal_connect(controls.xres, "value-changed",
- G_CALLBACK(width_changed_cb), args);
+ G_CALLBACK(width_changed), args);
+ row++;
controls.yres = gtk_adjustment_new(args->ratio*args->yres,
2, 16384, 1, 10, 0);
- spin = gwy_table_attach_hscale(table, 2, _("New _height:"), "px",
+ spin = gwy_table_attach_adjbar(table, row, _("New _height:"), _("px"),
controls.yres, GWY_HSCALE_LOG);
g_object_set_data(G_OBJECT(controls.yres), "controls", &controls);
g_signal_connect(controls.yres, "value-changed",
- G_CALLBACK(height_changed_cb), args);
+ G_CALLBACK(height_changed), args);
+ row++;
controls.interp
= gwy_enum_combo_box_new(gwy_interpolation_type_get_enum(), -1,
G_CALLBACK(gwy_enum_combo_box_update_int),
&args->interp, args->interp, TRUE);
- gwy_table_attach_hscale(table, 3, _("_Interpolation type:"), NULL,
- GTK_OBJECT(controls.interp), GWY_HSCALE_WIDGET);
+ gwy_table_attach_adjbar(table, row, _("_Interpolation type:"), NULL,
+ GTK_OBJECT(controls.interp),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
+ row++;
controls.in_update = FALSE;
scale_dialog_update(&controls, args);
-
gtk_widget_show_all(dialog);
+
do {
response = gtk_dialog_run(GTK_DIALOG(dialog));
switch (response) {
@@ -295,8 +301,7 @@ scale_dialog(ScaleArgs *args)
}
static void
-proportional_changed_cb(GtkToggleButton *check_button,
- ScaleArgs *args)
+proportional_changed(GtkToggleButton *check_button, ScaleArgs *args)
{
ScaleControls *controls;
@@ -315,8 +320,7 @@ proportional_changed_cb(GtkToggleButton *check_button,
}
static void
-scale_changed_cb(GtkAdjustment *adj,
- ScaleArgs *args)
+scale_changed(GtkAdjustment *adj, ScaleArgs *args)
{
ScaleControls *controls;
@@ -334,8 +338,7 @@ scale_changed_cb(GtkAdjustment *adj,
}
static void
-width_changed_cb(GtkAdjustment *adj,
- ScaleArgs *args)
+width_changed(GtkAdjustment *adj, ScaleArgs *args)
{
ScaleControls *controls;
@@ -355,8 +358,7 @@ width_changed_cb(GtkAdjustment *adj,
}
static void
-height_changed_cb(GtkAdjustment *adj,
- ScaleArgs *args)
+height_changed(GtkAdjustment *adj, ScaleArgs *args)
{
ScaleControls *controls;
diff --git a/modules/process/scars.c b/modules/process/scars.c
index f10d126..84a252f 100644
--- a/modules/process/scars.c
+++ b/modules/process/scars.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: scars.c 18966 2016-09-18 10:56:19Z yeti-dn $
+ * @(#) $Id: scars.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2003-2016 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -24,6 +24,7 @@
#include <libgwyddion/gwymacros.h>
#include <libgwyddion/gwymath.h>
#include <libprocess/arithmetic.h>
+#include <libprocess/grains.h>
#include <libprocess/correct.h>
#include <libgwydgets/gwystock.h>
#include <libgwydgets/gwyradiobuttons.h>
@@ -51,6 +52,8 @@ typedef struct {
gint min_len;
gint max_width;
gboolean update;
+ gboolean combine;
+ GwyMergeType combine_type;
} ScarsArgs;
typedef struct {
@@ -64,6 +67,8 @@ typedef struct {
GtkObject *max_width;
GtkWidget *color_button;
GtkWidget *update;
+ GtkWidget *combine;
+ GSList *combine_type;
GwyContainer *mydata;
gboolean computed;
gboolean in_init;
@@ -77,10 +82,12 @@ static void scars_mark (GwyContainer *data,
static void run_noninteractive (ScarsArgs *args,
GwyContainer *data,
GwyDataField *dfield,
+ GwyDataField *existing_mask,
GQuark mquark);
static void scars_mark_dialog (ScarsArgs *args,
GwyContainer *data,
GwyDataField *dfield,
+ GwyDataField *existing_mask,
gint id,
GQuark mquark);
static void scars_mark_dialog_update_controls (ScarsControls *controls,
@@ -105,6 +112,8 @@ static const ScarsArgs scars_defaults = {
16,
4,
TRUE,
+ FALSE,
+ GWY_MERGE_UNION,
};
static GwyModuleInfo module_info = {
@@ -112,12 +121,12 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Marks and/or removes scars (horizontal linear artifacts)."),
"Yeti <yeti at gwyddion.net>",
- "1.13",
+ "1.15",
"David Nečas (Yeti) & Petr Klapetek",
"2004",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, scars)
static gboolean
module_register(void)
@@ -125,7 +134,7 @@ module_register(void)
gwy_process_func_register("scars_mark",
(GwyProcessFunc)&scars_mark,
N_("/_Correct Data/M_ark Scars..."),
- GWY_STOCK_SCARS,
+ GWY_STOCK_MARK_SCARS,
SCARS_MARK_RUN_MODES,
GWY_MENU_FLAG_DATA,
N_("Mark horizontal scars (strokes)"));
@@ -231,7 +240,7 @@ static void
scars_mark(GwyContainer *data, GwyRunType run)
{
ScarsArgs args;
- GwyDataField *dfield;
+ GwyDataField *dfield, *mask;
GQuark mquark;
gint id;
@@ -239,24 +248,26 @@ scars_mark(GwyContainer *data, GwyRunType run)
scars_mark_load_args(gwy_app_settings_get(), &args);
gwy_app_data_browser_get_current(GWY_APP_DATA_FIELD, &dfield,
GWY_APP_MASK_FIELD_KEY, &mquark,
+ GWY_APP_MASK_FIELD, &mask,
GWY_APP_DATA_FIELD_ID, &id,
0);
g_return_if_fail(dfield && mquark);
if (run == GWY_RUN_IMMEDIATE) {
- run_noninteractive(&args, data, dfield, mquark);
+ run_noninteractive(&args, data, dfield, mask, mquark);
gwy_app_channel_log_add(data, id, id, "proc::scars_remove",
"settings-name", "scars",
NULL);
}
else
- scars_mark_dialog(&args, data, dfield, id, mquark);
+ scars_mark_dialog(&args, data, dfield, mask, id, mquark);
}
static void
run_noninteractive(ScarsArgs *args,
GwyContainer *data,
GwyDataField *dfield,
+ GwyDataField *existing_mask,
GQuark mquark)
{
GwyDataField *mfield;
@@ -264,6 +275,12 @@ run_noninteractive(ScarsArgs *args,
gwy_app_undo_qcheckpointv(data, 1, &mquark);
mfield = create_mask_field(dfield);
mark_scars(dfield, mfield, args);
+ if (existing_mask && args->combine) {
+ if (args->combine_type == GWY_MERGE_UNION)
+ gwy_data_field_grains_add(mfield, existing_mask);
+ else if (args->combine_type == GWY_MERGE_INTERSECTION)
+ gwy_data_field_grains_intersect(mfield, existing_mask);
+ }
gwy_container_set_object(data, mquark, mfield);
g_object_unref(mfield);
}
@@ -272,6 +289,7 @@ static void
scars_mark_dialog(ScarsArgs *args,
GwyContainer *data,
GwyDataField *dfield,
+ GwyDataField *existing_mask,
gint id,
GQuark mquark)
{
@@ -288,6 +306,7 @@ scars_mark_dialog(ScarsArgs *args,
gboolean temp;
gint row;
+ gwy_clear(&controls, 1);
controls.in_init = TRUE;
controls.args = args;
dialog = gtk_dialog_new_with_buttons(_("Mark Scars"), NULL, 0, NULL);
@@ -310,6 +329,9 @@ scars_mark_dialog(ScarsArgs *args,
controls.mydata = gwy_container_new();
gwy_container_set_object_by_name(controls.mydata, "/0/data", dfield);
+ if (existing_mask)
+ gwy_container_set_object_by_name(controls.mydata, "/1/mask",
+ existing_mask);
gwy_app_sync_data_items(data, controls.mydata, id, 0, FALSE,
GWY_DATA_ITEM_PALETTE,
GWY_DATA_ITEM_MASK_COLOR,
@@ -319,7 +341,7 @@ scars_mark_dialog(ScarsArgs *args,
controls.view = create_preview(controls.mydata, 0, PREVIEW_SIZE, TRUE);
gtk_box_pack_start(GTK_BOX(hbox), controls.view, FALSE, FALSE, 4);
- table = gtk_table_new(11, 4, FALSE);
+ table = gtk_table_new(11 + 1*(!!existing_mask), 3, FALSE);
gtk_table_set_row_spacings(GTK_TABLE(table), 2);
gtk_table_set_col_spacings(GTK_TABLE(table), 6);
gtk_container_set_border_width(GTK_CONTAINER(table), 4);
@@ -328,30 +350,32 @@ scars_mark_dialog(ScarsArgs *args,
controls.max_width = gtk_adjustment_new(args->max_width,
1.0, 16.0, 1, 3, 0);
- gwy_table_attach_hscale(table, row++, _("Maximum _width:"), "px",
- controls.max_width, 0);
+ gwy_table_attach_adjbar(table, row++, _("Maximum _width:"), _("px"),
+ controls.max_width,
+ GWY_HSCALE_LINEAR | GWY_HSCALE_SNAP);
g_signal_connect_swapped(controls.max_width, "value-changed",
G_CALLBACK(scars_invalidate), &controls);
controls.min_len = gtk_adjustment_new(args->min_len,
1.0, MAX_LENGTH, 1, 10, 0);
- gwy_table_attach_hscale(table, row++, _("Minimum _length:"), "px",
- controls.min_len, GWY_HSCALE_SQRT);
+ gwy_table_attach_adjbar(table, row++, _("Minimum _length:"), _("px"),
+ controls.min_len,
+ GWY_HSCALE_DEFAULT | GWY_HSCALE_SNAP);
g_signal_connect_swapped(controls.min_len, "value-changed",
G_CALLBACK(scars_invalidate), &controls);
controls.threshold_high = gtk_adjustment_new(args->threshold_high,
0.0, 2.0, 0.01, 0.1, 0);
- gwy_table_attach_hscale(table, row++, _("_Hard threshold:"),
- _("RMS"), controls.threshold_high, 0);
+ gwy_table_attach_adjbar(table, row++, _("_Hard threshold:"), _("RMS"),
+ controls.threshold_high, GWY_HSCALE_LINEAR);
g_signal_connect(controls.threshold_high, "value-changed",
G_CALLBACK(scars_mark_dialog_update_thresholds),
&controls);
controls.threshold_low = gtk_adjustment_new(args->threshold_low,
0.0, 2.0, 0.01, 0.1, 0);
- gwy_table_attach_hscale(table, row, _("_Soft threshold:"), _("RMS"),
- controls.threshold_low, 0);
+ gwy_table_attach_adjbar(table, row, _("_Soft threshold:"), _("RMS"),
+ controls.threshold_low, GWY_HSCALE_LINEAR);
g_signal_connect(controls.threshold_low, "value-changed",
G_CALLBACK(scars_mark_dialog_update_thresholds),
&controls);
@@ -361,7 +385,7 @@ scars_mark_dialog(ScarsArgs *args,
label = gtk_label_new(_("Scars type:"));
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
gtk_table_attach(GTK_TABLE(table), label,
- 0, 4, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
group = gwy_radio_buttons_create(types, G_N_ELEMENTS(types),
@@ -369,7 +393,7 @@ scars_mark_dialog(ScarsArgs *args,
controls.type = group;
while (group) {
gtk_table_attach(GTK_TABLE(table), GTK_WIDGET(group->data),
- 0, 4, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect_swapped(group->data, "toggled",
G_CALLBACK(scars_invalidate), &controls);
group = g_slist_next(group);
@@ -378,16 +402,27 @@ scars_mark_dialog(ScarsArgs *args,
controls.color_button = create_mask_color_button(controls.mydata, dialog,
0);
- gwy_table_attach_hscale(table, row, _("_Mask color:"), NULL,
+ gwy_table_attach_adjbar(table, row, _("_Mask color:"), NULL,
GTK_OBJECT(controls.color_button),
GWY_HSCALE_WIDGET_NO_EXPAND);
row++;
+ if (existing_mask) {
+ create_mask_merge_buttons(table, row, NULL,
+ args->combine,
+ G_CALLBACK(scars_invalidate),
+ args->combine_type,
+ G_CALLBACK(scars_invalidate),
+ &controls,
+ &controls.combine, &controls.combine_type);
+ row++;
+ }
+
controls.update = gtk_check_button_new_with_mnemonic(_("I_nstant updates"));
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.update),
args->update);
gtk_table_attach(GTK_TABLE(table), controls.update,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect_swapped(controls.update, "toggled",
G_CALLBACK(update_change_cb), &controls);
row++;
@@ -455,7 +490,7 @@ scars_mark_dialog(ScarsArgs *args,
}
else {
g_object_unref(controls.mydata);
- run_noninteractive(args, data, dfield, mquark);
+ run_noninteractive(args, data, dfield, existing_mask, mquark);
}
gwy_app_channel_log_add(data, id, id, "proc::scars_remove",
@@ -508,6 +543,12 @@ scars_mark_dialog_update_controls(ScarsControls *controls,
gtk_adjustment_set_value(GTK_ADJUSTMENT(controls->max_width),
args->max_width);
gwy_radio_buttons_set_current(controls->type, args->type);
+ if (controls->combine) {
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls->combine),
+ args->combine);
+ gwy_radio_buttons_set_current(controls->combine_type,
+ args->combine_type);
+ }
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls->update),
args->update);
}
@@ -523,6 +564,12 @@ scars_mark_dialog_update_values(ScarsControls *controls,
args->min_len = gwy_adjustment_get_int(controls->min_len);
args->max_width = gwy_adjustment_get_int(controls->max_width);
args->type = gwy_radio_buttons_get_current(controls->type);
+ if (controls->combine) {
+ args->combine
+ = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(controls->combine));
+ args->combine_type
+ = gwy_radio_buttons_get_current(controls->combine_type);
+ }
args->update
= gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(controls->update));
}
@@ -557,7 +604,7 @@ static void
preview(ScarsControls *controls,
ScarsArgs *args)
{
- GwyDataField *mask, *dfield;
+ GwyDataField *mask, *dfield, *existing_mask = NULL;
dfield = GWY_DATA_FIELD(gwy_container_get_object_by_name(controls->mydata,
"/0/data"));
@@ -570,6 +617,15 @@ preview(ScarsControls *controls,
}
gwy_data_field_copy(dfield, mask, FALSE);
mark_scars(dfield, mask, args);
+
+ gwy_container_gis_object_by_name(controls->mydata, "/1/mask",
+ &existing_mask);
+ if (existing_mask && args->combine) {
+ if (args->combine_type == GWY_MERGE_UNION)
+ gwy_data_field_grains_add(mask, existing_mask);
+ else if (args->combine_type == GWY_MERGE_INTERSECTION)
+ gwy_data_field_grains_intersect(mask, existing_mask);
+ }
gwy_data_field_data_changed(mask);
controls->computed = TRUE;
diff --git a/modules/process/semsim.c b/modules/process/semsim.c
index 276274b..7ad25c2 100644
--- a/modules/process/semsim.c
+++ b/modules/process/semsim.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: semsim.c 18537 2016-03-28 18:11:19Z yeti-dn $
+ * @(#) $Id: semsim.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2014 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -117,12 +117,12 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Simple SEM image simulation from topography."),
"Yeti <yeti at gwyddion.net>",
- "1.0",
+ "1.1",
"David Nečas (Yeti)",
"2014",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, semsim)
static gboolean
module_register(void)
@@ -215,7 +215,7 @@ semsim_dialog(SEMsimArgs *args, GwyDataField *dfield)
gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK);
gwy_help_add_to_proc_dialog(GTK_DIALOG(dialog), GWY_HELP_DEFAULT);
- table = gtk_table_new(6, 4, FALSE);
+ table = gtk_table_new(6, 3, FALSE);
gtk_table_set_row_spacings(GTK_TABLE(table), 2);
gtk_table_set_col_spacings(GTK_TABLE(table), 6);
gtk_container_set_border_width(GTK_CONTAINER(table), 4);
@@ -224,8 +224,8 @@ semsim_dialog(SEMsimArgs *args, GwyDataField *dfield)
row = 0;
controls.sigma = gtk_adjustment_new(args->sigma, 0.5, MAX_SIZE, 0.1, 10, 0);
- gwy_table_attach_hscale(table, row++, _("_Integration radius:"), "px",
- controls.sigma, GWY_HSCALE_SQRT);
+ gwy_table_attach_adjbar(table, row++, _("_Integration radius:"), _("px"),
+ controls.sigma, GWY_HSCALE_DEFAULT);
g_signal_connect_swapped(controls.sigma, "value-changed",
G_CALLBACK(sigma_changed), &controls);
row++;
@@ -233,7 +233,7 @@ semsim_dialog(SEMsimArgs *args, GwyDataField *dfield)
controls.value_sigma = gtk_label_new(NULL);
gtk_misc_set_alignment(GTK_MISC(controls.value_sigma), 1.0, 0.5);
gtk_table_attach(GTK_TABLE(table), controls.value_sigma,
- 2, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 1, 2, row, row+1, GTK_FILL, 0, 0, 0);
controls.format_sigma
= gwy_data_field_get_value_format_xy(dfield,
@@ -243,13 +243,13 @@ semsim_dialog(SEMsimArgs *args, GwyDataField *dfield)
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
gtk_label_set_markup(GTK_LABEL(label), controls.format_sigma->units);
gtk_table_attach(GTK_TABLE(table), label,
- 3, 4, row, row+1, GTK_FILL, 0, 0, 0);
+ 2, 3, row, row+1, GTK_FILL, 0, 0, 0);
row++;
label = gtk_label_new(_("Method:"));
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
gtk_table_attach(GTK_TABLE(table), label,
- 0, 1, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
controls.method
@@ -261,11 +261,11 @@ semsim_dialog(SEMsimArgs *args, GwyDataField *dfield)
SEMSIM_METHOD_MONTECARLO,
NULL);
row = gwy_radio_buttons_attach_to_table(controls.method, GTK_TABLE(table),
- 3, row);
+ 2, row);
controls.quality = gtk_adjustment_new(args->quality, 1.0, 7.0, 0.1, 1.0, 0);
- gwy_table_attach_hscale(table, row++, _("_Quality:"), NULL,
- controls.quality, GWY_HSCALE_SQRT);
+ gwy_table_attach_adjbar(table, row++, _("_Quality:"), NULL,
+ controls.quality, GWY_HSCALE_DEFAULT);
g_signal_connect_swapped(controls.quality, "value-changed",
G_CALLBACK(quality_changed), &controls);
row++;
diff --git a/modules/process/shade.c b/modules/process/shade.c
index 1582c94..1d18c68 100644
--- a/modules/process/shade.c
+++ b/modules/process/shade.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: shade.c 18537 2016-03-28 18:11:19Z yeti-dn $
+ * @(#) $Id: shade.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2003 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -53,31 +53,33 @@ typedef struct {
gboolean in_update;
} ShadeControls;
-static gboolean module_register (void);
-static void shade (GwyContainer *data,
- GwyRunType run);
-static gboolean shade_dialog (ShadeArgs *args,
- GwyContainer *data,
- GwyDataField *dfield,
- gint id);
-static void shade_changed_cb (GtkWidget *shader,
- ShadeControls *controls);
-static void theta_changed_cb (GtkObject *adj,
- ShadeControls *controls);
-static void phi_changed_cb (GtkObject *adj,
- ShadeControls *controls);
-static void mix_changed_cb (ShadeControls *controls);
-static void shade_dialog_update (ShadeControls *controls,
- ShadeArgs *args);
-static void shade_mix_with_plane (GwyDataField *shaded,
- GwyDataField *plane,
- gdouble mixpercent);
-static void load_args (GwyContainer *container,
- ShadeArgs *args);
-static void save_args (GwyContainer *container,
- ShadeArgs *args);
-static void sanitize_args (ShadeArgs *args);
-
+static gboolean module_register (void);
+static void shade (GwyContainer *data,
+ GwyRunType run);
+static gboolean shade_dialog (ShadeArgs *args,
+ GwyContainer *data,
+ GwyDataField *dfield,
+ gint id);
+static void shade_changed (GtkWidget *shader,
+ ShadeControls *controls);
+static void theta_changed (GtkAdjustment *adj,
+ ShadeControls *controls);
+static void phi_changed (GtkAdjustment *adj,
+ ShadeControls *controls);
+static void mix_changed (GtkAdjustment *adj,
+ ShadeControls *controls);
+static void do_mix_changed (GtkToggleButton *toggle,
+ ShadeControls *controls);
+static void shade_dialog_update (ShadeControls *controls,
+ ShadeArgs *args);
+static void shade_mix_with_plane(GwyDataField *shaded,
+ GwyDataField *plane,
+ gdouble mixpercent);
+static void load_args (GwyContainer *container,
+ ShadeArgs *args);
+static void save_args (GwyContainer *container,
+ ShadeArgs *args);
+static void sanitize_args (ShadeArgs *args);
static const ShadeArgs shade_defaults = {
0,
@@ -91,12 +93,12 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Creates a shaded presentation of data."),
"Petr Klapetek <klapetek at gwyddion.net>",
- "2.5",
+ "2.6",
"David Nečas (Yeti) & Petr Klapetek",
"2003",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, shade)
static gboolean
module_register(void)
@@ -142,7 +144,7 @@ shade(GwyContainer *data, GwyRunType run)
gwy_app_undo_qcheckpointv(data, 1, &squark);
if (!shadefield) {
shadefield = gwy_data_field_new_alike(dfield, FALSE);
- siunit = gwy_si_unit_new("");
+ siunit = gwy_si_unit_new(NULL);
gwy_data_field_set_si_unit_z(shadefield, siunit);
g_object_unref(siunit);
gwy_container_set_object(data, squark, shadefield);
@@ -195,7 +197,7 @@ shade_dialog(ShadeArgs *args,
GwyDataField *dfield,
gint id)
{
- GtkWidget *dialog, *hbox, *table;
+ GtkWidget *dialog, *hbox, *table, *align;
const guchar *pal;
ShadeControls controls;
gint response, row;
@@ -212,63 +214,61 @@ shade_dialog(ShadeArgs *args,
gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK);
gwy_help_add_to_proc_dialog(GTK_DIALOG(dialog), GWY_HELP_DEFAULT);
- hbox = gtk_hbox_new(FALSE, 8);
+ align = gtk_alignment_new(0.5, 0.5, 1.0, 1.0);
+ gtk_alignment_set_padding(GTK_ALIGNMENT(align), 4, 4, 4, 4);
+ gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox),
+ align, FALSE, FALSE, 0);
+
+ controls.data_view = create_preview(controls.data, 0, PREVIEW_SIZE, FALSE);
+ gtk_container_add(GTK_CONTAINER(align), controls.data_view);
+ g_object_unref(controls.data);
+
+ hbox = gtk_hbox_new(FALSE, 12);
gtk_container_set_border_width(GTK_CONTAINER(hbox), 4);
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), hbox, TRUE, TRUE, 4);
- table = gtk_table_new(3, 3, FALSE);
- gtk_box_pack_start(GTK_BOX(hbox), table, TRUE, TRUE, 0);
- row = 0;
-
pal = NULL;
gwy_container_gis_string_by_name(controls.data, "/0/base/palette", &pal);
controls.shader = gwy_shader_new(pal);
gwy_shader_set_angle(GWY_SHADER(controls.shader), args->theta, args->phi);
- gtk_widget_set_size_request(controls.shader, 72, 72);
+ gtk_widget_set_size_request(controls.shader, 80, 80);
g_signal_connect(controls.shader, "angle_changed",
- G_CALLBACK(shade_changed_cb), &controls);
- gtk_table_attach(GTK_TABLE(table), controls.shader, 0, 3, row, row+1,
- GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 2, 2);
- gtk_table_set_row_spacing(GTK_TABLE(table), row, 8);
- row++;
+ G_CALLBACK(shade_changed), &controls);
+ gtk_box_pack_start(GTK_BOX(hbox), controls.shader, FALSE, TRUE, 0);
+
+ table = gtk_table_new(3, 3, FALSE);
+ gtk_box_pack_start(GTK_BOX(hbox), table, TRUE, TRUE, 0);
+ row = 0;
controls.theta = gtk_adjustment_new(args->theta*180.0/G_PI,
0.0, 90.0, 1.0, 15.0, 0.0);
- gwy_table_attach_hscale(table, row, _("θ:"), _("deg"),
- controls.theta, GWY_HSCALE_DEFAULT);
+ gwy_table_attach_adjbar(table, row, _("θ:"), _("deg"),
+ controls.theta, GWY_HSCALE_LINEAR);
g_signal_connect(controls.theta, "value-changed",
- G_CALLBACK(theta_changed_cb), &controls);
+ G_CALLBACK(theta_changed), &controls);
row++;
controls.phi = gtk_adjustment_new(args->phi*180.0/G_PI,
0.0, 360.0, 1.0, 30.0, 0.0);
- gwy_table_attach_hscale(table, row, _("φ:"), _("deg"),
- controls.phi, GWY_HSCALE_DEFAULT);
+ gwy_table_attach_adjbar(table, row, _("φ:"), _("deg"),
+ controls.phi, GWY_HSCALE_LINEAR);
g_signal_connect(controls.phi, "value-changed",
- G_CALLBACK(phi_changed_cb), &controls);
+ G_CALLBACK(phi_changed), &controls);
row++;
controls.mix = gtk_adjustment_new(args->mix, 0.0, 100.0, 1, 5, 0);
+ gwy_table_attach_adjbar(table, row, _("_Mix:"), "%",
+ controls.mix, GWY_HSCALE_LINEAR | GWY_HSCALE_CHECK);
+ g_signal_connect(controls.mix, "value-changed",
+ G_CALLBACK(mix_changed), &controls);
- gwy_table_attach_hscale(table, row, _("_Mix:"), "%",
- controls.mix, GWY_HSCALE_CHECK);
-
- controls.do_mix = g_object_get_data(G_OBJECT(controls.mix), "check");
-
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.do_mix),
- !args->do_mix);
+ controls.do_mix = gwy_table_hscale_get_check(controls.mix);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.do_mix),
args->do_mix);
- g_signal_connect_swapped(controls.mix, "value-changed",
- G_CALLBACK(mix_changed_cb), &controls);
-
- g_signal_connect_swapped(controls.do_mix, "toggled",
- G_CALLBACK(mix_changed_cb), &controls);
+ g_signal_connect(controls.do_mix, "toggled",
+ G_CALLBACK(do_mix_changed), &controls);
row++;
- controls.data_view = create_preview(controls.data, 0, PREVIEW_SIZE, FALSE);
- g_object_unref(controls.data);
- gtk_box_pack_start(GTK_BOX(hbox), controls.data_view, FALSE, FALSE, 8);
controls.in_update = FALSE;
shade_dialog_update(&controls, args);
@@ -291,8 +291,6 @@ shade_dialog(ShadeArgs *args,
*args = shade_defaults;
gtk_adjustment_set_value(GTK_ADJUSTMENT(controls.mix), args->mix);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.do_mix),
- !args->do_mix);
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.do_mix),
args->do_mix);
gwy_shader_set_angle(GWY_SHADER(controls.shader),
args->theta, args->phi);
@@ -310,16 +308,14 @@ shade_dialog(ShadeArgs *args,
}
static void
-shade_changed_cb(GtkWidget *shader,
- ShadeControls *controls)
+shade_changed(GtkWidget *shader, ShadeControls *controls)
{
- ShadeArgs *args;
+ ShadeArgs *args = controls->args;
if (controls->in_update)
return;
controls->in_update = TRUE;
- args = controls->args;
args->theta = gwy_shader_get_theta(GWY_SHADER(shader));
args->phi = gwy_shader_get_phi(GWY_SHADER(shader));
gtk_adjustment_set_value(GTK_ADJUSTMENT(controls->theta),
@@ -331,16 +327,14 @@ shade_changed_cb(GtkWidget *shader,
}
static void
-theta_changed_cb(GtkObject *adj,
- ShadeControls *controls)
+theta_changed(GtkAdjustment *adj, ShadeControls *controls)
{
- ShadeArgs *args;
+ ShadeArgs *args = controls->args;
if (controls->in_update)
return;
controls->in_update = TRUE;
- args = controls->args;
args->theta = gtk_adjustment_get_value(GTK_ADJUSTMENT(adj))/180.0*G_PI;
gwy_shader_set_theta(GWY_SHADER(controls->shader), args->theta);
shade_dialog_update(controls, args);
@@ -348,43 +342,50 @@ theta_changed_cb(GtkObject *adj,
}
static void
-phi_changed_cb(GtkObject *adj,
- ShadeControls *controls)
+phi_changed(GtkAdjustment *adj, ShadeControls *controls)
{
- ShadeArgs *args;
+ ShadeArgs *args = controls->args;
if (controls->in_update)
return;
controls->in_update = TRUE;
- args = controls->args;
- args->phi = gtk_adjustment_get_value(GTK_ADJUSTMENT(adj))/180.0*G_PI;
+ args->phi = gtk_adjustment_get_value(adj)/180.0*G_PI;
gwy_shader_set_phi(GWY_SHADER(controls->shader), args->phi);
shade_dialog_update(controls, args);
controls->in_update = FALSE;
}
static void
-mix_changed_cb(ShadeControls *controls)
+mix_changed(GtkAdjustment *adj, ShadeControls *controls)
{
- ShadeArgs *args;
+ ShadeArgs *args = controls->args;
if (controls->in_update)
return;
controls->in_update = TRUE;
- args = controls->args;
- args->mix = gtk_adjustment_get_value(GTK_ADJUSTMENT(controls->mix));
- args->do_mix = gtk_toggle_button_get_active(
- GTK_TOGGLE_BUTTON(controls->do_mix));
+ args->mix = gtk_adjustment_get_value(adj);
shade_dialog_update(controls, args);
controls->in_update = FALSE;
}
+static void
+do_mix_changed(GtkToggleButton *toggle, ShadeControls *controls)
+{
+ ShadeArgs *args = controls->args;
+
+ if (controls->in_update)
+ return;
+
+ controls->in_update = TRUE;
+ args->do_mix = gtk_toggle_button_get_active(toggle);
+ shade_dialog_update(controls, args);
+ controls->in_update = FALSE;
+}
static void
-shade_dialog_update(ShadeControls *controls,
- ShadeArgs *args)
+shade_dialog_update(ShadeControls *controls, ShadeArgs *args)
{
GwyDataField *dfield, *shader;
@@ -394,9 +395,8 @@ shade_dialog_update(ShadeControls *controls,
"/0/data"));
gwy_data_field_shade(dfield, shader, args->theta, args->phi);
- if (args->do_mix) {
+ if (args->do_mix)
shade_mix_with_plane(shader, dfield, args->mix);
- }
gwy_data_field_data_changed(shader);
}
@@ -410,7 +410,7 @@ shade_mix_with_plane(GwyDataField *shaded,
gdouble plane_min, plane_max, shade_min, shade_max;
gdouble plane_range, shade_range;
- mixpercent /= 100;
+ mixpercent /= 100.0;
gwy_data_field_get_min_max(plane, &plane_min, &plane_max);
gwy_data_field_get_min_max(shaded, &shade_min, &shade_max);
@@ -424,7 +424,6 @@ shade_mix_with_plane(GwyDataField *shaded,
gwy_data_field_sum_fields(shaded, shaded, mix);
g_object_unref(mix);
-
}
static const gchar theta_key[] = "/module/shade/theta";
diff --git a/modules/process/slope_dist.c b/modules/process/slope_dist.c
index 2a8789f..f32eaef 100644
--- a/modules/process/slope_dist.c
+++ b/modules/process/slope_dist.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: slope_dist.c 18626 2016-04-22 10:15:13Z yeti-dn $
+ * @(#) $Id: slope_dist.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2004 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -72,7 +72,6 @@ typedef struct {
GtkWidget *update;
GtkObject *kernel_size;
GtkWidget *target_graph;
- GtkWidget *target_hbox;
GSList *masking;
GwyDataField *dfield;
@@ -161,12 +160,12 @@ static GwyModuleInfo module_info = {
N_("Calculates one- or two-dimensional distribution of slopes "
"or graph of their angular distribution."),
"Yeti <yeti at gwyddion.net>",
- "2.2",
+ "2.3",
"David Nečas (Yeti) & Petr Klapetek",
"2004",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, slope_dist)
static gboolean
module_register(void)
@@ -255,7 +254,7 @@ slope_dialog(SlopeArgs *args, gboolean same_units,
{ N_("_Inclination (θ) graph"), SLOPE_DIST_GRAPH_THETA, },
{ N_("Inclination (gra_dient) graph"), SLOPE_DIST_GRAPH_GRADIENT, },
};
- GtkWidget *dialog, *table, *label, *hbox, *hbox2, *vbox, *button;
+ GtkWidget *dialog, *table, *label, *hbox, *vbox, *button;
GwyDataChooser *chooser;
GwyGraphModel *gmodel;
SlopeControls controls;
@@ -308,12 +307,13 @@ slope_dialog(SlopeArgs *args, gboolean same_units,
set_graph_model_units(gmodel, dfield, args->output_type);
controls.graph = gwy_graph_new(gmodel);
gtk_widget_set_size_request(controls.graph, PREVIEW_SIZE, -1);
+ gwy_graph_enable_user_input(GWY_GRAPH(controls.graph), FALSE);
g_object_unref(gmodel);
gtk_box_pack_start(GTK_BOX(vbox), controls.graph, TRUE, TRUE, 0);
if (args->output_type == SLOPE_DIST_2D_DIST)
gtk_widget_set_no_show_all(controls.graph, TRUE);
- table = gtk_table_new(11 + (mfield ? 4 : 0), 4, FALSE);
+ table = gtk_table_new(11 + (mfield ? 4 : 0), 3, FALSE);
gtk_table_set_row_spacings(GTK_TABLE(table), 2);
gtk_table_set_col_spacings(GTK_TABLE(table), 6);
gtk_container_set_border_width(GTK_CONTAINER(table), 4);
@@ -323,7 +323,7 @@ slope_dialog(SlopeArgs *args, gboolean same_units,
label = gtk_label_new(_("Output type:"));
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
gtk_table_attach(GTK_TABLE(table), label,
- 0, 4, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
controls.output_type
@@ -332,7 +332,7 @@ slope_dialog(SlopeArgs *args, gboolean same_units,
&controls,
args->output_type);
row = gwy_radio_buttons_attach_to_table(controls.output_type,
- GTK_TABLE(table), 4, row);
+ GTK_TABLE(table), 2, row);
if (!same_units) {
GtkWidget *radio;
@@ -342,14 +342,6 @@ slope_dialog(SlopeArgs *args, gboolean same_units,
}
gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
- controls.target_hbox = hbox2 = gtk_hbox_new(FALSE, 6);
- gtk_table_attach(GTK_TABLE(table), hbox2,
- 0, 4, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
-
- label = gtk_label_new_with_mnemonic(_("Target _graph:"));
- gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_box_pack_start(GTK_BOX(hbox2), label, FALSE, FALSE, 0);
-
controls.target_graph = gwy_data_chooser_new_graphs();
chooser = GWY_DATA_CHOOSER(controls.target_graph);
gwy_data_chooser_set_none(chooser, _("New graph"));
@@ -357,8 +349,8 @@ slope_dialog(SlopeArgs *args, gboolean same_units,
gwy_data_chooser_set_filter(chooser, filter_target_graphs, &controls, NULL);
gwy_data_chooser_set_active_id(chooser, &args->target_graph);
gwy_data_chooser_get_active_id(chooser, &args->target_graph);
- gtk_label_set_mnemonic_widget(GTK_LABEL(label), controls.target_graph);
- gtk_box_pack_end(GTK_BOX(hbox2), controls.target_graph, FALSE, FALSE, 0);
+ gwy_table_attach_adjbar(table, row, _("Target _graph:"), NULL,
+ GTK_OBJECT(chooser), GWY_HSCALE_WIDGET_NO_EXPAND);
g_signal_connect_swapped(controls.target_graph, "changed",
G_CALLBACK(target_graph_changed), &controls);
row++;
@@ -366,11 +358,11 @@ slope_dialog(SlopeArgs *args, gboolean same_units,
gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
label = gwy_label_new_header(_("Options"));
gtk_table_attach(GTK_TABLE(table), label,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
controls.size = gtk_adjustment_new(args->size, 10, MAX_OUT_SIZE, 1, 10, 0);
- gwy_table_attach_hscale(table, row, _("Output _size:"), "px",
+ gwy_table_attach_adjbar(table, row, _("Output _size:"), _("px"),
controls.size, GWY_HSCALE_SQRT);
g_signal_connect_swapped(controls.size, "value-changed",
G_CALLBACK(size_changed), &controls);
@@ -381,7 +373,7 @@ slope_dialog(SlopeArgs *args, gboolean same_units,
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.logscale),
args->logscale);
gtk_table_attach(GTK_TABLE(table), controls.logscale,
- 0, 4, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect_swapped(controls.logscale, "toggled",
G_CALLBACK(logscale_changed), &controls);
row++;
@@ -391,15 +383,16 @@ slope_dialog(SlopeArgs *args, gboolean same_units,
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.fit_plane),
args->fit_plane);
gtk_table_attach(GTK_TABLE(table), controls.fit_plane,
- 0, 4, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect_swapped(controls.fit_plane, "toggled",
G_CALLBACK(fit_plane_changed), &controls);
row++;
controls.kernel_size = gtk_adjustment_new(args->kernel_size,
2, 16, 1, 4, 0);
- gwy_table_attach_hscale(table, row, _("_Plane size:"), "px",
- controls.kernel_size, 0);
+ gwy_table_attach_adjbar(table, row, _("_Plane size:"), _("px"),
+ controls.kernel_size,
+ GWY_HSCALE_LINEAR | GWY_HSCALE_SNAP);
g_signal_connect_swapped(controls.kernel_size, "value-changed",
G_CALLBACK(kernel_size_changed), &controls);
row++;
@@ -408,7 +401,7 @@ slope_dialog(SlopeArgs *args, gboolean same_units,
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.update),
args->update);
gtk_table_attach(GTK_TABLE(table), controls.update,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect_swapped(controls.update, "toggled",
G_CALLBACK(update_changed), &controls);
row++;
@@ -417,7 +410,7 @@ slope_dialog(SlopeArgs *args, gboolean same_units,
gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
label = gwy_label_new_header(_("Masking Mode"));
gtk_table_attach(GTK_TABLE(table), label,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
controls.masking
@@ -425,7 +418,7 @@ slope_dialog(SlopeArgs *args, gboolean same_units,
G_CALLBACK(masking_changed), &controls,
args->masking);
row = gwy_radio_buttons_attach_to_table(controls.masking,
- GTK_TABLE(table), 3, row);
+ GTK_TABLE(table), 2, row);
}
else
controls.masking = NULL;
@@ -531,7 +524,8 @@ output_type_changed(GtkToggleButton *button, SlopeControls *controls)
otype = gwy_radio_buttons_get_current(controls->output_type);
controls->args->output_type = otype;
gtk_widget_set_sensitive(controls->logscale, otype == SLOPE_DIST_2D_DIST);
- gtk_widget_set_sensitive(controls->target_hbox, otype != SLOPE_DIST_2D_DIST);
+ gwy_table_hscale_set_sensitive(GTK_OBJECT(controls->target_graph),
+ otype != SLOPE_DIST_2D_DIST);
if (otype == SLOPE_DIST_2D_DIST) {
gtk_widget_set_no_show_all(controls->graph, TRUE);
gtk_widget_set_no_show_all(controls->view, FALSE);
diff --git a/modules/process/sphere-revolve.c b/modules/process/sphere-revolve.c
index b5bbf45..666f38d 100644
--- a/modules/process/sphere-revolve.c
+++ b/modules/process/sphere-revolve.c
@@ -1,6 +1,6 @@
/*
- * @(#) $Id: sphere-revolve.c 19044 2016-10-08 19:10:46Z yeti-dn $
- * Copyright (C) 2004 David Necas (Yeti), Petr Klapetek.
+ * @(#) $Id: sphere-revolve.c 20013 2017-07-03 12:01:55Z yeti-dn $
+ * Copyright (C) 2004-2017 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
* This program is free software; you can redistribute it and/or modify
@@ -20,12 +20,13 @@
*/
#include "config.h"
-#include <libgwyddion/gwymacros.h>
#include <string.h>
#include <gtk/gtk.h>
+#include <libgwyddion/gwymacros.h>
#include <libgwyddion/gwymath.h>
#include <libprocess/stats.h>
#include <libprocess/arithmetic.h>
+#include <libprocess/filters.h>
#include <libgwydgets/gwydgetutils.h>
#include <libgwydgets/gwyradiobuttons.h>
#include <libgwymodule/gwymodule-process.h>
@@ -38,16 +39,16 @@ typedef enum {
SPHREV_HORIZONTAL = 1,
SPHREV_VERTICAL,
SPHREV_BOTH
-} Sphrev1DDirection;
+} SphrevDirection;
typedef struct {
- Sphrev1DDirection direction;
gdouble size;
gboolean do_extract;
+ SphrevDirection direction; /* only in 1D */
/* interface only */
GwySIValueFormat *valform;
gdouble pixelsize;
-} Sphrev1DArgs;
+} SphrevArgs;
typedef struct {
GSList *direction;
@@ -55,38 +56,51 @@ typedef struct {
GtkObject *size;
GtkWidget *do_extract;
gboolean in_update;
-} Sphrev1DControls;
-
-static gboolean module_register (void);
-static void sphrev (GwyContainer *data,
- GwyRunType run);
-static GwyDataField* sphrev_horizontal (Sphrev1DArgs *args,
- GwyDataField *dfield);
-static GwyDataField* sphrev_vertical (Sphrev1DArgs *args,
- GwyDataField *dfield);
-static GwyDataLine* sphrev_make_sphere (gdouble radius,
- gint maxres);
-static gboolean sphrev_dialog (Sphrev1DArgs *args);
-static void direction_changed_cb (GtkWidget *radio,
- Sphrev1DArgs *args);
-static void radius_changed_cb (GtkAdjustment *adj,
- Sphrev1DArgs *args);
-static void size_changed_cb (GtkAdjustment *adj,
- Sphrev1DArgs *args);
-static void do_extract_changed_cb (GtkWidget *check,
- Sphrev1DArgs *args);
-static void sphrev_dialog_update (Sphrev1DControls *controls,
- Sphrev1DArgs *args);
-static void sphrev_sanitize_args (Sphrev1DArgs *args);
-static void sphrev_load_args (GwyContainer *container,
- Sphrev1DArgs *args);
-static void sphrev_save_args (GwyContainer *container,
- Sphrev1DArgs *args);
-
-static const Sphrev1DArgs sphrev_defaults = {
- SPHREV_HORIZONTAL,
+} SphrevControls;
+
+static gboolean module_register (void);
+static void arcrev (GwyContainer *data,
+ GwyRunType run);
+static void sphrev (GwyContainer *data,
+ GwyRunType run);
+static gboolean sphrev_dialog (SphrevArgs *args,
+ gboolean is_2d);
+static void direction_changed (GtkWidget *radio,
+ SphrevArgs *args);
+static void radius_changed (GtkAdjustment *adj,
+ SphrevArgs *args);
+static void size_changed (GtkAdjustment *adj,
+ SphrevArgs *args);
+static void do_extract_changed (GtkWidget *check,
+ SphrevArgs *args);
+static void sphrev_dialog_update(SphrevControls *controls,
+ SphrevArgs *args);
+static GwyDataField* arcrev_horizontal (SphrevArgs *args,
+ GwyDataField *dfield);
+static GwyDataField* arcrev_vertical (SphrevArgs *args,
+ GwyDataField *dfield);
+static GwyDataLine* arcrev_make_arc (gdouble radius,
+ gint maxres);
+static GwyDataField* sphrev_make_sphere (gdouble radius,
+ gint maxres);
+static GwyDataField* sphrev_2d (SphrevArgs *args,
+ GwyDataField *dfield,
+ GwySetMessageFunc set_message,
+ GwySetFractionFunc set_fraction);
+static void sphrev_sanitize_args(SphrevArgs *args);
+static void arcrev_load_args (GwyContainer *container,
+ SphrevArgs *args);
+static void arcrev_save_args (GwyContainer *container,
+ SphrevArgs *args);
+static void sphrev_load_args (GwyContainer *container,
+ SphrevArgs *args);
+static void sphrev_save_args (GwyContainer *container,
+ SphrevArgs *args);
+
+static const SphrevArgs sphrev_defaults = {
20,
FALSE,
+ SPHREV_HORIZONTAL,
NULL,
0,
};
@@ -96,34 +110,40 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Subtracts background by arc or sphere revolution."),
"Yeti <yeti at gwyddion.net>",
- "1.6",
+ "2.0",
"David Nečas (Yeti) & Petr Klapetek",
"2004",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, sphere_revolve)
static gboolean
module_register(void)
{
- /* The name mismatch is intentional, there should be a sphere_revolve
- * function too */
gwy_process_func_register("arc_revolve",
- (GwyProcessFunc)&sphrev,
+ (GwyProcessFunc)&arcrev,
N_("/_Level/Revolve _Arc..."),
NULL,
SPHREV_RUN_MODES,
GWY_MENU_FLAG_DATA,
N_("Level data by arc revolution"));
+ gwy_process_func_register("sphere_revolve",
+ (GwyProcessFunc)&sphrev,
+ N_("/_Level/Revolve _Sphere..."),
+ NULL,
+ SPHREV_RUN_MODES,
+ GWY_MENU_FLAG_DATA,
+ N_("Level data by sphere revolution"));
return TRUE;
}
static void
-sphrev(GwyContainer *data, GwyRunType run)
+arcrev(GwyContainer *data, GwyRunType run)
{
GwyDataField *dfield, *background = NULL;
- Sphrev1DArgs args;
+ GwyContainer *settings;
+ SphrevArgs args;
gint oldid, newid;
GQuark dquark;
gdouble xr, yr;
@@ -136,7 +156,8 @@ sphrev(GwyContainer *data, GwyRunType run)
0);
g_return_if_fail(dfield && dquark);
- sphrev_load_args(gwy_app_settings_get(), &args);
+ settings = gwy_app_settings_get();
+ arcrev_load_args(settings, &args);
/* FIXME: this is bogus for non-square pixels anyway */
xr = gwy_data_field_get_xreal(dfield)/gwy_data_field_get_xres(dfield);
@@ -150,8 +171,8 @@ sphrev(GwyContainer *data, GwyRunType run)
args.valform->units);
if (run == GWY_RUN_INTERACTIVE) {
- ok = sphrev_dialog(&args);
- sphrev_save_args(gwy_app_settings_get(), &args);
+ ok = sphrev_dialog(&args, FALSE);
+ arcrev_save_args(settings, &args);
}
gwy_si_unit_value_format_free(args.valform);
@@ -161,18 +182,18 @@ sphrev(GwyContainer *data, GwyRunType run)
gwy_app_undo_qcheckpointv(data, 1, &dquark);
switch (args.direction) {
case SPHREV_HORIZONTAL:
- background = sphrev_horizontal(&args, dfield);
+ background = arcrev_horizontal(&args, dfield);
break;
case SPHREV_VERTICAL:
- background = sphrev_vertical(&args, dfield);
+ background = arcrev_vertical(&args, dfield);
break;
case SPHREV_BOTH: {
GwyDataField *tmp;
- background = sphrev_horizontal(&args, dfield);
- tmp = sphrev_vertical(&args, dfield);
+ background = arcrev_horizontal(&args, dfield);
+ tmp = arcrev_vertical(&args, dfield);
gwy_data_field_sum_fields(background, background, tmp);
g_object_unref(tmp);
gwy_data_field_multiply(background, 0.5);
@@ -201,20 +222,98 @@ sphrev(GwyContainer *data, GwyRunType run)
gwy_app_channel_log_add(data, oldid, newid, NULL, NULL);
}
+static void
+sphrev(GwyContainer *data, GwyRunType run)
+{
+ GwyDataField *dfield, *background = NULL;
+ GtkWindow *window;
+ GwyContainer *settings;
+ SphrevArgs args;
+ gint oldid, newid;
+ GQuark dquark;
+ gdouble xr, yr;
+ gboolean ok = TRUE;
+
+ g_return_if_fail(run & SPHREV_RUN_MODES);
+ gwy_app_data_browser_get_current(GWY_APP_DATA_FIELD, &dfield,
+ GWY_APP_DATA_FIELD_KEY, &dquark,
+ GWY_APP_DATA_FIELD_ID, &oldid,
+ 0);
+ g_return_if_fail(dfield && dquark);
+
+ settings = gwy_app_settings_get();
+ sphrev_load_args(settings, &args);
+
+ /* FIXME: this is bogus for non-square pixels anyway */
+ xr = gwy_data_field_get_xreal(dfield)/gwy_data_field_get_xres(dfield);
+ yr = gwy_data_field_get_yreal(dfield)/gwy_data_field_get_yres(dfield);
+ args.pixelsize = hypot(xr, yr);
+ args.valform
+ = gwy_data_field_get_value_format_xy(dfield,
+ GWY_SI_UNIT_FORMAT_VFMARKUP, NULL);
+ gwy_debug("pixelsize = %g, vf = (%g, %d, %s)",
+ args.pixelsize, args.valform->magnitude, args.valform->precision,
+ args.valform->units);
+
+ if (run == GWY_RUN_INTERACTIVE) {
+ ok = sphrev_dialog(&args, TRUE);
+ sphrev_save_args(settings, &args);
+ }
+
+ gwy_si_unit_value_format_free(args.valform);
+ if (!ok)
+ return;
+
+ window = gwy_app_find_window_for_channel(data, oldid);
+ if (window) {
+ gwy_app_wait_start(window, _("Initializing..."));
+ background = sphrev_2d(&args, dfield,
+ gwy_app_wait_set_message,
+ gwy_app_wait_set_fraction);
+ gwy_app_wait_finish();
+ if (!background)
+ return;
+ }
+ else
+ background = sphrev_2d(&args, dfield, NULL, NULL);
+
+ gwy_app_undo_qcheckpointv(data, 1, &dquark);
+ gwy_data_field_subtract_fields(dfield, dfield, background);
+ gwy_data_field_data_changed(dfield);
+ gwy_app_channel_log_add_proc(data, oldid, oldid);
+
+ if (!args.do_extract) {
+ g_object_unref(background);
+ return;
+ }
+
+ newid = gwy_app_data_browser_add_data_field(background, data, TRUE);
+ g_object_unref(background);
+ gwy_app_sync_data_items(data, data, oldid, newid, FALSE,
+ GWY_DATA_ITEM_GRADIENT,
+ 0);
+ gwy_app_set_data_field_title(data, newid, _("Background"));
+ gwy_app_channel_log_add(data, oldid, newid, NULL, NULL);
+}
+
static gboolean
-sphrev_dialog(Sphrev1DArgs *args)
+sphrev_dialog(SphrevArgs *args, gboolean is_2d)
{
const GwyEnum directions[] = {
{ N_("_Horizontal direction"), SPHREV_HORIZONTAL, },
{ N_("_Vertical direction"), SPHREV_VERTICAL, },
{ N_("_Both directions"), SPHREV_BOTH, },
};
- GtkWidget *dialog, *table, *spin;
- Sphrev1DControls controls;
+ GtkWidget *dialog, *table, *spin, *label;
+ SphrevControls controls;
gint response, row;
+ const gchar *title;
gdouble q;
- dialog = gtk_dialog_new_with_buttons(_("Revolve Arc"), NULL, 0,
+ gwy_clear(&controls, 1);
+
+ title = is_2d ? _("Revolve Sphere") : _("Revolve Arc");
+ dialog = gtk_dialog_new_with_buttons(title, NULL, 0,
_("_Reset"), RESPONSE_RESET,
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
GTK_STOCK_OK, GTK_RESPONSE_OK,
@@ -222,7 +321,7 @@ sphrev_dialog(Sphrev1DArgs *args)
gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK);
gwy_help_add_to_proc_dialog(GTK_DIALOG(dialog), GWY_HELP_DEFAULT);
- table = gtk_table_new(5, 4, FALSE);
+ table = gtk_table_new(3 + 4*(!is_2d), 3, FALSE);
gtk_table_set_row_spacings(GTK_TABLE(table), 2);
gtk_table_set_col_spacings(GTK_TABLE(table), 6);
gtk_container_set_border_width(GTK_CONTAINER(table), 4);
@@ -233,40 +332,49 @@ sphrev_dialog(Sphrev1DArgs *args)
q = args->pixelsize/args->valform->magnitude;
gwy_debug("q = %f", q);
- controls.radius = gtk_adjustment_new(q*args->size, q, 16384*q, q, 10*q, 0);
- spin = gwy_table_attach_hscale(table, row, _("Real _radius:"),
+ controls.radius = gtk_adjustment_new(q*args->size, q, 1024*q, q, 10*q, 0);
+ spin = gwy_table_attach_adjbar(table, row, _("Real _radius:"),
args->valform->units, controls.radius,
GWY_HSCALE_SQRT);
gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), args->valform->precision);
g_object_set_data(G_OBJECT(controls.radius), "controls", &controls);
g_signal_connect(controls.radius, "value-changed",
- G_CALLBACK(radius_changed_cb), args);
+ G_CALLBACK(radius_changed), args);
row++;
- controls.size = gtk_adjustment_new(args->size, 1, 16384, 1, 10, 0);
- gwy_table_attach_hscale(table, row, _("_Pixel radius:"), "px",
- controls.size, GWY_HSCALE_SQRT);
+ controls.size = gtk_adjustment_new(args->size, 1, 1024, 1, 10, 0);
+ gwy_table_attach_adjbar(table, row, _("_Pixel radius:"), _("px"),
+ controls.size, GWY_HSCALE_SQRT | GWY_HSCALE_SNAP);
g_object_set_data(G_OBJECT(controls.size), "controls", &controls);
g_signal_connect(controls.size, "value-changed",
- G_CALLBACK(size_changed_cb), args);
+ G_CALLBACK(size_changed), args);
row++;
- controls.direction
- = gwy_radio_buttons_create(directions, G_N_ELEMENTS(directions),
- G_CALLBACK(direction_changed_cb), args,
- args->direction);
- row = gwy_radio_buttons_attach_to_table(controls.direction,
- GTK_TABLE(table), 4, row);
+ if (!is_2d) {
+ gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
+ label = gtk_label_new(_("Direction:"));
+ gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
+ gtk_table_attach(GTK_TABLE(table), label,
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
+ row++;
+
+ controls.direction
+ = gwy_radio_buttons_create(directions, G_N_ELEMENTS(directions),
+ G_CALLBACK(direction_changed), args,
+ args->direction);
+ row = gwy_radio_buttons_attach_to_table(controls.direction,
+ GTK_TABLE(table), 2, row);
+ }
- row += 3;
+ gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
controls.do_extract
= gtk_check_button_new_with_mnemonic(_("E_xtract background"));
gtk_table_attach(GTK_TABLE(table), controls.do_extract,
- 0, 4, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.do_extract),
args->do_extract);
g_signal_connect(controls.do_extract, "toggled",
- G_CALLBACK(do_extract_changed_cb), args);
+ G_CALLBACK(do_extract_changed), args);
row++;
controls.in_update = FALSE;
@@ -304,8 +412,7 @@ sphrev_dialog(Sphrev1DArgs *args)
}
static void
-direction_changed_cb(GtkWidget *radio,
- Sphrev1DArgs *args)
+direction_changed(GtkWidget *radio, SphrevArgs *args)
{
if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(radio)))
return;
@@ -314,10 +421,9 @@ direction_changed_cb(GtkWidget *radio,
}
static void
-radius_changed_cb(GtkAdjustment *adj,
- Sphrev1DArgs *args)
+radius_changed(GtkAdjustment *adj, SphrevArgs *args)
{
- Sphrev1DControls *controls;
+ SphrevControls *controls;
controls = g_object_get_data(G_OBJECT(adj), "controls");
if (controls->in_update)
@@ -331,10 +437,9 @@ radius_changed_cb(GtkAdjustment *adj,
}
static void
-size_changed_cb(GtkAdjustment *adj,
- Sphrev1DArgs *args)
+size_changed(GtkAdjustment *adj, SphrevArgs *args)
{
- Sphrev1DControls *controls;
+ SphrevControls *controls;
controls = g_object_get_data(G_OBJECT(adj), "controls");
if (controls->in_update)
@@ -347,21 +452,20 @@ size_changed_cb(GtkAdjustment *adj,
}
static void
-do_extract_changed_cb(GtkWidget *check,
- Sphrev1DArgs *args)
+do_extract_changed(GtkWidget *check, SphrevArgs *args)
{
args->do_extract = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(check));
}
static void
-sphrev_dialog_update(Sphrev1DControls *controls,
- Sphrev1DArgs *args)
+sphrev_dialog_update(SphrevControls *controls, SphrevArgs *args)
{
gtk_adjustment_set_value(GTK_ADJUSTMENT(controls->radius),
args->size
* args->pixelsize/args->valform->magnitude);
gtk_adjustment_set_value(GTK_ADJUSTMENT(controls->size), args->size);
- gwy_radio_buttons_set_current(controls->direction, args->direction);
+ if (controls->direction)
+ gwy_radio_buttons_set_current(controls->direction, args->direction);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls->do_extract),
args->do_extract);
}
@@ -369,7 +473,7 @@ sphrev_dialog_update(Sphrev1DControls *controls,
/* An efficient summing algorithm. Although I'm author of this code, don't
* ask me how it works... */
static void
-moving_sums(gint res, gdouble *row, gdouble *buffer, gint size)
+moving_sums(gint res, const gdouble *row, gdouble *buffer, gint size)
{
gdouble *sum, *sum2;
gint i, ls2, rs2;
@@ -427,27 +531,27 @@ moving_sums(gint res, gdouble *row, gdouble *buffer, gint size)
}
static GwyDataField*
-sphrev_horizontal(Sphrev1DArgs *args,
- GwyDataField *dfield)
+arcrev_horizontal(SphrevArgs *args, GwyDataField *dfield)
{
GwyDataField *rfield;
GwyDataLine *sphere;
- gdouble *data, *rdata, *sphdata, *sum, *sum2, *weight, *tmp;
+ gdouble *rdata, *sphdata, *sum, *sum2, *weight, *tmp;
+ const gdouble *data;
gdouble q;
gint i, j, k, size, xres, yres;
- data = gwy_data_field_get_data(dfield);
+ data = gwy_data_field_get_data_const(dfield);
rfield = gwy_data_field_duplicate(dfield);
xres = gwy_data_field_get_xres(rfield);
yres = gwy_data_field_get_yres(rfield);
rdata = gwy_data_field_get_data(rfield);
q = gwy_data_field_get_rms(dfield)/sqrt(2.0/3.0 - G_PI/16.0);
- sphere = sphrev_make_sphere(args->size, gwy_data_field_get_xres(dfield));
+ sphere = arcrev_make_arc(args->size, gwy_data_field_get_xres(dfield));
/* Scale-freeing.
* Data is normalized to have the same RMS as if it was composed from
- * spheres of radius args->radius. Actually we normalize the sphere
+ * arcs of radius args->radius. Actually we normalize the sphere
* instead, but the effect is the same. */
gwy_data_line_multiply(sphere, -q);
sphdata = gwy_data_line_get_data(sphere);
@@ -465,8 +569,8 @@ sphrev_horizontal(Sphrev1DArgs *args,
gwy_assign(weight, sum, xres);
for (i = 0; i < yres; i++) {
+ const gdouble *drow = data + i*xres;
gdouble *rrow = rdata + i*xres;
- gdouble *drow = data + i*xres;
/* Kill data that stick down too much */
moving_sums(xres, data + i*xres, sum, size);
@@ -489,8 +593,9 @@ sphrev_horizontal(Sphrev1DArgs *args,
to = MIN(j+size, xres-1) - j;
min = G_MAXDOUBLE;
for (k = from; k <= to; k++) {
- if (-(sphdata[size+k] - row[k]) < min)
- min = -(sphdata[size+k] - row[k]);
+ gdouble d = -sphdata[size+k] + row[k];
+ if (d < min)
+ min = d;
}
rrow[j] = min;
}
@@ -503,100 +608,172 @@ sphrev_horizontal(Sphrev1DArgs *args,
}
static GwyDataField*
-sphrev_vertical(Sphrev1DArgs *args,
- GwyDataField *dfield)
+arcrev_vertical(SphrevArgs *args, GwyDataField *dfield)
{
- GwyDataField *rfield;
- GwyDataLine *sphere;
- gdouble *data, *rdata, *sphdata, *sum, *sum2, *weight, *tmp;
+ GwyDataField *result, *flipped;
+
+ flipped = gwy_data_field_new_alike(dfield, FALSE);
+ gwy_data_field_flip_xy(dfield, flipped, FALSE);
+ result = arcrev_horizontal(args, flipped);
+ gwy_data_field_flip_xy(result, flipped, FALSE);
+ g_object_unref(result);
+
+ return flipped;
+}
+
+static GwyDataLine*
+arcrev_make_arc(gdouble radius, gint maxres)
+{
+ GwyDataLine *arc;
+ gdouble *data;
+ gint i, size;
+
+ size = GWY_ROUND(MIN(radius, maxres));
+ arc = gwy_data_line_new(2*size+1, 1.0, FALSE);
+ data = gwy_data_line_get_data(arc);
+
+ if (radius/8 > maxres) {
+ /* Pathological case: very flat sphere */
+ for (i = 0; i <= size; i++) {
+ gdouble u = i/radius;
+
+ data[size+i] = data[size-i] = u*u/2.0*(1.0 + u*u/4.0*(1 + u*u/2.0));
+ }
+ }
+ else {
+ /* Normal sphere */
+ for (i = 0; i <= size; i++) {
+ gdouble u = i/radius;
+
+ if (G_UNLIKELY(u > 1.0))
+ data[size+i] = data[size-i] = 1.0;
+ else
+ data[size+i] = data[size-i] = 1.0 - sqrt(1.0 - u*u);
+ }
+ }
+
+ return arc;
+}
+
+static GwyDataField*
+sphrev_2d(SphrevArgs *args, GwyDataField *dfield,
+ GwySetMessageFunc set_message, GwySetFractionFunc set_fraction)
+{
+ GwyDataField *meanfield, *rmsfield, *rfield, *sphere;
+ gdouble *rdata, *sphdata, *tmp;
+ gint i, j, ii, jj, sres, size, xres, yres, sc;
gdouble q;
- gint i, j, k, size, xres, yres;
+ gboolean ok = FALSE;
- data = gwy_data_field_get_data(dfield);
rfield = gwy_data_field_duplicate(dfield);
xres = gwy_data_field_get_xres(rfield);
yres = gwy_data_field_get_yres(rfield);
rdata = gwy_data_field_get_data(rfield);
- q = gwy_data_field_get_rms(dfield)/sqrt(2.0/3.0 - G_PI/16.0);
- sphere = sphrev_make_sphere(args->size, gwy_data_field_get_yres(dfield));
+ q = gwy_data_field_get_rms(dfield)/sqrt(5.0/6.0);
+ sphere = sphrev_make_sphere(args->size, gwy_data_field_get_xres(dfield));
/* Scale-freeing.
* Data is normalized to have the same RMS as if it was composed from
* spheres of radius args->radius. Actually we normalize the sphere
* instead, but the effect is the same. */
- gwy_data_line_multiply(sphere, -q);
- sphdata = gwy_data_line_get_data(sphere);
- size = gwy_data_line_get_res(sphere)/2;
+ gwy_data_field_multiply(sphere, -q);
+ sphdata = gwy_data_field_get_data(sphere);
+ sres = gwy_data_field_get_xres(sphere);
+ size = sres/2;
+ sc = size*sres + size;
- sum = g_new(gdouble, 4*yres);
- sum2 = sum + yres;
- weight = sum + 2*yres;
- tmp = sum + 3*yres;
+ meanfield = gwy_data_field_duplicate(dfield);
+ rmsfield = gwy_data_field_duplicate(dfield);
+ /* XXX: 1D apparently uses size/2 here. Not sure why, mimic it. */
+ gwy_data_field_filter_mean(meanfield, size/2);
+ gwy_data_field_filter_rms(rmsfield, size/2);
- /* Weights for RMS filter. The xresl-proof way is to sum 1's. */
- for (j = 0; j < yres; j++)
- weight[j] = 1.0;
- moving_sums(yres, weight, sum, size);
- gwy_assign(weight, sum, yres);
+ /* Transform mean value data to avg - 2.5*rms for outlier cut-off.
+ * Allows using rmsfield as a scratch buffer for the trimmed data. */
+ gwy_data_field_multiply(rmsfield, 2.5);
+ gwy_data_field_subtract_fields(meanfield, meanfield, rmsfield);
- for (i = 0; i < xres; i++) {
- gdouble *rcol = rdata + i;
- gdouble *dcol = data + i;
+ gwy_data_field_max_of_fields(rmsfield, meanfield, dfield);
- /* Kill data that stick down too much */
- for (j = 0; j < yres; j++)
- tmp[j] = dcol[j*xres];
- moving_sums(yres, tmp, sum, size);
- for (j = 0; j < yres; j++) {
- /* transform to avg - 2.5*rms */
- sum[j] = sum[j]/weight[j];
- sum2[j] = 2.5*sqrt(sum2[j]/weight[j] - sum[j]*sum[j]);
- sum[j] -= sum2[j];
- }
- for (j = 0; j < yres; j++)
- tmp[j] = MAX(dcol[j*xres], sum[j]);
+ if (set_message && !set_message(_("Revolving sphere...")))
+ goto finish;
- /* Find the touching point */
- for (j = 0; j < yres; j++) {
- gdouble *col = tmp + j;
- gint from, to;
+ tmp = gwy_data_field_get_data(rmsfield);
+
+ for (i = 0; i < yres; i++) {
+ gint ifrom, ito;
+
+ ifrom = MAX(0, i-size) - i;
+ ito = MIN(i+size, yres-1) - i;
+ for (j = 0; j < xres; j++) {
+ gint jfrom, jto;
gdouble min;
- from = MAX(0, j-size) - j;
- to = MIN(j+size, yres-1) - j;
+ jfrom = MAX(0, j-size) - j;
+ jto = MIN(j+size, xres-1) - j;
+
+ /* Find the touching point */
min = G_MAXDOUBLE;
- for (k = from; k <= to; k++) {
- if (-(sphdata[size+k] - col[k]) < min)
- min = -(sphdata[size+k] - col[k]);
+ for (ii = ifrom; ii <= ito; ii++) {
+ const gdouble *srow = sphdata + (sc + ii*sres + jfrom);
+ const gdouble *drow = tmp + ((i + ii)*xres + j + jfrom);
+
+ for (jj = jto+1 - jfrom; jj; jj--, srow++, drow++) {
+ gdouble s = *srow, d = *drow;
+
+ if (s >= -q) {
+ d -= s;
+ if (d < min)
+ min = d;
+ }
+ }
}
- rcol[j*xres] = min;
+ rdata[i*xres + j] = min;
}
+ if (set_fraction && !set_fraction((i + 1.0)/yres))
+ goto finish;
}
- g_free(sum);
+ ok = TRUE;
+
+finish:
+ g_object_unref(rmsfield);
+ g_object_unref(meanfield);
g_object_unref(sphere);
+ if (!ok)
+ GWY_OBJECT_UNREF(rfield);
+
return rfield;
}
-static GwyDataLine*
+static GwyDataField*
sphrev_make_sphere(gdouble radius, gint maxres)
{
- GwyDataLine *dline;
+ GwyDataField *sphere;
gdouble *data;
- gint i, size;
+ gint i, j, size, res, sc;
size = GWY_ROUND(MIN(radius, maxres));
- dline = gwy_data_line_new(2*size+1, 1.0, FALSE);
- data = gwy_data_line_get_data(dline);
+ res = 2*size + 1;
+ sphere = gwy_data_field_new(res, res, 1.0, 1.0, FALSE);
+ data = gwy_data_field_get_data(sphere);
+ sc = size*res + size;
if (radius/8 > maxres) {
/* Pathological case: very flat sphere */
for (i = 0; i <= size; i++) {
gdouble u = i/radius;
- data[size+i] = data[size-i] = u*u/2.0*(1.0 + u*u/4.0*(1 + u*u/2.0));
+ for (j = 0; j <= size; j++) {
+ gdouble v = j/radius;
+ gdouble r2 = u*u + v*v;
+ gdouble z = r2/2.0*(1.0 + r2/4.0*(1 + r2/2.0));
+
+ data[sc - res*i - j] = data[sc - res*i + j] = z;
+ data[sc + res*i - j] = data[sc + res*i + j] = z;
+ }
}
}
else {
@@ -604,48 +781,74 @@ sphrev_make_sphere(gdouble radius, gint maxres)
for (i = 0; i <= size; i++) {
gdouble u = i/radius;
- if (G_UNLIKELY(u > 1.0))
- data[size+i] = data[size-i] = 1.0;
- else
- data[size+i] = data[size-i] = 1.0 - sqrt(1.0 - u*u);
+ for (j = 0; j <= size; j++) {
+ gdouble v = j/radius;
+ gdouble r2 = u*u + v*v;
+ gdouble z = r2 > 1.0 ? 2.0 : 1.0 - sqrt(1.0 - r2);
+
+ data[sc - res*i - j] = data[sc - res*i + j] = z;
+ data[sc + res*i - j] = data[sc + res*i + j] = z;
+ }
}
}
- return dline;
+ return sphere;
}
-static const gchar radius_key[] = "/module/arc_revolve/radius";
-static const gchar direction_key[] = "/module/arc_revolve/direction";
-static const gchar do_extract_key[] = "/module/arc_revolve/do_extract";
+static const gchar arc_radius_key[] = "/module/arc_revolve/radius";
+static const gchar arc_direction_key[] = "/module/arc_revolve/direction";
+static const gchar arc_do_extract_key[] = "/module/arc_revolve/do_extract";
+
+static const gchar sph_radius_key[] = "/module/sphere_revolve/radius";
+static const gchar sph_do_extract_key[] = "/module/sphere_revolve/do_extract";
static void
-sphrev_sanitize_args(Sphrev1DArgs *args)
+sphrev_sanitize_args(SphrevArgs *args)
{
- args->size = CLAMP(args->size, 1, 16384);
+ args->size = CLAMP(args->size, 1, 1024);
args->direction = CLAMP(args->direction, SPHREV_HORIZONTAL, SPHREV_BOTH);
args->do_extract = !!args->do_extract;
}
static void
-sphrev_load_args(GwyContainer *container,
- Sphrev1DArgs *args)
+arcrev_load_args(GwyContainer *container, SphrevArgs *args)
+{
+ *args = sphrev_defaults;
+
+ gwy_container_gis_double_by_name(container, arc_radius_key, &args->size);
+ gwy_container_gis_enum_by_name(container, arc_direction_key,
+ &args->direction);
+ gwy_container_gis_boolean_by_name(container, arc_do_extract_key,
+ &args->do_extract);
+ sphrev_sanitize_args(args);
+}
+
+static void
+arcrev_save_args(GwyContainer *container, SphrevArgs *args)
+{
+ gwy_container_set_double_by_name(container, arc_radius_key, args->size);
+ gwy_container_set_enum_by_name(container, arc_direction_key,
+ args->direction);
+ gwy_container_set_boolean_by_name(container, arc_do_extract_key,
+ args->do_extract);
+}
+
+static void
+sphrev_load_args(GwyContainer *container, SphrevArgs *args)
{
*args = sphrev_defaults;
- gwy_container_gis_double_by_name(container, radius_key, &args->size);
- gwy_container_gis_enum_by_name(container, direction_key, &args->direction);
- gwy_container_gis_boolean_by_name(container, do_extract_key,
+ gwy_container_gis_double_by_name(container, sph_radius_key, &args->size);
+ gwy_container_gis_boolean_by_name(container, sph_do_extract_key,
&args->do_extract);
sphrev_sanitize_args(args);
}
static void
-sphrev_save_args(GwyContainer *container,
- Sphrev1DArgs *args)
+sphrev_save_args(GwyContainer *container, SphrevArgs *args)
{
- gwy_container_set_double_by_name(container, radius_key, args->size);
- gwy_container_set_enum_by_name(container, direction_key, args->direction);
- gwy_container_set_boolean_by_name(container, do_extract_key,
+ gwy_container_set_double_by_name(container, sph_radius_key, args->size);
+ gwy_container_set_boolean_by_name(container, sph_do_extract_key,
args->do_extract);
}
diff --git a/modules/process/stitch.c b/modules/process/stitch.c
new file mode 100644
index 0000000..bb694d5
--- /dev/null
+++ b/modules/process/stitch.c
@@ -0,0 +1,800 @@
+/*
+ * @(#) $Id: stitch.c 20293 2017-08-15 14:14:17Z yeti-dn $
+ * Copyright (C) 2017 David Necas (Yeti), Petr Klapetek, Petr Grolich.
+ * E-mail: yeti at gwyddion.net, klapetek at gwyddion.net, pgrolich at cmi.cz.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "config.h"
+#include <string.h>
+#include <glib/gstdio.h>
+#include <gtk/gtk.h>
+#include <libgwyddion/gwymacros.h>
+#include <libgwyddion/gwymath.h>
+#include <libgwyddion/gwyexpr.h>
+#include <libprocess/arithmetic.h>
+#include <libprocess/stats.h>
+#include <libprocess/filters.h>
+#include <libgwydgets/gwystock.h>
+#include <libgwydgets/gwyradiobuttons.h>
+#include <libgwymodule/gwymodule-process.h>
+#include <app/gwyapp.h>
+#include <app/gwymoduleutils.h>
+#include "preview.h"
+
+#define STITCH_RUN_MODES GWY_RUN_INTERACTIVE
+
+enum {
+ NARGS = 8,
+ USER_UNITS_ID = G_MAXINT,
+};
+
+enum {
+ SENS_EXPR_OK = 1 << 0,
+ SENS_USERUINTS = 1 << 1
+};
+
+enum {
+ STITCH_VALUE,
+ STITCH_MASK,
+ STITCH_DER_X,
+ STITCH_DER_Y,
+ STITCH_NVARS,
+};
+
+enum {
+ STITCH_NARGS = NARGS * STITCH_NVARS + 2 /* 2 for x and y */
+};
+
+enum {
+ STITCH_OK = 0,
+ STITCH_DATA = 1,
+};
+
+typedef GwyDataField* (*MakeFieldFunc)(GwyDataField *dfield);
+
+typedef struct {
+ guint err;
+ GwyAppDataId objects[NARGS];
+ gint nobjects_in_chooser;
+ gint choosers[NARGS];
+ gint toggle_buttons[NARGS];
+ gdouble xoffset[NARGS];
+ gdouble yoffset[NARGS];
+ gdouble zoffset[NARGS];
+ gboolean instant_update;
+ gboolean initialized;
+ GwySIValueFormat *format;
+} StitchArgs;
+
+typedef struct {
+ StitchArgs *args;
+ GtkWidget *dialog;
+ GtkWidget *view;
+ GtkWidget *choosers[NARGS];
+ GtkWidget *toggle_buttons[NARGS];
+ GtkWidget *push_buttons[NARGS];
+ GtkObject *xoffset[NARGS];
+ GtkWidget *xoffset_spin[NARGS];
+ GtkObject *yoffset[NARGS];
+ GtkWidget *yoffset_spin[NARGS];
+ GtkObject *zoffset[NARGS];
+ GtkWidget *zoffset_spin[NARGS];
+ GtkWidget *instant_update;
+ GwyContainer *mydata;
+} StitchControls;
+
+static gboolean module_register (void);
+static void stitch (GwyContainer *data,
+ GwyRunType run);
+static void stitch_load_args (GwyContainer *settings,
+ StitchArgs *args);
+static void stitch_save_args (GwyContainer *settings,
+ StitchArgs *args);
+static gboolean stitch_dialog (GwyContainer *data,
+ gint id,
+ StitchArgs *args);
+static void stitch_data_chosen (GwyDataChooser *chooser,
+ StitchControls *controls);
+static void stitch_data_checked (StitchControls *controls);
+static void stitch_offset_changed (StitchControls *controls);
+static void stitch_restore_offset (GtkWidget *button,
+ StitchControls *controls);
+static void stitch_instant_update_changed(GtkToggleButton *check,
+ StitchControls *controls);
+static void stitch_show_sensitive (StitchControls *controls);
+static void stitch_preview (StitchControls *controls);
+static GwyDataField* stitch_do (StitchArgs *args);
+static void get_object_ids (GwyContainer *container,
+ gpointer *obsolete);
+static void stitch_format_value (StitchControls *controls,
+ GtkAdjustment *adjustment,
+ gdouble value);
+static void update_data_from_controls(StitchControls *controls);
+
+
+static const gchar instant_update_key[] = "/module/stitch/instant_update";
+
+static GwyModuleInfo module_info = {
+ GWY_MODULE_ABI_VERSION,
+ &module_register,
+ N_("Stitch multiple images based on offsets of origins."),
+ "Petr Grolich <pgrolich.cmi.cz>",
+ "1.1",
+ "Petr Klapetek & Petr Grolich",
+ "2017",
+};
+
+GWY_MODULE_QUERY2(module_info, stitch)
+
+static gboolean
+module_register(void)
+{
+ gwy_process_func_register("stitch",
+ (GwyProcessFunc)&stitch,
+ N_("/M_ultidata/_Stitch..."),
+ NULL,
+ STITCH_RUN_MODES,
+ GWY_MENU_FLAG_DATA,
+ N_("Stitch images using offsets"));
+
+ return TRUE;
+}
+
+static gboolean
+stitch_chooser_filter(GwyContainer *data,
+ gint id,
+ gpointer user_data)
+{
+ GwyAppDataId *object = (GwyAppDataId*)user_data;
+ GwyDataField *op1, *op2;
+ GQuark quark;
+
+ quark = gwy_app_get_data_key_for_id(id);
+ op1 = GWY_DATA_FIELD(gwy_container_get_object(data, quark));
+
+ data = gwy_app_data_browser_get(object->datano);
+ quark = gwy_app_get_data_key_for_id(object->id);
+ op2 = GWY_DATA_FIELD(gwy_container_get_object(data, quark));
+
+ return !gwy_data_field_check_compatibility(op1, op2,
+ GWY_DATA_COMPATIBILITY_MEASURE);
+}
+
+static void
+get_object_ids(GwyContainer *container, gpointer *data)
+{
+ gint *ids;
+ guint i;
+ StitchArgs *args = (StitchArgs*)data;
+
+ if (args->nobjects_in_chooser > NARGS)
+ return;
+
+ ids = gwy_app_data_browser_get_data_ids(container);
+ for (i = 0; ids[i] >= 0; i++) {
+ args->objects[args->nobjects_in_chooser].id = ids[i];
+ args->objects[args->nobjects_in_chooser].datano
+ = gwy_app_data_browser_get_number(container);
+ args->nobjects_in_chooser++;
+ }
+ g_free(ids);
+}
+
+static void
+stitch_format_value(StitchControls *controls,
+ GtkAdjustment *adjustment,
+ gdouble value)
+{
+ gtk_adjustment_set_value(adjustment,
+ value / controls->args->format->magnitude);
+}
+
+void
+stitch(GwyContainer *data, GwyRunType run)
+{
+ StitchArgs args;
+ GwyContainer *settings;
+ gboolean dorun;
+ gint datano, id, newid;
+
+ g_return_if_fail(run & STITCH_RUN_MODES);
+
+ args.nobjects_in_chooser = 0;
+ gwy_app_data_browser_foreach((GwyAppDataForeachFunc)get_object_ids, &args);
+
+ gwy_app_data_browser_get_current(GWY_APP_DATA_FIELD_ID, &id,
+ GWY_APP_CONTAINER_ID, &datano,
+ 0);
+
+ settings = gwy_app_settings_get();
+ stitch_load_args(settings, &args);
+
+ dorun = stitch_dialog(data, id, &args);
+ stitch_save_args(settings, &args);
+ if (dorun) {
+ GwyDataField *result = stitch_do(&args);
+
+ newid = gwy_app_data_browser_add_data_field(result, data, TRUE);
+ g_object_unref(result);
+ gwy_app_set_data_field_title(data, newid, _("Calculated"));
+ gwy_app_sync_data_items(data, data, id, newid, FALSE,
+ GWY_DATA_ITEM_GRADIENT,
+ GWY_DATA_ITEM_REAL_SQUARE,
+ 0);
+ gwy_app_channel_log_add_proc(data, -1, newid);
+ }
+
+ gwy_si_unit_value_format_free(args.format);
+}
+
+static gboolean
+stitch_dialog(GwyContainer *container, gint id, StitchArgs *args)
+{
+ GQuark quark;
+ GwyContainer *data;
+ GtkTooltips *tooltips;
+ StitchControls controls;
+ gint i;
+ guint row, response;
+ gboolean is_active;
+ gdouble xoffset, yoffset, zoffset;
+ gchar* title;
+ GwyDataField *dfield_preview, *dfield_current, *dfield;
+ GtkWidget *dialog, *hbox, *vbox, *table, *chooser, *label, *spin;
+ GwyAppDataId* active_object;
+
+ controls.args = args;
+ controls.args->initialized = FALSE;
+
+ gwy_app_data_browser_get_current(GWY_APP_DATA_FIELD, &dfield_current, 0);
+ controls.args->format = gwy_data_field_get_value_format_xy
+ (dfield_current, GWY_SI_UNIT_FORMAT_VFMARKUP, NULL);
+ tooltips = gwy_app_get_tooltips();
+
+ dialog = gtk_dialog_new_with_buttons(_("Stitch"), NULL, 0, NULL);
+ controls.dialog = dialog;
+ gtk_dialog_add_action_widget(GTK_DIALOG(dialog),
+ gwy_stock_like_button_new(_("_Update"),
+ GTK_STOCK_EXECUTE),
+ RESPONSE_PREVIEW);
+ gtk_dialog_add_button(GTK_DIALOG(dialog),
+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL);
+ gtk_dialog_add_button(GTK_DIALOG(dialog),
+ GTK_STOCK_OK, GTK_RESPONSE_OK);
+ gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK);
+ gwy_help_add_to_proc_dialog(GTK_DIALOG(dialog), GWY_HELP_DEFAULT);
+
+ hbox = gtk_hbox_new(FALSE, 2);
+ gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), hbox,
+ FALSE, FALSE, 4);
+
+ vbox = gtk_vbox_new(FALSE, 4);
+ /* Ensure no wild changes of the dialog size due to non-square data. */
+ gtk_widget_set_size_request(vbox, PREVIEW_SIZE, PREVIEW_SIZE);
+ gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 4);
+
+ controls.mydata = gwy_container_new();
+ dfield_preview = gwy_data_field_new(PREVIEW_SIZE, PREVIEW_SIZE,
+ 1.0, 1.0, TRUE);
+ gwy_container_set_object_by_name(controls.mydata,
+ "/0/data", dfield_preview);
+ g_object_unref(dfield_preview);
+ gwy_app_sync_data_items(container, controls.mydata, id, 0, FALSE,
+ GWY_DATA_ITEM_GRADIENT,
+ GWY_DATA_ITEM_REAL_SQUARE,
+ 0);
+ controls.view = create_preview(controls.mydata, 0, PREVIEW_SIZE, FALSE);
+ gtk_box_pack_start(GTK_BOX(vbox), controls.view, FALSE, FALSE, 0);
+ gwy_set_data_preview_size(GWY_DATA_VIEW(controls.view), PREVIEW_SIZE);
+
+ table = gtk_table_new(5 + NARGS, 9, FALSE);
+ gtk_table_set_row_spacings(GTK_TABLE(table), 2);
+ gtk_table_set_col_spacings(GTK_TABLE(table), 6);
+ gtk_container_set_border_width(GTK_CONTAINER(table), 4);
+ gtk_box_pack_start(GTK_BOX(hbox), table, TRUE, TRUE, 4);
+ row = 0;
+
+ label = gtk_label_new(_("Channels"));
+ gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, row, row+1,
+ GTK_FILL, 0, 0, 0);
+
+ title = g_strdup_printf("X offset [%s]", controls.args->format->units);
+ label = gtk_label_new(title);
+ gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
+ gtk_table_attach(GTK_TABLE(table), label, 2, 3, row, row + 1,
+ GTK_FILL, 0, 0, 0);
+ g_free(title);
+
+ title = g_strdup_printf("Y offset [%s]", controls.args->format->units);
+ label = gtk_label_new(title);
+ gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
+ gtk_table_attach(GTK_TABLE(table), label, 3, 4, row, row + 1,
+ GTK_FILL, 0, 0, 0);
+ g_free(title);
+
+ title = g_strdup_printf("Z offset [%s]", controls.args->format->units);
+ label = gtk_label_new(title);
+ gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
+ gtk_table_attach(GTK_TABLE(table), label, 4, 5, row, row + 1,
+ GTK_FILL, 0, 0, 0);
+ g_free(title);
+
+ row++;
+
+ for (i = 0; i < NARGS; i++) {
+ chooser = gwy_data_chooser_new_channels();
+ gwy_data_chooser_set_filter(GWY_DATA_CHOOSER(chooser),
+ stitch_chooser_filter,
+ &args->objects,
+ NULL);
+ if (i < args->nobjects_in_chooser) {
+ active_object = args->objects + i;
+ /*gwy_data_chooser_set_active_id(GWY_DATA_CHOOSER(chooser),
+ active_object);*/
+ }else {
+ active_object = args->objects + args->nobjects_in_chooser - 1;
+ /*gwy_data_chooser_set_none(GWY_DATA_CHOOSER(chooser), _(""));
+ gwy_data_chooser_set_active(GWY_DATA_CHOOSER(chooser), NULL, 0);*/
+ }
+
+ gwy_data_chooser_set_active_id(GWY_DATA_CHOOSER(chooser),
+ active_object);
+
+ g_signal_connect(chooser, "changed",
+ G_CALLBACK(stitch_data_chosen), &controls);
+ g_object_set_data(G_OBJECT(chooser), "index", GUINT_TO_POINTER(i));
+ gtk_table_attach(GTK_TABLE(table), chooser, 0, 1, row, row+1,
+ GTK_FILL, 0, 0, 0);
+ gtk_label_set_mnemonic_widget(GTK_LABEL(label), chooser);
+ controls.choosers[i] = chooser;
+
+ controls.toggle_buttons[i] = gtk_check_button_new();
+ is_active = (i < args->nobjects_in_chooser);
+ gtk_toggle_button_set_active
+ (GTK_TOGGLE_BUTTON(controls.toggle_buttons[i]), is_active);
+ args->toggle_buttons[i] = is_active;
+ gtk_tooltips_set_tip
+ (tooltips, controls.toggle_buttons[i], "Stitch data", NULL);
+ gtk_table_attach
+ (GTK_TABLE(table), controls.toggle_buttons[i], 1, 2, row, row+1,
+ 0, 0, 0, 0);
+ g_signal_connect_swapped(controls.toggle_buttons[i], "clicked",
+ G_CALLBACK(stitch_data_checked),
+ &controls);
+
+ data = gwy_app_data_browser_get(active_object->datano);
+
+ xoffset = yoffset = zoffset = 0;
+ if (NULL != data) {
+ quark = gwy_app_get_data_key_for_id(active_object->id);
+ dfield = GWY_DATA_FIELD(gwy_container_get_object(data, quark));
+ xoffset = gwy_data_field_get_xoffset(dfield);
+ yoffset = gwy_data_field_get_yoffset(dfield);
+ zoffset = gwy_data_field_get_avg(dfield);
+ }
+
+ controls.xoffset[i] = gtk_adjustment_new(0, -10000, 10000, 0.1, 1, 0);
+ spin = gtk_spin_button_new(GTK_ADJUSTMENT(controls.xoffset[i]), 1, 2);
+ controls.xoffset_spin[i] = spin;
+ gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(spin), TRUE);
+ gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin),
+ controls.args->format->precision + 2);
+ g_signal_connect_swapped(controls.xoffset[i], "value-changed",
+ G_CALLBACK(stitch_offset_changed), &controls);
+ stitch_format_value(&controls, GTK_ADJUSTMENT(controls.xoffset[i]),
+ xoffset);
+ gtk_table_attach(GTK_TABLE(table), spin,
+ 2, 3, row, row + 1, GTK_FILL, 0, 0, 0);
+
+
+ args->yoffset[i] = 0;
+ controls.yoffset[i] = gtk_adjustment_new(0, -10000, 10000, 0.1, 1, 0);
+ spin = gtk_spin_button_new(GTK_ADJUSTMENT(controls.yoffset[i]), 1, 2);
+ controls.yoffset_spin[i] = spin;
+ gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(spin), TRUE);
+ gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin),
+ controls.args->format->precision + 2);
+ g_signal_connect_swapped(controls.yoffset[i], "value-changed",
+ G_CALLBACK(stitch_offset_changed), &controls);
+ stitch_format_value(&controls, GTK_ADJUSTMENT(controls.yoffset[i]),
+ yoffset);
+ gtk_table_attach(GTK_TABLE(table), spin,
+ 3, 4, row, row + 1, GTK_FILL, 0, 0, 0);
+
+ args->zoffset[i] = 0;
+ controls.zoffset[i] = gtk_adjustment_new(0, -10000, 10000, 0.01, 1, 0);
+ spin = gtk_spin_button_new(GTK_ADJUSTMENT(controls.zoffset[i]), 1, 2);
+ controls.zoffset_spin[i] = spin;
+ gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(spin), TRUE);
+ gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin),
+ controls.args->format->precision + 2);
+ g_signal_connect_swapped(controls.zoffset[i], "value-changed",
+ G_CALLBACK(stitch_offset_changed), &controls);
+ stitch_format_value(&controls, GTK_ADJUSTMENT(controls.zoffset[i]),
+ zoffset);
+ gtk_table_attach(GTK_TABLE(table), spin,
+ 4, 5, row, row + 1, GTK_FILL, 0, 0, 0);
+
+
+ controls.push_buttons[i] = gtk_button_new_with_label(_("Restore"));
+ gtk_table_attach(GTK_TABLE(table), controls.push_buttons[i],
+ 5, 6, row, row + 1, 0, 0, 0, 0);
+ g_signal_connect(controls.push_buttons[i], "clicked",
+ G_CALLBACK(stitch_restore_offset), &controls);
+
+ row++;
+ }
+
+ controls.instant_update = gtk_check_button_new_with_mnemonic
+ (_("_Instant updates"));
+ gtk_table_attach(GTK_TABLE(table), controls.instant_update,
+ 0, 3, row, row + 1, GTK_FILL, 0, 0, 0);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.instant_update),
+ args->instant_update);
+ g_signal_connect(controls.instant_update, "toggled",
+ G_CALLBACK(stitch_instant_update_changed),
+ &controls);
+ row++;
+
+ gtk_widget_show_all(dialog);
+
+ controls.args->err = STITCH_OK;
+ controls.args->initialized = TRUE;
+
+ stitch_show_sensitive(&controls);
+ if (controls.args->instant_update)
+ stitch_preview(&controls);
+
+ do {
+ response = gtk_dialog_run(GTK_DIALOG(dialog));
+ switch (response) {
+ case GTK_RESPONSE_CANCEL:
+ case GTK_RESPONSE_DELETE_EVENT:
+ gtk_widget_destroy(dialog);
+ case GTK_RESPONSE_NONE:
+ return FALSE;
+ break;
+
+ case RESPONSE_PREVIEW:
+ stitch_preview(&controls);
+ break;
+
+ case GTK_RESPONSE_OK:
+ break;
+
+ default:
+ g_assert_not_reached();
+ break;
+ }
+ } while (response != GTK_RESPONSE_OK);
+
+ gtk_widget_destroy(dialog);
+
+ return TRUE;
+}
+
+static void
+stitch_data_chosen(GwyDataChooser *chooser,
+ StitchControls *controls)
+{
+ gint chooser_index;
+ GQuark quark;
+ GwyContainer *data;
+ GwyDataField *dfield;
+ StitchArgs *args = controls->args;
+
+ for (chooser_index = 0; chooser_index < NARGS; chooser_index++) {
+ if (GWY_DATA_CHOOSER(controls->choosers[chooser_index]) == chooser)
+ break;
+ }
+
+ gwy_data_chooser_get_active_id
+ (GWY_DATA_CHOOSER(controls->choosers[chooser_index]),
+ &args->objects[chooser_index]);
+ data = gwy_app_data_browser_get(args->objects[chooser_index].datano);
+
+ g_return_if_fail(data);
+
+ quark = gwy_app_get_data_key_for_id(args->objects[chooser_index].id);
+ dfield = GWY_DATA_FIELD(gwy_container_get_object(data, quark));
+ stitch_format_value(controls,
+ GTK_ADJUSTMENT(controls->xoffset[chooser_index]),
+ gwy_data_field_get_xoffset(dfield));
+ stitch_format_value(controls,
+ GTK_ADJUSTMENT(controls->yoffset[chooser_index]),
+ gwy_data_field_get_yoffset(dfield));
+ stitch_format_value(controls,
+ GTK_ADJUSTMENT(controls->zoffset[chooser_index]),
+ gwy_data_field_get_avg(dfield));
+}
+
+static void
+stitch_data_checked(StitchControls *controls)
+{
+ gint i, ntoggled = 0;
+ StitchArgs *args = controls->args;
+
+ for (i = 0; i < NARGS; i++) {
+ args->toggle_buttons[i]
+ = gtk_toggle_button_get_active
+ (GTK_TOGGLE_BUTTON(controls->toggle_buttons[i]));
+ if (args->toggle_buttons[i])
+ ntoggled++;
+ }
+
+ if (ntoggled == 0)
+ args->err |= STITCH_DATA;
+ else
+ args->err &= ~STITCH_DATA;
+ stitch_show_sensitive(controls);
+
+ if (controls->args->instant_update)
+ stitch_preview(controls);
+}
+
+static void
+stitch_offset_changed(StitchControls *controls)
+{
+ gint i;
+ if (controls->args->initialized) {
+ for (i = 0; i < NARGS; i++) {
+ controls->args->xoffset[i]
+ = gtk_adjustment_get_value
+ (GTK_ADJUSTMENT(controls->xoffset[i]));
+ controls->args->yoffset[i]
+ = gtk_adjustment_get_value
+ (GTK_ADJUSTMENT(controls->yoffset[i]));
+ controls->args->zoffset[i]
+ = gtk_adjustment_get_value
+ (GTK_ADJUSTMENT(controls->zoffset[i]));
+ }
+
+ if (controls->args->instant_update)
+ stitch_preview(controls);
+ }
+}
+
+static void
+stitch_restore_offset(GtkWidget *button, StitchControls *controls)
+{
+ gint pb_index;
+ GQuark quark;
+ GwyContainer *data;
+ GwyDataField *dfield;
+ StitchArgs *args = controls->args;
+
+ for (pb_index = 0; pb_index < NARGS; pb_index++) {
+ if (controls->push_buttons[pb_index] == button)
+ break;
+ }
+
+ gwy_data_chooser_get_active_id
+ (GWY_DATA_CHOOSER(controls->choosers[pb_index]),
+ &args->objects[pb_index]);
+ data = gwy_app_data_browser_get(args->objects[pb_index].datano);
+
+ g_return_if_fail(data);
+
+ quark = gwy_app_get_data_key_for_id(args->objects[pb_index].id);
+ dfield = GWY_DATA_FIELD(gwy_container_get_object(data, quark));
+ stitch_format_value(controls,
+ GTK_ADJUSTMENT(controls->xoffset[pb_index]),
+ gwy_data_field_get_xoffset(dfield));
+ stitch_format_value(controls,
+ GTK_ADJUSTMENT(controls->yoffset[pb_index]),
+ gwy_data_field_get_yoffset(dfield));
+ stitch_format_value(controls,
+ GTK_ADJUSTMENT(controls->zoffset[pb_index]),
+ gwy_data_field_get_avg(dfield));
+}
+
+static void stitch_instant_update_changed(GtkToggleButton *check,
+ StitchControls *controls)
+{
+ controls->args->instant_update = gtk_toggle_button_get_active(check);
+ if (controls->args->instant_update)
+ stitch_preview(controls);
+ stitch_show_sensitive(controls);
+}
+
+static void
+stitch_show_sensitive(StitchControls *controls)
+{
+ StitchArgs *args = controls->args;
+ GtkDialog *dialog = GTK_DIALOG(controls->dialog);
+ gboolean ok, sensitive;
+ gint i;
+
+ for (i = 0; i < NARGS; i++) {
+ controls->args->toggle_buttons[i] = gtk_toggle_button_get_active
+ (GTK_TOGGLE_BUTTON(controls->toggle_buttons[i]));
+ sensitive = args->toggle_buttons[i];
+ gtk_widget_set_sensitive(controls->choosers[i], sensitive);
+ gtk_widget_set_sensitive(controls->xoffset_spin[i], sensitive);
+ gtk_widget_set_sensitive(controls->yoffset_spin[i], sensitive);
+ gtk_widget_set_sensitive(controls->zoffset_spin[i], sensitive);
+ gtk_widget_set_sensitive(controls->push_buttons[i], sensitive);
+ }
+
+ ok = (args->err == STITCH_OK);
+ gtk_dialog_set_response_sensitive(dialog, GTK_RESPONSE_OK, ok);
+ gtk_dialog_set_response_sensitive(dialog, RESPONSE_PREVIEW,
+ (ok && !args->instant_update));
+}
+
+static void
+stitch_preview(StitchControls *controls)
+{
+ GwyDataField *result;
+
+ /* We can also get here by activation of the entry so check again. */
+ if (controls->args->err != STITCH_OK) {
+ gwy_container_set_object_by_name(controls->mydata, "/0/data", NULL);
+ return;
+ }
+
+ update_data_from_controls(controls);
+
+ result = stitch_do(controls->args);
+ g_return_if_fail(result);
+
+ gwy_container_set_object_by_name(controls->mydata, "/0/data", result);
+ gwy_data_field_data_changed(result);
+ gwy_set_data_preview_size(GWY_DATA_VIEW(controls->view), PREVIEW_SIZE);
+ g_object_unref(result);
+}
+
+static GwyDataField*
+stitch_do(StitchArgs *args)
+{
+ GQuark quark;
+ GwyContainer *data;
+ GwyDataField *dfield, *df_shift, *result = NULL;
+ gint i;
+ gint xres, yres, nfields, destcol, destrow;
+ gdouble xreal, yreal, left, top, right, bottom, avg, x, y;
+
+ dfield = NULL;
+ xres = yres = nfields = 0;
+ xreal = yreal = left = top = right = bottom = avg = 0.0f;
+
+ for (i = 0; i < NARGS; i++) {
+ if (args->toggle_buttons[i] == 1) {
+ data = gwy_app_data_browser_get(args->objects[i].datano);
+ g_return_val_if_fail(data, NULL);
+
+ quark = gwy_app_get_data_key_for_id(args->objects[i].id);
+ dfield = GWY_DATA_FIELD(gwy_container_get_object(data, quark));
+
+ if (nfields == 0) {
+ left = args->xoffset[i] * args->format->magnitude;
+ top = args->yoffset[i] * args->format->magnitude;
+ right = (args->xoffset[i] * args->format->magnitude)
+ + gwy_data_field_get_xreal(dfield);
+ bottom = (args->yoffset[i] * args->format->magnitude)
+ + gwy_data_field_get_yreal(dfield);
+ }else {
+ left = MIN(left, args->xoffset[i] * args->format->magnitude);
+ top = MIN(top, args->yoffset[i] * args->format->magnitude);
+ right = MAX(right,
+ (args->xoffset[i] * args->format->magnitude)
+ + gwy_data_field_get_xreal(dfield));
+ bottom = MAX(bottom,
+ (args->yoffset[i] * args->format->magnitude)
+ + gwy_data_field_get_yreal(dfield));
+ }
+
+ nfields++;
+ }
+ }
+
+ xreal = right - left;
+ yreal = bottom - top;
+
+ g_return_val_if_fail((xreal > 0) && (yreal > 0) && (nfields > 0)
+ && (dfield != NULL), NULL);
+
+ xres = (gint)(gwy_data_field_rtoj(dfield, xreal) + 0.5f);
+ yres = (gint)(gwy_data_field_rtoi(dfield, yreal) + 0.5f);
+
+ result = gwy_data_field_new(xres, yres, xreal, yreal, TRUE);
+ gwy_data_field_fill(result, 0);
+
+ for (i = 0; i < NARGS; i++) {
+ if (args->toggle_buttons[i] == 1) {
+ data = gwy_app_data_browser_get(args->objects[i].datano);
+
+ g_return_val_if_fail(data, NULL);
+
+ quark = gwy_app_get_data_key_for_id(args->objects[i].id);
+ dfield = GWY_DATA_FIELD(gwy_container_get_object(data, quark));
+
+ /* shift data to provide consistent data */
+ df_shift = gwy_data_field_duplicate(dfield);
+ avg = args->zoffset[i] * args->format->magnitude;
+ gwy_data_field_add(df_shift, -1.0f * avg);
+
+ x = (args->xoffset[i] * args->format->magnitude) - left;
+ y = (args->yoffset[i] * args->format->magnitude) - top;
+ destcol = (gint)(gwy_data_field_rtoj(df_shift, x) + 0.5f);
+ destrow = (gint)(gwy_data_field_rtoi(df_shift, y) + 0.5f);
+ gwy_data_field_area_copy(df_shift,
+ result,
+ 0,
+ 0,
+ gwy_data_field_get_xres(df_shift),
+ gwy_data_field_get_yres(df_shift),
+ destcol,
+ destrow);
+
+ g_object_unref(df_shift);
+ }
+ }
+
+ return result;
+}
+
+
+static void
+stitch_load_args(GwyContainer *settings,
+ StitchArgs *args)
+{
+ gint i;
+
+ gwy_container_gis_boolean_by_name(settings, instant_update_key,
+ &args->instant_update);
+
+ for (i = 1; i < args->nobjects_in_chooser; i++) {
+ if (!gwy_app_data_id_verify_channel(args->objects + i))
+ args->objects[i] = args->objects[0];
+ }
+}
+
+static void
+stitch_save_args(GwyContainer *settings,
+ StitchArgs *args)
+{
+ gwy_container_set_boolean_by_name(settings, instant_update_key,
+ args->instant_update);
+}
+
+static void
+update_data_from_controls(StitchControls *controls)
+{
+ gint i;
+ StitchArgs *args = controls->args;
+ for (i = 0; i < NARGS; i++) {
+ args->toggle_buttons[i] = gtk_toggle_button_get_active
+ (GTK_TOGGLE_BUTTON(controls->toggle_buttons[i]));
+ gwy_data_chooser_get_active
+ (GWY_DATA_CHOOSER(controls->choosers[i]), &args->choosers[i]);
+
+ args->xoffset[i] = gtk_adjustment_get_value
+ (GTK_ADJUSTMENT(controls->xoffset[i]));
+ args->yoffset[i] = gtk_adjustment_get_value
+ (GTK_ADJUSTMENT(controls->yoffset[i]));
+ args->zoffset[i] = gtk_adjustment_get_value
+ (GTK_ADJUSTMENT(controls->zoffset[i]));
+
+ args->toggle_buttons[i] = gtk_toggle_button_get_active
+ (GTK_TOGGLE_BUTTON(controls->toggle_buttons[i]));
+ }
+}
+
+/* vim: set cin et ts=4 sw=4 cino=>1s,e0,n0,f0,{0,}0,^0,\:1s,=0,g1s,h0,t0,+1s,c3,(0,u0 : */
diff --git a/modules/process/straighten_path.c b/modules/process/straighten_path.c
index f85a4f9..9eef0e3 100644
--- a/modules/process/straighten_path.c
+++ b/modules/process/straighten_path.c
@@ -1,6 +1,6 @@
/*
- * @(#) $Id: straighten_path.c 19044 2016-10-08 19:10:46Z yeti-dn $
- * Copyright (C) 2016 David Necas (Yeti).
+ * @(#) $Id: straighten_path.c 19948 2017-06-22 14:05:41Z yeti-dn $
+ * Copyright (C) 2016-2017 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
* This program is free software; you can redistribute it and/or modify
@@ -125,12 +125,12 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Extracts a straightened part of image along a curve."),
"Yeti <yeti at gwyddion.net>",
- "1.0",
+ "1.1",
"David Nečas (Yeti)",
"2016",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, straighten_path)
static gboolean
module_register(void)
@@ -230,7 +230,7 @@ straighten_dialogue(StraightenArgs *args,
GWY_DATA_ITEM_MASK_COLOR,
0);
- table = GTK_TABLE(gtk_table_new(6, 4, FALSE));
+ table = GTK_TABLE(gtk_table_new(6, 3, FALSE));
gtk_table_set_row_spacings(table, 2);
gtk_table_set_col_spacings(table, 6);
gtk_container_set_border_width(GTK_CONTAINER(table), 4);
@@ -238,13 +238,12 @@ straighten_dialogue(StraightenArgs *args,
row = 0;
scwin = create_coord_list(&controls);
- gtk_table_attach(table, scwin, 0, 4, row, row+1,
- GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+ gtk_table_attach(table, scwin, 0, 3, row, row+1,
+ GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
row++;
hbox2 = gtk_hbox_new(TRUE, 0);
- gtk_table_attach(table, hbox2, 0, 4, row, row+1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ gtk_table_attach(table, hbox2, 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
button = gtk_button_new_with_mnemonic(_("_Reset"));
gtk_box_pack_start(GTK_BOX(hbox2), button, TRUE, TRUE, 0);
@@ -267,24 +266,26 @@ straighten_dialogue(StraightenArgs *args,
= gwy_enum_combo_box_new(gwy_interpolation_type_get_enum(), -1,
G_CALLBACK(interpolation_changed), &controls,
args->interp, TRUE);
- gwy_table_attach_hscale(GTK_WIDGET(table), row,
+ gwy_table_attach_adjbar(GTK_WIDGET(table), row,
_("_Interpolation type:"), NULL,
- GTK_OBJECT(controls.interp), GWY_HSCALE_WIDGET);
+ GTK_OBJECT(controls.interp),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
row++;
args->thickness = MIN(args->thickness, maxthickness);
controls.thickness = gtk_adjustment_new(args->thickness, 3.0, maxthickness,
1.0, 10.0, 0.0);
- gwy_table_attach_hscale(GTK_WIDGET(table), row, _("_Thickness:"), "px",
- controls.thickness, GWY_HSCALE_SQRT);
+ gwy_table_attach_adjbar(GTK_WIDGET(table), row, _("_Thickness:"), _("px"),
+ controls.thickness,
+ GWY_HSCALE_SQRT | GWY_HSCALE_SNAP);
g_signal_connect_swapped(controls.thickness, "value-changed",
G_CALLBACK(thickness_changed), &controls);
row++;
controls.slackness = gtk_adjustment_new(args->slackness, 0.0, G_SQRT2,
0.001, 0.1, 0.0);
- gwy_table_attach_hscale(GTK_WIDGET(table), row, _("_Slackness:"), NULL,
- controls.slackness, GWY_HSCALE_DEFAULT);
+ gwy_table_attach_adjbar(GTK_WIDGET(table), row, _("_Slackness:"), NULL,
+ controls.slackness, GWY_HSCALE_LINEAR);
g_signal_connect_swapped(controls.slackness, "value-changed",
G_CALLBACK(slackness_changed), &controls);
row++;
@@ -293,7 +294,7 @@ straighten_dialogue(StraightenArgs *args,
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.closed),
args->closed);
gtk_table_attach(table, controls.closed,
- 0, 4, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect_swapped(controls.closed, "toggled",
G_CALLBACK(closed_changed), &controls);
row++;
diff --git a/modules/process/superresolution.c b/modules/process/superresolution.c
index fae0795..6d65ae0 100644
--- a/modules/process/superresolution.c
+++ b/modules/process/superresolution.c
@@ -71,7 +71,7 @@ static void supres_data_cb (GwyDataChooser *chooser,
static void supres_maybe_preview (SupresControls *controls);
static const gchar* supres_check (SupresArgs *args);
static void supres_do (SupresArgs *args);
-static GwyDataField* make_superresolution (GwyDataField *result,
+static GwyDataField* make_superresolution (GwyDataField *result,
GPtrArray *fields,
SupresArgs *args);
@@ -88,7 +88,7 @@ static GwyModuleInfo module_info = {
"2004",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, superresolution)
static gboolean
module_register(void)
@@ -156,7 +156,7 @@ supres_dialog(SupresArgs *args)
label = gtk_label_new(_("Operands:"));
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
gtk_table_attach(GTK_TABLE(table), label, 0, 2, row, row+1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ GTK_FILL, 0, 0, 0);
row++;
for (i = 0; i < NARGS; i++) {
@@ -165,7 +165,7 @@ supres_dialog(SupresArgs *args)
gwy_strkill(args->name[i], "_");
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
gtk_table_attach(GTK_TABLE(table), label, 0, 1, row, row+1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ GTK_FILL, 0, 0, 0);
chooser = gwy_data_chooser_new_channels();
gwy_data_chooser_set_active_id(GWY_DATA_CHOOSER(chooser),
@@ -174,23 +174,23 @@ supres_dialog(SupresArgs *args)
G_CALLBACK(supres_data_cb), &controls);
g_object_set_data(G_OBJECT(chooser), "index", GUINT_TO_POINTER(i));
gtk_table_attach(GTK_TABLE(table), chooser, 1, 2, row, row+1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ GTK_FILL, 0, 0, 0);
gtk_label_set_mnemonic_widget(GTK_LABEL(label), chooser);
controls.data[i] = chooser;
row++;
}
- gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
- controls.result = label = gtk_label_new("");
+ gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
+ controls.result = label = gtk_label_new(NULL);
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
gtk_table_attach(GTK_TABLE(table), label, 0, 2, row, row+1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ GTK_FILL, 0, 0, 0);
args->err = SUPRES_OK;
supres_data_cb(controls.data[0], &controls);
-
+
gtk_widget_show_all(dialog);
do {
@@ -231,7 +231,6 @@ supres_data_cb(GwyDataChooser *chooser,
supres_maybe_preview(controls);
}
-
static void
supres_maybe_preview(SupresControls *controls)
{
@@ -375,9 +374,9 @@ typedef struct {
} SDataPoint;
static gdouble
-get_mean_correlation(GwyDataField *dfield,
- GwyDataField *last,
- gdouble *xmean,
+get_mean_correlation(GwyDataField *dfield,
+ GwyDataField *last,
+ gdouble *xmean,
gdouble *ymean,
SupresArgs *args
)
@@ -393,17 +392,17 @@ get_mean_correlation(GwyDataField *dfield,
newxres = gwy_data_field_get_xres(dfield)/2;
newyres = gwy_data_field_get_yres(dfield)/2;
- sm_dfield = gwy_data_field_new_resampled(dfield,
+ sm_dfield = gwy_data_field_new_resampled(dfield,
newxres,
newyres,
GWY_INTERPOLATION_LINEAR);
- sm_last = gwy_data_field_new_resampled(last,
+ sm_last = gwy_data_field_new_resampled(last,
newxres,
newyres,
GWY_INTERPOLATION_LINEAR);
- dfield_kernel = gwy_data_field_area_extract(sm_dfield,
- newxres/2 - newxres/6,
+ dfield_kernel = gwy_data_field_area_extract(sm_dfield,
+ newxres/2 - newxres/6,
newyres/2 - newyres/6,
newxres/3,
newyres/3);
@@ -442,7 +441,7 @@ get_mean_correlation(GwyDataField *dfield,
-1,
TRUE));
-
+
*xmean -= newxres/2 - 1;
*ymean -= newyres/2 - 1;
g_object_unref(score);
@@ -472,7 +471,7 @@ make_superresolution(GwyDataField *result, GPtrArray *fields, SupresArgs *args)
values = g_array_new(FALSE, FALSE, sizeof(SDataPoint));
locals = g_array_new(FALSE, FALSE, sizeof(int));
-
+
last = GWY_DATA_FIELD(g_ptr_array_index(fields, fields->len - 1));
xres = gwy_data_field_get_xres(last);
yres = gwy_data_field_get_yres(last);
@@ -490,13 +489,13 @@ make_superresolution(GwyDataField *result, GPtrArray *fields, SupresArgs *args)
for (m=0; m<(fields->len - 1); m++)
{
dfield = GWY_DATA_FIELD(g_ptr_array_index(fields, m));
-
+
/*compute overall correlation for downsampled data center to save time*/
/* if (get_mean_correlation(dfield, last, &xmean, &ymean, args) < mean_threshold)
continue;
TODO: use this when the rest works well.
*/
-
+
/*compute detailed correlation of each point*/
/*compute crosscorelation */
data = gwy_app_data_browser_get(args->objects[0].datano);
@@ -528,18 +527,18 @@ TODO: use this when the rest works well.
scdata = gwy_data_field_get_data(score);
for (col=5; col<(xres-5); col++) {
for (row=5; row<(yres-5); row++) {
-
- if (scdata[row*xres + col] > local_threshold)
- {
+
+ if (scdata[row*xres + col] > local_threshold)
+ {
sdp.xval = col + gwy_data_field_rtoi(dfieldx, xdata[row*xres + col]);
sdp.yval = row + gwy_data_field_rtoj(dfieldy, ydata[row*xres + col]);
sdp.score = scdata[row*xres + col];
sdp.zval = gwy_data_field_get_val(dfield, col, row);
- g_array_append_val(values, sdp);
+ g_array_append_val(values, sdp);
}
}
}
-
+
}
@@ -573,8 +572,8 @@ TODO: use this when the rest works well.
}
/*compute weighted average TODO in future recalculate also points from grid*/
if (((col%2) || (row%2)) && locals->len){
-
- /*add last image data*/
+
+ /*add last image data*/
distance = 1.41421356;
rdist = 4.0/(distance*distance + 1e-18);
weight = rdist;
@@ -584,7 +583,7 @@ TODO: use this when the rest works well.
for (m=0; m<locals->len; m++)
{
pdp = &g_array_index(values, SDataPoint, g_array_index(locals, int, m));
- distance = sqrt((2*(pdp->xval) - col)*(2*(pdp->xval) - col)
+ distance = sqrt((2*(pdp->xval) - col)*(2*(pdp->xval) - col)
+ (2*(pdp->yval) - row)*(2*(pdp->yval) - row));
rdist = 1.0/(distance*distance + 1e-18);
weight += rdist;
@@ -593,8 +592,8 @@ TODO: use this when the rest works well.
gwy_data_field_set_val(result, col, row, sum/weight);
}
-
- }
+
+ }
}
gwy_app_wait_finish();
diff --git a/modules/process/synth.h b/modules/process/synth.h
index 88f81d6..84b65ae 100644
--- a/modules/process/synth.h
+++ b/modules/process/synth.h
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: synth.h 17224 2015-07-31 12:00:52Z yeti-dn $
+ * @(#) $Id: synth.h 20046 2017-07-08 18:15:12Z yeti-dn $
* Copyright (C) 2009,2010 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -276,8 +276,8 @@ gwy_synth_attach_lateral(GWY_SYNTH_CONTROLS *controls,
g_object_set_data(G_OBJECT(adj), "target", target);
- spin = gwy_table_attach_hscale(GTK_WIDGET(controls->table),
- row, name, "px", adj, hscale_style);
+ spin = gwy_table_attach_adjbar(GTK_WIDGET(controls->table),
+ row, name, _("px"), adj, hscale_style);
if (pspin)
*pspin = spin;
row++;
@@ -285,13 +285,13 @@ gwy_synth_attach_lateral(GWY_SYNTH_CONTROLS *controls,
*pvalue = gtk_label_new(NULL);
gtk_misc_set_alignment(GTK_MISC(*pvalue), 1.0, 0.5);
gtk_table_attach(controls->table, *pvalue,
- 2, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 1, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_object_set_data(G_OBJECT(adj), "value-label", *pvalue);
*punits = gtk_label_new(NULL);
gtk_misc_set_alignment(GTK_MISC(*punits), 0.0, 0.5);
gtk_table_attach(controls->table, *punits,
- 3, 4, row, row+1, GTK_FILL, 0, 0, 0);
+ 2, 3, row, row+1, GTK_FILL, 0, 0, 0);
row++;
g_signal_connect_swapped(adj, "value-changed",
@@ -317,7 +317,7 @@ gwy_synth_attach_height(GWY_SYNTH_CONTROLS *controls,
*adj = gtk_adjustment_new(*target, 0.0001, 10000.0, 0.1, 10.0, 0);
g_object_set_data(G_OBJECT(*adj), "target", target);
- spin = gwy_table_attach_hscale(GTK_WIDGET(controls->table),
+ spin = gwy_table_attach_adjbar(GTK_WIDGET(controls->table),
row, name, "", *adj, GWY_HSCALE_LOG);
gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 4);
gtk_spin_button_set_snap_to_ticks(GTK_SPIN_BUTTON(spin), FALSE);
@@ -339,17 +339,18 @@ gwy_synth_attach_roundness(GWY_SYNTH_CONTROLS *controls,
GtkObject **adj,
gdouble *target)
{
- gtk_table_set_row_spacing(controls->table, row-1, 8);
+ if (row > 0)
+ gtk_table_set_row_spacing(controls->table, row-1, 8);
gtk_table_attach(controls->table, gwy_label_new_header(_("Roundness")),
- 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
*adj = gtk_adjustment_new(*target, 0.0, 1.0, 0.001, 0.1, 0);
g_object_set_data(G_OBJECT(*adj), "target", target);
- gwy_table_attach_hscale(GTK_WIDGET(controls->table),
+ gwy_table_attach_adjbar(GTK_WIDGET(controls->table),
row, _("Roundn_ess:"), NULL, *adj,
- GWY_HSCALE_DEFAULT);
+ GWY_HSCALE_LINEAR);
g_signal_connect_swapped(*adj, "value-changed",
G_CALLBACK(gwy_synth_double_changed), controls);
@@ -374,9 +375,9 @@ gwy_synth_attach_angle(GWY_SYNTH_CONTROLS *controls,
1.0, 10.0, 0);
g_object_set_data(G_OBJECT(*adj), "target", target);
- spin = gwy_table_attach_hscale(GTK_WIDGET(controls->table),
- row, name, "deg", *adj,
- GWY_HSCALE_DEFAULT);
+ spin = gwy_table_attach_adjbar(GTK_WIDGET(controls->table),
+ row, name, _("deg"), *adj,
+ GWY_HSCALE_LINEAR);
gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 1);
g_signal_connect_swapped(*adj, "value-changed",
G_CALLBACK(gwy_synth_angle_changed), controls);
@@ -395,18 +396,19 @@ gwy_synth_attach_orientation(GWY_SYNTH_CONTROLS *controls,
{
GtkWidget *spin;
- gtk_table_set_row_spacing(controls->table, row-1, 8);
+ if (row > 0)
+ gtk_table_set_row_spacing(controls->table, row-1, 8);
gtk_table_attach(controls->table, gwy_label_new_header(_("Orientation")),
- 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
*adj = gtk_adjustment_new(*target * 180.0/G_PI,
-180.0, 180.0, 1.0, 10.0, 0);
g_object_set_data(G_OBJECT(*adj), "target", target);
- spin = gwy_table_attach_hscale(GTK_WIDGET(controls->table),
- row, _("Orien_tation:"), "deg", *adj,
- GWY_HSCALE_DEFAULT);
+ spin = gwy_table_attach_adjbar(GTK_WIDGET(controls->table),
+ row, _("Orien_tation:"), _("deg"), *adj,
+ GWY_HSCALE_LINEAR);
gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 1);
g_signal_connect_swapped(*adj, "value-changed",
G_CALLBACK(gwy_synth_angle_changed), controls);
@@ -418,6 +420,32 @@ gwy_synth_attach_orientation(GWY_SYNTH_CONTROLS *controls,
G_GNUC_UNUSED
static gint
+gwy_synth_attach_truncation(GWY_SYNTH_CONTROLS *controls,
+ gint row,
+ GtkObject **adj,
+ gdouble *target)
+{
+ GtkWidget *spin;
+
+ if (row > 0)
+ gtk_table_set_row_spacing(controls->table, row-1, 8);
+ *adj = gtk_adjustment_new(*target, 0.001, 1.0, 0.001, 0.1, 0);
+ g_object_set_data(G_OBJECT(*adj), "target", target);
+
+ spin = gwy_table_attach_adjbar(GTK_WIDGET(controls->table),
+ row, _("_Truncate:"), NULL, *adj,
+ GWY_HSCALE_SQRT);
+ gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 3);
+ g_signal_connect_swapped(*adj, "value-changed",
+ G_CALLBACK(gwy_synth_double_changed), controls);
+
+ row++;
+
+ return row;
+}
+
+G_GNUC_UNUSED
+static gint
gwy_synth_attach_variance(GWY_SYNTH_CONTROLS *controls,
gint row,
GtkObject **adj,
@@ -428,7 +456,7 @@ gwy_synth_attach_variance(GWY_SYNTH_CONTROLS *controls,
*adj = gtk_adjustment_new(*target, 0.0, 1.0, 0.01, 0.1, 0);
g_object_set_data(G_OBJECT(*adj), "target", target);
- spin = gwy_table_attach_hscale(GTK_WIDGET(controls->table),
+ spin = gwy_table_attach_adjbar(GTK_WIDGET(controls->table),
row, _("Variance:"), NULL, *adj,
GWY_HSCALE_SQRT);
gtk_spin_button_set_snap_to_ticks(GTK_SPIN_BUTTON(spin), FALSE);
@@ -452,15 +480,16 @@ gwy_synth_attach_deformation(GWY_SYNTH_CONTROLS *controls,
GtkWidget **pvalue_tau,
GtkWidget **punits_tau)
{
- gtk_table_set_row_spacing(controls->table, row-1, 8);
+ if (row > 0)
+ gtk_table_set_row_spacing(controls->table, row-1, 8);
gtk_table_attach(controls->table, gwy_label_new_header(_("Deformation")),
- 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
*adj_sigma = gtk_adjustment_new(*target_sigma, 0.0, 100.0, 0.01, 1.0, 0);
g_object_set_data(G_OBJECT(*adj_sigma), "target", target_sigma);
- gwy_table_attach_hscale(GTK_WIDGET(controls->table),
+ gwy_table_attach_adjbar(GTK_WIDGET(controls->table),
row, _("_Amplitude:"), NULL, *adj_sigma,
GWY_HSCALE_SQRT);
row++;
@@ -468,21 +497,21 @@ gwy_synth_attach_deformation(GWY_SYNTH_CONTROLS *controls,
*adj_tau = gtk_adjustment_new(*target_tau, 0.1, 1000.0, 0.01, 1.0, 0);
g_object_set_data(G_OBJECT(*adj_tau), "target", target_tau);
- gwy_table_attach_hscale(GTK_WIDGET(controls->table),
- row, _("_Lateral scale:"), "px", *adj_tau,
+ gwy_table_attach_adjbar(GTK_WIDGET(controls->table),
+ row, _("_Lateral scale:"), _("px"), *adj_tau,
GWY_HSCALE_LOG);
row++;
*pvalue_tau = gtk_label_new(NULL);
gtk_misc_set_alignment(GTK_MISC(*pvalue_tau), 1.0, 0.5);
gtk_table_attach(controls->table, *pvalue_tau,
- 2, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 1, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_object_set_data(G_OBJECT(*adj_tau), "value-label", *pvalue_tau);
*punits_tau = gtk_label_new(NULL);
gtk_misc_set_alignment(GTK_MISC(*punits_tau), 0.0, 0.5);
gtk_table_attach(controls->table, *punits_tau,
- 3, 4, row, row+1, GTK_FILL, 0, 0, 0);
+ 2, 3, row, row+1, GTK_FILL, 0, 0, 0);
row++;
g_signal_connect_swapped(*adj_sigma, "value-changed",
diff --git a/modules/process/threshold.c b/modules/process/threshold.c
index 9a08e6c..b9bee67 100644
--- a/modules/process/threshold.c
+++ b/modules/process/threshold.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: threshold.c 18739 2016-07-20 10:06:44Z yeti-dn $
+ * @(#) $Id: threshold.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2010 David Necas (Yeti)
* E-mail: yeti at gwyddion.net
*
@@ -117,12 +117,12 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Limit the data range using a lower/upper threshold."),
"Yeti <yeti at gwyddion.net>",
- "1.4",
+ "1.5",
"David Nečas (Yeti)",
"2010",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, threshold)
static gboolean
module_register(void)
@@ -203,19 +203,14 @@ threshold_entry_attach(ThresholdControls *controls,
gdouble value,
const gchar *name)
{
- GtkWidget *label, *entry;
+ GtkWidget *entry;
- label = gtk_label_new_with_mnemonic(name);
- gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_table_attach(table, label, 0, 1, row, row+1, GTK_FILL, 0, 0, 0);
entry = gtk_entry_new();
gwy_widget_set_activate_on_unfocus(entry, TRUE);
threshold_format_value(controls, GTK_ENTRY(entry), value);
- gtk_table_attach(table, entry, 1, 3, row, row+1, GTK_FILL, 0, 0, 0);
- label = gtk_label_new(controls->format->units);
- gtk_label_set_use_markup(GTK_LABEL(label), TRUE);
- gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_table_attach(table, label, 3, 4, row, row+1, GTK_FILL, 0, 0, 0);
+ gwy_table_attach_adjbar(GTK_WIDGET(table), row,
+ name, controls->format->units,
+ GTK_OBJECT(entry), GWY_HSCALE_WIDGET_NO_EXPAND);
return entry;
}
@@ -269,7 +264,7 @@ threshold_dialog(ThresholdArgs *args,
controls.view = create_preview(controls.mydata, 0, PREVIEW_SIZE, FALSE);
gtk_box_pack_start(GTK_BOX(hbox), controls.view, FALSE, FALSE, 4);
- table = GTK_TABLE(gtk_table_new(5, 4, FALSE));
+ table = GTK_TABLE(gtk_table_new(5, 3, FALSE));
gtk_table_set_row_spacings(table, 2);
gtk_table_set_col_spacings(table, 6);
gtk_container_set_border_width(GTK_CONTAINER(table), 4);
@@ -287,7 +282,7 @@ threshold_dialog(ThresholdArgs *args,
NULL);
button = gwy_radio_buttons_find(controls.mode, THRESHOLD_RANGE_USER);
- gtk_table_attach(table, button, 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ gtk_table_attach(table, button, 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
controls.lower = threshold_entry_attach(&controls, table, row, args->lower,
@@ -303,7 +298,7 @@ threshold_dialog(ThresholdArgs *args,
row++;
button = gtk_button_new_with_mnemonic(_("Set to _Full Range"));
- gtk_table_attach(table, button, 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ gtk_table_attach(table, button, 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect_swapped(button, "clicked",
G_CALLBACK(threshold_set_to_full_range),
&controls);
@@ -311,7 +306,7 @@ threshold_dialog(ThresholdArgs *args,
gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
button = gwy_radio_buttons_find(controls.mode, THRESHOLD_RANGE_DISPLAY);
- gtk_table_attach(table, button, 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ gtk_table_attach(table, button, 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
/* TRANSLATORS: This is a range: 123 to 456. */
@@ -323,23 +318,23 @@ threshold_dialog(ThresholdArgs *args,
label = gtk_label_new(s);
g_free(s);
gtk_misc_set_alignment(GTK_MISC(label), 1.0, 0.5);
- gtk_table_attach(table, label, 1, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ gtk_table_attach(table, label, 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
label = gtk_label_new(controls.format->units);
gtk_label_set_use_markup(GTK_LABEL(label), TRUE);
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_table_attach(table, label, 3, 4, row, row+1, GTK_FILL, 0, 0, 0);
+ gtk_table_attach(table, label, 2, 3, row, row+1, GTK_FILL, 0, 0, 0);
row++;
gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
button = gwy_radio_buttons_find(controls.mode, THRESHOLD_RANGE_OUTLIERS);
- gtk_table_attach(table, button, 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ gtk_table_attach(table, button, 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
controls.sigma = gtk_adjustment_new(args->sigma, 1.0, 12.0, 0.01, 1.0, 0);
- gwy_table_attach_hscale(GTK_WIDGET(table), row,
+ gwy_table_attach_adjbar(GTK_WIDGET(table), row,
_("F_arther than:"), _("RMS"),
- controls.sigma, GWY_HSCALE_SQRT);
+ controls.sigma, GWY_HSCALE_DEFAULT);
g_signal_connect_swapped(controls.sigma, "value-changed",
G_CALLBACK(sigma_changed), &controls);
diff --git a/modules/process/tilt.c b/modules/process/tilt.c
index ef1eae3..7694516 100644
--- a/modules/process/tilt.c
+++ b/modules/process/tilt.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: tilt.c 18537 2016-03-28 18:11:19Z yeti-dn $
+ * @(#) $Id: tilt.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2008 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -75,12 +75,12 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Tilts image by specified amount."),
"Yeti <yeti at gwyddion.net>",
- "1.1",
+ "1.2",
"David Nečas (Yeti)",
"2008",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, tilt)
static gboolean
module_register(void)
@@ -178,21 +178,21 @@ tilt_dialog(TiltArgs *args,
/* Slopes */
label = gwy_label_new_header(_("Slopes"));
gtk_table_attach(GTK_TABLE(table), label,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
- controls.dx = gtk_adjustment_new(args->dx, -100, 100, 1e-4, 1e-2, 0);
- spin = gwy_table_attach_hscale(table, row, _("_X:"), unitstr,
- controls.dx, GWY_HSCALE_NO_SCALE);
+ controls.dx = gtk_adjustment_new(args->dx, -100.0, 100.0, 1e-4, 1e-2, 0);
+ spin = gwy_table_attach_adjbar(table, row, _("_X:"), unitstr,
+ controls.dx, GWY_HSCALE_DEFAULT);
gwy_widget_set_activate_on_unfocus(spin, TRUE);
gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 6);
g_signal_connect(controls.dx, "value-changed",
G_CALLBACK(tilt_dx_changed), &controls);
row++;
- controls.dy = gtk_adjustment_new(args->dy, -100, 100, 1e-4, 1e-2, 0);
- spin = gwy_table_attach_hscale(table, row, _("_Y:"), unitstr,
- controls.dy, GWY_HSCALE_NO_SCALE);
+ controls.dy = gtk_adjustment_new(args->dy, -100.0, 100.0, 1e-4, 1e-2, 0);
+ spin = gwy_table_attach_adjbar(table, row, _("_Y:"), unitstr,
+ controls.dy, GWY_HSCALE_DEFAULT);
gwy_widget_set_activate_on_unfocus(spin, TRUE);
gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 6);
g_signal_connect(controls.dy, "value-changed",
@@ -203,13 +203,13 @@ tilt_dialog(TiltArgs *args,
/* Angles (adjustment values will be calculated later) */
label = gwy_label_new_header(_("Angles"));
gtk_table_attach(GTK_TABLE(table), label,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
if (units_equal) {
- controls.theta = gtk_adjustment_new(0, 0, 89.6, 1e-2, 1.0, 0);
- spin = gwy_table_attach_hscale(table, row, _("θ:"), _("deg"),
- controls.theta, GWY_HSCALE_NO_SCALE);
+ controls.theta = gtk_adjustment_new(0.0, 0.0, 89.6, 1e-2, 1.0, 0);
+ spin = gwy_table_attach_adjbar(table, row, _("θ:"), _("deg"),
+ controls.theta, GWY_HSCALE_DEFAULT);
gwy_widget_set_activate_on_unfocus(spin, TRUE);
gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 4);
g_signal_connect_swapped(controls.theta, "value-changed",
@@ -219,9 +219,9 @@ tilt_dialog(TiltArgs *args,
else
controls.theta = gtk_adjustment_new(0, 0, 90.0, 1e-2, 1.0, 0);
- controls.phi = gtk_adjustment_new(0, -180, 180, 1e-2, 1.0, 0);
- spin = gwy_table_attach_hscale(table, row, _("φ:"), _("deg"),
- controls.phi, GWY_HSCALE_NO_SCALE);
+ controls.phi = gtk_adjustment_new(0.0, -180.0, 180.0, 1e-2, 1.0, 0);
+ spin = gwy_table_attach_adjbar(table, row, _("φ:"), _("deg"),
+ controls.phi, GWY_HSCALE_LINEAR);
gwy_widget_set_activate_on_unfocus(spin, TRUE);
gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 4);
g_signal_connect_swapped(controls.phi, "value-changed",
diff --git a/modules/process/tip_blind.c b/modules/process/tip_blind.c
index 31149ee..7a3b102 100644
--- a/modules/process/tip_blind.c
+++ b/modules/process/tip_blind.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: tip_blind.c 18537 2016-03-28 18:11:19Z yeti-dn $
+ * @(#) $Id: tip_blind.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2004 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -80,7 +80,6 @@ typedef struct {
GtkWidget *data;
GtkWidget *type;
GtkObject *threshold;
- GtkWidget *threshold_spin;
GtkWidget *threshold_unit;
GtkWidget *boundaries;
GwyDataField *tip;
@@ -182,7 +181,7 @@ static GwyModuleInfo module_info = {
"2004",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, tip_blind)
static gboolean
module_register(void)
@@ -292,6 +291,7 @@ tip_blind_dialog(TipBlindArgs *args)
gmodel = gwy_graph_model_new();
controls.graph = gwy_graph_new(gmodel);
g_object_unref(gmodel);
+ gwy_graph_enable_user_input(GWY_GRAPH(controls.graph), FALSE);
gwy_axis_set_visible(gwy_graph_get_axis(GWY_GRAPH(controls.graph),
GTK_POS_LEFT),
FALSE);
@@ -304,7 +304,7 @@ tip_blind_dialog(TipBlindArgs *args)
G_CALLBACK(gtk_widget_hide), NULL);
gtk_box_pack_start(GTK_BOX(vbox), controls.graph, TRUE, TRUE, 0);
- table = gtk_table_new(13, 4, FALSE);
+ table = gtk_table_new(13, 3, FALSE);
gtk_table_set_row_spacings(GTK_TABLE(table), 2);
gtk_table_set_col_spacings(GTK_TABLE(table), 6);
gtk_container_set_border_width(GTK_CONTAINER(table), 4);
@@ -318,26 +318,29 @@ tip_blind_dialog(TipBlindArgs *args)
&args->source);
g_signal_connect(controls.data, "changed",
G_CALLBACK(data_changed), &args->source);
- gwy_table_attach_hscale(table, row, _("Related _data:"), NULL,
- GTK_OBJECT(controls.data), GWY_HSCALE_WIDGET);
+ gwy_table_attach_adjbar(table, row, _("Related _data:"), NULL,
+ GTK_OBJECT(controls.data),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
gtk_table_set_row_spacing(GTK_TABLE(table), row, 8);
row++;
label = gtk_label_new(_("Estimated Tip Size"));
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
gtk_table_attach(GTK_TABLE(table), label,
- 0, 4, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
controls.xres = gtk_adjustment_new(args->xres, MIN_RES, MAX_RES, 1, 10, 0);
- gwy_table_attach_hscale(table, row, _("_Width:"), "px", controls.xres, 0);
+ gwy_table_attach_adjbar(table, row, _("_Width:"), _("px"),
+ controls.xres, GWY_HSCALE_LINEAR | GWY_HSCALE_SNAP);
g_object_set_data(G_OBJECT(controls.xres), "controls", &controls);
g_signal_connect(controls.xres, "value-changed",
G_CALLBACK(width_changed), &controls);
row++;
controls.yres = gtk_adjustment_new(args->yres, MIN_RES, MAX_RES, 1, 10, 0);
- gwy_table_attach_hscale(table, row, _("_Height:"), "px", controls.yres, 0);
+ gwy_table_attach_adjbar(table, row, _("_Height:"), _("px"),
+ controls.yres, GWY_HSCALE_LINEAR | GWY_HSCALE_SNAP);
g_object_set_data(G_OBJECT(controls.yres), "controls", &controls);
g_signal_connect(controls.yres, "value-changed",
G_CALLBACK(height_changed), &controls);
@@ -346,7 +349,7 @@ tip_blind_dialog(TipBlindArgs *args)
controls.same_resolution
= gtk_check_button_new_with_mnemonic(_("_Same resolution"));
gtk_table_attach(GTK_TABLE(table), controls.same_resolution,
- 0, 4, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.same_resolution),
args->same_resolution);
g_signal_connect(controls.same_resolution, "toggled",
@@ -355,57 +358,50 @@ tip_blind_dialog(TipBlindArgs *args)
row++;
gtk_table_attach(GTK_TABLE(table), gwy_label_new_header(_("Options")),
- 0, 4, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
- controls.threshold = gtk_adjustment_new(1.0, 0.01, 1000.0, 0.01, 1.0, 0.0);
- controls.threshold_spin
- = gtk_spin_button_new(GTK_ADJUSTMENT(controls.threshold), 0.1, 2);
- gtk_table_attach(GTK_TABLE(table), controls.threshold_spin,
- 2, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
- label = gtk_label_new_with_mnemonic(_("Noise suppression t_hreshold:"));
- gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_label_set_mnemonic_widget(GTK_LABEL(label), controls.threshold_spin);
- gtk_table_attach(GTK_TABLE(table), label,
- 0, 2, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
unit = gwy_data_field_get_si_unit_z(dfield);
controls.threshold_unit
= gwy_combo_box_metric_unit_new(G_CALLBACK(thresh_changed),
&controls,
-12, -3, unit, -9);
gtk_table_attach(GTK_TABLE(table), controls.threshold_unit,
- 3, 4, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 2, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ /* Do this last to get correct initial sensitivity. */
+ controls.threshold = gtk_adjustment_new(1.0, 0.01, 1000.0, 0.01, 1.0, 0.0);
+ g_object_set_data(G_OBJECT(controls.threshold), "units",
+ controls.threshold_unit);
+ gwy_table_attach_adjbar(table, row,
+ _("Noise suppression t_hreshold:"), NULL,
+ controls.threshold, GWY_HSCALE_LOG);
g_signal_connect(controls.threshold, "value-changed",
G_CALLBACK(thresh_changed), &controls);
sci_entry_set_value(GTK_ADJUSTMENT(controls.threshold),
- GTK_COMBO_BOX(controls.threshold_unit),
- args->thresh);
+ GTK_COMBO_BOX(controls.threshold_unit), args->thresh);
row++;
- controls.boundaries
- = gtk_check_button_new_with_mnemonic(_("Use _boundaries"));
+ controls.boundaries = gtk_check_button_new_with_mnemonic(_("Use "
+ "_boundaries"));
gtk_table_attach(GTK_TABLE(table), controls.boundaries,
- 0, 4, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.boundaries),
- args->use_boundaries);
+ args->use_boundaries);
g_signal_connect(controls.boundaries, "toggled",
G_CALLBACK(bound_changed), args);
- gtk_table_set_row_spacing(GTK_TABLE(table), row, 8);
row++;
+ gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
gtk_table_attach(GTK_TABLE(table), gwy_label_new_header(_("Stripes")),
- 0, 4, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
controls.nstripes = gtk_adjustment_new(args->nstripes,
MIN_STRIPES, MAX_STRIPES, 1, 10, 0);
- gwy_table_attach_hscale(table, row, _("_Split to stripes:"), NULL,
- controls.nstripes, GWY_HSCALE_CHECK);
+ gwy_table_attach_adjbar(table, row, _("_Split to stripes:"), NULL,
+ controls.nstripes,
+ GWY_HSCALE_CHECK | GWY_HSCALE_LINEAR | GWY_HSCALE_SNAP);
controls.split_to_stripes = gwy_table_hscale_get_check(controls.nstripes);
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.split_to_stripes),
- !args->split_to_stripes);
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.split_to_stripes),
- args->split_to_stripes);
g_signal_connect(controls.split_to_stripes, "toggled",
G_CALLBACK(split_to_stripes_changed), &controls);
g_signal_connect(controls.nstripes, "value-changed",
@@ -413,8 +409,9 @@ tip_blind_dialog(TipBlindArgs *args)
row++;
controls.stripeno = gtk_adjustment_new(1, 1, args->nstripes, 1, 10, 0);
- gwy_table_attach_hscale(table, row, _("_Preview stripe:"), NULL,
- controls.stripeno, GWY_HSCALE_DEFAULT);
+ gwy_table_attach_adjbar(table, row, _("_Preview stripe:"), NULL,
+ controls.stripeno,
+ GWY_HSCALE_LINEAR | GWY_HSCALE_SNAP);
g_signal_connect(controls.stripeno, "value-changed",
G_CALLBACK(stripeno_changed), &controls);
row++;
@@ -424,7 +421,7 @@ tip_blind_dialog(TipBlindArgs *args)
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.plot_size_graph),
args->plot_size_graph);
gtk_table_attach(GTK_TABLE(table), controls.plot_size_graph,
- 0, 4, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect(controls.plot_size_graph, "toggled",
G_CALLBACK(plot_size_graph_changed), &controls);
row++;
@@ -434,7 +431,7 @@ tip_blind_dialog(TipBlindArgs *args)
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.create_images),
args->create_images);
gtk_table_attach(GTK_TABLE(table), controls.create_images,
- 0, 4, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect(controls.create_images, "toggled",
G_CALLBACK(create_images_changed), &controls);
row++;
diff --git a/modules/process/tip_model.c b/modules/process/tip_model.c
index e18f275..a89c6f1 100644
--- a/modules/process/tip_model.c
+++ b/modules/process/tip_model.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: tip_model.c 19080 2016-10-14 13:59:02Z yeti-dn $
+ * @(#) $Id: tip_model.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2004-2016 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -53,9 +53,7 @@ typedef struct {
GtkWidget *view;
GtkWidget *type;
GtkObject *radius;
- GtkWidget *radius_spin;
GtkWidget *radius_unit;
- GtkWidget *radius_label;
GtkObject *angle;
GtkObject *theta;
GtkObject *nsides;
@@ -69,38 +67,38 @@ typedef struct {
gboolean tipdone;
} TipModelControls;
-static gboolean module_register (void);
-static void tip_model (GwyContainer *data,
- GwyRunType run);
-static void tip_model_dialog (TipModelArgs *args);
-static void tip_model_dialog_update_controls(TipModelControls *controls,
- TipModelArgs *args);
-static void tip_model_dialog_update_values (TipModelControls *controls,
- TipModelArgs *args);
-static void preview (TipModelControls *controls,
- TipModelArgs *args);
-static void tip_model_do (TipModelArgs *args,
- TipModelControls *controls);
-static void tip_process (TipModelArgs *args,
- TipModelControls *controls);
-static void tip_model_load_args (GwyContainer *container,
- TipModelArgs *args);
-static void tip_model_save_args (GwyContainer *container,
- TipModelArgs *args);
-static void tip_model_sanitize_args (TipModelArgs *args);
-static void sci_entry_set_value (GtkAdjustment *adj,
- GtkComboBox *metric,
- gdouble val);
-static void tip_type_cb (GtkWidget *combo,
- TipModelControls *controls);
-static GtkWidget* create_preset_menu (GCallback callback,
- gpointer cbdata,
- gint current);
-static void tip_update (TipModelControls *controls,
- TipModelArgs *args);
-static void radius_changed_cb (gpointer object,
- TipModelControls *controls);
-static void tip_model_dialog_abandon (TipModelControls *controls);
+static gboolean module_register (void);
+static void tip_model (GwyContainer *data,
+ GwyRunType run);
+static void tip_model_dialog (TipModelArgs *args);
+static void tip_model_dialog_update_controls(TipModelControls *controls,
+ TipModelArgs *args);
+static void tip_model_dialog_update_values (TipModelControls *controls,
+ TipModelArgs *args);
+static void preview (TipModelControls *controls,
+ TipModelArgs *args);
+static void tip_model_do (TipModelArgs *args,
+ TipModelControls *controls);
+static void tip_process (TipModelArgs *args,
+ TipModelControls *controls);
+static void tip_model_load_args (GwyContainer *container,
+ TipModelArgs *args);
+static void tip_model_save_args (GwyContainer *container,
+ TipModelArgs *args);
+static void tip_model_sanitize_args (TipModelArgs *args);
+static void sci_entry_set_value (GtkAdjustment *adj,
+ GtkComboBox *metric,
+ gdouble val);
+static void tip_type_changed (GtkWidget *combo,
+ TipModelControls *controls);
+static GtkWidget* create_preset_menu (GCallback callback,
+ gpointer cbdata,
+ gint current);
+static void tip_update (TipModelControls *controls,
+ TipModelArgs *args);
+static void radius_changed (gpointer object,
+ TipModelControls *controls);
+static void tip_model_dialog_abandon (TipModelControls *controls);
static const TipModelArgs tip_model_defaults = {
@@ -113,12 +111,12 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Models SPM tip."),
"Petr Klapetek <klapetek at gwyddion.net>",
- "2.0",
+ "2.1",
"David Nečas (Yeti) & Petr Klapetek",
"2004",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, tip_model)
static gboolean
module_register(void)
@@ -212,69 +210,67 @@ tip_model_dialog(TipModelArgs *args)
/* set up tip model controls */
gtk_box_pack_start(GTK_BOX(hbox), controls.view, FALSE, FALSE, 4);
- table = gtk_table_new(7, 4, FALSE);
+ table = gtk_table_new(7, 3, FALSE);
gtk_table_set_row_spacings(GTK_TABLE(table), 2);
gtk_table_set_col_spacings(GTK_TABLE(table), 6);
gtk_container_set_border_width(GTK_CONTAINER(table), 4);
gtk_box_pack_start(GTK_BOX(hbox), table, TRUE, TRUE, 4);
row = 0;
- controls.type = create_preset_menu(G_CALLBACK(tip_type_cb),
+ controls.type = create_preset_menu(G_CALLBACK(tip_type_changed),
&controls, args->type);
- gwy_table_attach_hscale(table, row, _("Tip _type:"), NULL,
- GTK_OBJECT(controls.type), GWY_HSCALE_WIDGET);
+ gwy_table_attach_adjbar(table, row, _("Tip _type:"), NULL,
+ GTK_OBJECT(controls.type),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
row++;
controls.nsides = gtk_adjustment_new(args->nsides, 3, 24, 1, 5, 0);
- gwy_table_attach_hscale(table, row, _("_Number of sides:"), NULL,
- controls.nsides, 0);
+ gwy_table_attach_adjbar(table, row, _("_Number of sides:"), NULL,
+ controls.nsides,
+ GWY_HSCALE_LINEAR | GWY_HSCALE_SNAP);
row++;
controls.angle = gtk_adjustment_new(args->angle, 0.1, 89.9, 0.1, 1, 0);
- spin = gwy_table_attach_hscale(table, row, _("Tip _slope:"), _("deg"),
- controls.angle, 0);
+ spin = gwy_table_attach_adjbar(table, row, _("Tip _slope:"), _("deg"),
+ controls.angle, GWY_HSCALE_LINEAR);
gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 2);
row++;
controls.theta = gtk_adjustment_new(args->theta, 0, 360, 0.1, 1, 0);
- spin = gwy_table_attach_hscale(table, row, _("Tip _rotation:"), _("deg"),
- controls.theta, 0);
+ spin = gwy_table_attach_adjbar(table, row, _("Tip _rotation:"), _("deg"),
+ controls.theta, GWY_HSCALE_LINEAR);
gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 2);
row++;
- controls.radius = gtk_adjustment_new(1.0, 0.01, 1000.0, 0.01, 1.0, 0.0);
- controls.radius_spin = gtk_spin_button_new(GTK_ADJUSTMENT(controls.radius),
- 0.1, 2);
- gtk_table_attach(GTK_TABLE(table), controls.radius_spin,
- 2, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
- controls.radius_label = gtk_label_new_with_mnemonic(_("Tip _apex radius:"));
- gtk_misc_set_alignment(GTK_MISC(controls.radius_label), 0.0, 0.5);
- gtk_label_set_mnemonic_widget(GTK_LABEL(controls.radius_label),
- controls.radius_spin);
- gtk_table_attach(GTK_TABLE(table), controls.radius_label,
- 0, 1, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
unit = gwy_data_field_get_si_unit_xy(dfield);
controls.radius_unit
- = gwy_combo_box_metric_unit_new(G_CALLBACK(radius_changed_cb),
+ = gwy_combo_box_metric_unit_new(G_CALLBACK(radius_changed),
&controls,
-12, -3, unit, -9);
gtk_table_attach(GTK_TABLE(table), controls.radius_unit,
- 3, 4, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 2, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ /* Do this last to get correct initial sensitivity. */
+ controls.radius = gtk_adjustment_new(1.0, 0.01, 1000.0, 0.01, 1.0, 0.0);
+ g_object_set_data(G_OBJECT(controls.radius), "units", controls.radius_unit);
+ gwy_table_attach_adjbar(table, row, _("Tip _apex radius:"), NULL,
+ controls.radius, GWY_HSCALE_LOG);
g_signal_connect(controls.radius, "value-changed",
- G_CALLBACK(radius_changed_cb), &controls);
+ G_CALLBACK(radius_changed), &controls);
+ sci_entry_set_value(GTK_ADJUSTMENT(controls.radius),
+ GTK_COMBO_BOX(controls.radius_unit), args->radius);
row++;
controls.anisotropy = gtk_adjustment_new(args->anisotropy,
0.1, 10.0, 0.001, 1.0, 0);
- spin = gwy_table_attach_hscale(table, row, _("Tip _anisotropy:"), NULL,
- controls.anisotropy, 0);
+ gwy_table_attach_adjbar(table, row, _("Tip _anisotropy:"), NULL,
+ controls.anisotropy, GWY_HSCALE_SQRT);
row++;
gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
controls.labsize = gtk_label_new(NULL);
gtk_misc_set_alignment(GTK_MISC(controls.labsize), 0.0, 0.5);
gtk_table_attach(GTK_TABLE(table), controls.labsize,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
controls.tipdone = FALSE;
@@ -347,15 +343,15 @@ sci_entry_set_value(GtkAdjustment *adj,
mag = 3*(gint)floor(log10(val)/3.0);
mag = CLAMP(mag, -12, -3);
g_signal_handlers_block_matched(metric, G_SIGNAL_MATCH_FUNC,
- 0, 0, 0, radius_changed_cb, 0);
+ 0, 0, 0, radius_changed, 0);
gwy_enum_combo_box_set_active(GTK_COMBO_BOX(metric), mag);
g_signal_handlers_unblock_matched(metric, G_SIGNAL_MATCH_FUNC,
- 0, 0, 0, radius_changed_cb, 0);
+ 0, 0, 0, radius_changed, 0);
gtk_adjustment_set_value(adj, val/pow10(mag));
}
static void
-tip_type_cb(GtkWidget *combo, TipModelControls *controls)
+tip_type_changed(GtkWidget *combo, TipModelControls *controls)
{
controls->args->type = gwy_enum_combo_box_get_active(GTK_COMBO_BOX(combo));
tip_model_dialog_update_controls(controls, controls->args);
@@ -435,9 +431,7 @@ tip_model_dialog_update_controls(TipModelControls *controls,
gwy_table_hscale_set_sensitive(controls->theta, rotation_sens);
gwy_table_hscale_set_sensitive(controls->nsides, nsides_sens);
gwy_table_hscale_set_sensitive(controls->anisotropy, anisotropy_sens);
- gtk_widget_set_sensitive(controls->radius_spin, radius_sens);
- gtk_widget_set_sensitive(controls->radius_unit, radius_sens);
- gtk_widget_set_sensitive(controls->radius_label, radius_sens);
+ gwy_table_hscale_set_sensitive(controls->radius, radius_sens);
}
static void
@@ -570,8 +564,7 @@ tip_process(TipModelArgs *args,
}
static void
-radius_changed_cb(G_GNUC_UNUSED gpointer object,
- TipModelControls *controls)
+radius_changed(G_GNUC_UNUSED gpointer object, TipModelControls *controls)
{
gint p10;
gdouble val;
diff --git a/modules/process/tipops.c b/modules/process/tipops.c
index 510e1d7..213f516 100644
--- a/modules/process/tipops.c
+++ b/modules/process/tipops.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: tipops.c 18254 2016-02-03 14:56:26Z yeti-dn $
+ * @(#) $Id: tipops.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2004-2006 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -71,7 +71,7 @@ static GwyModuleInfo module_info = {
"2006",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, tipops)
static gboolean
module_register(void)
@@ -163,7 +163,7 @@ tipops_dialog(TipOpsArgs *args,
label = gtk_label_new_with_mnemonic(_("_Tip morphology:"));
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
gtk_table_attach(GTK_TABLE(table), label,
- 0, 1, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
chooser = gwy_data_chooser_new_channels();
g_object_set_data(G_OBJECT(chooser), "dialog", dialog);
@@ -180,7 +180,7 @@ tipops_dialog(TipOpsArgs *args,
label = gtk_label_new(NULL);
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
gtk_table_attach(GTK_TABLE(table), label,
- 0, 2, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_object_set_data(G_OBJECT(chooser), "warning-label", label);
tipops_tip_changed(GWY_DATA_CHOOSER(chooser), args);
diff --git a/modules/process/unrotate.c b/modules/process/unrotate.c
index 4e4fa90..c09b3bc 100644
--- a/modules/process/unrotate.c
+++ b/modules/process/unrotate.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: unrotate.c 18537 2016-03-28 18:11:19Z yeti-dn $
+ * @(#) $Id: unrotate.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2004 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -88,7 +88,7 @@ static GwyModuleInfo module_info = {
"2004",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, unrotate)
static gboolean
module_register(void)
@@ -237,19 +237,19 @@ unrotate_dialog(UnrotateArgs *args,
row = 0;
gtk_table_attach(GTK_TABLE(table), gwy_label_new_header(_("Structure")),
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
row++;
label = gtk_label_new(_("Detected:"));
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
gtk_table_attach(GTK_TABLE(table), label,
- 0, 1, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 1, row, row+1, GTK_FILL, 0, 0, 0);
s = gwy_sgettext(gwy_enum_to_string(guess, gwy_plane_symmetry_get_enum(),
-1));
label = gtk_label_new(_(s));
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
gtk_table_attach(GTK_TABLE(table), label,
- 1, 2, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 1, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
controls.symmetry
@@ -262,11 +262,11 @@ unrotate_dialog(UnrotateArgs *args,
label = gtk_label_new(_("Correction:"));
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
gtk_table_attach(GTK_TABLE(table), label,
- 0, 1, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 1, row, row+1, GTK_FILL, 0, 0, 0);
controls.corrlabel = gtk_label_new(NULL);
gtk_misc_set_alignment(GTK_MISC(controls.corrlabel), 0.0, 0.5);
gtk_table_attach(GTK_TABLE(table), controls.corrlabel,
- 1, 2, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 1, 2, row, row+1, GTK_FILL, 0, 0, 0);
gtk_table_set_row_spacing(GTK_TABLE(table), row, 8);
row++;
diff --git a/modules/process/volumize.c b/modules/process/volumize.c
index da311bb..86087f2 100644
--- a/modules/process/volumize.c
+++ b/modules/process/volumize.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: volumize.c 19044 2016-10-08 19:10:46Z yeti-dn $
+ * @(#) $Id: volumize.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2015-2016 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -46,14 +46,14 @@ static GwyModuleInfo module_info = {
"2013",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, volumize)
static gboolean
module_register(void)
{
gwy_process_func_register("volumize",
(GwyProcessFunc)&volumize,
- N_("/_Basic Operations/Volumize..."),
+ N_("/_Basic Operations/Volumize"),
GWY_STOCK_VOLUMIZE,
VOLUMIZE_RUN_MODES,
GWY_MENU_FLAG_DATA,
diff --git a/modules/process/volumize_layers.c b/modules/process/volumize_layers.c
index 56887dd..1e36fc6 100644
--- a/modules/process/volumize_layers.c
+++ b/modules/process/volumize_layers.c
@@ -1,6 +1,6 @@
/*
* @(#) $Id: volumize_layers.c 14879 2013-04-15 21:04:16Z yeti-dn $
- * Copyright (C) 2015-2016 David Necas (Yeti), Petr Klapetek.
+ * Copyright (C) 2015-2017 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
* This program is free software; you can redistribute it and/or modify
@@ -85,12 +85,12 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Converts all datafields to 3D volume data."),
"Petr Klapetek <klapetek at gwyddion.net>",
- "2.0",
+ "2.1",
"David Nečas (Yeti) & Petr Klapetek",
"2013",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, volumize_layers)
static gboolean
module_register(void)
@@ -237,29 +237,28 @@ volumize_layers_dialog(VolumizeLayersArgs *args,
args->zres = zres;
controls.xres = gtk_adjustment_new(args->xres, 1.0, 1000.0, 1, 10, 0);
- gwy_table_attach_hscale(table, row, _("_X resolution:"), "pixels",
- controls.xres, GWY_HSCALE_SQRT);
+ gwy_table_attach_adjbar(table, row, _("_X resolution:"), _("px"),
+ controls.xres, GWY_HSCALE_DEFAULT);
row++;
controls.yres = gtk_adjustment_new(args->yres, 1.0, 1000.0, 1, 10, 0);
- gwy_table_attach_hscale(table, row, _("_Y resolution:"), "pixels",
- controls.yres, GWY_HSCALE_SQRT);
+ gwy_table_attach_adjbar(table, row, _("_Y resolution:"), _("px"),
+ controls.yres, GWY_HSCALE_DEFAULT);
row++;
controls.zres = gtk_adjustment_new(args->zres, 1.0, 1000.0, 1, 10, 0);
- gwy_table_attach_hscale(table, row, _("_Z resolution:"), "pixels",
- controls.zres, GWY_HSCALE_SQRT);
+ gwy_table_attach_adjbar(table, row, _("_Z resolution:"), _("px"),
+ controls.zres, GWY_HSCALE_DEFAULT);
row++;
controls.zreal = gtk_adjustment_new(args->zreal,
0.01, 10000.0, 0.01, 1.0, 0);
- gwy_table_attach_hscale(table, row, _("Z _range:"), args->zunit,
- controls.zreal, GWY_HSCALE_SQRT);
+ gwy_table_attach_adjbar(table, row, _("Z _range:"), args->zunit,
+ controls.zreal, GWY_HSCALE_DEFAULT);
zunitbutton = gtk_button_new_with_label(gwy_sgettext("verb|Change"));
gtk_table_attach(GTK_TABLE(table), zunitbutton,
- 4, 5, row, row+2,
- GTK_EXPAND | GTK_FILL | GTK_SHRINK, 0, 0, 0);
+ 3, 4, row, row+2, GTK_FILL | GTK_SHRINK, 0, 0, 0);
g_signal_connect_swapped(zunitbutton, "clicked",
G_CALLBACK(change_zunits), &controls);
row++;
diff --git a/modules/process/wave_synth.c b/modules/process/wave_synth.c
index 3f3f96d..896d2ea 100644
--- a/modules/process/wave_synth.c
+++ b/modules/process/wave_synth.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: wave_synth.c 19044 2016-10-08 19:10:46Z yeti-dn $
+ * @(#) $Id: wave_synth.c 20058 2017-07-10 11:22:20Z yeti-dn $
* Copyright (C) 2014 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -69,6 +69,7 @@ typedef struct {
gdouble y;
gdouble z;
gdouble k;
+ gdouble decay;
} GwyWaveSource;
typedef struct _WaveSynthArgs WaveSynthArgs;
@@ -90,6 +91,8 @@ struct _WaveSynthArgs {
gdouble amplitude_noise;
gdouble k;
gdouble k_noise;
+ gdouble decay;
+ gdouble decay_noise;
/* Dynamic state */
gfloat *wave_table;
};
@@ -120,6 +123,8 @@ struct _WaveSynthControls {
GtkObject *k;
GtkWidget *k_units;
GtkObject *k_noise;
+ GtkObject *decay;
+ GtkObject *decay_noise;
GwyContainer *mydata;
GwyDataField *surface;
gdouble pxsize;
@@ -158,9 +163,11 @@ static void amplitude_init_clicked (WaveSynthControls *controls);
static void wave_synth_invalidate (WaveSynthControls *controls);
static gboolean preview_gsource (gpointer user_data);
static void preview (WaveSynthControls *controls);
-static void wave_synth_do (const WaveSynthArgs *args,
+static gboolean wave_synth_do (const WaveSynthArgs *args,
const GwyDimensionArgs *dimsargs,
- GwyDataField *dfield);
+ GwyDataField *dfield,
+ GwySetMessageFunc set_message,
+ GwySetFractionFunc set_fraction);
static void precalculate_wave_table(gfloat *tab,
guint n,
WaveTypeType type);
@@ -198,7 +205,8 @@ static const WaveSynthArgs wave_synth_defaults = {
0.0, 0.3,
0.0, 0.3,
1.0, 0.0,
- 80.0, 0.02,
+ 30.0, 0.02,
+ -5.0, 0.0,
/* Dynamic state */
NULL,
};
@@ -210,12 +218,12 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Generates various kinds of waves."),
"Yeti <yeti at gwyddion.net>",
- "1.1",
+ "1.2",
"David Nečas (Yeti)",
"2014",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, wave_synth)
static gboolean
module_register(void)
@@ -264,46 +272,57 @@ run_noninteractive(WaveSynthArgs *args,
gint oldid,
GQuark quark)
{
+ GwyDataField *newfield;
GwySIUnit *siunit;
gboolean replace = dimsargs->replace && dfield;
gboolean add = dimsargs->add && dfield;
gint newid;
+ gboolean ok;
if (args->randomize)
args->seed = g_random_int() & 0x7fffffff;
- if (replace) {
- /* Always take a reference so that we can always unref. */
- g_object_ref(dfield);
-
- gwy_app_undo_qcheckpointv(data, 1, &quark);
- if (!add)
- gwy_data_field_clear(dfield);
-
- gwy_app_channel_log_add_proc(data, oldid, oldid);
+ if (add || replace) {
+ if (add)
+ newfield = gwy_data_field_duplicate(dfield);
+ else
+ newfield = gwy_data_field_new_alike(dfield, TRUE);
}
else {
- if (add)
- dfield = gwy_data_field_duplicate(dfield);
- else {
- gdouble mag = pow10(dimsargs->xypow10) * dimsargs->measure;
- dfield = gwy_data_field_new(dimsargs->xres, dimsargs->yres,
- mag*dimsargs->xres, mag*dimsargs->yres,
- TRUE);
+ gdouble mag = pow10(dimsargs->xypow10) * dimsargs->measure;
+ newfield = gwy_data_field_new(dimsargs->xres, dimsargs->yres,
+ mag*dimsargs->xres, mag*dimsargs->yres,
+ TRUE);
- siunit = gwy_data_field_get_si_unit_xy(dfield);
- gwy_si_unit_set_from_string(siunit, dimsargs->xyunits);
+ siunit = gwy_data_field_get_si_unit_xy(newfield);
+ gwy_si_unit_set_from_string(siunit, dimsargs->xyunits);
- siunit = gwy_data_field_get_si_unit_z(dfield);
- gwy_si_unit_set_from_string(siunit, dimsargs->zunits);
- }
+ siunit = gwy_data_field_get_si_unit_z(newfield);
+ gwy_si_unit_set_from_string(siunit, dimsargs->zunits);
}
- wave_synth_do(args, dimsargs, dfield);
+ gwy_app_wait_start(gwy_app_find_window_for_channel(data, oldid),
+ _("Initializing..."));
+ ok = wave_synth_do(args, dimsargs, newfield,
+ gwy_app_wait_set_message, gwy_app_wait_set_fraction);
+ gwy_app_wait_finish();
+
+ if (!ok) {
+ g_object_unref(newfield);
+ return;
+ }
- if (!replace) {
+ if (replace) {
+ gwy_app_undo_qcheckpointv(data, 1, &quark);
+ gwy_container_set_object(data, gwy_app_get_data_key_for_id(oldid),
+ newfield);
+ gwy_app_channel_log_add_proc(data, oldid, oldid);
+ g_object_unref(newfield);
+ newid = oldid;
+ }
+ else {
if (data) {
- newid = gwy_app_data_browser_add_data_field(dfield, data, TRUE);
+ newid = gwy_app_data_browser_add_data_field(newfield, data, TRUE);
if (oldid != -1)
gwy_app_sync_data_items(data, data, oldid, newid, FALSE,
GWY_DATA_ITEM_GRADIENT,
@@ -313,7 +332,7 @@ run_noninteractive(WaveSynthArgs *args,
newid = 0;
data = gwy_container_new();
gwy_container_set_object(data, gwy_app_get_data_key_for_id(newid),
- dfield);
+ newfield);
gwy_app_data_browser_add(data);
gwy_app_data_browser_reset_visibility(data,
GWY_VISIBILITY_RESET_SHOW_ALL);
@@ -322,8 +341,8 @@ run_noninteractive(WaveSynthArgs *args,
gwy_app_set_data_field_title(data, newid, _("Generated"));
gwy_app_channel_log_add_proc(data, add ? oldid : -1, newid);
+ g_object_unref(newfield);
}
- g_object_unref(dfield);
}
static gboolean
@@ -333,7 +352,7 @@ wave_synth_dialog(WaveSynthArgs *args,
GwyDataField *dfield_template,
gint id)
{
- GtkWidget *dialog, *table, *vbox, *hbox, *notebook;
+ GtkWidget *dialog, *table, *vbox, *hbox, *notebook, *spin;
WaveSynthControls controls;
GwyDataField *dfield;
gboolean finished;
@@ -409,7 +428,7 @@ wave_synth_dialog(WaveSynthArgs *args,
g_signal_connect_swapped(controls.dims->add, "toggled",
G_CALLBACK(wave_synth_invalidate), &controls);
- table = gtk_table_new(16, 4, FALSE);
+ table = gtk_table_new(18, 4, FALSE);
controls.table = GTK_TABLE(table);
gtk_table_set_row_spacings(controls.table, 2);
gtk_table_set_col_spacings(controls.table, 6);
@@ -419,14 +438,14 @@ wave_synth_dialog(WaveSynthArgs *args,
row = 0;
controls.quantity = quantity_selector_new(&controls);
- gwy_table_attach_hscale(table, row, _("_Quantity:"), NULL,
+ gwy_table_attach_adjbar(table, row, _("_Quantity:"), NULL,
GTK_OBJECT(controls.quantity),
- GWY_HSCALE_WIDGET);
+ GWY_HSCALE_WIDGET_NO_EXPAND);
row++;
controls.nwaves = gtk_adjustment_new(args->nwaves, 1, 1000, 1, 10, 0);
g_object_set_data(G_OBJECT(controls.nwaves), "target", &args->nwaves);
- gwy_table_attach_hscale(table, row, _("_Number of waves:"), NULL,
+ gwy_table_attach_adjbar(table, row, _("_Number of waves:"), NULL,
GTK_OBJECT(controls.nwaves), GWY_HSCALE_SQRT);
g_signal_connect_swapped(controls.nwaves, "value-changed",
G_CALLBACK(gwy_synth_int_changed), &controls);
@@ -434,13 +453,13 @@ wave_synth_dialog(WaveSynthArgs *args,
gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
gtk_table_attach(GTK_TABLE(table), gwy_label_new_header(_("Amplitude")),
- 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
controls.type = type_selector_new(&controls);
- gwy_table_attach_hscale(table, row, _("_Wave form:"), NULL,
+ gwy_table_attach_adjbar(table, row, _("_Wave form:"), NULL,
GTK_OBJECT(controls.type),
- GWY_HSCALE_WIDGET);
+ GWY_HSCALE_WIDGET_NO_EXPAND);
row++;
row = gwy_synth_attach_height(&controls, row,
@@ -450,11 +469,11 @@ wave_synth_dialog(WaveSynthArgs *args,
if (dfield_template) {
controls.amplitude_init
- = gtk_button_new_with_mnemonic(_("_Like Current Channel"));
+ = gtk_button_new_with_mnemonic(_("_Like Current Image"));
g_signal_connect_swapped(controls.amplitude_init, "clicked",
G_CALLBACK(amplitude_init_clicked), &controls);
gtk_table_attach(GTK_TABLE(table), controls.amplitude_init,
- 1, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
}
@@ -463,13 +482,25 @@ wave_synth_dialog(WaveSynthArgs *args,
&args->amplitude_noise);
gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
+ controls.decay = gtk_adjustment_new(args->decay, -5.0, 0.0, 0.001, 1, 0);
+ g_object_set_data(G_OBJECT(controls.decay), "target", &args->decay);
+ gwy_table_attach_adjbar(table, row, _("_Decay:"), "log<sub>10</sub>",
+ GTK_OBJECT(controls.decay), GWY_HSCALE_LINEAR);
+ g_signal_connect_swapped(controls.decay, "value-changed",
+ G_CALLBACK(gwy_synth_double_changed), &controls);
+ row++;
+
+ row = gwy_synth_attach_variance(&controls, row,
+ &controls.decay_noise, &args->decay_noise);
+
+ gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
gtk_table_attach(GTK_TABLE(table), gwy_label_new_header(_("Frequency")),
- 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
controls.k = gtk_adjustment_new(args->k, 0.01, 1000.0, 0.01, 10, 0);
g_object_set_data(G_OBJECT(controls.k), "target", &args->k);
- gwy_table_attach_hscale(table, row, _("_Spatial frequency:"), NULL,
+ gwy_table_attach_adjbar(table, row, _("_Spatial frequency:"), NULL,
GTK_OBJECT(controls.k), GWY_HSCALE_SQRT);
g_signal_connect_swapped(controls.k, "value-changed",
G_CALLBACK(gwy_synth_double_changed), &controls);
@@ -480,30 +511,34 @@ wave_synth_dialog(WaveSynthArgs *args,
gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
gtk_table_attach(GTK_TABLE(table), gwy_label_new_header(_("Position")),
- 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
controls.x = gtk_adjustment_new(args->x, -1000.0, 1000.0, 0.01, 1, 0);
g_object_set_data(G_OBJECT(controls.x), "target", &args->x);
- gwy_table_attach_hscale(table, row, _("_X center:"), NULL,
- GTK_OBJECT(controls.x), GWY_HSCALE_DEFAULT);
+ gwy_table_attach_adjbar(table, row, _("_X center:"), NULL,
+ GTK_OBJECT(controls.x), GWY_HSCALE_SQRT);
g_signal_connect_swapped(controls.x, "value-changed",
G_CALLBACK(gwy_synth_double_changed), &controls);
row++;
row = gwy_synth_attach_variance(&controls, row,
&controls.x_noise, &args->x_noise);
+ spin = gwy_table_hscale_get_middle_widget(controls.x_noise);
+ gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 4);
controls.y = gtk_adjustment_new(args->y, -1000.0, 1000.0, 0.01, 1, 0);
g_object_set_data(G_OBJECT(controls.y), "target", &args->y);
- gwy_table_attach_hscale(table, row, _("_Y center:"), NULL,
- GTK_OBJECT(controls.y), GWY_HSCALE_DEFAULT);
+ gwy_table_attach_adjbar(table, row, _("_Y center:"), NULL,
+ GTK_OBJECT(controls.y), GWY_HSCALE_SQRT);
g_signal_connect_swapped(controls.y, "value-changed",
G_CALLBACK(gwy_synth_double_changed), &controls);
row++;
row = gwy_synth_attach_variance(&controls, row,
&controls.y_noise, &args->y_noise);
+ spin = gwy_table_hscale_get_middle_widget(controls.y_noise);
+ gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 4);
gtk_widget_show_all(dialog);
controls.in_init = FALSE;
@@ -694,6 +729,7 @@ preview(WaveSynthControls *controls)
{
WaveSynthArgs *args = controls->args;
GwyDataField *dfield;
+ gboolean ok;
dfield = GWY_DATA_FIELD(gwy_container_get_object_by_name(controls->mydata,
"/0/data"));
@@ -702,7 +738,24 @@ preview(WaveSynthControls *controls)
else
gwy_data_field_clear(dfield);
- wave_synth_do(args, controls->dims->args, dfield);
+ if (args->update) {
+ wave_synth_do(args, controls->dims->args, dfield, NULL, NULL);
+ gwy_data_field_data_changed(dfield);
+ return;
+ }
+
+ gwy_app_wait_start(GTK_WINDOW(controls->dialog), _("Initializing..."));
+ ok = wave_synth_do(args, controls->dims->args, dfield,
+ gwy_app_wait_set_message, gwy_app_wait_set_fraction);
+ gwy_app_wait_finish();
+
+ if (!ok) {
+ if (controls->dims->args->add && controls->surface)
+ gwy_data_field_copy(controls->surface, dfield, FALSE);
+ else
+ gwy_data_field_clear(dfield);
+ }
+ gwy_data_field_data_changed(dfield);
}
static inline void
@@ -720,10 +773,12 @@ approx_wave_c(const gfloat *tab, gdouble x)
return tab[xi];
}
-static void
+static gboolean
wave_synth_do(const WaveSynthArgs *args,
const GwyDimensionArgs *dimsargs,
- GwyDataField *dfield)
+ GwyDataField *dfield,
+ GwySetMessageFunc set_message,
+ GwySetFractionFunc set_fraction)
{
GwyRandGenSet *rngset;
GwyWaveSource *sources;
@@ -732,6 +787,7 @@ wave_synth_do(const WaveSynthArgs *args,
gdouble *d;
const gfloat *tab;
gdouble q;
+ gboolean ok = FALSE;
sources = g_new(GwyWaveSource, args->nwaves);
rngset = gwy_rand_gen_set_new(1);
@@ -739,7 +795,10 @@ wave_synth_do(const WaveSynthArgs *args,
randomize_sources(rngset, sources, args, dimsargs, xres, yres);
gwy_rand_gen_set_free(rngset);
- d = dfield->data;
+ if (set_message && !set_message(_("Rendering surface...")))
+ goto finish;
+
+ d = gwy_data_field_get_data(dfield);
tab = args->wave_table;
if (args->quantity == WAVE_QUANTITY_DISPLACEMENT) {
q = 2.0/sqrt(nwaves);
@@ -750,11 +809,14 @@ wave_synth_do(const WaveSynthArgs *args,
for (k = nwaves; k; k--, source++) {
gdouble x = j - source->x, y = i - source->y;
- gdouble r = sqrt(x*x + y*y);
- z += source->z * approx_wave_c(tab, source->k*r);
+ gdouble kr = source->k * sqrt(x*x + y*y);
+ gdouble dec = exp(-kr*source->decay);
+ z += dec*source->z * approx_wave_c(tab, kr);
}
*(d++) += q*z;
}
+ if (set_fraction && !set_fraction((i + 1.0)/yres))
+ goto finish;
}
}
else if (args->quantity == WAVE_QUANTITY_AMPLITUDE) {
@@ -766,14 +828,17 @@ wave_synth_do(const WaveSynthArgs *args,
for (k = nwaves; k; k--, source++) {
gdouble x = j - source->x, y = i - source->y;
- gdouble r = sqrt(x*x + y*y);
+ gdouble kr = source->k * sqrt(x*x + y*y);
+ gdouble dec = exp(-kr*source->decay);
gfloat c, s;
- approx_wave_sc(tab, source->k*r, &s, &c);
- zs += source->z*s;
- zc += source->z*c;
+ approx_wave_sc(tab, kr, &s, &c);
+ zs += dec*source->z*s;
+ zc += dec*source->z*c;
}
*(d++) += q*sqrt(zc*zc + zs*zs);
}
+ if (set_fraction && !set_fraction((i + 1.0)/yres))
+ goto finish;
}
}
else if (args->quantity == WAVE_QUANTITY_PHASE) {
@@ -785,24 +850,29 @@ wave_synth_do(const WaveSynthArgs *args,
for (k = nwaves; k; k--, source++) {
gdouble x = j - source->x, y = i - source->y;
- gdouble r = sqrt(x*x + y*y);
+ gdouble kr = source->k * sqrt(x*x + y*y);
+ gdouble dec = exp(-kr*source->decay);
gfloat c, s;
- approx_wave_sc(tab, source->k*r, &s, &c);
- zs += source->z*s;
- zc += source->z*c;
+ approx_wave_sc(tab, kr, &s, &c);
+ zs += dec*source->z*s;
+ zc += dec*source->z*c;
}
*(d++) += q*atan2(zs, zc);
}
+ if (set_fraction && !set_fraction((i + 1.0)/yres))
+ goto finish;
}
}
else {
g_assert_not_reached();
}
+ ok = TRUE;
+
+finish:
g_free(sources);
- gwy_data_field_invalidate(dfield);
- gwy_data_field_data_changed(dfield);
+ return ok;
}
static void
@@ -911,24 +981,31 @@ randomize_sources(GwyRandGenSet *rngset,
sources[i].z = (args->amplitude * pow10(dimsargs->zpow10)
* exp(rng_gaussian(rngset, 0,
4.0*args->amplitude_noise)));
+ /* Phase is already scaled so this is measured in wavelengths as it
+ * should. */
+ sources[i].decay = exp(G_LN10*(args->decay
+ + rng_gaussian(rngset, 0,
+ 4.0*args->decay_noise)));
}
}
static const gchar active_page_key[] = "/module/wave_synth/active_page";
-static const gchar update_key[] = "/module/wave_synth/update";
+static const gchar amplitude_key[] = "/module/wave_synth/amplitude";
+static const gchar amplitude_noise_key[] = "/module/wave_synth/amplitude_noise";
+static const gchar decay_key[] = "/module/wave_synth/decay";
+static const gchar decay_noise_key[] = "/module/wave_synth/decay_noise";
+static const gchar k_key[] = "/module/wave_synth/k";
+static const gchar k_noise_key[] = "/module/wave_synth/k_noise";
+static const gchar nwaves_key[] = "/module/wave_synth/nwaves";
+static const gchar quantity_key[] = "/module/wave_synth/quantity";
static const gchar randomize_key[] = "/module/wave_synth/randomize";
static const gchar seed_key[] = "/module/wave_synth/seed";
static const gchar type_key[] = "/module/wave_synth/type";
-static const gchar quantity_key[] = "/module/wave_synth/quantity";
-static const gchar nwaves_key[] = "/module/wave_synth/nwaves";
+static const gchar update_key[] = "/module/wave_synth/update";
static const gchar x_key[] = "/module/wave_synth/x";
static const gchar x_noise_key[] = "/module/wave_synth/x_noise";
static const gchar y_key[] = "/module/wave_synth/y";
static const gchar y_noise_key[] = "/module/wave_synth/y_noise";
-static const gchar amplitude_key[] = "/module/wave_synth/amplitude";
-static const gchar amplitude_noise_key[] = "/module/wave_synth/amplitude_noise";
-static const gchar k_key[] = "/module/wave_synth/k";
-static const gchar k_noise_key[] = "/module/wave_synth/k_noise";
static void
wave_synth_sanitize_args(WaveSynthArgs *args)
@@ -949,6 +1026,8 @@ wave_synth_sanitize_args(WaveSynthArgs *args)
args->amplitude_noise = CLAMP(args->amplitude_noise, 0.0, 1.0);
args->k = CLAMP(args->k, 0.01, 1000.0);
args->k_noise = CLAMP(args->k_noise, 0.0, 1.0);
+ args->decay = CLAMP(args->decay, -5.0, 0.0);
+ args->decay_noise = CLAMP(args->decay_noise, 0.0, 1.0);
}
static void
@@ -977,6 +1056,9 @@ wave_synth_load_args(GwyContainer *container,
&args->amplitude_noise);
gwy_container_gis_double_by_name(container, k_key, &args->k);
gwy_container_gis_double_by_name(container, k_noise_key, &args->k_noise);
+ gwy_container_gis_double_by_name(container, decay_key, &args->decay);
+ gwy_container_gis_double_by_name(container, decay_noise_key,
+ &args->decay_noise);
wave_synth_sanitize_args(args);
args->wave_table = g_new(gfloat, 2*APPROX_WAVE_SIZE);
@@ -1012,6 +1094,9 @@ wave_synth_save_args(GwyContainer *container,
args->amplitude_noise);
gwy_container_set_double_by_name(container, k_key, args->k);
gwy_container_set_double_by_name(container, k_noise_key, args->k_noise);
+ gwy_container_set_double_by_name(container, decay_key, args->decay);
+ gwy_container_set_double_by_name(container, decay_noise_key,
+ args->decay_noise);
gwy_dimensions_save_args(dimsargs, container, prefix);
}
diff --git a/modules/process/wpour_mark.c b/modules/process/wpour_mark.c
index 57022b6..e1561dd 100644
--- a/modules/process/wpour_mark.c
+++ b/modules/process/wpour_mark.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: wpour_mark.c 18537 2016-03-28 18:11:19Z yeti-dn $
+ * @(#) $Id: wpour_mark.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2014 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -188,12 +188,12 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Segments image using watershed with pre- and postprocessing."),
"Yeti <yeti at gwyddion.net>",
- "1.0",
+ "1.1",
"David Nečas (Yeti)",
"2014",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, wpour_mark)
static gboolean
module_register(void)
@@ -302,7 +302,7 @@ wpour_dialog(WPourArgs *args,
controls.mlayer = gwy_data_view_get_alpha_layer(GWY_DATA_VIEW(controls.view));
gtk_box_pack_start(GTK_BOX(hbox), controls.view, FALSE, FALSE, 4);
- table = gtk_table_new(10, 4, FALSE);
+ table = gtk_table_new(10, 3, FALSE);
gtk_table_set_row_spacings(GTK_TABLE(table), 2);
gtk_table_set_col_spacings(GTK_TABLE(table), 6);
gtk_container_set_border_width(GTK_CONTAINER(table), 4);
@@ -310,14 +310,14 @@ wpour_dialog(WPourArgs *args,
row = 0;
gtk_table_attach(GTK_TABLE(table), gwy_label_new_header(_("Preprocessing")),
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
gtkobj = gtk_adjustment_new(args->blur_fwhm, 0.0, 20.0, 0.01, 0.1, 0);
controls.blur_fwhm = GTK_ADJUSTMENT(gtkobj);
g_object_set_data(G_OBJECT(gtkobj), "target", &args->blur_fwhm);
- gwy_table_attach_hscale(table, row,
- _("Gaussian _smoothing:"), "px", gtkobj,
+ gwy_table_attach_adjbar(table, row,
+ _("Gaussian _smoothing:"), _("px"), gtkobj,
GWY_HSCALE_SQRT);
g_signal_connect_swapped(gtkobj, "value-changed",
G_CALLBACK(wpour_update_double), &controls);
@@ -346,27 +346,27 @@ wpour_dialog(WPourArgs *args,
gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
gtk_table_attach(GTK_TABLE(table), gwy_label_new_header(_("Postprocessing")),
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
gtk_table_attach(GTK_TABLE(table), gwy_label_new_header(_("Options")),
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
controls.inverted = gtk_check_button_new_with_mnemonic(_("_Invert height"));
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.inverted),
args->inverted);
gtk_table_attach(GTK_TABLE(table), controls.inverted,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect_swapped(controls.inverted, "toggled",
G_CALLBACK(inverted_changed), &controls);
row++;
controls.color_button = create_mask_color_button(controls.mydata, dialog,
0);
- gwy_table_attach_hscale(table, row, _("_Mask color:"), NULL,
+ gwy_table_attach_adjbar(table, row, _("_Mask color:"), NULL,
GTK_OBJECT(controls.color_button),
GWY_HSCALE_WIDGET_NO_EXPAND);
row++;
@@ -379,9 +379,9 @@ wpour_dialog(WPourArgs *args,
_("Preprocessed image"),
IMAGE_PREVIEW_PREPROC,
NULL);
- gwy_table_attach_hscale(table, row++, _("_Image preview:"), NULL,
+ gwy_table_attach_adjbar(table, row++, _("_Image preview:"), NULL,
GTK_OBJECT(controls.image_preview),
- GWY_HSCALE_WIDGET);
+ GWY_HSCALE_WIDGET_NO_EXPAND);
controls.mask_preview
= gwy_enum_combo_box_newl(G_CALLBACK(mask_preview_changed), &controls,
@@ -393,9 +393,9 @@ wpour_dialog(WPourArgs *args,
_("Postprocessed"),
MASK_PREVIEW_POSTPROCESSED,
NULL);
- gwy_table_attach_hscale(table, row++, _("_Mask preview:"), NULL,
+ gwy_table_attach_adjbar(table, row++, _("_Mask preview:"), NULL,
GTK_OBJECT(controls.mask_preview),
- GWY_HSCALE_WIDGET);
+ GWY_HSCALE_WIDGET_NO_EXPAND);
controls.update
= gwy_enum_combo_box_newl(G_CALLBACK(update_changed), &controls,
@@ -407,9 +407,9 @@ wpour_dialog(WPourArgs *args,
_("Preprocess and mark"),
UPDATE_MARK,
NULL);
- gwy_table_attach_hscale(table, row++, _("Instant:"), NULL,
+ gwy_table_attach_adjbar(table, row++, _("Instant:"), NULL,
GTK_OBJECT(controls.update),
- GWY_HSCALE_WIDGET);
+ GWY_HSCALE_WIDGET_NO_EXPAND);
row++;
controls.in_init = FALSE;
@@ -538,7 +538,7 @@ table_attach_threshold(GtkWidget *table, gint *row, const gchar *name,
adj = gtk_adjustment_new(*value, 0.0, 100.0, 0.01, 1.0, 0);
g_object_set_data(G_OBJECT(adj), "target", value);
- gwy_table_attach_hscale(table, *row, name, "%", adj, GWY_HSCALE_DEFAULT);
+ gwy_table_attach_adjbar(table, *row, name, "%", adj, GWY_HSCALE_DEFAULT);
g_signal_connect_swapped(adj, "value-changed",
G_CALLBACK(wpour_update_double), controls);
(*row)++;
diff --git a/modules/process/xydenoise.c b/modules/process/xydenoise.c
index 4e4a414..2c24997 100644
--- a/modules/process/xydenoise.c
+++ b/modules/process/xydenoise.c
@@ -30,6 +30,7 @@
#include <libgwymodule/gwymodule-process.h>
#include <libgwydgets/gwydgetutils.h>
#include <libgwydgets/gwycombobox.h>
+#include <libgwydgets/gwystock.h>
#include <app/gwymoduleutils.h>
#include <app/gwyapp.h>
@@ -61,7 +62,7 @@ static GwyModuleInfo module_info = {
"2012",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, xydenoise)
static gboolean
module_register(void)
@@ -69,7 +70,7 @@ module_register(void)
gwy_process_func_register("xydenoise",
(GwyProcessFunc)&xydenoise,
N_("/M_ultidata/_XY denoise..."),
- NULL,
+ GWY_STOCK_XY_DENOISE,
XYDENOISE_RUN_MODES,
GWY_MENU_FLAG_DATA,
N_("Denoises horizontal/vertical measurement."));
@@ -106,7 +107,7 @@ xydenoise_dialog(XYdenoiseArgs *args)
gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK);
gwy_help_add_to_proc_dialog(GTK_DIALOG(dialog), GWY_HELP_DEFAULT);
- table = gtk_table_new(9, 4, FALSE);
+ table = gtk_table_new(1, 3, FALSE);
gtk_table_set_row_spacings(GTK_TABLE(table), 2);
gtk_table_set_col_spacings(GTK_TABLE(table), 6);
gtk_container_set_border_width(GTK_CONTAINER(table), 4);
@@ -121,8 +122,8 @@ xydenoise_dialog(XYdenoiseArgs *args)
g_signal_connect(chooser, "changed",
G_CALLBACK(xydenoise_data_cb), &args->op2);
xydenoise_data_cb(GWY_DATA_CHOOSER(chooser), &args->op2);
- gwy_table_attach_hscale(table, row, _("Second direction:"), NULL,
- GTK_OBJECT(chooser), GWY_HSCALE_WIDGET);
+ gwy_table_attach_adjbar(table, row, _("Second direction:"), NULL,
+ GTK_OBJECT(chooser), GWY_HSCALE_WIDGET_NO_EXPAND);
gtk_table_set_row_spacing(GTK_TABLE(table), row, 8);
row++;
diff --git a/modules/process/xyzize.c b/modules/process/xyzize.c
index 1ade991..5c89dd6 100644
--- a/modules/process/xyzize.c
+++ b/modules/process/xyzize.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: xyzize.c 18951 2016-09-12 08:35:17Z yeti-dn $
+ * @(#) $Id: xyzize.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2016 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -45,7 +45,7 @@ static GwyModuleInfo module_info = {
"2016",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, xyzize)
static gboolean
module_register(void)
diff --git a/modules/pygwy/Makefile.am b/modules/pygwy/Makefile.am
index 19cfbfb..49b64fc 100644
--- a/modules/pygwy/Makefile.am
+++ b/modules/pygwy/Makefile.am
@@ -1,4 +1,4 @@
-# @(#) $Id: Makefile.am 19213 2016-11-09 08:53:16Z yeti-dn $
+# @(#) $Id: Makefile.am 20158 2017-08-03 15:20:40Z yeti-dn $
moduledir = $(pkglibdir)/modules
pygwyutildir = $(pkgdatadir)/pygwy
@@ -30,6 +30,7 @@ PYGWY_H_FILES = \
$(top_srcdir)/libprocess/peaks.h \
$(top_srcdir)/libprocess/simplefft.h \
$(top_srcdir)/libprocess/spectra.h \
+ $(top_srcdir)/libprocess/spline.h \
$(top_srcdir)/libprocess/stats.h \
$(top_srcdir)/libprocess/surface.h \
$(top_srcdir)/libprocess/tip.h \
@@ -192,8 +193,8 @@ EXTRA_DIST = \
override.defs \
pygwy-codegen.py \
pygwy-generate-doc.py \
- pygwy-fix-defs.py \
- pygwy-fix-defs.sed \
+ pygwy-fix-defs-1.py \
+ pygwy-fix-defs-2.py \
gwyutils.py
if OS_MSWIN
@@ -220,12 +221,12 @@ if ENABLE_PYGWY
BUILT_SOURCES = pygwywrap.c
pygwy_la_SOURCES = pygwy.c wrap_calls.c pygwy-console.c
pygwy_la_CFLAGS = @COMMON_CFLAGS@ @PYTHON_EXTRA_CFLAGS@ @GTKSOURCEVIEW_CFLAGS@ $(PYTHON_INCLUDES) $(PYGTK_CFLAGS)
-pygwy_la_LIBADD = $(module_libadd) $(PYTHON_LIBS) $(PYGTK_LIBS) @GTKSOURCEVIEW_LIBS@
+pygwy_la_LIBADD = $(module_libadd) $(PYTHON_LDFLAGS) $(PYGTK_LIBS) @GTKSOURCEVIEW_LIBS@
-pygwy.defs: $(PYGWY_H_FILES) Makefile.am pygwy-fix-defs.py pygwy-fix-defs.sed extra.defs
+pygwy.defs: $(PYGWY_H_FILES) Makefile.am pygwy-fix-defs-1.py pygwy-fix-defs-2.py extra.defs
$(AM_V_GEN)$(PYTHON) $(PYGTK_CODEGENDIR)/h2def.py $(PYGWY_H_FILES) \
- | sed -f pygwy-fix-defs.sed >pygwy.defs.tmp
- $(PYTHON) $(srcdir)/pygwy-fix-defs.py --codegendir=$(PYGTK_CODEGENDIR) >pygwy.defs
+ | $(PYTHON) $(srcdir)/pygwy-fix-defs-1.py >pygwy.defs.tmp
+ $(PYTHON) $(srcdir)/pygwy-fix-defs-2.py --codegendir=$(PYGTK_CODEGENDIR) >pygwy.defs
rm pygwy.defs.tmp
pygwy.lang: pygwy.defs override.defs
@@ -262,10 +263,11 @@ gwy_la_LIBADD = \
@PNG_LIBS@ @ZLIB@ @BZIP2@ @EXR_LIBS@ @XML2_LIBS@ @MINIZIP_LIBS@ @CFITSIO_LIBS@
gwy_la_LDFLAGS = -avoid-version -module $(no_undefined)
+if MODULE_DEPENDENCIES
+gwy_la_LDFLAGS += $(PYTHON_LDFLAGS)
+endif
if OS_DARWIN
gwy_la_LDFLAGS += -undefined dynamic_lookup
-else
-gwy_la_LIBADD += $(PYTHON_LIBS)
endif
if OS_MSWIN
diff --git a/modules/pygwy/Makefile.in b/modules/pygwy/Makefile.in
index b450d94..b191adc 100644
--- a/modules/pygwy/Makefile.in
+++ b/modules/pygwy/Makefile.in
@@ -14,7 +14,7 @@
@SET_MAKE@
-# @(#) $Id: Makefile.am 19213 2016-11-09 08:53:16Z yeti-dn $
+# @(#) $Id: Makefile.am 20158 2017-08-03 15:20:40Z yeti-dn $
@@ -93,8 +93,8 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
@ENABLE_PYGWY_FALSE at am__append_1 = pygwy.c gwy.c pygwy-console.c wrap_calls.c
- at ENABLE_PYGWY_TRUE@@OS_DARWIN_TRUE at am__append_2 = -undefined dynamic_lookup
- at ENABLE_PYGWY_TRUE@@OS_DARWIN_FALSE at am__append_3 = $(PYTHON_LIBS)
+ at ENABLE_PYGWY_TRUE@@MODULE_DEPENDENCIES_TRUE at am__append_2 = $(PYTHON_LDFLAGS)
+ at ENABLE_PYGWY_TRUE@@OS_DARWIN_TRUE at am__append_3 = -undefined dynamic_lookup
subdir = modules/pygwy
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/gconf-2.m4 \
@@ -146,8 +146,6 @@ am__installdirs = "$(DESTDIR)$(moduledir)" "$(DESTDIR)$(pyexecdir)" \
"$(DESTDIR)$(langdir)" "$(DESTDIR)$(pygwyutildir)"
LTLIBRARIES = $(module_LTLIBRARIES) $(pyexec_LTLIBRARIES)
am__DEPENDENCIES_1 =
- at ENABLE_PYGWY_TRUE@@OS_DARWIN_FALSE at am__DEPENDENCIES_2 = \
- at ENABLE_PYGWY_TRUE@@OS_DARWIN_FALSE@ $(am__DEPENDENCIES_1)
@ENABLE_PYGWY_TRUE at gwy_la_DEPENDENCIES = \
@ENABLE_PYGWY_TRUE@ $(top_builddir)/app/libgwyapp2.la \
@ENABLE_PYGWY_TRUE@ $(top_builddir)/libdraw/libgwydraw2.la \
@@ -155,7 +153,7 @@ am__DEPENDENCIES_1 =
@ENABLE_PYGWY_TRUE@ $(top_builddir)/libgwydgets/libgwydgets2.la \
@ENABLE_PYGWY_TRUE@ $(top_builddir)/libgwymodule/libgwymodule2.la \
@ENABLE_PYGWY_TRUE@ $(top_builddir)/libprocess/libgwyprocess2.la \
- at ENABLE_PYGWY_TRUE@ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2)
+ at ENABLE_PYGWY_TRUE@ $(am__DEPENDENCIES_1)
am__gwy_la_SOURCES_DIST = gwy.c wrap_calls.c
@ENABLE_PYGWY_TRUE at am_gwy_la_OBJECTS = gwy_la-gwy.lo \
@ENABLE_PYGWY_TRUE@ gwy_la-wrap_calls.lo
@@ -168,14 +166,14 @@ gwy_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(gwy_la_CFLAGS) $(CFLAGS) \
$(gwy_la_LDFLAGS) $(LDFLAGS) -o $@
@ENABLE_PYGWY_TRUE at am_gwy_la_rpath = -rpath $(pyexecdir)
- at MODULE_DEPENDENCIES_TRUE@am__DEPENDENCIES_3 = \
+ at MODULE_DEPENDENCIES_TRUE@am__DEPENDENCIES_2 = \
@MODULE_DEPENDENCIES_TRUE@ $(top_builddir)/app/libgwyapp2.la \
@MODULE_DEPENDENCIES_TRUE@ $(top_builddir)/libdraw/libgwydraw2.la \
@MODULE_DEPENDENCIES_TRUE@ $(top_builddir)/libgwyddion/libgwyddion2.la \
@MODULE_DEPENDENCIES_TRUE@ $(top_builddir)/libgwydgets/libgwydgets2.la \
@MODULE_DEPENDENCIES_TRUE@ $(top_builddir)/libgwymodule/libgwymodule2.la \
@MODULE_DEPENDENCIES_TRUE@ $(top_builddir)/libprocess/libgwyprocess2.la
- at ENABLE_PYGWY_TRUE@pygwy_la_DEPENDENCIES = $(am__DEPENDENCIES_3) \
+ at ENABLE_PYGWY_TRUE@pygwy_la_DEPENDENCIES = $(am__DEPENDENCIES_2) \
@ENABLE_PYGWY_TRUE@ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
am__pygwy_la_SOURCES_DIST = pygwy.c wrap_calls.c pygwy-console.c
@ENABLE_PYGWY_TRUE at am_pygwy_la_OBJECTS = pygwy_la-pygwy.lo \
@@ -289,10 +287,7 @@ EPYDOC = @EPYDOC@
EXEEXT = @EXEEXT@
EXR_CFLAGS = @EXR_CFLAGS@
EXR_LIBS = @EXR_LIBS@
-FFTW3_1_CFLAGS = @FFTW3_1_CFLAGS@
-FFTW3_1_LIBS = @FFTW3_1_LIBS@
FFTW3_CFLAGS = @FFTW3_CFLAGS@
-FFTW3_DEPENDENCY = @FFTW3_DEPENDENCY@
FFTW3_LIBS = @FFTW3_LIBS@
FGREP = @FGREP@
GCONFTOOL = @GCONFTOOL@
@@ -302,6 +297,8 @@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
GLIBC21 = @GLIBC21@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GMODULE_CFLAGS = @GMODULE_CFLAGS@
GMODULE_LIBS = @GMODULE_LIBS@
GMSGFMT = @GMSGFMT@
@@ -326,7 +323,9 @@ GTK_MAC_LIBS = @GTK_MAC_LIBS@
GWY_VERSION_MAJOR = @GWY_VERSION_MAJOR@
GWY_VERSION_MINOR = @GWY_VERSION_MINOR@
GWY_VERSION_STRING = @GWY_VERSION_STRING@
+HDRIMAGE_EXTRA_CFLAGS = @HDRIMAGE_EXTRA_CFLAGS@
HTML_DIR = @HTML_DIR@
+INKSCAPE = @INKSCAPE@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -384,6 +383,7 @@ PASCAL = @PASCAL@
PATH_SEPARATOR = @PATH_SEPARATOR@
PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
+PNGCRUSH = @PNGCRUSH@
PNG_CFLAGS = @PNG_CFLAGS@
PNG_LIBS = @PNG_LIBS@
POD2MAN = @POD2MAN@
@@ -392,17 +392,13 @@ PYGTK_CFLAGS = @PYGTK_CFLAGS@
PYGTK_CODEGENDIR = @PYGTK_CODEGENDIR@
PYGTK_LIBS = @PYGTK_LIBS@
PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
PYTHON_EXTRA_CFLAGS = @PYTHON_EXTRA_CFLAGS@
PYTHON_INCLUDES = @PYTHON_INCLUDES@
-PYTHON_LIBS = @PYTHON_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
PYTHON_PLATFORM = @PYTHON_PLATFORM@
PYTHON_PREFIX = @PYTHON_PREFIX@
-PYTHON_SYSCFG_BASECFLAGS = @PYTHON_SYSCFG_BASECFLAGS@
-PYTHON_SYSCFG_CCSHARED = @PYTHON_SYSCFG_CCSHARED@
-PYTHON_SYSCFG_LDFLAGS = @PYTHON_SYSCFG_LDFLAGS@
-PYTHON_SYSCFG_LIBDIR = @PYTHON_SYSCFG_LIBDIR@
-PYTHON_SYSCFG_LINKFORSHARED = @PYTHON_SYSCFG_LINKFORSHARED@
PYTHON_VERSION = @PYTHON_VERSION@
RANLIB = @RANLIB@
RUBY = @RUBY@
@@ -516,6 +512,7 @@ PYGWY_H_FILES = \
$(top_srcdir)/libprocess/peaks.h \
$(top_srcdir)/libprocess/simplefft.h \
$(top_srcdir)/libprocess/spectra.h \
+ $(top_srcdir)/libprocess/spline.h \
$(top_srcdir)/libprocess/stats.h \
$(top_srcdir)/libprocess/surface.h \
$(top_srcdir)/libprocess/tip.h \
@@ -670,8 +667,8 @@ EXTRA_DIST = \
override.defs \
pygwy-codegen.py \
pygwy-generate-doc.py \
- pygwy-fix-defs.py \
- pygwy-fix-defs.sed \
+ pygwy-fix-defs-1.py \
+ pygwy-fix-defs-2.py \
gwyutils.py
@OS_MSWIN_TRUE at no_undefined = -no-undefined
@@ -690,23 +687,24 @@ AM_LDFLAGS = -avoid-version -module $(no_undefined)
@ENABLE_PYGWY_TRUE at BUILT_SOURCES = pygwywrap.c
@ENABLE_PYGWY_TRUE at pygwy_la_SOURCES = pygwy.c wrap_calls.c pygwy-console.c
@ENABLE_PYGWY_TRUE at pygwy_la_CFLAGS = @COMMON_CFLAGS@ @PYTHON_EXTRA_CFLAGS@ @GTKSOURCEVIEW_CFLAGS@ $(PYTHON_INCLUDES) $(PYGTK_CFLAGS)
- at ENABLE_PYGWY_TRUE@pygwy_la_LIBADD = $(module_libadd) $(PYTHON_LIBS) $(PYGTK_LIBS) @GTKSOURCEVIEW_LIBS@
+ at ENABLE_PYGWY_TRUE@pygwy_la_LIBADD = $(module_libadd) $(PYTHON_LDFLAGS) $(PYGTK_LIBS) @GTKSOURCEVIEW_LIBS@
@ENABLE_PYGWY_TRUE at gwy_la_SOURCES = gwy.c wrap_calls.c
@ENABLE_PYGWY_TRUE at gwy_la_CFLAGS = @COMMON_CFLAGS@ @PYTHON_EXTRA_CFLAGS@ $(PYTHON_INCLUDES) $(PYGTK_CFLAGS)
# Link with all libraries modules are linked with. This is excessive but done
# to prevent some nested dlopening ‘can't find DLL’ problems in Win32.
- at ENABLE_PYGWY_TRUE@gwy_la_LIBADD = $(top_builddir)/app/libgwyapp2.la \
+ at ENABLE_PYGWY_TRUE@gwy_la_LIBADD = \
+ at ENABLE_PYGWY_TRUE@ $(top_builddir)/app/libgwyapp2.la \
@ENABLE_PYGWY_TRUE@ $(top_builddir)/libdraw/libgwydraw2.la \
@ENABLE_PYGWY_TRUE@ $(top_builddir)/libgwyddion/libgwyddion2.la \
@ENABLE_PYGWY_TRUE@ $(top_builddir)/libgwydgets/libgwydgets2.la \
@ENABLE_PYGWY_TRUE@ $(top_builddir)/libgwymodule/libgwymodule2.la \
@ENABLE_PYGWY_TRUE@ $(top_builddir)/libprocess/libgwyprocess2.la \
- at ENABLE_PYGWY_TRUE@ $(PYGTK_LIBS) @GTK_LIBS@ @PNG_LIBS@ @ZLIB@ \
- at ENABLE_PYGWY_TRUE@ @BZIP2@ @EXR_LIBS@ @XML2_LIBS@ \
- at ENABLE_PYGWY_TRUE@ @MINIZIP_LIBS@ @CFITSIO_LIBS@ \
- at ENABLE_PYGWY_TRUE@ $(am__append_3)
+ at ENABLE_PYGWY_TRUE@ $(PYGTK_LIBS) @GTK_LIBS@ \
+ at ENABLE_PYGWY_TRUE@ @PNG_LIBS@ @ZLIB@ @BZIP2@ @EXR_LIBS@ @XML2_LIBS@ @MINIZIP_LIBS@ @CFITSIO_LIBS@
+
@ENABLE_PYGWY_TRUE at gwy_la_LDFLAGS = -avoid-version -module \
- at ENABLE_PYGWY_TRUE@ $(no_undefined) $(am__append_2)
+ at ENABLE_PYGWY_TRUE@ $(no_undefined) $(am__append_2) \
+ at ENABLE_PYGWY_TRUE@ $(am__append_3)
CLEANFILES = gwy.py gwy.pyc gwy.pyo pygwy.lang boxed.override
DISTCLEANFILES = pygwy.defs pygwywrap.c
all: $(BUILT_SOURCES)
@@ -1163,10 +1161,10 @@ uninstall-am: uninstall-langDATA uninstall-moduleLTLIBRARIES \
.PRECIOUS: Makefile
- at ENABLE_PYGWY_TRUE@pygwy.defs: $(PYGWY_H_FILES) Makefile.am pygwy-fix-defs.py pygwy-fix-defs.sed extra.defs
+ at ENABLE_PYGWY_TRUE@pygwy.defs: $(PYGWY_H_FILES) Makefile.am pygwy-fix-defs-1.py pygwy-fix-defs-2.py extra.defs
@ENABLE_PYGWY_TRUE@ $(AM_V_GEN)$(PYTHON) $(PYGTK_CODEGENDIR)/h2def.py $(PYGWY_H_FILES) \
- at ENABLE_PYGWY_TRUE@ | sed -f pygwy-fix-defs.sed >pygwy.defs.tmp
- at ENABLE_PYGWY_TRUE@ $(PYTHON) $(srcdir)/pygwy-fix-defs.py --codegendir=$(PYGTK_CODEGENDIR) >pygwy.defs
+ at ENABLE_PYGWY_TRUE@ | $(PYTHON) $(srcdir)/pygwy-fix-defs-1.py >pygwy.defs.tmp
+ at ENABLE_PYGWY_TRUE@ $(PYTHON) $(srcdir)/pygwy-fix-defs-2.py --codegendir=$(PYGTK_CODEGENDIR) >pygwy.defs
@ENABLE_PYGWY_TRUE@ rm pygwy.defs.tmp
@ENABLE_PYGWY_TRUE at pygwy.lang: pygwy.defs override.defs
diff --git a/modules/pygwy/README.pygwy b/modules/pygwy/README.pygwy
index c92b824..226ddf4 100644
--- a/modules/pygwy/README.pygwy
+++ b/modules/pygwy/README.pygwy
@@ -3,7 +3,7 @@ Pygwy - Python binding for Gwyddion
Requirements
============
-Python >= 2.4
+Python >= 2.4
Pygtk >= 2.10, PyGObject >= 2.12, PyCairo >= 1.2: http://www.pygtk.org/
Compilation
@@ -14,7 +14,7 @@ By configure script:
Script location
================
The Python modules are stored in a Gwyddion user directory (~/.gwyddion/pygwy
-or %USER_DIRECTORY%/gwyddion/pygwy). The 'pygwy' directory is automatically
+or %USER_DIRECTORY%/gwyddion/pygwy). The 'pygwy' directory is automatically
created when it does not exist.
Documentation and API can be generated by using command 'make pygwy-doc' from
@@ -39,7 +39,7 @@ File module is used to import and export data. Complete module implements
following functions:
- detect_by_name(filename)
filename: string containing full path to file
- return value: return score <0,100> where value 0 reflects unknown type,
+ return value: return score <0,100> where value 0 reflects unknown type,
value 100 reflects known type
- detect_by_content(filename, head, tail, filesize)
@@ -47,7 +47,7 @@ following functions:
head: string containing few bytes from beginning of the file
tail: string containing few bytes from end of the file
filesize: lenght of file in bytes
- return value: return score <0,100> where value 0 reflects unknown type,
+ return value: return score <0,100> where value 0 reflects unknown type,
value 100 reflects known type
- load(filename)
@@ -57,7 +57,7 @@ following functions:
- save(data, filename)
data: container of data used for export
filename: full path to output file
- return value: True when export is successful, False otherwise
+ return value: True when export is successful, False otherwise
Volume module
@@ -71,12 +71,12 @@ the current data container.
Module variables
================
-Every module must have defined variables which are used to determine
+Every module must have defined variables which are used to determine
the module type, location in menu and description.
Required variables for file type module (example):
plugin_type = "FILE"
-plugin_desc = "High definition stable format store (.hdsf)"
+plugin_desc = "High definition stable format store (.hdsf)"
Required variables for process type module (example):
plugin_menu = "/Poodle" # the plugin will be located in Data Process/Poodle
@@ -88,7 +88,7 @@ plugin_type = "VOLUME"
Module debuging
===============
-Currently there is not much options to perform module debugging.
+Currently there is not much options to perform module debugging.
Only Python exceptions are written to standard output.
Example process module
@@ -142,12 +142,12 @@ def load(filename):
def save(data, filename):
f = open(filename, "w")
- datafield_num = 1
+ datafield_num = 1
for key in data.keys():
if isinstance(data.get_object(key), gwy.DataField):
d = data.get_object(key)
f.write("Datafield "+ str(datafield_num) + '\n')
- datafield_num += 1
+ datafield_num += 1
for row in range(d.get_yres()):
for col in range(d.get_xres()):
f.write(str(d.get_val(col, row))+'\n')
@@ -210,7 +210,7 @@ Bending C API to work in Python
and then putting the generic code than handles them here. It will
automatically appear in methods.
-3. Modifying the .defs file: in extra.defs and pygwy-fix-defs.py.
+3. Modifying the .defs file: in extra.defs and pygwy-fix-defs-{1,2}.py.
Extra definition in extra.defs are simply included in pygwy.defs. Some
things, such as boxed types, are easier to just write directly here. For
@@ -220,7 +220,7 @@ Bending C API to work in Python
Here we rewrite argument types and add attributes to arguments or functions.
Arguments and functions can be skipped here or attain default values.
- In addition, pygwy-fix-defs.py generates some direct code into
+ In addition, pygwy-fix-defs-2.py generates some direct code into
boxed.override defining setters for plain C structs. There may be some
reasonable way of teaching codegen to do this automatically by patching
Wrapper.write_getsets() but this may be too fragile.
@@ -239,12 +239,12 @@ easily into Python:
A) Plain structs and pointer types. We handle them by boxing them in C.
Explicit boxed type record in extra.defs is necessary. Setters for some
- field types are directly generated by pygwy-fix-defs.py, other have to
+ field types are directly generated by pygwy-fix-defs-2.py, other have to
be explicitly defined in pygwy.override.
B) Multiple return values, passed as pointers to things-to-fill. This is now
relatively simple. We rewrite them to GwyWhateverOutArg in
- pygwy-fix-defs.py and the function writer in pygwy-codegen.py knows how
+ pygwy-fix-defs-2.py and the function writer in pygwy-codegen.py knows how
to sort arguments to input and output and write a function that returns a
tuple if necessary.
diff --git a/modules/pygwy/extra.defs b/modules/pygwy/extra.defs
index 36e4e01..75f170e 100644
--- a/modules/pygwy/extra.defs
+++ b/modules/pygwy/extra.defs
@@ -52,6 +52,11 @@
(gtype-id "GWY_TYPE_PEAKS")
)
+(define-boxed Spline
+ (c-name "GwySpline")
+ (gtype-id "GWY_TYPE_SPLINE")
+)
+
(define-method set_string_by_name
(of-object "GwyContainer")
(c-name "gwy_container_set_const_string_by_name")
@@ -72,3 +77,23 @@
)
)
+(define-enum CWT2DWaveletType
+ (in-module "Gwy")
+ (c-name "Gwy2DCWTWaveletType")
+ (gtype-id "GWY_TYPE_2D_CWT_WAVELET_TYPE")
+ (values
+ '("gauss" "GWY_2DCWT_GAUSS")
+ '("hat" "GWY_2DCWT_HAT")
+ )
+)
+
+(define-pointer ComputationState
+ (c-name "GwyComputationState")
+ (gtype-id "GWY_TYPE_COMPUTATION_STATE")
+)
+
+(define-pointer TipModelPreset
+ (c-name "GwyTipModelPreset")
+ (gtype-id "GWY_TYPE_TIP_MODEL_PRESET")
+)
+
diff --git a/modules/pygwy/gwy.c b/modules/pygwy/gwy.c
index a3b9deb..5ddb3b3 100644
--- a/modules/pygwy/gwy.c
+++ b/modules/pygwy/gwy.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: gwy.c 19289 2016-11-18 10:30:23Z yeti-dn $
+ * @(#) $Id: gwy.c 19573 2017-04-04 09:40:08Z yeti-dn $
* Copyright (C) 2012-2016 David Necas (Yeti), Petr Klapetek, Jozef Vesely.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net, vesely at gjh.sk.
*
@@ -20,7 +20,7 @@
*/
#include "config.h"
-#include <pygtk-2.0/pygobject.h>
+#include <pygobject.h>
#include <app/gwyapp.h>
#include "wrap_calls.h"
#include "pygwy.h"
@@ -72,7 +72,8 @@ load_modules(void)
}
/* FIXME: It would be better to just fix the flags using RTLD_NOLOAD because
- * the libraries are surely loaded. */
+ * the libraries are surely loaded. But that is not possible using the
+ * GModule API. */
static gboolean
reload_libraries(void)
{
@@ -83,12 +84,20 @@ reload_libraries(void)
"libgwyddion2", "libgwyprocess2", "libgwydraw2", "libgwydgets2",
"libgwymodule2", "libgwyapp2",
};
+#ifdef __APPLE__
+ /* Darwin has soname_spec='$libname$release$major$shared_ext' */
+ static const gchar *soname_format = "%s.0.%s";
+#else
+ /* ELF systems generally have
+ * soname_spec='$libname$release$shared_ext$major' */
+ static const gchar *soname_format = "%s.%s.0";
+#endif
guint i;
for (i = 0; i < G_N_ELEMENTS(gwyddion_libs); i++) {
- gchar *filename = g_strconcat(gwyddion_libs[i],
- ".", GWY_SHARED_LIBRARY_EXTENSION, ".0",
- NULL);
+ gchar *filename = g_strdup_printf(soname_format,
+ gwyddion_libs[i],
+ GWY_SHARED_LIBRARY_EXTENSION);
GModule *modhandle = g_module_open(filename, G_MODULE_BIND_LAZY);
if (!modhandle) {
gchar *excstr = g_strdup_printf("Cannot dlopen() %s.", filename);
diff --git a/modules/pygwy/pygwy-codegen.py b/modules/pygwy/pygwy-codegen.py
index 60c747e..acb11bb 100644
--- a/modules/pygwy/pygwy-codegen.py
+++ b/modules/pygwy/pygwy-codegen.py
@@ -1,5 +1,5 @@
#!/usr/bin/python
-# $Id: pygwy-codegen.py 19172 2016-11-03 15:37:05Z yeti-dn $
+# $Id: pygwy-codegen.py 20146 2017-08-02 20:31:56Z yeti-dn $
# Runtime for pygtk module codegen.py and overriden functions for Gwyddion data
# types.
# Public domain
@@ -320,9 +320,49 @@ class GwyIntArrayOutArg(argtypes.ArgType):
def write_param(self, ptype, pname, pdflt, pnull, info):
info.varlist.add('GArray', '*'+pname)
info.arglist.append(pname)
- info.codebefore.append(' '+pname+' = g_array_new(FALSE, FALSE, sizeof(gdouble));\n')
+ info.codebefore.append(' '+pname+' = g_array_new(FALSE, FALSE, sizeof(gint));\n')
info.codeafter.append(' PyTuple_SetItem(py_tuple_ret, py_tuple_index++, create_list_consume_int_garray('+pname+'));\n')
+class GwyStringArray(argtypes.ArgType):
+ def write_param(self, ptype, pname, pdflt, pnull, info):
+ # NB: We do not free the GArray. The callee must always do it. This
+ # makes memory leaks less likely when we raise exceptions and have
+ # multiple arrays.
+ info.varlist.add('GArray', '*'+pname + ' = NULL');
+ info.varlist.add('PyObject', '*'+pname+'_pyobj')
+ if pnull:
+ info.add_parselist('|O', ['&'+pname+'_pyobj'], [pname])
+ else:
+ info.add_parselist('O', ['&'+pname+'_pyobj'], [pname])
+ info.arglist.append(pname)
+ xnull = pname + '_pyobj && ' if pnull else ''
+ info.codebefore.append(' if ('+xnull+'!('+pname+' = create_string_garray_from_sequence('+pname+'_pyobj))) {\n')
+ info.codebefore.append(' PyErr_SetString(PyExc_TypeError, "Parameter \''+pname+'\' must be a sequence of strings");\n')
+ info.codebefore.append(' return NULL;\n')
+ info.codebefore.append(' }\n')
+
+ def write_return(self, ptype, ownsreturn, info):
+ info.varlist.add('GArray', '*ret')
+ info.codeafter.append(' return create_list_consume_string_garray(ret);\n')
+
+class GwyConstStringArray(argtypes.ArgType):
+ def write_param(self, ptype, pname, pdflt, pnull, info):
+ # We cannot get input const array because strings from Python are
+ # duplicated to handle the string/unicode duality.
+ assert not 'Reached'
+
+ def write_return(self, ptype, ownsreturn, info):
+ info.varlist.add('GArray', '*ret')
+ info.codeafter.append(' return create_list_consume_const_string_garray(ret);\n')
+
+# Pointer/boxed argument types
+class GwyConstPointerArg(argtypes.PointerArg):
+ "Pointers that have const (like presets)."
+ def write_return(self, ptype, ownsreturn, info):
+ assert ptype[-1] == '*'
+ info.varlist.add('const '+self.typename, '*ret')
+ info.codeafter.append(' return pyg_pointer_new('+self.typecode+', (gpointer)ret);\n')
+
# GTK+ types we need because they appear as arguments?
# We certainly get `No ArgType' messages for types we do not list here.
argtypes.matcher.register_object('GdkGC', None, 'GDK_TYPE_GC')
@@ -378,6 +418,11 @@ argtypes.matcher.register('GwyDoubleArray*', GwyDoubleArray())
argtypes.matcher.register('GwyDoubleArrayOutArg', GwyDoubleArrayOutArg())
argtypes.matcher.register('GwyIntArray*', GwyIntArray())
argtypes.matcher.register('GwyIntArrayOutArg', GwyIntArrayOutArg())
+argtypes.matcher.register('GwyStringArray*', GwyStringArray())
+argtypes.matcher.register('GwyConstStringArray*', GwyConstStringArray())
+
+# Pointer/boxed stuff
+argtypes.matcher.register('const-GwyTipModelPreset*', GwyConstPointerArg('GwyTipModelPreset', 'GWY_TYPE_TIP_MODEL_PRESET'))
# Run codegen
sys.exit(main(sys.argv))
diff --git a/modules/pygwy/pygwy-console.c b/modules/pygwy/pygwy-console.c
index 399d492..7e47b13 100644
--- a/modules/pygwy/pygwy-console.c
+++ b/modules/pygwy/pygwy-console.c
@@ -1,7 +1,9 @@
/*
- * @(#) $Id: pygwy-console.c 19265 2016-11-15 12:22:37Z yeti-dn $
+ * @(#) $Id: pygwy-console.c 19331 2016-11-29 23:17:13Z yeti-dn $
* Copyright (C) 2008 Jan Horak
* E-mail: xhorak at gmail.com
+ * Copyright (C) 2014-2016 David Necas (Yeti).
+ * E-mail: yeti at gwyddion.net.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -22,8 +24,8 @@
*/
#include "config.h"
-#include "pygwy-console.h"
-#include "pygwy.h"
+#include <Python.h>
+#include <glib/gstdio.h>
#include <gdk/gdkkeysyms.h>
#include <libgwyddion/gwymacros.h>
#include <libgwydgets/gwystock.h>
@@ -35,23 +37,65 @@
#include <gtksourceview/gtksourcelanguagemanager.h>
#endif
-static void pygwy_console_save_as_file (GtkToolButton *btn,
- gpointer user_data);
-static void pygwy_console_run (GwyContainer *data,
- GwyRunType run,
- const gchar *name);
-static void pygwy_console_command_execute(GtkEntry *entry,
- gpointer user_data);
-static void pygwy_console_clear_output (GtkToolButton *btn,
- gpointer user_data);
+#include "pygwy-console.h"
+#include "pygwy.h"
+
+enum {
+ NRECENT = 12
+};
+
+typedef struct {
+ GtkWidget *window;
+ PyObject *std_err;
+ PyObject *dictionary;
+ GtkWidget *console_output;
+ GtkWidget *console_file_content;
+ GtkToolItem *open_item;
+ gchar *script_filename;
+ GArray *recent_scripts;
+} PygwyConsoleSetup;
+
+static void pygwy_console_open (GtkToolButton *btn,
+ gpointer user_data);
+static void pygwy_console_save (GtkToolButton *button,
+ gpointer user_data);
+static void pygwy_console_save_as (GtkToolButton *button,
+ gpointer user_data);
+static void pygwy_console_run (GtkToolButton *button,
+ gpointer user_data);
+static void pygwy_console (GwyContainer *data,
+ GwyRunType run,
+ const gchar *name);
+static void pygwy_console_command_execute (GtkEntry *entry,
+ gpointer user_data);
+static void pygwy_console_clear_output (GtkToolButton *btn,
+ gpointer user_data);
+static void pygwy_console_append_message (const gchar *message);
+static gboolean pygwy_console_add_scriptfile (const gchar *filename);
+static void pygwy_console_load_recent (void);
+static void pygwy_console_save_recent (void);
+static void pygwy_console_rebuild_recent_menu(void);
+static GtkWidget* pygwy_console_create_recent_menu (void);
+static void pygwy_console_open_recent (GtkMenuItem *item,
+ gpointer user_data);
static PygwyConsoleSetup *console_setup = NULL;
void
pygwy_register_console(void)
{
+ gchar *path;
+
+ path = g_build_filename(gwy_get_user_dir(), "pygwy_console", NULL);
+ if (!g_file_test(path, G_FILE_TEST_IS_DIR)) {
+ g_mkdir(path, 0700);
+ if (!g_file_test(path, G_FILE_TEST_IS_DIR))
+ g_warning("Cannot create pygwy console data directory.");
+ }
+ g_free(path);
+
gwy_process_func_register("pygwy_console",
- pygwy_console_run,
+ pygwy_console,
N_("/Pygwy Console"),
GWY_STOCK_PYGWY,
GWY_RUN_IMMEDIATE,
@@ -59,7 +103,7 @@ pygwy_register_console(void)
N_("Python wrapper console"));
}
-static char*
+static const char*
pygwy_console_run_command(const gchar *cmd, int mode)
{
if (!cmd) {
@@ -71,7 +115,7 @@ pygwy_console_run_command(const gchar *cmd, int mode)
g_warning("Console setup structure is not defined!");
return NULL;
}
- /* store _pygwy_stderr_redir location */
+ /* store _pygwy_output_redir location */
pygwy_run_string(cmd,
mode,
console_setup->dictionary,
@@ -85,212 +129,6 @@ pygwy_console_run_command(const gchar *cmd, int mode)
"_pygwy_stderr_string"));
}
-static void
-pygwy_console_append(gchar *msg)
-{
- GtkTextBuffer *console_buf;
- GtkTextIter start_iter, end_iter;
- GtkTextView *textview;
- GString *output;
- GtkTextMark *end_mark;
-
- if (!msg) {
- g_warning("No message to append.");
- return;
- }
- if (!console_setup) {
- g_warning("Console setup structure is not defined!");
- return;
- }
- /* read string which contain last command output */
- textview = GTK_TEXT_VIEW(console_setup->console_output);
- console_buf = gtk_text_view_get_buffer(textview);
- gtk_text_buffer_get_bounds(console_buf, &start_iter, &end_iter);
-
- /* get output widget content */
- output = g_string_new(gtk_text_buffer_get_text(console_buf,
- &start_iter, &end_iter,
- FALSE));
-
- /* append input line */
- output = g_string_append(output, msg);
- gtk_text_buffer_set_text(console_buf, output->str, -1);
- g_string_free(output, TRUE);
-
- /* scroll to end */
- gtk_text_buffer_get_end_iter(console_buf, &end_iter);
- end_mark = gtk_text_buffer_create_mark(console_buf, "cursor", &end_iter,
- FALSE);
- g_object_ref(end_mark);
- gtk_text_view_scroll_to_mark(GTK_TEXT_VIEW(console_setup->console_output),
- end_mark, 0.0, FALSE, 0.0, 0.0);
- g_object_unref(end_mark);
-
-}
-
-static void
-pygwy_console_run_file(GtkToolButton *btn, gpointer user_data)
-{
- GtkTextView *textview;
- GtkTextBuffer *console_file_buf;
- GtkTextIter start_iter, end_iter;
- gchar *output, *file_info_line, *script;
-
- textview = GTK_TEXT_VIEW(console_setup->console_file_content);
- console_file_buf = gtk_text_view_get_buffer(textview);
-
- file_info_line = g_strdup_printf(_(">>> Running the script above\n"));
- pygwy_console_append(file_info_line);
-
- gtk_text_buffer_get_bounds(console_file_buf, &start_iter, &end_iter);
- script = gtk_text_buffer_get_text(console_file_buf,
- &start_iter, &end_iter, FALSE);
- output = pygwy_console_run_command(script, Py_file_input);
- g_free(script);
- pygwy_console_append(output);
-}
-
-static void
-fix_eols_to_unix(gchar *text)
-{
- gchar *p = strchr(text, '\r');
- guint i, j;
-
- /* Unix */
- if (!p)
- return;
-
- /* Mac */
- if (p[1] != '\n') {
- do {
- *p = '\n';
- } while ((p = strchr(p+1, '\r')));
-
- return;
- }
-
- /* MS-DOS */
- for (i = 0, j = 0; text[i]; i++) {
- if (text[i] != '\r') {
- text[j] = text[i];
- j++;
- }
- }
- text[j] = '\0';
-}
-
-static void
-pygwy_console_open_file(GtkToolButton *btn, gpointer user_data)
-{
- GtkWidget *file_chooser;
- GtkFileFilter *filter = gtk_file_filter_new();
- GtkTextBuffer *console_file_buf;
- GtkTextView *textview;
-
- gtk_file_filter_add_mime_type(filter, "text/x-python");
- gtk_file_filter_add_pattern(filter, "*.py");
-
- file_chooser
- = gtk_file_chooser_dialog_new(_("Open Python script"),
- NULL,
- GTK_FILE_CHOOSER_ACTION_OPEN,
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
- NULL);
- gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(file_chooser), filter);
- if (gtk_dialog_run(GTK_DIALOG(file_chooser)) == GTK_RESPONSE_ACCEPT) {
- gchar *file_content;
- GError *err = NULL;
-
- g_free(console_setup->script_filename);
- console_setup->script_filename = gtk_file_chooser_get_filename
- (GTK_FILE_CHOOSER(file_chooser));
- if (!g_file_get_contents(console_setup->script_filename,
- &file_content,
- NULL,
- &err)) {
- gchar *message = g_strdup_printf("Cannot read content of file "
- "'%s': %s",
- console_setup->script_filename,
- err->message);
- g_clear_error(&err);
- pygwy_console_append(message);
- g_free(message);
- g_free(console_setup->script_filename);
- }
- else {
- fix_eols_to_unix(file_content);
-
- /* read string which contain last command output */
- textview = GTK_TEXT_VIEW(console_setup->console_file_content);
- console_file_buf = gtk_text_view_get_buffer(textview);
-
- /* append input line */
- gtk_text_buffer_set_text(console_file_buf, file_content, -1);
-
- g_free(file_content);
- }
- }
- gtk_widget_destroy(GTK_WIDGET(file_chooser));
-}
-
-static void
-pygwy_console_save_file(GtkToolButton *btn, gpointer user_data)
-{
- GtkTextView *textview;
- GtkTextBuffer *buf;
- GtkTextIter start_iter, end_iter;
- gchar *script;
- FILE *f;
-
- if (console_setup->script_filename == NULL) {
- pygwy_console_save_as_file(btn, user_data);
- }
- else {
- textview = GTK_TEXT_VIEW(console_setup->console_file_content);
- buf = gtk_text_view_get_buffer(textview);
- gtk_text_buffer_get_bounds(buf, &start_iter, &end_iter);
- script = gtk_text_buffer_get_text(buf, &start_iter, &end_iter, FALSE);
- f = gwy_fopen(console_setup->script_filename, "wb");
- if (f) {
- fwrite(script, 1, strlen(script), f);
- fclose(f);
- }
- else {
- gchar *message = g_strdup_printf("Cannot open file '%s': %s",
- console_setup->script_filename,
- g_strerror(errno));
- pygwy_console_append(message);
- g_free(message);
- }
- g_free(script);
- }
-}
-
-static void
-pygwy_console_save_as_file(GtkToolButton *btn, gpointer user_data)
-{
- GtkWidget *dialog;
-
- dialog = gtk_file_chooser_dialog_new(_("Save Script as"),
- NULL,
- GTK_FILE_CHOOSER_ACTION_SAVE,
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
- NULL);
- gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(dialog), TRUE);
-
- /*gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog), default_folder_for_saving); */
- gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(dialog),
- "Untitled document");
-
- if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
- console_setup->script_filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
- pygwy_console_save_file(btn, user_data);
- }
- gtk_widget_destroy(dialog);
-}
-
static gboolean
key_pressed(GtkWidget *widget, GdkEventKey *event,
G_GNUC_UNUSED PygwyConsoleSetup *setup)
@@ -307,9 +145,9 @@ static void
pygwy_console_create_gui(void)
{
GtkWidget *console_win, *vbox1, *console_scrolledwin, *file_scrolledwin,
- *vpaned, *frame, *image_clear;
- GtkWidget *entry_input, *button_bar, *button_open, *button_run,
- *button_save, *button_save_as, *button_clearout;
+ *vpaned, *frame, *icon;
+ GtkWidget *entry_input, *button_bar;
+ GtkToolItem *item;
GtkTextView *file_textview, *output_textview;
PangoFontDescription *font_desc;
GtkAccelGroup *accel_group;
@@ -321,55 +159,77 @@ pygwy_console_create_gui(void)
#endif
/* create static structure; */
- console_setup = g_new(PygwyConsoleSetup, 1);
+ console_setup = g_new0(PygwyConsoleSetup, 1);
+ console_setup->recent_scripts = g_array_new(FALSE, FALSE, sizeof(gchar*));
+ pygwy_console_load_recent();
+
/* create GUI */
console_win = console_setup->window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(console_win), _("Pygwy Console"));
-
- vbox1 = gtk_vbox_new(FALSE, 0);
- gtk_container_add(GTK_CONTAINER(console_win), vbox1);
-
- /* buttons */
- button_open = GTK_WIDGET(gtk_tool_button_new_from_stock(GTK_STOCK_OPEN));
- button_save = GTK_WIDGET(gtk_tool_button_new_from_stock(GTK_STOCK_SAVE));
- button_save_as = GTK_WIDGET(gtk_tool_button_new_from_stock(GTK_STOCK_SAVE_AS));
- button_run = GTK_WIDGET(gtk_tool_button_new_from_stock(GTK_STOCK_EXECUTE));
- image_clear = gtk_image_new_from_stock(GTK_STOCK_CLEAR,
- GTK_ICON_SIZE_LARGE_TOOLBAR);
- button_clearout = GTK_WIDGET(gtk_tool_button_new(image_clear,
- _("Clear Log")));
- button_bar_tips = gtk_tooltips_new();
- gtk_tooltips_set_tip(GTK_TOOLTIPS(button_bar_tips),
- button_open,
- _("Open script in Python language (Ctrl-O)"), "");
- gtk_tooltips_set_tip(GTK_TOOLTIPS(button_bar_tips),
- button_save, _("Save script (Ctrl-S)"), "");
- gtk_tooltips_set_tip(GTK_TOOLTIPS(button_bar_tips),
- button_run, _("Execute script (Ctrl-E)"), "");
accel_group = gtk_accel_group_new();
- gtk_widget_add_accelerator(button_run, "clicked", accel_group,
- GDK_E, (GdkModifierType)GDK_CONTROL_MASK,
- GTK_ACCEL_VISIBLE);
- gtk_widget_add_accelerator(button_open, "clicked", accel_group,
- GDK_O, (GdkModifierType)GDK_CONTROL_MASK,
- GTK_ACCEL_VISIBLE);
- gtk_widget_add_accelerator(button_save, "clicked", accel_group,
- GDK_S, (GdkModifierType)GDK_CONTROL_MASK,
- GTK_ACCEL_VISIBLE);
gtk_window_add_accel_group(GTK_WINDOW(console_win), accel_group);
g_signal_connect(console_win, "key-press-event",
G_CALLBACK(key_pressed), console_setup);
+ vbox1 = gtk_vbox_new(FALSE, 0);
+ gtk_container_add(GTK_CONTAINER(console_win), vbox1);
+
+ /* Buttons. */
button_bar = gtk_toolbar_new();
- gtk_toolbar_insert(GTK_TOOLBAR(button_bar), GTK_TOOL_ITEM(button_open), -1);
- gtk_toolbar_insert(GTK_TOOLBAR(button_bar), GTK_TOOL_ITEM(button_save), -1);
- gtk_toolbar_insert(GTK_TOOLBAR(button_bar), GTK_TOOL_ITEM(button_save_as), -1);
- gtk_toolbar_insert(GTK_TOOLBAR(button_bar), GTK_TOOL_ITEM(button_run), -1);
- gtk_toolbar_insert(GTK_TOOLBAR(button_bar), GTK_TOOL_ITEM(button_clearout), -1);
+ button_bar_tips = gtk_tooltips_new();
gtk_box_pack_start(GTK_BOX(vbox1), button_bar, FALSE, FALSE, 0);
gtk_toolbar_set_style(GTK_TOOLBAR(button_bar), GTK_TOOLBAR_BOTH);
- /* window */
+ /* Open. */
+ item = gtk_menu_tool_button_new_from_stock(GTK_STOCK_OPEN);
+ console_setup->open_item = item;
+ gtk_tooltips_set_tip(button_bar_tips, GTK_WIDGET(item),
+ _("Open script in Python language (Ctrl-O)"), NULL);
+ gtk_widget_add_accelerator(GTK_WIDGET(item), "clicked", accel_group,
+ GDK_O, GDK_CONTROL_MASK,
+ GTK_ACCEL_VISIBLE);
+ gtk_toolbar_insert(GTK_TOOLBAR(button_bar), item, -1);
+ g_signal_connect(item, "clicked", G_CALLBACK(pygwy_console_open), NULL);
+
+ /* Save. */
+ item = gtk_tool_button_new_from_stock(GTK_STOCK_SAVE);
+ gtk_tooltips_set_tip(button_bar_tips, GTK_WIDGET(item),
+ _("Save script (Ctrl-S)"), NULL);
+ gtk_widget_add_accelerator(GTK_WIDGET(item), "clicked", accel_group,
+ GDK_S, GDK_CONTROL_MASK,
+ GTK_ACCEL_VISIBLE);
+ gtk_toolbar_insert(GTK_TOOLBAR(button_bar), item, -1);
+ g_signal_connect(item, "clicked", G_CALLBACK(pygwy_console_save), NULL);
+
+ /* Save as. */
+ item = gtk_tool_button_new_from_stock(GTK_STOCK_SAVE_AS);
+ gtk_tooltips_set_tip(button_bar_tips, GTK_WIDGET(item),
+ _("Save script as (Ctrl-Shift-S)"), NULL);
+ gtk_widget_add_accelerator(GTK_WIDGET(item), "clicked", accel_group,
+ GDK_S, GDK_CONTROL_MASK | GDK_SHIFT_MASK,
+ GTK_ACCEL_VISIBLE);
+ gtk_toolbar_insert(GTK_TOOLBAR(button_bar), item, -1);
+ g_signal_connect(item, "clicked", G_CALLBACK(pygwy_console_save_as), NULL);
+
+ /* Run. */
+ item = gtk_tool_button_new_from_stock(GTK_STOCK_EXECUTE);
+ gtk_tooltips_set_tip(button_bar_tips, GTK_WIDGET(item),
+ _("Execute script (Ctrl-E)"), NULL);
+ gtk_widget_add_accelerator(GTK_WIDGET(item), "clicked", accel_group,
+ GDK_E, GDK_CONTROL_MASK,
+ GTK_ACCEL_VISIBLE);
+ gtk_toolbar_insert(GTK_TOOLBAR(button_bar), item, -1);
+ g_signal_connect(item, "clicked", G_CALLBACK(pygwy_console_run), NULL);
+
+ /* Clear. */
+ icon = gtk_image_new_from_stock(GTK_STOCK_CLEAR,
+ GTK_ICON_SIZE_LARGE_TOOLBAR);
+ item = gtk_tool_button_new(icon, _("Clear Log"));
+ gtk_toolbar_insert(GTK_TOOLBAR(button_bar), item, -1);
+ g_signal_connect(item, "clicked",
+ G_CALLBACK(pygwy_console_clear_output), NULL);
+
+ /* Text areas. */
vpaned = gtk_vpaned_new();
gtk_box_pack_start(GTK_BOX(vbox1), vpaned, TRUE, TRUE, 0);
file_scrolledwin = gtk_scrolled_window_new(NULL, NULL);
@@ -387,7 +247,6 @@ pygwy_console_create_gui(void)
gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(console_scrolledwin),
GTK_SHADOW_IN);
-
/* console output */
console_setup->console_output = gtk_text_view_new();
output_textview = GTK_TEXT_VIEW(console_setup->console_output);
@@ -434,17 +293,8 @@ pygwy_console_create_gui(void)
/* entry widget on ENTER */
g_signal_connect(entry_input, "activate",
G_CALLBACK(pygwy_console_command_execute), NULL);
- /* open script signal connect */
- g_signal_connect(button_open, "clicked",
- G_CALLBACK(pygwy_console_open_file), NULL);
- g_signal_connect(button_run, "clicked",
- G_CALLBACK(pygwy_console_run_file), NULL);
- g_signal_connect(button_save, "clicked",
- G_CALLBACK(pygwy_console_save_file), NULL);
- g_signal_connect(button_save_as, "clicked",
- G_CALLBACK(pygwy_console_save_as_file), NULL);
- g_signal_connect(button_clearout, "clicked",
- G_CALLBACK(pygwy_console_clear_output), NULL);
+
+ pygwy_console_rebuild_recent_menu();
/* connect on window close() */
g_signal_connect(console_win, "delete-event",
@@ -455,7 +305,7 @@ pygwy_console_create_gui(void)
}
static void
-pygwy_console_run(GwyContainer *data, GwyRunType run, const gchar *name)
+pygwy_console(GwyContainer *data, GwyRunType run, const gchar *name)
{
PyObject *d;
@@ -483,7 +333,7 @@ pygwy_console_run(GwyContainer *data, GwyRunType run, const gchar *name)
d);
/* store values for closing console */
- console_setup->std_err = PyDict_GetItemString(d, "_pygwy_stderr_redir");
+ console_setup->std_err = PyDict_GetItemString(d, "_pygwy_output_redir");
Py_INCREF(console_setup->std_err);
console_setup->dictionary = d;
}
@@ -492,23 +342,373 @@ static void
pygwy_console_command_execute(GtkEntry *entry,
G_GNUC_UNUSED gpointer user_data)
{
- gchar *input_line;
- const gchar *command;
- GString *output;
+ const gchar *command, *output;
+ gchar *message;
command = gtk_entry_get_text(entry);
if (!strlen(command))
return;
- input_line = g_strconcat(">>> ", command, "\n", NULL);
- output = g_string_new(input_line);
- g_string_append(output,
- pygwy_console_run_command(command, Py_single_input));
+ output = pygwy_console_run_command(command, Py_single_input);
+ message = g_strconcat(">>> ", command, "\n", output, NULL);
+ pygwy_console_append_message(message);
+ g_free(message);
+ gtk_editable_select_region(GTK_EDITABLE(entry), 0, -1);
+}
- pygwy_console_append(output->str);
- g_string_free(output, TRUE);
+static void
+pygwy_console_run(GtkToolButton *button, gpointer user_data)
+{
+ GtkTextView *textview;
+ GtkTextBuffer *console_file_buf;
+ GtkTextIter start_iter, end_iter;
+ const gchar *output;
+ gchar *script;
- gtk_editable_select_region(GTK_EDITABLE(entry), 0, -1);
+ textview = GTK_TEXT_VIEW(console_setup->console_file_content);
+ console_file_buf = gtk_text_view_get_buffer(textview);
+
+ pygwy_console_append_message(_(">>> Running the script above\n"));
+ gtk_text_buffer_get_bounds(console_file_buf, &start_iter, &end_iter);
+ script = gtk_text_buffer_get_text(console_file_buf,
+ &start_iter, &end_iter, FALSE);
+ output = pygwy_console_run_command(script, Py_file_input);
+ g_free(script);
+ pygwy_console_append_message(output);
+}
+
+static void
+fix_eols_to_unix(gchar *text)
+{
+ gchar *p = strchr(text, '\r');
+ guint i, j;
+
+ /* Unix */
+ if (!p)
+ return;
+
+ /* Mac */
+ if (p[1] != '\n') {
+ do {
+ *p = '\n';
+ } while ((p = strchr(p+1, '\r')));
+
+ return;
+ }
+
+ /* MS-DOS */
+ for (i = 0, j = 0; text[i]; i++) {
+ if (text[i] != '\r') {
+ text[j] = text[i];
+ j++;
+ }
+ }
+ text[j] = '\0';
+}
+
+/* The file chooser dialogue cannot be meaningfully switched between modes
+ * (button labels stays saying Open/Save, ...). So having two means we need
+ * to sync them. */
+static GtkFileChooser*
+ensure_pygwy_file_dialogue(GtkFileChooserAction action, const gchar *filename)
+{
+ static GtkFileChooser *open_chooser = NULL;
+ static GtkFileChooser *save_chooser = NULL;
+
+ GtkWidget *widget;
+ GtkFileChooser *chooser;
+ gboolean is_save = (action == GTK_FILE_CHOOSER_ACTION_SAVE);
+ const gchar *title;
+
+ if (is_save) {
+ chooser = save_chooser;
+ title = _("Save Python Script as");
+ }
+ else {
+ chooser = open_chooser;
+ title = _("Open Python Script");
+ }
+
+ if (!chooser) {
+ GtkFileFilter *filter = gtk_file_filter_new();
+
+ gtk_file_filter_add_mime_type(filter, "text/x-python");
+ gtk_file_filter_add_pattern(filter, "*.py");
+
+ widget = gtk_file_chooser_dialog_new(title, NULL, action,
+ GTK_STOCK_CANCEL,
+ GTK_RESPONSE_CANCEL,
+ GTK_STOCK_OPEN,
+ GTK_RESPONSE_ACCEPT,
+ NULL);
+ chooser = GTK_FILE_CHOOSER(widget);
+ gtk_file_chooser_set_filter(chooser, filter);
+ g_signal_connect(widget, "delete-event",
+ G_CALLBACK(gtk_widget_hide_on_delete), NULL);
+
+ if (is_save) {
+ gtk_file_chooser_set_do_overwrite_confirmation(chooser, TRUE);
+ save_chooser = chooser;
+ }
+ else
+ open_chooser = chooser;
+ }
+
+ /* Sync the state between open and save choosers. */
+ if (filename)
+ gtk_file_chooser_set_filename(chooser, filename);
+
+ return chooser;
+}
+
+static void
+update_script_filename(const gchar *filename)
+{
+ gchar *title, *basename;
+
+ if (console_setup->script_filename
+ && gwy_strequal(filename, console_setup->script_filename))
+ return;
+
+ g_free(console_setup->script_filename);
+ console_setup->script_filename = g_strdup(filename);
+ if (pygwy_console_add_scriptfile(filename)) {
+ pygwy_console_save_recent();
+ pygwy_console_rebuild_recent_menu();
+ }
+
+ basename = g_path_get_basename(filename);
+ title = g_strconcat(_("Pygwy Console"), " – ", basename, NULL);
+ gtk_window_set_title(GTK_WINDOW(console_setup->window), title);
+ g_free(basename);
+ g_free(title);
+}
+
+static void
+pygwy_console_load_script(const gchar *filename)
+{
+ GtkTextBuffer *console_file_buf;
+ GtkTextView *textview;
+ gchar *file_content, *message;
+ GError *err = NULL;
+
+ if (g_file_get_contents(filename, &file_content, NULL, &err)) {
+ fix_eols_to_unix(file_content);
+ textview = GTK_TEXT_VIEW(console_setup->console_file_content);
+ console_file_buf = gtk_text_view_get_buffer(textview);
+ gtk_text_buffer_set_text(console_file_buf, file_content, -1);
+ g_free(file_content);
+ update_script_filename(filename);
+ }
+ else {
+ message = g_strdup_printf(_("Cannot read from file: %s."), err->message);
+ pygwy_console_append_message(message);
+ g_clear_error(&err);
+ g_free(message);
+ }
+}
+
+static void
+pygwy_console_save_script(const gchar *filename)
+{
+ GtkTextView *textview;
+ GtkTextBuffer *buf;
+ GtkTextIter start_iter, end_iter;
+ gchar *script, *message;
+ GError *err = NULL;
+
+ textview = GTK_TEXT_VIEW(console_setup->console_file_content);
+ buf = gtk_text_view_get_buffer(textview);
+ gtk_text_buffer_get_bounds(buf, &start_iter, &end_iter);
+ script = gtk_text_buffer_get_text(buf, &start_iter, &end_iter, FALSE);
+ if (g_file_set_contents(filename, script, -1, &err)) {
+ update_script_filename(filename);
+ }
+ else {
+ message = g_strdup_printf(_("Cannot write to file: %s."), err->message);
+ pygwy_console_append_message(message);
+ g_clear_error(&err);
+ g_free(message);
+ }
+ g_free(script);
+}
+
+static void
+pygwy_console_open(GtkToolButton *button, gpointer user_data)
+{
+ GtkFileChooser *chooser;
+ gchar *filename;
+ gboolean ok;
+
+ chooser = ensure_pygwy_file_dialogue(GTK_FILE_CHOOSER_ACTION_OPEN,
+ console_setup->script_filename);
+ gtk_window_present(GTK_WINDOW(chooser));
+ ok = (gtk_dialog_run(GTK_DIALOG(chooser)) == GTK_RESPONSE_ACCEPT);
+ gtk_widget_hide(GTK_WIDGET(chooser));
+ if (ok) {
+ filename = gtk_file_chooser_get_filename(chooser);
+ pygwy_console_load_script(filename);
+ g_free(filename);
+ }
+}
+
+static void
+pygwy_console_save(GtkToolButton *button, gpointer user_data)
+{
+ if (!console_setup->script_filename)
+ pygwy_console_save_as(button, user_data);
+ else
+ pygwy_console_save_script(console_setup->script_filename);
+}
+
+static void
+pygwy_console_save_as(GtkToolButton *button, gpointer user_data)
+{
+ GtkFileChooser *chooser;
+ gchar *filename;
+ gboolean ok;
+
+ chooser = ensure_pygwy_file_dialogue(GTK_FILE_CHOOSER_ACTION_SAVE,
+ console_setup->script_filename);
+ gtk_window_present(GTK_WINDOW(chooser));
+ ok = (gtk_dialog_run(GTK_DIALOG(chooser)) == GTK_RESPONSE_ACCEPT);
+ gtk_widget_hide(GTK_WIDGET(chooser));
+ if (ok) {
+ filename = gtk_file_chooser_get_filename(chooser);
+ pygwy_console_save_script(filename);
+ g_free(filename);
+ }
+}
+
+static gboolean
+pygwy_console_add_scriptfile(const gchar *filename)
+{
+ GArray *recent = console_setup->recent_scripts;
+ gchar *rfilename;
+ guint i;
+
+ for (i = 0; i < recent->len; i++) {
+ rfilename = g_array_index(recent, gchar*, i);
+ if (gwy_strequal(filename, rfilename)) {
+ if (i == 0)
+ return FALSE;
+
+ /* Move it to the front. */
+ g_array_remove_index(recent, i);
+ g_array_prepend_val(recent, rfilename);
+ return TRUE;
+ }
+ }
+
+ rfilename = g_strdup(filename);
+ g_array_prepend_val(recent, rfilename);
+ if (recent->len > NRECENT)
+ g_array_set_size(recent, NRECENT);
+ return TRUE;
+}
+
+static void
+pygwy_console_load_recent(void)
+{
+ GArray *recent = console_setup->recent_scripts;
+ gchar *path, *text, *line, *p;
+
+ path = g_build_filename(gwy_get_user_dir(), "pygwy_console", "recent-files",
+ NULL);
+ if (g_file_get_contents(path, &text, NULL, NULL)) {
+ p = text;
+ for (line = gwy_str_next_line(&p); line; line = gwy_str_next_line(&p)) {
+ if (strchr(line, '\\')) {
+ line = g_strcompress(line);
+ if (strlen(line))
+ pygwy_console_add_scriptfile(line);
+ g_free(line);
+ }
+ else if (strlen(line))
+ pygwy_console_add_scriptfile(line);
+
+ if (recent->len == NRECENT)
+ break;
+ }
+ g_free(text);
+ }
+ g_free(path);
+}
+
+static void
+pygwy_console_save_recent(void)
+{
+ GArray *recent = console_setup->recent_scripts;
+ GString *text = g_string_new(NULL);
+ gchar *path, *line;
+ guint i;
+
+ for (i = 0; i < recent->len; i++) {
+ /* Put the most recent last; it will end up first. */
+ line = g_strescape(g_array_index(recent, gchar*, recent->len-1 - i),
+ NULL);
+ g_string_append(text, line);
+ g_string_append_c(text, '\n');
+ }
+
+ path = g_build_filename(gwy_get_user_dir(), "pygwy_console", "recent-files",
+ NULL);
+ g_file_set_contents(path, text->str, -1, NULL);
+ g_free(path);
+ g_string_free(text, TRUE);
+}
+
+static void
+pygwy_console_rebuild_recent_menu(void)
+{
+ GtkToolItem *item = console_setup->open_item;
+ GtkWidget *menu;
+
+ g_return_if_fail(item);
+ menu = gtk_menu_tool_button_get_menu(GTK_MENU_TOOL_BUTTON(item));
+ if (menu) {
+ gtk_widget_destroy(menu);
+ g_object_unref(menu);
+ }
+ menu = pygwy_console_create_recent_menu();
+ g_object_ref(menu);
+ gtk_widget_show_all(menu);
+ gtk_menu_tool_button_set_menu(GTK_MENU_TOOL_BUTTON(item), menu);
+}
+
+static GtkWidget*
+pygwy_console_create_recent_menu(void)
+{
+ GArray *recent = console_setup->recent_scripts;
+ GtkWidget *menu, *item;
+ GtkMenuShell *menushell;
+ const gchar *path;
+ gchar *filename;
+ guint i;
+
+ menu = gtk_menu_new();
+ menushell = GTK_MENU_SHELL(menu);
+ for (i = 0; i < recent->len; i++) {
+ path = g_array_index(recent, gchar*, i);
+ filename = g_path_get_basename(path);
+ item = gtk_menu_item_new_with_label(filename);
+ g_free(filename);
+ gtk_menu_shell_append(menushell, item);
+ g_signal_connect(item, "activate",
+ G_CALLBACK(pygwy_console_open_recent),
+ GUINT_TO_POINTER(i));
+ }
+ return menu;
+}
+
+static void
+pygwy_console_open_recent(GtkMenuItem *item, gpointer user_data)
+{
+ GArray *recent = console_setup->recent_scripts;
+ guint i = GPOINTER_TO_UINT(user_data);
+
+ g_return_if_fail(i < recent->len);
+ pygwy_console_load_script(g_array_index(recent, gchar*, i));
}
static void
@@ -525,4 +725,46 @@ pygwy_console_clear_output(GtkToolButton *btn,
gtk_text_buffer_delete(console_buf, &start_iter, &end_iter);
}
+static void
+pygwy_console_append_message(const gchar *message)
+{
+ GtkTextBuffer *console_buf;
+ GtkTextIter start_iter, end_iter;
+ GtkTextView *textview;
+ GString *output;
+ GtkTextMark *end_mark;
+
+ if (!message) {
+ g_warning("No message to append.");
+ return;
+ }
+ if (!console_setup) {
+ g_warning("Console setup structure is not defined!");
+ return;
+ }
+ /* read string which contain last command output */
+ textview = GTK_TEXT_VIEW(console_setup->console_output);
+ console_buf = gtk_text_view_get_buffer(textview);
+ gtk_text_buffer_get_bounds(console_buf, &start_iter, &end_iter);
+
+ /* get output widget content */
+ output = g_string_new(gtk_text_buffer_get_text(console_buf,
+ &start_iter, &end_iter,
+ FALSE));
+
+ /* append input line */
+ output = g_string_append(output, message);
+ gtk_text_buffer_set_text(console_buf, output->str, -1);
+ g_string_free(output, TRUE);
+
+ /* scroll to end */
+ gtk_text_buffer_get_end_iter(console_buf, &end_iter);
+ end_mark = gtk_text_buffer_create_mark(console_buf, "cursor", &end_iter,
+ FALSE);
+ g_object_ref(end_mark);
+ gtk_text_view_scroll_to_mark(GTK_TEXT_VIEW(console_setup->console_output),
+ end_mark, 0.0, FALSE, 0.0, 0.0);
+ g_object_unref(end_mark);
+}
+
/* vim: set cin et ts=4 sw=4 cino=>1s,e0,n0,f0,{0,}0,^0,\:1s,=0,g1s,h0,t0,+1s,c3,(0,u0 : */
diff --git a/modules/pygwy/pygwy-console.h b/modules/pygwy/pygwy-console.h
index 27b684d..37e3224 100644
--- a/modules/pygwy/pygwy-console.h
+++ b/modules/pygwy/pygwy-console.h
@@ -1,5 +1,3 @@
-#ifndef _PYGWY_CONSOLE_H
-#define _PYGWY_CONSOLE_H
/*
* Copyright (C) 2008 Jan Horak
* E-mail: xhorak at gmail.com
@@ -21,17 +19,9 @@
*
* Description: This file contains pygwy console module.
*/
+#ifndef __PYGWY_CONSOLE_H__
+#define __PYGWY_CONSOLE_H__
-#include <Python.h>
-#include <gtk/gtk.h>
-typedef struct {
- GtkWidget *window;
- PyObject *std_err;
- PyObject *dictionary;
- GtkWidget *console_output;
- GtkWidget *console_file_content;
- gchar *script_filename;
-} PygwyConsoleSetup;
+void pygwy_register_console(void);
-void pygwy_register_console (void);
#endif
diff --git a/modules/pygwy/pygwy-fix-defs-1.py b/modules/pygwy/pygwy-fix-defs-1.py
new file mode 100644
index 0000000..2048537
--- /dev/null
+++ b/modules/pygwy/pygwy-fix-defs-1.py
@@ -0,0 +1,32 @@
+#!/usr/bin/python
+# $Id: pygwy-fix-defs-1.py 19311 2016-11-23 18:06:51Z yeti-dn $
+# perform simple text-transform fixes on the defs file
+import sys, re
+
+fixes = [
+ (r'\(define-object Serializable', r'(define-interface Serializable'),
+ (r'\bGWY_TYPE_SELECTION_GRAPH1_DAREA\b', r'GWY_TYPE_SELECTION_GRAPH_1DAREA'),
+ (r'\bGWY_TYPE_NL_FIT_PRESET\b', r'GWY_TYPE_NLFIT_PRESET'),
+ (r'\bGWY_TYPE_CD_LINE\b', r'GWY_TYPE_CDLINE'),
+ (r'\bGwyXyz\b', r'GwyXYZ'),
+ (r'\bGwyXy\b', r'GwyXY'),
+ (r'\bGwyRgba\b', r'GwyRGBA'),
+ (r'\bGwySiUnit\b', r'GwySIUnit'),
+ (r'\bGwySiValueFormat\b', r'GwySIValueFormat'),
+ (r'\bGwyCdLine\b', r'GwyCDLine'),
+ (r'\bGwyGl([A-Z])', r'GwyGL\1'),
+ (r'\bGwy([HV])ruler\b', r'Gwy\1Ruler'),
+ (r'\bGwy([HV])marker', r'Gwy\1Marker'),
+ (r'\bGwyNLFitter\b', r'GwyMathNLFit'),
+ (r'\bGwyMathNlfit\b', r'GwyMathNLFit'),
+ (r'\(define-method ([1-3]d)([a-z]+)', r'(define-method \2\1'),
+ (r'"(as|assert|def|exec|from|global|import|in|is|lambda|pass|print|raise|with|yield)"\)', r'"\1_")'),
+]
+
+text = sys.stdin.read()
+for fix in fixes:
+ text, nsub = re.subn(fix[0], fix[1], text)
+ if nsub:
+ continue
+ sys.stderr.write('Fix-regexp %s did not match anything.\n' % repr(fix[0]))
+sys.stdout.write(text)
diff --git a/modules/pygwy/pygwy-fix-defs-2.py b/modules/pygwy/pygwy-fix-defs-2.py
new file mode 100644
index 0000000..ffac282
--- /dev/null
+++ b/modules/pygwy/pygwy-fix-defs-2.py
@@ -0,0 +1,603 @@
+#!/usr/bin/python
+# $Id: pygwy-fix-defs-2.py 20179 2017-08-07 09:17:50Z yeti-dn $
+# alter defs, fix parameters and return types
+import sys, re
+from optparse import OptionParser
+
+parser = OptionParser(usage='''\
+pygwy-fix-defs.py --codegendir=DIR
+Reads pygwy.defs.tmp.
+Generated pygwy.defs and boxed.override.''')
+
+parser.add_option('-c', '--codegendir', dest='codegendir', type='string',
+ default='', metavar='DIR',
+ help='Directory with codegen python modules')
+
+(options, args) = parser.parse_args()
+if options.codegendir:
+ sys.path.insert(0, options.codegendir)
+assert not args
+
+import defsparser, definitions
+
+# Arguments we need to fix for various functions. The syntax is natural:
+# in each fix-list we list the affected arguments as the function arguments.
+# Note original C names (func.c_name) are used even for foo_pygwy functions.
+GwyDoubleOut_args = '''
+gwy_3d_view_get_scale_range(min_scale, max_scale)
+gwy_cdline_get_value(value)
+gwy_axis_get_range(min, max)
+gwy_axis_get_requested_range(min, max)
+gwy_color_axis_get_range(min, max)
+gwy_container_gis_double(value)
+gwy_data_field_area_fit_plane(pa, pbx, pby)
+gwy_data_field_area_get_inclination(theta, phi)
+gwy_data_field_area_get_min_max_mask(min, max)
+gwy_data_field_area_get_min_max(min, max)
+gwy_data_field_area_get_normal_coeffs(nx, ny, nz)
+gwy_data_field_area_get_stats(avg, ra, rms, skew, kurtosis)
+gwy_data_field_area_get_stats_mask(avg, ra, rms, skew, kurtosis)
+gwy_data_field_correct_laplace_iteration(error)
+gwy_data_field_fit_facet_plane(pa, pbx, pby)
+gwy_data_field_fit_plane(pa, pbx, pby)
+gwy_data_field_fractal_cubecounting_dim(a, b)
+gwy_data_field_fractal_partitioning_dim(a, b)
+gwy_data_field_fractal_psdf_dim(a, b)
+gwy_data_field_fractal_triangulation_dim(a, b)
+gwy_data_field_get_autorange(from_, to)
+gwy_data_field_get_inclination(theta, phi)
+gwy_data_field_get_min_max(min, max)
+gwy_data_field_get_normal_coeffs(nx, ny, nz)
+gwy_data_field_get_stats(avg, ra, rms, skew, kurtosis)
+gwy_data_field_hough_datafield_line_to_polar(rho, theta)
+gwy_data_field_local_maximum(x_out, y_out)
+gwy_data_line_get_line_coeffs(av, bv)
+gwy_data_line_get_min_max(min, max)
+gwy_data_line_part_get_min_max(min, max)
+gwy_data_view_coords_real_to_xy_float(xscr, yscr)
+gwy_data_view_coords_xy_to_real(xreal, yreal)
+gwy_data_view_get_real_data_offsets(xoffset, yoffset)
+gwy_data_view_get_real_data_sizes(xreal, yreal)
+gwy_data_view_get_real_data_sizes(xreal, yreal)
+gwy_graph_area_get_cursor(x_cursor, y_cursor)
+gwy_graph_curve_model_get_ranges(x_min, y_min, x_max, y_max)
+gwy_graph_curve_model_get_x_range(x_min, x_max)
+gwy_graph_curve_model_get_y_range(y_min, y_max)
+gwy_graph_model_get_ranges(x_min, y_min, x_max, y_max)
+gwy_graph_model_get_x_range(x_min, x_max)
+gwy_graph_model_get_y_range(y_min, y_max)
+gwy_layer_basic_get_range(min, max)
+gwy_math_curvature(kappa1, kappa2, phi1, phi2, xc, yc, zc)
+gwy_math_refine_maximum(x, y)
+gwy_math_refine_maximum_2d(x, y)
+gwy_math_refine_maximum_1d(x)
+gwy_ruler_get_range(lower, upper, position, max_size)
+gwy_ruler_get_range(lower, upper, position, max_size)
+gwy_spectra_itoxy(x, y)
+gwy_surface_get_min_max(min, max)
+gwy_surface_get_xrange(min, max)
+gwy_surface_get_yrange(min, max)
+gwy_math_find_nearest_line(d2min)
+gwy_math_find_nearest_point(d2min)
+gwy_interpolation_get_dval_of_equidists(result)
+gwy_interpolation_interpolate_1d(result)
+gwy_interpolation_interpolate_2d(result)
+'''
+
+GwyIntOut_args = '''
+gwy_container_gis_enum(value)
+gwy_container_gis_int32(value)
+gwy_container_gis_int64(value)
+gwy_data_chooser_get_active(id)
+gwy_data_field_area_count_in_range(nbelow, nabove)
+gwy_data_field_grains_autocrop(left, right, up, down)
+gwy_data_field_hough_polar_line_to_datafield(px1, px2, py1, py2)
+gwy_data_view_coords_real_to_xy(xscr, yscr)
+gwy_data_view_coords_xy_clamp(xscr, yscr)
+gwy_data_view_get_pixel_data_sizes(xres, yres)
+gwy_enum_combo_box_update_int(integer)
+gwy_file_detect_with_score(score)
+gwy_gradient_get_points(npoints)
+gwy_gradient_get_samples(nsamples)
+gwy_math_curvature(dimen)
+gwy_math_humanize_numbers(precision)
+gwy_si_unit_new_parse(power10)
+gwy_si_unit_set_from_string_parse(power10)
+gwy_tip_estimate_full(count)
+gwy_tip_estimate_partial(count)
+gwy_peaks_analyze(npeaks)
+gwy_math_find_nearest_line(idx)
+gwy_math_find_nearest_point(idx)
+'''
+
+GwyBooleanOut_args = '''
+gwy_cdline_get_value(fres)
+gwy_nlfit_preset_guess(fres)
+gwy_math_is_in_polygon(is_inside)
+gwy_math_refine_maximum(refined)
+gwy_math_refine_maximum_2d(refined)
+gwy_math_refine_maximum_1d(refined)
+gwy_data_field_measure_lattice_acf(succeeded)
+gwy_data_field_measure_lattice_psdf(succeeded)
+'''
+
+GwyRGBAOut_args = '''
+gwy_color_button_get_color(color)
+'''
+
+GwyIntInOut_args = '''
+gwy_data_view_coords_xy_clamp(xscr, yscr)
+gwy_data_view_coords_xy_cut_line(x0scr, y0scr, x1scr, y1scr)
+'''
+
+GObject_args = '''
+gwy_container_set_object(value)
+gwy_container_get_object(return)
+'''
+
+constgchar_args = '''
+gwy_container_get_string(return)
+gwy_container_set_const_string(value)
+gwy_container_set_const_string_by_name(value)
+'''
+
+nullable_args = '''
+gwy_app_data_browser_add_brick(data, preview)
+gwy_app_data_browser_add_data_field(data)
+gwy_app_data_browser_add_spectra(data)
+gwy_app_data_browser_add_graph_model(data)
+gwy_app_data_browser_add_surface(data)
+gwy_math_find_nearest_line(metric)
+gwy_math_find_nearest_point(metric)
+gwy_app_file_load(name)
+gwy_app_file_write(name)
+gwy_data_line_fft(isrc)
+gwy_data_line_fft_raw(isrc)
+gwy_data_line_part_fft(isrc)
+gwy_data_field_1dfft(iin)
+gwy_data_field_1dfft_raw(iin)
+gwy_data_field_area_1dfft(iin)
+gwy_data_field_2dfft(iin)
+gwy_data_field_2dfft_raw(iin)
+gwy_data_field_area_2dfft(iin)
+gwy_data_field_area_fit_plane(mask)
+gwy_data_field_area_row_acf(weights, mask)
+gwy_data_field_area_row_hhcf(weights, mask)
+gwy_data_field_area_get_line_stats(mask)
+'''
+
+skip_args = '''
+gwy_app_file_load(filename_sys=NULL)
+gwy_app_file_write(filename_sys=NULL)
+gwy_tip_estimate_partial(set_fraction=NULL, set_message=NULL)
+gwy_tip_estimate_full(set_fraction=NULL, set_message=NULL)
+gwy_graph_export_postscript(str=NULL)
+gwy_graph_model_export_ascii(string=NULL)
+gwy_data_field_get_profile(data_line=NULL)
+gwy_brick_get_value_format_x(format=NULL)
+gwy_brick_get_value_format_y(format=NULL)
+gwy_brick_get_value_format_z(format=NULL)
+gwy_brick_get_value_format_w(format=NULL)
+gwy_data_field_get_value_format_xy(format=NULL)
+gwy_data_field_get_value_format_z(format=NULL)
+gwy_data_line_get_value_format_x(format=NULL)
+gwy_data_line_get_value_format_y(format=NULL)
+gwy_surface_get_value_format_xy(format=NULL)
+gwy_surface_get_value_format_z(format=NULL)
+'''
+
+default_args = '''
+gwy_data_field_affine(fill_value=0.0)
+gwy_interpolation_shift_block_1d(fill_value=0.0)
+gwy_data_line_new(nullme=TRUE)
+gwy_data_line_new_alike(nullme=TRUE)
+gwy_data_field_new(nullme=TRUE)
+gwy_data_field_new_alike(nullme=TRUE)
+gwy_brick_new(nullme=TRUE)
+gwy_brick_new_alike(nullme=TRUE)
+gwy_data_line_fft(interpolation=GWY_INTERPOLATION_LINEAR)
+gwy_data_line_part_fft(interpolation=GWY_INTERPOLATION_LINEAR)
+gwy_data_field_1dfft(interpolation=GWY_INTERPOLATION_LINEAR)
+gwy_data_field_area_1dfft(interpolation=GWY_INTERPOLATION_LINEAR)
+gwy_data_field_2dfft(interpolation=GWY_INTERPOLATION_LINEAR)
+gwy_data_field_area_2dfft(interpolation=GWY_INTERPOLATION_LINEAR)
+gwy_data_field_area_row_acf(masking=GWY_MASK_INCLUDE)
+gwy_data_field_area_row_hhcf(masking=GWY_MASK_INCLUDE)
+gwy_data_field_area_row_psdf(masking=GWY_MASK_INCLUDE)
+gwy_data_field_area_row_asg(masking=GWY_MASK_INCLUDE)
+gwy_file_load(mode=GWY_RUN_NONINTERACTIVE)
+gwy_file_save(mode=GWY_RUN_NONINTERACTIVE)
+'''
+
+# Lists of functions that should have various attributes
+caller_owns_return_funcs = '''
+gwy_app_file_load
+gwy_brick_duplicate
+gwy_brick_new_alike
+gwy_brick_new_part
+gwy_construct_grain_quantity_units
+gwy_container_duplicate
+gwy_container_duplicate_by_prefix
+gwy_data_chooser_new_channels
+gwy_data_chooser_new_graphs
+gwy_data_chooser_new_volumes
+gwy_data_chooser_new_xyzs
+gwy_data_field_area_row_acf
+gwy_data_field_area_row_hhcf
+gwy_data_field_area_row_psdf
+gwy_data_field_area_row_asg
+gwy_data_field_duplicate
+gwy_data_field_new_alike
+gwy_data_field_new_resampled
+gwy_data_field_new_rotated
+gwy_data_field_new_rotated_90
+gwy_data_line_duplicate
+gwy_data_line_new_alike
+gwy_data_line_new_resampled
+gwy_file_load
+gwy_graph_curve_model_duplicate
+gwy_graph_curve_model_new_alike
+gwy_graph_model_duplicate
+gwy_graph_model_new_alike
+gwy_si_unit_duplicate
+gwy_si_unit_new_parse
+gwy_si_unit_get_format
+gwy_si_unit_get_format_for_power10
+gwy_si_unit_get_format_with_digits
+gwy_si_unit_get_format_with_resolution
+gwy_spectra_duplicate
+gwy_spectra_new_alike
+gwy_spline_new_from_points
+gwy_surface_duplicate
+gwy_surface_new_alike
+gwy_surface_new_part
+gwy_surface_reduce_points
+gwy_nlfit_preset_get_param_units
+gwy_nlfit_preset_create_fitter
+gwy_cdline_get_param_units
+gwy_shape_fit_preset_get_param_units
+gwy_shape_fit_preset_get_secondary_units
+gwy_shape_fit_preset_create_fitter
+gwy_brick_get_value_format_x
+gwy_brick_get_value_format_y
+gwy_brick_get_value_format_z
+gwy_brick_get_value_format_w
+gwy_data_field_get_value_format_xy
+gwy_data_field_get_value_format_z
+gwy_data_line_get_value_format_x
+gwy_data_line_get_value_format_y
+gwy_surface_get_value_format_xy
+gwy_surface_get_value_format_z
+'''
+
+remove_funcs = '''
+gwy_math_lin_solve_rewrite
+gwy_gradient_get_samples
+gwy_gradient_sample
+gwy_vector_layer_button_press
+gwy_vector_layer_button_release
+gwy_vector_layer_motion_notify
+gwy_vector_layer_key_press
+gwy_vector_layer_key_release
+gwy_md5_get_digest
+gwy_gstring_replace
+gwy_gstring_to_native_eol
+gwy_app_data_browser_get_current
+gwy_container_set_string
+gwy_container_get_value
+gwy_container_set_value
+gwy_container_set_value_by_name
+gwy_si_value_format_set_units
+gwy_si_unit_value_format_set_units
+gwy_tip_model_get_preset_params
+gwy_tip_model_get_preset_nparams
+'''
+
+pygwy_added_funcs = '''
+gwy_key_from_name
+gwy_name_from_key
+gwy_data_line_set_data
+gwy_data_field_set_data
+gwy_brick_set_data
+gwy_data_field_create_full_mask
+gwy_get_grain_quantity_needs_same_units
+gwy_construct_grain_quantity_units
+gwy_tip_model_preset_get_params
+'''
+
+boxed_sequence_likes = '''
+XY
+XYZ
+RGBA
+AppDataId
+'''
+
+# This is a hack; functions that are renamed to other functions and we want to
+# remove the originals because they would be generated too.
+remove_methods = '''
+GwyContainer.set_const_string
+GwyContainer.set_const_string_by_name
+'''
+
+def unwrap_name(fname, fail_if_not_wrapped=False):
+ if fname.endswith('_pygwy'):
+ return fname[:-6]
+ if fail_if_not_wrapped:
+ assert fname.endswith('_pygwy')
+ return fname
+
+def get_python_name(c_name):
+ py_name = c_name.capitalize()
+ letters = list(re.findall(r'_[a-z]', c_name))
+ for match in letters:
+ py_name = py_name.replace(match, match.upper()[1])
+ return py_name.replace('_', '')
+
+def parse_fix_args_spec(ffargs, spec, argattr):
+ re_fnmatch = re.compile(r'(?m)^(?P<cname>[a-zA-Z0-9_]+)'
+ r'\((?P<args>[^)]+)\)$')
+ re_argsplit = re.compile(r'\s*,\s*').split
+ for m in re_fnmatch.finditer(spec):
+ name = m.group('cname')
+ if name not in ffargs:
+ ffargs[name] = {}
+ for arg in re_argsplit(m.group('args')):
+ # skip(foobar=NULL), default(foobar=1) or whatever
+ argval = None
+ if '=' in arg:
+ arg, argval = arg.split('=')
+
+ if arg not in ffargs[name]:
+ ffargs[name][arg] = set()
+
+ if argval is None:
+ ffargs[name][arg].add(argattr)
+ else:
+ ffargs[name][arg].add(argattr + argval)
+
+def parse_fix_func_props(ffprops, spec, argattr):
+ for m in re.finditer(r'\w+', spec):
+ name = m.group()
+ if name not in ffprops:
+ ffprops[name] = set()
+ ffprops[name].add(argattr)
+
+fix_function_args = {}
+parse_fix_args_spec(fix_function_args, GwyBooleanOut_args, 'type:GwyBooleanOutArg')
+parse_fix_args_spec(fix_function_args, GwyIntOut_args, 'type:GwyIntOutArg')
+parse_fix_args_spec(fix_function_args, GwyDoubleOut_args, 'type:GwyDoubleOutArg')
+parse_fix_args_spec(fix_function_args, GwyRGBAOut_args, 'type:GwyRGBAOutArg')
+parse_fix_args_spec(fix_function_args, GwyIntInOut_args, 'type:GwyIntInOutArg')
+parse_fix_args_spec(fix_function_args, GObject_args, 'type:GObject*')
+parse_fix_args_spec(fix_function_args, constgchar_args, 'type:const-gchar*')
+parse_fix_args_spec(fix_function_args, skip_args, 'skip:')
+parse_fix_args_spec(fix_function_args, default_args, 'default:')
+parse_fix_args_spec(fix_function_args, nullable_args, 'nullable')
+
+fix_function_props = {}
+parse_fix_func_props(fix_function_props, caller_owns_return_funcs, 'caller-owns-return')
+parse_fix_func_props(fix_function_props, remove_funcs, 'remove')
+
+added_functions_in_wrap_calls = {}
+parse_fix_func_props(added_functions_in_wrap_calls, pygwy_added_funcs, 'pygwy-added')
+
+remove_methods = set([x for x in remove_methods.split() if x])
+boxed_sequence_likes = set([x for x in boxed_sequence_likes.split() if x])
+
+parser = defsparser.DefsParser("pygwy.defs.tmp")
+parser.startParsing()
+parser.include('extra.defs')
+
+# We want to discard the originals of wrapped functions so that we do not see
+# `could-not-write-method messages' in the log for functions we did wrap.
+wrapped_funcs = {}
+for f in parser.functions:
+ assert not f.name[0].isdigit()
+ if f.name.endswith('_pygwy'):
+ wrapped_funcs[unwrap_name(f.c_name, True)] = None
+
+for i, f in enumerate(parser.functions):
+ if f.c_name in wrapped_funcs:
+ assert wrapped_funcs[f.c_name] is None
+ wrapped_funcs[f.c_name] = i
+ continue
+
+ f.name = unwrap_name(f.name)
+ c_name = unwrap_name(f.c_name)
+ if c_name in fix_function_props:
+ for funcprop in fix_function_props[c_name]:
+ if funcprop == 'caller-owns-return':
+ f.caller_owns_return = True
+ elif funcprop == 'remove':
+ wrapped_funcs[f.c_name] = i
+ else:
+ assert not 'Reached'
+
+ del fix_function_props[c_name]
+
+ if hasattr(f, 'of_object'):
+ qname = f.of_object + '.' + f.name
+ if qname in remove_methods:
+ wrapped_funcs[qname] = i
+
+ if c_name in fix_function_args:
+ to_fix = fix_function_args[c_name]
+ for p in f.params:
+ if p.pname not in to_fix:
+ continue
+ for argattr in to_fix[p.pname]:
+ if argattr == 'nullable':
+ p.pnull = True
+ p.pdflt = 'NULL'
+ elif argattr.startswith('default:'):
+ p.pdflt = argattr.split(':')[1]
+ elif argattr.startswith('skip:'):
+ # To skip a parameter completely we define it to be of
+ # GwySkipArg and provide a default value. The codegen
+ # handler for that type then just passed this value without
+ # putting any correspding arg into the Python protptype.
+ p.ptype = 'GwySkipArg'
+ p.pdflt = argattr.split(':')[1]
+ elif argattr.startswith('type:'):
+ p.ptype = argattr.split(':')[1]
+ else:
+ assert not 'Reached'
+ del to_fix[p.pname]
+ if 'return' in to_fix:
+ for argattr in to_fix['return']:
+ if argattr.startswith('type:'):
+ f.ret = argattr.split(':')[1]
+ else:
+ assert not 'Reached'
+ del to_fix['return']
+
+ if not fix_function_args[c_name]:
+ del fix_function_args[c_name]
+
+# Unused fix items mean potential errors.
+for f in fix_function_args.items():
+ sys.stderr.write('Warning: unused fixarg %s: %s\n' % (f[0], str(f[1])))
+for f in fix_function_props.items():
+ sys.stderr.write('Warning: unused fixfunc %s: %s\n' % (f[0], str(f[1])))
+for f, i in wrapped_funcs.items():
+ if f in added_functions_in_wrap_calls:
+ continue
+ if i is None:
+ sys.stderr.write('Warning: wrapper for %s does not wrap existing function\n' % f)
+
+for i in reversed(sorted(wrapped_funcs.values())):
+ if i is not None:
+ del parser.functions[i]
+
+parser.write_defs()
+
+# Generate setters and sequence-like wrappers for boxed types. Generally, if
+# we declare something as boxed type with some fields we want it work as a
+# plain C struct.
+boxed_setter_template = '''\
+%%%%
+override-attr %(cname)s.%(attr)s
+static int
+_wrap_%(lcname)s__set_%(attr)s(PyGBoxed *self, PyObject *value, void *closure)
+{
+ return assign_%(convertor)s(value, &pyg_boxed_get(self, %(cname)s)->%(attr)s, "%(pyname)s.%(attr)s");
+}
+'''
+
+boxed_sequence_template = '''\
+%%%%
+override-slot %(cname)s.tp_as_sequence
+
+static ssize_t
+_sq_%(lcname)s_length(G_GNUC_UNUSED PyGObject *self)
+{
+ return %(nfields)u;
+}
+
+static PyObject*
+_sq_%(lcname)s_item(PyGObject *self, Py_ssize_t i)
+{
+ const %(cname)s *%(name)s = pyg_boxed_get(self, %(cname)s);
+
+%(get_fields)s
+ PyErr_SetString(PyExc_IndexError, "%(pyname)s index out of range");
+ return NULL;
+}
+
+static int
+_sq_%(lcname)s_ass_item(PyGObject *self, Py_ssize_t i, PyObject *item)
+{
+ %(cname)s *%(name)s = pyg_boxed_get(self, %(cname)s);
+
+%(set_fields)s
+ PyErr_SetString(PyExc_IndexError, "%(pyname)s index out of range");
+ return -1;
+}
+
+static const PySequenceMethods _wrap_%(lcname)s_tp_as_sequence = {
+ (lenfunc)_sq_%(lcname)s_length,
+ NULL,
+ NULL,
+ (ssizeargfunc)_sq_%(lcname)s_item,
+ NULL,
+ (ssizeobjargproc)_sq_%(lcname)s_ass_item,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+};
+'''
+
+boxed_sequence_get_field_template = '''\
+ if (i == %(i)u)
+ return %(convertor)s(%(name)s->%(attr)s);
+'''
+
+boxed_sequence_set_field_template = '''\
+ if (i == %(i)u)
+ return assign_%(convertor)s(item, &%(name)s->%(attr)s, "%(pyname)s %(attr)s item");
+'''
+
+extract_convertors = {
+ 'gdouble': 'PyFloat_FromDouble',
+ 'gint': 'PyInt_FromLong',
+}
+
+assign_convertors = {
+ 'gdouble': 'number_as_double',
+ 'gint': 'number_as_int',
+}
+
+boxed_overrides = ['/* This is a %s file */' % 'GENERATED']
+for b in parser.boxes:
+ if not b.fields:
+ continue
+
+ substdict = {
+ 'cname': b.c_name,
+ 'pyname': b.name,
+ 'lcname': b.typecode.lower().replace('_type_', '_', 1),
+ 'name': b.name.lower(),
+ }
+ for typ, attr in b.fields:
+ if typ not in assign_convertors:
+ continue
+
+ substdict['attr'] = attr
+ substdict['convertor'] = assign_convertors[typ]
+ setter = boxed_setter_template % substdict
+ boxed_overrides.append(setter)
+
+ if b.name not in boxed_sequence_likes:
+ continue
+
+ sq_getters = []
+ sq_setters = []
+ i = 0
+ for typ, attr in b.fields:
+ if typ not in extract_convertors or typ not in assign_convertors:
+ continue
+
+ substdict['attr'] = attr
+ substdict['i'] = i
+ substdict['convertor'] = extract_convertors[typ]
+ sq_getters.append(boxed_sequence_get_field_template % substdict)
+ substdict['convertor'] = assign_convertors[typ]
+ sq_setters.append(boxed_sequence_set_field_template % substdict)
+ boxed_overrides.append(setter)
+ i += 1
+
+ if not i:
+ continue
+
+ del substdict['attr']
+ del substdict['convertor']
+ del substdict['i']
+ substdict['get_fields'] = '\n'.join(sq_getters)
+ substdict['set_fields'] = '\n'.join(sq_setters)
+ substdict['nfields'] = i
+ sq_override = boxed_sequence_template % substdict
+ boxed_overrides.append(sq_override)
+
+file('boxed.override', 'w').write('\n'.join(boxed_overrides))
+
diff --git a/modules/pygwy/pygwy-fix-defs.py b/modules/pygwy/pygwy-fix-defs.py
deleted file mode 100644
index ee4eaa2..0000000
--- a/modules/pygwy/pygwy-fix-defs.py
+++ /dev/null
@@ -1,560 +0,0 @@
-#!/usr/bin/python
-# $Id: pygwy-fix-defs.py 19268 2016-11-15 12:48:19Z yeti-dn $
-# alter defs, fix parameters and return types
-import sys, re
-from optparse import OptionParser
-
-parser = OptionParser(usage='''\
-pygwy-fix-defs.py --codegendir=DIR
-Reads pygwy.defs.tmp.
-Generated pygwy.defs and boxed.override.''')
-
-parser.add_option('-c', '--codegendir', dest='codegendir', type='string',
- default='', metavar='DIR',
- help='Directory with codegen python modules')
-
-(options, args) = parser.parse_args()
-if options.codegendir:
- sys.path.insert(0, options.codegendir)
-assert not args
-
-import defsparser, definitions
-
-# Arguments we need to fix for various functions. The syntax is natural:
-# in each fix-list we list the affected arguments as the function arguments.
-# Note original C names (func.c_name) are used even for foo_pygwy functions.
-GwyDoubleOut_args = '''
-gwy_3d_view_get_scale_range(min_scale, max_scale)
-gwy_cdline_get_value(value)
-gwy_axis_get_range(min, max)
-gwy_axis_get_requested_range(min, max)
-gwy_color_axis_get_range(min, max)
-gwy_container_gis_double(value)
-gwy_data_field_area_fit_plane(pa, pbx, pby)
-gwy_data_field_area_get_inclination(theta, phi)
-gwy_data_field_area_get_min_max_mask(min, max)
-gwy_data_field_area_get_min_max(min, max)
-gwy_data_field_area_get_normal_coeffs(nx, ny, nz)
-gwy_data_field_area_get_stats(avg, ra, rms, skew, kurtosis)
-gwy_data_field_area_get_stats_mask(avg, ra, rms, skew, kurtosis)
-gwy_data_field_correct_laplace_iteration(error)
-gwy_data_field_fit_facet_plane(pa, pbx, pby)
-gwy_data_field_fit_plane(pa, pbx, pby)
-gwy_data_field_fractal_cubecounting_dim(a, b)
-gwy_data_field_fractal_partitioning_dim(a, b)
-gwy_data_field_fractal_psdf_dim(a, b)
-gwy_data_field_fractal_triangulation_dim(a, b)
-gwy_data_field_get_autorange(from_, to)
-gwy_data_field_get_inclination(theta, phi)
-gwy_data_field_get_min_max(min, max)
-gwy_data_field_get_normal_coeffs(nx, ny, nz)
-gwy_data_field_get_stats(avg, ra, rms, skew, kurtosis)
-gwy_data_field_hough_datafield_line_to_polar(rho, theta)
-gwy_data_line_get_line_coeffs(av, bv)
-gwy_data_line_get_min_max(min, max)
-gwy_data_line_part_get_min_max(min, max)
-gwy_data_view_coords_real_to_xy_float(xscr, yscr)
-gwy_data_view_coords_xy_to_real(xreal, yreal)
-gwy_data_view_get_real_data_offsets(xoffset, yoffset)
-gwy_data_view_get_real_data_sizes(xreal, yreal)
-gwy_data_view_get_real_data_sizes(xreal, yreal)
-gwy_graph_area_get_cursor(x_cursor, y_cursor)
-gwy_graph_curve_model_get_ranges(x_min, y_min, x_max, y_max)
-gwy_graph_curve_model_get_x_range(x_min, x_max)
-gwy_graph_curve_model_get_y_range(y_min, y_max)
-gwy_graph_model_get_ranges(x_min, y_min, x_max, y_max)
-gwy_graph_model_get_x_range(x_min, x_max)
-gwy_graph_model_get_y_range(y_min, y_max)
-gwy_layer_basic_get_range(min, max)
-gwy_math_curvature(kappa1, kappa2, phi1, phi2, xc, yc, zc)
-gwy_math_refine_maximum(x, y)
-gwy_ruler_get_range(lower, upper, position, max_size)
-gwy_ruler_get_range(lower, upper, position, max_size)
-gwy_spectra_itoxy(x, y)
-gwy_surface_get_min_max(min, max)
-gwy_surface_get_xrange(min, max)
-gwy_surface_get_yrange(min, max)
-gwy_math_find_nearest_line(d2min)
-gwy_math_find_nearest_point(d2min)
-'''
-
-GwyIntOut_args = '''
-gwy_container_gis_enum(value)
-gwy_container_gis_int32(value)
-gwy_container_gis_int64(value)
-gwy_data_chooser_get_active(id)
-gwy_data_field_area_count_in_range(nbelow, nabove)
-gwy_data_field_circular_area_extract_with_pos(xpos, ypos)
-gwy_data_field_grains_autocrop(left, right, up, down)
-gwy_data_field_hough_polar_line_to_datafield(px1, px2, py1, py2)
-gwy_data_view_coords_real_to_xy(xscr, yscr)
-gwy_data_view_coords_xy_clamp(xscr, yscr)
-gwy_data_view_get_pixel_data_sizes(xres, yres)
-gwy_enum_combo_box_update_int(integer)
-gwy_file_detect_with_score(score)
-gwy_gradient_get_points(npoints)
-gwy_gradient_get_samples(nsamples)
-gwy_math_curvature(dimen)
-gwy_math_humanize_numbers(precision)
-gwy_si_unit_new_parse(power10)
-gwy_si_unit_set_from_string_parse(power10)
-gwy_tip_estimate_full(count)
-gwy_tip_estimate_partial(count)
-gwy_peaks_analyze(npeaks)
-gwy_math_find_nearest_line(idx)
-gwy_math_find_nearest_point(idx)
-'''
-
-GwyBooleanOut_args = '''
-gwy_cdline_get_value(fres)
-gwy_nlfit_preset_guess(fres)
-gwy_math_is_in_polygon(is_inside)
-gwy_math_refine_maximum(refined)
-'''
-
-GwyRGBAOut_args = '''
-gwy_color_button_get_color(color)
-'''
-
-GwyIntInOut_args = '''
-gwy_data_view_coords_xy_clamp(xscr, yscr)
-gwy_data_view_coords_xy_cut_line(x0scr, y0scr, x1scr, y1scr)
-'''
-
-GObject_args = '''
-gwy_container_set_object(value)
-gwy_container_get_object(return)
-'''
-
-constgchar_args = '''
-gwy_container_get_string(return)
-gwy_container_set_const_string(value)
-gwy_container_set_const_string_by_name(value)
-'''
-
-nullable_args = '''
-gwy_app_data_browser_add_brick(data, preview)
-gwy_app_data_browser_add_data_field(data)
-gwy_app_data_browser_add_spectra(data)
-gwy_app_data_browser_add_graph_model(data)
-gwy_app_data_browser_add_surface(data)
-gwy_math_find_nearest_line(metric)
-gwy_math_find_nearest_point(metric)
-gwy_app_file_load(name)
-gwy_app_file_write(name)
-'''
-
-skip_args = '''
-gwy_app_file_load(filename_sys=NULL)
-gwy_app_file_write(filename_sys=NULL)
-gwy_tip_estimate_partial(set_fraction=NULL, set_message=NULL)
-gwy_tip_estimate_full(set_fraction=NULL, set_message=NULL)
-gwy_graph_export_postscript(str=NULL)
-gwy_graph_model_export_ascii(string=NULL)
-gwy_data_field_get_profile(data_line=NULL)
-gwy_brick_get_value_format_x(format=NULL)
-gwy_brick_get_value_format_y(format=NULL)
-gwy_brick_get_value_format_z(format=NULL)
-gwy_brick_get_value_format_w(format=NULL)
-gwy_data_field_get_value_format_xy(format=NULL)
-gwy_data_field_get_value_format_z(format=NULL)
-gwy_data_line_get_value_format_x(format=NULL)
-gwy_data_line_get_value_format_y(format=NULL)
-gwy_surface_get_value_format_xy(format=NULL)
-gwy_surface_get_value_format_z(format=NULL)
-'''
-
-default_args = '''
-gwy_data_field_affine(fill_value=0.0)
-gwy_data_line_new(nullme=TRUE)
-gwy_data_line_new_alike(nullme=TRUE)
-gwy_data_field_new(nullme=TRUE)
-gwy_data_field_new_alike(nullme=TRUE)
-gwy_brick_new(nullme=TRUE)
-gwy_brick_new_alike(nullme=TRUE)
-'''
-
-# Lists of functions that should have various attributes
-caller_owns_return_funcs = '''
-gwy_app_file_load
-gwy_brick_duplicate
-gwy_brick_new_alike
-gwy_brick_new_part
-gwy_construct_grain_quantity_units
-gwy_container_duplicate
-gwy_container_duplicate_by_prefix
-gwy_data_chooser_new_channels
-gwy_data_chooser_new_graphs
-gwy_data_chooser_new_volumes
-gwy_data_chooser_new_xyzs
-gwy_data_field_duplicate
-gwy_data_field_new_alike
-gwy_data_field_new_resampled
-gwy_data_field_new_rotated
-gwy_data_field_new_rotated_90
-gwy_data_line_duplicate
-gwy_data_line_new_alike
-gwy_data_line_new_resampled
-gwy_file_load
-gwy_graph_curve_model_duplicate
-gwy_graph_curve_model_new_alike
-gwy_graph_model_duplicate
-gwy_graph_model_new_alike
-gwy_si_unit_duplicate
-gwy_si_unit_new_parse
-gwy_si_unit_get_format
-gwy_si_unit_get_format_for_power10
-gwy_si_unit_get_format_with_digits
-gwy_si_unit_get_format_with_resolution
-gwy_spectra_duplicate
-gwy_spectra_new_alike
-gwy_surface_duplicate
-gwy_surface_new_alike
-gwy_surface_new_part
-gwy_nlfit_preset_get_param_units
-gwy_nlfit_preset_create_fitter
-gwy_cdline_get_param_units
-gwy_shape_fit_preset_get_param_units
-gwy_shape_fit_preset_get_secondary_units
-gwy_shape_fit_preset_create_fitter
-gwy_brick_get_value_format_x
-gwy_brick_get_value_format_y
-gwy_brick_get_value_format_z
-gwy_brick_get_value_format_w
-gwy_data_field_get_value_format_xy
-gwy_data_field_get_value_format_z
-gwy_data_line_get_value_format_x
-gwy_data_line_get_value_format_y
-gwy_surface_get_value_format_xy
-gwy_surface_get_value_format_z
-'''
-
-remove_funcs = '''
-gwy_math_lin_solve_rewrite
-gwy_gradient_get_samples
-gwy_gradient_sample
-gwy_vector_layer_button_press
-gwy_vector_layer_button_release
-gwy_vector_layer_motion_notify
-gwy_vector_layer_key_press
-gwy_vector_layer_key_release
-gwy_md5_get_digest
-gwy_gstring_replace
-gwy_gstring_to_native_eol
-gwy_app_data_browser_get_current
-gwy_container_set_string
-gwy_container_keys_by_name
-gwy_container_get_value
-gwy_container_set_value
-gwy_container_set_value_by_name
-gwy_si_value_format_set_units
-gwy_si_unit_value_format_set_units
-'''
-
-pygwy_added_funcs = '''
-gwy_key_from_name
-gwy_name_from_key
-gwy_data_line_set_data
-gwy_data_field_set_data
-gwy_brick_set_data
-gwy_data_field_create_full_mask
-gwy_get_grain_quantity_needs_same_units
-gwy_construct_grain_quantity_units
-'''
-
-boxed_sequence_likes = '''
-XY
-XYZ
-RGBA
-AppDataId
-'''
-
-# This is a hack; functions that are renamed to other functions and we want to
-# remove the originals because they would be generated too.
-remove_methods = '''
-GwyContainer.set_const_string
-GwyContainer.set_const_string_by_name
-'''
-
-def unwrap_name(fname, fail_if_not_wrapped=False):
- if fname.endswith('_pygwy'):
- return fname[:-6]
- if fail_if_not_wrapped:
- assert fname.endswith('_pygwy')
- return fname
-
-def get_python_name(c_name):
- py_name = c_name.capitalize()
- letters = list(re.findall(r'_[a-z]', c_name))
- for match in letters:
- py_name = py_name.replace(match, match.upper()[1])
- return py_name.replace('_', '')
-
-def parse_fix_args_spec(ffargs, spec, argattr):
- re_fnmatch = re.compile(r'(?m)^(?P<cname>[a-zA-Z0-9_]+)'
- r'\((?P<args>[^)]+)\)$')
- re_argsplit = re.compile(r'\s*,\s*').split
- for m in re_fnmatch.finditer(spec):
- name = m.group('cname')
- if name not in ffargs:
- ffargs[name] = {}
- for arg in re_argsplit(m.group('args')):
- # skip(foobar=NULL), default(foobar=1) or whatever
- argval = None
- if '=' in arg:
- arg, argval = arg.split('=')
-
- if arg not in ffargs[name]:
- ffargs[name][arg] = set()
-
- if argval is None:
- ffargs[name][arg].add(argattr)
- else:
- ffargs[name][arg].add(argattr + argval)
-
-def parse_fix_func_props(ffprops, spec, argattr):
- for m in re.finditer(r'\w+', spec):
- name = m.group()
- if name not in ffprops:
- ffprops[name] = set()
- ffprops[name].add(argattr)
-
-fix_function_args = {}
-parse_fix_args_spec(fix_function_args, GwyBooleanOut_args, 'type:GwyBooleanOutArg')
-parse_fix_args_spec(fix_function_args, GwyIntOut_args, 'type:GwyIntOutArg')
-parse_fix_args_spec(fix_function_args, GwyDoubleOut_args, 'type:GwyDoubleOutArg')
-parse_fix_args_spec(fix_function_args, GwyRGBAOut_args, 'type:GwyRGBAOutArg')
-parse_fix_args_spec(fix_function_args, GwyIntInOut_args, 'type:GwyIntInOutArg')
-parse_fix_args_spec(fix_function_args, GObject_args, 'type:GObject*')
-parse_fix_args_spec(fix_function_args, constgchar_args, 'type:const-gchar*')
-parse_fix_args_spec(fix_function_args, skip_args, 'skip:')
-parse_fix_args_spec(fix_function_args, default_args, 'default:')
-parse_fix_args_spec(fix_function_args, nullable_args, 'nullable')
-
-fix_function_props = {}
-parse_fix_func_props(fix_function_props, caller_owns_return_funcs, 'caller-owns-return')
-parse_fix_func_props(fix_function_props, remove_funcs, 'remove')
-
-added_functions_in_wrap_calls = {}
-parse_fix_func_props(added_functions_in_wrap_calls, pygwy_added_funcs, 'pygwy-added')
-
-remove_methods = set([x for x in remove_methods.split() if x])
-boxed_sequence_likes = set([x for x in boxed_sequence_likes.split() if x])
-
-parser = defsparser.DefsParser("pygwy.defs.tmp")
-parser.startParsing()
-parser.include('extra.defs')
-
-# We want to discard the originals of wrapped functions so that we do not see
-# `could-not-write-method messages' in the log for functions we did wrap.
-wrapped_funcs = {}
-for f in parser.functions:
- assert not f.name[0].isdigit()
- if f.name.endswith('_pygwy'):
- wrapped_funcs[unwrap_name(f.c_name, True)] = None
-
-for i, f in enumerate(parser.functions):
- if f.c_name in wrapped_funcs:
- assert wrapped_funcs[f.c_name] is None
- wrapped_funcs[f.c_name] = i
- continue
-
- f.name = unwrap_name(f.name)
- c_name = unwrap_name(f.c_name)
- if c_name in fix_function_props:
- for funcprop in fix_function_props[c_name]:
- if funcprop == 'caller-owns-return':
- f.caller_owns_return = True
- elif funcprop == 'remove':
- wrapped_funcs[f.c_name] = i
- else:
- assert not 'Reached'
-
- del fix_function_props[c_name]
-
- if hasattr(f, 'of_object'):
- qname = f.of_object + '.' + f.name
- if qname in remove_methods:
- wrapped_funcs[qname] = i
-
- if c_name in fix_function_args:
- to_fix = fix_function_args[c_name]
- for p in f.params:
- if p.pname not in to_fix:
- continue
- for argattr in to_fix[p.pname]:
- if argattr == 'nullable':
- p.pnull = True
- p.pdflt = 'NULL'
- elif argattr.startswith('default:'):
- p.pdflt = argattr.split(':')[1]
- elif argattr.startswith('skip:'):
- # To skip a parameter completely we define it to be of
- # GwySkipArg and provide a default value. The codegen
- # handler for that type then just passed this value without
- # putting any correspding arg into the Python protptype.
- p.ptype = 'GwySkipArg'
- p.pdflt = argattr.split(':')[1]
- elif argattr.startswith('type:'):
- p.ptype = argattr.split(':')[1]
- else:
- assert not 'Reached'
- del to_fix[p.pname]
- if 'return' in to_fix:
- for argattr in to_fix['return']:
- if argattr.startswith('type:'):
- f.ret = argattr.split(':')[1]
- else:
- assert not 'Reached'
- del to_fix['return']
-
- if not fix_function_args[c_name]:
- del fix_function_args[c_name]
-
-# Unused fix items mean potential errors.
-for f in fix_function_args.items():
- sys.stderr.write('Warning: unused fixarg %s: %s\n' % (f[0], str(f[1])))
-for f in fix_function_props.items():
- sys.stderr.write('Warning: unused fixfunc %s: %s\n' % (f[0], str(f[1])))
-for f, i in wrapped_funcs.items():
- if f in added_functions_in_wrap_calls:
- continue
- if i is None:
- sys.stderr.write('Warning: wrapper for %s does not wrap existing function\n' % f)
-
-for i in reversed(sorted(wrapped_funcs.values())):
- if i is not None:
- del parser.functions[i]
-
-parser.write_defs()
-
-# Generate setters and sequence-like wrappers for boxed types. Generally, if
-# we declare something as boxed type with some fields we want it work as a
-# plain C struct.
-boxed_setter_template = '''\
-%%%%
-override-attr %(cname)s.%(attr)s
-static int
-_wrap_%(lcname)s__set_%(attr)s(PyGBoxed *self, PyObject *value, void *closure)
-{
- return assign_%(convertor)s(value, &pyg_boxed_get(self, %(cname)s)->%(attr)s, "%(pyname)s.%(attr)s");
-}
-'''
-
-boxed_sequence_template = '''\
-%%%%
-override-slot %(cname)s.tp_as_sequence
-
-static ssize_t
-_sq_%(lcname)s_length(G_GNUC_UNUSED PyGObject *self)
-{
- return %(nfields)u;
-}
-
-static PyObject*
-_sq_%(lcname)s_item(PyGObject *self, Py_ssize_t i)
-{
- const %(cname)s *%(name)s = pyg_boxed_get(self, %(cname)s);
-
-%(get_fields)s
- PyErr_SetString(PyExc_IndexError, "%(pyname)s index out of range");
- return NULL;
-}
-
-static int
-_sq_%(lcname)s_ass_item(PyGObject *self, Py_ssize_t i, PyObject *item)
-{
- %(cname)s *%(name)s = pyg_boxed_get(self, %(cname)s);
-
-%(set_fields)s
- PyErr_SetString(PyExc_IndexError, "%(pyname)s index out of range");
- return -1;
-}
-
-static const PySequenceMethods _wrap_%(lcname)s_tp_as_sequence = {
- (lenfunc)_sq_%(lcname)s_length,
- NULL,
- NULL,
- (ssizeargfunc)_sq_%(lcname)s_item,
- NULL,
- (ssizeobjargproc)_sq_%(lcname)s_ass_item,
- NULL,
- NULL,
- NULL,
- NULL,
-};
-'''
-
-boxed_sequence_get_field_template = '''\
- if (i == %(i)u)
- return %(convertor)s(%(name)s->%(attr)s);
-'''
-
-boxed_sequence_set_field_template = '''\
- if (i == %(i)u)
- return assign_%(convertor)s(item, &%(name)s->%(attr)s, "%(pyname)s %(attr)s item");
-'''
-
-extract_convertors = {
- 'gdouble': 'PyFloat_FromDouble',
- 'gint': 'PyInt_FromLong',
-}
-
-assign_convertors = {
- 'gdouble': 'number_as_double',
- 'gint': 'number_as_int',
-}
-
-boxed_overrides = ['/* This is a %s file */' % 'GENERATED']
-for b in parser.boxes:
- if not b.fields:
- continue
-
- substdict = {
- 'cname': b.c_name,
- 'pyname': b.name,
- 'lcname': b.typecode.lower().replace('_type_', '_', 1),
- 'name': b.name.lower(),
- }
- for typ, attr in b.fields:
- if typ not in assign_convertors:
- continue
-
- substdict['attr'] = attr
- substdict['convertor'] = assign_convertors[typ]
- setter = boxed_setter_template % substdict
- boxed_overrides.append(setter)
-
- if b.name not in boxed_sequence_likes:
- continue
-
- sq_getters = []
- sq_setters = []
- i = 0
- for typ, attr in b.fields:
- if typ not in extract_convertors or typ not in assign_convertors:
- continue
-
- substdict['attr'] = attr
- substdict['i'] = i
- substdict['convertor'] = extract_convertors[typ]
- sq_getters.append(boxed_sequence_get_field_template % substdict)
- substdict['convertor'] = assign_convertors[typ]
- sq_setters.append(boxed_sequence_set_field_template % substdict)
- boxed_overrides.append(setter)
- i += 1
-
- if not i:
- continue
-
- del substdict['attr']
- del substdict['convertor']
- del substdict['i']
- substdict['get_fields'] = '\n'.join(sq_getters)
- substdict['set_fields'] = '\n'.join(sq_setters)
- substdict['nfields'] = i
- sq_override = boxed_sequence_template % substdict
- boxed_overrides.append(sq_override)
-
-file('boxed.override', 'w').write('\n'.join(boxed_overrides))
-
diff --git a/modules/pygwy/pygwy-fix-defs.sed b/modules/pygwy/pygwy-fix-defs.sed
deleted file mode 100644
index df05898..0000000
--- a/modules/pygwy/pygwy-fix-defs.sed
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/bin/sed -f
-s/define-object Serializable/define-interface Serializable/
-s/GWY_TYPE_SELECTION_GRAPH1_DAREA\>/GWY_TYPE_SELECTION_GRAPH_1DAREA/
-s/GWY_TYPE_NL_FIT_PRESET\>/GWY_TYPE_NLFIT_PRESET/
-s/GWY_TYPE_CD_LINE\>/GWY_TYPE_CDLINE/
-s/GwyXyz\>/GwyXYZ/
-s/GwyXy\>/GwyXY/
-s/GwyRgba\>/GwyRGBA/
-s/GwySiUnit\>/GwySIUnit/
-s/GwySiValueFormat\>/GwySIValueFormat/
-s/GwyCdLine\>/GwyCDLine/
-s/GwyGl\([A-Z]\)/GwyGL\1/
-s/Gwy\([HV]\)ruler\>/Gwy\1Ruler/
-s/Gwy\([HV]\)marker/Gwy\1Marker/
-s/GwyNLFitter\>/GwyMathNLFit/
-s/GwyMathNlfit\>/GwyMathNLFit/
-s/define-method \([1-3]d\)\([a-z]\+\)/define-method \2\1/
-s/"\(as\|assert\|def\|exec\|from\|global\|import\|in\|is\|lambda\|pass\|print\|raise\|with\|yield\)")/"\1_")/
diff --git a/modules/pygwy/pygwy-generate-doc.py b/modules/pygwy/pygwy-generate-doc.py
index 8939229..2fd3533 100644
--- a/modules/pygwy/pygwy-generate-doc.py
+++ b/modules/pygwy/pygwy-generate-doc.py
@@ -1,5 +1,5 @@
#!/usr/bin/python
-# $Id: pygwy-generate-doc.py 19221 2016-11-09 21:11:19Z yeti-dn $
+# $Id: pygwy-generate-doc.py 19323 2016-11-28 21:01:00Z yeti-dn $
# Script for generation of gwy.py dummy file. The file contains empty function bodies with comments.
# Used for generation of documentation by using epydoc.
# Public domain
@@ -102,7 +102,10 @@ def rep_location(r):
def replace_special(s):
s = re.sub(r'<warning>', r'@warning:', s)
- s = re.sub(r'</warning>', '', s)
+ s = re.sub(r'</warning>', r'', s)
+ s = re.sub(r'<(emphasis|guimenu|guimenuitem)>(.*?)</\1>', r'I{\2}', s)
+ s = re.sub(r'<literal>(.*?)</literal>', r'C{\1}', s)
+ s = re.sub(r'<!--\s+-->', r'', s)
s = re.sub(r'%([a-zA-Z0-9_]+)', rep_code, s)
s = re.sub(r'@([a-zA-Z0-9_]+)', rep_code, s)
s = re.sub(r'#([a-zA-Z0-9_]+)', rep_code, s)
diff --git a/modules/pygwy/pygwy.c b/modules/pygwy/pygwy.c
index 441b810..6a11913 100644
--- a/modules/pygwy/pygwy.c
+++ b/modules/pygwy/pygwy.c
@@ -1,6 +1,6 @@
/*
- * @(#) $Id: pygwy.c 19265 2016-11-15 12:22:37Z yeti-dn $
- * Copyright (C) 2004-2016 David Necas (Yeti), Petr Klapetek.
+ * @(#) $Id: pygwy.c 20181 2017-08-07 09:26:23Z yeti-dn $
+ * Copyright (C) 2004-2017 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
* This program is free software; you can redistribute it and/or modify
@@ -28,11 +28,12 @@
#include "config.h"
/* include this first, before NO_IMPORT_PYGOBJECT is defined */
-#include <pygtk-2.0/pygobject.h>
-#include <app/gwyapp.h>
+#include <pygobject.h>
#include "wrap_calls.h"
#include <stdarg.h>
#include <glib/gstdio.h>
+#include <Python.h>
+
#include "pygwy.h"
#include "pygwywrap.c"
@@ -63,6 +64,15 @@ typedef struct {
PyObject *code;
time_t m_time;
PygwyModuleType type;
+
+ /* Used only during registration and may become dangling pointers
+ * afterwards. */
+ const gchar *desc;
+ const gchar *menu_path;
+ const gchar *icon;
+ GwyMenuSensFlags sens;
+ GwyRunType run;
+
/* Used dynamically during execution */
PyObject *module;
PyObject *dict;
@@ -89,6 +99,7 @@ static gint pygwy_file_detect_run (const GwyFileDetectInfo *
gboolean only_name,
const gchar *name);
static void pygwy_register_modules (void);
+static gchar** find_module_candidates (gchar **module_dir_name);
static void free_module_info (PygwyModuleInfo *info);
static gboolean update_module_code (PygwyModuleInfo *info);
static PygwyModuleInfo* pygwy_find_module (const gchar* name);
@@ -119,7 +130,7 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Pygwy, the Gwyddion Python wrapper."),
"Jan Hořák <xhorak at gmail.com>, Yeti <yeti at gwyddion.net>",
- "2.0",
+ "2.3",
"Jan Hořák & David Nečas (Yeti)",
"2007"
};
@@ -172,6 +183,7 @@ check_pygtk_availability(void)
return FALSE;
}
+ gwy_debug("python path %s", pythondir);
filename = g_build_filename(pythondir, "Lib", "site-packages", "gtk-2.0",
"gobject", "__init__.py", NULL);
if (!g_file_test(filename, G_FILE_TEST_IS_REGULAR)) {
@@ -236,7 +248,7 @@ pygwy_initialize(void)
init_pygobject();
gwy_debug("Init module gwy");
- m = Py_InitModule("gwy", (PyMethodDef*) pygwy_functions);
+ m = Py_InitModule("gwy", (PyMethodDef*)pygwy_functions);
gwy_debug("Get dict");
pygwy_dict = PyModule_GetDict(m);
@@ -302,16 +314,20 @@ pygwy_finalize_stderr_redirect(PyObject *d)
}
static void
-pygwy_add_sys_path(PyObject *dir, gchar *path)
+pygwy_add_sys_path(PyObject *dir, const gchar *path)
{
- gchar *sys_path_append;
+ static const gchar sys_path_append_template[] =
+ "import sys\n"
+ "if '%s' not in sys.path:\n"
+ " sys.path.append('%s')\n"
+ "\n";
if (g_file_test(path, G_FILE_TEST_IS_DIR)) {
- sys_path_append = g_strdup_printf("import sys\n"
- "sys.path.append('%s')\n",
- path);
- pygwy_run_string(sys_path_append, Py_file_input, dir, dir);
- g_free(sys_path_append);
+ gchar *p = gwy_strreplace(path, "'", "\\'", (gsize)-1);
+ gchar *command = g_strdup_printf(sys_path_append_template, p, p);
+ g_free(p);
+ pygwy_run_string(command, Py_file_input, dir, dir);
+ g_free(command);
}
else {
g_warning("Cannot add non-existent path '%s'.", path);
@@ -385,31 +401,49 @@ err_PYTHON(GError **error)
}
static const gchar*
-pygwy_read_val_from_dict(PyObject *dict, char *v, const gchar *f)
+pygwy_read_str_from_dict(PyObject *dict, char *v, const gchar *filename,
+ gboolean required)
{
- const char *ret;
PyObject *py_str;
+ const char *ret;
if ((py_str = PyDict_GetItemString(dict, v))) {
if (PyArg_Parse(py_str, "s", &ret)) {
- gwy_debug("Read value '%s' from '%s': %s", v, f, ret);
+ gwy_debug("Read value '%s' from '%s': %s", v, filename, ret);
return ret;
}
}
- g_warning("Value '%s' not found in '%s'.", v, f);
+ if (required) {
+ g_warning("Value '%s' not found in '%s'.", v, filename);
+ }
return NULL;
}
+static gboolean
+pygwy_read_flags_from_dict(PyObject *dict, char *v, const gchar *filename,
+ guint *ret)
+{
+ PyObject *py_flags;
+
+ if ((py_flags = PyDict_GetItemString(dict, v))) {
+ if (PyArg_Parse(py_flags, "I", ret)) {
+ gwy_debug("Read value '%s' from '%s': %u", v, filename, *ret);
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
/* Contract: It must either return NULL or PygwyModuleInfo that is correct
* for given module type with all required fields filled. */
static PygwyModuleInfo*
-pygwy_get_module_info(const gchar *fullpath, const gchar *filename,
- const gchar **desc, const gchar **menu_path)
+pygwy_get_module_info(const gchar *fullpath, const gchar *filename)
{
PygwyModuleInfo *info = NULL;
gchar *suffix;
const gchar *type_str;
PyObject *module = NULL, *d, *module_dict;
+ gboolean type_is_dataprocess;
info = g_new0(PygwyModuleInfo, 1);
info->fullpath = g_strdup(fullpath);
@@ -436,7 +470,8 @@ pygwy_get_module_info(const gchar *fullpath, const gchar *filename,
/* Get parameters from dict */
module_dict = PyModule_GetDict(module);
- type_str = pygwy_read_val_from_dict(module_dict, "plugin_type", fullpath);
+ type_str = pygwy_read_str_from_dict(module_dict, "plugin_type", fullpath,
+ TRUE);
gwy_debug("read values: %s %p", type_str, type_str);
if (!type_str) {
g_warning("Undefined module type, cannot load.");
@@ -448,27 +483,62 @@ pygwy_get_module_info(const gchar *fullpath, const gchar *filename,
g_warning("Unrecognised module type %s, cannot load.", type_str);
goto fail;
}
+ type_is_dataprocess = (info->type == PYGWY_PROCESS
+ || info->type == PYGWY_GRAPH
+ || info->type == PYGWY_VOLUME
+ || info->type == PYGWY_XYZ);
/* plugin_desc is required for file modules (as the file type) */
- *desc = pygwy_read_val_from_dict(module_dict, "plugin_desc", fullpath);
- if (info->type == PYGWY_FILE && !*desc) {
+ info->desc = pygwy_read_str_from_dict(module_dict, "plugin_desc", fullpath,
+ TRUE);
+ if (info->type == PYGWY_FILE && !info->desc) {
info->type = PYGWY_UNDEFINED;
goto fail;
}
- else if (!*desc)
- *desc = N_("Function written in Python"); /* Not very descriptive. */
-
- /* menu path is required for all something-processing modules */
- if (info->type == PYGWY_PROCESS || info->type == PYGWY_GRAPH
- || info->type == PYGWY_VOLUME || info->type == PYGWY_XYZ) {
- *menu_path = pygwy_read_val_from_dict(module_dict, "plugin_menu",
- fullpath);
- if (!*menu_path) {
+ else if (!info->desc) {
+ /* Not very descriptive... */
+ info->desc = N_("Function written in Python");
+ }
+ gwy_debug("desc: %s", info->desc);
+
+ /* menu path is required for all something-processing modules */
+ if (type_is_dataprocess) {
+ info->menu_path = pygwy_read_str_from_dict(module_dict, "plugin_menu",
+ fullpath, TRUE);
+ if (!info->menu_path) {
info->type = PYGWY_UNDEFINED;
goto fail;
}
+ gwy_debug("menu_path: %s", info->menu_path);
+ }
+
+ /* icon is optional for something-processing modules */
+ if (type_is_dataprocess) {
+ info->icon = pygwy_read_str_from_dict(module_dict, "plugin_icon",
+ fullpath, FALSE);
+ gwy_debug("icon: %s", info->icon);
+ }
+
+ /* run mode and sensitivity are optional for something-processing modules */
+ if (type_is_dataprocess) {
+ if (info->type == PYGWY_PROCESS)
+ info->sens = GWY_MENU_FLAG_DATA;
+ else if (info->type == PYGWY_GRAPH)
+ info->sens = GWY_MENU_FLAG_GRAPH;
+ else if (info->type == PYGWY_VOLUME)
+ info->sens = GWY_MENU_FLAG_VOLUME;
+ else if (info->type == PYGWY_XYZ)
+ info->sens = GWY_MENU_FLAG_XYZ;
+
+ pygwy_read_flags_from_dict(module_dict, "plugin_sens", fullpath,
+ &info->sens);
+ gwy_debug("sens: 0x%04x", info->sens);
+
+ info->run = (GWY_RUN_INTERACTIVE | GWY_RUN_IMMEDIATE);
+ pygwy_read_flags_from_dict(module_dict, "plugin_run", fullpath,
+ &info->run);
+ gwy_debug("run: 0x%04x", info->run);
}
- gwy_debug("read values: %s %s", *desc, *menu_path);
fail:
if (info->type == PYGWY_UNDEFINED) {
@@ -497,57 +567,28 @@ free_module_info(PygwyModuleInfo *info)
static void
pygwy_register_modules(void)
{
- GDir *module_dir;
gchar *fullpath, *module_dir_name;
- const gchar *desc, *menu_path, *filename;
PygwyModuleInfo *info;
- GError *err = NULL;
gboolean ok;
+ gchar **candidates;
+ guint i;
- module_dir_name = g_build_filename(gwy_get_user_dir(),
- pygwy_module_dir_name,
- NULL);
- gwy_debug("Module path: %s", module_dir_name);
-
- module_dir = g_dir_open(module_dir_name, 0, &err);
- if (module_dir == NULL && err) {
- if (err->code == G_FILE_ERROR_NOENT) {
- /* directory not found/does not exist */
- if (g_mkdir(module_dir_name, 0700)) {
- g_warning("Cannot create pygwy module directory %s",
- module_dir_name);
- }
- else {
- gwy_debug("Pygwy directory created: %s", module_dir_name);
- }
- }
- else {
- g_warning("Cannot open pygwy directory: %s, reason: %s",
- module_dir_name, err->message);
- }
+ candidates = find_module_candidates(&module_dir_name);
+ if (!candidates) {
g_free(module_dir_name);
- /* Whether the directory has been created or not, there is no reason
- to continue by reading scripts as long as no script is available */
return;
}
- /* Initialize python iterpret and init gwy module */
+ /* Initialize the python interpret and init gwy module. Only do it here
+ * if we find any potential python modules. Otherwise postpone the cost
+ * to pygwy console invocation, if if ever comes. */
pygwy_initialize();
- while ((filename = g_dir_read_name(module_dir))) {
- if (!g_str_has_suffix(filename, ".py")
- && !g_str_has_suffix(filename, ".PY")
- && !g_str_has_suffix(filename, ".Py")) {
- gwy_debug("Skipping file with wrong extension: %s", filename);
- continue;
- }
-
+ for (i = 0; candidates[i]; i++) {
/* Read content of module file */
- fullpath = g_build_filename(module_dir_name, filename, NULL);
+ fullpath = g_build_filename(module_dir_name, candidates[i], NULL);
/* get module's metadata */
- desc = NULL;
- menu_path = NULL;
- info = pygwy_get_module_info(fullpath, filename, &desc, &menu_path);
+ info = pygwy_get_module_info(fullpath, candidates[i]);
g_free(fullpath);
if (!info)
continue;
@@ -556,15 +597,12 @@ pygwy_register_modules(void)
if (info->type == PYGWY_PROCESS) {
gwy_debug("Registering proc func.");
ok = gwy_process_func_register(info->name, pygwy_procvolxyz_run,
- menu_path,
- NULL,
- GWY_RUN_INTERACTIVE | GWY_RUN_IMMEDIATE,
- GWY_MENU_FLAG_DATA, desc);
+ info->menu_path, info->icon,
+ info->run, info->sens, info->desc);
}
else if (info->type == PYGWY_FILE) {
gwy_debug("Registering file func.");
- ok = gwy_file_func_register(info->name,
- desc,
+ ok = gwy_file_func_register(info->name, info->desc,
pygwy_file_detect_run,
pygwy_file_load_run,
NULL,
@@ -572,32 +610,22 @@ pygwy_register_modules(void)
}
else if (info->type == PYGWY_GRAPH) {
gwy_debug("Registering graph func.");
- ok = gwy_graph_func_register(info->name,
- pygwy_graph_run,
- menu_path,
- GWY_STOCK_GRAPH_FUNCTION,
- GWY_MENU_FLAG_GRAPH,
- desc);
+ ok = gwy_graph_func_register(info->name, pygwy_graph_run,
+ info->menu_path, info->icon,
+ info->sens, info->desc);
}
else if (info->type == PYGWY_VOLUME) {
gwy_debug("Registering volume func.");
- ok = gwy_volume_func_register(info->name,
- pygwy_procvolxyz_run,
- menu_path,
- NULL,
- GWY_RUN_IMMEDIATE,
- GWY_MENU_FLAG_VOLUME,
- desc);
+ ok = gwy_volume_func_register(info->name, pygwy_procvolxyz_run,
+ info->menu_path, info->icon,
+ info->run, info->sens, info->desc);
}
else if (info->type == PYGWY_XYZ) {
gwy_debug("Registering xyz func.");
ok = gwy_volume_func_register(info->name,
pygwy_procvolxyz_run,
- menu_path,
- NULL,
- GWY_RUN_IMMEDIATE,
- GWY_MENU_FLAG_XYZ,
- desc);
+ info->menu_path, info->icon,
+ info->run, info->sens, info->desc);
}
else {
g_assert_not_reached();
@@ -608,8 +636,65 @@ pygwy_register_modules(void)
else
free_module_info(info);
}
- g_dir_close(module_dir);
g_free(module_dir_name);
+ g_strfreev(candidates);
+}
+
+static gchar**
+find_module_candidates(gchar **module_dir_name)
+{
+ GDir *module_dir;
+ const gchar *filename, *dot;
+ GPtrArray *candidates = NULL;
+ GError *err = NULL;
+
+ *module_dir_name = g_build_filename(gwy_get_user_dir(),
+ pygwy_module_dir_name,
+ NULL);
+ gwy_debug("Module path: %s", *module_dir_name);
+
+ module_dir = g_dir_open(*module_dir_name, 0, &err);
+ if (module_dir == NULL && err) {
+ if (err->code == G_FILE_ERROR_NOENT) {
+ /* directory not found/does not exist */
+ if (g_mkdir(*module_dir_name, 0700)) {
+ g_warning("Cannot create pygwy module directory %s",
+ *module_dir_name);
+ }
+ else {
+ gwy_debug("Pygwy directory created: %s", *module_dir_name);
+ }
+ }
+ else {
+ g_warning("Cannot open pygwy directory: %s, reason: %s",
+ *module_dir_name, err->message);
+ }
+ /* Whether the directory has been created or not, there is no reason
+ to continue by reading scripts as long as no script is available */
+ return NULL;
+ }
+
+ while ((filename = g_dir_read_name(module_dir))) {
+ if (!(dot = strrchr(filename, '.'))) {
+ gwy_debug("Skipping file with no extension: %s", filename);
+ continue;
+ }
+ if (g_ascii_strcasecmp(dot+1, "py") != 0) {
+ gwy_debug("Skipping file with wrong extension: %s", filename);
+ continue;
+ }
+
+ if (!candidates)
+ candidates = g_ptr_array_new();
+ g_ptr_array_add(candidates, g_strdup(filename));
+ }
+ g_dir_close(module_dir);
+
+ if (!candidates)
+ return NULL;
+
+ g_ptr_array_add(candidates, NULL);
+ return (gchar**)g_ptr_array_free(candidates, FALSE);
}
/* (Re)load module code. The function succeeds if, after finishing, we have
diff --git a/modules/pygwy/pygwy.h b/modules/pygwy/pygwy.h
index c0ea5ba..9bcfc1c 100644
--- a/modules/pygwy/pygwy.h
+++ b/modules/pygwy/pygwy.h
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: pygwy.h 19267 2016-11-15 12:25:40Z yeti-dn $
+ * @(#) $Id: pygwy.h 19294 2016-11-20 08:27:30Z yeti-dn $
* Copyright (C) 2008 Jan Horak
* E-mail: xhorak at gmail.com
*
@@ -27,21 +27,25 @@
#define pygwy_stderr_redirect_setup_code \
"import sys, tempfile\n" \
- "_pygwy_stderr_redir = tempfile.TemporaryFile()\n" \
+ "_pygwy_output_redir = tempfile.TemporaryFile()\n" \
"_pygwy_stderr_orig = sys.stderr\n" \
- "sys.stderr = _pygwy_stderr_redir\n"
+ "_pygwy_stdout_orig = sys.stdout\n" \
+ "sys.stderr = _pygwy_output_redir\n" \
+ "sys.stdout = _pygwy_output_redir\n"
#define pygwy_stderr_redirect_restore_code \
- "_pygwy_stderr_redir.seek(0)\n" \
- "_pygwy_stderr_string = _pygwy_stderr_redir.read()\n" \
- "_pygwy_stderr_redir.close()\n" \
- "sys.stderr = _pygwy_stderr_orig\n"
+ "_pygwy_output_redir.seek(0)\n" \
+ "_pygwy_stderr_string = _pygwy_output_redir.read()\n" \
+ "_pygwy_output_redir.close()\n" \
+ "sys.stderr = _pygwy_stderr_orig\n" \
+ "sys.stdout = _pygwy_stdout_orig\n"
#define pygwy_stderr_redirect_readstr_code \
- "_pygwy_stderr_pos = _pygwy_stderr_redir.tell()\n" \
- "_pygwy_stderr_redir.seek(0)\n" \
- "_pygwy_stderr_string = _pygwy_stderr_redir.read(_pygwy_stderr_pos)\n" \
- "_pygwy_stderr_redir.seek(0)"
+ "_pygwy_output_redir.flush()\n" \
+ "_pygwy_stderr_pos = _pygwy_output_redir.tell()\n" \
+ "_pygwy_output_redir.seek(0)\n" \
+ "_pygwy_stderr_string = _pygwy_output_redir.read(_pygwy_stderr_pos)\n" \
+ "_pygwy_output_redir.seek(0)"
PyObject* pygwy_create_environment (const gchar *filename,
gboolean show_errors);
diff --git a/modules/pygwy/pygwy.override b/modules/pygwy/pygwy.override
index 616a8e5..37c81ef 100644
--- a/modules/pygwy/pygwy.override
+++ b/modules/pygwy/pygwy.override
@@ -1,5 +1,5 @@
/*
- * $Id: pygwy.override 19233 2016-11-10 19:31:14Z yeti-dn $
+ * $Id: pygwy.override 19325 2016-11-28 22:26:23Z yeti-dn $
* Copyright (C) 2008 Jan Horak, 2015-2016 David Necas (Yeti)
* E-mail: xhorak at gmail.com, yeti at gwyddion.net.
*
@@ -45,9 +45,6 @@ typedef gdouble GwyDoubleOutArg;
typedef gdouble GwyDoubleInOutArg;
typedef GwyRGBA GwyRGBAOutArg;
-typedef gchar keep_gchar; // do not delete when returning
-typedef gchar pass_owner_gchar; // do not delete in wrapped function
-
typedef GwyNLFitter GwyMathNLFit;
#define gwy_si_value_format_new gwy_si_unit_value_format_new
@@ -158,6 +155,105 @@ create_list_consume_int_garray(GArray *array)
return list;
}
+static gchar*
+extract_stringlike_as_new_string(PyObject *value)
+{
+ if (PyString_Check(value))
+ return g_strdup(PyString_AsString(value));
+
+ if (PyUnicode_Check(value)) {
+ PyObject *utf8value = PyUnicode_AsUTF8String(value);
+ gchar *ret;
+
+ if (!utf8value)
+ return NULL;
+ ret = g_strdup(PyString_AsString(utf8value));
+ Py_DECREF(utf8value);
+ return ret;
+ }
+
+ return NULL;
+}
+
+static void
+free_string_array(GArray *array)
+{
+ gsize i, n = array->len;
+ gchar *s;
+
+ for (i = 0; i < n; i++) {
+ s = g_array_index(array, gchar*, i);
+ if (!s)
+ break;
+ g_free(s);
+ }
+ g_array_free(array, TRUE);
+}
+
+static GArray*
+create_string_garray_from_sequence(PyObject *object)
+{
+ GArray *array;
+ gchar **a;
+ gsize n, i;
+
+ if (!PySequence_Check(object))
+ return NULL;
+
+ n = PySequence_Size(object);
+ array = g_array_new(FALSE, TRUE, sizeof(gchar*));
+ g_array_set_size(array, n);
+ a = (gchar**)array->data;
+ for (i = 0; i < n; i++) {
+ PyObject *item = PySequence_GetItem(object, i);
+ if (!(a[i] = extract_stringlike_as_new_string(item))) {
+ free_string_array(array);
+ return NULL;
+ }
+ }
+ return array;
+}
+
+static PyObject*
+create_list_consume_string_garray(GArray *array)
+{
+ PyObject *list;
+ const gchar **a;
+ gsize n, i;
+
+ n = array->len;
+ if (!(list = PyList_New(n))) {
+ free_string_array(array);
+ /* Should we raise an exception, or who does it? */
+ return NULL;
+ }
+ a = (const gchar**)array->data;
+ for (i = 0; i < n; i++)
+ PyList_SetItem(list, i, PyString_FromString(a[i]));
+ free_string_array(array);
+ return list;
+}
+
+static PyObject*
+create_list_consume_const_string_garray(GArray *array)
+{
+ PyObject *list;
+ const gchar **a;
+ gsize n, i;
+
+ n = array->len;
+ if (!(list = PyList_New(n))) {
+ g_array_free(array, TRUE);
+ /* Should we raise an exception, or who does it? */
+ return NULL;
+ }
+ a = (const gchar**)array->data;
+ for (i = 0; i < n; i++)
+ PyList_SetItem(list, i, PyString_FromString(a[i]));
+ g_array_free(array, TRUE);
+ return list;
+}
+
static PyObject*
create_string_consume_gstring(GString *str)
{
@@ -516,27 +612,6 @@ static const PyMappingMethods _wrap_gwy_container_tp_as_mapping = {
};
%%
-define GwyContainer.keys_by_name noargs
-static PyObject*
-_wrap_gwy_container_keys_by_name(PyGObject *self)
-{
- gint i;
- const gchar **keys;
- PyObject *tuple;
-
- keys = gwy_container_keys_by_name(GWY_CONTAINER(self->obj));
- tuple = PyTuple_New(gwy_container_get_n_items(GWY_CONTAINER(self->obj)));
- if (!tuple)
- return NULL;
- // fill tuple with keys
- for (i = 0 ; i < gwy_container_get_n_items(GWY_CONTAINER(self->obj)); i++) {
- PyTuple_SetItem(tuple, i, PyString_FromString(keys[i]));
- }
- g_free(keys);
- return tuple;
-}
-
-%%
define GwyContainer.get_value_by_name kwargs
static PyObject *
_wrap_gwy_container_get_value_by_name(PyGObject *self, PyObject *args, PyObject *kwargs)
@@ -880,18 +955,11 @@ static int
_wrap_gwy_si_value_format__set_units(PyGBoxed *self, PyObject *value, void *closure)
{
GwySIValueFormat *vf = pyg_boxed_get(self, GwySIValueFormat);
+ gchar *s;
- if (PyString_Check(value)) {
- gwy_si_value_format_set_units(vf, PyString_AsString(value));
- return 0;
- }
- if (PyUnicode_Check(value)) {
- PyObject *utf8value = PyUnicode_AsUTF8String(value);
-
- if (!utf8value)
- return -1;
- gwy_si_value_format_set_units(vf, PyString_AsString(utf8value));
- Py_DECREF(utf8value);
+ if ((s = extract_stringlike_as_new_string(value))) {
+ gwy_si_value_format_set_units(vf, s);
+ g_free(s);
return 0;
}
PyErr_SetString(PyExc_TypeError, "Units must be a string.");
diff --git a/modules/pygwy/wrap_calls.c b/modules/pygwy/wrap_calls.c
index 1cc1e9b..0ec40f5 100644
--- a/modules/pygwy/wrap_calls.c
+++ b/modules/pygwy/wrap_calls.c
@@ -1,5 +1,5 @@
/*
- * $Id: wrap_calls.c 19279 2016-11-16 16:52:15Z yeti-dn $
+ * $Id: wrap_calls.c 20180 2017-08-07 09:18:25Z yeti-dn $
* Copyright (C) 2008 Jan Horak, 2015-2016 David Necas (Yeti)
* E-mail: xhorak at gmail.com, yeti at gwyddion.net.
*
@@ -47,6 +47,42 @@ create_int_array(const gint *data, guint len, gboolean free_data)
return ret;
}
+static void
+free_string_array(GwyStringArray *array)
+{
+ gsize i, n = array->len;
+ gchar *s;
+
+ for (i = 0; i < n; i++) {
+ s = g_array_index(array, gchar*, i);
+ if (!s)
+ break;
+ g_free(s);
+ }
+ g_array_free(array, TRUE);
+}
+
+static GwyStringArray*
+create_string_array(const gchar **data, guint len, gboolean free_data)
+{
+ GArray *ret = g_array_new(FALSE, FALSE, sizeof(gchar*));
+ g_array_append_vals(ret, data, len);
+ if (free_data)
+ g_free((gpointer)data);
+ return ret;
+}
+
+static GwyConstStringArray*
+create_const_string_array(const gchar *const *data, guint len,
+ gboolean free_data)
+{
+ GArray *ret = g_array_new(FALSE, FALSE, sizeof(gchar*));
+ g_array_append_vals(ret, data, len);
+ if (free_data)
+ g_free((gpointer)data);
+ return ret;
+}
+
gdouble
gwy_math_median_pygwy(GwyDoubleArray *array)
{
@@ -71,8 +107,8 @@ gwy_math_curvature_pygwy(GwyDoubleArray *coeffs, gint *dimen,
}
GwyArrayFuncStatus
-gwy_math_refine_maximum_pygwy (GwyDoubleArray *z,
- gdouble *x, gdouble *y, gboolean *refined)
+gwy_math_refine_maximum_pygwy(GwyDoubleArray *z,
+ gdouble *x, gdouble *y, gboolean *refined)
{
gboolean ok = (z->len == 9);
if (ok)
@@ -82,6 +118,28 @@ gwy_math_refine_maximum_pygwy (GwyDoubleArray *z,
}
GwyArrayFuncStatus
+gwy_math_refine_maximum_2d_pygwy(GwyDoubleArray *z,
+ gdouble *x, gdouble *y, gboolean *refined)
+{
+ gboolean ok = (z->len == 9);
+ if (ok)
+ *refined = gwy_math_refine_maximum_2d((gdouble*)z->data, x, y);
+ g_array_free(z, TRUE);
+ return ok;
+}
+
+GwyArrayFuncStatus
+gwy_math_refine_maximum_1d_pygwy(GwyDoubleArray *y,
+ gdouble *x, gboolean *refined)
+{
+ gboolean ok = (y->len == 3);
+ if (ok)
+ *refined = gwy_math_refine_maximum_1d((gdouble*)y->data, x);
+ g_array_free(y, TRUE);
+ return ok;
+}
+
+GwyArrayFuncStatus
gwy_math_is_in_polygon_pygwy(gdouble x, gdouble y, GwyDoubleArray *poly,
gboolean *is_inside)
{
@@ -155,6 +213,131 @@ gwy_fft_window_pygwy(GwyDoubleArray *data, GwyWindowingType windowing)
return data;
}
+GwyDoubleArray*
+gwy_interpolation_resolve_coeffs_1d_pygwy(GwyDoubleArray *data,
+ GwyInterpolationType interpolation)
+{
+ gwy_interpolation_resolve_coeffs_1d(data->len, (gdouble*)data->data,
+ interpolation);
+ /* This is the same as freeing data and returning a new array. */
+ return data;
+}
+
+GwyDoubleArray*
+gwy_interpolation_resolve_coeffs_2d_pygwy(gint width,
+ gint height,
+ gint rowstride,
+ GwyDoubleArray *data,
+ GwyInterpolationType interpolation)
+{
+ g_return_val_if_fail(data->len == height*rowstride, data);
+ g_return_val_if_fail(width <= rowstride, data);
+ gwy_interpolation_resolve_coeffs_2d(width, height, rowstride,
+ (gdouble*)data->data,
+ interpolation);
+ /* This is the same as freeing data and returning a new array. */
+ return data;
+}
+
+GwyArrayFuncStatus
+gwy_interpolation_get_dval_of_equidists_pygwy(gdouble x,
+ GwyDoubleArray *data,
+ GwyInterpolationType interpolation,
+ gdouble *result)
+{
+ guint suplen = gwy_interpolation_get_support_size(interpolation);
+ gboolean ok = (data->len == suplen || suplen == 0);
+ if (ok) {
+ *result = gwy_interpolation_get_dval_of_equidists(x, (gdouble*)data->data,
+ interpolation);
+ }
+ g_array_free(data, TRUE);
+ return ok;
+}
+
+GwyArrayFuncStatus
+gwy_interpolation_interpolate_1d_pygwy(gdouble x,
+ GwyDoubleArray *coeff,
+ GwyInterpolationType interpolation,
+ gdouble *result)
+{
+ guint suplen = gwy_interpolation_get_support_size(interpolation);
+ gboolean ok = (coeff->len == suplen || suplen == 0);
+ if (ok) {
+ *result = gwy_interpolation_interpolate_1d(x, (gdouble*)coeff->data,
+ interpolation);
+ }
+ g_array_free(coeff, TRUE);
+ return ok;
+}
+
+GwyArrayFuncStatus
+gwy_interpolation_interpolate_2d_pygwy(gdouble x, gdouble y,
+ gint rowstride,
+ GwyDoubleArray *coeff,
+ GwyInterpolationType interpolation,
+ gdouble *result)
+{
+ guint suplen = gwy_interpolation_get_support_size(interpolation);
+ gboolean ok = (coeff->len == suplen*rowstride || suplen == 0);
+ if (ok) {
+ *result = gwy_interpolation_interpolate_2d(x, y, rowstride,
+ (gdouble*)coeff->data,
+ interpolation);
+ }
+ g_array_free(coeff, TRUE);
+ return ok;
+}
+
+GwyDoubleArray*
+gwy_interpolation_resample_block_1d_pygwy(GwyDoubleArray *data,
+ gint newlength,
+ GwyInterpolationType interpolation)
+{
+ GwyDoubleArray *ret = g_array_new(FALSE, FALSE, sizeof(gdouble));
+ g_array_set_size(ret, newlength);
+ gwy_interpolation_resample_block_1d(data->len, (gdouble*)data->data,
+ newlength, (gdouble*)ret->data,
+ interpolation, FALSE);
+ return ret;
+}
+
+GwyDoubleArray*
+gwy_interpolation_resample_block_2d_pygwy(GwyDoubleArray *data,
+ gint width,
+ gint height,
+ gint rowstride,
+ gint newwidth,
+ gint newheight,
+ gint newrowstride,
+ GwyInterpolationType interpolation)
+{
+ GwyDoubleArray *ret = g_array_new(FALSE, TRUE, sizeof(gdouble));
+ g_array_set_size(ret, newrowstride*newheight);
+ g_return_val_if_fail(data->len == height*rowstride, ret);
+ gwy_interpolation_resample_block_2d(width, height, rowstride,
+ (gdouble*)data->data,
+ newwidth, newheight, newrowstride,
+ (gdouble*)ret->data,
+ interpolation, FALSE);
+ return ret;
+}
+
+GwyDoubleArray*
+gwy_interpolation_shift_block_1d_pygwy(GwyDoubleArray *data,
+ gdouble offset,
+ GwyInterpolationType interpolation,
+ GwyExteriorType exterior,
+ gdouble fill_value)
+{
+ GwyDoubleArray *ret = g_array_new(FALSE, FALSE, sizeof(gdouble));
+ gwy_interpolation_shift_block_1d(data->len, (gdouble*)data->data,
+ offset, (gdouble*)ret->data,
+ interpolation, exterior, fill_value,
+ FALSE);
+ return ret;
+}
+
/**
* gwy_selection_get_data_pygwy:
* @selection: A selection.
@@ -702,6 +885,36 @@ gwy_data_field_circular_area_unextract_pygwy(GwyDataField *data_field,
return ok;
}
+GwyDoubleArray*
+gwy_data_field_circular_area_extract_with_pos_pygwy(GwyDataField *data_field,
+ gint col, gint row,
+ gdouble radius,
+ GwyIntArrayOutArg xpos,
+ GwyIntArrayOutArg ypos)
+{
+ GwyDoubleArray *array = g_array_new(FALSE, FALSE, sizeof(gdouble));
+ guint size = gwy_data_field_get_circular_area_size(radius);
+ g_array_set_size(array, size);
+ g_array_set_size(xpos, size);
+ g_array_set_size(ypos, size);
+ gwy_data_field_circular_area_extract_with_pos(data_field, col, row, radius,
+ (gdouble*)array->data,
+ (gint*)xpos->data,
+ (gint*)ypos->data);
+ return array;
+}
+
+gboolean
+gwy_data_field_local_maximum_pygwy(GwyDataField *dfield,
+ gdouble x, gdouble y,
+ gint ax, gint ay,
+ gdouble *x_out, gdouble *y_out)
+{
+ *x_out = x;
+ *y_out = y;
+ return gwy_data_field_local_maximum(dfield, x_out, y_out, ax, ay);
+}
+
GwyArrayFuncStatus
gwy_data_field_affine_pygwy(GwyDataField *data_field,
GwyDataField *dest,
@@ -719,6 +932,90 @@ gwy_data_field_affine_pygwy(GwyDataField *data_field,
return ok;
}
+GwyArrayFuncStatus
+gwy_data_field_affine_prepare_pygwy(GwyDataField *source,
+ GwyDataField *dest,
+ GwyDoubleArray *a1a2,
+ GwyDoubleArray *a1a2_corr,
+ GwyAffineScalingType scaling,
+ gboolean prevent_rotation,
+ gdouble oversampling,
+ GwyDoubleArrayOutArg a1a2_corr_out,
+ GwyDoubleArrayOutArg invtrans)
+{
+ gboolean ok = (a1a2->len == 4 && a1a2_corr->len == 4);
+ g_array_set_size(a1a2_corr_out, 4);
+ g_array_set_size(invtrans, 6);
+ gwy_clear((gdouble*)invtrans->data, 6);
+ if (ok) {
+ gwy_assign((gdouble*)a1a2_corr_out->data, (gdouble*)a1a2_corr->data, 4);
+ gwy_data_field_affine_prepare(source, dest,
+ (const gdouble*)a1a2->data,
+ (gdouble*)a1a2_corr_out->data,
+ (gdouble*)invtrans->data,
+ scaling, prevent_rotation, oversampling);
+ }
+ else {
+ gwy_clear((gdouble*)a1a2_corr_out->data, 4);
+ }
+ g_array_free(a1a2, TRUE);
+ g_array_free(a1a2_corr, TRUE);
+ return ok;
+}
+
+GwyArrayFuncStatus
+gwy_data_field_measure_lattice_acf_pygwy(GwyDataField *acf2d,
+ GwyDoubleArray *a1a2,
+ GwyDoubleArrayOutArg a1a2_out,
+ gboolean *succeeded)
+{
+ gboolean ok = (a1a2->len == 4);
+ g_array_set_size(a1a2_out, 4);
+ gwy_clear((gdouble*)a1a2_out->data, 4);
+ *succeeded = FALSE;
+ if (ok) {
+ gwy_assign((gdouble*)a1a2_out->data, (gdouble*)a1a2->data, 4);
+ *succeeded = gwy_data_field_measure_lattice_acf(acf2d,
+ (gdouble*)a1a2_out->data);
+ }
+ if (!*succeeded || !ok)
+ gwy_clear((gdouble*)a1a2_out->data, 4);
+ g_array_free(a1a2, TRUE);
+ return ok;
+}
+
+GwyArrayFuncStatus
+gwy_data_field_measure_lattice_psdf_pygwy(GwyDataField *psdf2d,
+ GwyDoubleArray *a1a2,
+ GwyDoubleArrayOutArg a1a2_out,
+ gboolean *succeeded)
+{
+ gboolean ok = (a1a2->len == 4);
+ g_array_set_size(a1a2_out, 4);
+ gwy_clear((gdouble*)a1a2_out->data, 4);
+ *succeeded = FALSE;
+ if (ok) {
+ gwy_assign((gdouble*)a1a2_out->data, (gdouble*)a1a2->data, 4);
+ *succeeded = gwy_data_field_measure_lattice_psdf(psdf2d,
+ (gdouble*)a1a2_out->data);
+ }
+ if (!*succeeded || !ok)
+ gwy_clear((gdouble*)a1a2_out->data, 4);
+ g_array_free(a1a2, TRUE);
+ return ok;
+}
+
+gint
+gwy_data_field_waterpour_pygwy(GwyDataField *data_field,
+ GwyDataField *result,
+ GwyIntArrayOutArg grains)
+{
+ guint n = data_field->xres*data_field->yres;
+ g_array_set_size(grains, n);
+ gwy_clear(((gint*)grains->data), n);
+ return gwy_data_field_waterpour(data_field, result, (gint*)grains->data);
+}
+
void
gwy_data_field_get_local_maxima_list_pygwy(GwyDataField *dfield,
GwyDoubleArrayOutArg xdata,
@@ -836,6 +1133,37 @@ gwy_container_keys_pygwy(GwyContainer *container)
gwy_container_get_n_items(container), TRUE);
}
+GwyConstStringArray*
+gwy_container_keys_by_name_pygwy(GwyContainer *container)
+{
+ const gchar **keys = gwy_container_keys_by_name(container);
+ return create_const_string_array((const gchar*const*)keys,
+ gwy_container_get_n_items(container),
+ TRUE);
+}
+
+GwyContainer*
+gwy_container_duplicate_by_prefix_pygwy(GwyContainer *container,
+ GwyStringArray *keys)
+{
+ GwyContainer *ret;
+ ret = gwy_container_duplicate_by_prefixv(container,
+ keys->len,
+ (const gchar**)keys->data);
+ free_string_array(keys);
+ return ret;
+}
+
+GwyStringArray*
+gwy_container_serialize_to_text_pygwy(GwyContainer *container)
+{
+ GPtrArray *strs = gwy_container_serialize_to_text(container);
+ GwyStringArray *array = create_string_array((const gchar**)strs->pdata,
+ strs->len, FALSE);
+ g_ptr_array_free(strs, TRUE);
+ return array;
+}
+
static GwyIntArray*
create_id_array(gint *ids)
{
@@ -1327,15 +1655,54 @@ gwy_axis_get_major_ticks_pygwy(GwyAxis *axis)
}
gulong
+gwy_undo_qcheckpoint_pygwy(GwyContainer *container, GwyIntArray *keys)
+{
+ gulong id = 0;
+ g_assert(sizeof(GQuark) == sizeof(gint));
+ if (keys->len) {
+ id = gwy_undo_qcheckpointv(container, keys->len, (GQuark*)keys->data);
+ }
+ g_array_free(keys, TRUE);
+ return id;
+}
+
+gulong
+gwy_undo_checkpoint_pygwy(GwyContainer *container, GwyStringArray *keys)
+{
+ gulong id = 0;
+ if (keys->len) {
+ id = gwy_undo_checkpointv(container, keys->len,
+ (const gchar**)keys->data);
+ }
+ free_string_array(keys);
+ return id;
+}
+
+gulong
gwy_app_undo_qcheckpoint_pygwy(GwyContainer *container, GwyIntArray *keys)
{
- gulong id;
+ gulong id = 0;
g_assert(sizeof(GQuark) == sizeof(gint));
- id = gwy_app_undo_qcheckpointv(container, keys->len, (GQuark*)keys->data);
+ if (keys->len) {
+ id = gwy_app_undo_qcheckpointv(container,
+ keys->len, (GQuark*)keys->data);
+ }
g_array_free(keys, TRUE);
return id;
}
+gulong
+gwy_app_undo_checkpoint_pygwy(GwyContainer *container, GwyStringArray *keys)
+{
+ gulong id = 0;
+ if (keys->len) {
+ id = gwy_app_undo_checkpointv(container,
+ keys->len, (const gchar**)keys->data);
+ }
+ free_string_array(keys);
+ return id;
+}
+
GObject*
gwy_inventory_get_item_pygwy(GwyInventory *inventory,
const gchar *name)
@@ -1510,6 +1877,97 @@ gwy_peaks_get_quantity_pygwy(GwyPeaks *peaks,
return array;
}
+GwyIntArray*
+gwy_tip_model_preset_get_params_pygwy(const GwyTipModelPreset *preset)
+{
+ GwyIntArray *array = g_array_new(FALSE, FALSE, sizeof(guint));
+ guint i, n = gwy_tip_model_get_preset_nparams(preset);
+ const GwyTipParamType *paramtypes = gwy_tip_model_get_preset_params(preset);
+ g_array_set_size(array, n);
+ for (i = 0; i < n; i++)
+ g_array_index(array, guint, i) = paramtypes[i];
+ return array;
+}
+
+GwyArrayFuncStatus
+gwy_tip_model_preset_create_pygwy(const GwyTipModelPreset *preset,
+ GwyDataField *tip,
+ GwyDoubleArray *params)
+{
+ gboolean ok = (params->len == gwy_tip_model_get_preset_nparams(preset));
+ if (ok)
+ gwy_tip_model_preset_create(preset, tip, (const gdouble*)params->data);
+ return ok;
+}
+
+GwyArrayFuncStatus
+gwy_tip_model_preset_create_for_zrange_pygwy(const GwyTipModelPreset *preset,
+ GwyDataField *tip,
+ gdouble zrange,
+ gboolean square,
+ GwyDoubleArray *params)
+{
+ gboolean ok = (params->len == gwy_tip_model_get_preset_nparams(preset));
+ if (ok) {
+ gwy_tip_model_preset_create_for_zrange(preset, tip, zrange, square,
+ (const gdouble*)params->data);
+ }
+ return ok;
+}
+
+GwySpline*
+gwy_spline_new_from_points_pygwy(GwyDoubleArray *xy)
+{
+ return gwy_spline_new_from_points((GwyXY*)xy->data, xy->len/2);
+}
+
+GwyDoubleArray*
+gwy_spline_get_points_pygwy(GwySpline *spline)
+{
+ GwyDoubleArray *array = g_array_new(FALSE, FALSE, sizeof(gdouble));
+ guint n = gwy_spline_get_npoints(spline);
+ g_array_set_size(array, 2*n);
+ gwy_assign((gdouble*)array->data,
+ (const gdouble*)gwy_spline_get_points(spline),
+ 2*n);
+ return array;
+}
+
+GwyDoubleArray*
+gwy_spline_get_tangents_pygwy(GwySpline *spline)
+{
+ GwyDoubleArray *array = g_array_new(FALSE, FALSE, sizeof(gdouble));
+ guint n = gwy_spline_get_npoints(spline);
+ g_array_set_size(array, 2*n);
+ gwy_assign((gdouble*)array->data,
+ (const gdouble*)gwy_spline_get_tangents(spline),
+ 2*n);
+ return array;
+}
+
+GwyDoubleArray*
+gwy_spline_sample_naturally_pygwy(GwySpline *spline)
+{
+ guint n;
+ const GwyXY *xy = gwy_spline_sample_naturally(spline, &n);
+ GwyDoubleArray *array = g_array_new(FALSE, FALSE, sizeof(gdouble));
+ g_array_set_size(array, 2*n);
+ gwy_assign((gdouble*)array->data, (const gdouble*)xy, 2*n);
+ return array;
+}
+
+gdouble
+gwy_spline_sample_uniformly_pygwy(GwySpline *spline,
+ GwyDoubleArrayOutArg xy,
+ GwyDoubleArrayOutArg t,
+ guint n)
+{
+ g_array_set_size(xy, 2*n);
+ g_array_set_size(t, 2*n);
+ return gwy_spline_sample_uniformly(spline,
+ (GwyXY*)xy->data, (GwyXY*)t->data, n);
+}
+
GwyDoubleArray*
gwy_marker_box_get_markers_pygwy(GwyMarkerBox *mbox)
{
@@ -1526,4 +1984,14 @@ gwy_marker_box_set_markers_pygwy(GwyMarkerBox *mbox,
g_array_free(markers, TRUE);
}
+void
+gwy_app_sync_data_items_pygwy(GwyContainer *source, GwyContainer *dest,
+ gint from_id, gint to_id, gboolean delete_too,
+ GwyIntArray *items)
+{
+ g_assert(sizeof(GwyDataItem) == sizeof(gint));
+ gwy_app_sync_data_itemsv(source, dest, from_id, to_id, delete_too,
+ (GwyDataItem*)items->data, items->len);
+}
+
/* vim: set cin et ts=4 sw=4 cino=>1s,e0,n0,f0,{0,}0,^0,\:1s,=0,g1s,h0,t0,+1s,c3,(0,u0 : */
diff --git a/modules/pygwy/wrap_calls.h b/modules/pygwy/wrap_calls.h
index b8c5643..8174c7a 100644
--- a/modules/pygwy/wrap_calls.h
+++ b/modules/pygwy/wrap_calls.h
@@ -1,5 +1,5 @@
/*
- * $Id: wrap_calls.h 19268 2016-11-15 12:48:19Z yeti-dn $
+ * $Id: wrap_calls.h 20158 2017-08-03 15:20:40Z yeti-dn $
* Copyright (C) 2008 Jan Horak, 2015-2016 David Necas (Yeti)
* E-mail: xhorak at gmail.com, yeti at gwyddion.net.
*
@@ -38,304 +38,416 @@ typedef GArray *GwyDoubleArrayOutArg;
typedef GArray GwyDoubleArray;
typedef GArray *GwyIntArrayOutArg;
typedef GArray GwyIntArray;
+typedef GArray GwyStringArray; /* Must be freed. */
+typedef GArray GwyConstStringArray; /* Must not be touched. */
-gdouble gwy_math_median_pygwy (GwyDoubleArray *array);
-GwyArrayFuncStatus gwy_math_curvature_pygwy (GwyDoubleArray *coeffs,
- gint *dimen,
- gdouble *kappa1,
- gdouble *kappa2,
- gdouble *phi1,
- gdouble *phi2,
- gdouble *xc,
- gdouble *yc,
- gdouble *zc);
-GwyArrayFuncStatus gwy_math_refine_maximum_pygwy (GwyDoubleArray *z,
- gdouble *x,
- gdouble *y,
- gboolean *refined);
-GwyArrayFuncStatus gwy_math_is_in_polygon_pygwy (gdouble x,
- gdouble y,
- GwyDoubleArray *poly,
- gboolean *is_inside);
-GwyArrayFuncStatus gwy_math_find_nearest_line_pygwy (gdouble x,
- gdouble y,
- GwyDoubleArray *coords,
- GwyDoubleArray *metric,
- gint *idx,
- gdouble *d2min);
-GwyArrayFuncStatus gwy_math_find_nearest_point_pygwy (gdouble x,
- gdouble y,
- GwyDoubleArray *coords,
- GwyDoubleArray *metric,
- gint *idx,
- gdouble *d2min);
-GwyArrayFuncStatus gwy_math_fit_polynom_pygwy (GwyDoubleArray *xdata,
- GwyDoubleArray *ydata,
- gint n,
- GwyDoubleArrayOutArg coeffs);
-GwyDoubleArray* gwy_fft_window_pygwy (GwyDoubleArray *data,
- GwyWindowingType windowing);
-GwyDoubleArray* gwy_selection_get_data_pygwy (GwySelection *selection);
-GwyDoubleArray* gwy_selection_get_object_pygwy (GwySelection *selection,
- gint i);
-GwyArrayFuncStatus gwy_selection_set_data_pygwy (GwySelection *selection,
- GwyDoubleArray *data);
-GwyArrayFuncStatus gwy_selection_set_object_pygwy (GwySelection *selection,
- gint i,
- GwyDoubleArray *data);
-GwyDoubleArray* gwy_data_line_get_data_pygwy (GwyDataLine *data_line);
-GwyDoubleArray* gwy_data_field_get_data_pygwy (GwyDataField *data_field);
-GwyDoubleArray* gwy_brick_get_data_pygwy (GwyBrick *brick);
-GwyArrayFuncStatus gwy_data_line_set_data_pygwy (GwyDataLine *data_line,
- GwyDoubleArray *data);
-GwyArrayFuncStatus gwy_data_field_set_data_pygwy (GwyDataField *data_field,
- GwyDoubleArray *data);
-GwyArrayFuncStatus gwy_brick_set_data_pygwy (GwyBrick *brick,
- GwyDoubleArray *data);
-GwyDoubleArray* gwy_data_field_fit_polynom_pygwy (GwyDataField *data_field,
- gint col_degree,
- gint row_degree);
-GwyDoubleArray* gwy_data_field_area_fit_polynom_pygwy (GwyDataField *data_field,
- gint col,
- gint row,
- gint width,
- gint height,
- gint col_degree,
- gint row_degree);
-GwyArrayFuncStatus gwy_data_field_subtract_polynom_pygwy (GwyDataField *data_field,
- gint col_degree,
- gint row_degree,
- GwyDoubleArray *coeffs);
-GwyArrayFuncStatus gwy_data_field_area_subtract_polynom_pygwy (GwyDataField *data_field,
- gint col,
- gint row,
- gint width,
- gint height,
- gint col_degree,
- gint row_degree,
- GwyDoubleArray *coeffs);
-GwyDoubleArray* gwy_data_field_fit_legendre_pygwy (GwyDataField *data_field,
- gint col_degree,
- gint row_degree);
-GwyDoubleArray* gwy_data_field_area_fit_legendre_pygwy (GwyDataField *data_field,
- gint col,
- gint row,
- gint width,
- gint height,
- gint col_degree,
- gint row_degree);
-GwyArrayFuncStatus gwy_data_field_subtract_legendre_pygwy (GwyDataField *data_field,
- gint col_degree,
- gint row_degree,
- GwyDoubleArray *coeffs);
-GwyArrayFuncStatus gwy_data_field_area_subtract_legendre_pygwy (GwyDataField *data_field,
- gint col,
- gint row,
- gint width,
- gint height,
- gint col_degree,
- gint row_degree,
- GwyDoubleArray *coeffs);
-GwyDoubleArray* gwy_data_field_fit_poly_max_pygwy (GwyDataField *data_field,
- gint max_degree);
-GwyDoubleArray* gwy_data_field_area_fit_poly_max_pygwy (GwyDataField *data_field,
- gint col,
- gint row,
- gint width,
- gint height,
- gint max_degree);
-GwyArrayFuncStatus gwy_data_field_subtract_poly_max_pygwy (GwyDataField *data_field,
- gint max_degree,
- GwyDoubleArray *coeffs);
-GwyArrayFuncStatus gwy_data_field_area_subtract_poly_max_pygwy (GwyDataField *data_field,
- gint col,
- gint row,
- gint width,
- gint height,
- gint max_degree,
- GwyDoubleArray *coeffs);
-GwyArrayFuncStatus gwy_data_field_fit_poly_pygwy (GwyDataField *data_field,
- GwyDataField *mask_field,
- GwyIntArray *term_powers,
- gboolean exclude,
- GwyDoubleArrayOutArg coeffs);
-GwyArrayFuncStatus gwy_data_field_area_fit_poly_pygwy (GwyDataField *data_field,
- GwyDataField *mask_field,
- gint col,
- gint row,
- gint width,
- gint height,
- GwyIntArray *term_powers,
- gboolean exclude,
- GwyDoubleArrayOutArg coeffs);
-GwyArrayFuncStatus gwy_data_field_subtract_poly_pygwy (GwyDataField *data_field,
- GwyIntArray *term_powers,
- GwyDoubleArray *coeffs);
-GwyArrayFuncStatus gwy_data_field_area_subtract_poly_pygwy (GwyDataField *data_field,
- gint col,
- gint row,
- gint width,
- gint height,
- GwyIntArray *term_powers,
- GwyDoubleArray *coeffs);
-GwyDoubleArray* gwy_data_field_elliptic_area_extract_pygwy (GwyDataField *data_field,
- gint col,
- gint row,
- gint width,
- gint height);
-GwyArrayFuncStatus gwy_data_field_elliptic_area_unextract_pygwy (GwyDataField *data_field,
- gint col,
- gint row,
- gint width,
- gint height,
- GwyDoubleArray *data);
-GwyDoubleArray* gwy_data_field_circular_area_extract_pygwy (GwyDataField *data_field,
- gint col,
- gint row,
- gdouble radius);
-GwyArrayFuncStatus gwy_data_field_circular_area_unextract_pygwy (GwyDataField *data_field,
- gint col,
- gint row,
- gdouble radius,
- GwyDoubleArray *data);
-GwyArrayFuncStatus gwy_data_field_affine_pygwy (GwyDataField *data_field,
- GwyDataField *dest,
- GwyDoubleArray *affine,
- GwyInterpolationType interp,
- GwyExteriorType exterior,
- gdouble fill_value);
-void gwy_data_field_get_local_maxima_list_pygwy (GwyDataField *dfield,
- GwyDoubleArrayOutArg xdata,
- GwyDoubleArrayOutArg ydata,
- GwyDoubleArrayOutArg zdata,
- gint ndata,
- gint skip,
- gdouble threshold,
- gboolean subpixel);
-GwyPlaneSymmetry gwy_data_field_unrotate_find_corrections_pygwy (GwyDataLine *derdist,
- GwyDoubleArrayOutArg correction);
-GwyDoubleArray* gwy_data_line_part_fit_polynom_pygwy (GwyDataLine *data_line,
- gint n,
- gint from,
- gint to);
-GwyDoubleArray* gwy_data_line_fit_polynom_pygwy (GwyDataLine *data_line,
- gint n);
-void gwy_data_line_part_subtract_polynom_pygwy (GwyDataLine *data_line,
- GwyDoubleArray *coeffs,
- gint from,
- gint to);
-void gwy_data_line_subtract_polynom_pygwy (GwyDataLine *data_line,
- GwyDoubleArray *coeffs);
-GQuark gwy_key_from_name_pygwy (const gchar *name);
-const gchar* gwy_name_from_key_pygwy (GQuark key);
-GwyIntArray* gwy_container_keys_pygwy (GwyContainer *container);
-GwyIntArray* gwy_app_data_browser_get_data_ids_pygwy (GwyContainer *container);
-GwyIntArray* gwy_app_data_browser_get_graph_ids_pygwy (GwyContainer *container);
-GwyIntArray* gwy_app_data_browser_get_spectra_ids_pygwy (GwyContainer *container);
-GwyIntArray* gwy_app_data_browser_get_volume_ids_pygwy (GwyContainer *container);
-GwyIntArray* gwy_app_data_browser_get_xyz_ids_pygwy (GwyContainer *container);
-GwyIntArray* gwy_app_data_browser_find_data_by_title_pygwy (GwyContainer *data,
- const gchar *titleglob);
-GwyIntArray* gwy_app_data_browser_find_graphs_by_title_pygwy (GwyContainer *data,
- const gchar *titleglob);
-GwyIntArray* gwy_app_data_browser_find_spectra_by_title_pygwy(GwyContainer *data,
- const gchar *titleglob);
-GwyIntArray* gwy_app_data_browser_find_volume_by_title_pygwy (GwyContainer *data,
- const gchar *titleglob);
-GwyIntArray* gwy_app_data_browser_find_xyz_by_title_pygwy (GwyContainer *data,
- const gchar *titleglob);
-GwyIntArray* gwy_data_field_number_grains_pygwy (GwyDataField *mask_field);
-GwyIntArray* gwy_data_field_number_grains_periodic_pygwy (GwyDataField *mask_field);
-GwyArrayFuncStatus gwy_data_field_get_grain_sizes_pygwy (GwyDataField *data_field,
- GwyIntArray *grains,
- GwyIntArrayOutArg sizes);
-GwyArrayFuncStatus gwy_data_field_get_grain_bounding_boxes_pygwy (GwyDataField *data_field,
- GwyIntArray *grains,
- GwyIntArrayOutArg bboxes);
-GwyArrayFuncStatus gwy_data_field_grains_get_values_pygwy (GwyDataField *data_field,
- GwyIntArray *grains,
- GwyGrainQuantity quantity,
- GwyDoubleArrayOutArg values);
-GwyDataLine* gwy_data_field_grains_get_distribution_pygwy (GwyDataField *data_field,
- GwyDataField *grain_field,
- GwyIntArray *grains,
- GwyGrainQuantity quantity,
- gint nstats);
-GwyDataField* gwy_tip_dilation_pygwy (GwyDataField *tip,
- GwyDataField *surface);
-GwyDataField* gwy_tip_erosion_pygwy (GwyDataField *tip,
- GwyDataField *surface);
-GwyDataField* gwy_tip_cmap_pygwy (GwyDataField *tip,
- GwyDataField *surface);
-GwyDataField* gwy_data_field_create_full_mask_pygwy (GwyDataField *d);
-gboolean gwy_get_grain_quantity_needs_same_units_pygwy (GwyGrainQuantity quantity);
-GwySIUnit* gwy_construct_grain_quantity_units_pygwy (GwyGrainQuantity quantity,
- GwySIUnit *siunitxy,
- GwySIUnit *siunitz);
-void gwy_surface_set_pygwy (GwySurface *surface,
- guint pos,
- const GwyXYZ *point);
-GwyIntArray* gwy_spectra_find_nearest_pygwy (GwySpectra *spectra,
- gdouble x,
- gdouble y,
- guint n);
-GwyDoubleArray* gwy_graph_curve_model_get_xdata_pygwy (GwyGraphCurveModel *gcmodel);
-GwyDoubleArray* gwy_graph_curve_model_get_ydata_pygwy (GwyGraphCurveModel *gcmodel);
-GwyArrayFuncStatus gwy_graph_curve_model_set_data_pygwy (GwyGraphCurveModel *gcmodel,
- GwyDoubleArray *xdata,
- GwyDoubleArray *ydata);
-GwyArrayFuncStatus gwy_graph_curve_model_set_data_interleaved_pygwy(GwyGraphCurveModel *gcmodel,
- GwyDoubleArray *xydata);
-void gwy_graph_area_set_x_grid_data_pygwy (GwyGraphArea *area,
- GwyDoubleArray *grid_data);
-void gwy_graph_area_set_y_grid_data_pygwy (GwyGraphArea *area,
- GwyDoubleArray *grid_data);
-GwyDoubleArray* gwy_graph_area_get_x_grid_data_pygwy (GwyGraphArea *area);
-GwyDoubleArray* gwy_graph_area_get_y_grid_data_pygwy (GwyGraphArea *area);
-GwyDoubleArray* gwy_draw_data_field_map_adaptive_pygwy (GwyDataField *data_field,
- GwyDoubleArray *z);
-GwyDoubleArray* gwy_data_view_get_metric_pygwy (GwyDataView *data_view);
-GwyDoubleArray* gwy_axis_get_major_ticks_pygwy (GwyAxis *axis);
-gulong gwy_app_undo_qcheckpoint_pygwy (GwyContainer *container,
- GwyIntArray *keys);
-GObject* gwy_inventory_get_item_pygwy (GwyInventory *inventory,
- const gchar *name);
-GObject* gwy_inventory_get_item_or_default_pygwy (GwyInventory *inventory,
- const gchar *name);
-GObject* gwy_inventory_get_nth_item_pygwy (GwyInventory *inventory,
- guint n);
-GObject* gwy_inventory_get_default_item_pygwy (GwyInventory *inventory);
-void gwy_inventory_insert_item_pygwy (GwyInventory *inventory,
- GObject *object);
-void gwy_inventory_insert_nth_item_pygwy (GwyInventory *inventory,
- GObject *object,
- guint n);
-void gwy_inventory_rename_item_pygwy (GwyInventory *inventory,
- const gchar *name,
- const gchar *newname);
-GObject* gwy_inventory_new_item_pygwy (GwyInventory *inventory,
- const gchar *name,
- const gchar *newname);
-GwyArrayFuncStatus gwy_cdline_fit_pygwy (GwyCDLine *cdline,
- GwyDoubleArray *x,
- GwyDoubleArray *y,
- GwyDoubleArrayOutArg params,
- GwyDoubleArrayOutArg err);
-GwyArrayFuncStatus gwy_cdline_get_value_pygwy (GwyCDLine *cdline,
- gdouble x,
- GwyDoubleArray *params,
- gdouble *value,
- gboolean *fres);
-GwyArrayFuncStatus gwy_peaks_analyze_pygwy (GwyPeaks *peaks,
- GwyDoubleArray *xdata,
- GwyDoubleArray *ydata,
- guint maxpeaks,
- guint *npeaks);
-GwyDoubleArray* gwy_peaks_get_quantity_pygwy (GwyPeaks *peaks,
- GwyPeakQuantity quantity);
-GwyDoubleArray* gwy_marker_box_get_markers_pygwy (GwyMarkerBox *mbox);
-void gwy_marker_box_set_markers_pygwy (GwyMarkerBox *mbox,
- GwyDoubleArray *markers);
+gdouble gwy_math_median_pygwy (GwyDoubleArray *array);
+GwyArrayFuncStatus gwy_math_curvature_pygwy (GwyDoubleArray *coeffs,
+ gint *dimen,
+ gdouble *kappa1,
+ gdouble *kappa2,
+ gdouble *phi1,
+ gdouble *phi2,
+ gdouble *xc,
+ gdouble *yc,
+ gdouble *zc);
+GwyArrayFuncStatus gwy_math_refine_maximum_pygwy (GwyDoubleArray *z,
+ gdouble *x,
+ gdouble *y,
+ gboolean *refined);
+GwyArrayFuncStatus gwy_math_refine_maximum_2d_pygwy (GwyDoubleArray *z,
+ gdouble *x,
+ gdouble *y,
+ gboolean *refined);
+GwyArrayFuncStatus gwy_math_refine_maximum_1d_pygwy (GwyDoubleArray *y,
+ gdouble *x,
+ gboolean *refined);
+GwyArrayFuncStatus gwy_math_is_in_polygon_pygwy (gdouble x,
+ gdouble y,
+ GwyDoubleArray *poly,
+ gboolean *is_inside);
+GwyArrayFuncStatus gwy_math_find_nearest_line_pygwy (gdouble x,
+ gdouble y,
+ GwyDoubleArray *coords,
+ GwyDoubleArray *metric,
+ gint *idx,
+ gdouble *d2min);
+GwyArrayFuncStatus gwy_math_find_nearest_point_pygwy (gdouble x,
+ gdouble y,
+ GwyDoubleArray *coords,
+ GwyDoubleArray *metric,
+ gint *idx,
+ gdouble *d2min);
+GwyArrayFuncStatus gwy_math_fit_polynom_pygwy (GwyDoubleArray *xdata,
+ GwyDoubleArray *ydata,
+ gint n,
+ GwyDoubleArrayOutArg coeffs);
+GwyDoubleArray* gwy_fft_window_pygwy (GwyDoubleArray *data,
+ GwyWindowingType windowing);
+GwyDoubleArray* gwy_interpolation_resolve_coeffs_1d_pygwy (GwyDoubleArray *data,
+ GwyInterpolationType interpolation);
+GwyDoubleArray* gwy_interpolation_resolve_coeffs_2d_pygwy (gint width,
+ gint height,
+ gint rowstride,
+ GwyDoubleArray *data,
+ GwyInterpolationType interpolation);
+GwyArrayFuncStatus gwy_interpolation_get_dval_of_equidists_pygwy (gdouble x,
+ GwyDoubleArray *data,
+ GwyInterpolationType interpolation,
+ gdouble *result);
+GwyArrayFuncStatus gwy_interpolation_interpolate_1d_pygwy (gdouble x,
+ GwyDoubleArray *coeff,
+ GwyInterpolationType interpolation,
+ gdouble *result);
+GwyArrayFuncStatus gwy_interpolation_interpolate_2d_pygwy (gdouble x,
+ gdouble y,
+ gint rowstride,
+ GwyDoubleArray *coeff,
+ GwyInterpolationType interpolation,
+ gdouble *result);
+GwyDoubleArray* gwy_interpolation_resample_block_1d_pygwy (GwyDoubleArray *data,
+ gint newlength,
+ GwyInterpolationType interpolation);
+GwyDoubleArray* gwy_interpolation_resample_block_2d_pygwy (GwyDoubleArray *data,
+ gint width,
+ gint height,
+ gint rowstride,
+ gint newwidth,
+ gint newheight,
+ gint newrowstride,
+ GwyInterpolationType interpolation);
+GwyDoubleArray* gwy_interpolation_shift_block_1d_pygwy (GwyDoubleArray *data,
+ gdouble offset,
+ GwyInterpolationType interpolation,
+ GwyExteriorType exterior,
+ gdouble fill_value);
+GwyDoubleArray* gwy_selection_get_data_pygwy (GwySelection *selection);
+GwyDoubleArray* gwy_selection_get_object_pygwy (GwySelection *selection,
+ gint i);
+GwyArrayFuncStatus gwy_selection_set_data_pygwy (GwySelection *selection,
+ GwyDoubleArray *data);
+GwyArrayFuncStatus gwy_selection_set_object_pygwy (GwySelection *selection,
+ gint i,
+ GwyDoubleArray *data);
+GwyDoubleArray* gwy_data_line_get_data_pygwy (GwyDataLine *data_line);
+GwyDoubleArray* gwy_data_field_get_data_pygwy (GwyDataField *data_field);
+GwyDoubleArray* gwy_brick_get_data_pygwy (GwyBrick *brick);
+GwyArrayFuncStatus gwy_data_line_set_data_pygwy (GwyDataLine *data_line,
+ GwyDoubleArray *data);
+GwyArrayFuncStatus gwy_data_field_set_data_pygwy (GwyDataField *data_field,
+ GwyDoubleArray *data);
+GwyArrayFuncStatus gwy_brick_set_data_pygwy (GwyBrick *brick,
+ GwyDoubleArray *data);
+GwyDoubleArray* gwy_data_field_fit_polynom_pygwy (GwyDataField *data_field,
+ gint col_degree,
+ gint row_degree);
+GwyDoubleArray* gwy_data_field_area_fit_polynom_pygwy (GwyDataField *data_field,
+ gint col,
+ gint row,
+ gint width,
+ gint height,
+ gint col_degree,
+ gint row_degree);
+GwyArrayFuncStatus gwy_data_field_subtract_polynom_pygwy (GwyDataField *data_field,
+ gint col_degree,
+ gint row_degree,
+ GwyDoubleArray *coeffs);
+GwyArrayFuncStatus gwy_data_field_area_subtract_polynom_pygwy (GwyDataField *data_field,
+ gint col,
+ gint row,
+ gint width,
+ gint height,
+ gint col_degree,
+ gint row_degree,
+ GwyDoubleArray *coeffs);
+GwyDoubleArray* gwy_data_field_fit_legendre_pygwy (GwyDataField *data_field,
+ gint col_degree,
+ gint row_degree);
+GwyDoubleArray* gwy_data_field_area_fit_legendre_pygwy (GwyDataField *data_field,
+ gint col,
+ gint row,
+ gint width,
+ gint height,
+ gint col_degree,
+ gint row_degree);
+GwyArrayFuncStatus gwy_data_field_subtract_legendre_pygwy (GwyDataField *data_field,
+ gint col_degree,
+ gint row_degree,
+ GwyDoubleArray *coeffs);
+GwyArrayFuncStatus gwy_data_field_area_subtract_legendre_pygwy (GwyDataField *data_field,
+ gint col,
+ gint row,
+ gint width,
+ gint height,
+ gint col_degree,
+ gint row_degree,
+ GwyDoubleArray *coeffs);
+GwyDoubleArray* gwy_data_field_fit_poly_max_pygwy (GwyDataField *data_field,
+ gint max_degree);
+GwyDoubleArray* gwy_data_field_area_fit_poly_max_pygwy (GwyDataField *data_field,
+ gint col,
+ gint row,
+ gint width,
+ gint height,
+ gint max_degree);
+GwyArrayFuncStatus gwy_data_field_subtract_poly_max_pygwy (GwyDataField *data_field,
+ gint max_degree,
+ GwyDoubleArray *coeffs);
+GwyArrayFuncStatus gwy_data_field_area_subtract_poly_max_pygwy (GwyDataField *data_field,
+ gint col,
+ gint row,
+ gint width,
+ gint height,
+ gint max_degree,
+ GwyDoubleArray *coeffs);
+GwyArrayFuncStatus gwy_data_field_fit_poly_pygwy (GwyDataField *data_field,
+ GwyDataField *mask_field,
+ GwyIntArray *term_powers,
+ gboolean exclude,
+ GwyDoubleArrayOutArg coeffs);
+GwyArrayFuncStatus gwy_data_field_area_fit_poly_pygwy (GwyDataField *data_field,
+ GwyDataField *mask_field,
+ gint col,
+ gint row,
+ gint width,
+ gint height,
+ GwyIntArray *term_powers,
+ gboolean exclude,
+ GwyDoubleArrayOutArg coeffs);
+GwyArrayFuncStatus gwy_data_field_subtract_poly_pygwy (GwyDataField *data_field,
+ GwyIntArray *term_powers,
+ GwyDoubleArray *coeffs);
+GwyArrayFuncStatus gwy_data_field_area_subtract_poly_pygwy (GwyDataField *data_field,
+ gint col,
+ gint row,
+ gint width,
+ gint height,
+ GwyIntArray *term_powers,
+ GwyDoubleArray *coeffs);
+GwyDoubleArray* gwy_data_field_elliptic_area_extract_pygwy (GwyDataField *data_field,
+ gint col,
+ gint row,
+ gint width,
+ gint height);
+GwyArrayFuncStatus gwy_data_field_elliptic_area_unextract_pygwy (GwyDataField *data_field,
+ gint col,
+ gint row,
+ gint width,
+ gint height,
+ GwyDoubleArray *data);
+GwyDoubleArray* gwy_data_field_circular_area_extract_pygwy (GwyDataField *data_field,
+ gint col,
+ gint row,
+ gdouble radius);
+GwyArrayFuncStatus gwy_data_field_circular_area_unextract_pygwy (GwyDataField *data_field,
+ gint col,
+ gint row,
+ gdouble radius,
+ GwyDoubleArray *data);
+GwyDoubleArray* gwy_data_field_circular_area_extract_with_pos_pygwy(GwyDataField *data_field,
+ gint col,
+ gint row,
+ gdouble radius,
+ GwyIntArrayOutArg xpos,
+ GwyIntArrayOutArg ypos);
+gboolean gwy_data_field_local_maximum_pygwy (GwyDataField *dfield,
+ gdouble x,
+ gdouble y,
+ gint ax,
+ gint ay,
+ gdouble *x_out,
+ gdouble *y_out);
+GwyArrayFuncStatus gwy_data_field_affine_pygwy (GwyDataField *data_field,
+ GwyDataField *dest,
+ GwyDoubleArray *affine,
+ GwyInterpolationType interp,
+ GwyExteriorType exterior,
+ gdouble fill_value);
+GwyArrayFuncStatus gwy_data_field_affine_prepare_pygwy (GwyDataField *source,
+ GwyDataField *dest,
+ GwyDoubleArray *a1a2,
+ GwyDoubleArray *a1a2_corr,
+ GwyAffineScalingType scaling,
+ gboolean prevent_rotation,
+ gdouble oversampling,
+ GwyDoubleArrayOutArg a1a2_corr_out,
+ GwyDoubleArrayOutArg invtrans);
+gint gwy_data_field_waterpour_pygwy (GwyDataField *data_field,
+ GwyDataField *result,
+ GwyIntArrayOutArg grains);
+GwyArrayFuncStatus gwy_data_field_measure_lattice_acf_pygwy (GwyDataField *acf2d,
+ GwyDoubleArray *a1a2,
+ GwyDoubleArrayOutArg a1a2_out,
+ gboolean *succeeded);
+GwyArrayFuncStatus gwy_data_field_measure_lattice_psdf_pygwy (GwyDataField *psdf2d,
+ GwyDoubleArray *a1a2,
+ GwyDoubleArrayOutArg a1a2_out,
+ gboolean *succeeded);
+void gwy_data_field_get_local_maxima_list_pygwy (GwyDataField *dfield,
+ GwyDoubleArrayOutArg xdata,
+ GwyDoubleArrayOutArg ydata,
+ GwyDoubleArrayOutArg zdata,
+ gint ndata,
+ gint skip,
+ gdouble threshold,
+ gboolean subpixel);
+GwyPlaneSymmetry gwy_data_field_unrotate_find_corrections_pygwy (GwyDataLine *derdist,
+ GwyDoubleArrayOutArg correction);
+GwyDoubleArray* gwy_data_line_part_fit_polynom_pygwy (GwyDataLine *data_line,
+ gint n,
+ gint from,
+ gint to);
+GwyDoubleArray* gwy_data_line_fit_polynom_pygwy (GwyDataLine *data_line,
+ gint n);
+void gwy_data_line_part_subtract_polynom_pygwy (GwyDataLine *data_line,
+ GwyDoubleArray *coeffs,
+ gint from,
+ gint to);
+void gwy_data_line_subtract_polynom_pygwy (GwyDataLine *data_line,
+ GwyDoubleArray *coeffs);
+GQuark gwy_key_from_name_pygwy (const gchar *name);
+const gchar* gwy_name_from_key_pygwy (GQuark key);
+GwyIntArray* gwy_container_keys_pygwy (GwyContainer *container);
+GwyConstStringArray* gwy_container_keys_by_name_pygwy (GwyContainer *container);
+GwyContainer* gwy_container_duplicate_by_prefix_pygwy (GwyContainer *container,
+ GwyStringArray *keys);
+GwyStringArray* gwy_container_serialize_to_text_pygwy (GwyContainer *container);
+GwyIntArray* gwy_app_data_browser_get_data_ids_pygwy (GwyContainer *container);
+GwyIntArray* gwy_app_data_browser_get_graph_ids_pygwy (GwyContainer *container);
+GwyIntArray* gwy_app_data_browser_get_spectra_ids_pygwy (GwyContainer *container);
+GwyIntArray* gwy_app_data_browser_get_volume_ids_pygwy (GwyContainer *container);
+GwyIntArray* gwy_app_data_browser_get_xyz_ids_pygwy (GwyContainer *container);
+GwyIntArray* gwy_app_data_browser_find_data_by_title_pygwy (GwyContainer *data,
+ const gchar *titleglob);
+GwyIntArray* gwy_app_data_browser_find_graphs_by_title_pygwy (GwyContainer *data,
+ const gchar *titleglob);
+GwyIntArray* gwy_app_data_browser_find_spectra_by_title_pygwy (GwyContainer *data,
+ const gchar *titleglob);
+GwyIntArray* gwy_app_data_browser_find_volume_by_title_pygwy (GwyContainer *data,
+ const gchar *titleglob);
+GwyIntArray* gwy_app_data_browser_find_xyz_by_title_pygwy (GwyContainer *data,
+ const gchar *titleglob);
+GwyIntArray* gwy_data_field_number_grains_pygwy (GwyDataField *mask_field);
+GwyIntArray* gwy_data_field_number_grains_periodic_pygwy (GwyDataField *mask_field);
+GwyArrayFuncStatus gwy_data_field_get_grain_sizes_pygwy (GwyDataField *data_field,
+ GwyIntArray *grains,
+ GwyIntArrayOutArg sizes);
+GwyArrayFuncStatus gwy_data_field_get_grain_bounding_boxes_pygwy (GwyDataField *data_field,
+ GwyIntArray *grains,
+ GwyIntArrayOutArg bboxes);
+GwyArrayFuncStatus gwy_data_field_grains_get_values_pygwy (GwyDataField *data_field,
+ GwyIntArray *grains,
+ GwyGrainQuantity quantity,
+ GwyDoubleArrayOutArg values);
+GwyDataLine* gwy_data_field_grains_get_distribution_pygwy (GwyDataField *data_field,
+ GwyDataField *grain_field,
+ GwyIntArray *grains,
+ GwyGrainQuantity quantity,
+ gint nstats);
+GwyDataField* gwy_tip_dilation_pygwy (GwyDataField *tip,
+ GwyDataField *surface);
+GwyDataField* gwy_tip_erosion_pygwy (GwyDataField *tip,
+ GwyDataField *surface);
+GwyDataField* gwy_tip_cmap_pygwy (GwyDataField *tip,
+ GwyDataField *surface);
+GwyDataField* gwy_data_field_create_full_mask_pygwy (GwyDataField *d);
+gboolean gwy_get_grain_quantity_needs_same_units_pygwy (GwyGrainQuantity quantity);
+GwySIUnit* gwy_construct_grain_quantity_units_pygwy (GwyGrainQuantity quantity,
+ GwySIUnit *siunitxy,
+ GwySIUnit *siunitz);
+GwyIntArray* gwy_tip_model_preset_get_params_pygwy (const GwyTipModelPreset *preset);
+GwyArrayFuncStatus gwy_tip_model_preset_create_pygwy (const GwyTipModelPreset *preset,
+ GwyDataField *tip,
+ GwyDoubleArray *params);
+GwyArrayFuncStatus gwy_tip_model_preset_create_for_zrange_pygwy (const GwyTipModelPreset *preset,
+ GwyDataField *tip,
+ gdouble zrange,
+ gboolean square,
+ GwyDoubleArray *params);
+GwySpline* gwy_spline_new_from_points_pygwy (GwyDoubleArray *xy);
+GwyDoubleArray* gwy_spline_get_points_pygwy (GwySpline *spline);
+GwyDoubleArray* gwy_spline_get_tangents_pygwy (GwySpline *spline);
+GwyDoubleArray* gwy_spline_sample_naturally_pygwy (GwySpline *spline);
+gdouble gwy_spline_sample_uniformly_pygwy (GwySpline *spline,
+ GwyDoubleArrayOutArg xy,
+ GwyDoubleArrayOutArg t,
+ guint n);
+void gwy_surface_set_pygwy (GwySurface *surface,
+ guint pos,
+ const GwyXYZ *point);
+GwyIntArray* gwy_spectra_find_nearest_pygwy (GwySpectra *spectra,
+ gdouble x,
+ gdouble y,
+ guint n);
+GwyDoubleArray* gwy_graph_curve_model_get_xdata_pygwy (GwyGraphCurveModel *gcmodel);
+GwyDoubleArray* gwy_graph_curve_model_get_ydata_pygwy (GwyGraphCurveModel *gcmodel);
+GwyArrayFuncStatus gwy_graph_curve_model_set_data_pygwy (GwyGraphCurveModel *gcmodel,
+ GwyDoubleArray *xdata,
+ GwyDoubleArray *ydata);
+GwyArrayFuncStatus gwy_graph_curve_model_set_data_interleaved_pygwy (GwyGraphCurveModel *gcmodel,
+ GwyDoubleArray *xydata);
+void gwy_graph_area_set_x_grid_data_pygwy (GwyGraphArea *area,
+ GwyDoubleArray *grid_data);
+void gwy_graph_area_set_y_grid_data_pygwy (GwyGraphArea *area,
+ GwyDoubleArray *grid_data);
+GwyDoubleArray* gwy_graph_area_get_x_grid_data_pygwy (GwyGraphArea *area);
+GwyDoubleArray* gwy_graph_area_get_y_grid_data_pygwy (GwyGraphArea *area);
+GwyDoubleArray* gwy_draw_data_field_map_adaptive_pygwy (GwyDataField *data_field,
+ GwyDoubleArray *z);
+GwyDoubleArray* gwy_data_view_get_metric_pygwy (GwyDataView *data_view);
+GwyDoubleArray* gwy_axis_get_major_ticks_pygwy (GwyAxis *axis);
+gulong gwy_undo_checkpoint_pygwy (GwyContainer *container,
+ GwyStringArray *keys);
+gulong gwy_undo_qcheckpoint_pygwy (GwyContainer *container,
+ GwyIntArray *keys);
+gulong gwy_app_undo_checkpoint_pygwy (GwyContainer *container,
+ GwyStringArray *keys);
+gulong gwy_app_undo_qcheckpoint_pygwy (GwyContainer *container,
+ GwyIntArray *keys);
+GObject* gwy_inventory_get_item_pygwy (GwyInventory *inventory,
+ const gchar *name);
+GObject* gwy_inventory_get_item_or_default_pygwy (GwyInventory *inventory,
+ const gchar *name);
+GObject* gwy_inventory_get_nth_item_pygwy (GwyInventory *inventory,
+ guint n);
+GObject* gwy_inventory_get_default_item_pygwy (GwyInventory *inventory);
+void gwy_inventory_insert_item_pygwy (GwyInventory *inventory,
+ GObject *object);
+void gwy_inventory_insert_nth_item_pygwy (GwyInventory *inventory,
+ GObject *object,
+ guint n);
+void gwy_inventory_rename_item_pygwy (GwyInventory *inventory,
+ const gchar *name,
+ const gchar *newname);
+GObject* gwy_inventory_new_item_pygwy (GwyInventory *inventory,
+ const gchar *name,
+ const gchar *newname);
+GwyArrayFuncStatus gwy_cdline_fit_pygwy (GwyCDLine *cdline,
+ GwyDoubleArray *x,
+ GwyDoubleArray *y,
+ GwyDoubleArrayOutArg params,
+ GwyDoubleArrayOutArg err);
+GwyArrayFuncStatus gwy_cdline_get_value_pygwy (GwyCDLine *cdline,
+ gdouble x,
+ GwyDoubleArray *params,
+ gdouble *value,
+ gboolean *fres);
+GwyArrayFuncStatus gwy_peaks_analyze_pygwy (GwyPeaks *peaks,
+ GwyDoubleArray *xdata,
+ GwyDoubleArray *ydata,
+ guint maxpeaks,
+ guint *npeaks);
+GwyDoubleArray* gwy_peaks_get_quantity_pygwy (GwyPeaks *peaks,
+ GwyPeakQuantity quantity);
+GwyDoubleArray* gwy_marker_box_get_markers_pygwy (GwyMarkerBox *mbox);
+void gwy_marker_box_set_markers_pygwy (GwyMarkerBox *mbox,
+ GwyDoubleArray *markers);
+void gwy_app_sync_data_items_pygwy (GwyContainer *source,
+ GwyContainer *dest,
+ gint from_id,
+ gint to_id,
+ gboolean delete_too,
+ GwyIntArray *items);
#endif
diff --git a/modules/tools/Makefile.am b/modules/tools/Makefile.am
index fc7d5b9..c2533b7 100644
--- a/modules/tools/Makefile.am
+++ b/modules/tools/Makefile.am
@@ -1,8 +1,11 @@
-# @(#) $Id: Makefile.am 17246 2015-08-05 09:03:40Z yeti-dn $
+# @(#) $Id: Makefile.am 20001 2017-06-29 21:52:24Z yeti-dn $
toolsdir = $(pkglibdir)/modules/tool
-tools_LTLIBRARIES = \
+# Only bundle modules without own dependencies. If something goes wrong with
+# any required libraries at run-time, it will at most break these individual
+# unbundled modules, not the bundle.
+bundlable_modules = \
crop.la \
distance.la \
filter.la \
@@ -22,14 +25,22 @@ tools_LTLIBRARIES = \
spectro.la \
stats.la
+# tools_modules is either the bundle or all the individual modules.
+if MODULE_BUNDLING
+tools_modules = tools.la
+BUILT_SOURCES = tools.c
+tools_la_CFLAGS = $(AM_CFLAGS) -DGWY_MODULE_BUNDLING
+else
+tools_modules = $(bundlable_modules)
+endif
+
+tools_LTLIBRARIES = \
+ $(tools_modules)
+
if OS_MSWIN
no_undefined = -no-undefined
endif
-AM_CPPFLAGS = -I$(top_srcdir) -DG_LOG_DOMAIN=\"Module\"
-AM_CFLAGS = @COMMON_CFLAGS@
-AM_LDFLAGS = -avoid-version -module $(no_undefined) $(module_libadd)
-
if MODULE_DEPENDENCIES
module_libadd = \
$(top_builddir)/app/libgwyapp2.la \
@@ -41,6 +52,11 @@ module_libadd = \
@GTK_LIBS@
endif
+AM_CPPFLAGS = -I$(top_srcdir) -DG_LOG_DOMAIN=\"Module\"
+AM_CFLAGS = @COMMON_CFLAGS@
+AM_LDFLAGS = -avoid-version -module $(no_undefined) $(module_libadd)
+
+# Bundlable modules, must be listed in tools_la_SOURCES below.
crop_la_SOURCES = crop.c
distance_la_SOURCES = distance.c
filter_la_SOURCES = filter.c
@@ -60,5 +76,31 @@ sfunctions_la_SOURCES = sfunctions.c
spectro_la_SOURCES = spectro.c
spotremove_la_SOURCES = spotremove.c
+tools_la_SOURCES = \
+ $(crop_la_SOURCES) \
+ $(distance_la_SOURCES) \
+ $(filter_la_SOURCES) \
+ $(grainmeasure_la_SOURCES) \
+ $(grainremover_la_SOURCES) \
+ $(icolorange_la_SOURCES) \
+ $(level3_la_SOURCES) \
+ $(linestats_la_SOURCES) \
+ $(maskedit_la_SOURCES) \
+ $(pathlevel_la_SOURCES) \
+ $(profile_la_SOURCES) \
+ $(readvalue_la_SOURCES) \
+ $(roughness_la_SOURCES) \
+ $(stats_la_SOURCES) \
+ $(selectionmanager_la_SOURCES) \
+ $(sfunctions_la_SOURCES) \
+ $(spectro_la_SOURCES) \
+ $(spotremove_la_SOURCES) \
+ tools.c
+
+tools.c: $(srcdir)/Makefile.am $(top_srcdir)/utils/gen-module-bundle.sh
+ $(SHELL) $(top_srcdir)/utils/gen-module-bundle.sh tools.c $(bundlable_modules)
+
+CLEAN_FILES = tools.c
+
clean-local:
rm -f core.* *~
diff --git a/modules/tools/Makefile.in b/modules/tools/Makefile.in
index a756e2d..ce0825b 100644
--- a/modules/tools/Makefile.in
+++ b/modules/tools/Makefile.in
@@ -14,7 +14,7 @@
@SET_MAKE@
-# @(#) $Id: Makefile.am 17246 2015-08-05 09:03:40Z yeti-dn $
+# @(#) $Id: Makefile.am 20001 2017-06-29 21:52:24Z yeti-dn $
VPATH = @srcdir@
am__is_gnu_make = { \
@@ -145,57 +145,107 @@ AM_V_lt = $(am__v_lt_ at AM_V@)
am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
am__v_lt_0 = --silent
am__v_lt_1 =
+ at MODULE_BUNDLING_FALSE@am_crop_la_rpath = -rpath $(toolsdir)
distance_la_LIBADD =
am_distance_la_OBJECTS = distance.lo
distance_la_OBJECTS = $(am_distance_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_distance_la_rpath = -rpath $(toolsdir)
filter_la_LIBADD =
am_filter_la_OBJECTS = filter.lo
filter_la_OBJECTS = $(am_filter_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_filter_la_rpath = -rpath $(toolsdir)
grainmeasure_la_LIBADD =
am_grainmeasure_la_OBJECTS = grainmeasure.lo
grainmeasure_la_OBJECTS = $(am_grainmeasure_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_grainmeasure_la_rpath = -rpath $(toolsdir)
grainremover_la_LIBADD =
am_grainremover_la_OBJECTS = grainremover.lo
grainremover_la_OBJECTS = $(am_grainremover_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_grainremover_la_rpath = -rpath $(toolsdir)
icolorange_la_LIBADD =
am_icolorange_la_OBJECTS = icolorange.lo
icolorange_la_OBJECTS = $(am_icolorange_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_icolorange_la_rpath = -rpath $(toolsdir)
level3_la_LIBADD =
am_level3_la_OBJECTS = level3.lo
level3_la_OBJECTS = $(am_level3_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_level3_la_rpath = -rpath $(toolsdir)
linestats_la_LIBADD =
am_linestats_la_OBJECTS = linestats.lo
linestats_la_OBJECTS = $(am_linestats_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_linestats_la_rpath = -rpath $(toolsdir)
maskedit_la_LIBADD =
am_maskedit_la_OBJECTS = maskedit.lo
maskedit_la_OBJECTS = $(am_maskedit_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_maskedit_la_rpath = -rpath $(toolsdir)
pathlevel_la_LIBADD =
am_pathlevel_la_OBJECTS = pathlevel.lo
pathlevel_la_OBJECTS = $(am_pathlevel_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_pathlevel_la_rpath = -rpath $(toolsdir)
profile_la_LIBADD =
am_profile_la_OBJECTS = profile.lo
profile_la_OBJECTS = $(am_profile_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_profile_la_rpath = -rpath $(toolsdir)
readvalue_la_LIBADD =
am_readvalue_la_OBJECTS = readvalue.lo
readvalue_la_OBJECTS = $(am_readvalue_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_readvalue_la_rpath = -rpath $(toolsdir)
roughness_la_LIBADD =
am_roughness_la_OBJECTS = roughness.lo
roughness_la_OBJECTS = $(am_roughness_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_roughness_la_rpath = -rpath $(toolsdir)
selectionmanager_la_LIBADD =
am_selectionmanager_la_OBJECTS = selectionmanager.lo
selectionmanager_la_OBJECTS = $(am_selectionmanager_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_selectionmanager_la_rpath = -rpath \
+ at MODULE_BUNDLING_FALSE@ $(toolsdir)
sfunctions_la_LIBADD =
am_sfunctions_la_OBJECTS = sfunctions.lo
sfunctions_la_OBJECTS = $(am_sfunctions_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_sfunctions_la_rpath = -rpath $(toolsdir)
spectro_la_LIBADD =
am_spectro_la_OBJECTS = spectro.lo
spectro_la_OBJECTS = $(am_spectro_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_spectro_la_rpath = -rpath $(toolsdir)
spotremove_la_LIBADD =
am_spotremove_la_OBJECTS = spotremove.lo
spotremove_la_OBJECTS = $(am_spotremove_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_spotremove_la_rpath = -rpath $(toolsdir)
stats_la_LIBADD =
am_stats_la_OBJECTS = stats.lo
stats_la_OBJECTS = $(am_stats_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_stats_la_rpath = -rpath $(toolsdir)
+tools_la_LIBADD =
+am__objects_1 = tools_la-crop.lo
+am__objects_2 = tools_la-distance.lo
+am__objects_3 = tools_la-filter.lo
+am__objects_4 = tools_la-grainmeasure.lo
+am__objects_5 = tools_la-grainremover.lo
+am__objects_6 = tools_la-icolorange.lo
+am__objects_7 = tools_la-level3.lo
+am__objects_8 = tools_la-linestats.lo
+am__objects_9 = tools_la-maskedit.lo
+am__objects_10 = tools_la-pathlevel.lo
+am__objects_11 = tools_la-profile.lo
+am__objects_12 = tools_la-readvalue.lo
+am__objects_13 = tools_la-roughness.lo
+am__objects_14 = tools_la-stats.lo
+am__objects_15 = tools_la-selectionmanager.lo
+am__objects_16 = tools_la-sfunctions.lo
+am__objects_17 = tools_la-spectro.lo
+am__objects_18 = tools_la-spotremove.lo
+am_tools_la_OBJECTS = $(am__objects_1) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4) $(am__objects_5) \
+ $(am__objects_6) $(am__objects_7) $(am__objects_8) \
+ $(am__objects_9) $(am__objects_10) $(am__objects_11) \
+ $(am__objects_12) $(am__objects_13) $(am__objects_14) \
+ $(am__objects_15) $(am__objects_16) $(am__objects_17) \
+ $(am__objects_18) tools_la-tools.lo
+tools_la_OBJECTS = $(am_tools_la_OBJECTS)
+tools_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(tools_la_CFLAGS) \
+ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+ at MODULE_BUNDLING_TRUE@am_tools_la_rpath = -rpath $(toolsdir)
AM_V_P = $(am__v_P_ at AM_V@)
am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
am__v_P_0 = false
@@ -238,7 +288,8 @@ SOURCES = $(crop_la_SOURCES) $(distance_la_SOURCES) \
$(profile_la_SOURCES) $(readvalue_la_SOURCES) \
$(roughness_la_SOURCES) $(selectionmanager_la_SOURCES) \
$(sfunctions_la_SOURCES) $(spectro_la_SOURCES) \
- $(spotremove_la_SOURCES) $(stats_la_SOURCES)
+ $(spotremove_la_SOURCES) $(stats_la_SOURCES) \
+ $(tools_la_SOURCES)
DIST_SOURCES = $(crop_la_SOURCES) $(distance_la_SOURCES) \
$(filter_la_SOURCES) $(grainmeasure_la_SOURCES) \
$(grainremover_la_SOURCES) $(icolorange_la_SOURCES) \
@@ -247,7 +298,8 @@ DIST_SOURCES = $(crop_la_SOURCES) $(distance_la_SOURCES) \
$(profile_la_SOURCES) $(readvalue_la_SOURCES) \
$(roughness_la_SOURCES) $(selectionmanager_la_SOURCES) \
$(sfunctions_la_SOURCES) $(spectro_la_SOURCES) \
- $(spotremove_la_SOURCES) $(stats_la_SOURCES)
+ $(spotremove_la_SOURCES) $(stats_la_SOURCES) \
+ $(tools_la_SOURCES)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
@@ -313,10 +365,7 @@ EPYDOC = @EPYDOC@
EXEEXT = @EXEEXT@
EXR_CFLAGS = @EXR_CFLAGS@
EXR_LIBS = @EXR_LIBS@
-FFTW3_1_CFLAGS = @FFTW3_1_CFLAGS@
-FFTW3_1_LIBS = @FFTW3_1_LIBS@
FFTW3_CFLAGS = @FFTW3_CFLAGS@
-FFTW3_DEPENDENCY = @FFTW3_DEPENDENCY@
FFTW3_LIBS = @FFTW3_LIBS@
FGREP = @FGREP@
GCONFTOOL = @GCONFTOOL@
@@ -326,6 +375,8 @@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
GLIBC21 = @GLIBC21@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GMODULE_CFLAGS = @GMODULE_CFLAGS@
GMODULE_LIBS = @GMODULE_LIBS@
GMSGFMT = @GMSGFMT@
@@ -350,7 +401,9 @@ GTK_MAC_LIBS = @GTK_MAC_LIBS@
GWY_VERSION_MAJOR = @GWY_VERSION_MAJOR@
GWY_VERSION_MINOR = @GWY_VERSION_MINOR@
GWY_VERSION_STRING = @GWY_VERSION_STRING@
+HDRIMAGE_EXTRA_CFLAGS = @HDRIMAGE_EXTRA_CFLAGS@
HTML_DIR = @HTML_DIR@
+INKSCAPE = @INKSCAPE@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -408,6 +461,7 @@ PASCAL = @PASCAL@
PATH_SEPARATOR = @PATH_SEPARATOR@
PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
+PNGCRUSH = @PNGCRUSH@
PNG_CFLAGS = @PNG_CFLAGS@
PNG_LIBS = @PNG_LIBS@
POD2MAN = @POD2MAN@
@@ -416,17 +470,13 @@ PYGTK_CFLAGS = @PYGTK_CFLAGS@
PYGTK_CODEGENDIR = @PYGTK_CODEGENDIR@
PYGTK_LIBS = @PYGTK_LIBS@
PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
PYTHON_EXTRA_CFLAGS = @PYTHON_EXTRA_CFLAGS@
PYTHON_INCLUDES = @PYTHON_INCLUDES@
-PYTHON_LIBS = @PYTHON_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
PYTHON_PLATFORM = @PYTHON_PLATFORM@
PYTHON_PREFIX = @PYTHON_PREFIX@
-PYTHON_SYSCFG_BASECFLAGS = @PYTHON_SYSCFG_BASECFLAGS@
-PYTHON_SYSCFG_CCSHARED = @PYTHON_SYSCFG_CCSHARED@
-PYTHON_SYSCFG_LDFLAGS = @PYTHON_SYSCFG_LDFLAGS@
-PYTHON_SYSCFG_LIBDIR = @PYTHON_SYSCFG_LIBDIR@
-PYTHON_SYSCFG_LINKFORSHARED = @PYTHON_SYSCFG_LINKFORSHARED@
PYTHON_VERSION = @PYTHON_VERSION@
RANLIB = @RANLIB@
RUBY = @RUBY@
@@ -512,7 +562,11 @@ top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
toolsdir = $(pkglibdir)/modules/tool
-tools_LTLIBRARIES = \
+
+# Only bundle modules without own dependencies. If something goes wrong with
+# any required libraries at run-time, it will at most break these individual
+# unbundled modules, not the bundle.
+bundlable_modules = \
crop.la \
distance.la \
filter.la \
@@ -532,10 +586,16 @@ tools_LTLIBRARIES = \
spectro.la \
stats.la
+ at MODULE_BUNDLING_FALSE@tools_modules = $(bundlable_modules)
+
+# tools_modules is either the bundle or all the individual modules.
+ at MODULE_BUNDLING_TRUE@tools_modules = tools.la
+ at MODULE_BUNDLING_TRUE@BUILT_SOURCES = tools.c
+ at MODULE_BUNDLING_TRUE@tools_la_CFLAGS = $(AM_CFLAGS) -DGWY_MODULE_BUNDLING
+tools_LTLIBRARIES = \
+ $(tools_modules)
+
@OS_MSWIN_TRUE at no_undefined = -no-undefined
-AM_CPPFLAGS = -I$(top_srcdir) -DG_LOG_DOMAIN=\"Module\"
-AM_CFLAGS = @COMMON_CFLAGS@
-AM_LDFLAGS = -avoid-version -module $(no_undefined) $(module_libadd)
@MODULE_DEPENDENCIES_TRUE at module_libadd = \
@MODULE_DEPENDENCIES_TRUE@ $(top_builddir)/app/libgwyapp2.la \
@MODULE_DEPENDENCIES_TRUE@ $(top_builddir)/libdraw/libgwydraw2.la \
@@ -545,6 +605,11 @@ AM_LDFLAGS = -avoid-version -module $(no_undefined) $(module_libadd)
@MODULE_DEPENDENCIES_TRUE@ $(top_builddir)/libprocess/libgwyprocess2.la \
@MODULE_DEPENDENCIES_TRUE@ @GTK_LIBS@
+AM_CPPFLAGS = -I$(top_srcdir) -DG_LOG_DOMAIN=\"Module\"
+AM_CFLAGS = @COMMON_CFLAGS@
+AM_LDFLAGS = -avoid-version -module $(no_undefined) $(module_libadd)
+
+# Bundlable modules, must be listed in tools_la_SOURCES below.
crop_la_SOURCES = crop.c
distance_la_SOURCES = distance.c
filter_la_SOURCES = filter.c
@@ -563,7 +628,30 @@ selectionmanager_la_SOURCES = selectionmanager.c
sfunctions_la_SOURCES = sfunctions.c
spectro_la_SOURCES = spectro.c
spotremove_la_SOURCES = spotremove.c
-all: all-am
+tools_la_SOURCES = \
+ $(crop_la_SOURCES) \
+ $(distance_la_SOURCES) \
+ $(filter_la_SOURCES) \
+ $(grainmeasure_la_SOURCES) \
+ $(grainremover_la_SOURCES) \
+ $(icolorange_la_SOURCES) \
+ $(level3_la_SOURCES) \
+ $(linestats_la_SOURCES) \
+ $(maskedit_la_SOURCES) \
+ $(pathlevel_la_SOURCES) \
+ $(profile_la_SOURCES) \
+ $(readvalue_la_SOURCES) \
+ $(roughness_la_SOURCES) \
+ $(stats_la_SOURCES) \
+ $(selectionmanager_la_SOURCES) \
+ $(sfunctions_la_SOURCES) \
+ $(spectro_la_SOURCES) \
+ $(spotremove_la_SOURCES) \
+ tools.c
+
+CLEAN_FILES = tools.c
+all: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) all-am
.SUFFIXES:
.SUFFIXES: .c .lo .o .obj
@@ -633,58 +721,61 @@ clean-toolsLTLIBRARIES:
}
crop.la: $(crop_la_OBJECTS) $(crop_la_DEPENDENCIES) $(EXTRA_crop_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(toolsdir) $(crop_la_OBJECTS) $(crop_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_crop_la_rpath) $(crop_la_OBJECTS) $(crop_la_LIBADD) $(LIBS)
distance.la: $(distance_la_OBJECTS) $(distance_la_DEPENDENCIES) $(EXTRA_distance_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(toolsdir) $(distance_la_OBJECTS) $(distance_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_distance_la_rpath) $(distance_la_OBJECTS) $(distance_la_LIBADD) $(LIBS)
filter.la: $(filter_la_OBJECTS) $(filter_la_DEPENDENCIES) $(EXTRA_filter_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(toolsdir) $(filter_la_OBJECTS) $(filter_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_filter_la_rpath) $(filter_la_OBJECTS) $(filter_la_LIBADD) $(LIBS)
grainmeasure.la: $(grainmeasure_la_OBJECTS) $(grainmeasure_la_DEPENDENCIES) $(EXTRA_grainmeasure_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(toolsdir) $(grainmeasure_la_OBJECTS) $(grainmeasure_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_grainmeasure_la_rpath) $(grainmeasure_la_OBJECTS) $(grainmeasure_la_LIBADD) $(LIBS)
grainremover.la: $(grainremover_la_OBJECTS) $(grainremover_la_DEPENDENCIES) $(EXTRA_grainremover_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(toolsdir) $(grainremover_la_OBJECTS) $(grainremover_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_grainremover_la_rpath) $(grainremover_la_OBJECTS) $(grainremover_la_LIBADD) $(LIBS)
icolorange.la: $(icolorange_la_OBJECTS) $(icolorange_la_DEPENDENCIES) $(EXTRA_icolorange_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(toolsdir) $(icolorange_la_OBJECTS) $(icolorange_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_icolorange_la_rpath) $(icolorange_la_OBJECTS) $(icolorange_la_LIBADD) $(LIBS)
level3.la: $(level3_la_OBJECTS) $(level3_la_DEPENDENCIES) $(EXTRA_level3_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(toolsdir) $(level3_la_OBJECTS) $(level3_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_level3_la_rpath) $(level3_la_OBJECTS) $(level3_la_LIBADD) $(LIBS)
linestats.la: $(linestats_la_OBJECTS) $(linestats_la_DEPENDENCIES) $(EXTRA_linestats_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(toolsdir) $(linestats_la_OBJECTS) $(linestats_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_linestats_la_rpath) $(linestats_la_OBJECTS) $(linestats_la_LIBADD) $(LIBS)
maskedit.la: $(maskedit_la_OBJECTS) $(maskedit_la_DEPENDENCIES) $(EXTRA_maskedit_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(toolsdir) $(maskedit_la_OBJECTS) $(maskedit_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_maskedit_la_rpath) $(maskedit_la_OBJECTS) $(maskedit_la_LIBADD) $(LIBS)
pathlevel.la: $(pathlevel_la_OBJECTS) $(pathlevel_la_DEPENDENCIES) $(EXTRA_pathlevel_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(toolsdir) $(pathlevel_la_OBJECTS) $(pathlevel_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_pathlevel_la_rpath) $(pathlevel_la_OBJECTS) $(pathlevel_la_LIBADD) $(LIBS)
profile.la: $(profile_la_OBJECTS) $(profile_la_DEPENDENCIES) $(EXTRA_profile_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(toolsdir) $(profile_la_OBJECTS) $(profile_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_profile_la_rpath) $(profile_la_OBJECTS) $(profile_la_LIBADD) $(LIBS)
readvalue.la: $(readvalue_la_OBJECTS) $(readvalue_la_DEPENDENCIES) $(EXTRA_readvalue_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(toolsdir) $(readvalue_la_OBJECTS) $(readvalue_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_readvalue_la_rpath) $(readvalue_la_OBJECTS) $(readvalue_la_LIBADD) $(LIBS)
roughness.la: $(roughness_la_OBJECTS) $(roughness_la_DEPENDENCIES) $(EXTRA_roughness_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(toolsdir) $(roughness_la_OBJECTS) $(roughness_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_roughness_la_rpath) $(roughness_la_OBJECTS) $(roughness_la_LIBADD) $(LIBS)
selectionmanager.la: $(selectionmanager_la_OBJECTS) $(selectionmanager_la_DEPENDENCIES) $(EXTRA_selectionmanager_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(toolsdir) $(selectionmanager_la_OBJECTS) $(selectionmanager_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_selectionmanager_la_rpath) $(selectionmanager_la_OBJECTS) $(selectionmanager_la_LIBADD) $(LIBS)
sfunctions.la: $(sfunctions_la_OBJECTS) $(sfunctions_la_DEPENDENCIES) $(EXTRA_sfunctions_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(toolsdir) $(sfunctions_la_OBJECTS) $(sfunctions_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_sfunctions_la_rpath) $(sfunctions_la_OBJECTS) $(sfunctions_la_LIBADD) $(LIBS)
spectro.la: $(spectro_la_OBJECTS) $(spectro_la_DEPENDENCIES) $(EXTRA_spectro_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(toolsdir) $(spectro_la_OBJECTS) $(spectro_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_spectro_la_rpath) $(spectro_la_OBJECTS) $(spectro_la_LIBADD) $(LIBS)
spotremove.la: $(spotremove_la_OBJECTS) $(spotremove_la_DEPENDENCIES) $(EXTRA_spotremove_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(toolsdir) $(spotremove_la_OBJECTS) $(spotremove_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_spotremove_la_rpath) $(spotremove_la_OBJECTS) $(spotremove_la_LIBADD) $(LIBS)
stats.la: $(stats_la_OBJECTS) $(stats_la_DEPENDENCIES) $(EXTRA_stats_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(toolsdir) $(stats_la_OBJECTS) $(stats_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_stats_la_rpath) $(stats_la_OBJECTS) $(stats_la_LIBADD) $(LIBS)
+
+tools.la: $(tools_la_OBJECTS) $(tools_la_DEPENDENCIES) $(EXTRA_tools_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(tools_la_LINK) $(am_tools_la_rpath) $(tools_la_OBJECTS) $(tools_la_LIBADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@@ -710,6 +801,25 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/spectro.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/spotremove.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/stats.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/tools_la-crop.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/tools_la-distance.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/tools_la-filter.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/tools_la-grainmeasure.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/tools_la-grainremover.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/tools_la-icolorange.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/tools_la-level3.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/tools_la-linestats.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/tools_la-maskedit.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/tools_la-pathlevel.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/tools_la-profile.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/tools_la-readvalue.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/tools_la-roughness.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/tools_la-selectionmanager.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/tools_la-sfunctions.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/tools_la-spectro.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/tools_la-spotremove.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/tools_la-stats.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/tools_la-tools.Plo at am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@@ -732,6 +842,139 @@ distclean-compile:
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LTCOMPILE) -c -o $@ $<
+tools_la-crop.lo: crop.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tools_la_CFLAGS) $(CFLAGS) -MT tools_la-crop.lo -MD -MP -MF $(DEPDIR)/tools_la-crop.Tpo -c -o tools_la-crop.lo `test -f 'crop.c' || echo '$(srcdir)/'`crop.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/tools_la-crop.Tpo $(DEPDIR)/tools_la-crop.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='crop.c' object='tools_la-crop.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tools_la_CFLAGS) $(CFLAGS) -c -o tools_la-crop.lo `test -f 'crop.c' || echo '$(srcdir)/'`crop.c
+
+tools_la-distance.lo: distance.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tools_la_CFLAGS) $(CFLAGS) -MT tools_la-distance.lo -MD -MP -MF $(DEPDIR)/tools_la-distance.Tpo -c -o tools_la-distance.lo `test -f 'distance.c' || echo '$(srcdir)/'`distance.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/tools_la-distance.Tpo $(DEPDIR)/tools_la-distance.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='distance.c' object='tools_la-distance.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tools_la_CFLAGS) $(CFLAGS) -c -o tools_la-distance.lo `test -f 'distance.c' || echo '$(srcdir)/'`distance.c
+
+tools_la-filter.lo: filter.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tools_la_CFLAGS) $(CFLAGS) -MT tools_la-filter.lo -MD -MP -MF $(DEPDIR)/tools_la-filter.Tpo -c -o tools_la-filter.lo `test -f 'filter.c' || echo '$(srcdir)/'`filter.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/tools_la-filter.Tpo $(DEPDIR)/tools_la-filter.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='filter.c' object='tools_la-filter.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tools_la_CFLAGS) $(CFLAGS) -c -o tools_la-filter.lo `test -f 'filter.c' || echo '$(srcdir)/'`filter.c
+
+tools_la-grainmeasure.lo: grainmeasure.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tools_la_CFLAGS) $(CFLAGS) -MT tools_la-grainmeasure.lo -MD -MP -MF $(DEPDIR)/tools_la-grainmeasure.Tpo -c -o tools_la-grainmeasure.lo `test -f 'grainmeasure.c' || echo '$(srcdir)/'`grainmeasure.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/tools_la-grainmeasure.Tpo $(DEPDIR)/tools_la-grainmeasure.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grainmeasure.c' object='tools_la-grainmeasure.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tools_la_CFLAGS) $(CFLAGS) -c -o tools_la-grainmeasure.lo `test -f 'grainmeasure.c' || echo '$(srcdir)/'`grainmeasure.c
+
+tools_la-grainremover.lo: grainremover.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tools_la_CFLAGS) $(CFLAGS) -MT tools_la-grainremover.lo -MD -MP -MF $(DEPDIR)/tools_la-grainremover.Tpo -c -o tools_la-grainremover.lo `test -f 'grainremover.c' || echo '$(srcdir)/'`grainremover.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/tools_la-grainremover.Tpo $(DEPDIR)/tools_la-grainremover.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grainremover.c' object='tools_la-grainremover.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tools_la_CFLAGS) $(CFLAGS) -c -o tools_la-grainremover.lo `test -f 'grainremover.c' || echo '$(srcdir)/'`grainremover.c
+
+tools_la-icolorange.lo: icolorange.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tools_la_CFLAGS) $(CFLAGS) -MT tools_la-icolorange.lo -MD -MP -MF $(DEPDIR)/tools_la-icolorange.Tpo -c -o tools_la-icolorange.lo `test -f 'icolorange.c' || echo '$(srcdir)/'`icolorange.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/tools_la-icolorange.Tpo $(DEPDIR)/tools_la-icolorange.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='icolorange.c' object='tools_la-icolorange.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tools_la_CFLAGS) $(CFLAGS) -c -o tools_la-icolorange.lo `test -f 'icolorange.c' || echo '$(srcdir)/'`icolorange.c
+
+tools_la-level3.lo: level3.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tools_la_CFLAGS) $(CFLAGS) -MT tools_la-level3.lo -MD -MP -MF $(DEPDIR)/tools_la-level3.Tpo -c -o tools_la-level3.lo `test -f 'level3.c' || echo '$(srcdir)/'`level3.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/tools_la-level3.Tpo $(DEPDIR)/tools_la-level3.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='level3.c' object='tools_la-level3.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tools_la_CFLAGS) $(CFLAGS) -c -o tools_la-level3.lo `test -f 'level3.c' || echo '$(srcdir)/'`level3.c
+
+tools_la-linestats.lo: linestats.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tools_la_CFLAGS) $(CFLAGS) -MT tools_la-linestats.lo -MD -MP -MF $(DEPDIR)/tools_la-linestats.Tpo -c -o tools_la-linestats.lo `test -f 'linestats.c' || echo '$(srcdir)/'`linestats.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/tools_la-linestats.Tpo $(DEPDIR)/tools_la-linestats.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='linestats.c' object='tools_la-linestats.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tools_la_CFLAGS) $(CFLAGS) -c -o tools_la-linestats.lo `test -f 'linestats.c' || echo '$(srcdir)/'`linestats.c
+
+tools_la-maskedit.lo: maskedit.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tools_la_CFLAGS) $(CFLAGS) -MT tools_la-maskedit.lo -MD -MP -MF $(DEPDIR)/tools_la-maskedit.Tpo -c -o tools_la-maskedit.lo `test -f 'maskedit.c' || echo '$(srcdir)/'`maskedit.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/tools_la-maskedit.Tpo $(DEPDIR)/tools_la-maskedit.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='maskedit.c' object='tools_la-maskedit.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tools_la_CFLAGS) $(CFLAGS) -c -o tools_la-maskedit.lo `test -f 'maskedit.c' || echo '$(srcdir)/'`maskedit.c
+
+tools_la-pathlevel.lo: pathlevel.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tools_la_CFLAGS) $(CFLAGS) -MT tools_la-pathlevel.lo -MD -MP -MF $(DEPDIR)/tools_la-pathlevel.Tpo -c -o tools_la-pathlevel.lo `test -f 'pathlevel.c' || echo '$(srcdir)/'`pathlevel.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/tools_la-pathlevel.Tpo $(DEPDIR)/tools_la-pathlevel.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='pathlevel.c' object='tools_la-pathlevel.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tools_la_CFLAGS) $(CFLAGS) -c -o tools_la-pathlevel.lo `test -f 'pathlevel.c' || echo '$(srcdir)/'`pathlevel.c
+
+tools_la-profile.lo: profile.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tools_la_CFLAGS) $(CFLAGS) -MT tools_la-profile.lo -MD -MP -MF $(DEPDIR)/tools_la-profile.Tpo -c -o tools_la-profile.lo `test -f 'profile.c' || echo '$(srcdir)/'`profile.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/tools_la-profile.Tpo $(DEPDIR)/tools_la-profile.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='profile.c' object='tools_la-profile.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tools_la_CFLAGS) $(CFLAGS) -c -o tools_la-profile.lo `test -f 'profile.c' || echo '$(srcdir)/'`profile.c
+
+tools_la-readvalue.lo: readvalue.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tools_la_CFLAGS) $(CFLAGS) -MT tools_la-readvalue.lo -MD -MP -MF $(DEPDIR)/tools_la-readvalue.Tpo -c -o tools_la-readvalue.lo `test -f 'readvalue.c' || echo '$(srcdir)/'`readvalue.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/tools_la-readvalue.Tpo $(DEPDIR)/tools_la-readvalue.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='readvalue.c' object='tools_la-readvalue.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tools_la_CFLAGS) $(CFLAGS) -c -o tools_la-readvalue.lo `test -f 'readvalue.c' || echo '$(srcdir)/'`readvalue.c
+
+tools_la-roughness.lo: roughness.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tools_la_CFLAGS) $(CFLAGS) -MT tools_la-roughness.lo -MD -MP -MF $(DEPDIR)/tools_la-roughness.Tpo -c -o tools_la-roughness.lo `test -f 'roughness.c' || echo '$(srcdir)/'`roughness.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/tools_la-roughness.Tpo $(DEPDIR)/tools_la-roughness.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='roughness.c' object='tools_la-roughness.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tools_la_CFLAGS) $(CFLAGS) -c -o tools_la-roughness.lo `test -f 'roughness.c' || echo '$(srcdir)/'`roughness.c
+
+tools_la-stats.lo: stats.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tools_la_CFLAGS) $(CFLAGS) -MT tools_la-stats.lo -MD -MP -MF $(DEPDIR)/tools_la-stats.Tpo -c -o tools_la-stats.lo `test -f 'stats.c' || echo '$(srcdir)/'`stats.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/tools_la-stats.Tpo $(DEPDIR)/tools_la-stats.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='stats.c' object='tools_la-stats.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tools_la_CFLAGS) $(CFLAGS) -c -o tools_la-stats.lo `test -f 'stats.c' || echo '$(srcdir)/'`stats.c
+
+tools_la-selectionmanager.lo: selectionmanager.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tools_la_CFLAGS) $(CFLAGS) -MT tools_la-selectionmanager.lo -MD -MP -MF $(DEPDIR)/tools_la-selectionmanager.Tpo -c -o tools_la-selectionmanager.lo `test -f 'selectionmanager.c' || echo '$(srcdir)/'`selectionmanager.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/tools_la-selectionmanager.Tpo $(DEPDIR)/tools_la-selectionmanager.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='selectionmanager.c' object='tools_la-selectionmanager.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tools_la_CFLAGS) $(CFLAGS) -c -o tools_la-selectionmanager.lo `test -f 'selectionmanager.c' || echo '$(srcdir)/'`selectionmanager.c
+
+tools_la-sfunctions.lo: sfunctions.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tools_la_CFLAGS) $(CFLAGS) -MT tools_la-sfunctions.lo -MD -MP -MF $(DEPDIR)/tools_la-sfunctions.Tpo -c -o tools_la-sfunctions.lo `test -f 'sfunctions.c' || echo '$(srcdir)/'`sfunctions.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/tools_la-sfunctions.Tpo $(DEPDIR)/tools_la-sfunctions.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sfunctions.c' object='tools_la-sfunctions.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tools_la_CFLAGS) $(CFLAGS) -c -o tools_la-sfunctions.lo `test -f 'sfunctions.c' || echo '$(srcdir)/'`sfunctions.c
+
+tools_la-spectro.lo: spectro.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tools_la_CFLAGS) $(CFLAGS) -MT tools_la-spectro.lo -MD -MP -MF $(DEPDIR)/tools_la-spectro.Tpo -c -o tools_la-spectro.lo `test -f 'spectro.c' || echo '$(srcdir)/'`spectro.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/tools_la-spectro.Tpo $(DEPDIR)/tools_la-spectro.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='spectro.c' object='tools_la-spectro.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tools_la_CFLAGS) $(CFLAGS) -c -o tools_la-spectro.lo `test -f 'spectro.c' || echo '$(srcdir)/'`spectro.c
+
+tools_la-spotremove.lo: spotremove.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tools_la_CFLAGS) $(CFLAGS) -MT tools_la-spotremove.lo -MD -MP -MF $(DEPDIR)/tools_la-spotremove.Tpo -c -o tools_la-spotremove.lo `test -f 'spotremove.c' || echo '$(srcdir)/'`spotremove.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/tools_la-spotremove.Tpo $(DEPDIR)/tools_la-spotremove.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='spotremove.c' object='tools_la-spotremove.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tools_la_CFLAGS) $(CFLAGS) -c -o tools_la-spotremove.lo `test -f 'spotremove.c' || echo '$(srcdir)/'`spotremove.c
+
+tools_la-tools.lo: tools.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tools_la_CFLAGS) $(CFLAGS) -MT tools_la-tools.lo -MD -MP -MF $(DEPDIR)/tools_la-tools.Tpo -c -o tools_la-tools.lo `test -f 'tools.c' || echo '$(srcdir)/'`tools.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/tools_la-tools.Tpo $(DEPDIR)/tools_la-tools.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tools.c' object='tools_la-tools.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tools_la_CFLAGS) $(CFLAGS) -c -o tools_la-tools.lo `test -f 'tools.c' || echo '$(srcdir)/'`tools.c
+
mostlyclean-libtool:
-rm -f *.lo
@@ -821,13 +1064,15 @@ distdir: $(DISTFILES)
fi; \
done
check-am: all-am
-check: check-am
+check: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) check-am
all-am: Makefile $(LTLIBRARIES)
installdirs:
for dir in "$(DESTDIR)$(toolsdir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
-install: install-am
+install: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
@@ -857,6 +1102,7 @@ distclean-generic:
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
clean: clean-am
clean-am: clean-generic clean-libtool clean-local \
@@ -928,7 +1174,7 @@ ps-am:
uninstall-am: uninstall-toolsLTLIBRARIES
-.MAKE: install-am install-strip
+.MAKE: all check install install-am install-strip
.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
clean-libtool clean-local clean-toolsLTLIBRARIES cscopelist-am \
@@ -948,6 +1194,9 @@ uninstall-am: uninstall-toolsLTLIBRARIES
.PRECIOUS: Makefile
+tools.c: $(srcdir)/Makefile.am $(top_srcdir)/utils/gen-module-bundle.sh
+ $(SHELL) $(top_srcdir)/utils/gen-module-bundle.sh tools.c $(bundlable_modules)
+
clean-local:
rm -f core.* *~
diff --git a/modules/tools/crop.c b/modules/tools/crop.c
index aa3b3f0..1ce5bed 100644
--- a/modules/tools/crop.c
+++ b/modules/tools/crop.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: crop.c 17820 2015-12-11 15:06:32Z yeti-dn $
+ * @(#) $Id: crop.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2003-2006 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -96,7 +96,7 @@ static const ToolArgs default_args = {
TRUE,
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, crop)
G_DEFINE_TYPE(GwyToolCrop, gwy_tool_crop, GWY_TYPE_PLAIN_TOOL)
@@ -203,18 +203,18 @@ gwy_tool_crop_init_dialog(GwyToolCrop *tool)
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(tool->keep_offsets),
tool->args.keep_offsets);
gtk_table_attach(table, tool->keep_offsets,
- 0, 1, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 1, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect_swapped(tool->keep_offsets, "toggled",
G_CALLBACK(gwy_tool_crop_keep_offsets_toggled),
tool);
row++;
tool->new_channel
- = gtk_check_button_new_with_mnemonic(_("Create new channel"));
+ = gtk_check_button_new_with_mnemonic(_("Create new image"));
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(tool->new_channel),
tool->args.new_channel);
gtk_table_attach(table, tool->new_channel,
- 0, 1, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 1, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect_swapped(tool->new_channel, "toggled",
G_CALLBACK(gwy_tool_crop_new_data_toggled),
tool);
diff --git a/modules/tools/distance.c b/modules/tools/distance.c
index 047a4d1..2285122 100644
--- a/modules/tools/distance.c
+++ b/modules/tools/distance.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: distance.c 19044 2016-10-08 19:10:46Z yeti-dn $
+ * @(#) $Id: distance.c 20111 2017-07-30 14:08:43Z yeti-dn $
* Copyright (C) 2003-2008 Nenad Ocelic, David Necas (Yeti), Petr Klapetek.
* E-mail: ocelic at biochem.mpg.de, yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -110,7 +110,7 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Distance measurement tool, measures distances and angles."),
"Nenad Ocelic <ocelic at biochem.mpg.de>",
- "2.13",
+ "2.14",
"Nenad Ocelic & David Nečas (Yeti) & Petr Klapetek",
"2004",
};
@@ -121,7 +121,7 @@ static const ToolArgs default_args = {
TRUE,
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, distance)
G_DEFINE_TYPE(GwyToolDistance, gwy_tool_distance, GWY_TYPE_PLAIN_TOOL)
@@ -194,7 +194,7 @@ gwy_tool_distance_init(GwyToolDistance *tool)
gwy_container_gis_boolean_by_name(settings, number_lines_key,
&tool->args.number_lines);
- tool->angle_format = gwy_si_unit_value_format_new(1.0, 1, "deg");
+ tool->angle_format = gwy_si_unit_value_format_new(1.0, 1, _("deg"));
gwy_plain_tool_connect_selection(plain_tool, tool->layer_type_line,
"line");
@@ -623,7 +623,7 @@ gwy_tool_distance_create_report(GwyToolDistance *tool)
plain_tool = GWY_PLAIN_TOOL(tool);
text = g_string_new(NULL);
g_string_append_printf(text,
- "n Δx [%s] Δy [%s] φ [%s] R [%s] Δz [%s]\n",
+ "n\tΔx [%s]\tΔy [%s]\tφ [%s]\tR [%s]\tΔz [%s]\n",
plain_tool->coord_format->units,
plain_tool->coord_format->units,
tool->angle_format->units,
@@ -654,7 +654,7 @@ gwy_tool_distance_create_report(GwyToolDistance *tool)
val_dz -= gwy_data_field_get_val(plain_tool->data_field, x, y);
vf_dz = plain_tool->value_format;
- g_string_append_printf(text, "%d %.*f %.*f %.*f %.*f %.*f\n",
+ g_string_append_printf(text, "%d\t%.*f\t%.*f\t%.*f\t%.*f\t%.*f\n",
i+1,
vf_dx->precision+1, val_dx/vf_dx->magnitude,
vf_dy->precision+1, val_dy/vf_dy->magnitude,
diff --git a/modules/tools/filter.c b/modules/tools/filter.c
index a8c9771..6a89ab0 100644
--- a/modules/tools/filter.c
+++ b/modules/tools/filter.c
@@ -1,6 +1,6 @@
/*
- * @(#) $Id: filter.c 19039 2016-10-08 10:54:58Z yeti-dn $
- * Copyright (C) 2003-2006 David Necas (Yeti), Petr Klapetek.
+ * @(#) $Id: filter.c 19948 2017-06-22 14:05:41Z yeti-dn $
+ * Copyright (C) 2003-2017 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
* This program is free software; you can redistribute it and/or modify
@@ -30,6 +30,7 @@
#include <libprocess/linestats.h>
#include <libgwydgets/gwystock.h>
#include <libgwydgets/gwycombobox.h>
+#include <libgwydgets/gwyadjustbar.h>
#include <libgwydgets/gwyradiobuttons.h>
#include <libgwydgets/gwydgetutils.h>
#include <app/gwyapp.h>
@@ -128,7 +129,7 @@ static GwyModuleInfo module_info = {
N_("Filter tool, processes selected part of data with a filter "
"(conservative denoise, mean, median. Kuwahara, minimum, maximum)."),
"Petr Klapetek <klapetek at gwyddion.net>",
- "3.12",
+ "3.13",
"David Nečas (Yeti) & Petr Klapetek",
"2003",
};
@@ -145,7 +146,7 @@ static const ToolArgs default_args = {
5.0,
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, filter)
G_DEFINE_TYPE(GwyToolFilter, gwy_tool_filter, GWY_TYPE_PLAIN_TOOL)
@@ -263,7 +264,7 @@ gwy_tool_filter_init_dialog(GwyToolFilter *tool)
FALSE, FALSE, 0);
/* Options */
- table = GTK_TABLE(gtk_table_new(4, 4, FALSE));
+ table = GTK_TABLE(gtk_table_new(4, 3, FALSE));
gtk_table_set_col_spacings(table, 6);
gtk_table_set_row_spacings(table, 2);
gtk_container_set_border_width(GTK_CONTAINER(table), 4);
@@ -272,8 +273,7 @@ gwy_tool_filter_init_dialog(GwyToolFilter *tool)
row = 0;
label = gwy_label_new_header(_("Filter"));
- gtk_table_attach(table, label,
- 0, 1, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ gtk_table_attach(table, label, 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
tool->filter_type = gwy_enum_combo_box_new
@@ -281,14 +281,15 @@ gwy_tool_filter_init_dialog(GwyToolFilter *tool)
G_CALLBACK(gwy_tool_filter_type_changed),
tool,
tool->args.filter_type, TRUE);
- gwy_table_attach_hscale(GTK_WIDGET(table), row, _("_Type:"), NULL,
- GTK_OBJECT(tool->filter_type), GWY_HSCALE_WIDGET);
+ gwy_table_attach_adjbar(GTK_WIDGET(table), row, _("_Type:"), NULL,
+ GTK_OBJECT(tool->filter_type),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
row++;
tool->size = gtk_adjustment_new(0.0, 0.0, 1.0, 0.1, 1.0, 0);
tool->size_spin
- = gwy_table_attach_hscale(GTK_WIDGET(table), row, _("Si_ze:"), "px",
- tool->size, 0);
+ = gwy_table_attach_adjbar(GTK_WIDGET(table), row, _("Si_ze:"), _("px"),
+ tool->size, GWY_HSCALE_SQRT);
gwy_table_hscale_set_sensitive
(tool->size, gwy_tool_filter_is_sized(tool->args.filter_type));
setup_size_adjustment(tool);
@@ -298,8 +299,7 @@ gwy_tool_filter_init_dialog(GwyToolFilter *tool)
gtk_table_set_row_spacing(table, row-1, 8);
label = gwy_label_new_header(_("Masking Mode"));
- gtk_table_attach(table, label,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ gtk_table_attach(table, label, 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
tool->masking
@@ -307,7 +307,7 @@ gwy_tool_filter_init_dialog(GwyToolFilter *tool)
G_CALLBACK(gwy_tool_filter_masking_changed),
tool,
tool->args.masking);
- row = gwy_radio_buttons_attach_to_table(tool->masking, table, 3, row);
+ row = gwy_radio_buttons_attach_to_table(tool->masking, table, 2, row);
gwy_plain_tool_add_clear_button(GWY_PLAIN_TOOL(tool));
gwy_tool_add_hide_button(GWY_TOOL(tool), FALSE);
@@ -457,6 +457,8 @@ static void
setup_size_adjustment(GwyToolFilter *tool)
{
GtkAdjustment *adj = GTK_ADJUSTMENT(tool->size);
+ GtkWidget *adjbar = gwy_table_hscale_get_scale(tool->size);
+
if (gwy_tool_filter_is_float_sized(tool->args.filter_type)) {
g_object_set(adj,
"lower", 0.01,
@@ -466,6 +468,7 @@ setup_size_adjustment(GwyToolFilter *tool)
"value", tool->args.gauss_size,
NULL);
gtk_spin_button_set_digits(GTK_SPIN_BUTTON(tool->size_spin), 2);
+ gwy_adjust_bar_set_snap_to_ticks(GWY_ADJUST_BAR(adjbar), FALSE);
}
else {
g_object_set(adj,
@@ -476,6 +479,7 @@ setup_size_adjustment(GwyToolFilter *tool)
"value", (gdouble)tool->args.size,
NULL);
gtk_spin_button_set_digits(GTK_SPIN_BUTTON(tool->size_spin), 0);
+ gwy_adjust_bar_set_snap_to_ticks(GWY_ADJUST_BAR(adjbar), TRUE);
}
}
diff --git a/modules/tools/grainmeasure.c b/modules/tools/grainmeasure.c
index 7bf37f9..4d118a9 100644
--- a/modules/tools/grainmeasure.c
+++ b/modules/tools/grainmeasure.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: grainmeasure.c 19039 2016-10-08 10:54:58Z yeti-dn $
+ * @(#) $Id: grainmeasure.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2007 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -99,7 +99,7 @@ static GwyModuleInfo module_info = {
static const gchar expanded_key[] = "/module/grainmeasure/expanded";
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, grainmeasure)
G_DEFINE_TYPE(GwyToolGrainMeasure, gwy_tool_grain_measure, GWY_TYPE_PLAIN_TOOL)
diff --git a/modules/tools/grainremover.c b/modules/tools/grainremover.c
index baaf39a..6637cf9 100644
--- a/modules/tools/grainremover.c
+++ b/modules/tools/grainremover.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: grainremover.c 16437 2014-07-24 20:38:55Z yeti-dn $
+ * @(#) $Id: grainremover.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2003-2006 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -120,7 +120,7 @@ static const ToolArgs default_args = {
GRAIN_REMOVE_LAPLACE,
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, grainremover)
G_DEFINE_TYPE(GwyToolGrainRemover, gwy_tool_grain_remover, GWY_TYPE_PLAIN_TOOL)
diff --git a/modules/tools/icolorange.c b/modules/tools/icolorange.c
index c8b3a9b..ffcf2f2 100644
--- a/modules/tools/icolorange.c
+++ b/modules/tools/icolorange.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: icolorange.c 19039 2016-10-08 10:54:58Z yeti-dn $
+ * @(#) $Id: icolorange.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2003-2006 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -134,7 +134,7 @@ static GwyModuleInfo module_info = {
"2004",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, icolorange)
G_DEFINE_TYPE(GwyToolColorRange, gwy_tool_color_range, GWY_TYPE_PLAIN_TOOL)
diff --git a/modules/tools/level3.c b/modules/tools/level3.c
index 2d90dc1..d9a28bc 100644
--- a/modules/tools/level3.c
+++ b/modules/tools/level3.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: level3.c 19039 2016-10-08 10:54:58Z yeti-dn $
+ * @(#) $Id: level3.c 20103 2017-07-29 04:31:07Z yeti-dn $
* Copyright (C) 2003-2006 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -35,6 +35,8 @@
#define GWY_IS_TOOL_LEVEL3(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GWY_TYPE_TOOL_LEVEL3))
#define GWY_TOOL_LEVEL3_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GWY_TYPE_TOOL_LEVEL3, GwyToolLevel3Class))
+enum { RADIUS_MAX = 32 };
+
enum {
COLUMN_I, COLUMN_X, COLUMN_Y, COLUMN_Z, NCOLUMNS
};
@@ -106,7 +108,7 @@ static GwyModuleInfo module_info = {
N_("Three-point level tool, levels data by subtracting a plane fitted "
"through three selected points."),
"Yeti <yeti at gwyddion.net>",
- "2.7",
+ "2.8",
"David Nečas (Yeti) & Petr Klapetek",
"2003",
};
@@ -118,7 +120,7 @@ static const ToolArgs default_args = {
FALSE,
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, level3)
G_DEFINE_TYPE(GwyToolLevel3, gwy_tool_level3, GWY_TYPE_PLAIN_TOOL)
@@ -205,6 +207,7 @@ gwy_tool_level3_init_dialog(GwyToolLevel3 *tool)
GtkWidget *label, *table;
GwyNullStore *store;
guint i;
+ gint row;
dialog = GTK_DIALOG(GWY_TOOL(tool)->dialog);
@@ -234,31 +237,35 @@ gwy_tool_level3_init_dialog(GwyToolLevel3 *tool)
gtk_table_set_col_spacings(GTK_TABLE(table), 6);
gtk_container_set_border_width(GTK_CONTAINER(table), 4);
gtk_box_pack_start(GTK_BOX(dialog->vbox), table, TRUE, TRUE, 0);
+ row = 0;
- tool->radius = gtk_adjustment_new(tool->args.radius, 1, 16, 1, 5, 0);
- gwy_table_attach_spinbutton(table, 1, _("_Averaging radius:"), "px",
- tool->radius);
+ tool->radius = gtk_adjustment_new(tool->args.radius, 1, RADIUS_MAX, 1, 5,
+ 0);
+ gwy_table_attach_adjbar(table, row, _("_Averaging radius:"), _("px"),
+ tool->radius, GWY_HSCALE_LINEAR | GWY_HSCALE_SNAP);
g_signal_connect_swapped(tool->radius, "value-changed",
G_CALLBACK(gwy_tool_level3_radius_changed), tool);
- gtk_table_set_row_spacing(GTK_TABLE(table), 1, 8);
+ row++;
tool->instant_apply
= gtk_check_button_new_with_mnemonic(_("_Instant apply"));
- gtk_table_attach(GTK_TABLE(table), tool->instant_apply, 0, 3, 2, 3,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ gtk_table_attach(GTK_TABLE(table), tool->instant_apply, 0, 2, row, row+1,
+ GTK_FILL, 0, 0, 0);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(tool->instant_apply),
tool->args.instant_apply);
g_signal_connect(tool->instant_apply, "toggled",
G_CALLBACK(gwy_tool_level3_instant_apply_changed), tool);
+ row++;
tool->set_zero
= gtk_check_button_new_with_mnemonic(_("Set plane to _zero"));
- gtk_table_attach(GTK_TABLE(table), tool->set_zero, 0, 3, 3, 4,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ gtk_table_attach(GTK_TABLE(table), tool->set_zero, 0, 2, row, row+1,
+ GTK_FILL, 0, 0, 0);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(tool->set_zero),
tool->args.set_zero);
g_signal_connect(tool->set_zero, "toggled",
G_CALLBACK(gwy_tool_level3_set_zero_changed), tool);
+ row++;
gwy_plain_tool_add_clear_button(GWY_PLAIN_TOOL(tool));
gwy_tool_add_hide_button(GWY_TOOL(tool), FALSE);
diff --git a/modules/tools/linestats.c b/modules/tools/linestats.c
index fe68b0a..89eda12 100644
--- a/modules/tools/linestats.c
+++ b/modules/tools/linestats.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: linestats.c 19039 2016-10-08 10:54:58Z yeti-dn $
+ * @(#) $Id: linestats.c 20102 2017-07-29 04:29:28Z yeti-dn $
* Copyright (C) 2003-2016 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -179,7 +179,7 @@ static const GwyEnum sf_types[] = {
{ N_("Kurtosis"), GWY_LINE_STAT_KURTOSIS, },
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, linestats)
G_DEFINE_TYPE(GwyToolLineStats, gwy_tool_line_stats, GWY_TYPE_PLAIN_TOOL)
@@ -332,7 +332,7 @@ gwy_tool_line_stats_init_dialog(GwyToolLineStats *tool)
/* Output type */
hbox2 = gtk_hbox_new(FALSE, 8);
gtk_container_set_border_width(GTK_CONTAINER(hbox2), 4);
- gtk_box_pack_start(GTK_BOX(vbox), hbox2, FALSE, FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(vbox), hbox2, FALSE, TRUE, 0);
label = gtk_label_new_with_mnemonic(_("_Quantity:"));
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
@@ -344,7 +344,7 @@ gwy_tool_line_stats_init_dialog(GwyToolLineStats *tool)
tool,
tool->args.output_type, TRUE);
gtk_label_set_mnemonic_widget(GTK_LABEL(label), tool->output_type);
- gtk_box_pack_start(GTK_BOX(hbox2), tool->output_type, FALSE, FALSE, 0);
+ gtk_box_pack_end(GTK_BOX(hbox2), tool->output_type, FALSE, FALSE, 0);
/* Average */
hbox2 = gtk_hbox_new(FALSE, 8);
diff --git a/modules/tools/maskedit.c b/modules/tools/maskedit.c
index 8cc087d..3afab6d 100644
--- a/modules/tools/maskedit.c
+++ b/modules/tools/maskedit.c
@@ -1,6 +1,6 @@
/*
- * @(#) $Id: maskedit.c 19071 2016-10-14 09:02:41Z yeti-dn $
- * Copyright (C) 2003-2006 David Necas (Yeti), Petr Klapetek.
+ * @(#) $Id: maskedit.c 19987 2017-06-26 11:50:55Z yeti-dn $
+ * Copyright (C) 2003-2017 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
* This program is free software; you can redistribute it and/or modify
@@ -170,7 +170,7 @@ static GwyModuleInfo module_info = {
N_("Mask editor tool, allows interactive modification of parts "
"of the mask."),
"Yeti <yeti at gwyddion.net>",
- "3.8",
+ "3.11",
"David Nečas (Yeti) & Petr Klapetek",
"2004",
};
@@ -203,7 +203,7 @@ static const ToolArgs default_args = {
FALSE,
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, maskedit)
G_DEFINE_TYPE(GwyToolMaskEditor, gwy_tool_mask_editor, GWY_TYPE_PLAIN_TOOL)
@@ -322,7 +322,7 @@ gwy_tool_mask_editor_init_dialog(GwyToolMaskEditor *tool)
const modes[] = {
{
MASK_EDIT_SET,
- GWY_STOCK_MASK,
+ GWY_STOCK_MASK_SET,
N_("Set mask to selection"),
},
{
@@ -382,7 +382,7 @@ gwy_tool_mask_editor_init_dialog(GwyToolMaskEditor *tool)
};
GtkRadioButton *group;
- GtkSizeGroup *sizegroup;
+ GtkSizeGroup *sizegroup, *labelsize;
GtkTooltips *tips;
GtkDialog *dialog;
GtkTable *table;
@@ -394,9 +394,10 @@ gwy_tool_mask_editor_init_dialog(GwyToolMaskEditor *tool)
dialog = GTK_DIALOG(GWY_TOOL(tool)->dialog);
tips = gwy_app_get_tooltips();
sizegroup = gtk_size_group_new(GTK_SIZE_GROUP_BOTH);
+ labelsize = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
tool->sensgroup = gwy_sensitivity_group_new();
- table = GTK_TABLE(gtk_table_new(15, 4, FALSE));
+ table = GTK_TABLE(gtk_table_new(15, 3, FALSE));
gtk_table_set_col_spacings(table, 6);
gtk_table_set_row_spacings(table, 2);
gtk_container_set_border_width(GTK_CONTAINER(table), 4);
@@ -413,20 +414,21 @@ gwy_tool_mask_editor_init_dialog(GwyToolMaskEditor *tool)
button = gtk_radio_button_new_with_mnemonic(NULL, _("_Shapes"));
tool->style = gtk_radio_button_get_group(GTK_RADIO_BUTTON(button));
gwy_radio_button_set_value(button, MASK_EDIT_STYLE_SHAPES);
- gtk_table_attach(table, button, 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ gtk_table_attach(table, button, 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect_swapped(button, "clicked",
G_CALLBACK(gwy_tool_mask_editor_style_changed),
tool);
row++;
/* Mode */
- label = gtk_label_new(_("Mode:"));
- gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_table_attach(table, label, 0, 1, row, row+1, GTK_FILL, 0, 0, 0);
-
hbox = GTK_BOX(gtk_hbox_new(FALSE, 0));
gtk_table_attach(table, GTK_WIDGET(hbox),
- 1, 4, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+
+ label = gtk_label_new(_("Mode:"));
+ gtk_size_group_add_widget(labelsize, label);
+ gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
+ gtk_box_pack_start(hbox, label, FALSE, TRUE, 4);
group = NULL;
for (i = 0; i < G_N_ELEMENTS(modes); i++) {
@@ -449,13 +451,14 @@ gwy_tool_mask_editor_init_dialog(GwyToolMaskEditor *tool)
row++;
/* Shape */
- label = gtk_label_new(_("Shape:"));
- gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_table_attach(table, label, 0, 1, row, row+1, GTK_FILL, 0, 0, 0);
-
hbox = GTK_BOX(gtk_hbox_new(FALSE, 0));
gtk_table_attach(table, GTK_WIDGET(hbox),
- 1, 4, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+
+ label = gtk_label_new(_("Shape:"));
+ gtk_size_group_add_widget(labelsize, label);
+ gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
+ gtk_box_pack_start(hbox, label, FALSE, TRUE, 4);
group = NULL;
for (i = 0; i < G_N_ELEMENTS(shapes); i++) {
@@ -483,20 +486,21 @@ gwy_tool_mask_editor_init_dialog(GwyToolMaskEditor *tool)
_("_Drawing Tools"));
tool->style = gtk_radio_button_get_group(GTK_RADIO_BUTTON(button));
gwy_radio_button_set_value(button, MASK_EDIT_STYLE_DRAWING);
- gtk_table_attach(table, button, 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ gtk_table_attach(table, button, 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect_swapped(button, "clicked",
G_CALLBACK(gwy_tool_mask_editor_style_changed),
tool);
row++;
/* Tool */
- label = gtk_label_new(_("Tool:"));
- gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_table_attach(table, label, 0, 1, row, row+1, GTK_FILL, 0, 0, 0);
-
hbox = GTK_BOX(gtk_hbox_new(FALSE, 0));
gtk_table_attach(table, GTK_WIDGET(hbox),
- 1, 4, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+
+ label = gtk_label_new(_("Tool:"));
+ gtk_size_group_add_widget(labelsize, label);
+ gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
+ gtk_box_pack_start(hbox, label, FALSE, TRUE, 4);
group = NULL;
for (i = 0; i < G_N_ELEMENTS(tools); i++) {
@@ -521,8 +525,10 @@ gwy_tool_mask_editor_init_dialog(GwyToolMaskEditor *tool)
/* Radius */
tool->radius = gtk_adjustment_new(tool->args.radius, 1.0, 15.0,
1.0, 1.0, 0.0);
- gwy_table_attach_hscale(GTK_WIDGET(table), row, _("_Radius:"), "px",
- tool->radius, 0);
+ gwy_table_attach_adjbar(GTK_WIDGET(table), row, _("_Radius:"), _("px"),
+ tool->radius, GWY_HSCALE_LINEAR | GWY_HSCALE_SNAP);
+ gtk_size_group_add_widget(labelsize,
+ gwy_table_hscale_get_label(tool->radius));
g_signal_connect(tool->radius, "value-changed",
G_CALLBACK(gwy_tool_mask_editor_radius_changed), tool);
row++;
@@ -535,7 +541,7 @@ gwy_tool_mask_editor_init_dialog(GwyToolMaskEditor *tool)
hbox = GTK_BOX(gtk_hbox_new(FALSE, 0));
gtk_table_attach(table, GTK_WIDGET(hbox),
- 0, 4, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
button = gwy_stock_like_button_new(_("_Invert"), GWY_STOCK_MASK_INVERT);
gtk_size_group_add_widget(sizegroup, button);
@@ -566,7 +572,7 @@ gwy_tool_mask_editor_init_dialog(GwyToolMaskEditor *tool)
hbox = GTK_BOX(gtk_hbox_new(FALSE, 0));
gtk_table_attach(table, GTK_WIDGET(hbox),
- 0, 4, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
button = gtk_button_new_with_mnemonic(_("Fill _Voids"));
gtk_size_group_add_widget(sizegroup, button);
@@ -589,13 +595,13 @@ gwy_tool_mask_editor_init_dialog(GwyToolMaskEditor *tool)
/* Grow/Shrink */
label = gwy_label_new_header(_("Grow/Shrink"));
- gtk_table_attach(table, label, 0, 4, row, row+1, GTK_FILL, 0, 0, 0);
+ gtk_table_attach(table, label, 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
row++;
/* Buttons */
hbox = GTK_BOX(gtk_hbox_new(FALSE, 0));
gtk_table_attach(table, GTK_WIDGET(hbox),
- 0, 4, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
button = gwy_stock_like_button_new(_("_Grow"), GWY_STOCK_MASK_GROW);
gtk_size_group_add_widget(sizegroup, button);
@@ -620,8 +626,8 @@ gwy_tool_mask_editor_init_dialog(GwyToolMaskEditor *tool)
/* Options */
tool->gsamount = gtk_adjustment_new(tool->args.gsamount, 1.0, 256.0,
1.0, 10.0, 0.0);
- gwy_table_attach_hscale(GTK_WIDGET(table), row, _("_Amount:"), "px",
- tool->gsamount, 0);
+ gwy_table_attach_adjbar(GTK_WIDGET(table), row, _("_Amount:"), _("px"),
+ tool->gsamount, GWY_HSCALE_SQRT | GWY_HSCALE_SNAP);
g_signal_connect(tool->gsamount, "value-changed",
G_CALLBACK(gwy_tool_mask_editor_gsamount_changed), tool);
row++;
@@ -630,10 +636,10 @@ gwy_tool_mask_editor_init_dialog(GwyToolMaskEditor *tool)
(gwy_distance_transform_type_get_enum(), -1,
G_CALLBACK(gwy_tool_mask_editor_dist_type_changed),
tool, tool->args.dist_type, TRUE);
- gwy_table_attach_hscale(GTK_WIDGET(table), row++,
+ gwy_table_attach_adjbar(GTK_WIDGET(table), row++,
_("_Distance type:"), NULL,
GTK_OBJECT(tool->dist_type),
- GWY_HSCALE_WIDGET);
+ GWY_HSCALE_WIDGET_NO_EXPAND);
row++;
tool->from_border
@@ -641,7 +647,7 @@ gwy_tool_mask_editor_init_dialog(GwyToolMaskEditor *tool)
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(tool->from_border),
tool->args.from_border);
gtk_table_attach(table, tool->from_border,
- 0, 4, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect(tool->from_border, "toggled",
G_CALLBACK(gwy_tool_mask_editor_from_border_changed),
tool);
@@ -653,7 +659,7 @@ gwy_tool_mask_editor_init_dialog(GwyToolMaskEditor *tool)
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(tool->prevent_merge),
tool->args.prevent_merge);
gtk_table_attach(table, tool->prevent_merge,
- 0, 4, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect(tool->prevent_merge, "toggled",
G_CALLBACK(gwy_tool_mask_editor_prevent_merge_changed),
tool);
@@ -664,6 +670,7 @@ gwy_tool_mask_editor_init_dialog(GwyToolMaskEditor *tool)
gwy_radio_buttons_set_current(tool->style, style);
g_object_unref(sizegroup);
+ g_object_unref(labelsize);
g_object_unref(tool->sensgroup);
gtk_widget_show_all(dialog->vbox);
}
@@ -1128,7 +1135,8 @@ gwy_tool_mask_editor_selection_finished(GwyPlainTool *plain_tool)
return;
}
gwy_tool_mask_editor_bucket_fill(tool, isel[0], isel[1]);
- gwy_data_field_data_changed(plain_tool->mask_field);
+ if (plain_tool->mask_field)
+ gwy_data_field_data_changed(plain_tool->mask_field);
return;
}
@@ -1330,6 +1338,11 @@ gwy_data_field_paint_wide_line(GwyDataField *dfield,
{
gint i, q;
+ if (!width && !height) {
+ gwy_data_field_circular_area_fill(dfield, col, row, radius, value);
+ return;
+ }
+
if (ABS(height) >= width) {
q = width/2;
if (height > 0) {
@@ -1417,8 +1430,8 @@ gwy_tool_mask_editor_selection_changed(GwyPlainTool *plain_tool,
GWY_SWAP(gdouble, xy[0], xy[2]);
GWY_SWAP(gdouble, xy[1], xy[3]);
}
- xy[2] -= xy[0] - 1;
- xy[3] -= xy[1] - 1;
+ xy[2] -= xy[0];
+ xy[3] -= xy[1];
gwy_data_field_paint_wide_line(mfield, xy[0], xy[1], xy[2], xy[3],
r, fillvalue);
}
diff --git a/modules/tools/pathlevel.c b/modules/tools/pathlevel.c
index b3c8b89..e9f96ca 100644
--- a/modules/tools/pathlevel.c
+++ b/modules/tools/pathlevel.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: pathlevel.c 19039 2016-10-08 10:54:58Z yeti-dn $
+ * @(#) $Id: pathlevel.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2007 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -110,7 +110,7 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Path level tool, performs row leveling along on user-set lines."),
"Yeti <yeti at gwyddion.net>",
- "1.8",
+ "1.9",
"David Nečas (Yeti)",
"2007",
};
@@ -119,7 +119,7 @@ static const ToolArgs default_args = {
1,
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, pathlevel)
G_DEFINE_TYPE(GwyToolPathLevel, gwy_tool_path_level, GWY_TYPE_PLAIN_TOOL)
@@ -243,7 +243,7 @@ gwy_tool_path_level_init_dialog(GwyToolPathLevel *tool)
gtk_container_add(GTK_CONTAINER(scwin), GTK_WIDGET(tool->treeview));
gtk_box_pack_start(GTK_BOX(dialog->vbox), scwin, TRUE, TRUE, 0);
- table = GTK_TABLE(gtk_table_new(1, 4, FALSE));
+ table = GTK_TABLE(gtk_table_new(1, 3, FALSE));
gtk_table_set_col_spacings(table, 6);
gtk_table_set_row_spacings(table, 2);
gtk_container_set_border_width(GTK_CONTAINER(table), 4);
@@ -253,8 +253,8 @@ gwy_tool_path_level_init_dialog(GwyToolPathLevel *tool)
tool->thickness = gtk_adjustment_new(tool->args.thickness,
1, MAX_THICKNESS, 1, 10, 0);
- gwy_table_attach_hscale(GTK_WIDGET(table), row, _("_Thickness:"), "px",
- tool->thickness, GWY_HSCALE_SQRT);
+ gwy_table_attach_adjbar(GTK_WIDGET(table), row, _("_Thickness:"), _("px"),
+ tool->thickness, GWY_HSCALE_SQRT | GWY_HSCALE_SNAP);
g_signal_connect_swapped(tool->thickness, "value-changed",
G_CALLBACK(gwy_tool_path_level_thickness_changed),
tool);
diff --git a/modules/tools/profile.c b/modules/tools/profile.c
index 21b3849..9598217 100644
--- a/modules/tools/profile.c
+++ b/modules/tools/profile.c
@@ -1,6 +1,6 @@
/*
- * @(#) $Id: profile.c 19044 2016-10-08 19:10:46Z yeti-dn $
- * Copyright (C) 2003-2015 David Necas (Yeti), Petr Klapetek.
+ * @(#) $Id: profile.c 20072 2017-07-12 09:51:51Z yeti-dn $
+ * Copyright (C) 2003-2017 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
* This program is free software; you can redistribute it and/or modify
@@ -37,6 +37,8 @@
#include <app/gwymoduleutils.h>
#include <app/gwyapp.h>
+#include <libgwymodule/gwymodule-file.h>
+
#define GWY_TYPE_TOOL_PROFILE (gwy_tool_profile_get_type())
#define GWY_TOOL_PROFILE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GWY_TYPE_TOOL_PROFILE, GwyToolProfile))
#define GWY_IS_TOOL_PROFILE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GWY_TYPE_TOOL_PROFILE))
@@ -52,6 +54,11 @@ typedef enum {
GWY_CC_DISPLAY_Z_UNC = 6,
} GwyCCDisplayType;
+typedef enum {
+ PROFILE_MODE_LINEAR = 0,
+ PROFILE_MODE_RADIAL = 1,
+} ProfileMode;
+
enum {
NLINES = 1024,
MAX_THICKNESS = 128,
@@ -76,7 +83,7 @@ typedef struct {
gboolean separate;
gboolean both;
gboolean number_lines;
- gboolean radial_profiles;
+ ProfileMode mode;
GwyAppDataId target;
} ToolArgs;
@@ -94,16 +101,13 @@ struct _GwyToolProfile {
GdkPixbuf *colorpixbuf;
GtkWidget *options;
- GtkWidget *radial_profiles;
- GtkWidget *symm_hbox;
- GtkWidget *symmetrize;
- GtkWidget *symmetrize_all;
+ GtkWidget *mode;
+ GtkWidget *improve;
+ GtkWidget *improve_all;
GtkObject *thickness;
GtkObject *resolution;
GtkWidget *fixres;
- GtkWidget *interp_hbox;
GtkWidget *interpolation;
- GtkWidget *interpolation_label;
GtkWidget *number_lines;
GtkWidget *separate;
GtkWidget *apply;
@@ -111,7 +115,6 @@ struct _GwyToolProfile {
GtkWidget *callabel;
GtkWidget *both;
GtkWidget *target_graph;
- GtkWidget *target_hbox;
GSList *masking;
GwyDataField *xerr;
@@ -143,85 +146,76 @@ struct _GwyToolProfileClass {
static gboolean module_register(void);
-static GType gwy_tool_profile_get_type (void) G_GNUC_CONST;
-static void gwy_tool_profile_finalize (GObject *object);
-static void gwy_tool_profile_init_dialog (GwyToolProfile *tool);
-static void gwy_tool_profile_data_switched (GwyTool *gwytool,
- GwyDataView *data_view);
-static void gwy_tool_profile_response (GwyTool *tool,
- gint response_id);
-static void gwy_tool_profile_data_changed (GwyPlainTool *plain_tool);
-static void gwy_tool_profile_selection_changed (GwyPlainTool *plain_tool,
- gint hint);
-static void gwy_tool_profile_update_symm_sensitivty (GwyToolProfile *tool);
-static void gwy_tool_profile_update_curve (GwyToolProfile *tool,
- gint i);
-static void gwy_tool_profile_update_all_curves (GwyToolProfile *tool);
-static void gwy_tool_profile_symmetrize_all (GwyToolProfile *tool);
-static void gwy_tool_profile_symmetrize (GwyToolProfile *tool);
-static void gwy_tool_profile_symmetrize_profile (GwyToolProfile *tool,
- gint id);
-static gint get_profile_with_masking (GwyDataField *dfield,
- gdouble **xdata,
- gdouble **ydata,
- GwyDataField *mask,
- GwyMaskingType masking,
- gdouble xfrom,
- gdouble yfrom,
- gdouble xto,
- gdouble yto,
- gint res,
- gint thickness,
- GwyInterpolationType interpolation);
-static void gwy_tool_profile_render_cell (GtkCellLayout *layout,
- GtkCellRenderer *renderer,
- GtkTreeModel *model,
- GtkTreeIter *iter,
- gpointer user_data);
-static void gwy_tool_profile_render_color (GtkCellLayout *layout,
- GtkCellRenderer *renderer,
- GtkTreeModel *model,
- GtkTreeIter *iter,
- gpointer user_data);
-static void gwy_tool_profile_options_expanded (GtkExpander *expander,
- GParamSpec *pspec,
- GwyToolProfile *tool);
-static void gwy_tool_profile_thickness_changed (GwyToolProfile *tool,
- GtkAdjustment *adj);
-static void gwy_tool_profile_resolution_changed (GwyToolProfile *tool,
- GtkAdjustment *adj);
-static void gwy_tool_profile_fixres_changed (GtkToggleButton *check,
- GwyToolProfile *tool);
-static void gwy_tool_profile_number_lines_changed (GtkToggleButton *check,
- GwyToolProfile *tool);
-static void gwy_tool_profile_radial_profiles_changed(GtkToggleButton *check,
- GwyToolProfile *tool);
-static void gwy_tool_profile_separate_changed (GtkToggleButton *check,
- GwyToolProfile *tool);
-static void gwy_tool_profile_both_changed (GtkToggleButton *check,
- GwyToolProfile *tool);
-static void gwy_tool_profile_interpolation_changed (GtkComboBox *combo,
- GwyToolProfile *tool);
-static void gwy_tool_profile_update_target_graphs (GwyToolProfile *tool);
-static gboolean filter_target_graphs (GwyContainer *data,
- gint id,
- gpointer user_data);
-static void gwy_tool_profile_target_changed (GwyToolProfile *tool);
-static void gwy_tool_profile_masking_changed (GtkWidget *button,
- GwyToolProfile *tool);
-static void gwy_tool_profile_apply (GwyToolProfile *tool);
-static GtkWidget* menu_display (GCallback callback,
- gpointer cbdata,
- GwyCCDisplayType current);
-static void display_changed (GtkComboBox *combo,
- GwyToolProfile *tool);
+static GType gwy_tool_profile_get_type (void) G_GNUC_CONST;
+static void gwy_tool_profile_finalize (GObject *object);
+static void gwy_tool_profile_init_dialog (GwyToolProfile *tool);
+static void gwy_tool_profile_data_switched (GwyTool *gwytool,
+ GwyDataView *data_view);
+static void gwy_tool_profile_response (GwyTool *tool,
+ gint response_id);
+static void gwy_tool_profile_data_changed (GwyPlainTool *plain_tool);
+static void gwy_tool_profile_selection_changed (GwyPlainTool *plain_tool,
+ gint hint);
+static void gwy_tool_profile_update_symm_sensitivty(GwyToolProfile *tool);
+static void gwy_tool_profile_update_curve (GwyToolProfile *tool,
+ gint i);
+static void gwy_tool_profile_update_all_curves (GwyToolProfile *tool);
+static void gwy_tool_profile_improve_all (GwyToolProfile *tool);
+static void gwy_tool_profile_improve (GwyToolProfile *tool);
+static void gwy_tool_profile_symmetrize_profile (GwyToolProfile *tool,
+ gint id);
+static void gwy_tool_profile_straighten_profile (GwyToolProfile *tool,
+ gint id);
+static void gwy_tool_profile_render_cell (GtkCellLayout *layout,
+ GtkCellRenderer *renderer,
+ GtkTreeModel *model,
+ GtkTreeIter *iter,
+ gpointer user_data);
+static void gwy_tool_profile_render_color (GtkCellLayout *layout,
+ GtkCellRenderer *renderer,
+ GtkTreeModel *model,
+ GtkTreeIter *iter,
+ gpointer user_data);
+static void gwy_tool_profile_options_expanded (GtkExpander *expander,
+ GParamSpec *pspec,
+ GwyToolProfile *tool);
+static void gwy_tool_profile_thickness_changed (GwyToolProfile *tool,
+ GtkAdjustment *adj);
+static void gwy_tool_profile_resolution_changed (GwyToolProfile *tool,
+ GtkAdjustment *adj);
+static void gwy_tool_profile_fixres_changed (GtkToggleButton *check,
+ GwyToolProfile *tool);
+static void gwy_tool_profile_number_lines_changed (GtkToggleButton *check,
+ GwyToolProfile *tool);
+static void gwy_tool_profile_mode_changed (GtkComboBox *combo,
+ GwyToolProfile *tool);
+static void gwy_tool_profile_update_mode (GwyToolProfile *tool);
+static void gwy_tool_profile_separate_changed (GtkToggleButton *check,
+ GwyToolProfile *tool);
+static void gwy_tool_profile_both_changed (GtkToggleButton *check,
+ GwyToolProfile *tool);
+static void gwy_tool_profile_interpolation_changed (GtkComboBox *combo,
+ GwyToolProfile *tool);
+static void gwy_tool_profile_update_target_graphs (GwyToolProfile *tool);
+static gboolean filter_target_graphs (GwyContainer *data,
+ gint id,
+ gpointer user_data);
+static void gwy_tool_profile_target_changed (GwyToolProfile *tool);
+static void gwy_tool_profile_masking_changed (GtkWidget *button,
+ GwyToolProfile *tool);
+static void gwy_tool_profile_apply (GwyToolProfile *tool);
+static GtkWidget* menu_display (GCallback callback,
+ gpointer cbdata,
+ GwyCCDisplayType current);
+static void display_changed (GtkComboBox *combo,
+ GwyToolProfile *tool);
static GwyModuleInfo module_info = {
GWY_MODULE_ABI_VERSION,
&module_register,
N_("Profile tool, creates profile graphs from selected lines."),
"Petr Klapetek <klapetek at gwyddion.net>",
- "3.4",
+ "4.0",
"David Nečas (Yeti) & Petr Klapetek",
"2004",
};
@@ -251,7 +245,7 @@ static const ToolArgs default_args = {
GWY_APP_DATA_ID_NONE,
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, profile)
G_DEFINE_TYPE(GwyToolProfile, gwy_tool_profile, GWY_TYPE_PLAIN_TOOL)
@@ -313,7 +307,7 @@ gwy_tool_profile_finalize(GObject *object)
gwy_container_set_boolean_by_name(settings, number_lines_key,
tool->args.number_lines);
gwy_container_set_boolean_by_name(settings, radial_profiles_key,
- tool->args.radial_profiles);
+ tool->args.mode == PROFILE_MODE_RADIAL);
GWY_OBJECT_UNREF(tool->line);
if (tool->model) {
@@ -334,6 +328,7 @@ gwy_tool_profile_init(GwyToolProfile *tool)
GwyPlainTool *plain_tool;
GwyContainer *settings;
gint width, height;
+ gboolean is_rprof;
plain_tool = GWY_PLAIN_TOOL(tool);
tool->layer_type_line = gwy_plain_tool_check_layer_type(plain_tool,
@@ -346,6 +341,7 @@ gwy_tool_profile_init(GwyToolProfile *tool)
settings = gwy_app_settings_get();
tool->args = default_args;
+ is_rprof = (tool->args.mode == PROFILE_MODE_RADIAL);
gwy_container_gis_boolean_by_name(settings, options_visible_key,
&tool->args.options_visible);
gwy_container_gis_int32_by_name(settings, thickness_key,
@@ -370,15 +366,15 @@ gwy_tool_profile_init(GwyToolProfile *tool)
&tool->args.both);
gwy_container_gis_boolean_by_name(settings, number_lines_key,
&tool->args.number_lines);
- gwy_container_gis_boolean_by_name(settings, radial_profiles_key,
- &tool->args.radial_profiles);
+ gwy_container_gis_boolean_by_name(settings, radial_profiles_key, &is_rprof);
+ tool->args.mode = (is_rprof ? PROFILE_MODE_RADIAL : PROFILE_MODE_LINEAR);
gtk_icon_size_lookup(GTK_ICON_SIZE_MENU, &width, &height);
height |= 1;
tool->colorpixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, FALSE, 8,
height, height);
- tool->pixel_format = gwy_si_unit_value_format_new(1.0, 0, "px");
+ tool->pixel_format = gwy_si_unit_value_format_new(1.0, 0, _("px"));
gwy_plain_tool_connect_selection(plain_tool, tool->layer_type_line,
"line");
@@ -469,43 +465,43 @@ gwy_tool_profile_init_dialog(GwyToolProfile *tool)
G_CALLBACK(gwy_tool_profile_options_expanded), tool);
gtk_box_pack_start(GTK_BOX(vbox), tool->options, FALSE, FALSE, 0);
- table = GTK_TABLE(gtk_table_new(11, 4, FALSE));
+ table = GTK_TABLE(gtk_table_new(11, 3, FALSE));
gtk_table_set_col_spacings(table, 6);
gtk_table_set_row_spacings(table, 2);
gtk_container_set_border_width(GTK_CONTAINER(table), 4);
gtk_container_add(GTK_CONTAINER(tool->options), GTK_WIDGET(table));
row = 0;
- tool->radial_profiles
- = gtk_check_button_new_with_mnemonic(_("_Radial profiles"));
- gtk_table_attach(table, tool->radial_profiles,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(tool->radial_profiles),
- tool->args.radial_profiles);
- g_signal_connect(tool->radial_profiles, "toggled",
- G_CALLBACK(gwy_tool_profile_radial_profiles_changed),
- tool);
+ tool->mode = gwy_enum_combo_box_newl(G_CALLBACK(gwy_tool_profile_mode_changed),
+ tool,
+ tool->args.mode,
+ _("Linear profiles"),
+ PROFILE_MODE_LINEAR,
+ _("Radial profiles"),
+ PROFILE_MODE_RADIAL,
+ NULL);
+ gwy_table_attach_adjbar(GTK_WIDGET(table), row, _("_Mode:"), NULL,
+ GTK_OBJECT(tool->mode),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
row++;
- hbox2 = tool->symm_hbox = gtk_hbox_new(FALSE, 6);
- gtk_table_attach(table, hbox2,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
- tool->symmetrize_all = gtk_button_new_with_mnemonic(_("Symmetrize _All"));
- gtk_box_pack_end(GTK_BOX(hbox2), tool->symmetrize_all, FALSE, FALSE, 0);
- g_signal_connect_swapped(tool->symmetrize_all, "clicked",
- G_CALLBACK(gwy_tool_profile_symmetrize_all),
- tool);
- tool->symmetrize = gtk_button_new_with_mnemonic(_("S_ymmetrize"));
- gtk_box_pack_end(GTK_BOX(hbox2), tool->symmetrize, FALSE, FALSE, 0);
- g_signal_connect_swapped(tool->symmetrize, "clicked",
- G_CALLBACK(gwy_tool_profile_symmetrize),
- tool);
+ gtk_table_set_row_spacing(table, row-1, 8);
+ hbox2 = gtk_hbox_new(FALSE, 2);
+ gtk_table_attach(table, hbox2, 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
+ tool->improve_all = gtk_button_new_with_label("");
+ gtk_box_pack_end(GTK_BOX(hbox2), tool->improve_all, FALSE, FALSE, 0);
+ g_signal_connect_swapped(tool->improve_all, "clicked",
+ G_CALLBACK(gwy_tool_profile_improve_all), tool);
+ tool->improve = gtk_button_new_with_label("");
+ gtk_box_pack_end(GTK_BOX(hbox2), tool->improve, FALSE, FALSE, 0);
+ g_signal_connect_swapped(tool->improve, "clicked",
+ G_CALLBACK(gwy_tool_profile_improve), tool);
row++;
tool->thickness = gtk_adjustment_new(tool->args.thickness,
1, MAX_THICKNESS, 1, 10, 0);
- gwy_table_attach_hscale(GTK_WIDGET(table), row, _("_Thickness:"), "px",
- tool->thickness, GWY_HSCALE_SQRT);
+ gwy_table_attach_adjbar(GTK_WIDGET(table), row, _("_Thickness:"), _("px"),
+ tool->thickness, GWY_HSCALE_SQRT | GWY_HSCALE_SNAP);
g_signal_connect_swapped(tool->thickness, "value-changed",
G_CALLBACK(gwy_tool_profile_thickness_changed),
tool);
@@ -514,9 +510,9 @@ gwy_tool_profile_init_dialog(GwyToolProfile *tool)
tool->resolution = gtk_adjustment_new(tool->args.resolution,
MIN_RESOLUTION, MAX_RESOLUTION,
1, 10, 0);
- gwy_table_attach_hscale(GTK_WIDGET(table), row, _("_Fix res.:"), NULL,
- tool->resolution,
- GWY_HSCALE_CHECK | GWY_HSCALE_SQRT);
+ gwy_table_attach_adjbar(GTK_WIDGET(table), row,
+ _("_Fixed resolution:"), NULL,
+ tool->resolution, GWY_HSCALE_CHECK);
g_signal_connect_swapped(tool->resolution, "value-changed",
G_CALLBACK(gwy_tool_profile_resolution_changed),
tool);
@@ -525,13 +521,12 @@ gwy_tool_profile_init_dialog(GwyToolProfile *tool)
tool->args.fixres);
g_signal_connect(tool->fixres, "toggled",
G_CALLBACK(gwy_tool_profile_fixres_changed), tool);
- gwy_table_hscale_set_sensitive(tool->resolution, tool->args.fixres);
row++;
tool->number_lines
= gtk_check_button_new_with_mnemonic(_("_Number lines"));
gtk_table_attach(table, tool->number_lines,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(tool->number_lines),
tool->args.number_lines);
g_signal_connect(tool->number_lines, "toggled",
@@ -541,47 +536,33 @@ gwy_tool_profile_init_dialog(GwyToolProfile *tool)
tool->separate
= gtk_check_button_new_with_mnemonic(_("_Separate profiles"));
gtk_table_attach(table, tool->separate,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(tool->separate),
tool->args.separate);
g_signal_connect(tool->separate, "toggled",
G_CALLBACK(gwy_tool_profile_separate_changed), tool);
row++;
- hbox2 = tool->interp_hbox = gtk_hbox_new(FALSE, 6);
- gtk_table_attach(table, hbox2,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
-
- label = gtk_label_new_with_mnemonic(_("_Interpolation type:"));
- gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_box_pack_start(GTK_BOX(hbox2), label, FALSE, FALSE, 0);
- tool->interpolation_label = label;
-
tool->interpolation = gwy_enum_combo_box_new
(gwy_interpolation_type_get_enum(), -1,
G_CALLBACK(gwy_tool_profile_interpolation_changed),
tool,
tool->args.interpolation, TRUE);
- gtk_label_set_mnemonic_widget(GTK_LABEL(label), tool->interpolation);
- gtk_box_pack_end(GTK_BOX(hbox2), tool->interpolation, FALSE, FALSE, 0);
+ gwy_table_attach_adjbar(GTK_WIDGET(table), row,
+ _("_Interpolation type:"), NULL,
+ GTK_OBJECT(tool->interpolation),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
row++;
- tool->target_hbox = hbox2 = gtk_hbox_new(FALSE, 6);
- gtk_table_attach(table, hbox2,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
-
- label = gtk_label_new_with_mnemonic(_("Target _graph:"));
- gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_box_pack_start(GTK_BOX(hbox2), label, FALSE, FALSE, 0);
-
tool->target_graph = gwy_data_chooser_new_graphs();
gwy_data_chooser_set_none(GWY_DATA_CHOOSER(tool->target_graph),
_("New graph"));
gwy_data_chooser_set_active(GWY_DATA_CHOOSER(tool->target_graph), NULL, -1);
gwy_data_chooser_set_filter(GWY_DATA_CHOOSER(tool->target_graph),
filter_target_graphs, tool, NULL);
- gtk_label_set_mnemonic_widget(GTK_LABEL(label), tool->target_graph);
- gtk_box_pack_end(GTK_BOX(hbox2), tool->target_graph, FALSE, FALSE, 0);
+ gwy_table_attach_adjbar(GTK_WIDGET(table), row, _("Target _graph:"), NULL,
+ GTK_OBJECT(tool->target_graph),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
g_signal_connect_swapped(tool->target_graph, "changed",
G_CALLBACK(gwy_tool_profile_target_changed),
tool);
@@ -590,7 +571,7 @@ gwy_tool_profile_init_dialog(GwyToolProfile *tool)
gtk_table_set_row_spacing(table, row-1, 8);
label = gwy_label_new_header(_("Masking Mode"));
gtk_table_attach(table, label,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
row++;
tool->masking
@@ -598,12 +579,11 @@ gwy_tool_profile_init_dialog(GwyToolProfile *tool)
G_CALLBACK(gwy_tool_profile_masking_changed),
tool,
tool->args.masking);
- row = gwy_radio_buttons_attach_to_table(tool->masking, table, 3, row);
+ row = gwy_radio_buttons_attach_to_table(tool->masking, table, 2, row);
gtk_table_set_row_spacing(table, row-1, 8);
hbox2 = gtk_hbox_new(FALSE, 6);
- gtk_table_attach(table, hbox2,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ gtk_table_attach(table, hbox2, 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
tool->callabel = gtk_label_new_with_mnemonic(_("_Calibration data:"));
gtk_misc_set_alignment(GTK_MISC(tool->callabel), 0.0, 0.5);
gtk_box_pack_start(GTK_BOX(hbox2), tool->callabel, FALSE, FALSE, 0);
@@ -618,8 +598,7 @@ gwy_tool_profile_init_dialog(GwyToolProfile *tool)
row++;
tool->both = gtk_check_button_new_with_mnemonic(_("_Show profile"));
- gtk_table_attach(table, tool->both,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ gtk_table_attach(table, tool->both, 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(tool->both),
tool->args.both);
g_signal_connect(tool->both, "toggled",
@@ -631,10 +610,7 @@ gwy_tool_profile_init_dialog(GwyToolProfile *tool)
tool->graph = gwy_graph_new(tool->gmodel);
gwy_graph_enable_user_input(GWY_GRAPH(tool->graph), FALSE);
- g_object_set(tool->gmodel,
- "label-visible", FALSE,
- "axis-label-bottom", tool->args.radial_profiles ? "r" : "x",
- NULL);
+ g_object_set(tool->gmodel, "label-visible", FALSE, NULL);
gtk_box_pack_start(GTK_BOX(hbox), tool->graph, TRUE, TRUE, 2);
gwy_plain_tool_add_clear_button(GWY_PLAIN_TOOL(tool));
@@ -644,7 +620,7 @@ gwy_tool_profile_init_dialog(GwyToolProfile *tool)
gtk_dialog_set_default_response(dialog, GTK_RESPONSE_APPLY);
gtk_dialog_set_response_sensitive(dialog, GTK_RESPONSE_APPLY, FALSE);
gwy_help_add_to_tool_dialog(dialog, GWY_TOOL(tool), GWY_HELP_NO_BUTTON);
- gwy_tool_profile_update_symm_sensitivty(tool);
+ gwy_tool_profile_update_mode(tool);
gtk_widget_show_all(dialog->vbox);
}
@@ -674,7 +650,7 @@ gwy_tool_profile_data_switched(GwyTool *gwytool,
tool = GWY_TOOL_PROFILE(gwytool);
if (data_view) {
- is_rprof = tool->args.radial_profiles;
+ is_rprof = (tool->args.mode == PROFILE_MODE_RADIAL);
gwy_object_set_or_reset(plain_tool->layer,
tool->layer_type_line,
"line-numbers", tool->args.number_lines,
@@ -811,21 +787,19 @@ gwy_tool_profile_update_symm_sensitivty(GwyToolProfile *tool)
selection = gtk_tree_view_get_selection(tool->treeview);
is_selected = gtk_tree_selection_get_selected(selection, &model, &iter);
has_lines = (model && gtk_tree_model_iter_n_children(model, NULL) > 0);
- is_rprof = tool->args.radial_profiles;
+ is_rprof = (tool->args.mode == PROFILE_MODE_RADIAL);
gwy_table_hscale_set_sensitive(tool->thickness, !is_rprof);
- gtk_widget_set_sensitive(tool->interpolation, !is_rprof);
- gtk_widget_set_sensitive(tool->interpolation_label, !is_rprof);
- gtk_widget_set_sensitive(tool->symmetrize, is_rprof && is_selected);
- gtk_widget_set_sensitive(tool->symmetrize_all, is_rprof && has_lines);
+ gwy_table_hscale_set_sensitive(GTK_OBJECT(tool->interpolation), !is_rprof);
+ gtk_widget_set_sensitive(tool->improve, is_selected);
+ gtk_widget_set_sensitive(tool->improve_all, has_lines);
- show_hide_widget(tool->interp_hbox, !is_rprof);
+ show_hide_widget(gtk_widget_get_parent(tool->interpolation), !is_rprof);
show_hide_widget(gwy_table_hscale_get_label(tool->thickness), !is_rprof);
show_hide_widget(gwy_table_hscale_get_middle_widget(tool->thickness),
!is_rprof);
show_hide_widget(gwy_table_hscale_get_scale(tool->thickness), !is_rprof);
show_hide_widget(gwy_table_hscale_get_units(tool->thickness), !is_rprof);
- show_hide_widget(tool->symm_hbox, is_rprof);
}
static void
@@ -1014,18 +988,18 @@ gwy_tool_profile_update_curve(GwyToolProfile *tool,
gchar *desc;
const GwyRGBA *color;
gboolean has_calibration, is_rprof, is_masking;
- gdouble *xdata = NULL, *ydata = NULL;
- GwyDataField *data_field;
+ GwyXY *xydata = NULL;
+ GwyDataField *data_field, *mask;
GwyDataLine *upunc = NULL, *lowunc = NULL;
plain_tool = GWY_PLAIN_TOOL(tool);
g_return_if_fail(plain_tool->selection);
g_return_if_fail(gwy_selection_get_object(plain_tool->selection, i, line));
data_field = plain_tool->data_field;
+ mask = plain_tool->mask_field;
- is_rprof = tool->args.radial_profiles;
- is_masking = (plain_tool->mask_field
- && tool->args.masking != GWY_MASK_IGNORE);
+ is_rprof = (tool->args.mode == PROFILE_MODE_RADIAL);
+ is_masking = (mask && tool->args.masking != GWY_MASK_IGNORE);
has_calibration = tool->has_calibration && (!is_rprof && !is_masking);
multpos = has_calibration ? 9 : 1;
@@ -1052,8 +1026,7 @@ gwy_tool_profile_update_curve(GwyToolProfile *tool,
tool->line = gwy_data_line_new(1, 1.0, FALSE);
r = MAX(r, hypot(gwy_data_field_get_xmeasure(data_field),
gwy_data_field_get_ymeasure(data_field)));
- gwy_data_field_angular_average(data_field, tool->line,
- plain_tool->mask_field,
+ gwy_data_field_angular_average(data_field, tool->line, mask,
tool->args.masking,
xc, yc, r, lineres);
}
@@ -1066,14 +1039,22 @@ gwy_tool_profile_update_curve(GwyToolProfile *tool,
tool->args.interpolation);
}
else {
- lineres = get_profile_with_masking(data_field,
- &xdata, &ydata,
- plain_tool->mask_field,
- tool->args.masking,
- line[0], line[1], line[2], line[3],
- lineres,
- tool->args.thickness,
- tool->args.interpolation);
+ xydata = gwy_data_field_get_profile_mask(data_field, &lineres, mask,
+ tool->args.masking,
+ line[0], line[1],
+ line[2], line[3],
+ lineres,
+ tool->args.thickness,
+ tool->args.interpolation);
+ if (!xydata) {
+ xydata = g_new(GwyXY, 1);
+ xydata[0].x = 0.0;
+ xydata[0].y = gwy_data_field_get_dval_real(data_field,
+ 0.5*(line[0] + line[2]),
+ 0.5*(line[1] + line[3]),
+ GWY_INTERPOLATION_ROUND);
+ lineres = 1;
+ }
}
if (has_calibration) {
@@ -1091,8 +1072,10 @@ gwy_tool_profile_update_curve(GwyToolProfile *tool,
n = gwy_graph_model_get_n_curves(tool->gmodel);
if (i < n) {
gcmodel = gwy_graph_model_get_curve(tool->gmodel, i);
- if (xdata && ydata) {
- gwy_graph_curve_model_set_data(gcmodel, xdata, ydata, lineres);
+ if (xydata) {
+ gwy_graph_curve_model_set_data_interleaved(gcmodel,
+ (gdouble*)xydata,
+ lineres);
}
else {
gwy_graph_curve_model_set_data_from_dataline(gcmodel,
@@ -1112,8 +1095,10 @@ gwy_tool_profile_update_curve(GwyToolProfile *tool,
"color", color,
NULL);
g_free(desc);
- if (xdata && ydata) {
- gwy_graph_curve_model_set_data(gcmodel, xdata, ydata, lineres);
+ if (xydata) {
+ gwy_graph_curve_model_set_data_interleaved(gcmodel,
+ (gdouble*)xydata,
+ lineres);
}
else {
gwy_graph_curve_model_set_data_from_dataline(gcmodel,
@@ -1143,12 +1128,11 @@ gwy_tool_profile_update_curve(GwyToolProfile *tool,
add_hidden_unc_curves(tool, i/multpos+1, color, upunc, lowunc);
}
- g_free(xdata);
- g_free(ydata);
+ g_free(xydata);
}
static void
-gwy_tool_profile_symmetrize(GwyToolProfile *tool)
+gwy_tool_profile_improve(GwyToolProfile *tool)
{
GtkTreeSelection *selection;
GtkTreeModel *model;
@@ -1162,12 +1146,15 @@ gwy_tool_profile_symmetrize(GwyToolProfile *tool)
path = gtk_tree_model_get_path(model, &iter);
indices = gtk_tree_path_get_indices(path);
- gwy_tool_profile_symmetrize_profile(tool, indices[0]);
+ if (tool->args.mode == PROFILE_MODE_RADIAL)
+ gwy_tool_profile_symmetrize_profile(tool, indices[0]);
+ else
+ gwy_tool_profile_straighten_profile(tool, indices[0]);
gtk_tree_path_free(path);
}
static void
-gwy_tool_profile_symmetrize_all(GwyToolProfile *tool)
+gwy_tool_profile_improve_all(GwyToolProfile *tool)
{
GwyPlainTool *plain_tool;
gint n, i;
@@ -1177,8 +1164,12 @@ gwy_tool_profile_symmetrize_all(GwyToolProfile *tool)
|| !(n = gwy_selection_get_data(plain_tool->selection, NULL)))
return;
- for (i = 0; i < n; i++)
- gwy_tool_profile_symmetrize_profile(tool, i);
+ for (i = 0; i < n; i++) {
+ if (tool->args.mode == PROFILE_MODE_RADIAL)
+ gwy_tool_profile_symmetrize_profile(tool, i);
+ else
+ gwy_tool_profile_straighten_profile(tool, i);
+ }
}
static void
@@ -1199,7 +1190,8 @@ gwy_tool_profile_update_all_curves(GwyToolProfile *tool)
}
static gdouble
-estimate_variation(GwyDataField *dfield, GwyDataLine *tmp, const gdouble *line)
+estimate_angular_variation(GwyDataField *dfield, GwyDataLine *tmp,
+ const gdouble *line)
{
gdouble xc, yc, r, dx, dy, h;
gdouble *s, *s2;
@@ -1273,10 +1265,9 @@ symmetrize_at_scale(GwyDataField *dfield,
gdouble *line)
{
gdouble xreal = dfield->xreal, yreal = dfield->yreal;
+ gint i, j, besti = 0, bestj = 0;
gdouble dx = gwy_data_field_get_xmeasure(dfield);
gdouble dy = gwy_data_field_get_ymeasure(dfield);
- gint istep = (gint)ceil(r/dy), jstep = (gint)ceil(r/dx);
- gint i, j, besti = 0, bestj = 0;
gdouble allvar[25], z[9];
gdouble var, bestvar = G_MAXDOUBLE;
gboolean ok;
@@ -1284,8 +1275,8 @@ symmetrize_at_scale(GwyDataField *dfield,
for (i = -2; i <= 2; i++) {
for (j = -2; j <= 2; j++) {
gdouble offline[4] = {
- line[0] + j*jstep*dx, line[1] + i*istep*dy,
- line[2] + j*jstep*dx, line[3] + i*istep*dy,
+ line[0] + j*r, line[1] + i*r,
+ line[2] + j*r, line[3] + i*r,
};
allvar[5*(i + 2) + (j + 2)] = G_MAXDOUBLE;
@@ -1293,7 +1284,7 @@ symmetrize_at_scale(GwyDataField *dfield,
|| offline[1] < 0.0 || offline[3] > yreal)
continue;
- var = estimate_variation(dfield, tmpline, offline);
+ var = estimate_angular_variation(dfield, tmpline, offline);
allvar[5*(i + 2) + (j + 2)] = var;
if (i*j + j*j <= 5 && var < bestvar) {
besti = i;
@@ -1303,16 +1294,14 @@ symmetrize_at_scale(GwyDataField *dfield,
}
}
- line[0] += bestj*jstep*dx;
- line[1] += besti*istep*dy;
- line[2] += bestj*jstep*dx;
- line[3] += besti*istep*dy;
+ line[0] += bestj*r;
+ line[1] += besti*r;
+ line[2] += bestj*r;
+ line[3] += besti*r;
- /* If steps are larger than one pixel, just choose the maximum and
- * continue. */
- if (MAX(istep, jstep) > 1) {
- gwy_debug("symmetrize at scale %g (%d,%d): (%d,%d)",
- r, jstep, istep, bestj, besti);
+ /* If steps are large, just choose the maximum and continue. */
+ if (r > 0.7 * 2*dx*dy/(dx + dy)) {
+ gwy_debug("symmetrize at scale %g: (%d,%d)", r, bestj, besti);
return FALSE;
}
@@ -1340,20 +1329,19 @@ symmetrize_at_scale(GwyDataField *dfield,
}
if (ok) {
gdouble x, y;
- gwy_math_refine_maximum(z, &x, &y);
+ gwy_math_refine_maximum_2d(z, &x, &y);
gwy_debug("subpixel refinement (%g,%g)", x, y);
- line[0] += x*dx;
- line[1] += y*dy;
- line[2] += x*dx;
- line[3] += y*dy;
+ line[0] += x*r;
+ line[1] += y*r;
+ line[2] += x*r;
+ line[3] += y*r;
}
return TRUE;
}
static void
-gwy_tool_profile_symmetrize_profile(GwyToolProfile *tool,
- gint id)
+gwy_tool_profile_symmetrize_profile(GwyToolProfile *tool, gint id)
{
GwyPlainTool *plain_tool;
GwyDataField *dfield;
@@ -1382,112 +1370,153 @@ gwy_tool_profile_symmetrize_profile(GwyToolProfile *tool,
g_object_unref(tmpline);
}
-static gint
-get_profile_with_masking(GwyDataField *dfield,
- gdouble **xdata, gdouble **ydata,
- GwyDataField *mask,
- GwyMaskingType masking,
- gdouble xfrom, gdouble yfrom,
- gdouble xto, gdouble yto,
- gint res,
- gint thickness,
- GwyInterpolationType interpolation)
+static gdouble
+estimate_orthogonal_variation(GwyDataField *dfield,
+ const gdouble *line, gint thickness)
{
- gint k, i, j, kk;
- gdouble xreal, yreal, dx, dy, xstep, ystep, step, size, tx, ty, h;
- gint xres, yres, tres, n;
- const gdouble *m;
-
- if (masking == GWY_MASK_IGNORE)
- mask = NULL;
- else if (!mask)
- masking = GWY_MASK_IGNORE;
- m = mask ? mask->data : NULL;
-
- xres = dfield->xres;
- yres = dfield->yres;
- xreal = dfield->xreal;
- yreal = dfield->yreal;
- dx = xreal/xres;
- dy = yreal/yres;
-
- size = hypot(fabs(xto - xfrom)/dx + 1, fabs(yto - yfrom)/dy + 1);
- size = MAX(size, 1.0);
- if (res <= 0)
- res = GWY_ROUND(size);
-
- gwy_debug("size: %g, res: %d", size, res);
- if (xto == xfrom && yto == yfrom) {
- xto += 0.2*dx;
- yto += 0.2*dy;
- xfrom -= 0.2*dx;
- yfrom -= 0.2*dy;
- }
- xstep = (xto - xfrom)/(res - 1.0);
- ystep = (yto - yfrom)/(res - 1.0);
- step = hypot(xstep, ystep);
- gwy_debug("step (%g, %g)", xstep, ystep);
-
- if (thickness <= 1) {
- tres = 0;
- tx = ty = 0.0;
- }
- else {
- tres = 2*(thickness - 1);
- tx = (yto - yfrom)/dy;
- ty = (xto - xfrom)/dx;
- h = hypot(tx, ty);
- tx *= dx/h * 0.5*thickness/tres;
- ty *= dy/h * 0.5*thickness/tres;
- }
- gwy_debug("tres: %d, tstep (%g, %g)", tres, tx, ty);
+ gdouble lx, ly, l, dx, dy, h, xreal, yreal;
+ gdouble xfrom0, xfrom1, yfrom0, yfrom1, xto0, xto1, yto0, yto1;
+ gdouble variation = 0.0;
+ gint ir, res, i, j, n;
- *xdata = g_new0(gdouble, res);
- *ydata = g_new0(gdouble, res);
+ /* Ignore offsets here we do not call any function that uses them. */
+ lx = line[2] - line[0];
+ ly = line[3] - line[1];
+ l = hypot(lx, ly);
+ dx = gwy_data_field_get_xmeasure(dfield);
+ dy = gwy_data_field_get_ymeasure(dfield);
+ h = 2.0*dx*dy/(dx + dy);
+
+ /* First orthogonal profile is (xfrom0,yfrom0)--(xto0,yto0),
+ * the last is (xfrom1,yfrom1)--(xto1,yto1), between them we interpolate. */
+ xfrom0 = line[0] + ly/l*thickness*h;
+ xto0 = line[0] - ly/l*thickness*h;
+ yfrom0 = line[1] - lx/l*thickness*h;
+ yto0 = line[1] + lx/l*thickness*h;
+ xfrom1 = line[2] + ly/l*thickness*h;
+ xto1 = line[2] - ly/l*thickness*h;
+ yfrom1 = line[3] - lx/l*thickness*h;
+ yto1 = line[3] + lx/l*thickness*h;
+
+ xreal = gwy_data_field_get_xreal(dfield);
+ yreal = gwy_data_field_get_yreal(dfield);
+ ir = pow(l/h + 1.0, 2.0/3.0);
+ res = thickness+1;
n = 0;
- for (k = 0; k < res; k++) {
- gdouble xc = xfrom + xstep*k;
- gdouble yc = yfrom + ystep*k;
- gdouble z = 0.0;
- gint w = 0;
-
- for (kk = -tres; kk <= tres; kk++) {
- gdouble x = xc + kk*tx;
- gdouble y = yc + kk*ty;
-
- x = CLAMP(x, 0.0, 0.999999*xreal);
- y = CLAMP(y, 0.0, 0.999999*yreal);
-
- if (masking != GWY_MASK_IGNORE) {
- i = (gint)floor(y/dy);
- j = (gint)floor(x/dx);
- if ((masking == GWY_MASK_INCLUDE && m[i*xres + j] <= 0.0)
- || (masking == GWY_MASK_EXCLUDE && m[i*xres + j] >= 1.0))
- continue;
- }
- z += gwy_data_field_get_dval_real(dfield, x, y, interpolation);
- w++;
- }
- gwy_debug("[%d] %d", k, w);
- if (w) {
- (*xdata)[n] = step*k;
- (*ydata)[n] = z/w;
- n++;
- }
+ for (i = 0; i <= ir; i++) {
+ gdouble t = i/(gdouble)ir;
+ gdouble xl1 = xfrom0*(1.0 - t) + xfrom1*t;
+ gdouble yl1 = yfrom0*(1.0 - t) + yfrom1*t;
+ gdouble xl2 = xto0*(1.0 - t) + xto1*t;
+ gdouble yl2 = yto0*(1.0 - t) + yto1*t;
+ gdouble mu = 0.0;
+ gint nxy;
+ GwyXY *xy;
+
+ if (xl1 < 0.5*dx || xl1 > xreal - 0.5*dx)
+ continue;
+ if (yl1 < 0.5*dy || yl1 > yreal - 0.5*dy)
+ continue;
+ if (xl2 < 0.5*dx || xl2 > xreal - 0.5*dx)
+ continue;
+ if (yl2 < 0.5*dy || yl2 > yreal - 0.5*dy)
+ continue;
+
+ xy = gwy_data_field_get_profile_mask(dfield, &nxy,
+ NULL, GWY_MASK_IGNORE,
+ xl1, yl1, xl2, yl2,
+ res, 1, GWY_INTERPOLATION_LINEAR);
+ if (!xy)
+ continue;
+
+ for (j = 0; j < nxy; j++)
+ mu += xy[j].y;
+ mu /= nxy;
+
+ for (j = 0; j < nxy; j++)
+ variation += (xy[j].y - mu)*(xy[j].y - mu);
+ n += nxy;
+
+ g_free(xy);
+ }
+
+ return variation/n;
+}
+
+static void
+straighten_at_scale(GwyDataField *dfield, gdouble *line,
+ gint thickness, gdouble phistep, gint n)
+{
+ gdouble r, xc, yc, phi0, phi, cphi, sphi, t;
+ gdouble *var;
+ gint i, besti;
+
+ xc = 0.5*(line[0] + line[2]);
+ yc = 0.5*(line[1] + line[3]);
+ r = 0.5*hypot(line[2] - line[0], line[3] - line[1]);
+ phi0 = atan2(line[3] - line[1], line[2] - line[0]);
+
+ var = g_new(gdouble, 2*n + 1);
+ for (i = -n; i <= n; i++) {
+ phi = i*phistep + phi0;
+ cphi = cos(phi);
+ sphi = sin(phi);
+ line[0] = xc + cphi*r;
+ line[1] = yc + sphi*r;
+ line[2] = xc - cphi*r;
+ line[3] = yc - sphi*r;
+ var[n + i] = estimate_orthogonal_variation(dfield, line, thickness);
+ gwy_debug("%g %g", phi, var[n + i]);
}
- if (!n) {
- (*xdata)[0] = 0.0;
- (*ydata)[0] = gwy_data_field_get_dval_real(dfield,
- 0.5*(xfrom + xto),
- 0.5*(yfrom + yto),
- GWY_INTERPOLATION_ROUND);
- n = 1;
+ besti = 0;
+ for (i = -n; i <= n; i++) {
+ if (var[n + i] < var[n + besti])
+ besti = i;
}
- return n;
+ phi0 += besti*phistep;
+ if (ABS(besti) < n) {
+ gwy_math_refine_maximum_1d(var + (n + besti - 1), &t);
+ phi0 += t*phistep;
+ }
+ cphi = cos(phi0);
+ sphi = sin(phi0);
+ line[0] = xc + cphi*r;
+ line[1] = yc + sphi*r;
+ line[2] = xc - cphi*r;
+ line[3] = yc - sphi*r;
+
+ g_free(var);
+}
+
+static void
+gwy_tool_profile_straighten_profile(GwyToolProfile *tool, gint id)
+{
+ GwyPlainTool *plain_tool;
+ GwyDataField *dfield;
+ gdouble line[4];
+ gdouble dx, dy;
+ gint thickness = tool->args.thickness;
+
+ plain_tool = GWY_PLAIN_TOOL(tool);
+ g_return_if_fail(plain_tool->selection);
+ g_return_if_fail(gwy_selection_get_object(plain_tool->selection, id, line));
+ dfield = plain_tool->data_field;
+ dx = gwy_data_field_get_xmeasure(dfield);
+ dy = gwy_data_field_get_ymeasure(dfield);
+ thickness = MAX((thickness + 1)/2, 4);
+
+ /* Don't attempt to optimise very short lines. It would end up in tears. */
+ if (hypot((line[2] - line[0])/dx, (line[3] - line[1])/dy) < 4.0)
+ return;
+
+ straighten_at_scale(dfield, line, thickness, 0.02, 15);
+ straighten_at_scale(dfield, line, thickness, 0.002, 12);
+
+ gwy_selection_set_object(plain_tool->selection, id, line);
}
static void
@@ -1562,10 +1591,7 @@ gwy_tool_profile_render_color(G_GNUC_UNUSED GtkCellLayout *layout,
gtk_tree_model_get(model, iter, 0, &idx, -1);
gcmodel = gwy_graph_model_get_curve(tool->gmodel, idx);
g_object_get(gcmodel, "color", &rgba, NULL);
- pixel = 0xff
- | ((guint32)(guchar)floor(255.99999*rgba->b) << 8)
- | ((guint32)(guchar)floor(255.99999*rgba->g) << 16)
- | ((guint32)(guchar)floor(255.99999*rgba->r) << 24);
+ pixel = 0xff | gwy_rgba_to_pixbuf_pixel(rgba);
gwy_rgba_free(rgba);
gdk_pixbuf_fill(tool->colorpixbuf, pixel);
}
@@ -1579,13 +1605,20 @@ gwy_tool_profile_options_expanded(GtkExpander *expander,
}
static void
-gwy_tool_profile_radial_profiles_changed(GtkToggleButton *check,
- GwyToolProfile *tool)
+gwy_tool_profile_mode_changed(GtkComboBox *combo, GwyToolProfile *tool)
+{
+ tool->args.mode = gwy_enum_combo_box_get_active(combo);
+ gwy_tool_profile_update_mode(tool);
+ gwy_tool_profile_update_all_curves(tool);
+}
+
+static void
+gwy_tool_profile_update_mode(GwyToolProfile *tool)
{
GwyPlainTool *plain_tool = GWY_PLAIN_TOOL(tool);
gboolean is_rprof;
- tool->args.radial_profiles = is_rprof = gtk_toggle_button_get_active(check);
+ is_rprof = (tool->args.mode == PROFILE_MODE_RADIAL);
gwy_tool_profile_update_symm_sensitivty(tool);
if (plain_tool->layer) {
g_object_set(plain_tool->layer,
@@ -1598,7 +1631,21 @@ gwy_tool_profile_radial_profiles_changed(GtkToggleButton *check,
"axis-label-bottom", is_rprof ? "r" : "x",
NULL);
}
- gwy_tool_profile_update_all_curves(tool);
+
+ if (is_rprof) {
+ gtk_button_set_label(GTK_BUTTON(tool->improve),
+ _("S_ymmetrize"));
+ gtk_button_set_label(GTK_BUTTON(tool->improve_all),
+ _("Symmetrize _All"));
+ }
+ else {
+ gtk_button_set_label(GTK_BUTTON(tool->improve),
+ _("Improve _Direction"));
+ gtk_button_set_label(GTK_BUTTON(tool->improve_all),
+ _("Improve _All"));
+ }
+ gtk_button_set_use_underline(GTK_BUTTON(tool->improve), TRUE);
+ gtk_button_set_use_underline(GTK_BUTTON(tool->improve_all), TRUE);
}
static void
@@ -1609,8 +1656,9 @@ gwy_tool_profile_thickness_changed(GwyToolProfile *tool,
tool->args.thickness = gwy_adjustment_get_int(adj);
if (plain_tool->layer) {
- gboolean is_rprof = tool->args.radial_profiles;
+ gboolean is_rprof;
+ is_rprof = (tool->args.mode == PROFILE_MODE_RADIAL);
g_object_set(plain_tool->layer,
"thickness", is_rprof ? 1 : tool->args.thickness,
NULL);
@@ -1654,7 +1702,8 @@ gwy_tool_profile_separate_changed(GtkToggleButton *check,
GwyToolProfile *tool)
{
tool->args.separate = gtk_toggle_button_get_active(check);
- gtk_widget_set_sensitive(tool->target_hbox, !tool->args.separate);
+ gwy_table_hscale_set_sensitive(GTK_OBJECT(tool->target_graph),
+ !tool->args.separate);
if (tool->args.separate)
gwy_data_chooser_set_active(GWY_DATA_CHOOSER(tool->target_graph),
NULL, -1);
@@ -1734,7 +1783,7 @@ gwy_tool_profile_apply(GwyToolProfile *tool)
n = gwy_selection_get_data(plain_tool->selection, NULL);
g_return_if_fail(n);
- is_rprof = tool->args.radial_profiles;
+ is_rprof = (tool->args.mode == PROFILE_MODE_RADIAL);
has_calibration = tool->has_calibration && !is_rprof;
if (tool->args.target.datano) {
@@ -1835,7 +1884,7 @@ display_changed(G_GNUC_UNUSED GtkComboBox *combo, GwyToolProfile *tool)
gint i, n;
gint multpos = 9;
- if (!tool->has_calibration || tool->args.radial_profiles)
+ if (!tool->has_calibration || tool->args.mode != PROFILE_MODE_LINEAR)
return;
plain_tool = GWY_PLAIN_TOOL(tool);
diff --git a/modules/tools/readvalue.c b/modules/tools/readvalue.c
index f46085d..87aa739 100644
--- a/modules/tools/readvalue.c
+++ b/modules/tools/readvalue.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: readvalue.c 19044 2016-10-08 19:10:46Z yeti-dn $
+ * @(#) $Id: readvalue.c 20100 2017-07-29 04:22:16Z yeti-dn $
* Copyright (C) 2003-2007,2014 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -30,13 +30,13 @@
#include <libgwydgets/gwydgetutils.h>
#include <app/gwyapp.h>
-enum { RADIUS_MAX = 32 };
-
#define GWY_TYPE_TOOL_READ_VALUE (gwy_tool_read_value_get_type())
#define GWY_TOOL_READ_VALUE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GWY_TYPE_TOOL_READ_VALUE, GwyToolReadValue))
#define GWY_IS_TOOL_READ_VALUE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GWY_TYPE_TOOL_READ_VALUE))
#define GWY_TOOL_READ_VALUE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GWY_TYPE_TOOL_READ_VALUE, GwyToolReadValueClass))
+enum { RADIUS_MAX = 32 };
+
typedef struct _GwyToolReadValue GwyToolReadValue;
typedef struct _GwyToolReadValueClass GwyToolReadValueClass;
@@ -136,7 +136,7 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Pointer tool, reads value under pointer."),
"Yeti <yeti at gwyddion.net>",
- "2.12",
+ "2.14",
"David Nečas (Yeti) & Petr Klapetek",
"2003",
};
@@ -145,7 +145,7 @@ static const ToolArgs default_args = {
1, FALSE,
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, readvalue)
G_DEFINE_TYPE(GwyToolReadValue, gwy_tool_read_value, GWY_TYPE_PLAIN_TOOL)
@@ -219,8 +219,8 @@ gwy_tool_read_value_init(GwyToolReadValue *tool)
gwy_container_gis_boolean_by_name(settings, show_selection_key,
&tool->args.show_selection);
- tool->pixel_format = gwy_si_unit_value_format_new(1.0, 0, "px");
- tool->angle_format = gwy_si_unit_value_format_new(1.0, 1, "deg");
+ tool->pixel_format = gwy_si_unit_value_format_new(1.0, 0, _("px"));
+ tool->angle_format = gwy_si_unit_value_format_new(1.0, 1, _("deg"));
gwy_plain_tool_connect_selection(plain_tool, tool->layer_type_point,
"pointer");
@@ -240,21 +240,24 @@ gwy_tool_read_value_init_dialog(GwyToolReadValue *tool)
dialog = GTK_DIALOG(GWY_TOOL(tool)->dialog);
tips = gwy_app_get_tooltips();
- table = GTK_TABLE(gtk_table_new(13, 3, FALSE));
+ align = gtk_alignment_new(0.0, 0.0, 1.0, 0.0);
+ gtk_box_pack_start(GTK_BOX(dialog->vbox), align, FALSE, TRUE, 0);
+
+ table = GTK_TABLE(gtk_table_new(12, 3, FALSE));
gtk_table_set_col_spacings(table, 6);
gtk_table_set_row_spacings(table, 2);
gtk_container_set_border_width(GTK_CONTAINER(table), 4);
- gtk_box_pack_start(GTK_BOX(dialog->vbox), GTK_WIDGET(table),
- FALSE, FALSE, 0);
+ gtk_container_add(GTK_CONTAINER(align), GTK_WIDGET(table));
row = 0;
gtk_table_attach(table, gwy_label_new_header(_("Position")),
- 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
row++;
label = gtk_label_new("X");
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_table_attach(table, label, 0, 1, row, row+1, GTK_FILL, 0, 0, 0);
+ gtk_table_attach(table, label, 0, 1, row, row+1,
+ GTK_EXPAND | GTK_FILL, 0, 0, 0);
tool->xpx = gtk_label_new("123456 px");
gtk_widget_size_request(tool->xpx, &req);
@@ -270,7 +273,8 @@ gwy_tool_read_value_init_dialog(GwyToolReadValue *tool)
label = gtk_label_new("Y");
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_table_attach(table, label, 0, 1, row, row+1, GTK_FILL, 0, 0, 0);
+ gtk_table_attach(table, label, 0, 1, row, row+1,
+ GTK_EXPAND | GTK_FILL, 0, 0, 0);
tool->ypx = gtk_label_new(NULL);
gtk_widget_set_size_request(tool->xpx, req.width, -1);
@@ -284,22 +288,21 @@ gwy_tool_read_value_init_dialog(GwyToolReadValue *tool)
row++;
gtk_table_attach(table, gwy_label_new_header(_("Value")),
- 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
row++;
label = gtk_label_new("Z");
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_table_attach(table, label, 0, 1, row, row+1, GTK_FILL, 0, 0, 0);
+ gtk_table_attach(table, label, 0, 1, row, row+1,
+ GTK_EXPAND | GTK_FILL, 0, 0, 0);
tool->z = gtk_label_new(NULL);
gtk_misc_set_alignment(GTK_MISC(tool->z), 1.0, 0.5);
- gtk_table_attach(table, tool->z,
- 2, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ gtk_table_attach(table, tool->z, 2, 3, row, row+1, GTK_FILL, 0, 0, 0);
row++;
align = gtk_alignment_new(1.0, 0.5, 0.0, 0.0);
- gtk_table_attach(table, align,
- 1, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ gtk_table_attach(table, align, 1, 3, row, row+1, GTK_FILL, 0, 0, 0);
tool->set_zero = gtk_button_new_with_mnemonic(_("Set _Zero"));
gtk_container_add(GTK_CONTAINER(align), tool->set_zero);
@@ -313,55 +316,55 @@ gwy_tool_read_value_init_dialog(GwyToolReadValue *tool)
row++;
gtk_table_attach(table, gwy_label_new_header(_("Facet")),
- 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
row++;
label = gtk_label_new(_("Inclination θ"));
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_table_attach(table, label, 0, 1, row, row+1, GTK_FILL, 0, 0, 0);
+ gtk_table_attach(table, label, 0, 1, row, row+1,
+ GTK_EXPAND | GTK_FILL, 0, 0, 0);
tool->theta = gtk_label_new(NULL);
gtk_misc_set_alignment(GTK_MISC(tool->theta), 1.0, 0.5);
- gtk_table_attach(table, tool->theta,
- 2, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ gtk_table_attach(table, tool->theta, 2, 3, row, row+1, GTK_FILL, 0, 0, 0);
row++;
label = gtk_label_new(_("Inclination φ"));
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_table_attach(table, label, 0, 1, row, row+1, GTK_FILL, 0, 0, 0);
+ gtk_table_attach(table, label, 0, 1, row, row+1,
+ GTK_EXPAND | GTK_FILL, 0, 0, 0);
tool->phi = gtk_label_new(NULL);
gtk_misc_set_alignment(GTK_MISC(tool->phi), 1.0, 0.5);
- gtk_table_attach(table, tool->phi,
- 2, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ gtk_table_attach(table, tool->phi, 2, 3, row, row+1, GTK_FILL, 0, 0, 0);
gtk_table_set_row_spacing(table, row, 8);
row++;
gtk_table_attach(table, gwy_label_new_header(_("Curvatures")),
- 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
row++;
label = gtk_label_new(_("Curvature 1"));
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_table_attach(table, label, 0, 1, row, row+1, GTK_FILL, 0, 0, 0);
+ gtk_table_attach(table, label, 0, 1, row, row+1,
+ GTK_EXPAND | GTK_FILL, 0, 0, 0);
tool->curv1 = gtk_label_new(NULL);
gtk_misc_set_alignment(GTK_MISC(tool->curv1), 1.0, 0.5);
- gtk_table_attach(table, tool->curv1,
- 2, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ gtk_table_attach(table, tool->curv1, 2, 3, row, row+1, GTK_FILL, 0, 0, 0);
row++;
label = gtk_label_new(_("Curvature 2"));
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_table_attach(table, label, 0, 1, row, row+1, GTK_FILL, 0, 0, 0);
+ gtk_table_attach(table, label, 0, 1, row, row+1,
+ GTK_EXPAND | GTK_FILL, 0, 0, 0);
tool->curv2 = gtk_label_new(NULL);
gtk_misc_set_alignment(GTK_MISC(tool->curv2), 1.0, 0.5);
- gtk_table_attach(table, tool->curv2,
- 2, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ gtk_table_attach(table, tool->curv2, 2, 3, row, row+1, GTK_FILL, 0, 0, 0);
row++;
- table = GTK_TABLE(gtk_table_new(2, 4, FALSE));
+ table = GTK_TABLE(gtk_table_new(2, 3, FALSE));
gtk_table_set_col_spacings(table, 6);
gtk_table_set_row_spacings(table, 2);
gtk_container_set_border_width(GTK_CONTAINER(table), 4);
@@ -371,8 +374,9 @@ gwy_tool_read_value_init_dialog(GwyToolReadValue *tool)
tool->radius = gtk_adjustment_new(tool->args.radius,
1, RADIUS_MAX, 1, 5, 0);
- gwy_table_attach_spinbutton(GTK_WIDGET(table), row,
- _("_Averaging radius:"), "px", tool->radius);
+ gwy_table_attach_adjbar(GTK_WIDGET(table), row,
+ _("_Averaging radius:"), _("px"),
+ tool->radius, GWY_HSCALE_LINEAR | GWY_HSCALE_SNAP);
g_signal_connect_swapped(tool->radius, "value-changed",
G_CALLBACK(gwy_tool_read_value_radius_changed),
tool);
@@ -383,7 +387,7 @@ gwy_tool_read_value_init_dialog(GwyToolReadValue *tool)
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(tool->show_selection),
tool->args.show_selection);
gtk_table_attach(GTK_TABLE(table), tool->show_selection,
- 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect(tool->show_selection, "toggled",
G_CALLBACK(gwy_tool_read_value_show_selection_changed),
tool);
@@ -400,15 +404,14 @@ static void
gwy_tool_read_value_data_switched(GwyTool *gwytool,
GwyDataView *data_view)
{
- GwyPlainTool *plain_tool;
+ GwyPlainTool *plain_tool = GWY_PLAIN_TOOL(gwytool);
+ GwyContainer *container;
GwyToolReadValue *tool;
gboolean ignore;
gchar xukey[24];
gchar yukey[24];
gchar zukey[24];
-
- plain_tool = GWY_PLAIN_TOOL(gwytool);
ignore = (data_view == plain_tool->data_view);
GWY_TOOL_CLASS(gwy_tool_read_value_parent_class)->data_switched(gwytool,
@@ -419,6 +422,7 @@ gwy_tool_read_value_data_switched(GwyTool *gwytool,
tool = GWY_TOOL_READ_VALUE(gwytool);
if (data_view) {
+ container = plain_tool->container;
gwy_object_set_or_reset(plain_tool->layer,
tool->layer_type_point,
"draw-marker", tool->args.show_selection,
@@ -429,19 +433,15 @@ gwy_tool_read_value_data_switched(GwyTool *gwytool,
gwy_selection_set_max_objects(plain_tool->selection, 1);
gwy_tool_read_value_update_units(tool);
-
g_snprintf(xukey, sizeof(xukey), "/%d/data/cal_xunc", plain_tool->id);
g_snprintf(yukey, sizeof(yukey), "/%d/data/cal_yunc", plain_tool->id);
g_snprintf(zukey, sizeof(zukey), "/%d/data/cal_zunc", plain_tool->id);
- if (gwy_container_gis_object_by_name(plain_tool->container, xukey, &(tool->xunc))
- && gwy_container_gis_object_by_name(plain_tool->container, yukey, &(tool->yunc))
- && gwy_container_gis_object_by_name(plain_tool->container, zukey, &(tool->zunc)))
- {
+ tool->has_calibration = FALSE;
+ if (gwy_container_gis_object_by_name(container, xukey, &tool->xunc)
+ && gwy_container_gis_object_by_name(container, yukey, &tool->yunc)
+ && gwy_container_gis_object_by_name(container, zukey, &tool->zunc))
tool->has_calibration = TRUE;
- } else {
- tool->has_calibration = FALSE;
- }
}
}
@@ -461,24 +461,23 @@ gwy_tool_read_value_update_units(GwyToolReadValue *tool)
static void
gwy_tool_read_value_data_changed(GwyPlainTool *plain_tool)
{
+ GwyToolReadValue *tool = GWY_TOOL_READ_VALUE(plain_tool);
+ GwyContainer *container = plain_tool->container;
gchar xukey[24];
gchar yukey[24];
gchar zukey[24];
+ tool->has_calibration = FALSE;
g_snprintf(xukey, sizeof(xukey), "/%d/data/cal_xunc", plain_tool->id);
g_snprintf(yukey, sizeof(yukey), "/%d/data/cal_yunc", plain_tool->id);
g_snprintf(zukey, sizeof(zukey), "/%d/data/cal_zunc", plain_tool->id);
- if (gwy_container_gis_object_by_name(plain_tool->container, xukey, &(GWY_TOOL_READ_VALUE(plain_tool)->xunc))
- && gwy_container_gis_object_by_name(plain_tool->container, yukey, &(GWY_TOOL_READ_VALUE(plain_tool)->yunc))
- && gwy_container_gis_object_by_name(plain_tool->container, zukey, &(GWY_TOOL_READ_VALUE(plain_tool)->zunc)))
- {
- GWY_TOOL_READ_VALUE(plain_tool)->has_calibration = TRUE;
- } else {
- GWY_TOOL_READ_VALUE(plain_tool)->has_calibration = FALSE;
- }
+ if (gwy_container_gis_object_by_name(container, xukey, &tool->xunc)
+ && gwy_container_gis_object_by_name(container, yukey, &tool->yunc)
+ && gwy_container_gis_object_by_name(container, zukey, &tool->zunc))
+ tool->has_calibration = TRUE;
- gwy_tool_read_value_update_values(GWY_TOOL_READ_VALUE(plain_tool));
+ gwy_tool_read_value_update_values(tool);
}
static void
@@ -503,10 +502,11 @@ gwy_tool_read_value_radius_changed(GwyToolReadValue *tool)
tool->args.radius = gwy_adjustment_get_int(tool->radius);
plain_tool = GWY_PLAIN_TOOL(tool);
- if (plain_tool->layer)
+ if (plain_tool->layer) {
g_object_set(plain_tool->layer,
"marker-radius", tool->args.radius,
NULL);
+ }
if (plain_tool->selection)
gwy_tool_read_value_update_values(tool);
}
diff --git a/modules/tools/roughness.c b/modules/tools/roughness.c
index 5e3a2b0..5f8e8eb 100644
--- a/modules/tools/roughness.c
+++ b/modules/tools/roughness.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: roughness.c 19071 2016-10-14 09:02:41Z yeti-dn $
+ * @(#) $Id: roughness.c 20256 2017-08-11 17:27:25Z yeti-dn $
* Copyright (C) 2006-2008 Martin Hason, David Necas (Yeti), Petr Klapetek.
* E-mail: hasonm at physics.muni.cz, yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -186,9 +186,10 @@ struct _GwyToolRoughness {
GtkObject *thickness;
GtkObject *cutoff;
+ GtkWidget *cutoff_value;
+ GtkWidget *cutoff_units;
GtkWidget *interpolation;
GtkWidget *target_graph;
- GtkWidget *target_hbox;
GtkBox *aux_box;
GtkWidget *message_label;
@@ -614,7 +615,7 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Calculate surface profile parameters."),
"Martin Hasoň <hasonm at physics.muni.cz>, Yeti <yeti at gwyddion.net>",
- "1.13",
+ "1.15",
"Martin Hasoň & David Nečas (Yeti)",
"2006",
};
@@ -624,7 +625,7 @@ static const gchar cutoff_key[] = "/module/roughness/cutoff";
static const gchar thickness_key[] = "/module/roughness/thickness";
static const gchar expanded_key[] = "/module/roughness/expanded";
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, roughness)
G_DEFINE_TYPE(GwyToolRoughness, gwy_tool_roughness, GWY_TYPE_PLAIN_TOOL)
@@ -778,8 +779,8 @@ gwy_tool_roughness_init_dialog(GwyToolRoughness *tool)
GtkDialog *dialog;
GtkSizeGroup *sizegroup;
- GtkWidget *dialog_vbox, *hbox, *vbox_left, *vbox_right, *table, *hbox2;
- GtkWidget *scwin, *treeview, *spin, *label;
+ GtkWidget *dialog_vbox, *hbox, *vbox_left, *vbox_right, *table;
+ GtkWidget *scwin, *treeview, *spin;
GwyAxis *axis;
gint row;
@@ -824,7 +825,7 @@ gwy_tool_roughness_init_dialog(GwyToolRoughness *tool)
g_signal_connect_swapped(tool->copy, "clicked",
G_CALLBACK(gwy_tool_roughness_copy), tool);
- table = gtk_table_new(5, 4, FALSE);
+ table = gtk_table_new(6, 3, FALSE);
gtk_table_set_col_spacings(GTK_TABLE(table), 6);
gtk_table_set_row_spacings(GTK_TABLE(table), 2);
gtk_container_set_border_width(GTK_CONTAINER(table), 4);
@@ -835,24 +836,38 @@ gwy_tool_roughness_init_dialog(GwyToolRoughness *tool)
= gwy_enum_combo_box_new(graph_types, G_N_ELEMENTS(graph_types),
G_CALLBACK(gwy_tool_roughness_graph_changed),
tool, tool->graph_type, TRUE);
- gwy_table_attach_hscale(table, row, _("_Graph:"), NULL,
- GTK_OBJECT(tool->graph_out), GWY_HSCALE_WIDGET);
+ gwy_table_attach_adjbar(table, row, _("_Graph:"), NULL,
+ GTK_OBJECT(tool->graph_out),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
row++;
/* cut-off */
tool->cutoff = gtk_adjustment_new(tool->args.cutoff,
0.0, 0.3, 0.001, 0.1, 0);
- spin = gwy_table_attach_hscale(table, row, _("C_ut-off:"), NULL,
+ spin = gwy_table_attach_adjbar(table, row, _("C_ut-off:"), NULL,
tool->cutoff, GWY_HSCALE_DEFAULT);
gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 4);
g_signal_connect(tool->cutoff, "value-changed",
G_CALLBACK(gwy_tool_roughness_cutoff_changed), tool);
row++;
+ tool->cutoff_value = gtk_label_new(NULL);
+ gtk_misc_set_alignment(GTK_MISC(tool->cutoff_value), 1.0, 0.5);
+ gtk_table_attach(GTK_TABLE(table), tool->cutoff_value,
+ 1, 2, row, row+1, GTK_FILL, 0, 0, 0);
+
+ tool->cutoff_units = gtk_label_new(NULL);
+ gtk_misc_set_alignment(GTK_MISC(tool->cutoff_units), 0.0, 0.5);
+ gtk_table_attach(GTK_TABLE(table), tool->cutoff_units,
+ 2, 3, row, row+1, GTK_FILL, 0, 0, 0);
+ row++;
+
+ gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
tool->thickness = gtk_adjustment_new(tool->args.thickness,
1, 128, 1, 10, 0);
- gwy_table_attach_hscale(table, row, _("_Thickness:"), "px",
- tool->thickness, GWY_HSCALE_DEFAULT);
+ gwy_table_attach_adjbar(table, row, _("_Thickness:"), _("px"),
+ tool->thickness,
+ GWY_HSCALE_DEFAULT | GWY_HSCALE_SNAP);
g_signal_connect(tool->thickness, "value-changed",
G_CALLBACK(gwy_tool_roughness_thickness_changed), tool);
row++;
@@ -861,26 +876,20 @@ gwy_tool_roughness_init_dialog(GwyToolRoughness *tool)
(gwy_interpolation_type_get_enum(), -1,
G_CALLBACK(gwy_tool_roughness_interpolation_changed),
tool, tool->args.interpolation, TRUE);
- gwy_table_attach_hscale(table, row, _("_Interpolation type:"), NULL,
- GTK_OBJECT(tool->interpolation), GWY_HSCALE_WIDGET);
+ gwy_table_attach_adjbar(table, row, _("_Interpolation type:"), NULL,
+ GTK_OBJECT(tool->interpolation),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
row++;
- tool->target_hbox = hbox2 = gtk_hbox_new(FALSE, 6);
- gtk_table_attach(GTK_TABLE(table), hbox2,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
-
- label = gtk_label_new_with_mnemonic(_("Target _graph:"));
- gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_box_pack_start(GTK_BOX(hbox2), label, FALSE, FALSE, 0);
-
tool->target_graph = gwy_data_chooser_new_graphs();
gwy_data_chooser_set_none(GWY_DATA_CHOOSER(tool->target_graph),
_("New graph"));
gwy_data_chooser_set_active(GWY_DATA_CHOOSER(tool->target_graph), NULL, -1);
gwy_data_chooser_set_filter(GWY_DATA_CHOOSER(tool->target_graph),
filter_target_graphs, tool, NULL);
- gtk_label_set_mnemonic_widget(GTK_LABEL(label), tool->target_graph);
- gtk_box_pack_end(GTK_BOX(hbox2), tool->target_graph, FALSE, FALSE, 0);
+ gwy_table_attach_adjbar(table, row, _("Target _graph:"), NULL,
+ GTK_OBJECT(tool->target_graph),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
g_signal_connect_swapped(tool->target_graph, "changed",
G_CALLBACK(gwy_tool_roughness_target_changed),
tool);
@@ -1154,6 +1163,12 @@ gwy_tool_roughness_data_switched(GwyTool *gwytool,
NULL);
gwy_selection_set_max_objects(plain_tool->selection, 1);
gwy_tool_roughness_update_units(tool);
+ gtk_label_set_markup(GTK_LABEL(tool->cutoff_units),
+ plain_tool->coord_format->units);
+ }
+ else {
+ gtk_label_set_markup(GTK_LABEL(tool->cutoff_value), NULL);
+ gtk_label_set_markup(GTK_LABEL(tool->cutoff_units), NULL);
}
gwy_tool_roughness_update(tool);
@@ -1183,7 +1198,9 @@ gwy_tool_roughness_selection_changed(GwyPlainTool *plain_tool,
if (plain_tool->selection) {
n = gwy_selection_get_data(plain_tool->selection, NULL);
- g_return_if_fail(n == 0 || n == 1);
+ /* We can get here before set-max-objects takes effect. */
+ if (!(n == 0 || n == 1))
+ return;
}
gwy_tool_roughness_update(tool);
@@ -1312,16 +1329,21 @@ gwy_tool_roughness_update(GwyToolRoughness *tool)
gdouble line[4];
gint xl1, yl1, xl2, yl2;
gint n, lineres;
+ gdouble dx;
+ gchar buf[24];
plain_tool = GWY_PLAIN_TOOL(tool);
if (!plain_tool->selection
|| !(n = gwy_selection_get_data(plain_tool->selection, NULL))) {
tool->have_data = FALSE;
gwy_tool_roughness_update_graphs(tool);
- gtk_tree_model_foreach(GTK_TREE_MODEL(tool->store),
- emit_row_changed, NULL);
+ if (tool->store) {
+ gtk_tree_model_foreach(GTK_TREE_MODEL(tool->store),
+ emit_row_changed, NULL);
+ }
gtk_label_set_text(GTK_LABEL(tool->message_label),
_("No profile selected."));
+ gtk_label_set_text(GTK_LABEL(tool->cutoff_value), NULL);
return;
}
@@ -1346,6 +1368,11 @@ gwy_tool_roughness_update(GwyToolRoughness *tool)
lineres,
tool->args.thickness,
tool->args.interpolation);
+ dx = gwy_data_line_get_real(tool->dataline)/gwy_data_line_get_res(tool->dataline);
+ g_snprintf(buf, sizeof(buf), "%.*f",
+ plain_tool->coord_format->precision+1,
+ 2*dx/tool->args.cutoff/plain_tool->coord_format->magnitude);
+ gtk_label_set_text(GTK_LABEL(tool->cutoff_value), buf);
gwy_tool_roughness_set_data_from_profile(&tool->profiles,
tool->dataline,
diff --git a/modules/tools/selectionmanager.c b/modules/tools/selectionmanager.c
index 251fbf4..17c3c66 100644
--- a/modules/tools/selectionmanager.c
+++ b/modules/tools/selectionmanager.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: selectionmanager.c 19039 2016-10-08 10:54:58Z yeti-dn $
+ * @(#) $Id: selectionmanager.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2009,2012 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -149,7 +149,7 @@ static const ToolArgs default_args = {
FALSE,
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, selectionmanager)
G_DEFINE_TYPE(GwyToolSelectionManager, gwy_tool_selection_manager, GWY_TYPE_PLAIN_TOOL)
diff --git a/modules/tools/sfunctions.c b/modules/tools/sfunctions.c
index 3303b6a..e74e1bb 100644
--- a/modules/tools/sfunctions.c
+++ b/modules/tools/sfunctions.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: sfunctions.c 19095 2016-10-17 09:26:16Z yeti-dn $
+ * @(#) $Id: sfunctions.c 20099 2017-07-29 03:58:05Z yeti-dn $
* Copyright (C) 2003-2016 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -55,6 +55,8 @@ typedef enum {
GWY_SF_RPSDF = 10,
GWY_SF_RACF = 11,
GWY_SF_RANGE = 12,
+ GWY_SF_ASG = 13,
+ GWY_SF_NFUNCTIONS
} GwySFOutputType;
enum {
@@ -87,6 +89,9 @@ struct _GwyToolSFunctions {
GwyDataLine *line;
+ GwyDataField *cached_flipped_field;
+ GwyDataField *cached_fp_mask; /* Always INCLUDE, possibly flipped. */
+
GtkWidget *graph;
GwyGraphModel *gmodel;
@@ -97,14 +102,12 @@ struct _GwyToolSFunctions {
GtkObject *resolution;
GtkWidget *fixres;
GtkWidget *interpolation;
- GtkWidget *interpolation_label;
GtkWidget *update;
GtkWidget *apply;
GtkWidget *separate;
GSList *masking;
GtkWidget *masking_label;
GtkWidget *target_graph;
- GtkWidget *target_hbox;
gboolean has_calibration;
gboolean has_uline;
@@ -172,8 +175,10 @@ static void gwy_data_field_area_range (GwyDataField *dfield,
gint lineres);
static void update_unc_fields (GwyPlainTool *plain_tool);
static gboolean sfunction_supports_masking (GwySFOutputType type);
-static gboolean sfunction_has_explicit_resampling (GwySFOutputType type);
+static gboolean sfunction_has_native_sampling (GwySFOutputType type);
+static gboolean sfunction_has_interpolation (GwySFOutputType type);
static gboolean sfunction_has_direction (GwySFOutputType type);
+static gboolean sfunction_is_only_row_wise (GwySFOutputType type);
static GwyModuleInfo module_info = {
GWY_MODULE_ABI_VERSION,
@@ -182,7 +187,7 @@ static GwyModuleInfo module_info = {
"functions (height distribution, correlations, PSDF, Minkowski "
"functionals) of selected part of data."),
"Petr Klapetek <klapetek at gwyddion.net>",
- "2.15",
+ "2.18",
"David Nečas (Yeti) & Petr Klapetek",
"2004",
};
@@ -224,9 +229,10 @@ static const GwyEnum sf_types[] = {
{ N_("Minkowski boundary"), GWY_SF_MINKOWSKI_BOUNDARY, },
{ N_("Minkowski connectivity"), GWY_SF_MINKOWSKI_CONNECTIVITY, },
{ N_("Range"), GWY_SF_RANGE, },
+ { N_("Area scale graph"), GWY_SF_ASG, },
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, sfunctions)
G_DEFINE_TYPE(GwyToolSFunctions, gwy_tool_sfunctions, GWY_TYPE_PLAIN_TOOL)
@@ -294,6 +300,8 @@ gwy_tool_sfunctions_finalize(GObject *object)
GWY_OBJECT_UNREF(tool->xunc);
GWY_OBJECT_UNREF(tool->yunc);
GWY_OBJECT_UNREF(tool->zunc);
+ GWY_OBJECT_UNREF(tool->cached_flipped_field);
+ GWY_OBJECT_UNREF(tool->cached_fp_mask);
G_OBJECT_CLASS(gwy_tool_sfunctions_parent_class)->finalize(object);
}
@@ -319,6 +327,8 @@ gwy_tool_sfunctions_init(GwyToolSFunctions *tool)
&tool->args.masking);
gwy_container_gis_enum_by_name(settings, output_type_key,
&tool->args.output_type);
+ tool->args.output_type = CLAMP(tool->args.output_type,
+ 0, GWY_SF_NFUNCTIONS);
gwy_container_gis_boolean_by_name(settings, options_visible_key,
&tool->args.options_visible);
gwy_container_gis_boolean_by_name(settings, instant_update_key,
@@ -419,7 +429,7 @@ gwy_tool_sfunctions_init_dialog(GwyToolSFunctions *tool)
G_CALLBACK(gwy_tool_sfunctions_options_expanded), tool);
gtk_box_pack_start(GTK_BOX(vbox), tool->options, FALSE, FALSE, 0);
- table = GTK_TABLE(gtk_table_new(10, 4, FALSE));
+ table = GTK_TABLE(gtk_table_new(10, 3, FALSE));
gtk_table_set_col_spacings(table, 6);
gtk_table_set_row_spacings(table, 2);
gtk_container_set_border_width(GTK_CONTAINER(table), 4);
@@ -429,7 +439,7 @@ gwy_tool_sfunctions_init_dialog(GwyToolSFunctions *tool)
tool->instant_update
= gtk_check_button_new_with_mnemonic(_("_Instant updates"));
gtk_table_attach(table, tool->instant_update,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(tool->instant_update),
tool->args.instant_update);
g_signal_connect(tool->instant_update, "toggled",
@@ -440,7 +450,8 @@ gwy_tool_sfunctions_init_dialog(GwyToolSFunctions *tool)
tool->resolution = gtk_adjustment_new(tool->args.resolution,
MIN_RESOLUTION, MAX_RESOLUTION,
1, 10, 0);
- gwy_table_attach_hscale(GTK_WIDGET(table), row, _("_Fix res.:"), NULL,
+ gwy_table_attach_adjbar(GTK_WIDGET(table), row,
+ _("_Fixed resolution:"), NULL,
tool->resolution,
GWY_HSCALE_CHECK | GWY_HSCALE_SQRT);
g_signal_connect_swapped(tool->resolution, "value-changed",
@@ -458,43 +469,29 @@ gwy_tool_sfunctions_init_dialog(GwyToolSFunctions *tool)
(directions, G_N_ELEMENTS(directions),
G_CALLBACK(gwy_tool_sfunctions_direction_changed), tool,
tool->args.direction);
- row = gwy_radio_buttons_attach_to_table(tool->direction, table, 3, row);
+ row = gwy_radio_buttons_attach_to_table(tool->direction, table, 2, row);
gtk_table_set_row_spacing(table, row-1, 8);
- hbox2 = gtk_hbox_new(FALSE, 4);
- gtk_table_attach(table, hbox2,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
-
- label = gtk_label_new_with_mnemonic(_("_Interpolation type:"));
- gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_box_pack_start(GTK_BOX(hbox2), label, FALSE, FALSE, 0);
- tool->interpolation_label = label;
-
tool->interpolation = gwy_enum_combo_box_new
(gwy_interpolation_type_get_enum(), -1,
G_CALLBACK(gwy_tool_sfunctions_interpolation_changed),
tool,
tool->args.interpolation, TRUE);
- gtk_label_set_mnemonic_widget(GTK_LABEL(label), tool->interpolation);
- gtk_box_pack_end(GTK_BOX(hbox2), tool->interpolation, FALSE, FALSE, 0);
+ gwy_table_attach_adjbar(GTK_WIDGET(table), row,
+ _("_Interpolation type:"), NULL,
+ GTK_OBJECT(tool->interpolation),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
row++;
- tool->target_hbox = hbox2 = gtk_hbox_new(FALSE, 6);
- gtk_table_attach(table, hbox2,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
-
- label = gtk_label_new_with_mnemonic(_("Target _graph:"));
- gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_box_pack_start(GTK_BOX(hbox2), label, FALSE, FALSE, 0);
-
tool->target_graph = gwy_data_chooser_new_graphs();
gwy_data_chooser_set_none(GWY_DATA_CHOOSER(tool->target_graph),
_("New graph"));
gwy_data_chooser_set_active(GWY_DATA_CHOOSER(tool->target_graph), NULL, -1);
gwy_data_chooser_set_filter(GWY_DATA_CHOOSER(tool->target_graph),
filter_target_graphs, tool, NULL);
- gtk_label_set_mnemonic_widget(GTK_LABEL(label), tool->target_graph);
- gtk_box_pack_end(GTK_BOX(hbox2), tool->target_graph, FALSE, FALSE, 0);
+ gwy_table_attach_adjbar(GTK_WIDGET(table), row, _("Target _graph:"), NULL,
+ GTK_OBJECT(tool->target_graph),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
g_signal_connect_swapped(tool->target_graph, "changed",
G_CALLBACK(gwy_tool_sfunctions_target_changed),
tool);
@@ -507,7 +504,7 @@ gwy_tool_sfunctions_init_dialog(GwyToolSFunctions *tool)
g_signal_connect(tool->separate, "toggled",
G_CALLBACK(gwy_tool_sfunctions_separate_changed), tool);
gtk_table_attach(table, tool->separate,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
@@ -515,7 +512,7 @@ gwy_tool_sfunctions_init_dialog(GwyToolSFunctions *tool)
gtk_table_set_row_spacing(table, row-1, 8);
label = tool->masking_label = gwy_label_new_header(_("Masking Mode"));
gtk_table_attach(table, label,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
tool->masking
@@ -523,7 +520,7 @@ gwy_tool_sfunctions_init_dialog(GwyToolSFunctions *tool)
G_CALLBACK(gwy_tool_sfunctions_masking_changed),
tool,
tool->args.masking);
- row = gwy_radio_buttons_attach_to_table(tool->masking, table, 3, row);
+ row = gwy_radio_buttons_attach_to_table(tool->masking, table, 2, row);
tool->gmodel = gwy_graph_model_new();
@@ -565,6 +562,9 @@ gwy_tool_sfunctions_data_switched(GwyTool *gwytool,
return;
tool = GWY_TOOL_SFUNCTIONS(gwytool);
+ GWY_OBJECT_UNREF(tool->cached_flipped_field);
+ GWY_OBJECT_UNREF(tool->cached_fp_mask);
+
if (data_view) {
gwy_object_set_or_reset(plain_tool->layer,
tool->layer_type_rect,
@@ -595,9 +595,12 @@ gwy_tool_sfunctions_response(GwyTool *tool,
static void
gwy_tool_sfunctions_data_changed(GwyPlainTool *plain_tool)
{
+ GwyToolSFunctions *tool = GWY_TOOL_SFUNCTIONS(plain_tool);
+
+ GWY_OBJECT_UNREF(tool->cached_flipped_field);
update_unc_fields(plain_tool);
- gwy_tool_sfunctions_update_curve(GWY_TOOL_SFUNCTIONS(plain_tool));
- gwy_tool_sfunctions_update_target_graphs(GWY_TOOL_SFUNCTIONS(plain_tool));
+ gwy_tool_sfunctions_update_curve(tool);
+ gwy_tool_sfunctions_update_target_graphs(tool);
}
static void
@@ -605,6 +608,7 @@ gwy_tool_sfunctions_mask_changed(GwyPlainTool *plain_tool)
{
GwyToolSFunctions *tool = GWY_TOOL_SFUNCTIONS(plain_tool);
+ GWY_OBJECT_UNREF(tool->cached_fp_mask);
if (sfunction_supports_masking(tool->args.output_type))
gwy_tool_sfunctions_update_curve(tool);
}
@@ -637,22 +641,23 @@ gwy_tool_sfunctions_selection_changed(GwyPlainTool *plain_tool,
static void
gwy_tool_sfunctions_update_sensitivity(GwyToolSFunctions *tool)
{
+ ToolArgs *args = &tool->args;
gboolean sensitive;
GSList *l;
- gtk_widget_set_sensitive(tool->update, !tool->args.instant_update);
- gwy_table_hscale_set_sensitive(tool->resolution, tool->args.fixres);
+ gtk_widget_set_sensitive(tool->update, !args->instant_update);
+ sensitive = !sfunction_has_native_sampling(args->output_type);
+ gwy_table_hscale_set_sensitive(tool->resolution, sensitive);
- sensitive = (sfunction_has_explicit_resampling(tool->args.output_type)
- && tool->args.fixres);
- gtk_widget_set_sensitive(tool->interpolation, sensitive);
- gtk_widget_set_sensitive(tool->interpolation_label, sensitive);
+ sensitive = (sfunction_has_interpolation(args->output_type)
+ && args->fixres);
+ gwy_table_hscale_set_sensitive(GTK_OBJECT(tool->interpolation), sensitive);
- sensitive = sfunction_has_direction(tool->args.output_type);
+ sensitive = sfunction_has_direction(args->output_type);
for (l = tool->direction; l; l = g_slist_next(l))
gtk_widget_set_sensitive(GTK_WIDGET(l->data), sensitive);
- sensitive = sfunction_supports_masking(tool->args.output_type);
+ sensitive = sfunction_supports_masking(args->output_type);
gtk_widget_set_sensitive(tool->masking_label, sensitive);
for (l = tool->masking; l; l = g_slist_next(l))
gtk_widget_set_sensitive(GTK_WIDGET(l->data), sensitive);
@@ -662,7 +667,7 @@ static void
gwy_tool_sfunctions_update_curve(GwyToolSFunctions *tool)
{
GwyPlainTool *plain_tool;
- GwyDataField *dfield, *mask, *tmp_mask = NULL;
+ GwyDataField *dfield, *mask, *mask_to_use = NULL, *field_to_use;
GwyOrientation dir = tool->args.direction;
GwyInterpolationType interp = tool->args.interpolation;
GwyGraphModel *gmodel = tool->gmodel;
@@ -671,6 +676,7 @@ gwy_tool_sfunctions_update_curve(GwyToolSFunctions *tool)
gint isel[4] = { sizeof("Die, die, GCC!"), 0, 0, 0 };
gint n, nsel, lineres, w = sizeof("Die, die, GCC!"), h = 0;
const gchar *title, *xlabel, *ylabel;
+ gboolean xy_is_flipped;
plain_tool = GWY_PLAIN_TOOL(tool);
dfield = plain_tool->data_field;
@@ -712,24 +718,51 @@ gwy_tool_sfunctions_update_curve(GwyToolSFunctions *tool)
tool->has_uline = FALSE;
lineres = tool->args.fixres ? tool->args.resolution : -1;
- if (sfunction_supports_masking(tool->args.output_type) && mask) {
- if (tool->args.masking == GWY_MASK_EXCLUDE) {
- tmp_mask = gwy_data_field_duplicate(mask);
- gwy_data_field_grains_invert(tmp_mask);
+
+ /* Create transformed/inverted mask as necesary and remember it. Keep
+ * mask_to_use as NULL if we do not want masking. */
+ if (sfunction_supports_masking(tool->args.output_type)
+ && tool->args.masking != GWY_MASK_IGNORE
+ && mask) {
+ if (!tool->cached_fp_mask) {
+ if (sfunction_is_only_row_wise(tool->args.output_type)
+ && tool->args.direction == GWY_ORIENTATION_VERTICAL) {
+ tool->cached_fp_mask = gwy_data_field_new_alike(mask, FALSE);
+ gwy_data_field_flip_xy(mask, tool->cached_fp_mask, FALSE);
+ }
+ else
+ tool->cached_fp_mask = gwy_data_field_duplicate(mask);
+
+ if (tool->args.masking == GWY_MASK_EXCLUDE)
+ gwy_data_field_grains_invert(tool->cached_fp_mask);
+ }
+ mask_to_use = tool->cached_fp_mask;
+ }
+
+ field_to_use = dfield;
+ xy_is_flipped = FALSE;
+ if (sfunction_is_only_row_wise(tool->args.output_type)
+ && tool->args.direction == GWY_ORIENTATION_VERTICAL) {
+ if (!tool->cached_flipped_field) {
+ tool->cached_flipped_field = gwy_data_field_new_alike(dfield,
+ FALSE);
+ gwy_data_field_flip_xy(dfield, tool->cached_flipped_field, FALSE);
}
- else if (tool->args.masking == GWY_MASK_INCLUDE)
- tmp_mask = g_object_ref(mask);
- /* Otherwise keep tmp_mask as NULL. */
+ field_to_use = tool->cached_flipped_field;
+ xy_is_flipped = TRUE;
+ GWY_SWAP(gint, isel[0], isel[1]);
+ GWY_SWAP(gint, w, h);
}
switch (tool->args.output_type) {
case GWY_SF_DH:
- gwy_data_field_area_dh(dfield, tmp_mask, tool->line,
+ gwy_data_field_area_dh(field_to_use, mask_to_use, tool->line,
isel[0], isel[1], w, h, lineres);
xlabel = "z";
ylabel = "ρ";
if (tool->has_calibration) {
- gwy_data_field_area_dh_uncertainty(dfield, tool->zunc, tmp_mask,
+ gwy_data_field_area_dh_uncertainty(field_to_use, tool->zunc,
+ mask_to_use,
tool->uline,
isel[0], isel[1], w, h,
lineres);
@@ -738,12 +771,13 @@ gwy_tool_sfunctions_update_curve(GwyToolSFunctions *tool)
break;
case GWY_SF_CDH:
- gwy_data_field_area_cdh(dfield, tmp_mask, tool->line,
+ gwy_data_field_area_cdh(field_to_use, mask_to_use, tool->line,
isel[0], isel[1], w, h, lineres);
xlabel = "z";
ylabel = "D";
if (tool->has_calibration) {
- gwy_data_field_area_cdh_uncertainty(dfield, tool->zunc, tmp_mask,
+ gwy_data_field_area_cdh_uncertainty(field_to_use,
+ tool->zunc, mask_to_use,
tool->uline,
isel[0], isel[1], w, h,
lineres);
@@ -752,26 +786,30 @@ gwy_tool_sfunctions_update_curve(GwyToolSFunctions *tool)
break;
case GWY_SF_DA:
- gwy_data_field_area_da(dfield, tool->line, isel[0], isel[1], w, h,
- dir, lineres);
+ gwy_data_field_area_da_mask(field_to_use, mask_to_use, tool->line,
+ isel[0], isel[1], w, h, dir, lineres);
xlabel = "tan β";
ylabel = "ρ";
break;
case GWY_SF_CDA:
- gwy_data_field_area_cda(dfield, tool->line, isel[0], isel[1], w, h,
- dir, lineres);
+ gwy_data_field_area_cda_mask(field_to_use, mask_to_use, tool->line,
+ isel[0], isel[1], w, h, dir, lineres);
xlabel = "tan β";
ylabel = "D";
break;
case GWY_SF_ACF:
- gwy_data_field_area_acf(dfield, tool->line, isel[0], isel[1], w, h,
- dir, interp, lineres);
+ g_object_unref(tool->line);
+ tool->line = gwy_data_field_area_row_acf(field_to_use,
+ mask_to_use, GWY_MASK_INCLUDE,
+ isel[0], isel[1], w, h, 1,
+ NULL);
xlabel = "τ";
ylabel = "G";
- if (tool->has_calibration) {
- gwy_data_field_area_acf_uncertainty(dfield, tool->zunc, tool->uline,
+ if (tool->has_calibration && !xy_is_flipped) {
+ gwy_data_field_area_acf_uncertainty(field_to_use,
+ tool->zunc, tool->uline,
isel[0], isel[1], w, h,
dir, interp, lineres);
tool->has_uline = TRUE;
@@ -779,12 +817,16 @@ gwy_tool_sfunctions_update_curve(GwyToolSFunctions *tool)
break;
case GWY_SF_HHCF:
- gwy_data_field_area_hhcf(dfield, tool->line, isel[0], isel[1], w, h,
- dir, interp, lineres);
+ g_object_unref(tool->line);
+ tool->line = gwy_data_field_area_row_hhcf(field_to_use,
+ mask_to_use, GWY_MASK_INCLUDE,
+ isel[0], isel[1], w, h, 1,
+ NULL);
xlabel = "τ";
ylabel = "H";
- if (tool->has_calibration) {
- gwy_data_field_area_hhcf_uncertainty(dfield, tool->zunc, tool->uline,
+ if (tool->has_calibration && !xy_is_flipped) {
+ gwy_data_field_area_hhcf_uncertainty(field_to_use,
+ tool->zunc, tool->uline,
isel[0], isel[1], w, h,
dir, interp, lineres);
tool->has_uline = TRUE;
@@ -792,59 +834,73 @@ gwy_tool_sfunctions_update_curve(GwyToolSFunctions *tool)
break;
case GWY_SF_PSDF:
- gwy_data_field_area_psdf(dfield, tool->line, isel[0], isel[1], w, h,
- dir, interp, GWY_WINDOWING_HANN, lineres);
+ g_object_unref(tool->line);
+ tool->line = gwy_data_field_area_row_psdf(field_to_use,
+ mask_to_use, GWY_MASK_INCLUDE,
+ isel[0], isel[1], w, h,
+ GWY_WINDOWING_HANN, 1);
xlabel = "k";
ylabel = "W<sub>1</sub>";
break;
case GWY_SF_MINKOWSKI_VOLUME:
- gwy_data_field_area_minkowski_volume(dfield, tool->line,
+ gwy_data_field_area_minkowski_volume(field_to_use, tool->line,
isel[0], isel[1], w, h, lineres);
xlabel = "z";
ylabel = "V";
break;
case GWY_SF_MINKOWSKI_BOUNDARY:
- gwy_data_field_area_minkowski_boundary(dfield, tool->line,
+ gwy_data_field_area_minkowski_boundary(field_to_use, tool->line,
isel[0], isel[1], w, h, lineres);
xlabel = "z";
ylabel = "S";
break;
case GWY_SF_MINKOWSKI_CONNECTIVITY:
- gwy_data_field_area_minkowski_euler(dfield, tool->line,
+ gwy_data_field_area_minkowski_euler(field_to_use, tool->line,
isel[0], isel[1], w, h, lineres);
xlabel = "z";
ylabel = "χ";
break;
case GWY_SF_RPSDF:
- gwy_data_field_area_rpsdf(dfield, tool->line, isel[0], isel[1], w, h,
+ gwy_data_field_area_rpsdf(field_to_use, tool->line,
+ isel[0], isel[1], w, h,
interp, GWY_WINDOWING_HANN, lineres);
xlabel = "k";
ylabel = "W<sub>r</sub>";
break;
case GWY_SF_RACF:
- gwy_data_field_area_racf(dfield, tool->line, isel[0], isel[1], w, h,
+ gwy_data_field_area_racf(field_to_use, tool->line,
+ isel[0], isel[1], w, h,
lineres);
xlabel = "τ";
ylabel = "G<sub>r</sub>";
break;
case GWY_SF_RANGE:
- gwy_data_field_area_range(dfield, tool->line, isel[0], isel[1], w, h,
+ gwy_data_field_area_range(field_to_use, tool->line,
+ isel[0], isel[1], w, h,
dir, interp, lineres);
xlabel = "τ";
ylabel = "R";
break;
+ case GWY_SF_ASG:
+ g_object_unref(tool->line);
+ tool->line = gwy_data_field_area_row_asg(field_to_use,
+ mask_to_use, GWY_MASK_INCLUDE,
+ isel[0], isel[1], w, h, 1);
+ xlabel = "τ";
+ ylabel = "A<sub>excess</sub>";
+ break;
+
default:
g_return_if_reached();
break;
}
- GWY_OBJECT_UNREF(tmp_mask);
if (nsel > 0 && n == 0) {
gcmodel = gwy_graph_curve_model_new();
@@ -942,6 +998,7 @@ gwy_tool_sfunctions_direction_changed(G_GNUC_UNUSED GObject *button,
GwyToolSFunctions *tool)
{
tool->args.direction = gwy_radio_buttons_get_current(tool->direction);
+ GWY_OBJECT_UNREF(tool->cached_fp_mask);
gwy_tool_sfunctions_update_curve(tool);
}
@@ -979,6 +1036,7 @@ gwy_tool_sfunctions_masking_changed(GtkWidget *button,
plain_tool = GWY_PLAIN_TOOL(tool);
tool->args.masking = gwy_radio_button_get_value(button);
+ GWY_OBJECT_UNREF(tool->cached_fp_mask);
if (plain_tool->data_field && plain_tool->mask_field)
gwy_tool_sfunctions_update_curve(tool);
}
@@ -1172,22 +1230,40 @@ update_unc_fields(GwyPlainTool *plain_tool)
static gboolean
sfunction_supports_masking(GwySFOutputType type)
{
- return (type == GWY_SF_DH || type == GWY_SF_CDH);
+ return (type == GWY_SF_DH || type == GWY_SF_CDH
+ || type == GWY_SF_DA || type == GWY_SF_CDA
+ || type == GWY_SF_ACF || type == GWY_SF_HHCF || type == GWY_SF_ASG
+ || type == GWY_SF_PSDF);
}
static gboolean
-sfunction_has_explicit_resampling(GwySFOutputType type)
+sfunction_has_native_sampling(GwySFOutputType type)
{
- return (type == GWY_SF_ACF || type == GWY_SF_HHCF
- || type == GWY_SF_PSDF || type == GWY_SF_RPSDF
+ return (type == GWY_SF_ACF || type == GWY_SF_HHCF || type == GWY_SF_ASG
+ || type == GWY_SF_PSDF
|| type == GWY_SF_RANGE);
}
static gboolean
+sfunction_has_interpolation(GwySFOutputType type)
+{
+ /* RACF has no interpolation argument and all the other related functions
+ * have native sampling so we do not want interpolation. */
+ return (type == GWY_SF_RPSDF);
+}
+
+static gboolean
sfunction_has_direction(GwySFOutputType type)
{
return (type == GWY_SF_DA || type == GWY_SF_CDA
- || type == GWY_SF_ACF || type == GWY_SF_HHCF
+ || type == GWY_SF_ACF || type == GWY_SF_HHCF || type == GWY_SF_ASG
+ || type == GWY_SF_PSDF);
+}
+
+static gboolean
+sfunction_is_only_row_wise(GwySFOutputType type)
+{
+ return (type == GWY_SF_ACF || type == GWY_SF_HHCF || type == GWY_SF_ASG
|| type == GWY_SF_PSDF);
}
diff --git a/modules/tools/spectro.c b/modules/tools/spectro.c
index e84b800..9e262d2 100644
--- a/modules/tools/spectro.c
+++ b/modules/tools/spectro.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: spectro.c 19039 2016-10-08 10:54:58Z yeti-dn $
+ * @(#) $Id: spectro.c 20071 2017-07-12 07:49:00Z yeti-dn $
* Copyright (C) 2003-2014 Owain Davies, David Necas (Yeti), Petr Klapetek.
* E-mail: owain.davies at blueyonder.co.uk, yeti at gwyddion.net,
* klapetek at gwyddion.net.
@@ -71,6 +71,7 @@ struct _GwyToolSpectro {
GtkTreeModel *model;
GwyDataLine *line;
+ GwyDataLine *weights;
GtkWidget *graph;
GwyGraphModel *gmodel;
GwySpectra *spectra;
@@ -119,8 +120,10 @@ static void gwy_tool_spectro_show_curve (GwyToolSpectro *tool,
gint i);
static void gwy_tool_spectro_gather_curve (GwyToolSpectro *tool,
gint i);
-static void gwy_tool_spectro_show_averaged (GwyToolSpectro *tool,
- guint nsel);
+static void accumulate_lines (GwyDataLine *accum,
+ GwyDataLine *dline,
+ GwyDataLine *weights);
+static void gwy_tool_spectro_show_averaged (GwyToolSpectro *tool);
static void gwy_tool_spectro_update_header (GwyToolSpectro *tool,
guint col,
GString *str,
@@ -150,7 +153,7 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Point Spectrum, extracts point spectra to a graph."),
"Owain Davies <owain.davies at blueyonder.co.uk>",
- "0.10",
+ "0.11",
"Owain Davies, David Nečas (Yeti) & Petr Klapetek",
"2006",
};
@@ -166,7 +169,7 @@ static const ToolArgs default_args = {
GWY_APP_DATA_ID_NONE,
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, spectro)
G_DEFINE_TYPE(GwyToolSpectro, gwy_tool_spectro, GWY_TYPE_PLAIN_TOOL)
@@ -650,7 +653,7 @@ gwy_tool_spectro_tree_sel_changed(GtkTreeSelection *selection,
}
if (tool->args.average && nsel)
- gwy_tool_spectro_show_averaged(tool, nsel);
+ gwy_tool_spectro_show_averaged(tool);
}
static void
@@ -739,33 +742,73 @@ gwy_tool_spectro_gather_curve(GwyToolSpectro *tool,
{
GwyPlainTool *plain_tool;
GwyDataLine *spectrum;
- gint i, n;
plain_tool = GWY_PLAIN_TOOL(tool);
g_return_if_fail(plain_tool->selection);
spectrum = gwy_spectra_get_spectrum(tool->spectra, id);
- if (!tool->line)
+ if (!tool->line) {
+ /* Use the first selected line as the template. */
tool->line = gwy_data_line_duplicate(spectrum);
+ tool->weights = gwy_data_line_new_alike(spectrum, TRUE);
+ gwy_data_line_fill(tool->weights, 1.0);
+ }
else {
- gdouble *sdata, *data;
-
+ /* Accumulate the others. */
g_return_if_fail(tool->line);
- n = gwy_data_line_get_res(tool->line);
- g_return_if_fail(gwy_data_line_get_res(spectrum) == n);
- sdata = gwy_data_line_get_data(spectrum);
- data = gwy_data_line_get_data(tool->line);
- for (i = 0; i < n; i++)
- data[i] += sdata[i];
+ g_return_if_fail(tool->weights);
+ accumulate_lines(tool->line, spectrum, tool->weights);
+ }
+}
+
+static void
+accumulate_lines(GwyDataLine *accum, GwyDataLine *dline, GwyDataLine *weights)
+{
+ gint i, n, n1;
+ gdouble *adata, *data, *wdata;
+ gdouble real, off, real1, off1;
+
+ n = gwy_data_line_get_res(accum);
+ n1 = gwy_data_line_get_res(dline);
+ data = gwy_data_line_get_data(dline);
+ adata = gwy_data_line_get_data(accum);
+ real = gwy_data_line_get_real(accum);
+ real1 = gwy_data_line_get_real(dline);
+ off = gwy_data_line_get_offset(accum);
+ off1 = gwy_data_line_get_offset(dline);
+
+ if (n1 == n
+ && fabs(real1 - real) <= 1e-9*(fabs(real1) + fabs(real))
+ && fabs(off1 - off) <= 1e-9*(fabs(off1) + fabs(off))) {
+ for (i = 0; i < n1; i++)
+ adata[i] += data[i];
+ gwy_data_line_add(weights, 1.0);
+ return;
+ }
+
+ if (off1 >= real + off || off >= real1 + off1)
+ return;
+
+ /* This is not very good but better than a CRTICIAL message we used to
+ * do here... */
+ wdata = gwy_data_line_get_data(weights);
+ for (i = 0; i < n; i++) {
+ gdouble x = (i + 0.5)*real/n + off;
+ gint j = floor((x - off1)/real1*n1);
+ if (j >= 0 && j+1 < n1) {
+ adata[i] += data[j];
+ wdata[i] += 1.0;
+ }
}
}
static void
-gwy_tool_spectro_show_averaged(GwyToolSpectro *tool,
- guint nsel)
+gwy_tool_spectro_show_averaged(GwyToolSpectro *tool)
{
GwyGraphCurveModel *gcmodel;
const GwyRGBA *rgba;
+ gdouble *adata, *wdata;
+ gint i, n;
gcmodel = gwy_graph_curve_model_new();
rgba = gwy_graph_get_preset_color(0);
@@ -774,13 +817,18 @@ gwy_tool_spectro_show_averaged(GwyToolSpectro *tool,
"description", gwy_spectra_get_title(tool->spectra),
"color", rgba,
NULL);
- gwy_data_line_multiply(tool->line, 1.0/nsel);
+ n = gwy_data_line_get_res(tool->line);
+ adata = gwy_data_line_get_data(tool->line);
+ wdata = gwy_data_line_get_data(tool->weights);
+ for (i = 0; i < n; i++)
+ adata[i] /= wdata[i];
gwy_graph_curve_model_set_data_from_dataline(gcmodel, tool->line, 0, 0);
gwy_graph_model_add_curve(tool->gmodel, gcmodel);
g_object_unref(gcmodel);
gwy_graph_model_set_units_from_data_line(tool->gmodel, tool->line);
GWY_OBJECT_UNREF(tool->line);
+ GWY_OBJECT_UNREF(tool->weights);
}
static void
@@ -872,10 +920,7 @@ gwy_tool_spectro_render_color(G_GNUC_UNUSED GtkCellLayout *layout,
if (GPOINTER_TO_UINT(g_object_get_data(G_OBJECT(gcmodel),
"sid")) == idx) {
g_object_get(gcmodel, "color", &rgba, NULL);
- pixel = 0xff
- | ((guint32)(guchar)floor(255.99999*rgba->b) << 8)
- | ((guint32)(guchar)floor(255.99999*rgba->g) << 16)
- | ((guint32)(guchar)floor(255.99999*rgba->r) << 24);
+ pixel = 0xff | gwy_rgba_to_pixbuf_pixel(rgba);
gwy_rgba_free(rgba);
break;
}
diff --git a/modules/tools/spotremove.c b/modules/tools/spotremove.c
index 2ca1464..ec911a1 100644
--- a/modules/tools/spotremove.c
+++ b/modules/tools/spotremove.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: spotremove.c 19039 2016-10-08 10:54:58Z yeti-dn $
+ * @(#) $Id: spotremove.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2003-2006 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -176,7 +176,7 @@ static const InterpolateFunc method_functions[] = {
&fractal_average,
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, spotremove)
G_DEFINE_TYPE(GwyToolSpotRemover, gwy_tool_spot_remover, GWY_TYPE_PLAIN_TOOL)
diff --git a/modules/tools/stats.c b/modules/tools/stats.c
index b1bf617..e7de682 100644
--- a/modules/tools/stats.c
+++ b/modules/tools/stats.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: stats.c 19041 2016-10-08 13:12:34Z yeti-dn $
+ * @(#) $Id: stats.c 20111 2017-07-30 14:08:43Z yeti-dn $
* Copyright (C) 2003-2016 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
@@ -236,7 +236,7 @@ static const ToolArgs default_args = {
GWY_MASK_IGNORE,
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, stats)
G_DEFINE_TYPE(GwyToolStats, gwy_tool_stats, GWY_TYPE_PLAIN_TOOL)
@@ -305,7 +305,7 @@ gwy_tool_stats_init(GwyToolStats *tool)
return;
plain_tool->lazy_updates = TRUE;
- plain_tool->unit_style = GWY_SI_UNIT_FORMAT_MARKUP;
+ plain_tool->unit_style = GWY_SI_UNIT_FORMAT_VFMARKUP;
settings = gwy_app_settings_get();
tool->args = default_args;
@@ -316,7 +316,7 @@ gwy_tool_stats_init(GwyToolStats *tool)
tool->args.masking = gwy_enum_sanitize_value(tool->args.masking,
GWY_TYPE_MASKING_TYPE);
- tool->angle_format = gwy_si_unit_value_format_new(1.0, 1, "deg");
+ tool->angle_format = gwy_si_unit_value_format_new(1.0, 1, _("deg"));
gwy_plain_tool_connect_selection(plain_tool, tool->layer_type_rect,
"rectangle");
@@ -387,8 +387,7 @@ gwy_tool_stats_init_dialog(GwyToolStats *tool)
row = 0;
label = gwy_label_new_header(_("Masking Mode"));
- gtk_table_attach(table, label,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ gtk_table_attach(table, label, 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
row++;
tool->masking
@@ -400,14 +399,13 @@ gwy_tool_stats_init_dialog(GwyToolStats *tool)
gtk_table_set_row_spacing(table, row-1, 8);
label = gwy_label_new_header(_("Options"));
- gtk_table_attach(table, label,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ gtk_table_attach(table, label, 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
row++;
tool->instant_update
= gtk_check_button_new_with_mnemonic(_("_Instant updates"));
gtk_table_attach(table, tool->instant_update,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 3, row, row+1, GTK_FILL, 0, 0, 0);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(tool->instant_update),
tool->args.instant_update);
g_signal_connect(tool->instant_update, "toggled",
@@ -423,21 +421,20 @@ gwy_tool_stats_init_dialog(GwyToolStats *tool)
row = 0;
gtk_table_attach(table, gwy_label_new_header(_("Parameters")),
- 0, 2, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
for (i = 0; i < G_N_ELEMENTS(values); i++) {
label = gtk_label_new(_(values[i].name));
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_table_attach(table, label,
- 0, 1, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ gtk_table_attach(table, label, 0, 1, row, row+1, GTK_FILL, 0, 0, 0);
plabel = (GtkWidget**)G_STRUCT_MEMBER_P(tool, values[i].offset);
*plabel = gtk_label_new(NULL);
gtk_misc_set_alignment(GTK_MISC(*plabel), 1.0, 0.5);
gtk_label_set_selectable(GTK_LABEL(*plabel), TRUE);
- gtk_table_attach(table, *plabel,
- 1, 2, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ gtk_table_attach(table, *plabel, 1, 2, row, row+1,
+ GTK_EXPAND | GTK_FILL, 0, 0, 0);
row++;
}
@@ -513,7 +510,6 @@ gwy_tool_stats_data_switched(GwyTool *gwytool,
gtk_widget_set_sensitive(tool->copy, data_view != NULL);
gtk_widget_set_sensitive(tool->save, data_view != NULL);
-
}
static void
diff --git a/modules/tools/tools.c b/modules/tools/tools.c
new file mode 100644
index 0000000..0638db3
--- /dev/null
+++ b/modules/tools/tools.c
@@ -0,0 +1,60 @@
+/* This is a GENERATED file. */
+#include <glib.h>
+#include <libgwymodule/gwymodule.h>
+
+static const GwyModuleRecord* register_bundle(void);
+
+static GwyModuleInfo module_info = {
+ GWY_MODULE_ABI_VERSION | GWY_MODULE_BUNDLE_FLAG,
+ (GwyModuleRegisterFunc)®ister_bundle,
+ NULL, NULL, NULL, NULL, NULL,
+};
+
+GWY_MODULE_QUERY(module_info)
+
+GwyModuleInfo* _gwy_module_query__crop(void);
+GwyModuleInfo* _gwy_module_query__distance(void);
+GwyModuleInfo* _gwy_module_query__filter(void);
+GwyModuleInfo* _gwy_module_query__grainmeasure(void);
+GwyModuleInfo* _gwy_module_query__grainremover(void);
+GwyModuleInfo* _gwy_module_query__icolorange(void);
+GwyModuleInfo* _gwy_module_query__level3(void);
+GwyModuleInfo* _gwy_module_query__linestats(void);
+GwyModuleInfo* _gwy_module_query__maskedit(void);
+GwyModuleInfo* _gwy_module_query__pathlevel(void);
+GwyModuleInfo* _gwy_module_query__profile(void);
+GwyModuleInfo* _gwy_module_query__readvalue(void);
+GwyModuleInfo* _gwy_module_query__roughness(void);
+GwyModuleInfo* _gwy_module_query__selectionmanager(void);
+GwyModuleInfo* _gwy_module_query__sfunctions(void);
+GwyModuleInfo* _gwy_module_query__spotremove(void);
+GwyModuleInfo* _gwy_module_query__spectro(void);
+GwyModuleInfo* _gwy_module_query__stats(void);
+
+static const GwyModuleRecord modules[] = {
+ { _gwy_module_query__crop, "crop", },
+ { _gwy_module_query__distance, "distance", },
+ { _gwy_module_query__filter, "filter", },
+ { _gwy_module_query__grainmeasure, "grainmeasure", },
+ { _gwy_module_query__grainremover, "grainremover", },
+ { _gwy_module_query__icolorange, "icolorange", },
+ { _gwy_module_query__level3, "level3", },
+ { _gwy_module_query__linestats, "linestats", },
+ { _gwy_module_query__maskedit, "maskedit", },
+ { _gwy_module_query__pathlevel, "pathlevel", },
+ { _gwy_module_query__profile, "profile", },
+ { _gwy_module_query__readvalue, "readvalue", },
+ { _gwy_module_query__roughness, "roughness", },
+ { _gwy_module_query__selectionmanager, "selectionmanager", },
+ { _gwy_module_query__sfunctions, "sfunctions", },
+ { _gwy_module_query__spotremove, "spotremove", },
+ { _gwy_module_query__spectro, "spectro", },
+ { _gwy_module_query__stats, "stats", },
+ { NULL, NULL, },
+};
+
+static const GwyModuleRecord*
+register_bundle(void)
+{
+ return modules;
+}
diff --git a/modules/volume/Makefile.am b/modules/volume/Makefile.am
index 63c2d7d..eb6e36d 100644
--- a/modules/volume/Makefile.am
+++ b/modules/volume/Makefile.am
@@ -1,4 +1,4 @@
-# @(#) $Id: Makefile.am 17426 2015-09-20 09:16:12Z yeti-dn $
+# @(#) $Id: Makefile.am 20017 2017-07-03 21:44:28Z yeti-dn $
# Put sources that are for some reason disabled yet present in svn checkouts
# here. This makes them distributed and translations of their messages are
@@ -7,7 +7,10 @@ disabled_sources =
volumedir = $(pkglibdir)/modules/volume
-volume_LTLIBRARIES = \
+# Only bundle modules without own dependencies. If something goes wrong with
+# any required libraries at run-time, it will at most break these individual
+# unbundled modules, not the bundle.
+bundlable_modules = \
volume_calibrate.la \
volume_extract.la \
volume_fdfit.la \
@@ -16,7 +19,21 @@ volume_LTLIBRARIES = \
volume_kmedians.la \
volume_linestat.la \
volume_slice.la \
- volume_zcal.la
+ volume_swaxes.la \
+ volume_zcal.la \
+ volumeops.la
+
+# volume_modules is either the bundle or all the individual modules.
+if MODULE_BUNDLING
+volume_modules = volume.la
+BUILT_SOURCES = volume.c
+volume_la_CFLAGS = $(AM_CFLAGS) -DGWY_MODULE_BUNDLING
+else
+volume_modules = $(bundlable_modules)
+endif
+
+volume_LTLIBRARIES = \
+ $(volume_modules)
EXTRA_DIST = \
$(disabled_sources)
@@ -25,10 +42,6 @@ if OS_MSWIN
no_undefined = -no-undefined
endif
-AM_CPPFLAGS = -I$(top_srcdir) -DG_LOG_DOMAIN=\"Module\"
-AM_CFLAGS = @COMMON_CFLAGS@
-AM_LDFLAGS = -avoid-version -module $(no_undefined) $(module_libadd)
-
if MODULE_DEPENDENCIES
module_libadd = \
$(top_builddir)/app/libgwyapp2.la \
@@ -40,6 +53,10 @@ module_libadd = \
@GTK_LIBS@
endif
+AM_CPPFLAGS = -I$(top_srcdir) -DG_LOG_DOMAIN=\"Module\"
+AM_CFLAGS = @COMMON_CFLAGS@
+AM_LDFLAGS = -avoid-version -module $(no_undefined) $(module_libadd)
+
volume_calibrate_la_SOURCES = volume_calibrate.c
volume_extract_la_SOURCES = volume_extract.c
volume_fdfit_la_SOURCES = volume_fdfit.c
@@ -48,7 +65,28 @@ volume_kmeans_la_SOURCES = volume_kmeans.c
volume_kmedians_la_SOURCES = volume_kmedians.c
volume_linestat_la_SOURCES = volume_linestat.c
volume_slice_la_SOURCES = volume_slice.c
+volume_swaxes_la_SOURCES = volume_swaxes.c
volume_zcal_la_SOURCES = volume_zcal.c
+volumeops_la_SOURCES = volumeops.c
+
+volume_la_SOURCES = \
+ $(volume_calibrate_la_SOURCES) \
+ $(volume_extract_la_SOURCES) \
+ $(volume_fdfit_la_SOURCES) \
+ $(volume_invert_la_SOURCES) \
+ $(volume_kmeans_la_SOURCES) \
+ $(volume_kmedians_la_SOURCES) \
+ $(volume_linestat_la_SOURCES) \
+ $(volume_slice_la_SOURCES) \
+ $(volume_swaxes_la_SOURCES) \
+ $(volume_zcal_la_SOURCES) \
+ $(volumeops_la_SOURCES) \
+ volume.c
+
+volume.c: $(srcdir)/Makefile.am $(top_srcdir)/utils/gen-module-bundle.sh
+ $(SHELL) $(top_srcdir)/utils/gen-module-bundle.sh volume.c $(bundlable_modules)
+
+CLEAN_FILES = volume.c
clean-local:
rm -f core.* *~
diff --git a/modules/volume/Makefile.in b/modules/volume/Makefile.in
index 41327b7..fe97cee 100644
--- a/modules/volume/Makefile.in
+++ b/modules/volume/Makefile.in
@@ -14,7 +14,7 @@
@SET_MAKE@
-# @(#) $Id: Makefile.am 17426 2015-09-20 09:16:12Z yeti-dn $
+# @(#) $Id: Makefile.am 20017 2017-07-03 21:44:28Z yeti-dn $
VPATH = @srcdir@
am__is_gnu_make = { \
@@ -138,37 +138,80 @@ am__uninstall_files_from_dir = { \
}
am__installdirs = "$(DESTDIR)$(volumedir)"
LTLIBRARIES = $(volume_LTLIBRARIES)
-volume_calibrate_la_LIBADD =
-am_volume_calibrate_la_OBJECTS = volume_calibrate.lo
-volume_calibrate_la_OBJECTS = $(am_volume_calibrate_la_OBJECTS)
+volume_la_LIBADD =
+am__objects_1 = volume_la-volume_calibrate.lo
+am__objects_2 = volume_la-volume_extract.lo
+am__objects_3 = volume_la-volume_fdfit.lo
+am__objects_4 = volume_la-volume_invert.lo
+am__objects_5 = volume_la-volume_kmeans.lo
+am__objects_6 = volume_la-volume_kmedians.lo
+am__objects_7 = volume_la-volume_linestat.lo
+am__objects_8 = volume_la-volume_slice.lo
+am__objects_9 = volume_la-volume_swaxes.lo
+am__objects_10 = volume_la-volume_zcal.lo
+am__objects_11 = volume_la-volumeops.lo
+am_volume_la_OBJECTS = $(am__objects_1) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4) $(am__objects_5) \
+ $(am__objects_6) $(am__objects_7) $(am__objects_8) \
+ $(am__objects_9) $(am__objects_10) $(am__objects_11) \
+ volume_la-volume.lo
+volume_la_OBJECTS = $(am_volume_la_OBJECTS)
AM_V_lt = $(am__v_lt_ at AM_V@)
am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
am__v_lt_0 = --silent
am__v_lt_1 =
+volume_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(volume_la_CFLAGS) \
+ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+ at MODULE_BUNDLING_TRUE@am_volume_la_rpath = -rpath $(volumedir)
+volume_calibrate_la_LIBADD =
+am_volume_calibrate_la_OBJECTS = volume_calibrate.lo
+volume_calibrate_la_OBJECTS = $(am_volume_calibrate_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_volume_calibrate_la_rpath = -rpath \
+ at MODULE_BUNDLING_FALSE@ $(volumedir)
volume_extract_la_LIBADD =
am_volume_extract_la_OBJECTS = volume_extract.lo
volume_extract_la_OBJECTS = $(am_volume_extract_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_volume_extract_la_rpath = -rpath \
+ at MODULE_BUNDLING_FALSE@ $(volumedir)
volume_fdfit_la_LIBADD =
am_volume_fdfit_la_OBJECTS = volume_fdfit.lo
volume_fdfit_la_OBJECTS = $(am_volume_fdfit_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_volume_fdfit_la_rpath = -rpath $(volumedir)
volume_invert_la_LIBADD =
am_volume_invert_la_OBJECTS = volume_invert.lo
volume_invert_la_OBJECTS = $(am_volume_invert_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_volume_invert_la_rpath = -rpath $(volumedir)
volume_kmeans_la_LIBADD =
am_volume_kmeans_la_OBJECTS = volume_kmeans.lo
volume_kmeans_la_OBJECTS = $(am_volume_kmeans_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_volume_kmeans_la_rpath = -rpath $(volumedir)
volume_kmedians_la_LIBADD =
am_volume_kmedians_la_OBJECTS = volume_kmedians.lo
volume_kmedians_la_OBJECTS = $(am_volume_kmedians_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_volume_kmedians_la_rpath = -rpath \
+ at MODULE_BUNDLING_FALSE@ $(volumedir)
volume_linestat_la_LIBADD =
am_volume_linestat_la_OBJECTS = volume_linestat.lo
volume_linestat_la_OBJECTS = $(am_volume_linestat_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_volume_linestat_la_rpath = -rpath \
+ at MODULE_BUNDLING_FALSE@ $(volumedir)
volume_slice_la_LIBADD =
am_volume_slice_la_OBJECTS = volume_slice.lo
volume_slice_la_OBJECTS = $(am_volume_slice_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_volume_slice_la_rpath = -rpath $(volumedir)
+volume_swaxes_la_LIBADD =
+am_volume_swaxes_la_OBJECTS = volume_swaxes.lo
+volume_swaxes_la_OBJECTS = $(am_volume_swaxes_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_volume_swaxes_la_rpath = -rpath $(volumedir)
volume_zcal_la_LIBADD =
am_volume_zcal_la_OBJECTS = volume_zcal.lo
volume_zcal_la_OBJECTS = $(am_volume_zcal_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_volume_zcal_la_rpath = -rpath $(volumedir)
+volumeops_la_LIBADD =
+am_volumeops_la_OBJECTS = volumeops.lo
+volumeops_la_OBJECTS = $(am_volumeops_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_volumeops_la_rpath = -rpath $(volumedir)
AM_V_P = $(am__v_P_ at AM_V@)
am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
am__v_P_0 = false
@@ -203,16 +246,18 @@ AM_V_CCLD = $(am__v_CCLD_ at AM_V@)
am__v_CCLD_ = $(am__v_CCLD_ at AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
-SOURCES = $(volume_calibrate_la_SOURCES) $(volume_extract_la_SOURCES) \
- $(volume_fdfit_la_SOURCES) $(volume_invert_la_SOURCES) \
- $(volume_kmeans_la_SOURCES) $(volume_kmedians_la_SOURCES) \
- $(volume_linestat_la_SOURCES) $(volume_slice_la_SOURCES) \
- $(volume_zcal_la_SOURCES)
-DIST_SOURCES = $(volume_calibrate_la_SOURCES) \
+SOURCES = $(volume_la_SOURCES) $(volume_calibrate_la_SOURCES) \
$(volume_extract_la_SOURCES) $(volume_fdfit_la_SOURCES) \
$(volume_invert_la_SOURCES) $(volume_kmeans_la_SOURCES) \
$(volume_kmedians_la_SOURCES) $(volume_linestat_la_SOURCES) \
- $(volume_slice_la_SOURCES) $(volume_zcal_la_SOURCES)
+ $(volume_slice_la_SOURCES) $(volume_swaxes_la_SOURCES) \
+ $(volume_zcal_la_SOURCES) $(volumeops_la_SOURCES)
+DIST_SOURCES = $(volume_la_SOURCES) $(volume_calibrate_la_SOURCES) \
+ $(volume_extract_la_SOURCES) $(volume_fdfit_la_SOURCES) \
+ $(volume_invert_la_SOURCES) $(volume_kmeans_la_SOURCES) \
+ $(volume_kmedians_la_SOURCES) $(volume_linestat_la_SOURCES) \
+ $(volume_slice_la_SOURCES) $(volume_swaxes_la_SOURCES) \
+ $(volume_zcal_la_SOURCES) $(volumeops_la_SOURCES)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
@@ -278,10 +323,7 @@ EPYDOC = @EPYDOC@
EXEEXT = @EXEEXT@
EXR_CFLAGS = @EXR_CFLAGS@
EXR_LIBS = @EXR_LIBS@
-FFTW3_1_CFLAGS = @FFTW3_1_CFLAGS@
-FFTW3_1_LIBS = @FFTW3_1_LIBS@
FFTW3_CFLAGS = @FFTW3_CFLAGS@
-FFTW3_DEPENDENCY = @FFTW3_DEPENDENCY@
FFTW3_LIBS = @FFTW3_LIBS@
FGREP = @FGREP@
GCONFTOOL = @GCONFTOOL@
@@ -291,6 +333,8 @@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
GLIBC21 = @GLIBC21@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GMODULE_CFLAGS = @GMODULE_CFLAGS@
GMODULE_LIBS = @GMODULE_LIBS@
GMSGFMT = @GMSGFMT@
@@ -315,7 +359,9 @@ GTK_MAC_LIBS = @GTK_MAC_LIBS@
GWY_VERSION_MAJOR = @GWY_VERSION_MAJOR@
GWY_VERSION_MINOR = @GWY_VERSION_MINOR@
GWY_VERSION_STRING = @GWY_VERSION_STRING@
+HDRIMAGE_EXTRA_CFLAGS = @HDRIMAGE_EXTRA_CFLAGS@
HTML_DIR = @HTML_DIR@
+INKSCAPE = @INKSCAPE@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -373,6 +419,7 @@ PASCAL = @PASCAL@
PATH_SEPARATOR = @PATH_SEPARATOR@
PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
+PNGCRUSH = @PNGCRUSH@
PNG_CFLAGS = @PNG_CFLAGS@
PNG_LIBS = @PNG_LIBS@
POD2MAN = @POD2MAN@
@@ -381,17 +428,13 @@ PYGTK_CFLAGS = @PYGTK_CFLAGS@
PYGTK_CODEGENDIR = @PYGTK_CODEGENDIR@
PYGTK_LIBS = @PYGTK_LIBS@
PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
PYTHON_EXTRA_CFLAGS = @PYTHON_EXTRA_CFLAGS@
PYTHON_INCLUDES = @PYTHON_INCLUDES@
-PYTHON_LIBS = @PYTHON_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
PYTHON_PLATFORM = @PYTHON_PLATFORM@
PYTHON_PREFIX = @PYTHON_PREFIX@
-PYTHON_SYSCFG_BASECFLAGS = @PYTHON_SYSCFG_BASECFLAGS@
-PYTHON_SYSCFG_CCSHARED = @PYTHON_SYSCFG_CCSHARED@
-PYTHON_SYSCFG_LDFLAGS = @PYTHON_SYSCFG_LDFLAGS@
-PYTHON_SYSCFG_LIBDIR = @PYTHON_SYSCFG_LIBDIR@
-PYTHON_SYSCFG_LINKFORSHARED = @PYTHON_SYSCFG_LINKFORSHARED@
PYTHON_VERSION = @PYTHON_VERSION@
RANLIB = @RANLIB@
RUBY = @RUBY@
@@ -482,7 +525,11 @@ top_srcdir = @top_srcdir@
# kept. If we remove them completely, various bits can get lost.
disabled_sources =
volumedir = $(pkglibdir)/modules/volume
-volume_LTLIBRARIES = \
+
+# Only bundle modules without own dependencies. If something goes wrong with
+# any required libraries at run-time, it will at most break these individual
+# unbundled modules, not the bundle.
+bundlable_modules = \
volume_calibrate.la \
volume_extract.la \
volume_fdfit.la \
@@ -491,15 +538,23 @@ volume_LTLIBRARIES = \
volume_kmedians.la \
volume_linestat.la \
volume_slice.la \
- volume_zcal.la
+ volume_swaxes.la \
+ volume_zcal.la \
+ volumeops.la
+
+ at MODULE_BUNDLING_FALSE@volume_modules = $(bundlable_modules)
+
+# volume_modules is either the bundle or all the individual modules.
+ at MODULE_BUNDLING_TRUE@volume_modules = volume.la
+ at MODULE_BUNDLING_TRUE@BUILT_SOURCES = volume.c
+ at MODULE_BUNDLING_TRUE@volume_la_CFLAGS = $(AM_CFLAGS) -DGWY_MODULE_BUNDLING
+volume_LTLIBRARIES = \
+ $(volume_modules)
EXTRA_DIST = \
$(disabled_sources)
@OS_MSWIN_TRUE at no_undefined = -no-undefined
-AM_CPPFLAGS = -I$(top_srcdir) -DG_LOG_DOMAIN=\"Module\"
-AM_CFLAGS = @COMMON_CFLAGS@
-AM_LDFLAGS = -avoid-version -module $(no_undefined) $(module_libadd)
@MODULE_DEPENDENCIES_TRUE at module_libadd = \
@MODULE_DEPENDENCIES_TRUE@ $(top_builddir)/app/libgwyapp2.la \
@MODULE_DEPENDENCIES_TRUE@ $(top_builddir)/libdraw/libgwydraw2.la \
@@ -509,6 +564,9 @@ AM_LDFLAGS = -avoid-version -module $(no_undefined) $(module_libadd)
@MODULE_DEPENDENCIES_TRUE@ $(top_builddir)/libprocess/libgwyprocess2.la \
@MODULE_DEPENDENCIES_TRUE@ @GTK_LIBS@
+AM_CPPFLAGS = -I$(top_srcdir) -DG_LOG_DOMAIN=\"Module\"
+AM_CFLAGS = @COMMON_CFLAGS@
+AM_LDFLAGS = -avoid-version -module $(no_undefined) $(module_libadd)
volume_calibrate_la_SOURCES = volume_calibrate.c
volume_extract_la_SOURCES = volume_extract.c
volume_fdfit_la_SOURCES = volume_fdfit.c
@@ -517,8 +575,26 @@ volume_kmeans_la_SOURCES = volume_kmeans.c
volume_kmedians_la_SOURCES = volume_kmedians.c
volume_linestat_la_SOURCES = volume_linestat.c
volume_slice_la_SOURCES = volume_slice.c
+volume_swaxes_la_SOURCES = volume_swaxes.c
volume_zcal_la_SOURCES = volume_zcal.c
-all: all-am
+volumeops_la_SOURCES = volumeops.c
+volume_la_SOURCES = \
+ $(volume_calibrate_la_SOURCES) \
+ $(volume_extract_la_SOURCES) \
+ $(volume_fdfit_la_SOURCES) \
+ $(volume_invert_la_SOURCES) \
+ $(volume_kmeans_la_SOURCES) \
+ $(volume_kmedians_la_SOURCES) \
+ $(volume_linestat_la_SOURCES) \
+ $(volume_slice_la_SOURCES) \
+ $(volume_swaxes_la_SOURCES) \
+ $(volume_zcal_la_SOURCES) \
+ $(volumeops_la_SOURCES) \
+ volume.c
+
+CLEAN_FILES = volume.c
+all: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) all-am
.SUFFIXES:
.SUFFIXES: .c .lo .o .obj
@@ -587,32 +663,41 @@ clean-volumeLTLIBRARIES:
rm -f $${locs}; \
}
+volume.la: $(volume_la_OBJECTS) $(volume_la_DEPENDENCIES) $(EXTRA_volume_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(volume_la_LINK) $(am_volume_la_rpath) $(volume_la_OBJECTS) $(volume_la_LIBADD) $(LIBS)
+
volume_calibrate.la: $(volume_calibrate_la_OBJECTS) $(volume_calibrate_la_DEPENDENCIES) $(EXTRA_volume_calibrate_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(volumedir) $(volume_calibrate_la_OBJECTS) $(volume_calibrate_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_volume_calibrate_la_rpath) $(volume_calibrate_la_OBJECTS) $(volume_calibrate_la_LIBADD) $(LIBS)
volume_extract.la: $(volume_extract_la_OBJECTS) $(volume_extract_la_DEPENDENCIES) $(EXTRA_volume_extract_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(volumedir) $(volume_extract_la_OBJECTS) $(volume_extract_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_volume_extract_la_rpath) $(volume_extract_la_OBJECTS) $(volume_extract_la_LIBADD) $(LIBS)
volume_fdfit.la: $(volume_fdfit_la_OBJECTS) $(volume_fdfit_la_DEPENDENCIES) $(EXTRA_volume_fdfit_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(volumedir) $(volume_fdfit_la_OBJECTS) $(volume_fdfit_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_volume_fdfit_la_rpath) $(volume_fdfit_la_OBJECTS) $(volume_fdfit_la_LIBADD) $(LIBS)
volume_invert.la: $(volume_invert_la_OBJECTS) $(volume_invert_la_DEPENDENCIES) $(EXTRA_volume_invert_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(volumedir) $(volume_invert_la_OBJECTS) $(volume_invert_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_volume_invert_la_rpath) $(volume_invert_la_OBJECTS) $(volume_invert_la_LIBADD) $(LIBS)
volume_kmeans.la: $(volume_kmeans_la_OBJECTS) $(volume_kmeans_la_DEPENDENCIES) $(EXTRA_volume_kmeans_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(volumedir) $(volume_kmeans_la_OBJECTS) $(volume_kmeans_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_volume_kmeans_la_rpath) $(volume_kmeans_la_OBJECTS) $(volume_kmeans_la_LIBADD) $(LIBS)
volume_kmedians.la: $(volume_kmedians_la_OBJECTS) $(volume_kmedians_la_DEPENDENCIES) $(EXTRA_volume_kmedians_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(volumedir) $(volume_kmedians_la_OBJECTS) $(volume_kmedians_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_volume_kmedians_la_rpath) $(volume_kmedians_la_OBJECTS) $(volume_kmedians_la_LIBADD) $(LIBS)
volume_linestat.la: $(volume_linestat_la_OBJECTS) $(volume_linestat_la_DEPENDENCIES) $(EXTRA_volume_linestat_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(volumedir) $(volume_linestat_la_OBJECTS) $(volume_linestat_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_volume_linestat_la_rpath) $(volume_linestat_la_OBJECTS) $(volume_linestat_la_LIBADD) $(LIBS)
volume_slice.la: $(volume_slice_la_OBJECTS) $(volume_slice_la_DEPENDENCIES) $(EXTRA_volume_slice_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(volumedir) $(volume_slice_la_OBJECTS) $(volume_slice_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_volume_slice_la_rpath) $(volume_slice_la_OBJECTS) $(volume_slice_la_LIBADD) $(LIBS)
+
+volume_swaxes.la: $(volume_swaxes_la_OBJECTS) $(volume_swaxes_la_DEPENDENCIES) $(EXTRA_volume_swaxes_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(LINK) $(am_volume_swaxes_la_rpath) $(volume_swaxes_la_OBJECTS) $(volume_swaxes_la_LIBADD) $(LIBS)
volume_zcal.la: $(volume_zcal_la_OBJECTS) $(volume_zcal_la_DEPENDENCIES) $(EXTRA_volume_zcal_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(volumedir) $(volume_zcal_la_OBJECTS) $(volume_zcal_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_volume_zcal_la_rpath) $(volume_zcal_la_OBJECTS) $(volume_zcal_la_LIBADD) $(LIBS)
+
+volumeops.la: $(volumeops_la_OBJECTS) $(volumeops_la_DEPENDENCIES) $(EXTRA_volumeops_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(LINK) $(am_volumeops_la_rpath) $(volumeops_la_OBJECTS) $(volumeops_la_LIBADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@@ -626,9 +711,23 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/volume_invert.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/volume_kmeans.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/volume_kmedians.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/volume_la-volume.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/volume_la-volume_calibrate.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/volume_la-volume_extract.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/volume_la-volume_fdfit.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/volume_la-volume_invert.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/volume_la-volume_kmeans.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/volume_la-volume_kmedians.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/volume_la-volume_linestat.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/volume_la-volume_slice.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/volume_la-volume_swaxes.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/volume_la-volume_zcal.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/volume_la-volumeops.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/volume_linestat.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/volume_slice.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/volume_swaxes.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/volume_zcal.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/volumeops.Plo at am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@@ -651,6 +750,90 @@ distclean-compile:
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LTCOMPILE) -c -o $@ $<
+volume_la-volume_calibrate.lo: volume_calibrate.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(volume_la_CFLAGS) $(CFLAGS) -MT volume_la-volume_calibrate.lo -MD -MP -MF $(DEPDIR)/volume_la-volume_calibrate.Tpo -c -o volume_la-volume_calibrate.lo `test -f 'volume_calibrate.c' || echo '$(srcdir)/'`volume_calibrate.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/volume_la-volume_calibrate.Tpo $(DEPDIR)/volume_la-volume_calibrate.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='volume_calibrate.c' object='volume_la-volume_calibrate.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(volume_la_CFLAGS) $(CFLAGS) -c -o volume_la-volume_calibrate.lo `test -f 'volume_calibrate.c' || echo '$(srcdir)/'`volume_calibrate.c
+
+volume_la-volume_extract.lo: volume_extract.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(volume_la_CFLAGS) $(CFLAGS) -MT volume_la-volume_extract.lo -MD -MP -MF $(DEPDIR)/volume_la-volume_extract.Tpo -c -o volume_la-volume_extract.lo `test -f 'volume_extract.c' || echo '$(srcdir)/'`volume_extract.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/volume_la-volume_extract.Tpo $(DEPDIR)/volume_la-volume_extract.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='volume_extract.c' object='volume_la-volume_extract.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(volume_la_CFLAGS) $(CFLAGS) -c -o volume_la-volume_extract.lo `test -f 'volume_extract.c' || echo '$(srcdir)/'`volume_extract.c
+
+volume_la-volume_fdfit.lo: volume_fdfit.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(volume_la_CFLAGS) $(CFLAGS) -MT volume_la-volume_fdfit.lo -MD -MP -MF $(DEPDIR)/volume_la-volume_fdfit.Tpo -c -o volume_la-volume_fdfit.lo `test -f 'volume_fdfit.c' || echo '$(srcdir)/'`volume_fdfit.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/volume_la-volume_fdfit.Tpo $(DEPDIR)/volume_la-volume_fdfit.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='volume_fdfit.c' object='volume_la-volume_fdfit.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(volume_la_CFLAGS) $(CFLAGS) -c -o volume_la-volume_fdfit.lo `test -f 'volume_fdfit.c' || echo '$(srcdir)/'`volume_fdfit.c
+
+volume_la-volume_invert.lo: volume_invert.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(volume_la_CFLAGS) $(CFLAGS) -MT volume_la-volume_invert.lo -MD -MP -MF $(DEPDIR)/volume_la-volume_invert.Tpo -c -o volume_la-volume_invert.lo `test -f 'volume_invert.c' || echo '$(srcdir)/'`volume_invert.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/volume_la-volume_invert.Tpo $(DEPDIR)/volume_la-volume_invert.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='volume_invert.c' object='volume_la-volume_invert.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(volume_la_CFLAGS) $(CFLAGS) -c -o volume_la-volume_invert.lo `test -f 'volume_invert.c' || echo '$(srcdir)/'`volume_invert.c
+
+volume_la-volume_kmeans.lo: volume_kmeans.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(volume_la_CFLAGS) $(CFLAGS) -MT volume_la-volume_kmeans.lo -MD -MP -MF $(DEPDIR)/volume_la-volume_kmeans.Tpo -c -o volume_la-volume_kmeans.lo `test -f 'volume_kmeans.c' || echo '$(srcdir)/'`volume_kmeans.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/volume_la-volume_kmeans.Tpo $(DEPDIR)/volume_la-volume_kmeans.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='volume_kmeans.c' object='volume_la-volume_kmeans.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(volume_la_CFLAGS) $(CFLAGS) -c -o volume_la-volume_kmeans.lo `test -f 'volume_kmeans.c' || echo '$(srcdir)/'`volume_kmeans.c
+
+volume_la-volume_kmedians.lo: volume_kmedians.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(volume_la_CFLAGS) $(CFLAGS) -MT volume_la-volume_kmedians.lo -MD -MP -MF $(DEPDIR)/volume_la-volume_kmedians.Tpo -c -o volume_la-volume_kmedians.lo `test -f 'volume_kmedians.c' || echo '$(srcdir)/'`volume_kmedians.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/volume_la-volume_kmedians.Tpo $(DEPDIR)/volume_la-volume_kmedians.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='volume_kmedians.c' object='volume_la-volume_kmedians.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(volume_la_CFLAGS) $(CFLAGS) -c -o volume_la-volume_kmedians.lo `test -f 'volume_kmedians.c' || echo '$(srcdir)/'`volume_kmedians.c
+
+volume_la-volume_linestat.lo: volume_linestat.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(volume_la_CFLAGS) $(CFLAGS) -MT volume_la-volume_linestat.lo -MD -MP -MF $(DEPDIR)/volume_la-volume_linestat.Tpo -c -o volume_la-volume_linestat.lo `test -f 'volume_linestat.c' || echo '$(srcdir)/'`volume_linestat.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/volume_la-volume_linestat.Tpo $(DEPDIR)/volume_la-volume_linestat.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='volume_linestat.c' object='volume_la-volume_linestat.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(volume_la_CFLAGS) $(CFLAGS) -c -o volume_la-volume_linestat.lo `test -f 'volume_linestat.c' || echo '$(srcdir)/'`volume_linestat.c
+
+volume_la-volume_slice.lo: volume_slice.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(volume_la_CFLAGS) $(CFLAGS) -MT volume_la-volume_slice.lo -MD -MP -MF $(DEPDIR)/volume_la-volume_slice.Tpo -c -o volume_la-volume_slice.lo `test -f 'volume_slice.c' || echo '$(srcdir)/'`volume_slice.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/volume_la-volume_slice.Tpo $(DEPDIR)/volume_la-volume_slice.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='volume_slice.c' object='volume_la-volume_slice.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(volume_la_CFLAGS) $(CFLAGS) -c -o volume_la-volume_slice.lo `test -f 'volume_slice.c' || echo '$(srcdir)/'`volume_slice.c
+
+volume_la-volume_swaxes.lo: volume_swaxes.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(volume_la_CFLAGS) $(CFLAGS) -MT volume_la-volume_swaxes.lo -MD -MP -MF $(DEPDIR)/volume_la-volume_swaxes.Tpo -c -o volume_la-volume_swaxes.lo `test -f 'volume_swaxes.c' || echo '$(srcdir)/'`volume_swaxes.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/volume_la-volume_swaxes.Tpo $(DEPDIR)/volume_la-volume_swaxes.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='volume_swaxes.c' object='volume_la-volume_swaxes.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(volume_la_CFLAGS) $(CFLAGS) -c -o volume_la-volume_swaxes.lo `test -f 'volume_swaxes.c' || echo '$(srcdir)/'`volume_swaxes.c
+
+volume_la-volume_zcal.lo: volume_zcal.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(volume_la_CFLAGS) $(CFLAGS) -MT volume_la-volume_zcal.lo -MD -MP -MF $(DEPDIR)/volume_la-volume_zcal.Tpo -c -o volume_la-volume_zcal.lo `test -f 'volume_zcal.c' || echo '$(srcdir)/'`volume_zcal.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/volume_la-volume_zcal.Tpo $(DEPDIR)/volume_la-volume_zcal.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='volume_zcal.c' object='volume_la-volume_zcal.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(volume_la_CFLAGS) $(CFLAGS) -c -o volume_la-volume_zcal.lo `test -f 'volume_zcal.c' || echo '$(srcdir)/'`volume_zcal.c
+
+volume_la-volumeops.lo: volumeops.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(volume_la_CFLAGS) $(CFLAGS) -MT volume_la-volumeops.lo -MD -MP -MF $(DEPDIR)/volume_la-volumeops.Tpo -c -o volume_la-volumeops.lo `test -f 'volumeops.c' || echo '$(srcdir)/'`volumeops.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/volume_la-volumeops.Tpo $(DEPDIR)/volume_la-volumeops.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='volumeops.c' object='volume_la-volumeops.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(volume_la_CFLAGS) $(CFLAGS) -c -o volume_la-volumeops.lo `test -f 'volumeops.c' || echo '$(srcdir)/'`volumeops.c
+
+volume_la-volume.lo: volume.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(volume_la_CFLAGS) $(CFLAGS) -MT volume_la-volume.lo -MD -MP -MF $(DEPDIR)/volume_la-volume.Tpo -c -o volume_la-volume.lo `test -f 'volume.c' || echo '$(srcdir)/'`volume.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/volume_la-volume.Tpo $(DEPDIR)/volume_la-volume.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='volume.c' object='volume_la-volume.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(volume_la_CFLAGS) $(CFLAGS) -c -o volume_la-volume.lo `test -f 'volume.c' || echo '$(srcdir)/'`volume.c
+
mostlyclean-libtool:
-rm -f *.lo
@@ -740,13 +923,15 @@ distdir: $(DISTFILES)
fi; \
done
check-am: all-am
-check: check-am
+check: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) check-am
all-am: Makefile $(LTLIBRARIES)
installdirs:
for dir in "$(DESTDIR)$(volumedir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
-install: install-am
+install: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
@@ -776,6 +961,7 @@ distclean-generic:
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
clean: clean-am
clean-am: clean-generic clean-libtool clean-local \
@@ -847,7 +1033,7 @@ ps-am:
uninstall-am: uninstall-volumeLTLIBRARIES
-.MAKE: install-am install-strip
+.MAKE: all check install install-am install-strip
.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
clean-libtool clean-local clean-volumeLTLIBRARIES \
@@ -867,6 +1053,9 @@ uninstall-am: uninstall-volumeLTLIBRARIES
.PRECIOUS: Makefile
+volume.c: $(srcdir)/Makefile.am $(top_srcdir)/utils/gen-module-bundle.sh
+ $(SHELL) $(top_srcdir)/utils/gen-module-bundle.sh volume.c $(bundlable_modules)
+
clean-local:
rm -f core.* *~
diff --git a/modules/volume/volume.c b/modules/volume/volume.c
new file mode 100644
index 0000000..8b00fa3
--- /dev/null
+++ b/modules/volume/volume.c
@@ -0,0 +1,46 @@
+/* This is a GENERATED file. */
+#include <glib.h>
+#include <libgwymodule/gwymodule.h>
+
+static const GwyModuleRecord* register_bundle(void);
+
+static GwyModuleInfo module_info = {
+ GWY_MODULE_ABI_VERSION | GWY_MODULE_BUNDLE_FLAG,
+ (GwyModuleRegisterFunc)®ister_bundle,
+ NULL, NULL, NULL, NULL, NULL,
+};
+
+GWY_MODULE_QUERY(module_info)
+
+GwyModuleInfo* _gwy_module_query__volume_calibrate(void);
+GwyModuleInfo* _gwy_module_query__volume_extract(void);
+GwyModuleInfo* _gwy_module_query__volume_fdfit(void);
+GwyModuleInfo* _gwy_module_query__volume_invert(void);
+GwyModuleInfo* _gwy_module_query__volume_kmeans(void);
+GwyModuleInfo* _gwy_module_query__volume_kmedians(void);
+GwyModuleInfo* _gwy_module_query__volume_linestat(void);
+GwyModuleInfo* _gwy_module_query__volume_slice(void);
+GwyModuleInfo* _gwy_module_query__volume_swaxes(void);
+GwyModuleInfo* _gwy_module_query__volume_zcal(void);
+GwyModuleInfo* _gwy_module_query__volumeops(void);
+
+static const GwyModuleRecord modules[] = {
+ { _gwy_module_query__volume_calibrate, "volume_calibrate", },
+ { _gwy_module_query__volume_extract, "volume_extract", },
+ { _gwy_module_query__volume_fdfit, "volume_fdfit", },
+ { _gwy_module_query__volume_invert, "volume_invert", },
+ { _gwy_module_query__volume_kmeans, "volume_kmeans", },
+ { _gwy_module_query__volume_kmedians, "volume_kmedians", },
+ { _gwy_module_query__volume_linestat, "volume_linestat", },
+ { _gwy_module_query__volume_slice, "volume_slice", },
+ { _gwy_module_query__volume_swaxes, "volume_swaxes", },
+ { _gwy_module_query__volume_zcal, "volume_zcal", },
+ { _gwy_module_query__volumeops, "volumeops", },
+ { NULL, NULL, },
+};
+
+static const GwyModuleRecord*
+register_bundle(void)
+{
+ return modules;
+}
diff --git a/modules/volume/volume_calibrate.c b/modules/volume/volume_calibrate.c
index 2669676..3a3c0df 100644
--- a/modules/volume/volume_calibrate.c
+++ b/modules/volume/volume_calibrate.c
@@ -1,6 +1,6 @@
/*
* @(#) $Id: volcal.c 14954 2013-04-23 15:43:19Z klapetek $
- * Copyright (C) 2003 David Necas (Yeti), Petr Klapetek.
+ * Copyright (C) 2013 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
* This program is free software; you can redistribute it and/or modify
@@ -174,12 +174,12 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Recalibrate volume data dimensions or value range."),
"Petr Klapetek <klapetek at gwyddion.net>",
- "1.1",
+ "1.2",
"David Nečas (Yeti) & Petr Klapetek",
"2013",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, volume_calibrate)
static gboolean
module_register(void)
@@ -361,7 +361,7 @@ volcal_dialog(VolcalArgs *args,
GwyBrick *brick)
{
enum { RESPONSE_RESET = 1};
- GtkWidget *dialog, *spin, *table, *label;
+ GtkWidget *dialog, *spin, *table;
GwySIUnit *unit;
VolcalControls controls;
gint row, response;
@@ -371,7 +371,8 @@ volcal_dialog(VolcalArgs *args,
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
NULL);
- controls.ok = gtk_dialog_add_button(GTK_DIALOG(dialog), GTK_STOCK_OK, GTK_RESPONSE_OK);
+ controls.ok = gtk_dialog_add_button(GTK_DIALOG(dialog),
+ GTK_STOCK_OK, GTK_RESPONSE_OK);
gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK);
gwy_help_add_to_volume_dialog(GTK_DIALOG(dialog), GWY_HELP_DEFAULT);
@@ -386,22 +387,16 @@ volcal_dialog(VolcalArgs *args,
row = 0;
/***** New Real Dimensions *****/
- label = gwy_label_new_header(_("New Real Dimensions"));
- gtk_table_attach(GTK_TABLE(table), label,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ gtk_table_attach(GTK_TABLE(table),
+ gwy_label_new_header(_("New Real Dimensions")),
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
- label = gtk_label_new_with_mnemonic(_("_X range:"));
- gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_table_attach(GTK_TABLE(table), label,
- 0, 1, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
-
controls.xreal = gtk_adjustment_new(args->xreal/pow10(args->xexponent),
0.01, 10000, 1, 10, 0);
- spin = gtk_spin_button_new(GTK_ADJUSTMENT(controls.xreal), 1, 2);
- gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(spin), TRUE);
- gtk_table_attach(GTK_TABLE(table), spin,
- 1, 2, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ spin = gwy_table_attach_adjbar(table, row, _("_X range:"), NULL,
+ controls.xreal, GWY_HSCALE_LOG);
+ gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 3);
unit = gwy_brick_get_si_unit_x(brick);
controls.xexponent
@@ -409,202 +404,147 @@ volcal_dialog(VolcalArgs *args,
&controls, -15, 6, unit,
args->xexponent);
gtk_table_attach(GTK_TABLE(table), controls.xexponent, 2, 3, row, row+1,
- GTK_EXPAND | GTK_FILL | GTK_SHRINK, 0, 0, 0);
+ GTK_FILL | GTK_SHRINK, 0, 0, 0);
controls.xunits = gtk_button_new_with_label(gwy_sgettext("verb|Change"));
g_object_set_data(G_OBJECT(controls.xunits), "id", (gpointer)"x");
gtk_table_attach(GTK_TABLE(table), controls.xunits,
- 3, 4, row, row+1,
- GTK_EXPAND | GTK_FILL | GTK_SHRINK, 0, 0, 0);
+ 3, 4, row, row+1, GTK_FILL | GTK_SHRINK, 0, 0, 0);
row++;
- label = gtk_label_new_with_mnemonic(_("_Y range:"));
- gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_table_attach(GTK_TABLE(table), label,
- 0, 1, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
-
controls.yreal = gtk_adjustment_new(args->yreal/pow10(args->yexponent),
0.01, 10000, 1, 10, 0);
- spin = gtk_spin_button_new(GTK_ADJUSTMENT(controls.yreal), 1, 2);
- gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(spin), TRUE);
- gtk_table_attach(GTK_TABLE(table), spin,
- 1, 2, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ spin = gwy_table_attach_adjbar(table, row, _("_Y range:"), NULL,
+ controls.yreal, GWY_HSCALE_LOG);
+ gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 3);
unit = gwy_brick_get_si_unit_y(brick);
controls.yexponent
= gwy_combo_box_metric_unit_new(G_CALLBACK(yexponent_changed_cb),
&controls, -15, 6, unit,
args->yexponent);
- gtk_table_attach(GTK_TABLE(table), controls.yexponent, 2, 3, row, row+1,
- GTK_EXPAND | GTK_FILL | GTK_SHRINK, 0, 0, 0);
+ gtk_table_attach(GTK_TABLE(table), controls.yexponent,
+ 2, 3, row, row+1, GTK_FILL | GTK_SHRINK, 0, 0, 0);
controls.yunits = gtk_button_new_with_label(gwy_sgettext("verb|Change"));
g_object_set_data(G_OBJECT(controls.yunits), "id", (gpointer)"y");
gtk_table_attach(GTK_TABLE(table), controls.yunits,
- 3, 4, row, row+1,
- GTK_EXPAND | GTK_FILL | GTK_SHRINK, 0, 0, 0);
+ 3, 4, row, row+1, GTK_FILL | GTK_SHRINK, 0, 0, 0);
row++;
- label = gtk_label_new_with_mnemonic(_("_Z range:"));
- gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_table_attach(GTK_TABLE(table), label,
- 0, 1, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
-
controls.zreal = gtk_adjustment_new(args->zreal/pow10(args->zexponent),
0.01, 10000, 1, 10, 0);
- spin = gtk_spin_button_new(GTK_ADJUSTMENT(controls.zreal), 1, 2);
- gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(spin), TRUE);
- gtk_table_attach(GTK_TABLE(table), spin,
- 1, 2, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ spin = gwy_table_attach_adjbar(table, row, _("_Z range:"), NULL,
+ controls.zreal, GWY_HSCALE_LOG);
+ gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 3);
unit = gwy_brick_get_si_unit_z(brick);
controls.zexponent
= gwy_combo_box_metric_unit_new(G_CALLBACK(zexponent_changed_cb),
&controls, -15, 6, unit,
args->zexponent);
- gtk_table_attach(GTK_TABLE(table), controls.zexponent, 2, 3, row, row+1,
- GTK_EXPAND | GTK_FILL | GTK_SHRINK, 0, 0, 0);
+ gtk_table_attach(GTK_TABLE(table), controls.zexponent,
+ 2, 3, row, row+1, GTK_FILL | GTK_SHRINK, 0, 0, 0);
controls.zunits = gtk_button_new_with_label(gwy_sgettext("verb|Change"));
g_object_set_data(G_OBJECT(controls.zunits), "id", (gpointer)"z");
gtk_table_attach(GTK_TABLE(table), controls.zunits,
- 3, 4, row, row+1,
- GTK_EXPAND | GTK_FILL | GTK_SHRINK, 0, 0, 0);
+ 3, 4, row, row+1, GTK_FILL | GTK_SHRINK, 0, 0, 0);
row++;
/***** Lateral Offsets *****/
- label = gtk_label_new_with_mnemonic(_("_X offset:"));
- gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_table_attach(GTK_TABLE(table), label,
- 0, 1, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
-
controls.x0 = gtk_adjustment_new(args->x0/pow10(args->xexponent),
-10000, 10000, 1, 10, 0);
- spin = gtk_spin_button_new(GTK_ADJUSTMENT(controls.x0), 1, 2);
- gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(spin), TRUE);
- gtk_table_attach(GTK_TABLE(table), spin,
- 1, 2, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ spin = gwy_table_attach_adjbar(table, row, _("_X offset:"), NULL,
+ controls.x0, GWY_HSCALE_SQRT);
+ gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 2);
row++;
- label = gtk_label_new_with_mnemonic(_("_Y offset:"));
- gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_table_attach(GTK_TABLE(table), label,
- 0, 1, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
-
- controls.y0 = gtk_adjustment_new(args->y0/pow10(args->yexponent),
+ controls.y0 = gtk_adjustment_new(args->y0/pow10(args->xexponent),
-10000, 10000, 1, 10, 0);
- spin = gtk_spin_button_new(GTK_ADJUSTMENT(controls.y0), 1, 2);
- gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(spin), TRUE);
- gtk_table_attach(GTK_TABLE(table), spin,
- 1, 2, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
- gtk_table_set_row_spacing(GTK_TABLE(table), row, 8);
+ spin = gwy_table_attach_adjbar(table, row, _("_Y offset:"), NULL,
+ controls.y0, GWY_HSCALE_SQRT);
+ gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 2);
row++;
- label = gtk_label_new_with_mnemonic(_("_Z offset:"));
- gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_table_attach(GTK_TABLE(table), label,
- 0, 1, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
-
- controls.z0 = gtk_adjustment_new(args->z0/pow10(args->zexponent),
+ controls.z0 = gtk_adjustment_new(args->z0/pow10(args->xexponent),
-10000, 10000, 1, 10, 0);
- spin = gtk_spin_button_new(GTK_ADJUSTMENT(controls.z0), 1, 2);
- gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(spin), TRUE);
- gtk_table_attach(GTK_TABLE(table), spin,
- 1, 2, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
- gtk_table_set_row_spacing(GTK_TABLE(table), row, 8);
+ spin = gwy_table_attach_adjbar(table, row, _("_Z offset:"), NULL,
+ controls.z0, GWY_HSCALE_SQRT);
+ gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 2);
row++;
-
/***** Value Range *****/
- label = gwy_label_new_header(_("Value Range"));
- gtk_table_attach(GTK_TABLE(table), label,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ gtk_table_attach(GTK_TABLE(table), gwy_label_new_header(_("Value Range")),
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
- label = gtk_label_new_with_mnemonic(_("_Value range:"));
- gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_table_attach(GTK_TABLE(table), label,
- 0, 1, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
-
controls.wreal = gtk_adjustment_new(args->wreal/pow10(args->wexponent),
-10000, 10000, 1, 10, 0);
- spin = gtk_spin_button_new(GTK_ADJUSTMENT(controls.wreal), 1, 2);
- gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(spin), TRUE);
- gtk_table_attach(GTK_TABLE(table), spin,
- 1, 2, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ spin = gwy_table_attach_adjbar(table, row, _("_Value range:"), NULL,
+ controls.wreal, GWY_HSCALE_SQRT);
+ gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 2);
unit = gwy_brick_get_si_unit_w(brick);
controls.wexponent
= gwy_combo_box_metric_unit_new(G_CALLBACK(wexponent_changed_cb),
&controls, -15, 6, unit,
args->wexponent);
- gtk_table_attach(GTK_TABLE(table), controls.wexponent, 2, 3, row, row+1,
- GTK_EXPAND | GTK_FILL | GTK_SHRINK, 0, 0, 0);
+ gtk_table_attach(GTK_TABLE(table), controls.wexponent,
+ 2, 3, row, row+1, GTK_FILL | GTK_SHRINK, 0, 0, 0);
controls.wunits = gtk_button_new_with_label(gwy_sgettext("verb|Change"));
g_object_set_data(G_OBJECT(controls.wunits), "id", (gpointer)"w");
gtk_table_attach(GTK_TABLE(table), controls.wunits,
- 3, 4, row, row+1,
- GTK_EXPAND | GTK_FILL | GTK_SHRINK, 0, 0, 0);
+ 3, 4, row, row+1, GTK_FILL | GTK_SHRINK, 0, 0, 0);
row++;
/***** Value Shift *****/
- label = gtk_label_new_with_mnemonic(_("Value shi_ft:"));
- gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_table_attach(GTK_TABLE(table), label,
- 0, 1, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
-
controls.wshift = gtk_adjustment_new(args->wshift/pow10(args->wexponent),
-10000, 10000, 1, 10, 0);
- spin = gtk_spin_button_new(GTK_ADJUSTMENT(controls.wshift), 1, 2);
- gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(spin), TRUE);
- gtk_table_attach(GTK_TABLE(table), spin,
- 1, 2, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
- gtk_table_set_row_spacing(GTK_TABLE(table), row, 8);
+ spin = gwy_table_attach_adjbar(table, row, _("Value shi_ft:"), NULL,
+ controls.wshift, GWY_HSCALE_SQRT);
+ gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 2);
row++;
/***** Calibration Coefficients *****/
- label = gwy_label_new_header(_("Calibration Coefficients"));
- gtk_table_attach(GTK_TABLE(table), label,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ gtk_table_attach(GTK_TABLE(table),
+ gwy_label_new_header(_("Calibration Coefficients")),
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
controls.xratio = gtk_adjustment_new(args->xratio, 0.001, 1000, 0.1, 1, 0);
- spin = gwy_table_attach_spinbutton(table, row,
- _("_X calibration factor:"), "",
- controls.xratio);
- controls.xpower10 = gwy_table_get_child_widget(table, row, 2);
+ spin = gwy_table_attach_adjbar(table, row, _("_X calibration factor:"), " ",
+ controls.xratio, GWY_HSCALE_LOG);
gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 3);
+ controls.xpower10 = gwy_table_hscale_get_units(controls.xratio);
row++;
controls.yratio = gtk_adjustment_new(args->yratio, 0.001, 1000, 0.1, 1, 0);
- spin = gwy_table_attach_spinbutton(table, row,
- _("_Y calibration factor:"), "",
- controls.yratio);
- controls.ypower10 = gwy_table_get_child_widget(table, row, 2);
+ spin = gwy_table_attach_adjbar(table, row, _("_Y calibration factor:"), " ",
+ controls.yratio, GWY_HSCALE_LOG);
gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 3);
+ controls.ypower10 = gwy_table_hscale_get_units(controls.xratio);
row++;
controls.zratio = gtk_adjustment_new(args->zratio, -1000, 1000, 0.1, 1, 0);
- spin = gwy_table_attach_spinbutton(table, row,
- _("_Z calibration factor:"), "",
- controls.zratio);
- controls.zpower10 = gwy_table_get_child_widget(table, row, 2);
+ spin = gwy_table_attach_adjbar(table, row, _("_Z calibration factor:"), " ",
+ controls.zratio, GWY_HSCALE_LOG);
gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 3);
+ controls.zpower10 = gwy_table_hscale_get_units(controls.zratio);
row++;
controls.wratio = gtk_adjustment_new(args->wratio, -1000, 1000, 0.1, 1, 0);
- spin = gwy_table_attach_spinbutton(table, row,
- _("_Value calibration factor:"), "",
- controls.wratio);
- controls.wpower10 = gwy_table_get_child_widget(table, row, 2);
+ spin = gwy_table_attach_adjbar(table, row,
+ _("_Value calibration factor:"), " ",
+ controls.wratio, GWY_HSCALE_SQRT);
gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 3);
+ controls.wpower10 = gwy_table_hscale_get_units(controls.zratio);
row++;
-
g_signal_connect(controls.xreal, "value-changed",
G_CALLBACK(xreal_changed_cb), &controls);
g_signal_connect(controls.yreal, "value-changed",
diff --git a/modules/volume/volume_extract.c b/modules/volume/volume_extract.c
index eb11740..0dc086b 100644
--- a/modules/volume/volume_extract.c
+++ b/modules/volume/volume_extract.c
@@ -1,6 +1,6 @@
/*
- * @(#) $Id: volume_extract.c 18729 2016-07-19 15:26:29Z yeti-dn $
- * Copyright (C) 2003 David Necas (Yeti), Petr Klapetek.
+ * @(#) $Id: volume_extract.c 20007 2017-07-02 20:42:02Z yeti-dn $
+ * Copyright (C) 2013 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
* This program is free software; you can redistribute it and/or modify
@@ -136,70 +136,63 @@ typedef struct {
cairo_surface_t *image;
} ExtractControls;
-static gboolean module_register (void);
-static void extract (GwyContainer *data,
- GwyRunType run);
-static void extract_dialog (ExtractArgs *args,
- GwyContainer *data,
- GwyBrick *brick,
- gint id);
-
-static void extract_dialog_update_controls (ExtractControls *controls,
- ExtractArgs *args);
-static void extract_dialog_update_values (ExtractControls *controls,
- ExtractArgs *args);
-static void extract_load_data (ExtractControls *controls,
- ExtractArgs *args);
-static void extract_invalidate (ExtractControls *controls);
-static void update_change_cb (ExtractControls *controls);
-static void gupdate_change_cb (ExtractControls *controls);
-
-static void preview (ExtractControls *controls,
- ExtractArgs *args);
-static void extract_load_args (GwyContainer *container,
- ExtractArgs *args);
-static void extract_save_args (GwyContainer *container,
- ExtractArgs *args);
-static void type_changed_cb (GtkWidget *combo,
- ExtractControls *controls);
-static void gtype_changed_cb (GtkWidget *combo,
- ExtractControls *controls);
-static void page_switched (ExtractControls *controls,
- GtkNotebookPage *page,
- gint pagenum);
-static void graph_selection_finished_cb (GwySelection *selection,
- ExtractControls *controls);
-static void p3d_build (ExtractControls *controls,
- ExtractArgs *args);
-static void p3d_prepare_wdata (ExtractControls *controls,
- ExtractArgs *args);
-static void extract_zscale_cb (ExtractControls *controls);
-static void extract_opacity_cb (ExtractControls *controls);
-static void extract_threshold_cb (ExtractControls *controls);
-//static gboolean p3d_on_draw_event (GtkWidget *widget,
-// cairo_t *cr,
-// ExtractControls *controls);
-static gboolean p3d_on_draw_event (GtkWidget *widget,
- GdkEventExpose *event,
- ExtractControls *controls);
-static gboolean p3d_clicked (GtkWidget *widget,
- GdkEventButton *event,
- ExtractControls *controls);
-static gboolean p3d_released (GtkWidget *widget,
- GdkEventButton *event,
- ExtractControls *controls);
-static gboolean p3d_moved (GtkWidget *widget,
- GdkEventMotion *event,
- ExtractControls *controls);
-static void p3d_xview_cb (ExtractControls *controls);
-static void p3d_yview_cb (ExtractControls *controls);
-static void p3d_zview_cb (ExtractControls *controls);
-static void perspective_change_cb (ExtractControls *controls);
-static void render_change_cb (ExtractControls *controls);
-
-static void p3d_set_axes (ExtractControls *controls);
-static void p3d_add_wireframe (ExtractControls *controls);
-
+static gboolean module_register (void);
+static void extract (GwyContainer *data,
+ GwyRunType run);
+static void extract_dialog (ExtractArgs *args,
+ GwyContainer *data,
+ GwyBrick *brick,
+ gint id);
+static void extract_dialog_update_controls(ExtractControls *controls,
+ ExtractArgs *args);
+static void extract_dialog_update_values (ExtractControls *controls,
+ ExtractArgs *args);
+static void extract_load_data (ExtractControls *controls,
+ ExtractArgs *args);
+static void extract_invalidate (ExtractControls *controls);
+static void update_change_cb (ExtractControls *controls);
+static void gupdate_change_cb (ExtractControls *controls);
+static void preview (ExtractControls *controls,
+ ExtractArgs *args);
+static void extract_load_args (GwyContainer *container,
+ ExtractArgs *args);
+static void extract_save_args (GwyContainer *container,
+ ExtractArgs *args);
+static void type_changed_cb (GtkWidget *combo,
+ ExtractControls *controls);
+static void gtype_changed_cb (GtkWidget *combo,
+ ExtractControls *controls);
+static void page_switched (ExtractControls *controls,
+ GtkNotebookPage *page,
+ gint pagenum);
+static void graph_selection_finished_cb (GwySelection *selection,
+ ExtractControls *controls);
+static void p3d_build (ExtractControls *controls,
+ ExtractArgs *args);
+static void p3d_prepare_wdata (ExtractControls *controls,
+ ExtractArgs *args);
+static void extract_zscale_cb (ExtractControls *controls);
+static void extract_opacity_cb (ExtractControls *controls);
+static void extract_threshold_cb (ExtractControls *controls);
+static gboolean p3d_expose (GtkWidget *widget,
+ GdkEventExpose *event,
+ ExtractControls *controls);
+static gboolean p3d_clicked (GtkWidget *widget,
+ GdkEventButton *event,
+ ExtractControls *controls);
+static gboolean p3d_released (GtkWidget *widget,
+ GdkEventButton *event,
+ ExtractControls *controls);
+static gboolean p3d_moved (GtkWidget *widget,
+ GdkEventMotion *event,
+ ExtractControls *controls);
+static void p3d_xview_cb (ExtractControls *controls);
+static void p3d_yview_cb (ExtractControls *controls);
+static void p3d_zview_cb (ExtractControls *controls);
+static void perspective_change_cb (ExtractControls *controls);
+static void render_change_cb (ExtractControls *controls);
+static void p3d_set_axes (ExtractControls *controls);
+static void p3d_add_wireframe (ExtractControls *controls);
static const ExtractArgs extract_defaults = {
CUT_DIRX,
@@ -227,14 +220,14 @@ static GwyModuleInfo module_info = {
"2013",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, volume_extract)
static gboolean
module_register(void)
{
gwy_volume_func_register("extract",
(GwyVolumeFunc)&extract,
- N_("/Show and _extract..."),
+ N_("/Show and _Extract..."),
NULL,
EXTRACT_RUN_MODES,
GWY_MENU_FLAG_VOLUME,
@@ -280,7 +273,7 @@ extract_dialog(ExtractArgs *args,
{ N_("Z direction"), GRAPH_DIRZ, },
};
- GtkWidget *dialog, *table, *hbox, *label, *notebook, *button;
+ GtkWidget *dialog, *table, *hbox, *notebook, *button, *hbox2;
GwyDataField *dfield;
GwyDataLine *dline, *calibration;
ExtractControls controls;
@@ -346,7 +339,7 @@ extract_dialog(ExtractArgs *args,
g_signal_connect_swapped(notebook, "switch-page",
G_CALLBACK(page_switched), &controls);
- ///////////////////////////// projections page ///////////////////////////////////////
+ /***** Projections *****/
hbox = gtk_hbox_new(FALSE, 2);
gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
@@ -379,45 +372,39 @@ extract_dialog(ExtractArgs *args,
gtk_box_pack_start(GTK_BOX(hbox), controls.view, FALSE, FALSE, 4);
- table = gtk_table_new(11, 4, FALSE);
+ table = gtk_table_new(7, 3, FALSE);
gtk_table_set_row_spacings(GTK_TABLE(table), 2);
gtk_table_set_col_spacings(GTK_TABLE(table), 6);
gtk_container_set_border_width(GTK_CONTAINER(table), 4);
gtk_box_pack_start(GTK_BOX(hbox), table, TRUE, TRUE, 4);
row = 0;
- controls.xpos = gtk_adjustment_new(args->xpos,
- 0.0, 100, 1, 10, 0);
- gwy_table_attach_hscale(table, row++, _("X position"), "%",
- controls.xpos, 0);
+
+ controls.xpos = gtk_adjustment_new(args->xpos, 0.0, 100, 1, 10, 0);
+ gwy_table_attach_adjbar(table, row++, _("X position"), "%",
+ controls.xpos, GWY_HSCALE_LINEAR);
g_signal_connect_swapped(controls.xpos, "value-changed",
G_CALLBACK(extract_invalidate), &controls);
- controls.ypos = gtk_adjustment_new(args->ypos,
- 0.0, 100, 1, 10, 0);
- gwy_table_attach_hscale(table, row++, _("Y position"), "%",
- controls.ypos, 0);
+ controls.ypos = gtk_adjustment_new(args->ypos, 0.0, 100, 1, 10, 0);
+ gwy_table_attach_adjbar(table, row++, _("Y position"), "%",
+ controls.ypos, GWY_HSCALE_LINEAR);
g_signal_connect_swapped(controls.ypos, "value-changed",
G_CALLBACK(extract_invalidate), &controls);
- controls.zpos = gtk_adjustment_new(args->zpos,
- 0.0, 100, 1, 10, 0);
- gwy_table_attach_hscale(table, row++, _("Z position"), "%",
- controls.zpos, 0);
+ controls.zpos = gtk_adjustment_new(args->zpos, 0.0, 100, 1, 10, 0);
+ gwy_table_attach_adjbar(table, row++, _("Z position"), "%",
+ controls.zpos, GWY_HSCALE_LINEAR);
g_signal_connect_swapped(controls.zpos, "value-changed",
G_CALLBACK(extract_invalidate), &controls);
- label = gtk_label_new(_("Shown cut direction:"));
- gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_table_attach(GTK_TABLE(table), label,
- 0, 4, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
- row++;
-
- controls.type
- = gwy_enum_combo_box_new(types, G_N_ELEMENTS(types),
- G_CALLBACK(type_changed_cb), &controls,
- args->type, TRUE);
- gwy_table_attach_hscale(table, row, _("Show mode:"), NULL,
- GTK_OBJECT(controls.type), GWY_HSCALE_WIDGET);
+ gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
+ controls.type = gwy_enum_combo_box_new(types, G_N_ELEMENTS(types),
+ G_CALLBACK(type_changed_cb),
+ &controls,
+ args->type, TRUE);
+ gwy_table_attach_adjbar(table, row, _("Shown cut direction:"), NULL,
+ GTK_OBJECT(controls.type),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
type_changed_cb(controls.type, &controls);
row++;
@@ -425,32 +412,34 @@ extract_dialog(ExtractArgs *args,
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.update),
args->update);
gtk_table_attach(GTK_TABLE(table), controls.update,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect_swapped(controls.update, "toggled",
G_CALLBACK(update_change_cb), &controls);
row++;
+ gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
controls.info = gtk_label_new(_("No data loaded"));
gtk_misc_set_alignment(GTK_MISC(controls.info), 0.0, 0.5);
gtk_table_attach(GTK_TABLE(table), controls.info,
- 0, 4, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
- ///////////////////////////// graphs page ///////////////////////////////////////
+ /***** Graphs page *****/
hbox = gtk_hbox_new(FALSE, 2);
- gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
- hbox,
- gtk_label_new(_("Graphs")));
+ gtk_notebook_append_page(GTK_NOTEBOOK(notebook), hbox,
+ gtk_label_new(_("Graphs")));
dfield = gwy_data_field_new(PREVIEW_SIZE, PREVIEW_SIZE,
PREVIEW_SIZE, PREVIEW_SIZE,
TRUE);
gwy_container_set_object_by_name(controls.mydata, "/1/data", dfield);
- if (data) gwy_app_sync_data_items(data, controls.mydata, id, 1, FALSE,
- GWY_DATA_ITEM_PALETTE,
- 0);
+ if (data) {
+ gwy_app_sync_data_items(data, controls.mydata, id, 1, FALSE,
+ GWY_DATA_ITEM_PALETTE,
+ 0);
+ }
controls.gview = gwy_data_view_new(controls.mydata);
layer = gwy_layer_basic_new();
@@ -473,12 +462,13 @@ extract_dialog(ExtractArgs *args,
gtk_box_pack_start(GTK_BOX(hbox), controls.gview, FALSE, FALSE, 4);
- table = gtk_table_new(11, 4, FALSE);
+ table = gtk_table_new(3, 4, FALSE);
gtk_table_set_row_spacings(GTK_TABLE(table), 2);
gtk_table_set_col_spacings(GTK_TABLE(table), 6);
gtk_container_set_border_width(GTK_CONTAINER(table), 4);
gtk_box_pack_start(GTK_BOX(hbox), table, TRUE, TRUE, 4);
row = 0;
+
controls.gmodel = gwy_graph_model_new();
controls.graph = gwy_graph_new(controls.gmodel);
gwy_graph_enable_user_input(GWY_GRAPH(controls.graph), FALSE);
@@ -487,18 +477,14 @@ extract_dialog(ExtractArgs *args,
0, 4, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
row++;
- label = gtk_label_new(_("Graph cut direction:"));
- gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_table_attach(GTK_TABLE(table), label,
- 0, 4, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
- row++;
-
+ gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
controls.gtype
= gwy_enum_combo_box_new(gtypes, G_N_ELEMENTS(gtypes),
G_CALLBACK(gtype_changed_cb), &controls,
args->gtype, TRUE);
- gwy_table_attach_hscale(table, row, _("Show mode:"), NULL,
- GTK_OBJECT(controls.gtype), GWY_HSCALE_WIDGET);
+ gwy_table_attach_adjbar(table, row, _("Graph cut direction:"), NULL,
+ GTK_OBJECT(controls.gtype),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
gtype_changed_cb(controls.gtype, &controls);
row++;
@@ -506,29 +492,32 @@ extract_dialog(ExtractArgs *args,
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.gupdate),
args->update);
gtk_table_attach(GTK_TABLE(table), controls.gupdate,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect_swapped(controls.gupdate, "toggled",
G_CALLBACK(gupdate_change_cb), &controls);
row++;
+ gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
controls.ginfo = gtk_label_new(_("No data loaded"));
gtk_misc_set_alignment(GTK_MISC(controls.ginfo), 0.0, 0.5);
gtk_table_attach(GTK_TABLE(table), controls.ginfo,
- 0, 4, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
- ///////////////////////////// 3D page ///////////////////////////////////////
+ /***** 3D *****/
hbox = gtk_hbox_new(FALSE, 2);
- gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
- hbox,
- gtk_label_new(_("3D view")));
+ gtk_notebook_append_page(GTK_NOTEBOOK(notebook), hbox,
+ gtk_label_new(_("3D view")));
controls.drawarea = gtk_drawing_area_new();
- gtk_widget_add_events(controls.drawarea, GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK);
+ gtk_widget_add_events(controls.drawarea,
+ GDK_BUTTON_PRESS_MASK
+ | GDK_BUTTON_RELEASE_MASK
+ | GDK_POINTER_MOTION_MASK);
- g_signal_connect(GTK_DRAWING_AREA(controls.drawarea), "expose-event", //should be "draw" for newer Gtk+
- G_CALLBACK(p3d_on_draw_event), &controls);
+ g_signal_connect(GTK_DRAWING_AREA(controls.drawarea), "expose-event",
+ G_CALLBACK(p3d_expose), &controls);
g_signal_connect(controls.drawarea, "button-press-event",
G_CALLBACK(p3d_clicked), &controls);
g_signal_connect(controls.drawarea, "button-release-event",
@@ -539,77 +528,74 @@ extract_dialog(ExtractArgs *args,
gtk_box_pack_start(GTK_BOX(hbox), controls.drawarea, FALSE, FALSE, 4);
gtk_widget_set_size_request(controls.drawarea, PREVIEW_SIZE, PREVIEW_SIZE);
- table = gtk_table_new(11, 4, FALSE);
+ table = gtk_table_new(7, 4, FALSE);
gtk_table_set_row_spacings(GTK_TABLE(table), 2);
gtk_table_set_col_spacings(GTK_TABLE(table), 6);
gtk_container_set_border_width(GTK_CONTAINER(table), 4);
gtk_box_pack_start(GTK_BOX(hbox), table, TRUE, TRUE, 4);
row = 0;
- controls.size = gtk_adjustment_new(args->size,
- 1, 100, 1, 10, 0);
- gwy_table_attach_hscale(table, row++, _("Zoom"), "%",
- controls.size, 0);
+ controls.size = gtk_adjustment_new(args->size, 1, 100, 1, 10, 0);
+ gwy_table_attach_adjbar(table, row++, _("Zoom"), "%",
+ controls.size, GWY_HSCALE_SQRT);
g_signal_connect_swapped(controls.size, "value-changed",
G_CALLBACK(extract_invalidate), &controls);
row++;
- controls.threshold = gtk_adjustment_new(args->threshold,
- 1, 100, 1, 10, 0);
- gwy_table_attach_hscale(table, row++, _("Wireframe threshold"), "%",
- controls.threshold, 0);
+ controls.threshold = gtk_adjustment_new(args->threshold, 1, 100, 1, 10, 0);
+ gwy_table_attach_adjbar(table, row++, _("Wireframe threshold"), "%",
+ controls.threshold, GWY_HSCALE_LINEAR);
g_signal_connect_swapped(controls.threshold, "value-changed",
G_CALLBACK(extract_threshold_cb), &controls);
row++;
- controls.zscale = gtk_adjustment_new(args->zscale,
- 1, 100, 1, 10, 0);
- gwy_table_attach_hscale(table, row++, _("Z scale"), "%",
- controls.zscale, 0);
+ controls.zscale = gtk_adjustment_new(args->zscale, 1, 100, 1, 10, 0);
+ gwy_table_attach_adjbar(table, row++, _("Z scale"), "%",
+ controls.zscale, GWY_HSCALE_SQRT);
g_signal_connect_swapped(controls.zscale, "value-changed",
G_CALLBACK(extract_zscale_cb), &controls);
row++;
- controls.opacity = gtk_adjustment_new(args->opacity,
- 1, 100, 1, 10, 0);
- gwy_table_attach_hscale(table, row++, _("Opacity scale"), "%",
- controls.opacity, 0);
+ controls.opacity = gtk_adjustment_new(args->opacity, 1, 100, 1, 10, 0);
+ gwy_table_attach_adjbar(table, row++, _("Opacity scale"), "%",
+ controls.opacity, GWY_HSCALE_LINEAR);
g_signal_connect_swapped(controls.opacity, "value-changed",
G_CALLBACK(extract_opacity_cb), &controls);
row++;
- controls.perspective = gtk_check_button_new_with_mnemonic(_("apply perspective"));
+ controls.perspective = gtk_check_button_new_with_label(_("Apply perspective"));
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.perspective),
args->perspective);
gtk_table_attach(GTK_TABLE(table), controls.perspective,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect_swapped(controls.perspective, "toggled",
G_CALLBACK(perspective_change_cb), &controls);
row++;
- controls.render = gtk_check_button_new_with_mnemonic(_("instant 3D render"));
+ controls.render = gtk_check_button_new_with_label(_("Instant 3D render"));
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.render),
args->render);
gtk_table_attach(GTK_TABLE(table), controls.render,
- 0, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect_swapped(controls.render, "toggled",
G_CALLBACK(render_change_cb), &controls);
row++;
+ hbox2 = gtk_hbox_new(TRUE, 2);
+ gtk_table_attach(GTK_TABLE(table), hbox2,
+ 0, 1, row, row+1, GTK_FILL, 0, 0, 0);
+
button = gtk_button_new_with_mnemonic(_("X view"));
- gtk_table_attach(GTK_TABLE(table), button,
- 0, 1, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ gtk_box_pack_start(GTK_BOX(hbox2), button, TRUE, TRUE, 0);
g_signal_connect_swapped(button, "clicked",
G_CALLBACK(p3d_xview_cb), &controls);
button = gtk_button_new_with_mnemonic(_("Y view"));
- gtk_table_attach(GTK_TABLE(table), button,
- 1, 2, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ gtk_box_pack_start(GTK_BOX(hbox2), button, TRUE, TRUE, 0);
g_signal_connect_swapped(button, "clicked",
G_CALLBACK(p3d_yview_cb), &controls);
button = gtk_button_new_with_mnemonic(_("Z view"));
- gtk_table_attach(GTK_TABLE(table), button,
- 2, 3, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ gtk_box_pack_start(GTK_BOX(hbox2), button, TRUE, TRUE, 0);
g_signal_connect_swapped(button, "clicked",
G_CALLBACK(p3d_zview_cb), &controls);
@@ -1460,9 +1446,9 @@ raysum(ExtractControls *controls, gdouble pos[3], gdouble dir[3], gdouble min, g
}
static gboolean
-//p3d_on_draw_event(GtkWidget *widget, cairo_t *cr,
-// ExtractControls *controls)
-p3d_on_draw_event(GtkWidget *widget, G_GNUC_UNUSED GdkEventExpose *event, ExtractControls *controls)
+p3d_expose(GtkWidget *widget,
+ G_GNUC_UNUSED GdkEventExpose *event,
+ ExtractControls *controls)
{
cairo_t *ci, *cr = gdk_cairo_create(GDK_WINDOW(widget->window));
gdouble sx, sy;
@@ -1942,41 +1928,32 @@ p3d_prepare_wdata(ExtractControls *controls, ExtractArgs *args)
}
static gboolean
-gothere(gdouble *data, gdouble *vdata, gint xres, gint yres, gint col, gint row, gint dir, gdouble threshold)
+gothere(gdouble *data, gdouble *vdata, gint xres, gint yres, gint col, gint row, gdouble threshold)
{
- if (vdata[col+xres*row] == 1) return FALSE;
- if (row < 1 || row>=(yres-1)) return FALSE;
- if (col < 1 || col>=(xres-1)) return FALSE;
-
- if (dir == 0) /*y const*/ {
- if ((data[row + yres*col]>threshold) &&
- ((data[row-1 + yres*col]<threshold) || (data[row + yres*(col-1)]<threshold)
- || (data[row+1 + yres*col]<threshold) || (data[row + yres*(col+1)]<threshold)
- || (data[row+1 + yres*(col+1)]<threshold) || (data[row-1 + yres*(col-1)]<threshold)
- || (data[row+1 + yres*(col-1)]<threshold) || (data[row-1 + yres*(col+1)]<threshold))) return TRUE;
-
- } else if (dir == 1) /*y const; HUH? shouldn't this be x const or something?*/ {
- if (data[col + xres*row]>threshold &&
- (data[col-1 + xres*row]<threshold || data[col + xres*(row-1)]<threshold
- || data[col+1 + xres*row]<threshold || data[col + xres*(row+1)]<threshold
- || data[col+1 + xres*(row+1)]<threshold || data[col-1 + xres*(row-1)]<threshold
- || data[col+1 + xres*(row-1)]<threshold || data[col-1 + xres*(row+1)]<threshold)) return TRUE;
- } else {
- if (data[col + xres*row]>threshold &&
- (data[col-1 + xres*row]<threshold || data[col + xres*(row-1)]<threshold
- || data[col+1 + xres*row]<threshold || data[col + xres*(row+1)]<threshold
- || data[col+1 + xres*(row+1)]<threshold || data[col-1 + xres*(row-1)]<threshold
- || data[col+1 + xres*(row-1)]<threshold || data[col-1 + xres*(row+1)]<threshold)) return TRUE;
- }
-
- vdata[col+xres*row] = 1;
+ guint k = row + yres*col;
+
+ if (vdata[k] == 1)
+ return FALSE;
+ if (row < 1 || row >= yres-1)
+ return FALSE;
+ if (col < 1 || col >= xres-1)
+ return FALSE;
+
+ if ((data[k] > threshold) &&
+ ((data[k-1] < threshold) || (data[k-yres] < threshold)
+ || (data[k+1] < threshold) || (data[k+yres] < threshold)
+ || (data[k+yres+1] < threshold) || (data[k-yres-1] < threshold)
+ || (data[k-yres+1] < threshold) || (data[k+yres-1] < threshold)))
+ return TRUE;
+
+ vdata[k] = 1;
return FALSE;
-
}
static void
visitme(ExtractControls *controls, gint *actual_nps, gdouble *data, gdouble *vdata, gint xres, gint yres, gint zres, gint col, gint row, gint dir, gint tval, gboolean *move, gdouble threshold)
{
+ gint first_res, second_res;
/*detect ad add a segment of necessary*/
//printf("pos %d %d ", col, row);
@@ -1993,11 +1970,13 @@ visitme(ExtractControls *controls, gint *actual_nps, gdouble *data, gdouble *vda
controls->px[controls->nps] = 2*controls->bwidth*(gdouble)tval/(gdouble)xres - controls->bwidth;
controls->py[controls->nps] = 2*controls->bheight*(gdouble)col/(gdouble)yres - controls->bheight;
controls->pz[controls->nps] = 2*controls->bdepth*(gdouble)row/(gdouble)zres - controls->bdepth;
- } else if (dir==1) /*y const*/ {
+ }
+ else if (dir == 1) /*y const*/ {
controls->px[controls->nps] = 2*controls->bwidth*(gdouble)col/(gdouble)xres - controls->bwidth;
controls->py[controls->nps] = 2*controls->bheight*(gdouble)tval/(gdouble)yres - controls->bheight;
controls->pz[controls->nps] = 2*controls->bdepth*(gdouble)row/(gdouble)zres - controls->bdepth;
- } else {
+ }
+ else {
controls->px[controls->nps] = 2*controls->bwidth*(gdouble)col/(gdouble)xres - controls->bwidth;
controls->py[controls->nps] = 2*controls->bheight*(gdouble)row/(gdouble)yres - controls->bheight;
controls->pz[controls->nps] = 2*controls->bdepth*(gdouble)tval/(gdouble)zres - controls->bdepth;
@@ -2011,24 +1990,36 @@ visitme(ExtractControls *controls, gint *actual_nps, gdouble *data, gdouble *vda
controls->nps += 1;
vdata[col+xres*row] = 1;
+ if (dir == 0) {
+ first_res = yres;
+ second_res = zres;
+ }
+ else if (dir == 1) {
+ first_res = xres;
+ second_res = zres;
+ }
+ else {
+ first_res = xres;
+ second_res = yres;
+ }
+
/*go to neighbor positions*/
- if (gothere(data, vdata, xres, yres, col+1, row, dir, threshold))
+ if (gothere(data, vdata, first_res, second_res, col+1, row, threshold))
visitme(controls, actual_nps,data, vdata, xres, yres, zres, col+1, row, dir, tval, move, threshold);
- else if (gothere(data, vdata, xres, yres, col-1, row, dir, threshold))
- visitme(controls, actual_nps, data, vdata, xres, yres, zres, col-1, row, dir, tval, move, threshold);
- else if (gothere(data, vdata, xres, yres, col, row+1, dir, threshold))
- visitme(controls, actual_nps, data, vdata, xres, yres, zres, col, row+1, dir, tval, move, threshold);
- else if (gothere(data, vdata, xres, yres, col, row-1, dir, threshold))
- visitme(controls, actual_nps, data, vdata, xres, yres, zres, col, row-1, dir, tval, move, threshold);
- else if (gothere(data, vdata, xres, yres, col+1, row+1, dir, threshold))
- visitme(controls, actual_nps, data, vdata, xres, yres, zres, col+1, row+1, dir, tval, move, threshold);
- else if (gothere(data, vdata, xres, yres, col-1, row-1, dir, threshold))
- visitme(controls, actual_nps, data, vdata, xres, yres, zres, col-1, row-1, dir, tval, move, threshold);
- else if (gothere(data, vdata, xres, yres, col+1, row-1, dir, threshold))
- visitme(controls, actual_nps, data, vdata, xres, yres, zres, col+1, row-1, dir, tval, move, threshold);
- else if (gothere(data, vdata, xres, yres, col-1, row+1, dir, threshold))
- visitme(controls, actual_nps, data, vdata, xres, yres, zres, col-1, row+1, dir, tval, move, threshold);
-
+ else if (gothere(data, vdata, first_res, second_res, col-1, row, threshold))
+ visitme(controls, actual_nps, data, vdata, xres, yres, zres, col-1, row, dir, tval, move, threshold);
+ else if (gothere(data, vdata, first_res, second_res, col, row+1, threshold))
+ visitme(controls, actual_nps, data, vdata, xres, yres, zres, col, row+1, dir, tval, move, threshold);
+ else if (gothere(data, vdata, first_res, second_res, col, row-1, threshold))
+ visitme(controls, actual_nps, data, vdata, xres, yres, zres, col, row-1, dir, tval, move, threshold);
+ else if (gothere(data, vdata, first_res, second_res, col+1, row+1, threshold))
+ visitme(controls, actual_nps, data, vdata, xres, yres, zres, col+1, row+1, dir, tval, move, threshold);
+ else if (gothere(data, vdata, first_res, second_res, col-1, row-1, threshold))
+ visitme(controls, actual_nps, data, vdata, xres, yres, zres, col-1, row-1, dir, tval, move, threshold);
+ else if (gothere(data, vdata, first_res, second_res, col+1, row-1, threshold))
+ visitme(controls, actual_nps, data, vdata, xres, yres, zres, col+1, row-1, dir, tval, move, threshold);
+ else if (gothere(data, vdata, first_res, second_res, col-1, row+1, threshold))
+ visitme(controls, actual_nps, data, vdata, xres, yres, zres, col-1, row+1, dir, tval, move, threshold);
}
static void
@@ -2055,8 +2046,8 @@ p3d_add_wireframe(ExtractControls *controls)
threshold = gwy_brick_get_min(controls->brick)
+ (gwy_brick_get_max(controls->brick) - gwy_brick_get_min(controls->brick))/100.0*controls->args->threshold;
- for (i=0; i<xres; i+=spacing) // why use 40 as a magic number - choose xres / 15 or something like that?
- {
+ for (i = 0; i < xres; i += spacing) { // why use 40 as a magic number - choose xres / 15 or something like that?
+ /* Extract yz plane. */
gwy_brick_extract_plane(controls->brick, cut, i, 0, 0, -1, yres, zres, FALSE);
data = gwy_data_field_get_data(cut);
gwy_data_field_clear(visited);
@@ -2064,12 +2055,10 @@ p3d_add_wireframe(ExtractControls *controls)
gwy_data_field_threshold(cut, threshold, 0, 1);
move = 1;
/*here comes the algorithm*/
- for (col=1; col<zres-1; col++)
- {
- for (row=1; row<yres-1; row++)
- {
+ for (col=1; col < zres-1; col++) {
+ for (row=1; row < yres-1; row++) {
move = 1;
- if (gothere(data, vdata, zres, yres, col, row, 0, threshold)) {
+ if (gothere(data, vdata, yres, zres, col, row, threshold)) {
visitme(controls, &actual_nps, data, vdata, xres, yres, zres, col, row, 0, i, &move, threshold);
}
}
@@ -2078,8 +2067,8 @@ p3d_add_wireframe(ExtractControls *controls)
gwy_data_field_resample(visited, xres, zres, GWY_INTERPOLATION_NONE);
- for (i=0; i<yres; i+=spacing)
- {
+ for (i = 0; i < yres; i += spacing) {
+ /* Extract xz plane. */
gwy_brick_extract_plane(controls->brick, cut, 0, i, 0, xres, -1, zres, FALSE);
data = gwy_data_field_get_data(cut);
@@ -2091,21 +2080,19 @@ p3d_add_wireframe(ExtractControls *controls)
move = 1;
/*here comes the algorithm*/
- for (col=1; col<xres; col++)
- {
- for (row=1; row<zres; row++)
- {
- move = 1;
- if (gothere(data, vdata, xres, yres, col, row, 1, threshold))
- visitme(controls, &actual_nps, data, vdata, xres, yres, zres, col, row, 1, i, &move, threshold);
+ for (col = 1; col < xres; col++) {
+ for (row = 1; row < zres; row++) {
+ move = 1;
+ if (gothere(data, vdata, xres, zres, col, row, threshold))
+ visitme(controls, &actual_nps, data, vdata, xres, yres, zres, col, row, 1, i, &move, threshold);
}
}
}
gwy_data_field_resample(visited, xres, yres, GWY_INTERPOLATION_NONE);
- for (i=0; i<zres; i+=spacing)
- {
+ for (i = 0; i < zres; i += spacing) {
+ /* Extract xy plane. */
gwy_brick_extract_plane(controls->brick, cut, 0, 0, i, xres, yres, -1, FALSE);
data = gwy_data_field_get_data(cut);
@@ -2117,26 +2104,20 @@ p3d_add_wireframe(ExtractControls *controls)
move = 1;
/*here comes the algorithm*/
- for (col=1; col<xres; col++)
- {
- for (row=1; row<yres; row++)
- {
- move = 1;
- if (gothere(data, vdata, xres, yres, col, row, 2, threshold))
- visitme(controls, &actual_nps, data, vdata, xres, yres, zres, col, row, 2, i, &move, threshold);
+ for (col = 1; col < xres; col++) {
+ for (row = 1; row < yres; row++) {
+ move = 1;
+ if (gothere(data, vdata, xres, yres, col, row, threshold))
+ visitme(controls, &actual_nps, data, vdata, xres, yres, zres, col, row, 2, i, &move, threshold);
}
}
}
// printf("we have %d segments at the end\nRunning simplification:\n", controls->nps);
- controls->nps = simplify(controls->px, controls->py, controls->pz, controls->ps, controls->nps);
-
- if (controls->wpx) g_free(controls->wpx);
- if (controls->wpy) g_free(controls->wpy);
- if (controls->wpz) g_free(controls->wpz);
-
- controls->wpx = g_new(gdouble, controls->nps);
- controls->wpy = g_new(gdouble, controls->nps);
- controls->wpz = g_new(gdouble, controls->nps);
+ controls->nps = simplify(controls->px, controls->py, controls->pz,
+ controls->ps, controls->nps);
+ controls->wpx = g_renew(gdouble, controls->wpx, controls->nps);
+ controls->wpy = g_renew(gdouble, controls->wpy, controls->nps);
+ controls->wpz = g_renew(gdouble, controls->wpz, controls->nps);
// printf("we have %d segments after simplification\n", controls->nps);
}
diff --git a/modules/volume/volume_fdfit.c b/modules/volume/volume_fdfit.c
index b3d5036..9e05a05 100644
--- a/modules/volume/volume_fdfit.c
+++ b/modules/volume/volume_fdfit.c
@@ -198,19 +198,19 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Evaluate volume force-distance data"),
"Petr Klapetek <klapetek at gwyddion.net>",
- "1.0",
+ "1.1",
"David Nečas (Yeti) & Petr Klapetek",
"2013",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, volume_fdfit)
static gboolean
module_register(void)
{
gwy_volume_func_register("volume_fdfit",
(GwyVolumeFunc)&volfit,
- N_("/_Evaluate FD data..."),
+ N_("/_Evaluate FD Data..."),
GWY_STOCK_VOLUME_FD,
VOLFIT_RUN_MODES,
GWY_MENU_FLAG_VOLUME,
@@ -264,7 +264,7 @@ volfit(GwyContainer *data, GwyRunType run)
static void
volfit_dialog(VolfitArgs *args)
{
- GtkWidget *label, *dialog, *hbox, *hbox2, *table, *align, *expander, *scroll, *spin;
+ GtkWidget *label, *dialog, *hbox, *hbox2, *table, *align, *expander, *scroll;
GtkTable *table2;
GwyGraphArea *area;
GwySelection *selection;
@@ -365,54 +365,30 @@ volfit_dialog(VolfitArgs *args)
row = 0;
/* Curve to volfit selected by xpos, ypos*/
- label = gtk_label_new_with_mnemonic(_("Curve _X position:"));
- gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_table_attach(GTK_TABLE(table), label,
- 0, 1, row, row+1, GTK_FILL, 0, 0, 0);
-
controls.xpos = gtk_adjustment_new(args->xpos,
- 0, gwy_brick_get_xres(args->brick)-1, 1, 10, 0);
- spin = gtk_spin_button_new(GTK_ADJUSTMENT(controls.xpos), 1, 2);
- gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(spin), TRUE);
- gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 0);
- gtk_table_attach(GTK_TABLE(table), spin,
- 1, 2, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, gwy_brick_get_xres(args->brick)-1,
+ 1, 10, 0);
+ gwy_table_attach_adjbar(table, row, _("Curve _X position:"), NULL,
+ controls.xpos, GWY_HSCALE_LINEAR | GWY_HSCALE_SNAP);
g_signal_connect(controls.xpos, "value-changed",
G_CALLBACK(xpos_changed_cb), &controls);
-
-
-
row++;
- label = gtk_label_new_with_mnemonic(_("Curve _Y position:"));
- gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_table_attach(GTK_TABLE(table), label,
- 0, 1, row, row+1, GTK_FILL, 0, 0, 0);
controls.ypos = gtk_adjustment_new(args->ypos,
- 0, gwy_brick_get_yres(args->brick)-1, 1, 10, 0);
- spin = gtk_spin_button_new(GTK_ADJUSTMENT(controls.ypos), 1, 2);
- gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(spin), TRUE);
- gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 0);
- gtk_table_attach(GTK_TABLE(table), spin,
- 1, 2, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 0, gwy_brick_get_yres(args->brick)-1,
+ 1, 10, 0);
+ gwy_table_attach_adjbar(table, row, _("Curve _Y position:"), NULL,
+ controls.ypos, GWY_HSCALE_LINEAR | GWY_HSCALE_SNAP);
g_signal_connect(controls.ypos, "value-changed",
G_CALLBACK(ypos_changed_cb), &controls);
-
row++;
-
/* Fitted function */
- label = gtk_label_new_with_mnemonic(_("F_unction:"));
- gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_table_attach(GTK_TABLE(table), label,
- 0, 1, row, row+1, GTK_FILL, 0, 0, 0);
-
controls.function = function_selector_new(G_CALLBACK(function_changed),
&controls, args->function_type);
- gtk_label_set_mnemonic_widget(GTK_LABEL(label), controls.function);
-
- gtk_table_attach(GTK_TABLE(table), controls.function,
- 1, 2, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ gwy_table_attach_adjbar(table, row, _("F_unction:"), NULL,
+ GTK_OBJECT(controls.function),
+ GWY_HSCALE_WIDGET_NO_EXPAND);
row++;
controls.formula = gtk_label_new("f(x) =");
@@ -466,7 +442,7 @@ volfit_dialog(VolfitArgs *args)
controls.chisq = gtk_label_new(NULL);
gtk_misc_set_alignment(GTK_MISC(controls.chisq), 0.0, 0.5);
gtk_table_attach(GTK_TABLE(table), controls.chisq,
- 1, 2, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ 1, 2, row, row+1, GTK_FILL, 0, 0, 0);
gtk_table_set_row_spacing(GTK_TABLE(table), row, 8);
row++;
diff --git a/modules/volume/volume_invert.c b/modules/volume/volume_invert.c
index 4ed8588..9c6dd21 100644
--- a/modules/volume/volume_invert.c
+++ b/modules/volume/volume_invert.c
@@ -1,6 +1,6 @@
/*
* @(#) $Id: volume_volume_invert.c 14914 2013-04-18 12:27:28Z klapetek $
- * Copyright (C) 2003 David Necas (Yeti), Petr Klapetek.
+ * Copyright (C) 2013 David Necas (Yeti), Petr Klapetek.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
*
* This program is free software; you can redistribute it and/or modify
@@ -21,29 +21,17 @@
#include "config.h"
#include <gtk/gtk.h>
-#include <cairo.h>
#include <libgwyddion/gwymacros.h>
-#include <libgwyddion/gwymath.h>
-#include <libprocess/arithmetic.h>
-#include <libprocess/stats.h>
#include <libprocess/brick.h>
-#include <libprocess/filters.h>
#include <libgwydgets/gwystock.h>
-#include <libgwydgets/gwydataview.h>
-#include <libgwydgets/gwylayer-basic.h>
-#include <libgwydgets/gwylayer-mask.h>
-#include <libgwydgets/gwycombobox.h>
-#include <libgwydgets/gwydgetutils.h>
#include <libgwymodule/gwymodule-volume.h>
#include <app/gwyapp.h>
#define VOLUME_INVERT_RUN_MODES (GWY_RUN_IMMEDIATE)
-static gboolean module_register (void);
-static void volume_invert (GwyContainer *data,
- GwyRunType run);
-
-
+static gboolean module_register(void);
+static void volume_invert (GwyContainer *data,
+ GwyRunType run);
static GwyModuleInfo module_info = {
GWY_MODULE_ABI_VERSION,
@@ -55,18 +43,18 @@ static GwyModuleInfo module_info = {
"2013",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, volume_invert)
static gboolean
module_register(void)
{
gwy_volume_func_register("volume_invert",
- (GwyVolumeFunc)&volume_invert,
- N_("/_Invert value"),
- GWY_STOCK_VOLUME_INVERT,
- VOLUME_INVERT_RUN_MODES,
- GWY_MENU_FLAG_VOLUME,
- N_("Invert value in volume data"));
+ (GwyVolumeFunc)&volume_invert,
+ N_("/_Invert Value"),
+ GWY_STOCK_VOLUME_INVERT,
+ VOLUME_INVERT_RUN_MODES,
+ GWY_MENU_FLAG_VOLUME,
+ N_("Invert value in volume data"));
return TRUE;
}
@@ -76,7 +64,7 @@ volume_invert(GwyContainer *data, GwyRunType run)
{
GwyBrick *brick = NULL;
GwyDataField *dfield = NULL;
- gchar key[50];
+ GQuark quark;
gint id, newid;
g_return_if_fail(run & VOLUME_INVERT_RUN_MODES);
@@ -85,8 +73,8 @@ volume_invert(GwyContainer *data, GwyRunType run)
GWY_APP_BRICK_ID, &id,
0);
- g_snprintf(key, sizeof(key), "/brick/%d/preview", id);
- dfield = gwy_data_field_duplicate((GwyDataField *)gwy_container_get_object(data, g_quark_from_string(key)));
+ quark = gwy_app_get_brick_preview_key_for_id(id);
+ dfield = gwy_data_field_duplicate(gwy_container_get_object(data, quark));
brick = gwy_brick_duplicate(brick);
g_return_if_fail(GWY_IS_BRICK(brick));
diff --git a/modules/volume/volume_kmeans.c b/modules/volume/volume_kmeans.c
index a44b59b..3b0709a 100644
--- a/modules/volume/volume_kmeans.c
+++ b/modules/volume/volume_kmeans.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: volume_kmeans.c 19058 2016-10-12 15:08:10Z dn2010 $
+ * @(#) $Id: volume_kmeans.c 20088 2017-07-25 20:44:20Z dn2010 $
* Copyright (C) 2003 David Necas (Yeti), Petr Klapetek,
* Daniil Bratashov, Evgeniy Ryabov.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net, dn2010 at gmail.com.
@@ -60,24 +60,25 @@ typedef struct {
GtkObject *outliers_threshold;
} KMeansControls;
-static gboolean module_register (void);
-static void volume_kmeans (GwyContainer *data,
- GwyRunType run);
-static void kmeans_dialog (GwyContainer *data,
- KMeansArgs *args);
-static void remove_outliers_toggled (KMeansControls *controls);
-static void kmeans_dialog_update(KMeansControls *controls,
- KMeansArgs *args);
-static void kmeans_values_update(KMeansControls *controls,
- KMeansArgs *args);
-static GwyBrick* normalize_brick (GwyBrick *brick,
- GwyDataField *intfield);
-static void volume_kmeans_do (GwyContainer *data,
- KMeansArgs *args);
-static void kmeans_load_args (GwyContainer *container,
- KMeansArgs *args);
-static void kmeans_save_args (GwyContainer *container,
- KMeansArgs *args);
+static gboolean module_register (void);
+static void volume_kmeans (GwyContainer *data,
+ GwyRunType run);
+static void kmeans_dialog (GwyContainer *data,
+ KMeansArgs *args);
+static void remove_outliers_toggled(KMeansControls *controls,
+ GtkToggleButton *toggle);
+static void kmeans_dialog_update (KMeansControls *controls,
+ KMeansArgs *args);
+static void kmeans_values_update (KMeansControls *controls,
+ KMeansArgs *args);
+static GwyBrick* normalize_brick (GwyBrick *brick,
+ GwyDataField *intfield);
+static void volume_kmeans_do (GwyContainer *data,
+ KMeansArgs *args);
+static void kmeans_load_args (GwyContainer *container,
+ KMeansArgs *args);
+static void kmeans_save_args (GwyContainer *container,
+ KMeansArgs *args);
static const KMeansArgs kmeans_defaults = {
10,
@@ -93,19 +94,19 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Calculates K-means clustering on volume data."),
"Daniil Bratashov <dn2010 at gmail.com> & Evgeniy Ryabov <k1u2r3ka at mail.ru>",
- "1.4",
+ "1.5",
"David Nečas (Yeti) & Petr Klapetek & Daniil Bratashov & Evgeniy Ryabov",
"2014",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, volume_kmeans)
static gboolean
module_register(void)
{
gwy_volume_func_register("kmeans",
(GwyVolumeFunc)&volume_kmeans,
- N_("/_K-means clustering..."),
+ N_("/_K-Means Clustering..."),
GWY_STOCK_VOLUME_KMEANS,
KMEANS_RUN_MODES,
GWY_MENU_FLAG_VOLUME,
@@ -158,7 +159,7 @@ kmeans_dialog(GwyContainer *data, KMeansArgs *args)
gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK);
gwy_help_add_to_volume_dialog(GTK_DIALOG(dialog), GWY_HELP_DEFAULT);
- table = gtk_table_new(6, 4, FALSE);
+ table = gtk_table_new(6, 3, FALSE);
gtk_table_set_row_spacings(GTK_TABLE(table), 2);
gtk_table_set_col_spacings(GTK_TABLE(table), 6);
gtk_container_set_border_width(GTK_CONTAINER(table), 4);
@@ -166,50 +167,42 @@ kmeans_dialog(GwyContainer *data, KMeansArgs *args)
TRUE, TRUE, 4);
controls.k = gtk_adjustment_new(args->k, 2, 100, 1, 10, 0);
- gwy_table_attach_hscale(table, row,
- _("_Number of clusters:"), NULL,
- controls.k, GWY_HSCALE_SQRT);
+ gwy_table_attach_adjbar(table, row, _("_Number of clusters:"), NULL,
+ controls.k, GWY_HSCALE_SQRT | GWY_HSCALE_SNAP);
row++;
controls.epsilon = gtk_adjustment_new(-log10(args->epsilon),
1.0, 20.0, 0.01, 1.0, 0);
- gwy_table_attach_hscale(table, row,
+ gwy_table_attach_adjbar(table, row,
_("Convergence _precision digits:"), NULL,
- controls.epsilon, GWY_HSCALE_DEFAULT);
+ controls.epsilon, GWY_HSCALE_LINEAR);
row++;
controls.max_iterations = gtk_adjustment_new(args->max_iterations,
1, 10000, 1, 1, 0);
- gwy_table_attach_hscale(table, row,
- _("_Max. iterations:"), NULL,
+ gwy_table_attach_adjbar(table, row, _("_Max. iterations:"), NULL,
controls.max_iterations, GWY_HSCALE_LOG);
row++;
- controls.normalize
- = gtk_check_button_new_with_mnemonic(_("_Normalize"));
- gtk_table_attach_defaults(GTK_TABLE(table), controls.normalize,
- 0, 3, row, row+1);
+ controls.normalize = gtk_check_button_new_with_mnemonic(_("_Normalize"));
+ gtk_table_attach(GTK_TABLE(table), controls.normalize,
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
row++;
controls.remove_outliers
= gtk_check_button_new_with_mnemonic(_("_Remove outliers"));
- gtk_table_attach_defaults(GTK_TABLE(table),
- controls.remove_outliers,
- 0, 3, row, row+1);
+ gtk_table_attach(GTK_TABLE(table), controls.remove_outliers,
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect_swapped(controls.remove_outliers, "toggled",
- G_CALLBACK(remove_outliers_toggled),
- &controls);
+ G_CALLBACK(remove_outliers_toggled), &controls);
row++;
- controls.outliers_threshold
- = gtk_adjustment_new(args->outliers_threshold,
- 1.0, 10.0, 0.1, 1, 0);
- gwy_table_attach_hscale(table, row,
- _("Outliers _threshold:"), NULL,
- controls.outliers_threshold,
- GWY_HSCALE_DEFAULT);
+ controls.outliers_threshold = gtk_adjustment_new(args->outliers_threshold,
+ 1.0, 10.0, 0.1, 1, 0);
+ gwy_table_attach_adjbar(table, row, _("Outliers _threshold:"), NULL,
+ controls.outliers_threshold, GWY_HSCALE_LINEAR);
gwy_table_hscale_set_sensitive(controls.outliers_threshold,
- gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(controls.remove_outliers)));
+ args->remove_outliers);
row++;
kmeans_dialog_update(&controls, args);
@@ -245,10 +238,11 @@ kmeans_dialog(GwyContainer *data, KMeansArgs *args)
volume_kmeans_do(data, args);
}
-static void remove_outliers_toggled (KMeansControls *controls)
+static void
+remove_outliers_toggled(KMeansControls *controls, GtkToggleButton *toggle)
{
gwy_table_hscale_set_sensitive(controls->outliers_threshold,
- gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(controls->remove_outliers)));
+ gtk_toggle_button_get_active(toggle));
}
/* XXX: Duplicate with volume_kmedians.c */
@@ -702,6 +696,9 @@ volume_kmeans_do(GwyContainer *container, KMeansArgs *args)
g_strdup_printf(_("K-means center %d"), c + 1),
"color", rgba,
NULL);
+ if (!gwy_graph_curve_model_is_ordered(gcmodel)) {
+ gwy_graph_curve_model_enforce_order(gcmodel);
+ }
gwy_graph_model_add_curve(gmodel, gcmodel);
g_object_unref(gcmodel);
}
diff --git a/modules/volume/volume_kmedians.c b/modules/volume/volume_kmedians.c
index c1607d7..9961f6b 100644
--- a/modules/volume/volume_kmedians.c
+++ b/modules/volume/volume_kmedians.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: volume_kmedians.c 18886 2016-08-26 08:26:22Z yeti-dn $
+ * @(#) $Id: volume_kmedians.c 20088 2017-07-25 20:44:20Z dn2010 $
* Copyright (C) 2003 David Necas (Yeti), Petr Klapetek,
* Daniil Bratashov, Evgeniy Ryabov.
* E-mail: yeti at gwyddion.net, klapetek at gwyddion.net,
@@ -87,19 +87,19 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Calculates K-medians clustering on volume data."),
"Daniil Bratashov <dn2010 at gmail.com> & Evgeniy Ryabov <k1u2r3ka at mail.ru>",
- "1.1",
+ "1.2",
"David Nečas (Yeti) & Petr Klapetek & Daniil Bratashov & Evgeniy Ryabov",
"2014",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, volume_kmedians)
static gboolean
module_register(void)
{
gwy_volume_func_register("kmedians",
(GwyVolumeFunc)&volume_kmedians,
- N_("/_K-medians clustering..."),
+ N_("/_K-Medians Clustering..."),
GWY_STOCK_VOLUME_KMEDIANS,
KMEDIANS_RUN_MODES,
GWY_MENU_FLAG_VOLUME,
@@ -152,7 +152,7 @@ kmedians_dialog(GwyContainer *data, KMediansArgs *args)
gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK);
gwy_help_add_to_volume_dialog(GTK_DIALOG(dialog), GWY_HELP_DEFAULT);
- table = gtk_table_new(4, 4, FALSE);
+ table = gtk_table_new(4, 3, FALSE);
gtk_table_set_row_spacings(GTK_TABLE(table), 2);
gtk_table_set_col_spacings(GTK_TABLE(table), 6);
gtk_container_set_border_width(GTK_CONTAINER(table), 4);
@@ -160,29 +160,27 @@ kmedians_dialog(GwyContainer *data, KMediansArgs *args)
TRUE, TRUE, 4);
controls.k = gtk_adjustment_new(args->k, 2, 100, 1, 10, 0);
- gwy_table_attach_hscale(table, row,
- _("_Number of clusters:"), NULL,
+ gwy_table_attach_adjbar(table, row, _("_Number of clusters:"), NULL,
controls.k, GWY_HSCALE_SQRT);
row++;
controls.epsilon = gtk_adjustment_new(-log10(args->epsilon),
1.0, 20.0, 0.01, 1.0, 0);
- gwy_table_attach_hscale(table, row,
+ gwy_table_attach_adjbar(table, row,
_("Convergence _precision digits:"), NULL,
- controls.epsilon, GWY_HSCALE_DEFAULT);
+ controls.epsilon, GWY_HSCALE_LINEAR);
row++;
controls.max_iterations = gtk_adjustment_new(args->max_iterations,
1, 10000, 1, 1, 0);
- gwy_table_attach_hscale(table, row,
- _("_Max. iterations:"), NULL,
+ gwy_table_attach_adjbar(table, row, _("_Max. iterations:"), NULL,
controls.max_iterations, GWY_HSCALE_LOG);
row++;
controls.normalize
= gtk_check_button_new_with_mnemonic(_("_Normalize"));
- gtk_table_attach_defaults(GTK_TABLE(table), controls.normalize,
- 0, 3, row, row+1);
+ gtk_table_attach(GTK_TABLE(table), controls.normalize,
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
kmedians_dialog_update(&controls, args);
gtk_widget_show_all(dialog);
@@ -546,6 +544,9 @@ volume_kmedians_do(GwyContainer *container, KMediansArgs *args)
g_strdup_printf(_("K-medians center %d"), c + 1),
"color", rgba,
NULL);
+ if (!gwy_graph_curve_model_is_ordered(gcmodel)) {
+ gwy_graph_curve_model_enforce_order(gcmodel);
+ }
gwy_graph_model_add_curve(gmodel, gcmodel);
g_object_unref(gcmodel);
}
diff --git a/modules/volume/volume_linestat.c b/modules/volume/volume_linestat.c
index da414be..2391655 100644
--- a/modules/volume/volume_linestat.c
+++ b/modules/volume/volume_linestat.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: volume_linestat.c 17511 2015-10-05 21:09:24Z yeti-dn $
+ * @(#) $Id: volume_linestat.c 20173 2017-08-07 04:58:08Z dn2010 $
* Copyright (C) 2015 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -143,6 +143,8 @@ static const GwyEnum quantities[] = {
{ N_("Median"), GWY_LINE_STAT_MEDIAN, },
{ N_("Minimum"), GWY_LINE_STAT_MINIMUM, },
{ N_("Maximum"), GWY_LINE_STAT_MAXIMUM, },
+ { N_("Min. position"), GWY_LINE_STAT_MINPOS, },
+ { N_("Max. position"), GWY_LINE_STAT_MAXPOS, },
{ N_("Range"), GWY_LINE_STAT_RANGE, },
{ N_("Slope"), GWY_LINE_STAT_SLOPE, },
{ N_("tan β<sub>0</sub>"), GWY_LINE_STAT_TAN_BETA0, },
@@ -170,12 +172,12 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Summarizes profiles of volume data to a channel."),
"Yeti <yeti at gwyddion.net>",
- "1.0",
+ "1.2",
"David Nečas (Yeti)",
"2015",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, volume_linestat)
static gboolean
module_register(void)
@@ -215,7 +217,7 @@ line_stat(GwyContainer *data, GwyRunType run)
!= gwy_data_line_get_res(args.calibration)))
args.calibration = NULL;
- wunit = gwy_brick_get_si_unit_z(brick);
+ wunit = gwy_brick_get_si_unit_w(brick);
if (args.calibration)
zunit = gwy_data_line_get_si_unit_y(args.calibration);
else
@@ -255,6 +257,7 @@ line_stat_dialog(LineStatArgs *args, GwyContainer *data, gint id)
GwyDataField *dfield;
GwyGraphCurveModel *gcmodel;
GwyGraphModel *gmodel;
+ GwySIUnit *siunitz;
gint response, row;
GwyPixmapLayer *layer;
GwyVectorLayer *vlayer = NULL;
@@ -263,23 +266,25 @@ line_stat_dialog(LineStatArgs *args, GwyContainer *data, gint id)
const guchar *gradient;
gchar key[40];
gdouble xy[2];
+ gdouble zmax;
guint nquantities;
controls.args = args;
brick = args->brick;
if (args->calibration) {
- controls.zvf
- = gwy_data_line_get_value_format_y(args->calibration,
- GWY_SI_UNIT_FORMAT_VFMARKUP,
- NULL);
+ siunitz = gwy_data_line_get_si_unit_y(args->calibration);
+ zmax = gwy_data_line_get_max(args->calibration);
}
else {
- controls.zvf
- = gwy_brick_get_value_format_z(brick,
- GWY_SI_UNIT_FORMAT_VFMARKUP,
- NULL);
+ siunitz = gwy_brick_get_si_unit_z(brick);
+ zmax = gwy_brick_get_zreal(brick);
}
+ controls.zvf = gwy_si_unit_get_format_with_digits(siunitz,
+ GWY_SI_UNIT_FORMAT_VFMARKUP,
+ zmax,
+ 5, /* 5 digits */
+ NULL);
dialog = gtk_dialog_new_with_buttons(_("Summarize Volume Profiles"),
NULL, 0, NULL);
@@ -710,6 +715,8 @@ extract_summary_image(const LineStatArgs *args, GwyDataField *dfield)
{ GWY_LINE_STAT_MEDIAN, gwy_data_line_get_median, },
{ GWY_LINE_STAT_MINIMUM, gwy_data_line_get_min, },
{ GWY_LINE_STAT_MAXIMUM, gwy_data_line_get_max, },
+ { GWY_LINE_STAT_MINPOS, gwy_data_line_min_pos_i, },
+ { GWY_LINE_STAT_MAXPOS, gwy_data_line_max_pos_i, },
{ GWY_LINE_STAT_RANGE, get_data_line_range, },
{ GWY_LINE_STAT_LENGTH, gwy_data_line_get_length, },
{ GWY_LINE_STAT_TAN_BETA0, gwy_data_line_get_tan_beta0, },
@@ -726,12 +733,13 @@ extract_summary_image(const LineStatArgs *args, GwyDataField *dfield)
GwyLineStatQuantity quantity = args->quantity;
GwyBrick *brick = args->brick;
GwySIUnit *imgunit, *zunit, *wunit;
- gint xres = brick->xres, yres = brick->yres;
+ gint xres = brick->xres, yres = brick->yres, zres = brick->zres;
gint zfrom = args->zfrom, zto = args->zto;
LineStatIter iter;
LineStatFunc lsfunc = NULL;
- gint i;
+ gint i, j;
guint k;
+ gdouble *data, val, zreal, zoffset;
if (zfrom == -1 && zto == -1) {
zfrom = 0;
@@ -765,25 +773,49 @@ extract_summary_image(const LineStatArgs *args, GwyDataField *dfield)
}
line_stat_iter_free(&iter);
+ if ((quantity == GWY_LINE_STAT_MINPOS)
+ || (quantity == GWY_LINE_STAT_MAXPOS)) {
+ gwy_data_field_add(dfield, zfrom);
+ if (args->calibration) {
+ data = gwy_data_field_get_data(dfield);
+ for (i = 0; i < xres * yres; i++) {
+ j = *(data);
+ val = gwy_data_line_get_val(args->calibration, j);
+ *(data++) = val;
+ }
+ gwy_data_field_data_changed(dfield);
+ }
+ else {
+ zreal = gwy_brick_get_zreal(args->brick);
+ zoffset = gwy_brick_get_zoffset(args->brick);
+ gwy_data_field_multiply(dfield, zreal/zres);
+ gwy_data_field_add(dfield, zoffset);
+ }
+ }
+
imgunit = gwy_data_field_get_si_unit_z(dfield);
- wunit = gwy_brick_get_si_unit_z(brick);
+ wunit = gwy_brick_get_si_unit_w(brick);
if (args->calibration)
zunit = gwy_data_line_get_si_unit_y(args->calibration);
else
zunit = gwy_brick_get_si_unit_z(brick);
- if (quantity == GWY_LINE_STAT_TAN_BETA0
- || quantity == GWY_LINE_STAT_SLOPE)
+ if ((quantity == GWY_LINE_STAT_MINPOS)
+ || (quantity == GWY_LINE_STAT_MAXPOS)) {
+ gwy_serializable_clone(G_OBJECT(zunit),
+ G_OBJECT(gwy_data_field_get_si_unit_z(dfield)));
+ }
+ else if ((quantity == GWY_LINE_STAT_TAN_BETA0)
+ || (quantity == GWY_LINE_STAT_SLOPE))
gwy_si_unit_divide(wunit, zunit, imgunit);
- else if (quantity == GWY_LINE_STAT_SKEW
- || quantity == GWY_LINE_STAT_KURTOSIS)
+ else if ((quantity == GWY_LINE_STAT_SKEW)
+ || (quantity == GWY_LINE_STAT_KURTOSIS))
gwy_si_unit_set_from_string(imgunit, NULL);
else if (quantity == GWY_LINE_STAT_VARIATION)
gwy_si_unit_multiply(wunit, zunit, imgunit);
gwy_data_field_invalidate(dfield);
gwy_data_field_data_changed(dfield);
-
}
static void
diff --git a/modules/volume/volume_slice.c b/modules/volume/volume_slice.c
index c8d938c..0b0f84c 100644
--- a/modules/volume/volume_slice.c
+++ b/modules/volume/volume_slice.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: volume_slice.c 18886 2016-08-26 08:26:22Z yeti-dn $
+ * @(#) $Id: volume_slice.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2015-2016 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -25,6 +25,7 @@
#include <libgwyddion/gwymacros.h>
#include <libgwyddion/gwymath.h>
#include <libprocess/brick.h>
+#include <libprocess/gwyprocess.h>
#include <libgwydgets/gwydataview.h>
#include <libgwydgets/gwylayer-basic.h>
#include <libgwydgets/gwyradiobuttons.h>
@@ -170,7 +171,6 @@ static void extract_graph_curve (const SliceArgs *args,
gboolean use_calibration);
static void extract_gmodel (const SliceArgs *args,
GwyGraphModel *gmodel);
-static void flip_xy (GwyDataField *dfield);
static void slice_sanitize_args (SliceArgs *args);
static void slice_load_args (GwyContainer *container,
SliceArgs *args);
@@ -195,12 +195,12 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Extracts image planes and line graphs from volume data."),
"Yeti <yeti at gwyddion.net>",
- "2.2",
+ "2.3",
"David Nečas (Yeti)",
"2015",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, volume_slice)
static gboolean
module_register(void)
@@ -275,6 +275,8 @@ slice_dialog(SliceArgs *args, GwyContainer *data, gint id)
GwyDataLine *calibration;
GwyGraphCurveModel *gcmodel;
GwyGraphModel *gmodel;
+ GwySIUnit *siunitz;
+ gdouble zmax;
gint response, row;
GwyPixmapLayer *layer;
GwyVectorLayer *vlayer = NULL;
@@ -441,7 +443,10 @@ slice_dialog(SliceArgs *args, GwyContainer *data, gint id)
controls.xpos = gtk_adjustment_new(args->currpos.x, 0.0, brick->xres-1.0,
1.0, 10.0, 0);
- gwy_table_attach_spinbutton(table, row, _("_X:"), "px", controls.xpos);
+ gwy_table_attach_adjbar(table, row, _("_X:"), _("px"),
+ controls.xpos, GWY_HSCALE_LINEAR | GWY_HSCALE_SNAP);
+ gtk_widget_set_size_request(gwy_table_hscale_get_scale(controls.xpos),
+ 96, -1);
g_signal_connect_swapped(controls.xpos, "value-changed",
G_CALLBACK(xpos_changed), &controls);
@@ -461,7 +466,10 @@ slice_dialog(SliceArgs *args, GwyContainer *data, gint id)
controls.ypos = gtk_adjustment_new(args->currpos.y, 0.0, brick->yres-1.0,
1.0, 10.0, 0);
- gwy_table_attach_spinbutton(table, row, _("_Y:"), "px", controls.ypos);
+ gwy_table_attach_adjbar(table, row, _("_Y:"), _("px"),
+ controls.ypos, GWY_HSCALE_LINEAR | GWY_HSCALE_SNAP);
+ gtk_widget_set_size_request(gwy_table_hscale_get_scale(controls.xpos),
+ 96, -1);
g_signal_connect_swapped(controls.ypos, "value-changed",
G_CALLBACK(ypos_changed), &controls);
@@ -481,7 +489,10 @@ slice_dialog(SliceArgs *args, GwyContainer *data, gint id)
controls.zpos = gtk_adjustment_new(args->currpos.z, 0.0, brick->zres-1.0,
1.0, 10.0, 0);
- gwy_table_attach_spinbutton(table, row, _("_Z:"), "px", controls.zpos);
+ gwy_table_attach_adjbar(table, row, _("_Z:"), _("px"),
+ controls.zpos, GWY_HSCALE_LINEAR | GWY_HSCALE_SNAP);
+ gtk_widget_set_size_request(gwy_table_hscale_get_scale(controls.xpos),
+ 96, -1);
g_signal_connect_swapped(controls.zpos, "value-changed",
G_CALLBACK(zpos_changed), &controls);
@@ -490,15 +501,18 @@ slice_dialog(SliceArgs *args, GwyContainer *data, gint id)
gtk_table_attach(GTK_TABLE(table), controls.zposreal,
3, 4, row, row+1, GTK_FILL, 0, 0, 0);
if ((calibration = gwy_brick_get_zcalibration(brick))) {
- controls.zvf = gwy_data_line_get_value_format_y(calibration,
- GWY_SI_UNIT_FORMAT_VFMARKUP,
- NULL);
+ siunitz = gwy_data_line_get_si_unit_y(calibration);
+ zmax = gwy_data_line_get_max(calibration);
}
else {
- controls.zvf = gwy_brick_get_value_format_z(brick,
- GWY_SI_UNIT_FORMAT_VFMARKUP,
- NULL);
+ siunitz = gwy_brick_get_si_unit_z(brick);
+ zmax = gwy_brick_get_zreal(brick);
}
+ controls.zvf = gwy_si_unit_get_format_with_digits(siunitz,
+ GWY_SI_UNIT_FORMAT_VFMARKUP,
+ zmax,
+ 5, /* 5 digits */
+ NULL);
label = gtk_label_new(controls.zvf->units);
gtk_label_set_use_markup(GTK_LABEL(label), TRUE);
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
@@ -518,6 +532,7 @@ slice_dialog(SliceArgs *args, GwyContainer *data, gint id)
update_position(&controls, &pos);
controls.in_update = FALSE;
multiselect_changed(&controls, GTK_TOGGLE_BUTTON(controls.multiselect));
+ update_target_graphs(&controls);
gtk_widget_show_all(dialog);
do {
@@ -730,7 +745,7 @@ plane_selection_changed(SliceControls *controls,
if (base_plane == PLANE_YZ || base_plane == PLANE_ZY)
pos.x = CLAMP(gwy_brick_rtoi(brick, r - brick->xoff), 0, brick->xres-1);
else if (base_plane == PLANE_YX || base_plane == PLANE_XY)
- pos.z = CLAMP(gwy_brick_rtok(brick, r - brick->zoff), 0, brick->zres-1);
+ pos.z = CLAMP(gwy_brick_rtok_cal(brick, r), 0, brick->zres-1);
else if (base_plane == PLANE_XZ || base_plane == PLANE_ZX)
pos.y = CLAMP(gwy_brick_rtoj(brick, r - brick->yoff), 0, brick->yres-1);
else {
@@ -924,14 +939,14 @@ update_position(SliceControls *controls,
xy[1] = gwy_brick_jtor(brick, pos->y);
if (base_plane != PLANE_XY)
GWY_SWAP(gdouble, xy[0], xy[1]);
- z = gwy_brick_ktor(brick, pos->z) + brick->zoff;
+ z = gwy_brick_ktor_cal(brick, pos->z);
point_changed = (pos->x != args->currpos.x
|| pos->y != args->currpos.y);
plane_changed = (pos->z != args->currpos.z);
}
else if (base_plane == PLANE_XZ || base_plane == PLANE_ZX) {
xy[0] = gwy_brick_itor(brick, pos->x);
- xy[1] = gwy_brick_ktor(brick, pos->z);
+ xy[1] = gwy_brick_ktor_cal(brick, pos->z);
if (base_plane != PLANE_XZ)
GWY_SWAP(gdouble, xy[0], xy[1]);
z = gwy_brick_jtor(brick, pos->y) + brick->yoff;
@@ -941,7 +956,7 @@ update_position(SliceControls *controls,
}
else if (base_plane == PLANE_YZ || base_plane == PLANE_ZY) {
xy[0] = gwy_brick_jtor(brick, pos->y);
- xy[1] = gwy_brick_ktor(brick, pos->z);
+ xy[1] = gwy_brick_ktor_cal(brick, pos->z);
if (base_plane != PLANE_YZ)
GWY_SWAP(gdouble, xy[0], xy[1]);
z = gwy_brick_itor(brick, pos->x) + brick->xoff;
@@ -973,7 +988,7 @@ update_position(SliceControls *controls,
extract_gmodel(args, gmodel);
gcmodel = gwy_graph_model_get_curve(gmodel, 0);
- extract_graph_curve(args, gcmodel, controls->current_object, FALSE);
+ extract_graph_curve(args, gcmodel, controls->current_object, TRUE);
}
if (plane_changed) {
@@ -1033,7 +1048,6 @@ update_labels(SliceControls *controls)
{
SliceArgs *args = controls->args;
GwyBrick *brick = args->brick;
- GwyDataLine *calibration;
gdouble x, y, z;
gchar buf[64];
@@ -1047,9 +1061,7 @@ update_labels(SliceControls *controls)
controls->xvf->precision, y/controls->yvf->magnitude);
gtk_label_set_markup(GTK_LABEL(controls->yposreal), buf);
- z = gwy_brick_ktor(brick, args->currpos.z);
- if ((calibration = gwy_brick_get_zcalibration(brick)))
- z = gwy_data_line_get_val(calibration, args->currpos.z);
+ z = gwy_brick_ktor_cal(brick, args->currpos.z);
g_snprintf(buf, sizeof(buf), "%.*f",
controls->zvf->precision, z/controls->zvf->magnitude);
gtk_label_set_markup(GTK_LABEL(controls->zposreal), buf);
@@ -1141,14 +1153,13 @@ extract_one_image(SliceArgs *args, GwyContainer *data, gint id, gint idx)
if (base_plane == PLANE_XY || base_plane == PLANE_YX) {
i = pos->z;
+ r = gwy_brick_ktor_cal(brick, i);
if ((calibration = gwy_brick_get_zcalibration(brick))) {
- r = gwy_data_line_get_val(calibration, i);
vf = gwy_data_line_get_value_format_y(calibration,
GWY_SI_UNIT_FORMAT_VFMARKUP,
NULL);
}
else {
- r = gwy_brick_ktor(brick, i);
vf = gwy_brick_get_value_format_z(brick,
GWY_SI_UNIT_FORMAT_VFMARKUP,
NULL);
@@ -1217,8 +1228,11 @@ extract_image_plane(const SliceArgs *args, GwyDataField *dfield)
FALSE);
}
- if (do_flip)
- flip_xy(dfield);
+ if (do_flip) {
+ GwyDataField *tmp = gwy_data_field_duplicate(dfield);
+ gwy_data_field_flip_xy(tmp, dfield, FALSE);
+ g_object_unref(tmp);
+ }
}
static void
@@ -1291,6 +1305,10 @@ extract_graph_curve(const SliceArgs *args,
else
gwy_graph_curve_model_set_data_from_dataline(gcmodel, line, 0, 0);
+ if (!gwy_graph_curve_model_is_ordered(gcmodel)) {
+ gwy_graph_curve_model_enforce_order(gcmodel);
+ }
+
g_object_unref(line);
}
@@ -1331,7 +1349,7 @@ extract_gmodel(const SliceArgs *args, GwyGraphModel *gmodel)
calibration = gwy_brick_get_zcalibration(brick);
if (base_plane == PLANE_XY || base_plane == PLANE_YX) {
if (calibration)
- xunit = gwy_data_line_get_si_unit_x(calibration);
+ xunit = gwy_data_line_get_si_unit_y(calibration);
else
xunit = gwy_brick_get_si_unit_z(brick);
}
@@ -1353,30 +1371,6 @@ extract_gmodel(const SliceArgs *args, GwyGraphModel *gmodel)
g_object_unref(yunit);
}
-static void
-flip_xy(GwyDataField *dfield)
-{
- GwyDataField *tmp;
- gint xres, yres, i, j;
- gdouble *dd;
- const gdouble *sd;
-
- xres = gwy_data_field_get_xres(dfield);
- yres = gwy_data_field_get_yres(dfield);
- tmp = gwy_data_field_duplicate(dfield);
- gwy_data_field_resample(dfield, yres, xres, GWY_INTERPOLATION_NONE);
- sd = gwy_data_field_get_data_const(tmp);
- dd = gwy_data_field_get_data(dfield);
- for (i = 0; i < xres; i++) {
- for (j = 0; j < yres; j++) {
- dd[i*yres + j] = sd[j*xres + i];
- }
- }
- gwy_data_field_set_xreal(dfield, gwy_data_field_get_yreal(tmp));
- gwy_data_field_set_yreal(dfield, gwy_data_field_get_xreal(tmp));
- g_object_unref(tmp);
-}
-
static const gchar base_plane_key[] = "/module/volume_slice/base_plane";
static const gchar multiselect_key[] = "/module/volume_slice/multiselect";
static const gchar output_type_key[] = "/module/volume_slice/output_type";
diff --git a/modules/volume/volume_swaxes.c b/modules/volume/volume_swaxes.c
new file mode 100644
index 0000000..ca29366
--- /dev/null
+++ b/modules/volume/volume_swaxes.c
@@ -0,0 +1,716 @@
+/*
+ * @(#) $Id: volume_swaxes.c 20021 2017-07-04 12:01:06Z yeti-dn $
+ * Copyright (C) 2017 David Necas (Yeti).
+ * E-mail: yeti at gwyddion.net.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "config.h"
+#include <string.h>
+#include <gtk/gtk.h>
+#include <libgwyddion/gwymacros.h>
+#include <libgwyddion/gwymath.h>
+#include <libprocess/brick.h>
+#include <libgwydgets/gwycombobox.h>
+#include <libgwydgets/gwystock.h>
+#include <libgwydgets/gwydgetutils.h>
+#include <libgwymodule/gwymodule-volume.h>
+#include <app/gwyapp.h>
+#include <app/gwymoduleutils.h>
+
+#define SWAXES_RUN_MODES (GWY_RUN_IMMEDIATE | GWY_RUN_INTERACTIVE)
+
+typedef enum {
+ AXIS_XPOS = 0,
+ AXIS_XNEG = 1,
+ AXIS_YPOS = 2,
+ AXIS_YNEG = 3,
+ AXIS_ZPOS = 4,
+ AXIS_ZNEG = 5,
+ NAXES
+} AxisType;
+
+typedef struct {
+ AxisType x;
+ AxisType y;
+ AxisType z;
+ gboolean new_channel;
+} SwapAxesArgs;
+
+typedef struct {
+ SwapAxesArgs *args;
+ GwyBrick *brick;
+ gboolean has_zcal;
+ gint last_changed;
+ gint second_last_changed;
+ GtkWidget *dialog;
+ GtkWidget *x;
+ GtkWidget *y;
+ GtkWidget *z;
+ GtkWidget *new_channel;
+ GtkWidget *message;
+} SwapAxesControls;
+
+static gboolean module_register (void);
+static void volume_swaxes (GwyContainer *data,
+ GwyRunType run);
+static gboolean swaxes_dialog (SwapAxesArgs *args,
+ GwyBrick *brick);
+static void new_channel_changed (GtkToggleButton *toggle,
+ SwapAxesControls *controls);
+static void xaxis_changed (GtkComboBox *combo,
+ SwapAxesControls *controls);
+static void yaxis_changed (GtkComboBox *combo,
+ SwapAxesControls *controls);
+static void zaxis_changed (GtkComboBox *combo,
+ SwapAxesControls *controls);
+static void update_sensitivity (SwapAxesControls *controls);
+static void update_third_axis (SwapAxesControls *controls,
+ gint changed_axis);
+static void update_message (SwapAxesControls *controls);
+static gboolean axes_are_consistent (const SwapAxesArgs *args);
+static void swaxes_do (GwyContainer *data,
+ gint id,
+ GwyBrick *brick,
+ SwapAxesArgs *args);
+static void swaxes_sanitize_args(SwapAxesArgs *args);
+static void swaxes_load_args (GwyContainer *container,
+ SwapAxesArgs *args);
+static void swaxes_save_args (GwyContainer *container,
+ SwapAxesArgs *args);
+
+static const SwapAxesArgs swaxes_defaults = {
+ AXIS_XPOS, AXIS_YPOS, AXIS_ZPOS,
+ FALSE,
+};
+
+static GwyModuleInfo module_info = {
+ GWY_MODULE_ABI_VERSION,
+ &module_register,
+ N_("Swaps axes of volume data."),
+ "Yeti <yeti at gwyddion.net>",
+ "1.0",
+ "David Nečas (Yeti)",
+ "2017",
+};
+
+GWY_MODULE_QUERY2(module_info, volume_swaxes)
+
+static gboolean
+module_register(void)
+{
+ gwy_volume_func_register("volume_swaxes",
+ (GwyVolumeFunc)&volume_swaxes,
+ N_("/S_wap axes..."),
+ NULL,
+ SWAXES_RUN_MODES,
+ GWY_MENU_FLAG_VOLUME,
+ N_("Swap axes"));
+
+ return TRUE;
+}
+
+static void
+volume_swaxes(GwyContainer *data, GwyRunType run)
+{
+ SwapAxesArgs args;
+ GwyBrick *brick = NULL;
+ gboolean ok = TRUE;
+ gint id;
+
+ g_return_if_fail(run & SWAXES_RUN_MODES);
+
+ swaxes_load_args(gwy_app_settings_get(), &args);
+ gwy_app_data_browser_get_current(GWY_APP_BRICK, &brick,
+ GWY_APP_BRICK_ID, &id,
+ 0);
+ g_return_if_fail(GWY_IS_BRICK(brick));
+
+ if (run == GWY_RUN_INTERACTIVE) {
+ ok = swaxes_dialog(&args, brick);
+ swaxes_save_args(gwy_app_settings_get(), &args);
+ }
+
+ if (ok)
+ swaxes_do(data, id, brick, &args);
+}
+
+static gboolean
+swaxes_dialog(SwapAxesArgs *args, GwyBrick *brick)
+{
+ static const GwyEnum axes[] = {
+ { N_("X"), AXIS_XPOS, },
+ { N_("X, reversed"), AXIS_XNEG, },
+ { N_("Y"), AXIS_YPOS, },
+ { N_("Y, reversed"), AXIS_YNEG, },
+ { N_("Z"), AXIS_ZPOS, },
+ { N_("Z, reversed"), AXIS_ZNEG, },
+ };
+
+ GtkWidget *dialog, *table;
+ GtkSizeGroup *sizegroup;
+ SwapAxesControls controls;
+ gint response, row;
+
+ gwy_clear(&controls, 1);
+ controls.args = args;
+ controls.last_changed = 1;
+ controls.second_last_changed = 0;
+ controls.has_zcal = !!gwy_brick_get_zcalibration(brick);
+
+ dialog = gtk_dialog_new_with_buttons(_("Swap Volume Axes"),
+ NULL, 0,
+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+ GTK_STOCK_OK, GTK_RESPONSE_OK,
+ NULL);
+ gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK);
+ gwy_help_add_to_volume_dialog(GTK_DIALOG(dialog), GWY_HELP_DEFAULT);
+ controls.dialog = dialog;
+
+ table = gtk_table_new(5, 2, FALSE);
+ gtk_container_set_border_width(GTK_CONTAINER(table), 4);
+ gtk_table_set_col_spacings(GTK_TABLE(table), 6);
+ gtk_table_set_row_spacings(GTK_TABLE(table), 2);
+ gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), table, TRUE, TRUE, 4);
+ row = 0;
+
+ sizegroup = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
+
+ controls.x = gwy_enum_combo_box_new(axes, G_N_ELEMENTS(axes),
+ G_CALLBACK(xaxis_changed), &controls,
+ args->x, TRUE);
+ gwy_table_attach_adjbar(table, row, _("Current _X axis will become:"), NULL,
+ GTK_OBJECT(controls.x), GWY_HSCALE_WIDGET);
+ gtk_size_group_add_widget(sizegroup, controls.x);
+ row++;
+
+ controls.y = gwy_enum_combo_box_new(axes, G_N_ELEMENTS(axes),
+ G_CALLBACK(yaxis_changed), &controls,
+ args->y, TRUE);
+ gwy_table_attach_adjbar(table, row, _("Current _Y axis will become:"), NULL,
+ GTK_OBJECT(controls.y), GWY_HSCALE_WIDGET);
+ gtk_size_group_add_widget(sizegroup, controls.y);
+ row++;
+
+ controls.z = gwy_enum_combo_box_new(axes, G_N_ELEMENTS(axes),
+ G_CALLBACK(zaxis_changed), &controls,
+ args->z, TRUE);
+ gwy_table_attach_adjbar(table, row, _("Current _Z axis will become:"), NULL,
+ GTK_OBJECT(controls.z), GWY_HSCALE_WIDGET);
+ gtk_size_group_add_widget(sizegroup, controls.z);
+ row++;
+
+ gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
+ controls.new_channel
+ = gtk_check_button_new_with_mnemonic(_("Create new volume data"));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.new_channel),
+ args->new_channel);
+ gtk_table_attach(GTK_TABLE(table), controls.new_channel,
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
+ g_signal_connect(controls.new_channel, "toggled",
+ G_CALLBACK(new_channel_changed), &controls);
+ row++;
+
+ gtk_table_set_row_spacing(GTK_TABLE(table), row-1, 8);
+ controls.message = gtk_label_new(NULL);
+ gtk_misc_set_alignment(GTK_MISC(controls.message), 0.0, 0.5);
+ gtk_table_attach(GTK_TABLE(table), controls.message,
+ 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
+ row++;
+
+ g_object_unref(sizegroup);
+ update_message(&controls);
+ update_sensitivity(&controls);
+
+ gtk_widget_show_all(dialog);
+
+ response = gtk_dialog_run(GTK_DIALOG(dialog));
+ gtk_widget_destroy(dialog);
+
+ return response == GTK_RESPONSE_OK;
+}
+
+static void
+new_channel_changed(GtkToggleButton *toggle, SwapAxesControls *controls)
+{
+ controls->args->new_channel = gtk_toggle_button_get_active(toggle);
+ update_sensitivity(controls);
+}
+
+static void
+xaxis_changed(GtkComboBox *combo, SwapAxesControls *controls)
+{
+ controls->args->x = gwy_enum_combo_box_get_active(combo);
+ update_third_axis(controls, 0);
+}
+
+static void
+yaxis_changed(GtkComboBox *combo, SwapAxesControls *controls)
+{
+ controls->args->y = gwy_enum_combo_box_get_active(combo);
+ update_third_axis(controls, 1);
+}
+
+static void
+zaxis_changed(GtkComboBox *combo, SwapAxesControls *controls)
+{
+ controls->args->z = gwy_enum_combo_box_get_active(combo);
+ update_third_axis(controls, 2);
+ update_message(controls);
+}
+
+static void
+update_message(SwapAxesControls *controls)
+{
+ if (!controls->has_zcal)
+ return;
+
+ if (controls->args->z == AXIS_ZPOS || controls->args->z == AXIS_ZNEG)
+ gtk_label_set_text(GTK_LABEL(controls->message), NULL);
+ else {
+ gtk_label_set_text(GTK_LABEL(controls->message),
+ _("Z axis calibration will be lost."));
+ }
+}
+
+static void
+update_sensitivity(SwapAxesControls *controls)
+{
+ SwapAxesArgs *args = controls->args;
+ gboolean is_noop;
+
+ is_noop = (args->x == AXIS_XPOS
+ && args->y == AXIS_YPOS
+ && args->z == AXIS_ZPOS
+ && !args->new_channel);
+ gtk_dialog_set_response_sensitive(GTK_DIALOG(controls->dialog),
+ GTK_RESPONSE_OK, !is_noop);
+}
+
+static void
+update_third_axis(SwapAxesControls *controls, gint changed_axis)
+{
+ SwapAxesArgs *args = controls->args;
+ AxisType xyz[3];
+ gint third, axis_to_fix;
+
+ if (changed_axis == controls->last_changed) {
+ /* Dd nothing. */
+ }
+ else if (changed_axis == controls->second_last_changed)
+ GWY_SWAP(gint, controls->last_changed, controls->second_last_changed);
+ else {
+ controls->second_last_changed = controls->last_changed;
+ controls->last_changed = changed_axis;
+ }
+
+ if (axes_are_consistent(args)) {
+ update_sensitivity(controls);
+ return;
+ }
+
+ third = 3 - (controls->last_changed + controls->second_last_changed);
+ xyz[0] = args->x;
+ xyz[1] = args->y;
+ xyz[2] = args->z;
+
+ if (xyz[third]/2 == xyz[controls->last_changed]/2)
+ axis_to_fix = third;
+ else
+ axis_to_fix = controls->second_last_changed;
+
+ if (axis_to_fix == 0) {
+ args->x = (2*(3 - args->y/2 - args->z/2)) | (args->x & 1);
+ g_assert(axes_are_consistent(args));
+ gwy_enum_combo_box_set_active(GTK_COMBO_BOX(controls->x), args->x);
+ }
+ else if (axis_to_fix == 1) {
+ args->y = (2*(3 - args->z/2 - args->x/2)) | (args->y & 1);
+ g_assert(axes_are_consistent(args));
+ gwy_enum_combo_box_set_active(GTK_COMBO_BOX(controls->y), args->y);
+ }
+ else if (axis_to_fix == 2) {
+ args->z = (2*(3 - args->x/2 - args->y/2)) | (args->z & 1);
+ g_assert(axes_are_consistent(args));
+ gwy_enum_combo_box_set_active(GTK_COMBO_BOX(controls->z), args->z);
+ }
+ else {
+ g_assert_not_reached();
+ }
+}
+
+static gboolean
+axes_are_consistent(const SwapAxesArgs *args)
+{
+ if (args->y/2 == args->x/2)
+ return FALSE;
+ if (args->z/2 == args->y/2)
+ return FALSE;
+ if (args->x/2 == args->z/2)
+ return FALSE;
+
+ return TRUE;
+}
+
+static void
+swaxes_do(GwyContainer *data, gint id, GwyBrick *brick, SwapAxesArgs *args)
+{
+ AxisType ax = args->x, ay = args->y, az = args->z;
+ AxisType bx = 2*(ax/2), by = 2*(ay/2), bz = 2*(az/2);
+ gboolean xinv = ax & 1, yinv = ay & 1, zinv = az & 1;
+ guint oldxres = gwy_brick_get_xres(brick),
+ oldyres = gwy_brick_get_yres(brick),
+ oldzres = gwy_brick_get_zres(brick),
+ xres = oldxres, yres = oldyres, zres = oldzres;
+ gdouble xreal = gwy_brick_get_xreal(brick),
+ yreal = gwy_brick_get_yreal(brick),
+ zreal = gwy_brick_get_zreal(brick),
+ newxreal = xreal, newyreal = yreal, newzreal = zreal;
+ gdouble xoff = gwy_brick_get_xoffset(brick),
+ yoff = gwy_brick_get_yoffset(brick),
+ zoff = gwy_brick_get_zoffset(brick),
+ newxoff = xoff, newyoff = yoff, newzoff = zoff;
+ GwyBrick *result;
+ GwyDataField *preview = NULL;
+ GwyDataLine *zcal = gwy_brick_get_zcalibration(brick);
+ guint i, j, k, n;
+ const gdouble *bdata = gwy_brick_get_data_const(brick);
+ GwySIUnit *oldunit[4], *unit[4];
+ gdouble *rdata, *r1, *r2;
+ GQuark quarks[2];
+
+ /* There are 48 different combinations, which is way too much. Implement
+ * the transformation in two steps:
+ * 1. Reshaping, without regard of axis inversion (6 types, one trivial). */
+ if (bx == AXIS_XPOS && by == AXIS_YPOS && bz == AXIS_ZPOS) {
+ result = gwy_brick_duplicate(brick);
+ }
+ else if (bx == AXIS_XPOS && by == AXIS_ZPOS && bz == AXIS_YPOS) {
+ /* Y <-> Z */
+ GWY_SWAP(guint, yres, zres);
+ GWY_SWAP(gdouble, newyreal, newzreal);
+ GWY_SWAP(gdouble, newyoff, newzoff);
+ result = gwy_brick_new(xres, yres, zres,
+ newxreal, newyreal, newzreal,
+ FALSE);
+ rdata = gwy_brick_get_data(result);
+
+ for (i = 0; i < zres; i++) {
+ for (j = 0; j < yres; j++) {
+ for (k = 0; k < xres; k++, rdata++)
+ *rdata = bdata[(j*oldyres + i)*oldxres + k];
+ }
+ }
+ }
+ else if (bx == AXIS_YPOS && by == AXIS_XPOS && bz == AXIS_ZPOS) {
+ /* X <-> Y */
+ GWY_SWAP(guint, xres, yres);
+ GWY_SWAP(gdouble, newxreal, newyreal);
+ GWY_SWAP(gdouble, newxoff, newyoff);
+ result = gwy_brick_new(xres, yres, zres,
+ newxreal, newyreal, newzreal,
+ FALSE);
+ rdata = gwy_brick_get_data(result);
+
+ for (i = 0; i < zres; i++) {
+ for (j = 0; j < yres; j++) {
+ for (k = 0; k < xres; k++, rdata++)
+ *rdata = bdata[(i*oldyres + k)*oldxres + j];
+ }
+ }
+
+ if (zcal) {
+ zcal = gwy_data_line_duplicate(zcal);
+ gwy_brick_set_zcalibration(result, zcal);
+ g_object_unref(zcal);
+ }
+ }
+ else if (bx == AXIS_ZPOS && by == AXIS_YPOS && bz == AXIS_XPOS) {
+ /* Z <-> X */
+ GWY_SWAP(guint, zres, xres);
+ GWY_SWAP(gdouble, newzreal, newxreal);
+ GWY_SWAP(gdouble, newzoff, newxoff);
+ result = gwy_brick_new(xres, yres, zres,
+ newxreal, newyreal, newzreal,
+ FALSE);
+ rdata = gwy_brick_get_data(result);
+
+ for (i = 0; i < zres; i++) {
+ for (j = 0; j < yres; j++) {
+ for (k = 0; k < xres; k++, rdata++)
+ *rdata = bdata[(k*oldyres + j)*oldxres + i];
+ }
+ }
+ }
+ else if (bx == AXIS_YPOS && by == AXIS_ZPOS && bz == AXIS_XPOS) {
+ /* X -> Y -> Z -> X */
+ xres = oldzres;
+ yres = oldxres;
+ zres = oldyres;
+ newxreal = zreal;
+ newyreal = xreal;
+ newzreal = yreal;
+ newxoff = zoff;
+ newyoff = xoff;
+ newzoff = yoff;
+ result = gwy_brick_new(xres, yres, zres,
+ newxreal, newyreal, newzreal,
+ FALSE);
+ rdata = gwy_brick_get_data(result);
+
+ for (i = 0; i < zres; i++) {
+ for (j = 0; j < yres; j++) {
+ for (k = 0; k < xres; k++, rdata++)
+ *rdata = bdata[(k*oldyres + i)*oldxres + j];
+ }
+ }
+ }
+ else if (bx == AXIS_ZPOS && by == AXIS_XPOS && bz == AXIS_YPOS) {
+ /* X -> Z -> Y -> X */
+ xres = oldyres;
+ yres = oldzres;
+ zres = oldxres;
+ newxreal = yreal;
+ newyreal = zreal;
+ newzreal = xreal;
+ newxoff = yoff;
+ newyoff = zoff;
+ newzoff = xoff;
+ result = gwy_brick_new(xres, yres, zres,
+ newxreal, newyreal, newzreal,
+ FALSE);
+ rdata = gwy_brick_get_data(result);
+
+ for (i = 0; i < zres; i++) {
+ for (j = 0; j < yres; j++) {
+ for (k = 0; k < xres; k++, rdata++)
+ *rdata = bdata[(j*oldyres + k)*oldxres + i];
+ }
+ }
+ }
+ else {
+ g_assert_not_reached();
+ }
+
+ /* 2. Reverse along axes (8 types, one trivial). */
+ rdata = gwy_brick_get_data(result);
+ if (!xinv && !yinv && !zinv) {
+ /* Do nothing. */
+ }
+ else if (xinv && yinv && zinv) {
+ n = xres*yres*zres;
+ r1 = rdata;
+ r2 = rdata + n-1;
+ for (i = n/2; i; i--, r1++, r2--)
+ GWY_SWAP(gdouble, *r1, *r2);
+ }
+ else if (!xinv && !yinv && zinv) {
+ n = xres*yres;
+ for (i = 0; i < zres/2; i++) {
+ r1 = rdata + i*n;
+ r2 = rdata + (zres-1 - i)*n;
+ for (j = n; j; j--, r1++, r2++)
+ GWY_SWAP(gdouble, *r1, *r2);
+ }
+ }
+ else if (xinv && !yinv && !zinv) {
+ n = yres*zres;
+ for (i = 0; i < n; i++) {
+ r1 = rdata + i*xres;
+ r2 = r1 + xres-1;
+ for (j = xres/2; j; j--, r1++, r2--)
+ GWY_SWAP(gdouble, *r1, *r2);
+ }
+ }
+ else if (!xinv && yinv && !zinv) {
+ for (i = 0; i < zres; i++) {
+ for (j = 0; j < yres/2; j++) {
+ r1 = rdata + (i*yres + j)*xres;
+ r2 = rdata + (i*yres + yres-1 - j)*xres;
+ for (k = xres; k; k--, r1++, r2++)
+ GWY_SWAP(gdouble, *r1, *r2);
+ }
+ }
+ }
+ else if (xinv && yinv && !zinv) {
+ n = xres*yres;
+ for (i = 0; i < zres; i++) {
+ r1 = rdata + i*n;
+ r2 = r1 + n-1;
+ for (j = n/2; j; j--, r1++, r2--)
+ GWY_SWAP(gdouble, *r1, *r2);
+ }
+ }
+ else if (xinv && !yinv && zinv) {
+ for (i = 0; i < zres/2; i++) {
+ for (j = 0; j < yres; j++) {
+ r1 = rdata + (i*yres + j)*xres;
+ r2 = rdata + ((zres-1 - i)*yres + j)*xres + xres-1;
+ for (k = xres; k; k--, r1++, r2--)
+ GWY_SWAP(gdouble, *r1, *r2);
+ }
+ }
+ }
+ else if (!xinv && yinv && zinv) {
+ for (i = 0; i < zres/2; i++) {
+ for (j = 0; j < yres; j++) {
+ r1 = rdata + (i*yres + j)*xres;
+ r2 = rdata + ((zres-1 - i)*yres + (yres-1 - j))*xres;
+ for (k = xres; k; k--, r1++, r2++)
+ GWY_SWAP(gdouble, *r1, *r2);
+ }
+ }
+ }
+ else {
+ g_assert_not_reached();
+ }
+
+ /* The result can only have a calibration if Z axis was preserved. */
+ if (zinv && (zcal = gwy_brick_get_zcalibration(result))) {
+ gwy_data_line_invert(zcal, TRUE, FALSE);
+ }
+
+ gwy_brick_set_xoffset(result, xoff);
+ gwy_brick_set_yoffset(result, yoff);
+ gwy_brick_set_zoffset(result, zoff);
+
+ /* Reuse the old preview if the XY plane is preserved. */
+ if (gwy_container_gis_object(data, gwy_app_get_brick_preview_key_for_id(id),
+ &preview)
+ && (bx == AXIS_XPOS || bx == AXIS_YPOS)
+ && (by == AXIS_XPOS || by == AXIS_YPOS)) {
+ GwyDataField *tmp;
+
+ if (ax == AXIS_YPOS && ay == AXIS_XNEG)
+ tmp = gwy_data_field_new_rotated_90(preview, TRUE);
+ else if (ax == AXIS_YNEG && ay == AXIS_XPOS)
+ tmp = gwy_data_field_new_rotated_90(preview, FALSE);
+ else {
+ tmp = gwy_data_field_duplicate(preview);
+ if (ax == AXIS_XPOS && ay == AXIS_YPOS) {
+ /* Do nothing. */
+ }
+ else if (ax == AXIS_XNEG && ay == AXIS_YNEG)
+ gwy_data_field_invert(tmp, TRUE, TRUE, FALSE);
+ else if (ax == AXIS_XNEG && ay == AXIS_YPOS)
+ gwy_data_field_invert(tmp, FALSE, TRUE, FALSE);
+ else if (ax == AXIS_XPOS && ay == AXIS_YNEG)
+ gwy_data_field_invert(tmp, TRUE, FALSE, FALSE);
+ else if (ax == AXIS_YPOS && ay == AXIS_XPOS)
+ gwy_data_field_flip_xy(preview, tmp, FALSE);
+ else if (ax == AXIS_YNEG && ay == AXIS_XNEG)
+ gwy_data_field_flip_xy(preview, tmp, TRUE);
+ else {
+ g_assert_not_reached();
+ }
+ }
+ GWY_SWAP(GwyDataField*, tmp, preview);
+
+ gwy_data_field_set_xoffset(preview, xoff);
+ gwy_data_field_set_yoffset(preview, yoff);
+ }
+ else {
+ preview = gwy_data_field_new(xres, yres, newxreal, yres, FALSE);
+ gwy_brick_mean_plane(result, preview, 0, 0, 0, xres, yres, -1, TRUE);
+ }
+
+ /* Set units. */
+ oldunit[0] = gwy_brick_get_si_unit_x(brick);
+ oldunit[1] = gwy_brick_get_si_unit_y(brick);
+ oldunit[2] = gwy_brick_get_si_unit_z(brick);
+ oldunit[3] = gwy_brick_get_si_unit_w(brick);
+ unit[0] = gwy_brick_get_si_unit_x(result);
+ unit[1] = gwy_brick_get_si_unit_y(result);
+ unit[2] = gwy_brick_get_si_unit_z(result);
+ unit[3] = gwy_brick_get_si_unit_w(result);
+ gwy_serializable_clone(G_OBJECT(oldunit[0]), G_OBJECT(unit[bx/2]));
+ gwy_serializable_clone(G_OBJECT(oldunit[1]), G_OBJECT(unit[by/2]));
+ gwy_serializable_clone(G_OBJECT(oldunit[2]), G_OBJECT(unit[bz/2]));
+ gwy_serializable_clone(G_OBJECT(oldunit[3]), G_OBJECT(unit[3]));
+
+ /* Create new channel or modify the current one. */
+ if (args->new_channel) {
+ gint newid;
+ const guchar *gradient;
+
+ newid = gwy_app_data_browser_add_brick(result, preview, data, TRUE);
+ gwy_app_set_brick_title(data, id, _("Rotated Data"));
+ gwy_app_volume_log_add_volume(data, id, newid);
+
+ quarks[0] = gwy_app_get_brick_palette_key_for_id(id);
+ quarks[1] = gwy_app_get_brick_palette_key_for_id(newid);
+ if (gwy_container_gis_string(data, quarks[0], &gradient))
+ gwy_container_set_const_string(data, quarks[1], gradient);
+ }
+ else {
+ quarks[0] = gwy_app_get_brick_key_for_id(id);
+ quarks[1] = gwy_app_get_brick_preview_key_for_id(id);
+ gwy_app_undo_qcheckpointv(data, G_N_ELEMENTS(quarks), quarks);
+ gwy_container_set_object(data, quarks[0], result);
+ gwy_container_set_object(data, quarks[1], preview);
+ gwy_app_volume_log_add_volume(data, id, id);
+ }
+
+ g_object_unref(result);
+ g_object_unref(preview);
+}
+
+static const gchar x_key[] = "/module/volume_swaxes/x";
+static const gchar y_key[] = "/module/volume_swaxes/y";
+static const gchar z_key[] = "/module/volume_swaxes/z";
+static const gchar new_channel_key[] = "/module/volume_swaxes/new_channel";
+
+static void
+swaxes_sanitize_args(SwapAxesArgs *args)
+{
+ args->x = MIN(args->x, NAXES-1);
+ args->y = MIN(args->y, NAXES-1);
+ args->z = MIN(args->z, NAXES-1);
+ args->new_channel = !!args->new_channel;
+
+ /* Do not bother fixing invalid configurations, reset to no-op. */
+ if (!axes_are_consistent(args)) {
+ args->x = swaxes_defaults.x;
+ args->y = swaxes_defaults.y;
+ args->z = swaxes_defaults.z;
+ }
+}
+
+static void
+swaxes_load_args(GwyContainer *container, SwapAxesArgs *args)
+{
+ *args = swaxes_defaults;
+
+ gwy_container_gis_enum_by_name(container, x_key, &args->x);
+ gwy_container_gis_enum_by_name(container, y_key, &args->y);
+ gwy_container_gis_enum_by_name(container, z_key, &args->z);
+ gwy_container_gis_boolean_by_name(container, new_channel_key,
+ &args->new_channel);
+ swaxes_sanitize_args(args);
+}
+
+static void
+swaxes_save_args(GwyContainer *container, SwapAxesArgs *args)
+{
+ gwy_container_set_enum_by_name(container, x_key, args->x);
+ gwy_container_set_enum_by_name(container, y_key, args->y);
+ gwy_container_set_enum_by_name(container, z_key, args->z);
+ gwy_container_set_boolean_by_name(container, new_channel_key,
+ args->new_channel);
+}
+
+/* vim: set cin et ts=4 sw=4 cino=>1s,e0,n0,f0,{0,}0,^0,\:1s,=0,g1s,h0,t0,+1s,c3,(0,u0 : */
diff --git a/modules/volume/volume_zcal.c b/modules/volume/volume_zcal.c
index d59b171..20a804e 100644
--- a/modules/volume/volume_zcal.c
+++ b/modules/volume/volume_zcal.c
@@ -1,5 +1,5 @@
/*
- * @(#) $Id: volume_zcal.c 18626 2016-04-22 10:15:13Z yeti-dn $
+ * @(#) $Id: volume_zcal.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2015 David Necas (Yeti).
* E-mail: yeti at gwyddion.net.
*
@@ -108,7 +108,7 @@ static GwyModuleInfo module_info = {
"2015",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, volume_zcal)
static gboolean
module_register(void)
diff --git a/modules/volume/volumeops.c b/modules/volume/volumeops.c
new file mode 100644
index 0000000..8d6c817
--- /dev/null
+++ b/modules/volume/volumeops.c
@@ -0,0 +1,89 @@
+/*
+ * @(#) $Id: volumeops.c 20008 2017-07-02 20:54:14Z yeti-dn $
+ * Copyright (C) 2003 David Necas (Yeti), Petr Klapetek.
+ * E-mail: yeti at gwyddion.net, klapetek at gwyddion.net.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "config.h"
+#include <gtk/gtk.h>
+#include <libgwyddion/gwymacros.h>
+#include <libprocess/brick.h>
+#include <libgwydgets/gwystock.h>
+#include <libgwymodule/gwymodule-volume.h>
+#include <app/gwyapp.h>
+
+#define VOLUMEOPS_RUN_MODES (GWY_RUN_IMMEDIATE)
+
+static gboolean module_register(void);
+static void extract_preview(GwyContainer *data,
+ GwyRunType run);
+
+static GwyModuleInfo module_info = {
+ GWY_MODULE_ABI_VERSION,
+ &module_register,
+ N_("Inverts value in volume data"),
+ "Yeti <yeti at gwyddion.net>",
+ "1.1",
+ "David Nečas (Yeti)",
+ "2017",
+};
+
+GWY_MODULE_QUERY2(module_info, volumeops)
+
+static gboolean
+module_register(void)
+{
+ gwy_volume_func_register("extract_preview",
+ (GwyVolumeFunc)&extract_preview,
+ N_("/Extract _Preview"),
+ NULL,
+ VOLUMEOPS_RUN_MODES,
+ GWY_MENU_FLAG_VOLUME,
+ N_("Extract volume data preview to an image"));
+
+ return TRUE;
+}
+
+static void
+extract_preview(GwyContainer *data, GwyRunType run)
+{
+ GwyDataField *dfield = NULL;
+ GQuark quark;
+ gint id, newid;
+ gchar *title;
+
+ g_return_if_fail(run & VOLUMEOPS_RUN_MODES);
+
+ gwy_app_data_browser_get_current(GWY_APP_BRICK_ID, &id, 0);
+
+ quark = gwy_app_get_brick_preview_key_for_id(id);
+ dfield = gwy_data_field_duplicate(gwy_container_get_object(data, quark));
+ title = gwy_app_get_brick_title(data, id);
+
+ g_return_if_fail(GWY_IS_DATA_FIELD(dfield));
+
+ newid = gwy_app_data_browser_add_data_field(dfield, data, TRUE);
+ g_object_unref(dfield);
+
+ quark = gwy_app_get_data_title_key_for_id(newid);
+ gwy_container_set_string(data, quark, (guchar*)title);
+
+ gwy_app_channel_log_add(data, -1, newid, "volume::extract_preview", NULL);
+}
+
+/* vim: set cin et ts=4 sw=4 cino=>1s,e0,n0,f0,{0,}0,^0,\:1s,=0,g1s,h0,t0,+1s,c3,(0,u0 : */
diff --git a/modules/xyz/Makefile.am b/modules/xyz/Makefile.am
index 163e51c..55f863a 100644
--- a/modules/xyz/Makefile.am
+++ b/modules/xyz/Makefile.am
@@ -1,4 +1,4 @@
-# @(#) $Id: Makefile.am 18893 2016-08-27 08:49:04Z yeti-dn $
+# @(#) $Id: Makefile.am 20001 2017-06-29 21:52:24Z yeti-dn $
# Put sources that are for some reason disabled yet present in svn checkouts
# here. This makes them distributed and translations of their messages are
@@ -7,11 +7,26 @@ disabled_sources =
xyzdir = $(pkglibdir)/modules/xyz
-xyz_LTLIBRARIES = \
+# Only bundle modules without own dependencies. If something goes wrong with
+# any required libraries at run-time, it will at most break these individual
+# unbundled modules, not the bundle.
+bundlable_modules = \
xyz_drift.la \
xyz_level.la \
xyz_raster.la
+# xyz_modules is either the bundle or all the individual modules.
+if MODULE_BUNDLING
+xyz_modules = xyz.la
+BUILT_SOURCES = xyz.c
+xyz_la_CFLAGS = $(AM_CFLAGS) -DGWY_MODULE_BUNDLING
+else
+xyz_modules = $(bundlable_modules)
+endif
+
+xyz_LTLIBRARIES = \
+ $(xyz_modules)
+
EXTRA_DIST = \
$(disabled_sources)
@@ -19,10 +34,6 @@ if OS_MSWIN
no_undefined = -no-undefined
endif
-AM_CPPFLAGS = -I$(top_srcdir) -DG_LOG_DOMAIN=\"Module\"
-AM_CFLAGS = @COMMON_CFLAGS@
-AM_LDFLAGS = -avoid-version -module $(no_undefined) $(module_libadd)
-
if MODULE_DEPENDENCIES
module_libadd = \
$(top_builddir)/app/libgwyapp2.la \
@@ -34,10 +45,26 @@ module_libadd = \
@GTK_LIBS@
endif
+AM_CPPFLAGS = -I$(top_srcdir) -DG_LOG_DOMAIN=\"Module\"
+AM_CFLAGS = @COMMON_CFLAGS@
+AM_LDFLAGS = -avoid-version -module $(no_undefined) $(module_libadd)
+
+# Bundlable modules, must be listed in xyz_la_SOURCES below.
xyz_drift_la_SOURCES = xyz_drift.c
xyz_level_la_SOURCES = xyz_level.c
xyz_raster_la_SOURCES = xyz_raster.c
+xyz_la_SOURCES = \
+ $(xyz_drift_la_SOURCES) \
+ $(xyz_level_la_SOURCES) \
+ $(xyz_raster_la_SOURCES) \
+ xyz.c
+
+xyz.c: $(srcdir)/Makefile.am $(top_srcdir)/utils/gen-module-bundle.sh
+ $(SHELL) $(top_srcdir)/utils/gen-module-bundle.sh xyz.c $(bundlable_modules)
+
+CLEAN_FILES = xyz.c
+
clean-local:
rm -f core.* *~
diff --git a/modules/xyz/Makefile.in b/modules/xyz/Makefile.in
index fe32db1..ab6ffa5 100644
--- a/modules/xyz/Makefile.in
+++ b/modules/xyz/Makefile.in
@@ -14,7 +14,7 @@
@SET_MAKE@
-# @(#) $Id: Makefile.am 18893 2016-08-27 08:49:04Z yeti-dn $
+# @(#) $Id: Makefile.am 20001 2017-06-29 21:52:24Z yeti-dn $
VPATH = @srcdir@
am__is_gnu_make = { \
@@ -138,19 +138,33 @@ am__uninstall_files_from_dir = { \
}
am__installdirs = "$(DESTDIR)$(xyzdir)"
LTLIBRARIES = $(xyz_LTLIBRARIES)
-xyz_drift_la_LIBADD =
-am_xyz_drift_la_OBJECTS = xyz_drift.lo
-xyz_drift_la_OBJECTS = $(am_xyz_drift_la_OBJECTS)
+xyz_la_LIBADD =
+am__objects_1 = xyz_la-xyz_drift.lo
+am__objects_2 = xyz_la-xyz_level.lo
+am__objects_3 = xyz_la-xyz_raster.lo
+am_xyz_la_OBJECTS = $(am__objects_1) $(am__objects_2) $(am__objects_3) \
+ xyz_la-xyz.lo
+xyz_la_OBJECTS = $(am_xyz_la_OBJECTS)
AM_V_lt = $(am__v_lt_ at AM_V@)
am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
am__v_lt_0 = --silent
am__v_lt_1 =
+xyz_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(xyz_la_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+ at MODULE_BUNDLING_TRUE@am_xyz_la_rpath = -rpath $(xyzdir)
+xyz_drift_la_LIBADD =
+am_xyz_drift_la_OBJECTS = xyz_drift.lo
+xyz_drift_la_OBJECTS = $(am_xyz_drift_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_xyz_drift_la_rpath = -rpath $(xyzdir)
xyz_level_la_LIBADD =
am_xyz_level_la_OBJECTS = xyz_level.lo
xyz_level_la_OBJECTS = $(am_xyz_level_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_xyz_level_la_rpath = -rpath $(xyzdir)
xyz_raster_la_LIBADD =
am_xyz_raster_la_OBJECTS = xyz_raster.lo
xyz_raster_la_OBJECTS = $(am_xyz_raster_la_OBJECTS)
+ at MODULE_BUNDLING_FALSE@am_xyz_raster_la_rpath = -rpath $(xyzdir)
AM_V_P = $(am__v_P_ at AM_V@)
am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
am__v_P_0 = false
@@ -185,10 +199,10 @@ AM_V_CCLD = $(am__v_CCLD_ at AM_V@)
am__v_CCLD_ = $(am__v_CCLD_ at AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
-SOURCES = $(xyz_drift_la_SOURCES) $(xyz_level_la_SOURCES) \
- $(xyz_raster_la_SOURCES)
-DIST_SOURCES = $(xyz_drift_la_SOURCES) $(xyz_level_la_SOURCES) \
- $(xyz_raster_la_SOURCES)
+SOURCES = $(xyz_la_SOURCES) $(xyz_drift_la_SOURCES) \
+ $(xyz_level_la_SOURCES) $(xyz_raster_la_SOURCES)
+DIST_SOURCES = $(xyz_la_SOURCES) $(xyz_drift_la_SOURCES) \
+ $(xyz_level_la_SOURCES) $(xyz_raster_la_SOURCES)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
@@ -254,10 +268,7 @@ EPYDOC = @EPYDOC@
EXEEXT = @EXEEXT@
EXR_CFLAGS = @EXR_CFLAGS@
EXR_LIBS = @EXR_LIBS@
-FFTW3_1_CFLAGS = @FFTW3_1_CFLAGS@
-FFTW3_1_LIBS = @FFTW3_1_LIBS@
FFTW3_CFLAGS = @FFTW3_CFLAGS@
-FFTW3_DEPENDENCY = @FFTW3_DEPENDENCY@
FFTW3_LIBS = @FFTW3_LIBS@
FGREP = @FGREP@
GCONFTOOL = @GCONFTOOL@
@@ -267,6 +278,8 @@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
GLIBC21 = @GLIBC21@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GMODULE_CFLAGS = @GMODULE_CFLAGS@
GMODULE_LIBS = @GMODULE_LIBS@
GMSGFMT = @GMSGFMT@
@@ -291,7 +304,9 @@ GTK_MAC_LIBS = @GTK_MAC_LIBS@
GWY_VERSION_MAJOR = @GWY_VERSION_MAJOR@
GWY_VERSION_MINOR = @GWY_VERSION_MINOR@
GWY_VERSION_STRING = @GWY_VERSION_STRING@
+HDRIMAGE_EXTRA_CFLAGS = @HDRIMAGE_EXTRA_CFLAGS@
HTML_DIR = @HTML_DIR@
+INKSCAPE = @INKSCAPE@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -349,6 +364,7 @@ PASCAL = @PASCAL@
PATH_SEPARATOR = @PATH_SEPARATOR@
PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
+PNGCRUSH = @PNGCRUSH@
PNG_CFLAGS = @PNG_CFLAGS@
PNG_LIBS = @PNG_LIBS@
POD2MAN = @POD2MAN@
@@ -357,17 +373,13 @@ PYGTK_CFLAGS = @PYGTK_CFLAGS@
PYGTK_CODEGENDIR = @PYGTK_CODEGENDIR@
PYGTK_LIBS = @PYGTK_LIBS@
PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
PYTHON_EXTRA_CFLAGS = @PYTHON_EXTRA_CFLAGS@
PYTHON_INCLUDES = @PYTHON_INCLUDES@
-PYTHON_LIBS = @PYTHON_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
PYTHON_PLATFORM = @PYTHON_PLATFORM@
PYTHON_PREFIX = @PYTHON_PREFIX@
-PYTHON_SYSCFG_BASECFLAGS = @PYTHON_SYSCFG_BASECFLAGS@
-PYTHON_SYSCFG_CCSHARED = @PYTHON_SYSCFG_CCSHARED@
-PYTHON_SYSCFG_LDFLAGS = @PYTHON_SYSCFG_LDFLAGS@
-PYTHON_SYSCFG_LIBDIR = @PYTHON_SYSCFG_LIBDIR@
-PYTHON_SYSCFG_LINKFORSHARED = @PYTHON_SYSCFG_LINKFORSHARED@
PYTHON_VERSION = @PYTHON_VERSION@
RANLIB = @RANLIB@
RUBY = @RUBY@
@@ -458,18 +470,28 @@ top_srcdir = @top_srcdir@
# kept. If we remove them completely, various bits can get lost.
disabled_sources =
xyzdir = $(pkglibdir)/modules/xyz
-xyz_LTLIBRARIES = \
+
+# Only bundle modules without own dependencies. If something goes wrong with
+# any required libraries at run-time, it will at most break these individual
+# unbundled modules, not the bundle.
+bundlable_modules = \
xyz_drift.la \
xyz_level.la \
xyz_raster.la
+ at MODULE_BUNDLING_FALSE@xyz_modules = $(bundlable_modules)
+
+# xyz_modules is either the bundle or all the individual modules.
+ at MODULE_BUNDLING_TRUE@xyz_modules = xyz.la
+ at MODULE_BUNDLING_TRUE@BUILT_SOURCES = xyz.c
+ at MODULE_BUNDLING_TRUE@xyz_la_CFLAGS = $(AM_CFLAGS) -DGWY_MODULE_BUNDLING
+xyz_LTLIBRARIES = \
+ $(xyz_modules)
+
EXTRA_DIST = \
$(disabled_sources)
@OS_MSWIN_TRUE at no_undefined = -no-undefined
-AM_CPPFLAGS = -I$(top_srcdir) -DG_LOG_DOMAIN=\"Module\"
-AM_CFLAGS = @COMMON_CFLAGS@
-AM_LDFLAGS = -avoid-version -module $(no_undefined) $(module_libadd)
@MODULE_DEPENDENCIES_TRUE at module_libadd = \
@MODULE_DEPENDENCIES_TRUE@ $(top_builddir)/app/libgwyapp2.la \
@MODULE_DEPENDENCIES_TRUE@ $(top_builddir)/libdraw/libgwydraw2.la \
@@ -479,10 +501,23 @@ AM_LDFLAGS = -avoid-version -module $(no_undefined) $(module_libadd)
@MODULE_DEPENDENCIES_TRUE@ $(top_builddir)/libprocess/libgwyprocess2.la \
@MODULE_DEPENDENCIES_TRUE@ @GTK_LIBS@
+AM_CPPFLAGS = -I$(top_srcdir) -DG_LOG_DOMAIN=\"Module\"
+AM_CFLAGS = @COMMON_CFLAGS@
+AM_LDFLAGS = -avoid-version -module $(no_undefined) $(module_libadd)
+
+# Bundlable modules, must be listed in xyz_la_SOURCES below.
xyz_drift_la_SOURCES = xyz_drift.c
xyz_level_la_SOURCES = xyz_level.c
xyz_raster_la_SOURCES = xyz_raster.c
-all: all-am
+xyz_la_SOURCES = \
+ $(xyz_drift_la_SOURCES) \
+ $(xyz_level_la_SOURCES) \
+ $(xyz_raster_la_SOURCES) \
+ xyz.c
+
+CLEAN_FILES = xyz.c
+all: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) all-am
.SUFFIXES:
.SUFFIXES: .c .lo .o .obj
@@ -551,14 +586,17 @@ clean-xyzLTLIBRARIES:
rm -f $${locs}; \
}
+xyz.la: $(xyz_la_OBJECTS) $(xyz_la_DEPENDENCIES) $(EXTRA_xyz_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(xyz_la_LINK) $(am_xyz_la_rpath) $(xyz_la_OBJECTS) $(xyz_la_LIBADD) $(LIBS)
+
xyz_drift.la: $(xyz_drift_la_OBJECTS) $(xyz_drift_la_DEPENDENCIES) $(EXTRA_xyz_drift_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(xyzdir) $(xyz_drift_la_OBJECTS) $(xyz_drift_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_xyz_drift_la_rpath) $(xyz_drift_la_OBJECTS) $(xyz_drift_la_LIBADD) $(LIBS)
xyz_level.la: $(xyz_level_la_OBJECTS) $(xyz_level_la_DEPENDENCIES) $(EXTRA_xyz_level_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(xyzdir) $(xyz_level_la_OBJECTS) $(xyz_level_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_xyz_level_la_rpath) $(xyz_level_la_OBJECTS) $(xyz_level_la_LIBADD) $(LIBS)
xyz_raster.la: $(xyz_raster_la_OBJECTS) $(xyz_raster_la_DEPENDENCIES) $(EXTRA_xyz_raster_la_DEPENDENCIES)
- $(AM_V_CCLD)$(LINK) -rpath $(xyzdir) $(xyz_raster_la_OBJECTS) $(xyz_raster_la_LIBADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(am_xyz_raster_la_rpath) $(xyz_raster_la_OBJECTS) $(xyz_raster_la_LIBADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@@ -567,6 +605,10 @@ distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/xyz_drift.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/xyz_la-xyz.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/xyz_la-xyz_drift.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/xyz_la-xyz_level.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/xyz_la-xyz_raster.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/xyz_level.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/xyz_raster.Plo at am__quote@
@@ -591,6 +633,34 @@ distclean-compile:
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LTCOMPILE) -c -o $@ $<
+xyz_la-xyz_drift.lo: xyz_drift.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xyz_la_CFLAGS) $(CFLAGS) -MT xyz_la-xyz_drift.lo -MD -MP -MF $(DEPDIR)/xyz_la-xyz_drift.Tpo -c -o xyz_la-xyz_drift.lo `test -f 'xyz_drift.c' || echo '$(srcdir)/'`xyz_drift.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xyz_la-xyz_drift.Tpo $(DEPDIR)/xyz_la-xyz_drift.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xyz_drift.c' object='xyz_la-xyz_drift.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xyz_la_CFLAGS) $(CFLAGS) -c -o xyz_la-xyz_drift.lo `test -f 'xyz_drift.c' || echo '$(srcdir)/'`xyz_drift.c
+
+xyz_la-xyz_level.lo: xyz_level.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xyz_la_CFLAGS) $(CFLAGS) -MT xyz_la-xyz_level.lo -MD -MP -MF $(DEPDIR)/xyz_la-xyz_level.Tpo -c -o xyz_la-xyz_level.lo `test -f 'xyz_level.c' || echo '$(srcdir)/'`xyz_level.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xyz_la-xyz_level.Tpo $(DEPDIR)/xyz_la-xyz_level.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xyz_level.c' object='xyz_la-xyz_level.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xyz_la_CFLAGS) $(CFLAGS) -c -o xyz_la-xyz_level.lo `test -f 'xyz_level.c' || echo '$(srcdir)/'`xyz_level.c
+
+xyz_la-xyz_raster.lo: xyz_raster.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xyz_la_CFLAGS) $(CFLAGS) -MT xyz_la-xyz_raster.lo -MD -MP -MF $(DEPDIR)/xyz_la-xyz_raster.Tpo -c -o xyz_la-xyz_raster.lo `test -f 'xyz_raster.c' || echo '$(srcdir)/'`xyz_raster.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xyz_la-xyz_raster.Tpo $(DEPDIR)/xyz_la-xyz_raster.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xyz_raster.c' object='xyz_la-xyz_raster.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xyz_la_CFLAGS) $(CFLAGS) -c -o xyz_la-xyz_raster.lo `test -f 'xyz_raster.c' || echo '$(srcdir)/'`xyz_raster.c
+
+xyz_la-xyz.lo: xyz.c
+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xyz_la_CFLAGS) $(CFLAGS) -MT xyz_la-xyz.lo -MD -MP -MF $(DEPDIR)/xyz_la-xyz.Tpo -c -o xyz_la-xyz.lo `test -f 'xyz.c' || echo '$(srcdir)/'`xyz.c
+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xyz_la-xyz.Tpo $(DEPDIR)/xyz_la-xyz.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xyz.c' object='xyz_la-xyz.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xyz_la_CFLAGS) $(CFLAGS) -c -o xyz_la-xyz.lo `test -f 'xyz.c' || echo '$(srcdir)/'`xyz.c
+
mostlyclean-libtool:
-rm -f *.lo
@@ -680,13 +750,15 @@ distdir: $(DISTFILES)
fi; \
done
check-am: all-am
-check: check-am
+check: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) check-am
all-am: Makefile $(LTLIBRARIES)
installdirs:
for dir in "$(DESTDIR)$(xyzdir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
-install: install-am
+install: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
@@ -716,6 +788,7 @@ distclean-generic:
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
clean: clean-am
clean-am: clean-generic clean-libtool clean-local clean-xyzLTLIBRARIES \
@@ -787,7 +860,7 @@ ps-am:
uninstall-am: uninstall-xyzLTLIBRARIES
-.MAKE: install-am install-strip
+.MAKE: all check install install-am install-strip
.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
clean-libtool clean-local clean-xyzLTLIBRARIES cscopelist-am \
@@ -806,6 +879,9 @@ uninstall-am: uninstall-xyzLTLIBRARIES
.PRECIOUS: Makefile
+xyz.c: $(srcdir)/Makefile.am $(top_srcdir)/utils/gen-module-bundle.sh
+ $(SHELL) $(top_srcdir)/utils/gen-module-bundle.sh xyz.c $(bundlable_modules)
+
clean-local:
rm -f core.* *~
diff --git a/modules/xyz/xyz.c b/modules/xyz/xyz.c
new file mode 100644
index 0000000..6bd4e72
--- /dev/null
+++ b/modules/xyz/xyz.c
@@ -0,0 +1,30 @@
+/* This is a GENERATED file. */
+#include <glib.h>
+#include <libgwymodule/gwymodule.h>
+
+static const GwyModuleRecord* register_bundle(void);
+
+static GwyModuleInfo module_info = {
+ GWY_MODULE_ABI_VERSION | GWY_MODULE_BUNDLE_FLAG,
+ (GwyModuleRegisterFunc)®ister_bundle,
+ NULL, NULL, NULL, NULL, NULL,
+};
+
+GWY_MODULE_QUERY(module_info)
+
+GwyModuleInfo* _gwy_module_query__xyz_drift(void);
+GwyModuleInfo* _gwy_module_query__xyz_level(void);
+GwyModuleInfo* _gwy_module_query__xyz_raster(void);
+
+static const GwyModuleRecord modules[] = {
+ { _gwy_module_query__xyz_drift, "xyz_drift", },
+ { _gwy_module_query__xyz_level, "xyz_level", },
+ { _gwy_module_query__xyz_raster, "xyz_raster", },
+ { NULL, NULL, },
+};
+
+static const GwyModuleRecord*
+register_bundle(void)
+{
+ return modules;
+}
diff --git a/modules/xyz/xyz_drift.c b/modules/xyz/xyz_drift.c
index 43d20ef..3029020 100644
--- a/modules/xyz/xyz_drift.c
+++ b/modules/xyz/xyz_drift.c
@@ -84,7 +84,7 @@ typedef struct {
gdouble zdrift_b;
gdouble zdrift_c;
gint zdrift_average;
-
+
gboolean fit_xdrift;
gboolean fit_ydrift;
gboolean fit_zdrift;
@@ -95,8 +95,8 @@ typedef struct {
gdouble threshold_time;
gdouble threshold_length;
- gdouble neighbors;
- gint iterations;
+ gdouble neighbors;
+ gint iterations;
/* Interface only. */
gdouble xmin;
@@ -225,9 +225,9 @@ static void threshold_changed (XYZDriftControls *controls,
GtkAdjustment *adj);
static void iterations_changed (XYZDriftControls *controls,
GtkAdjustment *adj);
-static void zdrift_type_changed (GtkWidget *combo,
+static void zdrift_type_changed (GtkWidget *combo,
XYZDriftControls *controls);
-static void graph_changed (GtkWidget *combo,
+static void graph_changed (GtkWidget *combo,
XYZDriftControls *controls);
static void reset_ranges (XYZDriftControls *controls);
static void preview (XYZDriftControls *controls);
@@ -244,12 +244,12 @@ static void xyzdrift_load_args (GwyContainer *container,
static void xyzdrift_save_args (GwyContainer *container,
XYZDriftArgs *args);
-static void correct_drift (GwyXYZ *points,
- gint npoints,
- gdouble *xdrift,
- gdouble *ydrift,
+static void correct_drift (GwyXYZ *points,
+ gint npoints,
+ gdouble *xdrift,
+ gdouble *ydrift,
gdouble *zdrift,
- GwyXYZ *corpoints,
+ GwyXYZ *corpoints,
gboolean correctz);
static const XYZDriftArgs xyzdrift_defaults = {
@@ -271,7 +271,7 @@ static GwyModuleInfo module_info = {
"2016",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, xyz_drift)
static gboolean
module_register(void)
@@ -343,7 +343,7 @@ xyzdrift(GwyContainer *data, GwyRunType run)
siunit = gwy_surface_get_si_unit_z(timesurface);
if (gwy_si_unit_equal(siunit, siunits)
- || gwy_strequal(title, "Timestamp")) {
+ || g_ascii_strcasecmp(title, "Timestamp") == 0) {
rdata.timesurface = gwy_container_get_object(data, key);
rdata.timepoints = rdata.timesurface->data;
rdata.ntimepoints = rdata.timesurface->n;
@@ -364,7 +364,7 @@ xyzdrift(GwyContainer *data, GwyRunType run)
gtk_widget_destroy (dialog);
return;
}
-
+
initialize_ranges(&rdata, &args);
@@ -396,7 +396,7 @@ xyzdrift(GwyContainer *data, GwyRunType run)
NULL);
gcmodel = gwy_graph_curve_model_new();
- gwy_graph_curve_model_set_data(gcmodel, rdata.time, rdata.xdrift,
+ gwy_graph_curve_model_set_data(gcmodel, rdata.time, rdata.xdrift,
rdata.npoints);
g_object_set(gcmodel, "description", _("x-axis drift"), NULL);
@@ -415,7 +415,7 @@ xyzdrift(GwyContainer *data, GwyRunType run)
NULL);
gcmodel = gwy_graph_curve_model_new();
- gwy_graph_curve_model_set_data(gcmodel, rdata.time, rdata.ydrift,
+ gwy_graph_curve_model_set_data(gcmodel, rdata.time, rdata.ydrift,
rdata.npoints);
g_object_set(gcmodel, "description", _("y-axis drift"), NULL);
@@ -434,7 +434,7 @@ xyzdrift(GwyContainer *data, GwyRunType run)
NULL);
gcmodel = gwy_graph_curve_model_new();
- gwy_graph_curve_model_set_data(gcmodel, rdata.time, rdata.zdrift,
+ gwy_graph_curve_model_set_data(gcmodel, rdata.time, rdata.zdrift,
rdata.npoints);
g_object_set(gcmodel, "description", _("z-axis drift"), NULL);
@@ -735,7 +735,7 @@ construct_resolutions(XYZDriftControls *controls,
gtk_label_set_mnemonic_widget(GTK_LABEL(label), spin);
gtk_table_attach(table, spin, 1, 2, row, row+1,
GTK_EXPAND | GTK_FILL, 0, 0, 0);
- label = gtk_label_new("px");
+ label = gtk_label_new(_("px"));
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
gtk_table_attach(table, label, 2, 3, row, row+1,
GTK_EXPAND | GTK_FILL, 0, 0, 0);
@@ -750,7 +750,7 @@ construct_resolutions(XYZDriftControls *controls,
gtk_label_set_mnemonic_widget(GTK_LABEL(label), spin);
gtk_table_attach(table, spin, 1, 2, row, row+1,
GTK_EXPAND | GTK_FILL, 0, 0, 0);
- label = gtk_label_new("px");
+ label = gtk_label_new(_("px"));
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
gtk_table_attach(table, label, 2, 3, row, row+1,
GTK_EXPAND | GTK_FILL, 0, 0, 0);
@@ -834,7 +834,7 @@ construct_options(XYZDriftControls *controls,
GwySurface *surface = controls->rdata->surface;
GwySIValueFormat *vf;
-
+
GtkWidget *label, *spin, *button;
static const GwyEnum zdrifts[] = {
{ N_("2nd order polynom"), GWY_XYZDRIFT_ZMETHOD_POLYNOM, },
@@ -1107,7 +1107,7 @@ construct_options(XYZDriftControls *controls,
G_CALLBACK(x_to_inits_cb), controls);
-
+
row++;
label = gtk_label_new(_("Y drift:"));
@@ -1142,7 +1142,7 @@ construct_options(XYZDriftControls *controls,
G_CALLBACK(z_to_inits_cb), controls);
gwy_si_unit_value_format_free(vf);
-
+
return row;
}
@@ -1322,7 +1322,7 @@ zdrift_changed(XYZDriftControls *controls,
//args->zdrift_average = gtk_adjustment_get_value(GTK_ADJUSTMENT(controls->zdrift_average));
}
-static void
+static void
zdrift_type_changed(G_GNUC_UNUSED GtkWidget *combo, XYZDriftControls *controls)
{
@@ -1380,7 +1380,7 @@ find_next_pos(double px, G_GNUC_UNUSED double ppx, double pv, double ppv, double
-static void
+static void
graph_changed(G_GNUC_UNUSED GtkWidget *combo, XYZDriftControls *controls)
{
GwyGraphCurveModel *gcmodel;
@@ -1528,7 +1528,7 @@ get_bining(GwyXYZ *points, gint npoints, gint ***bin, gint **nbin, gdouble xreal
}
static gint
-find_closest_point_bining(GwyXYZ *points, gdouble *time, gdouble tt, gdouble pt, gint index, gint ***bin, gint **nbin,
+find_closest_point_bining(GwyXYZ *points, gdouble *time, gdouble tt, gdouble pt, gint index, gint ***bin, gint **nbin,
gdouble xreal, gdouble yreal, gdouble xoffset, gdouble yoffset)
{
gint bi, bj, i, j, k, bindex;
@@ -1552,16 +1552,16 @@ find_closest_point_bining(GwyXYZ *points, gdouble *time, gdouble tt, gdouble pt,
sdist = (points[index].x - points[bindex].x)*(points[index].x - points[bindex].x) +
(points[index].y - points[bindex].y)*(points[index].y - points[bindex].y);
-
+
// printf("%d %d %g %g %g %g %g\n", index, bindex, points[index].x, points[index].y, points[bindex].x, points[bindex].y, sdist);
-
+
if (sdist<spt) {
if (sdist<mindist) {
mindist = sdist;
closest = bindex;
}
}
- }
+ }
}
}
}
@@ -1570,7 +1570,7 @@ find_closest_point_bining(GwyXYZ *points, gdouble *time, gdouble tt, gdouble pt,
}
-static gint
+static gint
find_neighbors(gint *nbfrom, gint *nbto, GwyXYZ *points, gdouble *time, gint npoints, gdouble timethreshold, gdouble posthreshold,
gdouble xreal, gdouble yreal, gdouble xoffset, gdouble yoffset, gdouble neighbors, gdouble fraction)
{
@@ -1629,7 +1629,7 @@ fit_func_to_curve(gdouble *xdata, gdouble *ydata, gint ndata, const gchar *name,
guint i, n;
- /*
+ /*
FILE *fw = fopen("fitdata.txt", "w");
for (i=0; i<ndata; i++) {
fprintf(fw, "%g %g\n", xdata[i], ydata[i]);
@@ -1744,7 +1744,7 @@ check_nbs_errors(GtkWidget *window, gint nnbs)
GTK_BUTTONS_CLOSE,
_("No neighbors found"));
gtk_dialog_run (GTK_DIALOG (dialog));
- gtk_widget_destroy (dialog);
+ gtk_widget_destroy (dialog);
return FALSE;
}
@@ -1753,7 +1753,6 @@ check_nbs_errors(GtkWidget *window, gint nnbs)
}
return TRUE;
-
}
static gboolean
@@ -1768,13 +1767,13 @@ get_zdrift(XYZDriftControls *controls, GwyXYZ *points, GwyXYZ *corpoints, gint n
gboolean fixed[3];
gboolean ok=0;
- gdouble timethreshold = controls->args->threshold_time;
- gdouble posthreshold = controls->args->threshold_length;
+ gdouble timethreshold = controls->args->threshold_time;
+ gdouble posthreshold = controls->args->threshold_length;
//FILE *fw = fopen("driftdata.txt", "w");
//set drift arrays
- set_drift(controls, npoints, time, xdrift, ydrift, zdrift,
+ set_drift(controls, npoints, time, xdrift, ydrift, zdrift,
bx, cx, by, cy, *bz, *cz);
//correct xy data (corpoints) for drift, don't correct z as this will be fitted
@@ -1783,24 +1782,24 @@ get_zdrift(XYZDriftControls *controls, GwyXYZ *points, GwyXYZ *corpoints, gint n
//find neigbors for error evaluation
nnbs = find_neighbors(nbfrom, nbto, corpoints, time, npoints, timethreshold, posthreshold,
- controls->args->xmax - controls->args->xmin, controls->args->ymax - controls->args->ymin, controls->args->xmin, controls->args->ymin,
+ controls->args->xmax - controls->args->xmin, controls->args->ymax - controls->args->ymin, controls->args->xmin, controls->args->ymin,
controls->args->neighbors, controls->fraction);
if (!check_nbs_errors(controls->dialog, nnbs)) return FALSE;
-
+
dtime = g_new(gdouble, nnbs);
drift = g_new(gdouble, nnbs);
for (i=0; i<nnbs; i++) {
dtime[i] = (time[nbfrom[i]]+time[nbto[i]])/2;
drift[i] = (corpoints[nbto[i]].z - corpoints[nbfrom[i]].z)/(time[nbto[i]] - time[nbfrom[i]]);
- }
+ }
if (controls->args->zdrift_type==GWY_XYZDRIFT_ZMETHOD_POLYNOM) {
params[0] = *bz;
params[1] = 2*(*cz);
fixed[0] = 0;
- fixed[1] = 0;
+ fixed[1] = 0;
ok = fit_func_to_curve(dtime, drift, nnbs, _("Polynomial (order 1)"), params, errors, fixed);
@@ -1813,7 +1812,7 @@ get_zdrift(XYZDriftControls *controls, GwyXYZ *points, GwyXYZ *corpoints, gint n
params[1] = (*bz)/(*cz);
params[2] = *cz;
fixed[0] = 1;
- fixed[1] = 0;
+ fixed[1] = 0;
fixed[2] = 0;
ok = fit_func_to_curve(dtime, drift, nnbs, _("Exponential"), params, errors, fixed);
@@ -1824,7 +1823,7 @@ get_zdrift(XYZDriftControls *controls, GwyXYZ *points, GwyXYZ *corpoints, gint n
}
/*
- printf("Fitting completed with %d: %g %g\n", ok, *bz, *cz);
+ printf("Fitting completed with %d: %g %g\n", ok, *bz, *cz);
for (i=0; i<nnbs; i++) {
@@ -1841,19 +1840,20 @@ get_zdrift(XYZDriftControls *controls, GwyXYZ *points, GwyXYZ *corpoints, gint n
return ok;
}
+
static gdouble
get_xydrift_error(XYZDriftControls *controls, GwyXYZ *points, GwyXYZ *corpoints, gint npoints, gdouble *time, gdouble *xdrift, gdouble *ydrift, gdouble *zdrift,
gdouble bx, gdouble cx, gdouble by, gdouble cy, gdouble bz, gdouble cz, gint *nbfrom, gint *nbto)
{
gint nnbs;
- gdouble timethreshold = controls->args->threshold_time;
- gdouble posthreshold = controls->args->threshold_length;
+ gdouble timethreshold = controls->args->threshold_time;
+ gdouble posthreshold = controls->args->threshold_length;
if (!gwy_app_wait_set_fraction(controls->fraction)) return -1;
//set drift arrays
- set_drift(controls, npoints, time, xdrift, ydrift, zdrift,
+ set_drift(controls, npoints, time, xdrift, ydrift, zdrift,
bx, cx, by, cy, bz, cz);
//correct xyz data (corpoints) for drift
@@ -1862,7 +1862,7 @@ get_xydrift_error(XYZDriftControls *controls, GwyXYZ *points, GwyXYZ *corpoints,
//find neigbors for error evaluation
nnbs = find_neighbors(nbfrom, nbto, corpoints, time, npoints, timethreshold, posthreshold,
- controls->args->xmax - controls->args->xmin, controls->args->ymax - controls->args->ymin, controls->args->xmin, controls->args->ymin,
+ controls->args->xmax - controls->args->xmin, controls->args->ymax - controls->args->ymin, controls->args->xmin, controls->args->ymin,
controls->args->neighbors, controls->fraction);
//printf("%d neighbors for parameter; %g %g\n", nnbs, timethreshold, posthreshold);
@@ -1906,13 +1906,13 @@ estimate_drift(XYZDriftControls *controls, GwyXYZ *points, GwyXYZ *corpoints, gi
cdiff = controls->cdiff;
// bdiff = 1e-12; //gesi, poly
-// cdiff = 1e-15;
+// cdiff = 1e-15;
// bdiff = 1e-8; //gesi, exp
// cdiff = 500;
-
+
// bdiff = 1e-8; //gen, poly
-// cdiff = 1e-12;
+// cdiff = 1e-12;
// bdiff = 1e-5; //gen, exp
// cdiff = 100;
@@ -1938,7 +1938,7 @@ estimate_drift(XYZDriftControls *controls, GwyXYZ *points, GwyXYZ *corpoints, gi
}
- if (controls->args->fit_xdrift)
+ if (controls->args->fit_xdrift)
{
//iterate through bx
pbx = bx;
@@ -1948,8 +1948,8 @@ estimate_drift(XYZDriftControls *controls, GwyXYZ *points, GwyXYZ *corpoints, gi
vpbx = get_xydrift_error(controls, points, corpoints, npoints, time, xdrift, ydrift, zdrift,
bx, cx, by, cy, bz, cz, nbfrom, nbto);
- if (vpbx==-1) break;
-
+ if (vpbx==-1) break;
+
diff = bdiff;
mindiff = diff/100;
bx = pbx+diff;
@@ -1979,12 +1979,12 @@ estimate_drift(XYZDriftControls *controls, GwyXYZ *points, GwyXYZ *corpoints, gi
intit++;
} while (!done && intit<100);
-
+
sofar += 1;
controls->fraction = sofar/total;
if (!gwy_app_wait_set_fraction(controls->fraction)) break;
}
- if (controls->args->fit_xdrift)
+ if (controls->args->fit_xdrift)
{
//iterate through cx
pcx = cx;
@@ -1993,7 +1993,7 @@ estimate_drift(XYZDriftControls *controls, GwyXYZ *points, GwyXYZ *corpoints, gi
vpcx = get_xydrift_error(controls, points, corpoints, npoints, time, xdrift, ydrift, zdrift,
bx, cx, by, cy, bz, cz, nbfrom, nbto);
- if (vpcx==-1) break;
+ if (vpcx==-1) break;
diff = cdiff;
mindiff = diff/100;
@@ -2025,12 +2025,12 @@ estimate_drift(XYZDriftControls *controls, GwyXYZ *points, GwyXYZ *corpoints, gi
intit++;
} while (!done && intit<100);
sofar += 1;
-
+
controls->fraction = sofar/total;
if (!gwy_app_wait_set_fraction(controls->fraction)) break;
}
- if (controls->args->fit_ydrift)
+ if (controls->args->fit_ydrift)
{
//iterate through by
pby = by;
@@ -2040,7 +2040,7 @@ estimate_drift(XYZDriftControls *controls, GwyXYZ *points, GwyXYZ *corpoints, gi
bx, cx, by, cy, bz, cz, nbfrom, nbto);
if (vpby==-1) break;
-
+
diff = bdiff;
mindiff = bdiff/100;
by = pby+diff;
@@ -2071,11 +2071,11 @@ estimate_drift(XYZDriftControls *controls, GwyXYZ *points, GwyXYZ *corpoints, gi
intit++;
} while (!done && intit<100);
sofar += 1;
-
+
controls->fraction = sofar/total;
if (!gwy_app_wait_set_fraction(controls->fraction)) break;
}
- if (controls->args->fit_ydrift)
+ if (controls->args->fit_ydrift)
{
//iterate through cy
pcy = cy;
@@ -2083,7 +2083,7 @@ estimate_drift(XYZDriftControls *controls, GwyXYZ *points, GwyXYZ *corpoints, gi
vpcy = get_xydrift_error(controls, points, corpoints, npoints, time, xdrift, ydrift, zdrift,
bx, cx, by, cy, bz, cz, nbfrom, nbto);
-
+
if (vpcy==-1) break;
diff = cdiff;
@@ -2116,7 +2116,7 @@ estimate_drift(XYZDriftControls *controls, GwyXYZ *points, GwyXYZ *corpoints, gi
intit++;
} while (!done && intit<100);
sofar += 1;
-
+
controls->fraction = sofar/total;
if (!gwy_app_wait_set_fraction(controls->fraction)) break;
@@ -2135,8 +2135,8 @@ estimate_drift(XYZDriftControls *controls, GwyXYZ *points, GwyXYZ *corpoints, gi
rdata->zdrift_b_result = bz;
rdata->zdrift_c_result = cz;
-
- /*printf("Resulting drifts: x %g %g y %g %g z %g %g\n",
+
+ /*printf("Resulting drifts: x %g %g y %g %g z %g %g\n",
rdata->xdrift_b_result, rdata->xdrift_c_result,
rdata->ydrift_b_result, rdata->ydrift_c_result,
rdata->zdrift_b_result, rdata->zdrift_c_result
@@ -2146,8 +2146,6 @@ estimate_drift(XYZDriftControls *controls, GwyXYZ *points, GwyXYZ *corpoints, gi
free(nbfrom);
free(nbto);
-
-
}
@@ -2159,7 +2157,7 @@ guess(XYZDriftControls *controls)
XYZDriftData *rdata = controls->rdata;
timespan = rdata->timepoints[rdata->npoints-1].z - rdata->timepoints[0].z;
- xspan = args->xmax - args->xmin;
+ xspan = args->xmax - args->xmin;
controls->in_update = 1;
@@ -2175,7 +2173,7 @@ guess(XYZDriftControls *controls)
controls->in_update = 0;
}
-
+
static void
preview(XYZDriftControls *controls)
@@ -2204,25 +2202,25 @@ preview(XYZDriftControls *controls)
init_drift(controls, rdata->timepoints, rdata->npoints, rdata->time);
/*estimate the drift using some fitting routine, returning filled xdrift, ydrift and zdrift arrays*/
- if (args->fit_xdrift || args->fit_ydrift || args->fit_zdrift)
+ if (args->fit_xdrift || args->fit_ydrift || args->fit_zdrift)
estimate_drift(controls, rdata->points, rdata->corpoints, rdata->npoints, rdata->time,
rdata->xdrift, rdata->ydrift, rdata->zdrift);
/*correct data for drift, creating corpoints from points*/
- set_drift(controls, rdata->npoints, rdata->time, rdata->xdrift, rdata->ydrift, rdata->zdrift,
- rdata->xdrift_b_result, rdata->xdrift_c_result,
- rdata->ydrift_b_result, rdata->ydrift_c_result,
+ set_drift(controls, rdata->npoints, rdata->time, rdata->xdrift, rdata->ydrift, rdata->zdrift,
+ rdata->xdrift_b_result, rdata->xdrift_c_result,
+ rdata->ydrift_b_result, rdata->ydrift_c_result,
rdata->zdrift_b_result, rdata->zdrift_c_result);
correct_drift(rdata->points, rdata->npoints, rdata->xdrift, rdata->ydrift, rdata->zdrift,
rdata->corpoints, TRUE);
g_snprintf(buffer, sizeof(buffer), "b = %g, c = %g", rdata->xdrift_b_result, rdata->xdrift_c_result);
- gtk_label_set_text(GTK_LABEL(controls->result_x), buffer);
+ gtk_label_set_text(GTK_LABEL(controls->result_x), buffer);
g_snprintf(buffer, sizeof(buffer), "b = %g, c = %g", rdata->ydrift_b_result, rdata->ydrift_c_result);
- gtk_label_set_text(GTK_LABEL(controls->result_y), buffer);
+ gtk_label_set_text(GTK_LABEL(controls->result_y), buffer);
g_snprintf(buffer, sizeof(buffer), "b = %g, c = %g", rdata->zdrift_b_result, rdata->zdrift_c_result);
- gtk_label_set_text(GTK_LABEL(controls->result_z), buffer);
+ gtk_label_set_text(GTK_LABEL(controls->result_z), buffer);
/*render preview*/
@@ -2249,9 +2247,6 @@ preview(XYZDriftControls *controls)
gwy_container_set_object_by_name(controls->mydata, "/0/data", dfield);
g_object_unref(dfield);
-
-
-
}
@@ -2343,26 +2338,25 @@ initialize_ranges(const XYZDriftData *rdata,
}
-
-static const gchar xres_key[] = "/module/xyz_drift/xres";
-static const gchar yres_key[] = "/module/xyz_drift/yres";
-static const gchar xdrift_b_key[] = "/module/xyz_drift/xdrift_b";
-static const gchar xdrift_c_key[] = "/module/xyz_drift/xdrift_c";
-static const gchar ydrift_b_key[] = "/module/xyz_drift/ydrift_b";
-static const gchar ydrift_c_key[] = "/module/xyz_drift/ydrift_c";
-static const gchar zdrift_b_key[] = "/module/xyz_drift/zdrift_b";
-static const gchar zdrift_c_key[] = "/module/xyz_drift/zdrift_c";
-static const gchar fit_xdrift_key[] = "/module/xyz_drift/fit_xdrift";
-static const gchar fit_ydrift_key[] = "/module/xyz_drift/fit_ydrift";
-static const gchar fit_zdrift_key[] = "/module/xyz_drift/fit_zdrift";
-static const gchar graph_type_key[] = "/module/xyz_drift/graph_type";
-static const gchar threshold_time_key[] = "/module/xyz_drift/threshold_time";
-static const gchar threshold_length_key[] = "/module/xyz_drift/threshold_length";
-static const gchar neighbors_key[] = "/module/xyz_drift/neighbors";
-static const gchar iterations_key[] = "/module/xyz_drift/iterations";
-static const gchar xdrift_type_key[] = "/module/xyz_drift/xdrift_type_key";
-static const gchar ydrift_type_key[] = "/module/xyz_drift/ydrift_type_key";
-static const gchar zdrift_type_key[] = "/module/xyz_drift/zdrift_type_key";
+static const gchar xres_key[] = "/module/xyz_drift/xres";
+static const gchar yres_key[] = "/module/xyz_drift/yres";
+static const gchar xdrift_b_key[] = "/module/xyz_drift/xdrift_b";
+static const gchar xdrift_c_key[] = "/module/xyz_drift/xdrift_c";
+static const gchar ydrift_b_key[] = "/module/xyz_drift/ydrift_b";
+static const gchar ydrift_c_key[] = "/module/xyz_drift/ydrift_c";
+static const gchar zdrift_b_key[] = "/module/xyz_drift/zdrift_b";
+static const gchar zdrift_c_key[] = "/module/xyz_drift/zdrift_c";
+static const gchar fit_xdrift_key[] = "/module/xyz_drift/fit_xdrift";
+static const gchar fit_ydrift_key[] = "/module/xyz_drift/fit_ydrift";
+static const gchar fit_zdrift_key[] = "/module/xyz_drift/fit_zdrift";
+static const gchar graph_type_key[] = "/module/xyz_drift/graph_type";
+static const gchar threshold_time_key[] = "/module/xyz_drift/threshold_time";
+static const gchar threshold_length_key[] = "/module/xyz_drift/threshold_length";
+static const gchar neighbors_key[] = "/module/xyz_drift/neighbors";
+static const gchar iterations_key[] = "/module/xyz_drift/iterations";
+static const gchar xdrift_type_key[] = "/module/xyz_drift/xdrift_type_key";
+static const gchar ydrift_type_key[] = "/module/xyz_drift/ydrift_type_key";
+static const gchar zdrift_type_key[] = "/module/xyz_drift/zdrift_type_key";
static void
xyzdrift_sanitize_args(XYZDriftArgs *args)
@@ -2376,7 +2370,7 @@ xyzdrift_sanitize_args(XYZDriftArgs *args)
args->ydrift_type = MIN(args->ydrift_type, GWY_XYZDRIFT_METHOD_EXPONENTIAL);
args->zdrift_type = MIN(args->zdrift_type, GWY_XYZDRIFT_ZMETHOD_AVERAGE);
args->graph_type = MIN(args->graph_type, GWY_XYZDRIFT_GRAPH_Z);
-
+
args->xres = CLAMP(args->xres, 2, 16384);
args->yres = CLAMP(args->yres, 2, 16384);
@@ -2440,8 +2434,6 @@ xyzdrift_save_args(GwyContainer *container,
}
-
-
/* //automatic estimation of start difference, skip for now
vbx = get_xydrift_error(controls, points, corpoints, npoints, time, xdrift, ydrift, zdrift,
@@ -2461,8 +2453,6 @@ xyzdrift_save_args(GwyContainer *container,
printf("diff found: %g\n", mindiff);
*/
-
-
/* vim: set cin et ts=4 sw=4 cino=>1s,e0,n0,f0,{0,}0,^0,\:1s,=0,g1s,h0,t0,+1s,c3,(0,u0 : */
diff --git a/modules/xyz/xyz_level.c b/modules/xyz/xyz_level.c
index d74e49b..30d6432 100644
--- a/modules/xyz/xyz_level.c
+++ b/modules/xyz/xyz_level.c
@@ -1,5 +1,5 @@
/*
- * $Id: xyz_level.c 19013 2016-09-29 07:56:27Z yeti-dn $
+ * $Id: xyz_level.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2016 David Necas (Yeti).
*
* This program is free software; you can redistribute it and/or modify
@@ -97,7 +97,7 @@ static GwyModuleInfo module_info = {
"2016",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, xyz_level)
static gboolean
module_register(void)
diff --git a/modules/xyz/xyz_raster.c b/modules/xyz/xyz_raster.c
index 5a5ea54..5a87be1 100644
--- a/modules/xyz/xyz_raster.c
+++ b/modules/xyz/xyz_raster.c
@@ -1,5 +1,5 @@
/*
- * $Id: xyz_raster.c 18606 2016-04-14 12:41:22Z yeti-dn $
+ * $Id: xyz_raster.c 19948 2017-06-22 14:05:41Z yeti-dn $
* Copyright (C) 2016 David Necas (Yeti).
*
* This program is free software; you can redistribute it and/or modify
@@ -114,75 +114,72 @@ typedef struct {
guint size;
} WorkQueue;
-static gboolean module_register (void);
-static void xyzras (GwyContainer *data,
- GwyRunType run);
-static gboolean xyzras_dialog (XYZRasArgs *arg,
- XYZRasData *rdata,
- GwyContainer *data,
- gint id);
-static void add_dfield_to_data (GwyDataField *dfield,
- GwyContainer *data,
- gint id);
-static gint construct_resolutions (XYZRasControls *controls,
- GtkTable *table,
- gint row);
-static gint construct_physical_dims(XYZRasControls *controls,
- GtkTable *table,
- gint row);
-static gint construct_options (XYZRasControls *controls,
- GtkTable *table,
- gint row);
-static void make_pixels_square (XYZRasControls *controls);
-static void xres_changed (XYZRasControls *controls,
- GtkAdjustment *adj);
-static void yres_changed (XYZRasControls *controls,
- GtkAdjustment *adj);
-static void xmin_changed (XYZRasControls *controls,
- GtkEntry *entry);
-static void xmax_changed (XYZRasControls *controls,
- GtkEntry *entry);
-static void ymin_changed (XYZRasControls *controls,
- GtkEntry *entry);
-static void ymax_changed (XYZRasControls *controls,
- GtkEntry *entry);
-static void interpolation_changed (XYZRasControls *controls,
- GtkComboBox *combo);
-static void exterior_changed (XYZRasControls *controls,
- GtkComboBox *combo);
-static void reset_ranges (XYZRasControls *controls);
-static void update_selection (XYZRasControls *controls);
-static void selection_changed (XYZRasControls *controls,
- gint hint,
- GwySelection *selection);
-static void clear_selection (XYZRasControls *controls);
-static void preview (XYZRasControls *controls);
-static void triangulation_info (XYZRasControls *controls);
-static void render_regular_directly(XYZRasControls *controls);
-static GwyDataField* xyzras_do (XYZRasData *rdata,
- const XYZRasArgs *args,
- GtkWindow *dialog,
- gchar **error);
-static gboolean interpolate_field (guint npoints,
- const GwyXYZ *points,
- GwyDataField *dfield,
- GwySetFractionFunc set_fraction,
- GwySetMessageFunc set_message);
-static gboolean extend_borders (XYZRasData *rdata,
- const XYZRasArgs *args,
- gboolean check_for_changes,
- gdouble epsrel);
-static void xyzras_free (XYZRasData *rdata);
-static void initialize_ranges (const XYZRasData *rdata,
- XYZRasArgs *args);
-static void invalidate_raster (XYZRasData *rdata);
-static void analyse_points (XYZRasData *rdata,
- double epsrel);
-static GwyDataField* check_regular_grid (GwySurface *surface);
-static void xyzras_load_args (GwyContainer *container,
- XYZRasArgs *args);
-static void xyzras_save_args (GwyContainer *container,
- XYZRasArgs *args);
+static gboolean module_register (void);
+static void xyzras (GwyContainer *data,
+ GwyRunType run);
+static gboolean xyzras_dialog (XYZRasArgs *arg,
+ XYZRasData *rdata,
+ GwyContainer *data,
+ gint id);
+static void add_dfield_to_data (GwyDataField *dfield,
+ GwyContainer *data,
+ gint id);
+static gint construct_physical_dims (XYZRasControls *controls,
+ GtkTable *table,
+ gint row);
+static gint construct_options (XYZRasControls *controls,
+ GtkTable *table,
+ gint row);
+static void make_pixels_square (XYZRasControls *controls);
+static void xres_changed (XYZRasControls *controls,
+ GtkAdjustment *adj);
+static void yres_changed (XYZRasControls *controls,
+ GtkAdjustment *adj);
+static void xmin_changed (XYZRasControls *controls,
+ GtkEntry *entry);
+static void xmax_changed (XYZRasControls *controls,
+ GtkEntry *entry);
+static void ymin_changed (XYZRasControls *controls,
+ GtkEntry *entry);
+static void ymax_changed (XYZRasControls *controls,
+ GtkEntry *entry);
+static void interpolation_changed (XYZRasControls *controls,
+ GtkComboBox *combo);
+static void exterior_changed (XYZRasControls *controls,
+ GtkComboBox *combo);
+static void reset_ranges (XYZRasControls *controls);
+static void update_selection (XYZRasControls *controls);
+static void selection_changed (XYZRasControls *controls,
+ gint hint,
+ GwySelection *selection);
+static void clear_selection (XYZRasControls *controls);
+static void preview (XYZRasControls *controls);
+static void triangulation_info (XYZRasControls *controls);
+static void render_regular_directly (XYZRasControls *controls);
+static GwyDataField* xyzras_do (XYZRasData *rdata,
+ const XYZRasArgs *args,
+ GtkWindow *dialog,
+ gchar **error);
+static gboolean interpolate_field (guint npoints,
+ const GwyXYZ *points,
+ GwyDataField *dfield,
+ GwySetFractionFunc set_fraction,
+ GwySetMessageFunc set_message);
+static gboolean extend_borders (XYZRasData *rdata,
+ const XYZRasArgs *args,
+ gboolean check_for_changes,
+ gdouble epsrel);
+static void xyzras_free (XYZRasData *rdata);
+static void initialize_ranges (const XYZRasData *rdata,
+ XYZRasArgs *args);
+static void invalidate_raster (XYZRasData *rdata);
+static void analyse_points (XYZRasData *rdata,
+ double epsrel);
+static GwyDataField* check_regular_grid (GwySurface *surface);
+static void xyzras_load_args (GwyContainer *container,
+ XYZRasArgs *args);
+static void xyzras_save_args (GwyContainer *container,
+ XYZRasArgs *args);
static const XYZRasArgs xyzras_defaults = {
GWY_INTERPOLATION_LINEAR, GWY_EXTERIOR_MIRROR_EXTEND,
@@ -196,12 +193,12 @@ static GwyModuleInfo module_info = {
&module_register,
N_("Rasterizes XYZ data to images."),
"Yeti <yeti at gwyddion.net>",
- "1.0",
+ "1.1",
"David Nečas (Yeti)",
"2016",
};
-GWY_MODULE_QUERY(module_info)
+GWY_MODULE_QUERY2(module_info, xyz_raster)
static gboolean
module_register(void)
@@ -318,7 +315,7 @@ xyzras_dialog(XYZRasArgs *args,
GwyContainer *data,
gint id)
{
- GtkWidget *dialog, *vbox, *align, *label, *hbox, *button;
+ GtkWidget *dialog, *vbox, *label, *hbox, *button;
GwyPixmapLayer *player;
GwyVectorLayer *vlayer;
GwyDataField *dfield;
@@ -367,35 +364,52 @@ xyzras_dialog(XYZRasArgs *args,
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), hbox, TRUE, TRUE, 0);
/* Left column */
- align = gtk_alignment_new(0.0, 0.0, 0.0, 0.0);
- gtk_box_pack_start(GTK_BOX(hbox), align, FALSE, FALSE, 0);
+ vbox = gtk_vbox_new(FALSE, 8);
+ gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 0);
- table = GTK_TABLE(gtk_table_new(10, 5, FALSE));
+ table = GTK_TABLE(gtk_table_new(4, 5, FALSE));
gtk_table_set_row_spacings(table, 2);
gtk_table_set_col_spacings(table, 6);
- gtk_container_add(GTK_CONTAINER(align), GTK_WIDGET(table));
+ gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(table), FALSE, FALSE, 0);
row = 0;
- row = construct_resolutions(&controls, table, row);
+ gtk_table_attach(table, gwy_label_new_header(_("Resolution")),
+ 0, 4, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ row++;
+
+ controls.xres = gtk_adjustment_new(args->xres, 2, 16384, 1, 100, 0);
+ gwy_table_attach_adjbar(GTK_WIDGET(table), row,
+ _("_Horizontal size:"), _("px"),
+ controls.xres, GWY_HSCALE_LOG | GWY_HSCALE_SNAP);
+ row++;
+
+ controls.yres = gtk_adjustment_new(args->yres, 2, 16384, 1, 100, 0);
+ gwy_table_attach_adjbar(GTK_WIDGET(table), row,
+ _("_Vertical size:"), _("px"),
+ controls.yres, GWY_HSCALE_LOG | GWY_HSCALE_SNAP);
+ row++;
button = gtk_button_new_with_mnemonic(_("Make Pixels S_quare"));
- gtk_table_attach(table, button, 1, 4, row, row+1,
- GTK_FILL, 0, 0, 0);
+ gtk_table_attach(table, button, 0, 2, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect_swapped(button, "clicked",
G_CALLBACK(make_pixels_square), &controls);
- gtk_table_set_row_spacing(table, row, 8);
row++;
+ table = GTK_TABLE(gtk_table_new(7, 5, FALSE));
+ gtk_table_set_row_spacings(table, 2);
+ gtk_table_set_col_spacings(table, 6);
+ gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(table), FALSE, FALSE, 0);
+ row = 0;
+
row = construct_physical_dims(&controls, table, row);
button = gtk_button_new_with_mnemonic(_("Reset Ran_ges"));
- gtk_table_attach(table, button, 1, 4, row, row+1,
- GTK_FILL, 0, 0, 0);
+ gtk_table_attach(table, button, 0, 4, row, row+1, GTK_FILL, 0, 0, 0);
g_signal_connect_swapped(button, "clicked",
G_CALLBACK(reset_ranges), &controls);
- gtk_table_set_row_spacing(table, row, 8);
row++;
+ gtk_table_set_row_spacing(table, row-1, 8);
row = construct_options(&controls, table, row);
/* Right column */
@@ -507,51 +521,6 @@ xyzras_dialog(XYZRasArgs *args,
}
static gint
-construct_resolutions(XYZRasControls *controls,
- GtkTable *table,
- gint row)
-{
- XYZRasArgs *args = controls->args;
- GtkWidget *spin, *label;
-
- gtk_table_attach(table, gwy_label_new_header(_("Resolution")),
- 0, 4, row, row+1, GTK_EXPAND | GTK_FILL, 0, 0, 0);
- row++;
-
- label = gtk_label_new_with_mnemonic(_("_Horizontal size:"));
- gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_table_attach(table, label, 0, 1, row, row+1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
- controls->xres = gtk_adjustment_new(args->xres, 2, 16384, 1, 100, 0);
- spin = gtk_spin_button_new(GTK_ADJUSTMENT(controls->xres), 0, 0);
- gtk_label_set_mnemonic_widget(GTK_LABEL(label), spin);
- gtk_table_attach(table, spin, 1, 2, row, row+1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
- label = gtk_label_new("px");
- gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_table_attach(table, label, 2, 3, row, row+1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
- row++;
-
- label = gtk_label_new_with_mnemonic(_("_Vertical size:"));
- gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_table_attach(table, label, 0, 1, row, row+1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
- controls->yres = gtk_adjustment_new(args->yres, 2, 16384, 1, 100, 0);
- spin = gtk_spin_button_new(GTK_ADJUSTMENT(controls->yres), 0, 0);
- gtk_label_set_mnemonic_widget(GTK_LABEL(label), spin);
- gtk_table_attach(table, spin, 1, 2, row, row+1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
- label = gtk_label_new("px");
- gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_table_attach(table, label, 2, 3, row, row+1,
- GTK_EXPAND | GTK_FILL, 0, 0, 0);
- row++;
-
- return row;
-}
-
-static gint
construct_physical_dims(XYZRasControls *controls,
GtkTable *table,
gint row)
@@ -1050,13 +1019,18 @@ xyzras_do(XYZRasData *rdata,
gwy_debug("must triangulate");
if (!triangulation)
rdata->triangulation = triangulation = gwy_triangulation_new();
+ /* This can fail for two different reasons:
+ * 1) numerical failure
+ * 2) cancellation
+ * In the second case we do not want another attempt at the
+ * triangulation and should stop immediately. */
ok = gwy_triangulation_triangulate_iterative(triangulation,
points->len,
points->data,
sizeof(GwyXYZ),
set_fraction,
set_message);
- if (!ok) {
+ if (!ok && !gwy_app_wait_was_canceled()) {
/* Try again with a small jitter. The jitter is small
* compared to pixel size, not typical point distance, so
* it should be insubstantial in the raster image. */
@@ -1638,91 +1612,26 @@ analyse_points(XYZRasData *rdata,
static GwyDataField*
check_regular_grid(GwySurface *surface)
{
- gdouble ymaxstep, xmin, xmax, ymin, ymax, dx, dy;
+ GwyXY xymin, dxy;
guint n, xres, yres, k;
GwyDataField *dfield;
- gdouble *yvalues, *data;
- gboolean *encountered;
- gboolean ok = TRUE;
+ gdouble *data;
+ guint *map;
n = surface->n;
- if (n < 4)
- return NULL;
-
- /* Do not create Nx1 or 1xN fields. */
- gwy_surface_get_xrange(surface, &xmin, &xmax);
- gwy_surface_get_yrange(surface, &ymin, &ymax);
- if (xmin == xmax || ymin == ymax)
- return NULL;
-
- yvalues = g_new(gdouble, n);
- for (k = 0; k < n; k++)
- yvalues[k] = surface->data[k].y;
- gwy_math_sort(n, yvalues);
-
- ymaxstep = 0.0;
- for (k = 1; k < n; k++) {
- if (yvalues[k] - yvalues[k-1] > ymaxstep)
- ymaxstep = yvalues[k] - yvalues[k-1];
- }
- gwy_debug("ymaxstep %g", ymaxstep);
- yres = (gint)ceil((ymax - ymin)/ymaxstep) + 1;
- gwy_debug("estimated yres %d", yres);
- g_free(yvalues);
-
- if (n % yres != 0)
+ if (!(map = gwy_check_regular_2d_grid((const gdouble*)surface->data, 3, n,
+ -1.0, &xres, &yres, &xymin, &dxy)))
return NULL;
- xres = n/yres;
- gwy_debug("yres %d", xres);
- dx = (xmax - xmin)/(xres - 1);
- dy = (ymax - ymin)/(yres - 1);
- xmin -= 0.5*dx;
- xmax += 0.5*dx;
- ymin -= 0.5*dy;
- ymax += 0.5*dy;
-
- dfield = gwy_data_field_new(xres, yres, xmax - xmin, ymax - ymin, FALSE);
+ dfield = gwy_data_field_new(xres, yres, xres*dxy.x, yres*dxy.y, FALSE);
data = gwy_data_field_get_data(dfield);
- encountered = g_new0(gboolean, n);
- for (k = 0; k < n; k++) {
- gdouble y = (surface->data[k].y - ymin)/dy;
- gdouble x = (surface->data[k].x - xmin)/dx;
- gint i = (gint)floor(y);
- gint j = (gint)floor(x);
-
- if (fabs(x - j - 0.5) > 0.01) {
- gwy_debug("point (%d,%d) too far in x %g", j, i, x - j - 0.5);
- ok = FALSE;
- break;
- }
- if (fabs(y - i - 0.5) > 0.01) {
- gwy_debug("point (%d,%d) too far in y %g", j, i, y - i - 0.5);
- ok = FALSE;
- break;
- }
- if (encountered[i*xres + j]) {
- gwy_debug("point (%d,%d) encountered twice", j, i);
- ok = FALSE;
- break;
- }
-
- encountered[i*xres + j] = TRUE;
- data[i*xres + j] = surface->data[k].z;
- }
-
- g_free(encountered);
- if (!ok) {
- g_object_unref(dfield);
- return NULL;
- }
+ for (k = 0; k < n; k++)
+ data[k] = surface->data[map[k]].z;
+ g_free(map);
- gwy_data_field_set_xoffset(dfield, xmin);
- gwy_data_field_set_yoffset(dfield, ymin);
- gwy_serializable_clone(G_OBJECT(gwy_surface_get_si_unit_xy(surface)),
- G_OBJECT(gwy_data_field_get_si_unit_xy(dfield)));
- gwy_serializable_clone(G_OBJECT(gwy_surface_get_si_unit_z(surface)),
- G_OBJECT(gwy_data_field_get_si_unit_z(dfield)));
+ gwy_data_field_set_xoffset(dfield, xymin.x);
+ gwy_data_field_set_yoffset(dfield, xymin.y);
+ gwy_surface_copy_units_to_data_field(surface, dfield);
return dfield;
}
diff --git a/perl/Makefile.in b/perl/Makefile.in
index 87a8c16..a1505a3 100644
--- a/perl/Makefile.in
+++ b/perl/Makefile.in
@@ -199,10 +199,7 @@ EPYDOC = @EPYDOC@
EXEEXT = @EXEEXT@
EXR_CFLAGS = @EXR_CFLAGS@
EXR_LIBS = @EXR_LIBS@
-FFTW3_1_CFLAGS = @FFTW3_1_CFLAGS@
-FFTW3_1_LIBS = @FFTW3_1_LIBS@
FFTW3_CFLAGS = @FFTW3_CFLAGS@
-FFTW3_DEPENDENCY = @FFTW3_DEPENDENCY@
FFTW3_LIBS = @FFTW3_LIBS@
FGREP = @FGREP@
GCONFTOOL = @GCONFTOOL@
@@ -212,6 +209,8 @@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
GLIBC21 = @GLIBC21@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GMODULE_CFLAGS = @GMODULE_CFLAGS@
GMODULE_LIBS = @GMODULE_LIBS@
GMSGFMT = @GMSGFMT@
@@ -236,7 +235,9 @@ GTK_MAC_LIBS = @GTK_MAC_LIBS@
GWY_VERSION_MAJOR = @GWY_VERSION_MAJOR@
GWY_VERSION_MINOR = @GWY_VERSION_MINOR@
GWY_VERSION_STRING = @GWY_VERSION_STRING@
+HDRIMAGE_EXTRA_CFLAGS = @HDRIMAGE_EXTRA_CFLAGS@
HTML_DIR = @HTML_DIR@
+INKSCAPE = @INKSCAPE@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -294,6 +295,7 @@ PASCAL = @PASCAL@
PATH_SEPARATOR = @PATH_SEPARATOR@
PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
+PNGCRUSH = @PNGCRUSH@
PNG_CFLAGS = @PNG_CFLAGS@
PNG_LIBS = @PNG_LIBS@
POD2MAN = @POD2MAN@
@@ -302,17 +304,13 @@ PYGTK_CFLAGS = @PYGTK_CFLAGS@
PYGTK_CODEGENDIR = @PYGTK_CODEGENDIR@
PYGTK_LIBS = @PYGTK_LIBS@
PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
PYTHON_EXTRA_CFLAGS = @PYTHON_EXTRA_CFLAGS@
PYTHON_INCLUDES = @PYTHON_INCLUDES@
-PYTHON_LIBS = @PYTHON_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
PYTHON_PLATFORM = @PYTHON_PLATFORM@
PYTHON_PREFIX = @PYTHON_PREFIX@
-PYTHON_SYSCFG_BASECFLAGS = @PYTHON_SYSCFG_BASECFLAGS@
-PYTHON_SYSCFG_CCSHARED = @PYTHON_SYSCFG_CCSHARED@
-PYTHON_SYSCFG_LDFLAGS = @PYTHON_SYSCFG_LDFLAGS@
-PYTHON_SYSCFG_LIBDIR = @PYTHON_SYSCFG_LIBDIR@
-PYTHON_SYSCFG_LINKFORSHARED = @PYTHON_SYSCFG_LINKFORSHARED@
PYTHON_VERSION = @PYTHON_VERSION@
RANLIB = @RANLIB@
RUBY = @RUBY@
diff --git a/pixmaps/Makefile.am b/pixmaps/Makefile.am
index f5ecc88..7aecfbd 100644
--- a/pixmaps/Makefile.am
+++ b/pixmaps/Makefile.am
@@ -1,32 +1,10 @@
-# @(#) $Id: Makefile.am 18961 2016-09-17 07:38:23Z yeti-dn $
+# @(#) $Id: Makefile.am 20261 2017-08-12 09:00:35Z yeti-dn $
+
+SUBDIRS = src
pixmapdatadir = $(pkgdatadir)/pixmaps
icondatadir = $(datadir)/icons/hicolor/48x48/apps
-# Present in svn but not included in the tarball now:
-# gwy_hough-24.png
-# gwy_local_slope-24.png
-# gwy_presentation_attach-24.png
-# gwy_presentation_edge_canny-24.png
-# gwy_presentation_edge_harris_corner-24.png
-# gwy_presentation_edge_hough-24.png
-# gwy_presentation_edge_inclination-24.png
-# gwy_presentation_edge_laplace_gauss-24.png
-# gwy_presentation_edge_local_non_linearity-24.png
-# gwy_presentation_edge_prewitt-24.png
-# gwy_presentation_edge_rms_edge-24.png
-# gwy_presentation_edge_rms-24.png
-# gwy_presentation_edge_sobel-24.png
-# gwy_presentation_edge_step-24.png
-# gwy_presentation_edge_zero_crossing-24.png
-# gwy_presentation_extract-24.png
-# gwy_presentation_local_contrast-24.png
-# gwy_presentation_log-24.png
-# gwy_presentation_rank-24.png
-# gwy_presentation_remove-24.png
-# gwy_presentation_sem-24.png
-# gwy_presentation_shading-24.png
-
# Since 2.3: arithmetic data_measure drift immerse merge
# Since 2.7: path_level spectrum iso_roughness grains_measure gl_material
# Since 2.7: color_range_auto color_range_full color_range_fixed
@@ -38,36 +16,59 @@ icondatadir = $(datadir)/icons/hicolor/48x48/apps
# Since 2.38: synthetic_diffusion
# Since 2.45: convolution distribution_angle distribution_slope entropy graph_fd fft_filter_2d fft_2d find_peaks grain_correlation grain_exscribed_circle grain_inscribed_circle grains_edge graph_align graph_cut graph_dos graph_export_ascii graph_export_png graph_export_vector graph_filter level_flatten_base level_median load_debug load_info load_warning mask_distribute mask_extract mask_morph mask_thin measure_lattice neural_apply neural_train psdf_log_phi psdf_section synthetic_ballisti [...]
# Since 2.46: distance_transform extract_path enforce_distribution grains_edge_remove mutual_crop poly_distort straighten_path tip_indent_analyze tip_lateral_force volume_fd volume_kmeans volume_kmedians volume_slice volumize
+# Since 2.48: correlation_mask disconnected fft_filter_1d fit_shape fractal_correction mark_outliers mark_scars null_offsets xy_denoise synthetic_phases
+# Since 2.49: next previous fractal_measure mask_set synthetic_fibres rotate_3d
#
-# If you add new stock icons here, add them to a `Since' line above and run
-# ./utils/stockgen.py from the top-level directory to update source code
-# declarations.
+# If you add new stock icons here
+# - Add them to a `Since' line above (one Gwyddion version = one line).
+# - If they have source files add them to src/ and if they can be generated
+# automatically (the usual case) add them to the built_pixmaps.
+# - Run ./utils/stockgen.py from the top-level directory to update the PNG
+# build rules and source code declarations.
+# - After that the icon should be probably set as the default for some module
+# or elswhere in the source code.
pixmapdata_DATA = \
+ $(built_pixmaps) \
cd_line.png \
cd_rline.png \
cd_rstep.png \
cd_step.png \
circle_down.png \
circle_up.png \
+ gwy_drift-24.png \
+ gwy_favourite-24.png \
+ gwy_gl_material-16.png \
+ gwy_gwyddion-32.png \
+ gwy_gwyddion-60.png \
+ gwy_psdf_log_phi-24.png \
+ gwy_psdf_section-24.png \
+ gwyddion.ico \
+ splash.png
+
+icondata_DATA = \
+ gwyddion.png
+
+built_pixmaps = \
gwy_3d_base-24.png \
gwy_arithmetic-24.png \
gwy_bold-20.png \
gwy_cantilever-24.png \
+ gwy_color_range-24.png \
gwy_color_range_adaptive-24.png \
gwy_color_range_auto-24.png \
gwy_color_range_fixed-24.png \
gwy_color_range_full-24.png \
- gwy_color_range-24.png \
gwy_convolution-24.png \
gwy_correct_affine-24.png \
+ gwy_correlation_mask-24.png \
gwy_crop-24.png \
gwy_cwt-24.png \
gwy_data_measure-24.png \
+ gwy_disconnected-24.png \
gwy_distance-24.png \
gwy_distance_transform-24.png \
gwy_distribution_angle-24.png \
gwy_distribution_slope-24.png \
- gwy_drift-24.png \
gwy_dwt-24.png \
gwy_edge-24.png \
gwy_enforce_distribution-24.png \
@@ -76,28 +77,33 @@ pixmapdata_DATA = \
gwy_extract_path-24.png \
gwy_facet_level-24.png \
gwy_favourite-24.png \
- gwy_fft_filter_2d-24.png \
gwy_fft-24.png \
gwy_fft_2d-24.png \
+ gwy_fft_filter_1d-24.png \
+ gwy_fft_filter_2d-24.png \
gwy_filter-24.png \
gwy_find_peaks-24.png \
+ gwy_fit_shape-24.png \
gwy_fix_zero-24.png \
gwy_flip_horizontally-24.png \
gwy_flip_vertically-24.png \
gwy_fractal-24.png \
+ gwy_fractal_measure-24.png \
+ gwy_fractal_correction-24.png \
gwy_gl_material-16.png \
gwy_gradient_horizontal-24.png \
gwy_gradient_vertical-24.png \
gwy_grain_correlation-24.png \
gwy_grain_exscribed_circle-24.png \
gwy_grain_inscribed_circle-24.png \
+ gwy_grains-24.png \
gwy_grains_edge-24.png \
gwy_grains_edge_remove-24.png \
gwy_grains_graph-24.png \
gwy_grains_measure-24.png \
gwy_grains_remove-24.png \
gwy_grains_water-24.png \
- gwy_grains-24.png \
+ gwy_graph-24.png \
gwy_graph_align-24.png \
gwy_graph_cut-24.png \
gwy_graph_dos-24.png \
@@ -117,18 +123,15 @@ pixmapdata_DATA = \
gwy_graph_zoom_fit-24.png \
gwy_graph_zoom_in-24.png \
gwy_graph_zoom_out-24.png \
- gwy_graph-24.png \
- gwy_gwyddion-32.png \
- gwy_gwyddion-60.png \
gwy_hough-24.png \
gwy_immerse-24.png \
gwy_iso_roughness-24.png \
gwy_italic-20.png \
gwy_less-24.png \
+ gwy_level-24.png \
gwy_level_flatten_base-24.png \
gwy_level_median-24.png \
gwy_level_triangle-24.png \
- gwy_level-24.png \
gwy_light_rotate-24.png \
gwy_line_level-24.png \
gwy_load_debug-20.png \
@@ -137,15 +140,19 @@ pixmapdata_DATA = \
gwy_local_slope-24.png \
gwy_logscale_horizontal-24.png \
gwy_logscale_vertical-24.png \
+ gwy_mark_outliers-24.png \
+ gwy_mark_scars-24.png \
gwy_mark_with-24.png \
+ gwy_mask-16.png \
+ gwy_mask-24.png \
gwy_mask_add-24.png \
+ gwy_mask_circle-24.png \
gwy_mask_circle_exclusive-24.png \
gwy_mask_circle_inclusive-24.png \
- gwy_mask_circle-24.png \
gwy_mask_distribute-24.png \
gwy_mask_editor-24.png \
- gwy_mask_exclude_circle-24.png \
gwy_mask_exclude-24.png \
+ gwy_mask_exclude_circle-24.png \
gwy_mask_extract-24.png \
gwy_mask_fill_draw-24.png \
gwy_mask_fill_erase-24.png \
@@ -159,36 +166,37 @@ pixmapdata_DATA = \
gwy_mask_rect_exclusive-24.png \
gwy_mask_rect_inclusive-24.png \
gwy_mask_remove-24.png \
+ gwy_mask_set-24.png \
gwy_mask_shrink-24.png \
gwy_mask_subtract-24.png \
gwy_mask_thin-24.png \
- gwy_mask-16.png \
- gwy_mask-24.png \
gwy_measure_lattice-24.png \
gwy_merge-24.png \
gwy_more-24.png \
gwy_mutual_crop-24.png \
gwy_neural_apply-24.png \
gwy_neural_train-24.png \
+ gwy_next-24.png \
+ gwy_null_offsets-24.png \
gwy_palettes-16.png \
gwy_palettes-24.png \
gwy_path_level-24.png \
gwy_pointer_measure-24.png \
gwy_poly_distort-24.png \
- gwy_polynom_level-24.png \
gwy_polynom-24.png \
+ gwy_polynom_level-24.png \
+ gwy_previous-24.png \
gwy_profile-24.png \
- gwy_psdf_log_phi-24.png \
- gwy_psdf_section-24.png \
gwy_pygwy-24.png \
gwy_remove_under_mask-24.png \
gwy_rotate_180-24.png \
+ gwy_rotate_3d-24.png \
+ gwy_rotate-24.png \
gwy_rotate_90_ccw-24.png \
gwy_rotate_90_cw-24.png \
- gwy_rotate-24.png \
+ gwy_scale-24.png \
gwy_scale_horizontally-24.png \
gwy_scale_vertically-24.png \
- gwy_scale-24.png \
gwy_scars-24.png \
gwy_selections-24.png \
gwy_shader-24.png \
@@ -203,12 +211,14 @@ pixmapdata_DATA = \
gwy_synthetic_columnar-24.png \
gwy_synthetic_diffusion-24.png \
gwy_synthetic_domains-24.png \
+ gwy_synthetic_fibres-24.png \
gwy_synthetic_lattice-24.png \
gwy_synthetic_line_noise-24.png \
gwy_synthetic_noise-24.png \
gwy_synthetic_objects-24.png \
gwy_synthetic_particles-24.png \
gwy_synthetic_pattern-24.png \
+ gwy_synthetic_phases-24.png \
gwy_synthetic_spectral-24.png \
gwy_synthetic_waves-24.png \
gwy_tilt-24.png \
@@ -232,89 +242,1044 @@ pixmapdata_DATA = \
gwy_volume_slice-24.png \
gwy_volumize-24.png \
gwy_volumize_layers-24.png \
+ gwy_xy_denoise-24.png \
gwy_zero_mean-24.png \
gwy_zoom_1_1-24.png \
gwy_zoom_fit-24.png \
gwy_zoom_in-24.png \
- gwy_zoom_out-24.png \
- gwyddion.ico \
- splash.png
+ gwy_zoom_out-24.png
-icondata_DATA = \
- gwyddion.png
+INKSCAPE_RENDER_PNG = $(INKSCAPE) --without-gui --export-area-page
+
+# Not built automatically:
+# gwy_drift-24.png - must render to 96x96 first, then downsize due to
+# Inkscape gradient mesh issues
+#
+# cd_line.png
+# cd_rline.png
+# cd_rstep.png
+# cd_step.png
+# circle_down.png
+# circle_up.png - no SVG
+#
+# gwy_psdf_log_phi-24.png
+# gwy_psdf_section-24.png
+#
+# gwy_gwyddion-32.png
+# gwy_gwyddion-60.png - no SVG
# Note: splash screen source is too big to distribute in every tarball,
# check it out from Subversion
-xcf_sources = \
- cd_line.xcf \
- cd_rline.xcf \
- cd_rstep.xcf \
- cd_step.xcf \
- gwy_3d_base-24.xcf \
- gwy_arithmetic-24.xcf \
- gwy_cantilever-24.xcf \
- gwy_color_range-24.xcf \
- gwy_crop-24.xcf \
- gwy_direction-24.xcf \
- gwy_edge-24.xcf \
- gwy_extract_path-24.xcf \
- gwy_favourite-24.xcf \
- gwy_fft-24.xcf \
- gwy_filter-24.xcf \
- gwy_flip_horizontally-24.xcf \
- gwy_flip_vertically-24.xcf \
- gwy_gl_material-16.xcf \
- gwy_gradient-24.xcf \
- gwy_grains-24.xcf \
- gwy_graph-24.xcf \
- gwy_graph_zoom-24.xcf \
- gwy_iso_roughness-24.xcf \
- gwy_less-24.xcf \
- gwy_level-24.xcf \
- gwy_light_rotate-24.xcf \
- gwy_load_message-20.xcf \
- gwy_markup-20.xcf \
- gwy_mask-16.xcf \
- gwy_mask-24.xcf \
- gwy_measure-24.xcf \
- gwy_more-24.xcf \
- gwy_palette-24.xcf \
- gwy_palettes-16.xcf \
- gwy_polynom-24.xcf \
- gwy_presentation-24.xcf \
- gwy_presentation_ops-24.xcf \
- gwy_profile-24.xcf \
- gwy_pygwy-24.xcf \
- gwy_remove_under_mask-24.xcf \
- gwy_rotate-24.xcf \
- gwy_rotate_180-24.xcf \
- gwy_rotate_90_ccw-24.xcf \
- gwy_rotate_90_cw-24.xcf \
- gwy_scale-24.xcf \
- gwy_scale_horizontally-24.xcf \
- gwy_scale_vertically-24.xcf \
- gwy_selection-24.xcf \
- gwy_shader-24.xcf \
- gwy_spectrum-24.xcf \
- gwy_spot_remove-24.xcf \
- gwy_stat_quantities-24.xcf \
- gwy_stats-24.xcf \
- gwy_synthetic-24.xcf \
- gwy_tip-24.xcf \
- gwy_transform-24.xcf \
- gwy_unrotate-24.xcf \
- gwy_value_invert-24.xcf \
- gwy_zoom-24.xcf
-
-svg_sources = \
- gwy_path.svg \
- gwy_neural.svg \
- gwy_poly_distort.svg \
- gwy_volume.svg
EXTRA_DIST = \
gwyddion.icns \
$(icondata_DATA) \
- $(pixmapdata_DATA) \
- $(xcf_sources) \
- $(svg_sources)
+ $(pixmapdata_DATA)
+
+MAINTAINERCLEANFILES = $(built_pixmaps)
+
+list-icons:
+ @echo ICONLIST $(pixmapdata_DATA)
+
+list-built-icons:
+ @echo ICONLIST $(built_pixmaps)
+
+if MAINTAINER_MODE
+# @@@ GENERATED STOCK LIST BEGIN @@@
+gwy_3d_base-24.png: $(srcdir)/src/gwy_3d_base-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_3d_base-24.png" --file="$(srcdir)/src/gwy_3d_base-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_3d_base-24.png" "gwy_3d_base-24.crush.png"
+ if test -s "gwy_3d_base-24.crush.png"; then mv -f "gwy_3d_base-24.crush.png" "gwy_3d_base-24.png"; fi
+
+gwy_arithmetic-24.png: $(srcdir)/src/gwy_arithmetic-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_arithmetic-24.png" --file="$(srcdir)/src/gwy_arithmetic-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_arithmetic-24.png" "gwy_arithmetic-24.crush.png"
+ if test -s "gwy_arithmetic-24.crush.png"; then mv -f "gwy_arithmetic-24.crush.png" "gwy_arithmetic-24.png"; fi
+
+gwy_bold-20.png: $(srcdir)/src/gwy_bold-20.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=20 --export-height=20 --export-png="gwy_bold-20.png" --file="$(srcdir)/src/gwy_bold-20.svg"
+ $(PNGCRUSH) -q -brute "gwy_bold-20.png" "gwy_bold-20.crush.png"
+ if test -s "gwy_bold-20.crush.png"; then mv -f "gwy_bold-20.crush.png" "gwy_bold-20.png"; fi
+
+gwy_cantilever-24.png: $(srcdir)/src/gwy_cantilever-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_cantilever-24.png" --file="$(srcdir)/src/gwy_cantilever-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_cantilever-24.png" "gwy_cantilever-24.crush.png"
+ if test -s "gwy_cantilever-24.crush.png"; then mv -f "gwy_cantilever-24.crush.png" "gwy_cantilever-24.png"; fi
+
+gwy_color_range-24.png: $(srcdir)/src/gwy_color_range-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_color_range-24.png" --file="$(srcdir)/src/gwy_color_range-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_color_range-24.png" "gwy_color_range-24.crush.png"
+ if test -s "gwy_color_range-24.crush.png"; then mv -f "gwy_color_range-24.crush.png" "gwy_color_range-24.png"; fi
+
+gwy_color_range_adaptive-24.png: $(srcdir)/src/gwy_color_range_adaptive-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_color_range_adaptive-24.png" --file="$(srcdir)/src/gwy_color_range_adaptive-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_color_range_adaptive-24.png" "gwy_color_range_adaptive-24.crush.png"
+ if test -s "gwy_color_range_adaptive-24.crush.png"; then mv -f "gwy_color_range_adaptive-24.crush.png" "gwy_color_range_adaptive-24.png"; fi
+
+gwy_color_range_auto-24.png: $(srcdir)/src/gwy_color_range_auto-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_color_range_auto-24.png" --file="$(srcdir)/src/gwy_color_range_auto-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_color_range_auto-24.png" "gwy_color_range_auto-24.crush.png"
+ if test -s "gwy_color_range_auto-24.crush.png"; then mv -f "gwy_color_range_auto-24.crush.png" "gwy_color_range_auto-24.png"; fi
+
+gwy_color_range_fixed-24.png: $(srcdir)/src/gwy_color_range_fixed-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_color_range_fixed-24.png" --file="$(srcdir)/src/gwy_color_range_fixed-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_color_range_fixed-24.png" "gwy_color_range_fixed-24.crush.png"
+ if test -s "gwy_color_range_fixed-24.crush.png"; then mv -f "gwy_color_range_fixed-24.crush.png" "gwy_color_range_fixed-24.png"; fi
+
+gwy_color_range_full-24.png: $(srcdir)/src/gwy_color_range_full-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_color_range_full-24.png" --file="$(srcdir)/src/gwy_color_range_full-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_color_range_full-24.png" "gwy_color_range_full-24.crush.png"
+ if test -s "gwy_color_range_full-24.crush.png"; then mv -f "gwy_color_range_full-24.crush.png" "gwy_color_range_full-24.png"; fi
+
+gwy_convolution-24.png: $(srcdir)/src/gwy_convolution-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_convolution-24.png" --file="$(srcdir)/src/gwy_convolution-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_convolution-24.png" "gwy_convolution-24.crush.png"
+ if test -s "gwy_convolution-24.crush.png"; then mv -f "gwy_convolution-24.crush.png" "gwy_convolution-24.png"; fi
+
+gwy_correct_affine-24.png: $(srcdir)/src/gwy_correct_affine-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_correct_affine-24.png" --file="$(srcdir)/src/gwy_correct_affine-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_correct_affine-24.png" "gwy_correct_affine-24.crush.png"
+ if test -s "gwy_correct_affine-24.crush.png"; then mv -f "gwy_correct_affine-24.crush.png" "gwy_correct_affine-24.png"; fi
+
+gwy_correlation_mask-24.png: $(srcdir)/src/gwy_correlation_mask-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_correlation_mask-24.png" --file="$(srcdir)/src/gwy_correlation_mask-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_correlation_mask-24.png" "gwy_correlation_mask-24.crush.png"
+ if test -s "gwy_correlation_mask-24.crush.png"; then mv -f "gwy_correlation_mask-24.crush.png" "gwy_correlation_mask-24.png"; fi
+
+gwy_crop-24.png: $(srcdir)/src/gwy_crop-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_crop-24.png" --file="$(srcdir)/src/gwy_crop-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_crop-24.png" "gwy_crop-24.crush.png"
+ if test -s "gwy_crop-24.crush.png"; then mv -f "gwy_crop-24.crush.png" "gwy_crop-24.png"; fi
+
+gwy_cwt-24.png: $(srcdir)/src/gwy_cwt-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_cwt-24.png" --file="$(srcdir)/src/gwy_cwt-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_cwt-24.png" "gwy_cwt-24.crush.png"
+ if test -s "gwy_cwt-24.crush.png"; then mv -f "gwy_cwt-24.crush.png" "gwy_cwt-24.png"; fi
+
+gwy_data_measure-24.png: $(srcdir)/src/gwy_data_measure-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_data_measure-24.png" --file="$(srcdir)/src/gwy_data_measure-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_data_measure-24.png" "gwy_data_measure-24.crush.png"
+ if test -s "gwy_data_measure-24.crush.png"; then mv -f "gwy_data_measure-24.crush.png" "gwy_data_measure-24.png"; fi
+
+gwy_disconnected-24.png: $(srcdir)/src/gwy_disconnected-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_disconnected-24.png" --file="$(srcdir)/src/gwy_disconnected-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_disconnected-24.png" "gwy_disconnected-24.crush.png"
+ if test -s "gwy_disconnected-24.crush.png"; then mv -f "gwy_disconnected-24.crush.png" "gwy_disconnected-24.png"; fi
+
+gwy_distance-24.png: $(srcdir)/src/gwy_distance-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_distance-24.png" --file="$(srcdir)/src/gwy_distance-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_distance-24.png" "gwy_distance-24.crush.png"
+ if test -s "gwy_distance-24.crush.png"; then mv -f "gwy_distance-24.crush.png" "gwy_distance-24.png"; fi
+
+gwy_distance_transform-24.png: $(srcdir)/src/gwy_distance_transform-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_distance_transform-24.png" --file="$(srcdir)/src/gwy_distance_transform-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_distance_transform-24.png" "gwy_distance_transform-24.crush.png"
+ if test -s "gwy_distance_transform-24.crush.png"; then mv -f "gwy_distance_transform-24.crush.png" "gwy_distance_transform-24.png"; fi
+
+gwy_distribution_angle-24.png: $(srcdir)/src/gwy_distribution_angle-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_distribution_angle-24.png" --file="$(srcdir)/src/gwy_distribution_angle-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_distribution_angle-24.png" "gwy_distribution_angle-24.crush.png"
+ if test -s "gwy_distribution_angle-24.crush.png"; then mv -f "gwy_distribution_angle-24.crush.png" "gwy_distribution_angle-24.png"; fi
+
+gwy_distribution_slope-24.png: $(srcdir)/src/gwy_distribution_slope-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_distribution_slope-24.png" --file="$(srcdir)/src/gwy_distribution_slope-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_distribution_slope-24.png" "gwy_distribution_slope-24.crush.png"
+ if test -s "gwy_distribution_slope-24.crush.png"; then mv -f "gwy_distribution_slope-24.crush.png" "gwy_distribution_slope-24.png"; fi
+
+gwy_dwt-24.png: $(srcdir)/src/gwy_dwt-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_dwt-24.png" --file="$(srcdir)/src/gwy_dwt-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_dwt-24.png" "gwy_dwt-24.crush.png"
+ if test -s "gwy_dwt-24.crush.png"; then mv -f "gwy_dwt-24.crush.png" "gwy_dwt-24.png"; fi
+
+gwy_edge-24.png: $(srcdir)/src/gwy_edge-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_edge-24.png" --file="$(srcdir)/src/gwy_edge-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_edge-24.png" "gwy_edge-24.crush.png"
+ if test -s "gwy_edge-24.crush.png"; then mv -f "gwy_edge-24.crush.png" "gwy_edge-24.png"; fi
+
+gwy_enforce_distribution-24.png: $(srcdir)/src/gwy_enforce_distribution-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_enforce_distribution-24.png" --file="$(srcdir)/src/gwy_enforce_distribution-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_enforce_distribution-24.png" "gwy_enforce_distribution-24.crush.png"
+ if test -s "gwy_enforce_distribution-24.crush.png"; then mv -f "gwy_enforce_distribution-24.crush.png" "gwy_enforce_distribution-24.png"; fi
+
+gwy_entropy-24.png: $(srcdir)/src/gwy_entropy-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_entropy-24.png" --file="$(srcdir)/src/gwy_entropy-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_entropy-24.png" "gwy_entropy-24.crush.png"
+ if test -s "gwy_entropy-24.crush.png"; then mv -f "gwy_entropy-24.crush.png" "gwy_entropy-24.png"; fi
+
+gwy_extend-24.png: $(srcdir)/src/gwy_extend-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_extend-24.png" --file="$(srcdir)/src/gwy_extend-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_extend-24.png" "gwy_extend-24.crush.png"
+ if test -s "gwy_extend-24.crush.png"; then mv -f "gwy_extend-24.crush.png" "gwy_extend-24.png"; fi
+
+gwy_extract_path-24.png: $(srcdir)/src/gwy_extract_path-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_extract_path-24.png" --file="$(srcdir)/src/gwy_extract_path-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_extract_path-24.png" "gwy_extract_path-24.crush.png"
+ if test -s "gwy_extract_path-24.crush.png"; then mv -f "gwy_extract_path-24.crush.png" "gwy_extract_path-24.png"; fi
+
+gwy_facet_level-24.png: $(srcdir)/src/gwy_facet_level-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_facet_level-24.png" --file="$(srcdir)/src/gwy_facet_level-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_facet_level-24.png" "gwy_facet_level-24.crush.png"
+ if test -s "gwy_facet_level-24.crush.png"; then mv -f "gwy_facet_level-24.crush.png" "gwy_facet_level-24.png"; fi
+
+gwy_favourite-24.png: $(srcdir)/src/gwy_favourite-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_favourite-24.png" --file="$(srcdir)/src/gwy_favourite-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_favourite-24.png" "gwy_favourite-24.crush.png"
+ if test -s "gwy_favourite-24.crush.png"; then mv -f "gwy_favourite-24.crush.png" "gwy_favourite-24.png"; fi
+
+gwy_fft-24.png: $(srcdir)/src/gwy_fft-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_fft-24.png" --file="$(srcdir)/src/gwy_fft-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_fft-24.png" "gwy_fft-24.crush.png"
+ if test -s "gwy_fft-24.crush.png"; then mv -f "gwy_fft-24.crush.png" "gwy_fft-24.png"; fi
+
+gwy_fft_2d-24.png: $(srcdir)/src/gwy_fft_2d-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_fft_2d-24.png" --file="$(srcdir)/src/gwy_fft_2d-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_fft_2d-24.png" "gwy_fft_2d-24.crush.png"
+ if test -s "gwy_fft_2d-24.crush.png"; then mv -f "gwy_fft_2d-24.crush.png" "gwy_fft_2d-24.png"; fi
+
+gwy_fft_filter_1d-24.png: $(srcdir)/src/gwy_fft_filter_1d-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_fft_filter_1d-24.png" --file="$(srcdir)/src/gwy_fft_filter_1d-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_fft_filter_1d-24.png" "gwy_fft_filter_1d-24.crush.png"
+ if test -s "gwy_fft_filter_1d-24.crush.png"; then mv -f "gwy_fft_filter_1d-24.crush.png" "gwy_fft_filter_1d-24.png"; fi
+
+gwy_fft_filter_2d-24.png: $(srcdir)/src/gwy_fft_filter_2d-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_fft_filter_2d-24.png" --file="$(srcdir)/src/gwy_fft_filter_2d-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_fft_filter_2d-24.png" "gwy_fft_filter_2d-24.crush.png"
+ if test -s "gwy_fft_filter_2d-24.crush.png"; then mv -f "gwy_fft_filter_2d-24.crush.png" "gwy_fft_filter_2d-24.png"; fi
+
+gwy_filter-24.png: $(srcdir)/src/gwy_filter-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_filter-24.png" --file="$(srcdir)/src/gwy_filter-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_filter-24.png" "gwy_filter-24.crush.png"
+ if test -s "gwy_filter-24.crush.png"; then mv -f "gwy_filter-24.crush.png" "gwy_filter-24.png"; fi
+
+gwy_find_peaks-24.png: $(srcdir)/src/gwy_find_peaks-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_find_peaks-24.png" --file="$(srcdir)/src/gwy_find_peaks-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_find_peaks-24.png" "gwy_find_peaks-24.crush.png"
+ if test -s "gwy_find_peaks-24.crush.png"; then mv -f "gwy_find_peaks-24.crush.png" "gwy_find_peaks-24.png"; fi
+
+gwy_fit_shape-24.png: $(srcdir)/src/gwy_fit_shape-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_fit_shape-24.png" --file="$(srcdir)/src/gwy_fit_shape-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_fit_shape-24.png" "gwy_fit_shape-24.crush.png"
+ if test -s "gwy_fit_shape-24.crush.png"; then mv -f "gwy_fit_shape-24.crush.png" "gwy_fit_shape-24.png"; fi
+
+gwy_fix_zero-24.png: $(srcdir)/src/gwy_fix_zero-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_fix_zero-24.png" --file="$(srcdir)/src/gwy_fix_zero-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_fix_zero-24.png" "gwy_fix_zero-24.crush.png"
+ if test -s "gwy_fix_zero-24.crush.png"; then mv -f "gwy_fix_zero-24.crush.png" "gwy_fix_zero-24.png"; fi
+
+gwy_flip_horizontally-24.png: $(srcdir)/src/gwy_flip_horizontally-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_flip_horizontally-24.png" --file="$(srcdir)/src/gwy_flip_horizontally-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_flip_horizontally-24.png" "gwy_flip_horizontally-24.crush.png"
+ if test -s "gwy_flip_horizontally-24.crush.png"; then mv -f "gwy_flip_horizontally-24.crush.png" "gwy_flip_horizontally-24.png"; fi
+
+gwy_flip_vertically-24.png: $(srcdir)/src/gwy_flip_vertically-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_flip_vertically-24.png" --file="$(srcdir)/src/gwy_flip_vertically-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_flip_vertically-24.png" "gwy_flip_vertically-24.crush.png"
+ if test -s "gwy_flip_vertically-24.crush.png"; then mv -f "gwy_flip_vertically-24.crush.png" "gwy_flip_vertically-24.png"; fi
+
+gwy_fractal-24.png: $(srcdir)/src/gwy_fractal-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_fractal-24.png" --file="$(srcdir)/src/gwy_fractal-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_fractal-24.png" "gwy_fractal-24.crush.png"
+ if test -s "gwy_fractal-24.crush.png"; then mv -f "gwy_fractal-24.crush.png" "gwy_fractal-24.png"; fi
+
+gwy_fractal_correction-24.png: $(srcdir)/src/gwy_fractal_correction-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_fractal_correction-24.png" --file="$(srcdir)/src/gwy_fractal_correction-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_fractal_correction-24.png" "gwy_fractal_correction-24.crush.png"
+ if test -s "gwy_fractal_correction-24.crush.png"; then mv -f "gwy_fractal_correction-24.crush.png" "gwy_fractal_correction-24.png"; fi
+
+gwy_fractal_measure-24.png: $(srcdir)/src/gwy_fractal_measure-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_fractal_measure-24.png" --file="$(srcdir)/src/gwy_fractal_measure-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_fractal_measure-24.png" "gwy_fractal_measure-24.crush.png"
+ if test -s "gwy_fractal_measure-24.crush.png"; then mv -f "gwy_fractal_measure-24.crush.png" "gwy_fractal_measure-24.png"; fi
+
+gwy_gl_material-16.png: $(srcdir)/src/gwy_gl_material-16.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=16 --export-height=16 --export-png="gwy_gl_material-16.png" --file="$(srcdir)/src/gwy_gl_material-16.svg"
+ $(PNGCRUSH) -q -brute "gwy_gl_material-16.png" "gwy_gl_material-16.crush.png"
+ if test -s "gwy_gl_material-16.crush.png"; then mv -f "gwy_gl_material-16.crush.png" "gwy_gl_material-16.png"; fi
+
+gwy_gradient_horizontal-24.png: $(srcdir)/src/gwy_gradient_horizontal-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_gradient_horizontal-24.png" --file="$(srcdir)/src/gwy_gradient_horizontal-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_gradient_horizontal-24.png" "gwy_gradient_horizontal-24.crush.png"
+ if test -s "gwy_gradient_horizontal-24.crush.png"; then mv -f "gwy_gradient_horizontal-24.crush.png" "gwy_gradient_horizontal-24.png"; fi
+
+gwy_gradient_vertical-24.png: $(srcdir)/src/gwy_gradient_vertical-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_gradient_vertical-24.png" --file="$(srcdir)/src/gwy_gradient_vertical-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_gradient_vertical-24.png" "gwy_gradient_vertical-24.crush.png"
+ if test -s "gwy_gradient_vertical-24.crush.png"; then mv -f "gwy_gradient_vertical-24.crush.png" "gwy_gradient_vertical-24.png"; fi
+
+gwy_grain_correlation-24.png: $(srcdir)/src/gwy_grain_correlation-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_grain_correlation-24.png" --file="$(srcdir)/src/gwy_grain_correlation-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_grain_correlation-24.png" "gwy_grain_correlation-24.crush.png"
+ if test -s "gwy_grain_correlation-24.crush.png"; then mv -f "gwy_grain_correlation-24.crush.png" "gwy_grain_correlation-24.png"; fi
+
+gwy_grain_exscribed_circle-24.png: $(srcdir)/src/gwy_grain_exscribed_circle-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_grain_exscribed_circle-24.png" --file="$(srcdir)/src/gwy_grain_exscribed_circle-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_grain_exscribed_circle-24.png" "gwy_grain_exscribed_circle-24.crush.png"
+ if test -s "gwy_grain_exscribed_circle-24.crush.png"; then mv -f "gwy_grain_exscribed_circle-24.crush.png" "gwy_grain_exscribed_circle-24.png"; fi
+
+gwy_grain_inscribed_circle-24.png: $(srcdir)/src/gwy_grain_inscribed_circle-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_grain_inscribed_circle-24.png" --file="$(srcdir)/src/gwy_grain_inscribed_circle-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_grain_inscribed_circle-24.png" "gwy_grain_inscribed_circle-24.crush.png"
+ if test -s "gwy_grain_inscribed_circle-24.crush.png"; then mv -f "gwy_grain_inscribed_circle-24.crush.png" "gwy_grain_inscribed_circle-24.png"; fi
+
+gwy_grains-24.png: $(srcdir)/src/gwy_grains-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_grains-24.png" --file="$(srcdir)/src/gwy_grains-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_grains-24.png" "gwy_grains-24.crush.png"
+ if test -s "gwy_grains-24.crush.png"; then mv -f "gwy_grains-24.crush.png" "gwy_grains-24.png"; fi
+
+gwy_grains_edge-24.png: $(srcdir)/src/gwy_grains_edge-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_grains_edge-24.png" --file="$(srcdir)/src/gwy_grains_edge-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_grains_edge-24.png" "gwy_grains_edge-24.crush.png"
+ if test -s "gwy_grains_edge-24.crush.png"; then mv -f "gwy_grains_edge-24.crush.png" "gwy_grains_edge-24.png"; fi
+
+gwy_grains_edge_remove-24.png: $(srcdir)/src/gwy_grains_edge_remove-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_grains_edge_remove-24.png" --file="$(srcdir)/src/gwy_grains_edge_remove-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_grains_edge_remove-24.png" "gwy_grains_edge_remove-24.crush.png"
+ if test -s "gwy_grains_edge_remove-24.crush.png"; then mv -f "gwy_grains_edge_remove-24.crush.png" "gwy_grains_edge_remove-24.png"; fi
+
+gwy_grains_graph-24.png: $(srcdir)/src/gwy_grains_graph-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_grains_graph-24.png" --file="$(srcdir)/src/gwy_grains_graph-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_grains_graph-24.png" "gwy_grains_graph-24.crush.png"
+ if test -s "gwy_grains_graph-24.crush.png"; then mv -f "gwy_grains_graph-24.crush.png" "gwy_grains_graph-24.png"; fi
+
+gwy_grains_measure-24.png: $(srcdir)/src/gwy_grains_measure-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_grains_measure-24.png" --file="$(srcdir)/src/gwy_grains_measure-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_grains_measure-24.png" "gwy_grains_measure-24.crush.png"
+ if test -s "gwy_grains_measure-24.crush.png"; then mv -f "gwy_grains_measure-24.crush.png" "gwy_grains_measure-24.png"; fi
+
+gwy_grains_remove-24.png: $(srcdir)/src/gwy_grains_remove-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_grains_remove-24.png" --file="$(srcdir)/src/gwy_grains_remove-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_grains_remove-24.png" "gwy_grains_remove-24.crush.png"
+ if test -s "gwy_grains_remove-24.crush.png"; then mv -f "gwy_grains_remove-24.crush.png" "gwy_grains_remove-24.png"; fi
+
+gwy_grains_water-24.png: $(srcdir)/src/gwy_grains_water-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_grains_water-24.png" --file="$(srcdir)/src/gwy_grains_water-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_grains_water-24.png" "gwy_grains_water-24.crush.png"
+ if test -s "gwy_grains_water-24.crush.png"; then mv -f "gwy_grains_water-24.crush.png" "gwy_grains_water-24.png"; fi
+
+gwy_graph-24.png: $(srcdir)/src/gwy_graph-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_graph-24.png" --file="$(srcdir)/src/gwy_graph-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_graph-24.png" "gwy_graph-24.crush.png"
+ if test -s "gwy_graph-24.crush.png"; then mv -f "gwy_graph-24.crush.png" "gwy_graph-24.png"; fi
+
+gwy_graph_align-24.png: $(srcdir)/src/gwy_graph_align-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_graph_align-24.png" --file="$(srcdir)/src/gwy_graph_align-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_graph_align-24.png" "gwy_graph_align-24.crush.png"
+ if test -s "gwy_graph_align-24.crush.png"; then mv -f "gwy_graph_align-24.crush.png" "gwy_graph_align-24.png"; fi
+
+gwy_graph_cut-24.png: $(srcdir)/src/gwy_graph_cut-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_graph_cut-24.png" --file="$(srcdir)/src/gwy_graph_cut-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_graph_cut-24.png" "gwy_graph_cut-24.crush.png"
+ if test -s "gwy_graph_cut-24.crush.png"; then mv -f "gwy_graph_cut-24.crush.png" "gwy_graph_cut-24.png"; fi
+
+gwy_graph_dos-24.png: $(srcdir)/src/gwy_graph_dos-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_graph_dos-24.png" --file="$(srcdir)/src/gwy_graph_dos-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_graph_dos-24.png" "gwy_graph_dos-24.crush.png"
+ if test -s "gwy_graph_dos-24.crush.png"; then mv -f "gwy_graph_dos-24.crush.png" "gwy_graph_dos-24.png"; fi
+
+gwy_graph_export_ascii-24.png: $(srcdir)/src/gwy_graph_export_ascii-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_graph_export_ascii-24.png" --file="$(srcdir)/src/gwy_graph_export_ascii-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_graph_export_ascii-24.png" "gwy_graph_export_ascii-24.crush.png"
+ if test -s "gwy_graph_export_ascii-24.crush.png"; then mv -f "gwy_graph_export_ascii-24.crush.png" "gwy_graph_export_ascii-24.png"; fi
+
+gwy_graph_export_png-24.png: $(srcdir)/src/gwy_graph_export_png-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_graph_export_png-24.png" --file="$(srcdir)/src/gwy_graph_export_png-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_graph_export_png-24.png" "gwy_graph_export_png-24.crush.png"
+ if test -s "gwy_graph_export_png-24.crush.png"; then mv -f "gwy_graph_export_png-24.crush.png" "gwy_graph_export_png-24.png"; fi
+
+gwy_graph_export_vector-24.png: $(srcdir)/src/gwy_graph_export_vector-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_graph_export_vector-24.png" --file="$(srcdir)/src/gwy_graph_export_vector-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_graph_export_vector-24.png" "gwy_graph_export_vector-24.crush.png"
+ if test -s "gwy_graph_export_vector-24.crush.png"; then mv -f "gwy_graph_export_vector-24.crush.png" "gwy_graph_export_vector-24.png"; fi
+
+gwy_graph_fd-24.png: $(srcdir)/src/gwy_graph_fd-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_graph_fd-24.png" --file="$(srcdir)/src/gwy_graph_fd-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_graph_fd-24.png" "gwy_graph_fd-24.crush.png"
+ if test -s "gwy_graph_fd-24.crush.png"; then mv -f "gwy_graph_fd-24.crush.png" "gwy_graph_fd-24.png"; fi
+
+gwy_graph_filter-24.png: $(srcdir)/src/gwy_graph_filter-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_graph_filter-24.png" --file="$(srcdir)/src/gwy_graph_filter-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_graph_filter-24.png" "gwy_graph_filter-24.crush.png"
+ if test -s "gwy_graph_filter-24.crush.png"; then mv -f "gwy_graph_filter-24.crush.png" "gwy_graph_filter-24.png"; fi
+
+gwy_graph_function-24.png: $(srcdir)/src/gwy_graph_function-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_graph_function-24.png" --file="$(srcdir)/src/gwy_graph_function-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_graph_function-24.png" "gwy_graph_function-24.crush.png"
+ if test -s "gwy_graph_function-24.crush.png"; then mv -f "gwy_graph_function-24.crush.png" "gwy_graph_function-24.png"; fi
+
+gwy_graph_halfgauss-24.png: $(srcdir)/src/gwy_graph_halfgauss-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_graph_halfgauss-24.png" --file="$(srcdir)/src/gwy_graph_halfgauss-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_graph_halfgauss-24.png" "gwy_graph_halfgauss-24.crush.png"
+ if test -s "gwy_graph_halfgauss-24.crush.png"; then mv -f "gwy_graph_halfgauss-24.crush.png" "gwy_graph_halfgauss-24.png"; fi
+
+gwy_graph_level-24.png: $(srcdir)/src/gwy_graph_level-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_graph_level-24.png" --file="$(srcdir)/src/gwy_graph_level-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_graph_level-24.png" "gwy_graph_level-24.crush.png"
+ if test -s "gwy_graph_level-24.crush.png"; then mv -f "gwy_graph_level-24.crush.png" "gwy_graph_level-24.png"; fi
+
+gwy_graph_measure-24.png: $(srcdir)/src/gwy_graph_measure-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_graph_measure-24.png" --file="$(srcdir)/src/gwy_graph_measure-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_graph_measure-24.png" "gwy_graph_measure-24.crush.png"
+ if test -s "gwy_graph_measure-24.crush.png"; then mv -f "gwy_graph_measure-24.crush.png" "gwy_graph_measure-24.png"; fi
+
+gwy_graph_palette-24.png: $(srcdir)/src/gwy_graph_palette-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_graph_palette-24.png" --file="$(srcdir)/src/gwy_graph_palette-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_graph_palette-24.png" "gwy_graph_palette-24.crush.png"
+ if test -s "gwy_graph_palette-24.crush.png"; then mv -f "gwy_graph_palette-24.crush.png" "gwy_graph_palette-24.png"; fi
+
+gwy_graph_pointer-24.png: $(srcdir)/src/gwy_graph_pointer-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_graph_pointer-24.png" --file="$(srcdir)/src/gwy_graph_pointer-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_graph_pointer-24.png" "gwy_graph_pointer-24.crush.png"
+ if test -s "gwy_graph_pointer-24.crush.png"; then mv -f "gwy_graph_pointer-24.crush.png" "gwy_graph_pointer-24.png"; fi
+
+gwy_graph_ruler-24.png: $(srcdir)/src/gwy_graph_ruler-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_graph_ruler-24.png" --file="$(srcdir)/src/gwy_graph_ruler-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_graph_ruler-24.png" "gwy_graph_ruler-24.crush.png"
+ if test -s "gwy_graph_ruler-24.crush.png"; then mv -f "gwy_graph_ruler-24.crush.png" "gwy_graph_ruler-24.png"; fi
+
+gwy_graph_vertical-24.png: $(srcdir)/src/gwy_graph_vertical-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_graph_vertical-24.png" --file="$(srcdir)/src/gwy_graph_vertical-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_graph_vertical-24.png" "gwy_graph_vertical-24.crush.png"
+ if test -s "gwy_graph_vertical-24.crush.png"; then mv -f "gwy_graph_vertical-24.crush.png" "gwy_graph_vertical-24.png"; fi
+
+gwy_graph_zoom_fit-24.png: $(srcdir)/src/gwy_graph_zoom_fit-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_graph_zoom_fit-24.png" --file="$(srcdir)/src/gwy_graph_zoom_fit-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_graph_zoom_fit-24.png" "gwy_graph_zoom_fit-24.crush.png"
+ if test -s "gwy_graph_zoom_fit-24.crush.png"; then mv -f "gwy_graph_zoom_fit-24.crush.png" "gwy_graph_zoom_fit-24.png"; fi
+
+gwy_graph_zoom_in-24.png: $(srcdir)/src/gwy_graph_zoom_in-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_graph_zoom_in-24.png" --file="$(srcdir)/src/gwy_graph_zoom_in-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_graph_zoom_in-24.png" "gwy_graph_zoom_in-24.crush.png"
+ if test -s "gwy_graph_zoom_in-24.crush.png"; then mv -f "gwy_graph_zoom_in-24.crush.png" "gwy_graph_zoom_in-24.png"; fi
+
+gwy_graph_zoom_out-24.png: $(srcdir)/src/gwy_graph_zoom_out-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_graph_zoom_out-24.png" --file="$(srcdir)/src/gwy_graph_zoom_out-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_graph_zoom_out-24.png" "gwy_graph_zoom_out-24.crush.png"
+ if test -s "gwy_graph_zoom_out-24.crush.png"; then mv -f "gwy_graph_zoom_out-24.crush.png" "gwy_graph_zoom_out-24.png"; fi
+
+gwy_hough-24.png: $(srcdir)/src/gwy_hough-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_hough-24.png" --file="$(srcdir)/src/gwy_hough-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_hough-24.png" "gwy_hough-24.crush.png"
+ if test -s "gwy_hough-24.crush.png"; then mv -f "gwy_hough-24.crush.png" "gwy_hough-24.png"; fi
+
+gwy_immerse-24.png: $(srcdir)/src/gwy_immerse-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_immerse-24.png" --file="$(srcdir)/src/gwy_immerse-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_immerse-24.png" "gwy_immerse-24.crush.png"
+ if test -s "gwy_immerse-24.crush.png"; then mv -f "gwy_immerse-24.crush.png" "gwy_immerse-24.png"; fi
+
+gwy_iso_roughness-24.png: $(srcdir)/src/gwy_iso_roughness-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_iso_roughness-24.png" --file="$(srcdir)/src/gwy_iso_roughness-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_iso_roughness-24.png" "gwy_iso_roughness-24.crush.png"
+ if test -s "gwy_iso_roughness-24.crush.png"; then mv -f "gwy_iso_roughness-24.crush.png" "gwy_iso_roughness-24.png"; fi
+
+gwy_italic-20.png: $(srcdir)/src/gwy_italic-20.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=20 --export-height=20 --export-png="gwy_italic-20.png" --file="$(srcdir)/src/gwy_italic-20.svg"
+ $(PNGCRUSH) -q -brute "gwy_italic-20.png" "gwy_italic-20.crush.png"
+ if test -s "gwy_italic-20.crush.png"; then mv -f "gwy_italic-20.crush.png" "gwy_italic-20.png"; fi
+
+gwy_less-24.png: $(srcdir)/src/gwy_less-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_less-24.png" --file="$(srcdir)/src/gwy_less-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_less-24.png" "gwy_less-24.crush.png"
+ if test -s "gwy_less-24.crush.png"; then mv -f "gwy_less-24.crush.png" "gwy_less-24.png"; fi
+
+gwy_level-24.png: $(srcdir)/src/gwy_level-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_level-24.png" --file="$(srcdir)/src/gwy_level-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_level-24.png" "gwy_level-24.crush.png"
+ if test -s "gwy_level-24.crush.png"; then mv -f "gwy_level-24.crush.png" "gwy_level-24.png"; fi
+
+gwy_level_flatten_base-24.png: $(srcdir)/src/gwy_level_flatten_base-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_level_flatten_base-24.png" --file="$(srcdir)/src/gwy_level_flatten_base-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_level_flatten_base-24.png" "gwy_level_flatten_base-24.crush.png"
+ if test -s "gwy_level_flatten_base-24.crush.png"; then mv -f "gwy_level_flatten_base-24.crush.png" "gwy_level_flatten_base-24.png"; fi
+
+gwy_level_median-24.png: $(srcdir)/src/gwy_level_median-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_level_median-24.png" --file="$(srcdir)/src/gwy_level_median-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_level_median-24.png" "gwy_level_median-24.crush.png"
+ if test -s "gwy_level_median-24.crush.png"; then mv -f "gwy_level_median-24.crush.png" "gwy_level_median-24.png"; fi
+
+gwy_level_triangle-24.png: $(srcdir)/src/gwy_level_triangle-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_level_triangle-24.png" --file="$(srcdir)/src/gwy_level_triangle-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_level_triangle-24.png" "gwy_level_triangle-24.crush.png"
+ if test -s "gwy_level_triangle-24.crush.png"; then mv -f "gwy_level_triangle-24.crush.png" "gwy_level_triangle-24.png"; fi
+
+gwy_light_rotate-24.png: $(srcdir)/src/gwy_light_rotate-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_light_rotate-24.png" --file="$(srcdir)/src/gwy_light_rotate-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_light_rotate-24.png" "gwy_light_rotate-24.crush.png"
+ if test -s "gwy_light_rotate-24.crush.png"; then mv -f "gwy_light_rotate-24.crush.png" "gwy_light_rotate-24.png"; fi
+
+gwy_line_level-24.png: $(srcdir)/src/gwy_line_level-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_line_level-24.png" --file="$(srcdir)/src/gwy_line_level-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_line_level-24.png" "gwy_line_level-24.crush.png"
+ if test -s "gwy_line_level-24.crush.png"; then mv -f "gwy_line_level-24.crush.png" "gwy_line_level-24.png"; fi
+
+gwy_load_debug-20.png: $(srcdir)/src/gwy_load_debug-20.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=20 --export-height=20 --export-png="gwy_load_debug-20.png" --file="$(srcdir)/src/gwy_load_debug-20.svg"
+ $(PNGCRUSH) -q -brute "gwy_load_debug-20.png" "gwy_load_debug-20.crush.png"
+ if test -s "gwy_load_debug-20.crush.png"; then mv -f "gwy_load_debug-20.crush.png" "gwy_load_debug-20.png"; fi
+
+gwy_load_info-20.png: $(srcdir)/src/gwy_load_info-20.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=20 --export-height=20 --export-png="gwy_load_info-20.png" --file="$(srcdir)/src/gwy_load_info-20.svg"
+ $(PNGCRUSH) -q -brute "gwy_load_info-20.png" "gwy_load_info-20.crush.png"
+ if test -s "gwy_load_info-20.crush.png"; then mv -f "gwy_load_info-20.crush.png" "gwy_load_info-20.png"; fi
+
+gwy_load_warning-20.png: $(srcdir)/src/gwy_load_warning-20.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=20 --export-height=20 --export-png="gwy_load_warning-20.png" --file="$(srcdir)/src/gwy_load_warning-20.svg"
+ $(PNGCRUSH) -q -brute "gwy_load_warning-20.png" "gwy_load_warning-20.crush.png"
+ if test -s "gwy_load_warning-20.crush.png"; then mv -f "gwy_load_warning-20.crush.png" "gwy_load_warning-20.png"; fi
+
+gwy_local_slope-24.png: $(srcdir)/src/gwy_local_slope-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_local_slope-24.png" --file="$(srcdir)/src/gwy_local_slope-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_local_slope-24.png" "gwy_local_slope-24.crush.png"
+ if test -s "gwy_local_slope-24.crush.png"; then mv -f "gwy_local_slope-24.crush.png" "gwy_local_slope-24.png"; fi
+
+gwy_logscale_horizontal-24.png: $(srcdir)/src/gwy_logscale_horizontal-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_logscale_horizontal-24.png" --file="$(srcdir)/src/gwy_logscale_horizontal-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_logscale_horizontal-24.png" "gwy_logscale_horizontal-24.crush.png"
+ if test -s "gwy_logscale_horizontal-24.crush.png"; then mv -f "gwy_logscale_horizontal-24.crush.png" "gwy_logscale_horizontal-24.png"; fi
+
+gwy_logscale_vertical-24.png: $(srcdir)/src/gwy_logscale_vertical-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_logscale_vertical-24.png" --file="$(srcdir)/src/gwy_logscale_vertical-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_logscale_vertical-24.png" "gwy_logscale_vertical-24.crush.png"
+ if test -s "gwy_logscale_vertical-24.crush.png"; then mv -f "gwy_logscale_vertical-24.crush.png" "gwy_logscale_vertical-24.png"; fi
+
+gwy_mark_outliers-24.png: $(srcdir)/src/gwy_mark_outliers-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_mark_outliers-24.png" --file="$(srcdir)/src/gwy_mark_outliers-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_mark_outliers-24.png" "gwy_mark_outliers-24.crush.png"
+ if test -s "gwy_mark_outliers-24.crush.png"; then mv -f "gwy_mark_outliers-24.crush.png" "gwy_mark_outliers-24.png"; fi
+
+gwy_mark_scars-24.png: $(srcdir)/src/gwy_mark_scars-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_mark_scars-24.png" --file="$(srcdir)/src/gwy_mark_scars-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_mark_scars-24.png" "gwy_mark_scars-24.crush.png"
+ if test -s "gwy_mark_scars-24.crush.png"; then mv -f "gwy_mark_scars-24.crush.png" "gwy_mark_scars-24.png"; fi
+
+gwy_mark_with-24.png: $(srcdir)/src/gwy_mark_with-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_mark_with-24.png" --file="$(srcdir)/src/gwy_mark_with-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_mark_with-24.png" "gwy_mark_with-24.crush.png"
+ if test -s "gwy_mark_with-24.crush.png"; then mv -f "gwy_mark_with-24.crush.png" "gwy_mark_with-24.png"; fi
+
+gwy_mask-16.png: $(srcdir)/src/gwy_mask-16.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=16 --export-height=16 --export-png="gwy_mask-16.png" --file="$(srcdir)/src/gwy_mask-16.svg"
+ $(PNGCRUSH) -q -brute "gwy_mask-16.png" "gwy_mask-16.crush.png"
+ if test -s "gwy_mask-16.crush.png"; then mv -f "gwy_mask-16.crush.png" "gwy_mask-16.png"; fi
+
+gwy_mask-24.png: $(srcdir)/src/gwy_mask-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_mask-24.png" --file="$(srcdir)/src/gwy_mask-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_mask-24.png" "gwy_mask-24.crush.png"
+ if test -s "gwy_mask-24.crush.png"; then mv -f "gwy_mask-24.crush.png" "gwy_mask-24.png"; fi
+
+gwy_mask_add-24.png: $(srcdir)/src/gwy_mask_add-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_mask_add-24.png" --file="$(srcdir)/src/gwy_mask_add-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_mask_add-24.png" "gwy_mask_add-24.crush.png"
+ if test -s "gwy_mask_add-24.crush.png"; then mv -f "gwy_mask_add-24.crush.png" "gwy_mask_add-24.png"; fi
+
+gwy_mask_circle-24.png: $(srcdir)/src/gwy_mask_circle-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_mask_circle-24.png" --file="$(srcdir)/src/gwy_mask_circle-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_mask_circle-24.png" "gwy_mask_circle-24.crush.png"
+ if test -s "gwy_mask_circle-24.crush.png"; then mv -f "gwy_mask_circle-24.crush.png" "gwy_mask_circle-24.png"; fi
+
+gwy_mask_circle_exclusive-24.png: $(srcdir)/src/gwy_mask_circle_exclusive-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_mask_circle_exclusive-24.png" --file="$(srcdir)/src/gwy_mask_circle_exclusive-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_mask_circle_exclusive-24.png" "gwy_mask_circle_exclusive-24.crush.png"
+ if test -s "gwy_mask_circle_exclusive-24.crush.png"; then mv -f "gwy_mask_circle_exclusive-24.crush.png" "gwy_mask_circle_exclusive-24.png"; fi
+
+gwy_mask_circle_inclusive-24.png: $(srcdir)/src/gwy_mask_circle_inclusive-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_mask_circle_inclusive-24.png" --file="$(srcdir)/src/gwy_mask_circle_inclusive-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_mask_circle_inclusive-24.png" "gwy_mask_circle_inclusive-24.crush.png"
+ if test -s "gwy_mask_circle_inclusive-24.crush.png"; then mv -f "gwy_mask_circle_inclusive-24.crush.png" "gwy_mask_circle_inclusive-24.png"; fi
+
+gwy_mask_distribute-24.png: $(srcdir)/src/gwy_mask_distribute-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_mask_distribute-24.png" --file="$(srcdir)/src/gwy_mask_distribute-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_mask_distribute-24.png" "gwy_mask_distribute-24.crush.png"
+ if test -s "gwy_mask_distribute-24.crush.png"; then mv -f "gwy_mask_distribute-24.crush.png" "gwy_mask_distribute-24.png"; fi
+
+gwy_mask_editor-24.png: $(srcdir)/src/gwy_mask_editor-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_mask_editor-24.png" --file="$(srcdir)/src/gwy_mask_editor-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_mask_editor-24.png" "gwy_mask_editor-24.crush.png"
+ if test -s "gwy_mask_editor-24.crush.png"; then mv -f "gwy_mask_editor-24.crush.png" "gwy_mask_editor-24.png"; fi
+
+gwy_mask_exclude-24.png: $(srcdir)/src/gwy_mask_exclude-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_mask_exclude-24.png" --file="$(srcdir)/src/gwy_mask_exclude-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_mask_exclude-24.png" "gwy_mask_exclude-24.crush.png"
+ if test -s "gwy_mask_exclude-24.crush.png"; then mv -f "gwy_mask_exclude-24.crush.png" "gwy_mask_exclude-24.png"; fi
+
+gwy_mask_exclude_circle-24.png: $(srcdir)/src/gwy_mask_exclude_circle-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_mask_exclude_circle-24.png" --file="$(srcdir)/src/gwy_mask_exclude_circle-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_mask_exclude_circle-24.png" "gwy_mask_exclude_circle-24.crush.png"
+ if test -s "gwy_mask_exclude_circle-24.crush.png"; then mv -f "gwy_mask_exclude_circle-24.crush.png" "gwy_mask_exclude_circle-24.png"; fi
+
+gwy_mask_extract-24.png: $(srcdir)/src/gwy_mask_extract-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_mask_extract-24.png" --file="$(srcdir)/src/gwy_mask_extract-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_mask_extract-24.png" "gwy_mask_extract-24.crush.png"
+ if test -s "gwy_mask_extract-24.crush.png"; then mv -f "gwy_mask_extract-24.crush.png" "gwy_mask_extract-24.png"; fi
+
+gwy_mask_fill_draw-24.png: $(srcdir)/src/gwy_mask_fill_draw-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_mask_fill_draw-24.png" --file="$(srcdir)/src/gwy_mask_fill_draw-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_mask_fill_draw-24.png" "gwy_mask_fill_draw-24.crush.png"
+ if test -s "gwy_mask_fill_draw-24.crush.png"; then mv -f "gwy_mask_fill_draw-24.crush.png" "gwy_mask_fill_draw-24.png"; fi
+
+gwy_mask_fill_erase-24.png: $(srcdir)/src/gwy_mask_fill_erase-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_mask_fill_erase-24.png" --file="$(srcdir)/src/gwy_mask_fill_erase-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_mask_fill_erase-24.png" "gwy_mask_fill_erase-24.crush.png"
+ if test -s "gwy_mask_fill_erase-24.crush.png"; then mv -f "gwy_mask_fill_erase-24.crush.png" "gwy_mask_fill_erase-24.png"; fi
+
+gwy_mask_grow-24.png: $(srcdir)/src/gwy_mask_grow-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_mask_grow-24.png" --file="$(srcdir)/src/gwy_mask_grow-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_mask_grow-24.png" "gwy_mask_grow-24.crush.png"
+ if test -s "gwy_mask_grow-24.crush.png"; then mv -f "gwy_mask_grow-24.crush.png" "gwy_mask_grow-24.png"; fi
+
+gwy_mask_intersect-24.png: $(srcdir)/src/gwy_mask_intersect-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_mask_intersect-24.png" --file="$(srcdir)/src/gwy_mask_intersect-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_mask_intersect-24.png" "gwy_mask_intersect-24.crush.png"
+ if test -s "gwy_mask_intersect-24.crush.png"; then mv -f "gwy_mask_intersect-24.crush.png" "gwy_mask_intersect-24.png"; fi
+
+gwy_mask_invert-24.png: $(srcdir)/src/gwy_mask_invert-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_mask_invert-24.png" --file="$(srcdir)/src/gwy_mask_invert-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_mask_invert-24.png" "gwy_mask_invert-24.crush.png"
+ if test -s "gwy_mask_invert-24.crush.png"; then mv -f "gwy_mask_invert-24.crush.png" "gwy_mask_invert-24.png"; fi
+
+gwy_mask_line-24.png: $(srcdir)/src/gwy_mask_line-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_mask_line-24.png" --file="$(srcdir)/src/gwy_mask_line-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_mask_line-24.png" "gwy_mask_line-24.crush.png"
+ if test -s "gwy_mask_line-24.crush.png"; then mv -f "gwy_mask_line-24.crush.png" "gwy_mask_line-24.png"; fi
+
+gwy_mask_morph-24.png: $(srcdir)/src/gwy_mask_morph-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_mask_morph-24.png" --file="$(srcdir)/src/gwy_mask_morph-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_mask_morph-24.png" "gwy_mask_morph-24.crush.png"
+ if test -s "gwy_mask_morph-24.crush.png"; then mv -f "gwy_mask_morph-24.crush.png" "gwy_mask_morph-24.png"; fi
+
+gwy_mask_paint_draw-24.png: $(srcdir)/src/gwy_mask_paint_draw-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_mask_paint_draw-24.png" --file="$(srcdir)/src/gwy_mask_paint_draw-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_mask_paint_draw-24.png" "gwy_mask_paint_draw-24.crush.png"
+ if test -s "gwy_mask_paint_draw-24.crush.png"; then mv -f "gwy_mask_paint_draw-24.crush.png" "gwy_mask_paint_draw-24.png"; fi
+
+gwy_mask_paint_erase-24.png: $(srcdir)/src/gwy_mask_paint_erase-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_mask_paint_erase-24.png" --file="$(srcdir)/src/gwy_mask_paint_erase-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_mask_paint_erase-24.png" "gwy_mask_paint_erase-24.crush.png"
+ if test -s "gwy_mask_paint_erase-24.crush.png"; then mv -f "gwy_mask_paint_erase-24.crush.png" "gwy_mask_paint_erase-24.png"; fi
+
+gwy_mask_rect_exclusive-24.png: $(srcdir)/src/gwy_mask_rect_exclusive-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_mask_rect_exclusive-24.png" --file="$(srcdir)/src/gwy_mask_rect_exclusive-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_mask_rect_exclusive-24.png" "gwy_mask_rect_exclusive-24.crush.png"
+ if test -s "gwy_mask_rect_exclusive-24.crush.png"; then mv -f "gwy_mask_rect_exclusive-24.crush.png" "gwy_mask_rect_exclusive-24.png"; fi
+
+gwy_mask_rect_inclusive-24.png: $(srcdir)/src/gwy_mask_rect_inclusive-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_mask_rect_inclusive-24.png" --file="$(srcdir)/src/gwy_mask_rect_inclusive-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_mask_rect_inclusive-24.png" "gwy_mask_rect_inclusive-24.crush.png"
+ if test -s "gwy_mask_rect_inclusive-24.crush.png"; then mv -f "gwy_mask_rect_inclusive-24.crush.png" "gwy_mask_rect_inclusive-24.png"; fi
+
+gwy_mask_remove-24.png: $(srcdir)/src/gwy_mask_remove-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_mask_remove-24.png" --file="$(srcdir)/src/gwy_mask_remove-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_mask_remove-24.png" "gwy_mask_remove-24.crush.png"
+ if test -s "gwy_mask_remove-24.crush.png"; then mv -f "gwy_mask_remove-24.crush.png" "gwy_mask_remove-24.png"; fi
+
+gwy_mask_set-24.png: $(srcdir)/src/gwy_mask_set-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_mask_set-24.png" --file="$(srcdir)/src/gwy_mask_set-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_mask_set-24.png" "gwy_mask_set-24.crush.png"
+ if test -s "gwy_mask_set-24.crush.png"; then mv -f "gwy_mask_set-24.crush.png" "gwy_mask_set-24.png"; fi
+
+gwy_mask_shrink-24.png: $(srcdir)/src/gwy_mask_shrink-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_mask_shrink-24.png" --file="$(srcdir)/src/gwy_mask_shrink-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_mask_shrink-24.png" "gwy_mask_shrink-24.crush.png"
+ if test -s "gwy_mask_shrink-24.crush.png"; then mv -f "gwy_mask_shrink-24.crush.png" "gwy_mask_shrink-24.png"; fi
+
+gwy_mask_subtract-24.png: $(srcdir)/src/gwy_mask_subtract-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_mask_subtract-24.png" --file="$(srcdir)/src/gwy_mask_subtract-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_mask_subtract-24.png" "gwy_mask_subtract-24.crush.png"
+ if test -s "gwy_mask_subtract-24.crush.png"; then mv -f "gwy_mask_subtract-24.crush.png" "gwy_mask_subtract-24.png"; fi
+
+gwy_mask_thin-24.png: $(srcdir)/src/gwy_mask_thin-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_mask_thin-24.png" --file="$(srcdir)/src/gwy_mask_thin-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_mask_thin-24.png" "gwy_mask_thin-24.crush.png"
+ if test -s "gwy_mask_thin-24.crush.png"; then mv -f "gwy_mask_thin-24.crush.png" "gwy_mask_thin-24.png"; fi
+
+gwy_measure_lattice-24.png: $(srcdir)/src/gwy_measure_lattice-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_measure_lattice-24.png" --file="$(srcdir)/src/gwy_measure_lattice-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_measure_lattice-24.png" "gwy_measure_lattice-24.crush.png"
+ if test -s "gwy_measure_lattice-24.crush.png"; then mv -f "gwy_measure_lattice-24.crush.png" "gwy_measure_lattice-24.png"; fi
+
+gwy_merge-24.png: $(srcdir)/src/gwy_merge-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_merge-24.png" --file="$(srcdir)/src/gwy_merge-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_merge-24.png" "gwy_merge-24.crush.png"
+ if test -s "gwy_merge-24.crush.png"; then mv -f "gwy_merge-24.crush.png" "gwy_merge-24.png"; fi
+
+gwy_more-24.png: $(srcdir)/src/gwy_more-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_more-24.png" --file="$(srcdir)/src/gwy_more-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_more-24.png" "gwy_more-24.crush.png"
+ if test -s "gwy_more-24.crush.png"; then mv -f "gwy_more-24.crush.png" "gwy_more-24.png"; fi
+
+gwy_mutual_crop-24.png: $(srcdir)/src/gwy_mutual_crop-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_mutual_crop-24.png" --file="$(srcdir)/src/gwy_mutual_crop-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_mutual_crop-24.png" "gwy_mutual_crop-24.crush.png"
+ if test -s "gwy_mutual_crop-24.crush.png"; then mv -f "gwy_mutual_crop-24.crush.png" "gwy_mutual_crop-24.png"; fi
+
+gwy_neural_apply-24.png: $(srcdir)/src/gwy_neural_apply-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_neural_apply-24.png" --file="$(srcdir)/src/gwy_neural_apply-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_neural_apply-24.png" "gwy_neural_apply-24.crush.png"
+ if test -s "gwy_neural_apply-24.crush.png"; then mv -f "gwy_neural_apply-24.crush.png" "gwy_neural_apply-24.png"; fi
+
+gwy_neural_train-24.png: $(srcdir)/src/gwy_neural_train-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_neural_train-24.png" --file="$(srcdir)/src/gwy_neural_train-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_neural_train-24.png" "gwy_neural_train-24.crush.png"
+ if test -s "gwy_neural_train-24.crush.png"; then mv -f "gwy_neural_train-24.crush.png" "gwy_neural_train-24.png"; fi
+
+gwy_next-24.png: $(srcdir)/src/gwy_next-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_next-24.png" --file="$(srcdir)/src/gwy_next-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_next-24.png" "gwy_next-24.crush.png"
+ if test -s "gwy_next-24.crush.png"; then mv -f "gwy_next-24.crush.png" "gwy_next-24.png"; fi
+
+gwy_null_offsets-24.png: $(srcdir)/src/gwy_null_offsets-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_null_offsets-24.png" --file="$(srcdir)/src/gwy_null_offsets-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_null_offsets-24.png" "gwy_null_offsets-24.crush.png"
+ if test -s "gwy_null_offsets-24.crush.png"; then mv -f "gwy_null_offsets-24.crush.png" "gwy_null_offsets-24.png"; fi
+
+gwy_palettes-16.png: $(srcdir)/src/gwy_palettes-16.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=16 --export-height=16 --export-png="gwy_palettes-16.png" --file="$(srcdir)/src/gwy_palettes-16.svg"
+ $(PNGCRUSH) -q -brute "gwy_palettes-16.png" "gwy_palettes-16.crush.png"
+ if test -s "gwy_palettes-16.crush.png"; then mv -f "gwy_palettes-16.crush.png" "gwy_palettes-16.png"; fi
+
+gwy_palettes-24.png: $(srcdir)/src/gwy_palettes-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_palettes-24.png" --file="$(srcdir)/src/gwy_palettes-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_palettes-24.png" "gwy_palettes-24.crush.png"
+ if test -s "gwy_palettes-24.crush.png"; then mv -f "gwy_palettes-24.crush.png" "gwy_palettes-24.png"; fi
+
+gwy_path_level-24.png: $(srcdir)/src/gwy_path_level-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_path_level-24.png" --file="$(srcdir)/src/gwy_path_level-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_path_level-24.png" "gwy_path_level-24.crush.png"
+ if test -s "gwy_path_level-24.crush.png"; then mv -f "gwy_path_level-24.crush.png" "gwy_path_level-24.png"; fi
+
+gwy_pointer_measure-24.png: $(srcdir)/src/gwy_pointer_measure-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_pointer_measure-24.png" --file="$(srcdir)/src/gwy_pointer_measure-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_pointer_measure-24.png" "gwy_pointer_measure-24.crush.png"
+ if test -s "gwy_pointer_measure-24.crush.png"; then mv -f "gwy_pointer_measure-24.crush.png" "gwy_pointer_measure-24.png"; fi
+
+gwy_poly_distort-24.png: $(srcdir)/src/gwy_poly_distort-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_poly_distort-24.png" --file="$(srcdir)/src/gwy_poly_distort-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_poly_distort-24.png" "gwy_poly_distort-24.crush.png"
+ if test -s "gwy_poly_distort-24.crush.png"; then mv -f "gwy_poly_distort-24.crush.png" "gwy_poly_distort-24.png"; fi
+
+gwy_polynom-24.png: $(srcdir)/src/gwy_polynom-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_polynom-24.png" --file="$(srcdir)/src/gwy_polynom-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_polynom-24.png" "gwy_polynom-24.crush.png"
+ if test -s "gwy_polynom-24.crush.png"; then mv -f "gwy_polynom-24.crush.png" "gwy_polynom-24.png"; fi
+
+gwy_polynom_level-24.png: $(srcdir)/src/gwy_polynom_level-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_polynom_level-24.png" --file="$(srcdir)/src/gwy_polynom_level-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_polynom_level-24.png" "gwy_polynom_level-24.crush.png"
+ if test -s "gwy_polynom_level-24.crush.png"; then mv -f "gwy_polynom_level-24.crush.png" "gwy_polynom_level-24.png"; fi
+
+gwy_previous-24.png: $(srcdir)/src/gwy_previous-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_previous-24.png" --file="$(srcdir)/src/gwy_previous-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_previous-24.png" "gwy_previous-24.crush.png"
+ if test -s "gwy_previous-24.crush.png"; then mv -f "gwy_previous-24.crush.png" "gwy_previous-24.png"; fi
+
+gwy_profile-24.png: $(srcdir)/src/gwy_profile-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_profile-24.png" --file="$(srcdir)/src/gwy_profile-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_profile-24.png" "gwy_profile-24.crush.png"
+ if test -s "gwy_profile-24.crush.png"; then mv -f "gwy_profile-24.crush.png" "gwy_profile-24.png"; fi
+
+gwy_pygwy-24.png: $(srcdir)/src/gwy_pygwy-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_pygwy-24.png" --file="$(srcdir)/src/gwy_pygwy-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_pygwy-24.png" "gwy_pygwy-24.crush.png"
+ if test -s "gwy_pygwy-24.crush.png"; then mv -f "gwy_pygwy-24.crush.png" "gwy_pygwy-24.png"; fi
+
+gwy_remove_under_mask-24.png: $(srcdir)/src/gwy_remove_under_mask-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_remove_under_mask-24.png" --file="$(srcdir)/src/gwy_remove_under_mask-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_remove_under_mask-24.png" "gwy_remove_under_mask-24.crush.png"
+ if test -s "gwy_remove_under_mask-24.crush.png"; then mv -f "gwy_remove_under_mask-24.crush.png" "gwy_remove_under_mask-24.png"; fi
+
+gwy_rotate-24.png: $(srcdir)/src/gwy_rotate-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_rotate-24.png" --file="$(srcdir)/src/gwy_rotate-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_rotate-24.png" "gwy_rotate-24.crush.png"
+ if test -s "gwy_rotate-24.crush.png"; then mv -f "gwy_rotate-24.crush.png" "gwy_rotate-24.png"; fi
+
+gwy_rotate_180-24.png: $(srcdir)/src/gwy_rotate_180-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_rotate_180-24.png" --file="$(srcdir)/src/gwy_rotate_180-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_rotate_180-24.png" "gwy_rotate_180-24.crush.png"
+ if test -s "gwy_rotate_180-24.crush.png"; then mv -f "gwy_rotate_180-24.crush.png" "gwy_rotate_180-24.png"; fi
+
+gwy_rotate_3d-24.png: $(srcdir)/src/gwy_rotate_3d-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_rotate_3d-24.png" --file="$(srcdir)/src/gwy_rotate_3d-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_rotate_3d-24.png" "gwy_rotate_3d-24.crush.png"
+ if test -s "gwy_rotate_3d-24.crush.png"; then mv -f "gwy_rotate_3d-24.crush.png" "gwy_rotate_3d-24.png"; fi
+
+gwy_rotate_90_ccw-24.png: $(srcdir)/src/gwy_rotate_90_ccw-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_rotate_90_ccw-24.png" --file="$(srcdir)/src/gwy_rotate_90_ccw-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_rotate_90_ccw-24.png" "gwy_rotate_90_ccw-24.crush.png"
+ if test -s "gwy_rotate_90_ccw-24.crush.png"; then mv -f "gwy_rotate_90_ccw-24.crush.png" "gwy_rotate_90_ccw-24.png"; fi
+
+gwy_rotate_90_cw-24.png: $(srcdir)/src/gwy_rotate_90_cw-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_rotate_90_cw-24.png" --file="$(srcdir)/src/gwy_rotate_90_cw-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_rotate_90_cw-24.png" "gwy_rotate_90_cw-24.crush.png"
+ if test -s "gwy_rotate_90_cw-24.crush.png"; then mv -f "gwy_rotate_90_cw-24.crush.png" "gwy_rotate_90_cw-24.png"; fi
+
+gwy_scale-24.png: $(srcdir)/src/gwy_scale-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_scale-24.png" --file="$(srcdir)/src/gwy_scale-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_scale-24.png" "gwy_scale-24.crush.png"
+ if test -s "gwy_scale-24.crush.png"; then mv -f "gwy_scale-24.crush.png" "gwy_scale-24.png"; fi
+
+gwy_scale_horizontally-24.png: $(srcdir)/src/gwy_scale_horizontally-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_scale_horizontally-24.png" --file="$(srcdir)/src/gwy_scale_horizontally-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_scale_horizontally-24.png" "gwy_scale_horizontally-24.crush.png"
+ if test -s "gwy_scale_horizontally-24.crush.png"; then mv -f "gwy_scale_horizontally-24.crush.png" "gwy_scale_horizontally-24.png"; fi
+
+gwy_scale_vertically-24.png: $(srcdir)/src/gwy_scale_vertically-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_scale_vertically-24.png" --file="$(srcdir)/src/gwy_scale_vertically-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_scale_vertically-24.png" "gwy_scale_vertically-24.crush.png"
+ if test -s "gwy_scale_vertically-24.crush.png"; then mv -f "gwy_scale_vertically-24.crush.png" "gwy_scale_vertically-24.png"; fi
+
+gwy_scars-24.png: $(srcdir)/src/gwy_scars-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_scars-24.png" --file="$(srcdir)/src/gwy_scars-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_scars-24.png" "gwy_scars-24.crush.png"
+ if test -s "gwy_scars-24.crush.png"; then mv -f "gwy_scars-24.crush.png" "gwy_scars-24.png"; fi
+
+gwy_selections-24.png: $(srcdir)/src/gwy_selections-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_selections-24.png" --file="$(srcdir)/src/gwy_selections-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_selections-24.png" "gwy_selections-24.crush.png"
+ if test -s "gwy_selections-24.crush.png"; then mv -f "gwy_selections-24.crush.png" "gwy_selections-24.png"; fi
+
+gwy_shader-24.png: $(srcdir)/src/gwy_shader-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_shader-24.png" --file="$(srcdir)/src/gwy_shader-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_shader-24.png" "gwy_shader-24.crush.png"
+ if test -s "gwy_shader-24.crush.png"; then mv -f "gwy_shader-24.crush.png" "gwy_shader-24.png"; fi
+
+gwy_spectrum-24.png: $(srcdir)/src/gwy_spectrum-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_spectrum-24.png" --file="$(srcdir)/src/gwy_spectrum-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_spectrum-24.png" "gwy_spectrum-24.crush.png"
+ if test -s "gwy_spectrum-24.crush.png"; then mv -f "gwy_spectrum-24.crush.png" "gwy_spectrum-24.png"; fi
+
+gwy_spot_remove-24.png: $(srcdir)/src/gwy_spot_remove-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_spot_remove-24.png" --file="$(srcdir)/src/gwy_spot_remove-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_spot_remove-24.png" "gwy_spot_remove-24.crush.png"
+ if test -s "gwy_spot_remove-24.crush.png"; then mv -f "gwy_spot_remove-24.crush.png" "gwy_spot_remove-24.png"; fi
+
+gwy_stat_quantities-24.png: $(srcdir)/src/gwy_stat_quantities-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_stat_quantities-24.png" --file="$(srcdir)/src/gwy_stat_quantities-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_stat_quantities-24.png" "gwy_stat_quantities-24.crush.png"
+ if test -s "gwy_stat_quantities-24.crush.png"; then mv -f "gwy_stat_quantities-24.crush.png" "gwy_stat_quantities-24.png"; fi
+
+gwy_straighten_path-24.png: $(srcdir)/src/gwy_straighten_path-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_straighten_path-24.png" --file="$(srcdir)/src/gwy_straighten_path-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_straighten_path-24.png" "gwy_straighten_path-24.crush.png"
+ if test -s "gwy_straighten_path-24.crush.png"; then mv -f "gwy_straighten_path-24.crush.png" "gwy_straighten_path-24.png"; fi
+
+gwy_subscript-20.png: $(srcdir)/src/gwy_subscript-20.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=20 --export-height=20 --export-png="gwy_subscript-20.png" --file="$(srcdir)/src/gwy_subscript-20.svg"
+ $(PNGCRUSH) -q -brute "gwy_subscript-20.png" "gwy_subscript-20.crush.png"
+ if test -s "gwy_subscript-20.crush.png"; then mv -f "gwy_subscript-20.crush.png" "gwy_subscript-20.png"; fi
+
+gwy_superscript-20.png: $(srcdir)/src/gwy_superscript-20.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=20 --export-height=20 --export-png="gwy_superscript-20.png" --file="$(srcdir)/src/gwy_superscript-20.svg"
+ $(PNGCRUSH) -q -brute "gwy_superscript-20.png" "gwy_superscript-20.crush.png"
+ if test -s "gwy_superscript-20.crush.png"; then mv -f "gwy_superscript-20.crush.png" "gwy_superscript-20.png"; fi
+
+gwy_synthetic_ballistic_deposition-24.png: $(srcdir)/src/gwy_synthetic_ballistic_deposition-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_synthetic_ballistic_deposition-24.png" --file="$(srcdir)/src/gwy_synthetic_ballistic_deposition-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_synthetic_ballistic_deposition-24.png" "gwy_synthetic_ballistic_deposition-24.crush.png"
+ if test -s "gwy_synthetic_ballistic_deposition-24.crush.png"; then mv -f "gwy_synthetic_ballistic_deposition-24.crush.png" "gwy_synthetic_ballistic_deposition-24.png"; fi
+
+gwy_synthetic_brownian_motion-24.png: $(srcdir)/src/gwy_synthetic_brownian_motion-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_synthetic_brownian_motion-24.png" --file="$(srcdir)/src/gwy_synthetic_brownian_motion-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_synthetic_brownian_motion-24.png" "gwy_synthetic_brownian_motion-24.crush.png"
+ if test -s "gwy_synthetic_brownian_motion-24.crush.png"; then mv -f "gwy_synthetic_brownian_motion-24.crush.png" "gwy_synthetic_brownian_motion-24.png"; fi
+
+gwy_synthetic_columnar-24.png: $(srcdir)/src/gwy_synthetic_columnar-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_synthetic_columnar-24.png" --file="$(srcdir)/src/gwy_synthetic_columnar-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_synthetic_columnar-24.png" "gwy_synthetic_columnar-24.crush.png"
+ if test -s "gwy_synthetic_columnar-24.crush.png"; then mv -f "gwy_synthetic_columnar-24.crush.png" "gwy_synthetic_columnar-24.png"; fi
+
+gwy_synthetic_diffusion-24.png: $(srcdir)/src/gwy_synthetic_diffusion-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_synthetic_diffusion-24.png" --file="$(srcdir)/src/gwy_synthetic_diffusion-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_synthetic_diffusion-24.png" "gwy_synthetic_diffusion-24.crush.png"
+ if test -s "gwy_synthetic_diffusion-24.crush.png"; then mv -f "gwy_synthetic_diffusion-24.crush.png" "gwy_synthetic_diffusion-24.png"; fi
+
+gwy_synthetic_domains-24.png: $(srcdir)/src/gwy_synthetic_domains-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_synthetic_domains-24.png" --file="$(srcdir)/src/gwy_synthetic_domains-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_synthetic_domains-24.png" "gwy_synthetic_domains-24.crush.png"
+ if test -s "gwy_synthetic_domains-24.crush.png"; then mv -f "gwy_synthetic_domains-24.crush.png" "gwy_synthetic_domains-24.png"; fi
+
+gwy_synthetic_fibres-24.png: $(srcdir)/src/gwy_synthetic_fibres-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_synthetic_fibres-24.png" --file="$(srcdir)/src/gwy_synthetic_fibres-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_synthetic_fibres-24.png" "gwy_synthetic_fibres-24.crush.png"
+ if test -s "gwy_synthetic_fibres-24.crush.png"; then mv -f "gwy_synthetic_fibres-24.crush.png" "gwy_synthetic_fibres-24.png"; fi
+
+gwy_synthetic_lattice-24.png: $(srcdir)/src/gwy_synthetic_lattice-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_synthetic_lattice-24.png" --file="$(srcdir)/src/gwy_synthetic_lattice-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_synthetic_lattice-24.png" "gwy_synthetic_lattice-24.crush.png"
+ if test -s "gwy_synthetic_lattice-24.crush.png"; then mv -f "gwy_synthetic_lattice-24.crush.png" "gwy_synthetic_lattice-24.png"; fi
+
+gwy_synthetic_line_noise-24.png: $(srcdir)/src/gwy_synthetic_line_noise-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_synthetic_line_noise-24.png" --file="$(srcdir)/src/gwy_synthetic_line_noise-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_synthetic_line_noise-24.png" "gwy_synthetic_line_noise-24.crush.png"
+ if test -s "gwy_synthetic_line_noise-24.crush.png"; then mv -f "gwy_synthetic_line_noise-24.crush.png" "gwy_synthetic_line_noise-24.png"; fi
+
+gwy_synthetic_noise-24.png: $(srcdir)/src/gwy_synthetic_noise-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_synthetic_noise-24.png" --file="$(srcdir)/src/gwy_synthetic_noise-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_synthetic_noise-24.png" "gwy_synthetic_noise-24.crush.png"
+ if test -s "gwy_synthetic_noise-24.crush.png"; then mv -f "gwy_synthetic_noise-24.crush.png" "gwy_synthetic_noise-24.png"; fi
+
+gwy_synthetic_objects-24.png: $(srcdir)/src/gwy_synthetic_objects-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_synthetic_objects-24.png" --file="$(srcdir)/src/gwy_synthetic_objects-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_synthetic_objects-24.png" "gwy_synthetic_objects-24.crush.png"
+ if test -s "gwy_synthetic_objects-24.crush.png"; then mv -f "gwy_synthetic_objects-24.crush.png" "gwy_synthetic_objects-24.png"; fi
+
+gwy_synthetic_particles-24.png: $(srcdir)/src/gwy_synthetic_particles-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_synthetic_particles-24.png" --file="$(srcdir)/src/gwy_synthetic_particles-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_synthetic_particles-24.png" "gwy_synthetic_particles-24.crush.png"
+ if test -s "gwy_synthetic_particles-24.crush.png"; then mv -f "gwy_synthetic_particles-24.crush.png" "gwy_synthetic_particles-24.png"; fi
+
+gwy_synthetic_pattern-24.png: $(srcdir)/src/gwy_synthetic_pattern-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_synthetic_pattern-24.png" --file="$(srcdir)/src/gwy_synthetic_pattern-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_synthetic_pattern-24.png" "gwy_synthetic_pattern-24.crush.png"
+ if test -s "gwy_synthetic_pattern-24.crush.png"; then mv -f "gwy_synthetic_pattern-24.crush.png" "gwy_synthetic_pattern-24.png"; fi
+
+gwy_synthetic_phases-24.png: $(srcdir)/src/gwy_synthetic_phases-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_synthetic_phases-24.png" --file="$(srcdir)/src/gwy_synthetic_phases-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_synthetic_phases-24.png" "gwy_synthetic_phases-24.crush.png"
+ if test -s "gwy_synthetic_phases-24.crush.png"; then mv -f "gwy_synthetic_phases-24.crush.png" "gwy_synthetic_phases-24.png"; fi
+
+gwy_synthetic_spectral-24.png: $(srcdir)/src/gwy_synthetic_spectral-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_synthetic_spectral-24.png" --file="$(srcdir)/src/gwy_synthetic_spectral-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_synthetic_spectral-24.png" "gwy_synthetic_spectral-24.crush.png"
+ if test -s "gwy_synthetic_spectral-24.crush.png"; then mv -f "gwy_synthetic_spectral-24.crush.png" "gwy_synthetic_spectral-24.png"; fi
+
+gwy_synthetic_waves-24.png: $(srcdir)/src/gwy_synthetic_waves-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_synthetic_waves-24.png" --file="$(srcdir)/src/gwy_synthetic_waves-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_synthetic_waves-24.png" "gwy_synthetic_waves-24.crush.png"
+ if test -s "gwy_synthetic_waves-24.crush.png"; then mv -f "gwy_synthetic_waves-24.crush.png" "gwy_synthetic_waves-24.png"; fi
+
+gwy_tilt-24.png: $(srcdir)/src/gwy_tilt-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_tilt-24.png" --file="$(srcdir)/src/gwy_tilt-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_tilt-24.png" "gwy_tilt-24.crush.png"
+ if test -s "gwy_tilt-24.crush.png"; then mv -f "gwy_tilt-24.crush.png" "gwy_tilt-24.png"; fi
+
+gwy_tip_dilation-24.png: $(srcdir)/src/gwy_tip_dilation-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_tip_dilation-24.png" --file="$(srcdir)/src/gwy_tip_dilation-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_tip_dilation-24.png" "gwy_tip_dilation-24.crush.png"
+ if test -s "gwy_tip_dilation-24.crush.png"; then mv -f "gwy_tip_dilation-24.crush.png" "gwy_tip_dilation-24.png"; fi
+
+gwy_tip_erosion-24.png: $(srcdir)/src/gwy_tip_erosion-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_tip_erosion-24.png" --file="$(srcdir)/src/gwy_tip_erosion-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_tip_erosion-24.png" "gwy_tip_erosion-24.crush.png"
+ if test -s "gwy_tip_erosion-24.crush.png"; then mv -f "gwy_tip_erosion-24.crush.png" "gwy_tip_erosion-24.png"; fi
+
+gwy_tip_estimation-24.png: $(srcdir)/src/gwy_tip_estimation-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_tip_estimation-24.png" --file="$(srcdir)/src/gwy_tip_estimation-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_tip_estimation-24.png" "gwy_tip_estimation-24.crush.png"
+ if test -s "gwy_tip_estimation-24.crush.png"; then mv -f "gwy_tip_estimation-24.crush.png" "gwy_tip_estimation-24.png"; fi
+
+gwy_tip_indent_analyze-24.png: $(srcdir)/src/gwy_tip_indent_analyze-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_tip_indent_analyze-24.png" --file="$(srcdir)/src/gwy_tip_indent_analyze-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_tip_indent_analyze-24.png" "gwy_tip_indent_analyze-24.crush.png"
+ if test -s "gwy_tip_indent_analyze-24.crush.png"; then mv -f "gwy_tip_indent_analyze-24.crush.png" "gwy_tip_indent_analyze-24.png"; fi
+
+gwy_tip_lateral_force-24.png: $(srcdir)/src/gwy_tip_lateral_force-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_tip_lateral_force-24.png" --file="$(srcdir)/src/gwy_tip_lateral_force-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_tip_lateral_force-24.png" "gwy_tip_lateral_force-24.crush.png"
+ if test -s "gwy_tip_lateral_force-24.crush.png"; then mv -f "gwy_tip_lateral_force-24.crush.png" "gwy_tip_lateral_force-24.png"; fi
+
+gwy_tip_map-24.png: $(srcdir)/src/gwy_tip_map-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_tip_map-24.png" --file="$(srcdir)/src/gwy_tip_map-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_tip_map-24.png" "gwy_tip_map-24.crush.png"
+ if test -s "gwy_tip_map-24.crush.png"; then mv -f "gwy_tip_map-24.crush.png" "gwy_tip_map-24.png"; fi
+
+gwy_tip_model-24.png: $(srcdir)/src/gwy_tip_model-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_tip_model-24.png" --file="$(srcdir)/src/gwy_tip_model-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_tip_model-24.png" "gwy_tip_model-24.crush.png"
+ if test -s "gwy_tip_model-24.crush.png"; then mv -f "gwy_tip_model-24.crush.png" "gwy_tip_model-24.png"; fi
+
+gwy_tip_pid-24.png: $(srcdir)/src/gwy_tip_pid-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_tip_pid-24.png" --file="$(srcdir)/src/gwy_tip_pid-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_tip_pid-24.png" "gwy_tip_pid-24.crush.png"
+ if test -s "gwy_tip_pid-24.crush.png"; then mv -f "gwy_tip_pid-24.crush.png" "gwy_tip_pid-24.png"; fi
+
+gwy_unrotate-24.png: $(srcdir)/src/gwy_unrotate-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_unrotate-24.png" --file="$(srcdir)/src/gwy_unrotate-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_unrotate-24.png" "gwy_unrotate-24.crush.png"
+ if test -s "gwy_unrotate-24.crush.png"; then mv -f "gwy_unrotate-24.crush.png" "gwy_unrotate-24.png"; fi
+
+gwy_value_invert-24.png: $(srcdir)/src/gwy_value_invert-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_value_invert-24.png" --file="$(srcdir)/src/gwy_value_invert-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_value_invert-24.png" "gwy_value_invert-24.crush.png"
+ if test -s "gwy_value_invert-24.crush.png"; then mv -f "gwy_value_invert-24.crush.png" "gwy_value_invert-24.png"; fi
+
+gwy_volume-24.png: $(srcdir)/src/gwy_volume-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_volume-24.png" --file="$(srcdir)/src/gwy_volume-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_volume-24.png" "gwy_volume-24.crush.png"
+ if test -s "gwy_volume-24.crush.png"; then mv -f "gwy_volume-24.crush.png" "gwy_volume-24.png"; fi
+
+gwy_volume_calibrate-24.png: $(srcdir)/src/gwy_volume_calibrate-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_volume_calibrate-24.png" --file="$(srcdir)/src/gwy_volume_calibrate-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_volume_calibrate-24.png" "gwy_volume_calibrate-24.crush.png"
+ if test -s "gwy_volume_calibrate-24.crush.png"; then mv -f "gwy_volume_calibrate-24.crush.png" "gwy_volume_calibrate-24.png"; fi
+
+gwy_volume_dimensions-24.png: $(srcdir)/src/gwy_volume_dimensions-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_volume_dimensions-24.png" --file="$(srcdir)/src/gwy_volume_dimensions-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_volume_dimensions-24.png" "gwy_volume_dimensions-24.crush.png"
+ if test -s "gwy_volume_dimensions-24.crush.png"; then mv -f "gwy_volume_dimensions-24.crush.png" "gwy_volume_dimensions-24.png"; fi
+
+gwy_volume_fd-24.png: $(srcdir)/src/gwy_volume_fd-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_volume_fd-24.png" --file="$(srcdir)/src/gwy_volume_fd-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_volume_fd-24.png" "gwy_volume_fd-24.crush.png"
+ if test -s "gwy_volume_fd-24.crush.png"; then mv -f "gwy_volume_fd-24.crush.png" "gwy_volume_fd-24.png"; fi
+
+gwy_volume_invert-24.png: $(srcdir)/src/gwy_volume_invert-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_volume_invert-24.png" --file="$(srcdir)/src/gwy_volume_invert-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_volume_invert-24.png" "gwy_volume_invert-24.crush.png"
+ if test -s "gwy_volume_invert-24.crush.png"; then mv -f "gwy_volume_invert-24.crush.png" "gwy_volume_invert-24.png"; fi
+
+gwy_volume_kmeans-24.png: $(srcdir)/src/gwy_volume_kmeans-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_volume_kmeans-24.png" --file="$(srcdir)/src/gwy_volume_kmeans-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_volume_kmeans-24.png" "gwy_volume_kmeans-24.crush.png"
+ if test -s "gwy_volume_kmeans-24.crush.png"; then mv -f "gwy_volume_kmeans-24.crush.png" "gwy_volume_kmeans-24.png"; fi
+
+gwy_volume_kmedians-24.png: $(srcdir)/src/gwy_volume_kmedians-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_volume_kmedians-24.png" --file="$(srcdir)/src/gwy_volume_kmedians-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_volume_kmedians-24.png" "gwy_volume_kmedians-24.crush.png"
+ if test -s "gwy_volume_kmedians-24.crush.png"; then mv -f "gwy_volume_kmedians-24.crush.png" "gwy_volume_kmedians-24.png"; fi
+
+gwy_volume_slice-24.png: $(srcdir)/src/gwy_volume_slice-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_volume_slice-24.png" --file="$(srcdir)/src/gwy_volume_slice-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_volume_slice-24.png" "gwy_volume_slice-24.crush.png"
+ if test -s "gwy_volume_slice-24.crush.png"; then mv -f "gwy_volume_slice-24.crush.png" "gwy_volume_slice-24.png"; fi
+
+gwy_volumize-24.png: $(srcdir)/src/gwy_volumize-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_volumize-24.png" --file="$(srcdir)/src/gwy_volumize-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_volumize-24.png" "gwy_volumize-24.crush.png"
+ if test -s "gwy_volumize-24.crush.png"; then mv -f "gwy_volumize-24.crush.png" "gwy_volumize-24.png"; fi
+
+gwy_volumize_layers-24.png: $(srcdir)/src/gwy_volumize_layers-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_volumize_layers-24.png" --file="$(srcdir)/src/gwy_volumize_layers-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_volumize_layers-24.png" "gwy_volumize_layers-24.crush.png"
+ if test -s "gwy_volumize_layers-24.crush.png"; then mv -f "gwy_volumize_layers-24.crush.png" "gwy_volumize_layers-24.png"; fi
+
+gwy_xy_denoise-24.png: $(srcdir)/src/gwy_xy_denoise-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_xy_denoise-24.png" --file="$(srcdir)/src/gwy_xy_denoise-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_xy_denoise-24.png" "gwy_xy_denoise-24.crush.png"
+ if test -s "gwy_xy_denoise-24.crush.png"; then mv -f "gwy_xy_denoise-24.crush.png" "gwy_xy_denoise-24.png"; fi
+
+gwy_zero_mean-24.png: $(srcdir)/src/gwy_zero_mean-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_zero_mean-24.png" --file="$(srcdir)/src/gwy_zero_mean-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_zero_mean-24.png" "gwy_zero_mean-24.crush.png"
+ if test -s "gwy_zero_mean-24.crush.png"; then mv -f "gwy_zero_mean-24.crush.png" "gwy_zero_mean-24.png"; fi
+
+gwy_zoom_1_1-24.png: $(srcdir)/src/gwy_zoom_1_1-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_zoom_1_1-24.png" --file="$(srcdir)/src/gwy_zoom_1_1-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_zoom_1_1-24.png" "gwy_zoom_1_1-24.crush.png"
+ if test -s "gwy_zoom_1_1-24.crush.png"; then mv -f "gwy_zoom_1_1-24.crush.png" "gwy_zoom_1_1-24.png"; fi
+
+gwy_zoom_fit-24.png: $(srcdir)/src/gwy_zoom_fit-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_zoom_fit-24.png" --file="$(srcdir)/src/gwy_zoom_fit-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_zoom_fit-24.png" "gwy_zoom_fit-24.crush.png"
+ if test -s "gwy_zoom_fit-24.crush.png"; then mv -f "gwy_zoom_fit-24.crush.png" "gwy_zoom_fit-24.png"; fi
+
+gwy_zoom_in-24.png: $(srcdir)/src/gwy_zoom_in-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_zoom_in-24.png" --file="$(srcdir)/src/gwy_zoom_in-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_zoom_in-24.png" "gwy_zoom_in-24.crush.png"
+ if test -s "gwy_zoom_in-24.crush.png"; then mv -f "gwy_zoom_in-24.crush.png" "gwy_zoom_in-24.png"; fi
+
+gwy_zoom_out-24.png: $(srcdir)/src/gwy_zoom_out-24.svg
+ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_zoom_out-24.png" --file="$(srcdir)/src/gwy_zoom_out-24.svg"
+ $(PNGCRUSH) -q -brute "gwy_zoom_out-24.png" "gwy_zoom_out-24.crush.png"
+ if test -s "gwy_zoom_out-24.crush.png"; then mv -f "gwy_zoom_out-24.crush.png" "gwy_zoom_out-24.png"; fi
+# @@@ GENERATED STOCK LIST END @@@
+endif
+
diff --git a/pixmaps/Makefile.in b/pixmaps/Makefile.in
index efa57c7..3a7b18d 100644
--- a/pixmaps/Makefile.in
+++ b/pixmaps/Makefile.in
@@ -14,7 +14,7 @@
@SET_MAKE@
-# @(#) $Id: Makefile.am 18961 2016-09-17 07:38:23Z yeti-dn $
+# @(#) $Id: Makefile.am 20261 2017-08-12 09:00:35Z yeti-dn $
VPATH = @srcdir@
am__is_gnu_make = { \
@@ -123,6 +123,14 @@ am__v_at_0 = @
am__v_at_1 =
SOURCES =
DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+ ctags-recursive dvi-recursive html-recursive info-recursive \
+ install-data-recursive install-dvi-recursive \
+ install-exec-recursive install-html-recursive \
+ install-info-recursive install-pdf-recursive \
+ install-ps-recursive install-recursive installcheck-recursive \
+ installdirs-recursive pdf-recursive ps-recursive \
+ tags-recursive uninstall-recursive
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
@@ -158,9 +166,61 @@ am__uninstall_files_from_dir = { \
am__installdirs = "$(DESTDIR)$(icondatadir)" \
"$(DESTDIR)$(pixmapdatadir)"
DATA = $(icondata_DATA) $(pixmapdata_DATA)
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+ $(RECURSIVE_TARGETS) \
+ $(RECURSIVE_CLEAN_TARGETS) \
+ $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+ distdir
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
am__DIST_COMMON = $(srcdir)/Makefile.in
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
@@ -200,10 +260,7 @@ EPYDOC = @EPYDOC@
EXEEXT = @EXEEXT@
EXR_CFLAGS = @EXR_CFLAGS@
EXR_LIBS = @EXR_LIBS@
-FFTW3_1_CFLAGS = @FFTW3_1_CFLAGS@
-FFTW3_1_LIBS = @FFTW3_1_LIBS@
FFTW3_CFLAGS = @FFTW3_CFLAGS@
-FFTW3_DEPENDENCY = @FFTW3_DEPENDENCY@
FFTW3_LIBS = @FFTW3_LIBS@
FGREP = @FGREP@
GCONFTOOL = @GCONFTOOL@
@@ -213,6 +270,8 @@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
GLIBC21 = @GLIBC21@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GMODULE_CFLAGS = @GMODULE_CFLAGS@
GMODULE_LIBS = @GMODULE_LIBS@
GMSGFMT = @GMSGFMT@
@@ -237,7 +296,9 @@ GTK_MAC_LIBS = @GTK_MAC_LIBS@
GWY_VERSION_MAJOR = @GWY_VERSION_MAJOR@
GWY_VERSION_MINOR = @GWY_VERSION_MINOR@
GWY_VERSION_STRING = @GWY_VERSION_STRING@
+HDRIMAGE_EXTRA_CFLAGS = @HDRIMAGE_EXTRA_CFLAGS@
HTML_DIR = @HTML_DIR@
+INKSCAPE = @INKSCAPE@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -295,6 +356,7 @@ PASCAL = @PASCAL@
PATH_SEPARATOR = @PATH_SEPARATOR@
PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
+PNGCRUSH = @PNGCRUSH@
PNG_CFLAGS = @PNG_CFLAGS@
PNG_LIBS = @PNG_LIBS@
POD2MAN = @POD2MAN@
@@ -303,17 +365,13 @@ PYGTK_CFLAGS = @PYGTK_CFLAGS@
PYGTK_CODEGENDIR = @PYGTK_CODEGENDIR@
PYGTK_LIBS = @PYGTK_LIBS@
PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
PYTHON_EXTRA_CFLAGS = @PYTHON_EXTRA_CFLAGS@
PYTHON_INCLUDES = @PYTHON_INCLUDES@
-PYTHON_LIBS = @PYTHON_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
PYTHON_PLATFORM = @PYTHON_PLATFORM@
PYTHON_PREFIX = @PYTHON_PREFIX@
-PYTHON_SYSCFG_BASECFLAGS = @PYTHON_SYSCFG_BASECFLAGS@
-PYTHON_SYSCFG_CCSHARED = @PYTHON_SYSCFG_CCSHARED@
-PYTHON_SYSCFG_LDFLAGS = @PYTHON_SYSCFG_LDFLAGS@
-PYTHON_SYSCFG_LIBDIR = @PYTHON_SYSCFG_LIBDIR@
-PYTHON_SYSCFG_LINKFORSHARED = @PYTHON_SYSCFG_LINKFORSHARED@
PYTHON_VERSION = @PYTHON_VERSION@
RANLIB = @RANLIB@
RUBY = @RUBY@
@@ -398,33 +456,10 @@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
+SUBDIRS = src
pixmapdatadir = $(pkgdatadir)/pixmaps
icondatadir = $(datadir)/icons/hicolor/48x48/apps
-# Present in svn but not included in the tarball now:
-# gwy_hough-24.png
-# gwy_local_slope-24.png
-# gwy_presentation_attach-24.png
-# gwy_presentation_edge_canny-24.png
-# gwy_presentation_edge_harris_corner-24.png
-# gwy_presentation_edge_hough-24.png
-# gwy_presentation_edge_inclination-24.png
-# gwy_presentation_edge_laplace_gauss-24.png
-# gwy_presentation_edge_local_non_linearity-24.png
-# gwy_presentation_edge_prewitt-24.png
-# gwy_presentation_edge_rms_edge-24.png
-# gwy_presentation_edge_rms-24.png
-# gwy_presentation_edge_sobel-24.png
-# gwy_presentation_edge_step-24.png
-# gwy_presentation_edge_zero_crossing-24.png
-# gwy_presentation_extract-24.png
-# gwy_presentation_local_contrast-24.png
-# gwy_presentation_log-24.png
-# gwy_presentation_rank-24.png
-# gwy_presentation_remove-24.png
-# gwy_presentation_sem-24.png
-# gwy_presentation_shading-24.png
-
# Since 2.3: arithmetic data_measure drift immerse merge
# Since 2.7: path_level spectrum iso_roughness grains_measure gl_material
# Since 2.7: color_range_auto color_range_full color_range_fixed
@@ -436,36 +471,59 @@ icondatadir = $(datadir)/icons/hicolor/48x48/apps
# Since 2.38: synthetic_diffusion
# Since 2.45: convolution distribution_angle distribution_slope entropy graph_fd fft_filter_2d fft_2d find_peaks grain_correlation grain_exscribed_circle grain_inscribed_circle grains_edge graph_align graph_cut graph_dos graph_export_ascii graph_export_png graph_export_vector graph_filter level_flatten_base level_median load_debug load_info load_warning mask_distribute mask_extract mask_morph mask_thin measure_lattice neural_apply neural_train psdf_log_phi psdf_section synthetic_ballisti [...]
# Since 2.46: distance_transform extract_path enforce_distribution grains_edge_remove mutual_crop poly_distort straighten_path tip_indent_analyze tip_lateral_force volume_fd volume_kmeans volume_kmedians volume_slice volumize
+# Since 2.48: correlation_mask disconnected fft_filter_1d fit_shape fractal_correction mark_outliers mark_scars null_offsets xy_denoise synthetic_phases
+# Since 2.49: next previous fractal_measure mask_set synthetic_fibres rotate_3d
#
-# If you add new stock icons here, add them to a `Since' line above and run
-# ./utils/stockgen.py from the top-level directory to update source code
-# declarations.
+# If you add new stock icons here
+# - Add them to a `Since' line above (one Gwyddion version = one line).
+# - If they have source files add them to src/ and if they can be generated
+# automatically (the usual case) add them to the built_pixmaps.
+# - Run ./utils/stockgen.py from the top-level directory to update the PNG
+# build rules and source code declarations.
+# - After that the icon should be probably set as the default for some module
+# or elswhere in the source code.
pixmapdata_DATA = \
+ $(built_pixmaps) \
cd_line.png \
cd_rline.png \
cd_rstep.png \
cd_step.png \
circle_down.png \
circle_up.png \
+ gwy_drift-24.png \
+ gwy_favourite-24.png \
+ gwy_gl_material-16.png \
+ gwy_gwyddion-32.png \
+ gwy_gwyddion-60.png \
+ gwy_psdf_log_phi-24.png \
+ gwy_psdf_section-24.png \
+ gwyddion.ico \
+ splash.png
+
+icondata_DATA = \
+ gwyddion.png
+
+built_pixmaps = \
gwy_3d_base-24.png \
gwy_arithmetic-24.png \
gwy_bold-20.png \
gwy_cantilever-24.png \
+ gwy_color_range-24.png \
gwy_color_range_adaptive-24.png \
gwy_color_range_auto-24.png \
gwy_color_range_fixed-24.png \
gwy_color_range_full-24.png \
- gwy_color_range-24.png \
gwy_convolution-24.png \
gwy_correct_affine-24.png \
+ gwy_correlation_mask-24.png \
gwy_crop-24.png \
gwy_cwt-24.png \
gwy_data_measure-24.png \
+ gwy_disconnected-24.png \
gwy_distance-24.png \
gwy_distance_transform-24.png \
gwy_distribution_angle-24.png \
gwy_distribution_slope-24.png \
- gwy_drift-24.png \
gwy_dwt-24.png \
gwy_edge-24.png \
gwy_enforce_distribution-24.png \
@@ -474,28 +532,33 @@ pixmapdata_DATA = \
gwy_extract_path-24.png \
gwy_facet_level-24.png \
gwy_favourite-24.png \
- gwy_fft_filter_2d-24.png \
gwy_fft-24.png \
gwy_fft_2d-24.png \
+ gwy_fft_filter_1d-24.png \
+ gwy_fft_filter_2d-24.png \
gwy_filter-24.png \
gwy_find_peaks-24.png \
+ gwy_fit_shape-24.png \
gwy_fix_zero-24.png \
gwy_flip_horizontally-24.png \
gwy_flip_vertically-24.png \
gwy_fractal-24.png \
+ gwy_fractal_measure-24.png \
+ gwy_fractal_correction-24.png \
gwy_gl_material-16.png \
gwy_gradient_horizontal-24.png \
gwy_gradient_vertical-24.png \
gwy_grain_correlation-24.png \
gwy_grain_exscribed_circle-24.png \
gwy_grain_inscribed_circle-24.png \
+ gwy_grains-24.png \
gwy_grains_edge-24.png \
gwy_grains_edge_remove-24.png \
gwy_grains_graph-24.png \
gwy_grains_measure-24.png \
gwy_grains_remove-24.png \
gwy_grains_water-24.png \
- gwy_grains-24.png \
+ gwy_graph-24.png \
gwy_graph_align-24.png \
gwy_graph_cut-24.png \
gwy_graph_dos-24.png \
@@ -515,18 +578,15 @@ pixmapdata_DATA = \
gwy_graph_zoom_fit-24.png \
gwy_graph_zoom_in-24.png \
gwy_graph_zoom_out-24.png \
- gwy_graph-24.png \
- gwy_gwyddion-32.png \
- gwy_gwyddion-60.png \
gwy_hough-24.png \
gwy_immerse-24.png \
gwy_iso_roughness-24.png \
gwy_italic-20.png \
gwy_less-24.png \
+ gwy_level-24.png \
gwy_level_flatten_base-24.png \
gwy_level_median-24.png \
gwy_level_triangle-24.png \
- gwy_level-24.png \
gwy_light_rotate-24.png \
gwy_line_level-24.png \
gwy_load_debug-20.png \
@@ -535,15 +595,19 @@ pixmapdata_DATA = \
gwy_local_slope-24.png \
gwy_logscale_horizontal-24.png \
gwy_logscale_vertical-24.png \
+ gwy_mark_outliers-24.png \
+ gwy_mark_scars-24.png \
gwy_mark_with-24.png \
+ gwy_mask-16.png \
+ gwy_mask-24.png \
gwy_mask_add-24.png \
+ gwy_mask_circle-24.png \
gwy_mask_circle_exclusive-24.png \
gwy_mask_circle_inclusive-24.png \
- gwy_mask_circle-24.png \
gwy_mask_distribute-24.png \
gwy_mask_editor-24.png \
- gwy_mask_exclude_circle-24.png \
gwy_mask_exclude-24.png \
+ gwy_mask_exclude_circle-24.png \
gwy_mask_extract-24.png \
gwy_mask_fill_draw-24.png \
gwy_mask_fill_erase-24.png \
@@ -557,36 +621,37 @@ pixmapdata_DATA = \
gwy_mask_rect_exclusive-24.png \
gwy_mask_rect_inclusive-24.png \
gwy_mask_remove-24.png \
+ gwy_mask_set-24.png \
gwy_mask_shrink-24.png \
gwy_mask_subtract-24.png \
gwy_mask_thin-24.png \
- gwy_mask-16.png \
- gwy_mask-24.png \
gwy_measure_lattice-24.png \
gwy_merge-24.png \
gwy_more-24.png \
gwy_mutual_crop-24.png \
gwy_neural_apply-24.png \
gwy_neural_train-24.png \
+ gwy_next-24.png \
+ gwy_null_offsets-24.png \
gwy_palettes-16.png \
gwy_palettes-24.png \
gwy_path_level-24.png \
gwy_pointer_measure-24.png \
gwy_poly_distort-24.png \
- gwy_polynom_level-24.png \
gwy_polynom-24.png \
+ gwy_polynom_level-24.png \
+ gwy_previous-24.png \
gwy_profile-24.png \
- gwy_psdf_log_phi-24.png \
- gwy_psdf_section-24.png \
gwy_pygwy-24.png \
gwy_remove_under_mask-24.png \
gwy_rotate_180-24.png \
+ gwy_rotate_3d-24.png \
+ gwy_rotate-24.png \
gwy_rotate_90_ccw-24.png \
gwy_rotate_90_cw-24.png \
- gwy_rotate-24.png \
+ gwy_scale-24.png \
gwy_scale_horizontally-24.png \
gwy_scale_vertically-24.png \
- gwy_scale-24.png \
gwy_scars-24.png \
gwy_selections-24.png \
gwy_shader-24.png \
@@ -601,12 +666,14 @@ pixmapdata_DATA = \
gwy_synthetic_columnar-24.png \
gwy_synthetic_diffusion-24.png \
gwy_synthetic_domains-24.png \
+ gwy_synthetic_fibres-24.png \
gwy_synthetic_lattice-24.png \
gwy_synthetic_line_noise-24.png \
gwy_synthetic_noise-24.png \
gwy_synthetic_objects-24.png \
gwy_synthetic_particles-24.png \
gwy_synthetic_pattern-24.png \
+ gwy_synthetic_phases-24.png \
gwy_synthetic_spectral-24.png \
gwy_synthetic_waves-24.png \
gwy_tilt-24.png \
@@ -630,95 +697,41 @@ pixmapdata_DATA = \
gwy_volume_slice-24.png \
gwy_volumize-24.png \
gwy_volumize_layers-24.png \
+ gwy_xy_denoise-24.png \
gwy_zero_mean-24.png \
gwy_zoom_1_1-24.png \
gwy_zoom_fit-24.png \
gwy_zoom_in-24.png \
- gwy_zoom_out-24.png \
- gwyddion.ico \
- splash.png
+ gwy_zoom_out-24.png
-icondata_DATA = \
- gwyddion.png
+INKSCAPE_RENDER_PNG = $(INKSCAPE) --without-gui --export-area-page
+# Not built automatically:
+# gwy_drift-24.png - must render to 96x96 first, then downsize due to
+# Inkscape gradient mesh issues
+#
+# cd_line.png
+# cd_rline.png
+# cd_rstep.png
+# cd_step.png
+# circle_down.png
+# circle_up.png - no SVG
+#
+# gwy_psdf_log_phi-24.png
+# gwy_psdf_section-24.png
+#
+# gwy_gwyddion-32.png
+# gwy_gwyddion-60.png - no SVG
# Note: splash screen source is too big to distribute in every tarball,
# check it out from Subversion
-xcf_sources = \
- cd_line.xcf \
- cd_rline.xcf \
- cd_rstep.xcf \
- cd_step.xcf \
- gwy_3d_base-24.xcf \
- gwy_arithmetic-24.xcf \
- gwy_cantilever-24.xcf \
- gwy_color_range-24.xcf \
- gwy_crop-24.xcf \
- gwy_direction-24.xcf \
- gwy_edge-24.xcf \
- gwy_extract_path-24.xcf \
- gwy_favourite-24.xcf \
- gwy_fft-24.xcf \
- gwy_filter-24.xcf \
- gwy_flip_horizontally-24.xcf \
- gwy_flip_vertically-24.xcf \
- gwy_gl_material-16.xcf \
- gwy_gradient-24.xcf \
- gwy_grains-24.xcf \
- gwy_graph-24.xcf \
- gwy_graph_zoom-24.xcf \
- gwy_iso_roughness-24.xcf \
- gwy_less-24.xcf \
- gwy_level-24.xcf \
- gwy_light_rotate-24.xcf \
- gwy_load_message-20.xcf \
- gwy_markup-20.xcf \
- gwy_mask-16.xcf \
- gwy_mask-24.xcf \
- gwy_measure-24.xcf \
- gwy_more-24.xcf \
- gwy_palette-24.xcf \
- gwy_palettes-16.xcf \
- gwy_polynom-24.xcf \
- gwy_presentation-24.xcf \
- gwy_presentation_ops-24.xcf \
- gwy_profile-24.xcf \
- gwy_pygwy-24.xcf \
- gwy_remove_under_mask-24.xcf \
- gwy_rotate-24.xcf \
- gwy_rotate_180-24.xcf \
- gwy_rotate_90_ccw-24.xcf \
- gwy_rotate_90_cw-24.xcf \
- gwy_scale-24.xcf \
- gwy_scale_horizontally-24.xcf \
- gwy_scale_vertically-24.xcf \
- gwy_selection-24.xcf \
- gwy_shader-24.xcf \
- gwy_spectrum-24.xcf \
- gwy_spot_remove-24.xcf \
- gwy_stat_quantities-24.xcf \
- gwy_stats-24.xcf \
- gwy_synthetic-24.xcf \
- gwy_tip-24.xcf \
- gwy_transform-24.xcf \
- gwy_unrotate-24.xcf \
- gwy_value_invert-24.xcf \
- gwy_zoom-24.xcf
-
-svg_sources = \
- gwy_path.svg \
- gwy_neural.svg \
- gwy_poly_distort.svg \
- gwy_volume.svg
-
EXTRA_DIST = \
gwyddion.icns \
$(icondata_DATA) \
- $(pixmapdata_DATA) \
- $(xcf_sources) \
- $(svg_sources)
+ $(pixmapdata_DATA)
-all: all-am
+MAINTAINERCLEANFILES = $(built_pixmaps)
+all: all-recursive
.SUFFIXES:
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@@ -798,12 +811,105 @@ uninstall-pixmapdataDATA:
@list='$(pixmapdata_DATA)'; test -n "$(pixmapdatadir)" || list=; \
files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
dir='$(DESTDIR)$(pixmapdatadir)'; $(am__uninstall_files_from_dir)
-tags TAGS:
-ctags CTAGS:
-
-cscope cscopelist:
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+# (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+ @fail=; \
+ if $(am__make_keepgoing); then \
+ failcom='fail=yes'; \
+ else \
+ failcom='exit 1'; \
+ fi; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
@@ -835,22 +941,48 @@ distdir: $(DISTFILES)
|| exit 1; \
fi; \
done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ $(am__make_dryrun) \
+ || test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
check-am: all-am
-check: check-am
+check: check-recursive
all-am: Makefile $(DATA)
-installdirs:
+installdirs: installdirs-recursive
+installdirs-am:
for dir in "$(DESTDIR)$(icondatadir)" "$(DESTDIR)$(pixmapdatadir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-installcheck: installcheck-am
+installcheck: installcheck-recursive
install-strip:
if test -z '$(STRIP)'; then \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
@@ -872,90 +1004,1096 @@ distclean-generic:
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-recursive
clean-am: clean-generic clean-libtool mostlyclean-am
-distclean: distclean-am
+distclean: distclean-recursive
-rm -f Makefile
-distclean-am: clean-am distclean-generic
+distclean-am: clean-am distclean-generic distclean-tags
-dvi: dvi-am
+dvi: dvi-recursive
dvi-am:
-html: html-am
+html: html-recursive
html-am:
-info: info-am
+info: info-recursive
info-am:
install-data-am: install-icondataDATA install-pixmapdataDATA
-install-dvi: install-dvi-am
+install-dvi: install-dvi-recursive
install-dvi-am:
install-exec-am:
-install-html: install-html-am
+install-html: install-html-recursive
install-html-am:
-install-info: install-info-am
+install-info: install-info-recursive
install-info-am:
install-man:
-install-pdf: install-pdf-am
+install-pdf: install-pdf-recursive
install-pdf-am:
-install-ps: install-ps-am
+install-ps: install-ps-recursive
install-ps-am:
installcheck-am:
-maintainer-clean: maintainer-clean-am
+maintainer-clean: maintainer-clean-recursive
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
-mostlyclean: mostlyclean-am
+mostlyclean: mostlyclean-recursive
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-pdf: pdf-am
+pdf: pdf-recursive
pdf-am:
-ps: ps-am
+ps: ps-recursive
ps-am:
uninstall-am: uninstall-icondataDATA uninstall-pixmapdataDATA
-.MAKE: install-am install-strip
+.MAKE: $(am__recursive_targets) install-am install-strip
-.PHONY: all all-am check check-am clean clean-generic clean-libtool \
- cscopelist-am ctags-am distclean distclean-generic \
- distclean-libtool distdir dvi dvi-am html html-am info info-am \
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+ check-am clean clean-generic clean-libtool cscopelist-am ctags \
+ ctags-am distclean distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
install install-am install-data install-data-am install-dvi \
install-dvi-am install-exec install-exec-am install-html \
install-html-am install-icondataDATA install-info \
install-info-am install-man install-pdf install-pdf-am \
install-pixmapdataDATA install-ps install-ps-am install-strip \
- installcheck installcheck-am installdirs maintainer-clean \
- maintainer-clean-generic mostlyclean mostlyclean-generic \
- mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \
- uninstall-am uninstall-icondataDATA uninstall-pixmapdataDATA
+ installcheck installcheck-am installdirs installdirs-am \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-am uninstall uninstall-am uninstall-icondataDATA \
+ uninstall-pixmapdataDATA
.PRECIOUS: Makefile
+list-icons:
+ @echo ICONLIST $(pixmapdata_DATA)
+
+list-built-icons:
+ @echo ICONLIST $(built_pixmaps)
+
+# @@@ GENERATED STOCK LIST BEGIN @@@
+ at MAINTAINER_MODE_TRUE@gwy_3d_base-24.png: $(srcdir)/src/gwy_3d_base-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_3d_base-24.png" --file="$(srcdir)/src/gwy_3d_base-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_3d_base-24.png" "gwy_3d_base-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_3d_base-24.crush.png"; then mv -f "gwy_3d_base-24.crush.png" "gwy_3d_base-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_arithmetic-24.png: $(srcdir)/src/gwy_arithmetic-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_arithmetic-24.png" --file="$(srcdir)/src/gwy_arithmetic-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_arithmetic-24.png" "gwy_arithmetic-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_arithmetic-24.crush.png"; then mv -f "gwy_arithmetic-24.crush.png" "gwy_arithmetic-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_bold-20.png: $(srcdir)/src/gwy_bold-20.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=20 --export-height=20 --export-png="gwy_bold-20.png" --file="$(srcdir)/src/gwy_bold-20.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_bold-20.png" "gwy_bold-20.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_bold-20.crush.png"; then mv -f "gwy_bold-20.crush.png" "gwy_bold-20.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_cantilever-24.png: $(srcdir)/src/gwy_cantilever-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_cantilever-24.png" --file="$(srcdir)/src/gwy_cantilever-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_cantilever-24.png" "gwy_cantilever-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_cantilever-24.crush.png"; then mv -f "gwy_cantilever-24.crush.png" "gwy_cantilever-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_color_range-24.png: $(srcdir)/src/gwy_color_range-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_color_range-24.png" --file="$(srcdir)/src/gwy_color_range-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_color_range-24.png" "gwy_color_range-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_color_range-24.crush.png"; then mv -f "gwy_color_range-24.crush.png" "gwy_color_range-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_color_range_adaptive-24.png: $(srcdir)/src/gwy_color_range_adaptive-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_color_range_adaptive-24.png" --file="$(srcdir)/src/gwy_color_range_adaptive-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_color_range_adaptive-24.png" "gwy_color_range_adaptive-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_color_range_adaptive-24.crush.png"; then mv -f "gwy_color_range_adaptive-24.crush.png" "gwy_color_range_adaptive-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_color_range_auto-24.png: $(srcdir)/src/gwy_color_range_auto-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_color_range_auto-24.png" --file="$(srcdir)/src/gwy_color_range_auto-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_color_range_auto-24.png" "gwy_color_range_auto-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_color_range_auto-24.crush.png"; then mv -f "gwy_color_range_auto-24.crush.png" "gwy_color_range_auto-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_color_range_fixed-24.png: $(srcdir)/src/gwy_color_range_fixed-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_color_range_fixed-24.png" --file="$(srcdir)/src/gwy_color_range_fixed-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_color_range_fixed-24.png" "gwy_color_range_fixed-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_color_range_fixed-24.crush.png"; then mv -f "gwy_color_range_fixed-24.crush.png" "gwy_color_range_fixed-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_color_range_full-24.png: $(srcdir)/src/gwy_color_range_full-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_color_range_full-24.png" --file="$(srcdir)/src/gwy_color_range_full-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_color_range_full-24.png" "gwy_color_range_full-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_color_range_full-24.crush.png"; then mv -f "gwy_color_range_full-24.crush.png" "gwy_color_range_full-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_convolution-24.png: $(srcdir)/src/gwy_convolution-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_convolution-24.png" --file="$(srcdir)/src/gwy_convolution-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_convolution-24.png" "gwy_convolution-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_convolution-24.crush.png"; then mv -f "gwy_convolution-24.crush.png" "gwy_convolution-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_correct_affine-24.png: $(srcdir)/src/gwy_correct_affine-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_correct_affine-24.png" --file="$(srcdir)/src/gwy_correct_affine-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_correct_affine-24.png" "gwy_correct_affine-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_correct_affine-24.crush.png"; then mv -f "gwy_correct_affine-24.crush.png" "gwy_correct_affine-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_correlation_mask-24.png: $(srcdir)/src/gwy_correlation_mask-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_correlation_mask-24.png" --file="$(srcdir)/src/gwy_correlation_mask-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_correlation_mask-24.png" "gwy_correlation_mask-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_correlation_mask-24.crush.png"; then mv -f "gwy_correlation_mask-24.crush.png" "gwy_correlation_mask-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_crop-24.png: $(srcdir)/src/gwy_crop-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_crop-24.png" --file="$(srcdir)/src/gwy_crop-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_crop-24.png" "gwy_crop-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_crop-24.crush.png"; then mv -f "gwy_crop-24.crush.png" "gwy_crop-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_cwt-24.png: $(srcdir)/src/gwy_cwt-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_cwt-24.png" --file="$(srcdir)/src/gwy_cwt-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_cwt-24.png" "gwy_cwt-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_cwt-24.crush.png"; then mv -f "gwy_cwt-24.crush.png" "gwy_cwt-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_data_measure-24.png: $(srcdir)/src/gwy_data_measure-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_data_measure-24.png" --file="$(srcdir)/src/gwy_data_measure-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_data_measure-24.png" "gwy_data_measure-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_data_measure-24.crush.png"; then mv -f "gwy_data_measure-24.crush.png" "gwy_data_measure-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_disconnected-24.png: $(srcdir)/src/gwy_disconnected-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_disconnected-24.png" --file="$(srcdir)/src/gwy_disconnected-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_disconnected-24.png" "gwy_disconnected-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_disconnected-24.crush.png"; then mv -f "gwy_disconnected-24.crush.png" "gwy_disconnected-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_distance-24.png: $(srcdir)/src/gwy_distance-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_distance-24.png" --file="$(srcdir)/src/gwy_distance-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_distance-24.png" "gwy_distance-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_distance-24.crush.png"; then mv -f "gwy_distance-24.crush.png" "gwy_distance-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_distance_transform-24.png: $(srcdir)/src/gwy_distance_transform-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_distance_transform-24.png" --file="$(srcdir)/src/gwy_distance_transform-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_distance_transform-24.png" "gwy_distance_transform-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_distance_transform-24.crush.png"; then mv -f "gwy_distance_transform-24.crush.png" "gwy_distance_transform-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_distribution_angle-24.png: $(srcdir)/src/gwy_distribution_angle-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_distribution_angle-24.png" --file="$(srcdir)/src/gwy_distribution_angle-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_distribution_angle-24.png" "gwy_distribution_angle-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_distribution_angle-24.crush.png"; then mv -f "gwy_distribution_angle-24.crush.png" "gwy_distribution_angle-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_distribution_slope-24.png: $(srcdir)/src/gwy_distribution_slope-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_distribution_slope-24.png" --file="$(srcdir)/src/gwy_distribution_slope-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_distribution_slope-24.png" "gwy_distribution_slope-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_distribution_slope-24.crush.png"; then mv -f "gwy_distribution_slope-24.crush.png" "gwy_distribution_slope-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_dwt-24.png: $(srcdir)/src/gwy_dwt-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_dwt-24.png" --file="$(srcdir)/src/gwy_dwt-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_dwt-24.png" "gwy_dwt-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_dwt-24.crush.png"; then mv -f "gwy_dwt-24.crush.png" "gwy_dwt-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_edge-24.png: $(srcdir)/src/gwy_edge-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_edge-24.png" --file="$(srcdir)/src/gwy_edge-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_edge-24.png" "gwy_edge-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_edge-24.crush.png"; then mv -f "gwy_edge-24.crush.png" "gwy_edge-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_enforce_distribution-24.png: $(srcdir)/src/gwy_enforce_distribution-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_enforce_distribution-24.png" --file="$(srcdir)/src/gwy_enforce_distribution-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_enforce_distribution-24.png" "gwy_enforce_distribution-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_enforce_distribution-24.crush.png"; then mv -f "gwy_enforce_distribution-24.crush.png" "gwy_enforce_distribution-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_entropy-24.png: $(srcdir)/src/gwy_entropy-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_entropy-24.png" --file="$(srcdir)/src/gwy_entropy-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_entropy-24.png" "gwy_entropy-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_entropy-24.crush.png"; then mv -f "gwy_entropy-24.crush.png" "gwy_entropy-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_extend-24.png: $(srcdir)/src/gwy_extend-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_extend-24.png" --file="$(srcdir)/src/gwy_extend-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_extend-24.png" "gwy_extend-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_extend-24.crush.png"; then mv -f "gwy_extend-24.crush.png" "gwy_extend-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_extract_path-24.png: $(srcdir)/src/gwy_extract_path-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_extract_path-24.png" --file="$(srcdir)/src/gwy_extract_path-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_extract_path-24.png" "gwy_extract_path-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_extract_path-24.crush.png"; then mv -f "gwy_extract_path-24.crush.png" "gwy_extract_path-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_facet_level-24.png: $(srcdir)/src/gwy_facet_level-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_facet_level-24.png" --file="$(srcdir)/src/gwy_facet_level-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_facet_level-24.png" "gwy_facet_level-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_facet_level-24.crush.png"; then mv -f "gwy_facet_level-24.crush.png" "gwy_facet_level-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_favourite-24.png: $(srcdir)/src/gwy_favourite-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_favourite-24.png" --file="$(srcdir)/src/gwy_favourite-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_favourite-24.png" "gwy_favourite-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_favourite-24.crush.png"; then mv -f "gwy_favourite-24.crush.png" "gwy_favourite-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_fft-24.png: $(srcdir)/src/gwy_fft-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_fft-24.png" --file="$(srcdir)/src/gwy_fft-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_fft-24.png" "gwy_fft-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_fft-24.crush.png"; then mv -f "gwy_fft-24.crush.png" "gwy_fft-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_fft_2d-24.png: $(srcdir)/src/gwy_fft_2d-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_fft_2d-24.png" --file="$(srcdir)/src/gwy_fft_2d-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_fft_2d-24.png" "gwy_fft_2d-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_fft_2d-24.crush.png"; then mv -f "gwy_fft_2d-24.crush.png" "gwy_fft_2d-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_fft_filter_1d-24.png: $(srcdir)/src/gwy_fft_filter_1d-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_fft_filter_1d-24.png" --file="$(srcdir)/src/gwy_fft_filter_1d-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_fft_filter_1d-24.png" "gwy_fft_filter_1d-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_fft_filter_1d-24.crush.png"; then mv -f "gwy_fft_filter_1d-24.crush.png" "gwy_fft_filter_1d-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_fft_filter_2d-24.png: $(srcdir)/src/gwy_fft_filter_2d-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_fft_filter_2d-24.png" --file="$(srcdir)/src/gwy_fft_filter_2d-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_fft_filter_2d-24.png" "gwy_fft_filter_2d-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_fft_filter_2d-24.crush.png"; then mv -f "gwy_fft_filter_2d-24.crush.png" "gwy_fft_filter_2d-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_filter-24.png: $(srcdir)/src/gwy_filter-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_filter-24.png" --file="$(srcdir)/src/gwy_filter-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_filter-24.png" "gwy_filter-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_filter-24.crush.png"; then mv -f "gwy_filter-24.crush.png" "gwy_filter-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_find_peaks-24.png: $(srcdir)/src/gwy_find_peaks-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_find_peaks-24.png" --file="$(srcdir)/src/gwy_find_peaks-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_find_peaks-24.png" "gwy_find_peaks-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_find_peaks-24.crush.png"; then mv -f "gwy_find_peaks-24.crush.png" "gwy_find_peaks-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_fit_shape-24.png: $(srcdir)/src/gwy_fit_shape-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_fit_shape-24.png" --file="$(srcdir)/src/gwy_fit_shape-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_fit_shape-24.png" "gwy_fit_shape-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_fit_shape-24.crush.png"; then mv -f "gwy_fit_shape-24.crush.png" "gwy_fit_shape-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_fix_zero-24.png: $(srcdir)/src/gwy_fix_zero-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_fix_zero-24.png" --file="$(srcdir)/src/gwy_fix_zero-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_fix_zero-24.png" "gwy_fix_zero-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_fix_zero-24.crush.png"; then mv -f "gwy_fix_zero-24.crush.png" "gwy_fix_zero-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_flip_horizontally-24.png: $(srcdir)/src/gwy_flip_horizontally-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_flip_horizontally-24.png" --file="$(srcdir)/src/gwy_flip_horizontally-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_flip_horizontally-24.png" "gwy_flip_horizontally-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_flip_horizontally-24.crush.png"; then mv -f "gwy_flip_horizontally-24.crush.png" "gwy_flip_horizontally-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_flip_vertically-24.png: $(srcdir)/src/gwy_flip_vertically-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_flip_vertically-24.png" --file="$(srcdir)/src/gwy_flip_vertically-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_flip_vertically-24.png" "gwy_flip_vertically-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_flip_vertically-24.crush.png"; then mv -f "gwy_flip_vertically-24.crush.png" "gwy_flip_vertically-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_fractal-24.png: $(srcdir)/src/gwy_fractal-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_fractal-24.png" --file="$(srcdir)/src/gwy_fractal-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_fractal-24.png" "gwy_fractal-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_fractal-24.crush.png"; then mv -f "gwy_fractal-24.crush.png" "gwy_fractal-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_fractal_correction-24.png: $(srcdir)/src/gwy_fractal_correction-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_fractal_correction-24.png" --file="$(srcdir)/src/gwy_fractal_correction-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_fractal_correction-24.png" "gwy_fractal_correction-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_fractal_correction-24.crush.png"; then mv -f "gwy_fractal_correction-24.crush.png" "gwy_fractal_correction-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_fractal_measure-24.png: $(srcdir)/src/gwy_fractal_measure-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_fractal_measure-24.png" --file="$(srcdir)/src/gwy_fractal_measure-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_fractal_measure-24.png" "gwy_fractal_measure-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_fractal_measure-24.crush.png"; then mv -f "gwy_fractal_measure-24.crush.png" "gwy_fractal_measure-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_gl_material-16.png: $(srcdir)/src/gwy_gl_material-16.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=16 --export-height=16 --export-png="gwy_gl_material-16.png" --file="$(srcdir)/src/gwy_gl_material-16.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_gl_material-16.png" "gwy_gl_material-16.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_gl_material-16.crush.png"; then mv -f "gwy_gl_material-16.crush.png" "gwy_gl_material-16.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_gradient_horizontal-24.png: $(srcdir)/src/gwy_gradient_horizontal-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_gradient_horizontal-24.png" --file="$(srcdir)/src/gwy_gradient_horizontal-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_gradient_horizontal-24.png" "gwy_gradient_horizontal-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_gradient_horizontal-24.crush.png"; then mv -f "gwy_gradient_horizontal-24.crush.png" "gwy_gradient_horizontal-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_gradient_vertical-24.png: $(srcdir)/src/gwy_gradient_vertical-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_gradient_vertical-24.png" --file="$(srcdir)/src/gwy_gradient_vertical-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_gradient_vertical-24.png" "gwy_gradient_vertical-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_gradient_vertical-24.crush.png"; then mv -f "gwy_gradient_vertical-24.crush.png" "gwy_gradient_vertical-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_grain_correlation-24.png: $(srcdir)/src/gwy_grain_correlation-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_grain_correlation-24.png" --file="$(srcdir)/src/gwy_grain_correlation-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_grain_correlation-24.png" "gwy_grain_correlation-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_grain_correlation-24.crush.png"; then mv -f "gwy_grain_correlation-24.crush.png" "gwy_grain_correlation-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_grain_exscribed_circle-24.png: $(srcdir)/src/gwy_grain_exscribed_circle-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_grain_exscribed_circle-24.png" --file="$(srcdir)/src/gwy_grain_exscribed_circle-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_grain_exscribed_circle-24.png" "gwy_grain_exscribed_circle-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_grain_exscribed_circle-24.crush.png"; then mv -f "gwy_grain_exscribed_circle-24.crush.png" "gwy_grain_exscribed_circle-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_grain_inscribed_circle-24.png: $(srcdir)/src/gwy_grain_inscribed_circle-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_grain_inscribed_circle-24.png" --file="$(srcdir)/src/gwy_grain_inscribed_circle-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_grain_inscribed_circle-24.png" "gwy_grain_inscribed_circle-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_grain_inscribed_circle-24.crush.png"; then mv -f "gwy_grain_inscribed_circle-24.crush.png" "gwy_grain_inscribed_circle-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_grains-24.png: $(srcdir)/src/gwy_grains-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_grains-24.png" --file="$(srcdir)/src/gwy_grains-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_grains-24.png" "gwy_grains-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_grains-24.crush.png"; then mv -f "gwy_grains-24.crush.png" "gwy_grains-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_grains_edge-24.png: $(srcdir)/src/gwy_grains_edge-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_grains_edge-24.png" --file="$(srcdir)/src/gwy_grains_edge-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_grains_edge-24.png" "gwy_grains_edge-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_grains_edge-24.crush.png"; then mv -f "gwy_grains_edge-24.crush.png" "gwy_grains_edge-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_grains_edge_remove-24.png: $(srcdir)/src/gwy_grains_edge_remove-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_grains_edge_remove-24.png" --file="$(srcdir)/src/gwy_grains_edge_remove-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_grains_edge_remove-24.png" "gwy_grains_edge_remove-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_grains_edge_remove-24.crush.png"; then mv -f "gwy_grains_edge_remove-24.crush.png" "gwy_grains_edge_remove-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_grains_graph-24.png: $(srcdir)/src/gwy_grains_graph-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_grains_graph-24.png" --file="$(srcdir)/src/gwy_grains_graph-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_grains_graph-24.png" "gwy_grains_graph-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_grains_graph-24.crush.png"; then mv -f "gwy_grains_graph-24.crush.png" "gwy_grains_graph-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_grains_measure-24.png: $(srcdir)/src/gwy_grains_measure-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_grains_measure-24.png" --file="$(srcdir)/src/gwy_grains_measure-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_grains_measure-24.png" "gwy_grains_measure-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_grains_measure-24.crush.png"; then mv -f "gwy_grains_measure-24.crush.png" "gwy_grains_measure-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_grains_remove-24.png: $(srcdir)/src/gwy_grains_remove-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_grains_remove-24.png" --file="$(srcdir)/src/gwy_grains_remove-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_grains_remove-24.png" "gwy_grains_remove-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_grains_remove-24.crush.png"; then mv -f "gwy_grains_remove-24.crush.png" "gwy_grains_remove-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_grains_water-24.png: $(srcdir)/src/gwy_grains_water-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_grains_water-24.png" --file="$(srcdir)/src/gwy_grains_water-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_grains_water-24.png" "gwy_grains_water-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_grains_water-24.crush.png"; then mv -f "gwy_grains_water-24.crush.png" "gwy_grains_water-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_graph-24.png: $(srcdir)/src/gwy_graph-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_graph-24.png" --file="$(srcdir)/src/gwy_graph-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_graph-24.png" "gwy_graph-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_graph-24.crush.png"; then mv -f "gwy_graph-24.crush.png" "gwy_graph-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_graph_align-24.png: $(srcdir)/src/gwy_graph_align-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_graph_align-24.png" --file="$(srcdir)/src/gwy_graph_align-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_graph_align-24.png" "gwy_graph_align-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_graph_align-24.crush.png"; then mv -f "gwy_graph_align-24.crush.png" "gwy_graph_align-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_graph_cut-24.png: $(srcdir)/src/gwy_graph_cut-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_graph_cut-24.png" --file="$(srcdir)/src/gwy_graph_cut-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_graph_cut-24.png" "gwy_graph_cut-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_graph_cut-24.crush.png"; then mv -f "gwy_graph_cut-24.crush.png" "gwy_graph_cut-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_graph_dos-24.png: $(srcdir)/src/gwy_graph_dos-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_graph_dos-24.png" --file="$(srcdir)/src/gwy_graph_dos-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_graph_dos-24.png" "gwy_graph_dos-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_graph_dos-24.crush.png"; then mv -f "gwy_graph_dos-24.crush.png" "gwy_graph_dos-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_graph_export_ascii-24.png: $(srcdir)/src/gwy_graph_export_ascii-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_graph_export_ascii-24.png" --file="$(srcdir)/src/gwy_graph_export_ascii-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_graph_export_ascii-24.png" "gwy_graph_export_ascii-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_graph_export_ascii-24.crush.png"; then mv -f "gwy_graph_export_ascii-24.crush.png" "gwy_graph_export_ascii-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_graph_export_png-24.png: $(srcdir)/src/gwy_graph_export_png-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_graph_export_png-24.png" --file="$(srcdir)/src/gwy_graph_export_png-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_graph_export_png-24.png" "gwy_graph_export_png-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_graph_export_png-24.crush.png"; then mv -f "gwy_graph_export_png-24.crush.png" "gwy_graph_export_png-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_graph_export_vector-24.png: $(srcdir)/src/gwy_graph_export_vector-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_graph_export_vector-24.png" --file="$(srcdir)/src/gwy_graph_export_vector-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_graph_export_vector-24.png" "gwy_graph_export_vector-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_graph_export_vector-24.crush.png"; then mv -f "gwy_graph_export_vector-24.crush.png" "gwy_graph_export_vector-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_graph_fd-24.png: $(srcdir)/src/gwy_graph_fd-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_graph_fd-24.png" --file="$(srcdir)/src/gwy_graph_fd-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_graph_fd-24.png" "gwy_graph_fd-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_graph_fd-24.crush.png"; then mv -f "gwy_graph_fd-24.crush.png" "gwy_graph_fd-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_graph_filter-24.png: $(srcdir)/src/gwy_graph_filter-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_graph_filter-24.png" --file="$(srcdir)/src/gwy_graph_filter-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_graph_filter-24.png" "gwy_graph_filter-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_graph_filter-24.crush.png"; then mv -f "gwy_graph_filter-24.crush.png" "gwy_graph_filter-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_graph_function-24.png: $(srcdir)/src/gwy_graph_function-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_graph_function-24.png" --file="$(srcdir)/src/gwy_graph_function-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_graph_function-24.png" "gwy_graph_function-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_graph_function-24.crush.png"; then mv -f "gwy_graph_function-24.crush.png" "gwy_graph_function-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_graph_halfgauss-24.png: $(srcdir)/src/gwy_graph_halfgauss-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_graph_halfgauss-24.png" --file="$(srcdir)/src/gwy_graph_halfgauss-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_graph_halfgauss-24.png" "gwy_graph_halfgauss-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_graph_halfgauss-24.crush.png"; then mv -f "gwy_graph_halfgauss-24.crush.png" "gwy_graph_halfgauss-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_graph_level-24.png: $(srcdir)/src/gwy_graph_level-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_graph_level-24.png" --file="$(srcdir)/src/gwy_graph_level-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_graph_level-24.png" "gwy_graph_level-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_graph_level-24.crush.png"; then mv -f "gwy_graph_level-24.crush.png" "gwy_graph_level-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_graph_measure-24.png: $(srcdir)/src/gwy_graph_measure-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_graph_measure-24.png" --file="$(srcdir)/src/gwy_graph_measure-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_graph_measure-24.png" "gwy_graph_measure-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_graph_measure-24.crush.png"; then mv -f "gwy_graph_measure-24.crush.png" "gwy_graph_measure-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_graph_palette-24.png: $(srcdir)/src/gwy_graph_palette-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_graph_palette-24.png" --file="$(srcdir)/src/gwy_graph_palette-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_graph_palette-24.png" "gwy_graph_palette-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_graph_palette-24.crush.png"; then mv -f "gwy_graph_palette-24.crush.png" "gwy_graph_palette-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_graph_pointer-24.png: $(srcdir)/src/gwy_graph_pointer-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_graph_pointer-24.png" --file="$(srcdir)/src/gwy_graph_pointer-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_graph_pointer-24.png" "gwy_graph_pointer-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_graph_pointer-24.crush.png"; then mv -f "gwy_graph_pointer-24.crush.png" "gwy_graph_pointer-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_graph_ruler-24.png: $(srcdir)/src/gwy_graph_ruler-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_graph_ruler-24.png" --file="$(srcdir)/src/gwy_graph_ruler-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_graph_ruler-24.png" "gwy_graph_ruler-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_graph_ruler-24.crush.png"; then mv -f "gwy_graph_ruler-24.crush.png" "gwy_graph_ruler-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_graph_vertical-24.png: $(srcdir)/src/gwy_graph_vertical-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_graph_vertical-24.png" --file="$(srcdir)/src/gwy_graph_vertical-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_graph_vertical-24.png" "gwy_graph_vertical-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_graph_vertical-24.crush.png"; then mv -f "gwy_graph_vertical-24.crush.png" "gwy_graph_vertical-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_graph_zoom_fit-24.png: $(srcdir)/src/gwy_graph_zoom_fit-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_graph_zoom_fit-24.png" --file="$(srcdir)/src/gwy_graph_zoom_fit-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_graph_zoom_fit-24.png" "gwy_graph_zoom_fit-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_graph_zoom_fit-24.crush.png"; then mv -f "gwy_graph_zoom_fit-24.crush.png" "gwy_graph_zoom_fit-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_graph_zoom_in-24.png: $(srcdir)/src/gwy_graph_zoom_in-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_graph_zoom_in-24.png" --file="$(srcdir)/src/gwy_graph_zoom_in-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_graph_zoom_in-24.png" "gwy_graph_zoom_in-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_graph_zoom_in-24.crush.png"; then mv -f "gwy_graph_zoom_in-24.crush.png" "gwy_graph_zoom_in-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_graph_zoom_out-24.png: $(srcdir)/src/gwy_graph_zoom_out-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_graph_zoom_out-24.png" --file="$(srcdir)/src/gwy_graph_zoom_out-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_graph_zoom_out-24.png" "gwy_graph_zoom_out-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_graph_zoom_out-24.crush.png"; then mv -f "gwy_graph_zoom_out-24.crush.png" "gwy_graph_zoom_out-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_hough-24.png: $(srcdir)/src/gwy_hough-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_hough-24.png" --file="$(srcdir)/src/gwy_hough-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_hough-24.png" "gwy_hough-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_hough-24.crush.png"; then mv -f "gwy_hough-24.crush.png" "gwy_hough-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_immerse-24.png: $(srcdir)/src/gwy_immerse-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_immerse-24.png" --file="$(srcdir)/src/gwy_immerse-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_immerse-24.png" "gwy_immerse-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_immerse-24.crush.png"; then mv -f "gwy_immerse-24.crush.png" "gwy_immerse-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_iso_roughness-24.png: $(srcdir)/src/gwy_iso_roughness-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_iso_roughness-24.png" --file="$(srcdir)/src/gwy_iso_roughness-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_iso_roughness-24.png" "gwy_iso_roughness-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_iso_roughness-24.crush.png"; then mv -f "gwy_iso_roughness-24.crush.png" "gwy_iso_roughness-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_italic-20.png: $(srcdir)/src/gwy_italic-20.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=20 --export-height=20 --export-png="gwy_italic-20.png" --file="$(srcdir)/src/gwy_italic-20.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_italic-20.png" "gwy_italic-20.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_italic-20.crush.png"; then mv -f "gwy_italic-20.crush.png" "gwy_italic-20.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_less-24.png: $(srcdir)/src/gwy_less-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_less-24.png" --file="$(srcdir)/src/gwy_less-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_less-24.png" "gwy_less-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_less-24.crush.png"; then mv -f "gwy_less-24.crush.png" "gwy_less-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_level-24.png: $(srcdir)/src/gwy_level-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_level-24.png" --file="$(srcdir)/src/gwy_level-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_level-24.png" "gwy_level-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_level-24.crush.png"; then mv -f "gwy_level-24.crush.png" "gwy_level-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_level_flatten_base-24.png: $(srcdir)/src/gwy_level_flatten_base-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_level_flatten_base-24.png" --file="$(srcdir)/src/gwy_level_flatten_base-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_level_flatten_base-24.png" "gwy_level_flatten_base-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_level_flatten_base-24.crush.png"; then mv -f "gwy_level_flatten_base-24.crush.png" "gwy_level_flatten_base-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_level_median-24.png: $(srcdir)/src/gwy_level_median-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_level_median-24.png" --file="$(srcdir)/src/gwy_level_median-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_level_median-24.png" "gwy_level_median-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_level_median-24.crush.png"; then mv -f "gwy_level_median-24.crush.png" "gwy_level_median-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_level_triangle-24.png: $(srcdir)/src/gwy_level_triangle-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_level_triangle-24.png" --file="$(srcdir)/src/gwy_level_triangle-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_level_triangle-24.png" "gwy_level_triangle-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_level_triangle-24.crush.png"; then mv -f "gwy_level_triangle-24.crush.png" "gwy_level_triangle-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_light_rotate-24.png: $(srcdir)/src/gwy_light_rotate-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_light_rotate-24.png" --file="$(srcdir)/src/gwy_light_rotate-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_light_rotate-24.png" "gwy_light_rotate-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_light_rotate-24.crush.png"; then mv -f "gwy_light_rotate-24.crush.png" "gwy_light_rotate-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_line_level-24.png: $(srcdir)/src/gwy_line_level-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_line_level-24.png" --file="$(srcdir)/src/gwy_line_level-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_line_level-24.png" "gwy_line_level-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_line_level-24.crush.png"; then mv -f "gwy_line_level-24.crush.png" "gwy_line_level-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_load_debug-20.png: $(srcdir)/src/gwy_load_debug-20.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=20 --export-height=20 --export-png="gwy_load_debug-20.png" --file="$(srcdir)/src/gwy_load_debug-20.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_load_debug-20.png" "gwy_load_debug-20.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_load_debug-20.crush.png"; then mv -f "gwy_load_debug-20.crush.png" "gwy_load_debug-20.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_load_info-20.png: $(srcdir)/src/gwy_load_info-20.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=20 --export-height=20 --export-png="gwy_load_info-20.png" --file="$(srcdir)/src/gwy_load_info-20.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_load_info-20.png" "gwy_load_info-20.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_load_info-20.crush.png"; then mv -f "gwy_load_info-20.crush.png" "gwy_load_info-20.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_load_warning-20.png: $(srcdir)/src/gwy_load_warning-20.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=20 --export-height=20 --export-png="gwy_load_warning-20.png" --file="$(srcdir)/src/gwy_load_warning-20.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_load_warning-20.png" "gwy_load_warning-20.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_load_warning-20.crush.png"; then mv -f "gwy_load_warning-20.crush.png" "gwy_load_warning-20.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_local_slope-24.png: $(srcdir)/src/gwy_local_slope-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_local_slope-24.png" --file="$(srcdir)/src/gwy_local_slope-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_local_slope-24.png" "gwy_local_slope-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_local_slope-24.crush.png"; then mv -f "gwy_local_slope-24.crush.png" "gwy_local_slope-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_logscale_horizontal-24.png: $(srcdir)/src/gwy_logscale_horizontal-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_logscale_horizontal-24.png" --file="$(srcdir)/src/gwy_logscale_horizontal-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_logscale_horizontal-24.png" "gwy_logscale_horizontal-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_logscale_horizontal-24.crush.png"; then mv -f "gwy_logscale_horizontal-24.crush.png" "gwy_logscale_horizontal-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_logscale_vertical-24.png: $(srcdir)/src/gwy_logscale_vertical-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_logscale_vertical-24.png" --file="$(srcdir)/src/gwy_logscale_vertical-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_logscale_vertical-24.png" "gwy_logscale_vertical-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_logscale_vertical-24.crush.png"; then mv -f "gwy_logscale_vertical-24.crush.png" "gwy_logscale_vertical-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_mark_outliers-24.png: $(srcdir)/src/gwy_mark_outliers-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_mark_outliers-24.png" --file="$(srcdir)/src/gwy_mark_outliers-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_mark_outliers-24.png" "gwy_mark_outliers-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_mark_outliers-24.crush.png"; then mv -f "gwy_mark_outliers-24.crush.png" "gwy_mark_outliers-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_mark_scars-24.png: $(srcdir)/src/gwy_mark_scars-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_mark_scars-24.png" --file="$(srcdir)/src/gwy_mark_scars-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_mark_scars-24.png" "gwy_mark_scars-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_mark_scars-24.crush.png"; then mv -f "gwy_mark_scars-24.crush.png" "gwy_mark_scars-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_mark_with-24.png: $(srcdir)/src/gwy_mark_with-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_mark_with-24.png" --file="$(srcdir)/src/gwy_mark_with-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_mark_with-24.png" "gwy_mark_with-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_mark_with-24.crush.png"; then mv -f "gwy_mark_with-24.crush.png" "gwy_mark_with-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_mask-16.png: $(srcdir)/src/gwy_mask-16.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=16 --export-height=16 --export-png="gwy_mask-16.png" --file="$(srcdir)/src/gwy_mask-16.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_mask-16.png" "gwy_mask-16.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_mask-16.crush.png"; then mv -f "gwy_mask-16.crush.png" "gwy_mask-16.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_mask-24.png: $(srcdir)/src/gwy_mask-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_mask-24.png" --file="$(srcdir)/src/gwy_mask-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_mask-24.png" "gwy_mask-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_mask-24.crush.png"; then mv -f "gwy_mask-24.crush.png" "gwy_mask-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_mask_add-24.png: $(srcdir)/src/gwy_mask_add-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_mask_add-24.png" --file="$(srcdir)/src/gwy_mask_add-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_mask_add-24.png" "gwy_mask_add-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_mask_add-24.crush.png"; then mv -f "gwy_mask_add-24.crush.png" "gwy_mask_add-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_mask_circle-24.png: $(srcdir)/src/gwy_mask_circle-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_mask_circle-24.png" --file="$(srcdir)/src/gwy_mask_circle-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_mask_circle-24.png" "gwy_mask_circle-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_mask_circle-24.crush.png"; then mv -f "gwy_mask_circle-24.crush.png" "gwy_mask_circle-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_mask_circle_exclusive-24.png: $(srcdir)/src/gwy_mask_circle_exclusive-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_mask_circle_exclusive-24.png" --file="$(srcdir)/src/gwy_mask_circle_exclusive-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_mask_circle_exclusive-24.png" "gwy_mask_circle_exclusive-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_mask_circle_exclusive-24.crush.png"; then mv -f "gwy_mask_circle_exclusive-24.crush.png" "gwy_mask_circle_exclusive-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_mask_circle_inclusive-24.png: $(srcdir)/src/gwy_mask_circle_inclusive-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_mask_circle_inclusive-24.png" --file="$(srcdir)/src/gwy_mask_circle_inclusive-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_mask_circle_inclusive-24.png" "gwy_mask_circle_inclusive-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_mask_circle_inclusive-24.crush.png"; then mv -f "gwy_mask_circle_inclusive-24.crush.png" "gwy_mask_circle_inclusive-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_mask_distribute-24.png: $(srcdir)/src/gwy_mask_distribute-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_mask_distribute-24.png" --file="$(srcdir)/src/gwy_mask_distribute-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_mask_distribute-24.png" "gwy_mask_distribute-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_mask_distribute-24.crush.png"; then mv -f "gwy_mask_distribute-24.crush.png" "gwy_mask_distribute-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_mask_editor-24.png: $(srcdir)/src/gwy_mask_editor-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_mask_editor-24.png" --file="$(srcdir)/src/gwy_mask_editor-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_mask_editor-24.png" "gwy_mask_editor-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_mask_editor-24.crush.png"; then mv -f "gwy_mask_editor-24.crush.png" "gwy_mask_editor-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_mask_exclude-24.png: $(srcdir)/src/gwy_mask_exclude-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_mask_exclude-24.png" --file="$(srcdir)/src/gwy_mask_exclude-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_mask_exclude-24.png" "gwy_mask_exclude-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_mask_exclude-24.crush.png"; then mv -f "gwy_mask_exclude-24.crush.png" "gwy_mask_exclude-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_mask_exclude_circle-24.png: $(srcdir)/src/gwy_mask_exclude_circle-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_mask_exclude_circle-24.png" --file="$(srcdir)/src/gwy_mask_exclude_circle-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_mask_exclude_circle-24.png" "gwy_mask_exclude_circle-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_mask_exclude_circle-24.crush.png"; then mv -f "gwy_mask_exclude_circle-24.crush.png" "gwy_mask_exclude_circle-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_mask_extract-24.png: $(srcdir)/src/gwy_mask_extract-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_mask_extract-24.png" --file="$(srcdir)/src/gwy_mask_extract-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_mask_extract-24.png" "gwy_mask_extract-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_mask_extract-24.crush.png"; then mv -f "gwy_mask_extract-24.crush.png" "gwy_mask_extract-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_mask_fill_draw-24.png: $(srcdir)/src/gwy_mask_fill_draw-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_mask_fill_draw-24.png" --file="$(srcdir)/src/gwy_mask_fill_draw-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_mask_fill_draw-24.png" "gwy_mask_fill_draw-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_mask_fill_draw-24.crush.png"; then mv -f "gwy_mask_fill_draw-24.crush.png" "gwy_mask_fill_draw-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_mask_fill_erase-24.png: $(srcdir)/src/gwy_mask_fill_erase-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_mask_fill_erase-24.png" --file="$(srcdir)/src/gwy_mask_fill_erase-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_mask_fill_erase-24.png" "gwy_mask_fill_erase-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_mask_fill_erase-24.crush.png"; then mv -f "gwy_mask_fill_erase-24.crush.png" "gwy_mask_fill_erase-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_mask_grow-24.png: $(srcdir)/src/gwy_mask_grow-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_mask_grow-24.png" --file="$(srcdir)/src/gwy_mask_grow-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_mask_grow-24.png" "gwy_mask_grow-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_mask_grow-24.crush.png"; then mv -f "gwy_mask_grow-24.crush.png" "gwy_mask_grow-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_mask_intersect-24.png: $(srcdir)/src/gwy_mask_intersect-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_mask_intersect-24.png" --file="$(srcdir)/src/gwy_mask_intersect-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_mask_intersect-24.png" "gwy_mask_intersect-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_mask_intersect-24.crush.png"; then mv -f "gwy_mask_intersect-24.crush.png" "gwy_mask_intersect-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_mask_invert-24.png: $(srcdir)/src/gwy_mask_invert-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_mask_invert-24.png" --file="$(srcdir)/src/gwy_mask_invert-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_mask_invert-24.png" "gwy_mask_invert-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_mask_invert-24.crush.png"; then mv -f "gwy_mask_invert-24.crush.png" "gwy_mask_invert-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_mask_line-24.png: $(srcdir)/src/gwy_mask_line-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_mask_line-24.png" --file="$(srcdir)/src/gwy_mask_line-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_mask_line-24.png" "gwy_mask_line-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_mask_line-24.crush.png"; then mv -f "gwy_mask_line-24.crush.png" "gwy_mask_line-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_mask_morph-24.png: $(srcdir)/src/gwy_mask_morph-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_mask_morph-24.png" --file="$(srcdir)/src/gwy_mask_morph-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_mask_morph-24.png" "gwy_mask_morph-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_mask_morph-24.crush.png"; then mv -f "gwy_mask_morph-24.crush.png" "gwy_mask_morph-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_mask_paint_draw-24.png: $(srcdir)/src/gwy_mask_paint_draw-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_mask_paint_draw-24.png" --file="$(srcdir)/src/gwy_mask_paint_draw-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_mask_paint_draw-24.png" "gwy_mask_paint_draw-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_mask_paint_draw-24.crush.png"; then mv -f "gwy_mask_paint_draw-24.crush.png" "gwy_mask_paint_draw-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_mask_paint_erase-24.png: $(srcdir)/src/gwy_mask_paint_erase-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_mask_paint_erase-24.png" --file="$(srcdir)/src/gwy_mask_paint_erase-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_mask_paint_erase-24.png" "gwy_mask_paint_erase-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_mask_paint_erase-24.crush.png"; then mv -f "gwy_mask_paint_erase-24.crush.png" "gwy_mask_paint_erase-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_mask_rect_exclusive-24.png: $(srcdir)/src/gwy_mask_rect_exclusive-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_mask_rect_exclusive-24.png" --file="$(srcdir)/src/gwy_mask_rect_exclusive-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_mask_rect_exclusive-24.png" "gwy_mask_rect_exclusive-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_mask_rect_exclusive-24.crush.png"; then mv -f "gwy_mask_rect_exclusive-24.crush.png" "gwy_mask_rect_exclusive-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_mask_rect_inclusive-24.png: $(srcdir)/src/gwy_mask_rect_inclusive-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_mask_rect_inclusive-24.png" --file="$(srcdir)/src/gwy_mask_rect_inclusive-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_mask_rect_inclusive-24.png" "gwy_mask_rect_inclusive-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_mask_rect_inclusive-24.crush.png"; then mv -f "gwy_mask_rect_inclusive-24.crush.png" "gwy_mask_rect_inclusive-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_mask_remove-24.png: $(srcdir)/src/gwy_mask_remove-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_mask_remove-24.png" --file="$(srcdir)/src/gwy_mask_remove-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_mask_remove-24.png" "gwy_mask_remove-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_mask_remove-24.crush.png"; then mv -f "gwy_mask_remove-24.crush.png" "gwy_mask_remove-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_mask_set-24.png: $(srcdir)/src/gwy_mask_set-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_mask_set-24.png" --file="$(srcdir)/src/gwy_mask_set-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_mask_set-24.png" "gwy_mask_set-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_mask_set-24.crush.png"; then mv -f "gwy_mask_set-24.crush.png" "gwy_mask_set-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_mask_shrink-24.png: $(srcdir)/src/gwy_mask_shrink-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_mask_shrink-24.png" --file="$(srcdir)/src/gwy_mask_shrink-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_mask_shrink-24.png" "gwy_mask_shrink-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_mask_shrink-24.crush.png"; then mv -f "gwy_mask_shrink-24.crush.png" "gwy_mask_shrink-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_mask_subtract-24.png: $(srcdir)/src/gwy_mask_subtract-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_mask_subtract-24.png" --file="$(srcdir)/src/gwy_mask_subtract-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_mask_subtract-24.png" "gwy_mask_subtract-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_mask_subtract-24.crush.png"; then mv -f "gwy_mask_subtract-24.crush.png" "gwy_mask_subtract-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_mask_thin-24.png: $(srcdir)/src/gwy_mask_thin-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_mask_thin-24.png" --file="$(srcdir)/src/gwy_mask_thin-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_mask_thin-24.png" "gwy_mask_thin-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_mask_thin-24.crush.png"; then mv -f "gwy_mask_thin-24.crush.png" "gwy_mask_thin-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_measure_lattice-24.png: $(srcdir)/src/gwy_measure_lattice-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_measure_lattice-24.png" --file="$(srcdir)/src/gwy_measure_lattice-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_measure_lattice-24.png" "gwy_measure_lattice-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_measure_lattice-24.crush.png"; then mv -f "gwy_measure_lattice-24.crush.png" "gwy_measure_lattice-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_merge-24.png: $(srcdir)/src/gwy_merge-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_merge-24.png" --file="$(srcdir)/src/gwy_merge-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_merge-24.png" "gwy_merge-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_merge-24.crush.png"; then mv -f "gwy_merge-24.crush.png" "gwy_merge-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_more-24.png: $(srcdir)/src/gwy_more-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_more-24.png" --file="$(srcdir)/src/gwy_more-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_more-24.png" "gwy_more-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_more-24.crush.png"; then mv -f "gwy_more-24.crush.png" "gwy_more-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_mutual_crop-24.png: $(srcdir)/src/gwy_mutual_crop-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_mutual_crop-24.png" --file="$(srcdir)/src/gwy_mutual_crop-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_mutual_crop-24.png" "gwy_mutual_crop-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_mutual_crop-24.crush.png"; then mv -f "gwy_mutual_crop-24.crush.png" "gwy_mutual_crop-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_neural_apply-24.png: $(srcdir)/src/gwy_neural_apply-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_neural_apply-24.png" --file="$(srcdir)/src/gwy_neural_apply-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_neural_apply-24.png" "gwy_neural_apply-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_neural_apply-24.crush.png"; then mv -f "gwy_neural_apply-24.crush.png" "gwy_neural_apply-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_neural_train-24.png: $(srcdir)/src/gwy_neural_train-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_neural_train-24.png" --file="$(srcdir)/src/gwy_neural_train-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_neural_train-24.png" "gwy_neural_train-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_neural_train-24.crush.png"; then mv -f "gwy_neural_train-24.crush.png" "gwy_neural_train-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_next-24.png: $(srcdir)/src/gwy_next-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_next-24.png" --file="$(srcdir)/src/gwy_next-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_next-24.png" "gwy_next-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_next-24.crush.png"; then mv -f "gwy_next-24.crush.png" "gwy_next-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_null_offsets-24.png: $(srcdir)/src/gwy_null_offsets-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_null_offsets-24.png" --file="$(srcdir)/src/gwy_null_offsets-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_null_offsets-24.png" "gwy_null_offsets-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_null_offsets-24.crush.png"; then mv -f "gwy_null_offsets-24.crush.png" "gwy_null_offsets-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_palettes-16.png: $(srcdir)/src/gwy_palettes-16.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=16 --export-height=16 --export-png="gwy_palettes-16.png" --file="$(srcdir)/src/gwy_palettes-16.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_palettes-16.png" "gwy_palettes-16.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_palettes-16.crush.png"; then mv -f "gwy_palettes-16.crush.png" "gwy_palettes-16.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_palettes-24.png: $(srcdir)/src/gwy_palettes-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_palettes-24.png" --file="$(srcdir)/src/gwy_palettes-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_palettes-24.png" "gwy_palettes-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_palettes-24.crush.png"; then mv -f "gwy_palettes-24.crush.png" "gwy_palettes-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_path_level-24.png: $(srcdir)/src/gwy_path_level-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_path_level-24.png" --file="$(srcdir)/src/gwy_path_level-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_path_level-24.png" "gwy_path_level-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_path_level-24.crush.png"; then mv -f "gwy_path_level-24.crush.png" "gwy_path_level-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_pointer_measure-24.png: $(srcdir)/src/gwy_pointer_measure-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_pointer_measure-24.png" --file="$(srcdir)/src/gwy_pointer_measure-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_pointer_measure-24.png" "gwy_pointer_measure-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_pointer_measure-24.crush.png"; then mv -f "gwy_pointer_measure-24.crush.png" "gwy_pointer_measure-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_poly_distort-24.png: $(srcdir)/src/gwy_poly_distort-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_poly_distort-24.png" --file="$(srcdir)/src/gwy_poly_distort-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_poly_distort-24.png" "gwy_poly_distort-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_poly_distort-24.crush.png"; then mv -f "gwy_poly_distort-24.crush.png" "gwy_poly_distort-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_polynom-24.png: $(srcdir)/src/gwy_polynom-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_polynom-24.png" --file="$(srcdir)/src/gwy_polynom-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_polynom-24.png" "gwy_polynom-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_polynom-24.crush.png"; then mv -f "gwy_polynom-24.crush.png" "gwy_polynom-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_polynom_level-24.png: $(srcdir)/src/gwy_polynom_level-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_polynom_level-24.png" --file="$(srcdir)/src/gwy_polynom_level-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_polynom_level-24.png" "gwy_polynom_level-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_polynom_level-24.crush.png"; then mv -f "gwy_polynom_level-24.crush.png" "gwy_polynom_level-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_previous-24.png: $(srcdir)/src/gwy_previous-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_previous-24.png" --file="$(srcdir)/src/gwy_previous-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_previous-24.png" "gwy_previous-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_previous-24.crush.png"; then mv -f "gwy_previous-24.crush.png" "gwy_previous-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_profile-24.png: $(srcdir)/src/gwy_profile-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_profile-24.png" --file="$(srcdir)/src/gwy_profile-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_profile-24.png" "gwy_profile-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_profile-24.crush.png"; then mv -f "gwy_profile-24.crush.png" "gwy_profile-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_pygwy-24.png: $(srcdir)/src/gwy_pygwy-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_pygwy-24.png" --file="$(srcdir)/src/gwy_pygwy-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_pygwy-24.png" "gwy_pygwy-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_pygwy-24.crush.png"; then mv -f "gwy_pygwy-24.crush.png" "gwy_pygwy-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_remove_under_mask-24.png: $(srcdir)/src/gwy_remove_under_mask-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_remove_under_mask-24.png" --file="$(srcdir)/src/gwy_remove_under_mask-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_remove_under_mask-24.png" "gwy_remove_under_mask-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_remove_under_mask-24.crush.png"; then mv -f "gwy_remove_under_mask-24.crush.png" "gwy_remove_under_mask-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_rotate-24.png: $(srcdir)/src/gwy_rotate-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_rotate-24.png" --file="$(srcdir)/src/gwy_rotate-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_rotate-24.png" "gwy_rotate-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_rotate-24.crush.png"; then mv -f "gwy_rotate-24.crush.png" "gwy_rotate-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_rotate_180-24.png: $(srcdir)/src/gwy_rotate_180-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_rotate_180-24.png" --file="$(srcdir)/src/gwy_rotate_180-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_rotate_180-24.png" "gwy_rotate_180-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_rotate_180-24.crush.png"; then mv -f "gwy_rotate_180-24.crush.png" "gwy_rotate_180-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_rotate_3d-24.png: $(srcdir)/src/gwy_rotate_3d-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_rotate_3d-24.png" --file="$(srcdir)/src/gwy_rotate_3d-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_rotate_3d-24.png" "gwy_rotate_3d-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_rotate_3d-24.crush.png"; then mv -f "gwy_rotate_3d-24.crush.png" "gwy_rotate_3d-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_rotate_90_ccw-24.png: $(srcdir)/src/gwy_rotate_90_ccw-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_rotate_90_ccw-24.png" --file="$(srcdir)/src/gwy_rotate_90_ccw-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_rotate_90_ccw-24.png" "gwy_rotate_90_ccw-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_rotate_90_ccw-24.crush.png"; then mv -f "gwy_rotate_90_ccw-24.crush.png" "gwy_rotate_90_ccw-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_rotate_90_cw-24.png: $(srcdir)/src/gwy_rotate_90_cw-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_rotate_90_cw-24.png" --file="$(srcdir)/src/gwy_rotate_90_cw-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_rotate_90_cw-24.png" "gwy_rotate_90_cw-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_rotate_90_cw-24.crush.png"; then mv -f "gwy_rotate_90_cw-24.crush.png" "gwy_rotate_90_cw-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_scale-24.png: $(srcdir)/src/gwy_scale-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_scale-24.png" --file="$(srcdir)/src/gwy_scale-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_scale-24.png" "gwy_scale-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_scale-24.crush.png"; then mv -f "gwy_scale-24.crush.png" "gwy_scale-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_scale_horizontally-24.png: $(srcdir)/src/gwy_scale_horizontally-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_scale_horizontally-24.png" --file="$(srcdir)/src/gwy_scale_horizontally-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_scale_horizontally-24.png" "gwy_scale_horizontally-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_scale_horizontally-24.crush.png"; then mv -f "gwy_scale_horizontally-24.crush.png" "gwy_scale_horizontally-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_scale_vertically-24.png: $(srcdir)/src/gwy_scale_vertically-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_scale_vertically-24.png" --file="$(srcdir)/src/gwy_scale_vertically-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_scale_vertically-24.png" "gwy_scale_vertically-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_scale_vertically-24.crush.png"; then mv -f "gwy_scale_vertically-24.crush.png" "gwy_scale_vertically-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_scars-24.png: $(srcdir)/src/gwy_scars-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_scars-24.png" --file="$(srcdir)/src/gwy_scars-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_scars-24.png" "gwy_scars-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_scars-24.crush.png"; then mv -f "gwy_scars-24.crush.png" "gwy_scars-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_selections-24.png: $(srcdir)/src/gwy_selections-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_selections-24.png" --file="$(srcdir)/src/gwy_selections-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_selections-24.png" "gwy_selections-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_selections-24.crush.png"; then mv -f "gwy_selections-24.crush.png" "gwy_selections-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_shader-24.png: $(srcdir)/src/gwy_shader-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_shader-24.png" --file="$(srcdir)/src/gwy_shader-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_shader-24.png" "gwy_shader-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_shader-24.crush.png"; then mv -f "gwy_shader-24.crush.png" "gwy_shader-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_spectrum-24.png: $(srcdir)/src/gwy_spectrum-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_spectrum-24.png" --file="$(srcdir)/src/gwy_spectrum-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_spectrum-24.png" "gwy_spectrum-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_spectrum-24.crush.png"; then mv -f "gwy_spectrum-24.crush.png" "gwy_spectrum-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_spot_remove-24.png: $(srcdir)/src/gwy_spot_remove-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_spot_remove-24.png" --file="$(srcdir)/src/gwy_spot_remove-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_spot_remove-24.png" "gwy_spot_remove-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_spot_remove-24.crush.png"; then mv -f "gwy_spot_remove-24.crush.png" "gwy_spot_remove-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_stat_quantities-24.png: $(srcdir)/src/gwy_stat_quantities-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_stat_quantities-24.png" --file="$(srcdir)/src/gwy_stat_quantities-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_stat_quantities-24.png" "gwy_stat_quantities-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_stat_quantities-24.crush.png"; then mv -f "gwy_stat_quantities-24.crush.png" "gwy_stat_quantities-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_straighten_path-24.png: $(srcdir)/src/gwy_straighten_path-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_straighten_path-24.png" --file="$(srcdir)/src/gwy_straighten_path-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_straighten_path-24.png" "gwy_straighten_path-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_straighten_path-24.crush.png"; then mv -f "gwy_straighten_path-24.crush.png" "gwy_straighten_path-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_subscript-20.png: $(srcdir)/src/gwy_subscript-20.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=20 --export-height=20 --export-png="gwy_subscript-20.png" --file="$(srcdir)/src/gwy_subscript-20.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_subscript-20.png" "gwy_subscript-20.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_subscript-20.crush.png"; then mv -f "gwy_subscript-20.crush.png" "gwy_subscript-20.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_superscript-20.png: $(srcdir)/src/gwy_superscript-20.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=20 --export-height=20 --export-png="gwy_superscript-20.png" --file="$(srcdir)/src/gwy_superscript-20.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_superscript-20.png" "gwy_superscript-20.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_superscript-20.crush.png"; then mv -f "gwy_superscript-20.crush.png" "gwy_superscript-20.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_synthetic_ballistic_deposition-24.png: $(srcdir)/src/gwy_synthetic_ballistic_deposition-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_synthetic_ballistic_deposition-24.png" --file="$(srcdir)/src/gwy_synthetic_ballistic_deposition-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_synthetic_ballistic_deposition-24.png" "gwy_synthetic_ballistic_deposition-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_synthetic_ballistic_deposition-24.crush.png"; then mv -f "gwy_synthetic_ballistic_deposition-24.crush.png" "gwy_synthetic_ballistic_deposition-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_synthetic_brownian_motion-24.png: $(srcdir)/src/gwy_synthetic_brownian_motion-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_synthetic_brownian_motion-24.png" --file="$(srcdir)/src/gwy_synthetic_brownian_motion-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_synthetic_brownian_motion-24.png" "gwy_synthetic_brownian_motion-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_synthetic_brownian_motion-24.crush.png"; then mv -f "gwy_synthetic_brownian_motion-24.crush.png" "gwy_synthetic_brownian_motion-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_synthetic_columnar-24.png: $(srcdir)/src/gwy_synthetic_columnar-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_synthetic_columnar-24.png" --file="$(srcdir)/src/gwy_synthetic_columnar-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_synthetic_columnar-24.png" "gwy_synthetic_columnar-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_synthetic_columnar-24.crush.png"; then mv -f "gwy_synthetic_columnar-24.crush.png" "gwy_synthetic_columnar-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_synthetic_diffusion-24.png: $(srcdir)/src/gwy_synthetic_diffusion-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_synthetic_diffusion-24.png" --file="$(srcdir)/src/gwy_synthetic_diffusion-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_synthetic_diffusion-24.png" "gwy_synthetic_diffusion-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_synthetic_diffusion-24.crush.png"; then mv -f "gwy_synthetic_diffusion-24.crush.png" "gwy_synthetic_diffusion-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_synthetic_domains-24.png: $(srcdir)/src/gwy_synthetic_domains-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_synthetic_domains-24.png" --file="$(srcdir)/src/gwy_synthetic_domains-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_synthetic_domains-24.png" "gwy_synthetic_domains-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_synthetic_domains-24.crush.png"; then mv -f "gwy_synthetic_domains-24.crush.png" "gwy_synthetic_domains-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_synthetic_fibres-24.png: $(srcdir)/src/gwy_synthetic_fibres-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_synthetic_fibres-24.png" --file="$(srcdir)/src/gwy_synthetic_fibres-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_synthetic_fibres-24.png" "gwy_synthetic_fibres-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_synthetic_fibres-24.crush.png"; then mv -f "gwy_synthetic_fibres-24.crush.png" "gwy_synthetic_fibres-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_synthetic_lattice-24.png: $(srcdir)/src/gwy_synthetic_lattice-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_synthetic_lattice-24.png" --file="$(srcdir)/src/gwy_synthetic_lattice-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_synthetic_lattice-24.png" "gwy_synthetic_lattice-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_synthetic_lattice-24.crush.png"; then mv -f "gwy_synthetic_lattice-24.crush.png" "gwy_synthetic_lattice-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_synthetic_line_noise-24.png: $(srcdir)/src/gwy_synthetic_line_noise-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_synthetic_line_noise-24.png" --file="$(srcdir)/src/gwy_synthetic_line_noise-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_synthetic_line_noise-24.png" "gwy_synthetic_line_noise-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_synthetic_line_noise-24.crush.png"; then mv -f "gwy_synthetic_line_noise-24.crush.png" "gwy_synthetic_line_noise-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_synthetic_noise-24.png: $(srcdir)/src/gwy_synthetic_noise-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_synthetic_noise-24.png" --file="$(srcdir)/src/gwy_synthetic_noise-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_synthetic_noise-24.png" "gwy_synthetic_noise-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_synthetic_noise-24.crush.png"; then mv -f "gwy_synthetic_noise-24.crush.png" "gwy_synthetic_noise-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_synthetic_objects-24.png: $(srcdir)/src/gwy_synthetic_objects-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_synthetic_objects-24.png" --file="$(srcdir)/src/gwy_synthetic_objects-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_synthetic_objects-24.png" "gwy_synthetic_objects-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_synthetic_objects-24.crush.png"; then mv -f "gwy_synthetic_objects-24.crush.png" "gwy_synthetic_objects-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_synthetic_particles-24.png: $(srcdir)/src/gwy_synthetic_particles-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_synthetic_particles-24.png" --file="$(srcdir)/src/gwy_synthetic_particles-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_synthetic_particles-24.png" "gwy_synthetic_particles-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_synthetic_particles-24.crush.png"; then mv -f "gwy_synthetic_particles-24.crush.png" "gwy_synthetic_particles-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_synthetic_pattern-24.png: $(srcdir)/src/gwy_synthetic_pattern-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_synthetic_pattern-24.png" --file="$(srcdir)/src/gwy_synthetic_pattern-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_synthetic_pattern-24.png" "gwy_synthetic_pattern-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_synthetic_pattern-24.crush.png"; then mv -f "gwy_synthetic_pattern-24.crush.png" "gwy_synthetic_pattern-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_synthetic_phases-24.png: $(srcdir)/src/gwy_synthetic_phases-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_synthetic_phases-24.png" --file="$(srcdir)/src/gwy_synthetic_phases-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_synthetic_phases-24.png" "gwy_synthetic_phases-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_synthetic_phases-24.crush.png"; then mv -f "gwy_synthetic_phases-24.crush.png" "gwy_synthetic_phases-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_synthetic_spectral-24.png: $(srcdir)/src/gwy_synthetic_spectral-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_synthetic_spectral-24.png" --file="$(srcdir)/src/gwy_synthetic_spectral-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_synthetic_spectral-24.png" "gwy_synthetic_spectral-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_synthetic_spectral-24.crush.png"; then mv -f "gwy_synthetic_spectral-24.crush.png" "gwy_synthetic_spectral-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_synthetic_waves-24.png: $(srcdir)/src/gwy_synthetic_waves-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_synthetic_waves-24.png" --file="$(srcdir)/src/gwy_synthetic_waves-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_synthetic_waves-24.png" "gwy_synthetic_waves-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_synthetic_waves-24.crush.png"; then mv -f "gwy_synthetic_waves-24.crush.png" "gwy_synthetic_waves-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_tilt-24.png: $(srcdir)/src/gwy_tilt-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_tilt-24.png" --file="$(srcdir)/src/gwy_tilt-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_tilt-24.png" "gwy_tilt-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_tilt-24.crush.png"; then mv -f "gwy_tilt-24.crush.png" "gwy_tilt-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_tip_dilation-24.png: $(srcdir)/src/gwy_tip_dilation-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_tip_dilation-24.png" --file="$(srcdir)/src/gwy_tip_dilation-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_tip_dilation-24.png" "gwy_tip_dilation-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_tip_dilation-24.crush.png"; then mv -f "gwy_tip_dilation-24.crush.png" "gwy_tip_dilation-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_tip_erosion-24.png: $(srcdir)/src/gwy_tip_erosion-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_tip_erosion-24.png" --file="$(srcdir)/src/gwy_tip_erosion-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_tip_erosion-24.png" "gwy_tip_erosion-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_tip_erosion-24.crush.png"; then mv -f "gwy_tip_erosion-24.crush.png" "gwy_tip_erosion-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_tip_estimation-24.png: $(srcdir)/src/gwy_tip_estimation-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_tip_estimation-24.png" --file="$(srcdir)/src/gwy_tip_estimation-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_tip_estimation-24.png" "gwy_tip_estimation-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_tip_estimation-24.crush.png"; then mv -f "gwy_tip_estimation-24.crush.png" "gwy_tip_estimation-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_tip_indent_analyze-24.png: $(srcdir)/src/gwy_tip_indent_analyze-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_tip_indent_analyze-24.png" --file="$(srcdir)/src/gwy_tip_indent_analyze-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_tip_indent_analyze-24.png" "gwy_tip_indent_analyze-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_tip_indent_analyze-24.crush.png"; then mv -f "gwy_tip_indent_analyze-24.crush.png" "gwy_tip_indent_analyze-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_tip_lateral_force-24.png: $(srcdir)/src/gwy_tip_lateral_force-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_tip_lateral_force-24.png" --file="$(srcdir)/src/gwy_tip_lateral_force-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_tip_lateral_force-24.png" "gwy_tip_lateral_force-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_tip_lateral_force-24.crush.png"; then mv -f "gwy_tip_lateral_force-24.crush.png" "gwy_tip_lateral_force-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_tip_map-24.png: $(srcdir)/src/gwy_tip_map-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_tip_map-24.png" --file="$(srcdir)/src/gwy_tip_map-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_tip_map-24.png" "gwy_tip_map-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_tip_map-24.crush.png"; then mv -f "gwy_tip_map-24.crush.png" "gwy_tip_map-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_tip_model-24.png: $(srcdir)/src/gwy_tip_model-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_tip_model-24.png" --file="$(srcdir)/src/gwy_tip_model-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_tip_model-24.png" "gwy_tip_model-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_tip_model-24.crush.png"; then mv -f "gwy_tip_model-24.crush.png" "gwy_tip_model-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_tip_pid-24.png: $(srcdir)/src/gwy_tip_pid-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_tip_pid-24.png" --file="$(srcdir)/src/gwy_tip_pid-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_tip_pid-24.png" "gwy_tip_pid-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_tip_pid-24.crush.png"; then mv -f "gwy_tip_pid-24.crush.png" "gwy_tip_pid-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_unrotate-24.png: $(srcdir)/src/gwy_unrotate-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_unrotate-24.png" --file="$(srcdir)/src/gwy_unrotate-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_unrotate-24.png" "gwy_unrotate-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_unrotate-24.crush.png"; then mv -f "gwy_unrotate-24.crush.png" "gwy_unrotate-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_value_invert-24.png: $(srcdir)/src/gwy_value_invert-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_value_invert-24.png" --file="$(srcdir)/src/gwy_value_invert-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_value_invert-24.png" "gwy_value_invert-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_value_invert-24.crush.png"; then mv -f "gwy_value_invert-24.crush.png" "gwy_value_invert-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_volume-24.png: $(srcdir)/src/gwy_volume-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_volume-24.png" --file="$(srcdir)/src/gwy_volume-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_volume-24.png" "gwy_volume-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_volume-24.crush.png"; then mv -f "gwy_volume-24.crush.png" "gwy_volume-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_volume_calibrate-24.png: $(srcdir)/src/gwy_volume_calibrate-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_volume_calibrate-24.png" --file="$(srcdir)/src/gwy_volume_calibrate-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_volume_calibrate-24.png" "gwy_volume_calibrate-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_volume_calibrate-24.crush.png"; then mv -f "gwy_volume_calibrate-24.crush.png" "gwy_volume_calibrate-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_volume_dimensions-24.png: $(srcdir)/src/gwy_volume_dimensions-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_volume_dimensions-24.png" --file="$(srcdir)/src/gwy_volume_dimensions-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_volume_dimensions-24.png" "gwy_volume_dimensions-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_volume_dimensions-24.crush.png"; then mv -f "gwy_volume_dimensions-24.crush.png" "gwy_volume_dimensions-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_volume_fd-24.png: $(srcdir)/src/gwy_volume_fd-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_volume_fd-24.png" --file="$(srcdir)/src/gwy_volume_fd-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_volume_fd-24.png" "gwy_volume_fd-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_volume_fd-24.crush.png"; then mv -f "gwy_volume_fd-24.crush.png" "gwy_volume_fd-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_volume_invert-24.png: $(srcdir)/src/gwy_volume_invert-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_volume_invert-24.png" --file="$(srcdir)/src/gwy_volume_invert-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_volume_invert-24.png" "gwy_volume_invert-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_volume_invert-24.crush.png"; then mv -f "gwy_volume_invert-24.crush.png" "gwy_volume_invert-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_volume_kmeans-24.png: $(srcdir)/src/gwy_volume_kmeans-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_volume_kmeans-24.png" --file="$(srcdir)/src/gwy_volume_kmeans-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_volume_kmeans-24.png" "gwy_volume_kmeans-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_volume_kmeans-24.crush.png"; then mv -f "gwy_volume_kmeans-24.crush.png" "gwy_volume_kmeans-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_volume_kmedians-24.png: $(srcdir)/src/gwy_volume_kmedians-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_volume_kmedians-24.png" --file="$(srcdir)/src/gwy_volume_kmedians-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_volume_kmedians-24.png" "gwy_volume_kmedians-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_volume_kmedians-24.crush.png"; then mv -f "gwy_volume_kmedians-24.crush.png" "gwy_volume_kmedians-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_volume_slice-24.png: $(srcdir)/src/gwy_volume_slice-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_volume_slice-24.png" --file="$(srcdir)/src/gwy_volume_slice-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_volume_slice-24.png" "gwy_volume_slice-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_volume_slice-24.crush.png"; then mv -f "gwy_volume_slice-24.crush.png" "gwy_volume_slice-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_volumize-24.png: $(srcdir)/src/gwy_volumize-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_volumize-24.png" --file="$(srcdir)/src/gwy_volumize-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_volumize-24.png" "gwy_volumize-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_volumize-24.crush.png"; then mv -f "gwy_volumize-24.crush.png" "gwy_volumize-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_volumize_layers-24.png: $(srcdir)/src/gwy_volumize_layers-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_volumize_layers-24.png" --file="$(srcdir)/src/gwy_volumize_layers-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_volumize_layers-24.png" "gwy_volumize_layers-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_volumize_layers-24.crush.png"; then mv -f "gwy_volumize_layers-24.crush.png" "gwy_volumize_layers-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_xy_denoise-24.png: $(srcdir)/src/gwy_xy_denoise-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_xy_denoise-24.png" --file="$(srcdir)/src/gwy_xy_denoise-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_xy_denoise-24.png" "gwy_xy_denoise-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_xy_denoise-24.crush.png"; then mv -f "gwy_xy_denoise-24.crush.png" "gwy_xy_denoise-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_zero_mean-24.png: $(srcdir)/src/gwy_zero_mean-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_zero_mean-24.png" --file="$(srcdir)/src/gwy_zero_mean-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_zero_mean-24.png" "gwy_zero_mean-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_zero_mean-24.crush.png"; then mv -f "gwy_zero_mean-24.crush.png" "gwy_zero_mean-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_zoom_1_1-24.png: $(srcdir)/src/gwy_zoom_1_1-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_zoom_1_1-24.png" --file="$(srcdir)/src/gwy_zoom_1_1-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_zoom_1_1-24.png" "gwy_zoom_1_1-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_zoom_1_1-24.crush.png"; then mv -f "gwy_zoom_1_1-24.crush.png" "gwy_zoom_1_1-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_zoom_fit-24.png: $(srcdir)/src/gwy_zoom_fit-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_zoom_fit-24.png" --file="$(srcdir)/src/gwy_zoom_fit-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_zoom_fit-24.png" "gwy_zoom_fit-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_zoom_fit-24.crush.png"; then mv -f "gwy_zoom_fit-24.crush.png" "gwy_zoom_fit-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_zoom_in-24.png: $(srcdir)/src/gwy_zoom_in-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_zoom_in-24.png" --file="$(srcdir)/src/gwy_zoom_in-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_zoom_in-24.png" "gwy_zoom_in-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_zoom_in-24.crush.png"; then mv -f "gwy_zoom_in-24.crush.png" "gwy_zoom_in-24.png"; fi
+
+ at MAINTAINER_MODE_TRUE@gwy_zoom_out-24.png: $(srcdir)/src/gwy_zoom_out-24.svg
+ at MAINTAINER_MODE_TRUE@ $(INKSCAPE_RENDER_PNG) --export-width=24 --export-height=24 --export-png="gwy_zoom_out-24.png" --file="$(srcdir)/src/gwy_zoom_out-24.svg"
+ at MAINTAINER_MODE_TRUE@ $(PNGCRUSH) -q -brute "gwy_zoom_out-24.png" "gwy_zoom_out-24.crush.png"
+ at MAINTAINER_MODE_TRUE@ if test -s "gwy_zoom_out-24.crush.png"; then mv -f "gwy_zoom_out-24.crush.png" "gwy_zoom_out-24.png"; fi
+# @@@ GENERATED STOCK LIST END @@@
+
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
diff --git a/pixmaps/gwy_3d_base-24.png b/pixmaps/gwy_3d_base-24.png
index e401b4c..6f5f143 100644
Binary files a/pixmaps/gwy_3d_base-24.png and b/pixmaps/gwy_3d_base-24.png differ
diff --git a/pixmaps/gwy_arithmetic-24.png b/pixmaps/gwy_arithmetic-24.png
index 1f5fa6f..5c44344 100644
Binary files a/pixmaps/gwy_arithmetic-24.png and b/pixmaps/gwy_arithmetic-24.png differ
diff --git a/pixmaps/gwy_arithmetic-24.xcf b/pixmaps/gwy_arithmetic-24.xcf
deleted file mode 100644
index 45e9e07..0000000
Binary files a/pixmaps/gwy_arithmetic-24.xcf and /dev/null differ
diff --git a/pixmaps/gwy_bold-20.png b/pixmaps/gwy_bold-20.png
index 547d29b..d3e0d70 100644
Binary files a/pixmaps/gwy_bold-20.png and b/pixmaps/gwy_bold-20.png differ
diff --git a/pixmaps/gwy_cantilever-24.png b/pixmaps/gwy_cantilever-24.png
index 9540e6a..5a31698 100644
Binary files a/pixmaps/gwy_cantilever-24.png and b/pixmaps/gwy_cantilever-24.png differ
diff --git a/pixmaps/gwy_cantilever-24.xcf b/pixmaps/gwy_cantilever-24.xcf
deleted file mode 100644
index 521cbf6..0000000
Binary files a/pixmaps/gwy_cantilever-24.xcf and /dev/null differ
diff --git a/pixmaps/gwy_color_range-24.png b/pixmaps/gwy_color_range-24.png
index c86d1b2..b2de5e6 100644
Binary files a/pixmaps/gwy_color_range-24.png and b/pixmaps/gwy_color_range-24.png differ
diff --git a/pixmaps/gwy_color_range-24.xcf b/pixmaps/gwy_color_range-24.xcf
deleted file mode 100644
index 4e3cd93..0000000
Binary files a/pixmaps/gwy_color_range-24.xcf and /dev/null differ
diff --git a/pixmaps/gwy_color_range_adaptive-24.png b/pixmaps/gwy_color_range_adaptive-24.png
index a13f95a..5425360 100644
Binary files a/pixmaps/gwy_color_range_adaptive-24.png and b/pixmaps/gwy_color_range_adaptive-24.png differ
diff --git a/pixmaps/gwy_color_range_auto-24.png b/pixmaps/gwy_color_range_auto-24.png
index b6b1102..81e5b8b 100644
Binary files a/pixmaps/gwy_color_range_auto-24.png and b/pixmaps/gwy_color_range_auto-24.png differ
diff --git a/pixmaps/gwy_color_range_fixed-24.png b/pixmaps/gwy_color_range_fixed-24.png
index 5a3c5ac..6eb4a09 100644
Binary files a/pixmaps/gwy_color_range_fixed-24.png and b/pixmaps/gwy_color_range_fixed-24.png differ
diff --git a/pixmaps/gwy_color_range_full-24.png b/pixmaps/gwy_color_range_full-24.png
index db2c219..f2039c4 100644
Binary files a/pixmaps/gwy_color_range_full-24.png and b/pixmaps/gwy_color_range_full-24.png differ
diff --git a/pixmaps/gwy_convolution-24.png b/pixmaps/gwy_convolution-24.png
index c2834c0..df7a926 100644
Binary files a/pixmaps/gwy_convolution-24.png and b/pixmaps/gwy_convolution-24.png differ
diff --git a/pixmaps/gwy_correct_affine-24.png b/pixmaps/gwy_correct_affine-24.png
index d7af10e..b0c0490 100644
Binary files a/pixmaps/gwy_correct_affine-24.png and b/pixmaps/gwy_correct_affine-24.png differ
diff --git a/pixmaps/gwy_correlation_mask-24.png b/pixmaps/gwy_correlation_mask-24.png
new file mode 100644
index 0000000..fac36f4
Binary files /dev/null and b/pixmaps/gwy_correlation_mask-24.png differ
diff --git a/pixmaps/gwy_crop-24.png b/pixmaps/gwy_crop-24.png
index 34137a9..69f5112 100644
Binary files a/pixmaps/gwy_crop-24.png and b/pixmaps/gwy_crop-24.png differ
diff --git a/pixmaps/gwy_crop-24.xcf b/pixmaps/gwy_crop-24.xcf
deleted file mode 100644
index eb697a8..0000000
Binary files a/pixmaps/gwy_crop-24.xcf and /dev/null differ
diff --git a/pixmaps/gwy_cwt-24.png b/pixmaps/gwy_cwt-24.png
index de2ae1b..abc8b1f 100644
Binary files a/pixmaps/gwy_cwt-24.png and b/pixmaps/gwy_cwt-24.png differ
diff --git a/pixmaps/gwy_data_measure-24.png b/pixmaps/gwy_data_measure-24.png
index b2bfd9b..f146f37 100644
Binary files a/pixmaps/gwy_data_measure-24.png and b/pixmaps/gwy_data_measure-24.png differ
diff --git a/pixmaps/gwy_direction-24.xcf b/pixmaps/gwy_direction-24.xcf
deleted file mode 100644
index 81b8781..0000000
Binary files a/pixmaps/gwy_direction-24.xcf and /dev/null differ
diff --git a/pixmaps/gwy_disconnected-24.png b/pixmaps/gwy_disconnected-24.png
new file mode 100644
index 0000000..4a7be6b
Binary files /dev/null and b/pixmaps/gwy_disconnected-24.png differ
diff --git a/pixmaps/gwy_distance-24.png b/pixmaps/gwy_distance-24.png
index 16ec0e2..a0d3d53 100644
Binary files a/pixmaps/gwy_distance-24.png and b/pixmaps/gwy_distance-24.png differ
diff --git a/pixmaps/gwy_distance_transform-24.png b/pixmaps/gwy_distance_transform-24.png
index dbc766c..035196b 100644
Binary files a/pixmaps/gwy_distance_transform-24.png and b/pixmaps/gwy_distance_transform-24.png differ
diff --git a/pixmaps/gwy_distribution_angle-24.png b/pixmaps/gwy_distribution_angle-24.png
index 4ad82c9..330004a 100644
Binary files a/pixmaps/gwy_distribution_angle-24.png and b/pixmaps/gwy_distribution_angle-24.png differ
diff --git a/pixmaps/gwy_distribution_slope-24.png b/pixmaps/gwy_distribution_slope-24.png
index 86a891e..ac2ef7e 100644
Binary files a/pixmaps/gwy_distribution_slope-24.png and b/pixmaps/gwy_distribution_slope-24.png differ
diff --git a/pixmaps/gwy_drift-24.png b/pixmaps/gwy_drift-24.png
index 1661032..51472c1 100644
Binary files a/pixmaps/gwy_drift-24.png and b/pixmaps/gwy_drift-24.png differ
diff --git a/pixmaps/gwy_dwt-24.png b/pixmaps/gwy_dwt-24.png
index 92f8059..8424682 100644
Binary files a/pixmaps/gwy_dwt-24.png and b/pixmaps/gwy_dwt-24.png differ
diff --git a/pixmaps/gwy_edge-24.png b/pixmaps/gwy_edge-24.png
index be816b1..9b6937c 100644
Binary files a/pixmaps/gwy_edge-24.png and b/pixmaps/gwy_edge-24.png differ
diff --git a/pixmaps/gwy_edge-24.xcf b/pixmaps/gwy_edge-24.xcf
deleted file mode 100644
index cf81845..0000000
Binary files a/pixmaps/gwy_edge-24.xcf and /dev/null differ
diff --git a/pixmaps/gwy_enforce_distribution-24.png b/pixmaps/gwy_enforce_distribution-24.png
index 6912bf2..7152df2 100644
Binary files a/pixmaps/gwy_enforce_distribution-24.png and b/pixmaps/gwy_enforce_distribution-24.png differ
diff --git a/pixmaps/gwy_entropy-24.png b/pixmaps/gwy_entropy-24.png
index c3b0027..baaae0a 100644
Binary files a/pixmaps/gwy_entropy-24.png and b/pixmaps/gwy_entropy-24.png differ
diff --git a/pixmaps/gwy_extend-24.png b/pixmaps/gwy_extend-24.png
index ab46f12..dd9abce 100644
Binary files a/pixmaps/gwy_extend-24.png and b/pixmaps/gwy_extend-24.png differ
diff --git a/pixmaps/gwy_extract_path-24.png b/pixmaps/gwy_extract_path-24.png
index 7609af4..3929ae9 100644
Binary files a/pixmaps/gwy_extract_path-24.png and b/pixmaps/gwy_extract_path-24.png differ
diff --git a/pixmaps/gwy_extract_path-24.xcf b/pixmaps/gwy_extract_path-24.xcf
deleted file mode 100644
index 972370f..0000000
Binary files a/pixmaps/gwy_extract_path-24.xcf and /dev/null differ
diff --git a/pixmaps/gwy_facet_level-24.png b/pixmaps/gwy_facet_level-24.png
index ddb9e71..e16dd0b 100644
Binary files a/pixmaps/gwy_facet_level-24.png and b/pixmaps/gwy_facet_level-24.png differ
diff --git a/pixmaps/gwy_favourite-24.png b/pixmaps/gwy_favourite-24.png
index ee6b598..a097321 100644
Binary files a/pixmaps/gwy_favourite-24.png and b/pixmaps/gwy_favourite-24.png differ
diff --git a/pixmaps/gwy_favourite-24.xcf b/pixmaps/gwy_favourite-24.xcf
deleted file mode 100644
index 96c4b18..0000000
Binary files a/pixmaps/gwy_favourite-24.xcf and /dev/null differ
diff --git a/pixmaps/gwy_fft-24.png b/pixmaps/gwy_fft-24.png
index 0fa3b30..ed6fb92 100644
Binary files a/pixmaps/gwy_fft-24.png and b/pixmaps/gwy_fft-24.png differ
diff --git a/pixmaps/gwy_fft-24.xcf b/pixmaps/gwy_fft-24.xcf
deleted file mode 100644
index 44e053c..0000000
Binary files a/pixmaps/gwy_fft-24.xcf and /dev/null differ
diff --git a/pixmaps/gwy_fft_2d-24.png b/pixmaps/gwy_fft_2d-24.png
index 1d0565c..895582a 100644
Binary files a/pixmaps/gwy_fft_2d-24.png and b/pixmaps/gwy_fft_2d-24.png differ
diff --git a/pixmaps/gwy_fft_filter_1d-24.png b/pixmaps/gwy_fft_filter_1d-24.png
new file mode 100644
index 0000000..d123ffd
Binary files /dev/null and b/pixmaps/gwy_fft_filter_1d-24.png differ
diff --git a/pixmaps/gwy_fft_filter_2d-24.png b/pixmaps/gwy_fft_filter_2d-24.png
index 898f74f..78cdfd8 100644
Binary files a/pixmaps/gwy_fft_filter_2d-24.png and b/pixmaps/gwy_fft_filter_2d-24.png differ
diff --git a/pixmaps/gwy_filter-24.png b/pixmaps/gwy_filter-24.png
index 907adce..51b2792 100644
Binary files a/pixmaps/gwy_filter-24.png and b/pixmaps/gwy_filter-24.png differ
diff --git a/pixmaps/gwy_filter-24.xcf b/pixmaps/gwy_filter-24.xcf
deleted file mode 100644
index e74265e..0000000
Binary files a/pixmaps/gwy_filter-24.xcf and /dev/null differ
diff --git a/pixmaps/gwy_find_peaks-24.png b/pixmaps/gwy_find_peaks-24.png
index 548aa29..dabc05e 100644
Binary files a/pixmaps/gwy_find_peaks-24.png and b/pixmaps/gwy_find_peaks-24.png differ
diff --git a/pixmaps/gwy_fit_shape-24.png b/pixmaps/gwy_fit_shape-24.png
new file mode 100644
index 0000000..222fdcf
Binary files /dev/null and b/pixmaps/gwy_fit_shape-24.png differ
diff --git a/pixmaps/gwy_fix_zero-24.png b/pixmaps/gwy_fix_zero-24.png
index 2ff6836..a9c36e4 100644
Binary files a/pixmaps/gwy_fix_zero-24.png and b/pixmaps/gwy_fix_zero-24.png differ
diff --git a/pixmaps/gwy_flip_horizontally-24.png b/pixmaps/gwy_flip_horizontally-24.png
index 1b2a999..4a3e8ed 100644
Binary files a/pixmaps/gwy_flip_horizontally-24.png and b/pixmaps/gwy_flip_horizontally-24.png differ
diff --git a/pixmaps/gwy_flip_horizontally-24.xcf b/pixmaps/gwy_flip_horizontally-24.xcf
deleted file mode 100644
index e6b49de..0000000
Binary files a/pixmaps/gwy_flip_horizontally-24.xcf and /dev/null differ
diff --git a/pixmaps/gwy_flip_vertically-24.png b/pixmaps/gwy_flip_vertically-24.png
index d5f3d44..3169edb 100644
Binary files a/pixmaps/gwy_flip_vertically-24.png and b/pixmaps/gwy_flip_vertically-24.png differ
diff --git a/pixmaps/gwy_flip_vertically-24.xcf b/pixmaps/gwy_flip_vertically-24.xcf
deleted file mode 100644
index 0a15a0c..0000000
Binary files a/pixmaps/gwy_flip_vertically-24.xcf and /dev/null differ
diff --git a/pixmaps/gwy_fractal-24.png b/pixmaps/gwy_fractal-24.png
index a5020fe..11635e5 100644
Binary files a/pixmaps/gwy_fractal-24.png and b/pixmaps/gwy_fractal-24.png differ
diff --git a/pixmaps/gwy_fractal_correction-24.png b/pixmaps/gwy_fractal_correction-24.png
new file mode 100644
index 0000000..62a93ff
Binary files /dev/null and b/pixmaps/gwy_fractal_correction-24.png differ
diff --git a/pixmaps/gwy_fractal_measure-24.png b/pixmaps/gwy_fractal_measure-24.png
new file mode 100644
index 0000000..69eb8f8
Binary files /dev/null and b/pixmaps/gwy_fractal_measure-24.png differ
diff --git a/pixmaps/gwy_gl_material-16.png b/pixmaps/gwy_gl_material-16.png
index 01d8395..d8d6dee 100644
Binary files a/pixmaps/gwy_gl_material-16.png and b/pixmaps/gwy_gl_material-16.png differ
diff --git a/pixmaps/gwy_gl_material-16.xcf b/pixmaps/gwy_gl_material-16.xcf
deleted file mode 100644
index c72e80b..0000000
Binary files a/pixmaps/gwy_gl_material-16.xcf and /dev/null differ
diff --git a/pixmaps/gwy_gradient-24.xcf b/pixmaps/gwy_gradient-24.xcf
deleted file mode 100644
index 2a0c5f8..0000000
Binary files a/pixmaps/gwy_gradient-24.xcf and /dev/null differ
diff --git a/pixmaps/gwy_gradient_horizontal-24.png b/pixmaps/gwy_gradient_horizontal-24.png
index 0cbf614..0a7fdc9 100644
Binary files a/pixmaps/gwy_gradient_horizontal-24.png and b/pixmaps/gwy_gradient_horizontal-24.png differ
diff --git a/pixmaps/gwy_gradient_vertical-24.png b/pixmaps/gwy_gradient_vertical-24.png
index 39bf6bc..efbb7d8 100644
Binary files a/pixmaps/gwy_gradient_vertical-24.png and b/pixmaps/gwy_gradient_vertical-24.png differ
diff --git a/pixmaps/gwy_grain_correlation-24.png b/pixmaps/gwy_grain_correlation-24.png
index 0889d2d..44c6577 100644
Binary files a/pixmaps/gwy_grain_correlation-24.png and b/pixmaps/gwy_grain_correlation-24.png differ
diff --git a/pixmaps/gwy_grain_exscribed_circle-24.png b/pixmaps/gwy_grain_exscribed_circle-24.png
index ad5cbba..def1093 100644
Binary files a/pixmaps/gwy_grain_exscribed_circle-24.png and b/pixmaps/gwy_grain_exscribed_circle-24.png differ
diff --git a/pixmaps/gwy_grain_inscribed_circle-24.png b/pixmaps/gwy_grain_inscribed_circle-24.png
index 0d80bd1..eba6ac1 100644
Binary files a/pixmaps/gwy_grain_inscribed_circle-24.png and b/pixmaps/gwy_grain_inscribed_circle-24.png differ
diff --git a/pixmaps/gwy_grains-24.png b/pixmaps/gwy_grains-24.png
index 2d77de1..339081e 100644
Binary files a/pixmaps/gwy_grains-24.png and b/pixmaps/gwy_grains-24.png differ
diff --git a/pixmaps/gwy_grains-24.xcf b/pixmaps/gwy_grains-24.xcf
deleted file mode 100644
index dc0c8d8..0000000
Binary files a/pixmaps/gwy_grains-24.xcf and /dev/null differ
diff --git a/pixmaps/gwy_grains_edge-24.png b/pixmaps/gwy_grains_edge-24.png
index 9620f41..1481114 100644
Binary files a/pixmaps/gwy_grains_edge-24.png and b/pixmaps/gwy_grains_edge-24.png differ
diff --git a/pixmaps/gwy_grains_edge_remove-24.png b/pixmaps/gwy_grains_edge_remove-24.png
index 21666de..51dd823 100644
Binary files a/pixmaps/gwy_grains_edge_remove-24.png and b/pixmaps/gwy_grains_edge_remove-24.png differ
diff --git a/pixmaps/gwy_grains_graph-24.png b/pixmaps/gwy_grains_graph-24.png
index fd453a8..de6b5ed 100644
Binary files a/pixmaps/gwy_grains_graph-24.png and b/pixmaps/gwy_grains_graph-24.png differ
diff --git a/pixmaps/gwy_grains_measure-24.png b/pixmaps/gwy_grains_measure-24.png
index 6991688..594f902 100644
Binary files a/pixmaps/gwy_grains_measure-24.png and b/pixmaps/gwy_grains_measure-24.png differ
diff --git a/pixmaps/gwy_grains_remove-24.png b/pixmaps/gwy_grains_remove-24.png
index f0a57b9..1331f36 100644
Binary files a/pixmaps/gwy_grains_remove-24.png and b/pixmaps/gwy_grains_remove-24.png differ
diff --git a/pixmaps/gwy_grains_water-24.png b/pixmaps/gwy_grains_water-24.png
index c61d533..ce98629 100644
Binary files a/pixmaps/gwy_grains_water-24.png and b/pixmaps/gwy_grains_water-24.png differ
diff --git a/pixmaps/gwy_graph-24.png b/pixmaps/gwy_graph-24.png
index 2311387..08bc1fb 100644
Binary files a/pixmaps/gwy_graph-24.png and b/pixmaps/gwy_graph-24.png differ
diff --git a/pixmaps/gwy_graph-24.xcf b/pixmaps/gwy_graph-24.xcf
deleted file mode 100644
index a34de05..0000000
Binary files a/pixmaps/gwy_graph-24.xcf and /dev/null differ
diff --git a/pixmaps/gwy_graph_align-24.png b/pixmaps/gwy_graph_align-24.png
index e54ccfc..7d5d8ab 100644
Binary files a/pixmaps/gwy_graph_align-24.png and b/pixmaps/gwy_graph_align-24.png differ
diff --git a/pixmaps/gwy_graph_cut-24.png b/pixmaps/gwy_graph_cut-24.png
index e9667bc..afbb068 100644
Binary files a/pixmaps/gwy_graph_cut-24.png and b/pixmaps/gwy_graph_cut-24.png differ
diff --git a/pixmaps/gwy_graph_dos-24.png b/pixmaps/gwy_graph_dos-24.png
index be176ea..0b23839 100644
Binary files a/pixmaps/gwy_graph_dos-24.png and b/pixmaps/gwy_graph_dos-24.png differ
diff --git a/pixmaps/gwy_graph_export_ascii-24.png b/pixmaps/gwy_graph_export_ascii-24.png
index f87cb0e..ebcf1cc 100644
Binary files a/pixmaps/gwy_graph_export_ascii-24.png and b/pixmaps/gwy_graph_export_ascii-24.png differ
diff --git a/pixmaps/gwy_graph_export_png-24.png b/pixmaps/gwy_graph_export_png-24.png
index bc4ecc2..ec0ba64 100644
Binary files a/pixmaps/gwy_graph_export_png-24.png and b/pixmaps/gwy_graph_export_png-24.png differ
diff --git a/pixmaps/gwy_graph_export_vector-24.png b/pixmaps/gwy_graph_export_vector-24.png
index 71b6539..9fc43c3 100644
Binary files a/pixmaps/gwy_graph_export_vector-24.png and b/pixmaps/gwy_graph_export_vector-24.png differ
diff --git a/pixmaps/gwy_graph_fd-24.png b/pixmaps/gwy_graph_fd-24.png
index c2f3b7a..a28e54b 100644
Binary files a/pixmaps/gwy_graph_fd-24.png and b/pixmaps/gwy_graph_fd-24.png differ
diff --git a/pixmaps/gwy_graph_filter-24.png b/pixmaps/gwy_graph_filter-24.png
index 80cf236..5b3ba6a 100644
Binary files a/pixmaps/gwy_graph_filter-24.png and b/pixmaps/gwy_graph_filter-24.png differ
diff --git a/pixmaps/gwy_graph_function-24.png b/pixmaps/gwy_graph_function-24.png
index 8d3c0c5..7e868b2 100644
Binary files a/pixmaps/gwy_graph_function-24.png and b/pixmaps/gwy_graph_function-24.png differ
diff --git a/pixmaps/gwy_graph_halfgauss-24.png b/pixmaps/gwy_graph_halfgauss-24.png
index ed0ef6c..83b030f 100644
Binary files a/pixmaps/gwy_graph_halfgauss-24.png and b/pixmaps/gwy_graph_halfgauss-24.png differ
diff --git a/pixmaps/gwy_graph_level-24.png b/pixmaps/gwy_graph_level-24.png
index dee1168..fc824fa 100644
Binary files a/pixmaps/gwy_graph_level-24.png and b/pixmaps/gwy_graph_level-24.png differ
diff --git a/pixmaps/gwy_graph_measure-24.png b/pixmaps/gwy_graph_measure-24.png
index 7b02b42..bc563d1 100644
Binary files a/pixmaps/gwy_graph_measure-24.png and b/pixmaps/gwy_graph_measure-24.png differ
diff --git a/pixmaps/gwy_graph_palette-24.png b/pixmaps/gwy_graph_palette-24.png
index 73298e9..7669ef1 100644
Binary files a/pixmaps/gwy_graph_palette-24.png and b/pixmaps/gwy_graph_palette-24.png differ
diff --git a/pixmaps/gwy_graph_pointer-24.png b/pixmaps/gwy_graph_pointer-24.png
index c7059fe..37a53c8 100644
Binary files a/pixmaps/gwy_graph_pointer-24.png and b/pixmaps/gwy_graph_pointer-24.png differ
diff --git a/pixmaps/gwy_graph_ruler-24.png b/pixmaps/gwy_graph_ruler-24.png
index d7c016a..a0a1585 100644
Binary files a/pixmaps/gwy_graph_ruler-24.png and b/pixmaps/gwy_graph_ruler-24.png differ
diff --git a/pixmaps/gwy_graph_vertical-24.png b/pixmaps/gwy_graph_vertical-24.png
index ab82996..708736c 100644
Binary files a/pixmaps/gwy_graph_vertical-24.png and b/pixmaps/gwy_graph_vertical-24.png differ
diff --git a/pixmaps/gwy_graph_zoom-24.xcf b/pixmaps/gwy_graph_zoom-24.xcf
deleted file mode 100644
index ef446d0..0000000
Binary files a/pixmaps/gwy_graph_zoom-24.xcf and /dev/null differ
diff --git a/pixmaps/gwy_graph_zoom_fit-24.png b/pixmaps/gwy_graph_zoom_fit-24.png
index 25d61be..173423b 100644
Binary files a/pixmaps/gwy_graph_zoom_fit-24.png and b/pixmaps/gwy_graph_zoom_fit-24.png differ
diff --git a/pixmaps/gwy_graph_zoom_in-24.png b/pixmaps/gwy_graph_zoom_in-24.png
index 4d1a4c6..a07015e 100644
Binary files a/pixmaps/gwy_graph_zoom_in-24.png and b/pixmaps/gwy_graph_zoom_in-24.png differ
diff --git a/pixmaps/gwy_graph_zoom_out-24.png b/pixmaps/gwy_graph_zoom_out-24.png
index 599752c..d39e0ec 100644
Binary files a/pixmaps/gwy_graph_zoom_out-24.png and b/pixmaps/gwy_graph_zoom_out-24.png differ
diff --git a/pixmaps/gwy_hough-24.png b/pixmaps/gwy_hough-24.png
index e5d0aee..e1291f7 100644
Binary files a/pixmaps/gwy_hough-24.png and b/pixmaps/gwy_hough-24.png differ
diff --git a/pixmaps/gwy_immerse-24.png b/pixmaps/gwy_immerse-24.png
index 47bf80f..92f8ff2 100644
Binary files a/pixmaps/gwy_immerse-24.png and b/pixmaps/gwy_immerse-24.png differ
diff --git a/pixmaps/gwy_iso_roughness-24.png b/pixmaps/gwy_iso_roughness-24.png
index 6892a15..c110932 100644
Binary files a/pixmaps/gwy_iso_roughness-24.png and b/pixmaps/gwy_iso_roughness-24.png differ
diff --git a/pixmaps/gwy_iso_roughness-24.xcf b/pixmaps/gwy_iso_roughness-24.xcf
deleted file mode 100644
index e7a7744..0000000
Binary files a/pixmaps/gwy_iso_roughness-24.xcf and /dev/null differ
diff --git a/pixmaps/gwy_italic-20.png b/pixmaps/gwy_italic-20.png
index c72d6c0..81fbb46 100644
Binary files a/pixmaps/gwy_italic-20.png and b/pixmaps/gwy_italic-20.png differ
diff --git a/pixmaps/gwy_less-24.png b/pixmaps/gwy_less-24.png
index d29b178..65b46a9 100644
Binary files a/pixmaps/gwy_less-24.png and b/pixmaps/gwy_less-24.png differ
diff --git a/pixmaps/gwy_less-24.xcf b/pixmaps/gwy_less-24.xcf
deleted file mode 100644
index 485c053..0000000
Binary files a/pixmaps/gwy_less-24.xcf and /dev/null differ
diff --git a/pixmaps/gwy_level-24.png b/pixmaps/gwy_level-24.png
index 495f59a..4cf0fb8 100644
Binary files a/pixmaps/gwy_level-24.png and b/pixmaps/gwy_level-24.png differ
diff --git a/pixmaps/gwy_level-24.xcf b/pixmaps/gwy_level-24.xcf
deleted file mode 100644
index 64fa71a..0000000
Binary files a/pixmaps/gwy_level-24.xcf and /dev/null differ
diff --git a/pixmaps/gwy_level_flatten_base-24.png b/pixmaps/gwy_level_flatten_base-24.png
index d1a2be0..d2abfa5 100644
Binary files a/pixmaps/gwy_level_flatten_base-24.png and b/pixmaps/gwy_level_flatten_base-24.png differ
diff --git a/pixmaps/gwy_level_median-24.png b/pixmaps/gwy_level_median-24.png
index 5d5bfee..dfc9653 100644
Binary files a/pixmaps/gwy_level_median-24.png and b/pixmaps/gwy_level_median-24.png differ
diff --git a/pixmaps/gwy_level_triangle-24.png b/pixmaps/gwy_level_triangle-24.png
index 2e62aee..9bf2a46 100644
Binary files a/pixmaps/gwy_level_triangle-24.png and b/pixmaps/gwy_level_triangle-24.png differ
diff --git a/pixmaps/gwy_light_rotate-24.png b/pixmaps/gwy_light_rotate-24.png
index 78267d7..9a62056 100644
Binary files a/pixmaps/gwy_light_rotate-24.png and b/pixmaps/gwy_light_rotate-24.png differ
diff --git a/pixmaps/gwy_light_rotate-24.xcf b/pixmaps/gwy_light_rotate-24.xcf
deleted file mode 100644
index 91fc5f2..0000000
Binary files a/pixmaps/gwy_light_rotate-24.xcf and /dev/null differ
diff --git a/pixmaps/gwy_line_level-24.png b/pixmaps/gwy_line_level-24.png
index b7829a2..9b47092 100644
Binary files a/pixmaps/gwy_line_level-24.png and b/pixmaps/gwy_line_level-24.png differ
diff --git a/pixmaps/gwy_load_debug-20.png b/pixmaps/gwy_load_debug-20.png
index 5ae1c78..31d40ce 100644
Binary files a/pixmaps/gwy_load_debug-20.png and b/pixmaps/gwy_load_debug-20.png differ
diff --git a/pixmaps/gwy_load_info-20.png b/pixmaps/gwy_load_info-20.png
index f8b1cd7..9de7202 100644
Binary files a/pixmaps/gwy_load_info-20.png and b/pixmaps/gwy_load_info-20.png differ
diff --git a/pixmaps/gwy_load_message-20.xcf b/pixmaps/gwy_load_message-20.xcf
deleted file mode 100644
index 998a841..0000000
Binary files a/pixmaps/gwy_load_message-20.xcf and /dev/null differ
diff --git a/pixmaps/gwy_load_warning-20.png b/pixmaps/gwy_load_warning-20.png
index b2d6bca..3c38083 100644
Binary files a/pixmaps/gwy_load_warning-20.png and b/pixmaps/gwy_load_warning-20.png differ
diff --git a/pixmaps/gwy_local_slope-24.png b/pixmaps/gwy_local_slope-24.png
index 250abd8..5d1edf9 100644
Binary files a/pixmaps/gwy_local_slope-24.png and b/pixmaps/gwy_local_slope-24.png differ
diff --git a/pixmaps/gwy_logscale_horizontal-24.png b/pixmaps/gwy_logscale_horizontal-24.png
index 0424b6c..c4c47b4 100644
Binary files a/pixmaps/gwy_logscale_horizontal-24.png and b/pixmaps/gwy_logscale_horizontal-24.png differ
diff --git a/pixmaps/gwy_logscale_vertical-24.png b/pixmaps/gwy_logscale_vertical-24.png
index 0365405..9173e0d 100644
Binary files a/pixmaps/gwy_logscale_vertical-24.png and b/pixmaps/gwy_logscale_vertical-24.png differ
diff --git a/pixmaps/gwy_mark_outliers-24.png b/pixmaps/gwy_mark_outliers-24.png
new file mode 100644
index 0000000..79b60f0
Binary files /dev/null and b/pixmaps/gwy_mark_outliers-24.png differ
diff --git a/pixmaps/gwy_mark_scars-24.png b/pixmaps/gwy_mark_scars-24.png
new file mode 100644
index 0000000..df843dd
Binary files /dev/null and b/pixmaps/gwy_mark_scars-24.png differ
diff --git a/pixmaps/gwy_mark_with-24.png b/pixmaps/gwy_mark_with-24.png
index a8a5a38..dde1a2a 100644
Binary files a/pixmaps/gwy_mark_with-24.png and b/pixmaps/gwy_mark_with-24.png differ
diff --git a/pixmaps/gwy_markup-20.xcf b/pixmaps/gwy_markup-20.xcf
deleted file mode 100644
index 75110cc..0000000
Binary files a/pixmaps/gwy_markup-20.xcf and /dev/null differ
diff --git a/pixmaps/gwy_mask-16.png b/pixmaps/gwy_mask-16.png
index ff6c0c0..24787e1 100644
Binary files a/pixmaps/gwy_mask-16.png and b/pixmaps/gwy_mask-16.png differ
diff --git a/pixmaps/gwy_mask-16.xcf b/pixmaps/gwy_mask-16.xcf
deleted file mode 100644
index 1182232..0000000
Binary files a/pixmaps/gwy_mask-16.xcf and /dev/null differ
diff --git a/pixmaps/gwy_mask-24.png b/pixmaps/gwy_mask-24.png
index 32be618..d96374f 100644
Binary files a/pixmaps/gwy_mask-24.png and b/pixmaps/gwy_mask-24.png differ
diff --git a/pixmaps/gwy_mask-24.xcf b/pixmaps/gwy_mask-24.xcf
deleted file mode 100644
index c8a6f23..0000000
Binary files a/pixmaps/gwy_mask-24.xcf and /dev/null differ
diff --git a/pixmaps/gwy_mask_add-24.png b/pixmaps/gwy_mask_add-24.png
index d125b2a..5d8db27 100644
Binary files a/pixmaps/gwy_mask_add-24.png and b/pixmaps/gwy_mask_add-24.png differ
diff --git a/pixmaps/gwy_mask_circle-24.png b/pixmaps/gwy_mask_circle-24.png
index bc2afd9..abacf74 100644
Binary files a/pixmaps/gwy_mask_circle-24.png and b/pixmaps/gwy_mask_circle-24.png differ
diff --git a/pixmaps/gwy_mask_circle_exclusive-24.png b/pixmaps/gwy_mask_circle_exclusive-24.png
index bcca426..4a70445 100644
Binary files a/pixmaps/gwy_mask_circle_exclusive-24.png and b/pixmaps/gwy_mask_circle_exclusive-24.png differ
diff --git a/pixmaps/gwy_mask_circle_inclusive-24.png b/pixmaps/gwy_mask_circle_inclusive-24.png
index 128a478..839bc61 100644
Binary files a/pixmaps/gwy_mask_circle_inclusive-24.png and b/pixmaps/gwy_mask_circle_inclusive-24.png differ
diff --git a/pixmaps/gwy_mask_distribute-24.png b/pixmaps/gwy_mask_distribute-24.png
index 6acf992..72a00af 100644
Binary files a/pixmaps/gwy_mask_distribute-24.png and b/pixmaps/gwy_mask_distribute-24.png differ
diff --git a/pixmaps/gwy_mask_editor-24.png b/pixmaps/gwy_mask_editor-24.png
index 65eeaa5..96a9f2f 100644
Binary files a/pixmaps/gwy_mask_editor-24.png and b/pixmaps/gwy_mask_editor-24.png differ
diff --git a/pixmaps/gwy_mask_exclude-24.png b/pixmaps/gwy_mask_exclude-24.png
index 72b8939..6a62863 100644
Binary files a/pixmaps/gwy_mask_exclude-24.png and b/pixmaps/gwy_mask_exclude-24.png differ
diff --git a/pixmaps/gwy_mask_exclude_circle-24.png b/pixmaps/gwy_mask_exclude_circle-24.png
index 2fdbadc..4a70445 100644
Binary files a/pixmaps/gwy_mask_exclude_circle-24.png and b/pixmaps/gwy_mask_exclude_circle-24.png differ
diff --git a/pixmaps/gwy_mask_extract-24.png b/pixmaps/gwy_mask_extract-24.png
index dbe8f30..e3943e6 100644
Binary files a/pixmaps/gwy_mask_extract-24.png and b/pixmaps/gwy_mask_extract-24.png differ
diff --git a/pixmaps/gwy_mask_fill_draw-24.png b/pixmaps/gwy_mask_fill_draw-24.png
index a412a3f..e2f59b6 100644
Binary files a/pixmaps/gwy_mask_fill_draw-24.png and b/pixmaps/gwy_mask_fill_draw-24.png differ
diff --git a/pixmaps/gwy_mask_fill_erase-24.png b/pixmaps/gwy_mask_fill_erase-24.png
index a8f7136..fd3450b 100644
Binary files a/pixmaps/gwy_mask_fill_erase-24.png and b/pixmaps/gwy_mask_fill_erase-24.png differ
diff --git a/pixmaps/gwy_mask_grow-24.png b/pixmaps/gwy_mask_grow-24.png
index f806456..01b63fc 100644
Binary files a/pixmaps/gwy_mask_grow-24.png and b/pixmaps/gwy_mask_grow-24.png differ
diff --git a/pixmaps/gwy_mask_intersect-24.png b/pixmaps/gwy_mask_intersect-24.png
index 7a08f4d..d2ca3c0 100644
Binary files a/pixmaps/gwy_mask_intersect-24.png and b/pixmaps/gwy_mask_intersect-24.png differ
diff --git a/pixmaps/gwy_mask_invert-24.png b/pixmaps/gwy_mask_invert-24.png
index 0af7c29..3796b3b 100644
Binary files a/pixmaps/gwy_mask_invert-24.png and b/pixmaps/gwy_mask_invert-24.png differ
diff --git a/pixmaps/gwy_mask_line-24.png b/pixmaps/gwy_mask_line-24.png
index a50c304..f7641d1 100644
Binary files a/pixmaps/gwy_mask_line-24.png and b/pixmaps/gwy_mask_line-24.png differ
diff --git a/pixmaps/gwy_mask_morph-24.png b/pixmaps/gwy_mask_morph-24.png
index e95e1b0..7acfc4a 100644
Binary files a/pixmaps/gwy_mask_morph-24.png and b/pixmaps/gwy_mask_morph-24.png differ
diff --git a/pixmaps/gwy_mask_paint_draw-24.png b/pixmaps/gwy_mask_paint_draw-24.png
index d2b6acd..7e740eb 100644
Binary files a/pixmaps/gwy_mask_paint_draw-24.png and b/pixmaps/gwy_mask_paint_draw-24.png differ
diff --git a/pixmaps/gwy_mask_paint_erase-24.png b/pixmaps/gwy_mask_paint_erase-24.png
index cf60f3f..ce13a16 100644
Binary files a/pixmaps/gwy_mask_paint_erase-24.png and b/pixmaps/gwy_mask_paint_erase-24.png differ
diff --git a/pixmaps/gwy_mask_rect_exclusive-24.png b/pixmaps/gwy_mask_rect_exclusive-24.png
index 0de5352..9d0d67a 100644
Binary files a/pixmaps/gwy_mask_rect_exclusive-24.png and b/pixmaps/gwy_mask_rect_exclusive-24.png differ
diff --git a/pixmaps/gwy_mask_rect_inclusive-24.png b/pixmaps/gwy_mask_rect_inclusive-24.png
index e0e8990..dc2075d 100644
Binary files a/pixmaps/gwy_mask_rect_inclusive-24.png and b/pixmaps/gwy_mask_rect_inclusive-24.png differ
diff --git a/pixmaps/gwy_mask_remove-24.png b/pixmaps/gwy_mask_remove-24.png
index eb82317..d1e69dc 100644
Binary files a/pixmaps/gwy_mask_remove-24.png and b/pixmaps/gwy_mask_remove-24.png differ
diff --git a/pixmaps/gwy_mask_set-24.png b/pixmaps/gwy_mask_set-24.png
new file mode 100644
index 0000000..98ad1ac
Binary files /dev/null and b/pixmaps/gwy_mask_set-24.png differ
diff --git a/pixmaps/gwy_mask_shrink-24.png b/pixmaps/gwy_mask_shrink-24.png
index a5e7c8c..1f295e0 100644
Binary files a/pixmaps/gwy_mask_shrink-24.png and b/pixmaps/gwy_mask_shrink-24.png differ
diff --git a/pixmaps/gwy_mask_subtract-24.png b/pixmaps/gwy_mask_subtract-24.png
index a452875..4b23180 100644
Binary files a/pixmaps/gwy_mask_subtract-24.png and b/pixmaps/gwy_mask_subtract-24.png differ
diff --git a/pixmaps/gwy_mask_thin-24.png b/pixmaps/gwy_mask_thin-24.png
index ed44191..bc6de13 100644
Binary files a/pixmaps/gwy_mask_thin-24.png and b/pixmaps/gwy_mask_thin-24.png differ
diff --git a/pixmaps/gwy_measure-24.xcf b/pixmaps/gwy_measure-24.xcf
deleted file mode 100644
index 6cceb5b..0000000
Binary files a/pixmaps/gwy_measure-24.xcf and /dev/null differ
diff --git a/pixmaps/gwy_measure_lattice-24.png b/pixmaps/gwy_measure_lattice-24.png
index cd72ade..4dcd3a2 100644
Binary files a/pixmaps/gwy_measure_lattice-24.png and b/pixmaps/gwy_measure_lattice-24.png differ
diff --git a/pixmaps/gwy_merge-24.png b/pixmaps/gwy_merge-24.png
index b143a65..194af80 100644
Binary files a/pixmaps/gwy_merge-24.png and b/pixmaps/gwy_merge-24.png differ
diff --git a/pixmaps/gwy_more-24.png b/pixmaps/gwy_more-24.png
index bf60a5d..7ddd42e 100644
Binary files a/pixmaps/gwy_more-24.png and b/pixmaps/gwy_more-24.png differ
diff --git a/pixmaps/gwy_more-24.xcf b/pixmaps/gwy_more-24.xcf
deleted file mode 100644
index c8b399f..0000000
Binary files a/pixmaps/gwy_more-24.xcf and /dev/null differ
diff --git a/pixmaps/gwy_mutual_crop-24.png b/pixmaps/gwy_mutual_crop-24.png
index e259352..3c5eb1a 100644
Binary files a/pixmaps/gwy_mutual_crop-24.png and b/pixmaps/gwy_mutual_crop-24.png differ
diff --git a/pixmaps/gwy_neural.svg b/pixmaps/gwy_neural.svg
deleted file mode 100644
index 12d2ac6..0000000
--- a/pixmaps/gwy_neural.svg
+++ /dev/null
@@ -1,347 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="125mm"
- height="125mm"
- viewBox="0 0 442.91338 442.91337"
- id="svg2"
- version="1.1"
- inkscape:version="0.91 r"
- sodipodi:docname="neural.svg"
- inkscape:export-filename="/home/lila/Documents/Gwyddion/gwy_neural_apply.png"
- inkscape:export-xdpi="4.8768001"
- inkscape:export-ydpi="4.8768001">
- <defs
- id="defs4" />
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="0.7"
- inkscape:cx="465.75863"
- inkscape:cy="203.64894"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- showgrid="false"
- inkscape:window-width="1024"
- inkscape:window-height="549"
- inkscape:window-x="0"
- inkscape:window-y="0"
- inkscape:window-maximized="1"
- fit-margin-top="0"
- fit-margin-left="0"
- fit-margin-right="0"
- fit-margin-bottom="0" />
- <metadata
- id="metadata7">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title />
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Calque 1"
- inkscape:groupmode="layer"
- id="layer1"
- transform="translate(-56.179468,-49.87738)">
- <g
- id="g4607"
- transform="matrix(0.83059615,0,0,0.83059615,718.07583,169.27567)">
- <circle
- r="32.335983"
- cy="142.65666"
- cx="206.99623"
- id="path4138"
- style="fill:#be89e4;fill-opacity:1;stroke:#000000;stroke-width:12.48838043;stroke-miterlimit:3.70000005;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
- <circle
- r="32.335983"
- cy="290.7991"
- cx="298.31689"
- id="path4138-5"
- style="fill:#be89e4;fill-opacity:1;stroke:#000000;stroke-width:12.48838043;stroke-miterlimit:3.70000005;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
- <circle
- r="32.335983"
- cy="326.42545"
- cx="198.42267"
- id="path4138-5-5"
- style="fill:#be89e4;fill-opacity:1;stroke:#000000;stroke-width:12.48838043;stroke-miterlimit:3.29999995;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
- <circle
- r="32.335983"
- cy="447.12732"
- cx="272.71262"
- id="path4138-5-5-3"
- style="fill:#be89e4;fill-opacity:1;stroke:#000000;stroke-width:12.48838043;stroke-miterlimit:3.4333334;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
- <circle
- r="32.335983"
- cy="415.24612"
- cx="107.86199"
- id="path4138-5-5-3-8"
- style="fill:#be89e4;fill-opacity:1;stroke:#000000;stroke-width:12.48838043;stroke-miterlimit:3.4333334;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
- <circle
- r="32.335983"
- cy="209.29955"
- cx="103.33107"
- id="path4138-5-5-3-8-6"
- style="fill:#be89e4;fill-opacity:1;stroke:#000000;stroke-width:12.48838043;stroke-miterlimit:3.70000005;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
- <path
- sodipodi:nodetypes="cc"
- inkscape:connector-curvature="0"
- id="path4217"
- d="m 124.64433,234.27977 51.82498,69.82167"
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:13.58111382;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <path
- sodipodi:nodetypes="cc"
- inkscape:connector-curvature="0"
- id="path4217-7"
- d="m 231.90847,319.8401 37.02404,-11.91653"
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:13.58111382;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <path
- sodipodi:nodetypes="cc"
- inkscape:connector-curvature="0"
- id="path4217-8"
- d="m 217.46549,354.80637 41.20434,62.19794"
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:13.58111382;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <path
- sodipodi:nodetypes="cc"
- inkscape:connector-curvature="0"
- id="path4217-8-1"
- d="m 175.58213,349.33607 -42.66718,43.46974"
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:13.58111382;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <path
- sodipodi:nodetypes="cc"
- inkscape:connector-curvature="0"
- id="path4217-8-1-7"
- d="M 206.28141,174.90543 202.1514,292.78286"
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:12.48838043;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3.4333334;stroke-dasharray:none;stroke-opacity:1" />
- <path
- sodipodi:nodetypes="cc"
- inkscape:connector-curvature="0"
- id="path4217-0-8-3"
- d="m 180.54578,161.52771 -48.5166,32.77954"
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:13.58111382;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <path
- sodipodi:nodetypes="cc"
- inkscape:connector-curvature="0"
- id="path4217-0-8-3-9"
- d="m 228.93778,170.69243 53.166,93.46256"
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:12.48838043;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3.70000005;stroke-dasharray:none;stroke-opacity:1" />
- <path
- sodipodi:nodetypes="cc"
- inkscape:connector-curvature="0"
- id="path4217-0-8-3-9-3"
- d="M 295.40938,324.1353 281.7544,414.34061"
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:13.58111382;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <path
- sodipodi:nodetypes="cc"
- inkscape:connector-curvature="0"
- id="path4217-0-8-3-9-3-4"
- d="M 241.61924,439.65851 141.04179,425.78292"
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:12.48838043;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3.70000005;stroke-dasharray:none;stroke-opacity:1" />
- <path
- sodipodi:nodetypes="cc"
- inkscape:connector-curvature="0"
- id="path4217-0-8-3-9-3-4-1"
- d="M 107.18491,379.84582 98.797294,241.71368"
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:12.48838043;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3.70000005;stroke-dasharray:none;stroke-opacity:1" />
- </g>
- <path
- style="fill:#5a2084;fill-opacity:0.74594595;stroke:#000000;stroke-width:8.73450184;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- d="m 274.75101,255.53016 48.31243,0 0,-74.14964 c 0,-24.00352 10.80839,-32.52236 27.74386,-32.52236 l 70.5667,0 0,31.79503 70.5258,-59.56467 -70.5258,-59.472854 0,31.703176 c -32.61991,0.122852 -64.94575,-0.01307 -98.31056,-0.12123 -31.94445,0 -48.31243,26.397758 -48.31243,55.660548 z"
- id="rect4663"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccccccccccc" />
- <g
- id="g4253"
- transform="matrix(1.216543,0,0,1.216543,-332.72712,-408.0541)">
- <path
- inkscape:connector-curvature="0"
- id="path4375"
- d="m 923.05736,351.32414 0,141.48493"
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:12.22952175;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <path
- inkscape:connector-curvature="0"
- id="path4375-8"
- d="m 1017.9967,373.01522 0,144.74631"
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:12.36967182;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <path
- inkscape:connector-curvature="0"
- id="path4375-8-8"
- d="m 1112.9361,351.32414 0,141.40923"
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:12.22624969;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <path
- sodipodi:nodetypes="csc"
- inkscape:connector-curvature="0"
- id="path4407"
- d="m 1016.9948,379.27229 c 0,0 23.1576,-18.2024 46.3569,-23.54832 16.293,-3.75447 55.8415,-4.81696 55.8415,-4.81696"
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:13.21420383;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <path
- sodipodi:nodetypes="csc"
- inkscape:connector-curvature="0"
- id="path4407-0"
- d="m 1019.0048,379.27229 c 0,0 -23.15768,-18.2024 -46.35693,-23.54832 -16.293,-3.75447 -55.84148,-4.81696 -55.84148,-4.81696"
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:13.21420383;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <path
- sodipodi:nodetypes="csc"
- inkscape:connector-curvature="0"
- id="path4407-3"
- d="m 1016.6534,514.6997 c 0,0 21.7331,-18.42055 43.5053,-23.83055 15.2908,-3.79944 52.4065,-4.87467 52.4065,-4.87467"
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:12.87780857;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <path
- sodipodi:nodetypes="csc"
- inkscape:connector-curvature="0"
- id="path4407-0-2"
- d="m 1019.0166,514.71149 c 0,0 -21.63663,-18.43571 -43.3121,-23.85015 -15.22283,-3.80258 -52.17366,-4.87868 -52.17366,-4.87868"
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:12.85445595;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <g
- transform="matrix(1.6517755,0,0,1.6517755,392.66284,-128.35604)"
- id="g4513">
- <path
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:5.51749945;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 386.80068,324.77982 c 0,0 9.66933,-7.60028 19.35601,-9.83244 6.80303,-1.56765 23.31622,-2.01128 23.31622,-2.01128"
- id="path4407-04"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="csc" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:5.51749945;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 386.80068,343.3577 c 0,0 9.66933,-7.60028 19.35601,-9.83244 6.80303,-1.56765 23.31622,-2.01128 23.31622,-2.01128"
- id="path4407-04-9"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="csc" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:5.51749945;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 386.80068,361.93561 c 0,0 9.66933,-7.60028 19.35601,-9.83244 6.80303,-1.56765 23.31622,-2.01128 23.31622,-2.01128"
- id="path4407-04-9-0"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="csc" />
- </g>
- <g
- transform="matrix(1.6517755,0,0,1.6517755,243.74583,-141.9242)"
- id="g4508">
- <path
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:5.51749945;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 460.52074,333.21486 c 0,0 -9.66933,-7.60028 -19.35601,-9.83244 -6.80303,-1.56765 -23.31622,-2.01128 -23.31622,-2.01128"
- id="path4407-04-4"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="csc" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:5.51749945;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 460.52074,351.79274 c 0,0 -9.66933,-7.60028 -19.35601,-9.83244 -6.80303,-1.56765 -23.31622,-2.01128 -23.31622,-2.01128"
- id="path4407-04-9-1"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="csc" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:5.51749945;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 460.52074,370.37065 c 0,0 -9.66933,-7.60028 -19.35601,-9.83244 -6.80303,-1.56765 -23.31622,-2.01128 -23.31622,-2.01128"
- id="path4407-04-9-0-4"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="csc" />
- </g>
- </g>
- <circle
- style="fill:#be89e4;fill-opacity:1;stroke:#000000;stroke-width:14.95060253;stroke-miterlimit:3.70000005;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="path4138-2"
- cx="129.99648"
- cy="134.00958"
- r="38.711376" />
- <circle
- style="fill:#be89e4;fill-opacity:1;stroke:#000000;stroke-width:14.95060253;stroke-miterlimit:3.70000005;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="path4138-2-3"
- cx="118.80893"
- cy="426.12067"
- r="38.711376" />
- <circle
- style="fill:#be89e4;fill-opacity:1;stroke:#000000;stroke-width:14.95060253;stroke-miterlimit:3.70000005;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="path4138-2-3-0"
- cx="377.40799"
- cy="430.16129"
- r="38.711376" />
- <circle
- style="fill:#be89e4;fill-opacity:1;stroke:#000000;stroke-width:14.95060253;stroke-miterlimit:3.70000005;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="path4138-2-3-0-9"
- cx="272.35211"
- cy="331.16632"
- r="38.711376" />
- <circle
- style="fill:#be89e4;fill-opacity:1;stroke:#000000;stroke-width:14.95060253;stroke-miterlimit:3.70000005;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="path4138-2-3-6"
- cx="139.01196"
- cy="286.71967"
- r="38.711376" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:18;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 156.18457,428.14098 180.81731,2.02031"
- id="path4325"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cc" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:18;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 303.16176,358.44047 45.45687,43.43656"
- id="path4325-7"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cc" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:18;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 147.59827,404.40241 92.93404,-51.51778"
- id="path4325-7-5"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cc" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:18;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 123.85968,386.21965 9.09138,-60.60915"
- id="path4325-7-5-5"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cc" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:18;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="M 235.48154,322.07497 176.8927,303.89223"
- id="path4325-7-5-5-4"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cc" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:18;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="M 249.1186,298.84146 155.17442,164.49118"
- id="path4325-7-5-5-4-9"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cc" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:18;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 135.47644,245.80845 -8.08121,-72.73097"
- id="path4325-7-5-5-4-9-9"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cc" />
- <circle
- style="fill:#be89e4;fill-opacity:1;stroke:#000000;stroke-width:14.95060253;stroke-miterlimit:3.70000005;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="path4138-2-3-0-0"
- cx="439.02728"
- cy="334.19681"
- r="38.711376" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:18;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 310.23283,333.69173 87.88327,-2.02031"
- id="path4325-7-9"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cc" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:18;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 400.13641,395.81611 23.23351,-27.27413"
- id="path4325-7-9-3"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cc" />
- </g>
-</svg>
diff --git a/pixmaps/gwy_neural_apply-24.png b/pixmaps/gwy_neural_apply-24.png
index c08795e..13c66fc 100644
Binary files a/pixmaps/gwy_neural_apply-24.png and b/pixmaps/gwy_neural_apply-24.png differ
diff --git a/pixmaps/gwy_neural_train-24.png b/pixmaps/gwy_neural_train-24.png
index 603da13..a6ca230 100644
Binary files a/pixmaps/gwy_neural_train-24.png and b/pixmaps/gwy_neural_train-24.png differ
diff --git a/pixmaps/gwy_next-24.png b/pixmaps/gwy_next-24.png
new file mode 100644
index 0000000..81fee13
Binary files /dev/null and b/pixmaps/gwy_next-24.png differ
diff --git a/pixmaps/gwy_null_offsets-24.png b/pixmaps/gwy_null_offsets-24.png
new file mode 100644
index 0000000..50ed894
Binary files /dev/null and b/pixmaps/gwy_null_offsets-24.png differ
diff --git a/pixmaps/gwy_palette-24.xcf b/pixmaps/gwy_palette-24.xcf
deleted file mode 100644
index 0504dd0..0000000
Binary files a/pixmaps/gwy_palette-24.xcf and /dev/null differ
diff --git a/pixmaps/gwy_palettes-16.png b/pixmaps/gwy_palettes-16.png
index fef2359..b2fd0c8 100644
Binary files a/pixmaps/gwy_palettes-16.png and b/pixmaps/gwy_palettes-16.png differ
diff --git a/pixmaps/gwy_palettes-16.xcf b/pixmaps/gwy_palettes-16.xcf
deleted file mode 100644
index b47da54..0000000
Binary files a/pixmaps/gwy_palettes-16.xcf and /dev/null differ
diff --git a/pixmaps/gwy_palettes-24.png b/pixmaps/gwy_palettes-24.png
index 9744b41..4980e7a 100644
Binary files a/pixmaps/gwy_palettes-24.png and b/pixmaps/gwy_palettes-24.png differ
diff --git a/pixmaps/gwy_path.svg b/pixmaps/gwy_path.svg
deleted file mode 100644
index 21bcc45..0000000
--- a/pixmaps/gwy_path.svg
+++ /dev/null
@@ -1,387 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="210mm"
- height="210mm"
- viewBox="0 0 744.09449 744.09448"
- id="svg2"
- version="1.1"
- inkscape:version="0.91 r"
- sodipodi:docname="gwy_path.svg"
- inkscape:export-filename="/home/lila/Documents/Gwyddion/gwy_straighten_path-24.png"
- inkscape:export-xdpi="2.9028571"
- inkscape:export-ydpi="2.9028571">
- <defs
- id="defs4">
- <linearGradient
- id="linearGradient6033"
- inkscape:collect="always">
- <stop
- id="stop6035"
- offset="0"
- style="stop-color:#1585a5;stop-opacity:1" />
- <stop
- style="stop-color:#00d752;stop-opacity:1"
- offset="0.24198121"
- id="stop6037" />
- <stop
- id="stop6039"
- offset="0.74367243"
- style="stop-color:#00678b;stop-opacity:1" />
- <stop
- id="stop6041"
- offset="1"
- style="stop-color:#00ff00;stop-opacity:1" />
- </linearGradient>
- <inkscape:path-effect
- effect="bend_path"
- id="path-effect6021"
- is_visible="true"
- bendpath="m 189.12967,978.88092 c 0,0 -90.907864,-40.72346 -109.894267,-132.78374 -8.797219,-42.6555 20.567416,-124.09181 75.989567,-170.60157 29.80255,-25.01003 54.66733,-65.21512 62.08517,-95.21232 14.99897,-60.65472 -8.58689,-105.96061 -31.65892,-137.25726 -23.07204,-31.29666 -75.33016,-55.28051 -75.33016,-55.28051"
- prop_scale="1"
- scale_y_rel="false"
- vertical="true"
- bendpath-nodetypes="cssszc" />
- <inkscape:path-effect
- effect="bend_path"
- id="path-effect5834"
- is_visible="true"
- bendpath="m 148.1797,682.87522 65.42999,63.50558"
- prop_scale="1"
- scale_y_rel="false"
- vertical="false"
- bendpath-nodetypes="cc" />
- <linearGradient
- inkscape:collect="always"
- id="linearGradient5787">
- <stop
- style="stop-color:#1585a5;stop-opacity:1"
- offset="0"
- id="stop5789" />
- <stop
- id="stop5801"
- offset="0.34077555"
- style="stop-color:#00d752;stop-opacity:1" />
- <stop
- style="stop-color:#00678b;stop-opacity:1"
- offset="0.75"
- id="stop5803" />
- <stop
- style="stop-color:#00ff00;stop-opacity:1"
- offset="1"
- id="stop5791" />
- </linearGradient>
- <marker
- inkscape:stockid="TriangleOutM"
- orient="auto"
- refY="0.0"
- refX="0.0"
- id="TriangleOutM"
- style="overflow:visible"
- inkscape:isstock="true">
- <path
- id="path4437"
- d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z "
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
- transform="scale(0.4)" />
- </marker>
- <marker
- inkscape:stockid="Arrow2Mend"
- orient="auto"
- refY="0.0"
- refX="0.0"
- id="Arrow2Mend"
- style="overflow:visible;"
- inkscape:isstock="true">
- <path
- id="path4319"
- style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
- d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
- transform="scale(0.6) rotate(180) translate(0,0)" />
- </marker>
- <marker
- inkscape:stockid="Arrow2Lend"
- orient="auto"
- refY="0.0"
- refX="0.0"
- id="Arrow2Lend"
- style="overflow:visible;"
- inkscape:isstock="true">
- <path
- id="path4313"
- style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
- d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
- transform="scale(1.1) rotate(180) translate(1,0)" />
- </marker>
- <marker
- inkscape:stockid="Arrow1Mend"
- orient="auto"
- refY="0.0"
- refX="0.0"
- id="Arrow1Mend"
- style="overflow:visible;"
- inkscape:isstock="true">
- <path
- id="path4301"
- d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
- transform="scale(0.4) rotate(180) translate(10,0)" />
- </marker>
- <marker
- inkscape:stockid="Arrow2Send"
- orient="auto"
- refY="0.0"
- refX="0.0"
- id="Arrow2Send"
- style="overflow:visible;"
- inkscape:isstock="true">
- <path
- id="path4325"
- style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
- d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
- transform="scale(0.3) rotate(180) translate(-2.3,0)" />
- </marker>
- <inkscape:path-effect
- effect="bend_path"
- id="path-effect4218"
- is_visible="true"
- bendpath="m 59.92989,760.93364 c 0,0 9.83878,-27.87346 51.49868,-74.28572 36.89793,-41.10706 152.09001,-64.14042 222.85714,2.85715 53.00246,50.17917 74.3552,97.32766 165.71429,99.99999 109.92334,3.21536 158.03681,-114.28571 158.03681,-114.28571"
- prop_scale="1"
- scale_y_rel="false"
- vertical="false"
- bendpath-nodetypes="csssc" />
- <inkscape:path-effect
- effect="bend_path"
- id="path-effect4207"
- is_visible="true"
- bendpath="m 91.428571,283.79078 1,0"
- prop_scale="1"
- scale_y_rel="false"
- vertical="false" />
- <inkscape:path-effect
- effect="bend_path"
- id="path-effect4205"
- is_visible="true"
- bendpath="m 44.285711,283.79078 94.285719,0"
- prop_scale="1"
- scale_y_rel="false"
- vertical="false" />
- <inkscape:path-effect
- effect="bend_path"
- id="path-effect4203"
- is_visible="true"
- bendpath="m 44.285711,283.79078 94.285719,0"
- prop_scale="1"
- scale_y_rel="false"
- vertical="false" />
- <filter
- style="color-interpolation-filters:sRGB"
- id="filter4201"
- inkscape:label="filtre1" />
- <inkscape:path-effect
- effect="bend_path"
- id="path-effect4218-9"
- is_visible="true"
- bendpath="m 59.92989,760.93364 c 0,0 9.83878,-27.87346 51.49868,-74.28572 36.89793,-41.10706 152.09001,-64.14042 222.85714,2.85715 53.00246,50.17917 74.3552,97.32766 165.71429,99.99999 109.92334,3.21536 158.03681,-114.28571 158.03681,-114.28571"
- prop_scale="1"
- scale_y_rel="false"
- vertical="false"
- bendpath-nodetypes="csssc" />
- <inkscape:path-effect
- effect="bend_path"
- id="path-effect4205-0"
- is_visible="true"
- bendpath="m 44.285711,283.79078 94.285719,0"
- prop_scale="1"
- scale_y_rel="false"
- vertical="false" />
- <inkscape:path-effect
- effect="bend_path"
- id="path-effect4207-1"
- is_visible="true"
- bendpath="m 91.428571,283.79078 1,0"
- prop_scale="1"
- scale_y_rel="false"
- vertical="false" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5787"
- id="linearGradient5795"
- x1="529.21313"
- y1="328.78351"
- x2="527.28876"
- y2="1017.7228"
- gradientUnits="userSpaceOnUse"
- spreadMethod="pad"
- gradientTransform="translate(116.10716,7.8168575)" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient6033"
- id="linearGradient5795-1"
- x1="489.75098"
- y1="357.35956"
- x2="558.58636"
- y2="979.6214"
- gradientUnits="userSpaceOnUse"
- spreadMethod="pad"
- gradientTransform="translate(-379.19889,29.626072)" />
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="0.36744053"
- inkscape:cx="436.537"
- inkscape:cy="406.88827"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- showgrid="false"
- inkscape:window-width="1024"
- inkscape:window-height="549"
- inkscape:window-x="0"
- inkscape:window-y="0"
- inkscape:window-maximized="1" />
- <metadata
- id="metadata7">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title />
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Calque 1"
- inkscape:groupmode="layer"
- id="layer1"
- transform="translate(0,-308.26772)">
- <path
- style="fill:url(#linearGradient5795-1);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:30;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- d="m 166.00339,1029.6717 46.25255,-101.58154 c 0,0 0.009,0.004 0.009,0.004 0.003,0.001 0.0194,0.009 0.0221,0.0103 0.0244,0.0113 0.0306,0.0141 0.0185,0.009 0.0242,0.0117 -0.0155,-0.008 -0.1195,-0.0568 0,0 -1e-5,-10e-6 -1e-5,-10e-6 -0.39912,-0.18894 -0.91341,-0.44814 -1.54597,-0.77038 0,0 -3e-5,-10e-6 -3e-5,-10e-6 -2.33762,-1.19099 -4.8156,-2.59017 -7.44975,-4.15195 l -3e-5,-10e-6 c -8.94065,-5.32679 -17.46119,-11.49697 -25.40993,-18.35845 l -1e-5,-1e-5 c -10.58274,-9.24312 -19.8597 [...]
- id="rect4198-9"
- inkscape:path-effect="#path-effect6021"
- inkscape:original-d="m 88.433105,362.25839 111.615865,0 0,688.93931 -111.615865,0 z" />
- <rect
- style="fill:url(#linearGradient5795);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:30;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="rect4198"
- width="111.61587"
- height="688.93933"
- x="583.73914"
- y="340.44916" />
- <g
- id="g4209"
- inkscape:path-effect="#path-effect4218"
- transform="matrix(0,-0.98950589,0.98950589,0,-560.27686,1036.8442)">
- <g
- inkscape:path-effect="#path-effect4205"
- transform="matrix(0,1.3803681,-1.3803681,0,742.14766,549.01427)"
- id="g4193">
- <path
- inkscape:path-effect="#path-effect4207"
- inkscape:original-d="m 91.428571,503.79078 0,-440.000004"
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:20;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 150.35353,492.88198 c -0.17446,-0.0808 -0.34861,-0.16218 -0.52248,-0.24416 -3.64385,-1.71807 -7.16855,-3.68059 -10.62217,-5.75471 0,0 -1e-5,-10e-6 -2e-5,-10e-6 -14.18822,-8.52092 -27.18455,-18.90691 -39.500927,-29.96216 -4.055094,-3.63987 -7.481909,-7.94044 -10.451844,-12.50903 -10e-7,0 -4e-6,0 -7e-6,-10e-6 -3.432772,-5.28056 -6.257935,-10.94347 -8.613458,-16.78468 -5.412888,-13.42284 -8.405908,-27.78151 -9.268192,-42.22896 -0.941266,-15.77076 0.732609,-31.74081 5.416016, [...]
- id="path4136"
- inkscape:connector-curvature="0" />
- <path
- inkscape:original-d="m 44.285712,506.64792 94.285718,0"
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:20;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 137.07761,538.41891 32.89236,-88.38009"
- id="path4138"
- inkscape:connector-curvature="0" />
- <path
- inkscape:original-d="m 44.285711,395.21935 94.285719,0"
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:20;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="M 25.542265,401.48127 119.09692,389.33543"
- id="path4138-0"
- inkscape:connector-curvature="0" />
- <path
- inkscape:original-d="m 44.285712,60.933639 94.285718,0"
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:20;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="M 73.581107,104.5135 109.27604,17.35378"
- id="path4138-0-6"
- inkscape:connector-curvature="0" />
- <path
- inkscape:original-d="m 44.285713,172.36221 94.285717,0"
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:20;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 126.72349,165.59669 93.56098,-11.39217"
- id="path4138-0-6-6"
- inkscape:connector-curvature="0" />
- <path
- inkscape:original-d="m 44.285711,283.79079 94.285719,0"
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:20;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 88.427762,242.47475 64.701418,68.60661"
- id="path4138-0-6-63"
- inkscape:connector-curvature="0" />
- </g>
- </g>
- <g
- id="g4209-1"
- transform="matrix(0,-1.0828392,1.0828392,0,-91.606926,1064.3586)"
- inkscape:transform-center-x="312.60492"
- inkscape:transform-center-y="-56.053863">
- <g
- inkscape:path-effect="#path-effect4205-0"
- transform="matrix(0,1.3803681,-1.3803681,0,742.14766,549.01427)"
- id="g4193-0">
- <path
- inkscape:path-effect="#path-effect4207-1"
- inkscape:original-d="m 91.428571,503.79078 0,-440.000004"
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:20;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 91.428571,503.79078 0,-440.000004"
- id="path4136-8"
- inkscape:connector-curvature="0" />
- <path
- inkscape:original-d="m 44.285712,506.64792 94.285718,0"
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:20;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 44.285712,506.64792 94.285718,0"
- id="path4138-2"
- inkscape:connector-curvature="0" />
- <path
- inkscape:original-d="m 44.285711,395.21935 94.285719,0"
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:20;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 44.285711,395.21935 94.285719,0"
- id="path4138-0-1"
- inkscape:connector-curvature="0" />
- <path
- inkscape:original-d="m 44.285712,60.933639 94.285718,0"
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:20;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 44.285712,60.933639 94.285718,0"
- id="path4138-0-6-5"
- inkscape:connector-curvature="0" />
- <path
- inkscape:original-d="m 44.285713,172.36221 94.285717,0"
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:20;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 44.285713,172.36221 94.285717,0"
- id="path4138-0-6-6-2"
- inkscape:connector-curvature="0" />
- <path
- inkscape:original-d="m 44.285711,283.79079 94.285719,0"
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:20;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 44.285711,283.79079 94.285719,0"
- id="path4138-0-6-63-9"
- inkscape:connector-curvature="0" />
- </g>
- </g>
- <path
- style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:30;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleOutM)"
- d="m 257.14285,685.21935 202.85714,0"
- id="path4286"
- inkscape:connector-curvature="0" />
- </g>
-</svg>
diff --git a/pixmaps/gwy_path_level-24.png b/pixmaps/gwy_path_level-24.png
index 3f219db..486cbf4 100644
Binary files a/pixmaps/gwy_path_level-24.png and b/pixmaps/gwy_path_level-24.png differ
diff --git a/pixmaps/gwy_pointer_measure-24.png b/pixmaps/gwy_pointer_measure-24.png
index fb08713..a55127b 100644
Binary files a/pixmaps/gwy_pointer_measure-24.png and b/pixmaps/gwy_pointer_measure-24.png differ
diff --git a/pixmaps/gwy_poly_distort-24.png b/pixmaps/gwy_poly_distort-24.png
index c1b972d..d1ec76e 100644
Binary files a/pixmaps/gwy_poly_distort-24.png and b/pixmaps/gwy_poly_distort-24.png differ
diff --git a/pixmaps/gwy_poly_distort.svg b/pixmaps/gwy_poly_distort.svg
deleted file mode 100644
index 1fc2f41..0000000
--- a/pixmaps/gwy_poly_distort.svg
+++ /dev/null
@@ -1,301 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="210mm"
- height="210mm"
- viewBox="0 0 744.09449 744.09448"
- id="svg2"
- version="1.1"
- inkscape:version="0.91 r"
- sodipodi:docname="gwy_poly_distort.svg"
- inkscape:export-filename="/home/lila/Documents/Gwyddion/gwy_poly_distort-24.png"
- inkscape:export-xdpi="2.9028571"
- inkscape:export-ydpi="2.9028571">
- <defs
- id="defs4" />
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="0.42953183"
- inkscape:cx="277.11923"
- inkscape:cy="389.94365"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- showgrid="false"
- inkscape:window-width="1024"
- inkscape:window-height="549"
- inkscape:window-x="0"
- inkscape:window-y="0"
- inkscape:window-maximized="1" />
- <metadata
- id="metadata7">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:groupmode="layer"
- id="layer2"
- inkscape:label="Calque 2"
- style="display:inline"
- transform="translate(0,-308.26772)">
- <path
- style="fill:none;fill-rule:evenodd;stroke:#dd1941;stroke-width:22.34856033;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 373.69817,424.98669 0,507.97782"
- id="path4350"
- inkscape:connector-curvature="0" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#dd1941;stroke-width:22.34856033;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 93.557643,677.35784 567.061697,0"
- id="path4350-6"
- inkscape:connector-curvature="0" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#dd1941;stroke-width:22.34856033;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 79.381114,515.58146 c 0,0 144.070306,36.87836 299.282566,35.59081 174.10869,-1.44432 289.83154,-35.59081 289.83154,-35.59081"
- id="path4350-6-0"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="csc" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#dd1941;stroke-width:22.34856033;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 49.263772,352.00276 c 0,0 106.322508,65.66204 330.786008,71.1816 193.0102,4.74613 327.63565,-71.1816 327.63565,-71.1816"
- id="path4350-6-0-7"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="csc" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#dd1941;stroke-width:22.34856033;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 79.174065,839.64236 c 0,0 144.070285,-36.87835 299.282555,-35.5908 174.10869,1.44431 289.83154,35.5908 289.83154,35.5908"
- id="path4350-6-0-2"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="csc" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#dd1941;stroke-width:22.34856033;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 44.599646,1003.9809 c 0,0 106.322504,-65.66203 330.786004,-71.18157 193.0102,-4.74613 327.63564,71.18157 327.63564,71.18157"
- id="path4350-6-0-7-2"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="csc" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#dd1941;stroke-width:22.34856033;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 713.26509,1008.3538 c 0,0 -45.96413,-101.28804 -51.33835,-331.82098 C 657.30557,478.30365 705.564,347.94728 705.564,347.94728"
- id="path4350-6-0-7-2-8"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="csc" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#dd1941;stroke-width:22.34856033;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 38.540996,1013.6519 c 0,0 45.964126,-101.28805 51.338362,-331.82098 C 94.500529,483.60175 46.242086,353.24539 46.242086,353.24539"
- id="path4350-6-0-7-2-8-5"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="csc" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#dd1941;stroke-width:22.34856033;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 209.79567,947.007 c 0,0 25.63932,-113.69221 24.38566,-273.10139 -1.4063,-178.81656 -24.38566,-271.30413 -24.38566,-271.30413"
- id="path4350-6-0-0"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="csc" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#dd1941;stroke-width:22.34856033;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 541.87054,942.97127 c 0,0 -25.63932,-113.69222 -24.38566,-273.10139 1.40628,-178.81657 24.38566,-271.30414 24.38566,-271.30414"
- id="path4350-6-0-0-8"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="csc" />
- </g>
- <g
- inkscape:label="Calque 1"
- inkscape:groupmode="layer"
- id="layer1"
- style="display:inline"
- transform="translate(0,-308.26772)">
- <ellipse
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:30;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="path4136"
- cx="46.302498"
- cy="1002.5283"
- rx="33.078598"
- ry="33.973038" />
- <ellipse
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:30;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="path4136-5"
- cx="210.51413"
- cy="945.90656"
- rx="33.078598"
- ry="33.973038" />
- <ellipse
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:30;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="path4136-5-2"
- cx="374.72574"
- cy="934.58228"
- rx="33.078598"
- ry="33.973038" />
- <ellipse
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:30;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="path4136-5-2-1"
- cx="538.93732"
- cy="945.90656"
- rx="33.078598"
- ry="33.973038" />
- <ellipse
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:30;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="path4136-5-2-1-1"
- cx="703.14899"
- cy="1002.5283"
- rx="33.078598"
- ry="33.973038" />
- <ellipse
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:30;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="path4136-0"
- cx="79.381088"
- cy="838.0827"
- rx="33.078598"
- ry="33.973038" />
- <ellipse
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:30;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="path4136-5-3"
- cx="225.95081"
- cy="813.16913"
- rx="33.078598"
- ry="33.973038" />
- <ellipse
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:30;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="path4136-5-2-7"
- cx="374.72574"
- cy="806.37451"
- rx="33.078598"
- ry="33.973038" />
- <ellipse
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:30;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="path4136-5-2-1-9"
- cx="523.50067"
- cy="813.16913"
- rx="33.078598"
- ry="33.973038" />
- <ellipse
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:30;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="path4136-5-2-1-1-4"
- cx="670.07037"
- cy="838.0827"
- rx="33.078598"
- ry="33.973038" />
- <ellipse
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:30;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="path4136-0-5"
- cx="90.407288"
- cy="678.16663"
- rx="33.078598"
- ry="33.973038" />
- <ellipse
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:30;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="path4136-5-3-6"
- cx="232.56653"
- cy="678.16663"
- rx="33.078598"
- ry="33.973038" />
- <ellipse
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:30;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="path4136-5-2-7-9"
- cx="374.72574"
- cy="678.16663"
- rx="33.078598"
- ry="33.973038" />
- <ellipse
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:30;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="path4136-5-2-1-9-4"
- cx="516.88495"
- cy="678.16663"
- rx="33.078598"
- ry="33.973038" />
- <ellipse
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:30;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="path4136-5-2-1-1-4-6"
- cx="659.04419"
- cy="678.16663"
- rx="33.078598"
- ry="33.973038" />
- <ellipse
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:30;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="path4136-0-5-7"
- cx="79.381088"
- cy="518.25067"
- rx="33.078598"
- ry="33.973038" />
- <ellipse
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:30;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="path4136-5-3-6-6"
- cx="225.95081"
- cy="543.16425"
- rx="33.078598"
- ry="33.973038" />
- <ellipse
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:30;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="path4136-5-2-7-9-7"
- cx="374.72574"
- cy="549.95886"
- rx="33.078598"
- ry="33.973038" />
- <ellipse
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:30;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="path4136-5-2-1-9-4-0"
- cx="523.50067"
- cy="543.16425"
- rx="33.078598"
- ry="33.973038" />
- <ellipse
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:30;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="path4136-5-2-1-1-4-6-4"
- cx="670.07037"
- cy="518.25067"
- rx="33.078598"
- ry="33.973038" />
- <ellipse
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:30;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="path4136-0-5-7-4"
- cx="46.302498"
- cy="353.80511"
- rx="33.078598"
- ry="33.973038" />
- <ellipse
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:30;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="path4136-5-3-6-6-6"
- cx="210.51413"
- cy="410.42685"
- rx="33.078598"
- ry="33.973038" />
- <ellipse
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:30;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="path4136-5-2-7-9-7-7"
- cx="374.72574"
- cy="421.75116"
- rx="33.078598"
- ry="33.973038" />
- <ellipse
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:30;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="path4136-5-2-1-9-4-0-9"
- cx="538.93732"
- cy="410.42685"
- rx="33.078598"
- ry="33.973038" />
- <ellipse
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:30;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="path4136-5-2-1-1-4-6-4-5"
- cx="703.14899"
- cy="353.80511"
- rx="33.078598"
- ry="33.973038" />
- </g>
-</svg>
diff --git a/pixmaps/gwy_polynom-24.png b/pixmaps/gwy_polynom-24.png
index b7a1534..af5a9fe 100644
Binary files a/pixmaps/gwy_polynom-24.png and b/pixmaps/gwy_polynom-24.png differ
diff --git a/pixmaps/gwy_polynom-24.xcf b/pixmaps/gwy_polynom-24.xcf
deleted file mode 100644
index 7836300..0000000
Binary files a/pixmaps/gwy_polynom-24.xcf and /dev/null differ
diff --git a/pixmaps/gwy_polynom_level-24.png b/pixmaps/gwy_polynom_level-24.png
index 2929522..87555d0 100644
Binary files a/pixmaps/gwy_polynom_level-24.png and b/pixmaps/gwy_polynom_level-24.png differ
diff --git a/pixmaps/gwy_presentation_attach-24.png b/pixmaps/gwy_presentation_attach-24.png
deleted file mode 100644
index fa599df..0000000
Binary files a/pixmaps/gwy_presentation_attach-24.png and /dev/null differ
diff --git a/pixmaps/gwy_presentation_edge_canny-24.png b/pixmaps/gwy_presentation_edge_canny-24.png
deleted file mode 100644
index 11316f8..0000000
Binary files a/pixmaps/gwy_presentation_edge_canny-24.png and /dev/null differ
diff --git a/pixmaps/gwy_presentation_edge_harris_corner-24.png b/pixmaps/gwy_presentation_edge_harris_corner-24.png
deleted file mode 100644
index 572c1ee..0000000
Binary files a/pixmaps/gwy_presentation_edge_harris_corner-24.png and /dev/null differ
diff --git a/pixmaps/gwy_presentation_edge_hough-24.png b/pixmaps/gwy_presentation_edge_hough-24.png
deleted file mode 100644
index 5337279..0000000
Binary files a/pixmaps/gwy_presentation_edge_hough-24.png and /dev/null differ
diff --git a/pixmaps/gwy_presentation_edge_inclination-24.png b/pixmaps/gwy_presentation_edge_inclination-24.png
deleted file mode 100644
index dadc051..0000000
Binary files a/pixmaps/gwy_presentation_edge_inclination-24.png and /dev/null differ
diff --git a/pixmaps/gwy_presentation_edge_laplace_gauss-24.png b/pixmaps/gwy_presentation_edge_laplace_gauss-24.png
deleted file mode 100644
index 4d80b3d..0000000
Binary files a/pixmaps/gwy_presentation_edge_laplace_gauss-24.png and /dev/null differ
diff --git a/pixmaps/gwy_presentation_edge_local_non_linearity-24.png b/pixmaps/gwy_presentation_edge_local_non_linearity-24.png
deleted file mode 100644
index 3687640..0000000
Binary files a/pixmaps/gwy_presentation_edge_local_non_linearity-24.png and /dev/null differ
diff --git a/pixmaps/gwy_presentation_edge_prewitt-24.png b/pixmaps/gwy_presentation_edge_prewitt-24.png
deleted file mode 100644
index 3dae950..0000000
Binary files a/pixmaps/gwy_presentation_edge_prewitt-24.png and /dev/null differ
diff --git a/pixmaps/gwy_presentation_edge_rms-24.png b/pixmaps/gwy_presentation_edge_rms-24.png
deleted file mode 100644
index e8a4076..0000000
Binary files a/pixmaps/gwy_presentation_edge_rms-24.png and /dev/null differ
diff --git a/pixmaps/gwy_presentation_edge_rms_edge-24.png b/pixmaps/gwy_presentation_edge_rms_edge-24.png
deleted file mode 100644
index 7ee0b44..0000000
Binary files a/pixmaps/gwy_presentation_edge_rms_edge-24.png and /dev/null differ
diff --git a/pixmaps/gwy_presentation_edge_sobel-24.png b/pixmaps/gwy_presentation_edge_sobel-24.png
deleted file mode 100644
index 64d702e..0000000
Binary files a/pixmaps/gwy_presentation_edge_sobel-24.png and /dev/null differ
diff --git a/pixmaps/gwy_presentation_edge_step-24.png b/pixmaps/gwy_presentation_edge_step-24.png
deleted file mode 100644
index 91fe681..0000000
Binary files a/pixmaps/gwy_presentation_edge_step-24.png and /dev/null differ
diff --git a/pixmaps/gwy_presentation_edge_zero_crossing-24.png b/pixmaps/gwy_presentation_edge_zero_crossing-24.png
deleted file mode 100644
index e674d1c..0000000
Binary files a/pixmaps/gwy_presentation_edge_zero_crossing-24.png and /dev/null differ
diff --git a/pixmaps/gwy_presentation_extract-24.png b/pixmaps/gwy_presentation_extract-24.png
deleted file mode 100644
index 4d95715..0000000
Binary files a/pixmaps/gwy_presentation_extract-24.png and /dev/null differ
diff --git a/pixmaps/gwy_presentation_local_contrast-24.png b/pixmaps/gwy_presentation_local_contrast-24.png
deleted file mode 100644
index 64a2c22..0000000
Binary files a/pixmaps/gwy_presentation_local_contrast-24.png and /dev/null differ
diff --git a/pixmaps/gwy_presentation_log-24.png b/pixmaps/gwy_presentation_log-24.png
deleted file mode 100644
index 23fc661..0000000
Binary files a/pixmaps/gwy_presentation_log-24.png and /dev/null differ
diff --git a/pixmaps/gwy_presentation_rank-24.png b/pixmaps/gwy_presentation_rank-24.png
deleted file mode 100644
index faea2f0..0000000
Binary files a/pixmaps/gwy_presentation_rank-24.png and /dev/null differ
diff --git a/pixmaps/gwy_presentation_remove-24.png b/pixmaps/gwy_presentation_remove-24.png
deleted file mode 100644
index 397f0f9..0000000
Binary files a/pixmaps/gwy_presentation_remove-24.png and /dev/null differ
diff --git a/pixmaps/gwy_presentation_sem-24.png b/pixmaps/gwy_presentation_sem-24.png
deleted file mode 100644
index 5121ded..0000000
Binary files a/pixmaps/gwy_presentation_sem-24.png and /dev/null differ
diff --git a/pixmaps/gwy_presentation_shading-24.png b/pixmaps/gwy_presentation_shading-24.png
deleted file mode 100644
index b5595fe..0000000
Binary files a/pixmaps/gwy_presentation_shading-24.png and /dev/null differ
diff --git a/pixmaps/gwy_previous-24.png b/pixmaps/gwy_previous-24.png
new file mode 100644
index 0000000..a6a7142
Binary files /dev/null and b/pixmaps/gwy_previous-24.png differ
diff --git a/pixmaps/gwy_profile-24.png b/pixmaps/gwy_profile-24.png
index 5232d4c..1a946e3 100644
Binary files a/pixmaps/gwy_profile-24.png and b/pixmaps/gwy_profile-24.png differ
diff --git a/pixmaps/gwy_profile-24.xcf b/pixmaps/gwy_profile-24.xcf
deleted file mode 100644
index 421248c..0000000
Binary files a/pixmaps/gwy_profile-24.xcf and /dev/null differ
diff --git a/pixmaps/gwy_pygwy-24.png b/pixmaps/gwy_pygwy-24.png
index 7f11f1e..2d4303d 100644
Binary files a/pixmaps/gwy_pygwy-24.png and b/pixmaps/gwy_pygwy-24.png differ
diff --git a/pixmaps/gwy_pygwy-24.xcf b/pixmaps/gwy_pygwy-24.xcf
deleted file mode 100644
index 04d63bb..0000000
Binary files a/pixmaps/gwy_pygwy-24.xcf and /dev/null differ
diff --git a/pixmaps/gwy_remove_under_mask-24.png b/pixmaps/gwy_remove_under_mask-24.png
index 7645baf..11b1054 100644
Binary files a/pixmaps/gwy_remove_under_mask-24.png and b/pixmaps/gwy_remove_under_mask-24.png differ
diff --git a/pixmaps/gwy_remove_under_mask-24.xcf b/pixmaps/gwy_remove_under_mask-24.xcf
deleted file mode 100644
index dcd1a77..0000000
Binary files a/pixmaps/gwy_remove_under_mask-24.xcf and /dev/null differ
diff --git a/pixmaps/gwy_rotate-24.png b/pixmaps/gwy_rotate-24.png
index b1a2c9c..84ed68b 100644
Binary files a/pixmaps/gwy_rotate-24.png and b/pixmaps/gwy_rotate-24.png differ
diff --git a/pixmaps/gwy_rotate-24.xcf b/pixmaps/gwy_rotate-24.xcf
deleted file mode 100644
index ad34318..0000000
Binary files a/pixmaps/gwy_rotate-24.xcf and /dev/null differ
diff --git a/pixmaps/gwy_rotate_180-24.png b/pixmaps/gwy_rotate_180-24.png
index 390aa5f..df4f979 100644
Binary files a/pixmaps/gwy_rotate_180-24.png and b/pixmaps/gwy_rotate_180-24.png differ
diff --git a/pixmaps/gwy_rotate_180-24.xcf b/pixmaps/gwy_rotate_180-24.xcf
deleted file mode 100644
index 16a0bcb..0000000
Binary files a/pixmaps/gwy_rotate_180-24.xcf and /dev/null differ
diff --git a/pixmaps/gwy_rotate_3d-24.png b/pixmaps/gwy_rotate_3d-24.png
new file mode 100644
index 0000000..f4a9a34
Binary files /dev/null and b/pixmaps/gwy_rotate_3d-24.png differ
diff --git a/pixmaps/gwy_rotate_90_ccw-24.png b/pixmaps/gwy_rotate_90_ccw-24.png
index 825c228..9d58ad9 100644
Binary files a/pixmaps/gwy_rotate_90_ccw-24.png and b/pixmaps/gwy_rotate_90_ccw-24.png differ
diff --git a/pixmaps/gwy_rotate_90_ccw-24.xcf b/pixmaps/gwy_rotate_90_ccw-24.xcf
deleted file mode 100644
index 70e95e9..0000000
Binary files a/pixmaps/gwy_rotate_90_ccw-24.xcf and /dev/null differ
diff --git a/pixmaps/gwy_rotate_90_cw-24.png b/pixmaps/gwy_rotate_90_cw-24.png
index 14391a5..9aae77b 100644
Binary files a/pixmaps/gwy_rotate_90_cw-24.png and b/pixmaps/gwy_rotate_90_cw-24.png differ
diff --git a/pixmaps/gwy_rotate_90_cw-24.xcf b/pixmaps/gwy_rotate_90_cw-24.xcf
deleted file mode 100644
index a9bcc8f..0000000
Binary files a/pixmaps/gwy_rotate_90_cw-24.xcf and /dev/null differ
diff --git a/pixmaps/gwy_scale-24.png b/pixmaps/gwy_scale-24.png
index 136a4f2..d487c8f 100644
Binary files a/pixmaps/gwy_scale-24.png and b/pixmaps/gwy_scale-24.png differ
diff --git a/pixmaps/gwy_scale-24.xcf b/pixmaps/gwy_scale-24.xcf
deleted file mode 100644
index b8d9959..0000000
Binary files a/pixmaps/gwy_scale-24.xcf and /dev/null differ
diff --git a/pixmaps/gwy_scale_horizontally-24.png b/pixmaps/gwy_scale_horizontally-24.png
index d6e5dc4..250c610 100644
Binary files a/pixmaps/gwy_scale_horizontally-24.png and b/pixmaps/gwy_scale_horizontally-24.png differ
diff --git a/pixmaps/gwy_scale_horizontally-24.xcf b/pixmaps/gwy_scale_horizontally-24.xcf
deleted file mode 100644
index f9c42bf..0000000
Binary files a/pixmaps/gwy_scale_horizontally-24.xcf and /dev/null differ
diff --git a/pixmaps/gwy_scale_vertically-24.png b/pixmaps/gwy_scale_vertically-24.png
index 0730605..7894cb4 100644
Binary files a/pixmaps/gwy_scale_vertically-24.png and b/pixmaps/gwy_scale_vertically-24.png differ
diff --git a/pixmaps/gwy_scale_vertically-24.xcf b/pixmaps/gwy_scale_vertically-24.xcf
deleted file mode 100644
index 71a3025..0000000
Binary files a/pixmaps/gwy_scale_vertically-24.xcf and /dev/null differ
diff --git a/pixmaps/gwy_scars-24.png b/pixmaps/gwy_scars-24.png
index 3296df2..cbe9604 100644
Binary files a/pixmaps/gwy_scars-24.png and b/pixmaps/gwy_scars-24.png differ
diff --git a/pixmaps/gwy_selection-24.xcf b/pixmaps/gwy_selection-24.xcf
deleted file mode 100644
index a6f1e57..0000000
Binary files a/pixmaps/gwy_selection-24.xcf and /dev/null differ
diff --git a/pixmaps/gwy_selections-24.png b/pixmaps/gwy_selections-24.png
index 6f1fbcc..4796ba8 100644
Binary files a/pixmaps/gwy_selections-24.png and b/pixmaps/gwy_selections-24.png differ
diff --git a/pixmaps/gwy_shader-24.png b/pixmaps/gwy_shader-24.png
index 6b8c1c7..998ffab 100644
Binary files a/pixmaps/gwy_shader-24.png and b/pixmaps/gwy_shader-24.png differ
diff --git a/pixmaps/gwy_shader-24.xcf b/pixmaps/gwy_shader-24.xcf
deleted file mode 100644
index 4fc28f9..0000000
Binary files a/pixmaps/gwy_shader-24.xcf and /dev/null differ
diff --git a/pixmaps/gwy_spectrum-24.png b/pixmaps/gwy_spectrum-24.png
index 647900a..9b1ea59 100644
Binary files a/pixmaps/gwy_spectrum-24.png and b/pixmaps/gwy_spectrum-24.png differ
diff --git a/pixmaps/gwy_spectrum-24.xcf b/pixmaps/gwy_spectrum-24.xcf
deleted file mode 100644
index 0f7857d..0000000
Binary files a/pixmaps/gwy_spectrum-24.xcf and /dev/null differ
diff --git a/pixmaps/gwy_spot_remove-24.png b/pixmaps/gwy_spot_remove-24.png
index d99d062..1e31aec 100644
Binary files a/pixmaps/gwy_spot_remove-24.png and b/pixmaps/gwy_spot_remove-24.png differ
diff --git a/pixmaps/gwy_spot_remove-24.xcf b/pixmaps/gwy_spot_remove-24.xcf
deleted file mode 100644
index 63aaac9..0000000
Binary files a/pixmaps/gwy_spot_remove-24.xcf and /dev/null differ
diff --git a/pixmaps/gwy_stat_quantities-24.png b/pixmaps/gwy_stat_quantities-24.png
index d0f3d67..7636b9b 100644
Binary files a/pixmaps/gwy_stat_quantities-24.png and b/pixmaps/gwy_stat_quantities-24.png differ
diff --git a/pixmaps/gwy_stat_quantities-24.xcf b/pixmaps/gwy_stat_quantities-24.xcf
deleted file mode 100644
index 7bc6320..0000000
Binary files a/pixmaps/gwy_stat_quantities-24.xcf and /dev/null differ
diff --git a/pixmaps/gwy_stats-24.xcf b/pixmaps/gwy_stats-24.xcf
deleted file mode 100644
index f0b0a2e..0000000
Binary files a/pixmaps/gwy_stats-24.xcf and /dev/null differ
diff --git a/pixmaps/gwy_straighten_path-24.png b/pixmaps/gwy_straighten_path-24.png
index a6f2804..7751eb2 100644
Binary files a/pixmaps/gwy_straighten_path-24.png and b/pixmaps/gwy_straighten_path-24.png differ
diff --git a/pixmaps/gwy_subscript-20.png b/pixmaps/gwy_subscript-20.png
index c2277ec..953a18f 100644
Binary files a/pixmaps/gwy_subscript-20.png and b/pixmaps/gwy_subscript-20.png differ
diff --git a/pixmaps/gwy_superscript-20.png b/pixmaps/gwy_superscript-20.png
index 1baf2af..a01f57d 100644
Binary files a/pixmaps/gwy_superscript-20.png and b/pixmaps/gwy_superscript-20.png differ
diff --git a/pixmaps/gwy_synthetic-24.xcf b/pixmaps/gwy_synthetic-24.xcf
deleted file mode 100644
index 9cd14a4..0000000
Binary files a/pixmaps/gwy_synthetic-24.xcf and /dev/null differ
diff --git a/pixmaps/gwy_synthetic_ballistic_deposition-24.png b/pixmaps/gwy_synthetic_ballistic_deposition-24.png
index db325f7..d6368f7 100644
Binary files a/pixmaps/gwy_synthetic_ballistic_deposition-24.png and b/pixmaps/gwy_synthetic_ballistic_deposition-24.png differ
diff --git a/pixmaps/gwy_synthetic_brownian_motion-24.png b/pixmaps/gwy_synthetic_brownian_motion-24.png
index 98923a8..4751c3a 100644
Binary files a/pixmaps/gwy_synthetic_brownian_motion-24.png and b/pixmaps/gwy_synthetic_brownian_motion-24.png differ
diff --git a/pixmaps/gwy_synthetic_columnar-24.png b/pixmaps/gwy_synthetic_columnar-24.png
index b92e702..f711f91 100644
Binary files a/pixmaps/gwy_synthetic_columnar-24.png and b/pixmaps/gwy_synthetic_columnar-24.png differ
diff --git a/pixmaps/gwy_synthetic_diffusion-24.png b/pixmaps/gwy_synthetic_diffusion-24.png
index 5258d4b..024a088 100644
Binary files a/pixmaps/gwy_synthetic_diffusion-24.png and b/pixmaps/gwy_synthetic_diffusion-24.png differ
diff --git a/pixmaps/gwy_synthetic_domains-24.png b/pixmaps/gwy_synthetic_domains-24.png
index 2be5361..59f1eda 100644
Binary files a/pixmaps/gwy_synthetic_domains-24.png and b/pixmaps/gwy_synthetic_domains-24.png differ
diff --git a/pixmaps/gwy_synthetic_fibres-24.png b/pixmaps/gwy_synthetic_fibres-24.png
new file mode 100644
index 0000000..a375cee
Binary files /dev/null and b/pixmaps/gwy_synthetic_fibres-24.png differ
diff --git a/pixmaps/gwy_synthetic_lattice-24.png b/pixmaps/gwy_synthetic_lattice-24.png
index 3c0fbf6..afa711f 100644
Binary files a/pixmaps/gwy_synthetic_lattice-24.png and b/pixmaps/gwy_synthetic_lattice-24.png differ
diff --git a/pixmaps/gwy_synthetic_line_noise-24.png b/pixmaps/gwy_synthetic_line_noise-24.png
index 439b959..4e37032 100644
Binary files a/pixmaps/gwy_synthetic_line_noise-24.png and b/pixmaps/gwy_synthetic_line_noise-24.png differ
diff --git a/pixmaps/gwy_synthetic_noise-24.png b/pixmaps/gwy_synthetic_noise-24.png
index afd6ead..8633fc0 100644
Binary files a/pixmaps/gwy_synthetic_noise-24.png and b/pixmaps/gwy_synthetic_noise-24.png differ
diff --git a/pixmaps/gwy_synthetic_objects-24.png b/pixmaps/gwy_synthetic_objects-24.png
index f640fc2..bdb5a5d 100644
Binary files a/pixmaps/gwy_synthetic_objects-24.png and b/pixmaps/gwy_synthetic_objects-24.png differ
diff --git a/pixmaps/gwy_synthetic_particles-24.png b/pixmaps/gwy_synthetic_particles-24.png
index 651d2ce..d3db9cb 100644
Binary files a/pixmaps/gwy_synthetic_particles-24.png and b/pixmaps/gwy_synthetic_particles-24.png differ
diff --git a/pixmaps/gwy_synthetic_pattern-24.png b/pixmaps/gwy_synthetic_pattern-24.png
index c79bb7e..d67a779 100644
Binary files a/pixmaps/gwy_synthetic_pattern-24.png and b/pixmaps/gwy_synthetic_pattern-24.png differ
diff --git a/pixmaps/gwy_synthetic_phases-24.png b/pixmaps/gwy_synthetic_phases-24.png
new file mode 100644
index 0000000..63ecd8b
Binary files /dev/null and b/pixmaps/gwy_synthetic_phases-24.png differ
diff --git a/pixmaps/gwy_synthetic_spectral-24.png b/pixmaps/gwy_synthetic_spectral-24.png
index 1521b37..cbe79bb 100644
Binary files a/pixmaps/gwy_synthetic_spectral-24.png and b/pixmaps/gwy_synthetic_spectral-24.png differ
diff --git a/pixmaps/gwy_synthetic_waves-24.png b/pixmaps/gwy_synthetic_waves-24.png
index 3e63c87..eff1f79 100644
Binary files a/pixmaps/gwy_synthetic_waves-24.png and b/pixmaps/gwy_synthetic_waves-24.png differ
diff --git a/pixmaps/gwy_tilt-24.png b/pixmaps/gwy_tilt-24.png
index 74bba2f..181b61c 100644
Binary files a/pixmaps/gwy_tilt-24.png and b/pixmaps/gwy_tilt-24.png differ
diff --git a/pixmaps/gwy_tip-24.xcf b/pixmaps/gwy_tip-24.xcf
deleted file mode 100644
index 5cd2a8c..0000000
Binary files a/pixmaps/gwy_tip-24.xcf and /dev/null differ
diff --git a/pixmaps/gwy_tip_dilation-24.png b/pixmaps/gwy_tip_dilation-24.png
index 5704053..4b99c67 100644
Binary files a/pixmaps/gwy_tip_dilation-24.png and b/pixmaps/gwy_tip_dilation-24.png differ
diff --git a/pixmaps/gwy_tip_erosion-24.png b/pixmaps/gwy_tip_erosion-24.png
index fe8a7d4..48cc1e2 100644
Binary files a/pixmaps/gwy_tip_erosion-24.png and b/pixmaps/gwy_tip_erosion-24.png differ
diff --git a/pixmaps/gwy_tip_estimation-24.png b/pixmaps/gwy_tip_estimation-24.png
index 9426647..c87f50e 100644
Binary files a/pixmaps/gwy_tip_estimation-24.png and b/pixmaps/gwy_tip_estimation-24.png differ
diff --git a/pixmaps/gwy_tip_indent_analyze-24.png b/pixmaps/gwy_tip_indent_analyze-24.png
index 65305a2..67e2a8b 100644
Binary files a/pixmaps/gwy_tip_indent_analyze-24.png and b/pixmaps/gwy_tip_indent_analyze-24.png differ
diff --git a/pixmaps/gwy_tip_lateral_force-24.png b/pixmaps/gwy_tip_lateral_force-24.png
index 19038b0..b4a961a 100644
Binary files a/pixmaps/gwy_tip_lateral_force-24.png and b/pixmaps/gwy_tip_lateral_force-24.png differ
diff --git a/pixmaps/gwy_tip_map-24.png b/pixmaps/gwy_tip_map-24.png
index 7da7dd9..ff91df3 100644
Binary files a/pixmaps/gwy_tip_map-24.png and b/pixmaps/gwy_tip_map-24.png differ
diff --git a/pixmaps/gwy_tip_model-24.png b/pixmaps/gwy_tip_model-24.png
index 5bcc340..0f57f6c 100644
Binary files a/pixmaps/gwy_tip_model-24.png and b/pixmaps/gwy_tip_model-24.png differ
diff --git a/pixmaps/gwy_tip_pid-24.png b/pixmaps/gwy_tip_pid-24.png
index b7f74fa..2a3606d 100644
Binary files a/pixmaps/gwy_tip_pid-24.png and b/pixmaps/gwy_tip_pid-24.png differ
diff --git a/pixmaps/gwy_transform-24.xcf b/pixmaps/gwy_transform-24.xcf
deleted file mode 100644
index 59a25ed..0000000
Binary files a/pixmaps/gwy_transform-24.xcf and /dev/null differ
diff --git a/pixmaps/gwy_unrotate-24.png b/pixmaps/gwy_unrotate-24.png
index d77a1e7..954a469 100644
Binary files a/pixmaps/gwy_unrotate-24.png and b/pixmaps/gwy_unrotate-24.png differ
diff --git a/pixmaps/gwy_unrotate-24.xcf b/pixmaps/gwy_unrotate-24.xcf
deleted file mode 100644
index 74b464a..0000000
Binary files a/pixmaps/gwy_unrotate-24.xcf and /dev/null differ
diff --git a/pixmaps/gwy_value_invert-24.png b/pixmaps/gwy_value_invert-24.png
index e38a555..4f85f9b 100644
Binary files a/pixmaps/gwy_value_invert-24.png and b/pixmaps/gwy_value_invert-24.png differ
diff --git a/pixmaps/gwy_value_invert-24.xcf b/pixmaps/gwy_value_invert-24.xcf
deleted file mode 100644
index 6ae258d..0000000
Binary files a/pixmaps/gwy_value_invert-24.xcf and /dev/null differ
diff --git a/pixmaps/gwy_volume-24.png b/pixmaps/gwy_volume-24.png
index 5e3ddf2..d1effc9 100644
Binary files a/pixmaps/gwy_volume-24.png and b/pixmaps/gwy_volume-24.png differ
diff --git a/pixmaps/gwy_volume.svg b/pixmaps/gwy_volume.svg
deleted file mode 100644
index 03b6a16..0000000
--- a/pixmaps/gwy_volume.svg
+++ /dev/null
@@ -1,2277 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="210mm"
- height="210mm"
- viewBox="0 0 744.09449 744.09448"
- id="svg2"
- version="1.1"
- inkscape:version="0.91 r"
- sodipodi:docname="gwy_volume.svg"
- inkscape:export-filename="/home/lila/Documents/Gwyddion/gwy_volume_kmedians-24.png"
- inkscape:export-xdpi="2.9028571"
- inkscape:export-ydpi="2.9028571">
- <defs
- id="defs4">
- <inkscape:perspective
- sodipodi:type="inkscape:persp3d"
- inkscape:vp_x="579.14785 : -1066.2599 : 1"
- inkscape:vp_y="0 : 1062.7946 : 0"
- inkscape:vp_z="2869.5315 : -732.23863 : 1"
- inkscape:persp3d-origin="1672.1111 : -1632.2369 : 1"
- id="perspective4576" />
- <inkscape:perspective
- sodipodi:type="inkscape:persp3d"
- inkscape:vp_x="-1083.3522 : 733.7401 : 1"
- inkscape:vp_y="0 : 1062.7946 : 0"
- inkscape:vp_z="1207.0314 : 1067.7614 : 1"
- inkscape:persp3d-origin="9.6110069 : 167.7631 : 1"
- id="perspective4393" />
- <inkscape:perspective
- sodipodi:type="inkscape:persp3d"
- inkscape:vp_x="-570.44355 : -1326.5787 : 1"
- inkscape:vp_y="0 : 1038.2271 : 0"
- inkscape:vp_z="1666.9957 : -1000.2787 : 1"
- inkscape:persp3d-origin="497.25486 : -1879.4726 : 1"
- id="perspective4417" />
- <inkscape:perspective
- sodipodi:type="inkscape:persp3d"
- inkscape:vp_x="-1139.5332 : 610.48281 : 1"
- inkscape:vp_y="0 : 1178.0331 : 0"
- inkscape:vp_z="1399.1962 : 980.72183 : 1"
- inkscape:persp3d-origin="71.939798 : -16.862931 : 1"
- id="perspective4377" />
- <inkscape:perspective
- sodipodi:type="inkscape:persp3d"
- inkscape:vp_x="-2103.2782 : -831.70025 : 1"
- inkscape:vp_y="0 : 1288.1292 : 0"
- inkscape:vp_z="672.71462 : -426.85955 : 1"
- inkscape:persp3d-origin="-778.58386 : -1517.6762 : 1"
- id="perspective4477" />
- <inkscape:perspective
- sodipodi:type="inkscape:persp3d"
- inkscape:vp_x="-2004.599 : 490.36857 : 1"
- inkscape:vp_y="0 : 1327.8548 : 0"
- inkscape:vp_z="384.17156 : 907.6944 : 1"
- inkscape:persp3d-origin="-864.68595 : -216.76269 : 1"
- id="perspective4559" />
- <inkscape:perspective
- sodipodi:type="inkscape:persp3d"
- inkscape:vp_x="-2013.9368 : 639.9549 : 1"
- inkscape:vp_y="0 : 934.52637 : 0"
- inkscape:vp_z="393.15886 : 933.6632 : 1"
- inkscape:persp3d-origin="-865.27896 : 142.28541 : 1"
- id="perspective4412" />
- <inkscape:perspective
- sodipodi:type="inkscape:persp3d"
- inkscape:vp_x="-1693.6484 : 630.52901 : 1"
- inkscape:vp_y="0 : 1075.6437 : 0"
- inkscape:vp_z="624.42587 : 968.58849 : 1"
- inkscape:persp3d-origin="-587.47133 : 57.709386 : 1"
- id="perspective4382" />
- <inkscape:perspective
- sodipodi:type="inkscape:persp3d"
- inkscape:vp_x="-1757.4494 : -266.39067 : 1"
- inkscape:vp_y="0 : 1075.6437 : 0"
- inkscape:vp_z="560.6249 : 71.668813 : 1"
- inkscape:persp3d-origin="-651.2723 : -839.21029 : 1"
- id="perspective4314" />
- <linearGradient
- osb:paint="gradient"
- id="linearGradient5079">
- <stop
- style="stop-color:#d02222;stop-opacity:1"
- offset="0.00000013"
- id="stop5081" />
- <stop
- style="stop-color:#5e5df1;stop-opacity:0.15079366"
- offset="1"
- id="stop5083" />
- </linearGradient>
- <linearGradient
- osb:paint="gradient"
- id="linearGradient5063">
- <stop
- style="stop-color:#ff0000;stop-opacity:1;"
- offset="1.2e-07"
- id="stop5065" />
- <stop
- style="stop-color:#9897ff;stop-opacity:0"
- offset="1"
- id="stop5067" />
- </linearGradient>
- <linearGradient
- id="linearGradient4208"
- inkscape:collect="always">
- <stop
- id="stop5007"
- offset="0"
- style="stop-color:#9897ff;stop-opacity:1" />
- <stop
- id="stop5009"
- offset="0.99999988"
- style="stop-color:#ff0027;stop-opacity:0" />
- </linearGradient>
- <inkscape:perspective
- sodipodi:type="inkscape:persp3d"
- inkscape:vp_x="1410.0668 : -474.74577 : 1"
- inkscape:vp_y="0 : 892.05401 : 0"
- inkscape:vp_z="3332.4946 : -194.38584 : 1"
- inkscape:persp3d-origin="2327.4427 : -949.79717 : 1"
- id="perspective4989" />
- <inkscape:perspective
- sodipodi:type="inkscape:persp3d"
- inkscape:vp_x="-380.5583 : 839.12927 : 1"
- inkscape:vp_y="0 : 892.05401 : 0"
- inkscape:vp_z="1541.8696 : 1119.4892 : 1"
- inkscape:persp3d-origin="536.81771 : 364.07787 : 1"
- id="perspective4915" />
- <inkscape:perspective
- sodipodi:type="inkscape:persp3d"
- inkscape:vp_x="-378.2612 : 798.32029 : 1"
- inkscape:vp_y="0 : 892.05401 : 0"
- inkscape:vp_z="1544.1667 : 1078.6802 : 1"
- inkscape:persp3d-origin="539.1148 : 323.26889 : 1"
- id="perspective4851" />
- <inkscape:perspective
- sodipodi:type="inkscape:persp3d"
- inkscape:vp_x="-640.86455 : 377.42912 : 1"
- inkscape:vp_y="0 : 892.05401 : 0"
- inkscape:vp_z="1281.5634 : 657.78898 : 1"
- inkscape:persp3d-origin="276.51146 : -97.62229 : 1"
- id="perspective6593" />
- <inkscape:perspective
- sodipodi:type="inkscape:persp3d"
- inkscape:vp_x="1127.9417 : -113.99576 : 1"
- inkscape:vp_y="0 : 892.05401 : 0"
- inkscape:vp_z="3050.3696 : 166.36417 : 1"
- inkscape:persp3d-origin="2045.3177 : -589.04716 : 1"
- id="perspective6446" />
- <inkscape:perspective
- sodipodi:type="inkscape:persp3d"
- inkscape:vp_x="1305.4583 : 569.93934 : 1"
- inkscape:vp_y="0 : 916.75086 : 0"
- inkscape:vp_z="3281.1093 : 858.06107 : 1"
- inkscape:persp3d-origin="2248.2322 : 81.73598 : 1"
- id="perspective5579" />
- <inkscape:perspective
- sodipodi:type="inkscape:persp3d"
- inkscape:vp_x="-1083.2832 : -298.89222 : 1"
- inkscape:vp_y="0 : 1178.0331 : 0"
- inkscape:vp_z="1455.4462 : 71.346802 : 1"
- inkscape:persp3d-origin="128.1898 : -926.23796 : 1"
- id="perspective5506" />
- <inkscape:perspective
- sodipodi:type="inkscape:persp3d"
- inkscape:vp_x="-107.02689 : -290.83127 : 1"
- inkscape:vp_y="0 : 1130.0878 : 0"
- inkscape:vp_z="2328.3776 : 64.339272 : 1"
- inkscape:persp3d-origin="1055.1398 : -892.64435 : 1"
- id="perspective4674" />
- <linearGradient
- id="linearGradient5011"
- osb:paint="gradient">
- <stop
- id="stop4198"
- offset="1.2e-07"
- style="stop-color:#d02222;stop-opacity:1" />
- <stop
- id="stop4196"
- offset="1"
- style="stop-color:#5e5df1;stop-opacity:0.15079366" />
- </linearGradient>
- <inkscape:perspective
- sodipodi:type="inkscape:persp3d"
- inkscape:vp_x="367.05649 : 440.42131 : 1"
- inkscape:vp_y="0 : 1038.2271 : 0"
- inkscape:vp_z="2604.4957 : 766.72132 : 1"
- inkscape:persp3d-origin="1434.7549 : -112.47257 : 1"
- id="perspective4136" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient4200"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249"
- gradientTransform="matrix(1.0166406,-0.8880984,0.69777824,0.79877378,-278.89562,640.84743)"
- gradientUnits="userSpaceOnUse" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient5662"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.0373999,-0.92204781,0.71202653,0.82930858,770.52018,1101.786)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient5664"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.0373999,-0.92204781,0.71202653,0.82930858,770.52018,1101.786)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient5666"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.0373999,-0.92204781,0.71202653,0.82930858,770.52018,1101.786)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient5668"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.0373999,-0.92204781,0.71202653,0.82930858,770.52018,1101.786)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient5670"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.0373999,-0.92204781,0.71202653,0.82930858,770.52018,1101.786)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient5672"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.0373999,-0.92204781,0.71202653,0.82930858,770.52018,1101.786)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient5684"
- cx="258.18161"
- cy="528.27838"
- fx="258.18161"
- fy="528.27838"
- r="252.85867"
- gradientTransform="matrix(0.79279122,0,0,0.35620713,1241.4348,384.29822)"
- gradientUnits="userSpaceOnUse" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient5684-3"
- cx="258.18161"
- cy="528.27838"
- fx="258.18161"
- fy="528.27838"
- r="252.85867"
- gradientTransform="matrix(0.79279122,0,0,0.35620713,1241.4348,306.12707)"
- gradientUnits="userSpaceOnUse" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient5684-35"
- cx="258.18161"
- cy="528.27838"
- fx="258.18161"
- fy="528.27838"
- r="252.85867"
- gradientTransform="matrix(0.79279122,0,0,0.35620713,1241.4348,227.95582)"
- gradientUnits="userSpaceOnUse" />
- <marker
- inkscape:stockid="TriangleOutS"
- orient="auto"
- refY="0"
- refX="0"
- id="TriangleOutS-5"
- style="overflow:visible"
- inkscape:isstock="true">
- <path
- inkscape:connector-curvature="0"
- id="path5937-6"
- d="m 5.77,0 -8.65,5 0,-10 8.65,5 z"
- style="fill:#9e0046;fill-opacity:1;fill-rule:evenodd;stroke:#9e0046;stroke-width:1pt;stroke-opacity:1"
- transform="scale(0.2,0.2)" />
- </marker>
- <marker
- inkscape:stockid="TriangleOutS"
- orient="auto"
- refY="0"
- refX="0"
- id="TriangleOutS-2"
- style="overflow:visible"
- inkscape:isstock="true">
- <path
- inkscape:connector-curvature="0"
- id="path5937-80"
- d="m 5.77,0 -8.65,5 0,-10 8.65,5 z"
- style="fill:#440e26;fill-opacity:1;fill-rule:evenodd;stroke:#440e26;stroke-width:1pt;stroke-opacity:1"
- transform="scale(0.2,0.2)" />
- </marker>
- <inkscape:perspective
- sodipodi:type="inkscape:persp3d"
- inkscape:vp_x="-869.1167 : 654.4365 : 1"
- inkscape:vp_y="0 : 888.9086 : 0"
- inkscape:vp_z="1046.5326 : 933.80784 : 1"
- inkscape:persp3d-origin="45.024701 : 181.06017 : 1"
- id="perspective4136-2" />
- <inkscape:perspective
- sodipodi:type="inkscape:persp3d"
- inkscape:vp_x="290.88331 : 305.86508 : 1"
- inkscape:vp_y="0 : 888.9086 : 0"
- inkscape:vp_z="2206.5326 : 585.23642 : 1"
- inkscape:persp3d-origin="1205.0247 : -167.51125 : 1"
- id="perspective4136-1" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient4676"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.1291874,-1.0036291,0.77502551,0.90268449,103.56318,1927.8079)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient4678"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.1291874,-1.0036291,0.77502551,0.90268449,103.56318,1927.8079)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient4680"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.1291874,-1.0036291,0.77502551,0.90268449,103.56318,1927.8079)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient4682"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.1291874,-1.0036291,0.77502551,0.90268449,103.56318,1927.8079)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient4684"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.1291874,-1.0036291,0.77502551,0.90268449,103.56318,1927.8079)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient4686"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.1291874,-1.0036291,0.77502551,0.90268449,103.56318,1927.8079)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient4688"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.0166406,-0.8880984,0.69777824,0.79877378,-278.89562,640.84743)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient5508"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.1770945,-1.0462092,0.80790689,0.94098195,-625.48973,1907.0614)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient5510"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.1770945,-1.0462092,0.80790689,0.94098195,-625.48973,1907.0614)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient5512"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.1770945,-1.0462092,0.80790689,0.94098195,-625.48973,1907.0614)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient5514"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.1770945,-1.0462092,0.80790689,0.94098195,-625.48973,1907.0614)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient5516"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.1770945,-1.0462092,0.80790689,0.94098195,-625.48973,1907.0614)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient5518"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.1770945,-1.0462092,0.80790689,0.94098195,-625.48973,1907.0614)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient5520"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.14223542,0.73057922,-0.88650873,0.17259302,287.33362,964.68678)"
- cx="886.61011"
- cy="98.95752"
- fx="886.61011"
- fy="98.95752"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient5581"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.91602042,-0.81416486,0.62871691,0.73227655,-583.999,874.95438)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient5583"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.91602042,-0.81416486,0.62871691,0.73227655,-583.999,874.95438)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient5585"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.91602042,-0.81416486,0.62871691,0.73227655,-583.999,874.95438)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient5587"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.91602042,-0.81416486,0.62871691,0.73227655,-583.999,874.95438)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient5589"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.91602042,-0.81416486,0.62871691,0.73227655,-583.999,874.95438)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient5591"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.91602042,-0.81416486,0.62871691,0.73227655,-583.999,874.95438)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient5593"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.0166406,-0.8880984,0.69777824,0.79877378,-278.89562,640.84743)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient6448"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.89134326,-0.79223167,0.61177956,0.71254935,1474.6013,1587.2373)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient6450"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.89134326,-0.79223167,0.61177956,0.71254935,1474.6013,1587.2373)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient6452"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.89134326,-0.79223167,0.61177956,0.71254935,1474.6013,1587.2373)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient6454"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.89134326,-0.79223167,0.61177956,0.71254935,1474.6013,1587.2373)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient6456"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.89134326,-0.79223167,0.61177956,0.71254935,1474.6013,1587.2373)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient6458"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.89134326,-0.79223167,0.61177956,0.71254935,1474.6013,1587.2373)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient6460"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.0166406,-0.8880984,0.69777824,0.79877378,-278.89562,640.84743)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- <inkscape:perspective
- sodipodi:type="inkscape:persp3d"
- inkscape:vp_x="-638.87688 : 380.82872 : 1"
- inkscape:vp_y="0 : 892.05401 : 0"
- inkscape:vp_z="1283.5511 : 661.18865 : 1"
- inkscape:persp3d-origin="278.49914 : -94.222677 : 1"
- id="perspective6446-1" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5011"
- id="radialGradient5075"
- cx="513.76498"
- cy="863.11524"
- fx="513.76498"
- fy="863.11524"
- r="223.11502"
- gradientTransform="matrix(1,0,0,0.84153748,2043.75,993.02145)"
- gradientUnits="userSpaceOnUse" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5079"
- id="radialGradient5077"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.8879503,-0.65829278,0.50117752,0.6760225,-375.00674,617.83768)"
- cx="513.76495"
- cy="863.11523"
- fx="513.76495"
- fy="863.11523"
- r="223.11502" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5011"
- id="radialGradient4278"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1,0,0,0.84153748,2043.75,993.02145)"
- cx="513.76498"
- cy="863.11524"
- fx="513.76498"
- fy="863.11524"
- r="223.11502" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5011"
- id="radialGradient4280"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1,0,0,0.84153748,2043.75,993.02145)"
- cx="513.76498"
- cy="863.11524"
- fx="513.76498"
- fy="863.11524"
- r="223.11502" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5011"
- id="radialGradient4282"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1,0,0,0.84153748,2043.75,993.02145)"
- cx="513.76498"
- cy="863.11524"
- fx="513.76498"
- fy="863.11524"
- r="223.11502" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5011"
- id="radialGradient4284"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1,0,0,0.84153748,2043.75,993.02145)"
- cx="513.76498"
- cy="863.11524"
- fx="513.76498"
- fy="863.11524"
- r="223.11502" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5011"
- id="radialGradient4286"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1,0,0,0.84153748,2043.75,993.02145)"
- cx="513.76498"
- cy="863.11524"
- fx="513.76498"
- fy="863.11524"
- r="223.11502" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient4316"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.0747867,-0.95527736,0.73768721,0.85919598,-1339.4453,1826.2515)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient4318"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.0747867,-0.95527736,0.73768721,0.85919598,-1339.4453,1826.2515)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient4320"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.0747867,-0.95527736,0.73768721,0.85919598,-1339.4453,1826.2515)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient4322"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.0747867,-0.95527736,0.73768721,0.85919598,-1339.4453,1826.2515)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient4324"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.0747867,-0.95527736,0.73768721,0.85919598,-1339.4453,1826.2515)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient4326"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.0747867,-0.95527736,0.73768721,0.85919598,-1339.4453,1826.2515)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient4328"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.14223542,0.73057922,-0.88650873,0.17259302,287.33362,964.68678)"
- cx="886.61011"
- cy="98.95752"
- fx="886.61011"
- fy="98.95752"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient4414"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.116062,-0.82995124,0.76601677,0.74647511,-1579.8801,853.32542)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient4416"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.116062,-0.82995124,0.76601677,0.74647511,-1579.8801,853.32542)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient4418"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.116062,-0.82995124,0.76601677,0.74647511,-1579.8801,853.32542)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient4420"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.116062,-0.82995124,0.76601677,0.74647511,-1579.8801,853.32542)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient4422"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.116062,-0.82995124,0.76601677,0.74647511,-1579.8801,853.32542)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient4424"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.116062,-0.82995124,0.76601677,0.74647511,-1579.8801,853.32542)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient4426"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.14223542,0.73057922,-0.88650873,0.17259302,287.33362,964.68678)"
- cx="886.61011"
- cy="98.95752"
- fx="886.61011"
- fy="98.95752"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient4561"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.1075655,-1.1792656,0.7601851,1.0606556,-1573.8468,1188.4878)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient4563"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.1075655,-1.1792656,0.7601851,1.0606556,-1573.8468,1188.4878)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient4565"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.1075655,-1.1792656,0.7601851,1.0606556,-1573.8468,1188.4878)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient4567"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.1075655,-1.1792656,0.7601851,1.0606556,-1573.8468,1188.4878)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient4569"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.1075655,-1.1792656,0.7601851,1.0606556,-1573.8468,1188.4878)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient4571"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.1075655,-1.1792656,0.7601851,1.0606556,-1573.8468,1188.4878)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient4573"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.14223542,0.73057922,-0.88650873,0.17259302,287.33362,964.68678)"
- cx="886.61011"
- cy="98.95752"
- fx="886.61011"
- fy="98.95752"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient4479"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.2871029,-1.1439854,0.88341189,1.0289238,-1602.7004,2491.8138)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient4481"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.2871029,-1.1439854,0.88341189,1.0289238,-1602.7004,2491.8138)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient4483"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.2871029,-1.1439854,0.88341189,1.0289238,-1602.7004,2491.8138)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient4485"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.2871029,-1.1439854,0.88341189,1.0289238,-1602.7004,2491.8138)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient4487"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.2871029,-1.1439854,0.88341189,1.0289238,-1602.7004,2491.8138)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient4489"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.2871029,-1.1439854,0.88341189,1.0289238,-1602.7004,2491.8138)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient4491"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.14223542,0.73057922,-0.88650873,0.17259302,287.33362,964.68678)"
- cx="886.61011"
- cy="98.95752"
- fx="886.61011"
- fy="98.95752"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient4431"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.0166406,-0.8880984,0.69777824,0.79877378,-278.89562,640.84743)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient4433"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.77915915,-0.01183729,0.01214757,0.79958283,311.08572,1675.9881)"
- cx="214.6425"
- cy="724.03302"
- fx="214.6425"
- fy="724.03302"
- r="252.85867" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="linearGradient4458"
- x1="3.1249955"
- y1="866.42468"
- x2="331.25"
- y2="860.17468"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0,1,-1,0,1642.9872,2450.6122)" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient4395"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.0619478,-0.94386608,0.72887515,0.84893244,-670.34135,820.0584)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient4397"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.0619478,-0.94386608,0.72887515,0.84893244,-670.34135,820.0584)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient4399"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.0619478,-0.94386608,0.72887515,0.84893244,-670.34135,820.0584)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient4401"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.0619478,-0.94386608,0.72887515,0.84893244,-670.34135,820.0584)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient4403"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.0619478,-0.94386608,0.72887515,0.84893244,-670.34135,820.0584)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient4405"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.0619478,-0.94386608,0.72887515,0.84893244,-670.34135,820.0584)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient4407"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.0166406,-0.8880984,0.69777824,0.79877378,-278.89562,640.84743)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient4578"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.0619478,-0.94386608,0.72887515,0.84893244,992.15865,2620.0584)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient4580"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.0619478,-0.94386608,0.72887515,0.84893244,992.15865,2620.0584)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient4582"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.0619478,-0.94386608,0.72887515,0.84893244,992.15865,2620.0584)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient4584"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.0619478,-0.94386608,0.72887515,0.84893244,992.15865,2620.0584)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient4586"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.0619478,-0.94386608,0.72887515,0.84893244,992.15865,2620.0584)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient4588"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.0619478,-0.94386608,0.72887515,0.84893244,992.15865,2620.0584)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4208"
- id="radialGradient4590"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.0166406,-0.8880984,0.69777824,0.79877378,-278.89562,640.84743)"
- cx="634.46106"
- cy="384.5603"
- fx="634.46106"
- fy="384.5603"
- r="249.13249" />
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="0.45254833"
- inkscape:cx="366.24401"
- inkscape:cy="7.4441515"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- showgrid="false"
- inkscape:window-width="1024"
- inkscape:window-height="549"
- inkscape:window-x="0"
- inkscape:window-y="0"
- inkscape:window-maximized="1" />
- <metadata
- id="metadata7">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title />
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Calque 1"
- inkscape:groupmode="layer"
- id="layer1"
- transform="translate(0,-308.26772)">
- <path
- style="fill:none;fill-rule:evenodd;stroke:#00647e;stroke-width:30;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m -712.23849,1533.6569 268.75001,-125"
- id="path4330-1"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cc" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#00647e;stroke-width:30;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m -455.98849,1408.6569 409.375022,43.75"
- id="path4330-8"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cc" />
- <g
- id="g5050">
- <g
- inkscape:corner7="-0.22247021 : 0.21005412 : 0.25 : 1"
- inkscape:corner0="-0.018186238 : 0.43389687 : 0 : 1"
- inkscape:perspectiveID="#perspective4136"
- style="fill:url(#radialGradient4200);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:20;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="g4180"
- sodipodi:type="inkscape:box3d">
- <path
- points="1740.2494,1042.5482 1950.5222,858.39117 1687.9203,817.51986 1454.532,952.95262 "
- d="m 1454.532,952.95262 285.7174,89.59558 210.2728,-184.15703 -262.6019,-40.87131 z"
- inkscape:box3dsidetype="13"
- style="fill:url(#radialGradient5662);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:23.35959244;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path4190"
- sodipodi:type="inkscape:box3dside" />
- <path
- points="1454.532,952.95262 1687.9203,817.51986 1687.9203,628.85529 1454.532,716.24825 "
- d="m 1454.532,716.24825 0,236.70437 233.3883,-135.43276 0,-188.66457 z"
- inkscape:box3dsidetype="6"
- style="fill:url(#radialGradient5664);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:23.35959244;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path4182"
- sodipodi:type="inkscape:box3dside" />
- <path
- points="1950.5222,632.21806 1950.5222,858.39117 1687.9203,817.51986 1687.9203,628.85529 "
- d="m 1687.9203,628.85529 262.6019,3.36277 0,226.17311 -262.6019,-40.87131 z"
- inkscape:box3dsidetype="11"
- style="fill:url(#radialGradient5666);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:23.35959244;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path4192"
- sodipodi:type="inkscape:box3dside" />
- <path
- points="1740.2494,743.6534 1950.5222,632.21806 1687.9203,628.85529 1454.532,716.24825 "
- d="m 1454.532,716.24825 285.7174,27.40515 210.2728,-111.43534 -262.6019,-3.36277 z"
- inkscape:box3dsidetype="5"
- style="fill:url(#radialGradient5668);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:23.35959244;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path4184"
- sodipodi:type="inkscape:box3dside" />
- <path
- points="1740.2494,1042.5482 1950.5222,858.39117 1950.5222,632.21806 1740.2494,743.6534 "
- d="m 1740.2494,743.6534 0,298.8948 210.2728,-184.15703 0,-226.17311 z"
- inkscape:box3dsidetype="14"
- style="fill:url(#radialGradient5670);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:23.35959244;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path4188"
- sodipodi:type="inkscape:box3dside" />
- <path
- points="1740.2494,743.6534 1740.2494,1042.5482 1454.532,952.95262 1454.532,716.24825 "
- d="m 1454.532,716.24825 285.7174,27.40515 0,298.8948 -285.7174,-89.59558 z"
- inkscape:box3dsidetype="3"
- style="fill:url(#radialGradient5672);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:23.35959244;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path4186"
- sodipodi:type="inkscape:box3dside" />
- </g>
- <path
- inkscape:connector-curvature="0"
- id="path5676"
- d="m 1257.2906,593.83331 174.4141,-106.46053 203.8606,31.71164 -163.0885,138.17219 z"
- style="fill:url(#radialGradient5684);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:18.42146873;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <path
- inkscape:connector-curvature="0"
- id="path5676-2"
- d="m 1257.2906,515.66215 174.4141,-106.46052 203.8606,31.71164 -163.0885,138.17218 z"
- style="fill:url(#radialGradient5684-3);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:18.42146873;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <path
- inkscape:connector-curvature="0"
- id="path5676-1"
- d="m 1257.2906,437.49091 174.4141,-106.46052 203.8606,31.71164 -163.0885,138.17218 z"
- style="fill:url(#radialGradient5684-35);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:18.42146873;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <path
- sodipodi:nodetypes="cccccccccccc"
- inkscape:connector-curvature="0"
- id="rect4663"
- d="m 1680.6537,337.08451 0,76.22829 92.9948,0 c 37.8732,0 51.3144,9.05369 51.3144,35.7748 l 0,47.34151 -50.1668,0 93.9822,111.27698 93.8375,-111.27698 -50.0219,0 c -0.1938,-51.46833 0.021,-30.47266 0.1913,-83.11631 0,-50.40257 -41.6509,-76.22829 -87.8223,-76.22829 z"
- style="fill:#a270c6;fill-opacity:0.74594595;stroke:#000000;stroke-width:13.78146648;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
- </g>
- <g
- id="g5276"
- transform="translate(228.57143,-51.428571)">
- <g
- sodipodi:type="inkscape:box3d"
- id="g4660"
- style="fill:url(#radialGradient4688);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:20;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- inkscape:perspectiveID="#perspective4674"
- inkscape:corner0="-0.018186238 : 0.43389687 : 0 : 1"
- inkscape:corner7="-0.22247021 : 0.21005412 : 0.25 : 1">
- <path
- sodipodi:type="inkscape:box3dside"
- id="path4662"
- style="fill:url(#radialGradient4676);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:25.42641258;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- inkscape:box3dsidetype="13"
- d="m 848.09529,1765.806 310.99731,97.5228 228.8774,-200.4509 -285.8365,-44.4876 z"
- points="1159.0926,1863.3288 1387.97,1662.8779 1102.1335,1618.3903 848.09529,1765.806 " />
- <path
- sodipodi:type="inkscape:box3dside"
- id="path4664"
- style="fill:url(#radialGradient4678);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:25.42641258;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- inkscape:box3dsidetype="6"
- d="m 848.09529,1508.1584 0,257.6476 254.03821,-147.4157 0,-205.3573 z"
- points="848.09529,1765.806 1102.1335,1618.3903 1102.1335,1413.033 848.09529,1508.1584 " />
- <path
- sodipodi:type="inkscape:box3dside"
- id="path4666"
- style="fill:url(#radialGradient4680);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:25.42641258;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- inkscape:box3dsidetype="11"
- d="m 1102.1335,1413.033 285.8365,3.6603 0,246.1846 -285.8365,-44.4876 z"
- points="1387.97,1416.6933 1387.97,1662.8779 1102.1335,1618.3903 1102.1335,1413.033 " />
- <path
- sodipodi:type="inkscape:box3dside"
- id="path4668"
- style="fill:url(#radialGradient4682);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:25.42641258;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- inkscape:box3dsidetype="5"
- d="m 848.09529,1508.1584 310.99731,29.8299 228.8774,-121.295 -285.8365,-3.6603 z"
- points="1159.0926,1537.9883 1387.97,1416.6933 1102.1335,1413.033 848.09529,1508.1584 " />
- <path
- sodipodi:type="inkscape:box3dside"
- id="path4670"
- style="fill:url(#radialGradient4684);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:25.42641258;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- inkscape:box3dsidetype="14"
- d="m 1159.0926,1537.9883 0,325.3405 228.8774,-200.4509 0,-246.1846 z"
- points="1159.0926,1863.3288 1387.97,1662.8779 1387.97,1416.6933 1159.0926,1537.9883 " />
- <path
- sodipodi:type="inkscape:box3dside"
- id="path4672"
- style="fill:url(#radialGradient4686);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:25.42641258;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- inkscape:box3dsidetype="3"
- d="m 848.09529,1508.1584 310.99731,29.8299 0,325.3405 -310.99731,-97.5228 z"
- points="1159.0926,1537.9883 1159.0926,1863.3288 848.09529,1765.806 848.09529,1508.1584 " />
- </g>
- <g
- style="stroke-width:41.50059509;stroke-miterlimit:4;stroke-dasharray:none"
- transform="matrix(0.84587212,0,0,0.61777333,522.69194,659.43804)"
- id="g5163">
- <path
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:41.50059509;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 1133.0953,1201.8648 0,420.2235"
- id="path5131"
- inkscape:connector-curvature="0" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:41.50059509;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 1195.7248,1214.2317 -125.259,0"
- id="path5131-4"
- inkscape:connector-curvature="0" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:41.50059509;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 1195.7248,1608.2927 -125.259,0"
- id="path5131-4-5"
- inkscape:connector-curvature="0" />
- </g>
- <g
- inkscape:transform-center-y="13.029297"
- inkscape:transform-center-x="3.25732"
- style="stroke-width:36.40202713;stroke-miterlimit:4;stroke-dasharray:none"
- transform="matrix(0.68189651,0.68189651,-0.49801556,0.49801556,1308.7482,384.02081)"
- id="g5163-6">
- <path
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:36.40202713;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 1133.0953,1201.8648 0,420.2235"
- id="path5131-7"
- inkscape:connector-curvature="0" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:36.40202713;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 1195.7248,1214.2317 -125.259,0"
- id="path5131-4-52"
- inkscape:connector-curvature="0" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:36.40202713;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 1195.7248,1608.2927 -125.259,0"
- id="path5131-4-5-1"
- inkscape:connector-curvature="0" />
- </g>
- <g
- style="stroke-width:34.53853989;stroke-miterlimit:4;stroke-dasharray:none"
- transform="matrix(0.3661698,-0.98750893,0.7212162,0.26742806,-463.08972,2672.4643)"
- id="g5163-4">
- <path
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:34.53853989;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 1133.0953,1201.8648 0,420.2235"
- id="path5131-5"
- inkscape:connector-curvature="0" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:34.53853989;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 1195.7248,1214.2317 -125.259,0"
- id="path5131-4-7"
- inkscape:connector-curvature="0" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:34.53853989;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 1195.7248,1608.2927 -125.259,0"
- id="path5131-4-5-6"
- inkscape:connector-curvature="0" />
- </g>
- </g>
- <g
- sodipodi:type="inkscape:box3d"
- id="g5468"
- style="fill:url(#radialGradient5520);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:20;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- inkscape:perspectiveID="#perspective5506"
- inkscape:corner0="-0.018186238 : 0.43389687 : 0 : 1"
- inkscape:corner7="-0.22247021 : 0.21005412 : 0.25 : 1">
- <path
- sodipodi:type="inkscape:box3dside"
- id="path5470"
- style="fill:url(#radialGradient5508);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:26.50515938;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- inkscape:box3dsidetype="13"
- d="m 150.63004,1738.1863 324.19169,101.6604 238.58784,-208.9553 -297.9635,-46.375 z"
- points="474.82173,1839.8467 713.40957,1630.8914 415.44607,1584.5164 150.63004,1738.1863 " />
- <path
- sodipodi:type="inkscape:box3dside"
- id="path5472"
- style="fill:url(#radialGradient5510);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:26.50515938;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- inkscape:box3dsidetype="6"
- d="m 150.63004,1469.6077 0,268.5786 264.81603,-153.6699 0,-214.0699 z"
- points="150.63004,1738.1863 415.44607,1584.5164 415.44607,1370.4465 150.63004,1469.6077 " />
- <path
- sodipodi:type="inkscape:box3dside"
- id="path5474"
- style="fill:url(#radialGradient5512);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:26.50515938;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- inkscape:box3dsidetype="11"
- d="m 415.44607,1370.4465 297.9635,3.8156 0,256.6293 -297.9635,-46.375 z"
- points="713.40957,1374.2621 713.40957,1630.8914 415.44607,1584.5164 415.44607,1370.4465 " />
- <path
- sodipodi:type="inkscape:box3dside"
- id="path5476"
- style="fill:url(#radialGradient5514);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:26.50515938;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- inkscape:box3dsidetype="5"
- d="m 150.63004,1469.6077 324.19169,31.0955 238.58784,-126.4411 -297.9635,-3.8156 z"
- points="474.82173,1500.7032 713.40957,1374.2621 415.44607,1370.4465 150.63004,1469.6077 " />
- <path
- sodipodi:type="inkscape:box3dside"
- id="path5478"
- style="fill:url(#radialGradient5516);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:26.50515938;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- inkscape:box3dsidetype="14"
- d="m 474.82173,1500.7032 0,339.1435 238.58784,-208.9553 0,-256.6293 z"
- points="474.82173,1839.8467 713.40957,1630.8914 713.40957,1374.2621 474.82173,1500.7032 " />
- <path
- sodipodi:type="inkscape:box3dside"
- id="path5480"
- style="fill:url(#radialGradient5518);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:26.50515938;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- inkscape:box3dsidetype="3"
- d="m 150.63004,1469.6077 324.19169,31.0955 0,339.1435 -324.19169,-101.6604 z"
- points="474.82173,1500.7032 474.82173,1839.8467 150.63004,1738.1863 150.63004,1469.6077 " />
- </g>
- <g
- id="g6303"
- transform="translate(2245.7143,40)">
- <g
- sodipodi:type="inkscape:box3d"
- id="g5565"
- style="fill:url(#radialGradient5593);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:20;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- inkscape:perspectiveID="#perspective5579"
- inkscape:corner0="-0.018186238 : 0.43389687 : 0 : 1"
- inkscape:corner7="-0.22247021 : 0.21005412 : 0.25 : 1">
- <path
- sodipodi:type="inkscape:box3dside"
- id="path5567"
- style="fill:url(#radialGradient5581);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:20.62644005;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- inkscape:box3dsidetype="13"
- d="m 19.980991,743.53503 252.287469,79.11258 185.67017,-162.61 -231.87657,-36.08922 z"
- points="272.26846,822.64761 457.93863,660.03761 226.06206,623.94839 19.980991,743.53503 " />
- <path
- sodipodi:type="inkscape:box3dside"
- id="path5569"
- style="fill:url(#radialGradient5583);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:20.62644005;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- inkscape:box3dsidetype="6"
- d="m 19.980991,534.52591 0,209.00912 206.081069,-119.58664 0,-166.59015 z"
- points="19.980991,743.53503 226.06206,623.94839 226.06206,457.35824 19.980991,534.52591 " />
- <path
- sodipodi:type="inkscape:box3dside"
- id="path5571"
- style="fill:url(#radialGradient5585);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:20.62644005;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- inkscape:box3dsidetype="11"
- d="m 226.06206,457.35824 231.87657,2.96931 0,199.71006 -231.87657,-36.08922 z"
- points="457.93863,460.32755 457.93863,660.03761 226.06206,623.94839 226.06206,457.35824 " />
- <path
- sodipodi:type="inkscape:box3dside"
- id="path5573"
- style="fill:url(#radialGradient5587);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:20.62644005;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- inkscape:box3dsidetype="5"
- d="M 19.980991,534.52591 272.26846,558.72456 457.93863,460.32755 226.06206,457.35824 Z"
- points="272.26846,558.72456 457.93863,460.32755 226.06206,457.35824 19.980991,534.52591 " />
- <path
- sodipodi:type="inkscape:box3dside"
- id="path5575"
- style="fill:url(#radialGradient5589);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:20.62644005;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- inkscape:box3dsidetype="14"
- d="m 272.26846,558.72456 0,263.92305 185.67017,-162.61 0,-199.71006 z"
- points="272.26846,822.64761 457.93863,660.03761 457.93863,460.32755 272.26846,558.72456 " />
- <path
- sodipodi:type="inkscape:box3dside"
- id="path5577"
- style="fill:url(#radialGradient5591);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:20.62644005;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- inkscape:box3dsidetype="3"
- d="m 19.980991,534.52591 252.287469,24.19865 0,263.92305 -252.287469,-79.11258 z"
- points="272.26846,558.72456 272.26846,822.64761 19.980991,743.53503 19.980991,534.52591 " />
- </g>
- <path
- sodipodi:nodetypes="ccccc"
- inkscape:connector-curvature="0"
- id="rect5599"
- d="m 651.1181,348.35242 79.27825,0 0,679.31838 -79.27825,0 z"
- style="fill:#999999;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:20;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
- <path
- inkscape:transform-center-y="8.1872131"
- inkscape:transform-center-x="-1.4855337"
- sodipodi:nodetypes="cccscc"
- inkscape:connector-curvature="0"
- id="rect5599-4"
- d="m 730.39635,330.99237 0,100.1846 -319.17105,0 c 0,0 3.21751,-32.44724 23.63014,-47.05155 33.71507,-24.12161 170.10288,-53.13305 170.10288,-53.13305 z"
- style="fill:#999999;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:20;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
- <path
- inkscape:transform-center-y="-8.1872093"
- inkscape:transform-center-x="-1.4855328"
- sodipodi:nodetypes="cccscc"
- inkscape:connector-curvature="0"
- id="rect5599-4-4"
- d="m 730.39635,836.54507 0,-100.18459 -319.171,0 c 0,0 3.21751,32.44723 23.63013,47.05153 33.71508,24.12162 170.10292,53.13306 170.10292,53.13306 z"
- style="fill:#999999;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:20;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
- </g>
- <g
- inkscape:corner7="-0.22247021 : 0.21005412 : 0.25 : 1"
- inkscape:corner0="-0.018186238 : 0.43389687 : 0 : 1"
- inkscape:perspectiveID="#perspective6446"
- style="fill:url(#radialGradient6460);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:20;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="g6432"
- sodipodi:type="inkscape:box3d">
- <path
- points="2307.8013,1536.3397 2488.4696,1378.1103 2262.8397,1342.9933 2062.3103,1459.3583 "
- d="m 2062.3103,1459.3583 245.491,76.9814 180.6683,-158.2294 -225.6299,-35.117 z"
- inkscape:box3dsidetype="13"
- style="fill:url(#radialGradient6448);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:20.07077217;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path6434"
- sodipodi:type="inkscape:box3dside" />
- <path
- points="2062.3103,1459.3583 2262.8397,1342.9933 2262.8397,1180.891 2062.3103,1255.9798 "
- d="m 2062.3103,1255.9798 0,203.3785 200.5294,-116.365 0,-162.1023 z"
- inkscape:box3dsidetype="6"
- style="fill:url(#radialGradient6450);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:20.07077217;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path6436"
- sodipodi:type="inkscape:box3dside" />
- <path
- points="2488.4696,1183.7803 2488.4696,1378.1103 2262.8397,1342.9933 2262.8397,1180.891 "
- d="m 2262.8397,1180.891 225.6299,2.8893 0,194.33 -225.6299,-35.117 z"
- inkscape:box3dsidetype="11"
- style="fill:url(#radialGradient6452);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:20.07077217;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path6438"
- sodipodi:type="inkscape:box3dside" />
- <path
- points="2307.8013,1279.5266 2488.4696,1183.7803 2262.8397,1180.891 2062.3103,1255.9798 "
- d="m 2062.3103,1255.9798 245.491,23.5468 180.6683,-95.7463 -225.6299,-2.8893 z"
- inkscape:box3dsidetype="5"
- style="fill:url(#radialGradient6454);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:20.07077217;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path6440"
- sodipodi:type="inkscape:box3dside" />
- <path
- points="2307.8013,1536.3397 2488.4696,1378.1103 2488.4696,1183.7803 2307.8013,1279.5266 "
- d="m 2307.8013,1279.5266 0,256.8131 180.6683,-158.2294 0,-194.33 z"
- inkscape:box3dsidetype="14"
- style="fill:url(#radialGradient6456);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:20.07077217;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path6442"
- sodipodi:type="inkscape:box3dside" />
- <path
- points="2307.8013,1279.5266 2307.8013,1536.3397 2062.3103,1459.3583 2062.3103,1255.9798 "
- d="m 2062.3103,1255.9798 245.491,23.5468 0,256.8131 -245.491,-76.9814 z"
- inkscape:box3dsidetype="3"
- style="fill:url(#radialGradient6458);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:20.07077217;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path6444"
- sodipodi:type="inkscape:box3dside" />
- </g>
- <g
- sodipodi:type="inkscape:box3d"
- id="g4975"
- style="fill:url(#radialGradient5077);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:20;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- inkscape:perspectiveID="#perspective4989"
- inkscape:corner0="-0.018186238 : 0.43389687 : 0 : 1"
- inkscape:corner7="-0.22247021 : 0.21005412 : 0.25 : 1">
- <path
- sodipodi:type="inkscape:box3dside"
- id="path4977"
- style="fill:url(#radialGradient4278);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:20.07077217;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- inkscape:box3dsidetype="13"
- d="m 2344.4353,1820.1083 245.491,76.9814 180.6683,-158.2294 -225.6299,-35.117 z"
- points="2589.9263,1897.0897 2770.5946,1738.8603 2544.9647,1703.7433 2344.4353,1820.1083 " />
- <path
- sodipodi:type="inkscape:box3dside"
- id="path4979"
- style="fill:url(#radialGradient4280);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:20.07077217;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- inkscape:box3dsidetype="6"
- d="m 2344.4353,1616.7298 0,203.3785 200.5294,-116.365 0,-162.1023 z"
- points="2344.4353,1820.1083 2544.9647,1703.7433 2544.9647,1541.641 2344.4353,1616.7298 " />
- <path
- sodipodi:type="inkscape:box3dside"
- id="path4981"
- style="fill:url(#radialGradient4282);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:20.07077217;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- inkscape:box3dsidetype="11"
- d="m 2544.9647,1541.641 225.6299,2.8893 0,194.33 -225.6299,-35.117 z"
- points="2770.5946,1544.5303 2770.5946,1738.8603 2544.9647,1703.7433 2544.9647,1541.641 " />
- <path
- sodipodi:type="inkscape:box3dside"
- id="path4983"
- style="fill:url(#radialGradient4284);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:20.07077217;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- inkscape:box3dsidetype="5"
- d="m 2344.4353,1616.7298 245.491,23.5468 180.6683,-95.7463 -225.6299,-2.8893 z"
- points="2589.9263,1640.2766 2770.5946,1544.5303 2544.9647,1541.641 2344.4353,1616.7298 " />
- <path
- sodipodi:type="inkscape:box3dside"
- id="path4985"
- style="fill:url(#radialGradient4286);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:20.07077217;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- inkscape:box3dsidetype="14"
- d="m 2589.9263,1640.2766 0,256.8131 180.6683,-158.2294 0,-194.33 z"
- points="2589.9263,1897.0897 2770.5946,1738.8603 2770.5946,1544.5303 2589.9263,1640.2766 " />
- <path
- sodipodi:type="inkscape:box3dside"
- id="path4987"
- style="fill:url(#radialGradient5075);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:20.07077217;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- inkscape:box3dsidetype="3"
- d="m 2344.4353,1616.7298 245.491,23.5468 0,256.8131 -245.491,-76.9814 z"
- points="2589.9263,1640.2766 2589.9263,1897.0897 2344.4353,1820.1083 2344.4353,1616.7298 " />
- </g>
- <path
- style="fill:#a270c6;fill-opacity:0.74594595;stroke:#000000;stroke-width:13.78146648;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- d="m 2534.3021,1212.0297 0,76.2283 44.9948,0 c 37.8732,0 51.3144,9.0537 51.3144,35.7748 l 0,71.3415 -50.1668,0 93.9822,111.277 93.8375,-111.277 -50.0219,0 c -0.1938,-51.4683 0.021,-54.4726 0.1913,-107.1163 0,-50.4025 -41.6509,-76.2283 -87.8223,-76.2283 z"
- id="rect4663-5"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccccccccccc" />
- <g
- inkscape:corner7="-0.22247021 : 0.21005412 : 0.25 : 1"
- inkscape:corner0="-0.018186238 : 0.43389687 : 0 : 1"
- inkscape:perspectiveID="#perspective4314"
- style="fill:url(#radialGradient4328);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:20;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="g4300"
- sodipodi:type="inkscape:box3d">
- <path
- points="-334.76809,1764.8788 -116.91723,1574.085 -388.98305,1531.7407 -630.78246,1672.0543 "
- d="m -630.78246,1672.0543 296.01437,92.8245 217.85086,-190.7938 -272.06582,-42.3443 z"
- inkscape:box3dsidetype="13"
- style="fill:url(#radialGradient4316);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:24.20144844;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path4302"
- sodipodi:type="inkscape:box3dside" />
- <path
- points="-630.78246,1672.0543 -388.98305,1531.7407 -388.98305,1336.2769 -630.78246,1426.8194 "
- d="m -630.78246,1426.8194 0,245.2349 241.79941,-140.3136 0,-195.4638 z"
- inkscape:box3dsidetype="6"
- style="fill:url(#radialGradient4318);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:24.20144844;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path4304"
- sodipodi:type="inkscape:box3dside" />
- <path
- points="-116.91723,1339.7608 -116.91723,1574.085 -388.98305,1531.7407 -388.98305,1336.2769 "
- d="m -388.98305,1336.2769 272.06582,3.4839 0,234.3242 -272.06582,-42.3443 z"
- inkscape:box3dsidetype="11"
- style="fill:url(#radialGradient4320);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:24.20144844;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path4306"
- sodipodi:type="inkscape:box3dside" />
- <path
- points="-334.76809,1455.2122 -116.91723,1339.7608 -388.98305,1336.2769 -630.78246,1426.8194 "
- d="m -630.78246,1426.8194 296.01437,28.3928 217.85086,-115.4514 -272.06582,-3.4839 z"
- inkscape:box3dsidetype="5"
- style="fill:url(#radialGradient4322);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:24.20144844;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path4308"
- sodipodi:type="inkscape:box3dside" />
- <path
- points="-334.76809,1764.8788 -116.91723,1574.085 -116.91723,1339.7608 -334.76809,1455.2122 "
- d="m -334.76809,1455.2122 0,309.6666 217.85086,-190.7938 0,-234.3242 z"
- inkscape:box3dsidetype="14"
- style="fill:url(#radialGradient4324);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:24.20144844;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path4310"
- sodipodi:type="inkscape:box3dside" />
- <path
- points="-334.76809,1455.2122 -334.76809,1764.8788 -630.78246,1672.0543 -630.78246,1426.8194 "
- d="m -630.78246,1426.8194 296.01437,28.3928 0,309.6666 -296.01437,-92.8245 z"
- inkscape:box3dsidetype="3"
- style="fill:url(#radialGradient4326);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:24.20144844;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path4312"
- sodipodi:type="inkscape:box3dside" />
- </g>
- <path
- style="fill:none;fill-rule:evenodd;stroke:#00647e;stroke-width:30;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m -720.05099,1536.7819 481.25002,75"
- id="path4330"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cc" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#00647e;stroke-width:30;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m -246.61348,1611.7819 198.437512,-162.5"
- id="path4330-7"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cc" />
- <g
- sodipodi:type="inkscape:box3d"
- id="g4545"
- style="fill:url(#radialGradient4573);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:20;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- inkscape:perspectiveID="#perspective4559"
- inkscape:corner0="-0.020875419 : 0.34843243 : 0 : 1"
- inkscape:corner7="-0.22247021 : 0.21005412 : 0.24804643 : 1">
- <path
- sodipodi:type="inkscape:box3dside"
- id="path4547"
- style="fill:url(#radialGradient4561);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:27.29643822;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- inkscape:box3dsidetype="13"
- d="m -840.38243,999.33317 301.85337,113.39163 223.16488,-234.13479 -277.5008,-52.0092 z"
- points="-538.52906,1112.7248 -315.36418,878.59001 -592.86498,826.58081 -840.38243,999.33317 " />
- <path
- sodipodi:type="inkscape:box3dside"
- id="path4549"
- style="fill:url(#radialGradient4563);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:27.29643822;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- inkscape:box3dsidetype="6"
- d="m -840.38243,811.66931 0,187.66386 247.51745,-172.75236 0,-149.73162 z"
- points="-840.38243,999.33317 -592.86498,826.58081 -592.86498,676.84919 -840.38243,811.66931 " />
- <path
- sodipodi:type="inkscape:box3dside"
- id="path4551"
- style="fill:url(#radialGradient4565);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:27.29643822;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- inkscape:box3dsidetype="11"
- d="m -592.86498,676.84919 277.5008,22.57685 0,179.16397 -277.5008,-52.0092 z"
- points="-315.36418,699.42604 -315.36418,878.59001 -592.86498,826.58081 -592.86498,676.84919 " />
- <path
- sodipodi:type="inkscape:box3dside"
- id="path4553"
- style="fill:url(#radialGradient4567);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:27.29643822;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- inkscape:box3dsidetype="5"
- d="m -840.38243,811.66931 301.85337,64.7349 223.16488,-176.97817 -277.5008,-22.57685 z"
- points="-538.52906,876.40421 -315.36418,699.42604 -592.86498,676.84919 -840.38243,811.66931 " />
- <path
- sodipodi:type="inkscape:box3dside"
- id="path4555"
- style="fill:url(#radialGradient4569);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:27.29643822;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- inkscape:box3dsidetype="14"
- d="m -538.52906,876.40421 0,236.32059 223.16488,-234.13479 0,-179.16397 z"
- points="-538.52906,1112.7248 -315.36418,878.59001 -315.36418,699.42604 -538.52906,876.40421 " />
- <path
- sodipodi:type="inkscape:box3dside"
- id="path4557"
- style="fill:url(#radialGradient4571);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:27.29643822;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- inkscape:box3dsidetype="3"
- d="m -840.38243,811.66931 301.85337,64.7349 0,236.32059 -301.85337,-113.39163 z"
- points="-538.52906,876.40421 -538.52906,1112.7248 -840.38243,999.33317 -840.38243,811.66931 " />
- </g>
- <path
- style="fill:#056e6e;fill-opacity:0.76190479;fill-rule:nonzero;stroke:#000000;stroke-width:19.16188049;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- d="m -600.211,630.23733 391.07706,39.02955 -278.51442,274.2873 -469.63158,-116.05779 z"
- id="rect4575"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccccc" />
- <g
- inkscape:corner7="-0.22247021 : 0.21005412 : 0.24804643 : 1"
- inkscape:corner0="-0.020875419 : 0.39044879 : 0 : 1"
- inkscape:perspectiveID="#perspective4412"
- style="fill:url(#radialGradient4426);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:20;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="g4398"
- sodipodi:type="inkscape:box3d">
- <path
- points="-536.61997,800.00452 -311.74315,635.22359 -591.37278,598.62021 -840.789,720.20101 "
- d="m -840.789,720.20101 304.16903,79.80351 224.87682,-164.78093 -279.62963,-36.60338 z"
- inkscape:box3dsidetype="13"
- style="fill:url(#radialGradient4414);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:22.98719215;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path4400"
- sodipodi:type="inkscape:box3dside" />
- <path
- points="-840.789,720.20101 -591.37278,598.62021 -591.37278,461.24443 -840.789,548.02314 "
- d="m -840.789,548.02314 0,172.17787 249.41622,-121.5808 0,-137.37578 z"
- inkscape:box3dsidetype="6"
- style="fill:url(#radialGradient4416);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:22.98719215;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path4402"
- sodipodi:type="inkscape:box3dside" />
- <path
- points="-311.74315,470.84422 -311.74315,635.22359 -591.37278,598.62021 -591.37278,461.24443 "
- d="m -591.37278,461.24443 279.62963,9.59979 0,164.37937 -279.62963,-36.60338 z"
- inkscape:box3dsidetype="11"
- style="fill:url(#radialGradient4418);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:22.98719215;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path4404"
- sodipodi:type="inkscape:box3dside" />
- <path
- points="-536.61997,583.18507 -311.74315,470.84422 -591.37278,461.24443 -840.789,548.02314 "
- d="m -840.789,548.02314 304.16903,35.16193 224.87682,-112.34085 -279.62963,-9.59979 z"
- inkscape:box3dsidetype="5"
- style="fill:url(#radialGradient4420);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:22.98719215;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path4406"
- sodipodi:type="inkscape:box3dside" />
- <path
- points="-536.61997,800.00452 -311.74315,635.22359 -311.74315,470.84422 -536.61997,583.18507 "
- d="m -536.61997,583.18507 0,216.81945 224.87682,-164.78093 0,-164.37937 z"
- inkscape:box3dsidetype="14"
- style="fill:url(#radialGradient4422);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:22.98719215;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path4408"
- sodipodi:type="inkscape:box3dside" />
- <path
- points="-536.61997,583.18507 -536.61997,800.00452 -840.789,720.20101 -840.789,548.02314 "
- d="m -840.789,548.02314 304.16903,35.16193 0,216.81945 -304.16903,-79.80351 z"
- inkscape:box3dsidetype="3"
- style="fill:url(#radialGradient4424);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:22.98719215;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path4410"
- sodipodi:type="inkscape:box3dside" />
- </g>
- <g
- inkscape:corner7="-0.22247021 : 0.21005412 : 0.25 : 1"
- inkscape:corner0="-0.018186238 : 0.43389687 : 0 : 1"
- inkscape:perspectiveID="#perspective4477"
- style="fill:url(#radialGradient4491);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:20;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="g4463"
- sodipodi:type="inkscape:box3d">
- <path
- points="-399.55654,2418.3174 -138.67088,2189.8336 -464.48132,2139.1245 -754.0464,2307.156 "
- d="m -754.0464,2307.156 354.48986,111.1614 260.88566,-228.4838 -325.81044,-50.7091 z"
- inkscape:box3dsidetype="13"
- style="fill:url(#radialGradient4479);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:28.98226738;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path4465"
- sodipodi:type="inkscape:box3dside" />
- <path
- points="-754.0464,2307.156 -464.48132,2139.1245 -464.48132,1905.0482 -754.0464,2013.4767 "
- d="m -754.0464,2013.4767 0,293.6793 289.56508,-168.0315 0,-234.0763 z"
- inkscape:box3dsidetype="6"
- style="fill:url(#radialGradient4481);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:28.98226738;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path4467"
- sodipodi:type="inkscape:box3dside" />
- <path
- points="-138.67088,1909.2204 -138.67088,2189.8336 -464.48132,2139.1245 -464.48132,1905.0482 "
- d="m -464.48132,1905.0482 325.81044,4.1722 0,280.6132 -325.81044,-50.7091 z"
- inkscape:box3dsidetype="11"
- style="fill:url(#radialGradient4483);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:28.98226738;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path4469"
- sodipodi:type="inkscape:box3dside" />
- <path
- points="-399.55654,2047.4784 -138.67088,1909.2204 -464.48132,1905.0482 -754.0464,2013.4767 "
- d="m -754.0464,2013.4767 354.48986,34.0017 260.88566,-138.258 -325.81044,-4.1722 z"
- inkscape:box3dsidetype="5"
- style="fill:url(#radialGradient4485);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:28.98226738;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path4471"
- sodipodi:type="inkscape:box3dside" />
- <path
- points="-399.55654,2418.3174 -138.67088,2189.8336 -138.67088,1909.2204 -399.55654,2047.4784 "
- d="m -399.55654,2047.4784 0,370.839 260.88566,-228.4838 0,-280.6132 z"
- inkscape:box3dsidetype="14"
- style="fill:url(#radialGradient4487);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:28.98226738;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path4473"
- sodipodi:type="inkscape:box3dside" />
- <path
- points="-399.55654,2047.4784 -399.55654,2418.3174 -754.0464,2307.156 -754.0464,2013.4767 "
- d="m -754.0464,2013.4767 354.48986,34.0017 0,370.839 -354.48986,-111.1614 z"
- inkscape:box3dsidetype="3"
- style="fill:url(#radialGradient4489);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:28.98226738;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path4475"
- sodipodi:type="inkscape:box3dside" />
- </g>
- <text
- xml:space="preserve"
- style="font-style:normal;font-weight:normal;font-size:83.20240021px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- x="-724.07745"
- y="2613.4546"
- id="text4493"
- sodipodi:linespacing="125%"><tspan
- sodipodi:role="line"
- id="tspan4495"
- x="-724.07745"
- y="2613.4546"
- style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:277.34133911px;font-family:'Droid Sans';-inkscape-font-specification:'Droid Sans Bold'">F - D</tspan></text>
- <g
- inkscape:corner7="-0.22247021 : 0.21005412 : 0.25 : 1"
- inkscape:corner0="-0.018186238 : 0.43389687 : 0 : 1"
- inkscape:perspectiveID="#perspective4417"
- style="fill:url(#radialGradient4431);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:20;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="g4395"
- sodipodi:type="inkscape:box3d">
- <path
- points="802.74937,2809.5482 1013.0222,2625.3912 750.42026,2584.5199 517.03194,2719.9527 "
- d="m 517.03194,2719.9527 285.71743,89.5955 210.27283,-184.157 -262.60194,-40.8713 z"
- inkscape:box3dsidetype="13"
- style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:23.35959244;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path4397"
- sodipodi:type="inkscape:box3dside" />
- <path
- points="517.03194,2719.9527 750.42026,2584.5199 750.42026,2395.8553 517.03194,2483.2483 "
- d="m 517.03194,2483.2483 0,236.7044 233.38832,-135.4328 0,-188.6646 z"
- inkscape:box3dsidetype="6"
- style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:23.35959244;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path4399"
- sodipodi:type="inkscape:box3dside" />
- <path
- points="1013.0222,2399.2181 1013.0222,2625.3912 750.42026,2584.5199 750.42026,2395.8553 "
- d="m 750.42026,2395.8553 262.60194,3.3628 0,226.1731 -262.60194,-40.8713 z"
- inkscape:box3dsidetype="11"
- style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:23.35959244;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path4401"
- sodipodi:type="inkscape:box3dside" />
- <path
- points="802.74937,2809.5482 1013.0222,2625.3912 1013.0222,2399.2181 802.74937,2510.6534 "
- d="m 802.74937,2510.6534 0,298.8948 210.27283,-184.157 0,-226.1731 z"
- inkscape:box3dsidetype="14"
- style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:23.35959244;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path4405"
- sodipodi:type="inkscape:box3dside" />
- <path
- points="802.74937,2510.6534 802.74937,2809.5482 517.03194,2719.9527 517.03194,2483.2483 "
- d="m 517.03194,2483.2483 285.71743,27.4051 0,298.8948 -285.71743,-89.5955 z"
- inkscape:box3dsidetype="3"
- style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:23.35959244;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path4407"
- sodipodi:type="inkscape:box3dside" />
- </g>
- <path
- inkscape:connector-curvature="0"
- id="path4409"
- d="m 338.09032,2390.5408 0,-286.0945 288.87814,0 0,286.0945 z"
- style="fill:url(#radialGradient4433);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:18.10680008;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:"
- sodipodi:nodetypes="ccccc" />
- <path
- sodipodi:nodetypes="cccccccccccc"
- inkscape:connector-curvature="0"
- id="path4415"
- d="m 690.02871,2104.0845 0,76.2283 92.9948,0 c 37.8732,0 51.3144,9.0537 51.3144,35.7748 l 0,47.3415 -50.1668,0 93.9822,111.277 93.8375,-111.277 -50.0219,0 c -0.1938,-51.4683 0.021,-30.4726 0.1913,-83.1163 0,-50.4025 -41.6509,-76.2283 -87.8223,-76.2283 z"
- style="fill:#a270c6;fill-opacity:0.74594595;stroke:#000000;stroke-width:13.78146648;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-start:" />
- <path
- style="fill:url(#linearGradient4458);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:20;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-start:"
- d="m 1003.125,2628.7372 -204.68749,168.75 -268.75,-84.375 c 0,0 112.89908,-291.1009 239.97779,-286.0485 127.07872,5.0523 149.53474,66.8535 233.4597,201.6735 z"
- id="rect4450"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccczc" />
- <path
- style="fill:none;fill-opacity:0.76190479;fill-rule:nonzero;stroke:#000000;stroke-width:24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-start:"
- d="m 802.66737,2510.6344 208.27013,-106.8972 1.5625,221.875 -208.45969,181.8187 z"
- id="rect4461"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccccc" />
- <path
- style="fill:none;fill-opacity:0.76190479;fill-rule:nonzero;stroke:#000000;stroke-width:24;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-start:"
- d="m 516.94291,2483.5547 285.60996,27.895 0.45765,295.9002 -286.90438,-86.6608 z"
- id="rect4461-3"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccccc" />
- <g
- sodipodi:type="inkscape:box3d"
- id="g4379"
- style="fill:url(#radialGradient4407);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:20;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- inkscape:perspectiveID="#perspective4393"
- inkscape:corner0="-0.018186238 : 0.43389687 : 0 : 1"
- inkscape:corner7="-0.22247021 : 0.21005412 : 0.25 : 1">
- <path
- sodipodi:type="inkscape:box3dside"
- id="path4381"
- style="fill:url(#radialGradient4395);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:23.9123497;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- inkscape:box3dsidetype="13"
- d="M 29.856077,667.70319 322.3344,759.41887 537.5829,570.90413 268.76705,529.06568 Z"
- points="322.3344,759.41887 537.5829,570.90413 268.76705,529.06568 29.856077,667.70319 " />
- <path
- sodipodi:type="inkscape:box3dside"
- id="path4383"
- style="fill:url(#radialGradient4397);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:23.9123497;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- inkscape:box3dsidetype="6"
- d="m 29.856077,425.3977 0,242.30549 238.910973,-138.63751 0,-193.12892 z"
- points="29.856077,667.70319 268.76705,529.06568 268.76705,335.93676 29.856077,425.3977 " />
- <path
- sodipodi:type="inkscape:box3dside"
- id="path4385"
- style="fill:url(#radialGradient4399);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:23.9123497;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- inkscape:box3dsidetype="11"
- d="m 268.76705,335.93676 268.81585,3.44233 0,231.52504 -268.81585,-41.83845 z"
- points="537.5829,339.37909 537.5829,570.90413 268.76705,529.06568 268.76705,335.93676 " />
- <path
- sodipodi:type="inkscape:box3dside"
- id="path4387"
- style="fill:url(#radialGradient4401);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:23.9123497;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- inkscape:box3dsidetype="5"
- d="M 29.856077,425.3977 322.3344,453.45134 537.5829,339.37909 268.76705,335.93676 Z"
- points="322.3344,453.45134 537.5829,339.37909 268.76705,335.93676 29.856077,425.3977 " />
- <path
- sodipodi:type="inkscape:box3dside"
- id="path4389"
- style="fill:url(#radialGradient4403);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:23.9123497;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- inkscape:box3dsidetype="14"
- d="m 322.3344,453.45134 0,305.96753 215.2485,-188.51474 0,-231.52504 z"
- points="322.3344,759.41887 537.5829,570.90413 537.5829,339.37909 322.3344,453.45134 " />
- <path
- sodipodi:type="inkscape:box3dside"
- id="path4391"
- style="fill:url(#radialGradient4405);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:23.9123497;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- inkscape:box3dsidetype="3"
- d="m 29.856077,425.3977 292.478323,28.05364 0,305.96753 -292.478323,-91.71568 z"
- points="322.3344,453.45134 322.3344,759.41887 29.856077,667.70319 29.856077,425.3977 " />
- </g>
- <text
- xml:space="preserve"
- style="font-style:normal;font-weight:normal;font-size:340.30142212px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- x="54.434803"
- y="1023.5525"
- id="text4409"
- sodipodi:linespacing="125%"><tspan
- sodipodi:role="line"
- id="tspan4411"
- x="54.434803"
- y="1023.5525"
- style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'">k</tspan></text>
- <path
- style="fill:#4d21ac;fill-opacity:0.76190478;fill-rule:nonzero;stroke:none;stroke-width:33.14562988;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- d="m 708.96753,894.86804 c -16.367,-0.49543 -33.09923,0.89775 -49.58867,1.67374 -22.41797,2.07179 -47.38533,3.91935 -65.07735,19.51376 -13.13018,13.44556 -19.97455,31.54897 -27.60979,48.3924 -6.12944,15.4023 -12.09668,31.10039 -15.65583,47.27946 2.3865,4.6982 9.47721,2.7078 13.80468,3.6836 47.58806,1.3847 95.21038,0.4761 142.8125,0.7441 4.41007,-3.5954 0.85571,-11.6477 2,-16.99995 0,-34.25977 0,-68.51953 0,-102.7793 l -0.41389,-0.91032 -0.27165,-0.59749 z"
- id="path4480"
- inkscape:connector-curvature="0" />
- <path
- style="fill:#b72cba;fill-opacity:0.76190478;fill-rule:nonzero;stroke:none;stroke-width:33.14562988;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- d="m 711.81923,871.97937 c -0.57919,-42.74963 0.23626,-85.59766 -0.3457,-128.33399 -2.35588,-5.15355 -9.64124,-1.91564 -14.1875,-2.9707 -23.3882,0.15739 -46.80299,0.67514 -70.16211,1.07812 -7.54874,0.1298 -9.44315,8.9739 -13.10156,14.13672 -7.76587,13.56528 -10.22523,29.61827 -7.36323,44.94357 3.86998,28.86375 13.20862,58.24323 32.42182,80.65214 4.29111,6.54747 12.31765,3.39 18.77562,3.58508 17.23921,-1.09449 34.84945,-0.74519 51.83054,-3.34795 2.31234,-2.32876 2.00678,-6.62538 2. [...]
- id="path4482"
- inkscape:connector-curvature="0" />
- <path
- style="fill:#bb1c58;fill-opacity:0.76190478;fill-rule:nonzero;stroke:none;stroke-width:33.14562988;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- d="m 608.87587,849.81726 c -3.35826,-13.18922 -9.35851,-25.75394 -10.19922,-39.5586 -2.95695,-20.58694 -2.71828,-43.209 8.25196,-61.66796 1.77146,-3.89024 -0.82233,-8.204 -5.32698,-7.34259 -19.88786,-1.27402 -39.85863,-0.45524 -59.76677,-0.3957 -6.45975,0.28651 -14.59503,2.11458 -15.75391,9.65039 -2.70598,14.90113 -1.96405,31.0429 6.24414,44.25 12.17381,20.37744 31.66868,35.05688 50.76367,48.54688 7.04931,3.81447 13.49564,10.21105 21.64063,11.24805 2.49549,-0.0736 4.35436,-2.25245 [...]
- id="path4484"
- inkscape:connector-curvature="0" />
- <path
- style="fill:#2e5dff;fill-opacity:0.76190478;fill-rule:nonzero;stroke:none;stroke-width:33.14562988;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- d="m 627.579,885.38757 c -3.19993,-11.77867 -14.78547,-19.08579 -26.02735,-22.08594 -26.52143,-10.75514 -49.40984,-29.58788 -68.20507,-50.59375 -5.28403,-5.75439 -8.29031,-14.19794 -14.51758,-18.55273 -8.36882,1.97178 -14.98369,8.43488 -21.06676,14.17692 -19.40024,20.8605 -23.21023,51.16519 -21.25577,78.43703 0.65063,13.65785 0.44187,28.08137 5.82057,40.82746 5.34714,5.50319 11.64592,-2.17085 16.66407,-4.2461 14.47969,-7.26358 31.01399,-12.36111 47.51953,-10.58008 9.30981,1.11987 [...]
- id="path4486"
- inkscape:connector-curvature="0" />
- <path
- style="fill:#ff00bc;fill-opacity:0.76190478;fill-rule:nonzero;stroke:none;stroke-width:33.14562988;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- d="m 567.45009,931.89538 c -2.48569,-5.2873 -9.92811,-6.29646 -15.20898,-8.05664 -22.49197,-5.33216 -44.92494,5.03616 -62.742,18.0777 -22.01612,15.85071 -41.83541,36.52433 -52.11931,61.96136 -1.2088,4.3345 -2.6544,10.9221 1.4883,13.7832 28.91055,1.0622 57.87125,0.434 86.78121,0.072 5.16339,-0.6885 12.95231,-0.5803 13.81641,-7.2363 4.15551,-19.9186 12.18782,-38.91368 19.67297,-57.81124 2.50155,-6.99827 6.631,-13.63944 8.3114,-20.79034 z"
- id="path4488"
- inkscape:connector-curvature="0" />
- <path
- style="fill:#f23eff;fill-opacity:0.76190478;fill-rule:nonzero;stroke:none;stroke-width:33.14562988;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- d="m 518.41493,778.14734 c -1.46174,-12.18947 1.63376,-24.59597 -1.44335,-36.66602 -5.93146,-4.67084 -14.73252,-2.18514 -21.85352,-2.85742 -18.05847,-0.14646 -36.26282,-0.037 -54.23436,-0.0645 -6.7795,1.62168 -8.2243,9.79434 -6.6055,15.58203 0.1657,72.1367 -0.3311,144.35667 0.2481,216.4414 2.4979,6.96201 12.1915,4.10387 14.5918,-1.45898 8.53578,-10.54382 20.36714,-18.54934 27.39847,-30.15477 -1.62771,-12.19128 -6.37659,-23.55792 -6.53492,-35.91916 -2.56591,-30.55598 -2.7709,-63.93 [...]
- id="path4492"
- inkscape:connector-curvature="0" />
- <rect
- style="fill:none;fill-opacity:0.76190479;fill-rule:nonzero;stroke:#000000;stroke-width:25.22850037;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="rect4413"
- width="295.64648"
- height="295.64648"
- x="731.10144"
- y="-721.26074"
- transform="matrix(0,1,-1,0,0,0)" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:15;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 712.5,889.86219 c 0,0 -84.56123,-7.80797 -117.72992,16.92976 C 561.60139,931.52967 540.625,1024.2372 540.625,1024.2372"
- id="path4416"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="czc" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:15;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 633.31433,730.98015 c 0,0 -41.98447,17.67767 -30.81208,76.81793 11.72086,62.04363 36.748,80.88354 36.748,80.88354"
- id="path4416-3"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="csc" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:15;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 574.5842,928.97494 c 0,0 -33.7147,-30.63517 -82.64975,4.40414 C 440.5971,970.13857 431.287,1002.982 431.287,1002.982"
- id="path4416-3-6"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="csc" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:15;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 525.82681,738.99301 c 0,0 -23.99703,38.72129 19.35293,80.47262 45.47812,43.80104 76.79172,44.67208 76.79172,44.67208"
- id="path4416-3-7"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="csc" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:15;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 528.11613,787.14477 c 0,0 -45.46572,2.8397 -54.42606,62.35529 -9.40025,62.43737 8.01184,88.47809 8.01184,88.47809"
- id="path4416-3-7-5"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="csc" />
- <g
- inkscape:corner7="-0.22247021 : 0.21005412 : 0.25 : 1"
- inkscape:corner0="-0.018186238 : 0.43389687 : 0 : 1"
- inkscape:perspectiveID="#perspective4576"
- style="fill:url(#radialGradient4590);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:20;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="g4532"
- sodipodi:type="inkscape:box3d">
- <path
- points="1984.8345,2559.4189 2200.083,2370.9041 1931.2671,2329.0657 1692.3562,2467.7032 "
- d="m 1692.3562,2467.7032 292.4783,91.7157 215.2485,-188.5148 -268.8159,-41.8384 z"
- inkscape:box3dsidetype="13"
- style="fill:url(#radialGradient4578);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:23.9123497;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path4534"
- sodipodi:type="inkscape:box3dside" />
- <path
- points="1692.3562,2467.7032 1931.2671,2329.0657 1931.2671,2135.9368 1692.3562,2225.3977 "
- d="m 1692.3562,2225.3977 0,242.3055 238.9109,-138.6375 0,-193.1289 z"
- inkscape:box3dsidetype="6"
- style="fill:url(#radialGradient4580);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:23.9123497;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path4536"
- sodipodi:type="inkscape:box3dside" />
- <path
- points="2200.083,2139.3791 2200.083,2370.9041 1931.2671,2329.0657 1931.2671,2135.9368 "
- d="m 1931.2671,2135.9368 268.8159,3.4423 0,231.525 -268.8159,-41.8384 z"
- inkscape:box3dsidetype="11"
- style="fill:url(#radialGradient4582);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:23.9123497;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path4538"
- sodipodi:type="inkscape:box3dside" />
- <path
- points="1984.8345,2253.4514 2200.083,2139.3791 1931.2671,2135.9368 1692.3562,2225.3977 "
- d="m 1692.3562,2225.3977 292.4783,28.0537 215.2485,-114.0723 -268.8159,-3.4423 z"
- inkscape:box3dsidetype="5"
- style="fill:url(#radialGradient4584);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:23.9123497;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path4540"
- sodipodi:type="inkscape:box3dside" />
- <path
- points="1984.8345,2559.4189 2200.083,2370.9041 2200.083,2139.3791 1984.8345,2253.4514 "
- d="m 1984.8345,2253.4514 0,305.9675 215.2485,-188.5148 0,-231.525 z"
- inkscape:box3dsidetype="14"
- style="fill:url(#radialGradient4586);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:23.9123497;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path4542"
- sodipodi:type="inkscape:box3dside" />
- <path
- points="1984.8345,2253.4514 1984.8345,2559.4189 1692.3562,2467.7032 1692.3562,2225.3977 "
- d="m 1692.3562,2225.3977 292.4783,28.0537 0,305.9675 -292.4783,-91.7157 z"
- inkscape:box3dsidetype="3"
- style="fill:url(#radialGradient4588);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:23.9123497;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path4544"
- sodipodi:type="inkscape:box3dside" />
- </g>
- <text
- sodipodi:linespacing="125%"
- id="text4546"
- y="2823.5525"
- x="1716.9348"
- style="font-style:normal;font-weight:normal;font-size:340.30142212px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- xml:space="preserve"><tspan
- style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold'"
- y="2823.5525"
- x="1716.9348"
- id="tspan4548"
- sodipodi:role="line">k</tspan></text>
- <g
- transform="matrix(0,1,-1,0,3114.8622,2105.4872)"
- id="g4550">
- <path
- style="fill:#e64cd4;fill-opacity:0.76190479;fill-rule:nonzero;stroke:none;stroke-width:33.14562988;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- d="m 589.38086,743.39467 c -0.49543,16.367 0.89775,33.09923 1.67374,49.58867 2.07179,22.41797 3.91935,47.38533 19.51376,65.07735 13.44556,13.13018 31.54897,19.97455 48.3924,27.60979 15.4023,6.12944 31.10039,12.09668 47.27947,15.65583 4.69817,-2.3865 2.7078,-9.47721 3.6836,-13.80468 1.38472,-47.58806 0.47611,-95.21038 0.74414,-142.8125 -3.59546,-4.41007 -11.64775,-0.85571 -17,-2 -34.25977,0 -68.51953,0 -102.7793,0 l -0.91032,0.41389 -0.59749,0.27165 z"
- id="path4552"
- inkscape:connector-curvature="0" />
- <path
- style="fill:#5b2cba;fill-opacity:0.76190479;fill-rule:nonzero;stroke:none;stroke-width:33.14562988;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- d="m 566.49219,740.54297 c -42.74963,0.57919 -85.59766,-0.23626 -128.33399,0.3457 -5.15355,2.35588 -1.91564,9.64124 -2.9707,14.1875 0.15739,23.3882 0.67514,46.80299 1.07812,70.16211 0.1298,7.54874 8.9739,9.44315 14.13672,13.10156 13.56528,7.76587 29.61827,10.22523 44.94357,7.36323 28.86375,-3.86998 58.24323,-13.20862 80.65214,-32.42182 6.54747,-4.29111 3.39,-12.31765 3.58508,-18.77562 -1.09449,-17.23921 -0.74519,-34.84945 -3.34795,-51.83054 -2.32876,-2.31234 -6.62538,-2.00678 -9 [...]
- id="path4554"
- inkscape:connector-curvature="0" />
- <path
- style="fill:#4090ff;fill-opacity:0.76190479;fill-rule:nonzero;stroke:none;stroke-width:33.14562988;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- d="m 544.33008,843.48633 c -13.18922,3.35826 -25.75394,9.35851 -39.5586,10.19922 -20.58694,2.95695 -43.209,2.71828 -61.66796,-8.25196 -3.89024,-1.77146 -8.204,0.82233 -7.34259,5.32698 -1.27402,19.88786 -0.45524,39.85863 -0.3957,59.76677 0.28651,6.45975 2.11458,14.59503 9.65039,15.75391 14.90113,2.70598 31.0429,1.96405 44.25,-6.24414 20.37744,-12.17381 35.05688,-31.66868 48.54688,-50.76367 3.81447,-7.04931 10.21105,-13.49564 11.24805,-21.64063 -0.0736,-2.49549 -2.25245,-4.35436 - [...]
- id="path4556"
- inkscape:connector-curvature="0" />
- <path
- style="fill:#ff2e91;fill-opacity:0.76190479;fill-rule:nonzero;stroke:none;stroke-width:33.14562988;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- d="m 579.90039,824.7832 c -11.77867,3.19993 -19.08579,14.78547 -22.08594,26.02735 -10.75514,26.52143 -29.58788,49.40984 -50.59375,68.20507 -5.75439,5.28403 -14.19794,8.29031 -18.55273,14.51758 1.97178,8.36882 8.43488,14.98369 14.17692,21.06676 20.8605,19.40024 51.16519,23.21023 78.43703,21.25577 13.65785,-0.65063 28.08137,-0.44187 40.82746,-5.82057 5.50319,-5.34714 -2.17085,-11.64592 -4.2461,-16.66407 -7.26358,-14.47969 -12.36111,-31.01399 -10.58008,-47.51953 1.11987,-9.30981 5. [...]
- id="path4558"
- inkscape:connector-curvature="0" />
- <path
- style="fill:#6977ff;fill-opacity:0.76190479;fill-rule:nonzero;stroke:none;stroke-width:33.14562988;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- d="m 626.4082,884.91211 c -5.2873,2.48569 -6.29646,9.92811 -8.05664,15.20898 -5.33216,22.49197 5.03616,44.92494 18.0777,62.742 15.85071,22.01612 36.52433,41.83541 61.96136,52.11931 4.33452,1.2088 10.9221,2.6544 13.78321,-1.4883 1.0622,-28.91055 0.43401,-57.87125 0.0723,-86.78121 -0.68851,-5.16339 -0.58033,-12.95231 -7.23632,-13.81641 -19.91859,-4.15551 -38.91367,-12.18782 -57.81123,-19.67297 -6.99827,-2.50155 -13.63944,-6.631 -20.79034,-8.3114 z"
- id="path4560"
- inkscape:connector-curvature="0" />
- <path
- style="fill:#3e4fff;fill-opacity:0.76190479;fill-rule:nonzero;stroke:none;stroke-width:33.14562988;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- d="m 472.66016,933.94727 c -12.18947,1.46174 -24.59597,-1.63376 -36.66602,1.44335 -4.67084,5.93146 -2.18514,14.73252 -2.85742,21.85352 -0.14646,18.05847 -0.037,36.26282 -0.0645,54.23436 1.62168,6.7795 9.79434,8.2243 15.58203,6.6055 72.1367,-0.1657 144.35667,0.3311 216.4414,-0.2481 6.96201,-2.4979 4.10387,-12.1915 -1.45898,-14.5918 -10.54382,-8.53578 -18.54934,-20.36714 -30.15477,-27.39847 -12.19128,1.62771 -23.55792,6.37659 -35.91916,6.53492 -30.55598,2.56591 -63.93811,2.7709 -9 [...]
- id="path4562"
- inkscape:connector-curvature="0" />
- <rect
- style="fill:none;fill-opacity:0.76190479;fill-rule:nonzero;stroke:#000000;stroke-width:25.22850037;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="rect4564"
- width="295.64648"
- height="295.64648"
- x="425.61426"
- y="731.10144" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:15;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 584.37501,739.8622 c 0,0 -7.80797,84.56123 16.92976,117.72992 24.73772,33.16869 117.44524,54.14508 117.44524,54.14508"
- id="path4566"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="czc" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:15;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 425.49297,819.04787 c 0,0 17.67767,41.98447 76.81793,30.81208 62.04363,-11.72086 80.88354,-36.748 80.88354,-36.748"
- id="path4568"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="csc" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:15;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 623.48776,877.778 c 0,0 -30.63517,33.7147 4.40414,82.64975 36.75949,51.33735 69.6029,60.64745 69.6029,60.64745"
- id="path4570"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="csc" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:15;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 433.50583,926.53539 c 0,0 38.72129,23.99703 80.47262,-19.35293 43.80104,-45.47812 44.67208,-76.79172 44.67208,-76.79172"
- id="path4572"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="csc" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:15;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 481.65759,924.24607 c 0,0 2.8397,45.46572 62.35529,54.42606 62.43737,9.40025 88.47809,-8.01184 88.47809,-8.01184"
- id="path4574"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="csc" />
- </g>
- </g>
-</svg>
diff --git a/pixmaps/gwy_volume_calibrate-24.png b/pixmaps/gwy_volume_calibrate-24.png
index 2011863..c765049 100644
Binary files a/pixmaps/gwy_volume_calibrate-24.png and b/pixmaps/gwy_volume_calibrate-24.png differ
diff --git a/pixmaps/gwy_volume_dimensions-24.png b/pixmaps/gwy_volume_dimensions-24.png
index 6147235..faa0ba1 100644
Binary files a/pixmaps/gwy_volume_dimensions-24.png and b/pixmaps/gwy_volume_dimensions-24.png differ
diff --git a/pixmaps/gwy_volume_fd-24.png b/pixmaps/gwy_volume_fd-24.png
index e7a28e4..846421b 100644
Binary files a/pixmaps/gwy_volume_fd-24.png and b/pixmaps/gwy_volume_fd-24.png differ
diff --git a/pixmaps/gwy_volume_invert-24.png b/pixmaps/gwy_volume_invert-24.png
index 7c2450f..5d2e513 100644
Binary files a/pixmaps/gwy_volume_invert-24.png and b/pixmaps/gwy_volume_invert-24.png differ
diff --git a/pixmaps/gwy_volume_kmeans-24.png b/pixmaps/gwy_volume_kmeans-24.png
index d16773b..1e30b6e 100644
Binary files a/pixmaps/gwy_volume_kmeans-24.png and b/pixmaps/gwy_volume_kmeans-24.png differ
diff --git a/pixmaps/gwy_volume_kmedians-24.png b/pixmaps/gwy_volume_kmedians-24.png
index ba33d87..20be117 100644
Binary files a/pixmaps/gwy_volume_kmedians-24.png and b/pixmaps/gwy_volume_kmedians-24.png differ
diff --git a/pixmaps/gwy_volume_slice-24.png b/pixmaps/gwy_volume_slice-24.png
index ed1b502..13a3630 100644
Binary files a/pixmaps/gwy_volume_slice-24.png and b/pixmaps/gwy_volume_slice-24.png differ
diff --git a/pixmaps/gwy_volumize-24.png b/pixmaps/gwy_volumize-24.png
index 9bde137..dfcebcd 100644
Binary files a/pixmaps/gwy_volumize-24.png and b/pixmaps/gwy_volumize-24.png differ
diff --git a/pixmaps/gwy_volumize_layers-24.png b/pixmaps/gwy_volumize_layers-24.png
index 5e262c0..5349ff6 100644
Binary files a/pixmaps/gwy_volumize_layers-24.png and b/pixmaps/gwy_volumize_layers-24.png differ
diff --git a/pixmaps/gwy_xy_denoise-24.png b/pixmaps/gwy_xy_denoise-24.png
new file mode 100644
index 0000000..9758b6c
Binary files /dev/null and b/pixmaps/gwy_xy_denoise-24.png differ
diff --git a/pixmaps/gwy_zero_mean-24.png b/pixmaps/gwy_zero_mean-24.png
index 690a0cf..09ac938 100644
Binary files a/pixmaps/gwy_zero_mean-24.png and b/pixmaps/gwy_zero_mean-24.png differ
diff --git a/pixmaps/gwy_zoom-24.xcf b/pixmaps/gwy_zoom-24.xcf
deleted file mode 100644
index b4e618a..0000000
Binary files a/pixmaps/gwy_zoom-24.xcf and /dev/null differ
diff --git a/pixmaps/gwy_zoom_1_1-24.png b/pixmaps/gwy_zoom_1_1-24.png
index 4383133..2506a6a 100644
Binary files a/pixmaps/gwy_zoom_1_1-24.png and b/pixmaps/gwy_zoom_1_1-24.png differ
diff --git a/pixmaps/gwy_zoom_fit-24.png b/pixmaps/gwy_zoom_fit-24.png
index 45cdd33..0e84941 100644
Binary files a/pixmaps/gwy_zoom_fit-24.png and b/pixmaps/gwy_zoom_fit-24.png differ
diff --git a/pixmaps/gwy_zoom_in-24.png b/pixmaps/gwy_zoom_in-24.png
index cdd20ab..54d3e14 100644
Binary files a/pixmaps/gwy_zoom_in-24.png and b/pixmaps/gwy_zoom_in-24.png differ
diff --git a/pixmaps/gwy_zoom_out-24.png b/pixmaps/gwy_zoom_out-24.png
index c47199e..fb0ad41 100644
Binary files a/pixmaps/gwy_zoom_out-24.png and b/pixmaps/gwy_zoom_out-24.png differ
diff --git a/pixmaps/src/Makefile.am b/pixmaps/src/Makefile.am
new file mode 100644
index 0000000..498ac16
--- /dev/null
+++ b/pixmaps/src/Makefile.am
@@ -0,0 +1,242 @@
+# @(#) $Id: Makefile.am 20258 2017-08-12 08:17:43Z yeti-dn $
+
+svg_sources = \
+ gwy_3d_base-24.svg \
+ gwy_arithmetic-24.svg \
+ gwy_bold-20.svg \
+ gwy_cantilever-24.svg \
+ gwy_color_range-24.svg \
+ gwy_color_range_adaptive-24.svg \
+ gwy_color_range_auto-24.svg \
+ gwy_color_range_fixed-24.svg \
+ gwy_color_range_full-24.svg \
+ gwy_convolution-24.svg \
+ gwy_correct_affine-24.svg \
+ gwy_correlation_mask-24.svg \
+ gwy_crop-24.svg \
+ gwy_cwt-24.svg \
+ gwy_data_measure-24.svg \
+ gwy_disconnected-24.svg \
+ gwy_distance-24.svg \
+ gwy_distance_transform-24.svg \
+ gwy_distribution_angle-24.svg \
+ gwy_distribution_slope-24.svg \
+ gwy_drift-96.svg \
+ gwy_dwt-24.svg \
+ gwy_edge-24.svg \
+ gwy_enforce_distribution-24.svg \
+ gwy_entropy-24.svg \
+ gwy_extend-24.svg \
+ gwy_extract_path-24.svg \
+ gwy_facet_level-24.svg \
+ gwy_favourite-24.svg \
+ gwy_fft-24.svg \
+ gwy_fft_2d-24.svg \
+ gwy_fft_filter_1d-24.svg \
+ gwy_fft_filter_2d-24.svg \
+ gwy_filter-24.svg \
+ gwy_find_peaks-24.svg \
+ gwy_fit_shape-24.svg \
+ gwy_fix_zero-24.svg \
+ gwy_flip_horizontally-24.svg \
+ gwy_flip_vertically-24.svg \
+ gwy_fractal-24.svg \
+ gwy_fractal_measure-24.svg \
+ gwy_fractal_correction-24.svg \
+ gwy_gl_material-16.svg \
+ gwy_gradient_horizontal-24.svg \
+ gwy_gradient_vertical-24.svg \
+ gwy_grain_correlation-24.svg \
+ gwy_grain_exscribed_circle-24.svg \
+ gwy_grain_inscribed_circle-24.svg \
+ gwy_grains-24.svg \
+ gwy_grains_edge-24.svg \
+ gwy_grains_edge_remove-24.svg \
+ gwy_grains_graph-24.svg \
+ gwy_grains_measure-24.svg \
+ gwy_grains_remove-24.svg \
+ gwy_grains_water-24.svg \
+ gwy_graph-24.svg \
+ gwy_graph_align-24.svg \
+ gwy_graph_cut-24.svg \
+ gwy_graph_dos-24.svg \
+ gwy_graph_export_ascii-24.svg \
+ gwy_graph_export_png-24.svg \
+ gwy_graph_export_vector-24.svg \
+ gwy_graph_fd-24.svg \
+ gwy_graph_filter-24.svg \
+ gwy_graph_function-24.svg \
+ gwy_graph_halfgauss-24.svg \
+ gwy_graph_level-24.svg \
+ gwy_graph_measure-24.svg \
+ gwy_graph_palette-24.svg \
+ gwy_graph_pointer-24.svg \
+ gwy_graph_ruler-24.svg \
+ gwy_graph_vertical-24.svg \
+ gwy_graph_zoom_fit-24.svg \
+ gwy_graph_zoom_in-24.svg \
+ gwy_graph_zoom_out-24.svg \
+ gwy_hough-24.svg \
+ gwy_immerse-24.svg \
+ gwy_iso_roughness-24.svg \
+ gwy_italic-20.svg \
+ gwy_less-24.svg \
+ gwy_level-24.svg \
+ gwy_level_flatten_base-24.svg \
+ gwy_level_median-24.svg \
+ gwy_level_triangle-24.svg \
+ gwy_light_rotate-24.svg \
+ gwy_line_level-24.svg \
+ gwy_load_debug-20.svg \
+ gwy_load_info-20.svg \
+ gwy_load_warning-20.svg \
+ gwy_local_slope-24.svg \
+ gwy_logscale_horizontal-24.svg \
+ gwy_logscale_vertical-24.svg \
+ gwy_mark_outliers-24.svg \
+ gwy_mark_scars-24.svg \
+ gwy_mark_with-24.svg \
+ gwy_mask-16.svg \
+ gwy_mask-24.svg \
+ gwy_mask_add-24.svg \
+ gwy_mask_circle-24.svg \
+ gwy_mask_circle_exclusive-24.svg \
+ gwy_mask_circle_inclusive-24.svg \
+ gwy_mask_distribute-24.svg \
+ gwy_mask_editor-24.svg \
+ gwy_mask_exclude-24.svg \
+ gwy_mask_exclude_circle-24.svg \
+ gwy_mask_extract-24.svg \
+ gwy_mask_fill_draw-24.svg \
+ gwy_mask_fill_erase-24.svg \
+ gwy_mask_grow-24.svg \
+ gwy_mask_intersect-24.svg \
+ gwy_mask_invert-24.svg \
+ gwy_mask_line-24.svg \
+ gwy_mask_morph-24.svg \
+ gwy_mask_paint_draw-24.svg \
+ gwy_mask_paint_erase-24.svg \
+ gwy_mask_rect_exclusive-24.svg \
+ gwy_mask_rect_inclusive-24.svg \
+ gwy_mask_remove-24.svg \
+ gwy_mask_shrink-24.svg \
+ gwy_mask_subtract-24.svg \
+ gwy_mask_thin-24.svg \
+ gwy_measure_lattice-24.svg \
+ gwy_merge-24.svg \
+ gwy_more-24.svg \
+ gwy_mutual_crop-24.svg \
+ gwy_neural_apply-24.svg \
+ gwy_neural_train-24.svg \
+ gwy_next-24.svg \
+ gwy_null_offsets-24.svg \
+ gwy_palettes-16.svg \
+ gwy_palettes-24.svg \
+ gwy_path_level-24.svg \
+ gwy_pointer_measure-24.svg \
+ gwy_poly_distort-24.svg \
+ gwy_polynom-24.svg \
+ gwy_polynom_level-24.svg \
+ gwy_previous-24.svg \
+ gwy_profile-24.svg \
+ gwy_pygwy-24.svg \
+ gwy_remove_under_mask-24.svg \
+ gwy_rotate_180-24.svg \
+ gwy_rotate_3d-24.svg \
+ gwy_rotate-24.svg \
+ gwy_rotate_90_ccw-24.svg \
+ gwy_rotate_90_cw-24.svg \
+ gwy_scale-24.svg \
+ gwy_scale_horizontally-24.svg \
+ gwy_scale_vertically-24.svg \
+ gwy_scars-24.svg \
+ gwy_selections-24.svg \
+ gwy_shader-24.svg \
+ gwy_spectrum-24.svg \
+ gwy_spot_remove-24.svg \
+ gwy_stat_quantities-24.svg \
+ gwy_straighten_path-24.svg \
+ gwy_subscript-20.svg \
+ gwy_superscript-20.svg \
+ gwy_synthetic_ballistic_deposition-24.svg \
+ gwy_synthetic_brownian_motion-24.svg \
+ gwy_synthetic_columnar-24.svg \
+ gwy_synthetic_diffusion-24.svg \
+ gwy_synthetic_domains-24.svg \
+ gwy_synthetic_fibres-24.svg \
+ gwy_synthetic_lattice-24.svg \
+ gwy_synthetic_line_noise-24.svg \
+ gwy_synthetic_noise-24.svg \
+ gwy_synthetic_objects-24.svg \
+ gwy_synthetic_particles-24.svg \
+ gwy_synthetic_pattern-24.svg \
+ gwy_synthetic_phases-24.svg \
+ gwy_synthetic_spectral-24.svg \
+ gwy_synthetic_waves-24.svg \
+ gwy_tilt-24.svg \
+ gwy_tip_dilation-24.svg \
+ gwy_tip_erosion-24.svg \
+ gwy_tip_estimation-24.svg \
+ gwy_tip_indent_analyze-24.svg \
+ gwy_tip_lateral_force-24.svg \
+ gwy_tip_map-24.svg \
+ gwy_tip_model-24.svg \
+ gwy_tip_pid-24.svg \
+ gwy_unrotate-24.svg \
+ gwy_value_invert-24.svg \
+ gwy_volume-24.svg \
+ gwy_volume_calibrate-24.svg \
+ gwy_volume_dimensions-24.svg \
+ gwy_volume_fd-24.svg \
+ gwy_volume_invert-24.svg \
+ gwy_volume_kmeans-24.svg \
+ gwy_volume_kmedians-24.svg \
+ gwy_volume_slice-24.svg \
+ gwy_xy_denoise-24.svg \
+ gwy_zero_mean-24.svg \
+ gwy_zoom_1_1-24.svg \
+ gwy_zoom_fit-24.svg \
+ gwy_zoom_in-24.svg \
+ gwy_zoom_out-24.svg
+
+xcf_sources = \
+ cd_line.xcf \
+ cd_rline.xcf \
+ cd_rstep.xcf \
+ cd_step.xcf \
+ gwy_3d_base-24.xcf \
+ gwy_presentation-24.xcf \
+ gwy_presentation_ops-24.xcf \
+ gwy_transform-24.xcf
+
+# Not really sources, but PNG icons that were not included as API symbols.
+png_sources = \
+ gwy_hough-24.png \
+ gwy_local_slope-24.png \
+ gwy_presentation_attach-24.png \
+ gwy_presentation_edge_canny-24.png \
+ gwy_presentation_edge_harris_corner-24.png \
+ gwy_presentation_edge_hough-24.png \
+ gwy_presentation_edge_inclination-24.png \
+ gwy_presentation_edge_laplace_gauss-24.png \
+ gwy_presentation_edge_local_non_linearity-24.png \
+ gwy_presentation_edge_prewitt-24.png \
+ gwy_presentation_edge_rms_edge-24.png \
+ gwy_presentation_edge_rms-24.png \
+ gwy_presentation_edge_sobel-24.png \
+ gwy_presentation_edge_step-24.png \
+ gwy_presentation_edge_zero_crossing-24.png \
+ gwy_presentation_extract-24.png \
+ gwy_presentation_local_contrast-24.png \
+ gwy_presentation_log-24.png \
+ gwy_presentation_rank-24.png \
+ gwy_presentation_remove-24.png \
+ gwy_presentation_sem-24.png \
+ gwy_presentation_shading-24.png
+
+noinst_DATA = \
+ $(svg_sources) \
+ $(xcf_sources) \
+ $(png_sources)
+
+EXTRA_DIST = $(noinst_DATA)
diff --git a/pixmaps/src/Makefile.in b/pixmaps/src/Makefile.in
new file mode 100644
index 0000000..d9d105d
--- /dev/null
+++ b/pixmaps/src/Makefile.in
@@ -0,0 +1,805 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+# @(#) $Id: Makefile.am 20258 2017-08-12 08:17:43Z yeti-dn $
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = pixmaps/src
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gconf-2.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/glibc21.m4 \
+ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/gwy-cc-options.m4 \
+ $(top_srcdir)/m4/gwy-enable.m4 $(top_srcdir)/m4/gwy-math.m4 \
+ $(top_srcdir)/m4/gwy-python.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/m4/po.m4 \
+ $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+DATA = $(noinst_DATA)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BASIC_LIBS = @BASIC_LIBS@
+BZIP2 = @BZIP2@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFITSIO_CFLAGS = @CFITSIO_CFLAGS@
+CFITSIO_LIBS = @CFITSIO_LIBS@
+CFLAGS = @CFLAGS@
+COMMON_CFLAGS = @COMMON_CFLAGS@
+COMMON_CXXFLAGS = @COMMON_CXXFLAGS@
+COMMON_LDFLAGS = @COMMON_LDFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EPYDOC = @EPYDOC@
+EXEEXT = @EXEEXT@
+EXR_CFLAGS = @EXR_CFLAGS@
+EXR_LIBS = @EXR_LIBS@
+FFTW3_CFLAGS = @FFTW3_CFLAGS@
+FFTW3_LIBS = @FFTW3_LIBS@
+FGREP = @FGREP@
+GCONFTOOL = @GCONFTOOL@
+GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
+GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIBC21 = @GLIBC21@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GOBJECT_CFLAGS = @GOBJECT_CFLAGS@
+GOBJECT_LIBS = @GOBJECT_LIBS@
+GREP = @GREP@
+GTKDOC_EXTRA_CFLAGS = @GTKDOC_EXTRA_CFLAGS@
+GTKGLEXT_CFLAGS = @GTKGLEXT_CFLAGS@
+GTKGLEXT_DEPENDENCY = @GTKGLEXT_DEPENDENCY@
+GTKGLEXT_LIBS = @GTKGLEXT_LIBS@
+GTKSOURCEVIEW_CFLAGS = @GTKSOURCEVIEW_CFLAGS@
+GTKSOURCEVIEW_DEPENDENCY = @GTKSOURCEVIEW_DEPENDENCY@
+GTKSOURCEVIEW_LIBS = @GTKSOURCEVIEW_LIBS@
+GTK_BASE_CFLAGS = @GTK_BASE_CFLAGS@
+GTK_BASE_LIBS = @GTK_BASE_LIBS@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_DOC_PATH = @GTK_DOC_PATH@
+GTK_LIBS = @GTK_LIBS@
+GTK_MAC_CFLAGS = @GTK_MAC_CFLAGS@
+GTK_MAC_LIBS = @GTK_MAC_LIBS@
+GWY_VERSION_MAJOR = @GWY_VERSION_MAJOR@
+GWY_VERSION_MINOR = @GWY_VERSION_MINOR@
+GWY_VERSION_STRING = @GWY_VERSION_STRING@
+HDRIMAGE_EXTRA_CFLAGS = @HDRIMAGE_EXTRA_CFLAGS@
+HTML_DIR = @HTML_DIR@
+INKSCAPE = @INKSCAPE@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+KDE4_CONFIG = @KDE4_CONFIG@
+KDE4_CPPFLAGS = @KDE4_CPPFLAGS@
+KDE4_LDFLAGS = @KDE4_LDFLAGS@
+KDE4_LIBS = @KDE4_LIBS@
+KDE4_MODULE_DIR = @KDE4_MODULE_DIR@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBRARY_RELEASE = @LIBRARY_RELEASE@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBXMU = @LIBXMU@
+LIBZIP_CFLAGS = @LIBZIP_CFLAGS@
+LIBZIP_LIBS = @LIBZIP_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MINIZIP_CFLAGS = @MINIZIP_CFLAGS@
+MINIZIP_LIBS = @MINIZIP_LIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+MSWIN_BITS = @MSWIN_BITS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PASCAL = @PASCAL@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+PKG_CONFIG = @PKG_CONFIG@
+PNGCRUSH = @PNGCRUSH@
+PNG_CFLAGS = @PNG_CFLAGS@
+PNG_LIBS = @PNG_LIBS@
+POD2MAN = @POD2MAN@
+POSUB = @POSUB@
+PYGTK_CFLAGS = @PYGTK_CFLAGS@
+PYGTK_CODEGENDIR = @PYGTK_CODEGENDIR@
+PYGTK_LIBS = @PYGTK_LIBS@
+PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_EXTRA_CFLAGS = @PYTHON_EXTRA_CFLAGS@
+PYTHON_INCLUDES = @PYTHON_INCLUDES@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
+UNIQUE_LIBS = @UNIQUE_LIBS@
+UPDATE_DESKTOP_DATABASE = @UPDATE_DESKTOP_DATABASE@
+UPDATE_MIME_DATABASE = @UPDATE_MIME_DATABASE@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+WEBP_CFLAGS = @WEBP_CFLAGS@
+WEBP_LIBS = @WEBP_LIBS@
+XDG_DATA_HOME_DIR = @XDG_DATA_HOME_DIR@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XMKMF = @XMKMF@
+XML2_CFLAGS = @XML2_CFLAGS@
+XML2_LIBS = @XML2_LIBS@
+XSLTPROC = @XSLTPROC@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZLIB = @ZLIB@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+svg_sources = \
+ gwy_3d_base-24.svg \
+ gwy_arithmetic-24.svg \
+ gwy_bold-20.svg \
+ gwy_cantilever-24.svg \
+ gwy_color_range-24.svg \
+ gwy_color_range_adaptive-24.svg \
+ gwy_color_range_auto-24.svg \
+ gwy_color_range_fixed-24.svg \
+ gwy_color_range_full-24.svg \
+ gwy_convolution-24.svg \
+ gwy_correct_affine-24.svg \
+ gwy_correlation_mask-24.svg \
+ gwy_crop-24.svg \
+ gwy_cwt-24.svg \
+ gwy_data_measure-24.svg \
+ gwy_disconnected-24.svg \
+ gwy_distance-24.svg \
+ gwy_distance_transform-24.svg \
+ gwy_distribution_angle-24.svg \
+ gwy_distribution_slope-24.svg \
+ gwy_drift-96.svg \
+ gwy_dwt-24.svg \
+ gwy_edge-24.svg \
+ gwy_enforce_distribution-24.svg \
+ gwy_entropy-24.svg \
+ gwy_extend-24.svg \
+ gwy_extract_path-24.svg \
+ gwy_facet_level-24.svg \
+ gwy_favourite-24.svg \
+ gwy_fft-24.svg \
+ gwy_fft_2d-24.svg \
+ gwy_fft_filter_1d-24.svg \
+ gwy_fft_filter_2d-24.svg \
+ gwy_filter-24.svg \
+ gwy_find_peaks-24.svg \
+ gwy_fit_shape-24.svg \
+ gwy_fix_zero-24.svg \
+ gwy_flip_horizontally-24.svg \
+ gwy_flip_vertically-24.svg \
+ gwy_fractal-24.svg \
+ gwy_fractal_measure-24.svg \
+ gwy_fractal_correction-24.svg \
+ gwy_gl_material-16.svg \
+ gwy_gradient_horizontal-24.svg \
+ gwy_gradient_vertical-24.svg \
+ gwy_grain_correlation-24.svg \
+ gwy_grain_exscribed_circle-24.svg \
+ gwy_grain_inscribed_circle-24.svg \
+ gwy_grains-24.svg \
+ gwy_grains_edge-24.svg \
+ gwy_grains_edge_remove-24.svg \
+ gwy_grains_graph-24.svg \
+ gwy_grains_measure-24.svg \
+ gwy_grains_remove-24.svg \
+ gwy_grains_water-24.svg \
+ gwy_graph-24.svg \
+ gwy_graph_align-24.svg \
+ gwy_graph_cut-24.svg \
+ gwy_graph_dos-24.svg \
+ gwy_graph_export_ascii-24.svg \
+ gwy_graph_export_png-24.svg \
+ gwy_graph_export_vector-24.svg \
+ gwy_graph_fd-24.svg \
+ gwy_graph_filter-24.svg \
+ gwy_graph_function-24.svg \
+ gwy_graph_halfgauss-24.svg \
+ gwy_graph_level-24.svg \
+ gwy_graph_measure-24.svg \
+ gwy_graph_palette-24.svg \
+ gwy_graph_pointer-24.svg \
+ gwy_graph_ruler-24.svg \
+ gwy_graph_vertical-24.svg \
+ gwy_graph_zoom_fit-24.svg \
+ gwy_graph_zoom_in-24.svg \
+ gwy_graph_zoom_out-24.svg \
+ gwy_hough-24.svg \
+ gwy_immerse-24.svg \
+ gwy_iso_roughness-24.svg \
+ gwy_italic-20.svg \
+ gwy_less-24.svg \
+ gwy_level-24.svg \
+ gwy_level_flatten_base-24.svg \
+ gwy_level_median-24.svg \
+ gwy_level_triangle-24.svg \
+ gwy_light_rotate-24.svg \
+ gwy_line_level-24.svg \
+ gwy_load_debug-20.svg \
+ gwy_load_info-20.svg \
+ gwy_load_warning-20.svg \
+ gwy_local_slope-24.svg \
+ gwy_logscale_horizontal-24.svg \
+ gwy_logscale_vertical-24.svg \
+ gwy_mark_outliers-24.svg \
+ gwy_mark_scars-24.svg \
+ gwy_mark_with-24.svg \
+ gwy_mask-16.svg \
+ gwy_mask-24.svg \
+ gwy_mask_add-24.svg \
+ gwy_mask_circle-24.svg \
+ gwy_mask_circle_exclusive-24.svg \
+ gwy_mask_circle_inclusive-24.svg \
+ gwy_mask_distribute-24.svg \
+ gwy_mask_editor-24.svg \
+ gwy_mask_exclude-24.svg \
+ gwy_mask_exclude_circle-24.svg \
+ gwy_mask_extract-24.svg \
+ gwy_mask_fill_draw-24.svg \
+ gwy_mask_fill_erase-24.svg \
+ gwy_mask_grow-24.svg \
+ gwy_mask_intersect-24.svg \
+ gwy_mask_invert-24.svg \
+ gwy_mask_line-24.svg \
+ gwy_mask_morph-24.svg \
+ gwy_mask_paint_draw-24.svg \
+ gwy_mask_paint_erase-24.svg \
+ gwy_mask_rect_exclusive-24.svg \
+ gwy_mask_rect_inclusive-24.svg \
+ gwy_mask_remove-24.svg \
+ gwy_mask_shrink-24.svg \
+ gwy_mask_subtract-24.svg \
+ gwy_mask_thin-24.svg \
+ gwy_measure_lattice-24.svg \
+ gwy_merge-24.svg \
+ gwy_more-24.svg \
+ gwy_mutual_crop-24.svg \
+ gwy_neural_apply-24.svg \
+ gwy_neural_train-24.svg \
+ gwy_next-24.svg \
+ gwy_null_offsets-24.svg \
+ gwy_palettes-16.svg \
+ gwy_palettes-24.svg \
+ gwy_path_level-24.svg \
+ gwy_pointer_measure-24.svg \
+ gwy_poly_distort-24.svg \
+ gwy_polynom-24.svg \
+ gwy_polynom_level-24.svg \
+ gwy_previous-24.svg \
+ gwy_profile-24.svg \
+ gwy_pygwy-24.svg \
+ gwy_remove_under_mask-24.svg \
+ gwy_rotate_180-24.svg \
+ gwy_rotate_3d-24.svg \
+ gwy_rotate-24.svg \
+ gwy_rotate_90_ccw-24.svg \
+ gwy_rotate_90_cw-24.svg \
+ gwy_scale-24.svg \
+ gwy_scale_horizontally-24.svg \
+ gwy_scale_vertically-24.svg \
+ gwy_scars-24.svg \
+ gwy_selections-24.svg \
+ gwy_shader-24.svg \
+ gwy_spectrum-24.svg \
+ gwy_spot_remove-24.svg \
+ gwy_stat_quantities-24.svg \
+ gwy_straighten_path-24.svg \
+ gwy_subscript-20.svg \
+ gwy_superscript-20.svg \
+ gwy_synthetic_ballistic_deposition-24.svg \
+ gwy_synthetic_brownian_motion-24.svg \
+ gwy_synthetic_columnar-24.svg \
+ gwy_synthetic_diffusion-24.svg \
+ gwy_synthetic_domains-24.svg \
+ gwy_synthetic_fibres-24.svg \
+ gwy_synthetic_lattice-24.svg \
+ gwy_synthetic_line_noise-24.svg \
+ gwy_synthetic_noise-24.svg \
+ gwy_synthetic_objects-24.svg \
+ gwy_synthetic_particles-24.svg \
+ gwy_synthetic_pattern-24.svg \
+ gwy_synthetic_phases-24.svg \
+ gwy_synthetic_spectral-24.svg \
+ gwy_synthetic_waves-24.svg \
+ gwy_tilt-24.svg \
+ gwy_tip_dilation-24.svg \
+ gwy_tip_erosion-24.svg \
+ gwy_tip_estimation-24.svg \
+ gwy_tip_indent_analyze-24.svg \
+ gwy_tip_lateral_force-24.svg \
+ gwy_tip_map-24.svg \
+ gwy_tip_model-24.svg \
+ gwy_tip_pid-24.svg \
+ gwy_unrotate-24.svg \
+ gwy_value_invert-24.svg \
+ gwy_volume-24.svg \
+ gwy_volume_calibrate-24.svg \
+ gwy_volume_dimensions-24.svg \
+ gwy_volume_fd-24.svg \
+ gwy_volume_invert-24.svg \
+ gwy_volume_kmeans-24.svg \
+ gwy_volume_kmedians-24.svg \
+ gwy_volume_slice-24.svg \
+ gwy_xy_denoise-24.svg \
+ gwy_zero_mean-24.svg \
+ gwy_zoom_1_1-24.svg \
+ gwy_zoom_fit-24.svg \
+ gwy_zoom_in-24.svg \
+ gwy_zoom_out-24.svg
+
+xcf_sources = \
+ cd_line.xcf \
+ cd_rline.xcf \
+ cd_rstep.xcf \
+ cd_step.xcf \
+ gwy_3d_base-24.xcf \
+ gwy_presentation-24.xcf \
+ gwy_presentation_ops-24.xcf \
+ gwy_transform-24.xcf
+
+
+# Not really sources, but PNG icons that were not included as API symbols.
+png_sources = \
+ gwy_hough-24.png \
+ gwy_local_slope-24.png \
+ gwy_presentation_attach-24.png \
+ gwy_presentation_edge_canny-24.png \
+ gwy_presentation_edge_harris_corner-24.png \
+ gwy_presentation_edge_hough-24.png \
+ gwy_presentation_edge_inclination-24.png \
+ gwy_presentation_edge_laplace_gauss-24.png \
+ gwy_presentation_edge_local_non_linearity-24.png \
+ gwy_presentation_edge_prewitt-24.png \
+ gwy_presentation_edge_rms_edge-24.png \
+ gwy_presentation_edge_rms-24.png \
+ gwy_presentation_edge_sobel-24.png \
+ gwy_presentation_edge_step-24.png \
+ gwy_presentation_edge_zero_crossing-24.png \
+ gwy_presentation_extract-24.png \
+ gwy_presentation_local_contrast-24.png \
+ gwy_presentation_log-24.png \
+ gwy_presentation_rank-24.png \
+ gwy_presentation_remove-24.png \
+ gwy_presentation_sem-24.png \
+ gwy_presentation_shading-24.png
+
+noinst_DATA = \
+ $(svg_sources) \
+ $(xcf_sources) \
+ $(png_sources)
+
+EXTRA_DIST = $(noinst_DATA)
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu pixmaps/src/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu pixmaps/src/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(DATA)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ cscopelist-am ctags-am distclean distclean-generic \
+ distclean-libtool distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/pixmaps/cd_line.xcf b/pixmaps/src/cd_line.xcf
similarity index 100%
rename from pixmaps/cd_line.xcf
rename to pixmaps/src/cd_line.xcf
diff --git a/pixmaps/cd_rline.xcf b/pixmaps/src/cd_rline.xcf
similarity index 100%
rename from pixmaps/cd_rline.xcf
rename to pixmaps/src/cd_rline.xcf
diff --git a/pixmaps/cd_rstep.xcf b/pixmaps/src/cd_rstep.xcf
similarity index 100%
rename from pixmaps/cd_rstep.xcf
rename to pixmaps/src/cd_rstep.xcf
diff --git a/pixmaps/cd_step.xcf b/pixmaps/src/cd_step.xcf
similarity index 100%
rename from pixmaps/cd_step.xcf
rename to pixmaps/src/cd_step.xcf
diff --git a/pixmaps/src/gwy_3d_base-24.svg b/pixmaps/src/gwy_3d_base-24.svg
new file mode 100644
index 0000000..84fdf35
--- /dev/null
+++ b/pixmaps/src/gwy_3d_base-24.svg
@@ -0,0 +1,156 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_3d_base-24.svg"
+ inkscape:export-filename="gwy_3d_base-24.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96">
+ <defs
+ id="defs4">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient8860">
+ <stop
+ style="stop-color:#f1f9ea;stop-opacity:1"
+ offset="0"
+ id="stop8856" />
+ <stop
+ id="stop8864"
+ offset="0.3756178"
+ style="stop-color:#76b638;stop-opacity:0.99328858" />
+ <stop
+ style="stop-color:#030401;stop-opacity:0.97315437"
+ offset="1"
+ id="stop8858" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient8428"
+ osb:paint="solid">
+ <stop
+ style="stop-color:#4696db;stop-opacity:1;"
+ offset="0"
+ id="stop8430" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8860"
+ id="linearGradient8889"
+ x1="359.46628"
+ y1="531.59906"
+ x2="391.75754"
+ y2="553.18823"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.61340763,0.20245078,-0.36437531,0.36077836,337.91212,262.04355)" />
+ <filter
+ inkscape:collect="always"
+ style="color-interpolation-filters:sRGB"
+ id="filter8940"
+ x="-0.069478748"
+ width="1.1389575"
+ y="-0.10543993"
+ height="1.2108799">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.66323168"
+ id="feGaussianBlur8942" />
+ </filter>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="15.289537"
+ inkscape:cx="-10.510206"
+ inkscape:cy="25.274973"
+ inkscape:document-units="px"
+ inkscape:current-layer="g8625"
+ showgrid="false"
+ inkscape:object-nodes="true"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-global="true"
+ showguides="true"
+ units="px"
+ inkscape:snap-object-midpoints="true"
+ inkscape:object-paths="false"
+ inkscape:snap-grids="false"
+ inkscape:snap-intersection-paths="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-360.04032,-520.36218)">
+ <g
+ id="g8618"
+ transform="matrix(0.97194034,0,0,1,10.715714,0.03393)"
+ style="stroke-width:1.01433218">
+ <g
+ id="g8625"
+ transform="translate(-0.58662158)">
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path8955"
+ d="m 370.30181,525.73125 13.49573,5.79373 -7.87094,11.8026 -15.03903,-8.29374 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.5;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.01433229px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate;font-variant-east_asian:normal;filter:url(#filter8940)" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:url(#linearGradient8889);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.01433229px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 370.30181,521.92896 13.49573,5.79373 -7.87094,11.8026 -15.03903,-8.29374 z"
+ id="rect8881"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <g
+ id="g8814"
+ transform="matrix(0.17094832,0,0,0.17482069,303.29323,425.48409)"
+ style="stroke-width:5.86747646;stroke:none" />
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/pixmaps/gwy_3d_base-24.xcf b/pixmaps/src/gwy_3d_base-24.xcf
similarity index 100%
rename from pixmaps/gwy_3d_base-24.xcf
rename to pixmaps/src/gwy_3d_base-24.xcf
diff --git a/pixmaps/src/gwy_arithmetic-24.svg b/pixmaps/src/gwy_arithmetic-24.svg
new file mode 100644
index 0000000..594da19
--- /dev/null
+++ b/pixmaps/src/gwy_arithmetic-24.svg
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg10043"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_arithmetic-24.svg"
+ inkscape:export-filename="gwy_arithmetic-24.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs10045" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="5.2522308"
+ inkscape:cx="-130.23742"
+ inkscape:cy="7.8253693"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata10048">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-197.36205,-472.33789)">
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#7db846;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect11370"
+ width="15"
+ height="15"
+ x="197.86205"
+ y="472.83789" />
+ <rect
+ y="476.83789"
+ x="201.86205"
+ height="15"
+ width="15"
+ id="rect8183"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#b3d296;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#e8f0e0;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8153"
+ width="15"
+ height="15"
+ x="205.86205"
+ y="480.83789" />
+ <g
+ id="g8079"
+ transform="translate(4,10)">
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path7272"
+ d="m 209.36205,473.33789 0,6"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cc"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 212.36205,476.33789 -6,0"
+ id="path8080"
+ inkscape:connector-curvature="0" />
+ </g>
+ <path
+ sodipodi:nodetypes="cc"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 216.36205,492.33789 -6,0"
+ id="path8159"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_bold-20.svg b/pixmaps/src/gwy_bold-20.svg
new file mode 100644
index 0000000..c87e6e7
--- /dev/null
+++ b/pixmaps/src/gwy_bold-20.svg
@@ -0,0 +1,106 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="20"
+ height="20"
+ viewBox="0 0 20 20"
+ id="svg8833"
+ version="1.1"
+ inkscape:version="0.92+devel unknown"
+ sodipodi:docname="gwy_bold-20.svg">
+ <defs
+ id="defs8835">
+ <linearGradient
+ gradientTransform="translate(-11.142957,824.89612)"
+ xlink:href="#linearGradient4140"
+ id="linearGradient4171"
+ gradientUnits="userSpaceOnUse"
+ x1="207.50029"
+ y1="247.92804"
+ x2="272.91217"
+ y2="361.22473" />
+ <linearGradient
+ id="linearGradient4140">
+ <stop
+ style="stop-color:#d7e3f4;stop-opacity:1;"
+ offset="0"
+ id="stop4142" />
+ <stop
+ style="stop-color:#f1f5fb;stop-opacity:1"
+ offset="1"
+ id="stop4144" />
+ </linearGradient>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="17.645833"
+ inkscape:cx="11.961394"
+ inkscape:cy="10.410254"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1028"
+ inkscape:window-x="0"
+ inkscape:window-y="33"
+ inkscape:window-maximized="1"
+ inkscape:document-rotation="0">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="0.5"
+ spacingy="0.5"
+ enabled="true"
+ visible="true"
+ units="px"
+ empspacing="2" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8838">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-199.64375,-494.06708)">
+ <text
+ xml:space="preserve"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:27.63895416px;line-height:120.00000477%;font-family:'Linux Libertine O';-inkscape-font-specification:'Linux Libertine O Bold';text-decoration:none;text-decoration-line:none;text-decoration-color:#000000;shape-padding:0;overflow:visible;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.01118124;stroke-linecap:round;stroke-linejoin:round;paint-order [...]
+ x="201.05327"
+ y="512.97797"
+ id="text4304"><tspan
+ sodipodi:role="line"
+ id="tspan4302"
+ x="201.05327"
+ y="512.97797"
+ style="stroke-width:1.01118124">B</tspan></text>
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_cantilever-24.svg b/pixmaps/src/gwy_cantilever-24.svg
new file mode 100644
index 0000000..fbe657d
--- /dev/null
+++ b/pixmaps/src/gwy_cantilever-24.svg
@@ -0,0 +1,139 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8093"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_cantilever-24.svg"
+ inkscape:export-filename="gwy_cantilever-24.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96">
+ <defs
+ id="defs8095">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient8423">
+ <stop
+ style="stop-color:#6c7d92;stop-opacity:1"
+ offset="0"
+ id="stop8419" />
+ <stop
+ id="stop8427"
+ offset="0.49999958"
+ style="stop-color:#a3b8d2;stop-opacity:1" />
+ <stop
+ style="stop-color:#446a97;stop-opacity:1"
+ offset="1"
+ id="stop8421" />
+ </linearGradient>
+ <filter
+ inkscape:collect="always"
+ style="color-interpolation-filters:sRGB"
+ id="filter8458"
+ x="-0.12856513"
+ width="1.2571303"
+ y="-0.11250482"
+ height="1.2250096">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.16275744"
+ id="feGaussianBlur8460" />
+ </filter>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8423"
+ id="linearGradient8425"
+ x1="263.77811"
+ y1="602.10724"
+ x2="257.77811"
+ y2="602.10724"
+ gradientUnits="userSpaceOnUse" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="6.7254415"
+ inkscape:cx="9.8037647"
+ inkscape:cy="19.378478"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-global="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8098">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-244.77811,-595.10722)">
+ <path
+ style="fill:url(#linearGradient8425);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 246.27811,600.60722 h 21 v 2 l -6.5,10.5 -6,-10.5 h -8.5 z"
+ id="path4763"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ style="opacity:0.75;fill:#ffffff;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter8458)"
+ d="m 260.56574,601.46532 c -0.0435,-1.8491 2.94024,0.22303 6.9605,0.15554 -2.37934,0.87001 -4.78447,3.12651 -6.54699,4.79868 -0.69731,-2.00112 -0.66057,-4.5027 -0.41351,-4.95422 z"
+ id="path8400"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc"
+ transform="rotate(96.15813,259.73583,603.10609)" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.88926172;fill-opacity:0.49803922"
+ d="m 254.77811,602.60722 h 12"
+ id="path8429"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ sodipodi:nodetypes="ccccccc"
+ inkscape:connector-curvature="0"
+ id="path8431"
+ d="m 246.27811,600.60722 h 21 v 2 l -6.5,10.5 -6,-10.5 h -8.5 z"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_color_range-24.svg b/pixmaps/src/gwy_color_range-24.svg
new file mode 100644
index 0000000..e5bb14e
--- /dev/null
+++ b/pixmaps/src/gwy_color_range-24.svg
@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8691"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_color_range-24.svg">
+ <defs
+ id="defs8693">
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8648"
+ id="linearGradient8654"
+ x1="363.15701"
+ y1="549.86188"
+ x2="387.15701"
+ y2="549.86188"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-139.12864,-84.867386)" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient8648">
+ <stop
+ style="stop-color:#000200;stop-opacity:1"
+ offset="0"
+ id="stop8650" />
+ <stop
+ id="stop8714"
+ offset="0.25"
+ style="stop-color:#4696db;stop-opacity:1" />
+ <stop
+ id="stop8710"
+ offset="0.5"
+ style="stop-color:#ffbb00;stop-opacity:1" />
+ <stop
+ style="stop-color:#fd9044;stop-opacity:1"
+ offset="0.75"
+ id="stop8712" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1"
+ offset="1"
+ id="stop8652" />
+ </linearGradient>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1.6404928"
+ inkscape:cx="-105.79572"
+ inkscape:cy="17.632842"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8696">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-224.02837,-448.99442)">
+ <g
+ id="g8434"
+ transform="rotate(-90,236.02836,460.99441)">
+ <path
+ inkscape:connector-curvature="0"
+ id="path8716"
+ d="m 227.52838,472.99442 v -24"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1, 1;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1, 1;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 244.52837,472.99442 v -24"
+ id="path8718"
+ inkscape:connector-curvature="0" />
+ <rect
+ y="461.49442"
+ x="224.52837"
+ height="7"
+ width="23"
+ id="rect8646"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:url(#linearGradient8654);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <path
+ sodipodi:nodetypes="cccc"
+ inkscape:connector-curvature="0"
+ id="path8094"
+ d="m 233.02837,450.99442 -4,3 4,3 z"
+ style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 239.02837,450.99442 4,3 -4,3 z"
+ id="path8120"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8122"
+ d="m 233.02837,453.99442 h 6"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_color_range_adaptive-24.svg b/pixmaps/src/gwy_color_range_adaptive-24.svg
new file mode 100644
index 0000000..3a52f0f
--- /dev/null
+++ b/pixmaps/src/gwy_color_range_adaptive-24.svg
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8691"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_color_range_adaptive-24.svg"
+ inkscape:export-filename="gwy_color_range_adaptive-24.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96">
+ <defs
+ id="defs8693">
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8648"
+ id="linearGradient8654"
+ x1="363.15701"
+ y1="549.86188"
+ x2="387.15701"
+ y2="549.86188"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-363.15701,-533.86181)" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient8648">
+ <stop
+ style="stop-color:#000200;stop-opacity:1"
+ offset="0"
+ id="stop8650" />
+ <stop
+ id="stop8714"
+ offset="0.25"
+ style="stop-color:#4696db;stop-opacity:1" />
+ <stop
+ id="stop8710"
+ offset="0.5"
+ style="stop-color:#ffbb00;stop-opacity:1" />
+ <stop
+ style="stop-color:#fd9044;stop-opacity:1"
+ offset="0.75"
+ id="stop8712" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1"
+ offset="1"
+ id="stop8652" />
+ </linearGradient>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="8.8515965"
+ inkscape:cx="26.064741"
+ inkscape:cy="11.226428"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8696">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-224.02837,-448.99442)">
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:url(#linearGradient8654);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="M 6.8691406,9.4160156 C 5.3997353,9.4160156 5.3157434,11.763204 1.4609375,12.5 H 0.5 V 12.634766 16 19.5 c 4.81945,0.40822 4.7857106,3.21875 6.3691406,3.21875 1.43275,0 1.4015794,-3.021484 5.1308594,-3.021484 3.72928,0 3.698119,3.021484 5.130859,3.021484 1.58344,0 1.549691,-2.81053 6.369141,-3.21875 V 12.634766 12.5 H 22.539062 C 18.684258,11.763204 18.600274,9.4160156 17.130859,9.4160156 15.698119,9.4160156 15.72928,12.4375 12,12.4375 8.27072,12.4375 8.3018906,9.4160156 6.8691 [...]
+ transform="translate(224.02837,448.99442)"
+ id="rect8646"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="scccccsssccccsss" />
+ <path
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.99999988;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 247.52565,456.96512 c -4.81831,-0.51117 -4.78383,-4.65625 -6.36689,-4.65625 -1.43241,0 -1.402,4.41016 -5.13039,4.41016 -3.7284,0 -3.69798,-4.41016 -5.13039,-4.41016 -1.58306,0 -1.54858,4.14508 -6.3669,4.65625"
+ id="path8254-7"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cszsc" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_color_range_auto-24.svg b/pixmaps/src/gwy_color_range_auto-24.svg
new file mode 100644
index 0000000..465eb07
--- /dev/null
+++ b/pixmaps/src/gwy_color_range_auto-24.svg
@@ -0,0 +1,131 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8691"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_color_range_auto-24.svg"
+ inkscape:export-filename="gwy_color_range_auto.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs8693">
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8648"
+ id="linearGradient8654"
+ x1="363.15701"
+ y1="549.86188"
+ x2="387.15701"
+ y2="549.86188"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-139.12864,-84.867386)" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient8648">
+ <stop
+ style="stop-color:#000200;stop-opacity:1"
+ offset="0"
+ id="stop8650" />
+ <stop
+ id="stop8714"
+ offset="0.25"
+ style="stop-color:#4696db;stop-opacity:1" />
+ <stop
+ id="stop8710"
+ offset="0.5"
+ style="stop-color:#ffbb00;stop-opacity:1" />
+ <stop
+ style="stop-color:#fd9044;stop-opacity:1"
+ offset="0.75"
+ id="stop8712" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1"
+ offset="1"
+ id="stop8652" />
+ </linearGradient>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="50.858483"
+ inkscape:cx="9.1998494"
+ inkscape:cy="15.956754"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8696">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-224.02837,-448.99442)">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1, 1;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 227.52838,472.99442 0,-24"
+ id="path8716"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8718"
+ d="m 244.52837,472.99442 0,-24"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1, 1;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:url(#linearGradient8654);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8646"
+ width="23"
+ height="7"
+ x="224.52837"
+ y="461.49442" />
+ <path
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 246.91542,459.03511 c -8.23457,-0.92032 -8.17577,-8.38243 -10.88124,-8.38243 -2.70547,0 -2.64666,7.46211 -10.88125,8.38243"
+ id="path8254-7"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="czc" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_color_range_fixed-24.svg b/pixmaps/src/gwy_color_range_fixed-24.svg
new file mode 100644
index 0000000..1ef3f7a
--- /dev/null
+++ b/pixmaps/src/gwy_color_range_fixed-24.svg
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8691"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_color_range_fixed-24.svg"
+ inkscape:export-filename="gwy_color_range_fixed-24.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96">
+ <defs
+ id="defs8693">
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8648"
+ id="linearGradient8654"
+ x1="363.15701"
+ y1="549.86188"
+ x2="387.15701"
+ y2="549.86188"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-139.12864,-84.867386)" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient8648">
+ <stop
+ style="stop-color:#000200;stop-opacity:1"
+ offset="0"
+ id="stop8650" />
+ <stop
+ id="stop8714"
+ offset="0.25"
+ style="stop-color:#4696db;stop-opacity:1" />
+ <stop
+ id="stop8710"
+ offset="0.5"
+ style="stop-color:#ffbb00;stop-opacity:1" />
+ <stop
+ style="stop-color:#fd9044;stop-opacity:1"
+ offset="0.75"
+ id="stop8712" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1"
+ offset="1"
+ id="stop8652" />
+ </linearGradient>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="6.71745"
+ inkscape:cx="15.156461"
+ inkscape:cy="22.16459"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-smooth-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8696">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-224.02837,-448.99442)">
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:url(#linearGradient8654);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8646"
+ width="23"
+ height="7"
+ x="224.52837"
+ y="461.49442" />
+ <path
+ style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 224.52837,456.99442 3,4 3,-4 z"
+ id="path8094"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc" />
+ <path
+ sodipodi:nodetypes="cccc"
+ inkscape:connector-curvature="0"
+ id="path8120"
+ d="m 247.52837,456.99442 -3,4 -3,-4 z"
+ style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cccc"
+ inkscape:connector-curvature="0"
+ id="path8106"
+ d="m 224.52837,472.99442 3,-4 3,4 z"
+ style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 247.52837,472.99442 -3,-4 -3,4 z"
+ id="path8108"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1, 1;stroke-dashoffset:0.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8110"
+ width="0.99999607"
+ height="7.9999948"
+ x="227.02837"
+ y="460.99442" />
+ <rect
+ y="461.99442"
+ x="244.02837"
+ height="6"
+ width="1"
+ id="rect8112"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1, 1;stroke-dashoffset:0.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.00000024;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.00000044, 2.0000002;stroke-dashoffset:75.59056091;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="M 3.5 1 A 2.5 3 0 0 0 1 4 A 2.5 3 0 0 0 3.5 7 A 2.5 3 0 0 0 6 4 A 2.5 3 0 0 0 3.5 1 z M 3.5 2 A 1.5 1.9999999 0 0 1 5 4 A 1.5 1.9999999 0 0 1 3.5 6 A 1.5 1.9999999 0 0 1 2 4 A 1.5 1.9999999 0 0 1 3.5 2 z "
+ transform="translate(224.02837,448.99442)"
+ id="path8492" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 242.02837,450.49442 h 4 c -1.61636,2.07326 -2.5,3.6917 -2.5,5.5"
+ id="path8500"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccc" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_color_range_full-24.svg b/pixmaps/src/gwy_color_range_full-24.svg
new file mode 100644
index 0000000..fc8a3e4
--- /dev/null
+++ b/pixmaps/src/gwy_color_range_full-24.svg
@@ -0,0 +1,112 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8691"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_color_range_full-24.svg">
+ <defs
+ id="defs8693">
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8648"
+ id="linearGradient8654"
+ x1="363.15701"
+ y1="549.86188"
+ x2="387.15701"
+ y2="549.86188"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-139.12864,-84.867386)" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient8648">
+ <stop
+ style="stop-color:#000200;stop-opacity:1"
+ offset="0"
+ id="stop8650" />
+ <stop
+ id="stop8714"
+ offset="0.25"
+ style="stop-color:#4696db;stop-opacity:1" />
+ <stop
+ id="stop8710"
+ offset="0.5"
+ style="stop-color:#ffbb00;stop-opacity:1" />
+ <stop
+ style="stop-color:#fd9044;stop-opacity:1"
+ offset="0.75"
+ id="stop8712" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1"
+ offset="1"
+ id="stop8652" />
+ </linearGradient>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="21.764465"
+ inkscape:cx="5.8858866"
+ inkscape:cy="6.6468112"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8696">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-224.02837,-448.99442)">
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:url(#linearGradient8654);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8646"
+ width="23"
+ height="7"
+ x="224.52837"
+ y="461.49442" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_convolution-24.svg b/pixmaps/src/gwy_convolution-24.svg
new file mode 100644
index 0000000..f9860ac
--- /dev/null
+++ b/pixmaps/src/gwy_convolution-24.svg
@@ -0,0 +1,1050 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 6.3499998 6.3499998"
+ version="1.1"
+ id="svg8868"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_convolution-24.svg">
+ <defs
+ id="defs8862" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="20.259173"
+ inkscape:cx="10.27327"
+ inkscape:cy="15.793039"
+ inkscape:document-units="mm"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ units="px">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8865">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-62.021635,-142.77082)">
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8641"
+ width="0.26456478"
+ height="0.26455694"
+ x="67.048721"
+ y="145.15207" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.05830646;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8230"
+ width="3.174767"
+ height="6.349534"
+ x="62.021866"
+ y="142.77103" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.26458332;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8191"
+ width="6.0854106"
+ height="6.0854106"
+ x="62.153931"
+ y="142.90312" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8791"
+ width="0.26456475"
+ height="0.26455694"
+ x="63.87381"
+ y="145.41667" />
+ <rect
+ y="145.68124"
+ x="63.609249"
+ height="0.26455694"
+ width="0.26456475"
+ id="rect8793"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="145.9458"
+ x="63.87381"
+ height="0.26455694"
+ width="0.26456475"
+ id="rect8805"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="146.47493"
+ x="63.609249"
+ height="0.26455694"
+ width="0.26456475"
+ id="rect8813"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8815"
+ width="0.26456475"
+ height="0.26455694"
+ x="63.609249"
+ y="146.47493" />
+ <rect
+ y="147.00403"
+ x="62.815556"
+ height="0.26455694"
+ width="0.26456475"
+ id="rect8817"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="147.00403"
+ x="63.344685"
+ height="0.26455694"
+ width="0.26456478"
+ id="rect8817-9"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="147.26862"
+ x="63.344685"
+ height="0.26455694"
+ width="0.26456478"
+ id="rect8817-5"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="147.5332"
+ x="63.609249"
+ height="0.26455694"
+ width="0.26456478"
+ id="rect8817-1"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="147.79779"
+ x="63.08012"
+ height="0.26455694"
+ width="0.26456478"
+ id="rect8817-7"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="147.79779"
+ x="62.550991"
+ height="0.26455694"
+ width="0.26456478"
+ id="rect8817-4"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="148.0623"
+ x="63.344685"
+ height="0.26455694"
+ width="0.26456478"
+ id="rect8817-42"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="148.32689"
+ x="62.815556"
+ height="0.26455694"
+ width="0.26456478"
+ id="rect8817-8"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="147.26862"
+ x="62.550991"
+ height="0.26455694"
+ width="0.26456478"
+ id="rect8817-0"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="148.32689"
+ x="63.609249"
+ height="0.26455694"
+ width="0.26456478"
+ id="rect8817-6"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="148.59145"
+ x="63.609249"
+ height="0.26455694"
+ width="0.26456478"
+ id="rect8817-44"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="148.59145"
+ x="63.08012"
+ height="0.26455694"
+ width="0.26456478"
+ id="rect8817-99"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="148.59145"
+ x="63.344685"
+ height="0.26455694"
+ width="0.26456478"
+ id="rect8817-05"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="148.32689"
+ x="62.286427"
+ height="0.26455694"
+ width="0.26456478"
+ id="rect8817-43"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="148.0623"
+ x="62.286427"
+ height="0.26455694"
+ width="0.26456478"
+ id="rect8817-51"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="145.68124"
+ x="64.402939"
+ height="0.26455694"
+ width="0.26456478"
+ id="rect8817-91"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="146.21039"
+ x="64.402939"
+ height="0.26455694"
+ width="0.26456478"
+ id="rect8817-54"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="147.00403"
+ x="64.402939"
+ height="0.26455694"
+ width="0.26456478"
+ id="rect8817-92"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="147.5332"
+ x="64.402939"
+ height="0.26455694"
+ width="0.26456478"
+ id="rect8817-57"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="147.26862"
+ x="64.402939"
+ height="0.26455694"
+ width="0.26456478"
+ id="rect8817-45"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="148.0623"
+ x="63.87381"
+ height="0.26455694"
+ width="0.26456478"
+ id="rect8817-570"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="147.79779"
+ x="64.138374"
+ height="0.26455694"
+ width="0.26456478"
+ id="rect8817-997"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="147.00403"
+ x="64.138374"
+ height="0.26455694"
+ width="0.26456478"
+ id="rect8817-53"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="146.47493"
+ x="64.138374"
+ height="0.26455694"
+ width="0.26456478"
+ id="rect8817-01"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="-146.21039"
+ x="64.667496"
+ height="0.26455694"
+ width="0.26456475"
+ id="rect8817-04-01"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ transform="scale(1,-1)" />
+ <rect
+ y="-147.26862"
+ x="64.667496"
+ height="0.26455694"
+ width="0.26456475"
+ id="rect8817-04-7"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ transform="scale(1,-1)" />
+ <rect
+ y="-147.00403"
+ x="64.667496"
+ height="0.26455694"
+ width="0.26456475"
+ id="rect8817-04-5"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ transform="scale(1,-1)" />
+ <rect
+ y="-147.79779"
+ x="64.667496"
+ height="0.26455694"
+ width="0.26456475"
+ id="rect8817-04-4"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ transform="scale(1,-1)" />
+ <rect
+ y="-148.32689"
+ x="64.667496"
+ height="0.26455694"
+ width="0.26456475"
+ id="rect8817-04-60"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ transform="scale(1,-1)" />
+ <rect
+ y="-148.59145"
+ x="64.402939"
+ height="0.26455694"
+ width="0.26456475"
+ id="rect8817-04-9"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ transform="scale(1,-1)" />
+ <rect
+ y="-148.85602"
+ x="64.402939"
+ height="0.26455694"
+ width="0.26456475"
+ id="rect8817-04-79"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ transform="scale(1,-1)" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect9245-2"
+ width="0.26456481"
+ height="0.26455697"
+ x="64.932068"
+ y="145.41667" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect9245-27"
+ width="0.26456481"
+ height="0.26455697"
+ x="64.932068"
+ y="147.00403" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect9245-0"
+ width="0.26456481"
+ height="0.26455697"
+ x="64.932068"
+ y="147.79779" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect9245-3"
+ width="0.26456481"
+ height="0.26455697"
+ x="64.932068"
+ y="148.32689" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8779-9"
+ width="0.26456475"
+ height="0.26455694"
+ x="62.286427"
+ y="147.26862" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8779-1"
+ width="0.26456475"
+ height="0.26455694"
+ x="62.021866"
+ y="147.79779" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8779-2"
+ width="0.26456475"
+ height="0.26455694"
+ x="62.550991"
+ y="148.85602" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8779-70"
+ width="0.26456475"
+ height="0.26455694"
+ x="63.609249"
+ y="148.85602" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8779-93"
+ width="0.26456475"
+ height="0.26455694"
+ x="64.667503"
+ y="148.85602" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8779-60"
+ width="0.26456475"
+ height="0.26455694"
+ x="63.87381"
+ y="148.85602" />
+ <rect
+ y="146.21039"
+ x="63.87381"
+ height="0.26455694"
+ width="0.26456478"
+ id="rect8817-54-3"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="145.41667"
+ x="64.402939"
+ height="0.26455694"
+ width="0.26456478"
+ id="rect8817-54-6"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="146.21039"
+ x="64.932068"
+ height="0.26455694"
+ width="0.26456478"
+ id="rect8817-54-7"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="145.41667"
+ x="64.138374"
+ height="0.26455694"
+ width="0.26456478"
+ id="rect8817-54-5"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="-146.73952"
+ x="64.667496"
+ height="0.26455694"
+ width="0.26456475"
+ id="rect8817-04-5-3"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ transform="scale(1,-1)" />
+ <rect
+ y="-146.47493"
+ x="63.609245"
+ height="0.26455694"
+ width="0.26456475"
+ id="rect8817-04-5-7"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ transform="scale(1,-1)" />
+ <rect
+ y="145.94583"
+ x="65.725815"
+ height="0.26455694"
+ width="0.26456478"
+ id="rect8817-83"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="146.47493"
+ x="64.932068"
+ height="0.26455694"
+ width="0.26456478"
+ id="rect8817-83-6"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="146.73952"
+ x="63.87381"
+ height="0.26455694"
+ width="0.26456478"
+ id="rect8817-24-9"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="143.03542"
+ x="62.286213"
+ height="3.7041543"
+ width="1.3229183"
+ id="rect9043"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#4696db;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52916664;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="146.47516"
+ x="65.461311"
+ height="0.26455694"
+ width="0.26456475"
+ id="rect8701"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8703"
+ width="0.26456475"
+ height="0.26455694"
+ x="65.99044"
+ y="146.73972" />
+ <rect
+ y="147.00426"
+ x="65.725876"
+ height="0.26455694"
+ width="0.26456475"
+ id="rect8705"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8707"
+ width="0.26456475"
+ height="0.26455694"
+ x="66.519569"
+ y="147.00426" />
+ <rect
+ y="147.53343"
+ x="66.255005"
+ height="0.26455694"
+ width="0.26456475"
+ id="rect8709"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8711"
+ width="0.26456475"
+ height="0.26455694"
+ x="65.725876"
+ y="148.0625" />
+ <rect
+ y="147.53343"
+ x="65.461311"
+ height="0.26455694"
+ width="0.26456475"
+ id="rect8713"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8715"
+ width="0.26456475"
+ height="0.26455694"
+ x="65.725876"
+ y="147.53343" />
+ <rect
+ y="148.0625"
+ x="66.519569"
+ height="0.26455694"
+ width="0.26456475"
+ id="rect8717"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8719"
+ width="0.26456475"
+ height="0.26455694"
+ x="65.461311"
+ y="148.59163" />
+ <rect
+ y="148.59163"
+ x="65.99044"
+ height="0.26455694"
+ width="0.26456475"
+ id="rect8721"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8723"
+ width="0.26456475"
+ height="0.26455694"
+ x="66.255005"
+ y="148.32709" />
+ <rect
+ y="148.59163"
+ x="66.784134"
+ height="0.26455694"
+ width="0.26456475"
+ id="rect8725"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8727"
+ width="0.26456478"
+ height="0.26455694"
+ x="66.784134"
+ y="147.53343" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8729"
+ width="0.26456478"
+ height="0.26455694"
+ x="65.99044"
+ y="147.79797" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8735"
+ width="0.26456478"
+ height="0.26455694"
+ x="65.99044"
+ y="146.21057" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8737"
+ width="0.26456478"
+ height="0.26455694"
+ x="65.7258"
+ y="146.47501" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8739"
+ width="0.26456478"
+ height="0.26455694"
+ x="66.784134"
+ y="146.21057" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8741"
+ width="0.26456478"
+ height="0.26455694"
+ x="67.048698"
+ y="146.21057" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8743"
+ width="0.26456478"
+ height="0.26455694"
+ x="67.048698"
+ y="146.73972" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8747"
+ width="0.26456478"
+ height="0.26455694"
+ x="67.313263"
+ y="147.00426" />
+ <rect
+ transform="scale(1,-1)"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8749"
+ width="0.26456475"
+ height="0.26455694"
+ x="67.313255"
+ y="-147.79797" />
+ <rect
+ transform="scale(1,-1)"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8753"
+ width="0.26456475"
+ height="0.26455694"
+ x="67.57782"
+ y="-147.26881" />
+ <rect
+ transform="scale(1,-1)"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8755"
+ width="0.26456475"
+ height="0.26455694"
+ x="67.57782"
+ y="-147.79797" />
+ <rect
+ transform="scale(1,-1)"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8757"
+ width="0.26456475"
+ height="0.26455694"
+ x="67.57782"
+ y="-148.32709" />
+ <rect
+ transform="scale(1,-1)"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8759"
+ width="0.26456475"
+ height="0.26455694"
+ x="67.57782"
+ y="-148.59163" />
+ <rect
+ y="-146.73972"
+ x="67.842384"
+ height="0.26455694"
+ width="0.26456475"
+ id="rect8761"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ transform="scale(1,-1)" />
+ <rect
+ y="147.26881"
+ x="67.842392"
+ height="0.26455697"
+ width="0.26456481"
+ id="rect8763"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="148.59163"
+ x="67.842392"
+ height="0.26455697"
+ width="0.26456481"
+ id="rect8765"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="148.0625"
+ x="65.196747"
+ height="0.26455694"
+ width="0.26456475"
+ id="rect8767"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="147.00426"
+ x="65.196747"
+ height="0.26455694"
+ width="0.26456475"
+ id="rect8770"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="146.21057"
+ x="64.932182"
+ height="0.26455694"
+ width="0.26456475"
+ id="rect8772"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="147.53343"
+ x="64.932182"
+ height="0.26455694"
+ width="0.26456475"
+ id="rect8774"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="145.946"
+ x="65.461311"
+ height="0.26455694"
+ width="0.26456475"
+ id="rect8776"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="145.946"
+ x="66.784134"
+ height="0.26455694"
+ width="0.26456475"
+ id="rect8778"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="145.946"
+ x="67.313263"
+ height="0.26455694"
+ width="0.26456475"
+ id="rect8782"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="145.946"
+ x="67.577827"
+ height="0.26455694"
+ width="0.26456475"
+ id="rect8784"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="145.946"
+ x="65.196747"
+ height="0.26455694"
+ width="0.26456475"
+ id="rect8786"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="146.73972"
+ x="65.461311"
+ height="0.26455694"
+ width="0.26456475"
+ id="rect8788"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8790"
+ width="0.26456478"
+ height="0.26455694"
+ x="67.313263"
+ y="148.59163" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8792"
+ width="0.26456478"
+ height="0.26455694"
+ x="67.048698"
+ y="148.59163" />
+ <rect
+ transform="scale(1,-1)"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8794"
+ width="0.26456475"
+ height="0.26455694"
+ x="67.048691"
+ y="-148.59163" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8796"
+ width="0.26456478"
+ height="0.26455694"
+ x="67.842392"
+ y="148.32709" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8798"
+ width="0.26456478"
+ height="0.26455694"
+ x="67.048698"
+ y="147.79797" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8800"
+ width="0.26456478"
+ height="0.26455694"
+ x="67.313263"
+ y="148.0625" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8802"
+ width="0.26456478"
+ height="0.26455694"
+ x="65.461311"
+ y="147.26881" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8804"
+ width="0.26456478"
+ height="0.26455694"
+ x="65.99044"
+ y="147.26881" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8806"
+ width="0.26456478"
+ height="0.26455694"
+ x="66.784134"
+ y="147.26881" />
+ <rect
+ y="144.88741"
+ x="66.51947"
+ height="0.26455694"
+ width="0.26456478"
+ id="rect8817-5-6"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="144.88753"
+ x="67.313316"
+ height="0.26455694"
+ width="0.26456478"
+ id="rect8817-1-1"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="145.41656"
+ x="66.254906"
+ height="0.26455694"
+ width="0.26456478"
+ id="rect8817-7-8"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="145.41656"
+ x="65.461197"
+ height="0.26455694"
+ width="0.26456478"
+ id="rect8817-4-7"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="145.68109"
+ x="66.784058"
+ height="0.26455694"
+ width="0.26456478"
+ id="rect8817-42-9"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="144.88741"
+ x="65.725784"
+ height="0.26455694"
+ width="0.26456478"
+ id="rect8817-0-2"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="145.68109"
+ x="65.46122"
+ height="0.26455694"
+ width="0.26456478"
+ id="rect8817-51-0"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="145.15198"
+ x="67.577728"
+ height="0.26455694"
+ width="0.26456478"
+ id="rect8817-57-9"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="144.88741"
+ x="67.577728"
+ height="0.26455694"
+ width="0.26456478"
+ id="rect8817-45-2"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="145.68109"
+ x="67.048599"
+ height="0.26455694"
+ width="0.26456478"
+ id="rect8817-570-2"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="-145.41656"
+ x="67.842285"
+ height="0.26455694"
+ width="0.26456475"
+ id="rect8817-04-4-2"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ transform="scale(1,-1)" />
+ <rect
+ y="-145.94566"
+ x="67.842285"
+ height="0.26455694"
+ width="0.26456475"
+ id="rect8817-04-60-9"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ transform="scale(1,-1)" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8779-9-9"
+ width="0.26456475"
+ height="0.26455694"
+ x="65.46122"
+ y="144.88741" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8779-1-4"
+ width="0.26456475"
+ height="0.26455694"
+ x="65.196655"
+ y="145.41656" />
+ <rect
+ y="145.946"
+ x="66.255081"
+ height="0.26455694"
+ width="0.26456475"
+ id="rect8786-63"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="147.26891"
+ x="66.255081"
+ height="0.26455694"
+ width="0.26456475"
+ id="rect8786-2"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="147.26891"
+ x="67.048836"
+ height="0.26455694"
+ width="0.26456475"
+ id="rect8786-0"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="148.32724"
+ x="66.519669"
+ height="0.26455694"
+ width="0.26456475"
+ id="rect8786-61"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="144.88766"
+ x="66.784248"
+ height="0.26455694"
+ width="0.26456475"
+ id="rect8786-5"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#4696db;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52916664;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect9045"
+ width="1.852071"
+ height="4.4977989"
+ x="143.03542"
+ y="-68.106956"
+ transform="rotate(90)" />
+ <path
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 65.7258,145.41667 v 0.52917 h 1.058334 v 0.79375 l 1.058333,-1.05834 -1.058333,-1.05833 v 0.79375 z"
+ id="path8440"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccc" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52916664;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8633"
+ width="1.3229166"
+ height="0.26458332"
+ x="65.46122"
+ y="145.15207" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52916664;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8635"
+ width="0.26458332"
+ height="0.79374999"
+ x="66.519554"
+ y="144.35832" />
+ <path
+ style="fill:#ffffff;fill-rule:evenodd;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 66.784135,144.35832 1.322917,1.32292 h -0.264583 l -1.058334,-1.05834 z"
+ id="path8637"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8639"
+ d="m 66.784135,147.00415 1.322917,-1.32292 h -0.264583 l -1.058334,1.05834 z"
+ style="fill:#ffffff;fill-rule:evenodd;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <rect
+ y="145.94582"
+ x="65.328926"
+ height="0.26458332"
+ width="1.3229166"
+ id="rect8663"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52916664;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="144.88741"
+ x="66.254951"
+ height="0.26455694"
+ width="0.26456478"
+ id="rect8817-0-2-3"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="146.73949"
+ x="66.254951"
+ height="0.26455694"
+ width="0.26456478"
+ id="rect8817-0-2-6"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="146.4749"
+ x="67.313286"
+ height="0.26455694"
+ width="0.26456478"
+ id="rect8817-0-2-7"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="146.21033"
+ x="66.254951"
+ height="0.26455694"
+ width="0.26456478"
+ id="rect8817-0-2-5"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.52915323;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#db2424;fill-opacity:1;fill-rule:evenodd;stroke:#db2424;stroke-width:0.52916664;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8422"
+ width="1.3229166"
+ height="1.3229166"
+ x="63.873718"
+ y="145.15207" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_correct_affine-24.svg b/pixmaps/src/gwy_correct_affine-24.svg
new file mode 100644
index 0000000..71b29bc
--- /dev/null
+++ b/pixmaps/src/gwy_correct_affine-24.svg
@@ -0,0 +1,176 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92+devel unknown"
+ sodipodi:docname="gwy_correct_affine-24.svg"
+ inkscape:export-filename="/home/lila/Documents/Gwyddion/gwy_poly_distort-24.png"
+ inkscape:export-xdpi="2.9028571"
+ inkscape:export-ydpi="2.9028571">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="37.374999"
+ inkscape:cx="12.298805"
+ inkscape:cy="7.6847778"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1149"
+ inkscape:window-x="0"
+ inkscape:window-y="32"
+ inkscape:window-maximized="1"
+ units="px"
+ inkscape:snap-smooth-nodes="false"
+ inkscape:snap-intersection-paths="true"
+ inkscape:snap-grids="true"
+ inkscape:object-nodes="true"
+ inkscape:document-rotation="0">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="0.5"
+ spacingy="0.5"
+ enabled="true"
+ visible="true"
+ units="px"
+ empspacing="2" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="Calque 2"
+ style="display:inline"
+ transform="translate(0,-1029.8622)" />
+ <g
+ inkscape:label="Calque 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ style="display:inline"
+ transform="translate(0,-1029.8622)">
+ <g
+ transform="matrix(1.0681162,0,0,1.0681162,-420.35261,321.51111)"
+ id="layer1-2"
+ inkscape:label="Layer 1"
+ style="fill:#8abce8;fill-opacity:1">
+ <rect
+ y="663.61682"
+ x="393.98462"
+ height="21.5625"
+ width="21.5625"
+ id="rect8276"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#8abce8;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.93750006;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ </g>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.00271773;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 0.96942952,1032.8344 H 11.984378"
+ id="path8650"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.00271773;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 0.96942952,1040.8447 H 11.984378"
+ id="path8654"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#cde2f5;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.00135887;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8689"
+ width="11.014949"
+ height="22.029898"
+ x="11.984379"
+ y="1030.8317" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.00271773;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 10.982965,1030.3304 -4.0054351,23.0311"
+ id="path8676"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8678"
+ d="m 4.975346,1030.3304 -4.0054357,23.0311"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.00271773;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#db2424;stroke-width:2.00271773;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 14.988455,1030.8316 v 22.0299"
+ id="path8691"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8693"
+ d="m 20.996608,1030.8316 v 22.0299"
+ style="fill:none;fill-rule:evenodd;stroke:#db2424;stroke-width:2.00271773;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <g
+ id="g8703"
+ transform="matrix(0,1.0681162,-1.0681162,0,1130.0213,1022.8207)"
+ style="stroke:#db2424;stroke-width:1.875;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#db2424;stroke-width:1.875;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 9.375,1036.4252 v 10.3125"
+ id="path8697"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8699"
+ d="m 15,1036.4252 v 10.3125"
+ style="fill:none;fill-rule:evenodd;stroke:#db2424;stroke-width:1.875;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="cc" />
+ </g>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#db2424;stroke-width:2.00271773;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 22.99946,1044.8515 H 11.984511"
+ id="path8705"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path8713"
+ d="M 22.99946,1050.859 H 11.984511"
+ style="fill:none;fill-rule:evenodd;stroke:#db2424;stroke-width:2.00271773;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path8513"
+ d="M 0.96942986,1048.855 H 11.984378"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.00271773;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_correlation_mask-24.svg b/pixmaps/src/gwy_correlation_mask-24.svg
new file mode 100644
index 0000000..ed9f338
--- /dev/null
+++ b/pixmaps/src/gwy_correlation_mask-24.svg
@@ -0,0 +1,180 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8798"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_correlation_mask-24.svg">
+ <defs
+ id="defs8800">
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8413"
+ id="radialGradient9160"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.70751116,0,0,0.70751116,-223.01835,60.733619)"
+ cx="366.46545"
+ cy="526.93652"
+ fx="366.46545"
+ fy="526.93652"
+ r="4.2401776" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient8413">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop8415" />
+ <stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop8417" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8413"
+ id="radialGradient9156"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.70751116,0,0,0.70751116,-231.51835,51.233589)"
+ cx="366.46545"
+ cy="526.93652"
+ fx="366.46545"
+ fy="526.93652"
+ r="4.2401776" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="10.13228"
+ inkscape:cx="-155.1377"
+ inkscape:cy="-28.637061"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8803">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-18.260046,-413.54694)">
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#d0e2f2;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect11370"
+ width="23.000002"
+ height="23.000002"
+ x="18.760046"
+ y="414.04694" />
+ <circle
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:url(#radialGradient9156);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.83099997;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:2.49299991, 2.49299991;stroke-dashoffset:1.32959986;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="circle9154"
+ cx="27.760046"
+ cy="424.04694"
+ r="2.9999731" />
+ <circle
+ r="2.9999731"
+ cy="433.54694"
+ cx="36.260048"
+ id="circle9158"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:url(#radialGradient9160);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.83099997;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:2.49299991, 2.49299991;stroke-dashoffset:1.32959986;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect4793"
+ width="4"
+ height="2.0000041"
+ x="21.260046"
+ y="431.54694" />
+ <rect
+ y="416.54694"
+ x="23.260046"
+ height="2.0000041"
+ width="4"
+ id="rect4801"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#db2424;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect4803"
+ width="7.0000019"
+ height="4.9999962"
+ x="32.760044"
+ y="424.04694" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect4805"
+ width="4"
+ height="2.0000041"
+ x="34.260048"
+ y="425.54694" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect4807"
+ width="9"
+ height="9"
+ x="32.760044"
+ y="414.04694" />
+ <rect
+ y="417.54694"
+ x="35.260048"
+ height="2.0000041"
+ width="4"
+ id="rect4809"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="430.04694"
+ x="19.760044"
+ height="4.9999962"
+ width="7.0000019"
+ id="rect8433"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#db2424;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#db2424;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8435"
+ width="7.0000019"
+ height="4.9999962"
+ x="21.760044"
+ y="415.04694" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_crop-24.svg b/pixmaps/src/gwy_crop-24.svg
new file mode 100644
index 0000000..d4f5987
--- /dev/null
+++ b/pixmaps/src/gwy_crop-24.svg
@@ -0,0 +1,158 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8440"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_crop-24.svg"
+ inkscape:export-filename="gwy_crop-24.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs8442">
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath8428-3">
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#eb0000;fill-opacity:0.41158537;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8430-6"
+ width="92.534042"
+ height="72.344795"
+ x="77.848434"
+ y="-55.845753"
+ transform="matrix(0.51658212,0.85623765,0.85623765,-0.51658212,0,0)" />
+ </clipPath>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1.0011664"
+ inkscape:cx="-65.068902"
+ inkscape:cy="-95.049348"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-global="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8445">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-18.260046,-276.07986)">
+ <g
+ id="g8093"
+ transform="matrix(1.5663594,0,0,1.5663594,-14.147555,-159.72079)">
+ <g
+ id="g8081">
+ <g
+ id="layer1-2-5"
+ transform="matrix(0.11133151,0,0,0.11133151,17.616735,273.82647)"
+ style="fill:#000000;stroke:none"
+ inkscape:export-filename="gwy_crop-24.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <g
+ transform="translate(-531.25,-536.32)"
+ id="g2648-3"
+ style="fill:#000000;stroke:none">
+ <path
+ style="fill:#000000;stroke:none"
+ d="m 224.67578,20.316406 -7.5957,0.789063 c -0.0434,0.162544 -3.23828,0.291015 -3.23828,0.291015 -0.57113,0.06012 -0.96398,0.156305 -1.17774,0.291016 -0.21041,0.134711 -0.1875,0.764698 -0.1875,1.066406 0,0.357374 0.18282,0.652923 0.54688,0.886719 0.36516,0.230456 0.83121,0.34375 1.40234,0.34375 1.2458,0 2.05226,-0.466593 2.42188,-1.398437 l 0.0586,-0.140626 c 0.11912,-0.297255 0.72363,-0.44334 0.7793,-0.435546 l 0.14257,0.01172 c 0.0356,0.0033 0.0811,0.0059 0.13672,0.0059 [...]
+ transform="matrix(8.9821822,0,0,8.9821822,-1346.7769,437.99079)"
+ id="path2580-5"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 617.23,638.2 9.62,-0.8 17.73,26.23 h -11.8 L 617.23,638.2"
+ style="fill:#000000;stroke:none"
+ id="path2578-6"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 616.96,633.39 c 1.6,0 2.41,-0.89 2.41,-2.67 0,-1.64 -0.95,-2.45 -2.84,-2.45 -1.6,0 -2.4,0.87 -2.4,2.61 0,1.68 0.94,2.51 2.83,2.51"
+ style="fill:#000000;stroke:none"
+ id="path2572-2"
+ inkscape:connector-curvature="0" />
+ </g>
+ </g>
+ <g
+ style="fill:#000000;fill-opacity:1;stroke:none"
+ transform="matrix(0.06752182,0.0885184,0.0885184,-0.06752182,13.120175,283.20038)"
+ id="g8412-9"
+ clip-path="url(#clipPath8428-3)"
+ inkscape:export-filename="gwy_crop-24.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <g
+ style="fill:#000000;fill-opacity:1;stroke:none"
+ id="g8414-1"
+ transform="translate(-531.25,-536.32)">
+ <path
+ inkscape:connector-curvature="0"
+ id="path8416-2"
+ transform="matrix(8.9821822,0,0,8.9821822,-1346.7769,437.99079)"
+ d="m 224.67578,20.316406 -7.5957,0.789063 c -0.0434,0.162544 -3.23828,0.291015 -3.23828,0.291015 -0.57113,0.06012 -0.96398,0.156305 -1.17774,0.291016 -0.21041,0.134711 -0.1875,0.764698 -0.1875,1.066406 0,0.357374 0.18282,0.652923 0.54688,0.886719 0.36516,0.230456 0.83121,0.34375 1.40234,0.34375 1.2458,0 2.05226,-0.466593 2.42188,-1.398437 l 0.0586,-0.140626 c 0.11912,-0.297255 0.72363,-0.44334 0.7793,-0.435546 l 0.14257,0.01172 c 0.0356,0.0033 0.0811,0.0059 0.13672,0.0059 [...]
+ style="fill:#000000;fill-opacity:1;stroke:none" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8418-7"
+ style="fill:#000000;fill-opacity:1;stroke:none"
+ d="m 617.23,638.2 9.62,-0.8 17.73,26.23 h -11.8 L 617.23,638.2" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8420-0"
+ style="fill:#000000;fill-opacity:1;stroke:none"
+ d="m 616.96,633.39 c 1.6,0 2.41,-0.89 2.41,-2.67 0,-1.64 -0.95,-2.45 -2.84,-2.45 -1.6,0 -2.4,0.87 -2.4,2.61 0,1.68 0.94,2.51 2.83,2.51" />
+ </g>
+ </g>
+ </g>
+ </g>
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#7db846;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:2, 1;stroke-dashoffset:0.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 25.760046,289.57986 h 16.000002 v 10.00001 H 25.760046 Z"
+ id="rect11972-9"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_cwt-24.svg b/pixmaps/src/gwy_cwt-24.svg
new file mode 100644
index 0000000..27fcc96
--- /dev/null
+++ b/pixmaps/src/gwy_cwt-24.svg
@@ -0,0 +1,1632 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8233"
+ version="1.1"
+ inkscape:version="0.92+devel unknown"
+ sodipodi:docname="gwy_cwt-24.svg">
+ <defs
+ id="defs8235">
+ <circle
+ stroke-width="0.5"
+ r="0.5"
+ id="gpDot" />
+ <path
+ d="M-1,0 h2 M0,-1 v2"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt0" />
+ <path
+ d="M-1,-1 L1,1 M1,-1 L-1,1"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt1" />
+ <path
+ d="M-1,0 L1,0 M0,-1 L0,1 M-1,-1 L1,1 M-1,1 L1,-1"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt2" />
+ <rect
+ height="2"
+ width="2"
+ y="-1"
+ x="-1"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt3" />
+ <rect
+ height="2"
+ width="2"
+ y="-1"
+ x="-1"
+ fill="currentColor"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt4" />
+ <circle
+ r="1"
+ cy="0"
+ cx="0"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt5" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt6"
+ xlink:href="#gpPt5" />
+ <path
+ d="M0,-1.33 L-1.33,0.67 L1.33,0.67 z"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt7" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt8"
+ xlink:href="#gpPt7" />
+ <use
+ transform="rotate(180)"
+ stroke="currentColor"
+ id="gpPt9"
+ xlink:href="#gpPt7" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt10"
+ xlink:href="#gpPt9" />
+ <use
+ transform="rotate(45)"
+ stroke="currentColor"
+ id="gpPt11"
+ xlink:href="#gpPt3" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt12"
+ xlink:href="#gpPt11" />
+ <path
+ d="M0,1.330 L1.265,0.411 L0.782,-1.067 L-0.782,-1.076 L-1.265,0.411 z"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt13" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt14"
+ xlink:href="#gpPt13" />
+ <filter
+ width="1"
+ height="1"
+ y="0"
+ x="0"
+ filterUnits="objectBoundingBox"
+ id="textbox">
+ <feFlood
+ id="feFlood4495"
+ result="bgnd"
+ flood-opacity="1"
+ flood-color="white" />
+ <feComposite
+ id="feComposite4497"
+ operator="atop"
+ in2="bgnd"
+ in="SourceGraphic" />
+ </filter>
+ <filter
+ width="1"
+ height="1"
+ y="0"
+ x="0"
+ filterUnits="objectBoundingBox"
+ id="greybox">
+ <feFlood
+ id="feFlood4500"
+ result="grey"
+ flood-opacity="1"
+ flood-color="lightgrey" />
+ <feComposite
+ id="feComposite4502"
+ operator="atop"
+ in2="grey"
+ in="SourceGraphic" />
+ </filter>
+ <circle
+ stroke-width="0.5"
+ r="0.5"
+ id="gpDot-4" />
+ <path
+ d="M-1,0 h2 M0,-1 v2"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt0-5" />
+ <path
+ d="M-1,-1 L1,1 M1,-1 L-1,1"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt1-2" />
+ <path
+ d="M-1,0 L1,0 M0,-1 L0,1 M-1,-1 L1,1 M-1,1 L1,-1"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt2-5" />
+ <rect
+ height="2"
+ width="2"
+ y="-1"
+ x="-1"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt3-9" />
+ <rect
+ height="2"
+ width="2"
+ y="-1"
+ x="-1"
+ fill="currentColor"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt4-3" />
+ <circle
+ r="1"
+ cy="0"
+ cx="0"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt5-8" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt6-8"
+ xlink:href="#gpPt5-8" />
+ <path
+ d="M0,-1.33 L-1.33,0.67 L1.33,0.67 z"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt7-4" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt8-3"
+ xlink:href="#gpPt7-4" />
+ <use
+ transform="rotate(180)"
+ stroke="currentColor"
+ id="gpPt9-5"
+ xlink:href="#gpPt7-4" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt10-0"
+ xlink:href="#gpPt9-5" />
+ <use
+ transform="rotate(45)"
+ stroke="currentColor"
+ id="gpPt11-5"
+ xlink:href="#gpPt3-9" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt12-9"
+ xlink:href="#gpPt11-5" />
+ <path
+ d="M0,1.330 L1.265,0.411 L0.782,-1.067 L-0.782,-1.076 L-1.265,0.411 z"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt13-3" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt14-4"
+ xlink:href="#gpPt13-3" />
+ <filter
+ width="1"
+ height="1"
+ y="0"
+ x="0"
+ filterUnits="objectBoundingBox"
+ id="textbox-6">
+ <feFlood
+ id="feFlood4756"
+ result="bgnd"
+ flood-opacity="1"
+ flood-color="white" />
+ <feComposite
+ id="feComposite4758"
+ operator="atop"
+ in2="bgnd"
+ in="SourceGraphic" />
+ </filter>
+ <filter
+ width="1"
+ height="1"
+ y="0"
+ x="0"
+ filterUnits="objectBoundingBox"
+ id="greybox-2">
+ <feFlood
+ id="feFlood4761"
+ result="grey"
+ flood-opacity="1"
+ flood-color="lightgrey" />
+ <feComposite
+ id="feComposite4763"
+ operator="atop"
+ in2="grey"
+ in="SourceGraphic" />
+ </filter>
+ <circle
+ stroke-width="0.5"
+ r="0.5"
+ id="gpDot-5" />
+ <path
+ d="M-1,0 h2 M0,-1 v2"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt0-3" />
+ <path
+ d="M-1,-1 L1,1 M1,-1 L-1,1"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt1-20" />
+ <path
+ d="M-1,0 L1,0 M0,-1 L0,1 M-1,-1 L1,1 M-1,1 L1,-1"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt2-0" />
+ <rect
+ height="2"
+ width="2"
+ y="-1"
+ x="-1"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt3-0" />
+ <rect
+ height="2"
+ width="2"
+ y="-1"
+ x="-1"
+ fill="currentColor"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt4-9" />
+ <circle
+ r="1"
+ cy="0"
+ cx="0"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt5-80" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt6-9"
+ xlink:href="#gpPt5-80" />
+ <path
+ d="M0,-1.33 L-1.33,0.67 L1.33,0.67 z"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt7-6" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt8-7"
+ xlink:href="#gpPt7-6" />
+ <use
+ transform="rotate(180)"
+ stroke="currentColor"
+ id="gpPt9-2"
+ xlink:href="#gpPt7-6" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt10-1"
+ xlink:href="#gpPt9-2" />
+ <use
+ transform="rotate(45)"
+ stroke="currentColor"
+ id="gpPt11-4"
+ xlink:href="#gpPt3-0" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt12-4"
+ xlink:href="#gpPt11-4" />
+ <path
+ d="M0,1.330 L1.265,0.411 L0.782,-1.067 L-0.782,-1.076 L-1.265,0.411 z"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt13-8" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt14-49"
+ xlink:href="#gpPt13-8" />
+ <filter
+ width="1"
+ height="1"
+ y="0"
+ x="0"
+ filterUnits="objectBoundingBox"
+ id="textbox-8">
+ <feFlood
+ id="feFlood5017"
+ result="bgnd"
+ flood-opacity="1"
+ flood-color="white" />
+ <feComposite
+ id="feComposite5019"
+ operator="atop"
+ in2="bgnd"
+ in="SourceGraphic" />
+ </filter>
+ <filter
+ width="1"
+ height="1"
+ y="0"
+ x="0"
+ filterUnits="objectBoundingBox"
+ id="greybox-4">
+ <feFlood
+ id="feFlood5022"
+ result="grey"
+ flood-opacity="1"
+ flood-color="lightgrey" />
+ <feComposite
+ id="feComposite5024"
+ operator="atop"
+ in2="grey"
+ in="SourceGraphic" />
+ </filter>
+ <defs
+ id="defs5027">
+ <circle
+ cy="0"
+ cx="0"
+ id="circle5089"
+ r="0.5"
+ stroke-width="0.5" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path5091"
+ stroke-width="0.222"
+ stroke="currentColor"
+ d="M -1,0 H 1 M 0,-1 v 2" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path5093"
+ stroke-width="0.222"
+ stroke="currentColor"
+ d="M -1,-1 1,1 M 1,-1 -1,1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path5095"
+ stroke-width="0.222"
+ stroke="currentColor"
+ d="M -1,0 H 1 M 0,-1 v 2 m -1,-2 2,2 m -2,0 2,-2" />
+ <rect
+ id="rect5097"
+ stroke-width="0.222"
+ stroke="currentColor"
+ x="-1"
+ y="-1"
+ width="2"
+ height="2" />
+ <rect
+ id="rect5099"
+ stroke-width="0.222"
+ stroke="currentColor"
+ fill="currentColor"
+ x="-1"
+ y="-1"
+ width="2"
+ height="2" />
+ <circle
+ id="circle5101"
+ stroke-width="0.222"
+ stroke="currentColor"
+ cx="0"
+ cy="0"
+ r="1" />
+ <use
+ height="100%"
+ width="100%"
+ y="0"
+ x="0"
+ xlink:href="#gpPt5-80"
+ id="use5103"
+ fill="currentColor"
+ stroke="none" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path5105"
+ stroke-width="0.222"
+ stroke="currentColor"
+ d="m 0,-1.33 -1.33,2 h 2.66 z" />
+ <use
+ height="100%"
+ width="100%"
+ y="0"
+ x="0"
+ xlink:href="#gpPt7-6"
+ id="use5107"
+ fill="currentColor"
+ stroke="none" />
+ <use
+ height="100%"
+ width="100%"
+ y="0"
+ x="0"
+ xlink:href="#gpPt7-6"
+ id="use5109"
+ stroke="currentColor"
+ transform="scale(-1)" />
+ <use
+ height="100%"
+ width="100%"
+ y="0"
+ x="0"
+ xlink:href="#gpPt9-2"
+ id="use5111"
+ fill="currentColor"
+ stroke="none" />
+ <use
+ height="100%"
+ width="100%"
+ y="0"
+ x="0"
+ xlink:href="#gpPt3-0"
+ id="use5113"
+ stroke="currentColor"
+ transform="rotate(45)" />
+ <use
+ height="100%"
+ width="100%"
+ y="0"
+ x="0"
+ xlink:href="#gpPt11-4"
+ id="use5115"
+ fill="currentColor"
+ stroke="none" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path5117"
+ stroke-width="0.222"
+ stroke="currentColor"
+ d="M 0,1.33 1.265,0.411 0.782,-1.067 -0.782,-1.076 -1.265,0.411 Z" />
+ <use
+ height="100%"
+ width="100%"
+ y="0"
+ x="0"
+ xlink:href="#gpPt13-8"
+ id="use5119"
+ fill="currentColor"
+ stroke="none" />
+ <filter
+ id="filter5125"
+ filterUnits="objectBoundingBox"
+ x="0"
+ y="0"
+ height="1"
+ width="1">
+ <feFlood
+ flood-color="white"
+ flood-opacity="1"
+ result="bgnd"
+ id="feFlood5121" />
+ <feComposite
+ in="SourceGraphic"
+ in2="bgnd"
+ operator="atop"
+ id="feComposite5123" />
+ </filter>
+ <filter
+ id="filter5131"
+ filterUnits="objectBoundingBox"
+ x="0"
+ y="0"
+ height="1"
+ width="1">
+ <feFlood
+ flood-color="lightgrey"
+ flood-opacity="1"
+ result="grey"
+ id="feFlood5127" />
+ <feComposite
+ in="SourceGraphic"
+ in2="grey"
+ operator="atop"
+ id="feComposite5129" />
+ </filter>
+ </defs>
+ <circle
+ stroke-width="0.5"
+ r="0.5"
+ id="gpDot-41" />
+ <path
+ d="M-1,0 h2 M0,-1 v2"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt0-9" />
+ <path
+ d="M-1,-1 L1,1 M1,-1 L-1,1"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt1-6" />
+ <path
+ d="M-1,0 L1,0 M0,-1 L0,1 M-1,-1 L1,1 M-1,1 L1,-1"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt2-8" />
+ <rect
+ height="2"
+ width="2"
+ y="-1"
+ x="-1"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt3-09" />
+ <rect
+ height="2"
+ width="2"
+ y="-1"
+ x="-1"
+ fill="currentColor"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt4-36" />
+ <circle
+ r="1"
+ cy="0"
+ cx="0"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt5-3" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt6-89"
+ xlink:href="#gpPt5-3" />
+ <path
+ d="M0,-1.33 L-1.33,0.67 L1.33,0.67 z"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt7-5" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt8-0"
+ xlink:href="#gpPt7-5" />
+ <use
+ transform="rotate(180)"
+ stroke="currentColor"
+ id="gpPt9-1"
+ xlink:href="#gpPt7-5" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt10-7"
+ xlink:href="#gpPt9-1" />
+ <use
+ transform="rotate(45)"
+ stroke="currentColor"
+ id="gpPt11-1"
+ xlink:href="#gpPt3-09" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt12-98"
+ xlink:href="#gpPt11-1" />
+ <path
+ d="M0,1.330 L1.265,0.411 L0.782,-1.067 L-0.782,-1.076 L-1.265,0.411 z"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt13-2" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt14-6"
+ xlink:href="#gpPt13-2" />
+ <filter
+ width="1"
+ height="1"
+ y="0"
+ x="0"
+ filterUnits="objectBoundingBox"
+ id="textbox-7">
+ <feFlood
+ id="feFlood6613"
+ result="bgnd"
+ flood-opacity="1"
+ flood-color="white" />
+ <feComposite
+ id="feComposite6615"
+ operator="atop"
+ in2="bgnd"
+ in="SourceGraphic" />
+ </filter>
+ <filter
+ width="1"
+ height="1"
+ y="0"
+ x="0"
+ filterUnits="objectBoundingBox"
+ id="greybox-5">
+ <feFlood
+ id="feFlood6618"
+ result="grey"
+ flood-opacity="1"
+ flood-color="lightgrey" />
+ <feComposite
+ id="feComposite6620"
+ operator="atop"
+ in2="grey"
+ in="SourceGraphic" />
+ </filter>
+ <defs
+ id="defs6623">
+ <circle
+ cy="0"
+ cx="0"
+ id="circle6685"
+ r="0.5"
+ stroke-width="0.5" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path6687"
+ stroke-width="0.222"
+ stroke="currentColor"
+ d="M -1,0 H 1 M 0,-1 v 2" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path6689"
+ stroke-width="0.222"
+ stroke="currentColor"
+ d="M -1,-1 1,1 M 1,-1 -1,1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path6691"
+ stroke-width="0.222"
+ stroke="currentColor"
+ d="M -1,0 H 1 M 0,-1 v 2 m -1,-2 2,2 m -2,0 2,-2" />
+ <rect
+ id="rect6693"
+ stroke-width="0.222"
+ stroke="currentColor"
+ x="-1"
+ y="-1"
+ width="2"
+ height="2" />
+ <rect
+ id="rect6695"
+ stroke-width="0.222"
+ stroke="currentColor"
+ fill="currentColor"
+ x="-1"
+ y="-1"
+ width="2"
+ height="2" />
+ <circle
+ id="circle6697"
+ stroke-width="0.222"
+ stroke="currentColor"
+ cx="0"
+ cy="0"
+ r="1" />
+ <use
+ height="100%"
+ width="100%"
+ y="0"
+ x="0"
+ xlink:href="#gpPt5-3"
+ id="use6699"
+ fill="currentColor"
+ stroke="none" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path6701"
+ stroke-width="0.222"
+ stroke="currentColor"
+ d="m 0,-1.33 -1.33,2 h 2.66 z" />
+ <use
+ height="100%"
+ width="100%"
+ y="0"
+ x="0"
+ xlink:href="#gpPt7-5"
+ id="use6703"
+ fill="currentColor"
+ stroke="none" />
+ <use
+ height="100%"
+ width="100%"
+ y="0"
+ x="0"
+ xlink:href="#gpPt7-5"
+ id="use6705"
+ stroke="currentColor"
+ transform="scale(-1)" />
+ <use
+ height="100%"
+ width="100%"
+ y="0"
+ x="0"
+ xlink:href="#gpPt9-1"
+ id="use6707"
+ fill="currentColor"
+ stroke="none" />
+ <use
+ height="100%"
+ width="100%"
+ y="0"
+ x="0"
+ xlink:href="#gpPt3-09"
+ id="use6709"
+ stroke="currentColor"
+ transform="rotate(45)" />
+ <use
+ height="100%"
+ width="100%"
+ y="0"
+ x="0"
+ xlink:href="#gpPt11-1"
+ id="use6711"
+ fill="currentColor"
+ stroke="none" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path6713"
+ stroke-width="0.222"
+ stroke="currentColor"
+ d="M 0,1.33 1.265,0.411 0.782,-1.067 -0.782,-1.076 -1.265,0.411 Z" />
+ <use
+ height="100%"
+ width="100%"
+ y="0"
+ x="0"
+ xlink:href="#gpPt13-2"
+ id="use6715"
+ fill="currentColor"
+ stroke="none" />
+ <filter
+ id="filter6721"
+ filterUnits="objectBoundingBox"
+ x="0"
+ y="0"
+ height="1"
+ width="1">
+ <feFlood
+ flood-color="white"
+ flood-opacity="1"
+ result="bgnd"
+ id="feFlood6717" />
+ <feComposite
+ in="SourceGraphic"
+ in2="bgnd"
+ operator="atop"
+ id="feComposite6719" />
+ </filter>
+ <filter
+ id="filter6727"
+ filterUnits="objectBoundingBox"
+ x="0"
+ y="0"
+ height="1"
+ width="1">
+ <feFlood
+ flood-color="lightgrey"
+ flood-opacity="1"
+ result="grey"
+ id="feFlood6723" />
+ <feComposite
+ in="SourceGraphic"
+ in2="grey"
+ operator="atop"
+ id="feComposite6725" />
+ </filter>
+ </defs>
+ <circle
+ stroke-width="0.5"
+ r="0.5"
+ id="gpDot-9" />
+ <path
+ d="M-1,0 h2 M0,-1 v2"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt0-97" />
+ <path
+ d="M-1,-1 L1,1 M1,-1 L-1,1"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt1-9" />
+ <path
+ d="M-1,0 L1,0 M0,-1 L0,1 M-1,-1 L1,1 M-1,1 L1,-1"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt2-7" />
+ <rect
+ height="2"
+ width="2"
+ y="-1"
+ x="-1"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt3-3" />
+ <rect
+ height="2"
+ width="2"
+ y="-1"
+ x="-1"
+ fill="currentColor"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt4-5" />
+ <circle
+ r="1"
+ cy="0"
+ cx="0"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt5-0" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt6-4"
+ xlink:href="#gpPt5-0" />
+ <path
+ d="M0,-1.33 L-1.33,0.67 L1.33,0.67 z"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt7-1" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt8-9"
+ xlink:href="#gpPt7-1" />
+ <use
+ transform="rotate(180)"
+ stroke="currentColor"
+ id="gpPt9-4"
+ xlink:href="#gpPt7-1" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt10-14"
+ xlink:href="#gpPt9-4" />
+ <use
+ transform="rotate(45)"
+ stroke="currentColor"
+ id="gpPt11-3"
+ xlink:href="#gpPt3-3" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt12-6"
+ xlink:href="#gpPt11-3" />
+ <path
+ d="M0,1.330 L1.265,0.411 L0.782,-1.067 L-0.782,-1.076 L-1.265,0.411 z"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt13-4" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt14-2"
+ xlink:href="#gpPt13-4" />
+ <filter
+ width="1"
+ height="1"
+ y="0"
+ x="0"
+ filterUnits="objectBoundingBox"
+ id="textbox-2">
+ <feFlood
+ id="feFlood6925"
+ result="bgnd"
+ flood-opacity="1"
+ flood-color="white" />
+ <feComposite
+ id="feComposite6927"
+ operator="atop"
+ in2="bgnd"
+ in="SourceGraphic" />
+ </filter>
+ <filter
+ width="1"
+ height="1"
+ y="0"
+ x="0"
+ filterUnits="objectBoundingBox"
+ id="greybox-7">
+ <feFlood
+ id="feFlood6930"
+ result="grey"
+ flood-opacity="1"
+ flood-color="lightgrey" />
+ <feComposite
+ id="feComposite6932"
+ operator="atop"
+ in2="grey"
+ in="SourceGraphic" />
+ </filter>
+ <circle
+ stroke-width="0.5"
+ r="0.5"
+ id="gpDot-8" />
+ <path
+ d="M-1,0 h2 M0,-1 v2"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt0-51" />
+ <path
+ d="M-1,-1 L1,1 M1,-1 L-1,1"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt1-1" />
+ <path
+ d="M-1,0 L1,0 M0,-1 L0,1 M-1,-1 L1,1 M-1,1 L1,-1"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt2-3" />
+ <rect
+ height="2"
+ width="2"
+ y="-1"
+ x="-1"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt3-06" />
+ <rect
+ height="2"
+ width="2"
+ y="-1"
+ x="-1"
+ fill="currentColor"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt4-4" />
+ <circle
+ r="1"
+ cy="0"
+ cx="0"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt5-4" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt6-7"
+ xlink:href="#gpPt5-4" />
+ <path
+ d="M0,-1.33 L-1.33,0.67 L1.33,0.67 z"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt7-53" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt8-8"
+ xlink:href="#gpPt7-53" />
+ <use
+ transform="rotate(180)"
+ stroke="currentColor"
+ id="gpPt9-27"
+ xlink:href="#gpPt7-53" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt10-3"
+ xlink:href="#gpPt9-27" />
+ <use
+ transform="rotate(45)"
+ stroke="currentColor"
+ id="gpPt11-53"
+ xlink:href="#gpPt3-06" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt12-7"
+ xlink:href="#gpPt11-53" />
+ <path
+ d="M0,1.330 L1.265,0.411 L0.782,-1.067 L-0.782,-1.076 L-1.265,0.411 z"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt13-48" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt14-0"
+ xlink:href="#gpPt13-48" />
+ <filter
+ width="1"
+ height="1"
+ y="0"
+ x="0"
+ filterUnits="objectBoundingBox"
+ id="textbox-0">
+ <feFlood
+ id="feFlood7186"
+ result="bgnd"
+ flood-opacity="1"
+ flood-color="white" />
+ <feComposite
+ id="feComposite7188"
+ operator="atop"
+ in2="bgnd"
+ in="SourceGraphic" />
+ </filter>
+ <filter
+ width="1"
+ height="1"
+ y="0"
+ x="0"
+ filterUnits="objectBoundingBox"
+ id="greybox-1">
+ <feFlood
+ id="feFlood7191"
+ result="grey"
+ flood-opacity="1"
+ flood-color="lightgrey" />
+ <feComposite
+ id="feComposite7193"
+ operator="atop"
+ in2="grey"
+ in="SourceGraphic" />
+ </filter>
+ <defs
+ id="defs7196">
+ <circle
+ cy="0"
+ cx="0"
+ id="circle7258"
+ r="0.5"
+ stroke-width="0.5" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path7260"
+ stroke-width="0.222"
+ stroke="currentColor"
+ d="M -1,0 H 1 M 0,-1 v 2" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path7262"
+ stroke-width="0.222"
+ stroke="currentColor"
+ d="M -1,-1 1,1 M 1,-1 -1,1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path7264"
+ stroke-width="0.222"
+ stroke="currentColor"
+ d="M -1,0 H 1 M 0,-1 v 2 m -1,-2 2,2 m -2,0 2,-2" />
+ <rect
+ id="rect7266"
+ stroke-width="0.222"
+ stroke="currentColor"
+ x="-1"
+ y="-1"
+ width="2"
+ height="2" />
+ <rect
+ id="rect7268"
+ stroke-width="0.222"
+ stroke="currentColor"
+ fill="currentColor"
+ x="-1"
+ y="-1"
+ width="2"
+ height="2" />
+ <circle
+ id="circle7270"
+ stroke-width="0.222"
+ stroke="currentColor"
+ cx="0"
+ cy="0"
+ r="1" />
+ <use
+ height="100%"
+ width="100%"
+ y="0"
+ x="0"
+ xlink:href="#gpPt5-4"
+ id="use7272"
+ fill="currentColor"
+ stroke="none" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path7274"
+ stroke-width="0.222"
+ stroke="currentColor"
+ d="m 0,-1.33 -1.33,2 h 2.66 z" />
+ <use
+ height="100%"
+ width="100%"
+ y="0"
+ x="0"
+ xlink:href="#gpPt7-53"
+ id="use7276"
+ fill="currentColor"
+ stroke="none" />
+ <use
+ height="100%"
+ width="100%"
+ y="0"
+ x="0"
+ xlink:href="#gpPt7-53"
+ id="use7278"
+ stroke="currentColor"
+ transform="scale(-1)" />
+ <use
+ height="100%"
+ width="100%"
+ y="0"
+ x="0"
+ xlink:href="#gpPt9-27"
+ id="use7280"
+ fill="currentColor"
+ stroke="none" />
+ <use
+ height="100%"
+ width="100%"
+ y="0"
+ x="0"
+ xlink:href="#gpPt3-06"
+ id="use7282"
+ stroke="currentColor"
+ transform="rotate(45)" />
+ <use
+ height="100%"
+ width="100%"
+ y="0"
+ x="0"
+ xlink:href="#gpPt11-53"
+ id="use7284"
+ fill="currentColor"
+ stroke="none" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path7286"
+ stroke-width="0.222"
+ stroke="currentColor"
+ d="M 0,1.33 1.265,0.411 0.782,-1.067 -0.782,-1.076 -1.265,0.411 Z" />
+ <use
+ height="100%"
+ width="100%"
+ y="0"
+ x="0"
+ xlink:href="#gpPt13-48"
+ id="use7288"
+ fill="currentColor"
+ stroke="none" />
+ <filter
+ id="filter7294"
+ filterUnits="objectBoundingBox"
+ x="0"
+ y="0"
+ height="1"
+ width="1">
+ <feFlood
+ flood-color="white"
+ flood-opacity="1"
+ result="bgnd"
+ id="feFlood7290" />
+ <feComposite
+ in="SourceGraphic"
+ in2="bgnd"
+ operator="atop"
+ id="feComposite7292" />
+ </filter>
+ <filter
+ id="filter7300"
+ filterUnits="objectBoundingBox"
+ x="0"
+ y="0"
+ height="1"
+ width="1">
+ <feFlood
+ flood-color="lightgrey"
+ flood-opacity="1"
+ result="grey"
+ id="feFlood7296" />
+ <feComposite
+ in="SourceGraphic"
+ in2="grey"
+ operator="atop"
+ id="feComposite7298" />
+ </filter>
+ </defs>
+ <circle
+ stroke-width="0.5"
+ r="0.5"
+ id="gpDot-54" />
+ <path
+ d="M-1,0 h2 M0,-1 v2"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt0-6" />
+ <path
+ d="M-1,-1 L1,1 M1,-1 L-1,1"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt1-3" />
+ <path
+ d="M-1,0 L1,0 M0,-1 L0,1 M-1,-1 L1,1 M-1,1 L1,-1"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt2-1" />
+ <rect
+ height="2"
+ width="2"
+ y="-1"
+ x="-1"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt3-2" />
+ <rect
+ height="2"
+ width="2"
+ y="-1"
+ x="-1"
+ fill="currentColor"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt4-0" />
+ <circle
+ r="1"
+ cy="0"
+ cx="0"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt5-6" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt6-5"
+ xlink:href="#gpPt5-6" />
+ <path
+ d="M0,-1.33 L-1.33,0.67 L1.33,0.67 z"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt7-19" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt8-4"
+ xlink:href="#gpPt7-19" />
+ <use
+ transform="rotate(180)"
+ stroke="currentColor"
+ id="gpPt9-46"
+ xlink:href="#gpPt7-19" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt10-8"
+ xlink:href="#gpPt9-46" />
+ <use
+ transform="rotate(45)"
+ stroke="currentColor"
+ id="gpPt11-10"
+ xlink:href="#gpPt3-2" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt12-8"
+ xlink:href="#gpPt11-10" />
+ <path
+ d="M0,1.330 L1.265,0.411 L0.782,-1.067 L-0.782,-1.076 L-1.265,0.411 z"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt13-1" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt14-29"
+ xlink:href="#gpPt13-1" />
+ <filter
+ width="1"
+ height="1"
+ y="0"
+ x="0"
+ filterUnits="objectBoundingBox"
+ id="textbox-88">
+ <feFlood
+ id="feFlood7538"
+ result="bgnd"
+ flood-opacity="1"
+ flood-color="white" />
+ <feComposite
+ id="feComposite7540"
+ operator="atop"
+ in2="bgnd"
+ in="SourceGraphic" />
+ </filter>
+ <filter
+ width="1"
+ height="1"
+ y="0"
+ x="0"
+ filterUnits="objectBoundingBox"
+ id="greybox-6">
+ <feFlood
+ id="feFlood7543"
+ result="grey"
+ flood-opacity="1"
+ flood-color="lightgrey" />
+ <feComposite
+ id="feComposite7545"
+ operator="atop"
+ in2="grey"
+ in="SourceGraphic" />
+ </filter>
+ <defs
+ id="defs7548">
+ <circle
+ cy="0"
+ cx="0"
+ id="circle7603"
+ r="0.5"
+ stroke-width="0.5" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path7605"
+ stroke-width="0.222"
+ stroke="currentColor"
+ d="M -1,0 H 1 M 0,-1 v 2" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path7607"
+ stroke-width="0.222"
+ stroke="currentColor"
+ d="M -1,-1 1,1 M 1,-1 -1,1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path7609"
+ stroke-width="0.222"
+ stroke="currentColor"
+ d="M -1,0 H 1 M 0,-1 v 2 m -1,-2 2,2 m -2,0 2,-2" />
+ <rect
+ id="rect7611"
+ stroke-width="0.222"
+ stroke="currentColor"
+ x="-1"
+ y="-1"
+ width="2"
+ height="2" />
+ <rect
+ id="rect7613"
+ stroke-width="0.222"
+ stroke="currentColor"
+ fill="currentColor"
+ x="-1"
+ y="-1"
+ width="2"
+ height="2" />
+ <circle
+ id="circle7615"
+ stroke-width="0.222"
+ stroke="currentColor"
+ cx="0"
+ cy="0"
+ r="1" />
+ <use
+ height="100%"
+ width="100%"
+ y="0"
+ x="0"
+ xlink:href="#gpPt5-6"
+ id="use7617"
+ fill="currentColor"
+ stroke="none" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path7619"
+ stroke-width="0.222"
+ stroke="currentColor"
+ d="m 0,-1.33 -1.33,2 h 2.66 z" />
+ <use
+ height="100%"
+ width="100%"
+ y="0"
+ x="0"
+ xlink:href="#gpPt7-19"
+ id="use7621"
+ fill="currentColor"
+ stroke="none" />
+ <use
+ height="100%"
+ width="100%"
+ y="0"
+ x="0"
+ xlink:href="#gpPt7-19"
+ id="use7623"
+ stroke="currentColor"
+ transform="scale(-1)" />
+ <use
+ height="100%"
+ width="100%"
+ y="0"
+ x="0"
+ xlink:href="#gpPt9-46"
+ id="use7625"
+ fill="currentColor"
+ stroke="none" />
+ <use
+ height="100%"
+ width="100%"
+ y="0"
+ x="0"
+ xlink:href="#gpPt3-2"
+ id="use7627"
+ stroke="currentColor"
+ transform="rotate(45)" />
+ <use
+ height="100%"
+ width="100%"
+ y="0"
+ x="0"
+ xlink:href="#gpPt11-10"
+ id="use7629"
+ fill="currentColor"
+ stroke="none" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path7631"
+ stroke-width="0.222"
+ stroke="currentColor"
+ d="M 0,1.33 1.265,0.411 0.782,-1.067 -0.782,-1.076 -1.265,0.411 Z" />
+ <use
+ height="100%"
+ width="100%"
+ y="0"
+ x="0"
+ xlink:href="#gpPt13-1"
+ id="use7633"
+ fill="currentColor"
+ stroke="none" />
+ <filter
+ id="filter7639"
+ filterUnits="objectBoundingBox"
+ x="0"
+ y="0"
+ height="1"
+ width="1">
+ <feFlood
+ flood-color="white"
+ flood-opacity="1"
+ result="bgnd"
+ id="feFlood7635" />
+ <feComposite
+ in="SourceGraphic"
+ in2="bgnd"
+ operator="atop"
+ id="feComposite7637" />
+ </filter>
+ <filter
+ id="filter7645"
+ filterUnits="objectBoundingBox"
+ x="0"
+ y="0"
+ height="1"
+ width="1">
+ <feFlood
+ flood-color="lightgrey"
+ flood-opacity="1"
+ result="grey"
+ id="feFlood7641" />
+ <feComposite
+ in="SourceGraphic"
+ in2="grey"
+ operator="atop"
+ id="feComposite7643" />
+ </filter>
+ </defs>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="25.673747"
+ inkscape:cx="14.002038"
+ inkscape:cy="8.4572256"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1379"
+ inkscape:window-height="1023"
+ inkscape:window-x="0"
+ inkscape:window-y="33"
+ inkscape:window-maximized="0"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-grids="true"
+ inkscape:document-rotation="0"
+ units="px">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="0.5"
+ spacingy="0.5"
+ enabled="true"
+ visible="true"
+ units="px"
+ empspacing="2" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8238">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-393.51587,-663.14807)">
+ <path
+ inkscape:connector-curvature="0"
+ stroke="rgb(255, 0, 0)"
+ d="m 393.93464,680.50205 0.1941,0.01 0.1941,0.01 0.1941,0.01 0.19409,0.0194 0.1941,0.01 0.1941,0.0194 0.1941,0.0291 0.1941,0.0291 0.1941,0.0291 0.1941,0.0388 0.19409,0.0388 0.1941,0.0582 0.1941,0.0485 0.1941,0.0679 0.1941,0.0776 0.1941,0.0776 0.19409,0.097 0.1941,0.097 0.1941,0.10675 0.1941,0.11646 0.1941,0.12616 0.1941,0.13587 0.1941,0.13587 0.19409,0.14557 0.1941,0.14558 0.1941,0.14557 0.1941,0.13587 0.1941,0.13587 0.1941,0.12616 0.19409,0.11646 0.1941,0.0971 0.1941,0.0679 [...]
+ id="path7558"
+ style="color:#000000;vector-effect:none;fill:none;fill-opacity:1;stroke:#e91616;stroke-width:1.39999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;opacity:1" />
+ <text
+ id="text4357"
+ y="672.25159"
+ x="413.88821"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:condensed;font-size:11.72398472px;line-height:1;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Bold Condensed';text-align:center;text-decoration:none;text-decoration-line:none;text-decoration-color:#000000;text-anchor:middle;shape-padding:0;overflow:visible;vector-effect:none;fill:#000000;stroke-width:0.2;paint-order:fill markers stroke;font-var [...]
+ xml:space="preserve"><tspan
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:condensed;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Bold Condensed';stroke-width:0.2;font-size:11.72398472px;line-height:1;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-variant-east-asian:normal;font-feature-settings:normal;text-indent:0;text-align:c [...]
+ y="672.25159"
+ x="413.88821"
+ id="tspan4355"
+ sodipodi:role="line">T</tspan></text>
+ <text
+ xml:space="preserve"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:condensed;font-size:11.72398472px;line-height:1;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Bold Condensed';text-align:center;text-decoration:none;text-decoration-line:none;text-decoration-color:#000000;text-anchor:middle;shape-padding:0;overflow:visible;vector-effect:none;fill:#000000;stroke-width:0.2;paint-order:fill markers stroke;font-var [...]
+ x="405.52057"
+ y="672.25159"
+ id="text4361"><tspan
+ sodipodi:role="line"
+ id="tspan4359"
+ x="405.52057"
+ y="672.25159"
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:condensed;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Bold Condensed';stroke-width:0.2;font-size:11.72398472px;line-height:1;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-variant-east-asian:normal;font-feature-settings:normal;text-indent:0;text-align:c [...]
+ <text
+ id="text4365"
+ y="672.25159"
+ x="397.57727"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:condensed;font-size:11.72398472px;line-height:1;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Bold Condensed';text-align:center;text-decoration:none;text-decoration-line:none;text-decoration-color:#000000;text-anchor:middle;shape-padding:0;overflow:visible;vector-effect:none;fill:#000000;stroke-width:0.2;paint-order:fill markers stroke;font-var [...]
+ xml:space="preserve"><tspan
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:condensed;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Bold Condensed';stroke-width:0.2;font-size:11.72398472px;line-height:1;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-variant-east-asian:normal;font-feature-settings:normal;text-indent:0;text-align:c [...]
+ y="672.25159"
+ x="397.57727"
+ id="tspan4363"
+ sodipodi:role="line">C</tspan></text>
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_data_measure-24.svg b/pixmaps/src/gwy_data_measure-24.svg
new file mode 100644
index 0000000..6b3a017
--- /dev/null
+++ b/pixmaps/src/gwy_data_measure-24.svg
@@ -0,0 +1,574 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg9772"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_data_measure-24.svg"
+ inkscape:export-filename="gwy_data_measure-24.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs9774">
+ <linearGradient
+ y2="361.22473"
+ x2="272.91217"
+ y1="247.92804"
+ x1="207.50029"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient4171"
+ xlink:href="#linearGradient4140"
+ gradientTransform="translate(-11.142957,824.89612)" />
+ <linearGradient
+ id="linearGradient4140">
+ <stop
+ id="stop4142"
+ offset="0"
+ style="stop-color:#d7e3f4;stop-opacity:1;" />
+ <stop
+ id="stop4144"
+ offset="1"
+ style="stop-color:#f1f5fb;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4140"
+ id="linearGradient8503"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-53.914577,824.04971)"
+ x1="207.50029"
+ y1="247.92804"
+ x2="272.91217"
+ y2="361.22473" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4140"
+ id="linearGradient11272"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-38.348167,832.54043)"
+ x1="207.50029"
+ y1="247.92804"
+ x2="272.91217"
+ y2="361.22473" />
+ <linearGradient
+ y2="361.22473"
+ x2="272.91217"
+ y1="247.92804"
+ x1="207.50029"
+ gradientTransform="translate(-78.589887,830.07148)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient9134"
+ xlink:href="#linearGradient4140"
+ inkscape:collect="always" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="14.84682"
+ inkscape:cx="6.2294116"
+ inkscape:cy="9.127072"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata9777">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-128.92537,-381.05775)">
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4385"
+ y="714.96503"
+ x="-9.7732153">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4387"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4487"
+ y="810.84119"
+ x="14.356759">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4489"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4536"
+ y="750.25366"
+ x="-51.075951">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4538"
+ font-size="4.0000" />
+ </text>
+ <path
+ inkscape:connector-curvature="0"
+ d=""
+ cx="242.94168"
+ cy="308.38486"
+ r="70.205605"
+ id="path4138-6"
+ style="opacity:1;fill:url(#linearGradient4171);fill-opacity:1;stroke:#000000;stroke-width:5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g5318"
+ transform="translate(-90.256557,549.58015)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g6386"
+ transform="translate(456.96468,21.382171)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g7162"
+ transform="translate(-237.67749,-135.37972)" />
+ <text
+ xml:space="preserve"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:0px;word-spacing:0px;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;color-interpolat [...]
+ x="310.491"
+ y="938.9043"
+ id="text8015"><tspan
+ id="tspan8017"
+ x="310.491"
+ y="938.9043" /></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+ x="-1262.6105"
+ y="-388.16058"
+ id="text9295"><tspan
+ id="tspan9297"
+ x="-1262.6105"
+ y="-388.16058" /></text>
+ <text
+ id="text7408-2"
+ class="fil7 fnt4"
+ y="-106.27875"
+ x="-1145.3977"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ id="text7422"
+ class="fil7 fnt4"
+ y="-78.812134"
+ x="-1129.0248"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4385-9"
+ y="714.11859"
+ x="-52.544838">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4387-0"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4487-9"
+ y="809.99475"
+ x="-28.414862">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4489-1"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4536-7"
+ y="749.40723"
+ x="-93.847572">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4538-7"
+ font-size="4.0000" />
+ </text>
+ <path
+ inkscape:connector-curvature="0"
+ d=""
+ cx="242.94168"
+ cy="308.38486"
+ r="70.205605"
+ id="path4138-6-1"
+ style="opacity:1;fill:url(#linearGradient8503);fill-opacity:1;stroke:#000000;stroke-width:5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g5318-7"
+ transform="translate(-133.02816,548.73374)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g6386-6"
+ transform="translate(414.19309,20.535761)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g7162-7"
+ transform="translate(-280.44909,-136.22613)" />
+ <text
+ xml:space="preserve"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:0px;word-spacing:0px;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;color-interpolat [...]
+ x="267.71939"
+ y="938.05786"
+ id="text8015-3"><tspan
+ id="tspan8017-6"
+ x="267.71939"
+ y="938.05786" /></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+ x="-1305.3821"
+ y="-389.00696"
+ id="text9295-5"><tspan
+ id="tspan9297-6"
+ x="-1305.3821"
+ y="-389.00696" /></text>
+ <text
+ id="text7408-2-3"
+ class="fil7 fnt4"
+ y="-107.12515"
+ x="-1188.1693"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ id="text7422-9"
+ class="fil7 fnt4"
+ y="-79.658539"
+ x="-1171.7964"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#ffbb00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 142.42537,380.55774 h 8 v 25.00001 h -8 z"
+ id="rect16956-4"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path16962-8"
+ d="m 142.92537,390.5636 h 5"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="cc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path16970-1"
+ d="m 142.92537,402.5636 h 5"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="cc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8257"
+ d="m 142.92537,398.5636 h 3"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="cc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8276"
+ d="m 142.92537,386.5636 h 3"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 142.92537,382.5636 h 3"
+ id="path8356"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 142.92537,394.5636 h 3"
+ id="path8358"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4385-7"
+ y="722.60931"
+ x="-36.978432">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4387-2"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4487-3"
+ y="818.48547"
+ x="-12.848456">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4489-7"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4536-2"
+ y="757.89795"
+ x="-78.281166">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4538-5"
+ font-size="4.0000" />
+ </text>
+ <path
+ inkscape:connector-curvature="0"
+ d=""
+ cx="242.94168"
+ cy="308.38486"
+ r="70.205605"
+ id="path4138-6-3"
+ style="opacity:1;fill:url(#linearGradient11272);fill-opacity:1;stroke:#000000;stroke-width:5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g5318-3"
+ transform="translate(-117.46176,557.22446)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g6386-64"
+ transform="translate(429.75948,29.026481)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g7162-03"
+ transform="translate(-264.88269,-127.73541)" />
+ <text
+ xml:space="preserve"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:0px;word-spacing:0px;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;color-interpolat [...]
+ x="283.2858"
+ y="946.54858"
+ id="text8015-5"><tspan
+ id="tspan8017-85"
+ x="283.2858"
+ y="946.54858" /></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+ x="-1289.8157"
+ y="-380.51624"
+ id="text9295-0"><tspan
+ id="tspan9297-9"
+ x="-1289.8157"
+ y="-380.51624" /></text>
+ <text
+ id="text7408-2-9"
+ class="fil7 fnt4"
+ y="-98.63443"
+ x="-1172.6029"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ id="text7422-8"
+ class="fil7 fnt4"
+ y="-71.167816"
+ x="-1156.23"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4385-2"
+ y="720.14038"
+ x="-77.220161">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4387-6"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4487-5"
+ y="816.01654"
+ x="-53.090187">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4489-8"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4536-7-2"
+ y="755.42902"
+ x="-118.5229">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4538-9"
+ font-size="4.0000" />
+ </text>
+ <path
+ inkscape:connector-curvature="0"
+ d=""
+ cx="242.94168"
+ cy="308.38486"
+ r="70.205605"
+ id="path4138-6-6"
+ style="opacity:1;fill:url(#linearGradient9134);fill-opacity:1;stroke:#000000;stroke-width:5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g5318-4"
+ transform="translate(-157.70346,554.75551)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g6386-8"
+ transform="translate(389.51778,26.557531)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g7162-7-4"
+ transform="translate(-305.1244,-130.20437)" />
+ <text
+ xml:space="preserve"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:0px;word-spacing:0px;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;color-interpolat [...]
+ x="243.04408"
+ y="944.07959"
+ id="text8015-0"><tspan
+ id="tspan8017-8"
+ x="243.04408"
+ y="944.07959" /></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+ x="-1330.0574"
+ y="-382.98517"
+ id="text9295-6-9"><tspan
+ id="tspan9297-2"
+ x="-1330.0574"
+ y="-382.98517" /></text>
+ <text
+ id="text7408-2-4"
+ class="fil7 fnt4"
+ y="-101.10336"
+ x="-1212.8446"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ id="text7422-7"
+ class="fil7 fnt4"
+ y="-73.636749"
+ x="-1196.4717"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path8265"
+ d="m 142.92537,383.5636 h 3"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cc"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 142.92537,387.5636 h 3"
+ id="path8267"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 142.92537,391.5636 h 5"
+ id="path8269"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path8271"
+ d="m 142.92537,395.5636 h 3"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 142.92537,403.5636 h 5"
+ id="path8273"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ sodipodi:nodetypes="cc"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 142.92537,399.5636 h 3"
+ id="path8275"
+ inkscape:connector-curvature="0" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#ffbb00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 131.42552,380.55774 h 6 v 25 h -6 z"
+ id="rect12874"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 131.92536,388.55787 h 3"
+ id="path12876"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 131.92536,385.55787 h 2.00001"
+ id="path12880"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path12882"
+ d="m 131.92536,382.55787 h 3"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 131.92536,397.55787 h 2.00001"
+ id="path12884"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 131.92536,391.55787 h 2.00001"
+ id="path12890"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path12892"
+ d="m 131.92536,394.55787 h 3"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 131.92536,400.55787 h 3"
+ id="path8091"
+ inkscape:connector-curvature="0" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path8509"
+ d="m 131.92536,403.55787 h 2.00001"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_disconnected-24.svg b/pixmaps/src/gwy_disconnected-24.svg
new file mode 100644
index 0000000..9554d01
--- /dev/null
+++ b/pixmaps/src/gwy_disconnected-24.svg
@@ -0,0 +1,178 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="6.3499999mm"
+ height="6.3499999mm"
+ viewBox="0 0 22.499999 22.499999"
+ id="svg8233"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_disconnected-24.svg">
+ <defs
+ id="defs8235">
+ <linearGradient
+ gradientTransform="matrix(0.91711503,0,0,0.91711503,63.562131,186.16072)"
+ gradientUnits="userSpaceOnUse"
+ y2="520.60657"
+ x2="360.2847"
+ y1="544.1178"
+ x1="383.79593"
+ id="linearGradient8314"
+ xlink:href="#linearGradient8308-6"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient8308-6">
+ <stop
+ style="stop-color:#0c1e2d;stop-opacity:1"
+ offset="0"
+ id="stop8310-7" />
+ <stop
+ id="stop8351-5"
+ offset="0.5"
+ style="stop-color:#4696db;stop-opacity:1" />
+ <stop
+ style="stop-color:#c3ddf3;stop-opacity:1"
+ offset="1"
+ id="stop8312-3" />
+ </linearGradient>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="9.9602376"
+ inkscape:cx="-84.022158"
+ inkscape:cy="27.429546"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8238">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-393.51587,-663.14807)">
+ <g
+ id="layer1-3"
+ inkscape:label="Layer 1">
+ <rect
+ y="663.61682"
+ x="393.98462"
+ height="21.5625"
+ width="21.5625"
+ id="rect8276-5"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:url(#linearGradient8314);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.93750006;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ </g>
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.87499988;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect9022"
+ width="1.8749999"
+ height="1.8749999"
+ x="396.32837"
+ y="665.96057" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#db2424;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.87499976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect9051-5"
+ width="3.7499995"
+ height="3.7499995"
+ x="401.95337"
+ y="672.52307" />
+ <rect
+ y="673.46057"
+ x="402.89087"
+ height="1.8749999"
+ width="1.8749999"
+ id="rect9024"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.87499988;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#db2424;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.87499976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect9051-9"
+ width="3.7499995"
+ height="3.7499995"
+ x="396.32837"
+ y="676.27307" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.87499988;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect9026"
+ width="1.8749999"
+ height="1.8749999"
+ x="397.26587"
+ y="677.21057" />
+ <rect
+ y="681.89807"
+ x="411.32837"
+ height="1.8749999"
+ width="1.8749999"
+ id="rect9028"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.87499988;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#db2424;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.87499976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect9051-6"
+ width="3.7499995"
+ height="3.7499995"
+ x="406.64087"
+ y="675.33557" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.87499976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect9022-7"
+ width="1.8749998"
+ height="1.8749998"
+ x="407.57837"
+ y="676.27307" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#db2424;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.87499976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect9051-3"
+ width="3.7499995"
+ height="3.7499995"
+ x="405.70337"
+ y="664.08557" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.87499976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect9022-5"
+ width="1.8749998"
+ height="1.8749998"
+ x="406.64087"
+ y="665.02307" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_distance-24.svg b/pixmaps/src/gwy_distance-24.svg
new file mode 100644
index 0000000..db48310
--- /dev/null
+++ b/pixmaps/src/gwy_distance-24.svg
@@ -0,0 +1,156 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8494"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ inkscape:export-filename="gwy_distance-24.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96"
+ sodipodi:docname="gwy_distance-24.svg">
+ <defs
+ id="defs8496" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="3.5383583"
+ inkscape:cx="34.239213"
+ inkscape:cy="19.53056"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8499">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1028.3622)">
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path8161"
+ d="m 4.5,1045.9872 5,-11.25"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <g
+ transform="translate(23.97312,-17.1031)"
+ id="g8186">
+ <path
+ sodipodi:nodetypes="cc"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m -12.97312,1045.4653 v 6"
+ id="path8192"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m -15.97312,1048.4653 h 6.00001"
+ id="path8194"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ </g>
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#ffbb00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect12874-3"
+ width="5.9999995"
+ height="22"
+ x="16.500149"
+ y="1028.8622" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 16.99999,1036.8623 3,0"
+ id="path12876-6"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 16.99999,1033.8623 2.00001,0"
+ id="path12880-7"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path12882-5"
+ d="m 16.99999,1030.8623 3,0"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 16.99999,1045.8623 2.00001,0"
+ id="path12884-3"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 16.99999,1039.8623 2.00001,0"
+ id="path12890-5"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path12892-6"
+ d="m 16.99999,1042.8623 3,0"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 16.99999,1048.8623 3,0"
+ id="path8091-2"
+ inkscape:connector-curvature="0" />
+ <g
+ id="g4769"
+ transform="translate(15.97311,0.8969)">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4765"
+ d="m -12.97312,1045.4653 v 6"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="cc" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path4767"
+ d="m -15.97312,1048.4653 h 6.00001"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_distance_transform-24.svg b/pixmaps/src/gwy_distance_transform-24.svg
new file mode 100644
index 0000000..d440403
--- /dev/null
+++ b/pixmaps/src/gwy_distance_transform-24.svg
@@ -0,0 +1,235 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8424"
+ version="1.1"
+ inkscape:version="0.92+devel unknown"
+ sodipodi:docname="gwy_distance_transform-24.svg">
+ <defs
+ id="defs8426">
+ <linearGradient
+ id="linearGradient8308-6-6"
+ inkscape:collect="always">
+ <stop
+ id="stop8310-7-7"
+ offset="0"
+ style="stop-color:#0c1e2d;stop-opacity:1" />
+ <stop
+ style="stop-color:#4696db;stop-opacity:1"
+ offset="0.5"
+ id="stop8351-5-5" />
+ <stop
+ id="stop8312-3-3"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ gradientTransform="translate(-138.33165,-613.34668)"
+ inkscape:collect="always"
+ xlink:href="#linearGradient8308-6-6"
+ id="linearGradient4901-5"
+ x1="137.12454"
+ y1="614.84668"
+ x2="152.53876"
+ y2="614.84668"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8308-6-6"
+ id="linearGradient4990"
+ gradientUnits="userSpaceOnUse"
+ x1="141.83165"
+ y1="623.84668"
+ x2="141.83165"
+ y2="627.34668"
+ gradientTransform="translate(2)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8308-6-6"
+ id="linearGradient4992"
+ gradientUnits="userSpaceOnUse"
+ x1="141.83165"
+ y1="621.34668"
+ x2="138.33165"
+ y2="621.34668"
+ gradientTransform="translate(2)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8308-6-6"
+ id="linearGradient4996"
+ gradientUnits="userSpaceOnUse"
+ x1="141.83165"
+ y1="620.34668"
+ x2="145.33165"
+ y2="620.34668"
+ gradientTransform="translate(2)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8308-6-6"
+ id="linearGradient4996-3"
+ gradientUnits="userSpaceOnUse"
+ x1="141.83165"
+ y1="620.34668"
+ x2="145.33165"
+ y2="620.34668"
+ gradientTransform="translate(-141.83165,-614.84668)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8308-6-6"
+ id="linearGradient5051"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(2)"
+ x1="145.83165"
+ y1="610.84668"
+ x2="149.33165"
+ y2="610.84668" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8308-6-6"
+ id="linearGradient5065"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(2)"
+ x1="144.33165"
+ y1="612.84668"
+ x2="144.33165"
+ y2="609.34668" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8308-6-6"
+ id="linearGradient5079"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(2)"
+ x1="143.83165"
+ y1="613.84668"
+ x2="141.33165"
+ y2="610.34668" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8308-6-6"
+ id="linearGradient5093"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(2)"
+ x1="143.43417"
+ y1="612.02875"
+ x2="147.33165"
+ y2="615.34668" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="18.687497"
+ inkscape:cx="23.058564"
+ inkscape:cy="13.77322"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1149"
+ inkscape:window-x="0"
+ inkscape:window-y="32"
+ inkscape:window-maximized="1"
+ inkscape:document-rotation="0">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="0.5"
+ spacingy="0.5"
+ enabled="true"
+ visible="true"
+ units="px"
+ empspacing="2" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8429">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-128.33165,-604.34668)">
+ <path
+ style="opacity:1;vector-effect:none;fill:url(#linearGradient4992);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 143.83165,615.34668 v 8.5 l -4,4 v -16 z"
+ id="path4930"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="opacity:1;vector-effect:none;fill:url(#linearGradient4990);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 139.83165,627.84668 4,-4 4,4 z"
+ id="path4966"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:#c1665a;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;opacity:1;vector-effect:none;fill-opacity:1;stroke-miterlimit:4;stroke-dasharray:3, 3;stroke-dashoffset:0;marker:none;marker-start:none;marker-mid:none;marker-end:none"
+ d="m 128.83165,607.84668 v 16 h 8 v -10 l 4,-5 v -4 h -7 z"
+ id="path5000"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccc" />
+ <path
+ style="opacity:1;vector-effect:none;fill:url(#linearGradient5051);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 151.83165,608.84668 -2.5,2 2.5,2 z"
+ id="path5024"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="opacity:1;vector-effect:none;fill:url(#linearGradient5065);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 144.83165,608.84668 2,3.5 2.5,-1.5 2.5,-2 z"
+ id="path5053"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="opacity:1;vector-effect:none;fill:url(#linearGradient5079);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 139.83165,611.84668 4,3.5 0.5,-1 2.5,-2 -2,-3.5 z"
+ id="path5067"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccc" />
+ <path
+ style="opacity:1;vector-effect:none;fill:url(#linearGradient5093);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 147.83165,617.84668 -3.5,-3.5 2.5,-2 2.5,-1.5 2.5,2 z"
+ id="path5081"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccc" />
+ <path
+ style="opacity:1;vector-effect:none;fill:url(#linearGradient4996);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 147.83165,627.84668 -4,-4 v -8.5 l 0.5,-1 3.5,3.5 z"
+ id="path4978"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccc" />
+ <path
+ sodipodi:nodetypes="cccccccc"
+ inkscape:connector-curvature="0"
+ id="use5006"
+ d="m 139.83165,611.84668 v 16 h 8 v -10 l 4,-5 v -4 h -7 z"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_distribution_angle-24.svg b/pixmaps/src/gwy_distribution_angle-24.svg
new file mode 100644
index 0000000..9cf517b
--- /dev/null
+++ b/pixmaps/src/gwy_distribution_angle-24.svg
@@ -0,0 +1,132 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg9687"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_distribution_angle-24.svg"
+ inkscape:export-filename="gwy_graph_function-24.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96">
+ <defs
+ id="defs9689">
+ <linearGradient
+ gradientTransform="matrix(0.91711503,0,0,0.91711503,63.562131,186.16072)"
+ gradientUnits="userSpaceOnUse"
+ y2="520.60657"
+ x2="360.2847"
+ y1="544.1178"
+ x1="383.79593"
+ id="linearGradient8314"
+ xlink:href="#linearGradient8308-6"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient8308-6">
+ <stop
+ style="stop-color:#0c1e2d;stop-opacity:1"
+ offset="0"
+ id="stop8310-7" />
+ <stop
+ id="stop8351-5"
+ offset="0.5"
+ style="stop-color:#4696db;stop-opacity:1" />
+ <stop
+ style="stop-color:#c3ddf3;stop-opacity:1"
+ offset="1"
+ id="stop8312-3" />
+ </linearGradient>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="18.003839"
+ inkscape:cx="-20.309943"
+ inkscape:cy="31.170829"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-global="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata9692">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-306.29821,-648.57531)">
+ <path
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 330.29821,671.57531 c -1.00099,-0.16447 -2.91976,-4.53691 -4.06525,-5.91207 -0.73824,-0.13896 -2.77292,5.78518 -3.71772,5.19574 -3.92805,-1.66584 -2.92828,-10.98586 -4.29773,-10.88204 -6.71328,5.23951 -5.46817,-6.49737 -7.64906,-7.02272 -2.23764,-0.53902 -2.23464,7.71431 -3.12715,10.44175 -0.11895,0.2631 -0.25043,0.56457 -0.52433,0.69992"
+ id="path8447"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccscc" />
+ <g
+ transform="matrix(0.32463768,0,0,0.32463768,178.89597,449.64029)"
+ id="layer1-6"
+ inkscape:label="Layer 1"
+ style="stroke-width:3.28571439">
+ <rect
+ y="663.61682"
+ x="393.98462"
+ height="21.5625"
+ width="21.5625"
+ id="rect8276"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:url(#linearGradient8314);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3.08035731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ </g>
+ <path
+ inkscape:connector-curvature="0"
+ id="path8455"
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:medium;line-height:125%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans Bold';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 323.67517,653.74133 q 0,0.73731 -0.20019,1.26465 -0.19532,0.52246 -0.55176,0.86426 -0.35156,0.3418 -0.83496,0.51758 -0.4834,0.1709 -1.05469,0.20019 v 1.98731 h -1.16211 v -1.97754 q -0.59082,-0.0244 -1.06934,-0.2002 -0.47363,-0.17578 -0.81054,-0.51269 -0.33203,-0.33692 -0.5127,-0.84473 -0.18066,-0.50781 -0.18066,-1.19629 0,-0.64941 0.14648,-1.12793 0.14649,-0.47851 0.42481,-0.80566 0.27832,-0.33203 0.68359,-0.52735 0.41016,-0.19531 0.9375,-0.2832 l 0.10254,0.87402 q -0.24902, [...]
+ <path
+ inkscape:connector-curvature="0"
+ id="path8457"
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:medium;line-height:125%;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans Bold';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 329.02185,653.56798 q 0,1.86035 -0.58594,2.76856 -0.58593,0.9082 -1.69922,0.9082 -0.52734,0 -0.94726,-0.22461 -0.41504,-0.22461 -0.70313,-0.67871 -0.28808,-0.4541 -0.43945,-1.14258 -0.15137,-0.69336 -0.15137,-1.63086 0,-1.82617 0.56641,-2.74414 0.57129,-0.91797 1.7041,-0.91797 0.59082,0 1.01563,0.22949 0.42968,0.22461 0.70312,0.6836 0.27344,0.45898 0.40527,1.14746 0.13184,0.68359 0.13184,1.60156 z m -2.28027,2.78809 q 0.19043,0 0.35644,-0.11231 0.16602,-0.11719 0.29297,-0.385 [...]
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_distribution_slope-24.svg b/pixmaps/src/gwy_distribution_slope-24.svg
new file mode 100644
index 0000000..7f24dad
--- /dev/null
+++ b/pixmaps/src/gwy_distribution_slope-24.svg
@@ -0,0 +1,139 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg9687"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_distribution_slope-24.svg"
+ inkscape:export-filename="gwy_graph_function-24.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96">
+ <defs
+ id="defs9689">
+ <linearGradient
+ gradientTransform="matrix(0.91711503,0,0,0.91711503,63.562131,186.16072)"
+ gradientUnits="userSpaceOnUse"
+ y2="520.60657"
+ x2="360.2847"
+ y1="544.1178"
+ x1="383.79593"
+ id="linearGradient8314"
+ xlink:href="#linearGradient8308-6"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient8308-6">
+ <stop
+ style="stop-color:#0c1e2d;stop-opacity:1"
+ offset="0"
+ id="stop8310-7" />
+ <stop
+ id="stop8351-5"
+ offset="0.5"
+ style="stop-color:#4696db;stop-opacity:1" />
+ <stop
+ style="stop-color:#c3ddf3;stop-opacity:1"
+ offset="1"
+ id="stop8312-3" />
+ </linearGradient>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="9.0558014"
+ inkscape:cx="-50.818021"
+ inkscape:cy="73.40106"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-global="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata9692">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-306.29821,-648.57531)">
+ <path
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 330.29821,671.57531 c -1.00099,-0.16447 -2.91976,-4.53691 -4.06525,-5.91207 -0.73824,-0.13896 -2.77292,5.78518 -3.71772,5.19574 -3.92805,-1.66584 -2.92828,-10.98586 -4.29773,-10.88204 -6.71328,5.23951 -5.46817,-6.49737 -7.64906,-7.02272 -2.23764,-0.53902 -2.23464,7.71431 -3.12715,10.44175 -0.11895,0.2631 -0.25043,0.56457 -0.52433,0.69992"
+ id="path8447"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccscc" />
+ <g
+ transform="matrix(0.32463768,0,0,0.32463768,178.89597,449.64029)"
+ id="layer1-6"
+ inkscape:label="Layer 1"
+ style="stroke-width:3.28571439">
+ <rect
+ y="663.61682"
+ x="393.98462"
+ height="21.5625"
+ width="21.5625"
+ id="rect8276"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:url(#linearGradient8314);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3.08035731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ </g>
+ <g
+ aria-label="∇ z"
+ style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:10.23133183px;line-height:125%;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Medium';text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="text8443">
+ <path
+ d="m 319.63744,654.57144 1.66077,-3.99613 h -3 z m -0.83923,2.00387 -2.5,-7 h 7 l -3,7 z"
+ style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Medium';letter-spacing:-1.59608769px;stroke-width:0.97738993px"
+ id="path8445"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccccc" />
+ <path
+ d="m 327.29821,652.57531 -2.32721,3.01687 2.32721,-0.0169 v 1 h -4 v -1 l 2.5,-3 h -2.5 v -1.03337 l 4,0.0334 z"
+ style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Medium';letter-spacing:-1.59608769px;stroke-width:0.97738993px"
+ id="path8448"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccccccc" />
+ </g>
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_drift-96.svg b/pixmaps/src/gwy_drift-96.svg
new file mode 100644
index 0000000..e6f58f3
--- /dev/null
+++ b/pixmaps/src/gwy_drift-96.svg
@@ -0,0 +1,224 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="6.3499999mm"
+ height="6.3499999mm"
+ viewBox="0 0 22.499999 22.499999"
+ id="svg8233"
+ version="1.1"
+ inkscape:version="0.92.1 unknown"
+ sodipodi:docname="gwy_drift-24.svg"
+ inkscape:export-filename="gwy_drift-24.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96">
+ <defs
+ id="defs8235">
+ <meshgradient
+ inkscape:collect="always"
+ id="meshgradient32017"
+ gradientUnits="userSpaceOnUse"
+ x="393.98462"
+ y="662.17932"
+ gradientTransform="matrix(0.93749992,0,0,0.93749992,24.624072,42.823765)">
+ <meshrow
+ id="meshrow36807">
+ <meshpatch
+ id="meshpatch36809">
+ <stop
+ path="c 0.766667,0 1.53333,0 2.3,0"
+ style="stop-color:#0c1e2d;stop-opacity:1"
+ id="stop36811" />
+ <stop
+ path="c -2.83718,7.99404 4.7144,15.006 0,23"
+ style="stop-color:#4696db;stop-opacity:1"
+ id="stop36813" />
+ <stop
+ path="c -0.766667,0 -1.53333,0 -2.3,0"
+ style="stop-color:#4696db;stop-opacity:1"
+ id="stop36815" />
+ <stop
+ path="c 0,-7.66667 0,-15.3333 0,-23"
+ style="stop-color:#0c1e2d;stop-opacity:1"
+ id="stop36817" />
+ </meshpatch>
+ <meshpatch
+ id="meshpatch36819">
+ <stop
+ path="c 0.766667,0 1.53333,0 2.3,0"
+ id="stop36821" />
+ <stop
+ path="c -4.51214,7.84634 5.65356,14.8968 0,23"
+ style="stop-color:#c3ddf3;stop-opacity:1"
+ id="stop36823" />
+ <stop
+ path="c -0.766667,0 -1.53333,0 -2.3,0"
+ style="stop-color:#c3ddf3;stop-opacity:1"
+ id="stop36825" />
+ </meshpatch>
+ <meshpatch
+ id="meshpatch36827">
+ <stop
+ path="c 0.766667,0 1.53333,0 2.3,0"
+ id="stop36829" />
+ <stop
+ path="c -6.65336,7.85239 5.73074,14.9899 0,23"
+ style="stop-color:#4696db;stop-opacity:1"
+ id="stop36831" />
+ <stop
+ path="c -0.766667,0 -1.53333,0 -2.3,0"
+ style="stop-color:#4696db;stop-opacity:1"
+ id="stop36833" />
+ </meshpatch>
+ <meshpatch
+ id="meshpatch36835">
+ <stop
+ path="c 0.766667,0 1.53333,0 2.3,0"
+ id="stop36837" />
+ <stop
+ path="c -8.81388,7.76529 6.09507,15.0285 0,23"
+ style="stop-color:#0c1e2d;stop-opacity:1"
+ id="stop36839" />
+ <stop
+ path="c -0.766667,0 -1.53333,0 -2.3,0"
+ style="stop-color:#0c1e2d;stop-opacity:1"
+ id="stop36841" />
+ </meshpatch>
+ <meshpatch
+ id="meshpatch36843">
+ <stop
+ path="c 0.766667,0 1.53333,0 2.3,0"
+ id="stop36845" />
+ <stop
+ path="c -8.55581,8.18968 5.80241,15.0632 0,23"
+ style="stop-color:#4696db;stop-opacity:1"
+ id="stop36847" />
+ <stop
+ path="c -0.766667,0 -1.53333,0 -2.3,0"
+ style="stop-color:#4696db;stop-opacity:1"
+ id="stop36849" />
+ </meshpatch>
+ <meshpatch
+ id="meshpatch36851">
+ <stop
+ path="c 0.766667,0 1.53333,0 2.3,0"
+ id="stop36853" />
+ <stop
+ path="c -8.52886,8.39856 5.87683,15.481 0,23"
+ style="stop-color:#c3ddf3;stop-opacity:1"
+ id="stop36855" />
+ <stop
+ path="c -0.766667,0 -1.53333,0 -2.3,0"
+ style="stop-color:#c3ddf3;stop-opacity:1"
+ id="stop36857" />
+ </meshpatch>
+ <meshpatch
+ id="meshpatch36859">
+ <stop
+ path="c 0.766667,0 1.53333,0 2.3,0"
+ id="stop36861" />
+ <stop
+ path="c -7.84103,8.29219 4.80319,15.4105 0,23"
+ style="stop-color:#4696db;stop-opacity:1"
+ id="stop36863" />
+ <stop
+ path="c -0.766667,0 -1.53333,0 -2.3,0"
+ style="stop-color:#4696db;stop-opacity:1"
+ id="stop36865" />
+ </meshpatch>
+ <meshpatch
+ id="meshpatch36867">
+ <stop
+ path="c 0.766667,0 1.53333,0 2.3,0"
+ id="stop36869" />
+ <stop
+ path="c -8.06316,8.31752 4.75411,15.3014 0,23"
+ style="stop-color:#0c1e2d;stop-opacity:1"
+ id="stop36871" />
+ <stop
+ path="c -0.766667,0 -1.53333,0 -2.3,0"
+ style="stop-color:#0c1e2d;stop-opacity:1"
+ id="stop36873" />
+ </meshpatch>
+ <meshpatch
+ id="meshpatch36875">
+ <stop
+ path="c 0.766667,0 1.53333,0 2.3,0"
+ id="stop36877" />
+ <stop
+ path="c -7.63602,8.28008 2.66915,15.4011 0,23"
+ style="stop-color:#4696db;stop-opacity:1"
+ id="stop36879" />
+ <stop
+ path="c -0.766667,0 -1.53333,0 -2.3,0"
+ style="stop-color:#4696db;stop-opacity:1"
+ id="stop36881" />
+ </meshpatch>
+ <meshpatch
+ id="meshpatch36883">
+ <stop
+ path="c 0.766667,0 1.53333,0 2.3,0"
+ id="stop36885" />
+ <stop
+ path="c 0,7.66667 0,15.3333 0,23"
+ style="stop-color:#c3ddf3;stop-opacity:1"
+ id="stop36887" />
+ <stop
+ path="c -0.766667,0 -1.53333,0 -2.3,0"
+ style="stop-color:#c3ddf3;stop-opacity:1"
+ id="stop36889" />
+ </meshpatch>
+ </meshrow>
+ </meshgradient>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="20.004599"
+ inkscape:cx="11.200356"
+ inkscape:cy="13.704729"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata8238">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-393.51587,-663.14807)">
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:url(#meshgradient32017);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.93750006;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8276"
+ width="21.5625"
+ height="21.5625"
+ x="393.98462"
+ y="663.61682" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_dwt-24.svg b/pixmaps/src/gwy_dwt-24.svg
new file mode 100644
index 0000000..f987b68
--- /dev/null
+++ b/pixmaps/src/gwy_dwt-24.svg
@@ -0,0 +1,1352 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8233"
+ version="1.1"
+ inkscape:version="0.92+devel unknown"
+ sodipodi:docname="gwy_dwt-24.svg">
+ <defs
+ id="defs8235">
+ <circle
+ stroke-width="0.5"
+ r="0.5"
+ id="gpDot" />
+ <path
+ d="M-1,0 h2 M0,-1 v2"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt0" />
+ <path
+ d="M-1,-1 L1,1 M1,-1 L-1,1"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt1" />
+ <path
+ d="M-1,0 L1,0 M0,-1 L0,1 M-1,-1 L1,1 M-1,1 L1,-1"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt2" />
+ <rect
+ height="2"
+ width="2"
+ y="-1"
+ x="-1"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt3" />
+ <rect
+ height="2"
+ width="2"
+ y="-1"
+ x="-1"
+ fill="currentColor"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt4" />
+ <circle
+ r="1"
+ cy="0"
+ cx="0"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt5" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt6"
+ xlink:href="#gpPt5" />
+ <path
+ d="M0,-1.33 L-1.33,0.67 L1.33,0.67 z"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt7" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt8"
+ xlink:href="#gpPt7" />
+ <use
+ transform="rotate(180)"
+ stroke="currentColor"
+ id="gpPt9"
+ xlink:href="#gpPt7" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt10"
+ xlink:href="#gpPt9" />
+ <use
+ transform="rotate(45)"
+ stroke="currentColor"
+ id="gpPt11"
+ xlink:href="#gpPt3" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt12"
+ xlink:href="#gpPt11" />
+ <path
+ d="M0,1.330 L1.265,0.411 L0.782,-1.067 L-0.782,-1.076 L-1.265,0.411 z"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt13" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt14"
+ xlink:href="#gpPt13" />
+ <filter
+ width="1"
+ height="1"
+ y="0"
+ x="0"
+ filterUnits="objectBoundingBox"
+ id="textbox">
+ <feFlood
+ id="feFlood4495"
+ result="bgnd"
+ flood-opacity="1"
+ flood-color="white" />
+ <feComposite
+ id="feComposite4497"
+ operator="atop"
+ in2="bgnd"
+ in="SourceGraphic" />
+ </filter>
+ <filter
+ width="1"
+ height="1"
+ y="0"
+ x="0"
+ filterUnits="objectBoundingBox"
+ id="greybox">
+ <feFlood
+ id="feFlood4500"
+ result="grey"
+ flood-opacity="1"
+ flood-color="lightgrey" />
+ <feComposite
+ id="feComposite4502"
+ operator="atop"
+ in2="grey"
+ in="SourceGraphic" />
+ </filter>
+ <circle
+ stroke-width="0.5"
+ r="0.5"
+ id="gpDot-4" />
+ <path
+ d="M-1,0 h2 M0,-1 v2"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt0-5" />
+ <path
+ d="M-1,-1 L1,1 M1,-1 L-1,1"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt1-2" />
+ <path
+ d="M-1,0 L1,0 M0,-1 L0,1 M-1,-1 L1,1 M-1,1 L1,-1"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt2-5" />
+ <rect
+ height="2"
+ width="2"
+ y="-1"
+ x="-1"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt3-9" />
+ <rect
+ height="2"
+ width="2"
+ y="-1"
+ x="-1"
+ fill="currentColor"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt4-3" />
+ <circle
+ r="1"
+ cy="0"
+ cx="0"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt5-8" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt6-8"
+ xlink:href="#gpPt5-8" />
+ <path
+ d="M0,-1.33 L-1.33,0.67 L1.33,0.67 z"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt7-4" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt8-3"
+ xlink:href="#gpPt7-4" />
+ <use
+ transform="rotate(180)"
+ stroke="currentColor"
+ id="gpPt9-5"
+ xlink:href="#gpPt7-4" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt10-0"
+ xlink:href="#gpPt9-5" />
+ <use
+ transform="rotate(45)"
+ stroke="currentColor"
+ id="gpPt11-5"
+ xlink:href="#gpPt3-9" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt12-9"
+ xlink:href="#gpPt11-5" />
+ <path
+ d="M0,1.330 L1.265,0.411 L0.782,-1.067 L-0.782,-1.076 L-1.265,0.411 z"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt13-3" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt14-4"
+ xlink:href="#gpPt13-3" />
+ <filter
+ width="1"
+ height="1"
+ y="0"
+ x="0"
+ filterUnits="objectBoundingBox"
+ id="textbox-6">
+ <feFlood
+ id="feFlood4756"
+ result="bgnd"
+ flood-opacity="1"
+ flood-color="white" />
+ <feComposite
+ id="feComposite4758"
+ operator="atop"
+ in2="bgnd"
+ in="SourceGraphic" />
+ </filter>
+ <filter
+ width="1"
+ height="1"
+ y="0"
+ x="0"
+ filterUnits="objectBoundingBox"
+ id="greybox-2">
+ <feFlood
+ id="feFlood4761"
+ result="grey"
+ flood-opacity="1"
+ flood-color="lightgrey" />
+ <feComposite
+ id="feComposite4763"
+ operator="atop"
+ in2="grey"
+ in="SourceGraphic" />
+ </filter>
+ <circle
+ stroke-width="0.5"
+ r="0.5"
+ id="gpDot-5" />
+ <path
+ d="M-1,0 h2 M0,-1 v2"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt0-3" />
+ <path
+ d="M-1,-1 L1,1 M1,-1 L-1,1"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt1-20" />
+ <path
+ d="M-1,0 L1,0 M0,-1 L0,1 M-1,-1 L1,1 M-1,1 L1,-1"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt2-0" />
+ <rect
+ height="2"
+ width="2"
+ y="-1"
+ x="-1"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt3-0" />
+ <rect
+ height="2"
+ width="2"
+ y="-1"
+ x="-1"
+ fill="currentColor"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt4-9" />
+ <circle
+ r="1"
+ cy="0"
+ cx="0"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt5-80" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt6-9"
+ xlink:href="#gpPt5-80" />
+ <path
+ d="M0,-1.33 L-1.33,0.67 L1.33,0.67 z"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt7-6" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt8-7"
+ xlink:href="#gpPt7-6" />
+ <use
+ transform="rotate(180)"
+ stroke="currentColor"
+ id="gpPt9-2"
+ xlink:href="#gpPt7-6" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt10-1"
+ xlink:href="#gpPt9-2" />
+ <use
+ transform="rotate(45)"
+ stroke="currentColor"
+ id="gpPt11-4"
+ xlink:href="#gpPt3-0" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt12-4"
+ xlink:href="#gpPt11-4" />
+ <path
+ d="M0,1.330 L1.265,0.411 L0.782,-1.067 L-0.782,-1.076 L-1.265,0.411 z"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt13-8" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt14-49"
+ xlink:href="#gpPt13-8" />
+ <filter
+ width="1"
+ height="1"
+ y="0"
+ x="0"
+ filterUnits="objectBoundingBox"
+ id="textbox-8">
+ <feFlood
+ id="feFlood5017"
+ result="bgnd"
+ flood-opacity="1"
+ flood-color="white" />
+ <feComposite
+ id="feComposite5019"
+ operator="atop"
+ in2="bgnd"
+ in="SourceGraphic" />
+ </filter>
+ <filter
+ width="1"
+ height="1"
+ y="0"
+ x="0"
+ filterUnits="objectBoundingBox"
+ id="greybox-4">
+ <feFlood
+ id="feFlood5022"
+ result="grey"
+ flood-opacity="1"
+ flood-color="lightgrey" />
+ <feComposite
+ id="feComposite5024"
+ operator="atop"
+ in2="grey"
+ in="SourceGraphic" />
+ </filter>
+ <defs
+ id="defs5027">
+ <circle
+ cy="0"
+ cx="0"
+ id="circle5089"
+ r="0.5"
+ stroke-width="0.5" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path5091"
+ stroke-width="0.222"
+ stroke="currentColor"
+ d="M -1,0 H 1 M 0,-1 v 2" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path5093"
+ stroke-width="0.222"
+ stroke="currentColor"
+ d="M -1,-1 1,1 M 1,-1 -1,1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path5095"
+ stroke-width="0.222"
+ stroke="currentColor"
+ d="M -1,0 H 1 M 0,-1 v 2 m -1,-2 2,2 m -2,0 2,-2" />
+ <rect
+ id="rect5097"
+ stroke-width="0.222"
+ stroke="currentColor"
+ x="-1"
+ y="-1"
+ width="2"
+ height="2" />
+ <rect
+ id="rect5099"
+ stroke-width="0.222"
+ stroke="currentColor"
+ fill="currentColor"
+ x="-1"
+ y="-1"
+ width="2"
+ height="2" />
+ <circle
+ id="circle5101"
+ stroke-width="0.222"
+ stroke="currentColor"
+ cx="0"
+ cy="0"
+ r="1" />
+ <use
+ height="100%"
+ width="100%"
+ y="0"
+ x="0"
+ xlink:href="#gpPt5-80"
+ id="use5103"
+ fill="currentColor"
+ stroke="none" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path5105"
+ stroke-width="0.222"
+ stroke="currentColor"
+ d="m 0,-1.33 -1.33,2 h 2.66 z" />
+ <use
+ height="100%"
+ width="100%"
+ y="0"
+ x="0"
+ xlink:href="#gpPt7-6"
+ id="use5107"
+ fill="currentColor"
+ stroke="none" />
+ <use
+ height="100%"
+ width="100%"
+ y="0"
+ x="0"
+ xlink:href="#gpPt7-6"
+ id="use5109"
+ stroke="currentColor"
+ transform="scale(-1)" />
+ <use
+ height="100%"
+ width="100%"
+ y="0"
+ x="0"
+ xlink:href="#gpPt9-2"
+ id="use5111"
+ fill="currentColor"
+ stroke="none" />
+ <use
+ height="100%"
+ width="100%"
+ y="0"
+ x="0"
+ xlink:href="#gpPt3-0"
+ id="use5113"
+ stroke="currentColor"
+ transform="rotate(45)" />
+ <use
+ height="100%"
+ width="100%"
+ y="0"
+ x="0"
+ xlink:href="#gpPt11-4"
+ id="use5115"
+ fill="currentColor"
+ stroke="none" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path5117"
+ stroke-width="0.222"
+ stroke="currentColor"
+ d="M 0,1.33 1.265,0.411 0.782,-1.067 -0.782,-1.076 -1.265,0.411 Z" />
+ <use
+ height="100%"
+ width="100%"
+ y="0"
+ x="0"
+ xlink:href="#gpPt13-8"
+ id="use5119"
+ fill="currentColor"
+ stroke="none" />
+ <filter
+ id="filter5125"
+ filterUnits="objectBoundingBox"
+ x="0"
+ y="0"
+ height="1"
+ width="1">
+ <feFlood
+ flood-color="white"
+ flood-opacity="1"
+ result="bgnd"
+ id="feFlood5121" />
+ <feComposite
+ in="SourceGraphic"
+ in2="bgnd"
+ operator="atop"
+ id="feComposite5123" />
+ </filter>
+ <filter
+ id="filter5131"
+ filterUnits="objectBoundingBox"
+ x="0"
+ y="0"
+ height="1"
+ width="1">
+ <feFlood
+ flood-color="lightgrey"
+ flood-opacity="1"
+ result="grey"
+ id="feFlood5127" />
+ <feComposite
+ in="SourceGraphic"
+ in2="grey"
+ operator="atop"
+ id="feComposite5129" />
+ </filter>
+ </defs>
+ <circle
+ stroke-width="0.5"
+ r="0.5"
+ id="gpDot-41" />
+ <path
+ d="M-1,0 h2 M0,-1 v2"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt0-9" />
+ <path
+ d="M-1,-1 L1,1 M1,-1 L-1,1"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt1-6" />
+ <path
+ d="M-1,0 L1,0 M0,-1 L0,1 M-1,-1 L1,1 M-1,1 L1,-1"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt2-8" />
+ <rect
+ height="2"
+ width="2"
+ y="-1"
+ x="-1"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt3-09" />
+ <rect
+ height="2"
+ width="2"
+ y="-1"
+ x="-1"
+ fill="currentColor"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt4-36" />
+ <circle
+ r="1"
+ cy="0"
+ cx="0"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt5-3" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt6-89"
+ xlink:href="#gpPt5-3" />
+ <path
+ d="M0,-1.33 L-1.33,0.67 L1.33,0.67 z"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt7-5" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt8-0"
+ xlink:href="#gpPt7-5" />
+ <use
+ transform="rotate(180)"
+ stroke="currentColor"
+ id="gpPt9-1"
+ xlink:href="#gpPt7-5" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt10-7"
+ xlink:href="#gpPt9-1" />
+ <use
+ transform="rotate(45)"
+ stroke="currentColor"
+ id="gpPt11-1"
+ xlink:href="#gpPt3-09" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt12-98"
+ xlink:href="#gpPt11-1" />
+ <path
+ d="M0,1.330 L1.265,0.411 L0.782,-1.067 L-0.782,-1.076 L-1.265,0.411 z"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt13-2" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt14-6"
+ xlink:href="#gpPt13-2" />
+ <filter
+ width="1"
+ height="1"
+ y="0"
+ x="0"
+ filterUnits="objectBoundingBox"
+ id="textbox-7">
+ <feFlood
+ id="feFlood6613"
+ result="bgnd"
+ flood-opacity="1"
+ flood-color="white" />
+ <feComposite
+ id="feComposite6615"
+ operator="atop"
+ in2="bgnd"
+ in="SourceGraphic" />
+ </filter>
+ <filter
+ width="1"
+ height="1"
+ y="0"
+ x="0"
+ filterUnits="objectBoundingBox"
+ id="greybox-5">
+ <feFlood
+ id="feFlood6618"
+ result="grey"
+ flood-opacity="1"
+ flood-color="lightgrey" />
+ <feComposite
+ id="feComposite6620"
+ operator="atop"
+ in2="grey"
+ in="SourceGraphic" />
+ </filter>
+ <defs
+ id="defs6623">
+ <circle
+ cy="0"
+ cx="0"
+ id="circle6685"
+ r="0.5"
+ stroke-width="0.5" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path6687"
+ stroke-width="0.222"
+ stroke="currentColor"
+ d="M -1,0 H 1 M 0,-1 v 2" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path6689"
+ stroke-width="0.222"
+ stroke="currentColor"
+ d="M -1,-1 1,1 M 1,-1 -1,1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path6691"
+ stroke-width="0.222"
+ stroke="currentColor"
+ d="M -1,0 H 1 M 0,-1 v 2 m -1,-2 2,2 m -2,0 2,-2" />
+ <rect
+ id="rect6693"
+ stroke-width="0.222"
+ stroke="currentColor"
+ x="-1"
+ y="-1"
+ width="2"
+ height="2" />
+ <rect
+ id="rect6695"
+ stroke-width="0.222"
+ stroke="currentColor"
+ fill="currentColor"
+ x="-1"
+ y="-1"
+ width="2"
+ height="2" />
+ <circle
+ id="circle6697"
+ stroke-width="0.222"
+ stroke="currentColor"
+ cx="0"
+ cy="0"
+ r="1" />
+ <use
+ height="100%"
+ width="100%"
+ y="0"
+ x="0"
+ xlink:href="#gpPt5-3"
+ id="use6699"
+ fill="currentColor"
+ stroke="none" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path6701"
+ stroke-width="0.222"
+ stroke="currentColor"
+ d="m 0,-1.33 -1.33,2 h 2.66 z" />
+ <use
+ height="100%"
+ width="100%"
+ y="0"
+ x="0"
+ xlink:href="#gpPt7-5"
+ id="use6703"
+ fill="currentColor"
+ stroke="none" />
+ <use
+ height="100%"
+ width="100%"
+ y="0"
+ x="0"
+ xlink:href="#gpPt7-5"
+ id="use6705"
+ stroke="currentColor"
+ transform="scale(-1)" />
+ <use
+ height="100%"
+ width="100%"
+ y="0"
+ x="0"
+ xlink:href="#gpPt9-1"
+ id="use6707"
+ fill="currentColor"
+ stroke="none" />
+ <use
+ height="100%"
+ width="100%"
+ y="0"
+ x="0"
+ xlink:href="#gpPt3-09"
+ id="use6709"
+ stroke="currentColor"
+ transform="rotate(45)" />
+ <use
+ height="100%"
+ width="100%"
+ y="0"
+ x="0"
+ xlink:href="#gpPt11-1"
+ id="use6711"
+ fill="currentColor"
+ stroke="none" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path6713"
+ stroke-width="0.222"
+ stroke="currentColor"
+ d="M 0,1.33 1.265,0.411 0.782,-1.067 -0.782,-1.076 -1.265,0.411 Z" />
+ <use
+ height="100%"
+ width="100%"
+ y="0"
+ x="0"
+ xlink:href="#gpPt13-2"
+ id="use6715"
+ fill="currentColor"
+ stroke="none" />
+ <filter
+ id="filter6721"
+ filterUnits="objectBoundingBox"
+ x="0"
+ y="0"
+ height="1"
+ width="1">
+ <feFlood
+ flood-color="white"
+ flood-opacity="1"
+ result="bgnd"
+ id="feFlood6717" />
+ <feComposite
+ in="SourceGraphic"
+ in2="bgnd"
+ operator="atop"
+ id="feComposite6719" />
+ </filter>
+ <filter
+ id="filter6727"
+ filterUnits="objectBoundingBox"
+ x="0"
+ y="0"
+ height="1"
+ width="1">
+ <feFlood
+ flood-color="lightgrey"
+ flood-opacity="1"
+ result="grey"
+ id="feFlood6723" />
+ <feComposite
+ in="SourceGraphic"
+ in2="grey"
+ operator="atop"
+ id="feComposite6725" />
+ </filter>
+ </defs>
+ <circle
+ stroke-width="0.5"
+ r="0.5"
+ id="gpDot-9" />
+ <path
+ d="M-1,0 h2 M0,-1 v2"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt0-97" />
+ <path
+ d="M-1,-1 L1,1 M1,-1 L-1,1"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt1-9" />
+ <path
+ d="M-1,0 L1,0 M0,-1 L0,1 M-1,-1 L1,1 M-1,1 L1,-1"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt2-7" />
+ <rect
+ height="2"
+ width="2"
+ y="-1"
+ x="-1"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt3-3" />
+ <rect
+ height="2"
+ width="2"
+ y="-1"
+ x="-1"
+ fill="currentColor"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt4-5" />
+ <circle
+ r="1"
+ cy="0"
+ cx="0"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt5-0" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt6-4"
+ xlink:href="#gpPt5-0" />
+ <path
+ d="M0,-1.33 L-1.33,0.67 L1.33,0.67 z"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt7-1" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt8-9"
+ xlink:href="#gpPt7-1" />
+ <use
+ transform="rotate(180)"
+ stroke="currentColor"
+ id="gpPt9-4"
+ xlink:href="#gpPt7-1" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt10-14"
+ xlink:href="#gpPt9-4" />
+ <use
+ transform="rotate(45)"
+ stroke="currentColor"
+ id="gpPt11-3"
+ xlink:href="#gpPt3-3" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt12-6"
+ xlink:href="#gpPt11-3" />
+ <path
+ d="M0,1.330 L1.265,0.411 L0.782,-1.067 L-0.782,-1.076 L-1.265,0.411 z"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt13-4" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt14-2"
+ xlink:href="#gpPt13-4" />
+ <filter
+ width="1"
+ height="1"
+ y="0"
+ x="0"
+ filterUnits="objectBoundingBox"
+ id="textbox-2">
+ <feFlood
+ id="feFlood6925"
+ result="bgnd"
+ flood-opacity="1"
+ flood-color="white" />
+ <feComposite
+ id="feComposite6927"
+ operator="atop"
+ in2="bgnd"
+ in="SourceGraphic" />
+ </filter>
+ <filter
+ width="1"
+ height="1"
+ y="0"
+ x="0"
+ filterUnits="objectBoundingBox"
+ id="greybox-7">
+ <feFlood
+ id="feFlood6930"
+ result="grey"
+ flood-opacity="1"
+ flood-color="lightgrey" />
+ <feComposite
+ id="feComposite6932"
+ operator="atop"
+ in2="grey"
+ in="SourceGraphic" />
+ </filter>
+ <circle
+ stroke-width="0.5"
+ r="0.5"
+ id="gpDot-8" />
+ <path
+ d="M-1,0 h2 M0,-1 v2"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt0-51" />
+ <path
+ d="M-1,-1 L1,1 M1,-1 L-1,1"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt1-1" />
+ <path
+ d="M-1,0 L1,0 M0,-1 L0,1 M-1,-1 L1,1 M-1,1 L1,-1"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt2-3" />
+ <rect
+ height="2"
+ width="2"
+ y="-1"
+ x="-1"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt3-06" />
+ <rect
+ height="2"
+ width="2"
+ y="-1"
+ x="-1"
+ fill="currentColor"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt4-4" />
+ <circle
+ r="1"
+ cy="0"
+ cx="0"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt5-4" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt6-7"
+ xlink:href="#gpPt5-4" />
+ <path
+ d="M0,-1.33 L-1.33,0.67 L1.33,0.67 z"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt7-53" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt8-8"
+ xlink:href="#gpPt7-53" />
+ <use
+ transform="rotate(180)"
+ stroke="currentColor"
+ id="gpPt9-27"
+ xlink:href="#gpPt7-53" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt10-3"
+ xlink:href="#gpPt9-27" />
+ <use
+ transform="rotate(45)"
+ stroke="currentColor"
+ id="gpPt11-53"
+ xlink:href="#gpPt3-06" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt12-7"
+ xlink:href="#gpPt11-53" />
+ <path
+ d="M0,1.330 L1.265,0.411 L0.782,-1.067 L-0.782,-1.076 L-1.265,0.411 z"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt13-48" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt14-0"
+ xlink:href="#gpPt13-48" />
+ <filter
+ width="1"
+ height="1"
+ y="0"
+ x="0"
+ filterUnits="objectBoundingBox"
+ id="textbox-0">
+ <feFlood
+ id="feFlood7186"
+ result="bgnd"
+ flood-opacity="1"
+ flood-color="white" />
+ <feComposite
+ id="feComposite7188"
+ operator="atop"
+ in2="bgnd"
+ in="SourceGraphic" />
+ </filter>
+ <filter
+ width="1"
+ height="1"
+ y="0"
+ x="0"
+ filterUnits="objectBoundingBox"
+ id="greybox-1">
+ <feFlood
+ id="feFlood7191"
+ result="grey"
+ flood-opacity="1"
+ flood-color="lightgrey" />
+ <feComposite
+ id="feComposite7193"
+ operator="atop"
+ in2="grey"
+ in="SourceGraphic" />
+ </filter>
+ <defs
+ id="defs7196">
+ <circle
+ cy="0"
+ cx="0"
+ id="circle7258"
+ r="0.5"
+ stroke-width="0.5" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path7260"
+ stroke-width="0.222"
+ stroke="currentColor"
+ d="M -1,0 H 1 M 0,-1 v 2" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path7262"
+ stroke-width="0.222"
+ stroke="currentColor"
+ d="M -1,-1 1,1 M 1,-1 -1,1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path7264"
+ stroke-width="0.222"
+ stroke="currentColor"
+ d="M -1,0 H 1 M 0,-1 v 2 m -1,-2 2,2 m -2,0 2,-2" />
+ <rect
+ id="rect7266"
+ stroke-width="0.222"
+ stroke="currentColor"
+ x="-1"
+ y="-1"
+ width="2"
+ height="2" />
+ <rect
+ id="rect7268"
+ stroke-width="0.222"
+ stroke="currentColor"
+ fill="currentColor"
+ x="-1"
+ y="-1"
+ width="2"
+ height="2" />
+ <circle
+ id="circle7270"
+ stroke-width="0.222"
+ stroke="currentColor"
+ cx="0"
+ cy="0"
+ r="1" />
+ <use
+ height="100%"
+ width="100%"
+ y="0"
+ x="0"
+ xlink:href="#gpPt5-4"
+ id="use7272"
+ fill="currentColor"
+ stroke="none" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path7274"
+ stroke-width="0.222"
+ stroke="currentColor"
+ d="m 0,-1.33 -1.33,2 h 2.66 z" />
+ <use
+ height="100%"
+ width="100%"
+ y="0"
+ x="0"
+ xlink:href="#gpPt7-53"
+ id="use7276"
+ fill="currentColor"
+ stroke="none" />
+ <use
+ height="100%"
+ width="100%"
+ y="0"
+ x="0"
+ xlink:href="#gpPt7-53"
+ id="use7278"
+ stroke="currentColor"
+ transform="scale(-1)" />
+ <use
+ height="100%"
+ width="100%"
+ y="0"
+ x="0"
+ xlink:href="#gpPt9-27"
+ id="use7280"
+ fill="currentColor"
+ stroke="none" />
+ <use
+ height="100%"
+ width="100%"
+ y="0"
+ x="0"
+ xlink:href="#gpPt3-06"
+ id="use7282"
+ stroke="currentColor"
+ transform="rotate(45)" />
+ <use
+ height="100%"
+ width="100%"
+ y="0"
+ x="0"
+ xlink:href="#gpPt11-53"
+ id="use7284"
+ fill="currentColor"
+ stroke="none" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path7286"
+ stroke-width="0.222"
+ stroke="currentColor"
+ d="M 0,1.33 1.265,0.411 0.782,-1.067 -0.782,-1.076 -1.265,0.411 Z" />
+ <use
+ height="100%"
+ width="100%"
+ y="0"
+ x="0"
+ xlink:href="#gpPt13-48"
+ id="use7288"
+ fill="currentColor"
+ stroke="none" />
+ <filter
+ id="filter7294"
+ filterUnits="objectBoundingBox"
+ x="0"
+ y="0"
+ height="1"
+ width="1">
+ <feFlood
+ flood-color="white"
+ flood-opacity="1"
+ result="bgnd"
+ id="feFlood7290" />
+ <feComposite
+ in="SourceGraphic"
+ in2="bgnd"
+ operator="atop"
+ id="feComposite7292" />
+ </filter>
+ <filter
+ id="filter7300"
+ filterUnits="objectBoundingBox"
+ x="0"
+ y="0"
+ height="1"
+ width="1">
+ <feFlood
+ flood-color="lightgrey"
+ flood-opacity="1"
+ result="grey"
+ id="feFlood7296" />
+ <feComposite
+ in="SourceGraphic"
+ in2="grey"
+ operator="atop"
+ id="feComposite7298" />
+ </filter>
+ </defs>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="14.420833"
+ inkscape:cx="12.333892"
+ inkscape:cy="8.4572256"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1379"
+ inkscape:window-height="1023"
+ inkscape:window-x="531"
+ inkscape:window-y="33"
+ inkscape:window-maximized="0"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-grids="true"
+ inkscape:document-rotation="0"
+ units="px">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="0.5"
+ spacingy="0.5"
+ enabled="true"
+ visible="true"
+ units="px"
+ empspacing="2" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8238">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-393.51587,-663.14807)">
+ <text
+ id="text4357"
+ y="672.25159"
+ x="413.88821"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:condensed;font-size:11.72398472px;line-height:1;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Bold Condensed';text-align:center;text-decoration:none;text-decoration-line:none;text-decoration-color:#000000;text-anchor:middle;shape-padding:0;overflow:visible;vector-effect:none;fill:#000000;stroke-width:0.2;paint-order:fill markers stroke;font-var [...]
+ xml:space="preserve"><tspan
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:condensed;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Bold Condensed';stroke-width:0.2;font-size:11.72398472px;line-height:1;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-variant-east-asian:normal;font-feature-settings:normal;text-indent:0;text-align:c [...]
+ y="672.25159"
+ x="413.88821"
+ id="tspan4355"
+ sodipodi:role="line">T</tspan></text>
+ <text
+ xml:space="preserve"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:condensed;font-size:11.72398472px;line-height:1;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Bold Condensed';text-align:center;text-decoration:none;text-decoration-line:none;text-decoration-color:#000000;text-anchor:middle;shape-padding:0;overflow:visible;vector-effect:none;fill:#000000;stroke-width:0.2;paint-order:fill markers stroke;font-var [...]
+ x="405.52057"
+ y="672.25159"
+ id="text4361"><tspan
+ sodipodi:role="line"
+ id="tspan4359"
+ x="405.52057"
+ y="672.25159"
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:condensed;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Bold Condensed';stroke-width:0.2;font-size:11.72398472px;line-height:1;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-variant-east-asian:normal;font-feature-settings:normal;text-indent:0;text-align:c [...]
+ <text
+ id="text4365"
+ y="672.25159"
+ x="397.34357"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:condensed;font-size:11.72398472px;line-height:1;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Bold Condensed';text-align:center;text-decoration:none;text-decoration-line:none;text-decoration-color:#000000;text-anchor:middle;shape-padding:0;overflow:visible;vector-effect:none;fill:#000000;stroke-width:0.2;paint-order:fill markers stroke;font-var [...]
+ xml:space="preserve"><tspan
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:condensed;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Bold Condensed';stroke-width:0.2;font-size:11.72398472px;line-height:1;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-variant-east-asian:normal;font-feature-settings:normal;text-indent:0;text-align:c [...]
+ y="672.25159"
+ x="397.34357"
+ id="tspan4363"
+ sodipodi:role="line">D</tspan></text>
+ <path
+ inkscape:connector-curvature="0"
+ stroke="rgb( 0, 0, 0)"
+ d="m 394.16204,679.02094 0.0289,-0.0289 0.0289,-0.01 0.0289,-0.0289 0.029,-0.01 0.0386,-0.01 0.029,-0.0193 0.0289,-0.0193 h 0.0289 l 0.029,-0.01 0.0289,-0.01 0.0289,-0.0193 0.0289,-0.01 0.0386,-0.01 0.029,-0.0193 0.0289,-0.01 h 0.029 0.0289 l 0.029,-0.01 0.0289,-0.01 0.0289,-0.01 0.0386,-0.01 h 0.0289 l 0.029,-0.01 0.0289,-0.0193 0.029,-0.01 0.0289,-0.01 0.029,-0.01 h 0.0289 l 0.0386,-0.01 0.0289,-0.01 0.0289,-0.01 h 0.029 0.0289 0.029 l 0.0289,-0.01 h 0.0289 l 0.0386,-0.01 [...]
+ id="path7206"
+ style="color:#000000;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.39999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ stroke="rgb(255, 0, 0)"
+ d="m 394.16204,678.85693 0.0289,-0.0965 0.0289,-0.0675 0.0289,-0.0868 0.029,-0.0289 0.0386,-0.0579 0.029,-0.0772 0.0289,-0.0579 0.0289,-0.01 0.029,-0.0386 0.0289,-0.0482 0.0289,-0.0386 0.0289,-0.0579 0.0386,-0.0482 0.029,-0.0386 0.0289,-0.0482 0.029,0.01 0.0289,-0.0193 0.029,-0.0289 0.0289,-0.029 0.0289,-0.0386 0.0386,-0.029 0.0289,-0.0289 0.029,-0.029 0.0289,-0.0482 0.029,-0.0386 0.0289,-0.0289 0.029,-0.0386 0.0289,-0.0289 0.0386,-0.0386 0.0289,-0.029 0.0289,-0.0386 0.029,0 [...]
+ id="path7213"
+ style="color:#000000;vector-effect:none;fill:none;fill-opacity:1;stroke:#e91616;stroke-width:1.39999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;opacity:1" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_edge-24.svg b/pixmaps/src/gwy_edge-24.svg
new file mode 100644
index 0000000..d90d16b
--- /dev/null
+++ b/pixmaps/src/gwy_edge-24.svg
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg10043"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_edge-24.svg"
+ inkscape:export-filename="gwy_arithmetic-24.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs10045" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="39.531323"
+ inkscape:cx="13.939616"
+ inkscape:cy="12.958852"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata10048">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-197.36205,-472.33789)">
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#4696db;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 197.86205,472.83788 h 23 v 23 h -23 z"
+ id="rect11370"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#d0e2f2;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8153"
+ width="12"
+ height="23"
+ x="209.36205"
+ y="472.83789" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path4911"
+ d="m 197.86205,472.83788 h 23 v 23 h -23 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#db2424;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 204.36205,475.33789 h 10 v 18 h -10 z"
+ id="rect4972"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_enforce_distribution-24.svg b/pixmaps/src/gwy_enforce_distribution-24.svg
new file mode 100644
index 0000000..c2cc38f
--- /dev/null
+++ b/pixmaps/src/gwy_enforce_distribution-24.svg
@@ -0,0 +1,144 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg9687"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_enforce_distribution-24.svg"
+ inkscape:export-filename="gwy_graph_function-24.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96">
+ <defs
+ id="defs9689">
+ <linearGradient
+ gradientTransform="matrix(0.91711503,0,0,0.91711503,63.562131,186.16072)"
+ gradientUnits="userSpaceOnUse"
+ y2="520.60657"
+ x2="360.2847"
+ y1="544.1178"
+ x1="383.79593"
+ id="linearGradient8314"
+ xlink:href="#linearGradient8308-6"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient8308-6">
+ <stop
+ style="stop-color:#0c1e2d;stop-opacity:1"
+ offset="0"
+ id="stop8310-7" />
+ <stop
+ id="stop8351-5"
+ offset="0.5"
+ style="stop-color:#4696db;stop-opacity:1" />
+ <stop
+ style="stop-color:#c3ddf3;stop-opacity:1"
+ offset="1"
+ id="stop8312-3" />
+ </linearGradient>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="15.326213"
+ inkscape:cx="13.039938"
+ inkscape:cy="6.5033545"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-global="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata9692">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-306.29821,-648.57531)">
+ <path
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 318.16343,664.09589 c -1.78708,-0.45041 -1.80159,-1.39652 -2.34623,-2.49635 -1.14024,-2.30258 -2.037,-12.80231 -2.38337,-11.63845 -2.65966,8.42634 -1.37816,0.55667 -3.89942,3.42243 -1.07858,1.22595 -1.21495,10.10934 -2.61744,10.71237"
+ id="path8447"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cscsc" />
+ <path
+ sodipodi:nodetypes="ccc"
+ inkscape:connector-curvature="0"
+ id="path8126"
+ d="m 330.06258,671.75715 c -4.13783,-1.00258 -4.45241,-15.46529 -7.73639,-15.27834 -3.38627,-0.52797 -3.41611,13.96132 -7.73638,15.27834"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#db2424;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <g
+ transform="matrix(0.32463768,0,0,0.32463768,178.89597,449.64029)"
+ id="layer1-6"
+ inkscape:label="Layer 1"
+ style="stroke-width:3.28571439">
+ <rect
+ y="663.61682"
+ x="393.98462"
+ height="21.5625"
+ width="21.5625"
+ id="rect8276"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:url(#linearGradient8314);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3.08035731;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ </g>
+ <g
+ id="g8451"
+ transform="translate(39.74171,23.40771)"
+ style="fill:#db2424;fill-opacity:1">
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path8069"
+ d="m 269.56953,635.17774 1.99711,-1.99709 2.99275,2.99275 -1.99709,1.9971 z"
+ style="fill:#db2424;fill-rule:evenodd;stroke:none;stroke-width:1.06666672px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8071"
+ d="m 270.56519,640.1676 5.99131,-5.99131 v 5.99131 z"
+ style="fill:#db2424;fill-rule:evenodd;stroke:none;stroke-width:1.06666672px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1" />
+ </g>
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_entropy-24.svg b/pixmaps/src/gwy_entropy-24.svg
new file mode 100644
index 0000000..20b5922
--- /dev/null
+++ b/pixmaps/src/gwy_entropy-24.svg
@@ -0,0 +1,153 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8239"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_entropy-24.svg">
+ <defs
+ id="defs8241" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="17.525267"
+ inkscape:cx="-24.525089"
+ inkscape:cy="3.4093406"
+ inkscape:document-units="px"
+ inkscape:current-layer="g4871"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8244">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-235.29175,-670.91876)">
+ <g
+ id="g4871"
+ transform="translate(0,-1.0000011)">
+ <rect
+ y="683.41882"
+ x="235.79175"
+ height="2.9999461"
+ width="3"
+ id="rect12632"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#ffbb00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4823"
+ d="m 235.29175,679.41876 h 24"
+ style="fill:none;fill-rule:evenodd;stroke:#db2424;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <g
+ id="g8456">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 244.79175,683.91876 v 10"
+ id="path4837"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4839"
+ d="m 249.79175,683.91876 v 10"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 249.29175,688.41876 h -4"
+ id="path4841"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path4843"
+ d="m 249.29175,689.41876 h -4"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 250.79175,683.91876 v 10"
+ id="path4845"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4847"
+ d="m 243.79175,683.91876 v 10"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ sodipodi:nodetypes="cc" />
+ </g>
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#ffbb00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8458"
+ width="3"
+ height="2.9999461"
+ x="240.79175"
+ y="678.41882" />
+ <rect
+ y="677.41882"
+ x="245.79175"
+ height="2.9999461"
+ width="3"
+ id="rect8460"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#ffbb00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#ffbb00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8462"
+ width="3"
+ height="2.9999461"
+ x="250.79175"
+ y="677.41882" />
+ <rect
+ y="673.41882"
+ x="255.79175"
+ height="2.9999461"
+ width="3"
+ id="rect8464"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#ffbb00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ </g>
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_extend-24.svg b/pixmaps/src/gwy_extend-24.svg
new file mode 100644
index 0000000..5198e46
--- /dev/null
+++ b/pixmaps/src/gwy_extend-24.svg
@@ -0,0 +1,186 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 22.5 22.5"
+ id="svg8093"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_extend-24.svg"
+ inkscape:export-filename="gwy_scale-24.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs8095">
+ <linearGradient
+ osb:paint="solid"
+ id="linearGradient8428">
+ <stop
+ id="stop8430"
+ offset="0"
+ style="stop-color:#4696db;stop-opacity:1;" />
+ </linearGradient>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath8428-3-56">
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#eb0000;fill-opacity:0.41158537;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8430-6-2"
+ width="92.534042"
+ height="72.344795"
+ x="77.848434"
+ y="-55.845753"
+ transform="matrix(0.51658212,0.85623765,0.85623765,-0.51658212,0,0)" />
+ </clipPath>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="6.3843396"
+ inkscape:cx="49.055092"
+ inkscape:cy="26.275921"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ units="px">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="0.9375"
+ spacingy="0.9375"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8098">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-244.77814,-596.57599)">
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#e1ebd7;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.9375;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:0.93750005, 1.87500010000000006;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect10104-2"
+ width="21.5625"
+ height="21.5625"
+ x="245.24689"
+ y="597.04474" />
+ <path
+ inkscape:connector-curvature="0"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:norma [...]
+ d="m 246.65314,598.45099 v 5.625 l 2.14966,-2.14966 3.75,3.75 1.32568,-1.32751 -3.75,-3.74817 v -0.002 l 2.14966,-2.14783 z"
+ id="path8441" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.875;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 249.46564,601.26349 3.75,3.75"
+ id="path8461"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <g
+ transform="matrix(0.9375,0,0,0.9375,56.498442,33.313463)"
+ id="layer1-5"
+ inkscape:label="Layer 1" />
+ <path
+ sodipodi:nodetypes="cccc"
+ style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 252.27814,598.45099 -5.625,5.625 v -5.625 z"
+ id="path8499"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path8451"
+ d="m 246.65314,617.20099 v -5.625 l 2.14966,2.14966 3.75,-3.75 1.32568,1.32751 -3.75,3.74817 v 0.002 l 2.14966,2.14783 z"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:norma [...]
+ inkscape:connector-curvature="0" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path8429"
+ d="m 249.46564,614.38849 3.75,-3.75"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.875;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8431"
+ d="m 252.27814,617.20099 -5.625,-5.625 v 5.625 z"
+ style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ sodipodi:nodetypes="cccc" />
+ <path
+ inkscape:connector-curvature="0"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:norma [...]
+ d="m 265.40297,617.20099 h -5.625 l 2.14966,-2.14966 -3.75,-3.75 1.32751,-1.32568 3.74817,3.75 h 0.002 l 2.14783,-2.14966 z"
+ id="path8453" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.875;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 262.59064,614.38849 -3.75,-3.75"
+ id="path8433"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ sodipodi:nodetypes="cccc"
+ style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 259.77814,617.20099 5.625,-5.625 v 5.625 z"
+ id="path8435"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path8449"
+ d="m 265.40297,598.45099 h -5.625 l 2.14966,2.14966 -3.75,3.75 1.32751,1.32568 3.74817,-3.75 h 0.002 l 2.14783,2.14966 z"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:norma [...]
+ inkscape:connector-curvature="0" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path8437"
+ d="m 262.59064,601.26349 -3.75,3.75"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.875;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8439"
+ d="m 259.77814,598.45099 5.625,5.625 v -5.625 z"
+ style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ sodipodi:nodetypes="cccc" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path8459"
+ d="m 251.80939,603.60724 h 8.4375 v 8.4375 h -8.4375 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#f8f8f8;stroke-width:2.8125;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#7db846;fill-opacity:1;fill-rule:evenodd;stroke:#db2424;stroke-width:1.875;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.46875;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 251.80939,603.60724 h 8.4375 v 8.4375 h -8.4375 z"
+ id="rect10108-9"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_extract_path-24.svg b/pixmaps/src/gwy_extract_path-24.svg
new file mode 100644
index 0000000..89bbdff
--- /dev/null
+++ b/pixmaps/src/gwy_extract_path-24.svg
@@ -0,0 +1,172 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg9687"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_extract_path-24.svg"
+ inkscape:export-filename="gwy_graph_function-24.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96">
+ <defs
+ id="defs9689">
+ <marker
+ inkscape:stockid="StopL"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="StopL"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path8658"
+ d="M 0.0,5.65 L 0.0,-5.65"
+ style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ transform="scale(0.8)" />
+ </marker>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="4.3638912"
+ inkscape:cx="-39.107137"
+ inkscape:cy="18.147819"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-global="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata9692">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-306.29821,-648.57531)">
+ <g
+ id="g8886"
+ transform="translate(0,-1.10137)">
+ <g
+ transform="rotate(-90,318.8489,661.12599)"
+ id="g8458">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,668.07531 h 15"
+ id="path8446"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8448"
+ d="m 307.29821,653.07531 h 15"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ sodipodi:nodetypes="cc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8450"
+ d="m 307.29821,663.07531 h 15"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,658.07531 h 15"
+ id="path8452"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ </g>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,669.17667 h 22"
+ id="path8444"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8442"
+ d="m 307.29821,664.17667 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,659.17667 h 22"
+ id="path8440"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ id="g8481"
+ transform="matrix(0,1.8100351,-2.0095856,0,1633.1526,86.575948)"
+ style="stroke-width:0.52432823">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:2.09731293;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 313.12992,649.53358 c -4.37265,4.67662 3.04249,5.18704 0,9.64007"
+ id="path8644"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ sodipodi:nodetypes="csssc"
+ inkscape:connector-curvature="0"
+ id="path8642"
+ d="m 313.12992,649.53358 c -1.09316,1.16915 -1.44959,2.07792 -1.41686,2.853 0.0327,0.77508 0.4546,1.41648 0.91805,2.05088 0.46345,0.63441 0.96846,1.26183 1.16746,2.00896 0.19899,0.74713 0.092,1.61397 -0.66865,2.72723"
+ style="fill:none;fill-rule:evenodd;stroke:#db2424;stroke-width:1.04865646;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+ <path
+ sodipodi:nodetypes="csssc"
+ inkscape:connector-curvature="0"
+ id="path8763"
+ d="m 327.85927,653.35209 c -2.34951,-1.97866 -4.17576,-2.62381 -5.73335,-2.56457 -1.55759,0.0592 -2.84653,0.82284 -4.12142,1.6617 -1.2749,0.83886 -2.53575,1.75295 -4.03717,2.11315 -1.50142,0.36018 -3.24341,0.16652 -5.4806,-1.21028"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-mid:url(#StopL);marker-start:url(#StopL);marker-end:url(#StopL)" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 306.37991,670.58948 c 0,0 4.31186,-1.92581 6.41555,-3.04179 2.3859,-1.26569 4.70477,-2.71122 7.02795,-4.13826 2.11799,-1.301 4.13666,-2.84305 6.2989,-4.03214 1.33669,-0.7351 4.11179,-1.90997 4.11179,-1.90997"
+ id="path8901"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="caaac" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#db2424;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 306.50584,668.43234 c 0,0 5.15855,-6.51902 7.91718,-6.89066 2.91791,-0.3931 5.66335,5.32851 8.58232,5.00405 2.46065,-0.27344 7.09472,-5.81118 7.09472,-5.81118"
+ id="path8899"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="caac" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_facet_level-24.svg b/pixmaps/src/gwy_facet_level-24.svg
new file mode 100644
index 0000000..f4b640b
--- /dev/null
+++ b/pixmaps/src/gwy_facet_level-24.svg
@@ -0,0 +1,263 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 22.5 22.499999"
+ id="svg8509"
+ version="1.1"
+ inkscape:version="0.92+devel unknown"
+ sodipodi:docname="gwy_facet_level-24.svg"
+ inkscape:export-filename="gwy_facet_level-24.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs8511">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient916">
+ <stop
+ style="stop-color:#0c1e2d;stop-opacity:1"
+ offset="0"
+ id="stop910" />
+ <stop
+ id="stop912"
+ offset="0.5"
+ style="stop-color:#4696db;stop-opacity:1" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1"
+ offset="1"
+ id="stop914" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient908">
+ <stop
+ style="stop-color:#0c1e2d;stop-opacity:1"
+ offset="0"
+ id="stop902" />
+ <stop
+ id="stop904"
+ offset="0.5"
+ style="stop-color:#4696db;stop-opacity:1" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1"
+ offset="1"
+ id="stop906" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient900">
+ <stop
+ style="stop-color:#0c1e2d;stop-opacity:1"
+ offset="0"
+ id="stop894" />
+ <stop
+ id="stop896"
+ offset="0.5"
+ style="stop-color:#4696db;stop-opacity:1" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1"
+ offset="1"
+ id="stop898" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient892">
+ <stop
+ style="stop-color:#0c1e2d;stop-opacity:1"
+ offset="0"
+ id="stop886" />
+ <stop
+ id="stop888"
+ offset="0.5"
+ style="stop-color:#4696db;stop-opacity:1" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1"
+ offset="1"
+ id="stop890" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient859">
+ <stop
+ style="stop-color:#0c1e2d;stop-opacity:1"
+ offset="0"
+ id="stop853" />
+ <stop
+ id="stop855"
+ offset="0.5"
+ style="stop-color:#4696db;stop-opacity:1" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1"
+ offset="1"
+ id="stop857" />
+ </linearGradient>
+ <linearGradient
+ gradientTransform="matrix(-0.9375076,0,0,0.93750259,682.64548,4.9957464)"
+ inkscape:collect="always"
+ xlink:href="#linearGradient916"
+ id="linearGradient8668"
+ x1="375.73077"
+ y1="536.55804"
+ x2="383.08414"
+ y2="529.2876"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ id="linearGradient8308"
+ inkscape:collect="always">
+ <stop
+ id="stop8310"
+ offset="0"
+ style="stop-color:#0c1e2d;stop-opacity:1" />
+ <stop
+ style="stop-color:#4696db;stop-opacity:1"
+ offset="0.5"
+ id="stop8351" />
+ <stop
+ id="stop8312"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ gradientTransform="matrix(-0.9375076,0,0,0.93750259,682.64548,4.9957464)"
+ inkscape:collect="always"
+ xlink:href="#linearGradient8308"
+ id="linearGradient8688"
+ x1="377.00833"
+ y1="527.06122"
+ x2="382.4537"
+ y2="521.64996"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ gradientTransform="matrix(-0.9375076,0,0,0.93750259,682.64548,4.9957464)"
+ inkscape:collect="always"
+ xlink:href="#linearGradient900"
+ id="linearGradient8660"
+ x1="369.80258"
+ y1="530.41608"
+ x2="374.7659"
+ y2="525.23682"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ gradientTransform="matrix(-0.9375076,0,0,0.93750259,682.64548,4.9957464)"
+ inkscape:collect="always"
+ xlink:href="#linearGradient908"
+ id="linearGradient8652"
+ x1="360.47513"
+ y1="529.16833"
+ x2="368.6232"
+ y2="522.23163"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ gradientTransform="matrix(-0.9375076,0,0,0.93750259,682.64548,4.9957464)"
+ inkscape:collect="always"
+ xlink:href="#linearGradient892"
+ id="linearGradient8644"
+ x1="358.22925"
+ y1="538.68414"
+ x2="369.73535"
+ y2="530.46136"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ gradientTransform="matrix(-0.9375076,0,0,0.93750259,682.64548,4.9957464)"
+ inkscape:collect="always"
+ xlink:href="#linearGradient859"
+ id="linearGradient8339"
+ x1="369.86865"
+ y1="543.72437"
+ x2="377.40475"
+ y2="538.67938"
+ gradientUnits="userSpaceOnUse" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="12.06387"
+ inkscape:cx="-0.43782614"
+ inkscape:cy="10.764537"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="1644"
+ inkscape:window-height="1023"
+ inkscape:window-x="266"
+ inkscape:window-y="33"
+ inkscape:window-maximized="0"
+ units="px"
+ inkscape:document-rotation="0"
+ inkscape:snap-global="false" />
+ <metadata
+ id="metadata8514">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-322.60477,-492.8367)">
+ <path
+ style="fill:url(#linearGradient8339);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 343.09707,514.58958 c -0.60704,-0.23346 -5.18315,-4.06244 -5.6034,-4.66946 -0.42026,-0.60703 -3.3739,-5.50639 -3.3739,-5.50639 0,0 -3.53695,1.58404 -4.19069,1.91089 -0.65372,0.32687 -3.31533,4.3893 -3.5955,5.13642 -0.28017,0.74712 -0.70042,3.03515 -0.70042,3.03515 z"
+ id="path8319"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cscsccc" />
+ <path
+ style="fill:url(#linearGradient8644);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 334.14561,504.98819 c -0.18678,-0.70041 0.1728,-3.09956 0.59306,-3.75328 0.42026,-0.65373 3.82898,-2.28804 3.82898,-2.28804 l 2.98848,1.26075 2.98848,3.22194 -0.0934,11.3468 -5.21007,-0.14008 z"
+ id="path8321"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cscccccc" />
+ <path
+ style="fill:url(#linearGradient8652);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 338.42756,499.36713 -2.14796,-3.22194 -2.10127,-2.61491 10.22619,-0.14009 0.18678,11.30012 z"
+ id="path8323"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccc" />
+ <path
+ style="fill:url(#linearGradient8660);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 335.11223,493.62367 -1.58764,-0.0467 -4.62278,5.46329 -0.65374,2.14796 3.59552,5.88352 1.30745,-0.84051 c 0,0 3.50212,-4.43599 4.06246,-4.90293 0.56034,-0.46695 1.72772,-1.54094 1.72772,-1.54094 z"
+ id="path8325"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccscc" />
+ <path
+ style="fill:url(#linearGradient8688);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 328.71502,501.74854 -5.88356,-1.21406 0.14009,-7.0042 11.9539,-0.14009 -4.94967,4.99634 z"
+ id="path8327"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:url(#linearGradient8668);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 326.24019,515.00984 -3.12857,-0.28017 v -14.89561 l 6.11705,0.23348 c 0,0 1.86779,3.64218 1.91449,3.87565 0.0467,0.23348 0.56034,3.40872 0.79381,3.08186 0.23347,-0.32686 -1.77441,1.49422 -2.47482,1.91448 -0.70044,0.42026 -2.24136,3.64219 -2.28806,4.24921 -0.0467,0.60704 -0.9339,1.8211 -0.9339,1.8211 z"
+ id="path8329"
+ inkscape:connector-curvature="0" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.9375;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8276"
+ width="21.562677"
+ height="21.562561"
+ x="-344.6362"
+ y="493.30539"
+ transform="scale(-1,1)" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_favourite-24.svg b/pixmaps/src/gwy_favourite-24.svg
new file mode 100644
index 0000000..6be4cb5
--- /dev/null
+++ b/pixmaps/src/gwy_favourite-24.svg
@@ -0,0 +1,199 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8424"
+ version="1.1"
+ inkscape:version="0.92+devel unknown"
+ sodipodi:docname="gwy_favourite-24.svg">
+ <defs
+ id="defs8426">
+ <filter
+ style="color-interpolation-filters:sRGB;"
+ inkscape:label="Drop Shadow"
+ id="filter5063">
+ <feFlood
+ flood-opacity="1"
+ flood-color="rgb(0,0,0)"
+ result="flood"
+ id="feFlood5053" />
+ <feComposite
+ in="flood"
+ in2="SourceGraphic"
+ operator="in"
+ result="composite1"
+ id="feComposite5055" />
+ <feGaussianBlur
+ in="composite1"
+ stdDeviation="1"
+ result="blur"
+ id="feGaussianBlur5057" />
+ <feOffset
+ dx="0.9"
+ dy="0.9"
+ result="offset"
+ id="feOffset5059" />
+ <feComposite
+ in="SourceGraphic"
+ in2="offset"
+ operator="over"
+ result="composite2"
+ id="feComposite5061" />
+ </filter>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="18.687497"
+ inkscape:cx="23.633662"
+ inkscape:cy="10.453482"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1149"
+ inkscape:window-x="0"
+ inkscape:window-y="32"
+ inkscape:window-maximized="1"
+ inkscape:document-rotation="0"
+ inkscape:snap-grids="true"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="0.5"
+ spacingy="0.5"
+ enabled="true"
+ visible="true"
+ units="px"
+ empspacing="2" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8429">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-128.33165,-604.34668)">
+ <g
+ id="g4847"
+ transform="matrix(0.91523796,0,0,0.91523796,28.295059,50.836714)"
+ style="filter:url(#filter5063)">
+ <path
+ inkscape:transform-center-x="-4.5031347e-06"
+ inkscape:transform-center-y="-1.1612859"
+ d="m 122.33165,606.34669 c 0.82529,0 2.69089,7.05354 3.35856,7.53864 0.66768,0.48509 7.95249,0.0797 8.20752,0.86462 0.25503,0.7849 -5.87678,4.73885 -6.13181,5.52375 -0.25503,0.7849 2.38164,7.5879 1.71396,8.07299 -0.66767,0.4851 -6.32294,-4.12476 -7.14823,-4.12476 -0.82529,0 -6.48056,4.60986 -7.14823,4.12476 -0.66768,-0.48509 1.96899,-7.28809 1.71396,-8.07299 -0.25503,-0.7849 -6.38684,-4.73885 -6.13181,-5.52375 0.25503,-0.7849 7.53984,-0.37953 8.20752,-0.86462 0.66767,-0.4851 2.5 [...]
+ inkscape:randomized="0"
+ inkscape:rounded="0.1"
+ inkscape:flatsided="false"
+ sodipodi:arg2="-0.94247777"
+ sodipodi:arg1="-1.5707963"
+ sodipodi:r2="5.7139311"
+ sodipodi:r1="12.161301"
+ sodipodi:cy="618.508"
+ sodipodi:cx="122.33165"
+ sodipodi:sides="5"
+ id="path3740"
+ style="color:#000000;overflow:visible;vector-effect:none;fill:#ffdb15;fill-opacity:1;fill-rule:evenodd;stroke-width:1.05650628px"
+ sodipodi:type="star" />
+ <path
+ transform="translate(128.33165,604.34668)"
+ id="path4688"
+ d="m -6,2 c -0.8252936,0 -2.6916985,7.0539671 -3.359375,7.5390625 -0.667677,0.4850955 -7.952001,0.07838 -8.207031,0.8632815 -0.25503,0.784901 5.877783,4.74049 6.132812,5.52539 0.25503,0.784901 -2.38252,7.587171 -1.714844,8.072266 0.667677,0.485095 6.3231444,-4.125 7.148438,-4.125 0.8252936,0 6.48076097,4.610095 7.1484375,4.125 C 1.816114,23.514905 -0.82143601,16.712635 -0.56640625,15.927734 -0.31137649,15.142834 5.821436,11.187245 5.5664062,10.402344 5.3113765,9.6174429 -1.97294 [...]
+ style="color:#000000;overflow:visible;vector-effect:none;fill:#ffee8f;fill-opacity:1;fill-rule:evenodd;stroke-width:1.05650628px"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path4706"
+ transform="translate(128.33165,604.34668)"
+ d="m -6,2 c -0.8246327,0 -2.6883631,7.0418987 -3.3574219,7.5371094 l 0.9316407,1.2812496 C -7.940222,10.447562 -6.5954968,5.3710937 -6,5.3710938 c 4.936e-4,0 0.00146,-7e-6 0.00195,0 V 2 C -5.998543,1.999995 -5.99951,2 -6,2 Z"
+ style="opacity:1;vector-effect:none;fill:#fcff17;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.05650628px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path4708"
+ transform="translate(128.33165,604.34668)"
+ d="m -2.640625,9.5390625 -0.9316406,1.2812495 c 6.564e-4,4.93e-4 0.0013,0.0034 0.00195,0.0039 0.4815839,0.349891 5.7197011,0.05937 5.9296875,0.621093 L 5.5664062,10.402344 C 5.3113765,9.6174427 -1.9729485,10.024158 -2.640625,9.5390625 Z"
+ style="opacity:1;vector-effect:none;fill:#fcff17;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.05650628px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path4710"
+ transform="translate(128.33165,604.34668)"
+ d="m -2.0664062,15.4375 c -4.45e-4,0.0013 -0.0035,0.0046 -0.00391,0.0059 -0.1839,0.565987 1.7101458,5.456437 1.2421875,5.832032 l 1.9785156,2.722656 c 0.661155,-0.495979 -1.97159773,-7.286116 -1.71679685,-8.070313 1.9859e-4,-6.11e-4 0.001747,-0.0013 0.001953,-0.002 z"
+ style="opacity:1;vector-effect:none;fill:#e4b700;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.05650628px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path4712"
+ transform="translate(128.33165,604.34668)"
+ d="m -6,18.298828 c -0.5968072,0 -4.687095,3.333216 -5.169922,2.982422 -5.98e-4,-4.35e-4 -0.0014,-0.0015 -0.002,-0.002 l -1.974609,2.71875 0.002,0.002 c 0.679749,0.471244 6.3203108,-4.125 7.144531,-4.125 4.552e-4,0 0.0015,-3e-6 0.00195,0 v -1.576172 c -3.431e-4,-2e-6 -0.00161,0 -0.00195,0 z"
+ style="opacity:1;vector-effect:none;fill:#b18e00;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.05650628px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path4714"
+ transform="translate(128.33165,604.34668)"
+ d="m -17.564453,10.402344 -0.002,0.0039 c -0.238023,0.79215 5.878117,4.737611 6.132812,5.521484 l 1.5000002,-0.488281 c -0.1986512,-0.574466 -4.6137952,-3.423612 -4.4296872,-3.990234 7.12e-4,-0.0022 0.005,-0.0037 0.0059,-0.0059 z"
+ style="opacity:1;vector-effect:none;fill:#e4b700;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.05650628px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4691"
+ d="m 122.37176,606.37085 v 3.3711 c 0.596,0 1.94322,5.08607 2.42773,5.44922 l 0.93164,-1.28125 c -0.66768,-0.4851 -2.53408,-7.53907 -3.35937,-7.53907 z"
+ style="opacity:1;vector-effect:none;fill:#e4b700;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.05650628px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ id="path4698"
+ transform="translate(128.33165,604.34668)"
+ d="m -9.3574219,9.5371094 c -5.362e-4,3.969e-4 -0.00142,0.00156 -0.00195,0.00195 -0.6676771,0.4850956 -7.9520011,0.07838 -8.2070311,0.8632816 l 3.207031,1.042968 c 0.209986,-0.561724 5.4481036,-0.271202 5.9296876,-0.621093 8.137e-4,-5.91e-4 0.00309,-0.0033 0.00391,-0.0039 z"
+ style="opacity:1;vector-effect:none;fill:#fcff17;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.05650628px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path4700"
+ transform="translate(128.33165,604.34668)"
+ d="m -9.9335938,15.4375 -1.5019532,0.488281 c 2.06e-4,6.15e-4 0.0018,0.0013 0.002,0.002 0.25503,0.784901 -2.38252,7.587171 -1.714844,8.072266 l 1.976563,-2.720703 c -0.476317,-0.361658 1.4263824,-5.269043 1.2421875,-5.835938 -4.042e-4,-0.0012 -0.00346,-0.0046 -0.00391,-0.0059 z"
+ style="opacity:1;vector-effect:none;fill:#fcff17;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.05650628px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path4702"
+ transform="translate(128.33165,604.34668)"
+ d="M -6,18.298828 V 19.875 c 0.8252936,0 6.48076097,4.610095 7.1484375,4.125 L -0.828125,21.279297 c -5.9118e-4,4.49e-4 -0.001355,0.0015 -0.001953,0.002 C -1.3129053,21.632044 -5.4031928,18.298828 -6,18.298828 Z"
+ style="opacity:1;vector-effect:none;fill:#e4b700;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.05650628px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path4704"
+ transform="translate(128.33165,604.34668)"
+ d="M 5.5664062,10.402344 2.359375,11.445312 c 5.421e-4,0.0015 0.00343,0.0024 0.00391,0.0039 0.1841778,0.56684 -4.2361667,3.417302 -4.4316406,3.990234 l 1.50195315,0.488281 c 0.25502976,-0.7849 6.38784225,-4.740489 6.13281245,-5.52539 z"
+ style="opacity:1;vector-effect:none;fill:#b18e00;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.05650628px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ inkscape:connector-curvature="0" />
+ </g>
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_fft-24.svg b/pixmaps/src/gwy_fft-24.svg
new file mode 100644
index 0000000..60c9d6d
--- /dev/null
+++ b/pixmaps/src/gwy_fft-24.svg
@@ -0,0 +1,656 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8233"
+ version="1.1"
+ inkscape:version="0.92+devel unknown"
+ sodipodi:docname="gwy_fft-24.svg">
+ <defs
+ id="defs8235">
+ <circle
+ stroke-width="0.5"
+ r="0.5"
+ id="gpDot" />
+ <path
+ d="M-1,0 h2 M0,-1 v2"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt0" />
+ <path
+ d="M-1,-1 L1,1 M1,-1 L-1,1"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt1" />
+ <path
+ d="M-1,0 L1,0 M0,-1 L0,1 M-1,-1 L1,1 M-1,1 L1,-1"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt2" />
+ <rect
+ height="2"
+ width="2"
+ y="-1"
+ x="-1"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt3" />
+ <rect
+ height="2"
+ width="2"
+ y="-1"
+ x="-1"
+ fill="currentColor"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt4" />
+ <circle
+ r="1"
+ cy="0"
+ cx="0"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt5" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt6"
+ xlink:href="#gpPt5" />
+ <path
+ d="M0,-1.33 L-1.33,0.67 L1.33,0.67 z"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt7" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt8"
+ xlink:href="#gpPt7" />
+ <use
+ transform="rotate(180)"
+ stroke="currentColor"
+ id="gpPt9"
+ xlink:href="#gpPt7" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt10"
+ xlink:href="#gpPt9" />
+ <use
+ transform="rotate(45)"
+ stroke="currentColor"
+ id="gpPt11"
+ xlink:href="#gpPt3" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt12"
+ xlink:href="#gpPt11" />
+ <path
+ d="M0,1.330 L1.265,0.411 L0.782,-1.067 L-0.782,-1.076 L-1.265,0.411 z"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt13" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt14"
+ xlink:href="#gpPt13" />
+ <filter
+ width="1"
+ height="1"
+ y="0"
+ x="0"
+ filterUnits="objectBoundingBox"
+ id="textbox">
+ <feFlood
+ id="feFlood4495"
+ result="bgnd"
+ flood-opacity="1"
+ flood-color="white" />
+ <feComposite
+ id="feComposite4497"
+ operator="atop"
+ in2="bgnd"
+ in="SourceGraphic" />
+ </filter>
+ <filter
+ width="1"
+ height="1"
+ y="0"
+ x="0"
+ filterUnits="objectBoundingBox"
+ id="greybox">
+ <feFlood
+ id="feFlood4500"
+ result="grey"
+ flood-opacity="1"
+ flood-color="lightgrey" />
+ <feComposite
+ id="feComposite4502"
+ operator="atop"
+ in2="grey"
+ in="SourceGraphic" />
+ </filter>
+ <circle
+ stroke-width="0.5"
+ r="0.5"
+ id="gpDot-4" />
+ <path
+ d="M-1,0 h2 M0,-1 v2"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt0-5" />
+ <path
+ d="M-1,-1 L1,1 M1,-1 L-1,1"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt1-2" />
+ <path
+ d="M-1,0 L1,0 M0,-1 L0,1 M-1,-1 L1,1 M-1,1 L1,-1"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt2-5" />
+ <rect
+ height="2"
+ width="2"
+ y="-1"
+ x="-1"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt3-9" />
+ <rect
+ height="2"
+ width="2"
+ y="-1"
+ x="-1"
+ fill="currentColor"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt4-3" />
+ <circle
+ r="1"
+ cy="0"
+ cx="0"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt5-8" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt6-8"
+ xlink:href="#gpPt5-8" />
+ <path
+ d="M0,-1.33 L-1.33,0.67 L1.33,0.67 z"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt7-4" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt8-3"
+ xlink:href="#gpPt7-4" />
+ <use
+ transform="rotate(180)"
+ stroke="currentColor"
+ id="gpPt9-5"
+ xlink:href="#gpPt7-4" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt10-0"
+ xlink:href="#gpPt9-5" />
+ <use
+ transform="rotate(45)"
+ stroke="currentColor"
+ id="gpPt11-5"
+ xlink:href="#gpPt3-9" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt12-9"
+ xlink:href="#gpPt11-5" />
+ <path
+ d="M0,1.330 L1.265,0.411 L0.782,-1.067 L-0.782,-1.076 L-1.265,0.411 z"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt13-3" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt14-4"
+ xlink:href="#gpPt13-3" />
+ <filter
+ width="1"
+ height="1"
+ y="0"
+ x="0"
+ filterUnits="objectBoundingBox"
+ id="textbox-6">
+ <feFlood
+ id="feFlood4756"
+ result="bgnd"
+ flood-opacity="1"
+ flood-color="white" />
+ <feComposite
+ id="feComposite4758"
+ operator="atop"
+ in2="bgnd"
+ in="SourceGraphic" />
+ </filter>
+ <filter
+ width="1"
+ height="1"
+ y="0"
+ x="0"
+ filterUnits="objectBoundingBox"
+ id="greybox-2">
+ <feFlood
+ id="feFlood4761"
+ result="grey"
+ flood-opacity="1"
+ flood-color="lightgrey" />
+ <feComposite
+ id="feComposite4763"
+ operator="atop"
+ in2="grey"
+ in="SourceGraphic" />
+ </filter>
+ <circle
+ stroke-width="0.5"
+ r="0.5"
+ id="gpDot-5" />
+ <path
+ d="M-1,0 h2 M0,-1 v2"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt0-3" />
+ <path
+ d="M-1,-1 L1,1 M1,-1 L-1,1"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt1-20" />
+ <path
+ d="M-1,0 L1,0 M0,-1 L0,1 M-1,-1 L1,1 M-1,1 L1,-1"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt2-0" />
+ <rect
+ height="2"
+ width="2"
+ y="-1"
+ x="-1"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt3-0" />
+ <rect
+ height="2"
+ width="2"
+ y="-1"
+ x="-1"
+ fill="currentColor"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt4-9" />
+ <circle
+ r="1"
+ cy="0"
+ cx="0"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt5-80" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt6-9"
+ xlink:href="#gpPt5-80" />
+ <path
+ d="M0,-1.33 L-1.33,0.67 L1.33,0.67 z"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt7-6" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt8-7"
+ xlink:href="#gpPt7-6" />
+ <use
+ transform="rotate(180)"
+ stroke="currentColor"
+ id="gpPt9-2"
+ xlink:href="#gpPt7-6" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt10-1"
+ xlink:href="#gpPt9-2" />
+ <use
+ transform="rotate(45)"
+ stroke="currentColor"
+ id="gpPt11-4"
+ xlink:href="#gpPt3-0" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt12-4"
+ xlink:href="#gpPt11-4" />
+ <path
+ d="M0,1.330 L1.265,0.411 L0.782,-1.067 L-0.782,-1.076 L-1.265,0.411 z"
+ stroke="currentColor"
+ stroke-width="0.222"
+ id="gpPt13-8" />
+ <use
+ stroke="none"
+ fill="currentColor"
+ id="gpPt14-49"
+ xlink:href="#gpPt13-8" />
+ <filter
+ width="1"
+ height="1"
+ y="0"
+ x="0"
+ filterUnits="objectBoundingBox"
+ id="textbox-8">
+ <feFlood
+ id="feFlood5017"
+ result="bgnd"
+ flood-opacity="1"
+ flood-color="white" />
+ <feComposite
+ id="feComposite5019"
+ operator="atop"
+ in2="bgnd"
+ in="SourceGraphic" />
+ </filter>
+ <filter
+ width="1"
+ height="1"
+ y="0"
+ x="0"
+ filterUnits="objectBoundingBox"
+ id="greybox-4">
+ <feFlood
+ id="feFlood5022"
+ result="grey"
+ flood-opacity="1"
+ flood-color="lightgrey" />
+ <feComposite
+ id="feComposite5024"
+ operator="atop"
+ in2="grey"
+ in="SourceGraphic" />
+ </filter>
+ <defs
+ id="defs5027">
+ <circle
+ cy="0"
+ cx="0"
+ id="circle5089"
+ r="0.5"
+ stroke-width="0.5" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path5091"
+ stroke-width="0.222"
+ stroke="currentColor"
+ d="M -1,0 H 1 M 0,-1 v 2" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path5093"
+ stroke-width="0.222"
+ stroke="currentColor"
+ d="M -1,-1 1,1 M 1,-1 -1,1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path5095"
+ stroke-width="0.222"
+ stroke="currentColor"
+ d="M -1,0 H 1 M 0,-1 v 2 m -1,-2 2,2 m -2,0 2,-2" />
+ <rect
+ id="rect5097"
+ stroke-width="0.222"
+ stroke="currentColor"
+ x="-1"
+ y="-1"
+ width="2"
+ height="2" />
+ <rect
+ id="rect5099"
+ stroke-width="0.222"
+ stroke="currentColor"
+ fill="currentColor"
+ x="-1"
+ y="-1"
+ width="2"
+ height="2" />
+ <circle
+ id="circle5101"
+ stroke-width="0.222"
+ stroke="currentColor"
+ cx="0"
+ cy="0"
+ r="1" />
+ <use
+ height="100%"
+ width="100%"
+ y="0"
+ x="0"
+ xlink:href="#gpPt5-80"
+ id="use5103"
+ fill="currentColor"
+ stroke="none" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path5105"
+ stroke-width="0.222"
+ stroke="currentColor"
+ d="m 0,-1.33 -1.33,2 h 2.66 z" />
+ <use
+ height="100%"
+ width="100%"
+ y="0"
+ x="0"
+ xlink:href="#gpPt7-6"
+ id="use5107"
+ fill="currentColor"
+ stroke="none" />
+ <use
+ height="100%"
+ width="100%"
+ y="0"
+ x="0"
+ xlink:href="#gpPt7-6"
+ id="use5109"
+ stroke="currentColor"
+ transform="scale(-1)" />
+ <use
+ height="100%"
+ width="100%"
+ y="0"
+ x="0"
+ xlink:href="#gpPt9-2"
+ id="use5111"
+ fill="currentColor"
+ stroke="none" />
+ <use
+ height="100%"
+ width="100%"
+ y="0"
+ x="0"
+ xlink:href="#gpPt3-0"
+ id="use5113"
+ stroke="currentColor"
+ transform="rotate(45)" />
+ <use
+ height="100%"
+ width="100%"
+ y="0"
+ x="0"
+ xlink:href="#gpPt11-4"
+ id="use5115"
+ fill="currentColor"
+ stroke="none" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path5117"
+ stroke-width="0.222"
+ stroke="currentColor"
+ d="M 0,1.33 1.265,0.411 0.782,-1.067 -0.782,-1.076 -1.265,0.411 Z" />
+ <use
+ height="100%"
+ width="100%"
+ y="0"
+ x="0"
+ xlink:href="#gpPt13-8"
+ id="use5119"
+ fill="currentColor"
+ stroke="none" />
+ <filter
+ id="filter5125"
+ filterUnits="objectBoundingBox"
+ x="0"
+ y="0"
+ height="1"
+ width="1">
+ <feFlood
+ flood-color="white"
+ flood-opacity="1"
+ result="bgnd"
+ id="feFlood5121" />
+ <feComposite
+ in="SourceGraphic"
+ in2="bgnd"
+ operator="atop"
+ id="feComposite5123" />
+ </filter>
+ <filter
+ id="filter5131"
+ filterUnits="objectBoundingBox"
+ x="0"
+ y="0"
+ height="1"
+ width="1">
+ <feFlood
+ flood-color="lightgrey"
+ flood-opacity="1"
+ result="grey"
+ id="feFlood5127" />
+ <feComposite
+ in="SourceGraphic"
+ in2="grey"
+ operator="atop"
+ id="feComposite5129" />
+ </filter>
+ </defs>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="31.047031"
+ inkscape:cx="11.604869"
+ inkscape:cy="12.046547"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1028"
+ inkscape:window-x="0"
+ inkscape:window-y="33"
+ inkscape:window-maximized="1"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-grids="true"
+ inkscape:document-rotation="0"
+ units="px">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="0.5"
+ spacingy="0.5"
+ enabled="true"
+ visible="true"
+ units="px"
+ empspacing="2" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8238">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-393.51587,-663.14807)">
+ <text
+ id="text4357"
+ y="672.25159"
+ x="411.81357"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:condensed;font-size:11.72398472px;line-height:1;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Bold Condensed';text-align:center;text-decoration:none;text-decoration-line:none;text-decoration-color:#000000;text-anchor:middle;shape-padding:0;overflow:visible;vector-effect:none;fill:#000000;stroke-width:0.2;paint-order:fill markers stroke;stroke:# [...]
+ xml:space="preserve"><tspan
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:condensed;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Bold Condensed';stroke-width:0.2;stroke:#000000;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+ y="672.25159"
+ x="411.81357"
+ id="tspan4355"
+ sodipodi:role="line">T</tspan></text>
+ <text
+ xml:space="preserve"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:condensed;font-size:11.72398472px;line-height:1;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Bold Condensed';text-align:center;text-decoration:none;text-decoration-line:none;text-decoration-color:#000000;text-anchor:middle;shape-padding:0;overflow:visible;vector-effect:none;fill:#000000;stroke-width:0.2;paint-order:fill markers stroke;stroke:# [...]
+ x="405.14713"
+ y="672.25159"
+ id="text4361"><tspan
+ sodipodi:role="line"
+ id="tspan4359"
+ x="405.14713"
+ y="672.25159"
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:condensed;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Bold Condensed';stroke-width:0.2;stroke:#000000;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none">F</tspan></text>
+ <text
+ id="text4365"
+ y="672.25159"
+ x="398.79581"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:condensed;font-size:11.72398472px;line-height:1;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Bold Condensed';text-align:center;text-decoration:none;text-decoration-line:none;text-decoration-color:#000000;text-anchor:middle;shape-padding:0;overflow:visible;vector-effect:none;fill:#000000;stroke-width:0.2;paint-order:fill markers stroke;stroke:# [...]
+ xml:space="preserve"><tspan
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:condensed;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow Bold Condensed';stroke-width:0.2;stroke:#000000;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+ y="672.25159"
+ x="398.79581"
+ id="tspan4363"
+ sodipodi:role="line">F</tspan></text>
+ <path
+ style="color:#000000;fill:none;stroke-width:1.39999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none"
+ inkscape:connector-curvature="0"
+ stroke="rgb( 0, 0, 0)"
+ d="m 394.01435,675.74049 0.19193,0.01 0.19194,0.0192 0.19193,0.0288 0.19193,0.0384 0.19194,0.0576 0.19193,0.0576 0.19193,0.0768 0.19194,0.096 0.19193,0.096 0.19193,0.10556 0.19193,0.12476 0.19194,0.13435 0.19193,0.13436 0.19193,0.15354 0.19194,0.15355 0.19193,0.17274 0.19193,0.17274 0.19194,0.18234 0.19193,0.19193 0.19193,0.19193 0.19194,0.20153 0.19193,0.21113 0.19193,0.21112 0.19194,0.22073 0.19193,0.22072 0.19193,0.22072 0.19194,0.23032 0.19193,0.23032 0.19193,0.23032 0.1 [...]
+ id="path5037" />
+ <path
+ inkscape:connector-curvature="0"
+ stroke="rgb(255, 0, 0)"
+ d="m 394.01435,680.13576 0.19193,-0.22073 0.19194,-0.23032 0.19193,-0.23032 0.19193,-0.23032 0.19194,-0.22072 0.19193,-0.22072 0.19193,-0.22073 0.19194,-0.21112 0.19193,-0.21113 0.19193,-0.20153 0.19193,-0.19193 0.19194,-0.19193 0.19193,-0.18234 0.19193,-0.17274 0.19194,-0.17274 0.19193,-0.15355 0.19193,-0.15354 0.19194,-0.13436 0.19193,-0.13435 0.19193,-0.12476 0.19194,-0.10556 0.19193,-0.096 0.19193,-0.096 0.19194,-0.0768 0.19193,-0.0576 0.19193,-0.0576 0.19194,-0.0384 0.1 [...]
+ id="path5044"
+ style="color:#000000;fill:none;stroke:#e91616;stroke-width:1.39999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_fft_2d-24.svg b/pixmaps/src/gwy_fft_2d-24.svg
new file mode 100644
index 0000000..0191d76
--- /dev/null
+++ b/pixmaps/src/gwy_fft_2d-24.svg
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg9687"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_fft_2d-24.svg"
+ inkscape:export-filename="gwy_graph_function-24.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96">
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="30.397128"
+ inkscape:cx="4.1134703"
+ inkscape:cy="23.702158"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-global="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <defs
+ id="defs9689" />
+ <metadata
+ id="metadata9692">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ transform="translate(-306.29821,-648.57531)"
+ id="layer1"
+ inkscape:groupmode="layer"
+ inkscape:label="Layer 1">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#808080;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 318.29821,672.57531 v -12"
+ id="path8537"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ id="path8512"
+ title="sin(x)+sin(1.5*x)"
+ d="m 307.29822,656.63906 c 0.0783,-0.61248 0.15669,-1.22488 0.23504,-1.81643 0.0784,-0.59153 0.15669,-1.16198 0.23504,-1.69226 0.0783,-0.53028 0.1567,-1.02006 0.23504,-1.45345 0.0784,-0.4334 0.15669,-0.80999 0.23504,-1.11827 0.0784,-0.30827 0.15669,-0.54778 0.23504,-0.7122 0.0784,-0.16442 0.15669,-0.25329 0.23504,-0.26593 0.0784,-0.0126 0.15669,0.0514 0.23504,0.18725 0.0783,0.13585 0.15669,0.34386 0.23504,0.61406 0.0784,0.27021 0.15669,0.60291 0.23504,0.98392 0.0783,0.38101 0.1567 [...]
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#db2424;stroke-width:1.89999998;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ inkscape:connector-curvature="0" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path8539"
+ d="m 306.29821,671.57531 h 24"
+ style="fill:none;fill-rule:evenodd;stroke:#808080;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 314.29821,662.57531 v 10"
+ id="path8529"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path8535"
+ d="m 309.29821,662.57531 v 10"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path8531"
+ d="m 322.29821,662.57531 v 10"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 327.29821,662.57531 v 10"
+ id="path8533"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_fft_filter_1d-24.svg b/pixmaps/src/gwy_fft_filter_1d-24.svg
new file mode 100644
index 0000000..34e8694
--- /dev/null
+++ b/pixmaps/src/gwy_fft_filter_1d-24.svg
@@ -0,0 +1,147 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg9687"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_fft_filter_1d-24.svg"
+ inkscape:export-filename="gwy_graph_function-24.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96">
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="3.6356752"
+ inkscape:cx="46.155931"
+ inkscape:cy="29.736001"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-global="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <defs
+ id="defs9689" />
+ <metadata
+ id="metadata9692">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-306.29821,-648.57531)">
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path8537"
+ d="m 318.29821,672.57531 v -12"
+ style="fill:none;fill-rule:evenodd;stroke:#808080;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#808080;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 306.29821,671.57531 h 24"
+ id="path8539"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path8529"
+ d="m 314.29821,662.57531 v 10"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 309.29821,662.57531 v 10"
+ id="path8535"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 322.29821,662.57531 v 10"
+ id="path8531"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path8533"
+ d="m 327.29821,662.57531 v 10"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <g
+ style="stroke:#db2424;stroke-width:1.21908247;stroke-opacity:1"
+ transform="matrix(1.2304337,0,0,1.2304337,-134.67046,19.736605)"
+ id="g8484">
+ <path
+ inkscape:connector-curvature="0"
+ id="path8480"
+ d="m 373.44052,524.5011 4.02276,4.02277"
+ style="fill:none;fill-rule:evenodd;stroke:#db2424;stroke-width:1.82862377;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#db2424;stroke-width:1.82862377;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 373.44052,528.52387 4.02276,-4.02277"
+ id="path8482"
+ inkscape:connector-curvature="0" />
+ </g>
+ <path
+ id="path8520"
+ title="sin(x)"
+ d="m 307.23798,654.5753 c 0.0776,-0.20987 0.15523,-0.41973 0.23285,-0.62549 0.0776,-0.20576 0.15523,-0.40737 0.23284,-0.60095 0.0776,-0.19356 0.15523,-0.37903 0.23285,-0.55281 0.0776,-0.17379 0.15524,-0.33583 0.23285,-0.48301 0.0776,-0.14718 0.15523,-0.27942 0.23285,-0.39423 0.0776,-0.1148 0.15523,-0.21207 0.23284,-0.28999 0.0776,-0.078 0.15524,-0.13638 0.23285,-0.17437 0.0776,-0.038 0.15523,-0.0554 0.23285,-0.052 0.0776,0.004 0.15523,0.0278 0.23284,0.0726 0.0776,0.0448 0.15524,0. [...]
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#db2424;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ inkscape:connector-curvature="0" />
+ <g
+ id="g8432"
+ transform="matrix(1.2304337,0,0,1.2304337,-152.67046,19.736605)"
+ style="stroke:#db2424;stroke-width:1.21908247;stroke-opacity:1">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#db2424;stroke-width:1.82862377;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 373.44052,524.5011 4.02276,4.02277"
+ id="path8428"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8430"
+ d="m 373.44052,528.52387 4.02276,-4.02277"
+ style="fill:none;fill-rule:evenodd;stroke:#db2424;stroke-width:1.82862377;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_fft_filter_2d-24.svg b/pixmaps/src/gwy_fft_filter_2d-24.svg
new file mode 100644
index 0000000..361e833
--- /dev/null
+++ b/pixmaps/src/gwy_fft_filter_2d-24.svg
@@ -0,0 +1,173 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="6.3499999mm"
+ height="6.3499999mm"
+ viewBox="0 0 22.499999 22.499999"
+ id="svg8233"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_fft_filter_2d-24.svg">
+ <defs
+ id="defs8235" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="10.982445"
+ inkscape:cx="19.415703"
+ inkscape:cy="25.643841"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-grids="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8238">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-393.51587,-663.14807)">
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.93750006;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8276"
+ width="21.5625"
+ height="21.5625"
+ x="393.98462"
+ y="663.61682" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.76546752;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.60000002;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8447"
+ width="1.8750006"
+ height="0.93750441"
+ x="403.82837"
+ y="679.08557" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#4696db;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.93750006;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 393.98462,663.61682 h 21.5625 v 10.3125 h -21.5625 z"
+ id="rect8463"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.87499976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.60000002;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8430-3"
+ width="1.8749998"
+ height="1.8749998"
+ x="408.51587"
+ y="676.27307" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.87499988;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.60000002;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8430"
+ width="1.8749999"
+ height="1.8749999"
+ x="399.14087"
+ y="680.96057" />
+ <rect
+ y="-405.23462"
+ x="678.61682"
+ height="0.93750441"
+ width="1.8750006"
+ id="rect8449"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.76546752;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.60000002;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ transform="rotate(90)" />
+ <g
+ transform="matrix(0.62419693,0,0,0.62419693,166.90286,261.76225)"
+ id="g8711">
+ <g
+ id="g8709"
+ transform="translate(33.655007)">
+ <rect
+ y="669.32733"
+ x="336.15097"
+ height="7.4840126"
+ width="7.483994"
+ id="rect8701"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:0.49803922;fill-rule:evenodd;stroke:none;stroke-width:0.93749994;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.93749996, 0.93749996;stroke-dashoffset:0.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <g
+ style="stroke:#db2424;stroke-opacity:1"
+ transform="matrix(1.4062499,0,0,1.4062499,-181.69234,-80.487314)"
+ id="g8707">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#db2424;stroke-width:1.50000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 368.89943,533.85685 4.02276,4.02277"
+ id="path8703"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8705"
+ d="m 368.89943,537.87962 4.02276,-4.02277"
+ style="fill:none;fill-rule:evenodd;stroke:#db2424;stroke-width:1.50000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+ </g>
+ </g>
+ <g
+ id="g8453"
+ transform="matrix(0.62419693,0,0,0.62419693,176.27786,257.07475)">
+ <g
+ transform="translate(33.655007)"
+ id="g8451">
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:0.49803922;fill-rule:evenodd;stroke:none;stroke-width:0.93749994;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.93749996, 0.93749996;stroke-dashoffset:0.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8443"
+ width="7.483994"
+ height="7.4840126"
+ x="336.15097"
+ y="669.32733" />
+ <g
+ id="g8449"
+ transform="matrix(1.4062499,0,0,1.4062499,-181.69234,-80.487314)"
+ style="stroke:#db2424;stroke-opacity:1">
+ <path
+ inkscape:connector-curvature="0"
+ id="path8445"
+ d="m 368.89943,533.85685 4.02276,4.02277"
+ style="fill:none;fill-rule:evenodd;stroke:#db2424;stroke-width:1.50000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#db2424;stroke-width:1.50000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 368.89943,537.87962 4.02276,-4.02277"
+ id="path8447"
+ inkscape:connector-curvature="0" />
+ </g>
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_filter-24.svg b/pixmaps/src/gwy_filter-24.svg
new file mode 100644
index 0000000..ae37f5d
--- /dev/null
+++ b/pixmaps/src/gwy_filter-24.svg
@@ -0,0 +1,895 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8181"
+ version="1.1"
+ inkscape:version="0.92.1 unknown"
+ sodipodi:docname="gwy_filter-24.svg">
+ <defs
+ id="defs8183" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="29.204265"
+ inkscape:cx="12.705143"
+ inkscape:cy="15.825936"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ units="px">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8186">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(3.9111328e-6,-1029.8622)">
+ <g
+ id="g8876"
+ transform="translate(8.0173505e-4,1.4991743)">
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#4696db;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8780"
+ width="11.999124"
+ height="23.998245"
+ x="11.999186"
+ y="1028.3638" />
+ <rect
+ y="1028.3638"
+ x="6.6391345e-05"
+ height="23.99824"
+ width="11.99912"
+ id="rect8230"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.9998982;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="1030.3638"
+ x="1.9999197"
+ height="0.99990022"
+ width="0.99992979"
+ id="rect8762"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8769"
+ width="0.99992979"
+ height="0.99990022"
+ x="3.999773"
+ y="1031.3636" />
+ <rect
+ y="1032.3635"
+ x="2.9998465"
+ height="0.99990022"
+ width="0.99992979"
+ id="rect8771"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8773"
+ width="0.99992979"
+ height="0.99990022"
+ x="5.9996262"
+ y="1032.3635" />
+ <rect
+ y="1034.3635"
+ x="4.9997001"
+ height="0.99990022"
+ width="0.99992979"
+ id="rect8775"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8777"
+ width="0.99992979"
+ height="0.99990022"
+ x="2.9998465"
+ y="1036.3632" />
+ <rect
+ y="1034.3635"
+ x="1.9999197"
+ height="0.99990022"
+ width="0.99992979"
+ id="rect8779"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8781"
+ width="0.99992979"
+ height="0.99990022"
+ x="2.9998465"
+ y="1034.3635" />
+ <rect
+ y="1036.3632"
+ x="5.9996262"
+ height="0.99990022"
+ width="0.99992979"
+ id="rect8783"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8785"
+ width="0.99992979"
+ height="0.99990022"
+ x="1.9999197"
+ y="1038.363" />
+ <rect
+ y="1038.363"
+ x="3.999773"
+ height="0.99990022"
+ width="0.99992979"
+ id="rect8787"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8789"
+ width="0.99992979"
+ height="0.99990022"
+ x="4.9997001"
+ y="1037.3632" />
+ <rect
+ y="1038.363"
+ x="6.9995532"
+ height="0.99990022"
+ width="0.99992979"
+ id="rect8791"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8793"
+ width="0.99992979"
+ height="0.99990022"
+ x="5.9996262"
+ y="1039.363" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8797"
+ width="0.99992979"
+ height="0.99990022"
+ x="2.9998465"
+ y="1039.363" />
+ <rect
+ y="1040.3629"
+ x="0.99999303"
+ height="0.99990022"
+ width="0.99992979"
+ id="rect8799"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8801"
+ width="0.99992979"
+ height="0.99990022"
+ x="2.9998465"
+ y="1040.3629" />
+ <rect
+ y="1040.3629"
+ x="4.9997001"
+ height="0.99990022"
+ width="0.99992979"
+ id="rect8803"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8805"
+ width="0.99992979"
+ height="0.99990022"
+ x="6.9995532"
+ y="1040.3629" />
+ <rect
+ y="1041.3629"
+ x="3.999773"
+ height="0.99990022"
+ width="0.99992979"
+ id="rect8807"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8809"
+ width="0.99992979"
+ height="0.99990022"
+ x="3.999773"
+ y="1042.3628" />
+ <rect
+ y="1042.3628"
+ x="1.9999197"
+ height="0.99990022"
+ width="0.99992979"
+ id="rect8811"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8813"
+ width="0.99992979"
+ height="0.99990022"
+ x="5.9996262"
+ y="1042.3628" />
+ <rect
+ y="1042.3628"
+ x="5.9996262"
+ height="0.99990022"
+ width="0.99992979"
+ id="rect8815"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8817"
+ width="0.99992979"
+ height="0.99990022"
+ x="2.9998465"
+ y="1044.3625" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8817-9"
+ width="0.9999299"
+ height="0.99990028"
+ x="4.9997001"
+ y="1044.3625" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8817-5"
+ width="0.9999299"
+ height="0.99990028"
+ x="4.9997001"
+ y="1045.3625" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8817-1"
+ width="0.9999299"
+ height="0.99990028"
+ x="5.9996262"
+ y="1046.3625" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8817-7"
+ width="0.9999299"
+ height="0.99990028"
+ x="3.999773"
+ y="1047.3625" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8817-4"
+ width="0.9999299"
+ height="0.99990028"
+ x="1.9999197"
+ y="1047.3625" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8817-42"
+ width="0.9999299"
+ height="0.99990028"
+ x="4.9997001"
+ y="1048.3623" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8817-8"
+ width="0.9999299"
+ height="0.99990028"
+ x="2.9998465"
+ y="1049.3623" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8817-0"
+ width="0.9999299"
+ height="0.99990028"
+ x="1.9999197"
+ y="1045.3625" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8817-6"
+ width="0.9999299"
+ height="0.99990028"
+ x="5.9996262"
+ y="1049.3623" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8817-44"
+ width="0.9999299"
+ height="0.99990028"
+ x="5.9996262"
+ y="1050.3622" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8817-99"
+ width="0.9999299"
+ height="0.99990028"
+ x="3.999773"
+ y="1050.3622" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8817-05"
+ width="0.9999299"
+ height="0.99990028"
+ x="4.9997001"
+ y="1050.3622" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8817-43"
+ width="0.9999299"
+ height="0.99990028"
+ x="0.99999303"
+ y="1049.3623" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8817-51"
+ width="0.9999299"
+ height="0.99990028"
+ x="0.99999303"
+ y="1048.3623" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8817-431"
+ width="0.9999299"
+ height="0.99990028"
+ x="6.9995532"
+ y="1034.3635" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8817-2"
+ width="0.9999299"
+ height="0.99990028"
+ x="3.999773"
+ y="1035.3634" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8817-89"
+ width="0.9999299"
+ height="0.99990028"
+ x="4.9997001"
+ y="1035.3634" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8817-28"
+ width="0.9999299"
+ height="0.99990028"
+ x="5.9996262"
+ y="1035.3634" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8817-33"
+ width="0.9999299"
+ height="0.99990028"
+ x="3.999773"
+ y="1029.3638" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8817-90"
+ width="0.9999299"
+ height="0.99990028"
+ x="5.9996262"
+ y="1030.3638" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8817-79"
+ width="0.9999299"
+ height="0.99990028"
+ x="6.9995532"
+ y="1029.3638" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8817-3"
+ width="0.9999299"
+ height="0.99990028"
+ x="7.9994798"
+ y="1029.3638" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8817-52"
+ width="0.9999299"
+ height="0.99990028"
+ x="7.9994798"
+ y="1031.3636" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8817-96"
+ width="0.9999299"
+ height="0.99990028"
+ x="8.9994059"
+ y="1031.3636" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8817-41"
+ width="0.9999299"
+ height="0.99990028"
+ x="8.9994059"
+ y="1032.3635" />
+ <rect
+ transform="scale(1,-1)"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8817-04"
+ width="0.99992979"
+ height="0.99990022"
+ x="8.9993906"
+ y="-1035.3634" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8817-91"
+ width="0.9999299"
+ height="0.99990028"
+ x="8.9994059"
+ y="1039.363" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8817-54"
+ width="0.9999299"
+ height="0.99990028"
+ x="8.9994059"
+ y="1041.3629" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8817-92"
+ width="0.9999299"
+ height="0.99990028"
+ x="8.9994059"
+ y="1044.3625" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8817-57"
+ width="0.9999299"
+ height="0.99990028"
+ x="8.9994059"
+ y="1046.3625" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8817-45"
+ width="0.9999299"
+ height="0.99990028"
+ x="8.9994059"
+ y="1045.3625" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8817-570"
+ width="0.9999299"
+ height="0.99990028"
+ x="6.9995532"
+ y="1048.3623" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8817-997"
+ width="0.9999299"
+ height="0.99990028"
+ x="7.9994798"
+ y="1047.3625" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8817-53"
+ width="0.9999299"
+ height="0.99990028"
+ x="7.9994798"
+ y="1044.3625" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8817-01"
+ width="0.9999299"
+ height="0.99990028"
+ x="7.9994798"
+ y="1042.3628" />
+ <rect
+ transform="scale(1,-1)"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8817-04-0"
+ width="0.99992979"
+ height="0.99990022"
+ x="9.9993181"
+ y="-1031.3636" />
+ <rect
+ transform="scale(1,-1)"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8817-04-6"
+ width="0.99992979"
+ height="0.99990022"
+ x="9.9993181"
+ y="-1033.3634" />
+ <rect
+ transform="scale(1,-1)"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8817-04-64"
+ width="0.99992979"
+ height="0.99990022"
+ x="9.9993181"
+ y="-1035.3634" />
+ <rect
+ transform="scale(1,-1)"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8817-04-8"
+ width="0.99992979"
+ height="0.99990022"
+ x="9.9993181"
+ y="-1037.3632" />
+ <rect
+ transform="scale(1,-1)"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8817-04-2"
+ width="0.99992979"
+ height="0.99990022"
+ x="9.9993181"
+ y="-1038.363" />
+ <rect
+ transform="scale(1,-1)"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8817-04-01"
+ width="0.99992979"
+ height="0.99990022"
+ x="9.9993181"
+ y="-1041.3629" />
+ <rect
+ transform="scale(1,-1)"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8817-04-7"
+ width="0.99992979"
+ height="0.99990022"
+ x="9.9993181"
+ y="-1045.3625" />
+ <rect
+ transform="scale(1,-1)"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8817-04-5"
+ width="0.99992979"
+ height="0.99990022"
+ x="9.9993181"
+ y="-1044.3625" />
+ <rect
+ transform="scale(1,-1)"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8817-04-4"
+ width="0.99992979"
+ height="0.99990022"
+ x="9.9993181"
+ y="-1047.3625" />
+ <rect
+ transform="scale(1,-1)"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8817-04-60"
+ width="0.99992979"
+ height="0.99990022"
+ x="9.9993181"
+ y="-1049.3623" />
+ <rect
+ transform="scale(1,-1)"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8817-04-9"
+ width="0.99992979"
+ height="0.99990022"
+ x="8.9993906"
+ y="-1050.3622" />
+ <rect
+ transform="scale(1,-1)"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8817-04-79"
+ width="0.99992979"
+ height="0.99990022"
+ x="8.9993906"
+ y="-1051.3622" />
+ <rect
+ y="-1031.3636"
+ x="10.999245"
+ height="0.99990022"
+ width="0.99992979"
+ id="rect9247"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ transform="scale(1,-1)" />
+ <rect
+ y="1033.3634"
+ x="10.99926"
+ height="0.99990034"
+ width="0.99992996"
+ id="rect9245"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="1038.363"
+ x="10.99926"
+ height="0.99990034"
+ width="0.99992996"
+ id="rect9245-2"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="1044.3625"
+ x="10.99926"
+ height="0.99990034"
+ width="0.99992996"
+ id="rect9245-27"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="1047.3625"
+ x="10.99926"
+ height="0.99990034"
+ width="0.99992996"
+ id="rect9245-0"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="1049.3623"
+ x="10.99926"
+ height="0.99990034"
+ width="0.99992996"
+ id="rect9245-3"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="1036.3632"
+ x="0.99999303"
+ height="0.99990022"
+ width="0.99992979"
+ id="rect8779-3"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="1032.3635"
+ x="0.99999303"
+ height="0.99990022"
+ width="0.99992979"
+ id="rect8779-6"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="1029.3638"
+ x="6.6391345e-05"
+ height="0.99990022"
+ width="0.99992979"
+ id="rect8779-7"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="1034.3635"
+ x="6.6391345e-05"
+ height="0.99990022"
+ width="0.99992979"
+ id="rect8779-5"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="1039.363"
+ x="6.6391345e-05"
+ height="0.99990022"
+ width="0.99992979"
+ id="rect8779-35"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="1042.3628"
+ x="6.6391345e-05"
+ height="0.99990022"
+ width="0.99992979"
+ id="rect8779-62"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="1045.3625"
+ x="0.99999303"
+ height="0.99990022"
+ width="0.99992979"
+ id="rect8779-9"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="1047.3625"
+ x="6.6391345e-05"
+ height="0.99990022"
+ width="0.99992979"
+ id="rect8779-1"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="1051.3622"
+ x="1.9999197"
+ height="0.99990022"
+ width="0.99992979"
+ id="rect8779-2"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="1051.3622"
+ x="5.9996262"
+ height="0.99990022"
+ width="0.99992979"
+ id="rect8779-70"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="1051.3622"
+ x="9.9993334"
+ height="0.99990022"
+ width="0.99992979"
+ id="rect8779-93"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="1051.3622"
+ x="6.9995532"
+ height="0.99990022"
+ width="0.99992979"
+ id="rect8779-60"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="1028.3638"
+ x="1.9999197"
+ height="0.99990022"
+ width="0.99992979"
+ id="rect8779-626"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="1028.3638"
+ x="6.9995532"
+ height="0.99990022"
+ width="0.99992979"
+ id="rect8779-18"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="1028.3638"
+ x="8.9994059"
+ height="0.99990022"
+ width="0.99992979"
+ id="rect8779-79"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="1028.3638"
+ x="9.9993334"
+ height="0.99990022"
+ width="0.99992979"
+ id="rect8779-23"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="1028.3638"
+ x="0.99999303"
+ height="0.99990022"
+ width="0.99992979"
+ id="rect8779-75"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="1031.3636"
+ x="1.9999197"
+ height="0.99990022"
+ width="0.99992979"
+ id="rect8779-28"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8817-54-3"
+ width="0.9999299"
+ height="0.99990028"
+ x="6.9995532"
+ y="1041.3629" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8817-54-6"
+ width="0.9999299"
+ height="0.99990028"
+ x="8.9994059"
+ y="1038.363" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8817-54-7"
+ width="0.9999299"
+ height="0.99990028"
+ x="10.99926"
+ y="1041.3629" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8817-54-5"
+ width="0.9999299"
+ height="0.99990028"
+ x="7.9994798"
+ y="1038.363" />
+ <rect
+ transform="scale(1,-1)"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8817-04-5-3"
+ width="0.99992979"
+ height="0.99990022"
+ x="9.9993181"
+ y="-1043.3628" />
+ <rect
+ transform="scale(1,-1)"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8817-04-5-7"
+ width="0.99992979"
+ height="0.99990022"
+ x="5.9996109"
+ y="-1042.3628" />
+ <rect
+ transform="scale(1,-1)"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8817-04-5-35"
+ width="0.99992979"
+ height="0.99990022"
+ x="7.9994645"
+ y="-1038.363" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8817-83"
+ width="0.9999299"
+ height="0.99990028"
+ x="10.99926"
+ y="1037.3632" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8817-83-6"
+ width="0.9999299"
+ height="0.99990028"
+ x="10.99926"
+ y="1042.3628" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8817-24"
+ width="0.9999299"
+ height="0.99990028"
+ x="7.9994798"
+ y="1035.3634" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8817-24-2"
+ width="0.9999299"
+ height="0.99990028"
+ x="8.9994059"
+ y="1036.3632" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8817-24-9"
+ width="0.9999299"
+ height="0.99990028"
+ x="6.9995532"
+ y="1043.3628" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8817-24-1"
+ width="0.9999299"
+ height="0.99990028"
+ x="1.9999197"
+ y="1033.3634" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8817-24-27"
+ width="0.9999299"
+ height="0.99990028"
+ x="3.999773"
+ y="1033.3634" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.9999491;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8817-24-93"
+ width="0.9999299"
+ height="0.99990028"
+ x="6.9995532"
+ y="1033.3634" />
+ <rect
+ y="1028.863"
+ x="0.4992058"
+ height="22.999977"
+ width="22.999977"
+ id="rect8191"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.99999994;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <path
+ sodipodi:nodetypes="cccccccc"
+ inkscape:connector-curvature="0"
+ id="path8188"
+ d="m 5.9996304,1038.3632 h 7.9994136 v -3.9997 l 5.99956,5.9995 -5.99956,5.9995 v -3.9998 H 5.9996304 v -3.9995"
+ style="fill:#ffffff;fill-rule:evenodd;stroke:none;stroke-width:0.99997455px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ </g>
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_find_peaks-24.svg b/pixmaps/src/gwy_find_peaks-24.svg
new file mode 100644
index 0000000..bdb2d71
--- /dev/null
+++ b/pixmaps/src/gwy_find_peaks-24.svg
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg9687"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_find_peaks-24.svg"
+ inkscape:export-filename="gwy_graph_function-24.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96">
+ <defs
+ id="defs9689" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="29.184747"
+ inkscape:cx="-28.950429"
+ inkscape:cy="11.205544"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-global="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata9692">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-306.29821,-648.57531)">
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#4696db;stroke-width:1.00000012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8419"
+ width="23"
+ height="23"
+ x="306.79822"
+ y="649.07532" />
+ <g
+ id="g8458"
+ transform="rotate(-90,318.79821,660.07531)">
+ <path
+ inkscape:connector-curvature="0"
+ id="path8446"
+ d="m 307.29821,668.07531 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,653.07531 h 22"
+ id="path8448"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,663.07531 h 22"
+ id="path8450"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8452"
+ d="m 307.29821,658.07531 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ </g>
+ <path
+ inkscape:connector-curvature="0"
+ id="path8444"
+ d="m 307.29821,668.07531 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,653.07531 h 22"
+ id="path8438"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,663.07531 h 22"
+ id="path8442"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8440"
+ d="m 307.29821,658.07531 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 307.41696,670.57531 c 4.88125,0 4.88125,-12 4.88125,-12 0,0 1,12 3.28056,11.93457 1.71944,0.0654 2.71944,-5.93457 2.71944,-5.93457 0,0 1,6 4.04392,6 1.95608,0 1.95608,-11 1.95608,-11 0,0 0,11 5.04737,10.92517"
+ id="path8254-7"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccscc" />
+ <g
+ id="g8558"
+ transform="translate(1,1)">
+ <path
+ inkscape:connector-curvature="0"
+ id="path8451"
+ d="m 311.29821,655.57531 -3,-3 h 6 z"
+ style="fill:#db2424;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8453"
+ d="m 310.29821,652.57531 v -3 h 2 v 3 z"
+ style="fill:#db2424;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ </g>
+ <g
+ id="g8564"
+ transform="translate(7,7)">
+ <path
+ style="fill:#db2424;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 311.29821,655.57531 -3,-3 h 6 z"
+ id="path8560"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#db2424;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 310.29821,652.57531 v -3 h 2 v 3 z"
+ id="path8562"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ transform="translate(13,2)"
+ id="g8570">
+ <path
+ inkscape:connector-curvature="0"
+ id="path8566"
+ d="m 311.29821,655.57531 -3,-3 h 6 z"
+ style="fill:#db2424;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8568"
+ d="m 310.29821,652.57531 v -3 h 2 v 3 z"
+ style="fill:#db2424;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ </g>
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_fit_shape-24.svg b/pixmaps/src/gwy_fit_shape-24.svg
new file mode 100644
index 0000000..3bccefb
--- /dev/null
+++ b/pixmaps/src/gwy_fit_shape-24.svg
@@ -0,0 +1,205 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92+devel unknown"
+ sodipodi:docname="gwy_fit_shape-24.svg"
+ inkscape:export-filename="/home/lila/Documents/Gwyddion/gwy_poly_distort-24.png"
+ inkscape:export-xdpi="2.9028571"
+ inkscape:export-ydpi="2.9028571">
+ <defs
+ id="defs4">
+ <linearGradient
+ id="linearGradient8308-6"
+ inkscape:collect="always">
+ <stop
+ id="stop8310-7"
+ offset="0"
+ style="stop-color:#0c1e2d;stop-opacity:1" />
+ <stop
+ style="stop-color:#4696db;stop-opacity:1"
+ offset="0.5"
+ id="stop8351-5" />
+ <stop
+ id="stop8312-3"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8308-6"
+ id="linearGradient5224-9"
+ x1="12"
+ y1="1041.8622"
+ x2="2.6962378"
+ y2="1040.166"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.3196771,0,0,1.3196771,-3.8361262,-1362.9219)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8308-6"
+ id="linearGradient6040"
+ x1="13"
+ y1="1042.8622"
+ x2="13"
+ y2="1051.3622"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8308-6"
+ id="linearGradient6052"
+ gradientUnits="userSpaceOnUse"
+ x1="13"
+ y1="1042.8622"
+ x2="13"
+ y2="1051.3622"
+ gradientTransform="rotate(-90,13,1042.8622)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8308-6"
+ id="linearGradient6056"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="rotate(-180,13,1042.8622)"
+ x1="13"
+ y1="1042.8622"
+ x2="13"
+ y2="1051.3622" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8308-6"
+ id="linearGradient6060"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="rotate(90,13,1042.8622)"
+ x1="13"
+ y1="1042.8622"
+ x2="13"
+ y2="1051.3622" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.625"
+ inkscape:cx="5.5410286"
+ inkscape:cy="8.5732675"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer2"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1149"
+ inkscape:window-x="0"
+ inkscape:window-y="32"
+ inkscape:window-maximized="1"
+ units="px"
+ inkscape:snap-smooth-nodes="false"
+ inkscape:snap-intersection-paths="false"
+ inkscape:snap-grids="true"
+ inkscape:object-nodes="true"
+ inkscape:document-rotation="0"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-midpoints="true"
+ inkscape:snap-global="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="0.5"
+ spacingy="0.5"
+ enabled="true"
+ visible="true"
+ units="px"
+ empspacing="2" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="Layer"
+ style="display:inline"
+ transform="translate(0,-1029.8622)">
+ <path
+ inkscape:connector-curvature="0"
+ id="rect4497"
+ d="M 0.46874517,1030.331 23.5,1030.3622 v 23 l -23.03125483,0 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#e6f1fa;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.00135899;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ sodipodi:nodetypes="ccccc" />
+ <g
+ id="g6087"
+ transform="rotate(10.481171,13.073064,1038.3378)">
+ <path
+ inkscape:connector-curvature="0"
+ id="path5412"
+ d="m 5,1050.8622 8,-8 8,8 z"
+ style="fill:url(#linearGradient6040);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:url(#linearGradient6052);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 21,1050.8622 -8,-8 8,-8 z"
+ id="path6050"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path6054"
+ d="m 21,1034.8622 -8,8 -8,-8 z"
+ style="fill:url(#linearGradient6056);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:url(#linearGradient6060);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 5,1034.8622 8,8 -8,8 z"
+ id="path6058"
+ inkscape:connector-curvature="0" />
+ <rect
+ y="1034.8622"
+ x="5"
+ height="16"
+ width="16"
+ id="rect5410"
+ style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#db2424;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.20000005;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path6062"
+ d="m 5,1034.8622 16,16"
+ style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#db2424;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:3.1500001;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path6064"
+ d="m 5,1050.8622 16,-16"
+ style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#db2424;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:3.1500001;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none" />
+ </g>
+ <rect
+ style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00100005;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none"
+ id="rect5344"
+ width="23"
+ height="23.000017"
+ x="0.5"
+ y="1030.3622" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_fix_zero-24.svg b/pixmaps/src/gwy_fix_zero-24.svg
new file mode 100644
index 0000000..4caa28d
--- /dev/null
+++ b/pixmaps/src/gwy_fix_zero-24.svg
@@ -0,0 +1,163 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8833"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_fix_zero-24.svg">
+ <defs
+ id="defs8835">
+ <linearGradient
+ gradientTransform="translate(-11.142957,824.89612)"
+ xlink:href="#linearGradient4140"
+ id="linearGradient4171"
+ gradientUnits="userSpaceOnUse"
+ x1="207.50029"
+ y1="247.92804"
+ x2="272.91217"
+ y2="361.22473" />
+ <linearGradient
+ id="linearGradient4140">
+ <stop
+ style="stop-color:#d7e3f4;stop-opacity:1;"
+ offset="0"
+ id="stop4142" />
+ <stop
+ style="stop-color:#f1f5fb;stop-opacity:1"
+ offset="1"
+ id="stop4144" />
+ </linearGradient>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="2.0508967"
+ inkscape:cx="134.69103"
+ inkscape:cy="33.464265"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8838">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-199.64375,-490.06708)">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.50000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 200.64378,494.5671 2,3 c 0,0 0,2.5 1,2.5 h 2 l 1,-2.5 c 0,0 0,-3 1,-4 1,-1 4,-2 4,-2 l 2,4 h 2"
+ id="path8803"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccsccsccc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1, 1;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 215.64378,510.5671 h -15"
+ id="path8805"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 204.64378,502.06708 v 5"
+ id="path8807"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 200.64375,505.06708 4,4 4,-4 z"
+ id="path8226"
+ inkscape:connector-curvature="0" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#ffbb00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 217.14391,489.56708 h 6 v 23 h -6 z"
+ id="rect12874"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#82d636;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 217.64374,498.56719 h 3"
+ id="path12876"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#82d636;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 217.64374,495.56719 h 2.00001"
+ id="path12880"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path12882"
+ d="m 217.64374,492.56719 h 3"
+ style="fill:#82d636;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:#82d636;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 217.64374,507.56719 h 2.00001"
+ id="path12884"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:#82d636;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 217.64374,501.56719 h 2.00001"
+ id="path12890"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path12892"
+ d="m 217.64374,504.56719 h 3"
+ style="fill:#82d636;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:#82d636;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 217.64374,510.56719 h 3"
+ id="path8091"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#db2424;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 200.64375,500.56708 h 15"
+ id="path4818"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_flip_horizontally-24.svg b/pixmaps/src/gwy_flip_horizontally-24.svg
new file mode 100644
index 0000000..12b662b
--- /dev/null
+++ b/pixmaps/src/gwy_flip_horizontally-24.svg
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8093"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="gwy_flip_horizontally.svg"
+ inkscape:export-filename="gwy_flip_horizontally-24.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs8095">
+ <filter
+ inkscape:collect="always"
+ style="color-interpolation-filters:sRGB"
+ id="filter8458"
+ x="-0.12856513"
+ width="1.2571303"
+ y="-0.11250482"
+ height="1.2250096">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.16275744"
+ id="feGaussianBlur8460" />
+ </filter>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="2.9424621"
+ inkscape:cx="10.376708"
+ inkscape:cy="-14.352711"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-global="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8098">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-244.77811,-595.10722)">
+ <path
+ style="fill:#7db846;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 251.27811,602.60722 -4.75586,4.5 4.75586,4 0,-1.5 10.98242,0 0,1.5 4.75586,-4 -4.75586,-4.5 0,2 -10.96484,0 z"
+ id="path8069"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccccccc" />
+ <path
+ style="opacity:0.75;fill:#ffffff;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter8458)"
+ d="m 247.77811,607.10722 2.04551,-1.97639 0.89043,-1.02933 c 0,0 0.20217,1.02827 -0.81737,2.15403 -1.01955,1.12575 -1.29524,1.31798 -1.29524,1.31798 z"
+ id="path8400"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccscc" />
+ <path
+ sodipodi:nodetypes="ccccsc"
+ inkscape:connector-curvature="0"
+ id="path8462"
+ d="m 248.25595,597.40694 7.92078,7.64259 c 0.78644,-0.69253 0.27926,-0.20275 0.86026,-0.71903 0,0 0.41294,0.95999 -0.6066,2.08575 -0.31728,0.41341 -7.72954,-7.84089 -8.35149,-8.62932 -0.34388,-0.43593 -0.0819,-0.56315 0.17705,-0.37999 z"
+ style="opacity:0.75;fill:#ffffff;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter8458)"
+ transform="matrix(0.72160439,-0.69230564,0.69230564,0.72160439,-340.9462,345.93597)" />
+ <path
+ transform="matrix(0.72160439,-0.69230564,0.69230564,0.72160439,-352.64478,346.09382)"
+ style="opacity:0.26000001;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter8458)"
+ d="m 253.47872,607.61144 1.81198,-1.81975 0.89043,-1.02933 c 0,0 0.0967,0.57698 -0.92284,1.70274 -1.01955,1.12575 -1.31704,1.26648 -1.31704,1.26648 z"
+ id="path8466"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccscc" />
+ <path
+ sodipodi:nodetypes="cccscc"
+ inkscape:connector-curvature="0"
+ id="path8468"
+ d="m 253.47872,607.61144 1.81198,-1.81975 0.89043,-1.02933 c 0,0 0.0967,0.57698 -0.92284,1.70274 -1.01955,1.12575 -1.31704,1.26648 -1.31704,1.26648 z"
+ style="opacity:0.26000001;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter8458)"
+ transform="matrix(0.99413845,0.10811449,-0.10811449,0.99413845,76.644805,-22.049751)" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_flip_vertically-24.svg b/pixmaps/src/gwy_flip_vertically-24.svg
new file mode 100644
index 0000000..59dcdf4
--- /dev/null
+++ b/pixmaps/src/gwy_flip_vertically-24.svg
@@ -0,0 +1,122 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8093"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="gwy_flip_vertically.svg"
+ inkscape:export-filename="gwy_flip_vertically-24.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs8095">
+ <filter
+ inkscape:collect="always"
+ style="color-interpolation-filters:sRGB"
+ id="filter8458"
+ x="-0.12856513"
+ width="1.2571303"
+ y="-0.11250482"
+ height="1.2250096">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.16275744"
+ id="feGaussianBlur8460" />
+ </filter>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="6.8758481"
+ inkscape:cx="40.440276"
+ inkscape:cy="4.2224812"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-global="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8098">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-244.77811,-595.10722)">
+ <path
+ style="fill:#7db846;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 261.27782,601.61601 -4.5,-4.75586 -4,4.75586 1.5,0 0,10.98242 -1.5,0 4.00029,4.75586 4.49971,-4.75586 -2,0 0,-10.96484 z"
+ id="path8069"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccccccc" />
+ <path
+ style="opacity:0.75;fill:#ffffff;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter8458)"
+ d="m 247.77811,607.10722 2.04551,-1.97639 0.82671,-0.67886 c 0,0 0.26589,0.6778 -0.75365,1.80356 -1.01955,1.12575 -1.29524,1.31798 -1.29524,1.31798 z"
+ id="path8400"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccscc"
+ transform="matrix(0,1,1,0,-350.22145,350.3379)" />
+ <path
+ sodipodi:nodetypes="ccccsc"
+ inkscape:connector-curvature="0"
+ id="path8462"
+ d="m 248.61675,597.75309 7.55998,7.29644 c 0.78644,-0.69253 0.27926,-0.20275 0.86026,-0.71903 -0.13014,0.0245 0.32045,0.66081 -0.1642,1.68599 -0.31728,0.41341 -8.15784,-6.4268 -8.77979,-7.21523 -0.34388,-0.43593 0.2648,-1.23133 0.52375,-1.04817 z"
+ style="opacity:0.75;fill:#ffffff;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter8458)"
+ transform="matrix(-0.69230564,0.72160439,0.72160439,0.69230564,-3.9809235,9.3917012)" />
+ <path
+ transform="matrix(0.69230564,0.72160439,-0.72160439,0.69230564,517.85974,-1.3068788)"
+ style="opacity:0.26000001;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter8458)"
+ d="m 253.11792,607.26529 1.81198,-1.81975 0.89043,-1.02933 c 0,0 0.0967,0.57698 -0.92284,1.70274 -1.01955,1.12575 -1.31704,1.26648 -1.31704,1.26648 z"
+ id="path8466"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccscc" />
+ <path
+ sodipodi:nodetypes="cccscc"
+ inkscape:connector-curvature="0"
+ id="path8468"
+ d="m 253.47872,607.61144 1.81198,-1.81975 0.89043,-1.02933 c 0,0 0.0967,0.57698 -0.92284,1.70274 -1.01955,1.12575 -1.31704,1.26648 -1.31704,1.26648 z"
+ style="opacity:0.26000001;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter8458)"
+ transform="matrix(0.10811449,0.99413845,0.99413845,-0.10811449,-372.13411,426.79066)" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_fractal-24.svg b/pixmaps/src/gwy_fractal-24.svg
new file mode 100644
index 0000000..781e915
--- /dev/null
+++ b/pixmaps/src/gwy_fractal-24.svg
@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8798"
+ version="1.1"
+ inkscape:version="0.92+devel unknown"
+ sodipodi:docname="gwy_fractal_measure-24.svg">
+ <defs
+ id="defs8800" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="30.228461"
+ inkscape:cx="12.720968"
+ inkscape:cy="10.017425"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1028"
+ inkscape:window-x="0"
+ inkscape:window-y="33"
+ inkscape:window-maximized="1"
+ inkscape:document-rotation="0"
+ inkscape:snap-nodes="true"
+ inkscape:snap-bbox="true"
+ inkscape:snap-global="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8803">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-18.260046,-413.54694)">
+ <path
+ style="fill:#000000;stroke:#000000;stroke-width:0.29388463;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 34.979779,436.19982 c -0.274935,-0.11051 -0.433852,-0.33636 -0.433852,-0.61656 0,-0.15387 0.03091,-0.24406 0.147179,-0.42925 0.09086,-0.14472 0.09231,-0.15061 0.09003,-0.36372 -0.0025,-0.24994 0.02089,-0.34016 0.128469,-0.49185 l 0.0775,-0.10927 -0.18044,-0.009 c -0.212196,-0.0107 -0.325895,-0.0588 -0.461474,-0.19475 -0.05198,-0.0522 -0.121064,-0.10877 -0.153519,-0.12582 -0.115784,-0.0608 -0.301948,-0.21913 -0.358627,-0.30495 -0.08834,-0.13377 -0.118074,-0.25114 -0.1075 [...]
+ id="path6419"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#7db846;fill-opacity:1;stroke-width:0.02351093"
+ d="m 35.1409,435.60336 c -0.0087,-0.0229 9.72e-4,-0.0504 0.02425,-0.0672 0.02149,-0.0158 0.03909,-0.0463 0.03909,-0.0679 0,-0.0246 0.04402,-0.0589 0.117522,-0.0915 0.105319,-0.0466 0.117528,-0.0599 0.117556,-0.12655 1.5e-5,-0.041 0.0059,-0.0898 0.01311,-0.1086 0.0083,-0.0215 -0.0054,-0.0389 -0.03731,-0.0473 -0.06727,-0.0176 -0.05203,-0.0963 0.02067,-0.10658 0.04621,-0.006 0.05234,-0.0173 0.03934,-0.0691 -0.0084,-0.0337 -0.03584,-0.09 -0.06085,-0.12516 -0.02499,-0.0351 -0.045 [...]
+ id="path6421"
+ inkscape:connector-curvature="0" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#ffbb00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect12874-3"
+ width="5.9999995"
+ height="22"
+ x="3.7601953"
+ y="413.04694" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 4.2600362,421.04705 h 3"
+ id="path12876-6"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 4.2600362,418.04705 h 2.00001"
+ id="path12880-7"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path12882-5"
+ d="m 4.2600362,415.04705 h 3"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 4.2600362,430.04705 h 2.00001"
+ id="path12884-3"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 4.2600362,424.04705 h 2.00001"
+ id="path12890-5"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path12892-6"
+ d="m 4.2600362,427.04705 h 3"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 4.2600362,433.04705 h 3"
+ id="path8091-2"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_fractal_correction-24.svg b/pixmaps/src/gwy_fractal_correction-24.svg
new file mode 100644
index 0000000..70a76e6
--- /dev/null
+++ b/pixmaps/src/gwy_fractal_correction-24.svg
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg9100"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_fractal_correction-24.svg">
+ <defs
+ id="defs9102" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="16.775663"
+ inkscape:cx="-21.984552"
+ inkscape:cy="7.9284822"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata9105">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-442.76529,-683.29364)">
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#d0e2f2;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect11370-6"
+ width="23.000002"
+ height="23.000002"
+ x="443.26529"
+ y="683.79364" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#daa39c;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:3.00000018, 3.00000017999999979;stroke-dashoffset:1.50000012;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate;font-variant-east_asian:normal;vector-effect:none"
+ d="M 2.5 2.5 L 2.5 13.5 L 10.5 13.5 L 10.5 21.5 L 21.5 21.5 L 21.5 10.5 L 13.5 10.5 L 13.5 2.5 L 2.5 2.5 z "
+ transform="translate(442.76529,683.29364)"
+ id="rect11972" />
+ <g
+ id="g8437"
+ transform="matrix(1.5,0,0,1.5,-104.3997,-90.510326)"
+ style="stroke:#db2424;stroke-opacity:1">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#db2424;stroke-width:1.50000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 373.44052,524.5011 4.02276,4.02277"
+ id="path8433"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8435"
+ d="m 373.44052,528.52387 4.02276,-4.02277"
+ style="fill:none;fill-rule:evenodd;stroke:#db2424;stroke-width:1.50000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+ <g
+ style="stroke:#db2424;stroke-opacity:1"
+ transform="matrix(1.5,0,0,1.5,-112.3997,-98.510326)"
+ id="g8083">
+ <path
+ inkscape:connector-curvature="0"
+ id="path8085"
+ d="m 373.44052,524.5011 4.02276,4.02277"
+ style="fill:none;fill-rule:evenodd;stroke:#db2424;stroke-width:1.50000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#db2424;stroke-width:1.50000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 373.44052,528.52387 4.02276,-4.02277"
+ id="path8087"
+ inkscape:connector-curvature="0" />
+ </g>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 457.17859,702.02627 c -0.0183,-0.0772 -0.0329,-0.13919 -0.0547,-0.21875 -0.39553,-1.44599 -1.06043,-1.33656 -1.14034,-2.82804 -0.42549,1.48234 -0.7642,1.56111 -1.3019,2.93937 m 2.4969,0.10742 c 0.69617,2.93038 1.44529,3.5918 1.44529,3.5918 0,0 0.63269,-1.52319 1.73873,-2.28516 0.50287,-0.34643 1.06639,-0.91115 1.74806,0.32685 1.10603,1.43926 0.55328,1.86276 1.10629,1.43945 0.55302,-0.42331 0.70979,-1.83273 0.70979,-1.83273 l 0.0699,-0.95001 c 0,0 0.895,-3.0166 2.02959,-0.5926 [...]
+ id="path8538"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="csccccscsccccssscsc" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_fractal_measure-24.svg b/pixmaps/src/gwy_fractal_measure-24.svg
new file mode 100644
index 0000000..65521b7
--- /dev/null
+++ b/pixmaps/src/gwy_fractal_measure-24.svg
@@ -0,0 +1,136 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8798"
+ version="1.1"
+ inkscape:version="0.92+devel unknown"
+ sodipodi:docname="gwy_fractal_measure-24.svg">
+ <defs
+ id="defs8800" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="30.228461"
+ inkscape:cx="17.906784"
+ inkscape:cy="11.340681"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1028"
+ inkscape:window-x="0"
+ inkscape:window-y="33"
+ inkscape:window-maximized="1"
+ inkscape:document-rotation="0"
+ inkscape:snap-nodes="true"
+ inkscape:snap-bbox="true"
+ inkscape:snap-global="true"
+ inkscape:bbox-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="0.5"
+ spacingy="0.5"
+ enabled="true"
+ visible="true"
+ units="px"
+ empspacing="2" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8803">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-18.260046,-413.54694)">
+ <g
+ id="g7460"
+ transform="matrix(0.86347341,0,0,0.86347341,5.7445822,55.445971)">
+ <path
+ inkscape:connector-curvature="0"
+ id="path6419"
+ d="m 34.979779,436.19982 c -0.274935,-0.11051 -0.433852,-0.33636 -0.433852,-0.61656 0,-0.15387 0.03091,-0.24406 0.147179,-0.42925 0.09086,-0.14472 0.09231,-0.15061 0.09003,-0.36372 -0.0025,-0.24994 0.02089,-0.34016 0.128469,-0.49185 l 0.0775,-0.10927 -0.18044,-0.009 c -0.212196,-0.0107 -0.325895,-0.0588 -0.461474,-0.19475 -0.05198,-0.0522 -0.121064,-0.10877 -0.153519,-0.12582 -0.115784,-0.0608 -0.301948,-0.21913 -0.358627,-0.30495 -0.08834,-0.13377 -0.118074,-0.25114 -0. [...]
+ style="fill:#000000;stroke:#000000;stroke-width:0.29388463;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path6421"
+ d="m 35.1409,435.60336 c -0.0087,-0.0229 9.72e-4,-0.0504 0.02425,-0.0672 0.02149,-0.0158 0.03909,-0.0463 0.03909,-0.0679 0,-0.0246 0.04402,-0.0589 0.117522,-0.0915 0.105319,-0.0466 0.117528,-0.0599 0.117556,-0.12655 1.5e-5,-0.041 0.0059,-0.0898 0.01311,-0.1086 0.0083,-0.0215 -0.0054,-0.0389 -0.03731,-0.0473 -0.06727,-0.0176 -0.05203,-0.0963 0.02067,-0.10658 0.04621,-0.006 0.05234,-0.0173 0.03934,-0.0691 -0.0084,-0.0337 -0.03584,-0.09 -0.06085,-0.12516 -0.02499,-0.0351 -0 [...]
+ style="fill:#7db846;fill-opacity:1;stroke-width:0.02351093" />
+ </g>
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#ffbb00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect12874-3"
+ width="4.9999962"
+ height="22"
+ x="432.04694"
+ y="-40.760048"
+ transform="rotate(90)" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 32.760046,432.54694 v 3"
+ id="path12876-6"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 35.760046,432.54693 v 2.00001"
+ id="path12880-7"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path12882-5"
+ d="m 38.760046,432.54694 v 3"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 23.760046,432.54693 v 2.00001"
+ id="path12884-3"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 29.760046,432.54693 v 2.00001"
+ id="path12890-5"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path12892-6"
+ d="m 26.760046,432.54694 v 3"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 20.760046,432.54694 v 3"
+ id="path8091-2"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_gl_material-16.svg b/pixmaps/src/gwy_gl_material-16.svg
new file mode 100644
index 0000000..e5aba0a
--- /dev/null
+++ b/pixmaps/src/gwy_gl_material-16.svg
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg8691"
+ version="1.1"
+ inkscape:version="0.92+devel unknown"
+ sodipodi:docname="gwy_gl_material-16.svg"
+ inkscape:export-filename="gwy_palettes-16.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="21.764465"
+ inkscape:cx="2.7330245"
+ inkscape:cy="5.1532646"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1379"
+ inkscape:window-height="1023"
+ inkscape:window-x="531"
+ inkscape:window-y="33"
+ inkscape:window-maximized="0"
+ units="px"
+ inkscape:document-rotation="0">
+ <inkscape:grid
+ visible="true"
+ enabled="true"
+ spacingy="1.0"
+ spacingx="1.0"
+ snapvisiblegridlinesonly="false"
+ dotted="false"
+ originy="0"
+ originx="0"
+ id="grid1px"
+ type="xygrid" />
+ </sodipodi:namedview>
+ <defs
+ id="defs8693">
+ <linearGradient
+ gradientTransform="translate(-224.02837,-448.99442)"
+ gradientUnits="userSpaceOnUse"
+ y2="452.99442"
+ x2="247.02837"
+ y1="452.99442"
+ x1="224.02837"
+ id="linearGradient8128-3"
+ xlink:href="#linearGradient8122-6"
+ inkscape:collect="always" />
+ <linearGradient
+ id="linearGradient8122-6"
+ inkscape:collect="always">
+ <stop
+ id="stop8124-7"
+ offset="0"
+ style="stop-color:#000000;stop-opacity:1;" />
+ <stop
+ id="stop8126-5"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:1" />
+ </linearGradient>
+ </defs>
+ <metadata
+ id="metadata8696">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ transform="translate(-224.02837,-456.99442)"
+ id="layer1"
+ inkscape:groupmode="layer"
+ inkscape:label="Layer 1">
+ <image
+ image-rendering="optimizeSpeed"
+ id="image144"
+ xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACvklEQVQ4y3WTPYgkRRzFf9Vd3b09
+3bszO3Pr7nkniicrB2KmnJGCgZkfnB+psZnBgYFccImBXHKioGKgiGCsJsohxiYaKQYnJwpy7vRM
+d091VXVXVxkseyx+/LMH7/d4wf8J/ude/vjdB0QUPdh3uuw36papm59vXnvb/dMnTotXPn0/ysri
+skzTN2MpHw3eMxiDaRrUcvXn5s7Rh2q5fOv7Dz7RJ0x8Cs63drY/L+e7V6dnFvvbsyl5USClBCB4
+X/pxfHJQ+qXpfee+vvPTL0uA6CQg2co+K3dnL8z39rjn4ICz955j/2Cf+WJOUZZk2RZJlpEUk8Mo
+jm/e/8Tj+3cDXvzoxqtpnj8/KQqm0x0Wu3MWO3Nm2zPKomQrzYjjGAEIIZBZdj6E8M7pBm/EcYSM
+ItJYkooYiSAGxOhhHAnO4QeHd47gPRAuF3uLh+TTV68cejc+PPYDzlqs6uhkSh9HaKXo6hrdbrBK
+0WuDMxbX93jvo+D9c3Lsh0ecsdiNQqU1CRGD6oiEwCpFXVU0R0u6dYNtW3ql6FWH6zTjMFyUtmkT
+U0yIpUSMHqc1TZoiQqDXBlU3tNUKVVXousE0LbZpMe0G78ZUdtXqtzhNIASc0eg6Q8YxwQecsRil
+6JoWXdd0qxq9WqNXa2zTAPwh1V/LH4CNd2PZT3LiJEEIQfCe0fb0WmM3CtO2mHVDV1WoZYWzPcB3
+cfXrbZfvzs4H7x9z/cCgNf1GYZoW3TToukava8xqfQwfVfTtBuAW8LoAWBxe2Esnkx/z3dlZmaUI
+ER03cAPOWHrVYdsWUzcM2kAIAXhm6PQ3d7dQnFlcSib5V0mez6NEQgiMg8NZy6ANzhi8cwABuDJ0
++vq/xpSWxUXgvUjKp46fBYIfCT6cWH4HXhs6/cV/rhEgmeQCuAQ8C1wAcuA28C3w5dBpe9r/Nxya
+icVQecKcAAAAAElFTkSuQmCC
+"
+ preserveAspectRatio="none"
+ height="16"
+ width="16"
+ x="224.02837"
+ y="456.99442" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_gradient_horizontal-24.svg b/pixmaps/src/gwy_gradient_horizontal-24.svg
new file mode 100644
index 0000000..f9b3322
--- /dev/null
+++ b/pixmaps/src/gwy_gradient_horizontal-24.svg
@@ -0,0 +1,116 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="6.3499999mm"
+ height="6.3499999mm"
+ viewBox="0 0 22.499999 22.499999"
+ id="svg8233"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_gradient_horizontal-24.svg">
+ <defs
+ id="defs8235">
+ <linearGradient
+ id="linearGradient8308-6"
+ inkscape:collect="always">
+ <stop
+ style="stop-color:#c3ddf3;stop-opacity:1"
+ offset="0"
+ id="stop8312-3" />
+ <stop
+ id="stop8351-5"
+ offset="0.5"
+ style="stop-color:#4696db;stop-opacity:1" />
+ <stop
+ style="stop-color:#0c1e2d;stop-opacity:1"
+ offset="1"
+ id="stop8310-7" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8308-6"
+ id="linearGradient8428"
+ x1="410.3909"
+ y1="674.39813"
+ x2="399.1409"
+ y2="674.39813"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.6666668,0,0,1.6666668,-269.84402,-449.59887)" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="6.0134032"
+ inkscape:cx="-27.491756"
+ inkscape:cy="-7.3792275"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8238">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-393.51587,-663.14807)">
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#4696db;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.93750006;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8276"
+ width="21.5625"
+ height="21.5625"
+ x="393.98462"
+ y="663.61682" />
+ <circle
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:url(#linearGradient8428);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.93749982;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:0.93749991, 0.93749991000000021;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="path8420"
+ cx="404.76587"
+ cy="674.39807"
+ r="9.375" />
+ <circle
+ r="3.7499998"
+ cy="674.39807"
+ cx="404.76587"
+ id="circle8432"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#4696db;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.93749994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:0.93749991, 0.93749991;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_gradient_vertical-24.svg b/pixmaps/src/gwy_gradient_vertical-24.svg
new file mode 100644
index 0000000..21b947a
--- /dev/null
+++ b/pixmaps/src/gwy_gradient_vertical-24.svg
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="6.3499999mm"
+ height="6.3499999mm"
+ viewBox="0 0 22.499999 22.499999"
+ id="svg8233"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_gradient_vertical-24.svg">
+ <defs
+ id="defs8235">
+ <linearGradient
+ id="linearGradient8308-6"
+ inkscape:collect="always">
+ <stop
+ style="stop-color:#c3ddf3;stop-opacity:1"
+ offset="0"
+ id="stop8312-3" />
+ <stop
+ id="stop8351-5"
+ offset="0.5"
+ style="stop-color:#4696db;stop-opacity:1" />
+ <stop
+ style="stop-color:#0c1e2d;stop-opacity:1"
+ offset="1"
+ id="stop8310-7" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8308-6"
+ id="linearGradient8428"
+ x1="410.3909"
+ y1="674.39813"
+ x2="399.1409"
+ y2="674.39813"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.6666668,0,0,1.6666668,-269.84402,-449.59887)" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="5.009928"
+ inkscape:cx="28.772913"
+ inkscape:cy="3.116967"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8238">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-393.51587,-663.14807)">
+ <g
+ id="g8426"
+ transform="rotate(90,404.76587,674.39807)">
+ <rect
+ y="663.61682"
+ x="393.98462"
+ height="21.5625"
+ width="21.5625"
+ id="rect8276"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#4696db;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.93750006;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <circle
+ r="9.375"
+ cy="674.39807"
+ cx="404.76587"
+ id="path8420"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:url(#linearGradient8428);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.93749982;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:0.93749991, 0.93749991;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <circle
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#4696db;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.93749994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:0.93749991, 0.93749991;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="circle8432"
+ cx="404.76587"
+ cy="674.39807"
+ r="3.7499998" />
+ </g>
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_grain_correlation-24.svg b/pixmaps/src/gwy_grain_correlation-24.svg
new file mode 100644
index 0000000..28883e2
--- /dev/null
+++ b/pixmaps/src/gwy_grain_correlation-24.svg
@@ -0,0 +1,219 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8456"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_grain_correlation-24.svg"
+ inkscape:export-filename="gwy_grains_remove.svg.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs8458">
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8413"
+ id="radialGradient9160"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.70751116,0,0,0.70751116,-147.80052,139.40973)"
+ cx="366.46545"
+ cy="526.93652"
+ fx="366.46545"
+ fy="526.93652"
+ r="4.2401776" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient8413">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop8415" />
+ <stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop8417" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8413"
+ id="radialGradient9156"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.70751116,0,0,0.70751116,-154.80052,131.4097)"
+ cx="366.46545"
+ cy="526.93652"
+ fx="366.46545"
+ fy="526.93652"
+ r="4.2401776" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8413"
+ id="radialGradient8427"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.85161289,0,0,0.85161289,-212.60885,62.477179)"
+ cx="366.46545"
+ cy="526.93652"
+ fx="366.46545"
+ fy="526.93652"
+ r="4.2401776" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8413"
+ id="radialGradient8423"
+ gradientUnits="userSpaceOnUse"
+ cx="366.46545"
+ cy="526.93652"
+ fx="366.46545"
+ fy="526.93652"
+ r="4.2401776"
+ gradientTransform="matrix(0.79354837,0,0,0.79354837,-179.3302,86.073509)" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8413"
+ id="radialGradient8419"
+ cx="366.46545"
+ cy="526.93652"
+ fx="366.46545"
+ fy="526.93652"
+ r="4.2401776"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-263.9876,-28.713451)" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="15.297933"
+ inkscape:cx="-14.251904"
+ inkscape:cy="21.764567"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8461">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-93.477875,-492.22305)">
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#d0e2f2;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect11370"
+ width="23.000002"
+ height="23.000002"
+ x="93.977875"
+ y="492.72305" />
+ <circle
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:url(#radialGradient8419);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.83099997;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:2.49299991, 2.49299991;stroke-dashoffset:1.32959986;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="path8411"
+ cx="102.47787"
+ cy="498.22305"
+ r="4.2401776" />
+ <circle
+ r="3.3647861"
+ cy="504.22305"
+ cx="111.47787"
+ id="circle8421"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:url(#radialGradient8423);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.83099997;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:2.49299991, 2.49299991;stroke-dashoffset:1.32959986;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <circle
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:url(#radialGradient8427);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.83099997;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:2.49299991, 2.49299991;stroke-dashoffset:1.32959986;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="circle8425"
+ cx="99.477875"
+ cy="511.22305"
+ r="3.61099" />
+ <circle
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:url(#radialGradient9156);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.83099997;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:2.49299991, 2.49299991;stroke-dashoffset:1.32959986;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="circle9154"
+ cx="104.47787"
+ cy="504.22305"
+ r="2.9999731" />
+ <circle
+ r="2.9999731"
+ cy="512.22302"
+ cx="111.47787"
+ id="circle9158"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:url(#radialGradient9160);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.83099997;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:2.49299991, 2.49299991;stroke-dashoffset:1.32959986;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#ffbb00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect12632"
+ width="3"
+ height="2.9999461"
+ x="95.977875"
+ y="510.72305" />
+ <rect
+ y="505.72305"
+ x="99.977867"
+ height="2.9999461"
+ width="3"
+ id="rect8458"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#ffbb00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#ffbb00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8460"
+ width="3"
+ height="2.9999461"
+ x="103.97787"
+ y="500.72311" />
+ <rect
+ y="493.72305"
+ x="111.97787"
+ height="2.9999461"
+ width="3"
+ id="rect8462"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#ffbb00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#ffbb00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8464"
+ width="3"
+ height="2.9999461"
+ x="107.97787"
+ y="497.72311" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#db2424;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+ d="m 98.477875,515.22305 17.999995,-19"
+ id="path8577"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_grain_exscribed_circle-24.svg b/pixmaps/src/gwy_grain_exscribed_circle-24.svg
new file mode 100644
index 0000000..ee0ee10
--- /dev/null
+++ b/pixmaps/src/gwy_grain_exscribed_circle-24.svg
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8424"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_grain_exscribed_circle-24.svg">
+ <defs
+ id="defs8426" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="10.232297"
+ inkscape:cx="-3.4205242"
+ inkscape:cy="16.313673"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8429">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-128.33165,-604.34668)">
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#c1665a;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:3, 3;stroke-dashoffset:0.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 132.83165,609.84668 h 15 v 13 h -15 z"
+ id="rect11972"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <circle
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.99999988;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="path8416"
+ cx="140.33165"
+ cy="616.34668"
+ r="11" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_grain_inscribed_circle-24.svg b/pixmaps/src/gwy_grain_inscribed_circle-24.svg
new file mode 100644
index 0000000..9d17fd5
--- /dev/null
+++ b/pixmaps/src/gwy_grain_inscribed_circle-24.svg
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8424"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_grain_inscribed_circle-24.svg">
+ <defs
+ id="defs8426" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="4.287914"
+ inkscape:cx="4.0362713"
+ inkscape:cy="-2.183264"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8429">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-128.33165,-604.34668)">
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#c1665a;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:2.99999993, 2.99999993;stroke-dashoffset:0.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 128.83165,604.84668 h 22.99999 v 23 h -22.99999 z"
+ id="rect11972"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <circle
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.99999988;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="path8416"
+ cx="140.33165"
+ cy="616.34668"
+ r="10" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_grains-24.svg b/pixmaps/src/gwy_grains-24.svg
new file mode 100644
index 0000000..a882e0d
--- /dev/null
+++ b/pixmaps/src/gwy_grains-24.svg
@@ -0,0 +1,163 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8798"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="gwy_grains.svg">
+ <defs
+ id="defs8800">
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8413"
+ id="radialGradient9160"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.70751116,0,0,0.70751116,-223.01835,60.733619)"
+ cx="366.46545"
+ cy="526.93652"
+ fx="366.46545"
+ fy="526.93652"
+ r="4.2401776" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient8413">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop8415" />
+ <stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop8417" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8413"
+ id="radialGradient9156"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.70751116,0,0,0.70751116,-230.01835,52.733589)"
+ cx="366.46545"
+ cy="526.93652"
+ fx="366.46545"
+ fy="526.93652"
+ r="4.2401776" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8413"
+ id="radialGradient8427"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.85161289,0,0,0.85161289,-287.82667,-16.198931)"
+ cx="366.46545"
+ cy="526.93652"
+ fx="366.46545"
+ fy="526.93652"
+ r="4.2401776" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8413"
+ id="radialGradient8423"
+ gradientUnits="userSpaceOnUse"
+ cx="366.46545"
+ cy="526.93652"
+ fx="366.46545"
+ fy="526.93652"
+ r="4.2401776"
+ gradientTransform="matrix(0.79354837,0,0,0.79354837,-254.54802,7.3973986)" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8413"
+ id="radialGradient8419"
+ cx="366.46545"
+ cy="526.93652"
+ fx="366.46545"
+ fy="526.93652"
+ r="4.2401776"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-339.20542,-107.38956)" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="17.863816"
+ inkscape:cx="13.485138"
+ inkscape:cy="20.439639"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata8803">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-18.260046,-413.54694)">
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#d0e2f2;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect11370"
+ width="23.000002"
+ height="23.000002"
+ x="18.760046"
+ y="414.04694" />
+ <circle
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:url(#radialGradient8419);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.83099997;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:2.49299991, 2.49299991;stroke-dashoffset:1.32959986;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="path8411"
+ cx="27.260046"
+ cy="419.54694"
+ r="4.2401776" />
+ <circle
+ r="3.3647861"
+ cy="425.54694"
+ cx="36.260048"
+ id="circle8421"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:url(#radialGradient8423);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.83099997;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:2.49299991, 2.49299991;stroke-dashoffset:1.32959986;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <circle
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:url(#radialGradient8427);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.83099997;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:2.49299991, 2.49299991;stroke-dashoffset:1.32959986;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="circle8425"
+ cx="24.260046"
+ cy="432.54694"
+ r="3.61099" />
+ <circle
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:url(#radialGradient9156);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.83099997;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:2.49299991, 2.49299991;stroke-dashoffset:1.32959986;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="circle9154"
+ cx="29.260046"
+ cy="425.54694"
+ r="2.9999731" />
+ <circle
+ r="2.9999731"
+ cy="433.54694"
+ cx="36.260048"
+ id="circle9158"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:url(#radialGradient9160);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.83099997;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:2.49299991, 2.49299991;stroke-dashoffset:1.32959986;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_grains_edge-24.svg b/pixmaps/src/gwy_grains_edge-24.svg
new file mode 100644
index 0000000..c47100d
--- /dev/null
+++ b/pixmaps/src/gwy_grains_edge-24.svg
@@ -0,0 +1,204 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8798"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_grains_edge-24.svg">
+ <defs
+ id="defs8800">
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8413"
+ id="radialGradient9160"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.70751116,0,0,0.70751116,-223.01835,60.733619)"
+ cx="366.46545"
+ cy="526.93652"
+ fx="366.46545"
+ fy="526.93652"
+ r="4.2401776" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient8413">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop8415" />
+ <stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop8417" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8413"
+ id="radialGradient9156"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.70751116,0,0,0.70751116,-233.01835,53.233589)"
+ cx="366.46545"
+ cy="526.93652"
+ fx="366.46545"
+ fy="526.93652"
+ r="4.2401776" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8413"
+ id="radialGradient8427"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.85161289,0,0,0.85161289,-287.82667,-16.198931)"
+ cx="366.46545"
+ cy="526.93652"
+ fx="366.46545"
+ fy="526.93652"
+ r="4.2401776" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8413"
+ id="radialGradient8423"
+ gradientUnits="userSpaceOnUse"
+ cx="366.46545"
+ cy="526.93652"
+ fx="366.46545"
+ fy="526.93652"
+ r="4.2401776"
+ gradientTransform="matrix(0.79354837,0,0,0.79354837,-254.54802,7.3973986)" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8413"
+ id="radialGradient8419"
+ cx="366.46545"
+ cy="526.93652"
+ fx="366.46545"
+ fy="526.93652"
+ r="4.2401776"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-342.20542,-107.38956)" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="4.6430859"
+ inkscape:cx="-167.03701"
+ inkscape:cy="61.221174"
+ inkscape:document-units="px"
+ inkscape:current-layer="svg8798"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8803">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-18.260046,-413.54694)">
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#d0e2f2;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect11370"
+ width="23.000002"
+ height="23.000002"
+ x="18.760046"
+ y="414.04694" />
+ <circle
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:url(#radialGradient8419);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.83099997;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:2.49299991, 2.49299991;stroke-dashoffset:1.32959986;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="path8411"
+ cx="24.260046"
+ cy="419.54694"
+ r="4.2401776" />
+ <circle
+ r="3.3647861"
+ cy="425.54694"
+ cx="36.260048"
+ id="circle8421"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:url(#radialGradient8423);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.83099997;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:2.49299991, 2.49299991;stroke-dashoffset:1.32959986;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <circle
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:url(#radialGradient8427);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.83099997;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:2.49299991, 2.49299991;stroke-dashoffset:1.32959986;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="circle8425"
+ cx="24.260046"
+ cy="432.54694"
+ r="3.61099" />
+ <circle
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:url(#radialGradient9156);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.83099997;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:2.49299991, 2.49299991;stroke-dashoffset:1.32959986;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="circle9154"
+ cx="26.260046"
+ cy="426.04694"
+ r="2.9999731" />
+ <circle
+ r="2.9999731"
+ cy="433.54694"
+ cx="36.260048"
+ id="circle9158"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:url(#radialGradient9160);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.83099997;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:2.49299991, 2.49299991;stroke-dashoffset:1.32959986;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ </g>
+ <g
+ transform="matrix(0.4893616,0,0,0.47826111,-84.587175,-225.64567)"
+ id="layer1-6"
+ inkscape:label="Layer 1"
+ style="stroke-width:2.06705737">
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="rect11370-7"
+ d="m 195.33035,473.89525 22.46648,-0.0119 v 25.09091 l -22.46648,0.0119 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#4696db;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.06705737;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#d0e2f2;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.06705737;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 207.59123,473.89526 h 12.26087 v 25.09089 h -12.26087 z"
+ id="rect8153"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="rect4972"
+ d="m 201.46079,478.07707 h 12.26087 v 16.72726 h -12.26087 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#db2424;stroke-width:4.13411474;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4.13411467;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+ d="m 193.28688,473.89526 v 27.1818 h 26.56522"
+ id="path8599"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_grains_edge_remove-24.svg b/pixmaps/src/gwy_grains_edge_remove-24.svg
new file mode 100644
index 0000000..19445a7
--- /dev/null
+++ b/pixmaps/src/gwy_grains_edge_remove-24.svg
@@ -0,0 +1,296 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8456"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_grains_edge_remove-24.svg"
+ inkscape:export-filename="gwy_grains_remove.svg.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs8458">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient8413">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop8415" />
+ <stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop8417" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8413"
+ id="radialGradient4766"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-254.12726,-31.177879)"
+ cx="366.46545"
+ cy="526.93652"
+ fx="366.46545"
+ fy="526.93652"
+ r="4.2401776" />
+ <radialGradient
+ r="4.2401776"
+ fy="526.93652"
+ fx="366.46545"
+ cy="526.93652"
+ cx="366.46545"
+ gradientTransform="matrix(0.70751116,0,0,0.70751116,-147.45521,139.48342)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient9160"
+ xlink:href="#linearGradient8413"
+ inkscape:collect="always" />
+ <radialGradient
+ r="4.2401776"
+ fy="526.93652"
+ fx="366.46545"
+ cy="526.93652"
+ cx="366.46545"
+ gradientTransform="matrix(0.70751116,0,0,0.70751116,-154.45521,131.48339)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient9156"
+ xlink:href="#linearGradient8413"
+ inkscape:collect="always" />
+ <radialGradient
+ r="4.2401776"
+ fy="526.93652"
+ fx="366.46545"
+ cy="526.93652"
+ cx="366.46545"
+ gradientTransform="matrix(0.85161289,0,0,0.85161289,-212.26353,62.550867)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient8427-7"
+ xlink:href="#linearGradient8413"
+ inkscape:collect="always" />
+ <radialGradient
+ gradientTransform="matrix(0.79354837,0,0,0.79354837,-178.98488,86.147197)"
+ r="4.2401776"
+ fy="526.93652"
+ fx="366.46545"
+ cy="526.93652"
+ cx="366.46545"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient8423-5"
+ xlink:href="#linearGradient8413"
+ inkscape:collect="always" />
+ <radialGradient
+ gradientTransform="translate(-263.64228,-28.639762)"
+ gradientUnits="userSpaceOnUse"
+ r="4.2401776"
+ fy="526.93652"
+ fx="366.46545"
+ cy="526.93652"
+ cx="366.46545"
+ id="radialGradient8419-3"
+ xlink:href="#linearGradient8413"
+ inkscape:collect="always" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8413"
+ id="radialGradient4815"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-270.14432,-23.694959)"
+ cx="366.46545"
+ cy="526.93652"
+ fx="366.46545"
+ fy="526.93652"
+ r="4.2401776" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8413"
+ id="radialGradient4825"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-259.64432,-13.694959)"
+ cx="366.46545"
+ cy="526.93652"
+ fx="366.46545"
+ fy="526.93652"
+ r="4.2401776" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="13.022743"
+ inkscape:cx="-12.787313"
+ inkscape:cy="18.679375"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8461">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-93.477875,-492.22305)">
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#d0e2f2;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect11370"
+ width="23.000002"
+ height="23.000002"
+ x="93.977875"
+ y="492.72305" />
+ <circle
+ r="4.2401776"
+ cy="495.75861"
+ cx="112.3382"
+ id="circle4764"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:url(#radialGradient4766);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.83099997;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:2.49299991, 2.49299991;stroke-dashoffset:1.32959986;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:0.49803922;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8488"
+ width="8"
+ height="8"
+ x="108.47787"
+ y="492.22305" />
+ <g
+ id="g8441"
+ transform="matrix(1.5,0,0,1.5,-443.88835,-307.5793)"
+ style="stroke:#db2424;stroke-opacity:1">
+ <path
+ inkscape:connector-curvature="0"
+ id="path8429"
+ d="m 368.89943,533.85685 4.02276,4.02277"
+ style="fill:none;fill-rule:evenodd;stroke:#db2424;stroke-width:1.50000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#db2424;stroke-width:1.50000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 368.89943,537.87962 4.02276,-4.02277"
+ id="path8431"
+ inkscape:connector-curvature="0" />
+ </g>
+ <circle
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:url(#radialGradient8419-3);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.83099997;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:2.49299991, 2.49299991;stroke-dashoffset:1.32959986;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="path8411-9"
+ cx="102.82319"
+ cy="498.29672"
+ r="4.2401776" />
+ <circle
+ r="3.3647861"
+ cy="504.29672"
+ cx="111.82319"
+ id="circle8421-1"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:url(#radialGradient8423-5);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.83099997;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:2.49299991, 2.49299991;stroke-dashoffset:1.32959986;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <circle
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:url(#radialGradient8427-7);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.83099997;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:2.49299991, 2.49299991;stroke-dashoffset:1.32959986;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="circle8425-2"
+ cx="99.823189"
+ cy="511.29675"
+ r="3.61099" />
+ <circle
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:url(#radialGradient9156);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.83099997;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:2.49299991, 2.49299991;stroke-dashoffset:1.32959986;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="circle9154"
+ cx="104.82319"
+ cy="504.29672"
+ r="2.9999731" />
+ <circle
+ r="2.9999731"
+ cy="512.29675"
+ cx="111.82319"
+ id="circle9158"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:url(#radialGradient9160);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.83099997;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:2.49299991, 2.49299991;stroke-dashoffset:1.32959986;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <circle
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:url(#radialGradient4815);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.83099997;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:2.49299991, 2.49299991;stroke-dashoffset:1.32959986;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="circle4807"
+ cx="96.321144"
+ cy="503.24152"
+ r="4.2401776" />
+ <rect
+ y="499.22305"
+ x="92.477875"
+ height="8"
+ width="8"
+ id="rect8490"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:0.49803922;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <g
+ style="stroke:#db2424;stroke-opacity:1"
+ transform="matrix(1.5,0,0,1.5,-459.90541,-300.56222)"
+ id="g4813">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#db2424;stroke-width:1.50000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 368.89943,533.85685 4.02276,4.02277"
+ id="path4809"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4811"
+ d="m 368.89943,537.87962 4.02276,-4.02277"
+ style="fill:none;fill-rule:evenodd;stroke:#db2424;stroke-width:1.50000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+ <circle
+ r="4.2401776"
+ cy="513.24152"
+ cx="106.82114"
+ id="circle4817"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:url(#radialGradient4825);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.83099997;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:2.49299991, 2.49299991;stroke-dashoffset:1.32959986;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:0.49803922;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8492"
+ width="8"
+ height="8"
+ x="102.47787"
+ y="509.22305" />
+ <g
+ id="g4823"
+ transform="matrix(1.5,0,0,1.5,-449.90541,-290.59638)"
+ style="stroke:#db2424;stroke-opacity:1">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4819"
+ d="m 368.89943,533.85685 4.02276,4.02277"
+ style="fill:none;fill-rule:evenodd;stroke:#db2424;stroke-width:1.50000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#db2424;stroke-width:1.50000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 368.89943,537.87962 4.02276,-4.02277"
+ id="path4821"
+ inkscape:connector-curvature="0" />
+ </g>
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_grains_graph-24.svg b/pixmaps/src/gwy_grains_graph-24.svg
new file mode 100644
index 0000000..8601610
--- /dev/null
+++ b/pixmaps/src/gwy_grains_graph-24.svg
@@ -0,0 +1,188 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8823"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_grains_graph-24.svg">
+ <defs
+ id="defs8825">
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8413"
+ id="radialGradient9160"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.70751116,0,0,0.70751116,164.08108,153.30522)"
+ cx="366.46545"
+ cy="526.93652"
+ fx="366.46545"
+ fy="526.93652"
+ r="4.2401776" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient8413">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop8415" />
+ <stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop8417" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8413"
+ id="radialGradient9156"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.70751116,0,0,0.70751116,155.58111,160.80519)"
+ cx="366.46545"
+ cy="526.93652"
+ fx="366.46545"
+ fy="526.93652"
+ r="4.2401776" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8413"
+ id="radialGradient8427"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.85161289,0,0,0.85161289,97.772786,91.872666)"
+ cx="366.46545"
+ cy="526.93652"
+ fx="366.46545"
+ fy="526.93652"
+ r="4.2401776" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8413"
+ id="radialGradient8423"
+ gradientUnits="userSpaceOnUse"
+ cx="366.46545"
+ cy="526.93652"
+ fx="366.46545"
+ fy="526.93652"
+ r="4.2401776"
+ gradientTransform="matrix(0.79354837,0,0,0.79354837,131.05144,115.469)" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8413"
+ id="radialGradient8419"
+ cx="366.46545"
+ cy="526.93652"
+ fx="366.46545"
+ fy="526.93652"
+ r="4.2401776"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(46.394036,0.68203603)" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="29.412493"
+ inkscape:cx="11.894518"
+ inkscape:cy="9.8005953"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata8828">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-403.8595,-521.61853)">
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#d0e2f2;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect11370"
+ width="23.000002"
+ height="23.000002"
+ x="404.3595"
+ y="522.11853" />
+ <circle
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:url(#radialGradient8419);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.83099997;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:2.49299991, 2.49299991;stroke-dashoffset:1.32959986;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="path8411"
+ cx="412.8595"
+ cy="527.61853"
+ r="4.2401776" />
+ <circle
+ r="3.3647861"
+ cy="533.61853"
+ cx="421.8595"
+ id="circle8421"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:url(#radialGradient8423);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.83099997;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:2.49299991, 2.49299991;stroke-dashoffset:1.32959986;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <circle
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:url(#radialGradient8427);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.83099997;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:2.49299991, 2.49299991;stroke-dashoffset:1.32959986;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="circle8425"
+ cx="409.8595"
+ cy="540.61853"
+ r="3.61099" />
+ <circle
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:url(#radialGradient9156);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.83099997;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:2.49299991, 2.49299991;stroke-dashoffset:1.32959986;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="circle9154"
+ cx="414.8595"
+ cy="533.61853"
+ r="2.9999731" />
+ <circle
+ r="2.9999731"
+ cy="526.11853"
+ cx="423.35947"
+ id="circle9158"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:url(#radialGradient9160);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.83099997;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:2.49299991, 2.49299991;stroke-dashoffset:1.32959986;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="rect12632"
+ d="m 404.3595,534.11853 3,0 0,11 -3,0 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#ffbb00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="rect12642"
+ d="m 409.3595,530.11853 3,0 0,15 -3,0 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#ffbb00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="rect12644"
+ d="m 414.3595,526.11853 3,0 0,19 -3,0 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#ffbb00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="rect12648"
+ d="m 419.3595,534.11853 3,0 0,11 -3,0 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#ffbb00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="rect12650"
+ d="m 424.3595,540.11853 3,0 0,5 -3,0 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#ffbb00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_grains_measure-24.svg b/pixmaps/src/gwy_grains_measure-24.svg
new file mode 100644
index 0000000..f72934e
--- /dev/null
+++ b/pixmaps/src/gwy_grains_measure-24.svg
@@ -0,0 +1,122 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8813"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_grains_measure-24.svg">
+ <defs
+ id="defs8815" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="3.255446"
+ inkscape:cx="-16.128106"
+ inkscape:cy="-22.006109"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-global="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8818">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1028.3622)">
+ <path
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#c1665a;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:3, 3;stroke-dashoffset:6.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;mark [...]
+ d="m 1.6710318,1042.1392 c 0.15311,-2.5362 0.65088,-5.0307 2.20709,-6.8693 9.2188052,-14.4916 15.1218782,15.0923 4.7472198,13.4009 -4.1714398,0.4287 -7.2702198,-2.5418 -6.9543098,-6.5316 z"
+ id="path9326"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#ffbb00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect12874"
+ width="5.9999995"
+ height="22"
+ x="16.500149"
+ y="1028.8622" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 16.99999,1036.8623 3,0"
+ id="path12876"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 16.99999,1033.8623 2.00001,0"
+ id="path12880"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path12882"
+ d="m 16.99999,1030.8623 3,0"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 16.99999,1045.8623 2.00001,0"
+ id="path12884"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 16.99999,1039.8623 2.00001,0"
+ id="path12890"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path12892"
+ d="m 16.99999,1042.8623 3,0"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 16.99999,1048.8623 3,0"
+ id="path8091"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_grains_remove-24.svg b/pixmaps/src/gwy_grains_remove-24.svg
new file mode 100644
index 0000000..948dc1a
--- /dev/null
+++ b/pixmaps/src/gwy_grains_remove-24.svg
@@ -0,0 +1,180 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8456"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_grains_remove-24.svg"
+ inkscape:export-filename="gwy_grains_remove.svg.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs8458">
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8413"
+ id="radialGradient8427"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.85161289,0,0,0.85161289,-212.60884,62.477192)"
+ cx="366.46545"
+ cy="526.93652"
+ fx="366.46545"
+ fy="526.93652"
+ r="4.2401776" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient8413">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop8415" />
+ <stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop8417" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8413"
+ id="radialGradient8423"
+ gradientUnits="userSpaceOnUse"
+ cx="366.46545"
+ cy="526.93652"
+ fx="366.46545"
+ fy="526.93652"
+ r="4.2401776"
+ gradientTransform="matrix(0.79354837,0,0,0.79354837,-179.33019,86.073522)" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8413"
+ id="radialGradient8419"
+ cx="366.46545"
+ cy="526.93652"
+ fx="366.46545"
+ fy="526.93652"
+ r="4.2401776"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-263.98759,-28.713438)" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="26.454482"
+ inkscape:cx="-12.629167"
+ inkscape:cy="25.18183"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8461">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-93.477875,-492.22305)">
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#d0e2f2;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect11370"
+ width="23.000002"
+ height="23.000002"
+ x="93.977875"
+ y="492.72305" />
+ <circle
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:url(#radialGradient8419);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.83099997;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:2.49299991, 2.49299991;stroke-dashoffset:1.32959986;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="path8411"
+ cx="102.47787"
+ cy="498.22305"
+ r="4.2401776" />
+ <circle
+ r="3.3647861"
+ cy="504.22305"
+ cx="111.47787"
+ id="circle8421"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:url(#radialGradient8423);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.83099997;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:2.49299991, 2.49299991;stroke-dashoffset:1.32959986;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <circle
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:url(#radialGradient8427);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.83099997;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:2.49299991, 2.49299991;stroke-dashoffset:1.32959986;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="circle8425"
+ cx="99.477875"
+ cy="511.22305"
+ r="3.61099" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#ffffff;fill-opacity:0.49803922;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1, 1;stroke-dashoffset:0.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="M 7 8 L 7 16 L 14 16 L 14 23 L 22 23 L 22 15 L 15 15 L 15 8 L 7 8 z "
+ transform="translate(93.477875,492.22305)"
+ id="rect8084" />
+ <g
+ id="g8441"
+ transform="matrix(1.5,0,0,1.5,-451.88834,-299.57926)"
+ style="stroke:#db2424;stroke-opacity:1">
+ <path
+ inkscape:connector-curvature="0"
+ id="path8429"
+ d="m 368.89943,533.85685 4.02276,4.02277"
+ style="fill:none;fill-rule:evenodd;stroke:#db2424;stroke-width:1.50000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#db2424;stroke-width:1.50000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 368.89943,537.87962 4.02276,-4.02277"
+ id="path8431"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ id="g8437"
+ transform="matrix(1.5,0,0,1.5,-451.69997,-278.54563)"
+ style="stroke:#db2424;stroke-opacity:1">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#db2424;stroke-width:1.50000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 373.44052,524.5011 4.02276,4.02277"
+ id="path8433"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8435"
+ d="m 373.44052,528.52387 4.02276,-4.02277"
+ style="fill:none;fill-rule:evenodd;stroke:#db2424;stroke-width:1.50000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_grains_water-24.svg b/pixmaps/src/gwy_grains_water-24.svg
new file mode 100644
index 0000000..b04e183
--- /dev/null
+++ b/pixmaps/src/gwy_grains_water-24.svg
@@ -0,0 +1,271 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8819"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_grains_water-24.svg"
+ inkscape:export-filename="gwy_grains_water.svg.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs8821">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient8104">
+ <stop
+ style="stop-color:#0c4359;stop-opacity:1"
+ offset="0"
+ id="stop8106" />
+ <stop
+ style="stop-color:#48b3ff;stop-opacity:1"
+ offset="1"
+ id="stop8108" />
+ </linearGradient>
+ <filter
+ inkscape:collect="always"
+ style="color-interpolation-filters:sRGB"
+ id="filter9372"
+ x="-0.24718654"
+ width="1.4943731"
+ y="-0.10159132"
+ height="1.2031826">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.38629044"
+ id="feGaussianBlur9374" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ style="color-interpolation-filters:sRGB"
+ id="filter9285"
+ x="-0.24995747"
+ width="1.4999149"
+ y="-0.27971426"
+ height="1.5594285">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.3478981"
+ id="feGaussianBlur9287" />
+ </filter>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8775"
+ id="radialGradient8781"
+ cx="364.99338"
+ cy="560.16174"
+ fx="364.99338"
+ fy="560.16174"
+ r="5.6896586"
+ gradientTransform="matrix(1.1220435,1.9256242e-6,-3.2093364e-6,1.870051,-335.70458,-692.43152)"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient8775">
+ <stop
+ id="stop8779"
+ offset="0"
+ style="stop-color:#48ece2;stop-opacity:1" />
+ <stop
+ id="stop8777"
+ offset="1"
+ style="stop-color:#48b3ff;stop-opacity:1" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8413"
+ id="radialGradient9160"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.70751116,0,0,0.70751116,-174.60228,-15.348786)"
+ cx="366.46545"
+ cy="526.93652"
+ fx="366.46545"
+ fy="526.93652"
+ r="4.2401776" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient8413">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop8415" />
+ <stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop8417" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8413"
+ id="radialGradient9156"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.70751116,0,0,0.70751116,-180.60228,-23.348816)"
+ cx="366.46545"
+ cy="526.93652"
+ fx="366.46545"
+ fy="526.93652"
+ r="4.2401776" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8413"
+ id="radialGradient8427"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.85161289,0,0,0.85161289,-239.29056,-92.403164)"
+ cx="366.46545"
+ cy="526.93652"
+ fx="366.46545"
+ fy="526.93652"
+ r="4.2401776" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8413"
+ id="radialGradient8423"
+ gradientUnits="userSpaceOnUse"
+ cx="366.46545"
+ cy="526.93652"
+ fx="366.46545"
+ fy="526.93652"
+ r="4.2401776"
+ gradientTransform="matrix(0.79354837,0,0,0.79354837,-206.13195,-68.685006)" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8413"
+ id="radialGradient8419"
+ cx="366.46545"
+ cy="526.93652"
+ fx="366.46545"
+ fy="526.93652"
+ r="4.2401776"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-289.78935,-183.47197)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8104"
+ id="linearGradient8110"
+ x1="74.644516"
+ y1="359.47131"
+ x2="74.484619"
+ y2="345.40024"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.0640071,0,0,1.0640071,-5.4200791,-23.048078)" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1.1747089"
+ inkscape:cx="227.41547"
+ inkscape:cy="168.87746"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata8824">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-66.676125,-337.46454)"
+ style="opacity:0.98">
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#d0e2f2;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect11370"
+ width="23.000002"
+ height="23.000002"
+ x="67.176125"
+ y="337.96454" />
+ <circle
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:url(#radialGradient8419);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.83099997;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:2.49299991, 2.49299991;stroke-dashoffset:1.32959986;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="path8411"
+ cx="76.676125"
+ cy="343.46454"
+ r="4.2401776" />
+ <circle
+ r="3.3647861"
+ cy="349.46454"
+ cx="84.676125"
+ id="circle8421"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:url(#radialGradient8423);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.83099997;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:2.49299991, 2.49299990999999999;stroke-dashoffset:1.32959986;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <circle
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:url(#radialGradient9156);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.83099997;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:2.49299991, 2.49299991;stroke-dashoffset:1.32959986;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="circle9154"
+ cx="78.676125"
+ cy="349.46454"
+ r="2.9999731" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ id="path8337"
+ d="m 74.155876,359.43194 c -4.325732,-0.4839 -6.70465,-4.7929 -4.782329,-8.28322 0.503966,-1.96836 4.778226,-10.26149 5.50203,-9.87174 -1.091961,4.17438 3.076176,8.16316 4.062617,9.87174 1.743812,3.98813 -0.798474,8.20284 -4.782318,8.28322 z"
+ inkscape:connector-curvature="0"
+ style="fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <circle
+ r="2.9999731"
+ cy="357.46454"
+ cx="84.676125"
+ id="circle9158"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:url(#radialGradient9160);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.83099997;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:2.49299991, 2.49299990999999999;stroke-dashoffset:1.32959986;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <circle
+ r="3.61099"
+ cy="356.34271"
+ cx="72.796158"
+ id="circle8425"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:url(#radialGradient8427);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.83099997;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:2.49299991, 2.49299991;stroke-dashoffset:1.32959986;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <path
+ style="fill:url(#radialGradient8781);fill-opacity:1;stroke:url(#linearGradient8110);stroke-width:1.06400001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.98039216"
+ inkscape:connector-curvature="0"
+ d="m 74.155876,359.43194 c -4.325732,-0.4839 -6.70465,-4.7929 -4.782329,-8.28322 0.503966,-1.96836 4.778226,-10.26149 5.50203,-9.87174 -1.091961,4.17438 3.076176,8.16316 4.062617,9.87174 1.743812,3.98813 -0.798474,8.20284 -4.782318,8.28322 z"
+ id="path8773"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="opacity:0.70200004;fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter9285)"
+ d="m 74.817612,358.22038 c 1.63702,-0.6487 2.82132,-1.42621 3.34039,-2.98503"
+ id="path9039"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc"
+ transform="matrix(1.0640071,0,0,1.0640071,-5.4200791,-23.048078)" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter9372)"
+ d="m 74.464742,345.21665 c -0.819182,2.47752 -2.364741,4.3677 -3.18419,6.91287 -0.22188,0.65888 -0.96791,1.64099 -0.28461,2.20875 0.84867,0.074 1.56366,-0.86016 1.43912,-1.67891 0.52552,-2.30979 2.017734,-3.81282 1.99477,-6.30672 0.009,-0.37871 0.01,-0.75785 0.0349,-1.13599 z"
+ id="path9289"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccc"
+ transform="matrix(1.0640071,0,0,1.0640071,-5.4200791,-23.048078)" />
+ <rect
+ y="337.96454"
+ x="67.176125"
+ height="23.000002"
+ width="23.000002"
+ id="rect8250"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_graph-24.svg b/pixmaps/src/gwy_graph-24.svg
new file mode 100644
index 0000000..a7aeda6
--- /dev/null
+++ b/pixmaps/src/gwy_graph-24.svg
@@ -0,0 +1,132 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg9687"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_graph-24.svg"
+ inkscape:export-filename="gwy_graph_function-24.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96">
+ <defs
+ id="defs9689" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="50.46874"
+ inkscape:cx="-11.017304"
+ inkscape:cy="5.8477363"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-global="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata9692">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-306.29821,-648.57531)">
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#4696db;stroke-width:1.00000012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8419"
+ width="23"
+ height="23"
+ x="306.79822"
+ y="649.07532" />
+ <g
+ id="g8458"
+ transform="rotate(-90,318.79821,660.07531)">
+ <path
+ inkscape:connector-curvature="0"
+ id="path8446"
+ d="m 307.29821,668.07531 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,653.07531 h 22"
+ id="path8448"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,663.07531 h 22"
+ id="path8450"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8452"
+ d="m 307.29821,658.07531 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ </g>
+ <path
+ inkscape:connector-curvature="0"
+ id="path8444"
+ d="m 307.29821,668.07531 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,653.07531 h 22"
+ id="path8438"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,663.07531 h 22"
+ id="path8442"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8440"
+ d="m 307.29821,658.07531 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 307.41696,671.45774 c 4.2216,-2.92784 3.67521,-17.90348 6.48838,-17.94716 2.81317,-0.0437 2.31267,9.51584 4.58671,9.51584 2.27404,0 1.86655,-4.93098 4.21944,-4.88568 2.35289,0.0453 3.02553,10.81894 6.90984,11.85974"
+ id="path8254-7"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="czzzc" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_graph_align-24.svg b/pixmaps/src/gwy_graph_align-24.svg
new file mode 100644
index 0000000..3b8ba8f
--- /dev/null
+++ b/pixmaps/src/gwy_graph_align-24.svg
@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg9687"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_graph_align-24.svg"
+ inkscape:export-filename="gwy_graph_function-24.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96">
+ <defs
+ id="defs9689" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="7.544632"
+ inkscape:cx="54.182679"
+ inkscape:cy="-62.719188"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-global="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata9692">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-306.29821,-648.57531)">
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#4696db;stroke-width:1.00000012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8419"
+ width="23"
+ height="23"
+ x="306.79822"
+ y="649.07532" />
+ <g
+ id="g8458"
+ transform="rotate(-90,318.79821,660.07531)">
+ <path
+ inkscape:connector-curvature="0"
+ id="path8446"
+ d="m 307.29821,668.07531 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,653.07531 h 22"
+ id="path8448"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,663.07531 h 22"
+ id="path8450"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8452"
+ d="m 307.29821,658.07531 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ </g>
+ <path
+ inkscape:connector-curvature="0"
+ id="path8444"
+ d="m 307.29821,668.07531 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,653.07531 h 22"
+ id="path8438"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,663.07531 h 22"
+ id="path8442"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8440"
+ d="m 307.29821,658.07531 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8571"
+ d="m 318.29821,649.57531 v 22"
+ style="fill:none;fill-rule:evenodd;stroke:#db2424;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 309.29821,663.07531 c 0,0 1.79815,-2 3,-2 1.20185,0 1.79815,2 3,2 1.20185,0 1.82508,-2.253 3,-2 3.07419,0.66198 2.3289,6.34045 5,8 1.42274,0.88395 5,0.5 5,0.5"
+ id="path8466"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="caaaac" />
+ <path
+ sodipodi:nodetypes="caaaac"
+ inkscape:connector-curvature="0"
+ id="path8468"
+ d="m 309.29821,655.07531 c 0,0 1.79815,-2 3,-2 1.20185,0 1.79815,2 3,2 1.20185,0 1.82508,-2.253 3,-2 3.07419,0.66198 2.3289,6.34045 5,8 1.42274,0.88395 5,0.5 5,0.5"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_graph_cut-24.svg b/pixmaps/src/gwy_graph_cut-24.svg
new file mode 100644
index 0000000..7c5c255
--- /dev/null
+++ b/pixmaps/src/gwy_graph_cut-24.svg
@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg9687"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_graph_cut-24.svg"
+ inkscape:export-filename="gwy_graph_function-24.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96">
+ <defs
+ id="defs9689" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="12.76868"
+ inkscape:cx="-73.160014"
+ inkscape:cy="30.351268"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-global="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata9692">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-306.29821,-648.57531)">
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#4696db;stroke-width:1.00000012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8419"
+ width="23"
+ height="23"
+ x="306.79822"
+ y="649.07532" />
+ <g
+ id="g8458"
+ transform="rotate(-90,318.79821,660.07531)">
+ <path
+ inkscape:connector-curvature="0"
+ id="path8446"
+ d="m 307.29821,668.07531 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,653.07531 h 22"
+ id="path8448"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,663.07531 h 22"
+ id="path8450"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8452"
+ d="m 307.29821,658.07531 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ </g>
+ <path
+ inkscape:connector-curvature="0"
+ id="path8444"
+ d="m 307.29821,668.07531 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,653.07531 h 22"
+ id="path8438"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,663.07531 h 22"
+ id="path8442"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8440"
+ d="m 307.29821,658.07531 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 310.31615,665.42446 c 0.5864,-1.81638 0.50179,-1.96418 0.87316,-4.02186 0.37138,-2.05768 0.69874,-4.02522 1.10908,-5.48108 0.41034,-1.45585 0.90366,-2.40002 1.60695,-2.41094 2.81317,-0.0437 2.31267,9.51584 4.58671,9.51584 2.27404,0 1.86655,-4.93098 4.21944,-4.88568 1.17645,0.0226 1.93283,2.72738 2.88064,5.55656 0.23695,0.70729 0.48587,1.42236 0.7563,2.10525"
+ id="path8254-7"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cssszssc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#db2424;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 310.29821,649.57531 v 22"
+ id="path8569"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8571"
+ d="m 326.29821,649.57531 v 22"
+ style="fill:none;fill-rule:evenodd;stroke:#db2424;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_graph_dos-24.svg b/pixmaps/src/gwy_graph_dos-24.svg
new file mode 100644
index 0000000..7d086ef
--- /dev/null
+++ b/pixmaps/src/gwy_graph_dos-24.svg
@@ -0,0 +1,170 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg10043"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_graph_dos-24.svg"
+ inkscape:export-filename="gwy_arithmetic-24.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs10045">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient8425">
+ <stop
+ style="stop-color:#4696db;stop-opacity:1;"
+ offset="0"
+ id="stop8421" />
+ <stop
+ id="stop8429"
+ offset="0.92857146"
+ style="stop-color:#4696db;stop-opacity:0.94117647;" />
+ <stop
+ style="stop-color:#dfedf9;stop-opacity:0.88235295"
+ offset="1"
+ id="stop8423" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8425"
+ id="linearGradient8427"
+ x1="201.36205"
+ y1="495.33789"
+ x2="201.36205"
+ y2="481.33789"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ id="linearGradient8423"
+ inkscape:collect="always">
+ <stop
+ id="stop8419"
+ offset="0"
+ style="stop-color:#6c7d92;stop-opacity:1" />
+ <stop
+ style="stop-color:#a3b8d2;stop-opacity:1"
+ offset="0.49999958"
+ id="stop8427" />
+ <stop
+ id="stop8421-7"
+ offset="1"
+ style="stop-color:#446a97;stop-opacity:1" />
+ </linearGradient>
+ <filter
+ height="1.2250096"
+ y="-0.11250482"
+ width="1.2571303"
+ x="-0.12856513"
+ id="filter8458"
+ style="color-interpolation-filters:sRGB"
+ inkscape:collect="always">
+ <feGaussianBlur
+ id="feGaussianBlur8460"
+ stdDeviation="0.16275744"
+ inkscape:collect="always" />
+ </filter>
+ <linearGradient
+ gradientUnits="userSpaceOnUse"
+ y2="602.10724"
+ x2="257.77811"
+ y1="602.10724"
+ x1="263.77811"
+ id="linearGradient8425-5"
+ xlink:href="#linearGradient8423"
+ inkscape:collect="always"
+ gradientTransform="translate(-77.290842,-123.64796)" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="5.0092836"
+ inkscape:cx="-53.585295"
+ inkscape:cy="51.442462"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-global="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata10048">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-197.36205,-472.33789)">
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:url(#linearGradient8427);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 197.86205,472.83789 h 8.5 c 0,0 -2.6364,1.63657 -3.5,2.875 -0.58037,0.83228 -1.19213,1.87871 -1,2.875 0.24047,1.247 2.43149,1.60687 2.5,2.875 0.063,1.16571 -1.92597,1.70994 -2,2.875 -0.0686,1.07875 1.42108,1.79696 1.5,2.875 0.0741,1.01194 -1.3324,1.91634 -1,2.875 0.58314,1.68177 3.91686,1.19323 4.5,2.875 0.3324,0.95866 -1,2.875 -1,2.875 h -8.5 z"
+ id="rect8418"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccsssssssccc" />
+ <path
+ sodipodi:nodetypes="csssssssc"
+ inkscape:connector-curvature="0"
+ id="path8431"
+ d="m 207.86205,485.693 c 0,0 0.89182,3.54699 1.56668,4.70888 0.45354,0.78083 1.02377,1.60389 1.56668,1.34541 0.67953,-0.32353 0.87564,-3.27133 1.56668,-3.3635 0.63524,-0.0848 0.9318,2.59119 1.56668,2.6908 0.58785,0.0923 0.97922,-1.91193 1.56669,-2.01811 0.55144,-0.0997 1.04427,1.79262 1.56668,1.3454 0.91645,-0.78454 0.65023,-5.26972 1.56668,-6.05428 0.52241,-0.44721 1.56668,1.3454 1.56668,1.3454"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#db2424;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <g
+ id="g8525"
+ transform="translate(30.87478,-6.12137)">
+ <path
+ sodipodi:nodetypes="cccc"
+ inkscape:connector-curvature="0"
+ id="path4763"
+ d="m 189.98727,478.95926 -6.5,10.5 -6,-10.5 z"
+ style="fill:url(#linearGradient8425-5);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ transform="rotate(96.15813,276.60268,506.58206)"
+ sodipodi:nodetypes="cccc"
+ inkscape:connector-curvature="0"
+ id="path8400"
+ d="m 260.56574,601.46532 c -0.0435,-1.8491 2.94024,0.22303 6.9605,0.15554 -2.37934,0.87001 -4.78447,3.12651 -6.54699,4.79868 -0.69731,-2.00112 -0.66057,-4.5027 -0.41351,-4.95422 z"
+ style="opacity:0.75;fill:#ffffff;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter8458)" />
+ </g>
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_graph_export_ascii-24.svg b/pixmaps/src/gwy_graph_export_ascii-24.svg
new file mode 100644
index 0000000..0f30206
--- /dev/null
+++ b/pixmaps/src/gwy_graph_export_ascii-24.svg
@@ -0,0 +1,247 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg9687"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_graph_export_ascii-24.svg"
+ inkscape:export-filename="gwy_graph_function-24.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96">
+ <defs
+ id="defs9689" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="7.3837925"
+ inkscape:cx="97.016252"
+ inkscape:cy="-21.587931"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-global="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata9692">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-306.29821,-648.57531)">
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#4696db;stroke-width:1.00000012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8419"
+ width="23"
+ height="23"
+ x="306.79822"
+ y="649.07532" />
+ <g
+ id="g8458"
+ transform="rotate(-90,318.79821,660.07531)">
+ <path
+ inkscape:connector-curvature="0"
+ id="path8446"
+ d="m 307.29821,668.07531 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,653.07531 h 22"
+ id="path8448"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,663.07531 h 22"
+ id="path8450"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8452"
+ d="m 307.29821,658.07531 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ </g>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,653.07531 h 22"
+ id="path8438"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,663.07531 h 22"
+ id="path8442"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8440"
+ d="m 307.29821,658.07531 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 309.29821,656.57531 v 4 h 8 v -4"
+ id="path8520"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc" />
+ <g
+ id="g8691"
+ transform="translate(2,2)">
+ <path
+ style="fill:#db2424;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 311.29821,655.57531 -4,-4 h 8 z"
+ id="path8687"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:#db2424;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 310.29821,652.57531 v -4 h 2 v 4 z"
+ id="path8689"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ </g>
+ <flowRoot
+ xml:space="preserve"
+ id="flowRoot8781"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-align:justify;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;"
+ transform="translate(306.29821,648.57531)"><flowRegion
+ id="flowRegion8783"
+ style="font-size:4px;text-anchor:start;text-align:justify;"><rect
+ id="rect8785"
+ width="8"
+ height="20"
+ x="14"
+ y="2"
+ style="font-size:4px;text-anchor:start;text-align:justify;" /></flowRegion><flowPara
+ id="flowPara8787">ASCA</flowPara></flowRoot> <flowRoot
+ xml:space="preserve"
+ id="flowRoot8789"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.66666675px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ transform="translate(306.29821,648.57531)"><flowRegion
+ id="flowRegion8791"
+ style="font-size:2.66666675px;text-align:start;text-anchor:start"><rect
+ id="rect8793"
+ width="8"
+ height="20"
+ x="14"
+ y="2"
+ style="font-size:2.66666675px;text-align:start;text-anchor:start" /></flowRegion><flowPara
+ id="flowPara8797" /></flowRoot> <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 320.29821,651.57531 h 7 v 18 h -17.99999 v -5.99999"
+ id="rect8801"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 311.29821,666.07531 h 3"
+ id="path8803"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path8814"
+ d="m 315.29821,666.07531 h 5"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path8824"
+ d="m 311.29821,664.07531 h 3"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 322.29821,654.07531 h 3"
+ id="path8826"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8805-6"
+ d="m 319.29821,654.07531 h 2"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ sodipodi:nodetypes="cc" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path8820-8"
+ d="m 319.29821,656.07531 h 5"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 319.29821,658.07531 h 4"
+ id="path8816-8"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8805-4"
+ d="m 319.29821,660.07531 h 2"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ sodipodi:nodetypes="cc" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path8824-3"
+ d="m 322.29821,660.07531 h 3"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path8824-1"
+ d="m 319.29821,662.07531 h 3"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path8824-4"
+ d="m 315.29821,664.07531 h 3"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path8814-9"
+ d="m 319.29821,664.07531 h 5"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_graph_export_png-24.svg b/pixmaps/src/gwy_graph_export_png-24.svg
new file mode 100644
index 0000000..b4b0d70
--- /dev/null
+++ b/pixmaps/src/gwy_graph_export_png-24.svg
@@ -0,0 +1,215 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg9687"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_graph_export_png-24.svg"
+ inkscape:export-filename="gwy_graph_function-24.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96">
+ <defs
+ id="defs9689" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="6.1516364"
+ inkscape:cx="-3.2201326"
+ inkscape:cy="1.9123596"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-global="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata9692">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-306.29821,-648.57531)">
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#4696db;stroke-width:1.00000012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8419"
+ width="23"
+ height="23"
+ x="306.79822"
+ y="649.07532" />
+ <g
+ id="g8458"
+ transform="rotate(-90,318.79821,660.07531)">
+ <path
+ inkscape:connector-curvature="0"
+ id="path8446"
+ d="m 307.29821,668.07531 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,653.07531 h 22"
+ id="path8448"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,663.07531 h 22"
+ id="path8450"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8452"
+ d="m 307.29821,658.07531 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ </g>
+ <path
+ inkscape:connector-curvature="0"
+ id="path8444"
+ d="m 307.29821,668.07531 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,653.07531 h 22"
+ id="path8438"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,663.07531 h 22"
+ id="path8442"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8440"
+ d="m 307.29821,658.07531 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 309.29821,656.57531 v 4 h 8 v -4"
+ id="path8520"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc" />
+ <flowRoot
+ xml:space="preserve"
+ id="flowRoot8781"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-align:justify;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;"
+ transform="translate(306.29821,648.57531)"><flowRegion
+ id="flowRegion8783"
+ style="font-size:4px;text-anchor:start;text-align:justify;"><rect
+ id="rect8785"
+ width="8"
+ height="20"
+ x="14"
+ y="2"
+ style="font-size:4px;text-anchor:start;text-align:justify;" /></flowRegion><flowPara
+ id="flowPara8787">ASCA</flowPara></flowRoot> <flowRoot
+ xml:space="preserve"
+ id="flowRoot8789"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.66666675px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ transform="translate(306.29821,648.57531)"><flowRegion
+ id="flowRegion8791"
+ style="font-size:2.66666675px;text-align:start;text-anchor:start"><rect
+ id="rect8793"
+ width="8"
+ height="20"
+ x="14"
+ y="2"
+ style="font-size:2.66666675px;text-align:start;text-anchor:start" /></flowRegion><flowPara
+ id="flowPara8797" /></flowRoot> <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 320.29821,651.57531 h 7 v 18 h -17.99999 v -5.99999"
+ id="rect8801"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8535"
+ width="3.9999921"
+ height="3.9999926"
+ x="321.29822"
+ y="653.57532" />
+ <rect
+ y="658.57532"
+ x="321.29822"
+ height="3.9999926"
+ width="3.9999921"
+ id="rect8537"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#db2424;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#4696db;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8539"
+ width="3.9999921"
+ height="3.9999926"
+ x="321.29822"
+ y="663.57532" />
+ <rect
+ y="663.57532"
+ x="316.29822"
+ height="3.9999926"
+ width="3.9999921"
+ id="rect8541"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#ffbb00;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#87c74a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8543"
+ width="3.9999921"
+ height="3.9999926"
+ x="311.29822"
+ y="663.57532" />
+ <g
+ id="g8691"
+ transform="translate(2,2)">
+ <path
+ style="fill:#db2424;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 311.29821,655.57531 -4,-4 h 8 z"
+ id="path8687"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:#db2424;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 310.29821,652.57531 v -4 h 2 v 4 z"
+ id="path8689"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ </g>
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_graph_export_vector-24.svg b/pixmaps/src/gwy_graph_export_vector-24.svg
new file mode 100644
index 0000000..3066a32
--- /dev/null
+++ b/pixmaps/src/gwy_graph_export_vector-24.svg
@@ -0,0 +1,216 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg9687"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_graph_export_vector-24.svg"
+ inkscape:export-filename="gwy_graph_function-24.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96">
+ <defs
+ id="defs9689" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="3.8682797"
+ inkscape:cx="83.099856"
+ inkscape:cy="-11.358031"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-global="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata9692">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-306.29821,-648.57531)">
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#4696db;stroke-width:1.00000012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8419"
+ width="23"
+ height="23"
+ x="306.79822"
+ y="649.07532" />
+ <g
+ id="g8458"
+ transform="rotate(-90,318.79821,660.07531)">
+ <path
+ inkscape:connector-curvature="0"
+ id="path8446"
+ d="m 307.29821,668.07531 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,653.07531 h 22"
+ id="path8448"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,663.07531 h 22"
+ id="path8450"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8452"
+ d="m 307.29821,658.07531 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ </g>
+ <path
+ inkscape:connector-curvature="0"
+ id="path8444"
+ d="m 307.29821,668.07531 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,653.07531 h 22"
+ id="path8438"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,663.07531 h 22"
+ id="path8442"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8440"
+ d="m 307.29821,658.07531 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 309.29821,656.57531 v 4 h 8 v -4"
+ id="path8520"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc" />
+ <flowRoot
+ xml:space="preserve"
+ id="flowRoot8781"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-align:justify;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;"
+ transform="translate(306.29821,648.57531)"><flowRegion
+ id="flowRegion8783"
+ style="font-size:4px;text-anchor:start;text-align:justify;"><rect
+ id="rect8785"
+ width="8"
+ height="20"
+ x="14"
+ y="2"
+ style="font-size:4px;text-anchor:start;text-align:justify;" /></flowRegion><flowPara
+ id="flowPara8787">ASCA</flowPara></flowRoot> <flowRoot
+ xml:space="preserve"
+ id="flowRoot8789"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.66666675px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ transform="translate(306.29821,648.57531)"><flowRegion
+ id="flowRegion8791"
+ style="font-size:2.66666675px;text-align:start;text-anchor:start"><rect
+ id="rect8793"
+ width="8"
+ height="20"
+ x="14"
+ y="2"
+ style="font-size:2.66666675px;text-align:start;text-anchor:start" /></flowRegion><flowPara
+ id="flowPara8797" /></flowRoot> <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 320.29821,651.57531 h 7 v 18 h -17.99999 v -5.99999"
+ id="rect8801"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 322.29821,656.57531 v 9"
+ id="path8837"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#db2424;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8839"
+ width="4.2425747"
+ height="4.2425747"
+ x="689.30548"
+ y="233.57536"
+ transform="rotate(45)" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path8841"
+ d="m 322.79821,665.57531 h -10"
+ style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ transform="rotate(45)"
+ y="240.61224"
+ x="696.41083"
+ height="4.2425747"
+ width="4.2425747"
+ id="rect8847"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#db2424;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#db2424;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8849"
+ width="4.2425747"
+ height="4.2425747"
+ x="690.04688"
+ y="246.97627"
+ transform="rotate(45)" />
+ <g
+ id="g8691"
+ transform="translate(2,2)">
+ <path
+ style="fill:#db2424;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 311.29821,655.57531 -4,-4 h 8 z"
+ id="path8687"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:#db2424;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 310.29821,652.57531 v -4 h 2 v 4 z"
+ id="path8689"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ </g>
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_graph_fd-24.svg b/pixmaps/src/gwy_graph_fd-24.svg
new file mode 100644
index 0000000..24da04e
--- /dev/null
+++ b/pixmaps/src/gwy_graph_fd-24.svg
@@ -0,0 +1,138 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg9687"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_graph_fd-24.svg"
+ inkscape:export-filename="gwy_graph_function-24.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96">
+ <defs
+ id="defs9689" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="11.106426"
+ inkscape:cx="134.17322"
+ inkscape:cy="-2.85261"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-global="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata9692">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-306.29821,-648.57531)">
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#4696db;stroke-width:1.00000012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8419"
+ width="23"
+ height="23"
+ x="306.79822"
+ y="649.07532" />
+ <g
+ id="g8458"
+ transform="rotate(-90,318.79821,660.07531)">
+ <path
+ inkscape:connector-curvature="0"
+ id="path8446"
+ d="m 307.29821,668.07531 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,653.07531 h 22"
+ id="path8448"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,663.07531 h 22"
+ id="path8450"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8452"
+ d="m 307.29821,658.07531 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ </g>
+ <path
+ inkscape:connector-curvature="0"
+ id="path8444"
+ d="m 307.29821,668.07531 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,653.07531 h 22"
+ id="path8438"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,663.07531 h 22"
+ id="path8442"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8440"
+ d="m 307.29821,658.07531 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.00000095;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 309.40218,650.3301 c 0,0.78383 0.3613,10.15943 1.03484,14.5527 0.61666,4.0223 3.27848,8.72304 6.36124,0.69251 2.26175,-5.5413 5.76783,-8.38368 11,-8.38368"
+ id="path12604"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cscc" />
+ <path
+ sodipodi:nodetypes="ccc"
+ inkscape:connector-curvature="0"
+ id="path8575"
+ d="m 310.90218,650.3301 c 0,1.56766 -0.51769,26.13988 3.96027,11.35415 2.26175,-5.5413 7.70359,-7.49262 12.93576,-7.49262"
+ style="fill:none;fill-rule:evenodd;stroke:#db2424;stroke-width:2.00000095;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_graph_filter-24.svg b/pixmaps/src/gwy_graph_filter-24.svg
new file mode 100644
index 0000000..1a08efe
--- /dev/null
+++ b/pixmaps/src/gwy_graph_filter-24.svg
@@ -0,0 +1,144 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg9687"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_graph_filter-24.svg"
+ inkscape:export-filename="gwy_graph_function-24.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96">
+ <defs
+ id="defs9689" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="7.544632"
+ inkscape:cx="27.003035"
+ inkscape:cy="-5.4785911"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-global="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata9692">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-306.29821,-648.57531)">
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#4696db;stroke-width:1.00000012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8419"
+ width="23"
+ height="23"
+ x="306.79822"
+ y="649.07532" />
+ <g
+ id="g8458"
+ transform="rotate(-90,318.79821,660.07531)">
+ <path
+ inkscape:connector-curvature="0"
+ id="path8446"
+ d="m 307.29821,668.07531 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,653.07531 h 22"
+ id="path8448"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,663.07531 h 22"
+ id="path8450"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8452"
+ d="m 307.29821,658.07531 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ </g>
+ <path
+ inkscape:connector-curvature="0"
+ id="path8444"
+ d="m 307.29821,668.07531 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,653.07531 h 22"
+ id="path8438"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,663.07531 h 22"
+ id="path8442"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8440"
+ d="m 307.29821,658.07531 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:3;stroke-dasharray:none;stroke-opacity:1"
+ d="m 307.29821,671.57531 1,-3 1,4 1,-7 1,3 1,-18 1,6 1,-4 1,9 1,3 1,-3 1,2 1,-2 1,3 1,-8 1,4 1,-3 1,5 1,-1 1,7 1,-2 1,5 1,-3"
+ id="path8549"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccccccc" />
+ <path
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#db2424;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 307.41696,671.45774 c 4.2216,-2.92784 3.67521,-17.90348 6.48838,-17.94716 2.81317,-0.0437 2.31267,9.51584 4.58671,9.51584 2.27404,0 1.86655,-4.93098 4.21944,-4.88568 2.35289,0.0453 3.02553,10.81894 6.90984,11.85974"
+ id="path8254-7"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="czzzc" />
+ <path
+ sodipodi:nodetypes="ccccccccccc"
+ inkscape:connector-curvature="0"
+ id="path8551"
+ d="m 307.29821,671.57531 1,-3 1,4 1,-7 1,3 1,-18 1,6 1,-4 1,9 1,3 1,-3 1,2 1,-2 1,3 1,-8 1,4 1,-3 1,5 1,-1 1,7 1,-2 1,5 1,-3"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:3;stroke-dasharray:none;stroke-opacity:0.35686275;fill-opacity:1" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_graph_function-24.svg b/pixmaps/src/gwy_graph_function-24.svg
new file mode 100644
index 0000000..ace5214
--- /dev/null
+++ b/pixmaps/src/gwy_graph_function-24.svg
@@ -0,0 +1,138 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg9687"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_graph_function-24.svg"
+ inkscape:export-filename="gwy_graph_function-24.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96">
+ <defs
+ id="defs9689" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="9.4546191"
+ inkscape:cx="-94.515608"
+ inkscape:cy="42.432073"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-global="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata9692">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-306.29821,-648.57531)">
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#4696db;stroke-width:1.00000012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8419"
+ width="23"
+ height="23"
+ x="306.79822"
+ y="649.07532" />
+ <g
+ id="g8458"
+ transform="rotate(-90,318.79821,660.07531)">
+ <path
+ inkscape:connector-curvature="0"
+ id="path8446"
+ d="m 307.29821,668.07531 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,653.07531 h 22"
+ id="path8448"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,663.07531 h 22"
+ id="path8450"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8452"
+ d="m 307.29821,658.07531 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ </g>
+ <path
+ inkscape:connector-curvature="0"
+ id="path8444"
+ d="m 307.29821,668.07531 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,653.07531 h 22"
+ id="path8438"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,663.07531 h 22"
+ id="path8442"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8440"
+ d="m 307.29821,658.07531 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 329.17945,671.45774 c -8.23457,-0.92032 -8.17577,-17.38243 -10.88124,-17.38243 -2.70547,0 -2.64666,16.46211 -10.88125,17.38243"
+ id="path8254-7"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="czc" />
+ <path
+ sodipodi:nodetypes="ccc"
+ inkscape:connector-curvature="0"
+ id="path8126"
+ d="m 330.17945,668.95774 c -6.35472,-1.23908 -6.83783,-19.11349 -11.88124,-18.88243 -5.20051,-0.65253 -5.24634,17.25474 -11.88125,18.88243"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#db2424;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_graph_halfgauss-24.svg b/pixmaps/src/gwy_graph_halfgauss-24.svg
new file mode 100644
index 0000000..fdda106
--- /dev/null
+++ b/pixmaps/src/gwy_graph_halfgauss-24.svg
@@ -0,0 +1,131 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8239"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_graph_halfgauss-24.svg">
+ <defs
+ id="defs8241" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="10.580721"
+ inkscape:cx="27.923554"
+ inkscape:cy="21.195878"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8244">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-235.29175,-670.91876)">
+ <g
+ id="g8474"
+ transform="translate(-34.999998,0.49999779)">
+ <rect
+ y="670.91876"
+ x="270.79175"
+ height="23"
+ width="23"
+ id="rect8419"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#4696db;stroke-width:1.00000012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <g
+ transform="rotate(-90,311.7167,689.00027)"
+ id="g8458">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,668.07531 h 22"
+ id="path8446"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8448"
+ d="m 307.29821,653.07531 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8450"
+ d="m 307.29821,663.07531 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,658.07531 h 22"
+ id="path8452"
+ inkscape:connector-curvature="0" />
+ </g>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 271.29175,689.91876 h 22"
+ id="path8444"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8438"
+ d="m 271.29175,674.91876 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8442"
+ d="m 271.29175,684.91876 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 271.29175,679.91876 h 22"
+ id="path8440"
+ inkscape:connector-curvature="0" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path8254-7"
+ d="m 293.23598,691.80119 c -15.94423,0 -16.48811,-17.38243 -21.94424,-17.38243"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_graph_level-24.svg b/pixmaps/src/gwy_graph_level-24.svg
new file mode 100644
index 0000000..67fc0d2
--- /dev/null
+++ b/pixmaps/src/gwy_graph_level-24.svg
@@ -0,0 +1,160 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg9687"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_graph_level-24.svg"
+ inkscape:export-filename="gwy_graph_function-24.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96">
+ <defs
+ id="defs9689" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="5.2367323"
+ inkscape:cx="-41.043268"
+ inkscape:cy="22.6679"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-global="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata9692">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-306.29821,-648.57531)">
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#4696db;stroke-width:1.00000012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8419"
+ width="23"
+ height="23"
+ x="306.79822"
+ y="649.07532" />
+ <g
+ id="g8458"
+ transform="rotate(-90,318.79821,660.07531)">
+ <path
+ inkscape:connector-curvature="0"
+ id="path8446"
+ d="m 307.29821,668.07531 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,653.07531 h 22"
+ id="path8448"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,663.07531 h 22"
+ id="path8450"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8452"
+ d="m 307.29821,658.07531 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ </g>
+ <path
+ inkscape:connector-curvature="0"
+ id="path8444"
+ d="m 307.29821,668.07531 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,653.07531 h 22"
+ id="path8438"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,663.07531 h 22"
+ id="path8442"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8440"
+ d="m 307.29821,658.07531 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#db2424;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 328.15519,649.13426 -20.55256,16.5"
+ id="path8571-7"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 307.41696,662.45774 c 4.2216,-2.92784 3.67521,-7.90348 6.48838,-7.94716 2.81317,-0.0437 2.31267,7.01584 4.58671,7.01584 2.27404,0 1.86655,-3.93098 4.21944,-3.88568 2.35289,0.0453 3.02553,-5.68106 6.90984,-4.64026"
+ id="path8254-7"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="czzzc" />
+ <path
+ sodipodi:nodetypes="czzssc"
+ inkscape:connector-curvature="0"
+ id="path8564"
+ d="m 307.41696,668.45774 c 4.08556,-1.505 4.03031,-4.33483 6.48838,-4.44716 2.45807,-0.11233 2.31267,6.51584 4.58671,6.51584 2.27404,0 1.86655,-1.93098 4.21944,-1.88568 1.17645,0.0226 0.43283,0.47738 1.38064,0.55656 0.94781,0.0792 3.58704,-0.21722 5.5292,0.30318"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <g
+ transform="translate(14,11)"
+ id="g8570">
+ <path
+ inkscape:connector-curvature="0"
+ id="path8566"
+ d="m 311.29821,655.57531 -4,-4 h 8 z"
+ style="fill:#db2424;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ sodipodi:nodetypes="cccc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8568"
+ d="m 310.29821,651.57531 v -5 h 2 v 5 z"
+ style="fill:#db2424;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ sodipodi:nodetypes="ccccc" />
+ </g>
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_graph_measure-24.svg b/pixmaps/src/gwy_graph_measure-24.svg
new file mode 100644
index 0000000..9c262bc
--- /dev/null
+++ b/pixmaps/src/gwy_graph_measure-24.svg
@@ -0,0 +1,1669 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8232"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_graph_measure-24.svg"
+ inkscape:export-filename="gwy_graph_measure-24.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96">
+ <defs
+ id="defs8234">
+ <linearGradient
+ y2="361.22473"
+ x2="272.91217"
+ y1="247.92804"
+ x1="207.50029"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient4171"
+ xlink:href="#linearGradient4140"
+ gradientTransform="translate(77.59327,1051.5075)" />
+ <linearGradient
+ id="linearGradient4140">
+ <stop
+ id="stop4142"
+ offset="0"
+ style="stop-color:#d7e3f4;stop-opacity:1;" />
+ <stop
+ id="stop4144"
+ offset="1"
+ style="stop-color:#f1f5fb;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4140"
+ id="linearGradient8503"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(34.82165,1050.6611)"
+ x1="207.50029"
+ y1="247.92804"
+ x2="272.91217"
+ y2="361.22473" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4140"
+ id="linearGradient11272"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50.38806,1059.1518)"
+ x1="207.50029"
+ y1="247.92804"
+ x2="272.91217"
+ y2="361.22473" />
+ <linearGradient
+ y2="361.22473"
+ x2="272.91217"
+ y1="247.92804"
+ x1="207.50029"
+ gradientTransform="translate(10.14634,1056.6829)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient9134"
+ xlink:href="#linearGradient4140"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="361.22473"
+ x2="272.91217"
+ y1="247.92804"
+ x1="207.50029"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient4171-3"
+ xlink:href="#linearGradient4140"
+ gradientTransform="translate(89.7437,1058.4951)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4140"
+ id="linearGradient8503-5"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(46.97208,1057.6487)"
+ x1="207.50029"
+ y1="247.92804"
+ x2="272.91217"
+ y2="361.22473" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4140"
+ id="linearGradient11272-3"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(62.53849,1066.1394)"
+ x1="207.50029"
+ y1="247.92804"
+ x2="272.91217"
+ y2="361.22473" />
+ <linearGradient
+ y2="361.22473"
+ x2="272.91217"
+ y1="247.92804"
+ x1="207.50029"
+ gradientTransform="translate(22.29677,1063.6705)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient9134-5"
+ xlink:href="#linearGradient4140"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="361.22473"
+ x2="272.91217"
+ y1="247.92804"
+ x1="207.50029"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient4171-36"
+ xlink:href="#linearGradient4140"
+ gradientTransform="translate(67.16669,1107.7768)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4140"
+ id="linearGradient8503-3"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(24.39507,1106.9304)"
+ x1="207.50029"
+ y1="247.92804"
+ x2="272.91217"
+ y2="361.22473" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4140"
+ id="linearGradient11272-5"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(39.96148,1115.4211)"
+ x1="207.50029"
+ y1="247.92804"
+ x2="272.91217"
+ y2="361.22473" />
+ <linearGradient
+ y2="361.22473"
+ x2="272.91217"
+ y1="247.92804"
+ x1="207.50029"
+ gradientTransform="translate(-0.28024,1112.9522)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient9134-6"
+ xlink:href="#linearGradient4140"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="361.22473"
+ x2="272.91217"
+ y1="247.92804"
+ x1="207.50029"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient4171-367"
+ xlink:href="#linearGradient4140"
+ gradientTransform="translate(36.81181,686.1225)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4140"
+ id="linearGradient8503-56"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-5.95981,685.2761)"
+ x1="207.50029"
+ y1="247.92804"
+ x2="272.91217"
+ y2="361.22473" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4140"
+ id="linearGradient11272-2"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(9.6066,693.7668)"
+ x1="207.50029"
+ y1="247.92804"
+ x2="272.91217"
+ y2="361.22473" />
+ <linearGradient
+ y2="361.22473"
+ x2="272.91217"
+ y1="247.92804"
+ x1="207.50029"
+ gradientTransform="translate(-30.63512,691.2979)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient9134-9"
+ xlink:href="#linearGradient4140"
+ inkscape:collect="always" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1.41"
+ inkscape:cx="268.18032"
+ inkscape:cy="3.9902853"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-smooth-nodes="false"
+ inkscape:object-nodes="true"
+ showguides="false"
+ inkscape:snap-global="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8237">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-277.38676,-597.20107)">
+ <g
+ id="g5943"
+ transform="translate(51.769939,3.2676594)">
+ <rect
+ y="594.43341"
+ x="226.11682"
+ height="23"
+ width="23"
+ id="rect8419"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#4696db;stroke-width:1.00000012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <g
+ transform="rotate(-90,251.13657,673.09507)"
+ id="g8458">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,668.07531 h 22"
+ id="path8446"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8448"
+ d="m 307.29821,653.07531 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8450"
+ d="m 307.29821,663.07531 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,658.07531 h 22"
+ id="path8452"
+ inkscape:connector-curvature="0" />
+ </g>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 226.61681,613.43343 h 22"
+ id="path8444"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8438"
+ d="m 226.61681,598.43343 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8442"
+ d="m 226.61681,608.43343 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 226.61681,603.43343 h 22"
+ id="path8440"
+ inkscape:connector-curvature="0" />
+ </g>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4385"
+ y="941.57642"
+ x="78.963013">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4387"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4487"
+ y="1037.4526"
+ x="103.09299">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4489"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4536"
+ y="976.86511"
+ x="37.660278">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4538"
+ font-size="4.0000" />
+ </text>
+ <path
+ inkscape:connector-curvature="0"
+ d=""
+ cx="242.94168"
+ cy="308.38486"
+ r="70.205605"
+ id="path4138-6"
+ style="opacity:1;fill:url(#linearGradient4171);fill-opacity:1;stroke:#000000;stroke-width:5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g5318"
+ transform="translate(-1.52033,776.19158)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g6386"
+ transform="translate(545.70091,247.9936)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g7162"
+ transform="translate(-148.94126,91.231707)" />
+ <text
+ xml:space="preserve"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:0px;word-spacing:0px;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;color-interpolat [...]
+ x="399.22723"
+ y="1165.5157"
+ id="text8015"><tspan
+ id="tspan8017"
+ x="399.22723"
+ y="1165.5157" /></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+ x="-1173.8743"
+ y="-161.54916"
+ id="text9295"><tspan
+ id="tspan9297"
+ x="-1173.8743"
+ y="-161.54916" /></text>
+ <text
+ id="text7408-2"
+ class="fil7 fnt4"
+ y="120.33269"
+ x="-1056.6615"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ id="text7422"
+ class="fil7 fnt4"
+ y="147.7993"
+ x="-1040.2886"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4385-9"
+ y="940.73004"
+ x="36.191391">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4387-0"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4487-9"
+ y="1036.6062"
+ x="60.321365">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4489-1"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4536-7"
+ y="976.01868"
+ x="-5.1113439">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4538-7"
+ font-size="4.0000" />
+ </text>
+ <path
+ inkscape:connector-curvature="0"
+ d=""
+ cx="242.94168"
+ cy="308.38486"
+ r="70.205605"
+ id="path4138-6-1"
+ style="opacity:1;fill:url(#linearGradient8503);fill-opacity:1;stroke:#000000;stroke-width:5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g5318-7"
+ transform="translate(-44.29193,775.34517)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g6386-6"
+ transform="translate(502.92932,247.14719)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g7162-7"
+ transform="translate(-191.71286,90.385297)" />
+ <text
+ xml:space="preserve"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:0px;word-spacing:0px;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;color-interpolat [...]
+ x="356.45563"
+ y="1164.6693"
+ id="text8015-3"><tspan
+ id="tspan8017-6"
+ x="356.45563"
+ y="1164.6693" /></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+ x="-1216.6459"
+ y="-162.39554"
+ id="text9295-5"><tspan
+ id="tspan9297-6"
+ x="-1216.6459"
+ y="-162.39554" /></text>
+ <text
+ id="text7408-2-3"
+ class="fil7 fnt4"
+ y="119.48628"
+ x="-1099.4331"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ id="text7422-9"
+ class="fil7 fnt4"
+ y="146.9529"
+ x="-1083.0602"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4385-7"
+ y="949.2207"
+ x="51.757797">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4387-2"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4487-3"
+ y="1045.0969"
+ x="75.887787">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4489-7"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4536-2"
+ y="984.5094"
+ x="10.455062">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4538-5"
+ font-size="4.0000" />
+ </text>
+ <path
+ inkscape:connector-curvature="0"
+ d=""
+ cx="242.94168"
+ cy="308.38486"
+ r="70.205605"
+ id="path4138-6-3"
+ style="opacity:1;fill:url(#linearGradient11272);fill-opacity:1;stroke:#000000;stroke-width:5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g5318-3"
+ transform="translate(-28.72553,783.83589)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g6386-64"
+ transform="translate(518.49571,255.63791)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g7162-03"
+ transform="translate(-176.14646,98.876017)" />
+ <text
+ xml:space="preserve"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:0px;word-spacing:0px;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;color-interpolat [...]
+ x="372.02203"
+ y="1173.16"
+ id="text8015-5"><tspan
+ id="tspan8017-85"
+ x="372.02203"
+ y="1173.16" /></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+ x="-1201.0796"
+ y="-153.90482"
+ id="text9295-0"><tspan
+ id="tspan9297-9"
+ x="-1201.0796"
+ y="-153.90482" /></text>
+ <text
+ id="text7408-2-9"
+ class="fil7 fnt4"
+ y="127.97701"
+ x="-1083.8667"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ id="text7422-8"
+ class="fil7 fnt4"
+ y="155.44362"
+ x="-1067.4938"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4385-2"
+ y="946.75183"
+ x="11.516067">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4387-6"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4487-5"
+ y="1042.6279"
+ x="35.646042">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4489-8"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4536-7-2"
+ y="982.04041"
+ x="-29.786667">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4538-9"
+ font-size="4.0000" />
+ </text>
+ <path
+ inkscape:connector-curvature="0"
+ d=""
+ cx="242.94168"
+ cy="308.38486"
+ r="70.205605"
+ id="path4138-6-6"
+ style="opacity:1;fill:url(#linearGradient9134);fill-opacity:1;stroke:#000000;stroke-width:5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g5318-4"
+ transform="translate(-68.96723,781.36694)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g6386-8"
+ transform="translate(478.25401,253.16896)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g7162-7-4"
+ transform="translate(-216.38817,96.407057)" />
+ <text
+ xml:space="preserve"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:0px;word-spacing:0px;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;color-interpolat [...]
+ x="331.78033"
+ y="1170.691"
+ id="text8015-0"><tspan
+ id="tspan8017-8"
+ x="331.78033"
+ y="1170.691" /></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+ x="-1241.3212"
+ y="-156.37375"
+ id="text9295-6-9"><tspan
+ id="tspan9297-2"
+ x="-1241.3212"
+ y="-156.37375" /></text>
+ <text
+ id="text7408-2-4"
+ class="fil7 fnt4"
+ y="125.50807"
+ x="-1124.1084"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ id="text7422-7"
+ class="fil7 fnt4"
+ y="152.97469"
+ x="-1107.7355"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4385-3"
+ y="948.56403"
+ x="91.113441">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4387-09"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4487-2"
+ y="1044.4402"
+ x="115.24342">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4489-5"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4536-4"
+ y="983.85272"
+ x="49.810707">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4538-0"
+ font-size="4.0000" />
+ </text>
+ <path
+ inkscape:connector-curvature="0"
+ d=""
+ cx="242.94168"
+ cy="308.38486"
+ r="70.205605"
+ id="path4138-6-5"
+ style="opacity:1;fill:url(#linearGradient4171-3);fill-opacity:1;stroke:#000000;stroke-width:5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g5318-47"
+ transform="translate(10.6301,783.17919)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g6386-7"
+ transform="translate(557.85134,254.98121)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g7162-5"
+ transform="translate(-136.79083,98.219323)" />
+ <text
+ xml:space="preserve"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:0px;word-spacing:0px;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;color-interpolat [...]
+ x="411.37766"
+ y="1172.5033"
+ id="text8015-4"><tspan
+ id="tspan8017-81"
+ x="411.37766"
+ y="1172.5033" /></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+ x="-1161.7239"
+ y="-154.56154"
+ id="text9295-2"><tspan
+ id="tspan9297-8"
+ x="-1161.7239"
+ y="-154.56154" /></text>
+ <text
+ id="text7408-2-93"
+ class="fil7 fnt4"
+ y="127.3203"
+ x="-1044.5111"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ id="text7422-6"
+ class="fil7 fnt4"
+ y="154.78691"
+ x="-1028.1382"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4385-9-8"
+ y="947.71765"
+ x="48.34182">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4387-0-0"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4487-9-2"
+ y="1043.5938"
+ x="72.471794">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4489-1-1"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4536-7-0"
+ y="983.00629"
+ x="7.0390859">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4538-7-5"
+ font-size="4.0000" />
+ </text>
+ <path
+ inkscape:connector-curvature="0"
+ d=""
+ cx="242.94168"
+ cy="308.38486"
+ r="70.205605"
+ id="path4138-6-1-1"
+ style="opacity:1;fill:url(#linearGradient8503-5);fill-opacity:1;stroke:#000000;stroke-width:5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g5318-7-0"
+ transform="translate(-32.1415,782.33278)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g6386-6-6"
+ transform="translate(515.07975,254.1348)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g7162-7-46"
+ transform="translate(-179.56243,97.372913)" />
+ <text
+ xml:space="preserve"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:0px;word-spacing:0px;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;color-interpolat [...]
+ x="368.60605"
+ y="1171.6569"
+ id="text8015-3-2"><tspan
+ id="tspan8017-6-5"
+ x="368.60605"
+ y="1171.6569" /></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+ x="-1204.4955"
+ y="-155.40791"
+ id="text9295-5-8"><tspan
+ id="tspan9297-6-6"
+ x="-1204.4955"
+ y="-155.40791" /></text>
+ <text
+ id="text7408-2-3-2"
+ class="fil7 fnt4"
+ y="126.4739"
+ x="-1087.2827"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ id="text7422-9-8"
+ class="fil7 fnt4"
+ y="153.94051"
+ x="-1070.9098"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4385-7-4"
+ y="956.20831"
+ x="63.908226">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4387-2-7"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4487-3-2"
+ y="1052.0845"
+ x="88.038216">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4489-7-4"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4536-2-0"
+ y="991.49701"
+ x="22.605492">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4538-5-6"
+ font-size="4.0000" />
+ </text>
+ <path
+ inkscape:connector-curvature="0"
+ d=""
+ cx="242.94168"
+ cy="308.38486"
+ r="70.205605"
+ id="path4138-6-3-2"
+ style="opacity:1;fill:url(#linearGradient11272-3);fill-opacity:1;stroke:#000000;stroke-width:5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g5318-3-1"
+ transform="translate(-16.5751,790.8235)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g6386-64-3"
+ transform="translate(530.64614,262.62552)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g7162-03-1"
+ transform="translate(-163.99603,105.86363)" />
+ <text
+ xml:space="preserve"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:0px;word-spacing:0px;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;color-interpolat [...]
+ x="384.17245"
+ y="1180.1476"
+ id="text8015-5-1"><tspan
+ id="tspan8017-85-0"
+ x="384.17245"
+ y="1180.1476" /></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+ x="-1188.9291"
+ y="-146.91719"
+ id="text9295-0-3"><tspan
+ id="tspan9297-9-4"
+ x="-1188.9291"
+ y="-146.91719" /></text>
+ <text
+ id="text7408-2-9-0"
+ class="fil7 fnt4"
+ y="134.96461"
+ x="-1071.7163"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ id="text7422-8-3"
+ class="fil7 fnt4"
+ y="162.43123"
+ x="-1055.3434"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4385-2-9"
+ y="953.73944"
+ x="23.666496">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4387-6-1"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4487-5-9"
+ y="1049.6155"
+ x="47.796471">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4489-8-6"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4536-7-2-9"
+ y="989.02802"
+ x="-17.636238">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4538-9-3"
+ font-size="4.0000" />
+ </text>
+ <path
+ inkscape:connector-curvature="0"
+ d=""
+ cx="242.94168"
+ cy="308.38486"
+ r="70.205605"
+ id="path4138-6-6-3"
+ style="opacity:1;fill:url(#linearGradient9134-5);fill-opacity:1;stroke:#000000;stroke-width:5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g5318-4-6"
+ transform="translate(-56.8168,788.35455)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g6386-8-4"
+ transform="translate(490.40444,260.15657)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g7162-7-4-0"
+ transform="translate(-204.23774,103.39467)" />
+ <text
+ xml:space="preserve"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:0px;word-spacing:0px;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;color-interpolat [...]
+ x="343.93076"
+ y="1177.6786"
+ id="text8015-0-0"><tspan
+ id="tspan8017-8-4"
+ x="343.93076"
+ y="1177.6786" /></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+ x="-1229.1708"
+ y="-149.38612"
+ id="text9295-6-9-6"><tspan
+ id="tspan9297-2-2"
+ x="-1229.1708"
+ y="-149.38612" /></text>
+ <text
+ id="text7408-2-4-6"
+ class="fil7 fnt4"
+ y="132.49568"
+ x="-1111.958"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ id="text7422-7-7"
+ class="fil7 fnt4"
+ y="159.9623"
+ x="-1095.5851"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4385-8"
+ y="997.8457"
+ x="68.53643">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4387-1"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4487-28"
+ y="1093.7219"
+ x="92.666405">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4489-9"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4536-3"
+ y="1033.1344"
+ x="27.233698">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4538-6"
+ font-size="4.0000" />
+ </text>
+ <path
+ inkscape:connector-curvature="0"
+ d=""
+ cx="242.94168"
+ cy="308.38486"
+ r="70.205605"
+ id="path4138-6-8"
+ style="opacity:1;fill:url(#linearGradient4171-36);fill-opacity:1;stroke:#000000;stroke-width:5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g5318-1"
+ transform="translate(-11.94691,832.46088)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g6386-1"
+ transform="translate(535.27433,304.2629)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g7162-0"
+ transform="translate(-159.36784,147.50101)" />
+ <text
+ xml:space="preserve"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:0px;word-spacing:0px;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;color-interpolat [...]
+ x="388.80066"
+ y="1221.785"
+ id="text8015-8"><tspan
+ id="tspan8017-5"
+ x="388.80066"
+ y="1221.785" /></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+ x="-1184.3009"
+ y="-105.27985"
+ id="text9295-06"><tspan
+ id="tspan9297-4"
+ x="-1184.3009"
+ y="-105.27985" /></text>
+ <text
+ id="text7408-2-6"
+ class="fil7 fnt4"
+ y="176.60199"
+ x="-1067.0881"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ id="text7422-2"
+ class="fil7 fnt4"
+ y="204.0686"
+ x="-1050.7152"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4385-9-5"
+ y="996.99933"
+ x="25.764811">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4387-0-8"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4487-9-6"
+ y="1092.8755"
+ x="49.894783">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4489-1-2"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4536-7-8"
+ y="1032.288"
+ x="-15.537924">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4538-7-4"
+ font-size="4.0000" />
+ </text>
+ <path
+ inkscape:connector-curvature="0"
+ d=""
+ cx="242.94168"
+ cy="308.38486"
+ r="70.205605"
+ id="path4138-6-1-7"
+ style="opacity:1;fill:url(#linearGradient8503-3);fill-opacity:1;stroke:#000000;stroke-width:5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g5318-7-2"
+ transform="translate(-54.71851,831.61447)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g6386-6-9"
+ transform="translate(492.50274,303.41649)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g7162-7-9"
+ transform="translate(-202.13944,146.6546)" />
+ <text
+ xml:space="preserve"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:0px;word-spacing:0px;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;color-interpolat [...]
+ x="346.02905"
+ y="1220.9386"
+ id="text8015-3-0"><tspan
+ id="tspan8017-6-8"
+ x="346.02905"
+ y="1220.9386" /></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+ x="-1227.0725"
+ y="-106.12623"
+ id="text9295-5-1"><tspan
+ id="tspan9297-6-3"
+ x="-1227.0725"
+ y="-106.12623" /></text>
+ <text
+ id="text7408-2-3-1"
+ class="fil7 fnt4"
+ y="175.75558"
+ x="-1109.8597"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ id="text7422-9-1"
+ class="fil7 fnt4"
+ y="203.2222"
+ x="-1093.4868"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4385-7-0"
+ y="1005.49"
+ x="41.331215">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4387-2-3"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4487-3-4"
+ y="1101.3662"
+ x="65.461205">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4489-7-0"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4536-2-3"
+ y="1040.7787"
+ x="0.028482242">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4538-5-9"
+ font-size="4.0000" />
+ </text>
+ <path
+ inkscape:connector-curvature="0"
+ d=""
+ cx="242.94168"
+ cy="308.38486"
+ r="70.205605"
+ id="path4138-6-3-1"
+ style="opacity:1;fill:url(#linearGradient11272-5);fill-opacity:1;stroke:#000000;stroke-width:5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g5318-3-5"
+ transform="translate(-39.15211,840.10519)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g6386-64-6"
+ transform="translate(508.06913,311.90721)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g7162-03-6"
+ transform="translate(-186.57304,155.14532)" />
+ <text
+ xml:space="preserve"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:0px;word-spacing:0px;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;color-interpolat [...]
+ x="361.59546"
+ y="1229.4293"
+ id="text8015-5-4"><tspan
+ id="tspan8017-85-00"
+ x="361.59546"
+ y="1229.4293" /></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+ x="-1211.5061"
+ y="-97.635506"
+ id="text9295-0-4"><tspan
+ id="tspan9297-9-6"
+ x="-1211.5061"
+ y="-97.635506" /></text>
+ <text
+ id="text7408-2-9-2"
+ class="fil7 fnt4"
+ y="184.24631"
+ x="-1094.2933"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ id="text7422-8-6"
+ class="fil7 fnt4"
+ y="211.71292"
+ x="-1077.9204"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4385-2-7"
+ y="1003.0211"
+ x="1.0894868">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4387-6-5"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4487-5-6"
+ y="1098.8972"
+ x="25.219461">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4489-8-9"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4536-7-2-8"
+ y="1038.3097"
+ x="-40.213249">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4538-9-7"
+ font-size="4.0000" />
+ </text>
+ <path
+ inkscape:connector-curvature="0"
+ d=""
+ cx="242.94168"
+ cy="308.38486"
+ r="70.205605"
+ id="path4138-6-6-2"
+ style="opacity:1;fill:url(#linearGradient9134-6);fill-opacity:1;stroke:#000000;stroke-width:5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g5318-4-2"
+ transform="translate(-79.39381,837.63624)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g6386-8-7"
+ transform="translate(467.82743,309.43826)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g7162-7-4-6"
+ transform="translate(-226.81475,152.67636)" />
+ <text
+ xml:space="preserve"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:0px;word-spacing:0px;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;color-interpolat [...]
+ x="321.35376"
+ y="1226.9603"
+ id="text8015-0-1"><tspan
+ id="tspan8017-8-3"
+ x="321.35376"
+ y="1226.9603" /></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+ x="-1251.7478"
+ y="-100.10444"
+ id="text9295-6-9-2"><tspan
+ id="tspan9297-2-1"
+ x="-1251.7478"
+ y="-100.10444" /></text>
+ <text
+ id="text7408-2-4-5"
+ class="fil7 fnt4"
+ y="181.77737"
+ x="-1134.535"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ id="text7422-7-9"
+ class="fil7 fnt4"
+ y="209.24399"
+ x="-1118.1621"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:2, 2;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 281.38676,621.20107 v -24"
+ id="path9256"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path9258"
+ d="m 297.38676,621.20107 v -24"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:2, 2;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 278.20777,618.70107 5.23583,-0.5 1.24528,-1.5 c 0.63779,-2.72928 0.35844,-5.39277 0.70482,-8.22865 l 1.031,-2.77135 c 0.6011,0.93087 1.0488,1.60565 1.49057,2.5 l 1.63483,-0.5 0.74527,-2 0.74529,3 c 0.82997,0.4772 0.58996,-1.03185 1.26815,-0.96041 0.61666,0.86004 0.59215,2.2944 1.16854,3.18596 0.0377,1.92213 0.009,3.84969 0.0182,5.77441 l 1.49056,2 5.51667,-0.5"
+ id="path9271"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccccccc" />
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4385-70"
+ y="576.19141"
+ x="38.181553">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4387-9"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4487-36"
+ y="672.06763"
+ x="62.311527">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4489-0"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4536-6"
+ y="611.4801"
+ x="-3.1211822">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4538-2"
+ font-size="4.0000" />
+ </text>
+ <path
+ inkscape:connector-curvature="0"
+ d=""
+ cx="242.94168"
+ cy="308.38486"
+ r="70.205605"
+ id="path4138-6-61"
+ style="opacity:1;fill:url(#linearGradient4171-367);fill-opacity:1;stroke:#000000;stroke-width:5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g5318-8"
+ transform="translate(-42.30179,410.80656)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g6386-79"
+ transform="translate(504.91945,-117.39142)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g7162-2"
+ transform="translate(-189.72272,-274.15331)" />
+ <text
+ xml:space="preserve"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:0px;word-spacing:0px;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;color-interpolat [...]
+ x="358.44577"
+ y="800.13074"
+ id="text8015-02"><tspan
+ id="tspan8017-3"
+ x="358.44577"
+ y="800.13074" /></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+ x="-1214.6558"
+ y="-526.9342"
+ id="text9295-7"><tspan
+ id="tspan9297-5"
+ x="-1214.6558"
+ y="-526.9342" /></text>
+ <text
+ id="text7408-2-92"
+ class="fil7 fnt4"
+ y="-245.05234"
+ x="-1097.443"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ id="text7422-28"
+ class="fil7 fnt4"
+ y="-217.58572"
+ x="-1081.0701"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4385-9-9"
+ y="575.34503"
+ x="-4.5900698">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4387-0-7"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4487-9-3"
+ y="671.22119"
+ x="19.539906">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4489-1-6"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4536-7-1"
+ y="610.63367"
+ x="-45.892803">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4538-7-2"
+ font-size="4.0000" />
+ </text>
+ <path
+ inkscape:connector-curvature="0"
+ d=""
+ cx="242.94168"
+ cy="308.38486"
+ r="70.205605"
+ id="path4138-6-1-9"
+ style="opacity:1;fill:url(#linearGradient8503-56);fill-opacity:1;stroke:#000000;stroke-width:5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g5318-7-3"
+ transform="translate(-85.07339,409.96015)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g6386-6-1"
+ transform="translate(462.14786,-118.23783)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g7162-7-94"
+ transform="translate(-232.49432,-274.99972)" />
+ <text
+ xml:space="preserve"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:0px;word-spacing:0px;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;color-interpolat [...]
+ x="315.67416"
+ y="799.2843"
+ id="text8015-3-7"><tspan
+ id="tspan8017-6-84"
+ x="315.67416"
+ y="799.2843" /></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+ x="-1257.4274"
+ y="-527.78058"
+ id="text9295-5-5"><tspan
+ id="tspan9297-6-0"
+ x="-1257.4274"
+ y="-527.78058" /></text>
+ <text
+ id="text7408-2-3-3"
+ class="fil7 fnt4"
+ y="-245.89874"
+ x="-1140.2146"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ id="text7422-9-6"
+ class="fil7 fnt4"
+ y="-218.43213"
+ x="-1123.8417"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4385-7-1"
+ y="583.83569"
+ x="10.976336">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4387-2-0"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4487-3-6"
+ y="679.71191"
+ x="35.106327">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4489-7-3"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4536-2-2"
+ y="619.12439"
+ x="-30.326397">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4538-5-0"
+ font-size="4.0000" />
+ </text>
+ <path
+ inkscape:connector-curvature="0"
+ d=""
+ cx="242.94168"
+ cy="308.38486"
+ r="70.205605"
+ id="path4138-6-3-6"
+ style="opacity:1;fill:url(#linearGradient11272-2);fill-opacity:1;stroke:#000000;stroke-width:5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g5318-3-15"
+ transform="translate(-69.50699,418.45087)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g6386-64-5"
+ transform="translate(477.71425,-109.74711)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g7162-03-4"
+ transform="translate(-216.92792,-266.509)" />
+ <text
+ xml:space="preserve"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:0px;word-spacing:0px;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;color-interpolat [...]
+ x="331.24057"
+ y="807.77502"
+ id="text8015-5-7"><tspan
+ id="tspan8017-85-6"
+ x="331.24057"
+ y="807.77502" /></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+ x="-1241.861"
+ y="-519.28986"
+ id="text9295-0-5"><tspan
+ id="tspan9297-9-69"
+ x="-1241.861"
+ y="-519.28986" /></text>
+ <text
+ id="text7408-2-9-3"
+ class="fil7 fnt4"
+ y="-237.40802"
+ x="-1124.6482"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ id="text7422-8-7"
+ class="fil7 fnt4"
+ y="-209.94141"
+ x="-1108.2753"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4385-2-4"
+ y="581.36682"
+ x="-29.265392">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4387-6-52"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4487-5-5"
+ y="677.24292"
+ x="-5.1354189">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4489-8-4"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4536-7-2-7"
+ y="616.6554"
+ x="-70.56813">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4538-9-4"
+ font-size="4.0000" />
+ </text>
+ <path
+ inkscape:connector-curvature="0"
+ d=""
+ cx="242.94168"
+ cy="308.38486"
+ r="70.205605"
+ id="path4138-6-6-4"
+ style="opacity:1;fill:url(#linearGradient9134-9);fill-opacity:1;stroke:#000000;stroke-width:5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g5318-4-3"
+ transform="translate(-109.74869,415.98192)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g6386-8-0"
+ transform="translate(437.47255,-112.21606)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g7162-7-4-7"
+ transform="translate(-257.16963,-268.97796)" />
+ <text
+ xml:space="preserve"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:0px;word-spacing:0px;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;color-interpolat [...]
+ x="290.99887"
+ y="805.30603"
+ id="text8015-0-8"><tspan
+ id="tspan8017-8-6"
+ x="290.99887"
+ y="805.30603" /></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+ x="-1282.1027"
+ y="-521.75879"
+ id="text9295-6-9-8"><tspan
+ id="tspan9297-2-8"
+ x="-1282.1027"
+ y="-521.75879" /></text>
+ <text
+ id="text7408-2-4-4"
+ class="fil7 fnt4"
+ y="-239.87695"
+ x="-1164.8899"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ id="text7422-7-3"
+ class="fil7 fnt4"
+ y="-212.41034"
+ x="-1148.517"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <g
+ id="g9008"
+ transform="matrix(0,-1,-1,0,897.59766,897.59766)">
+ <g
+ id="g9609-3"
+ transform="matrix(1.1398332,0,0,-1.0716348,-166.27518,1345.6635)">
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#ffbb00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.90480703;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 405.47382,680.22549 h 3.5 v 15.87216 h -3.5 z"
+ id="rect8336-5"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ </g>
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 296.39731,615.20114 h 2 v -1 h -2 z"
+ id="rect9666"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <rect
+ transform="scale(1,-1)"
+ y="-613.20117"
+ x="296.39731"
+ height="1"
+ width="1"
+ id="rect9666-6"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ transform="scale(1,-1)"
+ y="-609.20117"
+ x="296.39731"
+ height="1"
+ width="1"
+ id="rect9666-62"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ transform="scale(1,-1)"
+ y="-605.20117"
+ x="296.39731"
+ height="1"
+ width="1"
+ id="rect9666-8"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path8975"
+ d="m 296.39731,611.20114 h 2 v -1 h -2 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 296.39731,607.20114 h 2 v -1 h -2 z"
+ id="path8977"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path8997"
+ d="m 296.39731,603.20114 h 2 v -1 h -2 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8714"
+ width="1"
+ height="1"
+ x="296.39731"
+ y="-601.20117"
+ transform="scale(1,-1)" />
+ </g>
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_graph_palette-24.svg b/pixmaps/src/gwy_graph_palette-24.svg
new file mode 100644
index 0000000..c2026e0
--- /dev/null
+++ b/pixmaps/src/gwy_graph_palette-24.svg
@@ -0,0 +1,118 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8691"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_graph_palette-24.svg">
+ <defs
+ id="defs8693">
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8648"
+ id="linearGradient8654"
+ x1="363.15701"
+ y1="549.86188"
+ x2="387.15701"
+ y2="549.86188"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-139.12864,-80.867386)" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient8648">
+ <stop
+ style="stop-color:#000200;stop-opacity:1"
+ offset="0"
+ id="stop8650" />
+ <stop
+ id="stop8714"
+ offset="0.25"
+ style="stop-color:#4696db;stop-opacity:1" />
+ <stop
+ id="stop8710"
+ offset="0.5"
+ style="stop-color:#ffbb00;stop-opacity:1" />
+ <stop
+ style="stop-color:#fd9044;stop-opacity:1"
+ offset="0.75"
+ id="stop8712" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1"
+ offset="1"
+ id="stop8652" />
+ </linearGradient>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="18.627844"
+ inkscape:cx="26.866213"
+ inkscape:cy="17.545002"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8696">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-224.02837,-448.99442)">
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:url(#linearGradient8654);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8646"
+ width="23"
+ height="7"
+ x="224.52837"
+ y="465.49442" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 224.77711,462.99442 c 3.25126,0 4.86316,-2.23932 5,-5.5 1.39374,-0.18153 0.9258,-1.51887 1,-2.48255 -0.182,-1.71649 0.63545,-2.15286 2.00004,-3.51745 1.13008,0.40532 2.59771,1.42424 3.33256,1.67936 1.04301,-1.06546 3.56254,-3.70957 4.54238,-1.85851 1.46988,3.00602 1.49428,7.77847 4.20337,9.25849 1.4301,0.036 1.17291,1.92066 2.92169,1.92066"
+ id="path8113"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccc" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_graph_pointer-24.svg b/pixmaps/src/gwy_graph_pointer-24.svg
new file mode 100644
index 0000000..3d1cc23
--- /dev/null
+++ b/pixmaps/src/gwy_graph_pointer-24.svg
@@ -0,0 +1,150 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg9687"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_graph_pointer-24.svg"
+ inkscape:export-filename="gwy_graph_function-24.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96">
+ <defs
+ id="defs9689">
+ <filter
+ id="filter115041"
+ style="color-interpolation-filters:sRGB"
+ inkscape:collect="always">
+ <feBlend
+ id="feBlend115043"
+ in2="BackgroundImage"
+ mode="normal"
+ inkscape:collect="always" />
+ </filter>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="21.60996"
+ inkscape:cx="-53.066858"
+ inkscape:cy="1.6884107"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-global="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata9692">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-306.29821,-648.57531)">
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#4696db;stroke-width:1.00000012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8419"
+ width="23"
+ height="23"
+ x="306.79822"
+ y="649.07532" />
+ <g
+ id="g8458"
+ transform="rotate(-90,318.79821,660.07531)">
+ <path
+ inkscape:connector-curvature="0"
+ id="path8446"
+ d="m 307.29821,668.07531 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,653.07531 h 22"
+ id="path8448"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,663.07531 h 22"
+ id="path8450"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8452"
+ d="m 307.29821,658.07531 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ </g>
+ <path
+ inkscape:connector-curvature="0"
+ id="path8444"
+ d="m 307.29821,668.07531 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,653.07531 h 22"
+ id="path8438"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,663.07531 h 22"
+ id="path8442"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8440"
+ d="m 307.29821,658.07531 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 307.41696,671.45774 c 4.2216,-2.92784 3.67521,-17.90348 6.48838,-17.94716 2.81317,-0.0437 2.31267,9.51584 4.58671,9.51584 2.27404,0 1.86655,-4.93098 4.21944,-4.88568 2.35289,0.0453 3.02553,10.81894 6.90984,11.85974"
+ id="path8254-7"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="czzzc" />
+ <path
+ sodipodi:nodetypes="ccccccccc"
+ inkscape:connector-curvature="0"
+ id="path12872"
+ d="m 449.58071,3770.0549 v -48.726 l 33.71627,33.8223 -13.57345,1.8041 9.54446,23.2356 -4.53023,2.0169 -4.53024,2.0169 -9.79569,-23.1237 z"
+ style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.16456819;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter115041);enable-background:new"
+ transform="matrix(0.31446558,0,0,0.31753939,176.48081,-530.56226)" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_graph_ruler-24.svg b/pixmaps/src/gwy_graph_ruler-24.svg
new file mode 100644
index 0000000..aacf538
--- /dev/null
+++ b/pixmaps/src/gwy_graph_ruler-24.svg
@@ -0,0 +1,181 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg9687"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_graph_ruler-24.svg"
+ inkscape:export-filename="gwy_graph_function-24.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96">
+ <defs
+ id="defs9689" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="9.0558017"
+ inkscape:cx="-3.7152631"
+ inkscape:cy="-15.004706"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-global="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata9692">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-306.29821,-648.57531)">
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#4696db;stroke-width:1.00000012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8419"
+ width="23"
+ height="23"
+ x="306.79822"
+ y="649.07532" />
+ <g
+ id="g8458"
+ transform="rotate(-90,318.7982,660.07531)">
+ <path
+ inkscape:connector-curvature="0"
+ id="path8446"
+ d="m 307.29821,668.07531 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,653.07531 h 22"
+ id="path8448"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,663.07531 h 22"
+ id="path8450"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8452"
+ d="m 307.29821,658.07531 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ </g>
+ <path
+ inkscape:connector-curvature="0"
+ id="path8444"
+ d="m 307.2982,668.0753 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.2982,653.0753 h 22"
+ id="path8438"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.2982,663.0753 h 22"
+ id="path8442"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8440"
+ d="m 307.2982,658.0753 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 307.41695,671.45773 c 4.2216,-2.92784 3.67521,-17.90348 6.48838,-17.94716 2.81317,-0.0437 2.31267,9.51584 4.58671,9.51584 2.27404,0 1.86655,-4.93098 4.21944,-4.88568 2.35289,0.0453 3.02553,10.81894 6.90984,11.85974"
+ id="path8254-7"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="czzzc" />
+ <g
+ id="g8500"
+ transform="translate(31.064415,-1.3540115)">
+ <rect
+ y="650.42932"
+ x="291.7338"
+ height="22"
+ width="5.9999995"
+ id="rect12874"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#ffbb00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path12876"
+ d="m 292.23363,658.42945 h 3"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path12880"
+ d="m 292.23363,655.42945 h 2.00001"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 292.23363,652.42945 h 3"
+ id="path12882"
+ inkscape:connector-curvature="0" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path12884"
+ d="m 292.23363,667.42945 h 2.00001"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path12890"
+ d="m 292.23363,661.42945 h 2.00001"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 292.23363,664.42945 h 3"
+ id="path12892"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8091"
+ d="m 292.23363,670.42945 h 3"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_graph_vertical-24.svg b/pixmaps/src/gwy_graph_vertical-24.svg
new file mode 100644
index 0000000..3e0724b
--- /dev/null
+++ b/pixmaps/src/gwy_graph_vertical-24.svg
@@ -0,0 +1,132 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg9687"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_graph_vertical-24.svg"
+ inkscape:export-filename="gwy_graph_function-24.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96">
+ <defs
+ id="defs9689" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="2.6914153"
+ inkscape:cx="-107.77045"
+ inkscape:cy="10.257864"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-global="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata9692">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-306.29821,-648.57531)">
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#4696db;stroke-width:1.00000012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8419"
+ width="23"
+ height="23"
+ x="306.79822"
+ y="649.07532" />
+ <g
+ id="g8458"
+ transform="rotate(-90,318.79821,660.07531)">
+ <path
+ inkscape:connector-curvature="0"
+ id="path8446"
+ d="m 307.29821,668.07531 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,653.07531 h 22"
+ id="path8448"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,663.07531 h 22"
+ id="path8450"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8452"
+ d="m 307.29821,658.07531 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ </g>
+ <path
+ inkscape:connector-curvature="0"
+ id="path8444"
+ d="m 307.29821,668.07531 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,653.07531 h 22"
+ id="path8438"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,663.07531 h 22"
+ id="path8442"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8440"
+ d="m 307.29821,658.07531 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 309.23442,671.52196 c 2.92784,-4.2216 17.90348,-3.67521 17.94716,-6.48838 0.0437,-2.81317 -9.51584,-2.31267 -9.51584,-4.58671 0,-2.27404 4.93098,-1.86655 4.88568,-4.21944 -0.0453,-2.35289 -10.81894,-3.02553 -11.85974,-6.90984"
+ id="path8254-7"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="czzzc" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_graph_zoom_fit-24.svg b/pixmaps/src/gwy_graph_zoom_fit-24.svg
new file mode 100644
index 0000000..0087f7d
--- /dev/null
+++ b/pixmaps/src/gwy_graph_zoom_fit-24.svg
@@ -0,0 +1,405 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24.000002"
+ height="24.000002"
+ viewBox="0 0 6.3500004 6.3500004"
+ version="1.1"
+ id="svg8583"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_graph_zoom_fit-24.svg">
+ <defs
+ id="defs8577">
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4782-7-2">
+ <circle
+ style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="circle4784-1-2"
+ cx="276.29214"
+ cy="151.18121"
+ r="19.066629" />
+ </clipPath>
+ <filter
+ height="1.1263148"
+ y="-0.063157417"
+ width="1.1142865"
+ x="-0.057143249"
+ id="filter4238-9-3"
+ style="color-interpolation-filters:sRGB">
+ <feGaussianBlur
+ id="feGaussianBlur4240-4-6"
+ stdDeviation="2.4600469" />
+ </filter>
+ <filter
+ height="1.025263"
+ y="-0.012631484"
+ width="1.0228573"
+ x="-0.011428649"
+ id="filter4254-1-3"
+ style="color-interpolation-filters:sRGB">
+ <feGaussianBlur
+ id="feGaussianBlur4256-7-1"
+ stdDeviation="0.49200938" />
+ </filter>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath8518">
+ <g
+ style="fill:none"
+ id="g8532"
+ transform="matrix(0.91094965,0,0,0.91094965,17.85019,178.21156)">
+ <g
+ style="fill:none"
+ id="g8522"
+ clip-path="url(#clipPath4782-7-2)"
+ transform="matrix(-0.40789887,0.26719843,-0.26719843,-0.40789887,540.73338,515.16801)">
+ <path
+ id="path8520"
+ style="fill:none;stroke:#868789;stroke-width:1.4453578;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none"
+ d="m 276.3071,132.25651 a 21.406287,18.906167 0 0 1 21.40628,18.90617 21.406287,18.906167 0 1 1 -21.40628,-18.90617 z"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ style="fill:none"
+ id="g8530"
+ transform="matrix(-0.02114565,0.13039867,-0.13039867,-0.02114565,432.9912,502.16397)">
+ <circle
+ cx="242.94168"
+ cy="308.38486"
+ r="70.205605"
+ id="circle8524"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#505050;stroke-width:12.46485138;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8526"
+ d="m 228.98386,281.59914 c -19.82968,23.31175 -33.58074,74.72281 -44.4409,50.95241 -3.08421,-7.44468 -4.78632,-15.60691 -4.78632,-24.16669 0,-34.89614 28.2889,-63.18505 63.18504,-63.18505 13.77337,0 26.51744,4.40699 36.89904,11.88781 15.92115,11.47255 -31.02718,1.19977 -50.85686,24.51152 z"
+ style="opacity:1;fill:none;fill-opacity:0.42452829;stroke:none;stroke-width:5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter4238-9-3)" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8528"
+ d="m 228.98386,281.59914 c -19.82968,23.31175 -33.58074,74.72281 -44.4409,50.95241 -3.08421,-7.44468 -4.78632,-15.60691 -4.78632,-24.16669 0,-34.89614 28.2889,-63.18505 63.18504,-63.18505 13.77337,0 26.51744,4.40699 36.89904,11.88781 15.92115,11.47255 -31.02718,1.19977 -50.85686,24.51152 z"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:none;stroke-width:5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter4254-1-3)" />
+ </g>
+ </g>
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath8514">
+ <circle
+ style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="circle8512"
+ cx="276.29214"
+ cy="151.18121"
+ r="19.066629" />
+ </clipPath>
+ <linearGradient
+ gradientUnits="userSpaceOnUse"
+ y2="361.22473"
+ x2="272.91217"
+ y1="247.92804"
+ x1="207.50029"
+ id="linearGradient4146-6-8"
+ xlink:href="#linearGradient4270" />
+ <linearGradient
+ id="linearGradient4270">
+ <stop
+ style="stop-color:#3c98f4;stop-opacity:0.12156863"
+ offset="0"
+ id="stop4272" />
+ <stop
+ style="stop-color:#f1f5fb;stop-opacity:0.12156863"
+ offset="1"
+ id="stop4274" />
+ </linearGradient>
+ <filter
+ height="1.1263148"
+ y="-0.063157417"
+ width="1.1142865"
+ x="-0.057143249"
+ id="filter8522"
+ style="color-interpolation-filters:sRGB">
+ <feGaussianBlur
+ id="feGaussianBlur8520"
+ stdDeviation="2.4600469" />
+ </filter>
+ <linearGradient
+ gradientUnits="userSpaceOnUse"
+ y2="312.29819"
+ x2="227.00648"
+ y1="288.19104"
+ x1="214.93521"
+ id="linearGradient4204-9-1"
+ xlink:href="#linearGradient4198" />
+ <linearGradient
+ id="linearGradient4198">
+ <stop
+ id="stop4200-0"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:0.39215687" />
+ <stop
+ id="stop4202"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:0.3137255" />
+ </linearGradient>
+ <filter
+ height="1.025263"
+ y="-0.012631484"
+ width="1.0228573"
+ x="-0.011428649"
+ id="filter8530"
+ style="color-interpolation-filters:sRGB">
+ <feGaussianBlur
+ id="feGaussianBlur8528"
+ stdDeviation="0.49200938" />
+ </filter>
+ <linearGradient
+ gradientTransform="matrix(0.26458333,0,0,0.26458333,-95.128371,152.83863)"
+ inkscape:collect="always"
+ xlink:href="#linearGradient12587-6"
+ id="linearGradient12593-3"
+ x1="363.08881"
+ y1="538.68573"
+ x2="365.21747"
+ y2="540.84064"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient12587-6">
+ <stop
+ style="stop-color:#6daa34;stop-opacity:1"
+ offset="0"
+ id="stop12589-7" />
+ <stop
+ id="stop13669-5"
+ offset="0.5"
+ style="stop-color:#7db846;stop-opacity:1" />
+ <stop
+ style="stop-color:#6daa34;stop-opacity:1"
+ offset="1"
+ id="stop12591-3" />
+ </linearGradient>
+ <filter
+ inkscape:collect="always"
+ style="color-interpolation-filters:sRGB"
+ id="filter18492"
+ x="-0.047411256"
+ width="1.0948225"
+ y="-0.04860355"
+ height="1.0972071">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.42995752"
+ id="feGaussianBlur18494" />
+ </filter>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="49.397768"
+ inkscape:cx="12.202802"
+ inkscape:cy="13.788727"
+ inkscape:document-units="mm"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata8580">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-4.3362379e-6,-290.65)">
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#4696db;stroke-width:0.26458338px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8419"
+ width="6.0854168"
+ height="6.0854168"
+ x="0.13229603"
+ y="290.78229" />
+ <g
+ id="g8458"
+ transform="matrix(0,-0.26458333,0.26458333,0,-171.33763,378.0414)">
+ <path
+ inkscape:connector-curvature="0"
+ id="path8446"
+ d="m 307.29821,668.07531 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,653.07531 h 22"
+ id="path8448"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,663.07531 h 22"
+ id="path8450"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8452"
+ d="m 307.29821,658.07531 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ </g>
+ <path
+ inkscape:connector-curvature="0"
+ id="path8444"
+ d="M 0.26458564,295.80937 H 6.0854189"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 0.26458564,291.84062 H 6.0854189"
+ id="path8438"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 0.26458564,294.48646 H 6.0854189"
+ id="path8442"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.52916664;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 6.0780423,296.10276 c -4.2185774,0 -4.362479,-4.86368 -5.80608008,-4.86368"
+ id="path8254-7"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8440"
+ d="M 0.26458564,293.16354 H 6.0854189"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <g
+ id="g18446"
+ transform="matrix(0.26458333,0,0,0.26458333,-94.674712,144.57226)"
+ style="opacity:0.5;filter:url(#filter18492)">
+ <path
+ inkscape:connector-curvature="0"
+ id="path18369"
+ d="m 363.68784,568.4473 -5.08846,5.03989 c -0.0998,0.0989 -0.11276,0.3176 -0.0177,0.42101 l 1.80326,1.96183 c 0.095,0.10341 0.32123,0.11658 0.42097,0.0177 l 5.08846,-5.0399 z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.99607843"
+ sodipodi:nodetypes="csssscc" />
+ <circle
+ transform="rotate(99.210991)"
+ cx="496.39133"
+ cy="-457.18619"
+ r="8.4484291"
+ id="circle18383"
+ style="opacity:1;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+ <path
+ inkscape:connector-curvature="0"
+ id="path4717-0-5"
+ d="m 1.7660008,294.51251 -1.3463217,1.33347 c -0.0264054,0.0262 -0.0298344,0.084 -0.004683,0.11139 l 0.23855614,0.25953 0.23855363,0.25954 c 0.0251354,0.0274 0.0849947,0.0308 0.11138433,0.005 l 1.3463217,-1.33347 -0.2919042,-0.31757 z"
+ style="fill:url(#linearGradient12593-3);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.07937501;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="csscssccc" />
+ <g
+ id="g18291"
+ transform="matrix(0.24102209,0,0,0.24102209,-89.770676,166.19959)">
+ <g
+ id="g4751-3"
+ clip-path="url(#clipPath4782-7-2)"
+ transform="matrix(-0.40789887,0.26719843,-0.26719843,-0.40789887,540.73338,515.16801)">
+ <path
+ id="path4532-9"
+ style="fill:#ffffff;stroke:#868789;stroke-width:1.4453578;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none"
+ d="m 276.3071,132.25651 a 21.406287,18.906167 0 0 1 21.40628,18.90617 21.406287,18.906167 0 1 1 -21.40628,-18.90617 z"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ id="g4449-8"
+ transform="matrix(-0.02114565,0.13039867,-0.13039867,-0.02114565,432.9912,502.16397)">
+ <circle
+ cx="242.94168"
+ cy="308.38486"
+ r="70.205605"
+ id="path4138-5"
+ style="opacity:1;fill:url(#linearGradient4146-6-8);fill-opacity:1;stroke:#505050;stroke-width:12.46485138;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4138-7-0-6"
+ d="m 228.98386,281.59914 c -19.82968,23.31175 -33.58074,74.72281 -44.4409,50.95241 -3.08421,-7.44468 -4.78632,-15.60691 -4.78632,-24.16669 0,-34.89614 28.2889,-63.18505 63.18504,-63.18505 13.77337,0 26.51744,4.40699 36.89904,11.88781 15.92115,11.47255 -31.02718,1.19977 -50.85686,24.51152 z"
+ style="opacity:1;fill:#ffffff;fill-opacity:0.42452829;stroke:none;stroke-width:5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter4238-9-3)" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4138-7-1"
+ d="m 228.98386,281.59914 c -19.82968,23.31175 -33.58074,74.72281 -44.4409,50.95241 -3.08421,-7.44468 -4.78632,-15.60691 -4.78632,-24.16669 0,-34.89614 28.2889,-63.18505 63.18504,-63.18505 13.77337,0 26.51744,4.40699 36.89904,11.88781 15.92115,11.47255 -31.02718,1.19977 -50.85686,24.51152 z"
+ style="opacity:1;fill:url(#linearGradient4204-9-1);fill-opacity:1;stroke:none;stroke-width:5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter4254-1-3)" />
+ </g>
+ </g>
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#808080;stroke-width:0.26458347;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 4.1010386,294.22195 h 0.5291667 v -0.52917"
+ id="path8218"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccc" />
+ <path
+ sodipodi:nodetypes="ccc"
+ inkscape:connector-curvature="0"
+ id="path8220"
+ d="m 4.1010386,294.48653 h 0.79375 v -0.79375"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.26458347;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <path
+ sodipodi:nodetypes="ccc"
+ inkscape:connector-curvature="0"
+ id="path8224"
+ d="m 4.1010386,292.36986 h 0.5291667 v 0.52917"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#808080;stroke-width:0.26458347;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.26458347;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 4.1010386,292.10528 h 0.79375 v 0.79375"
+ id="path8226"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccc" />
+ <path
+ sodipodi:nodetypes="ccc"
+ inkscape:connector-curvature="0"
+ id="path8212"
+ d="M 3.3072886,294.22195 H 2.778122 v -0.52917"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#808080;stroke-width:0.26458347;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.26458347;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="M 3.3072886,294.48653 H 2.5135387 v -0.79375"
+ id="path8214"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccc" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#808080;stroke-width:0.26458347;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 2.778122,292.89903 v -0.52917 h 0.5291666"
+ id="path8248"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccc" />
+ <path
+ sodipodi:nodetypes="ccc"
+ inkscape:connector-curvature="0"
+ id="path8204"
+ d="m 2.5135387,292.89903 v -0.79375 h 0.7937499"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.26458347;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_graph_zoom_in-24.svg b/pixmaps/src/gwy_graph_zoom_in-24.svg
new file mode 100644
index 0000000..6363245
--- /dev/null
+++ b/pixmaps/src/gwy_graph_zoom_in-24.svg
@@ -0,0 +1,405 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg9687"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_graph_zoom_in-24.svg"
+ inkscape:export-filename="gwy_graph_function-24.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96">
+ <defs
+ id="defs9689">
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4782-7-2">
+ <circle
+ style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="circle4784-1-2"
+ cx="276.29214"
+ cy="151.18121"
+ r="19.066629" />
+ </clipPath>
+ <linearGradient
+ gradientUnits="userSpaceOnUse"
+ y2="361.22473"
+ x2="272.91217"
+ y1="247.92804"
+ x1="207.50029"
+ id="linearGradient4146-6-8"
+ xlink:href="#linearGradient4270" />
+ <linearGradient
+ id="linearGradient4270">
+ <stop
+ style="stop-color:#3c98f4;stop-opacity:0.12156863"
+ offset="0"
+ id="stop4272" />
+ <stop
+ style="stop-color:#f1f5fb;stop-opacity:0.12156863"
+ offset="1"
+ id="stop4274" />
+ </linearGradient>
+ <filter
+ height="1.1263148"
+ y="-0.063157417"
+ width="1.1142865"
+ x="-0.057143249"
+ id="filter4238-9-3"
+ style="color-interpolation-filters:sRGB">
+ <feGaussianBlur
+ id="feGaussianBlur4240-4-6"
+ stdDeviation="2.4600469" />
+ </filter>
+ <linearGradient
+ gradientUnits="userSpaceOnUse"
+ y2="312.29819"
+ x2="227.00648"
+ y1="288.19104"
+ x1="214.93521"
+ id="linearGradient4204-9-1"
+ xlink:href="#linearGradient4198" />
+ <linearGradient
+ id="linearGradient4198">
+ <stop
+ id="stop4200-0"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:0.39215687" />
+ <stop
+ id="stop4202"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:0.3137255" />
+ </linearGradient>
+ <filter
+ height="1.025263"
+ y="-0.012631484"
+ width="1.0228573"
+ x="-0.011428649"
+ id="filter4254-1-3"
+ style="color-interpolation-filters:sRGB">
+ <feGaussianBlur
+ id="feGaussianBlur4256-7-1"
+ stdDeviation="0.49200938" />
+ </filter>
+ <linearGradient
+ gradientTransform="translate(-53.242097,127.71344)"
+ inkscape:collect="always"
+ xlink:href="#linearGradient12587-6"
+ id="linearGradient12593-3"
+ x1="363.08881"
+ y1="538.68573"
+ x2="365.21747"
+ y2="540.84064"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient12587-6">
+ <stop
+ style="stop-color:#6daa34;stop-opacity:1"
+ offset="0"
+ id="stop12589-7" />
+ <stop
+ id="stop13669-5"
+ offset="0.5"
+ style="stop-color:#7db846;stop-opacity:1" />
+ <stop
+ style="stop-color:#6daa34;stop-opacity:1"
+ offset="1"
+ id="stop12591-3" />
+ </linearGradient>
+ <filter
+ inkscape:collect="always"
+ style="color-interpolation-filters:sRGB"
+ id="filter18492"
+ x="-0.047411256"
+ width="1.0948225"
+ y="-0.04860355"
+ height="1.0972071">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.42995752"
+ id="feGaussianBlur18494" />
+ </filter>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4782-7-2-3">
+ <circle
+ style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="circle4784-1-2-6"
+ cx="276.29214"
+ cy="151.18121"
+ r="19.066629" />
+ </clipPath>
+ <filter
+ height="1.1263148"
+ y="-0.063157417"
+ width="1.1142865"
+ x="-0.057143249"
+ id="filter4238-9-3-7"
+ style="color-interpolation-filters:sRGB">
+ <feGaussianBlur
+ id="feGaussianBlur4240-4-6-5"
+ stdDeviation="2.4600469" />
+ </filter>
+ <filter
+ height="1.025263"
+ y="-0.012631484"
+ width="1.0228573"
+ x="-0.011428649"
+ id="filter4254-1-3-3"
+ style="color-interpolation-filters:sRGB">
+ <feGaussianBlur
+ id="feGaussianBlur4256-7-1-5"
+ stdDeviation="0.49200938" />
+ </filter>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath8518">
+ <g
+ style="fill:none"
+ id="g8532"
+ transform="matrix(0.91094965,0,0,0.91094965,17.85019,178.21156)">
+ <g
+ style="fill:none"
+ id="g8522"
+ clip-path="url(#clipPath4782-7-2-3)"
+ transform="matrix(-0.40789887,0.26719843,-0.26719843,-0.40789887,540.73338,515.16801)">
+ <path
+ id="path8520"
+ style="fill:none;stroke:#868789;stroke-width:1.4453578;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none"
+ d="m 276.3071,132.25651 a 21.406287,18.906167 0 0 1 21.40628,18.90617 21.406287,18.906167 0 1 1 -21.40628,-18.90617 z"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ style="fill:none"
+ id="g8530"
+ transform="matrix(-0.02114565,0.13039867,-0.13039867,-0.02114565,432.9912,502.16397)">
+ <circle
+ cx="242.94168"
+ cy="308.38486"
+ r="70.205605"
+ id="circle8524"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#505050;stroke-width:12.46485138;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8526"
+ d="m 228.98386,281.59914 c -19.82968,23.31175 -33.58074,74.72281 -44.4409,50.95241 -3.08421,-7.44468 -4.78632,-15.60691 -4.78632,-24.16669 0,-34.89614 28.2889,-63.18505 63.18504,-63.18505 13.77337,0 26.51744,4.40699 36.89904,11.88781 15.92115,11.47255 -31.02718,1.19977 -50.85686,24.51152 z"
+ style="opacity:1;fill:none;fill-opacity:0.42452829;stroke:none;stroke-width:5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter4238-9-3-7)" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8528"
+ d="m 228.98386,281.59914 c -19.82968,23.31175 -33.58074,74.72281 -44.4409,50.95241 -3.08421,-7.44468 -4.78632,-15.60691 -4.78632,-24.16669 0,-34.89614 28.2889,-63.18505 63.18504,-63.18505 13.77337,0 26.51744,4.40699 36.89904,11.88781 15.92115,11.47255 -31.02718,1.19977 -50.85686,24.51152 z"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:none;stroke-width:5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter4254-1-3-3)" />
+ </g>
+ </g>
+ </clipPath>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="17.244395"
+ inkscape:cx="28.140596"
+ inkscape:cy="7.1483865"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-global="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata9692">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-306.29821,-648.57531)">
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#4696db;stroke-width:1.00000012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8419"
+ width="23"
+ height="23"
+ x="306.79822"
+ y="649.07532" />
+ <g
+ id="g8458"
+ transform="rotate(-90,318.79821,660.07531)">
+ <path
+ inkscape:connector-curvature="0"
+ id="path8446"
+ d="m 307.29821,668.07531 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,653.07531 h 22"
+ id="path8448"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,663.07531 h 22"
+ id="path8450"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8452"
+ d="m 307.29821,658.07531 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ </g>
+ <path
+ inkscape:connector-curvature="0"
+ id="path8444"
+ d="m 307.29821,668.07531 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,653.07531 h 22"
+ id="path8438"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,663.07531 h 22"
+ id="path8442"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8440"
+ d="m 307.29821,658.07531 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <g
+ id="g18446"
+ transform="translate(-51.527477,96.470462)"
+ style="opacity:0.5;filter:url(#filter18492)">
+ <path
+ inkscape:connector-curvature="0"
+ id="path18369"
+ d="m 363.68784,568.4473 -5.08846,5.03989 c -0.0998,0.0989 -0.11276,0.3176 -0.0177,0.42101 l 1.80326,1.96183 c 0.095,0.10341 0.32123,0.11658 0.42097,0.0177 l 5.08846,-5.0399 z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.99607843"
+ sodipodi:nodetypes="csssscc" />
+ <circle
+ transform="rotate(99.210991)"
+ cx="496.39133"
+ cy="-457.18619"
+ r="8.4484291"
+ id="circle18383"
+ style="opacity:1;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+ <path
+ inkscape:connector-curvature="0"
+ id="path4717-0-5"
+ d="m 312.97285,663.17376 -5.08846,5.03989 c -0.0998,0.0989 -0.11276,0.3176 -0.0177,0.42102 l 0.90163,0.98091 0.90162,0.98091 c 0.095,0.10341 0.32124,0.11658 0.42098,0.0177 l 5.08846,-5.0399 -1.10326,-1.20027 z"
+ style="fill:url(#linearGradient12593-3);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.30000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="csscssccc" />
+ <path
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 329.27033,669.18417 c -15.94423,0 -16.48811,-18.38243 -21.94424,-18.38243"
+ id="path8254-7"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <g
+ id="g18291"
+ transform="matrix(0.91094965,0,0,0.91094965,-32.992537,178.21156)">
+ <g
+ id="g4751-3"
+ clip-path="url(#clipPath4782-7-2)"
+ transform="matrix(-0.40789887,0.26719843,-0.26719843,-0.40789887,540.73338,515.16801)">
+ <path
+ id="path4532-9"
+ style="fill:#ffffff;stroke:#868789;stroke-width:1.4453578;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none"
+ d="m 276.3071,132.25651 a 21.406287,18.906167 0 0 1 21.40628,18.90617 21.406287,18.906167 0 1 1 -21.40628,-18.90617 z"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ id="g4449-8"
+ transform="matrix(-0.02114565,0.13039867,-0.13039867,-0.02114565,432.9912,502.16397)">
+ <circle
+ cx="242.94168"
+ cy="308.38486"
+ r="70.205605"
+ id="path4138-5"
+ style="opacity:1;fill:url(#linearGradient4146-6-8);fill-opacity:1;stroke:#505050;stroke-width:12.46485138;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4138-7-0-6"
+ d="m 228.98386,281.59914 c -19.82968,23.31175 -33.58074,74.72281 -44.4409,50.95241 -3.08421,-7.44468 -4.78632,-15.60691 -4.78632,-24.16669 0,-34.89614 28.2889,-63.18505 63.18504,-63.18505 13.77337,0 26.51744,4.40699 36.89904,11.88781 15.92115,11.47255 -31.02718,1.19977 -50.85686,24.51152 z"
+ style="opacity:1;fill:#ffffff;fill-opacity:0.42452829;stroke:none;stroke-width:5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter4238-9-3)" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4138-7-1"
+ d="m 228.98386,281.59914 c -19.82968,23.31175 -33.58074,74.72281 -44.4409,50.95241 -3.08421,-7.44468 -4.78632,-15.60691 -4.78632,-24.16669 0,-34.89614 28.2889,-63.18505 63.18504,-63.18505 13.77337,0 26.51744,4.40699 36.89904,11.88781 15.92115,11.47255 -31.02718,1.19977 -50.85686,24.51152 z"
+ style="opacity:1;fill:url(#linearGradient4204-9-1);fill-opacity:1;stroke:none;stroke-width:5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter4254-1-3)" />
+ </g>
+ </g>
+ <g
+ id="g8484">
+ <path
+ sodipodi:nodetypes="cc"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000048;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 324.32249,658.07558 h -8.00001"
+ id="path8234"
+ inkscape:connector-curvature="0" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path8115"
+ d="m 324.29819,659.07558 h -8.00001"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000048;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+ <g
+ id="g8490"
+ transform="rotate(90,320.31033,658.57558)">
+ <path
+ inkscape:connector-curvature="0"
+ id="path8486"
+ d="m 324.32249,658.07558 h -8.00001"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000048;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000048;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 324.29819,659.07558 h -8.00001"
+ id="path8488"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ </g>
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_graph_zoom_out-24.svg b/pixmaps/src/gwy_graph_zoom_out-24.svg
new file mode 100644
index 0000000..5f3364d
--- /dev/null
+++ b/pixmaps/src/gwy_graph_zoom_out-24.svg
@@ -0,0 +1,386 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg9687"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_graph_zoom_out-24.svg"
+ inkscape:export-filename="gwy_graph_function-24.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96">
+ <defs
+ id="defs9689">
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4782-7-2">
+ <circle
+ style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="circle4784-1-2"
+ cx="276.29214"
+ cy="151.18121"
+ r="19.066629" />
+ </clipPath>
+ <linearGradient
+ gradientUnits="userSpaceOnUse"
+ y2="361.22473"
+ x2="272.91217"
+ y1="247.92804"
+ x1="207.50029"
+ id="linearGradient4146-6-8"
+ xlink:href="#linearGradient4270" />
+ <linearGradient
+ id="linearGradient4270">
+ <stop
+ style="stop-color:#3c98f4;stop-opacity:0.12156863"
+ offset="0"
+ id="stop4272" />
+ <stop
+ style="stop-color:#f1f5fb;stop-opacity:0.12156863"
+ offset="1"
+ id="stop4274" />
+ </linearGradient>
+ <filter
+ height="1.1263148"
+ y="-0.063157417"
+ width="1.1142865"
+ x="-0.057143249"
+ id="filter4238-9-3"
+ style="color-interpolation-filters:sRGB">
+ <feGaussianBlur
+ id="feGaussianBlur4240-4-6"
+ stdDeviation="2.4600469" />
+ </filter>
+ <linearGradient
+ gradientUnits="userSpaceOnUse"
+ y2="312.29819"
+ x2="227.00648"
+ y1="288.19104"
+ x1="214.93521"
+ id="linearGradient4204-9-1"
+ xlink:href="#linearGradient4198" />
+ <linearGradient
+ id="linearGradient4198">
+ <stop
+ id="stop4200-0"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:0.39215687" />
+ <stop
+ id="stop4202"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:0.3137255" />
+ </linearGradient>
+ <filter
+ height="1.025263"
+ y="-0.012631484"
+ width="1.0228573"
+ x="-0.011428649"
+ id="filter4254-1-3"
+ style="color-interpolation-filters:sRGB">
+ <feGaussianBlur
+ id="feGaussianBlur4256-7-1"
+ stdDeviation="0.49200938" />
+ </filter>
+ <linearGradient
+ gradientTransform="translate(-53.242097,127.71344)"
+ inkscape:collect="always"
+ xlink:href="#linearGradient12587-6"
+ id="linearGradient12593-3"
+ x1="363.08881"
+ y1="538.68573"
+ x2="365.21747"
+ y2="540.84064"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient12587-6">
+ <stop
+ style="stop-color:#6daa34;stop-opacity:1"
+ offset="0"
+ id="stop12589-7" />
+ <stop
+ id="stop13669-5"
+ offset="0.5"
+ style="stop-color:#7db846;stop-opacity:1" />
+ <stop
+ style="stop-color:#6daa34;stop-opacity:1"
+ offset="1"
+ id="stop12591-3" />
+ </linearGradient>
+ <filter
+ inkscape:collect="always"
+ style="color-interpolation-filters:sRGB"
+ id="filter18492"
+ x="-0.047411256"
+ width="1.0948225"
+ y="-0.04860355"
+ height="1.0972071">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.42995752"
+ id="feGaussianBlur18494" />
+ </filter>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4782-7-2-3">
+ <circle
+ style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="circle4784-1-2-6"
+ cx="276.29214"
+ cy="151.18121"
+ r="19.066629" />
+ </clipPath>
+ <filter
+ height="1.1263148"
+ y="-0.063157417"
+ width="1.1142865"
+ x="-0.057143249"
+ id="filter4238-9-3-7"
+ style="color-interpolation-filters:sRGB">
+ <feGaussianBlur
+ id="feGaussianBlur4240-4-6-5"
+ stdDeviation="2.4600469" />
+ </filter>
+ <filter
+ height="1.025263"
+ y="-0.012631484"
+ width="1.0228573"
+ x="-0.011428649"
+ id="filter4254-1-3-3"
+ style="color-interpolation-filters:sRGB">
+ <feGaussianBlur
+ id="feGaussianBlur4256-7-1-5"
+ stdDeviation="0.49200938" />
+ </filter>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath8518">
+ <g
+ style="fill:none"
+ id="g8532"
+ transform="matrix(0.91094965,0,0,0.91094965,17.85019,178.21156)">
+ <g
+ style="fill:none"
+ id="g8522"
+ clip-path="url(#clipPath4782-7-2-3)"
+ transform="matrix(-0.40789887,0.26719843,-0.26719843,-0.40789887,540.73338,515.16801)">
+ <path
+ id="path8520"
+ style="fill:none;stroke:#868789;stroke-width:1.4453578;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none"
+ d="m 276.3071,132.25651 a 21.406287,18.906167 0 0 1 21.40628,18.90617 21.406287,18.906167 0 1 1 -21.40628,-18.90617 z"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ style="fill:none"
+ id="g8530"
+ transform="matrix(-0.02114565,0.13039867,-0.13039867,-0.02114565,432.9912,502.16397)">
+ <circle
+ cx="242.94168"
+ cy="308.38486"
+ r="70.205605"
+ id="circle8524"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#505050;stroke-width:12.46485138;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8526"
+ d="m 228.98386,281.59914 c -19.82968,23.31175 -33.58074,74.72281 -44.4409,50.95241 -3.08421,-7.44468 -4.78632,-15.60691 -4.78632,-24.16669 0,-34.89614 28.2889,-63.18505 63.18504,-63.18505 13.77337,0 26.51744,4.40699 36.89904,11.88781 15.92115,11.47255 -31.02718,1.19977 -50.85686,24.51152 z"
+ style="opacity:1;fill:none;fill-opacity:0.42452829;stroke:none;stroke-width:5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter4238-9-3-7)" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8528"
+ d="m 228.98386,281.59914 c -19.82968,23.31175 -33.58074,74.72281 -44.4409,50.95241 -3.08421,-7.44468 -4.78632,-15.60691 -4.78632,-24.16669 0,-34.89614 28.2889,-63.18505 63.18504,-63.18505 13.77337,0 26.51744,4.40699 36.89904,11.88781 15.92115,11.47255 -31.02718,1.19977 -50.85686,24.51152 z"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:none;stroke-width:5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter4254-1-3-3)" />
+ </g>
+ </g>
+ </clipPath>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="10.411147"
+ inkscape:cx="-11.095701"
+ inkscape:cy="20.020839"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-global="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata9692">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-306.29821,-648.57531)">
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#4696db;stroke-width:1.00000012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8419"
+ width="23"
+ height="23"
+ x="306.79822"
+ y="649.07532" />
+ <g
+ id="g8458"
+ transform="rotate(-90,318.79821,660.07531)">
+ <path
+ inkscape:connector-curvature="0"
+ id="path8446"
+ d="m 307.29821,668.07531 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,653.07531 h 22"
+ id="path8448"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,663.07531 h 22"
+ id="path8450"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8452"
+ d="m 307.29821,658.07531 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ </g>
+ <path
+ inkscape:connector-curvature="0"
+ id="path8444"
+ d="m 307.29821,668.07531 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,653.07531 h 22"
+ id="path8438"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 307.29821,663.07531 h 22"
+ id="path8442"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8440"
+ d="m 307.29821,658.07531 h 22"
+ style="fill:none;fill-rule:evenodd;stroke:#e6e6e6;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <g
+ id="g18446"
+ transform="translate(-51.527477,96.470462)"
+ style="opacity:0.5;filter:url(#filter18492)">
+ <path
+ inkscape:connector-curvature="0"
+ id="path18369"
+ d="m 363.68784,568.4473 -5.08846,5.03989 c -0.0998,0.0989 -0.11276,0.3176 -0.0177,0.42101 l 1.80326,1.96183 c 0.095,0.10341 0.32123,0.11658 0.42097,0.0177 l 5.08846,-5.0399 z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.99607843"
+ sodipodi:nodetypes="csssscc" />
+ <circle
+ transform="rotate(99.210991)"
+ cx="496.39133"
+ cy="-457.18619"
+ r="8.4484291"
+ id="circle18383"
+ style="opacity:1;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+ <path
+ inkscape:connector-curvature="0"
+ id="path4717-0-5"
+ d="m 312.97285,663.17376 -5.08846,5.03989 c -0.0998,0.0989 -0.11276,0.3176 -0.0177,0.42102 l 0.90163,0.98091 0.90162,0.98091 c 0.095,0.10341 0.32124,0.11658 0.42098,0.0177 l 5.08846,-5.0399 -1.10326,-1.20027 z"
+ style="fill:url(#linearGradient12593-3);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.30000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="csscssccc" />
+ <path
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 329.27033,669.18417 c -15.94423,0 -16.48811,-18.38243 -21.94424,-18.38243"
+ id="path8254-7"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <g
+ id="g18291"
+ transform="matrix(0.91094965,0,0,0.91094965,-32.992537,178.21156)">
+ <g
+ id="g4751-3"
+ clip-path="url(#clipPath4782-7-2)"
+ transform="matrix(-0.40789887,0.26719843,-0.26719843,-0.40789887,540.73338,515.16801)">
+ <path
+ id="path4532-9"
+ style="fill:#ffffff;stroke:#868789;stroke-width:1.4453578;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none"
+ d="m 276.3071,132.25651 a 21.406287,18.906167 0 0 1 21.40628,18.90617 21.406287,18.906167 0 1 1 -21.40628,-18.90617 z"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ id="g4449-8"
+ transform="matrix(-0.02114565,0.13039867,-0.13039867,-0.02114565,432.9912,502.16397)">
+ <circle
+ cx="242.94168"
+ cy="308.38486"
+ r="70.205605"
+ id="path4138-5"
+ style="opacity:1;fill:url(#linearGradient4146-6-8);fill-opacity:1;stroke:#505050;stroke-width:12.46485138;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4138-7-0-6"
+ d="m 228.98386,281.59914 c -19.82968,23.31175 -33.58074,74.72281 -44.4409,50.95241 -3.08421,-7.44468 -4.78632,-15.60691 -4.78632,-24.16669 0,-34.89614 28.2889,-63.18505 63.18504,-63.18505 13.77337,0 26.51744,4.40699 36.89904,11.88781 15.92115,11.47255 -31.02718,1.19977 -50.85686,24.51152 z"
+ style="opacity:1;fill:#ffffff;fill-opacity:0.42452829;stroke:none;stroke-width:5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter4238-9-3)" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4138-7-1"
+ d="m 228.98386,281.59914 c -19.82968,23.31175 -33.58074,74.72281 -44.4409,50.95241 -3.08421,-7.44468 -4.78632,-15.60691 -4.78632,-24.16669 0,-34.89614 28.2889,-63.18505 63.18504,-63.18505 13.77337,0 26.51744,4.40699 36.89904,11.88781 15.92115,11.47255 -31.02718,1.19977 -50.85686,24.51152 z"
+ style="opacity:1;fill:url(#linearGradient4204-9-1);fill-opacity:1;stroke:none;stroke-width:5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter4254-1-3)" />
+ </g>
+ </g>
+ <path
+ inkscape:connector-curvature="0"
+ id="path8234"
+ d="m 324.29819,658.07558 h -8.00001"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000048;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000048;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 324.29819,659.07558 h -8.00001"
+ id="path8115"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ </g>
+</svg>
diff --git a/devel-docs/libgwydgets/html/gwy_hough-24.png b/pixmaps/src/gwy_hough-24.png
similarity index 100%
copy from devel-docs/libgwydgets/html/gwy_hough-24.png
copy to pixmaps/src/gwy_hough-24.png
diff --git a/pixmaps/src/gwy_hough-24.svg b/pixmaps/src/gwy_hough-24.svg
new file mode 100644
index 0000000..67c9784
--- /dev/null
+++ b/pixmaps/src/gwy_hough-24.svg
@@ -0,0 +1,163 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg9687"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_hough-24.svg"
+ inkscape:export-filename="gwy_graph_function-24.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96">
+ <defs
+ id="defs9689" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="25.938377"
+ inkscape:cx="50.686553"
+ inkscape:cy="17.648671"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-global="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata9692">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-306.29821,-648.57531)">
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#87c74a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8767"
+ width="8"
+ height="9"
+ x="321.79822"
+ y="649.07532" />
+ <path
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 329.7595,669.22235 c -4.43202,-5.00162 -12.98066,-15.90723 -22.94023,-4.3682"
+ id="path8254-7"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path8444"
+ d="m 327.62006,669.26866 c -4.432,-5.00163 -11.02168,-16.83998 -21.11659,-6.05442"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 324.46208,669.12188 c -2.90671,-5.21571 -7.72836,-18.34692 -17.95861,-8.2262"
+ id="path8446"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path8448"
+ d="m 322.53118,669.01649 c -0.71826,-3.4888 -6.06815,-21.14318 -16.02771,-11.59864"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:#e8f0e0;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1"
+ d="m 322.29821,653.57531 8,-1 -1,-3 h -7 z"
+ id="path8769"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <rect
+ y="649.07532"
+ x="321.79822"
+ height="9"
+ width="8"
+ id="rect8771"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <flowRoot
+ xml:space="preserve"
+ id="flowRoot8781"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-align:justify;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ transform="translate(270.73512,691.14766)"><flowRegion
+ id="flowRegion8783"
+ style="font-size:4px;text-align:justify;text-anchor:start"><rect
+ id="rect8785"
+ width="8"
+ height="20"
+ x="14"
+ y="2"
+ style="font-size:4px;text-align:justify;text-anchor:start" /></flowRegion><flowPara
+ id="flowPara8787">ASCA</flowPara></flowRoot> <flowRoot
+ xml:space="preserve"
+ id="flowRoot8789"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.66666675px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ transform="translate(270.73512,691.14766)"><flowRegion
+ id="flowRegion8791"
+ style="font-size:2.66666675px;text-align:start;text-anchor:start"><rect
+ id="rect8793"
+ width="8"
+ height="20"
+ x="14"
+ y="2"
+ style="font-size:2.66666675px;text-align:start;text-anchor:start" /></flowRegion><flowPara
+ id="flowPara8797" /></flowRoot> <path
+ sodipodi:nodetypes="cccc"
+ inkscape:connector-curvature="0"
+ id="path8687"
+ d="m 318.29822,661.57531 -1e-5,6 -6,-6 z"
+ style="fill:#db2424;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path8689"
+ d="m 317.12664,664.83267 -5.65685,5.65686 -2,-2.00001 5.65685,-5.65687 z"
+ style="fill:#db2424;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 321.92321,653.62218 8.125,-1.01562"
+ id="path8982"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_immerse-24.svg b/pixmaps/src/gwy_immerse-24.svg
new file mode 100644
index 0000000..b4eadb5
--- /dev/null
+++ b/pixmaps/src/gwy_immerse-24.svg
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg10043"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_immerse-24.svg"
+ inkscape:export-filename="gwy_arithmetic-24.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs10045" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="7.247769"
+ inkscape:cx="-15.740329"
+ inkscape:cy="33.331094"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata10048">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-197.36205,-472.33789)">
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#7db846;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect11370"
+ width="23"
+ height="23"
+ x="197.86205"
+ y="472.83786" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#e8f0e0;fill-opacity:1;fill-rule:evenodd;stroke:#db2424;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:1, 1;stroke-dashoffset:0.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 204.86205,479.83789 h 14 v 14 h -14 z"
+ id="rect8153"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_iso_roughness-24.svg b/pixmaps/src/gwy_iso_roughness-24.svg
new file mode 100644
index 0000000..cf64237
--- /dev/null
+++ b/pixmaps/src/gwy_iso_roughness-24.svg
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8233"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_iso_roughness-24.svg"
+ inkscape:export-filename="gwy_iso_roughness-24.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs8235" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="5.248757"
+ inkscape:cx="-15.541144"
+ inkscape:cy="27.382642"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-intersection-paths="false"
+ inkscape:snap-grids="false"
+ showguides="false"
+ inkscape:measure-start="17.2503,10.6451"
+ inkscape:measure-end="17.2705,8.98876">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8238">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-138.4993,-575.0819)">
+ <path
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;ove [...]
+ d="m 154.93868,576.58914 -6.11084,8.58795 -2.41205,-2.90843 -1.91205,1.97711 2.91205,3.52289 h -6.5 v 2.81324 h 19 v -2.81324 h -9.5 l 6.5,-9.5 z"
+ id="path8254"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccccc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 152.84515,594.60342 c -0.0183,-0.0772 -0.0329,-0.13919 -0.0547,-0.21875 -0.39553,-1.44599 -1.06043,-1.33656 -1.14034,-2.82804 -0.42549,1.48234 -0.7642,1.56111 -1.3019,2.93937 m 2.4969,0.10742 c 0.69617,2.93038 1.44529,3.5918 1.44529,3.5918 0,0 0.63269,-1.52319 1.73873,-2.28516 0.50287,-0.34643 1.06639,-0.91115 1.74806,0.32685 1.10603,1.43926 0.55328,1.86276 1.10629,1.43945 0.55302,-0.42331 0.70979,-1.83273 0.70979,-1.83273 l 0.0699,-0.95001 c 0,0 0.895,-3.0166 2.02959,-0.5926 [...]
+ id="path8538"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="csccccscsccccssscsc" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_italic-20.svg b/pixmaps/src/gwy_italic-20.svg
new file mode 100644
index 0000000..3a28bb9
--- /dev/null
+++ b/pixmaps/src/gwy_italic-20.svg
@@ -0,0 +1,106 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="20"
+ height="20"
+ viewBox="0 0 20 20"
+ id="svg8833"
+ version="1.1"
+ inkscape:version="0.92+devel unknown"
+ sodipodi:docname="gwy_italic-20.svg">
+ <defs
+ id="defs8835">
+ <linearGradient
+ gradientTransform="translate(-11.142957,824.89612)"
+ xlink:href="#linearGradient4140"
+ id="linearGradient4171"
+ gradientUnits="userSpaceOnUse"
+ x1="207.50029"
+ y1="247.92804"
+ x2="272.91217"
+ y2="361.22473" />
+ <linearGradient
+ id="linearGradient4140">
+ <stop
+ style="stop-color:#d7e3f4;stop-opacity:1;"
+ offset="0"
+ id="stop4142" />
+ <stop
+ style="stop-color:#f1f5fb;stop-opacity:1"
+ offset="1"
+ id="stop4144" />
+ </linearGradient>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="47.274784"
+ inkscape:cx="9.999993"
+ inkscape:cy="8.3210188"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1028"
+ inkscape:window-x="0"
+ inkscape:window-y="33"
+ inkscape:window-maximized="1"
+ inkscape:document-rotation="0">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="0.5"
+ spacingy="0.5"
+ enabled="true"
+ visible="true"
+ units="px"
+ empspacing="2" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8838">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-199.64375,-494.06708)">
+ <text
+ xml:space="preserve"
+ style="color:#000000;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:27.63895416px;line-height:120.00000477%;font-family:'Linux Libertine O';-inkscape-font-specification:'Linux Libertine O Italic';text-decoration:none;text-decoration-line:none;text-decoration-color:#000000;shape-padding:0;overflow:visible;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.01118124;stroke-linecap:round;stroke-linejoin:round;paint-o [...]
+ x="204.03304"
+ y="512.97797"
+ id="text4304"><tspan
+ sodipodi:role="line"
+ id="tspan4302"
+ x="204.03304"
+ y="512.97797"
+ style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Linux Libertine O';-inkscape-font-specification:'Linux Libertine O Italic';stroke-width:1.01118124">I</tspan></text>
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_less-24.svg b/pixmaps/src/gwy_less-24.svg
new file mode 100644
index 0000000..2ae9a7b
--- /dev/null
+++ b/pixmaps/src/gwy_less-24.svg
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg10043"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_less-24.svg"
+ inkscape:export-filename="gwy_arithmetic-24.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs10045" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="7.0630899"
+ inkscape:cx="1.9641561"
+ inkscape:cy="11.987625"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata10048">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-197.36205,-472.33789)">
+ <path
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#4696db;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="M 14.333984 0.50195312 C 12.809464 0.50195312 14.091866 2.5088775 11.166016 2.7734375 C 7.6983256 3.0870375 9.6052044 -0.067941875 6.5214844 1.5488281 C 3.4377844 3.1656481 7.1189719 3.3925463 4.8886719 6.0664062 C 2.6584219 8.7402062 1.7756012 5.1586319 0.73828125 8.4824219 C -0.29901875 11.806212 2.4637537 9.3642713 2.7773438 12.832031 C 3.0909438 16.299741 -0.06595875 14.390839 1.5507812 17.474609 C 3.1675212 20.558379 3.3946094 16.879025 6.0683594 19.109375 C 8.7421594 21.3 [...]
+ transform="translate(197.36205,472.33789)"
+ id="path4236" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8080"
+ d="m 214.36205,484.33789 h -10"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="cc" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_level-24.svg b/pixmaps/src/gwy_level-24.svg
new file mode 100644
index 0000000..d5f40ee
--- /dev/null
+++ b/pixmaps/src/gwy_level-24.svg
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 22.499999 22.499999"
+ id="svg8233"
+ version="1.1"
+ inkscape:version="0.92+devel unknown"
+ sodipodi:docname="gwy_level-24.svg">
+ <defs
+ id="defs8235">
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8308-6"
+ id="linearGradient8314"
+ x1="383.79593"
+ y1="544.1178"
+ x2="360.2847"
+ y2="520.60657"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.91711503,0,0,0.91711503,63.562131,186.16072)" />
+ <linearGradient
+ id="linearGradient8308-6"
+ inkscape:collect="always">
+ <stop
+ id="stop8310-7"
+ offset="0"
+ style="stop-color:#0c1e2d;stop-opacity:1" />
+ <stop
+ style="stop-color:#4696db;stop-opacity:1"
+ offset="0.5"
+ id="stop8351-5" />
+ <stop
+ id="stop8312-3"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:1" />
+ </linearGradient>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="35.291665"
+ inkscape:cx="15.995277"
+ inkscape:cy="11.999998"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1028"
+ inkscape:window-x="0"
+ inkscape:window-y="33"
+ inkscape:window-maximized="1"
+ inkscape:document-rotation="0"
+ units="px">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4270"
+ units="px"
+ spacingx="0.46874998"
+ spacingy="0.46874998"
+ empspacing="2" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8238">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-393.51587,-663.14807)">
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:url(#linearGradient8314);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.93750006;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8276"
+ width="21.5625"
+ height="21.5625"
+ x="393.98462"
+ y="663.61682" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_level_flatten_base-24.svg b/pixmaps/src/gwy_level_flatten_base-24.svg
new file mode 100644
index 0000000..ecfe76e
--- /dev/null
+++ b/pixmaps/src/gwy_level_flatten_base-24.svg
@@ -0,0 +1,217 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="6.3499999mm"
+ height="6.3499999mm"
+ viewBox="0 0 22.499999 22.499999"
+ id="svg8233"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_level_flatten_base-24.svg">
+ <defs
+ id="defs8235">
+ <linearGradient
+ id="linearGradient8476"
+ inkscape:collect="always">
+ <stop
+ id="stop8478"
+ offset="0"
+ style="stop-color:#84b9e7;stop-opacity:1;" />
+ <stop
+ id="stop8472"
+ offset="0.5"
+ style="stop-color:#4696db;stop-opacity:1" />
+ <stop
+ style="stop-color:#0c1e2d;stop-opacity:1"
+ offset="1"
+ id="stop8474" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient8461">
+ <stop
+ id="stop8459"
+ offset="0"
+ style="stop-color:#c3ddf3;stop-opacity:1" />
+ <stop
+ style="stop-color:#4696db;stop-opacity:1"
+ offset="0.5"
+ id="stop8457" />
+ <stop
+ id="stop8455"
+ offset="1"
+ style="stop-color:#0c1e2d;stop-opacity:1" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8461"
+ id="radialGradient8453"
+ cx="399.62149"
+ cy="669.53729"
+ fx="399.62149"
+ fy="669.53729"
+ r="4.6090899"
+ gradientTransform="matrix(1.6424449,0,0,1.5512699,-256.26603,-366.7521)"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8476"
+ id="radialGradient8468"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.0078432,0.12712806,-0.10931515,0.8666265,80.321789,48.28806)"
+ cx="399.62149"
+ cy="669.53729"
+ fx="399.62149"
+ fy="669.53729"
+ r="4.6090899" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8476"
+ id="radialGradient8482"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.41669688,0.72603327,-0.68429482,0.3950778,690.43818,126.42944)"
+ cx="399.62149"
+ cy="669.53729"
+ fx="399.62149"
+ fy="669.53729"
+ r="4.6090899" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8461"
+ id="radialGradient8486"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1368442,0,0,1.0761482,-43.107242,-50.997791)"
+ cx="399.62149"
+ cy="669.53729"
+ fx="399.62149"
+ fy="669.53729"
+ r="4.6090899" />
+ <linearGradient
+ gradientTransform="matrix(0.97825612,0,0,0.97825612,-64.808519,-63.250439)"
+ gradientUnits="userSpaceOnUse"
+ y2="522.59552"
+ x2="373.68384"
+ y1="543.81458"
+ x1="373.68384"
+ id="linearGradient8314-3"
+ xlink:href="#linearGradient8308"
+ inkscape:collect="always" />
+ <linearGradient
+ id="linearGradient8308"
+ inkscape:collect="always">
+ <stop
+ id="stop8310"
+ offset="0"
+ style="stop-color:#0c1e2d;stop-opacity:1" />
+ <stop
+ style="stop-color:#4696db;stop-opacity:1"
+ offset="0.25"
+ id="stop8260" />
+ <stop
+ style="stop-color:#97c4eb;stop-opacity:1"
+ offset="0.5"
+ id="stop8351" />
+ <stop
+ id="stop8258"
+ offset="0.75"
+ style="stop-color:#4696db;stop-opacity:1" />
+ <stop
+ id="stop8312"
+ offset="1"
+ style="stop-color:#c3ddf3;stop-opacity:1" />
+ </linearGradient>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="23.261527"
+ inkscape:cx="12.170529"
+ inkscape:cy="16.523995"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8238">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-393.51587,-663.14807)">
+ <g
+ transform="matrix(0.93749996,0,0,0.93749996,124.32009,245.45796)"
+ id="layer1-7"
+ inkscape:label="Layer 1">
+ <rect
+ y="446.03613"
+ x="287.64218"
+ height="23.000002"
+ width="23.000002"
+ id="rect8276-5"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:url(#linearGradient8314-3);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ </g>
+ <path
+ style="fill:url(#radialGradient8453);fill-opacity:1;fill-rule:evenodd;stroke:#db2424;stroke-width:0.9375px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 398.28502,667.81028 c -5.98219,3.68926 1.07646,9.57049 3.99831,8.21802 2.57687,-1.13512 -0.50322,-9.63491 -3.99831,-8.21802 z"
+ id="path8431"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccc" />
+ <path
+ sodipodi:nodetypes="sss"
+ inkscape:connector-curvature="0"
+ id="path8466"
+ d="m 408.4414,676.06619 c -4.27771,3.66034 1.40603,8.43968 3.20175,6.58883 4.37272,-4.50695 -1.25228,-8.25695 -3.20175,-6.58883 z"
+ style="fill:url(#radialGradient8468);fill-opacity:1;fill-rule:evenodd;stroke:#db2424;stroke-width:0.9375px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:url(#radialGradient8482);fill-opacity:1;fill-rule:evenodd;stroke:#db2424;stroke-width:0.93749994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 400.38912,678.89943 c -3.74951,-2.0262 -4.69969,3.47671 -3.10437,4.60304 3.34353,1.6021 5.98034,-2.70344 3.10437,-4.60304 z"
+ id="path8480"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccc" />
+ <path
+ sodipodi:nodetypes="ccc"
+ inkscape:connector-curvature="0"
+ id="path8484"
+ d="m 409.96122,666.72358 c -4.1055,2.53758 0.73876,6.58285 2.74398,5.65259 1.89278,-0.80026 0.63704,-7.5158 -2.74398,-5.65259 z"
+ style="fill:url(#radialGradient8486);fill-opacity:1;fill-rule:evenodd;stroke:#db2424;stroke-width:0.9375px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_level_median-24.svg b/pixmaps/src/gwy_level_median-24.svg
new file mode 100644
index 0000000..16b1d8b
--- /dev/null
+++ b/pixmaps/src/gwy_level_median-24.svg
@@ -0,0 +1,210 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="6.3499999mm"
+ height="6.3499999mm"
+ viewBox="0 0 22.499999 22.499999"
+ id="svg8233"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_level_median-24.svg">
+ <defs
+ id="defs8235">
+ <linearGradient
+ id="linearGradient8550"
+ inkscape:collect="always">
+ <stop
+ id="stop8544"
+ offset="0"
+ style="stop-color:#0c1e2d;stop-opacity:1" />
+ <stop
+ style="stop-color:#4696db;stop-opacity:1"
+ offset="0.50000018"
+ id="stop8546" />
+ <stop
+ id="stop8548"
+ offset="1"
+ style="stop-color:#c3ddf3;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient8308-6">
+ <stop
+ style="stop-color:#0c1e2d;stop-opacity:1"
+ offset="0"
+ id="stop8310-7" />
+ <stop
+ id="stop8351-5"
+ offset="0.5"
+ style="stop-color:#4696db;stop-opacity:1" />
+ <stop
+ style="stop-color:#c3ddf3;stop-opacity:1"
+ offset="1"
+ id="stop8312-3" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8308-6"
+ id="linearGradient8477"
+ x1="415.07837"
+ y1="682.83557"
+ x2="408.57648"
+ y2="675.53278"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8550"
+ id="linearGradient8542"
+ gradientUnits="userSpaceOnUse"
+ x1="406.81067"
+ y1="682.50177"
+ x2="399.05283"
+ y2="674.67419"
+ gradientTransform="matrix(1.0666667,0,0,1.0666667,-419.75028,-707.35797)" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="8.2981426"
+ inkscape:cx="178.9366"
+ inkscape:cy="-48.272016"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8238">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-393.51587,-663.14807)">
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#4696db;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.93750006;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8276"
+ width="21.5625"
+ height="21.5625"
+ x="393.98462"
+ y="663.61682" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:url(#linearGradient8542);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:1, 1;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 1,1 v 22 h 6 9 V 7 H 7 V 1 Z"
+ transform="matrix(0.93749996,0,0,0.93749996,393.51587,663.14807)"
+ id="rect8432"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccc" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#4696db;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.87499988;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8434"
+ width="5.6249995"
+ height="10.312502"
+ x="394.45337"
+ y="664.08557" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#db2424;fill-opacity:1;fill-rule:evenodd;stroke:#db2424;stroke-width:1.87499988;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8422"
+ width="4.6875"
+ height="4.6875"
+ x="398.20337"
+ y="668.77307" />
+ <rect
+ y="678.14807"
+ x="396.32837"
+ height="1.8749999"
+ width="1.8749999"
+ id="rect8452"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.87499988;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:url(#linearGradient8477);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.87499988;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 408.51587,664.08557 h 6.5625 v 20.625 h -6.5625 z"
+ id="rect8436"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#4696db;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.87499988;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 408.51587,664.08557 h 6.5625 v 5.625 h -6.5625 z"
+ id="rect8438"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:0.93749994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1"
+ d="m 403.82837,669.71057 v 1.875 h 3.75 v 2.8125 l 3.75,-3.75 -3.75,-3.75 v 2.8125 z"
+ id="path8440"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccc" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.87499988;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8442"
+ width="1.8749999"
+ height="1.8749999"
+ x="403.82837"
+ y="665.02307" />
+ <rect
+ y="663.61682"
+ x="393.98462"
+ height="21.5625"
+ width="21.5625"
+ id="rect8454"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.93750006;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.87499976;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8446-3"
+ width="1.8749998"
+ height="1.8749998"
+ x="395.39087"
+ y="666.89807" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.87499976;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8446-6"
+ width="1.8749998"
+ height="1.8749998"
+ x="403.82837"
+ y="681.89807" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.87499976;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8446-5"
+ width="1.8749998"
+ height="1.8749998"
+ x="411.32837"
+ y="674.39807" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_level_triangle-24.svg b/pixmaps/src/gwy_level_triangle-24.svg
new file mode 100644
index 0000000..9236ed6
--- /dev/null
+++ b/pixmaps/src/gwy_level_triangle-24.svg
@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="6.3499999mm"
+ height="6.3499999mm"
+ viewBox="0 0 22.499999 22.499999"
+ id="svg8235"
+ version="1.1"
+ inkscape:version="0.92.1 unknown"
+ sodipodi:docname="gwy_level_triangle-24.svg">
+ <defs
+ id="defs8237">
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8308"
+ id="linearGradient8314"
+ x1="383.79593"
+ y1="544.1178"
+ x2="360.2847"
+ y2="520.60657"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.91711505,0,0,0.91711505,7.3336455,214.72289)" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient8308">
+ <stop
+ style="stop-color:#0c1e2d;stop-opacity:1"
+ offset="0"
+ id="stop8310" />
+ <stop
+ id="stop8351"
+ offset="0.5"
+ style="stop-color:#4696db;stop-opacity:1" />
+ <stop
+ style="stop-color:#c3ddf3;stop-opacity:1"
+ offset="1"
+ id="stop8312" />
+ </linearGradient>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="7.6175628"
+ inkscape:cx="-17.376917"
+ inkscape:cy="17.152855"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata8240">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-337.28741,-691.71021)">
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:url(#linearGradient8314);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.93750006;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8276"
+ width="21.5625"
+ height="21.5625"
+ x="337.75616"
+ y="692.17896" />
+ <path
+ sodipodi:type="star"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.50000012;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="path8353"
+ sodipodi:sides="3"
+ sodipodi:cx="-6.9927492"
+ sodipodi:cy="-15.496084"
+ sodipodi:r1="8.4450436"
+ sodipodi:r2="8.4450436"
+ sodipodi:arg1="0.52359878"
+ sodipodi:arg2="1.5707963"
+ inkscape:flatsided="true"
+ inkscape:rounded="0"
+ inkscape:randomized="0.05"
+ d="m 0.31871757,-11.516488 -14.64170257,0.433875 7.5561854,-13.188873 z"
+ transform="rotate(-132.93201,327.18886,266.71786)"
+ inkscape:transform-center-x="-2.4492461"
+ inkscape:transform-center-y="-2.643661" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_light_rotate-24.svg b/pixmaps/src/gwy_light_rotate-24.svg
new file mode 100644
index 0000000..eeab09a
--- /dev/null
+++ b/pixmaps/src/gwy_light_rotate-24.svg
@@ -0,0 +1,157 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ id="svg2160"
+ sodipodi:version="0.32"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_light_rotate-24.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ version="1.1"
+ inkscape:export-filename="gwy_rotate-24.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs2162">
+ <filter
+ height="1.2250096"
+ y="-0.11250482"
+ width="1.2571303"
+ x="-0.12856513"
+ id="filter8458"
+ style="color-interpolation-filters:sRGB"
+ inkscape:collect="always">
+ <feGaussianBlur
+ id="feGaussianBlur8460"
+ stdDeviation="0.16275744"
+ inkscape:collect="always" />
+ </filter>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1"
+ inkscape:cx="-157.99815"
+ inkscape:cy="-60.043148"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ showguides="false"
+ inkscape:guide-bbox="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-global="true"
+ inkscape:snap-intersection-paths="false"
+ inkscape:object-nodes="true"
+ inkscape:snap-smooth-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata2165">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ transform="translate(0,-8)">
+ <path
+ style="fill:#7db846;fill-opacity:1;stroke:#000000;stroke-width:0.99998635;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 1.8496094,14.414062 1.2363281,6.875 1.4199219,-1.326171 C 7.347699,23.913715 15.0313,25.741322 19.935547,20.1875 l 1.179687,1.101562 1.236328,-6.875 -6.539062,1.417969 1.414062,1.378907 c 0,0 -1.746066,2.72188 -5.125,2.794921 C 8.7213585,19.93382 6.9746094,17.210938 6.9746094,17.210938 l 1.4140625,-1.378907 z"
+ transform="translate(0,8)"
+ id="path5078-9-4"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccccc" />
+ <path
+ transform="matrix(0.99573837,-0.0455901,-0.0429025,-0.98645432,-215.19353,636.30694)"
+ sodipodi:nodetypes="cccscc"
+ inkscape:connector-curvature="0"
+ id="path8135"
+ d="m 247.77811,607.10722 2.04551,-1.97639 c 3.084,-2.18671 6.53572,-2.30166 9.97068,1.1396 -3.7021,-2.69151 -7.12396,-2.68218 -9.89762,-0.0149 -1.09475,1.05276 -1.29524,1.31798 -1.29524,1.31798 z"
+ style="opacity:0.75;fill:#ffdd7f;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter8458);fill-opacity:1" />
+ <path
+ transform="matrix(-0.85739481,-0.50081959,-0.50814335,0.85108772,529.84248,-362.00938)"
+ style="opacity:0.26000001;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter8458)"
+ d="m 253.47872,607.61144 1.81198,-1.81975 0.89043,-1.02933 c 0,0 0.0967,0.57698 -0.92284,1.70274 -1.01955,1.12575 -1.31704,1.26648 -1.31704,1.26648 z"
+ id="path8141"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccscc" />
+ <path
+ style="opacity:0.75;fill:#ffdd7f;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter8458);fill-opacity:1"
+ d="m 247.77811,607.10722 2.04551,-1.97639 c 3.084,-2.18671 6.53572,-2.30166 9.97068,1.1396 -3.7021,-2.69151 -7.12396,-2.68218 -9.89762,-0.0149 -1.09475,1.05276 -1.29524,1.31798 -1.29524,1.31798 z"
+ id="path8520"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccscc"
+ transform="matrix(-0.99573837,-0.0455901,0.04290251,-0.98645431,239.39468,636.30694)" />
+ <path
+ sodipodi:nodetypes="cccscc"
+ inkscape:connector-curvature="0"
+ id="path8522"
+ d="m 253.47872,607.61144 1.81198,-1.81975 0.89043,-1.02933 c 0,0 0.0967,0.57698 -0.92284,1.70274 -1.01955,1.12575 -1.31704,1.26648 -1.31704,1.26648 z"
+ style="opacity:0.26000001;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter8458)"
+ transform="matrix(0.85739481,-0.50081959,0.50814334,0.85108772,-505.64132,-362.00938)" />
+ <g
+ id="g8610"
+ transform="matrix(0.89086699,0,0,0.89086699,1.3095957,0.65789596)"
+ style="stroke-width:1.12250197">
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path8604"
+ d="m 9.2579495,22.303462 v 2.775595 H 14.738929 V 22.303462 H 9.2579495"
+ style="fill:#b3b3b3;fill-rule:evenodd;stroke:#000000;stroke-width:1.12250197px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <g
+ transform="translate(1.4807662e-7,-1.9999993)"
+ id="g8598"
+ style="stroke-width:1.12250197">
+ <path
+ style="opacity:1;fill:#ffdd7f;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.12250197;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 11.99844,10.802801 c -3.2052325,0.02969 -5.1845825,2.276669 -5.4185544,4.815007 -0.3198967,3.47053 2.5425835,5.386805 2.525121,6.840417 l 0.1529428,1.845236 c 1.5288716,1.208207 3.9487396,1.145923 5.4809796,0 l 0.156065,-1.845236 c -0.01746,-1.453612 2.845017,-3.369887 2.525121,-6.840417 -0.233972,-2.538338 -2.216444,-4.785316 -5.421675,-4.815007 z"
+ id="path8547"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="csccccsc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.12250197px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
+ d="m 11.136954,19.088537 -1.3343579,-3.770478 1.0987029,0.463355 1.098702,-0.524566 1.098703,0.48784 1.098702,-0.50008 -0.661058,1.83627"
+ id="path8094"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccc" />
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_line_level-24.svg b/pixmaps/src/gwy_line_level-24.svg
new file mode 100644
index 0000000..c1489c7
--- /dev/null
+++ b/pixmaps/src/gwy_line_level-24.svg
@@ -0,0 +1,177 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24.000002"
+ viewBox="0 0 24 24.000002"
+ id="svg8366"
+ version="1.1"
+ inkscape:version="0.92+devel unknown"
+ sodipodi:docname="gwy_line_level-24.svg">
+ <defs
+ id="defs8368" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1"
+ inkscape:cx="5.9999989"
+ inkscape:cy="33.749495"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1149"
+ inkscape:window-x="0"
+ inkscape:window-y="32"
+ inkscape:window-maximized="1"
+ inkscape:document-rotation="0">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4272"
+ units="px"
+ spacingx="0.46875"
+ spacingy="0.5"
+ empspacing="2" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8371">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-108.11022,-621.909)">
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#d0e2f2;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.00000012;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8276"
+ width="23.050062"
+ height="23.000006"
+ x="108.56017"
+ y="622.409" />
+ <path
+ style="fill:#255278;fill-rule:evenodd;stroke:#336ea1;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;fill-opacity:1"
+ d="m 108.1102,625.39853 h 24"
+ id="path8537"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8539"
+ d="m 108.11022,628.409 h 24.00181"
+ style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#57a0de;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 108.11022,632.409 h 24"
+ id="path8541"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8543"
+ d="m 108.1102,636.40899 h 24"
+ style="fill:none;fill-rule:evenodd;stroke:#57a0de;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;opacity:1;vector-effect:none;fill-opacity:1;stroke-dashoffset:0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.0209229;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 108.16028,641.40901 h 24"
+ id="path8545"
+ inkscape:connector-curvature="0" />
+ <path
+ style="opacity:1;vector-effect:none;fill:#255278;fill-opacity:1;fill-rule:evenodd;stroke:#336ea1;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 108.11022,638.409 h 24"
+ id="path8549"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 108.11022,627.409 h 24.00181"
+ id="path4896"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4898"
+ d="m 108.11021,629.40901 h 24.00181"
+ style="fill:#255278;fill-rule:evenodd;stroke:#336ea1;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;opacity:1;vector-effect:none;fill-opacity:1;stroke-dashoffset:0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 108.11022,624.409 h 24.00181"
+ id="path4900"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4902"
+ d="m 108.11022,631.409 h 24.00181"
+ style="opacity:1;vector-effect:none;fill:#255278;fill-opacity:1;fill-rule:evenodd;stroke:#336ea1;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ style="fill:#eff6fc;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;fill-opacity:1"
+ d="m 108.15847,634.40901 h 24.00181"
+ id="path4904"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4906"
+ d="m 108.10841,637.409 h 24.00181"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:#255278;fill-rule:evenodd;stroke:#336ea1;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;opacity:1;vector-effect:none;fill-opacity:1;stroke-dashoffset:0"
+ d="m 108.15847,635.40901 h 24.00181"
+ id="path4908"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4910"
+ d="m 108.10841,633.409 h 24.00181"
+ style="fill:none;fill-rule:evenodd;stroke:#57a0de;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 108.15847,630.40901 h 24.00181"
+ id="path4912"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4914"
+ d="m 108.10841,639.409 h 24.00181"
+ style="opacity:1;vector-effect:none;fill:#eff6fc;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#57a0de;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;opacity:1;vector-effect:none;fill-opacity:1;stroke-dashoffset:0"
+ d="m 108.15847,642.40901 h 24.00181"
+ id="path4916"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4918"
+ d="m 108.15847,643.40901 h 24.00181"
+ style="fill:#255278;fill-rule:evenodd;stroke:#336ea1;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;opacity:1;vector-effect:none;fill-opacity:1;stroke-dashoffset:0" />
+ <rect
+ y="622.409"
+ x="108.61022"
+ height="23.000006"
+ width="23.050062"
+ id="rect4920"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="622.409"
+ x="108.56017"
+ height="23.000006"
+ width="23.050062"
+ id="rect4922"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_load_debug-20.svg b/pixmaps/src/gwy_load_debug-20.svg
new file mode 100644
index 0000000..7931f32
--- /dev/null
+++ b/pixmaps/src/gwy_load_debug-20.svg
@@ -0,0 +1,133 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="20"
+ height="20"
+ viewBox="0 0 20 20"
+ id="svg8833"
+ version="1.1"
+ inkscape:version="0.92+devel unknown"
+ sodipodi:docname="gwy_load_debug-20.svg">
+ <defs
+ id="defs8835">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient980">
+ <stop
+ id="stop978"
+ offset="0"
+ style="stop-color:#e7e78e;stop-opacity:1" />
+ <stop
+ style="stop-color:#e8d665;stop-opacity:1"
+ offset="0.5"
+ id="stop976" />
+ <stop
+ id="stop974"
+ offset="1"
+ style="stop-color:#d4ad1c;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ gradientTransform="translate(-11.142957,824.89612)"
+ xlink:href="#linearGradient4140"
+ id="linearGradient4171"
+ gradientUnits="userSpaceOnUse"
+ x1="207.50029"
+ y1="247.92804"
+ x2="272.91217"
+ y2="361.22473" />
+ <linearGradient
+ id="linearGradient4140">
+ <stop
+ style="stop-color:#d7e3f4;stop-opacity:1;"
+ offset="0"
+ id="stop4142" />
+ <stop
+ style="stop-color:#f1f5fb;stop-opacity:1"
+ offset="1"
+ id="stop4144" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient980"
+ id="radialGradient972"
+ cx="206.41296"
+ cy="502.06705"
+ fx="206.41296"
+ fy="502.06705"
+ r="10"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.5000009,1.7594542e-6,-1.8767497e-6,1.6,-102.97495,-301.24055)" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="12.895588"
+ inkscape:cx="10.235174"
+ inkscape:cy="12.528501"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1149"
+ inkscape:window-x="0"
+ inkscape:window-y="32"
+ inkscape:window-maximized="1"
+ inkscape:document-rotation="0">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="0.5"
+ spacingy="0.5"
+ enabled="true"
+ visible="true"
+ units="px"
+ empspacing="2" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8838">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-199.64375,-494.06708)">
+ <circle
+ style="color:#000000;overflow:visible;vector-effect:none;fill:url(#radialGradient972);fill-rule:evenodd;stroke:none;stroke-width:1.00000012;fill-opacity:1"
+ id="path101"
+ cx="209.64375"
+ cy="504.06708"
+ r="10" />
+ <path
+ style="fill:#000000;stroke-width:0.08205362"
+ d="m 212.59869,510.41856 c -1.06373,0.287 -2.25786,0.20514 -3.27268,-0.22433 -0.26885,-0.11378 -0.50132,-0.18223 -0.51659,-0.15209 -0.0153,0.0301 0.002,0.57048 0.0376,1.20076 0.0573,1.00248 0.0423,1.1691 -0.11912,1.33056 -0.2104,0.2104 -0.59971,0.2696 -0.75456,0.11475 -0.0575,-0.0575 -0.16104,-0.89257 -0.23009,-1.8557 l -0.12555,-1.75117 -0.31496,-0.31826 c -0.28017,-0.28266 -0.54887,-0.67016 -0.73569,-1.06018 -0.0461,-0.0964 -0.22245,0.27119 -0.66983,1.39671 -0.74984,1.88643 -0.9 [...]
+ id="path2113"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_load_info-20.svg b/pixmaps/src/gwy_load_info-20.svg
new file mode 100644
index 0000000..549b1ea
--- /dev/null
+++ b/pixmaps/src/gwy_load_info-20.svg
@@ -0,0 +1,144 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="20"
+ height="20"
+ viewBox="0 0 20 20"
+ id="svg8833"
+ version="1.1"
+ inkscape:version="0.92+devel unknown"
+ sodipodi:docname="gwy_load_info-20.svg">
+ <defs
+ id="defs8835">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient980">
+ <stop
+ id="stop978"
+ offset="0"
+ style="stop-color:#70aee3;stop-opacity:1" />
+ <stop
+ style="stop-color:#3f88c7;stop-opacity:1"
+ offset="0.5"
+ id="stop976" />
+ <stop
+ id="stop974"
+ offset="1"
+ style="stop-color:#295a84;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ gradientTransform="translate(-11.142957,824.89612)"
+ xlink:href="#linearGradient4140"
+ id="linearGradient4171"
+ gradientUnits="userSpaceOnUse"
+ x1="207.50029"
+ y1="247.92804"
+ x2="272.91217"
+ y2="361.22473" />
+ <linearGradient
+ id="linearGradient4140">
+ <stop
+ style="stop-color:#d7e3f4;stop-opacity:1;"
+ offset="0"
+ id="stop4142" />
+ <stop
+ style="stop-color:#f1f5fb;stop-opacity:1"
+ offset="1"
+ id="stop4144" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient980"
+ id="radialGradient972"
+ cx="206.41296"
+ cy="502.06705"
+ fx="206.41296"
+ fy="502.06705"
+ r="10"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.5000009,1.7594542e-6,-1.8767497e-6,1.6,-102.97495,-301.24055)" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="44.85"
+ inkscape:cx="10.000003"
+ inkscape:cy="10.000002"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1149"
+ inkscape:window-x="0"
+ inkscape:window-y="32"
+ inkscape:window-maximized="1"
+ inkscape:document-rotation="0">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="0.5"
+ spacingy="0.5"
+ enabled="true"
+ visible="true"
+ units="px"
+ empspacing="2" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8838">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-199.64375,-494.06708)">
+ <circle
+ style="color:#000000;overflow:visible;vector-effect:none;fill:url(#radialGradient972);fill-rule:evenodd;stroke:none;stroke-width:1.00000012;fill-opacity:1"
+ id="path101"
+ cx="209.64375"
+ cy="504.06708"
+ r="10" />
+ <g
+ id="g1007"
+ transform="translate(0,-0.39018934)">
+ <path
+ sodipodi:nodetypes="csccccssccscccc"
+ inkscape:connector-curvature="0"
+ id="path997"
+ d="m 211.32463,508.82231 v -5.14599 c 0,-1.29297 0.10342,-2.74108 0.10342,-2.74108 0,-0.28445 -0.23274,-0.4396 -0.59476,-0.4396 -0.74992,0.28445 -2.81866,0.49132 -4.60294,0.72405 -0.0517,0.15516 0,0.67234 0.0517,0.8275 1.39641,0.15515 1.68086,0.33616 1.68086,1.81015 v 4.96497 c 0,2.14631 -0.28445,2.19803 -1.86187,2.32732 -0.15515,0.15516 -0.15515,0.72407 0,0.87922 1.08609,-0.0259 2.14632,-0.0517 3.54271,-0.0517 1.37055,0 2.43077,0.0259 3.54271,0.0517 0.15516,-0.15515 0.15516,-0. [...]
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:medium;line-height:120.00000477%;font-family:'Linux Libertine O';-inkscape-font-specification:'Linux Libertine O Bold';text-decoration:none;text-decoration-line:none;text-decoration-color:#000000;shape-padding:0;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.94606912;stroke-linecap:round;stroke-linejoin:round;paint-order:fill markers stroke" />
+ <path
+ sodipodi:nodetypes="sssss"
+ inkscape:connector-curvature="0"
+ id="path991"
+ d="m 207.83362,497.99844 c 0,0.85334 0.62063,1.7067 1.655,1.7067 1.16367,0 1.83601,-0.93093 1.83601,-1.60327 0,-0.77578 -0.59476,-1.70671 -1.68086,-1.70671 -1.21537,0 -1.81015,0.82749 -1.81015,1.60328 z"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:medium;line-height:120.00000477%;font-family:'Linux Libertine O';-inkscape-font-specification:'Linux Libertine O Bold';text-decoration:none;text-decoration-line:none;text-decoration-color:#000000;shape-padding:0;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.94606912;stroke-linecap:round;stroke-linejoin:round;paint-order:fill markers stroke" />
+ </g>
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_load_warning-20.svg b/pixmaps/src/gwy_load_warning-20.svg
new file mode 100644
index 0000000..43a49a9
--- /dev/null
+++ b/pixmaps/src/gwy_load_warning-20.svg
@@ -0,0 +1,148 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="20"
+ height="20"
+ viewBox="0 0 20 20"
+ id="svg8833"
+ version="1.1"
+ inkscape:version="0.92+devel unknown"
+ sodipodi:docname="gwy_load_warning-20.svg">
+ <defs
+ id="defs8835">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient980">
+ <stop
+ id="stop978"
+ offset="0"
+ style="stop-color:#ffe538;stop-opacity:1" />
+ <stop
+ style="stop-color:#ffbb00;stop-opacity:1"
+ offset="0.5"
+ id="stop976" />
+ <stop
+ id="stop974"
+ offset="1"
+ style="stop-color:#d45a00;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ gradientTransform="translate(-11.142957,824.89612)"
+ xlink:href="#linearGradient4140"
+ id="linearGradient4171"
+ gradientUnits="userSpaceOnUse"
+ x1="207.50029"
+ y1="247.92804"
+ x2="272.91217"
+ y2="361.22473" />
+ <linearGradient
+ id="linearGradient4140">
+ <stop
+ style="stop-color:#d7e3f4;stop-opacity:1;"
+ offset="0"
+ id="stop4142" />
+ <stop
+ style="stop-color:#f1f5fb;stop-opacity:1"
+ offset="1"
+ id="stop4144" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient980"
+ id="radialGradient972"
+ cx="206.41296"
+ cy="502.06705"
+ fx="206.41296"
+ fy="502.06705"
+ r="10"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.5000009,1.7594542e-6,-1.8767497e-6,1.6,-102.97495,-301.24055)" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="31.713739"
+ inkscape:cx="14.934895"
+ inkscape:cy="8.3976954"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1149"
+ inkscape:window-x="0"
+ inkscape:window-y="32"
+ inkscape:window-maximized="1"
+ inkscape:document-rotation="0">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="0.5"
+ spacingy="0.5"
+ enabled="true"
+ visible="true"
+ units="px"
+ empspacing="2" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8838">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-199.64375,-494.06708)">
+ <circle
+ style="color:#000000;overflow:visible;vector-effect:none;fill:url(#radialGradient972);fill-rule:evenodd;stroke:none;stroke-width:1.00000012;fill-opacity:1"
+ id="path101"
+ cx="209.64375"
+ cy="504.06708"
+ r="10" />
+ <g
+ id="g1938"
+ transform="translate(0.02011123,0.01629217)">
+ <g
+ transform="matrix(1.0905228,0,0,1.0905228,-18.945226,-45.163896)"
+ id="text4304"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:23.31949234px;line-height:120.00000477%;font-family:'Linux Libertine O';-inkscape-font-specification:'Linux Libertine O Bold';text-decoration:none;text-decoration-line:none;text-decoration-color:#000000;shape-padding:0;overflow:visible;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.85315216;stroke-linecap:round;stroke-linejoin:round;paint-order:fil [...]
+ aria-label="!">
+ <path
+ inkscape:connector-curvature="0"
+ id="path1933"
+ d="m 209.59568,496.13597 c -0.72291,0 -1.679,0.44307 -1.679,1.74896 0,0.90946 0.16323,1.58573 0.32647,2.40191 0.27983,1.65568 0.60631,4.45402 0.65294,5.55004 0.0233,0.79286 0.07,1.25925 0.69959,1.25925 0.53635,0 0.62963,-0.53635 0.65294,-0.97942 0.0233,-1.14265 0.30316,-3.4746 0.69959,-5.75991 0.13992,-0.76955 0.32647,-1.65569 0.32647,-2.47187 0,-1.18929 -0.81618,-1.74896 -1.679,-1.74896 z"
+ style="stroke-width:0.85315216" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path1928"
+ d="m 207.89336,509.52855 c 0,0.88614 0.74622,1.58573 1.679,1.58573 0.93278,0 1.72564,-0.74622 1.72564,-1.63237 0,-0.90946 -0.74622,-1.60904 -1.679,-1.60904 -0.93278,0 -1.72564,0.74622 -1.72564,1.65568 z"
+ style="stroke-width:0.85315216" />
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/devel-docs/libgwydgets/html/gwy_local_slope-24.png b/pixmaps/src/gwy_local_slope-24.png
similarity index 100%
copy from devel-docs/libgwydgets/html/gwy_local_slope-24.png
copy to pixmaps/src/gwy_local_slope-24.png
diff --git a/pixmaps/src/gwy_local_slope-24.svg b/pixmaps/src/gwy_local_slope-24.svg
new file mode 100644
index 0000000..722279e
--- /dev/null
+++ b/pixmaps/src/gwy_local_slope-24.svg
@@ -0,0 +1,163 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 22.499999 22.499999"
+ id="svg8233"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_local_slope-24.svg">
+ <defs
+ id="defs8235">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient8495">
+ <stop
+ id="stop8493"
+ offset="0"
+ style="stop-color:#030401;stop-opacity:0.97315437" />
+ <stop
+ style="stop-color:#76b638;stop-opacity:0.99328858"
+ offset="0.6243822"
+ id="stop8491" />
+ <stop
+ id="stop8489"
+ offset="1"
+ style="stop-color:#f1f9ea;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8495"
+ id="linearGradient8432"
+ x1="400.07837"
+ y1="680.96521"
+ x2="400.07837"
+ y2="670.64807"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0,0.65217388,1,0,-269.63684,406.97601)" />
+ <linearGradient
+ osb:paint="solid"
+ id="linearGradient8428">
+ <stop
+ id="stop8430"
+ offset="0"
+ style="stop-color:#4696db;stop-opacity:1;" />
+ </linearGradient>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="11.955247"
+ inkscape:cx="16.574185"
+ inkscape:cy="26.264908"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ units="px">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8238">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-393.51587,-663.14807)">
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#36531a;fill-opacity:0.98039216;fill-rule:evenodd;stroke:none;stroke-width:0.93750006;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 408.51123,663.92248 v 6.72555 h 7.03125 v -6.72555 z"
+ id="rect8276"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:url(#linearGradient8432);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.87499988;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 401.01123,663.92248 v 6.72555 h 7.5 v -6.72555 z"
+ id="rect8424"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path8436"
+ d="m 393.98462,664.08557 v 6.72555 h 7.03125 v -6.72555 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#f0f8e8;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.93750006;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.93749994;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 393.97998,663.61678 v 6.72554 h 21.5625 v -6.72554 z"
+ id="rect8438"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path8449"
+ d="m 408.04248,678.61678 v 6.5625 h 7.03125 v -6.5625 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#36531a;fill-opacity:0.98039216;fill-rule:evenodd;stroke:none;stroke-width:0.9375;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#36531a;fill-opacity:0.98039216;fill-rule:evenodd;stroke:none;stroke-width:0.9375;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 393.97998,678.61678 v 6.5625 h 7.03125 v -6.5625 z"
+ id="path8447"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path8442"
+ d="m 401.01123,678.61678 v 6.5625 h 7.5 v -6.5625 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#f0f8e8;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.87499988;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="393.97998"
+ x="678.61676"
+ height="21.5625"
+ width="6.5625"
+ id="rect8440"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.93749994;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ transform="matrix(0,1,1,0,0,0)" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.93749994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 393.51587,672.05432 h 7.5 l 7.5,4.6875 h 7.5"
+ id="path8452"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_logscale_horizontal-24.svg b/pixmaps/src/gwy_logscale_horizontal-24.svg
new file mode 100644
index 0000000..f0fb706
--- /dev/null
+++ b/pixmaps/src/gwy_logscale_horizontal-24.svg
@@ -0,0 +1,868 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg9687"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_logscale_horizontal-24.svg"
+ inkscape:export-filename="gwy_logscale_horizontal-24.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96">
+ <defs
+ id="defs9689">
+ <linearGradient
+ gradientTransform="translate(119.22988,1103.9078)"
+ xlink:href="#linearGradient4140"
+ id="linearGradient4171"
+ gradientUnits="userSpaceOnUse"
+ x1="207.50029"
+ y1="247.92804"
+ x2="272.91217"
+ y2="361.22473" />
+ <linearGradient
+ id="linearGradient4140">
+ <stop
+ style="stop-color:#d7e3f4;stop-opacity:1;"
+ offset="0"
+ id="stop4142" />
+ <stop
+ style="stop-color:#f1f5fb;stop-opacity:1"
+ offset="1"
+ id="stop4144" />
+ </linearGradient>
+ <linearGradient
+ y2="361.22473"
+ x2="272.91217"
+ y1="247.92804"
+ x1="207.50029"
+ gradientTransform="translate(76.458263,1103.0614)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient8503"
+ xlink:href="#linearGradient4140"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="361.22473"
+ x2="272.91217"
+ y1="247.92804"
+ x1="207.50029"
+ gradientTransform="translate(92.024673,1111.5521)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient11272"
+ xlink:href="#linearGradient4140"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4140"
+ id="linearGradient9134"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(51.782953,1109.0832)"
+ x1="207.50029"
+ y1="247.92804"
+ x2="272.91217"
+ y2="361.22473" />
+ <linearGradient
+ gradientTransform="translate(129.22988,1088.9078)"
+ xlink:href="#linearGradient4140"
+ id="linearGradient4171-3"
+ gradientUnits="userSpaceOnUse"
+ x1="207.50029"
+ y1="247.92804"
+ x2="272.91217"
+ y2="361.22473" />
+ <linearGradient
+ y2="361.22473"
+ x2="272.91217"
+ y1="247.92804"
+ x1="207.50029"
+ gradientTransform="translate(86.458263,1088.0614)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient8503-5"
+ xlink:href="#linearGradient4140"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="361.22473"
+ x2="272.91217"
+ y1="247.92804"
+ x1="207.50029"
+ gradientTransform="translate(102.02467,1096.5521)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient11272-3"
+ xlink:href="#linearGradient4140"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4140"
+ id="linearGradient9134-5"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(61.782953,1094.0832)"
+ x1="207.50029"
+ y1="247.92804"
+ x2="272.91217"
+ y2="361.22473" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="17.577861"
+ inkscape:cx="2.8845727"
+ inkscape:cy="17.437022"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-global="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata9692">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-306.29821,-648.57531)">
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4385"
+ y="993.97675"
+ x="120.59962">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4387"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4487"
+ y="1089.8529"
+ x="144.7296">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4489"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4536"
+ y="1029.2654"
+ x="79.29689">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4538"
+ font-size="4.0000" />
+ </text>
+ <path
+ inkscape:connector-curvature="0"
+ d=""
+ cx="242.94168"
+ cy="308.38486"
+ r="70.205605"
+ id="path4138-6"
+ style="opacity:1;fill:url(#linearGradient4171);fill-opacity:1;stroke:#000000;stroke-width:5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g5318"
+ transform="translate(40.116283,828.59186)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g6386"
+ transform="translate(587.33752,300.39388)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g7162"
+ transform="translate(-107.30465,143.63199)" />
+ <text
+ xml:space="preserve"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:0px;word-spacing:0px;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;color-interpolat [...]
+ x="440.86383"
+ y="1217.916"
+ id="text8015"><tspan
+ id="tspan8017"
+ x="440.86383"
+ y="1217.916" /></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+ x="-1132.2377"
+ y="-109.14887"
+ id="text9295"><tspan
+ id="tspan9297"
+ x="-1132.2377"
+ y="-109.14887" /></text>
+ <text
+ id="text7408-2"
+ class="fil7 fnt4"
+ y="172.73296"
+ x="-1015.0248"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ id="text7422"
+ class="fil7 fnt4"
+ y="200.19957"
+ x="-998.65192"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4385-9"
+ y="993.13031"
+ x="77.828003">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4387-0"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4487-9"
+ y="1089.0065"
+ x="101.95798">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4489-1"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4536-7"
+ y="1028.4189"
+ x="36.525269">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4538-7"
+ font-size="4.0000" />
+ </text>
+ <path
+ inkscape:connector-curvature="0"
+ d=""
+ cx="242.94168"
+ cy="308.38486"
+ r="70.205605"
+ id="path4138-6-1"
+ style="opacity:1;fill:url(#linearGradient8503);fill-opacity:1;stroke:#000000;stroke-width:5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g5318-7"
+ transform="translate(-2.65532,827.74545)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g6386-6"
+ transform="translate(544.56593,299.54747)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g7162-7"
+ transform="translate(-150.07625,142.78558)" />
+ <text
+ xml:space="preserve"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:0px;word-spacing:0px;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;color-interpolat [...]
+ x="398.09222"
+ y="1217.0696"
+ id="text8015-3"><tspan
+ id="tspan8017-6"
+ x="398.09222"
+ y="1217.0696" /></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+ x="-1175.0093"
+ y="-109.99525"
+ id="text9295-5"><tspan
+ id="tspan9297-6"
+ x="-1175.0093"
+ y="-109.99525" /></text>
+ <text
+ id="text7408-2-3"
+ class="fil7 fnt4"
+ y="171.88655"
+ x="-1057.7965"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ id="text7422-9"
+ class="fil7 fnt4"
+ y="199.35316"
+ x="-1041.4236"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4385-7"
+ y="1001.621"
+ x="93.394409">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4387-2"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4487-3"
+ y="1097.4972"
+ x="117.52438">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4489-7"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4536-2"
+ y="1036.9097"
+ x="52.091675">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4538-5"
+ font-size="4.0000" />
+ </text>
+ <path
+ inkscape:connector-curvature="0"
+ d=""
+ cx="242.94168"
+ cy="308.38486"
+ r="70.205605"
+ id="path4138-6-3"
+ style="opacity:1;fill:url(#linearGradient11272);fill-opacity:1;stroke:#000000;stroke-width:5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g5318-3"
+ transform="translate(12.91108,836.23617)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g6386-64"
+ transform="translate(560.13232,308.03819)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g7162-03"
+ transform="translate(-134.50985,151.2763)" />
+ <text
+ xml:space="preserve"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:0px;word-spacing:0px;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;color-interpolat [...]
+ x="413.65863"
+ y="1225.5603"
+ id="text8015-5"><tspan
+ id="tspan8017-85"
+ x="413.65863"
+ y="1225.5603" /></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+ x="-1159.4429"
+ y="-101.50452"
+ id="text9295-0"><tspan
+ id="tspan9297-9"
+ x="-1159.4429"
+ y="-101.50452" /></text>
+ <text
+ id="text7408-2-9"
+ class="fil7 fnt4"
+ y="180.37727"
+ x="-1042.2301"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ id="text7422-8"
+ class="fil7 fnt4"
+ y="207.84389"
+ x="-1025.8572"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4385-2"
+ y="999.1521"
+ x="53.152679">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4387-6"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4487-5"
+ y="1095.0282"
+ x="77.282654">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4489-8"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4536-7-2"
+ y="1034.4407"
+ x="11.849936">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4538-9"
+ font-size="4.0000" />
+ </text>
+ <path
+ inkscape:connector-curvature="0"
+ d=""
+ cx="242.94168"
+ cy="308.38486"
+ r="70.205605"
+ id="path4138-6-6"
+ style="opacity:1;fill:url(#linearGradient9134);fill-opacity:1;stroke:#000000;stroke-width:5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g5318-4"
+ transform="translate(-27.33062,833.76722)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g6386-8"
+ transform="translate(519.89062,305.56924)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g7162-7-4"
+ transform="translate(-174.75156,148.80734)" />
+ <text
+ xml:space="preserve"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:0px;word-spacing:0px;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;color-interpolat [...]
+ x="373.41693"
+ y="1223.0913"
+ id="text8015-0"><tspan
+ id="tspan8017-8"
+ x="373.41693"
+ y="1223.0913" /></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+ x="-1199.6846"
+ y="-103.97346"
+ id="text9295-6-9"><tspan
+ id="tspan9297-2"
+ x="-1199.6846"
+ y="-103.97346" /></text>
+ <text
+ id="text7408-2-4"
+ class="fil7 fnt4"
+ y="177.90834"
+ x="-1082.4718"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ id="text7422-7"
+ class="fil7 fnt4"
+ y="205.37495"
+ x="-1066.0989"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4385-91"
+ y="978.97675"
+ x="130.59962">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4387-27"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4487-0"
+ y="1074.8529"
+ x="154.7296">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4489-9"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4536-3"
+ y="1014.2654"
+ x="89.29689">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4538-6"
+ font-size="4.0000" />
+ </text>
+ <path
+ inkscape:connector-curvature="0"
+ d=""
+ cx="242.94168"
+ cy="308.38486"
+ r="70.205605"
+ id="path4138-6-0"
+ style="opacity:1;fill:url(#linearGradient4171-3);fill-opacity:1;stroke:#000000;stroke-width:5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g5318-6"
+ transform="translate(50.116283,813.59186)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g6386-2"
+ transform="translate(597.33752,285.39388)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g7162-6"
+ transform="translate(-97.30465,128.63199)" />
+ <text
+ xml:space="preserve"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:0px;word-spacing:0px;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;color-interpolat [...]
+ x="450.86383"
+ y="1202.916"
+ id="text8015-1"><tspan
+ id="tspan8017-87"
+ x="450.86383"
+ y="1202.916" /></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+ x="-1122.2377"
+ y="-124.14887"
+ id="text9295-9"><tspan
+ id="tspan9297-20"
+ x="-1122.2377"
+ y="-124.14887" /></text>
+ <text
+ id="text7408-2-2"
+ class="fil7 fnt4"
+ y="157.73296"
+ x="-1005.0248"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ id="text7422-3"
+ class="fil7 fnt4"
+ y="185.19957"
+ x="-988.65192"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4385-9-7"
+ y="978.13031"
+ x="87.828003">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4387-0-5"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4487-9-9"
+ y="1074.0065"
+ x="111.95798">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4489-1-2"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4536-7-28"
+ y="1013.4189"
+ x="46.525269">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4538-7-9"
+ font-size="4.0000" />
+ </text>
+ <path
+ inkscape:connector-curvature="0"
+ d=""
+ cx="242.94168"
+ cy="308.38486"
+ r="70.205605"
+ id="path4138-6-1-7"
+ style="opacity:1;fill:url(#linearGradient8503-5);fill-opacity:1;stroke:#000000;stroke-width:5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g5318-7-3"
+ transform="translate(7.34468,812.74545)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g6386-6-6"
+ transform="translate(554.56593,284.54747)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g7162-7-1"
+ transform="translate(-140.07625,127.78558)" />
+ <text
+ xml:space="preserve"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:0px;word-spacing:0px;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;color-interpolat [...]
+ x="408.09222"
+ y="1202.0696"
+ id="text8015-3-2"><tspan
+ id="tspan8017-6-9"
+ x="408.09222"
+ y="1202.0696" /></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+ x="-1165.0093"
+ y="-124.99525"
+ id="text9295-5-3"><tspan
+ id="tspan9297-6-1"
+ x="-1165.0093"
+ y="-124.99525" /></text>
+ <text
+ id="text7408-2-3-9"
+ class="fil7 fnt4"
+ y="156.88655"
+ x="-1047.7965"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ id="text7422-9-4"
+ class="fil7 fnt4"
+ y="184.35316"
+ x="-1031.4236"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4385-7-7"
+ y="986.62103"
+ x="103.39441">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4387-2-8"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4487-3-4"
+ y="1082.4972"
+ x="127.52438">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4489-7-5"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4536-2-0"
+ y="1021.9097"
+ x="62.091675">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4538-5-3"
+ font-size="4.0000" />
+ </text>
+ <path
+ inkscape:connector-curvature="0"
+ d=""
+ cx="242.94168"
+ cy="308.38486"
+ r="70.205605"
+ id="path4138-6-3-6"
+ style="opacity:1;fill:url(#linearGradient11272-3);fill-opacity:1;stroke:#000000;stroke-width:5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g5318-3-1"
+ transform="translate(22.91108,821.23617)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g6386-64-0"
+ transform="translate(570.13232,293.03819)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g7162-03-6"
+ transform="translate(-124.50985,136.2763)" />
+ <text
+ xml:space="preserve"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:0px;word-spacing:0px;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;color-interpolat [...]
+ x="423.65863"
+ y="1210.5603"
+ id="text8015-5-3"><tspan
+ id="tspan8017-85-2"
+ x="423.65863"
+ y="1210.5603" /></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+ x="-1149.4429"
+ y="-116.50452"
+ id="text9295-0-0"><tspan
+ id="tspan9297-9-6"
+ x="-1149.4429"
+ y="-116.50452" /></text>
+ <text
+ id="text7408-2-9-1"
+ class="fil7 fnt4"
+ y="165.37727"
+ x="-1032.2301"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ id="text7422-8-5"
+ class="fil7 fnt4"
+ y="192.84389"
+ x="-1015.8571"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4385-2-5"
+ y="984.1521"
+ x="63.152679">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4387-6-4"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4487-5-7"
+ y="1080.0282"
+ x="87.282654">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4489-8-6"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4536-7-2-5"
+ y="1019.4407"
+ x="21.849937">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4538-9-6"
+ font-size="4.0000" />
+ </text>
+ <path
+ inkscape:connector-curvature="0"
+ d=""
+ cx="242.94168"
+ cy="308.38486"
+ r="70.205605"
+ id="path4138-6-6-9"
+ style="opacity:1;fill:url(#linearGradient9134-5);fill-opacity:1;stroke:#000000;stroke-width:5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g5318-4-3"
+ transform="translate(-17.33062,818.76722)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g6386-8-7"
+ transform="translate(529.89062,290.56924)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g7162-7-4-4"
+ transform="translate(-164.75156,133.80734)" />
+ <text
+ xml:space="preserve"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:0px;word-spacing:0px;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;color-interpolat [...]
+ x="383.41693"
+ y="1208.0913"
+ id="text8015-0-5"><tspan
+ id="tspan8017-8-2"
+ x="383.41693"
+ y="1208.0913" /></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+ x="-1189.6846"
+ y="-118.97346"
+ id="text9295-6-9-5"><tspan
+ id="tspan9297-2-4"
+ x="-1189.6846"
+ y="-118.97346" /></text>
+ <text
+ id="text7408-2-4-7"
+ class="fil7 fnt4"
+ y="162.90834"
+ x="-1072.4718"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ id="text7422-7-4"
+ class="fil7 fnt4"
+ y="190.37495"
+ x="-1056.0989"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <g
+ id="g8896"
+ transform="rotate(90,323.99319,640.89994)">
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#ffbb00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 349.16871,633.09479 h 6 v 26 h -6 z"
+ id="path8856"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 349.66855,657.09492 h 3"
+ id="path8858"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8860"
+ d="m 349.66855,650.09492 h 3"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8862"
+ d="m 349.66855,645.09492 h 3"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8864"
+ d="m 349.66855,639.09492 h 3"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 349.66855,642.09492 h 3"
+ id="path8866"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 349.66855,635.09492 h 3"
+ id="path8868"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 349.66855,637.09492 h 3"
+ id="path8886"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ aria-label="log"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:9.80000019px;line-height:125%;font-family:Ubuntu;-inkscape-font-specification:Ubuntu;text-align:start;letter-spacing:0.38999999px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="text8572">
+ <path
+ d="m 313.1014,659.94999 q -0.5292,-0.01 -0.882,-0.1176 -0.343,-0.1078 -0.5488,-0.3038 -0.2058,-0.2058 -0.294,-0.4998 -0.0784,-0.3038 -0.0784,-0.686 v -5.8996 l 1.1858,-0.196 v 5.8702 q 0,0.2156 0.0294,0.3626 0.0392,0.147 0.1274,0.2548 0.0882,0.098 0.2352,0.1568 0.1568,0.049 0.392,0.0784 z"
+ style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:9.80000019px;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Medium';text-align:start;letter-spacing:0.38999999px;text-anchor:start"
+ id="path8567" />
+ <path
+ d="m 319.25258,657.28439 q 0,0.6076 -0.1764,1.1074 -0.1764,0.4998 -0.4998,0.8526 -0.3234,0.3528 -0.784,0.5488 -0.4508,0.196 -0.9996,0.196 -0.5488,0 -0.9996,-0.196 -0.4508,-0.196 -0.7742,-0.5488 -0.3234,-0.3528 -0.5096,-0.8526 -0.1764,-0.4998 -0.1764,-1.1074 0,-0.6076 0.1764,-1.0976 0.1862,-0.4998 0.5096,-0.8526 0.3332,-0.3528 0.784,-0.539 0.4508,-0.196 0.9898,-0.196 0.539,0 0.9898,0.196 0.4606,0.1862 0.784,0.539 0.3234,0.3528 0.4998,0.8526 0.1862,0.49 0.1862,1.0976 z m -1.2152,0 [...]
+ style="letter-spacing:-0.22px"
+ id="path8569" />
+ <path
+ d="m 321.18521,657.15699 q 0,0.7546 0.3234,1.1074 0.3332,0.343 0.8526,0.343 0.2842,0 0.5292,-0.0784 0.2548,-0.0784 0.4116,-0.1862 v -2.6558 q -0.1274,-0.0294 -0.3136,-0.049 -0.1862,-0.0294 -0.4704,-0.0294 -0.6468,0 -0.9898,0.4312 -0.343,0.4214 -0.343,1.1172 z m 3.3026,2.1756 q 0,1.225 -0.6272,1.7934 -0.6174,0.5684 -1.9012,0.5684 -0.4704,0 -0.9212,-0.0784 -0.441,-0.0784 -0.8036,-0.2058 l 0.2156,-1.0094 q 0.3038,0.1274 0.686,0.2058 0.392,0.0784 0.8428,0.0784 0.7154,0 1.0192,-0.294 [...]
+ style="letter-spacing:-0.22px"
+ id="path8571" />
+ </g>
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_logscale_vertical-24.svg b/pixmaps/src/gwy_logscale_vertical-24.svg
new file mode 100644
index 0000000..6eb7658
--- /dev/null
+++ b/pixmaps/src/gwy_logscale_vertical-24.svg
@@ -0,0 +1,872 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg9687"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_logscale_vertical-24.svg"
+ inkscape:export-filename="gwy_graph_function-24.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96">
+ <defs
+ id="defs9689">
+ <linearGradient
+ gradientTransform="translate(119.22988,1103.9078)"
+ xlink:href="#linearGradient4140"
+ id="linearGradient4171"
+ gradientUnits="userSpaceOnUse"
+ x1="207.50029"
+ y1="247.92804"
+ x2="272.91217"
+ y2="361.22473" />
+ <linearGradient
+ id="linearGradient4140">
+ <stop
+ style="stop-color:#d7e3f4;stop-opacity:1;"
+ offset="0"
+ id="stop4142" />
+ <stop
+ style="stop-color:#f1f5fb;stop-opacity:1"
+ offset="1"
+ id="stop4144" />
+ </linearGradient>
+ <linearGradient
+ y2="361.22473"
+ x2="272.91217"
+ y1="247.92804"
+ x1="207.50029"
+ gradientTransform="translate(76.458263,1103.0614)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient8503"
+ xlink:href="#linearGradient4140"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="361.22473"
+ x2="272.91217"
+ y1="247.92804"
+ x1="207.50029"
+ gradientTransform="translate(92.024673,1111.5521)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient11272"
+ xlink:href="#linearGradient4140"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4140"
+ id="linearGradient9134"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(51.782953,1109.0832)"
+ x1="207.50029"
+ y1="247.92804"
+ x2="272.91217"
+ y2="361.22473" />
+ <linearGradient
+ gradientTransform="translate(129.22988,1088.9078)"
+ xlink:href="#linearGradient4140"
+ id="linearGradient4171-3"
+ gradientUnits="userSpaceOnUse"
+ x1="207.50029"
+ y1="247.92804"
+ x2="272.91217"
+ y2="361.22473" />
+ <linearGradient
+ y2="361.22473"
+ x2="272.91217"
+ y1="247.92804"
+ x1="207.50029"
+ gradientTransform="translate(86.458263,1088.0614)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient8503-5"
+ xlink:href="#linearGradient4140"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="361.22473"
+ x2="272.91217"
+ y1="247.92804"
+ x1="207.50029"
+ gradientTransform="translate(102.02467,1096.5521)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient11272-3"
+ xlink:href="#linearGradient4140"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4140"
+ id="linearGradient9134-5"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(61.782953,1094.0832)"
+ x1="207.50029"
+ y1="247.92804"
+ x2="272.91217"
+ y2="361.22473" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="3.7858142"
+ inkscape:cx="-51.108476"
+ inkscape:cy="31.993101"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-global="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata9692">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-306.29821,-648.57531)">
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4385"
+ y="993.97675"
+ x="120.59962">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4387"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4487"
+ y="1089.8529"
+ x="144.7296">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4489"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4536"
+ y="1029.2654"
+ x="79.29689">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4538"
+ font-size="4.0000" />
+ </text>
+ <path
+ inkscape:connector-curvature="0"
+ d=""
+ cx="242.94168"
+ cy="308.38486"
+ r="70.205605"
+ id="path4138-6"
+ style="opacity:1;fill:url(#linearGradient4171);fill-opacity:1;stroke:#000000;stroke-width:5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g5318"
+ transform="translate(40.116283,828.59186)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g6386"
+ transform="translate(587.33752,300.39388)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g7162"
+ transform="translate(-107.30465,143.63199)" />
+ <text
+ xml:space="preserve"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:0px;word-spacing:0px;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;color-interpolat [...]
+ x="440.86383"
+ y="1217.916"
+ id="text8015"><tspan
+ id="tspan8017"
+ x="440.86383"
+ y="1217.916" /></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+ x="-1132.2377"
+ y="-109.14887"
+ id="text9295"><tspan
+ id="tspan9297"
+ x="-1132.2377"
+ y="-109.14887" /></text>
+ <text
+ id="text7408-2"
+ class="fil7 fnt4"
+ y="172.73296"
+ x="-1015.0248"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ id="text7422"
+ class="fil7 fnt4"
+ y="200.19957"
+ x="-998.65192"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4385-9"
+ y="993.13031"
+ x="77.828003">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4387-0"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4487-9"
+ y="1089.0065"
+ x="101.95798">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4489-1"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4536-7"
+ y="1028.4189"
+ x="36.525269">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4538-7"
+ font-size="4.0000" />
+ </text>
+ <path
+ inkscape:connector-curvature="0"
+ d=""
+ cx="242.94168"
+ cy="308.38486"
+ r="70.205605"
+ id="path4138-6-1"
+ style="opacity:1;fill:url(#linearGradient8503);fill-opacity:1;stroke:#000000;stroke-width:5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g5318-7"
+ transform="translate(-2.65532,827.74545)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g6386-6"
+ transform="translate(544.56593,299.54747)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g7162-7"
+ transform="translate(-150.07625,142.78558)" />
+ <text
+ xml:space="preserve"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:0px;word-spacing:0px;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;color-interpolat [...]
+ x="398.09222"
+ y="1217.0696"
+ id="text8015-3"><tspan
+ id="tspan8017-6"
+ x="398.09222"
+ y="1217.0696" /></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+ x="-1175.0093"
+ y="-109.99525"
+ id="text9295-5"><tspan
+ id="tspan9297-6"
+ x="-1175.0093"
+ y="-109.99525" /></text>
+ <text
+ id="text7408-2-3"
+ class="fil7 fnt4"
+ y="171.88655"
+ x="-1057.7965"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ id="text7422-9"
+ class="fil7 fnt4"
+ y="199.35316"
+ x="-1041.4236"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4385-7"
+ y="1001.621"
+ x="93.394409">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4387-2"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4487-3"
+ y="1097.4972"
+ x="117.52438">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4489-7"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4536-2"
+ y="1036.9097"
+ x="52.091675">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4538-5"
+ font-size="4.0000" />
+ </text>
+ <path
+ inkscape:connector-curvature="0"
+ d=""
+ cx="242.94168"
+ cy="308.38486"
+ r="70.205605"
+ id="path4138-6-3"
+ style="opacity:1;fill:url(#linearGradient11272);fill-opacity:1;stroke:#000000;stroke-width:5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g5318-3"
+ transform="translate(12.91108,836.23617)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g6386-64"
+ transform="translate(560.13232,308.03819)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g7162-03"
+ transform="translate(-134.50985,151.2763)" />
+ <text
+ xml:space="preserve"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:0px;word-spacing:0px;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;color-interpolat [...]
+ x="413.65863"
+ y="1225.5603"
+ id="text8015-5"><tspan
+ id="tspan8017-85"
+ x="413.65863"
+ y="1225.5603" /></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+ x="-1159.4429"
+ y="-101.50452"
+ id="text9295-0"><tspan
+ id="tspan9297-9"
+ x="-1159.4429"
+ y="-101.50452" /></text>
+ <text
+ id="text7408-2-9"
+ class="fil7 fnt4"
+ y="180.37727"
+ x="-1042.2301"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ id="text7422-8"
+ class="fil7 fnt4"
+ y="207.84389"
+ x="-1025.8572"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4385-2"
+ y="999.1521"
+ x="53.152679">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4387-6"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4487-5"
+ y="1095.0282"
+ x="77.282654">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4489-8"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4536-7-2"
+ y="1034.4407"
+ x="11.849936">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4538-9"
+ font-size="4.0000" />
+ </text>
+ <path
+ inkscape:connector-curvature="0"
+ d=""
+ cx="242.94168"
+ cy="308.38486"
+ r="70.205605"
+ id="path4138-6-6"
+ style="opacity:1;fill:url(#linearGradient9134);fill-opacity:1;stroke:#000000;stroke-width:5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g5318-4"
+ transform="translate(-27.33062,833.76722)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g6386-8"
+ transform="translate(519.89062,305.56924)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g7162-7-4"
+ transform="translate(-174.75156,148.80734)" />
+ <text
+ xml:space="preserve"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:0px;word-spacing:0px;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;color-interpolat [...]
+ x="373.41693"
+ y="1223.0913"
+ id="text8015-0"><tspan
+ id="tspan8017-8"
+ x="373.41693"
+ y="1223.0913" /></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+ x="-1199.6846"
+ y="-103.97346"
+ id="text9295-6-9"><tspan
+ id="tspan9297-2"
+ x="-1199.6846"
+ y="-103.97346" /></text>
+ <text
+ id="text7408-2-4"
+ class="fil7 fnt4"
+ y="177.90834"
+ x="-1082.4718"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ id="text7422-7"
+ class="fil7 fnt4"
+ y="205.37495"
+ x="-1066.0989"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4385-91"
+ y="978.97675"
+ x="130.59962">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4387-27"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4487-0"
+ y="1074.8529"
+ x="154.7296">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4489-9"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4536-3"
+ y="1014.2654"
+ x="89.29689">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4538-6"
+ font-size="4.0000" />
+ </text>
+ <path
+ inkscape:connector-curvature="0"
+ d=""
+ cx="242.94168"
+ cy="308.38486"
+ r="70.205605"
+ id="path4138-6-0"
+ style="opacity:1;fill:url(#linearGradient4171-3);fill-opacity:1;stroke:#000000;stroke-width:5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g5318-6"
+ transform="translate(50.116283,813.59186)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g6386-2"
+ transform="translate(597.33752,285.39388)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g7162-6"
+ transform="translate(-97.30465,128.63199)" />
+ <text
+ xml:space="preserve"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:0px;word-spacing:0px;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;color-interpolat [...]
+ x="450.86383"
+ y="1202.916"
+ id="text8015-1"><tspan
+ id="tspan8017-87"
+ x="450.86383"
+ y="1202.916" /></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+ x="-1122.2377"
+ y="-124.14887"
+ id="text9295-9"><tspan
+ id="tspan9297-20"
+ x="-1122.2377"
+ y="-124.14887" /></text>
+ <text
+ id="text7408-2-2"
+ class="fil7 fnt4"
+ y="157.73296"
+ x="-1005.0248"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ id="text7422-3"
+ class="fil7 fnt4"
+ y="185.19957"
+ x="-988.65192"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4385-9-7"
+ y="978.13031"
+ x="87.828003">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4387-0-5"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4487-9-9"
+ y="1074.0065"
+ x="111.95798">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4489-1-2"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4536-7-28"
+ y="1013.4189"
+ x="46.525269">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4538-7-9"
+ font-size="4.0000" />
+ </text>
+ <path
+ inkscape:connector-curvature="0"
+ d=""
+ cx="242.94168"
+ cy="308.38486"
+ r="70.205605"
+ id="path4138-6-1-7"
+ style="opacity:1;fill:url(#linearGradient8503-5);fill-opacity:1;stroke:#000000;stroke-width:5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g5318-7-3"
+ transform="translate(7.34468,812.74545)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g6386-6-6"
+ transform="translate(554.56593,284.54747)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g7162-7-1"
+ transform="translate(-140.07625,127.78558)" />
+ <text
+ xml:space="preserve"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:0px;word-spacing:0px;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;color-interpolat [...]
+ x="408.09222"
+ y="1202.0696"
+ id="text8015-3-2"><tspan
+ id="tspan8017-6-9"
+ x="408.09222"
+ y="1202.0696" /></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+ x="-1165.0093"
+ y="-124.99525"
+ id="text9295-5-3"><tspan
+ id="tspan9297-6-1"
+ x="-1165.0093"
+ y="-124.99525" /></text>
+ <text
+ id="text7408-2-3-9"
+ class="fil7 fnt4"
+ y="156.88655"
+ x="-1047.7965"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ id="text7422-9-4"
+ class="fil7 fnt4"
+ y="184.35316"
+ x="-1031.4236"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4385-7-7"
+ y="986.62103"
+ x="103.39441">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4387-2-8"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4487-3-4"
+ y="1082.4972"
+ x="127.52438">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4489-7-5"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4536-2-0"
+ y="1021.9097"
+ x="62.091675">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4538-5-3"
+ font-size="4.0000" />
+ </text>
+ <path
+ inkscape:connector-curvature="0"
+ d=""
+ cx="242.94168"
+ cy="308.38486"
+ r="70.205605"
+ id="path4138-6-3-6"
+ style="opacity:1;fill:url(#linearGradient11272-3);fill-opacity:1;stroke:#000000;stroke-width:5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g5318-3-1"
+ transform="translate(22.91108,821.23617)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g6386-64-0"
+ transform="translate(570.13232,293.03819)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g7162-03-6"
+ transform="translate(-124.50985,136.2763)" />
+ <text
+ xml:space="preserve"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:0px;word-spacing:0px;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;color-interpolat [...]
+ x="423.65863"
+ y="1210.5603"
+ id="text8015-5-3"><tspan
+ id="tspan8017-85-2"
+ x="423.65863"
+ y="1210.5603" /></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+ x="-1149.4429"
+ y="-116.50452"
+ id="text9295-0-0"><tspan
+ id="tspan9297-9-6"
+ x="-1149.4429"
+ y="-116.50452" /></text>
+ <text
+ id="text7408-2-9-1"
+ class="fil7 fnt4"
+ y="165.37727"
+ x="-1032.2301"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ id="text7422-8-5"
+ class="fil7 fnt4"
+ y="192.84389"
+ x="-1015.8571"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4385-2-5"
+ y="984.1521"
+ x="63.152679">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4387-6-4"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4487-5-7"
+ y="1080.0282"
+ x="87.282654">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4489-8-6"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4536-7-2-5"
+ y="1019.4407"
+ x="21.849937">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4538-9-6"
+ font-size="4.0000" />
+ </text>
+ <path
+ inkscape:connector-curvature="0"
+ d=""
+ cx="242.94168"
+ cy="308.38486"
+ r="70.205605"
+ id="path4138-6-6-9"
+ style="opacity:1;fill:url(#linearGradient9134-5);fill-opacity:1;stroke:#000000;stroke-width:5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g5318-4-3"
+ transform="translate(-17.33062,818.76722)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g6386-8-7"
+ transform="translate(529.89062,290.56924)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g7162-7-4-4"
+ transform="translate(-164.75156,133.80734)" />
+ <text
+ xml:space="preserve"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:0px;word-spacing:0px;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;color-interpolat [...]
+ x="383.41693"
+ y="1208.0913"
+ id="text8015-0-5"><tspan
+ id="tspan8017-8-2"
+ x="383.41693"
+ y="1208.0913" /></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+ x="-1189.6846"
+ y="-118.97346"
+ id="text9295-6-9-5"><tspan
+ id="tspan9297-2-4"
+ x="-1189.6846"
+ y="-118.97346" /></text>
+ <text
+ id="text7408-2-4-7"
+ class="fil7 fnt4"
+ y="162.90834"
+ x="-1072.4718"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ id="text7422-7-4"
+ class="fil7 fnt4"
+ y="190.37495"
+ x="-1056.0989"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <g
+ id="g8896"
+ transform="matrix(-1,0,0,1,661.96692,13.98052)">
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#ffbb00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 349.16871,633.09479 h 6 v 26 h -6 z"
+ id="path8856"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 349.66855,657.09492 h 3"
+ id="path8858"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8860"
+ d="m 349.66855,650.09492 h 3"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8862"
+ d="m 349.66855,645.09492 h 3"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8864"
+ d="m 349.66855,639.09492 h 3"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 349.66855,642.09492 h 3"
+ id="path8866"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 349.66855,635.09492 h 3"
+ id="path8868"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 349.66855,637.09492 h 3"
+ id="path8886"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ aria-label="log"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:9.80000019px;line-height:125%;font-family:Ubuntu;-inkscape-font-specification:Ubuntu;text-align:start;letter-spacing:0.38999999px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="text8572"
+ transform="translate(4,3)">
+ <path
+ inkscape:connector-curvature="0"
+ d="m 313.1014,659.94999 q -0.5292,-0.01 -0.882,-0.1176 -0.343,-0.1078 -0.5488,-0.3038 -0.2058,-0.2058 -0.294,-0.4998 -0.0784,-0.3038 -0.0784,-0.686 v -5.8996 l 1.1858,-0.196 v 5.8702 q 0,0.2156 0.0294,0.3626 0.0392,0.147 0.1274,0.2548 0.0882,0.098 0.2352,0.1568 0.1568,0.049 0.392,0.0784 z"
+ style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:9.80000019px;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Medium';text-align:start;letter-spacing:0.38999999px;text-anchor:start"
+ id="path8567" />
+ <path
+ inkscape:connector-curvature="0"
+ d="m 319.25258,657.28439 q 0,0.6076 -0.1764,1.1074 -0.1764,0.4998 -0.4998,0.8526 -0.3234,0.3528 -0.784,0.5488 -0.4508,0.196 -0.9996,0.196 -0.5488,0 -0.9996,-0.196 -0.4508,-0.196 -0.7742,-0.5488 -0.3234,-0.3528 -0.5096,-0.8526 -0.1764,-0.4998 -0.1764,-1.1074 0,-0.6076 0.1764,-1.0976 0.1862,-0.4998 0.5096,-0.8526 0.3332,-0.3528 0.784,-0.539 0.4508,-0.196 0.9898,-0.196 0.539,0 0.9898,0.196 0.4606,0.1862 0.784,0.539 0.3234,0.3528 0.4998,0.8526 0.1862,0.49 0.1862,1.0976 z m -1.2152,0 [...]
+ style="letter-spacing:-0.22px"
+ id="path8569" />
+ <path
+ inkscape:connector-curvature="0"
+ d="m 321.18521,657.15699 q 0,0.7546 0.3234,1.1074 0.3332,0.343 0.8526,0.343 0.2842,0 0.5292,-0.0784 0.2548,-0.0784 0.4116,-0.1862 v -2.6558 q -0.1274,-0.0294 -0.3136,-0.049 -0.1862,-0.0294 -0.4704,-0.0294 -0.6468,0 -0.9898,0.4312 -0.343,0.4214 -0.343,1.1172 z m 3.3026,2.1756 q 0,1.225 -0.6272,1.7934 -0.6174,0.5684 -1.9012,0.5684 -0.4704,0 -0.9212,-0.0784 -0.441,-0.0784 -0.8036,-0.2058 l 0.2156,-1.0094 q 0.3038,0.1274 0.686,0.2058 0.392,0.0784 0.8428,0.0784 0.7154,0 1.0192,-0.294 [...]
+ style="letter-spacing:-0.22px"
+ id="path8571" />
+ </g>
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_mark_outliers-24.svg b/pixmaps/src/gwy_mark_outliers-24.svg
new file mode 100644
index 0000000..b7abdcb
--- /dev/null
+++ b/pixmaps/src/gwy_mark_outliers-24.svg
@@ -0,0 +1,160 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="6.3499999mm"
+ height="6.3499999mm"
+ viewBox="0 0 22.499999 22.499999"
+ id="svg8233"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_mark_outliers-24.svg">
+ <defs
+ id="defs8235" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="16.856898"
+ inkscape:cx="14.759667"
+ inkscape:cy="15.975021"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8238">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-393.51587,-663.14807)">
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#4696db;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.93750006;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8276"
+ width="21.5625"
+ height="21.5625"
+ x="393.98462"
+ y="663.61682" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#db2424;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.87499988;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect9051"
+ width="3.7499998"
+ height="3.7499998"
+ x="395.39087"
+ y="665.02307" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.87499988;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect9022"
+ width="1.8749999"
+ height="1.8749999"
+ x="396.32837"
+ y="665.96057" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#db2424;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.87499976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect9051-5"
+ width="3.7499995"
+ height="3.7499995"
+ x="401.95337"
+ y="672.52307" />
+ <rect
+ y="673.46057"
+ x="402.89087"
+ height="1.8749999"
+ width="1.8749999"
+ id="rect9024"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.87499988;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#db2424;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.87499976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect9051-9"
+ width="3.7499995"
+ height="3.7499995"
+ x="396.32837"
+ y="676.27307" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.87499988;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect9026"
+ width="1.8749999"
+ height="1.8749999"
+ x="397.26587"
+ y="677.21057" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#db2424;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.87499976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect9051-2"
+ width="3.7499995"
+ height="3.7499995"
+ x="410.39087"
+ y="680.96057" />
+ <rect
+ y="681.89807"
+ x="411.32837"
+ height="1.8749999"
+ width="1.8749999"
+ id="rect9028"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.87499988;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#db2424;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.87499976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect9051-6"
+ width="3.7499995"
+ height="3.7499995"
+ x="406.64087"
+ y="675.33557" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.87499976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect9022-7"
+ width="1.8749998"
+ height="1.8749998"
+ x="407.57837"
+ y="676.27307" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#db2424;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.87499976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect9051-3"
+ width="3.7499995"
+ height="3.7499995"
+ x="405.70337"
+ y="664.08557" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.87499976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect9022-5"
+ width="1.8749998"
+ height="1.8749998"
+ x="406.64087"
+ y="665.02307" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_mark_scars-24.svg b/pixmaps/src/gwy_mark_scars-24.svg
new file mode 100644
index 0000000..e0b1668
--- /dev/null
+++ b/pixmaps/src/gwy_mark_scars-24.svg
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8323"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_mark_scars-24.svg">
+ <defs
+ id="defs8325" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="28.630464"
+ inkscape:cx="2.4828339"
+ inkscape:cy="16.1998"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8328">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-182.52887,-504.32709)">
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#d0e2f2;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8276"
+ width="23.000002"
+ height="23.000002"
+ x="183.02887"
+ y="504.82709" />
+ <rect
+ y="505.32709"
+ x="196.52887"
+ height="4.0000062"
+ width="9"
+ id="rect4803"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#db2424;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.99999988;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.00000024;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 197.52888,507.32708 8,0"
+ id="path8537"
+ inkscape:connector-curvature="0" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#db2424;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.99999976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect4801"
+ width="9"
+ height="3.0000026"
+ x="186.52887"
+ y="507.32709" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8539"
+ d="m 187.52888,508.82708 7,0"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="cc" />
+ <rect
+ y="523.32709"
+ x="183.52887"
+ height="3.0000026"
+ width="13"
+ id="rect4799"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#db2424;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.0209229;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 184.52888,524.82708 11,0"
+ id="path8545"
+ inkscape:connector-curvature="0" />
+ <rect
+ y="511.32709"
+ x="184.52887"
+ height="4"
+ width="17"
+ id="rect4795"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#db2424;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8351"
+ d="m 185.52888,513.32708 15,0"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.00000048;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#db2424;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect4797"
+ width="10"
+ height="4"
+ x="195.52887"
+ y="520.32709" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8353"
+ d="m 196.52888,522.32708 9,0"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.00000024;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#db2424;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect4793"
+ width="11"
+ height="4"
+ x="183.52887"
+ y="516.32709" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8355"
+ d="m 183.52888,518.32708 10,0"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.00000024;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_mark_with-24.svg b/pixmaps/src/gwy_mark_with-24.svg
new file mode 100644
index 0000000..2b8ccc5
--- /dev/null
+++ b/pixmaps/src/gwy_mark_with-24.svg
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8424"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_mark_with-24.svg">
+ <defs
+ id="defs8426">
+ <linearGradient
+ id="linearGradient8428"
+ osb:paint="solid">
+ <stop
+ style="stop-color:#4696db;stop-opacity:1;"
+ offset="0"
+ id="stop8430" />
+ </linearGradient>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="3.2929687"
+ inkscape:cx="-34.543979"
+ inkscape:cy="15.192038"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8429">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-128.33165,-604.34668)">
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#87c74a;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.00000012;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8072"
+ width="13"
+ height="13"
+ x="128.83165"
+ y="604.84668" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#c1665a;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:3,3;stroke-dashoffset:2.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 130.83165,606.84668 h 9 v 5 h -9 z"
+ id="rect11972"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <rect
+ y="609.84668"
+ x="133.83165"
+ height="13"
+ width="13"
+ id="rect8163"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#b7d69a;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.00000012;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path8534"
+ d="m 140.83165,620.84668 v -9 h -5 v 9 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#c1665a;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:3.00000002, 3.00000002;stroke-dashoffset:6.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#e8f0e0;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8153"
+ width="13"
+ height="13"
+ x="138.83165"
+ y="614.84668" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#c1665a;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:3.00000002, 3.00000002;stroke-dashoffset:6.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="M 12.5 12.5 L 12.5 21.5 L 17.5 21.5 L 17.5 17.5 L 22 17.5 L 22 12.5 L 17.5 12.5 L 13 12.5 L 12.5 12.5 z "
+ transform="translate(128.33165,604.34668)"
+ id="path8753" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_mask-16.svg b/pixmaps/src/gwy_mask-16.svg
new file mode 100644
index 0000000..a36f0f9
--- /dev/null
+++ b/pixmaps/src/gwy_mask-16.svg
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg8424"
+ version="1.1"
+ inkscape:version="0.92.1 unknown"
+ sodipodi:docname="gwy_mask-16.svg"
+ inkscape:export-filename="gwy_mask-16.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96">
+ <defs
+ id="defs8426" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="20.785954"
+ inkscape:cx="-6.8208157"
+ inkscape:cy="12.075331"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8429">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-128.33165,-602.34665)">
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#c1665a;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:3.00000012, 3.00000012;stroke-dashoffset:1.50000012;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 128.83165,602.84665 h 15 v 15 h -15 z"
+ id="rect11972"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_mask-24.svg b/pixmaps/src/gwy_mask-24.svg
new file mode 100644
index 0000000..84c98d6
--- /dev/null
+++ b/pixmaps/src/gwy_mask-24.svg
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8424"
+ version="1.1"
+ inkscape:version="0.92.1 unknown"
+ sodipodi:docname="gwy_mask-24.svg">
+ <defs
+ id="defs8426" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="17.694556"
+ inkscape:cx="-3.2359583"
+ inkscape:cy="11.632522"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8429">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-128.33165,-604.34668)">
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#c1665a;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:3,3;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 128.83165,604.84668 h 23 v 23 h -23 z"
+ id="rect11972"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_mask_add-24.svg b/pixmaps/src/gwy_mask_add-24.svg
new file mode 100644
index 0000000..a9e18b3
--- /dev/null
+++ b/pixmaps/src/gwy_mask_add-24.svg
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8424"
+ version="1.1"
+ inkscape:version="0.92+devel unknown"
+ sodipodi:docname="gwy_mask_add-24.svg">
+ <defs
+ id="defs8426" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="20.342831"
+ inkscape:cx="23.015893"
+ inkscape:cy="15.048603"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1028"
+ inkscape:window-x="0"
+ inkscape:window-y="33"
+ inkscape:window-maximized="1"
+ showguides="false"
+ inkscape:document-rotation="0">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8429">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-128.33165,-604.34668)">
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#c1665a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:3, 3;stroke-dashoffset:6.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 128.83165,604.84668 h 17 v 15 h -17 z"
+ id="rect11972"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path4754"
+ d="m 134.83165,612.84668 h 17 v 15 h -17 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#c1665a;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:3, 3;stroke-dashoffset:6.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path4268"
+ d="m 128.83165,604.84668 h 17 v 15 h -17 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:3, 3;stroke-dashoffset:6.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_mask_circle-24.svg b/pixmaps/src/gwy_mask_circle-24.svg
new file mode 100644
index 0000000..a57f72e
--- /dev/null
+++ b/pixmaps/src/gwy_mask_circle-24.svg
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8424"
+ version="1.1"
+ inkscape:version="0.92.1 unknown"
+ sodipodi:docname="gwy_mask_circle-24.svg">
+ <defs
+ id="defs8426" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="12.549331"
+ inkscape:cx="-7.7970688"
+ inkscape:cy="5.3587823"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8429">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-128.33165,-604.34668)">
+ <circle
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#c1665a;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:3.00000036,3.00000036;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="path4750"
+ cx="140.33165"
+ cy="616.34668"
+ r="11.499999" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_mask_circle_exclusive-24.svg b/pixmaps/src/gwy_mask_circle_exclusive-24.svg
new file mode 100644
index 0000000..b503c57
--- /dev/null
+++ b/pixmaps/src/gwy_mask_circle_exclusive-24.svg
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8424"
+ version="1.1"
+ inkscape:version="0.92.1 unknown"
+ sodipodi:docname="gwy_mask_circle_exclusive-24.svg">
+ <defs
+ id="defs8426" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="3.7297042"
+ inkscape:cx="-62.716162"
+ inkscape:cy="-0.032325687"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8429">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-128.33165,-604.34668)">
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#c1665a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:3.00000047, 3.00000047;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8416"
+ width="24"
+ height="24"
+ x="128.33165"
+ y="604.34668" />
+ <circle
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:3.00000037, 3.00000037;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="path4750"
+ cx="140.33165"
+ cy="616.34668"
+ r="9.5" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_mask_circle_inclusive-24.svg b/pixmaps/src/gwy_mask_circle_inclusive-24.svg
new file mode 100644
index 0000000..4ad5e74
--- /dev/null
+++ b/pixmaps/src/gwy_mask_circle_inclusive-24.svg
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8424"
+ version="1.1"
+ inkscape:version="0.92.1 unknown"
+ sodipodi:docname="gwy_mask_circle_inclusive-24.svg">
+ <defs
+ id="defs8426" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="17.317337"
+ inkscape:cx="9.2101068"
+ inkscape:cy="17.256855"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8429">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-128.33165,-604.34668)">
+ <circle
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#c1665a;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:3.00000037, 3.00000036999999997;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="path4750"
+ cx="140.33165"
+ cy="616.34668"
+ r="9.5" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_mask_distribute-24.svg b/pixmaps/src/gwy_mask_distribute-24.svg
new file mode 100644
index 0000000..463db64
--- /dev/null
+++ b/pixmaps/src/gwy_mask_distribute-24.svg
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8424"
+ version="1.1"
+ inkscape:version="0.92.1 unknown"
+ sodipodi:docname="gwy_mask_distribute-24.svg">
+ <defs
+ id="defs8426">
+ <linearGradient
+ id="linearGradient8428"
+ osb:paint="solid">
+ <stop
+ style="stop-color:#4696db;stop-opacity:1;"
+ offset="0"
+ id="stop8430" />
+ </linearGradient>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="7.4150249"
+ inkscape:cx="6.0617045"
+ inkscape:cy="23.45166"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8429">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-128.33165,-604.34668)">
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#87c74a;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.00000012;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8072"
+ width="14"
+ height="14"
+ x="128.83165"
+ y="604.84668" />
+ <rect
+ y="613.84668"
+ x="137.83165"
+ height="14"
+ width="14"
+ id="rect8163"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#b7d69a;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.00000012;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#c1665a;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:3.00000002, 3.00000002;stroke-dashoffset:6.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 130.83165,606.84668 h 7 v 5 h -7 z"
+ id="rect11972"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path8534"
+ d="m 139.83165,615.84668 h 7 v 5 h -7 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#c1665a;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:3.00000002, 3.00000002;stroke-dashoffset:6.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_mask_editor-24.svg b/pixmaps/src/gwy_mask_editor-24.svg
new file mode 100644
index 0000000..5faa6b4
--- /dev/null
+++ b/pixmaps/src/gwy_mask_editor-24.svg
@@ -0,0 +1,122 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8424"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_mask_editor-24.svg"
+ inkscape:export-filename="gwy_mask_editor-24.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96">
+ <defs
+ id="defs8426">
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath8424">
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path8426"
+ d="m 128.33165,612.3467 h 16 v 16 h -16 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#c1665a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:3.00000028, 3.00000028;stroke-dashoffset:1.50000012;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ </clipPath>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="13.015596"
+ inkscape:cx="6.525502"
+ inkscape:cy="8.107597"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:snap-global="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8429">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-128.33165,-604.34668)">
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#c1665a;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:3.00000018, 3.00000018;stroke-dashoffset:1.50000012;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 128.83165,612.84668 h 15 v 15 h -15 z"
+ id="rect11972"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:3;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 146.3159,604.9015 -7.5,12.99024 -0.26758,4.46484 -0.0684,1.11719 -0.0664,1.11523 0.93359,-0.61523 0.93359,-0.61719 3.73047,-2.46484 7.5,-12.99024 -2.59765,-1.5 z"
+ id="path8420"
+ inkscape:connector-curvature="0"
+ clip-path="url(#clipPath8424)" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#ffae1c;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 146.3159,604.9015 2.59808,1.5 2.59807,1.50001 -7.5,12.99038 -2.59808,-1.5 -2.59807,-1.5 z"
+ id="rect8442"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ style="fill:#ffccaa;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
+ d="m 138.8159,617.89189 -0.26795,4.46409 1.73205,1.00001 3.73205,-2.4641 z"
+ id="path8444"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 140.28,623.35599 -1.73205,-1.00001 -0.067,1.11604 -0.067,1.11601 0.93301,-0.61601 z"
+ id="path8446"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccc" />
+ <path
+ style="fill:#ffc357;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
+ d="m 148.91398,606.4015 -7.50001,12.99039 -2.59807,-1.5 7.5,-12.99039 z"
+ id="path8421"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_mask_exclude-24.svg b/pixmaps/src/gwy_mask_exclude-24.svg
new file mode 100644
index 0000000..b0932d1
--- /dev/null
+++ b/pixmaps/src/gwy_mask_exclude-24.svg
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8424"
+ version="1.1"
+ inkscape:version="0.92.1 unknown"
+ sodipodi:docname="gwy_mask_exclude-24.svg">
+ <defs
+ id="defs8426" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="3.1750028"
+ inkscape:cx="-24.272715"
+ inkscape:cy="28.713321"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8429">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-128.33165,-604.34668)">
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#c1665a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:3.00000036, 3.00000036;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect4750"
+ width="24"
+ height="24"
+ x="128.33165"
+ y="604.34668" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:3.00000018, 3.00000018;stroke-dashoffset:1.50000012;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 132.33165,609.34668 h 16 v 14 h -16 z"
+ id="rect11972"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_mask_exclude_circle-24.svg b/pixmaps/src/gwy_mask_exclude_circle-24.svg
new file mode 100644
index 0000000..b503c57
--- /dev/null
+++ b/pixmaps/src/gwy_mask_exclude_circle-24.svg
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8424"
+ version="1.1"
+ inkscape:version="0.92.1 unknown"
+ sodipodi:docname="gwy_mask_circle_exclusive-24.svg">
+ <defs
+ id="defs8426" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="3.7297042"
+ inkscape:cx="-62.716162"
+ inkscape:cy="-0.032325687"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8429">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-128.33165,-604.34668)">
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#c1665a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:3.00000047, 3.00000047;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8416"
+ width="24"
+ height="24"
+ x="128.33165"
+ y="604.34668" />
+ <circle
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:3.00000037, 3.00000037;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="path4750"
+ cx="140.33165"
+ cy="616.34668"
+ r="9.5" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_mask_extract-24.svg b/pixmaps/src/gwy_mask_extract-24.svg
new file mode 100644
index 0000000..14b57be
--- /dev/null
+++ b/pixmaps/src/gwy_mask_extract-24.svg
@@ -0,0 +1,106 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8424"
+ version="1.1"
+ inkscape:version="0.92.1 unknown"
+ sodipodi:docname="gwy_mask_extract-24.svg">
+ <defs
+ id="defs8426">
+ <linearGradient
+ osb:paint="solid"
+ id="linearGradient8428">
+ <stop
+ id="stop8430"
+ offset="0"
+ style="stop-color:#4696db;stop-opacity:1;" />
+ </linearGradient>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="3.7297041"
+ inkscape:cx="96.283333"
+ inkscape:cy="46.298391"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8429">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-128.33165,-604.34668)">
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#87c74a;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.00000012;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8072"
+ width="14"
+ height="14"
+ x="128.83165"
+ y="604.84668" />
+ <rect
+ y="613.84668"
+ x="137.83165"
+ height="14"
+ width="14"
+ id="rect8163"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#808080;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.00000012;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#c1665a;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:3.00000002, 3.00000002;stroke-dashoffset:6.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 130.83165,606.84668 h 7 v 5 h -7 z"
+ id="rect11972-6"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path8534"
+ d="m 139.83165,615.84668 h 7 v 5 h -7 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:6.50000048;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_mask_fill_draw-24.svg b/pixmaps/src/gwy_mask_fill_draw-24.svg
new file mode 100644
index 0000000..a2be0d5
--- /dev/null
+++ b/pixmaps/src/gwy_mask_fill_draw-24.svg
@@ -0,0 +1,115 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8424"
+ version="1.1"
+ inkscape:version="0.92.1 unknown"
+ sodipodi:docname="gwy_mask_fill_draw-24.svg">
+ <defs
+ id="defs8426">
+ <filter
+ inkscape:collect="always"
+ style="color-interpolation-filters:sRGB"
+ id="filter8495"
+ x="-0.084521739"
+ width="1.1690435"
+ y="-0.14953846"
+ height="1.2990769">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.405"
+ id="feGaussianBlur8497" />
+ </filter>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="10.455185"
+ inkscape:cx="12.366477"
+ inkscape:cy="8.6776188"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:snap-global="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8429">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-128.33165,-604.34668)">
+ <g
+ id="g8506"
+ transform="matrix(0.76281022,0,0,0.76236608,18.131701,144.11448)"
+ style="stroke-width:1.31132388">
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path8422"
+ d="m 156.83165,609.84668 10.5,-5.5 c 3.34282,0.17099 6.69271,5.92396 6,11 l -11.5,6.5 z"
+ style="fill:#7db846;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.31132388px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="ccc"
+ inkscape:connector-curvature="0"
+ id="path8424"
+ d="m 161.33165,622.03345 c -4.43705,-0.17292 -8.37853,-10.24582 -4.99999,-12 4.43705,0.17292 8.37851,10.24583 4.99999,12 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#c1665a;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.31132388;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path8453"
+ d="m 159.33165,609.84668 2.5,1.5 8,-4.5 -2,-1.5 z"
+ style="fill:#ffffff;fill-rule:evenodd;stroke:none;stroke-width:1.31132388px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter8495)" />
+ </g>
+ <path
+ style="opacity:1;vector-effect:none;fill:#c1665a;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:3,3;stroke-dashoffset:3.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none"
+ d="m 130.1575,627.84668 c -0.18396,-5.29312 -0.21356,-8.3522 7.33443,-6.84762 l 1.47823,-4.36939 h 2.12599 c 0,0 -0.92612,3.79551 -0.54354,4.08245 4.56923,0.71251 16.91486,3.73493 6.62994,7.13456 z"
+ id="path8501"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccc" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_mask_fill_erase-24.svg b/pixmaps/src/gwy_mask_fill_erase-24.svg
new file mode 100644
index 0000000..8238070
--- /dev/null
+++ b/pixmaps/src/gwy_mask_fill_erase-24.svg
@@ -0,0 +1,122 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8424"
+ version="1.1"
+ inkscape:version="0.92.1 unknown"
+ sodipodi:docname="gwy_mask_fill_erase-24.svg">
+ <defs
+ id="defs8426">
+ <filter
+ inkscape:collect="always"
+ style="color-interpolation-filters:sRGB"
+ id="filter8495"
+ x="-0.084521739"
+ width="1.1690435"
+ y="-0.14953846"
+ height="1.2990769">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.405"
+ id="feGaussianBlur8497" />
+ </filter>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="4.3813168"
+ inkscape:cx="88.827103"
+ inkscape:cy="7.7724334"
+ inkscape:document-units="px"
+ inkscape:current-layer="g8506"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:snap-global="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8429">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-128.33165,-604.34668)">
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#c1665a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:3, 3;stroke-dashoffset:3.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8422"
+ width="24"
+ height="24"
+ x="128.33165"
+ y="604.34668" />
+ <g
+ id="g8506"
+ transform="matrix(0.76281022,0,0,0.76236608,18.131701,144.11448)"
+ style="stroke-width:1.31132388">
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path8422"
+ d="m 156.83165,609.84668 10.5,-5.5 c 3.34282,0.17099 6.69271,5.92396 6,11 l -11.5,6.5 z"
+ style="fill:#7db846;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.31132388px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="ccc"
+ inkscape:connector-curvature="0"
+ id="path8424"
+ d="m 161.33165,622.03345 c -4.43705,-0.17292 -8.37853,-10.24582 -4.99999,-12 4.43705,0.17292 8.37851,10.24583 4.99999,12 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#f9f9f9;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.31132388;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path8453"
+ d="m 159.33165,609.84668 2.5,1.5 8,-4.5 -2,-1.5 z"
+ style="fill:#ffffff;fill-rule:evenodd;stroke:none;stroke-width:1.31132388px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter8495)" />
+ </g>
+ <path
+ style="opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:3, 3;stroke-dashoffset:3.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none"
+ d="m 130.1575,627.84668 c -0.18396,-5.29312 -0.21356,-8.3522 7.33443,-6.84762 l 1.47823,-4.36939 h 2.12599 c 0,0 -0.92612,3.79551 -0.54354,4.08245 4.56923,0.71251 16.91486,3.73493 6.62994,7.13456 z"
+ id="path8501"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccc" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_mask_grow-24.svg b/pixmaps/src/gwy_mask_grow-24.svg
new file mode 100644
index 0000000..ba4f501
--- /dev/null
+++ b/pixmaps/src/gwy_mask_grow-24.svg
@@ -0,0 +1,175 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 22.5 22.5"
+ id="svg8093"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_mask_grow-24.svg"
+ inkscape:export-filename="gwy_scale-24.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs8095">
+ <linearGradient
+ id="linearGradient8428"
+ osb:paint="solid">
+ <stop
+ style="stop-color:#4696db;stop-opacity:1;"
+ offset="0"
+ id="stop8430" />
+ </linearGradient>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1"
+ inkscape:cx="15.684516"
+ inkscape:cy="10.484107"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ units="px"
+ showguides="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="0.9375"
+ spacingy="0.9375"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8098">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-244.77814,-596.57599)">
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#e5beb9;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.9375;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:0.93750005, 1.87500010000000006;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect10104"
+ width="21.5625"
+ height="21.5625"
+ x="245.24689"
+ y="597.04474" />
+ <path
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:norma [...]
+ d="M 2 2 L 2 8 L 4.2929688 5.7070312 L 8.2929688 9.7070312 L 9.7070312 8.2910156 L 5.7070312 4.2929688 L 5.7070312 4.2910156 L 8 2 L 2 2 z "
+ transform="matrix(0.9375,0,0,0.9375,244.77814,596.57599)"
+ id="path8441" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.875;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 249.46564,601.26349 3.75,3.75"
+ id="path8461"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <g
+ transform="matrix(0.9375,0,0,0.9375,78.998442,33.313463)"
+ id="layer1-5"
+ inkscape:label="Layer 1" />
+ <path
+ sodipodi:nodetypes="cccc"
+ style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 252.27814,598.45099 -5.625,5.625 v -5.625 z"
+ id="path8499"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path8451"
+ d="m 246.65314,617.20099 v -5.625 l 2.14966,2.14966 3.75,-3.75 1.32568,1.32751 -3.75,3.74817 v 0.002 l 2.14966,2.14783 z"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:norma [...]
+ inkscape:connector-curvature="0" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path8429"
+ d="m 249.46564,614.38849 3.75,-3.75"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.875;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8431"
+ d="m 252.27814,617.20099 -5.625,-5.625 v 5.625 z"
+ style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ sodipodi:nodetypes="cccc" />
+ <path
+ inkscape:connector-curvature="0"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:norma [...]
+ d="m 265.40297,617.20099 h -5.625 l 2.14966,-2.14966 -3.75,-3.75 1.32751,-1.32568 3.74817,3.75 h 0.002 l 2.14783,-2.14966 z"
+ id="path8453" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.875;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 262.59064,614.38849 -3.75,-3.75"
+ id="path8433"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ sodipodi:nodetypes="cccc"
+ style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 259.77814,617.20099 5.625,-5.625 v 5.625 z"
+ id="path8435"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path8449"
+ d="m 265.40297,598.45099 h -5.625 l 2.14966,2.14966 -3.75,3.75 1.32751,1.32568 3.74817,-3.75 h 0.002 l 2.14783,2.14966 z"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:norma [...]
+ inkscape:connector-curvature="0" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path8437"
+ d="m 262.59064,601.26349 -3.75,3.75"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.875;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8439"
+ d="m 259.77814,598.45099 5.625,5.625 v -5.625 z"
+ style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ sodipodi:nodetypes="cccc" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path8459"
+ d="m 251.80939,603.60724 h 8.4375 v 8.4375 h -8.4375 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#f8f8f8;stroke-width:1.875;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#c1665a;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.9375;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:2.8125,2.8125;stroke-dashoffset:0.46875;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 251.80939,603.60724 h 8.4375 v 8.4375 h -8.4375 z"
+ id="rect10108"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_mask_intersect-24.svg b/pixmaps/src/gwy_mask_intersect-24.svg
new file mode 100644
index 0000000..fb6d0cd
--- /dev/null
+++ b/pixmaps/src/gwy_mask_intersect-24.svg
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8424"
+ version="1.1"
+ inkscape:version="0.92.1 unknown"
+ sodipodi:docname="gwy_mask_intersect-24.svg"
+ inkscape:export-filename="gwy_mask_intersect-24.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96">
+ <defs
+ id="defs8426" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="8.524802"
+ inkscape:cx="15.649988"
+ inkscape:cy="17.766127"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8429">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-128.33165,-604.34668)">
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path8420"
+ d="m 128.83165,604.84668 h 17 v 15 h -17 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:3, 3;stroke-dashoffset:6.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:3, 3;stroke-dashoffset:6.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 134.83165,612.84668 h 17 v 15 h -17 z"
+ id="path8418"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#c1665a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:3.00000018, 3.00000018;stroke-dashoffset:1.50000012;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 134.83165,612.84668 h 11 v 7 h -11 z"
+ id="rect8417"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:3, 3;stroke-dashoffset:6.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 128.83165,604.84668 h 17 v 15 h -17 z"
+ id="rect11972"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path4754"
+ d="m 134.83165,612.84668 h 17 v 15 h -17 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:3, 3;stroke-dashoffset:6.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_mask_invert-24.svg b/pixmaps/src/gwy_mask_invert-24.svg
new file mode 100644
index 0000000..ee70bbd
--- /dev/null
+++ b/pixmaps/src/gwy_mask_invert-24.svg
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8424"
+ version="1.1"
+ inkscape:version="0.92.1 unknown"
+ sodipodi:docname="gwy_mask_invert-24.svg"
+ inkscape:export-filename="gwy_mask_invert-24.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96">
+ <defs
+ id="defs8426" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="5.146772"
+ inkscape:cx="31.943802"
+ inkscape:cy="9.7170395"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8429">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-128.33165,-604.34668)">
+ <rect
+ y="604.34668"
+ x="128.33165"
+ height="24"
+ width="24"
+ id="rect10108"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#c1665a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.00000012;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.53333336;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 140.33165,628.34668 h -12 v -24 h 12"
+ id="rect8431"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:2, 2;stroke-dashoffset:5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none"
+ d="m 139.83165,604.34668 v 24"
+ id="path8455"
+ inkscape:connector-curvature="0" />
+ <circle
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:3.00000038, 3.00000037999999991;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate;font-variant-east_asian:normal"
+ id="path8747"
+ cx="140.33165"
+ cy="616.34668"
+ r="6.5" />
+ <path
+ id="circle8749"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#c1665a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.53333336;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ sodipodi:type="arc"
+ sodipodi:cx="-616.34668"
+ sodipodi:cy="140.33165"
+ sodipodi:rx="6.5"
+ sodipodi:ry="6.5"
+ sodipodi:start="3.1415927"
+ sodipodi:end="0"
+ d="m -622.84668,140.33165 a 6.5,6.5 0 0 1 6.5,-6.5 6.5,6.5 0 0 1 6.5,6.5 h -6.5 z"
+ transform="rotate(-90)" />
+ <circle
+ r="6.5"
+ cy="616.34668"
+ cx="140.33165"
+ id="circle8751"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.53333336;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <circle
+ r="6.5"
+ cy="616.34668"
+ cx="140.33165"
+ id="circle8453"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:3.00000038, 3.00000037999999991;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate;font-variant-east_asian:normal" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_mask_line-24.svg b/pixmaps/src/gwy_mask_line-24.svg
new file mode 100644
index 0000000..2215cbc
--- /dev/null
+++ b/pixmaps/src/gwy_mask_line-24.svg
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8424"
+ version="1.1"
+ inkscape:version="0.92.1 unknown"
+ sodipodi:docname="gwy_mask_line-24.svg"
+ inkscape:export-filename="gwy_mask_line-24.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96">
+ <defs
+ id="defs8426" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="5.146772"
+ inkscape:cx="-17.262622"
+ inkscape:cy="-1.4926886"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8429">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-128.33165,-604.34668)">
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#c1665a;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:3, 3;stroke-dashoffset:0.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 147.15272,607.6114 1.91421,1.91421 -15.55635,15.55635 -1.91421,-1.91421 z"
+ id="rect8417"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_mask_morph-24.svg b/pixmaps/src/gwy_mask_morph-24.svg
new file mode 100644
index 0000000..17cf10f
--- /dev/null
+++ b/pixmaps/src/gwy_mask_morph-24.svg
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8424"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_mask_morph-24.svg"
+ inkscape:export-filename="gwy_mask_morph-24.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96">
+ <defs
+ id="defs8426" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="2.15679"
+ inkscape:cx="-132.62851"
+ inkscape:cy="42.368097"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8429">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-128.33165,-604.34668)">
+ <g
+ id="layer1-5"
+ inkscape:label="Layer 1">
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="rect11972"
+ d="m 128.83165,604.84668 h 23 v 23 h -23 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#c1665a;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:3, 3;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ </g>
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#daa39c;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:2.99999982, 2.99999982000000021;stroke-dashoffset:0.49999997;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 142.83165,613.84668 h 5 v 7 h -5 z"
+ id="rect8441"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#daa39c;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:2.99999982, 2.99999982;stroke-dashoffset:0.49999997;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 131.83165,607.84668 h 7 v 5 h -7 z"
+ id="rect8463"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path8467"
+ d="m 132.83165,620.84668 h 5 v 4 h -5 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#daa39c;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:2.99999982, 2.99999982;stroke-dashoffset:0.49999997;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_mask_paint_draw-24.svg b/pixmaps/src/gwy_mask_paint_draw-24.svg
new file mode 100644
index 0000000..79cb3bd
--- /dev/null
+++ b/pixmaps/src/gwy_mask_paint_draw-24.svg
@@ -0,0 +1,114 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8424"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_mask_paint_draw-24.svg"
+ inkscape:export-filename="gwy_mask_paint_draw-24.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96">
+ <defs
+ id="defs8426" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="2.976243"
+ inkscape:cx="32.940015"
+ inkscape:cy="9.5644343"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8429">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-128.33165,-604.34668)">
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path8424"
+ d="m 130.33165,606.34668 c 26,2 -14,12 8,19"
+ style="fill:none;fill-rule:evenodd;stroke:#c1665a;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:norma [...]
+ d="m 130.44727,605.35156 -0.23047,2.99024 c 3.18768,0.2452 5.32541,0.62465 6.54687,1.03125 0.61073,0.2033 0.98178,0.41475 1.13672,0.53906 0.15494,0.12431 0.0931,0.0997 0.082,0.041 -0.0221,-0.11729 -0.0562,0.28371 -0.63672,0.96485 -0.58053,0.68113 -1.51711,1.53119 -2.52148,2.44141 -2.00874,1.82042 -4.48568,3.76724 -4.85547,6.65624 -0.1849,1.44451 0.44823,3.0273 1.77148,4.20704 1.32325,1.17973 3.27498,2.14218 6.13672,3.05273 l 0.91016,-2.85742 c -2.63826,-0.83945 -4.24903,-1.72075 - [...]
+ id="path8442"
+ inkscape:connector-curvature="0" />
+ <g
+ id="g8443">
+ <g
+ id="g8436">
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#ffae1c;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 146.3159,604.9015 2.59808,1.5 2.59807,1.50001 -7.5,12.99038 -2.59808,-1.5 -2.59807,-1.5 z"
+ id="rect8442"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ style="fill:#ffccaa;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
+ d="m 138.8159,617.89189 -0.26795,4.46409 1.73205,1.00001 3.73205,-2.4641 z"
+ id="path8444"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 140.28,623.35599 -1.73205,-1.00001 -0.067,1.11604 -0.067,1.11601 0.93301,-0.61601 z"
+ id="path8446"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccc" />
+ <path
+ style="fill:#ffc357;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
+ d="m 148.91398,606.4015 -7.50001,12.99039 -2.59807,-1.5 7.5,-12.99039 z"
+ id="path8421"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_mask_paint_erase-24.svg b/pixmaps/src/gwy_mask_paint_erase-24.svg
new file mode 100644
index 0000000..be52941
--- /dev/null
+++ b/pixmaps/src/gwy_mask_paint_erase-24.svg
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8424"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_mask_paint_erase-24.svg"
+ inkscape:export-filename="gwy_mask_paint_draw-24.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96">
+ <defs
+ id="defs8426" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="2.0658116"
+ inkscape:cx="-154.8744"
+ inkscape:cy="101.68377"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8429">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-128.33165,-604.34668)">
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#c1665a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:3.00000018, 3.00000017999999979;stroke-dashoffset:1.50000012;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8416"
+ width="24"
+ height="24"
+ x="128.33165"
+ y="604.34668" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:3;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 146.3159,604.9015 -7.5,12.99024 -0.26758,4.46484 -0.0684,1.11719 -0.0664,1.11523 0.93359,-0.61523 0.93359,-0.61719 3.73047,-2.46484 7.5,-12.99024 -2.59765,-1.5 z"
+ id="path8420"
+ inkscape:connector-curvature="0"
+ clip-path="none" />
+ <path
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:norma [...]
+ d="m 130.44727,605.35156 -0.23047,2.99024 c 3.18768,0.2452 5.32541,0.62465 6.54687,1.03125 0.61073,0.2033 0.98178,0.41475 1.13672,0.53906 0.15494,0.12431 0.0931,0.0997 0.082,0.041 -0.0221,-0.11729 -0.0562,0.28371 -0.63672,0.96485 -0.58053,0.68113 -1.51711,1.53119 -2.52148,2.44141 -2.00874,1.82042 -4.48568,3.76724 -4.85547,6.65624 -0.1849,1.44451 0.44823,3.0273 1.77148,4.20704 1.32325,1.17973 3.27498,2.14218 6.13672,3.05273 l 0.91016,-2.85742 c -2.63826,-0.83945 -4.24903,-1.72075 - [...]
+ id="path8442"
+ inkscape:connector-curvature="0" />
+ <g
+ id="g8443">
+ <g
+ id="g8436">
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#ffae1c;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 146.3159,604.9015 2.59808,1.5 2.59807,1.50001 -7.5,12.99038 -2.59808,-1.5 -2.59807,-1.5 z"
+ id="rect8442"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ style="fill:#ffccaa;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
+ d="m 138.8159,617.89189 -0.26795,4.46409 1.73205,1.00001 3.73205,-2.4641 z"
+ id="path8444"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 140.28,623.35599 -1.73205,-1.00001 -0.067,1.11604 -0.067,1.11601 0.93301,-0.61601 z"
+ id="path8446"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccc" />
+ <path
+ style="fill:#ffc357;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
+ d="m 148.91398,606.4015 -7.50001,12.99039 -2.59807,-1.5 7.5,-12.99039 z"
+ id="path8421"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_mask_rect_exclusive-24.svg b/pixmaps/src/gwy_mask_rect_exclusive-24.svg
new file mode 100644
index 0000000..bbe2cd1
--- /dev/null
+++ b/pixmaps/src/gwy_mask_rect_exclusive-24.svg
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8424"
+ version="1.1"
+ inkscape:version="0.92.1 unknown"
+ sodipodi:docname="gwy_mask_rect_exclusive-24.svg">
+ <defs
+ id="defs8426" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="7.4150248"
+ inkscape:cx="9.3089339"
+ inkscape:cy="19.019888"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8429">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-128.33165,-604.34668)">
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#c1665a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:3.00000036, 3.00000036;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect4750"
+ width="24"
+ height="24"
+ x="128.33165"
+ y="604.34668" />
+ <g
+ id="layer1-5"
+ inkscape:label="Layer 1"
+ style="fill:#ffffff">
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="rect11972-6"
+ d="m 131.83165,609.84668 h 17 v 13 h -17 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:3, 3;stroke-dashoffset:0.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ </g>
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_mask_rect_inclusive-24.svg b/pixmaps/src/gwy_mask_rect_inclusive-24.svg
new file mode 100644
index 0000000..c3fd5fd
--- /dev/null
+++ b/pixmaps/src/gwy_mask_rect_inclusive-24.svg
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8424"
+ version="1.1"
+ inkscape:version="0.92.1 unknown"
+ sodipodi:docname="gwy_mask_rect_inclusive-24.svg">
+ <defs
+ id="defs8426" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="24.417445"
+ inkscape:cx="7.5968388"
+ inkscape:cy="16.582871"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8429">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-128.33165,-604.34668)">
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#c1665a;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:3,3;stroke-dashoffset:0.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 131.83165,609.84668 h 17 v 13 h -17 z"
+ id="rect11972"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_mask_remove-24.svg b/pixmaps/src/gwy_mask_remove-24.svg
new file mode 100644
index 0000000..5aab62c
--- /dev/null
+++ b/pixmaps/src/gwy_mask_remove-24.svg
@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8424"
+ version="1.1"
+ inkscape:version="0.92.1 unknown"
+ sodipodi:docname="gwy_mask_remove-24.svg"
+ inkscape:export-filename="gwy_mask_remove-24.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96">
+ <defs
+ id="defs8426" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="16.948159"
+ inkscape:cx="6.5366583"
+ inkscape:cy="13.469422"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8429">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-128.33165,-604.34668)">
+ <g
+ id="layer1-5"
+ inkscape:label="Layer 1"
+ style="opacity:1;vector-effect:none;fill:#daa39c;fill-opacity:1;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:3.00000018, 3.00000018;stroke-dashoffset:1.50000012;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none">
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="rect11972-6"
+ d="m 131.83165,609.84668 h 17 v 13 h -17 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#daa39c;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:3.00000018, 3.00000018;stroke-dashoffset:1.50000012;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ </g>
+ <g
+ transform="matrix(0,1.4142136,-1.4142136,0,898.86247,85.887151)"
+ id="g8435"
+ style="stroke:#000000;stroke-width:2.12124991;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1">
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path8431"
+ d="m 372.59152,533.86227 5,5"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.12124991;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.12124991;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 377.59152,533.86227 -5,5"
+ id="path8433"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ </g>
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_mask_shrink-24.svg b/pixmaps/src/gwy_mask_shrink-24.svg
new file mode 100644
index 0000000..cc0dfe4
--- /dev/null
+++ b/pixmaps/src/gwy_mask_shrink-24.svg
@@ -0,0 +1,182 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 22.5 22.5"
+ id="svg8093"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_mask_shrink-24.svg"
+ inkscape:export-filename="gwy_mask_shrink-24.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96">
+ <defs
+ id="defs8095">
+ <linearGradient
+ id="linearGradient8428"
+ osb:paint="solid">
+ <stop
+ style="stop-color:#4696db;stop-opacity:1;"
+ offset="0"
+ id="stop8430" />
+ </linearGradient>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1"
+ inkscape:cx="-262.91371"
+ inkscape:cy="193.31981"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ units="px"
+ showguides="false"
+ inkscape:snap-nodes="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-grids="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="0.9375"
+ spacingy="0.9375"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8098">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-244.77814,-596.57599)">
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#c1665a;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.9375;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:2.8125,2.8125;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate;font-variant-east_asian:normal;vector-effect:none"
+ id="rect10104"
+ width="21.5625"
+ height="21.5625"
+ x="245.24689"
+ y="597.04474" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8483"
+ width="6.5625005"
+ height="6.5625"
+ x="252.74689"
+ y="604.54474" />
+ <g
+ transform="matrix(0.9375,0,0,0.9375,78.998442,33.313463)"
+ id="layer1-5"
+ inkscape:label="Layer 1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8477"
+ d="m 258.83361,610.65875 0.007,5.63598 2.14966,-2.14965 3.75,3.75 1.32569,-1.32568 -3.75,-3.75 2.14966,-2.14966 z"
+ style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" />
+ <path
+ style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 264.46561,610.66973 -5.625,5.625 0.0238,-5.63247 z"
+ id="path8071"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
+ d="m 258.84361,605.03929 0.007,-5.63598 2.14966,2.14965 3.75,-3.75 1.32569,1.32568 -3.75,3.75 2.14966,2.14966 z"
+ id="path8479"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8493"
+ d="m 264.46561,605.04473 -5.625,-5.625 0.003,5.61956 z"
+ style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ sodipodi:nodetypes="cccc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8481"
+ d="m 253.22721,605.02502 -0.007,-5.63598 -2.14966,2.14965 -3.75,-3.75 -1.32569,1.32568 3.75,3.75 -2.14966,2.14966 z"
+ style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" />
+ <path
+ style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 247.59061,605.04473 5.625,-5.625 0.0116,5.60529 z"
+ id="path8499"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc" />
+ <rect
+ y="604.54474"
+ x="252.74689"
+ height="6.5625"
+ width="6.5625005"
+ id="rect10108"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#e5beb9;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.9375;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:0.93750003, 1.87500004;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.875;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+ d="m 265.40311,598.48223 -3.75,3.75"
+ id="path8432"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8442"
+ d="m 246.65311,598.48223 3.75,3.75"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.875;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8444"
+ d="m 265.40311,617.23223 -3.75,-3.75"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.875;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.9375;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+ d="m 253.22663,610.66229 -5.63599,0.007 2.14966,2.14966 -3.75,3.75 1.32568,1.32568 3.75,-3.75 2.14966,2.14966 z"
+ id="path8462"
+ inkscape:connector-curvature="0" />
+ <g
+ id="g8450">
+ <path
+ style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 247.59061,610.66973 5.625,5.625 0.0115,-5.63227 z"
+ id="path8487"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8446"
+ d="m 246.65311,617.23223 3.75,-3.75"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.875;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
+ </g>
+ <g
+ id="g8456"
+ transform="translate(-11.249996,-4.6875043)" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_mask_subtract-24.svg b/pixmaps/src/gwy_mask_subtract-24.svg
new file mode 100644
index 0000000..32bf9d0
--- /dev/null
+++ b/pixmaps/src/gwy_mask_subtract-24.svg
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8424"
+ version="1.1"
+ inkscape:version="0.92.1 unknown"
+ sodipodi:docname="gwy_mask_subtract-24.svg">
+ <defs
+ id="defs8426" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="14.427539"
+ inkscape:cx="7.8403613"
+ inkscape:cy="9.3275383"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8429">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-128.33165,-604.34668)">
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#c1665a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:3, 3;stroke-dashoffset:6.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 128.83165,604.84668 h 17 v 15 h -17 z"
+ id="rect11972"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:3.00000018, 3.00000017999999979;stroke-dashoffset:1.50000012;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 134.83165,612.84668 h 11 v 7 h -11 z"
+ id="rect8417"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path4754"
+ d="m 134.83165,612.84668 h 17 v 15 h -17 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:3, 3;stroke-dashoffset:6.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path8418"
+ d="m 128.83165,604.84668 h 17 v 15 h -17 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:3, 3;stroke-dashoffset:6.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_mask_thin-24.svg b/pixmaps/src/gwy_mask_thin-24.svg
new file mode 100644
index 0000000..9af236d
--- /dev/null
+++ b/pixmaps/src/gwy_mask_thin-24.svg
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8424"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_mask_thin-24.svg"
+ inkscape:export-filename="gwy_mask_thin-24.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96">
+ <defs
+ id="defs8426" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="24.417445"
+ inkscape:cx="22.477195"
+ inkscape:cy="34.092874"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-global="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8429">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-128.33165,-604.34668)">
+ <g
+ id="g4834"
+ transform="translate(0.80053855,0.01001727)">
+ <g
+ style="opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:3.00000018, 3.00000018;stroke-dashoffset:1.50000012;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none"
+ id="g4808">
+ <path
+ id="path4804"
+ transform="translate(128.33165,604.34668)"
+ d="M 4.1035156,1.3398438 A 3.50035,3.50035 0 0 0 1.4804688,6.9472656 L 4.0664062,10.46875 C 3.7418569,10.862139 3.4261872,11.289923 3.1484375,11.794922 2.4187975,13.121552 1.97543,14.516559 1.5625,15.787109 1.14957,17.057659 0.85351562,18.117188 0.85351562,18.117188 A 3.50035,3.50035 0 1 0 7.59375,20.003906 c 0,0 0.26099,-0.932724 0.625,-2.052734 0.36401,-1.12002 0.9156,-2.51416 1.0625,-2.78125 0.11417,-0.20757 0.3852169,-0.376895 0.6230469,-0.552734 0.6297601,-0.0209 1.584334 [...]
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:n [...]
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ id="g4802">
+ <path
+ style="fill:#7b3633;fill-opacity:0.02278371;fill-rule:evenodd;stroke:#c1665a;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 132.63467,609.22216 4.62176,6.29515"
+ id="path4792"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:#7b3633;fill-opacity:0.02278371;fill-rule:evenodd;stroke:#c1665a;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 146.55333,615.68146 c -3.13775,-0.0664 -7.63847,-0.4054 -9.41324,-0.19921 0,0 -1.71643,0.75223 -2.59297,2.34594 -0.87654,1.59371 -1.99214,5.57799 -1.99214,5.57799"
+ id="path4794"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccsc" />
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_measure_lattice-24.svg b/pixmaps/src/gwy_measure_lattice-24.svg
new file mode 100644
index 0000000..1b8aff8
--- /dev/null
+++ b/pixmaps/src/gwy_measure_lattice-24.svg
@@ -0,0 +1,310 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8358"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_measure_lattice-24.svg">
+ <defs
+ id="defs8360" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="19.933662"
+ inkscape:cx="15.43423"
+ inkscape:cy="-3.2406089"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-grids="false"
+ inkscape:snap-object-midpoints="true"
+ showguides="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8363">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-440.45435,-566.55946)">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#db2424;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 447.95435,584.05946 6,-3 v -6"
+ id="path8466"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccc" />
+ <g
+ id="g4815"
+ transform="translate(5,-3)">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 442.95435,567.55946 v 3"
+ id="path4811"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4813"
+ d="m 444.45435,569.05946 h -3"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ </g>
+ <g
+ transform="translate(5,3)"
+ id="g4821">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4817"
+ d="m 442.95435,567.55946 v 3"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 444.45435,569.05946 h -3"
+ id="path4819"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ transform="translate(5,9)"
+ id="g4827">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4823"
+ d="m 442.95435,567.55946 v 3"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 444.45435,569.05946 h -3"
+ id="path4825"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ id="g4833"
+ transform="translate(5,15)">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 442.95435,567.55946 v 3"
+ id="path4829"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4831"
+ d="m 444.45435,569.05946 h -3"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ </g>
+ <g
+ transform="translate(5,21)"
+ id="g4859">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4855"
+ d="m 442.95435,567.55946 v 3"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 444.45435,569.05946 h -3"
+ id="path4857"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ id="g4883"
+ transform="translate(11)">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 442.95435,567.55946 v 3"
+ id="path4879"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4881"
+ d="m 444.45435,569.05946 h -3"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ </g>
+ <g
+ id="g4889"
+ transform="translate(11,6)">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 442.95435,567.55946 v 3"
+ id="path4885"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4887"
+ d="m 444.45435,569.05946 h -3"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ </g>
+ <g
+ transform="translate(11,11.5)"
+ id="g4895">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4891"
+ d="m 442.95435,567.55946 v 3"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 444.45435,569.05946 h -3"
+ id="path4893"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ id="g4901"
+ transform="translate(11,17)">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 442.95435,567.55946 v 3"
+ id="path4897"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4899"
+ d="m 444.45435,569.05946 h -3"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ </g>
+ <g
+ id="g4917"
+ transform="translate(-9)">
+ <rect
+ y="567.05945"
+ x="465.9545"
+ height="22"
+ width="5.9999995"
+ id="rect12874"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#ffbb00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path12876"
+ d="m 466.45434,575.05957 h 3"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path12880"
+ d="m 466.45434,572.05957 h 2.00001"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 466.45434,569.05957 h 3"
+ id="path12882"
+ inkscape:connector-curvature="0" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path12884"
+ d="m 466.45434,584.05957 h 2.00001"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path12890"
+ d="m 466.45434,578.05957 h 2.00001"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 466.45434,581.05957 h 3"
+ id="path12892"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8091"
+ d="m 466.45434,587.05957 h 3"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+ <g
+ id="g4942"
+ transform="translate(-1)">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 442.95435,567.55946 v 3"
+ id="path4938"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4940"
+ d="m 444.45435,569.05946 h -3"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ </g>
+ <g
+ transform="translate(-1,6)"
+ id="g4948">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4944"
+ d="m 442.95435,567.55946 v 3"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 444.45435,569.05946 h -3"
+ id="path4946"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ id="g5025"
+ transform="translate(-1)">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4950"
+ d="m 442.95435,579.55946 v 3"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 444.45435,581.05946 h -3"
+ id="path4952"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ id="g5021"
+ transform="translate(-1)">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 442.95435,585.55946 v 3"
+ id="path4956"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4958"
+ d="m 444.45435,587.05946 h -3"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ </g>
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_merge-24.svg b/pixmaps/src/gwy_merge-24.svg
new file mode 100644
index 0000000..bcbe244
--- /dev/null
+++ b/pixmaps/src/gwy_merge-24.svg
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg10043"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_merge-24.svg"
+ inkscape:export-filename="gwy_arithmetic-24.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs10045" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="24.386559"
+ inkscape:cx="10.928843"
+ inkscape:cy="20.559608"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata10048">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-197.36205,-472.33789)">
+ <rect
+ y="472.83789"
+ x="197.86205"
+ height="15"
+ width="15"
+ id="rect4910"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#7db846;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="480.83789"
+ x="205.86205"
+ height="15"
+ width="15"
+ id="rect4912"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#e8f0e0;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="M 0.5 0.5 L 0.5 15.5 L 8.5 15.5 L 8.5 23.5 L 23.5 23.5 L 23.5 8.5 L 15.5 8.5 L 15.5 0.5 L 0.5 0.5 z "
+ id="rect11370"
+ transform="translate(197.36205,472.33789)" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_more-24.svg b/pixmaps/src/gwy_more-24.svg
new file mode 100644
index 0000000..3780f16
--- /dev/null
+++ b/pixmaps/src/gwy_more-24.svg
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg10043"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_more-24.svg"
+ inkscape:export-filename="gwy_arithmetic-24.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs10045" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="7.0630899"
+ inkscape:cx="1.9641561"
+ inkscape:cy="11.987625"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata10048">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-197.36205,-472.33789)">
+ <path
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#4696db;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="M 14.333984 0.50195312 C 12.809464 0.50195312 14.091866 2.5088775 11.166016 2.7734375 C 7.6983256 3.0870375 9.6052044 -0.067941875 6.5214844 1.5488281 C 3.4377844 3.1656481 7.1189719 3.3925463 4.8886719 6.0664062 C 2.6584219 8.7402062 1.7756012 5.1586319 0.73828125 8.4824219 C -0.29901875 11.806212 2.4637537 9.3642713 2.7773438 12.832031 C 3.0909438 16.299741 -0.06595875 14.390839 1.5507812 17.474609 C 3.1675212 20.558379 3.3946094 16.879025 6.0683594 19.109375 C 8.7421594 21.3 [...]
+ transform="translate(197.36205,472.33789)"
+ id="path4236" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8080"
+ d="m 204.36205,484.33789 h 10"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="cc" />
+ <path
+ sodipodi:nodetypes="cc"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 209.36205,479.33789 v 10"
+ id="path8423"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_mutual_crop-24.svg b/pixmaps/src/gwy_mutual_crop-24.svg
new file mode 100644
index 0000000..1ea62a7
--- /dev/null
+++ b/pixmaps/src/gwy_mutual_crop-24.svg
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8440"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_mutual_crop-24.svg"
+ inkscape:export-filename="gwy_crop-24.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs8442">
+ <clipPath
+ id="clipPath8428-3-56"
+ clipPathUnits="userSpaceOnUse">
+ <rect
+ transform="matrix(0.51658212,0.85623765,0.85623765,-0.51658212,0,0)"
+ y="-55.845753"
+ x="77.848434"
+ height="72.344795"
+ width="92.534042"
+ id="rect8430-6-2"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#eb0000;fill-opacity:0.41158537;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ </clipPath>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1.9294364"
+ inkscape:cx="142.17879"
+ inkscape:cy="-8.7904467"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ showguides="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8445">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-18.260046,-276.07986)">
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#e1ebd7;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 25.760046,276.57986 v 7 h -7 v 16 h 16 v -7 h 7 v -16 z"
+ id="rect8700"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccccc" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#7db846;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:3.5;stroke-opacity:1;marker:none;marker-start:none;marker-end:none;enable-background:accumulate"
+ d="m 25.760046,283.57986 9,-10e-6 v 9.00001 l -9,1e-5 z"
+ id="rect11972-9"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_neural_apply-24.svg b/pixmaps/src/gwy_neural_apply-24.svg
new file mode 100644
index 0000000..544c545
--- /dev/null
+++ b/pixmaps/src/gwy_neural_apply-24.svg
@@ -0,0 +1,228 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg10043"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_neural_apply-24.svg"
+ inkscape:export-filename="gwy_arithmetic-24.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs10045">
+ <filter
+ height="1.2250096"
+ y="-0.11250482"
+ width="1.2571303"
+ x="-0.12856513"
+ id="filter8458"
+ style="color-interpolation-filters:sRGB"
+ inkscape:collect="always">
+ <feGaussianBlur
+ id="feGaussianBlur8460"
+ stdDeviation="0.16275744"
+ inkscape:collect="always" />
+ </filter>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="4.1733689"
+ inkscape:cx="124.50368"
+ inkscape:cy="-24.195489"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="false"
+ inkscape:snap-object-midpoints="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata10048">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-197.36205,-472.33789)">
+ <g
+ transform="translate(-46.42443,-128.76933)"
+ id="layer1-5"
+ inkscape:label="Layer 1">
+ <path
+ sodipodi:nodetypes="ccccccccccc"
+ inkscape:connector-curvature="0"
+ id="path8069"
+ d="m 256.27811,611.60722 -0.009,-2 h 5.99121 v 1.5 l 4.75586,-4 -4.75586,-4.5 v 2 h -5.48242 -5.48242 l -0.009,7 z"
+ style="fill:#7db846;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ transform="rotate(-43.812899,259.65837,596.89525)"
+ style="opacity:0.75;fill:#ffffff;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter8458)"
+ d="m 248.25595,597.40694 7.92078,7.64259 c 0.78644,-0.69253 0.27926,-0.20275 0.86026,-0.71903 0,0 0.41294,0.95999 -0.6066,2.08575 -0.31728,0.41341 -7.72954,-7.84089 -8.35149,-8.62932 -0.34388,-0.43593 -0.0819,-0.56315 0.17705,-0.37999 z"
+ id="path8462"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccsc" />
+ <path
+ sodipodi:nodetypes="cccscc"
+ inkscape:connector-curvature="0"
+ id="path8466"
+ d="m 253.47872,607.61144 1.81198,-1.81975 0.89043,-1.02933 c 0,0 0.0967,0.57698 -0.92284,1.70274 -1.01955,1.12575 -1.31704,1.26648 -1.31704,1.26648 z"
+ style="opacity:0.26000001;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter8458)"
+ transform="rotate(-43.812899,254.00535,611.52001)" />
+ <path
+ transform="rotate(6.2066356,241.67283,695.82003)"
+ style="opacity:0.26000001;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter8458)"
+ d="m 253.47872,607.61144 1.81198,-1.81975 0.89043,-1.02933 c 0,0 0.0967,0.57698 -0.92284,1.70274 -1.01955,1.12575 -1.31704,1.26648 -1.31704,1.26648 z"
+ id="path8468"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccscc" />
+ </g>
+ <circle
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#4696db;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="path8522"
+ cx="200.36205"
+ cy="475.33789"
+ r="2.5" />
+ <circle
+ r="2.5"
+ cy="483.33789"
+ cx="201.36205"
+ id="circle8540"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#4696db;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <circle
+ r="2.5"
+ cy="493.33789"
+ cx="208.36205"
+ id="circle8546"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#4696db;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 201.05196,480.85722 -0.37983,-3.03866"
+ id="path8566"
+ inkscape:connector-type="polyline"
+ inkscape:connector-curvature="0"
+ inkscape:connection-start="#circle8540"
+ inkscape:connection-end="#path8522" />
+ <circle
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#4696db;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="circle8544"
+ cx="218.36205"
+ cy="491.83789"
+ r="2.5" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 202.79568,485.38594 4.13273,5.9039"
+ id="path8568"
+ inkscape:connector-type="polyline"
+ inkscape:connector-curvature="0"
+ inkscape:connection-start="#circle8540"
+ inkscape:connection-end="#circle8546" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 210.83436,492.96704 5.05537,-0.7583"
+ id="path8570"
+ inkscape:connector-type="polyline"
+ inkscape:connector-curvature="0"
+ inkscape:connection-start="#circle8546"
+ inkscape:connection-end="#circle8544" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 205.87497,493.08439 -5.68312,-0.57927"
+ id="path8572"
+ inkscape:connector-type="polyline"
+ inkscape:connector-curvature="0"
+ inkscape:connection-start="#circle8546" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 218.36205,491.83789 v 0"
+ id="path8582"
+ inkscape:connector-type="polyline"
+ inkscape:connector-curvature="0"
+ inkscape:connection-start="#circle8544"
+ inkscape:connection-end="#circle8544" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 214.22922,488.00026 2.30084,2.1365"
+ id="path8584"
+ inkscape:connector-type="polyline"
+ inkscape:connector-curvature="0"
+ inkscape:connection-start="#circle8578"
+ inkscape:connection-end="#circle8544" />
+ <circle
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#4696db;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="circle8578"
+ cx="212.36205"
+ cy="486.33789"
+ r="2.5" />
+ <circle
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#4696db;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="circle8542"
+ cx="200.36205"
+ cy="492.33789"
+ r="2.5" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 203.77392,483.99567 6.17625,1.68444"
+ id="path8609"
+ inkscape:connector-type="polyline"
+ inkscape:connector-curvature="0"
+ inkscape:connection-start="#circle8540"
+ inkscape:connection-end="#circle8578" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 201.08597,485.8226 -0.44785,4.03058"
+ id="path8439"
+ inkscape:connector-type="polyline"
+ inkscape:connector-curvature="0"
+ inkscape:connection-start="#circle8540"
+ inkscape:connection-end="#circle8542" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 211.12172,488.50846 -1.51935,2.65886"
+ id="path8441"
+ inkscape:connector-type="polyline"
+ inkscape:connector-curvature="0"
+ inkscape:connection-start="#circle8578"
+ inkscape:connection-end="#circle8546" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_neural_train-24.svg b/pixmaps/src/gwy_neural_train-24.svg
new file mode 100644
index 0000000..b222cef
--- /dev/null
+++ b/pixmaps/src/gwy_neural_train-24.svg
@@ -0,0 +1,216 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg10043"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_neural_train-24.svg"
+ inkscape:export-filename="gwy_arithmetic-24.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs10045">
+ <filter
+ height="1.2250096"
+ y="-0.11250482"
+ width="1.2571303"
+ x="-0.12856513"
+ id="filter8458"
+ style="color-interpolation-filters:sRGB"
+ inkscape:collect="always">
+ <feGaussianBlur
+ id="feGaussianBlur8460"
+ stdDeviation="0.16275744"
+ inkscape:collect="always" />
+ </filter>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1.2403396"
+ inkscape:cx="112.57724"
+ inkscape:cy="-24.255527"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-global="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata10048">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-197.36205,-472.33789)">
+ <path
+ style="fill:#7db846;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 211.86205,478.83833 h 2 l -4.5,4.75586 -4.5,-4.756 2,1.4e-4 v -5.96484 l 5,-0.009 z"
+ id="path8069"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccc" />
+ <path
+ sodipodi:nodetypes="ccsscc"
+ inkscape:connector-curvature="0"
+ id="path8462"
+ d="m 256.17673,605.04953 c 0.8826,0.74463 0.87767,0.64516 0.25366,1.36672 -0.0793,0.10335 -3.50436,3.74088 -3.64706,3.54963 -0.0357,-0.0478 1.21045,0.6568 0.77849,0.76406 -0.31181,0.0774 -2.39046,0.15988 -2.03936,-0.30007 1.5729,-1.77619 2.994,-3.72192 4.65427,-5.38034 z"
+ style="opacity:0.75;fill:#ffffff;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter8458)"
+ transform="matrix(-0.72160439,-0.69230565,-0.69230565,0.72160439,812.46536,214.58469)" />
+ <path
+ sodipodi:nodetypes="cccscc"
+ inkscape:connector-curvature="0"
+ id="path8468"
+ d="m 253.47872,607.61144 1.81198,-1.81975 0.89043,-1.02933 c 0,0 0.0967,0.57698 -0.92284,1.70274 -1.01955,1.12575 -1.31704,1.26648 -1.31704,1.26648 z"
+ style="opacity:0.26000001;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter8458)"
+ transform="matrix(0.10811449,0.99413845,0.99413845,-0.10811449,-419.79492,293.46652)" />
+ <circle
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#4696db;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="path8522"
+ cx="200.36205"
+ cy="475.33789"
+ r="2.5" />
+ <circle
+ r="2.5"
+ cy="483.33789"
+ cx="201.36205"
+ id="circle8540"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#4696db;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <circle
+ r="2.5"
+ cy="493.33789"
+ cx="208.36205"
+ id="circle8546"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#4696db;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 201.05196,480.85722 -0.37983,-3.03866"
+ id="path8566"
+ inkscape:connector-type="polyline"
+ inkscape:connector-curvature="0"
+ inkscape:connection-start="#circle8540"
+ inkscape:connection-end="#path8522" />
+ <circle
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#4696db;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="circle8544"
+ cx="218.36205"
+ cy="491.83789"
+ r="2.5" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 202.79568,485.38594 4.13273,5.9039"
+ id="path8568"
+ inkscape:connector-type="polyline"
+ inkscape:connector-curvature="0"
+ inkscape:connection-start="#circle8540"
+ inkscape:connection-end="#circle8546" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 210.83436,492.96704 5.05537,-0.7583"
+ id="path8570"
+ inkscape:connector-type="polyline"
+ inkscape:connector-curvature="0"
+ inkscape:connection-start="#circle8546"
+ inkscape:connection-end="#circle8544" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 205.87497,493.08439 -5.68312,-0.57927"
+ id="path8572"
+ inkscape:connector-type="polyline"
+ inkscape:connector-curvature="0"
+ inkscape:connection-start="#circle8546" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 218.36205,491.83789 v 0"
+ id="path8582"
+ inkscape:connector-type="polyline"
+ inkscape:connector-curvature="0"
+ inkscape:connection-start="#circle8544"
+ inkscape:connection-end="#circle8544" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 214.22922,488.00026 2.30084,2.1365"
+ id="path8584"
+ inkscape:connector-type="polyline"
+ inkscape:connector-curvature="0"
+ inkscape:connection-start="#circle8578"
+ inkscape:connection-end="#circle8544" />
+ <circle
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#4696db;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="circle8578"
+ cx="212.36205"
+ cy="486.33789"
+ r="2.5" />
+ <circle
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#4696db;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="circle8542"
+ cx="200.36205"
+ cy="492.33789"
+ r="2.5" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 203.77392,483.99567 6.17625,1.68444"
+ id="path8609"
+ inkscape:connector-type="polyline"
+ inkscape:connector-curvature="0"
+ inkscape:connection-start="#circle8540"
+ inkscape:connection-end="#circle8578" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 201.08597,485.8226 -0.44785,4.03058"
+ id="path8437"
+ inkscape:connector-type="polyline"
+ inkscape:connector-curvature="0"
+ inkscape:connection-start="#circle8540"
+ inkscape:connection-end="#circle8542" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 211.12172,488.50846 -1.51935,2.65886"
+ id="path8439"
+ inkscape:connector-type="polyline"
+ inkscape:connector-curvature="0"
+ inkscape:connection-start="#circle8578"
+ inkscape:connection-end="#circle8546" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_next-24.svg b/pixmaps/src/gwy_next-24.svg
new file mode 100644
index 0000000..1cd9592
--- /dev/null
+++ b/pixmaps/src/gwy_next-24.svg
@@ -0,0 +1,112 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8093"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_next-24.svg"
+ inkscape:export-filename="gwy_flip_horizontally-24.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs8095">
+ <filter
+ inkscape:collect="always"
+ style="color-interpolation-filters:sRGB"
+ id="filter8458"
+ x="-0.12856513"
+ width="1.2571303"
+ y="-0.11250482"
+ height="1.2250096">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.16275744"
+ id="feGaussianBlur8460" />
+ </filter>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="18.852899"
+ inkscape:cx="1.8735526"
+ inkscape:cy="17.657608"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-global="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8098">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-244.77811,-595.10722)">
+ <path
+ style="fill:#7db846;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;fill-opacity:1"
+ d="m 246.27811,600.10722 9.5,7 -9.5,7 z"
+ id="path4758"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="opacity:0.75;fill:#ffffff;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter8458)"
+ d="m 247.2326,608.08361 0.0455,-5.97639 6.39043,4.47067 c -3.60204,-1.17623 -5.67841,-2.61368 -6.43593,1.506 z"
+ id="path8400"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ sodipodi:nodetypes="cccc"
+ inkscape:connector-curvature="0"
+ id="path4760"
+ d="m 257.27811,600.10722 9.5,7 -9.5,7 z"
+ style="fill:#7db846;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cccc"
+ inkscape:connector-curvature="0"
+ id="path4764"
+ d="m 258.2326,606.58361 0.0455,-4.47639 6.39043,4.47067 c -3.60204,-1.17623 -5.27343,-2.71465 -6.43593,0.006 z"
+ style="opacity:0.75;fill:#ffffff;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter8458)" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_null_offsets-24.svg b/pixmaps/src/gwy_null_offsets-24.svg
new file mode 100644
index 0000000..8c4e2ad
--- /dev/null
+++ b/pixmaps/src/gwy_null_offsets-24.svg
@@ -0,0 +1,703 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg10043"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_null_offsets-24.svg"
+ inkscape:export-filename="gwy_arithmetic-24.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs10045">
+ <linearGradient
+ y2="361.22473"
+ x2="272.91217"
+ y1="247.92804"
+ x1="207.50029"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient4171"
+ xlink:href="#linearGradient4140"
+ gradientTransform="translate(40.432491,952.98205)" />
+ <linearGradient
+ id="linearGradient4140">
+ <stop
+ id="stop4142"
+ offset="0"
+ style="stop-color:#d7e3f4;stop-opacity:1;" />
+ <stop
+ id="stop4144"
+ offset="1"
+ style="stop-color:#f1f5fb;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ y2="361.22473"
+ x2="272.91217"
+ y1="247.92804"
+ x1="207.50029"
+ gradientTransform="translate(-2.339129,952.13564)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient8503"
+ xlink:href="#linearGradient4140"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="361.22473"
+ x2="272.91217"
+ y1="247.92804"
+ x1="207.50029"
+ gradientTransform="translate(13.227281,960.62636)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient11272"
+ xlink:href="#linearGradient4140"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4140"
+ id="linearGradient9134"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-27.014439,958.15741)"
+ x1="207.50029"
+ y1="247.92804"
+ x2="272.91217"
+ y2="361.22473" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="20.317098"
+ inkscape:cx="17.239074"
+ inkscape:cy="6.537208"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:lockguides="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata10048">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-197.36205,-472.33789)">
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#7db846;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 206.86205,481.83789 h 14 v 14 h -14 z"
+ id="rect11370"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4385"
+ y="843.05096"
+ x="41.802231">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4387"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4487"
+ y="938.92712"
+ x="65.932205">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4489"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4536"
+ y="878.3396"
+ x="0.49949738">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4538"
+ font-size="4.0000" />
+ </text>
+ <path
+ inkscape:connector-curvature="0"
+ d=""
+ cx="242.94168"
+ cy="308.38486"
+ r="70.205605"
+ id="path4138-6"
+ style="opacity:1;fill:url(#linearGradient4171);fill-opacity:1;stroke:#000000;stroke-width:5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g5318"
+ transform="translate(-38.681109,677.66608)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g6386"
+ transform="translate(508.54013,149.4681)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g7162"
+ transform="translate(-186.10204,-7.29379)" />
+ <text
+ xml:space="preserve"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:0px;word-spacing:0px;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;color-interpolat [...]
+ x="362.06644"
+ y="1066.9902"
+ id="text8015"><tspan
+ id="tspan8017"
+ x="362.06644"
+ y="1066.9902" /></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+ x="-1211.035"
+ y="-260.07465"
+ id="text9295"><tspan
+ id="tspan9297"
+ x="-1211.035"
+ y="-260.07465" /></text>
+ <text
+ id="text7408-2"
+ class="fil7 fnt4"
+ y="21.807182"
+ x="-1093.8223"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ id="text7422"
+ class="fil7 fnt4"
+ y="49.273796"
+ x="-1077.4493"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4385-9"
+ y="842.20453"
+ x="-0.96938998">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4387-0"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4487-9"
+ y="938.08069"
+ x="23.160585">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4489-1"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4536-7"
+ y="877.49316"
+ x="-42.272125">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4538-7"
+ font-size="4.0000" />
+ </text>
+ <path
+ inkscape:connector-curvature="0"
+ d=""
+ cx="242.94168"
+ cy="308.38486"
+ r="70.205605"
+ id="path4138-6-1"
+ style="opacity:1;fill:url(#linearGradient8503);fill-opacity:1;stroke:#000000;stroke-width:5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g5318-7"
+ transform="translate(-81.452712,676.81967)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g6386-6"
+ transform="translate(465.76854,148.62169)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g7162-7"
+ transform="translate(-228.87364,-8.1402)" />
+ <text
+ xml:space="preserve"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:0px;word-spacing:0px;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;color-interpolat [...]
+ x="319.29483"
+ y="1066.1438"
+ id="text8015-3"><tspan
+ id="tspan8017-6"
+ x="319.29483"
+ y="1066.1438" /></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+ x="-1253.8066"
+ y="-260.92102"
+ id="text9295-5"><tspan
+ id="tspan9297-6"
+ x="-1253.8066"
+ y="-260.92102" /></text>
+ <text
+ id="text7408-2-3"
+ class="fil7 fnt4"
+ y="20.960777"
+ x="-1136.5939"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ id="text7422-9"
+ class="fil7 fnt4"
+ y="48.427391"
+ x="-1120.2209"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4385-7"
+ y="850.69525"
+ x="14.597016">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4387-2"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4487-3"
+ y="946.57141"
+ x="38.72699">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4489-7"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4536-2"
+ y="885.98389"
+ x="-26.705719">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4538-5"
+ font-size="4.0000" />
+ </text>
+ <path
+ inkscape:connector-curvature="0"
+ d=""
+ cx="242.94168"
+ cy="308.38486"
+ r="70.205605"
+ id="path4138-6-3"
+ style="opacity:1;fill:url(#linearGradient11272);fill-opacity:1;stroke:#000000;stroke-width:5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g5318-3"
+ transform="translate(-65.886312,685.31039)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g6386-64"
+ transform="translate(481.33493,157.11241)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g7162-03"
+ transform="translate(-213.30724,0.35052)" />
+ <text
+ xml:space="preserve"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:0px;word-spacing:0px;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;color-interpolat [...]
+ x="334.86124"
+ y="1074.6345"
+ id="text8015-5"><tspan
+ id="tspan8017-85"
+ x="334.86124"
+ y="1074.6345" /></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+ x="-1238.2402"
+ y="-252.4303"
+ id="text9295-0"><tspan
+ id="tspan9297-9"
+ x="-1238.2402"
+ y="-252.4303" /></text>
+ <text
+ id="text7408-2-9"
+ class="fil7 fnt4"
+ y="29.4515"
+ x="-1121.0275"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ id="text7422-8"
+ class="fil7 fnt4"
+ y="56.918114"
+ x="-1104.6545"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4385-2"
+ y="848.22632"
+ x="-25.644714">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4387-6"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4487-5"
+ y="944.10248"
+ x="-1.514739">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4489-8"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4536-7-2"
+ y="883.51495"
+ x="-66.947456">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4538-9"
+ font-size="4.0000" />
+ </text>
+ <path
+ inkscape:connector-curvature="0"
+ d=""
+ cx="242.94168"
+ cy="308.38486"
+ r="70.205605"
+ id="path4138-6-6"
+ style="opacity:1;fill:url(#linearGradient9134);fill-opacity:1;stroke:#000000;stroke-width:5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g5318-4"
+ transform="translate(-106.12801,682.84144)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g6386-8"
+ transform="translate(441.09323,154.64346)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g7162-7-4"
+ transform="translate(-253.54895,-2.11844)" />
+ <text
+ xml:space="preserve"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:0px;word-spacing:0px;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;color-interpolat [...]
+ x="294.61954"
+ y="1072.1655"
+ id="text8015-0"><tspan
+ id="tspan8017-8"
+ x="294.61954"
+ y="1072.1655" /></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+ x="-1278.4819"
+ y="-254.89923"
+ id="text9295-6-9"><tspan
+ id="tspan9297-2"
+ x="-1278.4819"
+ y="-254.89923" /></text>
+ <text
+ id="text7408-2-4"
+ class="fil7 fnt4"
+ y="26.982567"
+ x="-1161.2692"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ id="text7422-7"
+ class="fil7 fnt4"
+ y="54.449181"
+ x="-1144.8962"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#ffbb00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 0.5,0.5 v 24 h 4 v -20 h 20 v -4 h -21 -2 z"
+ transform="translate(197.36205,472.33789)"
+ id="rect12874"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccccc" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect5688"
+ width="1"
+ height="1"
+ x="200.36205"
+ y="476.33789" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect5688-5"
+ width="1"
+ height="1"
+ x="200.36205"
+ y="478.33789" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect5688-0"
+ width="1"
+ height="1"
+ x="200.36205"
+ y="480.33789" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect5688-9"
+ width="1"
+ height="1"
+ x="200.36205"
+ y="482.33789" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect5688-3"
+ width="1"
+ height="1"
+ x="200.36205"
+ y="484.33789" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect5688-8"
+ width="1"
+ height="1"
+ x="200.36205"
+ y="486.33789" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect5688-56"
+ width="1"
+ height="1"
+ x="200.36205"
+ y="488.33789" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect5688-1"
+ width="1"
+ height="1"
+ x="200.36205"
+ y="490.33789" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect5688-15"
+ width="1"
+ height="1"
+ x="200.36205"
+ y="492.33789" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect5688-98"
+ width="1"
+ height="1"
+ x="200.36205"
+ y="494.33789" />
+ <rect
+ y="-220.36208"
+ x="475.33774"
+ height="1"
+ width="1"
+ id="rect5767"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ transform="rotate(90)" />
+ <rect
+ y="-218.36208"
+ x="475.33774"
+ height="1"
+ width="1"
+ id="rect5769"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ transform="rotate(90)" />
+ <rect
+ y="-216.36208"
+ x="475.33774"
+ height="1"
+ width="1"
+ id="rect5771"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ transform="rotate(90)" />
+ <rect
+ y="-214.36208"
+ x="475.33774"
+ height="1"
+ width="1"
+ id="rect5773"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ transform="rotate(90)" />
+ <rect
+ y="-212.36208"
+ x="475.33774"
+ height="1"
+ width="1"
+ id="rect5775"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ transform="rotate(90)" />
+ <rect
+ y="-210.36208"
+ x="475.33774"
+ height="1"
+ width="1"
+ id="rect5777"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ transform="rotate(90)" />
+ <rect
+ y="-208.36208"
+ x="475.33774"
+ height="1"
+ width="1"
+ id="rect5779"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ transform="rotate(90)" />
+ <rect
+ y="-206.36208"
+ x="475.33774"
+ height="1"
+ width="1"
+ id="rect5781"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ transform="rotate(90)" />
+ <rect
+ y="-204.36208"
+ x="475.33774"
+ height="1"
+ width="1"
+ id="rect5783"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ transform="rotate(90)" />
+ <rect
+ y="-202.36208"
+ x="475.33774"
+ height="1"
+ width="1"
+ id="rect5785"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ transform="rotate(90)" />
+ <rect
+ y="-202.36208"
+ x="476.33774"
+ height="1"
+ width="1"
+ id="rect5785-4"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ transform="rotate(90)" />
+ <g
+ id="g5851"
+ transform="rotate(180,210.0811,485.04494)">
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path8069"
+ d="m 207.83762,484.79856 1.99711,-1.99709 4.99275,4.99275 -1.99709,1.99709 z"
+ style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:1.06666672px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8071"
+ d="m 210.83328,491.78841 5.99131,-5.9913 v 5.9913 z"
+ style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:1.06666672px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ </g>
+ <rect
+ y="476.33789"
+ x="199.36205"
+ height="1"
+ width="1"
+ id="rect8513"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8515"
+ width="1"
+ height="1"
+ x="201.36205"
+ y="474.33789" />
+ <rect
+ y="474.33789"
+ x="205.36205"
+ height="1"
+ width="1"
+ id="rect8517"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="474.33789"
+ x="209.36205"
+ height="1"
+ width="1"
+ id="rect8517-3"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="474.33789"
+ x="213.36205"
+ height="1"
+ width="1"
+ id="rect8517-6"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="474.33789"
+ x="217.36205"
+ height="1"
+ width="1"
+ id="rect8517-7"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="480.33789"
+ x="199.36205"
+ height="1"
+ width="1"
+ id="rect8517-5"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="484.33789"
+ x="199.36205"
+ height="1"
+ width="1"
+ id="rect8517-35"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="488.33789"
+ x="199.36205"
+ height="1"
+ width="1"
+ id="rect8517-62"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="492.33789"
+ x="199.36205"
+ height="1"
+ width="1"
+ id="rect8517-9"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_palettes-16.svg b/pixmaps/src/gwy_palettes-16.svg
new file mode 100644
index 0000000..e0f5b5f
--- /dev/null
+++ b/pixmaps/src/gwy_palettes-16.svg
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ viewBox="0 0 16 16"
+ id="svg8691"
+ version="1.1"
+ inkscape:version="0.92+devel unknown"
+ sodipodi:docname="gwy_palettes-16.svg"
+ inkscape:export-filename="gwy_palettes-16.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs8693">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient8648">
+ <stop
+ style="stop-color:#000200;stop-opacity:1"
+ offset="0"
+ id="stop8650" />
+ <stop
+ id="stop8714"
+ offset="0.25"
+ style="stop-color:#4696db;stop-opacity:1" />
+ <stop
+ id="stop8710"
+ offset="0.5"
+ style="stop-color:#ffbb00;stop-opacity:1" />
+ <stop
+ style="stop-color:#fd9044;stop-opacity:1"
+ offset="0.75"
+ id="stop8712" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1"
+ offset="1"
+ id="stop8652" />
+ </linearGradient>
+ <linearGradient
+ gradientTransform="translate(-139.12864,-80.867386)"
+ gradientUnits="userSpaceOnUse"
+ y2="549.86182"
+ x2="378.15701"
+ y1="549.86188"
+ x1="363.15701"
+ id="linearGradient8654-6"
+ xlink:href="#linearGradient8648"
+ inkscape:collect="always" />
+ <linearGradient
+ gradientTransform="translate(0,9)"
+ gradientUnits="userSpaceOnUse"
+ y2="452.99442"
+ x2="239.02837"
+ y1="452.99442"
+ x1="224.02837"
+ id="linearGradient8128"
+ xlink:href="#linearGradient8122-6"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8122-6"
+ id="linearGradient8128-3"
+ x1="224.02837"
+ y1="452.99442"
+ x2="247.02837"
+ y2="452.99442"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-224.02837,-448.99442)" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient8122-6">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop8124-7" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1"
+ offset="1"
+ id="stop8126-5" />
+ </linearGradient>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="21.764465"
+ inkscape:cx="9.6249927"
+ inkscape:cy="5.1532646"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1379"
+ inkscape:window-height="1023"
+ inkscape:window-x="531"
+ inkscape:window-y="33"
+ inkscape:window-maximized="0"
+ units="px"
+ inkscape:document-rotation="0">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8696">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-224.02837,-456.99442)">
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:url(#linearGradient8654-6);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 224.52837,466.49442 15,0 0,6 -15,0 z"
+ id="rect8646-0"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:url(#linearGradient8128);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate;vector-effect:none"
+ d="m 224.52837,458.49442 15,0 0,6 -15,0 z"
+ id="rect8118"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_palettes-24.svg b/pixmaps/src/gwy_palettes-24.svg
new file mode 100644
index 0000000..5504c95
--- /dev/null
+++ b/pixmaps/src/gwy_palettes-24.svg
@@ -0,0 +1,183 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ sodipodi:docname="gwy_palettes-24.svg"
+ inkscape:version="0.92+devel unknown"
+ version="1.1"
+ id="svg8691"
+ viewBox="0 0 24 24"
+ height="24"
+ width="24"
+ inkscape:export-filename="gwy_palettes-24.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs8693">
+ <linearGradient
+ id="linearGradient8210"
+ inkscape:collect="always">
+ <stop
+ id="stop8212"
+ offset="0"
+ style="stop-color:#000200;stop-opacity:1" />
+ <stop
+ style="stop-color:#4e0e57;stop-opacity:1"
+ offset="0.25"
+ id="stop8214" />
+ <stop
+ style="stop-color:#7b78cf;stop-opacity:1"
+ offset="0.5"
+ id="stop8216" />
+ <stop
+ id="stop8218"
+ offset="0.75"
+ style="stop-color:#4697e3;stop-opacity:1" />
+ <stop
+ id="stop8220"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient8122">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop8124" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1"
+ offset="1"
+ id="stop8126" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8648"
+ id="linearGradient8654"
+ x1="363.15701"
+ y1="549.86188"
+ x2="386.15701"
+ y2="549.86182"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-139.12864,-80.867386)" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient8648">
+ <stop
+ style="stop-color:#000200;stop-opacity:1"
+ offset="0"
+ id="stop8650" />
+ <stop
+ id="stop8714"
+ offset="0.25"
+ style="stop-color:#4696db;stop-opacity:1" />
+ <stop
+ id="stop8710"
+ offset="0.5"
+ style="stop-color:#ffbb00;stop-opacity:1" />
+ <stop
+ style="stop-color:#fd9044;stop-opacity:1"
+ offset="0.75"
+ id="stop8712" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1"
+ offset="1"
+ id="stop8652" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8122"
+ id="linearGradient8128"
+ x1="224.02837"
+ y1="452.99442"
+ x2="247.02837"
+ y2="452.99442"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,1)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8210"
+ id="linearGradient8134"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-139.12864,-88.867386)"
+ x1="363.15701"
+ y1="549.86188"
+ x2="386.15701"
+ y2="549.86182" />
+ </defs>
+ <sodipodi:namedview
+ inkscape:window-maximized="1"
+ inkscape:window-y="33"
+ inkscape:window-x="0"
+ inkscape:window-height="1028"
+ inkscape:window-width="1920"
+ showgrid="true"
+ inkscape:current-layer="layer1"
+ inkscape:document-units="px"
+ inkscape:cy="10.96139"
+ inkscape:cx="17.97223"
+ inkscape:zoom="25.429241"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base"
+ inkscape:document-rotation="0">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8696">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-224.02837,-448.99442)">
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:url(#linearGradient8654);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 224.52837,466.49442 23,0 0,6 -23,0 z"
+ id="rect8646"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:url(#linearGradient8128);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 224.52837,450.49442 23,0 0,6 -23,0 z"
+ id="rect8118"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:url(#linearGradient8134);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 224.52837,458.49442 23,0 0,6 -23,0 z"
+ id="rect8132"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_path_level-24.svg b/pixmaps/src/gwy_path_level-24.svg
new file mode 100644
index 0000000..5be1d03
--- /dev/null
+++ b/pixmaps/src/gwy_path_level-24.svg
@@ -0,0 +1,133 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24.000002"
+ viewBox="0 0 22.500001 24.000002"
+ id="svg8388"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_path_level-24.svg"
+ inkscape:export-filename="gwy_path_level-24.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs8390" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="11.478087"
+ inkscape:cx="5.7083881"
+ inkscape:cy="9.5733885"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ width="24px" />
+ <metadata
+ id="metadata8393">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-279.24551,-579.54492)">
+ <g
+ id="g8440">
+ <rect
+ y="580.04492"
+ x="278.99551"
+ height="23.000002"
+ width="22.998253"
+ id="rect8276"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#d0e2f2;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8537"
+ d="m 278.49555,583.03445 h 23.99818"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 278.49556,585.04491 h 23.99998"
+ id="path8539"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8541"
+ d="m 278.49555,591.04491 h 23.99818"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 278.49555,594.04491 h 23.99818"
+ id="path8543"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8545"
+ d="m 278.49555,598.86709 h 23.99818"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.0209229;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 278.49555,599.04491 h 23.99818"
+ id="path8547"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8549"
+ d="m 278.49555,596.04491 h 23.99818"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:#db2424;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:4.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 282.16874,600.67781 8.15269,-11.82677"
+ id="path8077"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8551"
+ d="m 282.16874,600.67781 8.15269,-11.82677"
+ style="fill:#db2424;fill-opacity:1;fill-rule:evenodd;stroke:#db2424;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8079"
+ d="m 286.96181,581.51132 11.82587,8.15331"
+ style="fill:#db2424;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:4.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:#db2424;fill-opacity:1;fill-rule:evenodd;stroke:#db2424;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 286.96181,581.51132 11.82587,8.15331"
+ id="path8553"
+ inkscape:connector-curvature="0" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8081"
+ width="23"
+ height="23.000002"
+ x="278.99551"
+ y="580.04492" />
+ </g>
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_pointer_measure-24.svg b/pixmaps/src/gwy_pointer_measure-24.svg
new file mode 100644
index 0000000..a68e515
--- /dev/null
+++ b/pixmaps/src/gwy_pointer_measure-24.svg
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8358"
+ version="1.1"
+ inkscape:version="0.92+devel unknown"
+ sodipodi:docname="gwy_pointer_measure-24.svg">
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="33.109325"
+ inkscape:cx="12.457097"
+ inkscape:cy="12.450512"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1149"
+ inkscape:window-x="0"
+ inkscape:window-y="32"
+ inkscape:window-maximized="1"
+ inkscape:document-rotation="0">
+ <inkscape:grid
+ visible="true"
+ enabled="true"
+ spacingy="0.5"
+ spacingx="0.5"
+ snapvisiblegridlinesonly="false"
+ dotted="false"
+ originy="0"
+ originx="0"
+ id="grid1px"
+ type="xygrid"
+ units="px"
+ empspacing="2" />
+ </sodipodi:namedview>
+ <defs
+ id="defs8360" />
+ <metadata
+ id="metadata8363">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ transform="matrix(1.066667,0,0,1.066667,-469.81797,-605.93009)"
+ id="layer1"
+ inkscape:groupmode="layer"
+ inkscape:label="Layer 1">
+ <path
+ style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.93825197;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new"
+ d="m 443.73316,584.46554 -0.14186,-14.51704 10.01885,10.07675 -4.00482,0.53749 2.81607,6.92264 -1.33664,0.60089 -1.33663,0.6009 -2.8902,-6.88929 z"
+ id="path12872"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccccc" />
+ <rect
+ y="568.52802"
+ x="456.85593"
+ height="20.641552"
+ width="5.6295137"
+ id="rect12874"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#ffbb00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.93825275;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path12876"
+ d="m 457.32492,576.03418 h 2.81476"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.93825239;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path12880"
+ d="m 457.32492,573.21942 h 1.87651"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.93825239;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.93825239;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 457.32492,570.40467 h 2.81476"
+ id="path12882"
+ inkscape:connector-curvature="0" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path12884"
+ d="m 457.32492,584.47845 h 1.87651"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.93825239;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path12890"
+ d="m 457.32492,578.84894 h 1.87651"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.93825239;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.93825239;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 457.32492,581.66369 h 2.81476"
+ id="path12892"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8091"
+ d="m 457.32492,587.29321 h 2.81476"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.93825239;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_poly_distort-24.svg b/pixmaps/src/gwy_poly_distort-24.svg
new file mode 100644
index 0000000..2a8c9fc
--- /dev/null
+++ b/pixmaps/src/gwy_poly_distort-24.svg
@@ -0,0 +1,130 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ inkscape:export-ydpi="96"
+ inkscape:export-xdpi="96"
+ inkscape:export-filename="gwy_poly_distort-24.png"
+ sodipodi:docname="gwy_poly_distort-24.svg"
+ inkscape:version="0.92.1 r15371"
+ version="1.1"
+ id="svg2"
+ viewBox="0 0 22.5 22.499999"
+ height="24"
+ width="24">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ inkscape:snap-page="true"
+ inkscape:snap-grids="false"
+ inkscape:snap-intersection-paths="true"
+ inkscape:snap-smooth-nodes="true"
+ units="px"
+ inkscape:window-maximized="1"
+ inkscape:window-y="27"
+ inkscape:window-x="0"
+ inkscape:window-height="1016"
+ inkscape:window-width="1920"
+ showgrid="true"
+ inkscape:current-layer="layer1"
+ inkscape:document-units="px"
+ inkscape:cy="3.4372696"
+ inkscape:cx="-48.995519"
+ inkscape:zoom="3.8804467"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="Calque 2"
+ style="display:inline"
+ transform="translate(0,-1029.8622)" />
+ <g
+ inkscape:label="Calque 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ style="display:inline"
+ transform="translate(0,-1029.8622)">
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#7db846;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.9375;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect10106"
+ width="15.9375"
+ height="15.9375"
+ x="0.46875"
+ y="1030.3309" />
+ <g
+ id="g8808"
+ transform="translate(3.2811935,1.4006995)">
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#e8f0e0;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.93749998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m -1.8745963,1032.5438 5.8943054,1.0649 h 5.4251526 l 5.5194373,-1.0649 0.29305,6.1544 1.293469,6.7086 2.29312,5.2434 -5.519438,-1.0649 H 6.5500914 l -4.5450486,1.0649 -0.292796,-5.2434 -1.29346805,-6.7086 z"
+ id="path8708"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccccccccc" />
+ <path
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.9375;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 4.0197091,1033.6087 1.3241395,5.6219 1.293468,5.6438 -0.087225,4.7109"
+ id="path8710"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.9375;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 9.4448617,1033.6087 0.7931353,5.6219 1.293468,5.6438 1.793038,4.7109"
+ id="path8712"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.9375;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 0.41877875,1038.6981 4.92506985,0.5325 h 4.8941454 l 5.019355,-0.5325"
+ id="path8714"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.9375;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 1.7122468,1045.4068 4.9250699,-0.5324 h 4.8941463 l 5.019355,0.5324"
+ id="path8716"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc" />
+ </g>
+ <g
+ id="layer2-6"
+ inkscape:label="Calque 2"
+ style="display:inline"
+ transform="translate(-39.574754,1.3029)" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_polynom-24.svg b/pixmaps/src/gwy_polynom-24.svg
new file mode 100644
index 0000000..73be421
--- /dev/null
+++ b/pixmaps/src/gwy_polynom-24.svg
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ sodipodi:docname="gwy_polynom-24.svg"
+ inkscape:version="0.92.1 r15371"
+ version="1.1"
+ id="svg8237"
+ viewBox="0 0 24 24"
+ height="24"
+ width="24">
+ <sodipodi:namedview
+ inkscape:lockguides="true"
+ inkscape:window-maximized="1"
+ inkscape:window-y="27"
+ inkscape:window-x="0"
+ inkscape:window-height="1016"
+ inkscape:window-width="1920"
+ showgrid="false"
+ inkscape:current-layer="layer1"
+ inkscape:document-units="px"
+ inkscape:cy="27.208387"
+ inkscape:cx="-30.92511"
+ inkscape:zoom="3.8087814"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base" />
+ <defs
+ id="defs8239">
+ <filter
+ inkscape:collect="always"
+ style="color-interpolation-filters:sRGB"
+ id="filter8458"
+ x="-0.12856513"
+ width="1.2571303"
+ y="-0.11250482"
+ height="1.2250096">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.16275744"
+ id="feGaussianBlur8460" />
+ </filter>
+ </defs>
+ <metadata
+ id="metadata8242">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-287.14218,-445.53613)">
+ <g
+ id="g4873">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4816"
+ d="m 309.69736,446.03622 a 0.95817095,0.95763568 0 0 0 -0.94872,0.7537 c -0.8404,3.60655 -1.68173,8.6657 -3.3383,11.58399 a 0.95817095,0.95763568 0 0 0 -0.002,0 c -0.30908,0.54573 -0.75586,1.10226 -1.21819,1.43257 -0.45859,0.32764 -0.86063,0.44639 -1.35664,0.32168 -0.7784,-0.22656 -1.84149,-1.55881 -2.89294,-3.12884 -1.05514,-1.57554 -2.0981,-3.38587 -3.97451,-3.91432 a 0.95817095,0.95763568 0 0 0 -0.0187,-0.006 c -1.11086,-0.28742 -2.17838,0.0571 -2.96217,0.61717 -0.78379,0.560 [...]
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:nor [...]
+ <path
+ style="opacity:0.75;fill:#ffffff;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter8458)"
+ d="m 243.33968,605.23583 c 5.57893,-0.8151 11.50211,-2.74558 15.02129,-0.48276 -5.29889,-1.23284 -10.53031,0.12015 -14.71362,1.41074 -0.47884,-0.33105 -0.55321,-0.4436 -0.30767,-0.92798 z"
+ id="path8135"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc"
+ transform="matrix(0.38844941,-0.91797626,0.91020273,0.3827058,-357.24681,459.81503)" />
+ <path
+ transform="matrix(-0.38844941,0.91797626,-0.91020273,-0.3827058,955.60982,455.28343)"
+ sodipodi:nodetypes="cccc"
+ inkscape:connector-curvature="0"
+ id="path4868"
+ d="m 243.33968,605.23583 c 5.57893,-0.8151 6.34564,-1.15156 11.28527,-0.74459 -5.5372,0.30074 -6.8671,0.86416 -11.18356,1.6485 -0.47884,-0.33105 -0.34725,-0.41953 -0.10171,-0.90391 z"
+ style="opacity:0.75;fill:#ffffff;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter8458)" />
+ </g>
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_polynom_level-24.svg b/pixmaps/src/gwy_polynom_level-24.svg
new file mode 100644
index 0000000..adf4f2d
--- /dev/null
+++ b/pixmaps/src/gwy_polynom_level-24.svg
@@ -0,0 +1,129 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8237"
+ version="1.1"
+ inkscape:version="0.92+devel unknown"
+ sodipodi:docname="gwy_polynom_level-24.svg">
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="35.193865"
+ inkscape:cx="12.000006"
+ inkscape:cy="11.999998"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1028"
+ inkscape:window-x="0"
+ inkscape:window-y="33"
+ inkscape:window-maximized="1"
+ inkscape:document-rotation="0"
+ showguides="true"
+ inkscape:guide-bbox="true">
+ <inkscape:grid
+ empspacing="2"
+ spacingy="0.49999999"
+ spacingx="0.49999999"
+ units="px"
+ id="grid4296"
+ type="xygrid" />
+ </sodipodi:namedview>
+ <defs
+ id="defs8239" />
+ <metadata
+ id="metadata8242">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="matrix(1.066667,0,0,1.066667,-306.28499,-476.83854)">
+ <image
+ y="447.50473"
+ x="287.61084"
+ width="21.562504"
+ height="21.562504"
+ preserveAspectRatio="none"
+ xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABHNCSVQICAgIfAhkiAAACZhJREFU
+aIGNWluS4zquTDxkV3dXna3Mgu6m7nK7SyQwHwBISHafGEWwJMuylAkkHqSK/vN//+90KEgVpAL9
+OKAPhTwEcij4EMjBYBGQEFgYxATi2IMAgECEtbnHH3cHHHB3uPnaw2JvZnHe2vfT4nf93LrfekLu
+CernGU/MMSxuYlNh0yBTYEPAh4GFg4BsAkQJvjNAe2DuPe9/AbvAvyFi7Xovq9TO02gO9e9zE8oL
+B9rNpkOOPFaGC4OEQWxgZoA3gTcc0jDphRdgfgWe5/AG/ALevOAA1McI67WHE4DZH+oONocYw0VA
+6mAmuHjzAsGp3cD3/e5Sgr8Bn9es7xxX8MsD3nAS1MdMAoTOggBYl1xawA1gd0AY5N6kVF64umE9
+8CKpuI97u/cy2FZCu8sL+Pqsdv4BF4E15gJjgwDMza25kpxAknsKTfrfpNRIbGl5I4g329uTPYah
+8/wNlgNgBngCTIARYBM+aanBuDmJwj8MBmCAU/yOaT/gJS1dY+KK5y9A/4dN5/gNHg8Ic5IwgCw9
+YAAT3B02rGk99O4EgDitQYA5iBBeuIH6N4gEgpNfLBvHt2BC+z43tvEHNr4Bs+vwSm91rnL3Ld21
+4NtJwuH/jniBoJZAViiCdlajfc09vgBAbX4jxgCLLPAwAzFftLqKUMsUtEjkA/0KsGP2Knru8Cx+
+vnJ6cwCVGVLC7uH5deZC4IRbDPhjgYdv8Nf0dj23c2d3bz7mZjEq74RoGhyHE/an8khdw0kiz+RP
+goDbgM0Jt7mt/yILj1u/SxjlZuz9tbB1EtvyO3UCtDMtyABwfm+d8HauO9aP1G3CPQi4O6jl7QX3
+pucFKUVKHTmXft/plvZ9ew3ooLHPOSdOK/BlgO35IGATXpXlpYi823aQUYLuFbmOUbLoVd5TBh5k
+VvLxG7lGBJzXW52sHOdQdws3rRL4Hu/aEwGc2bOOkwhxG9QySd86OE/gVP3P7RpDeLS60/SIe3rD
+CbqECP9LQdkB2a27AWdzl212b/BWiiwWWcXDC5nBEjgRRdrOepKlPo5LYpfeJqJCu1xWilq5uQEg
+bPAJnJnBTOC0+p4r/N0DDkpsYUGQbyLECT4fba2eJfgK9KKg9YR6YIvQBr4Br7mA5HFaf4GXf58n
+UKJwz3rggFsSMYdTDrOth/JAHjsjrgVB07QAMQiMCtD7KKkwc5vYMLhmaXncJzq9mnZt9wJInoAr
+sSyZXHLpNTwbCV16pqvFXwl0oH1IO9cIcCNw21ZbXfOAlJFR6p5SJ1RELHhQGwjCCmIQCYhk5fFL
+RinwmiCVQTlYcq/NKy0TvRYz34XLHc5JgnLSVPKBwS4e2BHsywJxWyUW1ADzyuth+ehQ6SIZvpBh
+ZYjKq4T4TR3Iql6TF7JGwhzWADPVJ1qR7J59EhMw45ZKVAQ0wXMb8ZlVwCoQ5VilSNBxThYhunlg
+VeFOoPdVnGkyZcMwODGcPGuWRVx6kCLPuQch2m8ClEUDPGtrA/bSSbc0HwlWBXwwpH9WXnHCTGAi
+SGvQUkCR1t0xa1pJtjMPATbT7k7hCRjMaXekWdiqO1ViRZBIuTTLh/W3tZfFD1mgwyOxZiTCOJig
+RBDOnNai2HwTGO6Y5BjM8BkEjBCA11zPMt3GqGmsU1bv8MAB4qOB30RI0uqHQGqBKwFLniuvPIVx
+cBLgbf1VhH17YHqsP012nOY4yTFnwDYH2MPq5AR2glnNBH0psrKqEh9geWwPpJbBYfkCG0R0Aa9z
+egiewvhI6xcBpvLA7hHLA9Mdg8ILTA6C4xvATNuvjOkeRS7n6VUcV0lwQFkeYNFYJnljfXkz+BHg
+j0PwQwUfQngK4yEMpSJQZSX0W01uWX+k9YOAgYjxJ0mUZCKjOcg68Gt3q6xNPmV9SWs/NthYK937
+4xD8OgQ/hPGxJBQeECoCN/0DmAl+dPDgyP1OML+CLqvvQrvBwwEVeYJEErwALCDmZnG9gdcF/pcK
+fmjI5ymEg3npn4l69lzyKfBnA48GfrrhfNOWr+aypWN3h7I+Uj6yi1aBbavUcazQR4D/OgQ/lfFD
+BU8hPPjqAWoesApeC92f5GDa4B0MBzDdMJ0wUjqrC+4N1ZoARS3R0j6VB0QW2D22dD4T/K9OgGlJ
+SHoG+ov1hTwlVvOq8MBgwrD4vVOz/mXz1UfBPFuJBE7CWyoJXB+S7wsUv5LAZycgnAEcEmJCeOAi
+nxa8zfqe6XJ6AC/5CRFGGn3jT+CO1QSaORQNfFhfllS0eeHjEHw9bgRaAD9W/t8B7Nm8GbDAn2Q5
+HzUYCAbGdMfJBLH0YDWRN8NXD7VImEG7dFgT/PMqoeMRsvnsHtDwwFMZT6aVQjkDuAfvdEATPFGt
+p3J6xjD4av0X0axF4Zwbm8WbnOlQUon2WATyfKd9xdch+Kr9IsBZA0o+mf9v1dfgmBb654m16maw
+JZ2TwnMF/pIpvZPYL13cHDYNuvSvIRl96trLU/Hz0cFr8wDjI4tYZSBpBQxd++QQB9BS5sygldb4
+ccv75cEVsL5BuxlsxtDQf+q9PPAs6Sj+SavfJRQZiPHk8MDWP23rZ9d5UrzhqV5/umN6WL4avzUz
+fEk43fLxLs2GxThneKDko8+m/2eCf+zU2YP45ypgfOl/+ma+Ky7nmqG5YTDjNF8eY+w5e2WtC/C0
+vBX4abAx4dMiBu6Bq0/FjyUdvQCvUS3EI9eC1ry6BR75G/CZLnvA083sVpXWmuWnwYfB5oSNiXlO
++JwhoZJM98BXs/rXIfhsnvipjJ8q0Fyl6OCreQMQ74HdoQAsq6wyQSyA800y3uYL6z1xBm1Z3YZh
+nknIDMqHvEjn10Pwz0Pxz2Prf2Wfo8BLLmy9Wr/A9P3hnlU2W+1be2OIN6MzJzuWqTKCNYEPwzwn
+7BzAnMCc0Mo28jxWBnoHvDLPLxWIxHhH4A7cbL+aWprv/ZnvgDePFtua1b0CdkzYGWNLakK1gCeR
+z6b7S+XV2KvqBXwRuFvfLF+EVzx0zaMVujVLy2pdAZtjpt5jjCSwh0bbEP8foatovabNz2Nb/m/W
+v8unW58oi9y6Zi06Y2S2Os3xXQRGHxPzO4andDBmeaAkpPh8yEU+ve85dFv/TqAHb4HvwPc1O9NE
+++zRYpvjNMO3OcaSTchlngV+ROpcYwBjQHv78HXc24UI2g+9Wr8I3AH2f03ontgEA/rscwNP8NPx
+Jy0/L+DHGhgDPgd85DgHtNqGn3fNNxLvwNe4p84O/F1w92WVYY5zOv5Mx+9p+D3fgx9/RrP8vBD4
+L+GEx5H65TK+AAAAAElFTkSuQmCC
+"
+ id="image4312" />
+ <rect
+ y="447.50473"
+ x="287.61084"
+ height="21.562519"
+ width="21.562502"
+ id="rect4298"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ </g>
+</svg>
diff --git a/pixmaps/gwy_presentation-24.xcf b/pixmaps/src/gwy_presentation-24.xcf
similarity index 100%
rename from pixmaps/gwy_presentation-24.xcf
rename to pixmaps/src/gwy_presentation-24.xcf
diff --git a/devel-docs/libgwydgets/html/gwy_presentation_attach-24.png b/pixmaps/src/gwy_presentation_attach-24.png
similarity index 100%
rename from devel-docs/libgwydgets/html/gwy_presentation_attach-24.png
rename to pixmaps/src/gwy_presentation_attach-24.png
diff --git a/devel-docs/libgwydgets/html/gwy_presentation_edge_canny-24.png b/pixmaps/src/gwy_presentation_edge_canny-24.png
similarity index 100%
rename from devel-docs/libgwydgets/html/gwy_presentation_edge_canny-24.png
rename to pixmaps/src/gwy_presentation_edge_canny-24.png
diff --git a/devel-docs/libgwydgets/html/gwy_presentation_edge_harris_corner-24.png b/pixmaps/src/gwy_presentation_edge_harris_corner-24.png
similarity index 100%
rename from devel-docs/libgwydgets/html/gwy_presentation_edge_harris_corner-24.png
rename to pixmaps/src/gwy_presentation_edge_harris_corner-24.png
diff --git a/devel-docs/libgwydgets/html/gwy_presentation_edge_hough-24.png b/pixmaps/src/gwy_presentation_edge_hough-24.png
similarity index 100%
rename from devel-docs/libgwydgets/html/gwy_presentation_edge_hough-24.png
rename to pixmaps/src/gwy_presentation_edge_hough-24.png
diff --git a/devel-docs/libgwydgets/html/gwy_presentation_edge_inclination-24.png b/pixmaps/src/gwy_presentation_edge_inclination-24.png
similarity index 100%
rename from devel-docs/libgwydgets/html/gwy_presentation_edge_inclination-24.png
rename to pixmaps/src/gwy_presentation_edge_inclination-24.png
diff --git a/devel-docs/libgwydgets/html/gwy_presentation_edge_laplace_gauss-24.png b/pixmaps/src/gwy_presentation_edge_laplace_gauss-24.png
similarity index 100%
rename from devel-docs/libgwydgets/html/gwy_presentation_edge_laplace_gauss-24.png
rename to pixmaps/src/gwy_presentation_edge_laplace_gauss-24.png
diff --git a/devel-docs/libgwydgets/html/gwy_presentation_edge_local_non_linearity-24.png b/pixmaps/src/gwy_presentation_edge_local_non_linearity-24.png
similarity index 100%
rename from devel-docs/libgwydgets/html/gwy_presentation_edge_local_non_linearity-24.png
rename to pixmaps/src/gwy_presentation_edge_local_non_linearity-24.png
diff --git a/devel-docs/libgwydgets/html/gwy_presentation_edge_prewitt-24.png b/pixmaps/src/gwy_presentation_edge_prewitt-24.png
similarity index 100%
rename from devel-docs/libgwydgets/html/gwy_presentation_edge_prewitt-24.png
rename to pixmaps/src/gwy_presentation_edge_prewitt-24.png
diff --git a/devel-docs/libgwydgets/html/gwy_presentation_edge_rms-24.png b/pixmaps/src/gwy_presentation_edge_rms-24.png
similarity index 100%
rename from devel-docs/libgwydgets/html/gwy_presentation_edge_rms-24.png
rename to pixmaps/src/gwy_presentation_edge_rms-24.png
diff --git a/devel-docs/libgwydgets/html/gwy_presentation_edge_rms_edge-24.png b/pixmaps/src/gwy_presentation_edge_rms_edge-24.png
similarity index 100%
rename from devel-docs/libgwydgets/html/gwy_presentation_edge_rms_edge-24.png
rename to pixmaps/src/gwy_presentation_edge_rms_edge-24.png
diff --git a/devel-docs/libgwydgets/html/gwy_presentation_edge_sobel-24.png b/pixmaps/src/gwy_presentation_edge_sobel-24.png
similarity index 100%
rename from devel-docs/libgwydgets/html/gwy_presentation_edge_sobel-24.png
rename to pixmaps/src/gwy_presentation_edge_sobel-24.png
diff --git a/devel-docs/libgwydgets/html/gwy_presentation_edge_step-24.png b/pixmaps/src/gwy_presentation_edge_step-24.png
similarity index 100%
rename from devel-docs/libgwydgets/html/gwy_presentation_edge_step-24.png
rename to pixmaps/src/gwy_presentation_edge_step-24.png
diff --git a/devel-docs/libgwydgets/html/gwy_presentation_edge_zero_crossing-24.png b/pixmaps/src/gwy_presentation_edge_zero_crossing-24.png
similarity index 100%
rename from devel-docs/libgwydgets/html/gwy_presentation_edge_zero_crossing-24.png
rename to pixmaps/src/gwy_presentation_edge_zero_crossing-24.png
diff --git a/devel-docs/libgwydgets/html/gwy_presentation_extract-24.png b/pixmaps/src/gwy_presentation_extract-24.png
similarity index 100%
rename from devel-docs/libgwydgets/html/gwy_presentation_extract-24.png
rename to pixmaps/src/gwy_presentation_extract-24.png
diff --git a/devel-docs/libgwydgets/html/gwy_presentation_local_contrast-24.png b/pixmaps/src/gwy_presentation_local_contrast-24.png
similarity index 100%
rename from devel-docs/libgwydgets/html/gwy_presentation_local_contrast-24.png
rename to pixmaps/src/gwy_presentation_local_contrast-24.png
diff --git a/devel-docs/libgwydgets/html/gwy_presentation_log-24.png b/pixmaps/src/gwy_presentation_log-24.png
similarity index 100%
rename from devel-docs/libgwydgets/html/gwy_presentation_log-24.png
rename to pixmaps/src/gwy_presentation_log-24.png
diff --git a/pixmaps/gwy_presentation_ops-24.xcf b/pixmaps/src/gwy_presentation_ops-24.xcf
similarity index 100%
rename from pixmaps/gwy_presentation_ops-24.xcf
rename to pixmaps/src/gwy_presentation_ops-24.xcf
diff --git a/devel-docs/libgwydgets/html/gwy_presentation_rank-24.png b/pixmaps/src/gwy_presentation_rank-24.png
similarity index 100%
rename from devel-docs/libgwydgets/html/gwy_presentation_rank-24.png
rename to pixmaps/src/gwy_presentation_rank-24.png
diff --git a/devel-docs/libgwydgets/html/gwy_presentation_remove-24.png b/pixmaps/src/gwy_presentation_remove-24.png
similarity index 100%
rename from devel-docs/libgwydgets/html/gwy_presentation_remove-24.png
rename to pixmaps/src/gwy_presentation_remove-24.png
diff --git a/devel-docs/libgwydgets/html/gwy_presentation_sem-24.png b/pixmaps/src/gwy_presentation_sem-24.png
similarity index 100%
rename from devel-docs/libgwydgets/html/gwy_presentation_sem-24.png
rename to pixmaps/src/gwy_presentation_sem-24.png
diff --git a/devel-docs/libgwydgets/html/gwy_presentation_shading-24.png b/pixmaps/src/gwy_presentation_shading-24.png
similarity index 100%
rename from devel-docs/libgwydgets/html/gwy_presentation_shading-24.png
rename to pixmaps/src/gwy_presentation_shading-24.png
diff --git a/pixmaps/src/gwy_previous-24.svg b/pixmaps/src/gwy_previous-24.svg
new file mode 100644
index 0000000..ac5e302
--- /dev/null
+++ b/pixmaps/src/gwy_previous-24.svg
@@ -0,0 +1,114 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8093"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_prev-24.svg"
+ inkscape:export-filename="gwy_flip_horizontally-24.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs8095">
+ <filter
+ inkscape:collect="always"
+ style="color-interpolation-filters:sRGB"
+ id="filter8458"
+ x="-0.12856513"
+ width="1.2571303"
+ y="-0.11250482"
+ height="1.2250096">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.16275744"
+ id="feGaussianBlur8460" />
+ </filter>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="18.852899"
+ inkscape:cx="14.249947"
+ inkscape:cy="13.431599"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-global="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8098">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-244.77811,-595.10722)">
+ <path
+ style="fill:#7db846;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
+ d="m 267.27811,600.10722 -9.5,7 9.5,7 z"
+ id="path4758"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc" />
+ <path
+ sodipodi:nodetypes="cccc"
+ inkscape:connector-curvature="0"
+ id="path4760"
+ d="m 256.27811,600.10722 -9.5,7 9.5,7 z"
+ style="fill:#7db846;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="ccc"
+ inkscape:connector-curvature="0"
+ id="path4764"
+ d="m 258.2781,602.10722 6.89043,4.97067 c -5.19189,-0.85522 -7.0341,-0.30891 -6.89043,-4.97067 z"
+ style="opacity:0.75;fill:#ffffff;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;filter:url(#filter8458)"
+ transform="matrix(-1,0,0,1,513.55622,0)" />
+ <path
+ transform="matrix(-1,0,0,1,524.55622,0)"
+ style="opacity:0.75;fill:#ffffff;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;filter:url(#filter8458)"
+ d="m 258.2781,602.10722 6.89043,4.97067 c -5.14769,-1.69485 -7.0341,-0.30891 -6.89043,-4.97067 z"
+ id="path8437"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccc" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_profile-24.svg b/pixmaps/src/gwy_profile-24.svg
new file mode 100644
index 0000000..78ee316
--- /dev/null
+++ b/pixmaps/src/gwy_profile-24.svg
@@ -0,0 +1,486 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8236"
+ version="1.1"
+ inkscape:version="0.92+devel unknown"
+ sodipodi:docname="gwy_profile-24.svg"
+ inkscape:export-filename="gwy_profile-24.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96">
+ <defs
+ id="defs8238">
+ <linearGradient
+ gradientTransform="translate(260.25538,1122.4537)"
+ xlink:href="#linearGradient4140"
+ id="linearGradient4171"
+ gradientUnits="userSpaceOnUse"
+ x1="207.50029"
+ y1="247.92804"
+ x2="272.91217"
+ y2="361.22473" />
+ <linearGradient
+ id="linearGradient4140">
+ <stop
+ style="stop-color:#d7e3f4;stop-opacity:1;"
+ offset="0"
+ id="stop4142" />
+ <stop
+ style="stop-color:#f1f5fb;stop-opacity:1"
+ offset="1"
+ id="stop4144" />
+ </linearGradient>
+ <linearGradient
+ y2="361.22473"
+ x2="272.91217"
+ y1="247.92804"
+ x1="207.50029"
+ gradientTransform="translate(217.48376,1121.6073)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient8503"
+ xlink:href="#linearGradient4140"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="361.22473"
+ x2="272.91217"
+ y1="247.92804"
+ x1="207.50029"
+ gradientTransform="translate(233.05017,1130.098)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient11272"
+ xlink:href="#linearGradient4140"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4140"
+ id="linearGradient9134"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(192.80845,1127.6291)"
+ x1="207.50029"
+ y1="247.92804"
+ x2="272.91217"
+ y2="361.22473" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="40.291226"
+ inkscape:cx="12.000015"
+ inkscape:cy="11.292801"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1149"
+ inkscape:window-x="0"
+ inkscape:window-y="32"
+ inkscape:window-maximized="1"
+ showguides="false"
+ inkscape:object-nodes="true"
+ inkscape:snap-page="true"
+ inkscape:document-rotation="0">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true"
+ units="px" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8241">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-426.47382,-666.73134)">
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4385"
+ y="1012.5226"
+ x="261.62512">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4387"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4487"
+ y="1108.3988"
+ x="285.7551">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4489"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4536"
+ y="1047.8113"
+ x="220.32239">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4538"
+ font-size="4.0000" />
+ </text>
+ <path
+ inkscape:connector-curvature="0"
+ d=""
+ cx="242.94168"
+ cy="308.38486"
+ r="70.205605"
+ id="path4138-6"
+ style="opacity:1;fill:url(#linearGradient4171);fill-opacity:1;stroke:#000000;stroke-width:5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g5318"
+ transform="translate(181.14178,847.13776)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g6386"
+ transform="translate(728.36302,318.93978)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g7162"
+ transform="translate(33.72085,162.17789)" />
+ <text
+ xml:space="preserve"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:0px;word-spacing:0px;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;color-interpolat [...]
+ x="581.88934"
+ y="1236.4619"
+ id="text8015"><tspan
+ id="tspan8017"
+ x="581.88934"
+ y="1236.4619" /></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+ x="-991.21216"
+ y="-90.602974"
+ id="text9295"><tspan
+ id="tspan9297"
+ x="-991.21216"
+ y="-90.602974" /></text>
+ <text
+ id="text7408-2"
+ class="fil7 fnt4"
+ y="191.27887"
+ x="-873.99939"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ id="text7422"
+ class="fil7 fnt4"
+ y="218.74548"
+ x="-857.62646"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4385-9"
+ y="1011.6762"
+ x="218.8535">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4387-0"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4487-9"
+ y="1107.5524"
+ x="242.98347">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4489-1"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4536-7"
+ y="1046.9648"
+ x="177.55077">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4538-7"
+ font-size="4.0000" />
+ </text>
+ <path
+ inkscape:connector-curvature="0"
+ d=""
+ cx="242.94168"
+ cy="308.38486"
+ r="70.205605"
+ id="path4138-6-1"
+ style="opacity:1;fill:url(#linearGradient8503);fill-opacity:1;stroke:#000000;stroke-width:5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g5318-7"
+ transform="translate(138.37018,846.29135)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g6386-6"
+ transform="translate(685.59143,318.09337)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g7162-7"
+ transform="translate(-9.05075,161.33148)" />
+ <text
+ xml:space="preserve"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:0px;word-spacing:0px;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;color-interpolat [...]
+ x="539.11774"
+ y="1235.6155"
+ id="text8015-3"><tspan
+ id="tspan8017-6"
+ x="539.11774"
+ y="1235.6155" /></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+ x="-1033.9838"
+ y="-91.449348"
+ id="text9295-5"><tspan
+ id="tspan9297-6"
+ x="-1033.9838"
+ y="-91.449348" /></text>
+ <text
+ id="text7408-2-3"
+ class="fil7 fnt4"
+ y="190.43246"
+ x="-916.771"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ id="text7422-9"
+ class="fil7 fnt4"
+ y="217.89908"
+ x="-900.39807"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4385-7"
+ y="1020.1669"
+ x="234.41991">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4387-2"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4487-3"
+ y="1116.0431"
+ x="258.5499">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4489-7"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4536-2"
+ y="1055.4556"
+ x="193.11717">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4538-5"
+ font-size="4.0000" />
+ </text>
+ <path
+ inkscape:connector-curvature="0"
+ d=""
+ cx="242.94168"
+ cy="308.38486"
+ r="70.205605"
+ id="path4138-6-3"
+ style="opacity:1;fill:url(#linearGradient11272);fill-opacity:1;stroke:#000000;stroke-width:5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g5318-3"
+ transform="translate(153.93658,854.78207)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g6386-64"
+ transform="translate(701.15782,326.58409)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g7162-03"
+ transform="translate(6.51565,169.8222)" />
+ <text
+ xml:space="preserve"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:0px;word-spacing:0px;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;color-interpolat [...]
+ x="554.68414"
+ y="1244.1062"
+ id="text8015-5"><tspan
+ id="tspan8017-85"
+ x="554.68414"
+ y="1244.1062" /></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+ x="-1018.4174"
+ y="-82.958626"
+ id="text9295-0"><tspan
+ id="tspan9297-9"
+ x="-1018.4174"
+ y="-82.958626" /></text>
+ <text
+ id="text7408-2-9"
+ class="fil7 fnt4"
+ y="198.92319"
+ x="-901.20459"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ id="text7422-8"
+ class="fil7 fnt4"
+ y="226.3898"
+ x="-884.83167"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4385-2"
+ y="1017.698"
+ x="194.17818">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4387-6"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4487-5"
+ y="1113.5741"
+ x="218.30815">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4489-8"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4536-7-2"
+ y="1052.9866"
+ x="152.87544">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4538-9"
+ font-size="4.0000" />
+ </text>
+ <path
+ inkscape:connector-curvature="0"
+ d=""
+ cx="242.94168"
+ cy="308.38486"
+ r="70.205605"
+ id="path4138-6-6"
+ style="opacity:1;fill:url(#linearGradient9134);fill-opacity:1;stroke:#000000;stroke-width:5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g5318-4"
+ transform="translate(113.69488,852.31312)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g6386-8"
+ transform="translate(660.91612,324.11514)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g7162-7-4"
+ transform="translate(-33.72606,167.35324)" />
+ <text
+ xml:space="preserve"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:0px;word-spacing:0px;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;color-interpolat [...]
+ x="514.44244"
+ y="1241.6372"
+ id="text8015-0"><tspan
+ id="tspan8017-8"
+ x="514.44244"
+ y="1241.6372" /></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+ x="-1058.6591"
+ y="-85.427559"
+ id="text9295-6-9"><tspan
+ id="tspan9297-2"
+ x="-1058.6591"
+ y="-85.427559" /></text>
+ <text
+ id="text7408-2-4"
+ class="fil7 fnt4"
+ y="196.45425"
+ x="-941.44629"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ id="text7422-7"
+ class="fil7 fnt4"
+ y="223.92087"
+ x="-925.07336"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <path
+ style="opacity:1;fill:#7db846;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 427.34882,683.85634 c 0,0 3.375,-1.125 3.875,-1.625 0.5,-0.5 2.5,-3.375 2.5,-3.375 l 0.25,-2.375 v -4.25 l 4,-3 4,1 0.5,4.5 0.875,3.5 5.25,1.875"
+ id="path8210-3"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cscccccccc" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path9302"
+ d="m 426.47384,687.73133 h 6"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.99999332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.99999332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 429.47383,684.73132 v 6"
+ id="path9308"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.99999332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 444.47383,684.73135 h 6"
+ id="path9232"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path9234"
+ d="m 447.47382,681.73134 v 6"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.99999332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 433.97382,686.98134 4.5,-0.75 4.5,-0.75"
+ id="path9236"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccc" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_pygwy-24.svg b/pixmaps/src/gwy_pygwy-24.svg
new file mode 100644
index 0000000..92faffc
--- /dev/null
+++ b/pixmaps/src/gwy_pygwy-24.svg
@@ -0,0 +1,276 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92+devel unknown"
+ sodipodi:docname="gwy_pygwy-24.svg"
+ inkscape:export-filename="gwy_tilt-24.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96">
+ <defs
+ id="defs4">
+ <linearGradient
+ id="linearGradient8428"
+ osb:paint="solid">
+ <stop
+ style="stop-color:#4696db;stop-opacity:1;"
+ offset="0"
+ id="stop8430" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient2795">
+ <stop
+ id="stop2797"
+ offset="0"
+ style="stop-color:#b8b8b8;stop-opacity:0.49803922;" />
+ <stop
+ id="stop2799"
+ offset="1"
+ style="stop-color:#7f7f7f;stop-opacity:0;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient2787">
+ <stop
+ id="stop2789"
+ offset="0"
+ style="stop-color:#7f7f7f;stop-opacity:0.5;" />
+ <stop
+ id="stop2791"
+ offset="1"
+ style="stop-color:#7f7f7f;stop-opacity:0;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3676">
+ <stop
+ id="stop3678"
+ offset="0"
+ style="stop-color:#b2b2b2;stop-opacity:0.5;" />
+ <stop
+ id="stop3680"
+ offset="1"
+ style="stop-color:#b3b3b3;stop-opacity:0;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3236">
+ <stop
+ id="stop3244"
+ offset="0"
+ style="stop-color:#f4f4f4;stop-opacity:1" />
+ <stop
+ id="stop3240"
+ offset="1"
+ style="stop-color:white;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4671">
+ <stop
+ id="stop4673"
+ offset="0"
+ style="stop-color:#ffd43b;stop-opacity:1;" />
+ <stop
+ id="stop4675"
+ offset="1"
+ style="stop-color:#ffe873;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4689">
+ <stop
+ id="stop4691"
+ offset="0"
+ style="stop-color:#5a9fd4;stop-opacity:1;" />
+ <stop
+ id="stop4693"
+ offset="1"
+ style="stop-color:#306998;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ gradientTransform="translate(100.2702,99.61116)"
+ gradientUnits="userSpaceOnUse"
+ xlink:href="#linearGradient4671"
+ id="linearGradient2987"
+ y2="144.75717"
+ x2="-65.308502"
+ y1="144.75717"
+ x1="224.23996" />
+ <linearGradient
+ gradientTransform="translate(100.2702,99.61116)"
+ gradientUnits="userSpaceOnUse"
+ xlink:href="#linearGradient4689"
+ id="linearGradient2990"
+ y2="76.313133"
+ x2="26.670298"
+ y1="77.475983"
+ x1="172.94208" />
+ <linearGradient
+ y2="144.75717"
+ x2="-65.308502"
+ y1="144.75717"
+ x1="224.23996"
+ gradientTransform="matrix(0.562541,0,0,0.567972,-11.5974,-7.60954)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient2255"
+ xlink:href="#linearGradient4671"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="76.313133"
+ x2="26.670298"
+ y1="76.176224"
+ x1="172.94208"
+ gradientTransform="matrix(0.562541,0,0,0.567972,-11.5974,-7.60954)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient2258"
+ xlink:href="#linearGradient4689"
+ inkscape:collect="always" />
+ <radialGradient
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.177966,0,108.7434)"
+ r="29.036913"
+ fy="132.28575"
+ fx="61.518883"
+ cy="132.28575"
+ cx="61.518883"
+ id="radialGradient2801"
+ xlink:href="#linearGradient2795"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="137.27299"
+ x2="112.03144"
+ y1="192.35176"
+ x1="150.96111"
+ gradientTransform="matrix(0.57878139,0,0,0.567972,110.85845,458.83183)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient1475"
+ xlink:href="#linearGradient4671"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="114.39767"
+ x2="135.66525"
+ y1="20.603781"
+ x1="26.648937"
+ gradientTransform="matrix(0.57878139,0,0,0.567972,110.85845,458.83183)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient1478"
+ xlink:href="#linearGradient4689"
+ inkscape:collect="always" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32.891769"
+ inkscape:cx="10.996263"
+ inkscape:cy="6.2488068"
+ inkscape:document-units="px"
+ inkscape:current-layer="g8625"
+ showgrid="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:window-width="1773"
+ inkscape:window-height="1023"
+ inkscape:window-x="137"
+ inkscape:window-y="33"
+ inkscape:window-maximized="0"
+ inkscape:snap-global="true"
+ showguides="true"
+ units="px"
+ inkscape:snap-object-midpoints="true"
+ inkscape:object-paths="false"
+ inkscape:snap-grids="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:document-rotation="0">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="0.5"
+ spacingy="0.5"
+ enabled="true"
+ visible="true"
+ units="px"
+ empspacing="2" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-360.04032,-520.36218)">
+ <g
+ id="g8618"
+ transform="matrix(0.97194034,0,0,1,10.715714,0.03393)"
+ style="stroke-width:1.01433218">
+ <g
+ id="g8625"
+ transform="translate(-0.58662158)">
+ <g
+ id="g8814"
+ transform="matrix(0.17094832,0,0,0.17482069,303.29323,425.48409)"
+ style="stroke-width:5.86747646;stroke:none" />
+ <g
+ transform="matrix(1.0288697,0,0,1,117.35601,51.336807)"
+ id="layer1-9"
+ inkscape:label="Layer 1" />
+ <g
+ id="g4484"
+ transform="matrix(0.16306354,0,0,0.16306354,342.42569,443.9631)">
+ <path
+ id="path1948"
+ d="m 182.78664,470.53512 c -4.71599,0.0213 -9.21964,0.41222 -13.1824,1.09375 -11.67377,2.00451 -13.79328,6.20011 -13.79328,13.9375 v 10.21875 h 27.58657 v 3.40625 h -27.58657 -10.353 c -8.01743,0 -15.03771,4.68372 -17.23357,13.59375 -2.53289,10.21297 -2.64524,16.58603 0,27.25 1.96095,7.93786 6.64397,13.59375 14.66139,13.59375 h 9.4849 v -12.25 c 0,-8.8499 7.8782,-16.65625 17.23356,-16.65625 h 27.55442 c 7.67017,0 13.79329,-6.13816 13.79328,-13.625 v -25.53125 c 0 [...]
+ style="fill:url(#linearGradient1478);fill-opacity:1;stroke-width:1.02886975"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path1950"
+ d="m 214.39223,499.19137 v 11.90625 c 0,9.23076 -8.05183,17 -17.23357,17 h -27.55442 c -7.54761,0 -13.79328,6.27849 -13.79328,13.625 v 25.53125 c 0,7.26634 6.501,11.54032 13.79328,13.625 8.73236,2.49561 17.10623,2.94663 27.55442,0 6.94503,-1.95439 13.79329,-5.88761 13.79328,-13.625 v -10.21875 h -27.55441 v -3.40625 h 27.55441 13.79329 c 8.01743,0 11.00505,-5.4354 13.79328,-13.59375 2.88014,-8.39888 2.75759,-16.47577 0,-27.25 -1.98138,-7.75744 -5.76566,-13.59375 [...]
+ style="fill:url(#linearGradient1475);fill-opacity:1;stroke-width:1.02886975"
+ inkscape:connector-curvature="0" />
+ </g>
+ <path
+ style="color:#000000;overflow:visible;vector-effect:none;fill:none;stroke:#000000;stroke-width:1.01433218;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:fill markers stroke"
+ d="m 362.56831,539.82825 2.05774,2 -2.05774,2"
+ id="path4617"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4619"
+ d="m 366.68379,539.82825 2.05774,2 -2.05774,2"
+ style="color:#000000;overflow:visible;vector-effect:none;fill:none;stroke:#000000;stroke-width:1.01433218;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:fill markers stroke" />
+ <path
+ style="color:#000000;overflow:visible;vector-effect:none;fill:none;stroke:#000000;stroke-width:1.01433218;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:fill markers stroke"
+ d="m 370.79927,539.82825 2.05774,2 -2.05774,2"
+ id="path4621"
+ inkscape:connector-curvature="0" />
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_remove_under_mask-24.svg b/pixmaps/src/gwy_remove_under_mask-24.svg
new file mode 100644
index 0000000..8b7036e
--- /dev/null
+++ b/pixmaps/src/gwy_remove_under_mask-24.svg
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg9100"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_remove_under_mask-24.svg">
+ <defs
+ id="defs9102" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="23.653685"
+ inkscape:cx="-23.829314"
+ inkscape:cy="30.153844"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata9105">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-442.76529,-683.29364)">
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#d0e2f2;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect11370-6"
+ width="23.000002"
+ height="23.000002"
+ x="443.26529"
+ y="683.79364" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#daa39c;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:3.00000018, 3.00000017999999979;stroke-dashoffset:1.50000012;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate;font-variant-east_asian:normal;vector-effect:none"
+ d="M 2.5 2.5 L 2.5 13.5 L 10.5 13.5 L 10.5 21.5 L 21.5 21.5 L 21.5 10.5 L 13.5 10.5 L 13.5 2.5 L 2.5 2.5 z "
+ transform="translate(442.76529,683.29364)"
+ id="rect11972" />
+ <g
+ id="g8437"
+ transform="matrix(1.5,0,0,1.5,-104.3997,-90.510326)"
+ style="stroke:#db2424;stroke-opacity:1">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#db2424;stroke-width:1.50000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 373.44052,524.5011 4.02276,4.02277"
+ id="path8433"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8435"
+ d="m 373.44052,528.52387 4.02276,-4.02277"
+ style="fill:none;fill-rule:evenodd;stroke:#db2424;stroke-width:1.50000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+ <g
+ style="stroke:#db2424;stroke-opacity:1"
+ transform="matrix(1.5,0,0,1.5,-112.3997,-98.510326)"
+ id="g8083">
+ <path
+ inkscape:connector-curvature="0"
+ id="path8085"
+ d="m 373.44052,524.5011 4.02276,4.02277"
+ style="fill:none;fill-rule:evenodd;stroke:#db2424;stroke-width:1.50000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#db2424;stroke-width:1.50000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 373.44052,528.52387 4.02276,-4.02277"
+ id="path8087"
+ inkscape:connector-curvature="0" />
+ </g>
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_rotate-24.svg b/pixmaps/src/gwy_rotate-24.svg
new file mode 100644
index 0000000..1e6f998
--- /dev/null
+++ b/pixmaps/src/gwy_rotate-24.svg
@@ -0,0 +1,130 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ id="svg2160"
+ sodipodi:version="0.32"
+ inkscape:version="0.92+devel unknown"
+ sodipodi:docname="gwy_rotate-24.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ version="1.1"
+ inkscape:export-filename="gwy_rotate-24.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs2162">
+ <filter
+ height="1.2250096"
+ y="-0.11250482"
+ width="1.2571303"
+ x="-0.12856513"
+ id="filter8458"
+ style="color-interpolation-filters:sRGB"
+ inkscape:collect="always">
+ <feGaussianBlur
+ id="feGaussianBlur8460"
+ stdDeviation="0.16275744"
+ inkscape:collect="always" />
+ </filter>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="37.935234"
+ inkscape:cx="11.803119"
+ inkscape:cy="11.822799"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ showguides="true"
+ inkscape:guide-bbox="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1149"
+ inkscape:window-x="0"
+ inkscape:window-y="32"
+ inkscape:window-maximized="1"
+ inkscape:snap-global="true"
+ inkscape:document-rotation="0"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:snap-midpoints="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="0.5"
+ spacingy="0.5"
+ enabled="true"
+ visible="true"
+ units="px"
+ empspacing="2" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata2165">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ transform="translate(0,-8)">
+ <path
+ style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#db2424;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.20000005;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none"
+ id="path4517"
+ sodipodi:type="arc"
+ sodipodi:cx="0.50000024"
+ sodipodi:cy="31.5"
+ sodipodi:rx="10.07766"
+ sodipodi:ry="10.07766"
+ sodipodi:start="5.0304664"
+ sodipodi:end="6.0593202"
+ sodipodi:open="true"
+ sodipodi:arc-type="arc"
+ d="M 3.6516976,21.927851 A 10.07766,10.07766 0 0 1 10.326189,29.26276" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
+ d="m 23.5,26.5 -23,5 7,-23"
+ id="path4275"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccc" />
+ <path
+ style="opacity:1;vector-effect:none;fill:#7db846;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.99998635;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 15.363357,12.029744 -6.9982875,1.009778 1.0097777,6.998288 1.9453818,-2.603101 c 2.769224,2.130373 4.851825,5.027709 5.980112,8.336545 l 3.313344,-1.130057 c -1.355507,-3.975188 -3.862807,-7.455614 -7.19571,-10.008352 z"
+ id="path4293"
+ inkscape:connector-curvature="0"
+ inkscape:transform-center-x="-13.989377"
+ inkscape:transform-center-y="-12.599501" />
+ <path
+ style="opacity:0.75;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.99207175px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter8458)"
+ d="m 8.957468,13.514859 0.7924712,5.104447 0.1195871,-4.145772 3.3999177,-0.678979 0.885703,-1.002243 z"
+ id="path4341"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccc" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_rotate_180-24.svg b/pixmaps/src/gwy_rotate_180-24.svg
new file mode 100644
index 0000000..b974038
--- /dev/null
+++ b/pixmaps/src/gwy_rotate_180-24.svg
@@ -0,0 +1,151 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ id="svg2160"
+ sodipodi:version="0.32"
+ inkscape:version="0.92+devel unknown"
+ sodipodi:docname="gwy_rotate_180-24.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ version="1.1"
+ inkscape:export-filename="gwy_rotate-24.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs2162">
+ <filter
+ height="1.2250096"
+ y="-0.11250482"
+ width="1.2571303"
+ x="-0.12856513"
+ id="filter8458"
+ style="color-interpolation-filters:sRGB"
+ inkscape:collect="always">
+ <feGaussianBlur
+ id="feGaussianBlur8460"
+ stdDeviation="0.16275744"
+ inkscape:collect="always" />
+ </filter>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="34.840211"
+ inkscape:cx="11.685488"
+ inkscape:cy="12.618414"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ showguides="true"
+ inkscape:guide-bbox="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1149"
+ inkscape:window-x="0"
+ inkscape:window-y="32"
+ inkscape:window-maximized="1"
+ inkscape:snap-global="false"
+ inkscape:document-rotation="0">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata2165">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ transform="translate(0,-8)">
+ <path
+ inkscape:connector-curvature="0"
+ id="path5078-9-4"
+ d="m 22.322784,19.5872 c 0.241477,6.354861 -4.73023,9.269954 -4.73023,9.269954 l 1.078134,1.616674 -6.985412,0.102427 2.462267,-6.22188 1.131449,1.619935 c 0,0 3.703396,-1.584955 3.710719,-5.828871 0.0073,-4.243915 -4.330941,-6.625638 -4.330941,-6.625638 l 2.002139,-2.841489 c 0,0 5.420317,2.551927 5.661875,8.908888 z"
+ style="fill:#7db846;fill-opacity:1;stroke:none;stroke-width:0.99998635;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ sodipodi:nodetypes="cccccczccz" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path5078-9-4-0"
+ d="M 1.747313,20.412799 C 1.5058354,14.057939 6.4775431,11.142846 6.4775431,11.142846 L 5.3994088,9.5261721 12.384821,9.423745 9.9225541,15.645623 8.7911044,14.025689 c 0,0 -3.7033954,1.584954 -3.7107188,5.82887 -0.00731,4.243917 4.3309414,6.625639 4.3309414,6.625639 l -2.0021389,2.84149 c 0,0 -5.4203175,-2.551927 -5.6618751,-8.908889 z"
+ style="fill:#7db846;fill-opacity:1;stroke:none;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ sodipodi:nodetypes="cccccczccz" />
+ <path
+ style="opacity:0.75;fill:#ffffff;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter8458)"
+ d="m 247.77811,607.10722 2.04551,-1.97639 c 3.084,-2.18671 7.16485,-2.19754 10.11737,-0.82586 -1.41374,-0.11516 -7.27065,-0.71672 -10.04431,1.95056 -1.09475,1.05276 -1.29524,1.31798 -1.29524,1.31798 z"
+ id="path8400"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccscc"
+ transform="matrix(-0.116798,0.98991494,0.98031758,0.11794146,-559.3106,-305.38616)" />
+ <path
+ transform="matrix(0.116798,-0.98991494,-0.98031758,-0.11794146,582.15756,344.47789)"
+ sodipodi:nodetypes="cccscc"
+ inkscape:connector-curvature="0"
+ id="path8135"
+ d="m 247.77811,607.10722 2.04551,-1.97639 c 3.084,-2.18671 6.53572,-2.30166 9.97068,1.1396 -3.7021,-2.69151 -7.12396,-2.68218 -9.89762,-0.0149 -1.09475,1.05276 -1.29524,1.31798 -1.29524,1.31798 z"
+ style="opacity:0.75;fill:#ffffff;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter8458)" />
+ <path
+ transform="matrix(0.71872527,-0.6834558,-0.6768296,-0.72576163,239.28,620.73618)"
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path8137"
+ d="m 248.50329,606.59306 1.32033,-1.46223 2.39304,-1.06565 c -1.38665,1.37707 -2.63431,2.57028 -4.14575,3.81106 z"
+ style="opacity:0.75;fill:#ffffff;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter8458)" />
+ <path
+ style="opacity:0.75;fill:#ffffff;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter8458)"
+ d="m 248.50329,606.59306 1.32033,-1.46223 2.39304,-1.06565 c -1.38665,1.37707 -2.63431,2.57028 -4.14575,3.81106 z"
+ id="path8139"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc"
+ transform="matrix(-0.35836628,-0.92891791,-0.91991192,0.3618747,660.45559,40.942038)" />
+ <path
+ transform="matrix(-0.63347005,0.76463182,0.75721861,0.63967175,-281.84431,-552.85979)"
+ style="opacity:0.26000001;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter8458)"
+ d="m 253.47872,607.61144 1.81198,-1.81975 0.89043,-1.02933 c 0,0 0.0967,0.57698 -0.92284,1.70274 -1.01955,1.12575 -1.31704,1.26648 -1.31704,1.26648 z"
+ id="path8141"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccscc" />
+ <path
+ sodipodi:nodetypes="cccccczccz"
+ style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99998635;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 1.747313,20.412799 C 1.5058354,14.057939 6.4775431,11.142846 6.4775431,11.142846 L 5.3994088,9.5261721 12.384821,9.423745 9.9225541,15.645623 8.7911044,14.025689 c 0,0 -3.7033954,1.584954 -3.7107188,5.82887 -0.00731,4.243917 4.3309414,6.625639 4.3309414,6.625639 l -2.0021389,2.84149 c 0,0 -5.4203175,-2.551927 -5.6618751,-8.908889 z"
+ id="path4283"
+ inkscape:connector-curvature="0" />
+ <path
+ sodipodi:nodetypes="cccccczccz"
+ style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99998635;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 22.322784,19.5872 c 0.241477,6.354861 -4.73023,9.269954 -4.73023,9.269954 l 1.078134,1.616674 -6.985412,0.102427 2.462267,-6.22188 1.131449,1.619935 c 0,0 3.703396,-1.584955 3.710719,-5.828871 0.0073,-4.243915 -4.330941,-6.625638 -4.330941,-6.625638 l 2.002139,-2.841489 c 0,0 5.420317,2.551927 5.661875,8.908888 z"
+ id="path4285"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_rotate_3d-24.svg b/pixmaps/src/gwy_rotate_3d-24.svg
new file mode 100644
index 0000000..35b1170
--- /dev/null
+++ b/pixmaps/src/gwy_rotate_3d-24.svg
@@ -0,0 +1,156 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ id="svg2160"
+ sodipodi:version="0.32"
+ inkscape:version="0.92+devel unknown"
+ sodipodi:docname="gwy_rotate_3d-24.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ version="1.1"
+ inkscape:export-filename="gwy_rotate-24.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs2162">
+ <filter
+ height="1.2250096"
+ y="-0.11250482"
+ width="1.2571303"
+ x="-0.12856513"
+ id="filter8458"
+ style="color-interpolation-filters:sRGB"
+ inkscape:collect="always">
+ <feGaussianBlur
+ id="feGaussianBlur8460"
+ stdDeviation="0.16275744"
+ inkscape:collect="always" />
+ </filter>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="47.363944"
+ inkscape:cx="19.277578"
+ inkscape:cy="15.259717"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ showguides="true"
+ inkscape:guide-bbox="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1028"
+ inkscape:window-x="0"
+ inkscape:window-y="33"
+ inkscape:window-maximized="1"
+ inkscape:snap-global="false"
+ inkscape:document-rotation="0">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata2165">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ transform="translate(0,-8)">
+ <path
+ inkscape:connector-curvature="0"
+ id="path5078-9-4"
+ d="M 12.447848,30.287736 C 6.092987,30.529213 3.177894,25.557506 3.177894,25.557506 L 1.56122,26.63564 1.458793,19.650228 l 6.22188,2.462267 -1.619935,1.131449 c 0,0 1.584955,3.703396 5.828871,3.710719 4.243915,0.0073 6.625638,-4.330941 6.625638,-4.330941 l 2.841489,2.002139 c 0,0 -2.551927,5.420317 -8.908888,5.661875 z"
+ style="fill:#7db846;fill-opacity:1;stroke:none;stroke-width:0.99998635;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ sodipodi:nodetypes="cccccczccz" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path5078-9-4-0"
+ d="m 11.622249,9.712265 c 6.35486,-0.2414776 9.269953,4.73023 9.269953,4.73023 l 1.616674,-1.078134 0.102427,6.985412 -6.221878,-2.462267 1.619934,-1.13145 c 0,0 -1.584954,-3.703395 -5.82887,-3.710718 -4.243917,-0.0073 -6.625639,4.330941 -6.625639,4.330941 L 2.71336,15.37414 c 0,0 2.551927,-5.4203174 8.908889,-5.661875 z"
+ style="fill:#7db846;fill-opacity:1;stroke:none;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ sodipodi:nodetypes="cccccczccz" />
+ <path
+ style="opacity:0.75;fill:#ffffff;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter8458)"
+ d="m 247.77811,607.10722 2.04551,-1.97639 c 3.72195,-2.30129 6.47029,-2.33894 10.11737,-0.82586 -1.41374,-0.11516 -7.27065,-0.71672 -10.04431,1.95056 -1.09475,1.05276 -1.29524,1.31798 -1.29524,1.31798 z"
+ id="path8400"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccscc"
+ transform="matrix(0.98991494,-0.116798,0.11794146,0.98031758,-313.41287,-551.17548)" />
+ <path
+ transform="matrix(-0.98991494,0.116798,-0.11794146,-0.98031758,336.35983,590.1318)"
+ sodipodi:nodetypes="cccscc"
+ inkscape:connector-curvature="0"
+ id="path8135"
+ d="m 247.77811,607.10722 2.04551,-1.97639 c 3.39429,-1.62998 4.14901,-2.07894 8.56625,0.0722 -4.22982,-1.42329 -5.35674,-1.07715 -8.49319,1.0525 -1.25447,0.85178 -1.29524,1.31798 -1.29524,1.31798 z"
+ style="opacity:0.75;fill:#ffffff;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter8458)" />
+ <path
+ style="opacity:0.75;fill:#ffffff;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter8458)"
+ d="m 248.73043,606.36076 1.78592,-1.69521 1.77753,-0.51768 c -1.4472,1.33053 -2.85561,2.58935 -4.307,3.89445 z"
+ id="path8139"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc"
+ transform="matrix(-0.67958389,-0.72765417,-0.71798959,0.67947199,607.19723,-206.93713)" />
+ <path
+ transform="matrix(-0.76463182,-0.63347005,-0.63967175,0.75721861,584.89484,-273.87936)"
+ style="opacity:0.26000001;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter8458)"
+ d="m 253.47872,607.61144 1.81198,-1.81975 0.89043,-1.02933 c 0,0 0.0967,0.57698 -0.92284,1.70274 -1.01955,1.12575 -1.31704,1.26648 -1.31704,1.26648 z"
+ id="path8141"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccscc" />
+ <path
+ sodipodi:nodetypes="cccccczccz"
+ style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99998635;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 12.447848,30.287736 C 6.092987,30.529213 3.177894,25.557506 3.177894,25.557506 L 1.56122,26.63564 1.458793,19.650228 l 6.22188,2.462267 -1.619935,1.131449 c 0,0 1.584955,3.703396 5.828871,3.710719 4.243915,0.0073 6.625638,-4.330941 6.625638,-4.330941 l 2.841489,2.002139 c 0,0 -2.551927,5.420317 -8.908888,5.661875 z"
+ id="path4285"
+ inkscape:connector-curvature="0" />
+ <path
+ style="color:#000000;overflow:visible;opacity:0.75;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.99207175px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:fill markers stroke;filter:url(#filter8458)"
+ d="m 17.452727,17.820721 1.233912,-0.808572 0.404229,0.439379 -0.658214,0.57998 z"
+ id="path194"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="color:#000000;overflow:visible;opacity:0.75;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.99207175px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:fill markers stroke;filter:url(#filter8458)"
+ d="m 21.085852,15.103565 1.008974,-0.857874 -0.200522,1.033625 -0.316352,0.281203 z"
+ id="path216"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ sodipodi:nodetypes="cccccczccz"
+ style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99998635;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 11.622249,9.712265 c 6.35486,-0.2414776 9.269953,4.73023 9.269953,4.73023 l 1.616674,-1.078134 0.102427,6.985412 -6.221878,-2.462267 1.619934,-1.13145 c 0,0 -1.584954,-3.703395 -5.82887,-3.710718 -4.243917,-0.0073 -6.625639,4.330941 -6.625639,4.330941 L 2.71336,15.37414 c 0,0 2.551927,-5.4203174 8.908889,-5.661875 z"
+ id="path4283"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_rotate_90_ccw-24.svg b/pixmaps/src/gwy_rotate_90_ccw-24.svg
new file mode 100644
index 0000000..ed1e678
--- /dev/null
+++ b/pixmaps/src/gwy_rotate_90_ccw-24.svg
@@ -0,0 +1,200 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ id="svg2160"
+ sodipodi:version="0.32"
+ inkscape:version="0.92+devel unknown"
+ sodipodi:docname="gwy_rotate_90_ccw-24.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ version="1.1"
+ inkscape:export-filename="gwy_rotate-24.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs2162">
+ <inkscape:path-effect
+ effect="bspline"
+ id="path-effect4896"
+ is_visible="true"
+ weight="33.333333"
+ steps="2"
+ helper_size="0"
+ apply_no_weight="true"
+ apply_with_weight="true"
+ only_selected="false" />
+ <marker
+ inkscape:stockid="TriangleOutS"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="TriangleOutS"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path4464"
+ d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z "
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
+ transform="scale(0.2)" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleOutM"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="TriangleOutM"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path4461"
+ d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z "
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
+ transform="scale(0.4)" />
+ </marker>
+ <inkscape:path-effect
+ effect="bspline"
+ id="path-effect4314"
+ is_visible="true"
+ weight="33.333333"
+ steps="2"
+ helper_size="0"
+ apply_no_weight="true"
+ apply_with_weight="true"
+ only_selected="false" />
+ <inkscape:path-effect
+ effect="bspline"
+ id="path-effect4298"
+ is_visible="true"
+ weight="33.333333"
+ steps="2"
+ helper_size="0"
+ apply_no_weight="true"
+ apply_with_weight="true"
+ only_selected="false" />
+ <inkscape:path-effect
+ effect="bspline"
+ id="path-effect4294"
+ is_visible="true"
+ weight="33.333333"
+ steps="2"
+ helper_size="0"
+ apply_no_weight="true"
+ apply_with_weight="true"
+ only_selected="false" />
+ <filter
+ height="1.2250096"
+ y="-0.11250482"
+ width="1.2571303"
+ x="-0.12856513"
+ id="filter8458"
+ style="color-interpolation-filters:sRGB"
+ inkscape:collect="always">
+ <feGaussianBlur
+ id="feGaussianBlur8460"
+ stdDeviation="0.16275744"
+ inkscape:collect="always" />
+ </filter>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="37.375"
+ inkscape:cx="12"
+ inkscape:cy="12"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ showguides="true"
+ inkscape:guide-bbox="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1149"
+ inkscape:window-x="0"
+ inkscape:window-y="32"
+ inkscape:window-maximized="1"
+ inkscape:snap-global="true"
+ inkscape:snap-center="true"
+ inkscape:document-rotation="0"
+ inkscape:snap-smooth-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="0.5"
+ spacingy="0.5"
+ enabled="true"
+ visible="true"
+ units="px"
+ empspacing="2" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata2165">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ transform="translate(0,-8)">
+ <g
+ id="g4844">
+ <g
+ style="opacity:1"
+ id="path4846" />
+ </g>
+ <path
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-variant-east-asian:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-col [...]
+ d="m 3.437878,10.5 v 3 h 3 c 1.857969,0 4.841638,0.462732 5.939453,1.560547 1.097815,1.097815 1.560547,4.081484 1.560547,5.939453 v 3 h -3.5 l 5,6 5,-6 h -3.5 v -3 c 0,-2.142031 -0.105392,-5.726486 -2.439453,-8.060547 C 12.164364,10.605392 8.579909,10.5 6.437878,10.5 Z"
+ id="path4990"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccssscccccsssc" />
+ <path
+ style="opacity:0.75;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.99207175px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter8458)"
+ d="M 3.937878,11 4,12.934851 4.884839,11.858713 8.7515133,12 l 3.6863647,0.5 -1.5,-1 -2.5,-0.5 z"
+ id="path5079"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccc" />
+ <path
+ style="opacity:0.75;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.99207175px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter8458)"
+ d="m 13.937878,24.5 h -2.5 l 2.5,2.5 -1,-1.5 h 1 l 0.5,-1"
+ id="path5101"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccc" />
+ <path
+ style="opacity:0.75;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.99207175px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter8458)"
+ d="m 16.937878,24.5 1,1 h 0.5 l 1,-1 z"
+ id="path5123"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ sodipodi:nodetypes="ccssscccccsssc"
+ inkscape:connector-curvature="0"
+ id="path5134"
+ d="m 3.437878,10.5 v 3 h 3 c 1.857969,0 4.841638,0.462732 5.939453,1.560547 1.097815,1.097815 1.560547,4.081484 1.560547,5.939453 v 3 h -3.5 l 5,6 5,-6 h -3.5 v -3 c 0,-2.142031 -0.105392,-5.726486 -2.439453,-8.060547 C 12.164364,10.605392 8.579909,10.5 6.437878,10.5 Z"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-variant-east-asian:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-col [...]
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_rotate_90_cw-24.svg b/pixmaps/src/gwy_rotate_90_cw-24.svg
new file mode 100644
index 0000000..4cd8615
--- /dev/null
+++ b/pixmaps/src/gwy_rotate_90_cw-24.svg
@@ -0,0 +1,214 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ id="svg2160"
+ sodipodi:version="0.32"
+ inkscape:version="0.92+devel unknown"
+ sodipodi:docname="gwy_rotate_90_cw-24.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ version="1.1"
+ inkscape:export-filename="gwy_rotate-24.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs2162">
+ <inkscape:path-effect
+ effect="bspline"
+ id="path-effect4896"
+ is_visible="true"
+ weight="33.333333"
+ steps="2"
+ helper_size="0"
+ apply_no_weight="true"
+ apply_with_weight="true"
+ only_selected="false" />
+ <marker
+ inkscape:stockid="TriangleOutS"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="TriangleOutS"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path4464"
+ d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z "
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
+ transform="scale(0.2)" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleOutM"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="TriangleOutM"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path4461"
+ d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z "
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
+ transform="scale(0.4)" />
+ </marker>
+ <inkscape:path-effect
+ effect="bspline"
+ id="path-effect4314"
+ is_visible="true"
+ weight="33.333333"
+ steps="2"
+ helper_size="0"
+ apply_no_weight="true"
+ apply_with_weight="true"
+ only_selected="false" />
+ <inkscape:path-effect
+ effect="bspline"
+ id="path-effect4298"
+ is_visible="true"
+ weight="33.333333"
+ steps="2"
+ helper_size="0"
+ apply_no_weight="true"
+ apply_with_weight="true"
+ only_selected="false" />
+ <inkscape:path-effect
+ effect="bspline"
+ id="path-effect4294"
+ is_visible="true"
+ weight="33.333333"
+ steps="2"
+ helper_size="0"
+ apply_no_weight="true"
+ apply_with_weight="true"
+ only_selected="false" />
+ <filter
+ height="1.2250096"
+ y="-0.11250482"
+ width="1.2571303"
+ x="-0.12856513"
+ id="filter8458"
+ style="color-interpolation-filters:sRGB"
+ inkscape:collect="always">
+ <feGaussianBlur
+ id="feGaussianBlur8460"
+ stdDeviation="0.16275744"
+ inkscape:collect="always" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ style="color-interpolation-filters:sRGB"
+ id="filter5373"
+ x="-0.02529144"
+ width="1.0505829"
+ y="-0.045066713"
+ height="1.0901334">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.10393676"
+ id="feGaussianBlur5375" />
+ </filter>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="37.375"
+ inkscape:cx="12"
+ inkscape:cy="10.935648"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ showguides="true"
+ inkscape:guide-bbox="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1149"
+ inkscape:window-x="0"
+ inkscape:window-y="32"
+ inkscape:window-maximized="1"
+ inkscape:snap-global="true"
+ inkscape:snap-center="true"
+ inkscape:document-rotation="0"
+ inkscape:snap-smooth-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="0.5"
+ spacingy="0.5"
+ enabled="true"
+ visible="true"
+ units="px"
+ empspacing="2" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata2165">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ transform="translate(0,-8)">
+ <g
+ id="g4844">
+ <g
+ style="opacity:1"
+ id="path4846" />
+ </g>
+ <path
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-variant-east-asian:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-col [...]
+ d="m 20.5,10.5 v 3 h -3 c -1.857969,0 -4.841638,0.462732 -5.939453,1.560547 C 10.462732,16.158362 10,19.142031 10,21 v 3 h 3.5 l -5,6 -5,-6 H 7 V 21 C 7,18.857969 7.105392,15.273514 9.439453,12.939453 11.773514,10.605392 15.357969,10.5 17.5,10.5 Z"
+ id="path4990"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccssscccccsssc" />
+ <path
+ style="opacity:0.75;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.99207175px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter5373)"
+ d="m 6.0248362,11.080268 c 0,0 0.9828568,0.0742 3.2231466,0.630951 1.2902022,0.320637 2.7770432,0.791423 3.9182462,1.626574 1.135384,0.830891 2.721558,3.22621 2.721558,3.22621 0,0 -0.540183,-2.370739 -2.404376,-3.777008 -2.195737,-1.656371 -2.855752,-1.290753 -4.5059496,-1.627467 -1.1605622,-0.236807 -2.9526252,-0.07926 -2.9526252,-0.07926 z"
+ id="path5079"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="csacssc"
+ transform="matrix(-1,0,0,1,23.937878,0)" />
+ <path
+ style="opacity:0.75;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.99207175px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter8458)"
+ d="m 7.064283,24.5 h -2.5 l 2.5,2.5 -1,-1.5 h 1 l 0.5,-1"
+ id="path5101"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccc" />
+ <path
+ style="opacity:0.75;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.99207175px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter8458)"
+ d="m 10.064283,24.5 1,1 h 0.5 l 1,-1 z"
+ id="path5123"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ sodipodi:nodetypes="ccssscccccsssc"
+ inkscape:connector-curvature="0"
+ id="path5134"
+ d="m 20.5,10.5 v 3 h -3 c -1.857969,0 -4.841638,0.462732 -5.939453,1.560547 C 10.462732,16.158362 10,19.142031 10,21 v 3 h 3.5 l -5,6 -5,-6 H 7 V 21 C 7,18.857969 7.105392,15.273514 9.439453,12.939453 11.773514,10.605392 15.357969,10.5 17.5,10.5 Z"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-variant-east-asian:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-col [...]
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_scale-24.svg b/pixmaps/src/gwy_scale-24.svg
new file mode 100644
index 0000000..4b5752b
--- /dev/null
+++ b/pixmaps/src/gwy_scale-24.svg
@@ -0,0 +1,105 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 22.5 22.5"
+ id="svg8093"
+ version="1.1"
+ inkscape:version="0.92.1 unknown"
+ sodipodi:docname="gwy_scale-24.svg"
+ inkscape:export-filename="gwy_scale-24.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs8095" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="18.684887"
+ inkscape:cx="13.506679"
+ inkscape:cy="15.772663"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ units="px">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="0.9375"
+ spacingy="0.9375"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8098">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-244.77814,-596.57599)">
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#e8f0e0;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.9375;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:0.93750005, 1.8750001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect10104"
+ width="21.5625"
+ height="21.5625"
+ x="245.24689"
+ y="597.04474" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#b3d296;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.9375;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:0.93749999, 1.87499999;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect10106"
+ width="15.9375"
+ height="15.9375"
+ x="245.24689"
+ y="597.04474" />
+ <rect
+ y="597.04474"
+ x="245.24689"
+ height="10.312499"
+ width="10.3125"
+ id="rect10108"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#7db846;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.93750006;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <path
+ style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 250.42689,604.09705 1.87229,-1.87227 4.6807,4.6807 -1.87227,1.87228 z"
+ id="path8069"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 253.23532,610.65004 5.61685,-5.61685 v 5.61685 z"
+ id="path8071"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_scale_horizontally-24.svg b/pixmaps/src/gwy_scale_horizontally-24.svg
new file mode 100644
index 0000000..b4c129b
--- /dev/null
+++ b/pixmaps/src/gwy_scale_horizontally-24.svg
@@ -0,0 +1,176 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8093"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_scale_horizontally-24.svg"
+ inkscape:export-filename="gwy_flip_vertically-24.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs8095">
+ <filter
+ inkscape:collect="always"
+ style="color-interpolation-filters:sRGB"
+ id="filter8458"
+ x="-0.12856513"
+ width="1.2571303"
+ y="-0.11250482"
+ height="1.2250096">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.16275744"
+ id="feGaussianBlur8460" />
+ </filter>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="9.0824264"
+ inkscape:cx="-1.7123216"
+ inkscape:cy="11.893485"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-global="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8098">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-244.77811,-595.10722)">
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="rect12874-3"
+ d="m 244.27811,597.60723 v 6 h 25 v -6 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#ffbb00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 249.27811,598.10721 v 2.00001"
+ id="path12880-7"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path12882-5"
+ d="m 246.27811,598.10722 v 3"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <g
+ id="g8180"
+ transform="matrix(0,1,1,0,-351.33135,351.0794)">
+ <path
+ sodipodi:nodetypes="ccccccccccc"
+ inkscape:connector-curvature="0"
+ id="path8069"
+ d="m 265.52742,603.61601 -4.5,-4.75586 -4,4.75586 1.5,0 0,8.98242 -1.5,0 4.00029,4.75586 4.49971,-4.75586 -2,0 0,-8.96484 z"
+ style="fill:#7db846;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ transform="matrix(0,1,1,0,-346.22145,352.3379)"
+ sodipodi:nodetypes="cccscc"
+ inkscape:connector-curvature="0"
+ id="path8400"
+ d="m 247.77811,607.10722 2.04551,-1.97639 0.82671,-0.67886 c 0,0 0.26589,0.83737 -0.66247,1.73517 -1.09178,1.05585 -1.36362,1.02163 -1.36362,1.02163 z"
+ style="opacity:0.75;fill:#ffffff;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter8458)" />
+ <path
+ sodipodi:nodetypes="cccscc"
+ inkscape:connector-curvature="0"
+ id="path8466"
+ d="m 253.11792,607.26529 1.81198,-1.81975 0.89043,-1.02933 c 0,0 0.0967,0.57698 -0.92284,1.70274 -1.01955,1.12575 -1.31704,1.26648 -1.31704,1.26648 z"
+ style="opacity:0.26000001;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter8458)"
+ transform="matrix(0.69230564,0.72160439,-0.72160439,0.69230564,521.85974,0.6931212)" />
+ <path
+ transform="matrix(0.10811449,0.99413845,0.99413845,-0.10811449,-368.13411,426.79066)"
+ style="opacity:0.26000001;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter8458)"
+ d="m 253.47872,607.61144 1.81198,-1.81975 0.89043,-1.02933 c 0,0 0.0967,0.57698 -0.92284,1.70274 -1.01955,1.12575 -1.31704,1.26648 -1.31704,1.26648 z"
+ id="path8468"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccscc" />
+ <path
+ transform="matrix(-0.69230564,0.72160439,0.72160439,0.69230564,0.0190765,9.3917012)"
+ style="opacity:0.75;fill:#ffffff;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter8458)"
+ d="m 250.42076,599.48385 5.75597,5.56568 c 0.78644,-0.69253 0.27926,-0.20275 0.86026,-0.71903 -0.13014,0.0245 0.32045,0.66081 -0.1642,1.68599 0.99919,3.25596 -5.84748,-5.15797 -6.46943,-5.9464 -0.34388,-0.43593 -0.24155,-0.7694 0.0174,-0.58624 z"
+ id="path8462"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccsc" />
+ </g>
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path4771"
+ d="m 255.27811,598.10721 v 2.00001"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 252.27811,598.10722 v 3"
+ id="path4773"
+ inkscape:connector-curvature="0" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path4775"
+ d="m 261.27811,598.10721 v 2.00001"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 258.27811,598.10722 v 3"
+ id="path4777"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 267.27811,598.10721 v 2.00001"
+ id="path4779"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4781"
+ d="m 264.27811,598.10722 v 3"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_scale_vertically-24.svg b/pixmaps/src/gwy_scale_vertically-24.svg
new file mode 100644
index 0000000..107a33e
--- /dev/null
+++ b/pixmaps/src/gwy_scale_vertically-24.svg
@@ -0,0 +1,176 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8093"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_scale_vertically-24.svg"
+ inkscape:export-filename="gwy_flip_vertically-24.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs8095">
+ <filter
+ inkscape:collect="always"
+ style="color-interpolation-filters:sRGB"
+ id="filter8458"
+ x="-0.12856513"
+ width="1.2571303"
+ y="-0.11250482"
+ height="1.2250096">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.16275744"
+ id="feGaussianBlur8460" />
+ </filter>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="9.2189467"
+ inkscape:cx="10.230606"
+ inkscape:cy="3.1813199"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-global="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8098">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-244.77811,-595.10722)">
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#ffbb00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 247.27811,594.60724 h 6 v 25 h -6 z"
+ id="rect12874-3"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 247.77794,605.60731 h 3"
+ id="path12876-6"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 247.77794,602.60731 h 2.00001"
+ id="path12880-7"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path12882-5"
+ d="m 247.77794,599.60731 h 3"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 247.77794,614.60731 h 2.00001"
+ id="path12884-3"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 247.77794,608.60731 h 2.00001"
+ id="path12890-5"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path12892-6"
+ d="m 247.77794,611.60731 h 3"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 247.77794,617.60731 h 3"
+ id="path8091-2"
+ inkscape:connector-curvature="0" />
+ <g
+ id="g8180"
+ transform="translate(1,-1)">
+ <path
+ sodipodi:nodetypes="ccccccccccc"
+ inkscape:connector-curvature="0"
+ id="path8069"
+ d="m 265.27782,603.61601 -4.5,-4.75586 -4,4.75586 1.5,0 0,8.98242 -1.5,0 4.00029,4.75586 4.49971,-4.75586 -2,0 0,-8.96484 z"
+ style="fill:#7db846;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ transform="matrix(0,1,1,0,-346.22145,352.3379)"
+ sodipodi:nodetypes="cccscc"
+ inkscape:connector-curvature="0"
+ id="path8400"
+ d="m 247.77811,607.10722 2.04551,-1.97639 0.82671,-0.67886 c 0,0 0.26589,0.6778 -0.75365,1.80356 -1.01955,1.12575 -1.29524,1.31798 -1.29524,1.31798 z"
+ style="opacity:0.75;fill:#ffffff;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter8458)" />
+ <path
+ sodipodi:nodetypes="cccscc"
+ inkscape:connector-curvature="0"
+ id="path8466"
+ d="m 253.11792,607.26529 1.81198,-1.81975 0.89043,-1.02933 c 0,0 0.0967,0.57698 -0.92284,1.70274 -1.01955,1.12575 -1.31704,1.26648 -1.31704,1.26648 z"
+ style="opacity:0.26000001;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter8458)"
+ transform="matrix(0.69230564,0.72160439,-0.72160439,0.69230564,521.85974,0.6931212)" />
+ <path
+ transform="matrix(0.10811449,0.99413845,0.99413845,-0.10811449,-368.13411,426.79066)"
+ style="opacity:0.26000001;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter8458)"
+ d="m 253.47872,607.61144 1.81198,-1.81975 0.89043,-1.02933 c 0,0 0.0967,0.57698 -0.92284,1.70274 -1.01955,1.12575 -1.31704,1.26648 -1.31704,1.26648 z"
+ id="path8468"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccscc" />
+ <path
+ transform="matrix(-0.69230564,0.72160439,0.72160439,0.69230564,0.0190765,9.3917012)"
+ style="opacity:0.75;fill:#ffffff;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter8458)"
+ d="m 250.42076,599.48385 5.75597,5.56568 c 0.78644,-0.69253 0.27926,-0.20275 0.86026,-0.71903 -0.13014,0.0245 0.32045,0.66081 -0.1642,1.68599 -0.31728,0.41341 -6.35383,-4.69604 -6.97578,-5.48447 -0.34388,-0.43593 0.2648,-1.23133 0.52375,-1.04817 z"
+ id="path8462"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccsc" />
+ </g>
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path4764"
+ d="m 247.77794,596.60731 h 2.00001"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_scars-24.svg b/pixmaps/src/gwy_scars-24.svg
new file mode 100644
index 0000000..b04e6af
--- /dev/null
+++ b/pixmaps/src/gwy_scars-24.svg
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8323"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="gwy_scars.svg">
+ <defs
+ id="defs8325" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="10.435893"
+ inkscape:cx="29.740004"
+ inkscape:cy="18.815788"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata8328">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-182.52887,-504.32709)">
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#d0e2f2;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8276"
+ width="23.000002"
+ height="23.000002"
+ x="183.02887"
+ y="504.82709" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.00000024;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 197.52888,507.32708 8,0"
+ id="path8537"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8539"
+ d="m 187.52888,508.82708 7,0"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.0209229;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 184.52888,524.82708 11,0"
+ id="path8545"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8351"
+ d="m 185.52888,513.32708 15,0"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.00000048;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8353"
+ d="m 196.52888,522.32708 9,0"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.00000024;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8355"
+ d="m 183.52888,518.32708 10,0"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.00000024;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_selections-24.svg b/pixmaps/src/gwy_selections-24.svg
new file mode 100644
index 0000000..f906287
--- /dev/null
+++ b/pixmaps/src/gwy_selections-24.svg
@@ -0,0 +1,147 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg9115"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_selections-24.svg"
+ inkscape:export-filename="gwy_selections-24.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96">
+ <defs
+ id="defs9117">
+ <linearGradient
+ osb:paint="solid"
+ id="linearGradient8428">
+ <stop
+ id="stop8430"
+ offset="0"
+ style="stop-color:#4696db;stop-opacity:1;" />
+ </linearGradient>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="16.830321"
+ inkscape:cx="7.9872632"
+ inkscape:cy="18.627623"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="false"
+ inkscape:snap-global="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata9120">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-318.26682,-688.48108)">
+ <g
+ id="g8110"
+ transform="translate(19.96252,5.87193)" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 341.26682,699.48108 v 11.03844 h -5.96155 v -11.03844 z"
+ id="rect5148"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path8161"
+ d="m 325.76683,706.10608 5,-11.25"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <g
+ transform="translate(345.23995,-356.98422)"
+ id="g8186">
+ <path
+ sodipodi:nodetypes="cc"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m -12.97312,1045.4653 v 6"
+ id="path8192"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m -15.97312,1048.4653 h 6.00001"
+ id="path8194"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ </g>
+ <g
+ id="g4769"
+ transform="translate(337.23994,-338.98422)">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4765"
+ d="m -12.97312,1045.4653 v 6"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="cc" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path4767"
+ d="m -15.97312,1048.4653 h 6.00001"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+ <g
+ transform="translate(-29,2)"
+ id="g8496">
+ <path
+ sodipodi:nodetypes="ccccc"
+ style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 348.26682,688.48108 -1,1 5,5 1,-1 z"
+ id="path8427"
+ inkscape:connector-curvature="0" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path8425"
+ d="m 347.26682,693.48108 1,1 5,-5 -1,-1 z"
+ style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ </g>
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_shader-24.svg b/pixmaps/src/gwy_shader-24.svg
new file mode 100644
index 0000000..c3de13e
--- /dev/null
+++ b/pixmaps/src/gwy_shader-24.svg
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8447"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="gwy_shader.svg">
+ <defs
+ id="defs8449">
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8467"
+ id="radialGradient8465"
+ cx="344.60681"
+ cy="536.5907"
+ fx="344.60681"
+ fy="536.5907"
+ r="10.106574"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.2978589,0,0,1.3584014,-111.3866,-105.79131)" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient8467">
+ <stop
+ id="stop8473"
+ offset="0"
+ style="stop-color:#c3ddf3;stop-opacity:1" />
+ <stop
+ style="stop-color:#4696db;stop-opacity:1"
+ offset="0.5"
+ id="stop8471" />
+ <stop
+ id="stop8469"
+ offset="1"
+ style="stop-color:#0c1e2d;stop-opacity:1" />
+ </linearGradient>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="6.5429474"
+ inkscape:cx="51.591312"
+ inkscape:cy="45.715939"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata8452">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-327.49247,-614.41244)">
+ <circle
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:url(#radialGradient8465);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marke [...]
+ id="path8444"
+ cx="339.49246"
+ cy="626.41241"
+ r="11.420064" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_spectrum-24.svg b/pixmaps/src/gwy_spectrum-24.svg
new file mode 100644
index 0000000..bae5474
--- /dev/null
+++ b/pixmaps/src/gwy_spectrum-24.svg
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ sodipodi:docname="gwy_spectrum-24.svg"
+ inkscape:version="0.92.1 r15371"
+ version="1.1"
+ id="svg8223"
+ viewBox="0 0 24 24"
+ height="24"
+ width="24"
+ inkscape:export-filename="gwy_spectrum-24.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96">
+ <sodipodi:namedview
+ inkscape:window-maximized="1"
+ inkscape:window-y="27"
+ inkscape:window-x="0"
+ inkscape:window-height="1016"
+ inkscape:window-width="1920"
+ units="px"
+ showgrid="false"
+ inkscape:current-layer="layer1"
+ inkscape:document-units="px"
+ inkscape:cy="141.60119"
+ inkscape:cx="66.358509"
+ inkscape:zoom="1"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base"
+ inkscape:snap-smooth-nodes="true"
+ showguides="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <defs
+ id="defs8225" />
+ <metadata
+ id="metadata8228">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ transform="translate(-265.77397,-640.45752)"
+ id="layer1"
+ inkscape:groupmode="layer"
+ inkscape:label="Layer 1">
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#7db846;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000048;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 271.27396,651.95751 h 17 l -2,12.00001 h -20 z"
+ id="rect13909"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <g
+ id="g8464"
+ transform="matrix(1.2553873,0,0,1.2553873,-92.733475,-162.10199)"
+ style="fill:#000000">
+ <g
+ id="g8462"
+ style="fill:#000000;stroke:#db2424;stroke-opacity:1"
+ transform="translate(-105.7592,122.59822)">
+ <g
+ id="g8594"
+ style="fill:#000000">
+ <path
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing [...]
+ d="m 394.12236,532.9472 c 0,0 0.52083,-1.25 0.52083,-1.25 0,0 6.25,0 6.25,0 0,0 -0.52083,1.25 -0.52083,1.25 0,0 -6.25,0 -6.25,0"
+ id="path8458"
+ inkscape:connector-curvature="0" />
+ <path
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing [...]
+ d="m 395.68486,534.1972 c 0,0 1.5625,-3.75 1.5625,-3.75 0,0 2.08333,0 2.08333,0 0,0 -1.5625,3.75 -1.5625,3.75 0,0 -2.08333,0 -2.08333,0"
+ id="path8460"
+ inkscape:connector-curvature="0" />
+ </g>
+ </g>
+ </g>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#fcfcfc;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 268.27498,640.45752 c 0,1.6665 -0.64034,27.78751 4.89852,12.06983 2.7976,-5.89057 9.52869,-7.96489 16.00044,-7.96489"
+ id="path8636"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccc" />
+ <path
+ sodipodi:nodetypes="ccc"
+ inkscape:connector-curvature="0"
+ id="path12604"
+ d="m 268.27498,640.45752 c 0,1.6665 -0.64034,27.78751 4.89852,12.06983 2.7976,-5.89057 9.52869,-7.96489 16.00044,-7.96489"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_spot_remove-24.svg b/pixmaps/src/gwy_spot_remove-24.svg
new file mode 100644
index 0000000..f7b57d4
--- /dev/null
+++ b/pixmaps/src/gwy_spot_remove-24.svg
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8759"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="gwy_spot_remove.svg">
+ <defs
+ id="defs8761" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="3.5615615"
+ inkscape:cx="-69.028728"
+ inkscape:cy="55.309587"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8764">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-347.66226,-653.89819)">
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#d0e2f2;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect11370"
+ width="23.000002"
+ height="23.000002"
+ x="348.16226"
+ y="654.39819" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#ffffff;fill-opacity:0.74901962;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect11972"
+ width="11.000001"
+ height="11.000001"
+ x="356.16226"
+ y="662.39819" />
+ <g
+ id="g8437"
+ transform="matrix(1.5,0,0,1.5,-201.50273,-121.90577)"
+ style="stroke:#db2424;stroke-opacity:1">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#db2424;stroke-width:1.50000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 373.44052,524.5011 4.02276,4.02277"
+ id="path8433"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8435"
+ d="m 373.44052,528.52387 4.02276,-4.02277"
+ style="fill:none;fill-rule:evenodd;stroke:#db2424;stroke-width:1.50000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_stat_quantities-24.svg b/pixmaps/src/gwy_stat_quantities-24.svg
new file mode 100644
index 0000000..442aea6
--- /dev/null
+++ b/pixmaps/src/gwy_stat_quantities-24.svg
@@ -0,0 +1,157 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8950"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_stat_quantities-24.svg"
+ inkscape:export-filename="gwy_stat_quantities-24.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96">
+ <defs
+ id="defs8952" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="29.749109"
+ inkscape:cx="4.8268226"
+ inkscape:cy="12.08207"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-global="true"
+ inkscape:snap-object-midpoints="true"
+ showguides="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8955">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-158.35629,-492.34575)">
+ <g
+ aria-label="µ"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.6508379px;line-height:125%;font-family:Ubuntu;-inkscape-font-specification:Ubuntu;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="text8420"
+ transform="translate(8,-1)">
+ <path
+ d="m 164.35629,495.34575 v 4.424 c 0,2.076 3,2.076 3,0.076 v -4.5 h 2 v 6.41776 c 0,0.82855 -1.98355,1.80499 -2.99245,1.80137 -1.00891,-0.004 -1.59804,-0.24245 -2.00755,-0.60537 v 3.38624 h -2.03265 v -11 z"
+ style="font-size:16px;stroke-width:1px"
+ id="path8434"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccczccccc" />
+ </g>
+ <g
+ id="g8460"
+ transform="translate(4.9999973,0.999986)"
+ style="fill:none">
+ <circle
+ r="3"
+ cy="510.34576"
+ cx="171.35629"
+ id="path8441"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8443"
+ d="m 171.35629,507.34575 h 5"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#ffbb00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.60000002;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 158.85629,496.84576 h 6 v 14 h -6 z"
+ id="rect8461"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <g
+ id="g8470"
+ transform="translate(9,-0.5)"
+ style="stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none">
+ <path
+ inkscape:connector-curvature="0"
+ id="path8464"
+ d="m 152.85629,496.84575 v -3"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="cc" />
+ <path
+ sodipodi:nodetypes="cc"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 156.35629,493.34575 h -7"
+ id="path8466"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ id="g8476"
+ transform="matrix(1,0,0,-1,9,1009.1915)"
+ style="stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 152.85629,497.84575 v -4"
+ id="path8472"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8474"
+ d="m 156.35629,494.34575 h -7"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="cc" />
+ </g>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 161.85629,497.34575 v 13"
+ id="path8478"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.60000002;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8439"
+ width="3"
+ height="3"
+ x="160.35629"
+ y="502.34576" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_straighten_path-24.svg b/pixmaps/src/gwy_straighten_path-24.svg
new file mode 100644
index 0000000..49dbd43
--- /dev/null
+++ b/pixmaps/src/gwy_straighten_path-24.svg
@@ -0,0 +1,631 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8424"
+ version="1.1"
+ inkscape:version="0.92+devel unknown"
+ sodipodi:docname="gwy_straighten_path-24.svg"
+ inkscape:export-filename="gwy_mask_paint_draw-24.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96">
+ <defs
+ id="defs8426">
+ <inkscape:path-effect
+ effect="ruler"
+ id="path-effect2322"
+ is_visible="true"
+ unit="px"
+ mark_distance="20"
+ mark_length="14"
+ minor_mark_length="7"
+ major_mark_steps="5"
+ shift="0"
+ offset="0"
+ mark_dir="left"
+ border_marks="both" />
+ <inkscape:path-effect
+ only_selected="false"
+ apply_with_weight="true"
+ apply_no_weight="true"
+ helper_size="0"
+ steps="2"
+ weight="33.333333"
+ is_visible="true"
+ id="path-effect2252"
+ effect="bspline" />
+ <inkscape:path-effect
+ effect="bspline"
+ id="path-effect2248"
+ is_visible="true"
+ weight="33.333333"
+ steps="2"
+ helper_size="0"
+ apply_no_weight="true"
+ apply_with_weight="true"
+ only_selected="false" />
+ <inkscape:path-effect
+ border_marks="none"
+ mark_dir="both"
+ offset="0"
+ shift="0"
+ major_mark_steps="1"
+ minor_mark_length="0"
+ mark_length="4"
+ mark_distance="6.8"
+ unit="px"
+ is_visible="true"
+ id="path-effect2244"
+ effect="ruler" />
+ <inkscape:path-effect
+ border_marks="both"
+ mark_dir="both"
+ offset="0"
+ shift="0"
+ major_mark_steps="1"
+ minor_mark_length="0"
+ mark_length="4"
+ mark_distance="5.7"
+ unit="px"
+ is_visible="true"
+ id="path-effect2218"
+ effect="ruler" />
+ <inkscape:path-effect
+ only_selected="false"
+ apply_with_weight="true"
+ apply_no_weight="true"
+ helper_size="0"
+ steps="2"
+ weight="33.333333"
+ is_visible="true"
+ id="path-effect2216"
+ effect="bspline" />
+ <inkscape:path-effect
+ effect="ruler"
+ id="path-effect2212"
+ is_visible="true"
+ unit="px"
+ mark_distance="7.2"
+ mark_length="4"
+ minor_mark_length="0"
+ major_mark_steps="1"
+ shift="0"
+ offset="0"
+ mark_dir="both"
+ border_marks="both" />
+ <inkscape:path-effect
+ only_selected="false"
+ apply_with_weight="true"
+ apply_no_weight="true"
+ helper_size="0"
+ steps="2"
+ weight="33.333333"
+ is_visible="true"
+ id="path-effect2166"
+ effect="bspline" />
+ <inkscape:path-effect
+ effect="bspline"
+ id="path-effect2162"
+ is_visible="true"
+ weight="33.333333"
+ steps="2"
+ helper_size="0"
+ apply_no_weight="true"
+ apply_with_weight="true"
+ only_selected="false" />
+ <inkscape:path-effect
+ effect="bspline"
+ id="path-effect2138"
+ is_visible="true"
+ weight="33.333333"
+ steps="2"
+ helper_size="0"
+ apply_no_weight="true"
+ apply_with_weight="true"
+ only_selected="false" />
+ <inkscape:path-effect
+ border_marks="none"
+ mark_dir="both"
+ offset="0"
+ shift="0"
+ major_mark_steps="1"
+ minor_mark_length="0"
+ mark_length="4"
+ mark_distance="6"
+ unit="px"
+ is_visible="true"
+ id="path-effect1567"
+ effect="ruler" />
+ <inkscape:path-effect
+ only_selected="false"
+ apply_with_weight="true"
+ apply_no_weight="true"
+ helper_size="0"
+ steps="2"
+ weight="33.333333"
+ is_visible="true"
+ id="path-effect1565"
+ effect="bspline" />
+ <inkscape:path-effect
+ effect="ruler"
+ id="path-effect1543"
+ is_visible="true"
+ unit="px"
+ mark_distance="20"
+ mark_length="14"
+ minor_mark_length="7"
+ major_mark_steps="5"
+ shift="0"
+ offset="0"
+ mark_dir="left"
+ border_marks="both" />
+ <inkscape:path-effect
+ effect="ruler"
+ id="path-effect1519"
+ is_visible="true"
+ unit="px"
+ mark_distance="4.8"
+ mark_length="4"
+ minor_mark_length="0"
+ major_mark_steps="1"
+ shift="0"
+ offset="0"
+ mark_dir="both"
+ border_marks="both" />
+ <inkscape:path-effect
+ effect="bspline"
+ id="path-effect1499"
+ is_visible="true"
+ weight="33.333333"
+ steps="2"
+ helper_size="0"
+ apply_no_weight="true"
+ apply_with_weight="true"
+ only_selected="false" />
+ <inkscape:path-effect
+ only_selected="false"
+ apply_with_weight="true"
+ apply_no_weight="true"
+ helper_size="0"
+ steps="2"
+ weight="33.333333"
+ is_visible="true"
+ id="path-effect1399"
+ effect="bspline" />
+ <inkscape:path-effect
+ only_selected="false"
+ apply_with_weight="true"
+ apply_no_weight="true"
+ helper_size="0"
+ steps="2"
+ weight="33.333333"
+ is_visible="true"
+ id="path-effect1205"
+ effect="bspline" />
+ <marker
+ inkscape:stockid="StopL"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="marker1127"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path1125"
+ d="M 0.0,5.65 L 0.0,-5.65"
+ style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ transform="scale(0.8)" />
+ </marker>
+ <inkscape:path-effect
+ effect="perp_bisector"
+ id="path-effect110"
+ is_visible="true"
+ length-left="200"
+ length-right="200" />
+ <inkscape:path-effect
+ effect="perp_bisector"
+ id="path-effect104"
+ is_visible="true"
+ length-left="200"
+ length-right="200" />
+ <inkscape:path-effect
+ only_selected="false"
+ apply_with_weight="true"
+ apply_no_weight="true"
+ helper_size="0"
+ steps="2"
+ weight="33.333333"
+ is_visible="true"
+ id="path-effect188"
+ effect="bspline" />
+ <inkscape:path-effect
+ effect="bspline"
+ id="path-effect184"
+ is_visible="true"
+ weight="33.333333"
+ steps="2"
+ helper_size="0"
+ apply_no_weight="true"
+ apply_with_weight="true"
+ only_selected="false" />
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker8670"
+ refX="0.0"
+ refY="0.0"
+ orient="auto"
+ inkscape:stockid="StopL">
+ <path
+ transform="scale(0.8)"
+ style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0.0,5.65 L 0.0,-5.65"
+ id="path8668" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker8618"
+ refX="0.0"
+ refY="0.0"
+ orient="auto"
+ inkscape:stockid="StopL">
+ <path
+ transform="scale(0.8)"
+ style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0.0,5.65 L 0.0,-5.65"
+ id="path8616" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="StopL-3"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="StopL">
+ <path
+ inkscape:connector-curvature="0"
+ transform="scale(0.8)"
+ style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+ d="M 0,5.65 V -5.65"
+ id="path8658-5" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker9537"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="StopL">
+ <path
+ inkscape:connector-curvature="0"
+ transform="scale(0.8)"
+ style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+ d="M 0,5.65 V -5.65"
+ id="path9535" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker9541"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="StopL">
+ <path
+ inkscape:connector-curvature="0"
+ transform="scale(0.8)"
+ style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+ d="M 0,5.65 V -5.65"
+ id="path9539" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker9673-7"
+ refX="0.0"
+ refY="0.0"
+ orient="auto"
+ inkscape:stockid="StopL">
+ <path
+ transform="scale(0.8)"
+ style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0.0,5.65 L 0.0,-5.65"
+ id="path9671-5" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker9627-3"
+ refX="0.0"
+ refY="0.0"
+ orient="auto"
+ inkscape:stockid="StopL">
+ <path
+ transform="scale(0.8)"
+ style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0.0,5.65 L 0.0,-5.65"
+ id="path9625-5" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker9587-6"
+ refX="0.0"
+ refY="0.0"
+ orient="auto"
+ inkscape:stockid="StopL">
+ <path
+ transform="scale(0.8)"
+ style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0.0,5.65 L 0.0,-5.65"
+ id="path9585-2" />
+ </marker>
+ <marker
+ inkscape:stockid="StopL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="StopL-3-6"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path8658-5-1"
+ d="M 0,5.65 V -5.65"
+ style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="scale(0.8)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="StopL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker9537-0"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path9535-6"
+ d="M 0,5.65 V -5.65"
+ style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="scale(0.8)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="StopL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker9541-3"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path9539-2"
+ d="M 0,5.65 V -5.65"
+ style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="scale(0.8)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <inkscape:path-effect
+ effect="bspline"
+ id="path-effect1499-3"
+ is_visible="true"
+ weight="33.333333"
+ steps="2"
+ helper_size="0"
+ apply_no_weight="true"
+ apply_with_weight="true"
+ only_selected="false" />
+ <inkscape:path-effect
+ effect="ruler"
+ id="path-effect1519-6"
+ is_visible="true"
+ unit="px"
+ mark_distance="4.4"
+ mark_length="3"
+ minor_mark_length="0"
+ major_mark_steps="1"
+ shift="0"
+ offset="0"
+ mark_dir="both"
+ border_marks="both" />
+ <inkscape:path-effect
+ effect="bspline"
+ id="path-effect1499-5"
+ is_visible="true"
+ weight="33.333333"
+ steps="2"
+ helper_size="0"
+ apply_no_weight="true"
+ apply_with_weight="true"
+ only_selected="false" />
+ <inkscape:path-effect
+ effect="ruler"
+ id="path-effect1519-3"
+ is_visible="true"
+ unit="px"
+ mark_distance="4.4"
+ mark_length="3"
+ minor_mark_length="0"
+ major_mark_steps="1"
+ shift="0"
+ offset="0"
+ mark_dir="both"
+ border_marks="both" />
+ <inkscape:path-effect
+ border_marks="both"
+ mark_dir="both"
+ offset="0"
+ shift="0"
+ major_mark_steps="1"
+ minor_mark_length="0"
+ mark_length="4"
+ mark_distance="5.8"
+ unit="px"
+ is_visible="true"
+ id="path-effect1567-2"
+ effect="ruler" />
+ <inkscape:path-effect
+ border_marks="both"
+ mark_dir="both"
+ offset="0"
+ shift="0"
+ major_mark_steps="1"
+ minor_mark_length="0"
+ mark_length="4"
+ mark_distance="5.8"
+ unit="px"
+ is_visible="true"
+ id="path-effect1567-0"
+ effect="ruler" />
+ <inkscape:path-effect
+ effect="bspline"
+ id="path-effect2162-6"
+ is_visible="true"
+ weight="33.333333"
+ steps="2"
+ helper_size="0"
+ apply_no_weight="true"
+ apply_with_weight="true"
+ only_selected="false" />
+ <inkscape:path-effect
+ border_marks="both"
+ mark_dir="both"
+ offset="0"
+ shift="0"
+ major_mark_steps="1"
+ minor_mark_length="0"
+ mark_length="4"
+ mark_distance="7.2"
+ unit="px"
+ is_visible="true"
+ id="path-effect2244-0"
+ effect="ruler" />
+ <inkscape:path-effect
+ effect="bspline"
+ id="path-effect2162-8"
+ is_visible="true"
+ weight="33.333333"
+ steps="2"
+ helper_size="0"
+ apply_no_weight="true"
+ apply_with_weight="true"
+ only_selected="false" />
+ <inkscape:path-effect
+ border_marks="both"
+ mark_dir="both"
+ offset="0"
+ shift="0"
+ major_mark_steps="1"
+ minor_mark_length="0"
+ mark_length="4"
+ mark_distance="7.2"
+ unit="px"
+ is_visible="true"
+ id="path-effect2244-7"
+ effect="ruler" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="65.802656"
+ inkscape:cx="5.9587436"
+ inkscape:cy="20.851888"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1149"
+ inkscape:window-x="0"
+ inkscape:window-y="32"
+ inkscape:window-maximized="1"
+ showguides="true"
+ inkscape:snap-global="true"
+ inkscape:document-rotation="0"
+ inkscape:snap-smooth-nodes="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="0.5"
+ spacingy="0.5"
+ enabled="true"
+ visible="true"
+ units="px"
+ empspacing="2" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8429">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-128.33165,-604.34668)">
+ <rect
+ style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:#d0e2f2;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect1569"
+ width="8"
+ height="23"
+ x="143.83165"
+ y="604.84668" />
+ <path
+ style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#db2424;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 147.83165,604.84668 v 23 m -2,-23 h 4 m -4,6 h 4 m -4,6 h 4 m -4,6 h 4"
+ id="path1521"
+ inkscape:connector-curvature="0"
+ inkscape:original-d="m 147.83165,604.84668 v 23"
+ inkscape:path-effect="#path-effect1567" />
+ <rect
+ y="604.84668"
+ x="143.83165"
+ height="23"
+ width="8"
+ id="rect2242"
+ style="color:#000000;overflow:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-variant-east-asian:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-col [...]
+ d="m 129.68271,604.94134 c -0.33316,2.16554 -0.95781,5.24212 0.68945,8.40039 0.82378,1.57942 1.85046,2.59397 2.60547,3.45704 0.755,0.86306 1.20305,1.54396 1.28711,1.77734 0.16776,0.4658 -0.27053,1.5592 -0.46485,1.69531 -0.19305,0.13523 -1.92485,0.37572 -4.42578,0.20899 l -0.46484,6.98632 c 2.50093,0.16673 5.76494,0.73954 8.90625,-1.46093 3.14013,-2.19957 4.36761,-6.1032 3.03516,-9.80274 -0.66605,-1.84928 -1.75692,-3.04366 -2.60547,-4.01367 -0.84856,-0.97001 -1.4891,-1.74672 -1.666 [...]
+ id="path2278"
+ inkscape:connector-curvature="0" />
+ <path
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-variant-east-asian:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-col [...]
+ d="M 4.2636719 1.5488281 C 3.9598719 3.5536781 3.7046362 5.6396163 4.6914062 7.5664062 L 3.3886719 8.3671875 L 3.9121094 9.2207031 L 5.2890625 8.3730469 C 5.7928025 9.0952869 6.3194838 9.8122356 6.9023438 10.478516 C 7.6189437 11.297686 8.2049156 12.111166 8.5722656 12.941406 L 7.234375 13.353516 L 7.5292969 14.308594 L 8.7597656 13.929688 C 9.0404756 15.625448 8.4655131 17.490926 7.1894531 18.384766 C 7.1863531 18.386936 7.1808444 18.386502 7.1777344 18.388672 L 6.515625 17.08398 [...]
+ transform="translate(128.33165,604.34668)"
+ id="path4486" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path2344"
+ d="m 129.68271,604.94134 c -0.33316,2.16554 -0.95781,5.24212 0.68945,8.40039 0.82378,1.57942 1.85046,2.59397 2.60547,3.45704 0.755,0.86306 1.20305,1.54396 1.28711,1.77734 0.16776,0.4658 -0.27053,1.5592 -0.46485,1.69531 -0.19305,0.13523 -1.92485,0.37572 -4.42578,0.20899 l -0.46484,6.98632 c 2.50093,0.16673 5.76494,0.73954 8.90625,-1.46093 3.14013,-2.19957 4.36761,-6.1032 3.03516,-9.80274 -0.66605,-1.84928 -1.75692,-3.04366 -2.60547,-4.01367 -0.84856,-0.97001 -1.4891,-1.74672 -1.666 [...]
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-variant-east-asian:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-col [...]
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_subscript-20.svg b/pixmaps/src/gwy_subscript-20.svg
new file mode 100644
index 0000000..bd7141b
--- /dev/null
+++ b/pixmaps/src/gwy_subscript-20.svg
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="20"
+ height="20"
+ viewBox="0 0 20 20"
+ id="svg8833"
+ version="1.1"
+ inkscape:version="0.92+devel unknown"
+ sodipodi:docname="gwy_subscript-20.svg">
+ <defs
+ id="defs8835">
+ <linearGradient
+ gradientTransform="translate(-11.142957,824.89612)"
+ xlink:href="#linearGradient4140"
+ id="linearGradient4171"
+ gradientUnits="userSpaceOnUse"
+ x1="207.50029"
+ y1="247.92804"
+ x2="272.91217"
+ y2="361.22473" />
+ <linearGradient
+ id="linearGradient4140">
+ <stop
+ style="stop-color:#d7e3f4;stop-opacity:1;"
+ offset="0"
+ id="stop4142" />
+ <stop
+ style="stop-color:#f1f5fb;stop-opacity:1"
+ offset="1"
+ id="stop4144" />
+ </linearGradient>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="42.35"
+ inkscape:cx="10"
+ inkscape:cy="10"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1028"
+ inkscape:window-x="0"
+ inkscape:window-y="33"
+ inkscape:window-maximized="1"
+ inkscape:document-rotation="0">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="0.5"
+ spacingy="0.5"
+ enabled="true"
+ visible="true"
+ units="px"
+ empspacing="2" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8838">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-199.64375,-494.06708)">
+ <text
+ xml:space="preserve"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24.39240837px;line-height:120.00000477%;font-family:'Linux Libertine O';-inkscape-font-specification:'Linux Libertine O';text-decoration:none;text-decoration-line:none;text-decoration-color:#000000;shape-padding:0;overflow:visible;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.89240515;stroke-linecap:round;stroke-linejoin:round;paint-order:fi [...]
+ x="200.12727"
+ y="511.87701"
+ id="text4304"><tspan
+ sodipodi:role="line"
+ id="tspan4302"
+ x="200.12727"
+ y="511.87701"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Linux Libertine O';-inkscape-font-specification:'Linux Libertine O';stroke-width:0.89240515">S</tspan></text>
+ <text
+ id="text4346"
+ y="514.02789"
+ x="210.90309"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18.44700432px;line-height:120.00000477%;font-family:'Linux Libertine O';-inkscape-font-specification:'Linux Libertine O';text-decoration:none;text-decoration-line:none;text-decoration-color:#000000;shape-padding:0;overflow:visible;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.67489052;stroke-linecap:round;stroke-linejoin:round;paint-order:fi [...]
+ xml:space="preserve"><tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Linux Libertine O';-inkscape-font-specification:'Linux Libertine O';stroke-width:0.67489052"
+ y="514.02789"
+ x="210.90309"
+ id="tspan4344"
+ sodipodi:role="line">x</tspan></text>
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_superscript-20.svg b/pixmaps/src/gwy_superscript-20.svg
new file mode 100644
index 0000000..487662e
--- /dev/null
+++ b/pixmaps/src/gwy_superscript-20.svg
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="20"
+ height="20"
+ viewBox="0 0 20 20"
+ id="svg8833"
+ version="1.1"
+ inkscape:version="0.92+devel unknown"
+ sodipodi:docname="gwy_superscript-20.svg">
+ <defs
+ id="defs8835">
+ <linearGradient
+ gradientTransform="translate(-11.142957,824.89612)"
+ xlink:href="#linearGradient4140"
+ id="linearGradient4171"
+ gradientUnits="userSpaceOnUse"
+ x1="207.50029"
+ y1="247.92804"
+ x2="272.91217"
+ y2="361.22473" />
+ <linearGradient
+ id="linearGradient4140">
+ <stop
+ style="stop-color:#d7e3f4;stop-opacity:1;"
+ offset="0"
+ id="stop4142" />
+ <stop
+ style="stop-color:#f1f5fb;stop-opacity:1"
+ offset="1"
+ id="stop4144" />
+ </linearGradient>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="42.35"
+ inkscape:cx="10"
+ inkscape:cy="10"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1028"
+ inkscape:window-x="0"
+ inkscape:window-y="33"
+ inkscape:window-maximized="1"
+ inkscape:document-rotation="0">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="0.5"
+ spacingy="0.5"
+ enabled="true"
+ visible="true"
+ units="px"
+ empspacing="2" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8838">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-199.64375,-494.06708)">
+ <text
+ xml:space="preserve"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24.39240837px;line-height:120.00000477%;font-family:'Linux Libertine O';-inkscape-font-specification:'Linux Libertine O';text-decoration:none;text-decoration-line:none;text-decoration-color:#000000;shape-padding:0;overflow:visible;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.89240515;stroke-linecap:round;stroke-linejoin:round;paint-order:fi [...]
+ x="200.12727"
+ y="511.87701"
+ id="text4304"><tspan
+ sodipodi:role="line"
+ id="tspan4302"
+ x="200.12727"
+ y="511.87701"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Linux Libertine O';-inkscape-font-specification:'Linux Libertine O';stroke-width:0.89240515">S</tspan></text>
+ <text
+ id="text4346"
+ y="502.05457"
+ x="210.90309"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:18.44700432px;line-height:120.00000477%;font-family:'Linux Libertine O';-inkscape-font-specification:'Linux Libertine O';text-decoration:none;text-decoration-line:none;text-decoration-color:#000000;shape-padding:0;overflow:visible;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.67489052;stroke-linecap:round;stroke-linejoin:round;paint-order:fi [...]
+ xml:space="preserve"><tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Linux Libertine O';-inkscape-font-specification:'Linux Libertine O';stroke-width:0.67489052"
+ y="502.05457"
+ x="210.90309"
+ id="tspan4344"
+ sodipodi:role="line">x</tspan></text>
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_synthetic_ballistic_deposition-24.svg b/pixmaps/src/gwy_synthetic_ballistic_deposition-24.svg
new file mode 100644
index 0000000..e539a76
--- /dev/null
+++ b/pixmaps/src/gwy_synthetic_ballistic_deposition-24.svg
@@ -0,0 +1,114 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8440"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ sodipodi:docname="gwy_synthetic_ballistic_deposition-24.svg"
+ inkscape:export-filename="gwy_crop-24.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="26.569152"
+ inkscape:cx="8.3921436"
+ inkscape:cy="11.749994"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1028"
+ inkscape:window-x="0"
+ inkscape:window-y="33"
+ inkscape:window-maximized="1"
+ inkscape:snap-global="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <defs
+ id="defs8442" />
+ <metadata
+ id="metadata8445">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-18.260046,-276.07986)">
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill [...]
+ id="rect4523"
+ width="23"
+ height="23"
+ x="18.760046"
+ y="276.57986" />
+ <image
+ y="277.07986"
+ x="19.260046"
+ id="image4805"
+ xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAIAAABL1vtsAAAE90lEQVQ4TxWUe1jNdxzHf8+eDalz
+kClOHF1PuodCknTRVSWJ3EblUmyshhFyGZshNo2RSyxtleimkqjo1JHqJHJJpUKFmS0756R6zF49
+T3+cfr/v7/N5f17v9+crpE0YtkGilTdTUhIqy3bSf57s/650yZu8UE1tXE3M5I7UwIY9M+QR1jdC
+TOUrrG7MM5WHWz/8fub7xpPq6k01MQ4XzMXCcr0hu6Xat6PtMu10by2z7O8q7W0+15UW9CIloO2U
+76VJn/+ZM790gazu26mPD7rd+WrSkwT311khzT978jxn+ugif0OBwgWe41BR/oVlR0rAh3dNfe1Z
+6qoNqorIJ4c9Lk0cWbXWXrnRsW7zlKafPG5H2xf5GWqU294WLLi33Yl/y5dbCehEraZ+r0oerqpc
+86G78ePHj49/nPX6ckj/K3lNrMMVV8nbgoU0oM2D71z4Ub1hcqG3lFf3dzpfmWUgqO/Eau7uQRXl
+/y4Ko0Tv07QPqnZV+fL3DxMzrIZnT9W7tdSCj0HQcSHwyWH3Yyai3Bljbi6xABAEBapqlDs6/wjq
+LlnMIM1HPXvuH6AoRNtP+5YtmnBrmcWrzHkNu5xfX56nqYuHIhVBm+OkHzZq8I5x2kKSqQjZFFJV
+rHx63Lv9jN8/1xYxqlqx9tocowd7B5pfDzIBJDgRzx/nGQoQAbqDoCtctBnx7IyfuiqGbzS122h4
+b8f0VHNx3ZaptHr0g+u9+OkNu2f0PDjCsJUrbarWTaREvsdYZqQf0oRTZqLabxxbf/XuSpvbesI7
+w3pEnoskRSZm1JbE2egHHpj7u8o6UwORUORreE4mrlxlc3+X89PjXq8yg4Vc59EwHz/4E+WmKfnu
+Y0lL40G34kDjawFGnKhcZfv4wCzQMiYgqQhdEMQYDIU9kuktdKXPveozns7BIwcnGOko1tgpVtsS
+s8rVtqrKKHm4FTNiHtkjuBjB28sOoy7a6oKj6YhHSaiZQJksRz2GvOotLfSSMlSyTMzp2liHlxeD
+iXbtRkfl5il346bB9d+bSxVRdoyJdqI9UDrKTkCtSh6ZYTkc8XRoS/LhqEoe0XrSBwp9HUX/9XU/
+S/aHC/DxviTEDAlzdAftlGofNxENBFxdtb6nIYHyxL5+uxMuMMvzc/64SPJ6Gg6p78TwmwQ/2u/a
+31mMWLLAx7i231DnoJGOQJBIS29LCmw5RGyIQ33cNMZmuzQ1W5CDUvaAZUHmHqk27A4Y6aDliptB
+oolIYGd6WzNwVFW+glonTEWYQsY40duSWr/NiVctx7x+k4mLA4yJAwcw1V7703SLYWWLzOOl2sL7
+prN9z/PBwRYgoSzMHHLNR2fzDbvM/PBmNbaOHYpNWHbWTOw+7LNfTETZ0/TZYxwQeur3qRXrWIeS
++WbEiSnYfUCCpurLiRUR1hplPG/BIQhCuP4QPqN/uuVwQgQRFAl4VhxkjK84r67e2Jbke14mzrQf
+WbpQFjVaq/rryQz8V/4CzsQaDD1tJmLxMDXPVULSVIro6DFaArcT/YkQmcdX9letiOYJ+a2ItGk8
+5Aa8zt+DHu6buV6ihUCuH6iTCwLC4tFJeJkRzFNOgJ21ATv3Ff5jMzFjL7jy3hYuJGOMuXXcQK55
+wo6QIMCTSYFzXEHd1xfnuYwBHlUw4k3ufE3dLlbjxfk5LGjbSR9I05k7gVBiLV8yIBK4fv4HRP/M
+lXgiVmYAAAAASUVORK5CYII=
+"
+ style="image-rendering:optimizeSpeed"
+ preserveAspectRatio="none"
+ height="22"
+ width="22" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_synthetic_brownian_motion-24.svg b/pixmaps/src/gwy_synthetic_brownian_motion-24.svg
new file mode 100644
index 0000000..ad3e797
--- /dev/null
+++ b/pixmaps/src/gwy_synthetic_brownian_motion-24.svg
@@ -0,0 +1,112 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8440"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ sodipodi:docname="gwy_synthetic_brownian_motion-24.svg"
+ inkscape:export-filename="gwy_crop-24.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="26.569152"
+ inkscape:cx="8.3921436"
+ inkscape:cy="11.749994"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1028"
+ inkscape:window-x="0"
+ inkscape:window-y="33"
+ inkscape:window-maximized="1"
+ inkscape:snap-global="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <defs
+ id="defs8442" />
+ <metadata
+ id="metadata8445">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-18.260046,-276.07986)">
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill [...]
+ id="rect4523"
+ width="23"
+ height="23"
+ x="18.760046"
+ y="276.57986" />
+ <image
+ y="277.07986"
+ x="19.260046"
+ id="image6241"
+ xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAIAAABL1vtsAAAEm0lEQVQ4yx1UWW8bVRS+29xZPZvH
+ie0kjp3EWVra0gJqHwo0qEIICR5445FHJH4SP4UHhISEkNpSGkqjtkkgaeI4Xsbb7HMvJ8xI8zBz
+zznfdgZ/t6zpBB/GpZDyl0m+rdPzTBgUX2TiPYPVOXEolgjdMtmmRpc3fW/TYxqb/Dvxu9Wrl33d
+N2hXp0dJaRIcCVShmGDc4GSFE5Pizz01FrKlUoLRls4cjTGdcZMbgVndDdYetoq4SCYJXVKIQKjC
+yJ5B32WCYUQxgntRylkpA4V4DEP95oZLVeqsOXrVEIWwmpUkTDBGzQ9XaE0hT+dFg1OVYEDR1lgq
+oAWC+TrFDiMdjWoE86KEmdk8G70eUs4qdQvoiFIWUU7vWWwu5LyUnzgcwCv4mvkNg30TaAxhhSCQ
+5iAqPYw8U2l/1lFtNV9kiOBslmWzdNFf0McuDxi5azEYGxbX4B2GB4VcUQngepdei1pI5AMji5dp
+GR6NF5dzCVcpo0FkBAYD5QB2LxMgfi7RIBeBwtYYPozKcSEoxgDty12fMDo5nZwMokSgO11vfjGv
+NO14FIm8pD9sOUlaAu1/ErHMya7BLjPxV1QWUlqM7Ls8EfL1IJ5NEpjUrBq2EBjj+p16/f06t7jq
+6qwXpqClVogNjQKRv6MCXITJHiMQDatuaUmhjeKKqRCFRpPEqVuQCClRmZXBXg0hxIaFWFbIRlWf
+TtMmx13fOhjEQD4sBJg1OJ91H7YauiKFhBrd0y6eXoQnIbRWTAWk5RWD7Tqq5mhSiEbXT8NEdbX9
+m0tlWpw/70VCur6OKc6jPNgNCCOQBaYyXoF0GZqrabU2Iirb+XonHidlXnod7+y3U7WillkRXS2E
+RPW65XY8MA8gpLM0uorg2Pp+WzF578k5PIvpGa8/oN9/2rJXbdVSrQZg4+k06/95+eu7eccFkKpR
+M+NhTDldXC7AQmCueTrA8Tf9SsOenk1RdkFgQnUngEODVwMYCCYBL1DnKEyvs3g4SKfp1UG/SAun
+5dgrNmwRpIPpSv9FjyhE9RsEivsHfZDHXDIhs0VSAJGtugnb4aw7vx9P+hCBVdtpuTAMggvnwcvr
+SZ7GDWVydMyaHzX7L/rQNV/kQBiwXY3iUS4tiiE/YDDEYXAcwi4EN5eCncDb8iHUIBacB2rehsdA
+JOD87McnK/dXASG0H+byFuwlp4DI5gS6F3HOwT+Tn/x8PLuYUYWKUrhtt7V/g1XvMm9ve/jiVXWn
+aq/Zw8OBv1293V/ogQHK2WsOuAvgg3YtPB7DUoAQ/69ZDqx1X6dWG4OpMgs1X4fAM03pfrUDu6ze
+XwXPp6dTWCdoRMj1/wPeLN1eBqVXHrSxWlucvQ2PQ6I8MzqPCELSWt9b/fgmzGQqbT/a0FwdfgRU
+Y2UuirT843QG0YKv1W4VeqXhAlPVbLbgjRq0RHzJiF7nnW/L8XMkcrsWy2wc3IPcm6OnP83OphCZ
+Dzwtn2faNuyFhDLFULLhm2ScWE0PSkTcY1hxyslLhKlIesRqKatfiOmbcn7ibq2n0wRSNH47gjKg
+QFUGJczfBnKKN5PJFRIptbf/AzDEWpENV5j8AAAAAElFTkSuQmCC
+"
+ style="image-rendering:optimizeSpeed"
+ preserveAspectRatio="none"
+ height="22"
+ width="22" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_synthetic_columnar-24.svg b/pixmaps/src/gwy_synthetic_columnar-24.svg
new file mode 100644
index 0000000..27edf92
--- /dev/null
+++ b/pixmaps/src/gwy_synthetic_columnar-24.svg
@@ -0,0 +1,113 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8440"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ sodipodi:docname="gwy_synthetic_columnar-24.svg"
+ inkscape:export-filename="gwy_crop-24.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="26.569152"
+ inkscape:cx="8.3921436"
+ inkscape:cy="11.749994"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1028"
+ inkscape:window-x="0"
+ inkscape:window-y="33"
+ inkscape:window-maximized="1"
+ inkscape:snap-global="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <defs
+ id="defs8442" />
+ <metadata
+ id="metadata8445">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-18.260046,-276.07986)">
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill [...]
+ id="rect4523"
+ width="23"
+ height="23"
+ x="18.760046"
+ y="276.57986" />
+ <image
+ y="277.07986"
+ x="19.260046"
+ id="image6326"
+ xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAIAAABL1vtsAAAE5ElEQVQ4TwXBW4ycYxgA4Pd9v+8/
+zz//zM7scbrW9hi669QW1SyREocGNwRFIkLKjYhDJK4khAsS4g6JUwiChvTCRVXakNKiVacW7R5t
+u7sz05mdmX/mP33f63nw4D2b9n238GU9jjRLhAOv7ByZ2sFxNapV025y7K1f6vOrX9TjI+00EFhN
+NQIQIgMDQCAokEjMPB+reqqnAuPPbx8euXaKnEFAwyrk7II9fsPaq/ZsfWDMTzVXU20THn3jxhMf
+3v7IkJMxCITpSImbs/STWjyVN9767E7ZN0FmoHtL3D23On++vdhqza8CodPn7j2+/ETF+/TYJ/76
+S93Rrdfeu/2Je0atb06djhT91Mm25oxBk4Rb0p25dOVw469fVZoFY+XSpvLQ5cOGayBhxaKnDn1A
+bgXJIP9Ckd8kCxc/9PmTAEBzkWorPdXvoFlAZ0CnurTtdukWAFE6rt3nsGZAmPQMUZwEYQJKznpo
++GgVOW1f7Rt0cDWZi3UwVuBkFVgbfevTpYOchSj9pN1Z/nWpOdtc/GHhwVvWqvY0J6vkDgOwjuu6
+tyL8dTeNeEQI5xL18qEFQAGAWfOM8Nd3ax2O6+FKmITJ8f3TT/9+fu7wAll9wErHjXRhn+7MIJnA
+atfHLxMBAsBsrL9+5L20dko4fbozK20JJGsnq/lKvpbpu/stx7eYNasEdIzSQyMAREBx5rMPcMAg
+xTxqCRNhJdW7B+y77pt0is78d3PVf+v7G4lBaCMcD7MDx97WUR2QQCcoXAZN9uCWifvxusA42VWK
+2RMIAOO2+C3MMoaiRAKwCA2EoqSlRLcVvzKeu+vLF9EM0PABxaPb7v6rq3BX0TwRZpHmoiSLcMIT
+i7G+zJMK4HRPeQJP91RbaQBIGGxCifB0xS26xn+d5MOVKBCI23KypbieaoEYSHxx3C9dVEbAcCXs
+1sJXF8KCpGqq24pdwow5Yehp3u4bZxOtmCUiAUA91YhgIsSa86N5YNCZ7p8YsAv24yPuSqq7miVC
+xaLNnmxk2kSYjZUGbik+EymaiZQj8CJHTnoyY4jbiRXYVmBlcSZseS7R51MNAIqhJCllqJiipTjS
+3Mg4kFiQKDd78vF1QaOdfFWPLMLdPy5f8nt9R964IieXU20TFiT9lygE2OgIV6CNMG6LhVgtJ4qZ
+xm2Bf796/drdz4Hhc9JS50+o5p/H3jzy6N5/hgySiD3NJ7vZk2u8nbeu758YKG0qd862D7xw6Pn5
+sJVpg5AZxGvvvwPS47gmS1tRmAA8dDHetrl8wXzzaCPuKm4r2LNlYMOujX0bS91q6Ja9/g2lUz8s
+zMRKMQACkb+O3GFyhrPqYUApCpvJGzXz1vZndmzJSYPwSt9gxaZvsWK76ESNXv/kwCWewQxlgzxB
+Mjz6nDV2C5pFTkPOeqyipSM/k6BUc1vxP71sz5DrDeZYsU6VURy1Kmt0Z76tdMmgWqoBgMg0Oeuq
+1ZOACCrmtDXzzbSZt0obyy+9e0cz44pJfsVHgWZ5A5KErIdmkDEgACL0G0TkruG0Re4IqwidAZEb
+M3OmijJyhs3i4PePXfbsbOedj/5ozjSy5jQgsYpQWB4hAvRJcgUS2mXQSXp2P7ACICDz8j3X2EVH
+hYuc9ZyyqxhOhJlddABAd5c4aZ7Zu+/1xe4Flrg+MEPF/wNBwYUQr2nV5QAAAABJRU5ErkJggg==
+"
+ style="image-rendering:optimizeSpeed"
+ preserveAspectRatio="none"
+ height="22"
+ width="22" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_synthetic_diffusion-24.svg b/pixmaps/src/gwy_synthetic_diffusion-24.svg
new file mode 100644
index 0000000..eedcde6
--- /dev/null
+++ b/pixmaps/src/gwy_synthetic_diffusion-24.svg
@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8440"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ sodipodi:docname="gwy_synthetic_diffusion-24.svg"
+ inkscape:export-filename="gwy_crop-24.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="26.569152"
+ inkscape:cx="8.3921436"
+ inkscape:cy="11.749994"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1028"
+ inkscape:window-x="0"
+ inkscape:window-y="33"
+ inkscape:window-maximized="1"
+ inkscape:snap-global="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <defs
+ id="defs8442" />
+ <metadata
+ id="metadata8445">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-18.260046,-276.07986)">
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill [...]
+ id="rect4523"
+ width="23"
+ height="23"
+ x="18.760046"
+ y="276.57986" />
+ <image
+ y="277.07986"
+ x="19.260046"
+ id="image6411"
+ xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAIAAABL1vtsAAAECUlEQVQ4y4VUC1BUZRS+77t79+6y
+y8N1YYXdJUl5ZOSkZFAgCSi7YlJIho5ElsZkTE4+ahxn0h6kYupoD3uBbyd1R3FMKStYIFttKoGI
+EMUFHBFzrLvsA4b6lt2YLTBn/t3578z5v3PO933nECxJ4DAksdkoHkkO+2iiSqpbEienczRcjcX0
+7cJJyQrGH3On4/vRhO/M1nCun95wt33cvCHt7JMTfz+1oOdA3v13e++DiOSoY9PGrYwS7Cse8PbU
+SLWLvl4Qd/3z+QXh/ASOCg5lgu5IOfJJCBRhK07YYhQ9l/bVLY5/KkJGEYSRp5Q0Gfw+hqcA6n8m
+p4gKo5gRwgYgIljSUWnu3mNp3phmK068U+XZau7Lx2OBrqBIo4y++kluivIfiDkaDvkHehu7qiwt
+bz4yTWRmhrAahhQpkg+CWB+taH0nfTxLlerkUsOyzt2zcQ9ALB0v79iZ5WmvsqZoL65/uHVTRs/+
+vFwN1/R66pThigA0S83d+qLQc/nQzeoCXFwXy7v3WsoihcIIPoQmicE+u9TwvLf7jPNcmefSniHP
+rco4FYpEXyfSIvUcdcZsdLft9nQcQHXHU3W/vP1olprbZhKvfJAD1qcrGaL3yPwNMQrHp7lvGUSg
+eDutfcefaKvIRF23v1qYKDBAROZX9AJH+ogz8JRfHS1LoZBoniIy1Rw+whgyL5T3Ok6CV3Mo1/Bs
+0l+DLviiviTJ1bTlj7NPvzpBWKMXYmX0aJkJ71XrlQ9z4A5oNnDtG6/jxNEHI6T6peBs4Hpdx67s
+wwnqn9fNuHmyAP/3jaUXIdWXVKdHoT37S1Phy559c9sqZrpbtp8rTUZHkq24/plE60PaQ/HqbA03
+tjvdre+viJRvMym9nUfB1m9bM/FmbiifqmJnqNj27Y/Br1LDc43LpoD/NBXLDT/jh08AwoYkKVp4
+dGescrXep5OrabO/YESHMySYgveGvLelxuXO71f6vYeBQuIAF/ayqT+umY7LVpMo1S0uDOdriyZD
+iOBSi8bJbljzL7+XjZgdscoXdHIYHGLDlpPlNLFKL2yMUZRoZdcOzuuqNMcLtI6jMAXBEDD16TmG
+/guvORtLh9w3XM3v9l9Yi4GyLUk4lRXtmzk4HxC1i+I97ZX5YTwzijAMRf8P69wtO2AWbBBk7T+/
+uibPdDhRg758EP44aA5ITMd/3oO2tXrB+d2LIBsQe+9VwQGfxalO5xrQCAaaKDeI88L4kejRmoFU
+yLlcJwcFno79TvsqJEOzIzYjWsvTsWOYu60mBBycFNJ7LB+uR7N+mwcgoI3u39tpzHOPjO6qMv+6
+KQPLESMHN2IOQPOwwR3VL0cJScL/7UhMNPj+s7bIEsphUgb7zkM7aO8n7m/l/2yqroPmcgAAAABJ
+RU5ErkJggg==
+"
+ style="image-rendering:optimizeSpeed"
+ preserveAspectRatio="none"
+ height="22"
+ width="22" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_synthetic_domains-24.svg b/pixmaps/src/gwy_synthetic_domains-24.svg
new file mode 100644
index 0000000..c2a8bbc
--- /dev/null
+++ b/pixmaps/src/gwy_synthetic_domains-24.svg
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8440"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ sodipodi:docname="gwy_synthetic_domains-24.svg"
+ inkscape:export-filename="gwy_crop-24.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="26.569152"
+ inkscape:cx="8.3921436"
+ inkscape:cy="11.749994"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1028"
+ inkscape:window-x="0"
+ inkscape:window-y="33"
+ inkscape:window-maximized="1"
+ inkscape:snap-global="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <defs
+ id="defs8442" />
+ <metadata
+ id="metadata8445">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-18.260046,-276.07986)">
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill [...]
+ id="rect4523"
+ width="23"
+ height="23"
+ x="18.760046"
+ y="276.57986" />
+ <image
+ y="277.07986"
+ x="19.260046"
+ id="image6496"
+ xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAIAAABL1vtsAAAEZUlEQVQ4Tz2Ue1BUZRjGz+7ZG7vc
+AsEIFwQBtQjxGjU6YaGWJiY2xlj+kZWjQzMVmuNglzFrposzjTql/WG3sabbRP+IBaKMMQgNIBZX
+ZUGSuxC7sLvs7tlztt85B2O+OcN+53ue93mf9zmfEHZ3SsO1VRucS6PEHG3dbxeTzcYksyFeNOxO
+ti2OErNsc6+WRIml86xf5cRGJK/suy2N1nFG8Lcd3Z8SlWIxAuYogO+XxAV7v5ZGLkXCvvDU3+OV
+O+JEg86SbROh7ji2Thqpk6dvXj/ycILJIJSn2uEGD3i+2ehvqQAmz/TdXf0UbH1jTZpVrQEFmPaj
+a6XRK60HVyMBaiFDe0cXw99t6/t04/gvJUrIo+KnXf+zyO6unuPrF2kaeVoMQm1JVsPLeZSEVNCb
+3zPf1rA3LxKRleCkMjsWGqwKDVSCVGZHNSIXlnnr9ziMBihSLcZA92cDZzfPUbDFf83lq8BHpBn6
+PJMVg0Lc6T+9Kdj/I0S6qMFvtrJPWbQccTr8195BS65dFOjtwqa0QPcZeaZf9vQEXedWRJs4x2Iu
+tBka+BUVKou7q3JN8gP2ualR49rhh/IcJiHfYap7drHiH5a9t3DhtfvsEOsD1s1DF61RQBr747cn
+06G4x2QAyRBqd2TRhHAw1c7v+hdy5eleJTDxfrqjqsgJfbpVtQqu4xnRin8IFeGJloVWIwVqijNB
+Xq8oaHpledD1rUBLTquR9rRBuGTvgHra3cnMyBilKBsaqlY3J1tXRZvICPusiBJiTAJ/7e+uzbCJ
+mTbx7TQHbRMK8Mj+IjsWfLLZoI5G40Xmm04Hm+DPr08NT7V7G/aVJlkF3TlUwFXhtDMFb/2Ltz5/
+giwRG1EQZjtPAIZCGr+6QAsxLASyZlvmpWeyOSbwmxfY2/OxqooTj8WZtydaocYOb8Ne2TeoR4M4
+r4w2LXeYMAJH0OK0aNH6YWmcNFYf/reNhsN3muaZDCDhRdfTiVbPxV18CxqFalCg8xQBmzy/8/ct
+C3EQdykpMEs1Eerqw3kC1rhvWfdHhfrre81qEO+yzB2TPTcwXgncqX4qYwW50CvoudI8uzl9+TnX
+qQ0XNqbpEzmW7lD8I3NlPN1qSf2p5ej5ZJuqghOEx3tld9jdoc7V00O3pJY+YTm9KCY80Uz2I4rk
+az50IjMGgxmwJt8VkaYFJTjla3p1a4JFbVsfHuYPXySmOMLCOeba8NKDbRUFhXHmZQ4TLo7+tJ1c
+6CYI1N+VZCOFGB6RAwgOT3Xc/nILYFTEiobZjk8ikQhgbCZmPJGGUy0HVqsJ8twQfFfLmC1b3R8W
+8iHRyz9nNxfEmMGTC/WOem8dV06u3cSZ3pNFza+vLEuJ0q+oxv357upSgREcSLWj4vLOHF9j2aEF
+9p/zE/UIUbM4wfrXW49IwzVF8RabQRg6V8xt2PXBoyWJVgpwfdGLQPLID7mEBSRxAIkE6lC2qUz9
+kDiDncSZekzN33wYIeh6PN7i+7P8P9v9oynM2QaQAAAAAElFTkSuQmCC
+"
+ style="image-rendering:optimizeSpeed"
+ preserveAspectRatio="none"
+ height="22"
+ width="22" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_synthetic_fibres-24.svg b/pixmaps/src/gwy_synthetic_fibres-24.svg
new file mode 100644
index 0000000..6fed9bc
--- /dev/null
+++ b/pixmaps/src/gwy_synthetic_fibres-24.svg
@@ -0,0 +1,112 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8440"
+ version="1.1"
+ inkscape:version="0.92+devel unknown"
+ sodipodi:docname="gwy_synthetic_fibres-24.svg"
+ inkscape:export-filename="gwy_crop-24.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="26.569152"
+ inkscape:cx="8.3921436"
+ inkscape:cy="11.749994"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1379"
+ inkscape:window-height="1023"
+ inkscape:window-x="531"
+ inkscape:window-y="33"
+ inkscape:window-maximized="0"
+ inkscape:snap-global="true"
+ inkscape:document-rotation="0">
+ <inkscape:grid
+ visible="true"
+ enabled="true"
+ spacingy="1.0"
+ spacingx="1.0"
+ snapvisiblegridlinesonly="false"
+ dotted="false"
+ originy="0"
+ originx="0"
+ id="grid1px"
+ type="xygrid" />
+ </sodipodi:namedview>
+ <defs
+ id="defs8442" />
+ <metadata
+ id="metadata8445">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ transform="translate(-18.260046,-276.07986)"
+ id="layer1"
+ inkscape:groupmode="layer"
+ inkscape:label="Layer 1">
+ <rect
+ y="276.57986"
+ x="18.760046"
+ height="23"
+ width="23"
+ id="rect4523"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill [...]
+ <image
+ y="277.07986"
+ x="19.260046"
+ width="22"
+ height="22"
+ style="image-rendering:optimizeSpeed"
+ preserveAspectRatio="none"
+ id="image3626"
+ xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAIAAABL1vtsAAAEQElEQVQ4y12UfVBUVRjGn3PO/dx7
+d1lBdhGIj0VFndQxEVHRUZIZp9LSGMJJGNHKyWaKcGws/6mxdCo0FWuqqcacbJwUP2q0UrJSQjHN
+/MCUJLFhmBFQGFvavbvLffvjwgK9/53nue9v3nPOcw8A/LY+n4iiHfWZKq/waaGrNQI4MjuFButG
+zQIA19+e7ywPzfBxoNAjj9NE5PYhuDgif39DRPsnj2LAvWOl+yYkyAzBU+VxxJHZKRqD1VZHRC1b
+iwSw0qcBOF0xiYhQ7FWoPxK6WuOX+Uq/Fus6N8WQliSq8X6K9lX6tWmGRETBM8/7ZP7IKGVpkjrV
+kKJ3GogIB6YmEtG+CQkC6Guq6j2xHMCF6rw4wbbuBTTxRoZhtdXlm9JYTZwsGQfgp7JcIiI7hvY9
+i0OXt3gFq05zEdFbmcZoiUVuH4wjQs3bGPBtcUa5T9MYflk9Oc+UCj2y41o3P4d166tNmYbOETxV
+Hmk/liLzqlQX2ZE4oumFaQB2BNwALqyb8eNT4wG01hY77puZBsItn2oc7wVMImp8bsrwk3dqU6Yx
+URcSw86Au+9cdYrMy5LV/mAbEfUeX65zoDrNlSix0JV3bOtuWbI6URfD+2M9zQVuGcAqv0Zkb8s2
+FYZg4xoiIjv6SrorU+UAsDfXQ0Th6x+oDHXTkoYjeo+X6RyFHjnaUX/3aKkzC5FNRMGGSg5U+DQE
+NBHrPu/kQmYINqwaus2O+nxT4kDnwSft0J3S0WqqwkPN24nIjtyv9GsTdOEVDCdLxhFRpP27SS7x
+RNJQHOx/O1b4NK9gbsGinWeaN80FcOLxgON2HS5hQLbKc3WBaNdZImqtLQZwaeOswQHu78pxA5jj
+ked5ZKt171RDyjelaOdZh788Wc1QucJwccNMOC0vpuoZKo/1NjvLE0sCAHaP94zXxZYs8+s5KQCu
+vD7Hca9tnqcymIK9mu4iIhBR+PqHJmc7Am6yY0TUsq1IYVg7Rm/f85gzfJLEqlJdAxsMdS5OVCSG
+HE1YN3cPIA7l+xhw58AyIuprejlV4QVu2frry6ML0r2CrU93JUqs79w6B9G6q1hiMDh+fWm6oyDW
+fX66KS0apRBR+M/PCtxyqsLD13bakd7Vfi3PlAAcfTh9MCZXFnoVAK894IofPLqOlDhPhh3ufiZF
+VxhathYRUaz7fJbKTcGKvUp/X7vz9aWNswDkaCJ84+MhxNoxeprCrba62hw3gO8fzRr4uy5vFoDB
+2a2PFg3ec2R+giwz/L5h5vD4wcXxfo77dMUkAO9mm3Hjh2VjAWwPDCmNz04e2EJ/eARC57i2eZ7O
+8XSyZls9jtrf+8dCr5Khcqv1i4GgdJ7JN6WAJsItn9DIwtIkNUvlDxnScO9wgR+A84I4tX9K4ojs
+DUcUJcg+mf/z84q4FGxc4xHM4Kyh8kFH6axbpjLM9cixuxf/129bPf8Brx8Smm+gevoAAAAASUVO
+RK5CYII=
+" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_synthetic_lattice-24.svg b/pixmaps/src/gwy_synthetic_lattice-24.svg
new file mode 100644
index 0000000..5fce5c5
--- /dev/null
+++ b/pixmaps/src/gwy_synthetic_lattice-24.svg
@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8440"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ sodipodi:docname="gwy_synthetic_lattice-24.svg"
+ inkscape:export-filename="gwy_crop-24.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="26.569152"
+ inkscape:cx="8.3921436"
+ inkscape:cy="11.749994"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1028"
+ inkscape:window-x="0"
+ inkscape:window-y="33"
+ inkscape:window-maximized="1"
+ inkscape:snap-global="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <defs
+ id="defs8442" />
+ <metadata
+ id="metadata8445">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-18.260046,-276.07986)">
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill [...]
+ id="rect4523"
+ width="23"
+ height="23"
+ x="18.760046"
+ y="276.57986" />
+ <image
+ y="277.07986"
+ x="19.260046"
+ id="image6581"
+ xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAIAAABL1vtsAAAEOElEQVQ4y3VUe1BUVRi/LPtmd8EG
+aVmanXhWEhopohBizgQIpDwEkUxnBOwhVJjThDZaTkONOTROiqZDlqUG+QBWReVhwiywxEtAIByX
+hWXZFwss7vPu3Xv7LpeWhanvjzPnfN85v/N9v+93DkIQhLXvW6fxb+czuTQvYqwiGTwOXSuMtpEL
+ssLI4gCudeAkLKX7XsXROXSsuvIVb8TdcHS2tSBCXp5InnlyEVXdgwlu1epuZl4KE3BpyK3NAU7T
+mH20qiyQZ5IWQFT169sxAsYixNyDdxozQ9rfX2Nu+wDCTvOEqWXvfCLtrQWrA1m04RObYTl7f1ec
+gFG/Pcg598Sha6uN83fLwqYn/jXIqCkr7MpLgsnL20iUycbO4nXmjoMwB9xnzbvhPmNDLiyn63bu
+e569AGEbOm3p/sIkzTM2kTFL73G4n1g0J1RB/JeN/5S8X8jJF3KQj0ScHF/Wm96Mns+jqZhD3WTp
+KoEdA8ffAArI3RXJsg9f6yiK/OvjtZ0H13UfisKme8E/cSkVeEGSVjCD2J6QjuxAJJlw856KUMHu
+lWwRkxbApCl+TAKnvDwBeHXZWh4dsLCpTupKBFjUVKYNlm4C8kgIacEW7wW2PRBkpGwLOJW/pPox
+aO59XONFhytxq86hfoAsq9DcXlj6Is+1FWoBp/ZaBpWpy1JWMGfrd5HoP6cgbftXQ9u01zPM7UV2
++RWK7ZIXuNDOQwHcns/Wg2fmbs5RsZeYtZhIbawQM/RgetnN9X4LrjCOZ+pzzMaMEFR5C85o/kgf
+v5hiHSjDLWqq27ahH0bPJUriRSCwk4E81W/bqMsSfJhLlCpk0Fr2rHJoHrqEYn962SDJsg2XQ3fJ
+DhtH0Ik6VHkbBIabVTP3cuoSxMgyq472QyfrcdvU5NXtD3Nf/i6QF82nfyX2an531fSdnZRqMX3H
+/KQNRmx2cMn5bF8WAEMAJJi7ku0eOhvMt49WAnRDesj0nWzY01uyQXstHRCXQEAVuFUDfaqJEbr7
+obuPDm8gtdt1+IA/R/17GsyHvomP92bUbBQiLp4hW0vPMYg9PZMAbXeHKPTnWLqPUDf7eHooLmwl
+t51+i00dVZzfejdR/ImIC+oi/47BU6eC+MsIgqeM2w12+dUzwXyX3iZceiN5t6itfaV2xXXCiXYU
+vU73WHIeno/hdva8ilLDuaTA+r+MhSV8KKGU3vTVmQBP9dAkzX9PyKH2Ucb39KgK93Go/8RmHks2
+iaCKLF9W16dRFOUNacFQGhLFo38fxGvNj4Bc0LEbQJi+ZgdQ1bI3/NGRjaNnE6ckWfPoeU07QqF+
+s6wYVd13fQXkM6MMioQvz2kcJv7HUKWEwDFqjhm6nWYlqAO3z8BLWYCADxK+L9vwOZDT46/jdDcy
+yVeobVGcT+o7GgMpkEz3n9BUpfcfi4XXgY5LIFMSerz2H59LCzg5KV08AAAAAElFTkSuQmCC
+"
+ style="image-rendering:optimizeSpeed"
+ preserveAspectRatio="none"
+ height="22"
+ width="22" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_synthetic_line_noise-24.svg b/pixmaps/src/gwy_synthetic_line_noise-24.svg
new file mode 100644
index 0000000..7890407
--- /dev/null
+++ b/pixmaps/src/gwy_synthetic_line_noise-24.svg
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8440"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ sodipodi:docname="gwy_synthetic_line_noise-24.svg"
+ inkscape:export-filename="gwy_crop-24.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="26.569152"
+ inkscape:cx="1.4103626"
+ inkscape:cy="11.749994"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1028"
+ inkscape:window-x="0"
+ inkscape:window-y="33"
+ inkscape:window-maximized="1"
+ inkscape:snap-global="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <defs
+ id="defs8442" />
+ <metadata
+ id="metadata8445">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-18.260046,-276.07986)">
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill [...]
+ id="rect4523"
+ width="23"
+ height="23"
+ x="18.760046"
+ y="276.57986" />
+ <image
+ y="277.07986"
+ x="19.260046"
+ id="image5457"
+ xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAIAAABL1vtsAAAA80lEQVQ4y2OYrsxLHkoS54AghlIZ
+LvxosRoffsRwpcEaE73ZFEI8YiBJNU2M+HIkkeH3q2Nko/9gwPD3021i0PdrEyHo29kqNMRwpdEG
+D1quzkcQMawxEAaiIGF2e35W8hADEwNFSIiFkUGenQmCYkQ5IIiBOODIzwpBDHsCVY6l6N7qdSIb
+MZCk+kyhCSZiuFRnBUQnMvUxEVYNWIy4WGOJjI6n6SGjDRbiBBHD6TwjChHDl6OpFCKGxwu8KUQM
+L1YHwtHbLWFkIIZvFxrh6OliXzIQw5djaV+OJGGin/eWE4kYMDMvGvp5dzEm+nFrLhwBAMfW6jnU
+s8CnAAAAAElFTkSuQmCC
+"
+ style="image-rendering:optimizeSpeed"
+ preserveAspectRatio="none"
+ height="22"
+ width="22" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_synthetic_noise-24.svg b/pixmaps/src/gwy_synthetic_noise-24.svg
new file mode 100644
index 0000000..bf42485
--- /dev/null
+++ b/pixmaps/src/gwy_synthetic_noise-24.svg
@@ -0,0 +1,115 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8440"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ sodipodi:docname="gwy_synthetic_noise-24.svg"
+ inkscape:export-filename="gwy_crop-24.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="26.569152"
+ inkscape:cx="1.4103626"
+ inkscape:cy="11.749994"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1028"
+ inkscape:window-x="0"
+ inkscape:window-y="33"
+ inkscape:window-maximized="1"
+ inkscape:snap-global="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <defs
+ id="defs8442" />
+ <metadata
+ id="metadata8445">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ transform="translate(-18.260046,-276.07986)"
+ id="layer1"
+ inkscape:groupmode="layer"
+ inkscape:label="Layer 1">
+ <rect
+ y="276.57986"
+ x="18.760046"
+ height="23"
+ width="23"
+ id="rect4523"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill [...]
+ <image
+ y="277.07986"
+ x="19.260046"
+ id="image6156"
+ xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAIAAABL1vtsAAAFPklEQVQ4TyWUCVRUZRiG/9m3O1dA
+BBkWAVlyTUVDjkKSa4hiApIaZW7nmJqoFKhU5r6TJhbu1HHXJBY19wiNHQdBIFYFXGBQwblz752Z
+O7fXmjNnzsyc+/3/977v833EfG/pCJ289fA01rhVFMUYF9X5oc4nAmmu/jDfejHVS3s7PoirOyT0
+NjzaGnFhmHNbVvRwnbwyJdTBdTk4U/4HXsTafm3zAN1YvUJ405zuT9XtnLDDl5rQR9Hy81S7qXyY
+Vj7DRWkxbhlNydnqfcLrWtvzPytTQ/H80v6a2L4qa8cfZI6rqmZz+Osbc69M9GKKVpwb7JRk0OZF
+eho3hPGNWYcD9E4ySaKbOpxWVH8/fqBaxtVn8i3nfwrQm+8ttlRsQFPkXZ28IX2itf0K33rJfG+J
+/VVN9lj37FA3e1dJZB9Fmrdu0wDdZCdlCCW/FRtg764cqZOv8dSiBbupzNqWv8+PIranN5m/l+Ng
+lEFh5+XYp6dnstV7mdKvylaPHk8rjgbSaLto2YhvvHVCb+OjbRFxrqqHG8dBJq7hm0+T5R4a0c5A
+f0vmNFGwCkw7W5PeRyZhjVscTIfdVGp/WXV3bvAqg8aglP7gT4miQxQ4fEY5K58cn86UrCVwcahW
+ttqgfXk1AaLQbYBaZqlI6/o9zsG+6L09X+ipQ1No/nQwvdBdzZQmM0UrKamEqz04v58a8gkK0K39
+VXV58himZE352jHHAun7i4eZcuM/c1MzxUkOthP172hk5oLERe5qB/8KPb6+PhdZwLUIWkFyww2I
+4LfR/XxV0tKkENuzOxeGu7SdjL6TELTJR7fbj8KFPiopMnaRS9BvgqsKlyOB3jvzn5+bBWsIWIBP
+0IZTET7OAlp8069d2XFXJnmzD3fO6qsqSwqBf/8ZHGLrKkJMgMBSlgosRRtD7n4c3PTjZMTZcWrm
++SFObNWOruxYW+d9eIYgmw5OrkoLK/5iRHtWdE64R3PGlAepofizZOUoGSGZAXqESLrz5igkBMBZ
+jJtF2xuUeSqlB/z17KP9BYmDV3hokLr18eXVnlpz4edgHC3jDY0woufWvJzxHgRoHg3UeyulcASw
+Wyo3Cr1NUkK42gwE5OBfigLPN59FLo0HJvHNZ0RRmOmiUkoIqj51U58Jpgleg7Wy/EjPb310aBWG
+cQ3H+ykk+/31Dq4bvLMPdyGa5xc+2utHgQAvpRRetGZOA51yCbF2XCfFy0eCOcT75FjUOPrt8Ni7
+K2wv/nrrS016mF6BP53lEgyL6LBFuyhFm9lS+R1IN+XEW8rX3U0IJphFNAJXciMMee8bUAPl230p
+cHUjxv/aVJ9rHw6wPNiEZ0w5cdlh7pg3wfz40ihXjZSwVdsgmdRsCd/jR/ENJ4ENWF7moeFbzqGy
+btcEY1oYIixZMbJwwRCu4QRTljKKkkOj0FPvsDx9fCzK2n61cf8k0p0bj5B2+lKYpRQvbaBaBrSA
+LBDMGKhf760FfwWJg7j6I4gfu8NcuGibL9WdP6fn9jyoezsjEHIqmEaonZdmg07oBM7/L5XF/TUV
+yWNuzQ5oPjQFcwgXQCrE48vNmIExfVWgDs8QYKuSEOP6sVlBNLYYfIJILALcXPDJIAzVkv4a5I2w
+8ZNv/MXalgtkare//+xsjGhncR+BmPo9kZCDRHB2sqcWC+bFxdlNGVOsbXmYt7rdkfAY2/RLg6bt
+xHRLWco6Ly1oYopXXZ/hh21AzIUL4QWixixDFC2TgBwswYlOSgwOsjgZRIMUOLfAXQ2l3D9HnhyP
+wk7G6Rjuyq/f+xd9brY4S90M/QAAAABJRU5ErkJggg==
+"
+ style="image-rendering:optimizeSpeed"
+ preserveAspectRatio="none"
+ height="22"
+ width="22" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_synthetic_objects-24.svg b/pixmaps/src/gwy_synthetic_objects-24.svg
new file mode 100644
index 0000000..bc9eab5
--- /dev/null
+++ b/pixmaps/src/gwy_synthetic_objects-24.svg
@@ -0,0 +1,105 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8440"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ sodipodi:docname="gwy_synthetic_objects-24.svg"
+ inkscape:export-filename="gwy_crop-24.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="26.569152"
+ inkscape:cx="8.3921436"
+ inkscape:cy="11.749994"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1028"
+ inkscape:window-x="0"
+ inkscape:window-y="33"
+ inkscape:window-maximized="1"
+ inkscape:snap-global="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <defs
+ id="defs8442" />
+ <metadata
+ id="metadata8445">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-18.260046,-276.07986)">
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill [...]
+ id="rect4523"
+ width="23"
+ height="23"
+ x="18.760046"
+ y="276.57986" />
+ <image
+ y="277.07986"
+ x="19.260046"
+ id="image6821"
+ xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAIAAABL1vtsAAADDUlEQVQ4T1VUiVbbMBDUiXM4hhQe
+CSm8tr/Zv6UkscMVfMWHru5KNgG/fRvH0szOjg7x92H2K+K3y2nykCzuk+Q+IY5UWQVRZyXkfWf2
+vZ1QWhgLL7vepp2B3DsSHrG54DeLi/gujtchFoxTJhkTITjLSkm1oGRpqKAQRFICL0BXW6QRq5kA
+2HwdzwPFXcwjfqYIL1kJU01vBDUSKZBLMrLrbG6cx3+RIJMVlYt4s/1GIRnggYWlpazINy2dEVh8
+NeCj5Q2b39PoB2FyRrfYhSfigqlGMR4UVSJvgxYZiIJ4yJPrJZv/ZLOfbLrCMkxMofrgCOvLHhsc
+/8r3RqAKryjgZ7eXUJ/N7kMGFT4uImDBXnh7bOT8zAghXmrJKPoCXUAvAziwxL9xraxypqF9zqNX
+WCOYM7maMMnPBgFLVmEj1jjTGRaVrnu3fIrFAX7a2trHaVtnFSzdAspMV4lI0Rog4qMcsKbY5lab
+eG0jq4jtCWZlm0NgOT3nqtGw3zjYBE4zkYjduFjD2otyW1htIWJtJyDeauc0Kqp37duxeW+Sh0ux
+uMMe4z8gECZMrnRfduguZ7i1im1hPIUPM7tFFU6V3fG1ykrd6PajFZMD1McG660u03H7Y67SUhRP
+OQhHvBqI5msF7lT+gPRFN2hcWwE/zSHABnxWvVRKpEW/0vlXCnwxLtSBRqyxRpnAAorgY30Y8G95
+C+dNPHZGObfxpn5SEDoe1uf6zK6MqhVIqFIc+nhv9h2cXSP+tWAF0Y5s9mWwAzKXDKWm1fHtNNqE
+4RtEfPFS7/wlsPcqwD0CQiBvDnWwVk4lzMvfTk+g8SuLsYEigEHC/rMRhStJtHX6FQHRIioP1c7P
+60Cjba23AxYF8CkgOzuwwElN+7ATsJegRR/bZa1CEbgRagOj+H2tc37BD43edaE+jr5qh6v9AvvA
+mgGP4VrrfAULBXNDxyE3g/5HC2A0U6hLhPvvwzjV2oD31pAwFXqJKPmkTjgb1HmW4e4k4wMX4WNr
+lB0KZqNbsIeVtwnytXCfFpgR+B//jR7IbSRGZAAAAABJRU5ErkJggg==
+"
+ style="image-rendering:optimizeSpeed"
+ preserveAspectRatio="none"
+ height="22"
+ width="22" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_synthetic_particles-24.svg b/pixmaps/src/gwy_synthetic_particles-24.svg
new file mode 100644
index 0000000..7a249f0
--- /dev/null
+++ b/pixmaps/src/gwy_synthetic_particles-24.svg
@@ -0,0 +1,112 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8440"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ sodipodi:docname="gwy_synthetic_particles-24.svg"
+ inkscape:export-filename="gwy_crop-24.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="26.569152"
+ inkscape:cx="8.3921436"
+ inkscape:cy="11.749994"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1028"
+ inkscape:window-x="0"
+ inkscape:window-y="33"
+ inkscape:window-maximized="1"
+ inkscape:snap-global="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <defs
+ id="defs8442" />
+ <metadata
+ id="metadata8445">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-18.260046,-276.07986)">
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill [...]
+ id="rect4523"
+ width="23"
+ height="23"
+ x="18.760046"
+ y="276.57986" />
+ <image
+ y="277.07986"
+ x="19.260046"
+ id="image6906"
+ xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAIAAABL1vtsAAAEnUlEQVQ4y3VUfVAUdRhe0NNGnMzM
+Js3+cGqSgSijkRmmyRKnmppiJFHLwQYzmTEsG2aCdMzBNEBEDTRTQEGRBD0VwSCGDwX5yLvj47jj
+Du6Eu0M5vM/dvc/d29/+3n4rimj1/rFz8948z7Pv87zvUtTD2vhxpG/kMg5YASPAIdFn4Y2lgi4f
+0QMg+EgTcy5sb1dWbsTmMsToMWfH/nFwdk0xUO/HLfIPn0KsEUIs5mnMDlrasoPq/cjdD4KHkGLO
+GZpoBXVmaLyR4CUlkRM9RipiVtgkRXgYpTqzCRw1wKoEexc2lTceS+o6lSRYLonsEPZZCJegO3pm
+z3vieJ2kL3KEWmQGqdO7VxP8JM1LC+d8s/7Ny0UbQ/0/84Zit7bMpjwc7N2F9Eew6XRQe4hT/2Jo
+2MFpcgXbTaKPmEGYuEqZ23Pefu3ZqXFkM8PSPouBiSpEayVlWhswVp7NTvgjby1Ya5BTgRx/86NV
+QXU2Nh4F0+GijJXUHVXJqhVLpihmyWaczkkGVoF5tzQ/T0sYdTav/w15DBBipA6ttXTkx0c98wBj
+6ToSH7NwOkVZ7nrw9hBTARDBEGVekxMyV0lhgRQWeTsinBD3ULjx+OeyGdT0kgaxykXWQDCIHQ6M
+VDcfT7KpCrFnMiy3yGjNHfmxr85/AHh96bzJHySaLYmRx/ckns1bF1Jm4tsnhbELnOGkr3d/a2mK
+tWWHOFYNHhWZEaznL+V98phs2P08SDS0+ndw3gBHm2iqkBesHb60mTeWCdZmbL+BRiv0tekVBzYQ
+p1I/jX5+3mzqiSKhkGiQqx9zDuBdIqPz9BUEtIXI1TfZQYwOzCdWRL8gmxkeHh5G/btIKMQh4hOI
+IeIZcYEfPcebqrHPPNUB99XY6Bep/6u4qAWmjsMiq5eCEHzYO8qojwX0xeQWpjpgLo96+bn/xi9a
+MDt22Xx1dSpvlgPTD+wAWeHOs6l3Grfx5guiuw88GuFu3d3rWZlb3vlqTcwriyMew+9KWd5W+a2i
+br+je19AmdVzcYe+PksYzLV25zM9h4KaPLr7p2untov6AsF0HlxNcO9C25m0yCVzH1GIw0VAK8Bn
+FGm1MFopz/uwtSQFJhowqyfXFbI2M4rd8gMfgbVW9JqAc5AnGr92uSDxEQW4ruOgjZwd5hnk6vX2
+7vVrC8kJgeAHFBB9ZnIRXuVOsqMQ8gCIILDIpeys2j6NgukCcg7kP+RHtCaoPcgZigkSMA9YwIFx
+fuyKV5GFbDfJ90JS4lzI3tle8fU0intyoknCF/1j2NZyu3br3dYfgVbh4AR5O+RSezWFF3NWiyMl
+yKmS5nX3+nUlB7fHzZ0jezpipkRRX5js1pSCuwkcVwZqMuKjFnzxwTLHrQPgboCJP7nhk96evXUl
+6SH1Pl5bMNCYa/hrJ92yrasirb7su/LcdcnvLqWu/LrhVvmGjC/jN695I+b+vZDdS3hr8abE5bVF
+awO6Y4KtA3w68o2BkaNbk6LP7VnJDxUDrSRNYDqCfTkUuQj/UNnB7xOekj25tg0nUoR7bThoJ75K
+T7ojO33VWOsPolNJHCHeSSvravoH5iBuzDbGoQAAAAAASUVORK5CYII=
+"
+ style="image-rendering:optimizeSpeed"
+ preserveAspectRatio="none"
+ height="22"
+ width="22" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_synthetic_pattern-24.svg b/pixmaps/src/gwy_synthetic_pattern-24.svg
new file mode 100644
index 0000000..cf0f0b0
--- /dev/null
+++ b/pixmaps/src/gwy_synthetic_pattern-24.svg
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8440"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ sodipodi:docname="gwy_synthetic_pattern-24.svg"
+ inkscape:export-filename="gwy_crop-24.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="26.569152"
+ inkscape:cx="8.3921436"
+ inkscape:cy="11.749994"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1028"
+ inkscape:window-x="0"
+ inkscape:window-y="33"
+ inkscape:window-maximized="1"
+ inkscape:snap-global="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <defs
+ id="defs8442" />
+ <metadata
+ id="metadata8445">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-18.260046,-276.07986)">
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill [...]
+ id="rect4523"
+ width="23"
+ height="23"
+ x="18.760046"
+ y="276.57986" />
+ <image
+ y="277.07986"
+ x="19.260046"
+ id="image6991"
+ xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAIAAABL1vtsAAAB6UlEQVQ4y2NggIFv5+v+w4ApDwsD
+Bvh2rgauwJwXiwKGB7M84Srq5bgxFdyf6QFX0IRNAcP+MDW4iu3ucpgKDsdrwxV83BMFVA+0Feh2
+hIp+JR64ilu9ThBBOXamDAnOtUYi58vMft5b8R8bQBixSlsAWQLo8z+vT/0nAjCcLTZ9tz385+0F
+//98+08WYPhPLrjebg8MdVDc4VH079vzHzemv94QcjLbcJk6X6Mc97czFXDZFAlOaBDAhX6/OPjv
+1wc493KDNWaknCsxhStYocEPFV2pJZAgxiHKyghk7/RUgKsA2oxpxBp9IbiCU7lGWJIGMP7gKoDu
+x1SQhqTgzSYsCkCpAK4CGAqYCqTZkBTcnMmAFcDTAjAssSr4/eoEVMH3l6oczFhUfDtbBbfHgpcV
+TVaKjen71X64gq/Hs4ApECMvTXeHq9jqKCPPzgT0PzAUgXHxfmfEzzuL8CVwIPARYvu0P5rk1Hmm
+0PjdtrAft+f9+/mWTgn876fbcPavpzsLpLgIGAH0PDD+gakImBbjxDhEWBiBQQN37++Xh1ET+MvD
+X0+XPF7o8//vD7hgpiQnZqwBfQ1XIM7KxLBKRzBJnAPEggFg3oerAKZ9TCOAYQdXANSLJWkASxC4
+CmAOwlQAjAG4AqALABGESq8liHXKAAAAAElFTkSuQmCC
+"
+ style="image-rendering:optimizeSpeed"
+ preserveAspectRatio="none"
+ height="22"
+ width="22" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_synthetic_phases-24.svg b/pixmaps/src/gwy_synthetic_phases-24.svg
new file mode 100644
index 0000000..d90a66b
--- /dev/null
+++ b/pixmaps/src/gwy_synthetic_phases-24.svg
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8440"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ sodipodi:docname="gwy_synthetic_phases-24.svg"
+ inkscape:export-filename="gwy_crop-24.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="26.569152"
+ inkscape:cx="8.3921436"
+ inkscape:cy="11.749994"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1028"
+ inkscape:window-x="0"
+ inkscape:window-y="33"
+ inkscape:window-maximized="1"
+ inkscape:snap-global="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <defs
+ id="defs8442" />
+ <metadata
+ id="metadata8445">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-18.260046,-276.07986)">
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill [...]
+ id="rect4523"
+ width="23"
+ height="23"
+ x="18.760046"
+ y="276.57986" />
+ <image
+ y="277.07986"
+ x="19.260046"
+ id="image7597"
+ xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAIAAABL1vtsAAAA7UlEQVQ4y5VUOwpCQQwMNoq9pVZ2
+XsIz2Np4DsELeAhvYmdtLVh4CEFsZB2MxrzdfHjTPLJkJ8lk9lH5gH7g8HHe6bBNANaTUeeozeAQ
+XHFCTuElkEbfLgxwxnY6jklFHaN823lV2Rie6Hk9/M8DzTlEg1UCdlEU7N7i+e2cy35Zujiu5un9
+L0Vx4KkrShlaALPhwCv7ut/cRvgDhdPJ5eS0WeiOqJd4fEd3ZBSBiuZQmqimEJOkS3X7Dd6iCCTu
+sh3ovZF405ilpjCd690XvQB4MinbOlX72PWs+a7zv1bqjiq/s/KUAtkBO/bwBhJtx0U0p5PfAAAA
+AElFTkSuQmCC
+"
+ style="image-rendering:optimizeSpeed"
+ preserveAspectRatio="none"
+ height="22"
+ width="22" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_synthetic_spectral-24.svg b/pixmaps/src/gwy_synthetic_spectral-24.svg
new file mode 100644
index 0000000..9142a38
--- /dev/null
+++ b/pixmaps/src/gwy_synthetic_spectral-24.svg
@@ -0,0 +1,112 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8440"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ sodipodi:docname="gwy_synthetic_spectral-24.svg"
+ inkscape:export-filename="gwy_crop-24.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="26.569152"
+ inkscape:cx="8.3921436"
+ inkscape:cy="11.749994"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1028"
+ inkscape:window-x="0"
+ inkscape:window-y="33"
+ inkscape:window-maximized="1"
+ inkscape:snap-global="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <defs
+ id="defs8442" />
+ <metadata
+ id="metadata8445">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-18.260046,-276.07986)">
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill [...]
+ id="rect4523"
+ width="23"
+ height="23"
+ x="18.760046"
+ y="276.57986" />
+ <image
+ y="277.07986"
+ x="19.260046"
+ id="image8083"
+ xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAIAAABL1vtsAAAEqklEQVQ4TyVUWWsbVxSeu8yu0Wgk
+WYvl2LEdO3FCvDUJoRSah/YfFAJ97x/Kf+hzIVAotIVC6RIS7DR2FS+y40Sx9hmts8/c26NUXMRs
+95xvO5c2nn0lGXKmkpHzFYGz4dnV2fOT44POhzDtxSzhwppCFiUcc2G5oO59t19+/ETAlIdDgciI
+SFHvDW38eKaXM+XdqlELYzdO/Li8W0EYKQftQcLClAeMe4zLGHHOB/V+Gv3KYsYZ1xb07I0sfEl/
+r9uobm+9+GiUdDkr1x4tVfer2Rsmphi9vBYEYXmjkKkaRCJUpfEsOv7+6Lwzg7o1mVRXc9atAlWw
+0PDTUz/BdriXEcvbFaVYki2/vDPDIjFXzLWvN0h2k4XO5PLi9Ie3v1yNnzsh4Lohk1U7vFu36Zal
+MB60IqDNqxIGeNCZJ5FW0m+W9fy9u/LatyS3lQ7/NcJn4SxsRqwTMQkjxgUQC/kJrT2qae+GQEng
+QnYpKxuSP+glfqLmVa1SE0ufk/wuFCWFfWLekTJ/mQRtqnRFwds61TCCWrS0XQbmsMF3/DRKYUXT
+SCtqolXDSpmnAfe7SC1DFaRWzOXcjt5SMQKbbi2oWkGD59TtupggURNjL4Z7UZeMRYNkV5FkMq+d
+jus8GNDqEx67bHySqWZ29iorgJpifUGHxuAObfx0DviTKGUJkzSRyARhzKMRC3qji9aw4WQqrcKd
+v4Ga03DAdbDcWs8H4wDBD6NgFNDTvr/uJ4Af7rO1rGKpgeOHk/fgvG97w3fD3hHqHLYRQWmYguvW
+RsFatbyBB8vtztIooSnn4zARey5YCOYTmUazaNIco0/swlHg9r1+vQ/XeglIykTEXBBAuN5R1zm3
+51oETIClfSKWhOnk4xi6hdMQCXOknAvQ4Dpk2E82vdioZQG5d2Y3/2xetGfXEbMoom+9RMHUXDYL
+t4uDt30gDP2VnDLPeE6VMlLO8QEupADwzqk10OTjZDzw/vclByX6n2YJwqtXMkBvcj0RVRGu9aKW
+XckBkHn19yP4CFMQGnu2B9WXdspqXqMyoZpIvzDF7QXYJGGMgG1u1SIiyW8UStuLtLDPU8jIC/W4
+C2FJwySchMBRK+rFraK1ZhGJYgnTb57eM1ctSRcRwVShokLThEF5rC0hucjdZuzHYL7AOegNclJV
+VCwFtJOzShqnYDa9/fRLeD19fwkuDE4H3cM26AhjquTrpH0KXnRfd3jCzJs5o2YABRB7HoehD45O
+mhPARQUWh06n/fK69ar15nJ05CbrCtHPbEja+GrUqvfthC1lJL2sS7oEACHN81D0XfvMfj0MZymj
+Vz8fzFrT9mH74Hr2chqnXHhoUNlUIO/T1hT2wxOeMrfv9o57sNk+6dujYJjwEy/5bRw7wLr5xweg
+yiKwTCiI+L5G9x8vLdxbgBLBSm45YUmQqAUN/iHsvuOF0wgiYxABzos1hcU+pxBnOPhgfj4TnU3H
+X7xfqj5YVEwFIgSzA/1BMDjglLwKRa2NPJxgILbbc0eXw63D9j+zmAoYgU6Vveriw9ro3QikggVJ
+h2hAc2vdgmGB2QW/Zu0pJDi39Qgba+nwuPPiFbx6cG7/ByixsgwJXiezAAAAAElFTkSuQmCC
+"
+ style="image-rendering:optimizeSpeed"
+ preserveAspectRatio="none"
+ height="22"
+ width="22" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_synthetic_waves-24.svg b/pixmaps/src/gwy_synthetic_waves-24.svg
new file mode 100644
index 0000000..c4af483
--- /dev/null
+++ b/pixmaps/src/gwy_synthetic_waves-24.svg
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8440"
+ version="1.1"
+ inkscape:version="0.92.1 r"
+ sodipodi:docname="gwy_synthetic_waves-24.svg"
+ inkscape:export-filename="gwy_crop-24.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="26.569152"
+ inkscape:cx="8.3921436"
+ inkscape:cy="11.749994"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1028"
+ inkscape:window-x="0"
+ inkscape:window-y="33"
+ inkscape:window-maximized="1"
+ inkscape:snap-global="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <defs
+ id="defs8442" />
+ <metadata
+ id="metadata8445">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-18.260046,-276.07986)">
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill [...]
+ id="rect4523"
+ width="23"
+ height="23"
+ x="18.760046"
+ y="276.57986" />
+ <image
+ y="277.07986"
+ x="19.260046"
+ id="image8168"
+ xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAIAAABL1vtsAAAETElEQVQ4yyWUa2iVZQDHn/Oe+3nP
+OTprzbk7m5szrVC7aWUoTtG0y5eZfQm1xBAhk0SYdkEmFWI4pBQs6TJ1aCYkDlHSIJupszTnbW7O
+sR1bm+5ybu+93/OefRrvnv2f//UR1minne639RHHNhx+LN1O9xmJ0+m/PunZt/jk0orNJZGnVJ/f
+IwIe8VzM/1VV7Pr2udnru+3MAKeN+7+Jvh+WPThRn2pbl7m2U+89bo3ccIykxDKS5uDFzJXGO00L
+jj7z2Jv5wXxghKgKeT8qVds3Pp25+pmdToAiNhZFGsuj31fHT9SVXtowq795Wbq9Qe9rtdP3XaAx
+I3Emee7dP9Y8ubVUrQ57QZkUUD4oilxYP0OiZAYE0KriKfAr0yLepRMCW0rUY7MnXv14TvL3d/Te
+X+zskBSX7Ml07Lrx+ct7qmIzoz7IcB4UuKBI1IS9RQEl7vVIfCHhpka8bxeEWqbl/fPpC+lLm82h
+dsc2HWNUu3u499slB2riOOJxuaAIX8TxecUtj4//oiK6qiA0J+4HXhGCi+D8XmG4dVHZv0fe0HuO
+osixNAT2N78KClxyvuCuwMXUxU0PW5ff2jHv1/pqqNY/GiwLKtwTUcTccf5vJsf5U/bmXlt7QGqg
+wIVjOV9gJGSWRopcjf/Oc27k1ApM3V8df2VCIE+qFlPC3m1l6t8Nz2c7miSKpaEIX3CXjEhamEOX
+rbFuWx91HBvNVvKe1t0yfHL52bdqPyyOVIbkVaVBpaHERbm5VyoyRnGXjEhaunL7y/moTf25Qbvz
+oznc4VhZErBGbhHYtW0vNlXGnlB9ORS4oEj6Im/qIWn6QuvEyoIQxuLoudXTEwdfA162y7FsfVjr
+OtD99cJ9k+M5FBThC/fJjGhM4gyto7tCcW3jkrrxge3l0bMrpmAtNXXMlGNm9Hs/gwKXnCLcJSOS
+ln0xxuguCxAzVF9xQAlK48QjPs/ivEBzTbxz1wKtc78cjpmBC4rwBXe5jKTpC62DCAtgR+LU65WH
+ase9PynybMynKgIoakpNOhpfAgUuKMIX3CUj/kqWtI7uygUYSdYoMDl1fn3X7jo2sq4wXB5EmYA2
+KHCRilx3yYik6QtB010WQEFcR04L6Zz20BhoY11XtszeURGtdTsDFxThS85dkqYvtI4bWAA74jws
+eBmEOXjBzg6Ch0Na53e3d84HpdxtJ77gLhmRNH2hdZSSBbAj1simJbqly17wWMAH56gpKHBBEb7g
+LhmRtOyLbSKZBbAjOLJpSLkyHbG2MPzTrPzuPYu0roOgwAWG+IK7HCVp+kLrYMkCqBZr9LoyOcO+
++CyfMxpG8qBILjg00Ia7ZETS9IXW0V0WwI6wBpt5GZDDKwV9ghc8FtwGClzkp+wg7pIRSdMXikB3
+aSQ7QiabBpF/wQ7eOl5McAW/8QkuKMIX3MV/ZNMXWgc8C5Dfhy7DGea8L7xSrIsXk3eX1/t/AivQ
+LNGW7xcAAAAASUVORK5CYII=
+"
+ style="image-rendering:optimizeSpeed"
+ preserveAspectRatio="none"
+ height="22"
+ width="22" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_tilt-24.svg b/pixmaps/src/gwy_tilt-24.svg
new file mode 100644
index 0000000..41024f4
--- /dev/null
+++ b/pixmaps/src/gwy_tilt-24.svg
@@ -0,0 +1,177 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_tilt-24.svg"
+ inkscape:export-filename="gwy_tilt-24.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96">
+ <defs
+ id="defs4">
+ <linearGradient
+ id="linearGradient8652"
+ inkscape:collect="always">
+ <stop
+ style="stop-color:#c3ddf3;stop-opacity:1"
+ offset="0"
+ id="stop8650" />
+ <stop
+ id="stop8648"
+ offset="0.5"
+ style="stop-color:#4696db;stop-opacity:1" />
+ <stop
+ style="stop-color:#0c1e2d;stop-opacity:1"
+ offset="1"
+ id="stop8646" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient8428"
+ osb:paint="solid">
+ <stop
+ style="stop-color:#4696db;stop-opacity:1;"
+ offset="0"
+ id="stop8430" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8652"
+ id="linearGradient8889"
+ x1="359.46628"
+ y1="531.59906"
+ x2="391.75754"
+ y2="553.18823"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.61340763,0.20245078,-0.36437531,0.36077836,337.91212,262.04355)" />
+ <filter
+ inkscape:collect="always"
+ style="color-interpolation-filters:sRGB"
+ id="filter8940"
+ x="-0.069478748"
+ width="1.1389575"
+ y="-0.10543993"
+ height="1.2108799">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.66323168"
+ id="feGaussianBlur8942" />
+ </filter>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="3.0868243"
+ inkscape:cx="-0.65198828"
+ inkscape:cy="-5.7166442"
+ inkscape:document-units="px"
+ inkscape:current-layer="g8625"
+ showgrid="false"
+ inkscape:object-nodes="true"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-global="false"
+ showguides="true"
+ units="px"
+ inkscape:snap-object-midpoints="true"
+ inkscape:object-paths="false"
+ inkscape:snap-grids="true"
+ inkscape:snap-intersection-paths="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-360.04032,-520.36218)">
+ <g
+ id="g8618"
+ transform="matrix(0.97194034,0,0,1,10.715714,0.03393)"
+ style="stroke-width:1.01433218">
+ <g
+ id="g8625"
+ transform="translate(-0.58662158)">
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path8955"
+ d="m 370.30181,525.73125 13.49573,5.79373 -7.87094,11.8026 -15.03903,-8.29374 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.5;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.01433229px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate;font-variant-east_asian:normal;filter:url(#filter8940)" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:url(#linearGradient8889);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.01433229px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 370.30181,521.92896 13.49573,5.79373 -3.93547,5.9013 -3.93547,5.9013 -15.03903,-8.29374 4.70712,-4.6513 z"
+ id="rect8881"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#db2424;stroke-width:1.01433218px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 365.59469,526.58025 14.26738,7.04374"
+ id="path8447"
+ inkscape:connector-curvature="0" />
+ <path
+ sodipodi:nodetypes="zcccccsccz"
+ style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1.01431835;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 364.39137,538.36852 c -1.65132,-5.53188 2.26601,-8.79871 2.26601,-8.79871 l -1.53197,-1.48265 7.18741,-1.5996 -1.25211,7.18355 -1.58548,-1.35801 c 0,0 -1.59277,1.07809 -1.40297,4.06174 0.18984,2.98439 4.9441,3.4061 4.9441,3.4061 l -1.60886,3.80762 c 0,0 -5.36481,0.31185 -7.01613,-5.22004 z"
+ id="path8620"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path5078-9-4-0"
+ d="m 365.01027,537.74065 c -1.25258,-4.94886 2.21879,-8.05527 2.21879,-8.05527 l -1.12801,-1.09169 5.54371,-1.22979 -0.92194,5.28934 -1.17101,-1.08549 c 0,0 -2.68366,1.85356 -1.98136,5.18625 0.70193,3.33278 4.55322,3.48854 4.55322,3.48854 l -1.11969,2.56001 c 0,0 -4.74071,-0.11141 -5.99371,-5.0619 z"
+ style="fill:#7db846;fill-opacity:1;stroke:#000000;stroke-width:1.01431835;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ sodipodi:nodetypes="zccccczccz" />
+ <g
+ id="g8814"
+ transform="matrix(0.17094832,0,0,0.17482069,303.29323,425.48409)"
+ style="stroke-width:5.86747646;stroke:none" />
+ <g
+ transform="matrix(1.0288697,0,0,1,117.35601,51.336807)"
+ id="layer1-9"
+ inkscape:label="Layer 1" />
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_tip_dilation-24.svg b/pixmaps/src/gwy_tip_dilation-24.svg
new file mode 100644
index 0000000..5f28a4c
--- /dev/null
+++ b/pixmaps/src/gwy_tip_dilation-24.svg
@@ -0,0 +1,1121 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8093"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_tip_dilation-24.svg"
+ inkscape:export-filename="gwy_cantilever-24.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96">
+ <defs
+ id="defs8095">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient8423">
+ <stop
+ style="stop-color:#6c7d92;stop-opacity:1"
+ offset="0"
+ id="stop8419" />
+ <stop
+ id="stop8427"
+ offset="0.49999958"
+ style="stop-color:#a3b8d2;stop-opacity:1" />
+ <stop
+ style="stop-color:#446a97;stop-opacity:1"
+ offset="1"
+ id="stop8421" />
+ </linearGradient>
+ <filter
+ inkscape:collect="always"
+ style="color-interpolation-filters:sRGB"
+ id="filter8458"
+ x="-0.12856513"
+ width="1.2571303"
+ y="-0.11250482"
+ height="1.2250096">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.16275744"
+ id="feGaussianBlur8460" />
+ </filter>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8423"
+ id="linearGradient8425"
+ x1="263.77811"
+ y1="602.10724"
+ x2="257.77811"
+ y2="602.10724"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-5)" />
+ <defs
+ id="defs7146">
+ <circle
+ r="0.5"
+ id="gpDot"
+ cx="0"
+ cy="0"
+ style="stroke-width:0.5" />
+ <path
+ d="M -1,0 1,0 M 0,-1 0,1"
+ id="gpPt0"
+ inkscape:connector-curvature="0"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <path
+ d="M -1,-1 1,1 M 1,-1 -1,1"
+ id="gpPt1"
+ inkscape:connector-curvature="0"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <path
+ d="M -1,0 1,0 M 0,-1 0,1 m -1,-2 2,2 m -2,0 2,-2"
+ id="gpPt2"
+ inkscape:connector-curvature="0"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <rect
+ height="2"
+ width="2"
+ y="-1"
+ x="-1"
+ id="gpPt3"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <rect
+ height="2"
+ width="2"
+ y="-1"
+ x="-1"
+ id="gpPt4"
+ style="fill:currentColor;stroke:currentColor;stroke-width:0.222" />
+ <circle
+ r="1"
+ cy="0"
+ cx="0"
+ id="gpPt5"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <use
+ id="gpPt6"
+ xlink:href="#gpPt5"
+ style="fill:currentColor;stroke:none"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ <path
+ d="m 0,-1.33 -1.33,2 2.66,0 z"
+ id="gpPt7"
+ inkscape:connector-curvature="0"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <use
+ id="gpPt8"
+ xlink:href="#gpPt7"
+ style="fill:currentColor;stroke:none"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ <use
+ transform="scale(-1,-1)"
+ id="gpPt9"
+ xlink:href="#gpPt7"
+ style="stroke:currentColor"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ <use
+ id="gpPt10"
+ xlink:href="#gpPt9"
+ style="fill:currentColor;stroke:none"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ <use
+ transform="matrix(0.70710678,0.70710678,-0.70710678,0.70710678,0,0)"
+ id="gpPt11"
+ xlink:href="#gpPt3"
+ style="stroke:currentColor"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ <use
+ id="gpPt12"
+ xlink:href="#gpPt11"
+ style="fill:currentColor;stroke:none"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ </defs>
+ <defs
+ id="defs6370">
+ <circle
+ r="0.5"
+ id="gpDot-2"
+ cx="0"
+ cy="0"
+ style="stroke-width:0.5" />
+ <path
+ d="M -1,0 1,0 M 0,-1 0,1"
+ id="gpPt0-7"
+ inkscape:connector-curvature="0"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <path
+ d="M -1,-1 1,1 M 1,-1 -1,1"
+ id="gpPt1-3"
+ inkscape:connector-curvature="0"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <path
+ d="M -1,0 1,0 M 0,-1 0,1 m -1,-2 2,2 m -2,0 2,-2"
+ id="gpPt2-25"
+ inkscape:connector-curvature="0"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <rect
+ height="2"
+ width="2"
+ y="-1"
+ x="-1"
+ id="gpPt3-2"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <rect
+ height="2"
+ width="2"
+ y="-1"
+ x="-1"
+ id="gpPt4-40"
+ style="fill:currentColor;stroke:currentColor;stroke-width:0.222" />
+ <circle
+ r="1"
+ cy="0"
+ cx="0"
+ id="gpPt5-5"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <use
+ id="gpPt6-0"
+ xlink:href="#gpPt5-5"
+ style="fill:currentColor;stroke:none"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ <path
+ d="m 0,-1.33 -1.33,2 2.66,0 z"
+ id="gpPt7-2"
+ inkscape:connector-curvature="0"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <use
+ id="gpPt8-8"
+ xlink:href="#gpPt7-2"
+ style="fill:currentColor;stroke:none"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ <use
+ transform="scale(-1,-1)"
+ id="gpPt9-2"
+ xlink:href="#gpPt7-2"
+ style="stroke:currentColor"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ <use
+ id="gpPt10-7"
+ xlink:href="#gpPt9-2"
+ style="fill:currentColor;stroke:none"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ <use
+ transform="matrix(0.70710678,0.70710678,-0.70710678,0.70710678,0,0)"
+ id="gpPt11-1"
+ xlink:href="#gpPt3-2"
+ style="stroke:currentColor"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ <use
+ id="gpPt12-2"
+ xlink:href="#gpPt11-1"
+ style="fill:currentColor;stroke:none"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ </defs>
+ <defs
+ id="defs5302">
+ <circle
+ r="0.5"
+ id="gpDot-16"
+ cx="0"
+ cy="0"
+ style="stroke-width:0.5" />
+ <path
+ d="M -1,0 1,0 M 0,-1 0,1"
+ id="gpPt0-9"
+ inkscape:connector-curvature="0"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <path
+ d="M -1,-1 1,1 M 1,-1 -1,1"
+ id="gpPt1-15"
+ inkscape:connector-curvature="0"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <path
+ d="M -1,0 1,0 M 0,-1 0,1 m -1,-2 2,2 m -2,0 2,-2"
+ id="gpPt2-2"
+ inkscape:connector-curvature="0"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <rect
+ height="2"
+ width="2"
+ y="-1"
+ x="-1"
+ id="gpPt3-8"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <rect
+ height="2"
+ width="2"
+ y="-1"
+ x="-1"
+ id="gpPt4-4"
+ style="fill:currentColor;stroke:currentColor;stroke-width:0.222" />
+ <circle
+ r="1"
+ cy="0"
+ cx="0"
+ id="gpPt5-0"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <use
+ id="gpPt6-93"
+ xlink:href="#gpPt5-0"
+ style="fill:currentColor;stroke:none"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ <path
+ d="m 0,-1.33 -1.33,2 2.66,0 z"
+ id="gpPt7-4"
+ inkscape:connector-curvature="0"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <use
+ id="gpPt8-6"
+ xlink:href="#gpPt7-4"
+ style="fill:currentColor;stroke:none"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ <use
+ transform="scale(-1,-1)"
+ id="gpPt9-9"
+ xlink:href="#gpPt7-4"
+ style="stroke:currentColor"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ <use
+ id="gpPt10-0"
+ xlink:href="#gpPt9-9"
+ style="fill:currentColor;stroke:none"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ <use
+ transform="matrix(0.70710678,0.70710678,-0.70710678,0.70710678,0,0)"
+ id="gpPt11-5"
+ xlink:href="#gpPt3-8"
+ style="stroke:currentColor"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ <use
+ id="gpPt12-5"
+ xlink:href="#gpPt11-5"
+ style="fill:currentColor;stroke:none"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ </defs>
+ <style
+ type="text/css"
+ id="style7591"><![CDATA[
+ @font-face { font-family:"Futura Md BT";src:url("#FontID0") format(svg)}
+ .str0 {stroke:#2B2A29;stroke-width:20}
+ .str3 {stroke:#212220;stroke-width:20}
+ .str4 {stroke:#E32029;stroke-width:35.28}
+ .str1 {stroke:#FEFEFE;stroke-width:52.92}
+ .str2 {stroke:#5B5A50;stroke-width:35.28;stroke-dasharray:35.280000 35.280000}
+ .fil0 {fill:none}
+ .fil2 {fill:none;fill-rule:nonzero}
+ .fil1 {fill:#2B2A29}
+ .fil3 {fill:#FEFEFE}
+ .fil11 {fill:#B9A8A0}
+ .fil96 {fill:#284A98;fill-rule:nonzero}
+ .fil100 {fill:url(#id0)}
+ .fil97 {fill:url(#id1)}
+ .fil124 {fill:url(#id2)}
+ .fil95 {fill:url(#id3)}
+ .fil126 {fill:url(#id4)}
+ .fil125 {fill:url(#id5)}
+ .fil128 {fill:url(#id6)}
+ .fil127 {fill:url(#id7)}
+ .fil69 {fill:url(#id8)}
+ .fil73 {fill:url(#id9)}
+ .fil71 {fill:url(#id10)}
+ .fil68 {fill:url(#id11)}
+ .fil70 {fill:url(#id12)}
+ .fil74 {fill:url(#id13)}
+ .fil72 {fill:url(#id14)}
+ .fil41 {fill:url(#id15)}
+ .fil13 {fill:url(#id16)}
+ .fil45 {fill:url(#id17)}
+ .fil17 {fill:url(#id18)}
+ .fil43 {fill:url(#id19)}
+ .fil40 {fill:url(#id20)}
+ .fil15 {fill:url(#id21)}
+ .fil12 {fill:url(#id22)}
+ .fil42 {fill:url(#id23)}
+ .fil46 {fill:url(#id24)}
+ .fil14 {fill:url(#id25)}
+ .fil18 {fill:url(#id26)}
+ .fil44 {fill:url(#id27)}
+ .fil16 {fill:url(#id28)}
+ .fil77 {fill:url(#id29)}
+ .fil76 {fill:url(#id30)}
+ .fil75 {fill:url(#id31)}
+ .fil79 {fill:url(#id32)}
+ .fil78 {fill:url(#id33)}
+ .fil49 {fill:url(#id34)}
+ .fil21 {fill:url(#id35)}
+ .fil48 {fill:url(#id36)}
+ .fil47 {fill:url(#id37)}
+ .fil20 {fill:url(#id38)}
+ .fil19 {fill:url(#id39)}
+ .fil51 {fill:url(#id40)}
+ .fil50 {fill:url(#id41)}
+ .fil23 {fill:url(#id42)}
+ .fil22 {fill:url(#id43)}
+ .fil115 {fill:url(#id44)}
+ .fil113 {fill:url(#id45)}
+ .fil102 {fill:url(#id46)}
+ .fil105 {fill:url(#id47)}
+ .fil106 {fill:url(#id48)}
+ .fil114 {fill:url(#id49)}
+ .fil117 {fill:url(#id50)}
+ .fil112 {fill:url(#id51)}
+ .fil104 {fill:url(#id52)}
+ .fil110 {fill:url(#id53)}
+ .fil108 {fill:url(#id54)}
+ .fil116 {fill:url(#id55)}
+ .fil111 {fill:url(#id56)}
+ .fil101 {fill:url(#id57)}
+ .fil103 {fill:url(#id58)}
+ .fil118 {fill:url(#id59)}
+ .fil107 {fill:url(#id60)}
+ .fil109 {fill:url(#id61)}
+ .fil90 {fill:url(#id62)}
+ .fil67 {fill:url(#id63)}
+ .fil39 {fill:url(#id64)}
+ .fil65 {fill:url(#id65)}
+ .fil64 {fill:url(#id66)}
+ .fil37 {fill:url(#id67)}
+ .fil36 {fill:url(#id68)}
+ .fil66 {fill:url(#id69)}
+ .fil38 {fill:url(#id70)}
+ .fil91 {fill:url(#id71)}
+ .fil83 {fill:url(#id72)}
+ .fil85 {fill:url(#id73)}
+ .fil81 {fill:url(#id74)}
+ .fil80 {fill:url(#id75)}
+ .fil82 {fill:url(#id76)}
+ .fil84 {fill:url(#id77)}
+ .fil4 {fill:url(#id78)}
+ .fil56 {fill:url(#id79)}
+ .fil28 {fill:url(#id80)}
+ .fil58 {fill:url(#id81)}
+ .fil54 {fill:url(#id82)}
+ .fil30 {fill:url(#id83)}
+ .fil26 {fill:url(#id84)}
+ .fil52 {fill:url(#id85)}
+ .fil55 {fill:url(#id86)}
+ .fil24 {fill:url(#id87)}
+ .fil27 {fill:url(#id88)}
+ .fil57 {fill:url(#id89)}
+ .fil29 {fill:url(#id90)}
+ .fil53 {fill:url(#id91)}
+ .fil25 {fill:url(#id92)}
+ .fil88 {fill:url(#id93)}
+ .fil89 {fill:url(#id94)}
+ .fil86 {fill:url(#id95)}
+ .fil87 {fill:url(#id96)}
+ .fil62 {fill:url(#id97)}
+ .fil63 {fill:url(#id98)}
+ .fil34 {fill:url(#id99)}
+ .fil35 {fill:url(#id100)}
+ .fil59 {fill:url(#id101)}
+ .fil60 {fill:url(#id102)}
+ .fil31 {fill:url(#id103)}
+ .fil32 {fill:url(#id104)}
+ .fil61 {fill:url(#id105)}
+ .fil33 {fill:url(#id106)}
+ .fil6 {fill:url(#id107)}
+ .fil5 {fill:url(#id108)}
+ .fil10 {fill:url(#id109)}
+ .fil9 {fill:url(#id110)}
+ .fil94 {fill:url(#id111)}
+ .fil8 {fill:url(#id112)}
+ .fil7 {fill:url(#id113)}
+ .fil99 {fill:url(#id114)}
+ .fil98 {fill:url(#id115)}
+ .fil122 {fill:url(#id116)}
+ .fil121 {fill:url(#id117)}
+ .fil123 {fill:url(#id118)}
+ .fil119 {fill:url(#id119)}
+ .fil120 {fill:url(#id120)}
+ .fil92 {fill:url(#id121)}
+ .fil93 {fill:url(#id122)}
+ .fnt3 {font-weight:normal;font-size:1136.24px;font-family:'Futura Md BT'}
+ .fnt2 {font-weight:normal;font-size:1256.81px;font-family:'Futura Md BT'}
+ .fnt4 {font-weight:normal;font-size:1508.2px;font-family:'Futura Md BT'}
+ .fnt1 {font-weight:bold;font-size:1508.2px;font-family:'Futura Md BT'}
+ .fnt0 {font-weight:bold;font-size:2010.9px;font-family:'Futura Md BT'}
+ ]]></style>
+ <style
+ type="text/css"
+ id="style9234"><![CDATA[
+ @font-face { font-family:"Futura Md BT";src:url("#FontID0") format(svg)}
+ .str0 {stroke:#C5C6C6;stroke-width:10.58}
+ .str3 {stroke:#C5C6C6;stroke-width:17.64;stroke-linecap:round;stroke-linejoin:round}
+ .str4 {stroke:#E32029;stroke-width:35.28}
+ .str1 {stroke:#FEFEFE;stroke-width:52.92}
+ .str5 {stroke:#FEFEFE;stroke-width:52.92;stroke-linecap:round;stroke-linejoin:round}
+ .str6 {stroke:#054D00;stroke-width:52.92;stroke-linecap:round;stroke-linejoin:round}
+ .str2 {stroke:#5B5A50;stroke-width:35.28;stroke-dasharray:35.280000 35.280000}
+ .fil41 {fill:none}
+ .fil44 {fill:none;fill-rule:nonzero}
+ .fil2 {fill:#2B2A29}
+ .fil1 {fill:#FEFEFE}
+ .fil0 {fill:#054D00}
+ .fil10 {fill:#054D00;fill-rule:nonzero}
+ .fil45 {fill:url(#id0)}
+ .fil6 {fill:url(#id1)}
+ .fil55 {fill:url(#id2)}
+ .fil13 {fill:url(#id3)}
+ .fil38 {fill:url(#id4)}
+ .fil46 {fill:url(#id5)}
+ .fil7 {fill:url(#id6)}
+ .fil56 {fill:url(#id7)}
+ .fil11 {fill:url(#id8)}
+ .fil43 {fill:url(#id9)}
+ .fil39 {fill:url(#id10)}
+ .fil40 {fill:url(#id11)}
+ .fil42 {fill:url(#id12)}
+ .fil49 {fill:url(#id13)}
+ .fil51 {fill:url(#id14)}
+ .fil52 {fill:url(#id15)}
+ .fil29 {fill:url(#id16)}
+ .fil16 {fill:url(#id17)}
+ .fil23 {fill:url(#id18)}
+ .fil28 {fill:url(#id19)}
+ .fil24 {fill:url(#id20)}
+ .fil18 {fill:url(#id21)}
+ .fil31 {fill:url(#id22)}
+ .fil30 {fill:url(#id23)}
+ .fil22 {fill:url(#id24)}
+ .fil21 {fill:url(#id25)}
+ .fil19 {fill:url(#id26)}
+ .fil25 {fill:url(#id27)}
+ .fil26 {fill:url(#id28)}
+ .fil32 {fill:url(#id29)}
+ .fil20 {fill:url(#id30)}
+ .fil15 {fill:url(#id31)}
+ .fil17 {fill:url(#id32)}
+ .fil27 {fill:url(#id33)}
+ .fil3 {fill:url(#id34)}
+ .fil5 {fill:url(#id35)}
+ .fil4 {fill:url(#id36)}
+ .fil14 {fill:url(#id37)}
+ .fil12 {fill:url(#id38)}
+ .fil47 {fill:url(#id39)}
+ .fil8 {fill:url(#id40)}
+ .fil53 {fill:url(#id41)}
+ .fil57 {fill:url(#id42)}
+ .fil36 {fill:url(#id43)}
+ .fil35 {fill:url(#id44)}
+ .fil37 {fill:url(#id45)}
+ .fil33 {fill:url(#id46)}
+ .fil34 {fill:url(#id47)}
+ .fil48 {fill:url(#id48)}
+ .fil9 {fill:url(#id49)}
+ .fil54 {fill:url(#id50)}
+ .fil58 {fill:url(#id51)}
+ .fil50 {fill:url(#id52)}
+ .fnt1 {font-weight:normal;font-size:1382.5px;font-family:'Futura Md BT'}
+ .fnt2 {font-weight:bold;font-size:1382.5px;font-family:'Futura Md BT'}
+ .fnt0 {font-weight:bold;font-size:1759.55px;font-family:'Futura Md BT'}
+ ]]></style>
+ <style
+ type="text/css"
+ id="style10533"><![CDATA[
+ @font-face { font-family:"Arial";src:url("#FontID1") format(svg)}
+ @font-face { font-family:"Futura Md BT";src:url("#FontID0") format(svg)}
+ .str2 {stroke-width:5.05}
+ .str1 {stroke:#2B2A29;stroke-width:7.62}
+ .str4 {stroke:#898989;stroke-width:7.62}
+ .str9 {stroke:#C5C6C6;stroke-width:10.58}
+ .str0 {stroke:#212220;stroke-width:20}
+ .str3 {stroke:#62605E;stroke-width:20}
+ .str8 {stroke:#E09079;stroke-width:35.28}
+ .str7 {stroke:#E32029;stroke-width:35.28}
+ .str12 {stroke:#2B2A29;stroke-width:52.92}
+ .str10 {stroke:#FEFEFE;stroke-width:52.92;stroke-linecap:round;stroke-linejoin:round}
+ .str11 {stroke:#054D00;stroke-width:52.92;stroke-linecap:round;stroke-linejoin:round}
+ .str5 {stroke:#5B5A50;stroke-width:35.28;stroke-dasharray:35.280000 35.280000}
+ .str6 {stroke:#9D9C94;stroke-width:35.28;stroke-dasharray:35.280000 35.280000}
+ .fil9 {fill:none}
+ .fil8 {fill:none;fill-rule:nonzero}
+ .fil0 {fill:#2B2A29}
+ .fil2 {fill:#FEFEFE}
+ .fil130 {fill:#054D00}
+ .fil4 {fill:#898989}
+ .fil40 {fill:#B9A8A0}
+ .fil69 {fill:#C9C0BB}
+ .fil3 {fill:#EBECEC}
+ .fil1 {fill:#054D00;fill-rule:nonzero}
+ .fil6 {fill:#6F936D;fill-rule:nonzero}
+ .fil5 {fill:#898989;fill-rule:nonzero}
+ .fil7 {fill:#EBECEC;fill-rule:nonzero}
+ .fil35 {fill:url(#id60)}
+ .fil98 {fill:url(#id61)}
+ .fil39 {fill:url(#id62)}
+ .fil102 {fill:url(#id63)}
+ .fil15 {fill:url(#id64)}
+ .fil22 {fill:url(#id65)}
+ .fil42 {fill:url(#id66)}
+ .fil46 {fill:url(#id67)}
+ .fil44 {fill:url(#id68)}
+ .fil41 {fill:url(#id69)}
+ .fil43 {fill:url(#id70)}
+ .fil47 {fill:url(#id71)}
+ .fil45 {fill:url(#id72)}
+ .fil50 {fill:url(#id73)}
+ .fil49 {fill:url(#id74)}
+ .fil48 {fill:url(#id75)}
+ .fil52 {fill:url(#id76)}
+ .fil51 {fill:url(#id77)}
+ .fil71 {fill:url(#id78)}
+ .fil75 {fill:url(#id79)}
+ .fil73 {fill:url(#id80)}
+ .fil70 {fill:url(#id81)}
+ .fil72 {fill:url(#id82)}
+ .fil76 {fill:url(#id83)}
+ .fil74 {fill:url(#id84)}
+ .fil79 {fill:url(#id85)}
+ .fil78 {fill:url(#id86)}
+ .fil77 {fill:url(#id87)}
+ .fil81 {fill:url(#id88)}
+ .fil80 {fill:url(#id89)}
+ .fil107 {fill:url(#id90)}
+ .fil117 {fill:url(#id91)}
+ .fil120 {fill:url(#id92)}
+ .fil115 {fill:url(#id93)}
+ .fil119 {fill:url(#id94)}
+ .fil118 {fill:url(#id95)}
+ .fil122 {fill:url(#id96)}
+ .fil123 {fill:url(#id97)}
+ .fil113 {fill:url(#id98)}
+ .fil109 {fill:url(#id99)}
+ .fil112 {fill:url(#id100)}
+ .fil110 {fill:url(#id101)}
+ .fil114 {fill:url(#id102)}
+ .fil116 {fill:url(#id103)}
+ .fil121 {fill:url(#id104)}
+ .fil106 {fill:url(#id105)}
+ .fil108 {fill:url(#id106)}
+ .fil111 {fill:url(#id107)}
+ .fil66 {fill:url(#id108)}
+ .fil67 {fill:url(#id109)}
+ .fil95 {fill:url(#id110)}
+ .fil96 {fill:url(#id111)}
+ .fil68 {fill:url(#id112)}
+ .fil97 {fill:url(#id113)}
+ .fil65 {fill:url(#id114)}
+ .fil94 {fill:url(#id115)}
+ .fil57 {fill:url(#id116)}
+ .fil59 {fill:url(#id117)}
+ .fil55 {fill:url(#id118)}
+ .fil53 {fill:url(#id119)}
+ .fil56 {fill:url(#id120)}
+ .fil58 {fill:url(#id121)}
+ .fil54 {fill:url(#id122)}
+ .fil10 {fill:url(#id123)}
+ .fil63 {fill:url(#id124)}
+ .fil64 {fill:url(#id125)}
+ .fil60 {fill:url(#id126)}
+ .fil61 {fill:url(#id127)}
+ .fil62 {fill:url(#id128)}
+ .fil12 {fill:url(#id129)}
+ .fil11 {fill:url(#id130)}
+ .fil86 {fill:url(#id131)}
+ .fil88 {fill:url(#id132)}
+ .fil84 {fill:url(#id133)}
+ .fil82 {fill:url(#id134)}
+ .fil85 {fill:url(#id135)}
+ .fil87 {fill:url(#id136)}
+ .fil83 {fill:url(#id137)}
+ .fil17 {fill:url(#id138)}
+ .fil92 {fill:url(#id139)}
+ .fil93 {fill:url(#id140)}
+ .fil89 {fill:url(#id141)}
+ .fil90 {fill:url(#id142)}
+ .fil91 {fill:url(#id143)}
+ .fil19 {fill:url(#id144)}
+ .fil18 {fill:url(#id145)}
+ .fil101 {fill:url(#id146)}
+ .fil100 {fill:url(#id147)}
+ .fil105 {fill:url(#id148)}
+ .fil104 {fill:url(#id149)}
+ .fil25 {fill:url(#id150)}
+ .fil24 {fill:url(#id151)}
+ .fil29 {fill:url(#id152)}
+ .fil28 {fill:url(#id153)}
+ .fil127 {fill:url(#id154)}
+ .fil126 {fill:url(#id155)}
+ .fil128 {fill:url(#id156)}
+ .fil125 {fill:url(#id157)}
+ .fil99 {fill:url(#id158)}
+ .fil103 {fill:url(#id159)}
+ .fil34 {fill:url(#id160)}
+ .fil32 {fill:url(#id161)}
+ .fil38 {fill:url(#id162)}
+ .fil36 {fill:url(#id163)}
+ .fil27 {fill:url(#id164)}
+ .fil26 {fill:url(#id165)}
+ .fil31 {fill:url(#id166)}
+ .fil30 {fill:url(#id167)}
+ .fil124 {fill:url(#id168)}
+ .fil129 {fill:url(#id169)}
+ .fil33 {fill:url(#id170)}
+ .fil37 {fill:url(#id171)}
+ .fil16 {fill:url(#id172)}
+ .fil23 {fill:url(#id173)}
+ .fil14 {fill:url(#id174)}
+ .fil13 {fill:url(#id175)}
+ .fil21 {fill:url(#id176)}
+ .fil20 {fill:url(#id177)}
+ .fnt7 {font-weight:bold;font-size:423.33px;font-family:'Arial'}
+ .fnt0 {font-weight:bold;font-size:493.89px;font-family:'Futura Md BT'}
+ .fnt1 {font-weight:normal;font-size:1382.5px;font-family:'Futura Md BT'}
+ .fnt5 {font-weight:bold;font-size:1382.5px;font-family:'Futura Md BT'}
+ .fnt2 {font-weight:bold;font-size:1508.17px;font-family:'Futura Md BT'}
+ .fnt6 {font-weight:bold;font-size:1508.2px;font-family:'Arial'}
+ .fnt3 {font-weight:bold;font-size:1508.2px;font-family:'Futura Md BT'}
+ .fnt4 {font-weight:bold;font-size:1759.55px;font-family:'Futura Md BT'}
+ ]]></style>
+ <style
+ type="text/css"
+ id="style25752"><![CDATA[
+ @font-face { font-family:"Futura Md BT";src:url("#FontID0") format(svg)}
+ .str0 {stroke:#FEFEFE;stroke-width:7.62}
+ .str1 {stroke:#FEFEFE;stroke-width:7.62}
+ .fil2 {fill:none}
+ .fil4 {fill:#2B2A29}
+ .fil0 {fill:#FEFEFE}
+ .fil1 {fill:#FEFEFE}
+ .fil3 {fill:#C6D663;fill-rule:nonzero}
+ .fil37 {fill:url(#id51)}
+ .fil38 {fill:url(#id52)}
+ .fil40 {fill:url(#id53)}
+ .fil15 {fill:url(#id54)}
+ .fil74 {fill:url(#id55)}
+ .fil20 {fill:url(#id56)}
+ .fil26 {fill:url(#id57)}
+ .fil25 {fill:url(#id58)}
+ .fil44 {fill:url(#id59)}
+ .fil48 {fill:url(#id60)}
+ .fil34 {fill:url(#id61)}
+ .fil51 {fill:url(#id62)}
+ .fil61 {fill:url(#id63)}
+ .fil56 {fill:url(#id64)}
+ .fil50 {fill:url(#id65)}
+ .fil60 {fill:url(#id66)}
+ .fil53 {fill:url(#id67)}
+ .fil52 {fill:url(#id68)}
+ .fil55 {fill:url(#id69)}
+ .fil58 {fill:url(#id70)}
+ .fil57 {fill:url(#id71)}
+ .fil54 {fill:url(#id72)}
+ .fil62 {fill:url(#id73)}
+ .fil13 {fill:url(#id74)}
+ .fil72 {fill:url(#id75)}
+ .fil9 {fill:url(#id76)}
+ .fil68 {fill:url(#id77)}
+ .fil6 {fill:url(#id78)}
+ .fil65 {fill:url(#id79)}
+ .fil10 {fill:url(#id80)}
+ .fil7 {fill:url(#id81)}
+ .fil69 {fill:url(#id82)}
+ .fil66 {fill:url(#id83)}
+ .fil16 {fill:url(#id84)}
+ .fil75 {fill:url(#id85)}
+ .fil17 {fill:url(#id86)}
+ .fil76 {fill:url(#id87)}
+ .fil11 {fill:url(#id88)}
+ .fil70 {fill:url(#id89)}
+ .fil12 {fill:url(#id90)}
+ .fil8 {fill:url(#id91)}
+ .fil71 {fill:url(#id92)}
+ .fil67 {fill:url(#id93)}
+ .fil14 {fill:url(#id94)}
+ .fil73 {fill:url(#id95)}
+ .fil29 {fill:url(#id96)}
+ .fil33 {fill:url(#id97)}
+ .fil19 {fill:url(#id98)}
+ .fil43 {fill:url(#id99)}
+ .fil45 {fill:url(#id100)}
+ .fil39 {fill:url(#id101)}
+ .fil36 {fill:url(#id102)}
+ .fil46 {fill:url(#id103)}
+ .fil47 {fill:url(#id104)}
+ .fil41 {fill:url(#id105)}
+ .fil35 {fill:url(#id106)}
+ .fil42 {fill:url(#id107)}
+ .fil59 {fill:url(#id108)}
+ .fil49 {fill:url(#id109)}
+ .fil63 {fill:url(#id110)}
+ .fil5 {fill:url(#id111)}
+ .fil18 {fill:url(#id112)}
+ .fil64 {fill:url(#id113)}
+ .fil77 {fill:url(#id114)}
+ .fil28 {fill:url(#id115)}
+ .fil31 {fill:url(#id116)}
+ .fil32 {fill:url(#id117)}
+ .fil21 {fill:url(#id118)}
+ .fil22 {fill:url(#id119)}
+ .fil24 {fill:url(#id120)}
+ .fil23 {fill:url(#id121)}
+ .fil27 {fill:url(#id122)}
+ .fil30 {fill:url(#id123)}
+ .fnt0 {font-weight:bold;font-size:1243.98px;font-family:'Futura Md BT'}
+ ]]></style>
+ <style
+ type="text/css"
+ id="style98"><![CDATA[
+ @font-face { font-family:"Symbol";src:url("#FontID1") format(svg)}
+ @font-face { font-family:"Arial";src:url("#FontID0") format(svg)}
+ .str1 {stroke:#FEFEFE;stroke-width:7.62}
+ .str2 {stroke:#FEFEFE;stroke-width:35.28}
+ .str0 {stroke:#FEFEFE;stroke-width:52.92}
+ .str5 {stroke:#212220;stroke-width:52.92}
+ .str6 {stroke:#2B2A29;stroke-width:70.56}
+ .str3 {stroke:#FEFEFE;stroke-width:70.56}
+ .str4 {stroke:#212220;stroke-width:70.56}
+ .fil2 {fill:none}
+ .fil3 {fill:#2B2A29}
+ .fil0 {fill:#FEFEFE}
+ .fil5 {fill:#1C1B17;fill-rule:nonzero}
+ .fil1 {fill:#FEFEFE;fill-rule:nonzero}
+ .fil4 {fill:#212220;fill-rule:nonzero}
+ .fnt1 {font-weight:bold;font-size:423.33px;font-family:'Arial'}
+ .fnt4 {font-weight:bold;font-size:423.33px;font-family:'Arial'}
+ .fnt5 {font-weight:bold;font-size:493.88px;font-family:'Arial'}
+ .fnt2 {font-weight:normal;font-size:1508.2px;font-family:'Symbol'}
+ .fnt0 {font-weight:bold;font-size:1508.2px;font-family:'Arial'}
+ .fnt3 {font-weight:bold;font-size:1508.2px;font-family:'Arial'}
+ ]]></style>
+ <style
+ type="text/css"
+ id="style7232"><![CDATA[
+ @font-face { font-family:"Arial";src:url("#FontID0") format(svg)}
+ .str0 {stroke:#FEFEFE;stroke-width:70.56}
+ .fil0 {fill:none}
+ .fil2 {fill:#FEFEFE}
+ .fil1 {fill:#FEFEFE;fill-rule:nonzero}
+ .fnt0 {font-weight:bold;font-size:2533.72px;font-family:'Arial'}
+ ]]></style>
+ <style
+ type="text/css"
+ id="style7094"><![CDATA[
+ @font-face { font-family:"Futura Md BT";src:url("#FontID1") format(svg)}
+ @font-face { font-family:"Symbol";src:url("#FontID0") format(svg)}
+ .str2 {stroke:#2B2A29;stroke-width:7.62}
+ .str3 {stroke:#9D9E9E;stroke-width:7.62}
+ .str5 {stroke:#FEFEFE;stroke-width:42.33}
+ .str7 {stroke:#FEFEFE;stroke-width:42.33}
+ .str9 {stroke:#FEFEFE;stroke-width:52.92}
+ .str4 {stroke:#2B2A29;stroke-width:70.56}
+ .str10 {stroke:#727271;stroke-width:70.56}
+ .str8 {stroke:#FEFEFE;stroke-width:70.56}
+ .str6 {stroke:#9D9E9E;stroke-width:70.56}
+ .str0 {stroke:#FEFEFE;stroke-width:42.33;stroke-dasharray:84.660000 42.330000}
+ .str1 {stroke:#FEFEFE;stroke-width:42.33;stroke-dasharray:84.660000 42.330000}
+ .fil0 {fill:none}
+ .fil2 {fill:#2B2A29}
+ .fil7 {fill:#FEFEFE}
+ .fil5 {fill:#9D9E9E}
+ .fil1 {fill:#FEFEFE}
+ .fil3 {fill:#2B2A29;fill-rule:nonzero}
+ .fil6 {fill:#FEFEFE;fill-rule:nonzero}
+ .fil4 {fill:#9D9E9E;fill-rule:nonzero}
+ .fil8 {fill:#FEFEFE;fill-rule:nonzero}
+ .fil94 {fill:url(#id25)}
+ .fil97 {fill:url(#id26)}
+ .fil59 {fill:url(#id27)}
+ .fil26 {fill:url(#id28)}
+ .fil41 {fill:url(#id29)}
+ .fil112 {fill:url(#id30)}
+ .fil61 {fill:url(#id31)}
+ .fil48 {fill:url(#id32)}
+ .fil17 {fill:url(#id33)}
+ .fil105 {fill:url(#id34)}
+ .fil46 {fill:url(#id35)}
+ .fil89 {fill:url(#id36)}
+ .fil91 {fill:url(#id37)}
+ .fil76 {fill:url(#id38)}
+ .fil43 {fill:url(#id39)}
+ .fil62 {fill:url(#id40)}
+ .fil79 {fill:url(#id41)}
+ .fil55 {fill:url(#id42)}
+ .fil64 {fill:url(#id43)}
+ .fil92 {fill:url(#id44)}
+ .fil37 {fill:url(#id45)}
+ .fil90 {fill:url(#id46)}
+ .fil28 {fill:url(#id47)}
+ .fil108 {fill:url(#id48)}
+ .fil100 {fill:url(#id49)}
+ .fil80 {fill:url(#id50)}
+ .fil98 {fill:url(#id51)}
+ .fil111 {fill:url(#id52)}
+ .fil70 {fill:url(#id53)}
+ .fil35 {fill:url(#id54)}
+ .fil103 {fill:url(#id55)}
+ .fil104 {fill:url(#id56)}
+ .fil49 {fill:url(#id57)}
+ .fil65 {fill:url(#id58)}
+ .fil33 {fill:url(#id59)}
+ .fil84 {fill:url(#id60)}
+ .fil102 {fill:url(#id61)}
+ .fil88 {fill:url(#id62)}
+ .fil68 {fill:url(#id63)}
+ .fil51 {fill:url(#id64)}
+ .fil85 {fill:url(#id65)}
+ .fil86 {fill:url(#id66)}
+ .fil47 {fill:url(#id67)}
+ .fil50 {fill:url(#id68)}
+ .fil56 {fill:url(#id69)}
+ .fil54 {fill:url(#id70)}
+ .fil18 {fill:url(#id71)}
+ .fil72 {fill:url(#id72)}
+ .fil38 {fill:url(#id73)}
+ .fil53 {fill:url(#id74)}
+ .fil52 {fill:url(#id75)}
+ .fil15 {fill:url(#id76)}
+ .fil34 {fill:url(#id77)}
+ .fil107 {fill:url(#id78)}
+ .fil83 {fill:url(#id79)}
+ .fil106 {fill:url(#id80)}
+ .fil45 {fill:url(#id81)}
+ .fil99 {fill:url(#id82)}
+ .fil73 {fill:url(#id83)}
+ .fil67 {fill:url(#id84)}
+ .fil81 {fill:url(#id85)}
+ .fil78 {fill:url(#id86)}
+ .fil39 {fill:url(#id87)}
+ .fil93 {fill:url(#id88)}
+ .fil66 {fill:url(#id89)}
+ .fil29 {fill:url(#id90)}
+ .fil44 {fill:url(#id91)}
+ .fil31 {fill:url(#id92)}
+ .fil32 {fill:url(#id93)}
+ .fil42 {fill:url(#id94)}
+ .fil96 {fill:url(#id95)}
+ .fil60 {fill:url(#id96)}
+ .fil21 {fill:url(#id97)}
+ .fil115 {fill:url(#id98)}
+ .fil69 {fill:url(#id99)}
+ .fil109 {fill:url(#id100)}
+ .fil116 {fill:url(#id101)}
+ .fil19 {fill:url(#id102)}
+ .fil110 {fill:url(#id103)}
+ .fil87 {fill:url(#id104)}
+ .fil12 {fill:url(#id105)}
+ .fil9 {fill:url(#id106)}
+ .fil16 {fill:url(#id107)}
+ .fil71 {fill:url(#id108)}
+ .fil30 {fill:url(#id109)}
+ .fil101 {fill:url(#id110)}
+ .fil95 {fill:url(#id111)}
+ .fil10 {fill:url(#id112)}
+ .fil13 {fill:url(#id113)}
+ .fil11 {fill:url(#id114)}
+ .fil63 {fill:url(#id115)}
+ .fil27 {fill:url(#id116)}
+ .fil23 {fill:url(#id117)}
+ .fil113 {fill:url(#id118)}
+ .fil14 {fill:url(#id119)}
+ .fil74 {fill:url(#id120)}
+ .fil36 {fill:url(#id121)}
+ .fil82 {fill:url(#id122)}
+ .fil40 {fill:url(#id123)}
+ .fil24 {fill:url(#id124)}
+ .fil75 {fill:url(#id125)}
+ .fil20 {fill:url(#id126)}
+ .fil25 {fill:url(#id127)}
+ .fil57 {fill:url(#id128)}
+ .fil22 {fill:url(#id129)}
+ .fil77 {fill:url(#id130)}
+ .fil114 {fill:url(#id131)}
+ .fil58 {fill:url(#id132)}
+ .fnt6 {font-weight:bold;font-size:423.33px;font-family:'Futura Md BT'}
+ .fnt0 {font-weight:normal;font-size:1131.15px;font-family:'Symbol'}
+ .fnt1 {font-weight:bold;font-size:1131.15px;font-family:'Futura Md BT'}
+ .fnt8 {font-weight:bold;font-size:1256.81px;font-family:'Futura Md BT'}
+ .fnt5 {font-weight:normal;font-size:1508.2px;font-family:'Futura Md BT'}
+ .fnt7 {font-weight:bold;font-size:1508.2px;font-family:'Futura Md BT'}
+ .fnt4 {font-weight:normal;font-size:1900.27px;font-family:'Futura Md BT'}
+ .fnt9 {font-weight:normal;font-size:2111.45px;font-family:'Futura Md BT'}
+ .fnt3 {font-weight:normal;font-size:2533.72px;font-family:'Futura Md BT'}
+ .fnt2 {font-weight:bold;font-size:2533.72px;font-family:'Futura Md BT'}
+ ]]></style>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="2.8162704"
+ inkscape:cx="137.41999"
+ inkscape:cy="18.739558"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-global="true"
+ inkscape:snap-grids="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8098">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-244.77811,-595.10722)">
+ <path
+ sodipodi:nodetypes="cccccccc"
+ id="path8487"
+ d="m 267.77684,618.10722 h -4 v -5 h -5 l -0.0364,5 h -2.8892 -0.0728 -3.3e-4"
+ inkscape:connector-curvature="0"
+ style="color:#ff0000;fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="color:#ff0000;fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ inkscape:connector-curvature="0"
+ d="m 245.77811,618.10722 h 4 v -5 h 5 l 0.0364,5 h 2.8892 0.0728 3.3e-4"
+ id="path7427"
+ sodipodi:nodetypes="cccccccc" />
+ <path
+ style="fill:url(#linearGradient8425);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 246.27811,595.60722 h 21 v 2 l -6.5,10.5 -6,-10.5 h -8.5 z"
+ id="path4763"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ style="opacity:0.75;fill:#ffffff;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter8458)"
+ d="m 260.56574,601.46532 c -0.0435,-1.8491 2.94024,0.22303 6.9605,0.15554 -2.37934,0.87001 -4.78447,3.12651 -6.54699,4.79868 -0.69731,-2.00112 -0.66057,-4.5027 -0.41351,-4.95422 z"
+ id="path8400"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc"
+ transform="rotate(96.15813,261.98063,600.60609)" />
+ <path
+ style="fill:none;fill-opacity:0.49803922;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.8892617"
+ d="m 254.77811,597.60722 h 12"
+ id="path8429"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ sodipodi:nodetypes="ccccccc"
+ inkscape:connector-curvature="0"
+ id="path8431"
+ d="m 246.27811,595.60722 h 21 v 2 l -6.5,10.5 -6,-10.5 h -8.5 z"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g5318"
+ transform="matrix(1.0666667,0,0,1.0666667,641.03977,883.51086)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g6386"
+ transform="matrix(1.0666667,0,0,1.0666667,1224.7427,320.09945)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g7162"
+ transform="matrix(1.0666667,0,0,1.0666667,483.79064,152.88667)" />
+ <path
+ style="color:#ff0000;fill:none;stroke:#e15244;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 245.77811,614.60722 h 0.84827 l 3.15173,-4.9925 2.5055,-0.004 2.5055,0.004 1.57586,2.49625 h 0.83594 l 1.57586,-2.49625 2.5055,-0.004 2.5055,0.004 3.15173,4.9925 h 0.84827"
+ id="path7438"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccccc" />
+ <text
+ id="text7408-2"
+ class="fil7 fnt4"
+ y="183.92776"
+ x="-484.44421"
+ style="font-weight:normal;font-size:10.66666698px;font-family:'Futura Md BT';text-align:center;text-anchor:middle;clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;stroke-width:1.06666672;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ id="text7422"
+ class="fil7 fnt4"
+ y="213.22548"
+ x="-466.97989"
+ style="font-weight:normal;font-size:10.66666698px;font-family:'Futura Md BT';text-align:center;text-anchor:middle;clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;stroke-width:1.06666672;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_tip_erosion-24.svg b/pixmaps/src/gwy_tip_erosion-24.svg
new file mode 100644
index 0000000..905ad14
--- /dev/null
+++ b/pixmaps/src/gwy_tip_erosion-24.svg
@@ -0,0 +1,1121 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8093"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_tip_erosion-24.svg"
+ inkscape:export-filename="gwy_cantilever-24.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96">
+ <defs
+ id="defs8095">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient8423">
+ <stop
+ style="stop-color:#6c7d92;stop-opacity:1"
+ offset="0"
+ id="stop8419" />
+ <stop
+ id="stop8427"
+ offset="0.49999958"
+ style="stop-color:#a3b8d2;stop-opacity:1" />
+ <stop
+ style="stop-color:#446a97;stop-opacity:1"
+ offset="1"
+ id="stop8421" />
+ </linearGradient>
+ <filter
+ inkscape:collect="always"
+ style="color-interpolation-filters:sRGB"
+ id="filter8458"
+ x="-0.12856513"
+ width="1.2571303"
+ y="-0.11250482"
+ height="1.2250096">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.16275744"
+ id="feGaussianBlur8460" />
+ </filter>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8423"
+ id="linearGradient8425"
+ x1="263.77811"
+ y1="602.10724"
+ x2="257.77811"
+ y2="602.10724"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-5)" />
+ <defs
+ id="defs7146">
+ <circle
+ r="0.5"
+ id="gpDot"
+ cx="0"
+ cy="0"
+ style="stroke-width:0.5" />
+ <path
+ d="M -1,0 1,0 M 0,-1 0,1"
+ id="gpPt0"
+ inkscape:connector-curvature="0"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <path
+ d="M -1,-1 1,1 M 1,-1 -1,1"
+ id="gpPt1"
+ inkscape:connector-curvature="0"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <path
+ d="M -1,0 1,0 M 0,-1 0,1 m -1,-2 2,2 m -2,0 2,-2"
+ id="gpPt2"
+ inkscape:connector-curvature="0"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <rect
+ height="2"
+ width="2"
+ y="-1"
+ x="-1"
+ id="gpPt3"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <rect
+ height="2"
+ width="2"
+ y="-1"
+ x="-1"
+ id="gpPt4"
+ style="fill:currentColor;stroke:currentColor;stroke-width:0.222" />
+ <circle
+ r="1"
+ cy="0"
+ cx="0"
+ id="gpPt5"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <use
+ id="gpPt6"
+ xlink:href="#gpPt5"
+ style="fill:currentColor;stroke:none"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ <path
+ d="m 0,-1.33 -1.33,2 2.66,0 z"
+ id="gpPt7"
+ inkscape:connector-curvature="0"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <use
+ id="gpPt8"
+ xlink:href="#gpPt7"
+ style="fill:currentColor;stroke:none"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ <use
+ transform="scale(-1,-1)"
+ id="gpPt9"
+ xlink:href="#gpPt7"
+ style="stroke:currentColor"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ <use
+ id="gpPt10"
+ xlink:href="#gpPt9"
+ style="fill:currentColor;stroke:none"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ <use
+ transform="matrix(0.70710678,0.70710678,-0.70710678,0.70710678,0,0)"
+ id="gpPt11"
+ xlink:href="#gpPt3"
+ style="stroke:currentColor"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ <use
+ id="gpPt12"
+ xlink:href="#gpPt11"
+ style="fill:currentColor;stroke:none"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ </defs>
+ <defs
+ id="defs6370">
+ <circle
+ r="0.5"
+ id="gpDot-2"
+ cx="0"
+ cy="0"
+ style="stroke-width:0.5" />
+ <path
+ d="M -1,0 1,0 M 0,-1 0,1"
+ id="gpPt0-7"
+ inkscape:connector-curvature="0"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <path
+ d="M -1,-1 1,1 M 1,-1 -1,1"
+ id="gpPt1-3"
+ inkscape:connector-curvature="0"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <path
+ d="M -1,0 1,0 M 0,-1 0,1 m -1,-2 2,2 m -2,0 2,-2"
+ id="gpPt2-25"
+ inkscape:connector-curvature="0"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <rect
+ height="2"
+ width="2"
+ y="-1"
+ x="-1"
+ id="gpPt3-2"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <rect
+ height="2"
+ width="2"
+ y="-1"
+ x="-1"
+ id="gpPt4-40"
+ style="fill:currentColor;stroke:currentColor;stroke-width:0.222" />
+ <circle
+ r="1"
+ cy="0"
+ cx="0"
+ id="gpPt5-5"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <use
+ id="gpPt6-0"
+ xlink:href="#gpPt5-5"
+ style="fill:currentColor;stroke:none"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ <path
+ d="m 0,-1.33 -1.33,2 2.66,0 z"
+ id="gpPt7-2"
+ inkscape:connector-curvature="0"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <use
+ id="gpPt8-8"
+ xlink:href="#gpPt7-2"
+ style="fill:currentColor;stroke:none"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ <use
+ transform="scale(-1,-1)"
+ id="gpPt9-2"
+ xlink:href="#gpPt7-2"
+ style="stroke:currentColor"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ <use
+ id="gpPt10-7"
+ xlink:href="#gpPt9-2"
+ style="fill:currentColor;stroke:none"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ <use
+ transform="matrix(0.70710678,0.70710678,-0.70710678,0.70710678,0,0)"
+ id="gpPt11-1"
+ xlink:href="#gpPt3-2"
+ style="stroke:currentColor"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ <use
+ id="gpPt12-2"
+ xlink:href="#gpPt11-1"
+ style="fill:currentColor;stroke:none"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ </defs>
+ <defs
+ id="defs5302">
+ <circle
+ r="0.5"
+ id="gpDot-16"
+ cx="0"
+ cy="0"
+ style="stroke-width:0.5" />
+ <path
+ d="M -1,0 1,0 M 0,-1 0,1"
+ id="gpPt0-9"
+ inkscape:connector-curvature="0"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <path
+ d="M -1,-1 1,1 M 1,-1 -1,1"
+ id="gpPt1-15"
+ inkscape:connector-curvature="0"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <path
+ d="M -1,0 1,0 M 0,-1 0,1 m -1,-2 2,2 m -2,0 2,-2"
+ id="gpPt2-2"
+ inkscape:connector-curvature="0"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <rect
+ height="2"
+ width="2"
+ y="-1"
+ x="-1"
+ id="gpPt3-8"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <rect
+ height="2"
+ width="2"
+ y="-1"
+ x="-1"
+ id="gpPt4-4"
+ style="fill:currentColor;stroke:currentColor;stroke-width:0.222" />
+ <circle
+ r="1"
+ cy="0"
+ cx="0"
+ id="gpPt5-0"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <use
+ id="gpPt6-93"
+ xlink:href="#gpPt5-0"
+ style="fill:currentColor;stroke:none"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ <path
+ d="m 0,-1.33 -1.33,2 2.66,0 z"
+ id="gpPt7-4"
+ inkscape:connector-curvature="0"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <use
+ id="gpPt8-6"
+ xlink:href="#gpPt7-4"
+ style="fill:currentColor;stroke:none"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ <use
+ transform="scale(-1,-1)"
+ id="gpPt9-9"
+ xlink:href="#gpPt7-4"
+ style="stroke:currentColor"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ <use
+ id="gpPt10-0"
+ xlink:href="#gpPt9-9"
+ style="fill:currentColor;stroke:none"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ <use
+ transform="matrix(0.70710678,0.70710678,-0.70710678,0.70710678,0,0)"
+ id="gpPt11-5"
+ xlink:href="#gpPt3-8"
+ style="stroke:currentColor"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ <use
+ id="gpPt12-5"
+ xlink:href="#gpPt11-5"
+ style="fill:currentColor;stroke:none"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ </defs>
+ <style
+ type="text/css"
+ id="style7591"><![CDATA[
+ @font-face { font-family:"Futura Md BT";src:url("#FontID0") format(svg)}
+ .str0 {stroke:#2B2A29;stroke-width:20}
+ .str3 {stroke:#212220;stroke-width:20}
+ .str4 {stroke:#E32029;stroke-width:35.28}
+ .str1 {stroke:#FEFEFE;stroke-width:52.92}
+ .str2 {stroke:#5B5A50;stroke-width:35.28;stroke-dasharray:35.280000 35.280000}
+ .fil0 {fill:none}
+ .fil2 {fill:none;fill-rule:nonzero}
+ .fil1 {fill:#2B2A29}
+ .fil3 {fill:#FEFEFE}
+ .fil11 {fill:#B9A8A0}
+ .fil96 {fill:#284A98;fill-rule:nonzero}
+ .fil100 {fill:url(#id0)}
+ .fil97 {fill:url(#id1)}
+ .fil124 {fill:url(#id2)}
+ .fil95 {fill:url(#id3)}
+ .fil126 {fill:url(#id4)}
+ .fil125 {fill:url(#id5)}
+ .fil128 {fill:url(#id6)}
+ .fil127 {fill:url(#id7)}
+ .fil69 {fill:url(#id8)}
+ .fil73 {fill:url(#id9)}
+ .fil71 {fill:url(#id10)}
+ .fil68 {fill:url(#id11)}
+ .fil70 {fill:url(#id12)}
+ .fil74 {fill:url(#id13)}
+ .fil72 {fill:url(#id14)}
+ .fil41 {fill:url(#id15)}
+ .fil13 {fill:url(#id16)}
+ .fil45 {fill:url(#id17)}
+ .fil17 {fill:url(#id18)}
+ .fil43 {fill:url(#id19)}
+ .fil40 {fill:url(#id20)}
+ .fil15 {fill:url(#id21)}
+ .fil12 {fill:url(#id22)}
+ .fil42 {fill:url(#id23)}
+ .fil46 {fill:url(#id24)}
+ .fil14 {fill:url(#id25)}
+ .fil18 {fill:url(#id26)}
+ .fil44 {fill:url(#id27)}
+ .fil16 {fill:url(#id28)}
+ .fil77 {fill:url(#id29)}
+ .fil76 {fill:url(#id30)}
+ .fil75 {fill:url(#id31)}
+ .fil79 {fill:url(#id32)}
+ .fil78 {fill:url(#id33)}
+ .fil49 {fill:url(#id34)}
+ .fil21 {fill:url(#id35)}
+ .fil48 {fill:url(#id36)}
+ .fil47 {fill:url(#id37)}
+ .fil20 {fill:url(#id38)}
+ .fil19 {fill:url(#id39)}
+ .fil51 {fill:url(#id40)}
+ .fil50 {fill:url(#id41)}
+ .fil23 {fill:url(#id42)}
+ .fil22 {fill:url(#id43)}
+ .fil115 {fill:url(#id44)}
+ .fil113 {fill:url(#id45)}
+ .fil102 {fill:url(#id46)}
+ .fil105 {fill:url(#id47)}
+ .fil106 {fill:url(#id48)}
+ .fil114 {fill:url(#id49)}
+ .fil117 {fill:url(#id50)}
+ .fil112 {fill:url(#id51)}
+ .fil104 {fill:url(#id52)}
+ .fil110 {fill:url(#id53)}
+ .fil108 {fill:url(#id54)}
+ .fil116 {fill:url(#id55)}
+ .fil111 {fill:url(#id56)}
+ .fil101 {fill:url(#id57)}
+ .fil103 {fill:url(#id58)}
+ .fil118 {fill:url(#id59)}
+ .fil107 {fill:url(#id60)}
+ .fil109 {fill:url(#id61)}
+ .fil90 {fill:url(#id62)}
+ .fil67 {fill:url(#id63)}
+ .fil39 {fill:url(#id64)}
+ .fil65 {fill:url(#id65)}
+ .fil64 {fill:url(#id66)}
+ .fil37 {fill:url(#id67)}
+ .fil36 {fill:url(#id68)}
+ .fil66 {fill:url(#id69)}
+ .fil38 {fill:url(#id70)}
+ .fil91 {fill:url(#id71)}
+ .fil83 {fill:url(#id72)}
+ .fil85 {fill:url(#id73)}
+ .fil81 {fill:url(#id74)}
+ .fil80 {fill:url(#id75)}
+ .fil82 {fill:url(#id76)}
+ .fil84 {fill:url(#id77)}
+ .fil4 {fill:url(#id78)}
+ .fil56 {fill:url(#id79)}
+ .fil28 {fill:url(#id80)}
+ .fil58 {fill:url(#id81)}
+ .fil54 {fill:url(#id82)}
+ .fil30 {fill:url(#id83)}
+ .fil26 {fill:url(#id84)}
+ .fil52 {fill:url(#id85)}
+ .fil55 {fill:url(#id86)}
+ .fil24 {fill:url(#id87)}
+ .fil27 {fill:url(#id88)}
+ .fil57 {fill:url(#id89)}
+ .fil29 {fill:url(#id90)}
+ .fil53 {fill:url(#id91)}
+ .fil25 {fill:url(#id92)}
+ .fil88 {fill:url(#id93)}
+ .fil89 {fill:url(#id94)}
+ .fil86 {fill:url(#id95)}
+ .fil87 {fill:url(#id96)}
+ .fil62 {fill:url(#id97)}
+ .fil63 {fill:url(#id98)}
+ .fil34 {fill:url(#id99)}
+ .fil35 {fill:url(#id100)}
+ .fil59 {fill:url(#id101)}
+ .fil60 {fill:url(#id102)}
+ .fil31 {fill:url(#id103)}
+ .fil32 {fill:url(#id104)}
+ .fil61 {fill:url(#id105)}
+ .fil33 {fill:url(#id106)}
+ .fil6 {fill:url(#id107)}
+ .fil5 {fill:url(#id108)}
+ .fil10 {fill:url(#id109)}
+ .fil9 {fill:url(#id110)}
+ .fil94 {fill:url(#id111)}
+ .fil8 {fill:url(#id112)}
+ .fil7 {fill:url(#id113)}
+ .fil99 {fill:url(#id114)}
+ .fil98 {fill:url(#id115)}
+ .fil122 {fill:url(#id116)}
+ .fil121 {fill:url(#id117)}
+ .fil123 {fill:url(#id118)}
+ .fil119 {fill:url(#id119)}
+ .fil120 {fill:url(#id120)}
+ .fil92 {fill:url(#id121)}
+ .fil93 {fill:url(#id122)}
+ .fnt3 {font-weight:normal;font-size:1136.24px;font-family:'Futura Md BT'}
+ .fnt2 {font-weight:normal;font-size:1256.81px;font-family:'Futura Md BT'}
+ .fnt4 {font-weight:normal;font-size:1508.2px;font-family:'Futura Md BT'}
+ .fnt1 {font-weight:bold;font-size:1508.2px;font-family:'Futura Md BT'}
+ .fnt0 {font-weight:bold;font-size:2010.9px;font-family:'Futura Md BT'}
+ ]]></style>
+ <style
+ type="text/css"
+ id="style9234"><![CDATA[
+ @font-face { font-family:"Futura Md BT";src:url("#FontID0") format(svg)}
+ .str0 {stroke:#C5C6C6;stroke-width:10.58}
+ .str3 {stroke:#C5C6C6;stroke-width:17.64;stroke-linecap:round;stroke-linejoin:round}
+ .str4 {stroke:#E32029;stroke-width:35.28}
+ .str1 {stroke:#FEFEFE;stroke-width:52.92}
+ .str5 {stroke:#FEFEFE;stroke-width:52.92;stroke-linecap:round;stroke-linejoin:round}
+ .str6 {stroke:#054D00;stroke-width:52.92;stroke-linecap:round;stroke-linejoin:round}
+ .str2 {stroke:#5B5A50;stroke-width:35.28;stroke-dasharray:35.280000 35.280000}
+ .fil41 {fill:none}
+ .fil44 {fill:none;fill-rule:nonzero}
+ .fil2 {fill:#2B2A29}
+ .fil1 {fill:#FEFEFE}
+ .fil0 {fill:#054D00}
+ .fil10 {fill:#054D00;fill-rule:nonzero}
+ .fil45 {fill:url(#id0)}
+ .fil6 {fill:url(#id1)}
+ .fil55 {fill:url(#id2)}
+ .fil13 {fill:url(#id3)}
+ .fil38 {fill:url(#id4)}
+ .fil46 {fill:url(#id5)}
+ .fil7 {fill:url(#id6)}
+ .fil56 {fill:url(#id7)}
+ .fil11 {fill:url(#id8)}
+ .fil43 {fill:url(#id9)}
+ .fil39 {fill:url(#id10)}
+ .fil40 {fill:url(#id11)}
+ .fil42 {fill:url(#id12)}
+ .fil49 {fill:url(#id13)}
+ .fil51 {fill:url(#id14)}
+ .fil52 {fill:url(#id15)}
+ .fil29 {fill:url(#id16)}
+ .fil16 {fill:url(#id17)}
+ .fil23 {fill:url(#id18)}
+ .fil28 {fill:url(#id19)}
+ .fil24 {fill:url(#id20)}
+ .fil18 {fill:url(#id21)}
+ .fil31 {fill:url(#id22)}
+ .fil30 {fill:url(#id23)}
+ .fil22 {fill:url(#id24)}
+ .fil21 {fill:url(#id25)}
+ .fil19 {fill:url(#id26)}
+ .fil25 {fill:url(#id27)}
+ .fil26 {fill:url(#id28)}
+ .fil32 {fill:url(#id29)}
+ .fil20 {fill:url(#id30)}
+ .fil15 {fill:url(#id31)}
+ .fil17 {fill:url(#id32)}
+ .fil27 {fill:url(#id33)}
+ .fil3 {fill:url(#id34)}
+ .fil5 {fill:url(#id35)}
+ .fil4 {fill:url(#id36)}
+ .fil14 {fill:url(#id37)}
+ .fil12 {fill:url(#id38)}
+ .fil47 {fill:url(#id39)}
+ .fil8 {fill:url(#id40)}
+ .fil53 {fill:url(#id41)}
+ .fil57 {fill:url(#id42)}
+ .fil36 {fill:url(#id43)}
+ .fil35 {fill:url(#id44)}
+ .fil37 {fill:url(#id45)}
+ .fil33 {fill:url(#id46)}
+ .fil34 {fill:url(#id47)}
+ .fil48 {fill:url(#id48)}
+ .fil9 {fill:url(#id49)}
+ .fil54 {fill:url(#id50)}
+ .fil58 {fill:url(#id51)}
+ .fil50 {fill:url(#id52)}
+ .fnt1 {font-weight:normal;font-size:1382.5px;font-family:'Futura Md BT'}
+ .fnt2 {font-weight:bold;font-size:1382.5px;font-family:'Futura Md BT'}
+ .fnt0 {font-weight:bold;font-size:1759.55px;font-family:'Futura Md BT'}
+ ]]></style>
+ <style
+ type="text/css"
+ id="style10533"><![CDATA[
+ @font-face { font-family:"Arial";src:url("#FontID1") format(svg)}
+ @font-face { font-family:"Futura Md BT";src:url("#FontID0") format(svg)}
+ .str2 {stroke-width:5.05}
+ .str1 {stroke:#2B2A29;stroke-width:7.62}
+ .str4 {stroke:#898989;stroke-width:7.62}
+ .str9 {stroke:#C5C6C6;stroke-width:10.58}
+ .str0 {stroke:#212220;stroke-width:20}
+ .str3 {stroke:#62605E;stroke-width:20}
+ .str8 {stroke:#E09079;stroke-width:35.28}
+ .str7 {stroke:#E32029;stroke-width:35.28}
+ .str12 {stroke:#2B2A29;stroke-width:52.92}
+ .str10 {stroke:#FEFEFE;stroke-width:52.92;stroke-linecap:round;stroke-linejoin:round}
+ .str11 {stroke:#054D00;stroke-width:52.92;stroke-linecap:round;stroke-linejoin:round}
+ .str5 {stroke:#5B5A50;stroke-width:35.28;stroke-dasharray:35.280000 35.280000}
+ .str6 {stroke:#9D9C94;stroke-width:35.28;stroke-dasharray:35.280000 35.280000}
+ .fil9 {fill:none}
+ .fil8 {fill:none;fill-rule:nonzero}
+ .fil0 {fill:#2B2A29}
+ .fil2 {fill:#FEFEFE}
+ .fil130 {fill:#054D00}
+ .fil4 {fill:#898989}
+ .fil40 {fill:#B9A8A0}
+ .fil69 {fill:#C9C0BB}
+ .fil3 {fill:#EBECEC}
+ .fil1 {fill:#054D00;fill-rule:nonzero}
+ .fil6 {fill:#6F936D;fill-rule:nonzero}
+ .fil5 {fill:#898989;fill-rule:nonzero}
+ .fil7 {fill:#EBECEC;fill-rule:nonzero}
+ .fil35 {fill:url(#id60)}
+ .fil98 {fill:url(#id61)}
+ .fil39 {fill:url(#id62)}
+ .fil102 {fill:url(#id63)}
+ .fil15 {fill:url(#id64)}
+ .fil22 {fill:url(#id65)}
+ .fil42 {fill:url(#id66)}
+ .fil46 {fill:url(#id67)}
+ .fil44 {fill:url(#id68)}
+ .fil41 {fill:url(#id69)}
+ .fil43 {fill:url(#id70)}
+ .fil47 {fill:url(#id71)}
+ .fil45 {fill:url(#id72)}
+ .fil50 {fill:url(#id73)}
+ .fil49 {fill:url(#id74)}
+ .fil48 {fill:url(#id75)}
+ .fil52 {fill:url(#id76)}
+ .fil51 {fill:url(#id77)}
+ .fil71 {fill:url(#id78)}
+ .fil75 {fill:url(#id79)}
+ .fil73 {fill:url(#id80)}
+ .fil70 {fill:url(#id81)}
+ .fil72 {fill:url(#id82)}
+ .fil76 {fill:url(#id83)}
+ .fil74 {fill:url(#id84)}
+ .fil79 {fill:url(#id85)}
+ .fil78 {fill:url(#id86)}
+ .fil77 {fill:url(#id87)}
+ .fil81 {fill:url(#id88)}
+ .fil80 {fill:url(#id89)}
+ .fil107 {fill:url(#id90)}
+ .fil117 {fill:url(#id91)}
+ .fil120 {fill:url(#id92)}
+ .fil115 {fill:url(#id93)}
+ .fil119 {fill:url(#id94)}
+ .fil118 {fill:url(#id95)}
+ .fil122 {fill:url(#id96)}
+ .fil123 {fill:url(#id97)}
+ .fil113 {fill:url(#id98)}
+ .fil109 {fill:url(#id99)}
+ .fil112 {fill:url(#id100)}
+ .fil110 {fill:url(#id101)}
+ .fil114 {fill:url(#id102)}
+ .fil116 {fill:url(#id103)}
+ .fil121 {fill:url(#id104)}
+ .fil106 {fill:url(#id105)}
+ .fil108 {fill:url(#id106)}
+ .fil111 {fill:url(#id107)}
+ .fil66 {fill:url(#id108)}
+ .fil67 {fill:url(#id109)}
+ .fil95 {fill:url(#id110)}
+ .fil96 {fill:url(#id111)}
+ .fil68 {fill:url(#id112)}
+ .fil97 {fill:url(#id113)}
+ .fil65 {fill:url(#id114)}
+ .fil94 {fill:url(#id115)}
+ .fil57 {fill:url(#id116)}
+ .fil59 {fill:url(#id117)}
+ .fil55 {fill:url(#id118)}
+ .fil53 {fill:url(#id119)}
+ .fil56 {fill:url(#id120)}
+ .fil58 {fill:url(#id121)}
+ .fil54 {fill:url(#id122)}
+ .fil10 {fill:url(#id123)}
+ .fil63 {fill:url(#id124)}
+ .fil64 {fill:url(#id125)}
+ .fil60 {fill:url(#id126)}
+ .fil61 {fill:url(#id127)}
+ .fil62 {fill:url(#id128)}
+ .fil12 {fill:url(#id129)}
+ .fil11 {fill:url(#id130)}
+ .fil86 {fill:url(#id131)}
+ .fil88 {fill:url(#id132)}
+ .fil84 {fill:url(#id133)}
+ .fil82 {fill:url(#id134)}
+ .fil85 {fill:url(#id135)}
+ .fil87 {fill:url(#id136)}
+ .fil83 {fill:url(#id137)}
+ .fil17 {fill:url(#id138)}
+ .fil92 {fill:url(#id139)}
+ .fil93 {fill:url(#id140)}
+ .fil89 {fill:url(#id141)}
+ .fil90 {fill:url(#id142)}
+ .fil91 {fill:url(#id143)}
+ .fil19 {fill:url(#id144)}
+ .fil18 {fill:url(#id145)}
+ .fil101 {fill:url(#id146)}
+ .fil100 {fill:url(#id147)}
+ .fil105 {fill:url(#id148)}
+ .fil104 {fill:url(#id149)}
+ .fil25 {fill:url(#id150)}
+ .fil24 {fill:url(#id151)}
+ .fil29 {fill:url(#id152)}
+ .fil28 {fill:url(#id153)}
+ .fil127 {fill:url(#id154)}
+ .fil126 {fill:url(#id155)}
+ .fil128 {fill:url(#id156)}
+ .fil125 {fill:url(#id157)}
+ .fil99 {fill:url(#id158)}
+ .fil103 {fill:url(#id159)}
+ .fil34 {fill:url(#id160)}
+ .fil32 {fill:url(#id161)}
+ .fil38 {fill:url(#id162)}
+ .fil36 {fill:url(#id163)}
+ .fil27 {fill:url(#id164)}
+ .fil26 {fill:url(#id165)}
+ .fil31 {fill:url(#id166)}
+ .fil30 {fill:url(#id167)}
+ .fil124 {fill:url(#id168)}
+ .fil129 {fill:url(#id169)}
+ .fil33 {fill:url(#id170)}
+ .fil37 {fill:url(#id171)}
+ .fil16 {fill:url(#id172)}
+ .fil23 {fill:url(#id173)}
+ .fil14 {fill:url(#id174)}
+ .fil13 {fill:url(#id175)}
+ .fil21 {fill:url(#id176)}
+ .fil20 {fill:url(#id177)}
+ .fnt7 {font-weight:bold;font-size:423.33px;font-family:'Arial'}
+ .fnt0 {font-weight:bold;font-size:493.89px;font-family:'Futura Md BT'}
+ .fnt1 {font-weight:normal;font-size:1382.5px;font-family:'Futura Md BT'}
+ .fnt5 {font-weight:bold;font-size:1382.5px;font-family:'Futura Md BT'}
+ .fnt2 {font-weight:bold;font-size:1508.17px;font-family:'Futura Md BT'}
+ .fnt6 {font-weight:bold;font-size:1508.2px;font-family:'Arial'}
+ .fnt3 {font-weight:bold;font-size:1508.2px;font-family:'Futura Md BT'}
+ .fnt4 {font-weight:bold;font-size:1759.55px;font-family:'Futura Md BT'}
+ ]]></style>
+ <style
+ type="text/css"
+ id="style25752"><![CDATA[
+ @font-face { font-family:"Futura Md BT";src:url("#FontID0") format(svg)}
+ .str0 {stroke:#FEFEFE;stroke-width:7.62}
+ .str1 {stroke:#FEFEFE;stroke-width:7.62}
+ .fil2 {fill:none}
+ .fil4 {fill:#2B2A29}
+ .fil0 {fill:#FEFEFE}
+ .fil1 {fill:#FEFEFE}
+ .fil3 {fill:#C6D663;fill-rule:nonzero}
+ .fil37 {fill:url(#id51)}
+ .fil38 {fill:url(#id52)}
+ .fil40 {fill:url(#id53)}
+ .fil15 {fill:url(#id54)}
+ .fil74 {fill:url(#id55)}
+ .fil20 {fill:url(#id56)}
+ .fil26 {fill:url(#id57)}
+ .fil25 {fill:url(#id58)}
+ .fil44 {fill:url(#id59)}
+ .fil48 {fill:url(#id60)}
+ .fil34 {fill:url(#id61)}
+ .fil51 {fill:url(#id62)}
+ .fil61 {fill:url(#id63)}
+ .fil56 {fill:url(#id64)}
+ .fil50 {fill:url(#id65)}
+ .fil60 {fill:url(#id66)}
+ .fil53 {fill:url(#id67)}
+ .fil52 {fill:url(#id68)}
+ .fil55 {fill:url(#id69)}
+ .fil58 {fill:url(#id70)}
+ .fil57 {fill:url(#id71)}
+ .fil54 {fill:url(#id72)}
+ .fil62 {fill:url(#id73)}
+ .fil13 {fill:url(#id74)}
+ .fil72 {fill:url(#id75)}
+ .fil9 {fill:url(#id76)}
+ .fil68 {fill:url(#id77)}
+ .fil6 {fill:url(#id78)}
+ .fil65 {fill:url(#id79)}
+ .fil10 {fill:url(#id80)}
+ .fil7 {fill:url(#id81)}
+ .fil69 {fill:url(#id82)}
+ .fil66 {fill:url(#id83)}
+ .fil16 {fill:url(#id84)}
+ .fil75 {fill:url(#id85)}
+ .fil17 {fill:url(#id86)}
+ .fil76 {fill:url(#id87)}
+ .fil11 {fill:url(#id88)}
+ .fil70 {fill:url(#id89)}
+ .fil12 {fill:url(#id90)}
+ .fil8 {fill:url(#id91)}
+ .fil71 {fill:url(#id92)}
+ .fil67 {fill:url(#id93)}
+ .fil14 {fill:url(#id94)}
+ .fil73 {fill:url(#id95)}
+ .fil29 {fill:url(#id96)}
+ .fil33 {fill:url(#id97)}
+ .fil19 {fill:url(#id98)}
+ .fil43 {fill:url(#id99)}
+ .fil45 {fill:url(#id100)}
+ .fil39 {fill:url(#id101)}
+ .fil36 {fill:url(#id102)}
+ .fil46 {fill:url(#id103)}
+ .fil47 {fill:url(#id104)}
+ .fil41 {fill:url(#id105)}
+ .fil35 {fill:url(#id106)}
+ .fil42 {fill:url(#id107)}
+ .fil59 {fill:url(#id108)}
+ .fil49 {fill:url(#id109)}
+ .fil63 {fill:url(#id110)}
+ .fil5 {fill:url(#id111)}
+ .fil18 {fill:url(#id112)}
+ .fil64 {fill:url(#id113)}
+ .fil77 {fill:url(#id114)}
+ .fil28 {fill:url(#id115)}
+ .fil31 {fill:url(#id116)}
+ .fil32 {fill:url(#id117)}
+ .fil21 {fill:url(#id118)}
+ .fil22 {fill:url(#id119)}
+ .fil24 {fill:url(#id120)}
+ .fil23 {fill:url(#id121)}
+ .fil27 {fill:url(#id122)}
+ .fil30 {fill:url(#id123)}
+ .fnt0 {font-weight:bold;font-size:1243.98px;font-family:'Futura Md BT'}
+ ]]></style>
+ <style
+ type="text/css"
+ id="style98"><![CDATA[
+ @font-face { font-family:"Symbol";src:url("#FontID1") format(svg)}
+ @font-face { font-family:"Arial";src:url("#FontID0") format(svg)}
+ .str1 {stroke:#FEFEFE;stroke-width:7.62}
+ .str2 {stroke:#FEFEFE;stroke-width:35.28}
+ .str0 {stroke:#FEFEFE;stroke-width:52.92}
+ .str5 {stroke:#212220;stroke-width:52.92}
+ .str6 {stroke:#2B2A29;stroke-width:70.56}
+ .str3 {stroke:#FEFEFE;stroke-width:70.56}
+ .str4 {stroke:#212220;stroke-width:70.56}
+ .fil2 {fill:none}
+ .fil3 {fill:#2B2A29}
+ .fil0 {fill:#FEFEFE}
+ .fil5 {fill:#1C1B17;fill-rule:nonzero}
+ .fil1 {fill:#FEFEFE;fill-rule:nonzero}
+ .fil4 {fill:#212220;fill-rule:nonzero}
+ .fnt1 {font-weight:bold;font-size:423.33px;font-family:'Arial'}
+ .fnt4 {font-weight:bold;font-size:423.33px;font-family:'Arial'}
+ .fnt5 {font-weight:bold;font-size:493.88px;font-family:'Arial'}
+ .fnt2 {font-weight:normal;font-size:1508.2px;font-family:'Symbol'}
+ .fnt0 {font-weight:bold;font-size:1508.2px;font-family:'Arial'}
+ .fnt3 {font-weight:bold;font-size:1508.2px;font-family:'Arial'}
+ ]]></style>
+ <style
+ type="text/css"
+ id="style7232"><![CDATA[
+ @font-face { font-family:"Arial";src:url("#FontID0") format(svg)}
+ .str0 {stroke:#FEFEFE;stroke-width:70.56}
+ .fil0 {fill:none}
+ .fil2 {fill:#FEFEFE}
+ .fil1 {fill:#FEFEFE;fill-rule:nonzero}
+ .fnt0 {font-weight:bold;font-size:2533.72px;font-family:'Arial'}
+ ]]></style>
+ <style
+ type="text/css"
+ id="style7094"><![CDATA[
+ @font-face { font-family:"Futura Md BT";src:url("#FontID1") format(svg)}
+ @font-face { font-family:"Symbol";src:url("#FontID0") format(svg)}
+ .str2 {stroke:#2B2A29;stroke-width:7.62}
+ .str3 {stroke:#9D9E9E;stroke-width:7.62}
+ .str5 {stroke:#FEFEFE;stroke-width:42.33}
+ .str7 {stroke:#FEFEFE;stroke-width:42.33}
+ .str9 {stroke:#FEFEFE;stroke-width:52.92}
+ .str4 {stroke:#2B2A29;stroke-width:70.56}
+ .str10 {stroke:#727271;stroke-width:70.56}
+ .str8 {stroke:#FEFEFE;stroke-width:70.56}
+ .str6 {stroke:#9D9E9E;stroke-width:70.56}
+ .str0 {stroke:#FEFEFE;stroke-width:42.33;stroke-dasharray:84.660000 42.330000}
+ .str1 {stroke:#FEFEFE;stroke-width:42.33;stroke-dasharray:84.660000 42.330000}
+ .fil0 {fill:none}
+ .fil2 {fill:#2B2A29}
+ .fil7 {fill:#FEFEFE}
+ .fil5 {fill:#9D9E9E}
+ .fil1 {fill:#FEFEFE}
+ .fil3 {fill:#2B2A29;fill-rule:nonzero}
+ .fil6 {fill:#FEFEFE;fill-rule:nonzero}
+ .fil4 {fill:#9D9E9E;fill-rule:nonzero}
+ .fil8 {fill:#FEFEFE;fill-rule:nonzero}
+ .fil94 {fill:url(#id25)}
+ .fil97 {fill:url(#id26)}
+ .fil59 {fill:url(#id27)}
+ .fil26 {fill:url(#id28)}
+ .fil41 {fill:url(#id29)}
+ .fil112 {fill:url(#id30)}
+ .fil61 {fill:url(#id31)}
+ .fil48 {fill:url(#id32)}
+ .fil17 {fill:url(#id33)}
+ .fil105 {fill:url(#id34)}
+ .fil46 {fill:url(#id35)}
+ .fil89 {fill:url(#id36)}
+ .fil91 {fill:url(#id37)}
+ .fil76 {fill:url(#id38)}
+ .fil43 {fill:url(#id39)}
+ .fil62 {fill:url(#id40)}
+ .fil79 {fill:url(#id41)}
+ .fil55 {fill:url(#id42)}
+ .fil64 {fill:url(#id43)}
+ .fil92 {fill:url(#id44)}
+ .fil37 {fill:url(#id45)}
+ .fil90 {fill:url(#id46)}
+ .fil28 {fill:url(#id47)}
+ .fil108 {fill:url(#id48)}
+ .fil100 {fill:url(#id49)}
+ .fil80 {fill:url(#id50)}
+ .fil98 {fill:url(#id51)}
+ .fil111 {fill:url(#id52)}
+ .fil70 {fill:url(#id53)}
+ .fil35 {fill:url(#id54)}
+ .fil103 {fill:url(#id55)}
+ .fil104 {fill:url(#id56)}
+ .fil49 {fill:url(#id57)}
+ .fil65 {fill:url(#id58)}
+ .fil33 {fill:url(#id59)}
+ .fil84 {fill:url(#id60)}
+ .fil102 {fill:url(#id61)}
+ .fil88 {fill:url(#id62)}
+ .fil68 {fill:url(#id63)}
+ .fil51 {fill:url(#id64)}
+ .fil85 {fill:url(#id65)}
+ .fil86 {fill:url(#id66)}
+ .fil47 {fill:url(#id67)}
+ .fil50 {fill:url(#id68)}
+ .fil56 {fill:url(#id69)}
+ .fil54 {fill:url(#id70)}
+ .fil18 {fill:url(#id71)}
+ .fil72 {fill:url(#id72)}
+ .fil38 {fill:url(#id73)}
+ .fil53 {fill:url(#id74)}
+ .fil52 {fill:url(#id75)}
+ .fil15 {fill:url(#id76)}
+ .fil34 {fill:url(#id77)}
+ .fil107 {fill:url(#id78)}
+ .fil83 {fill:url(#id79)}
+ .fil106 {fill:url(#id80)}
+ .fil45 {fill:url(#id81)}
+ .fil99 {fill:url(#id82)}
+ .fil73 {fill:url(#id83)}
+ .fil67 {fill:url(#id84)}
+ .fil81 {fill:url(#id85)}
+ .fil78 {fill:url(#id86)}
+ .fil39 {fill:url(#id87)}
+ .fil93 {fill:url(#id88)}
+ .fil66 {fill:url(#id89)}
+ .fil29 {fill:url(#id90)}
+ .fil44 {fill:url(#id91)}
+ .fil31 {fill:url(#id92)}
+ .fil32 {fill:url(#id93)}
+ .fil42 {fill:url(#id94)}
+ .fil96 {fill:url(#id95)}
+ .fil60 {fill:url(#id96)}
+ .fil21 {fill:url(#id97)}
+ .fil115 {fill:url(#id98)}
+ .fil69 {fill:url(#id99)}
+ .fil109 {fill:url(#id100)}
+ .fil116 {fill:url(#id101)}
+ .fil19 {fill:url(#id102)}
+ .fil110 {fill:url(#id103)}
+ .fil87 {fill:url(#id104)}
+ .fil12 {fill:url(#id105)}
+ .fil9 {fill:url(#id106)}
+ .fil16 {fill:url(#id107)}
+ .fil71 {fill:url(#id108)}
+ .fil30 {fill:url(#id109)}
+ .fil101 {fill:url(#id110)}
+ .fil95 {fill:url(#id111)}
+ .fil10 {fill:url(#id112)}
+ .fil13 {fill:url(#id113)}
+ .fil11 {fill:url(#id114)}
+ .fil63 {fill:url(#id115)}
+ .fil27 {fill:url(#id116)}
+ .fil23 {fill:url(#id117)}
+ .fil113 {fill:url(#id118)}
+ .fil14 {fill:url(#id119)}
+ .fil74 {fill:url(#id120)}
+ .fil36 {fill:url(#id121)}
+ .fil82 {fill:url(#id122)}
+ .fil40 {fill:url(#id123)}
+ .fil24 {fill:url(#id124)}
+ .fil75 {fill:url(#id125)}
+ .fil20 {fill:url(#id126)}
+ .fil25 {fill:url(#id127)}
+ .fil57 {fill:url(#id128)}
+ .fil22 {fill:url(#id129)}
+ .fil77 {fill:url(#id130)}
+ .fil114 {fill:url(#id131)}
+ .fil58 {fill:url(#id132)}
+ .fnt6 {font-weight:bold;font-size:423.33px;font-family:'Futura Md BT'}
+ .fnt0 {font-weight:normal;font-size:1131.15px;font-family:'Symbol'}
+ .fnt1 {font-weight:bold;font-size:1131.15px;font-family:'Futura Md BT'}
+ .fnt8 {font-weight:bold;font-size:1256.81px;font-family:'Futura Md BT'}
+ .fnt5 {font-weight:normal;font-size:1508.2px;font-family:'Futura Md BT'}
+ .fnt7 {font-weight:bold;font-size:1508.2px;font-family:'Futura Md BT'}
+ .fnt4 {font-weight:normal;font-size:1900.27px;font-family:'Futura Md BT'}
+ .fnt9 {font-weight:normal;font-size:2111.45px;font-family:'Futura Md BT'}
+ .fnt3 {font-weight:normal;font-size:2533.72px;font-family:'Futura Md BT'}
+ .fnt2 {font-weight:bold;font-size:2533.72px;font-family:'Futura Md BT'}
+ ]]></style>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="9.4759014"
+ inkscape:cx="10.744916"
+ inkscape:cy="22.274133"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-global="true"
+ inkscape:snap-grids="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8098">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-244.77811,-595.10722)">
+ <path
+ style="fill:url(#linearGradient8425);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 246.27811,595.60722 h 21 v 2 l -6.5,10.5 -6,-10.5 h -8.5 z"
+ id="path4763"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ style="opacity:0.75;fill:#ffffff;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter8458)"
+ d="m 260.56574,601.46532 c -0.0435,-1.8491 2.94024,0.22303 6.9605,0.15554 -2.37934,0.87001 -4.78447,3.12651 -6.54699,4.79868 -0.69731,-2.00112 -0.66057,-4.5027 -0.41351,-4.95422 z"
+ id="path8400"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc"
+ transform="rotate(96.15813,261.98063,600.60609)" />
+ <path
+ style="fill:none;fill-opacity:0.49803922;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.8892617"
+ d="m 254.77811,597.60722 h 12"
+ id="path8429"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ sodipodi:nodetypes="ccccccc"
+ inkscape:connector-curvature="0"
+ id="path8431"
+ d="m 246.27811,595.60722 h 21 v 2 l -6.5,10.5 -6,-10.5 h -8.5 z"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g5318"
+ transform="matrix(1.0666667,0,0,1.0666667,641.03977,883.51086)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g6386"
+ transform="matrix(1.0666667,0,0,1.0666667,1224.7427,320.09945)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g7162"
+ transform="matrix(1.0666667,0,0,1.0666667,483.79064,152.88667)" />
+ <path
+ style="color:#ff0000;fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 245.77811,614.60722 h 0.84827 l 3.15173,-4.9925 2.5055,-0.004 2.5055,0.004 1.57586,2.49625 h 0.83594 l 1.57586,-2.49625 2.5055,-0.004 2.5055,0.004 3.15173,4.9925 h 0.84827"
+ id="path7438"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccccc" />
+ <text
+ id="text7408-2"
+ class="fil7 fnt4"
+ y="183.92776"
+ x="-484.44421"
+ style="font-weight:normal;font-size:10.66666698px;font-family:'Futura Md BT';text-align:center;text-anchor:middle;clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;stroke-width:1.06666672;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ id="text7422"
+ class="fil7 fnt4"
+ y="213.22548"
+ x="-466.97989"
+ style="font-weight:normal;font-size:10.66666698px;font-family:'Futura Md BT';text-align:center;text-anchor:middle;clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;stroke-width:1.06666672;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <path
+ sodipodi:nodetypes="cccccccc"
+ id="path8487"
+ d="m 267.77684,618.10722 h -4 v -5 h -5 l -0.0364,5 h -2.8892 -0.0728 -3.3e-4"
+ inkscape:connector-curvature="0"
+ style="color:#ff0000;fill:none;stroke:#e15244;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="color:#ff0000;fill:none;stroke:#e15244;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ inkscape:connector-curvature="0"
+ d="m 245.77811,618.10722 h 4 v -5 h 5 l 0.0364,5 h 2.8892 0.0728 3.3e-4"
+ id="path7427"
+ sodipodi:nodetypes="cccccccc" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_tip_estimation-24.svg b/pixmaps/src/gwy_tip_estimation-24.svg
new file mode 100644
index 0000000..15f081d
--- /dev/null
+++ b/pixmaps/src/gwy_tip_estimation-24.svg
@@ -0,0 +1,150 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8093"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_tip_estimation-24.svg"
+ inkscape:export-filename="gwy_flip_horizontally-24.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs8095">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient8423">
+ <stop
+ style="stop-color:#6c7d92;stop-opacity:1"
+ offset="0"
+ id="stop8419" />
+ <stop
+ id="stop8427"
+ offset="0.49999958"
+ style="stop-color:#a3b8d2;stop-opacity:1" />
+ <stop
+ style="stop-color:#446a97;stop-opacity:1"
+ offset="1"
+ id="stop8421" />
+ </linearGradient>
+ <filter
+ inkscape:collect="always"
+ style="color-interpolation-filters:sRGB"
+ id="filter8458"
+ x="-0.12856513"
+ width="1.2571303"
+ y="-0.11250482"
+ height="1.2250096">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.16275744"
+ id="feGaussianBlur8460" />
+ </filter>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8423"
+ id="linearGradient8425"
+ x1="263.77811"
+ y1="602.10724"
+ x2="257.77811"
+ y2="602.10724"
+ gradientUnits="userSpaceOnUse" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="6.7254415"
+ inkscape:cx="29.975016"
+ inkscape:cy="30.144551"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-global="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8098">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-244.77811,-595.10722)">
+ <path
+ style="fill:url(#linearGradient8425);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 246.27811,600.60722 h 21 v 2 l -6.5,10.5 -6,-10.5 h -8.5 z"
+ id="path4763"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ style="opacity:0.75;fill:#ffffff;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter8458)"
+ d="m 260.56574,601.46532 c -0.0435,-1.8491 2.94024,0.22303 6.9605,0.15554 -2.37934,0.87001 -4.78447,3.12651 -6.54699,4.79868 -0.69731,-2.00112 -0.66057,-4.5027 -0.41351,-4.95422 z"
+ id="path8400"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc"
+ transform="rotate(96.15813,259.73583,603.10609)" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.88926172;fill-opacity:0.49803922"
+ d="m 254.77811,602.60722 h 12"
+ id="path8429"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ sodipodi:nodetypes="ccccccc"
+ inkscape:connector-curvature="0"
+ id="path8431"
+ d="m 246.27811,600.60722 h 21 v 2 l -6.5,10.5 -6,-10.5 h -8.5 z"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.87092972px;line-height:125%;font-family:Ubuntu;-inkscape-font-specification:Ubuntu;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="250.36726"
+ y="617.08038"
+ id="text8429"><tspan
+ sodipodi:role="line"
+ id="tspan8427"
+ x="250.36726"
+ y="617.08038"
+ style="stroke-width:1px">?</tspan></text>
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_tip_indent_analyze-24.svg b/pixmaps/src/gwy_tip_indent_analyze-24.svg
new file mode 100644
index 0000000..5da1ca2
--- /dev/null
+++ b/pixmaps/src/gwy_tip_indent_analyze-24.svg
@@ -0,0 +1,1115 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8093"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_tip_indent_analyze-24.svg"
+ inkscape:export-filename="gwy_cantilever-24.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96">
+ <defs
+ id="defs8095">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient8423">
+ <stop
+ style="stop-color:#6c7d92;stop-opacity:1"
+ offset="0"
+ id="stop8419" />
+ <stop
+ id="stop8427"
+ offset="0.49999958"
+ style="stop-color:#a3b8d2;stop-opacity:1" />
+ <stop
+ style="stop-color:#446a97;stop-opacity:1"
+ offset="1"
+ id="stop8421" />
+ </linearGradient>
+ <filter
+ inkscape:collect="always"
+ style="color-interpolation-filters:sRGB"
+ id="filter8458"
+ x="-0.12856513"
+ width="1.2571303"
+ y="-0.11250482"
+ height="1.2250096">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.16275744"
+ id="feGaussianBlur8460" />
+ </filter>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8423"
+ id="linearGradient8425"
+ x1="263.77811"
+ y1="602.10724"
+ x2="257.77811"
+ y2="602.10724"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-5)" />
+ <defs
+ id="defs7146">
+ <circle
+ r="0.5"
+ id="gpDot"
+ cx="0"
+ cy="0"
+ style="stroke-width:0.5" />
+ <path
+ d="M -1,0 1,0 M 0,-1 0,1"
+ id="gpPt0"
+ inkscape:connector-curvature="0"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <path
+ d="M -1,-1 1,1 M 1,-1 -1,1"
+ id="gpPt1"
+ inkscape:connector-curvature="0"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <path
+ d="M -1,0 1,0 M 0,-1 0,1 m -1,-2 2,2 m -2,0 2,-2"
+ id="gpPt2"
+ inkscape:connector-curvature="0"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <rect
+ height="2"
+ width="2"
+ y="-1"
+ x="-1"
+ id="gpPt3"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <rect
+ height="2"
+ width="2"
+ y="-1"
+ x="-1"
+ id="gpPt4"
+ style="fill:currentColor;stroke:currentColor;stroke-width:0.222" />
+ <circle
+ r="1"
+ cy="0"
+ cx="0"
+ id="gpPt5"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <use
+ id="gpPt6"
+ xlink:href="#gpPt5"
+ style="fill:currentColor;stroke:none"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ <path
+ d="m 0,-1.33 -1.33,2 2.66,0 z"
+ id="gpPt7"
+ inkscape:connector-curvature="0"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <use
+ id="gpPt8"
+ xlink:href="#gpPt7"
+ style="fill:currentColor;stroke:none"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ <use
+ transform="scale(-1,-1)"
+ id="gpPt9"
+ xlink:href="#gpPt7"
+ style="stroke:currentColor"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ <use
+ id="gpPt10"
+ xlink:href="#gpPt9"
+ style="fill:currentColor;stroke:none"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ <use
+ transform="matrix(0.70710678,0.70710678,-0.70710678,0.70710678,0,0)"
+ id="gpPt11"
+ xlink:href="#gpPt3"
+ style="stroke:currentColor"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ <use
+ id="gpPt12"
+ xlink:href="#gpPt11"
+ style="fill:currentColor;stroke:none"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ </defs>
+ <defs
+ id="defs6370">
+ <circle
+ r="0.5"
+ id="gpDot-2"
+ cx="0"
+ cy="0"
+ style="stroke-width:0.5" />
+ <path
+ d="M -1,0 1,0 M 0,-1 0,1"
+ id="gpPt0-7"
+ inkscape:connector-curvature="0"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <path
+ d="M -1,-1 1,1 M 1,-1 -1,1"
+ id="gpPt1-3"
+ inkscape:connector-curvature="0"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <path
+ d="M -1,0 1,0 M 0,-1 0,1 m -1,-2 2,2 m -2,0 2,-2"
+ id="gpPt2-25"
+ inkscape:connector-curvature="0"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <rect
+ height="2"
+ width="2"
+ y="-1"
+ x="-1"
+ id="gpPt3-2"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <rect
+ height="2"
+ width="2"
+ y="-1"
+ x="-1"
+ id="gpPt4-40"
+ style="fill:currentColor;stroke:currentColor;stroke-width:0.222" />
+ <circle
+ r="1"
+ cy="0"
+ cx="0"
+ id="gpPt5-5"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <use
+ id="gpPt6-0"
+ xlink:href="#gpPt5-5"
+ style="fill:currentColor;stroke:none"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ <path
+ d="m 0,-1.33 -1.33,2 2.66,0 z"
+ id="gpPt7-2"
+ inkscape:connector-curvature="0"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <use
+ id="gpPt8-8"
+ xlink:href="#gpPt7-2"
+ style="fill:currentColor;stroke:none"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ <use
+ transform="scale(-1,-1)"
+ id="gpPt9-2"
+ xlink:href="#gpPt7-2"
+ style="stroke:currentColor"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ <use
+ id="gpPt10-7"
+ xlink:href="#gpPt9-2"
+ style="fill:currentColor;stroke:none"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ <use
+ transform="matrix(0.70710678,0.70710678,-0.70710678,0.70710678,0,0)"
+ id="gpPt11-1"
+ xlink:href="#gpPt3-2"
+ style="stroke:currentColor"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ <use
+ id="gpPt12-2"
+ xlink:href="#gpPt11-1"
+ style="fill:currentColor;stroke:none"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ </defs>
+ <defs
+ id="defs5302">
+ <circle
+ r="0.5"
+ id="gpDot-16"
+ cx="0"
+ cy="0"
+ style="stroke-width:0.5" />
+ <path
+ d="M -1,0 1,0 M 0,-1 0,1"
+ id="gpPt0-9"
+ inkscape:connector-curvature="0"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <path
+ d="M -1,-1 1,1 M 1,-1 -1,1"
+ id="gpPt1-15"
+ inkscape:connector-curvature="0"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <path
+ d="M -1,0 1,0 M 0,-1 0,1 m -1,-2 2,2 m -2,0 2,-2"
+ id="gpPt2-2"
+ inkscape:connector-curvature="0"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <rect
+ height="2"
+ width="2"
+ y="-1"
+ x="-1"
+ id="gpPt3-8"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <rect
+ height="2"
+ width="2"
+ y="-1"
+ x="-1"
+ id="gpPt4-4"
+ style="fill:currentColor;stroke:currentColor;stroke-width:0.222" />
+ <circle
+ r="1"
+ cy="0"
+ cx="0"
+ id="gpPt5-0"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <use
+ id="gpPt6-93"
+ xlink:href="#gpPt5-0"
+ style="fill:currentColor;stroke:none"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ <path
+ d="m 0,-1.33 -1.33,2 2.66,0 z"
+ id="gpPt7-4"
+ inkscape:connector-curvature="0"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <use
+ id="gpPt8-6"
+ xlink:href="#gpPt7-4"
+ style="fill:currentColor;stroke:none"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ <use
+ transform="scale(-1,-1)"
+ id="gpPt9-9"
+ xlink:href="#gpPt7-4"
+ style="stroke:currentColor"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ <use
+ id="gpPt10-0"
+ xlink:href="#gpPt9-9"
+ style="fill:currentColor;stroke:none"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ <use
+ transform="matrix(0.70710678,0.70710678,-0.70710678,0.70710678,0,0)"
+ id="gpPt11-5"
+ xlink:href="#gpPt3-8"
+ style="stroke:currentColor"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ <use
+ id="gpPt12-5"
+ xlink:href="#gpPt11-5"
+ style="fill:currentColor;stroke:none"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ </defs>
+ <style
+ type="text/css"
+ id="style7591"><![CDATA[
+ @font-face { font-family:"Futura Md BT";src:url("#FontID0") format(svg)}
+ .str0 {stroke:#2B2A29;stroke-width:20}
+ .str3 {stroke:#212220;stroke-width:20}
+ .str4 {stroke:#E32029;stroke-width:35.28}
+ .str1 {stroke:#FEFEFE;stroke-width:52.92}
+ .str2 {stroke:#5B5A50;stroke-width:35.28;stroke-dasharray:35.280000 35.280000}
+ .fil0 {fill:none}
+ .fil2 {fill:none;fill-rule:nonzero}
+ .fil1 {fill:#2B2A29}
+ .fil3 {fill:#FEFEFE}
+ .fil11 {fill:#B9A8A0}
+ .fil96 {fill:#284A98;fill-rule:nonzero}
+ .fil100 {fill:url(#id0)}
+ .fil97 {fill:url(#id1)}
+ .fil124 {fill:url(#id2)}
+ .fil95 {fill:url(#id3)}
+ .fil126 {fill:url(#id4)}
+ .fil125 {fill:url(#id5)}
+ .fil128 {fill:url(#id6)}
+ .fil127 {fill:url(#id7)}
+ .fil69 {fill:url(#id8)}
+ .fil73 {fill:url(#id9)}
+ .fil71 {fill:url(#id10)}
+ .fil68 {fill:url(#id11)}
+ .fil70 {fill:url(#id12)}
+ .fil74 {fill:url(#id13)}
+ .fil72 {fill:url(#id14)}
+ .fil41 {fill:url(#id15)}
+ .fil13 {fill:url(#id16)}
+ .fil45 {fill:url(#id17)}
+ .fil17 {fill:url(#id18)}
+ .fil43 {fill:url(#id19)}
+ .fil40 {fill:url(#id20)}
+ .fil15 {fill:url(#id21)}
+ .fil12 {fill:url(#id22)}
+ .fil42 {fill:url(#id23)}
+ .fil46 {fill:url(#id24)}
+ .fil14 {fill:url(#id25)}
+ .fil18 {fill:url(#id26)}
+ .fil44 {fill:url(#id27)}
+ .fil16 {fill:url(#id28)}
+ .fil77 {fill:url(#id29)}
+ .fil76 {fill:url(#id30)}
+ .fil75 {fill:url(#id31)}
+ .fil79 {fill:url(#id32)}
+ .fil78 {fill:url(#id33)}
+ .fil49 {fill:url(#id34)}
+ .fil21 {fill:url(#id35)}
+ .fil48 {fill:url(#id36)}
+ .fil47 {fill:url(#id37)}
+ .fil20 {fill:url(#id38)}
+ .fil19 {fill:url(#id39)}
+ .fil51 {fill:url(#id40)}
+ .fil50 {fill:url(#id41)}
+ .fil23 {fill:url(#id42)}
+ .fil22 {fill:url(#id43)}
+ .fil115 {fill:url(#id44)}
+ .fil113 {fill:url(#id45)}
+ .fil102 {fill:url(#id46)}
+ .fil105 {fill:url(#id47)}
+ .fil106 {fill:url(#id48)}
+ .fil114 {fill:url(#id49)}
+ .fil117 {fill:url(#id50)}
+ .fil112 {fill:url(#id51)}
+ .fil104 {fill:url(#id52)}
+ .fil110 {fill:url(#id53)}
+ .fil108 {fill:url(#id54)}
+ .fil116 {fill:url(#id55)}
+ .fil111 {fill:url(#id56)}
+ .fil101 {fill:url(#id57)}
+ .fil103 {fill:url(#id58)}
+ .fil118 {fill:url(#id59)}
+ .fil107 {fill:url(#id60)}
+ .fil109 {fill:url(#id61)}
+ .fil90 {fill:url(#id62)}
+ .fil67 {fill:url(#id63)}
+ .fil39 {fill:url(#id64)}
+ .fil65 {fill:url(#id65)}
+ .fil64 {fill:url(#id66)}
+ .fil37 {fill:url(#id67)}
+ .fil36 {fill:url(#id68)}
+ .fil66 {fill:url(#id69)}
+ .fil38 {fill:url(#id70)}
+ .fil91 {fill:url(#id71)}
+ .fil83 {fill:url(#id72)}
+ .fil85 {fill:url(#id73)}
+ .fil81 {fill:url(#id74)}
+ .fil80 {fill:url(#id75)}
+ .fil82 {fill:url(#id76)}
+ .fil84 {fill:url(#id77)}
+ .fil4 {fill:url(#id78)}
+ .fil56 {fill:url(#id79)}
+ .fil28 {fill:url(#id80)}
+ .fil58 {fill:url(#id81)}
+ .fil54 {fill:url(#id82)}
+ .fil30 {fill:url(#id83)}
+ .fil26 {fill:url(#id84)}
+ .fil52 {fill:url(#id85)}
+ .fil55 {fill:url(#id86)}
+ .fil24 {fill:url(#id87)}
+ .fil27 {fill:url(#id88)}
+ .fil57 {fill:url(#id89)}
+ .fil29 {fill:url(#id90)}
+ .fil53 {fill:url(#id91)}
+ .fil25 {fill:url(#id92)}
+ .fil88 {fill:url(#id93)}
+ .fil89 {fill:url(#id94)}
+ .fil86 {fill:url(#id95)}
+ .fil87 {fill:url(#id96)}
+ .fil62 {fill:url(#id97)}
+ .fil63 {fill:url(#id98)}
+ .fil34 {fill:url(#id99)}
+ .fil35 {fill:url(#id100)}
+ .fil59 {fill:url(#id101)}
+ .fil60 {fill:url(#id102)}
+ .fil31 {fill:url(#id103)}
+ .fil32 {fill:url(#id104)}
+ .fil61 {fill:url(#id105)}
+ .fil33 {fill:url(#id106)}
+ .fil6 {fill:url(#id107)}
+ .fil5 {fill:url(#id108)}
+ .fil10 {fill:url(#id109)}
+ .fil9 {fill:url(#id110)}
+ .fil94 {fill:url(#id111)}
+ .fil8 {fill:url(#id112)}
+ .fil7 {fill:url(#id113)}
+ .fil99 {fill:url(#id114)}
+ .fil98 {fill:url(#id115)}
+ .fil122 {fill:url(#id116)}
+ .fil121 {fill:url(#id117)}
+ .fil123 {fill:url(#id118)}
+ .fil119 {fill:url(#id119)}
+ .fil120 {fill:url(#id120)}
+ .fil92 {fill:url(#id121)}
+ .fil93 {fill:url(#id122)}
+ .fnt3 {font-weight:normal;font-size:1136.24px;font-family:'Futura Md BT'}
+ .fnt2 {font-weight:normal;font-size:1256.81px;font-family:'Futura Md BT'}
+ .fnt4 {font-weight:normal;font-size:1508.2px;font-family:'Futura Md BT'}
+ .fnt1 {font-weight:bold;font-size:1508.2px;font-family:'Futura Md BT'}
+ .fnt0 {font-weight:bold;font-size:2010.9px;font-family:'Futura Md BT'}
+ ]]></style>
+ <style
+ type="text/css"
+ id="style9234"><![CDATA[
+ @font-face { font-family:"Futura Md BT";src:url("#FontID0") format(svg)}
+ .str0 {stroke:#C5C6C6;stroke-width:10.58}
+ .str3 {stroke:#C5C6C6;stroke-width:17.64;stroke-linecap:round;stroke-linejoin:round}
+ .str4 {stroke:#E32029;stroke-width:35.28}
+ .str1 {stroke:#FEFEFE;stroke-width:52.92}
+ .str5 {stroke:#FEFEFE;stroke-width:52.92;stroke-linecap:round;stroke-linejoin:round}
+ .str6 {stroke:#054D00;stroke-width:52.92;stroke-linecap:round;stroke-linejoin:round}
+ .str2 {stroke:#5B5A50;stroke-width:35.28;stroke-dasharray:35.280000 35.280000}
+ .fil41 {fill:none}
+ .fil44 {fill:none;fill-rule:nonzero}
+ .fil2 {fill:#2B2A29}
+ .fil1 {fill:#FEFEFE}
+ .fil0 {fill:#054D00}
+ .fil10 {fill:#054D00;fill-rule:nonzero}
+ .fil45 {fill:url(#id0)}
+ .fil6 {fill:url(#id1)}
+ .fil55 {fill:url(#id2)}
+ .fil13 {fill:url(#id3)}
+ .fil38 {fill:url(#id4)}
+ .fil46 {fill:url(#id5)}
+ .fil7 {fill:url(#id6)}
+ .fil56 {fill:url(#id7)}
+ .fil11 {fill:url(#id8)}
+ .fil43 {fill:url(#id9)}
+ .fil39 {fill:url(#id10)}
+ .fil40 {fill:url(#id11)}
+ .fil42 {fill:url(#id12)}
+ .fil49 {fill:url(#id13)}
+ .fil51 {fill:url(#id14)}
+ .fil52 {fill:url(#id15)}
+ .fil29 {fill:url(#id16)}
+ .fil16 {fill:url(#id17)}
+ .fil23 {fill:url(#id18)}
+ .fil28 {fill:url(#id19)}
+ .fil24 {fill:url(#id20)}
+ .fil18 {fill:url(#id21)}
+ .fil31 {fill:url(#id22)}
+ .fil30 {fill:url(#id23)}
+ .fil22 {fill:url(#id24)}
+ .fil21 {fill:url(#id25)}
+ .fil19 {fill:url(#id26)}
+ .fil25 {fill:url(#id27)}
+ .fil26 {fill:url(#id28)}
+ .fil32 {fill:url(#id29)}
+ .fil20 {fill:url(#id30)}
+ .fil15 {fill:url(#id31)}
+ .fil17 {fill:url(#id32)}
+ .fil27 {fill:url(#id33)}
+ .fil3 {fill:url(#id34)}
+ .fil5 {fill:url(#id35)}
+ .fil4 {fill:url(#id36)}
+ .fil14 {fill:url(#id37)}
+ .fil12 {fill:url(#id38)}
+ .fil47 {fill:url(#id39)}
+ .fil8 {fill:url(#id40)}
+ .fil53 {fill:url(#id41)}
+ .fil57 {fill:url(#id42)}
+ .fil36 {fill:url(#id43)}
+ .fil35 {fill:url(#id44)}
+ .fil37 {fill:url(#id45)}
+ .fil33 {fill:url(#id46)}
+ .fil34 {fill:url(#id47)}
+ .fil48 {fill:url(#id48)}
+ .fil9 {fill:url(#id49)}
+ .fil54 {fill:url(#id50)}
+ .fil58 {fill:url(#id51)}
+ .fil50 {fill:url(#id52)}
+ .fnt1 {font-weight:normal;font-size:1382.5px;font-family:'Futura Md BT'}
+ .fnt2 {font-weight:bold;font-size:1382.5px;font-family:'Futura Md BT'}
+ .fnt0 {font-weight:bold;font-size:1759.55px;font-family:'Futura Md BT'}
+ ]]></style>
+ <style
+ type="text/css"
+ id="style10533"><![CDATA[
+ @font-face { font-family:"Arial";src:url("#FontID1") format(svg)}
+ @font-face { font-family:"Futura Md BT";src:url("#FontID0") format(svg)}
+ .str2 {stroke-width:5.05}
+ .str1 {stroke:#2B2A29;stroke-width:7.62}
+ .str4 {stroke:#898989;stroke-width:7.62}
+ .str9 {stroke:#C5C6C6;stroke-width:10.58}
+ .str0 {stroke:#212220;stroke-width:20}
+ .str3 {stroke:#62605E;stroke-width:20}
+ .str8 {stroke:#E09079;stroke-width:35.28}
+ .str7 {stroke:#E32029;stroke-width:35.28}
+ .str12 {stroke:#2B2A29;stroke-width:52.92}
+ .str10 {stroke:#FEFEFE;stroke-width:52.92;stroke-linecap:round;stroke-linejoin:round}
+ .str11 {stroke:#054D00;stroke-width:52.92;stroke-linecap:round;stroke-linejoin:round}
+ .str5 {stroke:#5B5A50;stroke-width:35.28;stroke-dasharray:35.280000 35.280000}
+ .str6 {stroke:#9D9C94;stroke-width:35.28;stroke-dasharray:35.280000 35.280000}
+ .fil9 {fill:none}
+ .fil8 {fill:none;fill-rule:nonzero}
+ .fil0 {fill:#2B2A29}
+ .fil2 {fill:#FEFEFE}
+ .fil130 {fill:#054D00}
+ .fil4 {fill:#898989}
+ .fil40 {fill:#B9A8A0}
+ .fil69 {fill:#C9C0BB}
+ .fil3 {fill:#EBECEC}
+ .fil1 {fill:#054D00;fill-rule:nonzero}
+ .fil6 {fill:#6F936D;fill-rule:nonzero}
+ .fil5 {fill:#898989;fill-rule:nonzero}
+ .fil7 {fill:#EBECEC;fill-rule:nonzero}
+ .fil35 {fill:url(#id60)}
+ .fil98 {fill:url(#id61)}
+ .fil39 {fill:url(#id62)}
+ .fil102 {fill:url(#id63)}
+ .fil15 {fill:url(#id64)}
+ .fil22 {fill:url(#id65)}
+ .fil42 {fill:url(#id66)}
+ .fil46 {fill:url(#id67)}
+ .fil44 {fill:url(#id68)}
+ .fil41 {fill:url(#id69)}
+ .fil43 {fill:url(#id70)}
+ .fil47 {fill:url(#id71)}
+ .fil45 {fill:url(#id72)}
+ .fil50 {fill:url(#id73)}
+ .fil49 {fill:url(#id74)}
+ .fil48 {fill:url(#id75)}
+ .fil52 {fill:url(#id76)}
+ .fil51 {fill:url(#id77)}
+ .fil71 {fill:url(#id78)}
+ .fil75 {fill:url(#id79)}
+ .fil73 {fill:url(#id80)}
+ .fil70 {fill:url(#id81)}
+ .fil72 {fill:url(#id82)}
+ .fil76 {fill:url(#id83)}
+ .fil74 {fill:url(#id84)}
+ .fil79 {fill:url(#id85)}
+ .fil78 {fill:url(#id86)}
+ .fil77 {fill:url(#id87)}
+ .fil81 {fill:url(#id88)}
+ .fil80 {fill:url(#id89)}
+ .fil107 {fill:url(#id90)}
+ .fil117 {fill:url(#id91)}
+ .fil120 {fill:url(#id92)}
+ .fil115 {fill:url(#id93)}
+ .fil119 {fill:url(#id94)}
+ .fil118 {fill:url(#id95)}
+ .fil122 {fill:url(#id96)}
+ .fil123 {fill:url(#id97)}
+ .fil113 {fill:url(#id98)}
+ .fil109 {fill:url(#id99)}
+ .fil112 {fill:url(#id100)}
+ .fil110 {fill:url(#id101)}
+ .fil114 {fill:url(#id102)}
+ .fil116 {fill:url(#id103)}
+ .fil121 {fill:url(#id104)}
+ .fil106 {fill:url(#id105)}
+ .fil108 {fill:url(#id106)}
+ .fil111 {fill:url(#id107)}
+ .fil66 {fill:url(#id108)}
+ .fil67 {fill:url(#id109)}
+ .fil95 {fill:url(#id110)}
+ .fil96 {fill:url(#id111)}
+ .fil68 {fill:url(#id112)}
+ .fil97 {fill:url(#id113)}
+ .fil65 {fill:url(#id114)}
+ .fil94 {fill:url(#id115)}
+ .fil57 {fill:url(#id116)}
+ .fil59 {fill:url(#id117)}
+ .fil55 {fill:url(#id118)}
+ .fil53 {fill:url(#id119)}
+ .fil56 {fill:url(#id120)}
+ .fil58 {fill:url(#id121)}
+ .fil54 {fill:url(#id122)}
+ .fil10 {fill:url(#id123)}
+ .fil63 {fill:url(#id124)}
+ .fil64 {fill:url(#id125)}
+ .fil60 {fill:url(#id126)}
+ .fil61 {fill:url(#id127)}
+ .fil62 {fill:url(#id128)}
+ .fil12 {fill:url(#id129)}
+ .fil11 {fill:url(#id130)}
+ .fil86 {fill:url(#id131)}
+ .fil88 {fill:url(#id132)}
+ .fil84 {fill:url(#id133)}
+ .fil82 {fill:url(#id134)}
+ .fil85 {fill:url(#id135)}
+ .fil87 {fill:url(#id136)}
+ .fil83 {fill:url(#id137)}
+ .fil17 {fill:url(#id138)}
+ .fil92 {fill:url(#id139)}
+ .fil93 {fill:url(#id140)}
+ .fil89 {fill:url(#id141)}
+ .fil90 {fill:url(#id142)}
+ .fil91 {fill:url(#id143)}
+ .fil19 {fill:url(#id144)}
+ .fil18 {fill:url(#id145)}
+ .fil101 {fill:url(#id146)}
+ .fil100 {fill:url(#id147)}
+ .fil105 {fill:url(#id148)}
+ .fil104 {fill:url(#id149)}
+ .fil25 {fill:url(#id150)}
+ .fil24 {fill:url(#id151)}
+ .fil29 {fill:url(#id152)}
+ .fil28 {fill:url(#id153)}
+ .fil127 {fill:url(#id154)}
+ .fil126 {fill:url(#id155)}
+ .fil128 {fill:url(#id156)}
+ .fil125 {fill:url(#id157)}
+ .fil99 {fill:url(#id158)}
+ .fil103 {fill:url(#id159)}
+ .fil34 {fill:url(#id160)}
+ .fil32 {fill:url(#id161)}
+ .fil38 {fill:url(#id162)}
+ .fil36 {fill:url(#id163)}
+ .fil27 {fill:url(#id164)}
+ .fil26 {fill:url(#id165)}
+ .fil31 {fill:url(#id166)}
+ .fil30 {fill:url(#id167)}
+ .fil124 {fill:url(#id168)}
+ .fil129 {fill:url(#id169)}
+ .fil33 {fill:url(#id170)}
+ .fil37 {fill:url(#id171)}
+ .fil16 {fill:url(#id172)}
+ .fil23 {fill:url(#id173)}
+ .fil14 {fill:url(#id174)}
+ .fil13 {fill:url(#id175)}
+ .fil21 {fill:url(#id176)}
+ .fil20 {fill:url(#id177)}
+ .fnt7 {font-weight:bold;font-size:423.33px;font-family:'Arial'}
+ .fnt0 {font-weight:bold;font-size:493.89px;font-family:'Futura Md BT'}
+ .fnt1 {font-weight:normal;font-size:1382.5px;font-family:'Futura Md BT'}
+ .fnt5 {font-weight:bold;font-size:1382.5px;font-family:'Futura Md BT'}
+ .fnt2 {font-weight:bold;font-size:1508.17px;font-family:'Futura Md BT'}
+ .fnt6 {font-weight:bold;font-size:1508.2px;font-family:'Arial'}
+ .fnt3 {font-weight:bold;font-size:1508.2px;font-family:'Futura Md BT'}
+ .fnt4 {font-weight:bold;font-size:1759.55px;font-family:'Futura Md BT'}
+ ]]></style>
+ <style
+ type="text/css"
+ id="style25752"><![CDATA[
+ @font-face { font-family:"Futura Md BT";src:url("#FontID0") format(svg)}
+ .str0 {stroke:#FEFEFE;stroke-width:7.62}
+ .str1 {stroke:#FEFEFE;stroke-width:7.62}
+ .fil2 {fill:none}
+ .fil4 {fill:#2B2A29}
+ .fil0 {fill:#FEFEFE}
+ .fil1 {fill:#FEFEFE}
+ .fil3 {fill:#C6D663;fill-rule:nonzero}
+ .fil37 {fill:url(#id51)}
+ .fil38 {fill:url(#id52)}
+ .fil40 {fill:url(#id53)}
+ .fil15 {fill:url(#id54)}
+ .fil74 {fill:url(#id55)}
+ .fil20 {fill:url(#id56)}
+ .fil26 {fill:url(#id57)}
+ .fil25 {fill:url(#id58)}
+ .fil44 {fill:url(#id59)}
+ .fil48 {fill:url(#id60)}
+ .fil34 {fill:url(#id61)}
+ .fil51 {fill:url(#id62)}
+ .fil61 {fill:url(#id63)}
+ .fil56 {fill:url(#id64)}
+ .fil50 {fill:url(#id65)}
+ .fil60 {fill:url(#id66)}
+ .fil53 {fill:url(#id67)}
+ .fil52 {fill:url(#id68)}
+ .fil55 {fill:url(#id69)}
+ .fil58 {fill:url(#id70)}
+ .fil57 {fill:url(#id71)}
+ .fil54 {fill:url(#id72)}
+ .fil62 {fill:url(#id73)}
+ .fil13 {fill:url(#id74)}
+ .fil72 {fill:url(#id75)}
+ .fil9 {fill:url(#id76)}
+ .fil68 {fill:url(#id77)}
+ .fil6 {fill:url(#id78)}
+ .fil65 {fill:url(#id79)}
+ .fil10 {fill:url(#id80)}
+ .fil7 {fill:url(#id81)}
+ .fil69 {fill:url(#id82)}
+ .fil66 {fill:url(#id83)}
+ .fil16 {fill:url(#id84)}
+ .fil75 {fill:url(#id85)}
+ .fil17 {fill:url(#id86)}
+ .fil76 {fill:url(#id87)}
+ .fil11 {fill:url(#id88)}
+ .fil70 {fill:url(#id89)}
+ .fil12 {fill:url(#id90)}
+ .fil8 {fill:url(#id91)}
+ .fil71 {fill:url(#id92)}
+ .fil67 {fill:url(#id93)}
+ .fil14 {fill:url(#id94)}
+ .fil73 {fill:url(#id95)}
+ .fil29 {fill:url(#id96)}
+ .fil33 {fill:url(#id97)}
+ .fil19 {fill:url(#id98)}
+ .fil43 {fill:url(#id99)}
+ .fil45 {fill:url(#id100)}
+ .fil39 {fill:url(#id101)}
+ .fil36 {fill:url(#id102)}
+ .fil46 {fill:url(#id103)}
+ .fil47 {fill:url(#id104)}
+ .fil41 {fill:url(#id105)}
+ .fil35 {fill:url(#id106)}
+ .fil42 {fill:url(#id107)}
+ .fil59 {fill:url(#id108)}
+ .fil49 {fill:url(#id109)}
+ .fil63 {fill:url(#id110)}
+ .fil5 {fill:url(#id111)}
+ .fil18 {fill:url(#id112)}
+ .fil64 {fill:url(#id113)}
+ .fil77 {fill:url(#id114)}
+ .fil28 {fill:url(#id115)}
+ .fil31 {fill:url(#id116)}
+ .fil32 {fill:url(#id117)}
+ .fil21 {fill:url(#id118)}
+ .fil22 {fill:url(#id119)}
+ .fil24 {fill:url(#id120)}
+ .fil23 {fill:url(#id121)}
+ .fil27 {fill:url(#id122)}
+ .fil30 {fill:url(#id123)}
+ .fnt0 {font-weight:bold;font-size:1243.98px;font-family:'Futura Md BT'}
+ ]]></style>
+ <style
+ type="text/css"
+ id="style98"><![CDATA[
+ @font-face { font-family:"Symbol";src:url("#FontID1") format(svg)}
+ @font-face { font-family:"Arial";src:url("#FontID0") format(svg)}
+ .str1 {stroke:#FEFEFE;stroke-width:7.62}
+ .str2 {stroke:#FEFEFE;stroke-width:35.28}
+ .str0 {stroke:#FEFEFE;stroke-width:52.92}
+ .str5 {stroke:#212220;stroke-width:52.92}
+ .str6 {stroke:#2B2A29;stroke-width:70.56}
+ .str3 {stroke:#FEFEFE;stroke-width:70.56}
+ .str4 {stroke:#212220;stroke-width:70.56}
+ .fil2 {fill:none}
+ .fil3 {fill:#2B2A29}
+ .fil0 {fill:#FEFEFE}
+ .fil5 {fill:#1C1B17;fill-rule:nonzero}
+ .fil1 {fill:#FEFEFE;fill-rule:nonzero}
+ .fil4 {fill:#212220;fill-rule:nonzero}
+ .fnt1 {font-weight:bold;font-size:423.33px;font-family:'Arial'}
+ .fnt4 {font-weight:bold;font-size:423.33px;font-family:'Arial'}
+ .fnt5 {font-weight:bold;font-size:493.88px;font-family:'Arial'}
+ .fnt2 {font-weight:normal;font-size:1508.2px;font-family:'Symbol'}
+ .fnt0 {font-weight:bold;font-size:1508.2px;font-family:'Arial'}
+ .fnt3 {font-weight:bold;font-size:1508.2px;font-family:'Arial'}
+ ]]></style>
+ <style
+ type="text/css"
+ id="style7232"><![CDATA[
+ @font-face { font-family:"Arial";src:url("#FontID0") format(svg)}
+ .str0 {stroke:#FEFEFE;stroke-width:70.56}
+ .fil0 {fill:none}
+ .fil2 {fill:#FEFEFE}
+ .fil1 {fill:#FEFEFE;fill-rule:nonzero}
+ .fnt0 {font-weight:bold;font-size:2533.72px;font-family:'Arial'}
+ ]]></style>
+ <style
+ type="text/css"
+ id="style7094"><![CDATA[
+ @font-face { font-family:"Futura Md BT";src:url("#FontID1") format(svg)}
+ @font-face { font-family:"Symbol";src:url("#FontID0") format(svg)}
+ .str2 {stroke:#2B2A29;stroke-width:7.62}
+ .str3 {stroke:#9D9E9E;stroke-width:7.62}
+ .str5 {stroke:#FEFEFE;stroke-width:42.33}
+ .str7 {stroke:#FEFEFE;stroke-width:42.33}
+ .str9 {stroke:#FEFEFE;stroke-width:52.92}
+ .str4 {stroke:#2B2A29;stroke-width:70.56}
+ .str10 {stroke:#727271;stroke-width:70.56}
+ .str8 {stroke:#FEFEFE;stroke-width:70.56}
+ .str6 {stroke:#9D9E9E;stroke-width:70.56}
+ .str0 {stroke:#FEFEFE;stroke-width:42.33;stroke-dasharray:84.660000 42.330000}
+ .str1 {stroke:#FEFEFE;stroke-width:42.33;stroke-dasharray:84.660000 42.330000}
+ .fil0 {fill:none}
+ .fil2 {fill:#2B2A29}
+ .fil7 {fill:#FEFEFE}
+ .fil5 {fill:#9D9E9E}
+ .fil1 {fill:#FEFEFE}
+ .fil3 {fill:#2B2A29;fill-rule:nonzero}
+ .fil6 {fill:#FEFEFE;fill-rule:nonzero}
+ .fil4 {fill:#9D9E9E;fill-rule:nonzero}
+ .fil8 {fill:#FEFEFE;fill-rule:nonzero}
+ .fil94 {fill:url(#id25)}
+ .fil97 {fill:url(#id26)}
+ .fil59 {fill:url(#id27)}
+ .fil26 {fill:url(#id28)}
+ .fil41 {fill:url(#id29)}
+ .fil112 {fill:url(#id30)}
+ .fil61 {fill:url(#id31)}
+ .fil48 {fill:url(#id32)}
+ .fil17 {fill:url(#id33)}
+ .fil105 {fill:url(#id34)}
+ .fil46 {fill:url(#id35)}
+ .fil89 {fill:url(#id36)}
+ .fil91 {fill:url(#id37)}
+ .fil76 {fill:url(#id38)}
+ .fil43 {fill:url(#id39)}
+ .fil62 {fill:url(#id40)}
+ .fil79 {fill:url(#id41)}
+ .fil55 {fill:url(#id42)}
+ .fil64 {fill:url(#id43)}
+ .fil92 {fill:url(#id44)}
+ .fil37 {fill:url(#id45)}
+ .fil90 {fill:url(#id46)}
+ .fil28 {fill:url(#id47)}
+ .fil108 {fill:url(#id48)}
+ .fil100 {fill:url(#id49)}
+ .fil80 {fill:url(#id50)}
+ .fil98 {fill:url(#id51)}
+ .fil111 {fill:url(#id52)}
+ .fil70 {fill:url(#id53)}
+ .fil35 {fill:url(#id54)}
+ .fil103 {fill:url(#id55)}
+ .fil104 {fill:url(#id56)}
+ .fil49 {fill:url(#id57)}
+ .fil65 {fill:url(#id58)}
+ .fil33 {fill:url(#id59)}
+ .fil84 {fill:url(#id60)}
+ .fil102 {fill:url(#id61)}
+ .fil88 {fill:url(#id62)}
+ .fil68 {fill:url(#id63)}
+ .fil51 {fill:url(#id64)}
+ .fil85 {fill:url(#id65)}
+ .fil86 {fill:url(#id66)}
+ .fil47 {fill:url(#id67)}
+ .fil50 {fill:url(#id68)}
+ .fil56 {fill:url(#id69)}
+ .fil54 {fill:url(#id70)}
+ .fil18 {fill:url(#id71)}
+ .fil72 {fill:url(#id72)}
+ .fil38 {fill:url(#id73)}
+ .fil53 {fill:url(#id74)}
+ .fil52 {fill:url(#id75)}
+ .fil15 {fill:url(#id76)}
+ .fil34 {fill:url(#id77)}
+ .fil107 {fill:url(#id78)}
+ .fil83 {fill:url(#id79)}
+ .fil106 {fill:url(#id80)}
+ .fil45 {fill:url(#id81)}
+ .fil99 {fill:url(#id82)}
+ .fil73 {fill:url(#id83)}
+ .fil67 {fill:url(#id84)}
+ .fil81 {fill:url(#id85)}
+ .fil78 {fill:url(#id86)}
+ .fil39 {fill:url(#id87)}
+ .fil93 {fill:url(#id88)}
+ .fil66 {fill:url(#id89)}
+ .fil29 {fill:url(#id90)}
+ .fil44 {fill:url(#id91)}
+ .fil31 {fill:url(#id92)}
+ .fil32 {fill:url(#id93)}
+ .fil42 {fill:url(#id94)}
+ .fil96 {fill:url(#id95)}
+ .fil60 {fill:url(#id96)}
+ .fil21 {fill:url(#id97)}
+ .fil115 {fill:url(#id98)}
+ .fil69 {fill:url(#id99)}
+ .fil109 {fill:url(#id100)}
+ .fil116 {fill:url(#id101)}
+ .fil19 {fill:url(#id102)}
+ .fil110 {fill:url(#id103)}
+ .fil87 {fill:url(#id104)}
+ .fil12 {fill:url(#id105)}
+ .fil9 {fill:url(#id106)}
+ .fil16 {fill:url(#id107)}
+ .fil71 {fill:url(#id108)}
+ .fil30 {fill:url(#id109)}
+ .fil101 {fill:url(#id110)}
+ .fil95 {fill:url(#id111)}
+ .fil10 {fill:url(#id112)}
+ .fil13 {fill:url(#id113)}
+ .fil11 {fill:url(#id114)}
+ .fil63 {fill:url(#id115)}
+ .fil27 {fill:url(#id116)}
+ .fil23 {fill:url(#id117)}
+ .fil113 {fill:url(#id118)}
+ .fil14 {fill:url(#id119)}
+ .fil74 {fill:url(#id120)}
+ .fil36 {fill:url(#id121)}
+ .fil82 {fill:url(#id122)}
+ .fil40 {fill:url(#id123)}
+ .fil24 {fill:url(#id124)}
+ .fil75 {fill:url(#id125)}
+ .fil20 {fill:url(#id126)}
+ .fil25 {fill:url(#id127)}
+ .fil57 {fill:url(#id128)}
+ .fil22 {fill:url(#id129)}
+ .fil77 {fill:url(#id130)}
+ .fil114 {fill:url(#id131)}
+ .fil58 {fill:url(#id132)}
+ .fnt6 {font-weight:bold;font-size:423.33px;font-family:'Futura Md BT'}
+ .fnt0 {font-weight:normal;font-size:1131.15px;font-family:'Symbol'}
+ .fnt1 {font-weight:bold;font-size:1131.15px;font-family:'Futura Md BT'}
+ .fnt8 {font-weight:bold;font-size:1256.81px;font-family:'Futura Md BT'}
+ .fnt5 {font-weight:normal;font-size:1508.2px;font-family:'Futura Md BT'}
+ .fnt7 {font-weight:bold;font-size:1508.2px;font-family:'Futura Md BT'}
+ .fnt4 {font-weight:normal;font-size:1900.27px;font-family:'Futura Md BT'}
+ .fnt9 {font-weight:normal;font-size:2111.45px;font-family:'Futura Md BT'}
+ .fnt3 {font-weight:normal;font-size:2533.72px;font-family:'Futura Md BT'}
+ .fnt2 {font-weight:bold;font-size:2533.72px;font-family:'Futura Md BT'}
+ ]]></style>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="4.6647002"
+ inkscape:cx="-78.240275"
+ inkscape:cy="24.849142"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-global="true"
+ inkscape:snap-grids="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8098">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-244.77811,-595.10722)">
+ <path
+ style="fill:url(#linearGradient8425);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 246.27811,595.60722 h 21 v 2 l -6.5,10.5 -6,-10.5 h -8.5 z"
+ id="path4763"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ style="opacity:0.75;fill:#ffffff;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter8458)"
+ d="m 260.56574,601.46532 c -0.0435,-1.8491 2.94024,0.22303 6.9605,0.15554 -2.37934,0.87001 -4.78447,3.12651 -6.54699,4.79868 -0.69731,-2.00112 -0.66057,-4.5027 -0.41351,-4.95422 z"
+ id="path8400"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc"
+ transform="rotate(96.15813,261.98063,600.60609)" />
+ <path
+ style="fill:none;fill-opacity:0.49803922;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.8892617"
+ d="m 254.77811,597.60722 h 12"
+ id="path8429"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ sodipodi:nodetypes="ccccccc"
+ inkscape:connector-curvature="0"
+ id="path8431"
+ d="m 246.27811,595.60722 h 21 v 2 l -6.5,10.5 -6,-10.5 h -8.5 z"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g5318"
+ transform="matrix(1.0666667,0,0,1.0666667,641.03977,883.51086)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g6386"
+ transform="matrix(1.0666667,0,0,1.0666667,1224.7427,320.09945)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g7162"
+ transform="matrix(1.0666667,0,0,1.0666667,483.79064,152.88667)" />
+ <path
+ style="color:#ff0000;fill:#446a97;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 268.78227,608.11072 -3.0055,0.004 -4.57586,6.49625 h -0.83594 l -4.57586,-6.49625 -2.5055,-0.004 -8.5055,0.004 v 10.9925 h 24 z"
+ id="path7438-3"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccc" />
+ <path
+ style="color:#ff0000;fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 244.77811,607.61472 8.5055,-0.004 2.5055,0.004 4.57586,6.49625 h 0.83594 l 4.57586,-6.49625 2.5055,-0.004 0.5055,0.004"
+ id="path7438"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccc" />
+ <text
+ id="text7408-2"
+ class="fil7 fnt4"
+ y="183.92776"
+ x="-484.44421"
+ style="font-weight:normal;font-size:10.66666698px;font-family:'Futura Md BT';text-align:center;text-anchor:middle;clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;stroke-width:1.06666672;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ id="text7422"
+ class="fil7 fnt4"
+ y="213.22548"
+ x="-466.97989"
+ style="font-weight:normal;font-size:10.66666698px;font-family:'Futura Md BT';text-align:center;text-anchor:middle;clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;stroke-width:1.06666672;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_tip_lateral_force-24.svg b/pixmaps/src/gwy_tip_lateral_force-24.svg
new file mode 100644
index 0000000..9462641
--- /dev/null
+++ b/pixmaps/src/gwy_tip_lateral_force-24.svg
@@ -0,0 +1,212 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8093"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_tip_lateral_force-24.svg"
+ inkscape:export-filename="gwy_cantilever-24.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96">
+ <defs
+ id="defs8095">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient8423">
+ <stop
+ style="stop-color:#6c7d92;stop-opacity:1"
+ offset="0"
+ id="stop8419" />
+ <stop
+ id="stop8427"
+ offset="0.49999958"
+ style="stop-color:#a3b8d2;stop-opacity:1" />
+ <stop
+ style="stop-color:#446a97;stop-opacity:1"
+ offset="1"
+ id="stop8421" />
+ </linearGradient>
+ <filter
+ inkscape:collect="always"
+ style="color-interpolation-filters:sRGB"
+ id="filter8458"
+ x="-0.12856513"
+ width="1.2571303"
+ y="-0.11250482"
+ height="1.2250096">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.16275744"
+ id="feGaussianBlur8460" />
+ </filter>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8423"
+ id="linearGradient8425"
+ x1="264.72632"
+ y1="603.01031"
+ x2="259.62939"
+ y2="606.03558"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-6,1)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8423"
+ id="linearGradient8439"
+ x1="257.04321"
+ y1="596.21021"
+ x2="249.13335"
+ y2="600.46936"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8423"
+ id="linearGradient8443"
+ gradientUnits="userSpaceOnUse"
+ x1="255.01131"
+ y1="595.8941"
+ x2="249.13335"
+ y2="600.46936"
+ gradientTransform="translate(0,-1)" />
+ <filter
+ inkscape:collect="always"
+ style="color-interpolation-filters:sRGB"
+ id="filter8458-3"
+ x="-0.12856513"
+ width="1.2571303"
+ y="-0.11250482"
+ height="1.2250096">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.16275744"
+ id="feGaussianBlur8460-6" />
+ </filter>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="4.6681319"
+ inkscape:cx="27.750793"
+ inkscape:cy="52.194706"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-global="true"
+ inkscape:snap-grids="true"
+ showguides="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8098">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-244.77811,-595.10722)">
+ <g
+ id="g8429"
+ transform="translate(1.7320071)">
+ <path
+ sodipodi:nodetypes="cccc"
+ inkscape:connector-curvature="0"
+ id="path4763"
+ d="m 259.27811,601.10722 0.5,11.5 -9.5,-7.5 z"
+ style="fill:url(#linearGradient8425);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" />
+ <path
+ transform="rotate(96.15813,256.08791,601.63681)"
+ sodipodi:nodetypes="cccc"
+ inkscape:connector-curvature="0"
+ id="path8400"
+ d="m 258.79012,602.32301 c 0.50175,-0.8506 3.55001,-1.59803 6.07548,-4.43057 l -4.45192,6.75923 z"
+ style="opacity:0.75;fill:#ffffff;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter8458)" />
+ </g>
+ <path
+ style="fill:url(#linearGradient8439);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
+ d="m 250.51012,606.60722 -5.23201,-11 h 12 l 5.73201,5 z"
+ id="path8431"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path8441"
+ d="m 250.01012,605.10722 -4.73201,-9.5 h 12.5 l 4.73201,3.5 z"
+ style="fill:url(#linearGradient8443);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" />
+ <g
+ id="g8502"
+ transform="matrix(0.82056452,-4.0128921e-4,3.965189e-4,0.8107963,45.858375,117.23358)"
+ style="stroke-width:1.2259922">
+ <g
+ transform="translate(53.680525,-10.5)"
+ id="g8496"
+ style="stroke-width:1.2259922">
+ <path
+ style="fill:#7db846;fill-opacity:1;stroke:#000000;stroke-width:1.22597539;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 192.87521,618.18144 0.10352,6.98437 1.50586,-1.00586 c 1.07724,1.57525 3.67082,4.48227 8.30078,4.65821 0.18612,0.007 0.35883,-0.004 0.53906,-0.006 0.18057,0.002 0.35454,0.0129 0.54102,0.006 4.62995,-0.17594 7.22159,-3.08296 8.29883,-4.65821 l 1.50781,1.00586 0.10156,-6.98437 -6.22265,2.46289 1.62109,1.13086 c 0,0 -0.4587,1.02405 -1.49609,1.99805 -1.09067,0.90811 -2.53862,1.70864 -4.35157,1.71093 -1.79395,-0.002 -3.23122,-0.78546 -4.31836,-1.68164 -1.05971,-0.98248 -1.5292 [...]
+ id="path5078-9-4-0"
+ inkscape:connector-curvature="0" />
+ <path
+ style="opacity:0.75;fill:#ffffff;fill-rule:evenodd;stroke:none;stroke-width:1.2259922px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter8458-3)"
+ d="m 250.90429,606.02781 c 3.06172,-3.48728 5.4188,-3.31597 9.0367,-1.72284 -2.60453,-0.36435 -4.99615,-1.53065 -8.55144,2.21131 z"
+ id="path8400-3"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc"
+ transform="matrix(0.69253078,-0.71692013,-0.70859102,-0.68762746,458.21548,1223.5414)" />
+ <path
+ transform="matrix(0.41138651,-0.90246273,-0.89894469,-0.42038875,652.91909,1100.5553)"
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path8137"
+ d="m 248.50329,606.59306 1.32033,-1.46223 2.39304,-1.06565 c -1.38665,1.37707 -2.04033,2.15957 -3.55177,3.40035 z"
+ style="opacity:0.75;fill:#ffffff;fill-rule:evenodd;stroke:none;stroke-width:1.2259922px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter8458-3)" />
+ </g>
+ </g>
+ <path
+ style="fill:#5275a0;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;fill-opacity:1"
+ d="m 250.01012,605.10722 0.5,1.5 12.5,-6 -0.5,-1.5 z"
+ id="path8520"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_tip_map-24.svg b/pixmaps/src/gwy_tip_map-24.svg
new file mode 100644
index 0000000..75a6867
--- /dev/null
+++ b/pixmaps/src/gwy_tip_map-24.svg
@@ -0,0 +1,170 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg10043"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_tip_map-24.svg"
+ inkscape:export-filename="gwy_arithmetic-24.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs10045">
+ <linearGradient
+ id="linearGradient8423"
+ inkscape:collect="always">
+ <stop
+ id="stop8419"
+ offset="0"
+ style="stop-color:#6c7d92;stop-opacity:1" />
+ <stop
+ style="stop-color:#a3b8d2;stop-opacity:1"
+ offset="0.49999958"
+ id="stop8427" />
+ <stop
+ id="stop8421"
+ offset="1"
+ style="stop-color:#446a97;stop-opacity:1" />
+ </linearGradient>
+ <filter
+ height="1.2250096"
+ y="-0.11250482"
+ width="1.2571303"
+ x="-0.12856513"
+ id="filter8458"
+ style="color-interpolation-filters:sRGB"
+ inkscape:collect="always">
+ <feGaussianBlur
+ id="feGaussianBlur8460"
+ stdDeviation="0.16275744"
+ inkscape:collect="always" />
+ </filter>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8423"
+ id="linearGradient8513"
+ gradientUnits="userSpaceOnUse"
+ x1="263.77811"
+ y1="602.10724"
+ x2="257.77811"
+ y2="602.10724"
+ gradientTransform="translate(-51.91606,-129.26933)" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="11.20539"
+ inkscape:cx="-29.110699"
+ inkscape:cy="22.66709"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ showguides="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata10048">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-197.36205,-472.33789)">
+ <g
+ transform="matrix(0.39130434,0,0,0.39130434,148.44966,249.94138)"
+ id="layer1-6"
+ inkscape:label="Layer 1"
+ style="opacity:1;vector-effect:none;fill:#c1665a;fill-opacity:1;stroke:#000000;stroke-width:2.55555561;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:7.66666682,7.66666682;stroke-dashoffset:3.83333341;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none">
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="rect11972"
+ d="m 128.83165,602.84665 h 23 v 23 h -23 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#c1665a;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.55555561;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:7.66666682,7.66666682;stroke-dashoffset:3.83333341;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ </g>
+ <path
+ style="fill:url(#linearGradient8513);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 198.86205,472.83789 v 2 h 3.35742 l 4.64258,8 2.89453,-3.56055 3.60547,6.06055 6.5,-10.5 v -2 z"
+ id="path8505"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccccc" />
+ <path
+ transform="rotate(96.15813,291.06382,514.49005)"
+ sodipodi:nodetypes="cccc"
+ inkscape:connector-curvature="0"
+ id="path8507"
+ d="m 261.93542,604.83785 c -0.0435,-1.8491 1.57056,-3.1495 5.59082,-3.21699 -2.37934,0.87001 -3.89751,2.02501 -5.66003,3.69718 -0.69731,-2.00112 -0.17785,-0.0287 0.0692,-0.48019 z"
+ style="opacity:0.75;fill:#ffffff;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter8458)" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path8509"
+ d="m 202.86205,474.83789 h 12"
+ style="fill:none;fill-opacity:0.49803922;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.8892617" />
+ <path
+ style="opacity:0.75;fill:#ffffff;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter8458)"
+ d="m 260.56574,601.46532 c -0.0435,-1.8491 2.94024,0.22303 6.9605,0.15554 -2.37934,0.87001 -4.78447,3.12651 -6.54699,4.79868 -0.69731,-2.00112 -0.66057,-4.5027 -0.41351,-4.95422 z"
+ id="path8400"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc"
+ transform="rotate(96.15813,293.39039,517.93379)" />
+ <path
+ style="fill:none;fill-opacity:0.49803922;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.8892617"
+ d="m 207.36205,474.83789 h 12"
+ id="path8429"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <circle
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#db2424;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.5;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="path8522"
+ cx="213.36205"
+ cy="486.33789"
+ r="3.5" />
+ <g
+ transform="matrix(1.0666667,0,0,1.0666667,-295.25305,-227.1179)"
+ id="layer1-9"
+ inkscape:label="Layer 1" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_tip_model-24.svg b/pixmaps/src/gwy_tip_model-24.svg
new file mode 100644
index 0000000..2fcb363
--- /dev/null
+++ b/pixmaps/src/gwy_tip_model-24.svg
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8093"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_tip_model-24.svg"
+ inkscape:export-filename="gwy_flip_horizontally-24.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs8095">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient8423">
+ <stop
+ style="stop-color:#6c7d92;stop-opacity:1"
+ offset="0"
+ id="stop8419" />
+ <stop
+ id="stop8427"
+ offset="0.49999958"
+ style="stop-color:#a3b8d2;stop-opacity:1" />
+ <stop
+ style="stop-color:#446a97;stop-opacity:1"
+ offset="1"
+ id="stop8421" />
+ </linearGradient>
+ <filter
+ inkscape:collect="always"
+ style="color-interpolation-filters:sRGB"
+ id="filter8458"
+ x="-0.12856513"
+ width="1.2571303"
+ y="-0.11250482"
+ height="1.2250096">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.16275744"
+ id="feGaussianBlur8460" />
+ </filter>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8423"
+ id="linearGradient8425"
+ x1="263.77811"
+ y1="602.10724"
+ x2="257.77811"
+ y2="602.10724"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8423"
+ id="linearGradient8479"
+ gradientUnits="userSpaceOnUse"
+ x1="-261.77811"
+ y1="-593.10724"
+ x2="-253.77811"
+ y2="-593.10724"
+ gradientTransform="translate(-3,-10.5)" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="9.2807131"
+ inkscape:cx="-51.499084"
+ inkscape:cy="-2.6637179"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-global="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8098">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-244.77811,-595.10722)">
+ <path
+ style="fill:url(#linearGradient8425);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 246.27811,600.60722 h 21 v 2 h -12.5 -8.5 z"
+ id="path4763"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccc" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:url(#linearGradient8479);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="path8428"
+ sodipodi:type="arc"
+ sodipodi:cx="-260.77811"
+ sodipodi:cy="-602.60724"
+ sodipodi:rx="6.5"
+ sodipodi:ry="9.4999809"
+ sodipodi:start="3.1415927"
+ sodipodi:end="0"
+ d="m -267.27811,-602.60724 a 6.5,9.4999809 0 0 1 6.5,-9.49998 6.5,9.4999809 0 0 1 6.5,9.49998 h -6.5 z"
+ transform="scale(-1)" />
+ <path
+ style="opacity:0.75;fill:#ffffff;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter8458)"
+ d="m 260.95559,600.41746 c -0.0435,-1.8491 3.33008,-0.82484 7.35034,-0.89233 0.4282,3.07047 -4.25428,4.40524 -6.99048,5.34943 -0.69731,-2.00112 -0.60692,-4.00558 -0.35986,-4.4571 z"
+ id="path8400"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc"
+ transform="rotate(96.15813,259.43479,601.93266)" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.88926172;fill-opacity:0.49803922"
+ d="m 254.77811,602.60722 h 12"
+ id="path8429"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ sodipodi:nodetypes="cccccc"
+ inkscape:connector-curvature="0"
+ id="path8431"
+ d="m 246.27811,600.60722 h 21 v 2 h -12.5 -8.5 z"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_tip_pid-24.svg b/pixmaps/src/gwy_tip_pid-24.svg
new file mode 100644
index 0000000..2728aff
--- /dev/null
+++ b/pixmaps/src/gwy_tip_pid-24.svg
@@ -0,0 +1,1114 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8093"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_tip_pid-24.svg"
+ inkscape:export-filename="gwy_cantilever-24.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96">
+ <defs
+ id="defs8095">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient8423">
+ <stop
+ style="stop-color:#6c7d92;stop-opacity:1"
+ offset="0"
+ id="stop8419" />
+ <stop
+ id="stop8427"
+ offset="0.49999958"
+ style="stop-color:#a3b8d2;stop-opacity:1" />
+ <stop
+ style="stop-color:#446a97;stop-opacity:1"
+ offset="1"
+ id="stop8421" />
+ </linearGradient>
+ <filter
+ inkscape:collect="always"
+ style="color-interpolation-filters:sRGB"
+ id="filter8458"
+ x="-0.12856513"
+ width="1.2571303"
+ y="-0.11250482"
+ height="1.2250096">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.16275744"
+ id="feGaussianBlur8460" />
+ </filter>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8423"
+ id="linearGradient8425"
+ x1="263.77811"
+ y1="602.10724"
+ x2="257.77811"
+ y2="602.10724"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-5)" />
+ <defs
+ id="defs7146">
+ <circle
+ r="0.5"
+ id="gpDot"
+ cx="0"
+ cy="0"
+ style="stroke-width:0.5" />
+ <path
+ d="M -1,0 1,0 M 0,-1 0,1"
+ id="gpPt0"
+ inkscape:connector-curvature="0"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <path
+ d="M -1,-1 1,1 M 1,-1 -1,1"
+ id="gpPt1"
+ inkscape:connector-curvature="0"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <path
+ d="M -1,0 1,0 M 0,-1 0,1 m -1,-2 2,2 m -2,0 2,-2"
+ id="gpPt2"
+ inkscape:connector-curvature="0"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <rect
+ height="2"
+ width="2"
+ y="-1"
+ x="-1"
+ id="gpPt3"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <rect
+ height="2"
+ width="2"
+ y="-1"
+ x="-1"
+ id="gpPt4"
+ style="fill:currentColor;stroke:currentColor;stroke-width:0.222" />
+ <circle
+ r="1"
+ cy="0"
+ cx="0"
+ id="gpPt5"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <use
+ id="gpPt6"
+ xlink:href="#gpPt5"
+ style="fill:currentColor;stroke:none"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ <path
+ d="m 0,-1.33 -1.33,2 2.66,0 z"
+ id="gpPt7"
+ inkscape:connector-curvature="0"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <use
+ id="gpPt8"
+ xlink:href="#gpPt7"
+ style="fill:currentColor;stroke:none"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ <use
+ transform="scale(-1,-1)"
+ id="gpPt9"
+ xlink:href="#gpPt7"
+ style="stroke:currentColor"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ <use
+ id="gpPt10"
+ xlink:href="#gpPt9"
+ style="fill:currentColor;stroke:none"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ <use
+ transform="matrix(0.70710678,0.70710678,-0.70710678,0.70710678,0,0)"
+ id="gpPt11"
+ xlink:href="#gpPt3"
+ style="stroke:currentColor"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ <use
+ id="gpPt12"
+ xlink:href="#gpPt11"
+ style="fill:currentColor;stroke:none"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ </defs>
+ <defs
+ id="defs6370">
+ <circle
+ r="0.5"
+ id="gpDot-2"
+ cx="0"
+ cy="0"
+ style="stroke-width:0.5" />
+ <path
+ d="M -1,0 1,0 M 0,-1 0,1"
+ id="gpPt0-7"
+ inkscape:connector-curvature="0"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <path
+ d="M -1,-1 1,1 M 1,-1 -1,1"
+ id="gpPt1-3"
+ inkscape:connector-curvature="0"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <path
+ d="M -1,0 1,0 M 0,-1 0,1 m -1,-2 2,2 m -2,0 2,-2"
+ id="gpPt2-25"
+ inkscape:connector-curvature="0"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <rect
+ height="2"
+ width="2"
+ y="-1"
+ x="-1"
+ id="gpPt3-2"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <rect
+ height="2"
+ width="2"
+ y="-1"
+ x="-1"
+ id="gpPt4-40"
+ style="fill:currentColor;stroke:currentColor;stroke-width:0.222" />
+ <circle
+ r="1"
+ cy="0"
+ cx="0"
+ id="gpPt5-5"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <use
+ id="gpPt6-0"
+ xlink:href="#gpPt5-5"
+ style="fill:currentColor;stroke:none"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ <path
+ d="m 0,-1.33 -1.33,2 2.66,0 z"
+ id="gpPt7-2"
+ inkscape:connector-curvature="0"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <use
+ id="gpPt8-8"
+ xlink:href="#gpPt7-2"
+ style="fill:currentColor;stroke:none"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ <use
+ transform="scale(-1,-1)"
+ id="gpPt9-2"
+ xlink:href="#gpPt7-2"
+ style="stroke:currentColor"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ <use
+ id="gpPt10-7"
+ xlink:href="#gpPt9-2"
+ style="fill:currentColor;stroke:none"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ <use
+ transform="matrix(0.70710678,0.70710678,-0.70710678,0.70710678,0,0)"
+ id="gpPt11-1"
+ xlink:href="#gpPt3-2"
+ style="stroke:currentColor"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ <use
+ id="gpPt12-2"
+ xlink:href="#gpPt11-1"
+ style="fill:currentColor;stroke:none"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ </defs>
+ <defs
+ id="defs5302">
+ <circle
+ r="0.5"
+ id="gpDot-16"
+ cx="0"
+ cy="0"
+ style="stroke-width:0.5" />
+ <path
+ d="M -1,0 1,0 M 0,-1 0,1"
+ id="gpPt0-9"
+ inkscape:connector-curvature="0"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <path
+ d="M -1,-1 1,1 M 1,-1 -1,1"
+ id="gpPt1-15"
+ inkscape:connector-curvature="0"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <path
+ d="M -1,0 1,0 M 0,-1 0,1 m -1,-2 2,2 m -2,0 2,-2"
+ id="gpPt2-2"
+ inkscape:connector-curvature="0"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <rect
+ height="2"
+ width="2"
+ y="-1"
+ x="-1"
+ id="gpPt3-8"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <rect
+ height="2"
+ width="2"
+ y="-1"
+ x="-1"
+ id="gpPt4-4"
+ style="fill:currentColor;stroke:currentColor;stroke-width:0.222" />
+ <circle
+ r="1"
+ cy="0"
+ cx="0"
+ id="gpPt5-0"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <use
+ id="gpPt6-93"
+ xlink:href="#gpPt5-0"
+ style="fill:currentColor;stroke:none"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ <path
+ d="m 0,-1.33 -1.33,2 2.66,0 z"
+ id="gpPt7-4"
+ inkscape:connector-curvature="0"
+ style="stroke:currentColor;stroke-width:0.222" />
+ <use
+ id="gpPt8-6"
+ xlink:href="#gpPt7-4"
+ style="fill:currentColor;stroke:none"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ <use
+ transform="scale(-1,-1)"
+ id="gpPt9-9"
+ xlink:href="#gpPt7-4"
+ style="stroke:currentColor"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ <use
+ id="gpPt10-0"
+ xlink:href="#gpPt9-9"
+ style="fill:currentColor;stroke:none"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ <use
+ transform="matrix(0.70710678,0.70710678,-0.70710678,0.70710678,0,0)"
+ id="gpPt11-5"
+ xlink:href="#gpPt3-8"
+ style="stroke:currentColor"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ <use
+ id="gpPt12-5"
+ xlink:href="#gpPt11-5"
+ style="fill:currentColor;stroke:none"
+ x="0"
+ y="0"
+ width="100%"
+ height="100%" />
+ </defs>
+ <style
+ type="text/css"
+ id="style7591"><![CDATA[
+ @font-face { font-family:"Futura Md BT";src:url("#FontID0") format(svg)}
+ .str0 {stroke:#2B2A29;stroke-width:20}
+ .str3 {stroke:#212220;stroke-width:20}
+ .str4 {stroke:#E32029;stroke-width:35.28}
+ .str1 {stroke:#FEFEFE;stroke-width:52.92}
+ .str2 {stroke:#5B5A50;stroke-width:35.28;stroke-dasharray:35.280000 35.280000}
+ .fil0 {fill:none}
+ .fil2 {fill:none;fill-rule:nonzero}
+ .fil1 {fill:#2B2A29}
+ .fil3 {fill:#FEFEFE}
+ .fil11 {fill:#B9A8A0}
+ .fil96 {fill:#284A98;fill-rule:nonzero}
+ .fil100 {fill:url(#id0)}
+ .fil97 {fill:url(#id1)}
+ .fil124 {fill:url(#id2)}
+ .fil95 {fill:url(#id3)}
+ .fil126 {fill:url(#id4)}
+ .fil125 {fill:url(#id5)}
+ .fil128 {fill:url(#id6)}
+ .fil127 {fill:url(#id7)}
+ .fil69 {fill:url(#id8)}
+ .fil73 {fill:url(#id9)}
+ .fil71 {fill:url(#id10)}
+ .fil68 {fill:url(#id11)}
+ .fil70 {fill:url(#id12)}
+ .fil74 {fill:url(#id13)}
+ .fil72 {fill:url(#id14)}
+ .fil41 {fill:url(#id15)}
+ .fil13 {fill:url(#id16)}
+ .fil45 {fill:url(#id17)}
+ .fil17 {fill:url(#id18)}
+ .fil43 {fill:url(#id19)}
+ .fil40 {fill:url(#id20)}
+ .fil15 {fill:url(#id21)}
+ .fil12 {fill:url(#id22)}
+ .fil42 {fill:url(#id23)}
+ .fil46 {fill:url(#id24)}
+ .fil14 {fill:url(#id25)}
+ .fil18 {fill:url(#id26)}
+ .fil44 {fill:url(#id27)}
+ .fil16 {fill:url(#id28)}
+ .fil77 {fill:url(#id29)}
+ .fil76 {fill:url(#id30)}
+ .fil75 {fill:url(#id31)}
+ .fil79 {fill:url(#id32)}
+ .fil78 {fill:url(#id33)}
+ .fil49 {fill:url(#id34)}
+ .fil21 {fill:url(#id35)}
+ .fil48 {fill:url(#id36)}
+ .fil47 {fill:url(#id37)}
+ .fil20 {fill:url(#id38)}
+ .fil19 {fill:url(#id39)}
+ .fil51 {fill:url(#id40)}
+ .fil50 {fill:url(#id41)}
+ .fil23 {fill:url(#id42)}
+ .fil22 {fill:url(#id43)}
+ .fil115 {fill:url(#id44)}
+ .fil113 {fill:url(#id45)}
+ .fil102 {fill:url(#id46)}
+ .fil105 {fill:url(#id47)}
+ .fil106 {fill:url(#id48)}
+ .fil114 {fill:url(#id49)}
+ .fil117 {fill:url(#id50)}
+ .fil112 {fill:url(#id51)}
+ .fil104 {fill:url(#id52)}
+ .fil110 {fill:url(#id53)}
+ .fil108 {fill:url(#id54)}
+ .fil116 {fill:url(#id55)}
+ .fil111 {fill:url(#id56)}
+ .fil101 {fill:url(#id57)}
+ .fil103 {fill:url(#id58)}
+ .fil118 {fill:url(#id59)}
+ .fil107 {fill:url(#id60)}
+ .fil109 {fill:url(#id61)}
+ .fil90 {fill:url(#id62)}
+ .fil67 {fill:url(#id63)}
+ .fil39 {fill:url(#id64)}
+ .fil65 {fill:url(#id65)}
+ .fil64 {fill:url(#id66)}
+ .fil37 {fill:url(#id67)}
+ .fil36 {fill:url(#id68)}
+ .fil66 {fill:url(#id69)}
+ .fil38 {fill:url(#id70)}
+ .fil91 {fill:url(#id71)}
+ .fil83 {fill:url(#id72)}
+ .fil85 {fill:url(#id73)}
+ .fil81 {fill:url(#id74)}
+ .fil80 {fill:url(#id75)}
+ .fil82 {fill:url(#id76)}
+ .fil84 {fill:url(#id77)}
+ .fil4 {fill:url(#id78)}
+ .fil56 {fill:url(#id79)}
+ .fil28 {fill:url(#id80)}
+ .fil58 {fill:url(#id81)}
+ .fil54 {fill:url(#id82)}
+ .fil30 {fill:url(#id83)}
+ .fil26 {fill:url(#id84)}
+ .fil52 {fill:url(#id85)}
+ .fil55 {fill:url(#id86)}
+ .fil24 {fill:url(#id87)}
+ .fil27 {fill:url(#id88)}
+ .fil57 {fill:url(#id89)}
+ .fil29 {fill:url(#id90)}
+ .fil53 {fill:url(#id91)}
+ .fil25 {fill:url(#id92)}
+ .fil88 {fill:url(#id93)}
+ .fil89 {fill:url(#id94)}
+ .fil86 {fill:url(#id95)}
+ .fil87 {fill:url(#id96)}
+ .fil62 {fill:url(#id97)}
+ .fil63 {fill:url(#id98)}
+ .fil34 {fill:url(#id99)}
+ .fil35 {fill:url(#id100)}
+ .fil59 {fill:url(#id101)}
+ .fil60 {fill:url(#id102)}
+ .fil31 {fill:url(#id103)}
+ .fil32 {fill:url(#id104)}
+ .fil61 {fill:url(#id105)}
+ .fil33 {fill:url(#id106)}
+ .fil6 {fill:url(#id107)}
+ .fil5 {fill:url(#id108)}
+ .fil10 {fill:url(#id109)}
+ .fil9 {fill:url(#id110)}
+ .fil94 {fill:url(#id111)}
+ .fil8 {fill:url(#id112)}
+ .fil7 {fill:url(#id113)}
+ .fil99 {fill:url(#id114)}
+ .fil98 {fill:url(#id115)}
+ .fil122 {fill:url(#id116)}
+ .fil121 {fill:url(#id117)}
+ .fil123 {fill:url(#id118)}
+ .fil119 {fill:url(#id119)}
+ .fil120 {fill:url(#id120)}
+ .fil92 {fill:url(#id121)}
+ .fil93 {fill:url(#id122)}
+ .fnt3 {font-weight:normal;font-size:1136.24px;font-family:'Futura Md BT'}
+ .fnt2 {font-weight:normal;font-size:1256.81px;font-family:'Futura Md BT'}
+ .fnt4 {font-weight:normal;font-size:1508.2px;font-family:'Futura Md BT'}
+ .fnt1 {font-weight:bold;font-size:1508.2px;font-family:'Futura Md BT'}
+ .fnt0 {font-weight:bold;font-size:2010.9px;font-family:'Futura Md BT'}
+ ]]></style>
+ <style
+ type="text/css"
+ id="style9234"><![CDATA[
+ @font-face { font-family:"Futura Md BT";src:url("#FontID0") format(svg)}
+ .str0 {stroke:#C5C6C6;stroke-width:10.58}
+ .str3 {stroke:#C5C6C6;stroke-width:17.64;stroke-linecap:round;stroke-linejoin:round}
+ .str4 {stroke:#E32029;stroke-width:35.28}
+ .str1 {stroke:#FEFEFE;stroke-width:52.92}
+ .str5 {stroke:#FEFEFE;stroke-width:52.92;stroke-linecap:round;stroke-linejoin:round}
+ .str6 {stroke:#054D00;stroke-width:52.92;stroke-linecap:round;stroke-linejoin:round}
+ .str2 {stroke:#5B5A50;stroke-width:35.28;stroke-dasharray:35.280000 35.280000}
+ .fil41 {fill:none}
+ .fil44 {fill:none;fill-rule:nonzero}
+ .fil2 {fill:#2B2A29}
+ .fil1 {fill:#FEFEFE}
+ .fil0 {fill:#054D00}
+ .fil10 {fill:#054D00;fill-rule:nonzero}
+ .fil45 {fill:url(#id0)}
+ .fil6 {fill:url(#id1)}
+ .fil55 {fill:url(#id2)}
+ .fil13 {fill:url(#id3)}
+ .fil38 {fill:url(#id4)}
+ .fil46 {fill:url(#id5)}
+ .fil7 {fill:url(#id6)}
+ .fil56 {fill:url(#id7)}
+ .fil11 {fill:url(#id8)}
+ .fil43 {fill:url(#id9)}
+ .fil39 {fill:url(#id10)}
+ .fil40 {fill:url(#id11)}
+ .fil42 {fill:url(#id12)}
+ .fil49 {fill:url(#id13)}
+ .fil51 {fill:url(#id14)}
+ .fil52 {fill:url(#id15)}
+ .fil29 {fill:url(#id16)}
+ .fil16 {fill:url(#id17)}
+ .fil23 {fill:url(#id18)}
+ .fil28 {fill:url(#id19)}
+ .fil24 {fill:url(#id20)}
+ .fil18 {fill:url(#id21)}
+ .fil31 {fill:url(#id22)}
+ .fil30 {fill:url(#id23)}
+ .fil22 {fill:url(#id24)}
+ .fil21 {fill:url(#id25)}
+ .fil19 {fill:url(#id26)}
+ .fil25 {fill:url(#id27)}
+ .fil26 {fill:url(#id28)}
+ .fil32 {fill:url(#id29)}
+ .fil20 {fill:url(#id30)}
+ .fil15 {fill:url(#id31)}
+ .fil17 {fill:url(#id32)}
+ .fil27 {fill:url(#id33)}
+ .fil3 {fill:url(#id34)}
+ .fil5 {fill:url(#id35)}
+ .fil4 {fill:url(#id36)}
+ .fil14 {fill:url(#id37)}
+ .fil12 {fill:url(#id38)}
+ .fil47 {fill:url(#id39)}
+ .fil8 {fill:url(#id40)}
+ .fil53 {fill:url(#id41)}
+ .fil57 {fill:url(#id42)}
+ .fil36 {fill:url(#id43)}
+ .fil35 {fill:url(#id44)}
+ .fil37 {fill:url(#id45)}
+ .fil33 {fill:url(#id46)}
+ .fil34 {fill:url(#id47)}
+ .fil48 {fill:url(#id48)}
+ .fil9 {fill:url(#id49)}
+ .fil54 {fill:url(#id50)}
+ .fil58 {fill:url(#id51)}
+ .fil50 {fill:url(#id52)}
+ .fnt1 {font-weight:normal;font-size:1382.5px;font-family:'Futura Md BT'}
+ .fnt2 {font-weight:bold;font-size:1382.5px;font-family:'Futura Md BT'}
+ .fnt0 {font-weight:bold;font-size:1759.55px;font-family:'Futura Md BT'}
+ ]]></style>
+ <style
+ type="text/css"
+ id="style10533"><![CDATA[
+ @font-face { font-family:"Arial";src:url("#FontID1") format(svg)}
+ @font-face { font-family:"Futura Md BT";src:url("#FontID0") format(svg)}
+ .str2 {stroke-width:5.05}
+ .str1 {stroke:#2B2A29;stroke-width:7.62}
+ .str4 {stroke:#898989;stroke-width:7.62}
+ .str9 {stroke:#C5C6C6;stroke-width:10.58}
+ .str0 {stroke:#212220;stroke-width:20}
+ .str3 {stroke:#62605E;stroke-width:20}
+ .str8 {stroke:#E09079;stroke-width:35.28}
+ .str7 {stroke:#E32029;stroke-width:35.28}
+ .str12 {stroke:#2B2A29;stroke-width:52.92}
+ .str10 {stroke:#FEFEFE;stroke-width:52.92;stroke-linecap:round;stroke-linejoin:round}
+ .str11 {stroke:#054D00;stroke-width:52.92;stroke-linecap:round;stroke-linejoin:round}
+ .str5 {stroke:#5B5A50;stroke-width:35.28;stroke-dasharray:35.280000 35.280000}
+ .str6 {stroke:#9D9C94;stroke-width:35.28;stroke-dasharray:35.280000 35.280000}
+ .fil9 {fill:none}
+ .fil8 {fill:none;fill-rule:nonzero}
+ .fil0 {fill:#2B2A29}
+ .fil2 {fill:#FEFEFE}
+ .fil130 {fill:#054D00}
+ .fil4 {fill:#898989}
+ .fil40 {fill:#B9A8A0}
+ .fil69 {fill:#C9C0BB}
+ .fil3 {fill:#EBECEC}
+ .fil1 {fill:#054D00;fill-rule:nonzero}
+ .fil6 {fill:#6F936D;fill-rule:nonzero}
+ .fil5 {fill:#898989;fill-rule:nonzero}
+ .fil7 {fill:#EBECEC;fill-rule:nonzero}
+ .fil35 {fill:url(#id60)}
+ .fil98 {fill:url(#id61)}
+ .fil39 {fill:url(#id62)}
+ .fil102 {fill:url(#id63)}
+ .fil15 {fill:url(#id64)}
+ .fil22 {fill:url(#id65)}
+ .fil42 {fill:url(#id66)}
+ .fil46 {fill:url(#id67)}
+ .fil44 {fill:url(#id68)}
+ .fil41 {fill:url(#id69)}
+ .fil43 {fill:url(#id70)}
+ .fil47 {fill:url(#id71)}
+ .fil45 {fill:url(#id72)}
+ .fil50 {fill:url(#id73)}
+ .fil49 {fill:url(#id74)}
+ .fil48 {fill:url(#id75)}
+ .fil52 {fill:url(#id76)}
+ .fil51 {fill:url(#id77)}
+ .fil71 {fill:url(#id78)}
+ .fil75 {fill:url(#id79)}
+ .fil73 {fill:url(#id80)}
+ .fil70 {fill:url(#id81)}
+ .fil72 {fill:url(#id82)}
+ .fil76 {fill:url(#id83)}
+ .fil74 {fill:url(#id84)}
+ .fil79 {fill:url(#id85)}
+ .fil78 {fill:url(#id86)}
+ .fil77 {fill:url(#id87)}
+ .fil81 {fill:url(#id88)}
+ .fil80 {fill:url(#id89)}
+ .fil107 {fill:url(#id90)}
+ .fil117 {fill:url(#id91)}
+ .fil120 {fill:url(#id92)}
+ .fil115 {fill:url(#id93)}
+ .fil119 {fill:url(#id94)}
+ .fil118 {fill:url(#id95)}
+ .fil122 {fill:url(#id96)}
+ .fil123 {fill:url(#id97)}
+ .fil113 {fill:url(#id98)}
+ .fil109 {fill:url(#id99)}
+ .fil112 {fill:url(#id100)}
+ .fil110 {fill:url(#id101)}
+ .fil114 {fill:url(#id102)}
+ .fil116 {fill:url(#id103)}
+ .fil121 {fill:url(#id104)}
+ .fil106 {fill:url(#id105)}
+ .fil108 {fill:url(#id106)}
+ .fil111 {fill:url(#id107)}
+ .fil66 {fill:url(#id108)}
+ .fil67 {fill:url(#id109)}
+ .fil95 {fill:url(#id110)}
+ .fil96 {fill:url(#id111)}
+ .fil68 {fill:url(#id112)}
+ .fil97 {fill:url(#id113)}
+ .fil65 {fill:url(#id114)}
+ .fil94 {fill:url(#id115)}
+ .fil57 {fill:url(#id116)}
+ .fil59 {fill:url(#id117)}
+ .fil55 {fill:url(#id118)}
+ .fil53 {fill:url(#id119)}
+ .fil56 {fill:url(#id120)}
+ .fil58 {fill:url(#id121)}
+ .fil54 {fill:url(#id122)}
+ .fil10 {fill:url(#id123)}
+ .fil63 {fill:url(#id124)}
+ .fil64 {fill:url(#id125)}
+ .fil60 {fill:url(#id126)}
+ .fil61 {fill:url(#id127)}
+ .fil62 {fill:url(#id128)}
+ .fil12 {fill:url(#id129)}
+ .fil11 {fill:url(#id130)}
+ .fil86 {fill:url(#id131)}
+ .fil88 {fill:url(#id132)}
+ .fil84 {fill:url(#id133)}
+ .fil82 {fill:url(#id134)}
+ .fil85 {fill:url(#id135)}
+ .fil87 {fill:url(#id136)}
+ .fil83 {fill:url(#id137)}
+ .fil17 {fill:url(#id138)}
+ .fil92 {fill:url(#id139)}
+ .fil93 {fill:url(#id140)}
+ .fil89 {fill:url(#id141)}
+ .fil90 {fill:url(#id142)}
+ .fil91 {fill:url(#id143)}
+ .fil19 {fill:url(#id144)}
+ .fil18 {fill:url(#id145)}
+ .fil101 {fill:url(#id146)}
+ .fil100 {fill:url(#id147)}
+ .fil105 {fill:url(#id148)}
+ .fil104 {fill:url(#id149)}
+ .fil25 {fill:url(#id150)}
+ .fil24 {fill:url(#id151)}
+ .fil29 {fill:url(#id152)}
+ .fil28 {fill:url(#id153)}
+ .fil127 {fill:url(#id154)}
+ .fil126 {fill:url(#id155)}
+ .fil128 {fill:url(#id156)}
+ .fil125 {fill:url(#id157)}
+ .fil99 {fill:url(#id158)}
+ .fil103 {fill:url(#id159)}
+ .fil34 {fill:url(#id160)}
+ .fil32 {fill:url(#id161)}
+ .fil38 {fill:url(#id162)}
+ .fil36 {fill:url(#id163)}
+ .fil27 {fill:url(#id164)}
+ .fil26 {fill:url(#id165)}
+ .fil31 {fill:url(#id166)}
+ .fil30 {fill:url(#id167)}
+ .fil124 {fill:url(#id168)}
+ .fil129 {fill:url(#id169)}
+ .fil33 {fill:url(#id170)}
+ .fil37 {fill:url(#id171)}
+ .fil16 {fill:url(#id172)}
+ .fil23 {fill:url(#id173)}
+ .fil14 {fill:url(#id174)}
+ .fil13 {fill:url(#id175)}
+ .fil21 {fill:url(#id176)}
+ .fil20 {fill:url(#id177)}
+ .fnt7 {font-weight:bold;font-size:423.33px;font-family:'Arial'}
+ .fnt0 {font-weight:bold;font-size:493.89px;font-family:'Futura Md BT'}
+ .fnt1 {font-weight:normal;font-size:1382.5px;font-family:'Futura Md BT'}
+ .fnt5 {font-weight:bold;font-size:1382.5px;font-family:'Futura Md BT'}
+ .fnt2 {font-weight:bold;font-size:1508.17px;font-family:'Futura Md BT'}
+ .fnt6 {font-weight:bold;font-size:1508.2px;font-family:'Arial'}
+ .fnt3 {font-weight:bold;font-size:1508.2px;font-family:'Futura Md BT'}
+ .fnt4 {font-weight:bold;font-size:1759.55px;font-family:'Futura Md BT'}
+ ]]></style>
+ <style
+ type="text/css"
+ id="style25752"><![CDATA[
+ @font-face { font-family:"Futura Md BT";src:url("#FontID0") format(svg)}
+ .str0 {stroke:#FEFEFE;stroke-width:7.62}
+ .str1 {stroke:#FEFEFE;stroke-width:7.62}
+ .fil2 {fill:none}
+ .fil4 {fill:#2B2A29}
+ .fil0 {fill:#FEFEFE}
+ .fil1 {fill:#FEFEFE}
+ .fil3 {fill:#C6D663;fill-rule:nonzero}
+ .fil37 {fill:url(#id51)}
+ .fil38 {fill:url(#id52)}
+ .fil40 {fill:url(#id53)}
+ .fil15 {fill:url(#id54)}
+ .fil74 {fill:url(#id55)}
+ .fil20 {fill:url(#id56)}
+ .fil26 {fill:url(#id57)}
+ .fil25 {fill:url(#id58)}
+ .fil44 {fill:url(#id59)}
+ .fil48 {fill:url(#id60)}
+ .fil34 {fill:url(#id61)}
+ .fil51 {fill:url(#id62)}
+ .fil61 {fill:url(#id63)}
+ .fil56 {fill:url(#id64)}
+ .fil50 {fill:url(#id65)}
+ .fil60 {fill:url(#id66)}
+ .fil53 {fill:url(#id67)}
+ .fil52 {fill:url(#id68)}
+ .fil55 {fill:url(#id69)}
+ .fil58 {fill:url(#id70)}
+ .fil57 {fill:url(#id71)}
+ .fil54 {fill:url(#id72)}
+ .fil62 {fill:url(#id73)}
+ .fil13 {fill:url(#id74)}
+ .fil72 {fill:url(#id75)}
+ .fil9 {fill:url(#id76)}
+ .fil68 {fill:url(#id77)}
+ .fil6 {fill:url(#id78)}
+ .fil65 {fill:url(#id79)}
+ .fil10 {fill:url(#id80)}
+ .fil7 {fill:url(#id81)}
+ .fil69 {fill:url(#id82)}
+ .fil66 {fill:url(#id83)}
+ .fil16 {fill:url(#id84)}
+ .fil75 {fill:url(#id85)}
+ .fil17 {fill:url(#id86)}
+ .fil76 {fill:url(#id87)}
+ .fil11 {fill:url(#id88)}
+ .fil70 {fill:url(#id89)}
+ .fil12 {fill:url(#id90)}
+ .fil8 {fill:url(#id91)}
+ .fil71 {fill:url(#id92)}
+ .fil67 {fill:url(#id93)}
+ .fil14 {fill:url(#id94)}
+ .fil73 {fill:url(#id95)}
+ .fil29 {fill:url(#id96)}
+ .fil33 {fill:url(#id97)}
+ .fil19 {fill:url(#id98)}
+ .fil43 {fill:url(#id99)}
+ .fil45 {fill:url(#id100)}
+ .fil39 {fill:url(#id101)}
+ .fil36 {fill:url(#id102)}
+ .fil46 {fill:url(#id103)}
+ .fil47 {fill:url(#id104)}
+ .fil41 {fill:url(#id105)}
+ .fil35 {fill:url(#id106)}
+ .fil42 {fill:url(#id107)}
+ .fil59 {fill:url(#id108)}
+ .fil49 {fill:url(#id109)}
+ .fil63 {fill:url(#id110)}
+ .fil5 {fill:url(#id111)}
+ .fil18 {fill:url(#id112)}
+ .fil64 {fill:url(#id113)}
+ .fil77 {fill:url(#id114)}
+ .fil28 {fill:url(#id115)}
+ .fil31 {fill:url(#id116)}
+ .fil32 {fill:url(#id117)}
+ .fil21 {fill:url(#id118)}
+ .fil22 {fill:url(#id119)}
+ .fil24 {fill:url(#id120)}
+ .fil23 {fill:url(#id121)}
+ .fil27 {fill:url(#id122)}
+ .fil30 {fill:url(#id123)}
+ .fnt0 {font-weight:bold;font-size:1243.98px;font-family:'Futura Md BT'}
+ ]]></style>
+ <style
+ type="text/css"
+ id="style98"><![CDATA[
+ @font-face { font-family:"Symbol";src:url("#FontID1") format(svg)}
+ @font-face { font-family:"Arial";src:url("#FontID0") format(svg)}
+ .str1 {stroke:#FEFEFE;stroke-width:7.62}
+ .str2 {stroke:#FEFEFE;stroke-width:35.28}
+ .str0 {stroke:#FEFEFE;stroke-width:52.92}
+ .str5 {stroke:#212220;stroke-width:52.92}
+ .str6 {stroke:#2B2A29;stroke-width:70.56}
+ .str3 {stroke:#FEFEFE;stroke-width:70.56}
+ .str4 {stroke:#212220;stroke-width:70.56}
+ .fil2 {fill:none}
+ .fil3 {fill:#2B2A29}
+ .fil0 {fill:#FEFEFE}
+ .fil5 {fill:#1C1B17;fill-rule:nonzero}
+ .fil1 {fill:#FEFEFE;fill-rule:nonzero}
+ .fil4 {fill:#212220;fill-rule:nonzero}
+ .fnt1 {font-weight:bold;font-size:423.33px;font-family:'Arial'}
+ .fnt4 {font-weight:bold;font-size:423.33px;font-family:'Arial'}
+ .fnt5 {font-weight:bold;font-size:493.88px;font-family:'Arial'}
+ .fnt2 {font-weight:normal;font-size:1508.2px;font-family:'Symbol'}
+ .fnt0 {font-weight:bold;font-size:1508.2px;font-family:'Arial'}
+ .fnt3 {font-weight:bold;font-size:1508.2px;font-family:'Arial'}
+ ]]></style>
+ <style
+ type="text/css"
+ id="style7232"><![CDATA[
+ @font-face { font-family:"Arial";src:url("#FontID0") format(svg)}
+ .str0 {stroke:#FEFEFE;stroke-width:70.56}
+ .fil0 {fill:none}
+ .fil2 {fill:#FEFEFE}
+ .fil1 {fill:#FEFEFE;fill-rule:nonzero}
+ .fnt0 {font-weight:bold;font-size:2533.72px;font-family:'Arial'}
+ ]]></style>
+ <style
+ type="text/css"
+ id="style7094"><![CDATA[
+ @font-face { font-family:"Futura Md BT";src:url("#FontID1") format(svg)}
+ @font-face { font-family:"Symbol";src:url("#FontID0") format(svg)}
+ .str2 {stroke:#2B2A29;stroke-width:7.62}
+ .str3 {stroke:#9D9E9E;stroke-width:7.62}
+ .str5 {stroke:#FEFEFE;stroke-width:42.33}
+ .str7 {stroke:#FEFEFE;stroke-width:42.33}
+ .str9 {stroke:#FEFEFE;stroke-width:52.92}
+ .str4 {stroke:#2B2A29;stroke-width:70.56}
+ .str10 {stroke:#727271;stroke-width:70.56}
+ .str8 {stroke:#FEFEFE;stroke-width:70.56}
+ .str6 {stroke:#9D9E9E;stroke-width:70.56}
+ .str0 {stroke:#FEFEFE;stroke-width:42.33;stroke-dasharray:84.660000 42.330000}
+ .str1 {stroke:#FEFEFE;stroke-width:42.33;stroke-dasharray:84.660000 42.330000}
+ .fil0 {fill:none}
+ .fil2 {fill:#2B2A29}
+ .fil7 {fill:#FEFEFE}
+ .fil5 {fill:#9D9E9E}
+ .fil1 {fill:#FEFEFE}
+ .fil3 {fill:#2B2A29;fill-rule:nonzero}
+ .fil6 {fill:#FEFEFE;fill-rule:nonzero}
+ .fil4 {fill:#9D9E9E;fill-rule:nonzero}
+ .fil8 {fill:#FEFEFE;fill-rule:nonzero}
+ .fil94 {fill:url(#id25)}
+ .fil97 {fill:url(#id26)}
+ .fil59 {fill:url(#id27)}
+ .fil26 {fill:url(#id28)}
+ .fil41 {fill:url(#id29)}
+ .fil112 {fill:url(#id30)}
+ .fil61 {fill:url(#id31)}
+ .fil48 {fill:url(#id32)}
+ .fil17 {fill:url(#id33)}
+ .fil105 {fill:url(#id34)}
+ .fil46 {fill:url(#id35)}
+ .fil89 {fill:url(#id36)}
+ .fil91 {fill:url(#id37)}
+ .fil76 {fill:url(#id38)}
+ .fil43 {fill:url(#id39)}
+ .fil62 {fill:url(#id40)}
+ .fil79 {fill:url(#id41)}
+ .fil55 {fill:url(#id42)}
+ .fil64 {fill:url(#id43)}
+ .fil92 {fill:url(#id44)}
+ .fil37 {fill:url(#id45)}
+ .fil90 {fill:url(#id46)}
+ .fil28 {fill:url(#id47)}
+ .fil108 {fill:url(#id48)}
+ .fil100 {fill:url(#id49)}
+ .fil80 {fill:url(#id50)}
+ .fil98 {fill:url(#id51)}
+ .fil111 {fill:url(#id52)}
+ .fil70 {fill:url(#id53)}
+ .fil35 {fill:url(#id54)}
+ .fil103 {fill:url(#id55)}
+ .fil104 {fill:url(#id56)}
+ .fil49 {fill:url(#id57)}
+ .fil65 {fill:url(#id58)}
+ .fil33 {fill:url(#id59)}
+ .fil84 {fill:url(#id60)}
+ .fil102 {fill:url(#id61)}
+ .fil88 {fill:url(#id62)}
+ .fil68 {fill:url(#id63)}
+ .fil51 {fill:url(#id64)}
+ .fil85 {fill:url(#id65)}
+ .fil86 {fill:url(#id66)}
+ .fil47 {fill:url(#id67)}
+ .fil50 {fill:url(#id68)}
+ .fil56 {fill:url(#id69)}
+ .fil54 {fill:url(#id70)}
+ .fil18 {fill:url(#id71)}
+ .fil72 {fill:url(#id72)}
+ .fil38 {fill:url(#id73)}
+ .fil53 {fill:url(#id74)}
+ .fil52 {fill:url(#id75)}
+ .fil15 {fill:url(#id76)}
+ .fil34 {fill:url(#id77)}
+ .fil107 {fill:url(#id78)}
+ .fil83 {fill:url(#id79)}
+ .fil106 {fill:url(#id80)}
+ .fil45 {fill:url(#id81)}
+ .fil99 {fill:url(#id82)}
+ .fil73 {fill:url(#id83)}
+ .fil67 {fill:url(#id84)}
+ .fil81 {fill:url(#id85)}
+ .fil78 {fill:url(#id86)}
+ .fil39 {fill:url(#id87)}
+ .fil93 {fill:url(#id88)}
+ .fil66 {fill:url(#id89)}
+ .fil29 {fill:url(#id90)}
+ .fil44 {fill:url(#id91)}
+ .fil31 {fill:url(#id92)}
+ .fil32 {fill:url(#id93)}
+ .fil42 {fill:url(#id94)}
+ .fil96 {fill:url(#id95)}
+ .fil60 {fill:url(#id96)}
+ .fil21 {fill:url(#id97)}
+ .fil115 {fill:url(#id98)}
+ .fil69 {fill:url(#id99)}
+ .fil109 {fill:url(#id100)}
+ .fil116 {fill:url(#id101)}
+ .fil19 {fill:url(#id102)}
+ .fil110 {fill:url(#id103)}
+ .fil87 {fill:url(#id104)}
+ .fil12 {fill:url(#id105)}
+ .fil9 {fill:url(#id106)}
+ .fil16 {fill:url(#id107)}
+ .fil71 {fill:url(#id108)}
+ .fil30 {fill:url(#id109)}
+ .fil101 {fill:url(#id110)}
+ .fil95 {fill:url(#id111)}
+ .fil10 {fill:url(#id112)}
+ .fil13 {fill:url(#id113)}
+ .fil11 {fill:url(#id114)}
+ .fil63 {fill:url(#id115)}
+ .fil27 {fill:url(#id116)}
+ .fil23 {fill:url(#id117)}
+ .fil113 {fill:url(#id118)}
+ .fil14 {fill:url(#id119)}
+ .fil74 {fill:url(#id120)}
+ .fil36 {fill:url(#id121)}
+ .fil82 {fill:url(#id122)}
+ .fil40 {fill:url(#id123)}
+ .fil24 {fill:url(#id124)}
+ .fil75 {fill:url(#id125)}
+ .fil20 {fill:url(#id126)}
+ .fil25 {fill:url(#id127)}
+ .fil57 {fill:url(#id128)}
+ .fil22 {fill:url(#id129)}
+ .fil77 {fill:url(#id130)}
+ .fil114 {fill:url(#id131)}
+ .fil58 {fill:url(#id132)}
+ .fnt6 {font-weight:bold;font-size:423.33px;font-family:'Futura Md BT'}
+ .fnt0 {font-weight:normal;font-size:1131.15px;font-family:'Symbol'}
+ .fnt1 {font-weight:bold;font-size:1131.15px;font-family:'Futura Md BT'}
+ .fnt8 {font-weight:bold;font-size:1256.81px;font-family:'Futura Md BT'}
+ .fnt5 {font-weight:normal;font-size:1508.2px;font-family:'Futura Md BT'}
+ .fnt7 {font-weight:bold;font-size:1508.2px;font-family:'Futura Md BT'}
+ .fnt4 {font-weight:normal;font-size:1900.27px;font-family:'Futura Md BT'}
+ .fnt9 {font-weight:normal;font-size:2111.45px;font-family:'Futura Md BT'}
+ .fnt3 {font-weight:normal;font-size:2533.72px;font-family:'Futura Md BT'}
+ .fnt2 {font-weight:bold;font-size:2533.72px;font-family:'Futura Md BT'}
+ ]]></style>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="3.3107319"
+ inkscape:cx="5.3382595"
+ inkscape:cy="56.703481"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-global="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8098">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-244.77811,-595.10722)">
+ <path
+ style="fill:url(#linearGradient8425);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 246.27811,595.60722 h 21 v 2 l -6.5,10.5 -6,-10.5 h -8.5 z"
+ id="path4763"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ style="opacity:0.75;fill:#ffffff;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter8458)"
+ d="m 260.56574,601.46532 c -0.0435,-1.8491 2.94024,0.22303 6.9605,0.15554 -2.37934,0.87001 -4.78447,3.12651 -6.54699,4.79868 -0.69731,-2.00112 -0.66057,-4.5027 -0.41351,-4.95422 z"
+ id="path8400"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc"
+ transform="rotate(96.15813,261.98063,600.60609)" />
+ <path
+ style="fill:none;fill-opacity:0.49803922;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.8892617"
+ d="m 254.77811,597.60722 h 12"
+ id="path8429"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ sodipodi:nodetypes="ccccccc"
+ inkscape:connector-curvature="0"
+ id="path8431"
+ d="m 246.27811,595.60722 h 21 v 2 l -6.5,10.5 -6,-10.5 h -8.5 z"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g5318"
+ transform="matrix(1.0666667,0,0,1.0666667,641.03977,883.51086)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g6386"
+ transform="matrix(1.0666667,0,0,1.0666667,1224.7427,320.09945)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g7162"
+ transform="matrix(1.0666667,0,0,1.0666667,483.79064,152.88667)" />
+ <path
+ style="color:#ff0000;fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none"
+ inkscape:connector-curvature="0"
+ d="m 245.77811,618.10722 h 6 v -5 h 10 l 0.0364,5 h 5.8892 0.0728 3.3e-4"
+ id="path7427"
+ sodipodi:nodetypes="cccccccc" />
+ <path
+ style="color:#ff0000;fill:none;stroke:#e15244;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 245.77811,615.10722 h 3.26 c 0.41401,-5.17784 3.74,-4.9925 8.15173,-4.9925 l 6.10827,-0.008 c 0.66269,3.44378 0.48,5.0009 4.47873,5.0009"
+ id="path7438"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <text
+ id="text7408-2"
+ class="fil7 fnt4"
+ y="183.92776"
+ x="-484.44421"
+ style="font-weight:normal;font-size:10.66666698px;font-family:'Futura Md BT';text-align:center;text-anchor:middle;clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;stroke-width:1.06666672;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ id="text7422"
+ class="fil7 fnt4"
+ y="213.22548"
+ x="-466.97989"
+ style="font-weight:normal;font-size:10.66666698px;font-family:'Futura Md BT';text-align:center;text-anchor:middle;clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;stroke-width:1.06666672;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_transform-24.xcf b/pixmaps/src/gwy_transform-24.xcf
new file mode 100644
index 0000000..8c47453
Binary files /dev/null and b/pixmaps/src/gwy_transform-24.xcf differ
diff --git a/pixmaps/src/gwy_unrotate-24.svg b/pixmaps/src/gwy_unrotate-24.svg
new file mode 100644
index 0000000..edd50d8
--- /dev/null
+++ b/pixmaps/src/gwy_unrotate-24.svg
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ id="svg2160"
+ sodipodi:version="0.32"
+ inkscape:version="0.92.1 unknown"
+ sodipodi:docname="gwy_unrotate-24.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ version="1.1"
+ inkscape:export-filename="gwy_rotate-24.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs2162" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="7.931242"
+ inkscape:cx="-15.27214"
+ inkscape:cy="20.037853"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ showguides="true"
+ inkscape:guide-bbox="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-global="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata2165">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ transform="translate(0,-8)">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#6a9b3b;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 0,12.5 H 24"
+ id="path8436"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8438"
+ d="M 0,17.5 H 24"
+ style="fill:none;fill-rule:evenodd;stroke:#6a9b3b;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8440"
+ d="M 0,22.5 H 24"
+ style="fill:none;fill-rule:evenodd;stroke:#6a9b3b;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#6a9b3b;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 0,27.5 H 24"
+ id="path8442"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8444"
+ d="M 19.5,8 V 32"
+ style="fill:none;fill-rule:evenodd;stroke:#6a9b3b;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#6a9b3b;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 14.5,8 V 32"
+ id="path8446"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#6a9b3b;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 9.5,8 V 32"
+ id="path8448"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8450"
+ d="M 4.5,8 V 32"
+ style="fill:none;fill-rule:evenodd;stroke:#6a9b3b;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 19.895473,30.856274 1.1437255,27.895472 4.1045276,9.1437255 22.856275,12.104527 Z"
+ id="path8454"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_value_invert-24.svg b/pixmaps/src/gwy_value_invert-24.svg
new file mode 100644
index 0000000..89ca9a8
--- /dev/null
+++ b/pixmaps/src/gwy_value_invert-24.svg
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 22.5 22.5"
+ id="svg8093"
+ version="1.1"
+ inkscape:version="0.92.1 unknown"
+ sodipodi:docname="gwy_value_invert-24.svg"
+ inkscape:export-filename="gwy_scale-24.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs8095" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1.5734899"
+ inkscape:cx="-222.88015"
+ inkscape:cy="-50.426667"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ units="px"
+ showguides="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="0.9375"
+ spacingy="0.9375"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8098">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-244.77814,-596.57599)">
+ <rect
+ y="597.04474"
+ x="245.24689"
+ height="21.5625"
+ width="21.5625"
+ id="rect10108"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#699b3b;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.93750006;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#e8f0e0;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.9375;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.53333336;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 256.02147,618.60719 h -10.77458 v -21.5624 h 10.77458"
+ id="rect8431"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc" />
+ <circle
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#e8f0e0;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.9375;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.53333336;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="path8747"
+ cx="256.02814"
+ cy="607.82599"
+ r="6.09375" />
+ <path
+ id="circle8749"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#699b3b;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.9375;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.53333336;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ sodipodi:type="arc"
+ sodipodi:cx="-607.82599"
+ sodipodi:cy="256.02814"
+ sodipodi:rx="6.09375"
+ sodipodi:ry="6.09375"
+ sodipodi:start="3.1415927"
+ sodipodi:end="0"
+ d="m -613.91974,256.02814 a 6.09375,6.09375 0 0 1 6.09375,-6.09375 6.09375,6.09375 0 0 1 6.09375,6.09375 h -6.09375 z"
+ transform="rotate(-90)" />
+ <circle
+ r="6.09375"
+ cy="607.82599"
+ cx="256.02814"
+ id="circle8751"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.9375;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.53333336;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_volume-24.svg b/pixmaps/src/gwy_volume-24.svg
new file mode 100644
index 0000000..c3f4868
--- /dev/null
+++ b/pixmaps/src/gwy_volume-24.svg
@@ -0,0 +1,106 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg10043"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_volume-24.svg"
+ inkscape:export-filename="gwy_arithmetic-24.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs10045" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="2.803221"
+ inkscape:cx="26.849074"
+ inkscape:cy="16.158224"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-global="true"
+ inkscape:snap-smooth-nodes="true"
+ showguides="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata10048">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-197.36205,-472.33789)">
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path8625"
+ d="m 199.1133,489.64375 9.47583,-5.63833 10.89338,5.07017 -8.50916,6.76233 z"
+ style="fill:#7db846;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" />
+ <path
+ style="fill:#b3d296;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;fill-opacity:1"
+ d="m 198.66361,482.99919 9.92552,-4.57753 11.40722,3.89159 -8.92024,5.831 z"
+ id="path8602"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#b3d296;fill-opacity:0.49803922;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
+ d="m 199.1133,489.64375 -0.44969,-6.64456 -0.44969,-6.64456 12.96496,4.09595 -0.10277,7.69367 -0.10276,7.69367 z"
+ id="path8444"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ style="fill:#7db846;fill-opacity:0.49803922;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
+ d="m 210.97335,495.83792 8.50916,-6.76233 0.51384,-6.76234 0.51383,-6.76233 -9.3313,4.89966 -0.10276,7.69367 z"
+ id="path8446"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ style="fill:#7db846;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
+ d="m 220.51018,475.55092 -11.92105,-2.71303 -10.37521,3.51674 12.96496,4.09595 z"
+ id="path8448"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_volume_calibrate-24.svg b/pixmaps/src/gwy_volume_calibrate-24.svg
new file mode 100644
index 0000000..676fe3c
--- /dev/null
+++ b/pixmaps/src/gwy_volume_calibrate-24.svg
@@ -0,0 +1,186 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg10043"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_volume_calibrate-24.svg"
+ inkscape:export-filename="gwy_arithmetic-24.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs10045">
+ <marker
+ inkscape:stockid="TriangleOutS"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="TriangleOutS"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path8570"
+ d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z "
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
+ transform="scale(0.2)" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleInS"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="TriangleInS"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path8561"
+ d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z "
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
+ transform="scale(-0.2)" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleOutM"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="TriangleOutM"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path8567"
+ d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z "
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
+ transform="scale(0.4)" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleInM"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="TriangleInM"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path8558"
+ d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z "
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
+ transform="scale(-0.4)" />
+ </marker>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="3.8682797"
+ inkscape:cx="22.285916"
+ inkscape:cy="33.49219"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-global="true"
+ inkscape:snap-smooth-nodes="true"
+ showguides="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata10048">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-197.36205,-472.33789)">
+ <g
+ id="g9110"
+ transform="translate(-0.351871,-0.31427201)"
+ style="stroke:#000000">
+ <path
+ style="fill:#7db846;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.79884571px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
+ d="m 198.8072,488.74572 7.31043,-4.35007 8.40404,3.91172 -6.56466,5.21726 z"
+ id="path8625"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path8602"
+ d="m 198.46027,483.61932 7.65736,-3.53165 8.80045,3.00243 -6.88179,4.49872 z"
+ style="fill:#b3d296;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.79884571px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="ccccccc"
+ inkscape:connector-curvature="0"
+ id="path8444"
+ d="m 198.8072,488.74572 -0.34693,-5.1264 -0.34693,-5.12639 10.00224,3.1601 -0.0793,5.93579 -0.0793,5.93581 z"
+ style="fill:#b3d296;fill-opacity:0.49803922;fill-rule:evenodd;stroke:#000000;stroke-width:0.79884571px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="ccccccc"
+ inkscape:connector-curvature="0"
+ id="path8446"
+ d="m 207.95701,493.52463 6.56466,-5.21726 0.39641,-5.21727 0.39642,-5.21724 -7.19892,3.78017 -0.0793,5.93579 z"
+ style="fill:#7db846;fill-opacity:0.49803922;fill-rule:evenodd;stroke:#000000;stroke-width:0.79884571px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8448"
+ d="m 215.3145,477.87286 -9.19687,-2.09316 -8.00429,2.71323 10.00224,3.1601 z"
+ style="fill:#7db846;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.79884571px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" />
+ </g>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 218.32405,479.33789 v 10"
+ id="path8420"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 221.36205,480.33789 h -6 l 3,-4 z"
+ id="path9101"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc" />
+ <path
+ sodipodi:nodetypes="cccc"
+ inkscape:connector-curvature="0"
+ id="path9103"
+ d="m 221.36205,489.33789 h -6 l 3,4 z"
+ style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_volume_dimensions-24.svg b/pixmaps/src/gwy_volume_dimensions-24.svg
new file mode 100644
index 0000000..70ab018
--- /dev/null
+++ b/pixmaps/src/gwy_volume_dimensions-24.svg
@@ -0,0 +1,634 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg10043"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_volume_dimensions-24.svg"
+ inkscape:export-filename="gwy_volume_dimensions-24.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96">
+ <defs
+ id="defs10045">
+ <linearGradient
+ y2="361.22473"
+ x2="272.91217"
+ y1="247.92804"
+ x1="207.50029"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient4171"
+ xlink:href="#linearGradient4140"
+ gradientTransform="translate(59.29372,916.17626)" />
+ <linearGradient
+ id="linearGradient4140">
+ <stop
+ id="stop4142"
+ offset="0"
+ style="stop-color:#d7e3f4;stop-opacity:1;" />
+ <stop
+ id="stop4144"
+ offset="1"
+ style="stop-color:#f1f5fb;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4140"
+ id="linearGradient8503"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(16.5221,915.32985)"
+ x1="207.50029"
+ y1="247.92804"
+ x2="272.91217"
+ y2="361.22473" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4140"
+ id="linearGradient11272"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(32.08851,923.82057)"
+ x1="207.50029"
+ y1="247.92804"
+ x2="272.91217"
+ y2="361.22473" />
+ <linearGradient
+ y2="361.22473"
+ x2="272.91217"
+ y1="247.92804"
+ x1="207.50029"
+ gradientTransform="translate(-8.15321,921.35162)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient9134"
+ xlink:href="#linearGradient4140"
+ inkscape:collect="always" />
+ <linearGradient
+ gradientTransform="translate(-11.142957,824.89612)"
+ xlink:href="#linearGradient4140"
+ id="linearGradient4171-3"
+ gradientUnits="userSpaceOnUse"
+ x1="207.50029"
+ y1="247.92804"
+ x2="272.91217"
+ y2="361.22473" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="15.622585"
+ inkscape:cx="7.2716537"
+ inkscape:cy="20.334967"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-global="true"
+ inkscape:snap-smooth-nodes="true"
+ showguides="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata10048">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-197.36205,-472.33789)">
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4385"
+ y="806.24518"
+ x="60.663467">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4387"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4487"
+ y="902.12134"
+ x="84.793442">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4489"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4536"
+ y="841.53381"
+ x="19.360735">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4538"
+ font-size="4.0000" />
+ </text>
+ <path
+ inkscape:connector-curvature="0"
+ d=""
+ cx="242.94168"
+ cy="308.38486"
+ r="70.205605"
+ id="path4138-6"
+ style="opacity:1;fill:url(#linearGradient4171);fill-opacity:1;stroke:#000000;stroke-width:5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g5318"
+ transform="translate(-19.81988,640.86029)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g6386"
+ transform="translate(527.40136,112.66231)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g7162"
+ transform="translate(-167.24081,-44.09958)" />
+ <text
+ xml:space="preserve"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:0px;word-spacing:0px;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;color-interpolat [...]
+ x="380.92767"
+ y="1030.1844"
+ id="text8015"><tspan
+ id="tspan8017"
+ x="380.92767"
+ y="1030.1844" /></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+ x="-1192.1738"
+ y="-296.88043"
+ id="text9295"><tspan
+ id="tspan9297"
+ x="-1192.1738"
+ y="-296.88043" /></text>
+ <text
+ id="text7408-2"
+ class="fil7 fnt4"
+ y="-14.998607"
+ x="-1074.9611"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ id="text7422"
+ class="fil7 fnt4"
+ y="12.468007"
+ x="-1058.5881"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4385-9"
+ y="805.39874"
+ x="17.891848">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4387-0"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4487-9"
+ y="901.2749"
+ x="42.02182">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4489-1"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4536-7"
+ y="840.68738"
+ x="-23.410887">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4538-7"
+ font-size="4.0000" />
+ </text>
+ <path
+ inkscape:connector-curvature="0"
+ d=""
+ cx="242.94168"
+ cy="308.38486"
+ r="70.205605"
+ id="path4138-6-1"
+ style="opacity:1;fill:url(#linearGradient8503);fill-opacity:1;stroke:#000000;stroke-width:5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g5318-7"
+ transform="translate(-62.59148,640.01388)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g6386-6"
+ transform="translate(484.62977,111.8159)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g7162-7"
+ transform="translate(-210.01241,-44.94599)" />
+ <text
+ xml:space="preserve"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:0px;word-spacing:0px;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;color-interpolat [...]
+ x="338.15607"
+ y="1029.338"
+ id="text8015-3"><tspan
+ id="tspan8017-6"
+ x="338.15607"
+ y="1029.338" /></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+ x="-1234.9454"
+ y="-297.72681"
+ id="text9295-5"><tspan
+ id="tspan9297-6"
+ x="-1234.9454"
+ y="-297.72681" /></text>
+ <text
+ id="text7408-2-3"
+ class="fil7 fnt4"
+ y="-15.845012"
+ x="-1117.7327"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ id="text7422-9"
+ class="fil7 fnt4"
+ y="11.621602"
+ x="-1101.3597"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4385-7"
+ y="813.88947"
+ x="33.458252">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4387-2"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4487-3"
+ y="909.76562"
+ x="57.588226">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4489-7"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4536-2"
+ y="849.1781"
+ x="-7.8444805">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4538-5"
+ font-size="4.0000" />
+ </text>
+ <path
+ inkscape:connector-curvature="0"
+ d=""
+ cx="242.94168"
+ cy="308.38486"
+ r="70.205605"
+ id="path4138-6-3"
+ style="opacity:1;fill:url(#linearGradient11272);fill-opacity:1;stroke:#000000;stroke-width:5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g5318-3"
+ transform="translate(-47.02508,648.5046)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g6386-64"
+ transform="translate(500.19616,120.30662)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g7162-03"
+ transform="translate(-194.44601,-36.45527)" />
+ <text
+ xml:space="preserve"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:0px;word-spacing:0px;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;color-interpolat [...]
+ x="353.72247"
+ y="1037.8287"
+ id="text8015-5"><tspan
+ id="tspan8017-85"
+ x="353.72247"
+ y="1037.8287" /></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+ x="-1219.379"
+ y="-289.23608"
+ id="text9295-0"><tspan
+ id="tspan9297-9"
+ x="-1219.379"
+ y="-289.23608" /></text>
+ <text
+ id="text7408-2-9"
+ class="fil7 fnt4"
+ y="-7.3542891"
+ x="-1102.1663"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ id="text7422-8"
+ class="fil7 fnt4"
+ y="20.112326"
+ x="-1085.7933"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4385-2"
+ y="811.42053"
+ x="-6.7834759">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4387-6"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4487-5"
+ y="907.29669"
+ x="17.346497">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4489-8"
+ font-size="4.0000" />
+ </text>
+ <text
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:Arial"
+ id="text4536-7-2"
+ y="846.70917"
+ x="-48.086227">
+ <tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:Arial;-inkscape-font-specification:Arial;fill:#1b1918"
+ id="tspan4538-9"
+ font-size="4.0000" />
+ </text>
+ <path
+ inkscape:connector-curvature="0"
+ d=""
+ cx="242.94168"
+ cy="308.38486"
+ r="70.205605"
+ id="path4138-6-6"
+ style="opacity:1;fill:url(#linearGradient9134);fill-opacity:1;stroke:#000000;stroke-width:5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g5318-4"
+ transform="translate(-87.26678,646.03565)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g6386-8"
+ transform="translate(459.95446,117.83767)" />
+ <g
+ style="color:#ffffff;fill:none;stroke:currentColor;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter"
+ id="g7162-7-4"
+ transform="translate(-234.68772,-38.92423)" />
+ <text
+ xml:space="preserve"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:0%;font-family:Arial;-inkscape-font-specification:'Arial, Normal';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:0px;word-spacing:0px;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;color-interpolat [...]
+ x="313.48077"
+ y="1035.3597"
+ id="text8015-0"><tspan
+ id="tspan8017-8"
+ x="313.48077"
+ y="1035.3597" /></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
+ x="-1259.6207"
+ y="-291.70502"
+ id="text9295-6-9"><tspan
+ id="tspan9297-2"
+ x="-1259.6207"
+ y="-291.70502" /></text>
+ <text
+ id="text7408-2-4"
+ class="fil7 fnt4"
+ y="-9.8232222"
+ x="-1142.408"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <text
+ id="text7422-7"
+ class="fil7 fnt4"
+ y="17.643393"
+ x="-1126.035"
+ style="font-weight:normal;font-size:11.24956036px;font-family:'Futura Md BT';clip-rule:evenodd;fill:#fefefe;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" />
+ <g
+ id="g8575"
+ style="opacity:1">
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="rect16956-4"
+ d="m 212.86204,496.8379 h 8 v -25.00001 h -8 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#ffbb00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <path
+ sodipodi:nodetypes="cc"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 213.36204,486.83204 h 5"
+ id="path16962-8"
+ inkscape:connector-curvature="0" />
+ <path
+ sodipodi:nodetypes="cc"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 213.36204,474.83204 h 5"
+ id="path16970-1"
+ inkscape:connector-curvature="0" />
+ <path
+ sodipodi:nodetypes="cc"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 213.36204,478.83204 h 3"
+ id="path8257"
+ inkscape:connector-curvature="0" />
+ <path
+ sodipodi:nodetypes="cc"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 213.36204,490.83204 h 3"
+ id="path8276"
+ inkscape:connector-curvature="0" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path8356"
+ d="m 213.36204,494.83204 h 3"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path8358"
+ d="m 213.36204,482.83204 h 3"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 213.36204,493.83204 h 3"
+ id="path8265"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8267"
+ d="m 213.36204,489.83204 h 3"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="cc" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path8269"
+ d="m 213.36204,485.83204 h 5"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 213.36204,481.83204 h 3"
+ id="path8271"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path8273"
+ d="m 213.36204,473.83204 h 5"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8275"
+ d="m 213.36204,477.83204 h 3"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="cc" />
+ </g>
+ <g
+ id="g8587"
+ style="opacity:1"
+ transform="translate(4)">
+ <g
+ transform="matrix(1,0,0,-1,-4.00001,968.67578)"
+ id="g8637"
+ style="">
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#ffbb00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 201.8622,471.83788 h 6 v 25 h -6 z"
+ id="rect12874"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 202.36204,479.83801 h 3"
+ id="path12876"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 202.36204,476.83801 h 2.00001"
+ id="path12880"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path12882"
+ d="m 202.36204,473.83801 h 3"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 202.36204,488.83801 h 2.00001"
+ id="path12884"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 202.36204,482.83801 h 2.00001"
+ id="path12890"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path12892"
+ d="m 202.36204,485.83801 h 3"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 202.36204,491.83801 h 3"
+ id="path8091"
+ inkscape:connector-curvature="0" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path8509"
+ d="m 202.36204,494.83801 h 2.00001"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+ </g>
+ <g
+ id="g8425"
+ transform="matrix(0.65166933,0,0,0.6521518,77.16252,172.47612)"
+ style="opacity:1;stroke-width:1.53395295">
+ <path
+ style="fill:#7db846;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.53395295px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
+ d="m 199.1133,489.64375 9.47583,-5.63833 10.89338,5.07017 -8.50916,6.76233 z"
+ id="path8625"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path8602"
+ d="m 198.66361,482.99919 9.92552,-4.57753 11.40722,3.89159 -8.92024,5.831 z"
+ style="fill:#b3d296;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.53395295px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="ccccccc"
+ inkscape:connector-curvature="0"
+ id="path8444"
+ d="m 199.1133,489.64375 -0.44969,-6.64456 -0.44969,-6.64456 12.96496,4.09595 -0.10277,7.69367 -0.10276,7.69367 z"
+ style="fill:#b3d296;fill-opacity:0.49803922;fill-rule:evenodd;stroke:#000000;stroke-width:1.53395295px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="ccccccc"
+ inkscape:connector-curvature="0"
+ id="path8446"
+ d="m 210.97335,495.83792 8.50916,-6.76233 0.51384,-6.76234 0.51383,-6.76233 -9.3313,4.89966 -0.10276,7.69367 z"
+ style="fill:#7db846;fill-opacity:0.49803922;fill-rule:evenodd;stroke:#000000;stroke-width:1.53395295px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8448"
+ d="m 220.51018,475.55092 -11.92105,-2.71303 -10.37521,3.51674 12.96496,4.09595 z"
+ style="fill:#7db846;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.53395295px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" />
+ </g>
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_volume_fd-24.svg b/pixmaps/src/gwy_volume_fd-24.svg
new file mode 100644
index 0000000..36229c9
--- /dev/null
+++ b/pixmaps/src/gwy_volume_fd-24.svg
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg10043"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_volume_fd-24.svg"
+ inkscape:export-filename="gwy_arithmetic-24.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs10045" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1.6563396"
+ inkscape:cx="7.7738282"
+ inkscape:cy="-33.008779"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-global="true"
+ inkscape:snap-smooth-nodes="true"
+ showguides="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata10048">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-197.36205,-472.33789)">
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path8625"
+ d="m 199.1133,489.64375 9.47583,-5.63833 10.89338,5.07017 -8.50916,6.76233 z"
+ style="fill:#7db846;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" />
+ <path
+ style="fill:#b3d296;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;fill-opacity:1"
+ d="m 198.66361,482.99919 9.92552,-4.57753 11.40722,3.89159 -8.92024,5.831 z"
+ id="path8602"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#b3d296;fill-opacity:0.49803922;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
+ d="m 199.1133,489.64375 -0.44969,-6.64456 -0.44969,-6.64456 12.96496,4.09595 -0.10277,7.69367 -0.10276,7.69367 z"
+ id="path8444"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ style="fill:#7db846;fill-opacity:0.49803922;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
+ d="m 210.97335,495.83792 8.50916,-6.76233 0.51384,-6.76234 0.51383,-6.76233 -9.3313,4.89966 -0.10276,7.69367 z"
+ id="path8446"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ style="fill:#7db846;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
+ d="m 220.51018,475.55092 -11.92105,-2.71303 -10.37521,3.51674 12.96496,4.09595 z"
+ id="path8448"
+ inkscape:connector-curvature="0" />
+ <g
+ id="g8458"
+ transform="translate(0,0.46977756)">
+ <g
+ transform="translate(50.543528,-5.4800825)"
+ id="g8453">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#fcfcfc;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 149.38036,477.28775 c 0,1.6665 -0.64034,33.28751 4.89852,17.56983 2.7976,-5.89057 9.52869,-7.96489 16.00044,-7.96489"
+ id="path8636"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccc" />
+ <path
+ sodipodi:nodetypes="ccc"
+ inkscape:connector-curvature="0"
+ id="path12604"
+ d="m 149.38036,477.28775 c 0,1.6665 -0.64034,33.28751 4.89852,17.56983 2.7976,-5.89057 9.52869,-7.96489 16.00044,-7.96489"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_volume_invert-24.svg b/pixmaps/src/gwy_volume_invert-24.svg
new file mode 100644
index 0000000..7e6500c
--- /dev/null
+++ b/pixmaps/src/gwy_volume_invert-24.svg
@@ -0,0 +1,153 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="gwy_arithmetic-24.png"
+ sodipodi:docname="gwy_volume_invert-24.svg"
+ inkscape:version="0.92.1 r15371"
+ version="1.1"
+ id="svg10043"
+ viewBox="0 0 24 24"
+ height="24"
+ width="24">
+ <defs
+ id="defs10045" />
+ <sodipodi:namedview
+ showguides="false"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:snap-global="true"
+ inkscape:object-nodes="true"
+ inkscape:window-maximized="1"
+ inkscape:window-y="27"
+ inkscape:window-x="0"
+ inkscape:window-height="1016"
+ inkscape:window-width="1920"
+ units="px"
+ showgrid="false"
+ inkscape:current-layer="layer1"
+ inkscape:document-units="px"
+ inkscape:cy="-92.160525"
+ inkscape:cx="114.9141"
+ inkscape:zoom="1"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata10048">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-197.36205,-472.33789)">
+ <g
+ id="layer1-5"
+ inkscape:label="Layer 1"
+ transform="translate(0,-1.1261181e-5)">
+ <path
+ style="fill:#7db846;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
+ d="m 199.1133,489.64375 9.47583,-5.63833 10.89338,5.07017 -8.50916,6.76233 z"
+ id="path8625-6"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path8602-2"
+ d="m 198.66361,482.99919 9.92552,-4.57753 11.40722,3.89159 -8.92024,5.831 z"
+ style="fill:#b3d296;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="ccccccc"
+ inkscape:connector-curvature="0"
+ id="path8444-9"
+ d="m 199.1133,489.64375 -0.44969,-6.64456 -0.44969,-6.64456 12.96496,4.09595 -0.10277,7.69367 -0.10276,7.69367 z"
+ style="fill:#b3d296;fill-opacity:0.49803922;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="ccccccc"
+ inkscape:connector-curvature="0"
+ id="path8446-1"
+ d="m 210.97335,495.83792 8.50916,-6.76233 0.51384,-6.76234 0.51383,-6.76233 -9.3313,4.89966 -0.10276,7.69367 z"
+ style="fill:#7db846;fill-opacity:0.49803922;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8448-2"
+ d="m 220.51018,475.55092 -11.92105,-2.71303 -10.37521,3.51674 12.96496,4.09595 z"
+ style="fill:#7db846;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" />
+ </g>
+ <g
+ id="g4843">
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#699b3b;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000012;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect10108"
+ width="14.99996"
+ height="14.999966"
+ x="205.86205"
+ y="480.83792" />
+ <path
+ sodipodi:nodetypes="cccc"
+ inkscape:connector-curvature="0"
+ id="rect8431"
+ d="m 213.35739,495.83785 h -7.49534 v -14.99988 h 7.49534"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#e8f0e0;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.53333336;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <ellipse
+ ry="4.2391205"
+ rx="4.2391191"
+ cy="488.33789"
+ cx="213.36201"
+ id="path8747"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#e8f0e0;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.53333336;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <path
+ transform="rotate(-90)"
+ d="m -492.57701,213.36201 a 4.2391205,4.2391191 0 0 1 4.23912,-4.23911 4.2391205,4.2391191 0 0 1 4.23912,4.23911 h -4.23912 z"
+ sodipodi:end="0"
+ sodipodi:start="3.1415927"
+ sodipodi:ry="4.2391191"
+ sodipodi:rx="4.2391205"
+ sodipodi:cy="213.36201"
+ sodipodi:cx="-488.33789"
+ sodipodi:type="arc"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#699b3b;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.53333336;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="circle8749" />
+ <ellipse
+ ry="4.2391205"
+ rx="4.2391191"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.53333336;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="circle8751"
+ cx="213.36201"
+ cy="488.33789" />
+ </g>
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_volume_kmeans-24.svg b/pixmaps/src/gwy_volume_kmeans-24.svg
new file mode 100644
index 0000000..f938f39
--- /dev/null
+++ b/pixmaps/src/gwy_volume_kmeans-24.svg
@@ -0,0 +1,187 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg10043"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_volume_kmeans-24.svg"
+ inkscape:export-filename="gwy_arithmetic-24.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs10045" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1"
+ inkscape:cx="56.660862"
+ inkscape:cy="235.62877"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-global="true"
+ inkscape:snap-smooth-nodes="true"
+ showguides="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata10048">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-197.36205,-472.33789)">
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path8625"
+ d="m 198.80006,484.29824 6.17555,-3.67717 7.09939,3.30663 -5.54556,4.41022 z"
+ style="fill:#7db846;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" />
+ <path
+ style="fill:#b3d296;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
+ d="m 198.50699,479.96484 6.46862,-2.98535 7.43427,2.53799 -5.81346,3.80283 z"
+ id="path8602"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#b3d296;fill-opacity:0.49803922;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
+ d="m 198.80006,484.29824 -0.29307,-4.3334 -0.29307,-4.33341 8.44947,2.67127 -0.067,5.01761 -0.067,5.01761 z"
+ id="path8444"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ style="fill:#7db846;fill-opacity:0.49803922;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
+ d="m 206.52944,488.33792 5.54556,-4.41022 0.33488,-4.41022 0.33487,-4.41021 -6.08136,3.19543 -0.067,5.01761 z"
+ id="path8446"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ style="fill:#7db846;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
+ d="m 212.74475,475.10727 -7.76914,-1.76936 -6.76169,2.29352 8.44947,2.67127 z"
+ id="path8448"
+ inkscape:connector-curvature="0" />
+ <path
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:norma [...]
+ d="m 203.16593,490.00028 -3.33976,2.83761 3.60784,3.5 h 2.85608 l -3.3897,-3.5 3.11328,-2.83761 z"
+ id="path8441"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 200.36205,487.33789 v 9"
+ id="path8443"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.60000002;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8519"
+ width="2"
+ height="2"
+ x="214.36205"
+ y="490.33789" />
+ <rect
+ y="488.33789"
+ x="210.36205"
+ height="2"
+ width="2"
+ id="rect8521"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.60000002;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.60000002;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8523"
+ width="2"
+ height="2"
+ x="211.36205"
+ y="492.33789" />
+ <rect
+ y="487.33789"
+ x="215.36205"
+ height="2"
+ width="2"
+ id="rect8525"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.60000002;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.60000002;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8527"
+ width="2"
+ height="2"
+ x="216.36205"
+ y="491.33789" />
+ <rect
+ y="494.33789"
+ x="218.36205"
+ height="2"
+ width="2"
+ id="rect8529"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.60000002;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.60000002;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8531"
+ width="2"
+ height="2"
+ x="218.36205"
+ y="484.33789" />
+ <rect
+ y="481.33789"
+ x="215.36205"
+ height="2"
+ width="2"
+ id="rect8533"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.60000002;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.60000002;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8535"
+ width="2"
+ height="2"
+ x="207.36205"
+ y="494.33789" />
+ <circle
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#db2424;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.60000002;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="path8578"
+ cx="215.36205"
+ cy="490.33789"
+ r="5" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_volume_kmedians-24.svg b/pixmaps/src/gwy_volume_kmedians-24.svg
new file mode 100644
index 0000000..30e4740
--- /dev/null
+++ b/pixmaps/src/gwy_volume_kmedians-24.svg
@@ -0,0 +1,181 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg10043"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_volume_kmedians-24.svg"
+ inkscape:export-filename="gwy_arithmetic-24.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs10045" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="6.5467513"
+ inkscape:cx="-20.242981"
+ inkscape:cy="27.233206"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-global="true"
+ inkscape:snap-smooth-nodes="true"
+ showguides="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata10048">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-197.36205,-472.33789)">
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path8625"
+ d="m 198.80006,484.29824 6.17555,-3.67717 7.09939,3.30663 -5.54556,4.41022 z"
+ style="fill:#7db846;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" />
+ <path
+ style="fill:#b3d296;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
+ d="m 198.50699,479.96484 6.46862,-2.98535 7.43427,2.53799 -5.81346,3.80283 z"
+ id="path8602"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#b3d296;fill-opacity:0.49803922;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
+ d="m 198.80006,484.29824 -0.29307,-4.3334 -0.29307,-4.33341 8.44947,2.67127 -0.067,5.01761 -0.067,5.01761 z"
+ id="path8444"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ style="fill:#7db846;fill-opacity:0.49803922;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
+ d="m 206.52944,488.33792 5.54556,-4.41022 0.33488,-4.41022 0.33487,-4.41021 -6.08136,3.19543 -0.067,5.01761 z"
+ id="path8446"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ style="fill:#7db846;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
+ d="m 212.74475,475.10727 -7.76914,-1.76936 -6.76169,2.29352 8.44947,2.67127 z"
+ id="path8448"
+ inkscape:connector-curvature="0" />
+ <path
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:norma [...]
+ d="m 203.16593,490.00028 -3.33976,2.83761 3.60784,3.5 h 2.85608 l -3.3897,-3.5 3.11328,-2.83761 z"
+ id="path8441"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 200.36205,487.33789 v 9"
+ id="path8443"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <rect
+ y="488.33789"
+ x="210.36205"
+ height="2"
+ width="2"
+ id="rect8521"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.60000002;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.60000002;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8523"
+ width="2"
+ height="2"
+ x="211.36205"
+ y="492.33789" />
+ <rect
+ y="487.33789"
+ x="215.36205"
+ height="2"
+ width="2"
+ id="rect8525"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.60000002;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.60000002;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8527"
+ width="2"
+ height="2"
+ x="216.36205"
+ y="491.33789" />
+ <rect
+ y="494.33789"
+ x="218.36205"
+ height="2"
+ width="2"
+ id="rect8529"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.60000002;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.60000002;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8531"
+ width="2"
+ height="2"
+ x="218.36205"
+ y="484.33789" />
+ <rect
+ y="481.33789"
+ x="215.36205"
+ height="2"
+ width="2"
+ id="rect8533"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.60000002;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.60000002;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8535"
+ width="2"
+ height="2"
+ x="207.36205"
+ y="494.33789" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#db2424;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.60000002;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8519"
+ width="3.9999907"
+ height="3.9999907"
+ x="213.36206"
+ y="489.33789" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_volume_slice-24.svg b/pixmaps/src/gwy_volume_slice-24.svg
new file mode 100644
index 0000000..5bb61ea
--- /dev/null
+++ b/pixmaps/src/gwy_volume_slice-24.svg
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg10043"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_volume_slice-24.svg"
+ inkscape:export-filename="gwy_arithmetic-24.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs10045" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="2.3354388"
+ inkscape:cx="-41.066226"
+ inkscape:cy="-7.3167364"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-global="true"
+ inkscape:snap-smooth-nodes="true"
+ showguides="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata10048">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-197.36205,-472.33789)">
+ <g
+ id="g8459"
+ transform="matrix(1.1946383,0,0,1.194333,-40.749873,-94.122843)"
+ style="stroke-width:0.83718044">
+ <path
+ style="fill:#7db846;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.83718044px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
+ d="m 200.7831,488.78042 7.93196,-4.7209 9.11855,4.24518 -7.12278,5.66201 z"
+ id="path8625"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ sodipodi:nodetypes="ccccccc"
+ inkscape:connector-curvature="0"
+ id="path8444"
+ d="m 200.7831,488.78042 -0.37642,-5.5634 -0.37643,-5.56341 10.85262,3.42949 -0.086,6.44181 -0.086,6.4418 z"
+ style="fill:#b3d296;fill-opacity:0.49803922;fill-rule:evenodd;stroke:#000000;stroke-width:0.83718044px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="ccccccc"
+ inkscape:connector-curvature="0"
+ id="path8446"
+ d="m 210.71083,493.96671 7.12278,-5.66201 0.43012,-5.66201 0.43012,-5.66201 -7.81098,4.10242 -0.086,6.44181 z"
+ style="fill:#7db846;fill-opacity:0.49803922;fill-rule:evenodd;stroke:#000000;stroke-width:0.83718044px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path8602"
+ d="m 200.40668,483.21702 8.30838,-3.83271 9.54867,3.25838 -7.46689,4.88222 z"
+ style="fill:#db2424;fill-opacity:1;fill-rule:evenodd;stroke:#db2424;stroke-width:0.83718044px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8448"
+ d="m 218.69385,476.98068 -9.97879,-2.27159 -8.68481,2.94452 10.85262,3.42949 z"
+ style="fill:#7db846;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.83718044px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path8451"
+ d="m 210.88287,481.0831 -0.086,6.94181"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.83718044px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ </g>
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_xy_denoise-24.svg b/pixmaps/src/gwy_xy_denoise-24.svg
new file mode 100644
index 0000000..34049d3
--- /dev/null
+++ b/pixmaps/src/gwy_xy_denoise-24.svg
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg10043"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_xy_denoise-24.svg"
+ inkscape:export-filename="gwy_arithmetic-24.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs10045" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1.6563396"
+ inkscape:cx="37.236181"
+ inkscape:cy="-5.7190499"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:lockguides="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata10048">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-197.36205,-472.33789)">
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#8abce8;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect11370"
+ width="13"
+ height="13"
+ x="197.86205"
+ y="472.83789" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 198.36205,485.83789 h 7"
+ id="path8746"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8740"
+ d="m 198.36205,474.83789 h 12"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ sodipodi:nodetypes="cc" />
+ <path
+ sodipodi:nodetypes="cc"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 198.36205,476.83789 h 12"
+ id="path8586"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8588"
+ d="m 198.36205,479.83789 h 12"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ sodipodi:nodetypes="cc" />
+ <path
+ sodipodi:nodetypes="cc"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 198.36205,483.83789 h 12"
+ id="path8590"
+ inkscape:connector-curvature="0" />
+ <rect
+ y="475.83789"
+ x="207.86205"
+ height="13"
+ width="13"
+ id="rect8183"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#cde2f5;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <path
+ sodipodi:nodetypes="cc"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 218.86205,476.33789 v 12"
+ id="path8598"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8600"
+ d="m 216.86205,476.33789 v 12"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ sodipodi:nodetypes="cc" />
+ <path
+ sodipodi:nodetypes="cc"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 213.86205,476.33789 v 12"
+ id="path8602"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path8604"
+ d="m 210.86205,476.33789 v 12"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ sodipodi:nodetypes="cc" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#4696db;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ id="rect8153"
+ width="13"
+ height="13"
+ x="202.86205"
+ y="482.83789" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_zero_mean-24.svg b/pixmaps/src/gwy_zero_mean-24.svg
new file mode 100644
index 0000000..096d4b9
--- /dev/null
+++ b/pixmaps/src/gwy_zero_mean-24.svg
@@ -0,0 +1,162 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8833"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_zero_mean-24.svg">
+ <defs
+ id="defs8835">
+ <linearGradient
+ y2="361.22473"
+ x2="272.91217"
+ y1="247.92804"
+ x1="207.50029"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient4171"
+ xlink:href="#linearGradient4140"
+ gradientTransform="translate(-11.142957,824.89612)" />
+ <linearGradient
+ id="linearGradient4140">
+ <stop
+ id="stop4142"
+ offset="0"
+ style="stop-color:#d7e3f4;stop-opacity:1;" />
+ <stop
+ id="stop4144"
+ offset="1"
+ style="stop-color:#f1f5fb;stop-opacity:1" />
+ </linearGradient>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="9.5287932"
+ inkscape:cx="19.336481"
+ inkscape:cy="31.739175"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8838">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-199.64375,-490.06708)">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.50000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 200.64378,494.5671 2,3 c 0,0 0,3 1,3 1,0 2,0 2,0 0,0 1,-3 1,-3 0,0 0,-3 1,-4 1,-1 4,-2 4,-2 l 2,4 2,0"
+ id="path8803"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1, 1;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 215.64378,510.5671 h -15"
+ id="path8805"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 210.64378,498.06708 v 8"
+ id="path8807"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 206.64375,505.06708 4,4 4,-4 z"
+ id="path8226"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#db2424;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 200.64375,496.56708 h 15"
+ id="path4818"
+ inkscape:connector-curvature="0" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#ffbb00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000036;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 217.14391,489.56708 h 6 v 23 h -6 z"
+ id="rect12874"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#82d636;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 217.64374,498.56719 h 3"
+ id="path12876"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#82d636;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 217.64374,495.56719 h 2.00001"
+ id="path12880"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path12882"
+ d="m 217.64374,492.56719 h 3"
+ style="fill:#82d636;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:#82d636;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 217.64374,507.56719 h 2.00001"
+ id="path12884"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:#82d636;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 217.64374,501.56719 h 2.00001"
+ id="path12890"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path12892"
+ d="m 217.64374,504.56719 h 3"
+ style="fill:#82d636;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:#82d636;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 217.64374,510.56719 h 3"
+ id="path8091"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_zoom_1_1-24.svg b/pixmaps/src/gwy_zoom_1_1-24.svg
new file mode 100644
index 0000000..7ff1335
--- /dev/null
+++ b/pixmaps/src/gwy_zoom_1_1-24.svg
@@ -0,0 +1,339 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8272"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_zoom_1_1-24.svg">
+ <defs
+ id="defs8274">
+ <linearGradient
+ id="linearGradient4270">
+ <stop
+ style="stop-color:#3c98f4;stop-opacity:0.12156863"
+ offset="0"
+ id="stop4272" />
+ <stop
+ style="stop-color:#f1f5fb;stop-opacity:0.12156863"
+ offset="1"
+ id="stop4274" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4198">
+ <stop
+ id="stop4200-0"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:0.39215687" />
+ <stop
+ id="stop4202"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:0.3137255" />
+ </linearGradient>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4782-7-2">
+ <circle
+ style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="circle4784-1-2"
+ cx="276.29214"
+ cy="151.18121"
+ r="19.066629" />
+ </clipPath>
+ <linearGradient
+ gradientUnits="userSpaceOnUse"
+ y2="361.22473"
+ x2="272.91217"
+ y1="247.92804"
+ x1="207.50029"
+ id="linearGradient4146-6-8"
+ xlink:href="#linearGradient4270" />
+ <filter
+ height="1.1263148"
+ y="-0.063157417"
+ width="1.1142865"
+ x="-0.057143249"
+ id="filter4238-9-3"
+ style="color-interpolation-filters:sRGB">
+ <feGaussianBlur
+ id="feGaussianBlur4240-4-6"
+ stdDeviation="2.4600469" />
+ </filter>
+ <linearGradient
+ gradientUnits="userSpaceOnUse"
+ y2="312.29819"
+ x2="227.00648"
+ y1="288.19104"
+ x1="214.93521"
+ id="linearGradient4204-9-1"
+ xlink:href="#linearGradient4198" />
+ <filter
+ height="1.025263"
+ y="-0.012631484"
+ width="1.0228573"
+ x="-0.011428649"
+ id="filter4254-1-3"
+ style="color-interpolation-filters:sRGB">
+ <feGaussianBlur
+ id="feGaussianBlur4256-7-1"
+ stdDeviation="0.49200938" />
+ </filter>
+ <linearGradient
+ gradientTransform="translate(-82.687317,-0.17664853)"
+ inkscape:collect="always"
+ xlink:href="#linearGradient12587"
+ id="linearGradient12593"
+ x1="363.08881"
+ y1="538.68573"
+ x2="365.21747"
+ y2="540.84064"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient12587">
+ <stop
+ style="stop-color:#6daa34;stop-opacity:1"
+ offset="0"
+ id="stop12589" />
+ <stop
+ id="stop13669"
+ offset="0.5"
+ style="stop-color:#87c74a;stop-opacity:1" />
+ <stop
+ style="stop-color:#6daa34;stop-opacity:1"
+ offset="1"
+ id="stop12591" />
+ </linearGradient>
+ <filter
+ inkscape:collect="always"
+ style="color-interpolation-filters:sRGB"
+ id="filter18492"
+ x="-0.047411256"
+ width="1.0948225"
+ y="-0.04860355"
+ height="1.0972071">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.42995752"
+ id="feGaussianBlur18494" />
+ </filter>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="30.908981"
+ inkscape:cx="14.529779"
+ inkscape:cy="19.248958"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="false"
+ inkscape:snap-grids="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8277">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-276.85299,-520.68522)">
+ <g
+ id="g18446"
+ transform="translate(-80.972697,-31.419635)"
+ style="opacity:0.5;filter:url(#filter18492)">
+ <path
+ inkscape:connector-curvature="0"
+ id="path18369"
+ d="m 363.68784,568.4473 -5.08846,5.03989 c -0.0998,0.0989 -0.11276,0.3176 -0.0177,0.42101 l 1.80326,1.96183 c 0.095,0.10341 0.32123,0.11658 0.42097,0.0177 l 5.08846,-5.0399 z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.99607843"
+ sodipodi:nodetypes="csssscc" />
+ <circle
+ transform="matrix(-0.16007054,0.98710558,-0.98710558,-0.16007054,0,0)"
+ cx="496.39133"
+ cy="-457.18619"
+ r="8.4484291"
+ id="circle18383"
+ style="opacity:1;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+ <path
+ inkscape:connector-curvature="0"
+ id="path4717-0"
+ d="m 283.52763,535.28367 -5.08846,5.03989 c -0.0998,0.0989 -0.11276,0.3176 -0.0177,0.42102 l 0.90163,0.98091 0.90162,0.98091 c 0.095,0.10341 0.32124,0.11658 0.42098,0.0177 l 5.08846,-5.0399 -1.10326,-1.20027 z"
+ style="fill:url(#linearGradient12593);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.30000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:"
+ sodipodi:nodetypes="csscssccc" />
+ <g
+ id="g18291"
+ transform="matrix(0.91094965,0,0,0.91094965,-62.437764,50.321472)">
+ <g
+ id="g4751-3"
+ clip-path="url(#clipPath4782-7-2)"
+ transform="matrix(-0.40789887,0.26719843,-0.26719843,-0.40789887,540.73338,515.16801)">
+ <path
+ id="path4532-9"
+ style="fill:#ffffff;stroke:#868789;stroke-width:1.4453578;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none"
+ d="m 276.3071,132.25651 a 21.406287,18.906167 0 0 1 21.40628,18.90617 21.406287,18.906167 0 1 1 -21.40628,-18.90617 z"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ id="g4449-8"
+ transform="matrix(-0.02114565,0.13039867,-0.13039867,-0.02114565,432.9912,502.16397)">
+ <circle
+ cx="242.94168"
+ cy="308.38486"
+ r="70.205605"
+ id="path4138-5"
+ style="opacity:1;fill:url(#linearGradient4146-6-8);fill-opacity:1;stroke:#505050;stroke-width:12.46485138;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4138-7-0-6"
+ d="m 228.98386,281.59914 c -19.82968,23.31175 -33.58074,74.72281 -44.4409,50.95241 -3.08421,-7.44468 -4.78632,-15.60691 -4.78632,-24.16669 0,-34.89614 28.2889,-63.18505 63.18504,-63.18505 13.77337,0 26.51744,4.40699 36.89904,11.88781 15.92115,11.47255 -31.02718,1.19977 -50.85686,24.51152 z"
+ style="opacity:1;fill:#ffffff;fill-opacity:0.42452829;stroke:none;stroke-width:5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter4238-9-3)" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4138-7-1"
+ d="m 228.98386,281.59914 c -19.82968,23.31175 -33.58074,74.72281 -44.4409,50.95241 -3.08421,-7.44468 -4.78632,-15.60691 -4.78632,-24.16669 0,-34.89614 28.2889,-63.18505 63.18504,-63.18505 13.77337,0 26.51744,4.40699 36.89904,11.88781 15.92115,11.47255 -31.02718,1.19977 -50.85686,24.51152 z"
+ style="opacity:1;fill:url(#linearGradient4204-9-1);fill-opacity:1;stroke:none;stroke-width:5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter4254-1-3)" />
+ </g>
+ </g>
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 294.853,526.68549 2,0 0,8 -2,0 z"
+ id="rect8232"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <rect
+ y="528.68549"
+ x="292.853"
+ height="1"
+ width="1"
+ id="rect8236"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <path
+ style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 292.85301,528.68549 c 1.42912,-0.89007 1.3673,-1.34418 2,-2 l 1,1 c -0.66667,0.66765 -1.33333,1.42726 -2,2 l -1,-1"
+ id="path8240"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <g
+ id="g8257"
+ transform="translate(-91.187293,-0.6766946)">
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="rect8259"
+ d="m 377.04031,527.36218 2,0 0,8 -2,0 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="529.36218"
+ x="375.04031"
+ height="1"
+ width="1"
+ id="rect8261"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <path
+ style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 375.04032,529.36218 c 1.42912,-0.89007 1.3673,-1.34418 2,-2 l 1,1 c -0.66667,0.66765 -1.33333,1.42726 -2,2 l -1,-1"
+ id="path8263"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ </g>
+ <rect
+ y="529.68549"
+ x="289.853"
+ height="1"
+ width="1"
+ id="rect8236-5"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="531.68549"
+ x="289.853"
+ height="1"
+ width="1"
+ id="rect8236-6"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="529.68549"
+ x="290.853"
+ height="1"
+ width="1"
+ id="rect8236-5-3"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="528.68549"
+ x="289.853"
+ height="1"
+ width="1"
+ id="rect8236-5-6"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="528.68549"
+ x="290.853"
+ height="1"
+ width="1"
+ id="rect8236-5-7"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="531.68549"
+ x="290.853"
+ height="1"
+ width="1"
+ id="rect8236-5-5"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="532.68549"
+ x="290.853"
+ height="1"
+ width="1"
+ id="rect8236-5-35"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <rect
+ y="532.68549"
+ x="289.853"
+ height="1"
+ width="1"
+ id="rect8236-5-62"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_zoom_fit-24.svg b/pixmaps/src/gwy_zoom_fit-24.svg
new file mode 100644
index 0000000..96af4d0
--- /dev/null
+++ b/pixmaps/src/gwy_zoom_fit-24.svg
@@ -0,0 +1,290 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8272"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_zoom_fit-24.svg">
+ <defs
+ id="defs8274">
+ <linearGradient
+ id="linearGradient4270">
+ <stop
+ style="stop-color:#3c98f4;stop-opacity:0.12156863"
+ offset="0"
+ id="stop4272" />
+ <stop
+ style="stop-color:#f1f5fb;stop-opacity:0.12156863"
+ offset="1"
+ id="stop4274" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4198">
+ <stop
+ id="stop4200-0"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:0.39215687" />
+ <stop
+ id="stop4202"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:0.3137255" />
+ </linearGradient>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4782-7-2">
+ <circle
+ style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="circle4784-1-2"
+ cx="276.29214"
+ cy="151.18121"
+ r="19.066629" />
+ </clipPath>
+ <linearGradient
+ gradientUnits="userSpaceOnUse"
+ y2="361.22473"
+ x2="272.91217"
+ y1="247.92804"
+ x1="207.50029"
+ id="linearGradient4146-6-8"
+ xlink:href="#linearGradient4270" />
+ <filter
+ height="1.1263148"
+ y="-0.063157417"
+ width="1.1142865"
+ x="-0.057143249"
+ id="filter4238-9-3"
+ style="color-interpolation-filters:sRGB">
+ <feGaussianBlur
+ id="feGaussianBlur4240-4-6"
+ stdDeviation="2.4600469" />
+ </filter>
+ <linearGradient
+ gradientUnits="userSpaceOnUse"
+ y2="312.29819"
+ x2="227.00648"
+ y1="288.19104"
+ x1="214.93521"
+ id="linearGradient4204-9-1"
+ xlink:href="#linearGradient4198" />
+ <filter
+ height="1.025263"
+ y="-0.012631484"
+ width="1.0228573"
+ x="-0.011428649"
+ id="filter4254-1-3"
+ style="color-interpolation-filters:sRGB">
+ <feGaussianBlur
+ id="feGaussianBlur4256-7-1"
+ stdDeviation="0.49200938" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ style="color-interpolation-filters:sRGB"
+ id="filter18492"
+ x="-0.047411256"
+ width="1.0948225"
+ y="-0.04860355"
+ height="1.0972071">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.42995752"
+ id="feGaussianBlur18494" />
+ </filter>
+ <linearGradient
+ gradientTransform="translate(-82.68732,-0.17665003)"
+ inkscape:collect="always"
+ xlink:href="#linearGradient12587-6"
+ id="linearGradient12593-3"
+ x1="363.08881"
+ y1="538.68573"
+ x2="365.21747"
+ y2="540.84064"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient12587-6">
+ <stop
+ style="stop-color:#6daa34;stop-opacity:1"
+ offset="0"
+ id="stop12589-7" />
+ <stop
+ id="stop13669-5"
+ offset="0.5"
+ style="stop-color:#87c74a;stop-opacity:1" />
+ <stop
+ style="stop-color:#6daa34;stop-opacity:1"
+ offset="1"
+ id="stop12591-3" />
+ </linearGradient>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="90.56781"
+ inkscape:cx="-3.2355931"
+ inkscape:cy="13.088268"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-grids="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8277">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-276.85299,-520.68522)">
+ <g
+ id="g18446"
+ transform="translate(-80.972697,-31.419635)"
+ style="opacity:0.5;filter:url(#filter18492)">
+ <path
+ inkscape:connector-curvature="0"
+ id="path18369"
+ d="m 363.68784,568.4473 -5.08846,5.03989 c -0.0998,0.0989 -0.11276,0.3176 -0.0177,0.42101 l 1.80326,1.96183 c 0.095,0.10341 0.32123,0.11658 0.42097,0.0177 l 5.08846,-5.0399 z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.99607843"
+ sodipodi:nodetypes="csssscc" />
+ <circle
+ transform="matrix(-0.16007054,0.98710558,-0.98710558,-0.16007054,0,0)"
+ cx="496.39133"
+ cy="-457.18619"
+ r="8.4484291"
+ id="circle18383"
+ style="opacity:1;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+ <path
+ inkscape:connector-curvature="0"
+ id="path4717-0-5"
+ d="m 283.52763,535.28367 -5.08846,5.03989 c -0.0998,0.0989 -0.11276,0.3176 -0.0177,0.42102 l 0.90163,0.98091 0.90162,0.98091 c 0.095,0.10341 0.32124,0.11658 0.42098,0.0177 l 5.08846,-5.0399 -1.10326,-1.20027 z"
+ style="fill:url(#linearGradient12593-3);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.30000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="csscssccc" />
+ <g
+ id="g18291"
+ transform="matrix(0.91094965,0,0,0.91094965,-62.437764,50.321472)">
+ <g
+ id="g4751-3"
+ clip-path="url(#clipPath4782-7-2)"
+ transform="matrix(-0.40789887,0.26719843,-0.26719843,-0.40789887,540.73338,515.16801)">
+ <path
+ id="path4532-9"
+ style="fill:#ffffff;stroke:#868789;stroke-width:1.4453578;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none"
+ d="m 276.3071,132.25651 a 21.406287,18.906167 0 0 1 21.40628,18.90617 21.406287,18.906167 0 1 1 -21.40628,-18.90617 z"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ id="g4449-8"
+ transform="matrix(-0.02114565,0.13039867,-0.13039867,-0.02114565,432.9912,502.16397)">
+ <circle
+ cx="242.94168"
+ cy="308.38486"
+ r="70.205605"
+ id="path4138-5"
+ style="opacity:1;fill:url(#linearGradient4146-6-8);fill-opacity:1;stroke:#505050;stroke-width:12.46485138;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4138-7-0-6"
+ d="m 228.98386,281.59914 c -19.82968,23.31175 -33.58074,74.72281 -44.4409,50.95241 -3.08421,-7.44468 -4.78632,-15.60691 -4.78632,-24.16669 0,-34.89614 28.2889,-63.18505 63.18504,-63.18505 13.77337,0 26.51744,4.40699 36.89904,11.88781 15.92115,11.47255 -31.02718,1.19977 -50.85686,24.51152 z"
+ style="opacity:1;fill:#ffffff;fill-opacity:0.42452829;stroke:none;stroke-width:5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter4238-9-3)" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4138-7-1"
+ d="m 228.98386,281.59914 c -19.82968,23.31175 -33.58074,74.72281 -44.4409,50.95241 -3.08421,-7.44468 -4.78632,-15.60691 -4.78632,-24.16669 0,-34.89614 28.2889,-63.18505 63.18504,-63.18505 13.77337,0 26.51744,4.40699 36.89904,11.88781 15.92115,11.47255 -31.02718,1.19977 -50.85686,24.51152 z"
+ style="opacity:1;fill:url(#linearGradient4204-9-1);fill-opacity:1;stroke:none;stroke-width:5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter4254-1-3)" />
+ </g>
+ </g>
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#808080;stroke-width:1.00000048;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 292.35297,534.18549 2,0 0,-2"
+ id="path8218"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccc" />
+ <path
+ sodipodi:nodetypes="ccc"
+ inkscape:connector-curvature="0"
+ id="path8220"
+ d="m 292.35297,535.18549 3,0 0,-3"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000048;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <path
+ sodipodi:nodetypes="ccc"
+ inkscape:connector-curvature="0"
+ id="path8224"
+ d="m 292.35297,527.18548 2,0 0,2"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#808080;stroke-width:1.00000048;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000048;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 292.35297,526.18548 3,0 0,3"
+ id="path8226"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccc" />
+ <path
+ sodipodi:nodetypes="ccc"
+ inkscape:connector-curvature="0"
+ id="path8212"
+ d="m 289.35297,534.18549 -2,0 0,-2"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#808080;stroke-width:1.00000048;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000048;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 289.35297,535.18549 -3,0 0,-3"
+ id="path8214"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccc" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#808080;stroke-width:1.00000048;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
+ d="m 287.35297,529.18548 0,-2 2,0"
+ id="path8248"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccc" />
+ <path
+ sodipodi:nodetypes="ccc"
+ inkscape:connector-curvature="0"
+ id="path8204"
+ d="m 286.35297,529.18548 0,-3 3,0"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000048;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_zoom_in-24.svg b/pixmaps/src/gwy_zoom_in-24.svg
new file mode 100644
index 0000000..5f9562d
--- /dev/null
+++ b/pixmaps/src/gwy_zoom_in-24.svg
@@ -0,0 +1,271 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8272"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_zoom_in-24.svg">
+ <defs
+ id="defs8274">
+ <linearGradient
+ id="linearGradient4270">
+ <stop
+ style="stop-color:#3c98f4;stop-opacity:0.12156863"
+ offset="0"
+ id="stop4272" />
+ <stop
+ style="stop-color:#f1f5fb;stop-opacity:0.12156863"
+ offset="1"
+ id="stop4274" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4198">
+ <stop
+ id="stop4200-0"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:0.39215687" />
+ <stop
+ id="stop4202"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:0.3137255" />
+ </linearGradient>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4782-7-2">
+ <circle
+ style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="circle4784-1-2"
+ cx="276.29214"
+ cy="151.18121"
+ r="19.066629" />
+ </clipPath>
+ <linearGradient
+ gradientUnits="userSpaceOnUse"
+ y2="361.22473"
+ x2="272.91217"
+ y1="247.92804"
+ x1="207.50029"
+ id="linearGradient4146-6-8"
+ xlink:href="#linearGradient4270" />
+ <filter
+ height="1.1263148"
+ y="-0.063157417"
+ width="1.1142865"
+ x="-0.057143249"
+ id="filter4238-9-3"
+ style="color-interpolation-filters:sRGB">
+ <feGaussianBlur
+ id="feGaussianBlur4240-4-6"
+ stdDeviation="2.4600469" />
+ </filter>
+ <linearGradient
+ gradientUnits="userSpaceOnUse"
+ y2="312.29819"
+ x2="227.00648"
+ y1="288.19104"
+ x1="214.93521"
+ id="linearGradient4204-9-1"
+ xlink:href="#linearGradient4198" />
+ <filter
+ height="1.025263"
+ y="-0.012631484"
+ width="1.0228573"
+ x="-0.011428649"
+ id="filter4254-1-3"
+ style="color-interpolation-filters:sRGB">
+ <feGaussianBlur
+ id="feGaussianBlur4256-7-1"
+ stdDeviation="0.49200938" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ style="color-interpolation-filters:sRGB"
+ id="filter18492"
+ x="-0.047411256"
+ width="1.0948225"
+ y="-0.04860355"
+ height="1.0972071">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.42995752"
+ id="feGaussianBlur18494" />
+ </filter>
+ <linearGradient
+ gradientTransform="translate(-82.68732,-0.17665003)"
+ inkscape:collect="always"
+ xlink:href="#linearGradient12587-6"
+ id="linearGradient12593-3"
+ x1="363.08881"
+ y1="538.68573"
+ x2="365.21747"
+ y2="540.84064"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient12587-6">
+ <stop
+ style="stop-color:#6daa34;stop-opacity:1"
+ offset="0"
+ id="stop12589-7" />
+ <stop
+ id="stop13669-5"
+ offset="0.5"
+ style="stop-color:#87c74a;stop-opacity:1" />
+ <stop
+ style="stop-color:#6daa34;stop-opacity:1"
+ offset="1"
+ id="stop12591-3" />
+ </linearGradient>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="64.041113"
+ inkscape:cx="-0.59400989"
+ inkscape:cy="15.694226"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ showguides="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8277">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-276.85299,-520.68522)">
+ <g
+ id="g18446"
+ transform="translate(-80.972697,-31.419635)"
+ style="opacity:0.5;filter:url(#filter18492)">
+ <path
+ inkscape:connector-curvature="0"
+ id="path18369"
+ d="m 363.68784,568.4473 -5.08846,5.03989 c -0.0998,0.0989 -0.11276,0.3176 -0.0177,0.42101 l 1.80326,1.96183 c 0.095,0.10341 0.32123,0.11658 0.42097,0.0177 l 5.08846,-5.0399 z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.99607843"
+ sodipodi:nodetypes="csssscc" />
+ <circle
+ transform="matrix(-0.16007054,0.98710558,-0.98710558,-0.16007054,0,0)"
+ cx="496.39133"
+ cy="-457.18619"
+ r="8.4484291"
+ id="circle18383"
+ style="opacity:1;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+ <path
+ inkscape:connector-curvature="0"
+ id="path4717-0-5"
+ d="m 283.52763,535.28367 -5.08846,5.03989 c -0.0998,0.0989 -0.11276,0.3176 -0.0177,0.42102 l 0.90163,0.98091 0.90162,0.98091 c 0.095,0.10341 0.32124,0.11658 0.42098,0.0177 l 5.08846,-5.0399 -1.10326,-1.20027 z"
+ style="fill:url(#linearGradient12593-3);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.30000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="csscssccc" />
+ <g
+ id="g18291"
+ transform="matrix(0.91094965,0,0,0.91094965,-62.437764,50.321472)">
+ <g
+ id="g4751-3"
+ clip-path="url(#clipPath4782-7-2)"
+ transform="matrix(-0.40789887,0.26719843,-0.26719843,-0.40789887,540.73338,515.16801)">
+ <path
+ id="path4532-9"
+ style="fill:#ffffff;stroke:#868789;stroke-width:1.4453578;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none"
+ d="m 276.3071,132.25651 a 21.406287,18.906167 0 0 1 21.40628,18.90617 21.406287,18.906167 0 1 1 -21.40628,-18.90617 z"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ id="g4449-8"
+ transform="matrix(-0.02114565,0.13039867,-0.13039867,-0.02114565,432.9912,502.16397)">
+ <circle
+ cx="242.94168"
+ cy="308.38486"
+ r="70.205605"
+ id="path4138-5"
+ style="opacity:1;fill:url(#linearGradient4146-6-8);fill-opacity:1;stroke:#505050;stroke-width:12.46485138;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4138-7-0-6"
+ d="m 228.98386,281.59914 c -19.82968,23.31175 -33.58074,74.72281 -44.4409,50.95241 -3.08421,-7.44468 -4.78632,-15.60691 -4.78632,-24.16669 0,-34.89614 28.2889,-63.18505 63.18504,-63.18505 13.77337,0 26.51744,4.40699 36.89904,11.88781 15.92115,11.47255 -31.02718,1.19977 -50.85686,24.51152 z"
+ style="opacity:1;fill:#ffffff;fill-opacity:0.42452829;stroke:none;stroke-width:5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter4238-9-3)" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4138-7-1"
+ d="m 228.98386,281.59914 c -19.82968,23.31175 -33.58074,74.72281 -44.4409,50.95241 -3.08421,-7.44468 -4.78632,-15.60691 -4.78632,-24.16669 0,-34.89614 28.2889,-63.18505 63.18504,-63.18505 13.77337,0 26.51744,4.40699 36.89904,11.88781 15.92115,11.47255 -31.02718,1.19977 -50.85686,24.51152 z"
+ style="opacity:1;fill:url(#linearGradient4204-9-1);fill-opacity:1;stroke:none;stroke-width:5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter4254-1-3)" />
+ </g>
+ </g>
+ <g
+ id="g8108">
+ <path
+ sodipodi:nodetypes="cc"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000048;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 294.85297,530.18549 -8.00001,0"
+ id="path8234"
+ inkscape:connector-curvature="0" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path8115"
+ d="m 294.85297,531.18549 -8.00001,0"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000048;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+ <g
+ id="g8112"
+ transform="matrix(0,1,-1,0,821.53845,239.83252)">
+ <path
+ inkscape:connector-curvature="0"
+ id="path8114"
+ d="m 294.85297,530.18549 -8.00001,0"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000048;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000048;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 294.85297,531.18549 -8.00001,0"
+ id="path8116"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ </g>
+ </g>
+</svg>
diff --git a/pixmaps/src/gwy_zoom_out-24.svg b/pixmaps/src/gwy_zoom_out-24.svg
new file mode 100644
index 0000000..423ab93
--- /dev/null
+++ b/pixmaps/src/gwy_zoom_out-24.svg
@@ -0,0 +1,251 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="24"
+ height="24"
+ viewBox="0 0 24 24"
+ id="svg8272"
+ version="1.1"
+ inkscape:version="0.92.1 r15371"
+ sodipodi:docname="gwy_zoom_out-24.svg">
+ <defs
+ id="defs8274">
+ <linearGradient
+ id="linearGradient4270">
+ <stop
+ style="stop-color:#3c98f4;stop-opacity:0.12156863"
+ offset="0"
+ id="stop4272" />
+ <stop
+ style="stop-color:#f1f5fb;stop-opacity:0.12156863"
+ offset="1"
+ id="stop4274" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4198">
+ <stop
+ id="stop4200-0"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:0.39215687" />
+ <stop
+ id="stop4202"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:0.3137255" />
+ </linearGradient>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4782-7-2">
+ <circle
+ style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="circle4784-1-2"
+ cx="276.29214"
+ cy="151.18121"
+ r="19.066629" />
+ </clipPath>
+ <linearGradient
+ gradientUnits="userSpaceOnUse"
+ y2="361.22473"
+ x2="272.91217"
+ y1="247.92804"
+ x1="207.50029"
+ id="linearGradient4146-6-8"
+ xlink:href="#linearGradient4270" />
+ <filter
+ height="1.1263148"
+ y="-0.063157417"
+ width="1.1142865"
+ x="-0.057143249"
+ id="filter4238-9-3"
+ style="color-interpolation-filters:sRGB">
+ <feGaussianBlur
+ id="feGaussianBlur4240-4-6"
+ stdDeviation="2.4600469" />
+ </filter>
+ <linearGradient
+ gradientUnits="userSpaceOnUse"
+ y2="312.29819"
+ x2="227.00648"
+ y1="288.19104"
+ x1="214.93521"
+ id="linearGradient4204-9-1"
+ xlink:href="#linearGradient4198" />
+ <filter
+ height="1.025263"
+ y="-0.012631484"
+ width="1.0228573"
+ x="-0.011428649"
+ id="filter4254-1-3"
+ style="color-interpolation-filters:sRGB">
+ <feGaussianBlur
+ id="feGaussianBlur4256-7-1"
+ stdDeviation="0.49200938" />
+ </filter>
+ <filter
+ inkscape:collect="always"
+ style="color-interpolation-filters:sRGB"
+ id="filter18492"
+ x="-0.047411256"
+ width="1.0948225"
+ y="-0.04860355"
+ height="1.0972071">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.42995752"
+ id="feGaussianBlur18494" />
+ </filter>
+ <linearGradient
+ gradientTransform="translate(-82.68732,-0.17665003)"
+ inkscape:collect="always"
+ xlink:href="#linearGradient12587-6"
+ id="linearGradient12593-3"
+ x1="363.08881"
+ y1="538.68573"
+ x2="365.21747"
+ y2="540.84064"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient12587-6">
+ <stop
+ style="stop-color:#6daa34;stop-opacity:1"
+ offset="0"
+ id="stop12589-7" />
+ <stop
+ id="stop13669-5"
+ offset="0.5"
+ style="stop-color:#87c74a;stop-opacity:1" />
+ <stop
+ style="stop-color:#6daa34;stop-opacity:1"
+ offset="1"
+ id="stop12591-3" />
+ </linearGradient>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="93.824886"
+ inkscape:cx="-0.67246337"
+ inkscape:cy="12.327098"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1px"
+ originx="0"
+ originy="0"
+ dotted="false"
+ snapvisiblegridlinesonly="false"
+ spacingx="1.0"
+ spacingy="1.0"
+ enabled="true"
+ visible="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata8277">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-276.85299,-520.68522)">
+ <g
+ id="g18446"
+ transform="translate(-80.972697,-31.419635)"
+ style="opacity:0.5;filter:url(#filter18492)">
+ <path
+ inkscape:connector-curvature="0"
+ id="path18369"
+ d="m 363.68784,568.4473 -5.08846,5.03989 c -0.0998,0.0989 -0.11276,0.3176 -0.0177,0.42101 l 1.80326,1.96183 c 0.095,0.10341 0.32123,0.11658 0.42097,0.0177 l 5.08846,-5.0399 z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.99607843"
+ sodipodi:nodetypes="csssscc" />
+ <circle
+ transform="matrix(-0.16007054,0.98710558,-0.98710558,-0.16007054,0,0)"
+ cx="496.39133"
+ cy="-457.18619"
+ r="8.4484291"
+ id="circle18383"
+ style="opacity:1;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+ <path
+ inkscape:connector-curvature="0"
+ id="path4717-0-5"
+ d="m 283.52763,535.28367 -5.08846,5.03989 c -0.0998,0.0989 -0.11276,0.3176 -0.0177,0.42102 l 0.90163,0.98091 0.90162,0.98091 c 0.095,0.10341 0.32124,0.11658 0.42098,0.0177 l 5.08846,-5.0399 -1.10326,-1.20027 z"
+ style="fill:url(#linearGradient12593-3);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.30000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="csscssccc" />
+ <g
+ id="g18291"
+ transform="matrix(0.91094965,0,0,0.91094965,-62.437764,50.321472)">
+ <g
+ id="g4751-3"
+ clip-path="url(#clipPath4782-7-2)"
+ transform="matrix(-0.40789887,0.26719843,-0.26719843,-0.40789887,540.73338,515.16801)">
+ <path
+ id="path4532-9"
+ style="fill:#ffffff;stroke:#868789;stroke-width:1.4453578;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none"
+ d="m 276.3071,132.25651 a 21.406287,18.906167 0 0 1 21.40628,18.90617 21.406287,18.906167 0 1 1 -21.40628,-18.90617 z"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ id="g4449-8"
+ transform="matrix(-0.02114565,0.13039867,-0.13039867,-0.02114565,432.9912,502.16397)">
+ <circle
+ cx="242.94168"
+ cy="308.38486"
+ r="70.205605"
+ id="path4138-5"
+ style="opacity:1;fill:url(#linearGradient4146-6-8);fill-opacity:1;stroke:#505050;stroke-width:12.46485138;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4138-7-0-6"
+ d="m 228.98386,281.59914 c -19.82968,23.31175 -33.58074,74.72281 -44.4409,50.95241 -3.08421,-7.44468 -4.78632,-15.60691 -4.78632,-24.16669 0,-34.89614 28.2889,-63.18505 63.18504,-63.18505 13.77337,0 26.51744,4.40699 36.89904,11.88781 15.92115,11.47255 -31.02718,1.19977 -50.85686,24.51152 z"
+ style="opacity:1;fill:#ffffff;fill-opacity:0.42452829;stroke:none;stroke-width:5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter4238-9-3)" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4138-7-1"
+ d="m 228.98386,281.59914 c -19.82968,23.31175 -33.58074,74.72281 -44.4409,50.95241 -3.08421,-7.44468 -4.78632,-15.60691 -4.78632,-24.16669 0,-34.89614 28.2889,-63.18505 63.18504,-63.18505 13.77337,0 26.51744,4.40699 36.89904,11.88781 15.92115,11.47255 -31.02718,1.19977 -50.85686,24.51152 z"
+ style="opacity:1;fill:url(#linearGradient4204-9-1);fill-opacity:1;stroke:none;stroke-width:5;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;filter:url(#filter4254-1-3)" />
+ </g>
+ </g>
+ <path
+ inkscape:connector-curvature="0"
+ id="path8234"
+ d="m 294.85297,530.18549 -8.00001,0"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000048;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000048;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 294.85297,531.18549 -8.00001,0"
+ id="path8115"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ </g>
+</svg>
diff --git a/plugins/Makefile.in b/plugins/Makefile.in
index 344ec9f..ce287ea 100644
--- a/plugins/Makefile.in
+++ b/plugins/Makefile.in
@@ -229,10 +229,7 @@ EPYDOC = @EPYDOC@
EXEEXT = @EXEEXT@
EXR_CFLAGS = @EXR_CFLAGS@
EXR_LIBS = @EXR_LIBS@
-FFTW3_1_CFLAGS = @FFTW3_1_CFLAGS@
-FFTW3_1_LIBS = @FFTW3_1_LIBS@
FFTW3_CFLAGS = @FFTW3_CFLAGS@
-FFTW3_DEPENDENCY = @FFTW3_DEPENDENCY@
FFTW3_LIBS = @FFTW3_LIBS@
FGREP = @FGREP@
GCONFTOOL = @GCONFTOOL@
@@ -242,6 +239,8 @@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
GLIBC21 = @GLIBC21@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GMODULE_CFLAGS = @GMODULE_CFLAGS@
GMODULE_LIBS = @GMODULE_LIBS@
GMSGFMT = @GMSGFMT@
@@ -266,7 +265,9 @@ GTK_MAC_LIBS = @GTK_MAC_LIBS@
GWY_VERSION_MAJOR = @GWY_VERSION_MAJOR@
GWY_VERSION_MINOR = @GWY_VERSION_MINOR@
GWY_VERSION_STRING = @GWY_VERSION_STRING@
+HDRIMAGE_EXTRA_CFLAGS = @HDRIMAGE_EXTRA_CFLAGS@
HTML_DIR = @HTML_DIR@
+INKSCAPE = @INKSCAPE@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -324,6 +325,7 @@ PASCAL = @PASCAL@
PATH_SEPARATOR = @PATH_SEPARATOR@
PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
+PNGCRUSH = @PNGCRUSH@
PNG_CFLAGS = @PNG_CFLAGS@
PNG_LIBS = @PNG_LIBS@
POD2MAN = @POD2MAN@
@@ -332,17 +334,13 @@ PYGTK_CFLAGS = @PYGTK_CFLAGS@
PYGTK_CODEGENDIR = @PYGTK_CODEGENDIR@
PYGTK_LIBS = @PYGTK_LIBS@
PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
PYTHON_EXTRA_CFLAGS = @PYTHON_EXTRA_CFLAGS@
PYTHON_INCLUDES = @PYTHON_INCLUDES@
-PYTHON_LIBS = @PYTHON_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
PYTHON_PLATFORM = @PYTHON_PLATFORM@
PYTHON_PREFIX = @PYTHON_PREFIX@
-PYTHON_SYSCFG_BASECFLAGS = @PYTHON_SYSCFG_BASECFLAGS@
-PYTHON_SYSCFG_CCSHARED = @PYTHON_SYSCFG_CCSHARED@
-PYTHON_SYSCFG_LDFLAGS = @PYTHON_SYSCFG_LDFLAGS@
-PYTHON_SYSCFG_LIBDIR = @PYTHON_SYSCFG_LIBDIR@
-PYTHON_SYSCFG_LINKFORSHARED = @PYTHON_SYSCFG_LINKFORSHARED@
PYTHON_VERSION = @PYTHON_VERSION@
RANLIB = @RANLIB@
RUBY = @RUBY@
diff --git a/plugins/file/Makefile.in b/plugins/file/Makefile.in
index 489884f..2cceb85 100644
--- a/plugins/file/Makefile.in
+++ b/plugins/file/Makefile.in
@@ -220,10 +220,7 @@ EPYDOC = @EPYDOC@
EXEEXT = @EXEEXT@
EXR_CFLAGS = @EXR_CFLAGS@
EXR_LIBS = @EXR_LIBS@
-FFTW3_1_CFLAGS = @FFTW3_1_CFLAGS@
-FFTW3_1_LIBS = @FFTW3_1_LIBS@
FFTW3_CFLAGS = @FFTW3_CFLAGS@
-FFTW3_DEPENDENCY = @FFTW3_DEPENDENCY@
FFTW3_LIBS = @FFTW3_LIBS@
FGREP = @FGREP@
GCONFTOOL = @GCONFTOOL@
@@ -233,6 +230,8 @@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
GLIBC21 = @GLIBC21@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GMODULE_CFLAGS = @GMODULE_CFLAGS@
GMODULE_LIBS = @GMODULE_LIBS@
GMSGFMT = @GMSGFMT@
@@ -257,7 +256,9 @@ GTK_MAC_LIBS = @GTK_MAC_LIBS@
GWY_VERSION_MAJOR = @GWY_VERSION_MAJOR@
GWY_VERSION_MINOR = @GWY_VERSION_MINOR@
GWY_VERSION_STRING = @GWY_VERSION_STRING@
+HDRIMAGE_EXTRA_CFLAGS = @HDRIMAGE_EXTRA_CFLAGS@
HTML_DIR = @HTML_DIR@
+INKSCAPE = @INKSCAPE@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -315,6 +316,7 @@ PASCAL = @PASCAL@
PATH_SEPARATOR = @PATH_SEPARATOR@
PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
+PNGCRUSH = @PNGCRUSH@
PNG_CFLAGS = @PNG_CFLAGS@
PNG_LIBS = @PNG_LIBS@
POD2MAN = @POD2MAN@
@@ -323,17 +325,13 @@ PYGTK_CFLAGS = @PYGTK_CFLAGS@
PYGTK_CODEGENDIR = @PYGTK_CODEGENDIR@
PYGTK_LIBS = @PYGTK_LIBS@
PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
PYTHON_EXTRA_CFLAGS = @PYTHON_EXTRA_CFLAGS@
PYTHON_INCLUDES = @PYTHON_INCLUDES@
-PYTHON_LIBS = @PYTHON_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
PYTHON_PLATFORM = @PYTHON_PLATFORM@
PYTHON_PREFIX = @PYTHON_PREFIX@
-PYTHON_SYSCFG_BASECFLAGS = @PYTHON_SYSCFG_BASECFLAGS@
-PYTHON_SYSCFG_CCSHARED = @PYTHON_SYSCFG_CCSHARED@
-PYTHON_SYSCFG_LDFLAGS = @PYTHON_SYSCFG_LDFLAGS@
-PYTHON_SYSCFG_LIBDIR = @PYTHON_SYSCFG_LIBDIR@
-PYTHON_SYSCFG_LINKFORSHARED = @PYTHON_SYSCFG_LINKFORSHARED@
PYTHON_VERSION = @PYTHON_VERSION@
RANLIB = @RANLIB@
RUBY = @RUBY@
diff --git a/plugins/process/Makefile.in b/plugins/process/Makefile.in
index 70d7e5c..1561dda 100644
--- a/plugins/process/Makefile.in
+++ b/plugins/process/Makefile.in
@@ -232,10 +232,7 @@ EPYDOC = @EPYDOC@
EXEEXT = @EXEEXT@
EXR_CFLAGS = @EXR_CFLAGS@
EXR_LIBS = @EXR_LIBS@
-FFTW3_1_CFLAGS = @FFTW3_1_CFLAGS@
-FFTW3_1_LIBS = @FFTW3_1_LIBS@
FFTW3_CFLAGS = @FFTW3_CFLAGS@
-FFTW3_DEPENDENCY = @FFTW3_DEPENDENCY@
FFTW3_LIBS = @FFTW3_LIBS@
FGREP = @FGREP@
GCONFTOOL = @GCONFTOOL@
@@ -245,6 +242,8 @@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
GLIBC21 = @GLIBC21@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GMODULE_CFLAGS = @GMODULE_CFLAGS@
GMODULE_LIBS = @GMODULE_LIBS@
GMSGFMT = @GMSGFMT@
@@ -269,7 +268,9 @@ GTK_MAC_LIBS = @GTK_MAC_LIBS@
GWY_VERSION_MAJOR = @GWY_VERSION_MAJOR@
GWY_VERSION_MINOR = @GWY_VERSION_MINOR@
GWY_VERSION_STRING = @GWY_VERSION_STRING@
+HDRIMAGE_EXTRA_CFLAGS = @HDRIMAGE_EXTRA_CFLAGS@
HTML_DIR = @HTML_DIR@
+INKSCAPE = @INKSCAPE@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -327,6 +328,7 @@ PASCAL = @PASCAL@
PATH_SEPARATOR = @PATH_SEPARATOR@
PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
+PNGCRUSH = @PNGCRUSH@
PNG_CFLAGS = @PNG_CFLAGS@
PNG_LIBS = @PNG_LIBS@
POD2MAN = @POD2MAN@
@@ -335,17 +337,13 @@ PYGTK_CFLAGS = @PYGTK_CFLAGS@
PYGTK_CODEGENDIR = @PYGTK_CODEGENDIR@
PYGTK_LIBS = @PYGTK_LIBS@
PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
PYTHON_EXTRA_CFLAGS = @PYTHON_EXTRA_CFLAGS@
PYTHON_INCLUDES = @PYTHON_INCLUDES@
-PYTHON_LIBS = @PYTHON_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
PYTHON_PLATFORM = @PYTHON_PLATFORM@
PYTHON_PREFIX = @PYTHON_PREFIX@
-PYTHON_SYSCFG_BASECFLAGS = @PYTHON_SYSCFG_BASECFLAGS@
-PYTHON_SYSCFG_CCSHARED = @PYTHON_SYSCFG_CCSHARED@
-PYTHON_SYSCFG_LDFLAGS = @PYTHON_SYSCFG_LDFLAGS@
-PYTHON_SYSCFG_LIBDIR = @PYTHON_SYSCFG_LIBDIR@
-PYTHON_SYSCFG_LINKFORSHARED = @PYTHON_SYSCFG_LINKFORSHARED@
PYTHON_VERSION = @PYTHON_VERSION@
RANLIB = @RANLIB@
RUBY = @RUBY@
diff --git a/po/LINGUAS b/po/LINGUAS
index 26dc04a..a9bda5c 100644
--- a/po/LINGUAS
+++ b/po/LINGUAS
@@ -1,5 +1,5 @@
# Set of available languages.
# The following generated part is updated by running utils/update-langs.py
# @@@ GENERATED LANG LINGUAS BEGIN @@@
-cs de en_GB fr it ko ru es
+cs de en_GB fr it ko pt_BR ru es
# @@@ GENERATED LANG LINGUAS END @@@
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 664569c..2a89315 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -91,6 +91,7 @@ modules/file/burleigh_exp.c
modules/file/codevfile.c
modules/file/createc.c
modules/file/csmfile.c
+modules/file/dektakvca.c
modules/file/dektakxml.c
modules/file/dimensionfile.c
modules/file/dm3file.c
@@ -199,6 +200,7 @@ modules/file/wsffile.c
modules/file/wsxmfile.c
modules/file/xyzexport.c
modules/file/zeiss.c
+modules/file/zeisslsm.c
modules/file/zemax.c
modules/graph/graph_align.c
modules/graph/graph_cd.c
@@ -213,6 +215,7 @@ modules/graph/graph_fit.c
modules/graph/graph_level.c
modules/graph/graph_logscale.c
modules/graph/graph_peaks.c
+modules/graph/graph_stats.c
modules/layer/axis.c
modules/layer/ellipse.c
modules/layer/lattice.c
@@ -259,6 +262,7 @@ modules/process/fft_filter_1d.c
modules/process/fft_filter_2d.c
modules/process/fft_profile.c
modules/process/fft_synth.c
+modules/process/fibre_synth.c
modules/process/fit-shape.c
modules/process/flatten_base.c
modules/process/fraccor.c
@@ -289,12 +293,18 @@ modules/process/mark_with.c
modules/process/mask_distribute.c
modules/process/mask_edt.c
modules/process/mask_morph.c
+modules/process/mask_noisify.c
modules/process/maskcor.c
modules/process/maskops.c
modules/process/mcrop.c
modules/process/measure_lattice.c
modules/process/median-bg.c
modules/process/merge.c
+modules/process/mfm_current.c
+modules/process/mfm_field.c
+modules/process/mfm_findshift.c
+modules/process/mfm_parallel.c
+modules/process/mfm_shift.c
modules/process/nanoindent_adjust.c
modules/process/neural.c
modules/process/noise_synth.c
@@ -302,11 +312,15 @@ modules/process/obj_synth.c
modules/process/otsu_threshold.c
modules/process/outliers.c
modules/process/pat_synth.c
+modules/process/phase_synth.c
modules/process/pid.c
modules/process/polydistort.c
modules/process/polylevel.c
modules/process/presentationops.c
+modules/process/preview.h
modules/process/psdf_logphi.c
+modules/process/psf-fit.c
+modules/process/psf.c
modules/process/rank.c
modules/process/rotate.c
modules/process/scale.c
@@ -315,6 +329,7 @@ modules/process/semsim.c
modules/process/shade.c
modules/process/slope_dist.c
modules/process/sphere-revolve.c
+modules/process/stitch.c
modules/process/straighten_path.c
modules/process/superresolution.c
modules/process/synth.h
@@ -358,7 +373,9 @@ modules/volume/volume_kmeans.c
modules/volume/volume_kmedians.c
modules/volume/volume_linestat.c
modules/volume/volume_slice.c
+modules/volume/volume_swaxes.c
modules/volume/volume_zcal.c
+modules/volume/volumeops.c
modules/xyz/xyz_drift.c
modules/xyz/xyz_level.c
modules/xyz/xyz_raster.c
diff --git a/po/cs.gmo b/po/cs.gmo
index 525ca10..a936ac0 100644
Binary files a/po/cs.gmo and b/po/cs.gmo differ
diff --git a/po/cs.po b/po/cs.po
index e3be73d..a163934 100644
--- a/po/cs.po
+++ b/po/cs.po
@@ -1,10 +1,10 @@
-# @(#) $Id: cs.po 19260 2016-11-15 08:44:28Z yeti-dn $
+# @(#) $Id: cs.po 20265 2017-08-13 15:11:01Z yeti-dn $
msgid ""
msgstr ""
"Project-Id-Version: Gwyddion\n"
"Report-Msgid-Bugs-To: yeti at gwyddion.net\n"
-"POT-Creation-Date: 2016-11-18 11:05+0100\n"
-"PO-Revision-Date: 2016-11-15 09:44+0100\n"
+"POT-Creation-Date: 2017-08-15 17:48+0200\n"
+"PO-Revision-Date: 2017-08-13 17:10+0200\n"
"Last-Translator: Yeti <yeti at gwyddion.net>\n"
"Language-Team: Czech\n"
"Language: cs\n"
@@ -124,7 +124,8 @@ msgstr "kontaktní: Hertz (paraboloid)"
#: app/data-browser-aux.c:1480 app/data-browser.c:2280 app/data-browser.c:2887
#: app/data-browser.c:3707 app/data-browser.c:3857 app/data-browser.c:4139
#: app/data-browser.c:4504 app/data-browser.c:4590 app/data-browser.c:5016
-#: app/resource-editor.c:366 modules/process/convolution_filter.c:691
+#: app/resource-editor.c:366 modules/file/xyzexport.c:214
+#: modules/process/convolution_filter.c:691
msgid "Untitled"
msgstr "Nepojmenovaný"
@@ -132,97 +133,105 @@ msgstr "Nepojmenovaný"
msgid "Initial residua evaluation..."
msgstr "Počáteční výpočet residua..."
-#: libgwyddion/gwynlfit.c:479 modules/process/fit-shape.c:1632
+#: libgwyddion/gwynlfit.c:479 modules/process/fit-shape.c:1646
msgid "Fitting..."
msgstr "Fitruji..."
-#: libgwyddion/gwynlfitpreset.c:1442 libprocess/gwyprocessenums.c:101
-#: libprocess/gwyshapefitpreset.c:347
+#: libgwyddion/gwynlfitpreset.c:1549 libprocess/gwyprocessenums.c:101
+#: libprocess/gwyshapefitpreset.c:347 modules/process/psf-fit.c:157
msgid "Gaussian"
msgstr "Gaussovka"
-#: libgwyddion/gwynlfitpreset.c:1457
+#: libgwyddion/gwynlfitpreset.c:1564
msgid "Gaussian (PSDF)"
msgstr "Gaussovka (PSDF)"
-#: libgwyddion/gwynlfitpreset.c:1470
+#: libgwyddion/gwynlfitpreset.c:1577
msgid "Gaussian (ACF)"
msgstr "Gaussovka (ACF)"
-#: libgwyddion/gwynlfitpreset.c:1483
+#: libgwyddion/gwynlfitpreset.c:1590
msgid "Gaussian (HHCF)"
msgstr "Gaussovka (HHCF)"
-#: libgwyddion/gwynlfitpreset.c:1496
+#: libgwyddion/gwynlfitpreset.c:1603
msgid "Gaussian (RPSDF)"
msgstr "Gaussovka (RPSDF)"
-#: libgwyddion/gwynlfitpreset.c:1509
+#: libgwyddion/gwynlfitpreset.c:1616
msgid "Two Gaussians (PSDF)"
msgstr "Dvě gaussovky (PSDF)"
-#: libgwyddion/gwynlfitpreset.c:1524 modules/xyz/xyz_drift.c:841
-#: modules/xyz/xyz_drift.c:846 modules/xyz/xyz_drift.c:1819
+#: libgwyddion/gwynlfitpreset.c:1631 modules/xyz/xyz_drift.c:841
+#: modules/xyz/xyz_drift.c:846 modules/xyz/xyz_drift.c:1818
msgid "Exponential"
msgstr "Exponenciála"
-#: libgwyddion/gwynlfitpreset.c:1536
+#: libgwyddion/gwynlfitpreset.c:1643
msgid "Exponential (PSDF)"
msgstr "Exponenciála (PSDF)"
-#: libgwyddion/gwynlfitpreset.c:1549
+#: libgwyddion/gwynlfitpreset.c:1656
msgid "Exponential (ACF)"
msgstr "Exponenciála (ACF)"
-#: libgwyddion/gwynlfitpreset.c:1561
+#: libgwyddion/gwynlfitpreset.c:1668
msgid "Exponential (HHCF)"
msgstr "Exponenciála (HHCF)"
-#: libgwyddion/gwynlfitpreset.c:1574
+#: libgwyddion/gwynlfitpreset.c:1681
msgid "Exponential (RPSDF)"
msgstr "Exponenciála (RPSDF)"
-#: libgwyddion/gwynlfitpreset.c:1588
+#: libgwyddion/gwynlfitpreset.c:1695
+msgid "K-correlated (PSDF)"
+msgstr "K-korelovaná (PSDF)"
+
+#: libgwyddion/gwynlfitpreset.c:1709
msgid "Polynomial (order 0)"
msgstr "Polynom (stupeň 0)"
-#: libgwyddion/gwynlfitpreset.c:1599 modules/xyz/xyz_drift.c:1805
+#: libgwyddion/gwynlfitpreset.c:1720 modules/xyz/xyz_drift.c:1804
msgid "Polynomial (order 1)"
msgstr "Polynom (stupeň 1)"
-#: libgwyddion/gwynlfitpreset.c:1610
+#: libgwyddion/gwynlfitpreset.c:1731
msgid "Polynomial (order 2)"
msgstr "Polynom (stupeň 2)"
-#: libgwyddion/gwynlfitpreset.c:1622
+#: libgwyddion/gwynlfitpreset.c:1743
msgid "Polynomial (order 3)"
msgstr "Polynom (stupeň 3)"
-#: libgwyddion/gwynlfitpreset.c:1635
+#: libgwyddion/gwynlfitpreset.c:1756
msgid "Square wave"
msgstr "Obdélníková vlna"
-#: libgwyddion/gwynlfitpreset.c:1651
+#: libgwyddion/gwynlfitpreset.c:1772
msgid "Parabolic step"
msgstr "Parabolický schod"
-#: libgwyddion/gwynlfitpreset.c:1667
+#: libgwyddion/gwynlfitpreset.c:1788
msgid "Smooth slanted step"
msgstr "Hladký šikmý schod"
-#: libgwyddion/gwynlfitpreset.c:1684
+#: libgwyddion/gwynlfitpreset.c:1805
msgid "Smooth bent step"
msgstr "Hladký ohnutý schod"
-#: libgwyddion/gwynlfitpreset.c:1700
+#: libgwyddion/gwynlfitpreset.c:1821
+msgid "Boltzmann bent step"
+msgstr "Ohnutý Boltzmannův schod"
+
+#: libgwyddion/gwynlfitpreset.c:1837
msgid "Power"
msgstr "Mocnina"
-#: libgwyddion/gwynlfitpreset.c:1712 libprocess/gwyshapefitpreset.c:348
+#: libgwyddion/gwynlfitpreset.c:1849 libprocess/gwyshapefitpreset.c:348
msgid "Lorentzian"
msgstr "Lorentzovka"
-#: libgwyddion/gwynlfitpreset.c:1726
+#: libgwyddion/gwynlfitpreset.c:1863
msgid "Sinc"
msgstr "Sinc"
@@ -243,7 +252,7 @@ msgid "Step height (positive)"
msgstr "Výška schodu (kladného)"
#: libprocess/cdline.c:590 libprocess/cdline.c:599
-#: libgwydgets/gwydgetenums.c:48 modules/process/hough.c:170
+#: libgwydgets/gwydgetenums.c:48 modules/process/hough.c:163
msgid "Line"
msgstr "Čára"
@@ -256,7 +265,7 @@ msgid "Circle (down)"
msgstr "Kružnice (dolní část)"
#: libprocess/cdline.c:608 libprocess/cdline.c:617
-#: libgwydgets/gwygraphareadialog.c:557 modules/process/hough.c:171
+#: libgwydgets/gwygraphareadialog.c:550 modules/process/hough.c:164
msgid "Circle"
msgstr "Kružnice"
@@ -264,237 +273,237 @@ msgstr "Kružnice"
msgid "Circle (up)"
msgstr "Kružnice (horní část)"
-#: libprocess/gwygrainvalue.c:64
+#: libprocess/gwygrainvalue.c:62
msgid "Grain number"
msgstr "Číslo zrna"
-#: libprocess/gwygrainvalue.c:73 modules/process/curvature.c:129
+#: libprocess/gwygrainvalue.c:71 modules/process/curvature.c:128
msgid "Center x position"
msgstr "X-ová poloha středu"
-#: libprocess/gwygrainvalue.c:82 modules/process/curvature.c:130
+#: libprocess/gwygrainvalue.c:80 modules/process/curvature.c:129
msgid "Center y position"
msgstr "Y-ová poloha středu"
-#: libprocess/gwygrainvalue.c:91
+#: libprocess/gwygrainvalue.c:89
msgid "Minimum value"
msgstr "Nejmenší hodnota"
-#: libprocess/gwygrainvalue.c:100
+#: libprocess/gwygrainvalue.c:98
msgid "Maximum value"
msgstr "Největší hodnota"
-#: libprocess/gwygrainvalue.c:109 modules/process/bdep_synth.c:133
-#: modules/tools/filter.c:237
+#: libprocess/gwygrainvalue.c:107 modules/process/bdep_synth.c:133
+#: modules/tools/filter.c:238
msgid "Mean value"
msgstr "Střední hodnota"
-#: libprocess/gwygrainvalue.c:118 modules/tools/filter.c:238
+#: libprocess/gwygrainvalue.c:116 modules/tools/filter.c:239
msgid "Median value"
msgstr "Medián"
-#: libprocess/gwygrainvalue.c:127
+#: libprocess/gwygrainvalue.c:125
msgid "Minimum value on boundary"
msgstr "Nejmenší hodnota na hranici"
-#: libprocess/gwygrainvalue.c:136
+#: libprocess/gwygrainvalue.c:134
msgid "Maximum value on boundary"
msgstr "Největší hodnota na hranici"
-#: libprocess/gwygrainvalue.c:145
+#: libprocess/gwygrainvalue.c:143
msgid "Pixel area"
msgstr "Plocha v pixelech"
-#: libprocess/gwygrainvalue.c:154
+#: libprocess/gwygrainvalue.c:152
msgid "Projected area"
msgstr "Projektovaná plocha"
-#: libprocess/gwygrainvalue.c:163
+#: libprocess/gwygrainvalue.c:161
msgid "Surface area"
msgstr "Plocha povrchu"
-#: libprocess/gwygrainvalue.c:172
+#: libprocess/gwygrainvalue.c:170
msgid "Equivalent square side"
msgstr "Strana ekvivalentního čtverce"
-#: libprocess/gwygrainvalue.c:181
+#: libprocess/gwygrainvalue.c:179
msgid "Equivalent disc radius"
msgstr "Poloměr ekvivalentního kruhu"
-#: libprocess/gwygrainvalue.c:190
+#: libprocess/gwygrainvalue.c:188
msgid "Area above half-height"
msgstr "Plocha nad poloviční výškou"
-#: libprocess/gwygrainvalue.c:199
+#: libprocess/gwygrainvalue.c:197
msgid "Area of convex hull"
msgstr "Plocha konvexního obalu"
#. TRANSLATORS: Grain volume calculated using basis (foot) set to
#. * zero.
-#: libprocess/gwygrainvalue.c:210
+#: libprocess/gwygrainvalue.c:208
msgid "Zero basis volume"
msgstr "Objem – nulová základna"
#. TRANSLATORS: Grain volume calculated using basis (foot) set to the
#. * grain minimum.
-#: libprocess/gwygrainvalue.c:221
+#: libprocess/gwygrainvalue.c:219
msgid "Grain minimum basis volume"
msgstr "Objem – základna minimum zrna"
#. TRANSLATORS: Grain volume calculated using basis (foot) set to the
#. * Laplacian background.
-#: libprocess/gwygrainvalue.c:232
+#: libprocess/gwygrainvalue.c:230
msgid "Laplacian background basis volume"
msgstr "Objem – základna laplaceovské pozadí"
-#: libprocess/gwygrainvalue.c:241
+#: libprocess/gwygrainvalue.c:239
msgid "Projected boundary length"
msgstr "Délka projektované hranice"
-#: libprocess/gwygrainvalue.c:250
+#: libprocess/gwygrainvalue.c:248
msgid "Minimum bounding size"
msgstr "Nejmenší omezující rozměr"
-#: libprocess/gwygrainvalue.c:259
+#: libprocess/gwygrainvalue.c:257
msgid "Minimum bounding direction"
msgstr "Směr největšího rozměru"
-#: libprocess/gwygrainvalue.c:268
+#: libprocess/gwygrainvalue.c:266
msgid "Maximum bounding size"
msgstr "Největší omezující rozměr"
-#: libprocess/gwygrainvalue.c:277
+#: libprocess/gwygrainvalue.c:275
msgid "Maximum bounding direction"
msgstr "Směr nejmenšího rozměru"
-#: libprocess/gwygrainvalue.c:286
+#: libprocess/gwygrainvalue.c:284
msgid "Maximum inscribed disc radius"
msgstr "Poloměr největšího vepsaného disku"
-#: libprocess/gwygrainvalue.c:295
+#: libprocess/gwygrainvalue.c:293
msgid "Maximum inscribed disc center x position"
msgstr "X-ová poloha středu největšího vepsaného disku"
-#: libprocess/gwygrainvalue.c:304
+#: libprocess/gwygrainvalue.c:302
msgid "Maximum inscribed disc center y position"
msgstr "Y-ová poloha středu největšího vepsaného disku"
-#: libprocess/gwygrainvalue.c:313
+#: libprocess/gwygrainvalue.c:311
msgid "Minimum circumcircle radius"
msgstr "Poloměr nejmenší opsané kružnice"
-#: libprocess/gwygrainvalue.c:322
+#: libprocess/gwygrainvalue.c:320
msgid "Minimum circumcircle center x position"
msgstr "X-ová poloha středu nejmenší opsané kružnice"
-#: libprocess/gwygrainvalue.c:331
+#: libprocess/gwygrainvalue.c:329
msgid "Minimum circumcircle center y position"
msgstr "Y-ová poloha středu nejmenší opsané kružnice"
-#: libprocess/gwygrainvalue.c:340
+#: libprocess/gwygrainvalue.c:338
msgid "Mean radius"
msgstr "Střední poloměr"
-#: libprocess/gwygrainvalue.c:349 modules/tools/readvalue.c:319
+#: libprocess/gwygrainvalue.c:347 modules/tools/readvalue.c:322
msgid "Inclination θ"
msgstr "θ sklonu"
-#: libprocess/gwygrainvalue.c:358 modules/tools/readvalue.c:329
+#: libprocess/gwygrainvalue.c:356 modules/tools/readvalue.c:332
msgid "Inclination φ"
msgstr "φ sklonu"
-#: libprocess/gwygrainvalue.c:367
+#: libprocess/gwygrainvalue.c:365
msgid "Curvature center x position"
msgstr "X-ová poloha středu křivosti"
-#: libprocess/gwygrainvalue.c:376
+#: libprocess/gwygrainvalue.c:374
msgid "Curvature center y position"
msgstr "Y-ová poloha středu křivosti"
-#: libprocess/gwygrainvalue.c:385
+#: libprocess/gwygrainvalue.c:383
msgid "Curvature center z value"
msgstr "Hodnota ve středu křivosti"
-#: libprocess/gwygrainvalue.c:394 modules/tools/readvalue.c:344
+#: libprocess/gwygrainvalue.c:392 modules/tools/readvalue.c:347
msgid "Curvature 1"
msgstr "Křivost 1"
-#: libprocess/gwygrainvalue.c:403 modules/tools/readvalue.c:354
+#: libprocess/gwygrainvalue.c:401 modules/tools/readvalue.c:357
msgid "Curvature 2"
msgstr "Křivost 2"
-#: libprocess/gwygrainvalue.c:412
+#: libprocess/gwygrainvalue.c:410
msgid "Curvature angle 1"
msgstr "Směr křivosti 1"
-#: libprocess/gwygrainvalue.c:421
+#: libprocess/gwygrainvalue.c:419
msgid "Curvature angle 2"
msgstr "Směr křivosti 2"
-#: libprocess/gwygrainvalue.c:430
+#: libprocess/gwygrainvalue.c:428
msgid "Major semiaxis of equivalent ellipse"
msgstr "Hlavní poloosa ekvivalentní elipsy"
-#: libprocess/gwygrainvalue.c:439
+#: libprocess/gwygrainvalue.c:437
msgid "Minor semiaxis of equivalent ellipse"
msgstr "Vedlejší poloosa ekvivalentní elipsy"
-#: libprocess/gwygrainvalue.c:448
+#: libprocess/gwygrainvalue.c:446
msgid "Orientation of equivalent ellipse"
msgstr "Orientace ekvivalentní elipsy"
-#: libprocess/gwygrainvalue.c:1120
+#: libprocess/gwygrainvalue.c:1118
msgid "Id"
msgstr "Id"
-#: libprocess/gwygrainvalue.c:1121 modules/graph/graph_peaks.c:156
-#: modules/process/extract_path.c:391 modules/process/wave_synth.c:482
-#: modules/tools/readvalue.c:251
+#: libprocess/gwygrainvalue.c:1119 modules/graph/graph_peaks.c:154
+#: modules/process/extract_path.c:391 modules/process/wave_synth.c:513
+#: modules/tools/readvalue.c:253
msgid "Position"
msgstr "Poloha"
-#: libprocess/gwygrainvalue.c:1122 app/meta.c:411 modules/file/imgexport.c:4625
-#: modules/process/curvature.c:762 modules/tools/level3.c:468
-#: modules/tools/readvalue.c:286
+#: libprocess/gwygrainvalue.c:1120 app/meta.c:411 modules/file/imgexport.c:4573
+#: modules/process/curvature.c:759 modules/tools/level3.c:475
+#: modules/tools/readvalue.c:290
msgid "Value"
msgstr "Hodnota"
-#: libprocess/gwygrainvalue.c:1123
+#: libprocess/gwygrainvalue.c:1121
msgid "Area"
msgstr "Plocha"
-#: libprocess/gwygrainvalue.c:1124 app/data-browser.c:5624 app/toolbox.c:110
+#: libprocess/gwygrainvalue.c:1122 app/data-browser.c:5624 app/toolbox.c:115
msgid "Volume"
msgstr "Objem"
-#: libprocess/gwygrainvalue.c:1125
+#: libprocess/gwygrainvalue.c:1123
msgid "Boundary"
msgstr "Hranice"
-#: libprocess/gwygrainvalue.c:1126 modules/process/pat_synth.c:829
-#: modules/process/pat_synth.c:1131 modules/process/pat_synth.c:1466
-#: modules/tools/linestats.c:171 modules/volume/volume_linestat.c:147
+#: libprocess/gwygrainvalue.c:1124 modules/process/pat_synth.c:830
+#: modules/process/pat_synth.c:1132 modules/process/pat_synth.c:1467
+#: modules/tools/linestats.c:171 modules/volume/volume_linestat.c:149
msgid "Slope"
msgstr "Sklon"
-#: libprocess/gwygrainvalue.c:1127 modules/process/curvature.c:213
-#: modules/process/curvature.c:613
+#: libprocess/gwygrainvalue.c:1125 modules/process/curvature.c:212
+#: modules/process/curvature.c:615
msgid "Curvature"
msgstr "Křivost"
-#: libprocess/gwygrainvalue.c:1128
+#: libprocess/gwygrainvalue.c:1126
msgid "Moment"
msgstr "Moment"
-#: libprocess/gwygrainvalue.c:1132
+#: libprocess/gwygrainvalue.c:1130
msgid "User"
msgstr "Uživatel"
-#: libprocess/gwyprocessenums.c:44
+#: libprocess/gwyprocessenums.c:44 modules/process/preview.h:263
msgid "Union"
msgstr "Sjednocení"
-#: libprocess/gwyprocessenums.c:45
+#: libprocess/gwyprocessenums.c:45 modules/process/preview.h:255
msgid "Intersection"
msgstr "Průnik"
@@ -573,13 +582,13 @@ msgid "Scale and space adaptive"
msgstr "Frekvenčně a lokálně adaptabilní"
#. TRANSLATORS: Interpolation type (AKA nearest neighbour)
-#: libprocess/gwyprocessenums.c:207 modules/file/imgexport.c:3791
-#: modules/xyz/xyz_raster.c:640
+#: libprocess/gwyprocessenums.c:207 modules/file/imgexport.c:3756
+#: modules/xyz/xyz_raster.c:609
msgid "Round"
msgstr "Zaokrouhlení"
-#: libprocess/gwyprocessenums.c:208 modules/file/imgexport.c:3792
-#: modules/xyz/xyz_raster.c:641
+#: libprocess/gwyprocessenums.c:208 modules/file/imgexport.c:3757
+#: modules/xyz/xyz_raster.c:610
msgid "Linear"
msgstr "Lineární"
@@ -667,27 +676,27 @@ msgstr "Použít pouze oblast pod maskou"
msgid "Use entire image (ignore mask)"
msgstr "Ignorovat masku (použít celá data)"
-#: libprocess/gwyprocessenums.c:602
+#: libprocess/gwyprocessenums.c:604
msgid "distance|City-block"
msgstr "Taxikářská"
-#: libprocess/gwyprocessenums.c:603
+#: libprocess/gwyprocessenums.c:605
msgid "distance|Chess"
msgstr "Šachovnicová"
-#: libprocess/gwyprocessenums.c:604
+#: libprocess/gwyprocessenums.c:606
msgid "distance|Octagonal 4,8"
msgstr "Oktagonální 4,8"
-#: libprocess/gwyprocessenums.c:605
+#: libprocess/gwyprocessenums.c:607
msgid "distance|Octagonal 8,4"
msgstr "Oktagonální 8,4"
-#: libprocess/gwyprocessenums.c:606
+#: libprocess/gwyprocessenums.c:608
msgid "distance|Octagonal"
msgstr "Oktagonální"
-#: libprocess/gwyprocessenums.c:607
+#: libprocess/gwyprocessenums.c:609
msgid "distance|Euclidean"
msgstr "Eukleidovská"
@@ -723,11 +732,11 @@ msgstr "Parabolický hrbol"
msgid "Ring"
msgstr "Prstenec"
-#: libprocess/morph_lib.c:169 libprocess/tip.c:1043
+#: libprocess/morph_lib.c:169 libprocess/tip.c:1052
msgid "Dilation..."
msgstr "Dilatace..."
-#: libprocess/morph_lib.c:235 libprocess/tip.c:1164
+#: libprocess/morph_lib.c:235 libprocess/tip.c:1173
msgid "Erosion..."
msgstr "Eroze..."
@@ -760,81 +769,81 @@ msgstr[0] "Bylo nalezeno %d lokální maximum"
msgstr[1] "Byla nalezena %d lokální maxima"
msgstr[2] "Bylo nalezeno %d lokálních maxim"
-#: libprocess/tip.c:422
+#: libprocess/tip.c:431
msgid "Pyramid"
msgstr "Pyramida"
-#: libprocess/tip.c:423 libprocess/tip.c:429 libprocess/tip.c:435
+#: libprocess/tip.c:432 libprocess/tip.c:438 libprocess/tip.c:444
msgid "Pyramidal"
msgstr "Pyramidální"
-#: libprocess/tip.c:428
+#: libprocess/tip.c:437
msgid "Contact"
msgstr "Kontaktní"
-#: libprocess/tip.c:434
+#: libprocess/tip.c:443
msgid "Noncontact"
msgstr "Bezkontaktní"
-#: libprocess/tip.c:440
+#: libprocess/tip.c:449
msgid "Delta function"
msgstr "Delta funkce"
-#: libprocess/tip.c:441
+#: libprocess/tip.c:450
msgid "Analytical"
msgstr "Analytický"
-#: libprocess/tip.c:446
+#: libprocess/tip.c:455 modules/process/fibre_synth.c:259
msgid "Parabola"
msgstr "Parabola"
-#: libprocess/tip.c:447 libprocess/tip.c:453
+#: libprocess/tip.c:456 libprocess/tip.c:462
msgid "Symmetric"
msgstr "Symetrický"
-#: libprocess/tip.c:452
+#: libprocess/tip.c:461
msgid "Cone"
msgstr "Kužel"
-#: libprocess/tip.c:458
+#: libprocess/tip.c:467
msgid "Elliptical parabola"
msgstr "Eliptická parabola"
-#: libprocess/tip.c:459
+#: libprocess/tip.c:468
msgid "Asymmetric"
msgstr "Asymetrický"
-#: libprocess/tip.c:1339 libprocess/tip.c:1367 libprocess/tip.c:1416
-#: libprocess/tip.c:1443
+#: libprocess/tip.c:1348 libprocess/tip.c:1376 libprocess/tip.c:1425
+#: libprocess/tip.c:1452
msgid "Converting fields"
msgstr "Konvertuji pole"
-#: libprocess/tip.c:1349
+#: libprocess/tip.c:1358
msgid "Starting partial estimation"
msgstr "Začínám částečný odhad"
-#: libprocess/tip.c:1426
+#: libprocess/tip.c:1435
msgid "Starting full estimation"
msgstr "Začínám plný odhad"
-#: libprocess/triangulation.c:2085 modules/process/calcoefs_view.c:793
+#: libprocess/triangulation.c:2084 modules/process/calcoefs_view.c:793
#: modules/process/lat_synth.c:1178
msgid "Triangulating..."
msgstr "Trianguluji..."
-#: libgwydgets/gwy3dwindow.c:570
+#: libgwydgets/gwy3dwindow.c:575
msgid "Rotate view (R)"
msgstr "Otáčení pohledu (R)"
-#: libgwydgets/gwy3dwindow.c:575
+#: libgwydgets/gwy3dwindow.c:580
msgid "Scale view as a whole (S)"
msgstr "Škálování celého pohledu (S)"
-#: libgwydgets/gwy3dwindow.c:580
+#: libgwydgets/gwy3dwindow.c:585
msgid "Scale value range (V)"
msgstr "Škálování rozsahu hodnot (V)"
-#: libgwydgets/gwy3dwindow.c:585
+#: libgwydgets/gwy3dwindow.c:590
msgid "Move light source (L)"
msgstr "Posun zdroje světla (L)"
@@ -842,227 +851,286 @@ msgstr "Posun zdroje světla (L)"
msgid "Show full controls"
msgstr "Zobraz kompletní ovládací prvky"
-#: libgwydgets/gwy3dwindow.c:693
+#: libgwydgets/gwy3dwindow.c:691
msgid "Hide full controls"
msgstr "Skryj kompletní ovládací prvky"
-#: libgwydgets/gwy3dwindow.c:709 modules/file/imgexport.c:4796
-#: modules/process/fit-shape.c:461
+#: libgwydgets/gwy3dwindow.c:707 modules/file/imgexport.c:4745
+#: modules/process/fit-shape.c:462
msgid "adjective|Basic"
msgstr "Základní"
-#: libgwydgets/gwy3dwindow.c:714
+#: libgwydgets/gwy3dwindow.c:712
msgid "Light & Material"
msgstr "Světlo a materiál"
-#: libgwydgets/gwy3dwindow.c:719
+#: libgwydgets/gwy3dwindow.c:717
msgid "Labels"
msgstr "Popisky"
-#: libgwydgets/gwy3dwindow.c:828 modules/process/facet_analysis.c:331
-#: modules/process/facet_analysis.c:347 modules/process/shade.c:245
+#: libgwydgets/gwy3dwindow.c:722
+msgid "Colorbar"
+msgstr "Barevná škála"
+
+#: libgwydgets/gwy3dwindow.c:838 modules/process/facet_analysis.c:335
+#: modules/process/facet_analysis.c:351 modules/process/shade.c:253
#: modules/process/tilt.c:223
msgid "φ:"
msgstr "φ:"
-#: libgwydgets/gwy3dwindow.c:828 libgwydgets/gwy3dwindow.c:834
-#: libgwydgets/gwy3dwindow.c:1032 libgwydgets/gwy3dwindow.c:1040
-#: modules/process/facet_analysis.c:375 modules/process/indent_analyze.c:460
-#: modules/process/rotate.c:264 modules/process/shade.c:237
-#: modules/process/shade.c:245 modules/process/tilt.c:211
-#: modules/process/tilt.c:223 modules/process/tip_model.c:234
-#: modules/process/tip_model.c:240 modules/process/unrotate.c:334
+#: libgwydgets/gwy3dwindow.c:838 libgwydgets/gwy3dwindow.c:843
+#: libgwydgets/gwy3dwindow.c:1013 libgwydgets/gwy3dwindow.c:1020
+#: modules/process/correct_affine.c:461 modules/process/facet_analysis.c:238
+#: modules/process/facet_analysis.c:370 modules/process/indent_analyze.c:438
+#: modules/process/measure_lattice.c:381 modules/process/rotate.c:264
+#: modules/process/shade.c:245 modules/process/shade.c:253
+#: modules/process/synth.h:379 modules/process/synth.h:410
+#: modules/process/tilt.c:211 modules/process/tilt.c:223
+#: modules/process/tip_model.c:234 modules/process/tip_model.c:240
+#: modules/process/unrotate.c:334 modules/tools/distance.c:197
+#: modules/tools/readvalue.c:223 modules/tools/stats.c:319
msgid "deg"
msgstr "stupňů"
-#: libgwydgets/gwy3dwindow.c:834 modules/process/facet_analysis.c:330
-#: modules/process/facet_analysis.c:346 modules/process/shade.c:237
+#: libgwydgets/gwy3dwindow.c:843 modules/process/facet_analysis.c:334
+#: modules/process/facet_analysis.c:350 modules/process/shade.c:245
#: modules/process/tilt.c:211
msgid "θ:"
msgstr "θ:"
-#: libgwydgets/gwy3dwindow.c:839 modules/process/cwt.c:151
+#: libgwydgets/gwy3dwindow.c:849 modules/process/cwt.c:151
msgid "_Scale:"
msgstr "Š_kála:"
-#: libgwydgets/gwy3dwindow.c:846
+#: libgwydgets/gwy3dwindow.c:856
msgid "_Value scale:"
msgstr "Škála _hodnot:"
-#: libgwydgets/gwy3dwindow.c:851
+#: libgwydgets/gwy3dwindow.c:862
msgid "Ph_ysical scale:"
msgstr "Fyzické měřítko:"
-#: libgwydgets/gwy3dwindow.c:865
+#: libgwydgets/gwy3dwindow.c:876
msgid "verb|Set"
msgstr "Uložit"
-#: libgwydgets/gwy3dwindow.c:877
+#: libgwydgets/gwy3dwindow.c:886
msgid "Line _width:"
msgstr "Šíř_ka čáry:"
-#: libgwydgets/gwy3dwindow.c:881
+#: libgwydgets/gwy3dwindow.c:886 libgwydgets/gwy3dwindow.c:1194
+#: libgwydgets/gwy3dwindow.c:1204 libgwydgets/gwy3dwindow.c:1235
+#: libgwydgets/gwygraphareadialog.c:157 libgwydgets/gwygraphareadialog.c:173
+#: modules/file/hdrimage.cc:2246 modules/file/hdrimage.cc:2252
+#: modules/file/pixmap.c:820 modules/file/pixmap.c:826
+#: modules/process/angle_dist.c:188 modules/process/angle_dist.c:213
+#: modules/process/col_synth.c:486 modules/process/crosscor.c:252
+#: modules/process/crosscor.c:260 modules/process/crosscor.c:276
+#: modules/process/crosscor.c:284 modules/process/crosscor.c:300
+#: modules/process/crosscor.c:308 modules/process/cwt.c:151
+#: modules/process/dimensions.h:88 modules/process/edge.c:672
+#: modules/process/entropy.c:242 modules/process/extend.c:220
+#: modules/process/extend.c:227 modules/process/extend.c:234
+#: modules/process/extend.c:241 modules/process/facet_analysis.c:362
+#: modules/process/fbm_synth.c:383 modules/process/hough.c:203
+#: modules/process/local_contrast.c:146 modules/process/mark_disconn.c:263
+#: modules/process/mask_morph.c:237 modules/process/median-bg.c:209
+#: modules/process/neural.c:623 modules/process/neural.c:631
+#: modules/process/psdf_logphi.c:276 modules/process/rank.c:188
+#: modules/process/scale.c:237 modules/process/scale.c:246
+#: modules/process/scars.c:353 modules/process/scars.c:361
+#: modules/process/semsim.c:227 modules/process/slope_dist.c:365
+#: modules/process/slope_dist.c:393 modules/process/sphere-revolve.c:346
+#: modules/process/straighten_path.c:278 modules/process/synth.h:280
+#: modules/process/synth.h:501 modules/process/tip_blind.c:334
+#: modules/process/tip_blind.c:342 modules/process/volumize_layers.c:240
+#: modules/process/volumize_layers.c:245 modules/process/volumize_layers.c:250
+#: modules/process/wpour_mark.c:320 modules/tools/filter.c:291
+#: modules/tools/level3.c:244 modules/tools/maskedit.c:528
+#: modules/tools/maskedit.c:629 modules/tools/pathlevel.c:256
+#: modules/tools/profile.c:377 modules/tools/profile.c:503
+#: modules/tools/readvalue.c:222 modules/tools/readvalue.c:378
+#: modules/tools/roughness.c:868 modules/volume/volume_slice.c:446
+#: modules/volume/volume_slice.c:469 modules/volume/volume_slice.c:492
+#: modules/xyz/xyz_drift.c:738 modules/xyz/xyz_drift.c:753
+#: modules/xyz/xyz_raster.c:382 modules/xyz/xyz_raster.c:388
+msgid "px"
+msgstr "px"
+
+#: libgwydgets/gwy3dwindow.c:891
msgid "Show _axes"
msgstr "Zobrazuj _osy"
-#: libgwydgets/gwy3dwindow.c:890
+#: libgwydgets/gwy3dwindow.c:900
msgid "Show _labels"
msgstr "Zobrazuj _popisky"
-#: libgwydgets/gwy3dwindow.c:899
-msgid "Show false _colorbar"
-msgstr "Zobrazovat _barevnou škálu"
-
-#: libgwydgets/gwy3dwindow.c:908
+#: libgwydgets/gwy3dwindow.c:909
msgid "_Orthographic projection"
msgstr "_Ortografická projekce"
-#: libgwydgets/gwy3dwindow.c:917
+#: libgwydgets/gwy3dwindow.c:918
msgid "_Hide masked"
msgstr "_Skrýt maskovaná"
-#: libgwydgets/gwy3dwindow.c:933
+#: libgwydgets/gwy3dwindow.c:934
msgid "_Lighting"
msgstr "_Osvětlení"
-#: libgwydgets/gwy3dwindow.c:934
+#: libgwydgets/gwy3dwindow.c:935
msgid "_Gradient"
msgstr "_Gradient"
-#: libgwydgets/gwy3dwindow.c:935
+#: libgwydgets/gwy3dwindow.c:936
msgid "_Overlay"
msgstr "_Překrytí"
-#: libgwydgets/gwy3dwindow.c:936
+#: libgwydgets/gwy3dwindow.c:937
msgid "_Overlay - no light"
msgstr "_Překrytí, bez světla"
-#: libgwydgets/gwy3dwindow.c:1009
+#: libgwydgets/gwy3dwindow.c:992
msgid "_Material:"
msgstr "_Materiál:"
-#: libgwydgets/gwy3dwindow.c:1032
+#: libgwydgets/gwy3dwindow.c:1013
msgid "_Light φ:"
msgstr "φ _světla:"
-#: libgwydgets/gwy3dwindow.c:1040
+#: libgwydgets/gwy3dwindow.c:1020
msgid "L_ight θ:"
msgstr "θ s_větla:"
-#: libgwydgets/gwy3dwindow.c:1070 libgwydgets/gwy3dwindow.c:1240
-#: app/toolbox-editor.c:215 modules/file/hdrimage.cc:2213
-#: modules/file/imgexport.c:4760 modules/file/pixmap.c:789
+#: libgwydgets/gwy3dwindow.c:1052 libgwydgets/gwy3dwindow.c:1243
+#: app/toolbox-editor.c:216 modules/file/hdrimage.cc:2213
+#: modules/file/imgexport.c:4708 modules/file/pixmap.c:789
#: modules/file/rawfile.c:424 modules/process/angle_dist.c:172
#: modules/process/bdep_synth.c:341 modules/process/calcoefs_new.c:371
-#: modules/process/calibrate.c:391 modules/process/col_synth.c:392
-#: modules/process/correct_affine.c:301 modules/process/curvature.c:615
-#: modules/process/cwt.c:135 modules/process/deposit_synth.c:349
+#: modules/process/calibrate.c:383 modules/process/col_synth.c:392
+#: modules/process/correct_affine.c:346 modules/process/curvature.c:617
+#: modules/process/cwt.c:135 modules/process/deposit_synth.c:350
#: modules/process/diff_synth.c:411 modules/process/domain_synth.c:354
#: modules/process/drift.c:245 modules/process/dwt.c:166
#: modules/process/dwtanisotropy.c:184 modules/process/edge.c:638
#: modules/process/extend.c:192 modules/process/facet-level.c:193
-#: modules/process/facet_analysis.c:271 modules/process/fbm_synth.c:303
+#: modules/process/facet_analysis.c:275 modules/process/fbm_synth.c:303
#: modules/process/fft.c:336 modules/process/fft_filter_2d.c:417
-#: modules/process/fft_synth.c:341 modules/process/fractal.c:231
-#: modules/process/grain_edge.c:213 modules/process/grain_mark.c:247
-#: modules/process/grain_wshed.c:167 modules/process/hough.c:179
-#: modules/process/lat_synth.c:567 modules/process/latsim.c:159
-#: modules/process/level.c:245 modules/process/linematch.c:804
-#: modules/process/lno_synth.c:433 modules/process/local_contrast.c:130
-#: modules/process/logistic.c:234 modules/process/mark_disconn.c:208
-#: modules/process/mask_distribute.c:152 modules/process/measure_lattice.c:256
-#: modules/process/median-bg.c:180 modules/process/noise_synth.c:336
-#: modules/process/obj_synth.c:441 modules/process/pat_synth.c:385
-#: modules/process/pid.c:199 modules/process/polydistort.c:210
-#: modules/process/polylevel.c:373 modules/process/psdf_logphi.c:249
-#: modules/process/rank.c:158 modules/process/rotate.c:243
-#: modules/process/scale.c:196 modules/process/scars.c:298
-#: modules/process/semsim.c:211 modules/process/shade.c:208
-#: modules/process/slope_dist.c:276 modules/process/sphere-revolve.c:218
-#: modules/process/straighten_path.c:249 modules/process/tilt.c:161
-#: modules/process/tip_model.c:169 modules/process/unrotate.c:220
-#: modules/process/volumize_layers.c:221 modules/process/wave_synth.c:349
-#: modules/process/wpour_mark.c:278 modules/volume/volume_calibrate.c:370
-#: modules/volume/volume_extract.c:331 modules/volume/volume_kmeans.c:153
-#: modules/volume/volume_kmedians.c:147 modules/volume/volume_linestat.c:292
-#: modules/volume/volume_slice.c:292
+#: modules/process/fft_synth.c:341 modules/process/fibre_synth.c:422
+#: modules/process/fractal.c:228 modules/process/grain_edge.c:212
+#: modules/process/grain_mark.c:246 modules/process/grain_wshed.c:168
+#: modules/process/hough.c:174 modules/process/lat_synth.c:567
+#: modules/process/latsim.c:159 modules/process/level.c:245
+#: modules/process/linematch.c:771 modules/process/lno_synth.c:431
+#: modules/process/local_contrast.c:130 modules/process/logistic.c:234
+#: modules/process/mark_disconn.c:208 modules/process/mask_distribute.c:152
+#: modules/process/measure_lattice.c:246 modules/process/median-bg.c:180
+#: modules/process/mfm_current.c:332 modules/process/mfm_field.c:281
+#: modules/process/mfm_findshift.c:230 modules/process/mfm_parallel.c:333
+#: modules/process/mfm_shift.c:170 modules/process/noise_synth.c:334
+#: modules/process/obj_synth.c:438 modules/process/pat_synth.c:385
+#: modules/process/phase_synth.c:205 modules/process/pid.c:197
+#: modules/process/polydistort.c:210 modules/process/polylevel.c:373
+#: modules/process/psdf_logphi.c:249 modules/process/rank.c:158
+#: modules/process/rotate.c:243 modules/process/scale.c:196
+#: modules/process/scars.c:317 modules/process/semsim.c:211
+#: modules/process/shade.c:210 modules/process/slope_dist.c:275
+#: modules/process/sphere-revolve.c:317 modules/process/straighten_path.c:248
+#: modules/process/tilt.c:161 modules/process/tip_model.c:167
+#: modules/process/unrotate.c:220 modules/process/volumize_layers.c:221
+#: modules/process/wave_synth.c:368 modules/process/wpour_mark.c:278
+#: modules/volume/volume_calibrate.c:370 modules/volume/volume_extract.c:324
+#: modules/volume/volume_kmeans.c:154 modules/volume/volume_kmedians.c:147
+#: modules/volume/volume_linestat.c:297 modules/volume/volume_slice.c:294
msgid "_Reset"
msgstr "_Obnovit"
-#: libgwydgets/gwy3dwindow.c:1142
+#: libgwydgets/gwy3dwindow.c:1141
msgid "X-axis"
msgstr "Osa X"
-#: libgwydgets/gwy3dwindow.c:1143
+#: libgwydgets/gwy3dwindow.c:1142
msgid "Y-axis"
msgstr "Osa Y"
-#: libgwydgets/gwy3dwindow.c:1144
+#: libgwydgets/gwy3dwindow.c:1143
msgid "Minimum z value"
msgstr "Nejmenší hodnota z"
-#: libgwydgets/gwy3dwindow.c:1145
+#: libgwydgets/gwy3dwindow.c:1144
msgid "Maximum z value"
msgstr "Největší hodnota z"
-#: libgwydgets/gwy3dwindow.c:1168 modules/file/imgexport.c:3836
+#: libgwydgets/gwy3dwindow.c:1167 modules/file/imgexport.c:3806
msgid "_Label:"
msgstr "Pop_isek:"
-#: libgwydgets/gwy3dwindow.c:1173
+#: libgwydgets/gwy3dwindow.c:1180
msgid "_Text:"
msgstr "_Text:"
-#: libgwydgets/gwy3dwindow.c:1193
+#: libgwydgets/gwy3dwindow.c:1185
msgid "Move label"
msgstr "Posuň popisek"
-#: libgwydgets/gwy3dwindow.c:1202
+#: libgwydgets/gwy3dwindow.c:1194
msgid "_Horizontally:"
msgstr "_Vodorovně:"
-#: libgwydgets/gwy3dwindow.c:1212
+#: libgwydgets/gwy3dwindow.c:1204
msgid "_Vertically:"
msgstr "_Svisle:"
-#: libgwydgets/gwy3dwindow.c:1220
+#: libgwydgets/gwy3dwindow.c:1212
+msgid "A_ll labels have the same size"
+msgstr "Všechn_y popisky jsou stejně velké"
+
+#: libgwydgets/gwy3dwindow.c:1223
msgid "Scale size _automatically"
msgstr "_Automaticky uprav velikost"
-#: libgwydgets/gwy3dwindow.c:1232 modules/tools/filter.c:290
+#: libgwydgets/gwy3dwindow.c:1235 modules/tools/filter.c:291
msgid "Si_ze:"
msgstr "Veli_kost:"
-#: libgwydgets/gwy3dwindow.c:1232 modules/process/cwt.c:151
-#: modules/process/hough.c:212
-msgid "pixels"
-msgstr "pixelů"
+#: libgwydgets/gwy3dwindow.c:1277
+msgid "Show false _colorbar"
+msgstr "Zobrazovat _barevnou škálu"
+
+#: libgwydgets/gwy3dwindow.c:1286
+msgid "Reserve space for _colorbar"
+msgstr "Ponechat prostor pro _barevnou škálu"
+
+#: libgwydgets/gwy3dwindow.c:1302 modules/process/lat_synth.c:651
+#: modules/process/obj_synth.c:542 modules/process/pat_synth.c:1458
+#: modules/process/phase_synth.c:279
+msgid "_Size:"
+msgstr "_Velikost:"
+
+#: libgwydgets/gwy3dwindow.c:1311
+msgid "_Vertical alignment:"
+msgstr "_Svislé zarování:"
-#: libgwydgets/gwy3dwindow.c:1726 libgwydgets/gwy3dwindow.c:1779
+#: libgwydgets/gwy3dwindow.c:1844 libgwydgets/gwy3dwindow.c:1897
msgid "S_witch to Lighting Mode"
msgstr "_Přepni na osvětlení"
-#: libgwydgets/gwy3dwindow.c:1734 libgwydgets/gwy3dwindow.c:1756
+#: libgwydgets/gwy3dwindow.c:1852 libgwydgets/gwy3dwindow.c:1874
msgid "S_witch to Overlay Mode"
msgstr "_Přepni na překrytí"
-#: libgwydgets/gwy3dwindow.c:1748 libgwydgets/gwy3dwindow.c:1771
+#: libgwydgets/gwy3dwindow.c:1866 libgwydgets/gwy3dwindow.c:1889
msgid "S_witch to Color Gradient Mode"
msgstr "_Přepni na barevný gradient"
-#: libgwydgets/gwy3dwindow.c:1787
+#: libgwydgets/gwy3dwindow.c:1905
msgid "T_oggle light"
msgstr "Př_epnout světlo"
-#: libgwydgets/gwyaxisdialog.c:99
+#: libgwydgets/gwyaxisdialog.c:75
msgid "Axis Properties"
msgstr "Vlastnosti osy"
-#: libgwydgets/gwyaxisdialog.c:101 libgwydgets/gwygraphlabeldialog.c:63
-msgid "Label Properties"
-msgstr "Vlastnosti popisku"
-
-#: libgwydgets/gwyaxisdialog.c:184
+#: libgwydgets/gwyaxisdialog.c:88
msgid "Label Text"
msgstr "Text popisku"
@@ -1084,7 +1152,7 @@ msgid "Hidden"
msgstr "Skrytý"
#: libgwydgets/gwydgetenums.c:47 libgwydgets/gwygraphwindowmeasuredialog.c:572
-#: modules/file/imgexport.c:475 modules/tools/selectionmanager.c:274
+#: modules/file/imgexport.c:474 modules/tools/selectionmanager.c:274
msgid "Points"
msgstr "Body"
@@ -1092,7 +1160,7 @@ msgstr "Body"
msgid "Line + points"
msgstr "Body + čára"
-#: libgwydgets/gwydgetutils.c:564
+#: libgwydgets/gwydgetutils.c:848
msgid "Change Mask Color"
msgstr "Změna barvy masky"
@@ -1101,7 +1169,7 @@ msgid "Quantity"
msgstr "Veličina"
#: libgwydgets/gwygrainvaluemenu.c:194 libgwydgets/gwygrainvaluemenu.c:207
-#: modules/process/curvature.c:753
+#: modules/process/curvature.c:750
msgid "Symbol"
msgstr "Symbol"
@@ -1121,137 +1189,141 @@ msgstr "_Předchozí"
msgid "_Next"
msgstr "_Následující"
-#: libgwydgets/gwygraphareadialog.c:127 modules/file/rawgraph.c:302
+#: libgwydgets/gwygraphareadialog.c:123 modules/file/rawgraph.c:302
msgid "Plot _style:"
msgstr "_Typ grafu:"
-#: libgwydgets/gwygraphareadialog.c:148
+#: libgwydgets/gwygraphareadialog.c:131
msgid "Pl_ot color:"
msgstr "_Barva"
-#: libgwydgets/gwygraphareadialog.c:159
+#: libgwydgets/gwygraphareadialog.c:151
msgid "Point _type:"
msgstr "T_yp bodu:"
-#: libgwydgets/gwygraphareadialog.c:165
+#: libgwydgets/gwygraphareadialog.c:157
msgid "_Point size:"
msgstr "_Velikost bodu:"
-#: libgwydgets/gwygraphareadialog.c:175
+#: libgwydgets/gwygraphareadialog.c:167
msgid "_Line type:"
msgstr "Typ čá_ry:"
-#: libgwydgets/gwygraphareadialog.c:181 modules/file/imgexport.c:3150
+#: libgwydgets/gwygraphareadialog.c:173 modules/file/imgexport.c:3154
msgid "Line t_hickness:"
msgstr "T_loušťka čáry:"
-#: libgwydgets/gwygraphareadialog.c:187
+#: libgwydgets/gwygraphareadialog.c:180
msgid "<b>Label Te_xt</b>"
msgstr "<b>Te_xt popisku</b>"
-#: libgwydgets/gwygraphareadialog.c:404
+#: libgwydgets/gwygraphareadialog.c:397
msgid "Set Curve Color"
msgstr "Nastavení barvy křivky"
-#: libgwydgets/gwygraphareadialog.c:556 modules/process/mask_morph.c:179
+#: libgwydgets/gwygraphareadialog.c:549 modules/process/mask_morph.c:178
msgid "Square"
msgstr "Čtverec"
-#: libgwydgets/gwygraphareadialog.c:558 modules/process/mask_morph.c:180
+#: libgwydgets/gwygraphareadialog.c:551 modules/process/mask_morph.c:179
msgid "Diamond"
msgstr "Kosočtverec"
-#: libgwydgets/gwygraphareadialog.c:559
+#: libgwydgets/gwygraphareadialog.c:552
msgid "Cross"
msgstr "Křížek"
-#: libgwydgets/gwygraphareadialog.c:560
+#: libgwydgets/gwygraphareadialog.c:553
msgid "Diagonal cross"
msgstr "Diagonální křížek"
-#: libgwydgets/gwygraphareadialog.c:561
+#: libgwydgets/gwygraphareadialog.c:554
msgid "Asterisk"
msgstr "Hvězdička"
-#: libgwydgets/gwygraphareadialog.c:562
+#: libgwydgets/gwygraphareadialog.c:555
msgid "Star"
msgstr "Hvězda"
-#: libgwydgets/gwygraphareadialog.c:563
+#: libgwydgets/gwygraphareadialog.c:556
msgid "Triangle up"
msgstr "Trojúhelník"
-#: libgwydgets/gwygraphareadialog.c:564
+#: libgwydgets/gwygraphareadialog.c:557
msgid "Triangle down"
msgstr "Otočený trojúhelník"
-#: libgwydgets/gwygraphareadialog.c:565
+#: libgwydgets/gwygraphareadialog.c:558
msgid "Triangle left"
msgstr "Levý trojúhelník"
-#: libgwydgets/gwygraphareadialog.c:566
+#: libgwydgets/gwygraphareadialog.c:559
msgid "Triangle right"
msgstr "Pravý trojúhelník"
-#: libgwydgets/gwygraphareadialog.c:567
+#: libgwydgets/gwygraphareadialog.c:560
msgid "Full square"
msgstr "Plný čtverec"
-#: libgwydgets/gwygraphareadialog.c:568 modules/process/mask_morph.c:177
+#: libgwydgets/gwygraphareadialog.c:561 modules/process/mask_morph.c:176
msgid "Disc"
msgstr "Kruh"
-#: libgwydgets/gwygraphareadialog.c:569
+#: libgwydgets/gwygraphareadialog.c:562
msgid "Full diamond"
msgstr "Plný kosočtverec"
-#: libgwydgets/gwygraphareadialog.c:570
+#: libgwydgets/gwygraphareadialog.c:563
msgid "Full triangle up"
msgstr "Plný trojúhelník"
-#: libgwydgets/gwygraphareadialog.c:571
+#: libgwydgets/gwygraphareadialog.c:564
msgid "Full triangle down"
msgstr "Plný otočený trojúhelník"
-#: libgwydgets/gwygraphareadialog.c:572
+#: libgwydgets/gwygraphareadialog.c:565
msgid "Full triangle left"
msgstr "Plný levý trojúhelník"
-#: libgwydgets/gwygraphareadialog.c:573
+#: libgwydgets/gwygraphareadialog.c:566
msgid "Full triangle right"
msgstr "Plný pravý trojúhelník"
-#: libgwydgets/gwygraphareadialog.c:635
+#: libgwydgets/gwygraphareadialog.c:628
msgid "line-style|Solid"
msgstr "Plná"
-#: libgwydgets/gwygraphareadialog.c:636
+#: libgwydgets/gwygraphareadialog.c:629
msgid "line-style|Dash"
msgstr "Přerušovaná"
-#: libgwydgets/gwygraphcurves.c:451
+#: libgwydgets/gwygraphcurves.c:448
msgid "Description"
msgstr "Popis"
-#: libgwydgets/gwygraphcurves.c:463
+#: libgwydgets/gwygraphcurves.c:460
msgid "Mode"
msgstr "Mód"
-#: libgwydgets/gwygraphcurves.c:481
+#: libgwydgets/gwygraphcurves.c:478
msgid "Color"
msgstr "Barva"
-#: libgwydgets/gwygraphcurves.c:494
+#: libgwydgets/gwygraphcurves.c:491
msgid "Point Type"
msgstr "Typ bodu"
-#: libgwydgets/gwygraphcurves.c:516
+#: libgwydgets/gwygraphcurves.c:513
msgid "Line Style"
msgstr "Typ čáry"
+#: libgwydgets/gwygraphlabeldialog.c:63
+msgid "Label Properties"
+msgstr "Vlastnosti popisku"
+
#: libgwydgets/gwygraphlabeldialog.c:74
-msgid "Frame thickness:"
-msgstr "Tloušťka rámečku"
+msgid "_Frame thickness:"
+msgstr "_Tloušťka rámečku:"
#: libgwydgets/gwygraphlabeldialog.c:81
msgid "_Reversed layout"
@@ -1261,12 +1333,12 @@ msgstr "_Obrácené rozmístění"
msgid "Abscissa"
msgstr "Vodorovná osa"
-#: libgwydgets/gwygraphwindow.c:163 app/toolbox-editor.c:1002 app/toolbox.c:108
+#: libgwydgets/gwygraphwindow.c:163 app/toolbox-editor.c:1015 app/toolbox.c:113
msgid "Graph"
msgstr "Graf"
#: libgwydgets/gwygraphwindow.c:170 modules/file/hdrimage.cc:472
-#: modules/process/fit-shape.c:656
+#: modules/process/fit-shape.c:666 modules/process/psf.c:229
msgid "Data"
msgstr "Data"
@@ -1304,15 +1376,15 @@ msgstr "Libovolné body"
#: libgwydgets/gwygraphwindowmeasuredialog.c:394
#: libgwydgets/gwygraphwindowmeasuredialog.c:580 modules/tools/linestats.c:170
-#: modules/tools/roughness.c:516 modules/volume/volume_linestat.c:157
+#: modules/tools/roughness.c:517 modules/volume/volume_linestat.c:159
msgid "Length"
msgstr "Délka"
#: libgwydgets/gwygraphwindowmeasuredialog.c:398
#: libgwydgets/gwygraphwindowmeasuredialog.c:588 app/gwyplaintool.c:1018
-#: modules/process/lat_synth.c:747 modules/process/obj_synth.c:569
-#: modules/process/pat_synth.c:846 modules/process/pat_synth.c:1148
-#: modules/process/pat_synth.c:1483
+#: modules/process/fibre_synth.c:534 modules/process/lat_synth.c:747
+#: modules/process/obj_synth.c:567 modules/process/pat_synth.c:847
+#: modules/process/pat_synth.c:1149 modules/process/pat_synth.c:1484
msgid "Height"
msgstr "Výška"
@@ -1325,12 +1397,12 @@ msgid "Curve:"
msgstr "Křivka:"
#: libgwydgets/gwygraphwindowmeasuredialog.c:553
-#: modules/process/linematch.c:828 modules/process/semsim.c:249
+#: modules/process/linematch.c:795 modules/process/semsim.c:249
#: modules/xyz/xyz_level.c:254
msgid "Method:"
msgstr "Metoda:"
-#: libgwydgets/gwygraphwindowmeasuredialog.c:592 modules/process/crosscor.c:354
+#: libgwydgets/gwygraphwindowmeasuredialog.c:592 modules/process/crosscor.c:331
msgid "Angle"
msgstr "Úhel"
@@ -1340,7 +1412,7 @@ msgid "Preferred"
msgstr "Upřednostňovaný"
#: libgwydgets/gwyoptionmenus.c:470 app/meta.c:410
-#: modules/file/imgexport.c:4160 modules/file/imgexport.c:4607
+#: modules/file/imgexport.c:4110 modules/file/imgexport.c:4555
#: modules/file/rawfile.c:995 modules/process/convolution_filter.c:538
#: modules/process/neural.c:418 modules/tools/selectionmanager.c:345
msgid "Name"
@@ -1379,7 +1451,7 @@ msgid "A_dd symbol"
msgstr "_Přidat symbol"
#: libgwydgets/gwyscitext.c:274 modules/file/rawfile.c:553
-#: modules/xyz/xyz_drift.c:580 modules/xyz/xyz_raster.c:405
+#: modules/xyz/xyz_drift.c:580 modules/xyz/xyz_raster.c:419
msgid "Preview"
msgstr "Náhled"
@@ -1397,87 +1469,81 @@ msgstr "Žádný modul nedokáže načíst tento typ souboru."
msgid "No module can save to this file type."
msgstr "Žádný modul nedokáže zapsat tento typ souboru."
-#: libgwymodule/gwymodulebrowser.c:67
+#: libgwymodule/gwymodulebrowser.c:66
msgid "Module Browser"
msgstr "Prohlížeč modulů"
-#: libgwymodule/gwymodulebrowser.c:190
+#: libgwymodule/gwymodulebrowser.c:189
msgid "Module"
msgstr "Modul"
-#: libgwymodule/gwymodulebrowser.c:190
+#: libgwymodule/gwymodulebrowser.c:189
msgid "Version"
msgstr "Verze"
-#: libgwymodule/gwymodulebrowser.c:190
+#: libgwymodule/gwymodulebrowser.c:189
msgid "Author"
msgstr "Autor"
-#: libgwymodule/gwymodulebrowser.c:246
+#: libgwymodule/gwymodulebrowser.c:244
msgid "Name-Version:"
msgstr "Jméno-verze"
-#: libgwymodule/gwymodulebrowser.c:247 libgwymodule/gwymodulebrowser.c:270
+#: libgwymodule/gwymodulebrowser.c:245 libgwymodule/gwymodulebrowser.c:268
#: modules/process/grain_stat.c:186
msgid "File:"
msgstr "Soubor:"
-#: libgwymodule/gwymodulebrowser.c:248
+#: libgwymodule/gwymodulebrowser.c:246
msgid "Registered functions:"
msgstr "Registrované funkce:"
-#: libgwymodule/gwymodulebrowser.c:249
+#: libgwymodule/gwymodulebrowser.c:247
msgid "Authors:"
msgstr "Autoři:"
-#: libgwymodule/gwymodulebrowser.c:250
+#: libgwymodule/gwymodulebrowser.c:248
msgid "Copyright:"
msgstr "Copyright:"
-#: libgwymodule/gwymodulebrowser.c:251
+#: libgwymodule/gwymodulebrowser.c:249
msgid "Date:"
msgstr "Datum:"
-#: libgwymodule/gwymodulebrowser.c:252
+#: libgwymodule/gwymodulebrowser.c:250
msgid "Description:"
msgstr "Popis:"
-#: libgwymodule/gwymodulebrowser.c:269
+#: libgwymodule/gwymodulebrowser.c:267
msgid "Name:"
msgstr "Jméno:"
-#: libgwymodule/gwymodulebrowser.c:271
+#: libgwymodule/gwymodulebrowser.c:269
msgid "Failure:"
msgstr "Selhání:"
-#: app/about.c:57
+#: app/about.c:58
#, c-format
msgid "About %s"
msgstr "O programu %s"
-#. TRANSLATORS: %s is replaced with date in ISO format YYYY-MM-DD.
-#: app/about.c:92
-#, c-format
-msgid "Released %s\n"
-msgstr "Vydán %s\n"
-
-#: app/about.c:93
+#: app/about.c:97
msgid "An SPM data visualization and analysis tool."
msgstr "Nástroj pro vizualizaci a analýzu SPM dat."
-#: app/about.c:101
+#: app/about.c:105
msgid "Report bugs to:"
msgstr "Chyby oznamuj:"
-#: app/about.c:116
+#: app/about.c:120
msgid "Credits"
msgstr "Zásluhy"
-#: app/about.c:133
+#: app/about.c:137
msgid "License"
msgstr "Licence"
-#: app/about.c:138
+#: app/about.c:142
#, c-format
msgid ""
"%s is free software; you can redistribute it and/or modify it under the "
@@ -1492,58 +1558,62 @@ msgstr ""
"kterékoli pozdější verze. Plné znění licence najdeš v souboru COPYING v "
"balíku se zdrojovým kódem."
-#: app/about.c:160 modules/process/logistic.c:270
+#: app/about.c:164 modules/process/logistic.c:269
msgid "Features"
msgstr "Vlastnosti"
-#: app/about.c:220
+#: app/about.c:224
msgid "Developers"
msgstr "Vývojáři"
-#: app/about.c:221
+#: app/about.c:225
msgid "Translators"
msgstr "Překladatelé"
-#: app/about.c:225
+#: app/about.c:229
msgid "Development is supported by the Czech Metrology Institute: "
msgstr "Vývoj programu podporuje Český metrologický institut: "
-#: app/about.c:253 app/about.c:256
+#: app/about.c:257 app/about.c:260
msgid "OpenGL 3D View"
msgstr "OpenGL trojrozměrné zobrazení"
-#: app/about.c:257 app/about.c:271 app/about.c:291
+#: app/about.c:261 app/about.c:266 app/about.c:286
msgid "not available\n"
msgstr "není k disposici\n"
-#: app/about.c:262 app/about.c:265
-msgid "Fast Fourier Transform"
-msgstr "Rychlá Fourierova transformace"
-
-#: app/about.c:266
-msgid "built-in SimpleFFT\n"
-msgstr "vestavěná SimpleFFT\n"
-
-#: app/about.c:274
+#: app/about.c:269
msgid "X11 protocol\n"
msgstr "X11 protokol\n"
-#: app/about.c:276
+#: app/about.c:271
msgid "Win32 protocol\n"
msgstr "Win32 protokol\n"
-#: app/about.c:278
+#: app/about.c:273
msgid "LibUnique\n"
msgstr "LibUnique\n"
-#: app/about.c:282
+#: app/about.c:277
msgid "Remote Control"
msgstr "Dálkové ovládání"
-#: app/about.c:286 app/about.c:290
+#: app/about.c:281 app/about.c:285
msgid "Python Scripting Interface"
msgstr "Rozhraní pro skriptování v Pythonu"
+#. TRANSLATORS: %s is replaced with date in ISO format YYYY-MM-DD.
+#: app/about.c:311
+#, c-format
+msgid "Development version, built %s"
+msgstr "Vývojová verze, sestavena %s"
+
+#. TRANSLATORS: %s is replaced with date in ISO format YYYY-MM-DD.
+#: app/about.c:328
+#, c-format
+msgid "Released %s"
+msgstr "Vydán %s"
+
#: app/app.c:301
#, c-format
msgid ""
@@ -1555,116 +1625,124 @@ msgstr ""
"%s\n"
"Opravdu skončit?"
-#: app/app.c:440
+#: app/app.c:442
msgid "Mask _Color..."
msgstr "_Barva masky..."
-#: app/app.c:456 app/app.c:1725
+#: app/app.c:458 app/app.c:1754
msgid "Zoom _1:1"
msgstr "Zvětšit _1:1"
-#: app/app.c:460 app/app.c:1729 app/app.c:1957
+#: app/app.c:462 app/app.c:1758 app/app.c:1988
msgid "Metadata _Browser..."
msgstr "Prohlížeč _metadat..."
-#: app/app.c:465 app/app.c:1734 app/app.c:1962
+#: app/app.c:467 app/app.c:1763 app/app.c:1993
msgid "View _Log..."
msgstr "Zobrazit _Log..."
-#: app/app.c:649
+#: app/app.c:651
msgid "Pi_xelwise Square"
msgstr "Čtvercové pi_xely"
-#: app/app.c:659
+#: app/app.c:661
msgid "_Physically Square"
msgstr "_Fyzicky čtvercový"
-#: app/app.c:836
+#: app/app.c:842
+msgid "Set as Default"
+msgstr "Nastavit výchozí"
+
+#: app/app.c:844
+msgid "Set the current view setup as the default"
+msgstr "Nastavit současné uspořádání pohledu jako výchozí"
+
+#: app/app.c:854
msgid "verb|Save"
msgstr "Uložit"
-#: app/app.c:839 app/app.c:843
+#: app/app.c:857 app/app.c:861
msgid "Save 3D view to an image"
msgstr "Exportovat trojrozměrný pohled do obrázku"
-#: app/app.c:849
-msgid "Set as Default"
-msgstr "Nastavit výchozí"
+#: app/app.c:869
+msgid "_Autocrop"
+msgstr "_Autom. oříznout"
-#: app/app.c:851
-msgid "Set the current view setup as the default"
-msgstr "Nastavit současné uspořádání pohledu jako výchozí"
+#: app/app.c:873
+msgid "Remove white borders from exported image"
+msgstr "Odstranit bílé okraje z exportovaného obrázku"
-#: app/app.c:940
+#: app/app.c:960
msgid "_Show mask"
msgstr "Zobrazuj _masku"
-#: app/app.c:1106
+#: app/app.c:1172
#, c-format
msgid "Saving of 3D view to `%s' failed"
msgstr "Uložení 3D pohledu do ‚%s‘ se nezdařilo"
-#: app/app.c:1150
+#: app/app.c:1222
msgid "Export 3D View"
msgstr "Exportovat trojrozměrný pohled"
-#: app/app.c:1457
+#: app/app.c:1478
msgid "_Change Preview"
msgstr "_Změnit náhled"
-#: app/app.c:1583
+#: app/app.c:1606
msgid "Change Volume Data Preview"
msgstr "Změnit náhled objemových dat"
-#: app/app.c:1593
+#: app/app.c:1616
msgid "Preview quantity:"
msgstr "Veličina zobrazená v náhledu:"
-#: app/app.c:1603 modules/process/extend.c:267 modules/tools/linestats.c:165
+#: app/app.c:1626 modules/process/extend.c:267 modules/tools/linestats.c:165
#: modules/volume/volume_linestat.c:142
msgid "Mean"
msgstr "Střední hodnota"
-#: app/app.c:1604 modules/process/polydistort.c:255 modules/tools/filter.c:240
+#: app/app.c:1627 modules/process/polydistort.c:258 modules/tools/filter.c:241
#: modules/tools/icolorange.c:424 modules/tools/linestats.c:167
#: modules/volume/volume_linestat.c:144
msgid "Minimum"
msgstr "Minimum"
-#: app/app.c:1605 modules/process/col_synth.c:170 modules/tools/filter.c:241
+#: app/app.c:1628 modules/process/col_synth.c:170 modules/tools/filter.c:242
#: modules/tools/icolorange.c:435 modules/tools/linestats.c:168
#: modules/volume/volume_linestat.c:145
msgid "Maximum"
msgstr "Maximum"
-#: app/app.c:1606
+#: app/app.c:1629 modules/volume/volume_linestat.c:146
msgid "Min. position"
msgstr "Min. poloha"
-#: app/app.c:1607
+#: app/app.c:1630 modules/volume/volume_linestat.c:147
msgid "Max. position"
msgstr "Max. poloha"
-#: app/app.c:1608 modules/process/bdep_synth.c:134
-#: modules/process/col_synth.c:171 modules/process/scars.c:346
-#: modules/process/scars.c:353 modules/process/threshold.c:341
+#: app/app.c:1631 modules/process/bdep_synth.c:134
+#: modules/process/col_synth.c:171 modules/process/scars.c:369
+#: modules/process/scars.c:377 modules/process/threshold.c:336
msgid "RMS"
msgstr "RMS"
-#: app/app.c:1609 modules/file/asciiexport.c:187 modules/file/gxyzffile.c:393
-#: modules/file/xyzexport.c:233 modules/file/xyzexport.c:302
+#: app/app.c:1632 modules/file/asciiexport.c:187 modules/file/gxyzffile.c:393
+#: modules/file/xyzexport.c:236 modules/file/xyzexport.c:305
msgid "Channel:"
msgstr "Kanál:"
-#: app/app.c:1610
+#: app/app.c:1633
msgid "Section:"
msgstr "Řez:"
-#: app/app.c:1861
+#: app/app.c:1890
msgid "_Update Preview"
msgstr "_Aktualizovat náhled"
-#: app/app.c:1867
+#: app/app.c:1896
msgid "_Density Map"
msgstr "Mapa _hustoty"
@@ -1683,12 +1761,12 @@ msgstr "Neznámá objemová data %d"
msgid "Unknown XYZ %d"
msgstr "Neznámá XYZ data %d"
-#: app/data-browser-aux.c:2795
+#: app/data-browser-aux.c:2839
#, c-format
msgid "Z levels: %d, Z unit: %s"
msgstr "Z úrovně: %d, Z jednotky: %s"
-#: app/data-browser-aux.c:2821
+#: app/data-browser-aux.c:2865
#, c-format
msgid "Points: %d"
msgstr "Počet bodů: %d"
@@ -1718,10 +1796,10 @@ msgid "Close file"
msgstr "Zavřít soubor"
#: app/data-browser.c:5582
-msgid "Channels"
-msgstr "Kanály"
+msgid "Images"
+msgstr "Obrázky"
-#: app/data-browser.c:5596 modules/volume/volume_extract.c:444
+#: app/data-browser.c:5596 modules/volume/volume_extract.c:431
msgid "Graphs"
msgstr "Grafy"
@@ -1776,51 +1854,51 @@ msgstr ""
"\n"
"%s"
-#: app/file.c:285
+#: app/file.c:292
#, c-format
msgid "Opening of `%s' failed"
msgstr "Načtení ‚%s‘ se nezdařilo"
-#: app/file.c:291 app/file.c:526
+#: app/file.c:298 app/file.c:533
#, c-format
msgid "Full file path: %s."
msgstr "Plná cesta souboru: %s."
-#: app/file.c:294
+#: app/file.c:301
#, c-format
msgid "Loaded using: %s."
msgstr "Načítán pomocí: %s."
-#: app/file.c:380
+#: app/file.c:387
msgid "Merge File"
msgstr "Sloučení souboru"
-#: app/file.c:382 app/gwyappfilechooser.c:221
+#: app/file.c:389 app/gwyappfilechooser.c:226
msgid "Open File"
msgstr "Otevření souboru"
-#: app/file.c:520 app/gwymoduleutils.c:192
+#: app/file.c:527 app/gwymoduleutils.c:192
#, c-format
msgid "Saving of `%s' failed"
msgstr "Zapsání ‚%s‘ se nezdařilo"
-#: app/file.c:529
+#: app/file.c:536
#, c-format
msgid "Saved using: %s."
msgstr "Ukládán pomocí: %s."
-#: app/file.c:689
+#: app/file.c:696
#, c-format
msgid "File `%s' already exists. Replace?"
msgstr "Soubor ‚%s‘ již existuje. Přepsat?"
-#: app/file.c:693
+#: app/file.c:700
#, c-format
msgid ""
"The file already exists in `%s'. Replacing it will overwrite its contents."
msgstr "Takový soubor již v ‚%s‘ existuje. Přepsání nahradí jeho obsah."
-#: app/file.c:696
+#: app/file.c:703
msgid "Replace File?"
msgstr "Přepsat soubor?"
@@ -1844,11 +1922,11 @@ msgstr "Zavřít seznam souborů"
msgid "Open selected file"
msgstr "Otevřít vybraný soubor"
-#: app/filelist.c:566 app/gwyappfilechooser.c:583
+#: app/filelist.c:566 app/gwyappfilechooser.c:592
msgid "_Filter:"
msgstr "_Filtr:"
-#: app/filelist.c:604 app/gwyappfilechooser.c:619
+#: app/filelist.c:604 app/gwyappfilechooser.c:628
msgid "Case _sensitive"
msgstr "Rozlišovat velká/_malá"
@@ -1898,97 +1976,97 @@ msgstr "_Křivka"
msgid "_Snap to control points"
msgstr "_Přichytávat ke kontrolním bodům"
-#: app/gwyappfilechooser.c:226
+#: app/gwyappfilechooser.c:231
msgid "Save File"
msgstr "Uložení souboru"
-#: app/gwyappfilechooser.c:380
+#: app/gwyappfilechooser.c:389
#, c-format
msgid "File _type: %s"
msgstr "_Typ souboru: %s"
-#: app/gwyappfilechooser.c:387
+#: app/gwyappfilechooser.c:396
msgid "Only loadable shown"
msgstr "Zobrazeny pouze načtitelné"
-#: app/gwyappfilechooser.c:391
+#: app/gwyappfilechooser.c:400
#, c-format
msgid "Filter: %s"
msgstr "Filtr: %s"
-#: app/gwyappfilechooser.c:455
+#: app/gwyappfilechooser.c:464
msgid "Automatic by extension"
msgstr "Automatický podle koncovky"
-#: app/gwyappfilechooser.c:464
+#: app/gwyappfilechooser.c:473
msgid "Automatically detected"
msgstr "Automaticky detekovaný"
-#: app/gwyappfilechooser.c:561
+#: app/gwyappfilechooser.c:570
msgid "Show only loadable files"
msgstr "Zobrazovat pouze soubory, které lze načíst"
-#: app/gwyappfilechooser.c:844
+#: app/gwyappfilechooser.c:855
msgid "Plane-level previewed data"
msgstr "Vyrovnávat náhledy proložením roviny"
-#: app/gwyappfilechooser.c:860
+#: app/gwyappfilechooser.c:871
msgid "Row-level previewed data"
msgstr "Vyrovnávat náhledy srovnáním řádků"
-#: app/gwyappfilechooser.c:969
+#: app/gwyappfilechooser.c:987
+msgid "File too large for preview"
+msgstr "Soubor je příliš velký pro náhled"
+
+#: app/gwyappfilechooser.c:988
msgid "…"
msgstr "…"
-#: app/gwyappfilechooser.c:1331
+#: app/gwyappfilechooser.c:1352
msgid "Cannot preview"
msgstr "Náhled není možný"
-#: app/gwyddion.c:143
+#: app/gwyddion.c:147
msgid "Loading document history"
msgstr "Načítám historii dokumentů"
-#: app/gwyddion.c:148
+#: app/gwyddion.c:152
msgid "Registering "
msgstr "Registruji "
-#: app/gwyddion.c:149
+#: app/gwyddion.c:153
msgid "stock items"
msgstr "standardní ikony"
-#: app/gwyddion.c:153
+#: app/gwyddion.c:157
msgid "color gradients"
msgstr "barevné gradienty"
-#: app/gwyddion.c:155
+#: app/gwyddion.c:159
msgid "GL materials"
msgstr "GL materiály"
-#: app/gwyddion.c:157
+#: app/gwyddion.c:161
msgid "grain quantities"
msgstr "zrnové veličiny"
-#: app/gwyddion.c:159
+#: app/gwyddion.c:163
msgid "calibrations"
msgstr "kalibrace"
-#: app/gwyddion.c:164
+#: app/gwyddion.c:168
msgid "Loading settings"
msgstr "Načítám nastavení"
-#: app/gwyddion.c:171
+#: app/gwyddion.c:175
msgid "Registering modules"
msgstr "Registruji moduly"
-#: app/gwyddion.c:193
-msgid "Initializing GUI"
-msgstr "Inicializuji GUI"
-
-#: app/gwyddion.c:439
+#: app/gwyddion.c:464
msgid "Could not read settings."
msgstr "Nezdařilo se přečíst nastavení."
-#: app/gwyddion.c:442
+#: app/gwyddion.c:467
#, c-format
msgid ""
"Settings file `%s' cannot be read: %s\n"
@@ -2001,42 +2079,72 @@ msgstr ""
"Aby se neztratilo uložené nastavení, nebude se do něj zapisovat, dokud "
"nebude opraven či odstraněn."
-#: app/gwymoduleutils-file.c:542
+#: app/gwyddion.c:505
+#, c-format
+msgid "Many modules (%u) failed to register."
+msgstr "Selhala registrace spousty modulů (%u)."
+
+#: app/gwyddion.c:510
+#, c-format
+msgid ""
+"Most likely Gwyddion was not upgraded correctly. Instead, one installation "
+"was just overwritten with another, and now it is a mess.\n"
+"\n"
+"Please remove completely the module directory\n"
+"\n"
+"%s\n"
+"\n"
+"and reinstall Gwyddion.\n"
+"\n"
+"See Info → Module Browser for specific errors."
+msgstr ""
+"Gwyddion nejspíš nebyl správně upgradován. Namísto toho byla jedna "
+"instalace prostě přepsána jinou, a teď je v ní zmatek.\n"
+"\n"
+"Odstraň prosím kompletně adresář s moduly\n"
+"\n"
+"%s\n"
+"\n"
+"a přeinstaluj Gwyddion.\n"
+"\n"
+"Viz Info → Prohlížeč modulů pro konkrétní chyby."
+
+#: app/gwymoduleutils-file.c:536
#, c-format
msgid "Section %s ended at line %u but it has never started."
msgstr "Sekce %s skončila na řádku %u, ale nikdy nezačala."
-#: app/gwymoduleutils-file.c:550
+#: app/gwymoduleutils-file.c:544
#, c-format
msgid "Section %s ended at line %u instead of %s."
msgstr "Sekce %s skončila na řádku %u namísto %s."
-#: app/gwymoduleutils-file.c:587
+#: app/gwymoduleutils-file.c:581
#, c-format
msgid "Section %s started at line %u before %s ended."
msgstr "Sekce %s začala na řádku %u dříve, než %s skončila."
-#: app/gwymoduleutils-file.c:593
+#: app/gwymoduleutils-file.c:587
#, c-format
msgid "Empty section name at header line %u."
msgstr "Prázdné jméno sekce v hlavičce na řádku %u."
-#: app/gwymoduleutils-file.c:628
+#: app/gwymoduleutils-file.c:622
#, c-format
msgid "Header line %u lacks prefix %s."
msgstr "Na řádku %u hlavičky chybí prefix %s."
-#: app/gwymoduleutils-file.c:653
+#: app/gwymoduleutils-file.c:647
#, c-format
msgid "Header line %u lacks key-value separator."
msgstr "Na řádku %u hlavičky schází oddělovač klíče a hodnoty."
-#: app/gwymoduleutils-file.c:661
+#: app/gwymoduleutils-file.c:655
#, c-format
msgid "Key at header line %u is empty."
msgstr "Klíč na řádku %u je prázdný."
-#: app/gwymoduleutils-file.c:688
+#: app/gwymoduleutils-file.c:682
#, c-format
msgid "Header suddenly ended at line %u; end of header marker is missing"
msgstr ""
@@ -2044,6 +2152,7 @@ msgstr ""
#: app/gwymoduleutils.c:197 app/settings.c:131 app/settings.c:142
#: app/toolbox-spec.c:536 modules/file/err.h:62
+#: modules/pygwy/pygwy-console.c:528
#, c-format
msgid "Cannot write to file: %s."
msgstr "Do souboru nelze zapisovat: %s."
@@ -2072,8 +2181,9 @@ msgstr "Počátek"
#: app/gwyplaintool.c:1011 modules/file/rawfile.c:997
#: modules/process/convolution_filter.c:349
-#: modules/process/convolution_filter.c:553 modules/process/neural.c:419
-#: modules/process/obj_synth.c:538 modules/process/pat_synth.c:1449
+#: modules/process/convolution_filter.c:553 modules/process/fibre_synth.c:520
+#: modules/process/neural.c:419 modules/process/obj_synth.c:536
+#: modules/process/pat_synth.c:1450
msgid "Size"
msgstr "Velikost"
@@ -2130,7 +2240,7 @@ msgstr "Vy_prázdnit"
msgid "_Close"
msgstr "_Zavřít"
-#: app/log.c:615 modules/file/imgexport.c:4168 modules/file/rawfile.c:996
+#: app/log.c:615 modules/file/imgexport.c:4118 modules/file/rawfile.c:996
msgid "Type"
msgstr "Typ"
@@ -2138,8 +2248,8 @@ msgstr "Typ"
msgid "Function"
msgstr "Funkce"
-#: app/log.c:617 modules/file/imgexport.c:3117 modules/process/fit-shape.c:465
-#: modules/process/neural.c:610 modules/tools/stats.c:425
+#: app/log.c:617 modules/file/imgexport.c:3128 modules/process/fit-shape.c:466
+#: modules/process/neural.c:614 modules/tools/stats.c:423
msgid "Parameters"
msgstr "Parametry"
@@ -2151,39 +2261,39 @@ msgstr "Čas"
msgid "Export Log"
msgstr "Exportovat log"
-#: app/menu.c:556 app/toolbox.c:581
+#: app/menu.c:555 app/toolbox.c:595
msgid "_Data Process"
msgstr "Zpracování _dat"
-#: app/menu.c:598 app/toolbox.c:584
+#: app/menu.c:597 app/toolbox.c:598
msgid "_Graph"
msgstr "_Graf"
-#: app/menu.c:641 app/toolbox.c:587
+#: app/menu.c:640 app/toolbox.c:601
msgid "_Volume Data"
msgstr "_Objemová data"
-#: app/menu.c:684 app/toolbox.c:590
+#: app/menu.c:683 app/toolbox.c:604
msgid "_XYZ Data"
msgstr "_XYZ data"
-#: app/menu.c:715
+#: app/menu.c:714
msgid "Re-show Last"
msgstr "Ukázat poslední"
-#: app/menu.c:730
+#: app/menu.c:729
msgid "Repeat Last"
msgstr "Opakovat poslední"
-#: app/menu.c:858
+#: app/menu.c:857
msgid "Repeat"
msgstr "Opakovat"
-#: app/menu.c:864
+#: app/menu.c:863
msgid "Re-show"
msgstr "Ukázat znovu"
-#: app/menu.c:1186
+#: app/menu.c:1185
msgid "_Document history"
msgstr "_Historie dokumentů"
@@ -2191,8 +2301,8 @@ msgstr "_Historie dokumentů"
msgid "_New"
msgstr "_Nový"
-#: app/meta.c:235 modules/file/imgexport.c:4672 modules/file/rawfile.c:1058
-#: modules/process/neural.c:711 modules/tools/selectionmanager.c:405
+#: app/meta.c:235 modules/file/imgexport.c:4620 modules/file/rawfile.c:1058
+#: modules/process/neural.c:718 modules/tools/selectionmanager.c:405
msgid "_Delete"
msgstr "_Smazat"
@@ -2266,11 +2376,11 @@ msgstr "Nelze vytvořit adresář pro uživatelské rozhraní %s: %s"
msgid "Cannot create user module directory %s: %s"
msgstr "Nelze vytvořit adresář pro uživatelské moduly %s: %s"
-#: app/splash.c:832
+#: app/splash.c:1260
msgid "Starting "
msgstr "Spouštím "
-#: app/splash.c:878
+#: app/splash.c:1313
msgid " is free software released under GNU GPL."
msgstr " je svobodný software uvolněný pod GNU GPL."
@@ -2800,124 +2910,125 @@ msgstr "_Následující tip"
msgid "_Show tips at startup"
msgstr "_Zobrazuj tipy při spuštění"
-#: app/toolbox-editor.c:212
+#: app/toolbox-editor.c:213
msgid "Toolbox Editor"
msgstr "Editor panelu nástrojů"
-#: app/toolbox-editor.c:257
+#: app/toolbox-editor.c:258
msgid "_New Item"
msgstr "_Nová položka"
-#: app/toolbox-editor.c:262
+#: app/toolbox-editor.c:263
msgid "_New Group"
msgstr "_Nová skupina"
-#: app/toolbox-editor.c:268 app/toolbox.c:577
+#: app/toolbox-editor.c:269 app/toolbox.c:591
msgid "_Edit"
msgstr "Úpr_avy"
-#: app/toolbox-editor.c:273 modules/process/fft_filter_2d.c:499
-#: modules/tools/maskedit.c:548 modules/volume/volume_zcal.c:173
+#: app/toolbox-editor.c:274 modules/process/fft_filter_2d.c:499
+#: modules/tools/maskedit.c:554 modules/volume/volume_zcal.c:173
msgid "_Remove"
msgstr "_Odstranit"
-#: app/toolbox-editor.c:278
+#: app/toolbox-editor.c:279
msgid "Move _Up"
msgstr "Posunout na_horu"
-#: app/toolbox-editor.c:283
+#: app/toolbox-editor.c:284
msgid "Move _Down"
msgstr "Posunout _dolů"
-#: app/toolbox-editor.c:292 modules/file/hdrimage.cc:2304
-#: modules/file/imgexport.c:3101 modules/file/pixmap.c:872
+#: app/toolbox-editor.c:293 modules/file/hdrimage.cc:2304
+#: modules/file/imgexport.c:3114 modules/file/pixmap.c:872
#: modules/file/rawfile.c:658 modules/process/crosscor.c:252
-#: modules/process/dimensions.h:473 modules/process/tip_blind.c:333
+#: modules/process/dimensions.h:455 modules/process/fibre_synth.c:526
+#: modules/process/tip_blind.c:334
msgid "_Width:"
msgstr "Šířk_a:"
-#: app/toolbox-editor.c:774
+#: app/toolbox-editor.c:787
msgid "Toolbox Group"
msgstr "Skupina panelu nástrojů"
-#: app/toolbox-editor.c:791 modules/file/rawgraph.c:267
+#: app/toolbox-editor.c:804 modules/file/rawgraph.c:267
msgid "_Title:"
msgstr "_Název:"
-#: app/toolbox-editor.c:805
+#: app/toolbox-editor.c:818
msgid "_Id:"
msgstr "_Id:"
-#: app/toolbox-editor.c:818
+#: app/toolbox-editor.c:831
msgid "_Suggest"
msgstr "Na_vrhnout"
-#: app/toolbox-editor.c:824
+#: app/toolbox-editor.c:837
msgid "Trans_latable title"
msgstr "Název je _přeložitelný"
-#: app/toolbox-editor.c:874
+#: app/toolbox-editor.c:887
msgid "Group id is not a valid identifier"
msgstr "Id skupiny není platný identifikátor"
-#: app/toolbox-editor.c:882
+#: app/toolbox-editor.c:895
msgid "Group id is not unique"
msgstr "Id skupiny není unikátní"
-#: app/toolbox-editor.c:971
+#: app/toolbox-editor.c:984
msgid "Toolbox Item"
msgstr "Položka panelu nástrojů"
-#: app/toolbox-editor.c:992 modules/process/coerce.c:331
+#: app/toolbox-editor.c:1005 modules/process/coerce.c:331
#: modules/tools/filter.c:284
msgid "_Type:"
msgstr "_Typ:"
-#: app/toolbox-editor.c:999
+#: app/toolbox-editor.c:1012
msgid "Placeholder"
msgstr "Rezervované místo"
-#: app/toolbox-editor.c:1000
+#: app/toolbox-editor.c:1013
msgid "Builtin"
msgstr "Vestavěná funkce"
-#: app/toolbox-editor.c:1001 app/toolbox.c:107
+#: app/toolbox-editor.c:1014 app/toolbox.c:112
msgid "Data Process"
msgstr "Zpracování dat"
-#: app/toolbox-editor.c:1003
+#: app/toolbox-editor.c:1016
msgid "Volume Data"
msgstr "Objemová data"
-#: app/toolbox-editor.c:1004
+#: app/toolbox-editor.c:1017
msgid "XYZ Data"
msgstr "XYZ data"
-#: app/toolbox-editor.c:1005
+#: app/toolbox-editor.c:1018
msgid "Tool"
msgstr "Nástroj"
-#: app/toolbox-editor.c:1012
+#: app/toolbox-editor.c:1025 modules/tools/profile.c:483
msgid "_Mode:"
msgstr "_Mód:"
-#: app/toolbox-editor.c:1019 app/toolbox-editor.c:1038
+#: app/toolbox-editor.c:1032 app/toolbox-editor.c:1051
msgid "Default"
msgstr "Výchozí"
-#: app/toolbox-editor.c:1020
+#: app/toolbox-editor.c:1033
msgid "Interactive"
msgstr "Interaktivní"
-#: app/toolbox-editor.c:1021
+#: app/toolbox-editor.c:1034
msgid "Non-interactive"
msgstr "Neinteraktivní"
-#: app/toolbox-editor.c:1029
+#: app/toolbox-editor.c:1042
msgid "Use _icon from:"
msgstr "Použít _ikonu z:"
-#: app/toolbox-editor.c:1063
+#: app/toolbox-editor.c:1076
msgid "Functions"
msgstr "Funkce"
@@ -2933,143 +3044,159 @@ msgstr "zbývající nástroje"
msgid "All tools not placed explicitly go here."
msgstr "Všechny explicitně neumístěné nástroje přijdou sem."
-#: app/toolbox.c:106
+#: app/toolbox.c:111
msgid "View"
msgstr "Zobrazení"
-#: app/toolbox.c:109
+#: app/toolbox.c:114
msgid "Tools"
msgstr "Nástroje"
-#: app/toolbox.c:575
+#: app/toolbox.c:589
msgid "_File"
msgstr "_Soubor"
-#: app/toolbox.c:593
+#: app/toolbox.c:607
msgid "_Info"
msgstr "_Info"
-#: app/toolbox.c:663
+#: app/toolbox.c:696
msgid "Display a 3D view of data"
msgstr "Zobrazit data v trojrozměrném pohledu"
-#: app/toolbox.c:667
+#: app/toolbox.c:700
+msgid "Undo"
+msgstr "Zpět"
+
+#: app/toolbox.c:700
+msgid "Undo last action"
+msgstr "Vrátit zpět poslední akci"
+
+#: app/toolbox.c:704
+msgid "Redo"
+msgstr "Znovu"
+
+#: app/toolbox.c:704
+msgid "Redo again last undone action"
+msgstr "Zopakovat znovu poslední vrácenou akci"
+
+#: app/toolbox.c:708
msgid "Zoom in"
msgstr "Zvětšit"
-#: app/toolbox.c:671
+#: app/toolbox.c:712
msgid "Zoom out"
msgstr "Zmenšit"
-#: app/toolbox.c:675
+#: app/toolbox.c:716
msgid "Zoom 1:1"
msgstr "Velikost 1:1"
-#: app/toolbox.c:722
+#: app/toolbox.c:781
msgid "/Show _Data Browser"
msgstr "/Ukázat prohlížeč _dat"
-#: app/toolbox.c:730
+#: app/toolbox.c:789
msgid "/Module _Browser"
msgstr "/_Prohlížeč modulů"
-#: app/toolbox.c:738
+#: app/toolbox.c:797
msgid "/Program _Messages"
msgstr "/_Zprávy programu"
-#: app/toolbox.c:753
+#: app/toolbox.c:812
msgid "/_User Guide"
msgstr "/_Uživatelská příručka"
-#: app/toolbox.c:761
+#: app/toolbox.c:820
msgid "/_Tip of the Day"
msgstr "/_Tip dne"
-#: app/toolbox.c:769
+#: app/toolbox.c:828
msgid "/_About Gwyddion"
msgstr "/_O Gwyddionu"
-#: app/toolbox.c:806
+#: app/toolbox.c:865
msgid "/_Open..."
msgstr "/_Otevřít..."
-#: app/toolbox.c:814
+#: app/toolbox.c:873
msgid "/_Merge..."
msgstr "/_Sloučit..."
-#: app/toolbox.c:822
+#: app/toolbox.c:881
msgid "/Open _Recent"
msgstr "/Otevřít _nedávný"
-#: app/toolbox.c:830
+#: app/toolbox.c:889
msgid "/_Save"
msgstr "/_Uložit"
-#: app/toolbox.c:838
+#: app/toolbox.c:897
msgid "/Save _As..."
msgstr "/Uložit j_ako..."
-#: app/toolbox.c:846
+#: app/toolbox.c:905
msgid "/_Close"
msgstr "/_Zavřít"
-#: app/toolbox.c:854
+#: app/toolbox.c:913
msgid "/Remo_ve All Logs"
msgstr "/Od_stranit všechny logy"
-#: app/toolbox.c:870
+#: app/toolbox.c:929
msgid "/_Quit"
msgstr "/U_končit"
-#: app/toolbox.c:910
+#: app/toolbox.c:969
msgid "/_Undo"
msgstr "/_Zpět"
-#: app/toolbox.c:918
+#: app/toolbox.c:977
msgid "/_Redo"
msgstr "/Z_novu"
-#: app/toolbox.c:934
+#: app/toolbox.c:993
msgid "/Default Mask _Color..."
msgstr "/Výchozí _barva masky..."
-#: app/toolbox.c:942
+#: app/toolbox.c:1001
msgid "/Color _Gradients..."
msgstr "/Barevné _gradienty..."
-#: app/toolbox.c:950
+#: app/toolbox.c:1009
msgid "/G_L Materials..."
msgstr "/G_L materiály..."
-#: app/toolbox.c:958
+#: app/toolbox.c:1017
msgid "/_Toolbox..."
msgstr "/Paleta _nástrojů..."
-#: app/toolbox.c:966
+#: app/toolbox.c:1025
msgid "/_Keyboard Shortcuts"
msgstr "/_Klávesové zkratky"
-#: app/toolbox.c:974
+#: app/toolbox.c:1033
msgid "/_Logging Enabled"
msgstr "/_Logování povoleno"
-#: app/toolbox.c:1083
+#: app/toolbox.c:1142
msgid "Program Messages"
msgstr "Zprávy programu"
-#: app/toolbox.c:1320
+#: app/toolbox.c:1379
msgid "Change Default Mask Color"
msgstr "Změnit předvolenou barvu masky"
-#: app/toolbox.c:1348
+#: app/toolbox.c:1407
msgid "OpenGL 3D graphics not available"
msgstr "Trojrozměrné OpenGL zobrazení není přístupno"
-#: app/toolbox.c:1353
+#: app/toolbox.c:1412
msgid "OpenGL was disabled with a command-line option."
msgstr "OpenGL bylo zakázáno na příkazové řádce."
-#: app/toolbox.c:1361
+#: app/toolbox.c:1420
msgid ""
"Initialization of OpenGL failed. Check output of <tt>glxinfo</tt> and "
"warning messages printed to console during Gwyddion startup."
@@ -3077,7 +3204,7 @@ msgstr ""
"Inicializace OpenGL selhala. Zkontroluj výstup <tt>glxinfo</tt> a varování "
"vypsaná do terminálu během spouštění Gwyddionu."
-#: app/toolbox.c:1368
+#: app/toolbox.c:1427
msgid "This version of Gwyddion was built without OpenGL support."
msgstr "Tato verze Gwyddionu byla sestavena bez podpory OpenGL."
@@ -3153,7 +3280,7 @@ msgstr "Objekt má několik referencí"
msgid "Secondary data item has no primary data"
msgstr "Sekundární data nemají žádná odpovídající primární data"
-#: app/wait.c:106
+#: app/wait.c:114
msgid "Please wait"
msgstr "Čekej, prosím"
@@ -3170,11 +3297,11 @@ msgstr "Accurex II textové soubory (.txt)"
msgid "File header cannot be converted from ISO-8859-1 character set: %s"
msgstr "Hlavičku souboru nelze převést ze znakové sady ISO-8859-1: %s"
-#: modules/file/aistfile.c:127
+#: modules/file/aistfile.c:123
msgid "Imports AIST-NT data files."
msgstr "Načítá datové soubory AIST-NT."
-#: modules/file/aistfile.c:140
+#: modules/file/aistfile.c:136
msgid "AIST-NT files (.aist)"
msgstr "AIST-NT soubory (.aist)"
@@ -3221,7 +3348,8 @@ msgstr "Hodnota tagu ‚%s‘ v hlavičce není doplněna nulami."
#: modules/file/alicona.c:665 modules/file/gdeffile.c:175
#: modules/file/gdeffile.c:199 modules/file/gsffile.c:159
-#: modules/file/gxyzffile.c:199 modules/file/iso28600.c:1038
+#: modules/file/gxyzffile.c:199 modules/file/iso28600.c:1174
+#: modules/file/microprof.c:361 modules/file/microprof.c:375
#: modules/file/pt3file.c:489 modules/file/pt3file.c:591
msgid "File header is truncated."
msgstr "Hlavička souboru je uříznutá."
@@ -3234,11 +3362,11 @@ msgstr "Komentáři schází ukončení CRLF."
msgid "Comment is not nul-terminated."
msgstr "Komentář není ukončen nulovým znakem."
-#: modules/file/ambfile.c:84
+#: modules/file/ambfile.c:83
msgid "Imports Ambios AMB data files."
msgstr "Načítá datové soubory Ambios AMB."
-#: modules/file/ambfile.c:97
+#: modules/file/ambfile.c:96
msgid "Ambios amb files (.amb)"
msgstr "Ambios AMB soubory (.amb)"
@@ -3270,11 +3398,11 @@ msgstr "FileDescEnd nemá odpovídající FileDescBegin"
msgid "FileDescBegin has no corresponding FileDescEnd."
msgstr "FileDescBegin nemá odpovídající FileDescEnd"
-#: modules/file/apedaxfile.c:259
+#: modules/file/apedaxfile.c:261
msgid "Imports A.P.E. Research DAX data files."
msgstr "Načítá datové soubory A.P.E. Research DAX."
-#: modules/file/apedaxfile.c:274
+#: modules/file/apedaxfile.c:276
msgid "A.P.E. Research DAX Files (.dax) and APDT File (.apdt)"
msgstr "A.P.E. Research DAX soubory (.dax) a APDT soubory (.apdt)"
@@ -3302,7 +3430,7 @@ msgstr "Šířka:"
msgid "Height:"
msgstr "Výška:"
-#: modules/file/asciiexport.c:220 modules/file/xyzexport.c:248
+#: modules/file/asciiexport.c:220 modules/file/xyzexport.c:251
msgid "Value units:"
msgstr "Jednotky hodnot:"
@@ -3311,30 +3439,30 @@ msgid "Export Text"
msgstr "Export jako text"
#: modules/file/asciiexport.c:275 modules/file/gxyzffile.c:402
-#: modules/file/imgexport.c:3565 modules/file/imgexport.c:4203
-#: modules/file/rawfile.c:758 modules/file/xyzexport.c:311
-#: modules/process/calibrate.c:607 modules/process/coerce.c:364
-#: modules/process/col_synth.c:516 modules/process/correct_affine.c:470
-#: modules/process/extend.c:259 modules/process/fft_filter_1d.c:261
-#: modules/process/grain_dist.c:306 modules/process/grain_edge.c:255
-#: modules/process/grain_mark.c:338 modules/process/grain_wshed.c:252
-#: modules/process/linematch.c:852 modules/process/mark_disconn.c:279
-#: modules/process/slope_dist.c:367 modules/process/tip_blind.c:357
+#: modules/file/imgexport.c:3532 modules/file/imgexport.c:4151
+#: modules/file/rawfile.c:758 modules/file/xyzexport.c:314
+#: modules/process/calibrate.c:561 modules/process/coerce.c:363
+#: modules/process/col_synth.c:516 modules/process/correct_affine.c:520
+#: modules/process/extend.c:259 modules/process/fft_filter_1d.c:263
+#: modules/process/grain_dist.c:307 modules/process/grain_edge.c:254
+#: modules/process/grain_mark.c:335 modules/process/grain_wshed.c:256
+#: modules/process/linematch.c:819 modules/process/mark_disconn.c:280
+#: modules/process/slope_dist.c:359 modules/process/tip_blind.c:360
#: modules/process/wpour_mark.c:354 modules/tools/spotremove.c:322
-#: modules/tools/stats.c:402 modules/xyz/xyz_raster.c:628
+#: modules/tools/stats.c:401 modules/xyz/xyz_raster.c:597
msgid "Options"
msgstr "Volby"
-#: modules/file/asciiexport.c:278 modules/file/xyzexport.c:314
+#: modules/file/asciiexport.c:278 modules/file/xyzexport.c:317
msgid "Use _dot as decimal separator"
msgstr "Použít tečku namísto _desetinné čárky"
-#: modules/file/asciiexport.c:285 modules/file/xyzexport.c:321
-#: modules/process/grain_dist.c:317
+#: modules/file/asciiexport.c:285 modules/file/xyzexport.c:324
+#: modules/process/grain_dist.c:318
msgid "Add _informational comment header"
msgstr "Přidat na začátek _informativní komentář"
-#: modules/file/asciiexport.c:294 modules/file/xyzexport.c:330
+#: modules/file/asciiexport.c:294 modules/file/xyzexport.c:333
msgid "_Precision:"
msgstr "_Přesnost:"
@@ -3354,20 +3482,20 @@ msgstr "Načítá ASC soubory Attocube Systems."
msgid "Attocube ASCII files (.asc)"
msgstr "Attocube ASCII soubory (.asc)"
-#: modules/file/bcrfile.c:146
+#: modules/file/bcrfile.c:141
msgid "Imports Image Metrology BCR data files."
msgstr "Načítá datové soubory BCR Image Metrology."
-#: modules/file/bcrfile.c:159
+#: modules/file/bcrfile.c:154
msgid "BCR files (.bcr, .bcrf)"
msgstr "BCR soubory (.bcr, .bcrf)"
-#: modules/file/bcrfile.c:238
+#: modules/file/bcrfile.c:233
#, c-format
msgid "File header is not convertible from UTF-16: %s"
msgstr "Hlavičku souboru nelze převést z UTF-16: %s"
-#: modules/file/bcrfile.c:351
+#: modules/file/bcrfile.c:346
#, c-format
msgid "Unknown file type header: `%s'."
msgstr "Neznámá hlavička souboru: ‚%s‘."
@@ -3402,7 +3530,7 @@ msgid "Burleigh exported data (.txt, .bin)"
msgstr "Burleigh exportovaná data (.txt, .bin)"
#: modules/file/burleigh_exp.c:226 modules/file/burleigh_exp.c:267
-#: modules/file/nanoscope.c:1605 modules/file/omicron.c:416
+#: modules/file/nanoscope.c:1612 modules/file/omicron.c:416
#: modules/file/shimadzu.c:468
msgid "Missing colon in header line."
msgstr "V řádku hlavičky schází dvojtečka."
@@ -3451,22 +3579,40 @@ msgstr "Načítá datové soubory Benyuan CSM."
msgid "Benyuan CSM files (.csm)"
msgstr "Benyuan CSM soubory (.csm)"
-#: modules/file/dektakxml.c:138
+#: modules/file/dektakvca.c:197
+msgid "Imports Dektak OPDx data files."
+msgstr "Načítá datové soubory Dektak OPDx."
+
+#: modules/file/dektakvca.c:210
+msgid "Dektak OPDx data files (.OPDx)"
+msgstr "Dektak OPDx soubory (.OPDx)"
+
+#: modules/file/dektakvca.c:655
+#, c-format
+msgid "Item `%s' has unexpected type %u instead of %u."
+msgstr "Položka ‚%s‘ má neočekávaný typ %u namísto %u."
+
+#: modules/file/dektakvca.c:1022
+#, c-format
+msgid "Truncated data inside item %s."
+msgstr "Data v položce %s jsou uříznutá"
+
+#: modules/file/dektakxml.c:118
msgid "Imports Dektak XML data files."
msgstr "Načítá datové soubory Dektak XML."
-#: modules/file/dektakxml.c:151
+#: modules/file/dektakxml.c:131
msgid "Dektak XML data files (.xml)"
msgstr "Dektak XML soubory (.xml)"
-#: modules/file/dektakxml.c:228 modules/file/lextfile.c:260
-#: modules/file/nanoscan.c:267 modules/file/ometiff.c:265
+#: modules/file/dektakxml.c:208 modules/file/lextfile.c:260
+#: modules/file/nanoscan.c:270 modules/file/ometiff.c:265
#, c-format
msgid "XML parsing failed: %s"
msgstr "Parsování XML selhalo: %s"
-#: modules/file/dektakxml.c:400 modules/file/lextfile.c:163
-#: modules/file/nanoscan.c:672 modules/file/ometiff.c:445
+#: modules/file/dektakxml.c:373 modules/file/lextfile.c:163
+#: modules/file/nanoscan.c:698 modules/file/ometiff.c:445
#, c-format
msgid "Top-level element is not ‘%s’."
msgstr "Kořenový element není ‚%s‘."
@@ -3578,7 +3724,7 @@ msgid "Scan size header field overlaps with data."
msgstr "Hlavička velikosti skenu se překrývá s daty."
#: modules/file/err.h:48 modules/file/nrrdfile.c:779
-#: modules/file/nrrdfile.c:824
+#: modules/file/nrrdfile.c:824 modules/pygwy/pygwy-console.c:504
#, c-format
msgid "Cannot read from file: %s."
msgstr "Soubor nelze číst: %s."
@@ -3795,32 +3941,32 @@ msgid ""
"Data deserialization succeeded, but resulted in an unexpected object %s."
msgstr "Deserializace dat se podařila, ale výsledkem je neočekávaný objekt %s."
-#: modules/file/gwytiff.h:332
+#: modules/file/gwytiff.h:335
#, c-format
msgid "BigTIFF reserved fields are %u and %u instead of 8 and 0."
msgstr "Reservovaná pole BigTIFFu jsou %u a %u namísto 8 a 0."
-#: modules/file/gwytiff.h:349 modules/file/gwytiff.h:366
+#: modules/file/gwytiff.h:352 modules/file/gwytiff.h:369
#, c-format
msgid "TIFF directory %lu ended unexpectedly."
msgstr "Adresář TIFFu č. %lu neočekávaně skončil."
-#: modules/file/gwytiff.h:484
+#: modules/file/gwytiff.h:487
#, c-format
msgid "BigTIFF data type %u was found in a classic TIFF."
msgstr "Datový typ %u BigTIFFu byl nalezen v klasickém TIFFu"
-#: modules/file/gwytiff.h:501
+#: modules/file/gwytiff.h:504
msgid "Invalid tag data positions were found."
msgstr "Vyskytly se neplatné posice dat tagů."
-#: modules/file/gwytiff.h:874 modules/file/gwytiff.h:889
-#: modules/file/gwytiff.h:1012 modules/file/gwytiff.h:1019
+#: modules/file/gwytiff.h:877 modules/file/gwytiff.h:892
+#: modules/file/gwytiff.h:1015 modules/file/gwytiff.h:1022
#, c-format
msgid "Required tag %u was not found."
msgstr "Nebyl nalezen nezbytný tag %u."
-#: modules/file/gwytiff.h:942 modules/file/gwytiff.h:986
+#: modules/file/gwytiff.h:945 modules/file/gwytiff.h:989
#: modules/file/keyence.c:449 modules/file/matfile.c:276
#: modules/file/matfile.c:298 modules/file/omicronflat.c:1962
#: modules/file/princetonspe.c:339 modules/file/psia.c:352
@@ -3828,21 +3974,21 @@ msgstr "Nebyl nalezen nezbytný tag %u."
msgid "File is truncated."
msgstr "Soubor je uříznutý."
-#: modules/file/gwytiff.h:1044
+#: modules/file/gwytiff.h:1047
msgid "Non-uniform bits per sample are unsupported."
msgstr "Nestejné počty bitů na vzorek nejsou podporovány."
-#: modules/file/gwytiff.h:1071
+#: modules/file/gwytiff.h:1074 modules/file/zeisslsm.c:973
#, c-format
msgid "Compression type %u is not supported."
msgstr "Komprese typu %u není podporována."
-#: modules/file/gwytiff.h:1077
+#: modules/file/gwytiff.h:1080
#, c-format
msgid "Planar configuration %u is not supported."
msgstr "Planární konfigurace %u není podporována."
-#: modules/file/gwytiff.h:1101
+#: modules/file/gwytiff.h:1104
msgid "Unsupported sample format"
msgstr "Nepodporovaný formát vzorku"
@@ -3879,7 +4025,7 @@ msgstr "Chyba CRC"
msgid "Minizip error while reading the zip file: %s (%d)."
msgstr "Chyba minizipu při načítání zip souboru: %s (%d)."
-#: modules/file/gwyzip.h:248
+#: modules/file/gwyzip.h:248 modules/file/jpkscan.c:2776
#, c-format
msgid "File %s is missing in the zip file."
msgstr "V zip souboru schází soubor %s."
@@ -3914,8 +4060,8 @@ msgstr "Velikost dat %lu není násobek velikosti bodu %u."
msgid "Export GXYZF"
msgstr "Export jako GXYZF"
-#: modules/file/gxyzffile.c:395 modules/file/xyzexport.c:238
-#: modules/file/xyzexport.c:304
+#: modules/file/gxyzffile.c:395 modules/file/xyzexport.c:241
+#: modules/file/xyzexport.c:307
msgid "XYZ data:"
msgstr "XYZ data:"
@@ -4004,11 +4150,13 @@ msgstr "Š_kála Z:"
msgid "Representable"
msgstr "Representovatelný"
-#: modules/file/hdrimage.cc:480 modules/tools/stats.c:203
+#: modules/file/hdrimage.cc:480 modules/graph/graph_stats.c:146
+#: modules/tools/stats.c:203
msgid "Minimum:"
msgstr "Minimum:"
-#: modules/file/hdrimage.cc:496 modules/tools/stats.c:204
+#: modules/file/hdrimage.cc:496 modules/graph/graph_stats.c:147
+#: modules/tools/stats.c:204
msgid "Maximum:"
msgstr "Maximum:"
@@ -4027,12 +4175,12 @@ msgid "OpenEXR data type %u is invalid or unsupported."
msgstr "OpenEXR datový typ %u je neplatný či nepodporovaný."
#: modules/file/hdrimage.cc:1433 modules/file/hdrimage.cc:1442
-#: modules/file/imgexport.c:5249 modules/file/imgexport.c:5260
+#: modules/file/imgexport.c:5198 modules/file/imgexport.c:5209
#, c-format
msgid "libpng initialization error (in %s)"
msgstr "Chyba při inicializaci knihovny libpng (v %s)"
-#: modules/file/hdrimage.cc:1451 modules/file/imgexport.c:5324
+#: modules/file/hdrimage.cc:1451 modules/file/imgexport.c:5273
msgid "libpng error occurred"
msgstr "chyba při použití knihovny libpng"
@@ -4050,11 +4198,6 @@ msgstr "Informace o obrázku"
msgid "Horizontal size:"
msgstr "Vodorovný rozměr:"
-#: modules/file/hdrimage.cc:2246 modules/file/hdrimage.cc:2252
-#: modules/file/pixmap.c:820 modules/file/pixmap.c:826
-msgid "px"
-msgstr "px"
-
#: modules/file/hdrimage.cc:2252 modules/file/pixmap.c:826
msgid "Vertical size:"
msgstr "Svislý rozměr:"
@@ -4067,10 +4210,10 @@ msgstr "Kanály:"
msgid "Pages:"
msgstr "Strany:"
-#: modules/file/hdrimage.cc:2290 modules/file/imgexport.c:3043
+#: modules/file/hdrimage.cc:2290 modules/file/imgexport.c:3059
#: modules/file/pixmap.c:862 modules/file/rawfile.c:649
-#: modules/process/dimensions.h:467 modules/xyz/xyz_drift.c:774
-#: modules/xyz/xyz_raster.c:566
+#: modules/process/dimensions.h:449 modules/xyz/xyz_drift.c:774
+#: modules/xyz/xyz_raster.c:535
msgid "Physical Dimensions"
msgstr "Fyzické rozměry"
@@ -4080,16 +4223,16 @@ msgstr "Fyzické rozměry"
#: modules/process/calcoefs_new.c:408 modules/process/calcoefs_new.c:475
#: modules/process/calcoefs_simple.c:391 modules/process/calcoefs_simple.c:458
#: modules/process/calcoefs_view.c:511 modules/process/calcoefs_view.c:549
-#: modules/process/calibrate.c:466 modules/process/calibrate.c:549
-#: modules/process/dimensions.h:161 modules/process/volumize_layers.c:259
-#: modules/volume/volume_calibrate.c:414 modules/volume/volume_calibrate.c:441
-#: modules/volume/volume_calibrate.c:468 modules/volume/volume_calibrate.c:546
+#: modules/process/calibrate.c:459 modules/process/calibrate.c:514
+#: modules/process/dimensions.h:143 modules/process/volumize_layers.c:259
+#: modules/volume/volume_calibrate.c:409 modules/volume/volume_calibrate.c:429
+#: modules/volume/volume_calibrate.c:449 modules/volume/volume_calibrate.c:498
msgid "verb|Change"
msgstr "Změnit"
#: modules/file/hdrimage.cc:2345 modules/file/pixmap.c:907
-#: modules/file/rawfile.c:694 modules/process/crosscor.c:263
-#: modules/process/dimensions.h:477
+#: modules/file/rawfile.c:694 modules/process/crosscor.c:260
+#: modules/process/dimensions.h:459
msgid "H_eight:"
msgstr "_Výška:"
@@ -4106,16 +4249,16 @@ msgstr "_Z-škála (na jednotku):"
#: modules/file/hdrimage.cc:2557 modules/file/pixmap.c:1176
#: modules/file/rawfile.c:1386 modules/process/calcoefs_new.c:819
#: modules/process/calcoefs_simple.c:1197 modules/process/calcoefs_view.c:1380
-#: modules/process/calibrate.c:979 modules/process/dimensions.h:195
-#: modules/process/volumize_layers.c:315 modules/volume/volume_calibrate.c:1017
+#: modules/process/calibrate.c:1013 modules/process/dimensions.h:177
+#: modules/process/volumize_layers.c:314 modules/volume/volume_calibrate.c:957
msgid "Change Units"
msgstr "Změnit jednotky"
#: modules/file/hdrimage.cc:2571 modules/file/pixmap.c:1190
#: modules/file/rawfile.c:1400 modules/process/calcoefs_new.c:832
#: modules/process/calcoefs_simple.c:1210 modules/process/calcoefs_view.c:1393
-#: modules/process/calibrate.c:993 modules/process/dimensions.h:208
-#: modules/process/volumize_layers.c:329 modules/volume/volume_calibrate.c:1031
+#: modules/process/calibrate.c:1027 modules/process/dimensions.h:190
+#: modules/process/volumize_layers.c:328 modules/volume/volume_calibrate.c:971
msgid "New _units:"
msgstr "Nové _jednotky:"
@@ -4159,131 +4302,131 @@ msgstr "Nelze načíst obrázek: %s."
msgid "Field DataSize %ux%u does not match image dimensions %ux%u."
msgstr "Položka DataSize %ux%u neodpovídá rozměrům obrázku %u×%u."
-#: modules/file/igorfile.c:200
+#: modules/file/igorfile.c:210
msgid "Imports Igor binary waves (.ibw)."
msgstr "Načítá binární vlny programu Igor (.ibw)"
-#: modules/file/igorfile.c:213
+#: modules/file/igorfile.c:223
msgid "Igor binary waves (.ibw)"
msgstr "Igor binární vlny (.ibw)"
-#: modules/file/igorfile.c:273
+#: modules/file/igorfile.c:283
#, c-format
msgid "Format version is %d. Only version 5 is supported."
msgstr "Verze formátu souboru je %d. Pouze verze 5 je podporována."
-#: modules/file/igorfile.c:294
+#: modules/file/igorfile.c:305
msgid "Only two-dimensional data are supported."
msgstr "Jsou podporována pouze dvourozměrná data."
-#: modules/file/igorfile.c:306
+#: modules/file/igorfile.c:317
#, c-format
msgid "Number of data points %u does not match resolutions %u×%u×%u."
msgstr "Počet datových bodů %u neodpovídá rozlišením %u×%u×%u."
-#: modules/file/igorfile.c:320
+#: modules/file/igorfile.c:331
#, c-format
msgid "Data size %u does not match the number of data points %u×%u."
msgstr "Velikost dat %u neodpovídá počtu datových bodů %u×%u."
-#: modules/file/igorfile.c:358
+#: modules/file/igorfile.c:369
msgid "Cannot read channel labels."
msgstr "Nelze přečíst popisky kanálů."
-#: modules/file/imgexport.c:392 modules/file/pixmap.c:178
+#: modules/file/imgexport.c:391 modules/file/pixmap.c:178
msgid "Portable Network Graphics (.png)"
msgstr "PNG obrázek (.png)"
-#: modules/file/imgexport.c:398 modules/file/pixmap.c:182
+#: modules/file/imgexport.c:397 modules/file/pixmap.c:182
msgid "JPEG (.jpeg,.jpg)"
msgstr "JPEG obrázek (.jpeg,.jpg)"
-#: modules/file/imgexport.c:404 modules/file/pixmap.c:186
+#: modules/file/imgexport.c:403 modules/file/pixmap.c:186
msgid "TIFF (.tiff,.tif)"
msgstr "TIFF obrázek (.tiff,.tif)"
-#: modules/file/imgexport.c:410 modules/file/pixmap.c:190
+#: modules/file/imgexport.c:409 modules/file/pixmap.c:190
msgid "Portable Pixmap (.ppm,.pnm)"
msgstr "Portable Pixmap (.ppm,.pnm)"
-#: modules/file/imgexport.c:416 modules/file/pixmap.c:194
+#: modules/file/imgexport.c:415 modules/file/pixmap.c:194
msgid "Windows or OS2 Bitmap (.bmp)"
msgstr "Bitmapa Windows či OS2 (.bmp)"
-#: modules/file/imgexport.c:422 modules/file/pixmap.c:198
+#: modules/file/imgexport.c:421 modules/file/pixmap.c:198
msgid "TARGA (.tga,.targa)"
msgstr "TARGA obrázek (.tga,.targa)"
-#: modules/file/imgexport.c:429
+#: modules/file/imgexport.c:428
msgid "WebP (.webp)"
msgstr "WebP (.webp)"
-#: modules/file/imgexport.c:437
+#: modules/file/imgexport.c:436
msgid "Portable document format (.pdf)"
msgstr "Portable document format (.pdf)"
-#: modules/file/imgexport.c:445
+#: modules/file/imgexport.c:444
msgid "Encapsulated PostScript (.eps)"
msgstr "Encapsulated PostScript (.eps)"
-#: modules/file/imgexport.c:453
+#: modules/file/imgexport.c:452
msgid "Scalable Vector Graphics (.svg)"
msgstr "Scalable Vector Graphics (.svg)"
-#: modules/file/imgexport.c:463 modules/tools/selectionmanager.c:269
+#: modules/file/imgexport.c:462 modules/tools/selectionmanager.c:269
msgid "Horiz./vert. lines"
msgstr "Vodorov./svis. čáry"
-#: modules/file/imgexport.c:467 modules/tools/selectionmanager.c:270
+#: modules/file/imgexport.c:466 modules/tools/selectionmanager.c:270
msgid "Ellipses"
msgstr "Elipsy"
-#: modules/file/imgexport.c:471 modules/tools/selectionmanager.c:272
+#: modules/file/imgexport.c:470 modules/tools/selectionmanager.c:272
msgid "Lines"
msgstr "Čáry"
-#: modules/file/imgexport.c:479 modules/tools/selectionmanager.c:275
+#: modules/file/imgexport.c:478 modules/tools/selectionmanager.c:275
msgid "Rectangles"
msgstr "Obdélníky"
-#: modules/file/imgexport.c:483 modules/process/lat_synth.c:565
+#: modules/file/imgexport.c:482 modules/process/lat_synth.c:565
#: modules/process/lat_synth.c:637 modules/tools/selectionmanager.c:271
msgid "Lattice"
msgstr "Mřížka"
-#: modules/file/imgexport.c:487
+#: modules/file/imgexport.c:486
msgid "Path"
msgstr "Cesta"
-#: modules/file/imgexport.c:493 modules/file/imgexport.c:499
+#: modules/file/imgexport.c:492 modules/file/imgexport.c:498
msgid "ruler|_None"
msgstr "Žád_né"
-#: modules/file/imgexport.c:494
+#: modules/file/imgexport.c:493
msgid "_Rulers"
msgstr "_Pravítka"
-#: modules/file/imgexport.c:495
+#: modules/file/imgexport.c:494
msgid "_Inset scale bar"
msgstr "_Vložené měřítko"
-#: modules/file/imgexport.c:500
+#: modules/file/imgexport.c:499
msgid "_False color ruler"
msgstr "Škála _falešných barev"
-#: modules/file/imgexport.c:504
+#: modules/file/imgexport.c:503
msgid "title|None"
msgstr "Žádný"
-#: modules/file/imgexport.c:505
+#: modules/file/imgexport.c:504
msgid "At the top"
msgstr "Nahoře"
-#: modules/file/imgexport.c:506
+#: modules/file/imgexport.c:505
msgid "Along the right edge"
msgstr "Podél pravé hrany"
-#: modules/file/imgexport.c:512
+#: modules/file/imgexport.c:511
msgid ""
"Renders data into vector (SVG, PDF, EPS) and pixmap (PNG, JPEG, TIFF, WebP, "
"PPM, BMP, TARGA) images. Export to some formats relies on GDK and other "
@@ -4293,56 +4436,57 @@ msgstr ""
"WebP, PPM, TARGA, GIF) obrázků. Export do některých formátů se spoléhá na "
"GDK a další knihovny, tudíž se může u různých instalací lišit."
-#: modules/file/imgexport.c:2931
+#: modules/file/imgexport.c:2933
msgid "Select Color"
msgstr "Vybrat barvu"
-#: modules/file/imgexport.c:3002
-msgid "Black"
-msgstr "Černá"
-
-#: modules/file/imgexport.c:3010
+#: modules/file/imgexport.c:3005
msgid "White"
msgstr "Bílá"
-#: modules/file/imgexport.c:3053
+#: modules/file/imgexport.c:3014
+msgid "Black"
+msgstr "Černá"
+
+#: modules/file/imgexport.c:3069
msgid "Pi_xel size:"
msgstr "Velikost pi_xelu:"
-#: modules/file/imgexport.c:3062
+#: modules/file/imgexport.c:3077
msgid "Pixels per _inch:"
msgstr "Pixelů na pa_lec:"
-#: modules/file/imgexport.c:3089
+#: modules/file/imgexport.c:3102
msgid "_Zoom:"
msgstr "_Zvětšení"
-#: modules/file/imgexport.c:3108 modules/process/bdep_synth.c:430
+#: modules/file/imgexport.c:3120 modules/process/bdep_synth.c:430
#: modules/process/col_synth.c:486 modules/process/diff_synth.c:508
-#: modules/process/domain_synth.c:510 modules/process/grain_mark.c:285
-#: modules/process/lat_synth.c:753 modules/process/obj_synth.c:575
-#: modules/process/pat_synth.c:852 modules/process/pat_synth.c:1154
-#: modules/process/pat_synth.c:1489 modules/process/tip_blind.c:340
+#: modules/process/domain_synth.c:510 modules/process/fibre_synth.c:540
+#: modules/process/grain_mark.c:284 modules/process/lat_synth.c:753
+#: modules/process/obj_synth.c:573 modules/process/pat_synth.c:853
+#: modules/process/pat_synth.c:1155 modules/process/pat_synth.c:1490
+#: modules/process/phase_synth.c:298 modules/process/tip_blind.c:342
msgid "_Height:"
msgstr "_Výška:"
-#: modules/file/imgexport.c:3121
+#: modules/file/imgexport.c:3136
msgid "_Font:"
msgstr "_Písmo:"
-#: modules/file/imgexport.c:3140
+#: modules/file/imgexport.c:3145
msgid "_Font size:"
msgstr "Ve_likost písma"
-#: modules/file/imgexport.c:3160
+#: modules/file/imgexport.c:3163
msgid "O_utline thickness:"
msgstr "Tloušťka obr_ysu:"
-#: modules/file/imgexport.c:3170
+#: modules/file/imgexport.c:3172
msgid "_Border width:"
msgstr "Šířka okra_je:"
-#: modules/file/imgexport.c:3180
+#: modules/file/imgexport.c:3181
msgid "_Tick length:"
msgstr "_Délka značek:"
@@ -4362,219 +4506,220 @@ msgstr "Barvy"
msgid "_Line and text color:"
msgstr "Barva čar a te_xtu:"
-#: modules/file/imgexport.c:3221
+#: modules/file/imgexport.c:3220
msgid "_Transparent background"
msgstr "_Transparentní pozadí"
-#: modules/file/imgexport.c:3232
+#: modules/file/imgexport.c:3231
msgid "_Background color:"
msgstr "Barva _pozadí:"
-#: modules/file/imgexport.c:3474
-msgid "Lateral scale"
-msgstr "Příčná škála"
-
-#: modules/file/imgexport.c:3487 modules/process/lno_synth.c:1053
-msgid "_Length:"
-msgstr "_Délka:"
-
-#: modules/file/imgexport.c:3503
-msgid "_Auto"
-msgstr "_Auto"
-
-#: modules/file/imgexport.c:3511 modules/process/pat_synth.c:469
+#: modules/file/imgexport.c:3433 modules/process/fibre_synth.c:582
+#: modules/process/pat_synth.c:470
msgid "Placement"
msgstr "Umístění"
-#: modules/file/imgexport.c:3515
+#: modules/file/imgexport.c:3437
msgid "left"
msgstr "vlevo"
-#: modules/file/imgexport.c:3519
+#: modules/file/imgexport.c:3440
msgid "center"
msgstr "uprostřed"
-#: modules/file/imgexport.c:3523
+#: modules/file/imgexport.c:3443
msgid "right"
msgstr "vpravo"
-#: modules/file/imgexport.c:3528
+#: modules/file/imgexport.c:3448
msgid "top"
msgstr "nahoře"
-#: modules/file/imgexport.c:3540
+#: modules/file/imgexport.c:3456
msgid "bottom"
msgstr "dole"
-#: modules/file/imgexport.c:3552 modules/file/imgexport.c:3874
+#: modules/file/imgexport.c:3479
+msgid "Lateral scale"
+msgstr "Příčná škála"
+
+#: modules/file/imgexport.c:3496 modules/process/lno_synth.c:1053
+msgid "_Length:"
+msgstr "_Délka:"
+
+#: modules/file/imgexport.c:3502
+msgid "_Auto"
+msgstr "_Auto"
+
+#: modules/file/imgexport.c:3519 modules/file/imgexport.c:3832
msgid "Hori_zontal gap:"
msgstr "_Vodorovná mezera:"
-#: modules/file/imgexport.c:3558 modules/file/imgexport.c:3854
+#: modules/file/imgexport.c:3526 modules/file/imgexport.c:3812
msgid "_Vertical gap:"
msgstr "_Svislá mezera:"
-#: modules/file/imgexport.c:3571 modules/file/imgexport.c:4184
+#: modules/file/imgexport.c:3538 modules/file/imgexport.c:4134
msgid "Colo_r:"
msgstr "_Barva:"
-#: modules/file/imgexport.c:3576 modules/file/imgexport.c:4189
+#: modules/file/imgexport.c:3542 modules/file/imgexport.c:4138
msgid "Out_line color:"
msgstr "Barva obr_ysu:"
-#: modules/file/imgexport.c:3580 modules/file/imgexport.c:4195
+#: modules/file/imgexport.c:3547 modules/file/imgexport.c:4143
msgid "O_pacity:"
msgstr "O_pacita:"
-#: modules/file/imgexport.c:3589
+#: modules/file/imgexport.c:3554
msgid "Draw _ticks"
msgstr "Kreslit čárk_y"
-#: modules/file/imgexport.c:3599
+#: modules/file/imgexport.c:3564
msgid "Draw _label"
msgstr "Kreslit _popisek"
-#: modules/file/imgexport.c:3609
+#: modules/file/imgexport.c:3574
msgid "Draw text _above scale bar"
msgstr "Kreslit text _nad měřítko"
-#: modules/file/imgexport.c:3773
+#: modules/file/imgexport.c:3738
msgid "Image"
msgstr "Obraz"
-#: modules/file/imgexport.c:3777 modules/process/calcoefs_view.c:473
-#: modules/process/correct_affine.c:488 modules/process/drift.c:297
-#: modules/process/dwt.c:206 modules/process/dwtanisotropy.c:202
-#: modules/process/fft_filter_1d.c:294 modules/process/fft_profile.c:292
-#: modules/process/fractal.c:253 modules/process/nanoindent_adjust.c:229
-#: modules/process/polydistort.c:247 modules/process/rotate.c:274
-#: modules/process/scale.c:253 modules/process/straighten_path.c:271
+#: modules/file/imgexport.c:3742 modules/process/calcoefs_view.c:473
+#: modules/process/correct_affine.c:538 modules/process/drift.c:298
+#: modules/process/dwt.c:206 modules/process/dwtanisotropy.c:203
+#: modules/process/fft_filter_1d.c:296 modules/process/fft_profile.c:293
+#: modules/process/fractal.c:262 modules/process/nanoindent_adjust.c:229
+#: modules/process/polydistort.c:250 modules/process/rotate.c:274
+#: modules/process/scale.c:257 modules/process/straighten_path.c:270
#: modules/process/unrotate.c:277 modules/tools/linestats.c:400
-#: modules/tools/profile.c:555 modules/tools/roughness.c:864
-#: modules/tools/sfunctions.c:468 modules/xyz/xyz_raster.c:632
+#: modules/tools/profile.c:552 modules/tools/roughness.c:879
+#: modules/tools/sfunctions.c:481 modules/xyz/xyz_raster.c:601
msgid "_Interpolation type:"
msgstr "Typ _interpolace:"
-#: modules/file/imgexport.c:3807
+#: modules/file/imgexport.c:3772
msgid "Draw _frame"
msgstr "Kreslit orá_mování"
-#: modules/file/imgexport.c:3816
+#: modules/file/imgexport.c:3781
msgid "Draw _mask"
msgstr "Nakreslit _masku"
-#: modules/file/imgexport.c:3826
+#: modules/file/imgexport.c:3791
msgid "Draw mask _legend"
msgstr "Kreslit _legendu masky"
-#: modules/file/imgexport.c:3861
+#: modules/file/imgexport.c:3819
msgid "Value Scale"
msgstr "Škála hodnot"
-#: modules/file/imgexport.c:3882
+#: modules/file/imgexport.c:3840
msgid "Fi_xed precision:"
msgstr "Pe_vná přesnost:"
-#: modules/file/imgexport.c:3898
+#: modules/file/imgexport.c:3855
msgid "Fixed _kilo threshold:"
msgstr "Pevný práh pro _kilo:"
-#: modules/file/imgexport.c:3914 modules/file/imgexport.c:4635
+#: modules/file/imgexport.c:3869 modules/file/imgexport.c:4583
msgid "Title"
msgstr "Název"
-#: modules/file/imgexport.c:3918
+#: modules/file/imgexport.c:3877
msgid "Posi_tion:"
msgstr "Polo_ha:"
-#: modules/file/imgexport.c:3934
+#: modules/file/imgexport.c:3884
msgid "_Gap:"
msgstr "_Mezera:"
-#: modules/file/imgexport.c:3941
+#: modules/file/imgexport.c:3891
msgid "Put _units to title"
msgstr "Umístit _jednotky do názvu"
-#: modules/file/imgexport.c:4125
+#: modules/file/imgexport.c:4075
msgid "Draw _selection"
msgstr "Nakreslit _výběr"
-#: modules/file/imgexport.c:4176 modules/tools/selectionmanager.c:361
+#: modules/file/imgexport.c:4126 modules/tools/selectionmanager.c:361
msgid "Objects"
msgstr "Objekty"
-#: modules/file/imgexport.c:4615
+#: modules/file/imgexport.c:4563
msgid "Lateral"
msgstr "Podélné měřítko"
-#: modules/file/imgexport.c:4654 modules/file/rawfile.c:1040
-#: modules/process/calcoefs_load.c:230 modules/process/neural.c:693
+#: modules/file/imgexport.c:4602 modules/file/rawfile.c:1040
+#: modules/process/calcoefs_load.c:230 modules/process/neural.c:700
msgid "verb|_Load"
msgstr "_Načíst"
-#: modules/file/imgexport.c:4660 modules/file/rawfile.c:1046
-#: modules/process/neural.c:699
+#: modules/file/imgexport.c:4608 modules/file/rawfile.c:1046
+#: modules/process/neural.c:706
msgid "verb|_Store"
msgstr "_Uložit"
-#: modules/file/imgexport.c:4666 modules/file/rawfile.c:1052
-#: modules/process/neural.c:705
+#: modules/file/imgexport.c:4614 modules/file/rawfile.c:1052
+#: modules/process/neural.c:712
msgid "_Rename"
msgstr "_Přejmenovat"
-#: modules/file/imgexport.c:4686 modules/file/rawfile.c:1071
+#: modules/file/imgexport.c:4634 modules/file/rawfile.c:1071
msgid "Preset _name:"
msgstr "_Jméno předvolby:"
-#: modules/file/imgexport.c:4757
+#: modules/file/imgexport.c:4705
#, c-format
msgid "Export %s"
msgstr "Export %s"
-#: modules/file/imgexport.c:4778
+#: modules/file/imgexport.c:4727
msgid "Export as 1_6 bit grayscale"
msgstr "Exportovat s 16bitovou hloubkou"
-#: modules/file/imgexport.c:4801
+#: modules/file/imgexport.c:4750
msgid "Lateral Scale"
msgstr "Příčná škála"
-#: modules/file/imgexport.c:4806
+#: modules/file/imgexport.c:4755
msgid "Values"
msgstr "Hodnoty"
-#: modules/file/imgexport.c:4811
+#: modules/file/imgexport.c:4760
msgid "Selection"
msgstr "Výběr"
-#: modules/file/imgexport.c:4816 modules/file/rawfile.c:462
+#: modules/file/imgexport.c:4765 modules/file/rawfile.c:462
#: modules/process/convolution_filter.c:275
msgid "Presets"
msgstr "Předvolby"
-#: modules/file/imgexport.c:5576
+#: modules/file/imgexport.c:5525
#, c-format
msgid "Cairo error occurred: %s"
msgstr "Chyba při použití knihovny cairo: %s"
-#: modules/file/imgexport.c:5600
+#: modules/file/imgexport.c:5549
#, c-format
msgid "Pixbuf save failed: %s."
msgstr "Uložení pixbufu se nezdařilo: %s."
-#: modules/file/imgexport.c:5878
+#: modules/file/imgexport.c:5827
msgid "Image is too large to be stored as TARGA."
msgstr "Obrázek je příliš velký, než aby šel uložit jako TARGA."
-#: modules/file/imgexport.c:6457 modules/file/imgexport.c:6486
+#: modules/file/imgexport.c:6406 modules/file/imgexport.c:6435
msgid "Draw _numbers"
msgstr "Kr_eslit čísla"
-#: modules/file/imgexport.c:6469 modules/file/imgexport.c:6517
+#: modules/file/imgexport.c:6418 modules/file/imgexport.c:6466
msgid "_End marker length:"
msgstr "Délka koncových _značek:"
-#: modules/file/imgexport.c:6498
+#: modules/file/imgexport.c:6447
msgid "Marker _radius:"
msgstr "_Poloměr značky:"
@@ -4614,47 +4759,58 @@ msgstr "Množina parametrových tagů je neúplná."
msgid "image depth"
msgstr "hloubka obrázku"
-#: modules/file/iso28600.c:534
+#: modules/file/iso28600.c:543
msgid "Imports and exports ISO 28600:2011 SPM data transfer format."
msgstr "Načítá a exportuje soubory ISO 28600:2011 SPM data transfer format."
-#: modules/file/iso28600.c:550
+#: modules/file/iso28600.c:559
msgid "ISO 28600:2011 SPM data transfer files (.spm)"
msgstr "ISO 28600:2011 SPM data transfer soubory (.spm)"
-#: modules/file/iso28600.c:606
+#: modules/file/iso28600.c:658
#, c-format
-msgid "Only regular mappings are implemented but file has mapping type ‘%s’."
+msgid ""
+"Only regular and irregular mappings are implemented but the file has mapping "
+"type ‘%s’."
msgstr ""
-"Jsou implementována pouze pravidelná mapování, ale soubor má mapování typu "
-"‚%s‘."
+"Jsou implementována pouze pravidelná a nepravidelná mapování, ale soubor má "
+"mapování typu ‚%s‘."
-#: modules/file/iso28600.c:668 modules/file/iso28600.c:677
-#: modules/file/iso28600.c:686
+#: modules/file/iso28600.c:687 modules/file/iso28600.c:696
+#: modules/file/iso28600.c:705
#, c-format
msgid "List ‘%s’ has %u items which differs from the number %u given by ‘%s’."
msgstr "Seznam ‚%s‘ má %u položek, což se liší od počtu %u daného ‚%s‘."
-#: modules/file/iso28600.c:755 modules/file/iso28600.c:867
-#: modules/file/sdfile.c:846 modules/file/sdfile.c:863
-#: modules/file/spip-asc.c:239 modules/file/witec-asc.c:223
-#: modules/file/wsffile.c:215
+#: modules/file/iso28600.c:775
+#, c-format
+msgid "End of file reached when reading sample #%u of %u"
+msgstr "Soubor skončil při čtení vzorku č. %u z %u."
+
+#: modules/file/iso28600.c:784 modules/file/iso28600.c:873
+#, c-format
+msgid "Malformed data encountered when reading sample #%u"
+msgstr "Při čtení vzorku č. %u se narazilo na vadná data."
+
+#: modules/file/iso28600.c:797 modules/file/iso28600.c:887
+#: modules/file/iso28600.c:1022
+msgid "Missing end-of-data marker."
+msgstr "Chybí značka konce dat."
+
+#: modules/file/iso28600.c:1003 modules/file/sdfile.c:846
+#: modules/file/sdfile.c:863 modules/file/spip-asc.c:239
+#: modules/file/witec-asc.c:223 modules/file/wsffile.c:215
#, c-format
msgid "End of file reached when reading sample #%d of %d"
msgstr "Soubor skončil při čtení vzorku č. %d z %d."
-#: modules/file/iso28600.c:764 modules/file/iso28600.c:876
-#: modules/file/spip-asc.c:246 modules/file/witec-asc.c:230
-#: modules/file/wsffile.c:222
+#: modules/file/iso28600.c:1012 modules/file/spip-asc.c:246
+#: modules/file/witec-asc.c:230 modules/file/wsffile.c:222
#, c-format
msgid "Malformed data encountered when reading sample #%d of %d"
msgstr "Při čtení vzorku č. %d z %d se narazilo na vadná data."
-#: modules/file/iso28600.c:774 modules/file/iso28600.c:886
-msgid "Missing end-of-data marker."
-msgstr "Chybí značka konce dat."
-
-#: modules/file/iso28600.c:1048
+#: modules/file/iso28600.c:1184
#, c-format
msgid "Line %u does not contain mandatory label ‘%s’."
msgstr "Řádek %u neobsahuje povinný popisek ‚%s‘."
@@ -4671,42 +4827,60 @@ msgstr "JEOL datové soubory (.tif)"
msgid "The type of data is unknown. Please report it to the developers."
msgstr "Typ dat je neznámý. Nahlaš ho prosím vývojářům."
-#: modules/file/jpkscan.c:229
+#: modules/file/jpkscan.c:292
msgid "Imports JPK image scans."
msgstr "Načítá skeny ve formátu JPK."
-#: modules/file/jpkscan.c:242
+#: modules/file/jpkscan.c:305
msgid "JPK image scans (.jpk, .jpk-qi-image)"
msgstr "JPK obrázkový sken (.jpk, .jpk-qi-image)"
-#: modules/file/jpkscan.c:249
+#: modules/file/jpkscan.c:312
msgid "JPK force curves (.jpk-force, .jpk-force-map, .jpk-qi-data)"
msgstr "JPK silové křivky (.jpk-force, .jpk-force-map, .jpk-qi-data)"
-#: modules/file/jpkscan.c:315
+#: modules/file/jpkscan.c:378
msgid "File does not contain grid dimensions."
msgstr "Soubor neobsahuje rozměry mřížky."
-#: modules/file/jpkscan.c:660 modules/file/nanoobserver.c:193
+#: modules/file/jpkscan.c:736 modules/file/nanoobserver.c:360
#: modules/file/nanoscantech.c:205 modules/file/opengps.c:209
#: modules/file/sensofarx.c:183 modules/file/spmxfile.c:166
msgid "Minizip cannot open the file as a ZIP file."
msgstr "Minizip nedokáže otevřít soubor coby soubor ZIP."
-#: modules/file/jpkscan.c:739
+#: modules/file/jpkscan.c:758 modules/file/jpkscan.c:2717
+#, c-format
+msgid "Scanning file (%u curves)..."
+msgstr "Prohledávám soubor (%u křivek)..."
+
+#: modules/file/jpkscan.c:798 modules/file/nmmxyz.c:299
+msgid "Reading files..."
+msgstr "Načítám soubory..."
+
+#: modules/file/jpkscan.c:816
+msgid "Creating volume data..."
+msgstr "Vytvářím objemová data..."
+
+#: modules/file/jpkscan.c:968
msgid "Non-uniform point and/or segment numbering is not supported."
msgstr "Neuniformní číslování bodů a/nebo segmentů není podporováno."
-#: modules/file/jpkscan.c:748
+#: modules/file/jpkscan.c:977
msgid "Non-uniform channel lists are not supported."
msgstr "Neuniformní seznamy kanálů nejsou podporovány."
-#: modules/file/jpkscan.c:756
+#: modules/file/jpkscan.c:985
#, c-format
msgid "Data file %s was found instead of expected %s."
msgstr "Datový soubor %s byl nalezen namísto očekávaného %s."
-#: modules/file/jpkscan.c:1497
+#: modules/file/jpkscan.c:1900
+#, c-format
+msgid "Header properties file for index %u is missing."
+msgstr "Chybí hlavičkový soubor s nastaveními pro index %u."
+
+#: modules/file/jpkscan.c:2519
msgid "Cannot find any height channel."
msgstr "Nemohu najít žádný výškový kanál."
@@ -4857,19 +5031,19 @@ msgstr "MetroPro soubory (.dat)"
msgid "File header is larger than file."
msgstr "Hlavička souboru je větší než soubor."
-#: modules/file/microprof.c:117
+#: modules/file/microprof.c:125
msgid "Imports MicroProf FRT profilometer data files."
msgstr "Načítá datové soubory profilometru MicroProf FRT."
-#: modules/file/microprof.c:130
+#: modules/file/microprof.c:138
msgid "MicroProf FRT files (.frt)"
msgstr "MicroProf FRT soubory (.frt)"
-#: modules/file/microprof.c:136
+#: modules/file/microprof.c:144
msgid "MicroProf FRT text files (.txt)"
msgstr "MicroProf FRT textové soubory (.txt)"
-#: modules/file/microprof.c:432
+#: modules/file/microprof.c:519
msgid "File contains fewer than XSize*YSize data points."
msgstr "Soubor obsahuje méně než XSize*YSize datových bodů."
@@ -4957,8 +5131,8 @@ msgstr "Data obrázku začínají za koncem souboru."
msgid "Spectra data starts past the end of file."
msgstr "Data spekter začínají za koncem souboru."
-#: modules/file/nanoeducator.c:648 modules/file/opdfile.c:276
-#: modules/file/renishaw.c:1325 modules/file/sensofar.c:256
+#: modules/file/nanoeducator.c:648 modules/file/opdfile.c:287
+#: modules/file/renishaw.c:1334 modules/file/sensofar.c:256
#: modules/file/witec-asc.c:161
msgid "File header is truncated"
msgstr "Hlavička souboru je uříznutá."
@@ -4968,8 +5142,8 @@ msgstr "Hlavička souboru je uříznutá."
msgid "Parameter header is truncated"
msgstr "Parametrová hlavička je uříznutá."
-#: modules/file/nanoeducator.c:932 modules/process/curvature.c:454
-#: modules/tools/profile.c:1107
+#: modules/file/nanoeducator.c:932 modules/process/curvature.c:456
+#: modules/tools/profile.c:1090
#, c-format
msgid "Profile %d"
msgstr "Profil %d"
@@ -5049,23 +5223,27 @@ msgstr "Řádek DATA_INFO obsahuje méně než %d položek."
msgid "Missing data start marker \\x1a\\x04."
msgstr "Schází značka začátku dat \\x1a\\x04."
-#: modules/file/nanoobserver.c:113
-msgid "Reads NanoObserver .nao files."
-msgstr "Načítá datové soubory .nao NanoObserveru."
+#: modules/file/nanoobserver.c:201
+msgid "Reads Nano-Solution/NanoObserver .nao files."
+msgstr "Načítá datové soubory .nao Nano-Solution/NanoObserveru."
+
+#: modules/file/nanoobserver.c:214
+msgid "Nano-Solution/NanoObserver data (.nao)"
+msgstr "Nano-Solution/NanoObserver data (.nao)"
-#: modules/file/nanoobserver.c:126
-msgid "NanoObserver data (.nao)"
-msgstr "NanoObserver data (.nao)"
+#: modules/file/nanoobserver.c:410 modules/file/renishaw.c:1420
+msgid "Data block is truncated"
+msgstr "Blok dat je předčasně ukončený."
-#: modules/file/nanoscan.c:188
+#: modules/file/nanoscan.c:191
msgid "Imports NanoScan XML files."
msgstr "Načítá XML datové soubory NanoScan."
-#: modules/file/nanoscan.c:201
+#: modules/file/nanoscan.c:204
msgid "NanoScan XML files (.xml)"
msgstr "NanoScan XML soubory (.xml)"
-#: modules/file/nanoscan.c:910
+#: modules/file/nanoscan.c:937
msgid "Wrong size of Base64 encoded data."
msgstr "Chybná velikost Base64-zakódovaných dat."
@@ -5085,22 +5263,22 @@ msgstr "Načítá datové soubory Digital Instruments Nanoscope II."
msgid "Nanoscope II files"
msgstr "Nanoscope II soubory."
-#: modules/file/nanoscope.c:207
+#: modules/file/nanoscope.c:212
msgid ""
"Imports Veeco (Digital Instruments) Nanoscope data files, version 3 or newer."
msgstr ""
"Načítá datové soubory Veeco (Digital Instruments) Nanoscope, verze 3 a "
"novější."
-#: modules/file/nanoscope.c:221
+#: modules/file/nanoscope.c:226
msgid "Nanoscope III files"
msgstr "Nanoscope III soubory"
-#: modules/file/nanoscope.c:288
+#: modules/file/nanoscope.c:295
msgid "File is not a Nanoscope file, or it is a unknown subtype."
msgstr "Soubor není typu Nanoscope nebo je to neznámý podtyp."
-#: modules/file/nanoscope.c:295
+#: modules/file/nanoscope.c:302
msgid ""
"File has been damaged by change of line endings, resulting in corruption of "
"the binary part of the file.\n"
@@ -5118,16 +5296,16 @@ msgstr ""
"komprimované složky‘ v některých verzích MS Windows, případně jiným přenosem "
"souboru, který se pokouší ukládat textové soubory nezávisle na systému."
-#: modules/file/nanoscope.c:653 modules/file/nanoscope.c:669
+#: modules/file/nanoscope.c:660 modules/file/nanoscope.c:676
msgid "Cannot parse `Scan size' field."
msgstr "Nedaří se analyzovat položku ‚Scan size‘."
-#: modules/file/nanoscope.c:1539 modules/file/nrrdfile.c:1086
+#: modules/file/nanoscope.c:1546 modules/file/nrrdfile.c:1086
#, c-format
msgid "Garbage after data sample #%u."
msgstr "Po datovém vzorku č. %u následují nesmysly."
-#: modules/file/nanoscope.c:1595
+#: modules/file/nanoscope.c:1602
msgid "Truncated header line."
msgstr "Předčasně ukončený řádek hlavičky."
@@ -5204,11 +5382,8 @@ msgstr "Nano Measuring Machine soubory (*.dsc)"
msgid "Nano Measuring Machine data import must be run as interactive."
msgstr "Načítání dat Nano Measuring Machine musí být spuštěno interaktivně."
-#: modules/file/nmmxyz.c:299
-msgid "Reading files..."
-msgstr "Načítám soubory..."
-
#: modules/file/nmmxyz.c:306 modules/process/lat_synth.c:1224
+#: modules/process/wave_synth.c:798
msgid "Rendering surface..."
msgstr "Vykresluji povrch..."
@@ -5241,20 +5416,20 @@ msgid "Plot point density map"
msgstr "Vykreslit mapu hustoty bodů"
#: modules/file/nmmxyz.c:534 modules/file/rawfile.c:626
-#: modules/process/dimensions.h:445 modules/xyz/xyz_drift.c:725
-#: modules/xyz/xyz_raster.c:517
+#: modules/process/dimensions.h:427 modules/xyz/xyz_drift.c:725
+#: modules/xyz/xyz_raster.c:376
msgid "Resolution"
msgstr "Rozlišení"
#: modules/file/nmmxyz.c:538 modules/file/rawfile.c:631
-#: modules/process/dimensions.h:451 modules/xyz/xyz_drift.c:729
-#: modules/xyz/xyz_raster.c:521
+#: modules/process/dimensions.h:433 modules/xyz/xyz_drift.c:729
+#: modules/xyz/xyz_raster.c:382
msgid "_Horizontal size:"
msgstr "_Vodorovný rozměr:"
#: modules/file/nmmxyz.c:554 modules/file/rawfile.c:638
-#: modules/process/dimensions.h:454 modules/xyz/xyz_drift.c:744
-#: modules/xyz/xyz_raster.c:536
+#: modules/process/dimensions.h:436 modules/xyz/xyz_drift.c:744
+#: modules/xyz/xyz_raster.c:388
msgid "_Vertical size:"
msgstr "_Svislý rozměr:"
@@ -5343,38 +5518,38 @@ msgstr "Položka hlavičky %s pro jednotlivé osy má příliš mnoho částí."
msgid "Per-axis header field %s contains too few items."
msgstr "Položka hlavičky %s pro jednotlivé osy má příliš málo částí."
-#: modules/file/nt-mdt.c:843
+#: modules/file/nt-mdt.c:850
msgid "Imports NT-MDT data files."
msgstr "Načítá datové soubory NT-MDT."
-#: modules/file/nt-mdt.c:856
+#: modules/file/nt-mdt.c:863
msgid "NT-MDT files (.mdt)"
msgstr "NT-MDT soubory (.mdt)"
-#: modules/file/nt-mdt.c:1491 modules/file/nt-mdt.c:1599
+#: modules/file/nt-mdt.c:1498 modules/file/nt-mdt.c:1606
msgid "Frame is too short for Frame Mode."
msgstr "Rám je příliš krátký pro daný Frame Mode."
-#: modules/file/nt-mdt.c:1506 modules/file/nt-mdt.c:1614
+#: modules/file/nt-mdt.c:1513 modules/file/nt-mdt.c:1621
msgid "Frame is too short for dots or data."
msgstr "Rám je příliš krátký pro body či data."
-#: modules/file/nt-mdt.c:1869
+#: modules/file/nt-mdt.c:1879
#, c-format
msgid "End of file reached in frame header #%u."
msgstr "Soubor skončil v hlavičce rámu č. %u."
-#: modules/file/nt-mdt.c:1877
+#: modules/file/nt-mdt.c:1887
#, c-format
msgid "End of file reached in frame data #%u."
msgstr "Soubor skončil v datech rámu č. %u."
-#: modules/file/nt-mdt.c:1910
+#: modules/file/nt-mdt.c:1920
#, c-format
msgid "Frame #%u is too short for scanned data header."
msgstr "Rám č. %u je příliš krátký pro hlavičku dat skenu."
-#: modules/file/nt-mdt.c:1927
+#: modules/file/nt-mdt.c:1937
#, c-format
msgid "Frame #%u is too short for spectroscopy data header."
msgstr "Rám č. %u je příliš krátký pro hlavičku spektroskopických dat."
@@ -5488,28 +5663,28 @@ msgstr "Omicron MATRIX (param.mtrx & data.mtrx)"
msgid "Omicron MATRIX (.mtrx & .mtrx)"
msgstr "Omicron MATRIX (.mtrx)"
-#: modules/file/opdfile.c:188
+#: modules/file/opdfile.c:199
msgid "Imports Wyko OPD and ASC files."
msgstr "Načítá Wyko OPD a ASC soubory."
-#: modules/file/opdfile.c:201
+#: modules/file/opdfile.c:212
msgid "Wyko OPD files (.opd)"
msgstr "Wyko OPD soubory (.opd)"
-#: modules/file/opdfile.c:208
+#: modules/file/opdfile.c:219
msgid "Wyko ASCII export files (.asc)"
msgstr "Wyko exportované ASCII soubory (.asc)"
-#: modules/file/opdfile.c:299
+#: modules/file/opdfile.c:310
#, c-format
msgid "Item `%s' is beyond the end of the file."
msgstr "Položka ‚%s‘ zasahuje za konec souboru."
-#: modules/file/opdfile.c:614
+#: modules/file/opdfile.c:636
msgid "Nested directories found"
msgstr "Struktura obsahuje vnořené adresáře"
-#: modules/file/opdfile.c:805
+#: modules/file/opdfile.c:842
#, c-format
msgid "Truncated data in block %s"
msgstr "Data v bloku %s jsou uříznutá"
@@ -5809,19 +5984,21 @@ msgstr "Formát dat"
#: modules/file/rawfile.c:567 modules/process/arithmetic.c:234
#: modules/process/calcoefs_view.c:320 modules/process/coerce.c:250
-#: modules/process/convolution_filter.c:236 modules/process/deposit_synth.c:637
+#: modules/process/convolution_filter.c:236 modules/process/deposit_synth.c:638
#: modules/process/drift.c:242 modules/process/edge.c:635
-#: modules/process/entropy.c:178 modules/process/fft_filter_1d.c:183
-#: modules/process/grain_edge.c:210 modules/process/grain_filter.c:313
-#: modules/process/grain_mark.c:244 modules/process/grain_wshed.c:164
-#: modules/process/mark_disconn.c:205 modules/process/mark_with.c:195
-#: modules/process/polydistort.c:205 modules/process/scars.c:295
-#: modules/process/slope_dist.c:273 modules/process/straighten_path.c:198
-#: modules/process/synth.h:509 modules/process/tip_model.c:166
+#: modules/process/entropy.c:178 modules/process/fft_filter_1d.c:184
+#: modules/process/fractal.c:225 modules/process/grain_edge.c:209
+#: modules/process/grain_filter.c:312 modules/process/grain_mark.c:243
+#: modules/process/grain_wshed.c:165 modules/process/mark_disconn.c:205
+#: modules/process/mark_with.c:196 modules/process/mfm_field.c:278
+#: modules/process/mfm_shift.c:167 modules/process/polydistort.c:205
+#: modules/process/scars.c:314 modules/process/slope_dist.c:272
+#: modules/process/stitch.c:272 modules/process/straighten_path.c:198
+#: modules/process/synth.h:538 modules/process/tip_model.c:164
#: modules/process/wpour_mark.c:273 modules/tools/linestats.c:454
-#: modules/tools/sfunctions.c:534 modules/tools/stats.c:459
-#: modules/volume/volume_extract.c:328 modules/volume/volume_linestat.c:287
-#: modules/xyz/xyz_drift.c:618 modules/xyz/xyz_raster.c:443
+#: modules/tools/sfunctions.c:531 modules/tools/stats.c:456
+#: modules/volume/volume_extract.c:321 modules/volume/volume_linestat.c:292
+#: modules/xyz/xyz_drift.c:618 modules/xyz/xyz_raster.c:457
msgid "_Update"
msgstr "_Aktualizovat"
@@ -5968,7 +6145,7 @@ msgstr ""
"<b>Čtení selhalo</b>\n"
"Obsah souboru `%s' neodpovídá formátu: %s."
-#: modules/file/rawfile.c:1690 modules/process/neural.c:1580
+#: modules/file/rawfile.c:1690 modules/process/neural.c:1587
#, c-format
msgid "The name `%s' is invalid."
msgstr "Jméno ‚%s‘ je neplatné."
@@ -6071,7 +6248,8 @@ msgstr "XYZ data"
msgid "Import XYZ Data"
msgstr "Importovat XYZ data"
-#: modules/file/rawxyz.c:279
+#: modules/file/rawxyz.c:279 modules/graph/graph_stats.c:305
+#: modules/graph/graph_stats.c:756 modules/graph/graph_stats.c:800
msgid "Number of points:"
msgstr "Počet bodů:"
@@ -6091,7 +6269,7 @@ msgstr "Z-ový rozsah:"
msgid "_Lateral units:"
msgstr "_Jednotky rozměrů:"
-#: modules/file/rawxyz.c:386 modules/process/dimensions.h:494
+#: modules/file/rawxyz.c:386 modules/process/dimensions.h:479
msgid "_Value units:"
msgstr "Jednotky _hodnot:"
@@ -6107,18 +6285,14 @@ msgstr "Renishaw WiRE datové soubory (.wdf)"
msgid "MapArea block is truncated"
msgstr "Blok MapArea je předčasně ukončený"
-#: modules/file/renishaw.c:787
+#: modules/file/renishaw.c:793
msgid "Random points order unsupported"
msgstr "Náhodné pořadí bodů není podporováno."
-#: modules/file/renishaw.c:1396
+#: modules/file/renishaw.c:1405
msgid "Block header is truncated"
msgstr "Hlavička bloku je předčasně ukončená."
-#: modules/file/renishaw.c:1411
-msgid "Data block is truncated"
-msgstr "Blok dat je předčasně ukončený."
-
#: modules/file/rhk-sm3.c:236
msgid "Imports RHK Technology SM3 data files."
msgstr "Načítá datové soubory RHK Technology typu SM3."
@@ -6380,19 +6554,23 @@ msgstr "Načítá datové soubory SPML (Scanning Probe Microscopy Markup Languag
msgid "SPML files (.xml)"
msgstr "SPML soubory (.xml)"
-#: modules/file/spmlab.c:131
+#: modules/file/spmlab.c:175
msgid "Imports Thermicroscopes SpmLab R3 to R7 data files."
msgstr "Načítá datové soubory Thermicroscopes SpmLab R3 až R7."
-#: modules/file/spmlab.c:144
+#: modules/file/spmlab.c:188
msgid "Thermicroscopes SpmLab files"
msgstr "Thermicroscopes SpmLab soubory"
-#: modules/file/spmlab.c:231
+#: modules/file/spmlab.c:259
#, c-format
msgid "Unknown format version %c."
msgstr "Neznámá verze formátu: %c."
+#: modules/file/spmlab.c:283
+msgid "Data block is truncated."
+msgstr "Blok dat je předčasně ukončený."
+
#: modules/file/spmlabf.c:79
msgid "Imports SPMLab floating-point files."
msgstr "Načítá datové soubory SPMLab ve formátu s plovoucí čárkou."
@@ -6588,11 +6766,11 @@ msgstr "Načítá datové soubory WinSTM (.stm)."
msgid "WinSTM files (.stm)"
msgstr "WinSTM soubory (.stm)"
-#: modules/file/wipfile.c:272
+#: modules/file/wipfile.c:281
msgid "Imports WItec Project data files."
msgstr "Načítá datové soubory WItec Project."
-#: modules/file/wipfile.c:285
+#: modules/file/wipfile.c:294
msgid "WItec Project files (.wip)"
msgstr "WItec Project soubory (.wip)"
@@ -6653,21 +6831,21 @@ msgstr "Exportuje data jako jednoduchý textový XYZ soubor."
msgid "XYZ text data (.xyz)"
msgstr "XYZ textová data (.xyz)"
-#: modules/file/xyzexport.c:244
+#: modules/file/xyzexport.c:247
msgid "Lateral units:"
msgstr "Jednotky rozměrů:"
-#: modules/file/xyzexport.c:290
+#: modules/file/xyzexport.c:293
msgid "Export XYZ"
msgstr "Export jako XYZ"
-#: modules/file/xyzexport.c:340 modules/process/curvature.c:704
+#: modules/file/xyzexport.c:343 modules/process/curvature.c:700
#: modules/process/entropy.c:214 modules/process/facet-level.c:207
-#: modules/process/fit-shape.c:743 modules/process/level.c:259
-#: modules/process/linematch.c:906 modules/process/neural.c:593
-#: modules/process/polylevel.c:491 modules/process/slope_dist.c:418
-#: modules/tools/filter.c:300 modules/tools/linestats.c:436
-#: modules/tools/profile.c:591 modules/tools/sfunctions.c:516
+#: modules/process/fit-shape.c:755 modules/process/level.c:259
+#: modules/process/linematch.c:869 modules/process/neural.c:597
+#: modules/process/polylevel.c:494 modules/process/slope_dist.c:411
+#: modules/tools/filter.c:301 modules/tools/linestats.c:436
+#: modules/tools/profile.c:572 modules/tools/sfunctions.c:513
#: modules/tools/stats.c:389
msgid "Masking Mode"
msgstr "Maska"
@@ -6680,6 +6858,14 @@ msgstr "Načítá SEM obrázky Carl Zeiss."
msgid "Carl Zeiss SEM scans (.tif)"
msgstr "Carl Zeiss SEM obrázky (.tif)"
+#: modules/file/zeisslsm.c:383
+msgid "Imports Carl Zeiss CLSM images."
+msgstr "Načítá CLSM obrázky Carl Zeiss."
+
+#: modules/file/zeisslsm.c:396
+msgid "Carl Zeiss CLSM images (.lsm)"
+msgstr "Carl Zeiss CLSM obrázky (.lsm)"
+
#: modules/file/zemax.c:72
msgid "Imports Zemax grid sag data files."
msgstr "Načítá datové soubory Zemax grid sag."
@@ -6702,15 +6888,15 @@ msgstr "Kód jednotek %d je neplatný či nepodporovaný."
msgid "The first line contains too many items."
msgstr "První řádek obsahuje příliš mnoho položek."
-#: modules/graph/graph_align.c:57
+#: modules/graph/graph_align.c:60
msgid "Aligns graph curves."
msgstr "Zarovnává křivky grafu."
-#: modules/graph/graph_align.c:71
+#: modules/graph/graph_align.c:74
msgid "/_Align"
msgstr "/_Zarovnat"
-#: modules/graph/graph_align.c:74
+#: modules/graph/graph_align.c:77
msgid "Align curves"
msgstr "Zarovnání křivek grafu"
@@ -6726,48 +6912,50 @@ msgstr "/_Kritická dimenze..."
msgid "Fit critical dimension"
msgstr "Proložení kritické dimenze"
-#: modules/graph/graph_cd.c:209 modules/graph/graph_fit.c:267
+#: modules/graph/graph_cd.c:209 modules/graph/graph_fit.c:270
msgid "Fit Graph"
msgstr "Proložení funkce grafem"
-#: modules/graph/graph_cd.c:212 modules/graph/graph_fdfit.c:251
-#: modules/graph/graph_fit.c:270 modules/process/fit-shape.c:393
+#: modules/graph/graph_cd.c:212 modules/graph/graph_fdfit.c:254
+#: modules/graph/graph_fit.c:273 modules/process/fit-shape.c:394
#: modules/volume/volume_fdfit.c:299
msgid "verb|_Fit"
msgstr "_Proložit"
-#: modules/graph/graph_cd.c:262 modules/graph/graph_cut.c:166
-#: modules/graph/graph_fdfit.c:306 modules/graph/graph_fit.c:325
-#: modules/graph/graph_peaks.c:199
+#: modules/graph/graph_cd.c:262 modules/graph/graph_cut.c:168
+#: modules/graph/graph_fdfit.c:313 modules/graph/graph_fit.c:332
+#: modules/graph/graph_peaks.c:199 modules/graph/graph_stats.c:268
msgid "_Graph curve:"
msgstr "_Křivka grafu:"
-#: modules/graph/graph_cd.c:276 modules/graph/graph_fdfit.c:320
-#: modules/graph/graph_fit.c:339 modules/volume/volume_fdfit.c:405
+#: modules/graph/graph_cd.c:276 modules/graph/graph_fdfit.c:327
+#: modules/graph/graph_fit.c:346 modules/volume/volume_fdfit.c:389
msgid "F_unction:"
msgstr "_Funkce:"
-#: modules/graph/graph_cd.c:305 modules/graph/graph_fdfit.c:361
-#: modules/graph/graph_fit.c:375 modules/process/curvature.c:745
-#: modules/process/fit-shape.c:792 modules/volume/volume_fdfit.c:446
+#: modules/graph/graph_cd.c:305 modules/graph/graph_fdfit.c:368
+#: modules/graph/graph_fit.c:382 modules/process/curvature.c:742
+#: modules/process/fit-shape.c:804 modules/volume/volume_fdfit.c:422
msgid "Parameter"
msgstr "Parametr"
-#: modules/graph/graph_cd.c:307 modules/graph/graph_fdfit.c:363
-#: modules/graph/graph_fit.c:377 modules/process/fit-shape.c:794
-#: modules/volume/volume_fdfit.c:448
+#: modules/graph/graph_cd.c:307 modules/graph/graph_fdfit.c:370
+#: modules/graph/graph_fit.c:384 modules/process/fit-shape.c:806
+#: modules/volume/volume_fdfit.c:424
msgid "Error"
msgstr "Chyba"
-#: modules/graph/graph_cd.c:319 modules/graph/graph_cut.c:196
-#: modules/graph/graph_fdfit.c:415 modules/graph/graph_fit.c:433
-#: modules/volume/volume_fdfit.c:500 modules/volume/volume_linestat.c:389
+#: modules/graph/graph_cd.c:319 modules/graph/graph_cut.c:189
+#: modules/graph/graph_fdfit.c:422 modules/graph/graph_fit.c:440
+#: modules/graph/graph_stats.c:279 modules/graph/graph_stats.c:793
+#: modules/volume/volume_fdfit.c:476 modules/volume/volume_linestat.c:394
msgid "Range:"
msgstr "Rozsah:"
-#: modules/graph/graph_cd.c:330 modules/graph/graph_cut.c:207
-#: modules/graph/graph_fdfit.c:426 modules/graph/graph_fit.c:444
-#: modules/volume/volume_fdfit.c:511 modules/volume/volume_linestat.c:400
+#: modules/graph/graph_cd.c:330 modules/graph/graph_cut.c:200
+#: modules/graph/graph_fdfit.c:433 modules/graph/graph_fit.c:451
+#: modules/graph/graph_stats.c:290 modules/graph/graph_stats.c:796
+#: modules/volume/volume_fdfit.c:487 modules/volume/volume_linestat.c:405
msgid "range|to"
msgstr "až"
@@ -6775,92 +6963,92 @@ msgstr "až"
msgid "_Draw whole circle"
msgstr "Kreslit _celou kružnici"
-#: modules/graph/graph_cd.c:382 modules/graph/graph_fdfit.c:491
-#: modules/graph/graph_fit.c:531 modules/process/fit-shape.c:522
-#: modules/volume/volume_fdfit.c:573
+#: modules/graph/graph_cd.c:382 modules/graph/graph_fdfit.c:498
+#: modules/graph/graph_fit.c:538 modules/process/fit-shape.c:523
+#: modules/volume/volume_fdfit.c:549
msgid "Save Fit Report"
msgstr "Uložit výsledky"
#: modules/graph/graph_cd.c:529 modules/graph/graph_cd.c:1107
-#: modules/graph/graph_fdfit.c:709 modules/graph/graph_fit.c:763
-#: modules/volume/volume_fdfit.c:907
+#: modules/graph/graph_fdfit.c:725 modules/graph/graph_fit.c:779
+#: modules/volume/volume_fdfit.c:883
msgid "Fit"
msgstr "Proložení"
-#: modules/graph/graph_cd.c:555 modules/graph/graph_fdfit.c:749
-#: modules/graph/graph_fit.c:803 modules/volume/volume_fdfit.c:978
-#: modules/volume/volume_fdfit.c:1085
+#: modules/graph/graph_cd.c:555 modules/graph/graph_fdfit.c:765
+#: modules/graph/graph_fit.c:819 modules/volume/volume_fdfit.c:954
+#: modules/volume/volume_fdfit.c:1061
msgid "It is necessary to select more data points than free fit parameters"
msgstr "Je třeba vybrat více datových bodů, než je volných parametrů fitu."
-#: modules/graph/graph_cd.c:710 modules/graph/graph_fdfit.c:798
-#: modules/graph/graph_fit.c:852 modules/process/entropy.c:554
-#: modules/tools/grainmeasure.c:217 modules/tools/readvalue.c:634
-#: modules/tools/readvalue.c:635 modules/tools/readvalue.c:636
-#: modules/tools/readvalue.c:637 modules/tools/roughness.c:975
-#: modules/tools/stats.c:727 modules/tools/stats.c:740
-#: modules/tools/stats.c:741 modules/volume/volume_fdfit.c:1134
-#: modules/xyz/xyz_drift.c:1099 modules/xyz/xyz_drift.c:1117
-#: modules/xyz/xyz_drift.c:1134
+#: modules/graph/graph_cd.c:710 modules/graph/graph_fdfit.c:814
+#: modules/graph/graph_fit.c:868 modules/graph/graph_stats.c:663
+#: modules/process/entropy.c:555 modules/tools/grainmeasure.c:217
+#: modules/tools/readvalue.c:634 modules/tools/readvalue.c:635
+#: modules/tools/readvalue.c:636 modules/tools/readvalue.c:637
+#: modules/tools/roughness.c:984 modules/tools/stats.c:723
+#: modules/tools/stats.c:736 modules/tools/stats.c:737
+#: modules/volume/volume_fdfit.c:1110 modules/xyz/xyz_drift.c:1099
+#: modules/xyz/xyz_drift.c:1117 modules/xyz/xyz_drift.c:1134
msgid "N.A."
-msgstr "nelze použít"
+msgstr "nemá smysl"
-#: modules/graph/graph_cd.c:993 modules/graph/graph_fdfit.c:1363
-#: modules/graph/graph_fit.c:1500 modules/process/fit-shape.c:2078
-#: modules/volume/volume_fdfit.c:1720
+#: modules/graph/graph_cd.c:993 modules/graph/graph_fdfit.c:1381
+#: modules/graph/graph_fit.c:1518 modules/process/fit-shape.c:2060
+#: modules/volume/volume_fdfit.c:1696
msgid "===== Fit Results ====="
msgstr "===== Výsledek proložení ====="
-#: modules/graph/graph_cd.c:997 modules/graph/graph_fdfit.c:1367
-#: modules/graph/graph_fit.c:1504 modules/process/fit-shape.c:2080
-#: modules/volume/volume_fdfit.c:1724
+#: modules/graph/graph_cd.c:997 modules/graph/graph_fdfit.c:1385
+#: modules/graph/graph_fit.c:1522 modules/process/fit-shape.c:2062
+#: modules/volume/volume_fdfit.c:1700
#, c-format
msgid "Data: %s\n"
msgstr "Data: %s\n"
-#: modules/graph/graph_cd.c:1000 modules/graph/graph_fdfit.c:1370
-#: modules/graph/graph_fit.c:1507 modules/process/fit-shape.c:2082
-#: modules/volume/volume_fdfit.c:1727
+#: modules/graph/graph_cd.c:1000 modules/graph/graph_fdfit.c:1388
+#: modules/graph/graph_fit.c:1525 modules/process/fit-shape.c:2064
+#: modules/volume/volume_fdfit.c:1703
#, c-format
msgid "Number of points: %d of %d\n"
msgstr "Počet bodů: %d z %d\n"
-#: modules/graph/graph_cd.c:1004 modules/graph/graph_fdfit.c:1374
-#: modules/graph/graph_fit.c:1511 modules/volume/volume_fdfit.c:1731
+#: modules/graph/graph_cd.c:1004 modules/graph/graph_fdfit.c:1392
+#: modules/graph/graph_fit.c:1529 modules/volume/volume_fdfit.c:1707
#, c-format
msgid "X range: %.*f to %.*f %s\n"
msgstr "Rozsah x: %.*f až %.*f %s\n"
-#: modules/graph/graph_cd.c:1010 modules/graph/graph_fdfit.c:1380
-#: modules/graph/graph_fit.c:1517 modules/process/fit-shape.c:2084
-#: modules/volume/volume_fdfit.c:1737
+#: modules/graph/graph_cd.c:1010 modules/graph/graph_fdfit.c:1398
+#: modules/graph/graph_fit.c:1535 modules/process/fit-shape.c:2066
+#: modules/volume/volume_fdfit.c:1713
#, c-format
msgid "Fitted function: %s\n"
msgstr "Proložená funkce: %s\n"
-#: modules/graph/graph_cd.c:1013 modules/graph/graph_fdfit.c:1383
-#: modules/graph/graph_fit.c:1520 modules/process/fit-shape.c:2087
-#: modules/volume/volume_fdfit.c:1740
+#: modules/graph/graph_cd.c:1013 modules/graph/graph_fdfit.c:1401
+#: modules/graph/graph_fit.c:1538 modules/process/fit-shape.c:2069
+#: modules/volume/volume_fdfit.c:1716
msgid "Results\n"
msgstr "Výsledky\n"
-#: modules/graph/graph_cut.c:88
+#: modules/graph/graph_cut.c:87
msgid "Cut graph"
msgstr "Oříznutí grafu"
-#: modules/graph/graph_cut.c:102
+#: modules/graph/graph_cut.c:101
msgid "/_Cut..."
msgstr "/_Oříznout..."
-#: modules/graph/graph_cut.c:105
+#: modules/graph/graph_cut.c:104
msgid "Extract part of graph into new one"
msgstr "Extrahovat část grafu do nového"
-#: modules/graph/graph_cut.c:146
+#: modules/graph/graph_cut.c:145
msgid "Cut Graph"
msgstr "Oříznutí grafu"
-#: modules/graph/graph_cut.c:180
+#: modules/graph/graph_cut.c:173
msgid "Cut _all curves"
msgstr "Oříznout _všechny křivky"
@@ -6958,97 +7146,97 @@ msgstr "Export grafu do rastrového obrázku"
msgid "Export to PNG"
msgstr "Exportovat do PNG"
-#: modules/graph/graph_export_vector.c:35
+#: modules/graph/graph_export_vector.c:36
msgid "Exports graphs to PostScript"
msgstr "Exportuje grafy do PostScriptu"
-#: modules/graph/graph_export_vector.c:49
+#: modules/graph/graph_export_vector.c:50
msgid "/Export _PostScript"
msgstr "/Export do _PostScriptu"
-#: modules/graph/graph_export_vector.c:52
+#: modules/graph/graph_export_vector.c:53
msgid "Export graph to PostScript"
msgstr "Export grafu do PostScriptu"
-#: modules/graph/graph_export_vector.c:65
+#: modules/graph/graph_export_vector.c:66
msgid "Export to PostScript"
msgstr "Exportovat do PostScriptu"
-#: modules/graph/graph_fdfit.c:168
+#: modules/graph/graph_fdfit.c:169
msgid "Fit force-distance data"
msgstr "Proložit FD data"
-#: modules/graph/graph_fdfit.c:182
+#: modules/graph/graph_fdfit.c:183
msgid "/_Fit FD Curve..."
msgstr "/Proložit _FD křivku..."
-#: modules/graph/graph_fdfit.c:185
+#: modules/graph/graph_fdfit.c:186
msgid "Fit a force-distance curve"
msgstr "Proložit FD křivku"
-#: modules/graph/graph_fdfit.c:248 modules/volume/volume_fdfit.c:296
+#: modules/graph/graph_fdfit.c:251 modules/volume/volume_fdfit.c:296
msgid "Fit FD Curve"
msgstr "Proložení FD křivky"
-#: modules/graph/graph_fdfit.c:255 modules/graph/graph_fit.c:274
-#: modules/process/fit-shape.c:397 modules/process/measure_lattice.c:257
-#: modules/volume/volume_fdfit.c:303
+#: modules/graph/graph_fdfit.c:258 modules/graph/graph_fit.c:277
+#: modules/process/correct_affine.c:347 modules/process/fit-shape.c:398
+#: modules/process/measure_lattice.c:247 modules/volume/volume_fdfit.c:303
msgid "verb|_Estimate"
msgstr "Od_hadnout"
-#: modules/graph/graph_fdfit.c:257 modules/graph/graph_fit.c:276
-#: modules/volume/volume_fdfit.c:305
+#: modules/graph/graph_fdfit.c:260 modules/graph/graph_fit.c:279
+#: modules/process/psf.c:239 modules/volume/volume_fdfit.c:305
msgid "_Plot Inits"
msgstr "Vy_kreslit odhad"
-#: modules/graph/graph_fdfit.c:359 modules/graph/graph_fit.c:373
-#: modules/process/fit-shape.c:790 modules/volume/volume_fdfit.c:444
+#: modules/graph/graph_fdfit.c:366 modules/graph/graph_fit.c:380
+#: modules/process/fit-shape.c:802 modules/volume/volume_fdfit.c:420
msgid "Fix"
msgstr "Fix."
-#: modules/graph/graph_fdfit.c:365 modules/graph/graph_fit.c:379
-#: modules/volume/volume_fdfit.c:450
+#: modules/graph/graph_fdfit.c:372 modules/graph/graph_fit.c:386
+#: modules/volume/volume_fdfit.c:426
msgid "Initial"
msgstr "Poč."
-#: modules/graph/graph_fdfit.c:376 modules/graph/graph_fit.c:394
-#: modules/volume/volume_fdfit.c:461
+#: modules/graph/graph_fdfit.c:383 modules/graph/graph_fit.c:401
+#: modules/volume/volume_fdfit.c:437
msgid "χ<sup>2</sup> result:"
msgstr "Výsledné χ<sup>2</sup>:"
-#: modules/graph/graph_fdfit.c:392 modules/graph/graph_fit.c:410
-#: modules/process/fit-shape.c:469 modules/process/fit-shape.c:2134
-#: modules/volume/volume_fdfit.c:477
+#: modules/graph/graph_fdfit.c:399 modules/graph/graph_fit.c:417
+#: modules/process/fit-shape.c:470 modules/process/fit-shape.c:2116
+#: modules/volume/volume_fdfit.c:453
msgid "Correlation Matrix"
msgstr "Korelační matice"
-#: modules/graph/graph_fdfit.c:447 modules/graph/graph_fit.c:485
-#: modules/process/wpour_mark.c:410 modules/volume/volume_fdfit.c:532
+#: modules/graph/graph_fdfit.c:454 modules/graph/graph_fit.c:492
+#: modules/process/wpour_mark.c:410 modules/volume/volume_fdfit.c:508
msgid "Instant:"
msgstr "Okamžitě:"
-#: modules/graph/graph_fdfit.c:450 modules/graph/graph_fit.c:488
+#: modules/graph/graph_fdfit.c:457 modules/graph/graph_fit.c:495
msgid "esti_mate"
msgstr "od_hadovat"
-#: modules/graph/graph_fdfit.c:457 modules/graph/graph_fit.c:495
-#: modules/volume/volume_fdfit.c:542
+#: modules/graph/graph_fdfit.c:464 modules/graph/graph_fit.c:502
+#: modules/volume/volume_fdfit.c:518
msgid "p_lot"
msgstr "_kreslit"
-#: modules/graph/graph_fdfit.c:708 modules/graph/graph_fit.c:762
-#: modules/volume/volume_fdfit.c:906
+#: modules/graph/graph_fdfit.c:724 modules/graph/graph_fit.c:778
+#: modules/volume/volume_fdfit.c:882
msgid "Estimate"
msgstr "Odhad"
-#: modules/graph/graph_fdfit.c:1410 modules/graph/graph_fit.c:1547
-#: modules/volume/volume_fdfit.c:1768
+#: modules/graph/graph_fdfit.c:1428 modules/graph/graph_fit.c:1565
+#: modules/volume/volume_fdfit.c:1744
#, c-format
msgid "Residual sum: %g\n"
msgstr "Suma čtverců: %g\n"
-#: modules/graph/graph_fdfit.c:1413 modules/graph/graph_fit.c:1550
-#: modules/volume/volume_fdfit.c:1771
+#: modules/graph/graph_fdfit.c:1431 modules/graph/graph_fit.c:1568
+#: modules/volume/volume_fdfit.c:1747
msgid "Correlation matrix\n"
msgstr "Korelační matice\n"
@@ -7064,27 +7252,27 @@ msgstr "/_Filtr"
msgid "Remove noise from graph curves"
msgstr "Odstranit šum z křivek grafu"
-#: modules/graph/graph_fit.c:181
+#: modules/graph/graph_fit.c:182
msgid "Fit graph with function"
msgstr "Proložení funkce grafem"
-#: modules/graph/graph_fit.c:195
+#: modules/graph/graph_fit.c:196
msgid "/_Fit Function..."
msgstr "/Proložit _funkci..."
-#: modules/graph/graph_fit.c:198
+#: modules/graph/graph_fit.c:199
msgid "Fit a function on graph data"
msgstr "Proložení funkce daty grafu"
-#: modules/graph/graph_fit.c:386
+#: modules/graph/graph_fit.c:393
msgid "Copy all fitted values to estimates"
msgstr "Zkopírovat všechny nafitované hodnoty do odhadů"
-#: modules/graph/graph_fit.c:460
+#: modules/graph/graph_fit.c:467
msgid "Plot full range"
msgstr "Kreslit plný rozsah"
-#: modules/graph/graph_fit.c:470
+#: modules/graph/graph_fit.c:477
msgid "Create a difference graph"
msgstr "Vytvořit graf rozdílu"
@@ -7168,52 +7356,135 @@ msgstr "/Najít _píky..."
msgid "Find graph curve peaks"
msgstr "Najít píky na křivce"
-#: modules/graph/graph_peaks.c:157
+#: modules/graph/graph_peaks.c:155
msgid "Prominence"
msgstr "Význačnost"
-#: modules/graph/graph_peaks.c:161
+#: modules/graph/graph_peaks.c:159
msgid "Zero"
msgstr "Nula"
-#: modules/graph/graph_peaks.c:162
+#: modules/graph/graph_peaks.c:160
msgid "Bilateral minimum"
msgstr "Dvojstranné minimum"
-#: modules/graph/graph_peaks.c:178
+#: modules/graph/graph_peaks.c:176
msgid "Graph Peaks"
msgstr "Píky na grafu"
-#: modules/graph/graph_peaks.c:212
+#: modules/graph/graph_peaks.c:209
msgid "_Background type:"
msgstr "Typ _pozadí:"
-#: modules/graph/graph_peaks.c:227
+#: modules/graph/graph_peaks.c:219
msgid "Order peaks _by:"
msgstr "Řa_dit píky podle:"
-#: modules/graph/graph_peaks.c:242
+#: modules/graph/graph_peaks.c:225
msgid "Number of _peaks:"
msgstr "Počet píků:"
-#: modules/graph/graph_peaks.c:263 modules/process/curvature.c:773
-#: modules/process/grain_stat.c:360 modules/process/measure_lattice.c:396
-#: modules/process/polylevel.c:607 modules/tools/distance.c:259
-#: modules/tools/roughness.c:818 modules/tools/stats.c:450
+#: modules/graph/graph_peaks.c:245 modules/graph/graph_stats.c:367
+#: modules/process/curvature.c:770 modules/process/grain_stat.c:360
+#: modules/process/measure_lattice.c:390 modules/process/polylevel.c:610
+#: modules/tools/distance.c:259 modules/tools/roughness.c:819
+#: modules/tools/stats.c:447
msgid "Save table to a file"
msgstr "Uložit tabulku do souboru"
-#: modules/graph/graph_peaks.c:267 modules/process/curvature.c:778
-#: modules/process/grain_stat.c:365 modules/process/measure_lattice.c:400
-#: modules/process/polylevel.c:617 modules/tools/distance.c:264
-#: modules/tools/roughness.c:823 modules/tools/stats.c:455
+#: modules/graph/graph_peaks.c:249 modules/graph/graph_stats.c:371
+#: modules/process/curvature.c:775 modules/process/grain_stat.c:365
+#: modules/process/measure_lattice.c:394 modules/process/polylevel.c:620
+#: modules/tools/distance.c:264 modules/tools/roughness.c:824
+#: modules/tools/stats.c:452
msgid "Copy table to clipboard"
msgstr "Zkopírovat tabulku do schránky"
-#: modules/graph/graph_peaks.c:654
+#: modules/graph/graph_peaks.c:618
msgid "Save Peak Parameters"
msgstr "Uložit parametry píků"
+#: modules/graph/graph_stats.c:148 modules/graph/graph_stats.c:161
+#: modules/tools/stats.c:205
+msgid "Average value:"
+msgstr "Střední hodnota:"
+
+#: modules/graph/graph_stats.c:149 modules/tools/stats.c:206
+msgid "Median:"
+msgstr "Medián:"
+
+#: modules/graph/graph_stats.c:150
+msgid "Ra:"
+msgstr "Ra:"
+
+#: modules/graph/graph_stats.c:151
+msgid "Rms (Rq):"
+msgstr "Rms (Rq):"
+
+#: modules/graph/graph_stats.c:152 modules/tools/stats.c:210
+msgid "Skew:"
+msgstr "Šikmost:"
+
+#: modules/graph/graph_stats.c:153 modules/tools/stats.c:211
+msgid "Kurtosis:"
+msgstr "Špičatost:"
+
+#: modules/graph/graph_stats.c:158
+msgid "Projected length:"
+msgstr "Projektovaná délka:"
+
+#: modules/graph/graph_stats.c:159
+msgid "Developed length:"
+msgstr "Rozvinutá délka:"
+
+#: modules/graph/graph_stats.c:160 modules/tools/stats.c:214
+msgid "Variation:"
+msgstr "Variace:"
+
+#: modules/graph/graph_stats.c:162
+msgid "Area under curve:"
+msgstr "Plocha pod křivkou:"
+
+#: modules/graph/graph_stats.c:163
+msgid "Positive area:"
+msgstr "Kladná plocha:"
+
+#: modules/graph/graph_stats.c:164
+msgid "Negative area:"
+msgstr "Záporná plocha:"
+
+#: modules/graph/graph_stats.c:165
+msgid "Root mean square:"
+msgstr "Střední kvadrát:"
+
+#: modules/graph/graph_stats.c:171
+msgid "Calculates simple graph curve statistics."
+msgstr "Počítá jednoduché statistické charakteristiky křivek grafu."
+
+#: modules/graph/graph_stats.c:185
+msgid "/_Statistics..."
+msgstr "/S_tatistika..."
+
+#: modules/graph/graph_stats.c:188
+msgid "Calculate graph curve statistics"
+msgstr "Spočítat statistiky křivek grafu"
+
+#: modules/graph/graph_stats.c:241
+msgid "Graph Statistics"
+msgstr "Statistika grafu"
+
+#: modules/graph/graph_stats.c:320 modules/graph/graph_stats.c:807
+msgid "Simple Parameters"
+msgstr "Jednoduché parametry"
+
+#: modules/graph/graph_stats.c:342 modules/graph/graph_stats.c:826
+msgid "Integrals"
+msgstr "Integrály"
+
+#: modules/graph/graph_stats.c:686
+msgid "Save Curve Statistics"
+msgstr "Uložit statistiku grafu"
+
#: modules/layer/axis.c:143
msgid "Layer allowing selection of horizontal or vertical lines."
msgstr "Vrstva umožňující výběr vodorovných nebo svislých čar."
@@ -7353,25 +7624,25 @@ msgstr "Rozdělení úhlů"
msgid "Angle Distribution"
msgstr "Rozdělení úhlů"
-#: modules/process/angle_dist.c:188 modules/process/slope_dist.c:373
+#: modules/process/angle_dist.c:188 modules/process/slope_dist.c:365
msgid "Output _size:"
msgstr "_Velikost výstupu:"
-#: modules/process/angle_dist.c:193 modules/process/grain_wshed.c:206
+#: modules/process/angle_dist.c:193 modules/process/grain_wshed.c:207
msgid "_Number of steps:"
msgstr "Počet _kroků:"
-#: modules/process/angle_dist.c:198 modules/process/slope_dist.c:380
+#: modules/process/angle_dist.c:198 modules/process/slope_dist.c:372
msgid "_Logarithmic value scale"
msgstr "_Logaritmická škála hodnot"
#: modules/process/angle_dist.c:204 modules/process/entropy.c:231
-#: modules/process/slope_dist.c:390
+#: modules/process/slope_dist.c:382
msgid "Use local plane _fitting"
msgstr "Používat lokální _prokládání rovinou"
#: modules/process/angle_dist.c:213 modules/process/entropy.c:242
-#: modules/process/slope_dist.c:401
+#: modules/process/slope_dist.c:393
msgid "_Plane size:"
msgstr "Velikost _roviny:"
@@ -7387,7 +7658,8 @@ msgstr "/M_ultidata/_Aritmetika..."
msgid "Arithmetic operations on data"
msgstr "Aritmetické operace s daty"
-#: modules/process/arithmetic.c:202 modules/process/superresolution.c:349
+#: modules/process/arithmetic.c:202 modules/process/stitch.c:234
+#: modules/process/superresolution.c:348
msgid "Calculated"
msgstr "Vypočtený"
@@ -7403,7 +7675,7 @@ msgstr "_Výraz:"
msgid "Operands"
msgstr "Operandy"
-#: modules/process/arithmetic.c:300 modules/process/dimensions.h:483
+#: modules/process/arithmetic.c:300 modules/process/dimensions.h:465
msgid "Units"
msgstr "Jednotky"
@@ -7424,15 +7696,15 @@ msgstr "Zadat jednotky výsledku explicitně"
msgid "Expression contains unknown identifiers"
msgstr "Výraz obsahuje neznámé identifikátory"
-#: modules/process/arithmetic.c:569 modules/process/superresolution.c:300
+#: modules/process/arithmetic.c:569 modules/process/superresolution.c:299
msgid "Pixel dimensions differ"
msgstr "Nekompatibilní rozlišení"
-#: modules/process/arithmetic.c:571 modules/process/superresolution.c:302
+#: modules/process/arithmetic.c:571 modules/process/superresolution.c:301
msgid "Lateral dimensions are different physical quantities"
msgstr "Příčné rozměry jsou nekompatibilní fyzikální veličiny"
-#: modules/process/arithmetic.c:574 modules/process/superresolution.c:305
+#: modules/process/arithmetic.c:574 modules/process/superresolution.c:304
msgid "Physical dimensions differ"
msgstr "Nekompatibilní fyzické rozměry"
@@ -7537,8 +7809,8 @@ msgid "Generates surfaces by ballistic deposition."
msgstr "Generuje povrchy pomocí balistické depozice."
#: modules/process/bdep_synth.c:164
-msgid "/S_ynthetic/_Ballistic..."
-msgstr "/S_yntetická/_Balistická depozice..."
+msgid "/S_ynthetic/_Deposition/_Ballistic..."
+msgstr "/S_yntetická/_Depozice/_Balistická..."
#: modules/process/bdep_synth.c:168
msgid "Generate surface by ballistic deposition"
@@ -7546,20 +7818,23 @@ msgstr "Vytvořit povrch balistickou depozicí"
#: modules/process/bdep_synth.c:239 modules/process/bdep_synth.c:596
#: modules/process/calcoefs_simple.c:636 modules/process/col_synth.c:282
-#: modules/process/col_synth.c:733 modules/process/crosscor.c:819
-#: modules/process/crosscor.c:882 modules/process/deposit_synth.c:268
-#: modules/process/deposit_synth.c:859 modules/process/diff_synth.c:304
-#: modules/process/diff_synth.c:705 modules/process/domain_synth.c:255
-#: modules/process/domain_synth.c:745 modules/process/grain_wshed.c:429
+#: modules/process/col_synth.c:734 modules/process/crosscor.c:792
+#: modules/process/crosscor.c:855 modules/process/deposit_synth.c:268
+#: modules/process/deposit_synth.c:858 modules/process/diff_synth.c:304
+#: modules/process/diff_synth.c:704 modules/process/domain_synth.c:255
+#: modules/process/domain_synth.c:745 modules/process/fibre_synth.c:357
+#: modules/process/fibre_synth.c:872 modules/process/grain_wshed.c:433
#: modules/process/lat_synth.c:491 modules/process/mark_disconn.c:148
-#: modules/process/mark_disconn.c:373 modules/process/maskcor.c:330
-#: modules/process/mcrop.c:315 modules/process/merge.c:1072
-#: modules/process/nanoindent_adjust.c:323 modules/process/neural.c:1272
-#: modules/process/pid.c:338 modules/process/superresolution.c:416
-#: modules/process/superresolution.c:505 modules/process/tip_blind.c:781
-#: modules/process/tipops.c:320 modules/process/xydenoise.c:213
-#: modules/volume/volume_kmeans.c:403 modules/volume/volume_kmedians.c:365
-#: modules/xyz/xyz_raster.c:1028 modules/xyz/xyz_raster.c:1044
+#: modules/process/mark_disconn.c:361 modules/process/maskcor.c:334
+#: modules/process/mcrop.c:314 modules/process/merge.c:1072
+#: modules/process/nanoindent_adjust.c:324 modules/process/neural.c:1279
+#: modules/process/pid.c:339 modules/process/sphere-revolve.c:269
+#: modules/process/superresolution.c:415 modules/process/superresolution.c:504
+#: modules/process/tip_blind.c:778 modules/process/tipops.c:320
+#: modules/process/wave_synth.c:305 modules/process/wave_synth.c:747
+#: modules/process/xydenoise.c:214 modules/volume/volume_kmeans.c:397
+#: modules/volume/volume_kmedians.c:363 modules/xyz/xyz_raster.c:997
+#: modules/xyz/xyz_raster.c:1013
msgid "Initializing..."
msgstr "Inicializuje se..."
@@ -7568,10 +7843,11 @@ msgstr "Inicializuje se..."
#: modules/process/deposit_synth.c:531 modules/process/deposit_synth.c:544
#: modules/process/diff_synth.c:342 modules/process/domain_synth.c:319
#: modules/process/domain_synth.c:327 modules/process/fbm_synth.c:278
-#: modules/process/fft_synth.c:314 modules/process/lat_synth.c:529
-#: modules/process/lno_synth.c:407 modules/process/noise_synth.c:311
-#: modules/process/obj_synth.c:407 modules/process/pat_synth.c:357
-#: modules/process/wave_synth.c:323
+#: modules/process/fft_synth.c:314 modules/process/fibre_synth.c:394
+#: modules/process/lat_synth.c:529 modules/process/lno_synth.c:405
+#: modules/process/noise_synth.c:309 modules/process/obj_synth.c:404
+#: modules/process/pat_synth.c:357 modules/process/phase_synth.c:518
+#: modules/process/wave_synth.c:342
msgid "Generated"
msgstr "Generovaný"
@@ -7590,50 +7866,56 @@ msgid "Progressive preview"
msgstr "Postupné náhledy"
#: modules/process/bdep_synth.c:407 modules/process/col_synth.c:458
-#: modules/process/deposit_synth.c:412 modules/process/diff_synth.c:477
+#: modules/process/deposit_synth.c:413 modules/process/diff_synth.c:477
#: modules/process/domain_synth.c:430 modules/process/fbm_synth.c:360
-#: modules/process/fft_synth.c:398 modules/process/lat_synth.c:626
-#: modules/process/lno_synth.c:490 modules/process/noise_synth.c:394
-#: modules/process/obj_synth.c:498 modules/process/pat_synth.c:442
-#: modules/process/wave_synth.c:407
+#: modules/process/fft_synth.c:398 modules/process/fibre_synth.c:479
+#: modules/process/lat_synth.c:626 modules/process/lno_synth.c:488
+#: modules/process/mfm_current.c:383 modules/process/mfm_parallel.c:384
+#: modules/process/noise_synth.c:392 modules/process/obj_synth.c:495
+#: modules/process/pat_synth.c:442 modules/process/phase_synth.c:263
+#: modules/process/wave_synth.c:426
msgid "Dimensions"
msgstr "Rozměry"
#: modules/process/bdep_synth.c:416 modules/process/col_synth.c:467
-#: modules/process/deposit_synth.c:422 modules/process/diff_synth.c:486
+#: modules/process/deposit_synth.c:425 modules/process/diff_synth.c:486
#: modules/process/domain_synth.c:438 modules/process/fbm_synth.c:371
-#: modules/process/fft_synth.c:409 modules/process/lno_synth.c:501
-#: modules/process/noise_synth.c:405 modules/process/obj_synth.c:509
-#: modules/process/pat_synth.c:454 modules/process/wave_synth.c:418
+#: modules/process/fft_synth.c:409 modules/process/fibre_synth.c:490
+#: modules/process/lno_synth.c:499 modules/process/mfm_current.c:412
+#: modules/process/mfm_parallel.c:411 modules/process/noise_synth.c:403
+#: modules/process/obj_synth.c:506 modules/process/pat_synth.c:454
+#: modules/process/phase_synth.c:274 modules/process/wave_synth.c:437
msgid "Generator"
msgstr "Generátor"
#: modules/process/bdep_synth.c:422 modules/process/col_synth.c:473
-#: modules/process/diff_synth.c:492 modules/process/lno_synth.c:1041
-#: modules/process/obj_synth.c:520
+#: modules/process/deposit_synth.c:455 modules/process/diff_synth.c:492
+#: modules/process/fibre_synth.c:502 modules/process/lno_synth.c:1041
+#: modules/process/obj_synth.c:518
msgid "Co_verage:"
msgstr "_Pokrytí:"
#: modules/process/bdep_synth.c:434 modules/process/diff_synth.c:512
-#: modules/process/domain_synth.c:514 modules/process/fbm_synth.c:412
-#: modules/process/fft_synth.c:418 modules/process/lat_synth.c:758
-#: modules/process/lno_synth.c:537 modules/process/noise_synth.c:437
-#: modules/process/obj_synth.c:579 modules/process/wave_synth.c:453
-msgid "_Like Current Channel"
-msgstr "_Jako aktuální kanál"
-
-#: modules/process/bdep_synth.c:453 modules/process/col_synth.c:541
-#: modules/process/diff_synth.c:562
+#: modules/process/domain_synth.c:514 modules/process/fbm_synth.c:411
+#: modules/process/fft_synth.c:418 modules/process/fibre_synth.c:544
+#: modules/process/lat_synth.c:758 modules/process/lno_synth.c:535
+#: modules/process/noise_synth.c:435 modules/process/obj_synth.c:577
+#: modules/process/phase_synth.c:302 modules/process/wave_synth.c:472
+msgid "_Like Current Image"
+msgstr "_Jako současný obrázek"
+
+#: modules/process/bdep_synth.c:453 modules/process/col_synth.c:542
+#: modules/process/diff_synth.c:561
msgid "Evolution"
msgstr "Vývoj"
-#: modules/process/bdep_synth.c:456 modules/process/col_synth.c:544
-#: modules/process/diff_synth.c:565
+#: modules/process/bdep_synth.c:456 modules/process/col_synth.c:545
+#: modules/process/diff_synth.c:564
msgid "Plot graphs:"
msgstr "Vykreslit grafy:"
-#: modules/process/bdep_synth.c:654 modules/process/col_synth.c:840
-#: modules/process/diff_synth.c:782
+#: modules/process/bdep_synth.c:654 modules/process/col_synth.c:841
+#: modules/process/diff_synth.c:781
msgid "Depositing particles..."
msgstr "Deponuji částice..."
@@ -7668,8 +7950,8 @@ msgstr "Nahrát kalibrační data"
msgid "Calibration name:"
msgstr "Název kalibrace"
-#: modules/process/calcoefs_load.c:254 modules/volume/volume_extract.c:433
-#: modules/volume/volume_extract.c:514
+#: modules/process/calcoefs_load.c:254 modules/volume/volume_extract.c:421
+#: modules/volume/volume_extract.c:501
msgid "No data loaded"
msgstr "Nebyla vložena žádná data"
@@ -7693,7 +7975,7 @@ msgstr "Přidat"
msgid "Load calibration data"
msgstr "Nahrát kalibrační data."
-#: modules/process/calcoefs_load.c:364 modules/volume/volume_extract.c:1073
+#: modules/process/calcoefs_load.c:364 modules/volume/volume_extract.c:1059
#, c-format
msgid "Error loading file '%s'"
msgstr "Chyba při čtení souboru '%s'"
@@ -7787,7 +8069,7 @@ msgstr "Vytváří jednoduchou mapu chyb"
msgid "Simple Error Map"
msgstr "Jednoduchá mapa chyb"
-#: modules/process/calcoefs_simple.c:343 modules/process/calcoefs_stage.c:146
+#: modules/process/calcoefs_simple.c:343 modules/process/calcoefs_stage.c:142
#: modules/process/superresolution.c:156
msgid "Operands:"
msgstr "O_perandy:"
@@ -7801,14 +8083,14 @@ msgid "Detail"
msgstr "Detail"
#: modules/process/calcoefs_simple.c:371 modules/process/calcoefs_view.c:491
-#: modules/process/calibrate.c:496 modules/process/crosscor.c:289
-#: modules/volume/volume_calibrate.c:478
+#: modules/process/calibrate.c:481 modules/process/crosscor.c:276
+#: modules/volume/volume_calibrate.c:460
msgid "_X offset:"
msgstr "Posun v _X:"
#: modules/process/calcoefs_simple.c:398 modules/process/calcoefs_view.c:517
-#: modules/process/calibrate.c:509 modules/process/crosscor.c:300
-#: modules/volume/volume_calibrate.c:491
+#: modules/process/calibrate.c:488 modules/process/crosscor.c:284
+#: modules/volume/volume_calibrate.c:467
msgid "_Y offset:"
msgstr "Posun v _Y:"
@@ -7821,7 +8103,7 @@ msgid "Y p_eriod:"
msgstr "P_erioda v Y:"
#: modules/process/calcoefs_simple.c:438 modules/process/calcoefs_view.c:529
-#: modules/volume/volume_calibrate.c:505
+#: modules/volume/volume_calibrate.c:474
msgid "_Z offset:"
msgstr "Posun v _Z:"
@@ -7853,25 +8135,25 @@ msgstr[2] "Nalezeno %d objektů"
msgid "Search canceled"
msgstr "Hledání zrušeno"
-#: modules/process/calcoefs_simple.c:638 modules/process/crosscor.c:862
-#: modules/process/maskcor.c:332 modules/process/mcrop.c:317
+#: modules/process/calcoefs_simple.c:638 modules/process/crosscor.c:835
+#: modules/process/maskcor.c:336 modules/process/mcrop.c:316
#: modules/process/merge.c:1074
msgid "Correlating..."
msgstr "Koreluji..."
-#: modules/process/calcoefs_stage.c:76
+#: modules/process/calcoefs_stage.c:72
msgid "Digital AFM data recalibration"
msgstr "Rekalibrace dat."
-#: modules/process/calcoefs_stage.c:90
+#: modules/process/calcoefs_stage.c:86
msgid "/Cali_bration/_3D Calibration/_Get From Stage map..."
msgstr "/Kali_brace/_3D Kalibrace/Získat z mapy stolku..."
-#: modules/process/calcoefs_stage.c:94
+#: modules/process/calcoefs_stage.c:90
msgid "Stage error mapping"
msgstr "Mapování chyby stolku"
-#: modules/process/calcoefs_stage.c:131
+#: modules/process/calcoefs_stage.c:127
msgid "Stage Error Map"
msgstr "Mapa chyby stolku"
@@ -7927,14 +8209,16 @@ msgstr "Z-ová poloha:"
msgid "Crop to actual data"
msgstr "Oříznout na skutečná data"
-#: modules/process/calcoefs_view.c:567 modules/process/coerce.c:369
-#: modules/process/deposit_synth.c:641 modules/process/edge.c:705
-#: modules/process/fft_filter_1d.c:299 modules/process/grain_edge.c:290
-#: modules/process/grain_filter.c:347 modules/process/grain_mark.c:372
-#: modules/process/mark_with.c:318 modules/process/polydistort.c:316
-#: modules/process/scars.c:386 modules/process/slope_dist.c:407
-#: modules/process/synth.h:513 modules/volume/volume_extract.c:424
-#: modules/volume/volume_extract.c:505 modules/volume/volume_linestat.c:422
+#: modules/process/calcoefs_view.c:567 modules/process/coerce.c:368
+#: modules/process/deposit_synth.c:642 modules/process/edge.c:705
+#: modules/process/fft_filter_1d.c:301 modules/process/grain_edge.c:277
+#: modules/process/grain_filter.c:346 modules/process/grain_mark.c:357
+#: modules/process/mark_with.c:322 modules/process/mfm_field.c:420
+#: modules/process/mfm_shift.c:216 modules/process/polydistort.c:319
+#: modules/process/psf.c:309 modules/process/scars.c:421
+#: modules/process/slope_dist.c:400 modules/process/synth.h:542
+#: modules/volume/volume_extract.c:411 modules/volume/volume_extract.c:491
+#: modules/volume/volume_linestat.c:427
msgid "I_nstant updates"
msgstr "Okamžité _aktualizace"
@@ -7975,27 +8259,27 @@ msgstr "Chyba: mimo rozsah."
msgid "Building mesh..."
msgstr "Vytváření sítě..."
-#: modules/process/calcoefs_view.c:1120 modules/tools/profile.c:1818
+#: modules/process/calcoefs_view.c:1120 modules/tools/profile.c:1867
msgid "X correction"
msgstr "X korekce"
-#: modules/process/calcoefs_view.c:1121 modules/tools/profile.c:1819
+#: modules/process/calcoefs_view.c:1121 modules/tools/profile.c:1868
msgid "Y correction"
msgstr "Y korekce"
-#: modules/process/calcoefs_view.c:1122 modules/tools/profile.c:1820
+#: modules/process/calcoefs_view.c:1122 modules/tools/profile.c:1869
msgid "Z correction"
msgstr "Z korekce"
-#: modules/process/calcoefs_view.c:1123 modules/tools/profile.c:1821
+#: modules/process/calcoefs_view.c:1123 modules/tools/profile.c:1870
msgid "X uncertainty"
msgstr "X nejistota"
-#: modules/process/calcoefs_view.c:1124 modules/tools/profile.c:1822
+#: modules/process/calcoefs_view.c:1124 modules/tools/profile.c:1871
msgid "Y uncertainty"
msgstr "Y nejistota"
-#: modules/process/calcoefs_view.c:1125 modules/tools/profile.c:1823
+#: modules/process/calcoefs_view.c:1125 modules/tools/profile.c:1872
msgid "Z uncertainty"
msgstr "Z nejistota"
@@ -8023,78 +8307,78 @@ msgstr "Při_chytit k rovině"
msgid "Delaunay"
msgstr "Delaunay"
-#: modules/process/calibrate.c:180
+#: modules/process/calibrate.c:172
msgid "Recalibrates scan lateral dimensions or value range."
msgstr "Kalibruje podélné rozměry vzorku nebo rozsah hodnot."
-#: modules/process/calibrate.c:194
+#: modules/process/calibrate.c:186
msgid "/_Basic Operations/_Dimensions and Units..."
msgstr "/_Jednoduché operace/_Rozsah a jednotky..."
-#: modules/process/calibrate.c:198 modules/volume/volume_calibrate.c:193
+#: modules/process/calibrate.c:190 modules/volume/volume_calibrate.c:193
msgid "Change physical dimensions, units or value scale"
msgstr "Kalibruje podélné rozměry vzorku nebo rozsah hodnot."
-#: modules/process/calibrate.c:357 modules/volume/volume_calibrate.c:355
+#: modules/process/calibrate.c:349 modules/volume/volume_calibrate.c:355
msgid "Recalibrated Data"
msgstr "Překalibrovaná data"
-#: modules/process/calibrate.c:390
+#: modules/process/calibrate.c:382
msgid "Dimensions and Units"
msgstr "Rozsah a jednotky"
-#: modules/process/calibrate.c:411 modules/volume/volume_calibrate.c:389
+#: modules/process/calibrate.c:405 modules/volume/volume_calibrate.c:391
msgid "New Real Dimensions"
msgstr "Nové skutečné rozměry"
-#: modules/process/calibrate.c:417
+#: modules/process/calibrate.c:415
msgid "_Match pixel size:"
msgstr "_Přizpůsobit velikost pixelu:"
-#: modules/process/calibrate.c:444 modules/volume/volume_calibrate.c:394
+#: modules/process/calibrate.c:447 modules/volume/volume_calibrate.c:397
msgid "_X range:"
msgstr "_X-ový rozsah:"
-#: modules/process/calibrate.c:473 modules/volume/volume_calibrate.c:421
+#: modules/process/calibrate.c:467 modules/volume/volume_calibrate.c:417
msgid "_Y range:"
msgstr "_Y-ový rozsah:"
-#: modules/process/calibrate.c:489
+#: modules/process/calibrate.c:472
msgid "_Square samples"
msgstr "Č_tvercové pixely"
-#: modules/process/calibrate.c:524 modules/volume/volume_calibrate.c:521
+#: modules/process/calibrate.c:496 modules/volume/volume_calibrate.c:480
msgid "Value Range"
msgstr "Rozsah hodnot"
-#: modules/process/calibrate.c:529 modules/volume/volume_calibrate.c:448
+#: modules/process/calibrate.c:502 modules/volume/volume_calibrate.c:437
msgid "_Z range:"
msgstr "_Z-ový rozsah:"
-#: modules/process/calibrate.c:558
+#: modules/process/calibrate.c:524
msgid "Z shi_ft:"
msgstr "Posun v _Z:"
-#: modules/process/calibrate.c:573 modules/volume/volume_calibrate.c:570
+#: modules/process/calibrate.c:533 modules/volume/volume_calibrate.c:515
msgid "Calibration Coefficients"
msgstr "Kalibrační koeficienty"
-#: modules/process/calibrate.c:580 modules/volume/volume_calibrate.c:577
+#: modules/process/calibrate.c:538 modules/volume/volume_calibrate.c:520
msgid "_X calibration factor:"
msgstr "Kalibrační faktor v ose _X:"
-#: modules/process/calibrate.c:590 modules/volume/volume_calibrate.c:585
+#: modules/process/calibrate.c:545 modules/volume/volume_calibrate.c:527
msgid "_Y calibration factor:"
msgstr "Kalibrační faktor v ose _Y:"
-#: modules/process/calibrate.c:600 modules/volume/volume_calibrate.c:593
+#: modules/process/calibrate.c:552 modules/volume/volume_calibrate.c:534
msgid "_Z calibration factor:"
msgstr "Kalibrační faktor v ose _Z:"
-#: modules/process/calibrate.c:613 modules/process/extend.c:293
-#: modules/tools/crop.c:213
-msgid "Create new channel"
-msgstr "Vytvořit nový kanál"
+#: modules/process/calibrate.c:567 modules/process/drift.c:389
+#: modules/process/extend.c:293 modules/tools/crop.c:213
+msgid "Create new image"
+msgstr "Vytvořit nový obrázek"
#: modules/process/coerce.c:159
msgid "Transforms surfaces to have prescribed statistical properties."
@@ -8113,13 +8397,13 @@ msgid "Coerced"
msgstr "Vynucený"
#: modules/process/coerce.c:225 modules/process/coerce.c:326
-#: modules/process/fbm_synth.c:475 modules/process/lno_synth.c:256
-#: modules/process/noise_synth.c:183
+#: modules/process/fbm_synth.c:474 modules/process/lno_synth.c:254
+#: modules/process/noise_synth.c:181
msgid "distribution|Uniform"
msgstr "Uniformní"
-#: modules/process/coerce.c:226 modules/process/fbm_synth.c:476
-#: modules/process/lno_synth.c:246 modules/process/noise_synth.c:173
+#: modules/process/coerce.c:226 modules/process/fbm_synth.c:475
+#: modules/process/lno_synth.c:244 modules/process/noise_synth.c:171
msgid "distribution|Gaussian"
msgstr "Gaussovské"
@@ -8168,12 +8452,12 @@ msgid "Number of maxima"
msgstr "Počet maxim"
#: modules/process/col_synth.c:173 modules/tools/linestats.c:178
-#: modules/volume/volume_linestat.c:154
+#: modules/volume/volume_linestat.c:156
msgid "Skew"
msgstr "Šikmost"
#: modules/process/col_synth.c:174 modules/tools/linestats.c:179
-#: modules/tools/roughness.c:386 modules/volume/volume_linestat.c:155
+#: modules/tools/roughness.c:387 modules/volume/volume_linestat.c:157
msgid "Kurtosis"
msgstr "Špičatost"
@@ -8186,8 +8470,8 @@ msgid "Generates columnar surfaces by a simple growth algorithm."
msgstr "Generuje sloupcovité povrchy pomocí jednoduchého algoritmu růstu"
#: modules/process/col_synth.c:208
-msgid "/S_ynthetic/_Columnar..."
-msgstr "/S_yntetická/_Sloupcový..."
+msgid "/S_ynthetic/_Deposition/_Columnar..."
+msgstr "/S_yntetická/_Depozice/_Sloupcová..."
#: modules/process/col_synth.c:212
msgid "Generate columnar surface"
@@ -8209,7 +8493,7 @@ msgstr "Dopad"
msgid "Inclination"
msgstr "Sklon"
-#: modules/process/col_synth.c:509 modules/process/crosscor.c:1063
+#: modules/process/col_synth.c:509 modules/process/crosscor.c:1036
msgid "Direction"
msgstr "Směr"
@@ -8217,15 +8501,15 @@ msgstr "Směr"
msgid "Relaxation type:"
msgstr "Typ relaxace:"
-#: modules/process/col_synth.c:528
+#: modules/process/col_synth.c:529
msgid "_Melting:"
msgstr "_Tání:"
-#: modules/process/col_synth.c:612
+#: modules/process/col_synth.c:613
msgid "Weak"
msgstr "Slabá"
-#: modules/process/col_synth.c:613
+#: modules/process/col_synth.c:614
msgid "Strong"
msgstr "Silná"
@@ -8257,8 +8541,8 @@ msgstr "Obecný konvoluční filtr"
msgid "Convolution Filter"
msgstr "Konvoluční filtr"
-#: modules/process/convolution_filter.c:269 modules/tools/filter.c:170
-#: modules/tools/filter.c:274
+#: modules/process/convolution_filter.c:269 modules/tools/filter.c:171
+#: modules/tools/filter.c:275
msgid "Filter"
msgstr "Filtr"
@@ -8286,7 +8570,7 @@ msgstr "HSym"
msgid "VSym"
msgstr "VSym"
-#: modules/process/correct_affine.c:231
+#: modules/process/correct_affine.c:220
msgid ""
"Corrects affine distortion of images by matching image Bravais lattice to "
"the true one."
@@ -8294,101 +8578,109 @@ msgstr ""
"Opravuje afinní pokřivení obrazů pomocí srovnání Bravaisovy mříže obrazu a "
"skutečné mříže."
-#: modules/process/correct_affine.c:246
+#: modules/process/correct_affine.c:235
msgid "/_Distortion/_Affine..."
msgstr "/P_okřivení/_Afinní..."
-#: modules/process/correct_affine.c:250
+#: modules/process/correct_affine.c:239
msgid "Correct affine distortion"
msgstr "Opravit afinní pokřivení"
-#: modules/process/correct_affine.c:298
+#: modules/process/correct_affine.c:309 modules/process/correct_affine.c:634
+msgid "Corrected"
+msgstr "Opravená"
+
+#: modules/process/correct_affine.c:343
msgid "Affine Correction"
msgstr "Afinní pokřivení"
-#: modules/process/correct_affine.c:351 modules/process/fft_filter_2d.c:530
+#: modules/process/correct_affine.c:349 modules/process/measure_lattice.c:249
+msgid "_Refine"
+msgstr "_Zpřesnit"
+
+#: modules/process/correct_affine.c:399 modules/process/fft_filter_2d.c:530
msgid "Preview Options"
msgstr "Volby náhledu"
-#: modules/process/correct_affine.c:356 modules/process/fft_filter_2d.c:535
-#: modules/process/measure_lattice.c:321
+#: modules/process/correct_affine.c:404 modules/process/fft_filter_2d.c:535
+#: modules/process/measure_lattice.c:311
msgid "Display:"
msgstr "Zobrazovat:"
-#: modules/process/correct_affine.c:364 modules/process/measure_lattice.c:329
+#: modules/process/correct_affine.c:412 modules/process/measure_lattice.c:319
#: modules/tools/grainremover.c:109
msgid "_Data"
msgstr "_Data"
-#: modules/process/correct_affine.c:365
+#: modules/process/correct_affine.c:413
msgid "2D _ACF"
msgstr "2D _ACF"
-#: modules/process/correct_affine.c:366 modules/process/drift.c:365
+#: modules/process/correct_affine.c:414 modules/process/drift.c:364
msgid "Correc_ted data"
msgstr "Opravená da_ta"
-#: modules/process/correct_affine.c:377
+#: modules/process/correct_affine.c:425
msgid "ACF zoom:"
msgstr "Zvětšení ACF:"
-#: modules/process/correct_affine.c:394 modules/process/measure_lattice.c:372
+#: modules/process/correct_affine.c:442 modules/process/measure_lattice.c:346
+msgid "Interpolate _horizontal ACF"
+msgstr "Interpolovat _vodorovnou ACF"
+
+#: modules/process/correct_affine.c:452 modules/process/measure_lattice.c:372
msgid "Lattice Vectors"
msgstr "Vektory mříže"
#. TRANSLATORS: Correct is an adjective here.
-#: modules/process/correct_affine.c:419
+#: modules/process/correct_affine.c:469
msgid "Correct Lattice"
msgstr "Správná mřížka"
-#: modules/process/correct_affine.c:423
+#: modules/process/correct_affine.c:473
msgid "_Lattice type:"
msgstr "Typ _mřížky:"
-#: modules/process/correct_affine.c:430
+#: modules/process/correct_affine.c:480
msgid "User defined"
msgstr "Zadaná uživatelem"
-#: modules/process/correct_affine.c:445
+#: modules/process/correct_affine.c:495
msgid "_Different lengths"
msgstr "Ro_zdílné délky"
-#: modules/process/correct_affine.c:474
+#: modules/process/correct_affine.c:524
msgid "Image for _ACF:"
msgstr "Obrázek pro _ACF:"
-#: modules/process/correct_affine.c:501
+#: modules/process/correct_affine.c:551
msgid "_Scaling:"
msgstr "Š_kálování:"
-#: modules/process/correct_affine.c:508
+#: modules/process/correct_affine.c:558
msgid "Exactly as specified"
msgstr "Přesně jak je zadáno"
-#: modules/process/correct_affine.c:509
+#: modules/process/correct_affine.c:560
msgid "Preserve area"
msgstr "Zachovat plochu"
-#: modules/process/correct_affine.c:510
+#: modules/process/correct_affine.c:562
msgid "Preserve X scale"
msgstr "Zachovat škálu X"
-#: modules/process/correct_affine.c:561
-msgid "Corrected"
-msgstr "Opravená"
+#: modules/process/correct_affine.c:571 modules/process/drift.c:379
+msgid "_Apply to all compatible images"
+msgstr "_Použít na všechny kompatibilní obrázky"
-#: modules/process/correct_affine.c:617 modules/process/measure_lattice.c:489
+#: modules/process/correct_affine.c:693 modules/process/measure_lattice.c:482
msgid "length"
msgstr "délka"
-#: modules/process/correct_affine.c:624 modules/process/measure_lattice.c:496
+#: modules/process/correct_affine.c:700 modules/process/measure_lattice.c:489
msgid "angle"
msgstr "úhel"
-#: modules/process/correct_affine.c:717
-msgid "Re_fine"
-msgstr "_Zpřesnit"
-
#: modules/process/crosscor.c:157
msgid "Calculates cross-correlation of two data fields."
msgstr "Počítá vzájemnou korelaci dvou datových polí."
@@ -8413,196 +8705,198 @@ msgstr "Ko_relovat s:"
msgid "Search size"
msgstr "Velikost hledání"
-#: modules/process/crosscor.c:272
-msgid "Global offset of 2nd channel"
-msgstr "Globální posun druhého kanálu"
-
-#: modules/process/crosscor.c:277
+#: modules/process/crosscor.c:267
msgid "_Guess"
msgstr "Od_hadnout"
-#: modules/process/crosscor.c:311
+#: modules/process/crosscor.c:268
+msgid "Global offset of 2nd channel"
+msgstr "Globální posun druhého kanálu"
+
+#: modules/process/crosscor.c:292
msgid "Window size"
msgstr "Velikost okna"
-#: modules/process/crosscor.c:319
+#: modules/process/crosscor.c:300
msgid "W_idth:"
msgstr "Šíř_ka"
-#: modules/process/crosscor.c:329
+#: modules/process/crosscor.c:308
msgid "Hei_ght:"
msgstr "_Výška:"
-#: modules/process/crosscor.c:342 modules/process/fft.c:405
+#: modules/process/crosscor.c:319 modules/process/fft.c:403
#: modules/process/psdf_logphi.c:268
msgid "_Windowing type:"
msgstr "Typ _okénkové funkce:"
-#: modules/process/crosscor.c:350
+#: modules/process/crosscor.c:327
msgid "All"
msgstr "Všechno"
-#: modules/process/crosscor.c:351
+#: modules/process/crosscor.c:328
msgid "Absolute"
msgstr "Absolutní vzdálenost"
-#: modules/process/crosscor.c:352
+#: modules/process/crosscor.c:329
msgid "X Distance"
msgstr "Vzdálenost v ose X"
-#: modules/process/crosscor.c:353
+#: modules/process/crosscor.c:330
msgid "Y Distance"
msgstr "Vzdálenost v ose Y"
-#: modules/process/crosscor.c:355 modules/process/crosscor.c:1077
+#: modules/process/crosscor.c:332 modules/process/crosscor.c:1050
msgid "Score"
msgstr "Skóre"
-#: modules/process/crosscor.c:357 modules/process/fft.c:395
-#: modules/process/fit-shape.c:688 modules/process/maskcor.c:176
+#: modules/process/crosscor.c:334 modules/process/fft.c:393
+#: modules/process/fit-shape.c:699 modules/process/maskcor.c:177
+#: modules/process/mfm_current.c:455 modules/process/mfm_field.c:373
+#: modules/process/mfm_parallel.c:466
msgid "Output _type:"
msgstr "T_yp výstupu:"
-#: modules/process/crosscor.c:363
+#: modules/process/crosscor.c:340
msgid "Add _low score results mask"
msgstr "Přidat _masku s nízkým skóre"
-#: modules/process/crosscor.c:374 modules/process/grain_wshed.c:223
-#: modules/process/maskcor.c:188
+#: modules/process/crosscor.c:351 modules/process/grain_wshed.c:225
+#: modules/process/maskcor.c:191
msgid "T_hreshold:"
msgstr "Prá_h:"
-#: modules/process/crosscor.c:381
+#: modules/process/crosscor.c:359
msgid "Multichannel cross-corelation"
msgstr "Vícekanálová vzájemná korelace"
-#: modules/process/crosscor.c:400
+#: modules/process/crosscor.c:378
msgid "Second _source data:"
msgstr "_Druhá zdrojová data:"
-#: modules/process/crosscor.c:417
+#: modules/process/crosscor.c:394
msgid "Correlate with:"
msgstr "Korelovat s:"
-#: modules/process/crosscor.c:424
+#: modules/process/crosscor.c:402
msgid "Postprocess:"
msgstr "Postprocess:"
-#: modules/process/crosscor.c:431
-msgid "Apply Ga_ussian filter of width: "
+#: modules/process/crosscor.c:411
+msgid "Apply Ga_ussian filter of width:"
msgstr "Použít ga_ussovský filtr o šířce:"
-#: modules/process/crosscor.c:451
+#: modules/process/crosscor.c:424
msgid "Extend results to borders"
msgstr "Rozšířit výsledek k okrajům"
-#: modules/process/crosscor.c:461
+#: modules/process/crosscor.c:433
msgid "Create corrected data from 2nd channel"
msgstr "Vytvořit opravená data z druhého kanálu"
-#: modules/process/crosscor.c:860
+#: modules/process/crosscor.c:833
msgid "Correlating first set..."
msgstr "Koreluje se první sada..."
-#: modules/process/crosscor.c:892
+#: modules/process/crosscor.c:865
msgid "Correlating second set..."
msgstr "Koreluje se druhá sada..."
-#: modules/process/crosscor.c:999
+#: modules/process/crosscor.c:972
msgid "Corrected 2nd channel"
msgstr "Opravený druhý kanál"
-#: modules/process/crosscor.c:1023
+#: modules/process/crosscor.c:996
msgid "X difference"
msgstr "Rozdíl v X"
-#: modules/process/crosscor.c:1037
+#: modules/process/crosscor.c:1010
msgid "Y difference"
msgstr "Rozdíl v Y"
-#: modules/process/crosscor.c:1050
+#: modules/process/crosscor.c:1023
msgid "Absolute difference"
msgstr "Absolutní rozdíl"
-#: modules/process/curvature.c:131
+#: modules/process/curvature.c:130
msgid "Center value"
msgstr "Hodnota ve středu"
-#: modules/process/curvature.c:132
+#: modules/process/curvature.c:131
msgid "Curvature radius 1"
msgstr "Poloměr křivosti 1"
-#: modules/process/curvature.c:133
+#: modules/process/curvature.c:132
msgid "Curvature radius 2"
msgstr "Poloměr křivosti 2"
-#: modules/process/curvature.c:134
+#: modules/process/curvature.c:133
msgid "Direction 1"
msgstr "Směr 1"
-#: modules/process/curvature.c:135
+#: modules/process/curvature.c:134
msgid "Direction 2"
msgstr "Směr 2"
-#: modules/process/curvature.c:163
+#: modules/process/curvature.c:162
msgid "Calculates overall curvature."
msgstr "Počítá celkovou křivost."
-#: modules/process/curvature.c:177
+#: modules/process/curvature.c:176
msgid "/_Level/_Curvature..."
msgstr "/_Vyrovnání/_Křivost..."
-#: modules/process/curvature.c:181
+#: modules/process/curvature.c:180
msgid "Calculate overall curvature"
msgstr "Vypočíst celkovou křivost"
-#: modules/process/curvature.c:211 modules/process/facet-level.c:118
+#: modules/process/curvature.c:210 modules/process/facet-level.c:118
#: modules/process/semsim.c:165
#, c-format
msgid "%s: Lateral dimensions and value must be the same physical quantity."
msgstr "%s: Rozměry a hodnota musejí být tatáž fyzikální veličina."
-#: modules/process/curvature.c:445
+#: modules/process/curvature.c:447
msgid "Curvature Sections"
msgstr "Řezy křivosti"
-#: modules/process/curvature.c:653
+#: modules/process/curvature.c:655
msgid "Output Type"
msgstr "Typ výstupu"
-#: modules/process/curvature.c:660
+#: modules/process/curvature.c:662
msgid "_Set selection"
msgstr "Nastavit _výběr"
-#: modules/process/curvature.c:670
+#: modules/process/curvature.c:672
msgid "_Plot graph"
msgstr "Vykreslit _graf"
-#: modules/process/curvature.c:685 modules/process/drift.c:337
-#: modules/process/fft_profile.c:310 modules/process/fractal.c:328
-#: modules/process/grain_cross.c:253 modules/process/linematch.c:885
-#: modules/process/slope_dist.c:349 modules/tools/linestats.c:418
-#: modules/tools/profile.c:573 modules/tools/roughness.c:872
-#: modules/tools/sfunctions.c:486 modules/tools/spectro.c:382
-#: modules/volume/volume_slice.c:398
-msgid "Target _graph:"
-msgstr "Cílový _graf:"
-
-#: modules/process/curvature.c:691 modules/process/drift.c:343
-#: modules/process/fft_profile.c:316 modules/process/fractal.c:334
-#: modules/process/grain_cross.c:259 modules/process/linematch.c:892
-#: modules/process/slope_dist.c:355 modules/tools/linestats.c:424
-#: modules/tools/profile.c:579 modules/tools/roughness.c:878
-#: modules/tools/sfunctions.c:492 modules/tools/spectro.c:388
-#: modules/volume/volume_slice.c:406
+#: modules/process/curvature.c:684 modules/process/drift.c:340
+#: modules/process/fft_profile.c:300 modules/process/fractal.c:308
+#: modules/process/grain_cross.c:260 modules/process/linematch.c:855
+#: modules/process/slope_dist.c:347 modules/tools/linestats.c:424
+#: modules/tools/profile.c:559 modules/tools/roughness.c:886
+#: modules/tools/sfunctions.c:488 modules/tools/spectro.c:391
+#: modules/volume/volume_slice.c:408
msgid "New graph"
msgstr "Nový graf"
-#: modules/process/curvature.c:951
+#: modules/process/curvature.c:689 modules/process/drift.c:345
+#: modules/process/fft_profile.c:306 modules/process/fractal.c:313
+#: modules/process/grain_cross.c:254 modules/process/linematch.c:860
+#: modules/process/slope_dist.c:352 modules/tools/linestats.c:418
+#: modules/tools/profile.c:563 modules/tools/roughness.c:890
+#: modules/tools/sfunctions.c:492 modules/tools/spectro.c:385
+#: modules/volume/volume_slice.c:400
+msgid "Target _graph:"
+msgstr "Cílový _graf:"
+
+#: modules/process/curvature.c:949
msgid "Axes are outside the image."
msgstr "Osy jsou mimo obrázek"
-#: modules/process/curvature.c:1018
+#: modules/process/curvature.c:1016
msgid "Save Curvature"
msgstr "Uložit křivost"
@@ -8626,8 +8920,8 @@ msgstr "CWT"
msgid "2D CWT"
msgstr "2D CWT"
-#: modules/process/cwt.c:158 modules/process/dwt.c:185
-#: modules/process/dwtanisotropy.c:209
+#: modules/process/cwt.c:159 modules/process/dwt.c:185
+#: modules/process/dwtanisotropy.c:212
msgid "_Wavelet type:"
msgstr "Typ _waveletu:"
@@ -8636,14 +8930,14 @@ msgid "Generates particles using simple dynamical model"
msgstr "Generuje částice pomocí jednoduchého dynamického modelu"
#: modules/process/deposit_synth.c:184
-msgid "/S_ynthetic/_Particles..."
-msgstr "/S_yntetická/Část_ice..."
+msgid "/S_ynthetic/_Deposition/_Particles..."
+msgstr "/S_yntetická/_Depozice/Část_ice..."
#: modules/process/deposit_synth.c:188
msgid "Generate particles using dynamical model"
msgstr "Generovat částice pomocí dynamického modelu"
-#: modules/process/deposit_synth.c:288 modules/process/deposit_synth.c:867
+#: modules/process/deposit_synth.c:288 modules/process/deposit_synth.c:866
#, c-format
msgid ""
"Not all the particles could be deposited (%u),\n"
@@ -8652,73 +8946,69 @@ msgstr ""
"Nebyly deponovány všechny částice (%u),\n"
"zkus větší počet relaxačních kroků."
-#: modules/process/deposit_synth.c:347
+#: modules/process/deposit_synth.c:348
msgid "Particle Generation"
msgstr "Generování částic"
-#: modules/process/deposit_synth.c:427
+#: modules/process/deposit_synth.c:431
msgid "Particle r_adius:"
msgstr "Poloměr čás_tice:"
-#: modules/process/deposit_synth.c:438
+#: modules/process/deposit_synth.c:443
msgid "Distribution _width:"
msgstr "Šířka _rozdělení:"
-#: modules/process/deposit_synth.c:449
-msgid "Surface _coverage:"
-msgstr "_Pokrytí povrchu:"
-
-#: modules/process/deposit_synth.c:458
+#: modules/process/deposit_synth.c:462
msgid "_Relax steps:"
msgstr "Rela_xační kroky:"
-#: modules/process/deposit_synth.c:659 modules/process/synth.h:548
+#: modules/process/deposit_synth.c:660 modules/process/synth.h:577
msgid "R_andom seed:"
msgstr "_Hnízdo náhodných čísel:"
-#: modules/process/deposit_synth.c:665 modules/process/synth.h:554
+#: modules/process/deposit_synth.c:666 modules/process/synth.h:583
msgid "seed|_New"
msgstr "_Nové"
-#: modules/process/deposit_synth.c:676
+#: modules/process/deposit_synth.c:677
msgid "Randomize"
msgstr "Znáhodn_it"
-#: modules/process/deposit_synth.c:860 modules/process/domain_synth.c:919
+#: modules/process/deposit_synth.c:859 modules/process/domain_synth.c:919
msgid "Running computation..."
msgstr "Běží výpočet..."
-#: modules/process/deposit_synth.c:865
+#: modules/process/deposit_synth.c:864
#, c-format
msgid "%d particles were deposited"
msgstr "%d částic bylo deponováno"
-#: modules/process/deposit_synth.c:1093
+#: modules/process/deposit_synth.c:1092
msgid "Initial particle set..."
msgstr "Počáteční množina částic..."
-#: modules/process/deposit_synth.c:1252
+#: modules/process/deposit_synth.c:1251
msgid "Running revise..."
msgstr "Běží relaxace..."
-#: modules/process/deposit_synth.c:1380
+#: modules/process/deposit_synth.c:1379
msgid "Error: too many particles."
msgstr "Chyba: příliš mnoho částic."
-#: modules/process/deposit_synth.c:1382
+#: modules/process/deposit_synth.c:1381
msgid "Error: no particles."
msgstr "Chyba: žádné částice."
-#: modules/process/deposit_synth.c:1384
+#: modules/process/deposit_synth.c:1383
msgid "Error: particles too large."
msgstr "Chyba: částice jsou příliš velké."
-#: modules/process/deposit_synth.c:1386
+#: modules/process/deposit_synth.c:1385
msgid "Error: particles too small."
msgstr "Chyba: částice jsou příliš malé."
#: modules/process/diff_synth.c:197 modules/tools/linestats.c:173
-#: modules/volume/volume_linestat.c:149
+#: modules/volume/volume_linestat.c:151
msgid "Variation"
msgstr "Variace"
@@ -8731,8 +9021,8 @@ msgid "Generates surfaces by diffusion limited aggregation."
msgstr "Generuje povrchy pomocí agregace omezené difúzí (DLA)."
#: modules/process/diff_synth.c:228
-msgid "/S_ynthetic/_Diffusion..."
-msgstr "/S_yntetická/_Difúze..."
+msgid "/S_ynthetic/_Deposition/_Diffusion..."
+msgstr "/S_yntetická/_Depozice/_Difúze..."
#: modules/process/diff_synth.c:232
msgid "Generate surface by diffusion limited aggregation"
@@ -8746,45 +9036,45 @@ msgstr "Agregace omezená difúzí"
msgid "_Flux:"
msgstr "_Tok:"
-#: modules/process/diff_synth.c:522
+#: modules/process/diff_synth.c:521
msgid "Probabilities"
msgstr "Pravděpodobnosti"
-#: modules/process/diff_synth.c:530
+#: modules/process/diff_synth.c:529
msgid "_Sticking:"
msgstr "_Uváznutí:"
-#: modules/process/diff_synth.c:539
+#: modules/process/diff_synth.c:538
msgid "_Activation:"
msgstr "Aktivace:"
-#: modules/process/diff_synth.c:548
+#: modules/process/diff_synth.c:547
msgid "Passing Sch_woebel:"
msgstr "Překonání Sch_woebela:"
-#: modules/process/dimensions.h:457
+#: modules/process/dimensions.h:439
msgid "S_quare image"
msgstr "Č_tvercový obrázek"
-#: modules/process/dimensions.h:489
+#: modules/process/dimensions.h:473
msgid "_Dimension units:"
msgstr "Jednotky roz_měrů:"
-#: modules/process/dimensions.h:502
-msgid "Current Channel"
-msgstr "Aktuální kanál"
+#: modules/process/dimensions.h:488
+msgid "Current Image"
+msgstr "Současný obrázek"
-#: modules/process/dimensions.h:506
-msgid "_Take Dimensions from Current Channel"
-msgstr "_Převzít rozměry z aktuálního kanálu"
+#: modules/process/dimensions.h:492
+msgid "_Take Dimensions from Current Image"
+msgstr "_Převzít rozměry ze současného obrázku"
-#: modules/process/dimensions.h:514
-msgid "_Replace the current channel"
-msgstr "Nahra_dit aktuální kanál"
+#: modules/process/dimensions.h:501
+msgid "_Replace the current image"
+msgstr "Nahra_dit současný obrázek"
-#: modules/process/dimensions.h:523
-msgid "_Start from the current channel"
-msgstr "_Začít z aktuálního kanálu"
+#: modules/process/dimensions.h:510
+msgid "_Start from the current image"
+msgstr "_Začít ze současného obrázku"
#: modules/process/domain_synth.c:158
msgid "Discrete state"
@@ -8843,13 +9133,13 @@ msgid "_Monte Carlo time step:"
msgstr "Časový krok _Monte Carlo:"
#: modules/process/domain_synth.c:504 modules/process/fft_filter_2d.c:586
-#: modules/volume/volume_slice.c:364
+#: modules/volume/volume_slice.c:366
msgid "Output Options"
msgstr "Možnosti výstupu"
#: modules/process/domain_synth.c:523 modules/process/fft_filter_2d.c:591
-#: modules/process/mask_edt.c:377 modules/process/slope_dist.c:323
-#: modules/volume/volume_linestat.c:432 modules/volume/volume_slice.c:384
+#: modules/process/mask_edt.c:211 modules/process/slope_dist.c:323
+#: modules/volume/volume_linestat.c:437 modules/volume/volume_slice.c:386
msgid "Output type:"
msgstr "Typ výstupu:"
@@ -8877,57 +9167,49 @@ msgstr "Rozsah _hledání:"
msgid "rows"
msgstr "řádků"
-#: modules/process/drift.c:304
+#: modules/process/drift.c:305
msgid "Correct _data"
msgstr "Opravit _data"
-#: modules/process/drift.c:314
+#: modules/process/drift.c:315
msgid "_Exclude linear skew"
msgstr "_Vynechat lineární zkosení"
-#: modules/process/drift.c:324
+#: modules/process/drift.c:325
msgid "Plot drift _graph"
msgstr "Nakreslit _graf driftu"
-#: modules/process/drift.c:356 modules/process/fit-shape.c:693
-#: modules/process/neural.c:548 modules/process/polydistort.c:275
+#: modules/process/drift.c:355 modules/process/fit-shape.c:705
+#: modules/process/neural.c:552 modules/process/polydistort.c:278
msgid "Preview:"
msgstr "Náhled:"
-#: modules/process/drift.c:366
+#: modules/process/drift.c:365
msgid "Drift _lines"
msgstr "_Linie driftu"
-#: modules/process/drift.c:374 modules/process/facet_analysis.c:407
-#: modules/process/grain_edge.c:285 modules/process/grain_filter.c:357
-#: modules/process/grain_mark.c:367 modules/process/grain_wshed.c:267
-#: modules/process/mark_disconn.c:310 modules/process/scars.c:381
+#: modules/process/drift.c:373 modules/process/facet_analysis.c:390
+#: modules/process/grain_edge.c:272 modules/process/grain_filter.c:356
+#: modules/process/grain_mark.c:341 modules/process/grain_wshed.c:271
+#: modules/process/mark_disconn.c:298 modules/process/scars.c:405
#: modules/process/wpour_mark.c:369
msgid "_Mask color:"
msgstr "Barva _masky"
-#: modules/process/drift.c:379
-msgid "Distribute"
-msgstr "Rozkopírovat"
-
-#: modules/process/drift.c:388
-msgid "Replace"
-msgstr "Nahradit"
-
-#: modules/process/drift.c:569
+#: modules/process/drift.c:570
msgid "Drift-corrected"
msgstr "Drift opraven"
-#: modules/process/drift.c:613
+#: modules/process/drift.c:614
msgid "Drift"
msgstr "Drift"
-#: modules/process/drift.c:614 modules/xyz/xyz_drift.c:392
+#: modules/process/drift.c:615 modules/xyz/xyz_drift.c:392
#: modules/xyz/xyz_drift.c:411 modules/xyz/xyz_drift.c:430
msgid "drift"
msgstr "drift"
-#: modules/process/drift.c:620 modules/xyz/xyz_drift.c:402
+#: modules/process/drift.c:621 modules/xyz/xyz_drift.c:402
msgid "x-axis drift"
msgstr "drift podél x"
@@ -8985,11 +9267,11 @@ msgstr "DWT anisotropie"
msgid "2D DWT Anisotropy"
msgstr "2D DWT detekce anisotropie"
-#: modules/process/dwtanisotropy.c:214
+#: modules/process/dwtanisotropy.c:218
msgid "X/Y ratio threshold:"
msgstr "práh poměru X/Y:"
-#: modules/process/dwtanisotropy.c:222
+#: modules/process/dwtanisotropy.c:226
msgid "Low level exclude limit:"
msgstr "Spodní limit rozkladu:"
@@ -9118,7 +9400,7 @@ msgstr "Detekce nespojitostí pomocí průsečíků nuly"
msgid "_Gaussian FWHM:"
msgstr "FWHM _gausiánu:"
-#: modules/process/edge.c:681 modules/process/mark_disconn.c:271
+#: modules/process/edge.c:681 modules/process/mark_disconn.c:272
msgid "_Threshold:"
msgstr "_Práh:"
@@ -9182,11 +9464,11 @@ msgstr "Entropie:"
msgid "Entropy deficit:"
msgstr "Deficit entropie:"
-#: modules/process/entropy.c:567
+#: modules/process/entropy.c:568
msgid "Entropy at scales"
msgstr "Entropie na škálách"
-#: modules/process/entropy.c:586
+#: modules/process/entropy.c:587
msgid "Best estimate"
msgstr "Nejlepší odhad"
@@ -9234,23 +9516,23 @@ msgstr "Do_prava:"
msgid "Extend _symetrically"
msgstr "Rozšířit _symetricky"
-#: modules/process/extend.c:268 modules/process/polydistort.c:256
-#: modules/xyz/xyz_raster.c:658
+#: modules/process/extend.c:268 modules/process/polydistort.c:259
+#: modules/xyz/xyz_raster.c:627
msgid "exterior|Border"
msgstr "Hranice"
-#: modules/process/extend.c:270 modules/process/polydistort.c:258
-#: modules/xyz/xyz_raster.c:660
+#: modules/process/extend.c:270 modules/process/polydistort.c:261
+#: modules/xyz/xyz_raster.c:629
msgid "exterior|Mirror"
msgstr "Zrcadlení"
-#: modules/process/extend.c:272 modules/process/polydistort.c:260
-#: modules/xyz/xyz_raster.c:662
+#: modules/process/extend.c:272 modules/process/polydistort.c:263
+#: modules/xyz/xyz_raster.c:631
msgid "exterior|Periodic"
msgstr "Periodický"
-#: modules/process/extend.c:275 modules/process/polydistort.c:263
-#: modules/xyz/xyz_raster.c:650
+#: modules/process/extend.c:275 modules/process/polydistort.c:266
+#: modules/xyz/xyz_raster.c:619
msgid "_Exterior type:"
msgstr "_Vnějšek:"
@@ -9282,11 +9564,11 @@ msgstr "Počet bodů cesty:"
msgid "There is no path selection."
msgstr "Není vybrána žádná cesta."
-#: modules/process/extract_path.c:189 modules/volume/volume_extract.c:390
+#: modules/process/extract_path.c:189 modules/volume/volume_extract.c:383
msgid "X position"
msgstr "X poloha"
-#: modules/process/extract_path.c:193 modules/volume/volume_extract.c:397
+#: modules/process/extract_path.c:193 modules/volume/volume_extract.c:389
msgid "Y position"
msgstr "Y poloha"
@@ -9299,7 +9581,7 @@ msgid "Y tangent"
msgstr "_Y-ová složka tečny"
#: modules/process/extract_path.c:392 modules/process/extract_path.c:404
-#: modules/process/pat_synth.c:1432 modules/tools/distance.c:146
+#: modules/process/pat_synth.c:1433 modules/tools/distance.c:146
msgid "Distance"
msgstr "Vzdálenosti"
@@ -9343,47 +9625,36 @@ msgstr "/_Statistika/Analýza _plošek..."
msgid "Mark areas by 2D slope"
msgstr "Označení plošek podle 2D sklonu"
-#: modules/process/facet_analysis.c:266
+#: modules/process/facet_analysis.c:270
msgid "Mark Facets"
msgstr "Označení plošek"
-#: modules/process/facet_analysis.c:269
+#: modules/process/facet_analysis.c:273
msgid "verb|_Mark"
msgstr "_Označit"
#. TRANSLATORS: The direction or line orthogonal to something.
-#: modules/process/facet_analysis.c:325
+#: modules/process/facet_analysis.c:329
msgid "Normal"
msgstr "Normála"
-#: modules/process/facet_analysis.c:333
+#: modules/process/facet_analysis.c:337
msgid "_Find Maximum"
msgstr "_Najít maximum"
-#: modules/process/facet_analysis.c:341
+#: modules/process/facet_analysis.c:345
msgid "Mean Normal"
msgstr "Střední normála"
-#: modules/process/facet_analysis.c:350
+#: modules/process/facet_analysis.c:362
msgid "Facet plane size:"
msgstr "Velikost plošky:"
-#: modules/process/facet_analysis.c:375
+#: modules/process/facet_analysis.c:370
msgid "_Tolerance:"
msgstr "_Tolerance:"
-#: modules/process/facet_analysis.c:384 modules/process/grain_edge.c:262
-#: modules/process/grain_mark.c:344 modules/process/mark_disconn.c:286
-msgid "Com_bine with existing mask"
-msgstr "Zkom_binovat s existující maskou"
-
-#: modules/process/facet_analysis.c:398 modules/process/grain_edge.c:276
-#: modules/process/grain_mark.c:358 modules/process/mark_disconn.c:301
-#: modules/process/mark_with.c:230 modules/process/mask_morph.c:210
-msgid "Operation:"
-msgstr "Operace:"
-
-#: modules/process/facet_analysis.c:415
+#: modules/process/facet_analysis.c:398
msgid ""
"Warning: Lateral and value units differ. Angles are not physically "
"meaningful."
@@ -9415,8 +9686,8 @@ msgstr "_Hurstův exponent:"
msgid "_Stationarity scale:"
msgstr "Škála _stacionarity:"
-#: modules/process/fbm_synth.c:390 modules/process/lno_synth.c:509
-#: modules/process/noise_synth.c:409
+#: modules/process/fbm_synth.c:390 modules/process/lno_synth.c:507
+#: modules/process/noise_synth.c:407
msgid "_Distribution:"
msgstr "_Rozdělení:"
@@ -9424,17 +9695,17 @@ msgstr "_Rozdělení:"
msgid "Po_wer:"
msgstr "M_ocnina"
-#: modules/process/fbm_synth.c:408 modules/process/fft_synth.c:414
-#: modules/process/lno_synth.c:533 modules/process/noise_synth.c:433
+#: modules/process/fbm_synth.c:407 modules/process/fft_synth.c:414
+#: modules/process/lno_synth.c:531 modules/process/noise_synth.c:431
msgid "_RMS:"
msgstr "_RMS:"
-#: modules/process/fbm_synth.c:477 modules/process/lno_synth.c:251
-#: modules/process/noise_synth.c:178
+#: modules/process/fbm_synth.c:476 modules/process/lno_synth.c:249
+#: modules/process/noise_synth.c:176
msgid "distribution|Exponential"
msgstr "Exponenciální"
-#: modules/process/fbm_synth.c:478
+#: modules/process/fbm_synth.c:477
msgid "distribution|Power"
msgstr "Uniformní"
@@ -9486,7 +9757,7 @@ msgstr "Imaginární"
msgid "Modulus"
msgstr "Modul FFT"
-#: modules/process/fft.c:327 modules/process/wave_synth.c:583
+#: modules/process/fft.c:327 modules/process/wave_synth.c:618
msgid "Phase"
msgstr "Fáze"
@@ -9502,63 +9773,63 @@ msgstr "_Surová transformace"
msgid "I_maginary part:"
msgstr "I_maginární část:"
-#: modules/process/fft.c:382
+#: modules/process/fft.c:380
msgid "_Inverse transform"
msgstr "_Inverzní transformace"
-#: modules/process/fft.c:411
+#: modules/process/fft.c:409
msgid "Subtract mean _value beforehand"
msgstr "Nejprve odečíst _střední hodnotu"
-#: modules/process/fft.c:422
+#: modules/process/fft.c:420
msgid "_Preserve RMS"
msgstr "_Zachovat RMS"
-#: modules/process/fft_filter_1d.c:117
+#: modules/process/fft_filter_1d.c:118
msgid "FFT filtering"
msgstr "Filtrování pomocí FFT"
-#: modules/process/fft_filter_1d.c:131
+#: modules/process/fft_filter_1d.c:132
msgid "/_Correct Data/1D _FFT Filtering..."
msgstr "/_Korekce dat/1D _FFT filtrování..."
-#: modules/process/fft_filter_1d.c:135
+#: modules/process/fft_filter_1d.c:136
msgid "1D FFT Filtering"
msgstr "1D FFT filtrování"
-#: modules/process/fft_filter_1d.c:165 modules/process/wpour_mark.c:391
+#: modules/process/fft_filter_1d.c:166 modules/process/wpour_mark.c:391
msgid "Marked"
msgstr "Označené"
-#: modules/process/fft_filter_1d.c:166
+#: modules/process/fft_filter_1d.c:167
msgid "Unmarked"
msgstr "Neoznačené"
-#: modules/process/fft_filter_1d.c:169
+#: modules/process/fft_filter_1d.c:170
msgid "Null"
msgstr "Nulovat"
-#: modules/process/fft_filter_1d.c:170
+#: modules/process/fft_filter_1d.c:171
msgid "Suppress"
msgstr "Potlačit"
-#: modules/process/fft_filter_1d.c:180
+#: modules/process/fft_filter_1d.c:181
msgid "1D FFT filter"
msgstr "1D FFT filtr"
-#: modules/process/fft_filter_1d.c:269 modules/process/linematch.c:861
+#: modules/process/fft_filter_1d.c:271 modules/process/linematch.c:828
msgid "_Direction:"
msgstr "S_měr:"
-#: modules/process/fft_filter_1d.c:277
+#: modules/process/fft_filter_1d.c:279
msgid "_Suppress type:"
msgstr "Typ _potlačení:"
-#: modules/process/fft_filter_1d.c:285
+#: modules/process/fft_filter_1d.c:287
msgid "_Filter type:"
msgstr "Typ _filtru:"
-#: modules/process/fft_filter_1d.c:513
+#: modules/process/fft_filter_1d.c:515
msgid "1D FFT Filtered Data"
msgstr "1D FFT filtrovaná data"
@@ -9578,9 +9849,10 @@ msgstr "Dvourozměrné FFT filtrování"
msgid "Filtered Data"
msgstr "Filtrovaná data"
-#: modules/process/fft_filter_2d.c:305 modules/process/fit-shape.c:594
-#: modules/process/fit-shape.c:643 modules/process/fit-shape.c:658
-#: modules/process/fit-shape.c:662 modules/process/neural.c:560
+#: modules/process/fft_filter_2d.c:305 modules/process/fit-shape.c:604
+#: modules/process/fit-shape.c:653 modules/process/fit-shape.c:668
+#: modules/process/fit-shape.c:672 modules/process/neural.c:564
+#: modules/process/psf.c:232
msgid "Difference"
msgstr "Rozdíl"
@@ -9636,7 +9908,7 @@ msgstr "Maska filtru"
msgid "_Undo"
msgstr "_Zpět"
-#: modules/process/fft_filter_2d.c:507 modules/tools/maskedit.c:556
+#: modules/process/fft_filter_2d.c:507 modules/tools/maskedit.c:562
msgid "_Fill"
msgstr "_Vyplnění"
@@ -9644,7 +9916,7 @@ msgstr "_Vyplnění"
msgid "_Snap to origin"
msgstr "Při_chytit k počátku"
-#: modules/process/fft_filter_2d.c:565 modules/process/measure_lattice.c:339
+#: modules/process/fft_filter_2d.c:565 modules/process/measure_lattice.c:329
msgid "Zoom:"
msgstr "_Zvětšení:"
@@ -9680,37 +9952,37 @@ msgstr "Vyplnit celou masku filtru"
msgid "Force shapes to center around the origin"
msgstr "Upevnit středy nových oblastí do počátku"
-#: modules/process/fft_profile.c:125
+#: modules/process/fft_profile.c:124
msgid ""
"Reads radial sections of two-dimensional power spectrum density function."
msgstr "Odečítá radiální řezy dvojrozměrné spektrální hustoty."
-#: modules/process/fft_profile.c:140
+#: modules/process/fft_profile.c:139
msgid "/_Statistics/_PSDF Section..."
msgstr "/_Statistika/Řez _PSDF..."
-#: modules/process/fft_profile.c:144
+#: modules/process/fft_profile.c:143
msgid "Read radial PSDF sections"
msgstr "Odečítání radiálních řezů PSDF"
-#: modules/process/fft_profile.c:190
+#: modules/process/fft_profile.c:189
msgid "Radial PSDF Section"
msgstr "Radiální řez PSDF"
-#: modules/process/fft_profile.c:237
+#: modules/process/fft_profile.c:236
msgid "PSDF Section"
msgstr "PSDF řez"
-#: modules/process/fft_profile.c:266 modules/process/grain_dist.c:336
-#: modules/tools/profile.c:517 modules/tools/sfunctions.c:443
-msgid "_Fix res.:"
-msgstr "Ro_zliš.:"
+#: modules/process/fft_profile.c:266 modules/process/grain_dist.c:338
+#: modules/tools/profile.c:514 modules/tools/sfunctions.c:454
+msgid "_Fixed resolution:"
+msgstr "Pevné ro_zlišení:"
-#: modules/process/fft_profile.c:279
+#: modules/process/fft_profile.c:278
msgid "_Separate curves"
msgstr "_Oddělit křivky"
-#: modules/process/fft_profile.c:496
+#: modules/process/fft_profile.c:483
#, c-format
msgid "PSDF %.0f°"
msgstr "PSDF %.0f°"
@@ -9731,11 +10003,15 @@ msgstr "Vytvořit povrch spektrální syntézou"
msgid "Spectral Synthesis"
msgstr "Spektrální syntéza"
-#: modules/process/fft_synth.c:429
+#: modules/process/fft_synth.c:430
msgid "M_inimum frequency:"
msgstr "M_inimální frekvence:"
-#: modules/process/fft_synth.c:449
+#: modules/process/fft_synth.c:430 modules/process/fft_synth.c:450
+msgid "px<sup>-1</sup>"
+msgstr "px<sup>-1</sup>"
+
+#: modules/process/fft_synth.c:450
msgid "Ma_ximum frequency:"
msgstr "Ma_ximální frekvence:"
@@ -9755,85 +10031,154 @@ msgstr "Aplikovat _lorentzovský multiplikátor"
msgid "Enable _power multiplier"
msgstr "Aplikovat mocninný multi_plikátor"
-#: modules/process/fit-shape.c:270
+#: modules/process/fibre_synth.c:256
+msgid "Semi-circle"
+msgstr "Půlkružnice"
+
+#: modules/process/fibre_synth.c:257
+msgid "Triangle"
+msgstr "Trojúhelník"
+
+#: modules/process/fibre_synth.c:258
+msgid "Rectangle"
+msgstr "Obdélník"
+
+#: modules/process/fibre_synth.c:260
+msgid "Quadratic spline"
+msgstr "Kvadratický spline"
+
+#: modules/process/fibre_synth.c:266
+msgid "Generates surfaces composed from randomly placed fibers."
+msgstr "Vytváří povrch z náhodně umístěných vláken."
+
+#: modules/process/fibre_synth.c:280
+msgid "/S_ynthetic/_Deposition/_Fibers..."
+msgstr "/S_yntetická/_Depozice/_Vlákna..."
+
+#: modules/process/fibre_synth.c:284
+msgid "Generate surface of randomly placed fibers"
+msgstr "Vytvořit povrch z náhodně umístěných vláken"
+
+#: modules/process/fibre_synth.c:420
+msgid "Random Fibers"
+msgstr "Náhodná vlákna"
+
+#: modules/process/fibre_synth.c:494 modules/process/obj_synth.c:510
+msgid "_Shape:"
+msgstr "_Tvar:"
+
+#: modules/process/fibre_synth.c:513 modules/process/obj_synth.c:529
+msgid "obj."
+msgstr "obj."
+
+#: modules/process/fibre_synth.c:553
+msgid "Scales _with width"
+msgstr "Škálova_t s šířkou"
+
+#: modules/process/fibre_synth.c:591 modules/process/synth.h:485
+msgid "Deformation"
+msgstr "Deformace"
+
+#: modules/process/fibre_synth.c:600 modules/process/lno_synth.c:852
+#: modules/process/lno_synth.c:1222 modules/process/mask_noisify.c:177
+msgid "Densi_ty:"
+msgstr "_Hustota:"
+
+#: modules/process/fibre_synth.c:607
+msgid "_Lateral:"
+msgstr "_Příčná:"
+
+#: modules/process/fibre_synth.c:614
+msgid "Le_ngthwise:"
+msgstr "_Délková:"
+
+#: modules/process/fibre_synth.c:819
+msgid "Along fiber:"
+msgstr "Podél vlákna:"
+
+#: modules/process/fibre_synth.c:1180
+msgid "Generating fibers..."
+msgstr "Generuji vlákna..."
+
+#: modules/process/fit-shape.c:264
msgid "Fits predefined geometrical shapes to data."
msgstr "Fituje definované geometrické tvary na data."
-#: modules/process/fit-shape.c:284
+#: modules/process/fit-shape.c:278
msgid "/_Level/_Fit Shape..."
msgstr "/_Vyrovnání/Proložit _tvar..."
-#: modules/process/fit-shape.c:288 modules/process/fit-shape.c:295
+#: modules/process/fit-shape.c:282 modules/process/fit-shape.c:289
msgid "Fit geometrical shapes"
msgstr "Fitovat geometrické tvary"
-#: modules/process/fit-shape.c:291
+#: modules/process/fit-shape.c:285
msgid "/_Fit Shape..."
msgstr "/Proložit _tvar..."
-#: modules/process/fit-shape.c:390
+#: modules/process/fit-shape.c:389
msgid "Fit Shape"
msgstr "Proložení tvaru"
-#: modules/process/fit-shape.c:395
+#: modules/process/fit-shape.c:396
msgid "verb|_Quick Fit"
msgstr "Proložit _narychlo"
-#: modules/process/fit-shape.c:473 modules/process/fit-shape.c:2159
+#: modules/process/fit-shape.c:474 modules/process/fit-shape.c:2141
msgid "Derived Quantities"
msgstr "Odvozené veličiny"
-#: modules/process/fit-shape.c:478 modules/process/fit-shape.c:2129
+#: modules/process/fit-shape.c:479 modules/process/fit-shape.c:2111
msgid "Mean square difference:"
msgstr "Střední kvadratická odchylka:"
-#: modules/process/fit-shape.c:580 modules/process/fit-shape.c:626
-#: modules/process/fit-shape.c:657 modules/process/fit-shape.c:661
+#: modules/process/fit-shape.c:590 modules/process/fit-shape.c:636
+#: modules/process/fit-shape.c:667 modules/process/fit-shape.c:671
msgid "Fitted shape"
msgstr "Proložený tvar"
-#: modules/process/fit-shape.c:663 modules/process/mark_disconn.c:189
-#: modules/process/scars.c:281
+#: modules/process/fit-shape.c:673 modules/process/mark_disconn.c:189
+#: modules/process/scars.c:299
msgid "Both"
msgstr "Oba"
-#: modules/process/fit-shape.c:680
+#: modules/process/fit-shape.c:690 modules/process/psf-fit.c:308
msgid "_Function type:"
msgstr "Typ _funkce:"
-#: modules/process/fit-shape.c:708
+#: modules/process/fit-shape.c:720
msgid "Show differences with _adapted color map"
msgstr "Zobrazovat rozdíly s přizpůsobenou barevnou mapou"
-#: modules/process/fit-shape.c:720
+#: modules/process/fit-shape.c:732
msgid "Full fit is _geometric"
msgstr "Plný fit je _geometrický"
-#: modules/process/fit-shape.c:757
+#: modules/process/fit-shape.c:769
msgid "Calculate differences for e_xcluded pixels"
msgstr "Počítat rozdíly i pro vynechané pixely"
-#: modules/process/fit-shape.c:804
+#: modules/process/fit-shape.c:816
msgid "_Recalculate Image"
msgstr "_Přepočítat obrázek"
-#: modules/process/fit-shape.c:811
+#: modules/process/fit-shape.c:823
msgid "Revert to _Previous Values"
msgstr "_Vrátit předchozí hodnoty"
-#: modules/process/fit-shape.c:1850
+#: modules/process/fit-shape.c:1864
msgid "Parameter estimation failed"
msgstr "Odhad parametrů se nezdařil"
-#: modules/process/fit-shape.c:1853
+#: modules/process/fit-shape.c:1867
msgid "Fit failed"
msgstr "Prokládání se nezdařilo"
-#: modules/process/fit-shape.c:1855
+#: modules/process/fit-shape.c:1869
msgid "Fit was interruped"
msgstr "Prokládání bylo přerušeno"
-#: modules/process/fit-shape.c:2115
+#: modules/process/fit-shape.c:2097
msgid "(fixed)"
msgstr "(pevný)"
@@ -9853,35 +10198,35 @@ msgstr "Vyrovnat plochou základu povrchu s vyvýšeninami"
msgid "Polynomial leveling..."
msgstr "Polynomiální vyrovnávání..."
-#: modules/process/fraccor.c:38
+#: modules/process/fraccor.c:39
msgid "Removes data under mask using fractal interpolation."
msgstr "Odstraňuje data pod maskou pomocí fraktální interpolace."
-#: modules/process/fraccor.c:52
+#: modules/process/fraccor.c:53
msgid "/_Correct Data/_Fractal Correction"
msgstr "/_Korekce dat/_Fraktální korekce"
-#: modules/process/fraccor.c:56
+#: modules/process/fraccor.c:57
msgid "Interpolate data under mask with fractal interpolation"
msgstr "Interpolovat data pod maskou fraktální interpolací"
-#: modules/process/fractal.c:134
+#: modules/process/fractal.c:130
msgid "Partitioning"
msgstr "Partitioning"
-#: modules/process/fractal.c:135
+#: modules/process/fractal.c:131
msgid "Cube counting"
msgstr "Počítání krychlí"
-#: modules/process/fractal.c:136
+#: modules/process/fractal.c:132
msgid "Triangulation"
msgstr "Triangulace"
-#: modules/process/fractal.c:137
+#: modules/process/fractal.c:133
msgid "Power spectrum"
msgstr "Spektrální hustota"
-#: modules/process/fractal.c:173
+#: modules/process/fractal.c:169
msgid ""
"Calculates fractal dimension using several methods (partitioning, box "
"counting, triangulation, power spectrum)."
@@ -9889,54 +10234,50 @@ msgstr ""
"Počítá fraktální dimenzi několika metodami (rozdělování, počítání boxů, "
"triangulace, ze spektrální hustoty)."
-#: modules/process/fractal.c:188
+#: modules/process/fractal.c:184
msgid "/_Statistics/_Fractal Dimension..."
msgstr "/_Statistika/_Fraktální dimenze..."
-#: modules/process/fractal.c:192
+#: modules/process/fractal.c:188
msgid "Calculate fractal dimension"
msgstr "Výpočet fraktální dimenze"
-#: modules/process/fractal.c:227
+#: modules/process/fractal.c:223
msgid "Fractal Dimension"
msgstr "Fraktální dimenze"
-#: modules/process/fractal.c:228
-msgid "Reco_mpute"
-msgstr "Pře_počítat"
-
-#: modules/process/fractal.c:269
+#: modules/process/fractal.c:253
msgid "_Method:"
msgstr "_Metoda:"
-#: modules/process/fractal.c:290
+#: modules/process/fractal.c:269
msgid "Fit Area"
msgstr "Oblast prokládání"
-#: modules/process/fractal.c:295
-msgid "From:"
-msgstr "Od:"
-
-#: modules/process/fractal.c:295 modules/process/fractal.c:589
-#: modules/process/fractal.c:613
+#: modules/process/fractal.c:273 modules/process/fractal.c:545
+#: modules/process/fractal.c:569
msgid "minimum"
msgstr "minimum"
-#: modules/process/fractal.c:298
-msgid "To:"
-msgstr "Do:"
+#: modules/process/fractal.c:274
+msgid "From:"
+msgstr "Od:"
-#: modules/process/fractal.c:298 modules/process/fractal.c:590
-#: modules/process/fractal.c:614
+#: modules/process/fractal.c:279 modules/process/fractal.c:546
+#: modules/process/fractal.c:570
msgid "maximum"
msgstr "maximum"
-#: modules/process/fractal.c:308 modules/process/mark_with.c:390
-#: modules/process/neural.c:559
+#: modules/process/fractal.c:280
+msgid "To:"
+msgstr "Do:"
+
+#: modules/process/fractal.c:287 modules/process/mark_with.c:394
+#: modules/process/neural.c:563
msgid "Result"
msgstr "Výsledek"
-#: modules/process/fractal.c:550
+#: modules/process/fractal.c:506
msgid "Linear fit"
msgstr "Proložená přímka"
@@ -10008,11 +10349,11 @@ msgstr ""
msgid "Grain Correlations"
msgstr "Zrnové Korelace"
-#: modules/process/grain_cross.c:240
+#: modules/process/grain_cross.c:241
msgid "_Abscissa"
msgstr "_Vodorovná osa"
-#: modules/process/grain_cross.c:244
+#: modules/process/grain_cross.c:245
msgid "O_rdinate"
msgstr "_Svislá osa"
@@ -10040,120 +10381,120 @@ msgstr "Vykreslit _grafy"
msgid "Grain Distributions"
msgstr "Rozdělení zrn"
-#: modules/process/grain_dist.c:553
+#: modules/process/grain_dist.c:547
msgid "count"
msgstr "počet"
-#: modules/process/grain_dist.c:617
+#: modules/process/grain_dist.c:611
msgid "Export Raw Grain Values"
msgstr "Exportovat surové hodnoty zrn"
-#: modules/process/grain_edge.c:100
+#: modules/process/grain_edge.c:99
msgid "Marks grains by edge detection method."
msgstr "Označuje zrna pomocí detekce hran."
-#: modules/process/grain_edge.c:114
+#: modules/process/grain_edge.c:113
msgid "/_Grains/Mark by _Edge Detection..."
msgstr "/_Zrna/Označit _detekcí hran..."
-#: modules/process/grain_edge.c:118
+#: modules/process/grain_edge.c:117
msgid "Mark grains with edge detection mechanism"
msgstr "Označit zrna pomocí detekce hran"
-#: modules/process/grain_edge.c:207
+#: modules/process/grain_edge.c:206
msgid "Mark Grains by Edge Detection"
msgstr "Vyznačení zrn detekcí hran"
-#: modules/process/grain_edge.c:245
+#: modules/process/grain_edge.c:244
msgid "Threshold"
msgstr "Práh"
-#: modules/process/grain_edge.c:249
+#: modules/process/grain_edge.c:248
msgid "_Laplacian:"
msgstr "_Laplacián:"
-#: modules/process/grain_filter.c:195
+#: modules/process/grain_filter.c:194
msgid ""
"Filters grains by their properties, using logical expressions and thresholds."
msgstr ""
"Filtruje zrna na základě jejich vlastnosti s využitím prahů a logických "
"výrazů."
-#: modules/process/grain_filter.c:210
+#: modules/process/grain_filter.c:209
msgid "/_Grains/_Filter..."
msgstr "/_Zrna/_Filtr..."
-#: modules/process/grain_filter.c:214
+#: modules/process/grain_filter.c:213
msgid "Filter grains by their properties"
msgstr "Filtrovat zrna na základě jejich vlastností"
-#: modules/process/grain_filter.c:254
+#: modules/process/grain_filter.c:253
msgid "There are no grains to filter."
msgstr "Kanál neobsahuje žádná zrna, která by šlo filtrovat."
-#: modules/process/grain_filter.c:310
+#: modules/process/grain_filter.c:309
msgid "Filter Grains"
msgstr "Filtrování zrn"
-#: modules/process/grain_filter.c:405
+#: modules/process/grain_filter.c:404
msgid "Set selected as:"
msgstr "Nastavit vybranou veličinu jako:"
-#: modules/process/grain_filter.c:420
+#: modules/process/grain_filter.c:419
msgid "Keep grains satisfying:"
msgstr "Ponechat zrna splňující:"
-#: modules/process/grain_filter.c:434 modules/process/lat_synth.c:733
+#: modules/process/grain_filter.c:440 modules/process/lat_synth.c:733
msgid "Lower threshold:"
msgstr "Spodní práh:"
-#: modules/process/grain_filter.c:469 modules/process/lat_synth.c:740
+#: modules/process/grain_filter.c:467 modules/process/lat_synth.c:740
msgid "Upper threshold:"
msgstr "Horní práh:"
#. TRANSLATORS: %c is replaced with quantity label A, B or C.
-#: modules/process/grain_filter.c:645
+#: modules/process/grain_filter.c:628
#, c-format
msgid "Condition %c: %s"
msgstr "Podmínka %c: %s"
-#: modules/process/grain_mark.c:139
+#: modules/process/grain_mark.c:137
msgid "Marks grains by thresholding (height, slope, curvature)."
msgstr "Označuje zrna podle prahu (výšky, sklonu, křivosti)."
-#: modules/process/grain_mark.c:153
+#: modules/process/grain_mark.c:151
msgid "/_Grains/_Mark by Threshold..."
msgstr "/_Zrna/_Označit zrna..."
-#: modules/process/grain_mark.c:157
+#: modules/process/grain_mark.c:155
msgid "Mark grains by threshold"
msgstr "Vyznačení zrn podle prahu"
-#: modules/process/grain_mark.c:241
+#: modules/process/grain_mark.c:240
msgid "Mark Grains by Threshold"
msgstr "Vyznačení zrn podle prahu"
-#: modules/process/grain_mark.c:281
+#: modules/process/grain_mark.c:280
msgid "Threshold by"
msgstr "Označit podle prahu:"
-#: modules/process/grain_mark.c:311
+#: modules/process/grain_mark.c:310
msgid "_Slope:"
msgstr "_Sklon:"
-#: modules/process/grain_mark.c:315
+#: modules/process/grain_mark.c:314
msgid "_Curvature:"
msgstr "_Křivost:"
-#: modules/process/grain_mark.c:324
-msgid "Criteria combination:"
-msgstr "Kombinace kritérií:"
-
-#: modules/process/grain_mark.c:328 modules/process/grain_wshed.c:256
+#: modules/process/grain_mark.c:319 modules/process/grain_wshed.c:260
#: modules/process/wpour_mark.c:358
msgid "_Invert height"
msgstr "_Invertovat výšku"
+#: modules/process/grain_mark.c:328
+msgid "Criteria combination:"
+msgstr "Kombinace kritérií:"
+
#: modules/process/grain_stat.c:54
msgid "Displays overall grain statistics."
msgstr "Zobrazuje celkové statistiky zrn"
@@ -10230,416 +10571,425 @@ msgstr "Celkový objem zrn (laplacián):"
msgid "Total projected boundary length:"
msgstr "Celková délka projektované hranice:"
-#: modules/process/grain_wshed.c:101
+#: modules/process/grain_wshed.c:102
msgid "Marks grains by watershed algorithm."
msgstr "Označuje zrna metodou stékání."
-#: modules/process/grain_wshed.c:115
+#: modules/process/grain_wshed.c:116
msgid "/_Grains/Mark by _Watershed..."
msgstr "/_Zrna/Označit metodou _stékání..."
-#: modules/process/grain_wshed.c:119
+#: modules/process/grain_wshed.c:120
msgid "Mark grains by watershed"
msgstr "Vyznačení zrn stékáním"
-#: modules/process/grain_wshed.c:161
+#: modules/process/grain_wshed.c:162
msgid "Mark Grains by Watershed"
msgstr "Vyznačení zrn stékáním"
-#: modules/process/grain_wshed.c:199
+#: modules/process/grain_wshed.c:200
msgid "Grain Location"
msgstr "Hledání pozic zrn"
-#: modules/process/grain_wshed.c:214
+#: modules/process/grain_wshed.c:216
msgid "_Drop size:"
msgstr "Velikost ka_pky:"
-#: modules/process/grain_wshed.c:230
+#: modules/process/grain_wshed.c:233
msgid "Segmentation"
msgstr "Segmentace"
-#: modules/process/grain_wshed.c:236
+#: modules/process/grain_wshed.c:239
msgid "Num_ber of steps:"
msgstr "Počet _kroků:"
-#: modules/process/grain_wshed.c:244
+#: modules/process/grain_wshed.c:248
msgid "Dr_op size:"
msgstr "Velikost k_apky:"
-#: modules/process/grain_wshed.c:435
+#: modules/process/grain_wshed.c:439
msgid "Finding minima..."
msgstr "Hledám minima..."
-#: modules/process/grain_wshed.c:437
+#: modules/process/grain_wshed.c:441
msgid "Locating..."
msgstr "Lokalizuji..."
-#: modules/process/grain_wshed.c:439
+#: modules/process/grain_wshed.c:443
msgid "Simulating watershed..."
msgstr "Simuluji stékání kapek..."
-#: modules/process/grain_wshed.c:441
+#: modules/process/grain_wshed.c:445
msgid "Marking boundaries..."
msgstr "Označuji hranice..."
-#: modules/process/hough.c:74
+#: modules/process/hough.c:76
msgid "Hough transform."
msgstr "Houghova transformace."
-#: modules/process/hough.c:88
+#: modules/process/hough.c:90
msgid "/_Integral Transforms/_Hough..."
msgstr "/_Integrální transformace/_Hough..."
-#: modules/process/hough.c:92
+#: modules/process/hough.c:94
msgid "Compute Hough transform"
msgstr "Vypočítat Houghovu transformaci"
-#: modules/process/hough.c:178
+#: modules/process/hough.c:137
+msgid "Hough line"
+msgstr "Houghova čára"
+
+#: modules/process/hough.c:141
+#, c-format
+msgid "Hough circle r=%d"
+msgstr "Houghova kružnice r=%d"
+
+#: modules/process/hough.c:173
msgid "Hough Transform"
msgstr "Houghova transformace"
-#: modules/process/hough.c:201
+#: modules/process/hough.c:195
msgid "_Transform type:"
msgstr "_Typ transformace:"
-#: modules/process/hough.c:212
+#: modules/process/hough.c:203
msgid "_Circle size:"
msgstr "Velikost _kružnice:"
-#: modules/process/immerse.c:162
+#: modules/process/immerse.c:163
msgid "Immerse high resolution detail into overall image."
msgstr "Zapustí detailní obrázek s vyšším rozlišením do hrubšího obrázku."
-#: modules/process/immerse.c:176
+#: modules/process/immerse.c:177
msgid "/M_ultidata/_Immerse Detail..."
msgstr "/M_ultidata/_Zapustit detail..."
-#: modules/process/immerse.c:180
+#: modules/process/immerse.c:181
msgid "Immerse a detail into image"
msgstr "Zapustit detail do obrázku"
-#: modules/process/immerse.c:222
+#: modules/process/immerse.c:223
msgid "Immerse Detail"
msgstr "Zapustit detail"
-#: modules/process/immerse.c:225
+#: modules/process/immerse.c:226
msgid "_Locate"
msgstr "Na_lézt"
-#: modules/process/immerse.c:227
+#: modules/process/immerse.c:228
msgid "Locate detail by full image correlation search"
msgstr "Nalézt detail korelačním prohledáním celého obrázku"
-#: modules/process/immerse.c:229
+#: modules/process/immerse.c:230
msgid "_Improve"
msgstr "Z_přesnit"
-#: modules/process/immerse.c:231
+#: modules/process/immerse.c:232
msgid "Improve detail position by correlation search in neighborhood"
msgstr "Zpřesnit polohu detailu korelačním prohledáním okolí"
-#: modules/process/immerse.c:290
+#: modules/process/immerse.c:291
msgid "_Detail image:"
msgstr "_Detailní obrázek:"
-#: modules/process/immerse.c:295
+#: modules/process/immerse.c:296
msgid "Position:"
msgstr "Poloha:"
-#: modules/process/immerse.c:308
+#: modules/process/immerse.c:314
msgid "Result Sampling"
msgstr "Škálování výsledku"
-#: modules/process/immerse.c:318
+#: modules/process/immerse.c:324
msgid "_Upsample large image"
msgstr "Z_většit velký obrázek"
-#: modules/process/immerse.c:320
+#: modules/process/immerse.c:326
msgid "_Downsample detail"
msgstr "Z_menšit detail"
-#: modules/process/immerse.c:329
+#: modules/process/immerse.c:335
msgid "Detail Leveling"
msgstr "Vyrovnání detailu"
-#: modules/process/immerse.c:339
+#: modules/process/immerse.c:345
msgid "levelling|_None"
msgstr "Žád_né"
-#: modules/process/immerse.c:341
+#: modules/process/immerse.c:347
msgid "_Mean value"
msgstr "_Střední hodnota"
-#: modules/process/immerse.c:349
+#: modules/process/immerse.c:355
msgid "Show _frame"
msgstr "_Ukázat rámeček"
-#: modules/process/immerse.c:787
+#: modules/process/immerse.c:793
msgid "Immersed detail"
msgstr "Zapuštěný detail"
-#: modules/process/indent_analyze.c:261
+#: modules/process/indent_analyze.c:246
msgid "Do nothing"
msgstr "Nedělat nic"
-#: modules/process/indent_analyze.c:262
+#: modules/process/indent_analyze.c:247
msgid "Plane level"
msgstr "Vyrovnání rovinou"
-#: modules/process/indent_analyze.c:263
+#: modules/process/indent_analyze.c:248
msgid "Plane rotate"
msgstr "Vyrovnání rotací"
-#: modules/process/indent_analyze.c:267
+#: modules/process/indent_analyze.c:252
msgid "New"
msgstr "Nový"
-#: modules/process/indent_analyze.c:268
+#: modules/process/indent_analyze.c:253
msgid "AND"
msgstr "AND"
-#: modules/process/indent_analyze.c:269
+#: modules/process/indent_analyze.c:254
msgid "OR"
msgstr "OR"
-#: modules/process/indent_analyze.c:270
+#: modules/process/indent_analyze.c:255
msgid "NOT"
msgstr "NOT"
-#: modules/process/indent_analyze.c:271
+#: modules/process/indent_analyze.c:256
msgid "XOR"
msgstr "XOR"
-#: modules/process/indent_analyze.c:275
+#: modules/process/indent_analyze.c:260
msgid "Nothing"
msgstr "Nic"
-#: modules/process/indent_analyze.c:276
+#: modules/process/indent_analyze.c:261
msgid "Above"
msgstr "Nad"
-#: modules/process/indent_analyze.c:277
+#: modules/process/indent_analyze.c:262
msgid "Below"
msgstr "Pod"
-#: modules/process/indent_analyze.c:278
+#: modules/process/indent_analyze.c:263
msgid "Plane"
msgstr "Rovinu"
-#: modules/process/indent_analyze.c:279
+#: modules/process/indent_analyze.c:264
msgid "Impression"
msgstr "Vtisk"
-#: modules/process/indent_analyze.c:280
+#: modules/process/indent_analyze.c:265
msgid "Inner Pile-up"
msgstr "Vnitřní pile-up"
-#: modules/process/indent_analyze.c:281
+#: modules/process/indent_analyze.c:266
msgid "Outer Pile-up"
msgstr "Vnější pile-up"
-#: modules/process/indent_analyze.c:282
+#: modules/process/indent_analyze.c:267
msgid "Special points"
msgstr "Význačné body"
-#: modules/process/indent_analyze.c:283
+#: modules/process/indent_analyze.c:268
msgid "Faces border"
msgstr "Okraje faset"
-#: modules/process/indent_analyze.c:287
+#: modules/process/indent_analyze.c:272
msgid "Vickers"
msgstr "Vickers"
-#: modules/process/indent_analyze.c:288
+#: modules/process/indent_analyze.c:273
msgid "Berkovich"
msgstr "Berkovich"
-#: modules/process/indent_analyze.c:289
+#: modules/process/indent_analyze.c:274
msgid "Berkovich (modified)"
msgstr "Berkovich (modifikovaný)"
-#: modules/process/indent_analyze.c:290
+#: modules/process/indent_analyze.c:275
msgid "Knoop"
msgstr "Knoop"
-#: modules/process/indent_analyze.c:291
+#: modules/process/indent_analyze.c:276
msgid "Brinell"
msgstr "Brinell"
-#: modules/process/indent_analyze.c:292
+#: modules/process/indent_analyze.c:277
msgid "Cube corner"
msgstr "Roh krychle"
-#: modules/process/indent_analyze.c:293
+#: modules/process/indent_analyze.c:278
msgid "Rockwell"
msgstr "Rockwell"
-#: modules/process/indent_analyze.c:303
+#: modules/process/indent_analyze.c:288
msgid "Analyses nanoindentation structure (volumes, surfaces, ...)."
msgstr "Analýza struktur vzniklých nanoindentací"
-#: modules/process/indent_analyze.c:320
+#: modules/process/indent_analyze.c:302
msgid "/_Tip and Indentation/_Analyze Imprint..."
msgstr "/_Hrot a indentace/_Analyzovat vtisk..."
-#: modules/process/indent_analyze.c:439
+#: modules/process/indent_analyze.c:410
msgid "Marked _areas:"
msgstr "Označené _oblasti:"
-#: modules/process/indent_analyze.c:445
+#: modules/process/indent_analyze.c:419
msgid "_Indentor type:"
msgstr "Typ _indentoru:"
-#: modules/process/indent_analyze.c:451
+#: modules/process/indent_analyze.c:428
msgid "_Mask creation type:"
msgstr "Způsob vytvoření masky:"
-#: modules/process/indent_analyze.c:456
+#: modules/process/indent_analyze.c:434
msgid "Ref. plane _tolerance:"
msgstr "_Tolerance ref. roviny:"
-#: modules/process/indent_analyze.c:460
+#: modules/process/indent_analyze.c:438
msgid "Angle _1 tolerance:"
msgstr "_Tolerance úhlu 1:"
-#: modules/process/indent_analyze.c:485
+#: modules/process/indent_analyze.c:456
msgid "Indent center at"
msgstr "Střed vtisku v"
-#: modules/process/indent_analyze.c:488
+#: modules/process/indent_analyze.c:460
msgid "Maximum at"
msgstr "Maximum v"
-#: modules/process/indent_analyze.c:491
+#: modules/process/indent_analyze.c:464
msgid "Max-min difference"
msgstr "Rozdíl max-min"
-#: modules/process/indent_analyze.c:497
+#: modules/process/indent_analyze.c:472
msgid "Expected A<sub>d</sub>:"
msgstr "Očekávané A<sub>d</sub>:"
-#: modules/process/indent_analyze.c:505
+#: modules/process/indent_analyze.c:479
msgid "Expected A<sub>p</sub>:"
msgstr "Očekávané A<sub>p</sub>:"
-#: modules/process/indent_analyze.c:549
+#: modules/process/indent_analyze.c:489
msgid "Volume above-below"
msgstr "Rozdíl objemů nad-pod"
-#: modules/process/indent_analyze.c:558
+#: modules/process/indent_analyze.c:494
msgid "Indent. volume"
msgstr "Objem vtisku"
-#: modules/process/indent_analyze.c:564
+#: modules/process/indent_analyze.c:502
msgid "Indent. A<sub>d</sub>"
msgstr "Indent. A<sub>d</sub>"
-#: modules/process/indent_analyze.c:573
+#: modules/process/indent_analyze.c:509
msgid "Indent. A<sub>p</sub>"
msgstr "Indent. A<sub>p</sub>"
-#: modules/process/indent_analyze.c:587
+#: modules/process/indent_analyze.c:517
msgid "Inner Pile-Up A<sub>d</sub>"
msgstr "Vnitřní pile-up A<sub>d</sub>"
-#: modules/process/indent_analyze.c:596
+#: modules/process/indent_analyze.c:525
msgid "Inner Pile-Up A<sub>p</sub>"
msgstr "Vnitřní pile-up A<sub>p</sub>"
-#: modules/process/indent_analyze.c:605
+#: modules/process/indent_analyze.c:533
msgid "Outer Pile-Up A<sub>d</sub>"
msgstr "Vnější pile-up A<sub>d</sub>"
-#: modules/process/indent_analyze.c:614
+#: modules/process/indent_analyze.c:541
msgid "Outer Pile-Up A<sub>p</sub>"
msgstr "Vnější pile-up A<sub>p</sub>"
-#: modules/process/indent_analyze.c:644
+#: modules/process/indent_analyze.c:569
msgid "Indentation statistics"
msgstr "Statistika indentace"
-#: modules/process/indent_analyze.c:645
+#: modules/process/indent_analyze.c:570
msgid "_Compute & mark"
msgstr "_Označit a spočítat"
-#: modules/process/indent_analyze.c:646
+#: modules/process/indent_analyze.c:571
msgid "_Save statistics"
msgstr "/_Uložit statistiky"
-#: modules/process/indent_analyze.c:1569
+#: modules/process/indent_analyze.c:1392
msgid "No statistics has been computed yet."
msgstr "Dosud nebylo provedeno vyhodnocení."
-#: modules/process/indent_analyze.c:1577
+#: modules/process/indent_analyze.c:1400
msgid "Save Indentation Statistics"
msgstr "Uložit statistiku indentace"
-#: modules/process/indent_analyze.c:1615
+#: modules/process/indent_analyze.c:1438
#, c-format
msgid "Indentor: %s\n"
msgstr "Indentor: %s\n"
-#: modules/process/indent_analyze.c:1619
+#: modules/process/indent_analyze.c:1442
#, c-format
msgid "Length units: %s\n"
msgstr "Jednotky délky: %s\n"
-#: modules/process/indent_analyze.c:1621
+#: modules/process/indent_analyze.c:1444
#, c-format
msgid "Indentation center at [%d, %d] px: %lf\n"
msgstr "Střed indentace na [%d, %d] px: %lf\n"
-#: modules/process/indent_analyze.c:1623
+#: modules/process/indent_analyze.c:1446
#, c-format
msgid "Maximum at [%d, %d] is: %lf\n"
msgstr "Maximum na [%d, %d] je: %lf\n"
-#: modules/process/indent_analyze.c:1625
+#: modules/process/indent_analyze.c:1448
#, c-format
msgid "Difference max-min: %lf\n"
msgstr "Rozdíl maximum-minimum: %lf\n"
-#: modules/process/indent_analyze.c:1630
+#: modules/process/indent_analyze.c:1453
#, c-format
msgid "Area (projected) above plane: %g (%.1lf %%)\n"
msgstr "Plocha nad rovinou (projektovaná) %g (%.1lf %%)\n"
-#: modules/process/indent_analyze.c:1634
+#: modules/process/indent_analyze.c:1457
#, c-format
msgid "Area (projected) below plane: %g (%.1lf %%)\n"
msgstr "Plocha pod rovinou (projektovaná) %g (%.1lf %%)\n"
-#: modules/process/indent_analyze.c:1638
+#: modules/process/indent_analyze.c:1461
#, c-format
msgid "Area (projected) of plane: %g (%.1lf %%)\n"
msgstr "Plocha roviny (projektovaná) %g (%.1lf %%)\n"
-#: modules/process/indent_analyze.c:1643
+#: modules/process/indent_analyze.c:1466
#, c-format
msgid "Area (developed) above %g (+%.1f %%)\n"
msgstr "Plocha nad (rozvinutá) %g (+%.1f %%)\n"
-#: modules/process/indent_analyze.c:1646
+#: modules/process/indent_analyze.c:1469
#, c-format
msgid "Area (developed) below %g (+%.1lf %%)\n"
msgstr "Plocha pod (rozvinutá) %g (+%.1f %%)\n"
-#: modules/process/indent_analyze.c:1650
+#: modules/process/indent_analyze.c:1473
#, c-format
msgid "Volume above: %g\n"
msgstr "Objem nad: %g\n"
-#: modules/process/indent_analyze.c:1652
+#: modules/process/indent_analyze.c:1475
#, c-format
msgid "Volume below: %g\n"
msgstr "Objem pod: %g\n"
-#: modules/process/indent_analyze.c:1654
+#: modules/process/indent_analyze.c:1477
#, c-format
msgid "Volume difference %g\n"
msgstr "Rozdíl objemů: %g\n"
-#: modules/process/indent_analyze.c:1658
+#: modules/process/indent_analyze.c:1481
msgid ""
"\n"
"Indentation\n"
@@ -10647,12 +10997,12 @@ msgstr ""
"\n"
"Indentace\n"
-#: modules/process/indent_analyze.c:1659
+#: modules/process/indent_analyze.c:1482
#, c-format
msgid "Volume %g\n"
msgstr "Objem %g\n"
-#: modules/process/indent_analyze.c:1664
+#: modules/process/indent_analyze.c:1487
msgid ""
"\n"
"Indentation - Inner Pile-Up\n"
@@ -10660,7 +11010,7 @@ msgstr ""
"\n"
"Indentace - vnitřní pile-up\n"
-#: modules/process/indent_analyze.c:1670
+#: modules/process/indent_analyze.c:1493
msgid "Indentation - Outer Pile-Up\n"
msgstr "Indentace - vnější pile-up\n"
@@ -10769,11 +11119,6 @@ msgstr "Penrosova (středy)"
msgid "_Lattice:"
msgstr "_Mřížka:"
-#: modules/process/lat_synth.c:651 modules/process/obj_synth.c:544
-#: modules/process/pat_synth.c:1457
-msgid "_Size:"
-msgstr "_Velikost:"
-
#: modules/process/lat_synth.c:662
msgid "Lattice rela_xation:"
msgstr "Rela_xace mřížky:"
@@ -10909,7 +11254,7 @@ msgstr "Vyrovnat jednotlivá zrna s laplaceovskou interpolací mezi nimi"
#: modules/process/level_grains.c:187 modules/process/median-bg.c:167
#: modules/process/polylevel.c:293 modules/process/polylevel.c:417
-#: modules/process/sphere-revolve.c:200
+#: modules/process/sphere-revolve.c:221 modules/process/sphere-revolve.c:295
msgid "Background"
msgstr "Pozadí"
@@ -10921,150 +11266,150 @@ msgstr "Vyrovnat zrna"
msgid "Quantity to level:"
msgstr "Vyrovnat podle:"
-#: modules/process/level_grains.c:231 modules/process/linematch.c:866
-#: modules/process/median-bg.c:217 modules/process/polylevel.c:482
-#: modules/process/sphere-revolve.c:263
+#: modules/process/level_grains.c:231 modules/process/linematch.c:834
+#: modules/process/median-bg.c:217 modules/process/polylevel.c:485
+#: modules/process/sphere-revolve.c:371
msgid "E_xtract background"
msgstr "_Extrahovat pozadí"
-#: modules/process/linecorrect.c:54
+#: modules/process/linecorrect.c:52
msgid "Corrects line defects (mostly experimental algorithms)."
msgstr "Opravuje řádkové defekty (převážně experimentální algoritmy)."
-#: modules/process/linecorrect.c:68
+#: modules/process/linecorrect.c:66
msgid "/_Correct Data/Ste_p Line Correction"
msgstr "/_Korekce dat/Srovnání s_chodů v řádcích"
-#: modules/process/linecorrect.c:72
+#: modules/process/linecorrect.c:70
msgid "Correct steps in lines"
msgstr "Opravuje schody v řádcích"
-#: modules/process/linematch.c:158 modules/tools/linestats.c:166
+#: modules/process/linematch.c:155 modules/tools/linestats.c:166
#: modules/volume/volume_linestat.c:143
msgid "Median"
msgstr "Medián"
-#: modules/process/linematch.c:159
+#: modules/process/linematch.c:156
msgid "Median of differences"
msgstr "Medián rozdílů"
-#: modules/process/linematch.c:160
+#: modules/process/linematch.c:157
msgid "Modus"
msgstr "Modus"
-#: modules/process/linematch.c:161
+#: modules/process/linematch.c:158
msgid "linematch|Matching"
msgstr "Lícování"
-#: modules/process/linematch.c:162
+#: modules/process/linematch.c:159
msgid "linematch|Polynomial"
msgstr "Polynom"
-#: modules/process/linematch.c:168
+#: modules/process/linematch.c:165
msgid "Aligns rows by various methods."
msgstr "Vyrovnává řádky pomocí různých metod."
-#: modules/process/linematch.c:182
+#: modules/process/linematch.c:179
msgid "/_Correct Data/_Align rows..."
msgstr "/_Korekce dat/_Srovnat řádky..."
-#: modules/process/linematch.c:186
+#: modules/process/linematch.c:183
msgid "Align rows using various methods"
msgstr "Srovnat řádky pomocí různých metod"
-#: modules/process/linematch.c:237 modules/process/linematch.c:265
+#: modules/process/linematch.c:234 modules/process/linematch.c:262
msgid "Row background"
msgstr "Řádkové pozadí"
-#: modules/process/linematch.c:266
+#: modules/process/linematch.c:263
msgid "Vertical position"
msgstr "Svislá poloha"
-#: modules/process/linematch.c:267
+#: modules/process/linematch.c:264
msgid "Corrected offset"
msgstr "Opravený posun"
-#: modules/process/linematch.c:802
+#: modules/process/linematch.c:769
msgid "Align Rows"
msgstr "Srovnání řádků"
-#: modules/process/linematch.c:844
+#: modules/process/linematch.c:810
msgid "_Polynomial degree:"
msgstr "_Stupeň polynomu:"
-#: modules/process/linematch.c:876
+#: modules/process/linematch.c:844
msgid "Plot background _graph"
msgstr "Nakreslit _graf pozadí"
-#: modules/process/lno_synth.c:261 modules/process/noise_synth.c:188
+#: modules/process/lno_synth.c:259 modules/process/noise_synth.c:186
msgid "distribution|Triangular"
msgstr "Trojúhelníkové"
-#: modules/process/lno_synth.c:267 modules/process/pat_synth.c:213
+#: modules/process/lno_synth.c:265 modules/process/pat_synth.c:213
msgid "Steps"
msgstr "Schody"
-#: modules/process/lno_synth.c:268
+#: modules/process/lno_synth.c:266
msgid "Scars"
msgstr "Šrámy"
-#: modules/process/lno_synth.c:269 modules/process/pat_synth.c:214
+#: modules/process/lno_synth.c:267 modules/process/pat_synth.c:214
msgid "Ridges"
msgstr "Hřebeny"
-#: modules/process/lno_synth.c:275
+#: modules/process/lno_synth.c:273
msgid "Generates various kinds of line noise."
msgstr "Generuje různé druhy řádkového šumu"
-#: modules/process/lno_synth.c:289
+#: modules/process/lno_synth.c:287
msgid "/S_ynthetic/_Line Noise..."
msgstr "/S_yntetická/Řád_kový šum..."
-#: modules/process/lno_synth.c:293
+#: modules/process/lno_synth.c:291
msgid "Generate line noise"
msgstr "Generovat řádkový šum"
-#: modules/process/lno_synth.c:431
+#: modules/process/lno_synth.c:429
msgid "Line Noise"
msgstr "Řádkový šum"
-#: modules/process/lno_synth.c:504
+#: modules/process/lno_synth.c:502
msgid "Distribution"
msgstr "Rozdělení"
-#: modules/process/lno_synth.c:514 modules/process/noise_synth.c:414
-msgid "Direction:"
-msgstr "Symetrie:"
+#: modules/process/lno_synth.c:512 modules/process/mask_noisify.c:158
+#: modules/process/noise_synth.c:412
+msgid "Noise type:"
+msgstr "Druh šumu:"
-#: modules/process/lno_synth.c:523 modules/process/noise_synth.c:423
+#: modules/process/lno_synth.c:521 modules/process/mask_noisify.c:167
+#: modules/process/noise_synth.c:421
msgid "S_ymmetrical"
-msgstr "S_ymetrické"
+msgstr "S_ymetrický"
-#: modules/process/lno_synth.c:524 modules/process/noise_synth.c:424
+#: modules/process/lno_synth.c:522 modules/process/mask_noisify.c:168
+#: modules/process/noise_synth.c:422
msgid "One-sided _positive"
-msgstr "Jednostranné _kladné"
+msgstr "Jednostranný _kladný"
-#: modules/process/lno_synth.c:525 modules/process/noise_synth.c:425
+#: modules/process/lno_synth.c:523 modules/process/mask_noisify.c:169
+#: modules/process/noise_synth.c:423
msgid "One-sided _negative"
-msgstr "Jednostranné _záporné"
+msgstr "Jednostranný _záporný"
-#: modules/process/lno_synth.c:546
+#: modules/process/lno_synth.c:544
msgid "Noise Type"
msgstr "Druh šumu"
-#: modules/process/lno_synth.c:551
+#: modules/process/lno_synth.c:549
msgid "_Noise type:"
msgstr "_Druh šumu:"
-#: modules/process/lno_synth.c:853 modules/process/lno_synth.c:1222
-msgid "Densi_ty:"
-msgstr "_Hustota:"
-
-#: modules/process/lno_synth.c:864 modules/process/lno_synth.c:1233
+#: modules/process/lno_synth.c:863 modules/process/lno_synth.c:1233
msgid "_Within line:"
msgstr "_Uvnitř řádku:"
-#: modules/process/lno_synth.c:871
+#: modules/process/lno_synth.c:870
msgid "C_umulative"
msgstr "Ku_mulativní"
@@ -11120,31 +11465,31 @@ msgstr "_Použít natrénovanou regresi"
msgid "_Train logistic regression"
msgstr "_Trénovat logistickou regresi"
-#: modules/process/logistic.c:275
+#: modules/process/logistic.c:274
msgid "_Gaussian blur"
msgstr "_Gaussovské rozmazání"
-#: modules/process/logistic.c:288
+#: modules/process/logistic.c:285
msgid "_Number of Gaussians:"
msgstr "_Počet gaussiánů:"
-#: modules/process/logistic.c:296
+#: modules/process/logistic.c:293
msgid "_Sobel derivatives"
msgstr "_Sobelova derivace"
-#: modules/process/logistic.c:307
+#: modules/process/logistic.c:303
msgid "_Laplacian"
msgstr "_Laplacián"
-#: modules/process/logistic.c:318
+#: modules/process/logistic.c:313
msgid "_Hessian"
msgstr "Hessián"
-#: modules/process/logistic.c:331
+#: modules/process/logistic.c:325
msgid "_Regularization parameter:"
msgstr "_Regularizační parametr:"
-#: modules/process/logistic.c:623 modules/process/neural.c:1101
+#: modules/process/logistic.c:616 modules/process/neural.c:1108
msgid "Training..."
msgstr "Trénování..."
@@ -11160,13 +11505,13 @@ msgstr "/_Korekce dat/Maska oddělených hodnot..."
msgid "Mark data disconnected from other values"
msgstr "Označit data oddělená od ostatních hodnot"
-#: modules/process/mark_disconn.c:187 modules/process/obj_synth.c:422
-#: modules/process/scars.c:279
+#: modules/process/mark_disconn.c:187 modules/process/obj_synth.c:419
+#: modules/process/scars.c:297
msgid "Positive"
msgstr "Positivní"
-#: modules/process/mark_disconn.c:188 modules/process/obj_synth.c:423
-#: modules/process/scars.c:280
+#: modules/process/mark_disconn.c:188 modules/process/obj_synth.c:420
+#: modules/process/scars.c:298
msgid "Negative"
msgstr "Negativní"
@@ -11182,11 +11527,11 @@ msgstr "Typ defektu:"
msgid "Defect _radius:"
msgstr "_Poloměr defektu:"
-#: modules/process/mark_disconn.c:563
+#: modules/process/mark_disconn.c:552
msgid "Filtering..."
msgstr "Filtruji..."
-#: modules/process/mark_disconn.c:590
+#: modules/process/mark_disconn.c:579
msgid "Marking outliers..."
msgstr "Označuji vybočující..."
@@ -11202,55 +11547,59 @@ msgstr "/_Zrna/Označit _pomocí..."
msgid "Mask combining and modification"
msgstr "Kombinování a modifikace masek"
-#: modules/process/mark_with.c:192
+#: modules/process/mark_with.c:193
msgid "Mark With"
msgstr "Označit Pomocí"
-#: modules/process/mark_with.c:238
+#: modules/process/mark_with.c:231 modules/process/mask_morph.c:209
+msgid "Operation:"
+msgstr "Operace:"
+
+#: modules/process/mark_with.c:239
msgid "Se_t mask"
msgstr "Nas_tavit masku"
-#: modules/process/mark_with.c:239
+#: modules/process/mark_with.c:240
msgid "_Add mask"
msgstr "Přid_at masku"
-#: modules/process/mark_with.c:240
+#: modules/process/mark_with.c:241
msgid "_Subtract mask"
msgstr "Odečí_st masku"
-#: modules/process/mark_with.c:241
+#: modules/process/mark_with.c:242
msgid "_Intersect masks"
msgstr "Průn_ik masek"
-#: modules/process/mark_with.c:247
+#: modules/process/mark_with.c:248
msgid "Mark with:"
msgstr "Označit pomocí:"
-#: modules/process/mark_with.c:255
+#: modules/process/mark_with.c:256
msgid "with|_Mask"
msgstr "_Masky"
-#: modules/process/mark_with.c:257
+#: modules/process/mark_with.c:258
msgid "with|_Data"
msgstr "_Dat"
-#: modules/process/mark_with.c:259
+#: modules/process/mark_with.c:260
msgid "with|_Presentation"
msgstr "_Presentace"
-#: modules/process/mark_with.c:293
+#: modules/process/mark_with.c:297
msgid "Marked data range:"
msgstr "Rozsah označených dat:"
-#: modules/process/mark_with.c:301
+#: modules/process/mark_with.c:305
msgid "_Minimum:"
msgstr "_Minimum:"
-#: modules/process/mark_with.c:310
+#: modules/process/mark_with.c:314
msgid "M_aximum:"
msgstr "M_aximum:"
-#: modules/process/mark_with.c:378
+#: modules/process/mark_with.c:382
msgid "Operand"
msgstr "Operand"
@@ -11286,109 +11635,109 @@ msgstr "Rozkopírovat do:"
msgid "Preserve existing masks"
msgstr "Zachovat existující masky"
-#: modules/process/mask_edt.c:95
+#: modules/process/mask_edt.c:89
msgid "Performs simple and true Euclidean distance transforms of masks."
msgstr ""
"Provádí transformaci masky na jednoduché vzdálenosti a pravou euklidovskou "
"vzdálenost."
-#: modules/process/mask_edt.c:109
+#: modules/process/mask_edt.c:103
msgid "/_Mask/Distanc_e Transform..."
msgstr "/_Maska/Transformace na _vzdálenost..."
-#: modules/process/mask_edt.c:113
+#: modules/process/mask_edt.c:107
msgid "Distance transform of mask"
msgstr "Transformace masky na vzdálenost"
-#: modules/process/mask_edt.c:116
+#: modules/process/mask_edt.c:110
msgid "/_Mask/Thi_n"
msgstr "/_Maska/Z_tenčit"
-#: modules/process/mask_edt.c:120
+#: modules/process/mask_edt.c:114
msgid "Thin mask"
msgstr "Ztenčit masku"
-#: modules/process/mask_edt.c:330 modules/process/mask_edt.c:352
+#: modules/process/mask_edt.c:164 modules/process/mask_edt.c:186
msgid "Distance Transform"
msgstr "Transformace na vzdálenost"
-#: modules/process/mask_edt.c:340
+#: modules/process/mask_edt.c:174
msgid "Interior"
msgstr "Vnitřek"
-#: modules/process/mask_edt.c:341
+#: modules/process/mask_edt.c:175
msgid "Exterior"
msgstr "Vnějšek"
-#: modules/process/mask_edt.c:342
+#: modules/process/mask_edt.c:176
msgid "Two-sided"
msgstr "Oboustranná"
-#: modules/process/mask_edt.c:373 modules/tools/maskedit.c:634
+#: modules/process/mask_edt.c:207 modules/tools/maskedit.c:640
msgid "_Distance type:"
msgstr "_Typ vzdálenosti:"
-#: modules/process/mask_edt.c:394 modules/tools/maskedit.c:640
+#: modules/process/mask_edt.c:228 modules/tools/maskedit.c:646
msgid "Shrink from _border"
msgstr "Zužovat i od _krajů"
-#: modules/process/mask_morph.c:117
+#: modules/process/mask_morph.c:116
msgid "Performs basic morphological operations with masks."
msgstr "Provádí základní morfologické operace s maskami."
-#: modules/process/mask_morph.c:131
-msgid "/_Mask/Morphological Operation..."
+#: modules/process/mask_morph.c:130
+msgid "/_Mask/Morpho_logical Operation..."
msgstr "/_Maska/_Morfologická operace..."
-#: modules/process/mask_morph.c:135
+#: modules/process/mask_morph.c:134
msgid "Morphological operation with mask"
msgstr "Morfologická operace s maskou"
-#: modules/process/mask_morph.c:169
+#: modules/process/mask_morph.c:168
msgid "Erosion"
msgstr "Eroze"
-#: modules/process/mask_morph.c:170
+#: modules/process/mask_morph.c:169
msgid "Dilation"
msgstr "Dilatace"
-#: modules/process/mask_morph.c:171 modules/tools/filter.c:242
+#: modules/process/mask_morph.c:170 modules/tools/filter.c:243
msgid "filter|Opening"
msgstr "Otevření"
-#: modules/process/mask_morph.c:172 modules/tools/filter.c:243
+#: modules/process/mask_morph.c:171 modules/tools/filter.c:244
msgid "filter|Closing"
msgstr "Uzavření"
-#: modules/process/mask_morph.c:173 modules/tools/filter.c:244
+#: modules/process/mask_morph.c:172 modules/tools/filter.c:245
msgid "ASF Opening"
msgstr "ASF otevření"
-#: modules/process/mask_morph.c:174 modules/tools/filter.c:245
+#: modules/process/mask_morph.c:173 modules/tools/filter.c:246
msgid "ASF Closing"
msgstr "ASF uzavření"
-#: modules/process/mask_morph.c:178
+#: modules/process/mask_morph.c:177
msgid "Octagon"
msgstr "Osmiúhelník"
-#: modules/process/mask_morph.c:181
+#: modules/process/mask_morph.c:180
msgid "Another mask"
msgstr "Jiná maska"
-#: modules/process/mask_morph.c:192
+#: modules/process/mask_morph.c:191
msgid "Morphological Operation"
msgstr "Morfologická operace"
-#: modules/process/mask_morph.c:224
+#: modules/process/mask_morph.c:223
msgid "Structuring element:"
msgstr "Strukturní element:"
-#: modules/process/mask_morph.c:238 modules/tools/maskedit.c:524
+#: modules/process/mask_morph.c:237 modules/tools/maskedit.c:528
msgid "_Radius:"
msgstr "_Poloměr:"
-#: modules/process/mask_morph.c:249
+#: modules/process/mask_morph.c:248
msgid "_Mask:"
msgstr "_Maska:"
@@ -11396,39 +11745,59 @@ msgstr "_Maska:"
msgid "_Trim empty borders"
msgstr "Oříznout prázdné o_kraje"
-#: modules/process/maskcor.c:86
+#: modules/process/mask_noisify.c:83
+msgid "Adds salt and/or pepper noise to mask."
+msgstr "Přidává náhodný šum do masky."
+
+#: modules/process/mask_noisify.c:97
+msgid "/_Mask/_Noisify..."
+msgstr "/_Maska/_Zašumět..."
+
+#: modules/process/mask_noisify.c:101
+msgid "Add noise to mask"
+msgstr "Přidat šum do masky"
+
+#: modules/process/mask_noisify.c:141
+msgid "Noisify Mask"
+msgstr "Zašumět masku"
+
+#: modules/process/mask_noisify.c:184
+msgid "_Alter only boundaries"
+msgstr "_Pozměnit pouze hranice"
+
+#: modules/process/maskcor.c:87
msgid "Creates mask by correlation with another data."
msgstr "Vytváří masku z korelace s jinými daty."
-#: modules/process/maskcor.c:100
+#: modules/process/maskcor.c:101
msgid "/M_ultidata/_Mask by Correlation..."
msgstr "/M_ultidata/_Maska pomocí korelace..."
-#: modules/process/maskcor.c:104
+#: modules/process/maskcor.c:105
msgid "Create mask by correlation with another data"
msgstr "Vytvořit masku korelací s jinými daty"
-#: modules/process/maskcor.c:141
+#: modules/process/maskcor.c:142
msgid "Mask by Correlation"
msgstr "Maska pomocí korelace"
-#: modules/process/maskcor.c:165
+#: modules/process/maskcor.c:166
msgid "Correlation _kernel:"
msgstr "Jádro _korelace:"
-#: modules/process/maskcor.c:172
+#: modules/process/maskcor.c:173
msgid "Objects marked"
msgstr "Vyznačené objekty"
-#: modules/process/maskcor.c:173
+#: modules/process/maskcor.c:174
msgid "Correlation maxima"
msgstr "Maxima korelace"
-#: modules/process/maskcor.c:174 modules/process/maskcor.c:356
+#: modules/process/maskcor.c:175 modules/process/maskcor.c:360
msgid "Correlation score"
msgstr "Výsledek korelace"
-#: modules/process/maskcor.c:183
+#: modules/process/maskcor.c:185
msgid "Correlation _method:"
msgstr "Korelační _metoda:"
@@ -11457,8 +11826,8 @@ msgid "/_Mask/_Extract Mask"
msgstr "/_Maska/_Extrahovat masku"
#: modules/process/maskops.c:78
-msgid "Extract mask to a new channel"
-msgstr "Extrahovat masku do nového kanálu"
+msgid "Extract mask to a new image"
+msgstr "Extrahovat masku do nového obrázku"
#: modules/process/maskops.c:81
msgid "/_Grains/_Remove Edge-Touching"
@@ -11484,35 +11853,31 @@ msgstr "Oříznout neprotínající se oblasti dvou obrázků."
msgid "Mutual Crop"
msgstr "Vzájemné oříznutí"
-#: modules/process/mcrop.c:174
+#: modules/process/mcrop.c:173
msgid "_Select second argument:"
msgstr "_Druhý argument:"
-#: modules/process/measure_lattice.c:174
+#: modules/process/measure_lattice.c:165
msgid "Measures parameters of two-dimensional lattices."
msgstr "Měří parametry dvourozměrných mřížek."
-#: modules/process/measure_lattice.c:188
+#: modules/process/measure_lattice.c:179
msgid "/_Statistics/Measure _Lattice..."
msgstr "/_Statistika/Analýza _mřížky..."
-#: modules/process/measure_lattice.c:192
+#: modules/process/measure_lattice.c:183
msgid "Measure lattice"
msgstr "Měření mřížky"
-#: modules/process/measure_lattice.c:253
+#: modules/process/measure_lattice.c:243
msgid "Measure Lattice"
msgstr "Měření mřížky"
-#: modules/process/measure_lattice.c:259
-msgid "_Refine"
-msgstr "_Zpřesnit"
-
-#: modules/process/measure_lattice.c:330
+#: modules/process/measure_lattice.c:320
msgid "_ACF"
msgstr "_ACF"
-#: modules/process/measure_lattice.c:331
+#: modules/process/measure_lattice.c:321
msgid "_PSDF"
msgstr "_PSDF"
@@ -11528,30 +11893,30 @@ msgstr "_Mřížka:"
msgid "_Vectors"
msgstr "_Vektory:"
-#: modules/process/measure_lattice.c:596
+#: modules/process/measure_lattice.c:589
msgid "Save Lattice Parameters"
msgstr "Uložit parametry mřížky"
-#: modules/process/measure_lattice.c:634
+#: modules/process/measure_lattice.c:627
#, c-format
msgid "Vector %d:"
msgstr "Vektor %d:"
-#: modules/process/measure_lattice.c:643
+#: modules/process/measure_lattice.c:636
#, c-format
msgid "Length %d:"
msgstr "Délka %d:"
-#: modules/process/measure_lattice.c:650
+#: modules/process/measure_lattice.c:643
#, c-format
msgid "Angle %d:"
msgstr "Úhel %d:"
-#: modules/process/measure_lattice.c:665
+#: modules/process/measure_lattice.c:657
msgid "Angle:"
msgstr "Úhel:"
-#: modules/process/measure_lattice.c:681
+#: modules/process/measure_lattice.c:673
msgid "Lattice Parameters"
msgstr "Parametry mřížky"
@@ -11575,11 +11940,11 @@ msgstr "Mediánové vyrovnání..."
msgid "Median Level"
msgstr "Mediánové vyrovnání"
-#: modules/process/median-bg.c:199 modules/process/sphere-revolve.c:237
+#: modules/process/median-bg.c:199 modules/process/sphere-revolve.c:336
msgid "Real _radius:"
msgstr "_Skutečný poloměr:"
-#: modules/process/median-bg.c:209 modules/process/sphere-revolve.c:247
+#: modules/process/median-bg.c:209 modules/process/sphere-revolve.c:346
msgid "_Pixel radius:"
msgstr "Poloměr v _pixelech:"
@@ -11619,7 +11984,7 @@ msgstr "První operand"
msgid "Second operand"
msgstr "Druhý operand"
-#: modules/process/merge.c:197 modules/xyz/xyz_raster.c:643
+#: modules/process/merge.c:197 modules/xyz/xyz_raster.c:612
msgid "Average"
msgstr "Průměr"
@@ -11671,6 +12036,221 @@ msgstr "Přidat _masku pixelů mimo"
msgid "Merged images"
msgstr "Sloučené obrázky"
+#: modules/process/mfm_current.c:163
+msgid "Simulation of current line magnetic field"
+msgstr "Simulace magnetického pole planárního vodiče"
+
+#: modules/process/mfm_current.c:177
+msgid "/SPM M_odes/_MFM/_Current Line Field..."
+msgstr "/SPM mód_y/_MFM/Pole planárního _vodiče..."
+
+#: modules/process/mfm_current.c:181
+msgid "Simulate stray field above current line"
+msgstr "Simulace rozptylového pole nad planárním vodiče"
+
+#: modules/process/mfm_current.c:280 modules/process/mfm_parallel.c:282
+msgid "Simulated field"
+msgstr "Simulované pole"
+
+#: modules/process/mfm_current.c:322 modules/process/mfm_field.c:266
+#: modules/process/mfm_parallel.c:324
+msgid "Point charge"
+msgstr "Bodový náboj"
+
+#: modules/process/mfm_current.c:323 modules/process/mfm_field.c:267
+#: modules/process/mfm_parallel.c:325
+msgid "Bar"
+msgstr "Tyč"
+
+#: modules/process/mfm_current.c:330
+msgid "Current Line Stray Field"
+msgstr "Rozptylové pole planárního vodiče"
+
+#: modules/process/mfm_current.c:415
+msgid "Output"
+msgstr "Výstup"
+
+#: modules/process/mfm_current.c:420 modules/process/mfm_field.c:320
+#: modules/process/mfm_parallel.c:415
+msgid "_Output plane height:"
+msgstr "_Výška výstupní roviny:"
+
+#: modules/process/mfm_current.c:428
+msgid "_Stripe width:"
+msgstr "Šířka pru_hu:"
+
+#: modules/process/mfm_current.c:436
+msgid "Stripe _current:"
+msgstr "Pro_ud pruhem:"
+
+#: modules/process/mfm_current.c:444
+msgid "_Position:"
+msgstr "_Poloha:"
+
+#: modules/process/mfm_current.c:461
+msgid "Probe"
+msgstr "Sonda"
+
+#: modules/process/mfm_current.c:469
+msgid "P_robe type:"
+msgstr "_Druh sondy:"
+
+#: modules/process/mfm_current.c:475 modules/process/mfm_field.c:389
+#: modules/process/mfm_parallel.c:482
+msgid "Tip _magnetization:"
+msgstr "_Magnetizace hrotu:"
+
+#: modules/process/mfm_current.c:484 modules/process/mfm_field.c:397
+#: modules/process/mfm_parallel.c:491
+msgid "Bar width _x:"
+msgstr "Šířka tyče v _x:"
+
+#: modules/process/mfm_current.c:493 modules/process/mfm_field.c:405
+#: modules/process/mfm_parallel.c:500
+msgid "Bar width _y:"
+msgstr "Šířka tyče v _y:"
+
+#: modules/process/mfm_current.c:502 modules/process/mfm_field.c:413
+#: modules/process/mfm_parallel.c:509
+msgid "Bar length (_z):"
+msgstr "Délka tyče (_z):"
+
+#: modules/process/mfm_field.c:146
+msgid "Simulation of magnetic field above perpendicular media"
+msgstr "Simulace magnetického pole nad médiem s příčnou magnetizací"
+
+#: modules/process/mfm_field.c:160
+msgid "/SPM M_odes/_MFM/_Perpendicular Media Field..."
+msgstr "/SPM mód_y/_MFM/Pole média s _příčnou magnetizací..."
+
+#: modules/process/mfm_field.c:164
+msgid "Compute stray field above perpendicular magnetic medium"
+msgstr "Počítá rozptylové pole nad médiem s příčnou magnetizací"
+
+#: modules/process/mfm_field.c:276
+msgid "Perpendicular Media Stray Field"
+msgstr "Rozptylové pole média s příčnou magnetizací"
+
+#: modules/process/mfm_field.c:328 modules/process/mfm_parallel.c:423
+msgid "_Film thickness:"
+msgstr "Tloušťka _vrstvy:"
+
+#: modules/process/mfm_field.c:336
+msgid "_Magnetic charge:"
+msgstr "_Magnetický náboj:"
+
+#: modules/process/mfm_field.c:344
+msgid "Include domain _walls"
+msgstr "_Zahrnout stěny domén"
+
+#: modules/process/mfm_field.c:354
+msgid "_Exchange constant:"
+msgstr "_Výměnná konstanta:"
+
+#: modules/process/mfm_field.c:362
+msgid "_Uniaxial anisotropy:"
+msgstr "_Jednoosá anizotropie:"
+
+#: modules/process/mfm_field.c:383 modules/process/mfm_parallel.c:476
+msgid "_Probe type:"
+msgstr "_Druh sondy:"
+
+#: modules/process/mfm_findshift.c:88
+msgid "Lift height difference estimation from data blur"
+msgstr "Odhad rozdílu výšek z rozmazání dat"
+
+#: modules/process/mfm_findshift.c:102
+msgid "/SPM M_odes/_MFM/_Estimate Shift in Z..."
+msgstr "/SPM mód_y/_MFM/_Odhad posunu v z..."
+
+#: modules/process/mfm_findshift.c:106
+msgid "Estimate lift height difference in MFM data"
+msgstr "Odhad rozdílu výšek nad povrchem z MFM dat"
+
+#: modules/process/mfm_findshift.c:166 modules/process/psf.c:340
+msgid "Searching..."
+msgstr "Hledám..."
+
+#: modules/process/mfm_findshift.c:196
+msgid "Estimated shift:"
+msgstr "Odhadnutý posun:"
+
+#: modules/process/mfm_findshift.c:211
+msgid "Shifted field difference"
+msgstr "Rozdíl posunutých polí"
+
+#: modules/process/mfm_findshift.c:228
+msgid "Estimate Lift Height Shift"
+msgstr "Odhad rozdílu výšek na povrchem"
+
+#: modules/process/mfm_findshift.c:255
+msgid "Data to compare:"
+msgstr "Porovnat s daty:"
+
+#: modules/process/mfm_findshift.c:261
+msgid "Search _from:"
+msgstr "Hledat o_d:"
+
+#: modules/process/mfm_findshift.c:269
+msgid "Search _to:"
+msgstr "Hledat _po:"
+
+#: modules/process/mfm_parallel.c:165
+msgid "Simulation of parallel magnetic media"
+msgstr "Simulace pole nad médiem s podélnou magnetizací"
+
+#: modules/process/mfm_parallel.c:179
+msgid "/SPM M_odes/_MFM/Para_llel Media Field..."
+msgstr "/SPM mód_y/_MFM/Pole média s po_délnou magnetizací..."
+
+#: modules/process/mfm_parallel.c:183
+msgid "Simulate stray field above parallel magnetic medium"
+msgstr "Simulace rozptylového pole nad médiem s podélnou magnetizací"
+
+#: modules/process/mfm_parallel.c:331
+msgid "Parallel Media Stray Field"
+msgstr "Rozptylové pole média s podélnou magnetizací"
+
+#: modules/process/mfm_parallel.c:431
+msgid "_Remanent magnetization:"
+msgstr "_Zbytková magnetizace:"
+
+#: modules/process/mfm_parallel.c:439
+msgid "Size _A (dir. left):"
+msgstr "Rozměr _A (vlevo):"
+
+#: modules/process/mfm_parallel.c:447
+msgid "Size _B (dir. right):"
+msgstr "Rozměr _B (vpravo):"
+
+#: modules/process/mfm_parallel.c:455
+msgid "_Gap size:"
+msgstr "_Velikost mezery:"
+
+#: modules/process/mfm_shift.c:87
+msgid "Simulation of magnetic field z component change for another level"
+msgstr "Simulace změny Z komponenty magnetického pole pro jinou výšku"
+
+#: modules/process/mfm_shift.c:101
+msgid "/SPM M_odes/_MFM/_Field Shift in Z..."
+msgstr "/SPM mód_y/_MFM/Posun pole v _z..."
+
+#: modules/process/mfm_shift.c:105
+msgid "Compute stray field shift for another z level"
+msgstr "Vypočítat rozptylové pole v jiné úrovni Z"
+
+#: modules/process/mfm_shift.c:146
+msgid "Shifted field"
+msgstr "Posunuté pole"
+
+#: modules/process/mfm_shift.c:164
+msgid "Stray Field Plane Shift"
+msgstr "Posun rozptylového pole v Z"
+
+#: modules/process/mfm_shift.c:209
+msgid "_Z shift by:"
+msgstr "Posun v _Z:"
+
#: modules/process/nanoindent_adjust.c:89
msgid "Adjust images of two indentor prints."
msgstr "Srovnat dva obrázky vtisků indentoru"
@@ -11707,12 +12287,12 @@ msgstr "_Otočit data"
msgid "E_xtrapolate result data out of measured range"
msgstr "E_xtrapolovat chybějící data na okrajích"
-#: modules/process/nanoindent_adjust.c:295
+#: modules/process/nanoindent_adjust.c:296
msgid ""
"Tip has different range/resolution ratio than image. Tip will be resampled."
msgstr "Hrot má jiný poměr rozlišení ku reálné velikosti. Bude převzorkován."
-#: modules/process/nanoindent_adjust.c:334
+#: modules/process/nanoindent_adjust.c:335
msgid "Immersed detail data"
msgstr "Zapuštěný detail"
@@ -11753,244 +12333,232 @@ msgstr "Chyba při tréninku"
msgid "error"
msgstr "Chyba"
-#: modules/process/neural.c:503
+#: modules/process/neural.c:504
msgid "NN training error"
msgstr "Chyba při tréninku NN"
-#: modules/process/neural.c:516
+#: modules/process/neural.c:517
msgid "Training"
msgstr "Trénování"
-#: modules/process/neural.c:520
+#: modules/process/neural.c:521
msgid "_Model:"
msgstr "_Model:"
-#: modules/process/neural.c:530
+#: modules/process/neural.c:532
msgid "_Signal:"
msgstr "_Signál:"
-#: modules/process/neural.c:541
+#: modules/process/neural.c:544
msgid "Training ste_ps:"
msgstr "_Kroků tréninku:"
-#: modules/process/neural.c:557
+#: modules/process/neural.c:561
msgid "Model"
msgstr "Model"
-#: modules/process/neural.c:558
+#: modules/process/neural.c:562
msgid "Signal"
msgstr "Signál"
-#: modules/process/neural.c:575
+#: modules/process/neural.c:579
msgid "verb|_Train"
msgstr "_Trénuj"
-#: modules/process/neural.c:580
+#: modules/process/neural.c:584
msgid "Re_initialize"
msgstr "Re_inicializuj"
-#: modules/process/neural.c:613
+#: modules/process/neural.c:617
msgid "Network"
msgstr "Síť"
-#: modules/process/neural.c:619
+#: modules/process/neural.c:623
msgid "Window _width:"
msgstr "Šířka ok_na:"
-#: modules/process/neural.c:627
+#: modules/process/neural.c:631
msgid "Window h_eight:"
msgstr "_Výška okna:"
-#: modules/process/neural.c:635
+#: modules/process/neural.c:639
msgid "_Hidden nodes:"
msgstr "Skryté _uzly:"
-#: modules/process/neural.c:643
+#: modules/process/neural.c:647
msgid "Result Units"
msgstr "Jednotky výsledku"
-#: modules/process/neural.c:650
+#: modules/process/neural.c:654
msgid "Power of source _XY:"
msgstr "Mocnina zdrojové _XY:"
-#: modules/process/neural.c:658
+#: modules/process/neural.c:663
msgid "Power of source _Z:"
msgstr "Mocnina zdrojové _Z:"
-#: modules/process/neural.c:666
+#: modules/process/neural.c:672
msgid "_Fixed units:"
msgstr "_Pevné jednotky:"
-#: modules/process/neural.c:676
+#: modules/process/neural.c:683
msgid "Networks"
msgstr "Sítě"
-#: modules/process/neural.c:723
+#: modules/process/neural.c:730
msgid "Network _name:"
msgstr "_Jméno sítě:"
-#: modules/process/neural.c:775
+#: modules/process/neural.c:782
msgid "Apply Neural Network"
msgstr "Použít neuronovou síť"
-#: modules/process/neural.c:798
+#: modules/process/neural.c:805
msgid "_Scale proportionally to input"
msgstr "Škálovat _proporcionálně ke vstupu"
-#: modules/process/neural.c:929
+#: modules/process/neural.c:936
msgid "Model and signal are not compatible."
msgstr "Model a signál nejsou kompatibilní."
-#: modules/process/neural.c:937
+#: modules/process/neural.c:944
msgid "A field dimension is too small for chosen window size."
msgstr "Rozměr pole je příliš malý pro zvolenou velikost okna."
-#: modules/process/neural.c:1183 modules/process/neural.c:1349
+#: modules/process/neural.c:1190 modules/process/neural.c:1356
msgid "Evaluating..."
msgstr "Vyhodnocení..."
-#: modules/process/neural.c:1309
+#: modules/process/neural.c:1316
msgid "Training was canceled."
msgstr "_Signál pro trénink:"
-#: modules/process/neural.c:1319
+#: modules/process/neural.c:1326
#, c-format
msgid "Mean difference: %.*f %s"
msgstr "Průměrný rozdíl: %.*f %s"
-#: modules/process/neural.c:1371
+#: modules/process/neural.c:1378
msgid "Evaluated signal"
msgstr "Vyhodnocený signál"
-#: modules/process/noise_synth.c:196
+#: modules/process/noise_synth.c:194
msgid "Generates uncorrelated random noise."
msgstr "Generuje nekorelovaný náhodný šum."
-#: modules/process/noise_synth.c:210
+#: modules/process/noise_synth.c:208
msgid "/S_ynthetic/_Noise..."
msgstr "/S_yntetická/Šu_m..."
-#: modules/process/noise_synth.c:214
+#: modules/process/noise_synth.c:212
msgid "Generate surface of uncorrelated noise"
msgstr "Vytvořit povrch z nekorelovaného šumu"
-#: modules/process/noise_synth.c:334
+#: modules/process/noise_synth.c:332
msgid "Random Noise"
msgstr "Náhodný šum"
-#: modules/process/obj_synth.c:274
+#: modules/process/obj_synth.c:270
msgid "Spheres"
msgstr "Sféry"
-#: modules/process/obj_synth.c:275
+#: modules/process/obj_synth.c:271
msgid "Boxes"
msgstr "Kvádry"
-#: modules/process/obj_synth.c:276
+#: modules/process/obj_synth.c:272
msgid "Cones"
msgstr "Kužely"
-#: modules/process/obj_synth.c:277
+#: modules/process/obj_synth.c:273
msgid "Pyramids"
msgstr "Pyramidy"
-#: modules/process/obj_synth.c:278
+#: modules/process/obj_synth.c:274
msgid "Diamonds"
msgstr "Diamanty"
-#: modules/process/obj_synth.c:279
+#: modules/process/obj_synth.c:275
msgid "Tetrahedrons"
msgstr "Čtyřstěny"
-#: modules/process/obj_synth.c:280
+#: modules/process/obj_synth.c:276
msgid "Nuggets"
msgstr "Valouny"
-#: modules/process/obj_synth.c:281
+#: modules/process/obj_synth.c:277
msgid "Thatches"
msgstr "Došky"
-#: modules/process/obj_synth.c:282
+#: modules/process/obj_synth.c:278
msgid "Tents"
msgstr "Stany"
-#: modules/process/obj_synth.c:283
+#: modules/process/obj_synth.c:279
msgid "Gaussians"
msgstr "Gaussovky"
-#: modules/process/obj_synth.c:284
+#: modules/process/obj_synth.c:280
msgid "Doughnuts"
msgstr "Prstence"
-#: modules/process/obj_synth.c:285
+#: modules/process/obj_synth.c:281
msgid "Parabolic bumps"
msgstr "Parabolické hrboly"
-#: modules/process/obj_synth.c:291
+#: modules/process/obj_synth.c:287
msgid "Generates randomly patterned surfaces by placing objects."
msgstr "Vytváří náhodně vzorovaný povrch umísťováním objektů."
-#: modules/process/obj_synth.c:305
-msgid "/S_ynthetic/_Objects..."
-msgstr "/S_yntetická/_Objekty..."
+#: modules/process/obj_synth.c:301
+msgid "/S_ynthetic/_Deposition/_Objects..."
+msgstr "/S_yntetická/_Depozice/_Objekty..."
-#: modules/process/obj_synth.c:309
+#: modules/process/obj_synth.c:305
msgid "Generate surface of randomly placed objects"
msgstr "Vytvořit povrch z náhodně umístěných objektů"
-#: modules/process/obj_synth.c:424
+#: modules/process/obj_synth.c:421
msgid "Both (random)"
msgstr "Oba (náhodně)"
-#: modules/process/obj_synth.c:439
+#: modules/process/obj_synth.c:436
msgid "Random Objects"
msgstr "Náhodné objekty"
-#: modules/process/obj_synth.c:513
-msgid "_Shape:"
-msgstr "_Tvar:"
-
-#: modules/process/obj_synth.c:531
-msgid "obj."
-msgstr "obj."
-
-#: modules/process/obj_synth.c:551
+#: modules/process/obj_synth.c:549
msgid "Aspect Ratio"
msgstr "Poměr stran"
-#: modules/process/obj_synth.c:558
+#: modules/process/obj_synth.c:556
msgid "_Aspect ratio:"
msgstr "Poměr _stran:"
-#: modules/process/obj_synth.c:588
+#: modules/process/obj_synth.c:586
msgid "Scales _with size"
msgstr "Škálova_t s velikostí:"
-#: modules/process/obj_synth.c:612
+#: modules/process/obj_synth.c:611
msgid "_Feature type:"
msgstr "Typ tvaru:"
-#: modules/process/obj_synth.c:807
-msgid "_Truncate:"
-msgstr "_Uříznout:"
-
-#: modules/process/otsu_threshold.c:39 modules/process/otsu_threshold.c:59
+#: modules/process/otsu_threshold.c:40 modules/process/otsu_threshold.c:60
msgid "Automated threshold using Otsu's method on heights."
msgstr "Automatický práh pomocí Otsuovy metody pro výšky."
-#: modules/process/otsu_threshold.c:55
-msgid "/_Grains/_Mark by Otsu's..."
-msgstr "/_Zrna/Označit Otsuovou metodou..."
+#: modules/process/otsu_threshold.c:56
+msgid "/_Grains/_Mark by Otsu's"
+msgstr "/_Zrna/Označit _Otsuho metodou..."
-#: modules/process/outliers.c:40
+#: modules/process/outliers.c:41
msgid "Creates mask of outliers."
msgstr "Vytváří masku z vybočujících hodnot."
-#: modules/process/outliers.c:54
+#: modules/process/outliers.c:55
msgid "/_Correct Data/Mask of _Outliers"
msgstr "/_Korekce dat/Maska v_ybočujících hodnot"
-#: modules/process/outliers.c:58
+#: modules/process/outliers.c:59
msgid "Mark data farther than 3σ from mean value"
msgstr "Označení dat vzdálenějších než 3σ od střední hodnoty"
@@ -12014,80 +12582,100 @@ msgstr "Vzor"
msgid "_Pattern:"
msgstr "_Vzor:"
-#: modules/process/pat_synth.c:812
+#: modules/process/pat_synth.c:813
msgid "Flat"
msgstr "Plochá část"
-#: modules/process/pat_synth.c:820
+#: modules/process/pat_synth.c:821
msgid "_Flat width:"
msgstr "Šířka _ploché části:"
-#: modules/process/pat_synth.c:837 modules/process/pat_synth.c:1139
-#: modules/process/pat_synth.c:1474
+#: modules/process/pat_synth.c:838 modules/process/pat_synth.c:1140
+#: modules/process/pat_synth.c:1475
msgid "_Slope width:"
msgstr "Šířka ši_kmé části:"
-#: modules/process/pat_synth.c:1099
+#: modules/process/pat_synth.c:1100
msgid "Top"
msgstr "Vrchní"
-#: modules/process/pat_synth.c:1106
+#: modules/process/pat_synth.c:1107
msgid "Flat _top width:"
msgstr "Šířka _vrchní plochy:"
-#: modules/process/pat_synth.c:1114
+#: modules/process/pat_synth.c:1115
msgid "Bottom"
msgstr "Spodní"
-#: modules/process/pat_synth.c:1122
+#: modules/process/pat_synth.c:1123
msgid "Flat _bottom width:"
msgstr "Šířka s_podní plochy:"
-#: modules/process/pat_synth.c:1440
+#: modules/process/pat_synth.c:1441
msgid "_Distance:"
msgstr "_Vzdálenost:"
-#: modules/process/pid.c:96
+#: modules/process/phase_synth.c:136
+msgid "Generates phase-separated structures."
+msgstr "Generovat povrch s oddělenými fázemi."
+
+#: modules/process/phase_synth.c:150
+msgid "/S_ynthetic/P_hases..."
+msgstr "/S_yntetická/_Fáze..."
+
+#: modules/process/phase_synth.c:154
+msgid "Generate surface with separated phases"
+msgstr "Vytvořit povrch s oddělenými fázemi"
+
+#: modules/process/phase_synth.c:203
+msgid "Separated Phases"
+msgstr "Oddělené fáze"
+
+#: modules/process/phase_synth.c:287
+msgid "Size s_pread:"
+msgstr "_Rozptyl velikostí:"
+
+#: modules/process/pid.c:95
msgid "A simple PID simulator"
msgstr "Simulace PID smyčky"
-#: modules/process/pid.c:110
+#: modules/process/pid.c:109
msgid "/_Tip and Indentation/_PID simulation..."
msgstr "/_Hrot a indentace/Simulace _PID smyčky..."
-#: modules/process/pid.c:114
+#: modules/process/pid.c:113
msgid "Simulate PID effects on measurement"
msgstr "Simuluje vliv PID smyčky na měření"
-#: modules/process/pid.c:158
+#: modules/process/pid.c:157
msgid "PID FW result"
msgstr "Výsledek PID (FW)"
-#: modules/process/pid.c:167
+#: modules/process/pid.c:166
msgid "PID FW max. force"
msgstr "Max. síla PID (FW)"
-#: modules/process/pid.c:176
+#: modules/process/pid.c:175
msgid "PID REV result"
msgstr "Výsledek PID (REV)"
-#: modules/process/pid.c:185
+#: modules/process/pid.c:184
msgid "PID REV max. force"
msgstr "Max. síla ID (REV)"
-#: modules/process/pid.c:198
+#: modules/process/pid.c:196
msgid "PID simulation"
msgstr "Simulace PID smyčky"
-#: modules/process/pid.c:215
+#: modules/process/pid.c:214
msgid "_Proportional:"
msgstr "_proporcionální:"
-#: modules/process/pid.c:221
+#: modules/process/pid.c:220
msgid "_Integral:"
msgstr "_Integrální:"
-#: modules/process/pid.c:227
+#: modules/process/pid.c:226
msgid "_Integration steps:"
msgstr "Kroků _integrace:"
@@ -12095,15 +12683,15 @@ msgstr "Kroků _integrace:"
msgid "_Derivative:"
msgstr "_Derivační:"
-#: modules/process/pid.c:241
+#: modules/process/pid.c:240
msgid "PID/scan speed _ratio:"
msgstr "Pomě_r smyčka/rychlost:"
-#: modules/process/pid.c:253
+#: modules/process/pid.c:255
msgid "Force strength:"
msgstr "Síla:"
-#: modules/process/pid.c:259
+#: modules/process/pid.c:261
msgid "Force setpoint:"
msgstr "Pracovní bod síly:"
@@ -12111,7 +12699,7 @@ msgstr "Pracovní bod síly:"
msgid "Scanning..."
msgstr "Skenuji..."
-#: modules/process/pid.c:396
+#: modules/process/pid.c:401
msgid "Computation diverged, try to change parameters"
msgstr "Výpočet divergoval, zkus jiné parametry"
@@ -12131,23 +12719,23 @@ msgstr "Provede polynomiální deformaci ve vodorovné rovině"
msgid "Distort by Polynomial"
msgstr "Polynomiální deformace"
-#: modules/process/polydistort.c:282
+#: modules/process/polydistort.c:285
msgid "Ori_ginal"
msgstr "Ori_ginál:"
-#: modules/process/polydistort.c:283
+#: modules/process/polydistort.c:286
msgid "_Transformed"
msgstr "_Transformovaný"
-#: modules/process/polydistort.c:289
+#: modules/process/polydistort.c:292
msgid "X Coefficients"
msgstr "Koeficienty X"
-#: modules/process/polydistort.c:303
+#: modules/process/polydistort.c:306
msgid "Y Coefficients"
msgstr "Koeficienty Y"
-#: modules/process/polydistort.c:499
+#: modules/process/polydistort.c:502
msgid "Distorted"
msgstr "Deformovaný"
@@ -12183,23 +12771,23 @@ msgstr "Vyrovnaná data"
msgid "_Horizontal polynom degree:"
msgstr "Stupeň _vodorovného polynomu:"
-#: modules/process/polylevel.c:450
+#: modules/process/polylevel.c:451
msgid "_Vertical polynom degree:"
msgstr "Stupeň _svislého polynomu:"
-#: modules/process/polylevel.c:456
+#: modules/process/polylevel.c:458
msgid "_Same degrees"
msgstr "S_tejné stupně"
-#: modules/process/polylevel.c:474
+#: modules/process/polylevel.c:476
msgid "_Maximum polynom degree:"
msgstr "_Maximální stupeň polynomu"
-#: modules/process/polylevel.c:561
+#: modules/process/polylevel.c:564
msgid "Polynomial Coefficients"
msgstr "Polynomiální koeficienty"
-#: modules/process/polylevel.c:934 modules/tools/distance.c:594
+#: modules/process/polylevel.c:937 modules/tools/distance.c:594
#: modules/tools/selectionmanager.c:720
msgid "Save Table"
msgstr "Uložit tabulku"
@@ -12221,8 +12809,8 @@ msgid "/_Presentation/E_xtract Presentation"
msgstr "/_Presentace/_Extrahovat presentaci"
#: modules/process/presentationops.c:81
-msgid "Extract presentation to a new channel"
-msgstr "Extrahovat presentaci do nového kanálu"
+msgid "Extract presentation to a new image"
+msgstr "Extrahovat presentaci do nového obrázku"
#: modules/process/presentationops.c:84
msgid "/_Presentation/_Attach Presentation..."
@@ -12248,6 +12836,10 @@ msgstr "Připojit presentaci"
msgid "_Data to attach:"
msgstr "Připojit _data:"
+#: modules/process/preview.h:245
+msgid "Combine with existing mask:"
+msgstr "Zkombinovat s existující maskou:"
+
#: modules/process/psdf_logphi.c:76
msgid ""
"Two-dimensional FFT (Fast Fourier Transform) transformed to coordinates (log-"
@@ -12268,10 +12860,79 @@ msgstr "Vypočítat PSDF v log-úhel souřadnicích"
msgid "Log-Phi PSDF"
msgstr "Log-úhel PSDF"
-#: modules/process/psdf_logphi.c:275 modules/process/wpour_mark.c:320
+#: modules/process/psdf_logphi.c:276 modules/process/wpour_mark.c:320
msgid "Gaussian _smoothing:"
msgstr "Gaussovské v_yhlazení:"
+#: modules/process/psf-fit.c:165
+msgid "Gaussian (asymmetric)"
+msgstr "Gaussovka (asymetrická)"
+
+#: modules/process/psf-fit.c:177
+msgid "Point spread function estimation by fitting explicit function form."
+msgstr "Odhad rozptylové funkce (PSF) fitováním explicitního tvaru."
+
+#: modules/process/psf-fit.c:191
+msgid "/_Statistics/_PSF Fit..."
+msgstr "/_Statistika/Nafitovat _PSF..."
+
+#: modules/process/psf-fit.c:195
+msgid "Fit PSF from known data and image"
+msgstr "Nafitovat PSF ze známých dat a obrazu"
+
+#: modules/process/psf-fit.c:246 modules/process/psf.c:181
+#: modules/process/psf.c:230
+msgid "PSF"
+msgstr "PSF"
+
+#: modules/process/psf-fit.c:254 modules/process/psf.c:195
+msgid "PSF*P"
+msgstr "PSF*P"
+
+#: modules/process/psf-fit.c:271
+msgid "Fit PSF"
+msgstr "Fitovat PSF"
+
+#: modules/process/psf-fit.c:289 modules/process/psf.c:286
+msgid "_Ideal response:"
+msgstr "_Ideální odezva:"
+
+#: modules/process/psf.c:117
+msgid "Point spread function estimation"
+msgstr "Odhad rozptylové funkce (PSF)"
+
+#: modules/process/psf.c:131
+msgid "/_Statistics/_PSF Guess..."
+msgstr "/_Statistika/Odhad _PSF..."
+
+#: modules/process/psf.c:135
+msgid "Estimate PSF from known data and image"
+msgstr "Odhadnout PSF ze známých dat a obrazu"
+
+#: modules/process/psf.c:208
+msgid "PSF*P - I"
+msgstr "PSF*P - I"
+
+#: modules/process/psf.c:231
+msgid "Convolved"
+msgstr "Konvoluce"
+
+#: modules/process/psf.c:237
+msgid "Estimate PSF"
+msgstr "Odhadnutá PSF"
+
+#: modules/process/psf.c:238
+msgid "_Fit"
+msgstr "_Proložit"
+
+#: modules/process/psf.c:295
+msgid "_Display:"
+msgstr "_Zobrazovat:"
+
+#: modules/process/psf.c:301
+msgid "_Sigma init:"
+msgstr "Počáteční _sigma:"
+
#: modules/process/rank.c:92
msgid "Enhances local contrast using a rank transform."
msgstr "Zlepšuje lokální kontrast pomocí řadicí transformace."
@@ -12321,7 +12982,7 @@ msgstr "/_Jednoduché operace/Rot_ace o úhel..."
msgid "Rotate by arbitrary angle"
msgstr "Rotace o libovolný úhel"
-#: modules/process/rotate.c:192
+#: modules/process/rotate.c:192 modules/volume/volume_swaxes.c:651
msgid "Rotated Data"
msgstr "Otočená data"
@@ -12377,63 +13038,63 @@ msgstr "Škálovaná data"
msgid "verb|Scale"
msgstr "Změnit velikost"
-#: modules/process/scale.c:216
+#: modules/process/scale.c:217
msgid "Scale by _ratio:"
msgstr "Zvětšit/zmenšit v _poměru:"
-#: modules/process/scale.c:224
+#: modules/process/scale.c:225
msgid "_proportional"
msgstr "_proporcionální"
-#: modules/process/scale.c:235
+#: modules/process/scale.c:237
msgid "New _width:"
msgstr "Nová šířk_a:"
-#: modules/process/scale.c:243
+#: modules/process/scale.c:246
msgid "New _height:"
msgstr "Nová _výška:"
-#: modules/process/scars.c:113
+#: modules/process/scars.c:122
msgid "Marks and/or removes scars (horizontal linear artifacts)."
msgstr "Označuje a/nebo odstraňuje šrámy (vodorovné lineární defekty)."
-#: modules/process/scars.c:127
+#: modules/process/scars.c:136
msgid "/_Correct Data/M_ark Scars..."
msgstr "/_Korekce dat/O_značení šrámů..."
-#: modules/process/scars.c:131
+#: modules/process/scars.c:140
msgid "Mark horizontal scars (strokes)"
msgstr "Označit horizontální šrámy"
-#: modules/process/scars.c:134
+#: modules/process/scars.c:143
msgid "/_Correct Data/Remove _Scars"
msgstr "/_Korekce dat/_Odstranění šrámů"
-#: modules/process/scars.c:138
+#: modules/process/scars.c:147
msgid "Correct horizontal scars (strokes)"
msgstr "Opravit horizontální šrámy"
-#: modules/process/scars.c:293
+#: modules/process/scars.c:312
msgid "Mark Scars"
msgstr "Označení šrámů"
-#: modules/process/scars.c:331
+#: modules/process/scars.c:353
msgid "Maximum _width:"
msgstr "Maximální šířk_a:"
-#: modules/process/scars.c:338
+#: modules/process/scars.c:361
msgid "Minimum _length:"
msgstr "Minimální _délka:"
-#: modules/process/scars.c:345
+#: modules/process/scars.c:369
msgid "_Hard threshold:"
msgstr "_Tvrdý práh:"
-#: modules/process/scars.c:353
+#: modules/process/scars.c:377
msgid "_Soft threshold:"
msgstr "_Měkký práh:"
-#: modules/process/scars.c:361
+#: modules/process/scars.c:385
msgid "Scars type:"
msgstr "Typ šrámů:"
@@ -12473,27 +13134,27 @@ msgstr "Monte Carlo"
msgid "_Quality:"
msgstr "_Kvalita:"
-#: modules/process/shade.c:92
+#: modules/process/shade.c:94
msgid "Creates a shaded presentation of data."
msgstr "Vytváří vystínovanou presentaci dat."
-#: modules/process/shade.c:106
+#: modules/process/shade.c:108
msgid "/_Presentation/_Shading..."
msgstr "/_Presentace/_Stínování..."
-#: modules/process/shade.c:110
+#: modules/process/shade.c:112
msgid "Shade data"
msgstr "Vystínování dat"
-#: modules/process/shade.c:207
+#: modules/process/shade.c:209
msgid "Shading"
msgstr "Stínování"
-#: modules/process/shade.c:253
+#: modules/process/shade.c:260
msgid "_Mix:"
msgstr "_Míchat:"
-#: modules/process/slope_dist.c:161
+#: modules/process/slope_dist.c:160
msgid ""
"Calculates one- or two-dimensional distribution of slopes or graph of their "
"angular distribution."
@@ -12501,82 +13162,131 @@ msgstr ""
"Počítá jedno- a dvourozměrné rozdělení sklonů, případně graf jejich úhlového "
"rozdělení."
-#: modules/process/slope_dist.c:176
+#: modules/process/slope_dist.c:175
msgid "/_Statistics/_Slope Distribution..."
msgstr "/_Statistika/Rozdělení _sklonu..."
-#: modules/process/slope_dist.c:180
+#: modules/process/slope_dist.c:179
msgid "Calculate angular slope distribution"
msgstr "Výpočet úhlového rozdělení sklonů"
-#: modules/process/slope_dist.c:221
+#: modules/process/slope_dist.c:220
msgid "Slope distribution"
msgstr "Rozdělení sklonů"
-#: modules/process/slope_dist.c:253
+#: modules/process/slope_dist.c:252
msgid "_Two-dimensional distribution"
msgstr "_Dvojrozměrné rozdělení"
-#: modules/process/slope_dist.c:254
+#: modules/process/slope_dist.c:253
msgid "Directional (φ) _graph"
msgstr "Směrový (φ) _graf"
-#: modules/process/slope_dist.c:255
+#: modules/process/slope_dist.c:254
msgid "_Inclination (θ) graph"
msgstr "_Sklonový (θ) graf"
-#: modules/process/slope_dist.c:256
+#: modules/process/slope_dist.c:255
msgid "Inclination (gra_dient) graph"
msgstr "_Sklonový graf (gradient)"
-#: modules/process/slope_dist.c:270
+#: modules/process/slope_dist.c:269
msgid "Slope Distribution"
msgstr "Rozdělení sklonu"
-#: modules/process/slope_dist.c:755
+#: modules/process/slope_dist.c:749
msgid "Angular Slope Distribution"
msgstr "Úhlové rozdělení sklonů"
-#: modules/process/slope_dist.c:763 modules/process/tilt.c:179
+#: modules/process/slope_dist.c:757 modules/process/tilt.c:179
msgid "Slopes"
msgstr "Sklony"
-#: modules/process/slope_dist.c:824 modules/process/slope_dist.c:893
+#: modules/process/slope_dist.c:818 modules/process/slope_dist.c:887
msgid "Inclination Distribution"
msgstr "Rozdělení sklonů"
-#: modules/process/slope_dist.c:832 modules/process/slope_dist.c:901
+#: modules/process/slope_dist.c:826 modules/process/slope_dist.c:895
msgid "Inclinations"
msgstr "Sklony"
-#: modules/process/sphere-revolve.c:97
+#: modules/process/sphere-revolve.c:111
msgid "Subtracts background by arc or sphere revolution."
msgstr "Odečítá pozadí pomocí valení oblouku či sféry."
-#: modules/process/sphere-revolve.c:113
+#: modules/process/sphere-revolve.c:125
msgid "/_Level/Revolve _Arc..."
msgstr "/_Vyrovnání/Valení _oblouku..."
-#: modules/process/sphere-revolve.c:117
+#: modules/process/sphere-revolve.c:129
msgid "Level data by arc revolution"
msgstr "Vyrovnat data valením oblouku"
-#: modules/process/sphere-revolve.c:208 modules/tools/sfunctions.c:371
+#: modules/process/sphere-revolve.c:132
+msgid "/_Level/Revolve _Sphere..."
+msgstr "/_Vyrovnání/Valení _koule..."
+
+#: modules/process/sphere-revolve.c:136
+msgid "Level data by sphere revolution"
+msgstr "Vyrovnat data valením koule"
+
+#: modules/process/sphere-revolve.c:303 modules/tools/sfunctions.c:381
msgid "_Horizontal direction"
msgstr "_Vodorovný směr"
-#: modules/process/sphere-revolve.c:209 modules/tools/sfunctions.c:372
+#: modules/process/sphere-revolve.c:304 modules/tools/sfunctions.c:382
msgid "_Vertical direction"
msgstr "_Svislý směr"
-#: modules/process/sphere-revolve.c:210
+#: modules/process/sphere-revolve.c:305
msgid "_Both directions"
msgstr "O_ba směry"
-#: modules/process/sphere-revolve.c:217
+#: modules/process/sphere-revolve.c:315
+msgid "Revolve Sphere"
+msgstr "Valení koule"
+
+#: modules/process/sphere-revolve.c:315
msgid "Revolve Arc"
msgstr "Valení oblouku"
+#: modules/process/sphere-revolve.c:355
+msgid "Direction:"
+msgstr "Směr:"
+
+#: modules/process/sphere-revolve.c:699
+msgid "Revolving sphere..."
+msgstr "Valím kouli..."
+
+#: modules/process/stitch.c:135
+msgid "Stitch multiple images based on offsets of origins."
+msgstr "Sešití více obrázků na základě posunů počátku."
+
+#: modules/process/stitch.c:149
+msgid "/M_ultidata/_Stitch..."
+msgstr "/M_ultidata/_Sešití..."
+
+#: modules/process/stitch.c:153
+msgid "Stitch images using offsets"
+msgstr "Sešít obrázky pomocí posunů počátků"
+
+#: modules/process/stitch.c:269
+msgid "Stitch"
+msgstr "Sešití"
+
+#: modules/process/stitch.c:312
+msgid "Channels"
+msgstr "Kanály"
+
+#: modules/process/stitch.c:435
+msgid "Restore"
+msgstr "Obnovit"
+
+#: modules/process/stitch.c:445 modules/tools/linestats.c:379
+#: modules/tools/sfunctions.c:440 modules/tools/stats.c:406
+msgid "_Instant updates"
+msgstr "Okamžité aktuali_zace"
+
#: modules/process/straighten_path.c:126
msgid "Extracts a straightened part of image along a curve."
msgstr "Extrahuje narovnanou část obrázku vybranou podél zakřivené cesty."
@@ -12593,28 +13303,28 @@ msgstr "Narovnat podél cesty"
msgid "Straighten Path"
msgstr "Narovnat podél cesty"
-#: modules/process/straighten_path.c:254
+#: modules/process/straighten_path.c:253
msgid "Res_tore"
msgstr "Ob_novit"
-#: modules/process/straighten_path.c:259
+#: modules/process/straighten_path.c:258
msgid "Re_verse"
msgstr "Obrátit _směr"
#: modules/process/straighten_path.c:278 modules/tools/pathlevel.c:256
-#: modules/tools/profile.c:507 modules/tools/roughness.c:854
+#: modules/tools/profile.c:503 modules/tools/roughness.c:868
msgid "_Thickness:"
msgstr "_Tloušťka:"
-#: modules/process/straighten_path.c:286
+#: modules/process/straighten_path.c:287
msgid "_Slackness:"
msgstr "_Průvěs:"
-#: modules/process/straighten_path.c:292
+#: modules/process/straighten_path.c:293
msgid "C_losed curve"
msgstr "_Uzavřená křivka"
-#: modules/process/straighten_path.c:379
+#: modules/process/straighten_path.c:380
msgid "Straightened"
msgstr "Narovnaný"
@@ -12637,52 +13347,52 @@ msgstr "Superrozlišení z více obrázků téhož útvaru."
msgid "Supres"
msgstr "Superrozlišení"
-#: modules/process/superresolution.c:421
+#: modules/process/superresolution.c:420
msgid "Correlating to determine mean shift..."
msgstr "Koreluji k určení středního posunu..."
-#: modules/process/superresolution.c:511
+#: modules/process/superresolution.c:510
msgid "Cross-correlation..."
msgstr "Počítám křížovou korelaci..."
-#: modules/process/superresolution.c:554 modules/xyz/xyz_raster.c:1079
-#: modules/xyz/xyz_raster.c:1119
+#: modules/process/superresolution.c:553 modules/xyz/xyz_raster.c:1053
+#: modules/xyz/xyz_raster.c:1093
msgid "Interpolating..."
msgstr "Interpoluji..."
-#: modules/process/synth.h:343
+#: modules/process/synth.h:344
msgid "Roundness"
msgstr "Zaoblenost"
-#: modules/process/synth.h:351
+#: modules/process/synth.h:352
msgid "Roundn_ess:"
msgstr "_Zaoblenost:"
-#: modules/process/synth.h:399
+#: modules/process/synth.h:401
msgid "Orientation"
msgstr "Orientace"
-#: modules/process/synth.h:408
+#: modules/process/synth.h:410
msgid "Orien_tation:"
msgstr "Or_ientace:"
-#: modules/process/synth.h:432
+#: modules/process/synth.h:436
+msgid "_Truncate:"
+msgstr "_Uříznout:"
+
+#: modules/process/synth.h:460
msgid "Variance:"
msgstr "Rozptyl:"
-#: modules/process/synth.h:456
-msgid "Deformation"
-msgstr "Deformace"
-
-#: modules/process/synth.h:464
+#: modules/process/synth.h:493
msgid "_Amplitude:"
msgstr "_Amplituda:"
-#: modules/process/synth.h:472
+#: modules/process/synth.h:501
msgid "_Lateral scale:"
msgstr "_Příčná škála:"
-#: modules/process/synth.h:566
+#: modules/process/synth.h:595
msgid "Randomi_ze"
msgstr "Znáhodn_it"
@@ -12698,41 +13408,41 @@ msgstr "/_Jednoduché operace/_Omezit rozsah..."
msgid "Limit data range"
msgstr "Omezit rozsah dat"
-#: modules/process/threshold.c:246
+#: modules/process/threshold.c:241
msgid "Limit Range"
msgstr "Omezit rozsah dat"
-#: modules/process/threshold.c:281
+#: modules/process/threshold.c:276
msgid "Specify _thresholds"
msgstr "Zadat _rozsah"
-#: modules/process/threshold.c:283
+#: modules/process/threshold.c:278
msgid "Use _display range"
msgstr "Použít _zobrazovaný rozsah"
-#: modules/process/threshold.c:285
+#: modules/process/threshold.c:280
msgid "Cut off outlier_s"
msgstr "Odříznout v_ybočující hodnoty"
-#: modules/process/threshold.c:294
+#: modules/process/threshold.c:289
msgid "_Lower:"
msgstr "_Dolní:"
-#: modules/process/threshold.c:300
+#: modules/process/threshold.c:295
msgid "_Upper:"
msgstr "_Horní:"
-#: modules/process/threshold.c:305
+#: modules/process/threshold.c:300
msgid "Set to _Full Range"
msgstr "Plný rozsah"
#. TRANSLATORS: This is a range: 123 to 456.
-#: modules/process/threshold.c:318
+#: modules/process/threshold.c:313
#, c-format
msgid "%.*f to %.*f"
msgstr "%.*f až %.*f"
-#: modules/process/threshold.c:341
+#: modules/process/threshold.c:336
msgid "F_arther than:"
msgstr "Vzdálenější _než:"
@@ -12752,11 +13462,11 @@ msgstr "Naklonit o zadaný úhel"
msgid "Tilt"
msgstr "Naklonění"
-#: modules/process/tilt.c:185 modules/volume/volume_slice.c:444
+#: modules/process/tilt.c:185 modules/volume/volume_slice.c:446
msgid "_X:"
msgstr "_X:"
-#: modules/process/tilt.c:194 modules/volume/volume_slice.c:464
+#: modules/process/tilt.c:194 modules/volume/volume_slice.c:469
msgid "_Y:"
msgstr "_Y:"
@@ -12764,31 +13474,31 @@ msgstr "_Y:"
msgid "Angles"
msgstr "Úhly"
-#: modules/process/tip_blind.c:178
+#: modules/process/tip_blind.c:177
msgid "Blind estimation of SPM tip using Villarubia's algorithm."
msgstr "Slepý odhad tvaru SPM hrotu Villarubiovou metodou."
-#: modules/process/tip_blind.c:192
+#: modules/process/tip_blind.c:191
msgid "/_Tip and Indentation/_Blind Estimation..."
msgstr "/_Hrot a indentace/_Slepý odhad tvaru hrotu..."
-#: modules/process/tip_blind.c:196
+#: modules/process/tip_blind.c:195
msgid "Blind tip estimation"
msgstr "Slepý odhad hrotu"
-#: modules/process/tip_blind.c:231
+#: modules/process/tip_blind.c:230
msgid "Blind Tip Estimation"
msgstr "Slepý odhad tvaru hrotu"
-#: modules/process/tip_blind.c:232
+#: modules/process/tip_blind.c:231
msgid "Run _Partial"
msgstr "Čás_t. odhad"
-#: modules/process/tip_blind.c:233
+#: modules/process/tip_blind.c:232
msgid "Run _Full"
msgstr "Pl_ný odhad"
-#: modules/process/tip_blind.c:234
+#: modules/process/tip_blind.c:233
msgid "_Reset Tip"
msgstr "_Obnovit hrot"
@@ -12796,77 +13506,77 @@ msgstr "_Obnovit hrot"
msgid "Related _data:"
msgstr "Související data:"
-#: modules/process/tip_blind.c:326
+#: modules/process/tip_blind.c:327
msgid "Estimated Tip Size"
msgstr "Odhadovaná velikost hrotu"
-#: modules/process/tip_blind.c:347
+#: modules/process/tip_blind.c:350
msgid "_Same resolution"
msgstr "S_tejná rozlišení"
-#: modules/process/tip_blind.c:366
+#: modules/process/tip_blind.c:376
msgid "Noise suppression t_hreshold:"
msgstr "Prá_h potlačení šumu:"
-#: modules/process/tip_blind.c:386
+#: modules/process/tip_blind.c:384
msgid "Use _boundaries"
msgstr "Použít _okraje"
-#: modules/process/tip_blind.c:396
+#: modules/process/tip_blind.c:395
msgid "Stripes"
msgstr "Pruhy"
-#: modules/process/tip_blind.c:402
+#: modules/process/tip_blind.c:401
msgid "_Split to stripes:"
msgstr "_Rozdělit na pruhy:"
-#: modules/process/tip_blind.c:416
+#: modules/process/tip_blind.c:412
msgid "_Preview stripe:"
msgstr "_Náhled pruhu:"
-#: modules/process/tip_blind.c:423
+#: modules/process/tip_blind.c:420
msgid "Plot size _graph"
msgstr "Nakreslit _graf velikosti"
-#: modules/process/tip_blind.c:433
+#: modules/process/tip_blind.c:430
msgid "Create tip i_mages"
msgstr "Vytvořit obráz_ky hrotů"
#. TRANSLATORS: Prefix for the progressbar message.
-#: modules/process/tip_blind.c:810
+#: modules/process/tip_blind.c:807
#, c-format
msgid "Stripe %u: "
msgstr "Pruh %u: "
-#: modules/process/tip_blind.c:917 modules/process/tip_blind.c:941
+#: modules/process/tip_blind.c:914 modules/process/tip_blind.c:938
msgid "Estimated tip"
msgstr "Odhadnutý hrot"
-#: modules/process/tip_blind.c:1207 modules/process/tip_blind.c:1216
+#: modules/process/tip_blind.c:1204 modules/process/tip_blind.c:1213
msgid "Tip radius evolution"
msgstr "Vývoj poloměru hrotu"
-#: modules/process/tip_model.c:114
+#: modules/process/tip_model.c:112
msgid "Models SPM tip."
msgstr "Modeluje SPM hrot."
-#: modules/process/tip_model.c:129
+#: modules/process/tip_model.c:127
msgid "/_Tip and Indentation/_Model Tip..."
msgstr "/_Hrot a indentace/_Modelovat hrot..."
-#: modules/process/tip_model.c:133
+#: modules/process/tip_model.c:131
msgid "Model AFM tip"
msgstr "Modelování hrotu AFM"
-#: modules/process/tip_model.c:164
+#: modules/process/tip_model.c:162
msgid "Model Tip"
msgstr "Modelování hrotu"
-#: modules/process/tip_model.c:224
+#: modules/process/tip_model.c:222
msgid "Tip _type:"
msgstr "Typ hrotu:"
-#: modules/process/tip_model.c:229
+#: modules/process/tip_model.c:228
msgid "_Number of sides:"
msgstr "_Počet stran:"
@@ -12878,19 +13588,19 @@ msgstr "_Sklon hrotu:"
msgid "Tip _rotation:"
msgstr "_Rotace hrotu:"
-#: modules/process/tip_model.c:250
+#: modules/process/tip_model.c:255
msgid "Tip _apex radius:"
msgstr "Poloměr _vrcholku:"
-#: modules/process/tip_model.c:269
+#: modules/process/tip_model.c:265
msgid "Tip _anisotropy:"
msgstr "_Anisotropie hrotu:"
-#: modules/process/tip_model.c:490
+#: modules/process/tip_model.c:484
msgid "Modeled tip"
msgstr "Modelovaný hrot"
-#: modules/process/tip_model.c:562
+#: modules/process/tip_model.c:556
#, c-format
msgid "Tip resolution: %d × %d pixels"
msgstr "Rozlišení hrotu: %d × %d pixelů"
@@ -12996,8 +13706,8 @@ msgid "Converts datafield to 3D volume data."
msgstr "Převádí datové pole na trojrozměrná objemová data."
#: modules/process/volumize.c:56
-msgid "/_Basic Operations/Volumize..."
-msgstr "/_Jednoduché operace/Převést na o_bjem..."
+msgid "/_Basic Operations/Volumize"
+msgstr "/_Jednoduché operace/Převést na o_bjemová..."
#: modules/process/volumize.c:60
msgid "Convert datafield to 3D data"
@@ -13041,73 +13751,77 @@ msgstr "_Z-ové rozlišení:"
msgid "Z _range:"
msgstr "Z-ový _rozsah:"
-#: modules/process/wave_synth.c:211
+#: modules/process/wave_synth.c:219
msgid "Generates various kinds of waves."
msgstr "Generuje různé druhy vln."
-#: modules/process/wave_synth.c:225
+#: modules/process/wave_synth.c:233
msgid "/S_ynthetic/_Waves..."
msgstr "/S_yntetická/_Vlny..."
-#: modules/process/wave_synth.c:229
+#: modules/process/wave_synth.c:237
msgid "Generate waves"
msgstr "Generovat vlny"
-#: modules/process/wave_synth.c:347
+#: modules/process/wave_synth.c:366
msgid "Waves"
msgstr "Vlny"
-#: modules/process/wave_synth.c:422 modules/tools/linestats.c:337
-#: modules/tools/sfunctions.c:401 modules/volume/volume_linestat.c:369
+#: modules/process/wave_synth.c:441 modules/tools/linestats.c:337
+#: modules/tools/sfunctions.c:411 modules/volume/volume_linestat.c:374
msgid "_Quantity:"
msgstr "_Veličina:"
-#: modules/process/wave_synth.c:429
+#: modules/process/wave_synth.c:448
msgid "_Number of waves:"
msgstr "_Počet vln:"
-#: modules/process/wave_synth.c:436 modules/process/wave_synth.c:582
-#: modules/tools/roughness.c:274
+#: modules/process/wave_synth.c:455 modules/process/wave_synth.c:617
+#: modules/tools/roughness.c:275
msgid "Amplitude"
msgstr "Amplituda"
-#: modules/process/wave_synth.c:441
+#: modules/process/wave_synth.c:460
msgid "_Wave form:"
msgstr "Forma _vlny:"
-#: modules/process/wave_synth.c:448
+#: modules/process/wave_synth.c:467
msgid "Amplitude:"
msgstr "Amplituda:"
-#: modules/process/wave_synth.c:466
+#: modules/process/wave_synth.c:487
+msgid "_Decay:"
+msgstr "Ú_bytek:"
+
+#: modules/process/wave_synth.c:497
msgid "Frequency"
msgstr "Frekvence"
-#: modules/process/wave_synth.c:472
+#: modules/process/wave_synth.c:503
msgid "_Spatial frequency:"
msgstr "Prostorová _frekvence:"
-#: modules/process/wave_synth.c:488
+#: modules/process/wave_synth.c:519
msgid "_X center:"
msgstr "Střed v _X:"
-#: modules/process/wave_synth.c:499
+#: modules/process/wave_synth.c:532
msgid "_Y center:"
msgstr "Střed v _Y"
-#: modules/process/wave_synth.c:565
+#: modules/process/wave_synth.c:600
msgid "Cosine"
msgstr "Kosinus"
-#: modules/process/wave_synth.c:566
+#: modules/process/wave_synth.c:601
msgid "Inverse cosh"
msgstr "Inverzní cosh"
-#: modules/process/wave_synth.c:567
+#: modules/process/wave_synth.c:602
msgid "Flat top"
msgstr "Plochý vršek"
-#: modules/process/wave_synth.c:581
+#: modules/process/wave_synth.c:616
msgid "Displacement"
msgstr "Posunutí"
@@ -13191,39 +13905,39 @@ msgstr "Sloučené obrázky"
msgid "Preprocess and mark"
msgstr "Předzpracovat a označit"
-#: modules/process/xydenoise.c:57
+#: modules/process/xydenoise.c:58
msgid "Denoises measurement on basis of two orthogonal scans."
msgstr "Odšumuje měření na základě dvou kolmých skenů."
-#: modules/process/xydenoise.c:71
+#: modules/process/xydenoise.c:72
msgid "/M_ultidata/_XY denoise..."
msgstr "/M_ultidata/_XY odšumění..."
-#: modules/process/xydenoise.c:75
+#: modules/process/xydenoise.c:76
msgid "Denoises horizontal/vertical measurement."
msgstr "Odšumí data z horizontálního a vertikálního snímku"
-#: modules/process/xydenoise.c:102
+#: modules/process/xydenoise.c:103
msgid "XY Denoising"
msgstr "XY odšumění"
-#: modules/process/xydenoise.c:124
+#: modules/process/xydenoise.c:125
msgid "Second direction:"
msgstr "Druhý směr:"
-#: modules/process/xydenoise.c:232
+#: modules/process/xydenoise.c:233
msgid "Computing forward FFTs..."
msgstr "Počítám dopředné FFT..."
-#: modules/process/xydenoise.c:248
+#: modules/process/xydenoise.c:249
msgid "Computing image..."
msgstr "Počítám obrázek..."
-#: modules/process/xydenoise.c:260
+#: modules/process/xydenoise.c:261
msgid "Computing backward FFT..."
msgstr "Počítám zpětné FFT..."
-#: modules/process/xydenoise.c:272
+#: modules/process/xydenoise.c:273
msgid "Denoised"
msgstr "Odšuměná data"
@@ -13239,63 +13953,67 @@ msgstr "/_Jednoduché operace/Převést na _XYZ..."
msgid "Convert to XYZ data"
msgstr "Převést datové pole na XYZ data"
-#: modules/pygwy/pygwy-console.c:55
+#: modules/pygwy/pygwy-console.c:99
msgid "/Pygwy Console"
msgstr "/Konsola pygwy"
-#: modules/pygwy/pygwy-console.c:59
+#: modules/pygwy/pygwy-console.c:103
msgid "Python wrapper console"
msgstr "Konzola rozhraní Pythonu"
-#: modules/pygwy/pygwy-console.c:142
-msgid ">>> Running the script above\n"
-msgstr ">>> Spouštím skript výše\n"
-
-#: modules/pygwy/pygwy-console.c:194
-msgid "Open Python script"
-msgstr "Otevřít skript v Pythonu"
-
-#: modules/pygwy/pygwy-console.c:275
-msgid "Save Script as"
-msgstr "Uložit skript jako"
-
-#: modules/pygwy/pygwy-console.c:327
+#: modules/pygwy/pygwy-console.c:168 modules/pygwy/pygwy-console.c:481
msgid "Pygwy Console"
msgstr "Konsola pygwy"
-#: modules/pygwy/pygwy-console.c:340
-msgid "Clear Log"
-msgstr "Vyprázdnit log"
-
-#: modules/pygwy/pygwy-console.c:344
+#: modules/pygwy/pygwy-console.c:187
msgid "Open script in Python language (Ctrl-O)"
msgstr "Otevřít skript v jazyce Python (Ctrl-O)"
-#: modules/pygwy/pygwy-console.c:346
+#: modules/pygwy/pygwy-console.c:197
msgid "Save script (Ctrl-S)"
msgstr "Uložit skript (Ctrl-S)"
-#: modules/pygwy/pygwy-console.c:348
+#: modules/pygwy/pygwy-console.c:207
+msgid "Save script as (Ctrl-Shift-S)"
+msgstr "Uložit skript jako (Ctrl-Shift-S)"
+
+#: modules/pygwy/pygwy-console.c:217
msgid "Execute script (Ctrl-E)"
msgstr "Spustit skript (Ctrl-E)"
-#: modules/pygwy/pygwy-console.c:426
+#: modules/pygwy/pygwy-console.c:227
+msgid "Clear Log"
+msgstr "Vyprázdnit log"
+
+#: modules/pygwy/pygwy-console.c:285
msgid "Command"
msgstr "Příkaz"
-#: pygwy.c:120
+#: modules/pygwy/pygwy-console.c:371
+msgid ">>> Running the script above\n"
+msgstr ">>> Spouštím skript výše\n"
+
+#: modules/pygwy/pygwy-console.c:425
+msgid "Save Python Script as"
+msgstr "Uložit skript v Pythonu jako"
+
+#: modules/pygwy/pygwy-console.c:429
+msgid "Open Python Script"
+msgstr "Otevřít skript v Pythonu"
+
+#: pygwy.c:130
msgid "Pygwy, the Gwyddion Python wrapper."
msgstr "Pygwy, pythoní rozhraní ke Gwyddionu."
-#: pygwy.c:258
+#: pygwy.c:269
msgid "Python Interpreter Errors"
msgstr "Chyby interptetu Pythonu"
-#: pygwy.c:384
+#: pygwy.c:399
msgid "Python interpreter error occurred."
msgstr "Došlo k chybě interpretu Pythonu."
-#: pygwy.c:459
+#: pygwy.c:499
msgid "Function written in Python"
msgstr "Funkce napsaná v Pythonu"
@@ -13320,11 +14038,11 @@ msgid "Measure distances and directions between points"
msgstr "Měření vzdáleností a směrů mezi body"
#. TRANSLATORS: Number is verb here.
-#: modules/tools/distance.c:250 modules/tools/profile.c:532
+#: modules/tools/distance.c:250 modules/tools/profile.c:527
msgid "_Number lines"
msgstr "Čís_lovat čáry:"
-#: modules/tools/filter.c:128
+#: modules/tools/filter.c:129
msgid ""
"Filter tool, processes selected part of data with a filter (conservative "
"denoise, mean, median. Kuwahara, minimum, maximum)."
@@ -13332,27 +14050,27 @@ msgstr ""
"Nástroj filtr, zpracovává vybranou část dat filtrem (konzervativní odšumění, "
"střední hodnota, medián, Kuwahara, minimum, maximum)."
-#: modules/tools/filter.c:171
+#: modules/tools/filter.c:172
msgid "Basic filters: mean, median, denoise, …"
msgstr "Základní filtry: střední hodnota, medián, odšumování, …"
-#: modules/tools/filter.c:239
+#: modules/tools/filter.c:240
msgid "Conservative denoise"
msgstr "Konzervativní odšumění"
-#: modules/tools/filter.c:246
+#: modules/tools/filter.c:247
msgid "Kuwahara"
msgstr "Kuwahara"
-#: modules/tools/filter.c:247
+#: modules/tools/filter.c:248
msgid "Dechecker"
msgstr "Potlačení šachovnice"
-#: modules/tools/filter.c:248
+#: modules/tools/filter.c:249
msgid "filter|Gaussian"
msgstr "Gaussovský"
-#: modules/tools/filter.c:249
+#: modules/tools/filter.c:250
msgid "Sharpen"
msgstr "Zostření"
@@ -13447,7 +14165,7 @@ msgid "Height histogram"
msgstr "Rozdělení výšek"
#: modules/tools/icolorange.c:329 modules/tools/linestats.c:169
-#: modules/tools/sfunctions.c:226 modules/volume/volume_linestat.c:146
+#: modules/tools/sfunctions.c:231 modules/volume/volume_linestat.c:148
msgid "Range"
msgstr "Rozsah"
@@ -13475,7 +14193,7 @@ msgstr "_Invertovat mapu"
msgid "range|Full"
msgstr "Plný"
-#: modules/tools/level3.c:106
+#: modules/tools/level3.c:108
msgid ""
"Three-point level tool, levels data by subtracting a plane fitted through "
"three selected points."
@@ -13483,23 +14201,23 @@ msgstr ""
"Nástroj tříbodové vyrovnání, vyrovnává data odečtením roviny proložené třemi "
"vybranými body."
-#: modules/tools/level3.c:143
+#: modules/tools/level3.c:145
msgid "Three Point Level"
msgstr "Tříbodové vyrovnání"
-#: modules/tools/level3.c:144
+#: modules/tools/level3.c:146
msgid "Level data by fitting a plane through three points"
msgstr "Vyrovnání dat proložením roviny třemi zadanými body"
-#: modules/tools/level3.c:239 modules/tools/readvalue.c:375
+#: modules/tools/level3.c:244 modules/tools/readvalue.c:378
msgid "_Averaging radius:"
msgstr "_Poloměr oblasti průměrování:"
-#: modules/tools/level3.c:246
+#: modules/tools/level3.c:251
msgid "_Instant apply"
msgstr "_Aplikovat okamžitě"
-#: modules/tools/level3.c:255
+#: modules/tools/level3.c:261
msgid "Set plane to _zero"
msgstr "Položit rovinu do nuly"
@@ -13511,23 +14229,23 @@ msgstr ""
"Nástroj řádkových/sloupcových statistických funkcí: počítá střední hodnoty, "
"mediány, maxima, minima, RMS, ..., řádků čí sloupců."
-#: modules/tools/linestats.c:172 modules/volume/volume_linestat.c:148
+#: modules/tools/linestats.c:172 modules/volume/volume_linestat.c:150
msgid "tan β<sub>0</sub>"
msgstr "tg β<sub>0</sub>"
-#: modules/tools/linestats.c:174 modules/volume/volume_linestat.c:150
+#: modules/tools/linestats.c:174 modules/volume/volume_linestat.c:152
msgid "Ra"
msgstr "Ra"
-#: modules/tools/linestats.c:175 modules/volume/volume_linestat.c:151
+#: modules/tools/linestats.c:175 modules/volume/volume_linestat.c:153
msgid "Rq (RMS)"
msgstr "Rq (RMS)"
-#: modules/tools/linestats.c:176 modules/volume/volume_linestat.c:152
+#: modules/tools/linestats.c:176 modules/volume/volume_linestat.c:154
msgid "Rz"
msgstr "Rz"
-#: modules/tools/linestats.c:177 modules/volume/volume_linestat.c:153
+#: modules/tools/linestats.c:177 modules/volume/volume_linestat.c:155
msgid "Rt"
msgstr "Rt"
@@ -13551,16 +14269,11 @@ msgstr "S_loupce"
msgid "Average:"
msgstr "Střední hodnota:"
-#: modules/tools/linestats.c:363 modules/tools/profile.c:464
-#: modules/tools/sfunctions.c:414 modules/tools/spectro.c:343
+#: modules/tools/linestats.c:363 modules/tools/profile.c:460
+#: modules/tools/sfunctions.c:424 modules/tools/spectro.c:346
msgid "<b>Options</b>"
msgstr "<b>Volby</b>"
-#: modules/tools/linestats.c:379 modules/tools/sfunctions.c:430
-#: modules/tools/stats.c:408
-msgid "_Instant updates"
-msgstr "Okamžité aktuali_zace"
-
#: modules/tools/maskedit.c:170
msgid "Mask editor tool, allows interactive modification of parts of the mask."
msgstr ""
@@ -13619,63 +14332,63 @@ msgstr "Vyplnění souvislých prázdných oblastí maskou"
msgid "Erase continuous parts of mask"
msgstr "Odstranění souvislých částí masky"
-#: modules/tools/maskedit.c:408
+#: modules/tools/maskedit.c:409
msgid "Editor"
msgstr "Editor"
-#: modules/tools/maskedit.c:413
+#: modules/tools/maskedit.c:414
msgid "_Shapes"
msgstr "_Tvary"
-#: modules/tools/maskedit.c:423
+#: modules/tools/maskedit.c:428
msgid "Mode:"
msgstr "Mód:"
-#: modules/tools/maskedit.c:452
+#: modules/tools/maskedit.c:458
msgid "Shape:"
msgstr "Tvar:"
-#: modules/tools/maskedit.c:483
+#: modules/tools/maskedit.c:486
msgid "_Drawing Tools"
msgstr "_Kreslicí nástroje"
-#: modules/tools/maskedit.c:493
+#: modules/tools/maskedit.c:500
msgid "Tool:"
msgstr "Nástroj:"
-#: modules/tools/maskedit.c:532
+#: modules/tools/maskedit.c:538
msgid "Actions"
msgstr "Akce"
-#: modules/tools/maskedit.c:540
+#: modules/tools/maskedit.c:546
msgid "_Invert"
msgstr "_Inverze"
-#: modules/tools/maskedit.c:571
+#: modules/tools/maskedit.c:577
msgid "Fill _Voids"
msgstr "Vyplnit _Díry"
-#: modules/tools/maskedit.c:580
+#: modules/tools/maskedit.c:586
msgid "Fill non-simple-connected"
msgstr "Vyplnit nejen jednoduše souvislé"
-#: modules/tools/maskedit.c:591
+#: modules/tools/maskedit.c:597
msgid "Grow/Shrink"
msgstr "Rozšíření/zúžení"
-#: modules/tools/maskedit.c:600
+#: modules/tools/maskedit.c:606
msgid "_Grow"
msgstr "Rozšíři_t"
-#: modules/tools/maskedit.c:608
+#: modules/tools/maskedit.c:614
msgid "Shrin_k"
msgstr "_Zúžit"
-#: modules/tools/maskedit.c:623
+#: modules/tools/maskedit.c:629
msgid "_Amount:"
msgstr "_Míra:"
-#: modules/tools/maskedit.c:651
+#: modules/tools/maskedit.c:657
msgid "_Prevent grain merging by growing"
msgstr "_Zabránit spojení zrn při rozšíření"
@@ -13692,83 +14405,95 @@ msgstr "Vyrovnání podle čar"
msgid "Level rows using intersections with given lines"
msgstr "Vyrovnat řádky podle průsečíků se zvolenými čárami"
-#: modules/tools/profile.c:222
+#: modules/tools/profile.c:216
msgid "Profile tool, creates profile graphs from selected lines."
msgstr "Nástroj profil, vytváří grafy profilů z vybraných úseček."
-#: modules/tools/profile.c:276 modules/tools/profile.c:630
+#: modules/tools/profile.c:270 modules/tools/profile.c:609
msgid "Profiles"
msgstr "Profily"
-#: modules/tools/profile.c:277
+#: modules/tools/profile.c:271
msgid "Extract profiles"
msgstr "Získat profily"
-#: modules/tools/profile.c:480
-msgid "_Radial profiles"
-msgstr "_Radiální profily"
-
-#: modules/tools/profile.c:493
-msgid "Symmetrize _All"
-msgstr "Symetrizovat _vše"
+#: modules/tools/profile.c:478
+msgid "Linear profiles"
+msgstr "Lineární profily"
-#: modules/tools/profile.c:498
-msgid "S_ymmetrize"
-msgstr "S_ymetrizovat"
+#: modules/tools/profile.c:480
+msgid "Radial profiles"
+msgstr "Radiální profily"
-#: modules/tools/profile.c:542
+#: modules/tools/profile.c:537
msgid "_Separate profiles"
msgstr "_Oddělit profily"
-#: modules/tools/profile.c:607
+#: modules/tools/profile.c:587
msgid "_Calibration data:"
msgstr "Kalibrační data:"
-#: modules/tools/profile.c:620
+#: modules/tools/profile.c:600
msgid "_Show profile"
msgstr "_Zobrazit profil"
-#: modules/tools/profile.c:887
+#: modules/tools/profile.c:861
#, c-format
msgid "X error %d"
msgstr "Chyba X %d"
-#: modules/tools/profile.c:891
+#: modules/tools/profile.c:865
#, c-format
msgid "Y error %d"
msgstr "Chyba Y %d"
-#: modules/tools/profile.c:895
+#: modules/tools/profile.c:869
#, c-format
msgid "Z error %d"
msgstr "Chyba Z %d"
-#: modules/tools/profile.c:899
+#: modules/tools/profile.c:873
#, c-format
msgid "X uncertainty %d"
msgstr "Nejistota X %d"
-#: modules/tools/profile.c:903
+#: modules/tools/profile.c:877
#, c-format
msgid "Y uncertainty %d"
msgstr "Nejistota Y %d"
-#: modules/tools/profile.c:907
+#: modules/tools/profile.c:881
#, c-format
msgid "Z uncertainty %d"
msgstr "Nejistota z %d"
-#: modules/tools/profile.c:912
+#: modules/tools/profile.c:886
#, c-format
msgid "Zunc up bound %d"
msgstr "Nejistota z do %d"
-#: modules/tools/profile.c:917
+#: modules/tools/profile.c:891
#, c-format
msgid "Zunc low bound %d"
msgstr "Nejistota z od %d"
-#: modules/tools/profile.c:1817
+#: modules/tools/profile.c:1637
+msgid "S_ymmetrize"
+msgstr "S_ymetrizovat"
+
+#: modules/tools/profile.c:1639
+msgid "Symmetrize _All"
+msgstr "Symetrizovat _vše"
+
+#: modules/tools/profile.c:1643
+msgid "Improve _Direction"
+msgstr "Zlepšit směr"
+
+#: modules/tools/profile.c:1645
+msgid "Improve _All"
+msgstr "Zlepšit všechny"
+
+#: modules/tools/profile.c:1866
msgid "calib-data|None"
msgstr "Žádná"
@@ -13784,194 +14509,194 @@ msgstr "Čtení hodnot"
msgid "Read value under mouse cursor"
msgstr "Čtení hodnot pod kursorem myši"
-#: modules/tools/readvalue.c:304
+#: modules/tools/readvalue.c:307
msgid "Set _Zero"
msgstr "Nastavit _nulu"
-#: modules/tools/readvalue.c:307
+#: modules/tools/readvalue.c:310
msgid "Shift plane z=0 to pass through the selected point"
msgstr "Posunout rovinu z=0, aby procházela vybraným bodem"
-#: modules/tools/readvalue.c:315
+#: modules/tools/readvalue.c:318
msgid "Facet"
msgstr "Faseta"
-#: modules/tools/readvalue.c:340
+#: modules/tools/readvalue.c:343
msgid "Curvatures"
msgstr "Křivosti"
-#: modules/tools/readvalue.c:382
+#: modules/tools/readvalue.c:386
msgid "Show _selection"
msgstr "Zobrazovat _výběr"
-#: modules/tools/roughness.c:282
+#: modules/tools/roughness.c:283
msgid "Roughness average"
msgstr "Střední drsnost"
-#: modules/tools/roughness.c:290
+#: modules/tools/roughness.c:291
msgid "Root mean square roughness"
msgstr "Střední kvadratická drsnost"
-#: modules/tools/roughness.c:298
+#: modules/tools/roughness.c:299
msgid "Maximum height of the roughness"
msgstr "Největší výška drsnosti"
-#: modules/tools/roughness.c:306
+#: modules/tools/roughness.c:307
msgid "Maximum roughness valley depth"
msgstr "Největší hloubka drsnosti"
-#: modules/tools/roughness.c:314
+#: modules/tools/roughness.c:315
msgid "Maximum roughness peak height"
msgstr "Největší výchylka drsnosti"
-#: modules/tools/roughness.c:322 modules/tools/roughness.c:370
+#: modules/tools/roughness.c:323 modules/tools/roughness.c:371
msgid "Average maximum height of the roughness"
msgstr "Střední největší výška drsnosti"
-#: modules/tools/roughness.c:330
+#: modules/tools/roughness.c:331
msgid "Average maximum roughness valley depth"
msgstr "Střední největší hloubka drsnosti"
-#: modules/tools/roughness.c:338
+#: modules/tools/roughness.c:339
msgid "Average maximum roughness peak height"
msgstr "Střední největší výchylka drsnosti"
-#: modules/tools/roughness.c:346 modules/tools/roughness.c:354
+#: modules/tools/roughness.c:347 modules/tools/roughness.c:355
msgid "Average third highest peak to third lowest valley height"
msgstr "Střední výška třetí největší výchylky oproti třetí největší hloubce"
-#: modules/tools/roughness.c:362
+#: modules/tools/roughness.c:363
msgid "Average maximum height of the profile"
msgstr "Střední největší výška profilu"
-#: modules/tools/roughness.c:378
+#: modules/tools/roughness.c:379
msgid "Skewness"
msgstr "Šikmost"
-#: modules/tools/roughness.c:394
+#: modules/tools/roughness.c:395
msgid "Waviness average"
msgstr "Střední zvlněnost"
-#: modules/tools/roughness.c:402
+#: modules/tools/roughness.c:403
msgid "Root mean square waviness"
msgstr "Střední kvadratická zvlněnost"
-#: modules/tools/roughness.c:410
+#: modules/tools/roughness.c:411
msgid "Waviness maximum height"
msgstr "Největší výška zvlněnosti"
-#: modules/tools/roughness.c:418
+#: modules/tools/roughness.c:419
msgid "Maximum height of the profile"
msgstr "Největší výška profilu"
-#: modules/tools/roughness.c:426
+#: modules/tools/roughness.c:427
msgid "Spatial"
msgstr "Prostorové"
-#: modules/tools/roughness.c:476
+#: modules/tools/roughness.c:477
msgid "Average wavelength of the profile"
msgstr "Střední vlnová délka profilu"
-#: modules/tools/roughness.c:484
+#: modules/tools/roughness.c:485
msgid "Root mean square (RMS) wavelength of the profile"
msgstr "Střední kvadratická vlnová délka profilu"
-#: modules/tools/roughness.c:492
+#: modules/tools/roughness.c:493
msgid "Hybrid"
msgstr "Hybridní"
-#: modules/tools/roughness.c:500
+#: modules/tools/roughness.c:501
msgid "Average absolute slope"
msgstr "Střední absolutní sklon"
-#: modules/tools/roughness.c:508
+#: modules/tools/roughness.c:509
msgid "Root mean square (RMS) slope"
msgstr "Střední kvadratický sklon"
-#: modules/tools/roughness.c:524
+#: modules/tools/roughness.c:525
msgid "Developed profile length"
msgstr "Rozvinutá délka profilu"
-#: modules/tools/roughness.c:532
+#: modules/tools/roughness.c:533
msgid "Profile length ratio"
msgstr "Délkový poměr profilu"
-#: modules/tools/roughness.c:615
+#: modules/tools/roughness.c:616
msgid "Calculate surface profile parameters."
msgstr "Počítá parametry drsnosti profilu."
-#: modules/tools/roughness.c:648 modules/tools/roughness.c:773
-#: modules/tools/roughness.c:1452
+#: modules/tools/roughness.c:649 modules/tools/roughness.c:774
+#: modules/tools/roughness.c:1479
msgid "Roughness"
msgstr "Drsnost"
-#: modules/tools/roughness.c:649
+#: modules/tools/roughness.c:650
msgid "Calculate roughness parameters"
msgstr "Vypočíst parametry drsnosti"
-#: modules/tools/roughness.c:771 modules/tools/roughness.c:1450
+#: modules/tools/roughness.c:772 modules/tools/roughness.c:1477
msgid "Texture"
msgstr "Textura"
-#: modules/tools/roughness.c:772 modules/tools/roughness.c:1451
+#: modules/tools/roughness.c:773 modules/tools/roughness.c:1478
msgid "Waviness"
msgstr "Zvlnění"
-#: modules/tools/roughness.c:774
+#: modules/tools/roughness.c:775
msgid "ADF"
msgstr "ADF"
-#: modules/tools/roughness.c:775
+#: modules/tools/roughness.c:776
msgid "BRC"
msgstr "BRC"
-#: modules/tools/roughness.c:776 modules/tools/roughness.c:1455
+#: modules/tools/roughness.c:777 modules/tools/roughness.c:1482
msgid "Peak Count"
msgstr "Počet peaků"
-#: modules/tools/roughness.c:838 modules/xyz/xyz_drift.c:1090
+#: modules/tools/roughness.c:839 modules/xyz/xyz_drift.c:1090
msgid "_Graph:"
msgstr "_Graf:"
-#: modules/tools/roughness.c:845
+#: modules/tools/roughness.c:847
msgid "C_ut-off:"
msgstr "_Uříznutí:"
-#: modules/tools/roughness.c:1324
+#: modules/tools/roughness.c:1345
msgid "No profile selected."
msgstr "Není vybrán žádný profil."
-#: modules/tools/roughness.c:1453
+#: modules/tools/roughness.c:1480
msgid "Amplitude Distribution Function"
msgstr "Funkce rozdělení amplitudy"
-#: modules/tools/roughness.c:1454
+#: modules/tools/roughness.c:1481
msgid "The Bearing Ratio Curve"
msgstr "Materiálová poměrná křivka"
-#: modules/tools/roughness.c:1489
+#: modules/tools/roughness.c:1516
msgid "Surface Profiles"
msgstr "Profily"
-#: modules/tools/roughness.c:1877
+#: modules/tools/roughness.c:1904
msgid "Save Roughness Parameters"
msgstr "Uložit parametry drsnosti"
-#: modules/tools/roughness.c:1934
+#: modules/tools/roughness.c:1961
msgid "Roughness Parameters"
msgstr "Parametry drsnosti"
-#: modules/tools/roughness.c:1940
+#: modules/tools/roughness.c:1967
#, c-format
msgid "File: %s\n"
msgstr "Soubor: %s\n"
-#: modules/tools/roughness.c:1944
+#: modules/tools/roughness.c:1971
#, c-format
msgid "Data channel: %s\n"
msgstr "Datový kanál: %s\n"
-#: modules/tools/roughness.c:1975
+#: modules/tools/roughness.c:2002
#, c-format
msgid ""
"Selected line: (%s, %s) to (%s, %s) px\n"
@@ -14008,7 +14733,7 @@ msgstr "do _všech souborů"
msgid "_Copy"
msgstr "_Kopírovat"
-#: modules/tools/sfunctions.c:181
+#: modules/tools/sfunctions.c:186
msgid ""
"Statistical function tool, calculates one-dimensional statistical functions "
"(height distribution, correlations, PSDF, Minkowski functionals) of selected "
@@ -14018,87 +14743,91 @@ msgstr ""
"(rozdělení výšek, korelace, spektrální hustotu, Minkowského funkcionály) "
"vybrané části dat."
-#: modules/tools/sfunctions.c:214
+#: modules/tools/sfunctions.c:219
msgid "Height distribution"
msgstr "Rozdělení výšek"
-#: modules/tools/sfunctions.c:215
+#: modules/tools/sfunctions.c:220
msgid "Cum. height distribution"
msgstr "Kumul. rozdělení výšek"
-#: modules/tools/sfunctions.c:216
+#: modules/tools/sfunctions.c:221
msgid "Distribution of angles"
msgstr "Rozdělení úhlů"
-#: modules/tools/sfunctions.c:217
+#: modules/tools/sfunctions.c:222
msgid "Cum. distribution of angles"
msgstr "Kumul. rozdělení úhlů"
-#: modules/tools/sfunctions.c:218
+#: modules/tools/sfunctions.c:223
msgid "ACF"
msgstr "ACF"
-#: modules/tools/sfunctions.c:219
+#: modules/tools/sfunctions.c:224
msgid "HHCF"
msgstr "HHCF"
-#: modules/tools/sfunctions.c:220
+#: modules/tools/sfunctions.c:225
msgid "PSDF"
msgstr "PSDF"
-#: modules/tools/sfunctions.c:221
+#: modules/tools/sfunctions.c:226
msgid "Radial PSDF"
msgstr "Radiální PSDF"
-#: modules/tools/sfunctions.c:222
+#: modules/tools/sfunctions.c:227
msgid "Radial ACF"
msgstr "Radiální ACF"
-#: modules/tools/sfunctions.c:223
+#: modules/tools/sfunctions.c:228
msgid "Minkowski volume"
msgstr "Minkovského objem"
-#: modules/tools/sfunctions.c:224
+#: modules/tools/sfunctions.c:229
msgid "Minkowski boundary"
msgstr "Minkovského hranice"
-#: modules/tools/sfunctions.c:225
+#: modules/tools/sfunctions.c:230
msgid "Minkowski connectivity"
msgstr "Minkovského spojitost"
-#: modules/tools/sfunctions.c:251
+#: modules/tools/sfunctions.c:232
+msgid "Area scale graph"
+msgstr "Graf škálování plochy"
+
+#: modules/tools/sfunctions.c:257
msgid "Statistical Functions"
msgstr "Statistické funkce"
-#: modules/tools/sfunctions.c:252
+#: modules/tools/sfunctions.c:258
msgid "Calculate 1D statistical functions"
msgstr "Výpočet jednorozměrných statistických funkcí"
-#: modules/tools/sfunctions.c:504
+#: modules/tools/sfunctions.c:501
msgid "_Separate uncertainty"
msgstr "_Oddělit nejistotu"
-#: modules/tools/spectro.c:151
+#: modules/tools/spectro.c:154
msgid "Point Spectrum, extracts point spectra to a graph."
msgstr "Bodové spektrum, extrahuje bodová spektra do grafu."
-#: modules/tools/spectro.c:190
+#: modules/tools/spectro.c:193
msgid "Point Spectroscopy"
msgstr "Bodová spektroskopie"
-#: modules/tools/spectro.c:191
+#: modules/tools/spectro.c:194
msgid "Extract and view point spectroscopy data"
msgstr "Extrahuje a zobrazuje data bodové spektroskopie"
-#: modules/tools/spectro.c:359
+#: modules/tools/spectro.c:362
msgid "_Separate spectra"
msgstr "_Oddělit spektra"
-#: modules/tools/spectro.c:369
+#: modules/tools/spectro.c:372
msgid "_Average spectra"
msgstr "_Průměrovat spektra"
-#: modules/tools/spectro.c:508
+#: modules/tools/spectro.c:511
msgid "Spectroscopy"
msgstr "Spektroskopie"
@@ -14138,14 +14867,6 @@ msgstr "Není vybrán žádný bod obrázku."
msgid "No area in the zoom selected."
msgstr "Není vybrána žádná oblast ve výřezu."
-#: modules/tools/stats.c:205
-msgid "Average value:"
-msgstr "Střední hodnota:"
-
-#: modules/tools/stats.c:206
-msgid "Median:"
-msgstr "Medián:"
-
#: modules/tools/stats.c:207
msgid "Ra (Sa):"
msgstr "Ra (Sa):"
@@ -14158,14 +14879,6 @@ msgstr "Rms (Sq):"
msgid "Rms (grain-wise):"
msgstr "Rms (po zrnech):"
-#: modules/tools/stats.c:210
-msgid "Skew:"
-msgstr "Šikmost:"
-
-#: modules/tools/stats.c:211
-msgid "Kurtosis:"
-msgstr "Špičatost:"
-
#: modules/tools/stats.c:212
msgid "Surface area:"
msgstr "Plocha povrchu:"
@@ -14174,10 +14887,6 @@ msgstr "Plocha povrchu:"
msgid "Projected area:"
msgstr "Projektovaná plocha:"
-#: modules/tools/stats.c:214
-msgid "Variation:"
-msgstr "Variace:"
-
#: modules/tools/stats.c:217
msgid "Inclination θ:"
msgstr "θ sklonu:"
@@ -14190,7 +14899,7 @@ msgstr "φ sklonu:"
msgid "Statistics tool."
msgstr "Statistický nástroj."
-#: modules/tools/stats.c:261 modules/tools/stats.c:1095
+#: modules/tools/stats.c:261 modules/tools/stats.c:1091
msgid "Statistical Quantities"
msgstr "Statistické veličiny"
@@ -14198,29 +14907,29 @@ msgstr "Statistické veličiny"
msgid "Statistical quantities"
msgstr "Statistické veličiny"
-#: modules/tools/stats.c:1002
+#: modules/tools/stats.c:998
msgid "Save Statistical Quantities"
msgstr "Uložení statistických hodnot"
-#: modules/tools/stats.c:1100
+#: modules/tools/stats.c:1096
#, c-format
msgid "File: %s\n"
msgstr "Soubor: %s\n"
-#: modules/tools/stats.c:1104
+#: modules/tools/stats.c:1100
#, c-format
msgid "Data channel: %s\n"
msgstr "Datový kanál: %s\n"
-#: modules/tools/stats.c:1122
+#: modules/tools/stats.c:1118
msgid "Yes"
msgstr "Ano"
-#: modules/tools/stats.c:1122
+#: modules/tools/stats.c:1118
msgid "No"
msgstr "Ne"
-#: modules/tools/stats.c:1132
+#: modules/tools/stats.c:1128
#, c-format
msgid ""
"Selected area: %s × %s at (%s, %s) px\n"
@@ -14243,182 +14952,178 @@ msgstr "/_Rozsah a jednotky..."
msgid "Volume Dimensions and Units"
msgstr "Objemový rozsah a jednotky"
-#: modules/volume/volume_calibrate.c:526
+#: modules/volume/volume_calibrate.c:486
msgid "_Value range:"
msgstr "Rozsah _hodnot:"
-#: modules/volume/volume_calibrate.c:555
+#: modules/volume/volume_calibrate.c:508
msgid "Value shi_ft:"
msgstr "_Posun hodnot:"
-#: modules/volume/volume_calibrate.c:601
+#: modules/volume/volume_calibrate.c:542
msgid "_Value calibration factor:"
msgstr "_Kalibrační faktor hodnot:"
-#: modules/volume/volume_extract.c:223
+#: modules/volume/volume_extract.c:216
msgid "Shows and/or extracts a section of volume data"
msgstr "Zobrazuje anebo extrahuje řez objemových dat"
-#: modules/volume/volume_extract.c:237
-msgid "/Show and _extract..."
+#: modules/volume/volume_extract.c:230
+msgid "/Show and _Extract..."
msgstr "/Zobrazit a _extrahovat..."
-#: modules/volume/volume_extract.c:241
+#: modules/volume/volume_extract.c:234
msgid "Show and/or extract a section of volume data"
msgstr "Zobrazit anebo extrahovat řez objemových dat"
-#: modules/volume/volume_extract.c:270
+#: modules/volume/volume_extract.c:263
msgid "X cross-section"
msgstr "X řez"
-#: modules/volume/volume_extract.c:271
+#: modules/volume/volume_extract.c:264
msgid "Y cross-section"
msgstr "Y řez"
-#: modules/volume/volume_extract.c:272
+#: modules/volume/volume_extract.c:265
msgid "Z cross-section"
msgstr "Z řez"
-#: modules/volume/volume_extract.c:273 modules/volume/volume_extract.c:698
+#: modules/volume/volume_extract.c:266 modules/volume/volume_extract.c:684
msgid "X direction sum"
msgstr "Součet ve směru X"
-#: modules/volume/volume_extract.c:274 modules/volume/volume_extract.c:700
+#: modules/volume/volume_extract.c:267 modules/volume/volume_extract.c:686
msgid "Y direction sum"
msgstr "Součet ve směru Y"
-#: modules/volume/volume_extract.c:275 modules/volume/volume_extract.c:702
+#: modules/volume/volume_extract.c:268 modules/volume/volume_extract.c:688
msgid "Z direction sum"
msgstr "Součet ve směru Z"
-#: modules/volume/volume_extract.c:278
+#: modules/volume/volume_extract.c:271
msgid "X direction"
msgstr "Směr X"
-#: modules/volume/volume_extract.c:279
+#: modules/volume/volume_extract.c:272
msgid "Y direction"
msgstr "Směr Y"
-#: modules/volume/volume_extract.c:280
+#: modules/volume/volume_extract.c:273
msgid "Z direction"
msgstr "Směr Z"
-#: modules/volume/volume_extract.c:322
+#: modules/volume/volume_extract.c:315
msgid "Volume data"
msgstr "Objemová data"
-#: modules/volume/volume_extract.c:324
+#: modules/volume/volume_extract.c:317
msgid "_Load"
msgstr "_Načíst"
-#: modules/volume/volume_extract.c:336
+#: modules/volume/volume_extract.c:329
msgid "_Extract projection"
msgstr "_Extrahovat projekci"
-#: modules/volume/volume_extract.c:354
+#: modules/volume/volume_extract.c:347
msgid "Projections"
msgstr "Projekce"
-#: modules/volume/volume_extract.c:404
+#: modules/volume/volume_extract.c:395
msgid "Z position"
msgstr "Z poloha"
-#: modules/volume/volume_extract.c:409
+#: modules/volume/volume_extract.c:405
msgid "Shown cut direction:"
msgstr "Směr řezu:"
-#: modules/volume/volume_extract.c:419 modules/volume/volume_extract.c:500
-msgid "Show mode:"
-msgstr "_Ukázat rámeček"
-
-#: modules/volume/volume_extract.c:490
+#: modules/volume/volume_extract.c:485
msgid "Graph cut direction:"
msgstr "Směr řezu grafu:"
-#: modules/volume/volume_extract.c:525
+#: modules/volume/volume_extract.c:511
msgid "3D view"
msgstr "3D pohled"
-#: modules/volume/volume_extract.c:550
+#: modules/volume/volume_extract.c:538
msgid "Zoom"
msgstr "Zvětšení"
-#: modules/volume/volume_extract.c:558
+#: modules/volume/volume_extract.c:545
msgid "Wireframe threshold"
msgstr "_Práh drátového modelu"
-#: modules/volume/volume_extract.c:566
+#: modules/volume/volume_extract.c:552
msgid "Z scale"
msgstr "Š_kála Z"
-#: modules/volume/volume_extract.c:574
+#: modules/volume/volume_extract.c:559
msgid "Opacity scale"
msgstr "Škála o_pacity"
-#: modules/volume/volume_extract.c:580
-msgid "apply perspective"
-msgstr "perspektivní zobrazení"
+#: modules/volume/volume_extract.c:565
+msgid "Apply perspective"
+msgstr "Perspektivní zobrazení"
-#: modules/volume/volume_extract.c:589
-msgid "instant 3D render"
-msgstr "okamžité vykreslení 3D"
+#: modules/volume/volume_extract.c:574
+msgid "Instant 3D render"
+msgstr "Okamžité vykreslení 3D"
-#: modules/volume/volume_extract.c:598
+#: modules/volume/volume_extract.c:587
msgid "X view"
msgstr "X pohled"
-#: modules/volume/volume_extract.c:604
+#: modules/volume/volume_extract.c:592
msgid "Y view"
msgstr "Y pohled"
-#: modules/volume/volume_extract.c:610
+#: modules/volume/volume_extract.c:597
msgid "Z view"
msgstr "Z pohled"
-#: modules/volume/volume_extract.c:683
+#: modules/volume/volume_extract.c:669
#, c-format
msgid "X cross-section at x: %d"
msgstr "X-řez v poloze x: %d"
-#: modules/volume/volume_extract.c:686
+#: modules/volume/volume_extract.c:672
#, c-format
msgid "Y cross-section at y: %d"
msgstr "Y-řez v poloze y: %d"
-#: modules/volume/volume_extract.c:690
+#: modules/volume/volume_extract.c:676
#, c-format
msgid "Z cross-section at Z = %g %s (#%d)"
msgstr "Z-řez v poloze Z = %g %s (#%d)"
-#: modules/volume/volume_extract.c:749 modules/volume/volume_slice.c:1264
+#: modules/volume/volume_extract.c:735 modules/volume/volume_slice.c:1278
#, c-format
msgid "X graph at y: %d z: %d"
msgstr "X graf v poloze: y: %d z: %d"
-#: modules/volume/volume_extract.c:752 modules/volume/volume_slice.c:1273
+#: modules/volume/volume_extract.c:738 modules/volume/volume_slice.c:1287
#, c-format
msgid "Y graph at x: %d z: %d"
msgstr "Y graf v poloze x: %d z: %d"
-#: modules/volume/volume_extract.c:755 modules/volume/volume_slice.c:1255
+#: modules/volume/volume_extract.c:741 modules/volume/volume_slice.c:1269
#, c-format
msgid "Z graph at x: %d y: %d"
msgstr "Z graf v poloze x: %d y: %d"
-#: modules/volume/volume_extract.c:776
+#: modules/volume/volume_extract.c:762
msgid "Brick graph"
msgstr "Graf z kvádru"
-#: modules/volume/volume_extract.c:1056
+#: modules/volume/volume_extract.c:1042
msgid "Load volume data"
msgstr "Načíst objemová data"
-#: modules/volume/volume_extract.c:1218
+#: modules/volume/volume_extract.c:1204
#, c-format
msgid "Shown range %g to %g"
msgstr "Zobrazený rozsah %g až %g"
-#: modules/volume/volume_extract.c:1911
+#: modules/volume/volume_extract.c:1897
msgid "Building wireframe model..."
msgstr "Vytváření drátového modelu..."
@@ -14427,97 +15132,97 @@ msgid "Evaluate volume force-distance data"
msgstr "Vyhodnocuje objemová F-D data."
#: modules/volume/volume_fdfit.c:213
-msgid "/_Evaluate FD data..."
+msgid "/_Evaluate FD Data..."
msgstr "/_Vyhodnotit FD data..."
#: modules/volume/volume_fdfit.c:217
msgid "Evaluate force-distance volume data"
msgstr "Vyhodnotit objemová F-D data"
-#: modules/volume/volume_fdfit.c:368
+#: modules/volume/volume_fdfit.c:371
msgid "Curve _X position:"
msgstr "X-souřadnice křivky"
-#: modules/volume/volume_fdfit.c:386
+#: modules/volume/volume_fdfit.c:380
msgid "Curve _Y position:"
msgstr "Y-souřadnice křivky"
-#: modules/volume/volume_fdfit.c:535
+#: modules/volume/volume_fdfit.c:511
msgid "e_stimate"
msgstr "od_hadovat"
-#: modules/volume/volume_invert.c:51
+#: modules/volume/volume_invert.c:39 modules/volume/volumeops.c:39
msgid "Inverts value in volume data"
msgstr "Převrací hodnoty v objemových datech"
-#: modules/volume/volume_invert.c:65
-msgid "/_Invert value"
+#: modules/volume/volume_invert.c:53
+msgid "/_Invert Value"
msgstr "/_Inverze hodnoty"
-#: modules/volume/volume_invert.c:69
+#: modules/volume/volume_invert.c:57
msgid "Invert value in volume data"
msgstr "Převrátit hodnoty kolem průměru"
-#: modules/volume/volume_kmeans.c:94
+#: modules/volume/volume_kmeans.c:95
msgid "Calculates K-means clustering on volume data."
msgstr "Počítá K-means shlukování objemových dat."
-#: modules/volume/volume_kmeans.c:108
-msgid "/_K-means clustering..."
+#: modules/volume/volume_kmeans.c:109
+msgid "/_K-Means Clustering..."
msgstr "/_K-means shlukování..."
-#: modules/volume/volume_kmeans.c:112
+#: modules/volume/volume_kmeans.c:113
msgid "Calculate K-means clustering on volume data"
msgstr "Vypočítat K-means shlukování objemových dat"
-#: modules/volume/volume_kmeans.c:151
+#: modules/volume/volume_kmeans.c:152
msgid "K-means"
msgstr "K-means"
-#: modules/volume/volume_kmeans.c:170 modules/volume/volume_kmedians.c:164
+#: modules/volume/volume_kmeans.c:170 modules/volume/volume_kmedians.c:163
msgid "_Number of clusters:"
msgstr "Počet _shluků:"
-#: modules/volume/volume_kmeans.c:177 modules/volume/volume_kmedians.c:171
+#: modules/volume/volume_kmeans.c:177 modules/volume/volume_kmedians.c:170
msgid "Convergence _precision digits:"
msgstr "_Přesnost konvergence (číslice):"
-#: modules/volume/volume_kmeans.c:184 modules/volume/volume_kmedians.c:178
+#: modules/volume/volume_kmeans.c:183 modules/volume/volume_kmedians.c:176
msgid "_Max. iterations:"
msgstr "_Počet iterací:"
-#: modules/volume/volume_kmeans.c:189 modules/volume/volume_kmedians.c:183
+#: modules/volume/volume_kmeans.c:187 modules/volume/volume_kmedians.c:181
msgid "_Normalize"
msgstr "_Normálizovat"
-#: modules/volume/volume_kmeans.c:195
+#: modules/volume/volume_kmeans.c:193
msgid "_Remove outliers"
msgstr "O_dstranit vybočující hodnoty"
-#: modules/volume/volume_kmeans.c:208
+#: modules/volume/volume_kmeans.c:202
msgid "Outliers _threshold:"
msgstr "_Práh pro vybočující hodnoty:"
-#: modules/volume/volume_kmeans.c:431
+#: modules/volume/volume_kmeans.c:425
msgid "K-means iteration..."
msgstr "K-means iterace..."
-#: modules/volume/volume_kmeans.c:651
+#: modules/volume/volume_kmeans.c:645
#, c-format
msgid "K-means cluster of %s"
msgstr "K-means shluk z %s"
-#: modules/volume/volume_kmeans.c:660
+#: modules/volume/volume_kmeans.c:654
#, c-format
msgid "K-means error of %s"
msgstr "K-means chyba z %s"
-#: modules/volume/volume_kmeans.c:670 modules/volume/volume_kmedians.c:514
+#: modules/volume/volume_kmeans.c:664 modules/volume/volume_kmedians.c:512
#, c-format
msgid "Pre-normalized intensity of %s"
msgstr "Před-normalizovaná intenzita %s"
-#: modules/volume/volume_kmeans.c:702
+#: modules/volume/volume_kmeans.c:696
#, c-format
msgid "K-means center %d"
msgstr "K-means střed %d"
@@ -14527,7 +15232,7 @@ msgid "Calculates K-medians clustering on volume data."
msgstr "Počítá K-mediánové shlukování objemových dat."
#: modules/volume/volume_kmedians.c:102
-msgid "/_K-medians clustering..."
+msgid "/_K-Medians Clustering..."
msgstr "/_K-mediánové shlukování..."
#: modules/volume/volume_kmedians.c:106
@@ -14538,46 +15243,46 @@ msgstr "Vypočítat K-mediánové shlukování objemových dat"
msgid "K-Medians"
msgstr "K-mediány"
-#: modules/volume/volume_kmedians.c:392
+#: modules/volume/volume_kmedians.c:390
msgid "K-medians iteration..."
msgstr "K-mediánové iterace..."
-#: modules/volume/volume_kmedians.c:495
+#: modules/volume/volume_kmedians.c:493
#, c-format
msgid "K-medians cluster of %s"
msgstr "K-means shluk z %s"
-#: modules/volume/volume_kmedians.c:504
+#: modules/volume/volume_kmedians.c:502
#, c-format
msgid "K-medians error of %s"
msgstr "K-means chyba z %s"
-#: modules/volume/volume_kmedians.c:546
+#: modules/volume/volume_kmedians.c:544
#, c-format
msgid "K-medians center %d"
msgstr "K-means střed %d"
-#: modules/volume/volume_linestat.c:171
+#: modules/volume/volume_linestat.c:173
msgid "Summarizes profiles of volume data to a channel."
msgstr "Charakterizuje profily objemových dat do kanálu."
-#: modules/volume/volume_linestat.c:185
+#: modules/volume/volume_linestat.c:187
msgid "/Summarize _Profiles..."
msgstr "/Sumarizovat _profily..."
-#: modules/volume/volume_linestat.c:189
+#: modules/volume/volume_linestat.c:191
msgid "Summarize profiles"
msgstr "Sumarizovat profily"
-#: modules/volume/volume_linestat.c:249
+#: modules/volume/volume_linestat.c:251
msgid "_Extract image"
msgstr "Vytvořit o_brázek"
-#: modules/volume/volume_linestat.c:250
+#: modules/volume/volume_linestat.c:252
msgid "Set _preview"
msgstr "_Nastavit náhled"
-#: modules/volume/volume_linestat.c:284
+#: modules/volume/volume_linestat.c:289
msgid "Summarize Volume Profiles"
msgstr "Sumarizovat profily objemových dat"
@@ -14601,53 +15306,113 @@ msgstr "Obrazový řez"
msgid "Line graph"
msgstr "Graf podél osy"
-#: modules/volume/volume_slice.c:290
+#: modules/volume/volume_slice.c:292
msgid "Slice Volume Data"
msgstr "Řez objemových dat"
-#: modules/volume/volume_slice.c:369
+#: modules/volume/volume_slice.c:371
msgid "_Base plane:"
msgstr "_Základní rovina:"
-#: modules/volume/volume_slice.c:420
+#: modules/volume/volume_slice.c:422
msgid "Extract _multiple items"
msgstr "_Získat několik objektů současně"
-#: modules/volume/volume_slice.c:437
+#: modules/volume/volume_slice.c:439
msgid "Positions"
msgstr "Polohy"
-#: modules/volume/volume_slice.c:484
+#: modules/volume/volume_slice.c:492
msgid "_Z:"
msgstr "_Z:"
-#: modules/volume/volume_slice.c:1156
+#: modules/volume/volume_slice.c:1167
#, c-format
msgid "Z slice at %.*f%s%s (#%d)"
msgstr "Z-řez v %.*f%s%s (#%d)"
-#: modules/volume/volume_slice.c:1167
+#: modules/volume/volume_slice.c:1178
#, c-format
msgid "Y slice at %.*f%s%s (#%d)"
msgstr "Y-řez v %.*f%s%s (#%d)"
-#: modules/volume/volume_slice.c:1178
+#: modules/volume/volume_slice.c:1189
#, c-format
msgid "X slice at %.*f%s%s (#%d)"
msgstr "X-řez v %.*f%s%s (#%d)"
-#: modules/volume/volume_slice.c:1307
+#: modules/volume/volume_slice.c:1325
msgid "Volume Z graphs"
msgstr "Z-grafy z objemových dat"
-#: modules/volume/volume_slice.c:1314
+#: modules/volume/volume_slice.c:1332
msgid "Volume X graphs"
msgstr "X-grafy z objemových dat"
-#: modules/volume/volume_slice.c:1321
+#: modules/volume/volume_slice.c:1339
msgid "Volume Y graphs"
msgstr "Y-grafy z objemových dat"
+#: modules/volume/volume_swaxes.c:104
+msgid "Swaps axes of volume data."
+msgstr "Prohazuje osy v objemových datech"
+
+#: modules/volume/volume_swaxes.c:118
+msgid "/S_wap axes..."
+msgstr "/Změnit _osy..."
+
+#: modules/volume/volume_swaxes.c:122
+msgid "Swap axes"
+msgstr "Změnit osy"
+
+#: modules/volume/volume_swaxes.c:156
+msgid "X"
+msgstr "X"
+
+#: modules/volume/volume_swaxes.c:157
+msgid "X, reversed"
+msgstr "X, obrácená"
+
+#: modules/volume/volume_swaxes.c:158
+msgid "Y"
+msgstr "Y"
+
+#: modules/volume/volume_swaxes.c:159
+msgid "Y, reversed"
+msgstr "Y, obrácená"
+
+#: modules/volume/volume_swaxes.c:160
+msgid "Z"
+msgstr "Z"
+
+#: modules/volume/volume_swaxes.c:161
+msgid "Z, reversed"
+msgstr "Z, obrácená"
+
+#: modules/volume/volume_swaxes.c:175
+msgid "Swap Volume Axes"
+msgstr "Vyměnit osy objemových dat"
+
+#: modules/volume/volume_swaxes.c:196
+msgid "Current _X axis will become:"
+msgstr "Současná osa _X se stane:"
+
+#: modules/volume/volume_swaxes.c:204
+msgid "Current _Y axis will become:"
+msgstr "Současná osa _Y se stane:"
+
+#: modules/volume/volume_swaxes.c:212
+msgid "Current _Z axis will become:"
+msgstr "Současná osa _Z se stane:"
+
+#: modules/volume/volume_swaxes.c:219
+msgid "Create new volume data"
+msgstr "Vytvořit nová objemová data"
+
+#: modules/volume/volume_swaxes.c:286
+msgid "Z axis calibration will be lost."
+msgstr "Kalibrace osy Z bude ztracena."
+
#: modules/volume/volume_zcal.c:104
msgid "Attaches, extracts and removes volume data z-axis calibration."
msgstr "Připojuje, extrahuje a odstraňuje kalibraci osy z objemových dat."
@@ -14717,6 +15482,14 @@ msgstr ""
"Počet hodnot v souboru %d\n"
"se liší od počtu rovin %d."
+#: modules/volume/volumeops.c:53
+msgid "/Extract _Preview"
+msgstr "/Extrahovat _náhled"
+
+#: modules/volume/volumeops.c:57
+msgid "Extract volume data preview to an image"
+msgstr "Extrahovat náhled objemových dat do obrázku"
+
#: modules/xyz/xyz_drift.c:267
msgid "Analyzes drift in XYZ data."
msgstr "Analyzuje drift v XYZ datech."
@@ -14761,7 +15534,7 @@ msgstr "drift podél z"
msgid "Analyze XYZ Drift"
msgstr "Analyzovat XYZ drift"
-#: modules/xyz/xyz_drift.c:566 modules/xyz/xyz_raster.c:391
+#: modules/xyz/xyz_drift.c:566 modules/xyz/xyz_raster.c:406
msgid "Reset Ran_ges"
msgstr "Resetovat roz_sahy"
@@ -14769,11 +15542,11 @@ msgstr "Resetovat roz_sahy"
msgid "_Guess parameters"
msgstr "O_dhadnout parametry"
-#: modules/xyz/xyz_drift.c:778 modules/xyz/xyz_raster.c:570
+#: modules/xyz/xyz_drift.c:778 modules/xyz/xyz_raster.c:539
msgid "_X-range:"
msgstr "_X-ový rozsah:"
-#: modules/xyz/xyz_drift.c:800 modules/xyz/xyz_raster.c:592
+#: modules/xyz/xyz_drift.c:800 modules/xyz/xyz_raster.c:561
msgid "_Y-range:"
msgstr "_Y-ový rozsah:"
@@ -14851,7 +15624,7 @@ msgstr "Nebyli nalezeni žádní sousedé"
msgid "Fitting in progress..."
msgstr "Probíhá fitování..."
-#: modules/xyz/xyz_drift.c:2269 modules/xyz/xyz_raster.c:1012
+#: modules/xyz/xyz_drift.c:2264 modules/xyz/xyz_raster.c:981
msgid "Physical dimensions are invalid."
msgstr "Fyzické rozměry jsou neplatné."
@@ -14891,39 +15664,39 @@ msgstr "Vyrovnat _XYZ data"
msgid "Update X and Y of _all compatible data"
msgstr "Opravit X a Y _všech kompatibilních dat"
-#: modules/xyz/xyz_raster.c:197
+#: modules/xyz/xyz_raster.c:194
msgid "Rasterizes XYZ data to images."
msgstr "Rasterizuje XYZ data do obrázků."
-#: modules/xyz/xyz_raster.c:211
+#: modules/xyz/xyz_raster.c:208
msgid "/_Rasterize..."
msgstr "/_Rasterizovat..."
-#: modules/xyz/xyz_raster.c:215
+#: modules/xyz/xyz_raster.c:212
msgid "Rasterize to image"
msgstr "Rasterizovat do obrázku"
-#: modules/xyz/xyz_raster.c:340
+#: modules/xyz/xyz_raster.c:337
msgid "Rasterize XYZ Data"
msgstr "Rasterizovat XYZ data"
-#: modules/xyz/xyz_raster.c:354
+#: modules/xyz/xyz_raster.c:351
msgid "Create Image _Directly"
msgstr "Vytvořit obrázek přímo"
-#: modules/xyz/xyz_raster.c:360
+#: modules/xyz/xyz_raster.c:357
msgid "XY points form a regular grid so interpolation is not necessary."
msgstr "XY body tvoří pravidelnou mřížku, takže interpolace není nutná."
-#: modules/xyz/xyz_raster.c:381
+#: modules/xyz/xyz_raster.c:392
msgid "Make Pixels S_quare"
msgstr "Čtvercové pi_xely"
-#: modules/xyz/xyz_raster.c:642
+#: modules/xyz/xyz_raster.c:611
msgid "Field"
msgstr "Polní"
-#: modules/xyz/xyz_raster.c:956
+#: modules/xyz/xyz_raster.c:925
#, c-format
msgid ""
"Number of points: %u\n"
@@ -14934,25 +15707,18 @@ msgstr ""
"Sloučených coby příliš blízkých: %u\n"
"Přidaných u hranic: %u"
-#: modules/xyz/xyz_raster.c:1091
+#: modules/xyz/xyz_raster.c:1065
msgid ""
"XYZ data regularization failed due to numerical instability or was "
"interrupted."
msgstr ""
"Regularizace XYZ dat selhala kvůli numerické nestabilitě nebo byla přerušena."
-#~ msgid "Graph function written in Python"
-#~ msgstr "Grafová funkce napsaná v Pythonu"
-
-#~ msgid ""
-#~ "Pygwy plugin: %s (%s)\n"
-#~ "Export failed."
-#~ msgstr ""
-#~ "Pygwy plugin: %s (%s)\n"
-#~ "Export se nezdařil."
+#~ msgid "Re_fine"
+#~ msgstr "_Zpřesnit"
-#~ msgid "Borders extension..."
-#~ msgstr "Rozšiřuji okraje..."
+#~ msgid "Distribute"
+#~ msgstr "Rozkopírovat"
-#~ msgid "Laplace interpolation..."
-#~ msgstr "Laplaceovská interpolace..."
+#~ msgid "Replace"
+#~ msgstr "Nahradit"
diff --git a/po/de.gmo b/po/de.gmo
index babea86..a92e9aa 100644
Binary files a/po/de.gmo and b/po/de.gmo differ
diff --git a/po/de.po b/po/de.po
index d890110..88d6bbd 100644
--- a/po/de.po
+++ b/po/de.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gwyddion\n"
"Report-Msgid-Bugs-To: yeti at gwyddion.net\n"
-"POT-Creation-Date: 2016-11-18 11:05+0100\n"
+"POT-Creation-Date: 2017-08-15 17:48+0200\n"
"PO-Revision-Date: 2014-09-03 20:32+0100\n"
"Last-Translator: Lennart Fricke <lennart at die-frickes.eu>\n"
"Language-Team: deutsch <de at li.org>\n"
@@ -137,7 +137,8 @@ msgstr ""
#: app/data-browser-aux.c:1480 app/data-browser.c:2280 app/data-browser.c:2887
#: app/data-browser.c:3707 app/data-browser.c:3857 app/data-browser.c:4139
#: app/data-browser.c:4504 app/data-browser.c:4590 app/data-browser.c:5016
-#: app/resource-editor.c:366 modules/process/convolution_filter.c:691
+#: app/resource-editor.c:366 modules/file/xyzexport.c:214
+#: modules/process/convolution_filter.c:691
msgid "Untitled"
msgstr "Unbenannt"
@@ -145,104 +146,112 @@ msgstr "Unbenannt"
msgid "Initial residua evaluation..."
msgstr ""
-#: libgwyddion/gwynlfit.c:479 modules/process/fit-shape.c:1632
+#: libgwyddion/gwynlfit.c:479 modules/process/fit-shape.c:1646
#, fuzzy
msgid "Fitting..."
msgstr "FFT-Filterung"
-#: libgwyddion/gwynlfitpreset.c:1442 libprocess/gwyprocessenums.c:101
-#: libprocess/gwyshapefitpreset.c:347
+#: libgwyddion/gwynlfitpreset.c:1549 libprocess/gwyprocessenums.c:101
+#: libprocess/gwyshapefitpreset.c:347 modules/process/psf-fit.c:157
msgid "Gaussian"
msgstr "Gauß"
-#: libgwyddion/gwynlfitpreset.c:1457
+#: libgwyddion/gwynlfitpreset.c:1564
#, fuzzy
msgid "Gaussian (PSDF)"
msgstr "Gauß (PSDF)"
-#: libgwyddion/gwynlfitpreset.c:1470
+#: libgwyddion/gwynlfitpreset.c:1577
#, fuzzy
msgid "Gaussian (ACF)"
msgstr "Gauß (ACF)"
-#: libgwyddion/gwynlfitpreset.c:1483
+#: libgwyddion/gwynlfitpreset.c:1590
#, fuzzy
msgid "Gaussian (HHCF)"
msgstr "Gauß (HHCF)"
-#: libgwyddion/gwynlfitpreset.c:1496
+#: libgwyddion/gwynlfitpreset.c:1603
#, fuzzy
msgid "Gaussian (RPSDF)"
msgstr "Gauß (RPSDF)"
-#: libgwyddion/gwynlfitpreset.c:1509
+#: libgwyddion/gwynlfitpreset.c:1616
#, fuzzy
msgid "Two Gaussians (PSDF)"
msgstr "Gauß (PSDF)"
-#: libgwyddion/gwynlfitpreset.c:1524 modules/xyz/xyz_drift.c:841
-#: modules/xyz/xyz_drift.c:846 modules/xyz/xyz_drift.c:1819
+#: libgwyddion/gwynlfitpreset.c:1631 modules/xyz/xyz_drift.c:841
+#: modules/xyz/xyz_drift.c:846 modules/xyz/xyz_drift.c:1818
msgid "Exponential"
msgstr "Exponentiell"
-#: libgwyddion/gwynlfitpreset.c:1536
+#: libgwyddion/gwynlfitpreset.c:1643
msgid "Exponential (PSDF)"
msgstr "Exponentiell (PSDF)"
-#: libgwyddion/gwynlfitpreset.c:1549
+#: libgwyddion/gwynlfitpreset.c:1656
msgid "Exponential (ACF)"
msgstr "Exponentiell (ACF)"
-#: libgwyddion/gwynlfitpreset.c:1561
+#: libgwyddion/gwynlfitpreset.c:1668
msgid "Exponential (HHCF)"
msgstr "Exponentiell (HHCF)"
-#: libgwyddion/gwynlfitpreset.c:1574
+#: libgwyddion/gwynlfitpreset.c:1681
msgid "Exponential (RPSDF)"
msgstr "Exponentiell (RPSDF)"
-#: libgwyddion/gwynlfitpreset.c:1588
+#: libgwyddion/gwynlfitpreset.c:1695
+msgid "K-correlated (PSDF)"
+msgstr ""
+
+#: libgwyddion/gwynlfitpreset.c:1709
msgid "Polynomial (order 0)"
msgstr "Polynomiell (0. Ordnung)"
-#: libgwyddion/gwynlfitpreset.c:1599 modules/xyz/xyz_drift.c:1805
+#: libgwyddion/gwynlfitpreset.c:1720 modules/xyz/xyz_drift.c:1804
msgid "Polynomial (order 1)"
msgstr "Polynomiell (1. Ordnung)"
-#: libgwyddion/gwynlfitpreset.c:1610
+#: libgwyddion/gwynlfitpreset.c:1731
msgid "Polynomial (order 2)"
msgstr "Polynomiell (2. Ordnung)"
-#: libgwyddion/gwynlfitpreset.c:1622
+#: libgwyddion/gwynlfitpreset.c:1743
msgid "Polynomial (order 3)"
msgstr "Polynomiell (3. Ordnung)"
-#: libgwyddion/gwynlfitpreset.c:1635
+#: libgwyddion/gwynlfitpreset.c:1756
#, fuzzy
msgid "Square wave"
msgstr "Rechtecksignal"
-#: libgwyddion/gwynlfitpreset.c:1651
+#: libgwyddion/gwynlfitpreset.c:1772
msgid "Parabolic step"
msgstr ""
-#: libgwyddion/gwynlfitpreset.c:1667
+#: libgwyddion/gwynlfitpreset.c:1788
msgid "Smooth slanted step"
msgstr ""
-#: libgwyddion/gwynlfitpreset.c:1684
+#: libgwyddion/gwynlfitpreset.c:1805
msgid "Smooth bent step"
msgstr ""
-#: libgwyddion/gwynlfitpreset.c:1700
+#: libgwyddion/gwynlfitpreset.c:1821
+msgid "Boltzmann bent step"
+msgstr ""
+
+#: libgwyddion/gwynlfitpreset.c:1837
msgid "Power"
msgstr ""
-#: libgwyddion/gwynlfitpreset.c:1712 libprocess/gwyshapefitpreset.c:348
+#: libgwyddion/gwynlfitpreset.c:1849 libprocess/gwyshapefitpreset.c:348
msgid "Lorentzian"
msgstr ""
-#: libgwyddion/gwynlfitpreset.c:1726
+#: libgwyddion/gwynlfitpreset.c:1863
msgid "Sinc"
msgstr "Sinc"
@@ -263,7 +272,7 @@ msgid "Step height (positive)"
msgstr ""
#: libprocess/cdline.c:590 libprocess/cdline.c:599
-#: libgwydgets/gwydgetenums.c:48 modules/process/hough.c:170
+#: libgwydgets/gwydgetenums.c:48 modules/process/hough.c:163
msgid "Line"
msgstr "Linie"
@@ -277,7 +286,7 @@ msgid "Circle (down)"
msgstr "Kreis (runter)"
#: libprocess/cdline.c:608 libprocess/cdline.c:617
-#: libgwydgets/gwygraphareadialog.c:557 modules/process/hough.c:171
+#: libgwydgets/gwygraphareadialog.c:550 modules/process/hough.c:164
msgid "Circle"
msgstr "Kreis"
@@ -286,256 +295,256 @@ msgstr "Kreis"
msgid "Circle (up)"
msgstr "Kreis (hoch)"
-#: libprocess/gwygrainvalue.c:64
+#: libprocess/gwygrainvalue.c:62
msgid "Grain number"
msgstr ""
-#: libprocess/gwygrainvalue.c:73 modules/process/curvature.c:129
+#: libprocess/gwygrainvalue.c:71 modules/process/curvature.c:128
msgid "Center x position"
msgstr "Zentrale X-Position"
-#: libprocess/gwygrainvalue.c:82 modules/process/curvature.c:130
+#: libprocess/gwygrainvalue.c:80 modules/process/curvature.c:129
msgid "Center y position"
msgstr "Zentrale Y-Position"
-#: libprocess/gwygrainvalue.c:91
+#: libprocess/gwygrainvalue.c:89
msgid "Minimum value"
msgstr "Minimalwert"
-#: libprocess/gwygrainvalue.c:100
+#: libprocess/gwygrainvalue.c:98
msgid "Maximum value"
msgstr "Maximalwert"
-#: libprocess/gwygrainvalue.c:109 modules/process/bdep_synth.c:133
-#: modules/tools/filter.c:237
+#: libprocess/gwygrainvalue.c:107 modules/process/bdep_synth.c:133
+#: modules/tools/filter.c:238
msgid "Mean value"
msgstr "Mittelwert"
-#: libprocess/gwygrainvalue.c:118 modules/tools/filter.c:238
+#: libprocess/gwygrainvalue.c:116 modules/tools/filter.c:239
msgid "Median value"
msgstr "Medianwert"
-#: libprocess/gwygrainvalue.c:127
+#: libprocess/gwygrainvalue.c:125
#, fuzzy
msgid "Minimum value on boundary"
msgstr "Minimaler Wert auf dem Rand"
-#: libprocess/gwygrainvalue.c:136
+#: libprocess/gwygrainvalue.c:134
#, fuzzy
msgid "Maximum value on boundary"
msgstr "Maximaler Wert auf dem Rand"
-#: libprocess/gwygrainvalue.c:145
+#: libprocess/gwygrainvalue.c:143
#, fuzzy
msgid "Pixel area"
msgstr "_Pixel-Radius:"
-#: libprocess/gwygrainvalue.c:154
+#: libprocess/gwygrainvalue.c:152
msgid "Projected area"
msgstr "Projizierte Fläche"
-#: libprocess/gwygrainvalue.c:163
+#: libprocess/gwygrainvalue.c:161
msgid "Surface area"
msgstr "Oberflächen-Flächeninhalt"
-#: libprocess/gwygrainvalue.c:172
+#: libprocess/gwygrainvalue.c:170
#, fuzzy
msgid "Equivalent square side"
msgstr "Äquivalente Quadrat-Kantenlänge"
-#: libprocess/gwygrainvalue.c:181
+#: libprocess/gwygrainvalue.c:179
#, fuzzy
msgid "Equivalent disc radius"
msgstr "Äquivalenter Kreisradius"
-#: libprocess/gwygrainvalue.c:190
+#: libprocess/gwygrainvalue.c:188
msgid "Area above half-height"
msgstr ""
-#: libprocess/gwygrainvalue.c:199
+#: libprocess/gwygrainvalue.c:197
msgid "Area of convex hull"
msgstr ""
#. TRANSLATORS: Grain volume calculated using basis (foot) set to
#. * zero.
-#: libprocess/gwygrainvalue.c:210
+#: libprocess/gwygrainvalue.c:208
msgid "Zero basis volume"
msgstr ""
#. TRANSLATORS: Grain volume calculated using basis (foot) set to the
#. * grain minimum.
-#: libprocess/gwygrainvalue.c:221
+#: libprocess/gwygrainvalue.c:219
msgid "Grain minimum basis volume"
msgstr ""
#. TRANSLATORS: Grain volume calculated using basis (foot) set to the
#. * Laplacian background.
-#: libprocess/gwygrainvalue.c:232
+#: libprocess/gwygrainvalue.c:230
msgid "Laplacian background basis volume"
msgstr ""
-#: libprocess/gwygrainvalue.c:241
+#: libprocess/gwygrainvalue.c:239
#, fuzzy
msgid "Projected boundary length"
msgstr "Projizierte Umrandungslänge"
-#: libprocess/gwygrainvalue.c:250
+#: libprocess/gwygrainvalue.c:248
msgid "Minimum bounding size"
msgstr "Minimale Abmessung"
-#: libprocess/gwygrainvalue.c:259
+#: libprocess/gwygrainvalue.c:257
msgid "Minimum bounding direction"
msgstr "Richtung der minimalen Abmessung"
-#: libprocess/gwygrainvalue.c:268
+#: libprocess/gwygrainvalue.c:266
msgid "Maximum bounding size"
msgstr "Maximale Abmessung"
-#: libprocess/gwygrainvalue.c:277
+#: libprocess/gwygrainvalue.c:275
msgid "Maximum bounding direction"
msgstr "Richtung der maximalen Abmessung"
-#: libprocess/gwygrainvalue.c:286
+#: libprocess/gwygrainvalue.c:284
msgid "Maximum inscribed disc radius"
msgstr ""
-#: libprocess/gwygrainvalue.c:295
+#: libprocess/gwygrainvalue.c:293
#, fuzzy
msgid "Maximum inscribed disc center x position"
msgstr "X-Position des Krümmungszentrums"
-#: libprocess/gwygrainvalue.c:304
+#: libprocess/gwygrainvalue.c:302
#, fuzzy
msgid "Maximum inscribed disc center y position"
msgstr "Y-Position des Krümmungszentrums"
-#: libprocess/gwygrainvalue.c:313
+#: libprocess/gwygrainvalue.c:311
msgid "Minimum circumcircle radius"
msgstr ""
-#: libprocess/gwygrainvalue.c:322
+#: libprocess/gwygrainvalue.c:320
#, fuzzy
msgid "Minimum circumcircle center x position"
msgstr "X-Position des Krümmungszentrums"
-#: libprocess/gwygrainvalue.c:331
+#: libprocess/gwygrainvalue.c:329
#, fuzzy
msgid "Minimum circumcircle center y position"
msgstr "Y-Position des Krümmungszentrums"
-#: libprocess/gwygrainvalue.c:340
+#: libprocess/gwygrainvalue.c:338
#, fuzzy
msgid "Mean radius"
msgstr "_Realer Radius"
-#: libprocess/gwygrainvalue.c:349 modules/tools/readvalue.c:319
+#: libprocess/gwygrainvalue.c:347 modules/tools/readvalue.c:322
msgid "Inclination θ"
msgstr "Neigungswinkel θ"
-#: libprocess/gwygrainvalue.c:358 modules/tools/readvalue.c:329
+#: libprocess/gwygrainvalue.c:356 modules/tools/readvalue.c:332
msgid "Inclination φ"
msgstr "Neigungswinkel φ"
-#: libprocess/gwygrainvalue.c:367
+#: libprocess/gwygrainvalue.c:365
#, fuzzy
msgid "Curvature center x position"
msgstr "X-Position des Krümmungszentrums"
-#: libprocess/gwygrainvalue.c:376
+#: libprocess/gwygrainvalue.c:374
#, fuzzy
msgid "Curvature center y position"
msgstr "Y-Position des Krümmungszentrums"
-#: libprocess/gwygrainvalue.c:385
+#: libprocess/gwygrainvalue.c:383
#, fuzzy
msgid "Curvature center z value"
msgstr "Z-Position des Krümmungszentrums"
-#: libprocess/gwygrainvalue.c:394 modules/tools/readvalue.c:344
+#: libprocess/gwygrainvalue.c:392 modules/tools/readvalue.c:347
#, fuzzy
msgid "Curvature 1"
msgstr "Krümmung 1"
-#: libprocess/gwygrainvalue.c:403 modules/tools/readvalue.c:354
+#: libprocess/gwygrainvalue.c:401 modules/tools/readvalue.c:357
#, fuzzy
msgid "Curvature 2"
msgstr "Krümmung 2"
-#: libprocess/gwygrainvalue.c:412
+#: libprocess/gwygrainvalue.c:410
#, fuzzy
msgid "Curvature angle 1"
msgstr "Krümmungswinkel 1"
-#: libprocess/gwygrainvalue.c:421
+#: libprocess/gwygrainvalue.c:419
#, fuzzy
msgid "Curvature angle 2"
msgstr "Krümmungswinkel 2"
-#: libprocess/gwygrainvalue.c:430
+#: libprocess/gwygrainvalue.c:428
msgid "Major semiaxis of equivalent ellipse"
msgstr ""
-#: libprocess/gwygrainvalue.c:439
+#: libprocess/gwygrainvalue.c:437
msgid "Minor semiaxis of equivalent ellipse"
msgstr ""
-#: libprocess/gwygrainvalue.c:448
+#: libprocess/gwygrainvalue.c:446
msgid "Orientation of equivalent ellipse"
msgstr ""
-#: libprocess/gwygrainvalue.c:1120
+#: libprocess/gwygrainvalue.c:1118
msgid "Id"
msgstr "ID"
-#: libprocess/gwygrainvalue.c:1121 modules/graph/graph_peaks.c:156
-#: modules/process/extract_path.c:391 modules/process/wave_synth.c:482
-#: modules/tools/readvalue.c:251
+#: libprocess/gwygrainvalue.c:1119 modules/graph/graph_peaks.c:154
+#: modules/process/extract_path.c:391 modules/process/wave_synth.c:513
+#: modules/tools/readvalue.c:253
msgid "Position"
msgstr "Position"
-#: libprocess/gwygrainvalue.c:1122 app/meta.c:411 modules/file/imgexport.c:4625
-#: modules/process/curvature.c:762 modules/tools/level3.c:468
-#: modules/tools/readvalue.c:286
+#: libprocess/gwygrainvalue.c:1120 app/meta.c:411 modules/file/imgexport.c:4573
+#: modules/process/curvature.c:759 modules/tools/level3.c:475
+#: modules/tools/readvalue.c:290
msgid "Value"
msgstr "Wert"
-#: libprocess/gwygrainvalue.c:1123
+#: libprocess/gwygrainvalue.c:1121
msgid "Area"
msgstr "Fläche"
-#: libprocess/gwygrainvalue.c:1124 app/data-browser.c:5624 app/toolbox.c:110
+#: libprocess/gwygrainvalue.c:1122 app/data-browser.c:5624 app/toolbox.c:115
msgid "Volume"
msgstr "Volumen"
-#: libprocess/gwygrainvalue.c:1125
+#: libprocess/gwygrainvalue.c:1123
#, fuzzy
msgid "Boundary"
msgstr "Rand"
-#: libprocess/gwygrainvalue.c:1126 modules/process/pat_synth.c:829
-#: modules/process/pat_synth.c:1131 modules/process/pat_synth.c:1466
-#: modules/tools/linestats.c:171 modules/volume/volume_linestat.c:147
+#: libprocess/gwygrainvalue.c:1124 modules/process/pat_synth.c:830
+#: modules/process/pat_synth.c:1132 modules/process/pat_synth.c:1467
+#: modules/tools/linestats.c:171 modules/volume/volume_linestat.c:149
msgid "Slope"
msgstr "Neigung"
-#: libprocess/gwygrainvalue.c:1127 modules/process/curvature.c:213
-#: modules/process/curvature.c:613
+#: libprocess/gwygrainvalue.c:1125 modules/process/curvature.c:212
+#: modules/process/curvature.c:615
msgid "Curvature"
msgstr "Krümmung"
-#: libprocess/gwygrainvalue.c:1128
+#: libprocess/gwygrainvalue.c:1126
msgid "Moment"
msgstr ""
-#: libprocess/gwygrainvalue.c:1132
+#: libprocess/gwygrainvalue.c:1130
msgid "User"
msgstr ""
-#: libprocess/gwyprocessenums.c:44
+#: libprocess/gwyprocessenums.c:44 modules/process/preview.h:263
msgid "Union"
msgstr "Vereinigungsmenge "
-#: libprocess/gwyprocessenums.c:45
+#: libprocess/gwyprocessenums.c:45 modules/process/preview.h:255
msgid "Intersection"
msgstr "Schnittmenge"
@@ -615,13 +624,13 @@ msgid "Scale and space adaptive"
msgstr ""
#. TRANSLATORS: Interpolation type (AKA nearest neighbour)
-#: libprocess/gwyprocessenums.c:207 modules/file/imgexport.c:3791
-#: modules/xyz/xyz_raster.c:640
+#: libprocess/gwyprocessenums.c:207 modules/file/imgexport.c:3756
+#: modules/xyz/xyz_raster.c:609
msgid "Round"
msgstr ""
-#: libprocess/gwyprocessenums.c:208 modules/file/imgexport.c:3792
-#: modules/xyz/xyz_raster.c:641
+#: libprocess/gwyprocessenums.c:208 modules/file/imgexport.c:3757
+#: modules/xyz/xyz_raster.c:610
msgid "Linear"
msgstr "Linear"
@@ -713,28 +722,28 @@ msgstr "Nur maskierten Bereich einbeziehen"
msgid "Use entire image (ignore mask)"
msgstr "Gesamtes Bild verwenden (Maske ignorieren)"
-#: libprocess/gwyprocessenums.c:602
+#: libprocess/gwyprocessenums.c:604
msgid "distance|City-block"
msgstr ""
-#: libprocess/gwyprocessenums.c:603
+#: libprocess/gwyprocessenums.c:605
#, fuzzy
msgid "distance|Chess"
msgstr "Abstand"
-#: libprocess/gwyprocessenums.c:604
+#: libprocess/gwyprocessenums.c:606
msgid "distance|Octagonal 4,8"
msgstr ""
-#: libprocess/gwyprocessenums.c:605
+#: libprocess/gwyprocessenums.c:607
msgid "distance|Octagonal 8,4"
msgstr ""
-#: libprocess/gwyprocessenums.c:606
+#: libprocess/gwyprocessenums.c:608
msgid "distance|Octagonal"
msgstr ""
-#: libprocess/gwyprocessenums.c:607
+#: libprocess/gwyprocessenums.c:609
msgid "distance|Euclidean"
msgstr ""
@@ -773,12 +782,12 @@ msgstr "Parallel"
msgid "Ring"
msgstr ""
-#: libprocess/morph_lib.c:169 libprocess/tip.c:1043
+#: libprocess/morph_lib.c:169 libprocess/tip.c:1052
#, fuzzy
msgid "Dilation..."
msgstr "Dilatation"
-#: libprocess/morph_lib.c:235 libprocess/tip.c:1164
+#: libprocess/morph_lib.c:235 libprocess/tip.c:1173
#, fuzzy
msgid "Erosion..."
msgstr "Erosion"
@@ -812,89 +821,89 @@ msgid_plural "Found %d internal local maxima"
msgstr[0] "%d interne lokale Maxima gefunden"
msgstr[1] "%d interne lokale Maxima gefunden"
-#: libprocess/tip.c:422
+#: libprocess/tip.c:431
#, fuzzy
msgid "Pyramid"
msgstr "Pyramide"
-#: libprocess/tip.c:423 libprocess/tip.c:429 libprocess/tip.c:435
+#: libprocess/tip.c:432 libprocess/tip.c:438 libprocess/tip.c:444
msgid "Pyramidal"
msgstr "Pyramidal"
-#: libprocess/tip.c:428
+#: libprocess/tip.c:437
#, fuzzy
msgid "Contact"
msgstr "Kontakt"
-#: libprocess/tip.c:434
+#: libprocess/tip.c:443
#, fuzzy
msgid "Noncontact"
msgstr "Nicht-Kontakt"
-#: libprocess/tip.c:440
+#: libprocess/tip.c:449
msgid "Delta function"
msgstr "Delta-Funktion"
-#: libprocess/tip.c:441
+#: libprocess/tip.c:450
msgid "Analytical"
msgstr "Analytisch"
-#: libprocess/tip.c:446
+#: libprocess/tip.c:455 modules/process/fibre_synth.c:259
#, fuzzy
msgid "Parabola"
msgstr "Parallel"
-#: libprocess/tip.c:447 libprocess/tip.c:453
+#: libprocess/tip.c:456 libprocess/tip.c:462
#, fuzzy
msgid "Symmetric"
msgstr "Symmetrie"
-#: libprocess/tip.c:452
+#: libprocess/tip.c:461
#, fuzzy
msgid "Cone"
msgstr "Keine"
-#: libprocess/tip.c:458
+#: libprocess/tip.c:467
msgid "Elliptical parabola"
msgstr ""
-#: libprocess/tip.c:459
+#: libprocess/tip.c:468
#, fuzzy
msgid "Asymmetric"
msgstr "Symmetrie"
-#: libprocess/tip.c:1339 libprocess/tip.c:1367 libprocess/tip.c:1416
-#: libprocess/tip.c:1443
+#: libprocess/tip.c:1348 libprocess/tip.c:1376 libprocess/tip.c:1425
+#: libprocess/tip.c:1452
msgid "Converting fields"
msgstr "Konvertiere Felder"
-#: libprocess/tip.c:1349
+#: libprocess/tip.c:1358
msgid "Starting partial estimation"
msgstr "Starte partielle Abschätzung"
-#: libprocess/tip.c:1426
+#: libprocess/tip.c:1435
msgid "Starting full estimation"
msgstr "Starte komplette Abschätzung"
-#: libprocess/triangulation.c:2085 modules/process/calcoefs_view.c:793
+#: libprocess/triangulation.c:2084 modules/process/calcoefs_view.c:793
#: modules/process/lat_synth.c:1178
#, fuzzy
msgid "Triangulating..."
msgstr "Triangulation..."
-#: libgwydgets/gwy3dwindow.c:570
+#: libgwydgets/gwy3dwindow.c:575
msgid "Rotate view (R)"
msgstr "Ansicht rotieren (R)"
-#: libgwydgets/gwy3dwindow.c:575
+#: libgwydgets/gwy3dwindow.c:580
msgid "Scale view as a whole (S)"
msgstr "Gesamte Ansicht skalieren (S)"
-#: libgwydgets/gwy3dwindow.c:580
+#: libgwydgets/gwy3dwindow.c:585
msgid "Scale value range (V)"
msgstr "Wertebereich skalieren (V)"
-#: libgwydgets/gwy3dwindow.c:585
+#: libgwydgets/gwy3dwindow.c:590
msgid "Move light source (L)"
msgstr "Lichtquelle bewegen (L)"
@@ -903,235 +912,297 @@ msgstr "Lichtquelle bewegen (L)"
msgid "Show full controls"
msgstr "Alle Kontrollelemente anzeigen"
-#: libgwydgets/gwy3dwindow.c:693
+#: libgwydgets/gwy3dwindow.c:691
#, fuzzy
msgid "Hide full controls"
msgstr "Kontrollelemente ausblenden"
-#: libgwydgets/gwy3dwindow.c:709 modules/file/imgexport.c:4796
-#: modules/process/fit-shape.c:461
+#: libgwydgets/gwy3dwindow.c:707 modules/file/imgexport.c:4745
+#: modules/process/fit-shape.c:462
msgid "adjective|Basic"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:714
+#: libgwydgets/gwy3dwindow.c:712
msgid "Light & Material"
msgstr "Beleuchtung & Material"
-#: libgwydgets/gwy3dwindow.c:719
+#: libgwydgets/gwy3dwindow.c:717
msgid "Labels"
msgstr "Beschriftungen"
-#: libgwydgets/gwy3dwindow.c:828 modules/process/facet_analysis.c:331
-#: modules/process/facet_analysis.c:347 modules/process/shade.c:245
+#: libgwydgets/gwy3dwindow.c:722
+#, fuzzy
+msgid "Colorbar"
+msgstr "Farbe"
+
+#: libgwydgets/gwy3dwindow.c:838 modules/process/facet_analysis.c:335
+#: modules/process/facet_analysis.c:351 modules/process/shade.c:253
#: modules/process/tilt.c:223
msgid "φ:"
msgstr "φ:"
-#: libgwydgets/gwy3dwindow.c:828 libgwydgets/gwy3dwindow.c:834
-#: libgwydgets/gwy3dwindow.c:1032 libgwydgets/gwy3dwindow.c:1040
-#: modules/process/facet_analysis.c:375 modules/process/indent_analyze.c:460
-#: modules/process/rotate.c:264 modules/process/shade.c:237
-#: modules/process/shade.c:245 modules/process/tilt.c:211
-#: modules/process/tilt.c:223 modules/process/tip_model.c:234
-#: modules/process/tip_model.c:240 modules/process/unrotate.c:334
+#: libgwydgets/gwy3dwindow.c:838 libgwydgets/gwy3dwindow.c:843
+#: libgwydgets/gwy3dwindow.c:1013 libgwydgets/gwy3dwindow.c:1020
+#: modules/process/correct_affine.c:461 modules/process/facet_analysis.c:238
+#: modules/process/facet_analysis.c:370 modules/process/indent_analyze.c:438
+#: modules/process/measure_lattice.c:381 modules/process/rotate.c:264
+#: modules/process/shade.c:245 modules/process/shade.c:253
+#: modules/process/synth.h:379 modules/process/synth.h:410
+#: modules/process/tilt.c:211 modules/process/tilt.c:223
+#: modules/process/tip_model.c:234 modules/process/tip_model.c:240
+#: modules/process/unrotate.c:334 modules/tools/distance.c:197
+#: modules/tools/readvalue.c:223 modules/tools/stats.c:319
msgid "deg"
msgstr "Grad"
-#: libgwydgets/gwy3dwindow.c:834 modules/process/facet_analysis.c:330
-#: modules/process/facet_analysis.c:346 modules/process/shade.c:237
+#: libgwydgets/gwy3dwindow.c:843 modules/process/facet_analysis.c:334
+#: modules/process/facet_analysis.c:350 modules/process/shade.c:245
#: modules/process/tilt.c:211
msgid "θ:"
msgstr "θ:"
-#: libgwydgets/gwy3dwindow.c:839 modules/process/cwt.c:151
+#: libgwydgets/gwy3dwindow.c:849 modules/process/cwt.c:151
msgid "_Scale:"
msgstr "_Skala:"
-#: libgwydgets/gwy3dwindow.c:846
+#: libgwydgets/gwy3dwindow.c:856
msgid "_Value scale:"
msgstr "_Werteskala:"
-#: libgwydgets/gwy3dwindow.c:851
+#: libgwydgets/gwy3dwindow.c:862
#, fuzzy
msgid "Ph_ysical scale:"
msgstr "_Werteskala:"
-#: libgwydgets/gwy3dwindow.c:865
+#: libgwydgets/gwy3dwindow.c:876
#, fuzzy
msgid "verb|Set"
msgstr "Speichern"
-#: libgwydgets/gwy3dwindow.c:877
+#: libgwydgets/gwy3dwindow.c:886
#, fuzzy
msgid "Line _width:"
msgstr "Neue _Breite:"
-#: libgwydgets/gwy3dwindow.c:881
+#: libgwydgets/gwy3dwindow.c:886 libgwydgets/gwy3dwindow.c:1194
+#: libgwydgets/gwy3dwindow.c:1204 libgwydgets/gwy3dwindow.c:1235
+#: libgwydgets/gwygraphareadialog.c:157 libgwydgets/gwygraphareadialog.c:173
+#: modules/file/hdrimage.cc:2246 modules/file/hdrimage.cc:2252
+#: modules/file/pixmap.c:820 modules/file/pixmap.c:826
+#: modules/process/angle_dist.c:188 modules/process/angle_dist.c:213
+#: modules/process/col_synth.c:486 modules/process/crosscor.c:252
+#: modules/process/crosscor.c:260 modules/process/crosscor.c:276
+#: modules/process/crosscor.c:284 modules/process/crosscor.c:300
+#: modules/process/crosscor.c:308 modules/process/cwt.c:151
+#: modules/process/dimensions.h:88 modules/process/edge.c:672
+#: modules/process/entropy.c:242 modules/process/extend.c:220
+#: modules/process/extend.c:227 modules/process/extend.c:234
+#: modules/process/extend.c:241 modules/process/facet_analysis.c:362
+#: modules/process/fbm_synth.c:383 modules/process/hough.c:203
+#: modules/process/local_contrast.c:146 modules/process/mark_disconn.c:263
+#: modules/process/mask_morph.c:237 modules/process/median-bg.c:209
+#: modules/process/neural.c:623 modules/process/neural.c:631
+#: modules/process/psdf_logphi.c:276 modules/process/rank.c:188
+#: modules/process/scale.c:237 modules/process/scale.c:246
+#: modules/process/scars.c:353 modules/process/scars.c:361
+#: modules/process/semsim.c:227 modules/process/slope_dist.c:365
+#: modules/process/slope_dist.c:393 modules/process/sphere-revolve.c:346
+#: modules/process/straighten_path.c:278 modules/process/synth.h:280
+#: modules/process/synth.h:501 modules/process/tip_blind.c:334
+#: modules/process/tip_blind.c:342 modules/process/volumize_layers.c:240
+#: modules/process/volumize_layers.c:245 modules/process/volumize_layers.c:250
+#: modules/process/wpour_mark.c:320 modules/tools/filter.c:291
+#: modules/tools/level3.c:244 modules/tools/maskedit.c:528
+#: modules/tools/maskedit.c:629 modules/tools/pathlevel.c:256
+#: modules/tools/profile.c:377 modules/tools/profile.c:503
+#: modules/tools/readvalue.c:222 modules/tools/readvalue.c:378
+#: modules/tools/roughness.c:868 modules/volume/volume_slice.c:446
+#: modules/volume/volume_slice.c:469 modules/volume/volume_slice.c:492
+#: modules/xyz/xyz_drift.c:738 modules/xyz/xyz_drift.c:753
+#: modules/xyz/xyz_raster.c:382 modules/xyz/xyz_raster.c:388
+msgid "px"
+msgstr "px"
+
+#: libgwydgets/gwy3dwindow.c:891
msgid "Show _axes"
msgstr "_Achsen anzeigen"
-#: libgwydgets/gwy3dwindow.c:890
+#: libgwydgets/gwy3dwindow.c:900
msgid "Show _labels"
msgstr "_Beschriftungen anzeigen"
-#: libgwydgets/gwy3dwindow.c:899
-msgid "Show false _colorbar"
-msgstr "_Farbskala anzeigen"
-
-#: libgwydgets/gwy3dwindow.c:908
+#: libgwydgets/gwy3dwindow.c:909
#, fuzzy
msgid "_Orthographic projection"
msgstr "_Orthographische Projektion"
-#: libgwydgets/gwy3dwindow.c:917
+#: libgwydgets/gwy3dwindow.c:918
#, fuzzy
msgid "_Hide masked"
msgstr "Maske _addieren"
-#: libgwydgets/gwy3dwindow.c:933
+#: libgwydgets/gwy3dwindow.c:934
msgid "_Lighting"
msgstr "Aus_leuchtung"
-#: libgwydgets/gwy3dwindow.c:934
+#: libgwydgets/gwy3dwindow.c:935
msgid "_Gradient"
msgstr "_Gradient"
-#: libgwydgets/gwy3dwindow.c:935
+#: libgwydgets/gwy3dwindow.c:936
msgid "_Overlay"
msgstr "_Überlagern"
-#: libgwydgets/gwy3dwindow.c:936
+#: libgwydgets/gwy3dwindow.c:937
msgid "_Overlay - no light"
msgstr "Ü_berlagern - ohne Beleuchtung"
-#: libgwydgets/gwy3dwindow.c:1009
+#: libgwydgets/gwy3dwindow.c:992
msgid "_Material:"
msgstr "_Material:"
-#: libgwydgets/gwy3dwindow.c:1032
+#: libgwydgets/gwy3dwindow.c:1013
msgid "_Light φ:"
msgstr "_Lichtquelle φ:"
-#: libgwydgets/gwy3dwindow.c:1040
+#: libgwydgets/gwy3dwindow.c:1020
msgid "L_ight θ:"
msgstr "L_ichtquelle θ:"
-#: libgwydgets/gwy3dwindow.c:1070 libgwydgets/gwy3dwindow.c:1240
-#: app/toolbox-editor.c:215 modules/file/hdrimage.cc:2213
-#: modules/file/imgexport.c:4760 modules/file/pixmap.c:789
+#: libgwydgets/gwy3dwindow.c:1052 libgwydgets/gwy3dwindow.c:1243
+#: app/toolbox-editor.c:216 modules/file/hdrimage.cc:2213
+#: modules/file/imgexport.c:4708 modules/file/pixmap.c:789
#: modules/file/rawfile.c:424 modules/process/angle_dist.c:172
#: modules/process/bdep_synth.c:341 modules/process/calcoefs_new.c:371
-#: modules/process/calibrate.c:391 modules/process/col_synth.c:392
-#: modules/process/correct_affine.c:301 modules/process/curvature.c:615
-#: modules/process/cwt.c:135 modules/process/deposit_synth.c:349
+#: modules/process/calibrate.c:383 modules/process/col_synth.c:392
+#: modules/process/correct_affine.c:346 modules/process/curvature.c:617
+#: modules/process/cwt.c:135 modules/process/deposit_synth.c:350
#: modules/process/diff_synth.c:411 modules/process/domain_synth.c:354
#: modules/process/drift.c:245 modules/process/dwt.c:166
#: modules/process/dwtanisotropy.c:184 modules/process/edge.c:638
#: modules/process/extend.c:192 modules/process/facet-level.c:193
-#: modules/process/facet_analysis.c:271 modules/process/fbm_synth.c:303
+#: modules/process/facet_analysis.c:275 modules/process/fbm_synth.c:303
#: modules/process/fft.c:336 modules/process/fft_filter_2d.c:417
-#: modules/process/fft_synth.c:341 modules/process/fractal.c:231
-#: modules/process/grain_edge.c:213 modules/process/grain_mark.c:247
-#: modules/process/grain_wshed.c:167 modules/process/hough.c:179
-#: modules/process/lat_synth.c:567 modules/process/latsim.c:159
-#: modules/process/level.c:245 modules/process/linematch.c:804
-#: modules/process/lno_synth.c:433 modules/process/local_contrast.c:130
-#: modules/process/logistic.c:234 modules/process/mark_disconn.c:208
-#: modules/process/mask_distribute.c:152 modules/process/measure_lattice.c:256
-#: modules/process/median-bg.c:180 modules/process/noise_synth.c:336
-#: modules/process/obj_synth.c:441 modules/process/pat_synth.c:385
-#: modules/process/pid.c:199 modules/process/polydistort.c:210
-#: modules/process/polylevel.c:373 modules/process/psdf_logphi.c:249
-#: modules/process/rank.c:158 modules/process/rotate.c:243
-#: modules/process/scale.c:196 modules/process/scars.c:298
-#: modules/process/semsim.c:211 modules/process/shade.c:208
-#: modules/process/slope_dist.c:276 modules/process/sphere-revolve.c:218
-#: modules/process/straighten_path.c:249 modules/process/tilt.c:161
-#: modules/process/tip_model.c:169 modules/process/unrotate.c:220
-#: modules/process/volumize_layers.c:221 modules/process/wave_synth.c:349
-#: modules/process/wpour_mark.c:278 modules/volume/volume_calibrate.c:370
-#: modules/volume/volume_extract.c:331 modules/volume/volume_kmeans.c:153
-#: modules/volume/volume_kmedians.c:147 modules/volume/volume_linestat.c:292
-#: modules/volume/volume_slice.c:292
+#: modules/process/fft_synth.c:341 modules/process/fibre_synth.c:422
+#: modules/process/fractal.c:228 modules/process/grain_edge.c:212
+#: modules/process/grain_mark.c:246 modules/process/grain_wshed.c:168
+#: modules/process/hough.c:174 modules/process/lat_synth.c:567
+#: modules/process/latsim.c:159 modules/process/level.c:245
+#: modules/process/linematch.c:771 modules/process/lno_synth.c:431
+#: modules/process/local_contrast.c:130 modules/process/logistic.c:234
+#: modules/process/mark_disconn.c:208 modules/process/mask_distribute.c:152
+#: modules/process/measure_lattice.c:246 modules/process/median-bg.c:180
+#: modules/process/mfm_current.c:332 modules/process/mfm_field.c:281
+#: modules/process/mfm_findshift.c:230 modules/process/mfm_parallel.c:333
+#: modules/process/mfm_shift.c:170 modules/process/noise_synth.c:334
+#: modules/process/obj_synth.c:438 modules/process/pat_synth.c:385
+#: modules/process/phase_synth.c:205 modules/process/pid.c:197
+#: modules/process/polydistort.c:210 modules/process/polylevel.c:373
+#: modules/process/psdf_logphi.c:249 modules/process/rank.c:158
+#: modules/process/rotate.c:243 modules/process/scale.c:196
+#: modules/process/scars.c:317 modules/process/semsim.c:211
+#: modules/process/shade.c:210 modules/process/slope_dist.c:275
+#: modules/process/sphere-revolve.c:317 modules/process/straighten_path.c:248
+#: modules/process/tilt.c:161 modules/process/tip_model.c:167
+#: modules/process/unrotate.c:220 modules/process/volumize_layers.c:221
+#: modules/process/wave_synth.c:368 modules/process/wpour_mark.c:278
+#: modules/volume/volume_calibrate.c:370 modules/volume/volume_extract.c:324
+#: modules/volume/volume_kmeans.c:154 modules/volume/volume_kmedians.c:147
+#: modules/volume/volume_linestat.c:297 modules/volume/volume_slice.c:294
msgid "_Reset"
msgstr "_Zurücksetzen"
-#: libgwydgets/gwy3dwindow.c:1142
+#: libgwydgets/gwy3dwindow.c:1141
msgid "X-axis"
msgstr "X-Achse"
-#: libgwydgets/gwy3dwindow.c:1143
+#: libgwydgets/gwy3dwindow.c:1142
msgid "Y-axis"
msgstr "Y-Achse"
-#: libgwydgets/gwy3dwindow.c:1144
+#: libgwydgets/gwy3dwindow.c:1143
msgid "Minimum z value"
msgstr "Minimaler z-Wert"
-#: libgwydgets/gwy3dwindow.c:1145
+#: libgwydgets/gwy3dwindow.c:1144
msgid "Maximum z value"
msgstr "Maximaler z-Wert"
-#: libgwydgets/gwy3dwindow.c:1168 modules/file/imgexport.c:3836
+#: libgwydgets/gwy3dwindow.c:1167 modules/file/imgexport.c:3806
msgid "_Label:"
msgstr "_Beschriftung:"
-#: libgwydgets/gwy3dwindow.c:1173
+#: libgwydgets/gwy3dwindow.c:1180
msgid "_Text:"
msgstr "_Text:"
-#: libgwydgets/gwy3dwindow.c:1193
+#: libgwydgets/gwy3dwindow.c:1185
msgid "Move label"
msgstr "Beschriftung verschieben"
-#: libgwydgets/gwy3dwindow.c:1202
+#: libgwydgets/gwy3dwindow.c:1194
msgid "_Horizontally:"
msgstr "_Horizontal:"
-#: libgwydgets/gwy3dwindow.c:1212
+#: libgwydgets/gwy3dwindow.c:1204
msgid "_Vertically:"
msgstr "_Vertikal:"
-#: libgwydgets/gwy3dwindow.c:1220
+#: libgwydgets/gwy3dwindow.c:1212
+msgid "A_ll labels have the same size"
+msgstr ""
+
+#: libgwydgets/gwy3dwindow.c:1223
msgid "Scale size _automatically"
msgstr "Größe _automatisch skalieren"
-#: libgwydgets/gwy3dwindow.c:1232 modules/tools/filter.c:290
+#: libgwydgets/gwy3dwindow.c:1235 modules/tools/filter.c:291
msgid "Si_ze:"
msgstr "_Größe:"
-#: libgwydgets/gwy3dwindow.c:1232 modules/process/cwt.c:151
-#: modules/process/hough.c:212
-msgid "pixels"
-msgstr "Pixel"
+#: libgwydgets/gwy3dwindow.c:1277
+msgid "Show false _colorbar"
+msgstr "_Farbskala anzeigen"
+
+#: libgwydgets/gwy3dwindow.c:1286
+msgid "Reserve space for _colorbar"
+msgstr ""
+
+#: libgwydgets/gwy3dwindow.c:1302 modules/process/lat_synth.c:651
+#: modules/process/obj_synth.c:542 modules/process/pat_synth.c:1458
+#: modules/process/phase_synth.c:279
+#, fuzzy
+msgid "_Size:"
+msgstr "_Größe:"
-#: libgwydgets/gwy3dwindow.c:1726 libgwydgets/gwy3dwindow.c:1779
+#: libgwydgets/gwy3dwindow.c:1311
+#, fuzzy
+msgid "_Vertical alignment:"
+msgstr "_Vertikale Größe:"
+
+#: libgwydgets/gwy3dwindow.c:1844 libgwydgets/gwy3dwindow.c:1897
msgid "S_witch to Lighting Mode"
msgstr "In Beleuchtungs-Modus _wechseln"
-#: libgwydgets/gwy3dwindow.c:1734 libgwydgets/gwy3dwindow.c:1756
+#: libgwydgets/gwy3dwindow.c:1852 libgwydgets/gwy3dwindow.c:1874
#, fuzzy
msgid "S_witch to Overlay Mode"
msgstr "In Beleuchtungs-Modus _wechseln"
-#: libgwydgets/gwy3dwindow.c:1748 libgwydgets/gwy3dwindow.c:1771
+#: libgwydgets/gwy3dwindow.c:1866 libgwydgets/gwy3dwindow.c:1889
msgid "S_witch to Color Gradient Mode"
msgstr "In Farb-Gadienten-Modus _wechseln"
-#: libgwydgets/gwy3dwindow.c:1787
+#: libgwydgets/gwy3dwindow.c:1905
#, fuzzy
msgid "T_oggle light"
msgstr "Dreieck hoch"
-#: libgwydgets/gwyaxisdialog.c:99
+#: libgwydgets/gwyaxisdialog.c:75
msgid "Axis Properties"
msgstr "Achsen-Eigenschaften"
-#: libgwydgets/gwyaxisdialog.c:101 libgwydgets/gwygraphlabeldialog.c:63
-msgid "Label Properties"
-msgstr "Beschriftungs-Eigenschaften"
-
-#: libgwydgets/gwyaxisdialog.c:184
+#: libgwydgets/gwyaxisdialog.c:88
msgid "Label Text"
msgstr "Beschriftungs-Text"
@@ -1155,7 +1226,7 @@ msgid "Hidden"
msgstr "Versteckt"
#: libgwydgets/gwydgetenums.c:47 libgwydgets/gwygraphwindowmeasuredialog.c:572
-#: modules/file/imgexport.c:475 modules/tools/selectionmanager.c:274
+#: modules/file/imgexport.c:474 modules/tools/selectionmanager.c:274
msgid "Points"
msgstr "Punkte"
@@ -1163,7 +1234,7 @@ msgstr "Punkte"
msgid "Line + points"
msgstr "Linie + Punkte"
-#: libgwydgets/gwydgetutils.c:564
+#: libgwydgets/gwydgetutils.c:848
msgid "Change Mask Color"
msgstr "Maskenfarbe ändern"
@@ -1172,7 +1243,7 @@ msgid "Quantity"
msgstr ""
#: libgwydgets/gwygrainvaluemenu.c:194 libgwydgets/gwygrainvaluemenu.c:207
-#: modules/process/curvature.c:753
+#: modules/process/curvature.c:750
msgid "Symbol"
msgstr "Symbol"
@@ -1193,151 +1264,156 @@ msgstr ""
msgid "_Next"
msgstr "_Nächster Tipp"
-#: libgwydgets/gwygraphareadialog.c:127 modules/file/rawgraph.c:302
+#: libgwydgets/gwygraphareadialog.c:123 modules/file/rawgraph.c:302
msgid "Plot _style:"
msgstr "Diagramm_stil:"
-#: libgwydgets/gwygraphareadialog.c:148
+#: libgwydgets/gwygraphareadialog.c:131
msgid "Pl_ot color:"
msgstr "Diagramm_farbe:"
-#: libgwydgets/gwygraphareadialog.c:159
+#: libgwydgets/gwygraphareadialog.c:151
msgid "Point _type:"
msgstr "Punkt_typ:"
-#: libgwydgets/gwygraphareadialog.c:165
+#: libgwydgets/gwygraphareadialog.c:157
msgid "_Point size:"
msgstr "_Punktgröße:"
-#: libgwydgets/gwygraphareadialog.c:175
+#: libgwydgets/gwygraphareadialog.c:167
msgid "_Line type:"
msgstr "_Linientyp:"
-#: libgwydgets/gwygraphareadialog.c:181 modules/file/imgexport.c:3150
+#: libgwydgets/gwygraphareadialog.c:173 modules/file/imgexport.c:3154
msgid "Line t_hickness:"
msgstr "Linien_dicke:"
-#: libgwydgets/gwygraphareadialog.c:187
+#: libgwydgets/gwygraphareadialog.c:180
#, fuzzy
msgid "<b>Label Te_xt</b>"
msgstr "Beschriftungs-Text"
-#: libgwydgets/gwygraphareadialog.c:404
+#: libgwydgets/gwygraphareadialog.c:397
#, fuzzy
msgid "Set Curve Color"
msgstr "Kurvenfarbe setzen"
-#: libgwydgets/gwygraphareadialog.c:556 modules/process/mask_morph.c:179
+#: libgwydgets/gwygraphareadialog.c:549 modules/process/mask_morph.c:178
msgid "Square"
msgstr "Quadrat"
-#: libgwydgets/gwygraphareadialog.c:558 modules/process/mask_morph.c:180
+#: libgwydgets/gwygraphareadialog.c:551 modules/process/mask_morph.c:179
msgid "Diamond"
msgstr "Diamant"
-#: libgwydgets/gwygraphareadialog.c:559
+#: libgwydgets/gwygraphareadialog.c:552
#, fuzzy
msgid "Cross"
msgstr "Kreuz"
-#: libgwydgets/gwygraphareadialog.c:560
+#: libgwydgets/gwygraphareadialog.c:553
msgid "Diagonal cross"
msgstr "Diagonales Kreuz"
-#: libgwydgets/gwygraphareadialog.c:561
+#: libgwydgets/gwygraphareadialog.c:554
msgid "Asterisk"
msgstr "Asterisk"
-#: libgwydgets/gwygraphareadialog.c:562
+#: libgwydgets/gwygraphareadialog.c:555
msgid "Star"
msgstr "Stern"
-#: libgwydgets/gwygraphareadialog.c:563
+#: libgwydgets/gwygraphareadialog.c:556
#, fuzzy
msgid "Triangle up"
msgstr "Dreieck hoch"
-#: libgwydgets/gwygraphareadialog.c:564
+#: libgwydgets/gwygraphareadialog.c:557
#, fuzzy
msgid "Triangle down"
msgstr "Dreieck runter"
-#: libgwydgets/gwygraphareadialog.c:565
+#: libgwydgets/gwygraphareadialog.c:558
#, fuzzy
msgid "Triangle left"
msgstr "Dreieck hoch"
-#: libgwydgets/gwygraphareadialog.c:566
+#: libgwydgets/gwygraphareadialog.c:559
#, fuzzy
msgid "Triangle right"
msgstr "Dreieck hoch"
-#: libgwydgets/gwygraphareadialog.c:567
+#: libgwydgets/gwygraphareadialog.c:560
#, fuzzy
msgid "Full square"
msgstr "Quadrat, ausgefüllt"
-#: libgwydgets/gwygraphareadialog.c:568 modules/process/mask_morph.c:177
+#: libgwydgets/gwygraphareadialog.c:561 modules/process/mask_morph.c:176
#, fuzzy
msgid "Disc"
msgstr "Kreis"
-#: libgwydgets/gwygraphareadialog.c:569
+#: libgwydgets/gwygraphareadialog.c:562
#, fuzzy
msgid "Full diamond"
msgstr "Diamant, ausgefüllt"
-#: libgwydgets/gwygraphareadialog.c:570
+#: libgwydgets/gwygraphareadialog.c:563
#, fuzzy
msgid "Full triangle up"
msgstr "Dreieck hoch, ausgefüllt"
-#: libgwydgets/gwygraphareadialog.c:571
+#: libgwydgets/gwygraphareadialog.c:564
#, fuzzy
msgid "Full triangle down"
msgstr "Dreieck runter, ausgefüllt"
-#: libgwydgets/gwygraphareadialog.c:572
+#: libgwydgets/gwygraphareadialog.c:565
#, fuzzy
msgid "Full triangle left"
msgstr "Dreieck links, ausgefüllt"
-#: libgwydgets/gwygraphareadialog.c:573
+#: libgwydgets/gwygraphareadialog.c:566
#, fuzzy
msgid "Full triangle right"
msgstr "Dreieck rechts, ausgefüllt"
-#: libgwydgets/gwygraphareadialog.c:635
+#: libgwydgets/gwygraphareadialog.c:628
msgid "line-style|Solid"
msgstr ""
-#: libgwydgets/gwygraphareadialog.c:636
+#: libgwydgets/gwygraphareadialog.c:629
msgid "line-style|Dash"
msgstr ""
-#: libgwydgets/gwygraphcurves.c:451
+#: libgwydgets/gwygraphcurves.c:448
msgid "Description"
msgstr "Beschreibung"
-#: libgwydgets/gwygraphcurves.c:463
+#: libgwydgets/gwygraphcurves.c:460
msgid "Mode"
msgstr "Modus"
-#: libgwydgets/gwygraphcurves.c:481
+#: libgwydgets/gwygraphcurves.c:478
msgid "Color"
msgstr "Farbe"
-#: libgwydgets/gwygraphcurves.c:494
+#: libgwydgets/gwygraphcurves.c:491
#, fuzzy
msgid "Point Type"
msgstr "Punkttyp"
-#: libgwydgets/gwygraphcurves.c:516
+#: libgwydgets/gwygraphcurves.c:513
msgid "Line Style"
msgstr "Linientyp"
+#: libgwydgets/gwygraphlabeldialog.c:63
+msgid "Label Properties"
+msgstr "Beschriftungs-Eigenschaften"
+
#: libgwydgets/gwygraphlabeldialog.c:74
-msgid "Frame thickness:"
+#, fuzzy
+msgid "_Frame thickness:"
msgstr "Rahmendicke:"
#: libgwydgets/gwygraphlabeldialog.c:81
@@ -1349,12 +1425,12 @@ msgstr "seiten_verkehrt"
msgid "Abscissa"
msgstr ""
-#: libgwydgets/gwygraphwindow.c:163 app/toolbox-editor.c:1002 app/toolbox.c:108
+#: libgwydgets/gwygraphwindow.c:163 app/toolbox-editor.c:1015 app/toolbox.c:113
msgid "Graph"
msgstr "Graph"
#: libgwydgets/gwygraphwindow.c:170 modules/file/hdrimage.cc:472
-#: modules/process/fit-shape.c:656
+#: modules/process/fit-shape.c:666 modules/process/psf.c:229
msgid "Data"
msgstr "Daten"
@@ -1395,15 +1471,15 @@ msgstr ""
#: libgwydgets/gwygraphwindowmeasuredialog.c:394
#: libgwydgets/gwygraphwindowmeasuredialog.c:580 modules/tools/linestats.c:170
-#: modules/tools/roughness.c:516 modules/volume/volume_linestat.c:157
+#: modules/tools/roughness.c:517 modules/volume/volume_linestat.c:159
msgid "Length"
msgstr "Länge"
#: libgwydgets/gwygraphwindowmeasuredialog.c:398
#: libgwydgets/gwygraphwindowmeasuredialog.c:588 app/gwyplaintool.c:1018
-#: modules/process/lat_synth.c:747 modules/process/obj_synth.c:569
-#: modules/process/pat_synth.c:846 modules/process/pat_synth.c:1148
-#: modules/process/pat_synth.c:1483
+#: modules/process/fibre_synth.c:534 modules/process/lat_synth.c:747
+#: modules/process/obj_synth.c:567 modules/process/pat_synth.c:847
+#: modules/process/pat_synth.c:1149 modules/process/pat_synth.c:1484
msgid "Height"
msgstr "Höhe"
@@ -1417,12 +1493,12 @@ msgid "Curve:"
msgstr "Kurve:"
#: libgwydgets/gwygraphwindowmeasuredialog.c:553
-#: modules/process/linematch.c:828 modules/process/semsim.c:249
+#: modules/process/linematch.c:795 modules/process/semsim.c:249
#: modules/xyz/xyz_level.c:254
msgid "Method:"
msgstr "Methode:"
-#: libgwydgets/gwygraphwindowmeasuredialog.c:592 modules/process/crosscor.c:354
+#: libgwydgets/gwygraphwindowmeasuredialog.c:592 modules/process/crosscor.c:331
msgid "Angle"
msgstr "Winkel"
@@ -1433,7 +1509,7 @@ msgid "Preferred"
msgstr "Bevorzugt"
#: libgwydgets/gwyoptionmenus.c:470 app/meta.c:410
-#: modules/file/imgexport.c:4160 modules/file/imgexport.c:4607
+#: modules/file/imgexport.c:4110 modules/file/imgexport.c:4555
#: modules/file/rawfile.c:995 modules/process/convolution_filter.c:538
#: modules/process/neural.c:418 modules/tools/selectionmanager.c:345
msgid "Name"
@@ -1472,7 +1548,7 @@ msgid "A_dd symbol"
msgstr ""
#: libgwydgets/gwyscitext.c:274 modules/file/rawfile.c:553
-#: modules/xyz/xyz_drift.c:580 modules/xyz/xyz_raster.c:405
+#: modules/xyz/xyz_drift.c:580 modules/xyz/xyz_raster.c:419
msgid "Preview"
msgstr "Vorschau"
@@ -1490,92 +1566,86 @@ msgstr "Das Laden dieses Dateiformats wird von keinem Modul unterstützt."
msgid "No module can save to this file type."
msgstr "Speichern in diesem Dateitformat wird von keinem Modul unterstützt."
-#: libgwymodule/gwymodulebrowser.c:67
+#: libgwymodule/gwymodulebrowser.c:66
msgid "Module Browser"
msgstr "Modul-Browser"
-#: libgwymodule/gwymodulebrowser.c:190
+#: libgwymodule/gwymodulebrowser.c:189
msgid "Module"
msgstr "Modul"
-#: libgwymodule/gwymodulebrowser.c:190
+#: libgwymodule/gwymodulebrowser.c:189
msgid "Version"
msgstr "Version"
-#: libgwymodule/gwymodulebrowser.c:190
+#: libgwymodule/gwymodulebrowser.c:189
msgid "Author"
msgstr "Autor"
-#: libgwymodule/gwymodulebrowser.c:246
+#: libgwymodule/gwymodulebrowser.c:244
#, fuzzy
msgid "Name-Version:"
msgstr "Name-Version:"
-#: libgwymodule/gwymodulebrowser.c:247 libgwymodule/gwymodulebrowser.c:270
+#: libgwymodule/gwymodulebrowser.c:245 libgwymodule/gwymodulebrowser.c:268
#: modules/process/grain_stat.c:186
msgid "File:"
msgstr "Datei:"
-#: libgwymodule/gwymodulebrowser.c:248
+#: libgwymodule/gwymodulebrowser.c:246
msgid "Registered functions:"
msgstr "Registrierte Funktionen:"
-#: libgwymodule/gwymodulebrowser.c:249
+#: libgwymodule/gwymodulebrowser.c:247
msgid "Authors:"
msgstr "Autoren:"
-#: libgwymodule/gwymodulebrowser.c:250
+#: libgwymodule/gwymodulebrowser.c:248
msgid "Copyright:"
msgstr "Copyright:"
-#: libgwymodule/gwymodulebrowser.c:251
+#: libgwymodule/gwymodulebrowser.c:249
msgid "Date:"
msgstr "Datum:"
-#: libgwymodule/gwymodulebrowser.c:252
+#: libgwymodule/gwymodulebrowser.c:250
msgid "Description:"
msgstr "Beschreibung:"
-#: libgwymodule/gwymodulebrowser.c:269
+#: libgwymodule/gwymodulebrowser.c:267
msgid "Name:"
msgstr "Name:"
-#: libgwymodule/gwymodulebrowser.c:271
+#: libgwymodule/gwymodulebrowser.c:269
msgid "Failure:"
msgstr "Fehler:"
-#: app/about.c:57
+#: app/about.c:58
#, c-format
msgid "About %s"
msgstr "Über %s"
-#. TRANSLATORS: %s is replaced with date in ISO format YYYY-MM-DD.
-#: app/about.c:92
-#, c-format
-msgid "Released %s\n"
-msgstr ""
-
-#: app/about.c:93
+#: app/about.c:97
#, fuzzy
msgid "An SPM data visualization and analysis tool."
msgstr "Ein Anzeige- und Analyse-Programm für Rastersondenmikroskopie-Daten."
-#: app/about.c:101
+#: app/about.c:105
#, fuzzy
msgid "Report bugs to:"
msgstr ""
"<i>%s</i>\n"
"Fehlerberichte an: <i>%s</i>"
-#: app/about.c:116
+#: app/about.c:120
msgid "Credits"
msgstr "Mitwirkende"
-#: app/about.c:133
+#: app/about.c:137
msgid "License"
msgstr "Lizenz"
-#: app/about.c:138
+#: app/about.c:142
#, c-format
msgid ""
"%s is free software; you can redistribute it and/or modify it under the "
@@ -1591,60 +1661,64 @@ msgstr ""
"Lizenzformulierung finden Sie in der Datei COPYING, die im Quellpaket "
"enthalten ist."
-#: app/about.c:160 modules/process/logistic.c:270
+#: app/about.c:164 modules/process/logistic.c:269
msgid "Features"
msgstr ""
-#: app/about.c:220
+#: app/about.c:224
msgid "Developers"
msgstr "Entwickler"
-#: app/about.c:221
+#: app/about.c:225
msgid "Translators"
msgstr "Übersetzer"
-#: app/about.c:225
+#: app/about.c:229
msgid "Development is supported by the Czech Metrology Institute: "
msgstr ""
"Die Entwicklung dieser Software wird unterstützt vom Tschechischen "
"Metrologie-Institut:"
-#: app/about.c:253 app/about.c:256
+#: app/about.c:257 app/about.c:260
msgid "OpenGL 3D View"
msgstr "OpenGL 3D-Ansicht"
-#: app/about.c:257 app/about.c:271 app/about.c:291
+#: app/about.c:261 app/about.c:266 app/about.c:286
msgid "not available\n"
msgstr "nicht verfügbar\n"
-#: app/about.c:262 app/about.c:265
-msgid "Fast Fourier Transform"
-msgstr "Schnelle Fouriertransformation"
-
-#: app/about.c:266
-msgid "built-in SimpleFFT\n"
-msgstr ""
-
-#: app/about.c:274
+#: app/about.c:269
msgid "X11 protocol\n"
msgstr "X11-Protokoll\n"
-#: app/about.c:276
+#: app/about.c:271
msgid "Win32 protocol\n"
msgstr "Win32-Protokoll\n"
-#: app/about.c:278
+#: app/about.c:273
msgid "LibUnique\n"
msgstr "LibUnique\n"
-#: app/about.c:282
+#: app/about.c:277
msgid "Remote Control"
msgstr ""
-#: app/about.c:286 app/about.c:290
+#: app/about.c:281 app/about.c:285
msgid "Python Scripting Interface"
msgstr "Python Skripting-Schnittstelle"
+#. TRANSLATORS: %s is replaced with date in ISO format YYYY-MM-DD.
+#: app/about.c:311
+#, c-format
+msgid "Development version, built %s"
+msgstr ""
+
+#. TRANSLATORS: %s is replaced with date in ISO format YYYY-MM-DD.
+#: app/about.c:328
+#, c-format
+msgid "Released %s"
+msgstr ""
+
#: app/app.c:301
#, c-format
msgid ""
@@ -1656,125 +1730,134 @@ msgstr ""
"%s\n"
"Möchten Sie das Programm wirklich beenden?"
-#: app/app.c:440
+#: app/app.c:442
msgid "Mask _Color..."
msgstr "Masken_farbe..."
-#: app/app.c:456 app/app.c:1725
+#: app/app.c:458 app/app.c:1754
msgid "Zoom _1:1"
msgstr "_Originalgröße"
-#: app/app.c:460 app/app.c:1729 app/app.c:1957
+#: app/app.c:462 app/app.c:1758 app/app.c:1988
#, fuzzy
msgid "Metadata _Browser..."
msgstr "/_Metadaten-Browser"
-#: app/app.c:465 app/app.c:1734 app/app.c:1962
+#: app/app.c:467 app/app.c:1763 app/app.c:1993
msgid "View _Log..."
msgstr ""
-#: app/app.c:649
+#: app/app.c:651
msgid "Pi_xelwise Square"
msgstr ""
-#: app/app.c:659
+#: app/app.c:661
msgid "_Physically Square"
msgstr ""
-#: app/app.c:836
+#: app/app.c:842
+msgid "Set as Default"
+msgstr "Als Vorgabe setzen"
+
+#: app/app.c:844
+msgid "Set the current view setup as the default"
+msgstr "Momentane Ansicht als Vorgabe setzen"
+
+#: app/app.c:854
msgid "verb|Save"
msgstr "Speichern"
-#: app/app.c:839 app/app.c:843
+#: app/app.c:857 app/app.c:861
msgid "Save 3D view to an image"
msgstr "3D-Ansicht als Bild speichern"
-#: app/app.c:849
-msgid "Set as Default"
-msgstr "Als Vorgabe setzen"
+#: app/app.c:869
+#, fuzzy
+msgid "_Autocrop"
+msgstr "_Auto"
-#: app/app.c:851
-msgid "Set the current view setup as the default"
-msgstr "Momentane Ansicht als Vorgabe setzen"
+#: app/app.c:873
+msgid "Remove white borders from exported image"
+msgstr ""
-#: app/app.c:940
+#: app/app.c:960
msgid "_Show mask"
msgstr "_Maske anzeigen"
-#: app/app.c:1106
+#: app/app.c:1172
#, c-format
msgid "Saving of 3D view to `%s' failed"
msgstr "Das Speichern der 3D-Ansicht nach `%s' ist fehlgeschlagen"
-#: app/app.c:1150
+#: app/app.c:1222
msgid "Export 3D View"
msgstr "3D-Ansicht exportieren"
-#: app/app.c:1457
+#: app/app.c:1478
#, fuzzy
msgid "_Change Preview"
msgstr "Keine Vorschau möglich"
-#: app/app.c:1583
+#: app/app.c:1606
#, fuzzy
msgid "Change Volume Data Preview"
msgstr "Keine Vorschau möglich"
-#: app/app.c:1593
+#: app/app.c:1616
#, fuzzy
msgid "Preview quantity:"
msgstr "Vorschautyp:"
-#: app/app.c:1603 modules/process/extend.c:267 modules/tools/linestats.c:165
+#: app/app.c:1626 modules/process/extend.c:267 modules/tools/linestats.c:165
#: modules/volume/volume_linestat.c:142
msgid "Mean"
msgstr "Mittelwert"
-#: app/app.c:1604 modules/process/polydistort.c:255 modules/tools/filter.c:240
+#: app/app.c:1627 modules/process/polydistort.c:258 modules/tools/filter.c:241
#: modules/tools/icolorange.c:424 modules/tools/linestats.c:167
#: modules/volume/volume_linestat.c:144
msgid "Minimum"
msgstr "Minimum"
-#: app/app.c:1605 modules/process/col_synth.c:170 modules/tools/filter.c:241
+#: app/app.c:1628 modules/process/col_synth.c:170 modules/tools/filter.c:242
#: modules/tools/icolorange.c:435 modules/tools/linestats.c:168
#: modules/volume/volume_linestat.c:145
msgid "Maximum"
msgstr "Maximum"
-#: app/app.c:1606
+#: app/app.c:1629 modules/volume/volume_linestat.c:146
#, fuzzy
msgid "Min. position"
msgstr "Maximaler z-Wert"
-#: app/app.c:1607
+#: app/app.c:1630 modules/volume/volume_linestat.c:147
#, fuzzy
msgid "Max. position"
msgstr "Maximaler z-Wert"
-#: app/app.c:1608 modules/process/bdep_synth.c:134
-#: modules/process/col_synth.c:171 modules/process/scars.c:346
-#: modules/process/scars.c:353 modules/process/threshold.c:341
+#: app/app.c:1631 modules/process/bdep_synth.c:134
+#: modules/process/col_synth.c:171 modules/process/scars.c:369
+#: modules/process/scars.c:377 modules/process/threshold.c:336
#, fuzzy
msgid "RMS"
msgstr "Quadratmittel"
-#: app/app.c:1609 modules/file/asciiexport.c:187 modules/file/gxyzffile.c:393
-#: modules/file/xyzexport.c:233 modules/file/xyzexport.c:302
+#: app/app.c:1632 modules/file/asciiexport.c:187 modules/file/gxyzffile.c:393
+#: modules/file/xyzexport.c:236 modules/file/xyzexport.c:305
msgid "Channel:"
msgstr "Kanal:"
-#: app/app.c:1610
+#: app/app.c:1633
#, fuzzy
msgid "Section:"
msgstr "Richtung:"
-#: app/app.c:1861
+#: app/app.c:1890
#, fuzzy
msgid "_Update Preview"
msgstr "Keine Vorschau möglich"
-#: app/app.c:1867
+#: app/app.c:1896
#, fuzzy
msgid "_Density Map"
msgstr "Dich_te:"
@@ -1794,12 +1877,12 @@ msgstr "Unbekannte Linie %d"
msgid "Unknown XYZ %d"
msgstr "Unbekannte Linie %d"
-#: app/data-browser-aux.c:2795
+#: app/data-browser-aux.c:2839
#, c-format
msgid "Z levels: %d, Z unit: %s"
msgstr ""
-#: app/data-browser-aux.c:2821
+#: app/data-browser-aux.c:2865
#, fuzzy, c-format
msgid "Points: %d"
msgstr "Punkte"
@@ -1830,10 +1913,11 @@ msgid "Close file"
msgstr "Datei schließen"
#: app/data-browser.c:5582
-msgid "Channels"
-msgstr "Kanäle"
+#, fuzzy
+msgid "Images"
+msgstr "FFT Imaginärteil"
-#: app/data-browser.c:5596 modules/volume/volume_extract.c:444
+#: app/data-browser.c:5596 modules/volume/volume_extract.c:431
msgid "Graphs"
msgstr "Graphen"
@@ -1879,46 +1963,46 @@ msgid ""
"%s"
msgstr ""
-#: app/file.c:285
+#: app/file.c:292
#, c-format
msgid "Opening of `%s' failed"
msgstr "Das Öffnen von `%s' ist fehlgeschlagen"
-#: app/file.c:291 app/file.c:526
+#: app/file.c:298 app/file.c:533
#, fuzzy, c-format
msgid "Full file path: %s."
msgstr "Datei_typ: %s"
-#: app/file.c:294
+#: app/file.c:301
#, fuzzy, c-format
msgid "Loaded using: %s."
msgstr "Lade Einstellungen"
-#: app/file.c:380
+#: app/file.c:387
#, fuzzy
msgid "Merge File"
msgstr "Zusammengefügte Bilder"
-#: app/file.c:382 app/gwyappfilechooser.c:221
+#: app/file.c:389 app/gwyappfilechooser.c:226
msgid "Open File"
msgstr "Datei öffnen"
-#: app/file.c:520 app/gwymoduleutils.c:192
+#: app/file.c:527 app/gwymoduleutils.c:192
#, c-format
msgid "Saving of `%s' failed"
msgstr "Das Speichern von `%s' ist fehlgeschlagen"
-#: app/file.c:529
+#: app/file.c:536
#, c-format
msgid "Saved using: %s."
msgstr ""
-#: app/file.c:689
+#: app/file.c:696
#, c-format
msgid "File `%s' already exists. Replace?"
msgstr "Die Datei `%s' Existiert bereits. Soll sie ersetzt werden?"
-#: app/file.c:693
+#: app/file.c:700
#, c-format
msgid ""
"The file already exists in `%s'. Replacing it will overwrite its contents."
@@ -1926,7 +2010,7 @@ msgstr ""
"Die Datei existiert bereits in `%s'. Beim Ersetzen wird ihr Inhalt "
"überschrieben."
-#: app/file.c:696
+#: app/file.c:703
msgid "Replace File?"
msgstr "Datei ersetzen?"
@@ -1950,11 +2034,11 @@ msgstr "Dateiliste schließen"
msgid "Open selected file"
msgstr "Ausgewählte Datei öffnen"
-#: app/filelist.c:566 app/gwyappfilechooser.c:583
+#: app/filelist.c:566 app/gwyappfilechooser.c:592
msgid "_Filter:"
msgstr "_Filter:"
-#: app/filelist.c:604 app/gwyappfilechooser.c:619
+#: app/filelist.c:604 app/gwyappfilechooser.c:628
msgid "Case _sensitive"
msgstr "Groß-/Kleinschreibung _unterscheiden"
@@ -2005,103 +2089,103 @@ msgstr "_Kurve"
msgid "_Snap to control points"
msgstr "An Kontrollpunkten ein_rasten"
-#: app/gwyappfilechooser.c:226
+#: app/gwyappfilechooser.c:231
msgid "Save File"
msgstr "Datei speichern"
-#: app/gwyappfilechooser.c:380
+#: app/gwyappfilechooser.c:389
#, c-format
msgid "File _type: %s"
msgstr "Datei_typ: %s"
-#: app/gwyappfilechooser.c:387
+#: app/gwyappfilechooser.c:396
#, fuzzy
msgid "Only loadable shown"
msgstr "Nur ladbare Dateien anzeigen"
-#: app/gwyappfilechooser.c:391
+#: app/gwyappfilechooser.c:400
#, fuzzy, c-format
msgid "Filter: %s"
msgstr "_Filter:"
-#: app/gwyappfilechooser.c:455
+#: app/gwyappfilechooser.c:464
msgid "Automatic by extension"
msgstr "Automatisch, nach Dateiendung"
-#: app/gwyappfilechooser.c:464
+#: app/gwyappfilechooser.c:473
msgid "Automatically detected"
msgstr "Automatisch erkennen"
-#: app/gwyappfilechooser.c:561
+#: app/gwyappfilechooser.c:570
#, fuzzy
msgid "Show only loadable files"
msgstr "Nur ladbare Dateien anzeigen"
-#: app/gwyappfilechooser.c:844
+#: app/gwyappfilechooser.c:855
msgid "Plane-level previewed data"
msgstr ""
-#: app/gwyappfilechooser.c:860
+#: app/gwyappfilechooser.c:871
#, fuzzy
msgid "Row-level previewed data"
msgstr "Nivellierte Daten"
-#: app/gwyappfilechooser.c:969
+#: app/gwyappfilechooser.c:987
+msgid "File too large for preview"
+msgstr ""
+
+#: app/gwyappfilechooser.c:988
msgid "…"
msgstr "..."
-#: app/gwyappfilechooser.c:1331
+#: app/gwyappfilechooser.c:1352
msgid "Cannot preview"
msgstr "Keine Vorschau möglich"
-#: app/gwyddion.c:143
+#: app/gwyddion.c:147
msgid "Loading document history"
msgstr "Lade Verlauf"
-#: app/gwyddion.c:148
+#: app/gwyddion.c:152
msgid "Registering "
msgstr "Registriere"
-#: app/gwyddion.c:149
+#: app/gwyddion.c:153
#, fuzzy
msgid "stock items"
msgstr "Lagerbestand"
-#: app/gwyddion.c:153
+#: app/gwyddion.c:157
msgid "color gradients"
msgstr "Farb-Gradienten"
-#: app/gwyddion.c:155
+#: app/gwyddion.c:159
msgid "GL materials"
msgstr "GL Materialien"
-#: app/gwyddion.c:157
+#: app/gwyddion.c:161
#, fuzzy
msgid "grain quantities"
msgstr "Korn-Statistiken"
-#: app/gwyddion.c:159
+#: app/gwyddion.c:163
#, fuzzy
msgid "calibrations"
msgstr "Kalibrierungen"
-#: app/gwyddion.c:164
+#: app/gwyddion.c:168
msgid "Loading settings"
msgstr "Lade Einstellungen"
-#: app/gwyddion.c:171
+#: app/gwyddion.c:175
msgid "Registering modules"
msgstr "Registriere Module"
-#: app/gwyddion.c:193
-msgid "Initializing GUI"
-msgstr "Initialisiere graphische Benutzeroberfläche"
-
-#: app/gwyddion.c:439
+#: app/gwyddion.c:464
msgid "Could not read settings."
msgstr "Einstellungen konnten nicht gelesen werden."
-#: app/gwyddion.c:442
+#: app/gwyddion.c:467
#, c-format
msgid ""
"Settings file `%s' cannot be read: %s\n"
@@ -2114,48 +2198,69 @@ msgstr ""
"Um gespeicherte Einstellungen nicht zu verlieren, wird die Datei nicht "
"aktualisiert, bis sie repariert oder gelöscht wurde."
-#: app/gwymoduleutils-file.c:542
+#: app/gwyddion.c:505
+#, c-format
+msgid "Many modules (%u) failed to register."
+msgstr ""
+
+#: app/gwyddion.c:510
+#, c-format
+msgid ""
+"Most likely Gwyddion was not upgraded correctly. Instead, one installation "
+"was just overwritten with another, and now it is a mess.\n"
+"\n"
+"Please remove completely the module directory\n"
+"\n"
+"%s\n"
+"\n"
+"and reinstall Gwyddion.\n"
+"\n"
+"See Info → Module Browser for specific errors."
+msgstr ""
+
+#: app/gwymoduleutils-file.c:536
#, c-format
msgid "Section %s ended at line %u but it has never started."
msgstr ""
-#: app/gwymoduleutils-file.c:550
+#: app/gwymoduleutils-file.c:544
#, c-format
msgid "Section %s ended at line %u instead of %s."
msgstr ""
-#: app/gwymoduleutils-file.c:587
+#: app/gwymoduleutils-file.c:581
#, c-format
msgid "Section %s started at line %u before %s ended."
msgstr ""
-#: app/gwymoduleutils-file.c:593
+#: app/gwymoduleutils-file.c:587
#, c-format
msgid "Empty section name at header line %u."
msgstr ""
-#: app/gwymoduleutils-file.c:628
+#: app/gwymoduleutils-file.c:622
#, c-format
msgid "Header line %u lacks prefix %s."
msgstr ""
-#: app/gwymoduleutils-file.c:653
+#: app/gwymoduleutils-file.c:647
#, c-format
msgid "Header line %u lacks key-value separator."
msgstr ""
-#: app/gwymoduleutils-file.c:661
+#: app/gwymoduleutils-file.c:655
#, c-format
msgid "Key at header line %u is empty."
msgstr ""
-#: app/gwymoduleutils-file.c:688
+#: app/gwymoduleutils-file.c:682
#, c-format
msgid "Header suddenly ended at line %u; end of header marker is missing"
msgstr ""
#: app/gwymoduleutils.c:197 app/settings.c:131 app/settings.c:142
#: app/toolbox-spec.c:536 modules/file/err.h:62
+#: modules/pygwy/pygwy-console.c:528
#, c-format
msgid "Cannot write to file: %s."
msgstr "Kann nicht in Datei schreiben: %s."
@@ -2185,8 +2290,9 @@ msgstr "Ursprung"
#: app/gwyplaintool.c:1011 modules/file/rawfile.c:997
#: modules/process/convolution_filter.c:349
-#: modules/process/convolution_filter.c:553 modules/process/neural.c:419
-#: modules/process/obj_synth.c:538 modules/process/pat_synth.c:1449
+#: modules/process/convolution_filter.c:553 modules/process/fibre_synth.c:520
+#: modules/process/neural.c:419 modules/process/obj_synth.c:536
+#: modules/process/pat_synth.c:1450
msgid "Size"
msgstr "Größe"
@@ -2240,7 +2346,7 @@ msgstr ""
msgid "_Close"
msgstr "_Schließen"
-#: app/log.c:615 modules/file/imgexport.c:4168 modules/file/rawfile.c:996
+#: app/log.c:615 modules/file/imgexport.c:4118 modules/file/rawfile.c:996
msgid "Type"
msgstr "Typ"
@@ -2249,8 +2355,8 @@ msgstr "Typ"
msgid "Function"
msgstr "F_unktion:"
-#: app/log.c:617 modules/file/imgexport.c:3117 modules/process/fit-shape.c:465
-#: modules/process/neural.c:610 modules/tools/stats.c:425
+#: app/log.c:617 modules/file/imgexport.c:3128 modules/process/fit-shape.c:466
+#: modules/process/neural.c:614 modules/tools/stats.c:423
msgid "Parameters"
msgstr "Parameter"
@@ -2263,40 +2369,40 @@ msgstr ""
msgid "Export Log"
msgstr "Text exportieren"
-#: app/menu.c:556 app/toolbox.c:581
+#: app/menu.c:555 app/toolbox.c:595
msgid "_Data Process"
msgstr "_Daten aufbereiten"
-#: app/menu.c:598 app/toolbox.c:584
+#: app/menu.c:597 app/toolbox.c:598
msgid "_Graph"
msgstr "_Graph"
-#: app/menu.c:641 app/toolbox.c:587
+#: app/menu.c:640 app/toolbox.c:601
msgid "_Volume Data"
msgstr "_Volumen Daten"
-#: app/menu.c:684 app/toolbox.c:590
+#: app/menu.c:683 app/toolbox.c:604
#, fuzzy
msgid "_XYZ Data"
msgstr "_Daten"
-#: app/menu.c:715
+#: app/menu.c:714
msgid "Re-show Last"
msgstr "Letzte Aktion erneut zeigen"
-#: app/menu.c:730
+#: app/menu.c:729
msgid "Repeat Last"
msgstr "Letzte Aktion wiederholen"
-#: app/menu.c:858
+#: app/menu.c:857
msgid "Repeat"
msgstr "Wiederholen"
-#: app/menu.c:864
+#: app/menu.c:863
msgid "Re-show"
msgstr "Erneut zeigen"
-#: app/menu.c:1186
+#: app/menu.c:1185
msgid "_Document history"
msgstr "_Verlauf"
@@ -2304,8 +2410,8 @@ msgstr "_Verlauf"
msgid "_New"
msgstr "_Neu"
-#: app/meta.c:235 modules/file/imgexport.c:4672 modules/file/rawfile.c:1058
-#: modules/process/neural.c:711 modules/tools/selectionmanager.c:405
+#: app/meta.c:235 modules/file/imgexport.c:4620 modules/file/rawfile.c:1058
+#: modules/process/neural.c:718 modules/tools/selectionmanager.c:405
msgid "_Delete"
msgstr "_Löschen"
@@ -2379,11 +2485,11 @@ msgstr "Kann Benutzer-Konfigurationsverzeichnis nicht anlegen %s: %s"
msgid "Cannot create user module directory %s: %s"
msgstr "Kann Benutzer-Modulverzeichnis nicht anlegen %s: %s"
-#: app/splash.c:832
+#: app/splash.c:1260
msgid "Starting "
msgstr "Starte"
-#: app/splash.c:878
+#: app/splash.c:1313
msgid " is free software released under GNU GPL."
msgstr " ist freie Software, veröffentlicht unter der GNU GPL."
@@ -2789,135 +2895,136 @@ msgstr "_Nächster Tipp"
msgid "_Show tips at startup"
msgstr ""
-#: app/toolbox-editor.c:212
+#: app/toolbox-editor.c:213
#, fuzzy
msgid "Toolbox Editor"
msgstr "Editor"
-#: app/toolbox-editor.c:257
+#: app/toolbox-editor.c:258
#, fuzzy
msgid "_New Item"
msgstr "Neues Element"
-#: app/toolbox-editor.c:262
+#: app/toolbox-editor.c:263
#, fuzzy
msgid "_New Group"
msgstr "Graph"
-#: app/toolbox-editor.c:268 app/toolbox.c:577
+#: app/toolbox-editor.c:269 app/toolbox.c:591
msgid "_Edit"
msgstr "_Bearbeiten"
-#: app/toolbox-editor.c:273 modules/process/fft_filter_2d.c:499
-#: modules/tools/maskedit.c:548 modules/volume/volume_zcal.c:173
+#: app/toolbox-editor.c:274 modules/process/fft_filter_2d.c:499
+#: modules/tools/maskedit.c:554 modules/volume/volume_zcal.c:173
msgid "_Remove"
msgstr "_Entfernen"
-#: app/toolbox-editor.c:278
+#: app/toolbox-editor.c:279
msgid "Move _Up"
msgstr ""
-#: app/toolbox-editor.c:283
+#: app/toolbox-editor.c:284
#, fuzzy
msgid "Move _Down"
msgstr "Runter"
-#: app/toolbox-editor.c:292 modules/file/hdrimage.cc:2304
-#: modules/file/imgexport.c:3101 modules/file/pixmap.c:872
+#: app/toolbox-editor.c:293 modules/file/hdrimage.cc:2304
+#: modules/file/imgexport.c:3114 modules/file/pixmap.c:872
#: modules/file/rawfile.c:658 modules/process/crosscor.c:252
-#: modules/process/dimensions.h:473 modules/process/tip_blind.c:333
+#: modules/process/dimensions.h:455 modules/process/fibre_synth.c:526
+#: modules/process/tip_blind.c:334
msgid "_Width:"
msgstr "_Breite:"
-#: app/toolbox-editor.c:774
+#: app/toolbox-editor.c:787
msgid "Toolbox Group"
msgstr ""
-#: app/toolbox-editor.c:791 modules/file/rawgraph.c:267
+#: app/toolbox-editor.c:804 modules/file/rawgraph.c:267
msgid "_Title:"
msgstr "_Titel:"
-#: app/toolbox-editor.c:805
+#: app/toolbox-editor.c:818
msgid "_Id:"
msgstr ""
-#: app/toolbox-editor.c:818
+#: app/toolbox-editor.c:831
msgid "_Suggest"
msgstr ""
-#: app/toolbox-editor.c:824
+#: app/toolbox-editor.c:837
msgid "Trans_latable title"
msgstr ""
-#: app/toolbox-editor.c:874
+#: app/toolbox-editor.c:887
msgid "Group id is not a valid identifier"
msgstr ""
-#: app/toolbox-editor.c:882
+#: app/toolbox-editor.c:895
msgid "Group id is not unique"
msgstr ""
-#: app/toolbox-editor.c:971
+#: app/toolbox-editor.c:984
msgid "Toolbox Item"
msgstr ""
-#: app/toolbox-editor.c:992 modules/process/coerce.c:331
+#: app/toolbox-editor.c:1005 modules/process/coerce.c:331
#: modules/tools/filter.c:284
msgid "_Type:"
msgstr "_Typ:"
-#: app/toolbox-editor.c:999
+#: app/toolbox-editor.c:1012
msgid "Placeholder"
msgstr ""
-#: app/toolbox-editor.c:1000
+#: app/toolbox-editor.c:1013
msgid "Builtin"
msgstr ""
-#: app/toolbox-editor.c:1001 app/toolbox.c:107
+#: app/toolbox-editor.c:1014 app/toolbox.c:112
msgid "Data Process"
msgstr "Daten aufbereiten"
-#: app/toolbox-editor.c:1003
+#: app/toolbox-editor.c:1016
#, fuzzy
msgid "Volume Data"
msgstr "_Volumen Daten"
-#: app/toolbox-editor.c:1004
+#: app/toolbox-editor.c:1017
#, fuzzy
msgid "XYZ Data"
msgstr "_Daten"
-#: app/toolbox-editor.c:1005
+#: app/toolbox-editor.c:1018
#, fuzzy
msgid "Tool"
msgstr "Werkzeuge"
-#: app/toolbox-editor.c:1012
+#: app/toolbox-editor.c:1025 modules/tools/profile.c:483
#, fuzzy
msgid "_Mode:"
msgstr "Modus:"
-#: app/toolbox-editor.c:1019 app/toolbox-editor.c:1038
+#: app/toolbox-editor.c:1032 app/toolbox-editor.c:1051
#, fuzzy
msgid "Default"
msgstr "_Standard"
-#: app/toolbox-editor.c:1020
+#: app/toolbox-editor.c:1033
#, fuzzy
msgid "Interactive"
msgstr "Interpolationstyp:"
-#: app/toolbox-editor.c:1021
+#: app/toolbox-editor.c:1034
#, fuzzy
msgid "Non-interactive"
msgstr "Negativ"
-#: app/toolbox-editor.c:1029
+#: app/toolbox-editor.c:1042
msgid "Use _icon from:"
msgstr ""
-#: app/toolbox-editor.c:1063
+#: app/toolbox-editor.c:1076
#, fuzzy
msgid "Functions"
msgstr "F_unktion:"
@@ -2935,145 +3042,164 @@ msgstr "Fit-Modus"
msgid "All tools not placed explicitly go here."
msgstr ""
-#: app/toolbox.c:106
+#: app/toolbox.c:111
msgid "View"
msgstr "Ansicht"
-#: app/toolbox.c:109
+#: app/toolbox.c:114
msgid "Tools"
msgstr "Werkzeuge"
-#: app/toolbox.c:575
+#: app/toolbox.c:589
msgid "_File"
msgstr "_Datei"
-#: app/toolbox.c:593
+#: app/toolbox.c:607
#, fuzzy
msgid "_Info"
msgstr "Info"
-#: app/toolbox.c:663
+#: app/toolbox.c:696
msgid "Display a 3D view of data"
msgstr "3D-Ansicht der Daten anzeigen"
-#: app/toolbox.c:667
+#: app/toolbox.c:700
+#, fuzzy
+msgid "Undo"
+msgstr "_Rückgängig"
+
+#: app/toolbox.c:700
+#, fuzzy
+msgid "Undo last action"
+msgstr "Ebenen-Fit Modus"
+
+#: app/toolbox.c:704
+#, fuzzy
+msgid "Redo"
+msgstr "/_Wiederholen"
+
+#: app/toolbox.c:704
+msgid "Redo again last undone action"
+msgstr ""
+
+#: app/toolbox.c:708
msgid "Zoom in"
msgstr "Hereinzoomen"
-#: app/toolbox.c:671
+#: app/toolbox.c:712
msgid "Zoom out"
msgstr "Herauszoomen"
-#: app/toolbox.c:675
+#: app/toolbox.c:716
msgid "Zoom 1:1"
msgstr "Zoom 1:1"
-#: app/toolbox.c:722
+#: app/toolbox.c:781
msgid "/Show _Data Browser"
msgstr "/_Daten-Browser"
-#: app/toolbox.c:730
+#: app/toolbox.c:789
msgid "/Module _Browser"
msgstr "/Modul-_Browser"
-#: app/toolbox.c:738
+#: app/toolbox.c:797
msgid "/Program _Messages"
msgstr ""
-#: app/toolbox.c:753
+#: app/toolbox.c:812
msgid "/_User Guide"
msgstr ""
-#: app/toolbox.c:761
+#: app/toolbox.c:820
msgid "/_Tip of the Day"
msgstr "/_Tipp des Tages"
-#: app/toolbox.c:769
+#: app/toolbox.c:828
msgid "/_About Gwyddion"
msgstr "/_Über Gwyddion"
-#: app/toolbox.c:806
+#: app/toolbox.c:865
msgid "/_Open..."
msgstr "/_Öffnen..."
-#: app/toolbox.c:814
+#: app/toolbox.c:873
msgid "/_Merge..."
msgstr "/Zusa_mmenführen..."
-#: app/toolbox.c:822
+#: app/toolbox.c:881
msgid "/Open _Recent"
msgstr "/_Zuletzt geöffnet"
-#: app/toolbox.c:830
+#: app/toolbox.c:889
msgid "/_Save"
msgstr "/_Speichern"
-#: app/toolbox.c:838
+#: app/toolbox.c:897
msgid "/Save _As..."
msgstr "/Speichern _unter..."
-#: app/toolbox.c:846
+#: app/toolbox.c:905
#, fuzzy
msgid "/_Close"
msgstr "_Schließen"
-#: app/toolbox.c:854
+#: app/toolbox.c:913
msgid "/Remo_ve All Logs"
msgstr "/Alle Protokolle _entfernen"
-#: app/toolbox.c:870
+#: app/toolbox.c:929
msgid "/_Quit"
msgstr "/_Beenden"
-#: app/toolbox.c:910
+#: app/toolbox.c:969
msgid "/_Undo"
msgstr "/_Rückgängig"
-#: app/toolbox.c:918
+#: app/toolbox.c:977
msgid "/_Redo"
msgstr "/_Wiederholen"
-#: app/toolbox.c:934
+#: app/toolbox.c:993
msgid "/Default Mask _Color..."
msgstr "/Standard-Masken_farbe..."
-#: app/toolbox.c:942
+#: app/toolbox.c:1001
msgid "/Color _Gradients..."
msgstr "/Farb-_Gradienten..."
-#: app/toolbox.c:950
+#: app/toolbox.c:1009
msgid "/G_L Materials..."
msgstr "/G_L-Materialien..."
-#: app/toolbox.c:958
+#: app/toolbox.c:1017
msgid "/_Toolbox..."
msgstr ""
-#: app/toolbox.c:966
+#: app/toolbox.c:1025
msgid "/_Keyboard Shortcuts"
msgstr "/Tasten_kürzel"
-#: app/toolbox.c:974
+#: app/toolbox.c:1033
msgid "/_Logging Enabled"
msgstr "/_Protokollierung aktiviert"
-#: app/toolbox.c:1083
+#: app/toolbox.c:1142
msgid "Program Messages"
msgstr ""
-#: app/toolbox.c:1320
+#: app/toolbox.c:1379
msgid "Change Default Mask Color"
msgstr "Standard-Maskenfarbe ändern"
-#: app/toolbox.c:1348
+#: app/toolbox.c:1407
msgid "OpenGL 3D graphics not available"
msgstr "OpenGL 3D-Grafiken nicht verfügbar"
-#: app/toolbox.c:1353
+#: app/toolbox.c:1412
msgid "OpenGL was disabled with a command-line option."
msgstr "OpenGL wurde mit einem Kommandozeilen-Parameter deaktiviert."
-#: app/toolbox.c:1361
+#: app/toolbox.c:1420
msgid ""
"Initialization of OpenGL failed. Check output of <tt>glxinfo</tt> and "
"warning messages printed to console during Gwyddion startup."
@@ -3082,7 +3208,7 @@ msgstr ""
"<tt>glxinfo</tt> sowie Warnmeldungen auf der Konsole während des "
"Startvorgangs von Gwyddion."
-#: app/toolbox.c:1368
+#: app/toolbox.c:1427
msgid "This version of Gwyddion was built without OpenGL support."
msgstr "Diese Version von Gwyddion wurde ohne OpenGL-Unterstützung erstellt."
@@ -3159,7 +3285,7 @@ msgstr ""
msgid "Secondary data item has no primary data"
msgstr ""
-#: app/wait.c:106
+#: app/wait.c:114
msgid "Please wait"
msgstr "Bitte warten"
@@ -3178,11 +3304,11 @@ msgstr "MicroProf FRT-Textdateien (.txt)."
msgid "File header cannot be converted from ISO-8859-1 character set: %s"
msgstr ""
-#: modules/file/aistfile.c:127
+#: modules/file/aistfile.c:123
msgid "Imports AIST-NT data files."
msgstr "Importiert AIST-NT-Dateien."
-#: modules/file/aistfile.c:140
+#: modules/file/aistfile.c:136
msgid "AIST-NT files (.aist)"
msgstr "AIST-NT-Dateien (.aist)"
@@ -3231,7 +3357,8 @@ msgstr ""
#: modules/file/alicona.c:665 modules/file/gdeffile.c:175
#: modules/file/gdeffile.c:199 modules/file/gsffile.c:159
-#: modules/file/gxyzffile.c:199 modules/file/iso28600.c:1038
+#: modules/file/gxyzffile.c:199 modules/file/iso28600.c:1174
+#: modules/file/microprof.c:361 modules/file/microprof.c:375
#: modules/file/pt3file.c:489 modules/file/pt3file.c:591
msgid "File header is truncated."
msgstr ""
@@ -3245,11 +3372,11 @@ msgstr ""
msgid "Comment is not nul-terminated."
msgstr "Der T2-Messungs-Modus ist nicht implementiert."
-#: modules/file/ambfile.c:84
+#: modules/file/ambfile.c:83
msgid "Imports Ambios AMB data files."
msgstr "Importiert Ambios AMB-Dateien."
-#: modules/file/ambfile.c:97
+#: modules/file/ambfile.c:96
msgid "Ambios amb files (.amb)"
msgstr "Ambios AMB-Dateien (.amb)"
@@ -3281,12 +3408,12 @@ msgstr ""
msgid "FileDescBegin has no corresponding FileDescEnd."
msgstr ""
-#: modules/file/apedaxfile.c:259
+#: modules/file/apedaxfile.c:261
#, fuzzy
msgid "Imports A.P.E. Research DAX data files."
msgstr "Importiert LEXT-Dateien."
-#: modules/file/apedaxfile.c:274
+#: modules/file/apedaxfile.c:276
#, fuzzy
msgid "A.P.E. Research DAX Files (.dax) and APDT File (.apdt)"
msgstr "Importiert LEXT-Dateien."
@@ -3315,7 +3442,7 @@ msgstr "Breite:"
msgid "Height:"
msgstr "Höhe:"
-#: modules/file/asciiexport.c:220 modules/file/xyzexport.c:248
+#: modules/file/asciiexport.c:220 modules/file/xyzexport.c:251
msgid "Value units:"
msgstr ""
@@ -3324,30 +3451,30 @@ msgid "Export Text"
msgstr "Text exportieren"
#: modules/file/asciiexport.c:275 modules/file/gxyzffile.c:402
-#: modules/file/imgexport.c:3565 modules/file/imgexport.c:4203
-#: modules/file/rawfile.c:758 modules/file/xyzexport.c:311
-#: modules/process/calibrate.c:607 modules/process/coerce.c:364
-#: modules/process/col_synth.c:516 modules/process/correct_affine.c:470
-#: modules/process/extend.c:259 modules/process/fft_filter_1d.c:261
-#: modules/process/grain_dist.c:306 modules/process/grain_edge.c:255
-#: modules/process/grain_mark.c:338 modules/process/grain_wshed.c:252
-#: modules/process/linematch.c:852 modules/process/mark_disconn.c:279
-#: modules/process/slope_dist.c:367 modules/process/tip_blind.c:357
+#: modules/file/imgexport.c:3532 modules/file/imgexport.c:4151
+#: modules/file/rawfile.c:758 modules/file/xyzexport.c:314
+#: modules/process/calibrate.c:561 modules/process/coerce.c:363
+#: modules/process/col_synth.c:516 modules/process/correct_affine.c:520
+#: modules/process/extend.c:259 modules/process/fft_filter_1d.c:263
+#: modules/process/grain_dist.c:307 modules/process/grain_edge.c:254
+#: modules/process/grain_mark.c:335 modules/process/grain_wshed.c:256
+#: modules/process/linematch.c:819 modules/process/mark_disconn.c:280
+#: modules/process/slope_dist.c:359 modules/process/tip_blind.c:360
#: modules/process/wpour_mark.c:354 modules/tools/spotremove.c:322
-#: modules/tools/stats.c:402 modules/xyz/xyz_raster.c:628
+#: modules/tools/stats.c:401 modules/xyz/xyz_raster.c:597
msgid "Options"
msgstr "Optionen"
-#: modules/file/asciiexport.c:278 modules/file/xyzexport.c:314
+#: modules/file/asciiexport.c:278 modules/file/xyzexport.c:317
msgid "Use _dot as decimal separator"
msgstr ""
-#: modules/file/asciiexport.c:285 modules/file/xyzexport.c:321
-#: modules/process/grain_dist.c:317
+#: modules/file/asciiexport.c:285 modules/file/xyzexport.c:324
+#: modules/process/grain_dist.c:318
msgid "Add _informational comment header"
msgstr ""
-#: modules/file/asciiexport.c:294 modules/file/xyzexport.c:330
+#: modules/file/asciiexport.c:294 modules/file/xyzexport.c:333
#, fuzzy
msgid "_Precision:"
msgstr "_Genauigkeit:"
@@ -3368,20 +3495,20 @@ msgstr "Importiert Attocube Systems ASC-Dateien."
msgid "Attocube ASCII files (.asc)"
msgstr "Attocube ASCII-Dateien (.asc)"
-#: modules/file/bcrfile.c:146
+#: modules/file/bcrfile.c:141
msgid "Imports Image Metrology BCR data files."
msgstr "Importiert Image Metrology BCR-Dateien."
-#: modules/file/bcrfile.c:159
+#: modules/file/bcrfile.c:154
msgid "BCR files (.bcr, .bcrf)"
msgstr "BCR-Dateien (.bcr, .bcrf)"
-#: modules/file/bcrfile.c:238
+#: modules/file/bcrfile.c:233
#, c-format
msgid "File header is not convertible from UTF-16: %s"
msgstr ""
-#: modules/file/bcrfile.c:351
+#: modules/file/bcrfile.c:346
#, c-format
msgid "Unknown file type header: `%s'."
msgstr "Unbekannte Dateityp-Kopfzeile: `%s'."
@@ -3416,7 +3543,7 @@ msgid "Burleigh exported data (.txt, .bin)"
msgstr ""
#: modules/file/burleigh_exp.c:226 modules/file/burleigh_exp.c:267
-#: modules/file/nanoscope.c:1605 modules/file/omicron.c:416
+#: modules/file/nanoscope.c:1612 modules/file/omicron.c:416
#: modules/file/shimadzu.c:468
msgid "Missing colon in header line."
msgstr ""
@@ -3466,24 +3593,44 @@ msgstr "Importiert Benyuan CSM-Dateien."
msgid "Benyuan CSM files (.csm)"
msgstr "Benyuan CSM-Dateien (.csm)"
-#: modules/file/dektakxml.c:138
+#: modules/file/dektakvca.c:197
+#, fuzzy
+msgid "Imports Dektak OPDx data files."
+msgstr "Importiert DME MIF-Dateien."
+
+#: modules/file/dektakvca.c:210
+#, fuzzy
+msgid "Dektak OPDx data files (.OPDx)"
+msgstr "NanoScan XML-Dateien (.xml)"
+
+#: modules/file/dektakvca.c:655
+#, c-format
+msgid "Item `%s' has unexpected type %u instead of %u."
+msgstr ""
+
+#: modules/file/dektakvca.c:1022
+#, c-format
+msgid "Truncated data inside item %s."
+msgstr ""
+
+#: modules/file/dektakxml.c:118
#, fuzzy
msgid "Imports Dektak XML data files."
msgstr "Importiert DME MIF-Dateien."
-#: modules/file/dektakxml.c:151
+#: modules/file/dektakxml.c:131
#, fuzzy
msgid "Dektak XML data files (.xml)"
msgstr "NanoScan XML-Dateien (.xml)"
-#: modules/file/dektakxml.c:228 modules/file/lextfile.c:260
-#: modules/file/nanoscan.c:267 modules/file/ometiff.c:265
+#: modules/file/dektakxml.c:208 modules/file/lextfile.c:260
+#: modules/file/nanoscan.c:270 modules/file/ometiff.c:265
#, c-format
msgid "XML parsing failed: %s"
msgstr ""
-#: modules/file/dektakxml.c:400 modules/file/lextfile.c:163
-#: modules/file/nanoscan.c:672 modules/file/ometiff.c:445
+#: modules/file/dektakxml.c:373 modules/file/lextfile.c:163
+#: modules/file/nanoscan.c:698 modules/file/ometiff.c:445
#, c-format
msgid "Top-level element is not ‘%s’."
msgstr ""
@@ -3600,7 +3747,7 @@ msgid "Scan size header field overlaps with data."
msgstr "Kopfzeilen-Feld der Scangröße überlappt mit Daten."
#: modules/file/err.h:48 modules/file/nrrdfile.c:779
-#: modules/file/nrrdfile.c:824
+#: modules/file/nrrdfile.c:824 modules/pygwy/pygwy-console.c:504
#, fuzzy, c-format
msgid "Cannot read from file: %s."
msgstr "Kann nicht in Datei schreiben: %s."
@@ -3823,32 +3970,32 @@ msgid ""
"Data deserialization succeeded, but resulted in an unexpected object %s."
msgstr ""
-#: modules/file/gwytiff.h:332
+#: modules/file/gwytiff.h:335
#, c-format
msgid "BigTIFF reserved fields are %u and %u instead of 8 and 0."
msgstr ""
-#: modules/file/gwytiff.h:349 modules/file/gwytiff.h:366
+#: modules/file/gwytiff.h:352 modules/file/gwytiff.h:369
#, c-format
msgid "TIFF directory %lu ended unexpectedly."
msgstr ""
-#: modules/file/gwytiff.h:484
+#: modules/file/gwytiff.h:487
#, c-format
msgid "BigTIFF data type %u was found in a classic TIFF."
msgstr ""
-#: modules/file/gwytiff.h:501
+#: modules/file/gwytiff.h:504
msgid "Invalid tag data positions were found."
msgstr ""
-#: modules/file/gwytiff.h:874 modules/file/gwytiff.h:889
-#: modules/file/gwytiff.h:1012 modules/file/gwytiff.h:1019
+#: modules/file/gwytiff.h:877 modules/file/gwytiff.h:892
+#: modules/file/gwytiff.h:1015 modules/file/gwytiff.h:1022
#, c-format
msgid "Required tag %u was not found."
msgstr ""
-#: modules/file/gwytiff.h:942 modules/file/gwytiff.h:986
+#: modules/file/gwytiff.h:945 modules/file/gwytiff.h:989
#: modules/file/keyence.c:449 modules/file/matfile.c:276
#: modules/file/matfile.c:298 modules/file/omicronflat.c:1962
#: modules/file/princetonspe.c:339 modules/file/psia.c:352
@@ -3856,21 +4003,21 @@ msgstr ""
msgid "File is truncated."
msgstr ""
-#: modules/file/gwytiff.h:1044
+#: modules/file/gwytiff.h:1047
msgid "Non-uniform bits per sample are unsupported."
msgstr ""
-#: modules/file/gwytiff.h:1071
+#: modules/file/gwytiff.h:1074 modules/file/zeisslsm.c:973
#, c-format
msgid "Compression type %u is not supported."
msgstr ""
-#: modules/file/gwytiff.h:1077
+#: modules/file/gwytiff.h:1080
#, c-format
msgid "Planar configuration %u is not supported."
msgstr ""
-#: modules/file/gwytiff.h:1101
+#: modules/file/gwytiff.h:1104
msgid "Unsupported sample format"
msgstr ""
@@ -3911,7 +4058,7 @@ msgstr "X-Fehler %d"
msgid "Minizip error while reading the zip file: %s (%d)."
msgstr ""
-#: modules/file/gwyzip.h:248
+#: modules/file/gwyzip.h:248 modules/file/jpkscan.c:2776
#, c-format
msgid "File %s is missing in the zip file."
msgstr ""
@@ -3951,8 +4098,8 @@ msgstr ""
msgid "Export GXYZF"
msgstr "Text exportieren"
-#: modules/file/gxyzffile.c:395 modules/file/xyzexport.c:238
-#: modules/file/xyzexport.c:304
+#: modules/file/gxyzffile.c:395 modules/file/xyzexport.c:241
+#: modules/file/xyzexport.c:307
#, fuzzy
msgid "XYZ data:"
msgstr "XYZ-Dateien"
@@ -4045,11 +4192,13 @@ msgstr "_Skala:"
msgid "Representable"
msgstr ""
-#: modules/file/hdrimage.cc:480 modules/tools/stats.c:203
+#: modules/file/hdrimage.cc:480 modules/graph/graph_stats.c:146
+#: modules/tools/stats.c:203
msgid "Minimum:"
msgstr "Minimum:"
-#: modules/file/hdrimage.cc:496 modules/tools/stats.c:204
+#: modules/file/hdrimage.cc:496 modules/graph/graph_stats.c:147
+#: modules/tools/stats.c:204
msgid "Maximum:"
msgstr "Maximum:"
@@ -4068,12 +4217,12 @@ msgid "OpenEXR data type %u is invalid or unsupported."
msgstr "Der Datentyp %d ist ungültig oder wird nicht unterstützt."
#: modules/file/hdrimage.cc:1433 modules/file/hdrimage.cc:1442
-#: modules/file/imgexport.c:5249 modules/file/imgexport.c:5260
+#: modules/file/imgexport.c:5198 modules/file/imgexport.c:5209
#, c-format
msgid "libpng initialization error (in %s)"
msgstr ""
-#: modules/file/hdrimage.cc:1451 modules/file/imgexport.c:5324
+#: modules/file/hdrimage.cc:1451 modules/file/imgexport.c:5273
msgid "libpng error occurred"
msgstr ""
@@ -4091,11 +4240,6 @@ msgstr "Bildinformation"
msgid "Horizontal size:"
msgstr "Horizontale Größe:"
-#: modules/file/hdrimage.cc:2246 modules/file/hdrimage.cc:2252
-#: modules/file/pixmap.c:820 modules/file/pixmap.c:826
-msgid "px"
-msgstr "px"
-
#: modules/file/hdrimage.cc:2252 modules/file/pixmap.c:826
msgid "Vertical size:"
msgstr "Vertikale Größe:"
@@ -4108,10 +4252,10 @@ msgstr "Kanäle:"
msgid "Pages:"
msgstr ""
-#: modules/file/hdrimage.cc:2290 modules/file/imgexport.c:3043
+#: modules/file/hdrimage.cc:2290 modules/file/imgexport.c:3059
#: modules/file/pixmap.c:862 modules/file/rawfile.c:649
-#: modules/process/dimensions.h:467 modules/xyz/xyz_drift.c:774
-#: modules/xyz/xyz_raster.c:566
+#: modules/process/dimensions.h:449 modules/xyz/xyz_drift.c:774
+#: modules/xyz/xyz_raster.c:535
msgid "Physical Dimensions"
msgstr "Physische Abmessungen"
@@ -4121,16 +4265,16 @@ msgstr "Physische Abmessungen"
#: modules/process/calcoefs_new.c:408 modules/process/calcoefs_new.c:475
#: modules/process/calcoefs_simple.c:391 modules/process/calcoefs_simple.c:458
#: modules/process/calcoefs_view.c:511 modules/process/calcoefs_view.c:549
-#: modules/process/calibrate.c:466 modules/process/calibrate.c:549
-#: modules/process/dimensions.h:161 modules/process/volumize_layers.c:259
-#: modules/volume/volume_calibrate.c:414 modules/volume/volume_calibrate.c:441
-#: modules/volume/volume_calibrate.c:468 modules/volume/volume_calibrate.c:546
+#: modules/process/calibrate.c:459 modules/process/calibrate.c:514
+#: modules/process/dimensions.h:143 modules/process/volumize_layers.c:259
+#: modules/volume/volume_calibrate.c:409 modules/volume/volume_calibrate.c:429
+#: modules/volume/volume_calibrate.c:449 modules/volume/volume_calibrate.c:498
msgid "verb|Change"
msgstr "Ändern"
#: modules/file/hdrimage.cc:2345 modules/file/pixmap.c:907
-#: modules/file/rawfile.c:694 modules/process/crosscor.c:263
-#: modules/process/dimensions.h:477
+#: modules/file/rawfile.c:694 modules/process/crosscor.c:260
+#: modules/process/dimensions.h:459
msgid "H_eight:"
msgstr "H_öhe:"
@@ -4147,16 +4291,16 @@ msgstr "_Z-Skalierung (pro Abtast-Einheit):"
#: modules/file/hdrimage.cc:2557 modules/file/pixmap.c:1176
#: modules/file/rawfile.c:1386 modules/process/calcoefs_new.c:819
#: modules/process/calcoefs_simple.c:1197 modules/process/calcoefs_view.c:1380
-#: modules/process/calibrate.c:979 modules/process/dimensions.h:195
-#: modules/process/volumize_layers.c:315 modules/volume/volume_calibrate.c:1017
+#: modules/process/calibrate.c:1013 modules/process/dimensions.h:177
+#: modules/process/volumize_layers.c:314 modules/volume/volume_calibrate.c:957
msgid "Change Units"
msgstr "Einheiten ändern"
#: modules/file/hdrimage.cc:2571 modules/file/pixmap.c:1190
#: modules/file/rawfile.c:1400 modules/process/calcoefs_new.c:832
#: modules/process/calcoefs_simple.c:1210 modules/process/calcoefs_view.c:1393
-#: modules/process/calibrate.c:993 modules/process/dimensions.h:208
-#: modules/process/volumize_layers.c:329 modules/volume/volume_calibrate.c:1031
+#: modules/process/calibrate.c:1027 modules/process/dimensions.h:190
+#: modules/process/volumize_layers.c:328 modules/volume/volume_calibrate.c:971
#, fuzzy
msgid "New _units:"
msgstr "Neue _Einheiten:"
@@ -4203,199 +4347,200 @@ msgstr "Kann nicht in Datei schreiben: %s."
msgid "Field DataSize %ux%u does not match image dimensions %ux%u."
msgstr ""
-#: modules/file/igorfile.c:200
+#: modules/file/igorfile.c:210
msgid "Imports Igor binary waves (.ibw)."
msgstr "Importiert \"Igor Binary Waves\" (.ibw)"
-#: modules/file/igorfile.c:213
+#: modules/file/igorfile.c:223
msgid "Igor binary waves (.ibw)"
msgstr "Igor Binary Waves (.ibw)"
-#: modules/file/igorfile.c:273
+#: modules/file/igorfile.c:283
#, fuzzy, c-format
msgid "Format version is %d. Only version 5 is supported."
msgstr "Das Dateiformat der Version %d. Nur Version5 wird unterstützt."
-#: modules/file/igorfile.c:294
+#: modules/file/igorfile.c:305
msgid "Only two-dimensional data are supported."
msgstr "Nur zweidimensionale Daten werden unterstützt."
-#: modules/file/igorfile.c:306
+#: modules/file/igorfile.c:317
#, c-format
msgid "Number of data points %u does not match resolutions %u×%u×%u."
msgstr ""
-#: modules/file/igorfile.c:320
+#: modules/file/igorfile.c:331
#, c-format
msgid "Data size %u does not match the number of data points %u×%u."
msgstr ""
-#: modules/file/igorfile.c:358
+#: modules/file/igorfile.c:369
msgid "Cannot read channel labels."
msgstr ""
-#: modules/file/imgexport.c:392 modules/file/pixmap.c:178
+#: modules/file/imgexport.c:391 modules/file/pixmap.c:178
msgid "Portable Network Graphics (.png)"
msgstr "Portable Network Graphics (.png)"
-#: modules/file/imgexport.c:398 modules/file/pixmap.c:182
+#: modules/file/imgexport.c:397 modules/file/pixmap.c:182
msgid "JPEG (.jpeg,.jpg)"
msgstr "JPEG (.jpeg,.jpg)"
-#: modules/file/imgexport.c:404 modules/file/pixmap.c:186
+#: modules/file/imgexport.c:403 modules/file/pixmap.c:186
msgid "TIFF (.tiff,.tif)"
msgstr "TIFF (.tiff,.tif)"
-#: modules/file/imgexport.c:410 modules/file/pixmap.c:190
+#: modules/file/imgexport.c:409 modules/file/pixmap.c:190
msgid "Portable Pixmap (.ppm,.pnm)"
msgstr "Portable Pixmap (.ppm,.pnm)"
-#: modules/file/imgexport.c:416 modules/file/pixmap.c:194
+#: modules/file/imgexport.c:415 modules/file/pixmap.c:194
msgid "Windows or OS2 Bitmap (.bmp)"
msgstr "Windows- oder OS2-Bitmap (.bmp)"
-#: modules/file/imgexport.c:422 modules/file/pixmap.c:198
+#: modules/file/imgexport.c:421 modules/file/pixmap.c:198
msgid "TARGA (.tga,.targa)"
msgstr "TARGA (.tga,.targa)"
-#: modules/file/imgexport.c:429
+#: modules/file/imgexport.c:428
msgid "WebP (.webp)"
msgstr ""
-#: modules/file/imgexport.c:437
+#: modules/file/imgexport.c:436
#, fuzzy
msgid "Portable document format (.pdf)"
msgstr "Portable Network Graphics (.png)"
-#: modules/file/imgexport.c:445
+#: modules/file/imgexport.c:444
msgid "Encapsulated PostScript (.eps)"
msgstr ""
-#: modules/file/imgexport.c:453
+#: modules/file/imgexport.c:452
#, fuzzy
msgid "Scalable Vector Graphics (.svg)"
msgstr "Portable Network Graphics (.png)"
-#: modules/file/imgexport.c:463 modules/tools/selectionmanager.c:269
+#: modules/file/imgexport.c:462 modules/tools/selectionmanager.c:269
#, fuzzy
msgid "Horiz./vert. lines"
msgstr "Drift-_Linien"
-#: modules/file/imgexport.c:467 modules/tools/selectionmanager.c:270
+#: modules/file/imgexport.c:466 modules/tools/selectionmanager.c:270
msgid "Ellipses"
msgstr "Ellipsen"
-#: modules/file/imgexport.c:471 modules/tools/selectionmanager.c:272
+#: modules/file/imgexport.c:470 modules/tools/selectionmanager.c:272
msgid "Lines"
msgstr "Linien"
-#: modules/file/imgexport.c:479 modules/tools/selectionmanager.c:275
+#: modules/file/imgexport.c:478 modules/tools/selectionmanager.c:275
msgid "Rectangles"
msgstr "Rechtecke"
-#: modules/file/imgexport.c:483 modules/process/lat_synth.c:565
+#: modules/file/imgexport.c:482 modules/process/lat_synth.c:565
#: modules/process/lat_synth.c:637 modules/tools/selectionmanager.c:271
#, fuzzy
msgid "Lattice"
msgstr "_Linientyp:"
-#: modules/file/imgexport.c:487
+#: modules/file/imgexport.c:486
msgid "Path"
msgstr ""
-#: modules/file/imgexport.c:493 modules/file/imgexport.c:499
+#: modules/file/imgexport.c:492 modules/file/imgexport.c:498
#, fuzzy
msgid "ruler|_None"
msgstr "_Keine"
-#: modules/file/imgexport.c:494
+#: modules/file/imgexport.c:493
msgid "_Rulers"
msgstr ""
-#: modules/file/imgexport.c:495
+#: modules/file/imgexport.c:494
msgid "_Inset scale bar"
msgstr ""
-#: modules/file/imgexport.c:500
+#: modules/file/imgexport.c:499
msgid "_False color ruler"
msgstr ""
-#: modules/file/imgexport.c:504
+#: modules/file/imgexport.c:503
#, fuzzy
msgid "title|None"
msgstr "_Keine"
-#: modules/file/imgexport.c:505
+#: modules/file/imgexport.c:504
msgid "At the top"
msgstr ""
-#: modules/file/imgexport.c:506
+#: modules/file/imgexport.c:505
msgid "Along the right edge"
msgstr ""
-#: modules/file/imgexport.c:512
+#: modules/file/imgexport.c:511
msgid ""
"Renders data into vector (SVG, PDF, EPS) and pixmap (PNG, JPEG, TIFF, WebP, "
"PPM, BMP, TARGA) images. Export to some formats relies on GDK and other "
"libraries thus may be installation-dependent."
msgstr ""
-#: modules/file/imgexport.c:2931
+#: modules/file/imgexport.c:2933
#, fuzzy
msgid "Select Color"
msgstr "Kurvenfarbe setzen"
-#: modules/file/imgexport.c:3002
+#: modules/file/imgexport.c:3005
+msgid "White"
+msgstr ""
+
+#: modules/file/imgexport.c:3014
#, fuzzy
msgid "Black"
msgstr "Blackman"
-#: modules/file/imgexport.c:3010
-msgid "White"
-msgstr ""
-
-#: modules/file/imgexport.c:3053
+#: modules/file/imgexport.c:3069
#, fuzzy
msgid "Pi_xel size:"
msgstr "_Punktgröße:"
-#: modules/file/imgexport.c:3062
+#: modules/file/imgexport.c:3077
msgid "Pixels per _inch:"
msgstr ""
-#: modules/file/imgexport.c:3089
+#: modules/file/imgexport.c:3102
msgid "_Zoom:"
msgstr "_Zoom:"
-#: modules/file/imgexport.c:3108 modules/process/bdep_synth.c:430
+#: modules/file/imgexport.c:3120 modules/process/bdep_synth.c:430
#: modules/process/col_synth.c:486 modules/process/diff_synth.c:508
-#: modules/process/domain_synth.c:510 modules/process/grain_mark.c:285
-#: modules/process/lat_synth.c:753 modules/process/obj_synth.c:575
-#: modules/process/pat_synth.c:852 modules/process/pat_synth.c:1154
-#: modules/process/pat_synth.c:1489 modules/process/tip_blind.c:340
+#: modules/process/domain_synth.c:510 modules/process/fibre_synth.c:540
+#: modules/process/grain_mark.c:284 modules/process/lat_synth.c:753
+#: modules/process/obj_synth.c:573 modules/process/pat_synth.c:853
+#: modules/process/pat_synth.c:1155 modules/process/pat_synth.c:1490
+#: modules/process/phase_synth.c:298 modules/process/tip_blind.c:342
msgid "_Height:"
msgstr "_Höhe:"
-#: modules/file/imgexport.c:3121
+#: modules/file/imgexport.c:3136
#, fuzzy
msgid "_Font:"
msgstr "Schri_ftgröße:"
-#: modules/file/imgexport.c:3140
+#: modules/file/imgexport.c:3145
msgid "_Font size:"
msgstr "Schri_ftgröße:"
-#: modules/file/imgexport.c:3160
+#: modules/file/imgexport.c:3163
#, fuzzy
msgid "O_utline thickness:"
msgstr "Linien_dicke:"
-#: modules/file/imgexport.c:3170
+#: modules/file/imgexport.c:3172
#, fuzzy
msgid "_Border width:"
msgstr "S_teigung:"
-#: modules/file/imgexport.c:3180
+#: modules/file/imgexport.c:3181
#, fuzzy
msgid "_Tick length:"
msgstr "_Länge:"
@@ -4417,245 +4562,246 @@ msgstr "Farbe"
msgid "_Line and text color:"
msgstr ""
-#: modules/file/imgexport.c:3221
+#: modules/file/imgexport.c:3220
#, fuzzy
msgid "_Transparent background"
msgstr "Untergrund e_xtrahieren"
-#: modules/file/imgexport.c:3232
+#: modules/file/imgexport.c:3231
#, fuzzy
msgid "_Background color:"
msgstr "Untergrund"
-#: modules/file/imgexport.c:3474
-#, fuzzy
-msgid "Lateral scale"
-msgstr "_Laterale Skala:"
-
-#: modules/file/imgexport.c:3487 modules/process/lno_synth.c:1053
-msgid "_Length:"
-msgstr "_Länge:"
-
-#: modules/file/imgexport.c:3503
-msgid "_Auto"
-msgstr "_Auto"
-
-#: modules/file/imgexport.c:3511 modules/process/pat_synth.c:469
+#: modules/file/imgexport.c:3433 modules/process/fibre_synth.c:582
+#: modules/process/pat_synth.c:470
msgid "Placement"
msgstr ""
-#: modules/file/imgexport.c:3515
+#: modules/file/imgexport.c:3437
#, fuzzy
msgid "left"
msgstr "Links"
-#: modules/file/imgexport.c:3519
+#: modules/file/imgexport.c:3440
#, fuzzy
msgid "center"
msgstr "Mitte"
-#: modules/file/imgexport.c:3523
+#: modules/file/imgexport.c:3443
#, fuzzy
msgid "right"
msgstr "Rechts"
-#: modules/file/imgexport.c:3528
+#: modules/file/imgexport.c:3448
msgid "top"
msgstr ""
-#: modules/file/imgexport.c:3540
+#: modules/file/imgexport.c:3456
msgid "bottom"
msgstr ""
-#: modules/file/imgexport.c:3552 modules/file/imgexport.c:3874
+#: modules/file/imgexport.c:3479
+#, fuzzy
+msgid "Lateral scale"
+msgstr "_Laterale Skala:"
+
+#: modules/file/imgexport.c:3496 modules/process/lno_synth.c:1053
+msgid "_Length:"
+msgstr "_Länge:"
+
+#: modules/file/imgexport.c:3502
+msgid "_Auto"
+msgstr "_Auto"
+
+#: modules/file/imgexport.c:3519 modules/file/imgexport.c:3832
#, fuzzy
msgid "Hori_zontal gap:"
msgstr "Horizontal"
-#: modules/file/imgexport.c:3558 modules/file/imgexport.c:3854
+#: modules/file/imgexport.c:3526 modules/file/imgexport.c:3812
#, fuzzy
msgid "_Vertical gap:"
msgstr "_Vertikal:"
-#: modules/file/imgexport.c:3571 modules/file/imgexport.c:4184
+#: modules/file/imgexport.c:3538 modules/file/imgexport.c:4134
#, fuzzy
msgid "Colo_r:"
msgstr "Farbe:"
-#: modules/file/imgexport.c:3576 modules/file/imgexport.c:4189
+#: modules/file/imgexport.c:3542 modules/file/imgexport.c:4138
msgid "Out_line color:"
msgstr ""
-#: modules/file/imgexport.c:3580 modules/file/imgexport.c:4195
+#: modules/file/imgexport.c:3547 modules/file/imgexport.c:4143
#, fuzzy
msgid "O_pacity:"
msgstr "_Skala:"
-#: modules/file/imgexport.c:3589
+#: modules/file/imgexport.c:3554
#, fuzzy
msgid "Draw _ticks"
msgstr "_Maske zeichnen"
-#: modules/file/imgexport.c:3599
+#: modules/file/imgexport.c:3564
#, fuzzy
msgid "Draw _label"
msgstr "_Beschriftungen anzeigen"
-#: modules/file/imgexport.c:3609
+#: modules/file/imgexport.c:3574
msgid "Draw text _above scale bar"
msgstr ""
-#: modules/file/imgexport.c:3773
+#: modules/file/imgexport.c:3738
#, fuzzy
msgid "Image"
msgstr "FFT Imaginärteil"
-#: modules/file/imgexport.c:3777 modules/process/calcoefs_view.c:473
-#: modules/process/correct_affine.c:488 modules/process/drift.c:297
-#: modules/process/dwt.c:206 modules/process/dwtanisotropy.c:202
-#: modules/process/fft_filter_1d.c:294 modules/process/fft_profile.c:292
-#: modules/process/fractal.c:253 modules/process/nanoindent_adjust.c:229
-#: modules/process/polydistort.c:247 modules/process/rotate.c:274
-#: modules/process/scale.c:253 modules/process/straighten_path.c:271
+#: modules/file/imgexport.c:3742 modules/process/calcoefs_view.c:473
+#: modules/process/correct_affine.c:538 modules/process/drift.c:298
+#: modules/process/dwt.c:206 modules/process/dwtanisotropy.c:203
+#: modules/process/fft_filter_1d.c:296 modules/process/fft_profile.c:293
+#: modules/process/fractal.c:262 modules/process/nanoindent_adjust.c:229
+#: modules/process/polydistort.c:250 modules/process/rotate.c:274
+#: modules/process/scale.c:257 modules/process/straighten_path.c:270
#: modules/process/unrotate.c:277 modules/tools/linestats.c:400
-#: modules/tools/profile.c:555 modules/tools/roughness.c:864
-#: modules/tools/sfunctions.c:468 modules/xyz/xyz_raster.c:632
+#: modules/tools/profile.c:552 modules/tools/roughness.c:879
+#: modules/tools/sfunctions.c:481 modules/xyz/xyz_raster.c:601
msgid "_Interpolation type:"
msgstr "_Interpolationstyp:"
-#: modules/file/imgexport.c:3807
+#: modules/file/imgexport.c:3772
#, fuzzy
msgid "Draw _frame"
msgstr "_Rahmen anzeigen"
-#: modules/file/imgexport.c:3816
+#: modules/file/imgexport.c:3781
msgid "Draw _mask"
msgstr "_Maske zeichnen"
-#: modules/file/imgexport.c:3826
+#: modules/file/imgexport.c:3791
#, fuzzy
msgid "Draw mask _legend"
msgstr "_Maske zeichnen"
-#: modules/file/imgexport.c:3861
+#: modules/file/imgexport.c:3819
msgid "Value Scale"
msgstr "Werteskala"
-#: modules/file/imgexport.c:3882
+#: modules/file/imgexport.c:3840
#, fuzzy
msgid "Fi_xed precision:"
msgstr "_Genauigkeit:"
-#: modules/file/imgexport.c:3898
+#: modules/file/imgexport.c:3855
#, fuzzy
msgid "Fixed _kilo threshold:"
msgstr "_Weicher Schwellwert:"
-#: modules/file/imgexport.c:3914 modules/file/imgexport.c:4635
+#: modules/file/imgexport.c:3869 modules/file/imgexport.c:4583
#, fuzzy
msgid "Title"
msgstr "_Titel:"
-#: modules/file/imgexport.c:3918
+#: modules/file/imgexport.c:3877
#, fuzzy
msgid "Posi_tion:"
msgstr "Position:"
-#: modules/file/imgexport.c:3934
+#: modules/file/imgexport.c:3884
msgid "_Gap:"
msgstr ""
-#: modules/file/imgexport.c:3941
+#: modules/file/imgexport.c:3891
msgid "Put _units to title"
msgstr ""
-#: modules/file/imgexport.c:4125
+#: modules/file/imgexport.c:4075
msgid "Draw _selection"
msgstr ""
-#: modules/file/imgexport.c:4176 modules/tools/selectionmanager.c:361
+#: modules/file/imgexport.c:4126 modules/tools/selectionmanager.c:361
msgid "Objects"
msgstr "Objekte"
-#: modules/file/imgexport.c:4615
+#: modules/file/imgexport.c:4563
#, fuzzy
msgid "Lateral"
msgstr "GL-Material"
-#: modules/file/imgexport.c:4654 modules/file/rawfile.c:1040
-#: modules/process/calcoefs_load.c:230 modules/process/neural.c:693
+#: modules/file/imgexport.c:4602 modules/file/rawfile.c:1040
+#: modules/process/calcoefs_load.c:230 modules/process/neural.c:700
#, fuzzy
msgid "verb|_Load"
msgstr "_Laden"
-#: modules/file/imgexport.c:4660 modules/file/rawfile.c:1046
-#: modules/process/neural.c:699
+#: modules/file/imgexport.c:4608 modules/file/rawfile.c:1046
+#: modules/process/neural.c:706
msgid "verb|_Store"
msgstr ""
-#: modules/file/imgexport.c:4666 modules/file/rawfile.c:1052
-#: modules/process/neural.c:705
+#: modules/file/imgexport.c:4614 modules/file/rawfile.c:1052
+#: modules/process/neural.c:712
#, fuzzy
msgid "_Rename"
msgstr "_Umbenennen"
-#: modules/file/imgexport.c:4686 modules/file/rawfile.c:1071
+#: modules/file/imgexport.c:4634 modules/file/rawfile.c:1071
msgid "Preset _name:"
msgstr ""
-#: modules/file/imgexport.c:4757
+#: modules/file/imgexport.c:4705
#, c-format
msgid "Export %s"
msgstr ""
-#: modules/file/imgexport.c:4778
+#: modules/file/imgexport.c:4727
msgid "Export as 1_6 bit grayscale"
msgstr ""
-#: modules/file/imgexport.c:4801
+#: modules/file/imgexport.c:4750
#, fuzzy
msgid "Lateral Scale"
msgstr "Laterale Skala"
-#: modules/file/imgexport.c:4806
+#: modules/file/imgexport.c:4755
#, fuzzy
msgid "Values"
msgstr "Wert"
-#: modules/file/imgexport.c:4811
+#: modules/file/imgexport.c:4760
#, fuzzy
msgid "Selection"
msgstr "Richtung:"
-#: modules/file/imgexport.c:4816 modules/file/rawfile.c:462
+#: modules/file/imgexport.c:4765 modules/file/rawfile.c:462
#: modules/process/convolution_filter.c:275
msgid "Presets"
msgstr ""
-#: modules/file/imgexport.c:5576
+#: modules/file/imgexport.c:5525
#, c-format
msgid "Cairo error occurred: %s"
msgstr ""
-#: modules/file/imgexport.c:5600
+#: modules/file/imgexport.c:5549
#, c-format
msgid "Pixbuf save failed: %s."
msgstr ""
-#: modules/file/imgexport.c:5878
+#: modules/file/imgexport.c:5827
msgid "Image is too large to be stored as TARGA."
msgstr "Das Bild ist zu groß, um als TARGA gespeichert zu werden."
-#: modules/file/imgexport.c:6457 modules/file/imgexport.c:6486
+#: modules/file/imgexport.c:6406 modules/file/imgexport.c:6435
#, fuzzy
msgid "Draw _numbers"
msgstr "_Maske zeichnen"
-#: modules/file/imgexport.c:6469 modules/file/imgexport.c:6517
+#: modules/file/imgexport.c:6418 modules/file/imgexport.c:6466
msgid "_End marker length:"
msgstr ""
-#: modules/file/imgexport.c:6498
+#: modules/file/imgexport.c:6447
#, fuzzy
msgid "Marker _radius:"
msgstr "Fehlerzeilen markieren"
@@ -4695,46 +4841,57 @@ msgstr ""
msgid "image depth"
msgstr ""
-#: modules/file/iso28600.c:534
+#: modules/file/iso28600.c:543
msgid "Imports and exports ISO 28600:2011 SPM data transfer format."
msgstr ""
-#: modules/file/iso28600.c:550
+#: modules/file/iso28600.c:559
msgid "ISO 28600:2011 SPM data transfer files (.spm)"
msgstr ""
-#: modules/file/iso28600.c:606
+#: modules/file/iso28600.c:658
#, c-format
-msgid "Only regular mappings are implemented but file has mapping type ‘%s’."
+msgid ""
+"Only regular and irregular mappings are implemented but the file has mapping "
+"type ‘%s’."
msgstr ""
-#: modules/file/iso28600.c:668 modules/file/iso28600.c:677
-#: modules/file/iso28600.c:686
+#: modules/file/iso28600.c:687 modules/file/iso28600.c:696
+#: modules/file/iso28600.c:705
#, c-format
msgid "List ‘%s’ has %u items which differs from the number %u given by ‘%s’."
msgstr ""
-#: modules/file/iso28600.c:755 modules/file/iso28600.c:867
-#: modules/file/sdfile.c:846 modules/file/sdfile.c:863
-#: modules/file/spip-asc.c:239 modules/file/witec-asc.c:223
-#: modules/file/wsffile.c:215
-#, c-format
-msgid "End of file reached when reading sample #%d of %d"
-msgstr ""
+#: modules/file/iso28600.c:775
+#, fuzzy, c-format
+msgid "End of file reached when reading sample #%u of %u"
+msgstr "Dateiende wurde erreicht, als Datenwert erwartet wurde."
-#: modules/file/iso28600.c:764 modules/file/iso28600.c:876
-#: modules/file/spip-asc.c:246 modules/file/witec-asc.c:230
-#: modules/file/wsffile.c:222
+#: modules/file/iso28600.c:784 modules/file/iso28600.c:873
#, c-format
-msgid "Malformed data encountered when reading sample #%d of %d"
+msgid "Malformed data encountered when reading sample #%u"
msgstr ""
-#: modules/file/iso28600.c:774 modules/file/iso28600.c:886
+#: modules/file/iso28600.c:797 modules/file/iso28600.c:887
+#: modules/file/iso28600.c:1022
#, fuzzy
msgid "Missing end-of-data marker."
msgstr "Markierung des Datenfeld-Endes fehlt."
-#: modules/file/iso28600.c:1048
+#: modules/file/iso28600.c:1003 modules/file/sdfile.c:846
+#: modules/file/sdfile.c:863 modules/file/spip-asc.c:239
+#: modules/file/witec-asc.c:223 modules/file/wsffile.c:215
+#, c-format
+msgid "End of file reached when reading sample #%d of %d"
+msgstr ""
+
+#: modules/file/iso28600.c:1012 modules/file/spip-asc.c:246
+#: modules/file/witec-asc.c:230 modules/file/wsffile.c:222
+#, c-format
+msgid "Malformed data encountered when reading sample #%d of %d"
+msgstr ""
+
+#: modules/file/iso28600.c:1184
#, c-format
msgid "Line %u does not contain mandatory label ‘%s’."
msgstr ""
@@ -4751,43 +4908,63 @@ msgstr "JEOL-Dateien (.tif)"
msgid "The type of data is unknown. Please report it to the developers."
msgstr ""
-#: modules/file/jpkscan.c:229
+#: modules/file/jpkscan.c:292
msgid "Imports JPK image scans."
msgstr ""
-#: modules/file/jpkscan.c:242
+#: modules/file/jpkscan.c:305
msgid "JPK image scans (.jpk, .jpk-qi-image)"
msgstr ""
-#: modules/file/jpkscan.c:249
+#: modules/file/jpkscan.c:312
msgid "JPK force curves (.jpk-force, .jpk-force-map, .jpk-qi-data)"
msgstr ""
-#: modules/file/jpkscan.c:315
+#: modules/file/jpkscan.c:378
msgid "File does not contain grid dimensions."
msgstr ""
-#: modules/file/jpkscan.c:660 modules/file/nanoobserver.c:193
+#: modules/file/jpkscan.c:736 modules/file/nanoobserver.c:360
#: modules/file/nanoscantech.c:205 modules/file/opengps.c:209
#: modules/file/sensofarx.c:183 modules/file/spmxfile.c:166
msgid "Minizip cannot open the file as a ZIP file."
msgstr ""
-#: modules/file/jpkscan.c:739
+#: modules/file/jpkscan.c:758 modules/file/jpkscan.c:2717
+#, c-format
+msgid "Scanning file (%u curves)..."
+msgstr ""
+
+#: modules/file/jpkscan.c:798 modules/file/nmmxyz.c:299
+#, fuzzy
+msgid "Reading files..."
+msgstr "Markiere Grenzen"
+
+#: modules/file/jpkscan.c:816
+#, fuzzy
+msgid "Creating volume data..."
+msgstr "Nivellierte Daten"
+
+#: modules/file/jpkscan.c:968
msgid "Non-uniform point and/or segment numbering is not supported."
msgstr ""
-#: modules/file/jpkscan.c:748
+#: modules/file/jpkscan.c:977
#, fuzzy
msgid "Non-uniform channel lists are not supported."
msgstr "Abstands-Kraft-Kurven werden nicht unterstützt."
-#: modules/file/jpkscan.c:756
+#: modules/file/jpkscan.c:985
#, c-format
msgid "Data file %s was found instead of expected %s."
msgstr ""
-#: modules/file/jpkscan.c:1497
+#: modules/file/jpkscan.c:1900
+#, fuzzy, c-format
+msgid "Header properties file for index %u is missing."
+msgstr "Kopfzeilen-Feld `%s' fehlt."
+
+#: modules/file/jpkscan.c:2519
msgid "Cannot find any height channel."
msgstr ""
@@ -4943,19 +5120,19 @@ msgstr "MetroPro-Dateien (.dat)"
msgid "File header is larger than file."
msgstr ""
-#: modules/file/microprof.c:117
+#: modules/file/microprof.c:125
msgid "Imports MicroProf FRT profilometer data files."
msgstr "Importiert MicroProf FRT-Profilometer-Dateien."
-#: modules/file/microprof.c:130
+#: modules/file/microprof.c:138
msgid "MicroProf FRT files (.frt)"
msgstr "MicroProf FRT-Dateien (.frt)"
-#: modules/file/microprof.c:136
+#: modules/file/microprof.c:144
msgid "MicroProf FRT text files (.txt)"
msgstr "MicroProf FRT-Textdateien (.txt)."
-#: modules/file/microprof.c:432
+#: modules/file/microprof.c:519
msgid "File contains fewer than XSize*YSize data points."
msgstr ""
@@ -5043,8 +5220,8 @@ msgstr ""
msgid "Spectra data starts past the end of file."
msgstr ""
-#: modules/file/nanoeducator.c:648 modules/file/opdfile.c:276
-#: modules/file/renishaw.c:1325 modules/file/sensofar.c:256
+#: modules/file/nanoeducator.c:648 modules/file/opdfile.c:287
+#: modules/file/renishaw.c:1334 modules/file/sensofar.c:256
#: modules/file/witec-asc.c:161
msgid "File header is truncated"
msgstr ""
@@ -5054,8 +5231,8 @@ msgstr ""
msgid "Parameter header is truncated"
msgstr ""
-#: modules/file/nanoeducator.c:932 modules/process/curvature.c:454
-#: modules/tools/profile.c:1107
+#: modules/file/nanoeducator.c:932 modules/process/curvature.c:456
+#: modules/tools/profile.c:1090
#, c-format
msgid "Profile %d"
msgstr ""
@@ -5137,23 +5314,27 @@ msgstr ""
msgid "Missing data start marker \\x1a\\x04."
msgstr ""
-#: modules/file/nanoobserver.c:113
-msgid "Reads NanoObserver .nao files."
+#: modules/file/nanoobserver.c:201
+msgid "Reads Nano-Solution/NanoObserver .nao files."
+msgstr ""
+
+#: modules/file/nanoobserver.c:214
+msgid "Nano-Solution/NanoObserver data (.nao)"
msgstr ""
-#: modules/file/nanoobserver.c:126
-msgid "NanoObserver data (.nao)"
+#: modules/file/nanoobserver.c:410 modules/file/renishaw.c:1420
+msgid "Data block is truncated"
msgstr ""
-#: modules/file/nanoscan.c:188
+#: modules/file/nanoscan.c:191
msgid "Imports NanoScan XML files."
msgstr "Importiert NanoScan XML-Dateien."
-#: modules/file/nanoscan.c:201
+#: modules/file/nanoscan.c:204
msgid "NanoScan XML files (.xml)"
msgstr "NanoScan XML-Dateien (.xml)"
-#: modules/file/nanoscan.c:910
+#: modules/file/nanoscan.c:937
msgid "Wrong size of Base64 encoded data."
msgstr ""
@@ -5174,22 +5355,22 @@ msgstr "Importiert Digital Instruments Nanoscope-II-Dateien."
msgid "Nanoscope II files"
msgstr "Nanoscope-II-Dateien"
-#: modules/file/nanoscope.c:207
+#: modules/file/nanoscope.c:212
msgid ""
"Imports Veeco (Digital Instruments) Nanoscope data files, version 3 or newer."
msgstr ""
"Importiert Veeco (Digital Instruments) Nanoscope-Dateien, Version 3 oder "
"neuer."
-#: modules/file/nanoscope.c:221
+#: modules/file/nanoscope.c:226
msgid "Nanoscope III files"
msgstr "Nanoscope-III-Dateien"
-#: modules/file/nanoscope.c:288
+#: modules/file/nanoscope.c:295
msgid "File is not a Nanoscope file, or it is a unknown subtype."
msgstr ""
-#: modules/file/nanoscope.c:295
+#: modules/file/nanoscope.c:302
msgid ""
"File has been damaged by change of line endings, resulting in corruption of "
"the binary part of the file.\n"
@@ -5200,16 +5381,16 @@ msgid ""
"transfer that attempts to store text platform-independently."
msgstr ""
-#: modules/file/nanoscope.c:653 modules/file/nanoscope.c:669
+#: modules/file/nanoscope.c:660 modules/file/nanoscope.c:676
msgid "Cannot parse `Scan size' field."
msgstr ""
-#: modules/file/nanoscope.c:1539 modules/file/nrrdfile.c:1086
+#: modules/file/nanoscope.c:1546 modules/file/nrrdfile.c:1086
#, c-format
msgid "Garbage after data sample #%u."
msgstr ""
-#: modules/file/nanoscope.c:1595
+#: modules/file/nanoscope.c:1602
msgid "Truncated header line."
msgstr ""
@@ -5290,12 +5471,8 @@ msgstr "Nanonis SXM-Dateien (.sxm)"
msgid "Nano Measuring Machine data import must be run as interactive."
msgstr "Der Import von XYZ-Rohdaten muss interaktiv ausgeführt werden."
-#: modules/file/nmmxyz.c:299
-#, fuzzy
-msgid "Reading files..."
-msgstr "Markiere Grenzen"
-
#: modules/file/nmmxyz.c:306 modules/process/lat_synth.c:1224
+#: modules/process/wave_synth.c:798
msgid "Rendering surface..."
msgstr ""
@@ -5332,20 +5509,20 @@ msgid "Plot point density map"
msgstr ""
#: modules/file/nmmxyz.c:534 modules/file/rawfile.c:626
-#: modules/process/dimensions.h:445 modules/xyz/xyz_drift.c:725
-#: modules/xyz/xyz_raster.c:517
+#: modules/process/dimensions.h:427 modules/xyz/xyz_drift.c:725
+#: modules/xyz/xyz_raster.c:376
msgid "Resolution"
msgstr "Auflösung"
#: modules/file/nmmxyz.c:538 modules/file/rawfile.c:631
-#: modules/process/dimensions.h:451 modules/xyz/xyz_drift.c:729
-#: modules/xyz/xyz_raster.c:521
+#: modules/process/dimensions.h:433 modules/xyz/xyz_drift.c:729
+#: modules/xyz/xyz_raster.c:382
msgid "_Horizontal size:"
msgstr "_Horizontale Größe:"
#: modules/file/nmmxyz.c:554 modules/file/rawfile.c:638
-#: modules/process/dimensions.h:454 modules/xyz/xyz_drift.c:744
-#: modules/xyz/xyz_raster.c:536
+#: modules/process/dimensions.h:436 modules/xyz/xyz_drift.c:744
+#: modules/xyz/xyz_raster.c:388
msgid "_Vertical size:"
msgstr "_Vertikale Größe:"
@@ -5434,38 +5611,38 @@ msgstr ""
msgid "Per-axis header field %s contains too few items."
msgstr ""
-#: modules/file/nt-mdt.c:843
+#: modules/file/nt-mdt.c:850
msgid "Imports NT-MDT data files."
msgstr "Importiert NT-MDT-Dateien."
-#: modules/file/nt-mdt.c:856
+#: modules/file/nt-mdt.c:863
msgid "NT-MDT files (.mdt)"
msgstr "NT-MDT-Dateien (.mdt)"
-#: modules/file/nt-mdt.c:1491 modules/file/nt-mdt.c:1599
+#: modules/file/nt-mdt.c:1498 modules/file/nt-mdt.c:1606
msgid "Frame is too short for Frame Mode."
msgstr ""
-#: modules/file/nt-mdt.c:1506 modules/file/nt-mdt.c:1614
+#: modules/file/nt-mdt.c:1513 modules/file/nt-mdt.c:1621
msgid "Frame is too short for dots or data."
msgstr ""
-#: modules/file/nt-mdt.c:1869
+#: modules/file/nt-mdt.c:1879
#, c-format
msgid "End of file reached in frame header #%u."
msgstr ""
-#: modules/file/nt-mdt.c:1877
+#: modules/file/nt-mdt.c:1887
#, c-format
msgid "End of file reached in frame data #%u."
msgstr ""
-#: modules/file/nt-mdt.c:1910
+#: modules/file/nt-mdt.c:1920
#, c-format
msgid "Frame #%u is too short for scanned data header."
msgstr ""
-#: modules/file/nt-mdt.c:1927
+#: modules/file/nt-mdt.c:1937
#, c-format
msgid "Frame #%u is too short for spectroscopy data header."
msgstr ""
@@ -5583,28 +5760,28 @@ msgstr "Omicron MATRIX (param.mtrx & data.mtrx)"
msgid "Omicron MATRIX (.mtrx & .mtrx)"
msgstr "Omicron MATRIX (.mtrx & .mtrx)"
-#: modules/file/opdfile.c:188
+#: modules/file/opdfile.c:199
msgid "Imports Wyko OPD and ASC files."
msgstr "Importiert Wyko OPD- und ASC-Dateien."
-#: modules/file/opdfile.c:201
+#: modules/file/opdfile.c:212
msgid "Wyko OPD files (.opd)"
msgstr "Wyko OPD-Dateien (.opd)"
-#: modules/file/opdfile.c:208
+#: modules/file/opdfile.c:219
msgid "Wyko ASCII export files (.asc)"
msgstr ""
-#: modules/file/opdfile.c:299
+#: modules/file/opdfile.c:310
#, c-format
msgid "Item `%s' is beyond the end of the file."
msgstr ""
-#: modules/file/opdfile.c:614
+#: modules/file/opdfile.c:636
msgid "Nested directories found"
msgstr ""
-#: modules/file/opdfile.c:805
+#: modules/file/opdfile.c:842
#, c-format
msgid "Truncated data in block %s"
msgstr ""
@@ -5904,19 +6081,21 @@ msgstr ""
#: modules/file/rawfile.c:567 modules/process/arithmetic.c:234
#: modules/process/calcoefs_view.c:320 modules/process/coerce.c:250
-#: modules/process/convolution_filter.c:236 modules/process/deposit_synth.c:637
+#: modules/process/convolution_filter.c:236 modules/process/deposit_synth.c:638
#: modules/process/drift.c:242 modules/process/edge.c:635
-#: modules/process/entropy.c:178 modules/process/fft_filter_1d.c:183
-#: modules/process/grain_edge.c:210 modules/process/grain_filter.c:313
-#: modules/process/grain_mark.c:244 modules/process/grain_wshed.c:164
-#: modules/process/mark_disconn.c:205 modules/process/mark_with.c:195
-#: modules/process/polydistort.c:205 modules/process/scars.c:295
-#: modules/process/slope_dist.c:273 modules/process/straighten_path.c:198
-#: modules/process/synth.h:509 modules/process/tip_model.c:166
+#: modules/process/entropy.c:178 modules/process/fft_filter_1d.c:184
+#: modules/process/fractal.c:225 modules/process/grain_edge.c:209
+#: modules/process/grain_filter.c:312 modules/process/grain_mark.c:243
+#: modules/process/grain_wshed.c:165 modules/process/mark_disconn.c:205
+#: modules/process/mark_with.c:196 modules/process/mfm_field.c:278
+#: modules/process/mfm_shift.c:167 modules/process/polydistort.c:205
+#: modules/process/scars.c:314 modules/process/slope_dist.c:272
+#: modules/process/stitch.c:272 modules/process/straighten_path.c:198
+#: modules/process/synth.h:538 modules/process/tip_model.c:164
#: modules/process/wpour_mark.c:273 modules/tools/linestats.c:454
-#: modules/tools/sfunctions.c:534 modules/tools/stats.c:459
-#: modules/volume/volume_extract.c:328 modules/volume/volume_linestat.c:287
-#: modules/xyz/xyz_drift.c:618 modules/xyz/xyz_raster.c:443
+#: modules/tools/sfunctions.c:531 modules/tools/stats.c:456
+#: modules/volume/volume_extract.c:321 modules/volume/volume_linestat.c:292
+#: modules/xyz/xyz_drift.c:618 modules/xyz/xyz_raster.c:457
msgid "_Update"
msgstr "A_ktualisieren"
@@ -6060,7 +6239,7 @@ msgid ""
"The contents of `%s' does not match format: %s."
msgstr ""
-#: modules/file/rawfile.c:1690 modules/process/neural.c:1580
+#: modules/file/rawfile.c:1690 modules/process/neural.c:1587
#, c-format
msgid "The name `%s' is invalid."
msgstr "Der Name `%s' ist ungültig."
@@ -6159,7 +6338,8 @@ msgstr "XYZ-Dateien"
msgid "Import XYZ Data"
msgstr "XYZ-Daten importieren"
-#: modules/file/rawxyz.c:279
+#: modules/file/rawxyz.c:279 modules/graph/graph_stats.c:305
+#: modules/graph/graph_stats.c:756 modules/graph/graph_stats.c:800
#, fuzzy
msgid "Number of points:"
msgstr "Anzahl an Körnern"
@@ -6184,7 +6364,7 @@ msgstr "_X-Bereich:"
msgid "_Lateral units:"
msgstr "_Laterale Einheiten:"
-#: modules/file/rawxyz.c:386 modules/process/dimensions.h:494
+#: modules/file/rawxyz.c:386 modules/process/dimensions.h:479
#, fuzzy
msgid "_Value units:"
msgstr "_Werteskala:"
@@ -6203,19 +6383,15 @@ msgstr "Intematix SDF-Dateien (.sdf)"
msgid "MapArea block is truncated"
msgstr ""
-#: modules/file/renishaw.c:787
+#: modules/file/renishaw.c:793
msgid "Random points order unsupported"
msgstr ""
-#: modules/file/renishaw.c:1396
+#: modules/file/renishaw.c:1405
#, fuzzy
msgid "Block header is truncated"
msgstr "X Abstand"
-#: modules/file/renishaw.c:1411
-msgid "Data block is truncated"
-msgstr ""
-
#: modules/file/rhk-sm3.c:236
msgid "Imports RHK Technology SM3 data files."
msgstr "Importiert RHK Technology SM3-Dateien."
@@ -6484,19 +6660,24 @@ msgstr "Lädt SPML-Dateien (Scanning Probe Microscopy Markup Language)."
msgid "SPML files (.xml)"
msgstr "SPML-Dateien (.xml)"
-#: modules/file/spmlab.c:131
+#: modules/file/spmlab.c:175
msgid "Imports Thermicroscopes SpmLab R3 to R7 data files."
msgstr "Importiert Thermicroscopes SpmLab-Dateien (R3 bis R7)."
-#: modules/file/spmlab.c:144
+#: modules/file/spmlab.c:188
msgid "Thermicroscopes SpmLab files"
msgstr "Thermicroscopes SpmLab-Dateien"
-#: modules/file/spmlab.c:231
+#: modules/file/spmlab.c:259
#, c-format
msgid "Unknown format version %c."
msgstr "Unbekannte Formatversion %c."
+#: modules/file/spmlab.c:283
+#, fuzzy
+msgid "Data block is truncated."
+msgstr "X Abstand"
+
#: modules/file/spmlabf.c:79
msgid "Imports SPMLab floating-point files."
msgstr "Importiert SPMLab Gleitkomma-Dateien."
@@ -6704,11 +6885,11 @@ msgstr "Importiert OLS-Dateien."
msgid "WinSTM files (.stm)"
msgstr "WSXM-Dateien (.tom)"
-#: modules/file/wipfile.c:272
+#: modules/file/wipfile.c:281
msgid "Imports WItec Project data files."
msgstr "Importiert WItec Projektdateien."
-#: modules/file/wipfile.c:285
+#: modules/file/wipfile.c:294
msgid "WItec Project files (.wip)"
msgstr "WItec Projektdateien (.wip)"
@@ -6773,23 +6954,23 @@ msgstr "Exportiert Daten als einfache ASCII-Matrix."
msgid "XYZ text data (.xyz)"
msgstr ""
-#: modules/file/xyzexport.c:244
+#: modules/file/xyzexport.c:247
#, fuzzy
msgid "Lateral units:"
msgstr "_Laterale Einheiten:"
-#: modules/file/xyzexport.c:290
+#: modules/file/xyzexport.c:293
#, fuzzy
msgid "Export XYZ"
msgstr "Text exportieren"
-#: modules/file/xyzexport.c:340 modules/process/curvature.c:704
+#: modules/file/xyzexport.c:343 modules/process/curvature.c:700
#: modules/process/entropy.c:214 modules/process/facet-level.c:207
-#: modules/process/fit-shape.c:743 modules/process/level.c:259
-#: modules/process/linematch.c:906 modules/process/neural.c:593
-#: modules/process/polylevel.c:491 modules/process/slope_dist.c:418
-#: modules/tools/filter.c:300 modules/tools/linestats.c:436
-#: modules/tools/profile.c:591 modules/tools/sfunctions.c:516
+#: modules/process/fit-shape.c:755 modules/process/level.c:259
+#: modules/process/linematch.c:869 modules/process/neural.c:597
+#: modules/process/polylevel.c:494 modules/process/slope_dist.c:411
+#: modules/tools/filter.c:301 modules/tools/linestats.c:436
+#: modules/tools/profile.c:572 modules/tools/sfunctions.c:513
#: modules/tools/stats.c:389
msgid "Masking Mode"
msgstr "Maskier-Modus"
@@ -6803,6 +6984,16 @@ msgstr "Importiert Aarhus MUL-Dateien."
msgid "Carl Zeiss SEM scans (.tif)"
msgstr ""
+#: modules/file/zeisslsm.c:383
+#, fuzzy
+msgid "Imports Carl Zeiss CLSM images."
+msgstr "Importiert Aarhus MUL-Dateien."
+
+#: modules/file/zeisslsm.c:396
+#, fuzzy
+msgid "Carl Zeiss CLSM images (.lsm)"
+msgstr "Importiert Aarhus MUL-Dateien."
+
#: modules/file/zemax.c:72
#, fuzzy
msgid "Imports Zemax grid sag data files."
@@ -6826,16 +7017,16 @@ msgstr "Der Datentyp %d ist ungültig oder wird nicht unterstützt."
msgid "The first line contains too many items."
msgstr ""
-#: modules/graph/graph_align.c:57
+#: modules/graph/graph_align.c:60
#, fuzzy
msgid "Aligns graph curves."
msgstr "Diagrammkurven nivellieren"
-#: modules/graph/graph_align.c:71
+#: modules/graph/graph_align.c:74
msgid "/_Align"
msgstr ""
-#: modules/graph/graph_align.c:74
+#: modules/graph/graph_align.c:77
#, fuzzy
msgid "Align curves"
msgstr "Diagrammkurven nivellieren"
@@ -6852,50 +7043,52 @@ msgstr "/_Kritische Dimension..."
msgid "Fit critical dimension"
msgstr "Kritische Dimension fitten"
-#: modules/graph/graph_cd.c:209 modules/graph/graph_fit.c:267
+#: modules/graph/graph_cd.c:209 modules/graph/graph_fit.c:270
#, fuzzy
msgid "Fit Graph"
msgstr "Graph anfitten"
-#: modules/graph/graph_cd.c:212 modules/graph/graph_fdfit.c:251
-#: modules/graph/graph_fit.c:270 modules/process/fit-shape.c:393
+#: modules/graph/graph_cd.c:212 modules/graph/graph_fdfit.c:254
+#: modules/graph/graph_fit.c:273 modules/process/fit-shape.c:394
#: modules/volume/volume_fdfit.c:299
msgid "verb|_Fit"
msgstr ""
-#: modules/graph/graph_cd.c:262 modules/graph/graph_cut.c:166
-#: modules/graph/graph_fdfit.c:306 modules/graph/graph_fit.c:325
-#: modules/graph/graph_peaks.c:199
+#: modules/graph/graph_cd.c:262 modules/graph/graph_cut.c:168
+#: modules/graph/graph_fdfit.c:313 modules/graph/graph_fit.c:332
+#: modules/graph/graph_peaks.c:199 modules/graph/graph_stats.c:268
#, fuzzy
msgid "_Graph curve:"
msgstr "_Graph"
-#: modules/graph/graph_cd.c:276 modules/graph/graph_fdfit.c:320
-#: modules/graph/graph_fit.c:339 modules/volume/volume_fdfit.c:405
+#: modules/graph/graph_cd.c:276 modules/graph/graph_fdfit.c:327
+#: modules/graph/graph_fit.c:346 modules/volume/volume_fdfit.c:389
msgid "F_unction:"
msgstr "F_unktion:"
-#: modules/graph/graph_cd.c:305 modules/graph/graph_fdfit.c:361
-#: modules/graph/graph_fit.c:375 modules/process/curvature.c:745
-#: modules/process/fit-shape.c:792 modules/volume/volume_fdfit.c:446
+#: modules/graph/graph_cd.c:305 modules/graph/graph_fdfit.c:368
+#: modules/graph/graph_fit.c:382 modules/process/curvature.c:742
+#: modules/process/fit-shape.c:804 modules/volume/volume_fdfit.c:422
msgid "Parameter"
msgstr "Parameter"
-#: modules/graph/graph_cd.c:307 modules/graph/graph_fdfit.c:363
-#: modules/graph/graph_fit.c:377 modules/process/fit-shape.c:794
-#: modules/volume/volume_fdfit.c:448
+#: modules/graph/graph_cd.c:307 modules/graph/graph_fdfit.c:370
+#: modules/graph/graph_fit.c:384 modules/process/fit-shape.c:806
+#: modules/volume/volume_fdfit.c:424
msgid "Error"
msgstr "Fehler"
-#: modules/graph/graph_cd.c:319 modules/graph/graph_cut.c:196
-#: modules/graph/graph_fdfit.c:415 modules/graph/graph_fit.c:433
-#: modules/volume/volume_fdfit.c:500 modules/volume/volume_linestat.c:389
+#: modules/graph/graph_cd.c:319 modules/graph/graph_cut.c:189
+#: modules/graph/graph_fdfit.c:422 modules/graph/graph_fit.c:440
+#: modules/graph/graph_stats.c:279 modules/graph/graph_stats.c:793
+#: modules/volume/volume_fdfit.c:476 modules/volume/volume_linestat.c:394
msgid "Range:"
msgstr ""
-#: modules/graph/graph_cd.c:330 modules/graph/graph_cut.c:207
-#: modules/graph/graph_fdfit.c:426 modules/graph/graph_fit.c:444
-#: modules/volume/volume_fdfit.c:511 modules/volume/volume_linestat.c:400
+#: modules/graph/graph_cd.c:330 modules/graph/graph_cut.c:200
+#: modules/graph/graph_fdfit.c:433 modules/graph/graph_fit.c:451
+#: modules/graph/graph_stats.c:290 modules/graph/graph_stats.c:796
+#: modules/volume/volume_fdfit.c:487 modules/volume/volume_linestat.c:405
#, fuzzy
msgid "range|to"
msgstr "bis"
@@ -6904,98 +7097,98 @@ msgstr "bis"
msgid "_Draw whole circle"
msgstr ""
-#: modules/graph/graph_cd.c:382 modules/graph/graph_fdfit.c:491
-#: modules/graph/graph_fit.c:531 modules/process/fit-shape.c:522
-#: modules/volume/volume_fdfit.c:573
+#: modules/graph/graph_cd.c:382 modules/graph/graph_fdfit.c:498
+#: modules/graph/graph_fit.c:538 modules/process/fit-shape.c:523
+#: modules/volume/volume_fdfit.c:549
msgid "Save Fit Report"
msgstr ""
#: modules/graph/graph_cd.c:529 modules/graph/graph_cd.c:1107
-#: modules/graph/graph_fdfit.c:709 modules/graph/graph_fit.c:763
-#: modules/volume/volume_fdfit.c:907
+#: modules/graph/graph_fdfit.c:725 modules/graph/graph_fit.c:779
+#: modules/volume/volume_fdfit.c:883
#, fuzzy
msgid "Fit"
msgstr "Fest"
-#: modules/graph/graph_cd.c:555 modules/graph/graph_fdfit.c:749
-#: modules/graph/graph_fit.c:803 modules/volume/volume_fdfit.c:978
-#: modules/volume/volume_fdfit.c:1085
+#: modules/graph/graph_cd.c:555 modules/graph/graph_fdfit.c:765
+#: modules/graph/graph_fit.c:819 modules/volume/volume_fdfit.c:954
+#: modules/volume/volume_fdfit.c:1061
msgid "It is necessary to select more data points than free fit parameters"
msgstr ""
-#: modules/graph/graph_cd.c:710 modules/graph/graph_fdfit.c:798
-#: modules/graph/graph_fit.c:852 modules/process/entropy.c:554
-#: modules/tools/grainmeasure.c:217 modules/tools/readvalue.c:634
-#: modules/tools/readvalue.c:635 modules/tools/readvalue.c:636
-#: modules/tools/readvalue.c:637 modules/tools/roughness.c:975
-#: modules/tools/stats.c:727 modules/tools/stats.c:740
-#: modules/tools/stats.c:741 modules/volume/volume_fdfit.c:1134
-#: modules/xyz/xyz_drift.c:1099 modules/xyz/xyz_drift.c:1117
-#: modules/xyz/xyz_drift.c:1134
+#: modules/graph/graph_cd.c:710 modules/graph/graph_fdfit.c:814
+#: modules/graph/graph_fit.c:868 modules/graph/graph_stats.c:663
+#: modules/process/entropy.c:555 modules/tools/grainmeasure.c:217
+#: modules/tools/readvalue.c:634 modules/tools/readvalue.c:635
+#: modules/tools/readvalue.c:636 modules/tools/readvalue.c:637
+#: modules/tools/roughness.c:984 modules/tools/stats.c:723
+#: modules/tools/stats.c:736 modules/tools/stats.c:737
+#: modules/volume/volume_fdfit.c:1110 modules/xyz/xyz_drift.c:1099
+#: modules/xyz/xyz_drift.c:1117 modules/xyz/xyz_drift.c:1134
msgid "N.A."
msgstr "N.V."
-#: modules/graph/graph_cd.c:993 modules/graph/graph_fdfit.c:1363
-#: modules/graph/graph_fit.c:1500 modules/process/fit-shape.c:2078
-#: modules/volume/volume_fdfit.c:1720
+#: modules/graph/graph_cd.c:993 modules/graph/graph_fdfit.c:1381
+#: modules/graph/graph_fit.c:1518 modules/process/fit-shape.c:2060
+#: modules/volume/volume_fdfit.c:1696
#, fuzzy
msgid "===== Fit Results ====="
msgstr "===== Fit-Ergebnisse===="
-#: modules/graph/graph_cd.c:997 modules/graph/graph_fdfit.c:1367
-#: modules/graph/graph_fit.c:1504 modules/process/fit-shape.c:2080
-#: modules/volume/volume_fdfit.c:1724
+#: modules/graph/graph_cd.c:997 modules/graph/graph_fdfit.c:1385
+#: modules/graph/graph_fit.c:1522 modules/process/fit-shape.c:2062
+#: modules/volume/volume_fdfit.c:1700
#, c-format
msgid "Data: %s\n"
msgstr ""
-#: modules/graph/graph_cd.c:1000 modules/graph/graph_fdfit.c:1370
-#: modules/graph/graph_fit.c:1507 modules/process/fit-shape.c:2082
-#: modules/volume/volume_fdfit.c:1727
+#: modules/graph/graph_cd.c:1000 modules/graph/graph_fdfit.c:1388
+#: modules/graph/graph_fit.c:1525 modules/process/fit-shape.c:2064
+#: modules/volume/volume_fdfit.c:1703
#, c-format
msgid "Number of points: %d of %d\n"
msgstr ""
-#: modules/graph/graph_cd.c:1004 modules/graph/graph_fdfit.c:1374
-#: modules/graph/graph_fit.c:1511 modules/volume/volume_fdfit.c:1731
+#: modules/graph/graph_cd.c:1004 modules/graph/graph_fdfit.c:1392
+#: modules/graph/graph_fit.c:1529 modules/volume/volume_fdfit.c:1707
#, c-format
msgid "X range: %.*f to %.*f %s\n"
msgstr ""
-#: modules/graph/graph_cd.c:1010 modules/graph/graph_fdfit.c:1380
-#: modules/graph/graph_fit.c:1517 modules/process/fit-shape.c:2084
-#: modules/volume/volume_fdfit.c:1737
+#: modules/graph/graph_cd.c:1010 modules/graph/graph_fdfit.c:1398
+#: modules/graph/graph_fit.c:1535 modules/process/fit-shape.c:2066
+#: modules/volume/volume_fdfit.c:1713
#, c-format
msgid "Fitted function: %s\n"
msgstr ""
-#: modules/graph/graph_cd.c:1013 modules/graph/graph_fdfit.c:1383
-#: modules/graph/graph_fit.c:1520 modules/process/fit-shape.c:2087
-#: modules/volume/volume_fdfit.c:1740
+#: modules/graph/graph_cd.c:1013 modules/graph/graph_fdfit.c:1401
+#: modules/graph/graph_fit.c:1538 modules/process/fit-shape.c:2069
+#: modules/volume/volume_fdfit.c:1716
msgid "Results\n"
msgstr "Ergebnisse\n"
-#: modules/graph/graph_cut.c:88
+#: modules/graph/graph_cut.c:87
#, fuzzy
msgid "Cut graph"
msgstr "Graph"
-#: modules/graph/graph_cut.c:102
+#: modules/graph/graph_cut.c:101
#, fuzzy
msgid "/_Cut..."
msgstr "Graph"
-#: modules/graph/graph_cut.c:105
+#: modules/graph/graph_cut.c:104
#, fuzzy
msgid "Extract part of graph into new one"
msgstr "Teil des Graphen in einen neuen extrahieren"
-#: modules/graph/graph_cut.c:146
+#: modules/graph/graph_cut.c:145
#, fuzzy
msgid "Cut Graph"
msgstr "Graph"
-#: modules/graph/graph_cut.c:180
+#: modules/graph/graph_cut.c:173
msgid "Cut _all curves"
msgstr ""
@@ -7098,108 +7291,108 @@ msgstr "Diagramm als Pixelgrafik exportieren"
msgid "Export to PNG"
msgstr "Text exportieren"
-#: modules/graph/graph_export_vector.c:35
+#: modules/graph/graph_export_vector.c:36
#, fuzzy
msgid "Exports graphs to PostScript"
msgstr "Diagramm als Postscript exportieren"
-#: modules/graph/graph_export_vector.c:49
+#: modules/graph/graph_export_vector.c:50
msgid "/Export _PostScript"
msgstr "/Exportieren als _Postscript"
-#: modules/graph/graph_export_vector.c:52
+#: modules/graph/graph_export_vector.c:53
#, fuzzy
msgid "Export graph to PostScript"
msgstr "Diagramm als Postscript exportieren"
-#: modules/graph/graph_export_vector.c:65
+#: modules/graph/graph_export_vector.c:66
#, fuzzy
msgid "Export to PostScript"
msgstr "/Exportieren als _Postscript"
-#: modules/graph/graph_fdfit.c:168
+#: modules/graph/graph_fdfit.c:169
msgid "Fit force-distance data"
msgstr ""
-#: modules/graph/graph_fdfit.c:182
+#: modules/graph/graph_fdfit.c:183
msgid "/_Fit FD Curve..."
msgstr "/_FD-Kurve fitten..."
-#: modules/graph/graph_fdfit.c:185
+#: modules/graph/graph_fdfit.c:186
msgid "Fit a force-distance curve"
msgstr ""
-#: modules/graph/graph_fdfit.c:248 modules/volume/volume_fdfit.c:296
+#: modules/graph/graph_fdfit.c:251 modules/volume/volume_fdfit.c:296
#, fuzzy
msgid "Fit FD Curve"
msgstr "FD-Kurve fitten"
-#: modules/graph/graph_fdfit.c:255 modules/graph/graph_fit.c:274
-#: modules/process/fit-shape.c:397 modules/process/measure_lattice.c:257
-#: modules/volume/volume_fdfit.c:303
+#: modules/graph/graph_fdfit.c:258 modules/graph/graph_fit.c:277
+#: modules/process/correct_affine.c:347 modules/process/fit-shape.c:398
+#: modules/process/measure_lattice.c:247 modules/volume/volume_fdfit.c:303
#, fuzzy
msgid "verb|_Estimate"
msgstr "_Abschätzung"
-#: modules/graph/graph_fdfit.c:257 modules/graph/graph_fit.c:276
-#: modules/volume/volume_fdfit.c:305
+#: modules/graph/graph_fdfit.c:260 modules/graph/graph_fit.c:279
+#: modules/process/psf.c:239 modules/volume/volume_fdfit.c:305
#, fuzzy
msgid "_Plot Inits"
msgstr "_Diagramm-Einheiten"
-#: modules/graph/graph_fdfit.c:359 modules/graph/graph_fit.c:373
-#: modules/process/fit-shape.c:790 modules/volume/volume_fdfit.c:444
+#: modules/graph/graph_fdfit.c:366 modules/graph/graph_fit.c:380
+#: modules/process/fit-shape.c:802 modules/volume/volume_fdfit.c:420
#, fuzzy
msgid "Fix"
msgstr "Fest"
-#: modules/graph/graph_fdfit.c:365 modules/graph/graph_fit.c:379
-#: modules/volume/volume_fdfit.c:450
+#: modules/graph/graph_fdfit.c:372 modules/graph/graph_fit.c:386
+#: modules/volume/volume_fdfit.c:426
#, fuzzy
msgid "Initial"
msgstr "Initialisiere graphische Benutzeroberfläche"
-#: modules/graph/graph_fdfit.c:376 modules/graph/graph_fit.c:394
-#: modules/volume/volume_fdfit.c:461
+#: modules/graph/graph_fdfit.c:383 modules/graph/graph_fit.c:401
+#: modules/volume/volume_fdfit.c:437
msgid "χ<sup>2</sup> result:"
msgstr "χ<sup>2</sup> Ergebnis:"
-#: modules/graph/graph_fdfit.c:392 modules/graph/graph_fit.c:410
-#: modules/process/fit-shape.c:469 modules/process/fit-shape.c:2134
-#: modules/volume/volume_fdfit.c:477
+#: modules/graph/graph_fdfit.c:399 modules/graph/graph_fit.c:417
+#: modules/process/fit-shape.c:470 modules/process/fit-shape.c:2116
+#: modules/volume/volume_fdfit.c:453
msgid "Correlation Matrix"
msgstr "Korrelationsmatrix"
-#: modules/graph/graph_fdfit.c:447 modules/graph/graph_fit.c:485
-#: modules/process/wpour_mark.c:410 modules/volume/volume_fdfit.c:532
+#: modules/graph/graph_fdfit.c:454 modules/graph/graph_fit.c:492
+#: modules/process/wpour_mark.c:410 modules/volume/volume_fdfit.c:508
#, fuzzy
msgid "Instant:"
msgstr "Sofort:"
-#: modules/graph/graph_fdfit.c:450 modules/graph/graph_fit.c:488
+#: modules/graph/graph_fdfit.c:457 modules/graph/graph_fit.c:495
#, fuzzy
msgid "esti_mate"
msgstr "_Abschätzung"
-#: modules/graph/graph_fdfit.c:457 modules/graph/graph_fit.c:495
-#: modules/volume/volume_fdfit.c:542
+#: modules/graph/graph_fdfit.c:464 modules/graph/graph_fit.c:502
+#: modules/volume/volume_fdfit.c:518
msgid "p_lot"
msgstr ""
-#: modules/graph/graph_fdfit.c:708 modules/graph/graph_fit.c:762
-#: modules/volume/volume_fdfit.c:906
+#: modules/graph/graph_fdfit.c:724 modules/graph/graph_fit.c:778
+#: modules/volume/volume_fdfit.c:882
#, fuzzy
msgid "Estimate"
msgstr "_Abschätzung"
-#: modules/graph/graph_fdfit.c:1410 modules/graph/graph_fit.c:1547
-#: modules/volume/volume_fdfit.c:1768
+#: modules/graph/graph_fdfit.c:1428 modules/graph/graph_fit.c:1565
+#: modules/volume/volume_fdfit.c:1744
#, fuzzy, c-format
msgid "Residual sum: %g\n"
msgstr "Restsumme: %g\n"
-#: modules/graph/graph_fdfit.c:1413 modules/graph/graph_fit.c:1550
-#: modules/volume/volume_fdfit.c:1771
+#: modules/graph/graph_fdfit.c:1431 modules/graph/graph_fit.c:1568
+#: modules/volume/volume_fdfit.c:1747
msgid "Correlation matrix\n"
msgstr "Korrelationsmatrix\n"
@@ -7218,27 +7411,27 @@ msgstr "_Filter:"
msgid "Remove noise from graph curves"
msgstr "Diagrammkurven nivellieren"
-#: modules/graph/graph_fit.c:181
+#: modules/graph/graph_fit.c:182
msgid "Fit graph with function"
msgstr "Graphen mit Funktion fitten"
-#: modules/graph/graph_fit.c:195
+#: modules/graph/graph_fit.c:196
msgid "/_Fit Function..."
msgstr "/_Funktion fitten..."
-#: modules/graph/graph_fit.c:198
+#: modules/graph/graph_fit.c:199
msgid "Fit a function on graph data"
msgstr "Funktion an Graphen fitten"
-#: modules/graph/graph_fit.c:386
+#: modules/graph/graph_fit.c:393
msgid "Copy all fitted values to estimates"
msgstr ""
-#: modules/graph/graph_fit.c:460
+#: modules/graph/graph_fit.c:467
msgid "Plot full range"
msgstr ""
-#: modules/graph/graph_fit.c:470
+#: modules/graph/graph_fit.c:477
#, fuzzy
msgid "Create a difference graph"
msgstr "Richtungsdifferenz"
@@ -7331,57 +7524,153 @@ msgstr ""
msgid "Find graph curve peaks"
msgstr "Diagrammkurven nivellieren"
-#: modules/graph/graph_peaks.c:157
+#: modules/graph/graph_peaks.c:155
msgid "Prominence"
msgstr ""
-#: modules/graph/graph_peaks.c:161
+#: modules/graph/graph_peaks.c:159
#, fuzzy
msgid "Zero"
msgstr "Auf _Null setzen"
-#: modules/graph/graph_peaks.c:162
+#: modules/graph/graph_peaks.c:160
msgid "Bilateral minimum"
msgstr ""
-#: modules/graph/graph_peaks.c:178
+#: modules/graph/graph_peaks.c:176
#, fuzzy
msgid "Graph Peaks"
msgstr "Graphen"
-#: modules/graph/graph_peaks.c:212
+#: modules/graph/graph_peaks.c:209
#, fuzzy
msgid "_Background type:"
msgstr "Untergrund"
-#: modules/graph/graph_peaks.c:227
+#: modules/graph/graph_peaks.c:219
msgid "Order peaks _by:"
msgstr ""
-#: modules/graph/graph_peaks.c:242
+#: modules/graph/graph_peaks.c:225
#, fuzzy
msgid "Number of _peaks:"
msgstr "A_nzahl an Schritten:"
-#: modules/graph/graph_peaks.c:263 modules/process/curvature.c:773
-#: modules/process/grain_stat.c:360 modules/process/measure_lattice.c:396
-#: modules/process/polylevel.c:607 modules/tools/distance.c:259
-#: modules/tools/roughness.c:818 modules/tools/stats.c:450
+#: modules/graph/graph_peaks.c:245 modules/graph/graph_stats.c:367
+#: modules/process/curvature.c:770 modules/process/grain_stat.c:360
+#: modules/process/measure_lattice.c:390 modules/process/polylevel.c:610
+#: modules/tools/distance.c:259 modules/tools/roughness.c:819
+#: modules/tools/stats.c:447
msgid "Save table to a file"
msgstr "Tabelle in eine Datei speichern"
-#: modules/graph/graph_peaks.c:267 modules/process/curvature.c:778
-#: modules/process/grain_stat.c:365 modules/process/measure_lattice.c:400
-#: modules/process/polylevel.c:617 modules/tools/distance.c:264
-#: modules/tools/roughness.c:823 modules/tools/stats.c:455
+#: modules/graph/graph_peaks.c:249 modules/graph/graph_stats.c:371
+#: modules/process/curvature.c:775 modules/process/grain_stat.c:365
+#: modules/process/measure_lattice.c:394 modules/process/polylevel.c:620
+#: modules/tools/distance.c:264 modules/tools/roughness.c:824
+#: modules/tools/stats.c:452
msgid "Copy table to clipboard"
msgstr "Tabelle in die Zwischenablage kopieren"
-#: modules/graph/graph_peaks.c:654
+#: modules/graph/graph_peaks.c:618
#, fuzzy
msgid "Save Peak Parameters"
msgstr "Rauigkeits-Parameter speichern"
+#: modules/graph/graph_stats.c:148 modules/graph/graph_stats.c:161
+#: modules/tools/stats.c:205
+msgid "Average value:"
+msgstr ""
+
+#: modules/graph/graph_stats.c:149 modules/tools/stats.c:206
+msgid "Median:"
+msgstr "Median:"
+
+#: modules/graph/graph_stats.c:150
+#, fuzzy
+msgid "Ra:"
+msgstr "Realteil"
+
+#: modules/graph/graph_stats.c:151
+msgid "Rms (Rq):"
+msgstr ""
+
+#: modules/graph/graph_stats.c:152 modules/tools/stats.c:210
+msgid "Skew:"
+msgstr ""
+
+#: modules/graph/graph_stats.c:153 modules/tools/stats.c:211
+msgid "Kurtosis:"
+msgstr "Wölbung:"
+
+#: modules/graph/graph_stats.c:158
+#, fuzzy
+msgid "Projected length:"
+msgstr "Projizierte Umrandungslänge"
+
+#: modules/graph/graph_stats.c:159
+msgid "Developed length:"
+msgstr ""
+
+#: modules/graph/graph_stats.c:160 modules/tools/stats.c:214
+#, fuzzy
+msgid "Variation:"
+msgstr "Varianz:"
+
+#: modules/graph/graph_stats.c:162
+#, fuzzy
+msgid "Area under curve:"
+msgstr "_Graph"
+
+#: modules/graph/graph_stats.c:163
+#, fuzzy
+msgid "Positive area:"
+msgstr "Positiv"
+
+#: modules/graph/graph_stats.c:164
+#, fuzzy
+msgid "Negative area:"
+msgstr "Negativ"
+
+#: modules/graph/graph_stats.c:165
+msgid "Root mean square:"
+msgstr ""
+
+#: modules/graph/graph_stats.c:171
+#, fuzzy
+msgid "Calculates simple graph curve statistics."
+msgstr "Einfache Körnungsstatistiken"
+
+#: modules/graph/graph_stats.c:185
+#, fuzzy
+msgid "/_Statistics..."
+msgstr "/_Körnung/_Statistik..."
+
+#: modules/graph/graph_stats.c:188
+#, fuzzy
+msgid "Calculate graph curve statistics"
+msgstr "Statistikfunktionen für Zeile/Spalte berechnen"
+
+#: modules/graph/graph_stats.c:241
+#, fuzzy
+msgid "Graph Statistics"
+msgstr "Korn-Statistiken"
+
+#: modules/graph/graph_stats.c:320 modules/graph/graph_stats.c:807
+#, fuzzy
+msgid "Simple Parameters"
+msgstr "Fit-Parameter"
+
+#: modules/graph/graph_stats.c:342 modules/graph/graph_stats.c:826
+#, fuzzy
+msgid "Integrals"
+msgstr "Interpolationstyp:"
+
+#: modules/graph/graph_stats.c:686
+#, fuzzy
+msgid "Save Curve Statistics"
+msgstr "Korn-Statistiken"
+
#: modules/layer/axis.c:143
msgid "Layer allowing selection of horizontal or vertical lines."
msgstr "Ebene zur Auswahl horizontaler oder vertikaler Linien."
@@ -7527,26 +7816,26 @@ msgstr "Winkelverteilung"
msgid "Angle Distribution"
msgstr "Winkelverteilung"
-#: modules/process/angle_dist.c:188 modules/process/slope_dist.c:373
+#: modules/process/angle_dist.c:188 modules/process/slope_dist.c:365
msgid "Output _size:"
msgstr "Ausgabe_größe:"
-#: modules/process/angle_dist.c:193 modules/process/grain_wshed.c:206
+#: modules/process/angle_dist.c:193 modules/process/grain_wshed.c:207
msgid "_Number of steps:"
msgstr "A_nzahl an Schritten:"
-#: modules/process/angle_dist.c:198 modules/process/slope_dist.c:380
+#: modules/process/angle_dist.c:198 modules/process/slope_dist.c:372
msgid "_Logarithmic value scale"
msgstr "_Logarithmische Skalierung"
#: modules/process/angle_dist.c:204 modules/process/entropy.c:231
-#: modules/process/slope_dist.c:390
+#: modules/process/slope_dist.c:382
#, fuzzy
msgid "Use local plane _fitting"
msgstr "Lokalen Ebenen-_Fit verwenden"
#: modules/process/angle_dist.c:213 modules/process/entropy.c:242
-#: modules/process/slope_dist.c:401
+#: modules/process/slope_dist.c:393
msgid "_Plane size:"
msgstr "_Ebenengröße:"
@@ -7565,7 +7854,8 @@ msgstr "/M_ultidaten/_Arithmetik..."
msgid "Arithmetic operations on data"
msgstr "Arithmetische Operationen"
-#: modules/process/arithmetic.c:202 modules/process/superresolution.c:349
+#: modules/process/arithmetic.c:202 modules/process/stitch.c:234
+#: modules/process/superresolution.c:348
msgid "Calculated"
msgstr ""
@@ -7581,7 +7871,7 @@ msgstr "_Ausdruck:"
msgid "Operands"
msgstr "Operanden"
-#: modules/process/arithmetic.c:300 modules/process/dimensions.h:483
+#: modules/process/arithmetic.c:300 modules/process/dimensions.h:465
msgid "Units"
msgstr "Einheiten"
@@ -7603,15 +7893,15 @@ msgstr ""
msgid "Expression contains unknown identifiers"
msgstr ""
-#: modules/process/arithmetic.c:569 modules/process/superresolution.c:300
+#: modules/process/arithmetic.c:569 modules/process/superresolution.c:299
msgid "Pixel dimensions differ"
msgstr "Pixelgrößen unterscheiden sich"
-#: modules/process/arithmetic.c:571 modules/process/superresolution.c:302
+#: modules/process/arithmetic.c:571 modules/process/superresolution.c:301
msgid "Lateral dimensions are different physical quantities"
msgstr ""
-#: modules/process/arithmetic.c:574 modules/process/superresolution.c:305
+#: modules/process/arithmetic.c:574 modules/process/superresolution.c:304
msgid "Physical dimensions differ"
msgstr ""
@@ -7720,7 +8010,7 @@ msgstr ""
#: modules/process/bdep_synth.c:164
#, fuzzy
-msgid "/S_ynthetic/_Ballistic..."
+msgid "/S_ynthetic/_Deposition/_Ballistic..."
msgstr "/S_ynthetisch/_Partikel..."
#: modules/process/bdep_synth.c:168
@@ -7729,20 +8019,23 @@ msgstr ""
#: modules/process/bdep_synth.c:239 modules/process/bdep_synth.c:596
#: modules/process/calcoefs_simple.c:636 modules/process/col_synth.c:282
-#: modules/process/col_synth.c:733 modules/process/crosscor.c:819
-#: modules/process/crosscor.c:882 modules/process/deposit_synth.c:268
-#: modules/process/deposit_synth.c:859 modules/process/diff_synth.c:304
-#: modules/process/diff_synth.c:705 modules/process/domain_synth.c:255
-#: modules/process/domain_synth.c:745 modules/process/grain_wshed.c:429
+#: modules/process/col_synth.c:734 modules/process/crosscor.c:792
+#: modules/process/crosscor.c:855 modules/process/deposit_synth.c:268
+#: modules/process/deposit_synth.c:858 modules/process/diff_synth.c:304
+#: modules/process/diff_synth.c:704 modules/process/domain_synth.c:255
+#: modules/process/domain_synth.c:745 modules/process/fibre_synth.c:357
+#: modules/process/fibre_synth.c:872 modules/process/grain_wshed.c:433
#: modules/process/lat_synth.c:491 modules/process/mark_disconn.c:148
-#: modules/process/mark_disconn.c:373 modules/process/maskcor.c:330
-#: modules/process/mcrop.c:315 modules/process/merge.c:1072
-#: modules/process/nanoindent_adjust.c:323 modules/process/neural.c:1272
-#: modules/process/pid.c:338 modules/process/superresolution.c:416
-#: modules/process/superresolution.c:505 modules/process/tip_blind.c:781
-#: modules/process/tipops.c:320 modules/process/xydenoise.c:213
-#: modules/volume/volume_kmeans.c:403 modules/volume/volume_kmedians.c:365
-#: modules/xyz/xyz_raster.c:1028 modules/xyz/xyz_raster.c:1044
+#: modules/process/mark_disconn.c:361 modules/process/maskcor.c:334
+#: modules/process/mcrop.c:314 modules/process/merge.c:1072
+#: modules/process/nanoindent_adjust.c:324 modules/process/neural.c:1279
+#: modules/process/pid.c:339 modules/process/sphere-revolve.c:269
+#: modules/process/superresolution.c:415 modules/process/superresolution.c:504
+#: modules/process/tip_blind.c:778 modules/process/tipops.c:320
+#: modules/process/wave_synth.c:305 modules/process/wave_synth.c:747
+#: modules/process/xydenoise.c:214 modules/volume/volume_kmeans.c:397
+#: modules/volume/volume_kmedians.c:363 modules/xyz/xyz_raster.c:997
+#: modules/xyz/xyz_raster.c:1013
msgid "Initializing..."
msgstr "Initialisiere..."
@@ -7751,10 +8044,11 @@ msgstr "Initialisiere..."
#: modules/process/deposit_synth.c:531 modules/process/deposit_synth.c:544
#: modules/process/diff_synth.c:342 modules/process/domain_synth.c:319
#: modules/process/domain_synth.c:327 modules/process/fbm_synth.c:278
-#: modules/process/fft_synth.c:314 modules/process/lat_synth.c:529
-#: modules/process/lno_synth.c:407 modules/process/noise_synth.c:311
-#: modules/process/obj_synth.c:407 modules/process/pat_synth.c:357
-#: modules/process/wave_synth.c:323
+#: modules/process/fft_synth.c:314 modules/process/fibre_synth.c:394
+#: modules/process/lat_synth.c:529 modules/process/lno_synth.c:405
+#: modules/process/noise_synth.c:309 modules/process/obj_synth.c:404
+#: modules/process/pat_synth.c:357 modules/process/phase_synth.c:518
+#: modules/process/wave_synth.c:342
msgid "Generated"
msgstr ""
@@ -7775,54 +8069,61 @@ msgid "Progressive preview"
msgstr ""
#: modules/process/bdep_synth.c:407 modules/process/col_synth.c:458
-#: modules/process/deposit_synth.c:412 modules/process/diff_synth.c:477
+#: modules/process/deposit_synth.c:413 modules/process/diff_synth.c:477
#: modules/process/domain_synth.c:430 modules/process/fbm_synth.c:360
-#: modules/process/fft_synth.c:398 modules/process/lat_synth.c:626
-#: modules/process/lno_synth.c:490 modules/process/noise_synth.c:394
-#: modules/process/obj_synth.c:498 modules/process/pat_synth.c:442
-#: modules/process/wave_synth.c:407
+#: modules/process/fft_synth.c:398 modules/process/fibre_synth.c:479
+#: modules/process/lat_synth.c:626 modules/process/lno_synth.c:488
+#: modules/process/mfm_current.c:383 modules/process/mfm_parallel.c:384
+#: modules/process/noise_synth.c:392 modules/process/obj_synth.c:495
+#: modules/process/pat_synth.c:442 modules/process/phase_synth.c:263
+#: modules/process/wave_synth.c:426
#, fuzzy
msgid "Dimensions"
msgstr "Abmessungen"
#: modules/process/bdep_synth.c:416 modules/process/col_synth.c:467
-#: modules/process/deposit_synth.c:422 modules/process/diff_synth.c:486
+#: modules/process/deposit_synth.c:425 modules/process/diff_synth.c:486
#: modules/process/domain_synth.c:438 modules/process/fbm_synth.c:371
-#: modules/process/fft_synth.c:409 modules/process/lno_synth.c:501
-#: modules/process/noise_synth.c:405 modules/process/obj_synth.c:509
-#: modules/process/pat_synth.c:454 modules/process/wave_synth.c:418
+#: modules/process/fft_synth.c:409 modules/process/fibre_synth.c:490
+#: modules/process/lno_synth.c:499 modules/process/mfm_current.c:412
+#: modules/process/mfm_parallel.c:411 modules/process/noise_synth.c:403
+#: modules/process/obj_synth.c:506 modules/process/pat_synth.c:454
+#: modules/process/phase_synth.c:274 modules/process/wave_synth.c:437
msgid "Generator"
msgstr ""
#: modules/process/bdep_synth.c:422 modules/process/col_synth.c:473
-#: modules/process/diff_synth.c:492 modules/process/lno_synth.c:1041
-#: modules/process/obj_synth.c:520
+#: modules/process/deposit_synth.c:455 modules/process/diff_synth.c:492
+#: modules/process/fibre_synth.c:502 modules/process/lno_synth.c:1041
+#: modules/process/obj_synth.c:518
#, fuzzy
msgid "Co_verage:"
msgstr "_Minimalwert"
#: modules/process/bdep_synth.c:434 modules/process/diff_synth.c:512
-#: modules/process/domain_synth.c:514 modules/process/fbm_synth.c:412
-#: modules/process/fft_synth.c:418 modules/process/lat_synth.c:758
-#: modules/process/lno_synth.c:537 modules/process/noise_synth.c:437
-#: modules/process/obj_synth.c:579 modules/process/wave_synth.c:453
-msgid "_Like Current Channel"
-msgstr ""
+#: modules/process/domain_synth.c:514 modules/process/fbm_synth.c:411
+#: modules/process/fft_synth.c:418 modules/process/fibre_synth.c:544
+#: modules/process/lat_synth.c:758 modules/process/lno_synth.c:535
+#: modules/process/noise_synth.c:435 modules/process/obj_synth.c:577
+#: modules/process/phase_synth.c:302 modules/process/wave_synth.c:472
+#, fuzzy
+msgid "_Like Current Image"
+msgstr "Derzeitiger Kanal"
-#: modules/process/bdep_synth.c:453 modules/process/col_synth.c:541
-#: modules/process/diff_synth.c:562
+#: modules/process/bdep_synth.c:453 modules/process/col_synth.c:542
+#: modules/process/diff_synth.c:561
#, fuzzy
msgid "Evolution"
msgstr "Auflösung"
-#: modules/process/bdep_synth.c:456 modules/process/col_synth.c:544
-#: modules/process/diff_synth.c:565
+#: modules/process/bdep_synth.c:456 modules/process/col_synth.c:545
+#: modules/process/diff_synth.c:564
#, fuzzy
msgid "Plot graphs:"
msgstr "_Graphen zeichnen"
-#: modules/process/bdep_synth.c:654 modules/process/col_synth.c:840
-#: modules/process/diff_synth.c:782
+#: modules/process/bdep_synth.c:654 modules/process/col_synth.c:841
+#: modules/process/diff_synth.c:781
msgid "Depositing particles..."
msgstr ""
@@ -7859,8 +8160,8 @@ msgstr "Kalibrierdaten laden"
msgid "Calibration name:"
msgstr "Kalibrierungs-Name:"
-#: modules/process/calcoefs_load.c:254 modules/volume/volume_extract.c:433
-#: modules/volume/volume_extract.c:514
+#: modules/process/calcoefs_load.c:254 modules/volume/volume_extract.c:421
+#: modules/volume/volume_extract.c:501
msgid "No data loaded"
msgstr "Keine Daten geladen"
@@ -7884,7 +8185,7 @@ msgstr ""
msgid "Load calibration data"
msgstr "Kalibrierungsdaten einladen"
-#: modules/process/calcoefs_load.c:364 modules/volume/volume_extract.c:1073
+#: modules/process/calcoefs_load.c:364 modules/volume/volume_extract.c:1059
#, c-format
msgid "Error loading file '%s'"
msgstr ""
@@ -7979,7 +8280,7 @@ msgstr ""
msgid "Simple Error Map"
msgstr ""
-#: modules/process/calcoefs_simple.c:343 modules/process/calcoefs_stage.c:146
+#: modules/process/calcoefs_simple.c:343 modules/process/calcoefs_stage.c:142
#: modules/process/superresolution.c:156
msgid "Operands:"
msgstr "Operanden:"
@@ -7993,14 +8294,14 @@ msgid "Detail"
msgstr ""
#: modules/process/calcoefs_simple.c:371 modules/process/calcoefs_view.c:491
-#: modules/process/calibrate.c:496 modules/process/crosscor.c:289
-#: modules/volume/volume_calibrate.c:478
+#: modules/process/calibrate.c:481 modules/process/crosscor.c:276
+#: modules/volume/volume_calibrate.c:460
msgid "_X offset:"
msgstr ""
#: modules/process/calcoefs_simple.c:398 modules/process/calcoefs_view.c:517
-#: modules/process/calibrate.c:509 modules/process/crosscor.c:300
-#: modules/volume/volume_calibrate.c:491
+#: modules/process/calibrate.c:488 modules/process/crosscor.c:284
+#: modules/volume/volume_calibrate.c:467
msgid "_Y offset:"
msgstr ""
@@ -8013,7 +8314,7 @@ msgid "Y p_eriod:"
msgstr ""
#: modules/process/calcoefs_simple.c:438 modules/process/calcoefs_view.c:529
-#: modules/volume/volume_calibrate.c:505
+#: modules/volume/volume_calibrate.c:474
msgid "_Z offset:"
msgstr ""
@@ -8045,26 +8346,26 @@ msgstr[1] ""
msgid "Search canceled"
msgstr "Suche abgebrochen"
-#: modules/process/calcoefs_simple.c:638 modules/process/crosscor.c:862
-#: modules/process/maskcor.c:332 modules/process/mcrop.c:317
+#: modules/process/calcoefs_simple.c:638 modules/process/crosscor.c:835
+#: modules/process/maskcor.c:336 modules/process/mcrop.c:316
#: modules/process/merge.c:1074
#, fuzzy
msgid "Correlating..."
msgstr "Korreliere"
-#: modules/process/calcoefs_stage.c:76
+#: modules/process/calcoefs_stage.c:72
msgid "Digital AFM data recalibration"
msgstr ""
-#: modules/process/calcoefs_stage.c:90
+#: modules/process/calcoefs_stage.c:86
msgid "/Cali_bration/_3D Calibration/_Get From Stage map..."
msgstr "/Kali_brierung/_3D-Kalibrierung/_Get From Stage map..."
-#: modules/process/calcoefs_stage.c:94
+#: modules/process/calcoefs_stage.c:90
msgid "Stage error mapping"
msgstr ""
-#: modules/process/calcoefs_stage.c:131
+#: modules/process/calcoefs_stage.c:127
msgid "Stage Error Map"
msgstr ""
@@ -8126,14 +8427,16 @@ msgstr "Maximaler z-Wert"
msgid "Crop to actual data"
msgstr "Daten zuschneiden"
-#: modules/process/calcoefs_view.c:567 modules/process/coerce.c:369
-#: modules/process/deposit_synth.c:641 modules/process/edge.c:705
-#: modules/process/fft_filter_1d.c:299 modules/process/grain_edge.c:290
-#: modules/process/grain_filter.c:347 modules/process/grain_mark.c:372
-#: modules/process/mark_with.c:318 modules/process/polydistort.c:316
-#: modules/process/scars.c:386 modules/process/slope_dist.c:407
-#: modules/process/synth.h:513 modules/volume/volume_extract.c:424
-#: modules/volume/volume_extract.c:505 modules/volume/volume_linestat.c:422
+#: modules/process/calcoefs_view.c:567 modules/process/coerce.c:368
+#: modules/process/deposit_synth.c:642 modules/process/edge.c:705
+#: modules/process/fft_filter_1d.c:301 modules/process/grain_edge.c:277
+#: modules/process/grain_filter.c:346 modules/process/grain_mark.c:357
+#: modules/process/mark_with.c:322 modules/process/mfm_field.c:420
+#: modules/process/mfm_shift.c:216 modules/process/polydistort.c:319
+#: modules/process/psf.c:309 modules/process/scars.c:421
+#: modules/process/slope_dist.c:400 modules/process/synth.h:542
+#: modules/volume/volume_extract.c:411 modules/volume/volume_extract.c:491
+#: modules/volume/volume_linestat.c:427
msgid "I_nstant updates"
msgstr "_Sofort aktualisieren"
@@ -8174,27 +8477,27 @@ msgstr ""
msgid "Building mesh..."
msgstr ""
-#: modules/process/calcoefs_view.c:1120 modules/tools/profile.c:1818
+#: modules/process/calcoefs_view.c:1120 modules/tools/profile.c:1867
msgid "X correction"
msgstr "X-Korrektur"
-#: modules/process/calcoefs_view.c:1121 modules/tools/profile.c:1819
+#: modules/process/calcoefs_view.c:1121 modules/tools/profile.c:1868
msgid "Y correction"
msgstr "Y-Korrektur"
-#: modules/process/calcoefs_view.c:1122 modules/tools/profile.c:1820
+#: modules/process/calcoefs_view.c:1122 modules/tools/profile.c:1869
msgid "Z correction"
msgstr "Z-Korrektur"
-#: modules/process/calcoefs_view.c:1123 modules/tools/profile.c:1821
+#: modules/process/calcoefs_view.c:1123 modules/tools/profile.c:1870
msgid "X uncertainty"
msgstr ""
-#: modules/process/calcoefs_view.c:1124 modules/tools/profile.c:1822
+#: modules/process/calcoefs_view.c:1124 modules/tools/profile.c:1871
msgid "Y uncertainty"
msgstr ""
-#: modules/process/calcoefs_view.c:1125 modules/tools/profile.c:1823
+#: modules/process/calcoefs_view.c:1125 modules/tools/profile.c:1872
msgid "Z uncertainty"
msgstr ""
@@ -8223,80 +8526,81 @@ msgstr "Einrasten am _Ursprung"
msgid "Delaunay"
msgstr "Delaunay"
-#: modules/process/calibrate.c:180
+#: modules/process/calibrate.c:172
msgid "Recalibrates scan lateral dimensions or value range."
msgstr ""
-#: modules/process/calibrate.c:194
+#: modules/process/calibrate.c:186
msgid "/_Basic Operations/_Dimensions and Units..."
msgstr "/_Grundfunktionen/_Abmessungen und Einheiten..."
-#: modules/process/calibrate.c:198 modules/volume/volume_calibrate.c:193
+#: modules/process/calibrate.c:190 modules/volume/volume_calibrate.c:193
msgid "Change physical dimensions, units or value scale"
msgstr ""
-#: modules/process/calibrate.c:357 modules/volume/volume_calibrate.c:355
+#: modules/process/calibrate.c:349 modules/volume/volume_calibrate.c:355
msgid "Recalibrated Data"
msgstr ""
-#: modules/process/calibrate.c:390
+#: modules/process/calibrate.c:382
msgid "Dimensions and Units"
msgstr "Abmessungen und Einheiten"
-#: modules/process/calibrate.c:411 modules/volume/volume_calibrate.c:389
+#: modules/process/calibrate.c:405 modules/volume/volume_calibrate.c:391
msgid "New Real Dimensions"
msgstr ""
-#: modules/process/calibrate.c:417
+#: modules/process/calibrate.c:415
#, fuzzy
msgid "_Match pixel size:"
msgstr "_Punktgröße:"
-#: modules/process/calibrate.c:444 modules/volume/volume_calibrate.c:394
+#: modules/process/calibrate.c:447 modules/volume/volume_calibrate.c:397
msgid "_X range:"
msgstr ""
-#: modules/process/calibrate.c:473 modules/volume/volume_calibrate.c:421
+#: modules/process/calibrate.c:467 modules/volume/volume_calibrate.c:417
msgid "_Y range:"
msgstr ""
-#: modules/process/calibrate.c:489
+#: modules/process/calibrate.c:472
msgid "_Square samples"
msgstr ""
-#: modules/process/calibrate.c:524 modules/volume/volume_calibrate.c:521
+#: modules/process/calibrate.c:496 modules/volume/volume_calibrate.c:480
#, fuzzy
msgid "Value Range"
msgstr "Wertebereich"
-#: modules/process/calibrate.c:529 modules/volume/volume_calibrate.c:448
+#: modules/process/calibrate.c:502 modules/volume/volume_calibrate.c:437
msgid "_Z range:"
msgstr ""
-#: modules/process/calibrate.c:558
+#: modules/process/calibrate.c:524
msgid "Z shi_ft:"
msgstr ""
-#: modules/process/calibrate.c:573 modules/volume/volume_calibrate.c:570
+#: modules/process/calibrate.c:533 modules/volume/volume_calibrate.c:515
msgid "Calibration Coefficients"
msgstr "Kalibrierungs-Koeffizienten"
-#: modules/process/calibrate.c:580 modules/volume/volume_calibrate.c:577
+#: modules/process/calibrate.c:538 modules/volume/volume_calibrate.c:520
msgid "_X calibration factor:"
msgstr "Kalibrierfaktor _X:"
-#: modules/process/calibrate.c:590 modules/volume/volume_calibrate.c:585
+#: modules/process/calibrate.c:545 modules/volume/volume_calibrate.c:527
msgid "_Y calibration factor:"
msgstr "Kalibrierfaktor _Y:"
-#: modules/process/calibrate.c:600 modules/volume/volume_calibrate.c:593
+#: modules/process/calibrate.c:552 modules/volume/volume_calibrate.c:534
msgid "_Z calibration factor:"
msgstr "Kalibrierfaktor _Z:"
-#: modules/process/calibrate.c:613 modules/process/extend.c:293
-#: modules/tools/crop.c:213
-msgid "Create new channel"
-msgstr "Neuen Kanal erzeugen"
+#: modules/process/calibrate.c:567 modules/process/drift.c:389
+#: modules/process/extend.c:293 modules/tools/crop.c:213
+#, fuzzy
+msgid "Create new image"
+msgstr "Ein neues Element erzeugen"
#: modules/process/coerce.c:159
msgid "Transforms surfaces to have prescribed statistical properties."
@@ -8316,14 +8620,14 @@ msgid "Coerced"
msgstr ""
#: modules/process/coerce.c:225 modules/process/coerce.c:326
-#: modules/process/fbm_synth.c:475 modules/process/lno_synth.c:256
-#: modules/process/noise_synth.c:183
+#: modules/process/fbm_synth.c:474 modules/process/lno_synth.c:254
+#: modules/process/noise_synth.c:181
#, fuzzy
msgid "distribution|Uniform"
msgstr "Winkelverteilung"
-#: modules/process/coerce.c:226 modules/process/fbm_synth.c:476
-#: modules/process/lno_synth.c:246 modules/process/noise_synth.c:173
+#: modules/process/coerce.c:226 modules/process/fbm_synth.c:475
+#: modules/process/lno_synth.c:244 modules/process/noise_synth.c:171
msgid "distribution|Gaussian"
msgstr "Gauß"
@@ -8382,12 +8686,12 @@ msgid "Number of maxima"
msgstr "Anzahl an Körnern"
#: modules/process/col_synth.c:173 modules/tools/linestats.c:178
-#: modules/volume/volume_linestat.c:154
+#: modules/volume/volume_linestat.c:156
msgid "Skew"
msgstr ""
#: modules/process/col_synth.c:174 modules/tools/linestats.c:179
-#: modules/tools/roughness.c:386 modules/volume/volume_linestat.c:155
+#: modules/tools/roughness.c:387 modules/volume/volume_linestat.c:157
msgid "Kurtosis"
msgstr ""
@@ -8402,7 +8706,7 @@ msgstr ""
#: modules/process/col_synth.c:208
#, fuzzy
-msgid "/S_ynthetic/_Columnar..."
+msgid "/S_ynthetic/_Deposition/_Columnar..."
msgstr "/S_ynthetisch/_Muster..."
#: modules/process/col_synth.c:212
@@ -8428,7 +8732,7 @@ msgstr ""
msgid "Inclination"
msgstr "Kreuzungen"
-#: modules/process/col_synth.c:509 modules/process/crosscor.c:1063
+#: modules/process/col_synth.c:509 modules/process/crosscor.c:1036
#, fuzzy
msgid "Direction"
msgstr "Richtung:"
@@ -8438,16 +8742,16 @@ msgstr "Richtung:"
msgid "Relaxation type:"
msgstr "_Interpolationstyp:"
-#: modules/process/col_synth.c:528
+#: modules/process/col_synth.c:529
#, fuzzy
msgid "_Melting:"
msgstr "_Skala:"
-#: modules/process/col_synth.c:612
+#: modules/process/col_synth.c:613
msgid "Weak"
msgstr ""
-#: modules/process/col_synth.c:613
+#: modules/process/col_synth.c:614
msgid "Strong"
msgstr ""
@@ -8482,8 +8786,8 @@ msgstr "Genereller Faltungsfilter"
msgid "Convolution Filter"
msgstr "Faltungsfilter"
-#: modules/process/convolution_filter.c:269 modules/tools/filter.c:170
-#: modules/tools/filter.c:274
+#: modules/process/convolution_filter.c:269 modules/tools/filter.c:171
+#: modules/tools/filter.c:275
msgid "Filter"
msgstr "Filter"
@@ -8511,119 +8815,128 @@ msgstr "HSym"
msgid "VSym"
msgstr "VSym"
-#: modules/process/correct_affine.c:231
+#: modules/process/correct_affine.c:220
msgid ""
"Corrects affine distortion of images by matching image Bravais lattice to "
"the true one."
msgstr ""
-#: modules/process/correct_affine.c:246
+#: modules/process/correct_affine.c:235
#, fuzzy
msgid "/_Distortion/_Affine..."
msgstr "/_Präsentation/_Schattierung..."
-#: modules/process/correct_affine.c:250
+#: modules/process/correct_affine.c:239
#, fuzzy
msgid "Correct affine distortion"
msgstr "Berechne Winkelverteilung"
-#: modules/process/correct_affine.c:298
+#: modules/process/correct_affine.c:309 modules/process/correct_affine.c:634
+#, fuzzy
+msgid "Corrected"
+msgstr "Korrigier_te Daten"
+
+#: modules/process/correct_affine.c:343
#, fuzzy
msgid "Affine Correction"
msgstr "/Ko_rrigieren/_Median Zeilenkorrektur"
-#: modules/process/correct_affine.c:351 modules/process/fft_filter_2d.c:530
+#: modules/process/correct_affine.c:349 modules/process/measure_lattice.c:249
+msgid "_Refine"
+msgstr ""
+
+#: modules/process/correct_affine.c:399 modules/process/fft_filter_2d.c:530
msgid "Preview Options"
msgstr "Vorschau-Optionen"
-#: modules/process/correct_affine.c:356 modules/process/fft_filter_2d.c:535
-#: modules/process/measure_lattice.c:321
+#: modules/process/correct_affine.c:404 modules/process/fft_filter_2d.c:535
+#: modules/process/measure_lattice.c:311
#, fuzzy
msgid "Display:"
msgstr "_Anzeige:"
-#: modules/process/correct_affine.c:364 modules/process/measure_lattice.c:329
+#: modules/process/correct_affine.c:412 modules/process/measure_lattice.c:319
#: modules/tools/grainremover.c:109
msgid "_Data"
msgstr "_Daten"
-#: modules/process/correct_affine.c:365
+#: modules/process/correct_affine.c:413
msgid "2D _ACF"
msgstr ""
-#: modules/process/correct_affine.c:366 modules/process/drift.c:365
+#: modules/process/correct_affine.c:414 modules/process/drift.c:364
msgid "Correc_ted data"
msgstr "Korrigier_te Daten"
-#: modules/process/correct_affine.c:377
+#: modules/process/correct_affine.c:425
msgid "ACF zoom:"
msgstr ""
-#: modules/process/correct_affine.c:394 modules/process/measure_lattice.c:372
+#: modules/process/correct_affine.c:442 modules/process/measure_lattice.c:346
+#, fuzzy
+msgid "Interpolate _horizontal ACF"
+msgstr "Interpolationstyp:"
+
+#: modules/process/correct_affine.c:452 modules/process/measure_lattice.c:372
msgid "Lattice Vectors"
msgstr ""
#. TRANSLATORS: Correct is an adjective here.
-#: modules/process/correct_affine.c:419
+#: modules/process/correct_affine.c:469
#, fuzzy
msgid "Correct Lattice"
msgstr "Daten _korrigieren"
-#: modules/process/correct_affine.c:423
+#: modules/process/correct_affine.c:473
#, fuzzy
msgid "_Lattice type:"
msgstr "_Linientyp:"
-#: modules/process/correct_affine.c:430
+#: modules/process/correct_affine.c:480
msgid "User defined"
msgstr ""
-#: modules/process/correct_affine.c:445
+#: modules/process/correct_affine.c:495
#, fuzzy
msgid "_Different lengths"
msgstr "Differenz"
-#: modules/process/correct_affine.c:474
+#: modules/process/correct_affine.c:524
msgid "Image for _ACF:"
msgstr ""
-#: modules/process/correct_affine.c:501
+#: modules/process/correct_affine.c:551
#, fuzzy
msgid "_Scaling:"
msgstr "_Skala:"
-#: modules/process/correct_affine.c:508
+#: modules/process/correct_affine.c:558
msgid "Exactly as specified"
msgstr ""
-#: modules/process/correct_affine.c:509
+#: modules/process/correct_affine.c:560
#, fuzzy
msgid "Preserve area"
msgstr "Projizierte Fläche"
-#: modules/process/correct_affine.c:510
+#: modules/process/correct_affine.c:562
msgid "Preserve X scale"
msgstr ""
-#: modules/process/correct_affine.c:561
-#, fuzzy
-msgid "Corrected"
-msgstr "Korrigier_te Daten"
+#: modules/process/correct_affine.c:571 modules/process/drift.c:379
+msgid "_Apply to all compatible images"
+msgstr ""
-#: modules/process/correct_affine.c:617 modules/process/measure_lattice.c:489
+#: modules/process/correct_affine.c:693 modules/process/measure_lattice.c:482
#, fuzzy
msgid "length"
msgstr "Länge"
-#: modules/process/correct_affine.c:624 modules/process/measure_lattice.c:496
+#: modules/process/correct_affine.c:700 modules/process/measure_lattice.c:489
#, fuzzy
msgid "angle"
msgstr "Winkel"
-#: modules/process/correct_affine.c:717
-msgid "Re_fine"
-msgstr ""
-
#: modules/process/crosscor.c:157
msgid "Calculates cross-correlation of two data fields."
msgstr "Berechnet Kreuzkorrelation zweier Datenfelder."
@@ -8649,217 +8962,219 @@ msgstr "Ko_rrelieren mit:"
msgid "Search size"
msgstr "Such-Größe"
-#: modules/process/crosscor.c:272
-msgid "Global offset of 2nd channel"
+#: modules/process/crosscor.c:267
+msgid "_Guess"
msgstr ""
-#: modules/process/crosscor.c:277
-msgid "_Guess"
+#: modules/process/crosscor.c:268
+msgid "Global offset of 2nd channel"
msgstr ""
-#: modules/process/crosscor.c:311
+#: modules/process/crosscor.c:292
msgid "Window size"
msgstr "Fenstergröße"
-#: modules/process/crosscor.c:319
+#: modules/process/crosscor.c:300
msgid "W_idth:"
msgstr "_Breite:"
-#: modules/process/crosscor.c:329
+#: modules/process/crosscor.c:308
msgid "Hei_ght:"
msgstr "_Höhe:"
-#: modules/process/crosscor.c:342 modules/process/fft.c:405
+#: modules/process/crosscor.c:319 modules/process/fft.c:403
#: modules/process/psdf_logphi.c:268
#, fuzzy
msgid "_Windowing type:"
msgstr "_Randausblendungsmethode"
-#: modules/process/crosscor.c:350
+#: modules/process/crosscor.c:327
msgid "All"
msgstr ""
-#: modules/process/crosscor.c:351
+#: modules/process/crosscor.c:328
#, fuzzy
msgid "Absolute"
msgstr "Absolut"
-#: modules/process/crosscor.c:352
+#: modules/process/crosscor.c:329
msgid "X Distance"
msgstr "X Abstand"
-#: modules/process/crosscor.c:353
+#: modules/process/crosscor.c:330
msgid "Y Distance"
msgstr "Y Abstand"
-#: modules/process/crosscor.c:355 modules/process/crosscor.c:1077
+#: modules/process/crosscor.c:332 modules/process/crosscor.c:1050
msgid "Score"
msgstr ""
-#: modules/process/crosscor.c:357 modules/process/fft.c:395
-#: modules/process/fit-shape.c:688 modules/process/maskcor.c:176
+#: modules/process/crosscor.c:334 modules/process/fft.c:393
+#: modules/process/fit-shape.c:699 modules/process/maskcor.c:177
+#: modules/process/mfm_current.c:455 modules/process/mfm_field.c:373
+#: modules/process/mfm_parallel.c:466
msgid "Output _type:"
msgstr "Ausgabe_art:"
-#: modules/process/crosscor.c:363
+#: modules/process/crosscor.c:340
msgid "Add _low score results mask"
msgstr ""
-#: modules/process/crosscor.c:374 modules/process/grain_wshed.c:223
-#: modules/process/maskcor.c:188
+#: modules/process/crosscor.c:351 modules/process/grain_wshed.c:225
+#: modules/process/maskcor.c:191
msgid "T_hreshold:"
msgstr "_Schwellwert:"
-#: modules/process/crosscor.c:381
+#: modules/process/crosscor.c:359
#, fuzzy
msgid "Multichannel cross-corelation"
msgstr "/M_ultidaten/_Kreuzkorrelation..."
-#: modules/process/crosscor.c:400
+#: modules/process/crosscor.c:378
#, fuzzy
msgid "Second _source data:"
msgstr "Nivellierte Daten"
-#: modules/process/crosscor.c:417
+#: modules/process/crosscor.c:394
#, fuzzy
msgid "Correlate with:"
msgstr "Ko_rrelieren mit:"
-#: modules/process/crosscor.c:424
+#: modules/process/crosscor.c:402
#, fuzzy
msgid "Postprocess:"
msgstr "Daten aufbereiten"
-#: modules/process/crosscor.c:431
-msgid "Apply Ga_ussian filter of width: "
+#: modules/process/crosscor.c:411
+msgid "Apply Ga_ussian filter of width:"
msgstr ""
-#: modules/process/crosscor.c:451
+#: modules/process/crosscor.c:424
msgid "Extend results to borders"
msgstr ""
-#: modules/process/crosscor.c:461
+#: modules/process/crosscor.c:433
msgid "Create corrected data from 2nd channel"
msgstr ""
-#: modules/process/crosscor.c:860
+#: modules/process/crosscor.c:833
#, fuzzy
msgid "Correlating first set..."
msgstr "Korreliere..."
-#: modules/process/crosscor.c:892
+#: modules/process/crosscor.c:865
#, fuzzy
msgid "Correlating second set..."
msgstr "Korreliere..."
-#: modules/process/crosscor.c:999
+#: modules/process/crosscor.c:972
#, fuzzy
msgid "Corrected 2nd channel"
msgstr "Neuen Kanal erzeugen"
-#: modules/process/crosscor.c:1023
+#: modules/process/crosscor.c:996
msgid "X difference"
msgstr "X Differenz"
-#: modules/process/crosscor.c:1037
+#: modules/process/crosscor.c:1010
msgid "Y difference"
msgstr "Y Differenz"
-#: modules/process/crosscor.c:1050
+#: modules/process/crosscor.c:1023
msgid "Absolute difference"
msgstr "Absolute Differenz"
-#: modules/process/curvature.c:131
+#: modules/process/curvature.c:130
#, fuzzy
msgid "Center value"
msgstr "Zentraler Wert"
-#: modules/process/curvature.c:132
+#: modules/process/curvature.c:131
#, fuzzy
msgid "Curvature radius 1"
msgstr "Krümmungsradius 1"
-#: modules/process/curvature.c:133
+#: modules/process/curvature.c:132
#, fuzzy
msgid "Curvature radius 2"
msgstr "Krümmungsradius 2"
-#: modules/process/curvature.c:134
+#: modules/process/curvature.c:133
#, fuzzy
msgid "Direction 1"
msgstr "Richtung 1"
-#: modules/process/curvature.c:135
+#: modules/process/curvature.c:134
#, fuzzy
msgid "Direction 2"
msgstr "Richtung 2"
-#: modules/process/curvature.c:163
+#: modules/process/curvature.c:162
msgid "Calculates overall curvature."
msgstr ""
-#: modules/process/curvature.c:177
+#: modules/process/curvature.c:176
#, fuzzy
msgid "/_Level/_Curvature..."
msgstr "/_Nivellierung/_Krümmung..."
-#: modules/process/curvature.c:181
+#: modules/process/curvature.c:180
msgid "Calculate overall curvature"
msgstr ""
-#: modules/process/curvature.c:211 modules/process/facet-level.c:118
+#: modules/process/curvature.c:210 modules/process/facet-level.c:118
#: modules/process/semsim.c:165
#, c-format
msgid "%s: Lateral dimensions and value must be the same physical quantity."
msgstr ""
-#: modules/process/curvature.c:445
+#: modules/process/curvature.c:447
#, fuzzy
msgid "Curvature Sections"
msgstr "Krümmungsabschnitte"
-#: modules/process/curvature.c:653
+#: modules/process/curvature.c:655
#, fuzzy
msgid "Output Type"
msgstr "Ausgabe_art:"
-#: modules/process/curvature.c:660
+#: modules/process/curvature.c:662
#, fuzzy
msgid "_Set selection"
msgstr "_Auswahlmodus:"
-#: modules/process/curvature.c:670
+#: modules/process/curvature.c:672
#, fuzzy
msgid "_Plot graph"
msgstr "_Graphen zeichnen"
-#: modules/process/curvature.c:685 modules/process/drift.c:337
-#: modules/process/fft_profile.c:310 modules/process/fractal.c:328
-#: modules/process/grain_cross.c:253 modules/process/linematch.c:885
-#: modules/process/slope_dist.c:349 modules/tools/linestats.c:418
-#: modules/tools/profile.c:573 modules/tools/roughness.c:872
-#: modules/tools/sfunctions.c:486 modules/tools/spectro.c:382
-#: modules/volume/volume_slice.c:398
-#, fuzzy
-msgid "Target _graph:"
-msgstr "_Graphen zeichnen"
-
-#: modules/process/curvature.c:691 modules/process/drift.c:343
-#: modules/process/fft_profile.c:316 modules/process/fractal.c:334
-#: modules/process/grain_cross.c:259 modules/process/linematch.c:892
-#: modules/process/slope_dist.c:355 modules/tools/linestats.c:424
-#: modules/tools/profile.c:579 modules/tools/roughness.c:878
-#: modules/tools/sfunctions.c:492 modules/tools/spectro.c:388
-#: modules/volume/volume_slice.c:406
+#: modules/process/curvature.c:684 modules/process/drift.c:340
+#: modules/process/fft_profile.c:300 modules/process/fractal.c:308
+#: modules/process/grain_cross.c:260 modules/process/linematch.c:855
+#: modules/process/slope_dist.c:347 modules/tools/linestats.c:424
+#: modules/tools/profile.c:559 modules/tools/roughness.c:886
+#: modules/tools/sfunctions.c:488 modules/tools/spectro.c:391
+#: modules/volume/volume_slice.c:408
#, fuzzy
msgid "New graph"
msgstr "Graph"
-#: modules/process/curvature.c:951
+#: modules/process/curvature.c:689 modules/process/drift.c:345
+#: modules/process/fft_profile.c:306 modules/process/fractal.c:313
+#: modules/process/grain_cross.c:254 modules/process/linematch.c:860
+#: modules/process/slope_dist.c:352 modules/tools/linestats.c:418
+#: modules/tools/profile.c:563 modules/tools/roughness.c:890
+#: modules/tools/sfunctions.c:492 modules/tools/spectro.c:385
+#: modules/volume/volume_slice.c:400
+#, fuzzy
+msgid "Target _graph:"
+msgstr "_Graphen zeichnen"
+
+#: modules/process/curvature.c:949
msgid "Axes are outside the image."
msgstr ""
-#: modules/process/curvature.c:1018
+#: modules/process/curvature.c:1016
#, fuzzy
msgid "Save Curvature"
msgstr "Krümmung speichern"
@@ -8884,8 +9199,8 @@ msgstr "CWT"
msgid "2D CWT"
msgstr "2D-CWT"
-#: modules/process/cwt.c:158 modules/process/dwt.c:185
-#: modules/process/dwtanisotropy.c:209
+#: modules/process/cwt.c:159 modules/process/dwt.c:185
+#: modules/process/dwtanisotropy.c:212
msgid "_Wavelet type:"
msgstr "_Wavelet-Typ:"
@@ -8894,94 +9209,90 @@ msgid "Generates particles using simple dynamical model"
msgstr ""
#: modules/process/deposit_synth.c:184
-msgid "/S_ynthetic/_Particles..."
+#, fuzzy
+msgid "/S_ynthetic/_Deposition/_Particles..."
msgstr "/S_ynthetisch/_Partikel..."
#: modules/process/deposit_synth.c:188
msgid "Generate particles using dynamical model"
msgstr ""
-#: modules/process/deposit_synth.c:288 modules/process/deposit_synth.c:867
+#: modules/process/deposit_synth.c:288 modules/process/deposit_synth.c:866
#, c-format
msgid ""
"Not all the particles could be deposited (%u),\n"
"try more revise steps."
msgstr ""
-#: modules/process/deposit_synth.c:347
+#: modules/process/deposit_synth.c:348
#, fuzzy
msgid "Particle Generation"
msgstr "Partikelerzeugung"
-#: modules/process/deposit_synth.c:427
+#: modules/process/deposit_synth.c:431
#, fuzzy
msgid "Particle r_adius:"
msgstr "_Pixel-Radius:"
-#: modules/process/deposit_synth.c:438
+#: modules/process/deposit_synth.c:443
#, fuzzy
msgid "Distribution _width:"
msgstr "_Verteilung:"
-#: modules/process/deposit_synth.c:449
-#, fuzzy
-msgid "Surface _coverage:"
-msgstr "Oberflächen-Flächeninhalt:"
-
-#: modules/process/deposit_synth.c:458
+#: modules/process/deposit_synth.c:462
#, fuzzy
msgid "_Relax steps:"
msgstr "_Interpolationstyp:"
-#: modules/process/deposit_synth.c:659 modules/process/synth.h:548
+#: modules/process/deposit_synth.c:660 modules/process/synth.h:577
msgid "R_andom seed:"
msgstr ""
-#: modules/process/deposit_synth.c:665 modules/process/synth.h:554
+#: modules/process/deposit_synth.c:666 modules/process/synth.h:583
#, fuzzy
msgid "seed|_New"
msgstr "_Neu"
-#: modules/process/deposit_synth.c:676
+#: modules/process/deposit_synth.c:677
msgid "Randomize"
msgstr ""
-#: modules/process/deposit_synth.c:860 modules/process/domain_synth.c:919
+#: modules/process/deposit_synth.c:859 modules/process/domain_synth.c:919
#, fuzzy
msgid "Running computation..."
msgstr "Triangulation..."
-#: modules/process/deposit_synth.c:865
+#: modules/process/deposit_synth.c:864
#, c-format
msgid "%d particles were deposited"
msgstr ""
-#: modules/process/deposit_synth.c:1093
+#: modules/process/deposit_synth.c:1092
msgid "Initial particle set..."
msgstr ""
-#: modules/process/deposit_synth.c:1252
+#: modules/process/deposit_synth.c:1251
msgid "Running revise..."
msgstr ""
-#: modules/process/deposit_synth.c:1380
+#: modules/process/deposit_synth.c:1379
msgid "Error: too many particles."
msgstr ""
-#: modules/process/deposit_synth.c:1382
+#: modules/process/deposit_synth.c:1381
msgid "Error: no particles."
msgstr ""
-#: modules/process/deposit_synth.c:1384
+#: modules/process/deposit_synth.c:1383
msgid "Error: particles too large."
msgstr ""
-#: modules/process/deposit_synth.c:1386
+#: modules/process/deposit_synth.c:1385
msgid "Error: particles too small."
msgstr ""
#: modules/process/diff_synth.c:197 modules/tools/linestats.c:173
-#: modules/volume/volume_linestat.c:149
+#: modules/volume/volume_linestat.c:151
#, fuzzy
msgid "Variation"
msgstr "Dilatation"
@@ -8997,7 +9308,7 @@ msgstr ""
#: modules/process/diff_synth.c:228
#, fuzzy
-msgid "/S_ynthetic/_Diffusion..."
+msgid "/S_ynthetic/_Deposition/_Diffusion..."
msgstr "/S_ynthetisch/_Rauschen..."
#: modules/process/diff_synth.c:232
@@ -9012,49 +9323,49 @@ msgstr ""
msgid "_Flux:"
msgstr ""
-#: modules/process/diff_synth.c:522
+#: modules/process/diff_synth.c:521
msgid "Probabilities"
msgstr ""
-#: modules/process/diff_synth.c:530
+#: modules/process/diff_synth.c:529
#, fuzzy
msgid "_Sticking:"
msgstr "_Skala:"
-#: modules/process/diff_synth.c:539
+#: modules/process/diff_synth.c:538
#, fuzzy
msgid "_Activation:"
msgstr "_Operator:"
-#: modules/process/diff_synth.c:548
+#: modules/process/diff_synth.c:547
msgid "Passing Sch_woebel:"
msgstr ""
-#: modules/process/dimensions.h:457
+#: modules/process/dimensions.h:439
#, fuzzy
msgid "S_quare image"
msgstr "Quadrat"
-#: modules/process/dimensions.h:489
+#: modules/process/dimensions.h:473
#, fuzzy
msgid "_Dimension units:"
msgstr "<b>Physische Ausmaße</b>"
-#: modules/process/dimensions.h:502
+#: modules/process/dimensions.h:488
#, fuzzy
-msgid "Current Channel"
+msgid "Current Image"
msgstr "Derzeitiger Kanal"
-#: modules/process/dimensions.h:506
-msgid "_Take Dimensions from Current Channel"
+#: modules/process/dimensions.h:492
+msgid "_Take Dimensions from Current Image"
msgstr ""
-#: modules/process/dimensions.h:514
-msgid "_Replace the current channel"
+#: modules/process/dimensions.h:501
+msgid "_Replace the current image"
msgstr ""
-#: modules/process/dimensions.h:523
-msgid "_Start from the current channel"
+#: modules/process/dimensions.h:510
+msgid "_Start from the current image"
msgstr ""
#: modules/process/domain_synth.c:158
@@ -9121,13 +9432,13 @@ msgid "_Monte Carlo time step:"
msgstr "_Interpolationstyp:"
#: modules/process/domain_synth.c:504 modules/process/fft_filter_2d.c:586
-#: modules/volume/volume_slice.c:364
+#: modules/volume/volume_slice.c:366
msgid "Output Options"
msgstr "Ausgabe-Optionen"
#: modules/process/domain_synth.c:523 modules/process/fft_filter_2d.c:591
-#: modules/process/mask_edt.c:377 modules/process/slope_dist.c:323
-#: modules/volume/volume_linestat.c:432 modules/volume/volume_slice.c:384
+#: modules/process/mask_edt.c:211 modules/process/slope_dist.c:323
+#: modules/volume/volume_linestat.c:437 modules/volume/volume_slice.c:386
#, fuzzy
msgid "Output type:"
msgstr "Ausgabe_art:"
@@ -9159,61 +9470,51 @@ msgstr "Such-Größe"
msgid "rows"
msgstr "Zeilen"
-#: modules/process/drift.c:304
+#: modules/process/drift.c:305
#, fuzzy
msgid "Correct _data"
msgstr "Daten _korrigieren"
-#: modules/process/drift.c:314
+#: modules/process/drift.c:315
msgid "_Exclude linear skew"
msgstr "Linearen _Versatz nicht berücksichtigen"
-#: modules/process/drift.c:324
+#: modules/process/drift.c:325
msgid "Plot drift _graph"
msgstr "Drift-Graph zeichnen"
-#: modules/process/drift.c:356 modules/process/fit-shape.c:693
-#: modules/process/neural.c:548 modules/process/polydistort.c:275
+#: modules/process/drift.c:355 modules/process/fit-shape.c:705
+#: modules/process/neural.c:552 modules/process/polydistort.c:278
msgid "Preview:"
msgstr "Vorschau:"
-#: modules/process/drift.c:366
+#: modules/process/drift.c:365
msgid "Drift _lines"
msgstr "Drift-_Linien"
-#: modules/process/drift.c:374 modules/process/facet_analysis.c:407
-#: modules/process/grain_edge.c:285 modules/process/grain_filter.c:357
-#: modules/process/grain_mark.c:367 modules/process/grain_wshed.c:267
-#: modules/process/mark_disconn.c:310 modules/process/scars.c:381
+#: modules/process/drift.c:373 modules/process/facet_analysis.c:390
+#: modules/process/grain_edge.c:272 modules/process/grain_filter.c:356
+#: modules/process/grain_mark.c:341 modules/process/grain_wshed.c:271
+#: modules/process/mark_disconn.c:298 modules/process/scars.c:405
#: modules/process/wpour_mark.c:369
msgid "_Mask color:"
msgstr "_Maskenfarbe:"
-#: modules/process/drift.c:379
-#, fuzzy
-msgid "Distribute"
-msgstr "VerzerrtVerteilung"
-
-#: modules/process/drift.c:388
-#, fuzzy
-msgid "Replace"
-msgstr "Datei ersetzen?"
-
-#: modules/process/drift.c:569
+#: modules/process/drift.c:570
#, fuzzy
msgid "Drift-corrected"
msgstr "Korrigierte Daten driften"
-#: modules/process/drift.c:613
+#: modules/process/drift.c:614
msgid "Drift"
msgstr ""
-#: modules/process/drift.c:614 modules/xyz/xyz_drift.c:392
+#: modules/process/drift.c:615 modules/xyz/xyz_drift.c:392
#: modules/xyz/xyz_drift.c:411 modules/xyz/xyz_drift.c:430
msgid "drift"
msgstr ""
-#: modules/process/drift.c:620 modules/xyz/xyz_drift.c:402
+#: modules/process/drift.c:621 modules/xyz/xyz_drift.c:402
#, fuzzy
msgid "x-axis drift"
msgstr "Drift in X-Richtung"
@@ -9272,11 +9573,11 @@ msgstr "DWT Anisotropie"
msgid "2D DWT Anisotropy"
msgstr "2D DWT Anisotropie"
-#: modules/process/dwtanisotropy.c:214
+#: modules/process/dwtanisotropy.c:218
msgid "X/Y ratio threshold:"
msgstr "Schwellwert für X/Y Verhältnis:"
-#: modules/process/dwtanisotropy.c:222
+#: modules/process/dwtanisotropy.c:226
#, fuzzy
msgid "Low level exclude limit:"
msgstr "Untere Grenze:"
@@ -9424,7 +9725,7 @@ msgstr "Nulldurchgangs-Kantenerkennung"
msgid "_Gaussian FWHM:"
msgstr "_Gauss'sche Halbwertsbreite"
-#: modules/process/edge.c:681 modules/process/mark_disconn.c:271
+#: modules/process/edge.c:681 modules/process/mark_disconn.c:272
msgid "_Threshold:"
msgstr "_Schwellwert:"
@@ -9496,12 +9797,12 @@ msgstr ""
msgid "Entropy deficit:"
msgstr ""
-#: modules/process/entropy.c:567
+#: modules/process/entropy.c:568
#, fuzzy
msgid "Entropy at scales"
msgstr "_Skala:"
-#: modules/process/entropy.c:586
+#: modules/process/entropy.c:587
#, fuzzy
msgid "Best estimate"
msgstr "_Abschätzung"
@@ -9556,23 +9857,23 @@ msgstr "Rechts"
msgid "Extend _symetrically"
msgstr "Symmetrie"
-#: modules/process/extend.c:268 modules/process/polydistort.c:256
-#: modules/xyz/xyz_raster.c:658
+#: modules/process/extend.c:268 modules/process/polydistort.c:259
+#: modules/xyz/xyz_raster.c:627
msgid "exterior|Border"
msgstr ""
-#: modules/process/extend.c:270 modules/process/polydistort.c:258
-#: modules/xyz/xyz_raster.c:660
+#: modules/process/extend.c:270 modules/process/polydistort.c:261
+#: modules/xyz/xyz_raster.c:629
msgid "exterior|Mirror"
msgstr ""
-#: modules/process/extend.c:272 modules/process/polydistort.c:260
-#: modules/xyz/xyz_raster.c:662
+#: modules/process/extend.c:272 modules/process/polydistort.c:263
+#: modules/xyz/xyz_raster.c:631
msgid "exterior|Periodic"
msgstr "Periodisch"
-#: modules/process/extend.c:275 modules/process/polydistort.c:263
-#: modules/xyz/xyz_raster.c:650
+#: modules/process/extend.c:275 modules/process/polydistort.c:266
+#: modules/xyz/xyz_raster.c:619
msgid "_Exterior type:"
msgstr ""
@@ -9610,12 +9911,12 @@ msgstr "Anzahl an Körnern"
msgid "There is no path selection."
msgstr "Auswahl als Maske setzen"
-#: modules/process/extract_path.c:189 modules/volume/volume_extract.c:390
+#: modules/process/extract_path.c:189 modules/volume/volume_extract.c:383
#, fuzzy
msgid "X position"
msgstr "Maximaler z-Wert"
-#: modules/process/extract_path.c:193 modules/volume/volume_extract.c:397
+#: modules/process/extract_path.c:193 modules/volume/volume_extract.c:389
#, fuzzy
msgid "Y position"
msgstr "Maximaler z-Wert"
@@ -9629,7 +9930,7 @@ msgid "Y tangent"
msgstr ""
#: modules/process/extract_path.c:392 modules/process/extract_path.c:404
-#: modules/process/pat_synth.c:1432 modules/tools/distance.c:146
+#: modules/process/pat_synth.c:1433 modules/tools/distance.c:146
msgid "Distance"
msgstr "Abstand"
@@ -9677,51 +9978,39 @@ msgstr "/_Statistik/Facetten-_Analyse"
msgid "Mark areas by 2D slope"
msgstr "Gebiete mit 2D Neigung markieren"
-#: modules/process/facet_analysis.c:266
+#: modules/process/facet_analysis.c:270
msgid "Mark Facets"
msgstr "Facetten markieren"
-#: modules/process/facet_analysis.c:269
+#: modules/process/facet_analysis.c:273
#, fuzzy
msgid "verb|_Mark"
msgstr "_Markieren"
#. TRANSLATORS: The direction or line orthogonal to something.
-#: modules/process/facet_analysis.c:325
+#: modules/process/facet_analysis.c:329
msgid "Normal"
msgstr "Normal"
-#: modules/process/facet_analysis.c:333
+#: modules/process/facet_analysis.c:337
msgid "_Find Maximum"
msgstr "Maximum _finden"
-#: modules/process/facet_analysis.c:341
+#: modules/process/facet_analysis.c:345
#, fuzzy
msgid "Mean Normal"
msgstr "Normal"
-#: modules/process/facet_analysis.c:350
+#: modules/process/facet_analysis.c:362
#, fuzzy
msgid "Facet plane size:"
msgstr "_Punktgröße:"
-#: modules/process/facet_analysis.c:375
+#: modules/process/facet_analysis.c:370
msgid "_Tolerance:"
msgstr "_Toleranz:"
-#: modules/process/facet_analysis.c:384 modules/process/grain_edge.c:262
-#: modules/process/grain_mark.c:344 modules/process/mark_disconn.c:286
-#, fuzzy
-msgid "Com_bine with existing mask"
-msgstr "Projizierte Fläche"
-
-#: modules/process/facet_analysis.c:398 modules/process/grain_edge.c:276
-#: modules/process/grain_mark.c:358 modules/process/mark_disconn.c:301
-#: modules/process/mark_with.c:230 modules/process/mask_morph.c:210
-msgid "Operation:"
-msgstr "Operation:"
-
-#: modules/process/facet_analysis.c:415
+#: modules/process/facet_analysis.c:398
#, fuzzy
msgid ""
"Warning: Lateral and value units differ. Angles are not physically "
@@ -9758,8 +10047,8 @@ msgstr ""
msgid "_Stationarity scale:"
msgstr "_Laterale Skala:"
-#: modules/process/fbm_synth.c:390 modules/process/lno_synth.c:509
-#: modules/process/noise_synth.c:409
+#: modules/process/fbm_synth.c:390 modules/process/lno_synth.c:507
+#: modules/process/noise_synth.c:407
msgid "_Distribution:"
msgstr "_Verteilung:"
@@ -9767,18 +10056,18 @@ msgstr "_Verteilung:"
msgid "Po_wer:"
msgstr ""
-#: modules/process/fbm_synth.c:408 modules/process/fft_synth.c:414
-#: modules/process/lno_synth.c:533 modules/process/noise_synth.c:433
+#: modules/process/fbm_synth.c:407 modules/process/fft_synth.c:414
+#: modules/process/lno_synth.c:531 modules/process/noise_synth.c:431
#, fuzzy
msgid "_RMS:"
msgstr "_Quadratmittel:"
-#: modules/process/fbm_synth.c:477 modules/process/lno_synth.c:251
-#: modules/process/noise_synth.c:178
+#: modules/process/fbm_synth.c:476 modules/process/lno_synth.c:249
+#: modules/process/noise_synth.c:176
msgid "distribution|Exponential"
msgstr ""
-#: modules/process/fbm_synth.c:478
+#: modules/process/fbm_synth.c:477
#, fuzzy
msgid "distribution|Power"
msgstr "Winkelverteilung"
@@ -9836,7 +10125,7 @@ msgstr "Imaginärteil"
msgid "Modulus"
msgstr "FFT Betrag"
-#: modules/process/fft.c:327 modules/process/wave_synth.c:583
+#: modules/process/fft.c:327 modules/process/wave_synth.c:618
msgid "Phase"
msgstr "Phase"
@@ -9854,66 +10143,66 @@ msgstr "_Transformiert"
msgid "I_maginary part:"
msgstr "Imaginärteil"
-#: modules/process/fft.c:382
+#: modules/process/fft.c:380
#, fuzzy
msgid "_Inverse transform"
msgstr "Hough-Transformation."
-#: modules/process/fft.c:411
+#: modules/process/fft.c:409
msgid "Subtract mean _value beforehand"
msgstr "_Mittelwert vorher abziehen"
-#: modules/process/fft.c:422
+#: modules/process/fft.c:420
msgid "_Preserve RMS"
msgstr ""
-#: modules/process/fft_filter_1d.c:117
+#: modules/process/fft_filter_1d.c:118
msgid "FFT filtering"
msgstr "FFT-Filterung"
-#: modules/process/fft_filter_1d.c:131
+#: modules/process/fft_filter_1d.c:132
#, fuzzy
msgid "/_Correct Data/1D _FFT Filtering..."
msgstr "/Ko_rrigieren/1D _FFT-Filterung..."
-#: modules/process/fft_filter_1d.c:135
+#: modules/process/fft_filter_1d.c:136
msgid "1D FFT Filtering"
msgstr "1D FFT-Filterung"
-#: modules/process/fft_filter_1d.c:165 modules/process/wpour_mark.c:391
+#: modules/process/fft_filter_1d.c:166 modules/process/wpour_mark.c:391
msgid "Marked"
msgstr "Markiert"
-#: modules/process/fft_filter_1d.c:166
+#: modules/process/fft_filter_1d.c:167
msgid "Unmarked"
msgstr "Unmarkiert"
-#: modules/process/fft_filter_1d.c:169
+#: modules/process/fft_filter_1d.c:170
msgid "Null"
msgstr "Null"
-#: modules/process/fft_filter_1d.c:170
+#: modules/process/fft_filter_1d.c:171
msgid "Suppress"
msgstr "Unterdrücken"
-#: modules/process/fft_filter_1d.c:180
+#: modules/process/fft_filter_1d.c:181
msgid "1D FFT filter"
msgstr "1D FFT-Filter"
-#: modules/process/fft_filter_1d.c:269 modules/process/linematch.c:861
+#: modules/process/fft_filter_1d.c:271 modules/process/linematch.c:828
msgid "_Direction:"
msgstr "_Richtung:"
-#: modules/process/fft_filter_1d.c:277
+#: modules/process/fft_filter_1d.c:279
#, fuzzy
msgid "_Suppress type:"
msgstr "_Linientyp:"
-#: modules/process/fft_filter_1d.c:285
+#: modules/process/fft_filter_1d.c:287
msgid "_Filter type:"
msgstr "_Filtertyp:"
-#: modules/process/fft_filter_1d.c:513
+#: modules/process/fft_filter_1d.c:515
msgid "1D FFT Filtered Data"
msgstr "1D FFT-gefilterte Daten"
@@ -9934,9 +10223,10 @@ msgstr "Zweidimensionale FFT-Filterung"
msgid "Filtered Data"
msgstr "Gefilterte Daten"
-#: modules/process/fft_filter_2d.c:305 modules/process/fit-shape.c:594
-#: modules/process/fit-shape.c:643 modules/process/fit-shape.c:658
-#: modules/process/fit-shape.c:662 modules/process/neural.c:560
+#: modules/process/fft_filter_2d.c:305 modules/process/fit-shape.c:604
+#: modules/process/fit-shape.c:653 modules/process/fit-shape.c:668
+#: modules/process/fit-shape.c:672 modules/process/neural.c:564
+#: modules/process/psf.c:232
msgid "Difference"
msgstr "Differenz"
@@ -9997,7 +10287,7 @@ msgstr "Filtermaske"
msgid "_Undo"
msgstr "_Rückgängig"
-#: modules/process/fft_filter_2d.c:507 modules/tools/maskedit.c:556
+#: modules/process/fft_filter_2d.c:507 modules/tools/maskedit.c:562
msgid "_Fill"
msgstr "_Ausfüllen"
@@ -10005,7 +10295,7 @@ msgstr "_Ausfüllen"
msgid "_Snap to origin"
msgstr "Einrasten am _Ursprung"
-#: modules/process/fft_filter_2d.c:565 modules/process/measure_lattice.c:339
+#: modules/process/fft_filter_2d.c:565 modules/process/measure_lattice.c:329
msgid "Zoom:"
msgstr "Zoom:"
@@ -10048,40 +10338,41 @@ msgstr "Entfernt die gesamte Filtermaske"
msgid "Force shapes to center around the origin"
msgstr "Erzwingt Zentrierung neuer Masken um den Ursprung"
-#: modules/process/fft_profile.c:125
+#: modules/process/fft_profile.c:124
msgid ""
"Reads radial sections of two-dimensional power spectrum density function."
msgstr ""
-#: modules/process/fft_profile.c:140
+#: modules/process/fft_profile.c:139
#, fuzzy
msgid "/_Statistics/_PSDF Section..."
msgstr "/_Statistik/_Fraktale Dimension..."
-#: modules/process/fft_profile.c:144
+#: modules/process/fft_profile.c:143
msgid "Read radial PSDF sections"
msgstr ""
-#: modules/process/fft_profile.c:190
+#: modules/process/fft_profile.c:189
msgid "Radial PSDF Section"
msgstr ""
-#: modules/process/fft_profile.c:237
+#: modules/process/fft_profile.c:236
#, fuzzy
msgid "PSDF Section"
msgstr "_Auswahlmodus:"
-#: modules/process/fft_profile.c:266 modules/process/grain_dist.c:336
-#: modules/tools/profile.c:517 modules/tools/sfunctions.c:443
-msgid "_Fix res.:"
-msgstr "_Feste Auflösung:"
+#: modules/process/fft_profile.c:266 modules/process/grain_dist.c:338
+#: modules/tools/profile.c:514 modules/tools/sfunctions.c:454
+#, fuzzy
+msgid "_Fixed resolution:"
+msgstr "Auflösung"
-#: modules/process/fft_profile.c:279
+#: modules/process/fft_profile.c:278
#, fuzzy
msgid "_Separate curves"
msgstr "_Graph"
-#: modules/process/fft_profile.c:496
+#: modules/process/fft_profile.c:483
#, c-format
msgid "PSDF %.0f°"
msgstr "PSDF %.0f°"
@@ -10102,12 +10393,16 @@ msgstr ""
msgid "Spectral Synthesis"
msgstr ""
-#: modules/process/fft_synth.c:429
+#: modules/process/fft_synth.c:430
#, fuzzy
msgid "M_inimum frequency:"
msgstr "Minimale _Länge:"
-#: modules/process/fft_synth.c:449
+#: modules/process/fft_synth.c:430 modules/process/fft_synth.c:450
+msgid "px<sup>-1</sup>"
+msgstr ""
+
+#: modules/process/fft_synth.c:450
msgid "Ma_ximum frequency:"
msgstr ""
@@ -10128,92 +10423,171 @@ msgstr ""
msgid "Enable _power multiplier"
msgstr ""
-#: modules/process/fit-shape.c:270
+#: modules/process/fibre_synth.c:256
+msgid "Semi-circle"
+msgstr ""
+
+#: modules/process/fibre_synth.c:257
+#, fuzzy
+msgid "Triangle"
+msgstr "Dreieck hoch"
+
+#: modules/process/fibre_synth.c:258
+#, fuzzy
+msgid "Rectangle"
+msgstr "Rechtecke"
+
+#: modules/process/fibre_synth.c:260
+msgid "Quadratic spline"
+msgstr ""
+
+#: modules/process/fibre_synth.c:266
+msgid "Generates surfaces composed from randomly placed fibers."
+msgstr ""
+
+#: modules/process/fibre_synth.c:280
+#, fuzzy
+msgid "/S_ynthetic/_Deposition/_Fibers..."
+msgstr "/S_ynthetisch/_Objekte..."
+
+#: modules/process/fibre_synth.c:284
+#, fuzzy
+msgid "Generate surface of randomly placed fibers"
+msgstr "Relative Linien"
+
+#: modules/process/fibre_synth.c:420
+#, fuzzy
+msgid "Random Fibers"
+msgstr "Fenstergröße"
+
+#: modules/process/fibre_synth.c:494 modules/process/obj_synth.c:510
+#, fuzzy
+msgid "_Shape:"
+msgstr "_Skala:"
+
+#: modules/process/fibre_synth.c:513 modules/process/obj_synth.c:529
+msgid "obj."
+msgstr ""
+
+#: modules/process/fibre_synth.c:553
+msgid "Scales _with width"
+msgstr ""
+
+#: modules/process/fibre_synth.c:591 modules/process/synth.h:485
+#, fuzzy
+msgid "Deformation"
+msgstr "_Operator:"
+
+#: modules/process/fibre_synth.c:600 modules/process/lno_synth.c:852
+#: modules/process/lno_synth.c:1222 modules/process/mask_noisify.c:177
+msgid "Densi_ty:"
+msgstr "Dich_te:"
+
+#: modules/process/fibre_synth.c:607
+#, fuzzy
+msgid "_Lateral:"
+msgstr "GL-Material"
+
+#: modules/process/fibre_synth.c:614
+#, fuzzy
+msgid "Le_ngthwise:"
+msgstr "_Länge:"
+
+#: modules/process/fibre_synth.c:819
+msgid "Along fiber:"
+msgstr ""
+
+#: modules/process/fibre_synth.c:1180
+#, fuzzy
+msgid "Generating fibers..."
+msgstr "Markiere Grenzen"
+
+#: modules/process/fit-shape.c:264
msgid "Fits predefined geometrical shapes to data."
msgstr ""
-#: modules/process/fit-shape.c:284
+#: modules/process/fit-shape.c:278
#, fuzzy
msgid "/_Level/_Fit Shape..."
msgstr "/_Nivellierung/_Sphäre fitten..."
-#: modules/process/fit-shape.c:288 modules/process/fit-shape.c:295
+#: modules/process/fit-shape.c:282 modules/process/fit-shape.c:289
msgid "Fit geometrical shapes"
msgstr ""
-#: modules/process/fit-shape.c:291
+#: modules/process/fit-shape.c:285
#, fuzzy
msgid "/_Fit Shape..."
msgstr "/_Nivellierung/_Sphäre fitten..."
-#: modules/process/fit-shape.c:390
+#: modules/process/fit-shape.c:389
#, fuzzy
msgid "Fit Shape"
msgstr "Sphäre fitten"
-#: modules/process/fit-shape.c:395
+#: modules/process/fit-shape.c:396
msgid "verb|_Quick Fit"
msgstr ""
-#: modules/process/fit-shape.c:473 modules/process/fit-shape.c:2159
+#: modules/process/fit-shape.c:474 modules/process/fit-shape.c:2141
#, fuzzy
msgid "Derived Quantities"
msgstr "Korn-Statistiken"
-#: modules/process/fit-shape.c:478 modules/process/fit-shape.c:2129
+#: modules/process/fit-shape.c:479 modules/process/fit-shape.c:2111
#, fuzzy
msgid "Mean square difference:"
msgstr "X Differenz"
-#: modules/process/fit-shape.c:580 modules/process/fit-shape.c:626
-#: modules/process/fit-shape.c:657 modules/process/fit-shape.c:661
+#: modules/process/fit-shape.c:590 modules/process/fit-shape.c:636
+#: modules/process/fit-shape.c:667 modules/process/fit-shape.c:671
#, fuzzy
msgid "Fitted shape"
msgstr "Gefittete Sphäre"
-#: modules/process/fit-shape.c:663 modules/process/mark_disconn.c:189
-#: modules/process/scars.c:281
+#: modules/process/fit-shape.c:673 modules/process/mark_disconn.c:189
+#: modules/process/scars.c:299
msgid "Both"
msgstr "Beides"
-#: modules/process/fit-shape.c:680
+#: modules/process/fit-shape.c:690 modules/process/psf-fit.c:308
#, fuzzy
msgid "_Function type:"
msgstr "Funktionstyp:"
-#: modules/process/fit-shape.c:708
+#: modules/process/fit-shape.c:720
msgid "Show differences with _adapted color map"
msgstr ""
-#: modules/process/fit-shape.c:720
+#: modules/process/fit-shape.c:732
msgid "Full fit is _geometric"
msgstr ""
-#: modules/process/fit-shape.c:757
+#: modules/process/fit-shape.c:769
msgid "Calculate differences for e_xcluded pixels"
msgstr ""
-#: modules/process/fit-shape.c:804
+#: modules/process/fit-shape.c:816
msgid "_Recalculate Image"
msgstr ""
-#: modules/process/fit-shape.c:811
+#: modules/process/fit-shape.c:823
msgid "Revert to _Previous Values"
msgstr ""
-#: modules/process/fit-shape.c:1850
+#: modules/process/fit-shape.c:1864
msgid "Parameter estimation failed"
msgstr ""
-#: modules/process/fit-shape.c:1853
+#: modules/process/fit-shape.c:1867
msgid "Fit failed"
msgstr ""
-#: modules/process/fit-shape.c:1855
+#: modules/process/fit-shape.c:1869
msgid "Fit was interruped"
msgstr ""
-#: modules/process/fit-shape.c:2115
+#: modules/process/fit-shape.c:2097
msgid "(fixed)"
msgstr ""
@@ -10235,38 +10609,38 @@ msgstr ""
msgid "Polynomial leveling..."
msgstr "Polynomiell"
-#: modules/process/fraccor.c:38
+#: modules/process/fraccor.c:39
msgid "Removes data under mask using fractal interpolation."
msgstr "Entfernt Daten unter Maske mittels fraktaler Interpolation."
-#: modules/process/fraccor.c:52
+#: modules/process/fraccor.c:53
#, fuzzy
msgid "/_Correct Data/_Fractal Correction"
msgstr "/Ko_rrigieren/Fra_ktale Korrektur"
-#: modules/process/fraccor.c:56
+#: modules/process/fraccor.c:57
msgid "Interpolate data under mask with fractal interpolation"
msgstr "Interpoliert Daten unter Maske mittels fraktaler Interpolation"
-#: modules/process/fractal.c:134
+#: modules/process/fractal.c:130
#, fuzzy
msgid "Partitioning"
msgstr "Partitionierung"
-#: modules/process/fractal.c:135
+#: modules/process/fractal.c:131
#, fuzzy
msgid "Cube counting"
msgstr "Kästchenzählung"
-#: modules/process/fractal.c:136
+#: modules/process/fractal.c:132
msgid "Triangulation"
msgstr "Triangulation"
-#: modules/process/fractal.c:137
+#: modules/process/fractal.c:133
msgid "Power spectrum"
msgstr "Spektraldichtefunktion"
-#: modules/process/fractal.c:173
+#: modules/process/fractal.c:169
#, fuzzy
msgid ""
"Calculates fractal dimension using several methods (partitioning, box "
@@ -10275,54 +10649,50 @@ msgstr ""
"Berechnet die fraktale Dimension mit unerschiedlichen Methoden "
"(Partitionierung, Kästchenzählung, Triangulation, Spektraldichtefunktion)"
-#: modules/process/fractal.c:188
+#: modules/process/fractal.c:184
msgid "/_Statistics/_Fractal Dimension..."
msgstr "/_Statistik/_Fraktale Dimension..."
-#: modules/process/fractal.c:192
+#: modules/process/fractal.c:188
msgid "Calculate fractal dimension"
msgstr "Fraktale Dimension berechnen"
-#: modules/process/fractal.c:227
+#: modules/process/fractal.c:223
msgid "Fractal Dimension"
msgstr "Fraktale Dimension"
-#: modules/process/fractal.c:228
-msgid "Reco_mpute"
-msgstr "e_rneut berechnen"
-
-#: modules/process/fractal.c:269
+#: modules/process/fractal.c:253
msgid "_Method:"
msgstr "_Methode:"
-#: modules/process/fractal.c:290
+#: modules/process/fractal.c:269
msgid "Fit Area"
msgstr "Bereich fitten"
-#: modules/process/fractal.c:295
-msgid "From:"
-msgstr "Von:"
-
-#: modules/process/fractal.c:295 modules/process/fractal.c:589
-#: modules/process/fractal.c:613
+#: modules/process/fractal.c:273 modules/process/fractal.c:545
+#: modules/process/fractal.c:569
msgid "minimum"
msgstr "Minimum"
-#: modules/process/fractal.c:298
-msgid "To:"
-msgstr "Bis:"
+#: modules/process/fractal.c:274
+msgid "From:"
+msgstr "Von:"
-#: modules/process/fractal.c:298 modules/process/fractal.c:590
-#: modules/process/fractal.c:614
+#: modules/process/fractal.c:279 modules/process/fractal.c:546
+#: modules/process/fractal.c:570
msgid "maximum"
msgstr "Maximum"
-#: modules/process/fractal.c:308 modules/process/mark_with.c:390
-#: modules/process/neural.c:559
+#: modules/process/fractal.c:280
+msgid "To:"
+msgstr "Bis:"
+
+#: modules/process/fractal.c:287 modules/process/mark_with.c:394
+#: modules/process/neural.c:563
msgid "Result"
msgstr "Ergebnis"
-#: modules/process/fractal.c:550
+#: modules/process/fractal.c:506
msgid "Linear fit"
msgstr "Linearer Fit"
@@ -10398,11 +10768,11 @@ msgstr ""
msgid "Grain Correlations"
msgstr "Korrelation"
-#: modules/process/grain_cross.c:240
+#: modules/process/grain_cross.c:241
msgid "_Abscissa"
msgstr ""
-#: modules/process/grain_cross.c:244
+#: modules/process/grain_cross.c:245
#, fuzzy
msgid "O_rdinate"
msgstr "_Gradient"
@@ -10431,128 +10801,128 @@ msgstr "_Graphen zeichnen"
msgid "Grain Distributions"
msgstr "Kornverteilungen"
-#: modules/process/grain_dist.c:553
+#: modules/process/grain_dist.c:547
#, fuzzy
msgid "count"
msgstr "Anzahl"
-#: modules/process/grain_dist.c:617
+#: modules/process/grain_dist.c:611
msgid "Export Raw Grain Values"
msgstr "Korn-Rohdaten exportieren"
-#: modules/process/grain_edge.c:100
+#: modules/process/grain_edge.c:99
#, fuzzy
msgid "Marks grains by edge detection method."
msgstr "Körner mittels Schwellwert markieren"
-#: modules/process/grain_edge.c:114
+#: modules/process/grain_edge.c:113
#, fuzzy
msgid "/_Grains/Mark by _Edge Detection..."
msgstr "/_Körnung/Markieren mit _Watershed..."
-#: modules/process/grain_edge.c:118
+#: modules/process/grain_edge.c:117
msgid "Mark grains with edge detection mechanism"
msgstr ""
-#: modules/process/grain_edge.c:207
+#: modules/process/grain_edge.c:206
#, fuzzy
msgid "Mark Grains by Edge Detection"
msgstr "Körner mittels Kantenerkennung markieren"
-#: modules/process/grain_edge.c:245
+#: modules/process/grain_edge.c:244
msgid "Threshold"
msgstr "Schwellwert"
-#: modules/process/grain_edge.c:249
+#: modules/process/grain_edge.c:248
msgid "_Laplacian:"
msgstr ""
-#: modules/process/grain_filter.c:195
+#: modules/process/grain_filter.c:194
msgid ""
"Filters grains by their properties, using logical expressions and thresholds."
msgstr ""
-#: modules/process/grain_filter.c:210
+#: modules/process/grain_filter.c:209
#, fuzzy
msgid "/_Grains/_Filter..."
msgstr "/_Körnung/_Statistik..."
-#: modules/process/grain_filter.c:214
+#: modules/process/grain_filter.c:213
msgid "Filter grains by their properties"
msgstr ""
-#: modules/process/grain_filter.c:254
+#: modules/process/grain_filter.c:253
msgid "There are no grains to filter."
msgstr ""
-#: modules/process/grain_filter.c:310
+#: modules/process/grain_filter.c:309
#, fuzzy
msgid "Filter Grains"
msgstr "Filtermaske"
-#: modules/process/grain_filter.c:405
+#: modules/process/grain_filter.c:404
#, fuzzy
msgid "Set selected as:"
msgstr "Ausgewähltes Element als Standard setzen"
-#: modules/process/grain_filter.c:420
+#: modules/process/grain_filter.c:419
#, fuzzy
msgid "Keep grains satisfying:"
msgstr "Einfache Körnungsstatistiken"
-#: modules/process/grain_filter.c:434 modules/process/lat_synth.c:733
+#: modules/process/grain_filter.c:440 modules/process/lat_synth.c:733
#, fuzzy
msgid "Lower threshold:"
msgstr "_Harter Schwellwert:"
-#: modules/process/grain_filter.c:469 modules/process/lat_synth.c:740
+#: modules/process/grain_filter.c:467 modules/process/lat_synth.c:740
#, fuzzy
msgid "Upper threshold:"
msgstr "_Harter Schwellwert:"
#. TRANSLATORS: %c is replaced with quantity label A, B or C.
-#: modules/process/grain_filter.c:645
+#: modules/process/grain_filter.c:628
#, c-format
msgid "Condition %c: %s"
msgstr ""
-#: modules/process/grain_mark.c:139
+#: modules/process/grain_mark.c:137
msgid "Marks grains by thresholding (height, slope, curvature)."
msgstr "Markiert Körner mittels Schwellwertbildung (Höhe, Steigung, Krümmung)."
-#: modules/process/grain_mark.c:153
+#: modules/process/grain_mark.c:151
msgid "/_Grains/_Mark by Threshold..."
msgstr "/_Körnung/_Markieren mit Schwellwert..."
-#: modules/process/grain_mark.c:157
+#: modules/process/grain_mark.c:155
msgid "Mark grains by threshold"
msgstr "Körner mittels Schwellwert markieren"
-#: modules/process/grain_mark.c:241
+#: modules/process/grain_mark.c:240
msgid "Mark Grains by Threshold"
msgstr "Körner mittels Schwellwert markieren"
-#: modules/process/grain_mark.c:281
+#: modules/process/grain_mark.c:280
msgid "Threshold by"
msgstr "Schwellwert bezüglich"
-#: modules/process/grain_mark.c:311
+#: modules/process/grain_mark.c:310
msgid "_Slope:"
msgstr "S_teigung:"
-#: modules/process/grain_mark.c:315
+#: modules/process/grain_mark.c:314
msgid "_Curvature:"
msgstr "_Krümmung:"
-#: modules/process/grain_mark.c:324
-msgid "Criteria combination:"
-msgstr ""
-
-#: modules/process/grain_mark.c:328 modules/process/grain_wshed.c:256
+#: modules/process/grain_mark.c:319 modules/process/grain_wshed.c:260
#: modules/process/wpour_mark.c:358
msgid "_Invert height"
msgstr "Höhe _invertieren"
+#: modules/process/grain_mark.c:328
+msgid "Criteria combination:"
+msgstr ""
+
#: modules/process/grain_stat.c:54
#, fuzzy
msgid "Displays overall grain statistics."
@@ -10632,464 +11002,474 @@ msgstr "Gesamtes Kornvolumen (Laplace):"
msgid "Total projected boundary length:"
msgstr "Projizierte Umrandungslänge"
-#: modules/process/grain_wshed.c:101
+#: modules/process/grain_wshed.c:102
msgid "Marks grains by watershed algorithm."
msgstr "Körner mittels Watershed-Algorithmus markieren."
-#: modules/process/grain_wshed.c:115
+#: modules/process/grain_wshed.c:116
msgid "/_Grains/Mark by _Watershed..."
msgstr "/_Körnung/Markieren mit _Watershed..."
-#: modules/process/grain_wshed.c:119
+#: modules/process/grain_wshed.c:120
msgid "Mark grains by watershed"
msgstr "Körner mittels Watershed markieren"
-#: modules/process/grain_wshed.c:161
+#: modules/process/grain_wshed.c:162
msgid "Mark Grains by Watershed"
msgstr "Körner mittels Watershed markieren"
-#: modules/process/grain_wshed.c:199
+#: modules/process/grain_wshed.c:200
msgid "Grain Location"
msgstr "Korn-Lokalisierung"
-#: modules/process/grain_wshed.c:214
+#: modules/process/grain_wshed.c:216
msgid "_Drop size:"
msgstr "_Tropfengröße:"
-#: modules/process/grain_wshed.c:230
+#: modules/process/grain_wshed.c:233
msgid "Segmentation"
msgstr "Segmentierung"
-#: modules/process/grain_wshed.c:236
+#: modules/process/grain_wshed.c:239
msgid "Num_ber of steps:"
msgstr "Anza_hl an Schritten:"
-#: modules/process/grain_wshed.c:244
+#: modules/process/grain_wshed.c:248
msgid "Dr_op size:"
msgstr "Tropfen_größe:"
-#: modules/process/grain_wshed.c:435
+#: modules/process/grain_wshed.c:439
#, fuzzy
msgid "Finding minima..."
msgstr "Finde Minima"
-#: modules/process/grain_wshed.c:437
+#: modules/process/grain_wshed.c:441
#, fuzzy
msgid "Locating..."
msgstr "Lokalisiere"
-#: modules/process/grain_wshed.c:439
+#: modules/process/grain_wshed.c:443
#, fuzzy
msgid "Simulating watershed..."
msgstr "Fit-Parameter"
-#: modules/process/grain_wshed.c:441
+#: modules/process/grain_wshed.c:445
#, fuzzy
msgid "Marking boundaries..."
msgstr "Markiere Grenzen"
-#: modules/process/hough.c:74
+#: modules/process/hough.c:76
msgid "Hough transform."
msgstr "Hough-Transformation."
-#: modules/process/hough.c:88
+#: modules/process/hough.c:90
msgid "/_Integral Transforms/_Hough..."
msgstr "/_Integrale Transformationen/_Hough..."
-#: modules/process/hough.c:92
+#: modules/process/hough.c:94
msgid "Compute Hough transform"
msgstr "Hough-Transformation berechnen"
-#: modules/process/hough.c:178
+#: modules/process/hough.c:137
+#, fuzzy
+msgid "Hough line"
+msgstr "Rauigkeit"
+
+#: modules/process/hough.c:141
+#, c-format
+msgid "Hough circle r=%d"
+msgstr ""
+
+#: modules/process/hough.c:173
msgid "Hough Transform"
msgstr "Hough-Transformation"
-#: modules/process/hough.c:201
+#: modules/process/hough.c:195
msgid "_Transform type:"
msgstr "_Transformationstyp:"
-#: modules/process/hough.c:212
+#: modules/process/hough.c:203
msgid "_Circle size:"
msgstr "Größe des _Kreises:"
-#: modules/process/immerse.c:162
+#: modules/process/immerse.c:163
msgid "Immerse high resolution detail into overall image."
msgstr "Hochauflösendes Detailbild in Gesamtbild einfügen"
-#: modules/process/immerse.c:176
+#: modules/process/immerse.c:177
msgid "/M_ultidata/_Immerse Detail..."
msgstr "/M_ultidaten/_Detailbild einpassen..."
-#: modules/process/immerse.c:180
+#: modules/process/immerse.c:181
msgid "Immerse a detail into image"
msgstr "Detailbild in Bild einfügen"
-#: modules/process/immerse.c:222
+#: modules/process/immerse.c:223
msgid "Immerse Detail"
msgstr "Detailbild einfügen"
-#: modules/process/immerse.c:225
+#: modules/process/immerse.c:226
msgid "_Locate"
msgstr "_Localisieren"
-#: modules/process/immerse.c:227
+#: modules/process/immerse.c:228
msgid "Locate detail by full image correlation search"
msgstr "Detailbild über Korrelationssuche im Gesamtbild lokalisieren"
-#: modules/process/immerse.c:229
+#: modules/process/immerse.c:230
msgid "_Improve"
msgstr "Ver_bessern"
-#: modules/process/immerse.c:231
+#: modules/process/immerse.c:232
msgid "Improve detail position by correlation search in neighborhood"
msgstr ""
"Position des Detailbildes über Korrelationssuche in der Nachbarschaft "
"verbessern"
-#: modules/process/immerse.c:290
+#: modules/process/immerse.c:291
msgid "_Detail image:"
msgstr "_Detailbild:"
-#: modules/process/immerse.c:295
+#: modules/process/immerse.c:296
msgid "Position:"
msgstr "Position:"
-#: modules/process/immerse.c:308
+#: modules/process/immerse.c:314
#, fuzzy
msgid "Result Sampling"
msgstr "Ergebnis-Auflösung:"
-#: modules/process/immerse.c:318
+#: modules/process/immerse.c:324
#, fuzzy
msgid "_Upsample large image"
msgstr "Großes Bild _hochrechnen"
-#: modules/process/immerse.c:320
+#: modules/process/immerse.c:326
#, fuzzy
msgid "_Downsample detail"
msgstr "Detailbild _runterrechnen"
-#: modules/process/immerse.c:329
+#: modules/process/immerse.c:335
msgid "Detail Leveling"
msgstr "Detail-Nivellierung"
-#: modules/process/immerse.c:339
+#: modules/process/immerse.c:345
msgid "levelling|_None"
msgstr ""
-#: modules/process/immerse.c:341
+#: modules/process/immerse.c:347
msgid "_Mean value"
msgstr "_Minimalwert"
-#: modules/process/immerse.c:349
+#: modules/process/immerse.c:355
#, fuzzy
msgid "Show _frame"
msgstr "_Rahmen anzeigen"
-#: modules/process/immerse.c:787
+#: modules/process/immerse.c:793
msgid "Immersed detail"
msgstr "Eingefügtes Detailbild"
-#: modules/process/indent_analyze.c:261
+#: modules/process/indent_analyze.c:246
#, fuzzy
msgid "Do nothing"
msgstr "Tue nichts"
-#: modules/process/indent_analyze.c:262
+#: modules/process/indent_analyze.c:247
#, fuzzy
msgid "Plane level"
msgstr "Ebene nivellieren"
-#: modules/process/indent_analyze.c:263
+#: modules/process/indent_analyze.c:248
#, fuzzy
msgid "Plane rotate"
msgstr "Ebenen-Fit Modus"
-#: modules/process/indent_analyze.c:267
+#: modules/process/indent_analyze.c:252
msgid "New"
msgstr "Neu"
-#: modules/process/indent_analyze.c:268
+#: modules/process/indent_analyze.c:253
msgid "AND"
msgstr "AND"
-#: modules/process/indent_analyze.c:269
+#: modules/process/indent_analyze.c:254
msgid "OR"
msgstr "OR"
-#: modules/process/indent_analyze.c:270
+#: modules/process/indent_analyze.c:255
msgid "NOT"
msgstr "NOT"
-#: modules/process/indent_analyze.c:271
+#: modules/process/indent_analyze.c:256
msgid "XOR"
msgstr "XOR"
-#: modules/process/indent_analyze.c:275
+#: modules/process/indent_analyze.c:260
#, fuzzy
msgid "Nothing"
msgstr "Lokalisiere"
-#: modules/process/indent_analyze.c:276
+#: modules/process/indent_analyze.c:261
#, fuzzy
msgid "Above"
msgstr "Absolut"
-#: modules/process/indent_analyze.c:277
+#: modules/process/indent_analyze.c:262
msgid "Below"
msgstr ""
-#: modules/process/indent_analyze.c:278
+#: modules/process/indent_analyze.c:263
#, fuzzy
msgid "Plane"
msgstr "Ebene nivellieren"
-#: modules/process/indent_analyze.c:279
+#: modules/process/indent_analyze.c:264
#, fuzzy
msgid "Impression"
msgstr "_Ausdruck:"
-#: modules/process/indent_analyze.c:280
+#: modules/process/indent_analyze.c:265
msgid "Inner Pile-up"
msgstr ""
-#: modules/process/indent_analyze.c:281
+#: modules/process/indent_analyze.c:266
msgid "Outer Pile-up"
msgstr ""
-#: modules/process/indent_analyze.c:282
+#: modules/process/indent_analyze.c:267
#, fuzzy
msgid "Special points"
msgstr "Ausgewählte Punkte"
-#: modules/process/indent_analyze.c:283
+#: modules/process/indent_analyze.c:268
msgid "Faces border"
msgstr ""
-#: modules/process/indent_analyze.c:287
+#: modules/process/indent_analyze.c:272
msgid "Vickers"
msgstr "Vickers"
-#: modules/process/indent_analyze.c:288
+#: modules/process/indent_analyze.c:273
msgid "Berkovich"
msgstr "Berkovich"
-#: modules/process/indent_analyze.c:289
+#: modules/process/indent_analyze.c:274
msgid "Berkovich (modified)"
msgstr "Berkovich (modifiziert)"
-#: modules/process/indent_analyze.c:290
+#: modules/process/indent_analyze.c:275
msgid "Knoop"
msgstr "Knoop"
-#: modules/process/indent_analyze.c:291
+#: modules/process/indent_analyze.c:276
msgid "Brinell"
msgstr "Brinell"
-#: modules/process/indent_analyze.c:292
+#: modules/process/indent_analyze.c:277
#, fuzzy
msgid "Cube corner"
msgstr "Kästchenzählung"
-#: modules/process/indent_analyze.c:293
+#: modules/process/indent_analyze.c:278
msgid "Rockwell"
msgstr "Rockwell"
-#: modules/process/indent_analyze.c:303
+#: modules/process/indent_analyze.c:288
msgid "Analyses nanoindentation structure (volumes, surfaces, ...)."
msgstr ""
-#: modules/process/indent_analyze.c:320
+#: modules/process/indent_analyze.c:302
#, fuzzy
msgid "/_Tip and Indentation/_Analyze Imprint..."
msgstr "/Ein_kerber/ab_gleichen..."
-#: modules/process/indent_analyze.c:439
+#: modules/process/indent_analyze.c:410
#, fuzzy
msgid "Marked _areas:"
msgstr "Fehlerzeilen markieren"
-#: modules/process/indent_analyze.c:445
+#: modules/process/indent_analyze.c:419
#, fuzzy
msgid "_Indentor type:"
msgstr "_Linientyp:"
-#: modules/process/indent_analyze.c:451
+#: modules/process/indent_analyze.c:428
#, fuzzy
msgid "_Mask creation type:"
msgstr "_Interpolationstyp:"
-#: modules/process/indent_analyze.c:456
+#: modules/process/indent_analyze.c:434
#, fuzzy
msgid "Ref. plane _tolerance:"
msgstr "_Toleranz:"
-#: modules/process/indent_analyze.c:460
+#: modules/process/indent_analyze.c:438
#, fuzzy
msgid "Angle _1 tolerance:"
msgstr "_Toleranz:"
-#: modules/process/indent_analyze.c:485
+#: modules/process/indent_analyze.c:456
msgid "Indent center at"
msgstr ""
-#: modules/process/indent_analyze.c:488
+#: modules/process/indent_analyze.c:460
#, fuzzy
msgid "Maximum at"
msgstr "Maximaler z-Wert"
-#: modules/process/indent_analyze.c:491
+#: modules/process/indent_analyze.c:464
#, fuzzy
msgid "Max-min difference"
msgstr "X Differenz"
-#: modules/process/indent_analyze.c:497
+#: modules/process/indent_analyze.c:472
msgid "Expected A<sub>d</sub>:"
msgstr ""
-#: modules/process/indent_analyze.c:505
+#: modules/process/indent_analyze.c:479
msgid "Expected A<sub>p</sub>:"
msgstr ""
-#: modules/process/indent_analyze.c:549
+#: modules/process/indent_analyze.c:489
msgid "Volume above-below"
msgstr ""
-#: modules/process/indent_analyze.c:558
+#: modules/process/indent_analyze.c:494
msgid "Indent. volume"
msgstr ""
-#: modules/process/indent_analyze.c:564
+#: modules/process/indent_analyze.c:502
msgid "Indent. A<sub>d</sub>"
msgstr ""
-#: modules/process/indent_analyze.c:573
+#: modules/process/indent_analyze.c:509
msgid "Indent. A<sub>p</sub>"
msgstr ""
-#: modules/process/indent_analyze.c:587
+#: modules/process/indent_analyze.c:517
msgid "Inner Pile-Up A<sub>d</sub>"
msgstr ""
-#: modules/process/indent_analyze.c:596
+#: modules/process/indent_analyze.c:525
msgid "Inner Pile-Up A<sub>p</sub>"
msgstr ""
-#: modules/process/indent_analyze.c:605
+#: modules/process/indent_analyze.c:533
msgid "Outer Pile-Up A<sub>d</sub>"
msgstr ""
-#: modules/process/indent_analyze.c:614
+#: modules/process/indent_analyze.c:541
msgid "Outer Pile-Up A<sub>p</sub>"
msgstr ""
-#: modules/process/indent_analyze.c:644
+#: modules/process/indent_analyze.c:569
#, fuzzy
msgid "Indentation statistics"
msgstr "Korn-Statistiken"
-#: modules/process/indent_analyze.c:645
+#: modules/process/indent_analyze.c:570
msgid "_Compute & mark"
msgstr ""
-#: modules/process/indent_analyze.c:646
+#: modules/process/indent_analyze.c:571
#, fuzzy
msgid "_Save statistics"
msgstr "/_Diagrammstatistiken"
-#: modules/process/indent_analyze.c:1569
+#: modules/process/indent_analyze.c:1392
msgid "No statistics has been computed yet."
msgstr ""
-#: modules/process/indent_analyze.c:1577
+#: modules/process/indent_analyze.c:1400
#, fuzzy
msgid "Save Indentation Statistics"
msgstr "Korn-Statistiken"
-#: modules/process/indent_analyze.c:1615
+#: modules/process/indent_analyze.c:1438
#, fuzzy, c-format
msgid "Indentor: %s\n"
msgstr "_Linientyp:"
-#: modules/process/indent_analyze.c:1619
+#: modules/process/indent_analyze.c:1442
#, c-format
msgid "Length units: %s\n"
msgstr ""
-#: modules/process/indent_analyze.c:1621
+#: modules/process/indent_analyze.c:1444
#, c-format
msgid "Indentation center at [%d, %d] px: %lf\n"
msgstr ""
-#: modules/process/indent_analyze.c:1623
+#: modules/process/indent_analyze.c:1446
#, c-format
msgid "Maximum at [%d, %d] is: %lf\n"
msgstr ""
-#: modules/process/indent_analyze.c:1625
+#: modules/process/indent_analyze.c:1448
#, c-format
msgid "Difference max-min: %lf\n"
msgstr ""
-#: modules/process/indent_analyze.c:1630
+#: modules/process/indent_analyze.c:1453
#, c-format
msgid "Area (projected) above plane: %g (%.1lf %%)\n"
msgstr ""
-#: modules/process/indent_analyze.c:1634
+#: modules/process/indent_analyze.c:1457
#, c-format
msgid "Area (projected) below plane: %g (%.1lf %%)\n"
msgstr ""
-#: modules/process/indent_analyze.c:1638
+#: modules/process/indent_analyze.c:1461
#, c-format
msgid "Area (projected) of plane: %g (%.1lf %%)\n"
msgstr ""
-#: modules/process/indent_analyze.c:1643
+#: modules/process/indent_analyze.c:1466
#, c-format
msgid "Area (developed) above %g (+%.1f %%)\n"
msgstr ""
-#: modules/process/indent_analyze.c:1646
+#: modules/process/indent_analyze.c:1469
#, c-format
msgid "Area (developed) below %g (+%.1lf %%)\n"
msgstr ""
-#: modules/process/indent_analyze.c:1650
+#: modules/process/indent_analyze.c:1473
#, c-format
msgid "Volume above: %g\n"
msgstr ""
-#: modules/process/indent_analyze.c:1652
+#: modules/process/indent_analyze.c:1475
#, c-format
msgid "Volume below: %g\n"
msgstr ""
-#: modules/process/indent_analyze.c:1654
+#: modules/process/indent_analyze.c:1477
#, fuzzy, c-format
msgid "Volume difference %g\n"
msgstr "Absolute Differenz"
-#: modules/process/indent_analyze.c:1658
+#: modules/process/indent_analyze.c:1481
#, fuzzy
msgid ""
"\n"
"Indentation\n"
msgstr "Segmentierung"
-#: modules/process/indent_analyze.c:1659
+#: modules/process/indent_analyze.c:1482
#, c-format
msgid "Volume %g\n"
msgstr ""
-#: modules/process/indent_analyze.c:1664
+#: modules/process/indent_analyze.c:1487
msgid ""
"\n"
"Indentation - Inner Pile-Up\n"
msgstr ""
-#: modules/process/indent_analyze.c:1670
+#: modules/process/indent_analyze.c:1493
msgid "Indentation - Outer Pile-Up\n"
msgstr ""
@@ -11217,13 +11597,7 @@ msgstr "Fit-Parameter"
msgid "_Lattice:"
msgstr "_Linientyp:"
-#: modules/process/lat_synth.c:651 modules/process/obj_synth.c:544
-#: modules/process/pat_synth.c:1457
-#, fuzzy
-msgid "_Size:"
-msgstr "_Größe:"
-
-#: modules/process/lat_synth.c:662
+#: modules/process/lat_synth.c:662
#, fuzzy
msgid "Lattice rela_xation:"
msgstr "Partikelerzeugung"
@@ -11371,7 +11745,7 @@ msgstr ""
#: modules/process/level_grains.c:187 modules/process/median-bg.c:167
#: modules/process/polylevel.c:293 modules/process/polylevel.c:417
-#: modules/process/sphere-revolve.c:200
+#: modules/process/sphere-revolve.c:221 modules/process/sphere-revolve.c:295
msgid "Background"
msgstr "Untergrund"
@@ -11385,168 +11759,169 @@ msgstr "Graphen mit Gerade nivellieren."
msgid "Quantity to level:"
msgstr "/_Beenden"
-#: modules/process/level_grains.c:231 modules/process/linematch.c:866
-#: modules/process/median-bg.c:217 modules/process/polylevel.c:482
-#: modules/process/sphere-revolve.c:263
+#: modules/process/level_grains.c:231 modules/process/linematch.c:834
+#: modules/process/median-bg.c:217 modules/process/polylevel.c:485
+#: modules/process/sphere-revolve.c:371
msgid "E_xtract background"
msgstr "Untergrund e_xtrahieren"
-#: modules/process/linecorrect.c:54
+#: modules/process/linecorrect.c:52
msgid "Corrects line defects (mostly experimental algorithms)."
msgstr "Korrigiert Zeilendefekte (überwiegend experimentelle Algorithmen)"
-#: modules/process/linecorrect.c:68
+#: modules/process/linecorrect.c:66
msgid "/_Correct Data/Ste_p Line Correction"
msgstr "/Ko_rrigieren/_Stufen Zeilenkorrektur"
-#: modules/process/linecorrect.c:72
+#: modules/process/linecorrect.c:70
msgid "Correct steps in lines"
msgstr "Stufen in Zeilen korrigieren"
-#: modules/process/linematch.c:158 modules/tools/linestats.c:166
+#: modules/process/linematch.c:155 modules/tools/linestats.c:166
#: modules/volume/volume_linestat.c:143
msgid "Median"
msgstr "Median"
-#: modules/process/linematch.c:159
+#: modules/process/linematch.c:156
#, fuzzy
msgid "Median of differences"
msgstr "X Differenz"
-#: modules/process/linematch.c:160
+#: modules/process/linematch.c:157
#, fuzzy
msgid "Modus"
msgstr "FFT Betrag"
-#: modules/process/linematch.c:161
+#: modules/process/linematch.c:158
msgid "linematch|Matching"
msgstr ""
-#: modules/process/linematch.c:162
+#: modules/process/linematch.c:159
#, fuzzy
msgid "linematch|Polynomial"
msgstr "Polynomiell"
-#: modules/process/linematch.c:168
+#: modules/process/linematch.c:165
msgid "Aligns rows by various methods."
msgstr ""
-#: modules/process/linematch.c:182
+#: modules/process/linematch.c:179
#, fuzzy
msgid "/_Correct Data/_Align rows..."
msgstr "/Ko_rrigieren/D_rehung korrigieren..."
-#: modules/process/linematch.c:186
+#: modules/process/linematch.c:183
msgid "Align rows using various methods"
msgstr ""
-#: modules/process/linematch.c:237 modules/process/linematch.c:265
+#: modules/process/linematch.c:234 modules/process/linematch.c:262
#, fuzzy
msgid "Row background"
msgstr "Untergrund"
-#: modules/process/linematch.c:266
+#: modules/process/linematch.c:263
#, fuzzy
msgid "Vertical position"
msgstr "_Vertikal"
-#: modules/process/linematch.c:267
+#: modules/process/linematch.c:264
#, fuzzy
msgid "Corrected offset"
msgstr "Korrigier_te Daten"
-#: modules/process/linematch.c:802
+#: modules/process/linematch.c:769
#, fuzzy
msgid "Align Rows"
msgstr "Diagrammkurven nivellieren"
-#: modules/process/linematch.c:844
+#: modules/process/linematch.c:810
#, fuzzy
msgid "_Polynomial degree:"
msgstr "Polynomiell (0. Ordnung)"
-#: modules/process/linematch.c:876
+#: modules/process/linematch.c:844
#, fuzzy
msgid "Plot background _graph"
msgstr "Drift-Graph zeichnen"
-#: modules/process/lno_synth.c:261 modules/process/noise_synth.c:188
+#: modules/process/lno_synth.c:259 modules/process/noise_synth.c:186
#, fuzzy
msgid "distribution|Triangular"
msgstr "Dreieckig"
-#: modules/process/lno_synth.c:267 modules/process/pat_synth.c:213
+#: modules/process/lno_synth.c:265 modules/process/pat_synth.c:213
msgid "Steps"
msgstr ""
-#: modules/process/lno_synth.c:268
+#: modules/process/lno_synth.c:266
#, fuzzy
msgid "Scars"
msgstr "Fehlerzeilen markieren"
-#: modules/process/lno_synth.c:269 modules/process/pat_synth.c:214
+#: modules/process/lno_synth.c:267 modules/process/pat_synth.c:214
msgid "Ridges"
msgstr ""
-#: modules/process/lno_synth.c:275
+#: modules/process/lno_synth.c:273
msgid "Generates various kinds of line noise."
msgstr ""
-#: modules/process/lno_synth.c:289
+#: modules/process/lno_synth.c:287
msgid "/S_ynthetic/_Line Noise..."
msgstr "/S_ynthetisch/_Linien-Rauschen..."
-#: modules/process/lno_synth.c:293
+#: modules/process/lno_synth.c:291
#, fuzzy
msgid "Generate line noise"
msgstr "Relative Linien"
-#: modules/process/lno_synth.c:431
+#: modules/process/lno_synth.c:429
#, fuzzy
msgid "Line Noise"
msgstr "Linie + Punkte"
-#: modules/process/lno_synth.c:504
+#: modules/process/lno_synth.c:502
msgid "Distribution"
msgstr "VerzerrtVerteilung"
-#: modules/process/lno_synth.c:514 modules/process/noise_synth.c:414
-msgid "Direction:"
-msgstr "Richtung:"
+#: modules/process/lno_synth.c:512 modules/process/mask_noisify.c:158
+#: modules/process/noise_synth.c:412
+#, fuzzy
+msgid "Noise type:"
+msgstr "_Linientyp:"
-#: modules/process/lno_synth.c:523 modules/process/noise_synth.c:423
+#: modules/process/lno_synth.c:521 modules/process/mask_noisify.c:167
+#: modules/process/noise_synth.c:421
#, fuzzy
msgid "S_ymmetrical"
msgstr "Symmetrie"
-#: modules/process/lno_synth.c:524 modules/process/noise_synth.c:424
+#: modules/process/lno_synth.c:522 modules/process/mask_noisify.c:168
+#: modules/process/noise_synth.c:422
msgid "One-sided _positive"
msgstr ""
-#: modules/process/lno_synth.c:525 modules/process/noise_synth.c:425
+#: modules/process/lno_synth.c:523 modules/process/mask_noisify.c:169
+#: modules/process/noise_synth.c:423
msgid "One-sided _negative"
msgstr ""
-#: modules/process/lno_synth.c:546
+#: modules/process/lno_synth.c:544
#, fuzzy
msgid "Noise Type"
msgstr "Punkt_typ:"
-#: modules/process/lno_synth.c:551
+#: modules/process/lno_synth.c:549
#, fuzzy
msgid "_Noise type:"
msgstr "_Linientyp:"
-#: modules/process/lno_synth.c:853 modules/process/lno_synth.c:1222
-msgid "Densi_ty:"
-msgstr "Dich_te:"
-
-#: modules/process/lno_synth.c:864 modules/process/lno_synth.c:1233
+#: modules/process/lno_synth.c:863 modules/process/lno_synth.c:1233
#, fuzzy
msgid "_Within line:"
msgstr "_Glanz:"
-#: modules/process/lno_synth.c:871
+#: modules/process/lno_synth.c:870
msgid "C_umulative"
msgstr ""
@@ -11607,36 +11982,36 @@ msgstr ""
msgid "_Train logistic regression"
msgstr ""
-#: modules/process/logistic.c:275
+#: modules/process/logistic.c:274
#, fuzzy
msgid "_Gaussian blur"
msgstr "Gauß"
-#: modules/process/logistic.c:288
+#: modules/process/logistic.c:285
#, fuzzy
msgid "_Number of Gaussians:"
msgstr "Anzahl an Körnern"
-#: modules/process/logistic.c:296
+#: modules/process/logistic.c:293
#, fuzzy
msgid "_Sobel derivatives"
msgstr "Negativ"
-#: modules/process/logistic.c:307
+#: modules/process/logistic.c:303
msgid "_Laplacian"
msgstr ""
-#: modules/process/logistic.c:318
+#: modules/process/logistic.c:313
#, fuzzy
msgid "_Hessian"
msgstr "Gauß"
-#: modules/process/logistic.c:331
+#: modules/process/logistic.c:325
#, fuzzy
msgid "_Regularization parameter:"
msgstr "Fit-Parameter"
-#: modules/process/logistic.c:623 modules/process/neural.c:1101
+#: modules/process/logistic.c:616 modules/process/neural.c:1108
#, fuzzy
msgid "Training..."
msgstr "Korreliere..."
@@ -11656,13 +12031,13 @@ msgstr "/Ko_rrigieren/_Ausreißer markieren"
msgid "Mark data disconnected from other values"
msgstr "Daten markieren, die weiter als 3σ vom Mittelwert abweichen"
-#: modules/process/mark_disconn.c:187 modules/process/obj_synth.c:422
-#: modules/process/scars.c:279
+#: modules/process/mark_disconn.c:187 modules/process/obj_synth.c:419
+#: modules/process/scars.c:297
msgid "Positive"
msgstr "Positiv"
-#: modules/process/mark_disconn.c:188 modules/process/obj_synth.c:423
-#: modules/process/scars.c:280
+#: modules/process/mark_disconn.c:188 modules/process/obj_synth.c:420
+#: modules/process/scars.c:298
msgid "Negative"
msgstr "Negativ"
@@ -11680,12 +12055,12 @@ msgstr "_Wavelet-Typ:"
msgid "Defect _radius:"
msgstr "_Realer Radius"
-#: modules/process/mark_disconn.c:563
+#: modules/process/mark_disconn.c:552
#, fuzzy
msgid "Filtering..."
msgstr "FFT-Filterung"
-#: modules/process/mark_disconn.c:590
+#: modules/process/mark_disconn.c:579
#, fuzzy
msgid "Marking outliers..."
msgstr "Markiere Grenzen"
@@ -11702,57 +12077,61 @@ msgstr "/_Maske/Markieren m_it..."
msgid "Mask combining and modification"
msgstr ""
-#: modules/process/mark_with.c:192
+#: modules/process/mark_with.c:193
msgid "Mark With"
msgstr "Markieren mit..."
-#: modules/process/mark_with.c:238
+#: modules/process/mark_with.c:231 modules/process/mask_morph.c:209
+msgid "Operation:"
+msgstr "Operation:"
+
+#: modules/process/mark_with.c:239
#, fuzzy
msgid "Se_t mask"
msgstr "Maske invertieren"
-#: modules/process/mark_with.c:239
+#: modules/process/mark_with.c:240
msgid "_Add mask"
msgstr "Maske _addieren"
-#: modules/process/mark_with.c:240
+#: modules/process/mark_with.c:241
msgid "_Subtract mask"
msgstr "Maske _subtrahieren"
-#: modules/process/mark_with.c:241
+#: modules/process/mark_with.c:242
#, fuzzy
msgid "_Intersect masks"
msgstr "Maske invertieren"
-#: modules/process/mark_with.c:247
+#: modules/process/mark_with.c:248
msgid "Mark with:"
msgstr "Markieren mit:"
-#: modules/process/mark_with.c:255
+#: modules/process/mark_with.c:256
msgid "with|_Mask"
msgstr ""
-#: modules/process/mark_with.c:257
+#: modules/process/mark_with.c:258
msgid "with|_Data"
msgstr ""
-#: modules/process/mark_with.c:259
+#: modules/process/mark_with.c:260
msgid "with|_Presentation"
msgstr ""
-#: modules/process/mark_with.c:293
+#: modules/process/mark_with.c:297
msgid "Marked data range:"
msgstr "Markierter Datenbereich:"
-#: modules/process/mark_with.c:301
+#: modules/process/mark_with.c:305
msgid "_Minimum:"
msgstr "_Minimum:"
-#: modules/process/mark_with.c:310
+#: modules/process/mark_with.c:314
msgid "M_aximum:"
msgstr "Ma_ximum:"
-#: modules/process/mark_with.c:378
+#: modules/process/mark_with.c:382
msgid "Operand"
msgstr "Operand"
@@ -11795,120 +12174,120 @@ msgstr "VerzerrtVerteilung"
msgid "Preserve existing masks"
msgstr "Projizierte Fläche"
-#: modules/process/mask_edt.c:95
+#: modules/process/mask_edt.c:89
msgid "Performs simple and true Euclidean distance transforms of masks."
msgstr ""
-#: modules/process/mask_edt.c:109
+#: modules/process/mask_edt.c:103
#, fuzzy
msgid "/_Mask/Distanc_e Transform..."
msgstr "_Transformiert"
-#: modules/process/mask_edt.c:113
+#: modules/process/mask_edt.c:107
#, fuzzy
msgid "Distance transform of mask"
msgstr "_Transformiert"
-#: modules/process/mask_edt.c:116
+#: modules/process/mask_edt.c:110
msgid "/_Mask/Thi_n"
msgstr ""
-#: modules/process/mask_edt.c:120
+#: modules/process/mask_edt.c:114
#, fuzzy
msgid "Thin mask"
msgstr "Maske bearbeiten"
-#: modules/process/mask_edt.c:330 modules/process/mask_edt.c:352
+#: modules/process/mask_edt.c:164 modules/process/mask_edt.c:186
#, fuzzy
msgid "Distance Transform"
msgstr "_Transformiert"
-#: modules/process/mask_edt.c:340
+#: modules/process/mask_edt.c:174
#, fuzzy
msgid "Interior"
msgstr "Schnittmenge"
-#: modules/process/mask_edt.c:341
+#: modules/process/mask_edt.c:175
msgid "Exterior"
msgstr ""
-#: modules/process/mask_edt.c:342
+#: modules/process/mask_edt.c:176
msgid "Two-sided"
msgstr ""
-#: modules/process/mask_edt.c:373 modules/tools/maskedit.c:634
+#: modules/process/mask_edt.c:207 modules/tools/maskedit.c:640
#, fuzzy
msgid "_Distance type:"
msgstr "X Abstand"
-#: modules/process/mask_edt.c:394 modules/tools/maskedit.c:640
+#: modules/process/mask_edt.c:228 modules/tools/maskedit.c:646
msgid "Shrink from _border"
msgstr ""
-#: modules/process/mask_morph.c:117
+#: modules/process/mask_morph.c:116
msgid "Performs basic morphological operations with masks."
msgstr ""
-#: modules/process/mask_morph.c:131
+#: modules/process/mask_morph.c:130
#, fuzzy
-msgid "/_Mask/Morphological Operation..."
+msgid "/_Mask/Morpho_logical Operation..."
msgstr "/_Grundfunktionen/_Verkippen..."
-#: modules/process/mask_morph.c:135
+#: modules/process/mask_morph.c:134
msgid "Morphological operation with mask"
msgstr ""
-#: modules/process/mask_morph.c:169
+#: modules/process/mask_morph.c:168
#, fuzzy
msgid "Erosion"
msgstr "Erosion"
-#: modules/process/mask_morph.c:170
+#: modules/process/mask_morph.c:169
#, fuzzy
msgid "Dilation"
msgstr "Dilatation"
-#: modules/process/mask_morph.c:171 modules/tools/filter.c:242
+#: modules/process/mask_morph.c:170 modules/tools/filter.c:243
#, fuzzy
msgid "filter|Opening"
msgstr "FFT-Filterung"
-#: modules/process/mask_morph.c:172 modules/tools/filter.c:243
+#: modules/process/mask_morph.c:171 modules/tools/filter.c:244
#, fuzzy
msgid "filter|Closing"
msgstr "Gauß"
-#: modules/process/mask_morph.c:173 modules/tools/filter.c:244
+#: modules/process/mask_morph.c:172 modules/tools/filter.c:245
msgid "ASF Opening"
msgstr ""
-#: modules/process/mask_morph.c:174 modules/tools/filter.c:245
+#: modules/process/mask_morph.c:173 modules/tools/filter.c:246
msgid "ASF Closing"
msgstr ""
-#: modules/process/mask_morph.c:178
+#: modules/process/mask_morph.c:177
msgid "Octagon"
msgstr ""
-#: modules/process/mask_morph.c:181
+#: modules/process/mask_morph.c:180
#, fuzzy
msgid "Another mask"
msgstr "Maske invertieren"
-#: modules/process/mask_morph.c:192
+#: modules/process/mask_morph.c:191
msgid "Morphological Operation"
msgstr ""
-#: modules/process/mask_morph.c:224
+#: modules/process/mask_morph.c:223
#, fuzzy
msgid "Structuring element:"
msgstr "Struktur"
-#: modules/process/mask_morph.c:238 modules/tools/maskedit.c:524
+#: modules/process/mask_morph.c:237 modules/tools/maskedit.c:528
msgid "_Radius:"
msgstr "_Radius:"
-#: modules/process/mask_morph.c:249
+#: modules/process/mask_morph.c:248
#, fuzzy
msgid "_Mask:"
msgstr "_Maske"
@@ -11917,40 +12296,63 @@ msgstr "_Maske"
msgid "_Trim empty borders"
msgstr ""
-#: modules/process/maskcor.c:86
+#: modules/process/mask_noisify.c:83
+msgid "Adds salt and/or pepper noise to mask."
+msgstr ""
+
+#: modules/process/mask_noisify.c:97
+#, fuzzy
+msgid "/_Mask/_Noisify..."
+msgstr "/_Körnung/_Verteilungen..."
+
+#: modules/process/mask_noisify.c:101
+#, fuzzy
+msgid "Add noise to mask"
+msgstr "Auswahl zur Maske hinzufügen"
+
+#: modules/process/mask_noisify.c:141
+msgid "Noisify Mask"
+msgstr ""
+
+#: modules/process/mask_noisify.c:184
+#, fuzzy
+msgid "_Alter only boundaries"
+msgstr "Markiere Grenzen"
+
+#: modules/process/maskcor.c:87
msgid "Creates mask by correlation with another data."
msgstr "Erzeugt eine Maske durch Korrelation mit einem anderen Datensatz."
-#: modules/process/maskcor.c:100
+#: modules/process/maskcor.c:101
msgid "/M_ultidata/_Mask by Correlation..."
msgstr "/M_ultidaten/_Maskieren mittels Korrelation..."
-#: modules/process/maskcor.c:104
+#: modules/process/maskcor.c:105
msgid "Create mask by correlation with another data"
msgstr ""
-#: modules/process/maskcor.c:141
+#: modules/process/maskcor.c:142
msgid "Mask by Correlation"
msgstr "Mittels Korrelation maskieren"
-#: modules/process/maskcor.c:165
+#: modules/process/maskcor.c:166
msgid "Correlation _kernel:"
msgstr ""
-#: modules/process/maskcor.c:172
+#: modules/process/maskcor.c:173
msgid "Objects marked"
msgstr ""
-#: modules/process/maskcor.c:173
+#: modules/process/maskcor.c:174
msgid "Correlation maxima"
msgstr ""
-#: modules/process/maskcor.c:174 modules/process/maskcor.c:356
+#: modules/process/maskcor.c:175 modules/process/maskcor.c:360
#, fuzzy
msgid "Correlation score"
msgstr "Korrelations-Wert"
-#: modules/process/maskcor.c:183
+#: modules/process/maskcor.c:185
msgid "Correlation _method:"
msgstr "Korrelations_methode:"
@@ -11979,7 +12381,8 @@ msgid "/_Mask/_Extract Mask"
msgstr "/_Maske/Maske e_xtrahieren"
#: modules/process/maskops.c:78
-msgid "Extract mask to a new channel"
+#, fuzzy
+msgid "Extract mask to a new image"
msgstr "Maske in neuen Kanal extrahieren"
#: modules/process/maskops.c:81
@@ -12009,40 +12412,36 @@ msgstr ""
msgid "Mutual Crop"
msgstr ""
-#: modules/process/mcrop.c:174
+#: modules/process/mcrop.c:173
#, fuzzy
msgid "_Select second argument:"
msgstr "_Auswahlmodus:"
-#: modules/process/measure_lattice.c:174
+#: modules/process/measure_lattice.c:165
#, fuzzy
msgid "Measures parameters of two-dimensional lattices."
msgstr "Ebene zur Auswahl elliptischer Bereiche."
-#: modules/process/measure_lattice.c:188
+#: modules/process/measure_lattice.c:179
#, fuzzy
msgid "/_Statistics/Measure _Lattice..."
msgstr "/_Statistik/Facetten-_Analyse"
-#: modules/process/measure_lattice.c:192
+#: modules/process/measure_lattice.c:183
#, fuzzy
msgid "Measure lattice"
msgstr "Abstände messen"
-#: modules/process/measure_lattice.c:253
+#: modules/process/measure_lattice.c:243
#, fuzzy
msgid "Measure Lattice"
msgstr "Abstände messen"
-#: modules/process/measure_lattice.c:259
-msgid "_Refine"
-msgstr ""
-
-#: modules/process/measure_lattice.c:330
+#: modules/process/measure_lattice.c:320
msgid "_ACF"
msgstr ""
-#: modules/process/measure_lattice.c:331
+#: modules/process/measure_lattice.c:321
#, fuzzy
msgid "_PSDF"
msgstr "PSDF"
@@ -12061,32 +12460,32 @@ msgstr "_Linientyp:"
msgid "_Vectors"
msgstr ""
-#: modules/process/measure_lattice.c:596
+#: modules/process/measure_lattice.c:589
#, fuzzy
msgid "Save Lattice Parameters"
msgstr "Rauigkeits-Parameter speichern"
-#: modules/process/measure_lattice.c:634
+#: modules/process/measure_lattice.c:627
#, fuzzy, c-format
msgid "Vector %d:"
msgstr "X-Fehler %d"
-#: modules/process/measure_lattice.c:643
+#: modules/process/measure_lattice.c:636
#, fuzzy, c-format
msgid "Length %d:"
msgstr "_Länge:"
-#: modules/process/measure_lattice.c:650
+#: modules/process/measure_lattice.c:643
#, fuzzy, c-format
msgid "Angle %d:"
msgstr "Winkel"
-#: modules/process/measure_lattice.c:665
+#: modules/process/measure_lattice.c:657
#, fuzzy
msgid "Angle:"
msgstr "Winkel"
-#: modules/process/measure_lattice.c:681
+#: modules/process/measure_lattice.c:673
#, fuzzy
msgid "Lattice Parameters"
msgstr "Fit-Parameter"
@@ -12112,11 +12511,11 @@ msgstr "Median-Nivellierung"
msgid "Median Level"
msgstr "Median Niveau"
-#: modules/process/median-bg.c:199 modules/process/sphere-revolve.c:237
+#: modules/process/median-bg.c:199 modules/process/sphere-revolve.c:336
msgid "Real _radius:"
msgstr "_Realer Radius"
-#: modules/process/median-bg.c:209 modules/process/sphere-revolve.c:247
+#: modules/process/median-bg.c:209 modules/process/sphere-revolve.c:346
msgid "_Pixel radius:"
msgstr "_Pixel-Radius:"
@@ -12156,7 +12555,7 @@ msgstr "Erster Operand"
msgid "Second operand"
msgstr "Zweiter Operand"
-#: modules/process/merge.c:197 modules/xyz/xyz_raster.c:643
+#: modules/process/merge.c:197 modules/xyz/xyz_raster.c:612
#, fuzzy
msgid "Average"
msgstr "_Minimalwert"
@@ -12210,6 +12609,244 @@ msgstr ""
msgid "Merged images"
msgstr "Zusammengefügte Bilder"
+#: modules/process/mfm_current.c:163
+msgid "Simulation of current line magnetic field"
+msgstr ""
+
+#: modules/process/mfm_current.c:177
+msgid "/SPM M_odes/_MFM/_Current Line Field..."
+msgstr ""
+
+#: modules/process/mfm_current.c:181
+msgid "Simulate stray field above current line"
+msgstr ""
+
+#: modules/process/mfm_current.c:280 modules/process/mfm_parallel.c:282
+msgid "Simulated field"
+msgstr ""
+
+#: modules/process/mfm_current.c:322 modules/process/mfm_field.c:266
+#: modules/process/mfm_parallel.c:324
+#, fuzzy
+msgid "Point charge"
+msgstr "Punkttyp"
+
+#: modules/process/mfm_current.c:323 modules/process/mfm_field.c:267
+#: modules/process/mfm_parallel.c:325
+#, fuzzy
+msgid "Bar"
+msgstr "Binär"
+
+#: modules/process/mfm_current.c:330
+msgid "Current Line Stray Field"
+msgstr ""
+
+#: modules/process/mfm_current.c:415
+#, fuzzy
+msgid "Output"
+msgstr "Ausgabe_art:"
+
+#: modules/process/mfm_current.c:420 modules/process/mfm_field.c:320
+#: modules/process/mfm_parallel.c:415
+#, fuzzy
+msgid "_Output plane height:"
+msgstr "Ausgabe_art:"
+
+#: modules/process/mfm_current.c:428
+#, fuzzy
+msgid "_Stripe width:"
+msgstr "S_teigung:"
+
+#: modules/process/mfm_current.c:436
+msgid "Stripe _current:"
+msgstr ""
+
+#: modules/process/mfm_current.c:444
+#, fuzzy
+msgid "_Position:"
+msgstr "Position:"
+
+#: modules/process/mfm_current.c:461
+msgid "Probe"
+msgstr ""
+
+#: modules/process/mfm_current.c:469
+#, fuzzy
+msgid "P_robe type:"
+msgstr "_Linientyp:"
+
+#: modules/process/mfm_current.c:475 modules/process/mfm_field.c:389
+#: modules/process/mfm_parallel.c:482
+#, fuzzy
+msgid "Tip _magnetization:"
+msgstr "Spitzen_rotation:"
+
+#: modules/process/mfm_current.c:484 modules/process/mfm_field.c:397
+#: modules/process/mfm_parallel.c:491
+#, fuzzy
+msgid "Bar width _x:"
+msgstr "S_teigung:"
+
+#: modules/process/mfm_current.c:493 modules/process/mfm_field.c:405
+#: modules/process/mfm_parallel.c:500
+#, fuzzy
+msgid "Bar width _y:"
+msgstr "S_teigung:"
+
+#: modules/process/mfm_current.c:502 modules/process/mfm_field.c:413
+#: modules/process/mfm_parallel.c:509
+msgid "Bar length (_z):"
+msgstr ""
+
+#: modules/process/mfm_field.c:146
+msgid "Simulation of magnetic field above perpendicular media"
+msgstr ""
+
+#: modules/process/mfm_field.c:160
+msgid "/SPM M_odes/_MFM/_Perpendicular Media Field..."
+msgstr ""
+
+#: modules/process/mfm_field.c:164
+msgid "Compute stray field above perpendicular magnetic medium"
+msgstr ""
+
+#: modules/process/mfm_field.c:276
+msgid "Perpendicular Media Stray Field"
+msgstr ""
+
+#: modules/process/mfm_field.c:328 modules/process/mfm_parallel.c:423
+#, fuzzy
+msgid "_Film thickness:"
+msgstr "Rahmendicke:"
+
+#: modules/process/mfm_field.c:336
+msgid "_Magnetic charge:"
+msgstr ""
+
+#: modules/process/mfm_field.c:344
+msgid "Include domain _walls"
+msgstr ""
+
+#: modules/process/mfm_field.c:354
+#, fuzzy
+msgid "_Exchange constant:"
+msgstr "Fenstergröße"
+
+#: modules/process/mfm_field.c:362
+#, fuzzy
+msgid "_Uniaxial anisotropy:"
+msgstr "DWT Anisotropie"
+
+#: modules/process/mfm_field.c:383 modules/process/mfm_parallel.c:476
+#, fuzzy
+msgid "_Probe type:"
+msgstr "_Linientyp:"
+
+#: modules/process/mfm_findshift.c:88
+msgid "Lift height difference estimation from data blur"
+msgstr ""
+
+#: modules/process/mfm_findshift.c:102
+msgid "/SPM M_odes/_MFM/_Estimate Shift in Z..."
+msgstr ""
+
+#: modules/process/mfm_findshift.c:106
+msgid "Estimate lift height difference in MFM data"
+msgstr ""
+
+#: modules/process/mfm_findshift.c:166 modules/process/psf.c:340
+#, fuzzy
+msgid "Searching..."
+msgstr "Starte"
+
+#: modules/process/mfm_findshift.c:196
+#, fuzzy
+msgid "Estimated shift:"
+msgstr "_Abschätzung"
+
+#: modules/process/mfm_findshift.c:211
+#, fuzzy
+msgid "Shifted field difference"
+msgstr "X Differenz"
+
+#: modules/process/mfm_findshift.c:228
+msgid "Estimate Lift Height Shift"
+msgstr ""
+
+#: modules/process/mfm_findshift.c:255
+#, fuzzy
+msgid "Data to compare:"
+msgstr "Hinzuzufügender _Datensatz:"
+
+#: modules/process/mfm_findshift.c:261
+#, fuzzy
+msgid "Search _from:"
+msgstr "Such-Größe"
+
+#: modules/process/mfm_findshift.c:269
+#, fuzzy
+msgid "Search _to:"
+msgstr "Such-Größe"
+
+#: modules/process/mfm_parallel.c:165
+#, fuzzy
+msgid "Simulation of parallel magnetic media"
+msgstr "Fit-Parameter"
+
+#: modules/process/mfm_parallel.c:179
+msgid "/SPM M_odes/_MFM/Para_llel Media Field..."
+msgstr ""
+
+#: modules/process/mfm_parallel.c:183
+msgid "Simulate stray field above parallel magnetic medium"
+msgstr ""
+
+#: modules/process/mfm_parallel.c:331
+msgid "Parallel Media Stray Field"
+msgstr ""
+
+#: modules/process/mfm_parallel.c:431
+#, fuzzy
+msgid "_Remanent magnetization:"
+msgstr "Spitzen_rotation:"
+
+#: modules/process/mfm_parallel.c:439
+msgid "Size _A (dir. left):"
+msgstr ""
+
+#: modules/process/mfm_parallel.c:447
+msgid "Size _B (dir. right):"
+msgstr ""
+
+#: modules/process/mfm_parallel.c:455
+#, fuzzy
+msgid "_Gap size:"
+msgstr "_Tropfengröße:"
+
+#: modules/process/mfm_shift.c:87
+msgid "Simulation of magnetic field z component change for another level"
+msgstr ""
+
+#: modules/process/mfm_shift.c:101
+msgid "/SPM M_odes/_MFM/_Field Shift in Z..."
+msgstr ""
+
+#: modules/process/mfm_shift.c:105
+msgid "Compute stray field shift for another z level"
+msgstr ""
+
+#: modules/process/mfm_shift.c:146
+msgid "Shifted field"
+msgstr ""
+
+#: modules/process/mfm_shift.c:164
+msgid "Stray Field Plane Shift"
+msgstr ""
+
+#: modules/process/mfm_shift.c:209
+msgid "_Z shift by:"
+msgstr ""
+
#: modules/process/nanoindent_adjust.c:89
#, fuzzy
msgid "Adjust images of two indentor prints."
@@ -12253,7 +12890,7 @@ msgstr "Daten _rotieren"
msgid "E_xtrapolate result data out of measured range"
msgstr "Ergebnis aus Messdaten e_xtrapolieren"
-#: modules/process/nanoindent_adjust.c:295
+#: modules/process/nanoindent_adjust.c:296
#, fuzzy
msgid ""
"Tip has different range/resolution ratio than image. Tip will be resampled."
@@ -12261,7 +12898,7 @@ msgstr ""
"Spitze hat anderes Bereich/Auflösung Verhältnis als das Bild. Spitze wird "
"resampled."
-#: modules/process/nanoindent_adjust.c:334
+#: modules/process/nanoindent_adjust.c:335
msgid "Immersed detail data"
msgstr "Eingefügter Detailbild-Datensatz"
@@ -12307,274 +12944,262 @@ msgstr ""
msgid "error"
msgstr "Fehler"
-#: modules/process/neural.c:503
+#: modules/process/neural.c:504
msgid "NN training error"
msgstr ""
-#: modules/process/neural.c:516
+#: modules/process/neural.c:517
#, fuzzy
msgid "Training"
msgstr "Korreliere..."
-#: modules/process/neural.c:520
+#: modules/process/neural.c:521
#, fuzzy
msgid "_Model:"
msgstr "Modus:"
-#: modules/process/neural.c:530
+#: modules/process/neural.c:532
msgid "_Signal:"
msgstr ""
-#: modules/process/neural.c:541
+#: modules/process/neural.c:544
#, fuzzy
msgid "Training ste_ps:"
msgstr "Fit-Modus"
-#: modules/process/neural.c:557
+#: modules/process/neural.c:561
#, fuzzy
msgid "Model"
msgstr "Modus"
-#: modules/process/neural.c:558
+#: modules/process/neural.c:562
msgid "Signal"
msgstr ""
-#: modules/process/neural.c:575
+#: modules/process/neural.c:579
#, fuzzy
msgid "verb|_Train"
msgstr "_Laden"
-#: modules/process/neural.c:580
+#: modules/process/neural.c:584
#, fuzzy
msgid "Re_initialize"
msgstr "Initialisiere"
-#: modules/process/neural.c:613
+#: modules/process/neural.c:617
msgid "Network"
msgstr ""
-#: modules/process/neural.c:619
+#: modules/process/neural.c:623
#, fuzzy
msgid "Window _width:"
msgstr "Fenstergröße"
-#: modules/process/neural.c:627
+#: modules/process/neural.c:631
#, fuzzy
msgid "Window h_eight:"
msgstr "Neue _Höhe:"
-#: modules/process/neural.c:635
+#: modules/process/neural.c:639
#, fuzzy
msgid "_Hidden nodes:"
msgstr "Versteckt"
-#: modules/process/neural.c:643
+#: modules/process/neural.c:647
#, fuzzy
msgid "Result Units"
msgstr "Ergebnisse\n"
-#: modules/process/neural.c:650
+#: modules/process/neural.c:654
msgid "Power of source _XY:"
msgstr ""
-#: modules/process/neural.c:658
+#: modules/process/neural.c:663
msgid "Power of source _Z:"
msgstr ""
-#: modules/process/neural.c:666
+#: modules/process/neural.c:672
#, fuzzy
msgid "_Fixed units:"
msgstr "_Werteskala:"
-#: modules/process/neural.c:676
+#: modules/process/neural.c:683
msgid "Networks"
msgstr ""
-#: modules/process/neural.c:723
+#: modules/process/neural.c:730
msgid "Network _name:"
msgstr ""
-#: modules/process/neural.c:775
+#: modules/process/neural.c:782
#, fuzzy
msgid "Apply Neural Network"
msgstr "/M_ultidaten/Zusa_mmenführen..."
-#: modules/process/neural.c:798
+#: modules/process/neural.c:805
#, fuzzy
msgid "_Scale proportionally to input"
msgstr "_proportional"
-#: modules/process/neural.c:929
+#: modules/process/neural.c:936
msgid "Model and signal are not compatible."
msgstr ""
-#: modules/process/neural.c:937
+#: modules/process/neural.c:944
msgid "A field dimension is too small for chosen window size."
msgstr ""
-#: modules/process/neural.c:1183 modules/process/neural.c:1349
+#: modules/process/neural.c:1190 modules/process/neural.c:1356
#, fuzzy
msgid "Evaluating..."
msgstr "Korreliere..."
-#: modules/process/neural.c:1309
+#: modules/process/neural.c:1316
#, fuzzy
msgid "Training was canceled."
msgstr "Finde Minima"
-#: modules/process/neural.c:1319
+#: modules/process/neural.c:1326
#, fuzzy, c-format
msgid "Mean difference: %.*f %s"
msgstr "X Differenz"
-#: modules/process/neural.c:1371
+#: modules/process/neural.c:1378
msgid "Evaluated signal"
msgstr ""
-#: modules/process/noise_synth.c:196
+#: modules/process/noise_synth.c:194
msgid "Generates uncorrelated random noise."
msgstr ""
-#: modules/process/noise_synth.c:210
+#: modules/process/noise_synth.c:208
msgid "/S_ynthetic/_Noise..."
msgstr "/S_ynthetisch/_Rauschen..."
-#: modules/process/noise_synth.c:214
+#: modules/process/noise_synth.c:212
msgid "Generate surface of uncorrelated noise"
msgstr ""
-#: modules/process/noise_synth.c:334
+#: modules/process/noise_synth.c:332
#, fuzzy
msgid "Random Noise"
msgstr "Fenstergröße"
-#: modules/process/obj_synth.c:274
+#: modules/process/obj_synth.c:270
#, fuzzy
msgid "Spheres"
msgstr "Unterdrücken"
-#: modules/process/obj_synth.c:275
+#: modules/process/obj_synth.c:271
msgid "Boxes"
msgstr ""
-#: modules/process/obj_synth.c:276
+#: modules/process/obj_synth.c:272
#, fuzzy
msgid "Cones"
msgstr "Keine"
-#: modules/process/obj_synth.c:277
+#: modules/process/obj_synth.c:273
msgid "Pyramids"
msgstr ""
-#: modules/process/obj_synth.c:278
+#: modules/process/obj_synth.c:274
#, fuzzy
msgid "Diamonds"
msgstr "Diamant"
-#: modules/process/obj_synth.c:279
+#: modules/process/obj_synth.c:275
msgid "Tetrahedrons"
msgstr ""
-#: modules/process/obj_synth.c:280
+#: modules/process/obj_synth.c:276
msgid "Nuggets"
msgstr ""
-#: modules/process/obj_synth.c:281
+#: modules/process/obj_synth.c:277
msgid "Thatches"
msgstr ""
-#: modules/process/obj_synth.c:282
+#: modules/process/obj_synth.c:278
#, fuzzy
msgid "Tents"
msgstr "Punkte"
-#: modules/process/obj_synth.c:283
+#: modules/process/obj_synth.c:279
#, fuzzy
msgid "Gaussians"
msgstr "Gauss'sch"
-#: modules/process/obj_synth.c:284
+#: modules/process/obj_synth.c:280
#, fuzzy
msgid "Doughnuts"
msgstr "Rauigkeit"
-#: modules/process/obj_synth.c:285
+#: modules/process/obj_synth.c:281
#, fuzzy
msgid "Parabolic bumps"
msgstr "Parallel"
-#: modules/process/obj_synth.c:291
+#: modules/process/obj_synth.c:287
msgid "Generates randomly patterned surfaces by placing objects."
msgstr ""
-#: modules/process/obj_synth.c:305
-msgid "/S_ynthetic/_Objects..."
+#: modules/process/obj_synth.c:301
+#, fuzzy
+msgid "/S_ynthetic/_Deposition/_Objects..."
msgstr "/S_ynthetisch/_Objekte..."
-#: modules/process/obj_synth.c:309
+#: modules/process/obj_synth.c:305
msgid "Generate surface of randomly placed objects"
msgstr ""
-#: modules/process/obj_synth.c:424
+#: modules/process/obj_synth.c:421
#, fuzzy
msgid "Both (random)"
msgstr "Rand"
-#: modules/process/obj_synth.c:439
+#: modules/process/obj_synth.c:436
#, fuzzy
msgid "Random Objects"
msgstr "Fenstergröße"
-#: modules/process/obj_synth.c:513
-#, fuzzy
-msgid "_Shape:"
-msgstr "_Skala:"
-
-#: modules/process/obj_synth.c:531
-msgid "obj."
-msgstr ""
-
-#: modules/process/obj_synth.c:551
+#: modules/process/obj_synth.c:549
#, fuzzy
msgid "Aspect Ratio"
msgstr "_Operator:"
-#: modules/process/obj_synth.c:558
+#: modules/process/obj_synth.c:556
#, fuzzy
msgid "_Aspect ratio:"
msgstr "_Operator:"
-#: modules/process/obj_synth.c:588
+#: modules/process/obj_synth.c:586
msgid "Scales _with size"
msgstr ""
-#: modules/process/obj_synth.c:612
+#: modules/process/obj_synth.c:611
#, fuzzy
msgid "_Feature type:"
msgstr "_Filtertyp:"
-#: modules/process/obj_synth.c:807
-msgid "_Truncate:"
-msgstr ""
-
-#: modules/process/otsu_threshold.c:39 modules/process/otsu_threshold.c:59
+#: modules/process/otsu_threshold.c:40 modules/process/otsu_threshold.c:60
msgid "Automated threshold using Otsu's method on heights."
msgstr ""
-#: modules/process/otsu_threshold.c:55
+#: modules/process/otsu_threshold.c:56
#, fuzzy
-msgid "/_Grains/_Mark by Otsu's..."
+msgid "/_Grains/_Mark by Otsu's"
msgstr "/_Körnung/_Markieren mit Schwellwert..."
-#: modules/process/outliers.c:40
+#: modules/process/outliers.c:41
msgid "Creates mask of outliers."
msgstr "Erzeugt Maske üver Ausreißern"
-#: modules/process/outliers.c:54
+#: modules/process/outliers.c:55
msgid "/_Correct Data/Mask of _Outliers"
msgstr "/Ko_rrigieren/_Ausreißer markieren"
-#: modules/process/outliers.c:58
+#: modules/process/outliers.c:59
msgid "Mark data farther than 3σ from mean value"
msgstr "Daten markieren, die weiter als 3σ vom Mittelwert abweichen"
@@ -12598,89 +13223,112 @@ msgstr ""
msgid "_Pattern:"
msgstr ""
-#: modules/process/pat_synth.c:812
+#: modules/process/pat_synth.c:813
msgid "Flat"
msgstr ""
-#: modules/process/pat_synth.c:820
+#: modules/process/pat_synth.c:821
#, fuzzy
msgid "_Flat width:"
msgstr "Suchbereich _Breite:"
-#: modules/process/pat_synth.c:837 modules/process/pat_synth.c:1139
-#: modules/process/pat_synth.c:1474
+#: modules/process/pat_synth.c:838 modules/process/pat_synth.c:1140
+#: modules/process/pat_synth.c:1475
#, fuzzy
msgid "_Slope width:"
msgstr "S_teigung:"
-#: modules/process/pat_synth.c:1099
+#: modules/process/pat_synth.c:1100
#, fuzzy
msgid "Top"
msgstr "Bis:"
-#: modules/process/pat_synth.c:1106
+#: modules/process/pat_synth.c:1107
msgid "Flat _top width:"
msgstr ""
-#: modules/process/pat_synth.c:1114
+#: modules/process/pat_synth.c:1115
msgid "Bottom"
msgstr ""
-#: modules/process/pat_synth.c:1122
+#: modules/process/pat_synth.c:1123
msgid "Flat _bottom width:"
msgstr ""
-#: modules/process/pat_synth.c:1440
+#: modules/process/pat_synth.c:1441
#, fuzzy
msgid "_Distance:"
msgstr "X Abstand"
-#: modules/process/pid.c:96
+#: modules/process/phase_synth.c:136
+msgid "Generates phase-separated structures."
+msgstr ""
+
+#: modules/process/phase_synth.c:150
+#, fuzzy
+msgid "/S_ynthetic/P_hases..."
+msgstr "/S_ynthetisch/_Partikel..."
+
+#: modules/process/phase_synth.c:154
+#, fuzzy
+msgid "Generate surface with separated phases"
+msgstr "Relative Linien"
+
+#: modules/process/phase_synth.c:203
+#, fuzzy
+msgid "Separated Phases"
+msgstr "_Graph"
+
+#: modules/process/phase_synth.c:287
+msgid "Size s_pread:"
+msgstr ""
+
+#: modules/process/pid.c:95
msgid "A simple PID simulator"
msgstr ""
-#: modules/process/pid.c:110
+#: modules/process/pid.c:109
#, fuzzy
msgid "/_Tip and Indentation/_PID simulation..."
msgstr "/Spi_tze/_Dilatation..."
-#: modules/process/pid.c:114
+#: modules/process/pid.c:113
msgid "Simulate PID effects on measurement"
msgstr ""
-#: modules/process/pid.c:158
+#: modules/process/pid.c:157
#, fuzzy
msgid "PID FW result"
msgstr "Fit-Ergebnis"
-#: modules/process/pid.c:167
+#: modules/process/pid.c:166
msgid "PID FW max. force"
msgstr ""
-#: modules/process/pid.c:176
+#: modules/process/pid.c:175
#, fuzzy
msgid "PID REV result"
msgstr "Ergebnis"
-#: modules/process/pid.c:185
+#: modules/process/pid.c:184
msgid "PID REV max. force"
msgstr ""
-#: modules/process/pid.c:198
+#: modules/process/pid.c:196
#, fuzzy
msgid "PID simulation"
msgstr "Dilatation"
-#: modules/process/pid.c:215
+#: modules/process/pid.c:214
#, fuzzy
msgid "_Proportional:"
msgstr "_proportional"
-#: modules/process/pid.c:221
+#: modules/process/pid.c:220
msgid "_Integral:"
msgstr ""
-#: modules/process/pid.c:227
+#: modules/process/pid.c:226
#, fuzzy
msgid "_Integration steps:"
msgstr "_Interpolationstyp:"
@@ -12690,15 +13338,15 @@ msgstr "_Interpolationstyp:"
msgid "_Derivative:"
msgstr "Negativ"
-#: modules/process/pid.c:241
+#: modules/process/pid.c:240
msgid "PID/scan speed _ratio:"
msgstr ""
-#: modules/process/pid.c:253
+#: modules/process/pid.c:255
msgid "Force strength:"
msgstr ""
-#: modules/process/pid.c:259
+#: modules/process/pid.c:261
msgid "Force setpoint:"
msgstr ""
@@ -12706,7 +13354,7 @@ msgstr ""
msgid "Scanning..."
msgstr ""
-#: modules/process/pid.c:396
+#: modules/process/pid.c:401
msgid "Computation diverged, try to change parameters"
msgstr ""
@@ -12729,23 +13377,23 @@ msgstr "Wendet polynomische Verzerrung in der horizontalen Ebene an"
msgid "Distort by Polynomial"
msgstr "Polynomisch verzerren"
-#: modules/process/polydistort.c:282
+#: modules/process/polydistort.c:285
msgid "Ori_ginal"
msgstr "Ori_ginal"
-#: modules/process/polydistort.c:283
+#: modules/process/polydistort.c:286
msgid "_Transformed"
msgstr "_Transformiert"
-#: modules/process/polydistort.c:289
+#: modules/process/polydistort.c:292
msgid "X Coefficients"
msgstr "X Koeffizienten"
-#: modules/process/polydistort.c:303
+#: modules/process/polydistort.c:306
msgid "Y Coefficients"
msgstr "Y Koeffizienten"
-#: modules/process/polydistort.c:499
+#: modules/process/polydistort.c:502
msgid "Distorted"
msgstr "Verzerrt"
@@ -12782,24 +13430,24 @@ msgstr "Nivellierte Daten"
msgid "_Horizontal polynom degree:"
msgstr "Grad des Polynoms _horizontal:"
-#: modules/process/polylevel.c:450
+#: modules/process/polylevel.c:451
msgid "_Vertical polynom degree:"
msgstr "Grad des Polynoms _vertikal:"
-#: modules/process/polylevel.c:456
+#: modules/process/polylevel.c:458
msgid "_Same degrees"
msgstr "_Gleiche Grade"
-#: modules/process/polylevel.c:474
+#: modules/process/polylevel.c:476
msgid "_Maximum polynom degree:"
msgstr "_Maximaler Grad des Polynoms:"
-#: modules/process/polylevel.c:561
+#: modules/process/polylevel.c:564
#, fuzzy
msgid "Polynomial Coefficients"
msgstr "X Koeffizienten"
-#: modules/process/polylevel.c:934 modules/tools/distance.c:594
+#: modules/process/polylevel.c:937 modules/tools/distance.c:594
#: modules/tools/selectionmanager.c:720
msgid "Save Table"
msgstr ""
@@ -12822,7 +13470,8 @@ msgid "/_Presentation/E_xtract Presentation"
msgstr "/_Präsentation/Präsentation e_xtrahieren"
#: modules/process/presentationops.c:81
-msgid "Extract presentation to a new channel"
+#, fuzzy
+msgid "Extract presentation to a new image"
msgstr "Präsentation in neuen Kanal extrahieren"
#: modules/process/presentationops.c:84
@@ -12849,6 +13498,11 @@ msgstr "Präsentation hinzufügen"
msgid "_Data to attach:"
msgstr "Hinzuzufügender _Datensatz:"
+#: modules/process/preview.h:245
+#, fuzzy
+msgid "Combine with existing mask:"
+msgstr "Projizierte Fläche"
+
#: modules/process/psdf_logphi.c:76
#, fuzzy
msgid ""
@@ -12871,10 +13525,88 @@ msgstr ""
msgid "Log-Phi PSDF"
msgstr ""
-#: modules/process/psdf_logphi.c:275 modules/process/wpour_mark.c:320
+#: modules/process/psdf_logphi.c:276 modules/process/wpour_mark.c:320
+#, fuzzy
+msgid "Gaussian _smoothing:"
+msgstr "Gauss'sch"
+
+#: modules/process/psf-fit.c:165
+#, fuzzy
+msgid "Gaussian (asymmetric)"
+msgstr "Gauss'sch"
+
+#: modules/process/psf-fit.c:177
+msgid "Point spread function estimation by fitting explicit function form."
+msgstr ""
+
+#: modules/process/psf-fit.c:191
+#, fuzzy
+msgid "/_Statistics/_PSF Fit..."
+msgstr "/_Statistik/_Fraktale Dimension..."
+
+#: modules/process/psf-fit.c:195
+msgid "Fit PSF from known data and image"
+msgstr ""
+
+#: modules/process/psf-fit.c:246 modules/process/psf.c:181
+#: modules/process/psf.c:230
+#, fuzzy
+msgid "PSF"
+msgstr "PSDF"
+
+#: modules/process/psf-fit.c:254 modules/process/psf.c:195
+msgid "PSF*P"
+msgstr ""
+
+#: modules/process/psf-fit.c:271
+#, fuzzy
+msgid "Fit PSF"
+msgstr "Sphäre fitten"
+
+#: modules/process/psf-fit.c:289 modules/process/psf.c:286
+msgid "_Ideal response:"
+msgstr ""
+
+#: modules/process/psf.c:117
+#, fuzzy
+msgid "Point spread function estimation"
+msgstr "Präsentation: Canny Kantenerkennung"
+
+#: modules/process/psf.c:131
+#, fuzzy
+msgid "/_Statistics/_PSF Guess..."
+msgstr "/_Statistik/_Fraktale Dimension..."
+
+#: modules/process/psf.c:135
+msgid "Estimate PSF from known data and image"
+msgstr ""
+
+#: modules/process/psf.c:208
+msgid "PSF*P - I"
+msgstr ""
+
+#: modules/process/psf.c:231
+#, fuzzy
+msgid "Convolved"
+msgstr "_Laplace von Gaussglocke gefaltet"
+
+#: modules/process/psf.c:237
+#, fuzzy
+msgid "Estimate PSF"
+msgstr "_Abschätzung"
+
+#: modules/process/psf.c:238
+msgid "_Fit"
+msgstr ""
+
+#: modules/process/psf.c:295
#, fuzzy
-msgid "Gaussian _smoothing:"
-msgstr "Gauss'sch"
+msgid "_Display:"
+msgstr "_Anzeige:"
+
+#: modules/process/psf.c:301
+msgid "_Sigma init:"
+msgstr ""
#: modules/process/rank.c:92
msgid "Enhances local contrast using a rank transform."
@@ -12932,7 +13664,7 @@ msgstr "/_Grundfunktionen/Rotieren um _Winkel..."
msgid "Rotate by arbitrary angle"
msgstr "Um beliebigen Winkel rotieren"
-#: modules/process/rotate.c:192
+#: modules/process/rotate.c:192 modules/volume/volume_swaxes.c:651
msgid "Rotated Data"
msgstr "Rotierter Datensatz"
@@ -12995,65 +13727,65 @@ msgstr "Skalierter Datensatz"
msgid "verb|Scale"
msgstr "Skalieren"
-#: modules/process/scale.c:216
+#: modules/process/scale.c:217
msgid "Scale by _ratio:"
msgstr "Skaliere im _Verhältnis:"
-#: modules/process/scale.c:224
+#: modules/process/scale.c:225
msgid "_proportional"
msgstr "_proportional"
-#: modules/process/scale.c:235
+#: modules/process/scale.c:237
msgid "New _width:"
msgstr "Neue _Breite:"
-#: modules/process/scale.c:243
+#: modules/process/scale.c:246
msgid "New _height:"
msgstr "Neue _Höhe:"
-#: modules/process/scars.c:113
+#: modules/process/scars.c:122
#, fuzzy
msgid "Marks and/or removes scars (horizontal linear artifacts)."
msgstr ""
"Markiert und/oder entfernt Fehlerzeilen (horizontale Zeilen-Artefakte)."
-#: modules/process/scars.c:127
+#: modules/process/scars.c:136
msgid "/_Correct Data/M_ark Scars..."
msgstr "/Ko_rrigieren/_Fehlerzeilen markieren..."
-#: modules/process/scars.c:131
+#: modules/process/scars.c:140
msgid "Mark horizontal scars (strokes)"
msgstr "Horizontale Fehlerzeilen markieren (Striche, Schmisse)"
-#: modules/process/scars.c:134
+#: modules/process/scars.c:143
msgid "/_Correct Data/Remove _Scars"
msgstr "/Ko_rrigieren/Fehler_zeilen entfernen"
-#: modules/process/scars.c:138
+#: modules/process/scars.c:147
msgid "Correct horizontal scars (strokes)"
msgstr "Horizontale Fehlerzeilen (Striche, Schmisse) korrigieren"
-#: modules/process/scars.c:293
+#: modules/process/scars.c:312
msgid "Mark Scars"
msgstr "Fehlerzeilen markieren"
-#: modules/process/scars.c:331
+#: modules/process/scars.c:353
msgid "Maximum _width:"
msgstr "Maximale _Breite:"
-#: modules/process/scars.c:338
+#: modules/process/scars.c:361
msgid "Minimum _length:"
msgstr "Minimale _Länge:"
-#: modules/process/scars.c:345
+#: modules/process/scars.c:369
msgid "_Hard threshold:"
msgstr "_Harter Schwellwert:"
-#: modules/process/scars.c:353
+#: modules/process/scars.c:377
msgid "_Soft threshold:"
msgstr "_Weicher Schwellwert:"
-#: modules/process/scars.c:361
+#: modules/process/scars.c:385
msgid "Scars type:"
msgstr "Fehlzeilen-Typ:"
@@ -13100,27 +13832,27 @@ msgstr "_Interpolationstyp:"
msgid "_Quality:"
msgstr "/_Beenden"
-#: modules/process/shade.c:92
+#: modules/process/shade.c:94
msgid "Creates a shaded presentation of data."
msgstr ""
-#: modules/process/shade.c:106
+#: modules/process/shade.c:108
msgid "/_Presentation/_Shading..."
msgstr "/_Präsentation/_Schattierung..."
-#: modules/process/shade.c:110
+#: modules/process/shade.c:112
msgid "Shade data"
msgstr "Daten schattieren"
-#: modules/process/shade.c:207
+#: modules/process/shade.c:209
msgid "Shading"
msgstr "Schattierung"
-#: modules/process/shade.c:253
+#: modules/process/shade.c:260
msgid "_Mix:"
msgstr ""
-#: modules/process/slope_dist.c:161
+#: modules/process/slope_dist.c:160
#, fuzzy
msgid ""
"Calculates one- or two-dimensional distribution of slopes or graph of their "
@@ -13129,85 +13861,139 @@ msgstr ""
"Berechnet die zweidimensionale Winkelverteilung; das sind die Projektionen "
"aller Steigungen auf alle Richtungen."
-#: modules/process/slope_dist.c:176
+#: modules/process/slope_dist.c:175
msgid "/_Statistics/_Slope Distribution..."
msgstr "/_Statistik/_Neigungsgrad-Verteilung"
-#: modules/process/slope_dist.c:180
+#: modules/process/slope_dist.c:179
msgid "Calculate angular slope distribution"
msgstr ""
-#: modules/process/slope_dist.c:221
+#: modules/process/slope_dist.c:220
msgid "Slope distribution"
msgstr ""
-#: modules/process/slope_dist.c:253
+#: modules/process/slope_dist.c:252
msgid "_Two-dimensional distribution"
msgstr ""
-#: modules/process/slope_dist.c:254
+#: modules/process/slope_dist.c:253
msgid "Directional (φ) _graph"
msgstr ""
-#: modules/process/slope_dist.c:255
+#: modules/process/slope_dist.c:254
msgid "_Inclination (θ) graph"
msgstr ""
-#: modules/process/slope_dist.c:256
+#: modules/process/slope_dist.c:255
msgid "Inclination (gra_dient) graph"
msgstr ""
-#: modules/process/slope_dist.c:270
+#: modules/process/slope_dist.c:269
msgid "Slope Distribution"
msgstr ""
-#: modules/process/slope_dist.c:755
+#: modules/process/slope_dist.c:749
msgid "Angular Slope Distribution"
msgstr ""
-#: modules/process/slope_dist.c:763 modules/process/tilt.c:179
+#: modules/process/slope_dist.c:757 modules/process/tilt.c:179
msgid "Slopes"
msgstr ""
-#: modules/process/slope_dist.c:824 modules/process/slope_dist.c:893
+#: modules/process/slope_dist.c:818 modules/process/slope_dist.c:887
#, fuzzy
msgid "Inclination Distribution"
msgstr "Kornverteilungen"
-#: modules/process/slope_dist.c:832 modules/process/slope_dist.c:901
+#: modules/process/slope_dist.c:826 modules/process/slope_dist.c:895
#, fuzzy
msgid "Inclinations"
msgstr "Kreuzungen"
-#: modules/process/sphere-revolve.c:97
+#: modules/process/sphere-revolve.c:111
msgid "Subtracts background by arc or sphere revolution."
msgstr ""
-#: modules/process/sphere-revolve.c:113
+#: modules/process/sphere-revolve.c:125
#, fuzzy
msgid "/_Level/Revolve _Arc..."
msgstr "/_Nivellierung/Revolve _Arc"
-#: modules/process/sphere-revolve.c:117
+#: modules/process/sphere-revolve.c:129
msgid "Level data by arc revolution"
msgstr ""
-#: modules/process/sphere-revolve.c:208 modules/tools/sfunctions.c:371
+#: modules/process/sphere-revolve.c:132
+#, fuzzy
+msgid "/_Level/Revolve _Sphere..."
+msgstr "/_Nivellierung/Revolve _Arc"
+
+#: modules/process/sphere-revolve.c:136
+#, fuzzy
+msgid "Level data by sphere revolution"
+msgstr "Daten durch Subtraktion der Mittelwertebene nivellieren"
+
+#: modules/process/sphere-revolve.c:303 modules/tools/sfunctions.c:381
msgid "_Horizontal direction"
msgstr "_Horizontal"
-#: modules/process/sphere-revolve.c:209 modules/tools/sfunctions.c:372
+#: modules/process/sphere-revolve.c:304 modules/tools/sfunctions.c:382
msgid "_Vertical direction"
msgstr "_Vertikal"
-#: modules/process/sphere-revolve.c:210
+#: modules/process/sphere-revolve.c:305
msgid "_Both directions"
msgstr "_Beide Richtungen"
-#: modules/process/sphere-revolve.c:217
+#: modules/process/sphere-revolve.c:315
+#, fuzzy
+msgid "Revolve Sphere"
+msgstr "Fehlstellen entfernen"
+
+#: modules/process/sphere-revolve.c:315
msgid "Revolve Arc"
msgstr ""
+#: modules/process/sphere-revolve.c:355
+msgid "Direction:"
+msgstr "Richtung:"
+
+#: modules/process/sphere-revolve.c:699
+msgid "Revolving sphere..."
+msgstr ""
+
+#: modules/process/stitch.c:135
+msgid "Stitch multiple images based on offsets of origins."
+msgstr ""
+
+#: modules/process/stitch.c:149
+#, fuzzy
+msgid "/M_ultidata/_Stitch..."
+msgstr "/M_ultidaten/_Arithmetik..."
+
+#: modules/process/stitch.c:153
+msgid "Stitch images using offsets"
+msgstr ""
+
+#: modules/process/stitch.c:269
+msgid "Stitch"
+msgstr ""
+
+#: modules/process/stitch.c:312
+msgid "Channels"
+msgstr "Kanäle"
+
+#: modules/process/stitch.c:435
+#, fuzzy
+msgid "Restore"
+msgstr "Ergebnis-Auflösung:"
+
+#: modules/process/stitch.c:445 modules/tools/linestats.c:379
+#: modules/tools/sfunctions.c:440 modules/tools/stats.c:406
+msgid "_Instant updates"
+msgstr "_Sofort aktualisieren"
+
#: modules/process/straighten_path.c:126
msgid "Extracts a straightened part of image along a curve."
msgstr ""
@@ -13224,31 +14010,31 @@ msgstr ""
msgid "Straighten Path"
msgstr ""
-#: modules/process/straighten_path.c:254
+#: modules/process/straighten_path.c:253
#, fuzzy
msgid "Res_tore"
msgstr "Ergebnis-Auflösung:"
-#: modules/process/straighten_path.c:259
+#: modules/process/straighten_path.c:258
msgid "Re_verse"
msgstr ""
#: modules/process/straighten_path.c:278 modules/tools/pathlevel.c:256
-#: modules/tools/profile.c:507 modules/tools/roughness.c:854
+#: modules/tools/profile.c:503 modules/tools/roughness.c:868
msgid "_Thickness:"
msgstr ""
-#: modules/process/straighten_path.c:286
+#: modules/process/straighten_path.c:287
#, fuzzy
msgid "_Slackness:"
msgstr "Linien_dicke:"
-#: modules/process/straighten_path.c:292
+#: modules/process/straighten_path.c:293
#, fuzzy
msgid "C_losed curve"
msgstr "Datei schließen"
-#: modules/process/straighten_path.c:379
+#: modules/process/straighten_path.c:380
msgid "Straightened"
msgstr ""
@@ -13270,55 +14056,54 @@ msgstr ""
msgid "Supres"
msgstr ""
-#: modules/process/superresolution.c:421
+#: modules/process/superresolution.c:420
msgid "Correlating to determine mean shift..."
msgstr ""
-#: modules/process/superresolution.c:511
+#: modules/process/superresolution.c:510
msgid "Cross-correlation..."
msgstr ""
-#: modules/process/superresolution.c:554 modules/xyz/xyz_raster.c:1079
-#: modules/xyz/xyz_raster.c:1119
+#: modules/process/superresolution.c:553 modules/xyz/xyz_raster.c:1053
+#: modules/xyz/xyz_raster.c:1093
msgid "Interpolating..."
msgstr "Interpoliere..."
-#: modules/process/synth.h:343
+#: modules/process/synth.h:344
#, fuzzy
msgid "Roundness"
msgstr "Rund "
-#: modules/process/synth.h:351
+#: modules/process/synth.h:352
#, fuzzy
msgid "Roundn_ess:"
msgstr "Rund "
-#: modules/process/synth.h:399
+#: modules/process/synth.h:401
msgid "Orientation"
msgstr "Orientierung"
-#: modules/process/synth.h:408
+#: modules/process/synth.h:410
msgid "Orien_tation:"
msgstr "Orien_tierung:"
-#: modules/process/synth.h:432
+#: modules/process/synth.h:436
+msgid "_Truncate:"
+msgstr ""
+
+#: modules/process/synth.h:460
msgid "Variance:"
msgstr "Varianz:"
-#: modules/process/synth.h:456
-#, fuzzy
-msgid "Deformation"
-msgstr "_Operator:"
-
-#: modules/process/synth.h:464
+#: modules/process/synth.h:493
msgid "_Amplitude:"
msgstr ""
-#: modules/process/synth.h:472
+#: modules/process/synth.h:501
msgid "_Lateral scale:"
msgstr "_Laterale Skala:"
-#: modules/process/synth.h:566
+#: modules/process/synth.h:595
#, fuzzy
msgid "Randomi_ze"
msgstr "Fenstergröße"
@@ -13336,43 +14121,43 @@ msgstr "/_Grundfunktionen/_Bereich einschränken..."
msgid "Limit data range"
msgstr "Fehlerzeilen markieren"
-#: modules/process/threshold.c:246
+#: modules/process/threshold.c:241
msgid "Limit Range"
msgstr "Bereich einschränken"
-#: modules/process/threshold.c:281
+#: modules/process/threshold.c:276
#, fuzzy
msgid "Specify _thresholds"
msgstr "_Weicher Schwellwert:"
-#: modules/process/threshold.c:283
+#: modules/process/threshold.c:278
msgid "Use _display range"
msgstr ""
-#: modules/process/threshold.c:285
+#: modules/process/threshold.c:280
#, fuzzy
msgid "Cut off outlier_s"
msgstr "Erzeugt Maske üver Ausreißern"
-#: modules/process/threshold.c:294
+#: modules/process/threshold.c:289
msgid "_Lower:"
msgstr ""
-#: modules/process/threshold.c:300
+#: modules/process/threshold.c:295
msgid "_Upper:"
msgstr ""
-#: modules/process/threshold.c:305
+#: modules/process/threshold.c:300
msgid "Set to _Full Range"
msgstr ""
#. TRANSLATORS: This is a range: 123 to 456.
-#: modules/process/threshold.c:318
+#: modules/process/threshold.c:313
#, c-format
msgid "%.*f to %.*f"
msgstr ""
-#: modules/process/threshold.c:341
+#: modules/process/threshold.c:336
#, fuzzy
msgid "F_arther than:"
msgstr "Kleiner als"
@@ -13394,11 +14179,11 @@ msgstr "Um "
msgid "Tilt"
msgstr "Verkippen"
-#: modules/process/tilt.c:185 modules/volume/volume_slice.c:444
+#: modules/process/tilt.c:185 modules/volume/volume_slice.c:446
msgid "_X:"
msgstr "_X:"
-#: modules/process/tilt.c:194 modules/volume/volume_slice.c:464
+#: modules/process/tilt.c:194 modules/volume/volume_slice.c:469
msgid "_Y:"
msgstr "_Y:"
@@ -13406,32 +14191,32 @@ msgstr "_Y:"
msgid "Angles"
msgstr "Winkel"
-#: modules/process/tip_blind.c:178
+#: modules/process/tip_blind.c:177
msgid "Blind estimation of SPM tip using Villarubia's algorithm."
msgstr ""
-#: modules/process/tip_blind.c:192
+#: modules/process/tip_blind.c:191
#, fuzzy
msgid "/_Tip and Indentation/_Blind Estimation..."
msgstr "/Spi_tze/_Blinde Abschätzung..."
-#: modules/process/tip_blind.c:196
+#: modules/process/tip_blind.c:195
msgid "Blind tip estimation"
msgstr ""
-#: modules/process/tip_blind.c:231
+#: modules/process/tip_blind.c:230
msgid "Blind Tip Estimation"
msgstr ""
-#: modules/process/tip_blind.c:232
+#: modules/process/tip_blind.c:231
msgid "Run _Partial"
msgstr ""
-#: modules/process/tip_blind.c:233
+#: modules/process/tip_blind.c:232
msgid "Run _Full"
msgstr ""
-#: modules/process/tip_blind.c:234
+#: modules/process/tip_blind.c:233
msgid "_Reset Tip"
msgstr ""
@@ -13439,82 +14224,82 @@ msgstr ""
msgid "Related _data:"
msgstr ""
-#: modules/process/tip_blind.c:326
+#: modules/process/tip_blind.c:327
msgid "Estimated Tip Size"
msgstr ""
-#: modules/process/tip_blind.c:347
+#: modules/process/tip_blind.c:350
msgid "_Same resolution"
msgstr ""
-#: modules/process/tip_blind.c:366
+#: modules/process/tip_blind.c:376
msgid "Noise suppression t_hreshold:"
msgstr ""
-#: modules/process/tip_blind.c:386
+#: modules/process/tip_blind.c:384
msgid "Use _boundaries"
msgstr ""
-#: modules/process/tip_blind.c:396
+#: modules/process/tip_blind.c:395
msgid "Stripes"
msgstr ""
-#: modules/process/tip_blind.c:402
+#: modules/process/tip_blind.c:401
msgid "_Split to stripes:"
msgstr ""
-#: modules/process/tip_blind.c:416
+#: modules/process/tip_blind.c:412
#, fuzzy
msgid "_Preview stripe:"
msgstr "Vorschautyp:"
-#: modules/process/tip_blind.c:423
+#: modules/process/tip_blind.c:420
#, fuzzy
msgid "Plot size _graph"
msgstr "Drift-Graph zeichnen"
-#: modules/process/tip_blind.c:433
+#: modules/process/tip_blind.c:430
#, fuzzy
msgid "Create tip i_mages"
msgstr "Zwei Bilder zusammenführen"
#. TRANSLATORS: Prefix for the progressbar message.
-#: modules/process/tip_blind.c:810
+#: modules/process/tip_blind.c:807
#, c-format
msgid "Stripe %u: "
msgstr ""
-#: modules/process/tip_blind.c:917 modules/process/tip_blind.c:941
+#: modules/process/tip_blind.c:914 modules/process/tip_blind.c:938
msgid "Estimated tip"
msgstr ""
-#: modules/process/tip_blind.c:1207 modules/process/tip_blind.c:1216
+#: modules/process/tip_blind.c:1204 modules/process/tip_blind.c:1213
#, fuzzy
msgid "Tip radius evolution"
msgstr "Spitzendilatation"
-#: modules/process/tip_model.c:114
+#: modules/process/tip_model.c:112
msgid "Models SPM tip."
msgstr ""
-#: modules/process/tip_model.c:129
+#: modules/process/tip_model.c:127
#, fuzzy
msgid "/_Tip and Indentation/_Model Tip..."
msgstr "/Spi_tze/Spitze _modellieren..."
-#: modules/process/tip_model.c:133
+#: modules/process/tip_model.c:131
msgid "Model AFM tip"
msgstr ""
-#: modules/process/tip_model.c:164
+#: modules/process/tip_model.c:162
msgid "Model Tip"
msgstr ""
-#: modules/process/tip_model.c:224
+#: modules/process/tip_model.c:222
msgid "Tip _type:"
msgstr "Spitzen_typ:"
-#: modules/process/tip_model.c:229
+#: modules/process/tip_model.c:228
msgid "_Number of sides:"
msgstr ""
@@ -13526,21 +14311,21 @@ msgstr "Spitzen_neigung:"
msgid "Tip _rotation:"
msgstr "Spitzen_rotation:"
-#: modules/process/tip_model.c:250
+#: modules/process/tip_model.c:255
msgid "Tip _apex radius:"
msgstr ""
-#: modules/process/tip_model.c:269
+#: modules/process/tip_model.c:265
#, fuzzy
msgid "Tip _anisotropy:"
msgstr "DWT Anisotropie"
-#: modules/process/tip_model.c:490
+#: modules/process/tip_model.c:484
#, fuzzy
msgid "Modeled tip"
msgstr "Modus"
-#: modules/process/tip_model.c:562
+#: modules/process/tip_model.c:556
#, c-format
msgid "Tip resolution: %d × %d pixels"
msgstr "Auflösung der Spitze: %d × %d Pixel"
@@ -13652,7 +14437,7 @@ msgstr ""
#: modules/process/volumize.c:56
#, fuzzy
-msgid "/_Basic Operations/Volumize..."
+msgid "/_Basic Operations/Volumize"
msgstr "/_Grundfunktionen/_Skalieren..."
#: modules/process/volumize.c:60
@@ -13701,84 +14486,88 @@ msgstr "Auflösung"
msgid "Z _range:"
msgstr "_X-Bereich:"
-#: modules/process/wave_synth.c:211
+#: modules/process/wave_synth.c:219
msgid "Generates various kinds of waves."
msgstr ""
-#: modules/process/wave_synth.c:225
+#: modules/process/wave_synth.c:233
#, fuzzy
msgid "/S_ynthetic/_Waves..."
msgstr "/S_ynthetisch/_Partikel..."
-#: modules/process/wave_synth.c:229
+#: modules/process/wave_synth.c:237
#, fuzzy
msgid "Generate waves"
msgstr "Relative Linien"
-#: modules/process/wave_synth.c:347
+#: modules/process/wave_synth.c:366
msgid "Waves"
msgstr ""
-#: modules/process/wave_synth.c:422 modules/tools/linestats.c:337
-#: modules/tools/sfunctions.c:401 modules/volume/volume_linestat.c:369
+#: modules/process/wave_synth.c:441 modules/tools/linestats.c:337
+#: modules/tools/sfunctions.c:411 modules/volume/volume_linestat.c:374
#, fuzzy
msgid "_Quantity:"
msgstr "/_Beenden"
-#: modules/process/wave_synth.c:429
+#: modules/process/wave_synth.c:448
#, fuzzy
msgid "_Number of waves:"
msgstr "A_nzahl an Schritten:"
-#: modules/process/wave_synth.c:436 modules/process/wave_synth.c:582
-#: modules/tools/roughness.c:274
+#: modules/process/wave_synth.c:455 modules/process/wave_synth.c:617
+#: modules/tools/roughness.c:275
msgid "Amplitude"
msgstr "Amplitude"
-#: modules/process/wave_synth.c:441
+#: modules/process/wave_synth.c:460
#, fuzzy
msgid "_Wave form:"
msgstr "Hinzuzufügender _Datensatz:"
-#: modules/process/wave_synth.c:448
+#: modules/process/wave_synth.c:467
#, fuzzy
msgid "Amplitude:"
msgstr "Amplitude"
-#: modules/process/wave_synth.c:466
+#: modules/process/wave_synth.c:487
+msgid "_Decay:"
+msgstr ""
+
+#: modules/process/wave_synth.c:497
msgid "Frequency"
msgstr ""
-#: modules/process/wave_synth.c:472
+#: modules/process/wave_synth.c:503
#, fuzzy
msgid "_Spatial frequency:"
msgstr "Minimale _Länge:"
-#: modules/process/wave_synth.c:488
+#: modules/process/wave_synth.c:519
#, fuzzy
msgid "_X center:"
msgstr "X Zentrum"
-#: modules/process/wave_synth.c:499
+#: modules/process/wave_synth.c:532
#, fuzzy
msgid "_Y center:"
msgstr "Y Zentrum"
-#: modules/process/wave_synth.c:565
+#: modules/process/wave_synth.c:600
msgid "Cosine"
msgstr ""
-#: modules/process/wave_synth.c:566
+#: modules/process/wave_synth.c:601
#, fuzzy
msgid "Inverse cosh"
msgstr "Schnittpunkte"
-#: modules/process/wave_synth.c:567
+#: modules/process/wave_synth.c:602
#, fuzzy
msgid "Flat top"
msgstr "Suchbereich _Breite:"
-#: modules/process/wave_synth.c:581
+#: modules/process/wave_synth.c:616
#, fuzzy
msgid "Displacement"
msgstr "_Anzeige:"
@@ -13877,41 +14666,41 @@ msgstr "Zusammengefügte Bilder"
msgid "Preprocess and mark"
msgstr ""
-#: modules/process/xydenoise.c:57
+#: modules/process/xydenoise.c:58
msgid "Denoises measurement on basis of two orthogonal scans."
msgstr ""
-#: modules/process/xydenoise.c:71
+#: modules/process/xydenoise.c:72
#, fuzzy
msgid "/M_ultidata/_XY denoise..."
msgstr "/M_ultidaten/Zusa_mmenführen..."
-#: modules/process/xydenoise.c:75
+#: modules/process/xydenoise.c:76
msgid "Denoises horizontal/vertical measurement."
msgstr ""
-#: modules/process/xydenoise.c:102
+#: modules/process/xydenoise.c:103
msgid "XY Denoising"
msgstr ""
-#: modules/process/xydenoise.c:124
+#: modules/process/xydenoise.c:125
#, fuzzy
msgid "Second direction:"
msgstr "_Vertikal"
-#: modules/process/xydenoise.c:232
+#: modules/process/xydenoise.c:233
msgid "Computing forward FFTs..."
msgstr ""
-#: modules/process/xydenoise.c:248
+#: modules/process/xydenoise.c:249
msgid "Computing image..."
msgstr ""
-#: modules/process/xydenoise.c:260
+#: modules/process/xydenoise.c:261
msgid "Computing backward FFT..."
msgstr ""
-#: modules/process/xydenoise.c:272
+#: modules/process/xydenoise.c:273
msgid "Denoised"
msgstr ""
@@ -13929,63 +14718,70 @@ msgstr "/_Grundfunktionen/_Verkippen..."
msgid "Convert to XYZ data"
msgstr "XYZ-Daten importieren"
-#: modules/pygwy/pygwy-console.c:55
+#: modules/pygwy/pygwy-console.c:99
msgid "/Pygwy Console"
msgstr ""
-#: modules/pygwy/pygwy-console.c:59
+#: modules/pygwy/pygwy-console.c:103
msgid "Python wrapper console"
msgstr ""
-#: modules/pygwy/pygwy-console.c:142
-msgid ">>> Running the script above\n"
-msgstr ""
-
-#: modules/pygwy/pygwy-console.c:194
-msgid "Open Python script"
-msgstr "Python-Skript öffnen"
-
-#: modules/pygwy/pygwy-console.c:275
-msgid "Save Script as"
-msgstr "Skript speichern als"
-
-#: modules/pygwy/pygwy-console.c:327
+#: modules/pygwy/pygwy-console.c:168 modules/pygwy/pygwy-console.c:481
msgid "Pygwy Console"
msgstr "Pygwy-Konsole"
-#: modules/pygwy/pygwy-console.c:340
-msgid "Clear Log"
-msgstr ""
-
-#: modules/pygwy/pygwy-console.c:344
+#: modules/pygwy/pygwy-console.c:187
msgid "Open script in Python language (Ctrl-O)"
msgstr "Python-Skript öffnen (Strg-O)"
-#: modules/pygwy/pygwy-console.c:346
+#: modules/pygwy/pygwy-console.c:197
msgid "Save script (Ctrl-S)"
msgstr "Skript speichern (Strg-S)"
-#: modules/pygwy/pygwy-console.c:348
+#: modules/pygwy/pygwy-console.c:207
+#, fuzzy
+msgid "Save script as (Ctrl-Shift-S)"
+msgstr "Skript speichern (Strg-S)"
+
+#: modules/pygwy/pygwy-console.c:217
msgid "Execute script (Ctrl-E)"
msgstr "Skript ausführen (Strg-E)"
-#: modules/pygwy/pygwy-console.c:426
+#: modules/pygwy/pygwy-console.c:227
+msgid "Clear Log"
+msgstr ""
+
+#: modules/pygwy/pygwy-console.c:285
msgid "Command"
msgstr ""
-#: pygwy.c:120
+#: modules/pygwy/pygwy-console.c:371
+msgid ">>> Running the script above\n"
+msgstr ""
+
+#: modules/pygwy/pygwy-console.c:425
+#, fuzzy
+msgid "Save Python Script as"
+msgstr "Skript speichern als"
+
+#: modules/pygwy/pygwy-console.c:429
+#, fuzzy
+msgid "Open Python Script"
+msgstr "Python-Skript öffnen"
+
+#: pygwy.c:130
msgid "Pygwy, the Gwyddion Python wrapper."
msgstr ""
-#: pygwy.c:258
+#: pygwy.c:269
msgid "Python Interpreter Errors"
msgstr ""
-#: pygwy.c:384
+#: pygwy.c:399
msgid "Python interpreter error occurred."
msgstr ""
-#: pygwy.c:459
+#: pygwy.c:499
msgid "Function written in Python"
msgstr "In Python geschriebene Funktion"
@@ -14010,38 +14806,38 @@ msgid "Measure distances and directions between points"
msgstr "Abstände und Richtungen zwischen Punkten messen"
#. TRANSLATORS: Number is verb here.
-#: modules/tools/distance.c:250 modules/tools/profile.c:532
+#: modules/tools/distance.c:250 modules/tools/profile.c:527
#, fuzzy
msgid "_Number lines"
msgstr "A_nzahl an Schritten:"
-#: modules/tools/filter.c:128
+#: modules/tools/filter.c:129
msgid ""
"Filter tool, processes selected part of data with a filter (conservative "
"denoise, mean, median. Kuwahara, minimum, maximum)."
msgstr ""
-#: modules/tools/filter.c:171
+#: modules/tools/filter.c:172
msgid "Basic filters: mean, median, denoise, …"
msgstr "Einfache Filter: Mittelwert, Median, Rauschunterdrückung, ..."
-#: modules/tools/filter.c:239
+#: modules/tools/filter.c:240
msgid "Conservative denoise"
msgstr "Konservative Rauschunterdrückung"
-#: modules/tools/filter.c:246
+#: modules/tools/filter.c:247
msgid "Kuwahara"
msgstr "Kuwahara"
-#: modules/tools/filter.c:247
+#: modules/tools/filter.c:248
msgid "Dechecker"
msgstr ""
-#: modules/tools/filter.c:248
+#: modules/tools/filter.c:249
msgid "filter|Gaussian"
msgstr "Gauß"
-#: modules/tools/filter.c:249
+#: modules/tools/filter.c:250
msgid "Sharpen"
msgstr ""
@@ -14133,7 +14929,7 @@ msgid "Height histogram"
msgstr "Höhen-Histogramm"
#: modules/tools/icolorange.c:329 modules/tools/linestats.c:169
-#: modules/tools/sfunctions.c:226 modules/volume/volume_linestat.c:146
+#: modules/tools/sfunctions.c:231 modules/volume/volume_linestat.c:148
msgid "Range"
msgstr "Bereich"
@@ -14164,29 +14960,29 @@ msgstr "Höhe _invertieren"
msgid "range|Full"
msgstr "bis"
-#: modules/tools/level3.c:106
+#: modules/tools/level3.c:108
msgid ""
"Three-point level tool, levels data by subtracting a plane fitted through "
"three selected points."
msgstr ""
-#: modules/tools/level3.c:143
+#: modules/tools/level3.c:145
msgid "Three Point Level"
msgstr ""
-#: modules/tools/level3.c:144
+#: modules/tools/level3.c:146
msgid "Level data by fitting a plane through three points"
msgstr "Daten mittels Ebene durch drei Punkte nivellieren"
-#: modules/tools/level3.c:239 modules/tools/readvalue.c:375
+#: modules/tools/level3.c:244 modules/tools/readvalue.c:378
msgid "_Averaging radius:"
msgstr ""
-#: modules/tools/level3.c:246
+#: modules/tools/level3.c:251
msgid "_Instant apply"
msgstr ""
-#: modules/tools/level3.c:255
+#: modules/tools/level3.c:261
#, fuzzy
msgid "Set plane to _zero"
msgstr "_Punktgröße:"
@@ -14197,24 +14993,24 @@ msgid ""
"RMS, ..., of rows or columns."
msgstr ""
-#: modules/tools/linestats.c:172 modules/volume/volume_linestat.c:148
+#: modules/tools/linestats.c:172 modules/volume/volume_linestat.c:150
msgid "tan β<sub>0</sub>"
msgstr "tan β<sub>0</sub>"
-#: modules/tools/linestats.c:174 modules/volume/volume_linestat.c:150
+#: modules/tools/linestats.c:174 modules/volume/volume_linestat.c:152
#, fuzzy
msgid "Ra"
msgstr "Realteil"
-#: modules/tools/linestats.c:175 modules/volume/volume_linestat.c:151
+#: modules/tools/linestats.c:175 modules/volume/volume_linestat.c:153
msgid "Rq (RMS)"
msgstr "Rq (RMS)"
-#: modules/tools/linestats.c:176 modules/volume/volume_linestat.c:152
+#: modules/tools/linestats.c:176 modules/volume/volume_linestat.c:154
msgid "Rz"
msgstr "Rz"
-#: modules/tools/linestats.c:177 modules/volume/volume_linestat.c:153
+#: modules/tools/linestats.c:177 modules/volume/volume_linestat.c:155
#, fuzzy
msgid "Rt"
msgstr "Rect"
@@ -14240,16 +15036,11 @@ msgstr "Spa_lten"
msgid "Average:"
msgstr "_Minimalwert"
-#: modules/tools/linestats.c:363 modules/tools/profile.c:464
-#: modules/tools/sfunctions.c:414 modules/tools/spectro.c:343
+#: modules/tools/linestats.c:363 modules/tools/profile.c:460
+#: modules/tools/sfunctions.c:424 modules/tools/spectro.c:346
msgid "<b>Options</b>"
msgstr "<b>Optionen</b>"
-#: modules/tools/linestats.c:379 modules/tools/sfunctions.c:430
-#: modules/tools/stats.c:408
-msgid "_Instant updates"
-msgstr "_Sofort aktualisieren"
-
#: modules/tools/maskedit.c:170
msgid "Mask editor tool, allows interactive modification of parts of the mask."
msgstr ""
@@ -14308,64 +15099,64 @@ msgstr "Bestimmt Kornverteilungen (Zusammenhängende maskierte Bereiche)."
msgid "Erase continuous parts of mask"
msgstr "Bestimmt Kornverteilungen (Zusammenhängende maskierte Bereiche)."
-#: modules/tools/maskedit.c:408
+#: modules/tools/maskedit.c:409
msgid "Editor"
msgstr "Editor"
-#: modules/tools/maskedit.c:413
+#: modules/tools/maskedit.c:414
msgid "_Shapes"
msgstr "_Formen"
-#: modules/tools/maskedit.c:423
+#: modules/tools/maskedit.c:428
msgid "Mode:"
msgstr "Modus:"
-#: modules/tools/maskedit.c:452
+#: modules/tools/maskedit.c:458
msgid "Shape:"
msgstr "Form:"
-#: modules/tools/maskedit.c:483
+#: modules/tools/maskedit.c:486
msgid "_Drawing Tools"
msgstr ""
-#: modules/tools/maskedit.c:493
+#: modules/tools/maskedit.c:500
msgid "Tool:"
msgstr "Werkzeug:"
-#: modules/tools/maskedit.c:532
+#: modules/tools/maskedit.c:538
#, fuzzy
msgid "Actions"
msgstr "Kreuzungen"
-#: modules/tools/maskedit.c:540
+#: modules/tools/maskedit.c:546
msgid "_Invert"
msgstr "_Invertieren"
-#: modules/tools/maskedit.c:571
+#: modules/tools/maskedit.c:577
msgid "Fill _Voids"
msgstr ""
-#: modules/tools/maskedit.c:580
+#: modules/tools/maskedit.c:586
msgid "Fill non-simple-connected"
msgstr ""
-#: modules/tools/maskedit.c:591
+#: modules/tools/maskedit.c:597
msgid "Grow/Shrink"
msgstr ""
-#: modules/tools/maskedit.c:600
+#: modules/tools/maskedit.c:606
msgid "_Grow"
msgstr ""
-#: modules/tools/maskedit.c:608
+#: modules/tools/maskedit.c:614
msgid "Shrin_k"
msgstr ""
-#: modules/tools/maskedit.c:623
+#: modules/tools/maskedit.c:629
msgid "_Amount:"
msgstr ""
-#: modules/tools/maskedit.c:651
+#: modules/tools/maskedit.c:657
msgid "_Prevent grain merging by growing"
msgstr ""
@@ -14382,87 +15173,102 @@ msgstr "Ebene nivellieren"
msgid "Level rows using intersections with given lines"
msgstr ""
-#: modules/tools/profile.c:222
+#: modules/tools/profile.c:216
msgid "Profile tool, creates profile graphs from selected lines."
msgstr ""
-#: modules/tools/profile.c:276 modules/tools/profile.c:630
+#: modules/tools/profile.c:270 modules/tools/profile.c:609
msgid "Profiles"
msgstr "Profile"
-#: modules/tools/profile.c:277
+#: modules/tools/profile.c:271
msgid "Extract profiles"
msgstr "Profile extrahieren"
-#: modules/tools/profile.c:480
-#, fuzzy
-msgid "_Radial profiles"
-msgstr "Profile extrahieren"
-
-#: modules/tools/profile.c:493
+#: modules/tools/profile.c:478
#, fuzzy
-msgid "Symmetrize _All"
-msgstr "Symmetrie"
+msgid "Linear profiles"
+msgstr "Linearer Fit"
-#: modules/tools/profile.c:498
+#: modules/tools/profile.c:480
#, fuzzy
-msgid "S_ymmetrize"
-msgstr "Symmetrie"
+msgid "Radial profiles"
+msgstr "Profile extrahieren"
-#: modules/tools/profile.c:542
+#: modules/tools/profile.c:537
msgid "_Separate profiles"
msgstr ""
-#: modules/tools/profile.c:607
+#: modules/tools/profile.c:587
msgid "_Calibration data:"
msgstr ""
-#: modules/tools/profile.c:620
+#: modules/tools/profile.c:600
#, fuzzy
msgid "_Show profile"
msgstr "Profil 1"
-#: modules/tools/profile.c:887
+#: modules/tools/profile.c:861
#, c-format
msgid "X error %d"
msgstr "X-Fehler %d"
-#: modules/tools/profile.c:891
+#: modules/tools/profile.c:865
#, c-format
msgid "Y error %d"
msgstr "Y-Fehler %d"
-#: modules/tools/profile.c:895
+#: modules/tools/profile.c:869
#, c-format
msgid "Z error %d"
msgstr "Z-Fehler %d"
-#: modules/tools/profile.c:899
+#: modules/tools/profile.c:873
#, fuzzy, c-format
msgid "X uncertainty %d"
msgstr "Bestimmtheitskarte"
-#: modules/tools/profile.c:903
+#: modules/tools/profile.c:877
#, fuzzy, c-format
msgid "Y uncertainty %d"
msgstr "Bestimmtheitskarte"
-#: modules/tools/profile.c:907
+#: modules/tools/profile.c:881
#, fuzzy, c-format
msgid "Z uncertainty %d"
msgstr "Bestimmtheitskarte"
-#: modules/tools/profile.c:912
+#: modules/tools/profile.c:886
#, c-format
msgid "Zunc up bound %d"
msgstr ""
-#: modules/tools/profile.c:917
+#: modules/tools/profile.c:891
#, c-format
msgid "Zunc low bound %d"
msgstr ""
-#: modules/tools/profile.c:1817
+#: modules/tools/profile.c:1637
+#, fuzzy
+msgid "S_ymmetrize"
+msgstr "Symmetrie"
+
+#: modules/tools/profile.c:1639
+#, fuzzy
+msgid "Symmetrize _All"
+msgstr "Symmetrie"
+
+#: modules/tools/profile.c:1643
+#, fuzzy
+msgid "Improve _Direction"
+msgstr "_Richtung:"
+
+#: modules/tools/profile.c:1645
+#, fuzzy
+msgid "Improve _All"
+msgstr "Ver_bessern"
+
+#: modules/tools/profile.c:1866
#, fuzzy
msgid "calib-data|None"
msgstr "Kalibrierungen"
@@ -14479,196 +15285,196 @@ msgstr "Wert auslesen"
msgid "Read value under mouse cursor"
msgstr "Wert unter dem Mauszeiger auslesen"
-#: modules/tools/readvalue.c:304
+#: modules/tools/readvalue.c:307
msgid "Set _Zero"
msgstr "Auf _Null setzen"
-#: modules/tools/readvalue.c:307
+#: modules/tools/readvalue.c:310
msgid "Shift plane z=0 to pass through the selected point"
msgstr ""
-#: modules/tools/readvalue.c:315
+#: modules/tools/readvalue.c:318
msgid "Facet"
msgstr "Facette"
-#: modules/tools/readvalue.c:340
+#: modules/tools/readvalue.c:343
#, fuzzy
msgid "Curvatures"
msgstr "Krümmung"
-#: modules/tools/readvalue.c:382
+#: modules/tools/readvalue.c:386
msgid "Show _selection"
msgstr "Auswahl zeigen"
-#: modules/tools/roughness.c:282
+#: modules/tools/roughness.c:283
msgid "Roughness average"
msgstr ""
-#: modules/tools/roughness.c:290
+#: modules/tools/roughness.c:291
msgid "Root mean square roughness"
msgstr ""
-#: modules/tools/roughness.c:298
+#: modules/tools/roughness.c:299
msgid "Maximum height of the roughness"
msgstr ""
-#: modules/tools/roughness.c:306
+#: modules/tools/roughness.c:307
msgid "Maximum roughness valley depth"
msgstr ""
-#: modules/tools/roughness.c:314
+#: modules/tools/roughness.c:315
msgid "Maximum roughness peak height"
msgstr ""
-#: modules/tools/roughness.c:322 modules/tools/roughness.c:370
+#: modules/tools/roughness.c:323 modules/tools/roughness.c:371
msgid "Average maximum height of the roughness"
msgstr ""
-#: modules/tools/roughness.c:330
+#: modules/tools/roughness.c:331
msgid "Average maximum roughness valley depth"
msgstr ""
-#: modules/tools/roughness.c:338
+#: modules/tools/roughness.c:339
msgid "Average maximum roughness peak height"
msgstr ""
-#: modules/tools/roughness.c:346 modules/tools/roughness.c:354
+#: modules/tools/roughness.c:347 modules/tools/roughness.c:355
msgid "Average third highest peak to third lowest valley height"
msgstr ""
-#: modules/tools/roughness.c:362
+#: modules/tools/roughness.c:363
msgid "Average maximum height of the profile"
msgstr ""
-#: modules/tools/roughness.c:378
+#: modules/tools/roughness.c:379
msgid "Skewness"
msgstr ""
-#: modules/tools/roughness.c:394
+#: modules/tools/roughness.c:395
msgid "Waviness average"
msgstr ""
-#: modules/tools/roughness.c:402
+#: modules/tools/roughness.c:403
msgid "Root mean square waviness"
msgstr ""
-#: modules/tools/roughness.c:410
+#: modules/tools/roughness.c:411
msgid "Waviness maximum height"
msgstr ""
-#: modules/tools/roughness.c:418
+#: modules/tools/roughness.c:419
msgid "Maximum height of the profile"
msgstr ""
-#: modules/tools/roughness.c:426
+#: modules/tools/roughness.c:427
msgid "Spatial"
msgstr ""
-#: modules/tools/roughness.c:476
+#: modules/tools/roughness.c:477
msgid "Average wavelength of the profile"
msgstr ""
-#: modules/tools/roughness.c:484
+#: modules/tools/roughness.c:485
msgid "Root mean square (RMS) wavelength of the profile"
msgstr ""
-#: modules/tools/roughness.c:492
+#: modules/tools/roughness.c:493
msgid "Hybrid"
msgstr ""
-#: modules/tools/roughness.c:500
+#: modules/tools/roughness.c:501
msgid "Average absolute slope"
msgstr ""
-#: modules/tools/roughness.c:508
+#: modules/tools/roughness.c:509
msgid "Root mean square (RMS) slope"
msgstr ""
-#: modules/tools/roughness.c:524
+#: modules/tools/roughness.c:525
msgid "Developed profile length"
msgstr ""
-#: modules/tools/roughness.c:532
+#: modules/tools/roughness.c:533
msgid "Profile length ratio"
msgstr ""
-#: modules/tools/roughness.c:615
+#: modules/tools/roughness.c:616
msgid "Calculate surface profile parameters."
msgstr ""
-#: modules/tools/roughness.c:648 modules/tools/roughness.c:773
-#: modules/tools/roughness.c:1452
+#: modules/tools/roughness.c:649 modules/tools/roughness.c:774
+#: modules/tools/roughness.c:1479
msgid "Roughness"
msgstr "Rauigkeit"
-#: modules/tools/roughness.c:649
+#: modules/tools/roughness.c:650
msgid "Calculate roughness parameters"
msgstr "Rauigkeits-Parameter berechnen"
-#: modules/tools/roughness.c:771 modules/tools/roughness.c:1450
+#: modules/tools/roughness.c:772 modules/tools/roughness.c:1477
msgid "Texture"
msgstr ""
-#: modules/tools/roughness.c:772 modules/tools/roughness.c:1451
+#: modules/tools/roughness.c:773 modules/tools/roughness.c:1478
msgid "Waviness"
msgstr ""
-#: modules/tools/roughness.c:774
+#: modules/tools/roughness.c:775
msgid "ADF"
msgstr "ADF"
-#: modules/tools/roughness.c:775
+#: modules/tools/roughness.c:776
msgid "BRC"
msgstr "BRC"
-#: modules/tools/roughness.c:776 modules/tools/roughness.c:1455
+#: modules/tools/roughness.c:777 modules/tools/roughness.c:1482
msgid "Peak Count"
msgstr ""
-#: modules/tools/roughness.c:838 modules/xyz/xyz_drift.c:1090
+#: modules/tools/roughness.c:839 modules/xyz/xyz_drift.c:1090
msgid "_Graph:"
msgstr "_Graph:"
-#: modules/tools/roughness.c:845
+#: modules/tools/roughness.c:847
msgid "C_ut-off:"
msgstr ""
-#: modules/tools/roughness.c:1324
+#: modules/tools/roughness.c:1345
msgid "No profile selected."
msgstr ""
-#: modules/tools/roughness.c:1453
+#: modules/tools/roughness.c:1480
#, fuzzy
msgid "Amplitude Distribution Function"
msgstr "Winkelverteilung"
-#: modules/tools/roughness.c:1454
+#: modules/tools/roughness.c:1481
msgid "The Bearing Ratio Curve"
msgstr ""
-#: modules/tools/roughness.c:1489
+#: modules/tools/roughness.c:1516
msgid "Surface Profiles"
msgstr ""
-#: modules/tools/roughness.c:1877
+#: modules/tools/roughness.c:1904
msgid "Save Roughness Parameters"
msgstr "Rauigkeits-Parameter speichern"
-#: modules/tools/roughness.c:1934
+#: modules/tools/roughness.c:1961
msgid "Roughness Parameters"
msgstr "Rauigkeits-Parameter"
-#: modules/tools/roughness.c:1940
+#: modules/tools/roughness.c:1967
#, c-format
msgid "File: %s\n"
msgstr "Datei: %s\n"
-#: modules/tools/roughness.c:1944
+#: modules/tools/roughness.c:1971
#, c-format
msgid "Data channel: %s\n"
msgstr ""
-#: modules/tools/roughness.c:1975
+#: modules/tools/roughness.c:2002
#, c-format
msgid ""
"Selected line: (%s, %s) to (%s, %s) px\n"
@@ -14706,94 +15512,98 @@ msgstr ""
msgid "_Copy"
msgstr ""
-#: modules/tools/sfunctions.c:181
+#: modules/tools/sfunctions.c:186
msgid ""
"Statistical function tool, calculates one-dimensional statistical functions "
"(height distribution, correlations, PSDF, Minkowski functionals) of selected "
"part of data."
msgstr ""
-#: modules/tools/sfunctions.c:214
+#: modules/tools/sfunctions.c:219
msgid "Height distribution"
msgstr "Höhenverteilung"
-#: modules/tools/sfunctions.c:215
+#: modules/tools/sfunctions.c:220
msgid "Cum. height distribution"
msgstr ""
-#: modules/tools/sfunctions.c:216
+#: modules/tools/sfunctions.c:221
msgid "Distribution of angles"
msgstr "Winkelverteilung"
-#: modules/tools/sfunctions.c:217
+#: modules/tools/sfunctions.c:222
msgid "Cum. distribution of angles"
msgstr ""
-#: modules/tools/sfunctions.c:218
+#: modules/tools/sfunctions.c:223
msgid "ACF"
msgstr "ACF"
-#: modules/tools/sfunctions.c:219
+#: modules/tools/sfunctions.c:224
msgid "HHCF"
msgstr "HHCF"
-#: modules/tools/sfunctions.c:220
+#: modules/tools/sfunctions.c:225
msgid "PSDF"
msgstr "PSDF"
-#: modules/tools/sfunctions.c:221
+#: modules/tools/sfunctions.c:226
msgid "Radial PSDF"
msgstr ""
-#: modules/tools/sfunctions.c:222
+#: modules/tools/sfunctions.c:227
msgid "Radial ACF"
msgstr ""
-#: modules/tools/sfunctions.c:223
+#: modules/tools/sfunctions.c:228
msgid "Minkowski volume"
msgstr ""
-#: modules/tools/sfunctions.c:224
+#: modules/tools/sfunctions.c:229
msgid "Minkowski boundary"
msgstr ""
-#: modules/tools/sfunctions.c:225
+#: modules/tools/sfunctions.c:230
msgid "Minkowski connectivity"
msgstr ""
-#: modules/tools/sfunctions.c:251
+#: modules/tools/sfunctions.c:232
+msgid "Area scale graph"
+msgstr ""
+
+#: modules/tools/sfunctions.c:257
msgid "Statistical Functions"
msgstr "Statistik-Funktionen"
-#: modules/tools/sfunctions.c:252
+#: modules/tools/sfunctions.c:258
msgid "Calculate 1D statistical functions"
msgstr "1D-Statistik-Funktionen berechnen"
-#: modules/tools/sfunctions.c:504
+#: modules/tools/sfunctions.c:501
msgid "_Separate uncertainty"
msgstr ""
-#: modules/tools/spectro.c:151
+#: modules/tools/spectro.c:154
msgid "Point Spectrum, extracts point spectra to a graph."
msgstr "Punktspektrum, extrahiert Punktspektren in einen Graphen."
-#: modules/tools/spectro.c:190
+#: modules/tools/spectro.c:193
msgid "Point Spectroscopy"
msgstr "Punktspektroskopie"
-#: modules/tools/spectro.c:191
+#: modules/tools/spectro.c:194
msgid "Extract and view point spectroscopy data"
msgstr "Punktspektroskopie-Daten extrahieren und anschauen"
-#: modules/tools/spectro.c:359
+#: modules/tools/spectro.c:362
msgid "_Separate spectra"
msgstr ""
-#: modules/tools/spectro.c:369
+#: modules/tools/spectro.c:372
msgid "_Average spectra"
msgstr ""
-#: modules/tools/spectro.c:508
+#: modules/tools/spectro.c:511
msgid "Spectroscopy"
msgstr "Spektroskopie"
@@ -14831,14 +15641,6 @@ msgstr ""
msgid "No area in the zoom selected."
msgstr ""
-#: modules/tools/stats.c:205
-msgid "Average value:"
-msgstr ""
-
-#: modules/tools/stats.c:206
-msgid "Median:"
-msgstr "Median:"
-
#: modules/tools/stats.c:207
msgid "Ra (Sa):"
msgstr ""
@@ -14851,14 +15653,6 @@ msgstr ""
msgid "Rms (grain-wise):"
msgstr ""
-#: modules/tools/stats.c:210
-msgid "Skew:"
-msgstr ""
-
-#: modules/tools/stats.c:211
-msgid "Kurtosis:"
-msgstr "Wölbung:"
-
#: modules/tools/stats.c:212
msgid "Surface area:"
msgstr "Oberflächen-Flächeninhalt:"
@@ -14867,11 +15661,6 @@ msgstr "Oberflächen-Flächeninhalt:"
msgid "Projected area:"
msgstr "Projizierte Fläche:"
-#: modules/tools/stats.c:214
-#, fuzzy
-msgid "Variation:"
-msgstr "Varianz:"
-
#: modules/tools/stats.c:217
msgid "Inclination θ:"
msgstr "Neigungswinkel θ:"
@@ -14884,7 +15673,7 @@ msgstr "Neigungswinkel φ:"
msgid "Statistics tool."
msgstr "Statistik-Werkzeug."
-#: modules/tools/stats.c:261 modules/tools/stats.c:1095
+#: modules/tools/stats.c:261 modules/tools/stats.c:1091
msgid "Statistical Quantities"
msgstr "Statistische Größen"
@@ -14892,29 +15681,29 @@ msgstr "Statistische Größen"
msgid "Statistical quantities"
msgstr "Statistische Größen"
-#: modules/tools/stats.c:1002
+#: modules/tools/stats.c:998
msgid "Save Statistical Quantities"
msgstr ""
-#: modules/tools/stats.c:1100
+#: modules/tools/stats.c:1096
#, fuzzy, c-format
msgid "File: %s\n"
msgstr "Datei: %s\n"
-#: modules/tools/stats.c:1104
+#: modules/tools/stats.c:1100
#, fuzzy, c-format
msgid "Data channel: %s\n"
msgstr "Daten: %s\n"
-#: modules/tools/stats.c:1122
+#: modules/tools/stats.c:1118
msgid "Yes"
msgstr "Ja"
-#: modules/tools/stats.c:1122
+#: modules/tools/stats.c:1118
msgid "No"
msgstr "Nein"
-#: modules/tools/stats.c:1132
+#: modules/tools/stats.c:1128
#, c-format
msgid ""
"Selected area: %s × %s at (%s, %s) px\n"
@@ -14936,211 +15725,207 @@ msgstr "Abmessungen und Einheiten"
msgid "Volume Dimensions and Units"
msgstr "Abmessungen und Einheiten"
-#: modules/volume/volume_calibrate.c:526
+#: modules/volume/volume_calibrate.c:486
#, fuzzy
msgid "_Value range:"
msgstr "Wertebereich"
-#: modules/volume/volume_calibrate.c:555
+#: modules/volume/volume_calibrate.c:508
#, fuzzy
msgid "Value shi_ft:"
msgstr "_Werteskala:"
-#: modules/volume/volume_calibrate.c:601
+#: modules/volume/volume_calibrate.c:542
#, fuzzy
msgid "_Value calibration factor:"
msgstr "Kalibrierfaktor _X:"
-#: modules/volume/volume_extract.c:223
+#: modules/volume/volume_extract.c:216
msgid "Shows and/or extracts a section of volume data"
msgstr ""
-#: modules/volume/volume_extract.c:237
-msgid "/Show and _extract..."
+#: modules/volume/volume_extract.c:230
+msgid "/Show and _Extract..."
msgstr ""
-#: modules/volume/volume_extract.c:241
+#: modules/volume/volume_extract.c:234
msgid "Show and/or extract a section of volume data"
msgstr ""
-#: modules/volume/volume_extract.c:270
+#: modules/volume/volume_extract.c:263
#, fuzzy
msgid "X cross-section"
msgstr "X-Korrektur"
-#: modules/volume/volume_extract.c:271
+#: modules/volume/volume_extract.c:264
#, fuzzy
msgid "Y cross-section"
msgstr "Y-Korrektur"
-#: modules/volume/volume_extract.c:272
+#: modules/volume/volume_extract.c:265
#, fuzzy
msgid "Z cross-section"
msgstr "Z-Korrektur"
-#: modules/volume/volume_extract.c:273 modules/volume/volume_extract.c:698
+#: modules/volume/volume_extract.c:266 modules/volume/volume_extract.c:684
#, fuzzy
msgid "X direction sum"
msgstr "_Beide Richtungen"
-#: modules/volume/volume_extract.c:274 modules/volume/volume_extract.c:700
+#: modules/volume/volume_extract.c:267 modules/volume/volume_extract.c:686
#, fuzzy
msgid "Y direction sum"
msgstr "_Beide Richtungen"
-#: modules/volume/volume_extract.c:275 modules/volume/volume_extract.c:702
+#: modules/volume/volume_extract.c:268 modules/volume/volume_extract.c:688
#, fuzzy
msgid "Z direction sum"
msgstr "_Beide Richtungen"
-#: modules/volume/volume_extract.c:278
+#: modules/volume/volume_extract.c:271
#, fuzzy
msgid "X direction"
msgstr "X-Korrektur"
-#: modules/volume/volume_extract.c:279
+#: modules/volume/volume_extract.c:272
#, fuzzy
msgid "Y direction"
msgstr "Y-Korrektur"
-#: modules/volume/volume_extract.c:280
+#: modules/volume/volume_extract.c:273
#, fuzzy
msgid "Z direction"
msgstr "Z-Korrektur"
-#: modules/volume/volume_extract.c:322
+#: modules/volume/volume_extract.c:315
#, fuzzy
msgid "Volume data"
msgstr "Volumen"
-#: modules/volume/volume_extract.c:324
+#: modules/volume/volume_extract.c:317
#, fuzzy
msgid "_Load"
msgstr "_Laden"
-#: modules/volume/volume_extract.c:336
+#: modules/volume/volume_extract.c:329
#, fuzzy
msgid "_Extract projection"
msgstr "_Orthographische Projektion"
-#: modules/volume/volume_extract.c:354
+#: modules/volume/volume_extract.c:347
#, fuzzy
msgid "Projections"
msgstr "Schnittpunkte"
-#: modules/volume/volume_extract.c:404
+#: modules/volume/volume_extract.c:395
#, fuzzy
msgid "Z position"
msgstr "Maximaler z-Wert"
-#: modules/volume/volume_extract.c:409
+#: modules/volume/volume_extract.c:405
#, fuzzy
msgid "Shown cut direction:"
msgstr "_Vertikal"
-#: modules/volume/volume_extract.c:419 modules/volume/volume_extract.c:500
-#, fuzzy
-msgid "Show mode:"
-msgstr "_Rahmen anzeigen"
-
-#: modules/volume/volume_extract.c:490
+#: modules/volume/volume_extract.c:485
#, fuzzy
msgid "Graph cut direction:"
msgstr "_Graph"
-#: modules/volume/volume_extract.c:525
+#: modules/volume/volume_extract.c:511
msgid "3D view"
msgstr ""
-#: modules/volume/volume_extract.c:550
+#: modules/volume/volume_extract.c:538
#, fuzzy
msgid "Zoom"
msgstr "Zoom:"
-#: modules/volume/volume_extract.c:558
+#: modules/volume/volume_extract.c:545
#, fuzzy
msgid "Wireframe threshold"
msgstr "_Weicher Schwellwert:"
-#: modules/volume/volume_extract.c:566
+#: modules/volume/volume_extract.c:552
#, fuzzy
msgid "Z scale"
msgstr "_Skala:"
-#: modules/volume/volume_extract.c:574
+#: modules/volume/volume_extract.c:559
#, fuzzy
msgid "Opacity scale"
msgstr "_Skala:"
-#: modules/volume/volume_extract.c:580
-msgid "apply perspective"
+#: modules/volume/volume_extract.c:565
+msgid "Apply perspective"
msgstr ""
-#: modules/volume/volume_extract.c:589
-msgid "instant 3D render"
-msgstr ""
+#: modules/volume/volume_extract.c:574
+#, fuzzy
+msgid "Instant 3D render"
+msgstr "_Sofort aktualisieren"
-#: modules/volume/volume_extract.c:598
+#: modules/volume/volume_extract.c:587
#, fuzzy
msgid "X view"
msgstr "Vorschau"
-#: modules/volume/volume_extract.c:604
+#: modules/volume/volume_extract.c:592
#, fuzzy
msgid "Y view"
msgstr "Vorschau"
-#: modules/volume/volume_extract.c:610
+#: modules/volume/volume_extract.c:597
#, fuzzy
msgid "Z view"
msgstr "Vorschau"
-#: modules/volume/volume_extract.c:683
+#: modules/volume/volume_extract.c:669
#, c-format
msgid "X cross-section at x: %d"
msgstr ""
-#: modules/volume/volume_extract.c:686
+#: modules/volume/volume_extract.c:672
#, c-format
msgid "Y cross-section at y: %d"
msgstr ""
-#: modules/volume/volume_extract.c:690
+#: modules/volume/volume_extract.c:676
#, fuzzy, c-format
msgid "Z cross-section at Z = %g %s (#%d)"
msgstr "Z-Korrektur"
-#: modules/volume/volume_extract.c:749 modules/volume/volume_slice.c:1264
+#: modules/volume/volume_extract.c:735 modules/volume/volume_slice.c:1278
#, c-format
msgid "X graph at y: %d z: %d"
msgstr ""
-#: modules/volume/volume_extract.c:752 modules/volume/volume_slice.c:1273
+#: modules/volume/volume_extract.c:738 modules/volume/volume_slice.c:1287
#, c-format
msgid "Y graph at x: %d z: %d"
msgstr ""
-#: modules/volume/volume_extract.c:755 modules/volume/volume_slice.c:1255
+#: modules/volume/volume_extract.c:741 modules/volume/volume_slice.c:1269
#, c-format
msgid "Z graph at x: %d y: %d"
msgstr ""
-#: modules/volume/volume_extract.c:776
+#: modules/volume/volume_extract.c:762
#, fuzzy
msgid "Brick graph"
msgstr "Graph"
-#: modules/volume/volume_extract.c:1056
+#: modules/volume/volume_extract.c:1042
#, fuzzy
msgid "Load volume data"
msgstr "Nivellierte Daten"
-#: modules/volume/volume_extract.c:1218
+#: modules/volume/volume_extract.c:1204
#, c-format
msgid "Shown range %g to %g"
msgstr ""
-#: modules/volume/volume_extract.c:1911
+#: modules/volume/volume_extract.c:1897
msgid "Building wireframe model..."
msgstr ""
@@ -15149,110 +15934,111 @@ msgid "Evaluate volume force-distance data"
msgstr ""
#: modules/volume/volume_fdfit.c:213
-msgid "/_Evaluate FD data..."
+msgid "/_Evaluate FD Data..."
msgstr ""
#: modules/volume/volume_fdfit.c:217
msgid "Evaluate force-distance volume data"
msgstr ""
-#: modules/volume/volume_fdfit.c:368
+#: modules/volume/volume_fdfit.c:371
#, fuzzy
msgid "Curve _X position:"
msgstr "Maximaler z-Wert"
-#: modules/volume/volume_fdfit.c:386
+#: modules/volume/volume_fdfit.c:380
#, fuzzy
msgid "Curve _Y position:"
msgstr "Maximaler z-Wert"
-#: modules/volume/volume_fdfit.c:535
+#: modules/volume/volume_fdfit.c:511
#, fuzzy
msgid "e_stimate"
msgstr "_Abschätzung"
-#: modules/volume/volume_invert.c:51
+#: modules/volume/volume_invert.c:39 modules/volume/volumeops.c:39
#, fuzzy
msgid "Inverts value in volume data"
msgstr "Invertiert Wert in Volumendaten"
-#: modules/volume/volume_invert.c:65
+#: modules/volume/volume_invert.c:53
#, fuzzy
-msgid "/_Invert value"
+msgid "/_Invert Value"
msgstr "Zentraler Wert"
-#: modules/volume/volume_invert.c:69
+#: modules/volume/volume_invert.c:57
#, fuzzy
msgid "Invert value in volume data"
msgstr "Nivellierte Daten"
-#: modules/volume/volume_kmeans.c:94
+#: modules/volume/volume_kmeans.c:95
msgid "Calculates K-means clustering on volume data."
msgstr ""
-#: modules/volume/volume_kmeans.c:108
-msgid "/_K-means clustering..."
-msgstr ""
+#: modules/volume/volume_kmeans.c:109
+#, fuzzy
+msgid "/_K-Means Clustering..."
+msgstr "Interpoliere..."
-#: modules/volume/volume_kmeans.c:112
+#: modules/volume/volume_kmeans.c:113
msgid "Calculate K-means clustering on volume data"
msgstr ""
-#: modules/volume/volume_kmeans.c:151
+#: modules/volume/volume_kmeans.c:152
msgid "K-means"
msgstr ""
-#: modules/volume/volume_kmeans.c:170 modules/volume/volume_kmedians.c:164
+#: modules/volume/volume_kmeans.c:170 modules/volume/volume_kmedians.c:163
#, fuzzy
msgid "_Number of clusters:"
msgstr "A_nzahl an Schritten:"
-#: modules/volume/volume_kmeans.c:177 modules/volume/volume_kmedians.c:171
+#: modules/volume/volume_kmeans.c:177 modules/volume/volume_kmedians.c:170
#, fuzzy
msgid "Convergence _precision digits:"
msgstr "_Genauigkeit:"
-#: modules/volume/volume_kmeans.c:184 modules/volume/volume_kmedians.c:178
+#: modules/volume/volume_kmeans.c:183 modules/volume/volume_kmedians.c:176
#, fuzzy
msgid "_Max. iterations:"
msgstr "Anzahl an Körnern"
-#: modules/volume/volume_kmeans.c:189 modules/volume/volume_kmedians.c:183
+#: modules/volume/volume_kmeans.c:187 modules/volume/volume_kmedians.c:181
#, fuzzy
msgid "_Normalize"
msgstr "Normal"
-#: modules/volume/volume_kmeans.c:195
+#: modules/volume/volume_kmeans.c:193
#, fuzzy
msgid "_Remove outliers"
msgstr "Fehlstellen entfernen"
-#: modules/volume/volume_kmeans.c:208
+#: modules/volume/volume_kmeans.c:202
#, fuzzy
msgid "Outliers _threshold:"
msgstr "_Harter Schwellwert:"
-#: modules/volume/volume_kmeans.c:431
+#: modules/volume/volume_kmeans.c:425
#, fuzzy
msgid "K-means iteration..."
msgstr "Interpoliere..."
-#: modules/volume/volume_kmeans.c:651
+#: modules/volume/volume_kmeans.c:645
#, c-format
msgid "K-means cluster of %s"
msgstr ""
-#: modules/volume/volume_kmeans.c:660
+#: modules/volume/volume_kmeans.c:654
#, c-format
msgid "K-means error of %s"
msgstr ""
-#: modules/volume/volume_kmeans.c:670 modules/volume/volume_kmedians.c:514
+#: modules/volume/volume_kmeans.c:664 modules/volume/volume_kmedians.c:512
#, c-format
msgid "Pre-normalized intensity of %s"
msgstr ""
-#: modules/volume/volume_kmeans.c:702
+#: modules/volume/volume_kmeans.c:696
#, c-format
msgid "K-means center %d"
msgstr ""
@@ -15262,8 +16048,9 @@ msgid "Calculates K-medians clustering on volume data."
msgstr ""
#: modules/volume/volume_kmedians.c:102
-msgid "/_K-medians clustering..."
-msgstr ""
+#, fuzzy
+msgid "/_K-Medians Clustering..."
+msgstr "Interpoliere..."
#: modules/volume/volume_kmedians.c:106
msgid "Calculate K-medians clustering on volume data"
@@ -15274,50 +16061,50 @@ msgstr ""
msgid "K-Medians"
msgstr "Median"
-#: modules/volume/volume_kmedians.c:392
+#: modules/volume/volume_kmedians.c:390
#, fuzzy
msgid "K-medians iteration..."
msgstr "Interpoliere..."
-#: modules/volume/volume_kmedians.c:495
+#: modules/volume/volume_kmedians.c:493
#, c-format
msgid "K-medians cluster of %s"
msgstr ""
-#: modules/volume/volume_kmedians.c:504
+#: modules/volume/volume_kmedians.c:502
#, c-format
msgid "K-medians error of %s"
msgstr ""
-#: modules/volume/volume_kmedians.c:546
+#: modules/volume/volume_kmedians.c:544
#, c-format
msgid "K-medians center %d"
msgstr ""
-#: modules/volume/volume_linestat.c:171
+#: modules/volume/volume_linestat.c:173
msgid "Summarizes profiles of volume data to a channel."
msgstr ""
-#: modules/volume/volume_linestat.c:185
+#: modules/volume/volume_linestat.c:187
msgid "/Summarize _Profiles..."
msgstr ""
-#: modules/volume/volume_linestat.c:189
+#: modules/volume/volume_linestat.c:191
#, fuzzy
msgid "Summarize profiles"
msgstr "Shimadzu-Dateien"
-#: modules/volume/volume_linestat.c:249
+#: modules/volume/volume_linestat.c:251
#, fuzzy
msgid "_Extract image"
msgstr "Profile extrahieren"
-#: modules/volume/volume_linestat.c:250
+#: modules/volume/volume_linestat.c:252
#, fuzzy
msgid "Set _preview"
msgstr "Keine Vorschau möglich"
-#: modules/volume/volume_linestat.c:284
+#: modules/volume/volume_linestat.c:289
msgid "Summarize Volume Profiles"
msgstr ""
@@ -15343,61 +16130,127 @@ msgstr "_Differenzbild"
msgid "Line graph"
msgstr "Graph"
-#: modules/volume/volume_slice.c:290
+#: modules/volume/volume_slice.c:292
#, fuzzy
msgid "Slice Volume Data"
msgstr "_Volumen Daten"
-#: modules/volume/volume_slice.c:369
+#: modules/volume/volume_slice.c:371
#, fuzzy
msgid "_Base plane:"
msgstr "_Punktgröße:"
-#: modules/volume/volume_slice.c:420
+#: modules/volume/volume_slice.c:422
#, fuzzy
msgid "Extract _multiple items"
msgstr "Profile extrahieren"
-#: modules/volume/volume_slice.c:437
+#: modules/volume/volume_slice.c:439
#, fuzzy
msgid "Positions"
msgstr "Position"
-#: modules/volume/volume_slice.c:484
+#: modules/volume/volume_slice.c:492
#, fuzzy
msgid "_Z:"
msgstr "_X:"
-#: modules/volume/volume_slice.c:1156
+#: modules/volume/volume_slice.c:1167
#, fuzzy, c-format
msgid "Z slice at %.*f%s%s (#%d)"
msgstr "Z-Korrektur"
-#: modules/volume/volume_slice.c:1167
+#: modules/volume/volume_slice.c:1178
#, fuzzy, c-format
msgid "Y slice at %.*f%s%s (#%d)"
msgstr "Z-Korrektur"
-#: modules/volume/volume_slice.c:1178
+#: modules/volume/volume_slice.c:1189
#, fuzzy, c-format
msgid "X slice at %.*f%s%s (#%d)"
msgstr "Z-Korrektur"
-#: modules/volume/volume_slice.c:1307
+#: modules/volume/volume_slice.c:1325
#, fuzzy
msgid "Volume Z graphs"
msgstr "Volumen"
-#: modules/volume/volume_slice.c:1314
+#: modules/volume/volume_slice.c:1332
#, fuzzy
msgid "Volume X graphs"
msgstr "Volumen"
-#: modules/volume/volume_slice.c:1321
+#: modules/volume/volume_slice.c:1339
#, fuzzy
msgid "Volume Y graphs"
msgstr "Volumen"
+#: modules/volume/volume_swaxes.c:104
+#, fuzzy
+msgid "Swaps axes of volume data."
+msgstr "Invertiert Wert in Volumendaten"
+
+#: modules/volume/volume_swaxes.c:118
+#, fuzzy
+msgid "/S_wap axes..."
+msgstr "/Speichern _unter..."
+
+#: modules/volume/volume_swaxes.c:122
+#, fuzzy
+msgid "Swap axes"
+msgstr "_Achsen anzeigen"
+
+#: modules/volume/volume_swaxes.c:156
+#, fuzzy
+msgid "X"
+msgstr "_X:"
+
+#: modules/volume/volume_swaxes.c:157
+msgid "X, reversed"
+msgstr ""
+
+#: modules/volume/volume_swaxes.c:158
+#, fuzzy
+msgid "Y"
+msgstr "_Y:"
+
+#: modules/volume/volume_swaxes.c:159
+msgid "Y, reversed"
+msgstr ""
+
+#: modules/volume/volume_swaxes.c:160
+msgid "Z"
+msgstr ""
+
+#: modules/volume/volume_swaxes.c:161
+msgid "Z, reversed"
+msgstr ""
+
+#: modules/volume/volume_swaxes.c:175
+msgid "Swap Volume Axes"
+msgstr ""
+
+#: modules/volume/volume_swaxes.c:196
+msgid "Current _X axis will become:"
+msgstr ""
+
+#: modules/volume/volume_swaxes.c:204
+msgid "Current _Y axis will become:"
+msgstr ""
+
+#: modules/volume/volume_swaxes.c:212
+msgid "Current _Z axis will become:"
+msgstr ""
+
+#: modules/volume/volume_swaxes.c:219
+#, fuzzy
+msgid "Create new volume data"
+msgstr "Nivellierte Daten"
+
+#: modules/volume/volume_swaxes.c:286
+msgid "Z axis calibration will be lost."
+msgstr ""
+
#: modules/volume/volume_zcal.c:104
msgid "Attaches, extracts and removes volume data z-axis calibration."
msgstr ""
@@ -15470,6 +16323,16 @@ msgid ""
"differs from the number of planes %d."
msgstr ""
+#: modules/volume/volumeops.c:53
+#, fuzzy
+msgid "/Extract _Preview"
+msgstr "Profile extrahieren"
+
+#: modules/volume/volumeops.c:57
+#, fuzzy
+msgid "Extract volume data preview to an image"
+msgstr "3D-Ansicht als Bild speichern"
+
#: modules/xyz/xyz_drift.c:267
msgid "Analyzes drift in XYZ data."
msgstr ""
@@ -15517,7 +16380,7 @@ msgstr "Drift in X-Richtung"
msgid "Analyze XYZ Drift"
msgstr ""
-#: modules/xyz/xyz_drift.c:566 modules/xyz/xyz_raster.c:391
+#: modules/xyz/xyz_drift.c:566 modules/xyz/xyz_raster.c:406
msgid "Reset Ran_ges"
msgstr ""
@@ -15526,12 +16389,12 @@ msgstr ""
msgid "_Guess parameters"
msgstr "Rauigkeits-Parameter"
-#: modules/xyz/xyz_drift.c:778 modules/xyz/xyz_raster.c:570
+#: modules/xyz/xyz_drift.c:778 modules/xyz/xyz_raster.c:539
#, fuzzy
msgid "_X-range:"
msgstr "_X-Bereich:"
-#: modules/xyz/xyz_drift.c:800 modules/xyz/xyz_raster.c:592
+#: modules/xyz/xyz_drift.c:800 modules/xyz/xyz_raster.c:561
#, fuzzy
msgid "_Y-range:"
msgstr "_Y-Bereich:"
@@ -15624,7 +16487,7 @@ msgstr "H_öhe:"
msgid "Fitting in progress..."
msgstr ""
-#: modules/xyz/xyz_drift.c:2269 modules/xyz/xyz_raster.c:1012
+#: modules/xyz/xyz_drift.c:2264 modules/xyz/xyz_raster.c:981
#, fuzzy
msgid "Physical dimensions are invalid."
msgstr "Physische Abmessungen"
@@ -15672,45 +16535,45 @@ msgstr "_Daten"
msgid "Update X and Y of _all compatible data"
msgstr ""
-#: modules/xyz/xyz_raster.c:197
+#: modules/xyz/xyz_raster.c:194
#, fuzzy
msgid "Rasterizes XYZ data to images."
msgstr "Fügt zwei Bilder zusammen"
-#: modules/xyz/xyz_raster.c:211
+#: modules/xyz/xyz_raster.c:208
#, fuzzy
msgid "/_Rasterize..."
msgstr "/Zusa_mmenführen..."
-#: modules/xyz/xyz_raster.c:215
+#: modules/xyz/xyz_raster.c:212
#, fuzzy
msgid "Rasterize to image"
msgstr "Zwei Bilder zusammenführen"
-#: modules/xyz/xyz_raster.c:340
+#: modules/xyz/xyz_raster.c:337
#, fuzzy
msgid "Rasterize XYZ Data"
msgstr "XYZ-Daten importieren"
-#: modules/xyz/xyz_raster.c:354
+#: modules/xyz/xyz_raster.c:351
#, fuzzy
msgid "Create Image _Directly"
msgstr "Ein neues Element erzeugen"
-#: modules/xyz/xyz_raster.c:360
+#: modules/xyz/xyz_raster.c:357
msgid "XY points form a regular grid so interpolation is not necessary."
msgstr ""
-#: modules/xyz/xyz_raster.c:381
+#: modules/xyz/xyz_raster.c:392
#, fuzzy
msgid "Make Pixels S_quare"
msgstr "_Pixel-Radius:"
-#: modules/xyz/xyz_raster.c:642
+#: modules/xyz/xyz_raster.c:611
msgid "Field"
msgstr "Feld"
-#: modules/xyz/xyz_raster.c:956
+#: modules/xyz/xyz_raster.c:925
#, c-format
msgid ""
"Number of points: %u\n"
@@ -15718,12 +16581,64 @@ msgid ""
"Added on the boundaries: %u"
msgstr ""
-#: modules/xyz/xyz_raster.c:1091
+#: modules/xyz/xyz_raster.c:1065
msgid ""
"XYZ data regularization failed due to numerical instability or was "
"interrupted."
msgstr ""
+#~ msgid "pixels"
+#~ msgstr "Pixel"
+
+#~ msgid "Fast Fourier Transform"
+#~ msgstr "Schnelle Fouriertransformation"
+
+#, fuzzy
+#~ msgid "Surface _coverage:"
+#~ msgstr "Oberflächen-Flächeninhalt:"
+
+#, fuzzy
+#~ msgid "Distribute"
+#~ msgstr "VerzerrtVerteilung"
+
+#, fuzzy
+#~ msgid "Replace"
+#~ msgstr "Datei ersetzen?"
+
+#~ msgid "_Fix res.:"
+#~ msgstr "_Feste Auflösung:"
+
+#~ msgid "Reco_mpute"
+#~ msgstr "e_rneut berechnen"
+
+#, fuzzy
+#~ msgid "Show mode:"
+#~ msgstr "_Rahmen anzeigen"
+
+#~ msgid "Initializing GUI"
+#~ msgstr "Initialisiere graphische Benutzeroberfläche"
+
+#, fuzzy
+#~ msgid "Slab size _x:"
+#~ msgstr "_Ebenengröße:"
+
+#, fuzzy
+#~ msgid "Slab size _y:"
+#~ msgstr "_Ebenengröße:"
+
+#, fuzzy
+#~ msgid "Stitch operations on data fields."
+#~ msgstr ""
+#~ "Einfache Rechenoperationen mit zwei Datenfeldern (oder einem Datenfeld "
+#~ "und einer skalaren Größe)."
+
+#, fuzzy
+#~ msgid "Stitch operations on data"
+#~ msgstr "Arithmetische Operationen"
+
+#~ msgid "Create new channel"
+#~ msgstr "Neuen Kanal erzeugen"
+
#, fuzzy
#~ msgid "Laplace interpolation..."
#~ msgstr "Interpoliere..."
@@ -15908,10 +16823,6 @@ msgstr ""
#~ msgstr "Triangulation..."
#, fuzzy
-#~ msgid "Starting..."
-#~ msgstr "Starte"
-
-#, fuzzy
#~ msgid "Mean height"
#~ msgstr "Neue _Höhe:"
diff --git a/po/en_GB.gmo b/po/en_GB.gmo
index 8b13f07..2b518c8 100644
Binary files a/po/en_GB.gmo and b/po/en_GB.gmo differ
diff --git a/po/en_GB.po b/po/en_GB.po
index 40e6fe1..482bf7d 100644
--- a/po/en_GB.po
+++ b/po/en_GB.po
@@ -3,8 +3,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Gwyddion\n"
"Report-Msgid-Bugs-To: yeti at gwyddion.net\n"
-"POT-Creation-Date: 2016-11-18 11:05+0100\n"
-"PO-Revision-Date: 2016-11-15 09:45+0100\n"
+"POT-Creation-Date: 2017-08-15 17:48+0200\n"
+"PO-Revision-Date: 2017-08-14 20:33+0200\n"
"Last-Translator: Yeti <yeti at gwyddion.net>\n"
"Language-Team: None, I suppose\n"
"Language: en_GB\n"
@@ -12,7 +12,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Poedit 1.8.8\n"
+"X-Generator: Poedit 1.8.12\n"
#: libgwyddion/gwyexpr.c:765
msgid "Invalid token"
@@ -124,7 +124,8 @@ msgstr "contact: Hertz (paraboloid)"
#: app/data-browser-aux.c:1480 app/data-browser.c:2280 app/data-browser.c:2887
#: app/data-browser.c:3707 app/data-browser.c:3857 app/data-browser.c:4139
#: app/data-browser.c:4504 app/data-browser.c:4590 app/data-browser.c:5016
-#: app/resource-editor.c:366 modules/process/convolution_filter.c:691
+#: app/resource-editor.c:366 modules/file/xyzexport.c:214
+#: modules/process/convolution_filter.c:691
msgid "Untitled"
msgstr "Untitled"
@@ -132,97 +133,105 @@ msgstr "Untitled"
msgid "Initial residua evaluation..."
msgstr "Initial residua evaluation..."
-#: libgwyddion/gwynlfit.c:479 modules/process/fit-shape.c:1632
+#: libgwyddion/gwynlfit.c:479 modules/process/fit-shape.c:1646
msgid "Fitting..."
msgstr "Fitting..."
-#: libgwyddion/gwynlfitpreset.c:1442 libprocess/gwyprocessenums.c:101
-#: libprocess/gwyshapefitpreset.c:347
+#: libgwyddion/gwynlfitpreset.c:1549 libprocess/gwyprocessenums.c:101
+#: libprocess/gwyshapefitpreset.c:347 modules/process/psf-fit.c:157
msgid "Gaussian"
msgstr "Gaussian"
-#: libgwyddion/gwynlfitpreset.c:1457
+#: libgwyddion/gwynlfitpreset.c:1564
msgid "Gaussian (PSDF)"
msgstr "Gaussian (PSDF)"
-#: libgwyddion/gwynlfitpreset.c:1470
+#: libgwyddion/gwynlfitpreset.c:1577
msgid "Gaussian (ACF)"
msgstr "Gaussian (ACF)"
-#: libgwyddion/gwynlfitpreset.c:1483
+#: libgwyddion/gwynlfitpreset.c:1590
msgid "Gaussian (HHCF)"
msgstr "Gaussian (HHCF)"
-#: libgwyddion/gwynlfitpreset.c:1496
+#: libgwyddion/gwynlfitpreset.c:1603
msgid "Gaussian (RPSDF)"
msgstr "Gaussian (RPSDF)"
-#: libgwyddion/gwynlfitpreset.c:1509
+#: libgwyddion/gwynlfitpreset.c:1616
msgid "Two Gaussians (PSDF)"
msgstr "Two Gaussians (PSDF)"
-#: libgwyddion/gwynlfitpreset.c:1524 modules/xyz/xyz_drift.c:841
-#: modules/xyz/xyz_drift.c:846 modules/xyz/xyz_drift.c:1819
+#: libgwyddion/gwynlfitpreset.c:1631 modules/xyz/xyz_drift.c:841
+#: modules/xyz/xyz_drift.c:846 modules/xyz/xyz_drift.c:1818
msgid "Exponential"
msgstr "Exponential"
-#: libgwyddion/gwynlfitpreset.c:1536
+#: libgwyddion/gwynlfitpreset.c:1643
msgid "Exponential (PSDF)"
msgstr "Exponential (PSDF)"
-#: libgwyddion/gwynlfitpreset.c:1549
+#: libgwyddion/gwynlfitpreset.c:1656
msgid "Exponential (ACF)"
msgstr "Exponential (ACF)"
-#: libgwyddion/gwynlfitpreset.c:1561
+#: libgwyddion/gwynlfitpreset.c:1668
msgid "Exponential (HHCF)"
msgstr "Exponential (HHCF)"
-#: libgwyddion/gwynlfitpreset.c:1574
+#: libgwyddion/gwynlfitpreset.c:1681
msgid "Exponential (RPSDF)"
msgstr "Exponential (RPSDF)"
-#: libgwyddion/gwynlfitpreset.c:1588
+#: libgwyddion/gwynlfitpreset.c:1695
+msgid "K-correlated (PSDF)"
+msgstr "K-correlated (PSDF)"
+
+#: libgwyddion/gwynlfitpreset.c:1709
msgid "Polynomial (order 0)"
msgstr "Polynomial (order 0)"
-#: libgwyddion/gwynlfitpreset.c:1599 modules/xyz/xyz_drift.c:1805
+#: libgwyddion/gwynlfitpreset.c:1720 modules/xyz/xyz_drift.c:1804
msgid "Polynomial (order 1)"
msgstr "Polynomial (order 1)"
-#: libgwyddion/gwynlfitpreset.c:1610
+#: libgwyddion/gwynlfitpreset.c:1731
msgid "Polynomial (order 2)"
msgstr "Polynomial (order 2)"
-#: libgwyddion/gwynlfitpreset.c:1622
+#: libgwyddion/gwynlfitpreset.c:1743
msgid "Polynomial (order 3)"
msgstr "Polynomial (order 3)"
-#: libgwyddion/gwynlfitpreset.c:1635
+#: libgwyddion/gwynlfitpreset.c:1756
msgid "Square wave"
msgstr "Square wave"
-#: libgwyddion/gwynlfitpreset.c:1651
+#: libgwyddion/gwynlfitpreset.c:1772
msgid "Parabolic step"
msgstr "Parabolic step"
-#: libgwyddion/gwynlfitpreset.c:1667
+#: libgwyddion/gwynlfitpreset.c:1788
msgid "Smooth slanted step"
msgstr "Smooth slanted step"
-#: libgwyddion/gwynlfitpreset.c:1684
+#: libgwyddion/gwynlfitpreset.c:1805
msgid "Smooth bent step"
msgstr "Smooth bent step"
-#: libgwyddion/gwynlfitpreset.c:1700
+#: libgwyddion/gwynlfitpreset.c:1821
+msgid "Boltzmann bent step"
+msgstr "Boltzmann bent step"
+
+#: libgwyddion/gwynlfitpreset.c:1837
msgid "Power"
msgstr "Power"
-#: libgwyddion/gwynlfitpreset.c:1712 libprocess/gwyshapefitpreset.c:348
+#: libgwyddion/gwynlfitpreset.c:1849 libprocess/gwyshapefitpreset.c:348
msgid "Lorentzian"
msgstr "Lorentzian"
-#: libgwyddion/gwynlfitpreset.c:1726
+#: libgwyddion/gwynlfitpreset.c:1863
msgid "Sinc"
msgstr "Sinc"
@@ -243,7 +252,7 @@ msgid "Step height (positive)"
msgstr "Step height (positive)"
#: libprocess/cdline.c:590 libprocess/cdline.c:599
-#: libgwydgets/gwydgetenums.c:48 modules/process/hough.c:170
+#: libgwydgets/gwydgetenums.c:48 modules/process/hough.c:163
msgid "Line"
msgstr "Line"
@@ -256,7 +265,7 @@ msgid "Circle (down)"
msgstr "Circle (down)"
#: libprocess/cdline.c:608 libprocess/cdline.c:617
-#: libgwydgets/gwygraphareadialog.c:557 modules/process/hough.c:171
+#: libgwydgets/gwygraphareadialog.c:550 modules/process/hough.c:164
msgid "Circle"
msgstr "Circle"
@@ -264,237 +273,237 @@ msgstr "Circle"
msgid "Circle (up)"
msgstr "Circle (up)"
-#: libprocess/gwygrainvalue.c:64
+#: libprocess/gwygrainvalue.c:62
msgid "Grain number"
msgstr "Grain number"
-#: libprocess/gwygrainvalue.c:73 modules/process/curvature.c:129
+#: libprocess/gwygrainvalue.c:71 modules/process/curvature.c:128
msgid "Center x position"
msgstr "Centre x position"
-#: libprocess/gwygrainvalue.c:82 modules/process/curvature.c:130
+#: libprocess/gwygrainvalue.c:80 modules/process/curvature.c:129
msgid "Center y position"
msgstr "Centre y position"
-#: libprocess/gwygrainvalue.c:91
+#: libprocess/gwygrainvalue.c:89
msgid "Minimum value"
msgstr "Minimum value"
-#: libprocess/gwygrainvalue.c:100
+#: libprocess/gwygrainvalue.c:98
msgid "Maximum value"
msgstr "Maximum value"
-#: libprocess/gwygrainvalue.c:109 modules/process/bdep_synth.c:133
-#: modules/tools/filter.c:237
+#: libprocess/gwygrainvalue.c:107 modules/process/bdep_synth.c:133
+#: modules/tools/filter.c:238
msgid "Mean value"
msgstr "Average value"
-#: libprocess/gwygrainvalue.c:118 modules/tools/filter.c:238
+#: libprocess/gwygrainvalue.c:116 modules/tools/filter.c:239
msgid "Median value"
msgstr "Median value"
-#: libprocess/gwygrainvalue.c:127
+#: libprocess/gwygrainvalue.c:125
msgid "Minimum value on boundary"
msgstr "Minimum value on boundary"
-#: libprocess/gwygrainvalue.c:136
+#: libprocess/gwygrainvalue.c:134
msgid "Maximum value on boundary"
msgstr "Maximum value on boundary"
-#: libprocess/gwygrainvalue.c:145
+#: libprocess/gwygrainvalue.c:143
msgid "Pixel area"
msgstr "Pixel area"
-#: libprocess/gwygrainvalue.c:154
+#: libprocess/gwygrainvalue.c:152
msgid "Projected area"
msgstr "Projected area"
-#: libprocess/gwygrainvalue.c:163
+#: libprocess/gwygrainvalue.c:161
msgid "Surface area"
msgstr "Surface area"
-#: libprocess/gwygrainvalue.c:172
+#: libprocess/gwygrainvalue.c:170
msgid "Equivalent square side"
msgstr "Equivalent square side"
-#: libprocess/gwygrainvalue.c:181
+#: libprocess/gwygrainvalue.c:179
msgid "Equivalent disc radius"
msgstr "Equivalent disc radius"
-#: libprocess/gwygrainvalue.c:190
+#: libprocess/gwygrainvalue.c:188
msgid "Area above half-height"
msgstr "Area above half-height"
-#: libprocess/gwygrainvalue.c:199
+#: libprocess/gwygrainvalue.c:197
msgid "Area of convex hull"
msgstr "Area of convex hull"
#. TRANSLATORS: Grain volume calculated using basis (foot) set to
#. * zero.
-#: libprocess/gwygrainvalue.c:210
+#: libprocess/gwygrainvalue.c:208
msgid "Zero basis volume"
msgstr "Zero-basis volume"
#. TRANSLATORS: Grain volume calculated using basis (foot) set to the
#. * grain minimum.
-#: libprocess/gwygrainvalue.c:221
+#: libprocess/gwygrainvalue.c:219
msgid "Grain minimum basis volume"
msgstr "Grain minimum-basis volume"
#. TRANSLATORS: Grain volume calculated using basis (foot) set to the
#. * Laplacian background.
-#: libprocess/gwygrainvalue.c:232
+#: libprocess/gwygrainvalue.c:230
msgid "Laplacian background basis volume"
msgstr "Laplacian background-basis volume"
-#: libprocess/gwygrainvalue.c:241
+#: libprocess/gwygrainvalue.c:239
msgid "Projected boundary length"
msgstr "Projected boundary length"
-#: libprocess/gwygrainvalue.c:250
+#: libprocess/gwygrainvalue.c:248
msgid "Minimum bounding size"
msgstr "Minimum bounding size"
-#: libprocess/gwygrainvalue.c:259
+#: libprocess/gwygrainvalue.c:257
msgid "Minimum bounding direction"
msgstr "Minimum bounding direction"
-#: libprocess/gwygrainvalue.c:268
+#: libprocess/gwygrainvalue.c:266
msgid "Maximum bounding size"
msgstr "Maximum bounding size"
-#: libprocess/gwygrainvalue.c:277
+#: libprocess/gwygrainvalue.c:275
msgid "Maximum bounding direction"
msgstr "Maximum bounding direction"
-#: libprocess/gwygrainvalue.c:286
+#: libprocess/gwygrainvalue.c:284
msgid "Maximum inscribed disc radius"
msgstr "Maximum inscribed disc radius"
-#: libprocess/gwygrainvalue.c:295
+#: libprocess/gwygrainvalue.c:293
msgid "Maximum inscribed disc center x position"
msgstr "Maximum inscribed disc centre x-position"
-#: libprocess/gwygrainvalue.c:304
+#: libprocess/gwygrainvalue.c:302
msgid "Maximum inscribed disc center y position"
msgstr "Maximum inscribed disc centre y-position"
-#: libprocess/gwygrainvalue.c:313
+#: libprocess/gwygrainvalue.c:311
msgid "Minimum circumcircle radius"
msgstr "Minimum circumcircle radius"
-#: libprocess/gwygrainvalue.c:322
+#: libprocess/gwygrainvalue.c:320
msgid "Minimum circumcircle center x position"
msgstr "Minimum circumcircle centre x-position"
-#: libprocess/gwygrainvalue.c:331
+#: libprocess/gwygrainvalue.c:329
msgid "Minimum circumcircle center y position"
msgstr "Minimum circumcircle centre y-position"
-#: libprocess/gwygrainvalue.c:340
+#: libprocess/gwygrainvalue.c:338
msgid "Mean radius"
msgstr "Average radius"
-#: libprocess/gwygrainvalue.c:349 modules/tools/readvalue.c:319
+#: libprocess/gwygrainvalue.c:347 modules/tools/readvalue.c:322
msgid "Inclination θ"
msgstr "Inclination θ"
-#: libprocess/gwygrainvalue.c:358 modules/tools/readvalue.c:329
+#: libprocess/gwygrainvalue.c:356 modules/tools/readvalue.c:332
msgid "Inclination φ"
msgstr "Inclination φ"
-#: libprocess/gwygrainvalue.c:367
+#: libprocess/gwygrainvalue.c:365
msgid "Curvature center x position"
msgstr "Curvature centre x-position"
-#: libprocess/gwygrainvalue.c:376
+#: libprocess/gwygrainvalue.c:374
msgid "Curvature center y position"
msgstr "Curvature centre y-position"
-#: libprocess/gwygrainvalue.c:385
+#: libprocess/gwygrainvalue.c:383
msgid "Curvature center z value"
msgstr "Curvature centre z-value"
-#: libprocess/gwygrainvalue.c:394 modules/tools/readvalue.c:344
+#: libprocess/gwygrainvalue.c:392 modules/tools/readvalue.c:347
msgid "Curvature 1"
msgstr "Curvature 1"
-#: libprocess/gwygrainvalue.c:403 modules/tools/readvalue.c:354
+#: libprocess/gwygrainvalue.c:401 modules/tools/readvalue.c:357
msgid "Curvature 2"
msgstr "Curvature 2"
-#: libprocess/gwygrainvalue.c:412
+#: libprocess/gwygrainvalue.c:410
msgid "Curvature angle 1"
msgstr "Curvature angle 1"
-#: libprocess/gwygrainvalue.c:421
+#: libprocess/gwygrainvalue.c:419
msgid "Curvature angle 2"
msgstr "Curvature angle 2"
-#: libprocess/gwygrainvalue.c:430
+#: libprocess/gwygrainvalue.c:428
msgid "Major semiaxis of equivalent ellipse"
msgstr "Major semi-axis of equivalent ellipse"
-#: libprocess/gwygrainvalue.c:439
+#: libprocess/gwygrainvalue.c:437
msgid "Minor semiaxis of equivalent ellipse"
msgstr "Minor semi-axis of equivalent ellipse"
-#: libprocess/gwygrainvalue.c:448
+#: libprocess/gwygrainvalue.c:446
msgid "Orientation of equivalent ellipse"
msgstr "Orientation of equivalent ellipse"
-#: libprocess/gwygrainvalue.c:1120
+#: libprocess/gwygrainvalue.c:1118
msgid "Id"
msgstr "Id"
-#: libprocess/gwygrainvalue.c:1121 modules/graph/graph_peaks.c:156
-#: modules/process/extract_path.c:391 modules/process/wave_synth.c:482
-#: modules/tools/readvalue.c:251
+#: libprocess/gwygrainvalue.c:1119 modules/graph/graph_peaks.c:154
+#: modules/process/extract_path.c:391 modules/process/wave_synth.c:513
+#: modules/tools/readvalue.c:253
msgid "Position"
msgstr "Position"
-#: libprocess/gwygrainvalue.c:1122 app/meta.c:411 modules/file/imgexport.c:4625
-#: modules/process/curvature.c:762 modules/tools/level3.c:468
-#: modules/tools/readvalue.c:286
+#: libprocess/gwygrainvalue.c:1120 app/meta.c:411 modules/file/imgexport.c:4573
+#: modules/process/curvature.c:759 modules/tools/level3.c:475
+#: modules/tools/readvalue.c:290
msgid "Value"
msgstr "Value"
-#: libprocess/gwygrainvalue.c:1123
+#: libprocess/gwygrainvalue.c:1121
msgid "Area"
msgstr "Area"
-#: libprocess/gwygrainvalue.c:1124 app/data-browser.c:5624 app/toolbox.c:110
+#: libprocess/gwygrainvalue.c:1122 app/data-browser.c:5624 app/toolbox.c:115
msgid "Volume"
msgstr "Volume"
-#: libprocess/gwygrainvalue.c:1125
+#: libprocess/gwygrainvalue.c:1123
msgid "Boundary"
msgstr "Boundary"
-#: libprocess/gwygrainvalue.c:1126 modules/process/pat_synth.c:829
-#: modules/process/pat_synth.c:1131 modules/process/pat_synth.c:1466
-#: modules/tools/linestats.c:171 modules/volume/volume_linestat.c:147
+#: libprocess/gwygrainvalue.c:1124 modules/process/pat_synth.c:830
+#: modules/process/pat_synth.c:1132 modules/process/pat_synth.c:1467
+#: modules/tools/linestats.c:171 modules/volume/volume_linestat.c:149
msgid "Slope"
msgstr "Slope"
-#: libprocess/gwygrainvalue.c:1127 modules/process/curvature.c:213
-#: modules/process/curvature.c:613
+#: libprocess/gwygrainvalue.c:1125 modules/process/curvature.c:212
+#: modules/process/curvature.c:615
msgid "Curvature"
msgstr "Curvature"
-#: libprocess/gwygrainvalue.c:1128
+#: libprocess/gwygrainvalue.c:1126
msgid "Moment"
msgstr "Moment"
-#: libprocess/gwygrainvalue.c:1132
+#: libprocess/gwygrainvalue.c:1130
msgid "User"
msgstr "User"
-#: libprocess/gwyprocessenums.c:44
+#: libprocess/gwyprocessenums.c:44 modules/process/preview.h:263
msgid "Union"
msgstr "Union"
-#: libprocess/gwyprocessenums.c:45
+#: libprocess/gwyprocessenums.c:45 modules/process/preview.h:255
msgid "Intersection"
msgstr "Intersection"
@@ -573,13 +582,13 @@ msgid "Scale and space adaptive"
msgstr "Scale and space adaptive"
#. TRANSLATORS: Interpolation type (AKA nearest neighbour)
-#: libprocess/gwyprocessenums.c:207 modules/file/imgexport.c:3791
-#: modules/xyz/xyz_raster.c:640
+#: libprocess/gwyprocessenums.c:207 modules/file/imgexport.c:3756
+#: modules/xyz/xyz_raster.c:609
msgid "Round"
msgstr "Round"
-#: libprocess/gwyprocessenums.c:208 modules/file/imgexport.c:3792
-#: modules/xyz/xyz_raster.c:641
+#: libprocess/gwyprocessenums.c:208 modules/file/imgexport.c:3757
+#: modules/xyz/xyz_raster.c:610
msgid "Linear"
msgstr "Linear"
@@ -667,27 +676,27 @@ msgstr "Include only masked region"
msgid "Use entire image (ignore mask)"
msgstr "Use entire image (ignore mask)"
-#: libprocess/gwyprocessenums.c:602
+#: libprocess/gwyprocessenums.c:604
msgid "distance|City-block"
msgstr "City-block"
-#: libprocess/gwyprocessenums.c:603
+#: libprocess/gwyprocessenums.c:605
msgid "distance|Chess"
msgstr "Chess"
-#: libprocess/gwyprocessenums.c:604
+#: libprocess/gwyprocessenums.c:606
msgid "distance|Octagonal 4,8"
msgstr "Octagonal 4,8"
-#: libprocess/gwyprocessenums.c:605
+#: libprocess/gwyprocessenums.c:607
msgid "distance|Octagonal 8,4"
msgstr "Octagonal 8,4"
-#: libprocess/gwyprocessenums.c:606
+#: libprocess/gwyprocessenums.c:608
msgid "distance|Octagonal"
msgstr "Octagonal"
-#: libprocess/gwyprocessenums.c:607
+#: libprocess/gwyprocessenums.c:609
msgid "distance|Euclidean"
msgstr "Euclidean"
@@ -723,11 +732,11 @@ msgstr "Parabolic bump"
msgid "Ring"
msgstr "Ring"
-#: libprocess/morph_lib.c:169 libprocess/tip.c:1043
+#: libprocess/morph_lib.c:169 libprocess/tip.c:1052
msgid "Dilation..."
msgstr "Dilation..."
-#: libprocess/morph_lib.c:235 libprocess/tip.c:1164
+#: libprocess/morph_lib.c:235 libprocess/tip.c:1173
msgid "Erosion..."
msgstr "Erosion..."
@@ -758,81 +767,81 @@ msgid_plural "Found %d internal local maxima"
msgstr[0] "Found one internal local maximum"
msgstr[1] "Found %d internal local maxima"
-#: libprocess/tip.c:422
+#: libprocess/tip.c:431
msgid "Pyramid"
msgstr "Pyramid"
-#: libprocess/tip.c:423 libprocess/tip.c:429 libprocess/tip.c:435
+#: libprocess/tip.c:432 libprocess/tip.c:438 libprocess/tip.c:444
msgid "Pyramidal"
msgstr "Pyramidal"
-#: libprocess/tip.c:428
+#: libprocess/tip.c:437
msgid "Contact"
msgstr "Contact"
-#: libprocess/tip.c:434
+#: libprocess/tip.c:443
msgid "Noncontact"
msgstr "Non-contact"
-#: libprocess/tip.c:440
+#: libprocess/tip.c:449
msgid "Delta function"
msgstr "Delta-function"
-#: libprocess/tip.c:441
+#: libprocess/tip.c:450
msgid "Analytical"
msgstr "Analytical"
-#: libprocess/tip.c:446
+#: libprocess/tip.c:455 modules/process/fibre_synth.c:259
msgid "Parabola"
msgstr "Parabola"
-#: libprocess/tip.c:447 libprocess/tip.c:453
+#: libprocess/tip.c:456 libprocess/tip.c:462
msgid "Symmetric"
msgstr "Symmetrical"
-#: libprocess/tip.c:452
+#: libprocess/tip.c:461
msgid "Cone"
msgstr "Cone"
-#: libprocess/tip.c:458
+#: libprocess/tip.c:467
msgid "Elliptical parabola"
msgstr "Elliptical parabola"
-#: libprocess/tip.c:459
+#: libprocess/tip.c:468
msgid "Asymmetric"
msgstr "Asymmetric"
-#: libprocess/tip.c:1339 libprocess/tip.c:1367 libprocess/tip.c:1416
-#: libprocess/tip.c:1443
+#: libprocess/tip.c:1348 libprocess/tip.c:1376 libprocess/tip.c:1425
+#: libprocess/tip.c:1452
msgid "Converting fields"
msgstr "Converting fields"
-#: libprocess/tip.c:1349
+#: libprocess/tip.c:1358
msgid "Starting partial estimation"
msgstr "Starting partial estimation"
-#: libprocess/tip.c:1426
+#: libprocess/tip.c:1435
msgid "Starting full estimation"
msgstr "Starting full estimation"
-#: libprocess/triangulation.c:2085 modules/process/calcoefs_view.c:793
+#: libprocess/triangulation.c:2084 modules/process/calcoefs_view.c:793
#: modules/process/lat_synth.c:1178
msgid "Triangulating..."
msgstr "Triangulating..."
-#: libgwydgets/gwy3dwindow.c:570
+#: libgwydgets/gwy3dwindow.c:575
msgid "Rotate view (R)"
msgstr "Rotate view (R)"
-#: libgwydgets/gwy3dwindow.c:575
+#: libgwydgets/gwy3dwindow.c:580
msgid "Scale view as a whole (S)"
msgstr "Scale view as a whole (S)"
-#: libgwydgets/gwy3dwindow.c:580
+#: libgwydgets/gwy3dwindow.c:585
msgid "Scale value range (V)"
msgstr "Scale value range (V)"
-#: libgwydgets/gwy3dwindow.c:585
+#: libgwydgets/gwy3dwindow.c:590
msgid "Move light source (L)"
msgstr "Move light source (L)"
@@ -840,227 +849,286 @@ msgstr "Move light source (L)"
msgid "Show full controls"
msgstr "Show full controls"
-#: libgwydgets/gwy3dwindow.c:693
+#: libgwydgets/gwy3dwindow.c:691
msgid "Hide full controls"
msgstr "Hide full controls"
-#: libgwydgets/gwy3dwindow.c:709 modules/file/imgexport.c:4796
-#: modules/process/fit-shape.c:461
+#: libgwydgets/gwy3dwindow.c:707 modules/file/imgexport.c:4745
+#: modules/process/fit-shape.c:462
msgid "adjective|Basic"
msgstr "Basic"
-#: libgwydgets/gwy3dwindow.c:714
+#: libgwydgets/gwy3dwindow.c:712
msgid "Light & Material"
msgstr "Light & Material"
-#: libgwydgets/gwy3dwindow.c:719
+#: libgwydgets/gwy3dwindow.c:717
msgid "Labels"
msgstr "Labels"
-#: libgwydgets/gwy3dwindow.c:828 modules/process/facet_analysis.c:331
-#: modules/process/facet_analysis.c:347 modules/process/shade.c:245
+#: libgwydgets/gwy3dwindow.c:722
+msgid "Colorbar"
+msgstr "Colourbar"
+
+#: libgwydgets/gwy3dwindow.c:838 modules/process/facet_analysis.c:335
+#: modules/process/facet_analysis.c:351 modules/process/shade.c:253
#: modules/process/tilt.c:223
msgid "φ:"
msgstr "φ:"
-#: libgwydgets/gwy3dwindow.c:828 libgwydgets/gwy3dwindow.c:834
-#: libgwydgets/gwy3dwindow.c:1032 libgwydgets/gwy3dwindow.c:1040
-#: modules/process/facet_analysis.c:375 modules/process/indent_analyze.c:460
-#: modules/process/rotate.c:264 modules/process/shade.c:237
-#: modules/process/shade.c:245 modules/process/tilt.c:211
-#: modules/process/tilt.c:223 modules/process/tip_model.c:234
-#: modules/process/tip_model.c:240 modules/process/unrotate.c:334
+#: libgwydgets/gwy3dwindow.c:838 libgwydgets/gwy3dwindow.c:843
+#: libgwydgets/gwy3dwindow.c:1013 libgwydgets/gwy3dwindow.c:1020
+#: modules/process/correct_affine.c:461 modules/process/facet_analysis.c:238
+#: modules/process/facet_analysis.c:370 modules/process/indent_analyze.c:438
+#: modules/process/measure_lattice.c:381 modules/process/rotate.c:264
+#: modules/process/shade.c:245 modules/process/shade.c:253
+#: modules/process/synth.h:379 modules/process/synth.h:410
+#: modules/process/tilt.c:211 modules/process/tilt.c:223
+#: modules/process/tip_model.c:234 modules/process/tip_model.c:240
+#: modules/process/unrotate.c:334 modules/tools/distance.c:197
+#: modules/tools/readvalue.c:223 modules/tools/stats.c:319
msgid "deg"
msgstr "deg"
-#: libgwydgets/gwy3dwindow.c:834 modules/process/facet_analysis.c:330
-#: modules/process/facet_analysis.c:346 modules/process/shade.c:237
+#: libgwydgets/gwy3dwindow.c:843 modules/process/facet_analysis.c:334
+#: modules/process/facet_analysis.c:350 modules/process/shade.c:245
#: modules/process/tilt.c:211
msgid "θ:"
msgstr "θ:"
-#: libgwydgets/gwy3dwindow.c:839 modules/process/cwt.c:151
+#: libgwydgets/gwy3dwindow.c:849 modules/process/cwt.c:151
msgid "_Scale:"
msgstr "_Scale:"
-#: libgwydgets/gwy3dwindow.c:846
+#: libgwydgets/gwy3dwindow.c:856
msgid "_Value scale:"
msgstr "_Value scale:"
-#: libgwydgets/gwy3dwindow.c:851
+#: libgwydgets/gwy3dwindow.c:862
msgid "Ph_ysical scale:"
msgstr "Ph_ysical scale:"
-#: libgwydgets/gwy3dwindow.c:865
+#: libgwydgets/gwy3dwindow.c:876
msgid "verb|Set"
msgstr "Set"
-#: libgwydgets/gwy3dwindow.c:877
+#: libgwydgets/gwy3dwindow.c:886
msgid "Line _width:"
msgstr "Line _width:"
-#: libgwydgets/gwy3dwindow.c:881
+#: libgwydgets/gwy3dwindow.c:886 libgwydgets/gwy3dwindow.c:1194
+#: libgwydgets/gwy3dwindow.c:1204 libgwydgets/gwy3dwindow.c:1235
+#: libgwydgets/gwygraphareadialog.c:157 libgwydgets/gwygraphareadialog.c:173
+#: modules/file/hdrimage.cc:2246 modules/file/hdrimage.cc:2252
+#: modules/file/pixmap.c:820 modules/file/pixmap.c:826
+#: modules/process/angle_dist.c:188 modules/process/angle_dist.c:213
+#: modules/process/col_synth.c:486 modules/process/crosscor.c:252
+#: modules/process/crosscor.c:260 modules/process/crosscor.c:276
+#: modules/process/crosscor.c:284 modules/process/crosscor.c:300
+#: modules/process/crosscor.c:308 modules/process/cwt.c:151
+#: modules/process/dimensions.h:88 modules/process/edge.c:672
+#: modules/process/entropy.c:242 modules/process/extend.c:220
+#: modules/process/extend.c:227 modules/process/extend.c:234
+#: modules/process/extend.c:241 modules/process/facet_analysis.c:362
+#: modules/process/fbm_synth.c:383 modules/process/hough.c:203
+#: modules/process/local_contrast.c:146 modules/process/mark_disconn.c:263
+#: modules/process/mask_morph.c:237 modules/process/median-bg.c:209
+#: modules/process/neural.c:623 modules/process/neural.c:631
+#: modules/process/psdf_logphi.c:276 modules/process/rank.c:188
+#: modules/process/scale.c:237 modules/process/scale.c:246
+#: modules/process/scars.c:353 modules/process/scars.c:361
+#: modules/process/semsim.c:227 modules/process/slope_dist.c:365
+#: modules/process/slope_dist.c:393 modules/process/sphere-revolve.c:346
+#: modules/process/straighten_path.c:278 modules/process/synth.h:280
+#: modules/process/synth.h:501 modules/process/tip_blind.c:334
+#: modules/process/tip_blind.c:342 modules/process/volumize_layers.c:240
+#: modules/process/volumize_layers.c:245 modules/process/volumize_layers.c:250
+#: modules/process/wpour_mark.c:320 modules/tools/filter.c:291
+#: modules/tools/level3.c:244 modules/tools/maskedit.c:528
+#: modules/tools/maskedit.c:629 modules/tools/pathlevel.c:256
+#: modules/tools/profile.c:377 modules/tools/profile.c:503
+#: modules/tools/readvalue.c:222 modules/tools/readvalue.c:378
+#: modules/tools/roughness.c:868 modules/volume/volume_slice.c:446
+#: modules/volume/volume_slice.c:469 modules/volume/volume_slice.c:492
+#: modules/xyz/xyz_drift.c:738 modules/xyz/xyz_drift.c:753
+#: modules/xyz/xyz_raster.c:382 modules/xyz/xyz_raster.c:388
+msgid "px"
+msgstr "px"
+
+#: libgwydgets/gwy3dwindow.c:891
msgid "Show _axes"
msgstr "Show _axes"
-#: libgwydgets/gwy3dwindow.c:890
+#: libgwydgets/gwy3dwindow.c:900
msgid "Show _labels"
msgstr "Show _labels"
-#: libgwydgets/gwy3dwindow.c:899
-msgid "Show false _colorbar"
-msgstr "Show false _colourbar"
-
-#: libgwydgets/gwy3dwindow.c:908
+#: libgwydgets/gwy3dwindow.c:909
msgid "_Orthographic projection"
msgstr "_Orthographic projection"
-#: libgwydgets/gwy3dwindow.c:917
+#: libgwydgets/gwy3dwindow.c:918
msgid "_Hide masked"
msgstr "_Hide masked"
-#: libgwydgets/gwy3dwindow.c:933
+#: libgwydgets/gwy3dwindow.c:934
msgid "_Lighting"
msgstr "_Lighting"
-#: libgwydgets/gwy3dwindow.c:934
+#: libgwydgets/gwy3dwindow.c:935
msgid "_Gradient"
msgstr "_Gradient"
-#: libgwydgets/gwy3dwindow.c:935
+#: libgwydgets/gwy3dwindow.c:936
msgid "_Overlay"
msgstr "_Overlay"
-#: libgwydgets/gwy3dwindow.c:936
+#: libgwydgets/gwy3dwindow.c:937
msgid "_Overlay - no light"
msgstr "_Overlay – no light"
-#: libgwydgets/gwy3dwindow.c:1009
+#: libgwydgets/gwy3dwindow.c:992
msgid "_Material:"
msgstr "_Material:"
-#: libgwydgets/gwy3dwindow.c:1032
+#: libgwydgets/gwy3dwindow.c:1013
msgid "_Light φ:"
msgstr "_Light φ:"
-#: libgwydgets/gwy3dwindow.c:1040
+#: libgwydgets/gwy3dwindow.c:1020
msgid "L_ight θ:"
msgstr "L_ight θ:"
-#: libgwydgets/gwy3dwindow.c:1070 libgwydgets/gwy3dwindow.c:1240
-#: app/toolbox-editor.c:215 modules/file/hdrimage.cc:2213
-#: modules/file/imgexport.c:4760 modules/file/pixmap.c:789
+#: libgwydgets/gwy3dwindow.c:1052 libgwydgets/gwy3dwindow.c:1243
+#: app/toolbox-editor.c:216 modules/file/hdrimage.cc:2213
+#: modules/file/imgexport.c:4708 modules/file/pixmap.c:789
#: modules/file/rawfile.c:424 modules/process/angle_dist.c:172
#: modules/process/bdep_synth.c:341 modules/process/calcoefs_new.c:371
-#: modules/process/calibrate.c:391 modules/process/col_synth.c:392
-#: modules/process/correct_affine.c:301 modules/process/curvature.c:615
-#: modules/process/cwt.c:135 modules/process/deposit_synth.c:349
+#: modules/process/calibrate.c:383 modules/process/col_synth.c:392
+#: modules/process/correct_affine.c:346 modules/process/curvature.c:617
+#: modules/process/cwt.c:135 modules/process/deposit_synth.c:350
#: modules/process/diff_synth.c:411 modules/process/domain_synth.c:354
#: modules/process/drift.c:245 modules/process/dwt.c:166
#: modules/process/dwtanisotropy.c:184 modules/process/edge.c:638
#: modules/process/extend.c:192 modules/process/facet-level.c:193
-#: modules/process/facet_analysis.c:271 modules/process/fbm_synth.c:303
+#: modules/process/facet_analysis.c:275 modules/process/fbm_synth.c:303
#: modules/process/fft.c:336 modules/process/fft_filter_2d.c:417
-#: modules/process/fft_synth.c:341 modules/process/fractal.c:231
-#: modules/process/grain_edge.c:213 modules/process/grain_mark.c:247
-#: modules/process/grain_wshed.c:167 modules/process/hough.c:179
-#: modules/process/lat_synth.c:567 modules/process/latsim.c:159
-#: modules/process/level.c:245 modules/process/linematch.c:804
-#: modules/process/lno_synth.c:433 modules/process/local_contrast.c:130
-#: modules/process/logistic.c:234 modules/process/mark_disconn.c:208
-#: modules/process/mask_distribute.c:152 modules/process/measure_lattice.c:256
-#: modules/process/median-bg.c:180 modules/process/noise_synth.c:336
-#: modules/process/obj_synth.c:441 modules/process/pat_synth.c:385
-#: modules/process/pid.c:199 modules/process/polydistort.c:210
-#: modules/process/polylevel.c:373 modules/process/psdf_logphi.c:249
-#: modules/process/rank.c:158 modules/process/rotate.c:243
-#: modules/process/scale.c:196 modules/process/scars.c:298
-#: modules/process/semsim.c:211 modules/process/shade.c:208
-#: modules/process/slope_dist.c:276 modules/process/sphere-revolve.c:218
-#: modules/process/straighten_path.c:249 modules/process/tilt.c:161
-#: modules/process/tip_model.c:169 modules/process/unrotate.c:220
-#: modules/process/volumize_layers.c:221 modules/process/wave_synth.c:349
-#: modules/process/wpour_mark.c:278 modules/volume/volume_calibrate.c:370
-#: modules/volume/volume_extract.c:331 modules/volume/volume_kmeans.c:153
-#: modules/volume/volume_kmedians.c:147 modules/volume/volume_linestat.c:292
-#: modules/volume/volume_slice.c:292
+#: modules/process/fft_synth.c:341 modules/process/fibre_synth.c:422
+#: modules/process/fractal.c:228 modules/process/grain_edge.c:212
+#: modules/process/grain_mark.c:246 modules/process/grain_wshed.c:168
+#: modules/process/hough.c:174 modules/process/lat_synth.c:567
+#: modules/process/latsim.c:159 modules/process/level.c:245
+#: modules/process/linematch.c:771 modules/process/lno_synth.c:431
+#: modules/process/local_contrast.c:130 modules/process/logistic.c:234
+#: modules/process/mark_disconn.c:208 modules/process/mask_distribute.c:152
+#: modules/process/measure_lattice.c:246 modules/process/median-bg.c:180
+#: modules/process/mfm_current.c:332 modules/process/mfm_field.c:281
+#: modules/process/mfm_findshift.c:230 modules/process/mfm_parallel.c:333
+#: modules/process/mfm_shift.c:170 modules/process/noise_synth.c:334
+#: modules/process/obj_synth.c:438 modules/process/pat_synth.c:385
+#: modules/process/phase_synth.c:205 modules/process/pid.c:197
+#: modules/process/polydistort.c:210 modules/process/polylevel.c:373
+#: modules/process/psdf_logphi.c:249 modules/process/rank.c:158
+#: modules/process/rotate.c:243 modules/process/scale.c:196
+#: modules/process/scars.c:317 modules/process/semsim.c:211
+#: modules/process/shade.c:210 modules/process/slope_dist.c:275
+#: modules/process/sphere-revolve.c:317 modules/process/straighten_path.c:248
+#: modules/process/tilt.c:161 modules/process/tip_model.c:167
+#: modules/process/unrotate.c:220 modules/process/volumize_layers.c:221
+#: modules/process/wave_synth.c:368 modules/process/wpour_mark.c:278
+#: modules/volume/volume_calibrate.c:370 modules/volume/volume_extract.c:324
+#: modules/volume/volume_kmeans.c:154 modules/volume/volume_kmedians.c:147
+#: modules/volume/volume_linestat.c:297 modules/volume/volume_slice.c:294
msgid "_Reset"
msgstr "_Reset"
-#: libgwydgets/gwy3dwindow.c:1142
+#: libgwydgets/gwy3dwindow.c:1141
msgid "X-axis"
msgstr "X-axis"
-#: libgwydgets/gwy3dwindow.c:1143
+#: libgwydgets/gwy3dwindow.c:1142
msgid "Y-axis"
msgstr "Y-axis"
-#: libgwydgets/gwy3dwindow.c:1144
+#: libgwydgets/gwy3dwindow.c:1143
msgid "Minimum z value"
msgstr "Minimum z-value"
-#: libgwydgets/gwy3dwindow.c:1145
+#: libgwydgets/gwy3dwindow.c:1144
msgid "Maximum z value"
msgstr "Maximum z-value"
-#: libgwydgets/gwy3dwindow.c:1168 modules/file/imgexport.c:3836
+#: libgwydgets/gwy3dwindow.c:1167 modules/file/imgexport.c:3806
msgid "_Label:"
msgstr "_Label:"
-#: libgwydgets/gwy3dwindow.c:1173
+#: libgwydgets/gwy3dwindow.c:1180
msgid "_Text:"
msgstr "_Text:"
-#: libgwydgets/gwy3dwindow.c:1193
+#: libgwydgets/gwy3dwindow.c:1185
msgid "Move label"
msgstr "Move label"
-#: libgwydgets/gwy3dwindow.c:1202
+#: libgwydgets/gwy3dwindow.c:1194
msgid "_Horizontally:"
msgstr "_Horizontally:"
-#: libgwydgets/gwy3dwindow.c:1212
+#: libgwydgets/gwy3dwindow.c:1204
msgid "_Vertically:"
msgstr "_Vertically:"
-#: libgwydgets/gwy3dwindow.c:1220
+#: libgwydgets/gwy3dwindow.c:1212
+msgid "A_ll labels have the same size"
+msgstr "A_ll labels have the same size"
+
+#: libgwydgets/gwy3dwindow.c:1223
msgid "Scale size _automatically"
msgstr "Scale size _automatically"
-#: libgwydgets/gwy3dwindow.c:1232 modules/tools/filter.c:290
+#: libgwydgets/gwy3dwindow.c:1235 modules/tools/filter.c:291
msgid "Si_ze:"
msgstr "Si_ze:"
-#: libgwydgets/gwy3dwindow.c:1232 modules/process/cwt.c:151
-#: modules/process/hough.c:212
-msgid "pixels"
-msgstr "pixels"
+#: libgwydgets/gwy3dwindow.c:1277
+msgid "Show false _colorbar"
+msgstr "Show false _colourbar"
+
+#: libgwydgets/gwy3dwindow.c:1286
+msgid "Reserve space for _colorbar"
+msgstr "Reserve space for _colourbar"
+
+#: libgwydgets/gwy3dwindow.c:1302 modules/process/lat_synth.c:651
+#: modules/process/obj_synth.c:542 modules/process/pat_synth.c:1458
+#: modules/process/phase_synth.c:279
+msgid "_Size:"
+msgstr "_Size:"
+
+#: libgwydgets/gwy3dwindow.c:1311
+msgid "_Vertical alignment:"
+msgstr "_Vertical alignment:"
-#: libgwydgets/gwy3dwindow.c:1726 libgwydgets/gwy3dwindow.c:1779
+#: libgwydgets/gwy3dwindow.c:1844 libgwydgets/gwy3dwindow.c:1897
msgid "S_witch to Lighting Mode"
msgstr "S_witch to Lighting Mode"
-#: libgwydgets/gwy3dwindow.c:1734 libgwydgets/gwy3dwindow.c:1756
+#: libgwydgets/gwy3dwindow.c:1852 libgwydgets/gwy3dwindow.c:1874
msgid "S_witch to Overlay Mode"
msgstr "S_witch to Overlay Mode"
-#: libgwydgets/gwy3dwindow.c:1748 libgwydgets/gwy3dwindow.c:1771
+#: libgwydgets/gwy3dwindow.c:1866 libgwydgets/gwy3dwindow.c:1889
msgid "S_witch to Color Gradient Mode"
msgstr "S_witch to Colour Gradient Mode"
-#: libgwydgets/gwy3dwindow.c:1787
+#: libgwydgets/gwy3dwindow.c:1905
msgid "T_oggle light"
msgstr "T_oggle light"
-#: libgwydgets/gwyaxisdialog.c:99
+#: libgwydgets/gwyaxisdialog.c:75
msgid "Axis Properties"
msgstr "Axis Properties"
-#: libgwydgets/gwyaxisdialog.c:101 libgwydgets/gwygraphlabeldialog.c:63
-msgid "Label Properties"
-msgstr "Label Properties"
-
-#: libgwydgets/gwyaxisdialog.c:184
+#: libgwydgets/gwyaxisdialog.c:88
msgid "Label Text"
msgstr "Label Text"
@@ -1082,7 +1150,7 @@ msgid "Hidden"
msgstr "Hidden"
#: libgwydgets/gwydgetenums.c:47 libgwydgets/gwygraphwindowmeasuredialog.c:572
-#: modules/file/imgexport.c:475 modules/tools/selectionmanager.c:274
+#: modules/file/imgexport.c:474 modules/tools/selectionmanager.c:274
msgid "Points"
msgstr "Points"
@@ -1090,7 +1158,7 @@ msgstr "Points"
msgid "Line + points"
msgstr "Line + points"
-#: libgwydgets/gwydgetutils.c:564
+#: libgwydgets/gwydgetutils.c:848
msgid "Change Mask Color"
msgstr "Change Mask Colour"
@@ -1099,7 +1167,7 @@ msgid "Quantity"
msgstr "Quantity"
#: libgwydgets/gwygrainvaluemenu.c:194 libgwydgets/gwygrainvaluemenu.c:207
-#: modules/process/curvature.c:753
+#: modules/process/curvature.c:750
msgid "Symbol"
msgstr "Symbol"
@@ -1119,137 +1187,141 @@ msgstr "Pre_v"
msgid "_Next"
msgstr "_Next"
-#: libgwydgets/gwygraphareadialog.c:127 modules/file/rawgraph.c:302
+#: libgwydgets/gwygraphareadialog.c:123 modules/file/rawgraph.c:302
msgid "Plot _style:"
msgstr "Plot _style:"
-#: libgwydgets/gwygraphareadialog.c:148
+#: libgwydgets/gwygraphareadialog.c:131
msgid "Pl_ot color:"
msgstr "Pl_ot colour:"
-#: libgwydgets/gwygraphareadialog.c:159
+#: libgwydgets/gwygraphareadialog.c:151
msgid "Point _type:"
msgstr "Point _type:"
-#: libgwydgets/gwygraphareadialog.c:165
+#: libgwydgets/gwygraphareadialog.c:157
msgid "_Point size:"
msgstr "_Point size:"
-#: libgwydgets/gwygraphareadialog.c:175
+#: libgwydgets/gwygraphareadialog.c:167
msgid "_Line type:"
msgstr "_Line type:"
-#: libgwydgets/gwygraphareadialog.c:181 modules/file/imgexport.c:3150
+#: libgwydgets/gwygraphareadialog.c:173 modules/file/imgexport.c:3154
msgid "Line t_hickness:"
msgstr "Line t_hickness:"
-#: libgwydgets/gwygraphareadialog.c:187
+#: libgwydgets/gwygraphareadialog.c:180
msgid "<b>Label Te_xt</b>"
msgstr "<b>Label Te_xt</b>"
-#: libgwydgets/gwygraphareadialog.c:404
+#: libgwydgets/gwygraphareadialog.c:397
msgid "Set Curve Color"
msgstr "Set Curve Colour"
-#: libgwydgets/gwygraphareadialog.c:556 modules/process/mask_morph.c:179
+#: libgwydgets/gwygraphareadialog.c:549 modules/process/mask_morph.c:178
msgid "Square"
msgstr "Square"
-#: libgwydgets/gwygraphareadialog.c:558 modules/process/mask_morph.c:180
+#: libgwydgets/gwygraphareadialog.c:551 modules/process/mask_morph.c:179
msgid "Diamond"
msgstr "Diamond"
-#: libgwydgets/gwygraphareadialog.c:559
+#: libgwydgets/gwygraphareadialog.c:552
msgid "Cross"
msgstr "Cross"
-#: libgwydgets/gwygraphareadialog.c:560
+#: libgwydgets/gwygraphareadialog.c:553
msgid "Diagonal cross"
msgstr "Diagonal cross"
-#: libgwydgets/gwygraphareadialog.c:561
+#: libgwydgets/gwygraphareadialog.c:554
msgid "Asterisk"
msgstr "Asterisk"
-#: libgwydgets/gwygraphareadialog.c:562
+#: libgwydgets/gwygraphareadialog.c:555
msgid "Star"
msgstr "Star"
-#: libgwydgets/gwygraphareadialog.c:563
+#: libgwydgets/gwygraphareadialog.c:556
msgid "Triangle up"
msgstr "Triangle up"
-#: libgwydgets/gwygraphareadialog.c:564
+#: libgwydgets/gwygraphareadialog.c:557
msgid "Triangle down"
msgstr "Triangle down"
-#: libgwydgets/gwygraphareadialog.c:565
+#: libgwydgets/gwygraphareadialog.c:558
msgid "Triangle left"
msgstr "Triangle left"
-#: libgwydgets/gwygraphareadialog.c:566
+#: libgwydgets/gwygraphareadialog.c:559
msgid "Triangle right"
msgstr "Triangle right"
-#: libgwydgets/gwygraphareadialog.c:567
+#: libgwydgets/gwygraphareadialog.c:560
msgid "Full square"
msgstr "Full square"
-#: libgwydgets/gwygraphareadialog.c:568 modules/process/mask_morph.c:177
+#: libgwydgets/gwygraphareadialog.c:561 modules/process/mask_morph.c:176
msgid "Disc"
msgstr "Disc"
-#: libgwydgets/gwygraphareadialog.c:569
+#: libgwydgets/gwygraphareadialog.c:562
msgid "Full diamond"
msgstr "Full diamond"
-#: libgwydgets/gwygraphareadialog.c:570
+#: libgwydgets/gwygraphareadialog.c:563
msgid "Full triangle up"
msgstr "Full triangle up"
-#: libgwydgets/gwygraphareadialog.c:571
+#: libgwydgets/gwygraphareadialog.c:564
msgid "Full triangle down"
msgstr "Full triangle down"
-#: libgwydgets/gwygraphareadialog.c:572
+#: libgwydgets/gwygraphareadialog.c:565
msgid "Full triangle left"
msgstr "Full triangle left"
-#: libgwydgets/gwygraphareadialog.c:573
+#: libgwydgets/gwygraphareadialog.c:566
msgid "Full triangle right"
msgstr "Full triangle right"
-#: libgwydgets/gwygraphareadialog.c:635
+#: libgwydgets/gwygraphareadialog.c:628
msgid "line-style|Solid"
msgstr "Solid"
-#: libgwydgets/gwygraphareadialog.c:636
+#: libgwydgets/gwygraphareadialog.c:629
msgid "line-style|Dash"
msgstr "Dash"
-#: libgwydgets/gwygraphcurves.c:451
+#: libgwydgets/gwygraphcurves.c:448
msgid "Description"
msgstr "Description"
-#: libgwydgets/gwygraphcurves.c:463
+#: libgwydgets/gwygraphcurves.c:460
msgid "Mode"
msgstr "Mode"
-#: libgwydgets/gwygraphcurves.c:481
+#: libgwydgets/gwygraphcurves.c:478
msgid "Color"
msgstr "Colour"
-#: libgwydgets/gwygraphcurves.c:494
+#: libgwydgets/gwygraphcurves.c:491
msgid "Point Type"
msgstr "Point Type"
-#: libgwydgets/gwygraphcurves.c:516
+#: libgwydgets/gwygraphcurves.c:513
msgid "Line Style"
msgstr "Line Style"
+#: libgwydgets/gwygraphlabeldialog.c:63
+msgid "Label Properties"
+msgstr "Label Properties"
+
#: libgwydgets/gwygraphlabeldialog.c:74
-msgid "Frame thickness:"
-msgstr "Frame thickness:"
+msgid "_Frame thickness:"
+msgstr "_Frame thickness:"
#: libgwydgets/gwygraphlabeldialog.c:81
msgid "_Reversed layout"
@@ -1259,12 +1331,12 @@ msgstr "_Reversed layout"
msgid "Abscissa"
msgstr "Abscissa"
-#: libgwydgets/gwygraphwindow.c:163 app/toolbox-editor.c:1002 app/toolbox.c:108
+#: libgwydgets/gwygraphwindow.c:163 app/toolbox-editor.c:1015 app/toolbox.c:113
msgid "Graph"
msgstr "Graph"
#: libgwydgets/gwygraphwindow.c:170 modules/file/hdrimage.cc:472
-#: modules/process/fit-shape.c:656
+#: modules/process/fit-shape.c:666 modules/process/psf.c:229
msgid "Data"
msgstr "Data"
@@ -1302,15 +1374,15 @@ msgstr "Points anywhere"
#: libgwydgets/gwygraphwindowmeasuredialog.c:394
#: libgwydgets/gwygraphwindowmeasuredialog.c:580 modules/tools/linestats.c:170
-#: modules/tools/roughness.c:516 modules/volume/volume_linestat.c:157
+#: modules/tools/roughness.c:517 modules/volume/volume_linestat.c:159
msgid "Length"
msgstr "Length"
#: libgwydgets/gwygraphwindowmeasuredialog.c:398
#: libgwydgets/gwygraphwindowmeasuredialog.c:588 app/gwyplaintool.c:1018
-#: modules/process/lat_synth.c:747 modules/process/obj_synth.c:569
-#: modules/process/pat_synth.c:846 modules/process/pat_synth.c:1148
-#: modules/process/pat_synth.c:1483
+#: modules/process/fibre_synth.c:534 modules/process/lat_synth.c:747
+#: modules/process/obj_synth.c:567 modules/process/pat_synth.c:847
+#: modules/process/pat_synth.c:1149 modules/process/pat_synth.c:1484
msgid "Height"
msgstr "Height"
@@ -1323,12 +1395,12 @@ msgid "Curve:"
msgstr "Curve:"
#: libgwydgets/gwygraphwindowmeasuredialog.c:553
-#: modules/process/linematch.c:828 modules/process/semsim.c:249
+#: modules/process/linematch.c:795 modules/process/semsim.c:249
#: modules/xyz/xyz_level.c:254
msgid "Method:"
msgstr "Method:"
-#: libgwydgets/gwygraphwindowmeasuredialog.c:592 modules/process/crosscor.c:354
+#: libgwydgets/gwygraphwindowmeasuredialog.c:592 modules/process/crosscor.c:331
msgid "Angle"
msgstr "Angle"
@@ -1338,7 +1410,7 @@ msgid "Preferred"
msgstr "Preferred"
#: libgwydgets/gwyoptionmenus.c:470 app/meta.c:410
-#: modules/file/imgexport.c:4160 modules/file/imgexport.c:4607
+#: modules/file/imgexport.c:4110 modules/file/imgexport.c:4555
#: modules/file/rawfile.c:995 modules/process/convolution_filter.c:538
#: modules/process/neural.c:418 modules/tools/selectionmanager.c:345
msgid "Name"
@@ -1377,7 +1449,7 @@ msgid "A_dd symbol"
msgstr "A_dd symbol"
#: libgwydgets/gwyscitext.c:274 modules/file/rawfile.c:553
-#: modules/xyz/xyz_drift.c:580 modules/xyz/xyz_raster.c:405
+#: modules/xyz/xyz_drift.c:580 modules/xyz/xyz_raster.c:419
msgid "Preview"
msgstr "Preview"
@@ -1395,87 +1467,81 @@ msgstr "No module can load this file type."
msgid "No module can save to this file type."
msgstr "No module can save to this file type."
-#: libgwymodule/gwymodulebrowser.c:67
+#: libgwymodule/gwymodulebrowser.c:66
msgid "Module Browser"
msgstr "Module Browser"
-#: libgwymodule/gwymodulebrowser.c:190
+#: libgwymodule/gwymodulebrowser.c:189
msgid "Module"
msgstr "Module"
-#: libgwymodule/gwymodulebrowser.c:190
+#: libgwymodule/gwymodulebrowser.c:189
msgid "Version"
msgstr "Version"
-#: libgwymodule/gwymodulebrowser.c:190
+#: libgwymodule/gwymodulebrowser.c:189
msgid "Author"
msgstr "Author"
-#: libgwymodule/gwymodulebrowser.c:246
+#: libgwymodule/gwymodulebrowser.c:244
msgid "Name-Version:"
msgstr "Name-Version:"
-#: libgwymodule/gwymodulebrowser.c:247 libgwymodule/gwymodulebrowser.c:270
+#: libgwymodule/gwymodulebrowser.c:245 libgwymodule/gwymodulebrowser.c:268
#: modules/process/grain_stat.c:186
msgid "File:"
msgstr "File:"
-#: libgwymodule/gwymodulebrowser.c:248
+#: libgwymodule/gwymodulebrowser.c:246
msgid "Registered functions:"
msgstr "Registered functions:"
-#: libgwymodule/gwymodulebrowser.c:249
+#: libgwymodule/gwymodulebrowser.c:247
msgid "Authors:"
msgstr "Authors:"
-#: libgwymodule/gwymodulebrowser.c:250
+#: libgwymodule/gwymodulebrowser.c:248
msgid "Copyright:"
msgstr "Copyright:"
-#: libgwymodule/gwymodulebrowser.c:251
+#: libgwymodule/gwymodulebrowser.c:249
msgid "Date:"
msgstr "Date:"
-#: libgwymodule/gwymodulebrowser.c:252
+#: libgwymodule/gwymodulebrowser.c:250
msgid "Description:"
msgstr "Description:"
-#: libgwymodule/gwymodulebrowser.c:269
+#: libgwymodule/gwymodulebrowser.c:267
msgid "Name:"
msgstr "Name:"
-#: libgwymodule/gwymodulebrowser.c:271
+#: libgwymodule/gwymodulebrowser.c:269
msgid "Failure:"
msgstr "Failure:"
-#: app/about.c:57
+#: app/about.c:58
#, c-format
msgid "About %s"
msgstr "About %s"
-#. TRANSLATORS: %s is replaced with date in ISO format YYYY-MM-DD.
-#: app/about.c:92
-#, c-format
-msgid "Released %s\n"
-msgstr "Released %s\n"
-
-#: app/about.c:93
+#: app/about.c:97
msgid "An SPM data visualization and analysis tool."
msgstr "An SPM data visualisation and analysis tool."
-#: app/about.c:101
+#: app/about.c:105
msgid "Report bugs to:"
msgstr "Report bugs to:"
-#: app/about.c:116
+#: app/about.c:120
msgid "Credits"
msgstr "Credits"
-#: app/about.c:133
+#: app/about.c:137
msgid "License"
msgstr "Licence"
-#: app/about.c:138
+#: app/about.c:142
#, c-format
msgid ""
"%s is free software; you can redistribute it and/or modify it under the "
@@ -1490,58 +1556,62 @@ msgstr ""
"version. For full licence text see file COPYING included in the source "
"tarball."
-#: app/about.c:160 modules/process/logistic.c:270
+#: app/about.c:164 modules/process/logistic.c:269
msgid "Features"
msgstr "Features"
-#: app/about.c:220
+#: app/about.c:224
msgid "Developers"
msgstr "Developers"
-#: app/about.c:221
+#: app/about.c:225
msgid "Translators"
msgstr "Translators"
-#: app/about.c:225
+#: app/about.c:229
msgid "Development is supported by the Czech Metrology Institute: "
msgstr "Development is supported by the Czech Metrology Institute: "
-#: app/about.c:253 app/about.c:256
+#: app/about.c:257 app/about.c:260
msgid "OpenGL 3D View"
msgstr "OpenGL 3D View"
-#: app/about.c:257 app/about.c:271 app/about.c:291
+#: app/about.c:261 app/about.c:266 app/about.c:286
msgid "not available\n"
msgstr "not available\n"
-#: app/about.c:262 app/about.c:265
-msgid "Fast Fourier Transform"
-msgstr "Fast Fourier Transform"
-
-#: app/about.c:266
-msgid "built-in SimpleFFT\n"
-msgstr "built-in SimpleFFT\n"
-
-#: app/about.c:274
+#: app/about.c:269
msgid "X11 protocol\n"
msgstr "X11 protocol\n"
-#: app/about.c:276
+#: app/about.c:271
msgid "Win32 protocol\n"
msgstr "Win32 protocol\n"
-#: app/about.c:278
+#: app/about.c:273
msgid "LibUnique\n"
msgstr "LibUnique\n"
-#: app/about.c:282
+#: app/about.c:277
msgid "Remote Control"
msgstr "Remote Control"
-#: app/about.c:286 app/about.c:290
+#: app/about.c:281 app/about.c:285
msgid "Python Scripting Interface"
msgstr "Python Scripting Interface"
+#. TRANSLATORS: %s is replaced with date in ISO format YYYY-MM-DD.
+#: app/about.c:311
+#, c-format
+msgid "Development version, built %s"
+msgstr "Development version, built %s"
+
+#. TRANSLATORS: %s is replaced with date in ISO format YYYY-MM-DD.
+#: app/about.c:328
+#, c-format
+msgid "Released %s"
+msgstr "Released %s"
+
#: app/app.c:301
#, c-format
msgid ""
@@ -1553,116 +1623,124 @@ msgstr ""
"%s\n"
"Really quit?"
-#: app/app.c:440
+#: app/app.c:442
msgid "Mask _Color..."
msgstr "Mask _Colour..."
-#: app/app.c:456 app/app.c:1725
+#: app/app.c:458 app/app.c:1754
msgid "Zoom _1:1"
msgstr "Zoom _1:1"
-#: app/app.c:460 app/app.c:1729 app/app.c:1957
+#: app/app.c:462 app/app.c:1758 app/app.c:1988
msgid "Metadata _Browser..."
msgstr "Metadata _Browser..."
-#: app/app.c:465 app/app.c:1734 app/app.c:1962
+#: app/app.c:467 app/app.c:1763 app/app.c:1993
msgid "View _Log..."
msgstr "View _Log..."
-#: app/app.c:649
+#: app/app.c:651
msgid "Pi_xelwise Square"
msgstr "Pi_xel-wise Square"
-#: app/app.c:659
+#: app/app.c:661
msgid "_Physically Square"
msgstr "_Physically Square"
-#: app/app.c:836
+#: app/app.c:842
+msgid "Set as Default"
+msgstr "Set as Default"
+
+#: app/app.c:844
+msgid "Set the current view setup as the default"
+msgstr "Set the current view setup as the default"
+
+#: app/app.c:854
msgid "verb|Save"
msgstr "Save"
-#: app/app.c:839 app/app.c:843
+#: app/app.c:857 app/app.c:861
msgid "Save 3D view to an image"
msgstr "Save 3D view to an image"
-#: app/app.c:849
-msgid "Set as Default"
-msgstr "Set as Default"
+#: app/app.c:869
+msgid "_Autocrop"
+msgstr "_Autocrop"
-#: app/app.c:851
-msgid "Set the current view setup as the default"
-msgstr "Set the current view setup as the default"
+#: app/app.c:873
+msgid "Remove white borders from exported image"
+msgstr "Remove white borders from exported image"
-#: app/app.c:940
+#: app/app.c:960
msgid "_Show mask"
msgstr "_Show mask"
-#: app/app.c:1106
+#: app/app.c:1172
#, c-format
msgid "Saving of 3D view to `%s' failed"
msgstr "Saving of 3D view to ‘%s’ failed"
-#: app/app.c:1150
+#: app/app.c:1222
msgid "Export 3D View"
msgstr "Export 3D View"
-#: app/app.c:1457
+#: app/app.c:1478
msgid "_Change Preview"
msgstr "_Change Preview"
-#: app/app.c:1583
+#: app/app.c:1606
msgid "Change Volume Data Preview"
msgstr "Change Volume Data Preview"
-#: app/app.c:1593
+#: app/app.c:1616
msgid "Preview quantity:"
msgstr "Preview quantity:"
-#: app/app.c:1603 modules/process/extend.c:267 modules/tools/linestats.c:165
+#: app/app.c:1626 modules/process/extend.c:267 modules/tools/linestats.c:165
#: modules/volume/volume_linestat.c:142
msgid "Mean"
msgstr "Average value"
-#: app/app.c:1604 modules/process/polydistort.c:255 modules/tools/filter.c:240
+#: app/app.c:1627 modules/process/polydistort.c:258 modules/tools/filter.c:241
#: modules/tools/icolorange.c:424 modules/tools/linestats.c:167
#: modules/volume/volume_linestat.c:144
msgid "Minimum"
msgstr "Minimum"
-#: app/app.c:1605 modules/process/col_synth.c:170 modules/tools/filter.c:241
+#: app/app.c:1628 modules/process/col_synth.c:170 modules/tools/filter.c:242
#: modules/tools/icolorange.c:435 modules/tools/linestats.c:168
#: modules/volume/volume_linestat.c:145
msgid "Maximum"
msgstr "Maximum"
-#: app/app.c:1606
+#: app/app.c:1629 modules/volume/volume_linestat.c:146
msgid "Min. position"
msgstr "Min. position"
-#: app/app.c:1607
+#: app/app.c:1630 modules/volume/volume_linestat.c:147
msgid "Max. position"
msgstr "Max. position"
-#: app/app.c:1608 modules/process/bdep_synth.c:134
-#: modules/process/col_synth.c:171 modules/process/scars.c:346
-#: modules/process/scars.c:353 modules/process/threshold.c:341
+#: app/app.c:1631 modules/process/bdep_synth.c:134
+#: modules/process/col_synth.c:171 modules/process/scars.c:369
+#: modules/process/scars.c:377 modules/process/threshold.c:336
msgid "RMS"
msgstr "RMS"
-#: app/app.c:1609 modules/file/asciiexport.c:187 modules/file/gxyzffile.c:393
-#: modules/file/xyzexport.c:233 modules/file/xyzexport.c:302
+#: app/app.c:1632 modules/file/asciiexport.c:187 modules/file/gxyzffile.c:393
+#: modules/file/xyzexport.c:236 modules/file/xyzexport.c:305
msgid "Channel:"
msgstr "Channel:"
-#: app/app.c:1610
+#: app/app.c:1633
msgid "Section:"
msgstr "Section:"
-#: app/app.c:1861
+#: app/app.c:1890
msgid "_Update Preview"
msgstr "_Update Preview"
-#: app/app.c:1867
+#: app/app.c:1896
msgid "_Density Map"
msgstr "_Density Map"
@@ -1681,12 +1759,12 @@ msgstr "Unknown volume %d"
msgid "Unknown XYZ %d"
msgstr "Unknown XYZ %d"
-#: app/data-browser-aux.c:2795
+#: app/data-browser-aux.c:2839
#, c-format
msgid "Z levels: %d, Z unit: %s"
msgstr "Z levels: %d, Z unit: %s"
-#: app/data-browser-aux.c:2821
+#: app/data-browser-aux.c:2865
#, c-format
msgid "Points: %d"
msgstr "Points: %d"
@@ -1716,10 +1794,10 @@ msgid "Close file"
msgstr "Close file"
#: app/data-browser.c:5582
-msgid "Channels"
-msgstr "Channels"
+msgid "Images"
+msgstr "Images"
-#: app/data-browser.c:5596 modules/volume/volume_extract.c:444
+#: app/data-browser.c:5596 modules/volume/volume_extract.c:431
msgid "Graphs"
msgstr "Graphs"
@@ -1775,52 +1853,52 @@ msgstr ""
"\n"
"%s"
-#: app/file.c:285
+#: app/file.c:292
#, c-format
msgid "Opening of `%s' failed"
msgstr "Opening of ‘%s’ failed"
-#: app/file.c:291 app/file.c:526
+#: app/file.c:298 app/file.c:533
#, c-format
msgid "Full file path: %s."
msgstr "Full file path: %s."
-#: app/file.c:294
+#: app/file.c:301
#, c-format
msgid "Loaded using: %s."
msgstr "Loaded using: %s."
-#: app/file.c:380
+#: app/file.c:387
msgid "Merge File"
msgstr "Merge File"
-#: app/file.c:382 app/gwyappfilechooser.c:221
+#: app/file.c:389 app/gwyappfilechooser.c:226
msgid "Open File"
msgstr "Open File"
-#: app/file.c:520 app/gwymoduleutils.c:192
+#: app/file.c:527 app/gwymoduleutils.c:192
#, c-format
msgid "Saving of `%s' failed"
msgstr "Saving of ’%s‘ failed"
-#: app/file.c:529
+#: app/file.c:536
#, c-format
msgid "Saved using: %s."
msgstr "Saved using: %s."
-#: app/file.c:689
+#: app/file.c:696
#, c-format
msgid "File `%s' already exists. Replace?"
msgstr "File ‘%s’ already exists. Replace?"
-#: app/file.c:693
+#: app/file.c:700
#, c-format
msgid ""
"The file already exists in `%s'. Replacing it will overwrite its contents."
msgstr ""
"The file already exists in ‘%s’. Replacing it will overwrite its contents."
-#: app/file.c:696
+#: app/file.c:703
msgid "Replace File?"
msgstr "Replace File?"
@@ -1844,11 +1922,11 @@ msgstr "Close file list"
msgid "Open selected file"
msgstr "Open selected file"
-#: app/filelist.c:566 app/gwyappfilechooser.c:583
+#: app/filelist.c:566 app/gwyappfilechooser.c:592
msgid "_Filter:"
msgstr "_Filter:"
-#: app/filelist.c:604 app/gwyappfilechooser.c:619
+#: app/filelist.c:604 app/gwyappfilechooser.c:628
msgid "Case _sensitive"
msgstr "Case _sensitive"
@@ -1898,97 +1976,97 @@ msgstr "_Curve"
msgid "_Snap to control points"
msgstr "_Snap to control points"
-#: app/gwyappfilechooser.c:226
+#: app/gwyappfilechooser.c:231
msgid "Save File"
msgstr "Save File"
-#: app/gwyappfilechooser.c:380
+#: app/gwyappfilechooser.c:389
#, c-format
msgid "File _type: %s"
msgstr "File _type: %s"
-#: app/gwyappfilechooser.c:387
+#: app/gwyappfilechooser.c:396
msgid "Only loadable shown"
msgstr "Only loadable shown"
-#: app/gwyappfilechooser.c:391
+#: app/gwyappfilechooser.c:400
#, c-format
msgid "Filter: %s"
msgstr "Filter: %s"
-#: app/gwyappfilechooser.c:455
+#: app/gwyappfilechooser.c:464
msgid "Automatic by extension"
msgstr "Automatic by extension"
-#: app/gwyappfilechooser.c:464
+#: app/gwyappfilechooser.c:473
msgid "Automatically detected"
msgstr "Automatically detected"
-#: app/gwyappfilechooser.c:561
+#: app/gwyappfilechooser.c:570
msgid "Show only loadable files"
msgstr "Show only loadable files"
-#: app/gwyappfilechooser.c:844
+#: app/gwyappfilechooser.c:855
msgid "Plane-level previewed data"
msgstr "Plane-level previewed data"
-#: app/gwyappfilechooser.c:860
+#: app/gwyappfilechooser.c:871
msgid "Row-level previewed data"
msgstr "Row-level previewed data"
-#: app/gwyappfilechooser.c:969
+#: app/gwyappfilechooser.c:987
+msgid "File too large for preview"
+msgstr "File is too large for preview"
+
+#: app/gwyappfilechooser.c:988
msgid "…"
msgstr "…"
-#: app/gwyappfilechooser.c:1331
+#: app/gwyappfilechooser.c:1352
msgid "Cannot preview"
msgstr "Cannot preview"
-#: app/gwyddion.c:143
+#: app/gwyddion.c:147
msgid "Loading document history"
msgstr "Loading document history"
-#: app/gwyddion.c:148
+#: app/gwyddion.c:152
msgid "Registering "
msgstr "Registering "
-#: app/gwyddion.c:149
+#: app/gwyddion.c:153
msgid "stock items"
msgstr "stock items"
-#: app/gwyddion.c:153
+#: app/gwyddion.c:157
msgid "color gradients"
msgstr "colour gradients"
-#: app/gwyddion.c:155
+#: app/gwyddion.c:159
msgid "GL materials"
msgstr "GL materials"
-#: app/gwyddion.c:157
+#: app/gwyddion.c:161
msgid "grain quantities"
msgstr "grain quantities"
-#: app/gwyddion.c:159
+#: app/gwyddion.c:163
msgid "calibrations"
msgstr "calibrations"
-#: app/gwyddion.c:164
+#: app/gwyddion.c:168
msgid "Loading settings"
msgstr "Loading settings"
-#: app/gwyddion.c:171
+#: app/gwyddion.c:175
msgid "Registering modules"
msgstr "Registering modules"
-#: app/gwyddion.c:193
-msgid "Initializing GUI"
-msgstr "Initialising GUI"
-
-#: app/gwyddion.c:439
+#: app/gwyddion.c:464
msgid "Could not read settings."
msgstr "Could not read settings."
-#: app/gwyddion.c:442
+#: app/gwyddion.c:467
#, c-format
msgid ""
"Settings file `%s' cannot be read: %s\n"
@@ -2001,48 +2079,79 @@ msgstr ""
"To prevent loss of saved settings no attempt to update it will be made until "
"it is repaired or removed."
-#: app/gwymoduleutils-file.c:542
+#: app/gwyddion.c:505
+#, c-format
+msgid "Many modules (%u) failed to register."
+msgstr "Many modules (%u) failed to register."
+
+#: app/gwyddion.c:510
+#, c-format
+msgid ""
+"Most likely Gwyddion was not upgraded correctly. Instead, one installation "
+"was just overwritten with another, and now it is a mess.\n"
+"\n"
+"Please remove completely the module directory\n"
+"\n"
+"%s\n"
+"\n"
+"and reinstall Gwyddion.\n"
+"\n"
+"See Info → Module Browser for specific errors."
+msgstr ""
+"Most likely Gwyddion was not upgraded correctly. Instead, one installation "
+"was just overwritten with another, and now it is a mess.\n"
+"\n"
+"Please remove completely the module directory\n"
+"\n"
+"%s\n"
+"\n"
+"and reinstall Gwyddion.\n"
+"\n"
+"See Info → Module Browser for specific errors."
+
+#: app/gwymoduleutils-file.c:536
#, c-format
msgid "Section %s ended at line %u but it has never started."
msgstr "Section %s ended at line %u but it has never started."
-#: app/gwymoduleutils-file.c:550
+#: app/gwymoduleutils-file.c:544
#, c-format
msgid "Section %s ended at line %u instead of %s."
msgstr "Section %s ended at line %u instead of %s."
-#: app/gwymoduleutils-file.c:587
+#: app/gwymoduleutils-file.c:581
#, c-format
msgid "Section %s started at line %u before %s ended."
msgstr "Section %s started at line %u before %s ended."
-#: app/gwymoduleutils-file.c:593
+#: app/gwymoduleutils-file.c:587
#, c-format
msgid "Empty section name at header line %u."
msgstr "Empty section name at header line %u."
-#: app/gwymoduleutils-file.c:628
+#: app/gwymoduleutils-file.c:622
#, c-format
msgid "Header line %u lacks prefix %s."
msgstr "Header line %u lacks prefix %s."
-#: app/gwymoduleutils-file.c:653
+#: app/gwymoduleutils-file.c:647
#, c-format
msgid "Header line %u lacks key-value separator."
msgstr "Header line %u lacks key-value separator."
-#: app/gwymoduleutils-file.c:661
+#: app/gwymoduleutils-file.c:655
#, c-format
msgid "Key at header line %u is empty."
msgstr "Key at header line %u is empty."
-#: app/gwymoduleutils-file.c:688
+#: app/gwymoduleutils-file.c:682
#, c-format
msgid "Header suddenly ended at line %u; end of header marker is missing"
msgstr "Header has suddenly ended at line %u; end of header marker is missing"
#: app/gwymoduleutils.c:197 app/settings.c:131 app/settings.c:142
#: app/toolbox-spec.c:536 modules/file/err.h:62
+#: modules/pygwy/pygwy-console.c:528
#, c-format
msgid "Cannot write to file: %s."
msgstr "Cannot write to file: %s."
@@ -2071,8 +2180,9 @@ msgstr "Origin"
#: app/gwyplaintool.c:1011 modules/file/rawfile.c:997
#: modules/process/convolution_filter.c:349
-#: modules/process/convolution_filter.c:553 modules/process/neural.c:419
-#: modules/process/obj_synth.c:538 modules/process/pat_synth.c:1449
+#: modules/process/convolution_filter.c:553 modules/process/fibre_synth.c:520
+#: modules/process/neural.c:419 modules/process/obj_synth.c:536
+#: modules/process/pat_synth.c:1450
msgid "Size"
msgstr "Size"
@@ -2129,7 +2239,7 @@ msgstr "Clea_r"
msgid "_Close"
msgstr "_Close"
-#: app/log.c:615 modules/file/imgexport.c:4168 modules/file/rawfile.c:996
+#: app/log.c:615 modules/file/imgexport.c:4118 modules/file/rawfile.c:996
msgid "Type"
msgstr "Type"
@@ -2137,8 +2247,8 @@ msgstr "Type"
msgid "Function"
msgstr "Function"
-#: app/log.c:617 modules/file/imgexport.c:3117 modules/process/fit-shape.c:465
-#: modules/process/neural.c:610 modules/tools/stats.c:425
+#: app/log.c:617 modules/file/imgexport.c:3128 modules/process/fit-shape.c:466
+#: modules/process/neural.c:614 modules/tools/stats.c:423
msgid "Parameters"
msgstr "Parameters"
@@ -2150,39 +2260,39 @@ msgstr "Time"
msgid "Export Log"
msgstr "Export Log"
-#: app/menu.c:556 app/toolbox.c:581
+#: app/menu.c:555 app/toolbox.c:595
msgid "_Data Process"
msgstr "_Data Process"
-#: app/menu.c:598 app/toolbox.c:584
+#: app/menu.c:597 app/toolbox.c:598
msgid "_Graph"
msgstr "_Graph"
-#: app/menu.c:641 app/toolbox.c:587
+#: app/menu.c:640 app/toolbox.c:601
msgid "_Volume Data"
msgstr "_Volume Data"
-#: app/menu.c:684 app/toolbox.c:590
+#: app/menu.c:683 app/toolbox.c:604
msgid "_XYZ Data"
msgstr "_XYZ Data"
-#: app/menu.c:715
+#: app/menu.c:714
msgid "Re-show Last"
msgstr "Re-show Last"
-#: app/menu.c:730
+#: app/menu.c:729
msgid "Repeat Last"
msgstr "Repeat Last"
-#: app/menu.c:858
+#: app/menu.c:857
msgid "Repeat"
msgstr "Repeat"
-#: app/menu.c:864
+#: app/menu.c:863
msgid "Re-show"
msgstr "Re-show"
-#: app/menu.c:1186
+#: app/menu.c:1185
msgid "_Document history"
msgstr "_Document history"
@@ -2190,8 +2300,8 @@ msgstr "_Document history"
msgid "_New"
msgstr "_New"
-#: app/meta.c:235 modules/file/imgexport.c:4672 modules/file/rawfile.c:1058
-#: modules/process/neural.c:711 modules/tools/selectionmanager.c:405
+#: app/meta.c:235 modules/file/imgexport.c:4620 modules/file/rawfile.c:1058
+#: modules/process/neural.c:718 modules/tools/selectionmanager.c:405
msgid "_Delete"
msgstr "_Delete"
@@ -2265,11 +2375,11 @@ msgstr "Cannot create user ui directory %s: %s"
msgid "Cannot create user module directory %s: %s"
msgstr "Cannot create user module directory %s: %s"
-#: app/splash.c:832
+#: app/splash.c:1260
msgid "Starting "
msgstr "Starting "
-#: app/splash.c:878
+#: app/splash.c:1313
msgid " is free software released under GNU GPL."
msgstr " is free software released under GNU GPL."
@@ -2786,124 +2896,125 @@ msgstr "_Next Tip"
msgid "_Show tips at startup"
msgstr "_Show tips at startup"
-#: app/toolbox-editor.c:212
+#: app/toolbox-editor.c:213
msgid "Toolbox Editor"
msgstr "Toolbox Editor"
-#: app/toolbox-editor.c:257
+#: app/toolbox-editor.c:258
msgid "_New Item"
msgstr "_New Item"
-#: app/toolbox-editor.c:262
+#: app/toolbox-editor.c:263
msgid "_New Group"
msgstr "_New Group"
-#: app/toolbox-editor.c:268 app/toolbox.c:577
+#: app/toolbox-editor.c:269 app/toolbox.c:591
msgid "_Edit"
msgstr "_Edit"
-#: app/toolbox-editor.c:273 modules/process/fft_filter_2d.c:499
-#: modules/tools/maskedit.c:548 modules/volume/volume_zcal.c:173
+#: app/toolbox-editor.c:274 modules/process/fft_filter_2d.c:499
+#: modules/tools/maskedit.c:554 modules/volume/volume_zcal.c:173
msgid "_Remove"
msgstr "_Remove"
-#: app/toolbox-editor.c:278
+#: app/toolbox-editor.c:279
msgid "Move _Up"
msgstr "Move _Up"
-#: app/toolbox-editor.c:283
+#: app/toolbox-editor.c:284
msgid "Move _Down"
msgstr "Move _Down"
-#: app/toolbox-editor.c:292 modules/file/hdrimage.cc:2304
-#: modules/file/imgexport.c:3101 modules/file/pixmap.c:872
+#: app/toolbox-editor.c:293 modules/file/hdrimage.cc:2304
+#: modules/file/imgexport.c:3114 modules/file/pixmap.c:872
#: modules/file/rawfile.c:658 modules/process/crosscor.c:252
-#: modules/process/dimensions.h:473 modules/process/tip_blind.c:333
+#: modules/process/dimensions.h:455 modules/process/fibre_synth.c:526
+#: modules/process/tip_blind.c:334
msgid "_Width:"
msgstr "_Width:"
-#: app/toolbox-editor.c:774
+#: app/toolbox-editor.c:787
msgid "Toolbox Group"
msgstr "Toolbox Group"
-#: app/toolbox-editor.c:791 modules/file/rawgraph.c:267
+#: app/toolbox-editor.c:804 modules/file/rawgraph.c:267
msgid "_Title:"
msgstr "_Title:"
-#: app/toolbox-editor.c:805
+#: app/toolbox-editor.c:818
msgid "_Id:"
msgstr "_Id:"
-#: app/toolbox-editor.c:818
+#: app/toolbox-editor.c:831
msgid "_Suggest"
msgstr "_Suggest"
-#: app/toolbox-editor.c:824
+#: app/toolbox-editor.c:837
msgid "Trans_latable title"
msgstr "Trans_latable title"
-#: app/toolbox-editor.c:874
+#: app/toolbox-editor.c:887
msgid "Group id is not a valid identifier"
msgstr "Group id is not a valid identifier"
-#: app/toolbox-editor.c:882
+#: app/toolbox-editor.c:895
msgid "Group id is not unique"
msgstr "Group id is not unique"
-#: app/toolbox-editor.c:971
+#: app/toolbox-editor.c:984
msgid "Toolbox Item"
msgstr "Toolbox Item"
-#: app/toolbox-editor.c:992 modules/process/coerce.c:331
+#: app/toolbox-editor.c:1005 modules/process/coerce.c:331
#: modules/tools/filter.c:284
msgid "_Type:"
msgstr "_Type:"
-#: app/toolbox-editor.c:999
+#: app/toolbox-editor.c:1012
msgid "Placeholder"
msgstr "Placeholder"
-#: app/toolbox-editor.c:1000
+#: app/toolbox-editor.c:1013
msgid "Builtin"
msgstr "Built-in"
-#: app/toolbox-editor.c:1001 app/toolbox.c:107
+#: app/toolbox-editor.c:1014 app/toolbox.c:112
msgid "Data Process"
msgstr "Data Process"
-#: app/toolbox-editor.c:1003
+#: app/toolbox-editor.c:1016
msgid "Volume Data"
msgstr "Volume Data"
-#: app/toolbox-editor.c:1004
+#: app/toolbox-editor.c:1017
msgid "XYZ Data"
msgstr "XYZ Data"
-#: app/toolbox-editor.c:1005
+#: app/toolbox-editor.c:1018
msgid "Tool"
msgstr "Tool"
-#: app/toolbox-editor.c:1012
+#: app/toolbox-editor.c:1025 modules/tools/profile.c:483
msgid "_Mode:"
msgstr "_Mode:"
-#: app/toolbox-editor.c:1019 app/toolbox-editor.c:1038
+#: app/toolbox-editor.c:1032 app/toolbox-editor.c:1051
msgid "Default"
msgstr "Default"
-#: app/toolbox-editor.c:1020
+#: app/toolbox-editor.c:1033
msgid "Interactive"
msgstr "Interactive"
-#: app/toolbox-editor.c:1021
+#: app/toolbox-editor.c:1034
msgid "Non-interactive"
msgstr "Non-interactive"
-#: app/toolbox-editor.c:1029
+#: app/toolbox-editor.c:1042
msgid "Use _icon from:"
msgstr "Use _icon from:"
-#: app/toolbox-editor.c:1063
+#: app/toolbox-editor.c:1076
msgid "Functions"
msgstr "Functions"
@@ -2919,143 +3030,159 @@ msgstr "remaining tools"
msgid "All tools not placed explicitly go here."
msgstr "All tools not placed explicitly go here."
-#: app/toolbox.c:106
+#: app/toolbox.c:111
msgid "View"
msgstr "View"
-#: app/toolbox.c:109
+#: app/toolbox.c:114
msgid "Tools"
msgstr "Tools"
-#: app/toolbox.c:575
+#: app/toolbox.c:589
msgid "_File"
msgstr "_File"
-#: app/toolbox.c:593
+#: app/toolbox.c:607
msgid "_Info"
msgstr "_Info"
-#: app/toolbox.c:663
+#: app/toolbox.c:696
msgid "Display a 3D view of data"
msgstr "Display a 3D view of data"
-#: app/toolbox.c:667
+#: app/toolbox.c:700
+msgid "Undo"
+msgstr "Undo"
+
+#: app/toolbox.c:700
+msgid "Undo last action"
+msgstr "Undo last action"
+
+#: app/toolbox.c:704
+msgid "Redo"
+msgstr "Redo"
+
+#: app/toolbox.c:704
+msgid "Redo again last undone action"
+msgstr "Redo again last undone action"
+
+#: app/toolbox.c:708
msgid "Zoom in"
msgstr "Zoom in"
-#: app/toolbox.c:671
+#: app/toolbox.c:712
msgid "Zoom out"
msgstr "Zoom out"
-#: app/toolbox.c:675
+#: app/toolbox.c:716
msgid "Zoom 1:1"
msgstr "Zoom 1:1"
-#: app/toolbox.c:722
+#: app/toolbox.c:781
msgid "/Show _Data Browser"
msgstr "/Show _Data Browser"
-#: app/toolbox.c:730
+#: app/toolbox.c:789
msgid "/Module _Browser"
msgstr "/Module _Browser"
-#: app/toolbox.c:738
+#: app/toolbox.c:797
msgid "/Program _Messages"
msgstr "/Programme _Messages"
-#: app/toolbox.c:753
+#: app/toolbox.c:812
msgid "/_User Guide"
msgstr "/_User Guide"
-#: app/toolbox.c:761
+#: app/toolbox.c:820
msgid "/_Tip of the Day"
msgstr "/_Tip of the Day"
-#: app/toolbox.c:769
+#: app/toolbox.c:828
msgid "/_About Gwyddion"
msgstr "/_About Gwyddion"
-#: app/toolbox.c:806
+#: app/toolbox.c:865
msgid "/_Open..."
msgstr "/_Open..."
-#: app/toolbox.c:814
+#: app/toolbox.c:873
msgid "/_Merge..."
msgstr "/_Merge..."
-#: app/toolbox.c:822
+#: app/toolbox.c:881
msgid "/Open _Recent"
msgstr "/Open _Recent"
-#: app/toolbox.c:830
+#: app/toolbox.c:889
msgid "/_Save"
msgstr "/_Save"
-#: app/toolbox.c:838
+#: app/toolbox.c:897
msgid "/Save _As..."
msgstr "/Save _As..."
-#: app/toolbox.c:846
+#: app/toolbox.c:905
msgid "/_Close"
msgstr "/_Close"
-#: app/toolbox.c:854
+#: app/toolbox.c:913
msgid "/Remo_ve All Logs"
msgstr "/Remo_ve All Logs"
-#: app/toolbox.c:870
+#: app/toolbox.c:929
msgid "/_Quit"
msgstr "/_Quit"
-#: app/toolbox.c:910
+#: app/toolbox.c:969
msgid "/_Undo"
msgstr "/_Undo"
-#: app/toolbox.c:918
+#: app/toolbox.c:977
msgid "/_Redo"
msgstr "/_Redo"
-#: app/toolbox.c:934
+#: app/toolbox.c:993
msgid "/Default Mask _Color..."
msgstr "/Default Mask _Colour..."
-#: app/toolbox.c:942
+#: app/toolbox.c:1001
msgid "/Color _Gradients..."
msgstr "/Colour _Gradients..."
-#: app/toolbox.c:950
+#: app/toolbox.c:1009
msgid "/G_L Materials..."
msgstr "/G_L Materials..."
-#: app/toolbox.c:958
+#: app/toolbox.c:1017
msgid "/_Toolbox..."
msgstr "/_Toolbox..."
-#: app/toolbox.c:966
+#: app/toolbox.c:1025
msgid "/_Keyboard Shortcuts"
msgstr "/_Keyboard Shortcuts"
-#: app/toolbox.c:974
+#: app/toolbox.c:1033
msgid "/_Logging Enabled"
msgstr "/_Logging Enabled"
-#: app/toolbox.c:1083
+#: app/toolbox.c:1142
msgid "Program Messages"
msgstr "Programme Messages"
-#: app/toolbox.c:1320
+#: app/toolbox.c:1379
msgid "Change Default Mask Color"
msgstr "Change Default Mask Colour"
-#: app/toolbox.c:1348
+#: app/toolbox.c:1407
msgid "OpenGL 3D graphics not available"
msgstr "OpenGL 3D graphics not available"
-#: app/toolbox.c:1353
+#: app/toolbox.c:1412
msgid "OpenGL was disabled with a command-line option."
msgstr "OpenGL was disabled with a command-line option."
-#: app/toolbox.c:1361
+#: app/toolbox.c:1420
msgid ""
"Initialization of OpenGL failed. Check output of <tt>glxinfo</tt> and "
"warning messages printed to console during Gwyddion startup."
@@ -3063,7 +3190,7 @@ msgstr ""
"Initialisation of OpenGL failed. Check output of <tt>glxinfo</tt> and "
"warning messages printed to console during Gwyddion start-up."
-#: app/toolbox.c:1368
+#: app/toolbox.c:1427
msgid "This version of Gwyddion was built without OpenGL support."
msgstr "This version of Gwyddion was built without OpenGL support."
@@ -3139,7 +3266,7 @@ msgstr "Object has several references"
msgid "Secondary data item has no primary data"
msgstr "Secondary data item has no primary data"
-#: app/wait.c:106
+#: app/wait.c:114
msgid "Please wait"
msgstr "Please wait"
@@ -3156,11 +3283,11 @@ msgstr "Accurex II text files (.txt)"
msgid "File header cannot be converted from ISO-8859-1 character set: %s"
msgstr "File header cannot be converted from ISO-8859-1 character set: %s"
-#: modules/file/aistfile.c:127
+#: modules/file/aistfile.c:123
msgid "Imports AIST-NT data files."
msgstr "Imports AIST-NT data files."
-#: modules/file/aistfile.c:140
+#: modules/file/aistfile.c:136
msgid "AIST-NT files (.aist)"
msgstr "AIST-NT files (.aist)"
@@ -3207,7 +3334,8 @@ msgstr "Header tag ‘%s’ value is not nul-padded."
#: modules/file/alicona.c:665 modules/file/gdeffile.c:175
#: modules/file/gdeffile.c:199 modules/file/gsffile.c:159
-#: modules/file/gxyzffile.c:199 modules/file/iso28600.c:1038
+#: modules/file/gxyzffile.c:199 modules/file/iso28600.c:1174
+#: modules/file/microprof.c:361 modules/file/microprof.c:375
#: modules/file/pt3file.c:489 modules/file/pt3file.c:591
msgid "File header is truncated."
msgstr "File header is truncated."
@@ -3220,11 +3348,11 @@ msgstr "Comment lacks CRLF termination."
msgid "Comment is not nul-terminated."
msgstr "Comment is not nul-terminated."
-#: modules/file/ambfile.c:84
+#: modules/file/ambfile.c:83
msgid "Imports Ambios AMB data files."
msgstr "Imports Ambios AMB data files."
-#: modules/file/ambfile.c:97
+#: modules/file/ambfile.c:96
msgid "Ambios amb files (.amb)"
msgstr "Ambios amb files (.amb)"
@@ -3256,11 +3384,11 @@ msgstr "FileDescEnd has no corresponding FileDescBegin."
msgid "FileDescBegin has no corresponding FileDescEnd."
msgstr "FileDescBegin has no corresponding FileDescEnd."
-#: modules/file/apedaxfile.c:259
+#: modules/file/apedaxfile.c:261
msgid "Imports A.P.E. Research DAX data files."
msgstr "Imports A.P.E. Research DAX data files."
-#: modules/file/apedaxfile.c:274
+#: modules/file/apedaxfile.c:276
msgid "A.P.E. Research DAX Files (.dax) and APDT File (.apdt)"
msgstr "A.P.E. Research DAX Files (.dax) and APDT File (.apdt)"
@@ -3288,7 +3416,7 @@ msgstr "Width:"
msgid "Height:"
msgstr "Height:"
-#: modules/file/asciiexport.c:220 modules/file/xyzexport.c:248
+#: modules/file/asciiexport.c:220 modules/file/xyzexport.c:251
msgid "Value units:"
msgstr "Value units:"
@@ -3297,30 +3425,30 @@ msgid "Export Text"
msgstr "Export Text"
#: modules/file/asciiexport.c:275 modules/file/gxyzffile.c:402
-#: modules/file/imgexport.c:3565 modules/file/imgexport.c:4203
-#: modules/file/rawfile.c:758 modules/file/xyzexport.c:311
-#: modules/process/calibrate.c:607 modules/process/coerce.c:364
-#: modules/process/col_synth.c:516 modules/process/correct_affine.c:470
-#: modules/process/extend.c:259 modules/process/fft_filter_1d.c:261
-#: modules/process/grain_dist.c:306 modules/process/grain_edge.c:255
-#: modules/process/grain_mark.c:338 modules/process/grain_wshed.c:252
-#: modules/process/linematch.c:852 modules/process/mark_disconn.c:279
-#: modules/process/slope_dist.c:367 modules/process/tip_blind.c:357
+#: modules/file/imgexport.c:3532 modules/file/imgexport.c:4151
+#: modules/file/rawfile.c:758 modules/file/xyzexport.c:314
+#: modules/process/calibrate.c:561 modules/process/coerce.c:363
+#: modules/process/col_synth.c:516 modules/process/correct_affine.c:520
+#: modules/process/extend.c:259 modules/process/fft_filter_1d.c:263
+#: modules/process/grain_dist.c:307 modules/process/grain_edge.c:254
+#: modules/process/grain_mark.c:335 modules/process/grain_wshed.c:256
+#: modules/process/linematch.c:819 modules/process/mark_disconn.c:280
+#: modules/process/slope_dist.c:359 modules/process/tip_blind.c:360
#: modules/process/wpour_mark.c:354 modules/tools/spotremove.c:322
-#: modules/tools/stats.c:402 modules/xyz/xyz_raster.c:628
+#: modules/tools/stats.c:401 modules/xyz/xyz_raster.c:597
msgid "Options"
msgstr "Options"
-#: modules/file/asciiexport.c:278 modules/file/xyzexport.c:314
+#: modules/file/asciiexport.c:278 modules/file/xyzexport.c:317
msgid "Use _dot as decimal separator"
msgstr "Use _dot as decimal separator"
-#: modules/file/asciiexport.c:285 modules/file/xyzexport.c:321
-#: modules/process/grain_dist.c:317
+#: modules/file/asciiexport.c:285 modules/file/xyzexport.c:324
+#: modules/process/grain_dist.c:318
msgid "Add _informational comment header"
msgstr "Add _informational comment header"
-#: modules/file/asciiexport.c:294 modules/file/xyzexport.c:330
+#: modules/file/asciiexport.c:294 modules/file/xyzexport.c:333
msgid "_Precision:"
msgstr "_Precision:"
@@ -3340,20 +3468,20 @@ msgstr "Imports Attocube Systems ASC files."
msgid "Attocube ASCII files (.asc)"
msgstr "Attocube ASCII files (.asc)"
-#: modules/file/bcrfile.c:146
+#: modules/file/bcrfile.c:141
msgid "Imports Image Metrology BCR data files."
msgstr "Imports Image Metrology BCR data files."
-#: modules/file/bcrfile.c:159
+#: modules/file/bcrfile.c:154
msgid "BCR files (.bcr, .bcrf)"
msgstr "BCR files (.bcr, .bcrf)"
-#: modules/file/bcrfile.c:238
+#: modules/file/bcrfile.c:233
#, c-format
msgid "File header is not convertible from UTF-16: %s"
msgstr "File header is not convertible from UTF-16: %s"
-#: modules/file/bcrfile.c:351
+#: modules/file/bcrfile.c:346
#, c-format
msgid "Unknown file type header: `%s'."
msgstr "Unknown file type header: `%s'."
@@ -3388,7 +3516,7 @@ msgid "Burleigh exported data (.txt, .bin)"
msgstr "Burleigh exported data (.txt, .bin)"
#: modules/file/burleigh_exp.c:226 modules/file/burleigh_exp.c:267
-#: modules/file/nanoscope.c:1605 modules/file/omicron.c:416
+#: modules/file/nanoscope.c:1612 modules/file/omicron.c:416
#: modules/file/shimadzu.c:468
msgid "Missing colon in header line."
msgstr "Missing colon in header line."
@@ -3437,22 +3565,40 @@ msgstr "Imports Benyuan CSM data files."
msgid "Benyuan CSM files (.csm)"
msgstr "Benyuan CSM files (.csm)"
-#: modules/file/dektakxml.c:138
+#: modules/file/dektakvca.c:197
+msgid "Imports Dektak OPDx data files."
+msgstr "Imports Dektak OPDx data files."
+
+#: modules/file/dektakvca.c:210
+msgid "Dektak OPDx data files (.OPDx)"
+msgstr "Dektak OPDx data files (.OPDx)"
+
+#: modules/file/dektakvca.c:655
+#, c-format
+msgid "Item `%s' has unexpected type %u instead of %u."
+msgstr "Item `%s' has unexpected type %u instead of %u."
+
+#: modules/file/dektakvca.c:1022
+#, c-format
+msgid "Truncated data inside item %s."
+msgstr "Truncated data inside item %s."
+
+#: modules/file/dektakxml.c:118
msgid "Imports Dektak XML data files."
msgstr "Imports Dektak XML data files."
-#: modules/file/dektakxml.c:151
+#: modules/file/dektakxml.c:131
msgid "Dektak XML data files (.xml)"
msgstr "Dektak XML data files (.xml)"
-#: modules/file/dektakxml.c:228 modules/file/lextfile.c:260
-#: modules/file/nanoscan.c:267 modules/file/ometiff.c:265
+#: modules/file/dektakxml.c:208 modules/file/lextfile.c:260
+#: modules/file/nanoscan.c:270 modules/file/ometiff.c:265
#, c-format
msgid "XML parsing failed: %s"
msgstr "XML parsing failed: %s"
-#: modules/file/dektakxml.c:400 modules/file/lextfile.c:163
-#: modules/file/nanoscan.c:672 modules/file/ometiff.c:445
+#: modules/file/dektakxml.c:373 modules/file/lextfile.c:163
+#: modules/file/nanoscan.c:698 modules/file/ometiff.c:445
#, c-format
msgid "Top-level element is not ‘%s’."
msgstr "Top-level element is not ‘%s’."
@@ -3564,7 +3710,7 @@ msgid "Scan size header field overlaps with data."
msgstr "Scan size header field overlaps with data."
#: modules/file/err.h:48 modules/file/nrrdfile.c:779
-#: modules/file/nrrdfile.c:824
+#: modules/file/nrrdfile.c:824 modules/pygwy/pygwy-console.c:504
#, c-format
msgid "Cannot read from file: %s."
msgstr "Cannot read from file: %s."
@@ -3782,32 +3928,32 @@ msgid ""
msgstr ""
"Data deserialisation succeeded, but resulted in an unexpected object %s."
-#: modules/file/gwytiff.h:332
+#: modules/file/gwytiff.h:335
#, c-format
msgid "BigTIFF reserved fields are %u and %u instead of 8 and 0."
msgstr "BigTIFF reserved fields are %u and %u instead of 8 and 0."
-#: modules/file/gwytiff.h:349 modules/file/gwytiff.h:366
+#: modules/file/gwytiff.h:352 modules/file/gwytiff.h:369
#, c-format
msgid "TIFF directory %lu ended unexpectedly."
msgstr "TIFF directory %lu ended unexpectedly."
-#: modules/file/gwytiff.h:484
+#: modules/file/gwytiff.h:487
#, c-format
msgid "BigTIFF data type %u was found in a classic TIFF."
msgstr "BigTIFF data type %u was found in a classic TIFF."
-#: modules/file/gwytiff.h:501
+#: modules/file/gwytiff.h:504
msgid "Invalid tag data positions were found."
msgstr "Invalid tag data positions were found."
-#: modules/file/gwytiff.h:874 modules/file/gwytiff.h:889
-#: modules/file/gwytiff.h:1012 modules/file/gwytiff.h:1019
+#: modules/file/gwytiff.h:877 modules/file/gwytiff.h:892
+#: modules/file/gwytiff.h:1015 modules/file/gwytiff.h:1022
#, c-format
msgid "Required tag %u was not found."
msgstr "Required tag %u was not found."
-#: modules/file/gwytiff.h:942 modules/file/gwytiff.h:986
+#: modules/file/gwytiff.h:945 modules/file/gwytiff.h:989
#: modules/file/keyence.c:449 modules/file/matfile.c:276
#: modules/file/matfile.c:298 modules/file/omicronflat.c:1962
#: modules/file/princetonspe.c:339 modules/file/psia.c:352
@@ -3815,21 +3961,21 @@ msgstr "Required tag %u was not found."
msgid "File is truncated."
msgstr "File is truncated."
-#: modules/file/gwytiff.h:1044
+#: modules/file/gwytiff.h:1047
msgid "Non-uniform bits per sample are unsupported."
msgstr "Non-uniform bits per sample are unsupported."
-#: modules/file/gwytiff.h:1071
+#: modules/file/gwytiff.h:1074 modules/file/zeisslsm.c:973
#, c-format
msgid "Compression type %u is not supported."
msgstr "Compression type %u is not supported."
-#: modules/file/gwytiff.h:1077
+#: modules/file/gwytiff.h:1080
#, c-format
msgid "Planar configuration %u is not supported."
msgstr "Planar configuration %u is not supported."
-#: modules/file/gwytiff.h:1101
+#: modules/file/gwytiff.h:1104
msgid "Unsupported sample format"
msgstr "Unsupported sample format"
@@ -3866,7 +4012,7 @@ msgstr "CRC error"
msgid "Minizip error while reading the zip file: %s (%d)."
msgstr "Minizip error while reading the zip file: %s (%d)."
-#: modules/file/gwyzip.h:248
+#: modules/file/gwyzip.h:248 modules/file/jpkscan.c:2776
#, c-format
msgid "File %s is missing in the zip file."
msgstr "File %s is missing in the zip file."
@@ -3901,8 +4047,8 @@ msgstr "Data size %lu is not a multiple of point size %u."
msgid "Export GXYZF"
msgstr "Export GXYZF"
-#: modules/file/gxyzffile.c:395 modules/file/xyzexport.c:238
-#: modules/file/xyzexport.c:304
+#: modules/file/gxyzffile.c:395 modules/file/xyzexport.c:241
+#: modules/file/xyzexport.c:307
msgid "XYZ data:"
msgstr "XYZ data:"
@@ -3991,11 +4137,13 @@ msgstr "_Z scale:"
msgid "Representable"
msgstr "Representable"
-#: modules/file/hdrimage.cc:480 modules/tools/stats.c:203
+#: modules/file/hdrimage.cc:480 modules/graph/graph_stats.c:146
+#: modules/tools/stats.c:203
msgid "Minimum:"
msgstr "Minimum:"
-#: modules/file/hdrimage.cc:496 modules/tools/stats.c:204
+#: modules/file/hdrimage.cc:496 modules/graph/graph_stats.c:147
+#: modules/tools/stats.c:204
msgid "Maximum:"
msgstr "Maximum:"
@@ -4014,12 +4162,12 @@ msgid "OpenEXR data type %u is invalid or unsupported."
msgstr "OpenEXR data type %u is invalid or unsupported."
#: modules/file/hdrimage.cc:1433 modules/file/hdrimage.cc:1442
-#: modules/file/imgexport.c:5249 modules/file/imgexport.c:5260
+#: modules/file/imgexport.c:5198 modules/file/imgexport.c:5209
#, c-format
msgid "libpng initialization error (in %s)"
msgstr "libpng initialisation error (in %s)"
-#: modules/file/hdrimage.cc:1451 modules/file/imgexport.c:5324
+#: modules/file/hdrimage.cc:1451 modules/file/imgexport.c:5273
msgid "libpng error occurred"
msgstr "libpng error occurred"
@@ -4037,11 +4185,6 @@ msgstr "Image Information"
msgid "Horizontal size:"
msgstr "Horizontal size:"
-#: modules/file/hdrimage.cc:2246 modules/file/hdrimage.cc:2252
-#: modules/file/pixmap.c:820 modules/file/pixmap.c:826
-msgid "px"
-msgstr "px"
-
#: modules/file/hdrimage.cc:2252 modules/file/pixmap.c:826
msgid "Vertical size:"
msgstr "Vertical size:"
@@ -4054,10 +4197,10 @@ msgstr "Channels:"
msgid "Pages:"
msgstr "Pages:"
-#: modules/file/hdrimage.cc:2290 modules/file/imgexport.c:3043
+#: modules/file/hdrimage.cc:2290 modules/file/imgexport.c:3059
#: modules/file/pixmap.c:862 modules/file/rawfile.c:649
-#: modules/process/dimensions.h:467 modules/xyz/xyz_drift.c:774
-#: modules/xyz/xyz_raster.c:566
+#: modules/process/dimensions.h:449 modules/xyz/xyz_drift.c:774
+#: modules/xyz/xyz_raster.c:535
msgid "Physical Dimensions"
msgstr "Physical Dimensions"
@@ -4067,16 +4210,16 @@ msgstr "Physical Dimensions"
#: modules/process/calcoefs_new.c:408 modules/process/calcoefs_new.c:475
#: modules/process/calcoefs_simple.c:391 modules/process/calcoefs_simple.c:458
#: modules/process/calcoefs_view.c:511 modules/process/calcoefs_view.c:549
-#: modules/process/calibrate.c:466 modules/process/calibrate.c:549
-#: modules/process/dimensions.h:161 modules/process/volumize_layers.c:259
-#: modules/volume/volume_calibrate.c:414 modules/volume/volume_calibrate.c:441
-#: modules/volume/volume_calibrate.c:468 modules/volume/volume_calibrate.c:546
+#: modules/process/calibrate.c:459 modules/process/calibrate.c:514
+#: modules/process/dimensions.h:143 modules/process/volumize_layers.c:259
+#: modules/volume/volume_calibrate.c:409 modules/volume/volume_calibrate.c:429
+#: modules/volume/volume_calibrate.c:449 modules/volume/volume_calibrate.c:498
msgid "verb|Change"
msgstr "Change"
#: modules/file/hdrimage.cc:2345 modules/file/pixmap.c:907
-#: modules/file/rawfile.c:694 modules/process/crosscor.c:263
-#: modules/process/dimensions.h:477
+#: modules/file/rawfile.c:694 modules/process/crosscor.c:260
+#: modules/process/dimensions.h:459
msgid "H_eight:"
msgstr "H_eight:"
@@ -4093,16 +4236,16 @@ msgstr "_Z-scale (per sample unit):"
#: modules/file/hdrimage.cc:2557 modules/file/pixmap.c:1176
#: modules/file/rawfile.c:1386 modules/process/calcoefs_new.c:819
#: modules/process/calcoefs_simple.c:1197 modules/process/calcoefs_view.c:1380
-#: modules/process/calibrate.c:979 modules/process/dimensions.h:195
-#: modules/process/volumize_layers.c:315 modules/volume/volume_calibrate.c:1017
+#: modules/process/calibrate.c:1013 modules/process/dimensions.h:177
+#: modules/process/volumize_layers.c:314 modules/volume/volume_calibrate.c:957
msgid "Change Units"
msgstr "Change Units"
#: modules/file/hdrimage.cc:2571 modules/file/pixmap.c:1190
#: modules/file/rawfile.c:1400 modules/process/calcoefs_new.c:832
#: modules/process/calcoefs_simple.c:1210 modules/process/calcoefs_view.c:1393
-#: modules/process/calibrate.c:993 modules/process/dimensions.h:208
-#: modules/process/volumize_layers.c:329 modules/volume/volume_calibrate.c:1031
+#: modules/process/calibrate.c:1027 modules/process/dimensions.h:190
+#: modules/process/volumize_layers.c:328 modules/volume/volume_calibrate.c:971
msgid "New _units:"
msgstr "New _units:"
@@ -4146,131 +4289,131 @@ msgstr "Cannot load image: %s"
msgid "Field DataSize %ux%u does not match image dimensions %ux%u."
msgstr "Field DataSize %ux%u does not match image dimensions %ux%u."
-#: modules/file/igorfile.c:200
+#: modules/file/igorfile.c:210
msgid "Imports Igor binary waves (.ibw)."
msgstr "Imports Igor binary waves (.ibw)."
-#: modules/file/igorfile.c:213
+#: modules/file/igorfile.c:223
msgid "Igor binary waves (.ibw)"
msgstr "Igor binary waves (.ibw)"
-#: modules/file/igorfile.c:273
+#: modules/file/igorfile.c:283
#, c-format
msgid "Format version is %d. Only version 5 is supported."
msgstr "Format version is %d. Only version 5 is supported."
-#: modules/file/igorfile.c:294
+#: modules/file/igorfile.c:305
msgid "Only two-dimensional data are supported."
msgstr "Only two-dimensional data are supported."
-#: modules/file/igorfile.c:306
+#: modules/file/igorfile.c:317
#, c-format
msgid "Number of data points %u does not match resolutions %u×%u×%u."
msgstr "Number of data points %u does not match resolutions %u×%u×%u."
-#: modules/file/igorfile.c:320
+#: modules/file/igorfile.c:331
#, c-format
msgid "Data size %u does not match the number of data points %u×%u."
msgstr "Data size %u does not match the number of data points %u×%u."
-#: modules/file/igorfile.c:358
+#: modules/file/igorfile.c:369
msgid "Cannot read channel labels."
msgstr "Cannot read channel labels."
-#: modules/file/imgexport.c:392 modules/file/pixmap.c:178
+#: modules/file/imgexport.c:391 modules/file/pixmap.c:178
msgid "Portable Network Graphics (.png)"
msgstr "Portable Network Graphics (.png)"
-#: modules/file/imgexport.c:398 modules/file/pixmap.c:182
+#: modules/file/imgexport.c:397 modules/file/pixmap.c:182
msgid "JPEG (.jpeg,.jpg)"
msgstr "JPEG (.jpeg,.jpg)"
-#: modules/file/imgexport.c:404 modules/file/pixmap.c:186
+#: modules/file/imgexport.c:403 modules/file/pixmap.c:186
msgid "TIFF (.tiff,.tif)"
msgstr "TIFF (.tiff,.tif)"
-#: modules/file/imgexport.c:410 modules/file/pixmap.c:190
+#: modules/file/imgexport.c:409 modules/file/pixmap.c:190
msgid "Portable Pixmap (.ppm,.pnm)"
msgstr "Portable Pixmap (.ppm,.pnm)"
-#: modules/file/imgexport.c:416 modules/file/pixmap.c:194
+#: modules/file/imgexport.c:415 modules/file/pixmap.c:194
msgid "Windows or OS2 Bitmap (.bmp)"
msgstr "Windows or OS2 Bitmap (.bmp)"
-#: modules/file/imgexport.c:422 modules/file/pixmap.c:198
+#: modules/file/imgexport.c:421 modules/file/pixmap.c:198
msgid "TARGA (.tga,.targa)"
msgstr "TARGA (.tga,.targa)"
-#: modules/file/imgexport.c:429
+#: modules/file/imgexport.c:428
msgid "WebP (.webp)"
msgstr "WebP (.webp)"
-#: modules/file/imgexport.c:437
+#: modules/file/imgexport.c:436
msgid "Portable document format (.pdf)"
msgstr "Portable document format (.pdf)"
-#: modules/file/imgexport.c:445
+#: modules/file/imgexport.c:444
msgid "Encapsulated PostScript (.eps)"
msgstr "Encapsulated PostScript (.eps)"
-#: modules/file/imgexport.c:453
+#: modules/file/imgexport.c:452
msgid "Scalable Vector Graphics (.svg)"
msgstr "Scalable Vector Graphics (.svg)"
-#: modules/file/imgexport.c:463 modules/tools/selectionmanager.c:269
+#: modules/file/imgexport.c:462 modules/tools/selectionmanager.c:269
msgid "Horiz./vert. lines"
msgstr "Horiz./vert. lines"
-#: modules/file/imgexport.c:467 modules/tools/selectionmanager.c:270
+#: modules/file/imgexport.c:466 modules/tools/selectionmanager.c:270
msgid "Ellipses"
msgstr "Ellipses"
-#: modules/file/imgexport.c:471 modules/tools/selectionmanager.c:272
+#: modules/file/imgexport.c:470 modules/tools/selectionmanager.c:272
msgid "Lines"
msgstr "Lines"
-#: modules/file/imgexport.c:479 modules/tools/selectionmanager.c:275
+#: modules/file/imgexport.c:478 modules/tools/selectionmanager.c:275
msgid "Rectangles"
msgstr "Rectangles"
-#: modules/file/imgexport.c:483 modules/process/lat_synth.c:565
+#: modules/file/imgexport.c:482 modules/process/lat_synth.c:565
#: modules/process/lat_synth.c:637 modules/tools/selectionmanager.c:271
msgid "Lattice"
msgstr "Lattice"
-#: modules/file/imgexport.c:487
+#: modules/file/imgexport.c:486
msgid "Path"
msgstr "Path"
-#: modules/file/imgexport.c:493 modules/file/imgexport.c:499
+#: modules/file/imgexport.c:492 modules/file/imgexport.c:498
msgid "ruler|_None"
msgstr "_None"
-#: modules/file/imgexport.c:494
+#: modules/file/imgexport.c:493
msgid "_Rulers"
msgstr "_Rulers"
-#: modules/file/imgexport.c:495
+#: modules/file/imgexport.c:494
msgid "_Inset scale bar"
msgstr "_Inset scale bar"
-#: modules/file/imgexport.c:500
+#: modules/file/imgexport.c:499
msgid "_False color ruler"
msgstr "_False colour ruler"
-#: modules/file/imgexport.c:504
+#: modules/file/imgexport.c:503
msgid "title|None"
msgstr "None"
-#: modules/file/imgexport.c:505
+#: modules/file/imgexport.c:504
msgid "At the top"
msgstr "At the top"
-#: modules/file/imgexport.c:506
+#: modules/file/imgexport.c:505
msgid "Along the right edge"
msgstr "Along the right edge"
-#: modules/file/imgexport.c:512
+#: modules/file/imgexport.c:511
msgid ""
"Renders data into vector (SVG, PDF, EPS) and pixmap (PNG, JPEG, TIFF, WebP, "
"PPM, BMP, TARGA) images. Export to some formats relies on GDK and other "
@@ -4280,56 +4423,57 @@ msgstr ""
"PPM, BMP, TARGA) images. Export to some formats relies on GDK and other "
"libraries thus may be installation-dependent."
-#: modules/file/imgexport.c:2931
+#: modules/file/imgexport.c:2933
msgid "Select Color"
msgstr "Select Colour"
-#: modules/file/imgexport.c:3002
-msgid "Black"
-msgstr "Black"
-
-#: modules/file/imgexport.c:3010
+#: modules/file/imgexport.c:3005
msgid "White"
msgstr "White"
-#: modules/file/imgexport.c:3053
+#: modules/file/imgexport.c:3014
+msgid "Black"
+msgstr "Black"
+
+#: modules/file/imgexport.c:3069
msgid "Pi_xel size:"
msgstr "Pi_xel size:"
-#: modules/file/imgexport.c:3062
+#: modules/file/imgexport.c:3077
msgid "Pixels per _inch:"
msgstr "Pixels per _inch:"
-#: modules/file/imgexport.c:3089
+#: modules/file/imgexport.c:3102
msgid "_Zoom:"
msgstr "_Zoom:"
-#: modules/file/imgexport.c:3108 modules/process/bdep_synth.c:430
+#: modules/file/imgexport.c:3120 modules/process/bdep_synth.c:430
#: modules/process/col_synth.c:486 modules/process/diff_synth.c:508
-#: modules/process/domain_synth.c:510 modules/process/grain_mark.c:285
-#: modules/process/lat_synth.c:753 modules/process/obj_synth.c:575
-#: modules/process/pat_synth.c:852 modules/process/pat_synth.c:1154
-#: modules/process/pat_synth.c:1489 modules/process/tip_blind.c:340
+#: modules/process/domain_synth.c:510 modules/process/fibre_synth.c:540
+#: modules/process/grain_mark.c:284 modules/process/lat_synth.c:753
+#: modules/process/obj_synth.c:573 modules/process/pat_synth.c:853
+#: modules/process/pat_synth.c:1155 modules/process/pat_synth.c:1490
+#: modules/process/phase_synth.c:298 modules/process/tip_blind.c:342
msgid "_Height:"
msgstr "_Height:"
-#: modules/file/imgexport.c:3121
+#: modules/file/imgexport.c:3136
msgid "_Font:"
msgstr "_Font:"
-#: modules/file/imgexport.c:3140
+#: modules/file/imgexport.c:3145
msgid "_Font size:"
msgstr "_Font size:"
-#: modules/file/imgexport.c:3160
+#: modules/file/imgexport.c:3163
msgid "O_utline thickness:"
msgstr "O_utline thickness:"
-#: modules/file/imgexport.c:3170
+#: modules/file/imgexport.c:3172
msgid "_Border width:"
msgstr "_Border width:"
-#: modules/file/imgexport.c:3180
+#: modules/file/imgexport.c:3181
msgid "_Tick length:"
msgstr "_Tick length:"
@@ -4349,219 +4493,220 @@ msgstr "Colours"
msgid "_Line and text color:"
msgstr "_Line and text colour:"
-#: modules/file/imgexport.c:3221
+#: modules/file/imgexport.c:3220
msgid "_Transparent background"
msgstr "_Transparent background"
-#: modules/file/imgexport.c:3232
+#: modules/file/imgexport.c:3231
msgid "_Background color:"
msgstr "_Background colour:"
-#: modules/file/imgexport.c:3474
-msgid "Lateral scale"
-msgstr "Lateral scale"
-
-#: modules/file/imgexport.c:3487 modules/process/lno_synth.c:1053
-msgid "_Length:"
-msgstr "_Length:"
-
-#: modules/file/imgexport.c:3503
-msgid "_Auto"
-msgstr "_Auto"
-
-#: modules/file/imgexport.c:3511 modules/process/pat_synth.c:469
+#: modules/file/imgexport.c:3433 modules/process/fibre_synth.c:582
+#: modules/process/pat_synth.c:470
msgid "Placement"
msgstr "Placement"
-#: modules/file/imgexport.c:3515
+#: modules/file/imgexport.c:3437
msgid "left"
msgstr "left"
-#: modules/file/imgexport.c:3519
+#: modules/file/imgexport.c:3440
msgid "center"
msgstr "centre"
-#: modules/file/imgexport.c:3523
+#: modules/file/imgexport.c:3443
msgid "right"
msgstr "right"
-#: modules/file/imgexport.c:3528
+#: modules/file/imgexport.c:3448
msgid "top"
msgstr "top"
-#: modules/file/imgexport.c:3540
+#: modules/file/imgexport.c:3456
msgid "bottom"
msgstr "bottom"
-#: modules/file/imgexport.c:3552 modules/file/imgexport.c:3874
+#: modules/file/imgexport.c:3479
+msgid "Lateral scale"
+msgstr "Lateral scale"
+
+#: modules/file/imgexport.c:3496 modules/process/lno_synth.c:1053
+msgid "_Length:"
+msgstr "_Length:"
+
+#: modules/file/imgexport.c:3502
+msgid "_Auto"
+msgstr "_Auto"
+
+#: modules/file/imgexport.c:3519 modules/file/imgexport.c:3832
msgid "Hori_zontal gap:"
msgstr "Hori_zontal gap:"
-#: modules/file/imgexport.c:3558 modules/file/imgexport.c:3854
+#: modules/file/imgexport.c:3526 modules/file/imgexport.c:3812
msgid "_Vertical gap:"
msgstr "_Vertical gap:"
-#: modules/file/imgexport.c:3571 modules/file/imgexport.c:4184
+#: modules/file/imgexport.c:3538 modules/file/imgexport.c:4134
msgid "Colo_r:"
msgstr "Colou_r:"
-#: modules/file/imgexport.c:3576 modules/file/imgexport.c:4189
+#: modules/file/imgexport.c:3542 modules/file/imgexport.c:4138
msgid "Out_line color:"
msgstr "Out_line colour:"
-#: modules/file/imgexport.c:3580 modules/file/imgexport.c:4195
+#: modules/file/imgexport.c:3547 modules/file/imgexport.c:4143
msgid "O_pacity:"
msgstr "O_pacity:"
-#: modules/file/imgexport.c:3589
+#: modules/file/imgexport.c:3554
msgid "Draw _ticks"
msgstr "Draw _ticks"
-#: modules/file/imgexport.c:3599
+#: modules/file/imgexport.c:3564
msgid "Draw _label"
msgstr "Draw _label"
-#: modules/file/imgexport.c:3609
+#: modules/file/imgexport.c:3574
msgid "Draw text _above scale bar"
msgstr "Draw text _above scale bar"
-#: modules/file/imgexport.c:3773
+#: modules/file/imgexport.c:3738
msgid "Image"
msgstr "Image"
-#: modules/file/imgexport.c:3777 modules/process/calcoefs_view.c:473
-#: modules/process/correct_affine.c:488 modules/process/drift.c:297
-#: modules/process/dwt.c:206 modules/process/dwtanisotropy.c:202
-#: modules/process/fft_filter_1d.c:294 modules/process/fft_profile.c:292
-#: modules/process/fractal.c:253 modules/process/nanoindent_adjust.c:229
-#: modules/process/polydistort.c:247 modules/process/rotate.c:274
-#: modules/process/scale.c:253 modules/process/straighten_path.c:271
+#: modules/file/imgexport.c:3742 modules/process/calcoefs_view.c:473
+#: modules/process/correct_affine.c:538 modules/process/drift.c:298
+#: modules/process/dwt.c:206 modules/process/dwtanisotropy.c:203
+#: modules/process/fft_filter_1d.c:296 modules/process/fft_profile.c:293
+#: modules/process/fractal.c:262 modules/process/nanoindent_adjust.c:229
+#: modules/process/polydistort.c:250 modules/process/rotate.c:274
+#: modules/process/scale.c:257 modules/process/straighten_path.c:270
#: modules/process/unrotate.c:277 modules/tools/linestats.c:400
-#: modules/tools/profile.c:555 modules/tools/roughness.c:864
-#: modules/tools/sfunctions.c:468 modules/xyz/xyz_raster.c:632
+#: modules/tools/profile.c:552 modules/tools/roughness.c:879
+#: modules/tools/sfunctions.c:481 modules/xyz/xyz_raster.c:601
msgid "_Interpolation type:"
msgstr "_Interpolation type:"
-#: modules/file/imgexport.c:3807
+#: modules/file/imgexport.c:3772
msgid "Draw _frame"
msgstr "Draw _frame"
-#: modules/file/imgexport.c:3816
+#: modules/file/imgexport.c:3781
msgid "Draw _mask"
msgstr "Draw _mask"
-#: modules/file/imgexport.c:3826
+#: modules/file/imgexport.c:3791
msgid "Draw mask _legend"
msgstr "Draw mask _legend"
-#: modules/file/imgexport.c:3861
+#: modules/file/imgexport.c:3819
msgid "Value Scale"
msgstr "Value Scale"
-#: modules/file/imgexport.c:3882
+#: modules/file/imgexport.c:3840
msgid "Fi_xed precision:"
msgstr "Fi_xed precision:"
-#: modules/file/imgexport.c:3898
+#: modules/file/imgexport.c:3855
msgid "Fixed _kilo threshold:"
msgstr "Fixed _kilo threshold:"
-#: modules/file/imgexport.c:3914 modules/file/imgexport.c:4635
+#: modules/file/imgexport.c:3869 modules/file/imgexport.c:4583
msgid "Title"
msgstr "Title"
-#: modules/file/imgexport.c:3918
+#: modules/file/imgexport.c:3877
msgid "Posi_tion:"
msgstr "Posi_tion:"
-#: modules/file/imgexport.c:3934
+#: modules/file/imgexport.c:3884
msgid "_Gap:"
msgstr "_Gap:"
-#: modules/file/imgexport.c:3941
+#: modules/file/imgexport.c:3891
msgid "Put _units to title"
msgstr "Put _units to title"
-#: modules/file/imgexport.c:4125
+#: modules/file/imgexport.c:4075
msgid "Draw _selection"
msgstr "Draw _selection"
-#: modules/file/imgexport.c:4176 modules/tools/selectionmanager.c:361
+#: modules/file/imgexport.c:4126 modules/tools/selectionmanager.c:361
msgid "Objects"
msgstr "Objects"
-#: modules/file/imgexport.c:4615
+#: modules/file/imgexport.c:4563
msgid "Lateral"
msgstr "Lateral"
-#: modules/file/imgexport.c:4654 modules/file/rawfile.c:1040
-#: modules/process/calcoefs_load.c:230 modules/process/neural.c:693
+#: modules/file/imgexport.c:4602 modules/file/rawfile.c:1040
+#: modules/process/calcoefs_load.c:230 modules/process/neural.c:700
msgid "verb|_Load"
msgstr "_Load"
-#: modules/file/imgexport.c:4660 modules/file/rawfile.c:1046
-#: modules/process/neural.c:699
+#: modules/file/imgexport.c:4608 modules/file/rawfile.c:1046
+#: modules/process/neural.c:706
msgid "verb|_Store"
msgstr "_Store"
-#: modules/file/imgexport.c:4666 modules/file/rawfile.c:1052
-#: modules/process/neural.c:705
+#: modules/file/imgexport.c:4614 modules/file/rawfile.c:1052
+#: modules/process/neural.c:712
msgid "_Rename"
msgstr "_Rename"
-#: modules/file/imgexport.c:4686 modules/file/rawfile.c:1071
+#: modules/file/imgexport.c:4634 modules/file/rawfile.c:1071
msgid "Preset _name:"
msgstr "Preset _name:"
-#: modules/file/imgexport.c:4757
+#: modules/file/imgexport.c:4705
#, c-format
msgid "Export %s"
msgstr "Export %s"
-#: modules/file/imgexport.c:4778
+#: modules/file/imgexport.c:4727
msgid "Export as 1_6 bit grayscale"
msgstr "Export as 1_6 bit grey scale"
-#: modules/file/imgexport.c:4801
+#: modules/file/imgexport.c:4750
msgid "Lateral Scale"
msgstr "Lateral Scale"
-#: modules/file/imgexport.c:4806
+#: modules/file/imgexport.c:4755
msgid "Values"
msgstr "Values"
-#: modules/file/imgexport.c:4811
+#: modules/file/imgexport.c:4760
msgid "Selection"
msgstr "Selection"
-#: modules/file/imgexport.c:4816 modules/file/rawfile.c:462
+#: modules/file/imgexport.c:4765 modules/file/rawfile.c:462
#: modules/process/convolution_filter.c:275
msgid "Presets"
msgstr "Presets"
-#: modules/file/imgexport.c:5576
+#: modules/file/imgexport.c:5525
#, c-format
msgid "Cairo error occurred: %s"
msgstr "Cairo error occurred: %s"
-#: modules/file/imgexport.c:5600
+#: modules/file/imgexport.c:5549
#, c-format
msgid "Pixbuf save failed: %s."
msgstr "Pixbuf save failed: %s."
-#: modules/file/imgexport.c:5878
+#: modules/file/imgexport.c:5827
msgid "Image is too large to be stored as TARGA."
msgstr "Image is too large to be stored as TARGA."
-#: modules/file/imgexport.c:6457 modules/file/imgexport.c:6486
+#: modules/file/imgexport.c:6406 modules/file/imgexport.c:6435
msgid "Draw _numbers"
msgstr "Draw _numbers"
-#: modules/file/imgexport.c:6469 modules/file/imgexport.c:6517
+#: modules/file/imgexport.c:6418 modules/file/imgexport.c:6466
msgid "_End marker length:"
msgstr "_End marker length:"
-#: modules/file/imgexport.c:6498
+#: modules/file/imgexport.c:6447
msgid "Marker _radius:"
msgstr "Marker _radius:"
@@ -4600,45 +4745,58 @@ msgstr "Parameter tag set is incomplete."
msgid "image depth"
msgstr "image depth"
-#: modules/file/iso28600.c:534
+#: modules/file/iso28600.c:543
msgid "Imports and exports ISO 28600:2011 SPM data transfer format."
msgstr "Imports and exports ISO 28600:2011 SPM data transfer format."
-#: modules/file/iso28600.c:550
+#: modules/file/iso28600.c:559
msgid "ISO 28600:2011 SPM data transfer files (.spm)"
msgstr "ISO 28600:2011 SPM data transfer files (.spm)"
-#: modules/file/iso28600.c:606
+#: modules/file/iso28600.c:658
#, c-format
-msgid "Only regular mappings are implemented but file has mapping type ‘%s’."
-msgstr "Only regular mappings are implemented but file has mapping type ‘%s’."
+msgid ""
+"Only regular and irregular mappings are implemented but the file has mapping "
+"type ‘%s’."
+msgstr ""
+"Only regular and irregular mappings are implemented but the file has mapping "
+"type ‘%s’."
-#: modules/file/iso28600.c:668 modules/file/iso28600.c:677
-#: modules/file/iso28600.c:686
+#: modules/file/iso28600.c:687 modules/file/iso28600.c:696
+#: modules/file/iso28600.c:705
#, c-format
msgid "List ‘%s’ has %u items which differs from the number %u given by ‘%s’."
msgstr "List ‘%s’ has %u items which differs from the number %u given by ‘%s’."
-#: modules/file/iso28600.c:755 modules/file/iso28600.c:867
-#: modules/file/sdfile.c:846 modules/file/sdfile.c:863
-#: modules/file/spip-asc.c:239 modules/file/witec-asc.c:223
-#: modules/file/wsffile.c:215
+#: modules/file/iso28600.c:775
+#, c-format
+msgid "End of file reached when reading sample #%u of %u"
+msgstr "End of file reached when reading sample #%u of %u"
+
+#: modules/file/iso28600.c:784 modules/file/iso28600.c:873
+#, c-format
+msgid "Malformed data encountered when reading sample #%u"
+msgstr "Malformed data encountered when reading sample #%u"
+
+#: modules/file/iso28600.c:797 modules/file/iso28600.c:887
+#: modules/file/iso28600.c:1022
+msgid "Missing end-of-data marker."
+msgstr "Missing end-of-data marker."
+
+#: modules/file/iso28600.c:1003 modules/file/sdfile.c:846
+#: modules/file/sdfile.c:863 modules/file/spip-asc.c:239
+#: modules/file/witec-asc.c:223 modules/file/wsffile.c:215
#, c-format
msgid "End of file reached when reading sample #%d of %d"
msgstr "End of file was reached when reading sample #%d of %d"
-#: modules/file/iso28600.c:764 modules/file/iso28600.c:876
-#: modules/file/spip-asc.c:246 modules/file/witec-asc.c:230
-#: modules/file/wsffile.c:222
+#: modules/file/iso28600.c:1012 modules/file/spip-asc.c:246
+#: modules/file/witec-asc.c:230 modules/file/wsffile.c:222
#, c-format
msgid "Malformed data encountered when reading sample #%d of %d"
msgstr "Malformed data encountered when reading sample #%d of %d"
-#: modules/file/iso28600.c:774 modules/file/iso28600.c:886
-msgid "Missing end-of-data marker."
-msgstr "Missing end-of-data marker."
-
-#: modules/file/iso28600.c:1048
+#: modules/file/iso28600.c:1184
#, c-format
msgid "Line %u does not contain mandatory label ‘%s’."
msgstr "Line %u does not contain mandatory label ‘%s’."
@@ -4655,42 +4813,60 @@ msgstr "JEOL data files (.tif)"
msgid "The type of data is unknown. Please report it to the developers."
msgstr "The type of data is unknown. Please report it to the developers."
-#: modules/file/jpkscan.c:229
+#: modules/file/jpkscan.c:292
msgid "Imports JPK image scans."
msgstr "Imports JPK image scans."
-#: modules/file/jpkscan.c:242
+#: modules/file/jpkscan.c:305
msgid "JPK image scans (.jpk, .jpk-qi-image)"
msgstr "JPK image scans (.jpk, .jpk-qi-image)"
-#: modules/file/jpkscan.c:249
+#: modules/file/jpkscan.c:312
msgid "JPK force curves (.jpk-force, .jpk-force-map, .jpk-qi-data)"
msgstr "JPK force curves (.jpk-force, .jpk-force-map, .jpk-qi-data)"
-#: modules/file/jpkscan.c:315
+#: modules/file/jpkscan.c:378
msgid "File does not contain grid dimensions."
msgstr "File does not contain grid dimensions."
-#: modules/file/jpkscan.c:660 modules/file/nanoobserver.c:193
+#: modules/file/jpkscan.c:736 modules/file/nanoobserver.c:360
#: modules/file/nanoscantech.c:205 modules/file/opengps.c:209
#: modules/file/sensofarx.c:183 modules/file/spmxfile.c:166
msgid "Minizip cannot open the file as a ZIP file."
msgstr "Minizip cannot open the file as a ZIP file."
-#: modules/file/jpkscan.c:739
+#: modules/file/jpkscan.c:758 modules/file/jpkscan.c:2717
+#, c-format
+msgid "Scanning file (%u curves)..."
+msgstr "Scanning file (%u curves)..."
+
+#: modules/file/jpkscan.c:798 modules/file/nmmxyz.c:299
+msgid "Reading files..."
+msgstr "Reading files..."
+
+#: modules/file/jpkscan.c:816
+msgid "Creating volume data..."
+msgstr "Creating volume data..."
+
+#: modules/file/jpkscan.c:968
msgid "Non-uniform point and/or segment numbering is not supported."
msgstr "Non-uniform point and/or segment numbering is not supported."
-#: modules/file/jpkscan.c:748
+#: modules/file/jpkscan.c:977
msgid "Non-uniform channel lists are not supported."
msgstr "Non-uniform channel lists are not supported."
-#: modules/file/jpkscan.c:756
+#: modules/file/jpkscan.c:985
#, c-format
msgid "Data file %s was found instead of expected %s."
msgstr "Data file %s was found instead of expected %s."
-#: modules/file/jpkscan.c:1497
+#: modules/file/jpkscan.c:1900
+#, c-format
+msgid "Header properties file for index %u is missing."
+msgstr "Header properties file for index %u is missing."
+
+#: modules/file/jpkscan.c:2519
msgid "Cannot find any height channel."
msgstr "Cannot find any height channel."
@@ -4840,19 +5016,19 @@ msgstr "MetroPro files (.dat)"
msgid "File header is larger than file."
msgstr "File header is larger than file."
-#: modules/file/microprof.c:117
+#: modules/file/microprof.c:125
msgid "Imports MicroProf FRT profilometer data files."
msgstr "Imports MicroProf FRT profilometer data files."
-#: modules/file/microprof.c:130
+#: modules/file/microprof.c:138
msgid "MicroProf FRT files (.frt)"
msgstr "MicroProf FRT files (.frt)"
-#: modules/file/microprof.c:136
+#: modules/file/microprof.c:144
msgid "MicroProf FRT text files (.txt)"
msgstr "MicroProf FRT text files (.txt)"
-#: modules/file/microprof.c:432
+#: modules/file/microprof.c:519
msgid "File contains fewer than XSize*YSize data points."
msgstr "File contains fewer than XSize*YSize data points."
@@ -4941,8 +5117,8 @@ msgstr "Image data starts past the end of file."
msgid "Spectra data starts past the end of file."
msgstr "Spectra data starts past the end of file."
-#: modules/file/nanoeducator.c:648 modules/file/opdfile.c:276
-#: modules/file/renishaw.c:1325 modules/file/sensofar.c:256
+#: modules/file/nanoeducator.c:648 modules/file/opdfile.c:287
+#: modules/file/renishaw.c:1334 modules/file/sensofar.c:256
#: modules/file/witec-asc.c:161
msgid "File header is truncated"
msgstr "File header is truncated"
@@ -4952,8 +5128,8 @@ msgstr "File header is truncated"
msgid "Parameter header is truncated"
msgstr "Parameter header is truncated"
-#: modules/file/nanoeducator.c:932 modules/process/curvature.c:454
-#: modules/tools/profile.c:1107
+#: modules/file/nanoeducator.c:932 modules/process/curvature.c:456
+#: modules/tools/profile.c:1090
#, c-format
msgid "Profile %d"
msgstr "Profile %d"
@@ -5033,23 +5209,27 @@ msgstr "DATA_INFO line contains fewer than %d fields."
msgid "Missing data start marker \\x1a\\x04."
msgstr "Missing data start marker \\x1a\\x04."
-#: modules/file/nanoobserver.c:113
-msgid "Reads NanoObserver .nao files."
-msgstr "Reads NanoObserver .nao files."
+#: modules/file/nanoobserver.c:201
+msgid "Reads Nano-Solution/NanoObserver .nao files."
+msgstr "Reads Nano-Solution/NanoObserver .nao files."
-#: modules/file/nanoobserver.c:126
-msgid "NanoObserver data (.nao)"
-msgstr "NanoObserver data (.nao)"
+#: modules/file/nanoobserver.c:214
+msgid "Nano-Solution/NanoObserver data (.nao)"
+msgstr "Nano-Solution/NanoObserver data (.nao)"
+
+#: modules/file/nanoobserver.c:410 modules/file/renishaw.c:1420
+msgid "Data block is truncated"
+msgstr "Data block is truncated"
-#: modules/file/nanoscan.c:188
+#: modules/file/nanoscan.c:191
msgid "Imports NanoScan XML files."
msgstr "Imports NanoScan XML files."
-#: modules/file/nanoscan.c:201
+#: modules/file/nanoscan.c:204
msgid "NanoScan XML files (.xml)"
msgstr "NanoScan XML files (.xml)"
-#: modules/file/nanoscan.c:910
+#: modules/file/nanoscan.c:937
msgid "Wrong size of Base64 encoded data."
msgstr "Wrong size of Base64 encoded data."
@@ -5069,21 +5249,21 @@ msgstr "Imports Digital Instruments Nanoscope II data files."
msgid "Nanoscope II files"
msgstr "Nanoscope II files"
-#: modules/file/nanoscope.c:207
+#: modules/file/nanoscope.c:212
msgid ""
"Imports Veeco (Digital Instruments) Nanoscope data files, version 3 or newer."
msgstr ""
"Imports Veeco (Digital Instruments) Nanoscope data files, version 3 or newer."
-#: modules/file/nanoscope.c:221
+#: modules/file/nanoscope.c:226
msgid "Nanoscope III files"
msgstr "Nanoscope III files"
-#: modules/file/nanoscope.c:288
+#: modules/file/nanoscope.c:295
msgid "File is not a Nanoscope file, or it is a unknown subtype."
msgstr "File is not a Nanoscope file, or it is a unknown subtype."
-#: modules/file/nanoscope.c:295
+#: modules/file/nanoscope.c:302
msgid ""
"File has been damaged by change of line endings, resulting in corruption of "
"the binary part of the file.\n"
@@ -5101,16 +5281,16 @@ msgstr ""
"compressed folder’ in some versions of MS Windows, or any other file "
"transfer that attempts to store text platform-independently."
-#: modules/file/nanoscope.c:653 modules/file/nanoscope.c:669
+#: modules/file/nanoscope.c:660 modules/file/nanoscope.c:676
msgid "Cannot parse `Scan size' field."
msgstr "Cannot parse ‘Scan size’ field."
-#: modules/file/nanoscope.c:1539 modules/file/nrrdfile.c:1086
+#: modules/file/nanoscope.c:1546 modules/file/nrrdfile.c:1086
#, c-format
msgid "Garbage after data sample #%u."
msgstr "Rubbish after data sample #%u."
-#: modules/file/nanoscope.c:1595
+#: modules/file/nanoscope.c:1602
msgid "Truncated header line."
msgstr "Truncated header line."
@@ -5186,11 +5366,8 @@ msgstr "Nano Measuring Machine files (*.dsc)"
msgid "Nano Measuring Machine data import must be run as interactive."
msgstr "Nano Measuring Machine data import must be run as interactive."
-#: modules/file/nmmxyz.c:299
-msgid "Reading files..."
-msgstr "Reading files..."
-
#: modules/file/nmmxyz.c:306 modules/process/lat_synth.c:1224
+#: modules/process/wave_synth.c:798
msgid "Rendering surface..."
msgstr "Rendering surface..."
@@ -5223,20 +5400,20 @@ msgid "Plot point density map"
msgstr "Plot point density map"
#: modules/file/nmmxyz.c:534 modules/file/rawfile.c:626
-#: modules/process/dimensions.h:445 modules/xyz/xyz_drift.c:725
-#: modules/xyz/xyz_raster.c:517
+#: modules/process/dimensions.h:427 modules/xyz/xyz_drift.c:725
+#: modules/xyz/xyz_raster.c:376
msgid "Resolution"
msgstr "Resolution"
#: modules/file/nmmxyz.c:538 modules/file/rawfile.c:631
-#: modules/process/dimensions.h:451 modules/xyz/xyz_drift.c:729
-#: modules/xyz/xyz_raster.c:521
+#: modules/process/dimensions.h:433 modules/xyz/xyz_drift.c:729
+#: modules/xyz/xyz_raster.c:382
msgid "_Horizontal size:"
msgstr "_Horizontal size:"
#: modules/file/nmmxyz.c:554 modules/file/rawfile.c:638
-#: modules/process/dimensions.h:454 modules/xyz/xyz_drift.c:744
-#: modules/xyz/xyz_raster.c:536
+#: modules/process/dimensions.h:436 modules/xyz/xyz_drift.c:744
+#: modules/xyz/xyz_raster.c:388
msgid "_Vertical size:"
msgstr "_Vertical size:"
@@ -5322,38 +5499,38 @@ msgstr "Per-axis header field %s contains too many items."
msgid "Per-axis header field %s contains too few items."
msgstr "Per-axis header field %s contains too few items."
-#: modules/file/nt-mdt.c:843
+#: modules/file/nt-mdt.c:850
msgid "Imports NT-MDT data files."
msgstr "Imports NT-MDT data files."
-#: modules/file/nt-mdt.c:856
+#: modules/file/nt-mdt.c:863
msgid "NT-MDT files (.mdt)"
msgstr "NT-MDT files (.mdt)"
-#: modules/file/nt-mdt.c:1491 modules/file/nt-mdt.c:1599
+#: modules/file/nt-mdt.c:1498 modules/file/nt-mdt.c:1606
msgid "Frame is too short for Frame Mode."
msgstr "Frame is too short for Frame Mode."
-#: modules/file/nt-mdt.c:1506 modules/file/nt-mdt.c:1614
+#: modules/file/nt-mdt.c:1513 modules/file/nt-mdt.c:1621
msgid "Frame is too short for dots or data."
msgstr "Frame is too short for dots or data."
-#: modules/file/nt-mdt.c:1869
+#: modules/file/nt-mdt.c:1879
#, c-format
msgid "End of file reached in frame header #%u."
msgstr "End of file reached in frame header #%u."
-#: modules/file/nt-mdt.c:1877
+#: modules/file/nt-mdt.c:1887
#, c-format
msgid "End of file reached in frame data #%u."
msgstr "End of file reached in frame data #%u."
-#: modules/file/nt-mdt.c:1910
+#: modules/file/nt-mdt.c:1920
#, c-format
msgid "Frame #%u is too short for scanned data header."
msgstr "Frame #%u is too short for scanned data header."
-#: modules/file/nt-mdt.c:1927
+#: modules/file/nt-mdt.c:1937
#, c-format
msgid "Frame #%u is too short for spectroscopy data header."
msgstr "Frame #%u is too short for spectroscopy data header."
@@ -5467,28 +5644,28 @@ msgstr "Omicron MATRIX (param.mtrx & data.mtrx)"
msgid "Omicron MATRIX (.mtrx & .mtrx)"
msgstr "Omicron MATRIX (.mtrx & .mtrx)"
-#: modules/file/opdfile.c:188
+#: modules/file/opdfile.c:199
msgid "Imports Wyko OPD and ASC files."
msgstr "Imports Wyko OPD and ASC files."
-#: modules/file/opdfile.c:201
+#: modules/file/opdfile.c:212
msgid "Wyko OPD files (.opd)"
msgstr "Wyko OPD files (.opd)"
-#: modules/file/opdfile.c:208
+#: modules/file/opdfile.c:219
msgid "Wyko ASCII export files (.asc)"
msgstr "Wyko ASCII export files (.asc)"
-#: modules/file/opdfile.c:299
+#: modules/file/opdfile.c:310
#, c-format
msgid "Item `%s' is beyond the end of the file."
msgstr "Item ‘%s’ is beyond the end of the file."
-#: modules/file/opdfile.c:614
+#: modules/file/opdfile.c:636
msgid "Nested directories found"
msgstr "Nested directories found"
-#: modules/file/opdfile.c:805
+#: modules/file/opdfile.c:842
#, c-format
msgid "Truncated data in block %s"
msgstr "Truncated data in block %s"
@@ -5787,19 +5964,21 @@ msgstr "Data Format"
#: modules/file/rawfile.c:567 modules/process/arithmetic.c:234
#: modules/process/calcoefs_view.c:320 modules/process/coerce.c:250
-#: modules/process/convolution_filter.c:236 modules/process/deposit_synth.c:637
+#: modules/process/convolution_filter.c:236 modules/process/deposit_synth.c:638
#: modules/process/drift.c:242 modules/process/edge.c:635
-#: modules/process/entropy.c:178 modules/process/fft_filter_1d.c:183
-#: modules/process/grain_edge.c:210 modules/process/grain_filter.c:313
-#: modules/process/grain_mark.c:244 modules/process/grain_wshed.c:164
-#: modules/process/mark_disconn.c:205 modules/process/mark_with.c:195
-#: modules/process/polydistort.c:205 modules/process/scars.c:295
-#: modules/process/slope_dist.c:273 modules/process/straighten_path.c:198
-#: modules/process/synth.h:509 modules/process/tip_model.c:166
+#: modules/process/entropy.c:178 modules/process/fft_filter_1d.c:184
+#: modules/process/fractal.c:225 modules/process/grain_edge.c:209
+#: modules/process/grain_filter.c:312 modules/process/grain_mark.c:243
+#: modules/process/grain_wshed.c:165 modules/process/mark_disconn.c:205
+#: modules/process/mark_with.c:196 modules/process/mfm_field.c:278
+#: modules/process/mfm_shift.c:167 modules/process/polydistort.c:205
+#: modules/process/scars.c:314 modules/process/slope_dist.c:272
+#: modules/process/stitch.c:272 modules/process/straighten_path.c:198
+#: modules/process/synth.h:538 modules/process/tip_model.c:164
#: modules/process/wpour_mark.c:273 modules/tools/linestats.c:454
-#: modules/tools/sfunctions.c:534 modules/tools/stats.c:459
-#: modules/volume/volume_extract.c:328 modules/volume/volume_linestat.c:287
-#: modules/xyz/xyz_drift.c:618 modules/xyz/xyz_raster.c:443
+#: modules/tools/sfunctions.c:531 modules/tools/stats.c:456
+#: modules/volume/volume_extract.c:321 modules/volume/volume_linestat.c:292
+#: modules/xyz/xyz_drift.c:618 modules/xyz/xyz_raster.c:457
msgid "_Update"
msgstr "_Update"
@@ -5946,7 +6125,7 @@ msgstr ""
"<b>Parsing failed</b>\n"
"The contents of ‘%s’ does not match format: %s."
-#: modules/file/rawfile.c:1690 modules/process/neural.c:1580
+#: modules/file/rawfile.c:1690 modules/process/neural.c:1587
#, c-format
msgid "The name `%s' is invalid."
msgstr "The name ‘%s’ is invalid."
@@ -6039,7 +6218,8 @@ msgstr "XYZ data files"
msgid "Import XYZ Data"
msgstr "Import XYZ Data"
-#: modules/file/rawxyz.c:279
+#: modules/file/rawxyz.c:279 modules/graph/graph_stats.c:305
+#: modules/graph/graph_stats.c:756 modules/graph/graph_stats.c:800
msgid "Number of points:"
msgstr "Number of points:"
@@ -6059,7 +6239,7 @@ msgstr "Z-range:"
msgid "_Lateral units:"
msgstr "_Lateral units:"
-#: modules/file/rawxyz.c:386 modules/process/dimensions.h:494
+#: modules/file/rawxyz.c:386 modules/process/dimensions.h:479
msgid "_Value units:"
msgstr "_Value units:"
@@ -6075,18 +6255,14 @@ msgstr "Renishaw WiRE data files (.wdf)"
msgid "MapArea block is truncated"
msgstr "MapArea block is truncated"
-#: modules/file/renishaw.c:787
+#: modules/file/renishaw.c:793
msgid "Random points order unsupported"
msgstr "Random points order is unsupported"
-#: modules/file/renishaw.c:1396
+#: modules/file/renishaw.c:1405
msgid "Block header is truncated"
msgstr "Block header is truncated"
-#: modules/file/renishaw.c:1411
-msgid "Data block is truncated"
-msgstr "Data block is truncated"
-
#: modules/file/rhk-sm3.c:236
msgid "Imports RHK Technology SM3 data files."
msgstr "Imports RHK Technology SM3 data files."
@@ -6348,19 +6524,23 @@ msgstr "Loads SPML (Scanning Probe Microscopy Markup Language) data files."
msgid "SPML files (.xml)"
msgstr "SPML files (.xml)"
-#: modules/file/spmlab.c:131
+#: modules/file/spmlab.c:175
msgid "Imports Thermicroscopes SpmLab R3 to R7 data files."
msgstr "Imports Thermicroscopes SpmLab R3 to R7 data files."
-#: modules/file/spmlab.c:144
+#: modules/file/spmlab.c:188
msgid "Thermicroscopes SpmLab files"
msgstr "Thermicroscopes SpmLab files"
-#: modules/file/spmlab.c:231
+#: modules/file/spmlab.c:259
#, c-format
msgid "Unknown format version %c."
msgstr "Unknown format version %c."
+#: modules/file/spmlab.c:283
+msgid "Data block is truncated."
+msgstr "Data block is truncated."
+
#: modules/file/spmlabf.c:79
msgid "Imports SPMLab floating-point files."
msgstr "Imports SPMLab floating-point files."
@@ -6557,11 +6737,11 @@ msgstr "Imports WinSTM (.stm) files."
msgid "WinSTM files (.stm)"
msgstr "WinSTM files (.stm)"
-#: modules/file/wipfile.c:272
+#: modules/file/wipfile.c:281
msgid "Imports WItec Project data files."
msgstr "Imports WItec Project data files."
-#: modules/file/wipfile.c:285
+#: modules/file/wipfile.c:294
msgid "WItec Project files (.wip)"
msgstr "WItec Project files (.wip)"
@@ -6622,21 +6802,21 @@ msgstr "Exports data as simple XYZ text file."
msgid "XYZ text data (.xyz)"
msgstr "XYZ text data (.xyz)"
-#: modules/file/xyzexport.c:244
+#: modules/file/xyzexport.c:247
msgid "Lateral units:"
msgstr "Lateral units:"
-#: modules/file/xyzexport.c:290
+#: modules/file/xyzexport.c:293
msgid "Export XYZ"
msgstr "Export XYZ"
-#: modules/file/xyzexport.c:340 modules/process/curvature.c:704
+#: modules/file/xyzexport.c:343 modules/process/curvature.c:700
#: modules/process/entropy.c:214 modules/process/facet-level.c:207
-#: modules/process/fit-shape.c:743 modules/process/level.c:259
-#: modules/process/linematch.c:906 modules/process/neural.c:593
-#: modules/process/polylevel.c:491 modules/process/slope_dist.c:418
-#: modules/tools/filter.c:300 modules/tools/linestats.c:436
-#: modules/tools/profile.c:591 modules/tools/sfunctions.c:516
+#: modules/process/fit-shape.c:755 modules/process/level.c:259
+#: modules/process/linematch.c:869 modules/process/neural.c:597
+#: modules/process/polylevel.c:494 modules/process/slope_dist.c:411
+#: modules/tools/filter.c:301 modules/tools/linestats.c:436
+#: modules/tools/profile.c:572 modules/tools/sfunctions.c:513
#: modules/tools/stats.c:389
msgid "Masking Mode"
msgstr "Masking Mode"
@@ -6649,6 +6829,14 @@ msgstr "Imports Carl Zeiss SEM images."
msgid "Carl Zeiss SEM scans (.tif)"
msgstr "Carl Zeiss SEM scans (.tif)"
+#: modules/file/zeisslsm.c:383
+msgid "Imports Carl Zeiss CLSM images."
+msgstr "Imports Carl Zeiss CLSM images."
+
+#: modules/file/zeisslsm.c:396
+msgid "Carl Zeiss CLSM images (.lsm)"
+msgstr "Carl Zeiss CLSM images (.lsm)"
+
#: modules/file/zemax.c:72
msgid "Imports Zemax grid sag data files."
msgstr "Imports Zemax grid sag data files."
@@ -6671,15 +6859,15 @@ msgstr "Unit code %d is invalid or unsupported."
msgid "The first line contains too many items."
msgstr "The first line contains too many items."
-#: modules/graph/graph_align.c:57
+#: modules/graph/graph_align.c:60
msgid "Aligns graph curves."
msgstr "Aligns graph curves."
-#: modules/graph/graph_align.c:71
+#: modules/graph/graph_align.c:74
msgid "/_Align"
msgstr "/_Align"
-#: modules/graph/graph_align.c:74
+#: modules/graph/graph_align.c:77
msgid "Align curves"
msgstr "Align curves"
@@ -6695,48 +6883,50 @@ msgstr "/_Critical Dimension..."
msgid "Fit critical dimension"
msgstr "Fit critical dimension"
-#: modules/graph/graph_cd.c:209 modules/graph/graph_fit.c:267
+#: modules/graph/graph_cd.c:209 modules/graph/graph_fit.c:270
msgid "Fit Graph"
msgstr "Fit Graph"
-#: modules/graph/graph_cd.c:212 modules/graph/graph_fdfit.c:251
-#: modules/graph/graph_fit.c:270 modules/process/fit-shape.c:393
+#: modules/graph/graph_cd.c:212 modules/graph/graph_fdfit.c:254
+#: modules/graph/graph_fit.c:273 modules/process/fit-shape.c:394
#: modules/volume/volume_fdfit.c:299
msgid "verb|_Fit"
msgstr "_Fit"
-#: modules/graph/graph_cd.c:262 modules/graph/graph_cut.c:166
-#: modules/graph/graph_fdfit.c:306 modules/graph/graph_fit.c:325
-#: modules/graph/graph_peaks.c:199
+#: modules/graph/graph_cd.c:262 modules/graph/graph_cut.c:168
+#: modules/graph/graph_fdfit.c:313 modules/graph/graph_fit.c:332
+#: modules/graph/graph_peaks.c:199 modules/graph/graph_stats.c:268
msgid "_Graph curve:"
msgstr "_Graph curve:"
-#: modules/graph/graph_cd.c:276 modules/graph/graph_fdfit.c:320
-#: modules/graph/graph_fit.c:339 modules/volume/volume_fdfit.c:405
+#: modules/graph/graph_cd.c:276 modules/graph/graph_fdfit.c:327
+#: modules/graph/graph_fit.c:346 modules/volume/volume_fdfit.c:389
msgid "F_unction:"
msgstr "F_unction:"
-#: modules/graph/graph_cd.c:305 modules/graph/graph_fdfit.c:361
-#: modules/graph/graph_fit.c:375 modules/process/curvature.c:745
-#: modules/process/fit-shape.c:792 modules/volume/volume_fdfit.c:446
+#: modules/graph/graph_cd.c:305 modules/graph/graph_fdfit.c:368
+#: modules/graph/graph_fit.c:382 modules/process/curvature.c:742
+#: modules/process/fit-shape.c:804 modules/volume/volume_fdfit.c:422
msgid "Parameter"
msgstr "Parameter"
-#: modules/graph/graph_cd.c:307 modules/graph/graph_fdfit.c:363
-#: modules/graph/graph_fit.c:377 modules/process/fit-shape.c:794
-#: modules/volume/volume_fdfit.c:448
+#: modules/graph/graph_cd.c:307 modules/graph/graph_fdfit.c:370
+#: modules/graph/graph_fit.c:384 modules/process/fit-shape.c:806
+#: modules/volume/volume_fdfit.c:424
msgid "Error"
msgstr "Error"
-#: modules/graph/graph_cd.c:319 modules/graph/graph_cut.c:196
-#: modules/graph/graph_fdfit.c:415 modules/graph/graph_fit.c:433
-#: modules/volume/volume_fdfit.c:500 modules/volume/volume_linestat.c:389
+#: modules/graph/graph_cd.c:319 modules/graph/graph_cut.c:189
+#: modules/graph/graph_fdfit.c:422 modules/graph/graph_fit.c:440
+#: modules/graph/graph_stats.c:279 modules/graph/graph_stats.c:793
+#: modules/volume/volume_fdfit.c:476 modules/volume/volume_linestat.c:394
msgid "Range:"
msgstr "Range:"
-#: modules/graph/graph_cd.c:330 modules/graph/graph_cut.c:207
-#: modules/graph/graph_fdfit.c:426 modules/graph/graph_fit.c:444
-#: modules/volume/volume_fdfit.c:511 modules/volume/volume_linestat.c:400
+#: modules/graph/graph_cd.c:330 modules/graph/graph_cut.c:200
+#: modules/graph/graph_fdfit.c:433 modules/graph/graph_fit.c:451
+#: modules/graph/graph_stats.c:290 modules/graph/graph_stats.c:796
+#: modules/volume/volume_fdfit.c:487 modules/volume/volume_linestat.c:405
msgid "range|to"
msgstr "to"
@@ -6744,92 +6934,92 @@ msgstr "to"
msgid "_Draw whole circle"
msgstr "_Draw whole circle"
-#: modules/graph/graph_cd.c:382 modules/graph/graph_fdfit.c:491
-#: modules/graph/graph_fit.c:531 modules/process/fit-shape.c:522
-#: modules/volume/volume_fdfit.c:573
+#: modules/graph/graph_cd.c:382 modules/graph/graph_fdfit.c:498
+#: modules/graph/graph_fit.c:538 modules/process/fit-shape.c:523
+#: modules/volume/volume_fdfit.c:549
msgid "Save Fit Report"
msgstr "Save Fit Report"
#: modules/graph/graph_cd.c:529 modules/graph/graph_cd.c:1107
-#: modules/graph/graph_fdfit.c:709 modules/graph/graph_fit.c:763
-#: modules/volume/volume_fdfit.c:907
+#: modules/graph/graph_fdfit.c:725 modules/graph/graph_fit.c:779
+#: modules/volume/volume_fdfit.c:883
msgid "Fit"
msgstr "Fit"
-#: modules/graph/graph_cd.c:555 modules/graph/graph_fdfit.c:749
-#: modules/graph/graph_fit.c:803 modules/volume/volume_fdfit.c:978
-#: modules/volume/volume_fdfit.c:1085
+#: modules/graph/graph_cd.c:555 modules/graph/graph_fdfit.c:765
+#: modules/graph/graph_fit.c:819 modules/volume/volume_fdfit.c:954
+#: modules/volume/volume_fdfit.c:1061
msgid "It is necessary to select more data points than free fit parameters"
msgstr "It is necessary to select more data points than free fit parameters"
-#: modules/graph/graph_cd.c:710 modules/graph/graph_fdfit.c:798
-#: modules/graph/graph_fit.c:852 modules/process/entropy.c:554
-#: modules/tools/grainmeasure.c:217 modules/tools/readvalue.c:634
-#: modules/tools/readvalue.c:635 modules/tools/readvalue.c:636
-#: modules/tools/readvalue.c:637 modules/tools/roughness.c:975
-#: modules/tools/stats.c:727 modules/tools/stats.c:740
-#: modules/tools/stats.c:741 modules/volume/volume_fdfit.c:1134
-#: modules/xyz/xyz_drift.c:1099 modules/xyz/xyz_drift.c:1117
-#: modules/xyz/xyz_drift.c:1134
+#: modules/graph/graph_cd.c:710 modules/graph/graph_fdfit.c:814
+#: modules/graph/graph_fit.c:868 modules/graph/graph_stats.c:663
+#: modules/process/entropy.c:555 modules/tools/grainmeasure.c:217
+#: modules/tools/readvalue.c:634 modules/tools/readvalue.c:635
+#: modules/tools/readvalue.c:636 modules/tools/readvalue.c:637
+#: modules/tools/roughness.c:984 modules/tools/stats.c:723
+#: modules/tools/stats.c:736 modules/tools/stats.c:737
+#: modules/volume/volume_fdfit.c:1110 modules/xyz/xyz_drift.c:1099
+#: modules/xyz/xyz_drift.c:1117 modules/xyz/xyz_drift.c:1134
msgid "N.A."
msgstr "N.A."
-#: modules/graph/graph_cd.c:993 modules/graph/graph_fdfit.c:1363
-#: modules/graph/graph_fit.c:1500 modules/process/fit-shape.c:2078
-#: modules/volume/volume_fdfit.c:1720
+#: modules/graph/graph_cd.c:993 modules/graph/graph_fdfit.c:1381
+#: modules/graph/graph_fit.c:1518 modules/process/fit-shape.c:2060
+#: modules/volume/volume_fdfit.c:1696
msgid "===== Fit Results ====="
msgstr "===== Fit Results ====="
-#: modules/graph/graph_cd.c:997 modules/graph/graph_fdfit.c:1367
-#: modules/graph/graph_fit.c:1504 modules/process/fit-shape.c:2080
-#: modules/volume/volume_fdfit.c:1724
+#: modules/graph/graph_cd.c:997 modules/graph/graph_fdfit.c:1385
+#: modules/graph/graph_fit.c:1522 modules/process/fit-shape.c:2062
+#: modules/volume/volume_fdfit.c:1700
#, c-format
msgid "Data: %s\n"
msgstr "Data: %s\n"
-#: modules/graph/graph_cd.c:1000 modules/graph/graph_fdfit.c:1370
-#: modules/graph/graph_fit.c:1507 modules/process/fit-shape.c:2082
-#: modules/volume/volume_fdfit.c:1727
+#: modules/graph/graph_cd.c:1000 modules/graph/graph_fdfit.c:1388
+#: modules/graph/graph_fit.c:1525 modules/process/fit-shape.c:2064
+#: modules/volume/volume_fdfit.c:1703
#, c-format
msgid "Number of points: %d of %d\n"
msgstr "Number of points: %d of %d\n"
-#: modules/graph/graph_cd.c:1004 modules/graph/graph_fdfit.c:1374
-#: modules/graph/graph_fit.c:1511 modules/volume/volume_fdfit.c:1731
+#: modules/graph/graph_cd.c:1004 modules/graph/graph_fdfit.c:1392
+#: modules/graph/graph_fit.c:1529 modules/volume/volume_fdfit.c:1707
#, c-format
msgid "X range: %.*f to %.*f %s\n"
msgstr "X-range: %.*f to %.*f %s\n"
-#: modules/graph/graph_cd.c:1010 modules/graph/graph_fdfit.c:1380
-#: modules/graph/graph_fit.c:1517 modules/process/fit-shape.c:2084
-#: modules/volume/volume_fdfit.c:1737
+#: modules/graph/graph_cd.c:1010 modules/graph/graph_fdfit.c:1398
+#: modules/graph/graph_fit.c:1535 modules/process/fit-shape.c:2066
+#: modules/volume/volume_fdfit.c:1713
#, c-format
msgid "Fitted function: %s\n"
msgstr "Fitted function: %s\n"
-#: modules/graph/graph_cd.c:1013 modules/graph/graph_fdfit.c:1383
-#: modules/graph/graph_fit.c:1520 modules/process/fit-shape.c:2087
-#: modules/volume/volume_fdfit.c:1740
+#: modules/graph/graph_cd.c:1013 modules/graph/graph_fdfit.c:1401
+#: modules/graph/graph_fit.c:1538 modules/process/fit-shape.c:2069
+#: modules/volume/volume_fdfit.c:1716
msgid "Results\n"
msgstr "Results\n"
-#: modules/graph/graph_cut.c:88
+#: modules/graph/graph_cut.c:87
msgid "Cut graph"
msgstr "Cut graph"
-#: modules/graph/graph_cut.c:102
+#: modules/graph/graph_cut.c:101
msgid "/_Cut..."
msgstr "/_Cut..."
-#: modules/graph/graph_cut.c:105
+#: modules/graph/graph_cut.c:104
msgid "Extract part of graph into new one"
msgstr "Extract part of graph into new one"
-#: modules/graph/graph_cut.c:146
+#: modules/graph/graph_cut.c:145
msgid "Cut Graph"
msgstr "Cut Graph"
-#: modules/graph/graph_cut.c:180
+#: modules/graph/graph_cut.c:173
msgid "Cut _all curves"
msgstr "Cut _all curves"
@@ -6927,97 +7117,97 @@ msgstr "Export graph to a raster image"
msgid "Export to PNG"
msgstr "Export to PNG"
-#: modules/graph/graph_export_vector.c:35
+#: modules/graph/graph_export_vector.c:36
msgid "Exports graphs to PostScript"
msgstr "Exports graphs to PostScript"
-#: modules/graph/graph_export_vector.c:49
+#: modules/graph/graph_export_vector.c:50
msgid "/Export _PostScript"
msgstr "/Export _PostScript"
-#: modules/graph/graph_export_vector.c:52
+#: modules/graph/graph_export_vector.c:53
msgid "Export graph to PostScript"
msgstr "Export graph to PostScript"
-#: modules/graph/graph_export_vector.c:65
+#: modules/graph/graph_export_vector.c:66
msgid "Export to PostScript"
msgstr "Export to PostScript"
-#: modules/graph/graph_fdfit.c:168
+#: modules/graph/graph_fdfit.c:169
msgid "Fit force-distance data"
msgstr "Fit force-distance data"
-#: modules/graph/graph_fdfit.c:182
+#: modules/graph/graph_fdfit.c:183
msgid "/_Fit FD Curve..."
msgstr "/_Fit FD Curve..."
-#: modules/graph/graph_fdfit.c:185
+#: modules/graph/graph_fdfit.c:186
msgid "Fit a force-distance curve"
msgstr "Fit a force-distance curve"
-#: modules/graph/graph_fdfit.c:248 modules/volume/volume_fdfit.c:296
+#: modules/graph/graph_fdfit.c:251 modules/volume/volume_fdfit.c:296
msgid "Fit FD Curve"
msgstr "Fit FD Curve"
-#: modules/graph/graph_fdfit.c:255 modules/graph/graph_fit.c:274
-#: modules/process/fit-shape.c:397 modules/process/measure_lattice.c:257
-#: modules/volume/volume_fdfit.c:303
+#: modules/graph/graph_fdfit.c:258 modules/graph/graph_fit.c:277
+#: modules/process/correct_affine.c:347 modules/process/fit-shape.c:398
+#: modules/process/measure_lattice.c:247 modules/volume/volume_fdfit.c:303
msgid "verb|_Estimate"
msgstr "_Estimate"
-#: modules/graph/graph_fdfit.c:257 modules/graph/graph_fit.c:276
-#: modules/volume/volume_fdfit.c:305
+#: modules/graph/graph_fdfit.c:260 modules/graph/graph_fit.c:279
+#: modules/process/psf.c:239 modules/volume/volume_fdfit.c:305
msgid "_Plot Inits"
msgstr "_Plot Inits"
-#: modules/graph/graph_fdfit.c:359 modules/graph/graph_fit.c:373
-#: modules/process/fit-shape.c:790 modules/volume/volume_fdfit.c:444
+#: modules/graph/graph_fdfit.c:366 modules/graph/graph_fit.c:380
+#: modules/process/fit-shape.c:802 modules/volume/volume_fdfit.c:420
msgid "Fix"
msgstr "Fix"
-#: modules/graph/graph_fdfit.c:365 modules/graph/graph_fit.c:379
-#: modules/volume/volume_fdfit.c:450
+#: modules/graph/graph_fdfit.c:372 modules/graph/graph_fit.c:386
+#: modules/volume/volume_fdfit.c:426
msgid "Initial"
msgstr "Initial"
-#: modules/graph/graph_fdfit.c:376 modules/graph/graph_fit.c:394
-#: modules/volume/volume_fdfit.c:461
+#: modules/graph/graph_fdfit.c:383 modules/graph/graph_fit.c:401
+#: modules/volume/volume_fdfit.c:437
msgid "χ<sup>2</sup> result:"
msgstr "χ<sup>2</sup> result:"
-#: modules/graph/graph_fdfit.c:392 modules/graph/graph_fit.c:410
-#: modules/process/fit-shape.c:469 modules/process/fit-shape.c:2134
-#: modules/volume/volume_fdfit.c:477
+#: modules/graph/graph_fdfit.c:399 modules/graph/graph_fit.c:417
+#: modules/process/fit-shape.c:470 modules/process/fit-shape.c:2116
+#: modules/volume/volume_fdfit.c:453
msgid "Correlation Matrix"
msgstr "Correlation Matrix"
-#: modules/graph/graph_fdfit.c:447 modules/graph/graph_fit.c:485
-#: modules/process/wpour_mark.c:410 modules/volume/volume_fdfit.c:532
+#: modules/graph/graph_fdfit.c:454 modules/graph/graph_fit.c:492
+#: modules/process/wpour_mark.c:410 modules/volume/volume_fdfit.c:508
msgid "Instant:"
msgstr "Instant:"
-#: modules/graph/graph_fdfit.c:450 modules/graph/graph_fit.c:488
+#: modules/graph/graph_fdfit.c:457 modules/graph/graph_fit.c:495
msgid "esti_mate"
msgstr "esti_mate"
-#: modules/graph/graph_fdfit.c:457 modules/graph/graph_fit.c:495
-#: modules/volume/volume_fdfit.c:542
+#: modules/graph/graph_fdfit.c:464 modules/graph/graph_fit.c:502
+#: modules/volume/volume_fdfit.c:518
msgid "p_lot"
msgstr "p_lot"
-#: modules/graph/graph_fdfit.c:708 modules/graph/graph_fit.c:762
-#: modules/volume/volume_fdfit.c:906
+#: modules/graph/graph_fdfit.c:724 modules/graph/graph_fit.c:778
+#: modules/volume/volume_fdfit.c:882
msgid "Estimate"
msgstr "Estimate"
-#: modules/graph/graph_fdfit.c:1410 modules/graph/graph_fit.c:1547
-#: modules/volume/volume_fdfit.c:1768
+#: modules/graph/graph_fdfit.c:1428 modules/graph/graph_fit.c:1565
+#: modules/volume/volume_fdfit.c:1744
#, c-format
msgid "Residual sum: %g\n"
msgstr "Residual sum: %g\n"
-#: modules/graph/graph_fdfit.c:1413 modules/graph/graph_fit.c:1550
-#: modules/volume/volume_fdfit.c:1771
+#: modules/graph/graph_fdfit.c:1431 modules/graph/graph_fit.c:1568
+#: modules/volume/volume_fdfit.c:1747
msgid "Correlation matrix\n"
msgstr "Correlation matrix\n"
@@ -7033,27 +7223,27 @@ msgstr "/_Filter"
msgid "Remove noise from graph curves"
msgstr "Remove noise from graph curves"
-#: modules/graph/graph_fit.c:181
+#: modules/graph/graph_fit.c:182
msgid "Fit graph with function"
msgstr "Fit graph with function"
-#: modules/graph/graph_fit.c:195
+#: modules/graph/graph_fit.c:196
msgid "/_Fit Function..."
msgstr "/_Fit Function..."
-#: modules/graph/graph_fit.c:198
+#: modules/graph/graph_fit.c:199
msgid "Fit a function on graph data"
msgstr "Fit a function on graph data"
-#: modules/graph/graph_fit.c:386
+#: modules/graph/graph_fit.c:393
msgid "Copy all fitted values to estimates"
msgstr "Copy all fitted values to estimates"
-#: modules/graph/graph_fit.c:460
+#: modules/graph/graph_fit.c:467
msgid "Plot full range"
msgstr "Plot full range"
-#: modules/graph/graph_fit.c:470
+#: modules/graph/graph_fit.c:477
msgid "Create a difference graph"
msgstr "Create a difference graph"
@@ -7137,52 +7327,135 @@ msgstr "/Find _Peaks..."
msgid "Find graph curve peaks"
msgstr "Find graph curve peaks"
-#: modules/graph/graph_peaks.c:157
+#: modules/graph/graph_peaks.c:155
msgid "Prominence"
msgstr "Prominence"
-#: modules/graph/graph_peaks.c:161
+#: modules/graph/graph_peaks.c:159
msgid "Zero"
msgstr "Zero"
-#: modules/graph/graph_peaks.c:162
+#: modules/graph/graph_peaks.c:160
msgid "Bilateral minimum"
msgstr "Bilateral minimum"
-#: modules/graph/graph_peaks.c:178
+#: modules/graph/graph_peaks.c:176
msgid "Graph Peaks"
msgstr "Graph Peaks"
-#: modules/graph/graph_peaks.c:212
+#: modules/graph/graph_peaks.c:209
msgid "_Background type:"
msgstr "_Background type:"
-#: modules/graph/graph_peaks.c:227
+#: modules/graph/graph_peaks.c:219
msgid "Order peaks _by:"
msgstr "Order peaks _by:"
-#: modules/graph/graph_peaks.c:242
+#: modules/graph/graph_peaks.c:225
msgid "Number of _peaks:"
msgstr "Number of _peaks:"
-#: modules/graph/graph_peaks.c:263 modules/process/curvature.c:773
-#: modules/process/grain_stat.c:360 modules/process/measure_lattice.c:396
-#: modules/process/polylevel.c:607 modules/tools/distance.c:259
-#: modules/tools/roughness.c:818 modules/tools/stats.c:450
+#: modules/graph/graph_peaks.c:245 modules/graph/graph_stats.c:367
+#: modules/process/curvature.c:770 modules/process/grain_stat.c:360
+#: modules/process/measure_lattice.c:390 modules/process/polylevel.c:610
+#: modules/tools/distance.c:259 modules/tools/roughness.c:819
+#: modules/tools/stats.c:447
msgid "Save table to a file"
msgstr "Save table to a file"
-#: modules/graph/graph_peaks.c:267 modules/process/curvature.c:778
-#: modules/process/grain_stat.c:365 modules/process/measure_lattice.c:400
-#: modules/process/polylevel.c:617 modules/tools/distance.c:264
-#: modules/tools/roughness.c:823 modules/tools/stats.c:455
+#: modules/graph/graph_peaks.c:249 modules/graph/graph_stats.c:371
+#: modules/process/curvature.c:775 modules/process/grain_stat.c:365
+#: modules/process/measure_lattice.c:394 modules/process/polylevel.c:620
+#: modules/tools/distance.c:264 modules/tools/roughness.c:824
+#: modules/tools/stats.c:452
msgid "Copy table to clipboard"
msgstr "Copy table to clipboard"
-#: modules/graph/graph_peaks.c:654
+#: modules/graph/graph_peaks.c:618
msgid "Save Peak Parameters"
msgstr "Save Peak Parameters"
+#: modules/graph/graph_stats.c:148 modules/graph/graph_stats.c:161
+#: modules/tools/stats.c:205
+msgid "Average value:"
+msgstr "Average value:"
+
+#: modules/graph/graph_stats.c:149 modules/tools/stats.c:206
+msgid "Median:"
+msgstr "Median:"
+
+#: modules/graph/graph_stats.c:150
+msgid "Ra:"
+msgstr "Ra:"
+
+#: modules/graph/graph_stats.c:151
+msgid "Rms (Rq):"
+msgstr "Rms (Rq):"
+
+#: modules/graph/graph_stats.c:152 modules/tools/stats.c:210
+msgid "Skew:"
+msgstr "Skew:"
+
+#: modules/graph/graph_stats.c:153 modules/tools/stats.c:211
+msgid "Kurtosis:"
+msgstr "Kurtosis:"
+
+#: modules/graph/graph_stats.c:158
+msgid "Projected length:"
+msgstr "Projected length:"
+
+#: modules/graph/graph_stats.c:159
+msgid "Developed length:"
+msgstr "Developed length:"
+
+#: modules/graph/graph_stats.c:160 modules/tools/stats.c:214
+msgid "Variation:"
+msgstr "Variation:"
+
+#: modules/graph/graph_stats.c:162
+msgid "Area under curve:"
+msgstr "Area under curve:"
+
+#: modules/graph/graph_stats.c:163
+msgid "Positive area:"
+msgstr "Positive area:"
+
+#: modules/graph/graph_stats.c:164
+msgid "Negative area:"
+msgstr "Negative area:"
+
+#: modules/graph/graph_stats.c:165
+msgid "Root mean square:"
+msgstr "Root mean square:"
+
+#: modules/graph/graph_stats.c:171
+msgid "Calculates simple graph curve statistics."
+msgstr "Calculates simple graph curve statistics."
+
+#: modules/graph/graph_stats.c:185
+msgid "/_Statistics..."
+msgstr "/_Statistics..."
+
+#: modules/graph/graph_stats.c:188
+msgid "Calculate graph curve statistics"
+msgstr "Calculate graph curve statistics"
+
+#: modules/graph/graph_stats.c:241
+msgid "Graph Statistics"
+msgstr "Graph Statistics"
+
+#: modules/graph/graph_stats.c:320 modules/graph/graph_stats.c:807
+msgid "Simple Parameters"
+msgstr "Simple Parameters"
+
+#: modules/graph/graph_stats.c:342 modules/graph/graph_stats.c:826
+msgid "Integrals"
+msgstr "Integrals"
+
+#: modules/graph/graph_stats.c:686
+msgid "Save Curve Statistics"
+msgstr "Save Curve Statistics"
+
#: modules/layer/axis.c:143
msgid "Layer allowing selection of horizontal or vertical lines."
msgstr "Layer allowing selection of horizontal or vertical lines."
@@ -7322,25 +7595,25 @@ msgstr "Angle distribution"
msgid "Angle Distribution"
msgstr "Angle Distribution"
-#: modules/process/angle_dist.c:188 modules/process/slope_dist.c:373
+#: modules/process/angle_dist.c:188 modules/process/slope_dist.c:365
msgid "Output _size:"
msgstr "Output _size:"
-#: modules/process/angle_dist.c:193 modules/process/grain_wshed.c:206
+#: modules/process/angle_dist.c:193 modules/process/grain_wshed.c:207
msgid "_Number of steps:"
msgstr "_Number of steps:"
-#: modules/process/angle_dist.c:198 modules/process/slope_dist.c:380
+#: modules/process/angle_dist.c:198 modules/process/slope_dist.c:372
msgid "_Logarithmic value scale"
msgstr "_Logarithmic value scale"
#: modules/process/angle_dist.c:204 modules/process/entropy.c:231
-#: modules/process/slope_dist.c:390
+#: modules/process/slope_dist.c:382
msgid "Use local plane _fitting"
msgstr "Use local plane _fitting"
#: modules/process/angle_dist.c:213 modules/process/entropy.c:242
-#: modules/process/slope_dist.c:401
+#: modules/process/slope_dist.c:393
msgid "_Plane size:"
msgstr "_Plane size:"
@@ -7356,7 +7629,8 @@ msgstr "/M_ultidata/_Arithmetic..."
msgid "Arithmetic operations on data"
msgstr "Arithmetic operations on data"
-#: modules/process/arithmetic.c:202 modules/process/superresolution.c:349
+#: modules/process/arithmetic.c:202 modules/process/stitch.c:234
+#: modules/process/superresolution.c:348
msgid "Calculated"
msgstr "Calculated"
@@ -7372,7 +7646,7 @@ msgstr "_Expression:"
msgid "Operands"
msgstr "Operands"
-#: modules/process/arithmetic.c:300 modules/process/dimensions.h:483
+#: modules/process/arithmetic.c:300 modules/process/dimensions.h:465
msgid "Units"
msgstr "Units"
@@ -7393,15 +7667,15 @@ msgstr "Specify result units explicitly"
msgid "Expression contains unknown identifiers"
msgstr "Expression contains unknown identifiers"
-#: modules/process/arithmetic.c:569 modules/process/superresolution.c:300
+#: modules/process/arithmetic.c:569 modules/process/superresolution.c:299
msgid "Pixel dimensions differ"
msgstr "Pixel dimensions differ"
-#: modules/process/arithmetic.c:571 modules/process/superresolution.c:302
+#: modules/process/arithmetic.c:571 modules/process/superresolution.c:301
msgid "Lateral dimensions are different physical quantities"
msgstr "Lateral dimensions are different physical quantities"
-#: modules/process/arithmetic.c:574 modules/process/superresolution.c:305
+#: modules/process/arithmetic.c:574 modules/process/superresolution.c:304
msgid "Physical dimensions differ"
msgstr "Physical dimensions differ"
@@ -7506,8 +7780,8 @@ msgid "Generates surfaces by ballistic deposition."
msgstr "Generates surfaces by ballistic deposition."
#: modules/process/bdep_synth.c:164
-msgid "/S_ynthetic/_Ballistic..."
-msgstr "/S_ynthetic/_Ballistic..."
+msgid "/S_ynthetic/_Deposition/_Ballistic..."
+msgstr "/S_ynthetic/_Deposition/_Ballistic..."
#: modules/process/bdep_synth.c:168
msgid "Generate surface by ballistic deposition"
@@ -7515,20 +7789,23 @@ msgstr "Generate surface by ballistic deposition"
#: modules/process/bdep_synth.c:239 modules/process/bdep_synth.c:596
#: modules/process/calcoefs_simple.c:636 modules/process/col_synth.c:282
-#: modules/process/col_synth.c:733 modules/process/crosscor.c:819
-#: modules/process/crosscor.c:882 modules/process/deposit_synth.c:268
-#: modules/process/deposit_synth.c:859 modules/process/diff_synth.c:304
-#: modules/process/diff_synth.c:705 modules/process/domain_synth.c:255
-#: modules/process/domain_synth.c:745 modules/process/grain_wshed.c:429
+#: modules/process/col_synth.c:734 modules/process/crosscor.c:792
+#: modules/process/crosscor.c:855 modules/process/deposit_synth.c:268
+#: modules/process/deposit_synth.c:858 modules/process/diff_synth.c:304
+#: modules/process/diff_synth.c:704 modules/process/domain_synth.c:255
+#: modules/process/domain_synth.c:745 modules/process/fibre_synth.c:357
+#: modules/process/fibre_synth.c:872 modules/process/grain_wshed.c:433
#: modules/process/lat_synth.c:491 modules/process/mark_disconn.c:148
-#: modules/process/mark_disconn.c:373 modules/process/maskcor.c:330
-#: modules/process/mcrop.c:315 modules/process/merge.c:1072
-#: modules/process/nanoindent_adjust.c:323 modules/process/neural.c:1272
-#: modules/process/pid.c:338 modules/process/superresolution.c:416
-#: modules/process/superresolution.c:505 modules/process/tip_blind.c:781
-#: modules/process/tipops.c:320 modules/process/xydenoise.c:213
-#: modules/volume/volume_kmeans.c:403 modules/volume/volume_kmedians.c:365
-#: modules/xyz/xyz_raster.c:1028 modules/xyz/xyz_raster.c:1044
+#: modules/process/mark_disconn.c:361 modules/process/maskcor.c:334
+#: modules/process/mcrop.c:314 modules/process/merge.c:1072
+#: modules/process/nanoindent_adjust.c:324 modules/process/neural.c:1279
+#: modules/process/pid.c:339 modules/process/sphere-revolve.c:269
+#: modules/process/superresolution.c:415 modules/process/superresolution.c:504
+#: modules/process/tip_blind.c:778 modules/process/tipops.c:320
+#: modules/process/wave_synth.c:305 modules/process/wave_synth.c:747
+#: modules/process/xydenoise.c:214 modules/volume/volume_kmeans.c:397
+#: modules/volume/volume_kmedians.c:363 modules/xyz/xyz_raster.c:997
+#: modules/xyz/xyz_raster.c:1013
msgid "Initializing..."
msgstr "Initialising..."
@@ -7537,10 +7814,11 @@ msgstr "Initialising..."
#: modules/process/deposit_synth.c:531 modules/process/deposit_synth.c:544
#: modules/process/diff_synth.c:342 modules/process/domain_synth.c:319
#: modules/process/domain_synth.c:327 modules/process/fbm_synth.c:278
-#: modules/process/fft_synth.c:314 modules/process/lat_synth.c:529
-#: modules/process/lno_synth.c:407 modules/process/noise_synth.c:311
-#: modules/process/obj_synth.c:407 modules/process/pat_synth.c:357
-#: modules/process/wave_synth.c:323
+#: modules/process/fft_synth.c:314 modules/process/fibre_synth.c:394
+#: modules/process/lat_synth.c:529 modules/process/lno_synth.c:405
+#: modules/process/noise_synth.c:309 modules/process/obj_synth.c:404
+#: modules/process/pat_synth.c:357 modules/process/phase_synth.c:518
+#: modules/process/wave_synth.c:342
msgid "Generated"
msgstr "Generated"
@@ -7559,50 +7837,56 @@ msgid "Progressive preview"
msgstr "Progressive preview"
#: modules/process/bdep_synth.c:407 modules/process/col_synth.c:458
-#: modules/process/deposit_synth.c:412 modules/process/diff_synth.c:477
+#: modules/process/deposit_synth.c:413 modules/process/diff_synth.c:477
#: modules/process/domain_synth.c:430 modules/process/fbm_synth.c:360
-#: modules/process/fft_synth.c:398 modules/process/lat_synth.c:626
-#: modules/process/lno_synth.c:490 modules/process/noise_synth.c:394
-#: modules/process/obj_synth.c:498 modules/process/pat_synth.c:442
-#: modules/process/wave_synth.c:407
+#: modules/process/fft_synth.c:398 modules/process/fibre_synth.c:479
+#: modules/process/lat_synth.c:626 modules/process/lno_synth.c:488
+#: modules/process/mfm_current.c:383 modules/process/mfm_parallel.c:384
+#: modules/process/noise_synth.c:392 modules/process/obj_synth.c:495
+#: modules/process/pat_synth.c:442 modules/process/phase_synth.c:263
+#: modules/process/wave_synth.c:426
msgid "Dimensions"
msgstr "Dimensions"
#: modules/process/bdep_synth.c:416 modules/process/col_synth.c:467
-#: modules/process/deposit_synth.c:422 modules/process/diff_synth.c:486
+#: modules/process/deposit_synth.c:425 modules/process/diff_synth.c:486
#: modules/process/domain_synth.c:438 modules/process/fbm_synth.c:371
-#: modules/process/fft_synth.c:409 modules/process/lno_synth.c:501
-#: modules/process/noise_synth.c:405 modules/process/obj_synth.c:509
-#: modules/process/pat_synth.c:454 modules/process/wave_synth.c:418
+#: modules/process/fft_synth.c:409 modules/process/fibre_synth.c:490
+#: modules/process/lno_synth.c:499 modules/process/mfm_current.c:412
+#: modules/process/mfm_parallel.c:411 modules/process/noise_synth.c:403
+#: modules/process/obj_synth.c:506 modules/process/pat_synth.c:454
+#: modules/process/phase_synth.c:274 modules/process/wave_synth.c:437
msgid "Generator"
msgstr "Generator"
#: modules/process/bdep_synth.c:422 modules/process/col_synth.c:473
-#: modules/process/diff_synth.c:492 modules/process/lno_synth.c:1041
-#: modules/process/obj_synth.c:520
+#: modules/process/deposit_synth.c:455 modules/process/diff_synth.c:492
+#: modules/process/fibre_synth.c:502 modules/process/lno_synth.c:1041
+#: modules/process/obj_synth.c:518
msgid "Co_verage:"
msgstr "Co_verage:"
#: modules/process/bdep_synth.c:434 modules/process/diff_synth.c:512
-#: modules/process/domain_synth.c:514 modules/process/fbm_synth.c:412
-#: modules/process/fft_synth.c:418 modules/process/lat_synth.c:758
-#: modules/process/lno_synth.c:537 modules/process/noise_synth.c:437
-#: modules/process/obj_synth.c:579 modules/process/wave_synth.c:453
-msgid "_Like Current Channel"
-msgstr "_Like Current Channel"
-
-#: modules/process/bdep_synth.c:453 modules/process/col_synth.c:541
-#: modules/process/diff_synth.c:562
+#: modules/process/domain_synth.c:514 modules/process/fbm_synth.c:411
+#: modules/process/fft_synth.c:418 modules/process/fibre_synth.c:544
+#: modules/process/lat_synth.c:758 modules/process/lno_synth.c:535
+#: modules/process/noise_synth.c:435 modules/process/obj_synth.c:577
+#: modules/process/phase_synth.c:302 modules/process/wave_synth.c:472
+msgid "_Like Current Image"
+msgstr "_Like Current Image"
+
+#: modules/process/bdep_synth.c:453 modules/process/col_synth.c:542
+#: modules/process/diff_synth.c:561
msgid "Evolution"
msgstr "Evolution"
-#: modules/process/bdep_synth.c:456 modules/process/col_synth.c:544
-#: modules/process/diff_synth.c:565
+#: modules/process/bdep_synth.c:456 modules/process/col_synth.c:545
+#: modules/process/diff_synth.c:564
msgid "Plot graphs:"
msgstr "Plot graphs:"
-#: modules/process/bdep_synth.c:654 modules/process/col_synth.c:840
-#: modules/process/diff_synth.c:782
+#: modules/process/bdep_synth.c:654 modules/process/col_synth.c:841
+#: modules/process/diff_synth.c:781
msgid "Depositing particles..."
msgstr "Depositing particles..."
@@ -7637,8 +7921,8 @@ msgstr "Load Calibration Data"
msgid "Calibration name:"
msgstr "Calibration name:"
-#: modules/process/calcoefs_load.c:254 modules/volume/volume_extract.c:433
-#: modules/volume/volume_extract.c:514
+#: modules/process/calcoefs_load.c:254 modules/volume/volume_extract.c:421
+#: modules/volume/volume_extract.c:501
msgid "No data loaded"
msgstr "No data loaded"
@@ -7662,7 +7946,7 @@ msgstr "Append"
msgid "Load calibration data"
msgstr "Load calibration data"
-#: modules/process/calcoefs_load.c:364 modules/volume/volume_extract.c:1073
+#: modules/process/calcoefs_load.c:364 modules/volume/volume_extract.c:1059
#, c-format
msgid "Error loading file '%s'"
msgstr "Error loading file ‘%s’"
@@ -7756,7 +8040,7 @@ msgstr "Simple error mapping"
msgid "Simple Error Map"
msgstr "Simple Error Map"
-#: modules/process/calcoefs_simple.c:343 modules/process/calcoefs_stage.c:146
+#: modules/process/calcoefs_simple.c:343 modules/process/calcoefs_stage.c:142
#: modules/process/superresolution.c:156
msgid "Operands:"
msgstr "Operands:"
@@ -7770,14 +8054,14 @@ msgid "Detail"
msgstr "Detail"
#: modules/process/calcoefs_simple.c:371 modules/process/calcoefs_view.c:491
-#: modules/process/calibrate.c:496 modules/process/crosscor.c:289
-#: modules/volume/volume_calibrate.c:478
+#: modules/process/calibrate.c:481 modules/process/crosscor.c:276
+#: modules/volume/volume_calibrate.c:460
msgid "_X offset:"
msgstr "_X offset:"
#: modules/process/calcoefs_simple.c:398 modules/process/calcoefs_view.c:517
-#: modules/process/calibrate.c:509 modules/process/crosscor.c:300
-#: modules/volume/volume_calibrate.c:491
+#: modules/process/calibrate.c:488 modules/process/crosscor.c:284
+#: modules/volume/volume_calibrate.c:467
msgid "_Y offset:"
msgstr "_Y offset:"
@@ -7790,7 +8074,7 @@ msgid "Y p_eriod:"
msgstr "Y p_eriod:"
#: modules/process/calcoefs_simple.c:438 modules/process/calcoefs_view.c:529
-#: modules/volume/volume_calibrate.c:505
+#: modules/volume/volume_calibrate.c:474
msgid "_Z offset:"
msgstr "_Z offset:"
@@ -7821,25 +8105,25 @@ msgstr[1] "%d objects found"
msgid "Search canceled"
msgstr "Search cancelled"
-#: modules/process/calcoefs_simple.c:638 modules/process/crosscor.c:862
-#: modules/process/maskcor.c:332 modules/process/mcrop.c:317
+#: modules/process/calcoefs_simple.c:638 modules/process/crosscor.c:835
+#: modules/process/maskcor.c:336 modules/process/mcrop.c:316
#: modules/process/merge.c:1074
msgid "Correlating..."
msgstr "Correlating..."
-#: modules/process/calcoefs_stage.c:76
+#: modules/process/calcoefs_stage.c:72
msgid "Digital AFM data recalibration"
msgstr "Digital AFM data recalibration"
-#: modules/process/calcoefs_stage.c:90
+#: modules/process/calcoefs_stage.c:86
msgid "/Cali_bration/_3D Calibration/_Get From Stage map..."
msgstr "/Cali_bration/_3D Calibration/_Get From Stage map..."
-#: modules/process/calcoefs_stage.c:94
+#: modules/process/calcoefs_stage.c:90
msgid "Stage error mapping"
msgstr "Stage error mapping"
-#: modules/process/calcoefs_stage.c:131
+#: modules/process/calcoefs_stage.c:127
msgid "Stage Error Map"
msgstr "Stage Error Map"
@@ -7895,14 +8179,16 @@ msgstr "Z position:"
msgid "Crop to actual data"
msgstr "Crop to actual data"
-#: modules/process/calcoefs_view.c:567 modules/process/coerce.c:369
-#: modules/process/deposit_synth.c:641 modules/process/edge.c:705
-#: modules/process/fft_filter_1d.c:299 modules/process/grain_edge.c:290
-#: modules/process/grain_filter.c:347 modules/process/grain_mark.c:372
-#: modules/process/mark_with.c:318 modules/process/polydistort.c:316
-#: modules/process/scars.c:386 modules/process/slope_dist.c:407
-#: modules/process/synth.h:513 modules/volume/volume_extract.c:424
-#: modules/volume/volume_extract.c:505 modules/volume/volume_linestat.c:422
+#: modules/process/calcoefs_view.c:567 modules/process/coerce.c:368
+#: modules/process/deposit_synth.c:642 modules/process/edge.c:705
+#: modules/process/fft_filter_1d.c:301 modules/process/grain_edge.c:277
+#: modules/process/grain_filter.c:346 modules/process/grain_mark.c:357
+#: modules/process/mark_with.c:322 modules/process/mfm_field.c:420
+#: modules/process/mfm_shift.c:216 modules/process/polydistort.c:319
+#: modules/process/psf.c:309 modules/process/scars.c:421
+#: modules/process/slope_dist.c:400 modules/process/synth.h:542
+#: modules/volume/volume_extract.c:411 modules/volume/volume_extract.c:491
+#: modules/volume/volume_linestat.c:427
msgid "I_nstant updates"
msgstr "I_nstant updates"
@@ -7943,27 +8229,27 @@ msgstr "Error: out of range."
msgid "Building mesh..."
msgstr "Building mesh..."
-#: modules/process/calcoefs_view.c:1120 modules/tools/profile.c:1818
+#: modules/process/calcoefs_view.c:1120 modules/tools/profile.c:1867
msgid "X correction"
msgstr "X correction"
-#: modules/process/calcoefs_view.c:1121 modules/tools/profile.c:1819
+#: modules/process/calcoefs_view.c:1121 modules/tools/profile.c:1868
msgid "Y correction"
msgstr "Y correction"
-#: modules/process/calcoefs_view.c:1122 modules/tools/profile.c:1820
+#: modules/process/calcoefs_view.c:1122 modules/tools/profile.c:1869
msgid "Z correction"
msgstr "Z correction"
-#: modules/process/calcoefs_view.c:1123 modules/tools/profile.c:1821
+#: modules/process/calcoefs_view.c:1123 modules/tools/profile.c:1870
msgid "X uncertainty"
msgstr "X uncertainty"
-#: modules/process/calcoefs_view.c:1124 modules/tools/profile.c:1822
+#: modules/process/calcoefs_view.c:1124 modules/tools/profile.c:1871
msgid "Y uncertainty"
msgstr "Y uncertainty"
-#: modules/process/calcoefs_view.c:1125 modules/tools/profile.c:1823
+#: modules/process/calcoefs_view.c:1125 modules/tools/profile.c:1872
msgid "Z uncertainty"
msgstr "Z uncertainty"
@@ -7991,78 +8277,78 @@ msgstr "Snap to planes"
msgid "Delaunay"
msgstr "Delaunay"
-#: modules/process/calibrate.c:180
+#: modules/process/calibrate.c:172
msgid "Recalibrates scan lateral dimensions or value range."
msgstr "Recalibrates scan lateral dimensions or value range."
-#: modules/process/calibrate.c:194
+#: modules/process/calibrate.c:186
msgid "/_Basic Operations/_Dimensions and Units..."
msgstr "/_Basic Operations/_Dimensions and Units..."
-#: modules/process/calibrate.c:198 modules/volume/volume_calibrate.c:193
+#: modules/process/calibrate.c:190 modules/volume/volume_calibrate.c:193
msgid "Change physical dimensions, units or value scale"
msgstr "Change physical dimensions, units or value scale"
-#: modules/process/calibrate.c:357 modules/volume/volume_calibrate.c:355
+#: modules/process/calibrate.c:349 modules/volume/volume_calibrate.c:355
msgid "Recalibrated Data"
msgstr "Recalibrated Data"
-#: modules/process/calibrate.c:390
+#: modules/process/calibrate.c:382
msgid "Dimensions and Units"
msgstr "Dimensions and Units"
-#: modules/process/calibrate.c:411 modules/volume/volume_calibrate.c:389
+#: modules/process/calibrate.c:405 modules/volume/volume_calibrate.c:391
msgid "New Real Dimensions"
msgstr "New Real Dimensions"
-#: modules/process/calibrate.c:417
+#: modules/process/calibrate.c:415
msgid "_Match pixel size:"
msgstr "_Match pixel size:"
-#: modules/process/calibrate.c:444 modules/volume/volume_calibrate.c:394
+#: modules/process/calibrate.c:447 modules/volume/volume_calibrate.c:397
msgid "_X range:"
msgstr "_X range:"
-#: modules/process/calibrate.c:473 modules/volume/volume_calibrate.c:421
+#: modules/process/calibrate.c:467 modules/volume/volume_calibrate.c:417
msgid "_Y range:"
msgstr "_Y range:"
-#: modules/process/calibrate.c:489
+#: modules/process/calibrate.c:472
msgid "_Square samples"
msgstr "_Square samples"
-#: modules/process/calibrate.c:524 modules/volume/volume_calibrate.c:521
+#: modules/process/calibrate.c:496 modules/volume/volume_calibrate.c:480
msgid "Value Range"
msgstr "Value Range"
-#: modules/process/calibrate.c:529 modules/volume/volume_calibrate.c:448
+#: modules/process/calibrate.c:502 modules/volume/volume_calibrate.c:437
msgid "_Z range:"
msgstr "_Z range:"
-#: modules/process/calibrate.c:558
+#: modules/process/calibrate.c:524
msgid "Z shi_ft:"
msgstr "Z shi_ft:"
-#: modules/process/calibrate.c:573 modules/volume/volume_calibrate.c:570
+#: modules/process/calibrate.c:533 modules/volume/volume_calibrate.c:515
msgid "Calibration Coefficients"
msgstr "Calibration Coefficients"
-#: modules/process/calibrate.c:580 modules/volume/volume_calibrate.c:577
+#: modules/process/calibrate.c:538 modules/volume/volume_calibrate.c:520
msgid "_X calibration factor:"
msgstr "_X calibration factor:"
-#: modules/process/calibrate.c:590 modules/volume/volume_calibrate.c:585
+#: modules/process/calibrate.c:545 modules/volume/volume_calibrate.c:527
msgid "_Y calibration factor:"
msgstr "_Y calibration factor:"
-#: modules/process/calibrate.c:600 modules/volume/volume_calibrate.c:593
+#: modules/process/calibrate.c:552 modules/volume/volume_calibrate.c:534
msgid "_Z calibration factor:"
msgstr "_Z calibration factor:"
-#: modules/process/calibrate.c:613 modules/process/extend.c:293
-#: modules/tools/crop.c:213
-msgid "Create new channel"
-msgstr "Create new channel"
+#: modules/process/calibrate.c:567 modules/process/drift.c:389
+#: modules/process/extend.c:293 modules/tools/crop.c:213
+msgid "Create new image"
+msgstr "Create new image"
#: modules/process/coerce.c:159
msgid "Transforms surfaces to have prescribed statistical properties."
@@ -8081,13 +8367,13 @@ msgid "Coerced"
msgstr "Coerced"
#: modules/process/coerce.c:225 modules/process/coerce.c:326
-#: modules/process/fbm_synth.c:475 modules/process/lno_synth.c:256
-#: modules/process/noise_synth.c:183
+#: modules/process/fbm_synth.c:474 modules/process/lno_synth.c:254
+#: modules/process/noise_synth.c:181
msgid "distribution|Uniform"
msgstr "Uniform"
-#: modules/process/coerce.c:226 modules/process/fbm_synth.c:476
-#: modules/process/lno_synth.c:246 modules/process/noise_synth.c:173
+#: modules/process/coerce.c:226 modules/process/fbm_synth.c:475
+#: modules/process/lno_synth.c:244 modules/process/noise_synth.c:171
msgid "distribution|Gaussian"
msgstr "Gaussian"
@@ -8136,12 +8422,12 @@ msgid "Number of maxima"
msgstr "Number of maxima"
#: modules/process/col_synth.c:173 modules/tools/linestats.c:178
-#: modules/volume/volume_linestat.c:154
+#: modules/volume/volume_linestat.c:156
msgid "Skew"
msgstr "Skew"
#: modules/process/col_synth.c:174 modules/tools/linestats.c:179
-#: modules/tools/roughness.c:386 modules/volume/volume_linestat.c:155
+#: modules/tools/roughness.c:387 modules/volume/volume_linestat.c:157
msgid "Kurtosis"
msgstr "Kurtosis"
@@ -8154,8 +8440,8 @@ msgid "Generates columnar surfaces by a simple growth algorithm."
msgstr "Generates columnar surfaces by a simple growth algorithm."
#: modules/process/col_synth.c:208
-msgid "/S_ynthetic/_Columnar..."
-msgstr "/S_ynthetic/_Columnar..."
+msgid "/S_ynthetic/_Deposition/_Columnar..."
+msgstr "/S_ynthetic/_Deposition/_Columnar..."
#: modules/process/col_synth.c:212
msgid "Generate columnar surface"
@@ -8177,7 +8463,7 @@ msgstr "Incidence"
msgid "Inclination"
msgstr "Inclination"
-#: modules/process/col_synth.c:509 modules/process/crosscor.c:1063
+#: modules/process/col_synth.c:509 modules/process/crosscor.c:1036
msgid "Direction"
msgstr "Direction"
@@ -8185,15 +8471,15 @@ msgstr "Direction"
msgid "Relaxation type:"
msgstr "Relaxation type:"
-#: modules/process/col_synth.c:528
+#: modules/process/col_synth.c:529
msgid "_Melting:"
msgstr "_Melting:"
-#: modules/process/col_synth.c:612
+#: modules/process/col_synth.c:613
msgid "Weak"
msgstr "Weak"
-#: modules/process/col_synth.c:613
+#: modules/process/col_synth.c:614
msgid "Strong"
msgstr "Strong"
@@ -8225,8 +8511,8 @@ msgstr "General convolution filter"
msgid "Convolution Filter"
msgstr "Convolution Filter"
-#: modules/process/convolution_filter.c:269 modules/tools/filter.c:170
-#: modules/tools/filter.c:274
+#: modules/process/convolution_filter.c:269 modules/tools/filter.c:171
+#: modules/tools/filter.c:275
msgid "Filter"
msgstr "Filter"
@@ -8254,7 +8540,7 @@ msgstr "HSym"
msgid "VSym"
msgstr "VSym"
-#: modules/process/correct_affine.c:231
+#: modules/process/correct_affine.c:220
msgid ""
"Corrects affine distortion of images by matching image Bravais lattice to "
"the true one."
@@ -8262,101 +8548,109 @@ msgstr ""
"Corrects affine distortion of images by matching image Bravais lattice to "
"the true one."
-#: modules/process/correct_affine.c:246
+#: modules/process/correct_affine.c:235
msgid "/_Distortion/_Affine..."
msgstr "/_Distortion/_Affine..."
-#: modules/process/correct_affine.c:250
+#: modules/process/correct_affine.c:239
msgid "Correct affine distortion"
msgstr "Correct affine distortion"
-#: modules/process/correct_affine.c:298
+#: modules/process/correct_affine.c:309 modules/process/correct_affine.c:634
+msgid "Corrected"
+msgstr "Corrected"
+
+#: modules/process/correct_affine.c:343
msgid "Affine Correction"
msgstr "Affine Correction"
-#: modules/process/correct_affine.c:351 modules/process/fft_filter_2d.c:530
+#: modules/process/correct_affine.c:349 modules/process/measure_lattice.c:249
+msgid "_Refine"
+msgstr "_Refine"
+
+#: modules/process/correct_affine.c:399 modules/process/fft_filter_2d.c:530
msgid "Preview Options"
msgstr "Preview Options"
-#: modules/process/correct_affine.c:356 modules/process/fft_filter_2d.c:535
-#: modules/process/measure_lattice.c:321
+#: modules/process/correct_affine.c:404 modules/process/fft_filter_2d.c:535
+#: modules/process/measure_lattice.c:311
msgid "Display:"
msgstr "Display:"
-#: modules/process/correct_affine.c:364 modules/process/measure_lattice.c:329
+#: modules/process/correct_affine.c:412 modules/process/measure_lattice.c:319
#: modules/tools/grainremover.c:109
msgid "_Data"
msgstr "_Data"
-#: modules/process/correct_affine.c:365
+#: modules/process/correct_affine.c:413
msgid "2D _ACF"
msgstr "2D _ACF"
-#: modules/process/correct_affine.c:366 modules/process/drift.c:365
+#: modules/process/correct_affine.c:414 modules/process/drift.c:364
msgid "Correc_ted data"
msgstr "Correc_ted data"
-#: modules/process/correct_affine.c:377
+#: modules/process/correct_affine.c:425
msgid "ACF zoom:"
msgstr "ACF zoom:"
-#: modules/process/correct_affine.c:394 modules/process/measure_lattice.c:372
+#: modules/process/correct_affine.c:442 modules/process/measure_lattice.c:346
+msgid "Interpolate _horizontal ACF"
+msgstr "Interpolate _horizontal ACF"
+
+#: modules/process/correct_affine.c:452 modules/process/measure_lattice.c:372
msgid "Lattice Vectors"
msgstr "Lattice Vectors"
#. TRANSLATORS: Correct is an adjective here.
-#: modules/process/correct_affine.c:419
+#: modules/process/correct_affine.c:469
msgid "Correct Lattice"
msgstr "Correct Lattice"
-#: modules/process/correct_affine.c:423
+#: modules/process/correct_affine.c:473
msgid "_Lattice type:"
msgstr "_Lattice type:"
-#: modules/process/correct_affine.c:430
+#: modules/process/correct_affine.c:480
msgid "User defined"
msgstr "User-defined"
-#: modules/process/correct_affine.c:445
+#: modules/process/correct_affine.c:495
msgid "_Different lengths"
msgstr "_Different lengths"
-#: modules/process/correct_affine.c:474
+#: modules/process/correct_affine.c:524
msgid "Image for _ACF:"
msgstr "Image for _ACF:"
-#: modules/process/correct_affine.c:501
+#: modules/process/correct_affine.c:551
msgid "_Scaling:"
msgstr "_Scaling:"
-#: modules/process/correct_affine.c:508
+#: modules/process/correct_affine.c:558
msgid "Exactly as specified"
msgstr "Exactly as specified"
-#: modules/process/correct_affine.c:509
+#: modules/process/correct_affine.c:560
msgid "Preserve area"
msgstr "Preserve area"
-#: modules/process/correct_affine.c:510
+#: modules/process/correct_affine.c:562
msgid "Preserve X scale"
msgstr "Preserve X-scale"
-#: modules/process/correct_affine.c:561
-msgid "Corrected"
-msgstr "Corrected"
+#: modules/process/correct_affine.c:571 modules/process/drift.c:379
+msgid "_Apply to all compatible images"
+msgstr "_Apply to all compatible images"
-#: modules/process/correct_affine.c:617 modules/process/measure_lattice.c:489
+#: modules/process/correct_affine.c:693 modules/process/measure_lattice.c:482
msgid "length"
msgstr "length"
-#: modules/process/correct_affine.c:624 modules/process/measure_lattice.c:496
+#: modules/process/correct_affine.c:700 modules/process/measure_lattice.c:489
msgid "angle"
msgstr "angle"
-#: modules/process/correct_affine.c:717
-msgid "Re_fine"
-msgstr "Re_fine"
-
#: modules/process/crosscor.c:157
msgid "Calculates cross-correlation of two data fields."
msgstr "Calculates cross-correlation of two data fields."
@@ -8381,196 +8675,198 @@ msgstr "Co_rrelate with:"
msgid "Search size"
msgstr "Search size"
-#: modules/process/crosscor.c:272
-msgid "Global offset of 2nd channel"
-msgstr "Global offset of 2nd channel"
-
-#: modules/process/crosscor.c:277
+#: modules/process/crosscor.c:267
msgid "_Guess"
msgstr "_Guess"
-#: modules/process/crosscor.c:311
+#: modules/process/crosscor.c:268
+msgid "Global offset of 2nd channel"
+msgstr "Global offset of 2nd channel"
+
+#: modules/process/crosscor.c:292
msgid "Window size"
msgstr "Window size"
-#: modules/process/crosscor.c:319
+#: modules/process/crosscor.c:300
msgid "W_idth:"
msgstr "W_idth:"
-#: modules/process/crosscor.c:329
+#: modules/process/crosscor.c:308
msgid "Hei_ght:"
msgstr "Hei_ght:"
-#: modules/process/crosscor.c:342 modules/process/fft.c:405
+#: modules/process/crosscor.c:319 modules/process/fft.c:403
#: modules/process/psdf_logphi.c:268
msgid "_Windowing type:"
msgstr "_Windowing type:"
-#: modules/process/crosscor.c:350
+#: modules/process/crosscor.c:327
msgid "All"
msgstr "All"
-#: modules/process/crosscor.c:351
+#: modules/process/crosscor.c:328
msgid "Absolute"
msgstr "Absolute"
-#: modules/process/crosscor.c:352
+#: modules/process/crosscor.c:329
msgid "X Distance"
msgstr "X Distance"
-#: modules/process/crosscor.c:353
+#: modules/process/crosscor.c:330
msgid "Y Distance"
msgstr "Y Distance"
-#: modules/process/crosscor.c:355 modules/process/crosscor.c:1077
+#: modules/process/crosscor.c:332 modules/process/crosscor.c:1050
msgid "Score"
msgstr "Score"
-#: modules/process/crosscor.c:357 modules/process/fft.c:395
-#: modules/process/fit-shape.c:688 modules/process/maskcor.c:176
+#: modules/process/crosscor.c:334 modules/process/fft.c:393
+#: modules/process/fit-shape.c:699 modules/process/maskcor.c:177
+#: modules/process/mfm_current.c:455 modules/process/mfm_field.c:373
+#: modules/process/mfm_parallel.c:466
msgid "Output _type:"
msgstr "Output _type:"
-#: modules/process/crosscor.c:363
+#: modules/process/crosscor.c:340
msgid "Add _low score results mask"
msgstr "Add _low-score results mask"
-#: modules/process/crosscor.c:374 modules/process/grain_wshed.c:223
-#: modules/process/maskcor.c:188
+#: modules/process/crosscor.c:351 modules/process/grain_wshed.c:225
+#: modules/process/maskcor.c:191
msgid "T_hreshold:"
msgstr "T_hreshold:"
-#: modules/process/crosscor.c:381
+#: modules/process/crosscor.c:359
msgid "Multichannel cross-corelation"
msgstr "Multi-channel cross-corelation"
-#: modules/process/crosscor.c:400
+#: modules/process/crosscor.c:378
msgid "Second _source data:"
msgstr "Second _source data:"
-#: modules/process/crosscor.c:417
+#: modules/process/crosscor.c:394
msgid "Correlate with:"
msgstr "Correlate with:"
-#: modules/process/crosscor.c:424
+#: modules/process/crosscor.c:402
msgid "Postprocess:"
msgstr "Post-process:"
-#: modules/process/crosscor.c:431
-msgid "Apply Ga_ussian filter of width: "
-msgstr "Apply Ga_ussian filter of width: "
+#: modules/process/crosscor.c:411
+msgid "Apply Ga_ussian filter of width:"
+msgstr "Apply Ga_ussian filter of width:"
-#: modules/process/crosscor.c:451
+#: modules/process/crosscor.c:424
msgid "Extend results to borders"
msgstr "Extend results to borders"
-#: modules/process/crosscor.c:461
+#: modules/process/crosscor.c:433
msgid "Create corrected data from 2nd channel"
msgstr "Create corrected data from 2nd channel"
-#: modules/process/crosscor.c:860
+#: modules/process/crosscor.c:833
msgid "Correlating first set..."
msgstr "Correlating the first set..."
-#: modules/process/crosscor.c:892
+#: modules/process/crosscor.c:865
msgid "Correlating second set..."
msgstr "Correlating the second set..."
-#: modules/process/crosscor.c:999
+#: modules/process/crosscor.c:972
msgid "Corrected 2nd channel"
msgstr "Corrected 2nd channel"
-#: modules/process/crosscor.c:1023
+#: modules/process/crosscor.c:996
msgid "X difference"
msgstr "X difference"
-#: modules/process/crosscor.c:1037
+#: modules/process/crosscor.c:1010
msgid "Y difference"
msgstr "Y difference"
-#: modules/process/crosscor.c:1050
+#: modules/process/crosscor.c:1023
msgid "Absolute difference"
msgstr "Absolute difference"
-#: modules/process/curvature.c:131
+#: modules/process/curvature.c:130
msgid "Center value"
msgstr "Centre value"
-#: modules/process/curvature.c:132
+#: modules/process/curvature.c:131
msgid "Curvature radius 1"
msgstr "Curvature radius 1"
-#: modules/process/curvature.c:133
+#: modules/process/curvature.c:132
msgid "Curvature radius 2"
msgstr "Curvature radius 2"
-#: modules/process/curvature.c:134
+#: modules/process/curvature.c:133
msgid "Direction 1"
msgstr "Direction 1"
-#: modules/process/curvature.c:135
+#: modules/process/curvature.c:134
msgid "Direction 2"
msgstr "Direction 2"
-#: modules/process/curvature.c:163
+#: modules/process/curvature.c:162
msgid "Calculates overall curvature."
msgstr "Calculates overall curvature."
-#: modules/process/curvature.c:177
+#: modules/process/curvature.c:176
msgid "/_Level/_Curvature..."
msgstr "/_Level/_Curvature..."
-#: modules/process/curvature.c:181
+#: modules/process/curvature.c:180
msgid "Calculate overall curvature"
msgstr "Calculate overall curvature"
-#: modules/process/curvature.c:211 modules/process/facet-level.c:118
+#: modules/process/curvature.c:210 modules/process/facet-level.c:118
#: modules/process/semsim.c:165
#, c-format
msgid "%s: Lateral dimensions and value must be the same physical quantity."
msgstr "%s: Lateral dimensions and value must be the same physical quantity."
-#: modules/process/curvature.c:445
+#: modules/process/curvature.c:447
msgid "Curvature Sections"
msgstr "Curvature Sections"
-#: modules/process/curvature.c:653
+#: modules/process/curvature.c:655
msgid "Output Type"
msgstr "Output Type"
-#: modules/process/curvature.c:660
+#: modules/process/curvature.c:662
msgid "_Set selection"
msgstr "_Set selection"
-#: modules/process/curvature.c:670
+#: modules/process/curvature.c:672
msgid "_Plot graph"
msgstr "_Plot graph"
-#: modules/process/curvature.c:685 modules/process/drift.c:337
-#: modules/process/fft_profile.c:310 modules/process/fractal.c:328
-#: modules/process/grain_cross.c:253 modules/process/linematch.c:885
-#: modules/process/slope_dist.c:349 modules/tools/linestats.c:418
-#: modules/tools/profile.c:573 modules/tools/roughness.c:872
-#: modules/tools/sfunctions.c:486 modules/tools/spectro.c:382
-#: modules/volume/volume_slice.c:398
-msgid "Target _graph:"
-msgstr "Target _graph:"
-
-#: modules/process/curvature.c:691 modules/process/drift.c:343
-#: modules/process/fft_profile.c:316 modules/process/fractal.c:334
-#: modules/process/grain_cross.c:259 modules/process/linematch.c:892
-#: modules/process/slope_dist.c:355 modules/tools/linestats.c:424
-#: modules/tools/profile.c:579 modules/tools/roughness.c:878
-#: modules/tools/sfunctions.c:492 modules/tools/spectro.c:388
-#: modules/volume/volume_slice.c:406
+#: modules/process/curvature.c:684 modules/process/drift.c:340
+#: modules/process/fft_profile.c:300 modules/process/fractal.c:308
+#: modules/process/grain_cross.c:260 modules/process/linematch.c:855
+#: modules/process/slope_dist.c:347 modules/tools/linestats.c:424
+#: modules/tools/profile.c:559 modules/tools/roughness.c:886
+#: modules/tools/sfunctions.c:488 modules/tools/spectro.c:391
+#: modules/volume/volume_slice.c:408
msgid "New graph"
msgstr "New graph"
-#: modules/process/curvature.c:951
+#: modules/process/curvature.c:689 modules/process/drift.c:345
+#: modules/process/fft_profile.c:306 modules/process/fractal.c:313
+#: modules/process/grain_cross.c:254 modules/process/linematch.c:860
+#: modules/process/slope_dist.c:352 modules/tools/linestats.c:418
+#: modules/tools/profile.c:563 modules/tools/roughness.c:890
+#: modules/tools/sfunctions.c:492 modules/tools/spectro.c:385
+#: modules/volume/volume_slice.c:400
+msgid "Target _graph:"
+msgstr "Target _graph:"
+
+#: modules/process/curvature.c:949
msgid "Axes are outside the image."
msgstr "Axes are outside the image."
-#: modules/process/curvature.c:1018
+#: modules/process/curvature.c:1016
msgid "Save Curvature"
msgstr "Save Curvature"
@@ -8594,8 +8890,8 @@ msgstr "CWT"
msgid "2D CWT"
msgstr "2D CWT"
-#: modules/process/cwt.c:158 modules/process/dwt.c:185
-#: modules/process/dwtanisotropy.c:209
+#: modules/process/cwt.c:159 modules/process/dwt.c:185
+#: modules/process/dwtanisotropy.c:212
msgid "_Wavelet type:"
msgstr "_Wavelet type:"
@@ -8604,14 +8900,14 @@ msgid "Generates particles using simple dynamical model"
msgstr "Generates particles using a simple dynamical model"
#: modules/process/deposit_synth.c:184
-msgid "/S_ynthetic/_Particles..."
-msgstr "/S_ynthetic/_Particles..."
+msgid "/S_ynthetic/_Deposition/_Particles..."
+msgstr "/S_ynthetic/_Deposition/_Particles..."
#: modules/process/deposit_synth.c:188
msgid "Generate particles using dynamical model"
msgstr "Generate particles using dynamical model"
-#: modules/process/deposit_synth.c:288 modules/process/deposit_synth.c:867
+#: modules/process/deposit_synth.c:288 modules/process/deposit_synth.c:866
#, c-format
msgid ""
"Not all the particles could be deposited (%u),\n"
@@ -8620,73 +8916,69 @@ msgstr ""
"Not all the particles could be deposited (%u),\n"
"try more revise steps."
-#: modules/process/deposit_synth.c:347
+#: modules/process/deposit_synth.c:348
msgid "Particle Generation"
msgstr "Particle Generation"
-#: modules/process/deposit_synth.c:427
+#: modules/process/deposit_synth.c:431
msgid "Particle r_adius:"
msgstr "Particle r_adius:"
-#: modules/process/deposit_synth.c:438
+#: modules/process/deposit_synth.c:443
msgid "Distribution _width:"
msgstr "Distribution _width:"
-#: modules/process/deposit_synth.c:449
-msgid "Surface _coverage:"
-msgstr "Surface _coverage:"
-
-#: modules/process/deposit_synth.c:458
+#: modules/process/deposit_synth.c:462
msgid "_Relax steps:"
msgstr "_Relaxation steps:"
-#: modules/process/deposit_synth.c:659 modules/process/synth.h:548
+#: modules/process/deposit_synth.c:660 modules/process/synth.h:577
msgid "R_andom seed:"
msgstr "R_andom seed:"
-#: modules/process/deposit_synth.c:665 modules/process/synth.h:554
+#: modules/process/deposit_synth.c:666 modules/process/synth.h:583
msgid "seed|_New"
msgstr "_New"
-#: modules/process/deposit_synth.c:676
+#: modules/process/deposit_synth.c:677
msgid "Randomize"
msgstr "Randomise"
-#: modules/process/deposit_synth.c:860 modules/process/domain_synth.c:919
+#: modules/process/deposit_synth.c:859 modules/process/domain_synth.c:919
msgid "Running computation..."
msgstr "Running computation..."
-#: modules/process/deposit_synth.c:865
+#: modules/process/deposit_synth.c:864
#, c-format
msgid "%d particles were deposited"
msgstr "%d particles were deposited"
-#: modules/process/deposit_synth.c:1093
+#: modules/process/deposit_synth.c:1092
msgid "Initial particle set..."
msgstr "Initial particle set..."
-#: modules/process/deposit_synth.c:1252
+#: modules/process/deposit_synth.c:1251
msgid "Running revise..."
msgstr "Running revise..."
-#: modules/process/deposit_synth.c:1380
+#: modules/process/deposit_synth.c:1379
msgid "Error: too many particles."
msgstr "Error: too many particles."
-#: modules/process/deposit_synth.c:1382
+#: modules/process/deposit_synth.c:1381
msgid "Error: no particles."
msgstr "Error: no particles."
-#: modules/process/deposit_synth.c:1384
+#: modules/process/deposit_synth.c:1383
msgid "Error: particles too large."
msgstr "Error: particles are too large."
-#: modules/process/deposit_synth.c:1386
+#: modules/process/deposit_synth.c:1385
msgid "Error: particles too small."
msgstr "Error: particles are too small."
#: modules/process/diff_synth.c:197 modules/tools/linestats.c:173
-#: modules/volume/volume_linestat.c:149
+#: modules/volume/volume_linestat.c:151
msgid "Variation"
msgstr "Variation"
@@ -8699,8 +8991,8 @@ msgid "Generates surfaces by diffusion limited aggregation."
msgstr "Generates surfaces by diffusion-limited aggregation."
#: modules/process/diff_synth.c:228
-msgid "/S_ynthetic/_Diffusion..."
-msgstr "/S_ynthetic/_Diffusion..."
+msgid "/S_ynthetic/_Deposition/_Diffusion..."
+msgstr "/S_ynthetic/_Deposition/_Diffusion..."
#: modules/process/diff_synth.c:232
msgid "Generate surface by diffusion limited aggregation"
@@ -8714,45 +9006,45 @@ msgstr "Diffusion-Limited Aggregation"
msgid "_Flux:"
msgstr "_Flux:"
-#: modules/process/diff_synth.c:522
+#: modules/process/diff_synth.c:521
msgid "Probabilities"
msgstr "Probabilities"
-#: modules/process/diff_synth.c:530
+#: modules/process/diff_synth.c:529
msgid "_Sticking:"
msgstr "_Sticking:"
-#: modules/process/diff_synth.c:539
+#: modules/process/diff_synth.c:538
msgid "_Activation:"
msgstr "_Activation:"
-#: modules/process/diff_synth.c:548
+#: modules/process/diff_synth.c:547
msgid "Passing Sch_woebel:"
msgstr "Passing Sch_woebel:"
-#: modules/process/dimensions.h:457
+#: modules/process/dimensions.h:439
msgid "S_quare image"
msgstr "S_quare image"
-#: modules/process/dimensions.h:489
+#: modules/process/dimensions.h:473
msgid "_Dimension units:"
msgstr "_Dimension units:"
-#: modules/process/dimensions.h:502
-msgid "Current Channel"
-msgstr "Current Channel"
+#: modules/process/dimensions.h:488
+msgid "Current Image"
+msgstr "Current Image"
-#: modules/process/dimensions.h:506
-msgid "_Take Dimensions from Current Channel"
-msgstr "_Take Dimensions from Current Channel"
+#: modules/process/dimensions.h:492
+msgid "_Take Dimensions from Current Image"
+msgstr "_Take Dimensions from Current Image"
-#: modules/process/dimensions.h:514
-msgid "_Replace the current channel"
-msgstr "_Replace the current channel"
+#: modules/process/dimensions.h:501
+msgid "_Replace the current image"
+msgstr "_Replace the current image"
-#: modules/process/dimensions.h:523
-msgid "_Start from the current channel"
-msgstr "_Start from the current channel"
+#: modules/process/dimensions.h:510
+msgid "_Start from the current image"
+msgstr "_Start from the current image"
#: modules/process/domain_synth.c:158
msgid "Discrete state"
@@ -8811,13 +9103,13 @@ msgid "_Monte Carlo time step:"
msgstr "_Monte Carlo time step:"
#: modules/process/domain_synth.c:504 modules/process/fft_filter_2d.c:586
-#: modules/volume/volume_slice.c:364
+#: modules/volume/volume_slice.c:366
msgid "Output Options"
msgstr "Output Options"
#: modules/process/domain_synth.c:523 modules/process/fft_filter_2d.c:591
-#: modules/process/mask_edt.c:377 modules/process/slope_dist.c:323
-#: modules/volume/volume_linestat.c:432 modules/volume/volume_slice.c:384
+#: modules/process/mask_edt.c:211 modules/process/slope_dist.c:323
+#: modules/volume/volume_linestat.c:437 modules/volume/volume_slice.c:386
msgid "Output type:"
msgstr "Output type:"
@@ -8845,57 +9137,49 @@ msgstr "_Search range:"
msgid "rows"
msgstr "rows"
-#: modules/process/drift.c:304
+#: modules/process/drift.c:305
msgid "Correct _data"
msgstr "Correct _data"
-#: modules/process/drift.c:314
+#: modules/process/drift.c:315
msgid "_Exclude linear skew"
msgstr "_Exclude linear skew"
-#: modules/process/drift.c:324
+#: modules/process/drift.c:325
msgid "Plot drift _graph"
msgstr "Plot drift _graph"
-#: modules/process/drift.c:356 modules/process/fit-shape.c:693
-#: modules/process/neural.c:548 modules/process/polydistort.c:275
+#: modules/process/drift.c:355 modules/process/fit-shape.c:705
+#: modules/process/neural.c:552 modules/process/polydistort.c:278
msgid "Preview:"
msgstr "Preview:"
-#: modules/process/drift.c:366
+#: modules/process/drift.c:365
msgid "Drift _lines"
msgstr "Drift _lines"
-#: modules/process/drift.c:374 modules/process/facet_analysis.c:407
-#: modules/process/grain_edge.c:285 modules/process/grain_filter.c:357
-#: modules/process/grain_mark.c:367 modules/process/grain_wshed.c:267
-#: modules/process/mark_disconn.c:310 modules/process/scars.c:381
+#: modules/process/drift.c:373 modules/process/facet_analysis.c:390
+#: modules/process/grain_edge.c:272 modules/process/grain_filter.c:356
+#: modules/process/grain_mark.c:341 modules/process/grain_wshed.c:271
+#: modules/process/mark_disconn.c:298 modules/process/scars.c:405
#: modules/process/wpour_mark.c:369
msgid "_Mask color:"
msgstr "_Mask colour:"
-#: modules/process/drift.c:379
-msgid "Distribute"
-msgstr "Distribute"
-
-#: modules/process/drift.c:388
-msgid "Replace"
-msgstr "Replace"
-
-#: modules/process/drift.c:569
+#: modules/process/drift.c:570
msgid "Drift-corrected"
msgstr "Drift-corrected"
-#: modules/process/drift.c:613
+#: modules/process/drift.c:614
msgid "Drift"
msgstr "Drift"
-#: modules/process/drift.c:614 modules/xyz/xyz_drift.c:392
+#: modules/process/drift.c:615 modules/xyz/xyz_drift.c:392
#: modules/xyz/xyz_drift.c:411 modules/xyz/xyz_drift.c:430
msgid "drift"
msgstr "drift"
-#: modules/process/drift.c:620 modules/xyz/xyz_drift.c:402
+#: modules/process/drift.c:621 modules/xyz/xyz_drift.c:402
msgid "x-axis drift"
msgstr "x-axis drift"
@@ -8953,11 +9237,11 @@ msgstr "DWT Anisotropy"
msgid "2D DWT Anisotropy"
msgstr "2D DWT Anisotropy"
-#: modules/process/dwtanisotropy.c:214
+#: modules/process/dwtanisotropy.c:218
msgid "X/Y ratio threshold:"
msgstr "X/Y ratio threshold:"
-#: modules/process/dwtanisotropy.c:222
+#: modules/process/dwtanisotropy.c:226
msgid "Low level exclude limit:"
msgstr "Low-level exclude limit:"
@@ -9085,7 +9369,7 @@ msgstr "Zero Crossing Step Detection"
msgid "_Gaussian FWHM:"
msgstr "_Gaussian FWHM:"
-#: modules/process/edge.c:681 modules/process/mark_disconn.c:271
+#: modules/process/edge.c:681 modules/process/mark_disconn.c:272
msgid "_Threshold:"
msgstr "_Threshold:"
@@ -9149,11 +9433,11 @@ msgstr "Entropy:"
msgid "Entropy deficit:"
msgstr "Entropy deficit:"
-#: modules/process/entropy.c:567
+#: modules/process/entropy.c:568
msgid "Entropy at scales"
msgstr "Entropy at scales"
-#: modules/process/entropy.c:586
+#: modules/process/entropy.c:587
msgid "Best estimate"
msgstr "Best estimate"
@@ -9201,23 +9485,23 @@ msgstr "_Right:"
msgid "Extend _symetrically"
msgstr "Extend _symetrically"
-#: modules/process/extend.c:268 modules/process/polydistort.c:256
-#: modules/xyz/xyz_raster.c:658
+#: modules/process/extend.c:268 modules/process/polydistort.c:259
+#: modules/xyz/xyz_raster.c:627
msgid "exterior|Border"
msgstr "Border"
-#: modules/process/extend.c:270 modules/process/polydistort.c:258
-#: modules/xyz/xyz_raster.c:660
+#: modules/process/extend.c:270 modules/process/polydistort.c:261
+#: modules/xyz/xyz_raster.c:629
msgid "exterior|Mirror"
msgstr "Mirror"
-#: modules/process/extend.c:272 modules/process/polydistort.c:260
-#: modules/xyz/xyz_raster.c:662
+#: modules/process/extend.c:272 modules/process/polydistort.c:263
+#: modules/xyz/xyz_raster.c:631
msgid "exterior|Periodic"
msgstr "Periodic"
-#: modules/process/extend.c:275 modules/process/polydistort.c:263
-#: modules/xyz/xyz_raster.c:650
+#: modules/process/extend.c:275 modules/process/polydistort.c:266
+#: modules/xyz/xyz_raster.c:619
msgid "_Exterior type:"
msgstr "_Exterior type:"
@@ -9249,11 +9533,11 @@ msgstr "Number of path points:"
msgid "There is no path selection."
msgstr "There is no path selection."
-#: modules/process/extract_path.c:189 modules/volume/volume_extract.c:390
+#: modules/process/extract_path.c:189 modules/volume/volume_extract.c:383
msgid "X position"
msgstr "X position"
-#: modules/process/extract_path.c:193 modules/volume/volume_extract.c:397
+#: modules/process/extract_path.c:193 modules/volume/volume_extract.c:389
msgid "Y position"
msgstr "Y position"
@@ -9266,7 +9550,7 @@ msgid "Y tangent"
msgstr "Y tangent"
#: modules/process/extract_path.c:392 modules/process/extract_path.c:404
-#: modules/process/pat_synth.c:1432 modules/tools/distance.c:146
+#: modules/process/pat_synth.c:1433 modules/tools/distance.c:146
msgid "Distance"
msgstr "Distance"
@@ -9310,47 +9594,36 @@ msgstr "/_Statistics/Facet _Analysis..."
msgid "Mark areas by 2D slope"
msgstr "Mark areas by 2D slope"
-#: modules/process/facet_analysis.c:266
+#: modules/process/facet_analysis.c:270
msgid "Mark Facets"
msgstr "Mark Facets"
-#: modules/process/facet_analysis.c:269
+#: modules/process/facet_analysis.c:273
msgid "verb|_Mark"
msgstr "_Mark"
#. TRANSLATORS: The direction or line orthogonal to something.
-#: modules/process/facet_analysis.c:325
+#: modules/process/facet_analysis.c:329
msgid "Normal"
msgstr "Normal"
-#: modules/process/facet_analysis.c:333
+#: modules/process/facet_analysis.c:337
msgid "_Find Maximum"
msgstr "_Find Maximum"
-#: modules/process/facet_analysis.c:341
+#: modules/process/facet_analysis.c:345
msgid "Mean Normal"
msgstr "Mean Normal"
-#: modules/process/facet_analysis.c:350
+#: modules/process/facet_analysis.c:362
msgid "Facet plane size:"
msgstr "Facet plane size:"
-#: modules/process/facet_analysis.c:375
+#: modules/process/facet_analysis.c:370
msgid "_Tolerance:"
msgstr "_Tolerance:"
-#: modules/process/facet_analysis.c:384 modules/process/grain_edge.c:262
-#: modules/process/grain_mark.c:344 modules/process/mark_disconn.c:286
-msgid "Com_bine with existing mask"
-msgstr "Com_bine with existing mask"
-
-#: modules/process/facet_analysis.c:398 modules/process/grain_edge.c:276
-#: modules/process/grain_mark.c:358 modules/process/mark_disconn.c:301
-#: modules/process/mark_with.c:230 modules/process/mask_morph.c:210
-msgid "Operation:"
-msgstr "Operation:"
-
-#: modules/process/facet_analysis.c:415
+#: modules/process/facet_analysis.c:398
msgid ""
"Warning: Lateral and value units differ. Angles are not physically "
"meaningful."
@@ -9382,8 +9655,8 @@ msgstr "_Hurst exponent:"
msgid "_Stationarity scale:"
msgstr "_Stationarity scale:"
-#: modules/process/fbm_synth.c:390 modules/process/lno_synth.c:509
-#: modules/process/noise_synth.c:409
+#: modules/process/fbm_synth.c:390 modules/process/lno_synth.c:507
+#: modules/process/noise_synth.c:407
msgid "_Distribution:"
msgstr "_Distribution:"
@@ -9391,17 +9664,17 @@ msgstr "_Distribution:"
msgid "Po_wer:"
msgstr "Po_wer:"
-#: modules/process/fbm_synth.c:408 modules/process/fft_synth.c:414
-#: modules/process/lno_synth.c:533 modules/process/noise_synth.c:433
+#: modules/process/fbm_synth.c:407 modules/process/fft_synth.c:414
+#: modules/process/lno_synth.c:531 modules/process/noise_synth.c:431
msgid "_RMS:"
msgstr "_RMS:"
-#: modules/process/fbm_synth.c:477 modules/process/lno_synth.c:251
-#: modules/process/noise_synth.c:178
+#: modules/process/fbm_synth.c:476 modules/process/lno_synth.c:249
+#: modules/process/noise_synth.c:176
msgid "distribution|Exponential"
msgstr "Exponential"
-#: modules/process/fbm_synth.c:478
+#: modules/process/fbm_synth.c:477
msgid "distribution|Power"
msgstr "Power"
@@ -9453,7 +9726,7 @@ msgstr "Imaginary"
msgid "Modulus"
msgstr "Modulus"
-#: modules/process/fft.c:327 modules/process/wave_synth.c:583
+#: modules/process/fft.c:327 modules/process/wave_synth.c:618
msgid "Phase"
msgstr "Phase"
@@ -9469,63 +9742,63 @@ msgstr "Ra_w transform"
msgid "I_maginary part:"
msgstr "I_maginary part:"
-#: modules/process/fft.c:382
+#: modules/process/fft.c:380
msgid "_Inverse transform"
msgstr "_Inverse transform"
-#: modules/process/fft.c:411
+#: modules/process/fft.c:409
msgid "Subtract mean _value beforehand"
msgstr "Subtract mean _value beforehand"
-#: modules/process/fft.c:422
+#: modules/process/fft.c:420
msgid "_Preserve RMS"
msgstr "_Preserve RMS"
-#: modules/process/fft_filter_1d.c:117
+#: modules/process/fft_filter_1d.c:118
msgid "FFT filtering"
msgstr "FFT filtering"
-#: modules/process/fft_filter_1d.c:131
+#: modules/process/fft_filter_1d.c:132
msgid "/_Correct Data/1D _FFT Filtering..."
msgstr "/_Correct Data/1D _FFT Filtering..."
-#: modules/process/fft_filter_1d.c:135
+#: modules/process/fft_filter_1d.c:136
msgid "1D FFT Filtering"
msgstr "1D FFT Filtering"
-#: modules/process/fft_filter_1d.c:165 modules/process/wpour_mark.c:391
+#: modules/process/fft_filter_1d.c:166 modules/process/wpour_mark.c:391
msgid "Marked"
msgstr "Marked"
-#: modules/process/fft_filter_1d.c:166
+#: modules/process/fft_filter_1d.c:167
msgid "Unmarked"
msgstr "Unmarked"
-#: modules/process/fft_filter_1d.c:169
+#: modules/process/fft_filter_1d.c:170
msgid "Null"
msgstr "Null"
-#: modules/process/fft_filter_1d.c:170
+#: modules/process/fft_filter_1d.c:171
msgid "Suppress"
msgstr "Suppress"
-#: modules/process/fft_filter_1d.c:180
+#: modules/process/fft_filter_1d.c:181
msgid "1D FFT filter"
msgstr "1D FFT filter"
-#: modules/process/fft_filter_1d.c:269 modules/process/linematch.c:861
+#: modules/process/fft_filter_1d.c:271 modules/process/linematch.c:828
msgid "_Direction:"
msgstr "_Direction:"
-#: modules/process/fft_filter_1d.c:277
+#: modules/process/fft_filter_1d.c:279
msgid "_Suppress type:"
msgstr "_Suppress type:"
-#: modules/process/fft_filter_1d.c:285
+#: modules/process/fft_filter_1d.c:287
msgid "_Filter type:"
msgstr "_Filter type:"
-#: modules/process/fft_filter_1d.c:513
+#: modules/process/fft_filter_1d.c:515
msgid "1D FFT Filtered Data"
msgstr "1D FFT Filtered Data"
@@ -9545,9 +9818,10 @@ msgstr "Two-dimensional FFT filtering"
msgid "Filtered Data"
msgstr "Filtered Data"
-#: modules/process/fft_filter_2d.c:305 modules/process/fit-shape.c:594
-#: modules/process/fit-shape.c:643 modules/process/fit-shape.c:658
-#: modules/process/fit-shape.c:662 modules/process/neural.c:560
+#: modules/process/fft_filter_2d.c:305 modules/process/fit-shape.c:604
+#: modules/process/fit-shape.c:653 modules/process/fit-shape.c:668
+#: modules/process/fit-shape.c:672 modules/process/neural.c:564
+#: modules/process/psf.c:232
msgid "Difference"
msgstr "Difference"
@@ -9603,7 +9877,7 @@ msgstr "Filter Mask"
msgid "_Undo"
msgstr "_Undo"
-#: modules/process/fft_filter_2d.c:507 modules/tools/maskedit.c:556
+#: modules/process/fft_filter_2d.c:507 modules/tools/maskedit.c:562
msgid "_Fill"
msgstr "_Fill"
@@ -9611,7 +9885,7 @@ msgstr "_Fill"
msgid "_Snap to origin"
msgstr "_Snap to origin"
-#: modules/process/fft_filter_2d.c:565 modules/process/measure_lattice.c:339
+#: modules/process/fft_filter_2d.c:565 modules/process/measure_lattice.c:329
msgid "Zoom:"
msgstr "Zoom:"
@@ -9647,38 +9921,38 @@ msgstr "Fill the entire filter mask"
msgid "Force shapes to center around the origin"
msgstr "Force shapes to centre around the origin"
-#: modules/process/fft_profile.c:125
+#: modules/process/fft_profile.c:124
msgid ""
"Reads radial sections of two-dimensional power spectrum density function."
msgstr ""
"Reads radial sections of two-dimensional power spectrum density function."
-#: modules/process/fft_profile.c:140
+#: modules/process/fft_profile.c:139
msgid "/_Statistics/_PSDF Section..."
msgstr "/_Statistics/_PSDF Section..."
-#: modules/process/fft_profile.c:144
+#: modules/process/fft_profile.c:143
msgid "Read radial PSDF sections"
msgstr "Read radial PSDF sections"
-#: modules/process/fft_profile.c:190
+#: modules/process/fft_profile.c:189
msgid "Radial PSDF Section"
msgstr "Radial PSDF Section"
-#: modules/process/fft_profile.c:237
+#: modules/process/fft_profile.c:236
msgid "PSDF Section"
msgstr "PSDF Section"
-#: modules/process/fft_profile.c:266 modules/process/grain_dist.c:336
-#: modules/tools/profile.c:517 modules/tools/sfunctions.c:443
-msgid "_Fix res.:"
-msgstr "_Fix res.:"
+#: modules/process/fft_profile.c:266 modules/process/grain_dist.c:338
+#: modules/tools/profile.c:514 modules/tools/sfunctions.c:454
+msgid "_Fixed resolution:"
+msgstr "_Fixed resolution:"
-#: modules/process/fft_profile.c:279
+#: modules/process/fft_profile.c:278
msgid "_Separate curves"
msgstr "_Separate curves"
-#: modules/process/fft_profile.c:496
+#: modules/process/fft_profile.c:483
#, c-format
msgid "PSDF %.0f°"
msgstr "PSDF %.0f°"
@@ -9699,11 +9973,15 @@ msgstr "Generate surface using spectral synthesis"
msgid "Spectral Synthesis"
msgstr "Spectral Synthesis"
-#: modules/process/fft_synth.c:429
+#: modules/process/fft_synth.c:430
msgid "M_inimum frequency:"
msgstr "M_inimum frequency:"
-#: modules/process/fft_synth.c:449
+#: modules/process/fft_synth.c:430 modules/process/fft_synth.c:450
+msgid "px<sup>-1</sup>"
+msgstr "px<sup>-1</sup>"
+
+#: modules/process/fft_synth.c:450
msgid "Ma_ximum frequency:"
msgstr "Ma_ximum frequency:"
@@ -9723,85 +10001,154 @@ msgstr "Enable _Lorentz multiplier"
msgid "Enable _power multiplier"
msgstr "Enable _power multiplier"
-#: modules/process/fit-shape.c:270
+#: modules/process/fibre_synth.c:256
+msgid "Semi-circle"
+msgstr "Semi-circle"
+
+#: modules/process/fibre_synth.c:257
+msgid "Triangle"
+msgstr "Triangle"
+
+#: modules/process/fibre_synth.c:258
+msgid "Rectangle"
+msgstr "Rectangle"
+
+#: modules/process/fibre_synth.c:260
+msgid "Quadratic spline"
+msgstr "Quadratic spline"
+
+#: modules/process/fibre_synth.c:266
+msgid "Generates surfaces composed from randomly placed fibers."
+msgstr "Generates surfaces composed from randomly placed fibres."
+
+#: modules/process/fibre_synth.c:280
+msgid "/S_ynthetic/_Deposition/_Fibers..."
+msgstr "/S_ynthetic/_Deposition/_Fibres..."
+
+#: modules/process/fibre_synth.c:284
+msgid "Generate surface of randomly placed fibers"
+msgstr "Generate surface of randomly placed fibres"
+
+#: modules/process/fibre_synth.c:420
+msgid "Random Fibers"
+msgstr "Random Fibres"
+
+#: modules/process/fibre_synth.c:494 modules/process/obj_synth.c:510
+msgid "_Shape:"
+msgstr "_Shape:"
+
+#: modules/process/fibre_synth.c:513 modules/process/obj_synth.c:529
+msgid "obj."
+msgstr "obj."
+
+#: modules/process/fibre_synth.c:553
+msgid "Scales _with width"
+msgstr "Scales _with width"
+
+#: modules/process/fibre_synth.c:591 modules/process/synth.h:485
+msgid "Deformation"
+msgstr "Deformation"
+
+#: modules/process/fibre_synth.c:600 modules/process/lno_synth.c:852
+#: modules/process/lno_synth.c:1222 modules/process/mask_noisify.c:177
+msgid "Densi_ty:"
+msgstr "Densi_ty:"
+
+#: modules/process/fibre_synth.c:607
+msgid "_Lateral:"
+msgstr "_Lateral:"
+
+#: modules/process/fibre_synth.c:614
+msgid "Le_ngthwise:"
+msgstr "Le_ngthwise:"
+
+#: modules/process/fibre_synth.c:819
+msgid "Along fiber:"
+msgstr "Along fibre:"
+
+#: modules/process/fibre_synth.c:1180
+msgid "Generating fibers..."
+msgstr "Generating fibres..."
+
+#: modules/process/fit-shape.c:264
msgid "Fits predefined geometrical shapes to data."
msgstr "Fits predefined geometrical shapes to data."
-#: modules/process/fit-shape.c:284
+#: modules/process/fit-shape.c:278
msgid "/_Level/_Fit Shape..."
msgstr "/_Level/_Fit Shape..."
-#: modules/process/fit-shape.c:288 modules/process/fit-shape.c:295
+#: modules/process/fit-shape.c:282 modules/process/fit-shape.c:289
msgid "Fit geometrical shapes"
msgstr "Fit geometrical shapes"
-#: modules/process/fit-shape.c:291
+#: modules/process/fit-shape.c:285
msgid "/_Fit Shape..."
msgstr "/_Fit Shape..."
-#: modules/process/fit-shape.c:390
+#: modules/process/fit-shape.c:389
msgid "Fit Shape"
msgstr "Fit Shape"
-#: modules/process/fit-shape.c:395
+#: modules/process/fit-shape.c:396
msgid "verb|_Quick Fit"
msgstr "_Quick Fit"
-#: modules/process/fit-shape.c:473 modules/process/fit-shape.c:2159
+#: modules/process/fit-shape.c:474 modules/process/fit-shape.c:2141
msgid "Derived Quantities"
msgstr "Derived Quantities"
-#: modules/process/fit-shape.c:478 modules/process/fit-shape.c:2129
+#: modules/process/fit-shape.c:479 modules/process/fit-shape.c:2111
msgid "Mean square difference:"
msgstr "Mean square difference:"
-#: modules/process/fit-shape.c:580 modules/process/fit-shape.c:626
-#: modules/process/fit-shape.c:657 modules/process/fit-shape.c:661
+#: modules/process/fit-shape.c:590 modules/process/fit-shape.c:636
+#: modules/process/fit-shape.c:667 modules/process/fit-shape.c:671
msgid "Fitted shape"
msgstr "Fitted shape"
-#: modules/process/fit-shape.c:663 modules/process/mark_disconn.c:189
-#: modules/process/scars.c:281
+#: modules/process/fit-shape.c:673 modules/process/mark_disconn.c:189
+#: modules/process/scars.c:299
msgid "Both"
msgstr "Both"
-#: modules/process/fit-shape.c:680
+#: modules/process/fit-shape.c:690 modules/process/psf-fit.c:308
msgid "_Function type:"
msgstr "_Function type:"
-#: modules/process/fit-shape.c:708
+#: modules/process/fit-shape.c:720
msgid "Show differences with _adapted color map"
msgstr "Show differences with _adapted colour map"
-#: modules/process/fit-shape.c:720
+#: modules/process/fit-shape.c:732
msgid "Full fit is _geometric"
msgstr "Full fit is _geometric"
-#: modules/process/fit-shape.c:757
+#: modules/process/fit-shape.c:769
msgid "Calculate differences for e_xcluded pixels"
msgstr "Calculate differences for e_xcluded pixels"
-#: modules/process/fit-shape.c:804
+#: modules/process/fit-shape.c:816
msgid "_Recalculate Image"
msgstr "_Recalculate Image"
-#: modules/process/fit-shape.c:811
+#: modules/process/fit-shape.c:823
msgid "Revert to _Previous Values"
msgstr "Revert to _Previous Values"
-#: modules/process/fit-shape.c:1850
+#: modules/process/fit-shape.c:1864
msgid "Parameter estimation failed"
msgstr "Parameter estimation failed"
-#: modules/process/fit-shape.c:1853
+#: modules/process/fit-shape.c:1867
msgid "Fit failed"
msgstr "Fit failed"
-#: modules/process/fit-shape.c:1855
+#: modules/process/fit-shape.c:1869
msgid "Fit was interruped"
msgstr "Fit was interruped"
-#: modules/process/fit-shape.c:2115
+#: modules/process/fit-shape.c:2097
msgid "(fixed)"
msgstr "(fixed)"
@@ -9821,35 +10168,35 @@ msgstr "Flatten base of surface with positive features"
msgid "Polynomial leveling..."
msgstr "Polynomial levelling..."
-#: modules/process/fraccor.c:38
+#: modules/process/fraccor.c:39
msgid "Removes data under mask using fractal interpolation."
msgstr "Removes data under mask using fractal interpolation."
-#: modules/process/fraccor.c:52
+#: modules/process/fraccor.c:53
msgid "/_Correct Data/_Fractal Correction"
msgstr "/_Correct Data/_Fractal Correction"
-#: modules/process/fraccor.c:56
+#: modules/process/fraccor.c:57
msgid "Interpolate data under mask with fractal interpolation"
msgstr "Interpolate data under mask with fractal interpolation"
-#: modules/process/fractal.c:134
+#: modules/process/fractal.c:130
msgid "Partitioning"
msgstr "Partitioning"
-#: modules/process/fractal.c:135
+#: modules/process/fractal.c:131
msgid "Cube counting"
msgstr "Cube counting"
-#: modules/process/fractal.c:136
+#: modules/process/fractal.c:132
msgid "Triangulation"
msgstr "Triangulation"
-#: modules/process/fractal.c:137
+#: modules/process/fractal.c:133
msgid "Power spectrum"
msgstr "Power spectrum"
-#: modules/process/fractal.c:173
+#: modules/process/fractal.c:169
msgid ""
"Calculates fractal dimension using several methods (partitioning, box "
"counting, triangulation, power spectrum)."
@@ -9857,54 +10204,50 @@ msgstr ""
"Calculates fractal dimension using several methods (partitioning, box "
"counting, triangulation, power spectrum)."
-#: modules/process/fractal.c:188
+#: modules/process/fractal.c:184
msgid "/_Statistics/_Fractal Dimension..."
msgstr "/_Statistics/_Fractal Dimension..."
-#: modules/process/fractal.c:192
+#: modules/process/fractal.c:188
msgid "Calculate fractal dimension"
msgstr "Calculate fractal dimension"
-#: modules/process/fractal.c:227
+#: modules/process/fractal.c:223
msgid "Fractal Dimension"
msgstr "Fractal Dimension"
-#: modules/process/fractal.c:228
-msgid "Reco_mpute"
-msgstr "Reco_mpute"
-
-#: modules/process/fractal.c:269
+#: modules/process/fractal.c:253
msgid "_Method:"
msgstr "_Method:"
-#: modules/process/fractal.c:290
+#: modules/process/fractal.c:269
msgid "Fit Area"
msgstr "Fit Area"
-#: modules/process/fractal.c:295
-msgid "From:"
-msgstr "From:"
-
-#: modules/process/fractal.c:295 modules/process/fractal.c:589
-#: modules/process/fractal.c:613
+#: modules/process/fractal.c:273 modules/process/fractal.c:545
+#: modules/process/fractal.c:569
msgid "minimum"
msgstr "minimum"
-#: modules/process/fractal.c:298
-msgid "To:"
-msgstr "To:"
+#: modules/process/fractal.c:274
+msgid "From:"
+msgstr "From:"
-#: modules/process/fractal.c:298 modules/process/fractal.c:590
-#: modules/process/fractal.c:614
+#: modules/process/fractal.c:279 modules/process/fractal.c:546
+#: modules/process/fractal.c:570
msgid "maximum"
msgstr "maximum"
-#: modules/process/fractal.c:308 modules/process/mark_with.c:390
-#: modules/process/neural.c:559
+#: modules/process/fractal.c:280
+msgid "To:"
+msgstr "To:"
+
+#: modules/process/fractal.c:287 modules/process/mark_with.c:394
+#: modules/process/neural.c:563
msgid "Result"
msgstr "Result"
-#: modules/process/fractal.c:550
+#: modules/process/fractal.c:506
msgid "Linear fit"
msgstr "Linear fit"
@@ -9976,11 +10319,11 @@ msgstr ""
msgid "Grain Correlations"
msgstr "Grain Correlations"
-#: modules/process/grain_cross.c:240
+#: modules/process/grain_cross.c:241
msgid "_Abscissa"
msgstr "_Abscissa"
-#: modules/process/grain_cross.c:244
+#: modules/process/grain_cross.c:245
msgid "O_rdinate"
msgstr "O_rdinate"
@@ -10008,119 +10351,119 @@ msgstr "Plot _graphs"
msgid "Grain Distributions"
msgstr "Grain Distributions"
-#: modules/process/grain_dist.c:553
+#: modules/process/grain_dist.c:547
msgid "count"
msgstr "count"
-#: modules/process/grain_dist.c:617
+#: modules/process/grain_dist.c:611
msgid "Export Raw Grain Values"
msgstr "Export Raw Grain Values"
-#: modules/process/grain_edge.c:100
+#: modules/process/grain_edge.c:99
msgid "Marks grains by edge detection method."
msgstr "Marks grains by edge detection method."
-#: modules/process/grain_edge.c:114
+#: modules/process/grain_edge.c:113
msgid "/_Grains/Mark by _Edge Detection..."
msgstr "/_Grains/Mark by _Edge Detection..."
-#: modules/process/grain_edge.c:118
+#: modules/process/grain_edge.c:117
msgid "Mark grains with edge detection mechanism"
msgstr "Mark grains with edge detection mechanism"
-#: modules/process/grain_edge.c:207
+#: modules/process/grain_edge.c:206
msgid "Mark Grains by Edge Detection"
msgstr "Mark Grains by Edge Detection"
-#: modules/process/grain_edge.c:245
+#: modules/process/grain_edge.c:244
msgid "Threshold"
msgstr "Threshold"
-#: modules/process/grain_edge.c:249
+#: modules/process/grain_edge.c:248
msgid "_Laplacian:"
msgstr "_Laplacian:"
-#: modules/process/grain_filter.c:195
+#: modules/process/grain_filter.c:194
msgid ""
"Filters grains by their properties, using logical expressions and thresholds."
msgstr ""
"Filters grains by their properties, using logical expressions and thresholds."
-#: modules/process/grain_filter.c:210
+#: modules/process/grain_filter.c:209
msgid "/_Grains/_Filter..."
msgstr "/_Grains/_Filter..."
-#: modules/process/grain_filter.c:214
+#: modules/process/grain_filter.c:213
msgid "Filter grains by their properties"
msgstr "Filter grains by their properties"
-#: modules/process/grain_filter.c:254
+#: modules/process/grain_filter.c:253
msgid "There are no grains to filter."
msgstr "There are no grains to filter."
-#: modules/process/grain_filter.c:310
+#: modules/process/grain_filter.c:309
msgid "Filter Grains"
msgstr "Filter Grains"
-#: modules/process/grain_filter.c:405
+#: modules/process/grain_filter.c:404
msgid "Set selected as:"
msgstr "Set selected as:"
-#: modules/process/grain_filter.c:420
+#: modules/process/grain_filter.c:419
msgid "Keep grains satisfying:"
msgstr "Keep grains satisfying:"
-#: modules/process/grain_filter.c:434 modules/process/lat_synth.c:733
+#: modules/process/grain_filter.c:440 modules/process/lat_synth.c:733
msgid "Lower threshold:"
msgstr "Lower threshold:"
-#: modules/process/grain_filter.c:469 modules/process/lat_synth.c:740
+#: modules/process/grain_filter.c:467 modules/process/lat_synth.c:740
msgid "Upper threshold:"
msgstr "Upper threshold:"
#. TRANSLATORS: %c is replaced with quantity label A, B or C.
-#: modules/process/grain_filter.c:645
+#: modules/process/grain_filter.c:628
#, c-format
msgid "Condition %c: %s"
msgstr "Condition %c: %s"
-#: modules/process/grain_mark.c:139
+#: modules/process/grain_mark.c:137
msgid "Marks grains by thresholding (height, slope, curvature)."
msgstr "Marks grains by thresholding (height, slope, curvature)."
-#: modules/process/grain_mark.c:153
+#: modules/process/grain_mark.c:151
msgid "/_Grains/_Mark by Threshold..."
msgstr "/_Grains/_Mark by Threshold..."
-#: modules/process/grain_mark.c:157
+#: modules/process/grain_mark.c:155
msgid "Mark grains by threshold"
msgstr "Mark grains by threshold"
-#: modules/process/grain_mark.c:241
+#: modules/process/grain_mark.c:240
msgid "Mark Grains by Threshold"
msgstr "Mark Grains by Threshold"
-#: modules/process/grain_mark.c:281
+#: modules/process/grain_mark.c:280
msgid "Threshold by"
msgstr "Threshold by"
-#: modules/process/grain_mark.c:311
+#: modules/process/grain_mark.c:310
msgid "_Slope:"
msgstr "_Slope:"
-#: modules/process/grain_mark.c:315
+#: modules/process/grain_mark.c:314
msgid "_Curvature:"
msgstr "_Curvature:"
-#: modules/process/grain_mark.c:324
-msgid "Criteria combination:"
-msgstr "Criteria combination:"
-
-#: modules/process/grain_mark.c:328 modules/process/grain_wshed.c:256
+#: modules/process/grain_mark.c:319 modules/process/grain_wshed.c:260
#: modules/process/wpour_mark.c:358
msgid "_Invert height"
msgstr "_Invert height"
+#: modules/process/grain_mark.c:328
+msgid "Criteria combination:"
+msgstr "Criteria combination:"
+
#: modules/process/grain_stat.c:54
msgid "Displays overall grain statistics."
msgstr "Displays overall grain statistics."
@@ -10197,416 +10540,425 @@ msgstr "Total grain volume (laplacian):"
msgid "Total projected boundary length:"
msgstr "Total projected boundary length:"
-#: modules/process/grain_wshed.c:101
+#: modules/process/grain_wshed.c:102
msgid "Marks grains by watershed algorithm."
msgstr "Marks grains by watershed algorithm."
-#: modules/process/grain_wshed.c:115
+#: modules/process/grain_wshed.c:116
msgid "/_Grains/Mark by _Watershed..."
msgstr "/_Grains/Mark by _Watershed..."
-#: modules/process/grain_wshed.c:119
+#: modules/process/grain_wshed.c:120
msgid "Mark grains by watershed"
msgstr "Mark grains by watershed"
-#: modules/process/grain_wshed.c:161
+#: modules/process/grain_wshed.c:162
msgid "Mark Grains by Watershed"
msgstr "Mark Grains by Watershed"
-#: modules/process/grain_wshed.c:199
+#: modules/process/grain_wshed.c:200
msgid "Grain Location"
msgstr "Grain Location"
-#: modules/process/grain_wshed.c:214
+#: modules/process/grain_wshed.c:216
msgid "_Drop size:"
msgstr "_Drop size:"
-#: modules/process/grain_wshed.c:230
+#: modules/process/grain_wshed.c:233
msgid "Segmentation"
msgstr "Segmentation"
-#: modules/process/grain_wshed.c:236
+#: modules/process/grain_wshed.c:239
msgid "Num_ber of steps:"
msgstr "Num_ber of steps:"
-#: modules/process/grain_wshed.c:244
+#: modules/process/grain_wshed.c:248
msgid "Dr_op size:"
msgstr "Dr_op size:"
-#: modules/process/grain_wshed.c:435
+#: modules/process/grain_wshed.c:439
msgid "Finding minima..."
msgstr "Finding minima..."
-#: modules/process/grain_wshed.c:437
+#: modules/process/grain_wshed.c:441
msgid "Locating..."
msgstr "Locating..."
-#: modules/process/grain_wshed.c:439
+#: modules/process/grain_wshed.c:443
msgid "Simulating watershed..."
msgstr "Simulating watershed..."
-#: modules/process/grain_wshed.c:441
+#: modules/process/grain_wshed.c:445
msgid "Marking boundaries..."
msgstr "Marking boundaries..."
-#: modules/process/hough.c:74
+#: modules/process/hough.c:76
msgid "Hough transform."
msgstr "Hough transform."
-#: modules/process/hough.c:88
+#: modules/process/hough.c:90
msgid "/_Integral Transforms/_Hough..."
msgstr "/_Integral Transforms/_Hough..."
-#: modules/process/hough.c:92
+#: modules/process/hough.c:94
msgid "Compute Hough transform"
msgstr "Compute Hough transform"
-#: modules/process/hough.c:178
+#: modules/process/hough.c:137
+msgid "Hough line"
+msgstr "Hough line"
+
+#: modules/process/hough.c:141
+#, c-format
+msgid "Hough circle r=%d"
+msgstr "Hough circle r=%d"
+
+#: modules/process/hough.c:173
msgid "Hough Transform"
msgstr "Hough Transform"
-#: modules/process/hough.c:201
+#: modules/process/hough.c:195
msgid "_Transform type:"
msgstr "_Transform type:"
-#: modules/process/hough.c:212
+#: modules/process/hough.c:203
msgid "_Circle size:"
msgstr "_Circle size:"
-#: modules/process/immerse.c:162
+#: modules/process/immerse.c:163
msgid "Immerse high resolution detail into overall image."
msgstr "Immerse high-resolution detail into overall image."
-#: modules/process/immerse.c:176
+#: modules/process/immerse.c:177
msgid "/M_ultidata/_Immerse Detail..."
msgstr "/M_ultidata/_Immerse Detail..."
-#: modules/process/immerse.c:180
+#: modules/process/immerse.c:181
msgid "Immerse a detail into image"
msgstr "Immerse a detail into image"
-#: modules/process/immerse.c:222
+#: modules/process/immerse.c:223
msgid "Immerse Detail"
msgstr "Immerse Detail"
-#: modules/process/immerse.c:225
+#: modules/process/immerse.c:226
msgid "_Locate"
msgstr "_Locate"
-#: modules/process/immerse.c:227
+#: modules/process/immerse.c:228
msgid "Locate detail by full image correlation search"
msgstr "Locate detail by full-image correlation search"
-#: modules/process/immerse.c:229
+#: modules/process/immerse.c:230
msgid "_Improve"
msgstr "_Improve"
-#: modules/process/immerse.c:231
+#: modules/process/immerse.c:232
msgid "Improve detail position by correlation search in neighborhood"
msgstr "Improve detail position by correlation search in neighbourhood"
-#: modules/process/immerse.c:290
+#: modules/process/immerse.c:291
msgid "_Detail image:"
msgstr "_Detail image:"
-#: modules/process/immerse.c:295
+#: modules/process/immerse.c:296
msgid "Position:"
msgstr "Position:"
-#: modules/process/immerse.c:308
+#: modules/process/immerse.c:314
msgid "Result Sampling"
msgstr "Result Sampling"
-#: modules/process/immerse.c:318
+#: modules/process/immerse.c:324
msgid "_Upsample large image"
msgstr "_Upsample large image"
-#: modules/process/immerse.c:320
+#: modules/process/immerse.c:326
msgid "_Downsample detail"
msgstr "_Downsample detail"
-#: modules/process/immerse.c:329
+#: modules/process/immerse.c:335
msgid "Detail Leveling"
msgstr "Detail Levelling"
-#: modules/process/immerse.c:339
+#: modules/process/immerse.c:345
msgid "levelling|_None"
msgstr "_None"
-#: modules/process/immerse.c:341
+#: modules/process/immerse.c:347
msgid "_Mean value"
msgstr "A_verage value"
-#: modules/process/immerse.c:349
+#: modules/process/immerse.c:355
msgid "Show _frame"
msgstr "Show _frame"
-#: modules/process/immerse.c:787
+#: modules/process/immerse.c:793
msgid "Immersed detail"
msgstr "Immersed detail"
-#: modules/process/indent_analyze.c:261
+#: modules/process/indent_analyze.c:246
msgid "Do nothing"
msgstr "Do nothing"
-#: modules/process/indent_analyze.c:262
+#: modules/process/indent_analyze.c:247
msgid "Plane level"
msgstr "Plane level"
-#: modules/process/indent_analyze.c:263
+#: modules/process/indent_analyze.c:248
msgid "Plane rotate"
msgstr "Plane rotate"
-#: modules/process/indent_analyze.c:267
+#: modules/process/indent_analyze.c:252
msgid "New"
msgstr "New"
-#: modules/process/indent_analyze.c:268
+#: modules/process/indent_analyze.c:253
msgid "AND"
msgstr "AND"
-#: modules/process/indent_analyze.c:269
+#: modules/process/indent_analyze.c:254
msgid "OR"
msgstr "OR"
-#: modules/process/indent_analyze.c:270
+#: modules/process/indent_analyze.c:255
msgid "NOT"
msgstr "NOT"
-#: modules/process/indent_analyze.c:271
+#: modules/process/indent_analyze.c:256
msgid "XOR"
msgstr "XOR"
-#: modules/process/indent_analyze.c:275
+#: modules/process/indent_analyze.c:260
msgid "Nothing"
msgstr "Nothing"
-#: modules/process/indent_analyze.c:276
+#: modules/process/indent_analyze.c:261
msgid "Above"
msgstr "Above"
-#: modules/process/indent_analyze.c:277
+#: modules/process/indent_analyze.c:262
msgid "Below"
msgstr "Below"
-#: modules/process/indent_analyze.c:278
+#: modules/process/indent_analyze.c:263
msgid "Plane"
msgstr "Plane"
-#: modules/process/indent_analyze.c:279
+#: modules/process/indent_analyze.c:264
msgid "Impression"
msgstr "Impression"
-#: modules/process/indent_analyze.c:280
+#: modules/process/indent_analyze.c:265
msgid "Inner Pile-up"
msgstr "Inner Pile-up"
-#: modules/process/indent_analyze.c:281
+#: modules/process/indent_analyze.c:266
msgid "Outer Pile-up"
msgstr "Outer Pile-up"
-#: modules/process/indent_analyze.c:282
+#: modules/process/indent_analyze.c:267
msgid "Special points"
msgstr "Special points"
-#: modules/process/indent_analyze.c:283
+#: modules/process/indent_analyze.c:268
msgid "Faces border"
msgstr "Faces border"
-#: modules/process/indent_analyze.c:287
+#: modules/process/indent_analyze.c:272
msgid "Vickers"
msgstr "Vickers"
-#: modules/process/indent_analyze.c:288
+#: modules/process/indent_analyze.c:273
msgid "Berkovich"
msgstr "Berkovich"
-#: modules/process/indent_analyze.c:289
+#: modules/process/indent_analyze.c:274
msgid "Berkovich (modified)"
msgstr "Berkovich (modified)"
-#: modules/process/indent_analyze.c:290
+#: modules/process/indent_analyze.c:275
msgid "Knoop"
msgstr "Knoop"
-#: modules/process/indent_analyze.c:291
+#: modules/process/indent_analyze.c:276
msgid "Brinell"
msgstr "Brinell"
-#: modules/process/indent_analyze.c:292
+#: modules/process/indent_analyze.c:277
msgid "Cube corner"
msgstr "Cube corner"
-#: modules/process/indent_analyze.c:293
+#: modules/process/indent_analyze.c:278
msgid "Rockwell"
msgstr "Rockwell"
-#: modules/process/indent_analyze.c:303
+#: modules/process/indent_analyze.c:288
msgid "Analyses nanoindentation structure (volumes, surfaces, ...)."
msgstr "Analyses nano-indentation structure (volumes, surfaces, ...)."
-#: modules/process/indent_analyze.c:320
+#: modules/process/indent_analyze.c:302
msgid "/_Tip and Indentation/_Analyze Imprint..."
msgstr "/_Tip and Indentation/_Analyse Imprint..."
-#: modules/process/indent_analyze.c:439
+#: modules/process/indent_analyze.c:410
msgid "Marked _areas:"
msgstr "Marked _areas:"
-#: modules/process/indent_analyze.c:445
+#: modules/process/indent_analyze.c:419
msgid "_Indentor type:"
msgstr "_Indentor type:"
-#: modules/process/indent_analyze.c:451
+#: modules/process/indent_analyze.c:428
msgid "_Mask creation type:"
msgstr "_Mask creation type:"
-#: modules/process/indent_analyze.c:456
+#: modules/process/indent_analyze.c:434
msgid "Ref. plane _tolerance:"
msgstr "Ref. plane _tolerance:"
-#: modules/process/indent_analyze.c:460
+#: modules/process/indent_analyze.c:438
msgid "Angle _1 tolerance:"
msgstr "Angle _1 tolerance:"
-#: modules/process/indent_analyze.c:485
+#: modules/process/indent_analyze.c:456
msgid "Indent center at"
msgstr "Indent centre at"
-#: modules/process/indent_analyze.c:488
+#: modules/process/indent_analyze.c:460
msgid "Maximum at"
msgstr "Maximum at"
-#: modules/process/indent_analyze.c:491
+#: modules/process/indent_analyze.c:464
msgid "Max-min difference"
msgstr "Max-min difference"
-#: modules/process/indent_analyze.c:497
+#: modules/process/indent_analyze.c:472
msgid "Expected A<sub>d</sub>:"
msgstr "Expected A<sub>d</sub>:"
-#: modules/process/indent_analyze.c:505
+#: modules/process/indent_analyze.c:479
msgid "Expected A<sub>p</sub>:"
msgstr "Expected A<sub>p</sub>:"
-#: modules/process/indent_analyze.c:549
+#: modules/process/indent_analyze.c:489
msgid "Volume above-below"
msgstr "Volume above-below"
-#: modules/process/indent_analyze.c:558
+#: modules/process/indent_analyze.c:494
msgid "Indent. volume"
msgstr "Indent. volume"
-#: modules/process/indent_analyze.c:564
+#: modules/process/indent_analyze.c:502
msgid "Indent. A<sub>d</sub>"
msgstr "Indent. A<sub>d</sub>"
-#: modules/process/indent_analyze.c:573
+#: modules/process/indent_analyze.c:509
msgid "Indent. A<sub>p</sub>"
msgstr "Indent. A<sub>p</sub>"
-#: modules/process/indent_analyze.c:587
+#: modules/process/indent_analyze.c:517
msgid "Inner Pile-Up A<sub>d</sub>"
msgstr "Inner Pile-Up A<sub>d</sub>"
-#: modules/process/indent_analyze.c:596
+#: modules/process/indent_analyze.c:525
msgid "Inner Pile-Up A<sub>p</sub>"
msgstr "Inner Pile-Up A<sub>p</sub>"
-#: modules/process/indent_analyze.c:605
+#: modules/process/indent_analyze.c:533
msgid "Outer Pile-Up A<sub>d</sub>"
msgstr "Outer Pile-Up A<sub>d</sub>"
-#: modules/process/indent_analyze.c:614
+#: modules/process/indent_analyze.c:541
msgid "Outer Pile-Up A<sub>p</sub>"
msgstr "Outer Pile-Up A<sub>p</sub>"
-#: modules/process/indent_analyze.c:644
+#: modules/process/indent_analyze.c:569
msgid "Indentation statistics"
msgstr "Indentation statistics"
-#: modules/process/indent_analyze.c:645
+#: modules/process/indent_analyze.c:570
msgid "_Compute & mark"
msgstr "_Compute & mark"
-#: modules/process/indent_analyze.c:646
+#: modules/process/indent_analyze.c:571
msgid "_Save statistics"
msgstr "_Save statistics"
-#: modules/process/indent_analyze.c:1569
+#: modules/process/indent_analyze.c:1392
msgid "No statistics has been computed yet."
msgstr "No statistics has been computed yet."
-#: modules/process/indent_analyze.c:1577
+#: modules/process/indent_analyze.c:1400
msgid "Save Indentation Statistics"
msgstr "Save Indentation Statistics"
-#: modules/process/indent_analyze.c:1615
+#: modules/process/indent_analyze.c:1438
#, c-format
msgid "Indentor: %s\n"
msgstr "Indentor: %s\n"
-#: modules/process/indent_analyze.c:1619
+#: modules/process/indent_analyze.c:1442
#, c-format
msgid "Length units: %s\n"
msgstr "Length units: %s\n"
-#: modules/process/indent_analyze.c:1621
+#: modules/process/indent_analyze.c:1444
#, c-format
msgid "Indentation center at [%d, %d] px: %lf\n"
msgstr "Indentation centre at [%d, %d] px: %lf\n"
-#: modules/process/indent_analyze.c:1623
+#: modules/process/indent_analyze.c:1446
#, c-format
msgid "Maximum at [%d, %d] is: %lf\n"
msgstr "Maximum at [%d, %d] is: %lf\n"
-#: modules/process/indent_analyze.c:1625
+#: modules/process/indent_analyze.c:1448
#, c-format
msgid "Difference max-min: %lf\n"
msgstr "Difference max-min: %lf\n"
-#: modules/process/indent_analyze.c:1630
+#: modules/process/indent_analyze.c:1453
#, c-format
msgid "Area (projected) above plane: %g (%.1lf %%)\n"
msgstr "Area (projected) above plane: %g (%.1lf %%)\n"
-#: modules/process/indent_analyze.c:1634
+#: modules/process/indent_analyze.c:1457
#, c-format
msgid "Area (projected) below plane: %g (%.1lf %%)\n"
msgstr "Area (projected) below plane: %g (%.1lf %%)\n"
-#: modules/process/indent_analyze.c:1638
+#: modules/process/indent_analyze.c:1461
#, c-format
msgid "Area (projected) of plane: %g (%.1lf %%)\n"
msgstr "Area (projected) of plane: %g (%.1lf %%)\n"
-#: modules/process/indent_analyze.c:1643
+#: modules/process/indent_analyze.c:1466
#, c-format
msgid "Area (developed) above %g (+%.1f %%)\n"
msgstr "Area (developed) above %g (+%.1f %%)\n"
-#: modules/process/indent_analyze.c:1646
+#: modules/process/indent_analyze.c:1469
#, c-format
msgid "Area (developed) below %g (+%.1lf %%)\n"
msgstr "Area (developed) below %g (+%.1lf %%)\n"
-#: modules/process/indent_analyze.c:1650
+#: modules/process/indent_analyze.c:1473
#, c-format
msgid "Volume above: %g\n"
msgstr "Volume above: %g\n"
-#: modules/process/indent_analyze.c:1652
+#: modules/process/indent_analyze.c:1475
#, c-format
msgid "Volume below: %g\n"
msgstr "Volume below: %g\n"
-#: modules/process/indent_analyze.c:1654
+#: modules/process/indent_analyze.c:1477
#, c-format
msgid "Volume difference %g\n"
msgstr "Volume difference %g\n"
-#: modules/process/indent_analyze.c:1658
+#: modules/process/indent_analyze.c:1481
msgid ""
"\n"
"Indentation\n"
@@ -10614,12 +10966,12 @@ msgstr ""
"\n"
"Indentation\n"
-#: modules/process/indent_analyze.c:1659
+#: modules/process/indent_analyze.c:1482
#, c-format
msgid "Volume %g\n"
msgstr "Volume %g\n"
-#: modules/process/indent_analyze.c:1664
+#: modules/process/indent_analyze.c:1487
msgid ""
"\n"
"Indentation - Inner Pile-Up\n"
@@ -10627,7 +10979,7 @@ msgstr ""
"\n"
"Indentation - Inner Pile-Up\n"
-#: modules/process/indent_analyze.c:1670
+#: modules/process/indent_analyze.c:1493
msgid "Indentation - Outer Pile-Up\n"
msgstr "Indentation - Outer Pile-Up\n"
@@ -10711,15 +11063,15 @@ msgstr "Triangular"
#: modules/process/lat_synth.c:546
msgid "lattice|Cairo"
-msgstr "lattice|Cairo"
+msgstr "Cairo"
#: modules/process/lat_synth.c:547
msgid "lattice|Snub square"
-msgstr "lattice|Snub square"
+msgstr "Snub square"
#: modules/process/lat_synth.c:548
msgid "lattice|Truncated square"
-msgstr "lattice|Truncated square"
+msgstr "Truncated square"
#: modules/process/lat_synth.c:549
msgid "Silicon 7x7"
@@ -10727,21 +11079,16 @@ msgstr "Silicon 7x7"
#: modules/process/lat_synth.c:550
msgid "lattice|Penrose (vertices)"
-msgstr "lattice|Penrose (vertices)"
+msgstr "Penrose (vertices)"
#: modules/process/lat_synth.c:551
msgid "lattice|Penrose (centers)"
-msgstr "lattice|Penrose (centres)"
+msgstr "Penrose (centres)"
#: modules/process/lat_synth.c:644
msgid "_Lattice:"
msgstr "_Lattice:"
-#: modules/process/lat_synth.c:651 modules/process/obj_synth.c:544
-#: modules/process/pat_synth.c:1457
-msgid "_Size:"
-msgstr "_Size:"
-
#: modules/process/lat_synth.c:662
msgid "Lattice rela_xation:"
msgstr "Lattice rela_xation:"
@@ -10880,7 +11227,7 @@ msgstr ""
#: modules/process/level_grains.c:187 modules/process/median-bg.c:167
#: modules/process/polylevel.c:293 modules/process/polylevel.c:417
-#: modules/process/sphere-revolve.c:200
+#: modules/process/sphere-revolve.c:221 modules/process/sphere-revolve.c:295
msgid "Background"
msgstr "Background"
@@ -10892,150 +11239,150 @@ msgstr "Level Grains"
msgid "Quantity to level:"
msgstr "Quantity to level:"
-#: modules/process/level_grains.c:231 modules/process/linematch.c:866
-#: modules/process/median-bg.c:217 modules/process/polylevel.c:482
-#: modules/process/sphere-revolve.c:263
+#: modules/process/level_grains.c:231 modules/process/linematch.c:834
+#: modules/process/median-bg.c:217 modules/process/polylevel.c:485
+#: modules/process/sphere-revolve.c:371
msgid "E_xtract background"
msgstr "E_xtract background"
-#: modules/process/linecorrect.c:54
+#: modules/process/linecorrect.c:52
msgid "Corrects line defects (mostly experimental algorithms)."
msgstr "Corrects line defects (mostly experimental algorithms)."
-#: modules/process/linecorrect.c:68
+#: modules/process/linecorrect.c:66
msgid "/_Correct Data/Ste_p Line Correction"
msgstr "/_Correct Data/Ste_p Line Correction"
-#: modules/process/linecorrect.c:72
+#: modules/process/linecorrect.c:70
msgid "Correct steps in lines"
msgstr "Correct steps in lines"
-#: modules/process/linematch.c:158 modules/tools/linestats.c:166
+#: modules/process/linematch.c:155 modules/tools/linestats.c:166
#: modules/volume/volume_linestat.c:143
msgid "Median"
msgstr "Median"
-#: modules/process/linematch.c:159
+#: modules/process/linematch.c:156
msgid "Median of differences"
msgstr "Median of differences"
-#: modules/process/linematch.c:160
+#: modules/process/linematch.c:157
msgid "Modus"
msgstr "Modus"
-#: modules/process/linematch.c:161
+#: modules/process/linematch.c:158
msgid "linematch|Matching"
msgstr "Matching"
-#: modules/process/linematch.c:162
+#: modules/process/linematch.c:159
msgid "linematch|Polynomial"
msgstr "Polynomial"
-#: modules/process/linematch.c:168
+#: modules/process/linematch.c:165
msgid "Aligns rows by various methods."
msgstr "Aligns rows by various methods."
-#: modules/process/linematch.c:182
+#: modules/process/linematch.c:179
msgid "/_Correct Data/_Align rows..."
msgstr "/_Correct Data/_Align rows..."
-#: modules/process/linematch.c:186
+#: modules/process/linematch.c:183
msgid "Align rows using various methods"
msgstr "Align rows using various methods"
-#: modules/process/linematch.c:237 modules/process/linematch.c:265
+#: modules/process/linematch.c:234 modules/process/linematch.c:262
msgid "Row background"
msgstr "Row background"
-#: modules/process/linematch.c:266
+#: modules/process/linematch.c:263
msgid "Vertical position"
msgstr "Vertical position"
-#: modules/process/linematch.c:267
+#: modules/process/linematch.c:264
msgid "Corrected offset"
msgstr "Corrected offset"
-#: modules/process/linematch.c:802
+#: modules/process/linematch.c:769
msgid "Align Rows"
msgstr "Align Rows"
-#: modules/process/linematch.c:844
+#: modules/process/linematch.c:810
msgid "_Polynomial degree:"
msgstr "_Polynomial degree:"
-#: modules/process/linematch.c:876
+#: modules/process/linematch.c:844
msgid "Plot background _graph"
msgstr "Plot background _graph"
-#: modules/process/lno_synth.c:261 modules/process/noise_synth.c:188
+#: modules/process/lno_synth.c:259 modules/process/noise_synth.c:186
msgid "distribution|Triangular"
msgstr "Triangular"
-#: modules/process/lno_synth.c:267 modules/process/pat_synth.c:213
+#: modules/process/lno_synth.c:265 modules/process/pat_synth.c:213
msgid "Steps"
msgstr "Steps"
-#: modules/process/lno_synth.c:268
+#: modules/process/lno_synth.c:266
msgid "Scars"
msgstr "Scars"
-#: modules/process/lno_synth.c:269 modules/process/pat_synth.c:214
+#: modules/process/lno_synth.c:267 modules/process/pat_synth.c:214
msgid "Ridges"
msgstr "Ridges"
-#: modules/process/lno_synth.c:275
+#: modules/process/lno_synth.c:273
msgid "Generates various kinds of line noise."
msgstr "Generates various kinds of line noise."
-#: modules/process/lno_synth.c:289
+#: modules/process/lno_synth.c:287
msgid "/S_ynthetic/_Line Noise..."
msgstr "/S_ynthetic/_Line Noise..."
-#: modules/process/lno_synth.c:293
+#: modules/process/lno_synth.c:291
msgid "Generate line noise"
msgstr "Generate line noise"
-#: modules/process/lno_synth.c:431
+#: modules/process/lno_synth.c:429
msgid "Line Noise"
msgstr "Line Noise"
-#: modules/process/lno_synth.c:504
+#: modules/process/lno_synth.c:502
msgid "Distribution"
msgstr "Distribution"
-#: modules/process/lno_synth.c:514 modules/process/noise_synth.c:414
-msgid "Direction:"
-msgstr "Direction:"
+#: modules/process/lno_synth.c:512 modules/process/mask_noisify.c:158
+#: modules/process/noise_synth.c:412
+msgid "Noise type:"
+msgstr "Noise type:"
-#: modules/process/lno_synth.c:523 modules/process/noise_synth.c:423
+#: modules/process/lno_synth.c:521 modules/process/mask_noisify.c:167
+#: modules/process/noise_synth.c:421
msgid "S_ymmetrical"
msgstr "S_ymmetrical"
-#: modules/process/lno_synth.c:524 modules/process/noise_synth.c:424
+#: modules/process/lno_synth.c:522 modules/process/mask_noisify.c:168
+#: modules/process/noise_synth.c:422
msgid "One-sided _positive"
msgstr "One-sided _positive"
-#: modules/process/lno_synth.c:525 modules/process/noise_synth.c:425
+#: modules/process/lno_synth.c:523 modules/process/mask_noisify.c:169
+#: modules/process/noise_synth.c:423
msgid "One-sided _negative"
msgstr "One-sided _negative"
-#: modules/process/lno_synth.c:546
+#: modules/process/lno_synth.c:544
msgid "Noise Type"
msgstr "Noise Type"
-#: modules/process/lno_synth.c:551
+#: modules/process/lno_synth.c:549
msgid "_Noise type:"
msgstr "_Noise type:"
-#: modules/process/lno_synth.c:853 modules/process/lno_synth.c:1222
-msgid "Densi_ty:"
-msgstr "Densi_ty:"
-
-#: modules/process/lno_synth.c:864 modules/process/lno_synth.c:1233
+#: modules/process/lno_synth.c:863 modules/process/lno_synth.c:1233
msgid "_Within line:"
msgstr "_Within line:"
-#: modules/process/lno_synth.c:871
+#: modules/process/lno_synth.c:870
msgid "C_umulative"
msgstr "C_umulative"
@@ -11091,31 +11438,31 @@ msgstr "_Use trained regression"
msgid "_Train logistic regression"
msgstr "_Train logistic regression"
-#: modules/process/logistic.c:275
+#: modules/process/logistic.c:274
msgid "_Gaussian blur"
msgstr "_Gaussian blur"
-#: modules/process/logistic.c:288
+#: modules/process/logistic.c:285
msgid "_Number of Gaussians:"
msgstr "_Number of Gaussians:"
-#: modules/process/logistic.c:296
+#: modules/process/logistic.c:293
msgid "_Sobel derivatives"
msgstr "_Sobel derivatives"
-#: modules/process/logistic.c:307
+#: modules/process/logistic.c:303
msgid "_Laplacian"
msgstr "_Laplacian"
-#: modules/process/logistic.c:318
+#: modules/process/logistic.c:313
msgid "_Hessian"
msgstr "_Hessian"
-#: modules/process/logistic.c:331
+#: modules/process/logistic.c:325
msgid "_Regularization parameter:"
msgstr "_Regularisation parameter:"
-#: modules/process/logistic.c:623 modules/process/neural.c:1101
+#: modules/process/logistic.c:616 modules/process/neural.c:1108
msgid "Training..."
msgstr "Training..."
@@ -11131,13 +11478,13 @@ msgstr "/_Correct Data/Mask of _Disconnected..."
msgid "Mark data disconnected from other values"
msgstr "Mark data disconnected from other values"
-#: modules/process/mark_disconn.c:187 modules/process/obj_synth.c:422
-#: modules/process/scars.c:279
+#: modules/process/mark_disconn.c:187 modules/process/obj_synth.c:419
+#: modules/process/scars.c:297
msgid "Positive"
msgstr "Positive"
-#: modules/process/mark_disconn.c:188 modules/process/obj_synth.c:423
-#: modules/process/scars.c:280
+#: modules/process/mark_disconn.c:188 modules/process/obj_synth.c:420
+#: modules/process/scars.c:298
msgid "Negative"
msgstr "Negative"
@@ -11153,11 +11500,11 @@ msgstr "Defect type:"
msgid "Defect _radius:"
msgstr "Defect _radius:"
-#: modules/process/mark_disconn.c:563
+#: modules/process/mark_disconn.c:552
msgid "Filtering..."
msgstr "Filtering..."
-#: modules/process/mark_disconn.c:590
+#: modules/process/mark_disconn.c:579
msgid "Marking outliers..."
msgstr "Marking outliers..."
@@ -11173,55 +11520,59 @@ msgstr "/_Mask/Mark _With..."
msgid "Mask combining and modification"
msgstr "Mask combining and modification"
-#: modules/process/mark_with.c:192
+#: modules/process/mark_with.c:193
msgid "Mark With"
msgstr "Mark With"
-#: modules/process/mark_with.c:238
+#: modules/process/mark_with.c:231 modules/process/mask_morph.c:209
+msgid "Operation:"
+msgstr "Operation:"
+
+#: modules/process/mark_with.c:239
msgid "Se_t mask"
msgstr "Se_t mask"
-#: modules/process/mark_with.c:239
+#: modules/process/mark_with.c:240
msgid "_Add mask"
msgstr "_Add mask"
-#: modules/process/mark_with.c:240
+#: modules/process/mark_with.c:241
msgid "_Subtract mask"
msgstr "_Subtract mask"
-#: modules/process/mark_with.c:241
+#: modules/process/mark_with.c:242
msgid "_Intersect masks"
msgstr "_Intersect masks"
-#: modules/process/mark_with.c:247
+#: modules/process/mark_with.c:248
msgid "Mark with:"
msgstr "Mark with:"
-#: modules/process/mark_with.c:255
+#: modules/process/mark_with.c:256
msgid "with|_Mask"
msgstr "_Mask"
-#: modules/process/mark_with.c:257
+#: modules/process/mark_with.c:258
msgid "with|_Data"
msgstr "_Data"
-#: modules/process/mark_with.c:259
+#: modules/process/mark_with.c:260
msgid "with|_Presentation"
msgstr "_Presentation"
-#: modules/process/mark_with.c:293
+#: modules/process/mark_with.c:297
msgid "Marked data range:"
msgstr "Marked data range:"
-#: modules/process/mark_with.c:301
+#: modules/process/mark_with.c:305
msgid "_Minimum:"
msgstr "_Minimum:"
-#: modules/process/mark_with.c:310
+#: modules/process/mark_with.c:314
msgid "M_aximum:"
msgstr "M_aximum:"
-#: modules/process/mark_with.c:378
+#: modules/process/mark_with.c:382
msgid "Operand"
msgstr "Operand"
@@ -11257,107 +11608,107 @@ msgstr "Distribute to:"
msgid "Preserve existing masks"
msgstr "Preserve existing masks"
-#: modules/process/mask_edt.c:95
+#: modules/process/mask_edt.c:89
msgid "Performs simple and true Euclidean distance transforms of masks."
msgstr "Performs simple and true Euclidean distance transforms of masks."
-#: modules/process/mask_edt.c:109
+#: modules/process/mask_edt.c:103
msgid "/_Mask/Distanc_e Transform..."
msgstr "/_Mask/Distanc_e Transform..."
-#: modules/process/mask_edt.c:113
+#: modules/process/mask_edt.c:107
msgid "Distance transform of mask"
msgstr "Distance transform of mask"
-#: modules/process/mask_edt.c:116
+#: modules/process/mask_edt.c:110
msgid "/_Mask/Thi_n"
msgstr "/_Mask/Thi_n"
-#: modules/process/mask_edt.c:120
+#: modules/process/mask_edt.c:114
msgid "Thin mask"
msgstr "Thin mask"
-#: modules/process/mask_edt.c:330 modules/process/mask_edt.c:352
+#: modules/process/mask_edt.c:164 modules/process/mask_edt.c:186
msgid "Distance Transform"
msgstr "Distance Transform"
-#: modules/process/mask_edt.c:340
+#: modules/process/mask_edt.c:174
msgid "Interior"
msgstr "Interior"
-#: modules/process/mask_edt.c:341
+#: modules/process/mask_edt.c:175
msgid "Exterior"
msgstr "Exterior"
-#: modules/process/mask_edt.c:342
+#: modules/process/mask_edt.c:176
msgid "Two-sided"
msgstr "Two-sided"
-#: modules/process/mask_edt.c:373 modules/tools/maskedit.c:634
+#: modules/process/mask_edt.c:207 modules/tools/maskedit.c:640
msgid "_Distance type:"
msgstr "_Distance type:"
-#: modules/process/mask_edt.c:394 modules/tools/maskedit.c:640
+#: modules/process/mask_edt.c:228 modules/tools/maskedit.c:646
msgid "Shrink from _border"
msgstr "Shrink from _border"
-#: modules/process/mask_morph.c:117
+#: modules/process/mask_morph.c:116
msgid "Performs basic morphological operations with masks."
msgstr "Performs basic morphological operations with masks."
-#: modules/process/mask_morph.c:131
-msgid "/_Mask/Morphological Operation..."
-msgstr "/_Mask/Morphological Operation..."
+#: modules/process/mask_morph.c:130
+msgid "/_Mask/Morpho_logical Operation..."
+msgstr "/_Mask/Morpho_logical Operation..."
-#: modules/process/mask_morph.c:135
+#: modules/process/mask_morph.c:134
msgid "Morphological operation with mask"
msgstr "Morphological operation with mask"
-#: modules/process/mask_morph.c:169
+#: modules/process/mask_morph.c:168
msgid "Erosion"
msgstr "Erosion"
-#: modules/process/mask_morph.c:170
+#: modules/process/mask_morph.c:169
msgid "Dilation"
msgstr "Dilation"
-#: modules/process/mask_morph.c:171 modules/tools/filter.c:242
+#: modules/process/mask_morph.c:170 modules/tools/filter.c:243
msgid "filter|Opening"
msgstr "Opening"
-#: modules/process/mask_morph.c:172 modules/tools/filter.c:243
+#: modules/process/mask_morph.c:171 modules/tools/filter.c:244
msgid "filter|Closing"
msgstr "Closing"
-#: modules/process/mask_morph.c:173 modules/tools/filter.c:244
+#: modules/process/mask_morph.c:172 modules/tools/filter.c:245
msgid "ASF Opening"
msgstr "ASF Opening"
-#: modules/process/mask_morph.c:174 modules/tools/filter.c:245
+#: modules/process/mask_morph.c:173 modules/tools/filter.c:246
msgid "ASF Closing"
msgstr "ASF Closing"
-#: modules/process/mask_morph.c:178
+#: modules/process/mask_morph.c:177
msgid "Octagon"
msgstr "Octagon"
-#: modules/process/mask_morph.c:181
+#: modules/process/mask_morph.c:180
msgid "Another mask"
msgstr "Another mask"
-#: modules/process/mask_morph.c:192
+#: modules/process/mask_morph.c:191
msgid "Morphological Operation"
msgstr "Morphological Operation"
-#: modules/process/mask_morph.c:224
+#: modules/process/mask_morph.c:223
msgid "Structuring element:"
msgstr "Structuring element:"
-#: modules/process/mask_morph.c:238 modules/tools/maskedit.c:524
+#: modules/process/mask_morph.c:237 modules/tools/maskedit.c:528
msgid "_Radius:"
msgstr "_Radius:"
-#: modules/process/mask_morph.c:249
+#: modules/process/mask_morph.c:248
msgid "_Mask:"
msgstr "_Mask:"
@@ -11365,39 +11716,59 @@ msgstr "_Mask:"
msgid "_Trim empty borders"
msgstr "_Trim empty borders"
-#: modules/process/maskcor.c:86
+#: modules/process/mask_noisify.c:83
+msgid "Adds salt and/or pepper noise to mask."
+msgstr "Adds salt and/or pepper noise to mask."
+
+#: modules/process/mask_noisify.c:97
+msgid "/_Mask/_Noisify..."
+msgstr "/_Mask/_Noisify..."
+
+#: modules/process/mask_noisify.c:101
+msgid "Add noise to mask"
+msgstr "Add noise to mask"
+
+#: modules/process/mask_noisify.c:141
+msgid "Noisify Mask"
+msgstr "Noisify Mask"
+
+#: modules/process/mask_noisify.c:184
+msgid "_Alter only boundaries"
+msgstr "_Alter only boundaries"
+
+#: modules/process/maskcor.c:87
msgid "Creates mask by correlation with another data."
msgstr "Creates mask by correlation with another data."
-#: modules/process/maskcor.c:100
+#: modules/process/maskcor.c:101
msgid "/M_ultidata/_Mask by Correlation..."
msgstr "/M_ultidata/_Mask by Correlation..."
-#: modules/process/maskcor.c:104
+#: modules/process/maskcor.c:105
msgid "Create mask by correlation with another data"
msgstr "Create mask by correlation with another data"
-#: modules/process/maskcor.c:141
+#: modules/process/maskcor.c:142
msgid "Mask by Correlation"
msgstr "Mask by Correlation"
-#: modules/process/maskcor.c:165
+#: modules/process/maskcor.c:166
msgid "Correlation _kernel:"
msgstr "Correlation _kernel:"
-#: modules/process/maskcor.c:172
+#: modules/process/maskcor.c:173
msgid "Objects marked"
msgstr "Objects marked"
-#: modules/process/maskcor.c:173
+#: modules/process/maskcor.c:174
msgid "Correlation maxima"
msgstr "Correlation maxima"
-#: modules/process/maskcor.c:174 modules/process/maskcor.c:356
+#: modules/process/maskcor.c:175 modules/process/maskcor.c:360
msgid "Correlation score"
msgstr "Correlation score"
-#: modules/process/maskcor.c:183
+#: modules/process/maskcor.c:185
msgid "Correlation _method:"
msgstr "Correlation _method:"
@@ -11426,8 +11797,8 @@ msgid "/_Mask/_Extract Mask"
msgstr "/_Mask/_Extract Mask"
#: modules/process/maskops.c:78
-msgid "Extract mask to a new channel"
-msgstr "Extract mask to a new channel"
+msgid "Extract mask to a new image"
+msgstr "Extract mask to a new image"
#: modules/process/maskops.c:81
msgid "/_Grains/_Remove Edge-Touching"
@@ -11453,35 +11824,31 @@ msgstr "Crop non-intersecting regions of two images"
msgid "Mutual Crop"
msgstr "Mutual Crop"
-#: modules/process/mcrop.c:174
+#: modules/process/mcrop.c:173
msgid "_Select second argument:"
msgstr "_Select second argument:"
-#: modules/process/measure_lattice.c:174
+#: modules/process/measure_lattice.c:165
msgid "Measures parameters of two-dimensional lattices."
msgstr "Measures parameters of two-dimensional lattices."
-#: modules/process/measure_lattice.c:188
+#: modules/process/measure_lattice.c:179
msgid "/_Statistics/Measure _Lattice..."
msgstr "/_Statistics/Measure _Lattice..."
-#: modules/process/measure_lattice.c:192
+#: modules/process/measure_lattice.c:183
msgid "Measure lattice"
msgstr "Measure lattice"
-#: modules/process/measure_lattice.c:253
+#: modules/process/measure_lattice.c:243
msgid "Measure Lattice"
msgstr "Measure Lattice"
-#: modules/process/measure_lattice.c:259
-msgid "_Refine"
-msgstr "_Refine"
-
-#: modules/process/measure_lattice.c:330
+#: modules/process/measure_lattice.c:320
msgid "_ACF"
msgstr "_ACF"
-#: modules/process/measure_lattice.c:331
+#: modules/process/measure_lattice.c:321
msgid "_PSDF"
msgstr "_PSDF"
@@ -11497,30 +11864,30 @@ msgstr "_Lattice"
msgid "_Vectors"
msgstr "_Vectors"
-#: modules/process/measure_lattice.c:596
+#: modules/process/measure_lattice.c:589
msgid "Save Lattice Parameters"
msgstr "Save Lattice Parameters"
-#: modules/process/measure_lattice.c:634
+#: modules/process/measure_lattice.c:627
#, c-format
msgid "Vector %d:"
msgstr "Vector %d:"
-#: modules/process/measure_lattice.c:643
+#: modules/process/measure_lattice.c:636
#, c-format
msgid "Length %d:"
msgstr "Length %d:"
-#: modules/process/measure_lattice.c:650
+#: modules/process/measure_lattice.c:643
#, c-format
msgid "Angle %d:"
msgstr "Angle %d:"
-#: modules/process/measure_lattice.c:665
+#: modules/process/measure_lattice.c:657
msgid "Angle:"
msgstr "Angle:"
-#: modules/process/measure_lattice.c:681
+#: modules/process/measure_lattice.c:673
msgid "Lattice Parameters"
msgstr "Lattice Parameters"
@@ -11544,11 +11911,11 @@ msgstr "Median-levelling..."
msgid "Median Level"
msgstr "Median Level"
-#: modules/process/median-bg.c:199 modules/process/sphere-revolve.c:237
+#: modules/process/median-bg.c:199 modules/process/sphere-revolve.c:336
msgid "Real _radius:"
msgstr "Real _radius:"
-#: modules/process/median-bg.c:209 modules/process/sphere-revolve.c:247
+#: modules/process/median-bg.c:209 modules/process/sphere-revolve.c:346
msgid "_Pixel radius:"
msgstr "_Pixel radius:"
@@ -11588,7 +11955,7 @@ msgstr "First operand"
msgid "Second operand"
msgstr "Second operand"
-#: modules/process/merge.c:197 modules/xyz/xyz_raster.c:643
+#: modules/process/merge.c:197 modules/xyz/xyz_raster.c:612
msgid "Average"
msgstr "Average"
@@ -11640,6 +12007,221 @@ msgstr "Add _mask of outside pixels"
msgid "Merged images"
msgstr "Merged images"
+#: modules/process/mfm_current.c:163
+msgid "Simulation of current line magnetic field"
+msgstr "Simulation of current line magnetic field"
+
+#: modules/process/mfm_current.c:177
+msgid "/SPM M_odes/_MFM/_Current Line Field..."
+msgstr "/SPM M_odes/_MFM/_Current Line Field..."
+
+#: modules/process/mfm_current.c:181
+msgid "Simulate stray field above current line"
+msgstr "Simulate stray field above current line"
+
+#: modules/process/mfm_current.c:280 modules/process/mfm_parallel.c:282
+msgid "Simulated field"
+msgstr "Simulated field"
+
+#: modules/process/mfm_current.c:322 modules/process/mfm_field.c:266
+#: modules/process/mfm_parallel.c:324
+msgid "Point charge"
+msgstr "Point charge"
+
+#: modules/process/mfm_current.c:323 modules/process/mfm_field.c:267
+#: modules/process/mfm_parallel.c:325
+msgid "Bar"
+msgstr "Bar"
+
+#: modules/process/mfm_current.c:330
+msgid "Current Line Stray Field"
+msgstr "Current Line Stray Field"
+
+#: modules/process/mfm_current.c:415
+msgid "Output"
+msgstr "Output"
+
+#: modules/process/mfm_current.c:420 modules/process/mfm_field.c:320
+#: modules/process/mfm_parallel.c:415
+msgid "_Output plane height:"
+msgstr "_Output plane height:"
+
+#: modules/process/mfm_current.c:428
+msgid "_Stripe width:"
+msgstr "_Stripe width:"
+
+#: modules/process/mfm_current.c:436
+msgid "Stripe _current:"
+msgstr "Stripe _current:"
+
+#: modules/process/mfm_current.c:444
+msgid "_Position:"
+msgstr "_Position:"
+
+#: modules/process/mfm_current.c:461
+msgid "Probe"
+msgstr "Probe"
+
+#: modules/process/mfm_current.c:469
+msgid "P_robe type:"
+msgstr "P_robe type:"
+
+#: modules/process/mfm_current.c:475 modules/process/mfm_field.c:389
+#: modules/process/mfm_parallel.c:482
+msgid "Tip _magnetization:"
+msgstr "Tip _magnetisation:"
+
+#: modules/process/mfm_current.c:484 modules/process/mfm_field.c:397
+#: modules/process/mfm_parallel.c:491
+msgid "Bar width _x:"
+msgstr "Bar width _x:"
+
+#: modules/process/mfm_current.c:493 modules/process/mfm_field.c:405
+#: modules/process/mfm_parallel.c:500
+msgid "Bar width _y:"
+msgstr "Bar width _y:"
+
+#: modules/process/mfm_current.c:502 modules/process/mfm_field.c:413
+#: modules/process/mfm_parallel.c:509
+msgid "Bar length (_z):"
+msgstr "Bar length (_z):"
+
+#: modules/process/mfm_field.c:146
+msgid "Simulation of magnetic field above perpendicular media"
+msgstr "Simulation of magnetic field above perpendicular media"
+
+#: modules/process/mfm_field.c:160
+msgid "/SPM M_odes/_MFM/_Perpendicular Media Field..."
+msgstr "/SPM M_odes/_MFM/_Perpendicular Media Field..."
+
+#: modules/process/mfm_field.c:164
+msgid "Compute stray field above perpendicular magnetic medium"
+msgstr "Compute stray field above perpendicular magnetic medium"
+
+#: modules/process/mfm_field.c:276
+msgid "Perpendicular Media Stray Field"
+msgstr "Perpendicular Media Stray Field"
+
+#: modules/process/mfm_field.c:328 modules/process/mfm_parallel.c:423
+msgid "_Film thickness:"
+msgstr "_Film thickness:"
+
+#: modules/process/mfm_field.c:336
+msgid "_Magnetic charge:"
+msgstr "_Magnetic charge:"
+
+#: modules/process/mfm_field.c:344
+msgid "Include domain _walls"
+msgstr "Include domain _walls"
+
+#: modules/process/mfm_field.c:354
+msgid "_Exchange constant:"
+msgstr "_Exchange constant:"
+
+#: modules/process/mfm_field.c:362
+msgid "_Uniaxial anisotropy:"
+msgstr "_Uniaxial anisotropy:"
+
+#: modules/process/mfm_field.c:383 modules/process/mfm_parallel.c:476
+msgid "_Probe type:"
+msgstr "_Probe type:"
+
+#: modules/process/mfm_findshift.c:88
+msgid "Lift height difference estimation from data blur"
+msgstr "Lift height difference estimation from data blur"
+
+#: modules/process/mfm_findshift.c:102
+msgid "/SPM M_odes/_MFM/_Estimate Shift in Z..."
+msgstr "/SPM M_odes/_MFM/_Estimate Shift in Z..."
+
+#: modules/process/mfm_findshift.c:106
+msgid "Estimate lift height difference in MFM data"
+msgstr "Estimate lift height difference in MFM data"
+
+#: modules/process/mfm_findshift.c:166 modules/process/psf.c:340
+msgid "Searching..."
+msgstr "Searching..."
+
+#: modules/process/mfm_findshift.c:196
+msgid "Estimated shift:"
+msgstr "Estimated shift:"
+
+#: modules/process/mfm_findshift.c:211
+msgid "Shifted field difference"
+msgstr "Shifted field difference"
+
+#: modules/process/mfm_findshift.c:228
+msgid "Estimate Lift Height Shift"
+msgstr "Estimate Lift Height Shift"
+
+#: modules/process/mfm_findshift.c:255
+msgid "Data to compare:"
+msgstr "Data to compare:"
+
+#: modules/process/mfm_findshift.c:261
+msgid "Search _from:"
+msgstr "Search _from:"
+
+#: modules/process/mfm_findshift.c:269
+msgid "Search _to:"
+msgstr "Search _to:"
+
+#: modules/process/mfm_parallel.c:165
+msgid "Simulation of parallel magnetic media"
+msgstr "Simulation of parallel magnetic media"
+
+#: modules/process/mfm_parallel.c:179
+msgid "/SPM M_odes/_MFM/Para_llel Media Field..."
+msgstr "/SPM M_odes/_MFM/Para_llel Media Field..."
+
+#: modules/process/mfm_parallel.c:183
+msgid "Simulate stray field above parallel magnetic medium"
+msgstr "Simulate stray field above parallel magnetic medium"
+
+#: modules/process/mfm_parallel.c:331
+msgid "Parallel Media Stray Field"
+msgstr "Parallel Media Stray Field"
+
+#: modules/process/mfm_parallel.c:431
+msgid "_Remanent magnetization:"
+msgstr "_Remanent magnetisation:"
+
+#: modules/process/mfm_parallel.c:439
+msgid "Size _A (dir. left):"
+msgstr "Size _A (dir. left):"
+
+#: modules/process/mfm_parallel.c:447
+msgid "Size _B (dir. right):"
+msgstr "Size _B (dir. right):"
+
+#: modules/process/mfm_parallel.c:455
+msgid "_Gap size:"
+msgstr "_Gap size:"
+
+#: modules/process/mfm_shift.c:87
+msgid "Simulation of magnetic field z component change for another level"
+msgstr "Simulation of magnetic field z component change for another level"
+
+#: modules/process/mfm_shift.c:101
+msgid "/SPM M_odes/_MFM/_Field Shift in Z..."
+msgstr "/SPM M_odes/_MFM/_Field Shift in Z..."
+
+#: modules/process/mfm_shift.c:105
+msgid "Compute stray field shift for another z level"
+msgstr "Compute stray field shift for another z level"
+
+#: modules/process/mfm_shift.c:146
+msgid "Shifted field"
+msgstr "Shifted field"
+
+#: modules/process/mfm_shift.c:164
+msgid "Stray Field Plane Shift"
+msgstr "Stray Field Plane Shift"
+
+#: modules/process/mfm_shift.c:209
+msgid "_Z shift by:"
+msgstr "_Z shift by:"
+
#: modules/process/nanoindent_adjust.c:89
msgid "Adjust images of two indentor prints."
msgstr "Adjust images of two indentor prints."
@@ -11676,13 +12258,13 @@ msgstr "_Rotate data"
msgid "E_xtrapolate result data out of measured range"
msgstr "E_xtrapolate result data out of measured range"
-#: modules/process/nanoindent_adjust.c:295
+#: modules/process/nanoindent_adjust.c:296
msgid ""
"Tip has different range/resolution ratio than image. Tip will be resampled."
msgstr ""
"Tip has different range/resolution ratio than image. Tip will be resampled."
-#: modules/process/nanoindent_adjust.c:334
+#: modules/process/nanoindent_adjust.c:335
msgid "Immersed detail data"
msgstr "Immersed detail data"
@@ -11723,244 +12305,232 @@ msgstr "Training error"
msgid "error"
msgstr "error"
-#: modules/process/neural.c:503
+#: modules/process/neural.c:504
msgid "NN training error"
msgstr "NN training error"
-#: modules/process/neural.c:516
+#: modules/process/neural.c:517
msgid "Training"
msgstr "Training"
-#: modules/process/neural.c:520
+#: modules/process/neural.c:521
msgid "_Model:"
msgstr "_Model:"
-#: modules/process/neural.c:530
+#: modules/process/neural.c:532
msgid "_Signal:"
msgstr "_Signal:"
-#: modules/process/neural.c:541
+#: modules/process/neural.c:544
msgid "Training ste_ps:"
msgstr "Training ste_ps:"
-#: modules/process/neural.c:557
+#: modules/process/neural.c:561
msgid "Model"
msgstr "Model"
-#: modules/process/neural.c:558
+#: modules/process/neural.c:562
msgid "Signal"
msgstr "Signal"
-#: modules/process/neural.c:575
+#: modules/process/neural.c:579
msgid "verb|_Train"
msgstr "_Train"
-#: modules/process/neural.c:580
+#: modules/process/neural.c:584
msgid "Re_initialize"
msgstr "Re_initialise"
-#: modules/process/neural.c:613
+#: modules/process/neural.c:617
msgid "Network"
msgstr "Network"
-#: modules/process/neural.c:619
+#: modules/process/neural.c:623
msgid "Window _width:"
msgstr "Window _width:"
-#: modules/process/neural.c:627
+#: modules/process/neural.c:631
msgid "Window h_eight:"
msgstr "Window h_eight:"
-#: modules/process/neural.c:635
+#: modules/process/neural.c:639
msgid "_Hidden nodes:"
msgstr "_Hidden nodes:"
-#: modules/process/neural.c:643
+#: modules/process/neural.c:647
msgid "Result Units"
msgstr "Result Units"
-#: modules/process/neural.c:650
+#: modules/process/neural.c:654
msgid "Power of source _XY:"
msgstr "Power of source _XY:"
-#: modules/process/neural.c:658
+#: modules/process/neural.c:663
msgid "Power of source _Z:"
msgstr "Power of source _Z:"
-#: modules/process/neural.c:666
+#: modules/process/neural.c:672
msgid "_Fixed units:"
msgstr "_Fixed units:"
-#: modules/process/neural.c:676
+#: modules/process/neural.c:683
msgid "Networks"
msgstr "Networks"
-#: modules/process/neural.c:723
+#: modules/process/neural.c:730
msgid "Network _name:"
msgstr "Network _name:"
-#: modules/process/neural.c:775
+#: modules/process/neural.c:782
msgid "Apply Neural Network"
msgstr "Apply Neural Network"
-#: modules/process/neural.c:798
+#: modules/process/neural.c:805
msgid "_Scale proportionally to input"
msgstr "_Scale proportionally to input"
-#: modules/process/neural.c:929
+#: modules/process/neural.c:936
msgid "Model and signal are not compatible."
msgstr "Model and signal are not compatible."
-#: modules/process/neural.c:937
+#: modules/process/neural.c:944
msgid "A field dimension is too small for chosen window size."
msgstr "A field dimension is too small for chosen window size."
-#: modules/process/neural.c:1183 modules/process/neural.c:1349
+#: modules/process/neural.c:1190 modules/process/neural.c:1356
msgid "Evaluating..."
msgstr "Evaluating..."
-#: modules/process/neural.c:1309
+#: modules/process/neural.c:1316
msgid "Training was canceled."
msgstr "Training was cancelled."
-#: modules/process/neural.c:1319
+#: modules/process/neural.c:1326
#, c-format
msgid "Mean difference: %.*f %s"
msgstr "Mean difference: %.*f %s"
-#: modules/process/neural.c:1371
+#: modules/process/neural.c:1378
msgid "Evaluated signal"
msgstr "Evaluated signal"
-#: modules/process/noise_synth.c:196
+#: modules/process/noise_synth.c:194
msgid "Generates uncorrelated random noise."
msgstr "Generates uncorrelated random noise."
-#: modules/process/noise_synth.c:210
+#: modules/process/noise_synth.c:208
msgid "/S_ynthetic/_Noise..."
msgstr "/S_ynthetic/_Noise..."
-#: modules/process/noise_synth.c:214
+#: modules/process/noise_synth.c:212
msgid "Generate surface of uncorrelated noise"
msgstr "Generate surface of uncorrelated noise"
-#: modules/process/noise_synth.c:334
+#: modules/process/noise_synth.c:332
msgid "Random Noise"
msgstr "Random Noise"
-#: modules/process/obj_synth.c:274
+#: modules/process/obj_synth.c:270
msgid "Spheres"
msgstr "Spheres"
-#: modules/process/obj_synth.c:275
+#: modules/process/obj_synth.c:271
msgid "Boxes"
msgstr "Boxes"
-#: modules/process/obj_synth.c:276
+#: modules/process/obj_synth.c:272
msgid "Cones"
msgstr "Cones"
-#: modules/process/obj_synth.c:277
+#: modules/process/obj_synth.c:273
msgid "Pyramids"
msgstr "Pyramids"
-#: modules/process/obj_synth.c:278
+#: modules/process/obj_synth.c:274
msgid "Diamonds"
msgstr "Diamonds"
-#: modules/process/obj_synth.c:279
+#: modules/process/obj_synth.c:275
msgid "Tetrahedrons"
msgstr "Tetrahedrons"
-#: modules/process/obj_synth.c:280
+#: modules/process/obj_synth.c:276
msgid "Nuggets"
msgstr "Nuggets"
-#: modules/process/obj_synth.c:281
+#: modules/process/obj_synth.c:277
msgid "Thatches"
msgstr "Thatches"
-#: modules/process/obj_synth.c:282
+#: modules/process/obj_synth.c:278
msgid "Tents"
msgstr "Tents"
-#: modules/process/obj_synth.c:283
+#: modules/process/obj_synth.c:279
msgid "Gaussians"
msgstr "Gaussians"
-#: modules/process/obj_synth.c:284
+#: modules/process/obj_synth.c:280
msgid "Doughnuts"
msgstr "Doughnuts"
-#: modules/process/obj_synth.c:285
+#: modules/process/obj_synth.c:281
msgid "Parabolic bumps"
msgstr "Parabolic bumps"
-#: modules/process/obj_synth.c:291
+#: modules/process/obj_synth.c:287
msgid "Generates randomly patterned surfaces by placing objects."
msgstr "Generates randomly patterned surfaces by placing objects."
-#: modules/process/obj_synth.c:305
-msgid "/S_ynthetic/_Objects..."
-msgstr "/S_ynthetic/_Objects..."
+#: modules/process/obj_synth.c:301
+msgid "/S_ynthetic/_Deposition/_Objects..."
+msgstr "/S_ynthetic/_Deposition/_Objects..."
-#: modules/process/obj_synth.c:309
+#: modules/process/obj_synth.c:305
msgid "Generate surface of randomly placed objects"
msgstr "Generate surface of randomly placed objects"
-#: modules/process/obj_synth.c:424
+#: modules/process/obj_synth.c:421
msgid "Both (random)"
msgstr "Both (random)"
-#: modules/process/obj_synth.c:439
+#: modules/process/obj_synth.c:436
msgid "Random Objects"
msgstr "Random Objects"
-#: modules/process/obj_synth.c:513
-msgid "_Shape:"
-msgstr "_Shape:"
-
-#: modules/process/obj_synth.c:531
-msgid "obj."
-msgstr "obj."
-
-#: modules/process/obj_synth.c:551
+#: modules/process/obj_synth.c:549
msgid "Aspect Ratio"
msgstr "Aspect Ratio"
-#: modules/process/obj_synth.c:558
+#: modules/process/obj_synth.c:556
msgid "_Aspect ratio:"
msgstr "_Aspect ratio:"
-#: modules/process/obj_synth.c:588
+#: modules/process/obj_synth.c:586
msgid "Scales _with size"
msgstr "Scales _with size"
-#: modules/process/obj_synth.c:612
+#: modules/process/obj_synth.c:611
msgid "_Feature type:"
msgstr "_Feature type:"
-#: modules/process/obj_synth.c:807
-msgid "_Truncate:"
-msgstr "_Truncate:"
-
-#: modules/process/otsu_threshold.c:39 modules/process/otsu_threshold.c:59
+#: modules/process/otsu_threshold.c:40 modules/process/otsu_threshold.c:60
msgid "Automated threshold using Otsu's method on heights."
msgstr "Automated threshold using Otsu's method on heights."
-#: modules/process/otsu_threshold.c:55
-msgid "/_Grains/_Mark by Otsu's..."
-msgstr "/_Grains/_Mark by Otsu's..."
+#: modules/process/otsu_threshold.c:56
+msgid "/_Grains/_Mark by Otsu's"
+msgstr "/_Grains/_Mark by Otsu's"
-#: modules/process/outliers.c:40
+#: modules/process/outliers.c:41
msgid "Creates mask of outliers."
msgstr "Creates mask of outliers."
-#: modules/process/outliers.c:54
+#: modules/process/outliers.c:55
msgid "/_Correct Data/Mask of _Outliers"
msgstr "/_Correct Data/Mask of _Outliers"
-#: modules/process/outliers.c:58
+#: modules/process/outliers.c:59
msgid "Mark data farther than 3σ from mean value"
msgstr "Mark data farther than 3σ from mean value"
@@ -11984,80 +12554,100 @@ msgstr "Pattern"
msgid "_Pattern:"
msgstr "_Pattern:"
-#: modules/process/pat_synth.c:812
+#: modules/process/pat_synth.c:813
msgid "Flat"
msgstr "Flat"
-#: modules/process/pat_synth.c:820
+#: modules/process/pat_synth.c:821
msgid "_Flat width:"
msgstr "_Flat width:"
-#: modules/process/pat_synth.c:837 modules/process/pat_synth.c:1139
-#: modules/process/pat_synth.c:1474
+#: modules/process/pat_synth.c:838 modules/process/pat_synth.c:1140
+#: modules/process/pat_synth.c:1475
msgid "_Slope width:"
msgstr "_Slope width:"
-#: modules/process/pat_synth.c:1099
+#: modules/process/pat_synth.c:1100
msgid "Top"
msgstr "Top"
-#: modules/process/pat_synth.c:1106
+#: modules/process/pat_synth.c:1107
msgid "Flat _top width:"
msgstr "Flat _top width:"
-#: modules/process/pat_synth.c:1114
+#: modules/process/pat_synth.c:1115
msgid "Bottom"
msgstr "Bottom"
-#: modules/process/pat_synth.c:1122
+#: modules/process/pat_synth.c:1123
msgid "Flat _bottom width:"
msgstr "Flat _bottom width:"
-#: modules/process/pat_synth.c:1440
+#: modules/process/pat_synth.c:1441
msgid "_Distance:"
msgstr "_Distance:"
-#: modules/process/pid.c:96
+#: modules/process/phase_synth.c:136
+msgid "Generates phase-separated structures."
+msgstr "Generates phase-separated structures."
+
+#: modules/process/phase_synth.c:150
+msgid "/S_ynthetic/P_hases..."
+msgstr "/S_ynthetic/P_hases..."
+
+#: modules/process/phase_synth.c:154
+msgid "Generate surface with separated phases"
+msgstr "Generate surface with separated phases"
+
+#: modules/process/phase_synth.c:203
+msgid "Separated Phases"
+msgstr "Separated Phases"
+
+#: modules/process/phase_synth.c:287
+msgid "Size s_pread:"
+msgstr "Size s_pread:"
+
+#: modules/process/pid.c:95
msgid "A simple PID simulator"
msgstr "A simple PID simulator"
-#: modules/process/pid.c:110
+#: modules/process/pid.c:109
msgid "/_Tip and Indentation/_PID simulation..."
msgstr "/_Tip and Indentation/_PID simulation..."
-#: modules/process/pid.c:114
+#: modules/process/pid.c:113
msgid "Simulate PID effects on measurement"
msgstr "Simulate PID effects on measurement"
-#: modules/process/pid.c:158
+#: modules/process/pid.c:157
msgid "PID FW result"
msgstr "PID FW result"
-#: modules/process/pid.c:167
+#: modules/process/pid.c:166
msgid "PID FW max. force"
msgstr "PID FW max. force"
-#: modules/process/pid.c:176
+#: modules/process/pid.c:175
msgid "PID REV result"
msgstr "PID REV result"
-#: modules/process/pid.c:185
+#: modules/process/pid.c:184
msgid "PID REV max. force"
msgstr "PID REV max. force"
-#: modules/process/pid.c:198
+#: modules/process/pid.c:196
msgid "PID simulation"
msgstr "PID simulation"
-#: modules/process/pid.c:215
+#: modules/process/pid.c:214
msgid "_Proportional:"
msgstr "_Proportional:"
-#: modules/process/pid.c:221
+#: modules/process/pid.c:220
msgid "_Integral:"
msgstr "_Integral:"
-#: modules/process/pid.c:227
+#: modules/process/pid.c:226
msgid "_Integration steps:"
msgstr "_Integration steps:"
@@ -12065,15 +12655,15 @@ msgstr "_Integration steps:"
msgid "_Derivative:"
msgstr "_Derivative:"
-#: modules/process/pid.c:241
+#: modules/process/pid.c:240
msgid "PID/scan speed _ratio:"
msgstr "PID/scan speed _ratio:"
-#: modules/process/pid.c:253
+#: modules/process/pid.c:255
msgid "Force strength:"
msgstr "Force strength:"
-#: modules/process/pid.c:259
+#: modules/process/pid.c:261
msgid "Force setpoint:"
msgstr "Force setpoint:"
@@ -12081,7 +12671,7 @@ msgstr "Force setpoint:"
msgid "Scanning..."
msgstr "Scanning..."
-#: modules/process/pid.c:396
+#: modules/process/pid.c:401
msgid "Computation diverged, try to change parameters"
msgstr "Computation diverged, try to change parameters"
@@ -12101,23 +12691,23 @@ msgstr "Applies polynomial distortion in the horizontal plane"
msgid "Distort by Polynomial"
msgstr "Distort by Polynomial"
-#: modules/process/polydistort.c:282
+#: modules/process/polydistort.c:285
msgid "Ori_ginal"
msgstr "Ori_ginal"
-#: modules/process/polydistort.c:283
+#: modules/process/polydistort.c:286
msgid "_Transformed"
msgstr "_Transformed"
-#: modules/process/polydistort.c:289
+#: modules/process/polydistort.c:292
msgid "X Coefficients"
msgstr "X Coefficients"
-#: modules/process/polydistort.c:303
+#: modules/process/polydistort.c:306
msgid "Y Coefficients"
msgstr "Y Coefficients"
-#: modules/process/polydistort.c:499
+#: modules/process/polydistort.c:502
msgid "Distorted"
msgstr "Distorted"
@@ -12153,23 +12743,23 @@ msgstr "Levelled data"
msgid "_Horizontal polynom degree:"
msgstr "_Horizontal polynom degree:"
-#: modules/process/polylevel.c:450
+#: modules/process/polylevel.c:451
msgid "_Vertical polynom degree:"
msgstr "_Vertical polynom degree:"
-#: modules/process/polylevel.c:456
+#: modules/process/polylevel.c:458
msgid "_Same degrees"
msgstr "_Same degrees"
-#: modules/process/polylevel.c:474
+#: modules/process/polylevel.c:476
msgid "_Maximum polynom degree:"
msgstr "_Maximum polynom degree:"
-#: modules/process/polylevel.c:561
+#: modules/process/polylevel.c:564
msgid "Polynomial Coefficients"
msgstr "Polynomial Coefficients"
-#: modules/process/polylevel.c:934 modules/tools/distance.c:594
+#: modules/process/polylevel.c:937 modules/tools/distance.c:594
#: modules/tools/selectionmanager.c:720
msgid "Save Table"
msgstr "Save Table"
@@ -12191,8 +12781,8 @@ msgid "/_Presentation/E_xtract Presentation"
msgstr "/_Presentation/E_xtract Presentation"
#: modules/process/presentationops.c:81
-msgid "Extract presentation to a new channel"
-msgstr "Extract presentation to a new channel"
+msgid "Extract presentation to a new image"
+msgstr "Extract presentation to a new image"
#: modules/process/presentationops.c:84
msgid "/_Presentation/_Attach Presentation..."
@@ -12218,6 +12808,10 @@ msgstr "Attach Presentation"
msgid "_Data to attach:"
msgstr "_Data to attach:"
+#: modules/process/preview.h:245
+msgid "Combine with existing mask:"
+msgstr "Combine with existing mask:"
+
#: modules/process/psdf_logphi.c:76
msgid ""
"Two-dimensional FFT (Fast Fourier Transform) transformed to coordinates (log-"
@@ -12238,10 +12832,79 @@ msgstr "Compute PSDF in Log-Phi coordinates"
msgid "Log-Phi PSDF"
msgstr "Log-Phi PSDF"
-#: modules/process/psdf_logphi.c:275 modules/process/wpour_mark.c:320
+#: modules/process/psdf_logphi.c:276 modules/process/wpour_mark.c:320
msgid "Gaussian _smoothing:"
msgstr "Gaussian _smoothing:"
+#: modules/process/psf-fit.c:165
+msgid "Gaussian (asymmetric)"
+msgstr "Gaussian (asymmetric)"
+
+#: modules/process/psf-fit.c:177
+msgid "Point spread function estimation by fitting explicit function form."
+msgstr "Point spread function estimation by fitting explicit function form."
+
+#: modules/process/psf-fit.c:191
+msgid "/_Statistics/_PSF Fit..."
+msgstr "/_Statistics/_PSF Fit..."
+
+#: modules/process/psf-fit.c:195
+msgid "Fit PSF from known data and image"
+msgstr "Fit PSF from known data and image"
+
+#: modules/process/psf-fit.c:246 modules/process/psf.c:181
+#: modules/process/psf.c:230
+msgid "PSF"
+msgstr "PSF"
+
+#: modules/process/psf-fit.c:254 modules/process/psf.c:195
+msgid "PSF*P"
+msgstr "PSF*P"
+
+#: modules/process/psf-fit.c:271
+msgid "Fit PSF"
+msgstr "Fit PSF"
+
+#: modules/process/psf-fit.c:289 modules/process/psf.c:286
+msgid "_Ideal response:"
+msgstr "_Ideal response:"
+
+#: modules/process/psf.c:117
+msgid "Point spread function estimation"
+msgstr "Point spread function estimation"
+
+#: modules/process/psf.c:131
+msgid "/_Statistics/_PSF Guess..."
+msgstr "/_Statistics/_PSF Guess..."
+
+#: modules/process/psf.c:135
+msgid "Estimate PSF from known data and image"
+msgstr "Estimate PSF from known data and image"
+
+#: modules/process/psf.c:208
+msgid "PSF*P - I"
+msgstr "PSF*P - I"
+
+#: modules/process/psf.c:231
+msgid "Convolved"
+msgstr "Convolved"
+
+#: modules/process/psf.c:237
+msgid "Estimate PSF"
+msgstr "Estimate PSF"
+
+#: modules/process/psf.c:238
+msgid "_Fit"
+msgstr "_Fit"
+
+#: modules/process/psf.c:295
+msgid "_Display:"
+msgstr "_Display:"
+
+#: modules/process/psf.c:301
+msgid "_Sigma init:"
+msgstr "_Sigma init:"
+
#: modules/process/rank.c:92
msgid "Enhances local contrast using a rank transform."
msgstr "Enhances local contrast using a rank transform."
@@ -12290,7 +12953,7 @@ msgstr "/_Basic Operations/Rotate by _Angle..."
msgid "Rotate by arbitrary angle"
msgstr "Rotate by arbitrary angle"
-#: modules/process/rotate.c:192
+#: modules/process/rotate.c:192 modules/volume/volume_swaxes.c:651
msgid "Rotated Data"
msgstr "Rotated Data"
@@ -12346,63 +13009,63 @@ msgstr "Scaled Data"
msgid "verb|Scale"
msgstr "Scale"
-#: modules/process/scale.c:216
+#: modules/process/scale.c:217
msgid "Scale by _ratio:"
msgstr "Scale by _ratio:"
-#: modules/process/scale.c:224
+#: modules/process/scale.c:225
msgid "_proportional"
msgstr "_proportional"
-#: modules/process/scale.c:235
+#: modules/process/scale.c:237
msgid "New _width:"
msgstr "New _width:"
-#: modules/process/scale.c:243
+#: modules/process/scale.c:246
msgid "New _height:"
msgstr "New _height:"
-#: modules/process/scars.c:113
+#: modules/process/scars.c:122
msgid "Marks and/or removes scars (horizontal linear artifacts)."
msgstr "Marks and/or removes scars (horizontal linear artefacts)."
-#: modules/process/scars.c:127
+#: modules/process/scars.c:136
msgid "/_Correct Data/M_ark Scars..."
msgstr "/_Correct Data/M_ark Scars..."
-#: modules/process/scars.c:131
+#: modules/process/scars.c:140
msgid "Mark horizontal scars (strokes)"
msgstr "Mark horizontal scars (strokes)"
-#: modules/process/scars.c:134
+#: modules/process/scars.c:143
msgid "/_Correct Data/Remove _Scars"
msgstr "/_Correct Data/Remove _Scars"
-#: modules/process/scars.c:138
+#: modules/process/scars.c:147
msgid "Correct horizontal scars (strokes)"
msgstr "Correct horizontal scars (strokes)"
-#: modules/process/scars.c:293
+#: modules/process/scars.c:312
msgid "Mark Scars"
msgstr "Mark Scars"
-#: modules/process/scars.c:331
+#: modules/process/scars.c:353
msgid "Maximum _width:"
msgstr "Maximum _width:"
-#: modules/process/scars.c:338
+#: modules/process/scars.c:361
msgid "Minimum _length:"
msgstr "Minimum _length:"
-#: modules/process/scars.c:345
+#: modules/process/scars.c:369
msgid "_Hard threshold:"
msgstr "_Hard threshold:"
-#: modules/process/scars.c:353
+#: modules/process/scars.c:377
msgid "_Soft threshold:"
msgstr "_Soft threshold:"
-#: modules/process/scars.c:361
+#: modules/process/scars.c:385
msgid "Scars type:"
msgstr "Scars type:"
@@ -12442,27 +13105,27 @@ msgstr "Monte Carlo"
msgid "_Quality:"
msgstr "_Quality:"
-#: modules/process/shade.c:92
+#: modules/process/shade.c:94
msgid "Creates a shaded presentation of data."
msgstr "Creates a shaded presentation of data."
-#: modules/process/shade.c:106
+#: modules/process/shade.c:108
msgid "/_Presentation/_Shading..."
msgstr "/_Presentation/_Shading..."
-#: modules/process/shade.c:110
+#: modules/process/shade.c:112
msgid "Shade data"
msgstr "Shade data"
-#: modules/process/shade.c:207
+#: modules/process/shade.c:209
msgid "Shading"
msgstr "Shading"
-#: modules/process/shade.c:253
+#: modules/process/shade.c:260
msgid "_Mix:"
msgstr "_Mix:"
-#: modules/process/slope_dist.c:161
+#: modules/process/slope_dist.c:160
msgid ""
"Calculates one- or two-dimensional distribution of slopes or graph of their "
"angular distribution."
@@ -12470,82 +13133,131 @@ msgstr ""
"Calculates one- or two-dimensional distribution of slopes or graph of their "
"angular distribution."
-#: modules/process/slope_dist.c:176
+#: modules/process/slope_dist.c:175
msgid "/_Statistics/_Slope Distribution..."
msgstr "/_Statistics/_Slope Distribution..."
-#: modules/process/slope_dist.c:180
+#: modules/process/slope_dist.c:179
msgid "Calculate angular slope distribution"
msgstr "Calculate angular slope distribution"
-#: modules/process/slope_dist.c:221
+#: modules/process/slope_dist.c:220
msgid "Slope distribution"
msgstr "Slope distribution"
-#: modules/process/slope_dist.c:253
+#: modules/process/slope_dist.c:252
msgid "_Two-dimensional distribution"
msgstr "_Two-dimensional distribution"
-#: modules/process/slope_dist.c:254
+#: modules/process/slope_dist.c:253
msgid "Directional (φ) _graph"
msgstr "Directional (φ) _graph"
-#: modules/process/slope_dist.c:255
+#: modules/process/slope_dist.c:254
msgid "_Inclination (θ) graph"
msgstr "_Inclination (θ) graph"
-#: modules/process/slope_dist.c:256
+#: modules/process/slope_dist.c:255
msgid "Inclination (gra_dient) graph"
msgstr "Inclination (gra_dient) graph"
-#: modules/process/slope_dist.c:270
+#: modules/process/slope_dist.c:269
msgid "Slope Distribution"
msgstr "Slope Distribution"
-#: modules/process/slope_dist.c:755
+#: modules/process/slope_dist.c:749
msgid "Angular Slope Distribution"
msgstr "Angular Slope Distribution"
-#: modules/process/slope_dist.c:763 modules/process/tilt.c:179
+#: modules/process/slope_dist.c:757 modules/process/tilt.c:179
msgid "Slopes"
msgstr "Slopes"
-#: modules/process/slope_dist.c:824 modules/process/slope_dist.c:893
+#: modules/process/slope_dist.c:818 modules/process/slope_dist.c:887
msgid "Inclination Distribution"
msgstr "Inclination Distribution"
-#: modules/process/slope_dist.c:832 modules/process/slope_dist.c:901
+#: modules/process/slope_dist.c:826 modules/process/slope_dist.c:895
msgid "Inclinations"
msgstr "Inclinations"
-#: modules/process/sphere-revolve.c:97
+#: modules/process/sphere-revolve.c:111
msgid "Subtracts background by arc or sphere revolution."
msgstr "Subtracts background by arc or sphere revolution."
-#: modules/process/sphere-revolve.c:113
+#: modules/process/sphere-revolve.c:125
msgid "/_Level/Revolve _Arc..."
msgstr "/_Level/Revolve _Arc..."
-#: modules/process/sphere-revolve.c:117
+#: modules/process/sphere-revolve.c:129
msgid "Level data by arc revolution"
msgstr "Level data by arc revolution"
-#: modules/process/sphere-revolve.c:208 modules/tools/sfunctions.c:371
+#: modules/process/sphere-revolve.c:132
+msgid "/_Level/Revolve _Sphere..."
+msgstr "/_Level/Revolve _Sphere..."
+
+#: modules/process/sphere-revolve.c:136
+msgid "Level data by sphere revolution"
+msgstr "Level data by sphere revolution"
+
+#: modules/process/sphere-revolve.c:303 modules/tools/sfunctions.c:381
msgid "_Horizontal direction"
msgstr "_Horizontal direction"
-#: modules/process/sphere-revolve.c:209 modules/tools/sfunctions.c:372
+#: modules/process/sphere-revolve.c:304 modules/tools/sfunctions.c:382
msgid "_Vertical direction"
msgstr "_Vertical direction"
-#: modules/process/sphere-revolve.c:210
+#: modules/process/sphere-revolve.c:305
msgid "_Both directions"
msgstr "_Both directions"
-#: modules/process/sphere-revolve.c:217
+#: modules/process/sphere-revolve.c:315
+msgid "Revolve Sphere"
+msgstr "Revolve Sphere"
+
+#: modules/process/sphere-revolve.c:315
msgid "Revolve Arc"
msgstr "Revolve Arc"
+#: modules/process/sphere-revolve.c:355
+msgid "Direction:"
+msgstr "Direction:"
+
+#: modules/process/sphere-revolve.c:699
+msgid "Revolving sphere..."
+msgstr "Revolving sphere..."
+
+#: modules/process/stitch.c:135
+msgid "Stitch multiple images based on offsets of origins."
+msgstr "Stitch multiple images based on offsets of origins."
+
+#: modules/process/stitch.c:149
+msgid "/M_ultidata/_Stitch..."
+msgstr "/M_ultidata/_Stitch..."
+
+#: modules/process/stitch.c:153
+msgid "Stitch images using offsets"
+msgstr "Stitch images using offsets"
+
+#: modules/process/stitch.c:269
+msgid "Stitch"
+msgstr "Stitch"
+
+#: modules/process/stitch.c:312
+msgid "Channels"
+msgstr "Channels"
+
+#: modules/process/stitch.c:435
+msgid "Restore"
+msgstr "Restore"
+
+#: modules/process/stitch.c:445 modules/tools/linestats.c:379
+#: modules/tools/sfunctions.c:440 modules/tools/stats.c:406
+msgid "_Instant updates"
+msgstr "_Instant updates"
+
#: modules/process/straighten_path.c:126
msgid "Extracts a straightened part of image along a curve."
msgstr "Extracts a straightened part of image along a curve."
@@ -12562,28 +13274,28 @@ msgstr "Straighten along a path"
msgid "Straighten Path"
msgstr "Straighten Path"
-#: modules/process/straighten_path.c:254
+#: modules/process/straighten_path.c:253
msgid "Res_tore"
msgstr "Res_tore"
-#: modules/process/straighten_path.c:259
+#: modules/process/straighten_path.c:258
msgid "Re_verse"
msgstr "Re_verse"
#: modules/process/straighten_path.c:278 modules/tools/pathlevel.c:256
-#: modules/tools/profile.c:507 modules/tools/roughness.c:854
+#: modules/tools/profile.c:503 modules/tools/roughness.c:868
msgid "_Thickness:"
msgstr "_Thickness:"
-#: modules/process/straighten_path.c:286
+#: modules/process/straighten_path.c:287
msgid "_Slackness:"
msgstr "_Slackness:"
-#: modules/process/straighten_path.c:292
+#: modules/process/straighten_path.c:293
msgid "C_losed curve"
msgstr "C_losed curve"
-#: modules/process/straighten_path.c:379
+#: modules/process/straighten_path.c:380
msgid "Straightened"
msgstr "Straightened"
@@ -12605,52 +13317,52 @@ msgstr "Super resolution of multiple images of same object"
msgid "Supres"
msgstr "Supres"
-#: modules/process/superresolution.c:421
+#: modules/process/superresolution.c:420
msgid "Correlating to determine mean shift..."
msgstr "Correlating to determine mean shift..."
-#: modules/process/superresolution.c:511
+#: modules/process/superresolution.c:510
msgid "Cross-correlation..."
msgstr "Cross-correlation..."
-#: modules/process/superresolution.c:554 modules/xyz/xyz_raster.c:1079
-#: modules/xyz/xyz_raster.c:1119
+#: modules/process/superresolution.c:553 modules/xyz/xyz_raster.c:1053
+#: modules/xyz/xyz_raster.c:1093
msgid "Interpolating..."
msgstr "Interpolating..."
-#: modules/process/synth.h:343
+#: modules/process/synth.h:344
msgid "Roundness"
msgstr "Roundness"
-#: modules/process/synth.h:351
+#: modules/process/synth.h:352
msgid "Roundn_ess:"
msgstr "Roundn_ess:"
-#: modules/process/synth.h:399
+#: modules/process/synth.h:401
msgid "Orientation"
msgstr "Orientation"
-#: modules/process/synth.h:408
+#: modules/process/synth.h:410
msgid "Orien_tation:"
msgstr "Orien_tation:"
-#: modules/process/synth.h:432
+#: modules/process/synth.h:436
+msgid "_Truncate:"
+msgstr "_Truncate:"
+
+#: modules/process/synth.h:460
msgid "Variance:"
msgstr "Variance:"
-#: modules/process/synth.h:456
-msgid "Deformation"
-msgstr "Deformation"
-
-#: modules/process/synth.h:464
+#: modules/process/synth.h:493
msgid "_Amplitude:"
msgstr "_Amplitude:"
-#: modules/process/synth.h:472
+#: modules/process/synth.h:501
msgid "_Lateral scale:"
msgstr "_Lateral scale:"
-#: modules/process/synth.h:566
+#: modules/process/synth.h:595
msgid "Randomi_ze"
msgstr "Randomi_se"
@@ -12666,41 +13378,41 @@ msgstr "/_Basic Operations/Li_mit range..."
msgid "Limit data range"
msgstr "Limit data range"
-#: modules/process/threshold.c:246
+#: modules/process/threshold.c:241
msgid "Limit Range"
msgstr "Limit Range"
-#: modules/process/threshold.c:281
+#: modules/process/threshold.c:276
msgid "Specify _thresholds"
msgstr "Specify _thresholds"
-#: modules/process/threshold.c:283
+#: modules/process/threshold.c:278
msgid "Use _display range"
msgstr "Use _display range"
-#: modules/process/threshold.c:285
+#: modules/process/threshold.c:280
msgid "Cut off outlier_s"
msgstr "Cut off outlier_s"
-#: modules/process/threshold.c:294
+#: modules/process/threshold.c:289
msgid "_Lower:"
msgstr "_Lower:"
-#: modules/process/threshold.c:300
+#: modules/process/threshold.c:295
msgid "_Upper:"
msgstr "_Upper:"
-#: modules/process/threshold.c:305
+#: modules/process/threshold.c:300
msgid "Set to _Full Range"
msgstr "Set to _Full Range"
#. TRANSLATORS: This is a range: 123 to 456.
-#: modules/process/threshold.c:318
+#: modules/process/threshold.c:313
#, c-format
msgid "%.*f to %.*f"
msgstr "%.*f to %.*f"
-#: modules/process/threshold.c:341
+#: modules/process/threshold.c:336
msgid "F_arther than:"
msgstr "F_arther than:"
@@ -12720,11 +13432,11 @@ msgstr "Tilt by specified amount"
msgid "Tilt"
msgstr "Tilt"
-#: modules/process/tilt.c:185 modules/volume/volume_slice.c:444
+#: modules/process/tilt.c:185 modules/volume/volume_slice.c:446
msgid "_X:"
msgstr "_X:"
-#: modules/process/tilt.c:194 modules/volume/volume_slice.c:464
+#: modules/process/tilt.c:194 modules/volume/volume_slice.c:469
msgid "_Y:"
msgstr "_Y:"
@@ -12732,31 +13444,31 @@ msgstr "_Y:"
msgid "Angles"
msgstr "Angles"
-#: modules/process/tip_blind.c:178
+#: modules/process/tip_blind.c:177
msgid "Blind estimation of SPM tip using Villarubia's algorithm."
msgstr "Blind estimation of SPM tip using Villarubia's algorithm."
-#: modules/process/tip_blind.c:192
+#: modules/process/tip_blind.c:191
msgid "/_Tip and Indentation/_Blind Estimation..."
msgstr "/_Tip and Indentation/_Blind Estimation..."
-#: modules/process/tip_blind.c:196
+#: modules/process/tip_blind.c:195
msgid "Blind tip estimation"
msgstr "Blind tip estimation"
-#: modules/process/tip_blind.c:231
+#: modules/process/tip_blind.c:230
msgid "Blind Tip Estimation"
msgstr "Blind Tip Estimation"
-#: modules/process/tip_blind.c:232
+#: modules/process/tip_blind.c:231
msgid "Run _Partial"
msgstr "Run _Partial"
-#: modules/process/tip_blind.c:233
+#: modules/process/tip_blind.c:232
msgid "Run _Full"
msgstr "Run _Full"
-#: modules/process/tip_blind.c:234
+#: modules/process/tip_blind.c:233
msgid "_Reset Tip"
msgstr "_Reset Tip"
@@ -12764,77 +13476,77 @@ msgstr "_Reset Tip"
msgid "Related _data:"
msgstr "Related _data:"
-#: modules/process/tip_blind.c:326
+#: modules/process/tip_blind.c:327
msgid "Estimated Tip Size"
msgstr "Estimated Tip Size"
-#: modules/process/tip_blind.c:347
+#: modules/process/tip_blind.c:350
msgid "_Same resolution"
msgstr "_Same resolution"
-#: modules/process/tip_blind.c:366
+#: modules/process/tip_blind.c:376
msgid "Noise suppression t_hreshold:"
msgstr "Noise suppression t_hreshold:"
-#: modules/process/tip_blind.c:386
+#: modules/process/tip_blind.c:384
msgid "Use _boundaries"
msgstr "Use _boundaries"
-#: modules/process/tip_blind.c:396
+#: modules/process/tip_blind.c:395
msgid "Stripes"
msgstr "Stripes"
-#: modules/process/tip_blind.c:402
+#: modules/process/tip_blind.c:401
msgid "_Split to stripes:"
msgstr "_Split to stripes:"
-#: modules/process/tip_blind.c:416
+#: modules/process/tip_blind.c:412
msgid "_Preview stripe:"
msgstr "_Preview stripe:"
-#: modules/process/tip_blind.c:423
+#: modules/process/tip_blind.c:420
msgid "Plot size _graph"
msgstr "Plot size _graph"
-#: modules/process/tip_blind.c:433
+#: modules/process/tip_blind.c:430
msgid "Create tip i_mages"
msgstr "Create tip i_mages"
#. TRANSLATORS: Prefix for the progressbar message.
-#: modules/process/tip_blind.c:810
+#: modules/process/tip_blind.c:807
#, c-format
msgid "Stripe %u: "
msgstr "Stripe %u: "
-#: modules/process/tip_blind.c:917 modules/process/tip_blind.c:941
+#: modules/process/tip_blind.c:914 modules/process/tip_blind.c:938
msgid "Estimated tip"
msgstr "Estimated tip"
-#: modules/process/tip_blind.c:1207 modules/process/tip_blind.c:1216
+#: modules/process/tip_blind.c:1204 modules/process/tip_blind.c:1213
msgid "Tip radius evolution"
msgstr "Tip radius evolution"
-#: modules/process/tip_model.c:114
+#: modules/process/tip_model.c:112
msgid "Models SPM tip."
msgstr "Models SPM tip."
-#: modules/process/tip_model.c:129
+#: modules/process/tip_model.c:127
msgid "/_Tip and Indentation/_Model Tip..."
msgstr "/_Tip and Indentation/_Model Tip..."
-#: modules/process/tip_model.c:133
+#: modules/process/tip_model.c:131
msgid "Model AFM tip"
msgstr "Model AFM tip"
-#: modules/process/tip_model.c:164
+#: modules/process/tip_model.c:162
msgid "Model Tip"
msgstr "Model Tip"
-#: modules/process/tip_model.c:224
+#: modules/process/tip_model.c:222
msgid "Tip _type:"
msgstr "Tip _type:"
-#: modules/process/tip_model.c:229
+#: modules/process/tip_model.c:228
msgid "_Number of sides:"
msgstr "_Number of sides:"
@@ -12846,19 +13558,19 @@ msgstr "Tip _slope:"
msgid "Tip _rotation:"
msgstr "Tip _rotation:"
-#: modules/process/tip_model.c:250
+#: modules/process/tip_model.c:255
msgid "Tip _apex radius:"
msgstr "Tip _apex radius:"
-#: modules/process/tip_model.c:269
+#: modules/process/tip_model.c:265
msgid "Tip _anisotropy:"
msgstr "Tip _anisotropy:"
-#: modules/process/tip_model.c:490
+#: modules/process/tip_model.c:484
msgid "Modeled tip"
msgstr "Modelled tip"
-#: modules/process/tip_model.c:562
+#: modules/process/tip_model.c:556
#, c-format
msgid "Tip resolution: %d × %d pixels"
msgstr "Tip resolution: %d × %d pixels"
@@ -12967,7 +13679,7 @@ msgid "Converts datafield to 3D volume data."
msgstr "Converts datafield to 3D volume data."
#: modules/process/volumize.c:56
-msgid "/_Basic Operations/Volumize..."
+msgid "/_Basic Operations/Volumize"
msgstr "/_Basic Operations/Volumise..."
#: modules/process/volumize.c:60
@@ -13010,73 +13722,77 @@ msgstr "_Z resolution:"
msgid "Z _range:"
msgstr "Z _range:"
-#: modules/process/wave_synth.c:211
+#: modules/process/wave_synth.c:219
msgid "Generates various kinds of waves."
msgstr "Generates various kinds of waves."
-#: modules/process/wave_synth.c:225
+#: modules/process/wave_synth.c:233
msgid "/S_ynthetic/_Waves..."
msgstr "/S_ynthetic/_Waves..."
-#: modules/process/wave_synth.c:229
+#: modules/process/wave_synth.c:237
msgid "Generate waves"
msgstr "Generate waves"
-#: modules/process/wave_synth.c:347
+#: modules/process/wave_synth.c:366
msgid "Waves"
msgstr "Waves"
-#: modules/process/wave_synth.c:422 modules/tools/linestats.c:337
-#: modules/tools/sfunctions.c:401 modules/volume/volume_linestat.c:369
+#: modules/process/wave_synth.c:441 modules/tools/linestats.c:337
+#: modules/tools/sfunctions.c:411 modules/volume/volume_linestat.c:374
msgid "_Quantity:"
msgstr "_Quantity:"
-#: modules/process/wave_synth.c:429
+#: modules/process/wave_synth.c:448
msgid "_Number of waves:"
msgstr "_Number of waves:"
-#: modules/process/wave_synth.c:436 modules/process/wave_synth.c:582
-#: modules/tools/roughness.c:274
+#: modules/process/wave_synth.c:455 modules/process/wave_synth.c:617
+#: modules/tools/roughness.c:275
msgid "Amplitude"
msgstr "Amplitude"
-#: modules/process/wave_synth.c:441
+#: modules/process/wave_synth.c:460
msgid "_Wave form:"
msgstr "_Wave form:"
-#: modules/process/wave_synth.c:448
+#: modules/process/wave_synth.c:467
msgid "Amplitude:"
msgstr "Amplitude:"
-#: modules/process/wave_synth.c:466
+#: modules/process/wave_synth.c:487
+msgid "_Decay:"
+msgstr "_Decay:"
+
+#: modules/process/wave_synth.c:497
msgid "Frequency"
msgstr "Frequency"
-#: modules/process/wave_synth.c:472
+#: modules/process/wave_synth.c:503
msgid "_Spatial frequency:"
msgstr "_Spatial frequency:"
-#: modules/process/wave_synth.c:488
+#: modules/process/wave_synth.c:519
msgid "_X center:"
msgstr "_X centre:"
-#: modules/process/wave_synth.c:499
+#: modules/process/wave_synth.c:532
msgid "_Y center:"
msgstr "_Y centre:"
-#: modules/process/wave_synth.c:565
+#: modules/process/wave_synth.c:600
msgid "Cosine"
msgstr "Cosine"
-#: modules/process/wave_synth.c:566
+#: modules/process/wave_synth.c:601
msgid "Inverse cosh"
msgstr "Inverse cosh"
-#: modules/process/wave_synth.c:567
+#: modules/process/wave_synth.c:602
msgid "Flat top"
msgstr "Flat top"
-#: modules/process/wave_synth.c:581
+#: modules/process/wave_synth.c:616
msgid "Displacement"
msgstr "Displacement"
@@ -13160,39 +13876,39 @@ msgstr "Preprocess image"
msgid "Preprocess and mark"
msgstr "Preprocess and mark"
-#: modules/process/xydenoise.c:57
+#: modules/process/xydenoise.c:58
msgid "Denoises measurement on basis of two orthogonal scans."
msgstr "Denoises measurement on basis of two orthogonal scans."
-#: modules/process/xydenoise.c:71
+#: modules/process/xydenoise.c:72
msgid "/M_ultidata/_XY denoise..."
msgstr "/M_ultidata/_XY denoise..."
-#: modules/process/xydenoise.c:75
+#: modules/process/xydenoise.c:76
msgid "Denoises horizontal/vertical measurement."
msgstr "Denoises horizontal/vertical measurement."
-#: modules/process/xydenoise.c:102
+#: modules/process/xydenoise.c:103
msgid "XY Denoising"
msgstr "XY Denoising"
-#: modules/process/xydenoise.c:124
+#: modules/process/xydenoise.c:125
msgid "Second direction:"
msgstr "Second direction:"
-#: modules/process/xydenoise.c:232
+#: modules/process/xydenoise.c:233
msgid "Computing forward FFTs..."
msgstr "Computing forward FFTs..."
-#: modules/process/xydenoise.c:248
+#: modules/process/xydenoise.c:249
msgid "Computing image..."
msgstr "Computing image..."
-#: modules/process/xydenoise.c:260
+#: modules/process/xydenoise.c:261
msgid "Computing backward FFT..."
msgstr "Computing backward FFT..."
-#: modules/process/xydenoise.c:272
+#: modules/process/xydenoise.c:273
msgid "Denoised"
msgstr "Denoised"
@@ -13208,63 +13924,67 @@ msgstr "/_Basic Operations/_XYZise..."
msgid "Convert to XYZ data"
msgstr "Convert to XYZ data"
-#: modules/pygwy/pygwy-console.c:55
+#: modules/pygwy/pygwy-console.c:99
msgid "/Pygwy Console"
msgstr "/Pygwy Console"
-#: modules/pygwy/pygwy-console.c:59
+#: modules/pygwy/pygwy-console.c:103
msgid "Python wrapper console"
msgstr "Python wrapper console"
-#: modules/pygwy/pygwy-console.c:142
-msgid ">>> Running the script above\n"
-msgstr ">>> Running the script above\n"
-
-#: modules/pygwy/pygwy-console.c:194
-msgid "Open Python script"
-msgstr "Open Python script"
-
-#: modules/pygwy/pygwy-console.c:275
-msgid "Save Script as"
-msgstr "Save Script as"
-
-#: modules/pygwy/pygwy-console.c:327
+#: modules/pygwy/pygwy-console.c:168 modules/pygwy/pygwy-console.c:481
msgid "Pygwy Console"
msgstr "Pygwy Console"
-#: modules/pygwy/pygwy-console.c:340
-msgid "Clear Log"
-msgstr "Clear Log"
-
-#: modules/pygwy/pygwy-console.c:344
+#: modules/pygwy/pygwy-console.c:187
msgid "Open script in Python language (Ctrl-O)"
msgstr "Open script in Python language (Ctrl-O)"
-#: modules/pygwy/pygwy-console.c:346
+#: modules/pygwy/pygwy-console.c:197
msgid "Save script (Ctrl-S)"
msgstr "Save script (Ctrl-S)"
-#: modules/pygwy/pygwy-console.c:348
+#: modules/pygwy/pygwy-console.c:207
+msgid "Save script as (Ctrl-Shift-S)"
+msgstr "Save script as (Ctrl-Shift-S)"
+
+#: modules/pygwy/pygwy-console.c:217
msgid "Execute script (Ctrl-E)"
msgstr "Execute script (Ctrl-E)"
-#: modules/pygwy/pygwy-console.c:426
+#: modules/pygwy/pygwy-console.c:227
+msgid "Clear Log"
+msgstr "Clear Log"
+
+#: modules/pygwy/pygwy-console.c:285
msgid "Command"
msgstr "Command"
-#: pygwy.c:120
+#: modules/pygwy/pygwy-console.c:371
+msgid ">>> Running the script above\n"
+msgstr ">>> Running the script above\n"
+
+#: modules/pygwy/pygwy-console.c:425
+msgid "Save Python Script as"
+msgstr "Save Python Script as"
+
+#: modules/pygwy/pygwy-console.c:429
+msgid "Open Python Script"
+msgstr "Open Python Script"
+
+#: pygwy.c:130
msgid "Pygwy, the Gwyddion Python wrapper."
msgstr "Pygwy, the Gwyddion Python wrapper."
-#: pygwy.c:258
+#: pygwy.c:269
msgid "Python Interpreter Errors"
msgstr "Python Interpreter Errors"
-#: pygwy.c:384
+#: pygwy.c:399
msgid "Python interpreter error occurred."
msgstr "Python interpreter error occurred."
-#: pygwy.c:459
+#: pygwy.c:499
msgid "Function written in Python"
msgstr "Function written in Python"
@@ -13289,11 +14009,11 @@ msgid "Measure distances and directions between points"
msgstr "Measure distances and directions between points"
#. TRANSLATORS: Number is verb here.
-#: modules/tools/distance.c:250 modules/tools/profile.c:532
+#: modules/tools/distance.c:250 modules/tools/profile.c:527
msgid "_Number lines"
msgstr "_Number lines"
-#: modules/tools/filter.c:128
+#: modules/tools/filter.c:129
msgid ""
"Filter tool, processes selected part of data with a filter (conservative "
"denoise, mean, median. Kuwahara, minimum, maximum)."
@@ -13301,27 +14021,27 @@ msgstr ""
"Filter tool, processes selected part of data with a filter (conservative "
"denoise, mean, median. Kuwahara, minimum, maximum)."
-#: modules/tools/filter.c:171
+#: modules/tools/filter.c:172
msgid "Basic filters: mean, median, denoise, …"
msgstr "Basic filters: mean, median, denoise, …"
-#: modules/tools/filter.c:239
+#: modules/tools/filter.c:240
msgid "Conservative denoise"
msgstr "Conservative denoise"
-#: modules/tools/filter.c:246
+#: modules/tools/filter.c:247
msgid "Kuwahara"
msgstr "Kuwahara"
-#: modules/tools/filter.c:247
+#: modules/tools/filter.c:248
msgid "Dechecker"
msgstr "Dechecker"
-#: modules/tools/filter.c:248
+#: modules/tools/filter.c:249
msgid "filter|Gaussian"
msgstr "Gaussian"
-#: modules/tools/filter.c:249
+#: modules/tools/filter.c:250
msgid "Sharpen"
msgstr "Sharpen"
@@ -13416,7 +14136,7 @@ msgid "Height histogram"
msgstr "Height histogram"
#: modules/tools/icolorange.c:329 modules/tools/linestats.c:169
-#: modules/tools/sfunctions.c:226 modules/volume/volume_linestat.c:146
+#: modules/tools/sfunctions.c:231 modules/volume/volume_linestat.c:148
msgid "Range"
msgstr "Range"
@@ -13444,7 +14164,7 @@ msgstr "_Invert Mapping"
msgid "range|Full"
msgstr "Full"
-#: modules/tools/level3.c:106
+#: modules/tools/level3.c:108
msgid ""
"Three-point level tool, levels data by subtracting a plane fitted through "
"three selected points."
@@ -13452,23 +14172,23 @@ msgstr ""
"Three-point level tool, levels data by subtracting a plane fitted through "
"three selected points."
-#: modules/tools/level3.c:143
+#: modules/tools/level3.c:145
msgid "Three Point Level"
msgstr "Three Point Level"
-#: modules/tools/level3.c:144
+#: modules/tools/level3.c:146
msgid "Level data by fitting a plane through three points"
msgstr "Level data by fitting a plane through three points"
-#: modules/tools/level3.c:239 modules/tools/readvalue.c:375
+#: modules/tools/level3.c:244 modules/tools/readvalue.c:378
msgid "_Averaging radius:"
msgstr "_Averaging radius:"
-#: modules/tools/level3.c:246
+#: modules/tools/level3.c:251
msgid "_Instant apply"
msgstr "_Instant apply"
-#: modules/tools/level3.c:255
+#: modules/tools/level3.c:261
msgid "Set plane to _zero"
msgstr "Set plane to _zero"
@@ -13480,23 +14200,23 @@ msgstr ""
"Row/column statistical function tool, mean values, medians, maxima, minima, "
"RMS, ..., of rows or columns."
-#: modules/tools/linestats.c:172 modules/volume/volume_linestat.c:148
+#: modules/tools/linestats.c:172 modules/volume/volume_linestat.c:150
msgid "tan β<sub>0</sub>"
msgstr "tan β<sub>0</sub>"
-#: modules/tools/linestats.c:174 modules/volume/volume_linestat.c:150
+#: modules/tools/linestats.c:174 modules/volume/volume_linestat.c:152
msgid "Ra"
msgstr "Ra"
-#: modules/tools/linestats.c:175 modules/volume/volume_linestat.c:151
+#: modules/tools/linestats.c:175 modules/volume/volume_linestat.c:153
msgid "Rq (RMS)"
msgstr "Rq (RMS)"
-#: modules/tools/linestats.c:176 modules/volume/volume_linestat.c:152
+#: modules/tools/linestats.c:176 modules/volume/volume_linestat.c:154
msgid "Rz"
msgstr "Rz"
-#: modules/tools/linestats.c:177 modules/volume/volume_linestat.c:153
+#: modules/tools/linestats.c:177 modules/volume/volume_linestat.c:155
msgid "Rt"
msgstr "Rt"
@@ -13520,16 +14240,11 @@ msgstr "Co_lumns"
msgid "Average:"
msgstr "Average:"
-#: modules/tools/linestats.c:363 modules/tools/profile.c:464
-#: modules/tools/sfunctions.c:414 modules/tools/spectro.c:343
+#: modules/tools/linestats.c:363 modules/tools/profile.c:460
+#: modules/tools/sfunctions.c:424 modules/tools/spectro.c:346
msgid "<b>Options</b>"
msgstr "<b>Options</b>"
-#: modules/tools/linestats.c:379 modules/tools/sfunctions.c:430
-#: modules/tools/stats.c:408
-msgid "_Instant updates"
-msgstr "_Instant updates"
-
#: modules/tools/maskedit.c:170
msgid "Mask editor tool, allows interactive modification of parts of the mask."
msgstr ""
@@ -13587,63 +14302,63 @@ msgstr "Fill continuous empty areas with mask"
msgid "Erase continuous parts of mask"
msgstr "Erase continuous parts of mask"
-#: modules/tools/maskedit.c:408
+#: modules/tools/maskedit.c:409
msgid "Editor"
msgstr "Editor"
-#: modules/tools/maskedit.c:413
+#: modules/tools/maskedit.c:414
msgid "_Shapes"
msgstr "_Shapes"
-#: modules/tools/maskedit.c:423
+#: modules/tools/maskedit.c:428
msgid "Mode:"
msgstr "Mode:"
-#: modules/tools/maskedit.c:452
+#: modules/tools/maskedit.c:458
msgid "Shape:"
msgstr "Shape:"
-#: modules/tools/maskedit.c:483
+#: modules/tools/maskedit.c:486
msgid "_Drawing Tools"
msgstr "_Drawing Tools"
-#: modules/tools/maskedit.c:493
+#: modules/tools/maskedit.c:500
msgid "Tool:"
msgstr "Tool:"
-#: modules/tools/maskedit.c:532
+#: modules/tools/maskedit.c:538
msgid "Actions"
msgstr "Actions"
-#: modules/tools/maskedit.c:540
+#: modules/tools/maskedit.c:546
msgid "_Invert"
msgstr "_Invert"
-#: modules/tools/maskedit.c:571
+#: modules/tools/maskedit.c:577
msgid "Fill _Voids"
msgstr "Fill _Voids"
-#: modules/tools/maskedit.c:580
+#: modules/tools/maskedit.c:586
msgid "Fill non-simple-connected"
msgstr "Fill non-simple-connected"
-#: modules/tools/maskedit.c:591
+#: modules/tools/maskedit.c:597
msgid "Grow/Shrink"
msgstr "Grow/Shrink"
-#: modules/tools/maskedit.c:600
+#: modules/tools/maskedit.c:606
msgid "_Grow"
msgstr "_Grow"
-#: modules/tools/maskedit.c:608
+#: modules/tools/maskedit.c:614
msgid "Shrin_k"
msgstr "Shrin_k"
-#: modules/tools/maskedit.c:623
+#: modules/tools/maskedit.c:629
msgid "_Amount:"
msgstr "_Amount:"
-#: modules/tools/maskedit.c:651
+#: modules/tools/maskedit.c:657
msgid "_Prevent grain merging by growing"
msgstr "_Prevent grain merging by growing"
@@ -13659,83 +14374,95 @@ msgstr "Path Level"
msgid "Level rows using intersections with given lines"
msgstr "Level rows using intersections with given lines"
-#: modules/tools/profile.c:222
+#: modules/tools/profile.c:216
msgid "Profile tool, creates profile graphs from selected lines."
msgstr "Profile tool, creates profile graphs from selected lines."
-#: modules/tools/profile.c:276 modules/tools/profile.c:630
+#: modules/tools/profile.c:270 modules/tools/profile.c:609
msgid "Profiles"
msgstr "Profiles"
-#: modules/tools/profile.c:277
+#: modules/tools/profile.c:271
msgid "Extract profiles"
msgstr "Extract profiles"
-#: modules/tools/profile.c:480
-msgid "_Radial profiles"
-msgstr "_Radial profiles"
-
-#: modules/tools/profile.c:493
-msgid "Symmetrize _All"
-msgstr "Symmetrise _All"
+#: modules/tools/profile.c:478
+msgid "Linear profiles"
+msgstr "Linear profiles"
-#: modules/tools/profile.c:498
-msgid "S_ymmetrize"
-msgstr "S_ymmetrise"
+#: modules/tools/profile.c:480
+msgid "Radial profiles"
+msgstr "Radial profiles"
-#: modules/tools/profile.c:542
+#: modules/tools/profile.c:537
msgid "_Separate profiles"
msgstr "_Separate profiles"
-#: modules/tools/profile.c:607
+#: modules/tools/profile.c:587
msgid "_Calibration data:"
msgstr "_Calibration data:"
-#: modules/tools/profile.c:620
+#: modules/tools/profile.c:600
msgid "_Show profile"
msgstr "_Show profile"
-#: modules/tools/profile.c:887
+#: modules/tools/profile.c:861
#, c-format
msgid "X error %d"
msgstr "X error %d"
-#: modules/tools/profile.c:891
+#: modules/tools/profile.c:865
#, c-format
msgid "Y error %d"
msgstr "Y error %d"
-#: modules/tools/profile.c:895
+#: modules/tools/profile.c:869
#, c-format
msgid "Z error %d"
msgstr "Z error %d"
-#: modules/tools/profile.c:899
+#: modules/tools/profile.c:873
#, c-format
msgid "X uncertainty %d"
msgstr "X uncertainty %d"
-#: modules/tools/profile.c:903
+#: modules/tools/profile.c:877
#, c-format
msgid "Y uncertainty %d"
msgstr "Y uncertainty %d"
-#: modules/tools/profile.c:907
+#: modules/tools/profile.c:881
#, c-format
msgid "Z uncertainty %d"
msgstr "Z uncertainty %d"
-#: modules/tools/profile.c:912
+#: modules/tools/profile.c:886
#, c-format
msgid "Zunc up bound %d"
msgstr "Zunc up bound %d"
-#: modules/tools/profile.c:917
+#: modules/tools/profile.c:891
#, c-format
msgid "Zunc low bound %d"
msgstr "Zunc low bound %d"
-#: modules/tools/profile.c:1817
+#: modules/tools/profile.c:1637
+msgid "S_ymmetrize"
+msgstr "S_ymmetrise"
+
+#: modules/tools/profile.c:1639
+msgid "Symmetrize _All"
+msgstr "Symmetrise _All"
+
+#: modules/tools/profile.c:1643
+msgid "Improve _Direction"
+msgstr "Improve _Direction"
+
+#: modules/tools/profile.c:1645
+msgid "Improve _All"
+msgstr "Improve _All"
+
+#: modules/tools/profile.c:1866
msgid "calib-data|None"
msgstr "None"
@@ -13751,194 +14478,194 @@ msgstr "Read Value"
msgid "Read value under mouse cursor"
msgstr "Read value under mouse cursor"
-#: modules/tools/readvalue.c:304
+#: modules/tools/readvalue.c:307
msgid "Set _Zero"
msgstr "Set _Zero"
-#: modules/tools/readvalue.c:307
+#: modules/tools/readvalue.c:310
msgid "Shift plane z=0 to pass through the selected point"
msgstr "Shift plane z=0 to pass through the selected point"
-#: modules/tools/readvalue.c:315
+#: modules/tools/readvalue.c:318
msgid "Facet"
msgstr "Facet"
-#: modules/tools/readvalue.c:340
+#: modules/tools/readvalue.c:343
msgid "Curvatures"
msgstr "Curvatures"
-#: modules/tools/readvalue.c:382
+#: modules/tools/readvalue.c:386
msgid "Show _selection"
msgstr "Show _selection"
-#: modules/tools/roughness.c:282
+#: modules/tools/roughness.c:283
msgid "Roughness average"
msgstr "Roughness average"
-#: modules/tools/roughness.c:290
+#: modules/tools/roughness.c:291
msgid "Root mean square roughness"
msgstr "Root mean square roughness"
-#: modules/tools/roughness.c:298
+#: modules/tools/roughness.c:299
msgid "Maximum height of the roughness"
msgstr "Maximum height of the roughness"
-#: modules/tools/roughness.c:306
+#: modules/tools/roughness.c:307
msgid "Maximum roughness valley depth"
msgstr "Maximum roughness valley depth"
-#: modules/tools/roughness.c:314
+#: modules/tools/roughness.c:315
msgid "Maximum roughness peak height"
msgstr "Maximum roughness peak height"
-#: modules/tools/roughness.c:322 modules/tools/roughness.c:370
+#: modules/tools/roughness.c:323 modules/tools/roughness.c:371
msgid "Average maximum height of the roughness"
msgstr "Average maximum height of the roughness"
-#: modules/tools/roughness.c:330
+#: modules/tools/roughness.c:331
msgid "Average maximum roughness valley depth"
msgstr "Average maximum roughness valley depth"
-#: modules/tools/roughness.c:338
+#: modules/tools/roughness.c:339
msgid "Average maximum roughness peak height"
msgstr "Average maximum roughness peak height"
-#: modules/tools/roughness.c:346 modules/tools/roughness.c:354
+#: modules/tools/roughness.c:347 modules/tools/roughness.c:355
msgid "Average third highest peak to third lowest valley height"
msgstr "Average third highest peak to third lowest valley height"
-#: modules/tools/roughness.c:362
+#: modules/tools/roughness.c:363
msgid "Average maximum height of the profile"
msgstr "Average maximum height of the profile"
-#: modules/tools/roughness.c:378
+#: modules/tools/roughness.c:379
msgid "Skewness"
msgstr "Skewness"
-#: modules/tools/roughness.c:394
+#: modules/tools/roughness.c:395
msgid "Waviness average"
msgstr "Waviness average"
-#: modules/tools/roughness.c:402
+#: modules/tools/roughness.c:403
msgid "Root mean square waviness"
msgstr "Root mean square waviness"
-#: modules/tools/roughness.c:410
+#: modules/tools/roughness.c:411
msgid "Waviness maximum height"
msgstr "Waviness maximum height"
-#: modules/tools/roughness.c:418
+#: modules/tools/roughness.c:419
msgid "Maximum height of the profile"
msgstr "Maximum height of the profile"
-#: modules/tools/roughness.c:426
+#: modules/tools/roughness.c:427
msgid "Spatial"
msgstr "Spatial"
-#: modules/tools/roughness.c:476
+#: modules/tools/roughness.c:477
msgid "Average wavelength of the profile"
msgstr "Average wavelength of the profile"
-#: modules/tools/roughness.c:484
+#: modules/tools/roughness.c:485
msgid "Root mean square (RMS) wavelength of the profile"
msgstr "Root mean square (RMS) wavelength of the profile"
-#: modules/tools/roughness.c:492
+#: modules/tools/roughness.c:493
msgid "Hybrid"
msgstr "Hybrid"
-#: modules/tools/roughness.c:500
+#: modules/tools/roughness.c:501
msgid "Average absolute slope"
msgstr "Average absolute slope"
-#: modules/tools/roughness.c:508
+#: modules/tools/roughness.c:509
msgid "Root mean square (RMS) slope"
msgstr "Root mean square (RMS) slope"
-#: modules/tools/roughness.c:524
+#: modules/tools/roughness.c:525
msgid "Developed profile length"
msgstr "Developed profile length"
-#: modules/tools/roughness.c:532
+#: modules/tools/roughness.c:533
msgid "Profile length ratio"
msgstr "Profile length ratio"
-#: modules/tools/roughness.c:615
+#: modules/tools/roughness.c:616
msgid "Calculate surface profile parameters."
msgstr "Calculate surface profile parameters."
-#: modules/tools/roughness.c:648 modules/tools/roughness.c:773
-#: modules/tools/roughness.c:1452
+#: modules/tools/roughness.c:649 modules/tools/roughness.c:774
+#: modules/tools/roughness.c:1479
msgid "Roughness"
msgstr "Roughness"
-#: modules/tools/roughness.c:649
+#: modules/tools/roughness.c:650
msgid "Calculate roughness parameters"
msgstr "Calculate roughness parameters"
-#: modules/tools/roughness.c:771 modules/tools/roughness.c:1450
+#: modules/tools/roughness.c:772 modules/tools/roughness.c:1477
msgid "Texture"
msgstr "Texture"
-#: modules/tools/roughness.c:772 modules/tools/roughness.c:1451
+#: modules/tools/roughness.c:773 modules/tools/roughness.c:1478
msgid "Waviness"
msgstr "Waviness"
-#: modules/tools/roughness.c:774
+#: modules/tools/roughness.c:775
msgid "ADF"
msgstr "ADF"
-#: modules/tools/roughness.c:775
+#: modules/tools/roughness.c:776
msgid "BRC"
msgstr "BRC"
-#: modules/tools/roughness.c:776 modules/tools/roughness.c:1455
+#: modules/tools/roughness.c:777 modules/tools/roughness.c:1482
msgid "Peak Count"
msgstr "Peak Count"
-#: modules/tools/roughness.c:838 modules/xyz/xyz_drift.c:1090
+#: modules/tools/roughness.c:839 modules/xyz/xyz_drift.c:1090
msgid "_Graph:"
msgstr "_Graph:"
-#: modules/tools/roughness.c:845
+#: modules/tools/roughness.c:847
msgid "C_ut-off:"
msgstr "C_ut-off:"
-#: modules/tools/roughness.c:1324
+#: modules/tools/roughness.c:1345
msgid "No profile selected."
msgstr "No profile selected."
-#: modules/tools/roughness.c:1453
+#: modules/tools/roughness.c:1480
msgid "Amplitude Distribution Function"
msgstr "Amplitude Distribution Function"
-#: modules/tools/roughness.c:1454
+#: modules/tools/roughness.c:1481
msgid "The Bearing Ratio Curve"
msgstr "The Bearing Ratio Curve"
-#: modules/tools/roughness.c:1489
+#: modules/tools/roughness.c:1516
msgid "Surface Profiles"
msgstr "Surface Profiles"
-#: modules/tools/roughness.c:1877
+#: modules/tools/roughness.c:1904
msgid "Save Roughness Parameters"
msgstr "Save Roughness Parameters"
-#: modules/tools/roughness.c:1934
+#: modules/tools/roughness.c:1961
msgid "Roughness Parameters"
msgstr "Roughness Parameters"
-#: modules/tools/roughness.c:1940
+#: modules/tools/roughness.c:1967
#, c-format
msgid "File: %s\n"
msgstr "File: %s\n"
-#: modules/tools/roughness.c:1944
+#: modules/tools/roughness.c:1971
#, c-format
msgid "Data channel: %s\n"
msgstr "Data channel: %s\n"
-#: modules/tools/roughness.c:1975
+#: modules/tools/roughness.c:2002
#, c-format
msgid ""
"Selected line: (%s, %s) to (%s, %s) px\n"
@@ -13975,7 +14702,7 @@ msgstr "to _all files"
msgid "_Copy"
msgstr "_Copy"
-#: modules/tools/sfunctions.c:181
+#: modules/tools/sfunctions.c:186
msgid ""
"Statistical function tool, calculates one-dimensional statistical functions "
"(height distribution, correlations, PSDF, Minkowski functionals) of selected "
@@ -13985,87 +14712,91 @@ msgstr ""
"(height distribution, correlations, PSDF, Minkowski functionals) of selected "
"part of data."
-#: modules/tools/sfunctions.c:214
+#: modules/tools/sfunctions.c:219
msgid "Height distribution"
msgstr "Height distribution"
-#: modules/tools/sfunctions.c:215
+#: modules/tools/sfunctions.c:220
msgid "Cum. height distribution"
msgstr "Cum. height distribution"
-#: modules/tools/sfunctions.c:216
+#: modules/tools/sfunctions.c:221
msgid "Distribution of angles"
msgstr "Distribution of angles"
-#: modules/tools/sfunctions.c:217
+#: modules/tools/sfunctions.c:222
msgid "Cum. distribution of angles"
msgstr "Cum. distribution of angles"
-#: modules/tools/sfunctions.c:218
+#: modules/tools/sfunctions.c:223
msgid "ACF"
msgstr "ACF"
-#: modules/tools/sfunctions.c:219
+#: modules/tools/sfunctions.c:224
msgid "HHCF"
msgstr "HHCF"
-#: modules/tools/sfunctions.c:220
+#: modules/tools/sfunctions.c:225
msgid "PSDF"
msgstr "PSDF"
-#: modules/tools/sfunctions.c:221
+#: modules/tools/sfunctions.c:226
msgid "Radial PSDF"
msgstr "Radial PSDF"
-#: modules/tools/sfunctions.c:222
+#: modules/tools/sfunctions.c:227
msgid "Radial ACF"
msgstr "Radial ACF"
-#: modules/tools/sfunctions.c:223
+#: modules/tools/sfunctions.c:228
msgid "Minkowski volume"
msgstr "Minkowski volume"
-#: modules/tools/sfunctions.c:224
+#: modules/tools/sfunctions.c:229
msgid "Minkowski boundary"
msgstr "Minkowski boundary"
-#: modules/tools/sfunctions.c:225
+#: modules/tools/sfunctions.c:230
msgid "Minkowski connectivity"
msgstr "Minkowski connectivity"
-#: modules/tools/sfunctions.c:251
+#: modules/tools/sfunctions.c:232
+msgid "Area scale graph"
+msgstr "Area scale graph"
+
+#: modules/tools/sfunctions.c:257
msgid "Statistical Functions"
msgstr "Statistical Functions"
-#: modules/tools/sfunctions.c:252
+#: modules/tools/sfunctions.c:258
msgid "Calculate 1D statistical functions"
msgstr "Calculate 1D statistical functions"
-#: modules/tools/sfunctions.c:504
+#: modules/tools/sfunctions.c:501
msgid "_Separate uncertainty"
msgstr "_Separate uncertainty"
-#: modules/tools/spectro.c:151
+#: modules/tools/spectro.c:154
msgid "Point Spectrum, extracts point spectra to a graph."
msgstr "Point Spectrum, extracts point spectra to a graph."
-#: modules/tools/spectro.c:190
+#: modules/tools/spectro.c:193
msgid "Point Spectroscopy"
msgstr "Point Spectroscopy"
-#: modules/tools/spectro.c:191
+#: modules/tools/spectro.c:194
msgid "Extract and view point spectroscopy data"
msgstr "Extract and view point spectroscopy data"
-#: modules/tools/spectro.c:359
+#: modules/tools/spectro.c:362
msgid "_Separate spectra"
msgstr "_Separate spectra"
-#: modules/tools/spectro.c:369
+#: modules/tools/spectro.c:372
msgid "_Average spectra"
msgstr "_Average spectra"
-#: modules/tools/spectro.c:508
+#: modules/tools/spectro.c:511
msgid "Spectroscopy"
msgstr "Spectroscopy"
@@ -14105,14 +14836,6 @@ msgstr "No point in the image selected."
msgid "No area in the zoom selected."
msgstr "No area in the zoom selected."
-#: modules/tools/stats.c:205
-msgid "Average value:"
-msgstr "Average value:"
-
-#: modules/tools/stats.c:206
-msgid "Median:"
-msgstr "Median:"
-
#: modules/tools/stats.c:207
msgid "Ra (Sa):"
msgstr "Ra (Sa):"
@@ -14125,14 +14848,6 @@ msgstr "Rms (Sq):"
msgid "Rms (grain-wise):"
msgstr "Rms (grain-wise):"
-#: modules/tools/stats.c:210
-msgid "Skew:"
-msgstr "Skew:"
-
-#: modules/tools/stats.c:211
-msgid "Kurtosis:"
-msgstr "Kurtosis:"
-
#: modules/tools/stats.c:212
msgid "Surface area:"
msgstr "Surface area:"
@@ -14141,10 +14856,6 @@ msgstr "Surface area:"
msgid "Projected area:"
msgstr "Projected area:"
-#: modules/tools/stats.c:214
-msgid "Variation:"
-msgstr "Variation:"
-
#: modules/tools/stats.c:217
msgid "Inclination θ:"
msgstr "Inclination θ:"
@@ -14157,7 +14868,7 @@ msgstr "Inclination φ:"
msgid "Statistics tool."
msgstr "Statistics tool."
-#: modules/tools/stats.c:261 modules/tools/stats.c:1095
+#: modules/tools/stats.c:261 modules/tools/stats.c:1091
msgid "Statistical Quantities"
msgstr "Statistical Quantities"
@@ -14165,29 +14876,29 @@ msgstr "Statistical Quantities"
msgid "Statistical quantities"
msgstr "Statistical quantities"
-#: modules/tools/stats.c:1002
+#: modules/tools/stats.c:998
msgid "Save Statistical Quantities"
msgstr "Save Statistical Quantities"
-#: modules/tools/stats.c:1100
+#: modules/tools/stats.c:1096
#, c-format
msgid "File: %s\n"
msgstr "File: %s\n"
-#: modules/tools/stats.c:1104
+#: modules/tools/stats.c:1100
#, c-format
msgid "Data channel: %s\n"
msgstr "Data channel: %s\n"
-#: modules/tools/stats.c:1122
+#: modules/tools/stats.c:1118
msgid "Yes"
msgstr "Yes"
-#: modules/tools/stats.c:1122
+#: modules/tools/stats.c:1118
msgid "No"
msgstr "No"
-#: modules/tools/stats.c:1132
+#: modules/tools/stats.c:1128
#, c-format
msgid ""
"Selected area: %s × %s at (%s, %s) px\n"
@@ -14210,182 +14921,178 @@ msgstr "/_Dimensions and Units..."
msgid "Volume Dimensions and Units"
msgstr "Volume Dimensions and Units"
-#: modules/volume/volume_calibrate.c:526
+#: modules/volume/volume_calibrate.c:486
msgid "_Value range:"
msgstr "_Value range:"
-#: modules/volume/volume_calibrate.c:555
+#: modules/volume/volume_calibrate.c:508
msgid "Value shi_ft:"
msgstr "Value shi_ft:"
-#: modules/volume/volume_calibrate.c:601
+#: modules/volume/volume_calibrate.c:542
msgid "_Value calibration factor:"
msgstr "_Value calibration factor:"
-#: modules/volume/volume_extract.c:223
+#: modules/volume/volume_extract.c:216
msgid "Shows and/or extracts a section of volume data"
msgstr "Shows and/or extracts a section of volume data"
-#: modules/volume/volume_extract.c:237
-msgid "/Show and _extract..."
-msgstr "/Show and _extract..."
+#: modules/volume/volume_extract.c:230
+msgid "/Show and _Extract..."
+msgstr "/Show and _Extract..."
-#: modules/volume/volume_extract.c:241
+#: modules/volume/volume_extract.c:234
msgid "Show and/or extract a section of volume data"
msgstr "Show and/or extract a section of volume data"
-#: modules/volume/volume_extract.c:270
+#: modules/volume/volume_extract.c:263
msgid "X cross-section"
msgstr "X cross-section"
-#: modules/volume/volume_extract.c:271
+#: modules/volume/volume_extract.c:264
msgid "Y cross-section"
msgstr "Y cross-section"
-#: modules/volume/volume_extract.c:272
+#: modules/volume/volume_extract.c:265
msgid "Z cross-section"
msgstr "Z cross-section"
-#: modules/volume/volume_extract.c:273 modules/volume/volume_extract.c:698
+#: modules/volume/volume_extract.c:266 modules/volume/volume_extract.c:684
msgid "X direction sum"
msgstr "X direction sum"
-#: modules/volume/volume_extract.c:274 modules/volume/volume_extract.c:700
+#: modules/volume/volume_extract.c:267 modules/volume/volume_extract.c:686
msgid "Y direction sum"
msgstr "Y direction sum"
-#: modules/volume/volume_extract.c:275 modules/volume/volume_extract.c:702
+#: modules/volume/volume_extract.c:268 modules/volume/volume_extract.c:688
msgid "Z direction sum"
msgstr "Z direction sum"
-#: modules/volume/volume_extract.c:278
+#: modules/volume/volume_extract.c:271
msgid "X direction"
msgstr "X direction"
-#: modules/volume/volume_extract.c:279
+#: modules/volume/volume_extract.c:272
msgid "Y direction"
msgstr "Y direction"
-#: modules/volume/volume_extract.c:280
+#: modules/volume/volume_extract.c:273
msgid "Z direction"
msgstr "Z direction"
-#: modules/volume/volume_extract.c:322
+#: modules/volume/volume_extract.c:315
msgid "Volume data"
msgstr "Volume data"
-#: modules/volume/volume_extract.c:324
+#: modules/volume/volume_extract.c:317
msgid "_Load"
msgstr "_Load"
-#: modules/volume/volume_extract.c:336
+#: modules/volume/volume_extract.c:329
msgid "_Extract projection"
msgstr "_Extract projection"
-#: modules/volume/volume_extract.c:354
+#: modules/volume/volume_extract.c:347
msgid "Projections"
msgstr "Projections"
-#: modules/volume/volume_extract.c:404
+#: modules/volume/volume_extract.c:395
msgid "Z position"
msgstr "Z position"
-#: modules/volume/volume_extract.c:409
+#: modules/volume/volume_extract.c:405
msgid "Shown cut direction:"
msgstr "Shown cut direction:"
-#: modules/volume/volume_extract.c:419 modules/volume/volume_extract.c:500
-msgid "Show mode:"
-msgstr "Show mode:"
-
-#: modules/volume/volume_extract.c:490
+#: modules/volume/volume_extract.c:485
msgid "Graph cut direction:"
msgstr "Graph cut direction:"
-#: modules/volume/volume_extract.c:525
+#: modules/volume/volume_extract.c:511
msgid "3D view"
msgstr "3D view"
-#: modules/volume/volume_extract.c:550
+#: modules/volume/volume_extract.c:538
msgid "Zoom"
msgstr "Zoom"
-#: modules/volume/volume_extract.c:558
+#: modules/volume/volume_extract.c:545
msgid "Wireframe threshold"
msgstr "Wireframe threshold"
-#: modules/volume/volume_extract.c:566
+#: modules/volume/volume_extract.c:552
msgid "Z scale"
msgstr "Z scale"
-#: modules/volume/volume_extract.c:574
+#: modules/volume/volume_extract.c:559
msgid "Opacity scale"
msgstr "Opacity scale"
-#: modules/volume/volume_extract.c:580
-msgid "apply perspective"
-msgstr "apply perspective"
+#: modules/volume/volume_extract.c:565
+msgid "Apply perspective"
+msgstr "Apply perspective"
-#: modules/volume/volume_extract.c:589
-msgid "instant 3D render"
-msgstr "instant 3D render"
+#: modules/volume/volume_extract.c:574
+msgid "Instant 3D render"
+msgstr "Instant 3D render"
-#: modules/volume/volume_extract.c:598
+#: modules/volume/volume_extract.c:587
msgid "X view"
msgstr "X view"
-#: modules/volume/volume_extract.c:604
+#: modules/volume/volume_extract.c:592
msgid "Y view"
msgstr "Y view"
-#: modules/volume/volume_extract.c:610
+#: modules/volume/volume_extract.c:597
msgid "Z view"
msgstr "Z view"
-#: modules/volume/volume_extract.c:683
+#: modules/volume/volume_extract.c:669
#, c-format
msgid "X cross-section at x: %d"
msgstr "X cross-section at x: %d"
-#: modules/volume/volume_extract.c:686
+#: modules/volume/volume_extract.c:672
#, c-format
msgid "Y cross-section at y: %d"
msgstr "Y cross-section at y: %d"
-#: modules/volume/volume_extract.c:690
+#: modules/volume/volume_extract.c:676
#, c-format
msgid "Z cross-section at Z = %g %s (#%d)"
msgstr "Z cross-section at Z = %g %s (#%d)"
-#: modules/volume/volume_extract.c:749 modules/volume/volume_slice.c:1264
+#: modules/volume/volume_extract.c:735 modules/volume/volume_slice.c:1278
#, c-format
msgid "X graph at y: %d z: %d"
msgstr "X graph at y: %d z: %d"
-#: modules/volume/volume_extract.c:752 modules/volume/volume_slice.c:1273
+#: modules/volume/volume_extract.c:738 modules/volume/volume_slice.c:1287
#, c-format
msgid "Y graph at x: %d z: %d"
msgstr "Y graph at x: %d z: %d"
-#: modules/volume/volume_extract.c:755 modules/volume/volume_slice.c:1255
+#: modules/volume/volume_extract.c:741 modules/volume/volume_slice.c:1269
#, c-format
msgid "Z graph at x: %d y: %d"
msgstr "Z graph at x: %d y: %d"
-#: modules/volume/volume_extract.c:776
+#: modules/volume/volume_extract.c:762
msgid "Brick graph"
msgstr "Brick graph"
-#: modules/volume/volume_extract.c:1056
+#: modules/volume/volume_extract.c:1042
msgid "Load volume data"
msgstr "Load volume data"
-#: modules/volume/volume_extract.c:1218
+#: modules/volume/volume_extract.c:1204
#, c-format
msgid "Shown range %g to %g"
msgstr "Shown range %g to %g"
-#: modules/volume/volume_extract.c:1911
+#: modules/volume/volume_extract.c:1897
msgid "Building wireframe model..."
msgstr "Building wireframe model..."
@@ -14394,97 +15101,97 @@ msgid "Evaluate volume force-distance data"
msgstr "Evaluate volume force-distance data"
#: modules/volume/volume_fdfit.c:213
-msgid "/_Evaluate FD data..."
-msgstr "/_Evaluate FD data..."
+msgid "/_Evaluate FD Data..."
+msgstr "/_Evaluate FD Data..."
#: modules/volume/volume_fdfit.c:217
msgid "Evaluate force-distance volume data"
msgstr "Evaluate force-distance volume data"
-#: modules/volume/volume_fdfit.c:368
+#: modules/volume/volume_fdfit.c:371
msgid "Curve _X position:"
msgstr "Curve _X position:"
-#: modules/volume/volume_fdfit.c:386
+#: modules/volume/volume_fdfit.c:380
msgid "Curve _Y position:"
msgstr "Curve _Y position:"
-#: modules/volume/volume_fdfit.c:535
+#: modules/volume/volume_fdfit.c:511
msgid "e_stimate"
msgstr "e_stimate"
-#: modules/volume/volume_invert.c:51
+#: modules/volume/volume_invert.c:39 modules/volume/volumeops.c:39
msgid "Inverts value in volume data"
msgstr "Inverts value in volume data"
-#: modules/volume/volume_invert.c:65
-msgid "/_Invert value"
-msgstr "/_Invert value"
+#: modules/volume/volume_invert.c:53
+msgid "/_Invert Value"
+msgstr "/_Invert Value"
-#: modules/volume/volume_invert.c:69
+#: modules/volume/volume_invert.c:57
msgid "Invert value in volume data"
msgstr "Invert value in volume data"
-#: modules/volume/volume_kmeans.c:94
+#: modules/volume/volume_kmeans.c:95
msgid "Calculates K-means clustering on volume data."
msgstr "Calculates K-means clustering on volume data."
-#: modules/volume/volume_kmeans.c:108
-msgid "/_K-means clustering..."
-msgstr "/_K-means clustering..."
+#: modules/volume/volume_kmeans.c:109
+msgid "/_K-Means Clustering..."
+msgstr "/_K-Means Clustering..."
-#: modules/volume/volume_kmeans.c:112
+#: modules/volume/volume_kmeans.c:113
msgid "Calculate K-means clustering on volume data"
msgstr "Calculate K-means clustering on volume data"
-#: modules/volume/volume_kmeans.c:151
+#: modules/volume/volume_kmeans.c:152
msgid "K-means"
msgstr "K-means"
-#: modules/volume/volume_kmeans.c:170 modules/volume/volume_kmedians.c:164
+#: modules/volume/volume_kmeans.c:170 modules/volume/volume_kmedians.c:163
msgid "_Number of clusters:"
msgstr "_Number of clusters:"
-#: modules/volume/volume_kmeans.c:177 modules/volume/volume_kmedians.c:171
+#: modules/volume/volume_kmeans.c:177 modules/volume/volume_kmedians.c:170
msgid "Convergence _precision digits:"
msgstr "Convergence _precision digits:"
-#: modules/volume/volume_kmeans.c:184 modules/volume/volume_kmedians.c:178
+#: modules/volume/volume_kmeans.c:183 modules/volume/volume_kmedians.c:176
msgid "_Max. iterations:"
msgstr "_Max. iterations:"
-#: modules/volume/volume_kmeans.c:189 modules/volume/volume_kmedians.c:183
+#: modules/volume/volume_kmeans.c:187 modules/volume/volume_kmedians.c:181
msgid "_Normalize"
msgstr "_Normalise"
-#: modules/volume/volume_kmeans.c:195
+#: modules/volume/volume_kmeans.c:193
msgid "_Remove outliers"
msgstr "_Remove outliers"
-#: modules/volume/volume_kmeans.c:208
+#: modules/volume/volume_kmeans.c:202
msgid "Outliers _threshold:"
msgstr "Outliers _threshold:"
-#: modules/volume/volume_kmeans.c:431
+#: modules/volume/volume_kmeans.c:425
msgid "K-means iteration..."
msgstr "K-means iteration..."
-#: modules/volume/volume_kmeans.c:651
+#: modules/volume/volume_kmeans.c:645
#, c-format
msgid "K-means cluster of %s"
msgstr "K-means cluster of %s"
-#: modules/volume/volume_kmeans.c:660
+#: modules/volume/volume_kmeans.c:654
#, c-format
msgid "K-means error of %s"
msgstr "K-means error of %s"
-#: modules/volume/volume_kmeans.c:670 modules/volume/volume_kmedians.c:514
+#: modules/volume/volume_kmeans.c:664 modules/volume/volume_kmedians.c:512
#, c-format
msgid "Pre-normalized intensity of %s"
msgstr "Pre-normalised intensity of %s"
-#: modules/volume/volume_kmeans.c:702
+#: modules/volume/volume_kmeans.c:696
#, c-format
msgid "K-means center %d"
msgstr "K-means centre %d"
@@ -14494,8 +15201,8 @@ msgid "Calculates K-medians clustering on volume data."
msgstr "Calculates K-medians clustering on volume data."
#: modules/volume/volume_kmedians.c:102
-msgid "/_K-medians clustering..."
-msgstr "/_K-medians clustering..."
+msgid "/_K-Medians Clustering..."
+msgstr "/_K-Medians Clustering..."
#: modules/volume/volume_kmedians.c:106
msgid "Calculate K-medians clustering on volume data"
@@ -14505,46 +15212,46 @@ msgstr "Calculate K-medians clustering on volume data"
msgid "K-Medians"
msgstr "K-Medians"
-#: modules/volume/volume_kmedians.c:392
+#: modules/volume/volume_kmedians.c:390
msgid "K-medians iteration..."
msgstr "K-medians iteration..."
-#: modules/volume/volume_kmedians.c:495
+#: modules/volume/volume_kmedians.c:493
#, c-format
msgid "K-medians cluster of %s"
msgstr "K-medians cluster of %s"
-#: modules/volume/volume_kmedians.c:504
+#: modules/volume/volume_kmedians.c:502
#, c-format
msgid "K-medians error of %s"
msgstr "K-medians error of %s"
-#: modules/volume/volume_kmedians.c:546
+#: modules/volume/volume_kmedians.c:544
#, c-format
msgid "K-medians center %d"
msgstr "K-medians center %d"
-#: modules/volume/volume_linestat.c:171
+#: modules/volume/volume_linestat.c:173
msgid "Summarizes profiles of volume data to a channel."
msgstr "Summarises profiles of volume data to a channel."
-#: modules/volume/volume_linestat.c:185
+#: modules/volume/volume_linestat.c:187
msgid "/Summarize _Profiles..."
msgstr "/Summarise _Profiles..."
-#: modules/volume/volume_linestat.c:189
+#: modules/volume/volume_linestat.c:191
msgid "Summarize profiles"
msgstr "Summarise profiles"
-#: modules/volume/volume_linestat.c:249
+#: modules/volume/volume_linestat.c:251
msgid "_Extract image"
msgstr "_Extract image"
-#: modules/volume/volume_linestat.c:250
+#: modules/volume/volume_linestat.c:252
msgid "Set _preview"
msgstr "Set _preview"
-#: modules/volume/volume_linestat.c:284
+#: modules/volume/volume_linestat.c:289
msgid "Summarize Volume Profiles"
msgstr "Summarise Volume Profiles"
@@ -14568,53 +15275,113 @@ msgstr "Image slice"
msgid "Line graph"
msgstr "Line graph"
-#: modules/volume/volume_slice.c:290
+#: modules/volume/volume_slice.c:292
msgid "Slice Volume Data"
msgstr "Slice Volume Data"
-#: modules/volume/volume_slice.c:369
+#: modules/volume/volume_slice.c:371
msgid "_Base plane:"
msgstr "_Base plane:"
-#: modules/volume/volume_slice.c:420
+#: modules/volume/volume_slice.c:422
msgid "Extract _multiple items"
msgstr "Extract _multiple items"
-#: modules/volume/volume_slice.c:437
+#: modules/volume/volume_slice.c:439
msgid "Positions"
msgstr "Positions"
-#: modules/volume/volume_slice.c:484
+#: modules/volume/volume_slice.c:492
msgid "_Z:"
msgstr "_Z:"
-#: modules/volume/volume_slice.c:1156
+#: modules/volume/volume_slice.c:1167
#, c-format
msgid "Z slice at %.*f%s%s (#%d)"
msgstr "Z slice at %.*f%s%s (#%d)"
-#: modules/volume/volume_slice.c:1167
+#: modules/volume/volume_slice.c:1178
#, c-format
msgid "Y slice at %.*f%s%s (#%d)"
msgstr "Y slice at %.*f%s%s (#%d)"
-#: modules/volume/volume_slice.c:1178
+#: modules/volume/volume_slice.c:1189
#, c-format
msgid "X slice at %.*f%s%s (#%d)"
msgstr "X slice at %.*f%s%s (#%d)"
-#: modules/volume/volume_slice.c:1307
+#: modules/volume/volume_slice.c:1325
msgid "Volume Z graphs"
msgstr "Volume Z graphs"
-#: modules/volume/volume_slice.c:1314
+#: modules/volume/volume_slice.c:1332
msgid "Volume X graphs"
msgstr "Volume X graphs"
-#: modules/volume/volume_slice.c:1321
+#: modules/volume/volume_slice.c:1339
msgid "Volume Y graphs"
msgstr "Volume Y graphs"
+#: modules/volume/volume_swaxes.c:104
+msgid "Swaps axes of volume data."
+msgstr "Swaps axes of volume data."
+
+#: modules/volume/volume_swaxes.c:118
+msgid "/S_wap axes..."
+msgstr "/S_wap axes..."
+
+#: modules/volume/volume_swaxes.c:122
+msgid "Swap axes"
+msgstr "Swap axes"
+
+#: modules/volume/volume_swaxes.c:156
+msgid "X"
+msgstr "X"
+
+#: modules/volume/volume_swaxes.c:157
+msgid "X, reversed"
+msgstr "X, reversed"
+
+#: modules/volume/volume_swaxes.c:158
+msgid "Y"
+msgstr "Y"
+
+#: modules/volume/volume_swaxes.c:159
+msgid "Y, reversed"
+msgstr "Y, reversed"
+
+#: modules/volume/volume_swaxes.c:160
+msgid "Z"
+msgstr "Z"
+
+#: modules/volume/volume_swaxes.c:161
+msgid "Z, reversed"
+msgstr "Z, reversed"
+
+#: modules/volume/volume_swaxes.c:175
+msgid "Swap Volume Axes"
+msgstr "Swap Volume Axes"
+
+#: modules/volume/volume_swaxes.c:196
+msgid "Current _X axis will become:"
+msgstr "Current _X axis will become:"
+
+#: modules/volume/volume_swaxes.c:204
+msgid "Current _Y axis will become:"
+msgstr "Current _Y axis will become:"
+
+#: modules/volume/volume_swaxes.c:212
+msgid "Current _Z axis will become:"
+msgstr "Current _Z axis will become:"
+
+#: modules/volume/volume_swaxes.c:219
+msgid "Create new volume data"
+msgstr "Create new volume data"
+
+#: modules/volume/volume_swaxes.c:286
+msgid "Z axis calibration will be lost."
+msgstr "Z axis calibration will be lost."
+
#: modules/volume/volume_zcal.c:104
msgid "Attaches, extracts and removes volume data z-axis calibration."
msgstr "Attaches, extracts and removes volume data z-axis calibration."
@@ -14684,6 +15451,14 @@ msgstr ""
"The number of data file values %d\n"
"differs from the number of planes %d."
+#: modules/volume/volumeops.c:53
+msgid "/Extract _Preview"
+msgstr "/Extract _Preview"
+
+#: modules/volume/volumeops.c:57
+msgid "Extract volume data preview to an image"
+msgstr "Extract volume data preview to an image"
+
#: modules/xyz/xyz_drift.c:267
msgid "Analyzes drift in XYZ data."
msgstr "Analyses drift in XYZ data."
@@ -14728,7 +15503,7 @@ msgstr "z-axis drift"
msgid "Analyze XYZ Drift"
msgstr "Analyse XYZ Drift"
-#: modules/xyz/xyz_drift.c:566 modules/xyz/xyz_raster.c:391
+#: modules/xyz/xyz_drift.c:566 modules/xyz/xyz_raster.c:406
msgid "Reset Ran_ges"
msgstr "Reset Ran_ges"
@@ -14736,11 +15511,11 @@ msgstr "Reset Ran_ges"
msgid "_Guess parameters"
msgstr "_Guess parameters"
-#: modules/xyz/xyz_drift.c:778 modules/xyz/xyz_raster.c:570
+#: modules/xyz/xyz_drift.c:778 modules/xyz/xyz_raster.c:539
msgid "_X-range:"
msgstr "_X-range:"
-#: modules/xyz/xyz_drift.c:800 modules/xyz/xyz_raster.c:592
+#: modules/xyz/xyz_drift.c:800 modules/xyz/xyz_raster.c:561
msgid "_Y-range:"
msgstr "_Y-range:"
@@ -14818,7 +15593,7 @@ msgstr "No neighbours found"
msgid "Fitting in progress..."
msgstr "Fitting in progress..."
-#: modules/xyz/xyz_drift.c:2269 modules/xyz/xyz_raster.c:1012
+#: modules/xyz/xyz_drift.c:2264 modules/xyz/xyz_raster.c:981
msgid "Physical dimensions are invalid."
msgstr "Physical dimensions are invalid."
@@ -14858,39 +15633,39 @@ msgstr "Level XYZ Data"
msgid "Update X and Y of _all compatible data"
msgstr "Update X and Y of _all compatible data"
-#: modules/xyz/xyz_raster.c:197
+#: modules/xyz/xyz_raster.c:194
msgid "Rasterizes XYZ data to images."
msgstr "Rasterises XYZ data to images."
-#: modules/xyz/xyz_raster.c:211
+#: modules/xyz/xyz_raster.c:208
msgid "/_Rasterize..."
msgstr "/_Rasterise..."
-#: modules/xyz/xyz_raster.c:215
+#: modules/xyz/xyz_raster.c:212
msgid "Rasterize to image"
msgstr "Rasterise to image"
-#: modules/xyz/xyz_raster.c:340
+#: modules/xyz/xyz_raster.c:337
msgid "Rasterize XYZ Data"
msgstr "Rasterise XYZ Data"
-#: modules/xyz/xyz_raster.c:354
+#: modules/xyz/xyz_raster.c:351
msgid "Create Image _Directly"
msgstr "Create Image _Directly"
-#: modules/xyz/xyz_raster.c:360
+#: modules/xyz/xyz_raster.c:357
msgid "XY points form a regular grid so interpolation is not necessary."
msgstr "XY points form a regular grid so interpolation is not necessary."
-#: modules/xyz/xyz_raster.c:381
+#: modules/xyz/xyz_raster.c:392
msgid "Make Pixels S_quare"
msgstr "Make Pixels S_quare"
-#: modules/xyz/xyz_raster.c:642
+#: modules/xyz/xyz_raster.c:611
msgid "Field"
msgstr "Field"
-#: modules/xyz/xyz_raster.c:956
+#: modules/xyz/xyz_raster.c:925
#, c-format
msgid ""
"Number of points: %u\n"
@@ -14901,7 +15676,7 @@ msgstr ""
"Merged as too close: %u\n"
"Added on the boundaries: %u"
-#: modules/xyz/xyz_raster.c:1091
+#: modules/xyz/xyz_raster.c:1065
msgid ""
"XYZ data regularization failed due to numerical instability or was "
"interrupted."
@@ -14909,6 +15684,61 @@ msgstr ""
"XYZ data regularisation failed due to numerical instability or was "
"interrupted."
+#~ msgid "Re_fine"
+#~ msgstr "Re_fine"
+
+#~ msgid "pixels"
+#~ msgstr "pixels"
+
+#~ msgid "Fast Fourier Transform"
+#~ msgstr "Fast Fourier Transform"
+
+#~ msgid "built-in SimpleFFT\n"
+#~ msgstr "built-in SimpleFFT\n"
+
+#~ msgid "_Like Current Channel"
+#~ msgstr "_Like Current Channel"
+
+#~ msgid "Surface _coverage:"
+#~ msgstr "Surface _coverage:"
+
+#~ msgid "Distribute"
+#~ msgstr "Distribute"
+
+#~ msgid "Replace"
+#~ msgstr "Replace"
+
+#~ msgid "_Fix res.:"
+#~ msgstr "_Fix res.:"
+
+#~ msgid "Reco_mpute"
+#~ msgstr "Reco_mpute"
+
+#~ msgid "Show mode:"
+#~ msgstr "Show mode:"
+
+#, fuzzy
+#~ msgid "Stitch operations on data fields."
+#~ msgstr "Simple arithmetic operations with data fields."
+
+#, fuzzy
+#~ msgid "Stitch operations on data"
+#~ msgstr "Arithmetic operations on data"
+
+#~ msgid "Initializing GUI"
+#~ msgstr "Initialising GUI"
+
+#, fuzzy
+#~ msgid "X offset"
+#~ msgstr "_X offset:"
+
+#, fuzzy
+#~ msgid "Y offset"
+#~ msgstr "_Y offset:"
+
+#~ msgid "Create new channel"
+#~ msgstr "Create new channel"
+
#~ msgid "Borders extension..."
#~ msgstr "Borders extension..."
diff --git a/po/es.gmo b/po/es.gmo
index a76800e..c96926d 100644
Binary files a/po/es.gmo and b/po/es.gmo differ
diff --git a/po/es.po b/po/es.po
index 2db8791..982276e 100644
--- a/po/es.po
+++ b/po/es.po
@@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Gwyddion\n"
"Report-Msgid-Bugs-To: yeti at gwyddion.net\n"
-"POT-Creation-Date: 2016-11-18 11:05+0100\n"
+"POT-Creation-Date: 2017-08-15 17:48+0200\n"
"PO-Revision-Date: 2014-09-06 17:28+0200\n"
"Last-Translator: François RIGUET <francheu at caramail.com>\n"
"Language-Team: the Gwyddion team <gwyddion.net>\n"
@@ -127,7 +127,8 @@ msgstr ""
#: app/data-browser-aux.c:1480 app/data-browser.c:2280 app/data-browser.c:2887
#: app/data-browser.c:3707 app/data-browser.c:3857 app/data-browser.c:4139
#: app/data-browser.c:4504 app/data-browser.c:4590 app/data-browser.c:5016
-#: app/resource-editor.c:366 modules/process/convolution_filter.c:691
+#: app/resource-editor.c:366 modules/file/xyzexport.c:214
+#: modules/process/convolution_filter.c:691
msgid "Untitled"
msgstr "Sin título"
@@ -137,99 +138,107 @@ msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "anjuta"
-#: libgwyddion/gwynlfit.c:479 modules/process/fit-shape.c:1632
+#: libgwyddion/gwynlfit.c:479 modules/process/fit-shape.c:1646
#, fuzzy
msgid "Fitting..."
msgstr "Filtro"
-#: libgwyddion/gwynlfitpreset.c:1442 libprocess/gwyprocessenums.c:101
-#: libprocess/gwyshapefitpreset.c:347
+#: libgwyddion/gwynlfitpreset.c:1549 libprocess/gwyprocessenums.c:101
+#: libprocess/gwyshapefitpreset.c:347 modules/process/psf-fit.c:157
msgid "Gaussian"
msgstr "Gaussiano"
-#: libgwyddion/gwynlfitpreset.c:1457
+#: libgwyddion/gwynlfitpreset.c:1564
msgid "Gaussian (PSDF)"
msgstr "Gaussiano (PSDF)"
-#: libgwyddion/gwynlfitpreset.c:1470
+#: libgwyddion/gwynlfitpreset.c:1577
msgid "Gaussian (ACF)"
msgstr "Gaussiano (ACF)"
-#: libgwyddion/gwynlfitpreset.c:1483
+#: libgwyddion/gwynlfitpreset.c:1590
msgid "Gaussian (HHCF)"
msgstr "Gaussiano (HHCF)"
-#: libgwyddion/gwynlfitpreset.c:1496
+#: libgwyddion/gwynlfitpreset.c:1603
msgid "Gaussian (RPSDF)"
msgstr "Gaussiano (RPSDF)"
-#: libgwyddion/gwynlfitpreset.c:1509
+#: libgwyddion/gwynlfitpreset.c:1616
#, fuzzy
msgid "Two Gaussians (PSDF)"
msgstr "Gaussiano (PSDF)"
-#: libgwyddion/gwynlfitpreset.c:1524 modules/xyz/xyz_drift.c:841
-#: modules/xyz/xyz_drift.c:846 modules/xyz/xyz_drift.c:1819
+#: libgwyddion/gwynlfitpreset.c:1631 modules/xyz/xyz_drift.c:841
+#: modules/xyz/xyz_drift.c:846 modules/xyz/xyz_drift.c:1818
msgid "Exponential"
msgstr "Exponencial"
-#: libgwyddion/gwynlfitpreset.c:1536
+#: libgwyddion/gwynlfitpreset.c:1643
msgid "Exponential (PSDF)"
msgstr "Exponencial (PSDF)"
-#: libgwyddion/gwynlfitpreset.c:1549
+#: libgwyddion/gwynlfitpreset.c:1656
msgid "Exponential (ACF)"
msgstr "Exponencial(ACF)"
-#: libgwyddion/gwynlfitpreset.c:1561
+#: libgwyddion/gwynlfitpreset.c:1668
msgid "Exponential (HHCF)"
msgstr "Exponencial(HHCF)"
-#: libgwyddion/gwynlfitpreset.c:1574
+#: libgwyddion/gwynlfitpreset.c:1681
msgid "Exponential (RPSDF)"
msgstr "Exponencial(RPSDF)"
-#: libgwyddion/gwynlfitpreset.c:1588
+#: libgwyddion/gwynlfitpreset.c:1695
+msgid "K-correlated (PSDF)"
+msgstr ""
+
+#: libgwyddion/gwynlfitpreset.c:1709
msgid "Polynomial (order 0)"
msgstr "Polinomial(orden 0)"
-#: libgwyddion/gwynlfitpreset.c:1599 modules/xyz/xyz_drift.c:1805
+#: libgwyddion/gwynlfitpreset.c:1720 modules/xyz/xyz_drift.c:1804
msgid "Polynomial (order 1)"
msgstr "Polinomial(orden 1)"
-#: libgwyddion/gwynlfitpreset.c:1610
+#: libgwyddion/gwynlfitpreset.c:1731
msgid "Polynomial (order 2)"
msgstr "Polinomial (orden 2)"
-#: libgwyddion/gwynlfitpreset.c:1622
+#: libgwyddion/gwynlfitpreset.c:1743
msgid "Polynomial (order 3)"
msgstr "Polinomial(orden 3)"
-#: libgwyddion/gwynlfitpreset.c:1635
+#: libgwyddion/gwynlfitpreset.c:1756
msgid "Square wave"
msgstr "Onda cuadrada"
-#: libgwyddion/gwynlfitpreset.c:1651
+#: libgwyddion/gwynlfitpreset.c:1772
msgid "Parabolic step"
msgstr ""
-#: libgwyddion/gwynlfitpreset.c:1667
+#: libgwyddion/gwynlfitpreset.c:1788
msgid "Smooth slanted step"
msgstr ""
-#: libgwyddion/gwynlfitpreset.c:1684
+#: libgwyddion/gwynlfitpreset.c:1805
msgid "Smooth bent step"
msgstr ""
-#: libgwyddion/gwynlfitpreset.c:1700
+#: libgwyddion/gwynlfitpreset.c:1821
+msgid "Boltzmann bent step"
+msgstr ""
+
+#: libgwyddion/gwynlfitpreset.c:1837
msgid "Power"
msgstr "Potenciación"
-#: libgwyddion/gwynlfitpreset.c:1712 libprocess/gwyshapefitpreset.c:348
+#: libgwyddion/gwynlfitpreset.c:1849 libprocess/gwyshapefitpreset.c:348
msgid "Lorentzian"
msgstr "Lorentziana"
-#: libgwyddion/gwynlfitpreset.c:1726
+#: libgwyddion/gwynlfitpreset.c:1863
msgid "Sinc"
msgstr "Sinc"
@@ -250,7 +259,7 @@ msgid "Step height (positive)"
msgstr ""
#: libprocess/cdline.c:590 libprocess/cdline.c:599
-#: libgwydgets/gwydgetenums.c:48 modules/process/hough.c:170
+#: libgwydgets/gwydgetenums.c:48 modules/process/hough.c:163
msgid "Line"
msgstr "Línea"
@@ -263,7 +272,7 @@ msgid "Circle (down)"
msgstr ""
#: libprocess/cdline.c:608 libprocess/cdline.c:617
-#: libgwydgets/gwygraphareadialog.c:557 modules/process/hough.c:171
+#: libgwydgets/gwygraphareadialog.c:550 modules/process/hough.c:164
msgid "Circle"
msgstr "Círculo"
@@ -271,241 +280,241 @@ msgstr "Círculo"
msgid "Circle (up)"
msgstr ""
-#: libprocess/gwygrainvalue.c:64
+#: libprocess/gwygrainvalue.c:62
msgid "Grain number"
msgstr ""
-#: libprocess/gwygrainvalue.c:73 modules/process/curvature.c:129
+#: libprocess/gwygrainvalue.c:71 modules/process/curvature.c:128
msgid "Center x position"
msgstr "Centro posición x"
-#: libprocess/gwygrainvalue.c:82 modules/process/curvature.c:130
+#: libprocess/gwygrainvalue.c:80 modules/process/curvature.c:129
msgid "Center y position"
msgstr "Centro posición y"
-#: libprocess/gwygrainvalue.c:91
+#: libprocess/gwygrainvalue.c:89
msgid "Minimum value"
msgstr "Valor mínimo"
-#: libprocess/gwygrainvalue.c:100
+#: libprocess/gwygrainvalue.c:98
msgid "Maximum value"
msgstr "Valor máximo"
-#: libprocess/gwygrainvalue.c:109 modules/process/bdep_synth.c:133
-#: modules/tools/filter.c:237
+#: libprocess/gwygrainvalue.c:107 modules/process/bdep_synth.c:133
+#: modules/tools/filter.c:238
msgid "Mean value"
msgstr "Valor medio"
-#: libprocess/gwygrainvalue.c:118 modules/tools/filter.c:238
+#: libprocess/gwygrainvalue.c:116 modules/tools/filter.c:239
msgid "Median value"
msgstr "Valor mediano"
-#: libprocess/gwygrainvalue.c:127
+#: libprocess/gwygrainvalue.c:125
msgid "Minimum value on boundary"
msgstr ""
-#: libprocess/gwygrainvalue.c:136
+#: libprocess/gwygrainvalue.c:134
msgid "Maximum value on boundary"
msgstr ""
-#: libprocess/gwygrainvalue.c:145
+#: libprocess/gwygrainvalue.c:143
msgid "Pixel area"
msgstr ""
-#: libprocess/gwygrainvalue.c:154
+#: libprocess/gwygrainvalue.c:152
msgid "Projected area"
msgstr "Área proyectada"
-#: libprocess/gwygrainvalue.c:163
+#: libprocess/gwygrainvalue.c:161
msgid "Surface area"
msgstr "Área de superficie"
-#: libprocess/gwygrainvalue.c:172
+#: libprocess/gwygrainvalue.c:170
msgid "Equivalent square side"
msgstr ""
-#: libprocess/gwygrainvalue.c:181
+#: libprocess/gwygrainvalue.c:179
msgid "Equivalent disc radius"
msgstr ""
-#: libprocess/gwygrainvalue.c:190
+#: libprocess/gwygrainvalue.c:188
msgid "Area above half-height"
msgstr "Área sobre media-altura"
-#: libprocess/gwygrainvalue.c:199
+#: libprocess/gwygrainvalue.c:197
msgid "Area of convex hull"
msgstr ""
#. TRANSLATORS: Grain volume calculated using basis (foot) set to
#. * zero.
-#: libprocess/gwygrainvalue.c:210
+#: libprocess/gwygrainvalue.c:208
msgid "Zero basis volume"
msgstr "Volumen de base cero"
#. TRANSLATORS: Grain volume calculated using basis (foot) set to the
#. * grain minimum.
-#: libprocess/gwygrainvalue.c:221
+#: libprocess/gwygrainvalue.c:219
msgid "Grain minimum basis volume"
msgstr "Volumen base mínimo de grano"
#. TRANSLATORS: Grain volume calculated using basis (foot) set to the
#. * Laplacian background.
-#: libprocess/gwygrainvalue.c:232
+#: libprocess/gwygrainvalue.c:230
msgid "Laplacian background basis volume"
msgstr ""
-#: libprocess/gwygrainvalue.c:241
+#: libprocess/gwygrainvalue.c:239
msgid "Projected boundary length"
msgstr ""
-#: libprocess/gwygrainvalue.c:250
+#: libprocess/gwygrainvalue.c:248
msgid "Minimum bounding size"
msgstr ""
-#: libprocess/gwygrainvalue.c:259
+#: libprocess/gwygrainvalue.c:257
msgid "Minimum bounding direction"
msgstr ""
-#: libprocess/gwygrainvalue.c:268
+#: libprocess/gwygrainvalue.c:266
msgid "Maximum bounding size"
msgstr ""
-#: libprocess/gwygrainvalue.c:277
+#: libprocess/gwygrainvalue.c:275
msgid "Maximum bounding direction"
msgstr ""
-#: libprocess/gwygrainvalue.c:286
+#: libprocess/gwygrainvalue.c:284
msgid "Maximum inscribed disc radius"
msgstr ""
-#: libprocess/gwygrainvalue.c:295
+#: libprocess/gwygrainvalue.c:293
msgid "Maximum inscribed disc center x position"
msgstr ""
-#: libprocess/gwygrainvalue.c:304
+#: libprocess/gwygrainvalue.c:302
msgid "Maximum inscribed disc center y position"
msgstr ""
-#: libprocess/gwygrainvalue.c:313
+#: libprocess/gwygrainvalue.c:311
msgid "Minimum circumcircle radius"
msgstr ""
-#: libprocess/gwygrainvalue.c:322
+#: libprocess/gwygrainvalue.c:320
msgid "Minimum circumcircle center x position"
msgstr ""
-#: libprocess/gwygrainvalue.c:331
+#: libprocess/gwygrainvalue.c:329
msgid "Minimum circumcircle center y position"
msgstr ""
-#: libprocess/gwygrainvalue.c:340
+#: libprocess/gwygrainvalue.c:338
msgid "Mean radius"
msgstr "Radio medio"
-#: libprocess/gwygrainvalue.c:349 modules/tools/readvalue.c:319
+#: libprocess/gwygrainvalue.c:347 modules/tools/readvalue.c:322
msgid "Inclination θ"
msgstr "Inclinación θ"
-#: libprocess/gwygrainvalue.c:358 modules/tools/readvalue.c:329
+#: libprocess/gwygrainvalue.c:356 modules/tools/readvalue.c:332
msgid "Inclination φ"
msgstr "Inclinación φ"
-#: libprocess/gwygrainvalue.c:367
+#: libprocess/gwygrainvalue.c:365
msgid "Curvature center x position"
msgstr "Centro de curvatura posición x"
-#: libprocess/gwygrainvalue.c:376
+#: libprocess/gwygrainvalue.c:374
msgid "Curvature center y position"
msgstr "Centro de curvatura posición y"
-#: libprocess/gwygrainvalue.c:385
+#: libprocess/gwygrainvalue.c:383
msgid "Curvature center z value"
msgstr "Centro de curvatura valor z"
-#: libprocess/gwygrainvalue.c:394 modules/tools/readvalue.c:344
+#: libprocess/gwygrainvalue.c:392 modules/tools/readvalue.c:347
msgid "Curvature 1"
msgstr "Curvatura 1"
-#: libprocess/gwygrainvalue.c:403 modules/tools/readvalue.c:354
+#: libprocess/gwygrainvalue.c:401 modules/tools/readvalue.c:357
msgid "Curvature 2"
msgstr "Curvatura 2"
-#: libprocess/gwygrainvalue.c:412
+#: libprocess/gwygrainvalue.c:410
msgid "Curvature angle 1"
msgstr "Curvatura ángulo 1"
-#: libprocess/gwygrainvalue.c:421
+#: libprocess/gwygrainvalue.c:419
msgid "Curvature angle 2"
msgstr "Curvatura ángulo 2"
-#: libprocess/gwygrainvalue.c:430
+#: libprocess/gwygrainvalue.c:428
msgid "Major semiaxis of equivalent ellipse"
msgstr ""
-#: libprocess/gwygrainvalue.c:439
+#: libprocess/gwygrainvalue.c:437
msgid "Minor semiaxis of equivalent ellipse"
msgstr ""
-#: libprocess/gwygrainvalue.c:448
+#: libprocess/gwygrainvalue.c:446
msgid "Orientation of equivalent ellipse"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "advene"
-#: libprocess/gwygrainvalue.c:1120
+#: libprocess/gwygrainvalue.c:1118
msgid "Id"
msgstr "Id"
-#: libprocess/gwygrainvalue.c:1121 modules/graph/graph_peaks.c:156
-#: modules/process/extract_path.c:391 modules/process/wave_synth.c:482
-#: modules/tools/readvalue.c:251
+#: libprocess/gwygrainvalue.c:1119 modules/graph/graph_peaks.c:154
+#: modules/process/extract_path.c:391 modules/process/wave_synth.c:513
+#: modules/tools/readvalue.c:253
msgid "Position"
msgstr "Posición"
-#: libprocess/gwygrainvalue.c:1122 app/meta.c:411 modules/file/imgexport.c:4625
-#: modules/process/curvature.c:762 modules/tools/level3.c:468
-#: modules/tools/readvalue.c:286
+#: libprocess/gwygrainvalue.c:1120 app/meta.c:411 modules/file/imgexport.c:4573
+#: modules/process/curvature.c:759 modules/tools/level3.c:475
+#: modules/tools/readvalue.c:290
msgid "Value"
msgstr "Valor"
-#: libprocess/gwygrainvalue.c:1123
+#: libprocess/gwygrainvalue.c:1121
msgid "Area"
msgstr "Área"
-#: libprocess/gwygrainvalue.c:1124 app/data-browser.c:5624 app/toolbox.c:110
+#: libprocess/gwygrainvalue.c:1122 app/data-browser.c:5624 app/toolbox.c:115
msgid "Volume"
msgstr "Volumen"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "dia"
-#: libprocess/gwygrainvalue.c:1125
+#: libprocess/gwygrainvalue.c:1123
msgid "Boundary"
msgstr "Límite"
-#: libprocess/gwygrainvalue.c:1126 modules/process/pat_synth.c:829
-#: modules/process/pat_synth.c:1131 modules/process/pat_synth.c:1466
-#: modules/tools/linestats.c:171 modules/volume/volume_linestat.c:147
+#: libprocess/gwygrainvalue.c:1124 modules/process/pat_synth.c:830
+#: modules/process/pat_synth.c:1132 modules/process/pat_synth.c:1467
+#: modules/tools/linestats.c:171 modules/volume/volume_linestat.c:149
msgid "Slope"
msgstr "Rampa"
-#: libprocess/gwygrainvalue.c:1127 modules/process/curvature.c:213
-#: modules/process/curvature.c:613
+#: libprocess/gwygrainvalue.c:1125 modules/process/curvature.c:212
+#: modules/process/curvature.c:615
msgid "Curvature"
msgstr "Curvatura"
-#: libprocess/gwygrainvalue.c:1128
+#: libprocess/gwygrainvalue.c:1126
msgid "Moment"
msgstr ""
-#: libprocess/gwygrainvalue.c:1132
+#: libprocess/gwygrainvalue.c:1130
msgid "User"
msgstr "Usuario"
-#: libprocess/gwyprocessenums.c:44
+#: libprocess/gwyprocessenums.c:44 modules/process/preview.h:263
msgid "Union"
msgstr "Unión"
-#: libprocess/gwyprocessenums.c:45
+#: libprocess/gwyprocessenums.c:45 modules/process/preview.h:255
msgid "Intersection"
msgstr "Intersección"
@@ -584,13 +593,13 @@ msgid "Scale and space adaptive"
msgstr "Adaptable en en escala y espacio"
#. TRANSLATORS: Interpolation type (AKA nearest neighbour)
-#: libprocess/gwyprocessenums.c:207 modules/file/imgexport.c:3791
-#: modules/xyz/xyz_raster.c:640
+#: libprocess/gwyprocessenums.c:207 modules/file/imgexport.c:3756
+#: modules/xyz/xyz_raster.c:609
msgid "Round"
msgstr "Redondo"
-#: libprocess/gwyprocessenums.c:208 modules/file/imgexport.c:3792
-#: modules/xyz/xyz_raster.c:641
+#: libprocess/gwyprocessenums.c:208 modules/file/imgexport.c:3757
+#: modules/xyz/xyz_raster.c:610
msgid "Linear"
msgstr "Lineal"
@@ -678,30 +687,30 @@ msgstr "Incluye solo la región enmascarada"
msgid "Use entire image (ignore mask)"
msgstr "Usa la imagen entera (ignora la máscara)"
-#: libprocess/gwyprocessenums.c:602
+#: libprocess/gwyprocessenums.c:604
msgid "distance|City-block"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "celestia"
-#: libprocess/gwyprocessenums.c:603
+#: libprocess/gwyprocessenums.c:605
#, fuzzy
msgid "distance|Chess"
msgstr "Distancia"
-#: libprocess/gwyprocessenums.c:604
+#: libprocess/gwyprocessenums.c:606
msgid "distance|Octagonal 4,8"
msgstr ""
-#: libprocess/gwyprocessenums.c:605
+#: libprocess/gwyprocessenums.c:607
msgid "distance|Octagonal 8,4"
msgstr ""
-#: libprocess/gwyprocessenums.c:606
+#: libprocess/gwyprocessenums.c:608
msgid "distance|Octagonal"
msgstr ""
-#: libprocess/gwyprocessenums.c:607
+#: libprocess/gwyprocessenums.c:609
msgid "distance|Euclidean"
msgstr ""
@@ -742,12 +751,12 @@ msgstr "Paralelo"
msgid "Ring"
msgstr ""
-#: libprocess/morph_lib.c:169 libprocess/tip.c:1043
+#: libprocess/morph_lib.c:169 libprocess/tip.c:1052
#, fuzzy
msgid "Dilation..."
msgstr "Dilatación"
-#: libprocess/morph_lib.c:235 libprocess/tip.c:1164
+#: libprocess/morph_lib.c:235 libprocess/tip.c:1173
#, fuzzy
msgid "Erosion..."
msgstr "Erosión"
@@ -780,90 +789,90 @@ msgid_plural "Found %d internal local maxima"
msgstr[0] ""
msgstr[1] ""
-#: libprocess/tip.c:422
+#: libprocess/tip.c:431
#, fuzzy
msgid "Pyramid"
msgstr "Pirámide"
-#: libprocess/tip.c:423 libprocess/tip.c:429 libprocess/tip.c:435
+#: libprocess/tip.c:432 libprocess/tip.c:438 libprocess/tip.c:444
msgid "Pyramidal"
msgstr "Piramidal"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "almanah"
-#: libprocess/tip.c:428
+#: libprocess/tip.c:437
msgid "Contact"
msgstr "Contacto"
-#: libprocess/tip.c:434
+#: libprocess/tip.c:443
msgid "Noncontact"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "gimp"
-#: libprocess/tip.c:440
+#: libprocess/tip.c:449
msgid "Delta function"
msgstr "Función Delta"
-#: libprocess/tip.c:441
+#: libprocess/tip.c:450
msgid "Analytical"
msgstr ""
-#: libprocess/tip.c:446
+#: libprocess/tip.c:455 modules/process/fibre_synth.c:259
#, fuzzy
msgid "Parabola"
msgstr "Paralelo"
-#: libprocess/tip.c:447 libprocess/tip.c:453
+#: libprocess/tip.c:456 libprocess/tip.c:462
#, fuzzy
msgid "Symmetric"
msgstr "Simétrico"
-#: libprocess/tip.c:452
+#: libprocess/tip.c:461
#, fuzzy
msgid "Cone"
msgstr "Conos"
-#: libprocess/tip.c:458
+#: libprocess/tip.c:467
msgid "Elliptical parabola"
msgstr ""
-#: libprocess/tip.c:459
+#: libprocess/tip.c:468
#, fuzzy
msgid "Asymmetric"
msgstr "Simétrico"
-#: libprocess/tip.c:1339 libprocess/tip.c:1367 libprocess/tip.c:1416
-#: libprocess/tip.c:1443
+#: libprocess/tip.c:1348 libprocess/tip.c:1376 libprocess/tip.c:1425
+#: libprocess/tip.c:1452
msgid "Converting fields"
msgstr ""
-#: libprocess/tip.c:1349
+#: libprocess/tip.c:1358
msgid "Starting partial estimation"
msgstr ""
-#: libprocess/tip.c:1426
+#: libprocess/tip.c:1435
msgid "Starting full estimation"
msgstr ""
-#: libprocess/triangulation.c:2085 modules/process/calcoefs_view.c:793
+#: libprocess/triangulation.c:2084 modules/process/calcoefs_view.c:793
#: modules/process/lat_synth.c:1178
msgid "Triangulating..."
msgstr ""
-#: libgwydgets/gwy3dwindow.c:570
+#: libgwydgets/gwy3dwindow.c:575
msgid "Rotate view (R)"
msgstr "Rotar vista (R)"
-#: libgwydgets/gwy3dwindow.c:575
+#: libgwydgets/gwy3dwindow.c:580
msgid "Scale view as a whole (S)"
msgstr "Usar escala de la vista al completo (S)"
-#: libgwydgets/gwy3dwindow.c:580
+#: libgwydgets/gwy3dwindow.c:585
msgid "Scale value range (V)"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:585
+#: libgwydgets/gwy3dwindow.c:590
msgid "Move light source (L)"
msgstr ""
@@ -871,249 +880,312 @@ msgstr ""
msgid "Show full controls"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:693
+#: libgwydgets/gwy3dwindow.c:691
msgid "Hide full controls"
msgstr "Esconder controles completos"
-#: libgwydgets/gwy3dwindow.c:709 modules/file/imgexport.c:4796
-#: modules/process/fit-shape.c:461
+#: libgwydgets/gwy3dwindow.c:707 modules/file/imgexport.c:4745
+#: modules/process/fit-shape.c:462
msgid "adjective|Basic"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:714
+#: libgwydgets/gwy3dwindow.c:712
msgid "Light & Material"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:719
+#: libgwydgets/gwy3dwindow.c:717
msgid "Labels"
msgstr "Etiquetas"
-#: libgwydgets/gwy3dwindow.c:828 modules/process/facet_analysis.c:331
-#: modules/process/facet_analysis.c:347 modules/process/shade.c:245
+# Translation for this string generated by http://littlesvr.ca/ostd/
+# based on translation from "abiword"
+#: libgwydgets/gwy3dwindow.c:722
+#, fuzzy
+msgid "Colorbar"
+msgstr "Color"
+
+#: libgwydgets/gwy3dwindow.c:838 modules/process/facet_analysis.c:335
+#: modules/process/facet_analysis.c:351 modules/process/shade.c:253
#: modules/process/tilt.c:223
msgid "φ:"
msgstr "φ:"
-#: libgwydgets/gwy3dwindow.c:828 libgwydgets/gwy3dwindow.c:834
-#: libgwydgets/gwy3dwindow.c:1032 libgwydgets/gwy3dwindow.c:1040
-#: modules/process/facet_analysis.c:375 modules/process/indent_analyze.c:460
-#: modules/process/rotate.c:264 modules/process/shade.c:237
-#: modules/process/shade.c:245 modules/process/tilt.c:211
-#: modules/process/tilt.c:223 modules/process/tip_model.c:234
-#: modules/process/tip_model.c:240 modules/process/unrotate.c:334
+#: libgwydgets/gwy3dwindow.c:838 libgwydgets/gwy3dwindow.c:843
+#: libgwydgets/gwy3dwindow.c:1013 libgwydgets/gwy3dwindow.c:1020
+#: modules/process/correct_affine.c:461 modules/process/facet_analysis.c:238
+#: modules/process/facet_analysis.c:370 modules/process/indent_analyze.c:438
+#: modules/process/measure_lattice.c:381 modules/process/rotate.c:264
+#: modules/process/shade.c:245 modules/process/shade.c:253
+#: modules/process/synth.h:379 modules/process/synth.h:410
+#: modules/process/tilt.c:211 modules/process/tilt.c:223
+#: modules/process/tip_model.c:234 modules/process/tip_model.c:240
+#: modules/process/unrotate.c:334 modules/tools/distance.c:197
+#: modules/tools/readvalue.c:223 modules/tools/stats.c:319
msgid "deg"
msgstr "grad"
-#: libgwydgets/gwy3dwindow.c:834 modules/process/facet_analysis.c:330
-#: modules/process/facet_analysis.c:346 modules/process/shade.c:237
+#: libgwydgets/gwy3dwindow.c:843 modules/process/facet_analysis.c:334
+#: modules/process/facet_analysis.c:350 modules/process/shade.c:245
#: modules/process/tilt.c:211
msgid "θ:"
msgstr "θ:"
-#: libgwydgets/gwy3dwindow.c:839 modules/process/cwt.c:151
+#: libgwydgets/gwy3dwindow.c:849 modules/process/cwt.c:151
msgid "_Scale:"
msgstr "E_scala:"
-#: libgwydgets/gwy3dwindow.c:846
+#: libgwydgets/gwy3dwindow.c:856
msgid "_Value scale:"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:851
+#: libgwydgets/gwy3dwindow.c:862
msgid "Ph_ysical scale:"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:865
+#: libgwydgets/gwy3dwindow.c:876
msgid "verb|Set"
msgstr "Ajustar"
-#: libgwydgets/gwy3dwindow.c:877
+#: libgwydgets/gwy3dwindow.c:886
#, fuzzy
msgid "Line _width:"
msgstr "Nueva _anchura:"
-#: libgwydgets/gwy3dwindow.c:881
+#: libgwydgets/gwy3dwindow.c:886 libgwydgets/gwy3dwindow.c:1194
+#: libgwydgets/gwy3dwindow.c:1204 libgwydgets/gwy3dwindow.c:1235
+#: libgwydgets/gwygraphareadialog.c:157 libgwydgets/gwygraphareadialog.c:173
+#: modules/file/hdrimage.cc:2246 modules/file/hdrimage.cc:2252
+#: modules/file/pixmap.c:820 modules/file/pixmap.c:826
+#: modules/process/angle_dist.c:188 modules/process/angle_dist.c:213
+#: modules/process/col_synth.c:486 modules/process/crosscor.c:252
+#: modules/process/crosscor.c:260 modules/process/crosscor.c:276
+#: modules/process/crosscor.c:284 modules/process/crosscor.c:300
+#: modules/process/crosscor.c:308 modules/process/cwt.c:151
+#: modules/process/dimensions.h:88 modules/process/edge.c:672
+#: modules/process/entropy.c:242 modules/process/extend.c:220
+#: modules/process/extend.c:227 modules/process/extend.c:234
+#: modules/process/extend.c:241 modules/process/facet_analysis.c:362
+#: modules/process/fbm_synth.c:383 modules/process/hough.c:203
+#: modules/process/local_contrast.c:146 modules/process/mark_disconn.c:263
+#: modules/process/mask_morph.c:237 modules/process/median-bg.c:209
+#: modules/process/neural.c:623 modules/process/neural.c:631
+#: modules/process/psdf_logphi.c:276 modules/process/rank.c:188
+#: modules/process/scale.c:237 modules/process/scale.c:246
+#: modules/process/scars.c:353 modules/process/scars.c:361
+#: modules/process/semsim.c:227 modules/process/slope_dist.c:365
+#: modules/process/slope_dist.c:393 modules/process/sphere-revolve.c:346
+#: modules/process/straighten_path.c:278 modules/process/synth.h:280
+#: modules/process/synth.h:501 modules/process/tip_blind.c:334
+#: modules/process/tip_blind.c:342 modules/process/volumize_layers.c:240
+#: modules/process/volumize_layers.c:245 modules/process/volumize_layers.c:250
+#: modules/process/wpour_mark.c:320 modules/tools/filter.c:291
+#: modules/tools/level3.c:244 modules/tools/maskedit.c:528
+#: modules/tools/maskedit.c:629 modules/tools/pathlevel.c:256
+#: modules/tools/profile.c:377 modules/tools/profile.c:503
+#: modules/tools/readvalue.c:222 modules/tools/readvalue.c:378
+#: modules/tools/roughness.c:868 modules/volume/volume_slice.c:446
+#: modules/volume/volume_slice.c:469 modules/volume/volume_slice.c:492
+#: modules/xyz/xyz_drift.c:738 modules/xyz/xyz_drift.c:753
+#: modules/xyz/xyz_raster.c:382 modules/xyz/xyz_raster.c:388
+msgid "px"
+msgstr "px"
+
+#: libgwydgets/gwy3dwindow.c:891
msgid "Show _axes"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "xfce4-sensors-plugin"
-#: libgwydgets/gwy3dwindow.c:890
+#: libgwydgets/gwy3dwindow.c:900
msgid "Show _labels"
msgstr "Mostrar _etiquetas"
-#: libgwydgets/gwy3dwindow.c:899
-msgid "Show false _colorbar"
-msgstr ""
-
-#: libgwydgets/gwy3dwindow.c:908
+#: libgwydgets/gwy3dwindow.c:909
#, fuzzy
msgid "_Orthographic projection"
msgstr "Proyección _ortográfica"
-#: libgwydgets/gwy3dwindow.c:917
+#: libgwydgets/gwy3dwindow.c:918
msgid "_Hide masked"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:933
+#: libgwydgets/gwy3dwindow.c:934
msgid "_Lighting"
msgstr "_Iluminación:"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "gimp"
-#: libgwydgets/gwy3dwindow.c:934
+#: libgwydgets/gwy3dwindow.c:935
msgid "_Gradient"
msgstr "_Degradado"
-#: libgwydgets/gwy3dwindow.c:935
+#: libgwydgets/gwy3dwindow.c:936
msgid "_Overlay"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:936
+#: libgwydgets/gwy3dwindow.c:937
msgid "_Overlay - no light"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:1009
+#: libgwydgets/gwy3dwindow.c:992
msgid "_Material:"
msgstr "_Material:"
-#: libgwydgets/gwy3dwindow.c:1032
+#: libgwydgets/gwy3dwindow.c:1013
msgid "_Light φ:"
msgstr "_Luz φ:"
-#: libgwydgets/gwy3dwindow.c:1040
+#: libgwydgets/gwy3dwindow.c:1020
msgid "L_ight θ:"
msgstr "L_uz θ:"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "aisleriot"
-#: libgwydgets/gwy3dwindow.c:1070 libgwydgets/gwy3dwindow.c:1240
-#: app/toolbox-editor.c:215 modules/file/hdrimage.cc:2213
-#: modules/file/imgexport.c:4760 modules/file/pixmap.c:789
+#: libgwydgets/gwy3dwindow.c:1052 libgwydgets/gwy3dwindow.c:1243
+#: app/toolbox-editor.c:216 modules/file/hdrimage.cc:2213
+#: modules/file/imgexport.c:4708 modules/file/pixmap.c:789
#: modules/file/rawfile.c:424 modules/process/angle_dist.c:172
#: modules/process/bdep_synth.c:341 modules/process/calcoefs_new.c:371
-#: modules/process/calibrate.c:391 modules/process/col_synth.c:392
-#: modules/process/correct_affine.c:301 modules/process/curvature.c:615
-#: modules/process/cwt.c:135 modules/process/deposit_synth.c:349
+#: modules/process/calibrate.c:383 modules/process/col_synth.c:392
+#: modules/process/correct_affine.c:346 modules/process/curvature.c:617
+#: modules/process/cwt.c:135 modules/process/deposit_synth.c:350
#: modules/process/diff_synth.c:411 modules/process/domain_synth.c:354
#: modules/process/drift.c:245 modules/process/dwt.c:166
#: modules/process/dwtanisotropy.c:184 modules/process/edge.c:638
#: modules/process/extend.c:192 modules/process/facet-level.c:193
-#: modules/process/facet_analysis.c:271 modules/process/fbm_synth.c:303
+#: modules/process/facet_analysis.c:275 modules/process/fbm_synth.c:303
#: modules/process/fft.c:336 modules/process/fft_filter_2d.c:417
-#: modules/process/fft_synth.c:341 modules/process/fractal.c:231
-#: modules/process/grain_edge.c:213 modules/process/grain_mark.c:247
-#: modules/process/grain_wshed.c:167 modules/process/hough.c:179
-#: modules/process/lat_synth.c:567 modules/process/latsim.c:159
-#: modules/process/level.c:245 modules/process/linematch.c:804
-#: modules/process/lno_synth.c:433 modules/process/local_contrast.c:130
-#: modules/process/logistic.c:234 modules/process/mark_disconn.c:208
-#: modules/process/mask_distribute.c:152 modules/process/measure_lattice.c:256
-#: modules/process/median-bg.c:180 modules/process/noise_synth.c:336
-#: modules/process/obj_synth.c:441 modules/process/pat_synth.c:385
-#: modules/process/pid.c:199 modules/process/polydistort.c:210
-#: modules/process/polylevel.c:373 modules/process/psdf_logphi.c:249
-#: modules/process/rank.c:158 modules/process/rotate.c:243
-#: modules/process/scale.c:196 modules/process/scars.c:298
-#: modules/process/semsim.c:211 modules/process/shade.c:208
-#: modules/process/slope_dist.c:276 modules/process/sphere-revolve.c:218
-#: modules/process/straighten_path.c:249 modules/process/tilt.c:161
-#: modules/process/tip_model.c:169 modules/process/unrotate.c:220
-#: modules/process/volumize_layers.c:221 modules/process/wave_synth.c:349
-#: modules/process/wpour_mark.c:278 modules/volume/volume_calibrate.c:370
-#: modules/volume/volume_extract.c:331 modules/volume/volume_kmeans.c:153
-#: modules/volume/volume_kmedians.c:147 modules/volume/volume_linestat.c:292
-#: modules/volume/volume_slice.c:292
+#: modules/process/fft_synth.c:341 modules/process/fibre_synth.c:422
+#: modules/process/fractal.c:228 modules/process/grain_edge.c:212
+#: modules/process/grain_mark.c:246 modules/process/grain_wshed.c:168
+#: modules/process/hough.c:174 modules/process/lat_synth.c:567
+#: modules/process/latsim.c:159 modules/process/level.c:245
+#: modules/process/linematch.c:771 modules/process/lno_synth.c:431
+#: modules/process/local_contrast.c:130 modules/process/logistic.c:234
+#: modules/process/mark_disconn.c:208 modules/process/mask_distribute.c:152
+#: modules/process/measure_lattice.c:246 modules/process/median-bg.c:180
+#: modules/process/mfm_current.c:332 modules/process/mfm_field.c:281
+#: modules/process/mfm_findshift.c:230 modules/process/mfm_parallel.c:333
+#: modules/process/mfm_shift.c:170 modules/process/noise_synth.c:334
+#: modules/process/obj_synth.c:438 modules/process/pat_synth.c:385
+#: modules/process/phase_synth.c:205 modules/process/pid.c:197
+#: modules/process/polydistort.c:210 modules/process/polylevel.c:373
+#: modules/process/psdf_logphi.c:249 modules/process/rank.c:158
+#: modules/process/rotate.c:243 modules/process/scale.c:196
+#: modules/process/scars.c:317 modules/process/semsim.c:211
+#: modules/process/shade.c:210 modules/process/slope_dist.c:275
+#: modules/process/sphere-revolve.c:317 modules/process/straighten_path.c:248
+#: modules/process/tilt.c:161 modules/process/tip_model.c:167
+#: modules/process/unrotate.c:220 modules/process/volumize_layers.c:221
+#: modules/process/wave_synth.c:368 modules/process/wpour_mark.c:278
+#: modules/volume/volume_calibrate.c:370 modules/volume/volume_extract.c:324
+#: modules/volume/volume_kmeans.c:154 modules/volume/volume_kmedians.c:147
+#: modules/volume/volume_linestat.c:297 modules/volume/volume_slice.c:294
msgid "_Reset"
msgstr "_Reiniciar"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "gretl"
-#: libgwydgets/gwy3dwindow.c:1142
+#: libgwydgets/gwy3dwindow.c:1141
msgid "X-axis"
msgstr "eje X"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "gretl"
-#: libgwydgets/gwy3dwindow.c:1143
+#: libgwydgets/gwy3dwindow.c:1142
msgid "Y-axis"
msgstr "eje Y"
-#: libgwydgets/gwy3dwindow.c:1144
+#: libgwydgets/gwy3dwindow.c:1143
msgid "Minimum z value"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:1145
+#: libgwydgets/gwy3dwindow.c:1144
msgid "Maximum z value"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "plugin_htmlbar"
-#: libgwydgets/gwy3dwindow.c:1168 modules/file/imgexport.c:3836
+#: libgwydgets/gwy3dwindow.c:1167 modules/file/imgexport.c:3806
msgid "_Label:"
msgstr "E_tiqueta:"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "drivel"
-#: libgwydgets/gwy3dwindow.c:1173
+#: libgwydgets/gwy3dwindow.c:1180
msgid "_Text:"
msgstr "_Texto:"
-#: libgwydgets/gwy3dwindow.c:1193
+#: libgwydgets/gwy3dwindow.c:1185
msgid "Move label"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:1202
+#: libgwydgets/gwy3dwindow.c:1194
msgid "_Horizontally:"
msgstr "_Horizontalmente:"
-#: libgwydgets/gwy3dwindow.c:1212
+#: libgwydgets/gwy3dwindow.c:1204
msgid "_Vertically:"
msgstr "_Verticalmente:"
-#: libgwydgets/gwy3dwindow.c:1220
+#: libgwydgets/gwy3dwindow.c:1212
+msgid "A_ll labels have the same size"
+msgstr ""
+
+#: libgwydgets/gwy3dwindow.c:1223
msgid "Scale size _automatically"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "plugin_htmlbar"
-#: libgwydgets/gwy3dwindow.c:1232 modules/tools/filter.c:290
+#: libgwydgets/gwy3dwindow.c:1235 modules/tools/filter.c:291
msgid "Si_ze:"
msgstr "_Tamaño:"
+#: libgwydgets/gwy3dwindow.c:1277
+msgid "Show false _colorbar"
+msgstr ""
+
+#: libgwydgets/gwy3dwindow.c:1286
+msgid "Reserve space for _colorbar"
+msgstr ""
+
# Translation for this string generated by http://littlesvr.ca/ostd/
-# based on translation from "avant-window-navigator"
-#: libgwydgets/gwy3dwindow.c:1232 modules/process/cwt.c:151
-#: modules/process/hough.c:212
-msgid "pixels"
-msgstr "píxeles"
+# based on translation from "control-center"
+#: libgwydgets/gwy3dwindow.c:1302 modules/process/lat_synth.c:651
+#: modules/process/obj_synth.c:542 modules/process/pat_synth.c:1458
+#: modules/process/phase_synth.c:279
+msgid "_Size:"
+msgstr "_Tamaño:"
+
+#: libgwydgets/gwy3dwindow.c:1311
+#, fuzzy
+msgid "_Vertical alignment:"
+msgstr "_Verticalmente:"
-#: libgwydgets/gwy3dwindow.c:1726 libgwydgets/gwy3dwindow.c:1779
+#: libgwydgets/gwy3dwindow.c:1844 libgwydgets/gwy3dwindow.c:1897
msgid "S_witch to Lighting Mode"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:1734 libgwydgets/gwy3dwindow.c:1756
+#: libgwydgets/gwy3dwindow.c:1852 libgwydgets/gwy3dwindow.c:1874
msgid "S_witch to Overlay Mode"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:1748 libgwydgets/gwy3dwindow.c:1771
+#: libgwydgets/gwy3dwindow.c:1866 libgwydgets/gwy3dwindow.c:1889
msgid "S_witch to Color Gradient Mode"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:1787
+#: libgwydgets/gwy3dwindow.c:1905
msgid "T_oggle light"
msgstr ""
-#: libgwydgets/gwyaxisdialog.c:99
+#: libgwydgets/gwyaxisdialog.c:75
msgid "Axis Properties"
msgstr ""
-#: libgwydgets/gwyaxisdialog.c:101 libgwydgets/gwygraphlabeldialog.c:63
-msgid "Label Properties"
-msgstr ""
-
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "e17"
-#: libgwydgets/gwyaxisdialog.c:184
+#: libgwydgets/gwyaxisdialog.c:88
msgid "Label Text"
msgstr "Etiqueta de texto"
@@ -1141,7 +1213,7 @@ msgid "Hidden"
msgstr "Oculto"
#: libgwydgets/gwydgetenums.c:47 libgwydgets/gwygraphwindowmeasuredialog.c:572
-#: modules/file/imgexport.c:475 modules/tools/selectionmanager.c:274
+#: modules/file/imgexport.c:474 modules/tools/selectionmanager.c:274
msgid "Points"
msgstr "Puntos"
@@ -1149,7 +1221,7 @@ msgstr "Puntos"
msgid "Line + points"
msgstr "Líneas + puntos"
-#: libgwydgets/gwydgetutils.c:564
+#: libgwydgets/gwydgetutils.c:848
msgid "Change Mask Color"
msgstr ""
@@ -1162,7 +1234,7 @@ msgstr "Cantidad"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "abiword"
#: libgwydgets/gwygrainvaluemenu.c:194 libgwydgets/gwygrainvaluemenu.c:207
-#: modules/process/curvature.c:753
+#: modules/process/curvature.c:750
msgid "Symbol"
msgstr "Símbolo"
@@ -1185,157 +1257,164 @@ msgstr ""
msgid "_Next"
msgstr "Consejo _siguiente"
-#: libgwydgets/gwygraphareadialog.c:127 modules/file/rawgraph.c:302
+#: libgwydgets/gwygraphareadialog.c:123 modules/file/rawgraph.c:302
msgid "Plot _style:"
msgstr ""
-#: libgwydgets/gwygraphareadialog.c:148
+#: libgwydgets/gwygraphareadialog.c:131
msgid "Pl_ot color:"
msgstr ""
-#: libgwydgets/gwygraphareadialog.c:159
+#: libgwydgets/gwygraphareadialog.c:151
msgid "Point _type:"
msgstr ""
-#: libgwydgets/gwygraphareadialog.c:165
+#: libgwydgets/gwygraphareadialog.c:157
msgid "_Point size:"
msgstr ""
-#: libgwydgets/gwygraphareadialog.c:175
+#: libgwydgets/gwygraphareadialog.c:167
msgid "_Line type:"
msgstr ""
-#: libgwydgets/gwygraphareadialog.c:181 modules/file/imgexport.c:3150
+#: libgwydgets/gwygraphareadialog.c:173 modules/file/imgexport.c:3154
msgid "Line t_hickness:"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "e17"
-#: libgwydgets/gwygraphareadialog.c:187
+#: libgwydgets/gwygraphareadialog.c:180
#, fuzzy
msgid "<b>Label Te_xt</b>"
msgstr "Etiqueta de texto"
-#: libgwydgets/gwygraphareadialog.c:404
+#: libgwydgets/gwygraphareadialog.c:397
msgid "Set Curve Color"
msgstr ""
-#: libgwydgets/gwygraphareadialog.c:556 modules/process/mask_morph.c:179
+#: libgwydgets/gwygraphareadialog.c:549 modules/process/mask_morph.c:178
msgid "Square"
msgstr "Cuadrado"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "celestia"
-#: libgwydgets/gwygraphareadialog.c:558 modules/process/mask_morph.c:180
+#: libgwydgets/gwygraphareadialog.c:551 modules/process/mask_morph.c:179
msgid "Diamond"
msgstr "Diamante"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "dia"
-#: libgwydgets/gwygraphareadialog.c:559
+#: libgwydgets/gwygraphareadialog.c:552
msgid "Cross"
msgstr "Cruz"
-#: libgwydgets/gwygraphareadialog.c:560
+#: libgwydgets/gwygraphareadialog.c:553
msgid "Diagonal cross"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "gnucash"
-#: libgwydgets/gwygraphareadialog.c:561
+#: libgwydgets/gwygraphareadialog.c:554
msgid "Asterisk"
msgstr "Asterisco"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "fontforge"
-#: libgwydgets/gwygraphareadialog.c:562
+#: libgwydgets/gwygraphareadialog.c:555
msgid "Star"
msgstr "Estrella"
-#: libgwydgets/gwygraphareadialog.c:563
+#: libgwydgets/gwygraphareadialog.c:556
msgid "Triangle up"
msgstr ""
-#: libgwydgets/gwygraphareadialog.c:564
+#: libgwydgets/gwygraphareadialog.c:557
msgid "Triangle down"
msgstr ""
-#: libgwydgets/gwygraphareadialog.c:565
+#: libgwydgets/gwygraphareadialog.c:558
msgid "Triangle left"
msgstr ""
-#: libgwydgets/gwygraphareadialog.c:566
+#: libgwydgets/gwygraphareadialog.c:559
msgid "Triangle right"
msgstr ""
-#: libgwydgets/gwygraphareadialog.c:567
+#: libgwydgets/gwygraphareadialog.c:560
msgid "Full square"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "ario"
-#: libgwydgets/gwygraphareadialog.c:568 modules/process/mask_morph.c:177
+#: libgwydgets/gwygraphareadialog.c:561 modules/process/mask_morph.c:176
msgid "Disc"
msgstr "Disco"
-#: libgwydgets/gwygraphareadialog.c:569
+#: libgwydgets/gwygraphareadialog.c:562
msgid "Full diamond"
msgstr ""
-#: libgwydgets/gwygraphareadialog.c:570
+#: libgwydgets/gwygraphareadialog.c:563
msgid "Full triangle up"
msgstr ""
-#: libgwydgets/gwygraphareadialog.c:571
+#: libgwydgets/gwygraphareadialog.c:564
msgid "Full triangle down"
msgstr ""
-#: libgwydgets/gwygraphareadialog.c:572
+#: libgwydgets/gwygraphareadialog.c:565
msgid "Full triangle left"
msgstr ""
-#: libgwydgets/gwygraphareadialog.c:573
+#: libgwydgets/gwygraphareadialog.c:566
msgid "Full triangle right"
msgstr ""
-#: libgwydgets/gwygraphareadialog.c:635
+#: libgwydgets/gwygraphareadialog.c:628
msgid "line-style|Solid"
msgstr ""
-#: libgwydgets/gwygraphareadialog.c:636
+#: libgwydgets/gwygraphareadialog.c:629
msgid "line-style|Dash"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "abiword"
-#: libgwydgets/gwygraphcurves.c:451
+#: libgwydgets/gwygraphcurves.c:448
msgid "Description"
msgstr "Descripción"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "anjuta"
-#: libgwydgets/gwygraphcurves.c:463
+#: libgwydgets/gwygraphcurves.c:460
msgid "Mode"
msgstr "Modo"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "abiword"
-#: libgwydgets/gwygraphcurves.c:481
+#: libgwydgets/gwygraphcurves.c:478
msgid "Color"
msgstr "Color"
-#: libgwydgets/gwygraphcurves.c:494
+#: libgwydgets/gwygraphcurves.c:491
msgid "Point Type"
msgstr ""
-#: libgwydgets/gwygraphcurves.c:516
+#: libgwydgets/gwygraphcurves.c:513
msgid "Line Style"
msgstr ""
-#: libgwydgets/gwygraphlabeldialog.c:74
-msgid "Frame thickness:"
+#: libgwydgets/gwygraphlabeldialog.c:63
+msgid "Label Properties"
msgstr ""
+# Translation for this string generated by http://littlesvr.ca/ostd/
+# based on translation from "gimp"
+#: libgwydgets/gwygraphlabeldialog.c:74
+#, fuzzy
+msgid "_Frame thickness:"
+msgstr "G_rosor:"
+
#: libgwydgets/gwygraphlabeldialog.c:81
msgid "_Reversed layout"
msgstr ""
@@ -1345,14 +1424,14 @@ msgstr ""
msgid "Abscissa"
msgstr "_Abscisa"
-#: libgwydgets/gwygraphwindow.c:163 app/toolbox-editor.c:1002 app/toolbox.c:108
+#: libgwydgets/gwygraphwindow.c:163 app/toolbox-editor.c:1015 app/toolbox.c:113
msgid "Graph"
msgstr "Gráfico"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "advene"
#: libgwydgets/gwygraphwindow.c:170 modules/file/hdrimage.cc:472
-#: modules/process/fit-shape.c:656
+#: modules/process/fit-shape.c:666 modules/process/psf.c:229
msgid "Data"
msgstr "Data"
@@ -1392,7 +1471,7 @@ msgstr ""
# based on translation from "audacious-plugins"
#: libgwydgets/gwygraphwindowmeasuredialog.c:394
#: libgwydgets/gwygraphwindowmeasuredialog.c:580 modules/tools/linestats.c:170
-#: modules/tools/roughness.c:516 modules/volume/volume_linestat.c:157
+#: modules/tools/roughness.c:517 modules/volume/volume_linestat.c:159
msgid "Length"
msgstr "Longitud"
@@ -1400,9 +1479,9 @@ msgstr "Longitud"
# based on translation from "gtk2_ardour"
#: libgwydgets/gwygraphwindowmeasuredialog.c:398
#: libgwydgets/gwygraphwindowmeasuredialog.c:588 app/gwyplaintool.c:1018
-#: modules/process/lat_synth.c:747 modules/process/obj_synth.c:569
-#: modules/process/pat_synth.c:846 modules/process/pat_synth.c:1148
-#: modules/process/pat_synth.c:1483
+#: modules/process/fibre_synth.c:534 modules/process/lat_synth.c:747
+#: modules/process/obj_synth.c:567 modules/process/pat_synth.c:847
+#: modules/process/pat_synth.c:1149 modules/process/pat_synth.c:1484
msgid "Height"
msgstr "Altura"
@@ -1417,14 +1496,14 @@ msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "audacious-plugins"
#: libgwydgets/gwygraphwindowmeasuredialog.c:553
-#: modules/process/linematch.c:828 modules/process/semsim.c:249
+#: modules/process/linematch.c:795 modules/process/semsim.c:249
#: modules/xyz/xyz_level.c:254
msgid "Method:"
msgstr "Método:"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "cssed"
-#: libgwydgets/gwygraphwindowmeasuredialog.c:592 modules/process/crosscor.c:354
+#: libgwydgets/gwygraphwindowmeasuredialog.c:592 modules/process/crosscor.c:331
msgid "Angle"
msgstr "Ángulo"
@@ -1438,7 +1517,7 @@ msgstr "Preferidos"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "lang"
#: libgwydgets/gwyoptionmenus.c:470 app/meta.c:410
-#: modules/file/imgexport.c:4160 modules/file/imgexport.c:4607
+#: modules/file/imgexport.c:4110 modules/file/imgexport.c:4555
#: modules/file/rawfile.c:995 modules/process/convolution_filter.c:538
#: modules/process/neural.c:418 modules/tools/selectionmanager.c:345
msgid "Name"
@@ -1487,7 +1566,7 @@ msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "abiword"
#: libgwydgets/gwyscitext.c:274 modules/file/rawfile.c:553
-#: modules/xyz/xyz_drift.c:580 modules/xyz/xyz_raster.c:405
+#: modules/xyz/xyz_drift.c:580 modules/xyz/xyz_raster.c:419
msgid "Preview"
msgstr "Vista previa"
@@ -1505,109 +1584,103 @@ msgstr "Ningún módulo puede cargar este tipo de archivo"
msgid "No module can save to this file type."
msgstr "Ningún módulo puede guardar este tipo de archivo."
-#: libgwymodule/gwymodulebrowser.c:67
+#: libgwymodule/gwymodulebrowser.c:66
msgid "Module Browser"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "anjuta"
-#: libgwymodule/gwymodulebrowser.c:190
+#: libgwymodule/gwymodulebrowser.c:189
msgid "Module"
msgstr "Módulo"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "gmameui"
-#: libgwymodule/gwymodulebrowser.c:190
+#: libgwymodule/gwymodulebrowser.c:189
msgid "Version"
msgstr "Versión"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "advene"
-#: libgwymodule/gwymodulebrowser.c:190
+#: libgwymodule/gwymodulebrowser.c:189
msgid "Author"
msgstr "Autor"
-#: libgwymodule/gwymodulebrowser.c:246
+#: libgwymodule/gwymodulebrowser.c:244
msgid "Name-Version:"
msgstr ""
-#: libgwymodule/gwymodulebrowser.c:247 libgwymodule/gwymodulebrowser.c:270
+#: libgwymodule/gwymodulebrowser.c:245 libgwymodule/gwymodulebrowser.c:268
#: modules/process/grain_stat.c:186
msgid "File:"
msgstr "Archivo:"
-#: libgwymodule/gwymodulebrowser.c:248
+#: libgwymodule/gwymodulebrowser.c:246
msgid "Registered functions:"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "beast"
-#: libgwymodule/gwymodulebrowser.c:249
+#: libgwymodule/gwymodulebrowser.c:247
msgid "Authors:"
msgstr "Autores:"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "banshee"
-#: libgwymodule/gwymodulebrowser.c:250
+#: libgwymodule/gwymodulebrowser.c:248
msgid "Copyright:"
msgstr "Copyright:"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "balsa"
-#: libgwymodule/gwymodulebrowser.c:251
+#: libgwymodule/gwymodulebrowser.c:249
msgid "Date:"
msgstr "Fecha:"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "abiword"
-#: libgwymodule/gwymodulebrowser.c:252
+#: libgwymodule/gwymodulebrowser.c:250
msgid "Description:"
msgstr "Descripción:"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "abiword"
-#: libgwymodule/gwymodulebrowser.c:269
+#: libgwymodule/gwymodulebrowser.c:267
msgid "Name:"
msgstr "Nombre:"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "yum"
-#: libgwymodule/gwymodulebrowser.c:271
+#: libgwymodule/gwymodulebrowser.c:269
msgid "Failure:"
msgstr "Falla:"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "abiword"
-#: app/about.c:57
+#: app/about.c:58
#, c-format
msgid "About %s"
msgstr "Acerca de %s"
-#. TRANSLATORS: %s is replaced with date in ISO format YYYY-MM-DD.
-#: app/about.c:92
-#, c-format
-msgid "Released %s\n"
-msgstr ""
-
-#: app/about.c:93
+#: app/about.c:97
msgid "An SPM data visualization and analysis tool."
msgstr ""
"Una herramienta para la visualización y análisis de datos SPM (microscopio "
"de sonda de barrido)."
-#: app/about.c:101
+#: app/about.c:105
msgid "Report bugs to:"
msgstr ""
-#: app/about.c:116
+#: app/about.c:120
msgid "Credits"
msgstr "Créditos"
-#: app/about.c:133
+#: app/about.c:137
msgid "License"
msgstr "Licencia"
-#: app/about.c:138
+#: app/about.c:142
#, c-format
msgid ""
"%s is free software; you can redistribute it and/or modify it under the "
@@ -1622,60 +1695,64 @@ msgstr ""
"elección) cualquiera de las versiones posteriores. Para ver la licencia "
"completa ve el archivo COPYING incluido en la tarball fuente."
-#: app/about.c:160 modules/process/logistic.c:270
+#: app/about.c:164 modules/process/logistic.c:269
msgid "Features"
msgstr "Características"
-#: app/about.c:220
+#: app/about.c:224
msgid "Developers"
msgstr "Desarrolladores"
-#: app/about.c:221
+#: app/about.c:225
msgid "Translators"
msgstr "Traductores"
-#: app/about.c:225
+#: app/about.c:229
msgid "Development is supported by the Czech Metrology Institute: "
msgstr ""
-#: app/about.c:253 app/about.c:256
+#: app/about.c:257 app/about.c:260
msgid "OpenGL 3D View"
msgstr "Vista 3D OpenGL"
-#: app/about.c:257 app/about.c:271 app/about.c:291
+#: app/about.c:261 app/about.c:266 app/about.c:286
msgid "not available\n"
msgstr ""
-#: app/about.c:262 app/about.c:265
-msgid "Fast Fourier Transform"
-msgstr "Transformada rápida de Fourier"
-
-#: app/about.c:266
-msgid "built-in SimpleFFT\n"
-msgstr ""
-
-#: app/about.c:274
+#: app/about.c:269
msgid "X11 protocol\n"
msgstr "Protocolo X11\n"
-#: app/about.c:276
+#: app/about.c:271
msgid "Win32 protocol\n"
msgstr "Protocolo Win32\n"
-#: app/about.c:278
+#: app/about.c:273
msgid "LibUnique\n"
msgstr "LibUnique\n"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "src"
-#: app/about.c:282
+#: app/about.c:277
msgid "Remote Control"
msgstr "Control remoto"
-#: app/about.c:286 app/about.c:290
+#: app/about.c:281 app/about.c:285
msgid "Python Scripting Interface"
msgstr ""
+#. TRANSLATORS: %s is replaced with date in ISO format YYYY-MM-DD.
+#: app/about.c:311
+#, c-format
+msgid "Development version, built %s"
+msgstr ""
+
+#. TRANSLATORS: %s is replaced with date in ISO format YYYY-MM-DD.
+#: app/about.c:328
+#, c-format
+msgid "Released %s"
+msgstr ""
+
#: app/app.c:301
#, c-format
msgid ""
@@ -1684,131 +1761,142 @@ msgid ""
"Really quit?"
msgstr ""
-#: app/app.c:440
+#: app/app.c:442
msgid "Mask _Color..."
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "geeqie"
-#: app/app.c:456 app/app.c:1725
+#: app/app.c:458 app/app.c:1754
msgid "Zoom _1:1"
msgstr "Zoom _1:1"
-#: app/app.c:460 app/app.c:1729 app/app.c:1957
+#: app/app.c:462 app/app.c:1758 app/app.c:1988
msgid "Metadata _Browser..."
msgstr ""
-#: app/app.c:465 app/app.c:1734 app/app.c:1962
+#: app/app.c:467 app/app.c:1763 app/app.c:1993
msgid "View _Log..."
msgstr ""
-#: app/app.c:649
+#: app/app.c:651
msgid "Pi_xelwise Square"
msgstr ""
-#: app/app.c:659
+#: app/app.c:661
msgid "_Physically Square"
msgstr ""
-#: app/app.c:836
+# Translation for this string generated by http://littlesvr.ca/ostd/
+# based on translation from "doc"
+#: app/app.c:842
+msgid "Set as Default"
+msgstr "Establecer como predeterminada"
+
+#: app/app.c:844
+msgid "Set the current view setup as the default"
+msgstr "Usar configuración de vista actual como el defecto"
+
+#: app/app.c:854
msgid "verb|Save"
msgstr "Guardar"
-#: app/app.c:839 app/app.c:843
+#: app/app.c:857 app/app.c:861
msgid "Save 3D view to an image"
msgstr "Guardar vista 3D a una imagen"
# Translation for this string generated by http://littlesvr.ca/ostd/
-# based on translation from "doc"
-#: app/app.c:849
-msgid "Set as Default"
-msgstr "Establecer como predeterminada"
+# based on translation from "gimp"
+#: app/app.c:869
+#, fuzzy
+msgid "_Autocrop"
+msgstr "_Auto"
-#: app/app.c:851
-msgid "Set the current view setup as the default"
-msgstr "Usar configuración de vista actual como el defecto"
+#: app/app.c:873
+msgid "Remove white borders from exported image"
+msgstr ""
-#: app/app.c:940
+#: app/app.c:960
msgid "_Show mask"
msgstr ""
-#: app/app.c:1106
+#: app/app.c:1172
#, c-format
msgid "Saving of 3D view to `%s' failed"
msgstr ""
-#: app/app.c:1150
+#: app/app.c:1222
msgid "Export 3D View"
msgstr "Exportar la vista 3D"
-#: app/app.c:1457
+#: app/app.c:1478
msgid "_Change Preview"
msgstr ""
-#: app/app.c:1583
+#: app/app.c:1606
msgid "Change Volume Data Preview"
msgstr ""
-#: app/app.c:1593
+#: app/app.c:1616
msgid "Preview quantity:"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "coccinella"
-#: app/app.c:1603 modules/process/extend.c:267 modules/tools/linestats.c:165
+#: app/app.c:1626 modules/process/extend.c:267 modules/tools/linestats.c:165
#: modules/volume/volume_linestat.c:142
msgid "Mean"
msgstr "Mezquino"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "drupal6-mod-cck"
-#: app/app.c:1604 modules/process/polydistort.c:255 modules/tools/filter.c:240
+#: app/app.c:1627 modules/process/polydistort.c:258 modules/tools/filter.c:241
#: modules/tools/icolorange.c:424 modules/tools/linestats.c:167
#: modules/volume/volume_linestat.c:144
msgid "Minimum"
msgstr "Mínimo"
-#: app/app.c:1605 modules/process/col_synth.c:170 modules/tools/filter.c:241
+#: app/app.c:1628 modules/process/col_synth.c:170 modules/tools/filter.c:242
#: modules/tools/icolorange.c:435 modules/tools/linestats.c:168
#: modules/volume/volume_linestat.c:145
msgid "Maximum"
msgstr "Máximo"
-#: app/app.c:1606
+#: app/app.c:1629 modules/volume/volume_linestat.c:146
msgid "Min. position"
msgstr ""
-#: app/app.c:1607
+#: app/app.c:1630 modules/volume/volume_linestat.c:147
msgid "Max. position"
msgstr ""
-#: app/app.c:1608 modules/process/bdep_synth.c:134
-#: modules/process/col_synth.c:171 modules/process/scars.c:346
-#: modules/process/scars.c:353 modules/process/threshold.c:341
+#: app/app.c:1631 modules/process/bdep_synth.c:134
+#: modules/process/col_synth.c:171 modules/process/scars.c:369
+#: modules/process/scars.c:377 modules/process/threshold.c:336
msgid "RMS"
msgstr "RMS"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "centerim"
-#: app/app.c:1609 modules/file/asciiexport.c:187 modules/file/gxyzffile.c:393
-#: modules/file/xyzexport.c:233 modules/file/xyzexport.c:302
+#: app/app.c:1632 modules/file/asciiexport.c:187 modules/file/gxyzffile.c:393
+#: modules/file/xyzexport.c:236 modules/file/xyzexport.c:305
msgid "Channel:"
msgstr "Canal:"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "aptitude"
-#: app/app.c:1610
+#: app/app.c:1633
msgid "Section:"
msgstr "Sección: "
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "abiword"
-#: app/app.c:1861
+#: app/app.c:1890
#, fuzzy
msgid "_Update Preview"
msgstr "Vista previa"
-#: app/app.c:1867
+#: app/app.c:1896
#, fuzzy
msgid "_Density Map"
msgstr "Densi_dad:"
@@ -1828,12 +1916,12 @@ msgstr ""
msgid "Unknown XYZ %d"
msgstr ""
-#: app/data-browser-aux.c:2795
+#: app/data-browser-aux.c:2839
#, c-format
msgid "Z levels: %d, Z unit: %s"
msgstr ""
-#: app/data-browser-aux.c:2821
+#: app/data-browser-aux.c:2865
#, fuzzy, c-format
msgid "Points: %d"
msgstr "Puntos"
@@ -1868,14 +1956,15 @@ msgid "Close file"
msgstr "Cierra archivo"
# Translation for this string generated by http://littlesvr.ca/ostd/
-# based on translation from "gtk2_ardour"
+# based on translation from "abiword"
#: app/data-browser.c:5582
-msgid "Channels"
-msgstr "Canales"
+#, fuzzy
+msgid "Images"
+msgstr "Páginas:"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "amule"
-#: app/data-browser.c:5596 modules/volume/volume_extract.c:444
+#: app/data-browser.c:5596 modules/volume/volume_extract.c:431
msgid "Graphs"
msgstr "Gráficos"
@@ -1920,51 +2009,51 @@ msgid ""
"%s"
msgstr ""
-#: app/file.c:285
+#: app/file.c:292
#, c-format
msgid "Opening of `%s' failed"
msgstr ""
-#: app/file.c:291 app/file.c:526
+#: app/file.c:298 app/file.c:533
#, c-format
msgid "Full file path: %s."
msgstr ""
-#: app/file.c:294
+#: app/file.c:301
#, c-format
msgid "Loaded using: %s."
msgstr ""
-#: app/file.c:380
+#: app/file.c:387
msgid "Merge File"
msgstr "Fusionar Archivo"
-#: app/file.c:382 app/gwyappfilechooser.c:221
+#: app/file.c:389 app/gwyappfilechooser.c:226
msgid "Open File"
msgstr "Abre Archivo"
-#: app/file.c:520 app/gwymoduleutils.c:192
+#: app/file.c:527 app/gwymoduleutils.c:192
#, c-format
msgid "Saving of `%s' failed"
msgstr ""
-#: app/file.c:529
+#: app/file.c:536
#, c-format
msgid "Saved using: %s."
msgstr ""
-#: app/file.c:689
+#: app/file.c:696
#, c-format
msgid "File `%s' already exists. Replace?"
msgstr "Archivo `%s' ya existe. Sobrescribir? "
-#: app/file.c:693
+#: app/file.c:700
#, c-format
msgid ""
"The file already exists in `%s'. Replacing it will overwrite its contents."
msgstr ""
-#: app/file.c:696
+#: app/file.c:703
msgid "Replace File?"
msgstr "¿Sustituir Archivo?"
@@ -1995,13 +2084,13 @@ msgstr "Abrir archivo seleccionado"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "audacious"
-#: app/filelist.c:566 app/gwyappfilechooser.c:583
+#: app/filelist.c:566 app/gwyappfilechooser.c:592
msgid "_Filter:"
msgstr "_Filtro:"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "gtkhtml3.14"
-#: app/filelist.c:604 app/gwyappfilechooser.c:619
+#: app/filelist.c:604 app/gwyappfilechooser.c:628
msgid "Case _sensitive"
msgstr "_Sensible a capitalización"
@@ -2053,104 +2142,104 @@ msgstr "_Curva"
msgid "_Snap to control points"
msgstr ""
-#: app/gwyappfilechooser.c:226
+#: app/gwyappfilechooser.c:231
msgid "Save File"
msgstr "Guardar archivo"
-#: app/gwyappfilechooser.c:380
+#: app/gwyappfilechooser.c:389
#, c-format
msgid "File _type: %s"
msgstr ""
-#: app/gwyappfilechooser.c:387
+#: app/gwyappfilechooser.c:396
#, fuzzy
msgid "Only loadable shown"
msgstr "Enseñar sólo archivos cargables"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "audacious"
-#: app/gwyappfilechooser.c:391
+#: app/gwyappfilechooser.c:400
#, fuzzy, c-format
msgid "Filter: %s"
msgstr "_Filtro:"
-#: app/gwyappfilechooser.c:455
+#: app/gwyappfilechooser.c:464
msgid "Automatic by extension"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "gnumeric"
-#: app/gwyappfilechooser.c:464
+#: app/gwyappfilechooser.c:473
msgid "Automatically detected"
msgstr "Automáticamente detectado"
-#: app/gwyappfilechooser.c:561
+#: app/gwyappfilechooser.c:570
msgid "Show only loadable files"
msgstr "Enseñar sólo archivos cargables"
-#: app/gwyappfilechooser.c:844
+#: app/gwyappfilechooser.c:855
msgid "Plane-level previewed data"
msgstr ""
-#: app/gwyappfilechooser.c:860
+#: app/gwyappfilechooser.c:871
msgid "Row-level previewed data"
msgstr ""
-#: app/gwyappfilechooser.c:969
+#: app/gwyappfilechooser.c:987
+msgid "File too large for preview"
+msgstr ""
+
+#: app/gwyappfilechooser.c:988
msgid "…"
msgstr "..."
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "calibre"
-#: app/gwyappfilechooser.c:1331
+#: app/gwyappfilechooser.c:1352
msgid "Cannot preview"
msgstr "No se puede previsualizar"
-#: app/gwyddion.c:143
+#: app/gwyddion.c:147
msgid "Loading document history"
msgstr ""
-#: app/gwyddion.c:148
+#: app/gwyddion.c:152
msgid "Registering "
msgstr ""
-#: app/gwyddion.c:149
+#: app/gwyddion.c:153
msgid "stock items"
msgstr ""
-#: app/gwyddion.c:153
+#: app/gwyddion.c:157
msgid "color gradients"
msgstr ""
-#: app/gwyddion.c:155
+#: app/gwyddion.c:159
msgid "GL materials"
msgstr "Materiales GL"
-#: app/gwyddion.c:157
+#: app/gwyddion.c:161
msgid "grain quantities"
msgstr ""
-#: app/gwyddion.c:159
+#: app/gwyddion.c:163
msgid "calibrations"
msgstr ""
-#: app/gwyddion.c:164
+#: app/gwyddion.c:168
msgid "Loading settings"
msgstr ""
-#: app/gwyddion.c:171
+#: app/gwyddion.c:175
msgid "Registering modules"
msgstr ""
-#: app/gwyddion.c:193
-msgid "Initializing GUI"
-msgstr ""
-
-#: app/gwyddion.c:439
+#: app/gwyddion.c:464
msgid "Could not read settings."
msgstr ""
-#: app/gwyddion.c:442
+#: app/gwyddion.c:467
#, c-format
msgid ""
"Settings file `%s' cannot be read: %s\n"
@@ -2159,48 +2248,69 @@ msgid ""
"it is repaired or removed."
msgstr ""
-#: app/gwymoduleutils-file.c:542
+#: app/gwyddion.c:505
+#, c-format
+msgid "Many modules (%u) failed to register."
+msgstr ""
+
+#: app/gwyddion.c:510
+#, c-format
+msgid ""
+"Most likely Gwyddion was not upgraded correctly. Instead, one installation "
+"was just overwritten with another, and now it is a mess.\n"
+"\n"
+"Please remove completely the module directory\n"
+"\n"
+"%s\n"
+"\n"
+"and reinstall Gwyddion.\n"
+"\n"
+"See Info → Module Browser for specific errors."
+msgstr ""
+
+#: app/gwymoduleutils-file.c:536
#, c-format
msgid "Section %s ended at line %u but it has never started."
msgstr ""
-#: app/gwymoduleutils-file.c:550
+#: app/gwymoduleutils-file.c:544
#, c-format
msgid "Section %s ended at line %u instead of %s."
msgstr ""
-#: app/gwymoduleutils-file.c:587
+#: app/gwymoduleutils-file.c:581
#, c-format
msgid "Section %s started at line %u before %s ended."
msgstr ""
-#: app/gwymoduleutils-file.c:593
+#: app/gwymoduleutils-file.c:587
#, c-format
msgid "Empty section name at header line %u."
msgstr ""
-#: app/gwymoduleutils-file.c:628
+#: app/gwymoduleutils-file.c:622
#, c-format
msgid "Header line %u lacks prefix %s."
msgstr ""
-#: app/gwymoduleutils-file.c:653
+#: app/gwymoduleutils-file.c:647
#, c-format
msgid "Header line %u lacks key-value separator."
msgstr ""
-#: app/gwymoduleutils-file.c:661
+#: app/gwymoduleutils-file.c:655
#, c-format
msgid "Key at header line %u is empty."
msgstr ""
-#: app/gwymoduleutils-file.c:688
+#: app/gwymoduleutils-file.c:682
#, c-format
msgid "Header suddenly ended at line %u; end of header marker is missing"
msgstr ""
#: app/gwymoduleutils.c:197 app/settings.c:131 app/settings.c:142
#: app/toolbox-spec.c:536 modules/file/err.h:62
+#: modules/pygwy/pygwy-console.c:528
#, c-format
msgid "Cannot write to file: %s."
msgstr ""
@@ -2231,8 +2341,9 @@ msgstr "Origen"
# based on translation from "accerciser"
#: app/gwyplaintool.c:1011 modules/file/rawfile.c:997
#: modules/process/convolution_filter.c:349
-#: modules/process/convolution_filter.c:553 modules/process/neural.c:419
-#: modules/process/obj_synth.c:538 modules/process/pat_synth.c:1449
+#: modules/process/convolution_filter.c:553 modules/process/fibre_synth.c:520
+#: modules/process/neural.c:419 modules/process/obj_synth.c:536
+#: modules/process/pat_synth.c:1450
msgid "Size"
msgstr "Tamaño"
@@ -2293,7 +2404,7 @@ msgstr "_Cerrar"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "abiword"
-#: app/log.c:615 modules/file/imgexport.c:4168 modules/file/rawfile.c:996
+#: app/log.c:615 modules/file/imgexport.c:4118 modules/file/rawfile.c:996
msgid "Type"
msgstr "Tipo"
@@ -2305,8 +2416,8 @@ msgstr "Función"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "audacity"
-#: app/log.c:617 modules/file/imgexport.c:3117 modules/process/fit-shape.c:465
-#: modules/process/neural.c:610 modules/tools/stats.c:425
+#: app/log.c:617 modules/file/imgexport.c:3128 modules/process/fit-shape.c:466
+#: modules/process/neural.c:614 modules/tools/stats.c:423
msgid "Parameters"
msgstr "Parámetros"
@@ -2322,44 +2433,44 @@ msgstr "Tiempo"
msgid "Export Log"
msgstr "Exportar registro"
-#: app/menu.c:556 app/toolbox.c:581
+#: app/menu.c:555 app/toolbox.c:595
msgid "_Data Process"
msgstr "_Proceso de Datos"
-#: app/menu.c:598 app/toolbox.c:584
+#: app/menu.c:597 app/toolbox.c:598
msgid "_Graph"
msgstr "_Gráfico"
-#: app/menu.c:641 app/toolbox.c:587
+#: app/menu.c:640 app/toolbox.c:601
msgid "_Volume Data"
msgstr ""
-#: app/menu.c:684 app/toolbox.c:590
+#: app/menu.c:683 app/toolbox.c:604
#, fuzzy
msgid "_XYZ Data"
msgstr "_Datos"
-#: app/menu.c:715
+#: app/menu.c:714
msgid "Re-show Last"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "gimp"
-#: app/menu.c:730
+#: app/menu.c:729
msgid "Repeat Last"
msgstr "Repetir el último"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "audacious-plugins"
-#: app/menu.c:858
+#: app/menu.c:857
msgid "Repeat"
msgstr "Repetir"
-#: app/menu.c:864
+#: app/menu.c:863
msgid "Re-show"
msgstr ""
-#: app/menu.c:1186
+#: app/menu.c:1185
msgid "_Document history"
msgstr ""
@@ -2367,8 +2478,8 @@ msgstr ""
msgid "_New"
msgstr "_Nuevo"
-#: app/meta.c:235 modules/file/imgexport.c:4672 modules/file/rawfile.c:1058
-#: modules/process/neural.c:711 modules/tools/selectionmanager.c:405
+#: app/meta.c:235 modules/file/imgexport.c:4620 modules/file/rawfile.c:1058
+#: modules/process/neural.c:718 modules/tools/selectionmanager.c:405
msgid "_Delete"
msgstr "_Suprimir"
@@ -2446,11 +2557,11 @@ msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "e17"
-#: app/splash.c:832
+#: app/splash.c:1260
msgid "Starting "
msgstr "Iniciando"
-#: app/splash.c:878
+#: app/splash.c:1313
msgid " is free software released under GNU GPL."
msgstr ""
@@ -2889,156 +3000,157 @@ msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "anjuta"
-#: app/toolbox-editor.c:212
+#: app/toolbox-editor.c:213
#, fuzzy
msgid "Toolbox Editor"
msgstr "Editor"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "gnucash"
-#: app/toolbox-editor.c:257
+#: app/toolbox-editor.c:258
#, fuzzy
msgid "_New Item"
msgstr "Nuevo elemento"
-#: app/toolbox-editor.c:262
+#: app/toolbox-editor.c:263
#, fuzzy
msgid "_New Group"
msgstr "Corta Gráfico"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "gnome-video-arcade"
-#: app/toolbox-editor.c:268 app/toolbox.c:577
+#: app/toolbox-editor.c:269 app/toolbox.c:591
msgid "_Edit"
msgstr "_Editar"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "anjuta"
-#: app/toolbox-editor.c:273 modules/process/fft_filter_2d.c:499
-#: modules/tools/maskedit.c:548 modules/volume/volume_zcal.c:173
+#: app/toolbox-editor.c:274 modules/process/fft_filter_2d.c:499
+#: modules/tools/maskedit.c:554 modules/volume/volume_zcal.c:173
msgid "_Remove"
msgstr "Quita_r"
-#: app/toolbox-editor.c:278
+#: app/toolbox-editor.c:279
msgid "Move _Up"
msgstr ""
-#: app/toolbox-editor.c:283
+#: app/toolbox-editor.c:284
msgid "Move _Down"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "plugin_htmlbar"
-#: app/toolbox-editor.c:292 modules/file/hdrimage.cc:2304
-#: modules/file/imgexport.c:3101 modules/file/pixmap.c:872
+#: app/toolbox-editor.c:293 modules/file/hdrimage.cc:2304
+#: modules/file/imgexport.c:3114 modules/file/pixmap.c:872
#: modules/file/rawfile.c:658 modules/process/crosscor.c:252
-#: modules/process/dimensions.h:473 modules/process/tip_blind.c:333
+#: modules/process/dimensions.h:455 modules/process/fibre_synth.c:526
+#: modules/process/tip_blind.c:334
msgid "_Width:"
msgstr "A_ncho:"
-#: app/toolbox-editor.c:774
+#: app/toolbox-editor.c:787
msgid "Toolbox Group"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "plugin_htmlbar"
-#: app/toolbox-editor.c:791 modules/file/rawgraph.c:267
+#: app/toolbox-editor.c:804 modules/file/rawgraph.c:267
msgid "_Title:"
msgstr "_Título:"
-#: app/toolbox-editor.c:805
+#: app/toolbox-editor.c:818
msgid "_Id:"
msgstr ""
-#: app/toolbox-editor.c:818
+#: app/toolbox-editor.c:831
#, fuzzy
msgid "_Suggest"
msgstr "Pepitas"
-#: app/toolbox-editor.c:824
+#: app/toolbox-editor.c:837
msgid "Trans_latable title"
msgstr ""
-#: app/toolbox-editor.c:874
+#: app/toolbox-editor.c:887
msgid "Group id is not a valid identifier"
msgstr ""
-#: app/toolbox-editor.c:882
+#: app/toolbox-editor.c:895
msgid "Group id is not unique"
msgstr ""
-#: app/toolbox-editor.c:971
+#: app/toolbox-editor.c:984
msgid "Toolbox Item"
msgstr ""
-#: app/toolbox-editor.c:992 modules/process/coerce.c:331
+#: app/toolbox-editor.c:1005 modules/process/coerce.c:331
#: modules/tools/filter.c:284
msgid "_Type:"
msgstr "_Tipo:"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "abiword"
-#: app/toolbox-editor.c:999
+#: app/toolbox-editor.c:1012
#, fuzzy
msgid "Placeholder"
msgstr "Colocación"
-#: app/toolbox-editor.c:1000
+#: app/toolbox-editor.c:1013
msgid "Builtin"
msgstr ""
-#: app/toolbox-editor.c:1001 app/toolbox.c:107
+#: app/toolbox-editor.c:1014 app/toolbox.c:112
msgid "Data Process"
msgstr "Proceso de Datos"
-#: app/toolbox-editor.c:1003
+#: app/toolbox-editor.c:1016
#, fuzzy
msgid "Volume Data"
msgstr "Volumen"
-#: app/toolbox-editor.c:1004
+#: app/toolbox-editor.c:1017
#, fuzzy
msgid "XYZ Data"
msgstr "_Datos"
-#: app/toolbox-editor.c:1005
+#: app/toolbox-editor.c:1018
#, fuzzy
msgid "Tool"
msgstr "Herramientas"
-#: app/toolbox-editor.c:1012
+#: app/toolbox-editor.c:1025 modules/tools/profile.c:483
#, fuzzy
msgid "_Mode:"
msgstr "_Modelo:"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "doc"
-#: app/toolbox-editor.c:1019 app/toolbox-editor.c:1038
+#: app/toolbox-editor.c:1032 app/toolbox-editor.c:1051
#, fuzzy
msgid "Default"
msgstr "Establecer como predeterminada"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "audacity"
-#: app/toolbox-editor.c:1020
+#: app/toolbox-editor.c:1033
#, fuzzy
msgid "Interactive"
msgstr "Interpolación:"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "compiz-fusion-plugins-extra"
-#: app/toolbox-editor.c:1021
+#: app/toolbox-editor.c:1034
#, fuzzy
msgid "Non-interactive"
msgstr "Negativo"
-#: app/toolbox-editor.c:1029
+#: app/toolbox-editor.c:1042
msgid "Use _icon from:"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "alleyoop"
-#: app/toolbox-editor.c:1063
+#: app/toolbox-editor.c:1076
#, fuzzy
msgid "Functions"
msgstr "Función"
@@ -3058,160 +3170,180 @@ msgstr "Entrenamiento"
msgid "All tools not placed explicitly go here."
msgstr ""
-#: app/toolbox.c:106
+#: app/toolbox.c:111
msgid "View"
msgstr "Vista"
-#: app/toolbox.c:109
+#: app/toolbox.c:114
msgid "Tools"
msgstr "Herramientas"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "gmameui"
-#: app/toolbox.c:575
+#: app/toolbox.c:589
msgid "_File"
msgstr "_Archivo"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "anjuta"
-#: app/toolbox.c:593
+#: app/toolbox.c:607
msgid "_Info"
msgstr "_Info"
-#: app/toolbox.c:663
+#: app/toolbox.c:696
msgid "Display a 3D view of data"
msgstr "Muestra una vista 3D de los datos"
# Translation for this string generated by http://littlesvr.ca/ostd/
+# based on translation from "balsa"
+#: app/toolbox.c:700
+#, fuzzy
+msgid "Undo"
+msgstr "_Deshacer"
+
+#: app/toolbox.c:700
+msgid "Undo last action"
+msgstr ""
+
+#: app/toolbox.c:704
+#, fuzzy
+msgid "Redo"
+msgstr "/_Rehacer"
+
+#: app/toolbox.c:704
+msgid "Redo again last undone action"
+msgstr ""
+
+# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "claws-mail"
-#: app/toolbox.c:667
+#: app/toolbox.c:708
msgid "Zoom in"
msgstr "Aumentar"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "cairo-dock"
-#: app/toolbox.c:671
+#: app/toolbox.c:712
msgid "Zoom out"
msgstr "Alejarse"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "gedit"
-#: app/toolbox.c:675
+#: app/toolbox.c:716
msgid "Zoom 1:1"
msgstr "Ampliación 1:1"
-#: app/toolbox.c:722
+#: app/toolbox.c:781
msgid "/Show _Data Browser"
msgstr ""
-#: app/toolbox.c:730
+#: app/toolbox.c:789
msgid "/Module _Browser"
msgstr ""
-#: app/toolbox.c:738
+#: app/toolbox.c:797
msgid "/Program _Messages"
msgstr ""
-#: app/toolbox.c:753
+#: app/toolbox.c:812
msgid "/_User Guide"
msgstr ""
-#: app/toolbox.c:761
+#: app/toolbox.c:820
msgid "/_Tip of the Day"
msgstr "/_Consejo del día "
-#: app/toolbox.c:769
+#: app/toolbox.c:828
msgid "/_About Gwyddion"
msgstr "/_Acerca de Gwyddion"
-#: app/toolbox.c:806
+#: app/toolbox.c:865
msgid "/_Open..."
msgstr "/_Abrir..."
-#: app/toolbox.c:814
+#: app/toolbox.c:873
msgid "/_Merge..."
msgstr "/_Fusionar..."
-#: app/toolbox.c:822
+#: app/toolbox.c:881
msgid "/Open _Recent"
msgstr "/Abrir_Reciente"
-#: app/toolbox.c:830
+#: app/toolbox.c:889
msgid "/_Save"
msgstr "/_Guardar"
-#: app/toolbox.c:838
+#: app/toolbox.c:897
msgid "/Save _As..."
msgstr "/Guardar_Como..."
-#: app/toolbox.c:846
+#: app/toolbox.c:905
#, fuzzy
msgid "/_Close"
msgstr "_Cerrar"
-#: app/toolbox.c:854
+#: app/toolbox.c:913
msgid "/Remo_ve All Logs"
msgstr ""
-#: app/toolbox.c:870
+#: app/toolbox.c:929
msgid "/_Quit"
msgstr "/_Salir"
-#: app/toolbox.c:910
+#: app/toolbox.c:969
msgid "/_Undo"
msgstr "/_Deshacer"
-#: app/toolbox.c:918
+#: app/toolbox.c:977
msgid "/_Redo"
msgstr "/_Rehacer"
-#: app/toolbox.c:934
+#: app/toolbox.c:993
msgid "/Default Mask _Color..."
msgstr ""
-#: app/toolbox.c:942
+#: app/toolbox.c:1001
msgid "/Color _Gradients..."
msgstr ""
-#: app/toolbox.c:950
+#: app/toolbox.c:1009
msgid "/G_L Materials..."
msgstr "/Materiales G_L..."
-#: app/toolbox.c:958
+#: app/toolbox.c:1017
msgid "/_Toolbox..."
msgstr ""
-#: app/toolbox.c:966
+#: app/toolbox.c:1025
msgid "/_Keyboard Shortcuts"
msgstr ""
-#: app/toolbox.c:974
+#: app/toolbox.c:1033
msgid "/_Logging Enabled"
msgstr ""
-#: app/toolbox.c:1083
+#: app/toolbox.c:1142
msgid "Program Messages"
msgstr ""
-#: app/toolbox.c:1320
+#: app/toolbox.c:1379
msgid "Change Default Mask Color"
msgstr ""
-#: app/toolbox.c:1348
+#: app/toolbox.c:1407
msgid "OpenGL 3D graphics not available"
msgstr "Gráficos OpenGL 3D no disponibles"
-#: app/toolbox.c:1353
+#: app/toolbox.c:1412
msgid "OpenGL was disabled with a command-line option."
msgstr "OpenGL fue deshabilitado con una opción de línea de comandos."
-#: app/toolbox.c:1361
+#: app/toolbox.c:1420
msgid ""
"Initialization of OpenGL failed. Check output of <tt>glxinfo</tt> and "
"warning messages printed to console during Gwyddion startup."
msgstr ""
-#: app/toolbox.c:1368
+#: app/toolbox.c:1427
msgid "This version of Gwyddion was built without OpenGL support."
msgstr "Esta versión de Gwyddion fue construida sin el soporte de OpenGL. "
@@ -3289,7 +3421,7 @@ msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "lang"
-#: app/wait.c:106
+#: app/wait.c:114
msgid "Please wait"
msgstr "Por favor, espere"
@@ -3306,11 +3438,11 @@ msgstr "Archivos de texto Accurex II (.txt)"
msgid "File header cannot be converted from ISO-8859-1 character set: %s"
msgstr ""
-#: modules/file/aistfile.c:127
+#: modules/file/aistfile.c:123
msgid "Imports AIST-NT data files."
msgstr "Importa AIST-NT archivos de datos."
-#: modules/file/aistfile.c:140
+#: modules/file/aistfile.c:136
msgid "AIST-NT files (.aist)"
msgstr "Archivos AIST-NT (.aist)"
@@ -3357,7 +3489,8 @@ msgstr ""
#: modules/file/alicona.c:665 modules/file/gdeffile.c:175
#: modules/file/gdeffile.c:199 modules/file/gsffile.c:159
-#: modules/file/gxyzffile.c:199 modules/file/iso28600.c:1038
+#: modules/file/gxyzffile.c:199 modules/file/iso28600.c:1174
+#: modules/file/microprof.c:361 modules/file/microprof.c:375
#: modules/file/pt3file.c:489 modules/file/pt3file.c:591
msgid "File header is truncated."
msgstr ""
@@ -3370,11 +3503,11 @@ msgstr ""
msgid "Comment is not nul-terminated."
msgstr ""
-#: modules/file/ambfile.c:84
+#: modules/file/ambfile.c:83
msgid "Imports Ambios AMB data files."
msgstr "Importa Ambios AMB archivos de datos."
-#: modules/file/ambfile.c:97
+#: modules/file/ambfile.c:96
msgid "Ambios amb files (.amb)"
msgstr "Archivos Ambios amb (.amb)"
@@ -3406,11 +3539,11 @@ msgstr ""
msgid "FileDescBegin has no corresponding FileDescEnd."
msgstr ""
-#: modules/file/apedaxfile.c:259
+#: modules/file/apedaxfile.c:261
msgid "Imports A.P.E. Research DAX data files."
msgstr "Importa A.P.E. Research DAX archivos de datos."
-#: modules/file/apedaxfile.c:274
+#: modules/file/apedaxfile.c:276
#, fuzzy
msgid "A.P.E. Research DAX Files (.dax) and APDT File (.apdt)"
msgstr "Archivos A.P.E. Research DAX (.dax)"
@@ -3443,7 +3576,7 @@ msgstr "Anchura:"
msgid "Height:"
msgstr "Altura:"
-#: modules/file/asciiexport.c:220 modules/file/xyzexport.c:248
+#: modules/file/asciiexport.c:220 modules/file/xyzexport.c:251
msgid "Value units:"
msgstr ""
@@ -3454,30 +3587,30 @@ msgid "Export Text"
msgstr "Exportar Texto"
#: modules/file/asciiexport.c:275 modules/file/gxyzffile.c:402
-#: modules/file/imgexport.c:3565 modules/file/imgexport.c:4203
-#: modules/file/rawfile.c:758 modules/file/xyzexport.c:311
-#: modules/process/calibrate.c:607 modules/process/coerce.c:364
-#: modules/process/col_synth.c:516 modules/process/correct_affine.c:470
-#: modules/process/extend.c:259 modules/process/fft_filter_1d.c:261
-#: modules/process/grain_dist.c:306 modules/process/grain_edge.c:255
-#: modules/process/grain_mark.c:338 modules/process/grain_wshed.c:252
-#: modules/process/linematch.c:852 modules/process/mark_disconn.c:279
-#: modules/process/slope_dist.c:367 modules/process/tip_blind.c:357
+#: modules/file/imgexport.c:3532 modules/file/imgexport.c:4151
+#: modules/file/rawfile.c:758 modules/file/xyzexport.c:314
+#: modules/process/calibrate.c:561 modules/process/coerce.c:363
+#: modules/process/col_synth.c:516 modules/process/correct_affine.c:520
+#: modules/process/extend.c:259 modules/process/fft_filter_1d.c:263
+#: modules/process/grain_dist.c:307 modules/process/grain_edge.c:254
+#: modules/process/grain_mark.c:335 modules/process/grain_wshed.c:256
+#: modules/process/linematch.c:819 modules/process/mark_disconn.c:280
+#: modules/process/slope_dist.c:359 modules/process/tip_blind.c:360
#: modules/process/wpour_mark.c:354 modules/tools/spotremove.c:322
-#: modules/tools/stats.c:402 modules/xyz/xyz_raster.c:628
+#: modules/tools/stats.c:401 modules/xyz/xyz_raster.c:597
msgid "Options"
msgstr "Opciones"
-#: modules/file/asciiexport.c:278 modules/file/xyzexport.c:314
+#: modules/file/asciiexport.c:278 modules/file/xyzexport.c:317
msgid "Use _dot as decimal separator"
msgstr ""
-#: modules/file/asciiexport.c:285 modules/file/xyzexport.c:321
-#: modules/process/grain_dist.c:317
+#: modules/file/asciiexport.c:285 modules/file/xyzexport.c:324
+#: modules/process/grain_dist.c:318
msgid "Add _informational comment header"
msgstr ""
-#: modules/file/asciiexport.c:294 modules/file/xyzexport.c:330
+#: modules/file/asciiexport.c:294 modules/file/xyzexport.c:333
msgid "_Precision:"
msgstr ""
@@ -3497,20 +3630,20 @@ msgstr "Importa Attocube Systems ASC archivos."
msgid "Attocube ASCII files (.asc)"
msgstr "Archivos Attocube ASCII (.asc)"
-#: modules/file/bcrfile.c:146
+#: modules/file/bcrfile.c:141
msgid "Imports Image Metrology BCR data files."
msgstr "Importa Image Metrology BCR archivos de datos."
-#: modules/file/bcrfile.c:159
+#: modules/file/bcrfile.c:154
msgid "BCR files (.bcr, .bcrf)"
msgstr "Archivos BCR (.bcr, .bcrf)"
-#: modules/file/bcrfile.c:238
+#: modules/file/bcrfile.c:233
#, c-format
msgid "File header is not convertible from UTF-16: %s"
msgstr ""
-#: modules/file/bcrfile.c:351
+#: modules/file/bcrfile.c:346
#, c-format
msgid "Unknown file type header: `%s'."
msgstr ""
@@ -3545,7 +3678,7 @@ msgid "Burleigh exported data (.txt, .bin)"
msgstr "Burleigh datos exportados (.txt, .bin)"
#: modules/file/burleigh_exp.c:226 modules/file/burleigh_exp.c:267
-#: modules/file/nanoscope.c:1605 modules/file/omicron.c:416
+#: modules/file/nanoscope.c:1612 modules/file/omicron.c:416
#: modules/file/shimadzu.c:468
msgid "Missing colon in header line."
msgstr ""
@@ -3594,24 +3727,44 @@ msgstr "Importa Benyuan CSM archivos de datos."
msgid "Benyuan CSM files (.csm)"
msgstr "Archivos Benyuan CSM (.csm)"
-#: modules/file/dektakxml.c:138
+#: modules/file/dektakvca.c:197
+#, fuzzy
+msgid "Imports Dektak OPDx data files."
+msgstr "Importa DME MIF archivos de datos."
+
+#: modules/file/dektakvca.c:210
+#, fuzzy
+msgid "Dektak OPDx data files (.OPDx)"
+msgstr "Archivos NanoScan XML (.xml)"
+
+#: modules/file/dektakvca.c:655
+#, c-format
+msgid "Item `%s' has unexpected type %u instead of %u."
+msgstr ""
+
+#: modules/file/dektakvca.c:1022
+#, c-format
+msgid "Truncated data inside item %s."
+msgstr ""
+
+#: modules/file/dektakxml.c:118
#, fuzzy
msgid "Imports Dektak XML data files."
msgstr "Importa DME MIF archivos de datos."
-#: modules/file/dektakxml.c:151
+#: modules/file/dektakxml.c:131
#, fuzzy
msgid "Dektak XML data files (.xml)"
msgstr "Archivos NanoScan XML (.xml)"
-#: modules/file/dektakxml.c:228 modules/file/lextfile.c:260
-#: modules/file/nanoscan.c:267 modules/file/ometiff.c:265
+#: modules/file/dektakxml.c:208 modules/file/lextfile.c:260
+#: modules/file/nanoscan.c:270 modules/file/ometiff.c:265
#, c-format
msgid "XML parsing failed: %s"
msgstr ""
-#: modules/file/dektakxml.c:400 modules/file/lextfile.c:163
-#: modules/file/nanoscan.c:672 modules/file/ometiff.c:445
+#: modules/file/dektakxml.c:373 modules/file/lextfile.c:163
+#: modules/file/nanoscan.c:698 modules/file/ometiff.c:445
#, c-format
msgid "Top-level element is not ‘%s’."
msgstr ""
@@ -3726,7 +3879,7 @@ msgid "Scan size header field overlaps with data."
msgstr ""
#: modules/file/err.h:48 modules/file/nrrdfile.c:779
-#: modules/file/nrrdfile.c:824
+#: modules/file/nrrdfile.c:824 modules/pygwy/pygwy-console.c:504
#, c-format
msgid "Cannot read from file: %s."
msgstr ""
@@ -3940,32 +4093,32 @@ msgid ""
"Data deserialization succeeded, but resulted in an unexpected object %s."
msgstr ""
-#: modules/file/gwytiff.h:332
+#: modules/file/gwytiff.h:335
#, c-format
msgid "BigTIFF reserved fields are %u and %u instead of 8 and 0."
msgstr ""
-#: modules/file/gwytiff.h:349 modules/file/gwytiff.h:366
+#: modules/file/gwytiff.h:352 modules/file/gwytiff.h:369
#, c-format
msgid "TIFF directory %lu ended unexpectedly."
msgstr ""
-#: modules/file/gwytiff.h:484
+#: modules/file/gwytiff.h:487
#, c-format
msgid "BigTIFF data type %u was found in a classic TIFF."
msgstr ""
-#: modules/file/gwytiff.h:501
+#: modules/file/gwytiff.h:504
msgid "Invalid tag data positions were found."
msgstr ""
-#: modules/file/gwytiff.h:874 modules/file/gwytiff.h:889
-#: modules/file/gwytiff.h:1012 modules/file/gwytiff.h:1019
+#: modules/file/gwytiff.h:877 modules/file/gwytiff.h:892
+#: modules/file/gwytiff.h:1015 modules/file/gwytiff.h:1022
#, c-format
msgid "Required tag %u was not found."
msgstr ""
-#: modules/file/gwytiff.h:942 modules/file/gwytiff.h:986
+#: modules/file/gwytiff.h:945 modules/file/gwytiff.h:989
#: modules/file/keyence.c:449 modules/file/matfile.c:276
#: modules/file/matfile.c:298 modules/file/omicronflat.c:1962
#: modules/file/princetonspe.c:339 modules/file/psia.c:352
@@ -3973,23 +4126,23 @@ msgstr ""
msgid "File is truncated."
msgstr ""
-#: modules/file/gwytiff.h:1044
+#: modules/file/gwytiff.h:1047
msgid "Non-uniform bits per sample are unsupported."
msgstr ""
-#: modules/file/gwytiff.h:1071
+#: modules/file/gwytiff.h:1074 modules/file/zeisslsm.c:973
#, c-format
msgid "Compression type %u is not supported."
msgstr ""
-#: modules/file/gwytiff.h:1077
+#: modules/file/gwytiff.h:1080
#, c-format
msgid "Planar configuration %u is not supported."
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "spek"
-#: modules/file/gwytiff.h:1101
+#: modules/file/gwytiff.h:1104
msgid "Unsupported sample format"
msgstr "Formato de muestra no soportado"
@@ -4034,7 +4187,7 @@ msgstr ""
msgid "Minizip error while reading the zip file: %s (%d)."
msgstr ""
-#: modules/file/gwyzip.h:248
+#: modules/file/gwyzip.h:248 modules/file/jpkscan.c:2776
#, c-format
msgid "File %s is missing in the zip file."
msgstr ""
@@ -4073,8 +4226,8 @@ msgstr ""
msgid "Export GXYZF"
msgstr "_Exportar"
-#: modules/file/gxyzffile.c:395 modules/file/xyzexport.c:238
-#: modules/file/xyzexport.c:304
+#: modules/file/gxyzffile.c:395 modules/file/xyzexport.c:241
+#: modules/file/xyzexport.c:307
#, fuzzy
msgid "XYZ data:"
msgstr "Archivos de datos XYZ"
@@ -4162,11 +4315,13 @@ msgstr ""
msgid "Representable"
msgstr ""
-#: modules/file/hdrimage.cc:480 modules/tools/stats.c:203
+#: modules/file/hdrimage.cc:480 modules/graph/graph_stats.c:146
+#: modules/tools/stats.c:203
msgid "Minimum:"
msgstr "Mínimo:"
-#: modules/file/hdrimage.cc:496 modules/tools/stats.c:204
+#: modules/file/hdrimage.cc:496 modules/graph/graph_stats.c:147
+#: modules/tools/stats.c:204
msgid "Maximum:"
msgstr "Máximo:"
@@ -4187,12 +4342,12 @@ msgid "OpenEXR data type %u is invalid or unsupported."
msgstr ""
#: modules/file/hdrimage.cc:1433 modules/file/hdrimage.cc:1442
-#: modules/file/imgexport.c:5249 modules/file/imgexport.c:5260
+#: modules/file/imgexport.c:5198 modules/file/imgexport.c:5209
#, c-format
msgid "libpng initialization error (in %s)"
msgstr ""
-#: modules/file/hdrimage.cc:1451 modules/file/imgexport.c:5324
+#: modules/file/hdrimage.cc:1451 modules/file/imgexport.c:5273
msgid "libpng error occurred"
msgstr ""
@@ -4214,11 +4369,6 @@ msgstr "Información de la imagen"
msgid "Horizontal size:"
msgstr ""
-#: modules/file/hdrimage.cc:2246 modules/file/hdrimage.cc:2252
-#: modules/file/pixmap.c:820 modules/file/pixmap.c:826
-msgid "px"
-msgstr "px"
-
#: modules/file/hdrimage.cc:2252 modules/file/pixmap.c:826
msgid "Vertical size:"
msgstr ""
@@ -4235,10 +4385,10 @@ msgstr "Canales:"
msgid "Pages:"
msgstr "Páginas:"
-#: modules/file/hdrimage.cc:2290 modules/file/imgexport.c:3043
+#: modules/file/hdrimage.cc:2290 modules/file/imgexport.c:3059
#: modules/file/pixmap.c:862 modules/file/rawfile.c:649
-#: modules/process/dimensions.h:467 modules/xyz/xyz_drift.c:774
-#: modules/xyz/xyz_raster.c:566
+#: modules/process/dimensions.h:449 modules/xyz/xyz_drift.c:774
+#: modules/xyz/xyz_raster.c:535
msgid "Physical Dimensions"
msgstr ""
@@ -4248,18 +4398,18 @@ msgstr ""
#: modules/process/calcoefs_new.c:408 modules/process/calcoefs_new.c:475
#: modules/process/calcoefs_simple.c:391 modules/process/calcoefs_simple.c:458
#: modules/process/calcoefs_view.c:511 modules/process/calcoefs_view.c:549
-#: modules/process/calibrate.c:466 modules/process/calibrate.c:549
-#: modules/process/dimensions.h:161 modules/process/volumize_layers.c:259
-#: modules/volume/volume_calibrate.c:414 modules/volume/volume_calibrate.c:441
-#: modules/volume/volume_calibrate.c:468 modules/volume/volume_calibrate.c:546
+#: modules/process/calibrate.c:459 modules/process/calibrate.c:514
+#: modules/process/dimensions.h:143 modules/process/volumize_layers.c:259
+#: modules/volume/volume_calibrate.c:409 modules/volume/volume_calibrate.c:429
+#: modules/volume/volume_calibrate.c:449 modules/volume/volume_calibrate.c:498
msgid "verb|Change"
msgstr "Cambiar"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "cairo-clock"
#: modules/file/hdrimage.cc:2345 modules/file/pixmap.c:907
-#: modules/file/rawfile.c:694 modules/process/crosscor.c:263
-#: modules/process/dimensions.h:477
+#: modules/file/rawfile.c:694 modules/process/crosscor.c:260
+#: modules/process/dimensions.h:459
msgid "H_eight:"
msgstr "A_ltura"
@@ -4276,16 +4426,16 @@ msgstr ""
#: modules/file/hdrimage.cc:2557 modules/file/pixmap.c:1176
#: modules/file/rawfile.c:1386 modules/process/calcoefs_new.c:819
#: modules/process/calcoefs_simple.c:1197 modules/process/calcoefs_view.c:1380
-#: modules/process/calibrate.c:979 modules/process/dimensions.h:195
-#: modules/process/volumize_layers.c:315 modules/volume/volume_calibrate.c:1017
+#: modules/process/calibrate.c:1013 modules/process/dimensions.h:177
+#: modules/process/volumize_layers.c:314 modules/volume/volume_calibrate.c:957
msgid "Change Units"
msgstr ""
#: modules/file/hdrimage.cc:2571 modules/file/pixmap.c:1190
#: modules/file/rawfile.c:1400 modules/process/calcoefs_new.c:832
#: modules/process/calcoefs_simple.c:1210 modules/process/calcoefs_view.c:1393
-#: modules/process/calibrate.c:993 modules/process/dimensions.h:208
-#: modules/process/volumize_layers.c:329 modules/volume/volume_calibrate.c:1031
+#: modules/process/calibrate.c:1027 modules/process/dimensions.h:190
+#: modules/process/volumize_layers.c:328 modules/volume/volume_calibrate.c:971
msgid "New _units:"
msgstr "Nuevas_unidades"
@@ -4329,209 +4479,210 @@ msgstr ""
msgid "Field DataSize %ux%u does not match image dimensions %ux%u."
msgstr ""
-#: modules/file/igorfile.c:200
+#: modules/file/igorfile.c:210
msgid "Imports Igor binary waves (.ibw)."
msgstr "Importa Igor binary waves (.ibw)."
-#: modules/file/igorfile.c:213
+#: modules/file/igorfile.c:223
msgid "Igor binary waves (.ibw)"
msgstr "Igor binary waves (.ibw)"
-#: modules/file/igorfile.c:273
+#: modules/file/igorfile.c:283
#, c-format
msgid "Format version is %d. Only version 5 is supported."
msgstr ""
-#: modules/file/igorfile.c:294
+#: modules/file/igorfile.c:305
msgid "Only two-dimensional data are supported."
msgstr ""
-#: modules/file/igorfile.c:306
+#: modules/file/igorfile.c:317
#, c-format
msgid "Number of data points %u does not match resolutions %u×%u×%u."
msgstr ""
-#: modules/file/igorfile.c:320
+#: modules/file/igorfile.c:331
#, c-format
msgid "Data size %u does not match the number of data points %u×%u."
msgstr ""
-#: modules/file/igorfile.c:358
+#: modules/file/igorfile.c:369
msgid "Cannot read channel labels."
msgstr ""
-#: modules/file/imgexport.c:392 modules/file/pixmap.c:178
+#: modules/file/imgexport.c:391 modules/file/pixmap.c:178
msgid "Portable Network Graphics (.png)"
msgstr "Portable Network Graphics (.png)"
-#: modules/file/imgexport.c:398 modules/file/pixmap.c:182
+#: modules/file/imgexport.c:397 modules/file/pixmap.c:182
msgid "JPEG (.jpeg,.jpg)"
msgstr "JPEG (.jpeg,.jpg)"
-#: modules/file/imgexport.c:404 modules/file/pixmap.c:186
+#: modules/file/imgexport.c:403 modules/file/pixmap.c:186
msgid "TIFF (.tiff,.tif)"
msgstr "TIFF (.tiff,.tif)"
-#: modules/file/imgexport.c:410 modules/file/pixmap.c:190
+#: modules/file/imgexport.c:409 modules/file/pixmap.c:190
msgid "Portable Pixmap (.ppm,.pnm)"
msgstr "Portable Pixmap (.ppm,.pnm)"
-#: modules/file/imgexport.c:416 modules/file/pixmap.c:194
+#: modules/file/imgexport.c:415 modules/file/pixmap.c:194
msgid "Windows or OS2 Bitmap (.bmp)"
msgstr "Windows o OS2 Bitmap (.bmp)"
-#: modules/file/imgexport.c:422 modules/file/pixmap.c:198
+#: modules/file/imgexport.c:421 modules/file/pixmap.c:198
msgid "TARGA (.tga,.targa)"
msgstr "TARGA (.tga,.targa)"
-#: modules/file/imgexport.c:429
+#: modules/file/imgexport.c:428
msgid "WebP (.webp)"
msgstr ""
-#: modules/file/imgexport.c:437
+#: modules/file/imgexport.c:436
#, fuzzy
msgid "Portable document format (.pdf)"
msgstr "Portable Network Graphics (.png)"
-#: modules/file/imgexport.c:445
+#: modules/file/imgexport.c:444
msgid "Encapsulated PostScript (.eps)"
msgstr ""
-#: modules/file/imgexport.c:453
+#: modules/file/imgexport.c:452
#, fuzzy
msgid "Scalable Vector Graphics (.svg)"
msgstr "Portable Network Graphics (.png)"
-#: modules/file/imgexport.c:463 modules/tools/selectionmanager.c:269
+#: modules/file/imgexport.c:462 modules/tools/selectionmanager.c:269
msgid "Horiz./vert. lines"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "inkscape"
-#: modules/file/imgexport.c:467 modules/tools/selectionmanager.c:270
+#: modules/file/imgexport.c:466 modules/tools/selectionmanager.c:270
msgid "Ellipses"
msgstr "Elipses"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "anjuta"
-#: modules/file/imgexport.c:471 modules/tools/selectionmanager.c:272
+#: modules/file/imgexport.c:470 modules/tools/selectionmanager.c:272
msgid "Lines"
msgstr "Líneas"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "inkscape"
-#: modules/file/imgexport.c:479 modules/tools/selectionmanager.c:275
+#: modules/file/imgexport.c:478 modules/tools/selectionmanager.c:275
msgid "Rectangles"
msgstr "Rectángulos"
-#: modules/file/imgexport.c:483 modules/process/lat_synth.c:565
+#: modules/file/imgexport.c:482 modules/process/lat_synth.c:565
#: modules/process/lat_synth.c:637 modules/tools/selectionmanager.c:271
msgid "Lattice"
msgstr ""
-#: modules/file/imgexport.c:487
+#: modules/file/imgexport.c:486
msgid "Path"
msgstr ""
-#: modules/file/imgexport.c:493 modules/file/imgexport.c:499
+#: modules/file/imgexport.c:492 modules/file/imgexport.c:498
msgid "ruler|_None"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "inkscape"
-#: modules/file/imgexport.c:494
+#: modules/file/imgexport.c:493
msgid "_Rulers"
msgstr "_Reglas"
-#: modules/file/imgexport.c:495
+#: modules/file/imgexport.c:494
msgid "_Inset scale bar"
msgstr ""
-#: modules/file/imgexport.c:500
+#: modules/file/imgexport.c:499
msgid "_False color ruler"
msgstr ""
-#: modules/file/imgexport.c:504
+#: modules/file/imgexport.c:503
msgid "title|None"
msgstr ""
-#: modules/file/imgexport.c:505
+#: modules/file/imgexport.c:504
msgid "At the top"
msgstr ""
-#: modules/file/imgexport.c:506
+#: modules/file/imgexport.c:505
msgid "Along the right edge"
msgstr ""
-#: modules/file/imgexport.c:512
+#: modules/file/imgexport.c:511
msgid ""
"Renders data into vector (SVG, PDF, EPS) and pixmap (PNG, JPEG, TIFF, WebP, "
"PPM, BMP, TARGA) images. Export to some formats relies on GDK and other "
"libraries thus may be installation-dependent."
msgstr ""
-#: modules/file/imgexport.c:2931
+#: modules/file/imgexport.c:2933
msgid "Select Color"
msgstr ""
-#: modules/file/imgexport.c:3002
+#: modules/file/imgexport.c:3005
+msgid "White"
+msgstr ""
+
+#: modules/file/imgexport.c:3014
#, fuzzy
msgid "Black"
msgstr "Blackmann"
-#: modules/file/imgexport.c:3010
-msgid "White"
-msgstr ""
-
-#: modules/file/imgexport.c:3053
+#: modules/file/imgexport.c:3069
msgid "Pi_xel size:"
msgstr ""
-#: modules/file/imgexport.c:3062
+#: modules/file/imgexport.c:3077
msgid "Pixels per _inch:"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "docky"
-#: modules/file/imgexport.c:3089
+#: modules/file/imgexport.c:3102
msgid "_Zoom:"
msgstr "_Zoom:"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "plugin_htmlbar"
-#: modules/file/imgexport.c:3108 modules/process/bdep_synth.c:430
+#: modules/file/imgexport.c:3120 modules/process/bdep_synth.c:430
#: modules/process/col_synth.c:486 modules/process/diff_synth.c:508
-#: modules/process/domain_synth.c:510 modules/process/grain_mark.c:285
-#: modules/process/lat_synth.c:753 modules/process/obj_synth.c:575
-#: modules/process/pat_synth.c:852 modules/process/pat_synth.c:1154
-#: modules/process/pat_synth.c:1489 modules/process/tip_blind.c:340
+#: modules/process/domain_synth.c:510 modules/process/fibre_synth.c:540
+#: modules/process/grain_mark.c:284 modules/process/lat_synth.c:753
+#: modules/process/obj_synth.c:573 modules/process/pat_synth.c:853
+#: modules/process/pat_synth.c:1155 modules/process/pat_synth.c:1490
+#: modules/process/phase_synth.c:298 modules/process/tip_blind.c:342
msgid "_Height:"
msgstr "_Alto:"
-#: modules/file/imgexport.c:3121
+#: modules/file/imgexport.c:3136
#, fuzzy
msgid "_Font:"
msgstr "Tipo de letra:"
-#: modules/file/imgexport.c:3140
+#: modules/file/imgexport.c:3145
msgid "_Font size:"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "gimp"
-#: modules/file/imgexport.c:3160
+#: modules/file/imgexport.c:3163
#, fuzzy
msgid "O_utline thickness:"
msgstr "G_rosor:"
-#: modules/file/imgexport.c:3170
+#: modules/file/imgexport.c:3172
#, fuzzy
msgid "_Border width:"
msgstr "Nueva _anchura:"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "banshee"
-#: modules/file/imgexport.c:3180
+#: modules/file/imgexport.c:3181
#, fuzzy
msgid "_Tick length:"
msgstr "longitud"
@@ -4555,258 +4706,259 @@ msgstr "Color"
msgid "_Line and text color:"
msgstr ""
-#: modules/file/imgexport.c:3221
+#: modules/file/imgexport.c:3220
msgid "_Transparent background"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "abiword"
-#: modules/file/imgexport.c:3232
+#: modules/file/imgexport.c:3231
#, fuzzy
msgid "_Background color:"
msgstr "Fondo"
-#: modules/file/imgexport.c:3474
-#, fuzzy
-msgid "Lateral scale"
-msgstr "Material GL"
-
-#: modules/file/imgexport.c:3487 modules/process/lno_synth.c:1053
-msgid "_Length:"
-msgstr ""
-
-# Translation for this string generated by http://littlesvr.ca/ostd/
-# based on translation from "gimp"
-#: modules/file/imgexport.c:3503
-msgid "_Auto"
-msgstr "_Auto"
-
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "abiword"
-#: modules/file/imgexport.c:3511 modules/process/pat_synth.c:469
+#: modules/file/imgexport.c:3433 modules/process/fibre_synth.c:582
+#: modules/process/pat_synth.c:470
msgid "Placement"
msgstr "Colocación"
-#: modules/file/imgexport.c:3515
+#: modules/file/imgexport.c:3437
msgid "left"
msgstr "izquierda"
-#: modules/file/imgexport.c:3519
+#: modules/file/imgexport.c:3440
msgid "center"
msgstr "centro"
-#: modules/file/imgexport.c:3523
+#: modules/file/imgexport.c:3443
msgid "right"
msgstr "derecha"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "bluefish"
-#: modules/file/imgexport.c:3528
+#: modules/file/imgexport.c:3448
msgid "top"
msgstr "arriba"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "bluefish"
-#: modules/file/imgexport.c:3540
+#: modules/file/imgexport.c:3456
msgid "bottom"
msgstr "abajo"
-#: modules/file/imgexport.c:3552 modules/file/imgexport.c:3874
+#: modules/file/imgexport.c:3479
+#, fuzzy
+msgid "Lateral scale"
+msgstr "Material GL"
+
+#: modules/file/imgexport.c:3496 modules/process/lno_synth.c:1053
+msgid "_Length:"
+msgstr ""
+
+# Translation for this string generated by http://littlesvr.ca/ostd/
+# based on translation from "gimp"
+#: modules/file/imgexport.c:3502
+msgid "_Auto"
+msgstr "_Auto"
+
+#: modules/file/imgexport.c:3519 modules/file/imgexport.c:3832
#, fuzzy
msgid "Hori_zontal gap:"
msgstr "Horizontal"
-#: modules/file/imgexport.c:3558 modules/file/imgexport.c:3854
+#: modules/file/imgexport.c:3526 modules/file/imgexport.c:3812
#, fuzzy
msgid "_Vertical gap:"
msgstr "_Verticalmente:"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "abiword"
-#: modules/file/imgexport.c:3571 modules/file/imgexport.c:4184
+#: modules/file/imgexport.c:3538 modules/file/imgexport.c:4134
#, fuzzy
msgid "Colo_r:"
msgstr "Color:"
-#: modules/file/imgexport.c:3576 modules/file/imgexport.c:4189
+#: modules/file/imgexport.c:3542 modules/file/imgexport.c:4138
msgid "Out_line color:"
msgstr ""
-#: modules/file/imgexport.c:3580 modules/file/imgexport.c:4195
+#: modules/file/imgexport.c:3547 modules/file/imgexport.c:4143
msgid "O_pacity:"
msgstr ""
-#: modules/file/imgexport.c:3589
+#: modules/file/imgexport.c:3554
msgid "Draw _ticks"
msgstr ""
-#: modules/file/imgexport.c:3599
+#: modules/file/imgexport.c:3564
msgid "Draw _label"
msgstr ""
-#: modules/file/imgexport.c:3609
+#: modules/file/imgexport.c:3574
msgid "Draw text _above scale bar"
msgstr ""
-#: modules/file/imgexport.c:3773
+#: modules/file/imgexport.c:3738
msgid "Image"
msgstr ""
-#: modules/file/imgexport.c:3777 modules/process/calcoefs_view.c:473
-#: modules/process/correct_affine.c:488 modules/process/drift.c:297
-#: modules/process/dwt.c:206 modules/process/dwtanisotropy.c:202
-#: modules/process/fft_filter_1d.c:294 modules/process/fft_profile.c:292
-#: modules/process/fractal.c:253 modules/process/nanoindent_adjust.c:229
-#: modules/process/polydistort.c:247 modules/process/rotate.c:274
-#: modules/process/scale.c:253 modules/process/straighten_path.c:271
+#: modules/file/imgexport.c:3742 modules/process/calcoefs_view.c:473
+#: modules/process/correct_affine.c:538 modules/process/drift.c:298
+#: modules/process/dwt.c:206 modules/process/dwtanisotropy.c:203
+#: modules/process/fft_filter_1d.c:296 modules/process/fft_profile.c:293
+#: modules/process/fractal.c:262 modules/process/nanoindent_adjust.c:229
+#: modules/process/polydistort.c:250 modules/process/rotate.c:274
+#: modules/process/scale.c:257 modules/process/straighten_path.c:270
#: modules/process/unrotate.c:277 modules/tools/linestats.c:400
-#: modules/tools/profile.c:555 modules/tools/roughness.c:864
-#: modules/tools/sfunctions.c:468 modules/xyz/xyz_raster.c:632
+#: modules/tools/profile.c:552 modules/tools/roughness.c:879
+#: modules/tools/sfunctions.c:481 modules/xyz/xyz_raster.c:601
msgid "_Interpolation type:"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "orage"
-#: modules/file/imgexport.c:3807
+#: modules/file/imgexport.c:3772
#, fuzzy
msgid "Draw _frame"
msgstr "Mostrar _marco"
-#: modules/file/imgexport.c:3816
+#: modules/file/imgexport.c:3781
msgid "Draw _mask"
msgstr ""
-#: modules/file/imgexport.c:3826
+#: modules/file/imgexport.c:3791
msgid "Draw mask _legend"
msgstr ""
-#: modules/file/imgexport.c:3861
+#: modules/file/imgexport.c:3819
msgid "Value Scale"
msgstr ""
-#: modules/file/imgexport.c:3882
+#: modules/file/imgexport.c:3840
msgid "Fi_xed precision:"
msgstr ""
-#: modules/file/imgexport.c:3898
+#: modules/file/imgexport.c:3855
#, fuzzy
msgid "Fixed _kilo threshold:"
msgstr "_Umbral:"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "plugin_htmlbar"
-#: modules/file/imgexport.c:3914 modules/file/imgexport.c:4635
+#: modules/file/imgexport.c:3869 modules/file/imgexport.c:4583
#, fuzzy
msgid "Title"
msgstr "_Título:"
-#: modules/file/imgexport.c:3918
+#: modules/file/imgexport.c:3877
#, fuzzy
msgid "Posi_tion:"
msgstr "Posición:"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "po"
-#: modules/file/imgexport.c:3934
+#: modules/file/imgexport.c:3884
#, fuzzy
msgid "_Gap:"
msgstr "Intervalo:"
-#: modules/file/imgexport.c:3941
+#: modules/file/imgexport.c:3891
msgid "Put _units to title"
msgstr ""
-#: modules/file/imgexport.c:4125
+#: modules/file/imgexport.c:4075
msgid "Draw _selection"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "celestia"
-#: modules/file/imgexport.c:4176 modules/tools/selectionmanager.c:361
+#: modules/file/imgexport.c:4126 modules/tools/selectionmanager.c:361
msgid "Objects"
msgstr "Objetos"
-#: modules/file/imgexport.c:4615
+#: modules/file/imgexport.c:4563
#, fuzzy
msgid "Lateral"
msgstr "Material GL"
-#: modules/file/imgexport.c:4654 modules/file/rawfile.c:1040
-#: modules/process/calcoefs_load.c:230 modules/process/neural.c:693
+#: modules/file/imgexport.c:4602 modules/file/rawfile.c:1040
+#: modules/process/calcoefs_load.c:230 modules/process/neural.c:700
msgid "verb|_Load"
msgstr "_Cargar"
-#: modules/file/imgexport.c:4660 modules/file/rawfile.c:1046
-#: modules/process/neural.c:699
+#: modules/file/imgexport.c:4608 modules/file/rawfile.c:1046
+#: modules/process/neural.c:706
msgid "verb|_Store"
msgstr "_Archivar"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "anjuta"
-#: modules/file/imgexport.c:4666 modules/file/rawfile.c:1052
-#: modules/process/neural.c:705
+#: modules/file/imgexport.c:4614 modules/file/rawfile.c:1052
+#: modules/process/neural.c:712
msgid "_Rename"
msgstr "_Renombrar"
-#: modules/file/imgexport.c:4686 modules/file/rawfile.c:1071
+#: modules/file/imgexport.c:4634 modules/file/rawfile.c:1071
msgid "Preset _name:"
msgstr ""
-#: modules/file/imgexport.c:4757
+#: modules/file/imgexport.c:4705
#, c-format
msgid "Export %s"
msgstr ""
-#: modules/file/imgexport.c:4778
+#: modules/file/imgexport.c:4727
msgid "Export as 1_6 bit grayscale"
msgstr ""
-#: modules/file/imgexport.c:4801
+#: modules/file/imgexport.c:4750
msgid "Lateral Scale"
msgstr ""
-#: modules/file/imgexport.c:4806
+#: modules/file/imgexport.c:4755
#, fuzzy
msgid "Values"
msgstr "Valor"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "aptitude"
-#: modules/file/imgexport.c:4811
+#: modules/file/imgexport.c:4760
#, fuzzy
msgid "Selection"
msgstr "Sección: "
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "audacious-plugins"
-#: modules/file/imgexport.c:4816 modules/file/rawfile.c:462
+#: modules/file/imgexport.c:4765 modules/file/rawfile.c:462
#: modules/process/convolution_filter.c:275
msgid "Presets"
msgstr "Predefinidos"
-#: modules/file/imgexport.c:5576
+#: modules/file/imgexport.c:5525
#, c-format
msgid "Cairo error occurred: %s"
msgstr ""
-#: modules/file/imgexport.c:5600
+#: modules/file/imgexport.c:5549
#, c-format
msgid "Pixbuf save failed: %s."
msgstr ""
-#: modules/file/imgexport.c:5878
+#: modules/file/imgexport.c:5827
msgid "Image is too large to be stored as TARGA."
msgstr ""
-#: modules/file/imgexport.c:6457 modules/file/imgexport.c:6486
+#: modules/file/imgexport.c:6406 modules/file/imgexport.c:6435
msgid "Draw _numbers"
msgstr ""
-#: modules/file/imgexport.c:6469 modules/file/imgexport.c:6517
+#: modules/file/imgexport.c:6418 modules/file/imgexport.c:6466
msgid "_End marker length:"
msgstr ""
-#: modules/file/imgexport.c:6498
+#: modules/file/imgexport.c:6447
#, fuzzy
msgid "Marker _radius:"
msgstr "Radio medio"
@@ -4848,45 +5000,56 @@ msgstr ""
msgid "image depth"
msgstr ""
-#: modules/file/iso28600.c:534
+#: modules/file/iso28600.c:543
msgid "Imports and exports ISO 28600:2011 SPM data transfer format."
msgstr ""
-#: modules/file/iso28600.c:550
+#: modules/file/iso28600.c:559
msgid "ISO 28600:2011 SPM data transfer files (.spm)"
msgstr ""
-#: modules/file/iso28600.c:606
+#: modules/file/iso28600.c:658
#, c-format
-msgid "Only regular mappings are implemented but file has mapping type ‘%s’."
+msgid ""
+"Only regular and irregular mappings are implemented but the file has mapping "
+"type ‘%s’."
msgstr ""
-#: modules/file/iso28600.c:668 modules/file/iso28600.c:677
-#: modules/file/iso28600.c:686
+#: modules/file/iso28600.c:687 modules/file/iso28600.c:696
+#: modules/file/iso28600.c:705
#, c-format
msgid "List ‘%s’ has %u items which differs from the number %u given by ‘%s’."
msgstr ""
-#: modules/file/iso28600.c:755 modules/file/iso28600.c:867
-#: modules/file/sdfile.c:846 modules/file/sdfile.c:863
-#: modules/file/spip-asc.c:239 modules/file/witec-asc.c:223
-#: modules/file/wsffile.c:215
+#: modules/file/iso28600.c:775
#, c-format
-msgid "End of file reached when reading sample #%d of %d"
+msgid "End of file reached when reading sample #%u of %u"
msgstr ""
-#: modules/file/iso28600.c:764 modules/file/iso28600.c:876
-#: modules/file/spip-asc.c:246 modules/file/witec-asc.c:230
-#: modules/file/wsffile.c:222
+#: modules/file/iso28600.c:784 modules/file/iso28600.c:873
#, c-format
-msgid "Malformed data encountered when reading sample #%d of %d"
+msgid "Malformed data encountered when reading sample #%u"
msgstr ""
-#: modules/file/iso28600.c:774 modules/file/iso28600.c:886
+#: modules/file/iso28600.c:797 modules/file/iso28600.c:887
+#: modules/file/iso28600.c:1022
msgid "Missing end-of-data marker."
msgstr ""
-#: modules/file/iso28600.c:1048
+#: modules/file/iso28600.c:1003 modules/file/sdfile.c:846
+#: modules/file/sdfile.c:863 modules/file/spip-asc.c:239
+#: modules/file/witec-asc.c:223 modules/file/wsffile.c:215
+#, c-format
+msgid "End of file reached when reading sample #%d of %d"
+msgstr ""
+
+#: modules/file/iso28600.c:1012 modules/file/spip-asc.c:246
+#: modules/file/witec-asc.c:230 modules/file/wsffile.c:222
+#, c-format
+msgid "Malformed data encountered when reading sample #%d of %d"
+msgstr ""
+
+#: modules/file/iso28600.c:1184
#, c-format
msgid "Line %u does not contain mandatory label ‘%s’."
msgstr ""
@@ -4903,44 +5066,62 @@ msgstr "Archivos JEOL data (.tif)"
msgid "The type of data is unknown. Please report it to the developers."
msgstr ""
-#: modules/file/jpkscan.c:229
+#: modules/file/jpkscan.c:292
msgid "Imports JPK image scans."
msgstr "Importa JPK imágenes."
-#: modules/file/jpkscan.c:242
+#: modules/file/jpkscan.c:305
#, fuzzy
msgid "JPK image scans (.jpk, .jpk-qi-image)"
msgstr "Imágenes JPK (.jpk)"
-#: modules/file/jpkscan.c:249
+#: modules/file/jpkscan.c:312
msgid "JPK force curves (.jpk-force, .jpk-force-map, .jpk-qi-data)"
msgstr ""
-#: modules/file/jpkscan.c:315
+#: modules/file/jpkscan.c:378
msgid "File does not contain grid dimensions."
msgstr ""
-#: modules/file/jpkscan.c:660 modules/file/nanoobserver.c:193
+#: modules/file/jpkscan.c:736 modules/file/nanoobserver.c:360
#: modules/file/nanoscantech.c:205 modules/file/opengps.c:209
#: modules/file/sensofarx.c:183 modules/file/spmxfile.c:166
msgid "Minizip cannot open the file as a ZIP file."
msgstr ""
-#: modules/file/jpkscan.c:739
+#: modules/file/jpkscan.c:758 modules/file/jpkscan.c:2717
+#, c-format
+msgid "Scanning file (%u curves)..."
+msgstr ""
+
+#: modules/file/jpkscan.c:798 modules/file/nmmxyz.c:299
+msgid "Reading files..."
+msgstr ""
+
+#: modules/file/jpkscan.c:816
+msgid "Creating volume data..."
+msgstr ""
+
+#: modules/file/jpkscan.c:968
msgid "Non-uniform point and/or segment numbering is not supported."
msgstr ""
-#: modules/file/jpkscan.c:748
+#: modules/file/jpkscan.c:977
msgid "Non-uniform channel lists are not supported."
msgstr ""
-#: modules/file/jpkscan.c:756
+#: modules/file/jpkscan.c:985
#, c-format
msgid "Data file %s was found instead of expected %s."
msgstr ""
-#: modules/file/jpkscan.c:1497
-msgid "Cannot find any height channel."
+#: modules/file/jpkscan.c:1900
+#, c-format
+msgid "Header properties file for index %u is missing."
+msgstr ""
+
+#: modules/file/jpkscan.c:2519
+msgid "Cannot find any height channel."
msgstr ""
#: modules/file/jspmfile.c:188
@@ -5092,19 +5273,19 @@ msgstr "Archivos MetroPro (.dat)"
msgid "File header is larger than file."
msgstr ""
-#: modules/file/microprof.c:117
+#: modules/file/microprof.c:125
msgid "Imports MicroProf FRT profilometer data files."
msgstr "Importa MicroProf FRT profilometer archivos de datos."
-#: modules/file/microprof.c:130
+#: modules/file/microprof.c:138
msgid "MicroProf FRT files (.frt)"
msgstr "Archivos MicroProf FRT (.frt)"
-#: modules/file/microprof.c:136
+#: modules/file/microprof.c:144
msgid "MicroProf FRT text files (.txt)"
msgstr "Archivos MicroProf FRT texto (.txt)"
-#: modules/file/microprof.c:432
+#: modules/file/microprof.c:519
msgid "File contains fewer than XSize*YSize data points."
msgstr ""
@@ -5192,8 +5373,8 @@ msgstr ""
msgid "Spectra data starts past the end of file."
msgstr ""
-#: modules/file/nanoeducator.c:648 modules/file/opdfile.c:276
-#: modules/file/renishaw.c:1325 modules/file/sensofar.c:256
+#: modules/file/nanoeducator.c:648 modules/file/opdfile.c:287
+#: modules/file/renishaw.c:1334 modules/file/sensofar.c:256
#: modules/file/witec-asc.c:161
msgid "File header is truncated"
msgstr ""
@@ -5203,8 +5384,8 @@ msgstr ""
msgid "Parameter header is truncated"
msgstr ""
-#: modules/file/nanoeducator.c:932 modules/process/curvature.c:454
-#: modules/tools/profile.c:1107
+#: modules/file/nanoeducator.c:932 modules/process/curvature.c:456
+#: modules/tools/profile.c:1090
#, c-format
msgid "Profile %d"
msgstr ""
@@ -5284,23 +5465,29 @@ msgstr ""
msgid "Missing data start marker \\x1a\\x04."
msgstr ""
-#: modules/file/nanoobserver.c:113
-msgid "Reads NanoObserver .nao files."
+#: modules/file/nanoobserver.c:201
+#, fuzzy
+msgid "Reads Nano-Solution/NanoObserver .nao files."
msgstr "Importa NanoObserver .nao archivos."
-#: modules/file/nanoobserver.c:126
-msgid "NanoObserver data (.nao)"
+#: modules/file/nanoobserver.c:214
+#, fuzzy
+msgid "Nano-Solution/NanoObserver data (.nao)"
msgstr "Datos NanoObserver (.nao)"
-#: modules/file/nanoscan.c:188
+#: modules/file/nanoobserver.c:410 modules/file/renishaw.c:1420
+msgid "Data block is truncated"
+msgstr ""
+
+#: modules/file/nanoscan.c:191
msgid "Imports NanoScan XML files."
msgstr "Importa NanoScan XML archivos."
-#: modules/file/nanoscan.c:201
+#: modules/file/nanoscan.c:204
msgid "NanoScan XML files (.xml)"
msgstr "Archivos NanoScan XML (.xml)"
-#: modules/file/nanoscan.c:910
+#: modules/file/nanoscan.c:937
msgid "Wrong size of Base64 encoded data."
msgstr ""
@@ -5320,22 +5507,22 @@ msgstr "Importa Digital Instruments Nanoscope II archivos de datos."
msgid "Nanoscope II files"
msgstr "Nanoscope II archivos"
-#: modules/file/nanoscope.c:207
+#: modules/file/nanoscope.c:212
msgid ""
"Imports Veeco (Digital Instruments) Nanoscope data files, version 3 or newer."
msgstr ""
"Importa Veeco (Digital Instruments) Nanoscope archivos de datos, versión 3 o "
"más nueva."
-#: modules/file/nanoscope.c:221
+#: modules/file/nanoscope.c:226
msgid "Nanoscope III files"
msgstr "Nanoscope III archivos"
-#: modules/file/nanoscope.c:288
+#: modules/file/nanoscope.c:295
msgid "File is not a Nanoscope file, or it is a unknown subtype."
msgstr ""
-#: modules/file/nanoscope.c:295
+#: modules/file/nanoscope.c:302
msgid ""
"File has been damaged by change of line endings, resulting in corruption of "
"the binary part of the file.\n"
@@ -5346,16 +5533,16 @@ msgid ""
"transfer that attempts to store text platform-independently."
msgstr ""
-#: modules/file/nanoscope.c:653 modules/file/nanoscope.c:669
+#: modules/file/nanoscope.c:660 modules/file/nanoscope.c:676
msgid "Cannot parse `Scan size' field."
msgstr ""
-#: modules/file/nanoscope.c:1539 modules/file/nrrdfile.c:1086
+#: modules/file/nanoscope.c:1546 modules/file/nrrdfile.c:1086
#, c-format
msgid "Garbage after data sample #%u."
msgstr ""
-#: modules/file/nanoscope.c:1595
+#: modules/file/nanoscope.c:1602
msgid "Truncated header line."
msgstr ""
@@ -5434,11 +5621,8 @@ msgstr "Archivos Nanonis SXM (.sxm)"
msgid "Nano Measuring Machine data import must be run as interactive."
msgstr "La importación de gráfico ASCII debe ser ejecutado como interactivo."
-#: modules/file/nmmxyz.c:299
-msgid "Reading files..."
-msgstr ""
-
#: modules/file/nmmxyz.c:306 modules/process/lat_synth.c:1224
+#: modules/process/wave_synth.c:798
msgid "Rendering surface..."
msgstr ""
@@ -5481,20 +5665,20 @@ msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "data"
#: modules/file/nmmxyz.c:534 modules/file/rawfile.c:626
-#: modules/process/dimensions.h:445 modules/xyz/xyz_drift.c:725
-#: modules/xyz/xyz_raster.c:517
+#: modules/process/dimensions.h:427 modules/xyz/xyz_drift.c:725
+#: modules/xyz/xyz_raster.c:376
msgid "Resolution"
msgstr "Resolución"
#: modules/file/nmmxyz.c:538 modules/file/rawfile.c:631
-#: modules/process/dimensions.h:451 modules/xyz/xyz_drift.c:729
-#: modules/xyz/xyz_raster.c:521
+#: modules/process/dimensions.h:433 modules/xyz/xyz_drift.c:729
+#: modules/xyz/xyz_raster.c:382
msgid "_Horizontal size:"
msgstr ""
#: modules/file/nmmxyz.c:554 modules/file/rawfile.c:638
-#: modules/process/dimensions.h:454 modules/xyz/xyz_drift.c:744
-#: modules/xyz/xyz_raster.c:536
+#: modules/process/dimensions.h:436 modules/xyz/xyz_drift.c:744
+#: modules/xyz/xyz_raster.c:388
msgid "_Vertical size:"
msgstr ""
@@ -5579,38 +5763,38 @@ msgstr ""
msgid "Per-axis header field %s contains too few items."
msgstr ""
-#: modules/file/nt-mdt.c:843
+#: modules/file/nt-mdt.c:850
msgid "Imports NT-MDT data files."
msgstr "Importa NT-MDT archivos de datos."
-#: modules/file/nt-mdt.c:856
+#: modules/file/nt-mdt.c:863
msgid "NT-MDT files (.mdt)"
msgstr "Archivos NT-MDT (.mdt)"
-#: modules/file/nt-mdt.c:1491 modules/file/nt-mdt.c:1599
+#: modules/file/nt-mdt.c:1498 modules/file/nt-mdt.c:1606
msgid "Frame is too short for Frame Mode."
msgstr ""
-#: modules/file/nt-mdt.c:1506 modules/file/nt-mdt.c:1614
+#: modules/file/nt-mdt.c:1513 modules/file/nt-mdt.c:1621
msgid "Frame is too short for dots or data."
msgstr ""
-#: modules/file/nt-mdt.c:1869
+#: modules/file/nt-mdt.c:1879
#, c-format
msgid "End of file reached in frame header #%u."
msgstr ""
-#: modules/file/nt-mdt.c:1877
+#: modules/file/nt-mdt.c:1887
#, c-format
msgid "End of file reached in frame data #%u."
msgstr ""
-#: modules/file/nt-mdt.c:1910
+#: modules/file/nt-mdt.c:1920
#, c-format
msgid "Frame #%u is too short for scanned data header."
msgstr ""
-#: modules/file/nt-mdt.c:1927
+#: modules/file/nt-mdt.c:1937
#, c-format
msgid "Frame #%u is too short for spectroscopy data header."
msgstr ""
@@ -5725,28 +5909,28 @@ msgstr "Archivos Omicron MATRIX (param.mtrx & data.mtrx)"
msgid "Omicron MATRIX (.mtrx & .mtrx)"
msgstr "Archivos Omicron MATRIX (.mtrx & .mtrx)"
-#: modules/file/opdfile.c:188
+#: modules/file/opdfile.c:199
msgid "Imports Wyko OPD and ASC files."
msgstr "Importa Wyko OPD y ASC archivos."
-#: modules/file/opdfile.c:201
+#: modules/file/opdfile.c:212
msgid "Wyko OPD files (.opd)"
msgstr "Archivos Wyko OPD (.opd)"
-#: modules/file/opdfile.c:208
+#: modules/file/opdfile.c:219
msgid "Wyko ASCII export files (.asc)"
msgstr "Archivos Wyko ASCII (.asc)"
-#: modules/file/opdfile.c:299
+#: modules/file/opdfile.c:310
#, c-format
msgid "Item `%s' is beyond the end of the file."
msgstr ""
-#: modules/file/opdfile.c:614
+#: modules/file/opdfile.c:636
msgid "Nested directories found"
msgstr ""
-#: modules/file/opdfile.c:805
+#: modules/file/opdfile.c:842
#, c-format
msgid "Truncated data in block %s"
msgstr ""
@@ -6044,19 +6228,21 @@ msgstr ""
# based on translation from "anjuta"
#: modules/file/rawfile.c:567 modules/process/arithmetic.c:234
#: modules/process/calcoefs_view.c:320 modules/process/coerce.c:250
-#: modules/process/convolution_filter.c:236 modules/process/deposit_synth.c:637
+#: modules/process/convolution_filter.c:236 modules/process/deposit_synth.c:638
#: modules/process/drift.c:242 modules/process/edge.c:635
-#: modules/process/entropy.c:178 modules/process/fft_filter_1d.c:183
-#: modules/process/grain_edge.c:210 modules/process/grain_filter.c:313
-#: modules/process/grain_mark.c:244 modules/process/grain_wshed.c:164
-#: modules/process/mark_disconn.c:205 modules/process/mark_with.c:195
-#: modules/process/polydistort.c:205 modules/process/scars.c:295
-#: modules/process/slope_dist.c:273 modules/process/straighten_path.c:198
-#: modules/process/synth.h:509 modules/process/tip_model.c:166
+#: modules/process/entropy.c:178 modules/process/fft_filter_1d.c:184
+#: modules/process/fractal.c:225 modules/process/grain_edge.c:209
+#: modules/process/grain_filter.c:312 modules/process/grain_mark.c:243
+#: modules/process/grain_wshed.c:165 modules/process/mark_disconn.c:205
+#: modules/process/mark_with.c:196 modules/process/mfm_field.c:278
+#: modules/process/mfm_shift.c:167 modules/process/polydistort.c:205
+#: modules/process/scars.c:314 modules/process/slope_dist.c:272
+#: modules/process/stitch.c:272 modules/process/straighten_path.c:198
+#: modules/process/synth.h:538 modules/process/tip_model.c:164
#: modules/process/wpour_mark.c:273 modules/tools/linestats.c:454
-#: modules/tools/sfunctions.c:534 modules/tools/stats.c:459
-#: modules/volume/volume_extract.c:328 modules/volume/volume_linestat.c:287
-#: modules/xyz/xyz_drift.c:618 modules/xyz/xyz_raster.c:443
+#: modules/tools/sfunctions.c:531 modules/tools/stats.c:456
+#: modules/volume/volume_extract.c:321 modules/volume/volume_linestat.c:292
+#: modules/xyz/xyz_drift.c:618 modules/xyz/xyz_raster.c:457
msgid "_Update"
msgstr "_Actualizar"
@@ -6210,7 +6396,7 @@ msgid ""
"The contents of `%s' does not match format: %s."
msgstr ""
-#: modules/file/rawfile.c:1690 modules/process/neural.c:1580
+#: modules/file/rawfile.c:1690 modules/process/neural.c:1587
#, c-format
msgid "The name `%s' is invalid."
msgstr ""
@@ -6305,7 +6491,8 @@ msgstr "Archivos de datos XYZ"
msgid "Import XYZ Data"
msgstr "Importa datos XYZ"
-#: modules/file/rawxyz.c:279
+#: modules/file/rawxyz.c:279 modules/graph/graph_stats.c:305
+#: modules/graph/graph_stats.c:756 modules/graph/graph_stats.c:800
#, fuzzy
msgid "Number of points:"
msgstr "_Número de Lados:"
@@ -6335,7 +6522,7 @@ msgstr "Rango:"
msgid "_Lateral units:"
msgstr ""
-#: modules/file/rawxyz.c:386 modules/process/dimensions.h:494
+#: modules/file/rawxyz.c:386 modules/process/dimensions.h:479
msgid "_Value units:"
msgstr ""
@@ -6353,18 +6540,14 @@ msgstr "Archivos Intematix SDF data (.sdf)"
msgid "MapArea block is truncated"
msgstr ""
-#: modules/file/renishaw.c:787
+#: modules/file/renishaw.c:793
msgid "Random points order unsupported"
msgstr ""
-#: modules/file/renishaw.c:1396
+#: modules/file/renishaw.c:1405
msgid "Block header is truncated"
msgstr ""
-#: modules/file/renishaw.c:1411
-msgid "Data block is truncated"
-msgstr ""
-
#: modules/file/rhk-sm3.c:236
msgid "Imports RHK Technology SM3 data files."
msgstr "Importa RHK Technology SM3 archivos de datos."
@@ -6631,19 +6814,23 @@ msgstr ""
msgid "SPML files (.xml)"
msgstr "Archivos SPML (.xml)"
-#: modules/file/spmlab.c:131
+#: modules/file/spmlab.c:175
msgid "Imports Thermicroscopes SpmLab R3 to R7 data files."
msgstr "Importa Thermicroscopes SpmLab desde R3 a R7 archivos de datos."
-#: modules/file/spmlab.c:144
+#: modules/file/spmlab.c:188
msgid "Thermicroscopes SpmLab files"
msgstr "Archivos Thermicroscopes SpmLab"
-#: modules/file/spmlab.c:231
+#: modules/file/spmlab.c:259
#, c-format
msgid "Unknown format version %c."
msgstr ""
+#: modules/file/spmlab.c:283
+msgid "Data block is truncated."
+msgstr ""
+
#: modules/file/spmlabf.c:79
msgid "Imports SPMLab floating-point files."
msgstr ""
@@ -6842,11 +7029,11 @@ msgstr "Importa WinSTM (.stm) archivos."
msgid "WinSTM files (.stm)"
msgstr "Archivos WinSTM (.stm)"
-#: modules/file/wipfile.c:272
+#: modules/file/wipfile.c:281
msgid "Imports WItec Project data files."
msgstr "Importa WItec Project archivos de datos."
-#: modules/file/wipfile.c:285
+#: modules/file/wipfile.c:294
msgid "WItec Project files (.wip)"
msgstr "WItec Project (.wip)"
@@ -6909,25 +7096,25 @@ msgstr "Exporta datos de gráfico a archivos de texto. "
msgid "XYZ text data (.xyz)"
msgstr ""
-#: modules/file/xyzexport.c:244
+#: modules/file/xyzexport.c:247
#, fuzzy
msgid "Lateral units:"
msgstr "Material GL"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "almanah"
-#: modules/file/xyzexport.c:290
+#: modules/file/xyzexport.c:293
#, fuzzy
msgid "Export XYZ"
msgstr "_Exportar"
-#: modules/file/xyzexport.c:340 modules/process/curvature.c:704
+#: modules/file/xyzexport.c:343 modules/process/curvature.c:700
#: modules/process/entropy.c:214 modules/process/facet-level.c:207
-#: modules/process/fit-shape.c:743 modules/process/level.c:259
-#: modules/process/linematch.c:906 modules/process/neural.c:593
-#: modules/process/polylevel.c:491 modules/process/slope_dist.c:418
-#: modules/tools/filter.c:300 modules/tools/linestats.c:436
-#: modules/tools/profile.c:591 modules/tools/sfunctions.c:516
+#: modules/process/fit-shape.c:755 modules/process/level.c:259
+#: modules/process/linematch.c:869 modules/process/neural.c:597
+#: modules/process/polylevel.c:494 modules/process/slope_dist.c:411
+#: modules/tools/filter.c:301 modules/tools/linestats.c:436
+#: modules/tools/profile.c:572 modules/tools/sfunctions.c:513
#: modules/tools/stats.c:389
msgid "Masking Mode"
msgstr ""
@@ -6940,6 +7127,16 @@ msgstr "Importa Carl Zeiss SEM imágenes."
msgid "Carl Zeiss SEM scans (.tif)"
msgstr ""
+#: modules/file/zeisslsm.c:383
+#, fuzzy
+msgid "Imports Carl Zeiss CLSM images."
+msgstr "Importa Carl Zeiss SEM imágenes."
+
+#: modules/file/zeisslsm.c:396
+#, fuzzy
+msgid "Carl Zeiss CLSM images (.lsm)"
+msgstr "Importa Carl Zeiss SEM imágenes."
+
#: modules/file/zemax.c:72
msgid "Imports Zemax grid sag data files."
msgstr ""
@@ -6962,16 +7159,16 @@ msgstr ""
msgid "The first line contains too many items."
msgstr ""
-#: modules/graph/graph_align.c:57
+#: modules/graph/graph_align.c:60
#, fuzzy
msgid "Aligns graph curves."
msgstr "Nivela curvas de gráfico"
-#: modules/graph/graph_align.c:71
+#: modules/graph/graph_align.c:74
msgid "/_Align"
msgstr ""
-#: modules/graph/graph_align.c:74
+#: modules/graph/graph_align.c:77
#, fuzzy
msgid "Align curves"
msgstr "Nivela curvas de gráfico"
@@ -6988,54 +7185,56 @@ msgstr ""
msgid "Fit critical dimension"
msgstr ""
-#: modules/graph/graph_cd.c:209 modules/graph/graph_fit.c:267
+#: modules/graph/graph_cd.c:209 modules/graph/graph_fit.c:270
msgid "Fit Graph"
msgstr "Aproxima Gráfico"
-#: modules/graph/graph_cd.c:212 modules/graph/graph_fdfit.c:251
-#: modules/graph/graph_fit.c:270 modules/process/fit-shape.c:393
+#: modules/graph/graph_cd.c:212 modules/graph/graph_fdfit.c:254
+#: modules/graph/graph_fit.c:273 modules/process/fit-shape.c:394
#: modules/volume/volume_fdfit.c:299
msgid "verb|_Fit"
msgstr "_Ajustar"
-#: modules/graph/graph_cd.c:262 modules/graph/graph_cut.c:166
-#: modules/graph/graph_fdfit.c:306 modules/graph/graph_fit.c:325
-#: modules/graph/graph_peaks.c:199
+#: modules/graph/graph_cd.c:262 modules/graph/graph_cut.c:168
+#: modules/graph/graph_fdfit.c:313 modules/graph/graph_fit.c:332
+#: modules/graph/graph_peaks.c:199 modules/graph/graph_stats.c:268
msgid "_Graph curve:"
msgstr "_Curva de Gráfico:"
-#: modules/graph/graph_cd.c:276 modules/graph/graph_fdfit.c:320
-#: modules/graph/graph_fit.c:339 modules/volume/volume_fdfit.c:405
+#: modules/graph/graph_cd.c:276 modules/graph/graph_fdfit.c:327
+#: modules/graph/graph_fit.c:346 modules/volume/volume_fdfit.c:389
msgid "F_unction:"
msgstr "F_unción:"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "beast"
-#: modules/graph/graph_cd.c:305 modules/graph/graph_fdfit.c:361
-#: modules/graph/graph_fit.c:375 modules/process/curvature.c:745
-#: modules/process/fit-shape.c:792 modules/volume/volume_fdfit.c:446
+#: modules/graph/graph_cd.c:305 modules/graph/graph_fdfit.c:368
+#: modules/graph/graph_fit.c:382 modules/process/curvature.c:742
+#: modules/process/fit-shape.c:804 modules/volume/volume_fdfit.c:422
msgid "Parameter"
msgstr "Parámetro"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "advene"
-#: modules/graph/graph_cd.c:307 modules/graph/graph_fdfit.c:363
-#: modules/graph/graph_fit.c:377 modules/process/fit-shape.c:794
-#: modules/volume/volume_fdfit.c:448
+#: modules/graph/graph_cd.c:307 modules/graph/graph_fdfit.c:370
+#: modules/graph/graph_fit.c:384 modules/process/fit-shape.c:806
+#: modules/volume/volume_fdfit.c:424
msgid "Error"
msgstr "Error"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "beast"
-#: modules/graph/graph_cd.c:319 modules/graph/graph_cut.c:196
-#: modules/graph/graph_fdfit.c:415 modules/graph/graph_fit.c:433
-#: modules/volume/volume_fdfit.c:500 modules/volume/volume_linestat.c:389
+#: modules/graph/graph_cd.c:319 modules/graph/graph_cut.c:189
+#: modules/graph/graph_fdfit.c:422 modules/graph/graph_fit.c:440
+#: modules/graph/graph_stats.c:279 modules/graph/graph_stats.c:793
+#: modules/volume/volume_fdfit.c:476 modules/volume/volume_linestat.c:394
msgid "Range:"
msgstr "Rango:"
-#: modules/graph/graph_cd.c:330 modules/graph/graph_cut.c:207
-#: modules/graph/graph_fdfit.c:426 modules/graph/graph_fit.c:444
-#: modules/volume/volume_fdfit.c:511 modules/volume/volume_linestat.c:400
+#: modules/graph/graph_cd.c:330 modules/graph/graph_cut.c:200
+#: modules/graph/graph_fdfit.c:433 modules/graph/graph_fit.c:451
+#: modules/graph/graph_stats.c:290 modules/graph/graph_stats.c:796
+#: modules/volume/volume_fdfit.c:487 modules/volume/volume_linestat.c:405
msgid "range|to"
msgstr ""
@@ -7043,93 +7242,93 @@ msgstr ""
msgid "_Draw whole circle"
msgstr ""
-#: modules/graph/graph_cd.c:382 modules/graph/graph_fdfit.c:491
-#: modules/graph/graph_fit.c:531 modules/process/fit-shape.c:522
-#: modules/volume/volume_fdfit.c:573
+#: modules/graph/graph_cd.c:382 modules/graph/graph_fdfit.c:498
+#: modules/graph/graph_fit.c:538 modules/process/fit-shape.c:523
+#: modules/volume/volume_fdfit.c:549
msgid "Save Fit Report"
msgstr ""
#: modules/graph/graph_cd.c:529 modules/graph/graph_cd.c:1107
-#: modules/graph/graph_fdfit.c:709 modules/graph/graph_fit.c:763
-#: modules/volume/volume_fdfit.c:907
+#: modules/graph/graph_fdfit.c:725 modules/graph/graph_fit.c:779
+#: modules/volume/volume_fdfit.c:883
msgid "Fit"
msgstr ""
-#: modules/graph/graph_cd.c:555 modules/graph/graph_fdfit.c:749
-#: modules/graph/graph_fit.c:803 modules/volume/volume_fdfit.c:978
-#: modules/volume/volume_fdfit.c:1085
+#: modules/graph/graph_cd.c:555 modules/graph/graph_fdfit.c:765
+#: modules/graph/graph_fit.c:819 modules/volume/volume_fdfit.c:954
+#: modules/volume/volume_fdfit.c:1061
msgid "It is necessary to select more data points than free fit parameters"
msgstr ""
-#: modules/graph/graph_cd.c:710 modules/graph/graph_fdfit.c:798
-#: modules/graph/graph_fit.c:852 modules/process/entropy.c:554
-#: modules/tools/grainmeasure.c:217 modules/tools/readvalue.c:634
-#: modules/tools/readvalue.c:635 modules/tools/readvalue.c:636
-#: modules/tools/readvalue.c:637 modules/tools/roughness.c:975
-#: modules/tools/stats.c:727 modules/tools/stats.c:740
-#: modules/tools/stats.c:741 modules/volume/volume_fdfit.c:1134
-#: modules/xyz/xyz_drift.c:1099 modules/xyz/xyz_drift.c:1117
-#: modules/xyz/xyz_drift.c:1134
+#: modules/graph/graph_cd.c:710 modules/graph/graph_fdfit.c:814
+#: modules/graph/graph_fit.c:868 modules/graph/graph_stats.c:663
+#: modules/process/entropy.c:555 modules/tools/grainmeasure.c:217
+#: modules/tools/readvalue.c:634 modules/tools/readvalue.c:635
+#: modules/tools/readvalue.c:636 modules/tools/readvalue.c:637
+#: modules/tools/roughness.c:984 modules/tools/stats.c:723
+#: modules/tools/stats.c:736 modules/tools/stats.c:737
+#: modules/volume/volume_fdfit.c:1110 modules/xyz/xyz_drift.c:1099
+#: modules/xyz/xyz_drift.c:1117 modules/xyz/xyz_drift.c:1134
msgid "N.A."
msgstr ""
-#: modules/graph/graph_cd.c:993 modules/graph/graph_fdfit.c:1363
-#: modules/graph/graph_fit.c:1500 modules/process/fit-shape.c:2078
-#: modules/volume/volume_fdfit.c:1720
+#: modules/graph/graph_cd.c:993 modules/graph/graph_fdfit.c:1381
+#: modules/graph/graph_fit.c:1518 modules/process/fit-shape.c:2060
+#: modules/volume/volume_fdfit.c:1696
msgid "===== Fit Results ====="
msgstr ""
-#: modules/graph/graph_cd.c:997 modules/graph/graph_fdfit.c:1367
-#: modules/graph/graph_fit.c:1504 modules/process/fit-shape.c:2080
-#: modules/volume/volume_fdfit.c:1724
+#: modules/graph/graph_cd.c:997 modules/graph/graph_fdfit.c:1385
+#: modules/graph/graph_fit.c:1522 modules/process/fit-shape.c:2062
+#: modules/volume/volume_fdfit.c:1700
#, c-format
msgid "Data: %s\n"
msgstr ""
-#: modules/graph/graph_cd.c:1000 modules/graph/graph_fdfit.c:1370
-#: modules/graph/graph_fit.c:1507 modules/process/fit-shape.c:2082
-#: modules/volume/volume_fdfit.c:1727
+#: modules/graph/graph_cd.c:1000 modules/graph/graph_fdfit.c:1388
+#: modules/graph/graph_fit.c:1525 modules/process/fit-shape.c:2064
+#: modules/volume/volume_fdfit.c:1703
#, c-format
msgid "Number of points: %d of %d\n"
msgstr ""
-#: modules/graph/graph_cd.c:1004 modules/graph/graph_fdfit.c:1374
-#: modules/graph/graph_fit.c:1511 modules/volume/volume_fdfit.c:1731
+#: modules/graph/graph_cd.c:1004 modules/graph/graph_fdfit.c:1392
+#: modules/graph/graph_fit.c:1529 modules/volume/volume_fdfit.c:1707
#, c-format
msgid "X range: %.*f to %.*f %s\n"
msgstr ""
-#: modules/graph/graph_cd.c:1010 modules/graph/graph_fdfit.c:1380
-#: modules/graph/graph_fit.c:1517 modules/process/fit-shape.c:2084
-#: modules/volume/volume_fdfit.c:1737
+#: modules/graph/graph_cd.c:1010 modules/graph/graph_fdfit.c:1398
+#: modules/graph/graph_fit.c:1535 modules/process/fit-shape.c:2066
+#: modules/volume/volume_fdfit.c:1713
#, c-format
msgid "Fitted function: %s\n"
msgstr ""
-#: modules/graph/graph_cd.c:1013 modules/graph/graph_fdfit.c:1383
-#: modules/graph/graph_fit.c:1520 modules/process/fit-shape.c:2087
-#: modules/volume/volume_fdfit.c:1740
+#: modules/graph/graph_cd.c:1013 modules/graph/graph_fdfit.c:1401
+#: modules/graph/graph_fit.c:1538 modules/process/fit-shape.c:2069
+#: modules/volume/volume_fdfit.c:1716
msgid "Results\n"
msgstr ""
-#: modules/graph/graph_cut.c:88
+#: modules/graph/graph_cut.c:87
msgid "Cut graph"
msgstr "Corta Gráfico"
-#: modules/graph/graph_cut.c:102
+#: modules/graph/graph_cut.c:101
#, fuzzy
msgid "/_Cut..."
msgstr "/_Corta Gráfico..."
-#: modules/graph/graph_cut.c:105
+#: modules/graph/graph_cut.c:104
msgid "Extract part of graph into new one"
msgstr "Extrae parte del gráfico a uno nuevo"
-#: modules/graph/graph_cut.c:146
+#: modules/graph/graph_cut.c:145
msgid "Cut Graph"
msgstr "Corta Gráfico"
-#: modules/graph/graph_cut.c:180
+#: modules/graph/graph_cut.c:173
msgid "Cut _all curves"
msgstr ""
@@ -7234,105 +7433,105 @@ msgstr ""
msgid "Export to PNG"
msgstr "Exportar PNG"
-#: modules/graph/graph_export_vector.c:35
+#: modules/graph/graph_export_vector.c:36
#, fuzzy
msgid "Exports graphs to PostScript"
msgstr "Exporta gráfico a postscript"
-#: modules/graph/graph_export_vector.c:49
+#: modules/graph/graph_export_vector.c:50
msgid "/Export _PostScript"
msgstr "/Exportar _PostScript"
-#: modules/graph/graph_export_vector.c:52
+#: modules/graph/graph_export_vector.c:53
#, fuzzy
msgid "Export graph to PostScript"
msgstr "Exporta gráfico a postscript"
-#: modules/graph/graph_export_vector.c:65
+#: modules/graph/graph_export_vector.c:66
#, fuzzy
msgid "Export to PostScript"
msgstr "Exportar Postscript"
-#: modules/graph/graph_fdfit.c:168
+#: modules/graph/graph_fdfit.c:169
msgid "Fit force-distance data"
msgstr ""
-#: modules/graph/graph_fdfit.c:182
+#: modules/graph/graph_fdfit.c:183
msgid "/_Fit FD Curve..."
msgstr ""
-#: modules/graph/graph_fdfit.c:185
+#: modules/graph/graph_fdfit.c:186
msgid "Fit a force-distance curve"
msgstr ""
-#: modules/graph/graph_fdfit.c:248 modules/volume/volume_fdfit.c:296
+#: modules/graph/graph_fdfit.c:251 modules/volume/volume_fdfit.c:296
msgid "Fit FD Curve"
msgstr ""
-#: modules/graph/graph_fdfit.c:255 modules/graph/graph_fit.c:274
-#: modules/process/fit-shape.c:397 modules/process/measure_lattice.c:257
-#: modules/volume/volume_fdfit.c:303
+#: modules/graph/graph_fdfit.c:258 modules/graph/graph_fit.c:277
+#: modules/process/correct_affine.c:347 modules/process/fit-shape.c:398
+#: modules/process/measure_lattice.c:247 modules/volume/volume_fdfit.c:303
msgid "verb|_Estimate"
msgstr "_Estimar"
-#: modules/graph/graph_fdfit.c:257 modules/graph/graph_fit.c:276
-#: modules/volume/volume_fdfit.c:305
+#: modules/graph/graph_fdfit.c:260 modules/graph/graph_fit.c:279
+#: modules/process/psf.c:239 modules/volume/volume_fdfit.c:305
msgid "_Plot Inits"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "e2fsprogs"
-#: modules/graph/graph_fdfit.c:359 modules/graph/graph_fit.c:373
-#: modules/process/fit-shape.c:790 modules/volume/volume_fdfit.c:444
+#: modules/graph/graph_fdfit.c:366 modules/graph/graph_fit.c:380
+#: modules/process/fit-shape.c:802 modules/volume/volume_fdfit.c:420
msgid "Fix"
msgstr "Arreglar"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "binutils"
-#: modules/graph/graph_fdfit.c:365 modules/graph/graph_fit.c:379
-#: modules/volume/volume_fdfit.c:450
+#: modules/graph/graph_fdfit.c:372 modules/graph/graph_fit.c:386
+#: modules/volume/volume_fdfit.c:426
msgid "Initial"
msgstr "Inicial"
-#: modules/graph/graph_fdfit.c:376 modules/graph/graph_fit.c:394
-#: modules/volume/volume_fdfit.c:461
+#: modules/graph/graph_fdfit.c:383 modules/graph/graph_fit.c:401
+#: modules/volume/volume_fdfit.c:437
msgid "χ<sup>2</sup> result:"
msgstr ""
-#: modules/graph/graph_fdfit.c:392 modules/graph/graph_fit.c:410
-#: modules/process/fit-shape.c:469 modules/process/fit-shape.c:2134
-#: modules/volume/volume_fdfit.c:477
+#: modules/graph/graph_fdfit.c:399 modules/graph/graph_fit.c:417
+#: modules/process/fit-shape.c:470 modules/process/fit-shape.c:2116
+#: modules/volume/volume_fdfit.c:453
msgid "Correlation Matrix"
msgstr ""
-#: modules/graph/graph_fdfit.c:447 modules/graph/graph_fit.c:485
-#: modules/process/wpour_mark.c:410 modules/volume/volume_fdfit.c:532
+#: modules/graph/graph_fdfit.c:454 modules/graph/graph_fit.c:492
+#: modules/process/wpour_mark.c:410 modules/volume/volume_fdfit.c:508
msgid "Instant:"
msgstr ""
-#: modules/graph/graph_fdfit.c:450 modules/graph/graph_fit.c:488
+#: modules/graph/graph_fdfit.c:457 modules/graph/graph_fit.c:495
#, fuzzy
msgid "esti_mate"
msgstr "e_stimación"
-#: modules/graph/graph_fdfit.c:457 modules/graph/graph_fit.c:495
-#: modules/volume/volume_fdfit.c:542
+#: modules/graph/graph_fdfit.c:464 modules/graph/graph_fit.c:502
+#: modules/volume/volume_fdfit.c:518
msgid "p_lot"
msgstr ""
-#: modules/graph/graph_fdfit.c:708 modules/graph/graph_fit.c:762
-#: modules/volume/volume_fdfit.c:906
+#: modules/graph/graph_fdfit.c:724 modules/graph/graph_fit.c:778
+#: modules/volume/volume_fdfit.c:882
msgid "Estimate"
msgstr "Estimar"
-#: modules/graph/graph_fdfit.c:1410 modules/graph/graph_fit.c:1547
-#: modules/volume/volume_fdfit.c:1768
+#: modules/graph/graph_fdfit.c:1428 modules/graph/graph_fit.c:1565
+#: modules/volume/volume_fdfit.c:1744
#, c-format
msgid "Residual sum: %g\n"
msgstr ""
-#: modules/graph/graph_fdfit.c:1413 modules/graph/graph_fit.c:1550
-#: modules/volume/volume_fdfit.c:1771
+#: modules/graph/graph_fdfit.c:1431 modules/graph/graph_fit.c:1568
+#: modules/volume/volume_fdfit.c:1747
msgid "Correlation matrix\n"
msgstr ""
@@ -7348,27 +7547,27 @@ msgstr "/_Filtrar"
msgid "Remove noise from graph curves"
msgstr ""
-#: modules/graph/graph_fit.c:181
+#: modules/graph/graph_fit.c:182
msgid "Fit graph with function"
msgstr "Encaja gráfico con función"
-#: modules/graph/graph_fit.c:195
+#: modules/graph/graph_fit.c:196
msgid "/_Fit Function..."
msgstr ""
-#: modules/graph/graph_fit.c:198
+#: modules/graph/graph_fit.c:199
msgid "Fit a function on graph data"
msgstr "Encaja una función en los datos de la gráfica"
-#: modules/graph/graph_fit.c:386
+#: modules/graph/graph_fit.c:393
msgid "Copy all fitted values to estimates"
msgstr ""
-#: modules/graph/graph_fit.c:460
+#: modules/graph/graph_fit.c:467
msgid "Plot full range"
msgstr ""
-#: modules/graph/graph_fit.c:470
+#: modules/graph/graph_fit.c:477
msgid "Create a difference graph"
msgstr ""
@@ -7460,60 +7659,167 @@ msgstr ""
msgid "Find graph curve peaks"
msgstr "Nivela curvas de gráfico"
-#: modules/graph/graph_peaks.c:157
+#: modules/graph/graph_peaks.c:155
msgid "Prominence"
msgstr ""
-#: modules/graph/graph_peaks.c:161
+#: modules/graph/graph_peaks.c:159
msgid "Zero"
msgstr ""
-#: modules/graph/graph_peaks.c:162
+#: modules/graph/graph_peaks.c:160
msgid "Bilateral minimum"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "amule"
-#: modules/graph/graph_peaks.c:178
+#: modules/graph/graph_peaks.c:176
#, fuzzy
msgid "Graph Peaks"
msgstr "Gráficos"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "abiword"
-#: modules/graph/graph_peaks.c:212
+#: modules/graph/graph_peaks.c:209
#, fuzzy
msgid "_Background type:"
msgstr "Fondo"
-#: modules/graph/graph_peaks.c:227
+#: modules/graph/graph_peaks.c:219
msgid "Order peaks _by:"
msgstr ""
-#: modules/graph/graph_peaks.c:242
+#: modules/graph/graph_peaks.c:225
#, fuzzy
msgid "Number of _peaks:"
msgstr "_Número de Lados:"
-#: modules/graph/graph_peaks.c:263 modules/process/curvature.c:773
-#: modules/process/grain_stat.c:360 modules/process/measure_lattice.c:396
-#: modules/process/polylevel.c:607 modules/tools/distance.c:259
-#: modules/tools/roughness.c:818 modules/tools/stats.c:450
+#: modules/graph/graph_peaks.c:245 modules/graph/graph_stats.c:367
+#: modules/process/curvature.c:770 modules/process/grain_stat.c:360
+#: modules/process/measure_lattice.c:390 modules/process/polylevel.c:610
+#: modules/tools/distance.c:259 modules/tools/roughness.c:819
+#: modules/tools/stats.c:447
msgid "Save table to a file"
msgstr "Guardar tabla a un archivo"
-#: modules/graph/graph_peaks.c:267 modules/process/curvature.c:778
-#: modules/process/grain_stat.c:365 modules/process/measure_lattice.c:400
-#: modules/process/polylevel.c:617 modules/tools/distance.c:264
-#: modules/tools/roughness.c:823 modules/tools/stats.c:455
+#: modules/graph/graph_peaks.c:249 modules/graph/graph_stats.c:371
+#: modules/process/curvature.c:775 modules/process/grain_stat.c:365
+#: modules/process/measure_lattice.c:394 modules/process/polylevel.c:620
+#: modules/tools/distance.c:264 modules/tools/roughness.c:824
+#: modules/tools/stats.c:452
msgid "Copy table to clipboard"
msgstr ""
-#: modules/graph/graph_peaks.c:654
+#: modules/graph/graph_peaks.c:618
#, fuzzy
msgid "Save Peak Parameters"
msgstr "Guardar Parámetros de Rugosidad "
+#: modules/graph/graph_stats.c:148 modules/graph/graph_stats.c:161
+#: modules/tools/stats.c:205
+msgid "Average value:"
+msgstr ""
+
+# Translation for this string generated by http://littlesvr.ca/ostd/
+# based on translation from "gimp"
+#: modules/graph/graph_stats.c:149 modules/tools/stats.c:206
+msgid "Median:"
+msgstr "Mediana:"
+
+#: modules/graph/graph_stats.c:150
+#, fuzzy
+msgid "Ra:"
+msgstr "Ra"
+
+#: modules/graph/graph_stats.c:151
+#, fuzzy
+msgid "Rms (Rq):"
+msgstr "Rms (Sq):"
+
+#: modules/graph/graph_stats.c:152 modules/tools/stats.c:210
+msgid "Skew:"
+msgstr "Asimetría:"
+
+#: modules/graph/graph_stats.c:153 modules/tools/stats.c:211
+msgid "Kurtosis:"
+msgstr "Curtosis:"
+
+#: modules/graph/graph_stats.c:158
+#, fuzzy
+msgid "Projected length:"
+msgstr "Área proyectada"
+
+#: modules/graph/graph_stats.c:159
+msgid "Developed length:"
+msgstr ""
+
+# Translation for this string generated by http://littlesvr.ca/ostd/
+# based on translation from "lyx"
+#: modules/graph/graph_stats.c:160 modules/tools/stats.c:214
+msgid "Variation:"
+msgstr "Variación:"
+
+#: modules/graph/graph_stats.c:162
+#, fuzzy
+msgid "Area under curve:"
+msgstr "_Curva de Gráfico:"
+
+# Translation for this string generated by http://littlesvr.ca/ostd/
+# based on translation from "goffice"
+#: modules/graph/graph_stats.c:163
+#, fuzzy
+msgid "Positive area:"
+msgstr "Positivo"
+
+# Translation for this string generated by http://littlesvr.ca/ostd/
+# based on translation from "compiz-fusion-plugins-extra"
+#: modules/graph/graph_stats.c:164
+#, fuzzy
+msgid "Negative area:"
+msgstr "Negativo"
+
+#: modules/graph/graph_stats.c:165
+msgid "Root mean square:"
+msgstr ""
+
+#: modules/graph/graph_stats.c:171
+msgid "Calculates simple graph curve statistics."
+msgstr ""
+
+#: modules/graph/graph_stats.c:185
+#, fuzzy
+msgid "/_Statistics..."
+msgstr "_Guardar estadísticas"
+
+#: modules/graph/graph_stats.c:188
+#, fuzzy
+msgid "Calculate graph curve statistics"
+msgstr "Guardar estadísticas de grano"
+
+#: modules/graph/graph_stats.c:241
+#, fuzzy
+msgid "Graph Statistics"
+msgstr "Guardar estadísticas de grano"
+
+# Translation for this string generated by http://littlesvr.ca/ostd/
+# based on translation from "audacity"
+#: modules/graph/graph_stats.c:320 modules/graph/graph_stats.c:807
+#, fuzzy
+msgid "Simple Parameters"
+msgstr "Parámetros"
+
+# Translation for this string generated by http://littlesvr.ca/ostd/
+# based on translation from "audacity"
+#: modules/graph/graph_stats.c:342 modules/graph/graph_stats.c:826
+#, fuzzy
+msgid "Integrals"
+msgstr "Interpolación:"
+
+#: modules/graph/graph_stats.c:686
+#, fuzzy
+msgid "Save Curve Statistics"
+msgstr "Guardar estadísticas de grano"
+
#: modules/layer/axis.c:143
msgid "Layer allowing selection of horizontal or vertical lines."
msgstr ""
@@ -7646,25 +7952,25 @@ msgstr ""
msgid "Angle Distribution"
msgstr ""
-#: modules/process/angle_dist.c:188 modules/process/slope_dist.c:373
+#: modules/process/angle_dist.c:188 modules/process/slope_dist.c:365
msgid "Output _size:"
msgstr ""
-#: modules/process/angle_dist.c:193 modules/process/grain_wshed.c:206
+#: modules/process/angle_dist.c:193 modules/process/grain_wshed.c:207
msgid "_Number of steps:"
msgstr ""
-#: modules/process/angle_dist.c:198 modules/process/slope_dist.c:380
+#: modules/process/angle_dist.c:198 modules/process/slope_dist.c:372
msgid "_Logarithmic value scale"
msgstr ""
#: modules/process/angle_dist.c:204 modules/process/entropy.c:231
-#: modules/process/slope_dist.c:390
+#: modules/process/slope_dist.c:382
msgid "Use local plane _fitting"
msgstr ""
#: modules/process/angle_dist.c:213 modules/process/entropy.c:242
-#: modules/process/slope_dist.c:401
+#: modules/process/slope_dist.c:393
msgid "_Plane size:"
msgstr ""
@@ -7682,7 +7988,8 @@ msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "goffice"
-#: modules/process/arithmetic.c:202 modules/process/superresolution.c:349
+#: modules/process/arithmetic.c:202 modules/process/stitch.c:234
+#: modules/process/superresolution.c:348
msgid "Calculated"
msgstr "Calculado"
@@ -7702,7 +8009,7 @@ msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "freeciv"
-#: modules/process/arithmetic.c:300 modules/process/dimensions.h:483
+#: modules/process/arithmetic.c:300 modules/process/dimensions.h:465
msgid "Units"
msgstr "Unidades"
@@ -7723,15 +8030,15 @@ msgstr ""
msgid "Expression contains unknown identifiers"
msgstr ""
-#: modules/process/arithmetic.c:569 modules/process/superresolution.c:300
+#: modules/process/arithmetic.c:569 modules/process/superresolution.c:299
msgid "Pixel dimensions differ"
msgstr ""
-#: modules/process/arithmetic.c:571 modules/process/superresolution.c:302
+#: modules/process/arithmetic.c:571 modules/process/superresolution.c:301
msgid "Lateral dimensions are different physical quantities"
msgstr ""
-#: modules/process/arithmetic.c:574 modules/process/superresolution.c:305
+#: modules/process/arithmetic.c:574 modules/process/superresolution.c:304
msgid "Physical dimensions differ"
msgstr ""
@@ -7834,7 +8141,7 @@ msgid "Generates surfaces by ballistic deposition."
msgstr ""
#: modules/process/bdep_synth.c:164
-msgid "/S_ynthetic/_Ballistic..."
+msgid "/S_ynthetic/_Deposition/_Ballistic..."
msgstr ""
#: modules/process/bdep_synth.c:168
@@ -7845,20 +8152,23 @@ msgstr ""
# based on translation from "avahi"
#: modules/process/bdep_synth.c:239 modules/process/bdep_synth.c:596
#: modules/process/calcoefs_simple.c:636 modules/process/col_synth.c:282
-#: modules/process/col_synth.c:733 modules/process/crosscor.c:819
-#: modules/process/crosscor.c:882 modules/process/deposit_synth.c:268
-#: modules/process/deposit_synth.c:859 modules/process/diff_synth.c:304
-#: modules/process/diff_synth.c:705 modules/process/domain_synth.c:255
-#: modules/process/domain_synth.c:745 modules/process/grain_wshed.c:429
+#: modules/process/col_synth.c:734 modules/process/crosscor.c:792
+#: modules/process/crosscor.c:855 modules/process/deposit_synth.c:268
+#: modules/process/deposit_synth.c:858 modules/process/diff_synth.c:304
+#: modules/process/diff_synth.c:704 modules/process/domain_synth.c:255
+#: modules/process/domain_synth.c:745 modules/process/fibre_synth.c:357
+#: modules/process/fibre_synth.c:872 modules/process/grain_wshed.c:433
#: modules/process/lat_synth.c:491 modules/process/mark_disconn.c:148
-#: modules/process/mark_disconn.c:373 modules/process/maskcor.c:330
-#: modules/process/mcrop.c:315 modules/process/merge.c:1072
-#: modules/process/nanoindent_adjust.c:323 modules/process/neural.c:1272
-#: modules/process/pid.c:338 modules/process/superresolution.c:416
-#: modules/process/superresolution.c:505 modules/process/tip_blind.c:781
-#: modules/process/tipops.c:320 modules/process/xydenoise.c:213
-#: modules/volume/volume_kmeans.c:403 modules/volume/volume_kmedians.c:365
-#: modules/xyz/xyz_raster.c:1028 modules/xyz/xyz_raster.c:1044
+#: modules/process/mark_disconn.c:361 modules/process/maskcor.c:334
+#: modules/process/mcrop.c:314 modules/process/merge.c:1072
+#: modules/process/nanoindent_adjust.c:324 modules/process/neural.c:1279
+#: modules/process/pid.c:339 modules/process/sphere-revolve.c:269
+#: modules/process/superresolution.c:415 modules/process/superresolution.c:504
+#: modules/process/tip_blind.c:778 modules/process/tipops.c:320
+#: modules/process/wave_synth.c:305 modules/process/wave_synth.c:747
+#: modules/process/xydenoise.c:214 modules/volume/volume_kmeans.c:397
+#: modules/volume/volume_kmedians.c:363 modules/xyz/xyz_raster.c:997
+#: modules/xyz/xyz_raster.c:1013
msgid "Initializing..."
msgstr "Inicializando…"
@@ -7869,10 +8179,11 @@ msgstr "Inicializando…"
#: modules/process/deposit_synth.c:531 modules/process/deposit_synth.c:544
#: modules/process/diff_synth.c:342 modules/process/domain_synth.c:319
#: modules/process/domain_synth.c:327 modules/process/fbm_synth.c:278
-#: modules/process/fft_synth.c:314 modules/process/lat_synth.c:529
-#: modules/process/lno_synth.c:407 modules/process/noise_synth.c:311
-#: modules/process/obj_synth.c:407 modules/process/pat_synth.c:357
-#: modules/process/wave_synth.c:323
+#: modules/process/fft_synth.c:314 modules/process/fibre_synth.c:394
+#: modules/process/lat_synth.c:529 modules/process/lno_synth.c:405
+#: modules/process/noise_synth.c:309 modules/process/obj_synth.c:404
+#: modules/process/pat_synth.c:357 modules/process/phase_synth.c:518
+#: modules/process/wave_synth.c:342
msgid "Generated"
msgstr "Generado el"
@@ -7894,54 +8205,60 @@ msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "banshee-community-extensions"
#: modules/process/bdep_synth.c:407 modules/process/col_synth.c:458
-#: modules/process/deposit_synth.c:412 modules/process/diff_synth.c:477
+#: modules/process/deposit_synth.c:413 modules/process/diff_synth.c:477
#: modules/process/domain_synth.c:430 modules/process/fbm_synth.c:360
-#: modules/process/fft_synth.c:398 modules/process/lat_synth.c:626
-#: modules/process/lno_synth.c:490 modules/process/noise_synth.c:394
-#: modules/process/obj_synth.c:498 modules/process/pat_synth.c:442
-#: modules/process/wave_synth.c:407
+#: modules/process/fft_synth.c:398 modules/process/fibre_synth.c:479
+#: modules/process/lat_synth.c:626 modules/process/lno_synth.c:488
+#: modules/process/mfm_current.c:383 modules/process/mfm_parallel.c:384
+#: modules/process/noise_synth.c:392 modules/process/obj_synth.c:495
+#: modules/process/pat_synth.c:442 modules/process/phase_synth.c:263
+#: modules/process/wave_synth.c:426
msgid "Dimensions"
msgstr "Dimensiones"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "audacity"
#: modules/process/bdep_synth.c:416 modules/process/col_synth.c:467
-#: modules/process/deposit_synth.c:422 modules/process/diff_synth.c:486
+#: modules/process/deposit_synth.c:425 modules/process/diff_synth.c:486
#: modules/process/domain_synth.c:438 modules/process/fbm_synth.c:371
-#: modules/process/fft_synth.c:409 modules/process/lno_synth.c:501
-#: modules/process/noise_synth.c:405 modules/process/obj_synth.c:509
-#: modules/process/pat_synth.c:454 modules/process/wave_synth.c:418
+#: modules/process/fft_synth.c:409 modules/process/fibre_synth.c:490
+#: modules/process/lno_synth.c:499 modules/process/mfm_current.c:412
+#: modules/process/mfm_parallel.c:411 modules/process/noise_synth.c:403
+#: modules/process/obj_synth.c:506 modules/process/pat_synth.c:454
+#: modules/process/phase_synth.c:274 modules/process/wave_synth.c:437
msgid "Generator"
msgstr "Generador"
#: modules/process/bdep_synth.c:422 modules/process/col_synth.c:473
-#: modules/process/diff_synth.c:492 modules/process/lno_synth.c:1041
-#: modules/process/obj_synth.c:520
+#: modules/process/deposit_synth.c:455 modules/process/diff_synth.c:492
+#: modules/process/fibre_synth.c:502 modules/process/lno_synth.c:1041
+#: modules/process/obj_synth.c:518
msgid "Co_verage:"
msgstr ""
#: modules/process/bdep_synth.c:434 modules/process/diff_synth.c:512
-#: modules/process/domain_synth.c:514 modules/process/fbm_synth.c:412
-#: modules/process/fft_synth.c:418 modules/process/lat_synth.c:758
-#: modules/process/lno_synth.c:537 modules/process/noise_synth.c:437
-#: modules/process/obj_synth.c:579 modules/process/wave_synth.c:453
-msgid "_Like Current Channel"
+#: modules/process/domain_synth.c:514 modules/process/fbm_synth.c:411
+#: modules/process/fft_synth.c:418 modules/process/fibre_synth.c:544
+#: modules/process/lat_synth.c:758 modules/process/lno_synth.c:535
+#: modules/process/noise_synth.c:435 modules/process/obj_synth.c:577
+#: modules/process/phase_synth.c:302 modules/process/wave_synth.c:472
+msgid "_Like Current Image"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "awn-extras-applets"
-#: modules/process/bdep_synth.c:453 modules/process/col_synth.c:541
-#: modules/process/diff_synth.c:562
+#: modules/process/bdep_synth.c:453 modules/process/col_synth.c:542
+#: modules/process/diff_synth.c:561
msgid "Evolution"
msgstr "Evolution"
-#: modules/process/bdep_synth.c:456 modules/process/col_synth.c:544
-#: modules/process/diff_synth.c:565
+#: modules/process/bdep_synth.c:456 modules/process/col_synth.c:545
+#: modules/process/diff_synth.c:564
msgid "Plot graphs:"
msgstr ""
-#: modules/process/bdep_synth.c:654 modules/process/col_synth.c:840
-#: modules/process/diff_synth.c:782
+#: modules/process/bdep_synth.c:654 modules/process/col_synth.c:841
+#: modules/process/diff_synth.c:781
msgid "Depositing particles..."
msgstr ""
@@ -7976,8 +8293,8 @@ msgstr ""
msgid "Calibration name:"
msgstr ""
-#: modules/process/calcoefs_load.c:254 modules/volume/volume_extract.c:433
-#: modules/volume/volume_extract.c:514
+#: modules/process/calcoefs_load.c:254 modules/volume/volume_extract.c:421
+#: modules/volume/volume_extract.c:501
msgid "No data loaded"
msgstr ""
@@ -8007,7 +8324,7 @@ msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "drgeo"
-#: modules/process/calcoefs_load.c:364 modules/volume/volume_extract.c:1073
+#: modules/process/calcoefs_load.c:364 modules/volume/volume_extract.c:1059
#, c-format
msgid "Error loading file '%s'"
msgstr "Error al cargar el archivo «%s»"
@@ -8101,7 +8418,7 @@ msgstr ""
msgid "Simple Error Map"
msgstr ""
-#: modules/process/calcoefs_simple.c:343 modules/process/calcoefs_stage.c:146
+#: modules/process/calcoefs_simple.c:343 modules/process/calcoefs_stage.c:142
#: modules/process/superresolution.c:156
msgid "Operands:"
msgstr ""
@@ -8119,16 +8436,16 @@ msgstr "Detalle"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "gimp"
#: modules/process/calcoefs_simple.c:371 modules/process/calcoefs_view.c:491
-#: modules/process/calibrate.c:496 modules/process/crosscor.c:289
-#: modules/volume/volume_calibrate.c:478
+#: modules/process/calibrate.c:481 modules/process/crosscor.c:276
+#: modules/volume/volume_calibrate.c:460
msgid "_X offset:"
msgstr "Desplazamiento _X:"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "gimp"
#: modules/process/calcoefs_simple.c:398 modules/process/calcoefs_view.c:517
-#: modules/process/calibrate.c:509 modules/process/crosscor.c:300
-#: modules/volume/volume_calibrate.c:491
+#: modules/process/calibrate.c:488 modules/process/crosscor.c:284
+#: modules/volume/volume_calibrate.c:467
msgid "_Y offset:"
msgstr "Desplazamiento _Y:"
@@ -8141,7 +8458,7 @@ msgid "Y p_eriod:"
msgstr ""
#: modules/process/calcoefs_simple.c:438 modules/process/calcoefs_view.c:529
-#: modules/volume/volume_calibrate.c:505
+#: modules/volume/volume_calibrate.c:474
msgid "_Z offset:"
msgstr ""
@@ -8176,26 +8493,26 @@ msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "gnumeric"
-#: modules/process/calcoefs_simple.c:638 modules/process/crosscor.c:862
-#: modules/process/maskcor.c:332 modules/process/mcrop.c:317
+#: modules/process/calcoefs_simple.c:638 modules/process/crosscor.c:835
+#: modules/process/maskcor.c:336 modules/process/mcrop.c:316
#: modules/process/merge.c:1074
#, fuzzy
msgid "Correlating..."
msgstr "Correlación"
-#: modules/process/calcoefs_stage.c:76
+#: modules/process/calcoefs_stage.c:72
msgid "Digital AFM data recalibration"
msgstr ""
-#: modules/process/calcoefs_stage.c:90
+#: modules/process/calcoefs_stage.c:86
msgid "/Cali_bration/_3D Calibration/_Get From Stage map..."
msgstr ""
-#: modules/process/calcoefs_stage.c:94
+#: modules/process/calcoefs_stage.c:90
msgid "Stage error mapping"
msgstr ""
-#: modules/process/calcoefs_stage.c:131
+#: modules/process/calcoefs_stage.c:127
msgid "Stage Error Map"
msgstr ""
@@ -8260,14 +8577,16 @@ msgstr "Posición X"
msgid "Crop to actual data"
msgstr ""
-#: modules/process/calcoefs_view.c:567 modules/process/coerce.c:369
-#: modules/process/deposit_synth.c:641 modules/process/edge.c:705
-#: modules/process/fft_filter_1d.c:299 modules/process/grain_edge.c:290
-#: modules/process/grain_filter.c:347 modules/process/grain_mark.c:372
-#: modules/process/mark_with.c:318 modules/process/polydistort.c:316
-#: modules/process/scars.c:386 modules/process/slope_dist.c:407
-#: modules/process/synth.h:513 modules/volume/volume_extract.c:424
-#: modules/volume/volume_extract.c:505 modules/volume/volume_linestat.c:422
+#: modules/process/calcoefs_view.c:567 modules/process/coerce.c:368
+#: modules/process/deposit_synth.c:642 modules/process/edge.c:705
+#: modules/process/fft_filter_1d.c:301 modules/process/grain_edge.c:277
+#: modules/process/grain_filter.c:346 modules/process/grain_mark.c:357
+#: modules/process/mark_with.c:322 modules/process/mfm_field.c:420
+#: modules/process/mfm_shift.c:216 modules/process/polydistort.c:319
+#: modules/process/psf.c:309 modules/process/scars.c:421
+#: modules/process/slope_dist.c:400 modules/process/synth.h:542
+#: modules/volume/volume_extract.c:411 modules/volume/volume_extract.c:491
+#: modules/volume/volume_linestat.c:427
msgid "I_nstant updates"
msgstr ""
@@ -8308,27 +8627,27 @@ msgstr ""
msgid "Building mesh..."
msgstr ""
-#: modules/process/calcoefs_view.c:1120 modules/tools/profile.c:1818
+#: modules/process/calcoefs_view.c:1120 modules/tools/profile.c:1867
msgid "X correction"
msgstr ""
-#: modules/process/calcoefs_view.c:1121 modules/tools/profile.c:1819
+#: modules/process/calcoefs_view.c:1121 modules/tools/profile.c:1868
msgid "Y correction"
msgstr ""
-#: modules/process/calcoefs_view.c:1122 modules/tools/profile.c:1820
+#: modules/process/calcoefs_view.c:1122 modules/tools/profile.c:1869
msgid "Z correction"
msgstr ""
-#: modules/process/calcoefs_view.c:1123 modules/tools/profile.c:1821
+#: modules/process/calcoefs_view.c:1123 modules/tools/profile.c:1870
msgid "X uncertainty"
msgstr ""
-#: modules/process/calcoefs_view.c:1124 modules/tools/profile.c:1822
+#: modules/process/calcoefs_view.c:1124 modules/tools/profile.c:1871
msgid "Y uncertainty"
msgstr ""
-#: modules/process/calcoefs_view.c:1125 modules/tools/profile.c:1823
+#: modules/process/calcoefs_view.c:1125 modules/tools/profile.c:1872
msgid "Z uncertainty"
msgstr ""
@@ -8356,78 +8675,79 @@ msgstr ""
msgid "Delaunay"
msgstr "Delaunay"
-#: modules/process/calibrate.c:180
+#: modules/process/calibrate.c:172
msgid "Recalibrates scan lateral dimensions or value range."
msgstr ""
-#: modules/process/calibrate.c:194
+#: modules/process/calibrate.c:186
msgid "/_Basic Operations/_Dimensions and Units..."
msgstr ""
-#: modules/process/calibrate.c:198 modules/volume/volume_calibrate.c:193
+#: modules/process/calibrate.c:190 modules/volume/volume_calibrate.c:193
msgid "Change physical dimensions, units or value scale"
msgstr ""
-#: modules/process/calibrate.c:357 modules/volume/volume_calibrate.c:355
+#: modules/process/calibrate.c:349 modules/volume/volume_calibrate.c:355
msgid "Recalibrated Data"
msgstr ""
-#: modules/process/calibrate.c:390
+#: modules/process/calibrate.c:382
msgid "Dimensions and Units"
msgstr ""
-#: modules/process/calibrate.c:411 modules/volume/volume_calibrate.c:389
+#: modules/process/calibrate.c:405 modules/volume/volume_calibrate.c:391
msgid "New Real Dimensions"
msgstr "Nuevas Dimensiones Reales"
-#: modules/process/calibrate.c:417
+#: modules/process/calibrate.c:415
msgid "_Match pixel size:"
msgstr ""
-#: modules/process/calibrate.c:444 modules/volume/volume_calibrate.c:394
+#: modules/process/calibrate.c:447 modules/volume/volume_calibrate.c:397
msgid "_X range:"
msgstr ""
-#: modules/process/calibrate.c:473 modules/volume/volume_calibrate.c:421
+#: modules/process/calibrate.c:467 modules/volume/volume_calibrate.c:417
msgid "_Y range:"
msgstr ""
-#: modules/process/calibrate.c:489
+#: modules/process/calibrate.c:472
msgid "_Square samples"
msgstr ""
-#: modules/process/calibrate.c:524 modules/volume/volume_calibrate.c:521
+#: modules/process/calibrate.c:496 modules/volume/volume_calibrate.c:480
msgid "Value Range"
msgstr ""
-#: modules/process/calibrate.c:529 modules/volume/volume_calibrate.c:448
+#: modules/process/calibrate.c:502 modules/volume/volume_calibrate.c:437
msgid "_Z range:"
msgstr ""
-#: modules/process/calibrate.c:558
+#: modules/process/calibrate.c:524
msgid "Z shi_ft:"
msgstr ""
-#: modules/process/calibrate.c:573 modules/volume/volume_calibrate.c:570
+#: modules/process/calibrate.c:533 modules/volume/volume_calibrate.c:515
msgid "Calibration Coefficients"
msgstr ""
-#: modules/process/calibrate.c:580 modules/volume/volume_calibrate.c:577
+#: modules/process/calibrate.c:538 modules/volume/volume_calibrate.c:520
msgid "_X calibration factor:"
msgstr ""
-#: modules/process/calibrate.c:590 modules/volume/volume_calibrate.c:585
+#: modules/process/calibrate.c:545 modules/volume/volume_calibrate.c:527
msgid "_Y calibration factor:"
msgstr ""
-#: modules/process/calibrate.c:600 modules/volume/volume_calibrate.c:593
+#: modules/process/calibrate.c:552 modules/volume/volume_calibrate.c:534
msgid "_Z calibration factor:"
msgstr ""
-#: modules/process/calibrate.c:613 modules/process/extend.c:293
-#: modules/tools/crop.c:213
-msgid "Create new channel"
-msgstr "Crear un nuevo cannal"
+#: modules/process/calibrate.c:567 modules/process/drift.c:389
+#: modules/process/extend.c:293 modules/tools/crop.c:213
+#, fuzzy
+msgid "Create new image"
+msgstr "Crea un nuevo dato"
#: modules/process/coerce.c:159
msgid "Transforms surfaces to have prescribed statistical properties."
@@ -8446,13 +8766,13 @@ msgid "Coerced"
msgstr ""
#: modules/process/coerce.c:225 modules/process/coerce.c:326
-#: modules/process/fbm_synth.c:475 modules/process/lno_synth.c:256
-#: modules/process/noise_synth.c:183
+#: modules/process/fbm_synth.c:474 modules/process/lno_synth.c:254
+#: modules/process/noise_synth.c:181
msgid "distribution|Uniform"
msgstr "Uniforme"
-#: modules/process/coerce.c:226 modules/process/fbm_synth.c:476
-#: modules/process/lno_synth.c:246 modules/process/noise_synth.c:173
+#: modules/process/coerce.c:226 modules/process/fbm_synth.c:475
+#: modules/process/lno_synth.c:244 modules/process/noise_synth.c:171
msgid "distribution|Gaussian"
msgstr "Gaussiana"
@@ -8509,12 +8829,12 @@ msgid "Number of maxima"
msgstr ""
#: modules/process/col_synth.c:173 modules/tools/linestats.c:178
-#: modules/volume/volume_linestat.c:154
+#: modules/volume/volume_linestat.c:156
msgid "Skew"
msgstr "Asimetría"
#: modules/process/col_synth.c:174 modules/tools/linestats.c:179
-#: modules/tools/roughness.c:386 modules/volume/volume_linestat.c:155
+#: modules/tools/roughness.c:387 modules/volume/volume_linestat.c:157
msgid "Kurtosis"
msgstr "Curtosis"
@@ -8530,7 +8850,7 @@ msgid "Generates columnar surfaces by a simple growth algorithm."
msgstr ""
#: modules/process/col_synth.c:208
-msgid "/S_ynthetic/_Columnar..."
+msgid "/S_ynthetic/_Deposition/_Columnar..."
msgstr ""
#: modules/process/col_synth.c:212
@@ -8557,7 +8877,7 @@ msgstr "Inclinación"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "beast"
-#: modules/process/col_synth.c:509 modules/process/crosscor.c:1063
+#: modules/process/col_synth.c:509 modules/process/crosscor.c:1036
msgid "Direction"
msgstr "Dirección"
@@ -8567,20 +8887,20 @@ msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "eog"
-#: modules/process/col_synth.c:528
+#: modules/process/col_synth.c:529
#, fuzzy
msgid "_Melting:"
msgstr "E_scalado:"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "gajim"
-#: modules/process/col_synth.c:612
+#: modules/process/col_synth.c:613
msgid "Weak"
msgstr "Débil"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "plugin_htmlbar"
-#: modules/process/col_synth.c:613
+#: modules/process/col_synth.c:614
msgid "Strong"
msgstr "Remarcado"
@@ -8614,8 +8934,8 @@ msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "anjuta"
-#: modules/process/convolution_filter.c:269 modules/tools/filter.c:170
-#: modules/tools/filter.c:274
+#: modules/process/convolution_filter.c:269 modules/tools/filter.c:171
+#: modules/tools/filter.c:275
msgid "Filter"
msgstr "Filtro"
@@ -8645,122 +8965,133 @@ msgstr ""
msgid "VSym"
msgstr ""
-#: modules/process/correct_affine.c:231
+#: modules/process/correct_affine.c:220
msgid ""
"Corrects affine distortion of images by matching image Bravais lattice to "
"the true one."
msgstr ""
-#: modules/process/correct_affine.c:246
+#: modules/process/correct_affine.c:235
msgid "/_Distortion/_Affine..."
msgstr ""
-#: modules/process/correct_affine.c:250
+#: modules/process/correct_affine.c:239
msgid "Correct affine distortion"
msgstr ""
-#: modules/process/correct_affine.c:298
+# Translation for this string generated by http://littlesvr.ca/ostd/
+# based on translation from "foxtrotgps"
+#: modules/process/correct_affine.c:309 modules/process/correct_affine.c:634
+#, fuzzy
+msgid "Corrected"
+msgstr "Corrección:"
+
+#: modules/process/correct_affine.c:343
msgid "Affine Correction"
msgstr ""
+#: modules/process/correct_affine.c:349 modules/process/measure_lattice.c:249
+msgid "_Refine"
+msgstr ""
+
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "src"
-#: modules/process/correct_affine.c:351 modules/process/fft_filter_2d.c:530
+#: modules/process/correct_affine.c:399 modules/process/fft_filter_2d.c:530
msgid "Preview Options"
msgstr "Opciones de vista previa"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "audacious-plugins"
-#: modules/process/correct_affine.c:356 modules/process/fft_filter_2d.c:535
-#: modules/process/measure_lattice.c:321
+#: modules/process/correct_affine.c:404 modules/process/fft_filter_2d.c:535
+#: modules/process/measure_lattice.c:311
msgid "Display:"
msgstr "Mostrar:"
-#: modules/process/correct_affine.c:364 modules/process/measure_lattice.c:329
+#: modules/process/correct_affine.c:412 modules/process/measure_lattice.c:319
#: modules/tools/grainremover.c:109
msgid "_Data"
msgstr "_Datos"
-#: modules/process/correct_affine.c:365
+#: modules/process/correct_affine.c:413
msgid "2D _ACF"
msgstr ""
-#: modules/process/correct_affine.c:366 modules/process/drift.c:365
+#: modules/process/correct_affine.c:414 modules/process/drift.c:364
msgid "Correc_ted data"
msgstr ""
-#: modules/process/correct_affine.c:377
+#: modules/process/correct_affine.c:425
msgid "ACF zoom:"
msgstr ""
-#: modules/process/correct_affine.c:394 modules/process/measure_lattice.c:372
+# Translation for this string generated by http://littlesvr.ca/ostd/
+# based on translation from "audacity"
+#: modules/process/correct_affine.c:442 modules/process/measure_lattice.c:346
+#, fuzzy
+msgid "Interpolate _horizontal ACF"
+msgstr "Interpolación:"
+
+#: modules/process/correct_affine.c:452 modules/process/measure_lattice.c:372
msgid "Lattice Vectors"
msgstr ""
#. TRANSLATORS: Correct is an adjective here.
-#: modules/process/correct_affine.c:419
+#: modules/process/correct_affine.c:469
msgid "Correct Lattice"
msgstr ""
-#: modules/process/correct_affine.c:423
+#: modules/process/correct_affine.c:473
msgid "_Lattice type:"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "glabels"
-#: modules/process/correct_affine.c:430
+#: modules/process/correct_affine.c:480
msgid "User defined"
msgstr "Definido por el usuario"
-#: modules/process/correct_affine.c:445
+#: modules/process/correct_affine.c:495
msgid "_Different lengths"
msgstr ""
-#: modules/process/correct_affine.c:474
+#: modules/process/correct_affine.c:524
msgid "Image for _ACF:"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "eog"
-#: modules/process/correct_affine.c:501
+#: modules/process/correct_affine.c:551
msgid "_Scaling:"
msgstr "E_scalado:"
-#: modules/process/correct_affine.c:508
+#: modules/process/correct_affine.c:558
msgid "Exactly as specified"
msgstr ""
-#: modules/process/correct_affine.c:509
+#: modules/process/correct_affine.c:560
msgid "Preserve area"
msgstr ""
-#: modules/process/correct_affine.c:510
+#: modules/process/correct_affine.c:562
msgid "Preserve X scale"
msgstr ""
-# Translation for this string generated by http://littlesvr.ca/ostd/
-# based on translation from "foxtrotgps"
-#: modules/process/correct_affine.c:561
-#, fuzzy
-msgid "Corrected"
-msgstr "Corrección:"
+#: modules/process/correct_affine.c:571 modules/process/drift.c:379
+msgid "_Apply to all compatible images"
+msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "banshee"
-#: modules/process/correct_affine.c:617 modules/process/measure_lattice.c:489
+#: modules/process/correct_affine.c:693 modules/process/measure_lattice.c:482
msgid "length"
msgstr "longitud"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "darktable"
-#: modules/process/correct_affine.c:624 modules/process/measure_lattice.c:496
+#: modules/process/correct_affine.c:700 modules/process/measure_lattice.c:489
msgid "angle"
msgstr "ángulo"
-#: modules/process/correct_affine.c:717
-msgid "Re_fine"
-msgstr ""
-
#: modules/process/crosscor.c:157
msgid "Calculates cross-correlation of two data fields."
msgstr ""
@@ -8785,212 +9116,214 @@ msgstr ""
msgid "Search size"
msgstr ""
-#: modules/process/crosscor.c:272
-msgid "Global offset of 2nd channel"
+#: modules/process/crosscor.c:267
+msgid "_Guess"
msgstr ""
-#: modules/process/crosscor.c:277
-msgid "_Guess"
+#: modules/process/crosscor.c:268
+msgid "Global offset of 2nd channel"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "gnomint"
-#: modules/process/crosscor.c:311
+#: modules/process/crosscor.c:292
msgid "Window size"
msgstr "Tamaño de ventana"
-#: modules/process/crosscor.c:319
+#: modules/process/crosscor.c:300
msgid "W_idth:"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "plugin_htmlbar"
-#: modules/process/crosscor.c:329
+#: modules/process/crosscor.c:308
msgid "Hei_ght:"
msgstr "_Altura:"
-#: modules/process/crosscor.c:342 modules/process/fft.c:405
+#: modules/process/crosscor.c:319 modules/process/fft.c:403
#: modules/process/psdf_logphi.c:268
msgid "_Windowing type:"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "lang"
-#: modules/process/crosscor.c:350
+#: modules/process/crosscor.c:327
msgid "All"
msgstr "Todo"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "fslint"
-#: modules/process/crosscor.c:351
+#: modules/process/crosscor.c:328
msgid "Absolute"
msgstr "Absoluto"
-#: modules/process/crosscor.c:352
+#: modules/process/crosscor.c:329
msgid "X Distance"
msgstr ""
-#: modules/process/crosscor.c:353
+#: modules/process/crosscor.c:330
msgid "Y Distance"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "help"
-#: modules/process/crosscor.c:355 modules/process/crosscor.c:1077
+#: modules/process/crosscor.c:332 modules/process/crosscor.c:1050
msgid "Score"
msgstr "Puntuación"
-#: modules/process/crosscor.c:357 modules/process/fft.c:395
-#: modules/process/fit-shape.c:688 modules/process/maskcor.c:176
+#: modules/process/crosscor.c:334 modules/process/fft.c:393
+#: modules/process/fit-shape.c:699 modules/process/maskcor.c:177
+#: modules/process/mfm_current.c:455 modules/process/mfm_field.c:373
+#: modules/process/mfm_parallel.c:466
msgid "Output _type:"
msgstr ""
-#: modules/process/crosscor.c:363
+#: modules/process/crosscor.c:340
msgid "Add _low score results mask"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "xfce4-settings"
-#: modules/process/crosscor.c:374 modules/process/grain_wshed.c:223
-#: modules/process/maskcor.c:188
+#: modules/process/crosscor.c:351 modules/process/grain_wshed.c:225
+#: modules/process/maskcor.c:191
msgid "T_hreshold:"
msgstr "Um_bral:"
-#: modules/process/crosscor.c:381
+#: modules/process/crosscor.c:359
msgid "Multichannel cross-corelation"
msgstr ""
-#: modules/process/crosscor.c:400
+#: modules/process/crosscor.c:378
msgid "Second _source data:"
msgstr ""
-#: modules/process/crosscor.c:417
+#: modules/process/crosscor.c:394
msgid "Correlate with:"
msgstr ""
-#: modules/process/crosscor.c:424
+#: modules/process/crosscor.c:402
#, fuzzy
msgid "Postprocess:"
msgstr "Proceso de Datos"
-#: modules/process/crosscor.c:431
-msgid "Apply Ga_ussian filter of width: "
+#: modules/process/crosscor.c:411
+msgid "Apply Ga_ussian filter of width:"
msgstr ""
-#: modules/process/crosscor.c:451
+#: modules/process/crosscor.c:424
msgid "Extend results to borders"
msgstr ""
-#: modules/process/crosscor.c:461
+#: modules/process/crosscor.c:433
msgid "Create corrected data from 2nd channel"
msgstr ""
-#: modules/process/crosscor.c:860
+#: modules/process/crosscor.c:833
msgid "Correlating first set..."
msgstr ""
-#: modules/process/crosscor.c:892
+#: modules/process/crosscor.c:865
msgid "Correlating second set..."
msgstr ""
-#: modules/process/crosscor.c:999
+#: modules/process/crosscor.c:972
#, fuzzy
msgid "Corrected 2nd channel"
msgstr "Crear un nuevo cannal"
-#: modules/process/crosscor.c:1023
+#: modules/process/crosscor.c:996
msgid "X difference"
msgstr ""
-#: modules/process/crosscor.c:1037
+#: modules/process/crosscor.c:1010
msgid "Y difference"
msgstr ""
-#: modules/process/crosscor.c:1050
+#: modules/process/crosscor.c:1023
msgid "Absolute difference"
msgstr ""
-#: modules/process/curvature.c:131
+#: modules/process/curvature.c:130
msgid "Center value"
msgstr ""
-#: modules/process/curvature.c:132
+#: modules/process/curvature.c:131
msgid "Curvature radius 1"
msgstr ""
-#: modules/process/curvature.c:133
+#: modules/process/curvature.c:132
msgid "Curvature radius 2"
msgstr ""
-#: modules/process/curvature.c:134
+#: modules/process/curvature.c:133
msgid "Direction 1"
msgstr ""
-#: modules/process/curvature.c:135
+#: modules/process/curvature.c:134
msgid "Direction 2"
msgstr ""
-#: modules/process/curvature.c:163
+#: modules/process/curvature.c:162
msgid "Calculates overall curvature."
msgstr ""
-#: modules/process/curvature.c:177
+#: modules/process/curvature.c:176
msgid "/_Level/_Curvature..."
msgstr ""
-#: modules/process/curvature.c:181
+#: modules/process/curvature.c:180
msgid "Calculate overall curvature"
msgstr ""
-#: modules/process/curvature.c:211 modules/process/facet-level.c:118
+#: modules/process/curvature.c:210 modules/process/facet-level.c:118
#: modules/process/semsim.c:165
#, c-format
msgid "%s: Lateral dimensions and value must be the same physical quantity."
msgstr ""
-#: modules/process/curvature.c:445
+#: modules/process/curvature.c:447
msgid "Curvature Sections"
msgstr ""
-#: modules/process/curvature.c:653
+#: modules/process/curvature.c:655
msgid "Output Type"
msgstr ""
-#: modules/process/curvature.c:660
+#: modules/process/curvature.c:662
msgid "_Set selection"
msgstr ""
-#: modules/process/curvature.c:670
+#: modules/process/curvature.c:672
msgid "_Plot graph"
msgstr "_Presenta gráfico"
-#: modules/process/curvature.c:685 modules/process/drift.c:337
-#: modules/process/fft_profile.c:310 modules/process/fractal.c:328
-#: modules/process/grain_cross.c:253 modules/process/linematch.c:885
-#: modules/process/slope_dist.c:349 modules/tools/linestats.c:418
-#: modules/tools/profile.c:573 modules/tools/roughness.c:872
-#: modules/tools/sfunctions.c:486 modules/tools/spectro.c:382
-#: modules/volume/volume_slice.c:398
+#: modules/process/curvature.c:684 modules/process/drift.c:340
+#: modules/process/fft_profile.c:300 modules/process/fractal.c:308
+#: modules/process/grain_cross.c:260 modules/process/linematch.c:855
+#: modules/process/slope_dist.c:347 modules/tools/linestats.c:424
+#: modules/tools/profile.c:559 modules/tools/roughness.c:886
+#: modules/tools/sfunctions.c:488 modules/tools/spectro.c:391
+#: modules/volume/volume_slice.c:408
#, fuzzy
-msgid "Target _graph:"
+msgid "New graph"
msgstr "Corta Gráfico"
-#: modules/process/curvature.c:691 modules/process/drift.c:343
-#: modules/process/fft_profile.c:316 modules/process/fractal.c:334
-#: modules/process/grain_cross.c:259 modules/process/linematch.c:892
-#: modules/process/slope_dist.c:355 modules/tools/linestats.c:424
-#: modules/tools/profile.c:579 modules/tools/roughness.c:878
-#: modules/tools/sfunctions.c:492 modules/tools/spectro.c:388
-#: modules/volume/volume_slice.c:406
+#: modules/process/curvature.c:689 modules/process/drift.c:345
+#: modules/process/fft_profile.c:306 modules/process/fractal.c:313
+#: modules/process/grain_cross.c:254 modules/process/linematch.c:860
+#: modules/process/slope_dist.c:352 modules/tools/linestats.c:418
+#: modules/tools/profile.c:563 modules/tools/roughness.c:890
+#: modules/tools/sfunctions.c:492 modules/tools/spectro.c:385
+#: modules/volume/volume_slice.c:400
#, fuzzy
-msgid "New graph"
+msgid "Target _graph:"
msgstr "Corta Gráfico"
-#: modules/process/curvature.c:951
+#: modules/process/curvature.c:949
msgid "Axes are outside the image."
msgstr ""
-#: modules/process/curvature.c:1018
+#: modules/process/curvature.c:1016
msgid "Save Curvature"
msgstr "Guardar Curvatura"
@@ -9014,8 +9347,8 @@ msgstr ""
msgid "2D CWT"
msgstr ""
-#: modules/process/cwt.c:158 modules/process/dwt.c:185
-#: modules/process/dwtanisotropy.c:209
+#: modules/process/cwt.c:159 modules/process/dwt.c:185
+#: modules/process/dwtanisotropy.c:212
msgid "_Wavelet type:"
msgstr ""
@@ -9024,91 +9357,87 @@ msgid "Generates particles using simple dynamical model"
msgstr ""
#: modules/process/deposit_synth.c:184
-msgid "/S_ynthetic/_Particles..."
+msgid "/S_ynthetic/_Deposition/_Particles..."
msgstr ""
#: modules/process/deposit_synth.c:188
msgid "Generate particles using dynamical model"
msgstr ""
-#: modules/process/deposit_synth.c:288 modules/process/deposit_synth.c:867
+#: modules/process/deposit_synth.c:288 modules/process/deposit_synth.c:866
#, c-format
msgid ""
"Not all the particles could be deposited (%u),\n"
"try more revise steps."
msgstr ""
-#: modules/process/deposit_synth.c:347
+#: modules/process/deposit_synth.c:348
msgid "Particle Generation"
msgstr ""
-#: modules/process/deposit_synth.c:427
+#: modules/process/deposit_synth.c:431
msgid "Particle r_adius:"
msgstr ""
-#: modules/process/deposit_synth.c:438
+#: modules/process/deposit_synth.c:443
msgid "Distribution _width:"
msgstr ""
-#: modules/process/deposit_synth.c:449
-msgid "Surface _coverage:"
-msgstr ""
-
-#: modules/process/deposit_synth.c:458
+#: modules/process/deposit_synth.c:462
msgid "_Relax steps:"
msgstr ""
-#: modules/process/deposit_synth.c:659 modules/process/synth.h:548
+#: modules/process/deposit_synth.c:660 modules/process/synth.h:577
msgid "R_andom seed:"
msgstr "S_emilla:"
-#: modules/process/deposit_synth.c:665 modules/process/synth.h:554
+#: modules/process/deposit_synth.c:666 modules/process/synth.h:583
msgid "seed|_New"
msgstr "_Nueva"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "fontforge"
-#: modules/process/deposit_synth.c:676
+#: modules/process/deposit_synth.c:677
msgid "Randomize"
msgstr "Al azar"
-#: modules/process/deposit_synth.c:860 modules/process/domain_synth.c:919
+#: modules/process/deposit_synth.c:859 modules/process/domain_synth.c:919
msgid "Running computation..."
msgstr ""
-#: modules/process/deposit_synth.c:865
+#: modules/process/deposit_synth.c:864
#, c-format
msgid "%d particles were deposited"
msgstr ""
-#: modules/process/deposit_synth.c:1093
+#: modules/process/deposit_synth.c:1092
msgid "Initial particle set..."
msgstr ""
-#: modules/process/deposit_synth.c:1252
+#: modules/process/deposit_synth.c:1251
msgid "Running revise..."
msgstr ""
-#: modules/process/deposit_synth.c:1380
+#: modules/process/deposit_synth.c:1379
msgid "Error: too many particles."
msgstr ""
-#: modules/process/deposit_synth.c:1382
+#: modules/process/deposit_synth.c:1381
msgid "Error: no particles."
msgstr ""
-#: modules/process/deposit_synth.c:1384
+#: modules/process/deposit_synth.c:1383
msgid "Error: particles too large."
msgstr ""
-#: modules/process/deposit_synth.c:1386
+#: modules/process/deposit_synth.c:1385
msgid "Error: particles too small."
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "lyx"
#: modules/process/diff_synth.c:197 modules/tools/linestats.c:173
-#: modules/volume/volume_linestat.c:149
+#: modules/volume/volume_linestat.c:151
msgid "Variation"
msgstr "Variación"
@@ -9121,7 +9450,7 @@ msgid "Generates surfaces by diffusion limited aggregation."
msgstr ""
#: modules/process/diff_synth.c:228
-msgid "/S_ynthetic/_Diffusion..."
+msgid "/S_ynthetic/_Deposition/_Diffusion..."
msgstr ""
#: modules/process/diff_synth.c:232
@@ -9136,44 +9465,44 @@ msgstr ""
msgid "_Flux:"
msgstr ""
-#: modules/process/diff_synth.c:522
+#: modules/process/diff_synth.c:521
msgid "Probabilities"
msgstr ""
-#: modules/process/diff_synth.c:530
+#: modules/process/diff_synth.c:529
msgid "_Sticking:"
msgstr ""
-#: modules/process/diff_synth.c:539
+#: modules/process/diff_synth.c:538
msgid "_Activation:"
msgstr ""
-#: modules/process/diff_synth.c:548
+#: modules/process/diff_synth.c:547
msgid "Passing Sch_woebel:"
msgstr ""
-#: modules/process/dimensions.h:457
+#: modules/process/dimensions.h:439
msgid "S_quare image"
msgstr ""
-#: modules/process/dimensions.h:489
+#: modules/process/dimensions.h:473
msgid "_Dimension units:"
msgstr ""
-#: modules/process/dimensions.h:502
-msgid "Current Channel"
+#: modules/process/dimensions.h:488
+msgid "Current Image"
msgstr ""
-#: modules/process/dimensions.h:506
-msgid "_Take Dimensions from Current Channel"
+#: modules/process/dimensions.h:492
+msgid "_Take Dimensions from Current Image"
msgstr ""
-#: modules/process/dimensions.h:514
-msgid "_Replace the current channel"
+#: modules/process/dimensions.h:501
+msgid "_Replace the current image"
msgstr ""
-#: modules/process/dimensions.h:523
-msgid "_Start from the current channel"
+#: modules/process/dimensions.h:510
+msgid "_Start from the current image"
msgstr ""
#: modules/process/domain_synth.c:158
@@ -9237,13 +9566,13 @@ msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "calibre"
#: modules/process/domain_synth.c:504 modules/process/fft_filter_2d.c:586
-#: modules/volume/volume_slice.c:364
+#: modules/volume/volume_slice.c:366
msgid "Output Options"
msgstr "Opciones de salida"
#: modules/process/domain_synth.c:523 modules/process/fft_filter_2d.c:591
-#: modules/process/mask_edt.c:377 modules/process/slope_dist.c:323
-#: modules/volume/volume_linestat.c:432 modules/volume/volume_slice.c:384
+#: modules/process/mask_edt.c:211 modules/process/slope_dist.c:323
+#: modules/volume/volume_linestat.c:437 modules/volume/volume_slice.c:386
msgid "Output type:"
msgstr ""
@@ -9273,63 +9602,53 @@ msgstr ""
msgid "rows"
msgstr "rows"
-#: modules/process/drift.c:304
+#: modules/process/drift.c:305
msgid "Correct _data"
msgstr ""
-#: modules/process/drift.c:314
+#: modules/process/drift.c:315
msgid "_Exclude linear skew"
msgstr ""
-#: modules/process/drift.c:324
+#: modules/process/drift.c:325
msgid "Plot drift _graph"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "aptitude"
-#: modules/process/drift.c:356 modules/process/fit-shape.c:693
-#: modules/process/neural.c:548 modules/process/polydistort.c:275
+#: modules/process/drift.c:355 modules/process/fit-shape.c:705
+#: modules/process/neural.c:552 modules/process/polydistort.c:278
msgid "Preview:"
msgstr "Previsualizar:"
-#: modules/process/drift.c:366
+#: modules/process/drift.c:365
msgid "Drift _lines"
msgstr ""
-#: modules/process/drift.c:374 modules/process/facet_analysis.c:407
-#: modules/process/grain_edge.c:285 modules/process/grain_filter.c:357
-#: modules/process/grain_mark.c:367 modules/process/grain_wshed.c:267
-#: modules/process/mark_disconn.c:310 modules/process/scars.c:381
+#: modules/process/drift.c:373 modules/process/facet_analysis.c:390
+#: modules/process/grain_edge.c:272 modules/process/grain_filter.c:356
+#: modules/process/grain_mark.c:341 modules/process/grain_wshed.c:271
+#: modules/process/mark_disconn.c:298 modules/process/scars.c:405
#: modules/process/wpour_mark.c:369
msgid "_Mask color:"
msgstr ""
-# Translation for this string generated by http://littlesvr.ca/ostd/
-# based on translation from "dia"
-#: modules/process/drift.c:379
-msgid "Distribute"
-msgstr "Distribuir"
-
-#: modules/process/drift.c:388
-msgid "Replace"
-msgstr "Sustituir"
-
-#: modules/process/drift.c:569
+#: modules/process/drift.c:570
msgid "Drift-corrected"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "xscreensaver"
-#: modules/process/drift.c:613
+#: modules/process/drift.c:614
msgid "Drift"
msgstr "Deriva"
-#: modules/process/drift.c:614 modules/xyz/xyz_drift.c:392
+#: modules/process/drift.c:615 modules/xyz/xyz_drift.c:392
#: modules/xyz/xyz_drift.c:411 modules/xyz/xyz_drift.c:430
msgid "drift"
msgstr ""
-#: modules/process/drift.c:620 modules/xyz/xyz_drift.c:402
+#: modules/process/drift.c:621 modules/xyz/xyz_drift.c:402
msgid "x-axis drift"
msgstr ""
@@ -9385,11 +9704,11 @@ msgstr ""
msgid "2D DWT Anisotropy"
msgstr ""
-#: modules/process/dwtanisotropy.c:214
+#: modules/process/dwtanisotropy.c:218
msgid "X/Y ratio threshold:"
msgstr ""
-#: modules/process/dwtanisotropy.c:222
+#: modules/process/dwtanisotropy.c:226
msgid "Low level exclude limit:"
msgstr ""
@@ -9515,7 +9834,7 @@ msgstr ""
msgid "_Gaussian FWHM:"
msgstr ""
-#: modules/process/edge.c:681 modules/process/mark_disconn.c:271
+#: modules/process/edge.c:681 modules/process/mark_disconn.c:272
msgid "_Threshold:"
msgstr "_Umbral:"
@@ -9585,11 +9904,11 @@ msgstr ""
msgid "Entropy deficit:"
msgstr ""
-#: modules/process/entropy.c:567
+#: modules/process/entropy.c:568
msgid "Entropy at scales"
msgstr ""
-#: modules/process/entropy.c:586
+#: modules/process/entropy.c:587
#, fuzzy
msgid "Best estimate"
msgstr "e_stimación"
@@ -9648,23 +9967,23 @@ msgstr "_Derecha:"
msgid "Extend _symetrically"
msgstr ""
-#: modules/process/extend.c:268 modules/process/polydistort.c:256
-#: modules/xyz/xyz_raster.c:658
+#: modules/process/extend.c:268 modules/process/polydistort.c:259
+#: modules/xyz/xyz_raster.c:627
msgid "exterior|Border"
msgstr ""
-#: modules/process/extend.c:270 modules/process/polydistort.c:258
-#: modules/xyz/xyz_raster.c:660
+#: modules/process/extend.c:270 modules/process/polydistort.c:261
+#: modules/xyz/xyz_raster.c:629
msgid "exterior|Mirror"
msgstr ""
-#: modules/process/extend.c:272 modules/process/polydistort.c:260
-#: modules/xyz/xyz_raster.c:662
+#: modules/process/extend.c:272 modules/process/polydistort.c:263
+#: modules/xyz/xyz_raster.c:631
msgid "exterior|Periodic"
msgstr ""
-#: modules/process/extend.c:275 modules/process/polydistort.c:263
-#: modules/xyz/xyz_raster.c:650
+#: modules/process/extend.c:275 modules/process/polydistort.c:266
+#: modules/xyz/xyz_raster.c:619
msgid "_Exterior type:"
msgstr ""
@@ -9701,13 +10020,13 @@ msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "clawsker"
-#: modules/process/extract_path.c:189 modules/volume/volume_extract.c:390
+#: modules/process/extract_path.c:189 modules/volume/volume_extract.c:383
msgid "X position"
msgstr "Posición X"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "clawsker"
-#: modules/process/extract_path.c:193 modules/volume/volume_extract.c:397
+#: modules/process/extract_path.c:193 modules/volume/volume_extract.c:389
msgid "Y position"
msgstr "Posición Y"
@@ -9722,7 +10041,7 @@ msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "celestia"
#: modules/process/extract_path.c:392 modules/process/extract_path.c:404
-#: modules/process/pat_synth.c:1432 modules/tools/distance.c:146
+#: modules/process/pat_synth.c:1433 modules/tools/distance.c:146
msgid "Distance"
msgstr "Distancia"
@@ -9767,49 +10086,38 @@ msgstr ""
msgid "Mark areas by 2D slope"
msgstr ""
-#: modules/process/facet_analysis.c:266
+#: modules/process/facet_analysis.c:270
msgid "Mark Facets"
msgstr ""
-#: modules/process/facet_analysis.c:269
+#: modules/process/facet_analysis.c:273
msgid "verb|_Mark"
msgstr "_Marcar"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "abiword"
#. TRANSLATORS: The direction or line orthogonal to something.
-#: modules/process/facet_analysis.c:325
+#: modules/process/facet_analysis.c:329
msgid "Normal"
msgstr "Normal"
-#: modules/process/facet_analysis.c:333
+#: modules/process/facet_analysis.c:337
msgid "_Find Maximum"
msgstr ""
-#: modules/process/facet_analysis.c:341
+#: modules/process/facet_analysis.c:345
msgid "Mean Normal"
msgstr ""
-#: modules/process/facet_analysis.c:350
+#: modules/process/facet_analysis.c:362
msgid "Facet plane size:"
msgstr ""
-#: modules/process/facet_analysis.c:375
+#: modules/process/facet_analysis.c:370
msgid "_Tolerance:"
msgstr ""
-#: modules/process/facet_analysis.c:384 modules/process/grain_edge.c:262
-#: modules/process/grain_mark.c:344 modules/process/mark_disconn.c:286
-msgid "Com_bine with existing mask"
-msgstr ""
-
-#: modules/process/facet_analysis.c:398 modules/process/grain_edge.c:276
-#: modules/process/grain_mark.c:358 modules/process/mark_disconn.c:301
-#: modules/process/mark_with.c:230 modules/process/mask_morph.c:210
-msgid "Operation:"
-msgstr ""
-
-#: modules/process/facet_analysis.c:415
+#: modules/process/facet_analysis.c:398
msgid ""
"Warning: Lateral and value units differ. Angles are not physically "
"meaningful."
@@ -9841,8 +10149,8 @@ msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "gnumeric"
-#: modules/process/fbm_synth.c:390 modules/process/lno_synth.c:509
-#: modules/process/noise_synth.c:409
+#: modules/process/fbm_synth.c:390 modules/process/lno_synth.c:507
+#: modules/process/noise_synth.c:407
msgid "_Distribution:"
msgstr "_Distribución:"
@@ -9850,17 +10158,17 @@ msgstr "_Distribución:"
msgid "Po_wer:"
msgstr "Potencia:"
-#: modules/process/fbm_synth.c:408 modules/process/fft_synth.c:414
-#: modules/process/lno_synth.c:533 modules/process/noise_synth.c:433
+#: modules/process/fbm_synth.c:407 modules/process/fft_synth.c:414
+#: modules/process/lno_synth.c:531 modules/process/noise_synth.c:431
msgid "_RMS:"
msgstr "_RMS:"
-#: modules/process/fbm_synth.c:477 modules/process/lno_synth.c:251
-#: modules/process/noise_synth.c:178
+#: modules/process/fbm_synth.c:476 modules/process/lno_synth.c:249
+#: modules/process/noise_synth.c:176
msgid "distribution|Exponential"
msgstr "Exponencial"
-#: modules/process/fbm_synth.c:478
+#: modules/process/fbm_synth.c:477
#, fuzzy
msgid "distribution|Power"
msgstr "Uniforme"
@@ -9924,7 +10232,7 @@ msgstr "Módulo"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "beast"
-#: modules/process/fft.c:327 modules/process/wave_synth.c:583
+#: modules/process/fft.c:327 modules/process/wave_synth.c:618
msgid "Phase"
msgstr "Fase"
@@ -9944,71 +10252,71 @@ msgstr "Transformada de Hough"
msgid "I_maginary part:"
msgstr "Imaginaria"
-#: modules/process/fft.c:382
+#: modules/process/fft.c:380
msgid "_Inverse transform"
msgstr ""
-#: modules/process/fft.c:411
+#: modules/process/fft.c:409
msgid "Subtract mean _value beforehand"
msgstr ""
-#: modules/process/fft.c:422
+#: modules/process/fft.c:420
msgid "_Preserve RMS"
msgstr ""
-#: modules/process/fft_filter_1d.c:117
+#: modules/process/fft_filter_1d.c:118
msgid "FFT filtering"
msgstr ""
-#: modules/process/fft_filter_1d.c:131
+#: modules/process/fft_filter_1d.c:132
msgid "/_Correct Data/1D _FFT Filtering..."
msgstr ""
-#: modules/process/fft_filter_1d.c:135
+#: modules/process/fft_filter_1d.c:136
msgid "1D FFT Filtering"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "claws-mail"
-#: modules/process/fft_filter_1d.c:165 modules/process/wpour_mark.c:391
+#: modules/process/fft_filter_1d.c:166 modules/process/wpour_mark.c:391
msgid "Marked"
msgstr "Marcado"
-#: modules/process/fft_filter_1d.c:166
+#: modules/process/fft_filter_1d.c:167
msgid "Unmarked"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "help"
-#: modules/process/fft_filter_1d.c:169
+#: modules/process/fft_filter_1d.c:170
msgid "Null"
msgstr "Nulo"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "alleyoop"
-#: modules/process/fft_filter_1d.c:170
+#: modules/process/fft_filter_1d.c:171
msgid "Suppress"
msgstr "Suprimir"
-#: modules/process/fft_filter_1d.c:180
+#: modules/process/fft_filter_1d.c:181
msgid "1D FFT filter"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "goffice"
-#: modules/process/fft_filter_1d.c:269 modules/process/linematch.c:861
+#: modules/process/fft_filter_1d.c:271 modules/process/linematch.c:828
msgid "_Direction:"
msgstr "_Dirección:"
-#: modules/process/fft_filter_1d.c:277
+#: modules/process/fft_filter_1d.c:279
msgid "_Suppress type:"
msgstr ""
-#: modules/process/fft_filter_1d.c:285
+#: modules/process/fft_filter_1d.c:287
msgid "_Filter type:"
msgstr ""
-#: modules/process/fft_filter_1d.c:513
+#: modules/process/fft_filter_1d.c:515
msgid "1D FFT Filtered Data"
msgstr ""
@@ -10030,9 +10338,10 @@ msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "gimp-gap"
-#: modules/process/fft_filter_2d.c:305 modules/process/fit-shape.c:594
-#: modules/process/fit-shape.c:643 modules/process/fit-shape.c:658
-#: modules/process/fit-shape.c:662 modules/process/neural.c:560
+#: modules/process/fft_filter_2d.c:305 modules/process/fit-shape.c:604
+#: modules/process/fit-shape.c:653 modules/process/fit-shape.c:668
+#: modules/process/fit-shape.c:672 modules/process/neural.c:564
+#: modules/process/psf.c:232
msgid "Difference"
msgstr "Diferencia"
@@ -10092,7 +10401,7 @@ msgstr "_Deshacer"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "banshee"
-#: modules/process/fft_filter_2d.c:507 modules/tools/maskedit.c:556
+#: modules/process/fft_filter_2d.c:507 modules/tools/maskedit.c:562
msgid "_Fill"
msgstr "Relle_nar"
@@ -10102,7 +10411,7 @@ msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "beast"
-#: modules/process/fft_filter_2d.c:565 modules/process/measure_lattice.c:339
+#: modules/process/fft_filter_2d.c:565 modules/process/measure_lattice.c:329
msgid "Zoom:"
msgstr "Ampliación:"
@@ -10138,37 +10447,40 @@ msgstr ""
msgid "Force shapes to center around the origin"
msgstr ""
-#: modules/process/fft_profile.c:125
+#: modules/process/fft_profile.c:124
msgid ""
"Reads radial sections of two-dimensional power spectrum density function."
msgstr ""
-#: modules/process/fft_profile.c:140
+#: modules/process/fft_profile.c:139
msgid "/_Statistics/_PSDF Section..."
msgstr ""
-#: modules/process/fft_profile.c:144
+#: modules/process/fft_profile.c:143
msgid "Read radial PSDF sections"
msgstr ""
-#: modules/process/fft_profile.c:190
+#: modules/process/fft_profile.c:189
msgid "Radial PSDF Section"
msgstr ""
-#: modules/process/fft_profile.c:237
+#: modules/process/fft_profile.c:236
msgid "PSDF Section"
msgstr ""
-#: modules/process/fft_profile.c:266 modules/process/grain_dist.c:336
-#: modules/tools/profile.c:517 modules/tools/sfunctions.c:443
-msgid "_Fix res.:"
-msgstr ""
+# Translation for this string generated by http://littlesvr.ca/ostd/
+# based on translation from "gimp"
+#: modules/process/fft_profile.c:266 modules/process/grain_dist.c:338
+#: modules/tools/profile.c:514 modules/tools/sfunctions.c:454
+#, fuzzy
+msgid "_Fixed resolution:"
+msgstr "Resolución _X:"
-#: modules/process/fft_profile.c:279
+#: modules/process/fft_profile.c:278
msgid "_Separate curves"
msgstr ""
-#: modules/process/fft_profile.c:496
+#: modules/process/fft_profile.c:483
#, c-format
msgid "PSDF %.0f°"
msgstr ""
@@ -10189,11 +10501,15 @@ msgstr ""
msgid "Spectral Synthesis"
msgstr ""
-#: modules/process/fft_synth.c:429
+#: modules/process/fft_synth.c:430
msgid "M_inimum frequency:"
msgstr ""
-#: modules/process/fft_synth.c:449
+#: modules/process/fft_synth.c:430 modules/process/fft_synth.c:450
+msgid "px<sup>-1</sup>"
+msgstr ""
+
+#: modules/process/fft_synth.c:450
msgid "Ma_ximum frequency:"
msgstr ""
@@ -10213,95 +10529,177 @@ msgstr ""
msgid "Enable _power multiplier"
msgstr ""
-#: modules/process/fit-shape.c:270
+#: modules/process/fibre_synth.c:256
+msgid "Semi-circle"
+msgstr ""
+
+#: modules/process/fibre_synth.c:257
+#, fuzzy
+msgid "Triangle"
+msgstr "Triangular"
+
+# Translation for this string generated by http://littlesvr.ca/ostd/
+# based on translation from "inkscape"
+#: modules/process/fibre_synth.c:258
+#, fuzzy
+msgid "Rectangle"
+msgstr "Rectángulos"
+
+#: modules/process/fibre_synth.c:260
+msgid "Quadratic spline"
+msgstr ""
+
+#: modules/process/fibre_synth.c:266
+msgid "Generates surfaces composed from randomly placed fibers."
+msgstr ""
+
+#: modules/process/fibre_synth.c:280
+msgid "/S_ynthetic/_Deposition/_Fibers..."
+msgstr ""
+
+#: modules/process/fibre_synth.c:284
+msgid "Generate surface of randomly placed fibers"
+msgstr ""
+
+# Translation for this string generated by http://littlesvr.ca/ostd/
+# based on translation from "fontforge"
+#: modules/process/fibre_synth.c:420
+#, fuzzy
+msgid "Random Fibers"
+msgstr "Al azar"
+
+#: modules/process/fibre_synth.c:494 modules/process/obj_synth.c:510
+msgid "_Shape:"
+msgstr ""
+
+#: modules/process/fibre_synth.c:513 modules/process/obj_synth.c:529
+msgid "obj."
+msgstr ""
+
+#: modules/process/fibre_synth.c:553
+msgid "Scales _with width"
+msgstr ""
+
+# Translation for this string generated by http://littlesvr.ca/ostd/
+# based on translation from "compiz-fusion-plugins-extra"
+#: modules/process/fibre_synth.c:591 modules/process/synth.h:485
+msgid "Deformation"
+msgstr "Deformación"
+
+#: modules/process/fibre_synth.c:600 modules/process/lno_synth.c:852
+#: modules/process/lno_synth.c:1222 modules/process/mask_noisify.c:177
+msgid "Densi_ty:"
+msgstr "Densi_dad:"
+
+#: modules/process/fibre_synth.c:607
+#, fuzzy
+msgid "_Lateral:"
+msgstr "Material GL"
+
+# Translation for this string generated by http://littlesvr.ca/ostd/
+# based on translation from "audacious-plugins"
+#: modules/process/fibre_synth.c:614
+#, fuzzy
+msgid "Le_ngthwise:"
+msgstr "Longitud"
+
+#: modules/process/fibre_synth.c:819
+msgid "Along fiber:"
+msgstr ""
+
+#: modules/process/fibre_synth.c:1180
+msgid "Generating fibers..."
+msgstr ""
+
+#: modules/process/fit-shape.c:264
msgid "Fits predefined geometrical shapes to data."
msgstr ""
-#: modules/process/fit-shape.c:284
+#: modules/process/fit-shape.c:278
msgid "/_Level/_Fit Shape..."
msgstr ""
-#: modules/process/fit-shape.c:288 modules/process/fit-shape.c:295
+#: modules/process/fit-shape.c:282 modules/process/fit-shape.c:289
msgid "Fit geometrical shapes"
msgstr ""
-#: modules/process/fit-shape.c:291
+#: modules/process/fit-shape.c:285
msgid "/_Fit Shape..."
msgstr ""
-#: modules/process/fit-shape.c:390
+#: modules/process/fit-shape.c:389
#, fuzzy
msgid "Fit Shape"
msgstr "Aproxima esfera"
-#: modules/process/fit-shape.c:395
+#: modules/process/fit-shape.c:396
#, fuzzy
msgid "verb|_Quick Fit"
msgstr "_Ajustar"
-#: modules/process/fit-shape.c:473 modules/process/fit-shape.c:2159
+#: modules/process/fit-shape.c:474 modules/process/fit-shape.c:2141
msgid "Derived Quantities"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "gimp-gap"
-#: modules/process/fit-shape.c:478 modules/process/fit-shape.c:2129
+#: modules/process/fit-shape.c:479 modules/process/fit-shape.c:2111
#, fuzzy
msgid "Mean square difference:"
msgstr "Diferencia"
-#: modules/process/fit-shape.c:580 modules/process/fit-shape.c:626
-#: modules/process/fit-shape.c:657 modules/process/fit-shape.c:661
+#: modules/process/fit-shape.c:590 modules/process/fit-shape.c:636
+#: modules/process/fit-shape.c:667 modules/process/fit-shape.c:671
msgid "Fitted shape"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "awn-extras-applets"
-#: modules/process/fit-shape.c:663 modules/process/mark_disconn.c:189
-#: modules/process/scars.c:281
+#: modules/process/fit-shape.c:673 modules/process/mark_disconn.c:189
+#: modules/process/scars.c:299
msgid "Both"
msgstr "Ambos"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "gimp"
-#: modules/process/fit-shape.c:680
+#: modules/process/fit-shape.c:690 modules/process/psf-fit.c:308
#, fuzzy
msgid "_Function type:"
msgstr "Tipo de función:"
-#: modules/process/fit-shape.c:708
+#: modules/process/fit-shape.c:720
msgid "Show differences with _adapted color map"
msgstr ""
-#: modules/process/fit-shape.c:720
+#: modules/process/fit-shape.c:732
msgid "Full fit is _geometric"
msgstr ""
-#: modules/process/fit-shape.c:757
+#: modules/process/fit-shape.c:769
msgid "Calculate differences for e_xcluded pixels"
msgstr ""
-#: modules/process/fit-shape.c:804
+#: modules/process/fit-shape.c:816
msgid "_Recalculate Image"
msgstr ""
-#: modules/process/fit-shape.c:811
+#: modules/process/fit-shape.c:823
msgid "Revert to _Previous Values"
msgstr ""
-#: modules/process/fit-shape.c:1850
+#: modules/process/fit-shape.c:1864
msgid "Parameter estimation failed"
msgstr ""
-#: modules/process/fit-shape.c:1853
+#: modules/process/fit-shape.c:1867
msgid "Fit failed"
msgstr ""
-#: modules/process/fit-shape.c:1855
+#: modules/process/fit-shape.c:1869
msgid "Fit was interruped"
msgstr ""
-#: modules/process/fit-shape.c:2115
+#: modules/process/fit-shape.c:2097
msgid "(fixed)"
msgstr ""
@@ -10324,94 +10722,90 @@ msgstr ""
msgid "Polynomial leveling..."
msgstr "Polinómico"
-#: modules/process/fraccor.c:38
+#: modules/process/fraccor.c:39
msgid "Removes data under mask using fractal interpolation."
msgstr ""
-#: modules/process/fraccor.c:52
+#: modules/process/fraccor.c:53
msgid "/_Correct Data/_Fractal Correction"
msgstr ""
-#: modules/process/fraccor.c:56
+#: modules/process/fraccor.c:57
msgid "Interpolate data under mask with fractal interpolation"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "gimp-gap"
-#: modules/process/fractal.c:134
+#: modules/process/fractal.c:130
msgid "Partitioning"
msgstr "Particionado"
-#: modules/process/fractal.c:135
+#: modules/process/fractal.c:131
msgid "Cube counting"
msgstr ""
-#: modules/process/fractal.c:136
+#: modules/process/fractal.c:132
msgid "Triangulation"
msgstr "Triangulación"
-#: modules/process/fractal.c:137
+#: modules/process/fractal.c:133
msgid "Power spectrum"
msgstr ""
-#: modules/process/fractal.c:173
+#: modules/process/fractal.c:169
msgid ""
"Calculates fractal dimension using several methods (partitioning, box "
"counting, triangulation, power spectrum)."
msgstr ""
-#: modules/process/fractal.c:188
+#: modules/process/fractal.c:184
msgid "/_Statistics/_Fractal Dimension..."
msgstr ""
-#: modules/process/fractal.c:192
+#: modules/process/fractal.c:188
msgid "Calculate fractal dimension"
msgstr ""
-#: modules/process/fractal.c:227
+#: modules/process/fractal.c:223
msgid "Fractal Dimension"
msgstr ""
-#: modules/process/fractal.c:228
-msgid "Reco_mpute"
-msgstr ""
-
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "gok"
-#: modules/process/fractal.c:269
+#: modules/process/fractal.c:253
msgid "_Method:"
msgstr "_Método:"
-#: modules/process/fractal.c:290
+#: modules/process/fractal.c:269
msgid "Fit Area"
msgstr ""
-#: modules/process/fractal.c:295
-msgid "From:"
-msgstr "Desde:"
-
-#: modules/process/fractal.c:295 modules/process/fractal.c:589
-#: modules/process/fractal.c:613
+#: modules/process/fractal.c:273 modules/process/fractal.c:545
+#: modules/process/fractal.c:569
msgid "minimum"
msgstr "mínimo"
-#: modules/process/fractal.c:298
-msgid "To:"
-msgstr "A:"
+#: modules/process/fractal.c:274
+msgid "From:"
+msgstr "Desde:"
-#: modules/process/fractal.c:298 modules/process/fractal.c:590
-#: modules/process/fractal.c:614
+#: modules/process/fractal.c:279 modules/process/fractal.c:546
+#: modules/process/fractal.c:570
msgid "maximum"
msgstr "máximo"
+#: modules/process/fractal.c:280
+msgid "To:"
+msgstr "A:"
+
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "audacity"
-#: modules/process/fractal.c:308 modules/process/mark_with.c:390
-#: modules/process/neural.c:559
+#: modules/process/fractal.c:287 modules/process/mark_with.c:394
+#: modules/process/neural.c:563
msgid "Result"
msgstr "Resultado"
-#: modules/process/fractal.c:550
+#: modules/process/fractal.c:506
msgid "Linear fit"
msgstr ""
@@ -10481,11 +10875,11 @@ msgstr ""
msgid "Grain Correlations"
msgstr ""
-#: modules/process/grain_cross.c:240
+#: modules/process/grain_cross.c:241
msgid "_Abscissa"
msgstr "_Abscisa"
-#: modules/process/grain_cross.c:244
+#: modules/process/grain_cross.c:245
msgid "O_rdinate"
msgstr "O_rdenada"
@@ -10515,118 +10909,118 @@ msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "darktable"
-#: modules/process/grain_dist.c:553
+#: modules/process/grain_dist.c:547
msgid "count"
msgstr "contar"
-#: modules/process/grain_dist.c:617
+#: modules/process/grain_dist.c:611
msgid "Export Raw Grain Values"
msgstr ""
-#: modules/process/grain_edge.c:100
+#: modules/process/grain_edge.c:99
msgid "Marks grains by edge detection method."
msgstr ""
-#: modules/process/grain_edge.c:114
+#: modules/process/grain_edge.c:113
msgid "/_Grains/Mark by _Edge Detection..."
msgstr ""
-#: modules/process/grain_edge.c:118
+#: modules/process/grain_edge.c:117
msgid "Mark grains with edge detection mechanism"
msgstr ""
-#: modules/process/grain_edge.c:207
+#: modules/process/grain_edge.c:206
msgid "Mark Grains by Edge Detection"
msgstr ""
-#: modules/process/grain_edge.c:245
+#: modules/process/grain_edge.c:244
msgid "Threshold"
msgstr "Umbral"
-#: modules/process/grain_edge.c:249
+#: modules/process/grain_edge.c:248
msgid "_Laplacian:"
msgstr "_Laplaciano:"
-#: modules/process/grain_filter.c:195
+#: modules/process/grain_filter.c:194
msgid ""
"Filters grains by their properties, using logical expressions and thresholds."
msgstr ""
-#: modules/process/grain_filter.c:210
+#: modules/process/grain_filter.c:209
msgid "/_Grains/_Filter..."
msgstr ""
-#: modules/process/grain_filter.c:214
+#: modules/process/grain_filter.c:213
msgid "Filter grains by their properties"
msgstr ""
-#: modules/process/grain_filter.c:254
+#: modules/process/grain_filter.c:253
msgid "There are no grains to filter."
msgstr ""
-#: modules/process/grain_filter.c:310
+#: modules/process/grain_filter.c:309
msgid "Filter Grains"
msgstr ""
-#: modules/process/grain_filter.c:405
+#: modules/process/grain_filter.c:404
msgid "Set selected as:"
msgstr ""
-#: modules/process/grain_filter.c:420
+#: modules/process/grain_filter.c:419
msgid "Keep grains satisfying:"
msgstr ""
-#: modules/process/grain_filter.c:434 modules/process/lat_synth.c:733
+#: modules/process/grain_filter.c:440 modules/process/lat_synth.c:733
msgid "Lower threshold:"
msgstr ""
-#: modules/process/grain_filter.c:469 modules/process/lat_synth.c:740
+#: modules/process/grain_filter.c:467 modules/process/lat_synth.c:740
msgid "Upper threshold:"
msgstr ""
#. TRANSLATORS: %c is replaced with quantity label A, B or C.
-#: modules/process/grain_filter.c:645
+#: modules/process/grain_filter.c:628
#, c-format
msgid "Condition %c: %s"
msgstr "Condición %c: %s"
-#: modules/process/grain_mark.c:139
+#: modules/process/grain_mark.c:137
msgid "Marks grains by thresholding (height, slope, curvature)."
msgstr ""
-#: modules/process/grain_mark.c:153
+#: modules/process/grain_mark.c:151
msgid "/_Grains/_Mark by Threshold..."
msgstr ""
-#: modules/process/grain_mark.c:157
+#: modules/process/grain_mark.c:155
msgid "Mark grains by threshold"
msgstr ""
-#: modules/process/grain_mark.c:241
+#: modules/process/grain_mark.c:240
msgid "Mark Grains by Threshold"
msgstr ""
-#: modules/process/grain_mark.c:281
+#: modules/process/grain_mark.c:280
msgid "Threshold by"
msgstr ""
-#: modules/process/grain_mark.c:311
+#: modules/process/grain_mark.c:310
msgid "_Slope:"
msgstr "_Rampa:"
-#: modules/process/grain_mark.c:315
+#: modules/process/grain_mark.c:314
msgid "_Curvature:"
msgstr "_Curvatura:"
-#: modules/process/grain_mark.c:324
-msgid "Criteria combination:"
-msgstr ""
-
-#: modules/process/grain_mark.c:328 modules/process/grain_wshed.c:256
+#: modules/process/grain_mark.c:319 modules/process/grain_wshed.c:260
#: modules/process/wpour_mark.c:358
msgid "_Invert height"
msgstr ""
+#: modules/process/grain_mark.c:328
+msgid "Criteria combination:"
+msgstr ""
+
#: modules/process/grain_stat.c:54
msgid "Displays overall grain statistics."
msgstr ""
@@ -10703,448 +11097,460 @@ msgstr ""
msgid "Total projected boundary length:"
msgstr ""
-#: modules/process/grain_wshed.c:101
+#: modules/process/grain_wshed.c:102
msgid "Marks grains by watershed algorithm."
msgstr ""
-#: modules/process/grain_wshed.c:115
+#: modules/process/grain_wshed.c:116
msgid "/_Grains/Mark by _Watershed..."
msgstr ""
-#: modules/process/grain_wshed.c:119
+#: modules/process/grain_wshed.c:120
msgid "Mark grains by watershed"
msgstr ""
-#: modules/process/grain_wshed.c:161
+#: modules/process/grain_wshed.c:162
msgid "Mark Grains by Watershed"
msgstr ""
-#: modules/process/grain_wshed.c:199
+#: modules/process/grain_wshed.c:200
msgid "Grain Location"
msgstr ""
-#: modules/process/grain_wshed.c:214
+#: modules/process/grain_wshed.c:216
msgid "_Drop size:"
msgstr ""
-#: modules/process/grain_wshed.c:230
+#: modules/process/grain_wshed.c:233
msgid "Segmentation"
msgstr "Segmentación"
-#: modules/process/grain_wshed.c:236
+#: modules/process/grain_wshed.c:239
msgid "Num_ber of steps:"
msgstr ""
-#: modules/process/grain_wshed.c:244
+#: modules/process/grain_wshed.c:248
msgid "Dr_op size:"
msgstr ""
-#: modules/process/grain_wshed.c:435
+#: modules/process/grain_wshed.c:439
msgid "Finding minima..."
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "src"
-#: modules/process/grain_wshed.c:437
+#: modules/process/grain_wshed.c:441
#, fuzzy
msgid "Locating..."
msgstr "Iniciando..."
-#: modules/process/grain_wshed.c:439
+#: modules/process/grain_wshed.c:443
msgid "Simulating watershed..."
msgstr ""
-#: modules/process/grain_wshed.c:441
+#: modules/process/grain_wshed.c:445
msgid "Marking boundaries..."
msgstr ""
-#: modules/process/hough.c:74
+#: modules/process/hough.c:76
msgid "Hough transform."
msgstr ""
-#: modules/process/hough.c:88
+#: modules/process/hough.c:90
msgid "/_Integral Transforms/_Hough..."
msgstr ""
-#: modules/process/hough.c:92
+#: modules/process/hough.c:94
msgid "Compute Hough transform"
msgstr ""
-#: modules/process/hough.c:178
-msgid "Hough Transform"
-msgstr "Transformada de Hough"
-
-#: modules/process/hough.c:201
-msgid "_Transform type:"
-msgstr ""
+# Translation for this string generated by http://littlesvr.ca/ostd/
+# based on translation from "gimp"
+#: modules/process/hough.c:137
+#, fuzzy
+msgid "Hough line"
+msgstr "Rugosidad"
+
+#: modules/process/hough.c:141
+#, c-format
+msgid "Hough circle r=%d"
+msgstr ""
+
+#: modules/process/hough.c:173
+msgid "Hough Transform"
+msgstr "Transformada de Hough"
-#: modules/process/hough.c:212
+#: modules/process/hough.c:195
+msgid "_Transform type:"
+msgstr ""
+
+#: modules/process/hough.c:203
msgid "_Circle size:"
msgstr ""
-#: modules/process/immerse.c:162
+#: modules/process/immerse.c:163
msgid "Immerse high resolution detail into overall image."
msgstr ""
-#: modules/process/immerse.c:176
+#: modules/process/immerse.c:177
msgid "/M_ultidata/_Immerse Detail..."
msgstr ""
-#: modules/process/immerse.c:180
+#: modules/process/immerse.c:181
msgid "Immerse a detail into image"
msgstr ""
-#: modules/process/immerse.c:222
+#: modules/process/immerse.c:223
msgid "Immerse Detail"
msgstr ""
-#: modules/process/immerse.c:225
+#: modules/process/immerse.c:226
msgid "_Locate"
msgstr ""
-#: modules/process/immerse.c:227
+#: modules/process/immerse.c:228
msgid "Locate detail by full image correlation search"
msgstr ""
-#: modules/process/immerse.c:229
+#: modules/process/immerse.c:230
msgid "_Improve"
msgstr "_Mejorar"
-#: modules/process/immerse.c:231
+#: modules/process/immerse.c:232
msgid "Improve detail position by correlation search in neighborhood"
msgstr ""
-#: modules/process/immerse.c:290
+#: modules/process/immerse.c:291
msgid "_Detail image:"
msgstr ""
-#: modules/process/immerse.c:295
+#: modules/process/immerse.c:296
msgid "Position:"
msgstr "Posición:"
-#: modules/process/immerse.c:308
+#: modules/process/immerse.c:314
msgid "Result Sampling"
msgstr ""
-#: modules/process/immerse.c:318
+#: modules/process/immerse.c:324
msgid "_Upsample large image"
msgstr ""
-#: modules/process/immerse.c:320
+#: modules/process/immerse.c:326
msgid "_Downsample detail"
msgstr ""
-#: modules/process/immerse.c:329
+#: modules/process/immerse.c:335
msgid "Detail Leveling"
msgstr ""
-#: modules/process/immerse.c:339
+#: modules/process/immerse.c:345
msgid "levelling|_None"
msgstr ""
-#: modules/process/immerse.c:341
+#: modules/process/immerse.c:347
msgid "_Mean value"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "orage"
-#: modules/process/immerse.c:349
+#: modules/process/immerse.c:355
msgid "Show _frame"
msgstr "Mostrar _marco"
-#: modules/process/immerse.c:787
+#: modules/process/immerse.c:793
msgid "Immersed detail"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "ario"
-#: modules/process/indent_analyze.c:261
+#: modules/process/indent_analyze.c:246
msgid "Do nothing"
msgstr "No hacer nada"
-#: modules/process/indent_analyze.c:262
+#: modules/process/indent_analyze.c:247
msgid "Plane level"
msgstr ""
-#: modules/process/indent_analyze.c:263
+#: modules/process/indent_analyze.c:248
msgid "Plane rotate"
msgstr ""
-#: modules/process/indent_analyze.c:267
+#: modules/process/indent_analyze.c:252
msgid "New"
msgstr "Nuevo"
-#: modules/process/indent_analyze.c:268
+#: modules/process/indent_analyze.c:253
msgid "AND"
msgstr "AND"
-#: modules/process/indent_analyze.c:269
+#: modules/process/indent_analyze.c:254
msgid "OR"
msgstr "OR"
-#: modules/process/indent_analyze.c:270
+#: modules/process/indent_analyze.c:255
msgid "NOT"
msgstr "NOT"
-#: modules/process/indent_analyze.c:271
+#: modules/process/indent_analyze.c:256
msgid "XOR"
msgstr "XOR"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "bluefish"
-#: modules/process/indent_analyze.c:275
+#: modules/process/indent_analyze.c:260
msgid "Nothing"
msgstr "Nada"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "compiz-fusion-plugins-extra"
-#: modules/process/indent_analyze.c:276
+#: modules/process/indent_analyze.c:261
msgid "Above"
msgstr "Arriba"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "compiz-fusion-plugins-extra"
-#: modules/process/indent_analyze.c:277
+#: modules/process/indent_analyze.c:262
msgid "Below"
msgstr "Debajo"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "gimp"
-#: modules/process/indent_analyze.c:278
+#: modules/process/indent_analyze.c:263
msgid "Plane"
msgstr "Plano"
-#: modules/process/indent_analyze.c:279
+#: modules/process/indent_analyze.c:264
msgid "Impression"
msgstr ""
-#: modules/process/indent_analyze.c:280
+#: modules/process/indent_analyze.c:265
msgid "Inner Pile-up"
msgstr ""
-#: modules/process/indent_analyze.c:281
+#: modules/process/indent_analyze.c:266
msgid "Outer Pile-up"
msgstr ""
-#: modules/process/indent_analyze.c:282
+#: modules/process/indent_analyze.c:267
msgid "Special points"
msgstr ""
-#: modules/process/indent_analyze.c:283
+#: modules/process/indent_analyze.c:268
msgid "Faces border"
msgstr ""
-#: modules/process/indent_analyze.c:287
+#: modules/process/indent_analyze.c:272
msgid "Vickers"
msgstr "Vickers"
-#: modules/process/indent_analyze.c:288
+#: modules/process/indent_analyze.c:273
msgid "Berkovich"
msgstr "Berkovich"
-#: modules/process/indent_analyze.c:289
+#: modules/process/indent_analyze.c:274
msgid "Berkovich (modified)"
msgstr "Berkovich (modificado)"
-#: modules/process/indent_analyze.c:290
+#: modules/process/indent_analyze.c:275
msgid "Knoop"
msgstr "Knoop"
-#: modules/process/indent_analyze.c:291
+#: modules/process/indent_analyze.c:276
msgid "Brinell"
msgstr "Brinell"
-#: modules/process/indent_analyze.c:292
+#: modules/process/indent_analyze.c:277
msgid "Cube corner"
msgstr "esquina de cubo"
-#: modules/process/indent_analyze.c:293
+#: modules/process/indent_analyze.c:278
msgid "Rockwell"
msgstr "Rockwell"
-#: modules/process/indent_analyze.c:303
+#: modules/process/indent_analyze.c:288
msgid "Analyses nanoindentation structure (volumes, surfaces, ...)."
msgstr ""
-#: modules/process/indent_analyze.c:320
+#: modules/process/indent_analyze.c:302
msgid "/_Tip and Indentation/_Analyze Imprint..."
msgstr ""
-#: modules/process/indent_analyze.c:439
+#: modules/process/indent_analyze.c:410
msgid "Marked _areas:"
msgstr ""
-#: modules/process/indent_analyze.c:445
+#: modules/process/indent_analyze.c:419
msgid "_Indentor type:"
msgstr ""
-#: modules/process/indent_analyze.c:451
+#: modules/process/indent_analyze.c:428
msgid "_Mask creation type:"
msgstr ""
-#: modules/process/indent_analyze.c:456
+#: modules/process/indent_analyze.c:434
msgid "Ref. plane _tolerance:"
msgstr ""
-#: modules/process/indent_analyze.c:460
+#: modules/process/indent_analyze.c:438
msgid "Angle _1 tolerance:"
msgstr ""
-#: modules/process/indent_analyze.c:485
+#: modules/process/indent_analyze.c:456
msgid "Indent center at"
msgstr ""
-#: modules/process/indent_analyze.c:488
+#: modules/process/indent_analyze.c:460
msgid "Maximum at"
msgstr ""
-#: modules/process/indent_analyze.c:491
+#: modules/process/indent_analyze.c:464
msgid "Max-min difference"
msgstr ""
-#: modules/process/indent_analyze.c:497
+#: modules/process/indent_analyze.c:472
msgid "Expected A<sub>d</sub>:"
msgstr ""
-#: modules/process/indent_analyze.c:505
+#: modules/process/indent_analyze.c:479
msgid "Expected A<sub>p</sub>:"
msgstr ""
-#: modules/process/indent_analyze.c:549
+#: modules/process/indent_analyze.c:489
msgid "Volume above-below"
msgstr ""
-#: modules/process/indent_analyze.c:558
+#: modules/process/indent_analyze.c:494
msgid "Indent. volume"
msgstr ""
-#: modules/process/indent_analyze.c:564
+#: modules/process/indent_analyze.c:502
msgid "Indent. A<sub>d</sub>"
msgstr ""
-#: modules/process/indent_analyze.c:573
+#: modules/process/indent_analyze.c:509
msgid "Indent. A<sub>p</sub>"
msgstr ""
-#: modules/process/indent_analyze.c:587
+#: modules/process/indent_analyze.c:517
msgid "Inner Pile-Up A<sub>d</sub>"
msgstr ""
-#: modules/process/indent_analyze.c:596
+#: modules/process/indent_analyze.c:525
msgid "Inner Pile-Up A<sub>p</sub>"
msgstr ""
-#: modules/process/indent_analyze.c:605
+#: modules/process/indent_analyze.c:533
msgid "Outer Pile-Up A<sub>d</sub>"
msgstr ""
-#: modules/process/indent_analyze.c:614
+#: modules/process/indent_analyze.c:541
msgid "Outer Pile-Up A<sub>p</sub>"
msgstr ""
-#: modules/process/indent_analyze.c:644
+#: modules/process/indent_analyze.c:569
msgid "Indentation statistics"
msgstr ""
-#: modules/process/indent_analyze.c:645
+#: modules/process/indent_analyze.c:570
msgid "_Compute & mark"
msgstr ""
-#: modules/process/indent_analyze.c:646
+#: modules/process/indent_analyze.c:571
msgid "_Save statistics"
msgstr "_Guardar estadísticas"
-#: modules/process/indent_analyze.c:1569
+#: modules/process/indent_analyze.c:1392
msgid "No statistics has been computed yet."
msgstr ""
-#: modules/process/indent_analyze.c:1577
+#: modules/process/indent_analyze.c:1400
msgid "Save Indentation Statistics"
msgstr "Guardar Estadísticas de Indentación"
-#: modules/process/indent_analyze.c:1615
+#: modules/process/indent_analyze.c:1438
#, c-format
msgid "Indentor: %s\n"
msgstr ""
-#: modules/process/indent_analyze.c:1619
+#: modules/process/indent_analyze.c:1442
#, c-format
msgid "Length units: %s\n"
msgstr ""
-#: modules/process/indent_analyze.c:1621
+#: modules/process/indent_analyze.c:1444
#, c-format
msgid "Indentation center at [%d, %d] px: %lf\n"
msgstr ""
-#: modules/process/indent_analyze.c:1623
+#: modules/process/indent_analyze.c:1446
#, c-format
msgid "Maximum at [%d, %d] is: %lf\n"
msgstr ""
-#: modules/process/indent_analyze.c:1625
+#: modules/process/indent_analyze.c:1448
#, c-format
msgid "Difference max-min: %lf\n"
msgstr ""
-#: modules/process/indent_analyze.c:1630
+#: modules/process/indent_analyze.c:1453
#, c-format
msgid "Area (projected) above plane: %g (%.1lf %%)\n"
msgstr ""
-#: modules/process/indent_analyze.c:1634
+#: modules/process/indent_analyze.c:1457
#, c-format
msgid "Area (projected) below plane: %g (%.1lf %%)\n"
msgstr ""
-#: modules/process/indent_analyze.c:1638
+#: modules/process/indent_analyze.c:1461
#, c-format
msgid "Area (projected) of plane: %g (%.1lf %%)\n"
msgstr ""
-#: modules/process/indent_analyze.c:1643
+#: modules/process/indent_analyze.c:1466
#, c-format
msgid "Area (developed) above %g (+%.1f %%)\n"
msgstr ""
-#: modules/process/indent_analyze.c:1646
+#: modules/process/indent_analyze.c:1469
#, c-format
msgid "Area (developed) below %g (+%.1lf %%)\n"
msgstr ""
-#: modules/process/indent_analyze.c:1650
+#: modules/process/indent_analyze.c:1473
#, c-format
msgid "Volume above: %g\n"
msgstr ""
-#: modules/process/indent_analyze.c:1652
+#: modules/process/indent_analyze.c:1475
#, c-format
msgid "Volume below: %g\n"
msgstr ""
-#: modules/process/indent_analyze.c:1654
+#: modules/process/indent_analyze.c:1477
#, c-format
msgid "Volume difference %g\n"
msgstr ""
-#: modules/process/indent_analyze.c:1658
+#: modules/process/indent_analyze.c:1481
msgid ""
"\n"
"Indentation\n"
msgstr ""
-#: modules/process/indent_analyze.c:1659
+#: modules/process/indent_analyze.c:1482
#, c-format
msgid "Volume %g\n"
msgstr "Volumen %g\n"
-#: modules/process/indent_analyze.c:1664
+#: modules/process/indent_analyze.c:1487
msgid ""
"\n"
"Indentation - Inner Pile-Up\n"
msgstr ""
-#: modules/process/indent_analyze.c:1670
+#: modules/process/indent_analyze.c:1493
msgid "Indentation - Outer Pile-Up\n"
msgstr ""
@@ -11256,13 +11662,6 @@ msgstr "Parámetros"
msgid "_Lattice:"
msgstr ""
-# Translation for this string generated by http://littlesvr.ca/ostd/
-# based on translation from "control-center"
-#: modules/process/lat_synth.c:651 modules/process/obj_synth.c:544
-#: modules/process/pat_synth.c:1457
-msgid "_Size:"
-msgstr "_Tamaño:"
-
#: modules/process/lat_synth.c:662
msgid "Lattice rela_xation:"
msgstr ""
@@ -11400,7 +11799,7 @@ msgstr ""
# based on translation from "abiword"
#: modules/process/level_grains.c:187 modules/process/median-bg.c:167
#: modules/process/polylevel.c:293 modules/process/polylevel.c:417
-#: modules/process/sphere-revolve.c:200
+#: modules/process/sphere-revolve.c:221 modules/process/sphere-revolve.c:295
msgid "Background"
msgstr "Fondo"
@@ -11412,178 +11811,177 @@ msgstr ""
msgid "Quantity to level:"
msgstr ""
-#: modules/process/level_grains.c:231 modules/process/linematch.c:866
-#: modules/process/median-bg.c:217 modules/process/polylevel.c:482
-#: modules/process/sphere-revolve.c:263
+#: modules/process/level_grains.c:231 modules/process/linematch.c:834
+#: modules/process/median-bg.c:217 modules/process/polylevel.c:485
+#: modules/process/sphere-revolve.c:371
msgid "E_xtract background"
msgstr ""
-#: modules/process/linecorrect.c:54
+#: modules/process/linecorrect.c:52
msgid "Corrects line defects (mostly experimental algorithms)."
msgstr ""
-#: modules/process/linecorrect.c:68
+#: modules/process/linecorrect.c:66
msgid "/_Correct Data/Ste_p Line Correction"
msgstr ""
-#: modules/process/linecorrect.c:72
+#: modules/process/linecorrect.c:70
msgid "Correct steps in lines"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "setup"
-#: modules/process/linematch.c:158 modules/tools/linestats.c:166
+#: modules/process/linematch.c:155 modules/tools/linestats.c:166
#: modules/volume/volume_linestat.c:143
msgid "Median"
msgstr "Medo"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "gimp-gap"
-#: modules/process/linematch.c:159
+#: modules/process/linematch.c:156
#, fuzzy
msgid "Median of differences"
msgstr "Diferencia"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "gnomint"
-#: modules/process/linematch.c:160
+#: modules/process/linematch.c:157
#, fuzzy
msgid "Modus"
msgstr "Módulo"
-#: modules/process/linematch.c:161
+#: modules/process/linematch.c:158
msgid "linematch|Matching"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "goffice"
-#: modules/process/linematch.c:162
+#: modules/process/linematch.c:159
#, fuzzy
msgid "linematch|Polynomial"
msgstr "Polinómico"
-#: modules/process/linematch.c:168
+#: modules/process/linematch.c:165
msgid "Aligns rows by various methods."
msgstr ""
-#: modules/process/linematch.c:182
+#: modules/process/linematch.c:179
msgid "/_Correct Data/_Align rows..."
msgstr ""
-#: modules/process/linematch.c:186
+#: modules/process/linematch.c:183
msgid "Align rows using various methods"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "abiword"
-#: modules/process/linematch.c:237 modules/process/linematch.c:265
+#: modules/process/linematch.c:234 modules/process/linematch.c:262
#, fuzzy
msgid "Row background"
msgstr "Fondo"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "clawsker"
-#: modules/process/linematch.c:266
+#: modules/process/linematch.c:263
#, fuzzy
msgid "Vertical position"
msgstr "Posición X"
-#: modules/process/linematch.c:267
+#: modules/process/linematch.c:264
msgid "Corrected offset"
msgstr ""
-#: modules/process/linematch.c:802
+#: modules/process/linematch.c:769
#, fuzzy
msgid "Align Rows"
msgstr "Nivela curvas de gráfico"
-#: modules/process/linematch.c:844
+#: modules/process/linematch.c:810
#, fuzzy
msgid "_Polynomial degree:"
msgstr "Polinomial(orden 0)"
-#: modules/process/linematch.c:876
+#: modules/process/linematch.c:844
#, fuzzy
msgid "Plot background _graph"
msgstr "_Presenta gráfico"
-#: modules/process/lno_synth.c:261 modules/process/noise_synth.c:188
+#: modules/process/lno_synth.c:259 modules/process/noise_synth.c:186
msgid "distribution|Triangular"
msgstr "Triangular"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "beast"
-#: modules/process/lno_synth.c:267 modules/process/pat_synth.c:213
+#: modules/process/lno_synth.c:265 modules/process/pat_synth.c:213
msgid "Steps"
msgstr "Pasos"
-#: modules/process/lno_synth.c:268
+#: modules/process/lno_synth.c:266
msgid "Scars"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "inkscape"
-#: modules/process/lno_synth.c:269 modules/process/pat_synth.c:214
+#: modules/process/lno_synth.c:267 modules/process/pat_synth.c:214
msgid "Ridges"
msgstr "Crestas"
-#: modules/process/lno_synth.c:275
+#: modules/process/lno_synth.c:273
msgid "Generates various kinds of line noise."
msgstr ""
-#: modules/process/lno_synth.c:289
+#: modules/process/lno_synth.c:287
msgid "/S_ynthetic/_Line Noise..."
msgstr ""
-#: modules/process/lno_synth.c:293
+#: modules/process/lno_synth.c:291
msgid "Generate line noise"
msgstr ""
-#: modules/process/lno_synth.c:431
+#: modules/process/lno_synth.c:429
msgid "Line Noise"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "help"
-#: modules/process/lno_synth.c:504
+#: modules/process/lno_synth.c:502
msgid "Distribution"
msgstr "Distribución"
-# Translation for this string generated by http://littlesvr.ca/ostd/
-# based on translation from "dia"
-#: modules/process/lno_synth.c:514 modules/process/noise_synth.c:414
-msgid "Direction:"
-msgstr "Dirección:"
+#: modules/process/lno_synth.c:512 modules/process/mask_noisify.c:158
+#: modules/process/noise_synth.c:412
+#, fuzzy
+msgid "Noise type:"
+msgstr "Características"
-#: modules/process/lno_synth.c:523 modules/process/noise_synth.c:423
+#: modules/process/lno_synth.c:521 modules/process/mask_noisify.c:167
+#: modules/process/noise_synth.c:421
msgid "S_ymmetrical"
msgstr "Simétrico"
-#: modules/process/lno_synth.c:524 modules/process/noise_synth.c:424
+#: modules/process/lno_synth.c:522 modules/process/mask_noisify.c:168
+#: modules/process/noise_synth.c:422
msgid "One-sided _positive"
msgstr ""
-#: modules/process/lno_synth.c:525 modules/process/noise_synth.c:425
+#: modules/process/lno_synth.c:523 modules/process/mask_noisify.c:169
+#: modules/process/noise_synth.c:423
msgid "One-sided _negative"
msgstr ""
-#: modules/process/lno_synth.c:546
+#: modules/process/lno_synth.c:544
msgid "Noise Type"
msgstr ""
-#: modules/process/lno_synth.c:551
+#: modules/process/lno_synth.c:549
msgid "_Noise type:"
msgstr ""
-#: modules/process/lno_synth.c:853 modules/process/lno_synth.c:1222
-msgid "Densi_ty:"
-msgstr "Densi_dad:"
-
-#: modules/process/lno_synth.c:864 modules/process/lno_synth.c:1233
+#: modules/process/lno_synth.c:863 modules/process/lno_synth.c:1233
msgid "_Within line:"
msgstr ""
-#: modules/process/lno_synth.c:871
+#: modules/process/lno_synth.c:870
msgid "C_umulative"
msgstr ""
@@ -11642,36 +12040,36 @@ msgstr ""
msgid "_Train logistic regression"
msgstr ""
-#: modules/process/logistic.c:275
+#: modules/process/logistic.c:274
#, fuzzy
msgid "_Gaussian blur"
msgstr "Gaussiano"
-#: modules/process/logistic.c:288
+#: modules/process/logistic.c:285
#, fuzzy
msgid "_Number of Gaussians:"
msgstr "_Número de Lados:"
-#: modules/process/logistic.c:296
+#: modules/process/logistic.c:293
msgid "_Sobel derivatives"
msgstr ""
-#: modules/process/logistic.c:307
+#: modules/process/logistic.c:303
#, fuzzy
msgid "_Laplacian"
msgstr "_Laplaciano:"
-#: modules/process/logistic.c:318
+#: modules/process/logistic.c:313
#, fuzzy
msgid "_Hessian"
msgstr "Gaussiano"
-#: modules/process/logistic.c:331
+#: modules/process/logistic.c:325
#, fuzzy
msgid "_Regularization parameter:"
msgstr "Guardar Parámetros de Rugosidad "
-#: modules/process/logistic.c:623 modules/process/neural.c:1101
+#: modules/process/logistic.c:616 modules/process/neural.c:1108
msgid "Training..."
msgstr "Entrenamiento..."
@@ -11689,15 +12087,15 @@ msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "goffice"
-#: modules/process/mark_disconn.c:187 modules/process/obj_synth.c:422
-#: modules/process/scars.c:279
+#: modules/process/mark_disconn.c:187 modules/process/obj_synth.c:419
+#: modules/process/scars.c:297
msgid "Positive"
msgstr "Positivo"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "compiz-fusion-plugins-extra"
-#: modules/process/mark_disconn.c:188 modules/process/obj_synth.c:423
-#: modules/process/scars.c:280
+#: modules/process/mark_disconn.c:188 modules/process/obj_synth.c:420
+#: modules/process/scars.c:298
msgid "Negative"
msgstr "Negativo"
@@ -11719,12 +12117,12 @@ msgstr "Radio medio"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "anjuta"
-#: modules/process/mark_disconn.c:563
+#: modules/process/mark_disconn.c:552
#, fuzzy
msgid "Filtering..."
msgstr "Filtro"
-#: modules/process/mark_disconn.c:590
+#: modules/process/mark_disconn.c:579
msgid "Marking outliers..."
msgstr ""
@@ -11740,55 +12138,59 @@ msgstr ""
msgid "Mask combining and modification"
msgstr ""
-#: modules/process/mark_with.c:192
+#: modules/process/mark_with.c:193
msgid "Mark With"
msgstr ""
-#: modules/process/mark_with.c:238
-msgid "Se_t mask"
+#: modules/process/mark_with.c:231 modules/process/mask_morph.c:209
+msgid "Operation:"
msgstr ""
#: modules/process/mark_with.c:239
-msgid "_Add mask"
+msgid "Se_t mask"
msgstr ""
#: modules/process/mark_with.c:240
-msgid "_Subtract mask"
+msgid "_Add mask"
msgstr ""
#: modules/process/mark_with.c:241
+msgid "_Subtract mask"
+msgstr ""
+
+#: modules/process/mark_with.c:242
msgid "_Intersect masks"
msgstr ""
-#: modules/process/mark_with.c:247
+#: modules/process/mark_with.c:248
msgid "Mark with:"
msgstr ""
-#: modules/process/mark_with.c:255
+#: modules/process/mark_with.c:256
msgid "with|_Mask"
msgstr ""
-#: modules/process/mark_with.c:257
+#: modules/process/mark_with.c:258
msgid "with|_Data"
msgstr ""
-#: modules/process/mark_with.c:259
+#: modules/process/mark_with.c:260
msgid "with|_Presentation"
msgstr ""
-#: modules/process/mark_with.c:293
+#: modules/process/mark_with.c:297
msgid "Marked data range:"
msgstr ""
-#: modules/process/mark_with.c:301
+#: modules/process/mark_with.c:305
msgid "_Minimum:"
msgstr "_Mínimo:"
-#: modules/process/mark_with.c:310
+#: modules/process/mark_with.c:314
msgid "M_aximum:"
msgstr "M_áximo:"
-#: modules/process/mark_with.c:378
+#: modules/process/mark_with.c:382
msgid "Operand"
msgstr ""
@@ -11835,122 +12237,122 @@ msgstr "Distribuir"
msgid "Preserve existing masks"
msgstr ""
-#: modules/process/mask_edt.c:95
+#: modules/process/mask_edt.c:89
msgid "Performs simple and true Euclidean distance transforms of masks."
msgstr ""
-#: modules/process/mask_edt.c:109
+#: modules/process/mask_edt.c:103
msgid "/_Mask/Distanc_e Transform..."
msgstr ""
-#: modules/process/mask_edt.c:113
+#: modules/process/mask_edt.c:107
msgid "Distance transform of mask"
msgstr ""
-#: modules/process/mask_edt.c:116
+#: modules/process/mask_edt.c:110
msgid "/_Mask/Thi_n"
msgstr ""
-#: modules/process/mask_edt.c:120
+#: modules/process/mask_edt.c:114
#, fuzzy
msgid "Thin mask"
msgstr "Editar máscara"
-#: modules/process/mask_edt.c:330 modules/process/mask_edt.c:352
+#: modules/process/mask_edt.c:164 modules/process/mask_edt.c:186
msgid "Distance Transform"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "geeqie"
-#: modules/process/mask_edt.c:340
+#: modules/process/mask_edt.c:174
msgid "Interior"
msgstr "Interior"
-#: modules/process/mask_edt.c:341
+#: modules/process/mask_edt.c:175
msgid "Exterior"
msgstr ""
-#: modules/process/mask_edt.c:342
+#: modules/process/mask_edt.c:176
msgid "Two-sided"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "xfce4-settings"
-#: modules/process/mask_edt.c:373 modules/tools/maskedit.c:634
+#: modules/process/mask_edt.c:207 modules/tools/maskedit.c:640
#, fuzzy
msgid "_Distance type:"
msgstr "_Distancia"
-#: modules/process/mask_edt.c:394 modules/tools/maskedit.c:640
+#: modules/process/mask_edt.c:228 modules/tools/maskedit.c:646
msgid "Shrink from _border"
msgstr ""
-#: modules/process/mask_morph.c:117
+#: modules/process/mask_morph.c:116
msgid "Performs basic morphological operations with masks."
msgstr ""
-#: modules/process/mask_morph.c:131
-msgid "/_Mask/Morphological Operation..."
+#: modules/process/mask_morph.c:130
+msgid "/_Mask/Morpho_logical Operation..."
msgstr ""
-#: modules/process/mask_morph.c:135
+#: modules/process/mask_morph.c:134
msgid "Morphological operation with mask"
msgstr ""
-#: modules/process/mask_morph.c:169
+#: modules/process/mask_morph.c:168
#, fuzzy
msgid "Erosion"
msgstr "Erosión"
-#: modules/process/mask_morph.c:170
+#: modules/process/mask_morph.c:169
#, fuzzy
msgid "Dilation"
msgstr "Dilatación"
-#: modules/process/mask_morph.c:171 modules/tools/filter.c:242
+#: modules/process/mask_morph.c:170 modules/tools/filter.c:243
#, fuzzy
msgid "filter|Opening"
msgstr "Gaussiano"
-#: modules/process/mask_morph.c:172 modules/tools/filter.c:243
+#: modules/process/mask_morph.c:171 modules/tools/filter.c:244
#, fuzzy
msgid "filter|Closing"
msgstr "Gaussiano"
-#: modules/process/mask_morph.c:173 modules/tools/filter.c:244
+#: modules/process/mask_morph.c:172 modules/tools/filter.c:245
msgid "ASF Opening"
msgstr ""
-#: modules/process/mask_morph.c:174 modules/tools/filter.c:245
+#: modules/process/mask_morph.c:173 modules/tools/filter.c:246
msgid "ASF Closing"
msgstr ""
-#: modules/process/mask_morph.c:178
+#: modules/process/mask_morph.c:177
msgid "Octagon"
msgstr ""
-#: modules/process/mask_morph.c:181
+#: modules/process/mask_morph.c:180
msgid "Another mask"
msgstr ""
-#: modules/process/mask_morph.c:192
+#: modules/process/mask_morph.c:191
msgid "Morphological Operation"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "bygfoot"
-#: modules/process/mask_morph.c:224
+#: modules/process/mask_morph.c:223
#, fuzzy
msgid "Structuring element:"
msgstr "Formación"
-#: modules/process/mask_morph.c:238 modules/tools/maskedit.c:524
+#: modules/process/mask_morph.c:237 modules/tools/maskedit.c:528
msgid "_Radius:"
msgstr "_Radio:"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "gimp"
-#: modules/process/mask_morph.c:249
+#: modules/process/mask_morph.c:248
#, fuzzy
msgid "_Mask:"
msgstr "_Máscara"
@@ -11959,39 +12361,63 @@ msgstr "_Máscara"
msgid "_Trim empty borders"
msgstr ""
-#: modules/process/maskcor.c:86
+#: modules/process/mask_noisify.c:83
+msgid "Adds salt and/or pepper noise to mask."
+msgstr ""
+
+# Translation for this string generated by http://littlesvr.ca/ostd/
+# based on translation from "dia"
+#: modules/process/mask_noisify.c:97
+#, fuzzy
+msgid "/_Mask/_Noisify..."
+msgstr "Distribuir"
+
+#: modules/process/mask_noisify.c:101
+#, fuzzy
+msgid "Add noise to mask"
+msgstr "Editar máscara"
+
+#: modules/process/mask_noisify.c:141
+msgid "Noisify Mask"
+msgstr ""
+
+#: modules/process/mask_noisify.c:184
+msgid "_Alter only boundaries"
+msgstr ""
+
+#: modules/process/maskcor.c:87
msgid "Creates mask by correlation with another data."
msgstr ""
-#: modules/process/maskcor.c:100
+#: modules/process/maskcor.c:101
msgid "/M_ultidata/_Mask by Correlation..."
msgstr ""
-#: modules/process/maskcor.c:104
+#: modules/process/maskcor.c:105
msgid "Create mask by correlation with another data"
msgstr ""
-#: modules/process/maskcor.c:141
+#: modules/process/maskcor.c:142
msgid "Mask by Correlation"
msgstr ""
-#: modules/process/maskcor.c:165
+#: modules/process/maskcor.c:166
msgid "Correlation _kernel:"
msgstr ""
-#: modules/process/maskcor.c:172
+#: modules/process/maskcor.c:173
msgid "Objects marked"
msgstr ""
-#: modules/process/maskcor.c:173
+#: modules/process/maskcor.c:174
msgid "Correlation maxima"
msgstr ""
-#: modules/process/maskcor.c:174 modules/process/maskcor.c:356
+#: modules/process/maskcor.c:175 modules/process/maskcor.c:360
msgid "Correlation score"
msgstr ""
-#: modules/process/maskcor.c:183
+#: modules/process/maskcor.c:185
msgid "Correlation _method:"
msgstr ""
@@ -12020,7 +12446,8 @@ msgid "/_Mask/_Extract Mask"
msgstr ""
#: modules/process/maskops.c:78
-msgid "Extract mask to a new channel"
+#, fuzzy
+msgid "Extract mask to a new image"
msgstr "Extrae máscara a un nuevo canal"
#: modules/process/maskops.c:81
@@ -12047,35 +12474,31 @@ msgstr ""
msgid "Mutual Crop"
msgstr ""
-#: modules/process/mcrop.c:174
+#: modules/process/mcrop.c:173
msgid "_Select second argument:"
msgstr ""
-#: modules/process/measure_lattice.c:174
+#: modules/process/measure_lattice.c:165
msgid "Measures parameters of two-dimensional lattices."
msgstr ""
-#: modules/process/measure_lattice.c:188
+#: modules/process/measure_lattice.c:179
msgid "/_Statistics/Measure _Lattice..."
msgstr ""
-#: modules/process/measure_lattice.c:192
+#: modules/process/measure_lattice.c:183
msgid "Measure lattice"
msgstr ""
-#: modules/process/measure_lattice.c:253
+#: modules/process/measure_lattice.c:243
msgid "Measure Lattice"
msgstr ""
-#: modules/process/measure_lattice.c:259
-msgid "_Refine"
-msgstr ""
-
-#: modules/process/measure_lattice.c:330
+#: modules/process/measure_lattice.c:320
msgid "_ACF"
msgstr ""
-#: modules/process/measure_lattice.c:331
+#: modules/process/measure_lattice.c:321
msgid "_PSDF"
msgstr ""
@@ -12094,40 +12517,40 @@ msgstr ""
msgid "_Vectors"
msgstr ""
-#: modules/process/measure_lattice.c:596
+#: modules/process/measure_lattice.c:589
#, fuzzy
msgid "Save Lattice Parameters"
msgstr "Guardar Parámetros de Rugosidad "
-#: modules/process/measure_lattice.c:634
+#: modules/process/measure_lattice.c:627
#, c-format
msgid "Vector %d:"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "audacious-plugins"
-#: modules/process/measure_lattice.c:643
+#: modules/process/measure_lattice.c:636
#, fuzzy, c-format
msgid "Length %d:"
msgstr "Longitud"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "cssed"
-#: modules/process/measure_lattice.c:650
+#: modules/process/measure_lattice.c:643
#, fuzzy, c-format
msgid "Angle %d:"
msgstr "Ángulo"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "cssed"
-#: modules/process/measure_lattice.c:665
+#: modules/process/measure_lattice.c:657
#, fuzzy
msgid "Angle:"
msgstr "Ángulo"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "audacity"
-#: modules/process/measure_lattice.c:681
+#: modules/process/measure_lattice.c:673
#, fuzzy
msgid "Lattice Parameters"
msgstr "Parámetros"
@@ -12155,11 +12578,11 @@ msgstr "Polinómico"
msgid "Median Level"
msgstr ""
-#: modules/process/median-bg.c:199 modules/process/sphere-revolve.c:237
+#: modules/process/median-bg.c:199 modules/process/sphere-revolve.c:336
msgid "Real _radius:"
msgstr ""
-#: modules/process/median-bg.c:209 modules/process/sphere-revolve.c:247
+#: modules/process/median-bg.c:209 modules/process/sphere-revolve.c:346
msgid "_Pixel radius:"
msgstr ""
@@ -12208,7 +12631,7 @@ msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "enigma"
-#: modules/process/merge.c:197 modules/xyz/xyz_raster.c:643
+#: modules/process/merge.c:197 modules/xyz/xyz_raster.c:612
#, fuzzy
msgid "Average"
msgstr "Media:"
@@ -12264,6 +12687,250 @@ msgstr ""
msgid "Merged images"
msgstr "Imágenes fusionadas"
+#: modules/process/mfm_current.c:163
+msgid "Simulation of current line magnetic field"
+msgstr ""
+
+#: modules/process/mfm_current.c:177
+msgid "/SPM M_odes/_MFM/_Current Line Field..."
+msgstr ""
+
+#: modules/process/mfm_current.c:181
+msgid "Simulate stray field above current line"
+msgstr ""
+
+#: modules/process/mfm_current.c:280 modules/process/mfm_parallel.c:282
+msgid "Simulated field"
+msgstr ""
+
+#: modules/process/mfm_current.c:322 modules/process/mfm_field.c:266
+#: modules/process/mfm_parallel.c:324
+msgid "Point charge"
+msgstr ""
+
+# Translation for this string generated by http://littlesvr.ca/ostd/
+# based on translation from "coccinella"
+#: modules/process/mfm_current.c:323 modules/process/mfm_field.c:267
+#: modules/process/mfm_parallel.c:325
+#, fuzzy
+msgid "Bar"
+msgstr "Binario"
+
+#: modules/process/mfm_current.c:330
+msgid "Current Line Stray Field"
+msgstr ""
+
+# Translation for this string generated by http://littlesvr.ca/ostd/
+# based on translation from "calibre"
+#: modules/process/mfm_current.c:415
+#, fuzzy
+msgid "Output"
+msgstr "Opciones de salida"
+
+#: modules/process/mfm_current.c:420 modules/process/mfm_field.c:320
+#: modules/process/mfm_parallel.c:415
+msgid "_Output plane height:"
+msgstr ""
+
+#: modules/process/mfm_current.c:428
+#, fuzzy
+msgid "_Stripe width:"
+msgstr "Nueva _anchura:"
+
+#: modules/process/mfm_current.c:436
+msgid "Stripe _current:"
+msgstr ""
+
+#: modules/process/mfm_current.c:444
+#, fuzzy
+msgid "_Position:"
+msgstr "Posición:"
+
+#: modules/process/mfm_current.c:461
+msgid "Probe"
+msgstr ""
+
+#: modules/process/mfm_current.c:469
+#, fuzzy
+msgid "P_robe type:"
+msgstr "Características"
+
+#: modules/process/mfm_current.c:475 modules/process/mfm_field.c:389
+#: modules/process/mfm_parallel.c:482
+#, fuzzy
+msgid "Tip _magnetization:"
+msgstr "Punta _rotación:"
+
+#: modules/process/mfm_current.c:484 modules/process/mfm_field.c:397
+#: modules/process/mfm_parallel.c:491
+#, fuzzy
+msgid "Bar width _x:"
+msgstr "Nueva _anchura:"
+
+#: modules/process/mfm_current.c:493 modules/process/mfm_field.c:405
+#: modules/process/mfm_parallel.c:500
+#, fuzzy
+msgid "Bar width _y:"
+msgstr "Nueva _anchura:"
+
+#: modules/process/mfm_current.c:502 modules/process/mfm_field.c:413
+#: modules/process/mfm_parallel.c:509
+msgid "Bar length (_z):"
+msgstr ""
+
+#: modules/process/mfm_field.c:146
+msgid "Simulation of magnetic field above perpendicular media"
+msgstr ""
+
+#: modules/process/mfm_field.c:160
+msgid "/SPM M_odes/_MFM/_Perpendicular Media Field..."
+msgstr ""
+
+#: modules/process/mfm_field.c:164
+msgid "Compute stray field above perpendicular magnetic medium"
+msgstr ""
+
+#: modules/process/mfm_field.c:276
+msgid "Perpendicular Media Stray Field"
+msgstr ""
+
+# Translation for this string generated by http://littlesvr.ca/ostd/
+# based on translation from "gimp"
+#: modules/process/mfm_field.c:328 modules/process/mfm_parallel.c:423
+#, fuzzy
+msgid "_Film thickness:"
+msgstr "G_rosor:"
+
+#: modules/process/mfm_field.c:336
+msgid "_Magnetic charge:"
+msgstr ""
+
+#: modules/process/mfm_field.c:344
+msgid "Include domain _walls"
+msgstr ""
+
+#: modules/process/mfm_field.c:354
+msgid "_Exchange constant:"
+msgstr ""
+
+#: modules/process/mfm_field.c:362
+#, fuzzy
+msgid "_Uniaxial anisotropy:"
+msgstr "Punta _pendiente:"
+
+#: modules/process/mfm_field.c:383 modules/process/mfm_parallel.c:476
+#, fuzzy
+msgid "_Probe type:"
+msgstr "Características"
+
+#: modules/process/mfm_findshift.c:88
+msgid "Lift height difference estimation from data blur"
+msgstr ""
+
+#: modules/process/mfm_findshift.c:102
+msgid "/SPM M_odes/_MFM/_Estimate Shift in Z..."
+msgstr ""
+
+#: modules/process/mfm_findshift.c:106
+msgid "Estimate lift height difference in MFM data"
+msgstr ""
+
+# Translation for this string generated by http://littlesvr.ca/ostd/
+# based on translation from "banshee-community-extensions"
+#: modules/process/mfm_findshift.c:166 modules/process/psf.c:340
+#, fuzzy
+msgid "Searching..."
+msgstr "Escaneando..."
+
+#: modules/process/mfm_findshift.c:196
+#, fuzzy
+msgid "Estimated shift:"
+msgstr "Punta estimada"
+
+# Translation for this string generated by http://littlesvr.ca/ostd/
+# based on translation from "gimp-gap"
+#: modules/process/mfm_findshift.c:211
+#, fuzzy
+msgid "Shifted field difference"
+msgstr "Diferencia"
+
+#: modules/process/mfm_findshift.c:228
+msgid "Estimate Lift Height Shift"
+msgstr ""
+
+#: modules/process/mfm_findshift.c:255
+msgid "Data to compare:"
+msgstr ""
+
+#: modules/process/mfm_findshift.c:261
+#, fuzzy
+msgid "Search _from:"
+msgstr "Guardar Parámetros de Rugosidad "
+
+#: modules/process/mfm_findshift.c:269
+msgid "Search _to:"
+msgstr ""
+
+#: modules/process/mfm_parallel.c:165
+msgid "Simulation of parallel magnetic media"
+msgstr ""
+
+#: modules/process/mfm_parallel.c:179
+msgid "/SPM M_odes/_MFM/Para_llel Media Field..."
+msgstr ""
+
+#: modules/process/mfm_parallel.c:183
+msgid "Simulate stray field above parallel magnetic medium"
+msgstr ""
+
+#: modules/process/mfm_parallel.c:331
+msgid "Parallel Media Stray Field"
+msgstr ""
+
+#: modules/process/mfm_parallel.c:431
+#, fuzzy
+msgid "_Remanent magnetization:"
+msgstr "Punta _rotación:"
+
+#: modules/process/mfm_parallel.c:439
+msgid "Size _A (dir. left):"
+msgstr ""
+
+#: modules/process/mfm_parallel.c:447
+msgid "Size _B (dir. right):"
+msgstr ""
+
+# Translation for this string generated by http://littlesvr.ca/ostd/
+# based on translation from "po"
+#: modules/process/mfm_parallel.c:455
+#, fuzzy
+msgid "_Gap size:"
+msgstr "Intervalo:"
+
+#: modules/process/mfm_shift.c:87
+msgid "Simulation of magnetic field z component change for another level"
+msgstr ""
+
+#: modules/process/mfm_shift.c:101
+msgid "/SPM M_odes/_MFM/_Field Shift in Z..."
+msgstr ""
+
+#: modules/process/mfm_shift.c:105
+msgid "Compute stray field shift for another z level"
+msgstr ""
+
+#: modules/process/mfm_shift.c:146
+msgid "Shifted field"
+msgstr ""
+
+#: modules/process/mfm_shift.c:164
+msgid "Stray Field Plane Shift"
+msgstr ""
+
+#: modules/process/mfm_shift.c:209
+msgid "_Z shift by:"
+msgstr ""
+
#: modules/process/nanoindent_adjust.c:89
msgid "Adjust images of two indentor prints."
msgstr ""
@@ -12300,14 +12967,14 @@ msgstr ""
msgid "E_xtrapolate result data out of measured range"
msgstr ""
-#: modules/process/nanoindent_adjust.c:295
+#: modules/process/nanoindent_adjust.c:296
msgid ""
"Tip has different range/resolution ratio than image. Tip will be resampled."
msgstr ""
"Punta tiene distinto ratio de rango/resolución que la imagen. Punta será re-"
"muestreada."
-#: modules/process/nanoindent_adjust.c:334
+#: modules/process/nanoindent_adjust.c:335
msgid "Immersed detail data"
msgstr ""
@@ -12350,266 +13017,254 @@ msgstr ""
msgid "error"
msgstr "error"
-#: modules/process/neural.c:503
+#: modules/process/neural.c:504
msgid "NN training error"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "bygfoot"
-#: modules/process/neural.c:516
+#: modules/process/neural.c:517
msgid "Training"
msgstr "Entrenamiento"
-#: modules/process/neural.c:520
+#: modules/process/neural.c:521
msgid "_Model:"
msgstr "_Modelo:"
-#: modules/process/neural.c:530
+#: modules/process/neural.c:532
msgid "_Signal:"
msgstr "_Señal:"
-#: modules/process/neural.c:541
+#: modules/process/neural.c:544
msgid "Training ste_ps:"
msgstr ""
-#: modules/process/neural.c:557
+#: modules/process/neural.c:561
msgid "Model"
msgstr "Modelo"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "anjuta"
-#: modules/process/neural.c:558
+#: modules/process/neural.c:562
msgid "Signal"
msgstr "Señal"
-#: modules/process/neural.c:575
+#: modules/process/neural.c:579
msgid "verb|_Train"
msgstr "_Entrenar"
-#: modules/process/neural.c:580
+#: modules/process/neural.c:584
msgid "Re_initialize"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "audacious"
-#: modules/process/neural.c:613
+#: modules/process/neural.c:617
msgid "Network"
msgstr "Red"
-#: modules/process/neural.c:619
+#: modules/process/neural.c:623
msgid "Window _width:"
msgstr ""
-#: modules/process/neural.c:627
+#: modules/process/neural.c:631
msgid "Window h_eight:"
msgstr ""
-#: modules/process/neural.c:635
+#: modules/process/neural.c:639
msgid "_Hidden nodes:"
msgstr ""
-#: modules/process/neural.c:643
+#: modules/process/neural.c:647
msgid "Result Units"
msgstr ""
-#: modules/process/neural.c:650
+#: modules/process/neural.c:654
msgid "Power of source _XY:"
msgstr ""
-#: modules/process/neural.c:658
+#: modules/process/neural.c:663
msgid "Power of source _Z:"
msgstr ""
-#: modules/process/neural.c:666
+#: modules/process/neural.c:672
msgid "_Fixed units:"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "amule"
-#: modules/process/neural.c:676
+#: modules/process/neural.c:683
msgid "Networks"
msgstr "Redes"
-#: modules/process/neural.c:723
+#: modules/process/neural.c:730
msgid "Network _name:"
msgstr ""
-#: modules/process/neural.c:775
+#: modules/process/neural.c:782
msgid "Apply Neural Network"
msgstr ""
-#: modules/process/neural.c:798
+#: modules/process/neural.c:805
msgid "_Scale proportionally to input"
msgstr ""
-#: modules/process/neural.c:929
+#: modules/process/neural.c:936
msgid "Model and signal are not compatible."
msgstr ""
-#: modules/process/neural.c:937
+#: modules/process/neural.c:944
msgid "A field dimension is too small for chosen window size."
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "monodevelop"
-#: modules/process/neural.c:1183 modules/process/neural.c:1349
+#: modules/process/neural.c:1190 modules/process/neural.c:1356
msgid "Evaluating..."
msgstr "Evaluando..."
-#: modules/process/neural.c:1309
+#: modules/process/neural.c:1316
msgid "Training was canceled."
msgstr ""
-#: modules/process/neural.c:1319
+#: modules/process/neural.c:1326
#, c-format
msgid "Mean difference: %.*f %s"
msgstr ""
-#: modules/process/neural.c:1371
+#: modules/process/neural.c:1378
msgid "Evaluated signal"
msgstr ""
-#: modules/process/noise_synth.c:196
+#: modules/process/noise_synth.c:194
msgid "Generates uncorrelated random noise."
msgstr ""
-#: modules/process/noise_synth.c:210
+#: modules/process/noise_synth.c:208
msgid "/S_ynthetic/_Noise..."
msgstr ""
-#: modules/process/noise_synth.c:214
+#: modules/process/noise_synth.c:212
msgid "Generate surface of uncorrelated noise"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "pinta"
-#: modules/process/noise_synth.c:334
+#: modules/process/noise_synth.c:332
msgid "Random Noise"
msgstr "Ruido aleatorio"
-#: modules/process/obj_synth.c:274
+#: modules/process/obj_synth.c:270
msgid "Spheres"
msgstr "Esferas"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "gbrainy"
-#: modules/process/obj_synth.c:275
+#: modules/process/obj_synth.c:271
msgid "Boxes"
msgstr "Cajas"
-#: modules/process/obj_synth.c:276
+#: modules/process/obj_synth.c:272
msgid "Cones"
msgstr "Conos"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "freeciv"
-#: modules/process/obj_synth.c:277
+#: modules/process/obj_synth.c:273
msgid "Pyramids"
msgstr "Las Pirámides"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "help"
-#: modules/process/obj_synth.c:278
+#: modules/process/obj_synth.c:274
msgid "Diamonds"
msgstr "Diamantes"
-#: modules/process/obj_synth.c:279
+#: modules/process/obj_synth.c:275
msgid "Tetrahedrons"
msgstr "Tetraedros"
-#: modules/process/obj_synth.c:280
+#: modules/process/obj_synth.c:276
msgid "Nuggets"
msgstr "Pepitas"
-#: modules/process/obj_synth.c:281
+#: modules/process/obj_synth.c:277
msgid "Thatches"
msgstr "Paja"
-#: modules/process/obj_synth.c:282
+#: modules/process/obj_synth.c:278
msgid "Tents"
msgstr "Tiendas"
-#: modules/process/obj_synth.c:283
+#: modules/process/obj_synth.c:279
msgid "Gaussians"
msgstr "Gaussianas"
-#: modules/process/obj_synth.c:284
+#: modules/process/obj_synth.c:280
msgid "Doughnuts"
msgstr "Rosquillas"
-#: modules/process/obj_synth.c:285
+#: modules/process/obj_synth.c:281
#, fuzzy
msgid "Parabolic bumps"
msgstr "Paralelo"
-#: modules/process/obj_synth.c:291
+#: modules/process/obj_synth.c:287
msgid "Generates randomly patterned surfaces by placing objects."
msgstr ""
-#: modules/process/obj_synth.c:305
-msgid "/S_ynthetic/_Objects..."
+#: modules/process/obj_synth.c:301
+msgid "/S_ynthetic/_Deposition/_Objects..."
msgstr ""
-#: modules/process/obj_synth.c:309
+#: modules/process/obj_synth.c:305
msgid "Generate surface of randomly placed objects"
msgstr ""
-#: modules/process/obj_synth.c:424
+#: modules/process/obj_synth.c:421
msgid "Both (random)"
msgstr ""
-#: modules/process/obj_synth.c:439
+#: modules/process/obj_synth.c:436
msgid "Random Objects"
msgstr ""
-#: modules/process/obj_synth.c:513
-msgid "_Shape:"
-msgstr ""
-
-#: modules/process/obj_synth.c:531
-msgid "obj."
-msgstr ""
-
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "compiz-fusion-plugins-extra"
-#: modules/process/obj_synth.c:551
+#: modules/process/obj_synth.c:549
msgid "Aspect Ratio"
msgstr "Relacion de aspecto"
-#: modules/process/obj_synth.c:558
+#: modules/process/obj_synth.c:556
msgid "_Aspect ratio:"
msgstr ""
-#: modules/process/obj_synth.c:588
+#: modules/process/obj_synth.c:586
msgid "Scales _with size"
msgstr ""
-#: modules/process/obj_synth.c:612
+#: modules/process/obj_synth.c:611
#, fuzzy
msgid "_Feature type:"
msgstr "Características"
-#: modules/process/obj_synth.c:807
-msgid "_Truncate:"
-msgstr ""
-
-#: modules/process/otsu_threshold.c:39 modules/process/otsu_threshold.c:59
+#: modules/process/otsu_threshold.c:40 modules/process/otsu_threshold.c:60
msgid "Automated threshold using Otsu's method on heights."
msgstr ""
-#: modules/process/otsu_threshold.c:55
-msgid "/_Grains/_Mark by Otsu's..."
+#: modules/process/otsu_threshold.c:56
+msgid "/_Grains/_Mark by Otsu's"
msgstr ""
-#: modules/process/outliers.c:40
+#: modules/process/outliers.c:41
msgid "Creates mask of outliers."
msgstr ""
-#: modules/process/outliers.c:54
+#: modules/process/outliers.c:55
msgid "/_Correct Data/Mask of _Outliers"
msgstr ""
-#: modules/process/outliers.c:58
+#: modules/process/outliers.c:59
msgid "Mark data farther than 3σ from mean value"
msgstr ""
@@ -12639,87 +13294,110 @@ msgstr "Pa_trón:"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "amule"
-#: modules/process/pat_synth.c:812
+#: modules/process/pat_synth.c:813
msgid "Flat"
msgstr "Plano"
-#: modules/process/pat_synth.c:820
+#: modules/process/pat_synth.c:821
msgid "_Flat width:"
msgstr ""
-#: modules/process/pat_synth.c:837 modules/process/pat_synth.c:1139
-#: modules/process/pat_synth.c:1474
+#: modules/process/pat_synth.c:838 modules/process/pat_synth.c:1140
+#: modules/process/pat_synth.c:1475
msgid "_Slope width:"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "abiword"
-#: modules/process/pat_synth.c:1099
+#: modules/process/pat_synth.c:1100
msgid "Top"
msgstr "Superior"
-#: modules/process/pat_synth.c:1106
+#: modules/process/pat_synth.c:1107
msgid "Flat _top width:"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "abiword"
-#: modules/process/pat_synth.c:1114
+#: modules/process/pat_synth.c:1115
msgid "Bottom"
msgstr "Inferior"
-#: modules/process/pat_synth.c:1122
+#: modules/process/pat_synth.c:1123
msgid "Flat _bottom width:"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "xfce4-settings"
-#: modules/process/pat_synth.c:1440
+#: modules/process/pat_synth.c:1441
msgid "_Distance:"
msgstr "_Distancia"
-#: modules/process/pid.c:96
+#: modules/process/phase_synth.c:136
+msgid "Generates phase-separated structures."
+msgstr ""
+
+#: modules/process/phase_synth.c:150
+msgid "/S_ynthetic/P_hases..."
+msgstr ""
+
+#: modules/process/phase_synth.c:154
+msgid "Generate surface with separated phases"
+msgstr ""
+
+# Translation for this string generated by http://littlesvr.ca/ostd/
+# based on translation from "libgda4"
+#: modules/process/phase_synth.c:203
+#, fuzzy
+msgid "Separated Phases"
+msgstr "Valores separados por comas"
+
+#: modules/process/phase_synth.c:287
+msgid "Size s_pread:"
+msgstr ""
+
+#: modules/process/pid.c:95
msgid "A simple PID simulator"
msgstr ""
-#: modules/process/pid.c:110
+#: modules/process/pid.c:109
#, fuzzy
msgid "/_Tip and Indentation/_PID simulation..."
msgstr "/_Punta/_Dilatación... "
-#: modules/process/pid.c:114
+#: modules/process/pid.c:113
msgid "Simulate PID effects on measurement"
msgstr ""
-#: modules/process/pid.c:158
+#: modules/process/pid.c:157
msgid "PID FW result"
msgstr ""
-#: modules/process/pid.c:167
+#: modules/process/pid.c:166
msgid "PID FW max. force"
msgstr ""
-#: modules/process/pid.c:176
+#: modules/process/pid.c:175
msgid "PID REV result"
msgstr ""
-#: modules/process/pid.c:185
+#: modules/process/pid.c:184
msgid "PID REV max. force"
msgstr ""
-#: modules/process/pid.c:198
+#: modules/process/pid.c:196
msgid "PID simulation"
msgstr ""
-#: modules/process/pid.c:215
+#: modules/process/pid.c:214
msgid "_Proportional:"
msgstr ""
-#: modules/process/pid.c:221
+#: modules/process/pid.c:220
msgid "_Integral:"
msgstr ""
-#: modules/process/pid.c:227
+#: modules/process/pid.c:226
msgid "_Integration steps:"
msgstr ""
@@ -12727,15 +13405,15 @@ msgstr ""
msgid "_Derivative:"
msgstr ""
-#: modules/process/pid.c:241
+#: modules/process/pid.c:240
msgid "PID/scan speed _ratio:"
msgstr ""
-#: modules/process/pid.c:253
+#: modules/process/pid.c:255
msgid "Force strength:"
msgstr ""
-#: modules/process/pid.c:259
+#: modules/process/pid.c:261
msgid "Force setpoint:"
msgstr ""
@@ -12745,7 +13423,7 @@ msgstr ""
msgid "Scanning..."
msgstr "Escaneando..."
-#: modules/process/pid.c:396
+#: modules/process/pid.c:401
msgid "Computation diverged, try to change parameters"
msgstr ""
@@ -12765,23 +13443,23 @@ msgstr ""
msgid "Distort by Polynomial"
msgstr ""
-#: modules/process/polydistort.c:282
+#: modules/process/polydistort.c:285
msgid "Ori_ginal"
msgstr ""
-#: modules/process/polydistort.c:283
+#: modules/process/polydistort.c:286
msgid "_Transformed"
msgstr ""
-#: modules/process/polydistort.c:289
+#: modules/process/polydistort.c:292
msgid "X Coefficients"
msgstr ""
-#: modules/process/polydistort.c:303
+#: modules/process/polydistort.c:306
msgid "Y Coefficients"
msgstr ""
-#: modules/process/polydistort.c:499
+#: modules/process/polydistort.c:502
msgid "Distorted"
msgstr ""
@@ -12817,23 +13495,23 @@ msgstr ""
msgid "_Horizontal polynom degree:"
msgstr ""
-#: modules/process/polylevel.c:450
+#: modules/process/polylevel.c:451
msgid "_Vertical polynom degree:"
msgstr ""
-#: modules/process/polylevel.c:456
+#: modules/process/polylevel.c:458
msgid "_Same degrees"
msgstr ""
-#: modules/process/polylevel.c:474
+#: modules/process/polylevel.c:476
msgid "_Maximum polynom degree:"
msgstr ""
-#: modules/process/polylevel.c:561
+#: modules/process/polylevel.c:564
msgid "Polynomial Coefficients"
msgstr ""
-#: modules/process/polylevel.c:934 modules/tools/distance.c:594
+#: modules/process/polylevel.c:937 modules/tools/distance.c:594
#: modules/tools/selectionmanager.c:720
msgid "Save Table"
msgstr "Guardar Tabla"
@@ -12855,7 +13533,8 @@ msgid "/_Presentation/E_xtract Presentation"
msgstr ""
#: modules/process/presentationops.c:81
-msgid "Extract presentation to a new channel"
+#, fuzzy
+msgid "Extract presentation to a new image"
msgstr "Extraer presentación a un nuevo canal "
#: modules/process/presentationops.c:84
@@ -12882,6 +13561,10 @@ msgstr ""
msgid "_Data to attach:"
msgstr ""
+#: modules/process/preview.h:245
+msgid "Combine with existing mask:"
+msgstr ""
+
#: modules/process/psdf_logphi.c:76
msgid ""
"Two-dimensional FFT (Fast Fourier Transform) transformed to coordinates (log-"
@@ -12900,10 +13583,88 @@ msgstr ""
msgid "Log-Phi PSDF"
msgstr ""
-#: modules/process/psdf_logphi.c:275 modules/process/wpour_mark.c:320
+#: modules/process/psdf_logphi.c:276 modules/process/wpour_mark.c:320
+#, fuzzy
+msgid "Gaussian _smoothing:"
+msgstr "Gaussianas"
+
+#: modules/process/psf-fit.c:165
+#, fuzzy
+msgid "Gaussian (asymmetric)"
+msgstr "Gaussianas"
+
+#: modules/process/psf-fit.c:177
+msgid "Point spread function estimation by fitting explicit function form."
+msgstr ""
+
+#: modules/process/psf-fit.c:191
+msgid "/_Statistics/_PSF Fit..."
+msgstr ""
+
+#: modules/process/psf-fit.c:195
+msgid "Fit PSF from known data and image"
+msgstr ""
+
+#: modules/process/psf-fit.c:246 modules/process/psf.c:181
+#: modules/process/psf.c:230
+msgid "PSF"
+msgstr ""
+
+#: modules/process/psf-fit.c:254 modules/process/psf.c:195
+msgid "PSF*P"
+msgstr ""
+
+#: modules/process/psf-fit.c:271
+#, fuzzy
+msgid "Fit PSF"
+msgstr "Aproxima esfera"
+
+#: modules/process/psf-fit.c:289 modules/process/psf.c:286
+msgid "_Ideal response:"
+msgstr ""
+
+#: modules/process/psf.c:117
+#, fuzzy
+msgid "Point spread function estimation"
+msgstr "Estimación de punta ciega"
+
+#: modules/process/psf.c:131
+msgid "/_Statistics/_PSF Guess..."
+msgstr ""
+
+#: modules/process/psf.c:135
+msgid "Estimate PSF from known data and image"
+msgstr ""
+
+#: modules/process/psf.c:208
+msgid "PSF*P - I"
+msgstr ""
+
+#: modules/process/psf.c:231
+msgid "Convolved"
+msgstr ""
+
+#: modules/process/psf.c:237
+#, fuzzy
+msgid "Estimate PSF"
+msgstr "Estimar"
+
+#: modules/process/psf.c:238
+#, fuzzy
+msgid "_Fit"
+msgstr "_Ajustar"
+
+# Translation for this string generated by http://littlesvr.ca/ostd/
+# based on translation from "audacious-plugins"
+#: modules/process/psf.c:295
+#, fuzzy
+msgid "_Display:"
+msgstr "Mostrar:"
+
+#: modules/process/psf.c:301
#, fuzzy
-msgid "Gaussian _smoothing:"
-msgstr "Gaussianas"
+msgid "_Sigma init:"
+msgstr "_Señal:"
#: modules/process/rank.c:92
msgid "Enhances local contrast using a rank transform."
@@ -12961,7 +13722,7 @@ msgstr ""
msgid "Rotate by arbitrary angle"
msgstr ""
-#: modules/process/rotate.c:192
+#: modules/process/rotate.c:192 modules/volume/volume_swaxes.c:651
msgid "Rotated Data"
msgstr ""
@@ -13027,63 +13788,63 @@ msgstr ""
msgid "verb|Scale"
msgstr ""
-#: modules/process/scale.c:216
+#: modules/process/scale.c:217
msgid "Scale by _ratio:"
msgstr ""
-#: modules/process/scale.c:224
+#: modules/process/scale.c:225
msgid "_proportional"
msgstr ""
-#: modules/process/scale.c:235
+#: modules/process/scale.c:237
msgid "New _width:"
msgstr "Nueva _anchura:"
-#: modules/process/scale.c:243
+#: modules/process/scale.c:246
msgid "New _height:"
msgstr "Nueva _altura"
-#: modules/process/scars.c:113
+#: modules/process/scars.c:122
msgid "Marks and/or removes scars (horizontal linear artifacts)."
msgstr ""
-#: modules/process/scars.c:127
+#: modules/process/scars.c:136
msgid "/_Correct Data/M_ark Scars..."
msgstr ""
-#: modules/process/scars.c:131
+#: modules/process/scars.c:140
msgid "Mark horizontal scars (strokes)"
msgstr ""
-#: modules/process/scars.c:134
+#: modules/process/scars.c:143
msgid "/_Correct Data/Remove _Scars"
msgstr ""
-#: modules/process/scars.c:138
+#: modules/process/scars.c:147
msgid "Correct horizontal scars (strokes)"
msgstr ""
-#: modules/process/scars.c:293
+#: modules/process/scars.c:312
msgid "Mark Scars"
msgstr ""
-#: modules/process/scars.c:331
+#: modules/process/scars.c:353
msgid "Maximum _width:"
msgstr ""
-#: modules/process/scars.c:338
+#: modules/process/scars.c:361
msgid "Minimum _length:"
msgstr ""
-#: modules/process/scars.c:345
+#: modules/process/scars.c:369
msgid "_Hard threshold:"
msgstr ""
-#: modules/process/scars.c:353
+#: modules/process/scars.c:377
msgid "_Soft threshold:"
msgstr ""
-#: modules/process/scars.c:361
+#: modules/process/scars.c:385
msgid "Scars type:"
msgstr ""
@@ -13130,29 +13891,29 @@ msgstr ""
msgid "_Quality:"
msgstr ""
-#: modules/process/shade.c:92
+#: modules/process/shade.c:94
msgid "Creates a shaded presentation of data."
msgstr ""
-#: modules/process/shade.c:106
+#: modules/process/shade.c:108
msgid "/_Presentation/_Shading..."
msgstr ""
-#: modules/process/shade.c:110
+#: modules/process/shade.c:112
msgid "Shade data"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "abiword"
-#: modules/process/shade.c:207
+#: modules/process/shade.c:209
msgid "Shading"
msgstr "Sombreado"
-#: modules/process/shade.c:253
+#: modules/process/shade.c:260
msgid "_Mix:"
msgstr ""
-#: modules/process/slope_dist.c:161
+#: modules/process/slope_dist.c:160
msgid ""
"Calculates one- or two-dimensional distribution of slopes or graph of their "
"angular distribution."
@@ -13160,82 +13921,138 @@ msgstr ""
"Calcula una distribución uni y bi dimensional de rampas o gráfico de su "
"distribución angular"
-#: modules/process/slope_dist.c:176
+#: modules/process/slope_dist.c:175
msgid "/_Statistics/_Slope Distribution..."
msgstr ""
-#: modules/process/slope_dist.c:180
+#: modules/process/slope_dist.c:179
msgid "Calculate angular slope distribution"
msgstr ""
-#: modules/process/slope_dist.c:221
+#: modules/process/slope_dist.c:220
msgid "Slope distribution"
msgstr ""
-#: modules/process/slope_dist.c:253
+#: modules/process/slope_dist.c:252
msgid "_Two-dimensional distribution"
msgstr ""
-#: modules/process/slope_dist.c:254
+#: modules/process/slope_dist.c:253
msgid "Directional (φ) _graph"
msgstr "_gráfico Direccional (φ) "
-#: modules/process/slope_dist.c:255
+#: modules/process/slope_dist.c:254
msgid "_Inclination (θ) graph"
msgstr ""
-#: modules/process/slope_dist.c:256
+#: modules/process/slope_dist.c:255
msgid "Inclination (gra_dient) graph"
msgstr ""
-#: modules/process/slope_dist.c:270
+#: modules/process/slope_dist.c:269
msgid "Slope Distribution"
msgstr ""
-#: modules/process/slope_dist.c:755
+#: modules/process/slope_dist.c:749
msgid "Angular Slope Distribution"
msgstr ""
-#: modules/process/slope_dist.c:763 modules/process/tilt.c:179
+#: modules/process/slope_dist.c:757 modules/process/tilt.c:179
msgid "Slopes"
msgstr ""
-#: modules/process/slope_dist.c:824 modules/process/slope_dist.c:893
+#: modules/process/slope_dist.c:818 modules/process/slope_dist.c:887
msgid "Inclination Distribution"
msgstr ""
-#: modules/process/slope_dist.c:832 modules/process/slope_dist.c:901
+#: modules/process/slope_dist.c:826 modules/process/slope_dist.c:895
msgid "Inclinations"
msgstr ""
-#: modules/process/sphere-revolve.c:97
+#: modules/process/sphere-revolve.c:111
msgid "Subtracts background by arc or sphere revolution."
msgstr ""
-#: modules/process/sphere-revolve.c:113
+#: modules/process/sphere-revolve.c:125
msgid "/_Level/Revolve _Arc..."
msgstr ""
-#: modules/process/sphere-revolve.c:117
+#: modules/process/sphere-revolve.c:129
msgid "Level data by arc revolution"
msgstr ""
-#: modules/process/sphere-revolve.c:208 modules/tools/sfunctions.c:371
+#: modules/process/sphere-revolve.c:132
+msgid "/_Level/Revolve _Sphere..."
+msgstr ""
+
+#: modules/process/sphere-revolve.c:136
+msgid "Level data by sphere revolution"
+msgstr ""
+
+#: modules/process/sphere-revolve.c:303 modules/tools/sfunctions.c:381
msgid "_Horizontal direction"
msgstr ""
-#: modules/process/sphere-revolve.c:209 modules/tools/sfunctions.c:372
+#: modules/process/sphere-revolve.c:304 modules/tools/sfunctions.c:382
msgid "_Vertical direction"
msgstr ""
-#: modules/process/sphere-revolve.c:210
+#: modules/process/sphere-revolve.c:305
msgid "_Both directions"
msgstr ""
-#: modules/process/sphere-revolve.c:217
+#: modules/process/sphere-revolve.c:315
+#, fuzzy
+msgid "Revolve Sphere"
+msgstr "Esferas"
+
+#: modules/process/sphere-revolve.c:315
msgid "Revolve Arc"
msgstr ""
+# Translation for this string generated by http://littlesvr.ca/ostd/
+# based on translation from "dia"
+#: modules/process/sphere-revolve.c:355
+msgid "Direction:"
+msgstr "Dirección:"
+
+#: modules/process/sphere-revolve.c:699
+msgid "Revolving sphere..."
+msgstr ""
+
+#: modules/process/stitch.c:135
+msgid "Stitch multiple images based on offsets of origins."
+msgstr ""
+
+#: modules/process/stitch.c:149
+#, fuzzy
+msgid "/M_ultidata/_Stitch..."
+msgstr "/M_ultidatos/_Fusionar..."
+
+#: modules/process/stitch.c:153
+msgid "Stitch images using offsets"
+msgstr ""
+
+#: modules/process/stitch.c:269
+msgid "Stitch"
+msgstr ""
+
+# Translation for this string generated by http://littlesvr.ca/ostd/
+# based on translation from "gtk2_ardour"
+#: modules/process/stitch.c:312
+msgid "Channels"
+msgstr "Canales"
+
+#: modules/process/stitch.c:435
+#, fuzzy
+msgid "Restore"
+msgstr "_Archivar"
+
+#: modules/process/stitch.c:445 modules/tools/linestats.c:379
+#: modules/tools/sfunctions.c:440 modules/tools/stats.c:406
+msgid "_Instant updates"
+msgstr ""
+
#: modules/process/straighten_path.c:126
msgid "Extracts a straightened part of image along a curve."
msgstr ""
@@ -13252,35 +14069,35 @@ msgstr ""
msgid "Straighten Path"
msgstr ""
-#: modules/process/straighten_path.c:254
+#: modules/process/straighten_path.c:253
#, fuzzy
msgid "Res_tore"
msgstr "_Archivar"
-#: modules/process/straighten_path.c:259
+#: modules/process/straighten_path.c:258
msgid "Re_verse"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "gimp"
#: modules/process/straighten_path.c:278 modules/tools/pathlevel.c:256
-#: modules/tools/profile.c:507 modules/tools/roughness.c:854
+#: modules/tools/profile.c:503 modules/tools/roughness.c:868
msgid "_Thickness:"
msgstr "G_rosor:"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "gimp"
-#: modules/process/straighten_path.c:286
+#: modules/process/straighten_path.c:287
#, fuzzy
msgid "_Slackness:"
msgstr "G_rosor:"
-#: modules/process/straighten_path.c:292
+#: modules/process/straighten_path.c:293
#, fuzzy
msgid "C_losed curve"
msgstr "Cierra archivo"
-#: modules/process/straighten_path.c:379
+#: modules/process/straighten_path.c:380
msgid "Straightened"
msgstr ""
@@ -13301,62 +14118,60 @@ msgstr ""
msgid "Supres"
msgstr ""
-#: modules/process/superresolution.c:421
+#: modules/process/superresolution.c:420
msgid "Correlating to determine mean shift..."
msgstr ""
-#: modules/process/superresolution.c:511
+#: modules/process/superresolution.c:510
msgid "Cross-correlation..."
msgstr ""
-#: modules/process/superresolution.c:554 modules/xyz/xyz_raster.c:1079
-#: modules/xyz/xyz_raster.c:1119
+#: modules/process/superresolution.c:553 modules/xyz/xyz_raster.c:1053
+#: modules/xyz/xyz_raster.c:1093
msgid "Interpolating..."
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "gtk2-engines-murrine"
-#: modules/process/synth.h:343
+#: modules/process/synth.h:344
msgid "Roundness"
msgstr "Redondez"
-#: modules/process/synth.h:351
+#: modules/process/synth.h:352
msgid "Roundn_ess:"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "data"
-#: modules/process/synth.h:399
+#: modules/process/synth.h:401
msgid "Orientation"
msgstr "Orientación"
-#: modules/process/synth.h:408
+#: modules/process/synth.h:410
msgid "Orien_tation:"
msgstr ""
+#: modules/process/synth.h:436
+msgid "_Truncate:"
+msgstr ""
+
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "grisbi"
-#: modules/process/synth.h:432
+#: modules/process/synth.h:460
msgid "Variance:"
msgstr "Variación: "
# Translation for this string generated by http://littlesvr.ca/ostd/
-# based on translation from "compiz-fusion-plugins-extra"
-#: modules/process/synth.h:456
-msgid "Deformation"
-msgstr "Deformación"
-
-# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "gimp"
-#: modules/process/synth.h:464
+#: modules/process/synth.h:493
msgid "_Amplitude:"
msgstr "_Amplitud:"
-#: modules/process/synth.h:472
+#: modules/process/synth.h:501
msgid "_Lateral scale:"
msgstr ""
-#: modules/process/synth.h:566
+#: modules/process/synth.h:595
msgid "Randomi_ze"
msgstr ""
@@ -13372,41 +14187,41 @@ msgstr ""
msgid "Limit data range"
msgstr ""
-#: modules/process/threshold.c:246
+#: modules/process/threshold.c:241
msgid "Limit Range"
msgstr ""
-#: modules/process/threshold.c:281
+#: modules/process/threshold.c:276
msgid "Specify _thresholds"
msgstr ""
-#: modules/process/threshold.c:283
+#: modules/process/threshold.c:278
msgid "Use _display range"
msgstr ""
-#: modules/process/threshold.c:285
+#: modules/process/threshold.c:280
msgid "Cut off outlier_s"
msgstr ""
-#: modules/process/threshold.c:294
+#: modules/process/threshold.c:289
msgid "_Lower:"
msgstr ""
-#: modules/process/threshold.c:300
+#: modules/process/threshold.c:295
msgid "_Upper:"
msgstr ""
-#: modules/process/threshold.c:305
+#: modules/process/threshold.c:300
msgid "Set to _Full Range"
msgstr ""
#. TRANSLATORS: This is a range: 123 to 456.
-#: modules/process/threshold.c:318
+#: modules/process/threshold.c:313
#, c-format
msgid "%.*f to %.*f"
msgstr ""
-#: modules/process/threshold.c:341
+#: modules/process/threshold.c:336
msgid "F_arther than:"
msgstr ""
@@ -13428,11 +14243,11 @@ msgstr ""
msgid "Tilt"
msgstr "Mosaico"
-#: modules/process/tilt.c:185 modules/volume/volume_slice.c:444
+#: modules/process/tilt.c:185 modules/volume/volume_slice.c:446
msgid "_X:"
msgstr "_X:"
-#: modules/process/tilt.c:194 modules/volume/volume_slice.c:464
+#: modules/process/tilt.c:194 modules/volume/volume_slice.c:469
msgid "_Y:"
msgstr "_Y:"
@@ -13440,32 +14255,32 @@ msgstr "_Y:"
msgid "Angles"
msgstr ""
-#: modules/process/tip_blind.c:178
+#: modules/process/tip_blind.c:177
msgid "Blind estimation of SPM tip using Villarubia's algorithm."
msgstr "Estimación ciega de punta SPM usando el algoritmo de Villarubia. "
-#: modules/process/tip_blind.c:192
+#: modules/process/tip_blind.c:191
#, fuzzy
msgid "/_Tip and Indentation/_Blind Estimation..."
msgstr "/_Punta/_Estimación Ciega... "
-#: modules/process/tip_blind.c:196
+#: modules/process/tip_blind.c:195
msgid "Blind tip estimation"
msgstr "Estimación de punta ciega"
-#: modules/process/tip_blind.c:231
+#: modules/process/tip_blind.c:230
msgid "Blind Tip Estimation"
msgstr "Estimación ciega de punta"
-#: modules/process/tip_blind.c:232
+#: modules/process/tip_blind.c:231
msgid "Run _Partial"
msgstr ""
-#: modules/process/tip_blind.c:233
+#: modules/process/tip_blind.c:232
msgid "Run _Full"
msgstr ""
-#: modules/process/tip_blind.c:234
+#: modules/process/tip_blind.c:233
msgid "_Reset Tip"
msgstr ""
@@ -13473,78 +14288,78 @@ msgstr ""
msgid "Related _data:"
msgstr ""
-#: modules/process/tip_blind.c:326
+#: modules/process/tip_blind.c:327
msgid "Estimated Tip Size"
msgstr "Tamaño estimado de punta"
-#: modules/process/tip_blind.c:347
+#: modules/process/tip_blind.c:350
msgid "_Same resolution"
msgstr ""
-#: modules/process/tip_blind.c:366
+#: modules/process/tip_blind.c:376
msgid "Noise suppression t_hreshold:"
msgstr ""
-#: modules/process/tip_blind.c:386
+#: modules/process/tip_blind.c:384
msgid "Use _boundaries"
msgstr ""
-#: modules/process/tip_blind.c:396
+#: modules/process/tip_blind.c:395
msgid "Stripes"
msgstr "Rayas"
-#: modules/process/tip_blind.c:402
+#: modules/process/tip_blind.c:401
msgid "_Split to stripes:"
msgstr ""
-#: modules/process/tip_blind.c:416
+#: modules/process/tip_blind.c:412
msgid "_Preview stripe:"
msgstr ""
-#: modules/process/tip_blind.c:423
+#: modules/process/tip_blind.c:420
msgid "Plot size _graph"
msgstr ""
-#: modules/process/tip_blind.c:433
+#: modules/process/tip_blind.c:430
msgid "Create tip i_mages"
msgstr ""
#. TRANSLATORS: Prefix for the progressbar message.
-#: modules/process/tip_blind.c:810
+#: modules/process/tip_blind.c:807
#, c-format
msgid "Stripe %u: "
msgstr ""
-#: modules/process/tip_blind.c:917 modules/process/tip_blind.c:941
+#: modules/process/tip_blind.c:914 modules/process/tip_blind.c:938
msgid "Estimated tip"
msgstr "Punta estimada"
-#: modules/process/tip_blind.c:1207 modules/process/tip_blind.c:1216
+#: modules/process/tip_blind.c:1204 modules/process/tip_blind.c:1213
msgid "Tip radius evolution"
msgstr ""
-#: modules/process/tip_model.c:114
+#: modules/process/tip_model.c:112
msgid "Models SPM tip."
msgstr "Hace un modelo de una punta SPM"
-#: modules/process/tip_model.c:129
+#: modules/process/tip_model.c:127
#, fuzzy
msgid "/_Tip and Indentation/_Model Tip..."
msgstr "/_Punta/_Modelado de Punta..."
-#: modules/process/tip_model.c:133
+#: modules/process/tip_model.c:131
msgid "Model AFM tip"
msgstr "Modelo de punta AFM"
-#: modules/process/tip_model.c:164
+#: modules/process/tip_model.c:162
msgid "Model Tip"
msgstr "Modelo de punta"
-#: modules/process/tip_model.c:224
+#: modules/process/tip_model.c:222
msgid "Tip _type:"
msgstr "Punta _tipo:"
-#: modules/process/tip_model.c:229
+#: modules/process/tip_model.c:228
msgid "_Number of sides:"
msgstr "_Número de Lados:"
@@ -13556,21 +14371,21 @@ msgstr "Punta _pendiente:"
msgid "Tip _rotation:"
msgstr "Punta _rotación:"
-#: modules/process/tip_model.c:250
+#: modules/process/tip_model.c:255
msgid "Tip _apex radius:"
msgstr "Radio del _ápice de la punta "
-#: modules/process/tip_model.c:269
+#: modules/process/tip_model.c:265
#, fuzzy
msgid "Tip _anisotropy:"
msgstr "Punta _pendiente:"
-#: modules/process/tip_model.c:490
+#: modules/process/tip_model.c:484
#, fuzzy
msgid "Modeled tip"
msgstr "Punta Modelada "
-#: modules/process/tip_model.c:562
+#: modules/process/tip_model.c:556
#, c-format
msgid "Tip resolution: %d × %d pixels"
msgstr ""
@@ -13683,7 +14498,7 @@ msgid "Converts datafield to 3D volume data."
msgstr ""
#: modules/process/volumize.c:56
-msgid "/_Basic Operations/Volumize..."
+msgid "/_Basic Operations/Volumize"
msgstr ""
#: modules/process/volumize.c:60
@@ -13730,83 +14545,87 @@ msgstr ""
msgid "Z _range:"
msgstr ""
-#: modules/process/wave_synth.c:211
+#: modules/process/wave_synth.c:219
msgid "Generates various kinds of waves."
msgstr ""
-#: modules/process/wave_synth.c:225
+#: modules/process/wave_synth.c:233
msgid "/S_ynthetic/_Waves..."
msgstr ""
-#: modules/process/wave_synth.c:229
+#: modules/process/wave_synth.c:237
msgid "Generate waves"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "beast"
-#: modules/process/wave_synth.c:347
+#: modules/process/wave_synth.c:366
msgid "Waves"
msgstr "Ondas"
-#: modules/process/wave_synth.c:422 modules/tools/linestats.c:337
-#: modules/tools/sfunctions.c:401 modules/volume/volume_linestat.c:369
+#: modules/process/wave_synth.c:441 modules/tools/linestats.c:337
+#: modules/tools/sfunctions.c:411 modules/volume/volume_linestat.c:374
msgid "_Quantity:"
msgstr ""
-#: modules/process/wave_synth.c:429
+#: modules/process/wave_synth.c:448
msgid "_Number of waves:"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "gimp"
-#: modules/process/wave_synth.c:436 modules/process/wave_synth.c:582
-#: modules/tools/roughness.c:274
+#: modules/process/wave_synth.c:455 modules/process/wave_synth.c:617
+#: modules/tools/roughness.c:275
msgid "Amplitude"
msgstr "Amplitud"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "flumotion"
-#: modules/process/wave_synth.c:441
+#: modules/process/wave_synth.c:460
msgid "_Wave form:"
msgstr "_Forma de onda:"
-#: modules/process/wave_synth.c:448
+#: modules/process/wave_synth.c:467
msgid "Amplitude:"
msgstr ""
+#: modules/process/wave_synth.c:487
+msgid "_Decay:"
+msgstr ""
+
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "beast"
-#: modules/process/wave_synth.c:466
+#: modules/process/wave_synth.c:497
msgid "Frequency"
msgstr "Frecuencia"
-#: modules/process/wave_synth.c:472
+#: modules/process/wave_synth.c:503
msgid "_Spatial frequency:"
msgstr ""
-#: modules/process/wave_synth.c:488
+#: modules/process/wave_synth.c:519
msgid "_X center:"
msgstr ""
-#: modules/process/wave_synth.c:499
+#: modules/process/wave_synth.c:532
msgid "_Y center:"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "audacity"
-#: modules/process/wave_synth.c:565
+#: modules/process/wave_synth.c:600
msgid "Cosine"
msgstr "Coseno"
-#: modules/process/wave_synth.c:566
+#: modules/process/wave_synth.c:601
msgid "Inverse cosh"
msgstr ""
-#: modules/process/wave_synth.c:567
+#: modules/process/wave_synth.c:602
msgid "Flat top"
msgstr ""
-#: modules/process/wave_synth.c:581
+#: modules/process/wave_synth.c:616
msgid "Displacement"
msgstr ""
@@ -13890,39 +14709,39 @@ msgstr ""
msgid "Preprocess and mark"
msgstr ""
-#: modules/process/xydenoise.c:57
+#: modules/process/xydenoise.c:58
msgid "Denoises measurement on basis of two orthogonal scans."
msgstr ""
-#: modules/process/xydenoise.c:71
+#: modules/process/xydenoise.c:72
msgid "/M_ultidata/_XY denoise..."
msgstr ""
-#: modules/process/xydenoise.c:75
+#: modules/process/xydenoise.c:76
msgid "Denoises horizontal/vertical measurement."
msgstr ""
-#: modules/process/xydenoise.c:102
+#: modules/process/xydenoise.c:103
msgid "XY Denoising"
msgstr ""
-#: modules/process/xydenoise.c:124
+#: modules/process/xydenoise.c:125
msgid "Second direction:"
msgstr ""
-#: modules/process/xydenoise.c:232
+#: modules/process/xydenoise.c:233
msgid "Computing forward FFTs..."
msgstr ""
-#: modules/process/xydenoise.c:248
+#: modules/process/xydenoise.c:249
msgid "Computing image..."
msgstr ""
-#: modules/process/xydenoise.c:260
+#: modules/process/xydenoise.c:261
msgid "Computing backward FFT..."
msgstr ""
-#: modules/process/xydenoise.c:272
+#: modules/process/xydenoise.c:273
msgid "Denoised"
msgstr ""
@@ -13939,65 +14758,71 @@ msgstr ""
msgid "Convert to XYZ data"
msgstr "Importa datos XYZ"
-#: modules/pygwy/pygwy-console.c:55
+#: modules/pygwy/pygwy-console.c:99
msgid "/Pygwy Console"
msgstr ""
-#: modules/pygwy/pygwy-console.c:59
+#: modules/pygwy/pygwy-console.c:103
msgid "Python wrapper console"
msgstr ""
-#: modules/pygwy/pygwy-console.c:142
-msgid ">>> Running the script above\n"
+#: modules/pygwy/pygwy-console.c:168 modules/pygwy/pygwy-console.c:481
+msgid "Pygwy Console"
msgstr ""
-#: modules/pygwy/pygwy-console.c:194
-msgid "Open Python script"
-msgstr "Abrir secuencia de comandos Python"
+#: modules/pygwy/pygwy-console.c:187
+msgid "Open script in Python language (Ctrl-O)"
+msgstr "Abrir secuencia de comandos en el lenguaje Python (Ctrl-O)"
+
+#: modules/pygwy/pygwy-console.c:197
+msgid "Save script (Ctrl-S)"
+msgstr ""
-#: modules/pygwy/pygwy-console.c:275
-msgid "Save Script as"
+#: modules/pygwy/pygwy-console.c:207
+msgid "Save script as (Ctrl-Shift-S)"
msgstr ""
-#: modules/pygwy/pygwy-console.c:327
-msgid "Pygwy Console"
+#: modules/pygwy/pygwy-console.c:217
+msgid "Execute script (Ctrl-E)"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "freeciv"
-#: modules/pygwy/pygwy-console.c:340
+#: modules/pygwy/pygwy-console.c:227
msgid "Clear Log"
msgstr "Borrar registro"
-#: modules/pygwy/pygwy-console.c:344
-msgid "Open script in Python language (Ctrl-O)"
-msgstr "Abrir secuencia de comandos en el lenguaje Python (Ctrl-O)"
+#: modules/pygwy/pygwy-console.c:285
+msgid "Command"
+msgstr "Comando"
-#: modules/pygwy/pygwy-console.c:346
-msgid "Save script (Ctrl-S)"
+#: modules/pygwy/pygwy-console.c:371
+msgid ">>> Running the script above\n"
msgstr ""
-#: modules/pygwy/pygwy-console.c:348
-msgid "Execute script (Ctrl-E)"
-msgstr ""
+#: modules/pygwy/pygwy-console.c:425
+#, fuzzy
+msgid "Save Python Script as"
+msgstr "Abrir secuencia de comandos Python"
-#: modules/pygwy/pygwy-console.c:426
-msgid "Command"
-msgstr "Comando"
+#: modules/pygwy/pygwy-console.c:429
+#, fuzzy
+msgid "Open Python Script"
+msgstr "Abrir secuencia de comandos Python"
-#: pygwy.c:120
+#: pygwy.c:130
msgid "Pygwy, the Gwyddion Python wrapper."
msgstr ""
-#: pygwy.c:258
+#: pygwy.c:269
msgid "Python Interpreter Errors"
msgstr ""
-#: pygwy.c:384
+#: pygwy.c:399
msgid "Python interpreter error occurred."
msgstr ""
-#: pygwy.c:459
+#: pygwy.c:499
msgid "Function written in Python"
msgstr ""
@@ -14024,38 +14849,38 @@ msgid "Measure distances and directions between points"
msgstr ""
#. TRANSLATORS: Number is verb here.
-#: modules/tools/distance.c:250 modules/tools/profile.c:532
+#: modules/tools/distance.c:250 modules/tools/profile.c:527
#, fuzzy
msgid "_Number lines"
msgstr "_Número de Lados:"
-#: modules/tools/filter.c:128
+#: modules/tools/filter.c:129
msgid ""
"Filter tool, processes selected part of data with a filter (conservative "
"denoise, mean, median. Kuwahara, minimum, maximum)."
msgstr ""
-#: modules/tools/filter.c:171
+#: modules/tools/filter.c:172
msgid "Basic filters: mean, median, denoise, …"
msgstr ""
-#: modules/tools/filter.c:239
+#: modules/tools/filter.c:240
msgid "Conservative denoise"
msgstr ""
-#: modules/tools/filter.c:246
+#: modules/tools/filter.c:247
msgid "Kuwahara"
msgstr "Kuwahara"
-#: modules/tools/filter.c:247
+#: modules/tools/filter.c:248
msgid "Dechecker"
msgstr ""
-#: modules/tools/filter.c:248
+#: modules/tools/filter.c:249
msgid "filter|Gaussian"
msgstr "Gaussiano"
-#: modules/tools/filter.c:249
+#: modules/tools/filter.c:250
msgid "Sharpen"
msgstr ""
@@ -14151,7 +14976,7 @@ msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "gedit-plugins"
#: modules/tools/icolorange.c:329 modules/tools/linestats.c:169
-#: modules/tools/sfunctions.c:226 modules/volume/volume_linestat.c:146
+#: modules/tools/sfunctions.c:231 modules/volume/volume_linestat.c:148
msgid "Range"
msgstr "Rango"
@@ -14182,29 +15007,29 @@ msgstr "_Invertir"
msgid "range|Full"
msgstr ""
-#: modules/tools/level3.c:106
+#: modules/tools/level3.c:108
msgid ""
"Three-point level tool, levels data by subtracting a plane fitted through "
"three selected points."
msgstr ""
-#: modules/tools/level3.c:143
+#: modules/tools/level3.c:145
msgid "Three Point Level"
msgstr ""
-#: modules/tools/level3.c:144
+#: modules/tools/level3.c:146
msgid "Level data by fitting a plane through three points"
msgstr ""
-#: modules/tools/level3.c:239 modules/tools/readvalue.c:375
+#: modules/tools/level3.c:244 modules/tools/readvalue.c:378
msgid "_Averaging radius:"
msgstr ""
-#: modules/tools/level3.c:246
+#: modules/tools/level3.c:251
msgid "_Instant apply"
msgstr ""
-#: modules/tools/level3.c:255
+#: modules/tools/level3.c:261
msgid "Set plane to _zero"
msgstr ""
@@ -14214,23 +15039,23 @@ msgid ""
"RMS, ..., of rows or columns."
msgstr ""
-#: modules/tools/linestats.c:172 modules/volume/volume_linestat.c:148
+#: modules/tools/linestats.c:172 modules/volume/volume_linestat.c:150
msgid "tan β<sub>0</sub>"
msgstr "tan β<sub>0</sub>"
-#: modules/tools/linestats.c:174 modules/volume/volume_linestat.c:150
+#: modules/tools/linestats.c:174 modules/volume/volume_linestat.c:152
msgid "Ra"
msgstr "Ra"
-#: modules/tools/linestats.c:175 modules/volume/volume_linestat.c:151
+#: modules/tools/linestats.c:175 modules/volume/volume_linestat.c:153
msgid "Rq (RMS)"
msgstr "Rq (RMS)"
-#: modules/tools/linestats.c:176 modules/volume/volume_linestat.c:152
+#: modules/tools/linestats.c:176 modules/volume/volume_linestat.c:154
msgid "Rz"
msgstr "Rz"
-#: modules/tools/linestats.c:177 modules/volume/volume_linestat.c:153
+#: modules/tools/linestats.c:177 modules/volume/volume_linestat.c:155
msgid "Rt"
msgstr "Rt"
@@ -14256,16 +15081,11 @@ msgstr "Co_lumnas"
msgid "Average:"
msgstr "Media:"
-#: modules/tools/linestats.c:363 modules/tools/profile.c:464
-#: modules/tools/sfunctions.c:414 modules/tools/spectro.c:343
+#: modules/tools/linestats.c:363 modules/tools/profile.c:460
+#: modules/tools/sfunctions.c:424 modules/tools/spectro.c:346
msgid "<b>Options</b>"
msgstr "<b>Opciones</b>"
-#: modules/tools/linestats.c:379 modules/tools/sfunctions.c:430
-#: modules/tools/stats.c:408
-msgid "_Instant updates"
-msgstr ""
-
#: modules/tools/maskedit.c:170
msgid "Mask editor tool, allows interactive modification of parts of the mask."
msgstr ""
@@ -14326,75 +15146,75 @@ msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "anjuta"
-#: modules/tools/maskedit.c:408
+#: modules/tools/maskedit.c:409
msgid "Editor"
msgstr "Editor"
-#: modules/tools/maskedit.c:413
+#: modules/tools/maskedit.c:414
msgid "_Shapes"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "anjuta"
-#: modules/tools/maskedit.c:423
+#: modules/tools/maskedit.c:428
msgid "Mode:"
msgstr "Modo:"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "gimp"
-#: modules/tools/maskedit.c:452
+#: modules/tools/maskedit.c:458
msgid "Shape:"
msgstr "Forma:"
-#: modules/tools/maskedit.c:483
+#: modules/tools/maskedit.c:486
msgid "_Drawing Tools"
msgstr ""
-#: modules/tools/maskedit.c:493
+#: modules/tools/maskedit.c:500
msgid "Tool:"
msgstr "Herramienta:"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "aptitude"
-#: modules/tools/maskedit.c:532
+#: modules/tools/maskedit.c:538
msgid "Actions"
msgstr "Acciones"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "gimp"
-#: modules/tools/maskedit.c:540
+#: modules/tools/maskedit.c:546
msgid "_Invert"
msgstr "_Invertir"
-#: modules/tools/maskedit.c:571
+#: modules/tools/maskedit.c:577
msgid "Fill _Voids"
msgstr ""
-#: modules/tools/maskedit.c:580
+#: modules/tools/maskedit.c:586
msgid "Fill non-simple-connected"
msgstr ""
-#: modules/tools/maskedit.c:591
+#: modules/tools/maskedit.c:597
msgid "Grow/Shrink"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "gimp"
-#: modules/tools/maskedit.c:600
+#: modules/tools/maskedit.c:606
msgid "_Grow"
msgstr "C_recer"
-#: modules/tools/maskedit.c:608
+#: modules/tools/maskedit.c:614
msgid "Shrin_k"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "gaupol"
-#: modules/tools/maskedit.c:623
+#: modules/tools/maskedit.c:629
msgid "_Amount:"
msgstr "C_antidad:"
-#: modules/tools/maskedit.c:651
+#: modules/tools/maskedit.c:657
msgid "_Prevent grain merging by growing"
msgstr ""
@@ -14410,87 +15230,105 @@ msgstr ""
msgid "Level rows using intersections with given lines"
msgstr ""
-#: modules/tools/profile.c:222
+#: modules/tools/profile.c:216
msgid "Profile tool, creates profile graphs from selected lines."
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "anjuta"
-#: modules/tools/profile.c:276 modules/tools/profile.c:630
+#: modules/tools/profile.c:270 modules/tools/profile.c:609
msgid "Profiles"
msgstr "Perfiles"
-#: modules/tools/profile.c:277
+#: modules/tools/profile.c:271
msgid "Extract profiles"
msgstr ""
-#: modules/tools/profile.c:480
-msgid "_Radial profiles"
-msgstr ""
-
-#: modules/tools/profile.c:493
+#: modules/tools/profile.c:478
#, fuzzy
-msgid "Symmetrize _All"
-msgstr "Simétrico"
+msgid "Linear profiles"
+msgstr "Archivos Shimadzu"
-#: modules/tools/profile.c:498
+#: modules/tools/profile.c:480
#, fuzzy
-msgid "S_ymmetrize"
-msgstr "Simétrico"
+msgid "Radial profiles"
+msgstr "Archivos Shimadzu"
-#: modules/tools/profile.c:542
+#: modules/tools/profile.c:537
msgid "_Separate profiles"
msgstr ""
-#: modules/tools/profile.c:607
+#: modules/tools/profile.c:587
msgid "_Calibration data:"
msgstr ""
-#: modules/tools/profile.c:620
+#: modules/tools/profile.c:600
msgid "_Show profile"
msgstr ""
-#: modules/tools/profile.c:887
+#: modules/tools/profile.c:861
#, c-format
msgid "X error %d"
msgstr ""
-#: modules/tools/profile.c:891
+#: modules/tools/profile.c:865
#, c-format
msgid "Y error %d"
msgstr ""
-#: modules/tools/profile.c:895
+#: modules/tools/profile.c:869
#, c-format
msgid "Z error %d"
msgstr ""
-#: modules/tools/profile.c:899
+#: modules/tools/profile.c:873
#, c-format
msgid "X uncertainty %d"
msgstr ""
-#: modules/tools/profile.c:903
+#: modules/tools/profile.c:877
#, c-format
msgid "Y uncertainty %d"
msgstr ""
-#: modules/tools/profile.c:907
+#: modules/tools/profile.c:881
#, c-format
msgid "Z uncertainty %d"
msgstr ""
-#: modules/tools/profile.c:912
+#: modules/tools/profile.c:886
#, c-format
msgid "Zunc up bound %d"
msgstr ""
-#: modules/tools/profile.c:917
+#: modules/tools/profile.c:891
#, c-format
msgid "Zunc low bound %d"
msgstr ""
-#: modules/tools/profile.c:1817
+#: modules/tools/profile.c:1637
+#, fuzzy
+msgid "S_ymmetrize"
+msgstr "Simétrico"
+
+#: modules/tools/profile.c:1639
+#, fuzzy
+msgid "Symmetrize _All"
+msgstr "Simétrico"
+
+# Translation for this string generated by http://littlesvr.ca/ostd/
+# based on translation from "goffice"
+#: modules/tools/profile.c:1643
+#, fuzzy
+msgid "Improve _Direction"
+msgstr "_Dirección:"
+
+#: modules/tools/profile.c:1645
+#, fuzzy
+msgid "Improve _All"
+msgstr "_Mejorar"
+
+#: modules/tools/profile.c:1866
msgid "calib-data|None"
msgstr ""
@@ -14506,202 +15344,202 @@ msgstr ""
msgid "Read value under mouse cursor"
msgstr ""
-#: modules/tools/readvalue.c:304
+#: modules/tools/readvalue.c:307
msgid "Set _Zero"
msgstr ""
-#: modules/tools/readvalue.c:307
+#: modules/tools/readvalue.c:310
msgid "Shift plane z=0 to pass through the selected point"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "dia"
-#: modules/tools/readvalue.c:315
+#: modules/tools/readvalue.c:318
msgid "Facet"
msgstr "Faceta"
-#: modules/tools/readvalue.c:340
+#: modules/tools/readvalue.c:343
msgid "Curvatures"
msgstr ""
-#: modules/tools/readvalue.c:382
+#: modules/tools/readvalue.c:386
msgid "Show _selection"
msgstr ""
-#: modules/tools/roughness.c:282
+#: modules/tools/roughness.c:283
msgid "Roughness average"
msgstr ""
-#: modules/tools/roughness.c:290
+#: modules/tools/roughness.c:291
msgid "Root mean square roughness"
msgstr ""
-#: modules/tools/roughness.c:298
+#: modules/tools/roughness.c:299
msgid "Maximum height of the roughness"
msgstr ""
-#: modules/tools/roughness.c:306
+#: modules/tools/roughness.c:307
msgid "Maximum roughness valley depth"
msgstr ""
-#: modules/tools/roughness.c:314
+#: modules/tools/roughness.c:315
msgid "Maximum roughness peak height"
msgstr ""
-#: modules/tools/roughness.c:322 modules/tools/roughness.c:370
+#: modules/tools/roughness.c:323 modules/tools/roughness.c:371
msgid "Average maximum height of the roughness"
msgstr ""
-#: modules/tools/roughness.c:330
+#: modules/tools/roughness.c:331
msgid "Average maximum roughness valley depth"
msgstr ""
-#: modules/tools/roughness.c:338
+#: modules/tools/roughness.c:339
msgid "Average maximum roughness peak height"
msgstr ""
-#: modules/tools/roughness.c:346 modules/tools/roughness.c:354
+#: modules/tools/roughness.c:347 modules/tools/roughness.c:355
msgid "Average third highest peak to third lowest valley height"
msgstr ""
-#: modules/tools/roughness.c:362
+#: modules/tools/roughness.c:363
msgid "Average maximum height of the profile"
msgstr ""
-#: modules/tools/roughness.c:378
+#: modules/tools/roughness.c:379
msgid "Skewness"
msgstr "Asimetría"
-#: modules/tools/roughness.c:394
+#: modules/tools/roughness.c:395
msgid "Waviness average"
msgstr ""
-#: modules/tools/roughness.c:402
+#: modules/tools/roughness.c:403
msgid "Root mean square waviness"
msgstr ""
-#: modules/tools/roughness.c:410
+#: modules/tools/roughness.c:411
msgid "Waviness maximum height"
msgstr ""
-#: modules/tools/roughness.c:418
+#: modules/tools/roughness.c:419
msgid "Maximum height of the profile"
msgstr ""
-#: modules/tools/roughness.c:426
+#: modules/tools/roughness.c:427
msgid "Spatial"
msgstr ""
-#: modules/tools/roughness.c:476
+#: modules/tools/roughness.c:477
msgid "Average wavelength of the profile"
msgstr ""
-#: modules/tools/roughness.c:484
+#: modules/tools/roughness.c:485
msgid "Root mean square (RMS) wavelength of the profile"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "hybrid"
-#: modules/tools/roughness.c:492
+#: modules/tools/roughness.c:493
msgid "Hybrid"
msgstr "Híbrido"
-#: modules/tools/roughness.c:500
+#: modules/tools/roughness.c:501
msgid "Average absolute slope"
msgstr ""
-#: modules/tools/roughness.c:508
+#: modules/tools/roughness.c:509
msgid "Root mean square (RMS) slope"
msgstr ""
-#: modules/tools/roughness.c:524
+#: modules/tools/roughness.c:525
msgid "Developed profile length"
msgstr ""
-#: modules/tools/roughness.c:532
+#: modules/tools/roughness.c:533
msgid "Profile length ratio"
msgstr ""
-#: modules/tools/roughness.c:615
+#: modules/tools/roughness.c:616
msgid "Calculate surface profile parameters."
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "gimp"
-#: modules/tools/roughness.c:648 modules/tools/roughness.c:773
-#: modules/tools/roughness.c:1452
+#: modules/tools/roughness.c:649 modules/tools/roughness.c:774
+#: modules/tools/roughness.c:1479
msgid "Roughness"
msgstr "Rugosidad"
-#: modules/tools/roughness.c:649
+#: modules/tools/roughness.c:650
msgid "Calculate roughness parameters"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "gimp"
-#: modules/tools/roughness.c:771 modules/tools/roughness.c:1450
+#: modules/tools/roughness.c:772 modules/tools/roughness.c:1477
msgid "Texture"
msgstr "Textura"
-#: modules/tools/roughness.c:772 modules/tools/roughness.c:1451
+#: modules/tools/roughness.c:773 modules/tools/roughness.c:1478
msgid "Waviness"
msgstr ""
-#: modules/tools/roughness.c:774
+#: modules/tools/roughness.c:775
msgid "ADF"
msgstr ""
-#: modules/tools/roughness.c:775
+#: modules/tools/roughness.c:776
msgid "BRC"
msgstr ""
-#: modules/tools/roughness.c:776 modules/tools/roughness.c:1455
+#: modules/tools/roughness.c:777 modules/tools/roughness.c:1482
msgid "Peak Count"
msgstr ""
-#: modules/tools/roughness.c:838 modules/xyz/xyz_drift.c:1090
+#: modules/tools/roughness.c:839 modules/xyz/xyz_drift.c:1090
msgid "_Graph:"
msgstr "_Gráfico:"
-#: modules/tools/roughness.c:845
+#: modules/tools/roughness.c:847
msgid "C_ut-off:"
msgstr ""
-#: modules/tools/roughness.c:1324
+#: modules/tools/roughness.c:1345
msgid "No profile selected."
msgstr ""
-#: modules/tools/roughness.c:1453
+#: modules/tools/roughness.c:1480
msgid "Amplitude Distribution Function"
msgstr ""
-#: modules/tools/roughness.c:1454
+#: modules/tools/roughness.c:1481
msgid "The Bearing Ratio Curve"
msgstr ""
-#: modules/tools/roughness.c:1489
+#: modules/tools/roughness.c:1516
msgid "Surface Profiles"
msgstr ""
-#: modules/tools/roughness.c:1877
+#: modules/tools/roughness.c:1904
msgid "Save Roughness Parameters"
msgstr "Guardar Parámetros de Rugosidad "
-#: modules/tools/roughness.c:1934
+#: modules/tools/roughness.c:1961
msgid "Roughness Parameters"
msgstr ""
-#: modules/tools/roughness.c:1940
+#: modules/tools/roughness.c:1967
#, c-format
msgid "File: %s\n"
msgstr ""
-#: modules/tools/roughness.c:1944
+#: modules/tools/roughness.c:1971
#, c-format
msgid "Data channel: %s\n"
msgstr ""
-#: modules/tools/roughness.c:1975
+#: modules/tools/roughness.c:2002
#, c-format
msgid ""
"Selected line: (%s, %s) to (%s, %s) px\n"
@@ -14737,96 +15575,100 @@ msgstr ""
msgid "_Copy"
msgstr ""
-#: modules/tools/sfunctions.c:181
+#: modules/tools/sfunctions.c:186
msgid ""
"Statistical function tool, calculates one-dimensional statistical functions "
"(height distribution, correlations, PSDF, Minkowski functionals) of selected "
"part of data."
msgstr ""
-#: modules/tools/sfunctions.c:214
+#: modules/tools/sfunctions.c:219
msgid "Height distribution"
msgstr ""
-#: modules/tools/sfunctions.c:215
+#: modules/tools/sfunctions.c:220
msgid "Cum. height distribution"
msgstr ""
-#: modules/tools/sfunctions.c:216
+#: modules/tools/sfunctions.c:221
msgid "Distribution of angles"
msgstr ""
-#: modules/tools/sfunctions.c:217
+#: modules/tools/sfunctions.c:222
msgid "Cum. distribution of angles"
msgstr ""
-#: modules/tools/sfunctions.c:218
+#: modules/tools/sfunctions.c:223
msgid "ACF"
msgstr ""
-#: modules/tools/sfunctions.c:219
+#: modules/tools/sfunctions.c:224
msgid "HHCF"
msgstr ""
-#: modules/tools/sfunctions.c:220
+#: modules/tools/sfunctions.c:225
msgid "PSDF"
msgstr ""
-#: modules/tools/sfunctions.c:221
+#: modules/tools/sfunctions.c:226
msgid "Radial PSDF"
msgstr ""
-#: modules/tools/sfunctions.c:222
+#: modules/tools/sfunctions.c:227
msgid "Radial ACF"
msgstr ""
-#: modules/tools/sfunctions.c:223
+#: modules/tools/sfunctions.c:228
msgid "Minkowski volume"
msgstr ""
-#: modules/tools/sfunctions.c:224
+#: modules/tools/sfunctions.c:229
msgid "Minkowski boundary"
msgstr ""
-#: modules/tools/sfunctions.c:225
+#: modules/tools/sfunctions.c:230
msgid "Minkowski connectivity"
msgstr ""
+#: modules/tools/sfunctions.c:232
+msgid "Area scale graph"
+msgstr ""
+
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "gnumeric"
-#: modules/tools/sfunctions.c:251
+#: modules/tools/sfunctions.c:257
msgid "Statistical Functions"
msgstr "Funciones estadísticas"
-#: modules/tools/sfunctions.c:252
+#: modules/tools/sfunctions.c:258
msgid "Calculate 1D statistical functions"
msgstr ""
-#: modules/tools/sfunctions.c:504
+#: modules/tools/sfunctions.c:501
msgid "_Separate uncertainty"
msgstr ""
-#: modules/tools/spectro.c:151
+#: modules/tools/spectro.c:154
msgid "Point Spectrum, extracts point spectra to a graph."
msgstr ""
-#: modules/tools/spectro.c:190
+#: modules/tools/spectro.c:193
msgid "Point Spectroscopy"
msgstr ""
-#: modules/tools/spectro.c:191
+#: modules/tools/spectro.c:194
msgid "Extract and view point spectroscopy data"
msgstr "Extraer y ver datos de espectroscopia puntual"
-#: modules/tools/spectro.c:359
+#: modules/tools/spectro.c:362
msgid "_Separate spectra"
msgstr ""
-#: modules/tools/spectro.c:369
+#: modules/tools/spectro.c:372
msgid "_Average spectra"
msgstr ""
-#: modules/tools/spectro.c:508
+#: modules/tools/spectro.c:511
msgid "Spectroscopy"
msgstr ""
@@ -14864,16 +15706,6 @@ msgstr ""
msgid "No area in the zoom selected."
msgstr ""
-#: modules/tools/stats.c:205
-msgid "Average value:"
-msgstr ""
-
-# Translation for this string generated by http://littlesvr.ca/ostd/
-# based on translation from "gimp"
-#: modules/tools/stats.c:206
-msgid "Median:"
-msgstr "Mediana:"
-
#: modules/tools/stats.c:207
msgid "Ra (Sa):"
msgstr "Ra (Sa):"
@@ -14886,14 +15718,6 @@ msgstr "Rms (Sq):"
msgid "Rms (grain-wise):"
msgstr ""
-#: modules/tools/stats.c:210
-msgid "Skew:"
-msgstr "Asimetría:"
-
-#: modules/tools/stats.c:211
-msgid "Kurtosis:"
-msgstr "Curtosis:"
-
#: modules/tools/stats.c:212
msgid "Surface area:"
msgstr ""
@@ -14902,12 +15726,6 @@ msgstr ""
msgid "Projected area:"
msgstr ""
-# Translation for this string generated by http://littlesvr.ca/ostd/
-# based on translation from "lyx"
-#: modules/tools/stats.c:214
-msgid "Variation:"
-msgstr "Variación:"
-
#: modules/tools/stats.c:217
msgid "Inclination θ:"
msgstr "Inclinación θ"
@@ -14920,7 +15738,7 @@ msgstr "Inclinación φ"
msgid "Statistics tool."
msgstr ""
-#: modules/tools/stats.c:261 modules/tools/stats.c:1095
+#: modules/tools/stats.c:261 modules/tools/stats.c:1091
msgid "Statistical Quantities"
msgstr ""
@@ -14928,29 +15746,29 @@ msgstr ""
msgid "Statistical quantities"
msgstr ""
-#: modules/tools/stats.c:1002
+#: modules/tools/stats.c:998
msgid "Save Statistical Quantities"
msgstr ""
-#: modules/tools/stats.c:1100
+#: modules/tools/stats.c:1096
#, fuzzy, c-format
msgid "File: %s\n"
msgstr "Volumen %g\n"
-#: modules/tools/stats.c:1104
+#: modules/tools/stats.c:1100
#, fuzzy, c-format
msgid "Data channel: %s\n"
msgstr "Datos: %s\n"
-#: modules/tools/stats.c:1122
+#: modules/tools/stats.c:1118
msgid "Yes"
msgstr "Sí"
-#: modules/tools/stats.c:1122
+#: modules/tools/stats.c:1118
msgid "No"
msgstr "No"
-#: modules/tools/stats.c:1132
+#: modules/tools/stats.c:1128
#, c-format
msgid ""
"Selected area: %s × %s at (%s, %s) px\n"
@@ -14970,184 +15788,180 @@ msgstr ""
msgid "Volume Dimensions and Units"
msgstr ""
-#: modules/volume/volume_calibrate.c:526
+#: modules/volume/volume_calibrate.c:486
msgid "_Value range:"
msgstr ""
-#: modules/volume/volume_calibrate.c:555
+#: modules/volume/volume_calibrate.c:508
msgid "Value shi_ft:"
msgstr ""
-#: modules/volume/volume_calibrate.c:601
+#: modules/volume/volume_calibrate.c:542
msgid "_Value calibration factor:"
msgstr ""
-#: modules/volume/volume_extract.c:223
+#: modules/volume/volume_extract.c:216
msgid "Shows and/or extracts a section of volume data"
msgstr ""
-#: modules/volume/volume_extract.c:237
-msgid "/Show and _extract..."
+#: modules/volume/volume_extract.c:230
+msgid "/Show and _Extract..."
msgstr ""
-#: modules/volume/volume_extract.c:241
+#: modules/volume/volume_extract.c:234
msgid "Show and/or extract a section of volume data"
msgstr ""
-#: modules/volume/volume_extract.c:270
+#: modules/volume/volume_extract.c:263
msgid "X cross-section"
msgstr ""
-#: modules/volume/volume_extract.c:271
+#: modules/volume/volume_extract.c:264
msgid "Y cross-section"
msgstr ""
-#: modules/volume/volume_extract.c:272
+#: modules/volume/volume_extract.c:265
msgid "Z cross-section"
msgstr ""
-#: modules/volume/volume_extract.c:273 modules/volume/volume_extract.c:698
+#: modules/volume/volume_extract.c:266 modules/volume/volume_extract.c:684
msgid "X direction sum"
msgstr ""
-#: modules/volume/volume_extract.c:274 modules/volume/volume_extract.c:700
+#: modules/volume/volume_extract.c:267 modules/volume/volume_extract.c:686
msgid "Y direction sum"
msgstr ""
-#: modules/volume/volume_extract.c:275 modules/volume/volume_extract.c:702
+#: modules/volume/volume_extract.c:268 modules/volume/volume_extract.c:688
msgid "Z direction sum"
msgstr ""
-#: modules/volume/volume_extract.c:278
+#: modules/volume/volume_extract.c:271
msgid "X direction"
msgstr ""
-#: modules/volume/volume_extract.c:279
+#: modules/volume/volume_extract.c:272
msgid "Y direction"
msgstr ""
-#: modules/volume/volume_extract.c:280
+#: modules/volume/volume_extract.c:273
msgid "Z direction"
msgstr ""
-#: modules/volume/volume_extract.c:322
+#: modules/volume/volume_extract.c:315
msgid "Volume data"
msgstr ""
-#: modules/volume/volume_extract.c:324
+#: modules/volume/volume_extract.c:317
msgid "_Load"
msgstr "_Cargar"
-#: modules/volume/volume_extract.c:336
+#: modules/volume/volume_extract.c:329
msgid "_Extract projection"
msgstr ""
-#: modules/volume/volume_extract.c:354
+#: modules/volume/volume_extract.c:347
msgid "Projections"
msgstr ""
-#: modules/volume/volume_extract.c:404
+#: modules/volume/volume_extract.c:395
msgid "Z position"
msgstr ""
-#: modules/volume/volume_extract.c:409
+#: modules/volume/volume_extract.c:405
msgid "Shown cut direction:"
msgstr ""
-#: modules/volume/volume_extract.c:419 modules/volume/volume_extract.c:500
-msgid "Show mode:"
-msgstr ""
-
-#: modules/volume/volume_extract.c:490
+#: modules/volume/volume_extract.c:485
msgid "Graph cut direction:"
msgstr ""
-#: modules/volume/volume_extract.c:525
+#: modules/volume/volume_extract.c:511
msgid "3D view"
msgstr "Vista 3D"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "abiword"
-#: modules/volume/volume_extract.c:550
+#: modules/volume/volume_extract.c:538
msgid "Zoom"
msgstr "Ampliación"
-#: modules/volume/volume_extract.c:558
+#: modules/volume/volume_extract.c:545
msgid "Wireframe threshold"
msgstr ""
-#: modules/volume/volume_extract.c:566
+#: modules/volume/volume_extract.c:552
msgid "Z scale"
msgstr ""
-#: modules/volume/volume_extract.c:574
+#: modules/volume/volume_extract.c:559
msgid "Opacity scale"
msgstr ""
-#: modules/volume/volume_extract.c:580
-msgid "apply perspective"
+#: modules/volume/volume_extract.c:565
+msgid "Apply perspective"
msgstr ""
-#: modules/volume/volume_extract.c:589
-msgid "instant 3D render"
+#: modules/volume/volume_extract.c:574
+msgid "Instant 3D render"
msgstr ""
-#: modules/volume/volume_extract.c:598
+#: modules/volume/volume_extract.c:587
msgid "X view"
msgstr ""
-#: modules/volume/volume_extract.c:604
+#: modules/volume/volume_extract.c:592
msgid "Y view"
msgstr ""
-#: modules/volume/volume_extract.c:610
+#: modules/volume/volume_extract.c:597
msgid "Z view"
msgstr ""
-#: modules/volume/volume_extract.c:683
+#: modules/volume/volume_extract.c:669
#, c-format
msgid "X cross-section at x: %d"
msgstr ""
-#: modules/volume/volume_extract.c:686
+#: modules/volume/volume_extract.c:672
#, c-format
msgid "Y cross-section at y: %d"
msgstr ""
-#: modules/volume/volume_extract.c:690
+#: modules/volume/volume_extract.c:676
#, c-format
msgid "Z cross-section at Z = %g %s (#%d)"
msgstr ""
-#: modules/volume/volume_extract.c:749 modules/volume/volume_slice.c:1264
+#: modules/volume/volume_extract.c:735 modules/volume/volume_slice.c:1278
#, c-format
msgid "X graph at y: %d z: %d"
msgstr ""
-#: modules/volume/volume_extract.c:752 modules/volume/volume_slice.c:1273
+#: modules/volume/volume_extract.c:738 modules/volume/volume_slice.c:1287
#, c-format
msgid "Y graph at x: %d z: %d"
msgstr ""
-#: modules/volume/volume_extract.c:755 modules/volume/volume_slice.c:1255
+#: modules/volume/volume_extract.c:741 modules/volume/volume_slice.c:1269
#, c-format
msgid "Z graph at x: %d y: %d"
msgstr ""
-#: modules/volume/volume_extract.c:776
+#: modules/volume/volume_extract.c:762
msgid "Brick graph"
msgstr ""
-#: modules/volume/volume_extract.c:1056
+#: modules/volume/volume_extract.c:1042
msgid "Load volume data"
msgstr ""
-#: modules/volume/volume_extract.c:1218
+#: modules/volume/volume_extract.c:1204
#, c-format
msgid "Shown range %g to %g"
msgstr ""
-#: modules/volume/volume_extract.c:1911
+#: modules/volume/volume_extract.c:1897
msgid "Building wireframe model..."
msgstr ""
@@ -15156,104 +15970,108 @@ msgid "Evaluate volume force-distance data"
msgstr ""
#: modules/volume/volume_fdfit.c:213
-msgid "/_Evaluate FD data..."
+msgid "/_Evaluate FD Data..."
msgstr ""
#: modules/volume/volume_fdfit.c:217
msgid "Evaluate force-distance volume data"
msgstr ""
-#: modules/volume/volume_fdfit.c:368
+#: modules/volume/volume_fdfit.c:371
msgid "Curve _X position:"
msgstr ""
-#: modules/volume/volume_fdfit.c:386
+#: modules/volume/volume_fdfit.c:380
msgid "Curve _Y position:"
msgstr ""
-#: modules/volume/volume_fdfit.c:535
+#: modules/volume/volume_fdfit.c:511
msgid "e_stimate"
msgstr "e_stimación"
-#: modules/volume/volume_invert.c:51
+#: modules/volume/volume_invert.c:39 modules/volume/volumeops.c:39
msgid "Inverts value in volume data"
msgstr ""
-#: modules/volume/volume_invert.c:65
-msgid "/_Invert value"
-msgstr ""
+# Translation for this string generated by http://littlesvr.ca/ostd/
+# based on translation from "gimp"
+#: modules/volume/volume_invert.c:53
+#, fuzzy
+msgid "/_Invert Value"
+msgstr "_Invertir"
-#: modules/volume/volume_invert.c:69
+#: modules/volume/volume_invert.c:57
msgid "Invert value in volume data"
msgstr ""
-#: modules/volume/volume_kmeans.c:94
+#: modules/volume/volume_kmeans.c:95
msgid "Calculates K-means clustering on volume data."
msgstr ""
-#: modules/volume/volume_kmeans.c:108
-msgid "/_K-means clustering..."
-msgstr ""
+#: modules/volume/volume_kmeans.c:109
+#, fuzzy
+msgid "/_K-Means Clustering..."
+msgstr "Dilatación"
-#: modules/volume/volume_kmeans.c:112
+#: modules/volume/volume_kmeans.c:113
msgid "Calculate K-means clustering on volume data"
msgstr ""
-#: modules/volume/volume_kmeans.c:151
+#: modules/volume/volume_kmeans.c:152
msgid "K-means"
msgstr ""
-#: modules/volume/volume_kmeans.c:170 modules/volume/volume_kmedians.c:164
+#: modules/volume/volume_kmeans.c:170 modules/volume/volume_kmedians.c:163
msgid "_Number of clusters:"
msgstr ""
-#: modules/volume/volume_kmeans.c:177 modules/volume/volume_kmedians.c:171
+#: modules/volume/volume_kmeans.c:177 modules/volume/volume_kmedians.c:170
msgid "Convergence _precision digits:"
msgstr ""
-#: modules/volume/volume_kmeans.c:184 modules/volume/volume_kmedians.c:178
+#: modules/volume/volume_kmeans.c:183 modules/volume/volume_kmedians.c:176
msgid "_Max. iterations:"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "gimp"
-#: modules/volume/volume_kmeans.c:189 modules/volume/volume_kmedians.c:183
+#: modules/volume/volume_kmeans.c:187 modules/volume/volume_kmedians.c:181
msgid "_Normalize"
msgstr "_Normalizar"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "anjuta"
-#: modules/volume/volume_kmeans.c:195
+#: modules/volume/volume_kmeans.c:193
#, fuzzy
msgid "_Remove outliers"
msgstr "Quita_r"
-#: modules/volume/volume_kmeans.c:208
+#: modules/volume/volume_kmeans.c:202
#, fuzzy
msgid "Outliers _threshold:"
msgstr "_Umbral:"
-#: modules/volume/volume_kmeans.c:431
+#: modules/volume/volume_kmeans.c:425
#, fuzzy
msgid "K-means iteration..."
msgstr "Dilatación"
-#: modules/volume/volume_kmeans.c:651
+#: modules/volume/volume_kmeans.c:645
#, c-format
msgid "K-means cluster of %s"
msgstr ""
-#: modules/volume/volume_kmeans.c:660
+#: modules/volume/volume_kmeans.c:654
#, c-format
msgid "K-means error of %s"
msgstr ""
-#: modules/volume/volume_kmeans.c:670 modules/volume/volume_kmedians.c:514
+#: modules/volume/volume_kmeans.c:664 modules/volume/volume_kmedians.c:512
#, c-format
msgid "Pre-normalized intensity of %s"
msgstr ""
-#: modules/volume/volume_kmeans.c:702
+#: modules/volume/volume_kmeans.c:696
#, c-format
msgid "K-means center %d"
msgstr ""
@@ -15263,8 +16081,9 @@ msgid "Calculates K-medians clustering on volume data."
msgstr ""
#: modules/volume/volume_kmedians.c:102
-msgid "/_K-medians clustering..."
-msgstr ""
+#, fuzzy
+msgid "/_K-Medians Clustering..."
+msgstr "Dilatación"
#: modules/volume/volume_kmedians.c:106
msgid "Calculate K-medians clustering on volume data"
@@ -15277,52 +16096,52 @@ msgstr ""
msgid "K-Medians"
msgstr "Medo"
-#: modules/volume/volume_kmedians.c:392
+#: modules/volume/volume_kmedians.c:390
#, fuzzy
msgid "K-medians iteration..."
msgstr "Dilatación"
-#: modules/volume/volume_kmedians.c:495
+#: modules/volume/volume_kmedians.c:493
#, c-format
msgid "K-medians cluster of %s"
msgstr ""
-#: modules/volume/volume_kmedians.c:504
+#: modules/volume/volume_kmedians.c:502
#, c-format
msgid "K-medians error of %s"
msgstr ""
-#: modules/volume/volume_kmedians.c:546
+#: modules/volume/volume_kmedians.c:544
#, c-format
msgid "K-medians center %d"
msgstr ""
-#: modules/volume/volume_linestat.c:171
+#: modules/volume/volume_linestat.c:173
msgid "Summarizes profiles of volume data to a channel."
msgstr ""
-#: modules/volume/volume_linestat.c:185
+#: modules/volume/volume_linestat.c:187
msgid "/Summarize _Profiles..."
msgstr ""
-#: modules/volume/volume_linestat.c:189
+#: modules/volume/volume_linestat.c:191
#, fuzzy
msgid "Summarize profiles"
msgstr "Archivos Shimadzu"
-#: modules/volume/volume_linestat.c:249
+#: modules/volume/volume_linestat.c:251
#, fuzzy
msgid "_Extract image"
msgstr "Exporta imagen EXR"
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "calibre"
-#: modules/volume/volume_linestat.c:250
+#: modules/volume/volume_linestat.c:252
#, fuzzy
msgid "Set _preview"
msgstr "No se puede previsualizar"
-#: modules/volume/volume_linestat.c:284
+#: modules/volume/volume_linestat.c:289
msgid "Summarize Volume Profiles"
msgstr ""
@@ -15347,58 +16166,122 @@ msgstr ""
msgid "Line graph"
msgstr "Corta Gráfico"
-#: modules/volume/volume_slice.c:290
+#: modules/volume/volume_slice.c:292
msgid "Slice Volume Data"
msgstr ""
-#: modules/volume/volume_slice.c:369
+#: modules/volume/volume_slice.c:371
msgid "_Base plane:"
msgstr ""
-#: modules/volume/volume_slice.c:420
+#: modules/volume/volume_slice.c:422
msgid "Extract _multiple items"
msgstr ""
-#: modules/volume/volume_slice.c:437
+#: modules/volume/volume_slice.c:439
#, fuzzy
msgid "Positions"
msgstr "Posición"
-#: modules/volume/volume_slice.c:484
+#: modules/volume/volume_slice.c:492
#, fuzzy
msgid "_Z:"
msgstr "_X:"
-#: modules/volume/volume_slice.c:1156
+#: modules/volume/volume_slice.c:1167
#, c-format
msgid "Z slice at %.*f%s%s (#%d)"
msgstr ""
-#: modules/volume/volume_slice.c:1167
+#: modules/volume/volume_slice.c:1178
#, c-format
msgid "Y slice at %.*f%s%s (#%d)"
msgstr ""
-#: modules/volume/volume_slice.c:1178
+#: modules/volume/volume_slice.c:1189
#, c-format
msgid "X slice at %.*f%s%s (#%d)"
msgstr ""
-#: modules/volume/volume_slice.c:1307
+#: modules/volume/volume_slice.c:1325
#, fuzzy
msgid "Volume Z graphs"
msgstr "Volumen %g\n"
-#: modules/volume/volume_slice.c:1314
+#: modules/volume/volume_slice.c:1332
#, fuzzy
msgid "Volume X graphs"
msgstr "Volumen %g\n"
-#: modules/volume/volume_slice.c:1321
+#: modules/volume/volume_slice.c:1339
#, fuzzy
msgid "Volume Y graphs"
msgstr "Volumen %g\n"
+#: modules/volume/volume_swaxes.c:104
+msgid "Swaps axes of volume data."
+msgstr ""
+
+#: modules/volume/volume_swaxes.c:118
+#, fuzzy
+msgid "/S_wap axes..."
+msgstr "/Guardar_Como..."
+
+#: modules/volume/volume_swaxes.c:122
+msgid "Swap axes"
+msgstr ""
+
+#: modules/volume/volume_swaxes.c:156
+#, fuzzy
+msgid "X"
+msgstr "_X:"
+
+#: modules/volume/volume_swaxes.c:157
+msgid "X, reversed"
+msgstr ""
+
+#: modules/volume/volume_swaxes.c:158
+#, fuzzy
+msgid "Y"
+msgstr "_Y:"
+
+#: modules/volume/volume_swaxes.c:159
+msgid "Y, reversed"
+msgstr ""
+
+#: modules/volume/volume_swaxes.c:160
+msgid "Z"
+msgstr ""
+
+#: modules/volume/volume_swaxes.c:161
+msgid "Z, reversed"
+msgstr ""
+
+#: modules/volume/volume_swaxes.c:175
+msgid "Swap Volume Axes"
+msgstr ""
+
+#: modules/volume/volume_swaxes.c:196
+msgid "Current _X axis will become:"
+msgstr ""
+
+#: modules/volume/volume_swaxes.c:204
+msgid "Current _Y axis will become:"
+msgstr ""
+
+#: modules/volume/volume_swaxes.c:212
+msgid "Current _Z axis will become:"
+msgstr ""
+
+#: modules/volume/volume_swaxes.c:219
+#, fuzzy
+msgid "Create new volume data"
+msgstr "Crea un nuevo dato"
+
+#: modules/volume/volume_swaxes.c:286
+msgid "Z axis calibration will be lost."
+msgstr ""
+
#: modules/volume/volume_zcal.c:104
msgid "Attaches, extracts and removes volume data z-axis calibration."
msgstr ""
@@ -15466,6 +16349,16 @@ msgid ""
"differs from the number of planes %d."
msgstr ""
+#: modules/volume/volumeops.c:53
+#, fuzzy
+msgid "/Extract _Preview"
+msgstr "Exporta imagen EXR"
+
+#: modules/volume/volumeops.c:57
+#, fuzzy
+msgid "Extract volume data preview to an image"
+msgstr "Guardar vista 3D a una imagen"
+
#: modules/xyz/xyz_drift.c:267
msgid "Analyzes drift in XYZ data."
msgstr ""
@@ -15517,7 +16410,7 @@ msgstr ""
msgid "Analyze XYZ Drift"
msgstr ""
-#: modules/xyz/xyz_drift.c:566 modules/xyz/xyz_raster.c:391
+#: modules/xyz/xyz_drift.c:566 modules/xyz/xyz_raster.c:406
msgid "Reset Ran_ges"
msgstr ""
@@ -15526,11 +16419,11 @@ msgstr ""
msgid "_Guess parameters"
msgstr "Guardar Parámetros de Rugosidad "
-#: modules/xyz/xyz_drift.c:778 modules/xyz/xyz_raster.c:570
+#: modules/xyz/xyz_drift.c:778 modules/xyz/xyz_raster.c:539
msgid "_X-range:"
msgstr ""
-#: modules/xyz/xyz_drift.c:800 modules/xyz/xyz_raster.c:592
+#: modules/xyz/xyz_drift.c:800 modules/xyz/xyz_raster.c:561
msgid "_Y-range:"
msgstr ""
@@ -15641,7 +16534,7 @@ msgstr "A_ltura"
msgid "Fitting in progress..."
msgstr ""
-#: modules/xyz/xyz_drift.c:2269 modules/xyz/xyz_raster.c:1012
+#: modules/xyz/xyz_drift.c:2264 modules/xyz/xyz_raster.c:981
msgid "Physical dimensions are invalid."
msgstr ""
@@ -15686,46 +16579,46 @@ msgstr "_Datos"
msgid "Update X and Y of _all compatible data"
msgstr ""
-#: modules/xyz/xyz_raster.c:197
+#: modules/xyz/xyz_raster.c:194
#, fuzzy
msgid "Rasterizes XYZ data to images."
msgstr "Fusiona dos imágenes. "
-#: modules/xyz/xyz_raster.c:211
+#: modules/xyz/xyz_raster.c:208
#, fuzzy
msgid "/_Rasterize..."
msgstr "/_Fusionar..."
-#: modules/xyz/xyz_raster.c:215
+#: modules/xyz/xyz_raster.c:212
#, fuzzy
msgid "Rasterize to image"
msgstr "Fusiona dos imágenes"
-#: modules/xyz/xyz_raster.c:340
+#: modules/xyz/xyz_raster.c:337
#, fuzzy
msgid "Rasterize XYZ Data"
msgstr "Importa datos XYZ"
-#: modules/xyz/xyz_raster.c:354
+#: modules/xyz/xyz_raster.c:351
#, fuzzy
msgid "Create Image _Directly"
msgstr "Crea un nuevo dato"
-#: modules/xyz/xyz_raster.c:360
+#: modules/xyz/xyz_raster.c:357
msgid "XY points form a regular grid so interpolation is not necessary."
msgstr ""
-#: modules/xyz/xyz_raster.c:381
+#: modules/xyz/xyz_raster.c:392
msgid "Make Pixels S_quare"
msgstr ""
# Translation for this string generated by http://littlesvr.ca/ostd/
# based on translation from "fusionforge"
-#: modules/xyz/xyz_raster.c:642
+#: modules/xyz/xyz_raster.c:611
msgid "Field"
msgstr "Campo"
-#: modules/xyz/xyz_raster.c:956
+#: modules/xyz/xyz_raster.c:925
#, c-format
msgid ""
"Number of points: %u\n"
@@ -15733,12 +16626,47 @@ msgid ""
"Added on the boundaries: %u"
msgstr ""
-#: modules/xyz/xyz_raster.c:1091
+#: modules/xyz/xyz_raster.c:1065
msgid ""
"XYZ data regularization failed due to numerical instability or was "
"interrupted."
msgstr ""
+# Translation for this string generated by http://littlesvr.ca/ostd/
+# based on translation from "avant-window-navigator"
+#~ msgid "pixels"
+#~ msgstr "píxeles"
+
+#~ msgid "Fast Fourier Transform"
+#~ msgstr "Transformada rápida de Fourier"
+
+# Translation for this string generated by http://littlesvr.ca/ostd/
+# based on translation from "dia"
+#~ msgid "Distribute"
+#~ msgstr "Distribuir"
+
+#~ msgid "Replace"
+#~ msgstr "Sustituir"
+
+#, fuzzy
+#~ msgid "Stitch operations on data"
+#~ msgstr "Encaja una función en los datos de la gráfica"
+
+# Translation for this string generated by http://littlesvr.ca/ostd/
+# based on translation from "gimp"
+#, fuzzy
+#~ msgid "X offset"
+#~ msgstr "Desplazamiento _X:"
+
+# Translation for this string generated by http://littlesvr.ca/ostd/
+# based on translation from "gimp"
+#, fuzzy
+#~ msgid "Y offset"
+#~ msgstr "Desplazamiento _Y:"
+
+#~ msgid "Create new channel"
+#~ msgstr "Crear un nuevo cannal"
+
#~ msgid "Graph function written in Python"
#~ msgstr "Función gráfica escrita en Python"
diff --git a/po/fr.gmo b/po/fr.gmo
index f1ee0ea..0ea4064 100644
Binary files a/po/fr.gmo and b/po/fr.gmo differ
diff --git a/po/fr.po b/po/fr.po
index 71d034e..ab77589 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: French localization\n"
"Report-Msgid-Bugs-To: yeti at gwyddion.net\n"
-"POT-Creation-Date: 2016-11-18 11:05+0100\n"
-"PO-Revision-Date: 2016-11-17 22:47+0100\n"
+"POT-Creation-Date: 2017-08-15 17:48+0200\n"
+"PO-Revision-Date: 2017-08-08 13:43+0100\n"
"Last-Translator: François Riguet <francheu at caramail.com>\n"
"Language-Team: François RIGUET <francheu at gwyddion.net>\n"
"Language: fr_FR\n"
@@ -131,7 +131,8 @@ msgstr "contact : Hertz (paraboloïde)"
#: app/data-browser-aux.c:1480 app/data-browser.c:2280 app/data-browser.c:2887
#: app/data-browser.c:3707 app/data-browser.c:3857 app/data-browser.c:4139
#: app/data-browser.c:4504 app/data-browser.c:4590 app/data-browser.c:5016
-#: app/resource-editor.c:366 modules/process/convolution_filter.c:691
+#: app/resource-editor.c:366 modules/file/xyzexport.c:214
+#: modules/process/convolution_filter.c:691
msgid "Untitled"
msgstr "Sans titre"
@@ -139,97 +140,105 @@ msgstr "Sans titre"
msgid "Initial residua evaluation..."
msgstr "Évaluation initiale des résidus..."
-#: libgwyddion/gwynlfit.c:479 modules/process/fit-shape.c:1632
+#: libgwyddion/gwynlfit.c:479 modules/process/fit-shape.c:1646
msgid "Fitting..."
msgstr "Ajustement..."
-#: libgwyddion/gwynlfitpreset.c:1442 libprocess/gwyprocessenums.c:101
-#: libprocess/gwyshapefitpreset.c:347
+#: libgwyddion/gwynlfitpreset.c:1549 libprocess/gwyprocessenums.c:101
+#: libprocess/gwyshapefitpreset.c:347 modules/process/psf-fit.c:157
msgid "Gaussian"
msgstr "Gaussienne"
-#: libgwyddion/gwynlfitpreset.c:1457
+#: libgwyddion/gwynlfitpreset.c:1564
msgid "Gaussian (PSDF)"
msgstr "Gaussienne (PSDF)"
-#: libgwyddion/gwynlfitpreset.c:1470
+#: libgwyddion/gwynlfitpreset.c:1577
msgid "Gaussian (ACF)"
msgstr "Gaussienne (ACF)"
-#: libgwyddion/gwynlfitpreset.c:1483
+#: libgwyddion/gwynlfitpreset.c:1590
msgid "Gaussian (HHCF)"
msgstr "Gaussienne (HHCF)"
-#: libgwyddion/gwynlfitpreset.c:1496
+#: libgwyddion/gwynlfitpreset.c:1603
msgid "Gaussian (RPSDF)"
msgstr "Gaussienne (RPSDF)"
-#: libgwyddion/gwynlfitpreset.c:1509
+#: libgwyddion/gwynlfitpreset.c:1616
msgid "Two Gaussians (PSDF)"
msgstr "Gaussienne double (PSDF)"
-#: libgwyddion/gwynlfitpreset.c:1524 modules/xyz/xyz_drift.c:841
-#: modules/xyz/xyz_drift.c:846 modules/xyz/xyz_drift.c:1819
+#: libgwyddion/gwynlfitpreset.c:1631 modules/xyz/xyz_drift.c:841
+#: modules/xyz/xyz_drift.c:846 modules/xyz/xyz_drift.c:1818
msgid "Exponential"
msgstr "Exponentielle"
-#: libgwyddion/gwynlfitpreset.c:1536
+#: libgwyddion/gwynlfitpreset.c:1643
msgid "Exponential (PSDF)"
msgstr "Exponentielle (PSDF)"
-#: libgwyddion/gwynlfitpreset.c:1549
+#: libgwyddion/gwynlfitpreset.c:1656
msgid "Exponential (ACF)"
msgstr "Exponentielle (ACF)"
-#: libgwyddion/gwynlfitpreset.c:1561
+#: libgwyddion/gwynlfitpreset.c:1668
msgid "Exponential (HHCF)"
msgstr "Exponentielle (HHCF)"
-#: libgwyddion/gwynlfitpreset.c:1574
+#: libgwyddion/gwynlfitpreset.c:1681
msgid "Exponential (RPSDF)"
msgstr "Exponentielle (RPSDF)"
-#: libgwyddion/gwynlfitpreset.c:1588
+#: libgwyddion/gwynlfitpreset.c:1695
+msgid "K-correlated (PSDF)"
+msgstr "K-corrélé (PSDF)"
+
+#: libgwyddion/gwynlfitpreset.c:1709
msgid "Polynomial (order 0)"
msgstr "Polynôme (ordre 0)"
-#: libgwyddion/gwynlfitpreset.c:1599 modules/xyz/xyz_drift.c:1805
+#: libgwyddion/gwynlfitpreset.c:1720 modules/xyz/xyz_drift.c:1804
msgid "Polynomial (order 1)"
msgstr "Polynôme (ordre 1)"
-#: libgwyddion/gwynlfitpreset.c:1610
+#: libgwyddion/gwynlfitpreset.c:1731
msgid "Polynomial (order 2)"
msgstr "Polynôme (ordre 2)"
-#: libgwyddion/gwynlfitpreset.c:1622
+#: libgwyddion/gwynlfitpreset.c:1743
msgid "Polynomial (order 3)"
msgstr "Polynôme (ordre 3)"
-#: libgwyddion/gwynlfitpreset.c:1635
+#: libgwyddion/gwynlfitpreset.c:1756
msgid "Square wave"
msgstr "Onde carrée"
-#: libgwyddion/gwynlfitpreset.c:1651
+#: libgwyddion/gwynlfitpreset.c:1772
msgid "Parabolic step"
msgstr "Porte parabolique"
-#: libgwyddion/gwynlfitpreset.c:1667
+#: libgwyddion/gwynlfitpreset.c:1788
msgid "Smooth slanted step"
msgstr "Marche inclinée"
-#: libgwyddion/gwynlfitpreset.c:1684
+#: libgwyddion/gwynlfitpreset.c:1805
msgid "Smooth bent step"
msgstr "Marche déformée"
-#: libgwyddion/gwynlfitpreset.c:1700
+#: libgwyddion/gwynlfitpreset.c:1821
+msgid "Boltzmann bent step"
+msgstr "Marche de Boltzmann déformée"
+
+#: libgwyddion/gwynlfitpreset.c:1837
msgid "Power"
msgstr "Puissance"
-#: libgwyddion/gwynlfitpreset.c:1712 libprocess/gwyshapefitpreset.c:348
+#: libgwyddion/gwynlfitpreset.c:1849 libprocess/gwyshapefitpreset.c:348
msgid "Lorentzian"
msgstr "Lorentzienne"
-#: libgwyddion/gwynlfitpreset.c:1726
+#: libgwyddion/gwynlfitpreset.c:1863
msgid "Sinc"
msgstr "Sinus cardinal"
@@ -250,7 +259,7 @@ msgid "Step height (positive)"
msgstr "Hauteur de porte (positive)"
#: libprocess/cdline.c:590 libprocess/cdline.c:599
-#: libgwydgets/gwydgetenums.c:48 modules/process/hough.c:170
+#: libgwydgets/gwydgetenums.c:48 modules/process/hough.c:163
msgid "Line"
msgstr "Ligne"
@@ -263,7 +272,7 @@ msgid "Circle (down)"
msgstr "Cercle (bas)"
#: libprocess/cdline.c:608 libprocess/cdline.c:617
-#: libgwydgets/gwygraphareadialog.c:557 modules/process/hough.c:171
+#: libgwydgets/gwygraphareadialog.c:550 modules/process/hough.c:164
msgid "Circle"
msgstr "Cercle"
@@ -271,237 +280,237 @@ msgstr "Cercle"
msgid "Circle (up)"
msgstr "Cercle (haut)"
-#: libprocess/gwygrainvalue.c:64
+#: libprocess/gwygrainvalue.c:62
msgid "Grain number"
msgstr "Numéro du grain"
-#: libprocess/gwygrainvalue.c:73 modules/process/curvature.c:129
+#: libprocess/gwygrainvalue.c:71 modules/process/curvature.c:128
msgid "Center x position"
msgstr "Position centrale X"
-#: libprocess/gwygrainvalue.c:82 modules/process/curvature.c:130
+#: libprocess/gwygrainvalue.c:80 modules/process/curvature.c:129
msgid "Center y position"
msgstr "Position centrale Y"
-#: libprocess/gwygrainvalue.c:91
+#: libprocess/gwygrainvalue.c:89
msgid "Minimum value"
msgstr "Minimum"
-#: libprocess/gwygrainvalue.c:100
+#: libprocess/gwygrainvalue.c:98
msgid "Maximum value"
msgstr "Maximum"
-#: libprocess/gwygrainvalue.c:109 modules/process/bdep_synth.c:133
-#: modules/tools/filter.c:237
+#: libprocess/gwygrainvalue.c:107 modules/process/bdep_synth.c:133
+#: modules/tools/filter.c:238
msgid "Mean value"
msgstr "Moyenne"
-#: libprocess/gwygrainvalue.c:118 modules/tools/filter.c:238
+#: libprocess/gwygrainvalue.c:116 modules/tools/filter.c:239
msgid "Median value"
msgstr "Médiane"
-#: libprocess/gwygrainvalue.c:127
+#: libprocess/gwygrainvalue.c:125
msgid "Minimum value on boundary"
msgstr "Minimum du bord"
-#: libprocess/gwygrainvalue.c:136
+#: libprocess/gwygrainvalue.c:134
msgid "Maximum value on boundary"
msgstr "Maximum du bord"
-#: libprocess/gwygrainvalue.c:145
+#: libprocess/gwygrainvalue.c:143
msgid "Pixel area"
msgstr "Aire du pixel"
-#: libprocess/gwygrainvalue.c:154
+#: libprocess/gwygrainvalue.c:152
msgid "Projected area"
msgstr "Surface projetée"
-#: libprocess/gwygrainvalue.c:163
+#: libprocess/gwygrainvalue.c:161
msgid "Surface area"
msgstr "Surface"
-#: libprocess/gwygrainvalue.c:172
+#: libprocess/gwygrainvalue.c:170
msgid "Equivalent square side"
msgstr "Côté équivalent"
-#: libprocess/gwygrainvalue.c:181
+#: libprocess/gwygrainvalue.c:179
msgid "Equivalent disc radius"
msgstr "Rayon équivalent"
-#: libprocess/gwygrainvalue.c:190
+#: libprocess/gwygrainvalue.c:188
msgid "Area above half-height"
msgstr "Surface au dessus de la mi-hauteur"
-#: libprocess/gwygrainvalue.c:199
+#: libprocess/gwygrainvalue.c:197
msgid "Area of convex hull"
msgstr "Aire de l'enveloppe convexe"
#. TRANSLATORS: Grain volume calculated using basis (foot) set to
#. * zero.
-#: libprocess/gwygrainvalue.c:210
+#: libprocess/gwygrainvalue.c:208
msgid "Zero basis volume"
msgstr "Volume (base : zéro)"
#. TRANSLATORS: Grain volume calculated using basis (foot) set to the
#. * grain minimum.
-#: libprocess/gwygrainvalue.c:221
+#: libprocess/gwygrainvalue.c:219
msgid "Grain minimum basis volume"
msgstr "Volume (base : minimum de grain)"
#. TRANSLATORS: Grain volume calculated using basis (foot) set to the
#. * Laplacian background.
-#: libprocess/gwygrainvalue.c:232
+#: libprocess/gwygrainvalue.c:230
msgid "Laplacian background basis volume"
msgstr "Volume (base : arrière-plan laplacien)"
-#: libprocess/gwygrainvalue.c:241
+#: libprocess/gwygrainvalue.c:239
msgid "Projected boundary length"
msgstr "Périmètre projeté"
-#: libprocess/gwygrainvalue.c:250
+#: libprocess/gwygrainvalue.c:248
msgid "Minimum bounding size"
msgstr "Largeur"
-#: libprocess/gwygrainvalue.c:259
+#: libprocess/gwygrainvalue.c:257
msgid "Minimum bounding direction"
msgstr "Orientation de la largeur"
-#: libprocess/gwygrainvalue.c:268
+#: libprocess/gwygrainvalue.c:266
msgid "Maximum bounding size"
msgstr "Longueur"
-#: libprocess/gwygrainvalue.c:277
+#: libprocess/gwygrainvalue.c:275
msgid "Maximum bounding direction"
msgstr "Orientation de la longueur"
-#: libprocess/gwygrainvalue.c:286
+#: libprocess/gwygrainvalue.c:284
msgid "Maximum inscribed disc radius"
msgstr "Rayon maximal du disque inscrit"
-#: libprocess/gwygrainvalue.c:295
+#: libprocess/gwygrainvalue.c:293
msgid "Maximum inscribed disc center x position"
msgstr "Position x du centre du disque inscrit maximal"
-#: libprocess/gwygrainvalue.c:304
+#: libprocess/gwygrainvalue.c:302
msgid "Maximum inscribed disc center y position"
msgstr "Position y du centre du disque inscrit maximal"
-#: libprocess/gwygrainvalue.c:313
+#: libprocess/gwygrainvalue.c:311
msgid "Minimum circumcircle radius"
msgstr "Rayon minimal du cercle circonscrit"
-#: libprocess/gwygrainvalue.c:322
+#: libprocess/gwygrainvalue.c:320
msgid "Minimum circumcircle center x position"
msgstr "Position x du centre du cercle circonscrit minimal"
-#: libprocess/gwygrainvalue.c:331
+#: libprocess/gwygrainvalue.c:329
msgid "Minimum circumcircle center y position"
msgstr "Position y du centre du cercle circonscrit minimal"
-#: libprocess/gwygrainvalue.c:340
+#: libprocess/gwygrainvalue.c:338
msgid "Mean radius"
msgstr "Rayon moyen"
-#: libprocess/gwygrainvalue.c:349 modules/tools/readvalue.c:319
+#: libprocess/gwygrainvalue.c:347 modules/tools/readvalue.c:322
msgid "Inclination θ"
msgstr "Inclinaison θ"
-#: libprocess/gwygrainvalue.c:358 modules/tools/readvalue.c:329
+#: libprocess/gwygrainvalue.c:356 modules/tools/readvalue.c:332
msgid "Inclination φ"
msgstr "Inclinaison φ"
-#: libprocess/gwygrainvalue.c:367
+#: libprocess/gwygrainvalue.c:365
msgid "Curvature center x position"
msgstr "Position x du centre de courbure"
-#: libprocess/gwygrainvalue.c:376
+#: libprocess/gwygrainvalue.c:374
msgid "Curvature center y position"
msgstr "Position y du centre de courbure"
-#: libprocess/gwygrainvalue.c:385
+#: libprocess/gwygrainvalue.c:383
msgid "Curvature center z value"
msgstr "Valeur z du centre de courbure"
-#: libprocess/gwygrainvalue.c:394 modules/tools/readvalue.c:344
+#: libprocess/gwygrainvalue.c:392 modules/tools/readvalue.c:347
msgid "Curvature 1"
msgstr "Courbure 1"
-#: libprocess/gwygrainvalue.c:403 modules/tools/readvalue.c:354
+#: libprocess/gwygrainvalue.c:401 modules/tools/readvalue.c:357
msgid "Curvature 2"
msgstr "Courbure 2"
-#: libprocess/gwygrainvalue.c:412
+#: libprocess/gwygrainvalue.c:410
msgid "Curvature angle 1"
msgstr "Angle de courbure 1"
-#: libprocess/gwygrainvalue.c:421
+#: libprocess/gwygrainvalue.c:419
msgid "Curvature angle 2"
msgstr "Angle de courbure 2"
-#: libprocess/gwygrainvalue.c:430
+#: libprocess/gwygrainvalue.c:428
msgid "Major semiaxis of equivalent ellipse"
msgstr "Demi grand axe de l'ellipse équivalente"
-#: libprocess/gwygrainvalue.c:439
+#: libprocess/gwygrainvalue.c:437
msgid "Minor semiaxis of equivalent ellipse"
msgstr "Demi petit axe de l'ellipse équivalente"
-#: libprocess/gwygrainvalue.c:448
+#: libprocess/gwygrainvalue.c:446
msgid "Orientation of equivalent ellipse"
msgstr "Orientation de l'ellipse équivalente"
-#: libprocess/gwygrainvalue.c:1120
+#: libprocess/gwygrainvalue.c:1118
msgid "Id"
msgstr "Identifiant"
-#: libprocess/gwygrainvalue.c:1121 modules/graph/graph_peaks.c:156
-#: modules/process/extract_path.c:391 modules/process/wave_synth.c:482
-#: modules/tools/readvalue.c:251
+#: libprocess/gwygrainvalue.c:1119 modules/graph/graph_peaks.c:154
+#: modules/process/extract_path.c:391 modules/process/wave_synth.c:513
+#: modules/tools/readvalue.c:253
msgid "Position"
msgstr "Position"
-#: libprocess/gwygrainvalue.c:1122 app/meta.c:411 modules/file/imgexport.c:4625
-#: modules/process/curvature.c:762 modules/tools/level3.c:468
-#: modules/tools/readvalue.c:286
+#: libprocess/gwygrainvalue.c:1120 app/meta.c:411 modules/file/imgexport.c:4573
+#: modules/process/curvature.c:759 modules/tools/level3.c:475
+#: modules/tools/readvalue.c:290
msgid "Value"
msgstr "Valeur"
-#: libprocess/gwygrainvalue.c:1123
+#: libprocess/gwygrainvalue.c:1121
msgid "Area"
msgstr "Surface"
-#: libprocess/gwygrainvalue.c:1124 app/data-browser.c:5624 app/toolbox.c:110
+#: libprocess/gwygrainvalue.c:1122 app/data-browser.c:5624 app/toolbox.c:115
msgid "Volume"
msgstr "Volume"
-#: libprocess/gwygrainvalue.c:1125
+#: libprocess/gwygrainvalue.c:1123
msgid "Boundary"
msgstr "Bord"
-#: libprocess/gwygrainvalue.c:1126 modules/process/pat_synth.c:829
-#: modules/process/pat_synth.c:1131 modules/process/pat_synth.c:1466
-#: modules/tools/linestats.c:171 modules/volume/volume_linestat.c:147
+#: libprocess/gwygrainvalue.c:1124 modules/process/pat_synth.c:830
+#: modules/process/pat_synth.c:1132 modules/process/pat_synth.c:1467
+#: modules/tools/linestats.c:171 modules/volume/volume_linestat.c:149
msgid "Slope"
msgstr "Pente"
-#: libprocess/gwygrainvalue.c:1127 modules/process/curvature.c:213
-#: modules/process/curvature.c:613
+#: libprocess/gwygrainvalue.c:1125 modules/process/curvature.c:212
+#: modules/process/curvature.c:615
msgid "Curvature"
msgstr "Courbure"
-#: libprocess/gwygrainvalue.c:1128
+#: libprocess/gwygrainvalue.c:1126
msgid "Moment"
msgstr "Moment"
-#: libprocess/gwygrainvalue.c:1132
+#: libprocess/gwygrainvalue.c:1130
msgid "User"
msgstr "Utilisateur"
-#: libprocess/gwyprocessenums.c:44
+#: libprocess/gwyprocessenums.c:44 modules/process/preview.h:263
msgid "Union"
msgstr "Union"
-#: libprocess/gwyprocessenums.c:45
+#: libprocess/gwyprocessenums.c:45 modules/process/preview.h:255
msgid "Intersection"
msgstr "Intersection"
@@ -580,13 +589,13 @@ msgid "Scale and space adaptive"
msgstr "Échelle et espace adaptatifs"
#. TRANSLATORS: Interpolation type (AKA nearest neighbour)
-#: libprocess/gwyprocessenums.c:207 modules/file/imgexport.c:3791
-#: modules/xyz/xyz_raster.c:640
+#: libprocess/gwyprocessenums.c:207 modules/file/imgexport.c:3756
+#: modules/xyz/xyz_raster.c:609
msgid "Round"
msgstr "Arrondi"
-#: libprocess/gwyprocessenums.c:208 modules/file/imgexport.c:3792
-#: modules/xyz/xyz_raster.c:641
+#: libprocess/gwyprocessenums.c:208 modules/file/imgexport.c:3757
+#: modules/xyz/xyz_raster.c:610
msgid "Linear"
msgstr "Linéaire"
@@ -674,27 +683,27 @@ msgstr "Inclure uniquement la région masquée"
msgid "Use entire image (ignore mask)"
msgstr "Utiliser l'image entière (ignorer le masque)"
-#: libprocess/gwyprocessenums.c:602
+#: libprocess/gwyprocessenums.c:604
msgid "distance|City-block"
msgstr "Manhattan"
-#: libprocess/gwyprocessenums.c:603
+#: libprocess/gwyprocessenums.c:605
msgid "distance|Chess"
msgstr "Tchebychev"
-#: libprocess/gwyprocessenums.c:604
+#: libprocess/gwyprocessenums.c:606
msgid "distance|Octagonal 4,8"
msgstr "Octogonale 4,8"
-#: libprocess/gwyprocessenums.c:605
+#: libprocess/gwyprocessenums.c:607
msgid "distance|Octagonal 8,4"
msgstr "Octogonale 8,4"
-#: libprocess/gwyprocessenums.c:606
+#: libprocess/gwyprocessenums.c:608
msgid "distance|Octagonal"
msgstr "Octogonale"
-#: libprocess/gwyprocessenums.c:607
+#: libprocess/gwyprocessenums.c:609
msgid "distance|Euclidean"
msgstr "Euclidienne"
@@ -730,11 +739,11 @@ msgstr "Bosse parabolique"
msgid "Ring"
msgstr "Anneau"
-#: libprocess/morph_lib.c:169 libprocess/tip.c:1043
+#: libprocess/morph_lib.c:169 libprocess/tip.c:1052
msgid "Dilation..."
msgstr "Dilatation..."
-#: libprocess/morph_lib.c:235 libprocess/tip.c:1164
+#: libprocess/morph_lib.c:235 libprocess/tip.c:1173
msgid "Erosion..."
msgstr "Érosion..."
@@ -765,81 +774,81 @@ msgid_plural "Found %d internal local maxima"
msgstr[0] "Un maximum local interne a été trouvé"
msgstr[1] "%d maxima locaux internes ont été trouvés"
-#: libprocess/tip.c:422
+#: libprocess/tip.c:431
msgid "Pyramid"
msgstr "Pyramide"
-#: libprocess/tip.c:423 libprocess/tip.c:429 libprocess/tip.c:435
+#: libprocess/tip.c:432 libprocess/tip.c:438 libprocess/tip.c:444
msgid "Pyramidal"
msgstr "Pyramidal"
-#: libprocess/tip.c:428
+#: libprocess/tip.c:437
msgid "Contact"
msgstr "Contact"
-#: libprocess/tip.c:434
+#: libprocess/tip.c:443
msgid "Noncontact"
msgstr "Sans contact"
-#: libprocess/tip.c:440
+#: libprocess/tip.c:449
msgid "Delta function"
msgstr "Fonction delta"
-#: libprocess/tip.c:441
+#: libprocess/tip.c:450
msgid "Analytical"
msgstr "Analytique"
-#: libprocess/tip.c:446
+#: libprocess/tip.c:455 modules/process/fibre_synth.c:259
msgid "Parabola"
msgstr "Parabole"
-#: libprocess/tip.c:447 libprocess/tip.c:453
+#: libprocess/tip.c:456 libprocess/tip.c:462
msgid "Symmetric"
msgstr "Symétrique"
-#: libprocess/tip.c:452
+#: libprocess/tip.c:461
msgid "Cone"
msgstr "Cône"
-#: libprocess/tip.c:458
+#: libprocess/tip.c:467
msgid "Elliptical parabola"
msgstr "Parabole elliptique"
-#: libprocess/tip.c:459
+#: libprocess/tip.c:468
msgid "Asymmetric"
msgstr "Asymétrique"
-#: libprocess/tip.c:1339 libprocess/tip.c:1367 libprocess/tip.c:1416
-#: libprocess/tip.c:1443
+#: libprocess/tip.c:1348 libprocess/tip.c:1376 libprocess/tip.c:1425
+#: libprocess/tip.c:1452
msgid "Converting fields"
msgstr "Conversion des champs"
-#: libprocess/tip.c:1349
+#: libprocess/tip.c:1358
msgid "Starting partial estimation"
msgstr "Démarrage de l'estimation partielle"
-#: libprocess/tip.c:1426
+#: libprocess/tip.c:1435
msgid "Starting full estimation"
msgstr "Démarrage de l'estimation complète"
-#: libprocess/triangulation.c:2085 modules/process/calcoefs_view.c:793
+#: libprocess/triangulation.c:2084 modules/process/calcoefs_view.c:793
#: modules/process/lat_synth.c:1178
msgid "Triangulating..."
msgstr "Triangulation..."
-#: libgwydgets/gwy3dwindow.c:570
+#: libgwydgets/gwy3dwindow.c:575
msgid "Rotate view (R)"
msgstr "Tourner la vue (R)"
-#: libgwydgets/gwy3dwindow.c:575
+#: libgwydgets/gwy3dwindow.c:580
msgid "Scale view as a whole (S)"
msgstr "Modifier l'échelle de la vue (S)"
-#: libgwydgets/gwy3dwindow.c:580
+#: libgwydgets/gwy3dwindow.c:585
msgid "Scale value range (V)"
msgstr "Modifier l'échelle de hauteur (V)"
-#: libgwydgets/gwy3dwindow.c:585
+#: libgwydgets/gwy3dwindow.c:590
msgid "Move light source (L)"
msgstr "Déplacer la source de lumière (L)"
@@ -847,227 +856,286 @@ msgstr "Déplacer la source de lumière (L)"
msgid "Show full controls"
msgstr "Montrer tous les contrôles"
-#: libgwydgets/gwy3dwindow.c:693
+#: libgwydgets/gwy3dwindow.c:691
msgid "Hide full controls"
msgstr "Masquer tous les contrôles"
-#: libgwydgets/gwy3dwindow.c:709 modules/file/imgexport.c:4796
-#: modules/process/fit-shape.c:461
+#: libgwydgets/gwy3dwindow.c:707 modules/file/imgexport.c:4745
+#: modules/process/fit-shape.c:462
msgid "adjective|Basic"
msgstr "Basique"
-#: libgwydgets/gwy3dwindow.c:714
+#: libgwydgets/gwy3dwindow.c:712
msgid "Light & Material"
msgstr "Lumière et matériau"
-#: libgwydgets/gwy3dwindow.c:719
+#: libgwydgets/gwy3dwindow.c:717
msgid "Labels"
msgstr "Légendes"
-#: libgwydgets/gwy3dwindow.c:828 modules/process/facet_analysis.c:331
-#: modules/process/facet_analysis.c:347 modules/process/shade.c:245
+#: libgwydgets/gwy3dwindow.c:722
+msgid "Colorbar"
+msgstr "Échelle de couleur"
+
+#: libgwydgets/gwy3dwindow.c:838 modules/process/facet_analysis.c:335
+#: modules/process/facet_analysis.c:351 modules/process/shade.c:253
#: modules/process/tilt.c:223
msgid "φ:"
msgstr "φ :"
-#: libgwydgets/gwy3dwindow.c:828 libgwydgets/gwy3dwindow.c:834
-#: libgwydgets/gwy3dwindow.c:1032 libgwydgets/gwy3dwindow.c:1040
-#: modules/process/facet_analysis.c:375 modules/process/indent_analyze.c:460
-#: modules/process/rotate.c:264 modules/process/shade.c:237
-#: modules/process/shade.c:245 modules/process/tilt.c:211
-#: modules/process/tilt.c:223 modules/process/tip_model.c:234
-#: modules/process/tip_model.c:240 modules/process/unrotate.c:334
+#: libgwydgets/gwy3dwindow.c:838 libgwydgets/gwy3dwindow.c:843
+#: libgwydgets/gwy3dwindow.c:1013 libgwydgets/gwy3dwindow.c:1020
+#: modules/process/correct_affine.c:461 modules/process/facet_analysis.c:238
+#: modules/process/facet_analysis.c:370 modules/process/indent_analyze.c:438
+#: modules/process/measure_lattice.c:381 modules/process/rotate.c:264
+#: modules/process/shade.c:245 modules/process/shade.c:253
+#: modules/process/synth.h:379 modules/process/synth.h:410
+#: modules/process/tilt.c:211 modules/process/tilt.c:223
+#: modules/process/tip_model.c:234 modules/process/tip_model.c:240
+#: modules/process/unrotate.c:334 modules/tools/distance.c:197
+#: modules/tools/readvalue.c:223 modules/tools/stats.c:319
msgid "deg"
msgstr "deg"
-#: libgwydgets/gwy3dwindow.c:834 modules/process/facet_analysis.c:330
-#: modules/process/facet_analysis.c:346 modules/process/shade.c:237
+#: libgwydgets/gwy3dwindow.c:843 modules/process/facet_analysis.c:334
+#: modules/process/facet_analysis.c:350 modules/process/shade.c:245
#: modules/process/tilt.c:211
msgid "θ:"
msgstr "θ :"
-#: libgwydgets/gwy3dwindow.c:839 modules/process/cwt.c:151
+#: libgwydgets/gwy3dwindow.c:849 modules/process/cwt.c:151
msgid "_Scale:"
msgstr "Échelle :"
-#: libgwydgets/gwy3dwindow.c:846
+#: libgwydgets/gwy3dwindow.c:856
msgid "_Value scale:"
msgstr "Échelle de hauteur :"
-#: libgwydgets/gwy3dwindow.c:851
+#: libgwydgets/gwy3dwindow.c:862
msgid "Ph_ysical scale:"
msgstr "Échelle ph_ysique :"
-#: libgwydgets/gwy3dwindow.c:865
+#: libgwydgets/gwy3dwindow.c:876
msgid "verb|Set"
msgstr "Ajuster"
-#: libgwydgets/gwy3dwindow.c:877
+#: libgwydgets/gwy3dwindow.c:886
msgid "Line _width:"
msgstr "Largeur de ligne :"
-#: libgwydgets/gwy3dwindow.c:881
+#: libgwydgets/gwy3dwindow.c:886 libgwydgets/gwy3dwindow.c:1194
+#: libgwydgets/gwy3dwindow.c:1204 libgwydgets/gwy3dwindow.c:1235
+#: libgwydgets/gwygraphareadialog.c:157 libgwydgets/gwygraphareadialog.c:173
+#: modules/file/hdrimage.cc:2246 modules/file/hdrimage.cc:2252
+#: modules/file/pixmap.c:820 modules/file/pixmap.c:826
+#: modules/process/angle_dist.c:188 modules/process/angle_dist.c:213
+#: modules/process/col_synth.c:486 modules/process/crosscor.c:252
+#: modules/process/crosscor.c:260 modules/process/crosscor.c:276
+#: modules/process/crosscor.c:284 modules/process/crosscor.c:300
+#: modules/process/crosscor.c:308 modules/process/cwt.c:151
+#: modules/process/dimensions.h:88 modules/process/edge.c:672
+#: modules/process/entropy.c:242 modules/process/extend.c:220
+#: modules/process/extend.c:227 modules/process/extend.c:234
+#: modules/process/extend.c:241 modules/process/facet_analysis.c:362
+#: modules/process/fbm_synth.c:383 modules/process/hough.c:203
+#: modules/process/local_contrast.c:146 modules/process/mark_disconn.c:263
+#: modules/process/mask_morph.c:237 modules/process/median-bg.c:209
+#: modules/process/neural.c:623 modules/process/neural.c:631
+#: modules/process/psdf_logphi.c:276 modules/process/rank.c:188
+#: modules/process/scale.c:237 modules/process/scale.c:246
+#: modules/process/scars.c:353 modules/process/scars.c:361
+#: modules/process/semsim.c:227 modules/process/slope_dist.c:365
+#: modules/process/slope_dist.c:393 modules/process/sphere-revolve.c:346
+#: modules/process/straighten_path.c:278 modules/process/synth.h:280
+#: modules/process/synth.h:501 modules/process/tip_blind.c:334
+#: modules/process/tip_blind.c:342 modules/process/volumize_layers.c:240
+#: modules/process/volumize_layers.c:245 modules/process/volumize_layers.c:250
+#: modules/process/wpour_mark.c:320 modules/tools/filter.c:291
+#: modules/tools/level3.c:244 modules/tools/maskedit.c:528
+#: modules/tools/maskedit.c:629 modules/tools/pathlevel.c:256
+#: modules/tools/profile.c:377 modules/tools/profile.c:503
+#: modules/tools/readvalue.c:222 modules/tools/readvalue.c:378
+#: modules/tools/roughness.c:868 modules/volume/volume_slice.c:446
+#: modules/volume/volume_slice.c:469 modules/volume/volume_slice.c:492
+#: modules/xyz/xyz_drift.c:738 modules/xyz/xyz_drift.c:753
+#: modules/xyz/xyz_raster.c:382 modules/xyz/xyz_raster.c:388
+msgid "px"
+msgstr "px"
+
+#: libgwydgets/gwy3dwindow.c:891
msgid "Show _axes"
msgstr "Montrer les _axes"
-#: libgwydgets/gwy3dwindow.c:890
+#: libgwydgets/gwy3dwindow.c:900
msgid "Show _labels"
msgstr "Montrer les _légendes"
-#: libgwydgets/gwy3dwindow.c:899
-msgid "Show false _colorbar"
-msgstr "Afficher l'échelle de _couleurs"
-
-#: libgwydgets/gwy3dwindow.c:908
+#: libgwydgets/gwy3dwindow.c:909
msgid "_Orthographic projection"
msgstr "Projection _orthographique"
-#: libgwydgets/gwy3dwindow.c:917
+#: libgwydgets/gwy3dwindow.c:918
msgid "_Hide masked"
msgstr "Rendre les points masqués invisibles"
-#: libgwydgets/gwy3dwindow.c:933
+#: libgwydgets/gwy3dwindow.c:934
msgid "_Lighting"
msgstr "Éclairage"
-#: libgwydgets/gwy3dwindow.c:934
+#: libgwydgets/gwy3dwindow.c:935
msgid "_Gradient"
msgstr "_Gradient"
-#: libgwydgets/gwy3dwindow.c:935
+#: libgwydgets/gwy3dwindow.c:936
msgid "_Overlay"
msgstr "Superp_osition"
-#: libgwydgets/gwy3dwindow.c:936
+#: libgwydgets/gwy3dwindow.c:937
msgid "_Overlay - no light"
msgstr "Superp_osition - sans éclairage"
-#: libgwydgets/gwy3dwindow.c:1009
+#: libgwydgets/gwy3dwindow.c:992
msgid "_Material:"
msgstr "_Matériau :"
-#: libgwydgets/gwy3dwindow.c:1032
+#: libgwydgets/gwy3dwindow.c:1013
msgid "_Light φ:"
msgstr "Angle _lumière φ :"
-#: libgwydgets/gwy3dwindow.c:1040
+#: libgwydgets/gwy3dwindow.c:1020
msgid "L_ight θ:"
msgstr "Angle lum_ière θ :"
-#: libgwydgets/gwy3dwindow.c:1070 libgwydgets/gwy3dwindow.c:1240
-#: app/toolbox-editor.c:215 modules/file/hdrimage.cc:2213
-#: modules/file/imgexport.c:4760 modules/file/pixmap.c:789
+#: libgwydgets/gwy3dwindow.c:1052 libgwydgets/gwy3dwindow.c:1243
+#: app/toolbox-editor.c:216 modules/file/hdrimage.cc:2213
+#: modules/file/imgexport.c:4708 modules/file/pixmap.c:789
#: modules/file/rawfile.c:424 modules/process/angle_dist.c:172
#: modules/process/bdep_synth.c:341 modules/process/calcoefs_new.c:371
-#: modules/process/calibrate.c:391 modules/process/col_synth.c:392
-#: modules/process/correct_affine.c:301 modules/process/curvature.c:615
-#: modules/process/cwt.c:135 modules/process/deposit_synth.c:349
+#: modules/process/calibrate.c:383 modules/process/col_synth.c:392
+#: modules/process/correct_affine.c:346 modules/process/curvature.c:617
+#: modules/process/cwt.c:135 modules/process/deposit_synth.c:350
#: modules/process/diff_synth.c:411 modules/process/domain_synth.c:354
#: modules/process/drift.c:245 modules/process/dwt.c:166
#: modules/process/dwtanisotropy.c:184 modules/process/edge.c:638
#: modules/process/extend.c:192 modules/process/facet-level.c:193
-#: modules/process/facet_analysis.c:271 modules/process/fbm_synth.c:303
+#: modules/process/facet_analysis.c:275 modules/process/fbm_synth.c:303
#: modules/process/fft.c:336 modules/process/fft_filter_2d.c:417
-#: modules/process/fft_synth.c:341 modules/process/fractal.c:231
-#: modules/process/grain_edge.c:213 modules/process/grain_mark.c:247
-#: modules/process/grain_wshed.c:167 modules/process/hough.c:179
-#: modules/process/lat_synth.c:567 modules/process/latsim.c:159
-#: modules/process/level.c:245 modules/process/linematch.c:804
-#: modules/process/lno_synth.c:433 modules/process/local_contrast.c:130
-#: modules/process/logistic.c:234 modules/process/mark_disconn.c:208
-#: modules/process/mask_distribute.c:152 modules/process/measure_lattice.c:256
-#: modules/process/median-bg.c:180 modules/process/noise_synth.c:336
-#: modules/process/obj_synth.c:441 modules/process/pat_synth.c:385
-#: modules/process/pid.c:199 modules/process/polydistort.c:210
-#: modules/process/polylevel.c:373 modules/process/psdf_logphi.c:249
-#: modules/process/rank.c:158 modules/process/rotate.c:243
-#: modules/process/scale.c:196 modules/process/scars.c:298
-#: modules/process/semsim.c:211 modules/process/shade.c:208
-#: modules/process/slope_dist.c:276 modules/process/sphere-revolve.c:218
-#: modules/process/straighten_path.c:249 modules/process/tilt.c:161
-#: modules/process/tip_model.c:169 modules/process/unrotate.c:220
-#: modules/process/volumize_layers.c:221 modules/process/wave_synth.c:349
-#: modules/process/wpour_mark.c:278 modules/volume/volume_calibrate.c:370
-#: modules/volume/volume_extract.c:331 modules/volume/volume_kmeans.c:153
-#: modules/volume/volume_kmedians.c:147 modules/volume/volume_linestat.c:292
-#: modules/volume/volume_slice.c:292
+#: modules/process/fft_synth.c:341 modules/process/fibre_synth.c:422
+#: modules/process/fractal.c:228 modules/process/grain_edge.c:212
+#: modules/process/grain_mark.c:246 modules/process/grain_wshed.c:168
+#: modules/process/hough.c:174 modules/process/lat_synth.c:567
+#: modules/process/latsim.c:159 modules/process/level.c:245
+#: modules/process/linematch.c:771 modules/process/lno_synth.c:431
+#: modules/process/local_contrast.c:130 modules/process/logistic.c:234
+#: modules/process/mark_disconn.c:208 modules/process/mask_distribute.c:152
+#: modules/process/measure_lattice.c:246 modules/process/median-bg.c:180
+#: modules/process/mfm_current.c:332 modules/process/mfm_field.c:281
+#: modules/process/mfm_findshift.c:230 modules/process/mfm_parallel.c:333
+#: modules/process/mfm_shift.c:170 modules/process/noise_synth.c:334
+#: modules/process/obj_synth.c:438 modules/process/pat_synth.c:385
+#: modules/process/phase_synth.c:205 modules/process/pid.c:197
+#: modules/process/polydistort.c:210 modules/process/polylevel.c:373
+#: modules/process/psdf_logphi.c:249 modules/process/rank.c:158
+#: modules/process/rotate.c:243 modules/process/scale.c:196
+#: modules/process/scars.c:317 modules/process/semsim.c:211
+#: modules/process/shade.c:210 modules/process/slope_dist.c:275
+#: modules/process/sphere-revolve.c:317 modules/process/straighten_path.c:248
+#: modules/process/tilt.c:161 modules/process/tip_model.c:167
+#: modules/process/unrotate.c:220 modules/process/volumize_layers.c:221
+#: modules/process/wave_synth.c:368 modules/process/wpour_mark.c:278
+#: modules/volume/volume_calibrate.c:370 modules/volume/volume_extract.c:324
+#: modules/volume/volume_kmeans.c:154 modules/volume/volume_kmedians.c:147
+#: modules/volume/volume_linestat.c:297 modules/volume/volume_slice.c:294
msgid "_Reset"
msgstr "_Remise à zéro"
-#: libgwydgets/gwy3dwindow.c:1142
+#: libgwydgets/gwy3dwindow.c:1141
msgid "X-axis"
msgstr "Axe X"
-#: libgwydgets/gwy3dwindow.c:1143
+#: libgwydgets/gwy3dwindow.c:1142
msgid "Y-axis"
msgstr "Axe Y"
-#: libgwydgets/gwy3dwindow.c:1144
+#: libgwydgets/gwy3dwindow.c:1143
msgid "Minimum z value"
msgstr "Valeur Z minimale"
-#: libgwydgets/gwy3dwindow.c:1145
+#: libgwydgets/gwy3dwindow.c:1144
msgid "Maximum z value"
msgstr "Valeur Z maximale"
-#: libgwydgets/gwy3dwindow.c:1168 modules/file/imgexport.c:3836
+#: libgwydgets/gwy3dwindow.c:1167 modules/file/imgexport.c:3806
msgid "_Label:"
msgstr "_Légende :"
-#: libgwydgets/gwy3dwindow.c:1173
+#: libgwydgets/gwy3dwindow.c:1180
msgid "_Text:"
msgstr "_Texte :"
-#: libgwydgets/gwy3dwindow.c:1193
+#: libgwydgets/gwy3dwindow.c:1185
msgid "Move label"
msgstr "Déplacer la légende"
-#: libgwydgets/gwy3dwindow.c:1202
+#: libgwydgets/gwy3dwindow.c:1194
msgid "_Horizontally:"
msgstr "_Horizontalement :"
-#: libgwydgets/gwy3dwindow.c:1212
+#: libgwydgets/gwy3dwindow.c:1204
msgid "_Vertically:"
msgstr "_Verticalement :"
-#: libgwydgets/gwy3dwindow.c:1220
+#: libgwydgets/gwy3dwindow.c:1212
+msgid "A_ll labels have the same size"
+msgstr "Même taille pour toutes les _légendes"
+
+#: libgwydgets/gwy3dwindow.c:1223
msgid "Scale size _automatically"
msgstr "Mise à l'échelle _automatique"
-#: libgwydgets/gwy3dwindow.c:1232 modules/tools/filter.c:290
+#: libgwydgets/gwy3dwindow.c:1235 modules/tools/filter.c:291
msgid "Si_ze:"
msgstr "Taille :"
-#: libgwydgets/gwy3dwindow.c:1232 modules/process/cwt.c:151
-#: modules/process/hough.c:212
-msgid "pixels"
-msgstr "pixels"
+#: libgwydgets/gwy3dwindow.c:1277
+msgid "Show false _colorbar"
+msgstr "Afficher l'échelle de _couleurs"
+
+#: libgwydgets/gwy3dwindow.c:1286
+msgid "Reserve space for _colorbar"
+msgstr ""
+
+#: libgwydgets/gwy3dwindow.c:1302 modules/process/lat_synth.c:651
+#: modules/process/obj_synth.c:542 modules/process/pat_synth.c:1458
+#: modules/process/phase_synth.c:279
+msgid "_Size:"
+msgstr "Dimen_sion :"
-#: libgwydgets/gwy3dwindow.c:1726 libgwydgets/gwy3dwindow.c:1779
+#: libgwydgets/gwy3dwindow.c:1311
+msgid "_Vertical alignment:"
+msgstr "Alignement _vertical :"
+
+#: libgwydgets/gwy3dwindow.c:1844 libgwydgets/gwy3dwindow.c:1897
msgid "S_witch to Lighting Mode"
msgstr "Passer au mode éclairage"
-#: libgwydgets/gwy3dwindow.c:1734 libgwydgets/gwy3dwindow.c:1756
+#: libgwydgets/gwy3dwindow.c:1852 libgwydgets/gwy3dwindow.c:1874
msgid "S_witch to Overlay Mode"
msgstr "Pa_sser au mode superposition"
-#: libgwydgets/gwy3dwindow.c:1748 libgwydgets/gwy3dwindow.c:1771
+#: libgwydgets/gwy3dwindow.c:1866 libgwydgets/gwy3dwindow.c:1889
msgid "S_witch to Color Gradient Mode"
msgstr "Passer au mode gradient de couleur"
-#: libgwydgets/gwy3dwindow.c:1787
+#: libgwydgets/gwy3dwindow.c:1905
msgid "T_oggle light"
msgstr "Basculer l'éclairage"
-#: libgwydgets/gwyaxisdialog.c:99
+#: libgwydgets/gwyaxisdialog.c:75
msgid "Axis Properties"
msgstr "Propriétés des axes"
-#: libgwydgets/gwyaxisdialog.c:101 libgwydgets/gwygraphlabeldialog.c:63
-msgid "Label Properties"
-msgstr "Propriétés des légendes"
-
-#: libgwydgets/gwyaxisdialog.c:184
+#: libgwydgets/gwyaxisdialog.c:88
msgid "Label Text"
msgstr "Texte de légende"
@@ -1089,7 +1157,7 @@ msgid "Hidden"
msgstr "Caché"
#: libgwydgets/gwydgetenums.c:47 libgwydgets/gwygraphwindowmeasuredialog.c:572
-#: modules/file/imgexport.c:475 modules/tools/selectionmanager.c:274
+#: modules/file/imgexport.c:474 modules/tools/selectionmanager.c:274
msgid "Points"
msgstr "Points"
@@ -1097,7 +1165,7 @@ msgstr "Points"
msgid "Line + points"
msgstr "Ligne + points"
-#: libgwydgets/gwydgetutils.c:564
+#: libgwydgets/gwydgetutils.c:848
msgid "Change Mask Color"
msgstr "Changer la couleur du masque"
@@ -1106,7 +1174,7 @@ msgid "Quantity"
msgstr "Quantité"
#: libgwydgets/gwygrainvaluemenu.c:194 libgwydgets/gwygrainvaluemenu.c:207
-#: modules/process/curvature.c:753
+#: modules/process/curvature.c:750
msgid "Symbol"
msgstr "Symbole"
@@ -1126,137 +1194,141 @@ msgstr "Précédent"
msgid "_Next"
msgstr "Suiva_nt"
-#: libgwydgets/gwygraphareadialog.c:127 modules/file/rawgraph.c:302
+#: libgwydgets/gwygraphareadialog.c:123 modules/file/rawgraph.c:302
msgid "Plot _style:"
msgstr "_Style de graphe :"
-#: libgwydgets/gwygraphareadialog.c:148
+#: libgwydgets/gwygraphareadialog.c:131
msgid "Pl_ot color:"
msgstr "C_ouleur du graphe"
-#: libgwydgets/gwygraphareadialog.c:159
+#: libgwydgets/gwygraphareadialog.c:151
msgid "Point _type:"
msgstr "_Type de point :"
-#: libgwydgets/gwygraphareadialog.c:165
+#: libgwydgets/gwygraphareadialog.c:157
msgid "_Point size:"
msgstr "Taille de _point :"
-#: libgwydgets/gwygraphareadialog.c:175
+#: libgwydgets/gwygraphareadialog.c:167
msgid "_Line type:"
msgstr "Type de _ligne :"
-#: libgwydgets/gwygraphareadialog.c:181 modules/file/imgexport.c:3150
+#: libgwydgets/gwygraphareadialog.c:173 modules/file/imgexport.c:3154
msgid "Line t_hickness:"
msgstr "Épaisseur de ligne :"
-#: libgwydgets/gwygraphareadialog.c:187
+#: libgwydgets/gwygraphareadialog.c:180
msgid "<b>Label Te_xt</b>"
msgstr "<b>Te_xte de légende</b>"
-#: libgwydgets/gwygraphareadialog.c:404
+#: libgwydgets/gwygraphareadialog.c:397
msgid "Set Curve Color"
msgstr "Régler la couleur de courbe"
-#: libgwydgets/gwygraphareadialog.c:556 modules/process/mask_morph.c:179
+#: libgwydgets/gwygraphareadialog.c:549 modules/process/mask_morph.c:178
msgid "Square"
msgstr "Carré"
-#: libgwydgets/gwygraphareadialog.c:558 modules/process/mask_morph.c:180
+#: libgwydgets/gwygraphareadialog.c:551 modules/process/mask_morph.c:179
msgid "Diamond"
msgstr "Losange"
-#: libgwydgets/gwygraphareadialog.c:559
+#: libgwydgets/gwygraphareadialog.c:552
msgid "Cross"
msgstr "Croix"
-#: libgwydgets/gwygraphareadialog.c:560
+#: libgwydgets/gwygraphareadialog.c:553
msgid "Diagonal cross"
msgstr "Croix diagonale"
-#: libgwydgets/gwygraphareadialog.c:561
+#: libgwydgets/gwygraphareadialog.c:554
msgid "Asterisk"
msgstr "Astérisque"
-#: libgwydgets/gwygraphareadialog.c:562
+#: libgwydgets/gwygraphareadialog.c:555
msgid "Star"
msgstr "Étoile"
-#: libgwydgets/gwygraphareadialog.c:563
+#: libgwydgets/gwygraphareadialog.c:556
msgid "Triangle up"
msgstr "Triangle haut"
-#: libgwydgets/gwygraphareadialog.c:564
+#: libgwydgets/gwygraphareadialog.c:557
msgid "Triangle down"
msgstr "Triangle bas"
-#: libgwydgets/gwygraphareadialog.c:565
+#: libgwydgets/gwygraphareadialog.c:558
msgid "Triangle left"
msgstr "Triangle gauche"
-#: libgwydgets/gwygraphareadialog.c:566
+#: libgwydgets/gwygraphareadialog.c:559
msgid "Triangle right"
msgstr "Triangle droite"
-#: libgwydgets/gwygraphareadialog.c:567
+#: libgwydgets/gwygraphareadialog.c:560
msgid "Full square"
msgstr "Carré plein"
-#: libgwydgets/gwygraphareadialog.c:568 modules/process/mask_morph.c:177
+#: libgwydgets/gwygraphareadialog.c:561 modules/process/mask_morph.c:176
msgid "Disc"
msgstr "Disque"
-#: libgwydgets/gwygraphareadialog.c:569
+#: libgwydgets/gwygraphareadialog.c:562
msgid "Full diamond"
msgstr "Losange plein"
-#: libgwydgets/gwygraphareadialog.c:570
+#: libgwydgets/gwygraphareadialog.c:563
msgid "Full triangle up"
msgstr "Triangle haut plein"
-#: libgwydgets/gwygraphareadialog.c:571
+#: libgwydgets/gwygraphareadialog.c:564
msgid "Full triangle down"
msgstr "Triangle bas plein"
-#: libgwydgets/gwygraphareadialog.c:572
+#: libgwydgets/gwygraphareadialog.c:565
msgid "Full triangle left"
msgstr "Triangle gauche plein"
-#: libgwydgets/gwygraphareadialog.c:573
+#: libgwydgets/gwygraphareadialog.c:566
msgid "Full triangle right"
msgstr "Triangle droite plein"
-#: libgwydgets/gwygraphareadialog.c:635
+#: libgwydgets/gwygraphareadialog.c:628
msgid "line-style|Solid"
msgstr "Solide"
-#: libgwydgets/gwygraphareadialog.c:636
+#: libgwydgets/gwygraphareadialog.c:629
msgid "line-style|Dash"
msgstr "Pointillé"
-#: libgwydgets/gwygraphcurves.c:451
+#: libgwydgets/gwygraphcurves.c:448
msgid "Description"
msgstr "Description"
-#: libgwydgets/gwygraphcurves.c:463
+#: libgwydgets/gwygraphcurves.c:460
msgid "Mode"
msgstr "Mode"
-#: libgwydgets/gwygraphcurves.c:481
+#: libgwydgets/gwygraphcurves.c:478
msgid "Color"
msgstr "Couleur"
-#: libgwydgets/gwygraphcurves.c:494
+#: libgwydgets/gwygraphcurves.c:491
msgid "Point Type"
msgstr "Type de point"
-#: libgwydgets/gwygraphcurves.c:516
+#: libgwydgets/gwygraphcurves.c:513
msgid "Line Style"
msgstr "Style de ligne"
+#: libgwydgets/gwygraphlabeldialog.c:63
+msgid "Label Properties"
+msgstr "Propriétés des légendes"
+
#: libgwydgets/gwygraphlabeldialog.c:74
-msgid "Frame thickness:"
-msgstr "Épaisseur de la grille"
+msgid "_Frame thickness:"
+msgstr "Épaisseur du cadre :"
#: libgwydgets/gwygraphlabeldialog.c:81
msgid "_Reversed layout"
@@ -1266,12 +1338,12 @@ msgstr "Disposition inve_rsée"
msgid "Abscissa"
msgstr "Abscisse"
-#: libgwydgets/gwygraphwindow.c:163 app/toolbox-editor.c:1002 app/toolbox.c:108
+#: libgwydgets/gwygraphwindow.c:163 app/toolbox-editor.c:1015 app/toolbox.c:113
msgid "Graph"
msgstr "Graphe"
#: libgwydgets/gwygraphwindow.c:170 modules/file/hdrimage.cc:472
-#: modules/process/fit-shape.c:656
+#: modules/process/fit-shape.c:666 modules/process/psf.c:229
msgid "Data"
msgstr "Données"
@@ -1309,15 +1381,15 @@ msgstr "Points quelconques"
#: libgwydgets/gwygraphwindowmeasuredialog.c:394
#: libgwydgets/gwygraphwindowmeasuredialog.c:580 modules/tools/linestats.c:170
-#: modules/tools/roughness.c:516 modules/volume/volume_linestat.c:157
+#: modules/tools/roughness.c:517 modules/volume/volume_linestat.c:159
msgid "Length"
msgstr "Longueur"
#: libgwydgets/gwygraphwindowmeasuredialog.c:398
#: libgwydgets/gwygraphwindowmeasuredialog.c:588 app/gwyplaintool.c:1018
-#: modules/process/lat_synth.c:747 modules/process/obj_synth.c:569
-#: modules/process/pat_synth.c:846 modules/process/pat_synth.c:1148
-#: modules/process/pat_synth.c:1483
+#: modules/process/fibre_synth.c:534 modules/process/lat_synth.c:747
+#: modules/process/obj_synth.c:567 modules/process/pat_synth.c:847
+#: modules/process/pat_synth.c:1149 modules/process/pat_synth.c:1484
msgid "Height"
msgstr "Hauteur"
@@ -1330,12 +1402,12 @@ msgid "Curve:"
msgstr "Courbe :"
#: libgwydgets/gwygraphwindowmeasuredialog.c:553
-#: modules/process/linematch.c:828 modules/process/semsim.c:249
+#: modules/process/linematch.c:795 modules/process/semsim.c:249
#: modules/xyz/xyz_level.c:254
msgid "Method:"
msgstr "Méthode :"
-#: libgwydgets/gwygraphwindowmeasuredialog.c:592 modules/process/crosscor.c:354
+#: libgwydgets/gwygraphwindowmeasuredialog.c:592 modules/process/crosscor.c:331
msgid "Angle"
msgstr "Angle"
@@ -1345,7 +1417,7 @@ msgid "Preferred"
msgstr "Préféré"
#: libgwydgets/gwyoptionmenus.c:470 app/meta.c:410
-#: modules/file/imgexport.c:4160 modules/file/imgexport.c:4607
+#: modules/file/imgexport.c:4110 modules/file/imgexport.c:4555
#: modules/file/rawfile.c:995 modules/process/convolution_filter.c:538
#: modules/process/neural.c:418 modules/tools/selectionmanager.c:345
msgid "Name"
@@ -1384,7 +1456,7 @@ msgid "A_dd symbol"
msgstr "Ajouter un symbole"
#: libgwydgets/gwyscitext.c:274 modules/file/rawfile.c:553
-#: modules/xyz/xyz_drift.c:580 modules/xyz/xyz_raster.c:405
+#: modules/xyz/xyz_drift.c:580 modules/xyz/xyz_raster.c:419
msgid "Preview"
msgstr "Aperçu"
@@ -1402,87 +1474,81 @@ msgstr "Aucun module ne permet de charger ce type de fichier."
msgid "No module can save to this file type."
msgstr "Aucun module ne permet de sauvegarder sous ce format de fichier."
-#: libgwymodule/gwymodulebrowser.c:67
+#: libgwymodule/gwymodulebrowser.c:66
msgid "Module Browser"
msgstr "Navigateur de module"
-#: libgwymodule/gwymodulebrowser.c:190
+#: libgwymodule/gwymodulebrowser.c:189
msgid "Module"
msgstr "Module"
-#: libgwymodule/gwymodulebrowser.c:190
+#: libgwymodule/gwymodulebrowser.c:189
msgid "Version"
msgstr "Version"
-#: libgwymodule/gwymodulebrowser.c:190
+#: libgwymodule/gwymodulebrowser.c:189
msgid "Author"
msgstr "Auteur"
-#: libgwymodule/gwymodulebrowser.c:246
+#: libgwymodule/gwymodulebrowser.c:244
msgid "Name-Version:"
msgstr "Nom-version :"
-#: libgwymodule/gwymodulebrowser.c:247 libgwymodule/gwymodulebrowser.c:270
+#: libgwymodule/gwymodulebrowser.c:245 libgwymodule/gwymodulebrowser.c:268
#: modules/process/grain_stat.c:186
msgid "File:"
msgstr "Fichier :"
-#: libgwymodule/gwymodulebrowser.c:248
+#: libgwymodule/gwymodulebrowser.c:246
msgid "Registered functions:"
msgstr "Fonctions enregistrées :"
-#: libgwymodule/gwymodulebrowser.c:249
+#: libgwymodule/gwymodulebrowser.c:247
msgid "Authors:"
msgstr "Auteurs :"
-#: libgwymodule/gwymodulebrowser.c:250
+#: libgwymodule/gwymodulebrowser.c:248
msgid "Copyright:"
msgstr "Copyright :"
-#: libgwymodule/gwymodulebrowser.c:251
+#: libgwymodule/gwymodulebrowser.c:249
msgid "Date:"
msgstr "Date :"
-#: libgwymodule/gwymodulebrowser.c:252
+#: libgwymodule/gwymodulebrowser.c:250
msgid "Description:"
msgstr "Description :"
-#: libgwymodule/gwymodulebrowser.c:269
+#: libgwymodule/gwymodulebrowser.c:267
msgid "Name:"
msgstr "Nom :"
-#: libgwymodule/gwymodulebrowser.c:271
+#: libgwymodule/gwymodulebrowser.c:269
msgid "Failure:"
msgstr "Échec :"
-#: app/about.c:57
+#: app/about.c:58
#, c-format
msgid "About %s"
msgstr "À propos de %s"
-#. TRANSLATORS: %s is replaced with date in ISO format YYYY-MM-DD.
-#: app/about.c:92
-#, c-format
-msgid "Released %s\n"
-msgstr "Version %s\n"
-
-#: app/about.c:93
+#: app/about.c:97
msgid "An SPM data visualization and analysis tool."
msgstr "Un outil de visualisation et d'analyse de données SPM."
-#: app/about.c:101
+#: app/about.c:105
msgid "Report bugs to:"
msgstr "Rapporter les erreurs à : "
-#: app/about.c:116
+#: app/about.c:120
msgid "Credits"
msgstr "Crédits"
-#: app/about.c:133
+#: app/about.c:137
msgid "License"
msgstr "Licence"
-#: app/about.c:138
+#: app/about.c:142
#, c-format
msgid ""
"%s is free software; you can redistribute it and/or modify it under the "
@@ -1497,58 +1563,62 @@ msgstr ""
"toute version ultérieure. Pour obtenir le texte complet de la licence "
"reportez vous au fichier COPYING inclus dans le code source."
-#: app/about.c:160 modules/process/logistic.c:270
+#: app/about.c:164 modules/process/logistic.c:269
msgid "Features"
msgstr "Fonctionnalités"
-#: app/about.c:220
+#: app/about.c:224
msgid "Developers"
msgstr "Développeurs"
-#: app/about.c:221
+#: app/about.c:225
msgid "Translators"
msgstr "Traducteurs"
-#: app/about.c:225
+#: app/about.c:229
msgid "Development is supported by the Czech Metrology Institute: "
msgstr "Le développement est supporté par l'Institut Tchèque de Métrologie : "
-#: app/about.c:253 app/about.c:256
+#: app/about.c:257 app/about.c:260
msgid "OpenGL 3D View"
msgstr "Vue 3D OpenGL"
-#: app/about.c:257 app/about.c:271 app/about.c:291
+#: app/about.c:261 app/about.c:266 app/about.c:286
msgid "not available\n"
msgstr "non disponible\n"
-#: app/about.c:262 app/about.c:265
-msgid "Fast Fourier Transform"
-msgstr "Transformée de Fourier Rapide (FFT)"
-
-#: app/about.c:266
-msgid "built-in SimpleFFT\n"
-msgstr "Algorithme SimpleFFT interne\n"
-
-#: app/about.c:274
+#: app/about.c:269
msgid "X11 protocol\n"
msgstr "Protocole X11\n"
-#: app/about.c:276
+#: app/about.c:271
msgid "Win32 protocol\n"
msgstr "Protocole Win32\n"
-#: app/about.c:278
+#: app/about.c:273
msgid "LibUnique\n"
msgstr "LibUnique\n"
-#: app/about.c:282
+#: app/about.c:277
msgid "Remote Control"
msgstr "Contrôle à distance"
-#: app/about.c:286 app/about.c:290
+#: app/about.c:281 app/about.c:285
msgid "Python Scripting Interface"
msgstr "Interface de script Python"
+#. TRANSLATORS: %s is replaced with date in ISO format YYYY-MM-DD.
+#: app/about.c:311
+#, c-format
+msgid "Development version, built %s"
+msgstr "Version de développement, compilation %s"
+
+#. TRANSLATORS: %s is replaced with date in ISO format YYYY-MM-DD.
+#: app/about.c:328
+#, c-format
+msgid "Released %s"
+msgstr "Version publiée le %s"
+
#: app/app.c:301
#, c-format
msgid ""
@@ -1560,116 +1630,124 @@ msgstr ""
"%s\n"
"Souhaitez-vous vraiment quitter ?"
-#: app/app.c:440
+#: app/app.c:442
msgid "Mask _Color..."
msgstr "_Couleur du masque..."
-#: app/app.c:456 app/app.c:1725
+#: app/app.c:458 app/app.c:1754
msgid "Zoom _1:1"
msgstr "Zoom _1:1"
-#: app/app.c:460 app/app.c:1729 app/app.c:1957
+#: app/app.c:462 app/app.c:1758 app/app.c:1988
msgid "Metadata _Browser..."
msgstr "Navigateur de méta-données..."
-#: app/app.c:465 app/app.c:1734 app/app.c:1962
+#: app/app.c:467 app/app.c:1763 app/app.c:1993
msgid "View _Log..."
msgstr "Voir le journa_l..."
-#: app/app.c:649
+#: app/app.c:651
msgid "Pi_xelwise Square"
msgstr "Pi_xels carrés"
-#: app/app.c:659
+#: app/app.c:661
msgid "_Physically Square"
msgstr "_Pixels réels"
-#: app/app.c:836
+#: app/app.c:842
+msgid "Set as Default"
+msgstr "Enregistrer comme défaut"
+
+#: app/app.c:844
+msgid "Set the current view setup as the default"
+msgstr "Enregistre la configuration comme défaut"
+
+#: app/app.c:854
msgid "verb|Save"
msgstr "Enregistrer"
-#: app/app.c:839 app/app.c:843
+#: app/app.c:857 app/app.c:861
msgid "Save 3D view to an image"
msgstr "Exporter la vue 3D en image"
-#: app/app.c:849
-msgid "Set as Default"
-msgstr "Enregistrer comme défaut"
+#: app/app.c:869
+msgid "_Autocrop"
+msgstr "Rognage _automatique"
-#: app/app.c:851
-msgid "Set the current view setup as the default"
-msgstr "Enregistre la configuration comme défaut"
+#: app/app.c:873
+msgid "Remove white borders from exported image"
+msgstr "Supprimer les bords blancs dans l'image exportée"
-#: app/app.c:940
+#: app/app.c:960
msgid "_Show mask"
msgstr "Afficher le ma_sque"
-#: app/app.c:1106
+#: app/app.c:1172
#, c-format
msgid "Saving of 3D view to `%s' failed"
msgstr "L'enregistrement de la vue 3D `%s' a échoué"
-#: app/app.c:1150
+#: app/app.c:1222
msgid "Export 3D View"
msgstr "Exporter la vue 3D"
-#: app/app.c:1457
+#: app/app.c:1478
msgid "_Change Preview"
msgstr "Modifier l'aperçu"
-#: app/app.c:1583
+#: app/app.c:1606
msgid "Change Volume Data Preview"
msgstr "Modifier l'aperçu des données volumiques"
-#: app/app.c:1593
+#: app/app.c:1616
msgid "Preview quantity:"
msgstr "Quantité prévisualisée :"
-#: app/app.c:1603 modules/process/extend.c:267 modules/tools/linestats.c:165
+#: app/app.c:1626 modules/process/extend.c:267 modules/tools/linestats.c:165
#: modules/volume/volume_linestat.c:142
msgid "Mean"
msgstr "Moyenne"
-#: app/app.c:1604 modules/process/polydistort.c:255 modules/tools/filter.c:240
+#: app/app.c:1627 modules/process/polydistort.c:258 modules/tools/filter.c:241
#: modules/tools/icolorange.c:424 modules/tools/linestats.c:167
#: modules/volume/volume_linestat.c:144
msgid "Minimum"
msgstr "Minimum"
-#: app/app.c:1605 modules/process/col_synth.c:170 modules/tools/filter.c:241
+#: app/app.c:1628 modules/process/col_synth.c:170 modules/tools/filter.c:242
#: modules/tools/icolorange.c:435 modules/tools/linestats.c:168
#: modules/volume/volume_linestat.c:145
msgid "Maximum"
msgstr "Maximum"
-#: app/app.c:1606
+#: app/app.c:1629 modules/volume/volume_linestat.c:146
msgid "Min. position"
msgstr "Position min"
-#: app/app.c:1607
+#: app/app.c:1630 modules/volume/volume_linestat.c:147
msgid "Max. position"
msgstr "Position max"
-#: app/app.c:1608 modules/process/bdep_synth.c:134
-#: modules/process/col_synth.c:171 modules/process/scars.c:346
-#: modules/process/scars.c:353 modules/process/threshold.c:341
+#: app/app.c:1631 modules/process/bdep_synth.c:134
+#: modules/process/col_synth.c:171 modules/process/scars.c:369
+#: modules/process/scars.c:377 modules/process/threshold.c:336
msgid "RMS"
msgstr "RMS"
-#: app/app.c:1609 modules/file/asciiexport.c:187 modules/file/gxyzffile.c:393
-#: modules/file/xyzexport.c:233 modules/file/xyzexport.c:302
+#: app/app.c:1632 modules/file/asciiexport.c:187 modules/file/gxyzffile.c:393
+#: modules/file/xyzexport.c:236 modules/file/xyzexport.c:305
msgid "Channel:"
msgstr "Canal :"
-#: app/app.c:1610
+#: app/app.c:1633
msgid "Section:"
msgstr "Section :"
-#: app/app.c:1861
+#: app/app.c:1890
msgid "_Update Preview"
msgstr "Rafraîchir l'aperç_u"
-#: app/app.c:1867
+#: app/app.c:1896
msgid "_Density Map"
msgstr "Carte de _densité"
@@ -1688,12 +1766,12 @@ msgstr "Volume %d inconnu"
msgid "Unknown XYZ %d"
msgstr "Donnée XYZ %d inconnue"
-#: app/data-browser-aux.c:2795
+#: app/data-browser-aux.c:2839
#, c-format
msgid "Z levels: %d, Z unit: %s"
msgstr "Niveaux Z : %d, unités Z : %s"
-#: app/data-browser-aux.c:2821
+#: app/data-browser-aux.c:2865
#, c-format
msgid "Points: %d"
msgstr "Points : %d"
@@ -1723,10 +1801,10 @@ msgid "Close file"
msgstr "Fermer le fichier"
#: app/data-browser.c:5582
-msgid "Channels"
-msgstr "Canaux"
+msgid "Images"
+msgstr "Images"
-#: app/data-browser.c:5596 modules/volume/volume_extract.c:444
+#: app/data-browser.c:5596 modules/volume/volume_extract.c:431
msgid "Graphs"
msgstr "Graphes"
@@ -1782,52 +1860,52 @@ msgstr ""
"\n"
"%s"
-#: app/file.c:285
+#: app/file.c:292
#, c-format
msgid "Opening of `%s' failed"
msgstr "L'ouverture de `%s' a échoué"
-#: app/file.c:291 app/file.c:526
+#: app/file.c:298 app/file.c:533
#, c-format
msgid "Full file path: %s."
msgstr "Chemin complet : %s."
-#: app/file.c:294
+#: app/file.c:301
#, c-format
msgid "Loaded using: %s."
msgstr "Chargé en utilisant : %s."
-#: app/file.c:380
+#: app/file.c:387
msgid "Merge File"
msgstr "Fusionner un fichier"
-#: app/file.c:382 app/gwyappfilechooser.c:221
+#: app/file.c:389 app/gwyappfilechooser.c:226
msgid "Open File"
msgstr "Ouvrir un fichier"
-#: app/file.c:520 app/gwymoduleutils.c:192
+#: app/file.c:527 app/gwymoduleutils.c:192
#, c-format
msgid "Saving of `%s' failed"
msgstr "L'enregistrement de `%s' a échoué"
-#: app/file.c:529
+#: app/file.c:536
#, c-format
msgid "Saved using: %s."
msgstr "Sauvegardé en utilisant : %s."
-#: app/file.c:689
+#: app/file.c:696
#, c-format
msgid "File `%s' already exists. Replace?"
msgstr "Le fichier `%s' existe déjà. Remplacer ?"
-#: app/file.c:693
+#: app/file.c:700
#, c-format
msgid ""
"The file already exists in `%s'. Replacing it will overwrite its contents."
msgstr ""
"Ce fichier existe déjà dans `%s'. Le remplacement écrasera son contenu."
-#: app/file.c:696
+#: app/file.c:703
msgid "Replace File?"
msgstr "Remplacer le fichier ?"
@@ -1851,11 +1929,11 @@ msgstr "Fermer la liste des fichiers"
msgid "Open selected file"
msgstr "Ouvrir le fichier sélectionné"
-#: app/filelist.c:566 app/gwyappfilechooser.c:583
+#: app/filelist.c:566 app/gwyappfilechooser.c:592
msgid "_Filter:"
msgstr "_Filtre :"
-#: app/filelist.c:604 app/gwyappfilechooser.c:619
+#: app/filelist.c:604 app/gwyappfilechooser.c:628
msgid "Case _sensitive"
msgstr "_Sensible à la casse"
@@ -1905,97 +1983,97 @@ msgstr "_Courbe"
msgid "_Snap to control points"
msgstr "_S'accrocher aux points de contrôle"
-#: app/gwyappfilechooser.c:226
+#: app/gwyappfilechooser.c:231
msgid "Save File"
msgstr "Enregistrer le fichier"
-#: app/gwyappfilechooser.c:380
+#: app/gwyappfilechooser.c:389
#, c-format
msgid "File _type: %s"
msgstr "_Type de fichier : %s"
-#: app/gwyappfilechooser.c:387
+#: app/gwyappfilechooser.c:396
msgid "Only loadable shown"
msgstr "Ne montrer que les fichiers chargeables"
-#: app/gwyappfilechooser.c:391
+#: app/gwyappfilechooser.c:400
#, c-format
msgid "Filter: %s"
msgstr "Filtre : %s"
-#: app/gwyappfilechooser.c:455
+#: app/gwyappfilechooser.c:464
msgid "Automatic by extension"
msgstr "Automatique par extension"
-#: app/gwyappfilechooser.c:464
+#: app/gwyappfilechooser.c:473
msgid "Automatically detected"
msgstr "Détection automatique"
-#: app/gwyappfilechooser.c:561
+#: app/gwyappfilechooser.c:570
msgid "Show only loadable files"
msgstr "Ne montrer que les fichiers chargeables"
-#: app/gwyappfilechooser.c:844
+#: app/gwyappfilechooser.c:855
msgid "Plane-level previewed data"
msgstr "Aperçu des données avec mise à niveau par plan"
-#: app/gwyappfilechooser.c:860
+#: app/gwyappfilechooser.c:871
msgid "Row-level previewed data"
msgstr "Aperçu des données avec mise à niveau des lignes"
-#: app/gwyappfilechooser.c:969
+#: app/gwyappfilechooser.c:987
+msgid "File too large for preview"
+msgstr "Le fichier est trop grand pour faire un aperçu"
+
+#: app/gwyappfilechooser.c:988
msgid "…"
msgstr "…"
-#: app/gwyappfilechooser.c:1331
+#: app/gwyappfilechooser.c:1352
msgid "Cannot preview"
msgstr "Impossible de prévisualiser"
-#: app/gwyddion.c:143
+#: app/gwyddion.c:147
msgid "Loading document history"
msgstr "Chargement de l'historique des documents"
-#: app/gwyddion.c:148
+#: app/gwyddion.c:152
msgid "Registering "
msgstr "Enregistrement "
-#: app/gwyddion.c:149
+#: app/gwyddion.c:153
msgid "stock items"
msgstr "éléments stockés"
-#: app/gwyddion.c:153
+#: app/gwyddion.c:157
msgid "color gradients"
msgstr "gradients"
-#: app/gwyddion.c:155
+#: app/gwyddion.c:159
msgid "GL materials"
msgstr "Matériaux GL"
-#: app/gwyddion.c:157
+#: app/gwyddion.c:161
msgid "grain quantities"
msgstr "caractéristiques des grains"
-#: app/gwyddion.c:159
+#: app/gwyddion.c:163
msgid "calibrations"
msgstr "calibrations"
-#: app/gwyddion.c:164
+#: app/gwyddion.c:168
msgid "Loading settings"
msgstr "Chargement des réglages"
-#: app/gwyddion.c:171
+#: app/gwyddion.c:175
msgid "Registering modules"
msgstr "Enregistrement des modules"
-#: app/gwyddion.c:193
-msgid "Initializing GUI"
-msgstr "Initialisation de l'interface graphique"
-
-#: app/gwyddion.c:439
+#: app/gwyddion.c:464
msgid "Could not read settings."
msgstr "Impossible de lire les réglages."
-#: app/gwyddion.c:442
+#: app/gwyddion.c:467
#, c-format
msgid ""
"Settings file `%s' cannot be read: %s\n"
@@ -2008,42 +2086,73 @@ msgstr ""
"Pour éviter la perte des réglages sauvegardés aucune mise à jour ne sera "
"faite avant que le fichier ne soit réparé ou supprimé."
-#: app/gwymoduleutils-file.c:542
+#: app/gwyddion.c:505
+#, c-format
+msgid "Many modules (%u) failed to register."
+msgstr "Plusieurs modules (%u) n'ont pu être chargés."
+
+#: app/gwyddion.c:510
+#, c-format
+msgid ""
+"Most likely Gwyddion was not upgraded correctly. Instead, one installation "
+"was just overwritten with another, and now it is a mess.\n"
+"\n"
+"Please remove completely the module directory\n"
+"\n"
+"%s\n"
+"\n"
+"and reinstall Gwyddion.\n"
+"\n"
+"See Info → Module Browser for specific errors."
+msgstr ""
+"Il semble que Gwyddion n'ait pas été correctement mis à jour. Visiblement, "
+"une installation a été faite par-dessus une version précédente, aboutissant "
+"à un joyeux bazar. \n"
+"\n"
+"Supprimez complètement le répertoire des modules\n"
+"\n"
+"%s\n"
+"\n"
+"et réinstallez Gwyddion.\n"
+"\n"
+"Voir Info → Navigateur de modules pour les erreurs spécifiques."
+
+#: app/gwymoduleutils-file.c:536
#, c-format
msgid "Section %s ended at line %u but it has never started."
msgstr "La section %s termine à la ligne %u mais elle n'a pas de début."
-#: app/gwymoduleutils-file.c:550
+#: app/gwymoduleutils-file.c:544
#, c-format
msgid "Section %s ended at line %u instead of %s."
msgstr "La section %s se termine à la ligne %u au lieu de %s."
-#: app/gwymoduleutils-file.c:587
+#: app/gwymoduleutils-file.c:581
#, c-format
msgid "Section %s started at line %u before %s ended."
msgstr "La section %s commence à la ligne %u avant que %s ne soit terminée."
-#: app/gwymoduleutils-file.c:593
+#: app/gwymoduleutils-file.c:587
#, c-format
msgid "Empty section name at header line %u."
msgstr "Nom de section vide à la ligne %u de l'en-tête."
-#: app/gwymoduleutils-file.c:628
+#: app/gwymoduleutils-file.c:622
#, c-format
msgid "Header line %u lacks prefix %s."
msgstr "Il manque à la ligne %u de l'en-tête le préfixe %s."
-#: app/gwymoduleutils-file.c:653
+#: app/gwymoduleutils-file.c:647
#, c-format
msgid "Header line %u lacks key-value separator."
msgstr "Il manque à la ligne %u de l'en-tête le séparateur de valeur clé."
-#: app/gwymoduleutils-file.c:661
+#: app/gwymoduleutils-file.c:655
#, c-format
msgid "Key at header line %u is empty."
msgstr "La clé à la ligne %u de l'en-tête est vide."
-#: app/gwymoduleutils-file.c:688
+#: app/gwymoduleutils-file.c:682
#, c-format
msgid "Header suddenly ended at line %u; end of header marker is missing"
msgstr ""
@@ -2052,6 +2161,7 @@ msgstr ""
#: app/gwymoduleutils.c:197 app/settings.c:131 app/settings.c:142
#: app/toolbox-spec.c:536 modules/file/err.h:62
+#: modules/pygwy/pygwy-console.c:528
#, c-format
msgid "Cannot write to file: %s."
msgstr "Impossible d'écrire dans le fichier : %s."
@@ -2080,8 +2190,9 @@ msgstr "Origine"
#: app/gwyplaintool.c:1011 modules/file/rawfile.c:997
#: modules/process/convolution_filter.c:349
-#: modules/process/convolution_filter.c:553 modules/process/neural.c:419
-#: modules/process/obj_synth.c:538 modules/process/pat_synth.c:1449
+#: modules/process/convolution_filter.c:553 modules/process/fibre_synth.c:520
+#: modules/process/neural.c:419 modules/process/obj_synth.c:536
+#: modules/process/pat_synth.c:1450
msgid "Size"
msgstr "Taille"
@@ -2138,7 +2249,7 @@ msgstr "Efface_r"
msgid "_Close"
msgstr "Fermer"
-#: app/log.c:615 modules/file/imgexport.c:4168 modules/file/rawfile.c:996
+#: app/log.c:615 modules/file/imgexport.c:4118 modules/file/rawfile.c:996
msgid "Type"
msgstr "Type"
@@ -2146,8 +2257,8 @@ msgstr "Type"
msgid "Function"
msgstr "Fonction"
-#: app/log.c:617 modules/file/imgexport.c:3117 modules/process/fit-shape.c:465
-#: modules/process/neural.c:610 modules/tools/stats.c:425
+#: app/log.c:617 modules/file/imgexport.c:3128 modules/process/fit-shape.c:466
+#: modules/process/neural.c:614 modules/tools/stats.c:423
msgid "Parameters"
msgstr "Paramètres"
@@ -2159,39 +2270,39 @@ msgstr "Date"
msgid "Export Log"
msgstr "Exporter le journal"
-#: app/menu.c:556 app/toolbox.c:581
+#: app/menu.c:555 app/toolbox.c:595
msgid "_Data Process"
msgstr "Traitement des _données"
-#: app/menu.c:598 app/toolbox.c:584
+#: app/menu.c:597 app/toolbox.c:598
msgid "_Graph"
msgstr "_Graphe"
-#: app/menu.c:641 app/toolbox.c:587
+#: app/menu.c:640 app/toolbox.c:601
msgid "_Volume Data"
msgstr "Données _volumiques"
-#: app/menu.c:684 app/toolbox.c:590
+#: app/menu.c:683 app/toolbox.c:604
msgid "_XYZ Data"
msgstr "Données _XYZ"
-#: app/menu.c:715
+#: app/menu.c:714
msgid "Re-show Last"
msgstr "Remontrer la dernière commande"
-#: app/menu.c:730
+#: app/menu.c:729
msgid "Repeat Last"
msgstr "Répéter la dernière commande"
-#: app/menu.c:858
+#: app/menu.c:857
msgid "Repeat"
msgstr "Répéter"
-#: app/menu.c:864
+#: app/menu.c:863
msgid "Re-show"
msgstr "Remontrer"
-#: app/menu.c:1186
+#: app/menu.c:1185
msgid "_Document history"
msgstr "_Historique"
@@ -2199,8 +2310,8 @@ msgstr "_Historique"
msgid "_New"
msgstr "_Nouveau"
-#: app/meta.c:235 modules/file/imgexport.c:4672 modules/file/rawfile.c:1058
-#: modules/process/neural.c:711 modules/tools/selectionmanager.c:405
+#: app/meta.c:235 modules/file/imgexport.c:4620 modules/file/rawfile.c:1058
+#: modules/process/neural.c:718 modules/tools/selectionmanager.c:405
msgid "_Delete"
msgstr "Supprimer"
@@ -2274,11 +2385,11 @@ msgstr "Impossible de créer le répertoire d'interface utilisateur %s : %s"
msgid "Cannot create user module directory %s: %s"
msgstr "Impossible de créer le répertoire de modules utilisateur %s : %s"
-#: app/splash.c:832
+#: app/splash.c:1260
msgid "Starting "
msgstr "Démarrage"
-#: app/splash.c:878
+#: app/splash.c:1313
msgid " is free software released under GNU GPL."
msgstr " est un logiciel libre développé sous la licence GNU GPL."
@@ -2823,124 +2934,125 @@ msgstr "Astuce suiva_nte"
msgid "_Show tips at startup"
msgstr "Afficher les a_stuces au démarrage"
-#: app/toolbox-editor.c:212
+#: app/toolbox-editor.c:213
msgid "Toolbox Editor"
msgstr "Éditeur de boîte à outils"
-#: app/toolbox-editor.c:257
+#: app/toolbox-editor.c:258
msgid "_New Item"
msgstr "_Nouvel élément"
-#: app/toolbox-editor.c:262
+#: app/toolbox-editor.c:263
msgid "_New Group"
msgstr "_Nouveau groupe"
-#: app/toolbox-editor.c:268 app/toolbox.c:577
+#: app/toolbox-editor.c:269 app/toolbox.c:591
msgid "_Edit"
msgstr "_Éditer"
-#: app/toolbox-editor.c:273 modules/process/fft_filter_2d.c:499
-#: modules/tools/maskedit.c:548 modules/volume/volume_zcal.c:173
+#: app/toolbox-editor.c:274 modules/process/fft_filter_2d.c:499
+#: modules/tools/maskedit.c:554 modules/volume/volume_zcal.c:173
msgid "_Remove"
msgstr "Supprimer"
-#: app/toolbox-editor.c:278
+#: app/toolbox-editor.c:279
msgid "Move _Up"
msgstr "Monter"
-#: app/toolbox-editor.c:283
+#: app/toolbox-editor.c:284
msgid "Move _Down"
msgstr "_Descendre"
-#: app/toolbox-editor.c:292 modules/file/hdrimage.cc:2304
-#: modules/file/imgexport.c:3101 modules/file/pixmap.c:872
+#: app/toolbox-editor.c:293 modules/file/hdrimage.cc:2304
+#: modules/file/imgexport.c:3114 modules/file/pixmap.c:872
#: modules/file/rawfile.c:658 modules/process/crosscor.c:252
-#: modules/process/dimensions.h:473 modules/process/tip_blind.c:333
+#: modules/process/dimensions.h:455 modules/process/fibre_synth.c:526
+#: modules/process/tip_blind.c:334
msgid "_Width:"
msgstr "Largeur :"
-#: app/toolbox-editor.c:774
+#: app/toolbox-editor.c:787
msgid "Toolbox Group"
msgstr "Groupe"
-#: app/toolbox-editor.c:791 modules/file/rawgraph.c:267
+#: app/toolbox-editor.c:804 modules/file/rawgraph.c:267
msgid "_Title:"
msgstr "_Titre :"
-#: app/toolbox-editor.c:805
+#: app/toolbox-editor.c:818
msgid "_Id:"
msgstr "_Identifiant :"
-#: app/toolbox-editor.c:818
+#: app/toolbox-editor.c:831
msgid "_Suggest"
msgstr "_Suggérer"
-#: app/toolbox-editor.c:824
+#: app/toolbox-editor.c:837
msgid "Trans_latable title"
msgstr "Traduire _le titre"
-#: app/toolbox-editor.c:874
+#: app/toolbox-editor.c:887
msgid "Group id is not a valid identifier"
msgstr "L'identifiant du groupe n'est pas valide"
-#: app/toolbox-editor.c:882
+#: app/toolbox-editor.c:895
msgid "Group id is not unique"
msgstr "L'identifiant du groupe n'est pas unique"
-#: app/toolbox-editor.c:971
+#: app/toolbox-editor.c:984
msgid "Toolbox Item"
msgstr "Élément de la boîte à outils"
-#: app/toolbox-editor.c:992 modules/process/coerce.c:331
+#: app/toolbox-editor.c:1005 modules/process/coerce.c:331
#: modules/tools/filter.c:284
msgid "_Type:"
msgstr "_Type :"
-#: app/toolbox-editor.c:999
+#: app/toolbox-editor.c:1012
msgid "Placeholder"
msgstr "Espace vide"
-#: app/toolbox-editor.c:1000
+#: app/toolbox-editor.c:1013
msgid "Builtin"
msgstr "Intégré"
-#: app/toolbox-editor.c:1001 app/toolbox.c:107
+#: app/toolbox-editor.c:1014 app/toolbox.c:112
msgid "Data Process"
msgstr "Traitement des données"
-#: app/toolbox-editor.c:1003
+#: app/toolbox-editor.c:1016
msgid "Volume Data"
msgstr "Données volumiques"
-#: app/toolbox-editor.c:1004
+#: app/toolbox-editor.c:1017
msgid "XYZ Data"
msgstr "Données XYZ"
-#: app/toolbox-editor.c:1005
+#: app/toolbox-editor.c:1018
msgid "Tool"
msgstr "Outil"
-#: app/toolbox-editor.c:1012
+#: app/toolbox-editor.c:1025 modules/tools/profile.c:483
msgid "_Mode:"
msgstr "_Mode :"
-#: app/toolbox-editor.c:1019 app/toolbox-editor.c:1038
+#: app/toolbox-editor.c:1032 app/toolbox-editor.c:1051
msgid "Default"
msgstr "Défaut"
-#: app/toolbox-editor.c:1020
+#: app/toolbox-editor.c:1033
msgid "Interactive"
msgstr "Interactif"
-#: app/toolbox-editor.c:1021
+#: app/toolbox-editor.c:1034
msgid "Non-interactive"
msgstr "Non interactif"
-#: app/toolbox-editor.c:1029
+#: app/toolbox-editor.c:1042
msgid "Use _icon from:"
msgstr "Utiliser l'icône à partir de :"
-#: app/toolbox-editor.c:1063
+#: app/toolbox-editor.c:1076
msgid "Functions"
msgstr "Fonctions"
@@ -2956,143 +3068,159 @@ msgstr "Outils restants"
msgid "All tools not placed explicitly go here."
msgstr "Tous les outils non placés explicitement se retrouvent ici."
-#: app/toolbox.c:106
+#: app/toolbox.c:111
msgid "View"
msgstr "Vue"
-#: app/toolbox.c:109
+#: app/toolbox.c:114
msgid "Tools"
msgstr "Outils"
-#: app/toolbox.c:575
+#: app/toolbox.c:589
msgid "_File"
msgstr "_Fichier"
-#: app/toolbox.c:593
+#: app/toolbox.c:607
msgid "_Info"
msgstr "_Info"
-#: app/toolbox.c:663
+#: app/toolbox.c:696
msgid "Display a 3D view of data"
msgstr "Afficher une vue en 3D des données"
-#: app/toolbox.c:667
+#: app/toolbox.c:700
+msgid "Undo"
+msgstr "Annuler"
+
+#: app/toolbox.c:700
+msgid "Undo last action"
+msgstr "Annuler la dernière opération"
+
+#: app/toolbox.c:704
+msgid "Redo"
+msgstr "Rétablir"
+
+#: app/toolbox.c:704
+msgid "Redo again last undone action"
+msgstr "Refaire la dernière action annulée"
+
+#: app/toolbox.c:708
msgid "Zoom in"
msgstr "Zoomer"
-#: app/toolbox.c:671
+#: app/toolbox.c:712
msgid "Zoom out"
msgstr "Dézoomer"
-#: app/toolbox.c:675
+#: app/toolbox.c:716
msgid "Zoom 1:1"
msgstr "Zoom 1:1"
-#: app/toolbox.c:722
+#: app/toolbox.c:781
msgid "/Show _Data Browser"
msgstr "/Navigateur de _données"
-#: app/toolbox.c:730
+#: app/toolbox.c:789
msgid "/Module _Browser"
msgstr "/Navigateur de modules"
-#: app/toolbox.c:738
+#: app/toolbox.c:797
msgid "/Program _Messages"
msgstr "/_Messages de chargement"
-#: app/toolbox.c:753
+#: app/toolbox.c:812
msgid "/_User Guide"
msgstr "/_Manuel utilisateur"
-#: app/toolbox.c:761
+#: app/toolbox.c:820
msgid "/_Tip of the Day"
msgstr "/As_tuce du jour"
-#: app/toolbox.c:769
+#: app/toolbox.c:828
msgid "/_About Gwyddion"
msgstr "/_À propos de Gwyddion"
-#: app/toolbox.c:806
+#: app/toolbox.c:865
msgid "/_Open..."
msgstr "/_Ouvrir..."
-#: app/toolbox.c:814
+#: app/toolbox.c:873
msgid "/_Merge..."
msgstr "/Fusionner..."
-#: app/toolbox.c:822
+#: app/toolbox.c:881
msgid "/Open _Recent"
msgstr "/Ouv_rir un ficher récent"
-#: app/toolbox.c:830
+#: app/toolbox.c:889
msgid "/_Save"
msgstr "/_Enregistrer"
-#: app/toolbox.c:838
+#: app/toolbox.c:897
msgid "/Save _As..."
msgstr "/Enregistrer sous..."
-#: app/toolbox.c:846
+#: app/toolbox.c:905
msgid "/_Close"
msgstr "/Fermer"
-#: app/toolbox.c:854
+#: app/toolbox.c:913
msgid "/Remo_ve All Logs"
msgstr "/Supprimer toutes les entrées du journal"
-#: app/toolbox.c:870
+#: app/toolbox.c:929
msgid "/_Quit"
msgstr "/_Quitter"
-#: app/toolbox.c:910
+#: app/toolbox.c:969
msgid "/_Undo"
msgstr "/Ann_uler"
-#: app/toolbox.c:918
+#: app/toolbox.c:977
msgid "/_Redo"
msgstr "/_Rétablir"
-#: app/toolbox.c:934
+#: app/toolbox.c:993
msgid "/Default Mask _Color..."
msgstr "/_Couleur de masque par défaut..."
-#: app/toolbox.c:942
+#: app/toolbox.c:1001
msgid "/Color _Gradients..."
msgstr "/_Gradient de couleur..."
-#: app/toolbox.c:950
+#: app/toolbox.c:1009
msgid "/G_L Materials..."
msgstr "/Matériaux G_L..."
-#: app/toolbox.c:958
+#: app/toolbox.c:1017
msgid "/_Toolbox..."
msgstr "/Boî_te à outils..."
-#: app/toolbox.c:966
+#: app/toolbox.c:1025
msgid "/_Keyboard Shortcuts"
msgstr "/Raccourcis clavier"
-#: app/toolbox.c:974
+#: app/toolbox.c:1033
msgid "/_Logging Enabled"
msgstr "/Journa_l activé"
-#: app/toolbox.c:1083
+#: app/toolbox.c:1142
msgid "Program Messages"
msgstr "Messages de chargement"
-#: app/toolbox.c:1320
+#: app/toolbox.c:1379
msgid "Change Default Mask Color"
msgstr "Changer la couleur de masque par défaut"
-#: app/toolbox.c:1348
+#: app/toolbox.c:1407
msgid "OpenGL 3D graphics not available"
msgstr "Les graphismes OpenGL 3D ne sont pas disponibles"
-#: app/toolbox.c:1353
+#: app/toolbox.c:1412
msgid "OpenGL was disabled with a command-line option."
msgstr "OpenGL a été désactivé par une option de ligne de commande."
-#: app/toolbox.c:1361
+#: app/toolbox.c:1420
msgid ""
"Initialization of OpenGL failed. Check output of <tt>glxinfo</tt> and "
"warning messages printed to console during Gwyddion startup."
@@ -3101,7 +3229,7 @@ msgstr ""
"et les messages d'erreur affichés dans la console lors du démarrage de "
"Gwyddion."
-#: app/toolbox.c:1368
+#: app/toolbox.c:1427
msgid "This version of Gwyddion was built without OpenGL support."
msgstr "Cette version de Gwyddion a été compilée sans le support OpenGL."
@@ -3177,7 +3305,7 @@ msgstr "L'objet a plusieurs références"
msgid "Secondary data item has no primary data"
msgstr "L'élément de données secondaires n'a pas de données primaires"
-#: app/wait.c:106
+#: app/wait.c:114
msgid "Please wait"
msgstr "Patientez s'il vous plaît"
@@ -3196,11 +3324,11 @@ msgstr ""
"L'en-tête de fichier ne peut être converti à partir du jeu de caractères ISO "
"8859-1 : %s"
-#: modules/file/aistfile.c:127
+#: modules/file/aistfile.c:123
msgid "Imports AIST-NT data files."
msgstr "Importe les fichiers AIST-NT."
-#: modules/file/aistfile.c:140
+#: modules/file/aistfile.c:136
msgid "AIST-NT files (.aist)"
msgstr "AIST-NT (.aist)"
@@ -3249,7 +3377,8 @@ msgstr ""
#: modules/file/alicona.c:665 modules/file/gdeffile.c:175
#: modules/file/gdeffile.c:199 modules/file/gsffile.c:159
-#: modules/file/gxyzffile.c:199 modules/file/iso28600.c:1038
+#: modules/file/gxyzffile.c:199 modules/file/iso28600.c:1174
+#: modules/file/microprof.c:361 modules/file/microprof.c:375
#: modules/file/pt3file.c:489 modules/file/pt3file.c:591
msgid "File header is truncated."
msgstr "L'en-tête de fichier est tronqué."
@@ -3262,11 +3391,11 @@ msgstr "Les commentaires ne terminent pas par CRLF."
msgid "Comment is not nul-terminated."
msgstr "Le commentaire ne se termine pas par le caractère nul."
-#: modules/file/ambfile.c:84
+#: modules/file/ambfile.c:83
msgid "Imports Ambios AMB data files."
msgstr "Importe les fichiers Ambios AMB."
-#: modules/file/ambfile.c:97
+#: modules/file/ambfile.c:96
msgid "Ambios amb files (.amb)"
msgstr "Ambios amb (.amb)"
@@ -3298,11 +3427,11 @@ msgstr "FileDescEnd n'a pas de FileDescBegin correspondant."
msgid "FileDescBegin has no corresponding FileDescEnd."
msgstr "FileDescBegin n'a pas de FileDescEnd correspondant."
-#: modules/file/apedaxfile.c:259
+#: modules/file/apedaxfile.c:261
msgid "Imports A.P.E. Research DAX data files."
msgstr "Importe les fichiers A.P.E. Research DAX."
-#: modules/file/apedaxfile.c:274
+#: modules/file/apedaxfile.c:276
msgid "A.P.E. Research DAX Files (.dax) and APDT File (.apdt)"
msgstr "A.P.E. Research DAX (.dax) et APDT (.apdt)"
@@ -3330,7 +3459,7 @@ msgstr "Largeur :"
msgid "Height:"
msgstr "Hauteur :"
-#: modules/file/asciiexport.c:220 modules/file/xyzexport.c:248
+#: modules/file/asciiexport.c:220 modules/file/xyzexport.c:251
msgid "Value units:"
msgstr "Unités :"
@@ -3339,30 +3468,30 @@ msgid "Export Text"
msgstr "Exporter au format texte"
#: modules/file/asciiexport.c:275 modules/file/gxyzffile.c:402
-#: modules/file/imgexport.c:3565 modules/file/imgexport.c:4203
-#: modules/file/rawfile.c:758 modules/file/xyzexport.c:311
-#: modules/process/calibrate.c:607 modules/process/coerce.c:364
-#: modules/process/col_synth.c:516 modules/process/correct_affine.c:470
-#: modules/process/extend.c:259 modules/process/fft_filter_1d.c:261
-#: modules/process/grain_dist.c:306 modules/process/grain_edge.c:255
-#: modules/process/grain_mark.c:338 modules/process/grain_wshed.c:252
-#: modules/process/linematch.c:852 modules/process/mark_disconn.c:279
-#: modules/process/slope_dist.c:367 modules/process/tip_blind.c:357
+#: modules/file/imgexport.c:3532 modules/file/imgexport.c:4151
+#: modules/file/rawfile.c:758 modules/file/xyzexport.c:314
+#: modules/process/calibrate.c:561 modules/process/coerce.c:363
+#: modules/process/col_synth.c:516 modules/process/correct_affine.c:520
+#: modules/process/extend.c:259 modules/process/fft_filter_1d.c:263
+#: modules/process/grain_dist.c:307 modules/process/grain_edge.c:254
+#: modules/process/grain_mark.c:335 modules/process/grain_wshed.c:256
+#: modules/process/linematch.c:819 modules/process/mark_disconn.c:280
+#: modules/process/slope_dist.c:359 modules/process/tip_blind.c:360
#: modules/process/wpour_mark.c:354 modules/tools/spotremove.c:322
-#: modules/tools/stats.c:402 modules/xyz/xyz_raster.c:628
+#: modules/tools/stats.c:401 modules/xyz/xyz_raster.c:597
msgid "Options"
msgstr "Options"
-#: modules/file/asciiexport.c:278 modules/file/xyzexport.c:314
+#: modules/file/asciiexport.c:278 modules/file/xyzexport.c:317
msgid "Use _dot as decimal separator"
msgstr "Utiliser le point comme séparateur de décimale"
-#: modules/file/asciiexport.c:285 modules/file/xyzexport.c:321
-#: modules/process/grain_dist.c:317
+#: modules/file/asciiexport.c:285 modules/file/xyzexport.c:324
+#: modules/process/grain_dist.c:318
msgid "Add _informational comment header"
msgstr "Ajouter un en-tête de commenta_ires"
-#: modules/file/asciiexport.c:294 modules/file/xyzexport.c:330
+#: modules/file/asciiexport.c:294 modules/file/xyzexport.c:333
msgid "_Precision:"
msgstr "_Précision :"
@@ -3382,20 +3511,20 @@ msgstr "Importe les fichiers Attocube Systems ASC."
msgid "Attocube ASCII files (.asc)"
msgstr "Attocube ASCII (.asc)"
-#: modules/file/bcrfile.c:146
+#: modules/file/bcrfile.c:141
msgid "Imports Image Metrology BCR data files."
msgstr "Importe les fichiers Image Metrology BCR"
-#: modules/file/bcrfile.c:159
+#: modules/file/bcrfile.c:154
msgid "BCR files (.bcr, .bcrf)"
msgstr "BCR (.bcr, .bcrf)"
-#: modules/file/bcrfile.c:238
+#: modules/file/bcrfile.c:233
#, c-format
msgid "File header is not convertible from UTF-16: %s"
msgstr "L'en-tête n'est pas convertible depuis UTF-16 : %s"
-#: modules/file/bcrfile.c:351
+#: modules/file/bcrfile.c:346
#, c-format
msgid "Unknown file type header: `%s'."
msgstr "Type d'en-tête inconnu : `%s'."
@@ -3430,7 +3559,7 @@ msgid "Burleigh exported data (.txt, .bin)"
msgstr "Burleigh données exportées (.txt, .bin)"
#: modules/file/burleigh_exp.c:226 modules/file/burleigh_exp.c:267
-#: modules/file/nanoscope.c:1605 modules/file/omicron.c:416
+#: modules/file/nanoscope.c:1612 modules/file/omicron.c:416
#: modules/file/shimadzu.c:468
msgid "Missing colon in header line."
msgstr "Il manque une colonne dans la ligne d'en-tête."
@@ -3482,22 +3611,40 @@ msgstr "Importe les fichiers Benyuan CSM."
msgid "Benyuan CSM files (.csm)"
msgstr "Benyuan CSM (.csm)"
-#: modules/file/dektakxml.c:138
+#: modules/file/dektakvca.c:197
+msgid "Imports Dektak OPDx data files."
+msgstr "Importe les fichiers Dektak OPDx."
+
+#: modules/file/dektakvca.c:210
+msgid "Dektak OPDx data files (.OPDx)"
+msgstr "Dektak OPDx (.OPDx)"
+
+#: modules/file/dektakvca.c:655
+#, c-format
+msgid "Item `%s' has unexpected type %u instead of %u."
+msgstr "L'élément `%s' est de type non attendu %u au lieu %u."
+
+#: modules/file/dektakvca.c:1022
+#, c-format
+msgid "Truncated data inside item %s."
+msgstr "Données tronquées dans l'élément %s"
+
+#: modules/file/dektakxml.c:118
msgid "Imports Dektak XML data files."
msgstr "Importe les fichiers Dektak XML."
-#: modules/file/dektakxml.c:151
+#: modules/file/dektakxml.c:131
msgid "Dektak XML data files (.xml)"
msgstr "Dektak XML (.xml)"
-#: modules/file/dektakxml.c:228 modules/file/lextfile.c:260
-#: modules/file/nanoscan.c:267 modules/file/ometiff.c:265
+#: modules/file/dektakxml.c:208 modules/file/lextfile.c:260
+#: modules/file/nanoscan.c:270 modules/file/ometiff.c:265
#, c-format
msgid "XML parsing failed: %s"
msgstr "L'analyse du fichier XML à échoué : %s"
-#: modules/file/dektakxml.c:400 modules/file/lextfile.c:163
-#: modules/file/nanoscan.c:672 modules/file/ometiff.c:445
+#: modules/file/dektakxml.c:373 modules/file/lextfile.c:163
+#: modules/file/nanoscan.c:698 modules/file/ometiff.c:445
#, c-format
msgid "Top-level element is not ‘%s’."
msgstr "L'élément de premier niveau n'est pas ‘%s’."
@@ -3609,7 +3756,7 @@ msgid "Scan size header field overlaps with data."
msgstr "Le champ d'en-tête de la taille de scan recouvre les données."
#: modules/file/err.h:48 modules/file/nrrdfile.c:779
-#: modules/file/nrrdfile.c:824
+#: modules/file/nrrdfile.c:824 modules/pygwy/pygwy-console.c:504
#, c-format
msgid "Cannot read from file: %s."
msgstr "Impossible de lire à partir du fichier : %s."
@@ -3829,33 +3976,33 @@ msgstr ""
"La désérialisation des données a fonctionné, mais a abouti à un objet "
"inattendu %s."
-#: modules/file/gwytiff.h:332
+#: modules/file/gwytiff.h:335
#, c-format
msgid "BigTIFF reserved fields are %u and %u instead of 8 and 0."
msgstr "Les champs réservés au BigTIFF sont %u et %u au lieu de 8 et 0."
-#: modules/file/gwytiff.h:349 modules/file/gwytiff.h:366
+#: modules/file/gwytiff.h:352 modules/file/gwytiff.h:369
#, c-format
msgid "TIFF directory %lu ended unexpectedly."
msgstr "Le répertoire TIFF %lu se termine de manière inattendue."
-#: modules/file/gwytiff.h:484
+#: modules/file/gwytiff.h:487
#, c-format
msgid "BigTIFF data type %u was found in a classic TIFF."
msgstr ""
"Des données BigTIFF de type %u ont été trouvées dans un TIFF classique."
-#: modules/file/gwytiff.h:501
+#: modules/file/gwytiff.h:504
msgid "Invalid tag data positions were found."
msgstr "Des positions invalides de balises ont été trouvées."
-#: modules/file/gwytiff.h:874 modules/file/gwytiff.h:889
-#: modules/file/gwytiff.h:1012 modules/file/gwytiff.h:1019
+#: modules/file/gwytiff.h:877 modules/file/gwytiff.h:892
+#: modules/file/gwytiff.h:1015 modules/file/gwytiff.h:1022
#, c-format
msgid "Required tag %u was not found."
msgstr "La balise %u n'a pas été trouvée."
-#: modules/file/gwytiff.h:942 modules/file/gwytiff.h:986
+#: modules/file/gwytiff.h:945 modules/file/gwytiff.h:989
#: modules/file/keyence.c:449 modules/file/matfile.c:276
#: modules/file/matfile.c:298 modules/file/omicronflat.c:1962
#: modules/file/princetonspe.c:339 modules/file/psia.c:352
@@ -3863,22 +4010,22 @@ msgstr "La balise %u n'a pas été trouvée."
msgid "File is truncated."
msgstr "Le fichier est tronqué."
-#: modules/file/gwytiff.h:1044
+#: modules/file/gwytiff.h:1047
msgid "Non-uniform bits per sample are unsupported."
msgstr ""
"Les échantillons avec un nombre de bits non uniforme ne sont pas supportés."
-#: modules/file/gwytiff.h:1071
+#: modules/file/gwytiff.h:1074 modules/file/zeisslsm.c:973
#, c-format
msgid "Compression type %u is not supported."
msgstr "Le type de compression %u n'est pas supporté."
-#: modules/file/gwytiff.h:1077
+#: modules/file/gwytiff.h:1080
#, c-format
msgid "Planar configuration %u is not supported."
msgstr "La configuration plane %u n'est pas supportée."
-#: modules/file/gwytiff.h:1101
+#: modules/file/gwytiff.h:1104
msgid "Unsupported sample format"
msgstr "Format non supporté"
@@ -3915,7 +4062,7 @@ msgstr "Erreur CRC"
msgid "Minizip error while reading the zip file: %s (%d)."
msgstr "Erreur de Minizip lors de la lecture du fichier zip : %s (%d)."
-#: modules/file/gwyzip.h:248
+#: modules/file/gwyzip.h:248 modules/file/jpkscan.c:2776
#, c-format
msgid "File %s is missing in the zip file."
msgstr "Le fichier %s est absent du fichier zip."
@@ -3951,8 +4098,8 @@ msgstr ""
msgid "Export GXYZF"
msgstr "Exporter au format GXYZ"
-#: modules/file/gxyzffile.c:395 modules/file/xyzexport.c:238
-#: modules/file/xyzexport.c:304
+#: modules/file/gxyzffile.c:395 modules/file/xyzexport.c:241
+#: modules/file/xyzexport.c:307
msgid "XYZ data:"
msgstr "Données XYZ :"
@@ -4041,11 +4188,13 @@ msgstr "Échelle _Z :"
msgid "Representable"
msgstr "Représentable"
-#: modules/file/hdrimage.cc:480 modules/tools/stats.c:203
+#: modules/file/hdrimage.cc:480 modules/graph/graph_stats.c:146
+#: modules/tools/stats.c:203
msgid "Minimum:"
msgstr "Minimum :"
-#: modules/file/hdrimage.cc:496 modules/tools/stats.c:204
+#: modules/file/hdrimage.cc:496 modules/graph/graph_stats.c:147
+#: modules/tools/stats.c:204
msgid "Maximum:"
msgstr "Maximum :"
@@ -4064,12 +4213,12 @@ msgid "OpenEXR data type %u is invalid or unsupported."
msgstr "Le type de données OpenEXR %u est invalide ou non supportée."
#: modules/file/hdrimage.cc:1433 modules/file/hdrimage.cc:1442
-#: modules/file/imgexport.c:5249 modules/file/imgexport.c:5260
+#: modules/file/imgexport.c:5198 modules/file/imgexport.c:5209
#, c-format
msgid "libpng initialization error (in %s)"
msgstr "Erreur d'initialisation de libpng (dans %s)"
-#: modules/file/hdrimage.cc:1451 modules/file/imgexport.c:5324
+#: modules/file/hdrimage.cc:1451 modules/file/imgexport.c:5273
msgid "libpng error occurred"
msgstr "Une erreur s'est produite dans libpng"
@@ -4087,11 +4236,6 @@ msgstr "Information sur l'image"
msgid "Horizontal size:"
msgstr "Taille horizontale :"
-#: modules/file/hdrimage.cc:2246 modules/file/hdrimage.cc:2252
-#: modules/file/pixmap.c:820 modules/file/pixmap.c:826
-msgid "px"
-msgstr "px"
-
#: modules/file/hdrimage.cc:2252 modules/file/pixmap.c:826
msgid "Vertical size:"
msgstr "Taille verticale :"
@@ -4104,10 +4248,10 @@ msgstr "Canaux :"
msgid "Pages:"
msgstr "Pages : "
-#: modules/file/hdrimage.cc:2290 modules/file/imgexport.c:3043
+#: modules/file/hdrimage.cc:2290 modules/file/imgexport.c:3059
#: modules/file/pixmap.c:862 modules/file/rawfile.c:649
-#: modules/process/dimensions.h:467 modules/xyz/xyz_drift.c:774
-#: modules/xyz/xyz_raster.c:566
+#: modules/process/dimensions.h:449 modules/xyz/xyz_drift.c:774
+#: modules/xyz/xyz_raster.c:535
msgid "Physical Dimensions"
msgstr "Dimensions physiques"
@@ -4117,16 +4261,16 @@ msgstr "Dimensions physiques"
#: modules/process/calcoefs_new.c:408 modules/process/calcoefs_new.c:475
#: modules/process/calcoefs_simple.c:391 modules/process/calcoefs_simple.c:458
#: modules/process/calcoefs_view.c:511 modules/process/calcoefs_view.c:549
-#: modules/process/calibrate.c:466 modules/process/calibrate.c:549
-#: modules/process/dimensions.h:161 modules/process/volumize_layers.c:259
-#: modules/volume/volume_calibrate.c:414 modules/volume/volume_calibrate.c:441
-#: modules/volume/volume_calibrate.c:468 modules/volume/volume_calibrate.c:546
+#: modules/process/calibrate.c:459 modules/process/calibrate.c:514
+#: modules/process/dimensions.h:143 modules/process/volumize_layers.c:259
+#: modules/volume/volume_calibrate.c:409 modules/volume/volume_calibrate.c:429
+#: modules/volume/volume_calibrate.c:449 modules/volume/volume_calibrate.c:498
msgid "verb|Change"
msgstr "Changer"
#: modules/file/hdrimage.cc:2345 modules/file/pixmap.c:907
-#: modules/file/rawfile.c:694 modules/process/crosscor.c:263
-#: modules/process/dimensions.h:477
+#: modules/file/rawfile.c:694 modules/process/crosscor.c:260
+#: modules/process/dimensions.h:459
msgid "H_eight:"
msgstr "Hauteur :"
@@ -4143,16 +4287,16 @@ msgstr "Échelle _Z (par unité d'échantillon) :"
#: modules/file/hdrimage.cc:2557 modules/file/pixmap.c:1176
#: modules/file/rawfile.c:1386 modules/process/calcoefs_new.c:819
#: modules/process/calcoefs_simple.c:1197 modules/process/calcoefs_view.c:1380
-#: modules/process/calibrate.c:979 modules/process/dimensions.h:195
-#: modules/process/volumize_layers.c:315 modules/volume/volume_calibrate.c:1017
+#: modules/process/calibrate.c:1013 modules/process/dimensions.h:177
+#: modules/process/volumize_layers.c:314 modules/volume/volume_calibrate.c:957
msgid "Change Units"
msgstr "Changer les unités"
#: modules/file/hdrimage.cc:2571 modules/file/pixmap.c:1190
#: modules/file/rawfile.c:1400 modules/process/calcoefs_new.c:832
#: modules/process/calcoefs_simple.c:1210 modules/process/calcoefs_view.c:1393
-#: modules/process/calibrate.c:993 modules/process/dimensions.h:208
-#: modules/process/volumize_layers.c:329 modules/volume/volume_calibrate.c:1031
+#: modules/process/calibrate.c:1027 modules/process/dimensions.h:190
+#: modules/process/volumize_layers.c:328 modules/volume/volume_calibrate.c:971
msgid "New _units:"
msgstr "Nouvelles _unités :"
@@ -4199,134 +4343,134 @@ msgid "Field DataSize %ux%u does not match image dimensions %ux%u."
msgstr ""
"Le champ DataSize %ux%u ne correspond pas aux dimensions de l'image %ux%u."
-#: modules/file/igorfile.c:200
+#: modules/file/igorfile.c:210
msgid "Imports Igor binary waves (.ibw)."
msgstr "Importe les waveforms Igor binaires (.ibw)."
-#: modules/file/igorfile.c:213
+#: modules/file/igorfile.c:223
msgid "Igor binary waves (.ibw)"
msgstr "Igor waveforms binaires (.ibw)"
-#: modules/file/igorfile.c:273
+#: modules/file/igorfile.c:283
#, c-format
msgid "Format version is %d. Only version 5 is supported."
msgstr "La version de format est %d. Seule la version 5 est supportée."
-#: modules/file/igorfile.c:294
+#: modules/file/igorfile.c:305
msgid "Only two-dimensional data are supported."
msgstr "Seules les données bi-dimensionnelles sont supportées."
-#: modules/file/igorfile.c:306
+#: modules/file/igorfile.c:317
#, c-format
msgid "Number of data points %u does not match resolutions %u×%u×%u."
msgstr ""
"Le nombre de points de données %u ne correspond pas à la résolution %u×%u×%u."
-#: modules/file/igorfile.c:320
+#: modules/file/igorfile.c:331
#, c-format
msgid "Data size %u does not match the number of data points %u×%u."
msgstr ""
"La taille des données %u ne correspond pas au nombre de points de données %u×"
"%u."
-#: modules/file/igorfile.c:358
+#: modules/file/igorfile.c:369
msgid "Cannot read channel labels."
msgstr "Impossible de lire les légendes des canaux."
-#: modules/file/imgexport.c:392 modules/file/pixmap.c:178
+#: modules/file/imgexport.c:391 modules/file/pixmap.c:178
msgid "Portable Network Graphics (.png)"
msgstr "Image PNG (.png)"
-#: modules/file/imgexport.c:398 modules/file/pixmap.c:182
+#: modules/file/imgexport.c:397 modules/file/pixmap.c:182
msgid "JPEG (.jpeg,.jpg)"
msgstr "Image JPEG (.jpeg, .jpg)"
-#: modules/file/imgexport.c:404 modules/file/pixmap.c:186
+#: modules/file/imgexport.c:403 modules/file/pixmap.c:186
msgid "TIFF (.tiff,.tif)"
msgstr "Image TIFF (.tiff, .tif)"
-#: modules/file/imgexport.c:410 modules/file/pixmap.c:190
+#: modules/file/imgexport.c:409 modules/file/pixmap.c:190
msgid "Portable Pixmap (.ppm,.pnm)"
msgstr "Image PPM (.ppm, .pnm)"
-#: modules/file/imgexport.c:416 modules/file/pixmap.c:194
+#: modules/file/imgexport.c:415 modules/file/pixmap.c:194
msgid "Windows or OS2 Bitmap (.bmp)"
msgstr "Image BMP (.bmp)"
-#: modules/file/imgexport.c:422 modules/file/pixmap.c:198
+#: modules/file/imgexport.c:421 modules/file/pixmap.c:198
msgid "TARGA (.tga,.targa)"
msgstr "Image TARGA (.tga, .targa)"
-#: modules/file/imgexport.c:429
+#: modules/file/imgexport.c:428
msgid "WebP (.webp)"
msgstr "Image WebP (.webp)"
-#: modules/file/imgexport.c:437
+#: modules/file/imgexport.c:436
msgid "Portable document format (.pdf)"
msgstr "Document PDF (.pdf)"
-#: modules/file/imgexport.c:445
+#: modules/file/imgexport.c:444
msgid "Encapsulated PostScript (.eps)"
msgstr "Document PostScript encapsulé (.eps)"
-#: modules/file/imgexport.c:453
+#: modules/file/imgexport.c:452
msgid "Scalable Vector Graphics (.svg)"
msgstr "Image vectorielle SVG (.svg)"
-#: modules/file/imgexport.c:463 modules/tools/selectionmanager.c:269
+#: modules/file/imgexport.c:462 modules/tools/selectionmanager.c:269
msgid "Horiz./vert. lines"
msgstr "Lignes horiz./vert."
-#: modules/file/imgexport.c:467 modules/tools/selectionmanager.c:270
+#: modules/file/imgexport.c:466 modules/tools/selectionmanager.c:270
msgid "Ellipses"
msgstr "Ellipses"
-#: modules/file/imgexport.c:471 modules/tools/selectionmanager.c:272
+#: modules/file/imgexport.c:470 modules/tools/selectionmanager.c:272
msgid "Lines"
msgstr "Lignes"
-#: modules/file/imgexport.c:479 modules/tools/selectionmanager.c:275
+#: modules/file/imgexport.c:478 modules/tools/selectionmanager.c:275
msgid "Rectangles"
msgstr "Rectangles"
-#: modules/file/imgexport.c:483 modules/process/lat_synth.c:565
+#: modules/file/imgexport.c:482 modules/process/lat_synth.c:565
#: modules/process/lat_synth.c:637 modules/tools/selectionmanager.c:271
msgid "Lattice"
msgstr "Maillage"
-#: modules/file/imgexport.c:487
+#: modules/file/imgexport.c:486
msgid "Path"
msgstr "Chemin"
-#: modules/file/imgexport.c:493 modules/file/imgexport.c:499
+#: modules/file/imgexport.c:492 modules/file/imgexport.c:498
msgid "ruler|_None"
msgstr "_Aucune"
-#: modules/file/imgexport.c:494
+#: modules/file/imgexport.c:493
msgid "_Rulers"
msgstr "G_raduations"
-#: modules/file/imgexport.c:495
+#: modules/file/imgexport.c:494
msgid "_Inset scale bar"
msgstr "Échelle"
-#: modules/file/imgexport.c:500
+#: modules/file/imgexport.c:499
msgid "_False color ruler"
msgstr "Échelle de couleurs"
-#: modules/file/imgexport.c:504
+#: modules/file/imgexport.c:503
msgid "title|None"
msgstr "Aucun"
-#: modules/file/imgexport.c:505
+#: modules/file/imgexport.c:504
msgid "At the top"
msgstr "En haut"
-#: modules/file/imgexport.c:506
+#: modules/file/imgexport.c:505
msgid "Along the right edge"
msgstr "Le long du bord droit"
-#: modules/file/imgexport.c:512
+#: modules/file/imgexport.c:511
msgid ""
"Renders data into vector (SVG, PDF, EPS) and pixmap (PNG, JPEG, TIFF, WebP, "
"PPM, BMP, TARGA) images. Export to some formats relies on GDK and other "
@@ -4336,56 +4480,57 @@ msgstr ""
"JPEG, TIFF, WebP, PPM, BMP, TARGA). L'export sous certains formats est basé "
"sur GDK et d'autres librairies, et peut ainsi dépendre de votre installation."
-#: modules/file/imgexport.c:2931
+#: modules/file/imgexport.c:2933
msgid "Select Color"
msgstr "Couleur des sélections"
-#: modules/file/imgexport.c:3002
-msgid "Black"
-msgstr "Noir"
-
-#: modules/file/imgexport.c:3010
+#: modules/file/imgexport.c:3005
msgid "White"
msgstr "Blanc"
-#: modules/file/imgexport.c:3053
+#: modules/file/imgexport.c:3014
+msgid "Black"
+msgstr "Noir"
+
+#: modules/file/imgexport.c:3069
msgid "Pi_xel size:"
msgstr "Taille des pi_xels :"
-#: modules/file/imgexport.c:3062
+#: modules/file/imgexport.c:3077
msgid "Pixels per _inch:"
msgstr "P_ixels par pouce :"
-#: modules/file/imgexport.c:3089
+#: modules/file/imgexport.c:3102
msgid "_Zoom:"
msgstr "_Zoom :"
-#: modules/file/imgexport.c:3108 modules/process/bdep_synth.c:430
+#: modules/file/imgexport.c:3120 modules/process/bdep_synth.c:430
#: modules/process/col_synth.c:486 modules/process/diff_synth.c:508
-#: modules/process/domain_synth.c:510 modules/process/grain_mark.c:285
-#: modules/process/lat_synth.c:753 modules/process/obj_synth.c:575
-#: modules/process/pat_synth.c:852 modules/process/pat_synth.c:1154
-#: modules/process/pat_synth.c:1489 modules/process/tip_blind.c:340
+#: modules/process/domain_synth.c:510 modules/process/fibre_synth.c:540
+#: modules/process/grain_mark.c:284 modules/process/lat_synth.c:753
+#: modules/process/obj_synth.c:573 modules/process/pat_synth.c:853
+#: modules/process/pat_synth.c:1155 modules/process/pat_synth.c:1490
+#: modules/process/phase_synth.c:298 modules/process/tip_blind.c:342
msgid "_Height:"
msgstr "_Hauteur :"
-#: modules/file/imgexport.c:3121
+#: modules/file/imgexport.c:3136
msgid "_Font:"
msgstr "Police :"
-#: modules/file/imgexport.c:3140
+#: modules/file/imgexport.c:3145
msgid "_Font size:"
msgstr "Taille de police :"
-#: modules/file/imgexport.c:3160
+#: modules/file/imgexport.c:3163
msgid "O_utline thickness:"
msgstr "Épaisse_ur des contours :"
-#: modules/file/imgexport.c:3170
+#: modules/file/imgexport.c:3172
msgid "_Border width:"
msgstr "Épaisseur des bordures :"
-#: modules/file/imgexport.c:3180
+#: modules/file/imgexport.c:3181
msgid "_Tick length:"
msgstr "Longueur des gradua_tions :"
@@ -4405,219 +4550,220 @@ msgstr "Couleurs"
msgid "_Line and text color:"
msgstr "Cou_leur des lignes et du texte :"
-#: modules/file/imgexport.c:3221
+#: modules/file/imgexport.c:3220
msgid "_Transparent background"
msgstr "Arrière-plan transparent"
-#: modules/file/imgexport.c:3232
+#: modules/file/imgexport.c:3231
msgid "_Background color:"
msgstr "Couleur d'arrière-plan :"
-#: modules/file/imgexport.c:3474
-msgid "Lateral scale"
-msgstr "Échelle latérale"
-
-#: modules/file/imgexport.c:3487 modules/process/lno_synth.c:1053
-msgid "_Length:"
-msgstr "_Longueur :"
-
-#: modules/file/imgexport.c:3503
-msgid "_Auto"
-msgstr "_Auto"
-
-#: modules/file/imgexport.c:3511 modules/process/pat_synth.c:469
+#: modules/file/imgexport.c:3433 modules/process/fibre_synth.c:582
+#: modules/process/pat_synth.c:470
msgid "Placement"
msgstr "Positionnement"
-#: modules/file/imgexport.c:3515
+#: modules/file/imgexport.c:3437
msgid "left"
msgstr "gauche"
-#: modules/file/imgexport.c:3519
+#: modules/file/imgexport.c:3440
msgid "center"
msgstr "centre"
-#: modules/file/imgexport.c:3523
+#: modules/file/imgexport.c:3443
msgid "right"
msgstr "droite"
-#: modules/file/imgexport.c:3528
+#: modules/file/imgexport.c:3448
msgid "top"
msgstr "haut"
-#: modules/file/imgexport.c:3540
+#: modules/file/imgexport.c:3456
msgid "bottom"
msgstr "bas"
-#: modules/file/imgexport.c:3552 modules/file/imgexport.c:3874
+#: modules/file/imgexport.c:3479
+msgid "Lateral scale"
+msgstr "Échelle latérale"
+
+#: modules/file/imgexport.c:3496 modules/process/lno_synth.c:1053
+msgid "_Length:"
+msgstr "_Longueur :"
+
+#: modules/file/imgexport.c:3502
+msgid "_Auto"
+msgstr "_Auto"
+
+#: modules/file/imgexport.c:3519 modules/file/imgexport.c:3832
msgid "Hori_zontal gap:"
msgstr "Écart hori_zontal :"
-#: modules/file/imgexport.c:3558 modules/file/imgexport.c:3854
+#: modules/file/imgexport.c:3526 modules/file/imgexport.c:3812
msgid "_Vertical gap:"
msgstr "Écart vertical :"
-#: modules/file/imgexport.c:3571 modules/file/imgexport.c:4184
+#: modules/file/imgexport.c:3538 modules/file/imgexport.c:4134
msgid "Colo_r:"
msgstr "Couleu_r :"
-#: modules/file/imgexport.c:3576 modules/file/imgexport.c:4189
+#: modules/file/imgexport.c:3542 modules/file/imgexport.c:4138
msgid "Out_line color:"
msgstr "Cou_leur des contours :"
-#: modules/file/imgexport.c:3580 modules/file/imgexport.c:4195
+#: modules/file/imgexport.c:3547 modules/file/imgexport.c:4143
msgid "O_pacity:"
msgstr "O_pacité :"
-#: modules/file/imgexport.c:3589
+#: modules/file/imgexport.c:3554
msgid "Draw _ticks"
msgstr "Afficher les ex_trémités"
-#: modules/file/imgexport.c:3599
+#: modules/file/imgexport.c:3564
msgid "Draw _label"
msgstr "Afficher _l'annotation"
-#: modules/file/imgexport.c:3609
+#: modules/file/imgexport.c:3574
msgid "Draw text _above scale bar"
msgstr "Dessiner le texte _au-dessus de l'échelle"
-#: modules/file/imgexport.c:3773
+#: modules/file/imgexport.c:3738
msgid "Image"
msgstr "Image"
-#: modules/file/imgexport.c:3777 modules/process/calcoefs_view.c:473
-#: modules/process/correct_affine.c:488 modules/process/drift.c:297
-#: modules/process/dwt.c:206 modules/process/dwtanisotropy.c:202
-#: modules/process/fft_filter_1d.c:294 modules/process/fft_profile.c:292
-#: modules/process/fractal.c:253 modules/process/nanoindent_adjust.c:229
-#: modules/process/polydistort.c:247 modules/process/rotate.c:274
-#: modules/process/scale.c:253 modules/process/straighten_path.c:271
+#: modules/file/imgexport.c:3742 modules/process/calcoefs_view.c:473
+#: modules/process/correct_affine.c:538 modules/process/drift.c:298
+#: modules/process/dwt.c:206 modules/process/dwtanisotropy.c:203
+#: modules/process/fft_filter_1d.c:296 modules/process/fft_profile.c:293
+#: modules/process/fractal.c:262 modules/process/nanoindent_adjust.c:229
+#: modules/process/polydistort.c:250 modules/process/rotate.c:274
+#: modules/process/scale.c:257 modules/process/straighten_path.c:270
#: modules/process/unrotate.c:277 modules/tools/linestats.c:400
-#: modules/tools/profile.c:555 modules/tools/roughness.c:864
-#: modules/tools/sfunctions.c:468 modules/xyz/xyz_raster.c:632
+#: modules/tools/profile.c:552 modules/tools/roughness.c:879
+#: modules/tools/sfunctions.c:481 modules/xyz/xyz_raster.c:601
msgid "_Interpolation type:"
msgstr "Type d'interpolation :"
-#: modules/file/imgexport.c:3807
+#: modules/file/imgexport.c:3772
msgid "Draw _frame"
msgstr "Dessiner le cadre"
-#: modules/file/imgexport.c:3816
+#: modules/file/imgexport.c:3781
msgid "Draw _mask"
msgstr "Dessiner le _masque"
-#: modules/file/imgexport.c:3826
+#: modules/file/imgexport.c:3791
msgid "Draw mask _legend"
msgstr "Afficher la _légende du masque"
-#: modules/file/imgexport.c:3861
+#: modules/file/imgexport.c:3819
msgid "Value Scale"
msgstr "Échelle de valeurs"
-#: modules/file/imgexport.c:3882
+#: modules/file/imgexport.c:3840
msgid "Fi_xed precision:"
msgstr "Précision fi_xée :"
-#: modules/file/imgexport.c:3898
+#: modules/file/imgexport.c:3855
msgid "Fixed _kilo threshold:"
msgstr "Seuil d'unité :"
-#: modules/file/imgexport.c:3914 modules/file/imgexport.c:4635
+#: modules/file/imgexport.c:3869 modules/file/imgexport.c:4583
msgid "Title"
msgstr "Titre"
-#: modules/file/imgexport.c:3918
+#: modules/file/imgexport.c:3877
msgid "Posi_tion:"
msgstr "Posi_tion :"
-#: modules/file/imgexport.c:3934
+#: modules/file/imgexport.c:3884
msgid "_Gap:"
msgstr "Écart :"
-#: modules/file/imgexport.c:3941
+#: modules/file/imgexport.c:3891
msgid "Put _units to title"
msgstr "Ajouter les _unités dans le titre"
-#: modules/file/imgexport.c:4125
+#: modules/file/imgexport.c:4075
msgid "Draw _selection"
msgstr "Dessiner les _sélections"
-#: modules/file/imgexport.c:4176 modules/tools/selectionmanager.c:361
+#: modules/file/imgexport.c:4126 modules/tools/selectionmanager.c:361
msgid "Objects"
msgstr "Objets"
-#: modules/file/imgexport.c:4615
+#: modules/file/imgexport.c:4563
msgid "Lateral"
msgstr "Latéral"
-#: modules/file/imgexport.c:4654 modules/file/rawfile.c:1040
-#: modules/process/calcoefs_load.c:230 modules/process/neural.c:693
+#: modules/file/imgexport.c:4602 modules/file/rawfile.c:1040
+#: modules/process/calcoefs_load.c:230 modules/process/neural.c:700
msgid "verb|_Load"
msgstr "Charger"
-#: modules/file/imgexport.c:4660 modules/file/rawfile.c:1046
-#: modules/process/neural.c:699
+#: modules/file/imgexport.c:4608 modules/file/rawfile.c:1046
+#: modules/process/neural.c:706
msgid "verb|_Store"
msgstr "Enregi_strer"
-#: modules/file/imgexport.c:4666 modules/file/rawfile.c:1052
-#: modules/process/neural.c:705
+#: modules/file/imgexport.c:4614 modules/file/rawfile.c:1052
+#: modules/process/neural.c:712
msgid "_Rename"
msgstr "_Renommer"
-#: modules/file/imgexport.c:4686 modules/file/rawfile.c:1071
+#: modules/file/imgexport.c:4634 modules/file/rawfile.c:1071
msgid "Preset _name:"
msgstr "_Nom du préréglage :"
-#: modules/file/imgexport.c:4757
+#: modules/file/imgexport.c:4705
#, c-format
msgid "Export %s"
msgstr "Exporter au format %s"
-#: modules/file/imgexport.c:4778
+#: modules/file/imgexport.c:4727
msgid "Export as 1_6 bit grayscale"
msgstr "Exporter en niveaux de gris 1_6 bits"
-#: modules/file/imgexport.c:4801
+#: modules/file/imgexport.c:4750
msgid "Lateral Scale"
msgstr "Échelle latérale"
-#: modules/file/imgexport.c:4806
+#: modules/file/imgexport.c:4755
msgid "Values"
msgstr "Valeurs"
-#: modules/file/imgexport.c:4811
+#: modules/file/imgexport.c:4760
msgid "Selection"
msgstr "Sélection"
-#: modules/file/imgexport.c:4816 modules/file/rawfile.c:462
+#: modules/file/imgexport.c:4765 modules/file/rawfile.c:462
#: modules/process/convolution_filter.c:275
msgid "Presets"
msgstr "Préréglages"
-#: modules/file/imgexport.c:5576
+#: modules/file/imgexport.c:5525
#, c-format
msgid "Cairo error occurred: %s"
msgstr "Une erreur s'est produite dans Cairo : %s"
-#: modules/file/imgexport.c:5600
+#: modules/file/imgexport.c:5549
#, c-format
msgid "Pixbuf save failed: %s."
msgstr "La sauvegarde de l'image à échoué : %s."
-#: modules/file/imgexport.c:5878
+#: modules/file/imgexport.c:5827
msgid "Image is too large to be stored as TARGA."
msgstr "L'image est trop grande pour être enregistrée au format TARGA"
-#: modules/file/imgexport.c:6457 modules/file/imgexport.c:6486
+#: modules/file/imgexport.c:6406 modules/file/imgexport.c:6435
msgid "Draw _numbers"
msgstr "Dessiner les _nombres"
-#: modules/file/imgexport.c:6469 modules/file/imgexport.c:6517
+#: modules/file/imgexport.c:6418 modules/file/imgexport.c:6466
msgid "_End marker length:"
msgstr "Longu_eur du marqueur de fin :"
-#: modules/file/imgexport.c:6498
+#: modules/file/imgexport.c:6447
msgid "Marker _radius:"
msgstr "_Rayon du marqueur :"
@@ -4657,52 +4803,63 @@ msgstr "L'ensemble des paramètres de balise est incomplet."
msgid "image depth"
msgstr "profondeur d'image"
-#: modules/file/iso28600.c:534
+#: modules/file/iso28600.c:543
msgid "Imports and exports ISO 28600:2011 SPM data transfer format."
msgstr ""
"Importe et exporte les fichiers de transfert de données SPM au format ISO "
"28600:2011."
-#: modules/file/iso28600.c:550
+#: modules/file/iso28600.c:559
msgid "ISO 28600:2011 SPM data transfer files (.spm)"
msgstr "ISO 28600:2011 SPM (.spm)"
-#: modules/file/iso28600.c:606
+#: modules/file/iso28600.c:658
#, c-format
-msgid "Only regular mappings are implemented but file has mapping type ‘%s’."
+msgid ""
+"Only regular and irregular mappings are implemented but the file has mapping "
+"type ‘%s’."
msgstr ""
-"Seuls les cartographies régulières sont implémentées alors que le fichier a "
-"une cartographie de type ‘%s’."
+"Seuls les maillages réguliers et irréguliers sont implémentés mais le "
+"fichier a le type de maillage ‘%s’."
-#: modules/file/iso28600.c:668 modules/file/iso28600.c:677
-#: modules/file/iso28600.c:686
+#: modules/file/iso28600.c:687 modules/file/iso28600.c:696
+#: modules/file/iso28600.c:705
#, c-format
msgid "List ‘%s’ has %u items which differs from the number %u given by ‘%s’."
msgstr ""
"La liste ‘%s’ contient %u éléments, ce qui est différent du nombre %u donnée "
"par ‘%s’."
-#: modules/file/iso28600.c:755 modules/file/iso28600.c:867
-#: modules/file/sdfile.c:846 modules/file/sdfile.c:863
-#: modules/file/spip-asc.c:239 modules/file/witec-asc.c:223
-#: modules/file/wsffile.c:215
+#: modules/file/iso28600.c:775
+#, c-format
+msgid "End of file reached when reading sample #%u of %u"
+msgstr "Fin du fichier atteinte lors de la lecture de l'échantillon #%u sur %u"
+
+#: modules/file/iso28600.c:784 modules/file/iso28600.c:873
+#, c-format
+msgid "Malformed data encountered when reading sample #%u"
+msgstr "Données mal mises en forme lors de la lecture de l'échantillon #%u"
+
+#: modules/file/iso28600.c:797 modules/file/iso28600.c:887
+#: modules/file/iso28600.c:1022
+msgid "Missing end-of-data marker."
+msgstr "Marqueur de fin de données manquant."
+
+#: modules/file/iso28600.c:1003 modules/file/sdfile.c:846
+#: modules/file/sdfile.c:863 modules/file/spip-asc.c:239
+#: modules/file/witec-asc.c:223 modules/file/wsffile.c:215
#, c-format
msgid "End of file reached when reading sample #%d of %d"
msgstr "Fin du fichier atteinte lors de la lecture de l'échantillon #%d sur %d"
-#: modules/file/iso28600.c:764 modules/file/iso28600.c:876
-#: modules/file/spip-asc.c:246 modules/file/witec-asc.c:230
-#: modules/file/wsffile.c:222
+#: modules/file/iso28600.c:1012 modules/file/spip-asc.c:246
+#: modules/file/witec-asc.c:230 modules/file/wsffile.c:222
#, c-format
msgid "Malformed data encountered when reading sample #%d of %d"
msgstr ""
"Données mal mises en forme lors de la lecture de l'échantillon #%d de %d"
-#: modules/file/iso28600.c:774 modules/file/iso28600.c:886
-msgid "Missing end-of-data marker."
-msgstr "Marqueur de fin de données manquant."
-
-#: modules/file/iso28600.c:1048
+#: modules/file/iso28600.c:1184
#, c-format
msgid "Line %u does not contain mandatory label ‘%s’."
msgstr "La ligne %u ne contient le label obligatoire ‘%s’."
@@ -4721,44 +4878,62 @@ msgstr ""
"Le type de données n'est pas connu. Faites en part aux développeurs s'il "
"vous plaît."
-#: modules/file/jpkscan.c:229
+#: modules/file/jpkscan.c:292
msgid "Imports JPK image scans."
msgstr "Importe les images de scan JPK."
-#: modules/file/jpkscan.c:242
+#: modules/file/jpkscan.c:305
msgid "JPK image scans (.jpk, .jpk-qi-image)"
msgstr "Scan JPK (.jpk)"
-#: modules/file/jpkscan.c:249
+#: modules/file/jpkscan.c:312
msgid "JPK force curves (.jpk-force, .jpk-force-map, .jpk-qi-data)"
msgstr "Courbes de force JPK (.jpk-force, .jpk-force-map, .jpk-qi-data)"
-#: modules/file/jpkscan.c:315
+#: modules/file/jpkscan.c:378
msgid "File does not contain grid dimensions."
msgstr "Le fichier ne contient pas les dimensions de la grille."
-#: modules/file/jpkscan.c:660 modules/file/nanoobserver.c:193
+#: modules/file/jpkscan.c:736 modules/file/nanoobserver.c:360
#: modules/file/nanoscantech.c:205 modules/file/opengps.c:209
#: modules/file/sensofarx.c:183 modules/file/spmxfile.c:166
msgid "Minizip cannot open the file as a ZIP file."
msgstr "Minizip n'arrive pas à ouvrir le fichier en tant que fichier ZIP."
-#: modules/file/jpkscan.c:739
+#: modules/file/jpkscan.c:758 modules/file/jpkscan.c:2717
+#, c-format
+msgid "Scanning file (%u curves)..."
+msgstr "Scan du fichier (%u des courbes)..."
+
+#: modules/file/jpkscan.c:798 modules/file/nmmxyz.c:299
+msgid "Reading files..."
+msgstr "Lecture des fichiers..."
+
+#: modules/file/jpkscan.c:816
+msgid "Creating volume data..."
+msgstr "Création des données volumiques"
+
+#: modules/file/jpkscan.c:968
msgid "Non-uniform point and/or segment numbering is not supported."
msgstr ""
"La numérotation non uniforme des points et/ou des segments n'est pas "
"supportée."
-#: modules/file/jpkscan.c:748
+#: modules/file/jpkscan.c:977
msgid "Non-uniform channel lists are not supported."
msgstr "Les listes non uniformes de canaux ne sont pas supportées."
-#: modules/file/jpkscan.c:756
+#: modules/file/jpkscan.c:985
#, c-format
msgid "Data file %s was found instead of expected %s."
msgstr "Le fichier %s a été trouvé alors que %s était attendu."
-#: modules/file/jpkscan.c:1497
+#: modules/file/jpkscan.c:1900
+#, c-format
+msgid "Header properties file for index %u is missing."
+msgstr "Il manque le fichier d'en-tête pour l'indice %u."
+
+#: modules/file/jpkscan.c:2519
msgid "Cannot find any height channel."
msgstr "Impossible de trouver un canal de hauteurs."
@@ -4915,19 +5090,19 @@ msgstr "MetroPro (.dat)"
msgid "File header is larger than file."
msgstr "L'en-tête de fichier est plus grand que le fichier."
-#: modules/file/microprof.c:117
+#: modules/file/microprof.c:125
msgid "Imports MicroProf FRT profilometer data files."
msgstr "Importe les fichiers de profilomètre MicroProf FRT."
-#: modules/file/microprof.c:130
+#: modules/file/microprof.c:138
msgid "MicroProf FRT files (.frt)"
msgstr "MicroProf FRT (.frt)"
-#: modules/file/microprof.c:136
+#: modules/file/microprof.c:144
msgid "MicroProf FRT text files (.txt)"
msgstr "MicroProf FRT texte (.txt)"
-#: modules/file/microprof.c:432
+#: modules/file/microprof.c:519
msgid "File contains fewer than XSize*YSize data points."
msgstr "Le fichier contient moins de XSize*YSize points de données."
@@ -5017,8 +5192,8 @@ msgstr "Les données de l'image commencent après la fin du fichier."
msgid "Spectra data starts past the end of file."
msgstr "Les données du spectre commencent après la fin du fichier."
-#: modules/file/nanoeducator.c:648 modules/file/opdfile.c:276
-#: modules/file/renishaw.c:1325 modules/file/sensofar.c:256
+#: modules/file/nanoeducator.c:648 modules/file/opdfile.c:287
+#: modules/file/renishaw.c:1334 modules/file/sensofar.c:256
#: modules/file/witec-asc.c:161
msgid "File header is truncated"
msgstr "L'en-tête de fichier est tronqué."
@@ -5028,8 +5203,8 @@ msgstr "L'en-tête de fichier est tronqué."
msgid "Parameter header is truncated"
msgstr "L'en-tête de paramètre est tronqué."
-#: modules/file/nanoeducator.c:932 modules/process/curvature.c:454
-#: modules/tools/profile.c:1107
+#: modules/file/nanoeducator.c:932 modules/process/curvature.c:456
+#: modules/tools/profile.c:1090
#, c-format
msgid "Profile %d"
msgstr "Profil %d"
@@ -5114,23 +5289,27 @@ msgstr "La ligne DATA_INFO contient moins de %d champs."
msgid "Missing data start marker \\x1a\\x04."
msgstr "Marqueur de début de données \\x1a\\x04 absent."
-#: modules/file/nanoobserver.c:113
-msgid "Reads NanoObserver .nao files."
-msgstr "Importe les fichiers NanoObserver (.nao)"
+#: modules/file/nanoobserver.c:201
+msgid "Reads Nano-Solution/NanoObserver .nao files."
+msgstr "Importe les fichiers Nano-Solution / NanoObserver (.nao)"
-#: modules/file/nanoobserver.c:126
-msgid "NanoObserver data (.nao)"
-msgstr "NanoObserver (.nao)"
+#: modules/file/nanoobserver.c:214
+msgid "Nano-Solution/NanoObserver data (.nao)"
+msgstr "Nano-Solution / NanoObserver (.nao)"
+
+#: modules/file/nanoobserver.c:410 modules/file/renishaw.c:1420
+msgid "Data block is truncated"
+msgstr "Le bloc de données est tronqué."
-#: modules/file/nanoscan.c:188
+#: modules/file/nanoscan.c:191
msgid "Imports NanoScan XML files."
msgstr "Importe les fichiers NanoScan XML."
-#: modules/file/nanoscan.c:201
+#: modules/file/nanoscan.c:204
msgid "NanoScan XML files (.xml)"
msgstr "NanoScan XML (.xml)"
-#: modules/file/nanoscan.c:910
+#: modules/file/nanoscan.c:937
msgid "Wrong size of Base64 encoded data."
msgstr "Les données codées en base 64 n'ont pas la bonne dimension."
@@ -5150,23 +5329,23 @@ msgstr "Importe les fichiers Digital Instruments Nanoscope II."
msgid "Nanoscope II files"
msgstr "Nanoscope II"
-#: modules/file/nanoscope.c:207
+#: modules/file/nanoscope.c:212
msgid ""
"Imports Veeco (Digital Instruments) Nanoscope data files, version 3 or newer."
msgstr ""
"Importe les fichiers Veeco (Digital Instruments) Nanoscope, version 3 ou "
"plus."
-#: modules/file/nanoscope.c:221
+#: modules/file/nanoscope.c:226
msgid "Nanoscope III files"
msgstr "Nanoscope III"
-#: modules/file/nanoscope.c:288
+#: modules/file/nanoscope.c:295
msgid "File is not a Nanoscope file, or it is a unknown subtype."
msgstr ""
"Le fichier n'est pas un fichier Nanoscope, ou est d'un sous-type inconnu."
-#: modules/file/nanoscope.c:295
+#: modules/file/nanoscope.c:302
msgid ""
"File has been damaged by change of line endings, resulting in corruption of "
"the binary part of the file.\n"
@@ -5185,16 +5364,16 @@ msgstr ""
"dans certaines versions de MS Windows, ou tout autre transfert de fichier "
"qui essaie d'enregistrer en texte indépendamment de la plateforme."
-#: modules/file/nanoscope.c:653 modules/file/nanoscope.c:669
+#: modules/file/nanoscope.c:660 modules/file/nanoscope.c:676
msgid "Cannot parse `Scan size' field."
msgstr "Impossible d'analyser le champ `Scan size'."
-#: modules/file/nanoscope.c:1539 modules/file/nrrdfile.c:1086
+#: modules/file/nanoscope.c:1546 modules/file/nrrdfile.c:1086
#, c-format
msgid "Garbage after data sample #%u."
msgstr "Données erronées après l'échantillon #%u."
-#: modules/file/nanoscope.c:1595
+#: modules/file/nanoscope.c:1602
msgid "Truncated header line."
msgstr "Ligne d'en-tête tronquée."
@@ -5275,11 +5454,8 @@ msgstr ""
"L'import des données Nano Measuring Machine doit être fait de manière "
"interactive."
-#: modules/file/nmmxyz.c:299
-msgid "Reading files..."
-msgstr "Lecture des fichiers..."
-
#: modules/file/nmmxyz.c:306 modules/process/lat_synth.c:1224
+#: modules/process/wave_synth.c:798
msgid "Rendering surface..."
msgstr "Calcul de la surface..."
@@ -5312,20 +5488,20 @@ msgid "Plot point density map"
msgstr "Afficher la carte de densité des points"
#: modules/file/nmmxyz.c:534 modules/file/rawfile.c:626
-#: modules/process/dimensions.h:445 modules/xyz/xyz_drift.c:725
-#: modules/xyz/xyz_raster.c:517
+#: modules/process/dimensions.h:427 modules/xyz/xyz_drift.c:725
+#: modules/xyz/xyz_raster.c:376
msgid "Resolution"
msgstr "Résolution"
#: modules/file/nmmxyz.c:538 modules/file/rawfile.c:631
-#: modules/process/dimensions.h:451 modules/xyz/xyz_drift.c:729
-#: modules/xyz/xyz_raster.c:521
+#: modules/process/dimensions.h:433 modules/xyz/xyz_drift.c:729
+#: modules/xyz/xyz_raster.c:382
msgid "_Horizontal size:"
msgstr "Taille _horizontale :"
#: modules/file/nmmxyz.c:554 modules/file/rawfile.c:638
-#: modules/process/dimensions.h:454 modules/xyz/xyz_drift.c:744
-#: modules/xyz/xyz_raster.c:536
+#: modules/process/dimensions.h:436 modules/xyz/xyz_drift.c:744
+#: modules/xyz/xyz_raster.c:388
msgid "_Vertical size:"
msgstr "Taille _verticale :"
@@ -5424,38 +5600,38 @@ msgstr "Le champ d'en-tête d'axe %s contient trop d'éléments."
msgid "Per-axis header field %s contains too few items."
msgstr "Le champ d'en-tête d'axe %s ne contient pas assez d'éléments."
-#: modules/file/nt-mdt.c:843
+#: modules/file/nt-mdt.c:850
msgid "Imports NT-MDT data files."
msgstr "Importe les fichiers NT-MDT."
-#: modules/file/nt-mdt.c:856
+#: modules/file/nt-mdt.c:863
msgid "NT-MDT files (.mdt)"
msgstr "NT-MDT (.mdt)"
-#: modules/file/nt-mdt.c:1491 modules/file/nt-mdt.c:1599
+#: modules/file/nt-mdt.c:1498 modules/file/nt-mdt.c:1606
msgid "Frame is too short for Frame Mode."
msgstr "la trame est trop courte pour le mode trame."
-#: modules/file/nt-mdt.c:1506 modules/file/nt-mdt.c:1614
+#: modules/file/nt-mdt.c:1513 modules/file/nt-mdt.c:1621
msgid "Frame is too short for dots or data."
msgstr "la trame est trop courte pour des points ou des données."
-#: modules/file/nt-mdt.c:1869
+#: modules/file/nt-mdt.c:1879
#, c-format
msgid "End of file reached in frame header #%u."
msgstr "Fin du fichier atteinte dans l'en-tête #%u."
-#: modules/file/nt-mdt.c:1877
+#: modules/file/nt-mdt.c:1887
#, c-format
msgid "End of file reached in frame data #%u."
msgstr "Fin du fichier atteinte dans les données #%u."
-#: modules/file/nt-mdt.c:1910
+#: modules/file/nt-mdt.c:1920
#, c-format
msgid "Frame #%u is too short for scanned data header."
msgstr "La trame #%u est trop courte pour l'en-tête des données scannées."
-#: modules/file/nt-mdt.c:1927
+#: modules/file/nt-mdt.c:1937
#, c-format
msgid "Frame #%u is too short for spectroscopy data header."
msgstr ""
@@ -5575,28 +5751,28 @@ msgstr "Omicron MATRIX (param.mtrx & data.mtrx)"
msgid "Omicron MATRIX (.mtrx & .mtrx)"
msgstr "Omicron MATRIX (.mtrx & .mtrx)"
-#: modules/file/opdfile.c:188
+#: modules/file/opdfile.c:199
msgid "Imports Wyko OPD and ASC files."
msgstr "Importe les fichiers Wyko OPD et ASC."
-#: modules/file/opdfile.c:201
+#: modules/file/opdfile.c:212
msgid "Wyko OPD files (.opd)"
msgstr "Wyko OPD (.opd)"
-#: modules/file/opdfile.c:208
+#: modules/file/opdfile.c:219
msgid "Wyko ASCII export files (.asc)"
msgstr "Wyko ASCII (.asc)"
-#: modules/file/opdfile.c:299
+#: modules/file/opdfile.c:310
#, c-format
msgid "Item `%s' is beyond the end of the file."
msgstr "L'élément `%s' est au-delà de la fin du fichier."
-#: modules/file/opdfile.c:614
+#: modules/file/opdfile.c:636
msgid "Nested directories found"
msgstr "Des dossiers emboîtés ont été trouvés"
-#: modules/file/opdfile.c:805
+#: modules/file/opdfile.c:842
#, c-format
msgid "Truncated data in block %s"
msgstr "Données tronquées dans le bloc %s"
@@ -5902,19 +6078,21 @@ msgstr "Format de données"
#: modules/file/rawfile.c:567 modules/process/arithmetic.c:234
#: modules/process/calcoefs_view.c:320 modules/process/coerce.c:250
-#: modules/process/convolution_filter.c:236 modules/process/deposit_synth.c:637
+#: modules/process/convolution_filter.c:236 modules/process/deposit_synth.c:638
#: modules/process/drift.c:242 modules/process/edge.c:635
-#: modules/process/entropy.c:178 modules/process/fft_filter_1d.c:183
-#: modules/process/grain_edge.c:210 modules/process/grain_filter.c:313
-#: modules/process/grain_mark.c:244 modules/process/grain_wshed.c:164
-#: modules/process/mark_disconn.c:205 modules/process/mark_with.c:195
-#: modules/process/polydistort.c:205 modules/process/scars.c:295
-#: modules/process/slope_dist.c:273 modules/process/straighten_path.c:198
-#: modules/process/synth.h:509 modules/process/tip_model.c:166
+#: modules/process/entropy.c:178 modules/process/fft_filter_1d.c:184
+#: modules/process/fractal.c:225 modules/process/grain_edge.c:209
+#: modules/process/grain_filter.c:312 modules/process/grain_mark.c:243
+#: modules/process/grain_wshed.c:165 modules/process/mark_disconn.c:205
+#: modules/process/mark_with.c:196 modules/process/mfm_field.c:278
+#: modules/process/mfm_shift.c:167 modules/process/polydistort.c:205
+#: modules/process/scars.c:314 modules/process/slope_dist.c:272
+#: modules/process/stitch.c:272 modules/process/straighten_path.c:198
+#: modules/process/synth.h:538 modules/process/tip_model.c:164
#: modules/process/wpour_mark.c:273 modules/tools/linestats.c:454
-#: modules/tools/sfunctions.c:534 modules/tools/stats.c:459
-#: modules/volume/volume_extract.c:328 modules/volume/volume_linestat.c:287
-#: modules/xyz/xyz_drift.c:618 modules/xyz/xyz_raster.c:443
+#: modules/tools/sfunctions.c:531 modules/tools/stats.c:456
+#: modules/volume/volume_extract.c:321 modules/volume/volume_linestat.c:292
+#: modules/xyz/xyz_drift.c:618 modules/xyz/xyz_raster.c:457
msgid "_Update"
msgstr "Mise à jour"
@@ -6063,7 +6241,7 @@ msgstr ""
"<b>L'analyse du contenu à échoué</b>\n"
"Le contenu de `%s' ne correspond pas au format : %s."
-#: modules/file/rawfile.c:1690 modules/process/neural.c:1580
+#: modules/file/rawfile.c:1690 modules/process/neural.c:1587
#, c-format
msgid "The name `%s' is invalid."
msgstr "Le nom `%s' est invalide."
@@ -6166,7 +6344,8 @@ msgstr "Fichiers de points XYZ"
msgid "Import XYZ Data"
msgstr "Importer des données XYZ"
-#: modules/file/rawxyz.c:279
+#: modules/file/rawxyz.c:279 modules/graph/graph_stats.c:305
+#: modules/graph/graph_stats.c:756 modules/graph/graph_stats.c:800
msgid "Number of points:"
msgstr "Nombre de points :"
@@ -6186,7 +6365,7 @@ msgstr "Plage Z :"
msgid "_Lateral units:"
msgstr "Unités _latérales :"
-#: modules/file/rawxyz.c:386 modules/process/dimensions.h:494
+#: modules/file/rawxyz.c:386 modules/process/dimensions.h:479
msgid "_Value units:"
msgstr "Unités de valeur :"
@@ -6202,18 +6381,14 @@ msgstr "Renishaw WiRE (.wdf)"
msgid "MapArea block is truncated"
msgstr "Le bloc MapArea est tronqué"
-#: modules/file/renishaw.c:787
+#: modules/file/renishaw.c:793
msgid "Random points order unsupported"
msgstr "Les points donnés dans un ordre aléatoire ne sont pas supportés."
-#: modules/file/renishaw.c:1396
+#: modules/file/renishaw.c:1405
msgid "Block header is truncated"
msgstr "Le bloc d'en-tête est tronqué."
-#: modules/file/renishaw.c:1411
-msgid "Data block is truncated"
-msgstr "Le bloc de données est tronqué."
-
#: modules/file/rhk-sm3.c:236
msgid "Imports RHK Technology SM3 data files."
msgstr "Importe les fichiers RHK Technology SM3."
@@ -6475,19 +6650,23 @@ msgstr "Charge les fichiers SPML (Scanning Probe Microscopy Markup Language)."
msgid "SPML files (.xml)"
msgstr "SPML (.xml)"
-#: modules/file/spmlab.c:131
+#: modules/file/spmlab.c:175
msgid "Imports Thermicroscopes SpmLab R3 to R7 data files."
msgstr "Importe les fichiers Thermicroscopes SpmLab R3 à R7."
-#: modules/file/spmlab.c:144
+#: modules/file/spmlab.c:188
msgid "Thermicroscopes SpmLab files"
msgstr "Thermicroscopes SpmLab"
-#: modules/file/spmlab.c:231
+#: modules/file/spmlab.c:259
#, c-format
msgid "Unknown format version %c."
msgstr "Version de format %c inconnue."
+#: modules/file/spmlab.c:283
+msgid "Data block is truncated."
+msgstr "Le bloc de données est tronqué."
+
#: modules/file/spmlabf.c:79
msgid "Imports SPMLab floating-point files."
msgstr "Importe les fichiers SPMLab à virgule flottante."
@@ -6685,11 +6864,11 @@ msgstr "Importe les fichiers WinSTM (.stm)."
msgid "WinSTM files (.stm)"
msgstr "WinSTM (.stm)"
-#: modules/file/wipfile.c:272
+#: modules/file/wipfile.c:281
msgid "Imports WItec Project data files."
msgstr "Importe les fichiers WITec Project."
-#: modules/file/wipfile.c:285
+#: modules/file/wipfile.c:294
msgid "WItec Project files (.wip)"
msgstr "WITec Project (.wip)"
@@ -6750,21 +6929,21 @@ msgstr "Exporte les coordonnées XYZ au format texte."
msgid "XYZ text data (.xyz)"
msgstr "Données texte XYZ (.xyz)"
-#: modules/file/xyzexport.c:244
+#: modules/file/xyzexport.c:247
msgid "Lateral units:"
msgstr "Unités latérales :"
-#: modules/file/xyzexport.c:290
+#: modules/file/xyzexport.c:293
msgid "Export XYZ"
msgstr "Exporter au format XYZ"
-#: modules/file/xyzexport.c:340 modules/process/curvature.c:704
+#: modules/file/xyzexport.c:343 modules/process/curvature.c:700
#: modules/process/entropy.c:214 modules/process/facet-level.c:207
-#: modules/process/fit-shape.c:743 modules/process/level.c:259
-#: modules/process/linematch.c:906 modules/process/neural.c:593
-#: modules/process/polylevel.c:491 modules/process/slope_dist.c:418
-#: modules/tools/filter.c:300 modules/tools/linestats.c:436
-#: modules/tools/profile.c:591 modules/tools/sfunctions.c:516
+#: modules/process/fit-shape.c:755 modules/process/level.c:259
+#: modules/process/linematch.c:869 modules/process/neural.c:597
+#: modules/process/polylevel.c:494 modules/process/slope_dist.c:411
+#: modules/tools/filter.c:301 modules/tools/linestats.c:436
+#: modules/tools/profile.c:572 modules/tools/sfunctions.c:513
#: modules/tools/stats.c:389
msgid "Masking Mode"
msgstr "Utilisation du masque"
@@ -6775,7 +6954,15 @@ msgstr "Importe les fichiers Carl Zeiss SEM."
#: modules/file/zeiss.c:74
msgid "Carl Zeiss SEM scans (.tif)"
-msgstr "Scan Carl Zeiss SEM (.tif)"
+msgstr "Carl Zeiss SEM (.tif)"
+
+#: modules/file/zeisslsm.c:383
+msgid "Imports Carl Zeiss CLSM images."
+msgstr "Importe les fichiers Carl Zeiss CLSM."
+
+#: modules/file/zeisslsm.c:396
+msgid "Carl Zeiss CLSM images (.lsm)"
+msgstr "Carl Zeiss CLSM (.lsm)"
#: modules/file/zemax.c:72
msgid "Imports Zemax grid sag data files."
@@ -6799,15 +6986,15 @@ msgstr "Le code d'unité %d est invalide ou n'est pas supporté."
msgid "The first line contains too many items."
msgstr "La première ligne contient trop d'éléments."
-#: modules/graph/graph_align.c:57
+#: modules/graph/graph_align.c:60
msgid "Aligns graph curves."
msgstr "Aligne les courbes."
-#: modules/graph/graph_align.c:71
+#: modules/graph/graph_align.c:74
msgid "/_Align"
msgstr "/_Aligner"
-#: modules/graph/graph_align.c:74
+#: modules/graph/graph_align.c:77
msgid "Align curves"
msgstr "Aligner les courbes"
@@ -6823,48 +7010,50 @@ msgstr "/Dimension _critique..."
msgid "Fit critical dimension"
msgstr "Ajuster la dimension critique"
-#: modules/graph/graph_cd.c:209 modules/graph/graph_fit.c:267
+#: modules/graph/graph_cd.c:209 modules/graph/graph_fit.c:270
msgid "Fit Graph"
msgstr "Ajuster le graphe"
-#: modules/graph/graph_cd.c:212 modules/graph/graph_fdfit.c:251
-#: modules/graph/graph_fit.c:270 modules/process/fit-shape.c:393
+#: modules/graph/graph_cd.c:212 modules/graph/graph_fdfit.c:254
+#: modules/graph/graph_fit.c:273 modules/process/fit-shape.c:394
#: modules/volume/volume_fdfit.c:299
msgid "verb|_Fit"
msgstr "Ajuster"
-#: modules/graph/graph_cd.c:262 modules/graph/graph_cut.c:166
-#: modules/graph/graph_fdfit.c:306 modules/graph/graph_fit.c:325
-#: modules/graph/graph_peaks.c:199
+#: modules/graph/graph_cd.c:262 modules/graph/graph_cut.c:168
+#: modules/graph/graph_fdfit.c:313 modules/graph/graph_fit.c:332
+#: modules/graph/graph_peaks.c:199 modules/graph/graph_stats.c:268
msgid "_Graph curve:"
msgstr "_Graphe :"
-#: modules/graph/graph_cd.c:276 modules/graph/graph_fdfit.c:320
-#: modules/graph/graph_fit.c:339 modules/volume/volume_fdfit.c:405
+#: modules/graph/graph_cd.c:276 modules/graph/graph_fdfit.c:327
+#: modules/graph/graph_fit.c:346 modules/volume/volume_fdfit.c:389
msgid "F_unction:"
msgstr "Fonction :"
-#: modules/graph/graph_cd.c:305 modules/graph/graph_fdfit.c:361
-#: modules/graph/graph_fit.c:375 modules/process/curvature.c:745
-#: modules/process/fit-shape.c:792 modules/volume/volume_fdfit.c:446
+#: modules/graph/graph_cd.c:305 modules/graph/graph_fdfit.c:368
+#: modules/graph/graph_fit.c:382 modules/process/curvature.c:742
+#: modules/process/fit-shape.c:804 modules/volume/volume_fdfit.c:422
msgid "Parameter"
msgstr "Paramètre"
-#: modules/graph/graph_cd.c:307 modules/graph/graph_fdfit.c:363
-#: modules/graph/graph_fit.c:377 modules/process/fit-shape.c:794
-#: modules/volume/volume_fdfit.c:448
+#: modules/graph/graph_cd.c:307 modules/graph/graph_fdfit.c:370
+#: modules/graph/graph_fit.c:384 modules/process/fit-shape.c:806
+#: modules/volume/volume_fdfit.c:424
msgid "Error"
msgstr "Erreur"
-#: modules/graph/graph_cd.c:319 modules/graph/graph_cut.c:196
-#: modules/graph/graph_fdfit.c:415 modules/graph/graph_fit.c:433
-#: modules/volume/volume_fdfit.c:500 modules/volume/volume_linestat.c:389
+#: modules/graph/graph_cd.c:319 modules/graph/graph_cut.c:189
+#: modules/graph/graph_fdfit.c:422 modules/graph/graph_fit.c:440
+#: modules/graph/graph_stats.c:279 modules/graph/graph_stats.c:793
+#: modules/volume/volume_fdfit.c:476 modules/volume/volume_linestat.c:394
msgid "Range:"
msgstr "Plage :"
-#: modules/graph/graph_cd.c:330 modules/graph/graph_cut.c:207
-#: modules/graph/graph_fdfit.c:426 modules/graph/graph_fit.c:444
-#: modules/volume/volume_fdfit.c:511 modules/volume/volume_linestat.c:400
+#: modules/graph/graph_cd.c:330 modules/graph/graph_cut.c:200
+#: modules/graph/graph_fdfit.c:433 modules/graph/graph_fit.c:451
+#: modules/graph/graph_stats.c:290 modules/graph/graph_stats.c:796
+#: modules/volume/volume_fdfit.c:487 modules/volume/volume_linestat.c:405
msgid "range|to"
msgstr "jusqu'à"
@@ -6872,92 +7061,92 @@ msgstr "jusqu'à"
msgid "_Draw whole circle"
msgstr "_Dessiner un cercle entier"
-#: modules/graph/graph_cd.c:382 modules/graph/graph_fdfit.c:491
-#: modules/graph/graph_fit.c:531 modules/process/fit-shape.c:522
-#: modules/volume/volume_fdfit.c:573
+#: modules/graph/graph_cd.c:382 modules/graph/graph_fdfit.c:498
+#: modules/graph/graph_fit.c:538 modules/process/fit-shape.c:523
+#: modules/volume/volume_fdfit.c:549
msgid "Save Fit Report"
-msgstr "Sauver le rapport d'ajustement"
+msgstr "Enregistrer le rapport d'ajustement"
#: modules/graph/graph_cd.c:529 modules/graph/graph_cd.c:1107
-#: modules/graph/graph_fdfit.c:709 modules/graph/graph_fit.c:763
-#: modules/volume/volume_fdfit.c:907
+#: modules/graph/graph_fdfit.c:725 modules/graph/graph_fit.c:779
+#: modules/volume/volume_fdfit.c:883
msgid "Fit"
msgstr "Ajustement"
-#: modules/graph/graph_cd.c:555 modules/graph/graph_fdfit.c:749
-#: modules/graph/graph_fit.c:803 modules/volume/volume_fdfit.c:978
-#: modules/volume/volume_fdfit.c:1085
+#: modules/graph/graph_cd.c:555 modules/graph/graph_fdfit.c:765
+#: modules/graph/graph_fit.c:819 modules/volume/volume_fdfit.c:954
+#: modules/volume/volume_fdfit.c:1061
msgid "It is necessary to select more data points than free fit parameters"
msgstr "Il faut sélectionner plus de points que de paramètres d'ajustement"
-#: modules/graph/graph_cd.c:710 modules/graph/graph_fdfit.c:798
-#: modules/graph/graph_fit.c:852 modules/process/entropy.c:554
-#: modules/tools/grainmeasure.c:217 modules/tools/readvalue.c:634
-#: modules/tools/readvalue.c:635 modules/tools/readvalue.c:636
-#: modules/tools/readvalue.c:637 modules/tools/roughness.c:975
-#: modules/tools/stats.c:727 modules/tools/stats.c:740
-#: modules/tools/stats.c:741 modules/volume/volume_fdfit.c:1134
-#: modules/xyz/xyz_drift.c:1099 modules/xyz/xyz_drift.c:1117
-#: modules/xyz/xyz_drift.c:1134
+#: modules/graph/graph_cd.c:710 modules/graph/graph_fdfit.c:814
+#: modules/graph/graph_fit.c:868 modules/graph/graph_stats.c:663
+#: modules/process/entropy.c:555 modules/tools/grainmeasure.c:217
+#: modules/tools/readvalue.c:634 modules/tools/readvalue.c:635
+#: modules/tools/readvalue.c:636 modules/tools/readvalue.c:637
+#: modules/tools/roughness.c:984 modules/tools/stats.c:723
+#: modules/tools/stats.c:736 modules/tools/stats.c:737
+#: modules/volume/volume_fdfit.c:1110 modules/xyz/xyz_drift.c:1099
+#: modules/xyz/xyz_drift.c:1117 modules/xyz/xyz_drift.c:1134
msgid "N.A."
msgstr "N. A."
-#: modules/graph/graph_cd.c:993 modules/graph/graph_fdfit.c:1363
-#: modules/graph/graph_fit.c:1500 modules/process/fit-shape.c:2078
-#: modules/volume/volume_fdfit.c:1720
+#: modules/graph/graph_cd.c:993 modules/graph/graph_fdfit.c:1381
+#: modules/graph/graph_fit.c:1518 modules/process/fit-shape.c:2060
+#: modules/volume/volume_fdfit.c:1696
msgid "===== Fit Results ====="
msgstr "===== Résultats de l'ajustement ====="
-#: modules/graph/graph_cd.c:997 modules/graph/graph_fdfit.c:1367
-#: modules/graph/graph_fit.c:1504 modules/process/fit-shape.c:2080
-#: modules/volume/volume_fdfit.c:1724
+#: modules/graph/graph_cd.c:997 modules/graph/graph_fdfit.c:1385
+#: modules/graph/graph_fit.c:1522 modules/process/fit-shape.c:2062
+#: modules/volume/volume_fdfit.c:1700
#, c-format
msgid "Data: %s\n"
msgstr "Données : %s\n"
-#: modules/graph/graph_cd.c:1000 modules/graph/graph_fdfit.c:1370
-#: modules/graph/graph_fit.c:1507 modules/process/fit-shape.c:2082
-#: modules/volume/volume_fdfit.c:1727
+#: modules/graph/graph_cd.c:1000 modules/graph/graph_fdfit.c:1388
+#: modules/graph/graph_fit.c:1525 modules/process/fit-shape.c:2064
+#: modules/volume/volume_fdfit.c:1703
#, c-format
msgid "Number of points: %d of %d\n"
msgstr "Nombre de points : %d sur %d\n"
-#: modules/graph/graph_cd.c:1004 modules/graph/graph_fdfit.c:1374
-#: modules/graph/graph_fit.c:1511 modules/volume/volume_fdfit.c:1731
+#: modules/graph/graph_cd.c:1004 modules/graph/graph_fdfit.c:1392
+#: modules/graph/graph_fit.c:1529 modules/volume/volume_fdfit.c:1707
#, c-format
msgid "X range: %.*f to %.*f %s\n"
msgstr "Plage X : %.*f jusqu'à %.*f %s\n"
-#: modules/graph/graph_cd.c:1010 modules/graph/graph_fdfit.c:1380
-#: modules/graph/graph_fit.c:1517 modules/process/fit-shape.c:2084
-#: modules/volume/volume_fdfit.c:1737
+#: modules/graph/graph_cd.c:1010 modules/graph/graph_fdfit.c:1398
+#: modules/graph/graph_fit.c:1535 modules/process/fit-shape.c:2066
+#: modules/volume/volume_fdfit.c:1713
#, c-format
msgid "Fitted function: %s\n"
msgstr "Fonction ajustée : %s\n"
-#: modules/graph/graph_cd.c:1013 modules/graph/graph_fdfit.c:1383
-#: modules/graph/graph_fit.c:1520 modules/process/fit-shape.c:2087
-#: modules/volume/volume_fdfit.c:1740
+#: modules/graph/graph_cd.c:1013 modules/graph/graph_fdfit.c:1401
+#: modules/graph/graph_fit.c:1538 modules/process/fit-shape.c:2069
+#: modules/volume/volume_fdfit.c:1716
msgid "Results\n"
msgstr "Résultats\n"
-#: modules/graph/graph_cut.c:88
+#: modules/graph/graph_cut.c:87
msgid "Cut graph"
msgstr "Couper le graphe"
-#: modules/graph/graph_cut.c:102
+#: modules/graph/graph_cut.c:101
msgid "/_Cut..."
msgstr "/_Couper..."
-#: modules/graph/graph_cut.c:105
+#: modules/graph/graph_cut.c:104
msgid "Extract part of graph into new one"
msgstr "Extraire la partie du graphe en nouveau graphe"
-#: modules/graph/graph_cut.c:146
+#: modules/graph/graph_cut.c:145
msgid "Cut Graph"
msgstr "Couper le graphe"
-#: modules/graph/graph_cut.c:180
+#: modules/graph/graph_cut.c:173
msgid "Cut _all curves"
msgstr "Couper toute les courbes"
@@ -7055,97 +7244,97 @@ msgstr "Exporter le graphe sous forme d' image"
msgid "Export to PNG"
msgstr "Exporter en PNG"
-#: modules/graph/graph_export_vector.c:35
+#: modules/graph/graph_export_vector.c:36
msgid "Exports graphs to PostScript"
msgstr "Exporte les graphes au format PostScript"
-#: modules/graph/graph_export_vector.c:49
+#: modules/graph/graph_export_vector.c:50
msgid "/Export _PostScript"
msgstr "/Exporter en _PostScript"
-#: modules/graph/graph_export_vector.c:52
+#: modules/graph/graph_export_vector.c:53
msgid "Export graph to PostScript"
msgstr "Exporter le graphe au format PostScript"
-#: modules/graph/graph_export_vector.c:65
+#: modules/graph/graph_export_vector.c:66
msgid "Export to PostScript"
msgstr "Exporter en PostScript"
-#: modules/graph/graph_fdfit.c:168
+#: modules/graph/graph_fdfit.c:169
msgid "Fit force-distance data"
msgstr "Ajuster les données force-distance"
-#: modules/graph/graph_fdfit.c:182
+#: modules/graph/graph_fdfit.c:183
msgid "/_Fit FD Curve..."
msgstr "/Ajuster la courbe _force-distance..."
-#: modules/graph/graph_fdfit.c:185
+#: modules/graph/graph_fdfit.c:186
msgid "Fit a force-distance curve"
msgstr "Ajuster une courbe force-distance"
-#: modules/graph/graph_fdfit.c:248 modules/volume/volume_fdfit.c:296
+#: modules/graph/graph_fdfit.c:251 modules/volume/volume_fdfit.c:296
msgid "Fit FD Curve"
msgstr "Ajuster la courbe FD"
-#: modules/graph/graph_fdfit.c:255 modules/graph/graph_fit.c:274
-#: modules/process/fit-shape.c:397 modules/process/measure_lattice.c:257
-#: modules/volume/volume_fdfit.c:303
+#: modules/graph/graph_fdfit.c:258 modules/graph/graph_fit.c:277
+#: modules/process/correct_affine.c:347 modules/process/fit-shape.c:398
+#: modules/process/measure_lattice.c:247 modules/volume/volume_fdfit.c:303
msgid "verb|_Estimate"
msgstr "_Estimer"
-#: modules/graph/graph_fdfit.c:257 modules/graph/graph_fit.c:276
-#: modules/volume/volume_fdfit.c:305
+#: modules/graph/graph_fdfit.c:260 modules/graph/graph_fit.c:279
+#: modules/process/psf.c:239 modules/volume/volume_fdfit.c:305
msgid "_Plot Inits"
msgstr "Initialiser"
-#: modules/graph/graph_fdfit.c:359 modules/graph/graph_fit.c:373
-#: modules/process/fit-shape.c:790 modules/volume/volume_fdfit.c:444
+#: modules/graph/graph_fdfit.c:366 modules/graph/graph_fit.c:380
+#: modules/process/fit-shape.c:802 modules/volume/volume_fdfit.c:420
msgid "Fix"
msgstr "Fixe"
-#: modules/graph/graph_fdfit.c:365 modules/graph/graph_fit.c:379
-#: modules/volume/volume_fdfit.c:450
+#: modules/graph/graph_fdfit.c:372 modules/graph/graph_fit.c:386
+#: modules/volume/volume_fdfit.c:426
msgid "Initial"
msgstr "Initial"
-#: modules/graph/graph_fdfit.c:376 modules/graph/graph_fit.c:394
-#: modules/volume/volume_fdfit.c:461
+#: modules/graph/graph_fdfit.c:383 modules/graph/graph_fit.c:401
+#: modules/volume/volume_fdfit.c:437
msgid "χ<sup>2</sup> result:"
msgstr "Résultat χ<sup>2</sup> :"
-#: modules/graph/graph_fdfit.c:392 modules/graph/graph_fit.c:410
-#: modules/process/fit-shape.c:469 modules/process/fit-shape.c:2134
-#: modules/volume/volume_fdfit.c:477
+#: modules/graph/graph_fdfit.c:399 modules/graph/graph_fit.c:417
+#: modules/process/fit-shape.c:470 modules/process/fit-shape.c:2116
+#: modules/volume/volume_fdfit.c:453
msgid "Correlation Matrix"
msgstr "Matrice de corrélation"
-#: modules/graph/graph_fdfit.c:447 modules/graph/graph_fit.c:485
-#: modules/process/wpour_mark.c:410 modules/volume/volume_fdfit.c:532
+#: modules/graph/graph_fdfit.c:454 modules/graph/graph_fit.c:492
+#: modules/process/wpour_mark.c:410 modules/volume/volume_fdfit.c:508
msgid "Instant:"
msgstr "Affichage immédiat :"
-#: modules/graph/graph_fdfit.c:450 modules/graph/graph_fit.c:488
+#: modules/graph/graph_fdfit.c:457 modules/graph/graph_fit.c:495
msgid "esti_mate"
msgstr "e_stimer"
-#: modules/graph/graph_fdfit.c:457 modules/graph/graph_fit.c:495
-#: modules/volume/volume_fdfit.c:542
+#: modules/graph/graph_fdfit.c:464 modules/graph/graph_fit.c:502
+#: modules/volume/volume_fdfit.c:518
msgid "p_lot"
msgstr "graphe"
-#: modules/graph/graph_fdfit.c:708 modules/graph/graph_fit.c:762
-#: modules/volume/volume_fdfit.c:906
+#: modules/graph/graph_fdfit.c:724 modules/graph/graph_fit.c:778
+#: modules/volume/volume_fdfit.c:882
msgid "Estimate"
msgstr "Estimation"
-#: modules/graph/graph_fdfit.c:1410 modules/graph/graph_fit.c:1547
-#: modules/volume/volume_fdfit.c:1768
+#: modules/graph/graph_fdfit.c:1428 modules/graph/graph_fit.c:1565
+#: modules/volume/volume_fdfit.c:1744
#, c-format
msgid "Residual sum: %g\n"
msgstr "Somme résiduelle : %g\n"
-#: modules/graph/graph_fdfit.c:1413 modules/graph/graph_fit.c:1550
-#: modules/volume/volume_fdfit.c:1771
+#: modules/graph/graph_fdfit.c:1431 modules/graph/graph_fit.c:1568
+#: modules/volume/volume_fdfit.c:1747
msgid "Correlation matrix\n"
msgstr "Matrice de corrélation\n"
@@ -7161,27 +7350,27 @@ msgstr "/_Filtre"
msgid "Remove noise from graph curves"
msgstr "Supprimer le bruit présent dans des courbes"
-#: modules/graph/graph_fit.c:181
+#: modules/graph/graph_fit.c:182
msgid "Fit graph with function"
msgstr "Ajuster le graphe avec une fonction"
-#: modules/graph/graph_fit.c:195
+#: modules/graph/graph_fit.c:196
msgid "/_Fit Function..."
msgstr "/_Fonction d'ajustement..."
-#: modules/graph/graph_fit.c:198
+#: modules/graph/graph_fit.c:199
msgid "Fit a function on graph data"
msgstr "Ajustement d'une fonction sur un graphe"
-#: modules/graph/graph_fit.c:386
+#: modules/graph/graph_fit.c:393
msgid "Copy all fitted values to estimates"
msgstr "Copier toutes les valeurs ajustées vers les valeurs estimées"
-#: modules/graph/graph_fit.c:460
+#: modules/graph/graph_fit.c:467
msgid "Plot full range"
msgstr "Afficher la plage complète"
-#: modules/graph/graph_fit.c:470
+#: modules/graph/graph_fit.c:477
msgid "Create a difference graph"
msgstr "Différence entre l'ajustement et les données"
@@ -7266,80 +7455,164 @@ msgstr "/Localisation de _pics..."
msgid "Find graph curve peaks"
msgstr "Localisation de pics dans un graphe"
-#: modules/graph/graph_peaks.c:157
+#: modules/graph/graph_peaks.c:155
msgid "Prominence"
msgstr "Proéminence"
-#: modules/graph/graph_peaks.c:161
+#: modules/graph/graph_peaks.c:159
msgid "Zero"
msgstr "Zéro"
-#: modules/graph/graph_peaks.c:162
+#: modules/graph/graph_peaks.c:160
msgid "Bilateral minimum"
msgstr "Minimum bilatéral"
-#: modules/graph/graph_peaks.c:178
+#: modules/graph/graph_peaks.c:176
msgid "Graph Peaks"
msgstr "Pics du graphe"
-#: modules/graph/graph_peaks.c:212
+#: modules/graph/graph_peaks.c:209
msgid "_Background type:"
msgstr "Type d'arrière-plan :"
-#: modules/graph/graph_peaks.c:227
+#: modules/graph/graph_peaks.c:219
msgid "Order peaks _by:"
msgstr "Classer les pics par :"
-#: modules/graph/graph_peaks.c:242
+#: modules/graph/graph_peaks.c:225
msgid "Number of _peaks:"
msgstr "Nombre de _pics :"
-#: modules/graph/graph_peaks.c:263 modules/process/curvature.c:773
-#: modules/process/grain_stat.c:360 modules/process/measure_lattice.c:396
-#: modules/process/polylevel.c:607 modules/tools/distance.c:259
-#: modules/tools/roughness.c:818 modules/tools/stats.c:450
+#: modules/graph/graph_peaks.c:245 modules/graph/graph_stats.c:367
+#: modules/process/curvature.c:770 modules/process/grain_stat.c:360
+#: modules/process/measure_lattice.c:390 modules/process/polylevel.c:610
+#: modules/tools/distance.c:259 modules/tools/roughness.c:819
+#: modules/tools/stats.c:447
msgid "Save table to a file"
-msgstr "Sauver le tableau"
+msgstr "Enregistrer le tableau"
-#: modules/graph/graph_peaks.c:267 modules/process/curvature.c:778
-#: modules/process/grain_stat.c:365 modules/process/measure_lattice.c:400
-#: modules/process/polylevel.c:617 modules/tools/distance.c:264
-#: modules/tools/roughness.c:823 modules/tools/stats.c:455
+#: modules/graph/graph_peaks.c:249 modules/graph/graph_stats.c:371
+#: modules/process/curvature.c:775 modules/process/grain_stat.c:365
+#: modules/process/measure_lattice.c:394 modules/process/polylevel.c:620
+#: modules/tools/distance.c:264 modules/tools/roughness.c:824
+#: modules/tools/stats.c:452
msgid "Copy table to clipboard"
msgstr "Copier la table vers le presse-papier"
-#: modules/graph/graph_peaks.c:654
+#: modules/graph/graph_peaks.c:618
msgid "Save Peak Parameters"
msgstr "Enregistrer les paramètres des pics"
-#: modules/layer/axis.c:143
-msgid "Layer allowing selection of horizontal or vertical lines."
-msgstr ""
-"Couche permettant de sélectionner des lignes horizontales ou verticales."
-
-#: modules/layer/ellipse.c:143
-msgid "Layer allowing selection of elliptic areas."
-msgstr "Couche permettant de sélectionner des zones elliptiques."
+#: modules/graph/graph_stats.c:148 modules/graph/graph_stats.c:161
+#: modules/tools/stats.c:205
+msgid "Average value:"
+msgstr "Moyenne :"
-#: modules/layer/lattice.c:126
-msgid "Layer allowing selection of a two-dimensional lattice."
-msgstr "Couche permettant de sélectionner un réseau bi-dimensionnel."
+#: modules/graph/graph_stats.c:149 modules/tools/stats.c:206
+msgid "Median:"
+msgstr "Médiane :"
-#: modules/layer/line.c:177
-msgid "Layer allowing selection of arbitrary straight lines."
-msgstr "Couche permettant de sélectionner des lignes droites."
+#: modules/graph/graph_stats.c:150
+msgid "Ra:"
+msgstr "Ra :"
-#: modules/layer/path.c:171
-msgid "Layer allowing selection of a single long curve."
-msgstr "Couche permettant de sélectionner une courbe unique."
+#: modules/graph/graph_stats.c:151
+msgid "Rms (Rq):"
+msgstr "RMS (Rq) :"
-#: modules/layer/point.c:169
-msgid ""
-"Layer allowing selection of several points, displayed as crosses or "
-"invisible."
-msgstr ""
-"Couche permettant de sélectionner plusieurs points, sous forme de croix ou "
-"invisibles."
+#: modules/graph/graph_stats.c:152 modules/tools/stats.c:210
+msgid "Skew:"
+msgstr "Asymétrie :"
+
+#: modules/graph/graph_stats.c:153 modules/tools/stats.c:211
+msgid "Kurtosis:"
+msgstr "Kurtosis :"
+
+#: modules/graph/graph_stats.c:158
+msgid "Projected length:"
+msgstr "Longueur projetée :"
+
+#: modules/graph/graph_stats.c:159
+msgid "Developed length:"
+msgstr "Longueur du profil développé :"
+
+#: modules/graph/graph_stats.c:160 modules/tools/stats.c:214
+msgid "Variation:"
+msgstr "Variation :"
+
+#: modules/graph/graph_stats.c:162
+msgid "Area under curve:"
+msgstr "Aire sous la courbe :"
+
+#: modules/graph/graph_stats.c:163
+msgid "Positive area:"
+msgstr "Aire positive :"
+
+#: modules/graph/graph_stats.c:164
+msgid "Negative area:"
+msgstr "Aire négative :"
+
+#: modules/graph/graph_stats.c:165
+msgid "Root mean square:"
+msgstr "Racine quadratique :"
+
+#: modules/graph/graph_stats.c:171
+msgid "Calculates simple graph curve statistics."
+msgstr "Calcule les statistiques de base de courbes."
+
+#: modules/graph/graph_stats.c:185
+msgid "/_Statistics..."
+msgstr "/_Statistiques..."
+
+#: modules/graph/graph_stats.c:188
+msgid "Calculate graph curve statistics"
+msgstr "Calculer les statistiques de courbes"
+
+#: modules/graph/graph_stats.c:241
+msgid "Graph Statistics"
+msgstr "Statistiques des graphes"
+
+#: modules/graph/graph_stats.c:320 modules/graph/graph_stats.c:807
+msgid "Simple Parameters"
+msgstr "Paramètres simples"
+
+#: modules/graph/graph_stats.c:342 modules/graph/graph_stats.c:826
+#, fuzzy
+msgid "Integrals"
+msgstr "_Intégrale :"
+
+#: modules/graph/graph_stats.c:686
+msgid "Save Curve Statistics"
+msgstr "Enregistrer les statistiques de la courbe"
+
+#: modules/layer/axis.c:143
+msgid "Layer allowing selection of horizontal or vertical lines."
+msgstr ""
+"Couche permettant de sélectionner des lignes horizontales ou verticales."
+
+#: modules/layer/ellipse.c:143
+msgid "Layer allowing selection of elliptic areas."
+msgstr "Couche permettant de sélectionner des zones elliptiques."
+
+#: modules/layer/lattice.c:126
+msgid "Layer allowing selection of a two-dimensional lattice."
+msgstr "Couche permettant de sélectionner un réseau bi-dimensionnel."
+
+#: modules/layer/line.c:177
+msgid "Layer allowing selection of arbitrary straight lines."
+msgstr "Couche permettant de sélectionner des lignes droites."
+
+#: modules/layer/path.c:171
+msgid "Layer allowing selection of a single long curve."
+msgstr "Couche permettant de sélectionner une courbe unique."
+
+#: modules/layer/point.c:169
+msgid ""
+"Layer allowing selection of several points, displayed as crosses or "
+"invisible."
+msgstr ""
+"Couche permettant de sélectionner plusieurs points, sous forme de croix ou "
+"invisibles."
#: modules/layer/rectangle.c:147
msgid "Layer allowing selection of rectangular areas."
@@ -7452,25 +7725,25 @@ msgstr "Distribution angulaire"
msgid "Angle Distribution"
msgstr "Distribution angulaire"
-#: modules/process/angle_dist.c:188 modules/process/slope_dist.c:373
+#: modules/process/angle_dist.c:188 modules/process/slope_dist.c:365
msgid "Output _size:"
msgstr "Taille de _sortie :"
-#: modules/process/angle_dist.c:193 modules/process/grain_wshed.c:206
+#: modules/process/angle_dist.c:193 modules/process/grain_wshed.c:207
msgid "_Number of steps:"
msgstr "_Nombre de pas :"
-#: modules/process/angle_dist.c:198 modules/process/slope_dist.c:380
+#: modules/process/angle_dist.c:198 modules/process/slope_dist.c:372
msgid "_Logarithmic value scale"
msgstr "Échelle _logarithmique"
#: modules/process/angle_dist.c:204 modules/process/entropy.c:231
-#: modules/process/slope_dist.c:390
+#: modules/process/slope_dist.c:382
msgid "Use local plane _fitting"
msgstr "Utiliser l'ajustement du plan local"
#: modules/process/angle_dist.c:213 modules/process/entropy.c:242
-#: modules/process/slope_dist.c:401
+#: modules/process/slope_dist.c:393
msgid "_Plane size:"
msgstr "Taille du _plan :"
@@ -7486,7 +7759,8 @@ msgstr "/M_ultidonnées/_Arithmétique..."
msgid "Arithmetic operations on data"
msgstr "Opérations arithmétiques sur les données"
-#: modules/process/arithmetic.c:202 modules/process/superresolution.c:349
+#: modules/process/arithmetic.c:202 modules/process/stitch.c:234
+#: modules/process/superresolution.c:348
msgid "Calculated"
msgstr "Calculée"
@@ -7502,7 +7776,7 @@ msgstr "_Expression :"
msgid "Operands"
msgstr "Opérandes"
-#: modules/process/arithmetic.c:300 modules/process/dimensions.h:483
+#: modules/process/arithmetic.c:300 modules/process/dimensions.h:465
msgid "Units"
msgstr "Unités"
@@ -7523,15 +7797,15 @@ msgstr "Spécifier explicitement les unités du résultat"
msgid "Expression contains unknown identifiers"
msgstr "L'expression contient des identifiants inconnus"
-#: modules/process/arithmetic.c:569 modules/process/superresolution.c:300
+#: modules/process/arithmetic.c:569 modules/process/superresolution.c:299
msgid "Pixel dimensions differ"
msgstr "Les dimensions des pixels diffèrent"
-#: modules/process/arithmetic.c:571 modules/process/superresolution.c:302
+#: modules/process/arithmetic.c:571 modules/process/superresolution.c:301
msgid "Lateral dimensions are different physical quantities"
msgstr "Les dimensions latérales sont des quantités physiques différentes"
-#: modules/process/arithmetic.c:574 modules/process/superresolution.c:305
+#: modules/process/arithmetic.c:574 modules/process/superresolution.c:304
msgid "Physical dimensions differ"
msgstr "Les dimensions physiques diffèrent"
@@ -7640,8 +7914,8 @@ msgid "Generates surfaces by ballistic deposition."
msgstr "Génère des surfaces par dépôt balistique."
#: modules/process/bdep_synth.c:164
-msgid "/S_ynthetic/_Ballistic..."
-msgstr "/S_ynthèse/Dépôt _balistique..."
+msgid "/S_ynthetic/_Deposition/_Ballistic..."
+msgstr "/S_ynthèse/_Dépôt/ _Balistique..."
#: modules/process/bdep_synth.c:168
msgid "Generate surface by ballistic deposition"
@@ -7649,20 +7923,23 @@ msgstr "Générer une surface par dépôt balistique"
#: modules/process/bdep_synth.c:239 modules/process/bdep_synth.c:596
#: modules/process/calcoefs_simple.c:636 modules/process/col_synth.c:282
-#: modules/process/col_synth.c:733 modules/process/crosscor.c:819
-#: modules/process/crosscor.c:882 modules/process/deposit_synth.c:268
-#: modules/process/deposit_synth.c:859 modules/process/diff_synth.c:304
-#: modules/process/diff_synth.c:705 modules/process/domain_synth.c:255
-#: modules/process/domain_synth.c:745 modules/process/grain_wshed.c:429
+#: modules/process/col_synth.c:734 modules/process/crosscor.c:792
+#: modules/process/crosscor.c:855 modules/process/deposit_synth.c:268
+#: modules/process/deposit_synth.c:858 modules/process/diff_synth.c:304
+#: modules/process/diff_synth.c:704 modules/process/domain_synth.c:255
+#: modules/process/domain_synth.c:745 modules/process/fibre_synth.c:357
+#: modules/process/fibre_synth.c:872 modules/process/grain_wshed.c:433
#: modules/process/lat_synth.c:491 modules/process/mark_disconn.c:148
-#: modules/process/mark_disconn.c:373 modules/process/maskcor.c:330
-#: modules/process/mcrop.c:315 modules/process/merge.c:1072
-#: modules/process/nanoindent_adjust.c:323 modules/process/neural.c:1272
-#: modules/process/pid.c:338 modules/process/superresolution.c:416
-#: modules/process/superresolution.c:505 modules/process/tip_blind.c:781
-#: modules/process/tipops.c:320 modules/process/xydenoise.c:213
-#: modules/volume/volume_kmeans.c:403 modules/volume/volume_kmedians.c:365
-#: modules/xyz/xyz_raster.c:1028 modules/xyz/xyz_raster.c:1044
+#: modules/process/mark_disconn.c:361 modules/process/maskcor.c:334
+#: modules/process/mcrop.c:314 modules/process/merge.c:1072
+#: modules/process/nanoindent_adjust.c:324 modules/process/neural.c:1279
+#: modules/process/pid.c:339 modules/process/sphere-revolve.c:269
+#: modules/process/superresolution.c:415 modules/process/superresolution.c:504
+#: modules/process/tip_blind.c:778 modules/process/tipops.c:320
+#: modules/process/wave_synth.c:305 modules/process/wave_synth.c:747
+#: modules/process/xydenoise.c:214 modules/volume/volume_kmeans.c:397
+#: modules/volume/volume_kmedians.c:363 modules/xyz/xyz_raster.c:997
+#: modules/xyz/xyz_raster.c:1013
msgid "Initializing..."
msgstr "Initialisation..."
@@ -7671,10 +7948,11 @@ msgstr "Initialisation..."
#: modules/process/deposit_synth.c:531 modules/process/deposit_synth.c:544
#: modules/process/diff_synth.c:342 modules/process/domain_synth.c:319
#: modules/process/domain_synth.c:327 modules/process/fbm_synth.c:278
-#: modules/process/fft_synth.c:314 modules/process/lat_synth.c:529
-#: modules/process/lno_synth.c:407 modules/process/noise_synth.c:311
-#: modules/process/obj_synth.c:407 modules/process/pat_synth.c:357
-#: modules/process/wave_synth.c:323
+#: modules/process/fft_synth.c:314 modules/process/fibre_synth.c:394
+#: modules/process/lat_synth.c:529 modules/process/lno_synth.c:405
+#: modules/process/noise_synth.c:309 modules/process/obj_synth.c:404
+#: modules/process/pat_synth.c:357 modules/process/phase_synth.c:518
+#: modules/process/wave_synth.c:342
msgid "Generated"
msgstr "Généré"
@@ -7693,50 +7971,56 @@ msgid "Progressive preview"
msgstr "Aperçu progressif"
#: modules/process/bdep_synth.c:407 modules/process/col_synth.c:458
-#: modules/process/deposit_synth.c:412 modules/process/diff_synth.c:477
+#: modules/process/deposit_synth.c:413 modules/process/diff_synth.c:477
#: modules/process/domain_synth.c:430 modules/process/fbm_synth.c:360
-#: modules/process/fft_synth.c:398 modules/process/lat_synth.c:626
-#: modules/process/lno_synth.c:490 modules/process/noise_synth.c:394
-#: modules/process/obj_synth.c:498 modules/process/pat_synth.c:442
-#: modules/process/wave_synth.c:407
+#: modules/process/fft_synth.c:398 modules/process/fibre_synth.c:479
+#: modules/process/lat_synth.c:626 modules/process/lno_synth.c:488
+#: modules/process/mfm_current.c:383 modules/process/mfm_parallel.c:384
+#: modules/process/noise_synth.c:392 modules/process/obj_synth.c:495
+#: modules/process/pat_synth.c:442 modules/process/phase_synth.c:263
+#: modules/process/wave_synth.c:426
msgid "Dimensions"
msgstr "Dimensions"
#: modules/process/bdep_synth.c:416 modules/process/col_synth.c:467
-#: modules/process/deposit_synth.c:422 modules/process/diff_synth.c:486
+#: modules/process/deposit_synth.c:425 modules/process/diff_synth.c:486
#: modules/process/domain_synth.c:438 modules/process/fbm_synth.c:371
-#: modules/process/fft_synth.c:409 modules/process/lno_synth.c:501
-#: modules/process/noise_synth.c:405 modules/process/obj_synth.c:509
-#: modules/process/pat_synth.c:454 modules/process/wave_synth.c:418
+#: modules/process/fft_synth.c:409 modules/process/fibre_synth.c:490
+#: modules/process/lno_synth.c:499 modules/process/mfm_current.c:412
+#: modules/process/mfm_parallel.c:411 modules/process/noise_synth.c:403
+#: modules/process/obj_synth.c:506 modules/process/pat_synth.c:454
+#: modules/process/phase_synth.c:274 modules/process/wave_synth.c:437
msgid "Generator"
msgstr "Générateur"
#: modules/process/bdep_synth.c:422 modules/process/col_synth.c:473
-#: modules/process/diff_synth.c:492 modules/process/lno_synth.c:1041
-#: modules/process/obj_synth.c:520
+#: modules/process/deposit_synth.c:455 modules/process/diff_synth.c:492
+#: modules/process/fibre_synth.c:502 modules/process/lno_synth.c:1041
+#: modules/process/obj_synth.c:518
msgid "Co_verage:"
msgstr "Cou_verture :"
#: modules/process/bdep_synth.c:434 modules/process/diff_synth.c:512
-#: modules/process/domain_synth.c:514 modules/process/fbm_synth.c:412
-#: modules/process/fft_synth.c:418 modules/process/lat_synth.c:758
-#: modules/process/lno_synth.c:537 modules/process/noise_synth.c:437
-#: modules/process/obj_synth.c:579 modules/process/wave_synth.c:453
-msgid "_Like Current Channel"
-msgstr "Identique au canal courant"
-
-#: modules/process/bdep_synth.c:453 modules/process/col_synth.c:541
-#: modules/process/diff_synth.c:562
+#: modules/process/domain_synth.c:514 modules/process/fbm_synth.c:411
+#: modules/process/fft_synth.c:418 modules/process/fibre_synth.c:544
+#: modules/process/lat_synth.c:758 modules/process/lno_synth.c:535
+#: modules/process/noise_synth.c:435 modules/process/obj_synth.c:577
+#: modules/process/phase_synth.c:302 modules/process/wave_synth.c:472
+msgid "_Like Current Image"
+msgstr "Comme _l'image courante"
+
+#: modules/process/bdep_synth.c:453 modules/process/col_synth.c:542
+#: modules/process/diff_synth.c:561
msgid "Evolution"
msgstr "Évolution"
-#: modules/process/bdep_synth.c:456 modules/process/col_synth.c:544
-#: modules/process/diff_synth.c:565
+#: modules/process/bdep_synth.c:456 modules/process/col_synth.c:545
+#: modules/process/diff_synth.c:564
msgid "Plot graphs:"
msgstr "Afficher les graphes :"
-#: modules/process/bdep_synth.c:654 modules/process/col_synth.c:840
-#: modules/process/diff_synth.c:782
+#: modules/process/bdep_synth.c:654 modules/process/col_synth.c:841
+#: modules/process/diff_synth.c:781
msgid "Depositing particles..."
msgstr "Dépôt des particules en cours..."
@@ -7771,8 +8055,8 @@ msgstr "Charger des données de calibration"
msgid "Calibration name:"
msgstr "Nom de la calibration :"
-#: modules/process/calcoefs_load.c:254 modules/volume/volume_extract.c:433
-#: modules/volume/volume_extract.c:514
+#: modules/process/calcoefs_load.c:254 modules/volume/volume_extract.c:421
+#: modules/volume/volume_extract.c:501
msgid "No data loaded"
msgstr "Aucunes données chargées"
@@ -7796,7 +8080,7 @@ msgstr "Ajouter"
msgid "Load calibration data"
msgstr "Charger des données de calibration"
-#: modules/process/calcoefs_load.c:364 modules/volume/volume_extract.c:1073
+#: modules/process/calcoefs_load.c:364 modules/volume/volume_extract.c:1059
#, c-format
msgid "Error loading file '%s'"
msgstr "Erreur lors du chargement du fichier '%s'"
@@ -7890,7 +8174,7 @@ msgstr "Cartographie d'erreur basique"
msgid "Simple Error Map"
msgstr "Carte d'erreur basique"
-#: modules/process/calcoefs_simple.c:343 modules/process/calcoefs_stage.c:146
+#: modules/process/calcoefs_simple.c:343 modules/process/calcoefs_stage.c:142
#: modules/process/superresolution.c:156
msgid "Operands:"
msgstr "Opérandes :"
@@ -7904,14 +8188,14 @@ msgid "Detail"
msgstr "Détail"
#: modules/process/calcoefs_simple.c:371 modules/process/calcoefs_view.c:491
-#: modules/process/calibrate.c:496 modules/process/crosscor.c:289
-#: modules/volume/volume_calibrate.c:478
+#: modules/process/calibrate.c:481 modules/process/crosscor.c:276
+#: modules/volume/volume_calibrate.c:460
msgid "_X offset:"
msgstr "Décalage _X :"
#: modules/process/calcoefs_simple.c:398 modules/process/calcoefs_view.c:517
-#: modules/process/calibrate.c:509 modules/process/crosscor.c:300
-#: modules/volume/volume_calibrate.c:491
+#: modules/process/calibrate.c:488 modules/process/crosscor.c:284
+#: modules/volume/volume_calibrate.c:467
msgid "_Y offset:"
msgstr "Décalage _Y :"
@@ -7924,7 +8208,7 @@ msgid "Y p_eriod:"
msgstr "P_ériode Y :"
#: modules/process/calcoefs_simple.c:438 modules/process/calcoefs_view.c:529
-#: modules/volume/volume_calibrate.c:505
+#: modules/volume/volume_calibrate.c:474
msgid "_Z offset:"
msgstr "Décalage _Z :"
@@ -7955,26 +8239,26 @@ msgstr[1] "%d objets ont été trouvés"
msgid "Search canceled"
msgstr "Recherche annulée"
-#: modules/process/calcoefs_simple.c:638 modules/process/crosscor.c:862
-#: modules/process/maskcor.c:332 modules/process/mcrop.c:317
+#: modules/process/calcoefs_simple.c:638 modules/process/crosscor.c:835
+#: modules/process/maskcor.c:336 modules/process/mcrop.c:316
#: modules/process/merge.c:1074
msgid "Correlating..."
msgstr "Corrélation..."
-#: modules/process/calcoefs_stage.c:76
+#: modules/process/calcoefs_stage.c:72
msgid "Digital AFM data recalibration"
msgstr "Recalibration numérique des données AFM"
-#: modules/process/calcoefs_stage.c:90
+#: modules/process/calcoefs_stage.c:86
msgid "/Cali_bration/_3D Calibration/_Get From Stage map..."
msgstr ""
"/Cali_bration/Calibration _3D/À partir de la carte d'erreur de platine..."
-#: modules/process/calcoefs_stage.c:94
+#: modules/process/calcoefs_stage.c:90
msgid "Stage error mapping"
msgstr "Cartographie d'erreur de platine"
-#: modules/process/calcoefs_stage.c:131
+#: modules/process/calcoefs_stage.c:127
msgid "Stage Error Map"
msgstr "Carte d'erreur de platine"
@@ -8030,14 +8314,16 @@ msgstr "Position Z :"
msgid "Crop to actual data"
msgstr "Rogner aux données réelles"
-#: modules/process/calcoefs_view.c:567 modules/process/coerce.c:369
-#: modules/process/deposit_synth.c:641 modules/process/edge.c:705
-#: modules/process/fft_filter_1d.c:299 modules/process/grain_edge.c:290
-#: modules/process/grain_filter.c:347 modules/process/grain_mark.c:372
-#: modules/process/mark_with.c:318 modules/process/polydistort.c:316
-#: modules/process/scars.c:386 modules/process/slope_dist.c:407
-#: modules/process/synth.h:513 modules/volume/volume_extract.c:424
-#: modules/volume/volume_extract.c:505 modules/volume/volume_linestat.c:422
+#: modules/process/calcoefs_view.c:567 modules/process/coerce.c:368
+#: modules/process/deposit_synth.c:642 modules/process/edge.c:705
+#: modules/process/fft_filter_1d.c:301 modules/process/grain_edge.c:277
+#: modules/process/grain_filter.c:346 modules/process/grain_mark.c:357
+#: modules/process/mark_with.c:322 modules/process/mfm_field.c:420
+#: modules/process/mfm_shift.c:216 modules/process/polydistort.c:319
+#: modules/process/psf.c:309 modules/process/scars.c:421
+#: modules/process/slope_dist.c:400 modules/process/synth.h:542
+#: modules/volume/volume_extract.c:411 modules/volume/volume_extract.c:491
+#: modules/volume/volume_linestat.c:427
msgid "I_nstant updates"
msgstr "Mise à jour instantanée"
@@ -8078,27 +8364,27 @@ msgstr "Erreur : en dehors de la plage"
msgid "Building mesh..."
msgstr "Maillage en cours..."
-#: modules/process/calcoefs_view.c:1120 modules/tools/profile.c:1818
+#: modules/process/calcoefs_view.c:1120 modules/tools/profile.c:1867
msgid "X correction"
msgstr "Correction X"
-#: modules/process/calcoefs_view.c:1121 modules/tools/profile.c:1819
+#: modules/process/calcoefs_view.c:1121 modules/tools/profile.c:1868
msgid "Y correction"
msgstr "Correction Y"
-#: modules/process/calcoefs_view.c:1122 modules/tools/profile.c:1820
+#: modules/process/calcoefs_view.c:1122 modules/tools/profile.c:1869
msgid "Z correction"
msgstr "Correction Z"
-#: modules/process/calcoefs_view.c:1123 modules/tools/profile.c:1821
+#: modules/process/calcoefs_view.c:1123 modules/tools/profile.c:1870
msgid "X uncertainty"
msgstr "Incertitude X"
-#: modules/process/calcoefs_view.c:1124 modules/tools/profile.c:1822
+#: modules/process/calcoefs_view.c:1124 modules/tools/profile.c:1871
msgid "Y uncertainty"
msgstr "Incertitude Y"
-#: modules/process/calcoefs_view.c:1125 modules/tools/profile.c:1823
+#: modules/process/calcoefs_view.c:1125 modules/tools/profile.c:1872
msgid "Z uncertainty"
msgstr "Incertitude X"
@@ -8126,78 +8412,78 @@ msgstr "S'accrocher aux plans"
msgid "Delaunay"
msgstr "Delaunay"
-#: modules/process/calibrate.c:180
+#: modules/process/calibrate.c:172
msgid "Recalibrates scan lateral dimensions or value range."
msgstr "Recalibre les dimensions latérales ou l'échelle des valeurs."
-#: modules/process/calibrate.c:194
+#: modules/process/calibrate.c:186
msgid "/_Basic Operations/_Dimensions and Units..."
msgstr "/Opérations _basiques/_Dimensions et unités..."
-#: modules/process/calibrate.c:198 modules/volume/volume_calibrate.c:193
+#: modules/process/calibrate.c:190 modules/volume/volume_calibrate.c:193
msgid "Change physical dimensions, units or value scale"
msgstr "Modifie les dimensions latérales, les unités ou l'échelle"
-#: modules/process/calibrate.c:357 modules/volume/volume_calibrate.c:355
+#: modules/process/calibrate.c:349 modules/volume/volume_calibrate.c:355
msgid "Recalibrated Data"
msgstr "Données recalibrées"
-#: modules/process/calibrate.c:390
+#: modules/process/calibrate.c:382
msgid "Dimensions and Units"
msgstr "Dimensions et unités"
-#: modules/process/calibrate.c:411 modules/volume/volume_calibrate.c:389
+#: modules/process/calibrate.c:405 modules/volume/volume_calibrate.c:391
msgid "New Real Dimensions"
msgstr "Nouvelles dimensions réelles"
-#: modules/process/calibrate.c:417
+#: modules/process/calibrate.c:415
msgid "_Match pixel size:"
msgstr "Faire correspondre la taille des pixels :"
-#: modules/process/calibrate.c:444 modules/volume/volume_calibrate.c:394
+#: modules/process/calibrate.c:447 modules/volume/volume_calibrate.c:397
msgid "_X range:"
msgstr "Largeur _X :"
-#: modules/process/calibrate.c:473 modules/volume/volume_calibrate.c:421
+#: modules/process/calibrate.c:467 modules/volume/volume_calibrate.c:417
msgid "_Y range:"
msgstr "Hauteur _Y :"
-#: modules/process/calibrate.c:489
+#: modules/process/calibrate.c:472
msgid "_Square samples"
msgstr "Échantillons carrés"
-#: modules/process/calibrate.c:524 modules/volume/volume_calibrate.c:521
+#: modules/process/calibrate.c:496 modules/volume/volume_calibrate.c:480
msgid "Value Range"
msgstr "Plage de valeurs"
-#: modules/process/calibrate.c:529 modules/volume/volume_calibrate.c:448
+#: modules/process/calibrate.c:502 modules/volume/volume_calibrate.c:437
msgid "_Z range:"
msgstr "Plage _Z : "
-#: modules/process/calibrate.c:558
+#: modules/process/calibrate.c:524
msgid "Z shi_ft:"
msgstr "Décalage Z :"
-#: modules/process/calibrate.c:573 modules/volume/volume_calibrate.c:570
+#: modules/process/calibrate.c:533 modules/volume/volume_calibrate.c:515
msgid "Calibration Coefficients"
msgstr "Coefficients de calibration"
-#: modules/process/calibrate.c:580 modules/volume/volume_calibrate.c:577
+#: modules/process/calibrate.c:538 modules/volume/volume_calibrate.c:520
msgid "_X calibration factor:"
msgstr "Facteur de calibration _X :"
-#: modules/process/calibrate.c:590 modules/volume/volume_calibrate.c:585
+#: modules/process/calibrate.c:545 modules/volume/volume_calibrate.c:527
msgid "_Y calibration factor:"
msgstr "Facteur de calibration _Y :"
-#: modules/process/calibrate.c:600 modules/volume/volume_calibrate.c:593
+#: modules/process/calibrate.c:552 modules/volume/volume_calibrate.c:534
msgid "_Z calibration factor:"
msgstr "Facteur de calibration _Z :"
-#: modules/process/calibrate.c:613 modules/process/extend.c:293
-#: modules/tools/crop.c:213
-msgid "Create new channel"
-msgstr "Créer un nouveau canal"
+#: modules/process/calibrate.c:567 modules/process/drift.c:389
+#: modules/process/extend.c:293 modules/tools/crop.c:213
+msgid "Create new image"
+msgstr "Créer une nouvelle image"
#: modules/process/coerce.c:159
msgid "Transforms surfaces to have prescribed statistical properties."
@@ -8218,13 +8504,13 @@ msgid "Coerced"
msgstr "Forcées"
#: modules/process/coerce.c:225 modules/process/coerce.c:326
-#: modules/process/fbm_synth.c:475 modules/process/lno_synth.c:256
-#: modules/process/noise_synth.c:183
+#: modules/process/fbm_synth.c:474 modules/process/lno_synth.c:254
+#: modules/process/noise_synth.c:181
msgid "distribution|Uniform"
msgstr "Uniforme"
-#: modules/process/coerce.c:226 modules/process/fbm_synth.c:476
-#: modules/process/lno_synth.c:246 modules/process/noise_synth.c:173
+#: modules/process/coerce.c:226 modules/process/fbm_synth.c:475
+#: modules/process/lno_synth.c:244 modules/process/noise_synth.c:171
msgid "distribution|Gaussian"
msgstr "Gaussienne"
@@ -8273,12 +8559,12 @@ msgid "Number of maxima"
msgstr "Nombre de maxima :"
#: modules/process/col_synth.c:173 modules/tools/linestats.c:178
-#: modules/volume/volume_linestat.c:154
+#: modules/volume/volume_linestat.c:156
msgid "Skew"
msgstr "Asymétrie"
#: modules/process/col_synth.c:174 modules/tools/linestats.c:179
-#: modules/tools/roughness.c:386 modules/volume/volume_linestat.c:155
+#: modules/tools/roughness.c:387 modules/volume/volume_linestat.c:157
msgid "Kurtosis"
msgstr "Kurtosis"
@@ -8293,8 +8579,8 @@ msgstr ""
"simple."
#: modules/process/col_synth.c:208
-msgid "/S_ynthetic/_Columnar..."
-msgstr "/S_ynthèse/_Croissance colonnaire..."
+msgid "/S_ynthetic/_Deposition/_Columnar..."
+msgstr "/S_ynthèse/_Dépôt/_Croissance colonnaire..."
#: modules/process/col_synth.c:212
msgid "Generate columnar surface"
@@ -8316,7 +8602,7 @@ msgstr "Incidence"
msgid "Inclination"
msgstr "Inclinaison"
-#: modules/process/col_synth.c:509 modules/process/crosscor.c:1063
+#: modules/process/col_synth.c:509 modules/process/crosscor.c:1036
msgid "Direction"
msgstr "Direction"
@@ -8324,15 +8610,15 @@ msgstr "Direction"
msgid "Relaxation type:"
msgstr "Type de relaxation :"
-#: modules/process/col_synth.c:528
+#: modules/process/col_synth.c:529
msgid "_Melting:"
msgstr "Fusion :"
-#: modules/process/col_synth.c:612
+#: modules/process/col_synth.c:613
msgid "Weak"
msgstr "Faible"
-#: modules/process/col_synth.c:613
+#: modules/process/col_synth.c:614
msgid "Strong"
msgstr "Forte"
@@ -8364,8 +8650,8 @@ msgstr "Filtre de convolution "
msgid "Convolution Filter"
msgstr "Filtre de convolution"
-#: modules/process/convolution_filter.c:269 modules/tools/filter.c:170
-#: modules/tools/filter.c:274
+#: modules/process/convolution_filter.c:269 modules/tools/filter.c:171
+#: modules/tools/filter.c:275
msgid "Filter"
msgstr "Filtre"
@@ -8393,7 +8679,7 @@ msgstr "Symétrie horizontale"
msgid "VSym"
msgstr "Symétrie verticale"
-#: modules/process/correct_affine.c:231
+#: modules/process/correct_affine.c:220
msgid ""
"Corrects affine distortion of images by matching image Bravais lattice to "
"the true one."
@@ -8401,101 +8687,109 @@ msgstr ""
"Corrige la distorsion affine des images en ajustant la matrice de Bravais "
"sur la matrice réelle."
-#: modules/process/correct_affine.c:246
+#: modules/process/correct_affine.c:235
msgid "/_Distortion/_Affine..."
msgstr "/_Distorsion/_Affine..."
-#: modules/process/correct_affine.c:250
+#: modules/process/correct_affine.c:239
msgid "Correct affine distortion"
msgstr "Corriger la distorsion affine"
-#: modules/process/correct_affine.c:298
+#: modules/process/correct_affine.c:309 modules/process/correct_affine.c:634
+msgid "Corrected"
+msgstr "Corrigé"
+
+#: modules/process/correct_affine.c:343
msgid "Affine Correction"
msgstr "Correction affine"
-#: modules/process/correct_affine.c:351 modules/process/fft_filter_2d.c:530
+#: modules/process/correct_affine.c:349 modules/process/measure_lattice.c:249
+msgid "_Refine"
+msgstr "Affine_r"
+
+#: modules/process/correct_affine.c:399 modules/process/fft_filter_2d.c:530
msgid "Preview Options"
msgstr "Option d'aperçu"
-#: modules/process/correct_affine.c:356 modules/process/fft_filter_2d.c:535
-#: modules/process/measure_lattice.c:321
+#: modules/process/correct_affine.c:404 modules/process/fft_filter_2d.c:535
+#: modules/process/measure_lattice.c:311
msgid "Display:"
msgstr "Affichage :"
-#: modules/process/correct_affine.c:364 modules/process/measure_lattice.c:329
+#: modules/process/correct_affine.c:412 modules/process/measure_lattice.c:319
#: modules/tools/grainremover.c:109
msgid "_Data"
msgstr "_Données"
-#: modules/process/correct_affine.c:365
+#: modules/process/correct_affine.c:413
msgid "2D _ACF"
msgstr "_ACF 2D"
-#: modules/process/correct_affine.c:366 modules/process/drift.c:365
+#: modules/process/correct_affine.c:414 modules/process/drift.c:364
msgid "Correc_ted data"
msgstr "Données corrigées"
-#: modules/process/correct_affine.c:377
+#: modules/process/correct_affine.c:425
msgid "ACF zoom:"
msgstr "Zoom ACF : "
-#: modules/process/correct_affine.c:394 modules/process/measure_lattice.c:372
+#: modules/process/correct_affine.c:442 modules/process/measure_lattice.c:346
+msgid "Interpolate _horizontal ACF"
+msgstr "Interpoler l'ACF _horizontale"
+
+#: modules/process/correct_affine.c:452 modules/process/measure_lattice.c:372
msgid "Lattice Vectors"
msgstr "Vecteurs de base"
#. TRANSLATORS: Correct is an adjective here.
-#: modules/process/correct_affine.c:419
+#: modules/process/correct_affine.c:469
msgid "Correct Lattice"
msgstr "Corriger la matrice"
-#: modules/process/correct_affine.c:423
+#: modules/process/correct_affine.c:473
msgid "_Lattice type:"
msgstr "Type de matrice :"
-#: modules/process/correct_affine.c:430
+#: modules/process/correct_affine.c:480
msgid "User defined"
msgstr "Défini par l'utilisateur"
-#: modules/process/correct_affine.c:445
+#: modules/process/correct_affine.c:495
msgid "_Different lengths"
msgstr "Longueurs _différentes"
-#: modules/process/correct_affine.c:474
+#: modules/process/correct_affine.c:524
msgid "Image for _ACF:"
msgstr "Image pour l'_ACF : "
-#: modules/process/correct_affine.c:501
+#: modules/process/correct_affine.c:551
msgid "_Scaling:"
msgstr "Échelle :"
-#: modules/process/correct_affine.c:508
+#: modules/process/correct_affine.c:558
msgid "Exactly as specified"
msgstr "Tel que spécifié"
-#: modules/process/correct_affine.c:509
+#: modules/process/correct_affine.c:560
msgid "Preserve area"
msgstr "Conserver l'aire"
-#: modules/process/correct_affine.c:510
+#: modules/process/correct_affine.c:562
msgid "Preserve X scale"
msgstr "Conserver l'échelle X"
-#: modules/process/correct_affine.c:561
-msgid "Corrected"
-msgstr "Corrigé"
+#: modules/process/correct_affine.c:571 modules/process/drift.c:379
+msgid "_Apply to all compatible images"
+msgstr "_Appliquer à toutes les images compatibles"
-#: modules/process/correct_affine.c:617 modules/process/measure_lattice.c:489
+#: modules/process/correct_affine.c:693 modules/process/measure_lattice.c:482
msgid "length"
msgstr "longueur"
-#: modules/process/correct_affine.c:624 modules/process/measure_lattice.c:496
+#: modules/process/correct_affine.c:700 modules/process/measure_lattice.c:489
msgid "angle"
msgstr "angle"
-#: modules/process/correct_affine.c:717
-msgid "Re_fine"
-msgstr "A_ffiner"
-
#: modules/process/crosscor.c:157
msgid "Calculates cross-correlation of two data fields."
msgstr "Calcule la corrélation croisée de 2 champs de données."
@@ -8520,150 +8814,152 @@ msgstr "Corréler avec :"
msgid "Search size"
msgstr "Dimensions de recherche"
-#: modules/process/crosscor.c:272
-msgid "Global offset of 2nd channel"
-msgstr "Décalage global du second canal"
-
-#: modules/process/crosscor.c:277
+#: modules/process/crosscor.c:267
msgid "_Guess"
msgstr "Deviner"
-#: modules/process/crosscor.c:311
+#: modules/process/crosscor.c:268
+msgid "Global offset of 2nd channel"
+msgstr "Décalage global du second canal"
+
+#: modules/process/crosscor.c:292
msgid "Window size"
msgstr "Taille de la fenêtre"
-#: modules/process/crosscor.c:319
+#: modules/process/crosscor.c:300
msgid "W_idth:"
msgstr "Largeur :"
-#: modules/process/crosscor.c:329
+#: modules/process/crosscor.c:308
msgid "Hei_ght:"
msgstr "Hauteur :"
-#: modules/process/crosscor.c:342 modules/process/fft.c:405
+#: modules/process/crosscor.c:319 modules/process/fft.c:403
#: modules/process/psdf_logphi.c:268
msgid "_Windowing type:"
msgstr "Type de fenêtre d'apodisation :"
-#: modules/process/crosscor.c:350
+#: modules/process/crosscor.c:327
msgid "All"
msgstr "Tout"
-#: modules/process/crosscor.c:351
+#: modules/process/crosscor.c:328
msgid "Absolute"
msgstr "Absolu"
-#: modules/process/crosscor.c:352
+#: modules/process/crosscor.c:329
msgid "X Distance"
msgstr "Distance X"
-#: modules/process/crosscor.c:353
+#: modules/process/crosscor.c:330
msgid "Y Distance"
msgstr "Distance Y"
-#: modules/process/crosscor.c:355 modules/process/crosscor.c:1077
+#: modules/process/crosscor.c:332 modules/process/crosscor.c:1050
msgid "Score"
msgstr "Score"
-#: modules/process/crosscor.c:357 modules/process/fft.c:395
-#: modules/process/fit-shape.c:688 modules/process/maskcor.c:176
+#: modules/process/crosscor.c:334 modules/process/fft.c:393
+#: modules/process/fit-shape.c:699 modules/process/maskcor.c:177
+#: modules/process/mfm_current.c:455 modules/process/mfm_field.c:373
+#: modules/process/mfm_parallel.c:466
msgid "Output _type:"
msgstr "_Type de sortie :"
-#: modules/process/crosscor.c:363
+#: modules/process/crosscor.c:340
msgid "Add _low score results mask"
msgstr "Ajouter un masque de corré_lation basse"
-#: modules/process/crosscor.c:374 modules/process/grain_wshed.c:223
-#: modules/process/maskcor.c:188
+#: modules/process/crosscor.c:351 modules/process/grain_wshed.c:225
+#: modules/process/maskcor.c:191
msgid "T_hreshold:"
msgstr "Seuil :"
-#: modules/process/crosscor.c:381
+#: modules/process/crosscor.c:359
msgid "Multichannel cross-corelation"
msgstr "Corrélation croisée multi-canaux"
-#: modules/process/crosscor.c:400
+#: modules/process/crosscor.c:378
msgid "Second _source data:"
msgstr "Seconde _source de données :"
-#: modules/process/crosscor.c:417
+#: modules/process/crosscor.c:394
msgid "Correlate with:"
msgstr "Corréler avec :"
-#: modules/process/crosscor.c:424
+#: modules/process/crosscor.c:402
msgid "Postprocess:"
msgstr "Post-traitement :"
-#: modules/process/crosscor.c:431
-msgid "Apply Ga_ussian filter of width: "
-msgstr "Appliquer un filtre gaussien de largeur :"
+#: modules/process/crosscor.c:411
+msgid "Apply Ga_ussian filter of width:"
+msgstr "Appliquer _un filtre gaussien de largeur :"
-#: modules/process/crosscor.c:451
+#: modules/process/crosscor.c:424
msgid "Extend results to borders"
msgstr "Étendre les résultats vers les bords"
-#: modules/process/crosscor.c:461
+#: modules/process/crosscor.c:433
msgid "Create corrected data from 2nd channel"
msgstr "Créer des données corrigées à partir du second canal"
-#: modules/process/crosscor.c:860
+#: modules/process/crosscor.c:833
msgid "Correlating first set..."
msgstr "Corrélation du premier jeu..."
-#: modules/process/crosscor.c:892
+#: modules/process/crosscor.c:865
msgid "Correlating second set..."
msgstr "Corrélation du second jeu..."
-#: modules/process/crosscor.c:999
+#: modules/process/crosscor.c:972
msgid "Corrected 2nd channel"
msgstr "Second canal corrigé"
-#: modules/process/crosscor.c:1023
+#: modules/process/crosscor.c:996
msgid "X difference"
msgstr "Différence X"
-#: modules/process/crosscor.c:1037
+#: modules/process/crosscor.c:1010
msgid "Y difference"
msgstr "Différence Y"
-#: modules/process/crosscor.c:1050
+#: modules/process/crosscor.c:1023
msgid "Absolute difference"
msgstr "Différence absolue"
-#: modules/process/curvature.c:131
+#: modules/process/curvature.c:130
msgid "Center value"
msgstr "Valeur centrale"
-#: modules/process/curvature.c:132
+#: modules/process/curvature.c:131
msgid "Curvature radius 1"
msgstr "Rayon de courbure 1"
-#: modules/process/curvature.c:133
+#: modules/process/curvature.c:132
msgid "Curvature radius 2"
msgstr "Rayon de courbure 2"
-#: modules/process/curvature.c:134
+#: modules/process/curvature.c:133
msgid "Direction 1"
msgstr "Direction 1"
-#: modules/process/curvature.c:135
+#: modules/process/curvature.c:134
msgid "Direction 2"
msgstr "Direction 2"
-#: modules/process/curvature.c:163
+#: modules/process/curvature.c:162
msgid "Calculates overall curvature."
msgstr "Calcule la courbure globale."
-#: modules/process/curvature.c:177
+#: modules/process/curvature.c:176
msgid "/_Level/_Curvature..."
msgstr "/Niveau/_Courbure..."
-#: modules/process/curvature.c:181
+#: modules/process/curvature.c:180
msgid "Calculate overall curvature"
msgstr "Calculer la courbure globale"
-#: modules/process/curvature.c:211 modules/process/facet-level.c:118
+#: modules/process/curvature.c:210 modules/process/facet-level.c:118
#: modules/process/semsim.c:165
#, c-format
msgid "%s: Lateral dimensions and value must be the same physical quantity."
@@ -8671,49 +8967,49 @@ msgstr ""
"%s : les dimensions latérales et les valeurs doivent être les mêmes "
"quantités physiques."
-#: modules/process/curvature.c:445
+#: modules/process/curvature.c:447
msgid "Curvature Sections"
msgstr "Sections de courbure"
-#: modules/process/curvature.c:653
+#: modules/process/curvature.c:655
msgid "Output Type"
msgstr "Type de sortie"
-#: modules/process/curvature.c:660
+#: modules/process/curvature.c:662
msgid "_Set selection"
msgstr "Définir la _sélection"
-#: modules/process/curvature.c:670
+#: modules/process/curvature.c:672
msgid "_Plot graph"
msgstr "Afficher le graphe"
-#: modules/process/curvature.c:685 modules/process/drift.c:337
-#: modules/process/fft_profile.c:310 modules/process/fractal.c:328
-#: modules/process/grain_cross.c:253 modules/process/linematch.c:885
-#: modules/process/slope_dist.c:349 modules/tools/linestats.c:418
-#: modules/tools/profile.c:573 modules/tools/roughness.c:872
-#: modules/tools/sfunctions.c:486 modules/tools/spectro.c:382
-#: modules/volume/volume_slice.c:398
-msgid "Target _graph:"
-msgstr "_Graphe cible :"
-
-#: modules/process/curvature.c:691 modules/process/drift.c:343
-#: modules/process/fft_profile.c:316 modules/process/fractal.c:334
-#: modules/process/grain_cross.c:259 modules/process/linematch.c:892
-#: modules/process/slope_dist.c:355 modules/tools/linestats.c:424
-#: modules/tools/profile.c:579 modules/tools/roughness.c:878
-#: modules/tools/sfunctions.c:492 modules/tools/spectro.c:388
-#: modules/volume/volume_slice.c:406
+#: modules/process/curvature.c:684 modules/process/drift.c:340
+#: modules/process/fft_profile.c:300 modules/process/fractal.c:308
+#: modules/process/grain_cross.c:260 modules/process/linematch.c:855
+#: modules/process/slope_dist.c:347 modules/tools/linestats.c:424
+#: modules/tools/profile.c:559 modules/tools/roughness.c:886
+#: modules/tools/sfunctions.c:488 modules/tools/spectro.c:391
+#: modules/volume/volume_slice.c:408
msgid "New graph"
msgstr "Nouveau graphe"
-#: modules/process/curvature.c:951
+#: modules/process/curvature.c:689 modules/process/drift.c:345
+#: modules/process/fft_profile.c:306 modules/process/fractal.c:313
+#: modules/process/grain_cross.c:254 modules/process/linematch.c:860
+#: modules/process/slope_dist.c:352 modules/tools/linestats.c:418
+#: modules/tools/profile.c:563 modules/tools/roughness.c:890
+#: modules/tools/sfunctions.c:492 modules/tools/spectro.c:385
+#: modules/volume/volume_slice.c:400
+msgid "Target _graph:"
+msgstr "_Graphe cible :"
+
+#: modules/process/curvature.c:949
msgid "Axes are outside the image."
msgstr "Les axes sont en-dehors de l'image."
-#: modules/process/curvature.c:1018
+#: modules/process/curvature.c:1016
msgid "Save Curvature"
-msgstr "Sauver la courbure"
+msgstr "Enregistrer la courbure"
#: modules/process/cwt.c:66
msgid "Two-dimensional CWT (Continuous Wavelet Transform)."
@@ -8735,8 +9031,8 @@ msgstr "Transformée en ondelettes continue (CWT)"
msgid "2D CWT"
msgstr "Transformée en ondelettes continue 2D (2D CWT)"
-#: modules/process/cwt.c:158 modules/process/dwt.c:185
-#: modules/process/dwtanisotropy.c:209
+#: modules/process/cwt.c:159 modules/process/dwt.c:185
+#: modules/process/dwtanisotropy.c:212
msgid "_Wavelet type:"
msgstr "Type d'ondelette :"
@@ -8745,14 +9041,14 @@ msgid "Generates particles using simple dynamical model"
msgstr "Génère des particules à l'aide d'un modèle dynamique simple"
#: modules/process/deposit_synth.c:184
-msgid "/S_ynthetic/_Particles..."
-msgstr "/S_ynthèse/_Particules..."
+msgid "/S_ynthetic/_Deposition/_Particles..."
+msgstr "/S_ynthèse/_Dépôt/_Particules..."
#: modules/process/deposit_synth.c:188
msgid "Generate particles using dynamical model"
msgstr "Générer des particules à l'aide d'un modèle dynamique"
-#: modules/process/deposit_synth.c:288 modules/process/deposit_synth.c:867
+#: modules/process/deposit_synth.c:288 modules/process/deposit_synth.c:866
#, c-format
msgid ""
"Not all the particles could be deposited (%u),\n"
@@ -8761,73 +9057,69 @@ msgstr ""
"Toutes les particules n'ont pu être déposées (%u), \n"
" essayez plus d'étapes de révision."
-#: modules/process/deposit_synth.c:347
+#: modules/process/deposit_synth.c:348
msgid "Particle Generation"
msgstr "Génération de particules"
-#: modules/process/deposit_synth.c:427
+#: modules/process/deposit_synth.c:431
msgid "Particle r_adius:"
msgstr "_Rayon des particules :"
-#: modules/process/deposit_synth.c:438
+#: modules/process/deposit_synth.c:443
msgid "Distribution _width:"
msgstr "Largeur de distribution :"
-#: modules/process/deposit_synth.c:449
-msgid "Surface _coverage:"
-msgstr "Taux de _couverture :"
-
-#: modules/process/deposit_synth.c:458
+#: modules/process/deposit_synth.c:462
msgid "_Relax steps:"
msgstr "Étapes de _relaxation :"
-#: modules/process/deposit_synth.c:659 modules/process/synth.h:548
+#: modules/process/deposit_synth.c:660 modules/process/synth.h:577
msgid "R_andom seed:"
msgstr "Graine _aléatoire :"
-#: modules/process/deposit_synth.c:665 modules/process/synth.h:554
+#: modules/process/deposit_synth.c:666 modules/process/synth.h:583
msgid "seed|_New"
msgstr "_Nouvelle"
-#: modules/process/deposit_synth.c:676
+#: modules/process/deposit_synth.c:677
msgid "Randomize"
msgstr "Randomiser"
-#: modules/process/deposit_synth.c:860 modules/process/domain_synth.c:919
+#: modules/process/deposit_synth.c:859 modules/process/domain_synth.c:919
msgid "Running computation..."
msgstr "Calcul en cours..."
-#: modules/process/deposit_synth.c:865
+#: modules/process/deposit_synth.c:864
#, c-format
msgid "%d particles were deposited"
msgstr "%d particules ont été déposées."
-#: modules/process/deposit_synth.c:1093
+#: modules/process/deposit_synth.c:1092
msgid "Initial particle set..."
msgstr "Ensemble initial de particules..."
-#: modules/process/deposit_synth.c:1252
+#: modules/process/deposit_synth.c:1251
msgid "Running revise..."
msgstr "Révision en cours..."
-#: modules/process/deposit_synth.c:1380
+#: modules/process/deposit_synth.c:1379
msgid "Error: too many particles."
msgstr "Erreur : trop de particules."
-#: modules/process/deposit_synth.c:1382
+#: modules/process/deposit_synth.c:1381
msgid "Error: no particles."
msgstr "Erreur : aucune particule."
-#: modules/process/deposit_synth.c:1384
+#: modules/process/deposit_synth.c:1383
msgid "Error: particles too large."
msgstr "Erreur : les particules sont trop grandes."
-#: modules/process/deposit_synth.c:1386
+#: modules/process/deposit_synth.c:1385
msgid "Error: particles too small."
msgstr "Erreur : les particules sont trop petites."
#: modules/process/diff_synth.c:197 modules/tools/linestats.c:173
-#: modules/volume/volume_linestat.c:149
+#: modules/volume/volume_linestat.c:151
msgid "Variation"
msgstr "Variation"
@@ -8840,8 +9132,8 @@ msgid "Generates surfaces by diffusion limited aggregation."
msgstr "Génère des surfaces par agrégation limitée par diffusion."
#: modules/process/diff_synth.c:228
-msgid "/S_ynthetic/_Diffusion..."
-msgstr "/S_ynthèse/_Diffusion..."
+msgid "/S_ynthetic/_Deposition/_Diffusion..."
+msgstr "/S_ynthèse/_Dépôt/_Diffusion..."
#: modules/process/diff_synth.c:232
msgid "Generate surface by diffusion limited aggregation"
@@ -8855,45 +9147,45 @@ msgstr "Agrégation limitée par diffusion"
msgid "_Flux:"
msgstr "_Flux :"
-#: modules/process/diff_synth.c:522
+#: modules/process/diff_synth.c:521
msgid "Probabilities"
msgstr "Probabilités"
-#: modules/process/diff_synth.c:530
+#: modules/process/diff_synth.c:529
msgid "_Sticking:"
msgstr "Adhérence :"
-#: modules/process/diff_synth.c:539
+#: modules/process/diff_synth.c:538
msgid "_Activation:"
msgstr "_Activation :"
-#: modules/process/diff_synth.c:548
+#: modules/process/diff_synth.c:547
msgid "Passing Sch_woebel:"
msgstr "Barrière de Sch_woebel :"
-#: modules/process/dimensions.h:457
+#: modules/process/dimensions.h:439
msgid "S_quare image"
msgstr "Image carrée"
-#: modules/process/dimensions.h:489
+#: modules/process/dimensions.h:473
msgid "_Dimension units:"
msgstr "Unités de _dimensions :"
-#: modules/process/dimensions.h:502
-msgid "Current Channel"
-msgstr "Canal courant"
+#: modules/process/dimensions.h:488
+msgid "Current Image"
+msgstr "Image courante"
-#: modules/process/dimensions.h:506
-msgid "_Take Dimensions from Current Channel"
-msgstr "Prendre les dimensions à par_tir du canal courant"
+#: modules/process/dimensions.h:492
+msgid "_Take Dimensions from Current Image"
+msgstr "Prendre les dimensions à par_tir de l'image courante"
-#: modules/process/dimensions.h:514
-msgid "_Replace the current channel"
-msgstr "_Remplacer le canal courant"
+#: modules/process/dimensions.h:501
+msgid "_Replace the current image"
+msgstr "_Remplacer l'image courante"
-#: modules/process/dimensions.h:523
-msgid "_Start from the current channel"
-msgstr "Ajouter à partir du canal courant"
+#: modules/process/dimensions.h:510
+msgid "_Start from the current image"
+msgstr "Ajouter à partir de l'image courante"
#: modules/process/domain_synth.c:158
msgid "Discrete state"
@@ -8954,13 +9246,13 @@ msgid "_Monte Carlo time step:"
msgstr "Étape temporelle de Monte-Carlo :"
#: modules/process/domain_synth.c:504 modules/process/fft_filter_2d.c:586
-#: modules/volume/volume_slice.c:364
+#: modules/volume/volume_slice.c:366
msgid "Output Options"
msgstr "Options de sortie"
#: modules/process/domain_synth.c:523 modules/process/fft_filter_2d.c:591
-#: modules/process/mask_edt.c:377 modules/process/slope_dist.c:323
-#: modules/volume/volume_linestat.c:432 modules/volume/volume_slice.c:384
+#: modules/process/mask_edt.c:211 modules/process/slope_dist.c:323
+#: modules/volume/volume_linestat.c:437 modules/volume/volume_slice.c:386
msgid "Output type:"
msgstr "Type de sortie :"
@@ -8988,57 +9280,49 @@ msgstr "Plage de recherche :"
msgid "rows"
msgstr "lignes"
-#: modules/process/drift.c:304
+#: modules/process/drift.c:305
msgid "Correct _data"
msgstr "Corriger les _données"
-#: modules/process/drift.c:314
+#: modules/process/drift.c:315
msgid "_Exclude linear skew"
msgstr "_Exclure l'asymétrie linéaire"
-#: modules/process/drift.c:324
+#: modules/process/drift.c:325
msgid "Plot drift _graph"
msgstr "Afficher le graphe de dérive"
-#: modules/process/drift.c:356 modules/process/fit-shape.c:693
-#: modules/process/neural.c:548 modules/process/polydistort.c:275
+#: modules/process/drift.c:355 modules/process/fit-shape.c:705
+#: modules/process/neural.c:552 modules/process/polydistort.c:278
msgid "Preview:"
msgstr "Aperçu :"
-#: modules/process/drift.c:366
+#: modules/process/drift.c:365
msgid "Drift _lines"
msgstr "Lignes de dérive"
-#: modules/process/drift.c:374 modules/process/facet_analysis.c:407
-#: modules/process/grain_edge.c:285 modules/process/grain_filter.c:357
-#: modules/process/grain_mark.c:367 modules/process/grain_wshed.c:267
-#: modules/process/mark_disconn.c:310 modules/process/scars.c:381
+#: modules/process/drift.c:373 modules/process/facet_analysis.c:390
+#: modules/process/grain_edge.c:272 modules/process/grain_filter.c:356
+#: modules/process/grain_mark.c:341 modules/process/grain_wshed.c:271
+#: modules/process/mark_disconn.c:298 modules/process/scars.c:405
#: modules/process/wpour_mark.c:369
msgid "_Mask color:"
msgstr "Couleur de _masque :"
-#: modules/process/drift.c:379
-msgid "Distribute"
-msgstr "Distribuer"
-
-#: modules/process/drift.c:388
-msgid "Replace"
-msgstr "Remplacer"
-
-#: modules/process/drift.c:569
+#: modules/process/drift.c:570
msgid "Drift-corrected"
msgstr "Dérive corrigée"
-#: modules/process/drift.c:613
+#: modules/process/drift.c:614
msgid "Drift"
msgstr "Dérive"
-#: modules/process/drift.c:614 modules/xyz/xyz_drift.c:392
+#: modules/process/drift.c:615 modules/xyz/xyz_drift.c:392
#: modules/xyz/xyz_drift.c:411 modules/xyz/xyz_drift.c:430
msgid "drift"
msgstr "dérive"
-#: modules/process/drift.c:620 modules/xyz/xyz_drift.c:402
+#: modules/process/drift.c:621 modules/xyz/xyz_drift.c:402
msgid "x-axis drift"
msgstr "dérive selon l'axe x"
@@ -9096,11 +9380,11 @@ msgstr "Anisotropie DWT"
msgid "2D DWT Anisotropy"
msgstr "Anisotropie DWT 2D"
-#: modules/process/dwtanisotropy.c:214
+#: modules/process/dwtanisotropy.c:218
msgid "X/Y ratio threshold:"
msgstr "Seuil du ratio X/Y :"
-#: modules/process/dwtanisotropy.c:222
+#: modules/process/dwtanisotropy.c:226
msgid "Low level exclude limit:"
msgstr "Limite basse d'exclusion :"
@@ -9228,7 +9512,7 @@ msgstr "Détection de saut par coupure à zéro"
msgid "_Gaussian FWHM:"
msgstr "FWHM _gaussienne :"
-#: modules/process/edge.c:681 modules/process/mark_disconn.c:271
+#: modules/process/edge.c:681 modules/process/mark_disconn.c:272
msgid "_Threshold:"
msgstr "Seuil :"
@@ -9294,11 +9578,11 @@ msgstr "Entropie : "
msgid "Entropy deficit:"
msgstr "Déficit d'entropie : "
-#: modules/process/entropy.c:567
+#: modules/process/entropy.c:568
msgid "Entropy at scales"
msgstr "Entropie des échelles"
-#: modules/process/entropy.c:586
+#: modules/process/entropy.c:587
msgid "Best estimate"
msgstr "Meilleure estimation"
@@ -9346,23 +9630,23 @@ msgstr "D_roite :"
msgid "Extend _symetrically"
msgstr "Étendre de manière _symétrique"
-#: modules/process/extend.c:268 modules/process/polydistort.c:256
-#: modules/xyz/xyz_raster.c:658
+#: modules/process/extend.c:268 modules/process/polydistort.c:259
+#: modules/xyz/xyz_raster.c:627
msgid "exterior|Border"
msgstr "Bord"
-#: modules/process/extend.c:270 modules/process/polydistort.c:258
-#: modules/xyz/xyz_raster.c:660
+#: modules/process/extend.c:270 modules/process/polydistort.c:261
+#: modules/xyz/xyz_raster.c:629
msgid "exterior|Mirror"
msgstr "Miroir"
-#: modules/process/extend.c:272 modules/process/polydistort.c:260
-#: modules/xyz/xyz_raster.c:662
+#: modules/process/extend.c:272 modules/process/polydistort.c:263
+#: modules/xyz/xyz_raster.c:631
msgid "exterior|Periodic"
msgstr "Périodique"
-#: modules/process/extend.c:275 modules/process/polydistort.c:263
-#: modules/xyz/xyz_raster.c:650
+#: modules/process/extend.c:275 modules/process/polydistort.c:266
+#: modules/xyz/xyz_raster.c:619
msgid "_Exterior type:"
msgstr "Type d'_extérieur :"
@@ -9394,11 +9678,11 @@ msgstr "Nombre de points dans le chemin :"
msgid "There is no path selection."
msgstr "Il n'y a aucun chemin."
-#: modules/process/extract_path.c:189 modules/volume/volume_extract.c:390
+#: modules/process/extract_path.c:189 modules/volume/volume_extract.c:383
msgid "X position"
msgstr "Position X"
-#: modules/process/extract_path.c:193 modules/volume/volume_extract.c:397
+#: modules/process/extract_path.c:193 modules/volume/volume_extract.c:389
msgid "Y position"
msgstr "Position Y"
@@ -9411,7 +9695,7 @@ msgid "Y tangent"
msgstr "Tangente Y"
#: modules/process/extract_path.c:392 modules/process/extract_path.c:404
-#: modules/process/pat_synth.c:1432 modules/tools/distance.c:146
+#: modules/process/pat_synth.c:1433 modules/tools/distance.c:146
msgid "Distance"
msgstr "Distance"
@@ -9455,47 +9739,36 @@ msgstr "/_Statistiques/_Analyse des facettes..."
msgid "Mark areas by 2D slope"
msgstr "Marquer des zones selon la pente 2D"
-#: modules/process/facet_analysis.c:266
+#: modules/process/facet_analysis.c:270
msgid "Mark Facets"
msgstr "Marquer les facettes"
-#: modules/process/facet_analysis.c:269
+#: modules/process/facet_analysis.c:273
msgid "verb|_Mark"
msgstr "_Marquer"
#. TRANSLATORS: The direction or line orthogonal to something.
-#: modules/process/facet_analysis.c:325
+#: modules/process/facet_analysis.c:329
msgid "Normal"
msgstr "Normal"
-#: modules/process/facet_analysis.c:333
+#: modules/process/facet_analysis.c:337
msgid "_Find Maximum"
msgstr "Trouver le maximum"
-#: modules/process/facet_analysis.c:341
+#: modules/process/facet_analysis.c:345
msgid "Mean Normal"
msgstr "Normale moyenne"
-#: modules/process/facet_analysis.c:350
+#: modules/process/facet_analysis.c:362
msgid "Facet plane size:"
msgstr "Taille des facettes :"
-#: modules/process/facet_analysis.c:375
+#: modules/process/facet_analysis.c:370
msgid "_Tolerance:"
msgstr "_Tolérance :"
-#: modules/process/facet_analysis.c:384 modules/process/grain_edge.c:262
-#: modules/process/grain_mark.c:344 modules/process/mark_disconn.c:286
-msgid "Com_bine with existing mask"
-msgstr "Com_biner avec le masque existant"
-
-#: modules/process/facet_analysis.c:398 modules/process/grain_edge.c:276
-#: modules/process/grain_mark.c:358 modules/process/mark_disconn.c:301
-#: modules/process/mark_with.c:230 modules/process/mask_morph.c:210
-msgid "Operation:"
-msgstr "Opération :"
-
-#: modules/process/facet_analysis.c:415
+#: modules/process/facet_analysis.c:398
msgid ""
"Warning: Lateral and value units differ. Angles are not physically "
"meaningful."
@@ -9527,8 +9800,8 @@ msgstr "Exposant de _Hurst :"
msgid "_Stationarity scale:"
msgstr "Échelle de _stationnarité :"
-#: modules/process/fbm_synth.c:390 modules/process/lno_synth.c:509
-#: modules/process/noise_synth.c:409
+#: modules/process/fbm_synth.c:390 modules/process/lno_synth.c:507
+#: modules/process/noise_synth.c:407
msgid "_Distribution:"
msgstr "_Distribution : "
@@ -9536,17 +9809,17 @@ msgstr "_Distribution : "
msgid "Po_wer:"
msgstr "Puissance :"
-#: modules/process/fbm_synth.c:408 modules/process/fft_synth.c:414
-#: modules/process/lno_synth.c:533 modules/process/noise_synth.c:433
+#: modules/process/fbm_synth.c:407 modules/process/fft_synth.c:414
+#: modules/process/lno_synth.c:531 modules/process/noise_synth.c:431
msgid "_RMS:"
msgstr "_RMS :"
-#: modules/process/fbm_synth.c:477 modules/process/lno_synth.c:251
-#: modules/process/noise_synth.c:178
+#: modules/process/fbm_synth.c:476 modules/process/lno_synth.c:249
+#: modules/process/noise_synth.c:176
msgid "distribution|Exponential"
msgstr "Exponentielle"
-#: modules/process/fbm_synth.c:478
+#: modules/process/fbm_synth.c:477
msgid "distribution|Power"
msgstr "Puissance"
@@ -9598,7 +9871,7 @@ msgstr "Imaginaire"
msgid "Modulus"
msgstr "Module"
-#: modules/process/fft.c:327 modules/process/wave_synth.c:583
+#: modules/process/fft.c:327 modules/process/wave_synth.c:618
msgid "Phase"
msgstr "Phase"
@@ -9614,63 +9887,63 @@ msgstr "Transformée directe"
msgid "I_maginary part:"
msgstr "Partie i_maginaire :"
-#: modules/process/fft.c:382
+#: modules/process/fft.c:380
msgid "_Inverse transform"
msgstr "Transformée _inverse"
-#: modules/process/fft.c:411
+#: modules/process/fft.c:409
msgid "Subtract mean _value beforehand"
msgstr "Soustraire d'abord la _valeur moyenne"
-#: modules/process/fft.c:422
+#: modules/process/fft.c:420
msgid "_Preserve RMS"
msgstr "Conserver le RMS"
-#: modules/process/fft_filter_1d.c:117
+#: modules/process/fft_filter_1d.c:118
msgid "FFT filtering"
msgstr "Filtrage FFT"
-#: modules/process/fft_filter_1d.c:131
+#: modules/process/fft_filter_1d.c:132
msgid "/_Correct Data/1D _FFT Filtering..."
msgstr "/_Correction des données/Filtrage _FFT 1D..."
-#: modules/process/fft_filter_1d.c:135
+#: modules/process/fft_filter_1d.c:136
msgid "1D FFT Filtering"
msgstr "Filtrage FFT 1D"
-#: modules/process/fft_filter_1d.c:165 modules/process/wpour_mark.c:391
+#: modules/process/fft_filter_1d.c:166 modules/process/wpour_mark.c:391
msgid "Marked"
msgstr "Marqué"
-#: modules/process/fft_filter_1d.c:166
+#: modules/process/fft_filter_1d.c:167
msgid "Unmarked"
msgstr "Non marqué"
-#: modules/process/fft_filter_1d.c:169
+#: modules/process/fft_filter_1d.c:170
msgid "Null"
msgstr "Nul"
-#: modules/process/fft_filter_1d.c:170
+#: modules/process/fft_filter_1d.c:171
msgid "Suppress"
msgstr "Supprimer"
-#: modules/process/fft_filter_1d.c:180
+#: modules/process/fft_filter_1d.c:181
msgid "1D FFT filter"
msgstr "Filtre FFT 1D"
-#: modules/process/fft_filter_1d.c:269 modules/process/linematch.c:861
+#: modules/process/fft_filter_1d.c:271 modules/process/linematch.c:828
msgid "_Direction:"
msgstr "_Direction :"
-#: modules/process/fft_filter_1d.c:277
+#: modules/process/fft_filter_1d.c:279
msgid "_Suppress type:"
msgstr "Type de _suppression :"
-#: modules/process/fft_filter_1d.c:285
+#: modules/process/fft_filter_1d.c:287
msgid "_Filter type:"
msgstr "Type de _filtre :"
-#: modules/process/fft_filter_1d.c:513
+#: modules/process/fft_filter_1d.c:515
msgid "1D FFT Filtered Data"
msgstr "Données filtrées après FFT 1D"
@@ -9690,9 +9963,10 @@ msgstr "Filtrage FFT bi-dimensionnelle"
msgid "Filtered Data"
msgstr "Données filtrées"
-#: modules/process/fft_filter_2d.c:305 modules/process/fit-shape.c:594
-#: modules/process/fit-shape.c:643 modules/process/fit-shape.c:658
-#: modules/process/fit-shape.c:662 modules/process/neural.c:560
+#: modules/process/fft_filter_2d.c:305 modules/process/fit-shape.c:604
+#: modules/process/fit-shape.c:653 modules/process/fit-shape.c:668
+#: modules/process/fit-shape.c:672 modules/process/neural.c:564
+#: modules/process/psf.c:232
msgid "Difference"
msgstr "Différence"
@@ -9748,7 +10022,7 @@ msgstr "Masque de filtre"
msgid "_Undo"
msgstr "_Annuler"
-#: modules/process/fft_filter_2d.c:507 modules/tools/maskedit.c:556
+#: modules/process/fft_filter_2d.c:507 modules/tools/maskedit.c:562
msgid "_Fill"
msgstr "Remplir"
@@ -9756,7 +10030,7 @@ msgstr "Remplir"
msgid "_Snap to origin"
msgstr "_S'accrocher à l'origine"
-#: modules/process/fft_filter_2d.c:565 modules/process/measure_lattice.c:339
+#: modules/process/fft_filter_2d.c:565 modules/process/measure_lattice.c:329
msgid "Zoom:"
msgstr "_Zoom :"
@@ -9792,39 +10066,39 @@ msgstr "Remplire complètement le masque filtre"
msgid "Force shapes to center around the origin"
msgstr "Forcer les formes à se centrer sur l'origine"
-#: modules/process/fft_profile.c:125
+#: modules/process/fft_profile.c:124
msgid ""
"Reads radial sections of two-dimensional power spectrum density function."
msgstr ""
"Lit des sections radiales de la densité spectrale de puissance bi-"
"dimensionnelle (PSD)."
-#: modules/process/fft_profile.c:140
+#: modules/process/fft_profile.c:139
msgid "/_Statistics/_PSDF Section..."
msgstr "/_Statistiques/Section de PSD..."
-#: modules/process/fft_profile.c:144
+#: modules/process/fft_profile.c:143
msgid "Read radial PSDF sections"
msgstr "Lire des sections radiales de PSD"
-#: modules/process/fft_profile.c:190
+#: modules/process/fft_profile.c:189
msgid "Radial PSDF Section"
msgstr "Section radiale de PSD"
-#: modules/process/fft_profile.c:237
+#: modules/process/fft_profile.c:236
msgid "PSDF Section"
msgstr "Section de PSD"
-#: modules/process/fft_profile.c:266 modules/process/grain_dist.c:336
-#: modules/tools/profile.c:517 modules/tools/sfunctions.c:443
-msgid "_Fix res.:"
+#: modules/process/fft_profile.c:266 modules/process/grain_dist.c:338
+#: modules/tools/profile.c:514 modules/tools/sfunctions.c:454
+msgid "_Fixed resolution:"
msgstr "Résolution _fixe :"
-#: modules/process/fft_profile.c:279
+#: modules/process/fft_profile.c:278
msgid "_Separate curves"
msgstr "Courbes _séparées"
-#: modules/process/fft_profile.c:496
+#: modules/process/fft_profile.c:483
#, c-format
msgid "PSDF %.0f°"
msgstr "PSD %.0f°"
@@ -9845,11 +10119,15 @@ msgstr "Générer une surface en utilisant la synthèse spectrale"
msgid "Spectral Synthesis"
msgstr "Synthèse spectrale"
-#: modules/process/fft_synth.c:429
+#: modules/process/fft_synth.c:430
msgid "M_inimum frequency:"
msgstr "Fréquence m_inimum :"
-#: modules/process/fft_synth.c:449
+#: modules/process/fft_synth.c:430 modules/process/fft_synth.c:450
+msgid "px<sup>-1</sup>"
+msgstr "px<sup>-1</sup>"
+
+#: modules/process/fft_synth.c:450
msgid "Ma_ximum frequency:"
msgstr "Fréquence ma_ximum :"
@@ -9869,85 +10147,156 @@ msgstr "Activer le multiplicateur _lorentzien"
msgid "Enable _power multiplier"
msgstr "Activer le multiplicateur _puissance"
-#: modules/process/fit-shape.c:270
+#: modules/process/fibre_synth.c:256
+msgid "Semi-circle"
+msgstr "Demi-cercle"
+
+#: modules/process/fibre_synth.c:257
+msgid "Triangle"
+msgstr "Triangle"
+
+#: modules/process/fibre_synth.c:258
+msgid "Rectangle"
+msgstr "Rectangle"
+
+#: modules/process/fibre_synth.c:260
+msgid "Quadratic spline"
+msgstr "Spline quadratique"
+
+#: modules/process/fibre_synth.c:266
+msgid "Generates surfaces composed from randomly placed fibers."
+msgstr "Génère une surface composée de fibres disposées aléatoirement"
+
+#: modules/process/fibre_synth.c:280
+msgid "/S_ynthetic/_Deposition/_Fibers..."
+msgstr "/S_ynthèse/_Dépôt/_Fibres..."
+
+#: modules/process/fibre_synth.c:284
+msgid "Generate surface of randomly placed fibers"
+msgstr "Générer une surface composée de fibres disposées aléatoirement"
+
+#: modules/process/fibre_synth.c:420
+msgid "Random Fibers"
+msgstr "Fibres aléatoires"
+
+#: modules/process/fibre_synth.c:494 modules/process/obj_synth.c:510
+msgid "_Shape:"
+msgstr "Forme :"
+
+#: modules/process/fibre_synth.c:513 modules/process/obj_synth.c:529
+msgid "obj."
+msgstr "obj."
+
+#: modules/process/fibre_synth.c:553
+#, fuzzy
+msgid "Scales _with width"
+msgstr "Mettre à l'échelle avec la taille"
+
+#: modules/process/fibre_synth.c:591 modules/process/synth.h:485
+msgid "Deformation"
+msgstr "Déformation"
+
+#: modules/process/fibre_synth.c:600 modules/process/lno_synth.c:852
+#: modules/process/lno_synth.c:1222 modules/process/mask_noisify.c:177
+msgid "Densi_ty:"
+msgstr "Densi_té :"
+
+#: modules/process/fibre_synth.c:607
+msgid "_Lateral:"
+msgstr "_Latéral :"
+
+#: modules/process/fibre_synth.c:614
+#, fuzzy
+msgid "Le_ngthwise:"
+msgstr "_Longueur :"
+
+#: modules/process/fibre_synth.c:819
+msgid "Along fiber:"
+msgstr "Le long de la fibre"
+
+#: modules/process/fibre_synth.c:1180
+msgid "Generating fibers..."
+msgstr "Génération des fibres..."
+
+#: modules/process/fit-shape.c:264
msgid "Fits predefined geometrical shapes to data."
msgstr "Ajuste des formes géométriques prédéfinies aux données."
-#: modules/process/fit-shape.c:284
+#: modules/process/fit-shape.c:278
msgid "/_Level/_Fit Shape..."
msgstr "/Niveau/Ajuster une _forme..."
-#: modules/process/fit-shape.c:288 modules/process/fit-shape.c:295
+#: modules/process/fit-shape.c:282 modules/process/fit-shape.c:289
msgid "Fit geometrical shapes"
msgstr "Ajuste des formes géométriques"
-#: modules/process/fit-shape.c:291
+#: modules/process/fit-shape.c:285
msgid "/_Fit Shape..."
msgstr "/Ajuster une _forme..."
-#: modules/process/fit-shape.c:390
+#: modules/process/fit-shape.c:389
msgid "Fit Shape"
msgstr "Forme ajustée"
-#: modules/process/fit-shape.c:395
+#: modules/process/fit-shape.c:396
msgid "verb|_Quick Fit"
msgstr "Ajuster rapidement"
-#: modules/process/fit-shape.c:473 modules/process/fit-shape.c:2159
+#: modules/process/fit-shape.c:474 modules/process/fit-shape.c:2141
msgid "Derived Quantities"
msgstr "Quantités dérivées"
-#: modules/process/fit-shape.c:478 modules/process/fit-shape.c:2129
+#: modules/process/fit-shape.c:479 modules/process/fit-shape.c:2111
msgid "Mean square difference:"
msgstr "Différence quadratique moyenne"
-#: modules/process/fit-shape.c:580 modules/process/fit-shape.c:626
-#: modules/process/fit-shape.c:657 modules/process/fit-shape.c:661
+#: modules/process/fit-shape.c:590 modules/process/fit-shape.c:636
+#: modules/process/fit-shape.c:667 modules/process/fit-shape.c:671
msgid "Fitted shape"
msgstr "Forme ajustée"
-#: modules/process/fit-shape.c:663 modules/process/mark_disconn.c:189
-#: modules/process/scars.c:281
+#: modules/process/fit-shape.c:673 modules/process/mark_disconn.c:189
+#: modules/process/scars.c:299
msgid "Both"
msgstr "Les deux"
-#: modules/process/fit-shape.c:680
+#: modules/process/fit-shape.c:690 modules/process/psf-fit.c:308
msgid "_Function type:"
msgstr "Type de _fonction :"
-#: modules/process/fit-shape.c:708
+#: modules/process/fit-shape.c:720
msgid "Show differences with _adapted color map"
msgstr "Afficher l'écart avec une échelle de couleur _adaptée"
-#: modules/process/fit-shape.c:720
+#: modules/process/fit-shape.c:732
msgid "Full fit is _geometric"
msgstr "L'ajustement complet est _géométrique"
-#: modules/process/fit-shape.c:757
+#: modules/process/fit-shape.c:769
msgid "Calculate differences for e_xcluded pixels"
msgstr "Calculer la différence pour les pixels exclus"
-#: modules/process/fit-shape.c:804
+#: modules/process/fit-shape.c:816
msgid "_Recalculate Image"
msgstr "_Recalculer l'image"
-#: modules/process/fit-shape.c:811
+#: modules/process/fit-shape.c:823
msgid "Revert to _Previous Values"
msgstr "Retourner aux valeurs précédentes"
-#: modules/process/fit-shape.c:1850
+#: modules/process/fit-shape.c:1864
msgid "Parameter estimation failed"
msgstr "Échec de l'estimation des paramètres"
-#: modules/process/fit-shape.c:1853
+#: modules/process/fit-shape.c:1867
msgid "Fit failed"
msgstr "Échec de l'ajustement"
-#: modules/process/fit-shape.c:1855
+#: modules/process/fit-shape.c:1869
msgid "Fit was interruped"
msgstr "Ajustement interrompu"
-#: modules/process/fit-shape.c:2115
+#: modules/process/fit-shape.c:2097
msgid "(fixed)"
msgstr "(fixé)"
@@ -9967,37 +10316,37 @@ msgstr "Aplanir la base d'une surface ayant des éléments en relief"
msgid "Polynomial leveling..."
msgstr "Mise à niveau par polynôme..."
-#: modules/process/fraccor.c:38
+#: modules/process/fraccor.c:39
msgid "Removes data under mask using fractal interpolation."
msgstr ""
"Supprime les données sous le masque à l'aide d'une interpolation fractale."
-#: modules/process/fraccor.c:52
+#: modules/process/fraccor.c:53
msgid "/_Correct Data/_Fractal Correction"
msgstr "/_Correction des données/Correction _fractale"
-#: modules/process/fraccor.c:56
+#: modules/process/fraccor.c:57
msgid "Interpolate data under mask with fractal interpolation"
msgstr ""
"Interpole les données sous le masque à l'aide d'une interpolation fractale."
-#: modules/process/fractal.c:134
+#: modules/process/fractal.c:130
msgid "Partitioning"
msgstr "Partitionnement"
-#: modules/process/fractal.c:135
+#: modules/process/fractal.c:131
msgid "Cube counting"
msgstr "Comptage de cubes"
-#: modules/process/fractal.c:136
+#: modules/process/fractal.c:132
msgid "Triangulation"
msgstr "Triangulation"
-#: modules/process/fractal.c:137
+#: modules/process/fractal.c:133
msgid "Power spectrum"
msgstr "Spectre de puissance"
-#: modules/process/fractal.c:173
+#: modules/process/fractal.c:169
msgid ""
"Calculates fractal dimension using several methods (partitioning, box "
"counting, triangulation, power spectrum)."
@@ -10005,54 +10354,50 @@ msgstr ""
"Calcule la dimension fractale suivant différentes méthodes (partition, "
"comptage de boîtes, triangulation, spectre de puissance)."
-#: modules/process/fractal.c:188
+#: modules/process/fractal.c:184
msgid "/_Statistics/_Fractal Dimension..."
msgstr "/_Statistiques/Dimension _fractale..."
-#: modules/process/fractal.c:192
+#: modules/process/fractal.c:188
msgid "Calculate fractal dimension"
msgstr "Calculer la dimension fractale"
-#: modules/process/fractal.c:227
+#: modules/process/fractal.c:223
msgid "Fractal Dimension"
msgstr "Dimension fractale"
-#: modules/process/fractal.c:228
-msgid "Reco_mpute"
-msgstr "Recalculer"
-
-#: modules/process/fractal.c:269
+#: modules/process/fractal.c:253
msgid "_Method:"
msgstr "_Méthode :"
-#: modules/process/fractal.c:290
+#: modules/process/fractal.c:269
msgid "Fit Area"
msgstr "Ajuster la surface"
-#: modules/process/fractal.c:295
-msgid "From:"
-msgstr "À partir de :"
-
-#: modules/process/fractal.c:295 modules/process/fractal.c:589
-#: modules/process/fractal.c:613
+#: modules/process/fractal.c:273 modules/process/fractal.c:545
+#: modules/process/fractal.c:569
msgid "minimum"
msgstr "minimum"
-#: modules/process/fractal.c:298
-msgid "To:"
-msgstr "Jusqu'à"
+#: modules/process/fractal.c:274
+msgid "From:"
+msgstr "À partir de :"
-#: modules/process/fractal.c:298 modules/process/fractal.c:590
-#: modules/process/fractal.c:614
+#: modules/process/fractal.c:279 modules/process/fractal.c:546
+#: modules/process/fractal.c:570
msgid "maximum"
msgstr "maximum"
-#: modules/process/fractal.c:308 modules/process/mark_with.c:390
-#: modules/process/neural.c:559
+#: modules/process/fractal.c:280
+msgid "To:"
+msgstr "Jusqu'à"
+
+#: modules/process/fractal.c:287 modules/process/mark_with.c:394
+#: modules/process/neural.c:563
msgid "Result"
msgstr "Résultat"
-#: modules/process/fractal.c:550
+#: modules/process/fractal.c:506
msgid "Linear fit"
msgstr "Ajustement linéaire"
@@ -10125,11 +10470,11 @@ msgstr ""
msgid "Grain Correlations"
msgstr "Corrélations des grains"
-#: modules/process/grain_cross.c:240
+#: modules/process/grain_cross.c:241
msgid "_Abscissa"
msgstr "_Abscisse"
-#: modules/process/grain_cross.c:244
+#: modules/process/grain_cross.c:245
msgid "O_rdinate"
msgstr "O_rdonnée"
@@ -10157,120 +10502,120 @@ msgstr "Dessiner les _graphes"
msgid "Grain Distributions"
msgstr "Distribution des grains"
-#: modules/process/grain_dist.c:553
+#: modules/process/grain_dist.c:547
msgid "count"
msgstr "quantité"
-#: modules/process/grain_dist.c:617
+#: modules/process/grain_dist.c:611
msgid "Export Raw Grain Values"
msgstr "Exporter les données brutes des grains"
-#: modules/process/grain_edge.c:100
+#: modules/process/grain_edge.c:99
msgid "Marks grains by edge detection method."
msgstr "Marque les grains par la méthode de détection de bord."
-#: modules/process/grain_edge.c:114
+#: modules/process/grain_edge.c:113
msgid "/_Grains/Mark by _Edge Detection..."
msgstr "/_Grains/Marqu_er par détection de bord..."
-#: modules/process/grain_edge.c:118
+#: modules/process/grain_edge.c:117
msgid "Mark grains with edge detection mechanism"
msgstr "Marquer les grains par détection des bords"
-#: modules/process/grain_edge.c:207
+#: modules/process/grain_edge.c:206
msgid "Mark Grains by Edge Detection"
msgstr "Marquer les grains par détection de bord"
-#: modules/process/grain_edge.c:245
+#: modules/process/grain_edge.c:244
msgid "Threshold"
msgstr "Seuil"
-#: modules/process/grain_edge.c:249
+#: modules/process/grain_edge.c:248
msgid "_Laplacian:"
msgstr "_Laplacien :"
-#: modules/process/grain_filter.c:195
+#: modules/process/grain_filter.c:194
msgid ""
"Filters grains by their properties, using logical expressions and thresholds."
msgstr ""
"Filtre les grains en fonction de leurs propriétés, à l'aide d'expressions "
"logiques et de seuils."
-#: modules/process/grain_filter.c:210
+#: modules/process/grain_filter.c:209
msgid "/_Grains/_Filter..."
msgstr "/_Grains/_Filtrer..."
-#: modules/process/grain_filter.c:214
+#: modules/process/grain_filter.c:213
msgid "Filter grains by their properties"
msgstr "Filtrer les grains en fonction de leurs propriétés"
-#: modules/process/grain_filter.c:254
+#: modules/process/grain_filter.c:253
msgid "There are no grains to filter."
msgstr "Aucun grain à filtrer."
-#: modules/process/grain_filter.c:310
+#: modules/process/grain_filter.c:309
msgid "Filter Grains"
msgstr "Filtrer les grains"
-#: modules/process/grain_filter.c:405
+#: modules/process/grain_filter.c:404
msgid "Set selected as:"
msgstr "Assigner à :"
-#: modules/process/grain_filter.c:420
+#: modules/process/grain_filter.c:419
msgid "Keep grains satisfying:"
msgstr "Conserver les grains satisfaisant :"
-#: modules/process/grain_filter.c:434 modules/process/lat_synth.c:733
+#: modules/process/grain_filter.c:440 modules/process/lat_synth.c:733
msgid "Lower threshold:"
msgstr "Seuil bas : "
-#: modules/process/grain_filter.c:469 modules/process/lat_synth.c:740
+#: modules/process/grain_filter.c:467 modules/process/lat_synth.c:740
msgid "Upper threshold:"
msgstr "Seuil haut : "
#. TRANSLATORS: %c is replaced with quantity label A, B or C.
-#: modules/process/grain_filter.c:645
+#: modules/process/grain_filter.c:628
#, c-format
msgid "Condition %c: %s"
msgstr "Condition %c : %s"
-#: modules/process/grain_mark.c:139
+#: modules/process/grain_mark.c:137
msgid "Marks grains by thresholding (height, slope, curvature)."
msgstr "Marquer les grains par seuillage (hauteur, pente, courbure)."
-#: modules/process/grain_mark.c:153
+#: modules/process/grain_mark.c:151
msgid "/_Grains/_Mark by Threshold..."
msgstr "/_Grains/_Marquer par seuil..."
-#: modules/process/grain_mark.c:157
+#: modules/process/grain_mark.c:155
msgid "Mark grains by threshold"
msgstr "Marquer les grains par seuil"
-#: modules/process/grain_mark.c:241
+#: modules/process/grain_mark.c:240
msgid "Mark Grains by Threshold"
msgstr "Marquer les grains par seuil"
-#: modules/process/grain_mark.c:281
+#: modules/process/grain_mark.c:280
msgid "Threshold by"
msgstr "Seuillage par"
-#: modules/process/grain_mark.c:311
+#: modules/process/grain_mark.c:310
msgid "_Slope:"
msgstr "Pente :"
-#: modules/process/grain_mark.c:315
+#: modules/process/grain_mark.c:314
msgid "_Curvature:"
msgstr "_Courbure :"
-#: modules/process/grain_mark.c:324
-msgid "Criteria combination:"
-msgstr "Combinaison de critères :"
-
-#: modules/process/grain_mark.c:328 modules/process/grain_wshed.c:256
+#: modules/process/grain_mark.c:319 modules/process/grain_wshed.c:260
#: modules/process/wpour_mark.c:358
msgid "_Invert height"
msgstr "_Inverser les hauteurs"
+#: modules/process/grain_mark.c:328
+msgid "Criteria combination:"
+msgstr "Combinaison de critères :"
+
#: modules/process/grain_stat.c:54
msgid "Displays overall grain statistics."
msgstr "Affiche les statistiques globales des grains."
@@ -10301,7 +10646,7 @@ msgstr "Créer une sélection donnant les cercles circonscrits aux grains"
#: modules/process/grain_stat.c:141
msgid "Save Grain Statistics"
-msgstr "Sauver les statistiques des grains"
+msgstr "Enregistrer les statistiques des grains"
#: modules/process/grain_stat.c:192
msgid "Data channel:"
@@ -10347,419 +10692,428 @@ msgstr "Volume de grain total (base laplacienne) :"
msgid "Total projected boundary length:"
msgstr "Périmètre projeté : "
-#: modules/process/grain_wshed.c:101
+#: modules/process/grain_wshed.c:102
msgid "Marks grains by watershed algorithm."
msgstr ""
"Marque les grains à l'aide d'un algorithme de ligne de partage des eaux "
"(segmentation)."
-#: modules/process/grain_wshed.c:115
+#: modules/process/grain_wshed.c:116
msgid "/_Grains/Mark by _Watershed..."
msgstr "/_Grains/Marquer par ligne de partage des eaux..."
-#: modules/process/grain_wshed.c:119
+#: modules/process/grain_wshed.c:120
msgid "Mark grains by watershed"
msgstr "Marquer les grains par lignes de partage des eaux (segmentation)"
-#: modules/process/grain_wshed.c:161
+#: modules/process/grain_wshed.c:162
msgid "Mark Grains by Watershed"
msgstr "Marquer les grains par ligne de partage des eaux (segmentation)"
-#: modules/process/grain_wshed.c:199
+#: modules/process/grain_wshed.c:200
msgid "Grain Location"
msgstr "Localisation des grains"
-#: modules/process/grain_wshed.c:214
+#: modules/process/grain_wshed.c:216
msgid "_Drop size:"
msgstr "Taille _de goutte :"
-#: modules/process/grain_wshed.c:230
+#: modules/process/grain_wshed.c:233
msgid "Segmentation"
msgstr "Segmentation"
-#: modules/process/grain_wshed.c:236
+#: modules/process/grain_wshed.c:239
msgid "Num_ber of steps:"
msgstr "Nom_bre de pas :"
-#: modules/process/grain_wshed.c:244
+#: modules/process/grain_wshed.c:248
msgid "Dr_op size:"
msgstr "Taille de g_outte :"
-#: modules/process/grain_wshed.c:435
+#: modules/process/grain_wshed.c:439
msgid "Finding minima..."
msgstr "Recherche des minima..."
-#: modules/process/grain_wshed.c:437
+#: modules/process/grain_wshed.c:441
msgid "Locating..."
msgstr "Localisation..."
-#: modules/process/grain_wshed.c:439
+#: modules/process/grain_wshed.c:443
msgid "Simulating watershed..."
msgstr "Segmentation..."
-#: modules/process/grain_wshed.c:441
+#: modules/process/grain_wshed.c:445
msgid "Marking boundaries..."
msgstr "Marquage des limites..."
-#: modules/process/hough.c:74
+#: modules/process/hough.c:76
msgid "Hough transform."
msgstr "Transformée de Hough."
-#: modules/process/hough.c:88
+#: modules/process/hough.c:90
msgid "/_Integral Transforms/_Hough..."
msgstr "/Transformées/_Hough..."
-#: modules/process/hough.c:92
+#: modules/process/hough.c:94
msgid "Compute Hough transform"
msgstr "Calculer la transformée de Hough"
-#: modules/process/hough.c:178
+#: modules/process/hough.c:137
+msgid "Hough line"
+msgstr "Ligne de Hough"
+
+#: modules/process/hough.c:141
+#, c-format
+msgid "Hough circle r=%d"
+msgstr "Cercle de Hough r = %d"
+
+#: modules/process/hough.c:173
msgid "Hough Transform"
msgstr "Transformée de Hough"
-#: modules/process/hough.c:201
+#: modules/process/hough.c:195
msgid "_Transform type:"
msgstr "_Type de transformée :"
-#: modules/process/hough.c:212
+#: modules/process/hough.c:203
msgid "_Circle size:"
msgstr "Taille du _cercle : "
-#: modules/process/immerse.c:162
+#: modules/process/immerse.c:163
msgid "Immerse high resolution detail into overall image."
msgstr "Incruste un détail à haute résolution dans une image."
-#: modules/process/immerse.c:176
+#: modules/process/immerse.c:177
msgid "/M_ultidata/_Immerse Detail..."
msgstr "/M_ultidonnées/_Incruster un détail..."
-#: modules/process/immerse.c:180
+#: modules/process/immerse.c:181
msgid "Immerse a detail into image"
msgstr "Incruste un détail dans une image"
-#: modules/process/immerse.c:222
+#: modules/process/immerse.c:223
msgid "Immerse Detail"
msgstr "Incruster un détail"
-#: modules/process/immerse.c:225
+#: modules/process/immerse.c:226
msgid "_Locate"
msgstr "_Localiser"
-#: modules/process/immerse.c:227
+#: modules/process/immerse.c:228
msgid "Locate detail by full image correlation search"
msgstr ""
"Localise le détail grâce à une recherche par corrélation sur l'image entière"
-#: modules/process/immerse.c:229
+#: modules/process/immerse.c:230
msgid "_Improve"
msgstr "Amél_iorer"
-#: modules/process/immerse.c:231
+#: modules/process/immerse.c:232
msgid "Improve detail position by correlation search in neighborhood"
msgstr "Améliorer la position d'un détail par corrélation avec le voisinage."
-#: modules/process/immerse.c:290
+#: modules/process/immerse.c:291
msgid "_Detail image:"
msgstr "Image du _détail :"
-#: modules/process/immerse.c:295
+#: modules/process/immerse.c:296
msgid "Position:"
msgstr "Position :"
-#: modules/process/immerse.c:308
+#: modules/process/immerse.c:314
msgid "Result Sampling"
msgstr "Résultat de l'échantillonnage"
-#: modules/process/immerse.c:318
+#: modules/process/immerse.c:324
msgid "_Upsample large image"
msgstr "S_ur-échantilloner l'image globale"
-#: modules/process/immerse.c:320
+#: modules/process/immerse.c:326
msgid "_Downsample detail"
msgstr "Sous-échantillonner le détail"
-#: modules/process/immerse.c:329
+#: modules/process/immerse.c:335
msgid "Detail Leveling"
msgstr "Mise à niveau du détail"
-#: modules/process/immerse.c:339
+#: modules/process/immerse.c:345
msgid "levelling|_None"
msgstr "Aucu_ne"
-#: modules/process/immerse.c:341
+#: modules/process/immerse.c:347
msgid "_Mean value"
msgstr "Valeur moyenne"
-#: modules/process/immerse.c:349
+#: modules/process/immerse.c:355
msgid "Show _frame"
msgstr "Montrer la grille"
-#: modules/process/immerse.c:787
+#: modules/process/immerse.c:793
msgid "Immersed detail"
msgstr "Détail inséré"
-#: modules/process/indent_analyze.c:261
+#: modules/process/indent_analyze.c:246
msgid "Do nothing"
msgstr "Ne rien faire"
-#: modules/process/indent_analyze.c:262
+#: modules/process/indent_analyze.c:247
msgid "Plane level"
msgstr "Niveau plan"
-#: modules/process/indent_analyze.c:263
+#: modules/process/indent_analyze.c:248
msgid "Plane rotate"
msgstr "Rotation du plan"
-#: modules/process/indent_analyze.c:267
+#: modules/process/indent_analyze.c:252
msgid "New"
msgstr "Nouveau"
-#: modules/process/indent_analyze.c:268
+#: modules/process/indent_analyze.c:253
msgid "AND"
msgstr "ET"
-#: modules/process/indent_analyze.c:269
+#: modules/process/indent_analyze.c:254
msgid "OR"
msgstr "OU"
-#: modules/process/indent_analyze.c:270
+#: modules/process/indent_analyze.c:255
msgid "NOT"
msgstr "NON"
-#: modules/process/indent_analyze.c:271
+#: modules/process/indent_analyze.c:256
msgid "XOR"
msgstr "OU exclusif"
-#: modules/process/indent_analyze.c:275
+#: modules/process/indent_analyze.c:260
msgid "Nothing"
msgstr "Aucune"
-#: modules/process/indent_analyze.c:276
+#: modules/process/indent_analyze.c:261
msgid "Above"
msgstr "Au-dessus"
-#: modules/process/indent_analyze.c:277
+#: modules/process/indent_analyze.c:262
msgid "Below"
msgstr "En-dessous"
-#: modules/process/indent_analyze.c:278
+#: modules/process/indent_analyze.c:263
msgid "Plane"
msgstr "Plan"
-#: modules/process/indent_analyze.c:279
+#: modules/process/indent_analyze.c:264
msgid "Impression"
msgstr "Impression"
-#: modules/process/indent_analyze.c:280
+#: modules/process/indent_analyze.c:265
msgid "Inner Pile-up"
msgstr "Enfoncement"
-#: modules/process/indent_analyze.c:281
+#: modules/process/indent_analyze.c:266
msgid "Outer Pile-up"
msgstr "Débordement"
-#: modules/process/indent_analyze.c:282
+#: modules/process/indent_analyze.c:267
msgid "Special points"
msgstr "Points spéciaux"
-#: modules/process/indent_analyze.c:283
+#: modules/process/indent_analyze.c:268
msgid "Faces border"
msgstr "Bord des faces"
-#: modules/process/indent_analyze.c:287
+#: modules/process/indent_analyze.c:272
msgid "Vickers"
msgstr "Vickers"
-#: modules/process/indent_analyze.c:288
+#: modules/process/indent_analyze.c:273
msgid "Berkovich"
msgstr "Berkovich"
-#: modules/process/indent_analyze.c:289
+#: modules/process/indent_analyze.c:274
msgid "Berkovich (modified)"
msgstr "Berkovich (modifié)"
-#: modules/process/indent_analyze.c:290
+#: modules/process/indent_analyze.c:275
msgid "Knoop"
msgstr "Knoop"
-#: modules/process/indent_analyze.c:291
+#: modules/process/indent_analyze.c:276
msgid "Brinell"
msgstr "Brinell"
-#: modules/process/indent_analyze.c:292
+#: modules/process/indent_analyze.c:277
msgid "Cube corner"
msgstr "Coin de cube"
-#: modules/process/indent_analyze.c:293
+#: modules/process/indent_analyze.c:278
msgid "Rockwell"
msgstr "Rockwell"
-#: modules/process/indent_analyze.c:303
+#: modules/process/indent_analyze.c:288
msgid "Analyses nanoindentation structure (volumes, surfaces, ...)."
msgstr "Analyse les structures de nano-indentation (volumes, surfaces...)."
-#: modules/process/indent_analyze.c:320
+#: modules/process/indent_analyze.c:302
msgid "/_Tip and Indentation/_Analyze Imprint..."
msgstr "/Sonde et indentation/_Analyser l'empreinte..."
-#: modules/process/indent_analyze.c:439
+#: modules/process/indent_analyze.c:410
msgid "Marked _areas:"
msgstr "Zones m_arquées"
-#: modules/process/indent_analyze.c:445
+#: modules/process/indent_analyze.c:419
msgid "_Indentor type:"
msgstr "Type d'_indenteur :"
-#: modules/process/indent_analyze.c:451
+#: modules/process/indent_analyze.c:428
msgid "_Mask creation type:"
msgstr "Type de création de _masque : "
-#: modules/process/indent_analyze.c:456
+#: modules/process/indent_analyze.c:434
msgid "Ref. plane _tolerance:"
msgstr "_Tolérance du plan de référence :"
-#: modules/process/indent_analyze.c:460
+#: modules/process/indent_analyze.c:438
msgid "Angle _1 tolerance:"
msgstr "Tolérance angle _1 :"
-#: modules/process/indent_analyze.c:485
+#: modules/process/indent_analyze.c:456
msgid "Indent center at"
msgstr "Centre de la nano-indentation à "
-#: modules/process/indent_analyze.c:488
+#: modules/process/indent_analyze.c:460
msgid "Maximum at"
msgstr "Maximum à "
-#: modules/process/indent_analyze.c:491
+#: modules/process/indent_analyze.c:464
msgid "Max-min difference"
msgstr "Différence max-min"
-#: modules/process/indent_analyze.c:497
+#: modules/process/indent_analyze.c:472
msgid "Expected A<sub>d</sub>:"
msgstr "A<sub>d</sub> attendu :"
-#: modules/process/indent_analyze.c:505
+#: modules/process/indent_analyze.c:479
msgid "Expected A<sub>p</sub>:"
msgstr "A<sub>p</sub> attendu :"
-#: modules/process/indent_analyze.c:549
+#: modules/process/indent_analyze.c:489
msgid "Volume above-below"
msgstr "Volume au-dessus / en-dessous"
-#: modules/process/indent_analyze.c:558
+#: modules/process/indent_analyze.c:494
msgid "Indent. volume"
msgstr "Volume d'indentation"
-#: modules/process/indent_analyze.c:564
+#: modules/process/indent_analyze.c:502
msgid "Indent. A<sub>d</sub>"
msgstr "Indentation A<sub>d</sub>"
-#: modules/process/indent_analyze.c:573
+#: modules/process/indent_analyze.c:509
msgid "Indent. A<sub>p</sub>"
msgstr "Indentation A<sub>p</sub>"
-#: modules/process/indent_analyze.c:587
+#: modules/process/indent_analyze.c:517
msgid "Inner Pile-Up A<sub>d</sub>"
msgstr "Enfoncement A<sub>d</sub>"
-#: modules/process/indent_analyze.c:596
+#: modules/process/indent_analyze.c:525
msgid "Inner Pile-Up A<sub>p</sub>"
msgstr "Enfoncement A<sub>p</sub>"
-#: modules/process/indent_analyze.c:605
+#: modules/process/indent_analyze.c:533
msgid "Outer Pile-Up A<sub>d</sub>"
msgstr "Débordement A<sub>d</sub>"
-#: modules/process/indent_analyze.c:614
+#: modules/process/indent_analyze.c:541
msgid "Outer Pile-Up A<sub>p</sub>"
msgstr "Débordement A<sub>p</sub>"
-#: modules/process/indent_analyze.c:644
+#: modules/process/indent_analyze.c:569
msgid "Indentation statistics"
msgstr "Statistiques d'indentation"
-#: modules/process/indent_analyze.c:645
+#: modules/process/indent_analyze.c:570
msgid "_Compute & mark"
msgstr "_Calculer et marquer"
-#: modules/process/indent_analyze.c:646
+#: modules/process/indent_analyze.c:571
msgid "_Save statistics"
msgstr "_Sauvegarder les statistiques"
-#: modules/process/indent_analyze.c:1569
+#: modules/process/indent_analyze.c:1392
msgid "No statistics has been computed yet."
msgstr "Aucune statistique n'a encore été calculée."
-#: modules/process/indent_analyze.c:1577
+#: modules/process/indent_analyze.c:1400
msgid "Save Indentation Statistics"
msgstr "Sauvegarde les statistiques d'indentation"
-#: modules/process/indent_analyze.c:1615
+#: modules/process/indent_analyze.c:1438
#, c-format
msgid "Indentor: %s\n"
msgstr "Indenteur : %s\n"
-#: modules/process/indent_analyze.c:1619
+#: modules/process/indent_analyze.c:1442
#, c-format
msgid "Length units: %s\n"
msgstr "Unité de longueur : %s\n"
-#: modules/process/indent_analyze.c:1621
+#: modules/process/indent_analyze.c:1444
#, c-format
msgid "Indentation center at [%d, %d] px: %lf\n"
msgstr "Centre de l'indentation à [%d, %d] px : %lf\n"
-#: modules/process/indent_analyze.c:1623
+#: modules/process/indent_analyze.c:1446
#, c-format
msgid "Maximum at [%d, %d] is: %lf\n"
msgstr "Le maximum à [%d, %d] est : %lf\n"
-#: modules/process/indent_analyze.c:1625
+#: modules/process/indent_analyze.c:1448
#, c-format
msgid "Difference max-min: %lf\n"
msgstr "Différence max-min : %lf\n"
-#: modules/process/indent_analyze.c:1630
+#: modules/process/indent_analyze.c:1453
#, c-format
msgid "Area (projected) above plane: %g (%.1lf %%)\n"
msgstr "Aire (projetée) au-dessus du plan : %g (%.1lf %%)\n"
-#: modules/process/indent_analyze.c:1634
+#: modules/process/indent_analyze.c:1457
#, c-format
msgid "Area (projected) below plane: %g (%.1lf %%)\n"
msgstr "Aire (projetée) en-dessous du plan : %g (%.1lf %%)\n"
-#: modules/process/indent_analyze.c:1638
+#: modules/process/indent_analyze.c:1461
#, c-format
msgid "Area (projected) of plane: %g (%.1lf %%)\n"
msgstr "Aire (projetée) du plan : %g (%.1lf %%)\n"
-#: modules/process/indent_analyze.c:1643
+#: modules/process/indent_analyze.c:1466
#, c-format
msgid "Area (developed) above %g (+%.1f %%)\n"
msgstr "Aire (développée) au-dessus %g (+%.1f %%)\n"
-#: modules/process/indent_analyze.c:1646
+#: modules/process/indent_analyze.c:1469
#, c-format
msgid "Area (developed) below %g (+%.1lf %%)\n"
msgstr "Aire (développée) en-dessous %g (+%.1lf %%)\n"
-#: modules/process/indent_analyze.c:1650
+#: modules/process/indent_analyze.c:1473
#, c-format
msgid "Volume above: %g\n"
msgstr "Volume au-dessus : %g\n"
-#: modules/process/indent_analyze.c:1652
+#: modules/process/indent_analyze.c:1475
#, c-format
msgid "Volume below: %g\n"
msgstr "Volume en-dessous : %g\n"
-#: modules/process/indent_analyze.c:1654
+#: modules/process/indent_analyze.c:1477
#, c-format
msgid "Volume difference %g\n"
msgstr "Différence de volume %g\n"
-#: modules/process/indent_analyze.c:1658
+#: modules/process/indent_analyze.c:1481
msgid ""
"\n"
"Indentation\n"
@@ -10767,12 +11121,12 @@ msgstr ""
"\n"
"Indentation\n"
-#: modules/process/indent_analyze.c:1659
+#: modules/process/indent_analyze.c:1482
#, c-format
msgid "Volume %g\n"
msgstr "Volume : %g\n"
-#: modules/process/indent_analyze.c:1664
+#: modules/process/indent_analyze.c:1487
msgid ""
"\n"
"Indentation - Inner Pile-Up\n"
@@ -10780,7 +11134,7 @@ msgstr ""
"\n"
"Indentation - Enfoncement\n"
-#: modules/process/indent_analyze.c:1670
+#: modules/process/indent_analyze.c:1493
msgid "Indentation - Outer Pile-Up\n"
msgstr "Indentation - Débordement\n"
@@ -10890,11 +11244,6 @@ msgstr "Penrose (centres)"
msgid "_Lattice:"
msgstr "Mai_lle :"
-#: modules/process/lat_synth.c:651 modules/process/obj_synth.c:544
-#: modules/process/pat_synth.c:1457
-msgid "_Size:"
-msgstr "Dimen_sion :"
-
#: modules/process/lat_synth.c:662
msgid "Lattice rela_xation:"
msgstr "Rela_xation du maillage :"
@@ -11034,7 +11383,7 @@ msgstr ""
#: modules/process/level_grains.c:187 modules/process/median-bg.c:167
#: modules/process/polylevel.c:293 modules/process/polylevel.c:417
-#: modules/process/sphere-revolve.c:200
+#: modules/process/sphere-revolve.c:221 modules/process/sphere-revolve.c:295
msgid "Background"
msgstr "Arrière-plan"
@@ -11046,150 +11395,150 @@ msgstr "Mise à niveau des grains"
msgid "Quantity to level:"
msgstr "Quantité à mettre à niveau :"
-#: modules/process/level_grains.c:231 modules/process/linematch.c:866
-#: modules/process/median-bg.c:217 modules/process/polylevel.c:482
-#: modules/process/sphere-revolve.c:263
+#: modules/process/level_grains.c:231 modules/process/linematch.c:834
+#: modules/process/median-bg.c:217 modules/process/polylevel.c:485
+#: modules/process/sphere-revolve.c:371
msgid "E_xtract background"
msgstr "E_xtraire l'arrière-plan"
-#: modules/process/linecorrect.c:54
+#: modules/process/linecorrect.c:52
msgid "Corrects line defects (mostly experimental algorithms)."
msgstr "Corrige les défauts des lignes (algorithmes expérimentaux)."
-#: modules/process/linecorrect.c:68
+#: modules/process/linecorrect.c:66
msgid "/_Correct Data/Ste_p Line Correction"
msgstr "/_Correction des données/Correction des sauts dans les lignes"
-#: modules/process/linecorrect.c:72
+#: modules/process/linecorrect.c:70
msgid "Correct steps in lines"
msgstr "Corriger les sauts dans les lignes"
-#: modules/process/linematch.c:158 modules/tools/linestats.c:166
+#: modules/process/linematch.c:155 modules/tools/linestats.c:166
#: modules/volume/volume_linestat.c:143
msgid "Median"
msgstr "Médiane"
-#: modules/process/linematch.c:159
+#: modules/process/linematch.c:156
msgid "Median of differences"
msgstr "Médiane des différences"
-#: modules/process/linematch.c:160
+#: modules/process/linematch.c:157
msgid "Modus"
msgstr "Valeur dominante"
-#: modules/process/linematch.c:161
+#: modules/process/linematch.c:158
msgid "linematch|Matching"
msgstr "Correspondance"
-#: modules/process/linematch.c:162
+#: modules/process/linematch.c:159
msgid "linematch|Polynomial"
msgstr "Polynôme"
-#: modules/process/linematch.c:168
+#: modules/process/linematch.c:165
msgid "Aligns rows by various methods."
msgstr "Aligne les lignes à l'aide de différentes méthodes."
-#: modules/process/linematch.c:182
+#: modules/process/linematch.c:179
msgid "/_Correct Data/_Align rows..."
msgstr "/_Correction des données/_Aligner les lignes..."
-#: modules/process/linematch.c:186
+#: modules/process/linematch.c:183
msgid "Align rows using various methods"
msgstr "Aligne les lignes à l'aide de différentes méthodes"
-#: modules/process/linematch.c:237 modules/process/linematch.c:265
+#: modules/process/linematch.c:234 modules/process/linematch.c:262
msgid "Row background"
msgstr "Arrière-plan des lignes"
-#: modules/process/linematch.c:266
+#: modules/process/linematch.c:263
msgid "Vertical position"
msgstr "Position verticale"
-#: modules/process/linematch.c:267
+#: modules/process/linematch.c:264
msgid "Corrected offset"
msgstr "Décalage corrigé"
-#: modules/process/linematch.c:802
+#: modules/process/linematch.c:769
msgid "Align Rows"
msgstr "Aligner les lignes"
-#: modules/process/linematch.c:844
+#: modules/process/linematch.c:810
msgid "_Polynomial degree:"
msgstr "Degré du _polynôme :"
-#: modules/process/linematch.c:876
+#: modules/process/linematch.c:844
msgid "Plot background _graph"
msgstr "Afficher le graphe de l'arrière-plan"
-#: modules/process/lno_synth.c:261 modules/process/noise_synth.c:188
+#: modules/process/lno_synth.c:259 modules/process/noise_synth.c:186
msgid "distribution|Triangular"
msgstr "Triangulaire"
-#: modules/process/lno_synth.c:267 modules/process/pat_synth.c:213
+#: modules/process/lno_synth.c:265 modules/process/pat_synth.c:213
msgid "Steps"
msgstr "Marches"
-#: modules/process/lno_synth.c:268
+#: modules/process/lno_synth.c:266
msgid "Scars"
msgstr "Défauts linéaires"
-#: modules/process/lno_synth.c:269 modules/process/pat_synth.c:214
+#: modules/process/lno_synth.c:267 modules/process/pat_synth.c:214
msgid "Ridges"
msgstr "Créneaux"
-#: modules/process/lno_synth.c:275
+#: modules/process/lno_synth.c:273
msgid "Generates various kinds of line noise."
msgstr "Génère divers types de bruit linéaire."
-#: modules/process/lno_synth.c:289
+#: modules/process/lno_synth.c:287
msgid "/S_ynthetic/_Line Noise..."
msgstr "/S_ynthèse/Bruit _linéaire..."
-#: modules/process/lno_synth.c:293
+#: modules/process/lno_synth.c:291
msgid "Generate line noise"
msgstr "Génère un bruit linéaire"
-#: modules/process/lno_synth.c:431
+#: modules/process/lno_synth.c:429
msgid "Line Noise"
msgstr "Bruit linéaire"
-#: modules/process/lno_synth.c:504
+#: modules/process/lno_synth.c:502
msgid "Distribution"
msgstr "Distribution"
-#: modules/process/lno_synth.c:514 modules/process/noise_synth.c:414
-msgid "Direction:"
-msgstr "Direction :"
+#: modules/process/lno_synth.c:512 modules/process/mask_noisify.c:158
+#: modules/process/noise_synth.c:412
+msgid "Noise type:"
+msgstr "Type de bruit :"
-#: modules/process/lno_synth.c:523 modules/process/noise_synth.c:423
+#: modules/process/lno_synth.c:521 modules/process/mask_noisify.c:167
+#: modules/process/noise_synth.c:421
msgid "S_ymmetrical"
msgstr "S_ymétrique"
-#: modules/process/lno_synth.c:524 modules/process/noise_synth.c:424
+#: modules/process/lno_synth.c:522 modules/process/mask_noisify.c:168
+#: modules/process/noise_synth.c:422
msgid "One-sided _positive"
msgstr "Valeurs positives uniquement"
-#: modules/process/lno_synth.c:525 modules/process/noise_synth.c:425
+#: modules/process/lno_synth.c:523 modules/process/mask_noisify.c:169
+#: modules/process/noise_synth.c:423
msgid "One-sided _negative"
msgstr "Valeurs négatives seulement"
-#: modules/process/lno_synth.c:546
+#: modules/process/lno_synth.c:544
msgid "Noise Type"
msgstr "Type de bruit"
-#: modules/process/lno_synth.c:551
+#: modules/process/lno_synth.c:549
msgid "_Noise type:"
msgstr "Type de bruit :"
-#: modules/process/lno_synth.c:853 modules/process/lno_synth.c:1222
-msgid "Densi_ty:"
-msgstr "Densi_té :"
-
-#: modules/process/lno_synth.c:864 modules/process/lno_synth.c:1233
+#: modules/process/lno_synth.c:863 modules/process/lno_synth.c:1233
msgid "_Within line:"
msgstr "Dans les lignes :"
-#: modules/process/lno_synth.c:871
+#: modules/process/lno_synth.c:870
msgid "C_umulative"
msgstr "C_umulatif"
@@ -11245,31 +11594,31 @@ msgstr "Appliquer une régression"
msgid "_Train logistic regression"
msgstr "Apprentissage de la régression logistique"
-#: modules/process/logistic.c:275
+#: modules/process/logistic.c:274
msgid "_Gaussian blur"
msgstr "Flou _gaussien"
-#: modules/process/logistic.c:288
+#: modules/process/logistic.c:285
msgid "_Number of Gaussians:"
msgstr "_Nombre de gaussiennes :"
-#: modules/process/logistic.c:296
+#: modules/process/logistic.c:293
msgid "_Sobel derivatives"
msgstr "Dérivées de _Sobel :"
-#: modules/process/logistic.c:307
+#: modules/process/logistic.c:303
msgid "_Laplacian"
msgstr "_Laplacien"
-#: modules/process/logistic.c:318
+#: modules/process/logistic.c:313
msgid "_Hessian"
msgstr "_Hessienne"
-#: modules/process/logistic.c:331
+#: modules/process/logistic.c:325
msgid "_Regularization parameter:"
msgstr "Paramètre de _régularisation"
-#: modules/process/logistic.c:623 modules/process/neural.c:1101
+#: modules/process/logistic.c:616 modules/process/neural.c:1108
msgid "Training..."
msgstr "Apprentissage..."
@@ -11285,13 +11634,13 @@ msgstr "/_Correction des données/Marquer les points déconnectés..."
msgid "Mark data disconnected from other values"
msgstr "Marque les données éloignées des autres valeurs"
-#: modules/process/mark_disconn.c:187 modules/process/obj_synth.c:422
-#: modules/process/scars.c:279
+#: modules/process/mark_disconn.c:187 modules/process/obj_synth.c:419
+#: modules/process/scars.c:297
msgid "Positive"
msgstr "Positif"
-#: modules/process/mark_disconn.c:188 modules/process/obj_synth.c:423
-#: modules/process/scars.c:280
+#: modules/process/mark_disconn.c:188 modules/process/obj_synth.c:420
+#: modules/process/scars.c:298
msgid "Negative"
msgstr "Négatif"
@@ -11307,11 +11656,11 @@ msgstr "Type de défaut :"
msgid "Defect _radius:"
msgstr "_Rayon des défauts :"
-#: modules/process/mark_disconn.c:563
+#: modules/process/mark_disconn.c:552
msgid "Filtering..."
msgstr "Filtrage..."
-#: modules/process/mark_disconn.c:590
+#: modules/process/mark_disconn.c:579
msgid "Marking outliers..."
msgstr "Marquer les points aberrants..."
@@ -11327,55 +11676,59 @@ msgstr "/_Masque/Marquer avec..."
msgid "Mask combining and modification"
msgstr "Combinaison et modification de masque"
-#: modules/process/mark_with.c:192
+#: modules/process/mark_with.c:193
msgid "Mark With"
msgstr "Marquer avec"
-#: modules/process/mark_with.c:238
+#: modules/process/mark_with.c:231 modules/process/mask_morph.c:209
+msgid "Operation:"
+msgstr "Opération :"
+
+#: modules/process/mark_with.c:239
msgid "Se_t mask"
msgstr "Ajus_ter le masque"
-#: modules/process/mark_with.c:239
+#: modules/process/mark_with.c:240
msgid "_Add mask"
msgstr "_Ajouter un masque"
-#: modules/process/mark_with.c:240
+#: modules/process/mark_with.c:241
msgid "_Subtract mask"
msgstr "_Soustraire le masque"
-#: modules/process/mark_with.c:241
+#: modules/process/mark_with.c:242
msgid "_Intersect masks"
msgstr "_Intersection des masques"
-#: modules/process/mark_with.c:247
+#: modules/process/mark_with.c:248
msgid "Mark with:"
msgstr "Marquer avec :"
-#: modules/process/mark_with.c:255
+#: modules/process/mark_with.c:256
msgid "with|_Mask"
msgstr "_Masque"
-#: modules/process/mark_with.c:257
+#: modules/process/mark_with.c:258
msgid "with|_Data"
msgstr "_Données"
-#: modules/process/mark_with.c:259
+#: modules/process/mark_with.c:260
msgid "with|_Presentation"
msgstr "_Présentation"
-#: modules/process/mark_with.c:293
+#: modules/process/mark_with.c:297
msgid "Marked data range:"
msgstr "Plages de données marquée :"
-#: modules/process/mark_with.c:301
+#: modules/process/mark_with.c:305
msgid "_Minimum:"
msgstr "_Minimum :"
-#: modules/process/mark_with.c:310
+#: modules/process/mark_with.c:314
msgid "M_aximum:"
msgstr "M_aximum :"
-#: modules/process/mark_with.c:378
+#: modules/process/mark_with.c:382
msgid "Operand"
msgstr "Opérande"
@@ -11411,107 +11764,107 @@ msgstr "Distribuer vers :"
msgid "Preserve existing masks"
msgstr "Conserver les masques existants"
-#: modules/process/mask_edt.c:95
+#: modules/process/mask_edt.c:89
msgid "Performs simple and true Euclidean distance transforms of masks."
msgstr "Applique une transformée de distance aux masques."
-#: modules/process/mask_edt.c:109
+#: modules/process/mask_edt.c:103
msgid "/_Mask/Distanc_e Transform..."
msgstr "/_Masque/Transformé_e de distance..."
-#: modules/process/mask_edt.c:113
+#: modules/process/mask_edt.c:107
msgid "Distance transform of mask"
msgstr "Transformée de distance du masque"
-#: modules/process/mask_edt.c:116
+#: modules/process/mask_edt.c:110
msgid "/_Mask/Thi_n"
msgstr "/_Masque/Affiner"
-#: modules/process/mask_edt.c:120
+#: modules/process/mask_edt.c:114
msgid "Thin mask"
msgstr "Affiner le masque"
-#: modules/process/mask_edt.c:330 modules/process/mask_edt.c:352
+#: modules/process/mask_edt.c:164 modules/process/mask_edt.c:186
msgid "Distance Transform"
msgstr "Carte de distances"
-#: modules/process/mask_edt.c:340
+#: modules/process/mask_edt.c:174
msgid "Interior"
msgstr "Intérieur"
-#: modules/process/mask_edt.c:341
+#: modules/process/mask_edt.c:175
msgid "Exterior"
msgstr "Exterieur"
-#: modules/process/mask_edt.c:342
+#: modules/process/mask_edt.c:176
msgid "Two-sided"
msgstr "Les deux côtés"
-#: modules/process/mask_edt.c:373 modules/tools/maskedit.c:634
+#: modules/process/mask_edt.c:207 modules/tools/maskedit.c:640
msgid "_Distance type:"
msgstr "Type de _distance :"
-#: modules/process/mask_edt.c:394 modules/tools/maskedit.c:640
+#: modules/process/mask_edt.c:228 modules/tools/maskedit.c:646
msgid "Shrink from _border"
msgstr "Éroder à partir du _bord"
-#: modules/process/mask_morph.c:117
+#: modules/process/mask_morph.c:116
msgid "Performs basic morphological operations with masks."
msgstr "Applique des opérations morphologiques basiques avec les masques."
-#: modules/process/mask_morph.c:131
-msgid "/_Mask/Morphological Operation..."
-msgstr "/_Masque/Opération morphologique..."
+#: modules/process/mask_morph.c:130
+msgid "/_Mask/Morpho_logical Operation..."
+msgstr "/_Masque/Opération morpho_logique..."
-#: modules/process/mask_morph.c:135
+#: modules/process/mask_morph.c:134
msgid "Morphological operation with mask"
msgstr "Opération morphologique avec un masque"
-#: modules/process/mask_morph.c:169
+#: modules/process/mask_morph.c:168
msgid "Erosion"
msgstr "Érosion"
-#: modules/process/mask_morph.c:170
+#: modules/process/mask_morph.c:169
msgid "Dilation"
msgstr "Dilatation"
-#: modules/process/mask_morph.c:171 modules/tools/filter.c:242
+#: modules/process/mask_morph.c:170 modules/tools/filter.c:243
msgid "filter|Opening"
msgstr "Ouverture"
-#: modules/process/mask_morph.c:172 modules/tools/filter.c:243
+#: modules/process/mask_morph.c:171 modules/tools/filter.c:244
msgid "filter|Closing"
msgstr "Fermeture"
-#: modules/process/mask_morph.c:173 modules/tools/filter.c:244
+#: modules/process/mask_morph.c:172 modules/tools/filter.c:245
msgid "ASF Opening"
msgstr "Ouverture ASF"
-#: modules/process/mask_morph.c:174 modules/tools/filter.c:245
+#: modules/process/mask_morph.c:173 modules/tools/filter.c:246
msgid "ASF Closing"
msgstr "Fermeture ASF"
-#: modules/process/mask_morph.c:178
+#: modules/process/mask_morph.c:177
msgid "Octagon"
msgstr "Octogone"
-#: modules/process/mask_morph.c:181
+#: modules/process/mask_morph.c:180
msgid "Another mask"
msgstr "Autre masque"
-#: modules/process/mask_morph.c:192
+#: modules/process/mask_morph.c:191
msgid "Morphological Operation"
msgstr "Opération morphologique"
-#: modules/process/mask_morph.c:224
+#: modules/process/mask_morph.c:223
msgid "Structuring element:"
msgstr "Élément structurant : "
-#: modules/process/mask_morph.c:238 modules/tools/maskedit.c:524
+#: modules/process/mask_morph.c:237 modules/tools/maskedit.c:528
msgid "_Radius:"
msgstr "_Rayon :"
-#: modules/process/mask_morph.c:249
+#: modules/process/mask_morph.c:248
msgid "_Mask:"
msgstr "_Masque : "
@@ -11519,39 +11872,59 @@ msgstr "_Masque : "
msgid "_Trim empty borders"
msgstr "_Tronquer les bords vides"
-#: modules/process/maskcor.c:86
+#: modules/process/mask_noisify.c:83
+msgid "Adds salt and/or pepper noise to mask."
+msgstr "Ajoute du bruit de type sel et/ou poivre au masque."
+
+#: modules/process/mask_noisify.c:97
+msgid "/_Mask/_Noisify..."
+msgstr "/_Masque/Ajouter du bruit..."
+
+#: modules/process/mask_noisify.c:101
+msgid "Add noise to mask"
+msgstr "Ajouter du bruit au masque"
+
+#: modules/process/mask_noisify.c:141
+msgid "Noisify Mask"
+msgstr "Ajouter du bruit au masque"
+
+#: modules/process/mask_noisify.c:184
+msgid "_Alter only boundaries"
+msgstr "_Altérer seulement les bords"
+
+#: modules/process/maskcor.c:87
msgid "Creates mask by correlation with another data."
msgstr "Crée un masque par corrélation avec d'autres données."
-#: modules/process/maskcor.c:100
+#: modules/process/maskcor.c:101
msgid "/M_ultidata/_Mask by Correlation..."
msgstr "/M_ultidonnées/_Masquer par corrélation..."
-#: modules/process/maskcor.c:104
+#: modules/process/maskcor.c:105
msgid "Create mask by correlation with another data"
msgstr "Créer un masque par corrélation avec d'autres données."
-#: modules/process/maskcor.c:141
+#: modules/process/maskcor.c:142
msgid "Mask by Correlation"
msgstr "Masquer par corrélation"
-#: modules/process/maskcor.c:165
+#: modules/process/maskcor.c:166
msgid "Correlation _kernel:"
msgstr "Noyau de correction :"
-#: modules/process/maskcor.c:172
+#: modules/process/maskcor.c:173
msgid "Objects marked"
msgstr "Objets marqués"
-#: modules/process/maskcor.c:173
+#: modules/process/maskcor.c:174
msgid "Correlation maxima"
msgstr "Maximum de corrélation"
-#: modules/process/maskcor.c:174 modules/process/maskcor.c:356
+#: modules/process/maskcor.c:175 modules/process/maskcor.c:360
msgid "Correlation score"
msgstr "Score de corrélation"
-#: modules/process/maskcor.c:183
+#: modules/process/maskcor.c:185
msgid "Correlation _method:"
msgstr "_Méthode de corrélation"
@@ -11581,8 +11954,8 @@ msgid "/_Mask/_Extract Mask"
msgstr "/_Masque/Extraire le masque"
#: modules/process/maskops.c:78
-msgid "Extract mask to a new channel"
-msgstr "Extrait le masque vers un nouveau canal"
+msgid "Extract mask to a new image"
+msgstr "Extrait le masque vers une nouvelle image"
#: modules/process/maskops.c:81
msgid "/_Grains/_Remove Edge-Touching"
@@ -11608,35 +11981,31 @@ msgstr "Rogne les régions non croisées de deux images"
msgid "Mutual Crop"
msgstr "Rognage mutuel"
-#: modules/process/mcrop.c:174
+#: modules/process/mcrop.c:173
msgid "_Select second argument:"
msgstr "_Sélectionner le second opérande :"
-#: modules/process/measure_lattice.c:174
+#: modules/process/measure_lattice.c:165
msgid "Measures parameters of two-dimensional lattices."
msgstr "Mesure les paramètres de mailles bi-dimensionnelles."
-#: modules/process/measure_lattice.c:188
+#: modules/process/measure_lattice.c:179
msgid "/_Statistics/Measure _Lattice..."
msgstr "/_Statistiques/Mesure de mai_lle..."
-#: modules/process/measure_lattice.c:192
+#: modules/process/measure_lattice.c:183
msgid "Measure lattice"
msgstr "Mesure de maille"
-#: modules/process/measure_lattice.c:253
+#: modules/process/measure_lattice.c:243
msgid "Measure Lattice"
msgstr "Mesure de maille"
-#: modules/process/measure_lattice.c:259
-msgid "_Refine"
-msgstr "Affine_r"
-
-#: modules/process/measure_lattice.c:330
+#: modules/process/measure_lattice.c:320
msgid "_ACF"
msgstr "_ACF"
-#: modules/process/measure_lattice.c:331
+#: modules/process/measure_lattice.c:321
msgid "_PSDF"
msgstr "_PSDF"
@@ -11652,30 +12021,30 @@ msgstr "Mai_lle"
msgid "_Vectors"
msgstr "_Vecteurs"
-#: modules/process/measure_lattice.c:596
+#: modules/process/measure_lattice.c:589
msgid "Save Lattice Parameters"
msgstr "Enregistrer les paramètres de maille"
-#: modules/process/measure_lattice.c:634
+#: modules/process/measure_lattice.c:627
#, c-format
msgid "Vector %d:"
msgstr "Vecteur %d :"
-#: modules/process/measure_lattice.c:643
+#: modules/process/measure_lattice.c:636
#, c-format
msgid "Length %d:"
msgstr "Longueur %d :"
-#: modules/process/measure_lattice.c:650
+#: modules/process/measure_lattice.c:643
#, c-format
msgid "Angle %d:"
msgstr "Angle %d :"
-#: modules/process/measure_lattice.c:665
+#: modules/process/measure_lattice.c:657
msgid "Angle:"
msgstr "Angle :"
-#: modules/process/measure_lattice.c:681
+#: modules/process/measure_lattice.c:673
msgid "Lattice Parameters"
msgstr "Paramètres de maille"
@@ -11699,11 +12068,11 @@ msgstr "Nivelage médian..."
msgid "Median Level"
msgstr "Niveau médian"
-#: modules/process/median-bg.c:199 modules/process/sphere-revolve.c:237
+#: modules/process/median-bg.c:199 modules/process/sphere-revolve.c:336
msgid "Real _radius:"
msgstr "_Rayon réel :"
-#: modules/process/median-bg.c:209 modules/process/sphere-revolve.c:247
+#: modules/process/median-bg.c:209 modules/process/sphere-revolve.c:346
msgid "_Pixel radius:"
msgstr "Rayon du _pixel :"
@@ -11743,7 +12112,7 @@ msgstr "Premier opérande"
msgid "Second operand"
msgstr "Second opérande"
-#: modules/process/merge.c:197 modules/xyz/xyz_raster.c:643
+#: modules/process/merge.c:197 modules/xyz/xyz_raster.c:612
msgid "Average"
msgstr "Moyenne"
@@ -11795,6 +12164,225 @@ msgstr "Ajouter le _masque sur les pixels externes"
msgid "Merged images"
msgstr "Images fusionnées"
+#: modules/process/mfm_current.c:163
+msgid "Simulation of current line magnetic field"
+msgstr "Simulation du champ magnétique de la ligne de courant"
+
+#: modules/process/mfm_current.c:177
+msgid "/SPM M_odes/_MFM/_Current Line Field..."
+msgstr "/M_odes SPM/_MFM/Champ d'une ligne de courant..."
+
+#: modules/process/mfm_current.c:181
+msgid "Simulate stray field above current line"
+msgstr "Simuler le champ résiduel au-dessus de la ligne de courant"
+
+#: modules/process/mfm_current.c:280 modules/process/mfm_parallel.c:282
+msgid "Simulated field"
+msgstr "Champ simulé"
+
+#: modules/process/mfm_current.c:322 modules/process/mfm_field.c:266
+#: modules/process/mfm_parallel.c:324
+msgid "Point charge"
+msgstr "Charge ponctuelle"
+
+#: modules/process/mfm_current.c:323 modules/process/mfm_field.c:267
+#: modules/process/mfm_parallel.c:325
+msgid "Bar"
+msgstr "Barre"
+
+#: modules/process/mfm_current.c:330
+msgid "Current Line Stray Field"
+msgstr "Champ résiduel de la ligne de courant"
+
+#: modules/process/mfm_current.c:415
+msgid "Output"
+msgstr "Sortie"
+
+#: modules/process/mfm_current.c:420 modules/process/mfm_field.c:320
+#: modules/process/mfm_parallel.c:415
+msgid "_Output plane height:"
+msgstr "Hauteur du plan de sortie :"
+
+#: modules/process/mfm_current.c:428
+msgid "_Stripe width:"
+msgstr "Largeur de bande :"
+
+#: modules/process/mfm_current.c:436
+msgid "Stripe _current:"
+msgstr "Courant dans la bande :"
+
+#: modules/process/mfm_current.c:444
+msgid "_Position:"
+msgstr "_Position :"
+
+#: modules/process/mfm_current.c:461
+msgid "Probe"
+msgstr "Sonde"
+
+#: modules/process/mfm_current.c:469
+msgid "P_robe type:"
+msgstr "Type de sonde :"
+
+#: modules/process/mfm_current.c:475 modules/process/mfm_field.c:389
+#: modules/process/mfm_parallel.c:482
+msgid "Tip _magnetization:"
+msgstr "_Magnétisation de la sonde :"
+
+#: modules/process/mfm_current.c:484 modules/process/mfm_field.c:397
+#: modules/process/mfm_parallel.c:491
+msgid "Bar width _x:"
+msgstr "largeur de la barre _x :"
+
+#: modules/process/mfm_current.c:493 modules/process/mfm_field.c:405
+#: modules/process/mfm_parallel.c:500
+msgid "Bar width _y:"
+msgstr "largeur de la barre _y :"
+
+#: modules/process/mfm_current.c:502 modules/process/mfm_field.c:413
+#: modules/process/mfm_parallel.c:509
+msgid "Bar length (_z):"
+msgstr "Longueur de la barre (_z) :"
+
+#: modules/process/mfm_field.c:146
+msgid "Simulation of magnetic field above perpendicular media"
+msgstr "Simulation de champ magnétique au-dessus d'un milieu perpendiculaire"
+
+#: modules/process/mfm_field.c:160
+msgid "/SPM M_odes/_MFM/_Perpendicular Media Field..."
+msgstr "/M_odes SPM/_MFM/Champ d'un milieu _perpendiculaire..."
+
+#: modules/process/mfm_field.c:164
+msgid "Compute stray field above perpendicular magnetic medium"
+msgstr ""
+"Calculer le champ résiduel au-dessus du milieu magnétique perpendiculaire"
+
+#: modules/process/mfm_field.c:276
+msgid "Perpendicular Media Stray Field"
+msgstr "Champ résiduel du milieu perpendiculaire"
+
+#: modules/process/mfm_field.c:328 modules/process/mfm_parallel.c:423
+msgid "_Film thickness:"
+msgstr "Épaisseur du _film :"
+
+#: modules/process/mfm_field.c:336
+msgid "_Magnetic charge:"
+msgstr "Charge _magnétique :"
+
+#: modules/process/mfm_field.c:344
+msgid "Include domain _walls"
+msgstr "Inclure les murs du domaine"
+
+#: modules/process/mfm_field.c:354
+msgid "_Exchange constant:"
+msgstr "Constante d'échange :"
+
+#: modules/process/mfm_field.c:362
+msgid "_Uniaxial anisotropy:"
+msgstr "Anisotropie _uniaxiale :"
+
+#: modules/process/mfm_field.c:383 modules/process/mfm_parallel.c:476
+msgid "_Probe type:"
+msgstr "Type de sonde :"
+
+#: modules/process/mfm_findshift.c:88
+msgid "Lift height difference estimation from data blur"
+msgstr ""
+"Estimation de la différence de hauteur de levage à partir du flou de l'image"
+
+#: modules/process/mfm_findshift.c:102
+msgid "/SPM M_odes/_MFM/_Estimate Shift in Z..."
+msgstr "/M_odes SPM/_MFM/_Estimer le décalage en z..."
+
+#: modules/process/mfm_findshift.c:106
+msgid "Estimate lift height difference in MFM data"
+msgstr "Estimer la différence de hauteur de levage dans les données MFM"
+
+#: modules/process/mfm_findshift.c:166 modules/process/psf.c:340
+msgid "Searching..."
+msgstr "Recherche..."
+
+#: modules/process/mfm_findshift.c:196
+msgid "Estimated shift:"
+msgstr "Décalage estimé :"
+
+#: modules/process/mfm_findshift.c:211
+msgid "Shifted field difference"
+msgstr "Différence du champ décalé"
+
+#: modules/process/mfm_findshift.c:228
+msgid "Estimate Lift Height Shift"
+msgstr "Estimer le décalage de hauteur de levage"
+
+#: modules/process/mfm_findshift.c:255
+msgid "Data to compare:"
+msgstr "Données à comparer :"
+
+#: modules/process/mfm_findshift.c:261
+msgid "Search _from:"
+msgstr "Rechercher à partir de :"
+
+#: modules/process/mfm_findshift.c:269
+msgid "Search _to:"
+msgstr "Rechercher jusqu'à :"
+
+#: modules/process/mfm_parallel.c:165
+msgid "Simulation of parallel magnetic media"
+msgstr "Simulation d'un milieu magnétique parallèle"
+
+#: modules/process/mfm_parallel.c:179
+msgid "/SPM M_odes/_MFM/Para_llel Media Field..."
+msgstr "/M_odes SPM/_MFM/Champ d'un milieu para_llèle..."
+
+#: modules/process/mfm_parallel.c:183
+msgid "Simulate stray field above parallel magnetic medium"
+msgstr "Simuler le champ résiduel au-dessus d'un milieu magnétique parallèle"
+
+#: modules/process/mfm_parallel.c:331
+msgid "Parallel Media Stray Field"
+msgstr "Champ résiduel d'un milieu parallèle"
+
+#: modules/process/mfm_parallel.c:431
+msgid "_Remanent magnetization:"
+msgstr "Magnétisation _rémanente :"
+
+#: modules/process/mfm_parallel.c:439
+msgid "Size _A (dir. left):"
+msgstr "Taille _A (direction gauche) :"
+
+#: modules/process/mfm_parallel.c:447
+msgid "Size _B (dir. right):"
+msgstr "Taille _B (direction droite) :"
+
+#: modules/process/mfm_parallel.c:455
+msgid "_Gap size:"
+msgstr "Taille de l'interstice : "
+
+#: modules/process/mfm_shift.c:87
+msgid "Simulation of magnetic field z component change for another level"
+msgstr ""
+"Simulation du changement de la composante z du champ magnétique vers un "
+"autre niveau "
+
+#: modules/process/mfm_shift.c:101
+msgid "/SPM M_odes/_MFM/_Field Shift in Z..."
+msgstr "/M_odes SPM/_MFM/Décalage du champ en z..."
+
+#: modules/process/mfm_shift.c:105
+msgid "Compute stray field shift for another z level"
+msgstr "Calculer le décalage du champ résiduel pour un autre plan z"
+
+#: modules/process/mfm_shift.c:146
+msgid "Shifted field"
+msgstr "Champ décalé"
+
+#: modules/process/mfm_shift.c:164
+msgid "Stray Field Plane Shift"
+msgstr "Décalage du plan du champ résiduel"
+
+#: modules/process/mfm_shift.c:209
+msgid "_Z shift by:"
+msgstr "Décalage Z :"
+
#: modules/process/nanoindent_adjust.c:89
msgid "Adjust images of two indentor prints."
msgstr "Ajuster les images de deux empreintes d'indenteurs."
@@ -11831,14 +12419,14 @@ msgstr "Pivote_r les données"
msgid "E_xtrapolate result data out of measured range"
msgstr "E_xtrapoler les résultats au-delà de la plage mesurée"
-#: modules/process/nanoindent_adjust.c:295
+#: modules/process/nanoindent_adjust.c:296
msgid ""
"Tip has different range/resolution ratio than image. Tip will be resampled."
msgstr ""
"La sonde a un rapport plage/résolution différent de l'image. La sonde va "
"être ré-échantillonnée."
-#: modules/process/nanoindent_adjust.c:334
+#: modules/process/nanoindent_adjust.c:335
msgid "Immersed detail data"
msgstr "Données du détail incrusté"
@@ -11880,246 +12468,234 @@ msgid "error"
msgstr "Erreur"
# Légende du graphe d'erreur, on omet le NN (Neural Network)
-#: modules/process/neural.c:503
+#: modules/process/neural.c:504
msgid "NN training error"
msgstr "Erreur d'apprentissage"
-#: modules/process/neural.c:516
+#: modules/process/neural.c:517
msgid "Training"
msgstr "Apprentissage"
-#: modules/process/neural.c:520
+#: modules/process/neural.c:521
msgid "_Model:"
msgstr "_Modèle :"
-#: modules/process/neural.c:530
+#: modules/process/neural.c:532
msgid "_Signal:"
msgstr "_Signal :"
-#: modules/process/neural.c:541
+#: modules/process/neural.c:544
msgid "Training ste_ps:"
msgstr "Étapes d'a_pprentissage : "
-#: modules/process/neural.c:557
+#: modules/process/neural.c:561
msgid "Model"
msgstr "Modèle"
-#: modules/process/neural.c:558
+#: modules/process/neural.c:562
msgid "Signal"
msgstr "Signal"
-#: modules/process/neural.c:575
+#: modules/process/neural.c:579
msgid "verb|_Train"
msgstr "Lancer l'appren_tissage"
-#: modules/process/neural.c:580
+#: modules/process/neural.c:584
msgid "Re_initialize"
msgstr "Réinitialiser"
-#: modules/process/neural.c:613
+#: modules/process/neural.c:617
msgid "Network"
msgstr "Réseau"
-#: modules/process/neural.c:619
+#: modules/process/neural.c:623
msgid "Window _width:"
msgstr "Largeur de fenêtre :"
-#: modules/process/neural.c:627
+#: modules/process/neural.c:631
msgid "Window h_eight:"
msgstr "Hauteur de fenêtre :"
-#: modules/process/neural.c:635
+#: modules/process/neural.c:639
msgid "_Hidden nodes:"
msgstr "Nœuds cac_hés : "
-#: modules/process/neural.c:643
+#: modules/process/neural.c:647
msgid "Result Units"
msgstr "Unités du résultat"
-#: modules/process/neural.c:650
+#: modules/process/neural.c:654
msgid "Power of source _XY:"
msgstr "Puissance de la source _XY :"
-#: modules/process/neural.c:658
+#: modules/process/neural.c:663
msgid "Power of source _Z:"
msgstr "Puissance de la source _Z :"
-#: modules/process/neural.c:666
+#: modules/process/neural.c:672
msgid "_Fixed units:"
msgstr "Unités _fixées :"
-#: modules/process/neural.c:676
+#: modules/process/neural.c:683
msgid "Networks"
msgstr "Réseaux"
-#: modules/process/neural.c:723
+#: modules/process/neural.c:730
msgid "Network _name:"
msgstr "_Nom du réseau :"
-#: modules/process/neural.c:775
+#: modules/process/neural.c:782
msgid "Apply Neural Network"
msgstr "Appliquer un réseau neuronal"
-#: modules/process/neural.c:798
+#: modules/process/neural.c:805
msgid "_Scale proportionally to input"
msgstr "Mettre à l'échelle _proportionnellement à l'entrée"
-#: modules/process/neural.c:929
+#: modules/process/neural.c:936
msgid "Model and signal are not compatible."
msgstr "Le modèle et le signal ne sont pas compatibles."
-#: modules/process/neural.c:937
+#: modules/process/neural.c:944
msgid "A field dimension is too small for chosen window size."
msgstr ""
"Une des dimensions de champ est trop petite par rapport à la taille de "
"fenêtre choisie."
-#: modules/process/neural.c:1183 modules/process/neural.c:1349
+#: modules/process/neural.c:1190 modules/process/neural.c:1356
msgid "Evaluating..."
msgstr "Évaluation..."
-#: modules/process/neural.c:1309
+#: modules/process/neural.c:1316
msgid "Training was canceled."
msgstr "L'apprentissage a été annulé."
-#: modules/process/neural.c:1319
+#: modules/process/neural.c:1326
#, c-format
msgid "Mean difference: %.*f %s"
msgstr "Différence moyenne : %.*f %s"
-#: modules/process/neural.c:1371
+#: modules/process/neural.c:1378
msgid "Evaluated signal"
msgstr "Signal évalué"
-#: modules/process/noise_synth.c:196
+#: modules/process/noise_synth.c:194
msgid "Generates uncorrelated random noise."
msgstr "Génère un bruit aléatoire non corrélé."
-#: modules/process/noise_synth.c:210
+#: modules/process/noise_synth.c:208
msgid "/S_ynthetic/_Noise..."
msgstr "/S_ynthèse/Bruit..."
-#: modules/process/noise_synth.c:214
+#: modules/process/noise_synth.c:212
msgid "Generate surface of uncorrelated noise"
msgstr "Générer une surface à partir d'un bruit non corrélé"
-#: modules/process/noise_synth.c:334
+#: modules/process/noise_synth.c:332
msgid "Random Noise"
msgstr "Bruit aléatoire"
-#: modules/process/obj_synth.c:274
+#: modules/process/obj_synth.c:270
msgid "Spheres"
msgstr "Sphères"
-#: modules/process/obj_synth.c:275
+#: modules/process/obj_synth.c:271
msgid "Boxes"
msgstr "Boîtes"
-#: modules/process/obj_synth.c:276
+#: modules/process/obj_synth.c:272
msgid "Cones"
msgstr "Cônes"
-#: modules/process/obj_synth.c:277
+#: modules/process/obj_synth.c:273
msgid "Pyramids"
msgstr "Pyramides"
-#: modules/process/obj_synth.c:278
+#: modules/process/obj_synth.c:274
msgid "Diamonds"
msgstr "Losanges"
-#: modules/process/obj_synth.c:279
+#: modules/process/obj_synth.c:275
msgid "Tetrahedrons"
msgstr "Tétraèdres"
-#: modules/process/obj_synth.c:280
+#: modules/process/obj_synth.c:276
msgid "Nuggets"
msgstr "Pépites"
-#: modules/process/obj_synth.c:281
+#: modules/process/obj_synth.c:277
msgid "Thatches"
msgstr "Chaumes"
-#: modules/process/obj_synth.c:282
+#: modules/process/obj_synth.c:278
msgid "Tents"
msgstr "Tentes"
-#: modules/process/obj_synth.c:283
+#: modules/process/obj_synth.c:279
msgid "Gaussians"
msgstr "Gaussiennes"
-#: modules/process/obj_synth.c:284
+#: modules/process/obj_synth.c:280
msgid "Doughnuts"
msgstr "Beignets"
-#: modules/process/obj_synth.c:285
+#: modules/process/obj_synth.c:281
msgid "Parabolic bumps"
msgstr "Bosses paraboliques"
-#: modules/process/obj_synth.c:291
+#: modules/process/obj_synth.c:287
msgid "Generates randomly patterned surfaces by placing objects."
msgstr "Génère des motifs de surface aléatoire en plaçant des objets."
-#: modules/process/obj_synth.c:305
-msgid "/S_ynthetic/_Objects..."
-msgstr "/S_ynthèse/_Objets..."
+#: modules/process/obj_synth.c:301
+msgid "/S_ynthetic/_Deposition/_Objects..."
+msgstr "/S_ynthèse/_Dépôt/_Objets..."
-#: modules/process/obj_synth.c:309
+#: modules/process/obj_synth.c:305
msgid "Generate surface of randomly placed objects"
msgstr "Générer une surface avec des objets placés aléatoirement"
-#: modules/process/obj_synth.c:424
+#: modules/process/obj_synth.c:421
msgid "Both (random)"
msgstr "Les deux (aléatoire)"
-#: modules/process/obj_synth.c:439
+#: modules/process/obj_synth.c:436
msgid "Random Objects"
msgstr "Objets aléatoires"
-#: modules/process/obj_synth.c:513
-msgid "_Shape:"
-msgstr "Forme :"
-
-#: modules/process/obj_synth.c:531
-msgid "obj."
-msgstr "obj."
-
-#: modules/process/obj_synth.c:551
+#: modules/process/obj_synth.c:549
msgid "Aspect Ratio"
msgstr "Rapport d'aspect"
-#: modules/process/obj_synth.c:558
+#: modules/process/obj_synth.c:556
msgid "_Aspect ratio:"
msgstr "Rapport d'_aspect :"
-#: modules/process/obj_synth.c:588
+#: modules/process/obj_synth.c:586
msgid "Scales _with size"
msgstr "Mettre à l'échelle avec la taille"
-#: modules/process/obj_synth.c:612
+#: modules/process/obj_synth.c:611
msgid "_Feature type:"
msgstr "Type d'objet :"
-#: modules/process/obj_synth.c:807
-msgid "_Truncate:"
-msgstr "_Tronquer :"
-
-#: modules/process/otsu_threshold.c:39 modules/process/otsu_threshold.c:59
+#: modules/process/otsu_threshold.c:40 modules/process/otsu_threshold.c:60
msgid "Automated threshold using Otsu's method on heights."
msgstr "Seuillage basé sur la méthode d'Otsu appliquée aux hauteurs."
-#: modules/process/otsu_threshold.c:55
-msgid "/_Grains/_Mark by Otsu's..."
+#: modules/process/otsu_threshold.c:56
+msgid "/_Grains/_Mark by Otsu's"
msgstr "/_Grains/_Marquer par la méthode d'Otsu..."
-#: modules/process/outliers.c:40
+#: modules/process/outliers.c:41
msgid "Creates mask of outliers."
msgstr "Crée un masque des points aberrants."
-#: modules/process/outliers.c:54
+#: modules/process/outliers.c:55
msgid "/_Correct Data/Mask of _Outliers"
msgstr "/_Correction des données/Marquer les p_oints aberrants"
-#: modules/process/outliers.c:58
+#: modules/process/outliers.c:59
msgid "Mark data farther than 3σ from mean value"
msgstr "Marque les données éloignées de plus de 3σ de la valeur moyenne"
@@ -12143,80 +12719,100 @@ msgstr "Motif"
msgid "_Pattern:"
msgstr "Motif :"
-#: modules/process/pat_synth.c:812
+#: modules/process/pat_synth.c:813
msgid "Flat"
msgstr "Plateau"
-#: modules/process/pat_synth.c:820
+#: modules/process/pat_synth.c:821
msgid "_Flat width:"
msgstr "Largeur :"
-#: modules/process/pat_synth.c:837 modules/process/pat_synth.c:1139
-#: modules/process/pat_synth.c:1474
+#: modules/process/pat_synth.c:838 modules/process/pat_synth.c:1140
+#: modules/process/pat_synth.c:1475
msgid "_Slope width:"
msgstr "Largeur :"
-#: modules/process/pat_synth.c:1099
+#: modules/process/pat_synth.c:1100
msgid "Top"
msgstr "Haut"
-#: modules/process/pat_synth.c:1106
+#: modules/process/pat_synth.c:1107
msgid "Flat _top width:"
msgstr "Largeur :"
-#: modules/process/pat_synth.c:1114
+#: modules/process/pat_synth.c:1115
msgid "Bottom"
msgstr "Bas"
-#: modules/process/pat_synth.c:1122
+#: modules/process/pat_synth.c:1123
msgid "Flat _bottom width:"
msgstr "Largeur :"
-#: modules/process/pat_synth.c:1440
+#: modules/process/pat_synth.c:1441
msgid "_Distance:"
msgstr "_Distance :"
-#: modules/process/pid.c:96
+#: modules/process/phase_synth.c:136
+msgid "Generates phase-separated structures."
+msgstr "Génère des structures séparées par des phases"
+
+#: modules/process/phase_synth.c:150
+msgid "/S_ynthetic/P_hases..."
+msgstr "/S_ynthèse/P_hases..."
+
+#: modules/process/phase_synth.c:154
+msgid "Generate surface with separated phases"
+msgstr "Générer une surface constituée de phases séparées."
+
+#: modules/process/phase_synth.c:203
+msgid "Separated Phases"
+msgstr "Phases séparées"
+
+#: modules/process/phase_synth.c:287
+msgid "Size s_pread:"
+msgstr "Taille d'étalement :"
+
+#: modules/process/pid.c:95
msgid "A simple PID simulator"
msgstr "Simulateur PID basique"
-#: modules/process/pid.c:110
+#: modules/process/pid.c:109
msgid "/_Tip and Indentation/_PID simulation..."
msgstr "/Sonde et indentation/Simulation _PID..."
-#: modules/process/pid.c:114
+#: modules/process/pid.c:113
msgid "Simulate PID effects on measurement"
msgstr "Simuler les effets de la régulation PID sur la mesure"
-#: modules/process/pid.c:158
+#: modules/process/pid.c:157
msgid "PID FW result"
msgstr "PID résultat aller"
-#: modules/process/pid.c:167
+#: modules/process/pid.c:166
msgid "PID FW max. force"
msgstr "PID force maximale aller"
-#: modules/process/pid.c:176
+#: modules/process/pid.c:175
msgid "PID REV result"
msgstr "PID résultat retour"
-#: modules/process/pid.c:185
+#: modules/process/pid.c:184
msgid "PID REV max. force"
msgstr "PID force maximale retour"
-#: modules/process/pid.c:198
+#: modules/process/pid.c:196
msgid "PID simulation"
msgstr "Simulation PID"
-#: modules/process/pid.c:215
+#: modules/process/pid.c:214
msgid "_Proportional:"
msgstr "_Proportionnelle :"
-#: modules/process/pid.c:221
+#: modules/process/pid.c:220
msgid "_Integral:"
msgstr "_Intégrale :"
-#: modules/process/pid.c:227
+#: modules/process/pid.c:226
msgid "_Integration steps:"
msgstr "Passes d'_intégration :"
@@ -12224,15 +12820,15 @@ msgstr "Passes d'_intégration :"
msgid "_Derivative:"
msgstr "_Dérivée :"
-#: modules/process/pid.c:241
+#: modules/process/pid.c:240
msgid "PID/scan speed _ratio:"
msgstr "Rapport de vitesse PID/scan :"
-#: modules/process/pid.c:253
+#: modules/process/pid.c:255
msgid "Force strength:"
msgstr "Force de résistance :"
-#: modules/process/pid.c:259
+#: modules/process/pid.c:261
msgid "Force setpoint:"
msgstr "Force de consigne :"
@@ -12240,7 +12836,7 @@ msgstr "Force de consigne :"
msgid "Scanning..."
msgstr "Balayage en cours..."
-#: modules/process/pid.c:396
+#: modules/process/pid.c:401
msgid "Computation diverged, try to change parameters"
msgstr "Le calcul diverge, essayez de modifier les paramètres"
@@ -12260,23 +12856,23 @@ msgstr "Applique une distorsion polynomiale dans le plan horizontal"
msgid "Distort by Polynomial"
msgstr "Distorsion polynomiale"
-#: modules/process/polydistort.c:282
+#: modules/process/polydistort.c:285
msgid "Ori_ginal"
msgstr "Ori_ginal"
-#: modules/process/polydistort.c:283
+#: modules/process/polydistort.c:286
msgid "_Transformed"
msgstr "_Transformé"
-#: modules/process/polydistort.c:289
+#: modules/process/polydistort.c:292
msgid "X Coefficients"
msgstr "Coefficients X"
-#: modules/process/polydistort.c:303
+#: modules/process/polydistort.c:306
msgid "Y Coefficients"
msgstr "Coefficients Y"
-#: modules/process/polydistort.c:499
+#: modules/process/polydistort.c:502
msgid "Distorted"
msgstr "Distordu"
@@ -12312,26 +12908,26 @@ msgstr "Données mises à niveau"
msgid "_Horizontal polynom degree:"
msgstr "Degré du polynôme _horizontal : "
-#: modules/process/polylevel.c:450
+#: modules/process/polylevel.c:451
msgid "_Vertical polynom degree:"
msgstr "Degré du polynôme _vertical : "
-#: modules/process/polylevel.c:456
+#: modules/process/polylevel.c:458
msgid "_Same degrees"
msgstr "Degré_s identiques"
-#: modules/process/polylevel.c:474
+#: modules/process/polylevel.c:476
msgid "_Maximum polynom degree:"
msgstr "Degré _maximum du polynôme"
-#: modules/process/polylevel.c:561
+#: modules/process/polylevel.c:564
msgid "Polynomial Coefficients"
msgstr "Coefficients polynomiaux"
-#: modules/process/polylevel.c:934 modules/tools/distance.c:594
+#: modules/process/polylevel.c:937 modules/tools/distance.c:594
#: modules/tools/selectionmanager.c:720
msgid "Save Table"
-msgstr "Sauver le tableau"
+msgstr "Enregistrer le tableau"
#: modules/process/presentationops.c:56
msgid "Basic operations with presentation: extraction, removal."
@@ -12350,8 +12946,8 @@ msgid "/_Presentation/E_xtract Presentation"
msgstr "/_Présentation/E_xtraire la présentation"
#: modules/process/presentationops.c:81
-msgid "Extract presentation to a new channel"
-msgstr "Extraire la présentation vers un nouveau canal"
+msgid "Extract presentation to a new image"
+msgstr "Extraire la présentation vers une nouvelle image"
#: modules/process/presentationops.c:84
msgid "/_Presentation/_Attach Presentation..."
@@ -12377,6 +12973,10 @@ msgstr "Attacher une présentation"
msgid "_Data to attach:"
msgstr "_Données à attacher :"
+#: modules/process/preview.h:245
+msgid "Combine with existing mask:"
+msgstr "Combiner avec le masque existant"
+
#: modules/process/psdf_logphi.c:76
msgid ""
"Two-dimensional FFT (Fast Fourier Transform) transformed to coordinates (log-"
@@ -12397,10 +12997,81 @@ msgstr "Calculer la PSDF en coordonnées Log-Phi"
msgid "Log-Phi PSDF"
msgstr "PSDF Log-Phi"
-#: modules/process/psdf_logphi.c:275 modules/process/wpour_mark.c:320
+#: modules/process/psdf_logphi.c:276 modules/process/wpour_mark.c:320
msgid "Gaussian _smoothing:"
msgstr "Floutage gau_ssien :"
+#: modules/process/psf-fit.c:165
+msgid "Gaussian (asymmetric)"
+msgstr "Gaussienne (asymétrique)"
+
+#: modules/process/psf-fit.c:177
+msgid "Point spread function estimation by fitting explicit function form."
+msgstr ""
+"Estimation de la réponse impulsionnelle (PSF) par l'ajustement d'une "
+"fonction de forme explicite."
+
+#: modules/process/psf-fit.c:191
+msgid "/_Statistics/_PSF Fit..."
+msgstr "/_Statistiques/Ajustement de la _PSF..."
+
+#: modules/process/psf-fit.c:195
+msgid "Fit PSF from known data and image"
+msgstr "Ajustement de la PSF à partir de données et d'une image"
+
+#: modules/process/psf-fit.c:246 modules/process/psf.c:181
+#: modules/process/psf.c:230
+msgid "PSF"
+msgstr "PSF"
+
+#: modules/process/psf-fit.c:254 modules/process/psf.c:195
+msgid "PSF*P"
+msgstr "PSF*P"
+
+#: modules/process/psf-fit.c:271
+msgid "Fit PSF"
+msgstr "Ajuster la PSF"
+
+#: modules/process/psf-fit.c:289 modules/process/psf.c:286
+msgid "_Ideal response:"
+msgstr "Réponse _idéale :"
+
+#: modules/process/psf.c:117
+msgid "Point spread function estimation"
+msgstr "Estimation de la réponse impulsionnelle (PSF)"
+
+#: modules/process/psf.c:131
+msgid "/_Statistics/_PSF Guess..."
+msgstr "/_Statistiques/Estimation de la _PSF..."
+
+#: modules/process/psf.c:135
+msgid "Estimate PSF from known data and image"
+msgstr "Estimation de la PSF à partir de données et d'une image connues"
+
+#: modules/process/psf.c:208
+msgid "PSF*P - I"
+msgstr "PSF*P - I"
+
+#: modules/process/psf.c:231
+msgid "Convolved"
+msgstr "Convoluée"
+
+#: modules/process/psf.c:237
+msgid "Estimate PSF"
+msgstr "PSF estimée"
+
+#: modules/process/psf.c:238
+msgid "_Fit"
+msgstr "Ajustement"
+
+#: modules/process/psf.c:295
+msgid "_Display:"
+msgstr "Affichage :"
+
+#: modules/process/psf.c:301
+msgid "_Sigma init:"
+msgstr "_Sigma initial :"
+
#: modules/process/rank.c:92
msgid "Enhances local contrast using a rank transform."
msgstr "Améliore le contraste local à l'aide d'une transformée de rang."
@@ -12450,7 +13121,7 @@ msgstr "/Opérations _basiques/Rotation..."
msgid "Rotate by arbitrary angle"
msgstr "Rotation par un angle quelconque"
-#: modules/process/rotate.c:192
+#: modules/process/rotate.c:192 modules/volume/volume_swaxes.c:651
msgid "Rotated Data"
msgstr "Données pivotées"
@@ -12506,64 +13177,64 @@ msgstr "Données mises à l'échelle"
msgid "verb|Scale"
msgstr "Mettre à l'échelle"
-#: modules/process/scale.c:216
+#: modules/process/scale.c:217
msgid "Scale by _ratio:"
msgstr "Rapport d'échelle :"
-#: modules/process/scale.c:224
+#: modules/process/scale.c:225
msgid "_proportional"
msgstr "_proportionnel"
-#: modules/process/scale.c:235
+#: modules/process/scale.c:237
msgid "New _width:"
msgstr "Nouvelle largeur : "
-#: modules/process/scale.c:243
+#: modules/process/scale.c:246
msgid "New _height:"
msgstr "Nouvelle _hauteur :"
-#: modules/process/scars.c:113
+#: modules/process/scars.c:122
msgid "Marks and/or removes scars (horizontal linear artifacts)."
msgstr ""
"Marque et/ou supprime les défauts linéaires (artefacts linéaires horizontaux)"
-#: modules/process/scars.c:127
+#: modules/process/scars.c:136
msgid "/_Correct Data/M_ark Scars..."
msgstr "/_Correction des données/M_arquer les défauts linéaires..."
-#: modules/process/scars.c:131
+#: modules/process/scars.c:140
msgid "Mark horizontal scars (strokes)"
msgstr "Marquer les défauts horizontales (traits)"
-#: modules/process/scars.c:134
+#: modules/process/scars.c:143
msgid "/_Correct Data/Remove _Scars"
msgstr "/_Correction des données/_Supprimer les défauts linéaires"
-#: modules/process/scars.c:138
+#: modules/process/scars.c:147
msgid "Correct horizontal scars (strokes)"
msgstr "Corriger les marques horizontales (traits)"
-#: modules/process/scars.c:293
+#: modules/process/scars.c:312
msgid "Mark Scars"
msgstr "Marquer les défauts linéaires"
-#: modules/process/scars.c:331
+#: modules/process/scars.c:353
msgid "Maximum _width:"
msgstr "Largeur maximale :"
-#: modules/process/scars.c:338
+#: modules/process/scars.c:361
msgid "Minimum _length:"
msgstr "Longueur minimale :"
-#: modules/process/scars.c:345
+#: modules/process/scars.c:369
msgid "_Hard threshold:"
msgstr "Seuil dur : "
-#: modules/process/scars.c:353
+#: modules/process/scars.c:377
msgid "_Soft threshold:"
msgstr "_Seuil doux :"
-#: modules/process/scars.c:361
+#: modules/process/scars.c:385
msgid "Scars type:"
msgstr "Type de marques :"
@@ -12603,27 +13274,27 @@ msgstr "Monte Carlo"
msgid "_Quality:"
msgstr "_Qualité : "
-#: modules/process/shade.c:92
+#: modules/process/shade.c:94
msgid "Creates a shaded presentation of data."
msgstr "Crée une présentation ombrée des données."
-#: modules/process/shade.c:106
+#: modules/process/shade.c:108
msgid "/_Presentation/_Shading..."
msgstr "/_Présentation/_Ombre..."
-#: modules/process/shade.c:110
+#: modules/process/shade.c:112
msgid "Shade data"
msgstr "Ombrer les données"
-#: modules/process/shade.c:207
+#: modules/process/shade.c:209
msgid "Shading"
msgstr "Ombrage"
-#: modules/process/shade.c:253
+#: modules/process/shade.c:260
msgid "_Mix:"
msgstr "_Mixage : "
-#: modules/process/slope_dist.c:161
+#: modules/process/slope_dist.c:160
msgid ""
"Calculates one- or two-dimensional distribution of slopes or graph of their "
"angular distribution."
@@ -12631,83 +13302,133 @@ msgstr ""
"Calcule la distribution uni ou bi-dimensionnelle des pentes ou affiche la "
"distribution angulaire."
-#: modules/process/slope_dist.c:176
+#: modules/process/slope_dist.c:175
msgid "/_Statistics/_Slope Distribution..."
msgstr "/_Statistiques/Di_stribution des pentes..."
-#: modules/process/slope_dist.c:180
+#: modules/process/slope_dist.c:179
msgid "Calculate angular slope distribution"
msgstr "Calculer la distribution des pentes"
-#: modules/process/slope_dist.c:221
+#: modules/process/slope_dist.c:220
msgid "Slope distribution"
msgstr "Distribution des pentes"
-#: modules/process/slope_dist.c:253
+#: modules/process/slope_dist.c:252
msgid "_Two-dimensional distribution"
msgstr "Dis_tribution bi-dimensionnelle"
-#: modules/process/slope_dist.c:254
+#: modules/process/slope_dist.c:253
msgid "Directional (φ) _graph"
msgstr "_Graphe directionnel (φ) "
-#: modules/process/slope_dist.c:255
+#: modules/process/slope_dist.c:254
msgid "_Inclination (θ) graph"
msgstr "Graphe d'_inclinaison (θ)"
-#: modules/process/slope_dist.c:256
+#: modules/process/slope_dist.c:255
msgid "Inclination (gra_dient) graph"
msgstr "Graphe d'inclinaison (gradient)"
-#: modules/process/slope_dist.c:270
+#: modules/process/slope_dist.c:269
msgid "Slope Distribution"
msgstr "Distribution des pentes"
-#: modules/process/slope_dist.c:755
+#: modules/process/slope_dist.c:749
msgid "Angular Slope Distribution"
msgstr "Distribution angulaires des pentes"
-#: modules/process/slope_dist.c:763 modules/process/tilt.c:179
+#: modules/process/slope_dist.c:757 modules/process/tilt.c:179
msgid "Slopes"
msgstr "Pentes"
-#: modules/process/slope_dist.c:824 modules/process/slope_dist.c:893
+#: modules/process/slope_dist.c:818 modules/process/slope_dist.c:887
msgid "Inclination Distribution"
msgstr "Distribution des inclinaisons"
-#: modules/process/slope_dist.c:832 modules/process/slope_dist.c:901
+#: modules/process/slope_dist.c:826 modules/process/slope_dist.c:895
msgid "Inclinations"
msgstr "Inclinaisons"
-#: modules/process/sphere-revolve.c:97
+#: modules/process/sphere-revolve.c:111
msgid "Subtracts background by arc or sphere revolution."
msgstr ""
"Soustrait l'arrière plan à l'aide d'un arc de révolution ou d'une sphère."
-#: modules/process/sphere-revolve.c:113
+#: modules/process/sphere-revolve.c:125
msgid "/_Level/Revolve _Arc..."
msgstr "/Niveau/_Arc de révolution..."
-#: modules/process/sphere-revolve.c:117
+#: modules/process/sphere-revolve.c:129
msgid "Level data by arc revolution"
msgstr "Mettre à niveau avec un arc de révolution"
-#: modules/process/sphere-revolve.c:208 modules/tools/sfunctions.c:371
+#: modules/process/sphere-revolve.c:132
+msgid "/_Level/Revolve _Sphere..."
+msgstr "/Niveau/_Sphère..."
+
+#: modules/process/sphere-revolve.c:136
+msgid "Level data by sphere revolution"
+msgstr "Mettre à niveau avec une sphère"
+
+#: modules/process/sphere-revolve.c:303 modules/tools/sfunctions.c:381
msgid "_Horizontal direction"
msgstr "Direction _horizontale"
-#: modules/process/sphere-revolve.c:209 modules/tools/sfunctions.c:372
+#: modules/process/sphere-revolve.c:304 modules/tools/sfunctions.c:382
msgid "_Vertical direction"
msgstr "Direction _verticale"
-#: modules/process/sphere-revolve.c:210
+#: modules/process/sphere-revolve.c:305
msgid "_Both directions"
msgstr "Les deux directions"
-#: modules/process/sphere-revolve.c:217
+#: modules/process/sphere-revolve.c:315
+msgid "Revolve Sphere"
+msgstr "Sphère"
+
+#: modules/process/sphere-revolve.c:315
msgid "Revolve Arc"
msgstr "Arc de révolution"
+#: modules/process/sphere-revolve.c:355
+msgid "Direction:"
+msgstr "Direction :"
+
+#: modules/process/sphere-revolve.c:699
+msgid "Revolving sphere..."
+msgstr "Sphère..."
+
+#: modules/process/stitch.c:135
+msgid "Stitch multiple images based on offsets of origins."
+msgstr ""
+"Assemble différentes images en se basant sur les décalages des origines."
+
+#: modules/process/stitch.c:149
+msgid "/M_ultidata/_Stitch..."
+msgstr "/M_ultidonnées/A_ssembler..."
+
+#: modules/process/stitch.c:153
+msgid "Stitch images using offsets"
+msgstr "Assembler des images à partir des décalages"
+
+#: modules/process/stitch.c:269
+msgid "Stitch"
+msgstr "Assemblage"
+
+#: modules/process/stitch.c:312
+msgid "Channels"
+msgstr "Canaux"
+
+#: modules/process/stitch.c:435
+msgid "Restore"
+msgstr "Recharger"
+
+#: modules/process/stitch.c:445 modules/tools/linestats.c:379
+#: modules/tools/sfunctions.c:440 modules/tools/stats.c:406
+msgid "_Instant updates"
+msgstr "Mises à jour instantanées"
+
#: modules/process/straighten_path.c:126
msgid "Extracts a straightened part of image along a curve."
msgstr "Extrait une partie redressée de l'image le long d'un chemin."
@@ -12724,28 +13445,28 @@ msgstr "Redresser le long d'un chemin"
msgid "Straighten Path"
msgstr "Redresser un chemin"
-#: modules/process/straighten_path.c:254
+#: modules/process/straighten_path.c:253
msgid "Res_tore"
msgstr "Recharger"
-#: modules/process/straighten_path.c:259
+#: modules/process/straighten_path.c:258
msgid "Re_verse"
msgstr "In_verser"
#: modules/process/straighten_path.c:278 modules/tools/pathlevel.c:256
-#: modules/tools/profile.c:507 modules/tools/roughness.c:854
+#: modules/tools/profile.c:503 modules/tools/roughness.c:868
msgid "_Thickness:"
msgstr "Épaisseur :"
-#: modules/process/straighten_path.c:286
+#: modules/process/straighten_path.c:287
msgid "_Slackness:"
msgstr "Relâchement"
-#: modules/process/straighten_path.c:292
+#: modules/process/straighten_path.c:293
msgid "C_losed curve"
msgstr "Courbe fermée"
-#: modules/process/straighten_path.c:379
+#: modules/process/straighten_path.c:380
msgid "Straightened"
msgstr "Redressé"
@@ -12768,52 +13489,52 @@ msgstr "Super-résolution utilisant plusieurs images d'un même objet"
msgid "Supres"
msgstr "Super résolution"
-#: modules/process/superresolution.c:421
+#: modules/process/superresolution.c:420
msgid "Correlating to determine mean shift..."
msgstr "Corrélation en cours pour déterminer le déplacement moyen..."
-#: modules/process/superresolution.c:511
+#: modules/process/superresolution.c:510
msgid "Cross-correlation..."
msgstr "Corrélation croisée..."
-#: modules/process/superresolution.c:554 modules/xyz/xyz_raster.c:1079
-#: modules/xyz/xyz_raster.c:1119
+#: modules/process/superresolution.c:553 modules/xyz/xyz_raster.c:1053
+#: modules/xyz/xyz_raster.c:1093
msgid "Interpolating..."
msgstr "Interpolation..."
-#: modules/process/synth.h:343
+#: modules/process/synth.h:344
msgid "Roundness"
msgstr "Circularité"
-#: modules/process/synth.h:351
+#: modules/process/synth.h:352
msgid "Roundn_ess:"
msgstr "Circularité :"
-#: modules/process/synth.h:399
+#: modules/process/synth.h:401
msgid "Orientation"
msgstr "Orientation"
-#: modules/process/synth.h:408
+#: modules/process/synth.h:410
msgid "Orien_tation:"
msgstr "Orien_tation :"
-#: modules/process/synth.h:432
+#: modules/process/synth.h:436
+msgid "_Truncate:"
+msgstr "_Tronquer :"
+
+#: modules/process/synth.h:460
msgid "Variance:"
msgstr "Variance :"
-#: modules/process/synth.h:456
-msgid "Deformation"
-msgstr "Déformation"
-
-#: modules/process/synth.h:464
+#: modules/process/synth.h:493
msgid "_Amplitude:"
msgstr "_Amplitude :"
-#: modules/process/synth.h:472
+#: modules/process/synth.h:501
msgid "_Lateral scale:"
msgstr "Échelle _latérale :"
-#: modules/process/synth.h:566
+#: modules/process/synth.h:595
msgid "Randomi_ze"
msgstr "Randomiser"
@@ -12829,41 +13550,41 @@ msgstr "/Opérations _basiques/Li_miter la plage des valeurs..."
msgid "Limit data range"
msgstr "Limiter la plage des valeurs des données"
-#: modules/process/threshold.c:246
+#: modules/process/threshold.c:241
msgid "Limit Range"
msgstr "Limiter la plages des valeurs"
-#: modules/process/threshold.c:281
+#: modules/process/threshold.c:276
msgid "Specify _thresholds"
msgstr "Spécifier les seuils"
-#: modules/process/threshold.c:283
+#: modules/process/threshold.c:278
msgid "Use _display range"
msgstr "Utiliser la plage de données affichée"
-#: modules/process/threshold.c:285
+#: modules/process/threshold.c:280
msgid "Cut off outlier_s"
msgstr "Couper les valeurs aberrantes."
-#: modules/process/threshold.c:294
+#: modules/process/threshold.c:289
msgid "_Lower:"
msgstr "Bas :"
-#: modules/process/threshold.c:300
+#: modules/process/threshold.c:295
msgid "_Upper:"
msgstr "Ha_ut :"
-#: modules/process/threshold.c:305
+#: modules/process/threshold.c:300
msgid "Set to _Full Range"
msgstr "Afficher la plage des données complète"
#. TRANSLATORS: This is a range: 123 to 456.
-#: modules/process/threshold.c:318
+#: modules/process/threshold.c:313
#, c-format
msgid "%.*f to %.*f"
msgstr "%.*f à %.*f"
-#: modules/process/threshold.c:341
+#: modules/process/threshold.c:336
msgid "F_arther than:"
msgstr "Au-delà de :"
@@ -12883,11 +13604,11 @@ msgstr "Tilter l'image"
msgid "Tilt"
msgstr "Angle"
-#: modules/process/tilt.c:185 modules/volume/volume_slice.c:444
+#: modules/process/tilt.c:185 modules/volume/volume_slice.c:446
msgid "_X:"
msgstr "_X :"
-#: modules/process/tilt.c:194 modules/volume/volume_slice.c:464
+#: modules/process/tilt.c:194 modules/volume/volume_slice.c:469
msgid "_Y:"
msgstr "_Y :"
@@ -12895,32 +13616,32 @@ msgstr "_Y :"
msgid "Angles"
msgstr "Angles"
-#: modules/process/tip_blind.c:178
+#: modules/process/tip_blind.c:177
msgid "Blind estimation of SPM tip using Villarubia's algorithm."
msgstr ""
"Estimation à l'aveugle d'une sonde SPM avec l'algorithme de Villarubia."
-#: modules/process/tip_blind.c:192
+#: modules/process/tip_blind.c:191
msgid "/_Tip and Indentation/_Blind Estimation..."
msgstr "/Sonde et indentation/Estimation à l'aveugle..."
-#: modules/process/tip_blind.c:196
+#: modules/process/tip_blind.c:195
msgid "Blind tip estimation"
msgstr "Estimation à l'aveugle de la sonde"
-#: modules/process/tip_blind.c:231
+#: modules/process/tip_blind.c:230
msgid "Blind Tip Estimation"
msgstr "Estimation à l'aveugle de la sonde"
-#: modules/process/tip_blind.c:232
+#: modules/process/tip_blind.c:231
msgid "Run _Partial"
msgstr "Estimation _partielle"
-#: modules/process/tip_blind.c:233
+#: modules/process/tip_blind.c:232
msgid "Run _Full"
msgstr "Estimation complète"
-#: modules/process/tip_blind.c:234
+#: modules/process/tip_blind.c:233
msgid "_Reset Tip"
msgstr "Initialise_r la sonde"
@@ -12928,77 +13649,77 @@ msgstr "Initialise_r la sonde"
msgid "Related _data:"
msgstr "_Données reliées :"
-#: modules/process/tip_blind.c:326
+#: modules/process/tip_blind.c:327
msgid "Estimated Tip Size"
msgstr "Taille estimée de la sonde"
-#: modules/process/tip_blind.c:347
+#: modules/process/tip_blind.c:350
msgid "_Same resolution"
msgstr "Même ré_solution"
-#: modules/process/tip_blind.c:366
+#: modules/process/tip_blind.c:376
msgid "Noise suppression t_hreshold:"
msgstr "Seuil de suppression du bruit : "
-#: modules/process/tip_blind.c:386
+#: modules/process/tip_blind.c:384
msgid "Use _boundaries"
msgstr "Utiliser les bords"
-#: modules/process/tip_blind.c:396
+#: modules/process/tip_blind.c:395
msgid "Stripes"
msgstr "Bandes"
-#: modules/process/tip_blind.c:402
+#: modules/process/tip_blind.c:401
msgid "_Split to stripes:"
msgstr "_Séparer en bandes :"
-#: modules/process/tip_blind.c:416
+#: modules/process/tip_blind.c:412
msgid "_Preview stripe:"
msgstr "Bande d'aperçu :"
-#: modules/process/tip_blind.c:423
+#: modules/process/tip_blind.c:420
msgid "Plot size _graph"
msgstr "Afficher le graphe de la taille"
-#: modules/process/tip_blind.c:433
+#: modules/process/tip_blind.c:430
msgid "Create tip i_mages"
msgstr "Créer des i_mages de la sonde"
#. TRANSLATORS: Prefix for the progressbar message.
-#: modules/process/tip_blind.c:810
+#: modules/process/tip_blind.c:807
#, c-format
msgid "Stripe %u: "
msgstr "Bande %u :"
-#: modules/process/tip_blind.c:917 modules/process/tip_blind.c:941
+#: modules/process/tip_blind.c:914 modules/process/tip_blind.c:938
msgid "Estimated tip"
msgstr "Sonde estimée"
-#: modules/process/tip_blind.c:1207 modules/process/tip_blind.c:1216
+#: modules/process/tip_blind.c:1204 modules/process/tip_blind.c:1213
msgid "Tip radius evolution"
msgstr "Évolution du rayon de la sonde"
-#: modules/process/tip_model.c:114
+#: modules/process/tip_model.c:112
msgid "Models SPM tip."
msgstr "Modélise la sonde SPM."
-#: modules/process/tip_model.c:129
+#: modules/process/tip_model.c:127
msgid "/_Tip and Indentation/_Model Tip..."
msgstr "/Sonde et indentation/Modéliser la sonde..."
-#: modules/process/tip_model.c:133
+#: modules/process/tip_model.c:131
msgid "Model AFM tip"
msgstr "Modéliser une sonde AFM"
-#: modules/process/tip_model.c:164
+#: modules/process/tip_model.c:162
msgid "Model Tip"
msgstr "Modélise une sonde"
-#: modules/process/tip_model.c:224
+#: modules/process/tip_model.c:222
msgid "Tip _type:"
msgstr "_Type de sonde :"
-#: modules/process/tip_model.c:229
+#: modules/process/tip_model.c:228
msgid "_Number of sides:"
msgstr "_Nombre de côtés"
@@ -13010,19 +13731,19 @@ msgstr "Pente de la _sonde :"
msgid "Tip _rotation:"
msgstr "_Rotation de la sonde :"
-#: modules/process/tip_model.c:250
+#: modules/process/tip_model.c:255
msgid "Tip _apex radius:"
msgstr "Rayon de l'_apex de la sonde :"
-#: modules/process/tip_model.c:269
+#: modules/process/tip_model.c:265
msgid "Tip _anisotropy:"
msgstr "_Anisotropie de la sonde :"
-#: modules/process/tip_model.c:490
+#: modules/process/tip_model.c:484
msgid "Modeled tip"
msgstr "Sonde modélisée"
-#: modules/process/tip_model.c:562
+#: modules/process/tip_model.c:556
#, c-format
msgid "Tip resolution: %d × %d pixels"
msgstr "Résolution de la sonde : %d × %d pixels."
@@ -13132,7 +13853,7 @@ msgid "Converts datafield to 3D volume data."
msgstr "Convertir un champ de données en données volumiques 3D"
#: modules/process/volumize.c:56
-msgid "/_Basic Operations/Volumize..."
+msgid "/_Basic Operations/Volumize"
msgstr "/Opérations _basiques/Convertir en données volumiques..."
#: modules/process/volumize.c:60
@@ -13177,73 +13898,77 @@ msgstr "Résolution _Z :"
msgid "Z _range:"
msgstr "Plage Z : "
-#: modules/process/wave_synth.c:211
+#: modules/process/wave_synth.c:219
msgid "Generates various kinds of waves."
msgstr "Génère divers types d'ondes."
-#: modules/process/wave_synth.c:225
+#: modules/process/wave_synth.c:233
msgid "/S_ynthetic/_Waves..."
msgstr "/S_ynthèse/Ondes..."
-#: modules/process/wave_synth.c:229
+#: modules/process/wave_synth.c:237
msgid "Generate waves"
msgstr "Générer des ondes"
-#: modules/process/wave_synth.c:347
+#: modules/process/wave_synth.c:366
msgid "Waves"
msgstr "Ondes"
-#: modules/process/wave_synth.c:422 modules/tools/linestats.c:337
-#: modules/tools/sfunctions.c:401 modules/volume/volume_linestat.c:369
+#: modules/process/wave_synth.c:441 modules/tools/linestats.c:337
+#: modules/tools/sfunctions.c:411 modules/volume/volume_linestat.c:374
msgid "_Quantity:"
msgstr "Quantité"
-#: modules/process/wave_synth.c:429
+#: modules/process/wave_synth.c:448
msgid "_Number of waves:"
msgstr "_Nombre d'ondes :"
-#: modules/process/wave_synth.c:436 modules/process/wave_synth.c:582
-#: modules/tools/roughness.c:274
+#: modules/process/wave_synth.c:455 modules/process/wave_synth.c:617
+#: modules/tools/roughness.c:275
msgid "Amplitude"
msgstr "Amplitude"
-#: modules/process/wave_synth.c:441
+#: modules/process/wave_synth.c:460
msgid "_Wave form:"
msgstr "Forme d'ondes : "
-#: modules/process/wave_synth.c:448
+#: modules/process/wave_synth.c:467
msgid "Amplitude:"
msgstr "Amplitude :"
-#: modules/process/wave_synth.c:466
+#: modules/process/wave_synth.c:487
+msgid "_Decay:"
+msgstr "_Décroissance :"
+
+#: modules/process/wave_synth.c:497
msgid "Frequency"
msgstr "Fréquence"
-#: modules/process/wave_synth.c:472
+#: modules/process/wave_synth.c:503
msgid "_Spatial frequency:"
msgstr "Fréquence spatiale :"
-#: modules/process/wave_synth.c:488
+#: modules/process/wave_synth.c:519
msgid "_X center:"
msgstr "Centre _X :"
-#: modules/process/wave_synth.c:499
+#: modules/process/wave_synth.c:532
msgid "_Y center:"
msgstr "Centre _Y :"
-#: modules/process/wave_synth.c:565
+#: modules/process/wave_synth.c:600
msgid "Cosine"
msgstr "Sinusoïde"
-#: modules/process/wave_synth.c:566
+#: modules/process/wave_synth.c:601
msgid "Inverse cosh"
msgstr "Argument cosinus hyperbolique"
-#: modules/process/wave_synth.c:567
+#: modules/process/wave_synth.c:602
msgid "Flat top"
msgstr "Plateau"
-#: modules/process/wave_synth.c:581
+#: modules/process/wave_synth.c:616
msgid "Displacement"
msgstr "Déplacement"
@@ -13327,39 +14052,39 @@ msgstr "Pré-traiter l'image"
msgid "Preprocess and mark"
msgstr "Pré-traiter et marquer"
-#: modules/process/xydenoise.c:57
+#: modules/process/xydenoise.c:58
msgid "Denoises measurement on basis of two orthogonal scans."
msgstr "Débruitage basé sur deux mesures orthogonales."
-#: modules/process/xydenoise.c:71
+#: modules/process/xydenoise.c:72
msgid "/M_ultidata/_XY denoise..."
msgstr "/M_ultidonnées/Débruitage _XY..."
-#: modules/process/xydenoise.c:75
+#: modules/process/xydenoise.c:76
msgid "Denoises horizontal/vertical measurement."
msgstr "Débruitage de mesures horizontales et verticales."
-#: modules/process/xydenoise.c:102
+#: modules/process/xydenoise.c:103
msgid "XY Denoising"
msgstr "Débruitage XY"
-#: modules/process/xydenoise.c:124
+#: modules/process/xydenoise.c:125
msgid "Second direction:"
msgstr "Seconde direction :"
-#: modules/process/xydenoise.c:232
+#: modules/process/xydenoise.c:233
msgid "Computing forward FFTs..."
msgstr "Calcul des TF en cours..."
-#: modules/process/xydenoise.c:248
+#: modules/process/xydenoise.c:249
msgid "Computing image..."
msgstr "Calcul de l'image en cours..."
-#: modules/process/xydenoise.c:260
+#: modules/process/xydenoise.c:261
msgid "Computing backward FFT..."
msgstr "Calcul de la TF inverse en cours..."
-#: modules/process/xydenoise.c:272
+#: modules/process/xydenoise.c:273
msgid "Denoised"
msgstr "Débruité"
@@ -13375,63 +14100,67 @@ msgstr "/Opérations _basiques/Convertir en données _XYZ..."
msgid "Convert to XYZ data"
msgstr "Convertir en données XYZ"
-#: modules/pygwy/pygwy-console.c:55
+#: modules/pygwy/pygwy-console.c:99
msgid "/Pygwy Console"
msgstr "/Console Pygwy"
-#: modules/pygwy/pygwy-console.c:59
+#: modules/pygwy/pygwy-console.c:103
msgid "Python wrapper console"
msgstr "Console Python"
-#: modules/pygwy/pygwy-console.c:142
-msgid ">>> Running the script above\n"
-msgstr ">>> Calcul en cours du script\n"
-
-#: modules/pygwy/pygwy-console.c:194
-msgid "Open Python script"
-msgstr "Ouvrir un script Python"
-
-#: modules/pygwy/pygwy-console.c:275
-msgid "Save Script as"
-msgstr "Sauver le script sous"
-
-#: modules/pygwy/pygwy-console.c:327
+#: modules/pygwy/pygwy-console.c:168 modules/pygwy/pygwy-console.c:481
msgid "Pygwy Console"
msgstr "Console Pygwy"
-#: modules/pygwy/pygwy-console.c:340
-msgid "Clear Log"
-msgstr "Effacer le journal"
-
-#: modules/pygwy/pygwy-console.c:344
+#: modules/pygwy/pygwy-console.c:187
msgid "Open script in Python language (Ctrl-O)"
msgstr "Ouvrir un script Python (Ctrl-O)"
-#: modules/pygwy/pygwy-console.c:346
+#: modules/pygwy/pygwy-console.c:197
msgid "Save script (Ctrl-S)"
-msgstr "Sauver le script (Ctrl-S)"
+msgstr "Enregistrer le script (Ctrl-S)"
-#: modules/pygwy/pygwy-console.c:348
+#: modules/pygwy/pygwy-console.c:207
+msgid "Save script as (Ctrl-Shift-S)"
+msgstr "Enregistrer le script sous (Ctrl-Maj-S)"
+
+#: modules/pygwy/pygwy-console.c:217
msgid "Execute script (Ctrl-E)"
msgstr "Exécuter le script (Ctrl-E)"
-#: modules/pygwy/pygwy-console.c:426
+#: modules/pygwy/pygwy-console.c:227
+msgid "Clear Log"
+msgstr "Effacer le journal"
+
+#: modules/pygwy/pygwy-console.c:285
msgid "Command"
msgstr "Commande "
-#: pygwy.c:120
+#: modules/pygwy/pygwy-console.c:371
+msgid ">>> Running the script above\n"
+msgstr ">>> Calcul en cours du script\n"
+
+#: modules/pygwy/pygwy-console.c:425
+msgid "Save Python Script as"
+msgstr "Enregistrer le script Python sous"
+
+#: modules/pygwy/pygwy-console.c:429
+msgid "Open Python Script"
+msgstr "Ouvrir un script Python"
+
+#: pygwy.c:130
msgid "Pygwy, the Gwyddion Python wrapper."
msgstr "Pygwy, l'interface Python pour Gwyddion"
-#: pygwy.c:258
+#: pygwy.c:269
msgid "Python Interpreter Errors"
msgstr "Erreurs de l'interpréteur Python"
-#: pygwy.c:384
+#: pygwy.c:399
msgid "Python interpreter error occurred."
msgstr "Une erreur s'est produite dans l'interpréteur Python."
-#: pygwy.c:459
+#: pygwy.c:499
msgid "Function written in Python"
msgstr "Fonction écrite en Python"
@@ -13456,11 +14185,11 @@ msgid "Measure distances and directions between points"
msgstr "Mesure de distances et de directions entre des points"
#. TRANSLATORS: Number is verb here.
-#: modules/tools/distance.c:250 modules/tools/profile.c:532
+#: modules/tools/distance.c:250 modules/tools/profile.c:527
msgid "_Number lines"
msgstr "_Numéroter les lignes"
-#: modules/tools/filter.c:128
+#: modules/tools/filter.c:129
msgid ""
"Filter tool, processes selected part of data with a filter (conservative "
"denoise, mean, median. Kuwahara, minimum, maximum)."
@@ -13468,27 +14197,27 @@ msgstr ""
"Outil filtre, traite une partie sélectionnée avec un filtre (débruitage "
"conservatif, moyenne, médiane, Kuwahara, minimum, maximum)."
-#: modules/tools/filter.c:171
+#: modules/tools/filter.c:172
msgid "Basic filters: mean, median, denoise, …"
msgstr "Filtres basiques : moyenne, médiane, débruitage..."
-#: modules/tools/filter.c:239
+#: modules/tools/filter.c:240
msgid "Conservative denoise"
msgstr "Débruitage conservatif"
-#: modules/tools/filter.c:246
+#: modules/tools/filter.c:247
msgid "Kuwahara"
msgstr "Kuwahara"
-#: modules/tools/filter.c:247
+#: modules/tools/filter.c:248
msgid "Dechecker"
msgstr "Décareler"
-#: modules/tools/filter.c:248
+#: modules/tools/filter.c:249
msgid "filter|Gaussian"
msgstr "Gaussien"
-#: modules/tools/filter.c:249
+#: modules/tools/filter.c:250
msgid "Sharpen"
msgstr "Accentuer"
@@ -13586,7 +14315,7 @@ msgid "Height histogram"
msgstr "Histogramme des hauteurs"
#: modules/tools/icolorange.c:329 modules/tools/linestats.c:169
-#: modules/tools/sfunctions.c:226 modules/volume/volume_linestat.c:146
+#: modules/tools/sfunctions.c:231 modules/volume/volume_linestat.c:148
msgid "Range"
msgstr "Plage"
@@ -13614,7 +14343,7 @@ msgstr "_Inverser les couleurs"
msgid "range|Full"
msgstr "Complète"
-#: modules/tools/level3.c:106
+#: modules/tools/level3.c:108
msgid ""
"Three-point level tool, levels data by subtracting a plane fitted through "
"three selected points."
@@ -13622,23 +14351,23 @@ msgstr ""
"Outil de mise à niveau avec trois points, met à niveau les données en "
"soustrayant un plan ajusté sur trois points sélectionnés."
-#: modules/tools/level3.c:143
+#: modules/tools/level3.c:145
msgid "Three Point Level"
msgstr "Mise à niveau par 3 points"
-#: modules/tools/level3.c:144
+#: modules/tools/level3.c:146
msgid "Level data by fitting a plane through three points"
msgstr "Met à niveaux les données en ajustant un plan grâce à 3 points"
-#: modules/tools/level3.c:239 modules/tools/readvalue.c:375
+#: modules/tools/level3.c:244 modules/tools/readvalue.c:378
msgid "_Averaging radius:"
msgstr "R_ayon de moyennage :"
-#: modules/tools/level3.c:246
+#: modules/tools/level3.c:251
msgid "_Instant apply"
msgstr "Mise à jour _instantanée"
-#: modules/tools/level3.c:255
+#: modules/tools/level3.c:261
msgid "Set plane to _zero"
msgstr "Mise à zéro du plan"
@@ -13650,23 +14379,23 @@ msgstr ""
"Outil de calcul statistique de ligne/colonne, calcule les valeurs moyenne, "
"médiane, maximale, minimale, RMS, ..., de lignes ou de colonnes."
-#: modules/tools/linestats.c:172 modules/volume/volume_linestat.c:148
+#: modules/tools/linestats.c:172 modules/volume/volume_linestat.c:150
msgid "tan β<sub>0</sub>"
msgstr "tan β<sub>0</sub>"
-#: modules/tools/linestats.c:174 modules/volume/volume_linestat.c:150
+#: modules/tools/linestats.c:174 modules/volume/volume_linestat.c:152
msgid "Ra"
msgstr "Ra"
-#: modules/tools/linestats.c:175 modules/volume/volume_linestat.c:151
+#: modules/tools/linestats.c:175 modules/volume/volume_linestat.c:153
msgid "Rq (RMS)"
msgstr "Rq (RMS)"
-#: modules/tools/linestats.c:176 modules/volume/volume_linestat.c:152
+#: modules/tools/linestats.c:176 modules/volume/volume_linestat.c:154
msgid "Rz"
msgstr "Rz"
-#: modules/tools/linestats.c:177 modules/volume/volume_linestat.c:153
+#: modules/tools/linestats.c:177 modules/volume/volume_linestat.c:155
msgid "Rt"
msgstr "Rt"
@@ -13690,16 +14419,11 @@ msgstr "Colonnes"
msgid "Average:"
msgstr "Moyenne :"
-#: modules/tools/linestats.c:363 modules/tools/profile.c:464
-#: modules/tools/sfunctions.c:414 modules/tools/spectro.c:343
+#: modules/tools/linestats.c:363 modules/tools/profile.c:460
+#: modules/tools/sfunctions.c:424 modules/tools/spectro.c:346
msgid "<b>Options</b>"
msgstr "<b>Options</b>"
-#: modules/tools/linestats.c:379 modules/tools/sfunctions.c:430
-#: modules/tools/stats.c:408
-msgid "_Instant updates"
-msgstr "Mises à jour instantanées"
-
#: modules/tools/maskedit.c:170
msgid "Mask editor tool, allows interactive modification of parts of the mask."
msgstr ""
@@ -13758,63 +14482,63 @@ msgstr "Remplir les parties vides continues avec un masque"
msgid "Erase continuous parts of mask"
msgstr "Effacer les parties continues d'un masque"
-#: modules/tools/maskedit.c:408
+#: modules/tools/maskedit.c:409
msgid "Editor"
msgstr "Éditeur"
-#: modules/tools/maskedit.c:413
+#: modules/tools/maskedit.c:414
msgid "_Shapes"
msgstr "Forme_s :"
-#: modules/tools/maskedit.c:423
+#: modules/tools/maskedit.c:428
msgid "Mode:"
msgstr "Mode :"
-#: modules/tools/maskedit.c:452
+#: modules/tools/maskedit.c:458
msgid "Shape:"
msgstr "Forme :"
-#: modules/tools/maskedit.c:483
+#: modules/tools/maskedit.c:486
msgid "_Drawing Tools"
msgstr "Outils de _dessin"
-#: modules/tools/maskedit.c:493
+#: modules/tools/maskedit.c:500
msgid "Tool:"
msgstr "Outil :"
-#: modules/tools/maskedit.c:532
+#: modules/tools/maskedit.c:538
msgid "Actions"
msgstr "Actions"
-#: modules/tools/maskedit.c:540
+#: modules/tools/maskedit.c:546
msgid "_Invert"
msgstr "_Inverser"
-#: modules/tools/maskedit.c:571
+#: modules/tools/maskedit.c:577
msgid "Fill _Voids"
msgstr "Remplir les _vides"
-#: modules/tools/maskedit.c:580
+#: modules/tools/maskedit.c:586
msgid "Fill non-simple-connected"
msgstr "Remplir les vides à connexions multiples"
-#: modules/tools/maskedit.c:591
+#: modules/tools/maskedit.c:597
msgid "Grow/Shrink"
msgstr "Dilater / Éroder"
-#: modules/tools/maskedit.c:600
+#: modules/tools/maskedit.c:606
msgid "_Grow"
msgstr "Dilater"
-#: modules/tools/maskedit.c:608
+#: modules/tools/maskedit.c:614
msgid "Shrin_k"
msgstr "Éroder"
-#: modules/tools/maskedit.c:623
+#: modules/tools/maskedit.c:629
msgid "_Amount:"
msgstr "Qu_antité :"
-#: modules/tools/maskedit.c:651
+#: modules/tools/maskedit.c:657
msgid "_Prevent grain merging by growing"
msgstr "Em_pêcher la fusion de grains lors d'une dilatation"
@@ -13834,83 +14558,95 @@ msgstr ""
"Met à niveau les lignes en utilisant les intersections des lignes définies "
"par l'utilisateur"
-#: modules/tools/profile.c:222
+#: modules/tools/profile.c:216
msgid "Profile tool, creates profile graphs from selected lines."
msgstr "Outil profil, crée des profils à partir des lignes sélectionnées."
-#: modules/tools/profile.c:276 modules/tools/profile.c:630
+#: modules/tools/profile.c:270 modules/tools/profile.c:609
msgid "Profiles"
msgstr "Profils"
-#: modules/tools/profile.c:277
+#: modules/tools/profile.c:271
msgid "Extract profiles"
msgstr "Extraire les profils"
-#: modules/tools/profile.c:480
-msgid "_Radial profiles"
-msgstr "Profils _radiaux"
-
-#: modules/tools/profile.c:493
-msgid "Symmetrize _All"
-msgstr "Tout symétriser"
+#: modules/tools/profile.c:478
+msgid "Linear profiles"
+msgstr "Profils linéaires"
-#: modules/tools/profile.c:498
-msgid "S_ymmetrize"
-msgstr "S_ymétriser"
+#: modules/tools/profile.c:480
+msgid "Radial profiles"
+msgstr "Profils radiaux"
-#: modules/tools/profile.c:542
+#: modules/tools/profile.c:537
msgid "_Separate profiles"
msgstr "Profils _séparés"
-#: modules/tools/profile.c:607
+#: modules/tools/profile.c:587
msgid "_Calibration data:"
msgstr "Données de _calibration :"
-#: modules/tools/profile.c:620
+#: modules/tools/profile.c:600
msgid "_Show profile"
msgstr "Montrer le profil"
-#: modules/tools/profile.c:887
+#: modules/tools/profile.c:861
#, c-format
msgid "X error %d"
msgstr "Erreur X %d"
-#: modules/tools/profile.c:891
+#: modules/tools/profile.c:865
#, c-format
msgid "Y error %d"
msgstr "Erreur Y %d"
-#: modules/tools/profile.c:895
+#: modules/tools/profile.c:869
#, c-format
msgid "Z error %d"
msgstr "Erreur Z %d"
-#: modules/tools/profile.c:899
+#: modules/tools/profile.c:873
#, c-format
msgid "X uncertainty %d"
msgstr "Incertitude X %d"
-#: modules/tools/profile.c:903
+#: modules/tools/profile.c:877
#, c-format
msgid "Y uncertainty %d"
msgstr "Incertitude Y %d"
-#: modules/tools/profile.c:907
+#: modules/tools/profile.c:881
#, c-format
msgid "Z uncertainty %d"
msgstr "Incertitude Z %d"
-#: modules/tools/profile.c:912
+#: modules/tools/profile.c:886
#, c-format
msgid "Zunc up bound %d"
msgstr "Z inc. limite haute %d"
-#: modules/tools/profile.c:917
+#: modules/tools/profile.c:891
#, c-format
msgid "Zunc low bound %d"
msgstr "Z inc. limite basse %d"
-#: modules/tools/profile.c:1817
+#: modules/tools/profile.c:1637
+msgid "S_ymmetrize"
+msgstr "S_ymétriser"
+
+#: modules/tools/profile.c:1639
+msgid "Symmetrize _All"
+msgstr "Tout symétriser"
+
+#: modules/tools/profile.c:1643
+msgid "Improve _Direction"
+msgstr "Améliorer la _direction :"
+
+#: modules/tools/profile.c:1645
+msgid "Improve _All"
+msgstr "Tout _améliorer"
+
+#: modules/tools/profile.c:1866
msgid "calib-data|None"
msgstr "Aucune"
@@ -13926,194 +14662,194 @@ msgstr "Lire la valeur"
msgid "Read value under mouse cursor"
msgstr "Lire la valeur sous le curseur"
-#: modules/tools/readvalue.c:304
+#: modules/tools/readvalue.c:307
msgid "Set _Zero"
msgstr "Mise à zéro"
-#: modules/tools/readvalue.c:307
+#: modules/tools/readvalue.c:310
msgid "Shift plane z=0 to pass through the selected point"
msgstr "Déplace le plan z=0 de manière à passer par les points sélectionnés"
-#: modules/tools/readvalue.c:315
+#: modules/tools/readvalue.c:318
msgid "Facet"
msgstr "Facette"
-#: modules/tools/readvalue.c:340
+#: modules/tools/readvalue.c:343
msgid "Curvatures"
msgstr "Courbures"
-#: modules/tools/readvalue.c:382
+#: modules/tools/readvalue.c:386
msgid "Show _selection"
msgstr "Montrer la _sélection"
-#: modules/tools/roughness.c:282
+#: modules/tools/roughness.c:283
msgid "Roughness average"
msgstr "Rugosité moyenne"
-#: modules/tools/roughness.c:290
+#: modules/tools/roughness.c:291
msgid "Root mean square roughness"
msgstr "Rugosité RMS"
-#: modules/tools/roughness.c:298
+#: modules/tools/roughness.c:299
msgid "Maximum height of the roughness"
msgstr "Amplitude maximale"
-#: modules/tools/roughness.c:306
+#: modules/tools/roughness.c:307
msgid "Maximum roughness valley depth"
msgstr "Profondeur minimale des vallées"
-#: modules/tools/roughness.c:314
+#: modules/tools/roughness.c:315
msgid "Maximum roughness peak height"
msgstr "Hauteur maximale des pics"
-#: modules/tools/roughness.c:322 modules/tools/roughness.c:370
+#: modules/tools/roughness.c:323 modules/tools/roughness.c:371
msgid "Average maximum height of the roughness"
msgstr "Amplitude moyenne"
-#: modules/tools/roughness.c:330
+#: modules/tools/roughness.c:331
msgid "Average maximum roughness valley depth"
msgstr "Profondeur moyenne des vallées"
-#: modules/tools/roughness.c:338
+#: modules/tools/roughness.c:339
msgid "Average maximum roughness peak height"
msgstr "Hauteur moyenne des pics"
-#: modules/tools/roughness.c:346 modules/tools/roughness.c:354
+#: modules/tools/roughness.c:347 modules/tools/roughness.c:355
msgid "Average third highest peak to third lowest valley height"
msgstr "Profondeur de rugosité"
-#: modules/tools/roughness.c:362
+#: modules/tools/roughness.c:363
msgid "Average maximum height of the profile"
msgstr "Hauteur maximale moyenne du profil"
-#: modules/tools/roughness.c:378
+#: modules/tools/roughness.c:379
msgid "Skewness"
msgstr "Asymétrie"
-#: modules/tools/roughness.c:394
+#: modules/tools/roughness.c:395
msgid "Waviness average"
msgstr "Ondulation moyenne"
-#: modules/tools/roughness.c:402
+#: modules/tools/roughness.c:403
msgid "Root mean square waviness"
msgstr "Ondulation RMS"
-#: modules/tools/roughness.c:410
+#: modules/tools/roughness.c:411
msgid "Waviness maximum height"
msgstr "Hauteur maximale de l'ondulation"
-#: modules/tools/roughness.c:418
+#: modules/tools/roughness.c:419
msgid "Maximum height of the profile"
msgstr "Hauteur maximale du profil"
-#: modules/tools/roughness.c:426
+#: modules/tools/roughness.c:427
msgid "Spatial"
msgstr "Spatial"
-#: modules/tools/roughness.c:476
+#: modules/tools/roughness.c:477
msgid "Average wavelength of the profile"
msgstr "Longueur d'onde moyenne du profil"
-#: modules/tools/roughness.c:484
+#: modules/tools/roughness.c:485
msgid "Root mean square (RMS) wavelength of the profile"
msgstr "Longueur d'onde RMS du profil"
-#: modules/tools/roughness.c:492
+#: modules/tools/roughness.c:493
msgid "Hybrid"
msgstr "Hybride"
-#: modules/tools/roughness.c:500
+#: modules/tools/roughness.c:501
msgid "Average absolute slope"
msgstr "Pente absolue moyenne"
-#: modules/tools/roughness.c:508
+#: modules/tools/roughness.c:509
msgid "Root mean square (RMS) slope"
msgstr "Pente RMS"
-#: modules/tools/roughness.c:524
+#: modules/tools/roughness.c:525
msgid "Developed profile length"
msgstr "Longueur du profil développé"
-#: modules/tools/roughness.c:532
+#: modules/tools/roughness.c:533
msgid "Profile length ratio"
msgstr "Rapport de longueur de profil"
-#: modules/tools/roughness.c:615
+#: modules/tools/roughness.c:616
msgid "Calculate surface profile parameters."
msgstr "Calculer les paramètres du profil de surface."
-#: modules/tools/roughness.c:648 modules/tools/roughness.c:773
-#: modules/tools/roughness.c:1452
+#: modules/tools/roughness.c:649 modules/tools/roughness.c:774
+#: modules/tools/roughness.c:1479
msgid "Roughness"
msgstr "Rugosité"
-#: modules/tools/roughness.c:649
+#: modules/tools/roughness.c:650
msgid "Calculate roughness parameters"
msgstr "Calculer les paramètres de rugosité"
-#: modules/tools/roughness.c:771 modules/tools/roughness.c:1450
+#: modules/tools/roughness.c:772 modules/tools/roughness.c:1477
msgid "Texture"
msgstr "Texture"
-#: modules/tools/roughness.c:772 modules/tools/roughness.c:1451
+#: modules/tools/roughness.c:773 modules/tools/roughness.c:1478
msgid "Waviness"
msgstr "Ondulation"
-#: modules/tools/roughness.c:774
+#: modules/tools/roughness.c:775
msgid "ADF"
msgstr "Distribution d'amplitude"
-#: modules/tools/roughness.c:775
+#: modules/tools/roughness.c:776
msgid "BRC"
msgstr "Distribution d'amplitude cumulée"
-#: modules/tools/roughness.c:776 modules/tools/roughness.c:1455
+#: modules/tools/roughness.c:777 modules/tools/roughness.c:1482
msgid "Peak Count"
msgstr "Comptage des pics"
-#: modules/tools/roughness.c:838 modules/xyz/xyz_drift.c:1090
+#: modules/tools/roughness.c:839 modules/xyz/xyz_drift.c:1090
msgid "_Graph:"
msgstr "_Graphe :"
-#: modules/tools/roughness.c:845
+#: modules/tools/roughness.c:847
msgid "C_ut-off:"
msgstr "Co_upure :"
-#: modules/tools/roughness.c:1324
+#: modules/tools/roughness.c:1345
msgid "No profile selected."
msgstr "Aucun profil sélectionné."
-#: modules/tools/roughness.c:1453
+#: modules/tools/roughness.c:1480
msgid "Amplitude Distribution Function"
msgstr "Distribution d'amplitude"
-#: modules/tools/roughness.c:1454
+#: modules/tools/roughness.c:1481
msgid "The Bearing Ratio Curve"
msgstr "Distribution d'amplitude cumulée"
-#: modules/tools/roughness.c:1489
+#: modules/tools/roughness.c:1516
msgid "Surface Profiles"
msgstr "Profils de surface"
-#: modules/tools/roughness.c:1877
+#: modules/tools/roughness.c:1904
msgid "Save Roughness Parameters"
msgstr "Enregistrer les paramètres de rugosité"
-#: modules/tools/roughness.c:1934
+#: modules/tools/roughness.c:1961
msgid "Roughness Parameters"
msgstr "Paramètres de rugosité"
-#: modules/tools/roughness.c:1940
+#: modules/tools/roughness.c:1967
#, c-format
msgid "File: %s\n"
msgstr "Fichier : %s\n"
-#: modules/tools/roughness.c:1944
+#: modules/tools/roughness.c:1971
#, c-format
msgid "Data channel: %s\n"
msgstr "Canal de données : %s\n"
-#: modules/tools/roughness.c:1975
+#: modules/tools/roughness.c:2002
#, c-format
msgid ""
"Selected line: (%s, %s) to (%s, %s) px\n"
@@ -14150,7 +14886,7 @@ msgstr "vers tous les fichiers"
msgid "_Copy"
msgstr "_Copier"
-#: modules/tools/sfunctions.c:181
+#: modules/tools/sfunctions.c:186
msgid ""
"Statistical function tool, calculates one-dimensional statistical functions "
"(height distribution, correlations, PSDF, Minkowski functionals) of selected "
@@ -14160,87 +14896,91 @@ msgstr ""
"(distribution de hauteur, correlations, PSDF, fonctions de Minkowski) de la "
"partie sélectionnée des données."
-#: modules/tools/sfunctions.c:214
+#: modules/tools/sfunctions.c:219
msgid "Height distribution"
msgstr "Distribution des hauteurs"
-#: modules/tools/sfunctions.c:215
+#: modules/tools/sfunctions.c:220
msgid "Cum. height distribution"
msgstr "Distribution des hauteurs cumulée"
-#: modules/tools/sfunctions.c:216
+#: modules/tools/sfunctions.c:221
msgid "Distribution of angles"
msgstr "Distribution angulaire"
-#: modules/tools/sfunctions.c:217
+#: modules/tools/sfunctions.c:222
msgid "Cum. distribution of angles"
msgstr "Distribution cumulée des angles"
-#: modules/tools/sfunctions.c:218
+#: modules/tools/sfunctions.c:223
msgid "ACF"
msgstr "ACF"
-#: modules/tools/sfunctions.c:219
+#: modules/tools/sfunctions.c:224
msgid "HHCF"
msgstr "HHCF"
-#: modules/tools/sfunctions.c:220
+#: modules/tools/sfunctions.c:225
msgid "PSDF"
msgstr "PSDF"
-#: modules/tools/sfunctions.c:221
+#: modules/tools/sfunctions.c:226
msgid "Radial PSDF"
msgstr "PSDF radiale"
-#: modules/tools/sfunctions.c:222
+#: modules/tools/sfunctions.c:227
msgid "Radial ACF"
msgstr "ACF radiale"
-#: modules/tools/sfunctions.c:223
+#: modules/tools/sfunctions.c:228
msgid "Minkowski volume"
msgstr "Volume de Minkowski"
-#: modules/tools/sfunctions.c:224
+#: modules/tools/sfunctions.c:229
msgid "Minkowski boundary"
msgstr "Limite de Minkowski"
-#: modules/tools/sfunctions.c:225
+#: modules/tools/sfunctions.c:230
msgid "Minkowski connectivity"
msgstr "Connectivité de Minkowski"
-#: modules/tools/sfunctions.c:251
+#: modules/tools/sfunctions.c:232
+msgid "Area scale graph"
+msgstr ""
+
+#: modules/tools/sfunctions.c:257
msgid "Statistical Functions"
msgstr "Fonctions statistiques"
-#: modules/tools/sfunctions.c:252
+#: modules/tools/sfunctions.c:258
msgid "Calculate 1D statistical functions"
msgstr "Calcule les fonctions statistiques 1D"
-#: modules/tools/sfunctions.c:504
+#: modules/tools/sfunctions.c:501
msgid "_Separate uncertainty"
msgstr "Incertitudes _séparées"
-#: modules/tools/spectro.c:151
+#: modules/tools/spectro.c:154
msgid "Point Spectrum, extracts point spectra to a graph."
msgstr "Spectre ponctuel, extrait des spectres ponctuels vers un graphe."
-#: modules/tools/spectro.c:190
+#: modules/tools/spectro.c:193
msgid "Point Spectroscopy"
msgstr "Spectroscopie ponctuelle"
-#: modules/tools/spectro.c:191
+#: modules/tools/spectro.c:194
msgid "Extract and view point spectroscopy data"
msgstr "Extrait et visualise les données de spectroscopie ponctuelle"
-#: modules/tools/spectro.c:359
+#: modules/tools/spectro.c:362
msgid "_Separate spectra"
msgstr "_Spectres séparés"
-#: modules/tools/spectro.c:369
+#: modules/tools/spectro.c:372
msgid "_Average spectra"
msgstr "Moyenner les spectres"
-#: modules/tools/spectro.c:508
+#: modules/tools/spectro.c:511
msgid "Spectroscopy"
msgstr "Spectroscopie"
@@ -14280,14 +15020,6 @@ msgstr "Aucun point sélectionné dans l'image."
msgid "No area in the zoom selected."
msgstr "Aucune zone sélectionnée pour le zoom."
-#: modules/tools/stats.c:205
-msgid "Average value:"
-msgstr "Moyenne :"
-
-#: modules/tools/stats.c:206
-msgid "Median:"
-msgstr "Médiane :"
-
#: modules/tools/stats.c:207
msgid "Ra (Sa):"
msgstr "Ra (Sa) :"
@@ -14300,14 +15032,6 @@ msgstr "RMS (Sq) :"
msgid "Rms (grain-wise):"
msgstr "RMS (grains) : "
-#: modules/tools/stats.c:210
-msgid "Skew:"
-msgstr "Asymétrie :"
-
-#: modules/tools/stats.c:211
-msgid "Kurtosis:"
-msgstr "Kurtosis :"
-
#: modules/tools/stats.c:212
msgid "Surface area:"
msgstr "Surface :"
@@ -14316,10 +15040,6 @@ msgstr "Surface :"
msgid "Projected area:"
msgstr "Surface projetée :"
-#: modules/tools/stats.c:214
-msgid "Variation:"
-msgstr "Variation :"
-
#: modules/tools/stats.c:217
msgid "Inclination θ:"
msgstr "Inclinaison θ :"
@@ -14332,7 +15052,7 @@ msgstr "Inclinaison φ :"
msgid "Statistics tool."
msgstr "Outil statistique."
-#: modules/tools/stats.c:261 modules/tools/stats.c:1095
+#: modules/tools/stats.c:261 modules/tools/stats.c:1091
msgid "Statistical Quantities"
msgstr "Statistiques"
@@ -14340,29 +15060,29 @@ msgstr "Statistiques"
msgid "Statistical quantities"
msgstr "Statistiques"
-#: modules/tools/stats.c:1002
+#: modules/tools/stats.c:998
msgid "Save Statistical Quantities"
msgstr "Enregistrer les statistiques"
-#: modules/tools/stats.c:1100
+#: modules/tools/stats.c:1096
#, c-format
msgid "File: %s\n"
msgstr "Fichier : %s\n"
-#: modules/tools/stats.c:1104
+#: modules/tools/stats.c:1100
#, c-format
msgid "Data channel: %s\n"
msgstr "Canal de données : %s\n"
-#: modules/tools/stats.c:1122
+#: modules/tools/stats.c:1118
msgid "Yes"
msgstr "Oui"
-#: modules/tools/stats.c:1122
+#: modules/tools/stats.c:1118
msgid "No"
msgstr "Non"
-#: modules/tools/stats.c:1132
+#: modules/tools/stats.c:1128
#, c-format
msgid ""
"Selected area: %s × %s at (%s, %s) px\n"
@@ -14386,182 +15106,178 @@ msgstr "/_Dimensions et unités..."
msgid "Volume Dimensions and Units"
msgstr "Dimensions et unités du volume"
-#: modules/volume/volume_calibrate.c:526
+#: modules/volume/volume_calibrate.c:486
msgid "_Value range:"
msgstr "Plage :"
-#: modules/volume/volume_calibrate.c:555
+#: modules/volume/volume_calibrate.c:508
msgid "Value shi_ft:"
msgstr "Décalage :"
-#: modules/volume/volume_calibrate.c:601
+#: modules/volume/volume_calibrate.c:542
msgid "_Value calibration factor:"
msgstr "Facteur de calibration :"
-#: modules/volume/volume_extract.c:223
+#: modules/volume/volume_extract.c:216
msgid "Shows and/or extracts a section of volume data"
msgstr "Affiche et/ou extrait une section de données volumiques"
-#: modules/volume/volume_extract.c:237
-msgid "/Show and _extract..."
+#: modules/volume/volume_extract.c:230
+msgid "/Show and _Extract..."
msgstr "/Afficher et _extraire..."
-#: modules/volume/volume_extract.c:241
+#: modules/volume/volume_extract.c:234
msgid "Show and/or extract a section of volume data"
msgstr "Afficher et/ou extraire une section de données volumiques"
-#: modules/volume/volume_extract.c:270
+#: modules/volume/volume_extract.c:263
msgid "X cross-section"
msgstr "Section X"
-#: modules/volume/volume_extract.c:271
+#: modules/volume/volume_extract.c:264
msgid "Y cross-section"
msgstr "Section Y"
-#: modules/volume/volume_extract.c:272
+#: modules/volume/volume_extract.c:265
msgid "Z cross-section"
msgstr "Section Z"
-#: modules/volume/volume_extract.c:273 modules/volume/volume_extract.c:698
+#: modules/volume/volume_extract.c:266 modules/volume/volume_extract.c:684
msgid "X direction sum"
msgstr "Somme selon X"
-#: modules/volume/volume_extract.c:274 modules/volume/volume_extract.c:700
+#: modules/volume/volume_extract.c:267 modules/volume/volume_extract.c:686
msgid "Y direction sum"
msgstr "Somme selon Y"
-#: modules/volume/volume_extract.c:275 modules/volume/volume_extract.c:702
+#: modules/volume/volume_extract.c:268 modules/volume/volume_extract.c:688
msgid "Z direction sum"
msgstr "Somme selon Z"
-#: modules/volume/volume_extract.c:278
+#: modules/volume/volume_extract.c:271
msgid "X direction"
msgstr "Direction X"
-#: modules/volume/volume_extract.c:279
+#: modules/volume/volume_extract.c:272
msgid "Y direction"
msgstr "Direction Y"
-#: modules/volume/volume_extract.c:280
+#: modules/volume/volume_extract.c:273
msgid "Z direction"
msgstr "Direction Z"
-#: modules/volume/volume_extract.c:322
+#: modules/volume/volume_extract.c:315
msgid "Volume data"
msgstr "Données volumiques"
-#: modules/volume/volume_extract.c:324
+#: modules/volume/volume_extract.c:317
msgid "_Load"
msgstr "Charger"
-#: modules/volume/volume_extract.c:336
+#: modules/volume/volume_extract.c:329
msgid "_Extract projection"
msgstr "_Extraire la projection"
-#: modules/volume/volume_extract.c:354
+#: modules/volume/volume_extract.c:347
msgid "Projections"
msgstr "Intersections"
-#: modules/volume/volume_extract.c:404
+#: modules/volume/volume_extract.c:395
msgid "Z position"
msgstr "Position Z"
-#: modules/volume/volume_extract.c:409
+#: modules/volume/volume_extract.c:405
msgid "Shown cut direction:"
msgstr "Direction de coupe affichée :"
-#: modules/volume/volume_extract.c:419 modules/volume/volume_extract.c:500
-msgid "Show mode:"
-msgstr "Mode d'affichage : "
-
-#: modules/volume/volume_extract.c:490
+#: modules/volume/volume_extract.c:485
msgid "Graph cut direction:"
msgstr "Direction de coupe du graphe :"
-#: modules/volume/volume_extract.c:525
+#: modules/volume/volume_extract.c:511
msgid "3D view"
msgstr "Vue 3D"
-#: modules/volume/volume_extract.c:550
+#: modules/volume/volume_extract.c:538
msgid "Zoom"
msgstr "Zoom"
-#: modules/volume/volume_extract.c:558
+#: modules/volume/volume_extract.c:545
msgid "Wireframe threshold"
msgstr "Seuil du modèle filaire"
-#: modules/volume/volume_extract.c:566
+#: modules/volume/volume_extract.c:552
msgid "Z scale"
msgstr "Échelle Z"
-#: modules/volume/volume_extract.c:574
+#: modules/volume/volume_extract.c:559
msgid "Opacity scale"
msgstr "Opacité"
-#: modules/volume/volume_extract.c:580
-msgid "apply perspective"
+#: modules/volume/volume_extract.c:565
+msgid "Apply perspective"
msgstr "Appliquer la perspective"
-#: modules/volume/volume_extract.c:589
-msgid "instant 3D render"
+#: modules/volume/volume_extract.c:574
+msgid "Instant 3D render"
msgstr "Rendu 3D instantané"
-#: modules/volume/volume_extract.c:598
+#: modules/volume/volume_extract.c:587
msgid "X view"
msgstr "Vue X"
-#: modules/volume/volume_extract.c:604
+#: modules/volume/volume_extract.c:592
msgid "Y view"
msgstr "Vue Y"
-#: modules/volume/volume_extract.c:610
+#: modules/volume/volume_extract.c:597
msgid "Z view"
msgstr "Vue Z"
-#: modules/volume/volume_extract.c:683
+#: modules/volume/volume_extract.c:669
#, c-format
msgid "X cross-section at x: %d"
msgstr "Section X pour x : %d"
-#: modules/volume/volume_extract.c:686
+#: modules/volume/volume_extract.c:672
#, c-format
msgid "Y cross-section at y: %d"
msgstr "Section Y pour y : %d"
-#: modules/volume/volume_extract.c:690
+#: modules/volume/volume_extract.c:676
#, c-format
msgid "Z cross-section at Z = %g %s (#%d)"
msgstr "Section Z pour Z = %g %s (#%d)"
-#: modules/volume/volume_extract.c:749 modules/volume/volume_slice.c:1264
+#: modules/volume/volume_extract.c:735 modules/volume/volume_slice.c:1278
#, c-format
msgid "X graph at y: %d z: %d"
msgstr "Graphe X pour y : %d z : %d"
-#: modules/volume/volume_extract.c:752 modules/volume/volume_slice.c:1273
+#: modules/volume/volume_extract.c:738 modules/volume/volume_slice.c:1287
#, c-format
msgid "Y graph at x: %d z: %d"
msgstr "Graphe Y pour x : %d z : %d"
-#: modules/volume/volume_extract.c:755 modules/volume/volume_slice.c:1255
+#: modules/volume/volume_extract.c:741 modules/volume/volume_slice.c:1269
#, c-format
msgid "Z graph at x: %d y: %d"
msgstr "Graphe Z pour x : %d y : %d"
-#: modules/volume/volume_extract.c:776
+#: modules/volume/volume_extract.c:762
msgid "Brick graph"
msgstr "Graphe d'un cube de données"
-#: modules/volume/volume_extract.c:1056
+#: modules/volume/volume_extract.c:1042
msgid "Load volume data"
msgstr "Charger des données volumiques"
-#: modules/volume/volume_extract.c:1218
+#: modules/volume/volume_extract.c:1204
#, c-format
msgid "Shown range %g to %g"
msgstr "Plage affichée : %g à %g"
-#: modules/volume/volume_extract.c:1911
+#: modules/volume/volume_extract.c:1897
msgid "Building wireframe model..."
msgstr "Construction du modèle filaire..."
@@ -14570,97 +15286,97 @@ msgid "Evaluate volume force-distance data"
msgstr "Évaluer les données force-distance volumiques"
#: modules/volume/volume_fdfit.c:213
-msgid "/_Evaluate FD data..."
+msgid "/_Evaluate FD Data..."
msgstr "/_Évaluer les données F-D (force-distance)..."
#: modules/volume/volume_fdfit.c:217
msgid "Evaluate force-distance volume data"
msgstr "Évaluer les données force-distance volumiques"
-#: modules/volume/volume_fdfit.c:368
+#: modules/volume/volume_fdfit.c:371
msgid "Curve _X position:"
msgstr "Position _X de la courbe :"
-#: modules/volume/volume_fdfit.c:386
+#: modules/volume/volume_fdfit.c:380
msgid "Curve _Y position:"
msgstr "Position _Y de la courbe :"
-#: modules/volume/volume_fdfit.c:535
+#: modules/volume/volume_fdfit.c:511
msgid "e_stimate"
msgstr "e_stimer"
-#: modules/volume/volume_invert.c:51
+#: modules/volume/volume_invert.c:39 modules/volume/volumeops.c:39
msgid "Inverts value in volume data"
msgstr "Inverse les valeurs dans les données volumiques"
-#: modules/volume/volume_invert.c:65
-msgid "/_Invert value"
+#: modules/volume/volume_invert.c:53
+msgid "/_Invert Value"
msgstr "/_Inverser les valeurs"
-#: modules/volume/volume_invert.c:69
+#: modules/volume/volume_invert.c:57
msgid "Invert value in volume data"
msgstr "Inverser les valeurs dans les données volumiques"
-#: modules/volume/volume_kmeans.c:94
+#: modules/volume/volume_kmeans.c:95
msgid "Calculates K-means clustering on volume data."
msgstr "Calcule le partitionnement par k-moyennes de données volumiques."
-#: modules/volume/volume_kmeans.c:108
-msgid "/_K-means clustering..."
+#: modules/volume/volume_kmeans.c:109
+msgid "/_K-Means Clustering..."
msgstr "/Partitionnement par _k-moyennes..."
-#: modules/volume/volume_kmeans.c:112
+#: modules/volume/volume_kmeans.c:113
msgid "Calculate K-means clustering on volume data"
msgstr "Calculer le partitionnement par k-moyennes de données volumiques"
-#: modules/volume/volume_kmeans.c:151
+#: modules/volume/volume_kmeans.c:152
msgid "K-means"
msgstr "k-moyennes"
-#: modules/volume/volume_kmeans.c:170 modules/volume/volume_kmedians.c:164
+#: modules/volume/volume_kmeans.c:170 modules/volume/volume_kmedians.c:163
msgid "_Number of clusters:"
msgstr "_Nombre de partitions :"
-#: modules/volume/volume_kmeans.c:177 modules/volume/volume_kmedians.c:171
+#: modules/volume/volume_kmeans.c:177 modules/volume/volume_kmedians.c:170
msgid "Convergence _precision digits:"
msgstr "Décimales de convergence :"
-#: modules/volume/volume_kmeans.c:184 modules/volume/volume_kmedians.c:178
+#: modules/volume/volume_kmeans.c:183 modules/volume/volume_kmedians.c:176
msgid "_Max. iterations:"
msgstr "Nombre d'itérations _max :"
-#: modules/volume/volume_kmeans.c:189 modules/volume/volume_kmedians.c:183
+#: modules/volume/volume_kmeans.c:187 modules/volume/volume_kmedians.c:181
msgid "_Normalize"
msgstr "_Normaliser"
-#: modules/volume/volume_kmeans.c:195
+#: modules/volume/volume_kmeans.c:193
msgid "_Remove outliers"
msgstr "Supp_rimer les points aberrants"
-#: modules/volume/volume_kmeans.c:208
+#: modules/volume/volume_kmeans.c:202
msgid "Outliers _threshold:"
msgstr "Seuil des poin_ts aberrants : "
-#: modules/volume/volume_kmeans.c:431
+#: modules/volume/volume_kmeans.c:425
msgid "K-means iteration..."
msgstr "Itération du calcul de k-moyennes..."
-#: modules/volume/volume_kmeans.c:651
+#: modules/volume/volume_kmeans.c:645
#, c-format
msgid "K-means cluster of %s"
msgstr "Groupe des k-moyennes de %s"
-#: modules/volume/volume_kmeans.c:660
+#: modules/volume/volume_kmeans.c:654
#, c-format
msgid "K-means error of %s"
msgstr "Erreur des k-moyennes de %s"
-#: modules/volume/volume_kmeans.c:670 modules/volume/volume_kmedians.c:514
+#: modules/volume/volume_kmeans.c:664 modules/volume/volume_kmedians.c:512
#, c-format
msgid "Pre-normalized intensity of %s"
msgstr "Intensité pré-normalisée de %s"
-#: modules/volume/volume_kmeans.c:702
+#: modules/volume/volume_kmeans.c:696
#, c-format
msgid "K-means center %d"
msgstr "Centre %d des k-moyennes"
@@ -14670,7 +15386,7 @@ msgid "Calculates K-medians clustering on volume data."
msgstr "Calcule le partitionnement par k-médianes de données volumiques."
#: modules/volume/volume_kmedians.c:102
-msgid "/_K-medians clustering..."
+msgid "/_K-Medians Clustering..."
msgstr "/Partitionnement par _k-médianes..."
#: modules/volume/volume_kmedians.c:106
@@ -14681,46 +15397,46 @@ msgstr "Calculer le partitionnement par k-médianes de données volumiques"
msgid "K-Medians"
msgstr "k-médianes"
-#: modules/volume/volume_kmedians.c:392
+#: modules/volume/volume_kmedians.c:390
msgid "K-medians iteration..."
msgstr "Itération du calcul de k-médianes..."
-#: modules/volume/volume_kmedians.c:495
+#: modules/volume/volume_kmedians.c:493
#, c-format
msgid "K-medians cluster of %s"
msgstr "Groupe des k-médianes de %s"
-#: modules/volume/volume_kmedians.c:504
+#: modules/volume/volume_kmedians.c:502
#, c-format
msgid "K-medians error of %s"
msgstr "Erreur des k-médianes de %s"
-#: modules/volume/volume_kmedians.c:546
+#: modules/volume/volume_kmedians.c:544
#, c-format
msgid "K-medians center %d"
msgstr "Centre %d des k-médianes"
-#: modules/volume/volume_linestat.c:171
+#: modules/volume/volume_linestat.c:173
msgid "Summarizes profiles of volume data to a channel."
msgstr "Compile dans un canal les profils de données volumiques."
-#: modules/volume/volume_linestat.c:185
+#: modules/volume/volume_linestat.c:187
msgid "/Summarize _Profiles..."
msgstr "/Compiler les _profils..."
-#: modules/volume/volume_linestat.c:189
+#: modules/volume/volume_linestat.c:191
msgid "Summarize profiles"
msgstr "Compiler les profils"
-#: modules/volume/volume_linestat.c:249
+#: modules/volume/volume_linestat.c:251
msgid "_Extract image"
msgstr "_Extraire l'image"
-#: modules/volume/volume_linestat.c:250
+#: modules/volume/volume_linestat.c:252
msgid "Set _preview"
msgstr "Définir l'a_perçu"
-#: modules/volume/volume_linestat.c:284
+#: modules/volume/volume_linestat.c:289
msgid "Summarize Volume Profiles"
msgstr "Compiler les profils volumiques"
@@ -14745,53 +15461,113 @@ msgstr "Coupe"
msgid "Line graph"
msgstr "Profil"
-#: modules/volume/volume_slice.c:290
+#: modules/volume/volume_slice.c:292
msgid "Slice Volume Data"
msgstr "Coupe de données volumiques"
-#: modules/volume/volume_slice.c:369
+#: modules/volume/volume_slice.c:371
msgid "_Base plane:"
msgstr "Plan de _base :"
-#: modules/volume/volume_slice.c:420
+#: modules/volume/volume_slice.c:422
msgid "Extract _multiple items"
msgstr "Extraire plusieurs élé_ments"
-#: modules/volume/volume_slice.c:437
+#: modules/volume/volume_slice.c:439
msgid "Positions"
msgstr "Positions"
-#: modules/volume/volume_slice.c:484
+#: modules/volume/volume_slice.c:492
msgid "_Z:"
msgstr "_Z :"
-#: modules/volume/volume_slice.c:1156
+#: modules/volume/volume_slice.c:1167
#, c-format
msgid "Z slice at %.*f%s%s (#%d)"
msgstr "Section Z %.*f%s%s (#%d)"
-#: modules/volume/volume_slice.c:1167
+#: modules/volume/volume_slice.c:1178
#, c-format
msgid "Y slice at %.*f%s%s (#%d)"
msgstr "Section Y %.*f%s%s (#%d)"
-#: modules/volume/volume_slice.c:1178
+#: modules/volume/volume_slice.c:1189
#, c-format
msgid "X slice at %.*f%s%s (#%d)"
msgstr "Section X %.*f%s%s (#%d)"
-#: modules/volume/volume_slice.c:1307
+#: modules/volume/volume_slice.c:1325
msgid "Volume Z graphs"
msgstr "Graphes volumiques Z"
-#: modules/volume/volume_slice.c:1314
+#: modules/volume/volume_slice.c:1332
msgid "Volume X graphs"
msgstr "Graphes volumiques X"
-#: modules/volume/volume_slice.c:1321
+#: modules/volume/volume_slice.c:1339
msgid "Volume Y graphs"
msgstr "Graphes volumiques Y"
+#: modules/volume/volume_swaxes.c:104
+msgid "Swaps axes of volume data."
+msgstr "Intervertit les axes des données volumiques"
+
+#: modules/volume/volume_swaxes.c:118
+msgid "/S_wap axes..."
+msgstr "/Intervertir les axes..."
+
+#: modules/volume/volume_swaxes.c:122
+msgid "Swap axes"
+msgstr "Intervertir les axes"
+
+#: modules/volume/volume_swaxes.c:156
+msgid "X"
+msgstr "X"
+
+#: modules/volume/volume_swaxes.c:157
+msgid "X, reversed"
+msgstr "X, inversé"
+
+#: modules/volume/volume_swaxes.c:158
+msgid "Y"
+msgstr "Y"
+
+#: modules/volume/volume_swaxes.c:159
+msgid "Y, reversed"
+msgstr "Y, inversé"
+
+#: modules/volume/volume_swaxes.c:160
+msgid "Z"
+msgstr "Z"
+
+#: modules/volume/volume_swaxes.c:161
+msgid "Z, reversed"
+msgstr "Z, inversé"
+
+#: modules/volume/volume_swaxes.c:175
+msgid "Swap Volume Axes"
+msgstr "Intervertir les axes du volume"
+
+#: modules/volume/volume_swaxes.c:196
+msgid "Current _X axis will become:"
+msgstr "L'axe _X courant deviendra :"
+
+#: modules/volume/volume_swaxes.c:204
+msgid "Current _Y axis will become:"
+msgstr "L'axe _Y courant deviendra :"
+
+#: modules/volume/volume_swaxes.c:212
+msgid "Current _Z axis will become:"
+msgstr "L'axe _Z courant deviendra :"
+
+#: modules/volume/volume_swaxes.c:219
+msgid "Create new volume data"
+msgstr "Créer de nouvelles données volumiques"
+
+#: modules/volume/volume_swaxes.c:286
+msgid "Z axis calibration will be lost."
+msgstr "L'axe de calibration Z sera perdu."
+
#: modules/volume/volume_zcal.c:104
msgid "Attaches, extracts and removes volume data z-axis calibration."
msgstr ""
@@ -14862,6 +15638,14 @@ msgstr ""
"Le nombre de valeurs du fichier de données %d\n"
"diffère du nombre de plans %d."
+#: modules/volume/volumeops.c:53
+msgid "/Extract _Preview"
+msgstr "/Extraire l'a_perçu"
+
+#: modules/volume/volumeops.c:57
+msgid "Extract volume data preview to an image"
+msgstr "Extraire l'aperçu des données volumiques vers une image"
+
#: modules/xyz/xyz_drift.c:267
msgid "Analyzes drift in XYZ data."
msgstr "Analyse la dérive dans des données XYZ."
@@ -14906,7 +15690,7 @@ msgstr "dérive selon l'axe z"
msgid "Analyze XYZ Drift"
msgstr "Analyser la dérive de données XYZ"
-#: modules/xyz/xyz_drift.c:566 modules/xyz/xyz_raster.c:391
+#: modules/xyz/xyz_drift.c:566 modules/xyz/xyz_raster.c:406
msgid "Reset Ran_ges"
msgstr "Initialiser les pla_ges"
@@ -14914,11 +15698,11 @@ msgstr "Initialiser les pla_ges"
msgid "_Guess parameters"
msgstr "Estimer les paramètres"
-#: modules/xyz/xyz_drift.c:778 modules/xyz/xyz_raster.c:570
+#: modules/xyz/xyz_drift.c:778 modules/xyz/xyz_raster.c:539
msgid "_X-range:"
msgstr "Plage _X :"
-#: modules/xyz/xyz_drift.c:800 modules/xyz/xyz_raster.c:592
+#: modules/xyz/xyz_drift.c:800 modules/xyz/xyz_raster.c:561
msgid "_Y-range:"
msgstr "Plage _Y :"
@@ -14996,7 +15780,7 @@ msgstr "Aucun voisin trouvé"
msgid "Fitting in progress..."
msgstr "Ajustement en cours"
-#: modules/xyz/xyz_drift.c:2269 modules/xyz/xyz_raster.c:1012
+#: modules/xyz/xyz_drift.c:2264 modules/xyz/xyz_raster.c:981
msgid "Physical dimensions are invalid."
msgstr "Les dimensions physiques sont invalides."
@@ -15036,41 +15820,41 @@ msgstr "Mettre à niveau les données _XYZ"
msgid "Update X and Y of _all compatible data"
msgstr "Mettre à jour les valeurs X et Y de toutes les données comp_atibles"
-#: modules/xyz/xyz_raster.c:197
+#: modules/xyz/xyz_raster.c:194
msgid "Rasterizes XYZ data to images."
msgstr "Rastérise des données XYZ."
-#: modules/xyz/xyz_raster.c:211
+#: modules/xyz/xyz_raster.c:208
msgid "/_Rasterize..."
msgstr "/_Rastériser..."
-#: modules/xyz/xyz_raster.c:215
+#: modules/xyz/xyz_raster.c:212
msgid "Rasterize to image"
msgstr "Rastériser des données"
-#: modules/xyz/xyz_raster.c:340
+#: modules/xyz/xyz_raster.c:337
msgid "Rasterize XYZ Data"
msgstr "Rastériser des données XYZ"
-#: modules/xyz/xyz_raster.c:354
+#: modules/xyz/xyz_raster.c:351
msgid "Create Image _Directly"
msgstr "Créer _directement l'image"
-#: modules/xyz/xyz_raster.c:360
+#: modules/xyz/xyz_raster.c:357
msgid "XY points form a regular grid so interpolation is not necessary."
msgstr ""
"Les points XY forment une grille régulière, aucune interpolation n'est "
"nécessaire."
-#: modules/xyz/xyz_raster.c:381
+#: modules/xyz/xyz_raster.c:392
msgid "Make Pixels S_quare"
msgstr "Rendre les pixels carrés"
-#: modules/xyz/xyz_raster.c:642
+#: modules/xyz/xyz_raster.c:611
msgid "Field"
msgstr "Global"
-#: modules/xyz/xyz_raster.c:956
+#: modules/xyz/xyz_raster.c:925
#, c-format
msgid ""
"Number of points: %u\n"
@@ -15081,7 +15865,7 @@ msgstr ""
"Fusionnés car trop proches : %u\n"
"Ajoutés sur les bords : %u"
-#: modules/xyz/xyz_raster.c:1091
+#: modules/xyz/xyz_raster.c:1065
msgid ""
"XYZ data regularization failed due to numerical instability or was "
"interrupted."
@@ -15089,6 +15873,87 @@ msgstr ""
"La régularisation des données XYZ a échoué à cause d'une instabilité "
"numérique ou a été interrompue."
+#~ msgid "Re_fine"
+#~ msgstr "A_ffiner"
+
+#~ msgid "pixels"
+#~ msgstr "pixels"
+
+#~ msgid "_Like Current Channel"
+#~ msgstr "Identique au canal courant"
+
+#~ msgid "Surface _coverage:"
+#~ msgstr "Taux de _couverture :"
+
+#~ msgid "Distribute"
+#~ msgstr "Distribuer"
+
+#~ msgid "Replace"
+#~ msgstr "Remplacer"
+
+#~ msgid "_Fix res.:"
+#~ msgstr "Résolution _fixe :"
+
+#~ msgid "Reco_mpute"
+#~ msgstr "Recalculer"
+
+#~ msgid "Show mode:"
+#~ msgstr "Mode d'affichage : "
+
+#~ msgid "Fast Fourier Transform"
+#~ msgstr "Transformée de Fourier Rapide (FFT)"
+
+#~ msgid "built-in SimpleFFT\n"
+#~ msgstr "Algorithme SimpleFFT interne\n"
+
+#~ msgid "Initializing GUI"
+#~ msgstr "Initialisation de l'interface graphique"
+
+#~ msgid "Create new channel"
+#~ msgstr "Créer un nouveau canal"
+
+#~ msgid "Hx"
+#~ msgstr "Hx"
+
+#~ msgid "Hz"
+#~ msgstr "Hz"
+
+#~ msgid "Fz"
+#~ msgstr "Fz"
+
+#~ msgid "dFz/dz"
+#~ msgstr "dFz/dz"
+
+#~ msgid "d²Fz/dz²"
+#~ msgstr "d²Fz/dz²"
+
+#~ msgid "Slab"
+#~ msgstr "Plaque"
+
+#~ msgid "Slab size _x:"
+#~ msgstr "Taille de la plaque selon _x :"
+
+#~ msgid "Slab size _y:"
+#~ msgstr "Taille de la plaque selon _y :"
+
+#~ msgid "Slab size _z (length):"
+#~ msgstr "Dimension _z de la plaque (longueur) : "
+
+#~ msgid "Stitch operations on data fields."
+#~ msgstr "Assemblage de données."
+
+#~ msgid "Stitch operations on data"
+#~ msgstr "Assemblage de données"
+
+#~ msgid "X offset"
+#~ msgstr "Décalage X"
+
+#~ msgid "Y offset"
+#~ msgstr "Décalage Y"
+
+#~ msgid "/S_ynthetic/_Particles..."
+#~ msgstr "/S_ynthèse/_Particules..."
+
#~ msgid "Graph function written in Python"
#~ msgstr "Fonction graphique écrite en Python"
@@ -15129,9 +15994,6 @@ msgstr ""
#~ msgid "2D fitting"
#~ msgstr "Ajustement 2D"
-#~ msgid "/_Level/_Fit Sphere..."
-#~ msgstr "/Niveau/Ajuster la sphère..."
-
#~ msgid "Fit by sphere"
#~ msgstr "Ajuster par une sphère."
@@ -15479,9 +16341,6 @@ msgstr ""
#~ msgid "Header ended within a Multipass-Config table."
#~ msgstr "L'en-tête se termine avec une table Multipass-Config."
-#~ msgid "Starting..."
-#~ msgstr "Démarrage..."
-
#~ msgid "Initializing"
#~ msgstr "Initialisation"
@@ -15544,9 +16403,6 @@ msgstr ""
#~ msgid "_Interpolation:"
#~ msgstr "_Interpolation :"
-#~ msgid "Along gradient"
-#~ msgstr "À côté du gradient"
-
#~ msgid "Data must be displayed in a window for pixmap export."
#~ msgstr ""
#~ "Les données doivent affichées dans une fenêtre pour l'export vers un "
@@ -15791,9 +16647,6 @@ msgstr ""
#~ msgid "Removes the entire filter mask"
#~ msgstr "Supprimer complètement le masque filtre"
-#~ msgid "Ra:"
-#~ msgstr "Ra :"
-
#~ msgid "Rms:"
#~ msgstr "Rms :"
@@ -15812,9 +16665,6 @@ msgstr ""
#~ msgid "Simulate spherical particle deposition."
#~ msgstr "Simuler un dépôt de particules sphériques."
-#~ msgid "/_Synthetic/_Deposit particles..."
-#~ msgstr "/S_ynthèse/Dépôt de particule_s..."
-
#~ msgid "_Start"
#~ msgstr "Début"
@@ -15842,13 +16692,6 @@ msgstr ""
#~ msgid "Uniform"
#~ msgstr "Uniforme"
-#~ msgid "Ideal Geometry"
-#~ msgstr "Géométrie idéale"
-
-#, fuzzy
-#~ msgid "Pitch:"
-#~ msgstr "Pas :"
-
#~ msgid "Constant current tunnel spectroscopy (CITS) is not supported."
#~ msgstr ""
#~ "La spectroscopie à courant tunnel constant (CITS) n'est pas supportée."
@@ -15933,9 +16776,6 @@ msgstr ""
#~ msgid "Attach Mask"
#~ msgstr "Attacher un masque"
-#~ msgid "Output"
-#~ msgstr "Sortie"
-
#~ msgid "File too small (less than %d bytes). Header is not complete."
#~ msgstr ""
#~ "Le fichier est trop petit (moins de %d octets). L'en-tête est imcomplet."
diff --git a/po/gwyddion.pot b/po/gwyddion.pot
index b219238..f06dddf 100644
--- a/po/gwyddion.pot
+++ b/po/gwyddion.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: yeti at gwyddion.net\n"
-"POT-Creation-Date: 2016-11-18 11:05+0100\n"
+"POT-Creation-Date: 2017-08-15 17:48+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
@@ -128,7 +128,8 @@ msgstr ""
#: app/data-browser-aux.c:1480 app/data-browser.c:2280 app/data-browser.c:2887
#: app/data-browser.c:3707 app/data-browser.c:3857 app/data-browser.c:4139
#: app/data-browser.c:4504 app/data-browser.c:4590 app/data-browser.c:5016
-#: app/resource-editor.c:366 modules/process/convolution_filter.c:691
+#: app/resource-editor.c:366 modules/file/xyzexport.c:214
+#: modules/process/convolution_filter.c:691
msgid "Untitled"
msgstr ""
@@ -136,97 +137,105 @@ msgstr ""
msgid "Initial residua evaluation..."
msgstr ""
-#: libgwyddion/gwynlfit.c:479 modules/process/fit-shape.c:1632
+#: libgwyddion/gwynlfit.c:479 modules/process/fit-shape.c:1646
msgid "Fitting..."
msgstr ""
-#: libgwyddion/gwynlfitpreset.c:1442 libprocess/gwyprocessenums.c:101
-#: libprocess/gwyshapefitpreset.c:347
+#: libgwyddion/gwynlfitpreset.c:1549 libprocess/gwyprocessenums.c:101
+#: libprocess/gwyshapefitpreset.c:347 modules/process/psf-fit.c:157
msgid "Gaussian"
msgstr ""
-#: libgwyddion/gwynlfitpreset.c:1457
+#: libgwyddion/gwynlfitpreset.c:1564
msgid "Gaussian (PSDF)"
msgstr ""
-#: libgwyddion/gwynlfitpreset.c:1470
+#: libgwyddion/gwynlfitpreset.c:1577
msgid "Gaussian (ACF)"
msgstr ""
-#: libgwyddion/gwynlfitpreset.c:1483
+#: libgwyddion/gwynlfitpreset.c:1590
msgid "Gaussian (HHCF)"
msgstr ""
-#: libgwyddion/gwynlfitpreset.c:1496
+#: libgwyddion/gwynlfitpreset.c:1603
msgid "Gaussian (RPSDF)"
msgstr ""
-#: libgwyddion/gwynlfitpreset.c:1509
+#: libgwyddion/gwynlfitpreset.c:1616
msgid "Two Gaussians (PSDF)"
msgstr ""
-#: libgwyddion/gwynlfitpreset.c:1524 modules/xyz/xyz_drift.c:841
-#: modules/xyz/xyz_drift.c:846 modules/xyz/xyz_drift.c:1819
+#: libgwyddion/gwynlfitpreset.c:1631 modules/xyz/xyz_drift.c:841
+#: modules/xyz/xyz_drift.c:846 modules/xyz/xyz_drift.c:1818
msgid "Exponential"
msgstr ""
-#: libgwyddion/gwynlfitpreset.c:1536
+#: libgwyddion/gwynlfitpreset.c:1643
msgid "Exponential (PSDF)"
msgstr ""
-#: libgwyddion/gwynlfitpreset.c:1549
+#: libgwyddion/gwynlfitpreset.c:1656
msgid "Exponential (ACF)"
msgstr ""
-#: libgwyddion/gwynlfitpreset.c:1561
+#: libgwyddion/gwynlfitpreset.c:1668
msgid "Exponential (HHCF)"
msgstr ""
-#: libgwyddion/gwynlfitpreset.c:1574
+#: libgwyddion/gwynlfitpreset.c:1681
msgid "Exponential (RPSDF)"
msgstr ""
-#: libgwyddion/gwynlfitpreset.c:1588
+#: libgwyddion/gwynlfitpreset.c:1695
+msgid "K-correlated (PSDF)"
+msgstr ""
+
+#: libgwyddion/gwynlfitpreset.c:1709
msgid "Polynomial (order 0)"
msgstr ""
-#: libgwyddion/gwynlfitpreset.c:1599 modules/xyz/xyz_drift.c:1805
+#: libgwyddion/gwynlfitpreset.c:1720 modules/xyz/xyz_drift.c:1804
msgid "Polynomial (order 1)"
msgstr ""
-#: libgwyddion/gwynlfitpreset.c:1610
+#: libgwyddion/gwynlfitpreset.c:1731
msgid "Polynomial (order 2)"
msgstr ""
-#: libgwyddion/gwynlfitpreset.c:1622
+#: libgwyddion/gwynlfitpreset.c:1743
msgid "Polynomial (order 3)"
msgstr ""
-#: libgwyddion/gwynlfitpreset.c:1635
+#: libgwyddion/gwynlfitpreset.c:1756
msgid "Square wave"
msgstr ""
-#: libgwyddion/gwynlfitpreset.c:1651
+#: libgwyddion/gwynlfitpreset.c:1772
msgid "Parabolic step"
msgstr ""
-#: libgwyddion/gwynlfitpreset.c:1667
+#: libgwyddion/gwynlfitpreset.c:1788
msgid "Smooth slanted step"
msgstr ""
-#: libgwyddion/gwynlfitpreset.c:1684
+#: libgwyddion/gwynlfitpreset.c:1805
msgid "Smooth bent step"
msgstr ""
-#: libgwyddion/gwynlfitpreset.c:1700
+#: libgwyddion/gwynlfitpreset.c:1821
+msgid "Boltzmann bent step"
+msgstr ""
+
+#: libgwyddion/gwynlfitpreset.c:1837
msgid "Power"
msgstr ""
-#: libgwyddion/gwynlfitpreset.c:1712 libprocess/gwyshapefitpreset.c:348
+#: libgwyddion/gwynlfitpreset.c:1849 libprocess/gwyshapefitpreset.c:348
msgid "Lorentzian"
msgstr ""
-#: libgwyddion/gwynlfitpreset.c:1726
+#: libgwyddion/gwynlfitpreset.c:1863
msgid "Sinc"
msgstr ""
@@ -247,7 +256,7 @@ msgid "Step height (positive)"
msgstr ""
#: libprocess/cdline.c:590 libprocess/cdline.c:599
-#: libgwydgets/gwydgetenums.c:48 modules/process/hough.c:170
+#: libgwydgets/gwydgetenums.c:48 modules/process/hough.c:163
msgid "Line"
msgstr ""
@@ -260,7 +269,7 @@ msgid "Circle (down)"
msgstr ""
#: libprocess/cdline.c:608 libprocess/cdline.c:617
-#: libgwydgets/gwygraphareadialog.c:557 modules/process/hough.c:171
+#: libgwydgets/gwygraphareadialog.c:550 modules/process/hough.c:164
msgid "Circle"
msgstr ""
@@ -268,237 +277,237 @@ msgstr ""
msgid "Circle (up)"
msgstr ""
-#: libprocess/gwygrainvalue.c:64
+#: libprocess/gwygrainvalue.c:62
msgid "Grain number"
msgstr ""
-#: libprocess/gwygrainvalue.c:73 modules/process/curvature.c:129
+#: libprocess/gwygrainvalue.c:71 modules/process/curvature.c:128
msgid "Center x position"
msgstr ""
-#: libprocess/gwygrainvalue.c:82 modules/process/curvature.c:130
+#: libprocess/gwygrainvalue.c:80 modules/process/curvature.c:129
msgid "Center y position"
msgstr ""
-#: libprocess/gwygrainvalue.c:91
+#: libprocess/gwygrainvalue.c:89
msgid "Minimum value"
msgstr ""
-#: libprocess/gwygrainvalue.c:100
+#: libprocess/gwygrainvalue.c:98
msgid "Maximum value"
msgstr ""
-#: libprocess/gwygrainvalue.c:109 modules/process/bdep_synth.c:133
-#: modules/tools/filter.c:237
+#: libprocess/gwygrainvalue.c:107 modules/process/bdep_synth.c:133
+#: modules/tools/filter.c:238
msgid "Mean value"
msgstr ""
-#: libprocess/gwygrainvalue.c:118 modules/tools/filter.c:238
+#: libprocess/gwygrainvalue.c:116 modules/tools/filter.c:239
msgid "Median value"
msgstr ""
-#: libprocess/gwygrainvalue.c:127
+#: libprocess/gwygrainvalue.c:125
msgid "Minimum value on boundary"
msgstr ""
-#: libprocess/gwygrainvalue.c:136
+#: libprocess/gwygrainvalue.c:134
msgid "Maximum value on boundary"
msgstr ""
-#: libprocess/gwygrainvalue.c:145
+#: libprocess/gwygrainvalue.c:143
msgid "Pixel area"
msgstr ""
-#: libprocess/gwygrainvalue.c:154
+#: libprocess/gwygrainvalue.c:152
msgid "Projected area"
msgstr ""
-#: libprocess/gwygrainvalue.c:163
+#: libprocess/gwygrainvalue.c:161
msgid "Surface area"
msgstr ""
-#: libprocess/gwygrainvalue.c:172
+#: libprocess/gwygrainvalue.c:170
msgid "Equivalent square side"
msgstr ""
-#: libprocess/gwygrainvalue.c:181
+#: libprocess/gwygrainvalue.c:179
msgid "Equivalent disc radius"
msgstr ""
-#: libprocess/gwygrainvalue.c:190
+#: libprocess/gwygrainvalue.c:188
msgid "Area above half-height"
msgstr ""
-#: libprocess/gwygrainvalue.c:199
+#: libprocess/gwygrainvalue.c:197
msgid "Area of convex hull"
msgstr ""
#. TRANSLATORS: Grain volume calculated using basis (foot) set to
#. * zero.
-#: libprocess/gwygrainvalue.c:210
+#: libprocess/gwygrainvalue.c:208
msgid "Zero basis volume"
msgstr ""
#. TRANSLATORS: Grain volume calculated using basis (foot) set to the
#. * grain minimum.
-#: libprocess/gwygrainvalue.c:221
+#: libprocess/gwygrainvalue.c:219
msgid "Grain minimum basis volume"
msgstr ""
#. TRANSLATORS: Grain volume calculated using basis (foot) set to the
#. * Laplacian background.
-#: libprocess/gwygrainvalue.c:232
+#: libprocess/gwygrainvalue.c:230
msgid "Laplacian background basis volume"
msgstr ""
-#: libprocess/gwygrainvalue.c:241
+#: libprocess/gwygrainvalue.c:239
msgid "Projected boundary length"
msgstr ""
-#: libprocess/gwygrainvalue.c:250
+#: libprocess/gwygrainvalue.c:248
msgid "Minimum bounding size"
msgstr ""
-#: libprocess/gwygrainvalue.c:259
+#: libprocess/gwygrainvalue.c:257
msgid "Minimum bounding direction"
msgstr ""
-#: libprocess/gwygrainvalue.c:268
+#: libprocess/gwygrainvalue.c:266
msgid "Maximum bounding size"
msgstr ""
-#: libprocess/gwygrainvalue.c:277
+#: libprocess/gwygrainvalue.c:275
msgid "Maximum bounding direction"
msgstr ""
-#: libprocess/gwygrainvalue.c:286
+#: libprocess/gwygrainvalue.c:284
msgid "Maximum inscribed disc radius"
msgstr ""
-#: libprocess/gwygrainvalue.c:295
+#: libprocess/gwygrainvalue.c:293
msgid "Maximum inscribed disc center x position"
msgstr ""
-#: libprocess/gwygrainvalue.c:304
+#: libprocess/gwygrainvalue.c:302
msgid "Maximum inscribed disc center y position"
msgstr ""
-#: libprocess/gwygrainvalue.c:313
+#: libprocess/gwygrainvalue.c:311
msgid "Minimum circumcircle radius"
msgstr ""
-#: libprocess/gwygrainvalue.c:322
+#: libprocess/gwygrainvalue.c:320
msgid "Minimum circumcircle center x position"
msgstr ""
-#: libprocess/gwygrainvalue.c:331
+#: libprocess/gwygrainvalue.c:329
msgid "Minimum circumcircle center y position"
msgstr ""
-#: libprocess/gwygrainvalue.c:340
+#: libprocess/gwygrainvalue.c:338
msgid "Mean radius"
msgstr ""
-#: libprocess/gwygrainvalue.c:349 modules/tools/readvalue.c:319
+#: libprocess/gwygrainvalue.c:347 modules/tools/readvalue.c:322
msgid "Inclination θ"
msgstr ""
-#: libprocess/gwygrainvalue.c:358 modules/tools/readvalue.c:329
+#: libprocess/gwygrainvalue.c:356 modules/tools/readvalue.c:332
msgid "Inclination φ"
msgstr ""
-#: libprocess/gwygrainvalue.c:367
+#: libprocess/gwygrainvalue.c:365
msgid "Curvature center x position"
msgstr ""
-#: libprocess/gwygrainvalue.c:376
+#: libprocess/gwygrainvalue.c:374
msgid "Curvature center y position"
msgstr ""
-#: libprocess/gwygrainvalue.c:385
+#: libprocess/gwygrainvalue.c:383
msgid "Curvature center z value"
msgstr ""
-#: libprocess/gwygrainvalue.c:394 modules/tools/readvalue.c:344
+#: libprocess/gwygrainvalue.c:392 modules/tools/readvalue.c:347
msgid "Curvature 1"
msgstr ""
-#: libprocess/gwygrainvalue.c:403 modules/tools/readvalue.c:354
+#: libprocess/gwygrainvalue.c:401 modules/tools/readvalue.c:357
msgid "Curvature 2"
msgstr ""
-#: libprocess/gwygrainvalue.c:412
+#: libprocess/gwygrainvalue.c:410
msgid "Curvature angle 1"
msgstr ""
-#: libprocess/gwygrainvalue.c:421
+#: libprocess/gwygrainvalue.c:419
msgid "Curvature angle 2"
msgstr ""
-#: libprocess/gwygrainvalue.c:430
+#: libprocess/gwygrainvalue.c:428
msgid "Major semiaxis of equivalent ellipse"
msgstr ""
-#: libprocess/gwygrainvalue.c:439
+#: libprocess/gwygrainvalue.c:437
msgid "Minor semiaxis of equivalent ellipse"
msgstr ""
-#: libprocess/gwygrainvalue.c:448
+#: libprocess/gwygrainvalue.c:446
msgid "Orientation of equivalent ellipse"
msgstr ""
-#: libprocess/gwygrainvalue.c:1120
+#: libprocess/gwygrainvalue.c:1118
msgid "Id"
msgstr ""
-#: libprocess/gwygrainvalue.c:1121 modules/graph/graph_peaks.c:156
-#: modules/process/extract_path.c:391 modules/process/wave_synth.c:482
-#: modules/tools/readvalue.c:251
+#: libprocess/gwygrainvalue.c:1119 modules/graph/graph_peaks.c:154
+#: modules/process/extract_path.c:391 modules/process/wave_synth.c:513
+#: modules/tools/readvalue.c:253
msgid "Position"
msgstr ""
-#: libprocess/gwygrainvalue.c:1122 app/meta.c:411 modules/file/imgexport.c:4625
-#: modules/process/curvature.c:762 modules/tools/level3.c:468
-#: modules/tools/readvalue.c:286
+#: libprocess/gwygrainvalue.c:1120 app/meta.c:411 modules/file/imgexport.c:4573
+#: modules/process/curvature.c:759 modules/tools/level3.c:475
+#: modules/tools/readvalue.c:290
msgid "Value"
msgstr ""
-#: libprocess/gwygrainvalue.c:1123
+#: libprocess/gwygrainvalue.c:1121
msgid "Area"
msgstr ""
-#: libprocess/gwygrainvalue.c:1124 app/data-browser.c:5624 app/toolbox.c:110
+#: libprocess/gwygrainvalue.c:1122 app/data-browser.c:5624 app/toolbox.c:115
msgid "Volume"
msgstr ""
-#: libprocess/gwygrainvalue.c:1125
+#: libprocess/gwygrainvalue.c:1123
msgid "Boundary"
msgstr ""
-#: libprocess/gwygrainvalue.c:1126 modules/process/pat_synth.c:829
-#: modules/process/pat_synth.c:1131 modules/process/pat_synth.c:1466
-#: modules/tools/linestats.c:171 modules/volume/volume_linestat.c:147
+#: libprocess/gwygrainvalue.c:1124 modules/process/pat_synth.c:830
+#: modules/process/pat_synth.c:1132 modules/process/pat_synth.c:1467
+#: modules/tools/linestats.c:171 modules/volume/volume_linestat.c:149
msgid "Slope"
msgstr ""
-#: libprocess/gwygrainvalue.c:1127 modules/process/curvature.c:213
-#: modules/process/curvature.c:613
+#: libprocess/gwygrainvalue.c:1125 modules/process/curvature.c:212
+#: modules/process/curvature.c:615
msgid "Curvature"
msgstr ""
-#: libprocess/gwygrainvalue.c:1128
+#: libprocess/gwygrainvalue.c:1126
msgid "Moment"
msgstr ""
-#: libprocess/gwygrainvalue.c:1132
+#: libprocess/gwygrainvalue.c:1130
msgid "User"
msgstr ""
-#: libprocess/gwyprocessenums.c:44
+#: libprocess/gwyprocessenums.c:44 modules/process/preview.h:263
msgid "Union"
msgstr ""
-#: libprocess/gwyprocessenums.c:45
+#: libprocess/gwyprocessenums.c:45 modules/process/preview.h:255
msgid "Intersection"
msgstr ""
@@ -577,13 +586,13 @@ msgid "Scale and space adaptive"
msgstr ""
#. TRANSLATORS: Interpolation type (AKA nearest neighbour)
-#: libprocess/gwyprocessenums.c:207 modules/file/imgexport.c:3791
-#: modules/xyz/xyz_raster.c:640
+#: libprocess/gwyprocessenums.c:207 modules/file/imgexport.c:3756
+#: modules/xyz/xyz_raster.c:609
msgid "Round"
msgstr ""
-#: libprocess/gwyprocessenums.c:208 modules/file/imgexport.c:3792
-#: modules/xyz/xyz_raster.c:641
+#: libprocess/gwyprocessenums.c:208 modules/file/imgexport.c:3757
+#: modules/xyz/xyz_raster.c:610
msgid "Linear"
msgstr ""
@@ -671,27 +680,27 @@ msgstr ""
msgid "Use entire image (ignore mask)"
msgstr ""
-#: libprocess/gwyprocessenums.c:602
+#: libprocess/gwyprocessenums.c:604
msgid "distance|City-block"
msgstr ""
-#: libprocess/gwyprocessenums.c:603
+#: libprocess/gwyprocessenums.c:605
msgid "distance|Chess"
msgstr ""
-#: libprocess/gwyprocessenums.c:604
+#: libprocess/gwyprocessenums.c:606
msgid "distance|Octagonal 4,8"
msgstr ""
-#: libprocess/gwyprocessenums.c:605
+#: libprocess/gwyprocessenums.c:607
msgid "distance|Octagonal 8,4"
msgstr ""
-#: libprocess/gwyprocessenums.c:606
+#: libprocess/gwyprocessenums.c:608
msgid "distance|Octagonal"
msgstr ""
-#: libprocess/gwyprocessenums.c:607
+#: libprocess/gwyprocessenums.c:609
msgid "distance|Euclidean"
msgstr ""
@@ -727,11 +736,11 @@ msgstr ""
msgid "Ring"
msgstr ""
-#: libprocess/morph_lib.c:169 libprocess/tip.c:1043
+#: libprocess/morph_lib.c:169 libprocess/tip.c:1052
msgid "Dilation..."
msgstr ""
-#: libprocess/morph_lib.c:235 libprocess/tip.c:1164
+#: libprocess/morph_lib.c:235 libprocess/tip.c:1173
msgid "Erosion..."
msgstr ""
@@ -762,81 +771,81 @@ msgid_plural "Found %d internal local maxima"
msgstr[0] ""
msgstr[1] ""
-#: libprocess/tip.c:422
+#: libprocess/tip.c:431
msgid "Pyramid"
msgstr ""
-#: libprocess/tip.c:423 libprocess/tip.c:429 libprocess/tip.c:435
+#: libprocess/tip.c:432 libprocess/tip.c:438 libprocess/tip.c:444
msgid "Pyramidal"
msgstr ""
-#: libprocess/tip.c:428
+#: libprocess/tip.c:437
msgid "Contact"
msgstr ""
-#: libprocess/tip.c:434
+#: libprocess/tip.c:443
msgid "Noncontact"
msgstr ""
-#: libprocess/tip.c:440
+#: libprocess/tip.c:449
msgid "Delta function"
msgstr ""
-#: libprocess/tip.c:441
+#: libprocess/tip.c:450
msgid "Analytical"
msgstr ""
-#: libprocess/tip.c:446
+#: libprocess/tip.c:455 modules/process/fibre_synth.c:259
msgid "Parabola"
msgstr ""
-#: libprocess/tip.c:447 libprocess/tip.c:453
+#: libprocess/tip.c:456 libprocess/tip.c:462
msgid "Symmetric"
msgstr ""
-#: libprocess/tip.c:452
+#: libprocess/tip.c:461
msgid "Cone"
msgstr ""
-#: libprocess/tip.c:458
+#: libprocess/tip.c:467
msgid "Elliptical parabola"
msgstr ""
-#: libprocess/tip.c:459
+#: libprocess/tip.c:468
msgid "Asymmetric"
msgstr ""
-#: libprocess/tip.c:1339 libprocess/tip.c:1367 libprocess/tip.c:1416
-#: libprocess/tip.c:1443
+#: libprocess/tip.c:1348 libprocess/tip.c:1376 libprocess/tip.c:1425
+#: libprocess/tip.c:1452
msgid "Converting fields"
msgstr ""
-#: libprocess/tip.c:1349
+#: libprocess/tip.c:1358
msgid "Starting partial estimation"
msgstr ""
-#: libprocess/tip.c:1426
+#: libprocess/tip.c:1435
msgid "Starting full estimation"
msgstr ""
-#: libprocess/triangulation.c:2085 modules/process/calcoefs_view.c:793
+#: libprocess/triangulation.c:2084 modules/process/calcoefs_view.c:793
#: modules/process/lat_synth.c:1178
msgid "Triangulating..."
msgstr ""
-#: libgwydgets/gwy3dwindow.c:570
+#: libgwydgets/gwy3dwindow.c:575
msgid "Rotate view (R)"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:575
+#: libgwydgets/gwy3dwindow.c:580
msgid "Scale view as a whole (S)"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:580
+#: libgwydgets/gwy3dwindow.c:585
msgid "Scale value range (V)"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:585
+#: libgwydgets/gwy3dwindow.c:590
msgid "Move light source (L)"
msgstr ""
@@ -844,227 +853,286 @@ msgstr ""
msgid "Show full controls"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:693
+#: libgwydgets/gwy3dwindow.c:691
msgid "Hide full controls"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:709 modules/file/imgexport.c:4796
-#: modules/process/fit-shape.c:461
+#: libgwydgets/gwy3dwindow.c:707 modules/file/imgexport.c:4745
+#: modules/process/fit-shape.c:462
msgid "adjective|Basic"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:714
+#: libgwydgets/gwy3dwindow.c:712
msgid "Light & Material"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:719
+#: libgwydgets/gwy3dwindow.c:717
msgid "Labels"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:828 modules/process/facet_analysis.c:331
-#: modules/process/facet_analysis.c:347 modules/process/shade.c:245
+#: libgwydgets/gwy3dwindow.c:722
+msgid "Colorbar"
+msgstr ""
+
+#: libgwydgets/gwy3dwindow.c:838 modules/process/facet_analysis.c:335
+#: modules/process/facet_analysis.c:351 modules/process/shade.c:253
#: modules/process/tilt.c:223
msgid "φ:"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:828 libgwydgets/gwy3dwindow.c:834
-#: libgwydgets/gwy3dwindow.c:1032 libgwydgets/gwy3dwindow.c:1040
-#: modules/process/facet_analysis.c:375 modules/process/indent_analyze.c:460
-#: modules/process/rotate.c:264 modules/process/shade.c:237
-#: modules/process/shade.c:245 modules/process/tilt.c:211
-#: modules/process/tilt.c:223 modules/process/tip_model.c:234
-#: modules/process/tip_model.c:240 modules/process/unrotate.c:334
+#: libgwydgets/gwy3dwindow.c:838 libgwydgets/gwy3dwindow.c:843
+#: libgwydgets/gwy3dwindow.c:1013 libgwydgets/gwy3dwindow.c:1020
+#: modules/process/correct_affine.c:461 modules/process/facet_analysis.c:238
+#: modules/process/facet_analysis.c:370 modules/process/indent_analyze.c:438
+#: modules/process/measure_lattice.c:381 modules/process/rotate.c:264
+#: modules/process/shade.c:245 modules/process/shade.c:253
+#: modules/process/synth.h:379 modules/process/synth.h:410
+#: modules/process/tilt.c:211 modules/process/tilt.c:223
+#: modules/process/tip_model.c:234 modules/process/tip_model.c:240
+#: modules/process/unrotate.c:334 modules/tools/distance.c:197
+#: modules/tools/readvalue.c:223 modules/tools/stats.c:319
msgid "deg"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:834 modules/process/facet_analysis.c:330
-#: modules/process/facet_analysis.c:346 modules/process/shade.c:237
+#: libgwydgets/gwy3dwindow.c:843 modules/process/facet_analysis.c:334
+#: modules/process/facet_analysis.c:350 modules/process/shade.c:245
#: modules/process/tilt.c:211
msgid "θ:"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:839 modules/process/cwt.c:151
+#: libgwydgets/gwy3dwindow.c:849 modules/process/cwt.c:151
msgid "_Scale:"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:846
+#: libgwydgets/gwy3dwindow.c:856
msgid "_Value scale:"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:851
+#: libgwydgets/gwy3dwindow.c:862
msgid "Ph_ysical scale:"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:865
+#: libgwydgets/gwy3dwindow.c:876
msgid "verb|Set"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:877
+#: libgwydgets/gwy3dwindow.c:886
msgid "Line _width:"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:881
-msgid "Show _axes"
+#: libgwydgets/gwy3dwindow.c:886 libgwydgets/gwy3dwindow.c:1194
+#: libgwydgets/gwy3dwindow.c:1204 libgwydgets/gwy3dwindow.c:1235
+#: libgwydgets/gwygraphareadialog.c:157 libgwydgets/gwygraphareadialog.c:173
+#: modules/file/hdrimage.cc:2246 modules/file/hdrimage.cc:2252
+#: modules/file/pixmap.c:820 modules/file/pixmap.c:826
+#: modules/process/angle_dist.c:188 modules/process/angle_dist.c:213
+#: modules/process/col_synth.c:486 modules/process/crosscor.c:252
+#: modules/process/crosscor.c:260 modules/process/crosscor.c:276
+#: modules/process/crosscor.c:284 modules/process/crosscor.c:300
+#: modules/process/crosscor.c:308 modules/process/cwt.c:151
+#: modules/process/dimensions.h:88 modules/process/edge.c:672
+#: modules/process/entropy.c:242 modules/process/extend.c:220
+#: modules/process/extend.c:227 modules/process/extend.c:234
+#: modules/process/extend.c:241 modules/process/facet_analysis.c:362
+#: modules/process/fbm_synth.c:383 modules/process/hough.c:203
+#: modules/process/local_contrast.c:146 modules/process/mark_disconn.c:263
+#: modules/process/mask_morph.c:237 modules/process/median-bg.c:209
+#: modules/process/neural.c:623 modules/process/neural.c:631
+#: modules/process/psdf_logphi.c:276 modules/process/rank.c:188
+#: modules/process/scale.c:237 modules/process/scale.c:246
+#: modules/process/scars.c:353 modules/process/scars.c:361
+#: modules/process/semsim.c:227 modules/process/slope_dist.c:365
+#: modules/process/slope_dist.c:393 modules/process/sphere-revolve.c:346
+#: modules/process/straighten_path.c:278 modules/process/synth.h:280
+#: modules/process/synth.h:501 modules/process/tip_blind.c:334
+#: modules/process/tip_blind.c:342 modules/process/volumize_layers.c:240
+#: modules/process/volumize_layers.c:245 modules/process/volumize_layers.c:250
+#: modules/process/wpour_mark.c:320 modules/tools/filter.c:291
+#: modules/tools/level3.c:244 modules/tools/maskedit.c:528
+#: modules/tools/maskedit.c:629 modules/tools/pathlevel.c:256
+#: modules/tools/profile.c:377 modules/tools/profile.c:503
+#: modules/tools/readvalue.c:222 modules/tools/readvalue.c:378
+#: modules/tools/roughness.c:868 modules/volume/volume_slice.c:446
+#: modules/volume/volume_slice.c:469 modules/volume/volume_slice.c:492
+#: modules/xyz/xyz_drift.c:738 modules/xyz/xyz_drift.c:753
+#: modules/xyz/xyz_raster.c:382 modules/xyz/xyz_raster.c:388
+msgid "px"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:890
-msgid "Show _labels"
+#: libgwydgets/gwy3dwindow.c:891
+msgid "Show _axes"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:899
-msgid "Show false _colorbar"
+#: libgwydgets/gwy3dwindow.c:900
+msgid "Show _labels"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:908
+#: libgwydgets/gwy3dwindow.c:909
msgid "_Orthographic projection"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:917
+#: libgwydgets/gwy3dwindow.c:918
msgid "_Hide masked"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:933
+#: libgwydgets/gwy3dwindow.c:934
msgid "_Lighting"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:934
+#: libgwydgets/gwy3dwindow.c:935
msgid "_Gradient"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:935
+#: libgwydgets/gwy3dwindow.c:936
msgid "_Overlay"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:936
+#: libgwydgets/gwy3dwindow.c:937
msgid "_Overlay - no light"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:1009
+#: libgwydgets/gwy3dwindow.c:992
msgid "_Material:"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:1032
+#: libgwydgets/gwy3dwindow.c:1013
msgid "_Light φ:"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:1040
+#: libgwydgets/gwy3dwindow.c:1020
msgid "L_ight θ:"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:1070 libgwydgets/gwy3dwindow.c:1240
-#: app/toolbox-editor.c:215 modules/file/hdrimage.cc:2213
-#: modules/file/imgexport.c:4760 modules/file/pixmap.c:789
+#: libgwydgets/gwy3dwindow.c:1052 libgwydgets/gwy3dwindow.c:1243
+#: app/toolbox-editor.c:216 modules/file/hdrimage.cc:2213
+#: modules/file/imgexport.c:4708 modules/file/pixmap.c:789
#: modules/file/rawfile.c:424 modules/process/angle_dist.c:172
#: modules/process/bdep_synth.c:341 modules/process/calcoefs_new.c:371
-#: modules/process/calibrate.c:391 modules/process/col_synth.c:392
-#: modules/process/correct_affine.c:301 modules/process/curvature.c:615
-#: modules/process/cwt.c:135 modules/process/deposit_synth.c:349
+#: modules/process/calibrate.c:383 modules/process/col_synth.c:392
+#: modules/process/correct_affine.c:346 modules/process/curvature.c:617
+#: modules/process/cwt.c:135 modules/process/deposit_synth.c:350
#: modules/process/diff_synth.c:411 modules/process/domain_synth.c:354
#: modules/process/drift.c:245 modules/process/dwt.c:166
#: modules/process/dwtanisotropy.c:184 modules/process/edge.c:638
#: modules/process/extend.c:192 modules/process/facet-level.c:193
-#: modules/process/facet_analysis.c:271 modules/process/fbm_synth.c:303
+#: modules/process/facet_analysis.c:275 modules/process/fbm_synth.c:303
#: modules/process/fft.c:336 modules/process/fft_filter_2d.c:417
-#: modules/process/fft_synth.c:341 modules/process/fractal.c:231
-#: modules/process/grain_edge.c:213 modules/process/grain_mark.c:247
-#: modules/process/grain_wshed.c:167 modules/process/hough.c:179
-#: modules/process/lat_synth.c:567 modules/process/latsim.c:159
-#: modules/process/level.c:245 modules/process/linematch.c:804
-#: modules/process/lno_synth.c:433 modules/process/local_contrast.c:130
-#: modules/process/logistic.c:234 modules/process/mark_disconn.c:208
-#: modules/process/mask_distribute.c:152 modules/process/measure_lattice.c:256
-#: modules/process/median-bg.c:180 modules/process/noise_synth.c:336
-#: modules/process/obj_synth.c:441 modules/process/pat_synth.c:385
-#: modules/process/pid.c:199 modules/process/polydistort.c:210
-#: modules/process/polylevel.c:373 modules/process/psdf_logphi.c:249
-#: modules/process/rank.c:158 modules/process/rotate.c:243
-#: modules/process/scale.c:196 modules/process/scars.c:298
-#: modules/process/semsim.c:211 modules/process/shade.c:208
-#: modules/process/slope_dist.c:276 modules/process/sphere-revolve.c:218
-#: modules/process/straighten_path.c:249 modules/process/tilt.c:161
-#: modules/process/tip_model.c:169 modules/process/unrotate.c:220
-#: modules/process/volumize_layers.c:221 modules/process/wave_synth.c:349
-#: modules/process/wpour_mark.c:278 modules/volume/volume_calibrate.c:370
-#: modules/volume/volume_extract.c:331 modules/volume/volume_kmeans.c:153
-#: modules/volume/volume_kmedians.c:147 modules/volume/volume_linestat.c:292
-#: modules/volume/volume_slice.c:292
+#: modules/process/fft_synth.c:341 modules/process/fibre_synth.c:422
+#: modules/process/fractal.c:228 modules/process/grain_edge.c:212
+#: modules/process/grain_mark.c:246 modules/process/grain_wshed.c:168
+#: modules/process/hough.c:174 modules/process/lat_synth.c:567
+#: modules/process/latsim.c:159 modules/process/level.c:245
+#: modules/process/linematch.c:771 modules/process/lno_synth.c:431
+#: modules/process/local_contrast.c:130 modules/process/logistic.c:234
+#: modules/process/mark_disconn.c:208 modules/process/mask_distribute.c:152
+#: modules/process/measure_lattice.c:246 modules/process/median-bg.c:180
+#: modules/process/mfm_current.c:332 modules/process/mfm_field.c:281
+#: modules/process/mfm_findshift.c:230 modules/process/mfm_parallel.c:333
+#: modules/process/mfm_shift.c:170 modules/process/noise_synth.c:334
+#: modules/process/obj_synth.c:438 modules/process/pat_synth.c:385
+#: modules/process/phase_synth.c:205 modules/process/pid.c:197
+#: modules/process/polydistort.c:210 modules/process/polylevel.c:373
+#: modules/process/psdf_logphi.c:249 modules/process/rank.c:158
+#: modules/process/rotate.c:243 modules/process/scale.c:196
+#: modules/process/scars.c:317 modules/process/semsim.c:211
+#: modules/process/shade.c:210 modules/process/slope_dist.c:275
+#: modules/process/sphere-revolve.c:317 modules/process/straighten_path.c:248
+#: modules/process/tilt.c:161 modules/process/tip_model.c:167
+#: modules/process/unrotate.c:220 modules/process/volumize_layers.c:221
+#: modules/process/wave_synth.c:368 modules/process/wpour_mark.c:278
+#: modules/volume/volume_calibrate.c:370 modules/volume/volume_extract.c:324
+#: modules/volume/volume_kmeans.c:154 modules/volume/volume_kmedians.c:147
+#: modules/volume/volume_linestat.c:297 modules/volume/volume_slice.c:294
msgid "_Reset"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:1142
+#: libgwydgets/gwy3dwindow.c:1141
msgid "X-axis"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:1143
+#: libgwydgets/gwy3dwindow.c:1142
msgid "Y-axis"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:1144
+#: libgwydgets/gwy3dwindow.c:1143
msgid "Minimum z value"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:1145
+#: libgwydgets/gwy3dwindow.c:1144
msgid "Maximum z value"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:1168 modules/file/imgexport.c:3836
+#: libgwydgets/gwy3dwindow.c:1167 modules/file/imgexport.c:3806
msgid "_Label:"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:1173
+#: libgwydgets/gwy3dwindow.c:1180
msgid "_Text:"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:1193
+#: libgwydgets/gwy3dwindow.c:1185
msgid "Move label"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:1202
+#: libgwydgets/gwy3dwindow.c:1194
msgid "_Horizontally:"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:1212
+#: libgwydgets/gwy3dwindow.c:1204
msgid "_Vertically:"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:1220
+#: libgwydgets/gwy3dwindow.c:1212
+msgid "A_ll labels have the same size"
+msgstr ""
+
+#: libgwydgets/gwy3dwindow.c:1223
msgid "Scale size _automatically"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:1232 modules/tools/filter.c:290
+#: libgwydgets/gwy3dwindow.c:1235 modules/tools/filter.c:291
msgid "Si_ze:"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:1232 modules/process/cwt.c:151
-#: modules/process/hough.c:212
-msgid "pixels"
+#: libgwydgets/gwy3dwindow.c:1277
+msgid "Show false _colorbar"
+msgstr ""
+
+#: libgwydgets/gwy3dwindow.c:1286
+msgid "Reserve space for _colorbar"
+msgstr ""
+
+#: libgwydgets/gwy3dwindow.c:1302 modules/process/lat_synth.c:651
+#: modules/process/obj_synth.c:542 modules/process/pat_synth.c:1458
+#: modules/process/phase_synth.c:279
+msgid "_Size:"
+msgstr ""
+
+#: libgwydgets/gwy3dwindow.c:1311
+msgid "_Vertical alignment:"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:1726 libgwydgets/gwy3dwindow.c:1779
+#: libgwydgets/gwy3dwindow.c:1844 libgwydgets/gwy3dwindow.c:1897
msgid "S_witch to Lighting Mode"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:1734 libgwydgets/gwy3dwindow.c:1756
+#: libgwydgets/gwy3dwindow.c:1852 libgwydgets/gwy3dwindow.c:1874
msgid "S_witch to Overlay Mode"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:1748 libgwydgets/gwy3dwindow.c:1771
+#: libgwydgets/gwy3dwindow.c:1866 libgwydgets/gwy3dwindow.c:1889
msgid "S_witch to Color Gradient Mode"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:1787
+#: libgwydgets/gwy3dwindow.c:1905
msgid "T_oggle light"
msgstr ""
-#: libgwydgets/gwyaxisdialog.c:99
+#: libgwydgets/gwyaxisdialog.c:75
msgid "Axis Properties"
msgstr ""
-#: libgwydgets/gwyaxisdialog.c:101 libgwydgets/gwygraphlabeldialog.c:63
-msgid "Label Properties"
-msgstr ""
-
-#: libgwydgets/gwyaxisdialog.c:184
+#: libgwydgets/gwyaxisdialog.c:88
msgid "Label Text"
msgstr ""
@@ -1086,7 +1154,7 @@ msgid "Hidden"
msgstr ""
#: libgwydgets/gwydgetenums.c:47 libgwydgets/gwygraphwindowmeasuredialog.c:572
-#: modules/file/imgexport.c:475 modules/tools/selectionmanager.c:274
+#: modules/file/imgexport.c:474 modules/tools/selectionmanager.c:274
msgid "Points"
msgstr ""
@@ -1094,7 +1162,7 @@ msgstr ""
msgid "Line + points"
msgstr ""
-#: libgwydgets/gwydgetutils.c:564
+#: libgwydgets/gwydgetutils.c:848
msgid "Change Mask Color"
msgstr ""
@@ -1103,7 +1171,7 @@ msgid "Quantity"
msgstr ""
#: libgwydgets/gwygrainvaluemenu.c:194 libgwydgets/gwygrainvaluemenu.c:207
-#: modules/process/curvature.c:753
+#: modules/process/curvature.c:750
msgid "Symbol"
msgstr ""
@@ -1123,136 +1191,140 @@ msgstr ""
msgid "_Next"
msgstr ""
-#: libgwydgets/gwygraphareadialog.c:127 modules/file/rawgraph.c:302
+#: libgwydgets/gwygraphareadialog.c:123 modules/file/rawgraph.c:302
msgid "Plot _style:"
msgstr ""
-#: libgwydgets/gwygraphareadialog.c:148
+#: libgwydgets/gwygraphareadialog.c:131
msgid "Pl_ot color:"
msgstr ""
-#: libgwydgets/gwygraphareadialog.c:159
+#: libgwydgets/gwygraphareadialog.c:151
msgid "Point _type:"
msgstr ""
-#: libgwydgets/gwygraphareadialog.c:165
+#: libgwydgets/gwygraphareadialog.c:157
msgid "_Point size:"
msgstr ""
-#: libgwydgets/gwygraphareadialog.c:175
+#: libgwydgets/gwygraphareadialog.c:167
msgid "_Line type:"
msgstr ""
-#: libgwydgets/gwygraphareadialog.c:181 modules/file/imgexport.c:3150
+#: libgwydgets/gwygraphareadialog.c:173 modules/file/imgexport.c:3154
msgid "Line t_hickness:"
msgstr ""
-#: libgwydgets/gwygraphareadialog.c:187
+#: libgwydgets/gwygraphareadialog.c:180
msgid "<b>Label Te_xt</b>"
msgstr ""
-#: libgwydgets/gwygraphareadialog.c:404
+#: libgwydgets/gwygraphareadialog.c:397
msgid "Set Curve Color"
msgstr ""
-#: libgwydgets/gwygraphareadialog.c:556 modules/process/mask_morph.c:179
+#: libgwydgets/gwygraphareadialog.c:549 modules/process/mask_morph.c:178
msgid "Square"
msgstr ""
-#: libgwydgets/gwygraphareadialog.c:558 modules/process/mask_morph.c:180
+#: libgwydgets/gwygraphareadialog.c:551 modules/process/mask_morph.c:179
msgid "Diamond"
msgstr ""
-#: libgwydgets/gwygraphareadialog.c:559
+#: libgwydgets/gwygraphareadialog.c:552
msgid "Cross"
msgstr ""
-#: libgwydgets/gwygraphareadialog.c:560
+#: libgwydgets/gwygraphareadialog.c:553
msgid "Diagonal cross"
msgstr ""
-#: libgwydgets/gwygraphareadialog.c:561
+#: libgwydgets/gwygraphareadialog.c:554
msgid "Asterisk"
msgstr ""
-#: libgwydgets/gwygraphareadialog.c:562
+#: libgwydgets/gwygraphareadialog.c:555
msgid "Star"
msgstr ""
-#: libgwydgets/gwygraphareadialog.c:563
+#: libgwydgets/gwygraphareadialog.c:556
msgid "Triangle up"
msgstr ""
-#: libgwydgets/gwygraphareadialog.c:564
+#: libgwydgets/gwygraphareadialog.c:557
msgid "Triangle down"
msgstr ""
-#: libgwydgets/gwygraphareadialog.c:565
+#: libgwydgets/gwygraphareadialog.c:558
msgid "Triangle left"
msgstr ""
-#: libgwydgets/gwygraphareadialog.c:566
+#: libgwydgets/gwygraphareadialog.c:559
msgid "Triangle right"
msgstr ""
-#: libgwydgets/gwygraphareadialog.c:567
+#: libgwydgets/gwygraphareadialog.c:560
msgid "Full square"
msgstr ""
-#: libgwydgets/gwygraphareadialog.c:568 modules/process/mask_morph.c:177
+#: libgwydgets/gwygraphareadialog.c:561 modules/process/mask_morph.c:176
msgid "Disc"
msgstr ""
-#: libgwydgets/gwygraphareadialog.c:569
+#: libgwydgets/gwygraphareadialog.c:562
msgid "Full diamond"
msgstr ""
-#: libgwydgets/gwygraphareadialog.c:570
+#: libgwydgets/gwygraphareadialog.c:563
msgid "Full triangle up"
msgstr ""
-#: libgwydgets/gwygraphareadialog.c:571
+#: libgwydgets/gwygraphareadialog.c:564
msgid "Full triangle down"
msgstr ""
-#: libgwydgets/gwygraphareadialog.c:572
+#: libgwydgets/gwygraphareadialog.c:565
msgid "Full triangle left"
msgstr ""
-#: libgwydgets/gwygraphareadialog.c:573
+#: libgwydgets/gwygraphareadialog.c:566
msgid "Full triangle right"
msgstr ""
-#: libgwydgets/gwygraphareadialog.c:635
+#: libgwydgets/gwygraphareadialog.c:628
msgid "line-style|Solid"
msgstr ""
-#: libgwydgets/gwygraphareadialog.c:636
+#: libgwydgets/gwygraphareadialog.c:629
msgid "line-style|Dash"
msgstr ""
-#: libgwydgets/gwygraphcurves.c:451
+#: libgwydgets/gwygraphcurves.c:448
msgid "Description"
msgstr ""
-#: libgwydgets/gwygraphcurves.c:463
+#: libgwydgets/gwygraphcurves.c:460
msgid "Mode"
msgstr ""
-#: libgwydgets/gwygraphcurves.c:481
+#: libgwydgets/gwygraphcurves.c:478
msgid "Color"
msgstr ""
-#: libgwydgets/gwygraphcurves.c:494
+#: libgwydgets/gwygraphcurves.c:491
msgid "Point Type"
msgstr ""
-#: libgwydgets/gwygraphcurves.c:516
+#: libgwydgets/gwygraphcurves.c:513
msgid "Line Style"
msgstr ""
+#: libgwydgets/gwygraphlabeldialog.c:63
+msgid "Label Properties"
+msgstr ""
+
#: libgwydgets/gwygraphlabeldialog.c:74
-msgid "Frame thickness:"
+msgid "_Frame thickness:"
msgstr ""
#: libgwydgets/gwygraphlabeldialog.c:81
@@ -1263,12 +1335,12 @@ msgstr ""
msgid "Abscissa"
msgstr ""
-#: libgwydgets/gwygraphwindow.c:163 app/toolbox-editor.c:1002 app/toolbox.c:108
+#: libgwydgets/gwygraphwindow.c:163 app/toolbox-editor.c:1015 app/toolbox.c:113
msgid "Graph"
msgstr ""
#: libgwydgets/gwygraphwindow.c:170 modules/file/hdrimage.cc:472
-#: modules/process/fit-shape.c:656
+#: modules/process/fit-shape.c:666 modules/process/psf.c:229
msgid "Data"
msgstr ""
@@ -1306,15 +1378,15 @@ msgstr ""
#: libgwydgets/gwygraphwindowmeasuredialog.c:394
#: libgwydgets/gwygraphwindowmeasuredialog.c:580 modules/tools/linestats.c:170
-#: modules/tools/roughness.c:516 modules/volume/volume_linestat.c:157
+#: modules/tools/roughness.c:517 modules/volume/volume_linestat.c:159
msgid "Length"
msgstr ""
#: libgwydgets/gwygraphwindowmeasuredialog.c:398
#: libgwydgets/gwygraphwindowmeasuredialog.c:588 app/gwyplaintool.c:1018
-#: modules/process/lat_synth.c:747 modules/process/obj_synth.c:569
-#: modules/process/pat_synth.c:846 modules/process/pat_synth.c:1148
-#: modules/process/pat_synth.c:1483
+#: modules/process/fibre_synth.c:534 modules/process/lat_synth.c:747
+#: modules/process/obj_synth.c:567 modules/process/pat_synth.c:847
+#: modules/process/pat_synth.c:1149 modules/process/pat_synth.c:1484
msgid "Height"
msgstr ""
@@ -1327,12 +1399,12 @@ msgid "Curve:"
msgstr ""
#: libgwydgets/gwygraphwindowmeasuredialog.c:553
-#: modules/process/linematch.c:828 modules/process/semsim.c:249
+#: modules/process/linematch.c:795 modules/process/semsim.c:249
#: modules/xyz/xyz_level.c:254
msgid "Method:"
msgstr ""
-#: libgwydgets/gwygraphwindowmeasuredialog.c:592 modules/process/crosscor.c:354
+#: libgwydgets/gwygraphwindowmeasuredialog.c:592 modules/process/crosscor.c:331
msgid "Angle"
msgstr ""
@@ -1342,7 +1414,7 @@ msgid "Preferred"
msgstr ""
#: libgwydgets/gwyoptionmenus.c:470 app/meta.c:410
-#: modules/file/imgexport.c:4160 modules/file/imgexport.c:4607
+#: modules/file/imgexport.c:4110 modules/file/imgexport.c:4555
#: modules/file/rawfile.c:995 modules/process/convolution_filter.c:538
#: modules/process/neural.c:418 modules/tools/selectionmanager.c:345
msgid "Name"
@@ -1381,7 +1453,7 @@ msgid "A_dd symbol"
msgstr ""
#: libgwydgets/gwyscitext.c:274 modules/file/rawfile.c:553
-#: modules/xyz/xyz_drift.c:580 modules/xyz/xyz_raster.c:405
+#: modules/xyz/xyz_drift.c:580 modules/xyz/xyz_raster.c:419
msgid "Preview"
msgstr ""
@@ -1399,87 +1471,81 @@ msgstr ""
msgid "No module can save to this file type."
msgstr ""
-#: libgwymodule/gwymodulebrowser.c:67
+#: libgwymodule/gwymodulebrowser.c:66
msgid "Module Browser"
msgstr ""
-#: libgwymodule/gwymodulebrowser.c:190
+#: libgwymodule/gwymodulebrowser.c:189
msgid "Module"
msgstr ""
-#: libgwymodule/gwymodulebrowser.c:190
+#: libgwymodule/gwymodulebrowser.c:189
msgid "Version"
msgstr ""
-#: libgwymodule/gwymodulebrowser.c:190
+#: libgwymodule/gwymodulebrowser.c:189
msgid "Author"
msgstr ""
-#: libgwymodule/gwymodulebrowser.c:246
+#: libgwymodule/gwymodulebrowser.c:244
msgid "Name-Version:"
msgstr ""
-#: libgwymodule/gwymodulebrowser.c:247 libgwymodule/gwymodulebrowser.c:270
+#: libgwymodule/gwymodulebrowser.c:245 libgwymodule/gwymodulebrowser.c:268
#: modules/process/grain_stat.c:186
msgid "File:"
msgstr ""
-#: libgwymodule/gwymodulebrowser.c:248
+#: libgwymodule/gwymodulebrowser.c:246
msgid "Registered functions:"
msgstr ""
-#: libgwymodule/gwymodulebrowser.c:249
+#: libgwymodule/gwymodulebrowser.c:247
msgid "Authors:"
msgstr ""
-#: libgwymodule/gwymodulebrowser.c:250
+#: libgwymodule/gwymodulebrowser.c:248
msgid "Copyright:"
msgstr ""
-#: libgwymodule/gwymodulebrowser.c:251
+#: libgwymodule/gwymodulebrowser.c:249
msgid "Date:"
msgstr ""
-#: libgwymodule/gwymodulebrowser.c:252
+#: libgwymodule/gwymodulebrowser.c:250
msgid "Description:"
msgstr ""
-#: libgwymodule/gwymodulebrowser.c:269
+#: libgwymodule/gwymodulebrowser.c:267
msgid "Name:"
msgstr ""
-#: libgwymodule/gwymodulebrowser.c:271
+#: libgwymodule/gwymodulebrowser.c:269
msgid "Failure:"
msgstr ""
-#: app/about.c:57
+#: app/about.c:58
#, c-format
msgid "About %s"
msgstr ""
-#. TRANSLATORS: %s is replaced with date in ISO format YYYY-MM-DD.
-#: app/about.c:92
-#, c-format
-msgid "Released %s\n"
-msgstr ""
-
-#: app/about.c:93
+#: app/about.c:97
msgid "An SPM data visualization and analysis tool."
msgstr ""
-#: app/about.c:101
+#: app/about.c:105
msgid "Report bugs to:"
msgstr ""
-#: app/about.c:116
+#: app/about.c:120
msgid "Credits"
msgstr ""
-#: app/about.c:133
+#: app/about.c:137
msgid "License"
msgstr ""
-#: app/about.c:138
+#: app/about.c:142
#, c-format
msgid ""
"%s is free software; you can redistribute it and/or modify it under the "
@@ -1489,58 +1555,62 @@ msgid ""
"tarball."
msgstr ""
-#: app/about.c:160 modules/process/logistic.c:270
+#: app/about.c:164 modules/process/logistic.c:269
msgid "Features"
msgstr ""
-#: app/about.c:220
+#: app/about.c:224
msgid "Developers"
msgstr ""
-#: app/about.c:221
+#: app/about.c:225
msgid "Translators"
msgstr ""
-#: app/about.c:225
+#: app/about.c:229
msgid "Development is supported by the Czech Metrology Institute: "
msgstr ""
-#: app/about.c:253 app/about.c:256
+#: app/about.c:257 app/about.c:260
msgid "OpenGL 3D View"
msgstr ""
-#: app/about.c:257 app/about.c:271 app/about.c:291
+#: app/about.c:261 app/about.c:266 app/about.c:286
msgid "not available\n"
msgstr ""
-#: app/about.c:262 app/about.c:265
-msgid "Fast Fourier Transform"
-msgstr ""
-
-#: app/about.c:266
-msgid "built-in SimpleFFT\n"
-msgstr ""
-
-#: app/about.c:274
+#: app/about.c:269
msgid "X11 protocol\n"
msgstr ""
-#: app/about.c:276
+#: app/about.c:271
msgid "Win32 protocol\n"
msgstr ""
-#: app/about.c:278
+#: app/about.c:273
msgid "LibUnique\n"
msgstr ""
-#: app/about.c:282
+#: app/about.c:277
msgid "Remote Control"
msgstr ""
-#: app/about.c:286 app/about.c:290
+#: app/about.c:281 app/about.c:285
msgid "Python Scripting Interface"
msgstr ""
+#. TRANSLATORS: %s is replaced with date in ISO format YYYY-MM-DD.
+#: app/about.c:311
+#, c-format
+msgid "Development version, built %s"
+msgstr ""
+
+#. TRANSLATORS: %s is replaced with date in ISO format YYYY-MM-DD.
+#: app/about.c:328
+#, c-format
+msgid "Released %s"
+msgstr ""
+
#: app/app.c:301
#, c-format
msgid ""
@@ -1549,116 +1619,124 @@ msgid ""
"Really quit?"
msgstr ""
-#: app/app.c:440
+#: app/app.c:442
msgid "Mask _Color..."
msgstr ""
-#: app/app.c:456 app/app.c:1725
+#: app/app.c:458 app/app.c:1754
msgid "Zoom _1:1"
msgstr ""
-#: app/app.c:460 app/app.c:1729 app/app.c:1957
+#: app/app.c:462 app/app.c:1758 app/app.c:1988
msgid "Metadata _Browser..."
msgstr ""
-#: app/app.c:465 app/app.c:1734 app/app.c:1962
+#: app/app.c:467 app/app.c:1763 app/app.c:1993
msgid "View _Log..."
msgstr ""
-#: app/app.c:649
+#: app/app.c:651
msgid "Pi_xelwise Square"
msgstr ""
-#: app/app.c:659
+#: app/app.c:661
msgid "_Physically Square"
msgstr ""
-#: app/app.c:836
+#: app/app.c:842
+msgid "Set as Default"
+msgstr ""
+
+#: app/app.c:844
+msgid "Set the current view setup as the default"
+msgstr ""
+
+#: app/app.c:854
msgid "verb|Save"
msgstr ""
-#: app/app.c:839 app/app.c:843
+#: app/app.c:857 app/app.c:861
msgid "Save 3D view to an image"
msgstr ""
-#: app/app.c:849
-msgid "Set as Default"
+#: app/app.c:869
+msgid "_Autocrop"
msgstr ""
-#: app/app.c:851
-msgid "Set the current view setup as the default"
+#: app/app.c:873
+msgid "Remove white borders from exported image"
msgstr ""
-#: app/app.c:940
+#: app/app.c:960
msgid "_Show mask"
msgstr ""
-#: app/app.c:1106
+#: app/app.c:1172
#, c-format
msgid "Saving of 3D view to `%s' failed"
msgstr ""
-#: app/app.c:1150
+#: app/app.c:1222
msgid "Export 3D View"
msgstr ""
-#: app/app.c:1457
+#: app/app.c:1478
msgid "_Change Preview"
msgstr ""
-#: app/app.c:1583
+#: app/app.c:1606
msgid "Change Volume Data Preview"
msgstr ""
-#: app/app.c:1593
+#: app/app.c:1616
msgid "Preview quantity:"
msgstr ""
-#: app/app.c:1603 modules/process/extend.c:267 modules/tools/linestats.c:165
+#: app/app.c:1626 modules/process/extend.c:267 modules/tools/linestats.c:165
#: modules/volume/volume_linestat.c:142
msgid "Mean"
msgstr ""
-#: app/app.c:1604 modules/process/polydistort.c:255 modules/tools/filter.c:240
+#: app/app.c:1627 modules/process/polydistort.c:258 modules/tools/filter.c:241
#: modules/tools/icolorange.c:424 modules/tools/linestats.c:167
#: modules/volume/volume_linestat.c:144
msgid "Minimum"
msgstr ""
-#: app/app.c:1605 modules/process/col_synth.c:170 modules/tools/filter.c:241
+#: app/app.c:1628 modules/process/col_synth.c:170 modules/tools/filter.c:242
#: modules/tools/icolorange.c:435 modules/tools/linestats.c:168
#: modules/volume/volume_linestat.c:145
msgid "Maximum"
msgstr ""
-#: app/app.c:1606
+#: app/app.c:1629 modules/volume/volume_linestat.c:146
msgid "Min. position"
msgstr ""
-#: app/app.c:1607
+#: app/app.c:1630 modules/volume/volume_linestat.c:147
msgid "Max. position"
msgstr ""
-#: app/app.c:1608 modules/process/bdep_synth.c:134
-#: modules/process/col_synth.c:171 modules/process/scars.c:346
-#: modules/process/scars.c:353 modules/process/threshold.c:341
+#: app/app.c:1631 modules/process/bdep_synth.c:134
+#: modules/process/col_synth.c:171 modules/process/scars.c:369
+#: modules/process/scars.c:377 modules/process/threshold.c:336
msgid "RMS"
msgstr ""
-#: app/app.c:1609 modules/file/asciiexport.c:187 modules/file/gxyzffile.c:393
-#: modules/file/xyzexport.c:233 modules/file/xyzexport.c:302
+#: app/app.c:1632 modules/file/asciiexport.c:187 modules/file/gxyzffile.c:393
+#: modules/file/xyzexport.c:236 modules/file/xyzexport.c:305
msgid "Channel:"
msgstr ""
-#: app/app.c:1610
+#: app/app.c:1633
msgid "Section:"
msgstr ""
-#: app/app.c:1861
+#: app/app.c:1890
msgid "_Update Preview"
msgstr ""
-#: app/app.c:1867
+#: app/app.c:1896
msgid "_Density Map"
msgstr ""
@@ -1677,12 +1755,12 @@ msgstr ""
msgid "Unknown XYZ %d"
msgstr ""
-#: app/data-browser-aux.c:2795
+#: app/data-browser-aux.c:2839
#, c-format
msgid "Z levels: %d, Z unit: %s"
msgstr ""
-#: app/data-browser-aux.c:2821
+#: app/data-browser-aux.c:2865
#, c-format
msgid "Points: %d"
msgstr ""
@@ -1712,10 +1790,10 @@ msgid "Close file"
msgstr ""
#: app/data-browser.c:5582
-msgid "Channels"
+msgid "Images"
msgstr ""
-#: app/data-browser.c:5596 modules/volume/volume_extract.c:444
+#: app/data-browser.c:5596 modules/volume/volume_extract.c:431
msgid "Graphs"
msgstr ""
@@ -1760,51 +1838,51 @@ msgid ""
"%s"
msgstr ""
-#: app/file.c:285
+#: app/file.c:292
#, c-format
msgid "Opening of `%s' failed"
msgstr ""
-#: app/file.c:291 app/file.c:526
+#: app/file.c:298 app/file.c:533
#, c-format
msgid "Full file path: %s."
msgstr ""
-#: app/file.c:294
+#: app/file.c:301
#, c-format
msgid "Loaded using: %s."
msgstr ""
-#: app/file.c:380
+#: app/file.c:387
msgid "Merge File"
msgstr ""
-#: app/file.c:382 app/gwyappfilechooser.c:221
+#: app/file.c:389 app/gwyappfilechooser.c:226
msgid "Open File"
msgstr ""
-#: app/file.c:520 app/gwymoduleutils.c:192
+#: app/file.c:527 app/gwymoduleutils.c:192
#, c-format
msgid "Saving of `%s' failed"
msgstr ""
-#: app/file.c:529
+#: app/file.c:536
#, c-format
msgid "Saved using: %s."
msgstr ""
-#: app/file.c:689
+#: app/file.c:696
#, c-format
msgid "File `%s' already exists. Replace?"
msgstr ""
-#: app/file.c:693
+#: app/file.c:700
#, c-format
msgid ""
"The file already exists in `%s'. Replacing it will overwrite its contents."
msgstr ""
-#: app/file.c:696
+#: app/file.c:703
msgid "Replace File?"
msgstr ""
@@ -1828,11 +1906,11 @@ msgstr ""
msgid "Open selected file"
msgstr ""
-#: app/filelist.c:566 app/gwyappfilechooser.c:583
+#: app/filelist.c:566 app/gwyappfilechooser.c:592
msgid "_Filter:"
msgstr ""
-#: app/filelist.c:604 app/gwyappfilechooser.c:619
+#: app/filelist.c:604 app/gwyappfilechooser.c:628
msgid "Case _sensitive"
msgstr ""
@@ -1882,97 +1960,97 @@ msgstr ""
msgid "_Snap to control points"
msgstr ""
-#: app/gwyappfilechooser.c:226
+#: app/gwyappfilechooser.c:231
msgid "Save File"
msgstr ""
-#: app/gwyappfilechooser.c:380
+#: app/gwyappfilechooser.c:389
#, c-format
msgid "File _type: %s"
msgstr ""
-#: app/gwyappfilechooser.c:387
+#: app/gwyappfilechooser.c:396
msgid "Only loadable shown"
msgstr ""
-#: app/gwyappfilechooser.c:391
+#: app/gwyappfilechooser.c:400
#, c-format
msgid "Filter: %s"
msgstr ""
-#: app/gwyappfilechooser.c:455
+#: app/gwyappfilechooser.c:464
msgid "Automatic by extension"
msgstr ""
-#: app/gwyappfilechooser.c:464
+#: app/gwyappfilechooser.c:473
msgid "Automatically detected"
msgstr ""
-#: app/gwyappfilechooser.c:561
+#: app/gwyappfilechooser.c:570
msgid "Show only loadable files"
msgstr ""
-#: app/gwyappfilechooser.c:844
+#: app/gwyappfilechooser.c:855
msgid "Plane-level previewed data"
msgstr ""
-#: app/gwyappfilechooser.c:860
+#: app/gwyappfilechooser.c:871
msgid "Row-level previewed data"
msgstr ""
-#: app/gwyappfilechooser.c:969
+#: app/gwyappfilechooser.c:987
+msgid "File too large for preview"
+msgstr ""
+
+#: app/gwyappfilechooser.c:988
msgid "…"
msgstr ""
-#: app/gwyappfilechooser.c:1331
+#: app/gwyappfilechooser.c:1352
msgid "Cannot preview"
msgstr ""
-#: app/gwyddion.c:143
+#: app/gwyddion.c:147
msgid "Loading document history"
msgstr ""
-#: app/gwyddion.c:148
+#: app/gwyddion.c:152
msgid "Registering "
msgstr ""
-#: app/gwyddion.c:149
+#: app/gwyddion.c:153
msgid "stock items"
msgstr ""
-#: app/gwyddion.c:153
+#: app/gwyddion.c:157
msgid "color gradients"
msgstr ""
-#: app/gwyddion.c:155
+#: app/gwyddion.c:159
msgid "GL materials"
msgstr ""
-#: app/gwyddion.c:157
+#: app/gwyddion.c:161
msgid "grain quantities"
msgstr ""
-#: app/gwyddion.c:159
+#: app/gwyddion.c:163
msgid "calibrations"
msgstr ""
-#: app/gwyddion.c:164
+#: app/gwyddion.c:168
msgid "Loading settings"
msgstr ""
-#: app/gwyddion.c:171
+#: app/gwyddion.c:175
msgid "Registering modules"
msgstr ""
-#: app/gwyddion.c:193
-msgid "Initializing GUI"
-msgstr ""
-
-#: app/gwyddion.c:439
+#: app/gwyddion.c:464
msgid "Could not read settings."
msgstr ""
-#: app/gwyddion.c:442
+#: app/gwyddion.c:467
#, c-format
msgid ""
"Settings file `%s' cannot be read: %s\n"
@@ -1981,48 +2059,69 @@ msgid ""
"it is repaired or removed."
msgstr ""
-#: app/gwymoduleutils-file.c:542
+#: app/gwyddion.c:505
+#, c-format
+msgid "Many modules (%u) failed to register."
+msgstr ""
+
+#: app/gwyddion.c:510
+#, c-format
+msgid ""
+"Most likely Gwyddion was not upgraded correctly. Instead, one installation "
+"was just overwritten with another, and now it is a mess.\n"
+"\n"
+"Please remove completely the module directory\n"
+"\n"
+"%s\n"
+"\n"
+"and reinstall Gwyddion.\n"
+"\n"
+"See Info → Module Browser for specific errors."
+msgstr ""
+
+#: app/gwymoduleutils-file.c:536
#, c-format
msgid "Section %s ended at line %u but it has never started."
msgstr ""
-#: app/gwymoduleutils-file.c:550
+#: app/gwymoduleutils-file.c:544
#, c-format
msgid "Section %s ended at line %u instead of %s."
msgstr ""
-#: app/gwymoduleutils-file.c:587
+#: app/gwymoduleutils-file.c:581
#, c-format
msgid "Section %s started at line %u before %s ended."
msgstr ""
-#: app/gwymoduleutils-file.c:593
+#: app/gwymoduleutils-file.c:587
#, c-format
msgid "Empty section name at header line %u."
msgstr ""
-#: app/gwymoduleutils-file.c:628
+#: app/gwymoduleutils-file.c:622
#, c-format
msgid "Header line %u lacks prefix %s."
msgstr ""
-#: app/gwymoduleutils-file.c:653
+#: app/gwymoduleutils-file.c:647
#, c-format
msgid "Header line %u lacks key-value separator."
msgstr ""
-#: app/gwymoduleutils-file.c:661
+#: app/gwymoduleutils-file.c:655
#, c-format
msgid "Key at header line %u is empty."
msgstr ""
-#: app/gwymoduleutils-file.c:688
+#: app/gwymoduleutils-file.c:682
#, c-format
msgid "Header suddenly ended at line %u; end of header marker is missing"
msgstr ""
#: app/gwymoduleutils.c:197 app/settings.c:131 app/settings.c:142
#: app/toolbox-spec.c:536 modules/file/err.h:62
+#: modules/pygwy/pygwy-console.c:528
#, c-format
msgid "Cannot write to file: %s."
msgstr ""
@@ -2049,8 +2148,9 @@ msgstr ""
#: app/gwyplaintool.c:1011 modules/file/rawfile.c:997
#: modules/process/convolution_filter.c:349
-#: modules/process/convolution_filter.c:553 modules/process/neural.c:419
-#: modules/process/obj_synth.c:538 modules/process/pat_synth.c:1449
+#: modules/process/convolution_filter.c:553 modules/process/fibre_synth.c:520
+#: modules/process/neural.c:419 modules/process/obj_synth.c:536
+#: modules/process/pat_synth.c:1450
msgid "Size"
msgstr ""
@@ -2103,7 +2203,7 @@ msgstr ""
msgid "_Close"
msgstr ""
-#: app/log.c:615 modules/file/imgexport.c:4168 modules/file/rawfile.c:996
+#: app/log.c:615 modules/file/imgexport.c:4118 modules/file/rawfile.c:996
msgid "Type"
msgstr ""
@@ -2111,8 +2211,8 @@ msgstr ""
msgid "Function"
msgstr ""
-#: app/log.c:617 modules/file/imgexport.c:3117 modules/process/fit-shape.c:465
-#: modules/process/neural.c:610 modules/tools/stats.c:425
+#: app/log.c:617 modules/file/imgexport.c:3128 modules/process/fit-shape.c:466
+#: modules/process/neural.c:614 modules/tools/stats.c:423
msgid "Parameters"
msgstr ""
@@ -2124,39 +2224,39 @@ msgstr ""
msgid "Export Log"
msgstr ""
-#: app/menu.c:556 app/toolbox.c:581
+#: app/menu.c:555 app/toolbox.c:595
msgid "_Data Process"
msgstr ""
-#: app/menu.c:598 app/toolbox.c:584
+#: app/menu.c:597 app/toolbox.c:598
msgid "_Graph"
msgstr ""
-#: app/menu.c:641 app/toolbox.c:587
+#: app/menu.c:640 app/toolbox.c:601
msgid "_Volume Data"
msgstr ""
-#: app/menu.c:684 app/toolbox.c:590
+#: app/menu.c:683 app/toolbox.c:604
msgid "_XYZ Data"
msgstr ""
-#: app/menu.c:715
+#: app/menu.c:714
msgid "Re-show Last"
msgstr ""
-#: app/menu.c:730
+#: app/menu.c:729
msgid "Repeat Last"
msgstr ""
-#: app/menu.c:858
+#: app/menu.c:857
msgid "Repeat"
msgstr ""
-#: app/menu.c:864
+#: app/menu.c:863
msgid "Re-show"
msgstr ""
-#: app/menu.c:1186
+#: app/menu.c:1185
msgid "_Document history"
msgstr ""
@@ -2164,8 +2264,8 @@ msgstr ""
msgid "_New"
msgstr ""
-#: app/meta.c:235 modules/file/imgexport.c:4672 modules/file/rawfile.c:1058
-#: modules/process/neural.c:711 modules/tools/selectionmanager.c:405
+#: app/meta.c:235 modules/file/imgexport.c:4620 modules/file/rawfile.c:1058
+#: modules/process/neural.c:718 modules/tools/selectionmanager.c:405
msgid "_Delete"
msgstr ""
@@ -2239,11 +2339,11 @@ msgstr ""
msgid "Cannot create user module directory %s: %s"
msgstr ""
-#: app/splash.c:832
+#: app/splash.c:1260
msgid "Starting "
msgstr ""
-#: app/splash.c:878
+#: app/splash.c:1313
msgid " is free software released under GNU GPL."
msgstr ""
@@ -2649,124 +2749,125 @@ msgstr ""
msgid "_Show tips at startup"
msgstr ""
-#: app/toolbox-editor.c:212
+#: app/toolbox-editor.c:213
msgid "Toolbox Editor"
msgstr ""
-#: app/toolbox-editor.c:257
+#: app/toolbox-editor.c:258
msgid "_New Item"
msgstr ""
-#: app/toolbox-editor.c:262
+#: app/toolbox-editor.c:263
msgid "_New Group"
msgstr ""
-#: app/toolbox-editor.c:268 app/toolbox.c:577
+#: app/toolbox-editor.c:269 app/toolbox.c:591
msgid "_Edit"
msgstr ""
-#: app/toolbox-editor.c:273 modules/process/fft_filter_2d.c:499
-#: modules/tools/maskedit.c:548 modules/volume/volume_zcal.c:173
+#: app/toolbox-editor.c:274 modules/process/fft_filter_2d.c:499
+#: modules/tools/maskedit.c:554 modules/volume/volume_zcal.c:173
msgid "_Remove"
msgstr ""
-#: app/toolbox-editor.c:278
+#: app/toolbox-editor.c:279
msgid "Move _Up"
msgstr ""
-#: app/toolbox-editor.c:283
+#: app/toolbox-editor.c:284
msgid "Move _Down"
msgstr ""
-#: app/toolbox-editor.c:292 modules/file/hdrimage.cc:2304
-#: modules/file/imgexport.c:3101 modules/file/pixmap.c:872
+#: app/toolbox-editor.c:293 modules/file/hdrimage.cc:2304
+#: modules/file/imgexport.c:3114 modules/file/pixmap.c:872
#: modules/file/rawfile.c:658 modules/process/crosscor.c:252
-#: modules/process/dimensions.h:473 modules/process/tip_blind.c:333
+#: modules/process/dimensions.h:455 modules/process/fibre_synth.c:526
+#: modules/process/tip_blind.c:334
msgid "_Width:"
msgstr ""
-#: app/toolbox-editor.c:774
+#: app/toolbox-editor.c:787
msgid "Toolbox Group"
msgstr ""
-#: app/toolbox-editor.c:791 modules/file/rawgraph.c:267
+#: app/toolbox-editor.c:804 modules/file/rawgraph.c:267
msgid "_Title:"
msgstr ""
-#: app/toolbox-editor.c:805
+#: app/toolbox-editor.c:818
msgid "_Id:"
msgstr ""
-#: app/toolbox-editor.c:818
+#: app/toolbox-editor.c:831
msgid "_Suggest"
msgstr ""
-#: app/toolbox-editor.c:824
+#: app/toolbox-editor.c:837
msgid "Trans_latable title"
msgstr ""
-#: app/toolbox-editor.c:874
+#: app/toolbox-editor.c:887
msgid "Group id is not a valid identifier"
msgstr ""
-#: app/toolbox-editor.c:882
+#: app/toolbox-editor.c:895
msgid "Group id is not unique"
msgstr ""
-#: app/toolbox-editor.c:971
+#: app/toolbox-editor.c:984
msgid "Toolbox Item"
msgstr ""
-#: app/toolbox-editor.c:992 modules/process/coerce.c:331
+#: app/toolbox-editor.c:1005 modules/process/coerce.c:331
#: modules/tools/filter.c:284
msgid "_Type:"
msgstr ""
-#: app/toolbox-editor.c:999
+#: app/toolbox-editor.c:1012
msgid "Placeholder"
msgstr ""
-#: app/toolbox-editor.c:1000
+#: app/toolbox-editor.c:1013
msgid "Builtin"
msgstr ""
-#: app/toolbox-editor.c:1001 app/toolbox.c:107
+#: app/toolbox-editor.c:1014 app/toolbox.c:112
msgid "Data Process"
msgstr ""
-#: app/toolbox-editor.c:1003
+#: app/toolbox-editor.c:1016
msgid "Volume Data"
msgstr ""
-#: app/toolbox-editor.c:1004
+#: app/toolbox-editor.c:1017
msgid "XYZ Data"
msgstr ""
-#: app/toolbox-editor.c:1005
+#: app/toolbox-editor.c:1018
msgid "Tool"
msgstr ""
-#: app/toolbox-editor.c:1012
+#: app/toolbox-editor.c:1025 modules/tools/profile.c:483
msgid "_Mode:"
msgstr ""
-#: app/toolbox-editor.c:1019 app/toolbox-editor.c:1038
+#: app/toolbox-editor.c:1032 app/toolbox-editor.c:1051
msgid "Default"
msgstr ""
-#: app/toolbox-editor.c:1020
+#: app/toolbox-editor.c:1033
msgid "Interactive"
msgstr ""
-#: app/toolbox-editor.c:1021
+#: app/toolbox-editor.c:1034
msgid "Non-interactive"
msgstr ""
-#: app/toolbox-editor.c:1029
+#: app/toolbox-editor.c:1042
msgid "Use _icon from:"
msgstr ""
-#: app/toolbox-editor.c:1063
+#: app/toolbox-editor.c:1076
msgid "Functions"
msgstr ""
@@ -2782,149 +2883,165 @@ msgstr ""
msgid "All tools not placed explicitly go here."
msgstr ""
-#: app/toolbox.c:106
+#: app/toolbox.c:111
msgid "View"
msgstr ""
-#: app/toolbox.c:109
+#: app/toolbox.c:114
msgid "Tools"
msgstr ""
-#: app/toolbox.c:575
+#: app/toolbox.c:589
msgid "_File"
msgstr ""
-#: app/toolbox.c:593
+#: app/toolbox.c:607
msgid "_Info"
msgstr ""
-#: app/toolbox.c:663
+#: app/toolbox.c:696
msgid "Display a 3D view of data"
msgstr ""
-#: app/toolbox.c:667
+#: app/toolbox.c:700
+msgid "Undo"
+msgstr ""
+
+#: app/toolbox.c:700
+msgid "Undo last action"
+msgstr ""
+
+#: app/toolbox.c:704
+msgid "Redo"
+msgstr ""
+
+#: app/toolbox.c:704
+msgid "Redo again last undone action"
+msgstr ""
+
+#: app/toolbox.c:708
msgid "Zoom in"
msgstr ""
-#: app/toolbox.c:671
+#: app/toolbox.c:712
msgid "Zoom out"
msgstr ""
-#: app/toolbox.c:675
+#: app/toolbox.c:716
msgid "Zoom 1:1"
msgstr ""
-#: app/toolbox.c:722
+#: app/toolbox.c:781
msgid "/Show _Data Browser"
msgstr ""
-#: app/toolbox.c:730
+#: app/toolbox.c:789
msgid "/Module _Browser"
msgstr ""
-#: app/toolbox.c:738
+#: app/toolbox.c:797
msgid "/Program _Messages"
msgstr ""
-#: app/toolbox.c:753
+#: app/toolbox.c:812
msgid "/_User Guide"
msgstr ""
-#: app/toolbox.c:761
+#: app/toolbox.c:820
msgid "/_Tip of the Day"
msgstr ""
-#: app/toolbox.c:769
+#: app/toolbox.c:828
msgid "/_About Gwyddion"
msgstr ""
-#: app/toolbox.c:806
+#: app/toolbox.c:865
msgid "/_Open..."
msgstr ""
-#: app/toolbox.c:814
+#: app/toolbox.c:873
msgid "/_Merge..."
msgstr ""
-#: app/toolbox.c:822
+#: app/toolbox.c:881
msgid "/Open _Recent"
msgstr ""
-#: app/toolbox.c:830
+#: app/toolbox.c:889
msgid "/_Save"
msgstr ""
-#: app/toolbox.c:838
+#: app/toolbox.c:897
msgid "/Save _As..."
msgstr ""
-#: app/toolbox.c:846
+#: app/toolbox.c:905
msgid "/_Close"
msgstr ""
-#: app/toolbox.c:854
+#: app/toolbox.c:913
msgid "/Remo_ve All Logs"
msgstr ""
-#: app/toolbox.c:870
+#: app/toolbox.c:929
msgid "/_Quit"
msgstr ""
-#: app/toolbox.c:910
+#: app/toolbox.c:969
msgid "/_Undo"
msgstr ""
-#: app/toolbox.c:918
+#: app/toolbox.c:977
msgid "/_Redo"
msgstr ""
-#: app/toolbox.c:934
+#: app/toolbox.c:993
msgid "/Default Mask _Color..."
msgstr ""
-#: app/toolbox.c:942
+#: app/toolbox.c:1001
msgid "/Color _Gradients..."
msgstr ""
-#: app/toolbox.c:950
+#: app/toolbox.c:1009
msgid "/G_L Materials..."
msgstr ""
-#: app/toolbox.c:958
+#: app/toolbox.c:1017
msgid "/_Toolbox..."
msgstr ""
-#: app/toolbox.c:966
+#: app/toolbox.c:1025
msgid "/_Keyboard Shortcuts"
msgstr ""
-#: app/toolbox.c:974
+#: app/toolbox.c:1033
msgid "/_Logging Enabled"
msgstr ""
-#: app/toolbox.c:1083
+#: app/toolbox.c:1142
msgid "Program Messages"
msgstr ""
-#: app/toolbox.c:1320
+#: app/toolbox.c:1379
msgid "Change Default Mask Color"
msgstr ""
-#: app/toolbox.c:1348
+#: app/toolbox.c:1407
msgid "OpenGL 3D graphics not available"
msgstr ""
-#: app/toolbox.c:1353
+#: app/toolbox.c:1412
msgid "OpenGL was disabled with a command-line option."
msgstr ""
-#: app/toolbox.c:1361
+#: app/toolbox.c:1420
msgid ""
"Initialization of OpenGL failed. Check output of <tt>glxinfo</tt> and "
"warning messages printed to console during Gwyddion startup."
msgstr ""
-#: app/toolbox.c:1368
+#: app/toolbox.c:1427
msgid "This version of Gwyddion was built without OpenGL support."
msgstr ""
@@ -3000,7 +3117,7 @@ msgstr ""
msgid "Secondary data item has no primary data"
msgstr ""
-#: app/wait.c:106
+#: app/wait.c:114
msgid "Please wait"
msgstr ""
@@ -3017,11 +3134,11 @@ msgstr ""
msgid "File header cannot be converted from ISO-8859-1 character set: %s"
msgstr ""
-#: modules/file/aistfile.c:127
+#: modules/file/aistfile.c:123
msgid "Imports AIST-NT data files."
msgstr ""
-#: modules/file/aistfile.c:140
+#: modules/file/aistfile.c:136
msgid "AIST-NT files (.aist)"
msgstr ""
@@ -3068,7 +3185,8 @@ msgstr ""
#: modules/file/alicona.c:665 modules/file/gdeffile.c:175
#: modules/file/gdeffile.c:199 modules/file/gsffile.c:159
-#: modules/file/gxyzffile.c:199 modules/file/iso28600.c:1038
+#: modules/file/gxyzffile.c:199 modules/file/iso28600.c:1174
+#: modules/file/microprof.c:361 modules/file/microprof.c:375
#: modules/file/pt3file.c:489 modules/file/pt3file.c:591
msgid "File header is truncated."
msgstr ""
@@ -3081,11 +3199,11 @@ msgstr ""
msgid "Comment is not nul-terminated."
msgstr ""
-#: modules/file/ambfile.c:84
+#: modules/file/ambfile.c:83
msgid "Imports Ambios AMB data files."
msgstr ""
-#: modules/file/ambfile.c:97
+#: modules/file/ambfile.c:96
msgid "Ambios amb files (.amb)"
msgstr ""
@@ -3117,11 +3235,11 @@ msgstr ""
msgid "FileDescBegin has no corresponding FileDescEnd."
msgstr ""
-#: modules/file/apedaxfile.c:259
+#: modules/file/apedaxfile.c:261
msgid "Imports A.P.E. Research DAX data files."
msgstr ""
-#: modules/file/apedaxfile.c:274
+#: modules/file/apedaxfile.c:276
msgid "A.P.E. Research DAX Files (.dax) and APDT File (.apdt)"
msgstr ""
@@ -3149,7 +3267,7 @@ msgstr ""
msgid "Height:"
msgstr ""
-#: modules/file/asciiexport.c:220 modules/file/xyzexport.c:248
+#: modules/file/asciiexport.c:220 modules/file/xyzexport.c:251
msgid "Value units:"
msgstr ""
@@ -3158,30 +3276,30 @@ msgid "Export Text"
msgstr ""
#: modules/file/asciiexport.c:275 modules/file/gxyzffile.c:402
-#: modules/file/imgexport.c:3565 modules/file/imgexport.c:4203
-#: modules/file/rawfile.c:758 modules/file/xyzexport.c:311
-#: modules/process/calibrate.c:607 modules/process/coerce.c:364
-#: modules/process/col_synth.c:516 modules/process/correct_affine.c:470
-#: modules/process/extend.c:259 modules/process/fft_filter_1d.c:261
-#: modules/process/grain_dist.c:306 modules/process/grain_edge.c:255
-#: modules/process/grain_mark.c:338 modules/process/grain_wshed.c:252
-#: modules/process/linematch.c:852 modules/process/mark_disconn.c:279
-#: modules/process/slope_dist.c:367 modules/process/tip_blind.c:357
+#: modules/file/imgexport.c:3532 modules/file/imgexport.c:4151
+#: modules/file/rawfile.c:758 modules/file/xyzexport.c:314
+#: modules/process/calibrate.c:561 modules/process/coerce.c:363
+#: modules/process/col_synth.c:516 modules/process/correct_affine.c:520
+#: modules/process/extend.c:259 modules/process/fft_filter_1d.c:263
+#: modules/process/grain_dist.c:307 modules/process/grain_edge.c:254
+#: modules/process/grain_mark.c:335 modules/process/grain_wshed.c:256
+#: modules/process/linematch.c:819 modules/process/mark_disconn.c:280
+#: modules/process/slope_dist.c:359 modules/process/tip_blind.c:360
#: modules/process/wpour_mark.c:354 modules/tools/spotremove.c:322
-#: modules/tools/stats.c:402 modules/xyz/xyz_raster.c:628
+#: modules/tools/stats.c:401 modules/xyz/xyz_raster.c:597
msgid "Options"
msgstr ""
-#: modules/file/asciiexport.c:278 modules/file/xyzexport.c:314
+#: modules/file/asciiexport.c:278 modules/file/xyzexport.c:317
msgid "Use _dot as decimal separator"
msgstr ""
-#: modules/file/asciiexport.c:285 modules/file/xyzexport.c:321
-#: modules/process/grain_dist.c:317
+#: modules/file/asciiexport.c:285 modules/file/xyzexport.c:324
+#: modules/process/grain_dist.c:318
msgid "Add _informational comment header"
msgstr ""
-#: modules/file/asciiexport.c:294 modules/file/xyzexport.c:330
+#: modules/file/asciiexport.c:294 modules/file/xyzexport.c:333
msgid "_Precision:"
msgstr ""
@@ -3201,20 +3319,20 @@ msgstr ""
msgid "Attocube ASCII files (.asc)"
msgstr ""
-#: modules/file/bcrfile.c:146
+#: modules/file/bcrfile.c:141
msgid "Imports Image Metrology BCR data files."
msgstr ""
-#: modules/file/bcrfile.c:159
+#: modules/file/bcrfile.c:154
msgid "BCR files (.bcr, .bcrf)"
msgstr ""
-#: modules/file/bcrfile.c:238
+#: modules/file/bcrfile.c:233
#, c-format
msgid "File header is not convertible from UTF-16: %s"
msgstr ""
-#: modules/file/bcrfile.c:351
+#: modules/file/bcrfile.c:346
#, c-format
msgid "Unknown file type header: `%s'."
msgstr ""
@@ -3249,7 +3367,7 @@ msgid "Burleigh exported data (.txt, .bin)"
msgstr ""
#: modules/file/burleigh_exp.c:226 modules/file/burleigh_exp.c:267
-#: modules/file/nanoscope.c:1605 modules/file/omicron.c:416
+#: modules/file/nanoscope.c:1612 modules/file/omicron.c:416
#: modules/file/shimadzu.c:468
msgid "Missing colon in header line."
msgstr ""
@@ -3298,22 +3416,40 @@ msgstr ""
msgid "Benyuan CSM files (.csm)"
msgstr ""
-#: modules/file/dektakxml.c:138
+#: modules/file/dektakvca.c:197
+msgid "Imports Dektak OPDx data files."
+msgstr ""
+
+#: modules/file/dektakvca.c:210
+msgid "Dektak OPDx data files (.OPDx)"
+msgstr ""
+
+#: modules/file/dektakvca.c:655
+#, c-format
+msgid "Item `%s' has unexpected type %u instead of %u."
+msgstr ""
+
+#: modules/file/dektakvca.c:1022
+#, c-format
+msgid "Truncated data inside item %s."
+msgstr ""
+
+#: modules/file/dektakxml.c:118
msgid "Imports Dektak XML data files."
msgstr ""
-#: modules/file/dektakxml.c:151
+#: modules/file/dektakxml.c:131
msgid "Dektak XML data files (.xml)"
msgstr ""
-#: modules/file/dektakxml.c:228 modules/file/lextfile.c:260
-#: modules/file/nanoscan.c:267 modules/file/ometiff.c:265
+#: modules/file/dektakxml.c:208 modules/file/lextfile.c:260
+#: modules/file/nanoscan.c:270 modules/file/ometiff.c:265
#, c-format
msgid "XML parsing failed: %s"
msgstr ""
-#: modules/file/dektakxml.c:400 modules/file/lextfile.c:163
-#: modules/file/nanoscan.c:672 modules/file/ometiff.c:445
+#: modules/file/dektakxml.c:373 modules/file/lextfile.c:163
+#: modules/file/nanoscan.c:698 modules/file/ometiff.c:445
#, c-format
msgid "Top-level element is not ‘%s’."
msgstr ""
@@ -3425,7 +3561,7 @@ msgid "Scan size header field overlaps with data."
msgstr ""
#: modules/file/err.h:48 modules/file/nrrdfile.c:779
-#: modules/file/nrrdfile.c:824
+#: modules/file/nrrdfile.c:824 modules/pygwy/pygwy-console.c:504
#, c-format
msgid "Cannot read from file: %s."
msgstr ""
@@ -3635,32 +3771,32 @@ msgid ""
"Data deserialization succeeded, but resulted in an unexpected object %s."
msgstr ""
-#: modules/file/gwytiff.h:332
+#: modules/file/gwytiff.h:335
#, c-format
msgid "BigTIFF reserved fields are %u and %u instead of 8 and 0."
msgstr ""
-#: modules/file/gwytiff.h:349 modules/file/gwytiff.h:366
+#: modules/file/gwytiff.h:352 modules/file/gwytiff.h:369
#, c-format
msgid "TIFF directory %lu ended unexpectedly."
msgstr ""
-#: modules/file/gwytiff.h:484
+#: modules/file/gwytiff.h:487
#, c-format
msgid "BigTIFF data type %u was found in a classic TIFF."
msgstr ""
-#: modules/file/gwytiff.h:501
+#: modules/file/gwytiff.h:504
msgid "Invalid tag data positions were found."
msgstr ""
-#: modules/file/gwytiff.h:874 modules/file/gwytiff.h:889
-#: modules/file/gwytiff.h:1012 modules/file/gwytiff.h:1019
+#: modules/file/gwytiff.h:877 modules/file/gwytiff.h:892
+#: modules/file/gwytiff.h:1015 modules/file/gwytiff.h:1022
#, c-format
msgid "Required tag %u was not found."
msgstr ""
-#: modules/file/gwytiff.h:942 modules/file/gwytiff.h:986
+#: modules/file/gwytiff.h:945 modules/file/gwytiff.h:989
#: modules/file/keyence.c:449 modules/file/matfile.c:276
#: modules/file/matfile.c:298 modules/file/omicronflat.c:1962
#: modules/file/princetonspe.c:339 modules/file/psia.c:352
@@ -3668,21 +3804,21 @@ msgstr ""
msgid "File is truncated."
msgstr ""
-#: modules/file/gwytiff.h:1044
+#: modules/file/gwytiff.h:1047
msgid "Non-uniform bits per sample are unsupported."
msgstr ""
-#: modules/file/gwytiff.h:1071
+#: modules/file/gwytiff.h:1074 modules/file/zeisslsm.c:973
#, c-format
msgid "Compression type %u is not supported."
msgstr ""
-#: modules/file/gwytiff.h:1077
+#: modules/file/gwytiff.h:1080
#, c-format
msgid "Planar configuration %u is not supported."
msgstr ""
-#: modules/file/gwytiff.h:1101
+#: modules/file/gwytiff.h:1104
msgid "Unsupported sample format"
msgstr ""
@@ -3719,7 +3855,7 @@ msgstr ""
msgid "Minizip error while reading the zip file: %s (%d)."
msgstr ""
-#: modules/file/gwyzip.h:248
+#: modules/file/gwyzip.h:248 modules/file/jpkscan.c:2776
#, c-format
msgid "File %s is missing in the zip file."
msgstr ""
@@ -3754,8 +3890,8 @@ msgstr ""
msgid "Export GXYZF"
msgstr ""
-#: modules/file/gxyzffile.c:395 modules/file/xyzexport.c:238
-#: modules/file/xyzexport.c:304
+#: modules/file/gxyzffile.c:395 modules/file/xyzexport.c:241
+#: modules/file/xyzexport.c:307
msgid "XYZ data:"
msgstr ""
@@ -3842,11 +3978,13 @@ msgstr ""
msgid "Representable"
msgstr ""
-#: modules/file/hdrimage.cc:480 modules/tools/stats.c:203
+#: modules/file/hdrimage.cc:480 modules/graph/graph_stats.c:146
+#: modules/tools/stats.c:203
msgid "Minimum:"
msgstr ""
-#: modules/file/hdrimage.cc:496 modules/tools/stats.c:204
+#: modules/file/hdrimage.cc:496 modules/graph/graph_stats.c:147
+#: modules/tools/stats.c:204
msgid "Maximum:"
msgstr ""
@@ -3865,12 +4003,12 @@ msgid "OpenEXR data type %u is invalid or unsupported."
msgstr ""
#: modules/file/hdrimage.cc:1433 modules/file/hdrimage.cc:1442
-#: modules/file/imgexport.c:5249 modules/file/imgexport.c:5260
+#: modules/file/imgexport.c:5198 modules/file/imgexport.c:5209
#, c-format
msgid "libpng initialization error (in %s)"
msgstr ""
-#: modules/file/hdrimage.cc:1451 modules/file/imgexport.c:5324
+#: modules/file/hdrimage.cc:1451 modules/file/imgexport.c:5273
msgid "libpng error occurred"
msgstr ""
@@ -3888,11 +4026,6 @@ msgstr ""
msgid "Horizontal size:"
msgstr ""
-#: modules/file/hdrimage.cc:2246 modules/file/hdrimage.cc:2252
-#: modules/file/pixmap.c:820 modules/file/pixmap.c:826
-msgid "px"
-msgstr ""
-
#: modules/file/hdrimage.cc:2252 modules/file/pixmap.c:826
msgid "Vertical size:"
msgstr ""
@@ -3905,10 +4038,10 @@ msgstr ""
msgid "Pages:"
msgstr ""
-#: modules/file/hdrimage.cc:2290 modules/file/imgexport.c:3043
+#: modules/file/hdrimage.cc:2290 modules/file/imgexport.c:3059
#: modules/file/pixmap.c:862 modules/file/rawfile.c:649
-#: modules/process/dimensions.h:467 modules/xyz/xyz_drift.c:774
-#: modules/xyz/xyz_raster.c:566
+#: modules/process/dimensions.h:449 modules/xyz/xyz_drift.c:774
+#: modules/xyz/xyz_raster.c:535
msgid "Physical Dimensions"
msgstr ""
@@ -3918,16 +4051,16 @@ msgstr ""
#: modules/process/calcoefs_new.c:408 modules/process/calcoefs_new.c:475
#: modules/process/calcoefs_simple.c:391 modules/process/calcoefs_simple.c:458
#: modules/process/calcoefs_view.c:511 modules/process/calcoefs_view.c:549
-#: modules/process/calibrate.c:466 modules/process/calibrate.c:549
-#: modules/process/dimensions.h:161 modules/process/volumize_layers.c:259
-#: modules/volume/volume_calibrate.c:414 modules/volume/volume_calibrate.c:441
-#: modules/volume/volume_calibrate.c:468 modules/volume/volume_calibrate.c:546
+#: modules/process/calibrate.c:459 modules/process/calibrate.c:514
+#: modules/process/dimensions.h:143 modules/process/volumize_layers.c:259
+#: modules/volume/volume_calibrate.c:409 modules/volume/volume_calibrate.c:429
+#: modules/volume/volume_calibrate.c:449 modules/volume/volume_calibrate.c:498
msgid "verb|Change"
msgstr ""
#: modules/file/hdrimage.cc:2345 modules/file/pixmap.c:907
-#: modules/file/rawfile.c:694 modules/process/crosscor.c:263
-#: modules/process/dimensions.h:477
+#: modules/file/rawfile.c:694 modules/process/crosscor.c:260
+#: modules/process/dimensions.h:459
msgid "H_eight:"
msgstr ""
@@ -3944,16 +4077,16 @@ msgstr ""
#: modules/file/hdrimage.cc:2557 modules/file/pixmap.c:1176
#: modules/file/rawfile.c:1386 modules/process/calcoefs_new.c:819
#: modules/process/calcoefs_simple.c:1197 modules/process/calcoefs_view.c:1380
-#: modules/process/calibrate.c:979 modules/process/dimensions.h:195
-#: modules/process/volumize_layers.c:315 modules/volume/volume_calibrate.c:1017
+#: modules/process/calibrate.c:1013 modules/process/dimensions.h:177
+#: modules/process/volumize_layers.c:314 modules/volume/volume_calibrate.c:957
msgid "Change Units"
msgstr ""
#: modules/file/hdrimage.cc:2571 modules/file/pixmap.c:1190
#: modules/file/rawfile.c:1400 modules/process/calcoefs_new.c:832
#: modules/process/calcoefs_simple.c:1210 modules/process/calcoefs_view.c:1393
-#: modules/process/calibrate.c:993 modules/process/dimensions.h:208
-#: modules/process/volumize_layers.c:329 modules/volume/volume_calibrate.c:1031
+#: modules/process/calibrate.c:1027 modules/process/dimensions.h:190
+#: modules/process/volumize_layers.c:328 modules/volume/volume_calibrate.c:971
msgid "New _units:"
msgstr ""
@@ -3997,187 +4130,188 @@ msgstr ""
msgid "Field DataSize %ux%u does not match image dimensions %ux%u."
msgstr ""
-#: modules/file/igorfile.c:200
+#: modules/file/igorfile.c:210
msgid "Imports Igor binary waves (.ibw)."
msgstr ""
-#: modules/file/igorfile.c:213
+#: modules/file/igorfile.c:223
msgid "Igor binary waves (.ibw)"
msgstr ""
-#: modules/file/igorfile.c:273
+#: modules/file/igorfile.c:283
#, c-format
msgid "Format version is %d. Only version 5 is supported."
msgstr ""
-#: modules/file/igorfile.c:294
+#: modules/file/igorfile.c:305
msgid "Only two-dimensional data are supported."
msgstr ""
-#: modules/file/igorfile.c:306
+#: modules/file/igorfile.c:317
#, c-format
msgid "Number of data points %u does not match resolutions %u×%u×%u."
msgstr ""
-#: modules/file/igorfile.c:320
+#: modules/file/igorfile.c:331
#, c-format
msgid "Data size %u does not match the number of data points %u×%u."
msgstr ""
-#: modules/file/igorfile.c:358
+#: modules/file/igorfile.c:369
msgid "Cannot read channel labels."
msgstr ""
-#: modules/file/imgexport.c:392 modules/file/pixmap.c:178
+#: modules/file/imgexport.c:391 modules/file/pixmap.c:178
msgid "Portable Network Graphics (.png)"
msgstr ""
-#: modules/file/imgexport.c:398 modules/file/pixmap.c:182
+#: modules/file/imgexport.c:397 modules/file/pixmap.c:182
msgid "JPEG (.jpeg,.jpg)"
msgstr ""
-#: modules/file/imgexport.c:404 modules/file/pixmap.c:186
+#: modules/file/imgexport.c:403 modules/file/pixmap.c:186
msgid "TIFF (.tiff,.tif)"
msgstr ""
-#: modules/file/imgexport.c:410 modules/file/pixmap.c:190
+#: modules/file/imgexport.c:409 modules/file/pixmap.c:190
msgid "Portable Pixmap (.ppm,.pnm)"
msgstr ""
-#: modules/file/imgexport.c:416 modules/file/pixmap.c:194
+#: modules/file/imgexport.c:415 modules/file/pixmap.c:194
msgid "Windows or OS2 Bitmap (.bmp)"
msgstr ""
-#: modules/file/imgexport.c:422 modules/file/pixmap.c:198
+#: modules/file/imgexport.c:421 modules/file/pixmap.c:198
msgid "TARGA (.tga,.targa)"
msgstr ""
-#: modules/file/imgexport.c:429
+#: modules/file/imgexport.c:428
msgid "WebP (.webp)"
msgstr ""
-#: modules/file/imgexport.c:437
+#: modules/file/imgexport.c:436
msgid "Portable document format (.pdf)"
msgstr ""
-#: modules/file/imgexport.c:445
+#: modules/file/imgexport.c:444
msgid "Encapsulated PostScript (.eps)"
msgstr ""
-#: modules/file/imgexport.c:453
+#: modules/file/imgexport.c:452
msgid "Scalable Vector Graphics (.svg)"
msgstr ""
-#: modules/file/imgexport.c:463 modules/tools/selectionmanager.c:269
+#: modules/file/imgexport.c:462 modules/tools/selectionmanager.c:269
msgid "Horiz./vert. lines"
msgstr ""
-#: modules/file/imgexport.c:467 modules/tools/selectionmanager.c:270
+#: modules/file/imgexport.c:466 modules/tools/selectionmanager.c:270
msgid "Ellipses"
msgstr ""
-#: modules/file/imgexport.c:471 modules/tools/selectionmanager.c:272
+#: modules/file/imgexport.c:470 modules/tools/selectionmanager.c:272
msgid "Lines"
msgstr ""
-#: modules/file/imgexport.c:479 modules/tools/selectionmanager.c:275
+#: modules/file/imgexport.c:478 modules/tools/selectionmanager.c:275
msgid "Rectangles"
msgstr ""
-#: modules/file/imgexport.c:483 modules/process/lat_synth.c:565
+#: modules/file/imgexport.c:482 modules/process/lat_synth.c:565
#: modules/process/lat_synth.c:637 modules/tools/selectionmanager.c:271
msgid "Lattice"
msgstr ""
-#: modules/file/imgexport.c:487
+#: modules/file/imgexport.c:486
msgid "Path"
msgstr ""
-#: modules/file/imgexport.c:493 modules/file/imgexport.c:499
+#: modules/file/imgexport.c:492 modules/file/imgexport.c:498
msgid "ruler|_None"
msgstr ""
-#: modules/file/imgexport.c:494
+#: modules/file/imgexport.c:493
msgid "_Rulers"
msgstr ""
-#: modules/file/imgexport.c:495
+#: modules/file/imgexport.c:494
msgid "_Inset scale bar"
msgstr ""
-#: modules/file/imgexport.c:500
+#: modules/file/imgexport.c:499
msgid "_False color ruler"
msgstr ""
-#: modules/file/imgexport.c:504
+#: modules/file/imgexport.c:503
msgid "title|None"
msgstr ""
-#: modules/file/imgexport.c:505
+#: modules/file/imgexport.c:504
msgid "At the top"
msgstr ""
-#: modules/file/imgexport.c:506
+#: modules/file/imgexport.c:505
msgid "Along the right edge"
msgstr ""
-#: modules/file/imgexport.c:512
+#: modules/file/imgexport.c:511
msgid ""
"Renders data into vector (SVG, PDF, EPS) and pixmap (PNG, JPEG, TIFF, WebP, "
"PPM, BMP, TARGA) images. Export to some formats relies on GDK and other "
"libraries thus may be installation-dependent."
msgstr ""
-#: modules/file/imgexport.c:2931
+#: modules/file/imgexport.c:2933
msgid "Select Color"
msgstr ""
-#: modules/file/imgexport.c:3002
-msgid "Black"
+#: modules/file/imgexport.c:3005
+msgid "White"
msgstr ""
-#: modules/file/imgexport.c:3010
-msgid "White"
+#: modules/file/imgexport.c:3014
+msgid "Black"
msgstr ""
-#: modules/file/imgexport.c:3053
+#: modules/file/imgexport.c:3069
msgid "Pi_xel size:"
msgstr ""
-#: modules/file/imgexport.c:3062
+#: modules/file/imgexport.c:3077
msgid "Pixels per _inch:"
msgstr ""
-#: modules/file/imgexport.c:3089
+#: modules/file/imgexport.c:3102
msgid "_Zoom:"
msgstr ""
-#: modules/file/imgexport.c:3108 modules/process/bdep_synth.c:430
+#: modules/file/imgexport.c:3120 modules/process/bdep_synth.c:430
#: modules/process/col_synth.c:486 modules/process/diff_synth.c:508
-#: modules/process/domain_synth.c:510 modules/process/grain_mark.c:285
-#: modules/process/lat_synth.c:753 modules/process/obj_synth.c:575
-#: modules/process/pat_synth.c:852 modules/process/pat_synth.c:1154
-#: modules/process/pat_synth.c:1489 modules/process/tip_blind.c:340
+#: modules/process/domain_synth.c:510 modules/process/fibre_synth.c:540
+#: modules/process/grain_mark.c:284 modules/process/lat_synth.c:753
+#: modules/process/obj_synth.c:573 modules/process/pat_synth.c:853
+#: modules/process/pat_synth.c:1155 modules/process/pat_synth.c:1490
+#: modules/process/phase_synth.c:298 modules/process/tip_blind.c:342
msgid "_Height:"
msgstr ""
-#: modules/file/imgexport.c:3121
+#: modules/file/imgexport.c:3136
msgid "_Font:"
msgstr ""
-#: modules/file/imgexport.c:3140
+#: modules/file/imgexport.c:3145
msgid "_Font size:"
msgstr ""
-#: modules/file/imgexport.c:3160
+#: modules/file/imgexport.c:3163
msgid "O_utline thickness:"
msgstr ""
-#: modules/file/imgexport.c:3170
+#: modules/file/imgexport.c:3172
msgid "_Border width:"
msgstr ""
-#: modules/file/imgexport.c:3180
+#: modules/file/imgexport.c:3181
msgid "_Tick length:"
msgstr ""
@@ -4197,219 +4331,220 @@ msgstr ""
msgid "_Line and text color:"
msgstr ""
-#: modules/file/imgexport.c:3221
+#: modules/file/imgexport.c:3220
msgid "_Transparent background"
msgstr ""
-#: modules/file/imgexport.c:3232
+#: modules/file/imgexport.c:3231
msgid "_Background color:"
msgstr ""
-#: modules/file/imgexport.c:3474
-msgid "Lateral scale"
-msgstr ""
-
-#: modules/file/imgexport.c:3487 modules/process/lno_synth.c:1053
-msgid "_Length:"
-msgstr ""
-
-#: modules/file/imgexport.c:3503
-msgid "_Auto"
-msgstr ""
-
-#: modules/file/imgexport.c:3511 modules/process/pat_synth.c:469
+#: modules/file/imgexport.c:3433 modules/process/fibre_synth.c:582
+#: modules/process/pat_synth.c:470
msgid "Placement"
msgstr ""
-#: modules/file/imgexport.c:3515
+#: modules/file/imgexport.c:3437
msgid "left"
msgstr ""
-#: modules/file/imgexport.c:3519
+#: modules/file/imgexport.c:3440
msgid "center"
msgstr ""
-#: modules/file/imgexport.c:3523
+#: modules/file/imgexport.c:3443
msgid "right"
msgstr ""
-#: modules/file/imgexport.c:3528
+#: modules/file/imgexport.c:3448
msgid "top"
msgstr ""
-#: modules/file/imgexport.c:3540
+#: modules/file/imgexport.c:3456
msgid "bottom"
msgstr ""
-#: modules/file/imgexport.c:3552 modules/file/imgexport.c:3874
+#: modules/file/imgexport.c:3479
+msgid "Lateral scale"
+msgstr ""
+
+#: modules/file/imgexport.c:3496 modules/process/lno_synth.c:1053
+msgid "_Length:"
+msgstr ""
+
+#: modules/file/imgexport.c:3502
+msgid "_Auto"
+msgstr ""
+
+#: modules/file/imgexport.c:3519 modules/file/imgexport.c:3832
msgid "Hori_zontal gap:"
msgstr ""
-#: modules/file/imgexport.c:3558 modules/file/imgexport.c:3854
+#: modules/file/imgexport.c:3526 modules/file/imgexport.c:3812
msgid "_Vertical gap:"
msgstr ""
-#: modules/file/imgexport.c:3571 modules/file/imgexport.c:4184
+#: modules/file/imgexport.c:3538 modules/file/imgexport.c:4134
msgid "Colo_r:"
msgstr ""
-#: modules/file/imgexport.c:3576 modules/file/imgexport.c:4189
+#: modules/file/imgexport.c:3542 modules/file/imgexport.c:4138
msgid "Out_line color:"
msgstr ""
-#: modules/file/imgexport.c:3580 modules/file/imgexport.c:4195
+#: modules/file/imgexport.c:3547 modules/file/imgexport.c:4143
msgid "O_pacity:"
msgstr ""
-#: modules/file/imgexport.c:3589
+#: modules/file/imgexport.c:3554
msgid "Draw _ticks"
msgstr ""
-#: modules/file/imgexport.c:3599
+#: modules/file/imgexport.c:3564
msgid "Draw _label"
msgstr ""
-#: modules/file/imgexport.c:3609
+#: modules/file/imgexport.c:3574
msgid "Draw text _above scale bar"
msgstr ""
-#: modules/file/imgexport.c:3773
+#: modules/file/imgexport.c:3738
msgid "Image"
msgstr ""
-#: modules/file/imgexport.c:3777 modules/process/calcoefs_view.c:473
-#: modules/process/correct_affine.c:488 modules/process/drift.c:297
-#: modules/process/dwt.c:206 modules/process/dwtanisotropy.c:202
-#: modules/process/fft_filter_1d.c:294 modules/process/fft_profile.c:292
-#: modules/process/fractal.c:253 modules/process/nanoindent_adjust.c:229
-#: modules/process/polydistort.c:247 modules/process/rotate.c:274
-#: modules/process/scale.c:253 modules/process/straighten_path.c:271
+#: modules/file/imgexport.c:3742 modules/process/calcoefs_view.c:473
+#: modules/process/correct_affine.c:538 modules/process/drift.c:298
+#: modules/process/dwt.c:206 modules/process/dwtanisotropy.c:203
+#: modules/process/fft_filter_1d.c:296 modules/process/fft_profile.c:293
+#: modules/process/fractal.c:262 modules/process/nanoindent_adjust.c:229
+#: modules/process/polydistort.c:250 modules/process/rotate.c:274
+#: modules/process/scale.c:257 modules/process/straighten_path.c:270
#: modules/process/unrotate.c:277 modules/tools/linestats.c:400
-#: modules/tools/profile.c:555 modules/tools/roughness.c:864
-#: modules/tools/sfunctions.c:468 modules/xyz/xyz_raster.c:632
+#: modules/tools/profile.c:552 modules/tools/roughness.c:879
+#: modules/tools/sfunctions.c:481 modules/xyz/xyz_raster.c:601
msgid "_Interpolation type:"
msgstr ""
-#: modules/file/imgexport.c:3807
+#: modules/file/imgexport.c:3772
msgid "Draw _frame"
msgstr ""
-#: modules/file/imgexport.c:3816
+#: modules/file/imgexport.c:3781
msgid "Draw _mask"
msgstr ""
-#: modules/file/imgexport.c:3826
+#: modules/file/imgexport.c:3791
msgid "Draw mask _legend"
msgstr ""
-#: modules/file/imgexport.c:3861
+#: modules/file/imgexport.c:3819
msgid "Value Scale"
msgstr ""
-#: modules/file/imgexport.c:3882
+#: modules/file/imgexport.c:3840
msgid "Fi_xed precision:"
msgstr ""
-#: modules/file/imgexport.c:3898
+#: modules/file/imgexport.c:3855
msgid "Fixed _kilo threshold:"
msgstr ""
-#: modules/file/imgexport.c:3914 modules/file/imgexport.c:4635
+#: modules/file/imgexport.c:3869 modules/file/imgexport.c:4583
msgid "Title"
msgstr ""
-#: modules/file/imgexport.c:3918
+#: modules/file/imgexport.c:3877
msgid "Posi_tion:"
msgstr ""
-#: modules/file/imgexport.c:3934
+#: modules/file/imgexport.c:3884
msgid "_Gap:"
msgstr ""
-#: modules/file/imgexport.c:3941
+#: modules/file/imgexport.c:3891
msgid "Put _units to title"
msgstr ""
-#: modules/file/imgexport.c:4125
+#: modules/file/imgexport.c:4075
msgid "Draw _selection"
msgstr ""
-#: modules/file/imgexport.c:4176 modules/tools/selectionmanager.c:361
+#: modules/file/imgexport.c:4126 modules/tools/selectionmanager.c:361
msgid "Objects"
msgstr ""
-#: modules/file/imgexport.c:4615
+#: modules/file/imgexport.c:4563
msgid "Lateral"
msgstr ""
-#: modules/file/imgexport.c:4654 modules/file/rawfile.c:1040
-#: modules/process/calcoefs_load.c:230 modules/process/neural.c:693
+#: modules/file/imgexport.c:4602 modules/file/rawfile.c:1040
+#: modules/process/calcoefs_load.c:230 modules/process/neural.c:700
msgid "verb|_Load"
msgstr ""
-#: modules/file/imgexport.c:4660 modules/file/rawfile.c:1046
-#: modules/process/neural.c:699
+#: modules/file/imgexport.c:4608 modules/file/rawfile.c:1046
+#: modules/process/neural.c:706
msgid "verb|_Store"
msgstr ""
-#: modules/file/imgexport.c:4666 modules/file/rawfile.c:1052
-#: modules/process/neural.c:705
+#: modules/file/imgexport.c:4614 modules/file/rawfile.c:1052
+#: modules/process/neural.c:712
msgid "_Rename"
msgstr ""
-#: modules/file/imgexport.c:4686 modules/file/rawfile.c:1071
+#: modules/file/imgexport.c:4634 modules/file/rawfile.c:1071
msgid "Preset _name:"
msgstr ""
-#: modules/file/imgexport.c:4757
+#: modules/file/imgexport.c:4705
#, c-format
msgid "Export %s"
msgstr ""
-#: modules/file/imgexport.c:4778
+#: modules/file/imgexport.c:4727
msgid "Export as 1_6 bit grayscale"
msgstr ""
-#: modules/file/imgexport.c:4801
+#: modules/file/imgexport.c:4750
msgid "Lateral Scale"
msgstr ""
-#: modules/file/imgexport.c:4806
+#: modules/file/imgexport.c:4755
msgid "Values"
msgstr ""
-#: modules/file/imgexport.c:4811
+#: modules/file/imgexport.c:4760
msgid "Selection"
msgstr ""
-#: modules/file/imgexport.c:4816 modules/file/rawfile.c:462
+#: modules/file/imgexport.c:4765 modules/file/rawfile.c:462
#: modules/process/convolution_filter.c:275
msgid "Presets"
msgstr ""
-#: modules/file/imgexport.c:5576
+#: modules/file/imgexport.c:5525
#, c-format
msgid "Cairo error occurred: %s"
msgstr ""
-#: modules/file/imgexport.c:5600
+#: modules/file/imgexport.c:5549
#, c-format
msgid "Pixbuf save failed: %s."
msgstr ""
-#: modules/file/imgexport.c:5878
+#: modules/file/imgexport.c:5827
msgid "Image is too large to be stored as TARGA."
msgstr ""
-#: modules/file/imgexport.c:6457 modules/file/imgexport.c:6486
+#: modules/file/imgexport.c:6406 modules/file/imgexport.c:6435
msgid "Draw _numbers"
msgstr ""
-#: modules/file/imgexport.c:6469 modules/file/imgexport.c:6517
+#: modules/file/imgexport.c:6418 modules/file/imgexport.c:6466
msgid "_End marker length:"
msgstr ""
-#: modules/file/imgexport.c:6498
+#: modules/file/imgexport.c:6447
msgid "Marker _radius:"
msgstr ""
@@ -4447,45 +4582,56 @@ msgstr ""
msgid "image depth"
msgstr ""
-#: modules/file/iso28600.c:534
+#: modules/file/iso28600.c:543
msgid "Imports and exports ISO 28600:2011 SPM data transfer format."
msgstr ""
-#: modules/file/iso28600.c:550
+#: modules/file/iso28600.c:559
msgid "ISO 28600:2011 SPM data transfer files (.spm)"
msgstr ""
-#: modules/file/iso28600.c:606
+#: modules/file/iso28600.c:658
#, c-format
-msgid "Only regular mappings are implemented but file has mapping type ‘%s’."
+msgid ""
+"Only regular and irregular mappings are implemented but the file has mapping "
+"type ‘%s’."
msgstr ""
-#: modules/file/iso28600.c:668 modules/file/iso28600.c:677
-#: modules/file/iso28600.c:686
+#: modules/file/iso28600.c:687 modules/file/iso28600.c:696
+#: modules/file/iso28600.c:705
#, c-format
msgid "List ‘%s’ has %u items which differs from the number %u given by ‘%s’."
msgstr ""
-#: modules/file/iso28600.c:755 modules/file/iso28600.c:867
-#: modules/file/sdfile.c:846 modules/file/sdfile.c:863
-#: modules/file/spip-asc.c:239 modules/file/witec-asc.c:223
-#: modules/file/wsffile.c:215
+#: modules/file/iso28600.c:775
#, c-format
-msgid "End of file reached when reading sample #%d of %d"
+msgid "End of file reached when reading sample #%u of %u"
msgstr ""
-#: modules/file/iso28600.c:764 modules/file/iso28600.c:876
-#: modules/file/spip-asc.c:246 modules/file/witec-asc.c:230
-#: modules/file/wsffile.c:222
+#: modules/file/iso28600.c:784 modules/file/iso28600.c:873
#, c-format
-msgid "Malformed data encountered when reading sample #%d of %d"
+msgid "Malformed data encountered when reading sample #%u"
msgstr ""
-#: modules/file/iso28600.c:774 modules/file/iso28600.c:886
+#: modules/file/iso28600.c:797 modules/file/iso28600.c:887
+#: modules/file/iso28600.c:1022
msgid "Missing end-of-data marker."
msgstr ""
-#: modules/file/iso28600.c:1048
+#: modules/file/iso28600.c:1003 modules/file/sdfile.c:846
+#: modules/file/sdfile.c:863 modules/file/spip-asc.c:239
+#: modules/file/witec-asc.c:223 modules/file/wsffile.c:215
+#, c-format
+msgid "End of file reached when reading sample #%d of %d"
+msgstr ""
+
+#: modules/file/iso28600.c:1012 modules/file/spip-asc.c:246
+#: modules/file/witec-asc.c:230 modules/file/wsffile.c:222
+#, c-format
+msgid "Malformed data encountered when reading sample #%d of %d"
+msgstr ""
+
+#: modules/file/iso28600.c:1184
#, c-format
msgid "Line %u does not contain mandatory label ‘%s’."
msgstr ""
@@ -4502,42 +4648,60 @@ msgstr ""
msgid "The type of data is unknown. Please report it to the developers."
msgstr ""
-#: modules/file/jpkscan.c:229
+#: modules/file/jpkscan.c:292
msgid "Imports JPK image scans."
msgstr ""
-#: modules/file/jpkscan.c:242
+#: modules/file/jpkscan.c:305
msgid "JPK image scans (.jpk, .jpk-qi-image)"
msgstr ""
-#: modules/file/jpkscan.c:249
+#: modules/file/jpkscan.c:312
msgid "JPK force curves (.jpk-force, .jpk-force-map, .jpk-qi-data)"
msgstr ""
-#: modules/file/jpkscan.c:315
+#: modules/file/jpkscan.c:378
msgid "File does not contain grid dimensions."
msgstr ""
-#: modules/file/jpkscan.c:660 modules/file/nanoobserver.c:193
+#: modules/file/jpkscan.c:736 modules/file/nanoobserver.c:360
#: modules/file/nanoscantech.c:205 modules/file/opengps.c:209
#: modules/file/sensofarx.c:183 modules/file/spmxfile.c:166
msgid "Minizip cannot open the file as a ZIP file."
msgstr ""
-#: modules/file/jpkscan.c:739
+#: modules/file/jpkscan.c:758 modules/file/jpkscan.c:2717
+#, c-format
+msgid "Scanning file (%u curves)..."
+msgstr ""
+
+#: modules/file/jpkscan.c:798 modules/file/nmmxyz.c:299
+msgid "Reading files..."
+msgstr ""
+
+#: modules/file/jpkscan.c:816
+msgid "Creating volume data..."
+msgstr ""
+
+#: modules/file/jpkscan.c:968
msgid "Non-uniform point and/or segment numbering is not supported."
msgstr ""
-#: modules/file/jpkscan.c:748
+#: modules/file/jpkscan.c:977
msgid "Non-uniform channel lists are not supported."
msgstr ""
-#: modules/file/jpkscan.c:756
+#: modules/file/jpkscan.c:985
#, c-format
msgid "Data file %s was found instead of expected %s."
msgstr ""
-#: modules/file/jpkscan.c:1497
+#: modules/file/jpkscan.c:1900
+#, c-format
+msgid "Header properties file for index %u is missing."
+msgstr ""
+
+#: modules/file/jpkscan.c:2519
msgid "Cannot find any height channel."
msgstr ""
@@ -4686,19 +4850,19 @@ msgstr ""
msgid "File header is larger than file."
msgstr ""
-#: modules/file/microprof.c:117
+#: modules/file/microprof.c:125
msgid "Imports MicroProf FRT profilometer data files."
msgstr ""
-#: modules/file/microprof.c:130
+#: modules/file/microprof.c:138
msgid "MicroProf FRT files (.frt)"
msgstr ""
-#: modules/file/microprof.c:136
+#: modules/file/microprof.c:144
msgid "MicroProf FRT text files (.txt)"
msgstr ""
-#: modules/file/microprof.c:432
+#: modules/file/microprof.c:519
msgid "File contains fewer than XSize*YSize data points."
msgstr ""
@@ -4786,8 +4950,8 @@ msgstr ""
msgid "Spectra data starts past the end of file."
msgstr ""
-#: modules/file/nanoeducator.c:648 modules/file/opdfile.c:276
-#: modules/file/renishaw.c:1325 modules/file/sensofar.c:256
+#: modules/file/nanoeducator.c:648 modules/file/opdfile.c:287
+#: modules/file/renishaw.c:1334 modules/file/sensofar.c:256
#: modules/file/witec-asc.c:161
msgid "File header is truncated"
msgstr ""
@@ -4797,8 +4961,8 @@ msgstr ""
msgid "Parameter header is truncated"
msgstr ""
-#: modules/file/nanoeducator.c:932 modules/process/curvature.c:454
-#: modules/tools/profile.c:1107
+#: modules/file/nanoeducator.c:932 modules/process/curvature.c:456
+#: modules/tools/profile.c:1090
#, c-format
msgid "Profile %d"
msgstr ""
@@ -4878,23 +5042,27 @@ msgstr ""
msgid "Missing data start marker \\x1a\\x04."
msgstr ""
-#: modules/file/nanoobserver.c:113
-msgid "Reads NanoObserver .nao files."
+#: modules/file/nanoobserver.c:201
+msgid "Reads Nano-Solution/NanoObserver .nao files."
+msgstr ""
+
+#: modules/file/nanoobserver.c:214
+msgid "Nano-Solution/NanoObserver data (.nao)"
msgstr ""
-#: modules/file/nanoobserver.c:126
-msgid "NanoObserver data (.nao)"
+#: modules/file/nanoobserver.c:410 modules/file/renishaw.c:1420
+msgid "Data block is truncated"
msgstr ""
-#: modules/file/nanoscan.c:188
+#: modules/file/nanoscan.c:191
msgid "Imports NanoScan XML files."
msgstr ""
-#: modules/file/nanoscan.c:201
+#: modules/file/nanoscan.c:204
msgid "NanoScan XML files (.xml)"
msgstr ""
-#: modules/file/nanoscan.c:910
+#: modules/file/nanoscan.c:937
msgid "Wrong size of Base64 encoded data."
msgstr ""
@@ -4914,20 +5082,20 @@ msgstr ""
msgid "Nanoscope II files"
msgstr ""
-#: modules/file/nanoscope.c:207
+#: modules/file/nanoscope.c:212
msgid ""
"Imports Veeco (Digital Instruments) Nanoscope data files, version 3 or newer."
msgstr ""
-#: modules/file/nanoscope.c:221
+#: modules/file/nanoscope.c:226
msgid "Nanoscope III files"
msgstr ""
-#: modules/file/nanoscope.c:288
+#: modules/file/nanoscope.c:295
msgid "File is not a Nanoscope file, or it is a unknown subtype."
msgstr ""
-#: modules/file/nanoscope.c:295
+#: modules/file/nanoscope.c:302
msgid ""
"File has been damaged by change of line endings, resulting in corruption of "
"the binary part of the file.\n"
@@ -4938,16 +5106,16 @@ msgid ""
"transfer that attempts to store text platform-independently."
msgstr ""
-#: modules/file/nanoscope.c:653 modules/file/nanoscope.c:669
+#: modules/file/nanoscope.c:660 modules/file/nanoscope.c:676
msgid "Cannot parse `Scan size' field."
msgstr ""
-#: modules/file/nanoscope.c:1539 modules/file/nrrdfile.c:1086
+#: modules/file/nanoscope.c:1546 modules/file/nrrdfile.c:1086
#, c-format
msgid "Garbage after data sample #%u."
msgstr ""
-#: modules/file/nanoscope.c:1595
+#: modules/file/nanoscope.c:1602
msgid "Truncated header line."
msgstr ""
@@ -5023,11 +5191,8 @@ msgstr ""
msgid "Nano Measuring Machine data import must be run as interactive."
msgstr ""
-#: modules/file/nmmxyz.c:299
-msgid "Reading files..."
-msgstr ""
-
#: modules/file/nmmxyz.c:306 modules/process/lat_synth.c:1224
+#: modules/process/wave_synth.c:798
msgid "Rendering surface..."
msgstr ""
@@ -5060,20 +5225,20 @@ msgid "Plot point density map"
msgstr ""
#: modules/file/nmmxyz.c:534 modules/file/rawfile.c:626
-#: modules/process/dimensions.h:445 modules/xyz/xyz_drift.c:725
-#: modules/xyz/xyz_raster.c:517
+#: modules/process/dimensions.h:427 modules/xyz/xyz_drift.c:725
+#: modules/xyz/xyz_raster.c:376
msgid "Resolution"
msgstr ""
#: modules/file/nmmxyz.c:538 modules/file/rawfile.c:631
-#: modules/process/dimensions.h:451 modules/xyz/xyz_drift.c:729
-#: modules/xyz/xyz_raster.c:521
+#: modules/process/dimensions.h:433 modules/xyz/xyz_drift.c:729
+#: modules/xyz/xyz_raster.c:382
msgid "_Horizontal size:"
msgstr ""
#: modules/file/nmmxyz.c:554 modules/file/rawfile.c:638
-#: modules/process/dimensions.h:454 modules/xyz/xyz_drift.c:744
-#: modules/xyz/xyz_raster.c:536
+#: modules/process/dimensions.h:436 modules/xyz/xyz_drift.c:744
+#: modules/xyz/xyz_raster.c:388
msgid "_Vertical size:"
msgstr ""
@@ -5158,38 +5323,38 @@ msgstr ""
msgid "Per-axis header field %s contains too few items."
msgstr ""
-#: modules/file/nt-mdt.c:843
+#: modules/file/nt-mdt.c:850
msgid "Imports NT-MDT data files."
msgstr ""
-#: modules/file/nt-mdt.c:856
+#: modules/file/nt-mdt.c:863
msgid "NT-MDT files (.mdt)"
msgstr ""
-#: modules/file/nt-mdt.c:1491 modules/file/nt-mdt.c:1599
+#: modules/file/nt-mdt.c:1498 modules/file/nt-mdt.c:1606
msgid "Frame is too short for Frame Mode."
msgstr ""
-#: modules/file/nt-mdt.c:1506 modules/file/nt-mdt.c:1614
+#: modules/file/nt-mdt.c:1513 modules/file/nt-mdt.c:1621
msgid "Frame is too short for dots or data."
msgstr ""
-#: modules/file/nt-mdt.c:1869
+#: modules/file/nt-mdt.c:1879
#, c-format
msgid "End of file reached in frame header #%u."
msgstr ""
-#: modules/file/nt-mdt.c:1877
+#: modules/file/nt-mdt.c:1887
#, c-format
msgid "End of file reached in frame data #%u."
msgstr ""
-#: modules/file/nt-mdt.c:1910
+#: modules/file/nt-mdt.c:1920
#, c-format
msgid "Frame #%u is too short for scanned data header."
msgstr ""
-#: modules/file/nt-mdt.c:1927
+#: modules/file/nt-mdt.c:1937
#, c-format
msgid "Frame #%u is too short for spectroscopy data header."
msgstr ""
@@ -5301,28 +5466,28 @@ msgstr ""
msgid "Omicron MATRIX (.mtrx & .mtrx)"
msgstr ""
-#: modules/file/opdfile.c:188
+#: modules/file/opdfile.c:199
msgid "Imports Wyko OPD and ASC files."
msgstr ""
-#: modules/file/opdfile.c:201
+#: modules/file/opdfile.c:212
msgid "Wyko OPD files (.opd)"
msgstr ""
-#: modules/file/opdfile.c:208
+#: modules/file/opdfile.c:219
msgid "Wyko ASCII export files (.asc)"
msgstr ""
-#: modules/file/opdfile.c:299
+#: modules/file/opdfile.c:310
#, c-format
msgid "Item `%s' is beyond the end of the file."
msgstr ""
-#: modules/file/opdfile.c:614
+#: modules/file/opdfile.c:636
msgid "Nested directories found"
msgstr ""
-#: modules/file/opdfile.c:805
+#: modules/file/opdfile.c:842
#, c-format
msgid "Truncated data in block %s"
msgstr ""
@@ -5615,19 +5780,21 @@ msgstr ""
#: modules/file/rawfile.c:567 modules/process/arithmetic.c:234
#: modules/process/calcoefs_view.c:320 modules/process/coerce.c:250
-#: modules/process/convolution_filter.c:236 modules/process/deposit_synth.c:637
+#: modules/process/convolution_filter.c:236 modules/process/deposit_synth.c:638
#: modules/process/drift.c:242 modules/process/edge.c:635
-#: modules/process/entropy.c:178 modules/process/fft_filter_1d.c:183
-#: modules/process/grain_edge.c:210 modules/process/grain_filter.c:313
-#: modules/process/grain_mark.c:244 modules/process/grain_wshed.c:164
-#: modules/process/mark_disconn.c:205 modules/process/mark_with.c:195
-#: modules/process/polydistort.c:205 modules/process/scars.c:295
-#: modules/process/slope_dist.c:273 modules/process/straighten_path.c:198
-#: modules/process/synth.h:509 modules/process/tip_model.c:166
+#: modules/process/entropy.c:178 modules/process/fft_filter_1d.c:184
+#: modules/process/fractal.c:225 modules/process/grain_edge.c:209
+#: modules/process/grain_filter.c:312 modules/process/grain_mark.c:243
+#: modules/process/grain_wshed.c:165 modules/process/mark_disconn.c:205
+#: modules/process/mark_with.c:196 modules/process/mfm_field.c:278
+#: modules/process/mfm_shift.c:167 modules/process/polydistort.c:205
+#: modules/process/scars.c:314 modules/process/slope_dist.c:272
+#: modules/process/stitch.c:272 modules/process/straighten_path.c:198
+#: modules/process/synth.h:538 modules/process/tip_model.c:164
#: modules/process/wpour_mark.c:273 modules/tools/linestats.c:454
-#: modules/tools/sfunctions.c:534 modules/tools/stats.c:459
-#: modules/volume/volume_extract.c:328 modules/volume/volume_linestat.c:287
-#: modules/xyz/xyz_drift.c:618 modules/xyz/xyz_raster.c:443
+#: modules/tools/sfunctions.c:531 modules/tools/stats.c:456
+#: modules/volume/volume_extract.c:321 modules/volume/volume_linestat.c:292
+#: modules/xyz/xyz_drift.c:618 modules/xyz/xyz_raster.c:457
msgid "_Update"
msgstr ""
@@ -5769,7 +5936,7 @@ msgid ""
"The contents of `%s' does not match format: %s."
msgstr ""
-#: modules/file/rawfile.c:1690 modules/process/neural.c:1580
+#: modules/file/rawfile.c:1690 modules/process/neural.c:1587
#, c-format
msgid "The name `%s' is invalid."
msgstr ""
@@ -5862,7 +6029,8 @@ msgstr ""
msgid "Import XYZ Data"
msgstr ""
-#: modules/file/rawxyz.c:279
+#: modules/file/rawxyz.c:279 modules/graph/graph_stats.c:305
+#: modules/graph/graph_stats.c:756 modules/graph/graph_stats.c:800
msgid "Number of points:"
msgstr ""
@@ -5882,7 +6050,7 @@ msgstr ""
msgid "_Lateral units:"
msgstr ""
-#: modules/file/rawxyz.c:386 modules/process/dimensions.h:494
+#: modules/file/rawxyz.c:386 modules/process/dimensions.h:479
msgid "_Value units:"
msgstr ""
@@ -5898,18 +6066,14 @@ msgstr ""
msgid "MapArea block is truncated"
msgstr ""
-#: modules/file/renishaw.c:787
+#: modules/file/renishaw.c:793
msgid "Random points order unsupported"
msgstr ""
-#: modules/file/renishaw.c:1396
+#: modules/file/renishaw.c:1405
msgid "Block header is truncated"
msgstr ""
-#: modules/file/renishaw.c:1411
-msgid "Data block is truncated"
-msgstr ""
-
#: modules/file/rhk-sm3.c:236
msgid "Imports RHK Technology SM3 data files."
msgstr ""
@@ -6171,19 +6335,23 @@ msgstr ""
msgid "SPML files (.xml)"
msgstr ""
-#: modules/file/spmlab.c:131
+#: modules/file/spmlab.c:175
msgid "Imports Thermicroscopes SpmLab R3 to R7 data files."
msgstr ""
-#: modules/file/spmlab.c:144
+#: modules/file/spmlab.c:188
msgid "Thermicroscopes SpmLab files"
msgstr ""
-#: modules/file/spmlab.c:231
+#: modules/file/spmlab.c:259
#, c-format
msgid "Unknown format version %c."
msgstr ""
+#: modules/file/spmlab.c:283
+msgid "Data block is truncated."
+msgstr ""
+
#: modules/file/spmlabf.c:79
msgid "Imports SPMLab floating-point files."
msgstr ""
@@ -6378,11 +6546,11 @@ msgstr ""
msgid "WinSTM files (.stm)"
msgstr ""
-#: modules/file/wipfile.c:272
+#: modules/file/wipfile.c:281
msgid "Imports WItec Project data files."
msgstr ""
-#: modules/file/wipfile.c:285
+#: modules/file/wipfile.c:294
msgid "WItec Project files (.wip)"
msgstr ""
@@ -6443,21 +6611,21 @@ msgstr ""
msgid "XYZ text data (.xyz)"
msgstr ""
-#: modules/file/xyzexport.c:244
+#: modules/file/xyzexport.c:247
msgid "Lateral units:"
msgstr ""
-#: modules/file/xyzexport.c:290
+#: modules/file/xyzexport.c:293
msgid "Export XYZ"
msgstr ""
-#: modules/file/xyzexport.c:340 modules/process/curvature.c:704
+#: modules/file/xyzexport.c:343 modules/process/curvature.c:700
#: modules/process/entropy.c:214 modules/process/facet-level.c:207
-#: modules/process/fit-shape.c:743 modules/process/level.c:259
-#: modules/process/linematch.c:906 modules/process/neural.c:593
-#: modules/process/polylevel.c:491 modules/process/slope_dist.c:418
-#: modules/tools/filter.c:300 modules/tools/linestats.c:436
-#: modules/tools/profile.c:591 modules/tools/sfunctions.c:516
+#: modules/process/fit-shape.c:755 modules/process/level.c:259
+#: modules/process/linematch.c:869 modules/process/neural.c:597
+#: modules/process/polylevel.c:494 modules/process/slope_dist.c:411
+#: modules/tools/filter.c:301 modules/tools/linestats.c:436
+#: modules/tools/profile.c:572 modules/tools/sfunctions.c:513
#: modules/tools/stats.c:389
msgid "Masking Mode"
msgstr ""
@@ -6470,6 +6638,14 @@ msgstr ""
msgid "Carl Zeiss SEM scans (.tif)"
msgstr ""
+#: modules/file/zeisslsm.c:383
+msgid "Imports Carl Zeiss CLSM images."
+msgstr ""
+
+#: modules/file/zeisslsm.c:396
+msgid "Carl Zeiss CLSM images (.lsm)"
+msgstr ""
+
#: modules/file/zemax.c:72
msgid "Imports Zemax grid sag data files."
msgstr ""
@@ -6492,15 +6668,15 @@ msgstr ""
msgid "The first line contains too many items."
msgstr ""
-#: modules/graph/graph_align.c:57
+#: modules/graph/graph_align.c:60
msgid "Aligns graph curves."
msgstr ""
-#: modules/graph/graph_align.c:71
+#: modules/graph/graph_align.c:74
msgid "/_Align"
msgstr ""
-#: modules/graph/graph_align.c:74
+#: modules/graph/graph_align.c:77
msgid "Align curves"
msgstr ""
@@ -6516,48 +6692,50 @@ msgstr ""
msgid "Fit critical dimension"
msgstr ""
-#: modules/graph/graph_cd.c:209 modules/graph/graph_fit.c:267
+#: modules/graph/graph_cd.c:209 modules/graph/graph_fit.c:270
msgid "Fit Graph"
msgstr ""
-#: modules/graph/graph_cd.c:212 modules/graph/graph_fdfit.c:251
-#: modules/graph/graph_fit.c:270 modules/process/fit-shape.c:393
+#: modules/graph/graph_cd.c:212 modules/graph/graph_fdfit.c:254
+#: modules/graph/graph_fit.c:273 modules/process/fit-shape.c:394
#: modules/volume/volume_fdfit.c:299
msgid "verb|_Fit"
msgstr ""
-#: modules/graph/graph_cd.c:262 modules/graph/graph_cut.c:166
-#: modules/graph/graph_fdfit.c:306 modules/graph/graph_fit.c:325
-#: modules/graph/graph_peaks.c:199
+#: modules/graph/graph_cd.c:262 modules/graph/graph_cut.c:168
+#: modules/graph/graph_fdfit.c:313 modules/graph/graph_fit.c:332
+#: modules/graph/graph_peaks.c:199 modules/graph/graph_stats.c:268
msgid "_Graph curve:"
msgstr ""
-#: modules/graph/graph_cd.c:276 modules/graph/graph_fdfit.c:320
-#: modules/graph/graph_fit.c:339 modules/volume/volume_fdfit.c:405
+#: modules/graph/graph_cd.c:276 modules/graph/graph_fdfit.c:327
+#: modules/graph/graph_fit.c:346 modules/volume/volume_fdfit.c:389
msgid "F_unction:"
msgstr ""
-#: modules/graph/graph_cd.c:305 modules/graph/graph_fdfit.c:361
-#: modules/graph/graph_fit.c:375 modules/process/curvature.c:745
-#: modules/process/fit-shape.c:792 modules/volume/volume_fdfit.c:446
+#: modules/graph/graph_cd.c:305 modules/graph/graph_fdfit.c:368
+#: modules/graph/graph_fit.c:382 modules/process/curvature.c:742
+#: modules/process/fit-shape.c:804 modules/volume/volume_fdfit.c:422
msgid "Parameter"
msgstr ""
-#: modules/graph/graph_cd.c:307 modules/graph/graph_fdfit.c:363
-#: modules/graph/graph_fit.c:377 modules/process/fit-shape.c:794
-#: modules/volume/volume_fdfit.c:448
+#: modules/graph/graph_cd.c:307 modules/graph/graph_fdfit.c:370
+#: modules/graph/graph_fit.c:384 modules/process/fit-shape.c:806
+#: modules/volume/volume_fdfit.c:424
msgid "Error"
msgstr ""
-#: modules/graph/graph_cd.c:319 modules/graph/graph_cut.c:196
-#: modules/graph/graph_fdfit.c:415 modules/graph/graph_fit.c:433
-#: modules/volume/volume_fdfit.c:500 modules/volume/volume_linestat.c:389
+#: modules/graph/graph_cd.c:319 modules/graph/graph_cut.c:189
+#: modules/graph/graph_fdfit.c:422 modules/graph/graph_fit.c:440
+#: modules/graph/graph_stats.c:279 modules/graph/graph_stats.c:793
+#: modules/volume/volume_fdfit.c:476 modules/volume/volume_linestat.c:394
msgid "Range:"
msgstr ""
-#: modules/graph/graph_cd.c:330 modules/graph/graph_cut.c:207
-#: modules/graph/graph_fdfit.c:426 modules/graph/graph_fit.c:444
-#: modules/volume/volume_fdfit.c:511 modules/volume/volume_linestat.c:400
+#: modules/graph/graph_cd.c:330 modules/graph/graph_cut.c:200
+#: modules/graph/graph_fdfit.c:433 modules/graph/graph_fit.c:451
+#: modules/graph/graph_stats.c:290 modules/graph/graph_stats.c:796
+#: modules/volume/volume_fdfit.c:487 modules/volume/volume_linestat.c:405
msgid "range|to"
msgstr ""
@@ -6565,92 +6743,92 @@ msgstr ""
msgid "_Draw whole circle"
msgstr ""
-#: modules/graph/graph_cd.c:382 modules/graph/graph_fdfit.c:491
-#: modules/graph/graph_fit.c:531 modules/process/fit-shape.c:522
-#: modules/volume/volume_fdfit.c:573
+#: modules/graph/graph_cd.c:382 modules/graph/graph_fdfit.c:498
+#: modules/graph/graph_fit.c:538 modules/process/fit-shape.c:523
+#: modules/volume/volume_fdfit.c:549
msgid "Save Fit Report"
msgstr ""
#: modules/graph/graph_cd.c:529 modules/graph/graph_cd.c:1107
-#: modules/graph/graph_fdfit.c:709 modules/graph/graph_fit.c:763
-#: modules/volume/volume_fdfit.c:907
+#: modules/graph/graph_fdfit.c:725 modules/graph/graph_fit.c:779
+#: modules/volume/volume_fdfit.c:883
msgid "Fit"
msgstr ""
-#: modules/graph/graph_cd.c:555 modules/graph/graph_fdfit.c:749
-#: modules/graph/graph_fit.c:803 modules/volume/volume_fdfit.c:978
-#: modules/volume/volume_fdfit.c:1085
+#: modules/graph/graph_cd.c:555 modules/graph/graph_fdfit.c:765
+#: modules/graph/graph_fit.c:819 modules/volume/volume_fdfit.c:954
+#: modules/volume/volume_fdfit.c:1061
msgid "It is necessary to select more data points than free fit parameters"
msgstr ""
-#: modules/graph/graph_cd.c:710 modules/graph/graph_fdfit.c:798
-#: modules/graph/graph_fit.c:852 modules/process/entropy.c:554
-#: modules/tools/grainmeasure.c:217 modules/tools/readvalue.c:634
-#: modules/tools/readvalue.c:635 modules/tools/readvalue.c:636
-#: modules/tools/readvalue.c:637 modules/tools/roughness.c:975
-#: modules/tools/stats.c:727 modules/tools/stats.c:740
-#: modules/tools/stats.c:741 modules/volume/volume_fdfit.c:1134
-#: modules/xyz/xyz_drift.c:1099 modules/xyz/xyz_drift.c:1117
-#: modules/xyz/xyz_drift.c:1134
+#: modules/graph/graph_cd.c:710 modules/graph/graph_fdfit.c:814
+#: modules/graph/graph_fit.c:868 modules/graph/graph_stats.c:663
+#: modules/process/entropy.c:555 modules/tools/grainmeasure.c:217
+#: modules/tools/readvalue.c:634 modules/tools/readvalue.c:635
+#: modules/tools/readvalue.c:636 modules/tools/readvalue.c:637
+#: modules/tools/roughness.c:984 modules/tools/stats.c:723
+#: modules/tools/stats.c:736 modules/tools/stats.c:737
+#: modules/volume/volume_fdfit.c:1110 modules/xyz/xyz_drift.c:1099
+#: modules/xyz/xyz_drift.c:1117 modules/xyz/xyz_drift.c:1134
msgid "N.A."
msgstr ""
-#: modules/graph/graph_cd.c:993 modules/graph/graph_fdfit.c:1363
-#: modules/graph/graph_fit.c:1500 modules/process/fit-shape.c:2078
-#: modules/volume/volume_fdfit.c:1720
+#: modules/graph/graph_cd.c:993 modules/graph/graph_fdfit.c:1381
+#: modules/graph/graph_fit.c:1518 modules/process/fit-shape.c:2060
+#: modules/volume/volume_fdfit.c:1696
msgid "===== Fit Results ====="
msgstr ""
-#: modules/graph/graph_cd.c:997 modules/graph/graph_fdfit.c:1367
-#: modules/graph/graph_fit.c:1504 modules/process/fit-shape.c:2080
-#: modules/volume/volume_fdfit.c:1724
+#: modules/graph/graph_cd.c:997 modules/graph/graph_fdfit.c:1385
+#: modules/graph/graph_fit.c:1522 modules/process/fit-shape.c:2062
+#: modules/volume/volume_fdfit.c:1700
#, c-format
msgid "Data: %s\n"
msgstr ""
-#: modules/graph/graph_cd.c:1000 modules/graph/graph_fdfit.c:1370
-#: modules/graph/graph_fit.c:1507 modules/process/fit-shape.c:2082
-#: modules/volume/volume_fdfit.c:1727
+#: modules/graph/graph_cd.c:1000 modules/graph/graph_fdfit.c:1388
+#: modules/graph/graph_fit.c:1525 modules/process/fit-shape.c:2064
+#: modules/volume/volume_fdfit.c:1703
#, c-format
msgid "Number of points: %d of %d\n"
msgstr ""
-#: modules/graph/graph_cd.c:1004 modules/graph/graph_fdfit.c:1374
-#: modules/graph/graph_fit.c:1511 modules/volume/volume_fdfit.c:1731
+#: modules/graph/graph_cd.c:1004 modules/graph/graph_fdfit.c:1392
+#: modules/graph/graph_fit.c:1529 modules/volume/volume_fdfit.c:1707
#, c-format
msgid "X range: %.*f to %.*f %s\n"
msgstr ""
-#: modules/graph/graph_cd.c:1010 modules/graph/graph_fdfit.c:1380
-#: modules/graph/graph_fit.c:1517 modules/process/fit-shape.c:2084
-#: modules/volume/volume_fdfit.c:1737
+#: modules/graph/graph_cd.c:1010 modules/graph/graph_fdfit.c:1398
+#: modules/graph/graph_fit.c:1535 modules/process/fit-shape.c:2066
+#: modules/volume/volume_fdfit.c:1713
#, c-format
msgid "Fitted function: %s\n"
msgstr ""
-#: modules/graph/graph_cd.c:1013 modules/graph/graph_fdfit.c:1383
-#: modules/graph/graph_fit.c:1520 modules/process/fit-shape.c:2087
-#: modules/volume/volume_fdfit.c:1740
+#: modules/graph/graph_cd.c:1013 modules/graph/graph_fdfit.c:1401
+#: modules/graph/graph_fit.c:1538 modules/process/fit-shape.c:2069
+#: modules/volume/volume_fdfit.c:1716
msgid "Results\n"
msgstr ""
-#: modules/graph/graph_cut.c:88
+#: modules/graph/graph_cut.c:87
msgid "Cut graph"
msgstr ""
-#: modules/graph/graph_cut.c:102
+#: modules/graph/graph_cut.c:101
msgid "/_Cut..."
msgstr ""
-#: modules/graph/graph_cut.c:105
+#: modules/graph/graph_cut.c:104
msgid "Extract part of graph into new one"
msgstr ""
-#: modules/graph/graph_cut.c:146
+#: modules/graph/graph_cut.c:145
msgid "Cut Graph"
msgstr ""
-#: modules/graph/graph_cut.c:180
+#: modules/graph/graph_cut.c:173
msgid "Cut _all curves"
msgstr ""
@@ -6748,97 +6926,97 @@ msgstr ""
msgid "Export to PNG"
msgstr ""
-#: modules/graph/graph_export_vector.c:35
+#: modules/graph/graph_export_vector.c:36
msgid "Exports graphs to PostScript"
msgstr ""
-#: modules/graph/graph_export_vector.c:49
+#: modules/graph/graph_export_vector.c:50
msgid "/Export _PostScript"
msgstr ""
-#: modules/graph/graph_export_vector.c:52
+#: modules/graph/graph_export_vector.c:53
msgid "Export graph to PostScript"
msgstr ""
-#: modules/graph/graph_export_vector.c:65
+#: modules/graph/graph_export_vector.c:66
msgid "Export to PostScript"
msgstr ""
-#: modules/graph/graph_fdfit.c:168
+#: modules/graph/graph_fdfit.c:169
msgid "Fit force-distance data"
msgstr ""
-#: modules/graph/graph_fdfit.c:182
+#: modules/graph/graph_fdfit.c:183
msgid "/_Fit FD Curve..."
msgstr ""
-#: modules/graph/graph_fdfit.c:185
+#: modules/graph/graph_fdfit.c:186
msgid "Fit a force-distance curve"
msgstr ""
-#: modules/graph/graph_fdfit.c:248 modules/volume/volume_fdfit.c:296
+#: modules/graph/graph_fdfit.c:251 modules/volume/volume_fdfit.c:296
msgid "Fit FD Curve"
msgstr ""
-#: modules/graph/graph_fdfit.c:255 modules/graph/graph_fit.c:274
-#: modules/process/fit-shape.c:397 modules/process/measure_lattice.c:257
-#: modules/volume/volume_fdfit.c:303
+#: modules/graph/graph_fdfit.c:258 modules/graph/graph_fit.c:277
+#: modules/process/correct_affine.c:347 modules/process/fit-shape.c:398
+#: modules/process/measure_lattice.c:247 modules/volume/volume_fdfit.c:303
msgid "verb|_Estimate"
msgstr ""
-#: modules/graph/graph_fdfit.c:257 modules/graph/graph_fit.c:276
-#: modules/volume/volume_fdfit.c:305
+#: modules/graph/graph_fdfit.c:260 modules/graph/graph_fit.c:279
+#: modules/process/psf.c:239 modules/volume/volume_fdfit.c:305
msgid "_Plot Inits"
msgstr ""
-#: modules/graph/graph_fdfit.c:359 modules/graph/graph_fit.c:373
-#: modules/process/fit-shape.c:790 modules/volume/volume_fdfit.c:444
+#: modules/graph/graph_fdfit.c:366 modules/graph/graph_fit.c:380
+#: modules/process/fit-shape.c:802 modules/volume/volume_fdfit.c:420
msgid "Fix"
msgstr ""
-#: modules/graph/graph_fdfit.c:365 modules/graph/graph_fit.c:379
-#: modules/volume/volume_fdfit.c:450
+#: modules/graph/graph_fdfit.c:372 modules/graph/graph_fit.c:386
+#: modules/volume/volume_fdfit.c:426
msgid "Initial"
msgstr ""
-#: modules/graph/graph_fdfit.c:376 modules/graph/graph_fit.c:394
-#: modules/volume/volume_fdfit.c:461
+#: modules/graph/graph_fdfit.c:383 modules/graph/graph_fit.c:401
+#: modules/volume/volume_fdfit.c:437
msgid "χ<sup>2</sup> result:"
msgstr ""
-#: modules/graph/graph_fdfit.c:392 modules/graph/graph_fit.c:410
-#: modules/process/fit-shape.c:469 modules/process/fit-shape.c:2134
-#: modules/volume/volume_fdfit.c:477
+#: modules/graph/graph_fdfit.c:399 modules/graph/graph_fit.c:417
+#: modules/process/fit-shape.c:470 modules/process/fit-shape.c:2116
+#: modules/volume/volume_fdfit.c:453
msgid "Correlation Matrix"
msgstr ""
-#: modules/graph/graph_fdfit.c:447 modules/graph/graph_fit.c:485
-#: modules/process/wpour_mark.c:410 modules/volume/volume_fdfit.c:532
+#: modules/graph/graph_fdfit.c:454 modules/graph/graph_fit.c:492
+#: modules/process/wpour_mark.c:410 modules/volume/volume_fdfit.c:508
msgid "Instant:"
msgstr ""
-#: modules/graph/graph_fdfit.c:450 modules/graph/graph_fit.c:488
+#: modules/graph/graph_fdfit.c:457 modules/graph/graph_fit.c:495
msgid "esti_mate"
msgstr ""
-#: modules/graph/graph_fdfit.c:457 modules/graph/graph_fit.c:495
-#: modules/volume/volume_fdfit.c:542
+#: modules/graph/graph_fdfit.c:464 modules/graph/graph_fit.c:502
+#: modules/volume/volume_fdfit.c:518
msgid "p_lot"
msgstr ""
-#: modules/graph/graph_fdfit.c:708 modules/graph/graph_fit.c:762
-#: modules/volume/volume_fdfit.c:906
+#: modules/graph/graph_fdfit.c:724 modules/graph/graph_fit.c:778
+#: modules/volume/volume_fdfit.c:882
msgid "Estimate"
msgstr ""
-#: modules/graph/graph_fdfit.c:1410 modules/graph/graph_fit.c:1547
-#: modules/volume/volume_fdfit.c:1768
+#: modules/graph/graph_fdfit.c:1428 modules/graph/graph_fit.c:1565
+#: modules/volume/volume_fdfit.c:1744
#, c-format
msgid "Residual sum: %g\n"
msgstr ""
-#: modules/graph/graph_fdfit.c:1413 modules/graph/graph_fit.c:1550
-#: modules/volume/volume_fdfit.c:1771
+#: modules/graph/graph_fdfit.c:1431 modules/graph/graph_fit.c:1568
+#: modules/volume/volume_fdfit.c:1747
msgid "Correlation matrix\n"
msgstr ""
@@ -6854,27 +7032,27 @@ msgstr ""
msgid "Remove noise from graph curves"
msgstr ""
-#: modules/graph/graph_fit.c:181
+#: modules/graph/graph_fit.c:182
msgid "Fit graph with function"
msgstr ""
-#: modules/graph/graph_fit.c:195
+#: modules/graph/graph_fit.c:196
msgid "/_Fit Function..."
msgstr ""
-#: modules/graph/graph_fit.c:198
+#: modules/graph/graph_fit.c:199
msgid "Fit a function on graph data"
msgstr ""
-#: modules/graph/graph_fit.c:386
+#: modules/graph/graph_fit.c:393
msgid "Copy all fitted values to estimates"
msgstr ""
-#: modules/graph/graph_fit.c:460
+#: modules/graph/graph_fit.c:467
msgid "Plot full range"
msgstr ""
-#: modules/graph/graph_fit.c:470
+#: modules/graph/graph_fit.c:477
msgid "Create a difference graph"
msgstr ""
@@ -6958,74 +7136,157 @@ msgstr ""
msgid "Find graph curve peaks"
msgstr ""
-#: modules/graph/graph_peaks.c:157
+#: modules/graph/graph_peaks.c:155
msgid "Prominence"
msgstr ""
-#: modules/graph/graph_peaks.c:161
+#: modules/graph/graph_peaks.c:159
msgid "Zero"
msgstr ""
-#: modules/graph/graph_peaks.c:162
+#: modules/graph/graph_peaks.c:160
msgid "Bilateral minimum"
msgstr ""
-#: modules/graph/graph_peaks.c:178
+#: modules/graph/graph_peaks.c:176
msgid "Graph Peaks"
msgstr ""
-#: modules/graph/graph_peaks.c:212
+#: modules/graph/graph_peaks.c:209
msgid "_Background type:"
msgstr ""
-#: modules/graph/graph_peaks.c:227
+#: modules/graph/graph_peaks.c:219
msgid "Order peaks _by:"
msgstr ""
-#: modules/graph/graph_peaks.c:242
+#: modules/graph/graph_peaks.c:225
msgid "Number of _peaks:"
msgstr ""
-#: modules/graph/graph_peaks.c:263 modules/process/curvature.c:773
-#: modules/process/grain_stat.c:360 modules/process/measure_lattice.c:396
-#: modules/process/polylevel.c:607 modules/tools/distance.c:259
-#: modules/tools/roughness.c:818 modules/tools/stats.c:450
+#: modules/graph/graph_peaks.c:245 modules/graph/graph_stats.c:367
+#: modules/process/curvature.c:770 modules/process/grain_stat.c:360
+#: modules/process/measure_lattice.c:390 modules/process/polylevel.c:610
+#: modules/tools/distance.c:259 modules/tools/roughness.c:819
+#: modules/tools/stats.c:447
msgid "Save table to a file"
msgstr ""
-#: modules/graph/graph_peaks.c:267 modules/process/curvature.c:778
-#: modules/process/grain_stat.c:365 modules/process/measure_lattice.c:400
-#: modules/process/polylevel.c:617 modules/tools/distance.c:264
-#: modules/tools/roughness.c:823 modules/tools/stats.c:455
+#: modules/graph/graph_peaks.c:249 modules/graph/graph_stats.c:371
+#: modules/process/curvature.c:775 modules/process/grain_stat.c:365
+#: modules/process/measure_lattice.c:394 modules/process/polylevel.c:620
+#: modules/tools/distance.c:264 modules/tools/roughness.c:824
+#: modules/tools/stats.c:452
msgid "Copy table to clipboard"
msgstr ""
-#: modules/graph/graph_peaks.c:654
+#: modules/graph/graph_peaks.c:618
msgid "Save Peak Parameters"
msgstr ""
-#: modules/layer/axis.c:143
-msgid "Layer allowing selection of horizontal or vertical lines."
+#: modules/graph/graph_stats.c:148 modules/graph/graph_stats.c:161
+#: modules/tools/stats.c:205
+msgid "Average value:"
msgstr ""
-#: modules/layer/ellipse.c:143
-msgid "Layer allowing selection of elliptic areas."
+#: modules/graph/graph_stats.c:149 modules/tools/stats.c:206
+msgid "Median:"
msgstr ""
-#: modules/layer/lattice.c:126
-msgid "Layer allowing selection of a two-dimensional lattice."
+#: modules/graph/graph_stats.c:150
+msgid "Ra:"
msgstr ""
-#: modules/layer/line.c:177
-msgid "Layer allowing selection of arbitrary straight lines."
+#: modules/graph/graph_stats.c:151
+msgid "Rms (Rq):"
msgstr ""
-#: modules/layer/path.c:171
-msgid "Layer allowing selection of a single long curve."
+#: modules/graph/graph_stats.c:152 modules/tools/stats.c:210
+msgid "Skew:"
msgstr ""
-#: modules/layer/point.c:169
-msgid ""
+#: modules/graph/graph_stats.c:153 modules/tools/stats.c:211
+msgid "Kurtosis:"
+msgstr ""
+
+#: modules/graph/graph_stats.c:158
+msgid "Projected length:"
+msgstr ""
+
+#: modules/graph/graph_stats.c:159
+msgid "Developed length:"
+msgstr ""
+
+#: modules/graph/graph_stats.c:160 modules/tools/stats.c:214
+msgid "Variation:"
+msgstr ""
+
+#: modules/graph/graph_stats.c:162
+msgid "Area under curve:"
+msgstr ""
+
+#: modules/graph/graph_stats.c:163
+msgid "Positive area:"
+msgstr ""
+
+#: modules/graph/graph_stats.c:164
+msgid "Negative area:"
+msgstr ""
+
+#: modules/graph/graph_stats.c:165
+msgid "Root mean square:"
+msgstr ""
+
+#: modules/graph/graph_stats.c:171
+msgid "Calculates simple graph curve statistics."
+msgstr ""
+
+#: modules/graph/graph_stats.c:185
+msgid "/_Statistics..."
+msgstr ""
+
+#: modules/graph/graph_stats.c:188
+msgid "Calculate graph curve statistics"
+msgstr ""
+
+#: modules/graph/graph_stats.c:241
+msgid "Graph Statistics"
+msgstr ""
+
+#: modules/graph/graph_stats.c:320 modules/graph/graph_stats.c:807
+msgid "Simple Parameters"
+msgstr ""
+
+#: modules/graph/graph_stats.c:342 modules/graph/graph_stats.c:826
+msgid "Integrals"
+msgstr ""
+
+#: modules/graph/graph_stats.c:686
+msgid "Save Curve Statistics"
+msgstr ""
+
+#: modules/layer/axis.c:143
+msgid "Layer allowing selection of horizontal or vertical lines."
+msgstr ""
+
+#: modules/layer/ellipse.c:143
+msgid "Layer allowing selection of elliptic areas."
+msgstr ""
+
+#: modules/layer/lattice.c:126
+msgid "Layer allowing selection of a two-dimensional lattice."
+msgstr ""
+
+#: modules/layer/line.c:177
+msgid "Layer allowing selection of arbitrary straight lines."
+msgstr ""
+
+#: modules/layer/path.c:171
+msgid "Layer allowing selection of a single long curve."
+msgstr ""
+
+#: modules/layer/point.c:169
+msgid ""
"Layer allowing selection of several points, displayed as crosses or "
"invisible."
msgstr ""
@@ -7136,25 +7397,25 @@ msgstr ""
msgid "Angle Distribution"
msgstr ""
-#: modules/process/angle_dist.c:188 modules/process/slope_dist.c:373
+#: modules/process/angle_dist.c:188 modules/process/slope_dist.c:365
msgid "Output _size:"
msgstr ""
-#: modules/process/angle_dist.c:193 modules/process/grain_wshed.c:206
+#: modules/process/angle_dist.c:193 modules/process/grain_wshed.c:207
msgid "_Number of steps:"
msgstr ""
-#: modules/process/angle_dist.c:198 modules/process/slope_dist.c:380
+#: modules/process/angle_dist.c:198 modules/process/slope_dist.c:372
msgid "_Logarithmic value scale"
msgstr ""
#: modules/process/angle_dist.c:204 modules/process/entropy.c:231
-#: modules/process/slope_dist.c:390
+#: modules/process/slope_dist.c:382
msgid "Use local plane _fitting"
msgstr ""
#: modules/process/angle_dist.c:213 modules/process/entropy.c:242
-#: modules/process/slope_dist.c:401
+#: modules/process/slope_dist.c:393
msgid "_Plane size:"
msgstr ""
@@ -7170,7 +7431,8 @@ msgstr ""
msgid "Arithmetic operations on data"
msgstr ""
-#: modules/process/arithmetic.c:202 modules/process/superresolution.c:349
+#: modules/process/arithmetic.c:202 modules/process/stitch.c:234
+#: modules/process/superresolution.c:348
msgid "Calculated"
msgstr ""
@@ -7186,7 +7448,7 @@ msgstr ""
msgid "Operands"
msgstr ""
-#: modules/process/arithmetic.c:300 modules/process/dimensions.h:483
+#: modules/process/arithmetic.c:300 modules/process/dimensions.h:465
msgid "Units"
msgstr ""
@@ -7207,15 +7469,15 @@ msgstr ""
msgid "Expression contains unknown identifiers"
msgstr ""
-#: modules/process/arithmetic.c:569 modules/process/superresolution.c:300
+#: modules/process/arithmetic.c:569 modules/process/superresolution.c:299
msgid "Pixel dimensions differ"
msgstr ""
-#: modules/process/arithmetic.c:571 modules/process/superresolution.c:302
+#: modules/process/arithmetic.c:571 modules/process/superresolution.c:301
msgid "Lateral dimensions are different physical quantities"
msgstr ""
-#: modules/process/arithmetic.c:574 modules/process/superresolution.c:305
+#: modules/process/arithmetic.c:574 modules/process/superresolution.c:304
msgid "Physical dimensions differ"
msgstr ""
@@ -7318,7 +7580,7 @@ msgid "Generates surfaces by ballistic deposition."
msgstr ""
#: modules/process/bdep_synth.c:164
-msgid "/S_ynthetic/_Ballistic..."
+msgid "/S_ynthetic/_Deposition/_Ballistic..."
msgstr ""
#: modules/process/bdep_synth.c:168
@@ -7327,20 +7589,23 @@ msgstr ""
#: modules/process/bdep_synth.c:239 modules/process/bdep_synth.c:596
#: modules/process/calcoefs_simple.c:636 modules/process/col_synth.c:282
-#: modules/process/col_synth.c:733 modules/process/crosscor.c:819
-#: modules/process/crosscor.c:882 modules/process/deposit_synth.c:268
-#: modules/process/deposit_synth.c:859 modules/process/diff_synth.c:304
-#: modules/process/diff_synth.c:705 modules/process/domain_synth.c:255
-#: modules/process/domain_synth.c:745 modules/process/grain_wshed.c:429
+#: modules/process/col_synth.c:734 modules/process/crosscor.c:792
+#: modules/process/crosscor.c:855 modules/process/deposit_synth.c:268
+#: modules/process/deposit_synth.c:858 modules/process/diff_synth.c:304
+#: modules/process/diff_synth.c:704 modules/process/domain_synth.c:255
+#: modules/process/domain_synth.c:745 modules/process/fibre_synth.c:357
+#: modules/process/fibre_synth.c:872 modules/process/grain_wshed.c:433
#: modules/process/lat_synth.c:491 modules/process/mark_disconn.c:148
-#: modules/process/mark_disconn.c:373 modules/process/maskcor.c:330
-#: modules/process/mcrop.c:315 modules/process/merge.c:1072
-#: modules/process/nanoindent_adjust.c:323 modules/process/neural.c:1272
-#: modules/process/pid.c:338 modules/process/superresolution.c:416
-#: modules/process/superresolution.c:505 modules/process/tip_blind.c:781
-#: modules/process/tipops.c:320 modules/process/xydenoise.c:213
-#: modules/volume/volume_kmeans.c:403 modules/volume/volume_kmedians.c:365
-#: modules/xyz/xyz_raster.c:1028 modules/xyz/xyz_raster.c:1044
+#: modules/process/mark_disconn.c:361 modules/process/maskcor.c:334
+#: modules/process/mcrop.c:314 modules/process/merge.c:1072
+#: modules/process/nanoindent_adjust.c:324 modules/process/neural.c:1279
+#: modules/process/pid.c:339 modules/process/sphere-revolve.c:269
+#: modules/process/superresolution.c:415 modules/process/superresolution.c:504
+#: modules/process/tip_blind.c:778 modules/process/tipops.c:320
+#: modules/process/wave_synth.c:305 modules/process/wave_synth.c:747
+#: modules/process/xydenoise.c:214 modules/volume/volume_kmeans.c:397
+#: modules/volume/volume_kmedians.c:363 modules/xyz/xyz_raster.c:997
+#: modules/xyz/xyz_raster.c:1013
msgid "Initializing..."
msgstr ""
@@ -7349,10 +7614,11 @@ msgstr ""
#: modules/process/deposit_synth.c:531 modules/process/deposit_synth.c:544
#: modules/process/diff_synth.c:342 modules/process/domain_synth.c:319
#: modules/process/domain_synth.c:327 modules/process/fbm_synth.c:278
-#: modules/process/fft_synth.c:314 modules/process/lat_synth.c:529
-#: modules/process/lno_synth.c:407 modules/process/noise_synth.c:311
-#: modules/process/obj_synth.c:407 modules/process/pat_synth.c:357
-#: modules/process/wave_synth.c:323
+#: modules/process/fft_synth.c:314 modules/process/fibre_synth.c:394
+#: modules/process/lat_synth.c:529 modules/process/lno_synth.c:405
+#: modules/process/noise_synth.c:309 modules/process/obj_synth.c:404
+#: modules/process/pat_synth.c:357 modules/process/phase_synth.c:518
+#: modules/process/wave_synth.c:342
msgid "Generated"
msgstr ""
@@ -7371,50 +7637,56 @@ msgid "Progressive preview"
msgstr ""
#: modules/process/bdep_synth.c:407 modules/process/col_synth.c:458
-#: modules/process/deposit_synth.c:412 modules/process/diff_synth.c:477
+#: modules/process/deposit_synth.c:413 modules/process/diff_synth.c:477
#: modules/process/domain_synth.c:430 modules/process/fbm_synth.c:360
-#: modules/process/fft_synth.c:398 modules/process/lat_synth.c:626
-#: modules/process/lno_synth.c:490 modules/process/noise_synth.c:394
-#: modules/process/obj_synth.c:498 modules/process/pat_synth.c:442
-#: modules/process/wave_synth.c:407
+#: modules/process/fft_synth.c:398 modules/process/fibre_synth.c:479
+#: modules/process/lat_synth.c:626 modules/process/lno_synth.c:488
+#: modules/process/mfm_current.c:383 modules/process/mfm_parallel.c:384
+#: modules/process/noise_synth.c:392 modules/process/obj_synth.c:495
+#: modules/process/pat_synth.c:442 modules/process/phase_synth.c:263
+#: modules/process/wave_synth.c:426
msgid "Dimensions"
msgstr ""
#: modules/process/bdep_synth.c:416 modules/process/col_synth.c:467
-#: modules/process/deposit_synth.c:422 modules/process/diff_synth.c:486
+#: modules/process/deposit_synth.c:425 modules/process/diff_synth.c:486
#: modules/process/domain_synth.c:438 modules/process/fbm_synth.c:371
-#: modules/process/fft_synth.c:409 modules/process/lno_synth.c:501
-#: modules/process/noise_synth.c:405 modules/process/obj_synth.c:509
-#: modules/process/pat_synth.c:454 modules/process/wave_synth.c:418
+#: modules/process/fft_synth.c:409 modules/process/fibre_synth.c:490
+#: modules/process/lno_synth.c:499 modules/process/mfm_current.c:412
+#: modules/process/mfm_parallel.c:411 modules/process/noise_synth.c:403
+#: modules/process/obj_synth.c:506 modules/process/pat_synth.c:454
+#: modules/process/phase_synth.c:274 modules/process/wave_synth.c:437
msgid "Generator"
msgstr ""
#: modules/process/bdep_synth.c:422 modules/process/col_synth.c:473
-#: modules/process/diff_synth.c:492 modules/process/lno_synth.c:1041
-#: modules/process/obj_synth.c:520
+#: modules/process/deposit_synth.c:455 modules/process/diff_synth.c:492
+#: modules/process/fibre_synth.c:502 modules/process/lno_synth.c:1041
+#: modules/process/obj_synth.c:518
msgid "Co_verage:"
msgstr ""
#: modules/process/bdep_synth.c:434 modules/process/diff_synth.c:512
-#: modules/process/domain_synth.c:514 modules/process/fbm_synth.c:412
-#: modules/process/fft_synth.c:418 modules/process/lat_synth.c:758
-#: modules/process/lno_synth.c:537 modules/process/noise_synth.c:437
-#: modules/process/obj_synth.c:579 modules/process/wave_synth.c:453
-msgid "_Like Current Channel"
+#: modules/process/domain_synth.c:514 modules/process/fbm_synth.c:411
+#: modules/process/fft_synth.c:418 modules/process/fibre_synth.c:544
+#: modules/process/lat_synth.c:758 modules/process/lno_synth.c:535
+#: modules/process/noise_synth.c:435 modules/process/obj_synth.c:577
+#: modules/process/phase_synth.c:302 modules/process/wave_synth.c:472
+msgid "_Like Current Image"
msgstr ""
-#: modules/process/bdep_synth.c:453 modules/process/col_synth.c:541
-#: modules/process/diff_synth.c:562
+#: modules/process/bdep_synth.c:453 modules/process/col_synth.c:542
+#: modules/process/diff_synth.c:561
msgid "Evolution"
msgstr ""
-#: modules/process/bdep_synth.c:456 modules/process/col_synth.c:544
-#: modules/process/diff_synth.c:565
+#: modules/process/bdep_synth.c:456 modules/process/col_synth.c:545
+#: modules/process/diff_synth.c:564
msgid "Plot graphs:"
msgstr ""
-#: modules/process/bdep_synth.c:654 modules/process/col_synth.c:840
-#: modules/process/diff_synth.c:782
+#: modules/process/bdep_synth.c:654 modules/process/col_synth.c:841
+#: modules/process/diff_synth.c:781
msgid "Depositing particles..."
msgstr ""
@@ -7449,8 +7721,8 @@ msgstr ""
msgid "Calibration name:"
msgstr ""
-#: modules/process/calcoefs_load.c:254 modules/volume/volume_extract.c:433
-#: modules/volume/volume_extract.c:514
+#: modules/process/calcoefs_load.c:254 modules/volume/volume_extract.c:421
+#: modules/volume/volume_extract.c:501
msgid "No data loaded"
msgstr ""
@@ -7474,7 +7746,7 @@ msgstr ""
msgid "Load calibration data"
msgstr ""
-#: modules/process/calcoefs_load.c:364 modules/volume/volume_extract.c:1073
+#: modules/process/calcoefs_load.c:364 modules/volume/volume_extract.c:1059
#, c-format
msgid "Error loading file '%s'"
msgstr ""
@@ -7568,7 +7840,7 @@ msgstr ""
msgid "Simple Error Map"
msgstr ""
-#: modules/process/calcoefs_simple.c:343 modules/process/calcoefs_stage.c:146
+#: modules/process/calcoefs_simple.c:343 modules/process/calcoefs_stage.c:142
#: modules/process/superresolution.c:156
msgid "Operands:"
msgstr ""
@@ -7582,14 +7854,14 @@ msgid "Detail"
msgstr ""
#: modules/process/calcoefs_simple.c:371 modules/process/calcoefs_view.c:491
-#: modules/process/calibrate.c:496 modules/process/crosscor.c:289
-#: modules/volume/volume_calibrate.c:478
+#: modules/process/calibrate.c:481 modules/process/crosscor.c:276
+#: modules/volume/volume_calibrate.c:460
msgid "_X offset:"
msgstr ""
#: modules/process/calcoefs_simple.c:398 modules/process/calcoefs_view.c:517
-#: modules/process/calibrate.c:509 modules/process/crosscor.c:300
-#: modules/volume/volume_calibrate.c:491
+#: modules/process/calibrate.c:488 modules/process/crosscor.c:284
+#: modules/volume/volume_calibrate.c:467
msgid "_Y offset:"
msgstr ""
@@ -7602,7 +7874,7 @@ msgid "Y p_eriod:"
msgstr ""
#: modules/process/calcoefs_simple.c:438 modules/process/calcoefs_view.c:529
-#: modules/volume/volume_calibrate.c:505
+#: modules/volume/volume_calibrate.c:474
msgid "_Z offset:"
msgstr ""
@@ -7633,25 +7905,25 @@ msgstr[1] ""
msgid "Search canceled"
msgstr ""
-#: modules/process/calcoefs_simple.c:638 modules/process/crosscor.c:862
-#: modules/process/maskcor.c:332 modules/process/mcrop.c:317
+#: modules/process/calcoefs_simple.c:638 modules/process/crosscor.c:835
+#: modules/process/maskcor.c:336 modules/process/mcrop.c:316
#: modules/process/merge.c:1074
msgid "Correlating..."
msgstr ""
-#: modules/process/calcoefs_stage.c:76
+#: modules/process/calcoefs_stage.c:72
msgid "Digital AFM data recalibration"
msgstr ""
-#: modules/process/calcoefs_stage.c:90
+#: modules/process/calcoefs_stage.c:86
msgid "/Cali_bration/_3D Calibration/_Get From Stage map..."
msgstr ""
-#: modules/process/calcoefs_stage.c:94
+#: modules/process/calcoefs_stage.c:90
msgid "Stage error mapping"
msgstr ""
-#: modules/process/calcoefs_stage.c:131
+#: modules/process/calcoefs_stage.c:127
msgid "Stage Error Map"
msgstr ""
@@ -7707,14 +7979,16 @@ msgstr ""
msgid "Crop to actual data"
msgstr ""
-#: modules/process/calcoefs_view.c:567 modules/process/coerce.c:369
-#: modules/process/deposit_synth.c:641 modules/process/edge.c:705
-#: modules/process/fft_filter_1d.c:299 modules/process/grain_edge.c:290
-#: modules/process/grain_filter.c:347 modules/process/grain_mark.c:372
-#: modules/process/mark_with.c:318 modules/process/polydistort.c:316
-#: modules/process/scars.c:386 modules/process/slope_dist.c:407
-#: modules/process/synth.h:513 modules/volume/volume_extract.c:424
-#: modules/volume/volume_extract.c:505 modules/volume/volume_linestat.c:422
+#: modules/process/calcoefs_view.c:567 modules/process/coerce.c:368
+#: modules/process/deposit_synth.c:642 modules/process/edge.c:705
+#: modules/process/fft_filter_1d.c:301 modules/process/grain_edge.c:277
+#: modules/process/grain_filter.c:346 modules/process/grain_mark.c:357
+#: modules/process/mark_with.c:322 modules/process/mfm_field.c:420
+#: modules/process/mfm_shift.c:216 modules/process/polydistort.c:319
+#: modules/process/psf.c:309 modules/process/scars.c:421
+#: modules/process/slope_dist.c:400 modules/process/synth.h:542
+#: modules/volume/volume_extract.c:411 modules/volume/volume_extract.c:491
+#: modules/volume/volume_linestat.c:427
msgid "I_nstant updates"
msgstr ""
@@ -7755,27 +8029,27 @@ msgstr ""
msgid "Building mesh..."
msgstr ""
-#: modules/process/calcoefs_view.c:1120 modules/tools/profile.c:1818
+#: modules/process/calcoefs_view.c:1120 modules/tools/profile.c:1867
msgid "X correction"
msgstr ""
-#: modules/process/calcoefs_view.c:1121 modules/tools/profile.c:1819
+#: modules/process/calcoefs_view.c:1121 modules/tools/profile.c:1868
msgid "Y correction"
msgstr ""
-#: modules/process/calcoefs_view.c:1122 modules/tools/profile.c:1820
+#: modules/process/calcoefs_view.c:1122 modules/tools/profile.c:1869
msgid "Z correction"
msgstr ""
-#: modules/process/calcoefs_view.c:1123 modules/tools/profile.c:1821
+#: modules/process/calcoefs_view.c:1123 modules/tools/profile.c:1870
msgid "X uncertainty"
msgstr ""
-#: modules/process/calcoefs_view.c:1124 modules/tools/profile.c:1822
+#: modules/process/calcoefs_view.c:1124 modules/tools/profile.c:1871
msgid "Y uncertainty"
msgstr ""
-#: modules/process/calcoefs_view.c:1125 modules/tools/profile.c:1823
+#: modules/process/calcoefs_view.c:1125 modules/tools/profile.c:1872
msgid "Z uncertainty"
msgstr ""
@@ -7803,77 +8077,77 @@ msgstr ""
msgid "Delaunay"
msgstr ""
-#: modules/process/calibrate.c:180
+#: modules/process/calibrate.c:172
msgid "Recalibrates scan lateral dimensions or value range."
msgstr ""
-#: modules/process/calibrate.c:194
+#: modules/process/calibrate.c:186
msgid "/_Basic Operations/_Dimensions and Units..."
msgstr ""
-#: modules/process/calibrate.c:198 modules/volume/volume_calibrate.c:193
+#: modules/process/calibrate.c:190 modules/volume/volume_calibrate.c:193
msgid "Change physical dimensions, units or value scale"
msgstr ""
-#: modules/process/calibrate.c:357 modules/volume/volume_calibrate.c:355
+#: modules/process/calibrate.c:349 modules/volume/volume_calibrate.c:355
msgid "Recalibrated Data"
msgstr ""
-#: modules/process/calibrate.c:390
+#: modules/process/calibrate.c:382
msgid "Dimensions and Units"
msgstr ""
-#: modules/process/calibrate.c:411 modules/volume/volume_calibrate.c:389
+#: modules/process/calibrate.c:405 modules/volume/volume_calibrate.c:391
msgid "New Real Dimensions"
msgstr ""
-#: modules/process/calibrate.c:417
+#: modules/process/calibrate.c:415
msgid "_Match pixel size:"
msgstr ""
-#: modules/process/calibrate.c:444 modules/volume/volume_calibrate.c:394
+#: modules/process/calibrate.c:447 modules/volume/volume_calibrate.c:397
msgid "_X range:"
msgstr ""
-#: modules/process/calibrate.c:473 modules/volume/volume_calibrate.c:421
+#: modules/process/calibrate.c:467 modules/volume/volume_calibrate.c:417
msgid "_Y range:"
msgstr ""
-#: modules/process/calibrate.c:489
+#: modules/process/calibrate.c:472
msgid "_Square samples"
msgstr ""
-#: modules/process/calibrate.c:524 modules/volume/volume_calibrate.c:521
+#: modules/process/calibrate.c:496 modules/volume/volume_calibrate.c:480
msgid "Value Range"
msgstr ""
-#: modules/process/calibrate.c:529 modules/volume/volume_calibrate.c:448
+#: modules/process/calibrate.c:502 modules/volume/volume_calibrate.c:437
msgid "_Z range:"
msgstr ""
-#: modules/process/calibrate.c:558
+#: modules/process/calibrate.c:524
msgid "Z shi_ft:"
msgstr ""
-#: modules/process/calibrate.c:573 modules/volume/volume_calibrate.c:570
+#: modules/process/calibrate.c:533 modules/volume/volume_calibrate.c:515
msgid "Calibration Coefficients"
msgstr ""
-#: modules/process/calibrate.c:580 modules/volume/volume_calibrate.c:577
+#: modules/process/calibrate.c:538 modules/volume/volume_calibrate.c:520
msgid "_X calibration factor:"
msgstr ""
-#: modules/process/calibrate.c:590 modules/volume/volume_calibrate.c:585
+#: modules/process/calibrate.c:545 modules/volume/volume_calibrate.c:527
msgid "_Y calibration factor:"
msgstr ""
-#: modules/process/calibrate.c:600 modules/volume/volume_calibrate.c:593
+#: modules/process/calibrate.c:552 modules/volume/volume_calibrate.c:534
msgid "_Z calibration factor:"
msgstr ""
-#: modules/process/calibrate.c:613 modules/process/extend.c:293
-#: modules/tools/crop.c:213
-msgid "Create new channel"
+#: modules/process/calibrate.c:567 modules/process/drift.c:389
+#: modules/process/extend.c:293 modules/tools/crop.c:213
+msgid "Create new image"
msgstr ""
#: modules/process/coerce.c:159
@@ -7893,13 +8167,13 @@ msgid "Coerced"
msgstr ""
#: modules/process/coerce.c:225 modules/process/coerce.c:326
-#: modules/process/fbm_synth.c:475 modules/process/lno_synth.c:256
-#: modules/process/noise_synth.c:183
+#: modules/process/fbm_synth.c:474 modules/process/lno_synth.c:254
+#: modules/process/noise_synth.c:181
msgid "distribution|Uniform"
msgstr ""
-#: modules/process/coerce.c:226 modules/process/fbm_synth.c:476
-#: modules/process/lno_synth.c:246 modules/process/noise_synth.c:173
+#: modules/process/coerce.c:226 modules/process/fbm_synth.c:475
+#: modules/process/lno_synth.c:244 modules/process/noise_synth.c:171
msgid "distribution|Gaussian"
msgstr ""
@@ -7948,12 +8222,12 @@ msgid "Number of maxima"
msgstr ""
#: modules/process/col_synth.c:173 modules/tools/linestats.c:178
-#: modules/volume/volume_linestat.c:154
+#: modules/volume/volume_linestat.c:156
msgid "Skew"
msgstr ""
#: modules/process/col_synth.c:174 modules/tools/linestats.c:179
-#: modules/tools/roughness.c:386 modules/volume/volume_linestat.c:155
+#: modules/tools/roughness.c:387 modules/volume/volume_linestat.c:157
msgid "Kurtosis"
msgstr ""
@@ -7966,7 +8240,7 @@ msgid "Generates columnar surfaces by a simple growth algorithm."
msgstr ""
#: modules/process/col_synth.c:208
-msgid "/S_ynthetic/_Columnar..."
+msgid "/S_ynthetic/_Deposition/_Columnar..."
msgstr ""
#: modules/process/col_synth.c:212
@@ -7989,7 +8263,7 @@ msgstr ""
msgid "Inclination"
msgstr ""
-#: modules/process/col_synth.c:509 modules/process/crosscor.c:1063
+#: modules/process/col_synth.c:509 modules/process/crosscor.c:1036
msgid "Direction"
msgstr ""
@@ -7997,15 +8271,15 @@ msgstr ""
msgid "Relaxation type:"
msgstr ""
-#: modules/process/col_synth.c:528
+#: modules/process/col_synth.c:529
msgid "_Melting:"
msgstr ""
-#: modules/process/col_synth.c:612
+#: modules/process/col_synth.c:613
msgid "Weak"
msgstr ""
-#: modules/process/col_synth.c:613
+#: modules/process/col_synth.c:614
msgid "Strong"
msgstr ""
@@ -8037,8 +8311,8 @@ msgstr ""
msgid "Convolution Filter"
msgstr ""
-#: modules/process/convolution_filter.c:269 modules/tools/filter.c:170
-#: modules/tools/filter.c:274
+#: modules/process/convolution_filter.c:269 modules/tools/filter.c:171
+#: modules/tools/filter.c:275
msgid "Filter"
msgstr ""
@@ -8066,107 +8340,115 @@ msgstr ""
msgid "VSym"
msgstr ""
-#: modules/process/correct_affine.c:231
+#: modules/process/correct_affine.c:220
msgid ""
"Corrects affine distortion of images by matching image Bravais lattice to "
"the true one."
msgstr ""
-#: modules/process/correct_affine.c:246
+#: modules/process/correct_affine.c:235
msgid "/_Distortion/_Affine..."
msgstr ""
-#: modules/process/correct_affine.c:250
+#: modules/process/correct_affine.c:239
msgid "Correct affine distortion"
msgstr ""
-#: modules/process/correct_affine.c:298
+#: modules/process/correct_affine.c:309 modules/process/correct_affine.c:634
+msgid "Corrected"
+msgstr ""
+
+#: modules/process/correct_affine.c:343
msgid "Affine Correction"
msgstr ""
-#: modules/process/correct_affine.c:351 modules/process/fft_filter_2d.c:530
+#: modules/process/correct_affine.c:349 modules/process/measure_lattice.c:249
+msgid "_Refine"
+msgstr ""
+
+#: modules/process/correct_affine.c:399 modules/process/fft_filter_2d.c:530
msgid "Preview Options"
msgstr ""
-#: modules/process/correct_affine.c:356 modules/process/fft_filter_2d.c:535
-#: modules/process/measure_lattice.c:321
+#: modules/process/correct_affine.c:404 modules/process/fft_filter_2d.c:535
+#: modules/process/measure_lattice.c:311
msgid "Display:"
msgstr ""
-#: modules/process/correct_affine.c:364 modules/process/measure_lattice.c:329
+#: modules/process/correct_affine.c:412 modules/process/measure_lattice.c:319
#: modules/tools/grainremover.c:109
msgid "_Data"
msgstr ""
-#: modules/process/correct_affine.c:365
+#: modules/process/correct_affine.c:413
msgid "2D _ACF"
msgstr ""
-#: modules/process/correct_affine.c:366 modules/process/drift.c:365
+#: modules/process/correct_affine.c:414 modules/process/drift.c:364
msgid "Correc_ted data"
msgstr ""
-#: modules/process/correct_affine.c:377
+#: modules/process/correct_affine.c:425
msgid "ACF zoom:"
msgstr ""
-#: modules/process/correct_affine.c:394 modules/process/measure_lattice.c:372
+#: modules/process/correct_affine.c:442 modules/process/measure_lattice.c:346
+msgid "Interpolate _horizontal ACF"
+msgstr ""
+
+#: modules/process/correct_affine.c:452 modules/process/measure_lattice.c:372
msgid "Lattice Vectors"
msgstr ""
#. TRANSLATORS: Correct is an adjective here.
-#: modules/process/correct_affine.c:419
+#: modules/process/correct_affine.c:469
msgid "Correct Lattice"
msgstr ""
-#: modules/process/correct_affine.c:423
+#: modules/process/correct_affine.c:473
msgid "_Lattice type:"
msgstr ""
-#: modules/process/correct_affine.c:430
+#: modules/process/correct_affine.c:480
msgid "User defined"
msgstr ""
-#: modules/process/correct_affine.c:445
+#: modules/process/correct_affine.c:495
msgid "_Different lengths"
msgstr ""
-#: modules/process/correct_affine.c:474
+#: modules/process/correct_affine.c:524
msgid "Image for _ACF:"
msgstr ""
-#: modules/process/correct_affine.c:501
+#: modules/process/correct_affine.c:551
msgid "_Scaling:"
msgstr ""
-#: modules/process/correct_affine.c:508
+#: modules/process/correct_affine.c:558
msgid "Exactly as specified"
msgstr ""
-#: modules/process/correct_affine.c:509
+#: modules/process/correct_affine.c:560
msgid "Preserve area"
msgstr ""
-#: modules/process/correct_affine.c:510
+#: modules/process/correct_affine.c:562
msgid "Preserve X scale"
msgstr ""
-#: modules/process/correct_affine.c:561
-msgid "Corrected"
+#: modules/process/correct_affine.c:571 modules/process/drift.c:379
+msgid "_Apply to all compatible images"
msgstr ""
-#: modules/process/correct_affine.c:617 modules/process/measure_lattice.c:489
+#: modules/process/correct_affine.c:693 modules/process/measure_lattice.c:482
msgid "length"
msgstr ""
-#: modules/process/correct_affine.c:624 modules/process/measure_lattice.c:496
+#: modules/process/correct_affine.c:700 modules/process/measure_lattice.c:489
msgid "angle"
msgstr ""
-#: modules/process/correct_affine.c:717
-msgid "Re_fine"
-msgstr ""
-
#: modules/process/crosscor.c:157
msgid "Calculates cross-correlation of two data fields."
msgstr ""
@@ -8191,196 +8473,198 @@ msgstr ""
msgid "Search size"
msgstr ""
-#: modules/process/crosscor.c:272
-msgid "Global offset of 2nd channel"
+#: modules/process/crosscor.c:267
+msgid "_Guess"
msgstr ""
-#: modules/process/crosscor.c:277
-msgid "_Guess"
+#: modules/process/crosscor.c:268
+msgid "Global offset of 2nd channel"
msgstr ""
-#: modules/process/crosscor.c:311
+#: modules/process/crosscor.c:292
msgid "Window size"
msgstr ""
-#: modules/process/crosscor.c:319
+#: modules/process/crosscor.c:300
msgid "W_idth:"
msgstr ""
-#: modules/process/crosscor.c:329
+#: modules/process/crosscor.c:308
msgid "Hei_ght:"
msgstr ""
-#: modules/process/crosscor.c:342 modules/process/fft.c:405
+#: modules/process/crosscor.c:319 modules/process/fft.c:403
#: modules/process/psdf_logphi.c:268
msgid "_Windowing type:"
msgstr ""
-#: modules/process/crosscor.c:350
+#: modules/process/crosscor.c:327
msgid "All"
msgstr ""
-#: modules/process/crosscor.c:351
+#: modules/process/crosscor.c:328
msgid "Absolute"
msgstr ""
-#: modules/process/crosscor.c:352
+#: modules/process/crosscor.c:329
msgid "X Distance"
msgstr ""
-#: modules/process/crosscor.c:353
+#: modules/process/crosscor.c:330
msgid "Y Distance"
msgstr ""
-#: modules/process/crosscor.c:355 modules/process/crosscor.c:1077
+#: modules/process/crosscor.c:332 modules/process/crosscor.c:1050
msgid "Score"
msgstr ""
-#: modules/process/crosscor.c:357 modules/process/fft.c:395
-#: modules/process/fit-shape.c:688 modules/process/maskcor.c:176
+#: modules/process/crosscor.c:334 modules/process/fft.c:393
+#: modules/process/fit-shape.c:699 modules/process/maskcor.c:177
+#: modules/process/mfm_current.c:455 modules/process/mfm_field.c:373
+#: modules/process/mfm_parallel.c:466
msgid "Output _type:"
msgstr ""
-#: modules/process/crosscor.c:363
+#: modules/process/crosscor.c:340
msgid "Add _low score results mask"
msgstr ""
-#: modules/process/crosscor.c:374 modules/process/grain_wshed.c:223
-#: modules/process/maskcor.c:188
+#: modules/process/crosscor.c:351 modules/process/grain_wshed.c:225
+#: modules/process/maskcor.c:191
msgid "T_hreshold:"
msgstr ""
-#: modules/process/crosscor.c:381
+#: modules/process/crosscor.c:359
msgid "Multichannel cross-corelation"
msgstr ""
-#: modules/process/crosscor.c:400
+#: modules/process/crosscor.c:378
msgid "Second _source data:"
msgstr ""
-#: modules/process/crosscor.c:417
+#: modules/process/crosscor.c:394
msgid "Correlate with:"
msgstr ""
-#: modules/process/crosscor.c:424
+#: modules/process/crosscor.c:402
msgid "Postprocess:"
msgstr ""
-#: modules/process/crosscor.c:431
-msgid "Apply Ga_ussian filter of width: "
+#: modules/process/crosscor.c:411
+msgid "Apply Ga_ussian filter of width:"
msgstr ""
-#: modules/process/crosscor.c:451
+#: modules/process/crosscor.c:424
msgid "Extend results to borders"
msgstr ""
-#: modules/process/crosscor.c:461
+#: modules/process/crosscor.c:433
msgid "Create corrected data from 2nd channel"
msgstr ""
-#: modules/process/crosscor.c:860
+#: modules/process/crosscor.c:833
msgid "Correlating first set..."
msgstr ""
-#: modules/process/crosscor.c:892
+#: modules/process/crosscor.c:865
msgid "Correlating second set..."
msgstr ""
-#: modules/process/crosscor.c:999
+#: modules/process/crosscor.c:972
msgid "Corrected 2nd channel"
msgstr ""
-#: modules/process/crosscor.c:1023
+#: modules/process/crosscor.c:996
msgid "X difference"
msgstr ""
-#: modules/process/crosscor.c:1037
+#: modules/process/crosscor.c:1010
msgid "Y difference"
msgstr ""
-#: modules/process/crosscor.c:1050
+#: modules/process/crosscor.c:1023
msgid "Absolute difference"
msgstr ""
-#: modules/process/curvature.c:131
+#: modules/process/curvature.c:130
msgid "Center value"
msgstr ""
-#: modules/process/curvature.c:132
+#: modules/process/curvature.c:131
msgid "Curvature radius 1"
msgstr ""
-#: modules/process/curvature.c:133
+#: modules/process/curvature.c:132
msgid "Curvature radius 2"
msgstr ""
-#: modules/process/curvature.c:134
+#: modules/process/curvature.c:133
msgid "Direction 1"
msgstr ""
-#: modules/process/curvature.c:135
+#: modules/process/curvature.c:134
msgid "Direction 2"
msgstr ""
-#: modules/process/curvature.c:163
+#: modules/process/curvature.c:162
msgid "Calculates overall curvature."
msgstr ""
-#: modules/process/curvature.c:177
+#: modules/process/curvature.c:176
msgid "/_Level/_Curvature..."
msgstr ""
-#: modules/process/curvature.c:181
+#: modules/process/curvature.c:180
msgid "Calculate overall curvature"
msgstr ""
-#: modules/process/curvature.c:211 modules/process/facet-level.c:118
+#: modules/process/curvature.c:210 modules/process/facet-level.c:118
#: modules/process/semsim.c:165
#, c-format
msgid "%s: Lateral dimensions and value must be the same physical quantity."
msgstr ""
-#: modules/process/curvature.c:445
+#: modules/process/curvature.c:447
msgid "Curvature Sections"
msgstr ""
-#: modules/process/curvature.c:653
+#: modules/process/curvature.c:655
msgid "Output Type"
msgstr ""
-#: modules/process/curvature.c:660
+#: modules/process/curvature.c:662
msgid "_Set selection"
msgstr ""
-#: modules/process/curvature.c:670
+#: modules/process/curvature.c:672
msgid "_Plot graph"
msgstr ""
-#: modules/process/curvature.c:685 modules/process/drift.c:337
-#: modules/process/fft_profile.c:310 modules/process/fractal.c:328
-#: modules/process/grain_cross.c:253 modules/process/linematch.c:885
-#: modules/process/slope_dist.c:349 modules/tools/linestats.c:418
-#: modules/tools/profile.c:573 modules/tools/roughness.c:872
-#: modules/tools/sfunctions.c:486 modules/tools/spectro.c:382
-#: modules/volume/volume_slice.c:398
-msgid "Target _graph:"
+#: modules/process/curvature.c:684 modules/process/drift.c:340
+#: modules/process/fft_profile.c:300 modules/process/fractal.c:308
+#: modules/process/grain_cross.c:260 modules/process/linematch.c:855
+#: modules/process/slope_dist.c:347 modules/tools/linestats.c:424
+#: modules/tools/profile.c:559 modules/tools/roughness.c:886
+#: modules/tools/sfunctions.c:488 modules/tools/spectro.c:391
+#: modules/volume/volume_slice.c:408
+msgid "New graph"
msgstr ""
-#: modules/process/curvature.c:691 modules/process/drift.c:343
-#: modules/process/fft_profile.c:316 modules/process/fractal.c:334
-#: modules/process/grain_cross.c:259 modules/process/linematch.c:892
-#: modules/process/slope_dist.c:355 modules/tools/linestats.c:424
-#: modules/tools/profile.c:579 modules/tools/roughness.c:878
-#: modules/tools/sfunctions.c:492 modules/tools/spectro.c:388
-#: modules/volume/volume_slice.c:406
-msgid "New graph"
+#: modules/process/curvature.c:689 modules/process/drift.c:345
+#: modules/process/fft_profile.c:306 modules/process/fractal.c:313
+#: modules/process/grain_cross.c:254 modules/process/linematch.c:860
+#: modules/process/slope_dist.c:352 modules/tools/linestats.c:418
+#: modules/tools/profile.c:563 modules/tools/roughness.c:890
+#: modules/tools/sfunctions.c:492 modules/tools/spectro.c:385
+#: modules/volume/volume_slice.c:400
+msgid "Target _graph:"
msgstr ""
-#: modules/process/curvature.c:951
+#: modules/process/curvature.c:949
msgid "Axes are outside the image."
msgstr ""
-#: modules/process/curvature.c:1018
+#: modules/process/curvature.c:1016
msgid "Save Curvature"
msgstr ""
@@ -8404,8 +8688,8 @@ msgstr ""
msgid "2D CWT"
msgstr ""
-#: modules/process/cwt.c:158 modules/process/dwt.c:185
-#: modules/process/dwtanisotropy.c:209
+#: modules/process/cwt.c:159 modules/process/dwt.c:185
+#: modules/process/dwtanisotropy.c:212
msgid "_Wavelet type:"
msgstr ""
@@ -8414,87 +8698,83 @@ msgid "Generates particles using simple dynamical model"
msgstr ""
#: modules/process/deposit_synth.c:184
-msgid "/S_ynthetic/_Particles..."
+msgid "/S_ynthetic/_Deposition/_Particles..."
msgstr ""
#: modules/process/deposit_synth.c:188
msgid "Generate particles using dynamical model"
msgstr ""
-#: modules/process/deposit_synth.c:288 modules/process/deposit_synth.c:867
+#: modules/process/deposit_synth.c:288 modules/process/deposit_synth.c:866
#, c-format
msgid ""
"Not all the particles could be deposited (%u),\n"
"try more revise steps."
msgstr ""
-#: modules/process/deposit_synth.c:347
+#: modules/process/deposit_synth.c:348
msgid "Particle Generation"
msgstr ""
-#: modules/process/deposit_synth.c:427
+#: modules/process/deposit_synth.c:431
msgid "Particle r_adius:"
msgstr ""
-#: modules/process/deposit_synth.c:438
+#: modules/process/deposit_synth.c:443
msgid "Distribution _width:"
msgstr ""
-#: modules/process/deposit_synth.c:449
-msgid "Surface _coverage:"
-msgstr ""
-
-#: modules/process/deposit_synth.c:458
+#: modules/process/deposit_synth.c:462
msgid "_Relax steps:"
msgstr ""
-#: modules/process/deposit_synth.c:659 modules/process/synth.h:548
+#: modules/process/deposit_synth.c:660 modules/process/synth.h:577
msgid "R_andom seed:"
msgstr ""
-#: modules/process/deposit_synth.c:665 modules/process/synth.h:554
+#: modules/process/deposit_synth.c:666 modules/process/synth.h:583
msgid "seed|_New"
msgstr ""
-#: modules/process/deposit_synth.c:676
+#: modules/process/deposit_synth.c:677
msgid "Randomize"
msgstr ""
-#: modules/process/deposit_synth.c:860 modules/process/domain_synth.c:919
+#: modules/process/deposit_synth.c:859 modules/process/domain_synth.c:919
msgid "Running computation..."
msgstr ""
-#: modules/process/deposit_synth.c:865
+#: modules/process/deposit_synth.c:864
#, c-format
msgid "%d particles were deposited"
msgstr ""
-#: modules/process/deposit_synth.c:1093
+#: modules/process/deposit_synth.c:1092
msgid "Initial particle set..."
msgstr ""
-#: modules/process/deposit_synth.c:1252
+#: modules/process/deposit_synth.c:1251
msgid "Running revise..."
msgstr ""
-#: modules/process/deposit_synth.c:1380
+#: modules/process/deposit_synth.c:1379
msgid "Error: too many particles."
msgstr ""
-#: modules/process/deposit_synth.c:1382
+#: modules/process/deposit_synth.c:1381
msgid "Error: no particles."
msgstr ""
-#: modules/process/deposit_synth.c:1384
+#: modules/process/deposit_synth.c:1383
msgid "Error: particles too large."
msgstr ""
-#: modules/process/deposit_synth.c:1386
+#: modules/process/deposit_synth.c:1385
msgid "Error: particles too small."
msgstr ""
#: modules/process/diff_synth.c:197 modules/tools/linestats.c:173
-#: modules/volume/volume_linestat.c:149
+#: modules/volume/volume_linestat.c:151
msgid "Variation"
msgstr ""
@@ -8507,7 +8787,7 @@ msgid "Generates surfaces by diffusion limited aggregation."
msgstr ""
#: modules/process/diff_synth.c:228
-msgid "/S_ynthetic/_Diffusion..."
+msgid "/S_ynthetic/_Deposition/_Diffusion..."
msgstr ""
#: modules/process/diff_synth.c:232
@@ -8522,44 +8802,44 @@ msgstr ""
msgid "_Flux:"
msgstr ""
-#: modules/process/diff_synth.c:522
+#: modules/process/diff_synth.c:521
msgid "Probabilities"
msgstr ""
-#: modules/process/diff_synth.c:530
+#: modules/process/diff_synth.c:529
msgid "_Sticking:"
msgstr ""
-#: modules/process/diff_synth.c:539
+#: modules/process/diff_synth.c:538
msgid "_Activation:"
msgstr ""
-#: modules/process/diff_synth.c:548
+#: modules/process/diff_synth.c:547
msgid "Passing Sch_woebel:"
msgstr ""
-#: modules/process/dimensions.h:457
+#: modules/process/dimensions.h:439
msgid "S_quare image"
msgstr ""
-#: modules/process/dimensions.h:489
+#: modules/process/dimensions.h:473
msgid "_Dimension units:"
msgstr ""
-#: modules/process/dimensions.h:502
-msgid "Current Channel"
+#: modules/process/dimensions.h:488
+msgid "Current Image"
msgstr ""
-#: modules/process/dimensions.h:506
-msgid "_Take Dimensions from Current Channel"
+#: modules/process/dimensions.h:492
+msgid "_Take Dimensions from Current Image"
msgstr ""
-#: modules/process/dimensions.h:514
-msgid "_Replace the current channel"
+#: modules/process/dimensions.h:501
+msgid "_Replace the current image"
msgstr ""
-#: modules/process/dimensions.h:523
-msgid "_Start from the current channel"
+#: modules/process/dimensions.h:510
+msgid "_Start from the current image"
msgstr ""
#: modules/process/domain_synth.c:158
@@ -8619,13 +8899,13 @@ msgid "_Monte Carlo time step:"
msgstr ""
#: modules/process/domain_synth.c:504 modules/process/fft_filter_2d.c:586
-#: modules/volume/volume_slice.c:364
+#: modules/volume/volume_slice.c:366
msgid "Output Options"
msgstr ""
#: modules/process/domain_synth.c:523 modules/process/fft_filter_2d.c:591
-#: modules/process/mask_edt.c:377 modules/process/slope_dist.c:323
-#: modules/volume/volume_linestat.c:432 modules/volume/volume_slice.c:384
+#: modules/process/mask_edt.c:211 modules/process/slope_dist.c:323
+#: modules/volume/volume_linestat.c:437 modules/volume/volume_slice.c:386
msgid "Output type:"
msgstr ""
@@ -8653,57 +8933,49 @@ msgstr ""
msgid "rows"
msgstr ""
-#: modules/process/drift.c:304
+#: modules/process/drift.c:305
msgid "Correct _data"
msgstr ""
-#: modules/process/drift.c:314
+#: modules/process/drift.c:315
msgid "_Exclude linear skew"
msgstr ""
-#: modules/process/drift.c:324
+#: modules/process/drift.c:325
msgid "Plot drift _graph"
msgstr ""
-#: modules/process/drift.c:356 modules/process/fit-shape.c:693
-#: modules/process/neural.c:548 modules/process/polydistort.c:275
+#: modules/process/drift.c:355 modules/process/fit-shape.c:705
+#: modules/process/neural.c:552 modules/process/polydistort.c:278
msgid "Preview:"
msgstr ""
-#: modules/process/drift.c:366
+#: modules/process/drift.c:365
msgid "Drift _lines"
msgstr ""
-#: modules/process/drift.c:374 modules/process/facet_analysis.c:407
-#: modules/process/grain_edge.c:285 modules/process/grain_filter.c:357
-#: modules/process/grain_mark.c:367 modules/process/grain_wshed.c:267
-#: modules/process/mark_disconn.c:310 modules/process/scars.c:381
+#: modules/process/drift.c:373 modules/process/facet_analysis.c:390
+#: modules/process/grain_edge.c:272 modules/process/grain_filter.c:356
+#: modules/process/grain_mark.c:341 modules/process/grain_wshed.c:271
+#: modules/process/mark_disconn.c:298 modules/process/scars.c:405
#: modules/process/wpour_mark.c:369
msgid "_Mask color:"
msgstr ""
-#: modules/process/drift.c:379
-msgid "Distribute"
-msgstr ""
-
-#: modules/process/drift.c:388
-msgid "Replace"
-msgstr ""
-
-#: modules/process/drift.c:569
+#: modules/process/drift.c:570
msgid "Drift-corrected"
msgstr ""
-#: modules/process/drift.c:613
+#: modules/process/drift.c:614
msgid "Drift"
msgstr ""
-#: modules/process/drift.c:614 modules/xyz/xyz_drift.c:392
+#: modules/process/drift.c:615 modules/xyz/xyz_drift.c:392
#: modules/xyz/xyz_drift.c:411 modules/xyz/xyz_drift.c:430
msgid "drift"
msgstr ""
-#: modules/process/drift.c:620 modules/xyz/xyz_drift.c:402
+#: modules/process/drift.c:621 modules/xyz/xyz_drift.c:402
msgid "x-axis drift"
msgstr ""
@@ -8759,11 +9031,11 @@ msgstr ""
msgid "2D DWT Anisotropy"
msgstr ""
-#: modules/process/dwtanisotropy.c:214
+#: modules/process/dwtanisotropy.c:218
msgid "X/Y ratio threshold:"
msgstr ""
-#: modules/process/dwtanisotropy.c:222
+#: modules/process/dwtanisotropy.c:226
msgid "Low level exclude limit:"
msgstr ""
@@ -8889,7 +9161,7 @@ msgstr ""
msgid "_Gaussian FWHM:"
msgstr ""
-#: modules/process/edge.c:681 modules/process/mark_disconn.c:271
+#: modules/process/edge.c:681 modules/process/mark_disconn.c:272
msgid "_Threshold:"
msgstr ""
@@ -8953,11 +9225,11 @@ msgstr ""
msgid "Entropy deficit:"
msgstr ""
-#: modules/process/entropy.c:567
+#: modules/process/entropy.c:568
msgid "Entropy at scales"
msgstr ""
-#: modules/process/entropy.c:586
+#: modules/process/entropy.c:587
msgid "Best estimate"
msgstr ""
@@ -9005,23 +9277,23 @@ msgstr ""
msgid "Extend _symetrically"
msgstr ""
-#: modules/process/extend.c:268 modules/process/polydistort.c:256
-#: modules/xyz/xyz_raster.c:658
+#: modules/process/extend.c:268 modules/process/polydistort.c:259
+#: modules/xyz/xyz_raster.c:627
msgid "exterior|Border"
msgstr ""
-#: modules/process/extend.c:270 modules/process/polydistort.c:258
-#: modules/xyz/xyz_raster.c:660
+#: modules/process/extend.c:270 modules/process/polydistort.c:261
+#: modules/xyz/xyz_raster.c:629
msgid "exterior|Mirror"
msgstr ""
-#: modules/process/extend.c:272 modules/process/polydistort.c:260
-#: modules/xyz/xyz_raster.c:662
+#: modules/process/extend.c:272 modules/process/polydistort.c:263
+#: modules/xyz/xyz_raster.c:631
msgid "exterior|Periodic"
msgstr ""
-#: modules/process/extend.c:275 modules/process/polydistort.c:263
-#: modules/xyz/xyz_raster.c:650
+#: modules/process/extend.c:275 modules/process/polydistort.c:266
+#: modules/xyz/xyz_raster.c:619
msgid "_Exterior type:"
msgstr ""
@@ -9053,11 +9325,11 @@ msgstr ""
msgid "There is no path selection."
msgstr ""
-#: modules/process/extract_path.c:189 modules/volume/volume_extract.c:390
+#: modules/process/extract_path.c:189 modules/volume/volume_extract.c:383
msgid "X position"
msgstr ""
-#: modules/process/extract_path.c:193 modules/volume/volume_extract.c:397
+#: modules/process/extract_path.c:193 modules/volume/volume_extract.c:389
msgid "Y position"
msgstr ""
@@ -9070,7 +9342,7 @@ msgid "Y tangent"
msgstr ""
#: modules/process/extract_path.c:392 modules/process/extract_path.c:404
-#: modules/process/pat_synth.c:1432 modules/tools/distance.c:146
+#: modules/process/pat_synth.c:1433 modules/tools/distance.c:146
msgid "Distance"
msgstr ""
@@ -9112,47 +9384,36 @@ msgstr ""
msgid "Mark areas by 2D slope"
msgstr ""
-#: modules/process/facet_analysis.c:266
+#: modules/process/facet_analysis.c:270
msgid "Mark Facets"
msgstr ""
-#: modules/process/facet_analysis.c:269
+#: modules/process/facet_analysis.c:273
msgid "verb|_Mark"
msgstr ""
#. TRANSLATORS: The direction or line orthogonal to something.
-#: modules/process/facet_analysis.c:325
+#: modules/process/facet_analysis.c:329
msgid "Normal"
msgstr ""
-#: modules/process/facet_analysis.c:333
+#: modules/process/facet_analysis.c:337
msgid "_Find Maximum"
msgstr ""
-#: modules/process/facet_analysis.c:341
+#: modules/process/facet_analysis.c:345
msgid "Mean Normal"
msgstr ""
-#: modules/process/facet_analysis.c:350
+#: modules/process/facet_analysis.c:362
msgid "Facet plane size:"
msgstr ""
-#: modules/process/facet_analysis.c:375
+#: modules/process/facet_analysis.c:370
msgid "_Tolerance:"
msgstr ""
-#: modules/process/facet_analysis.c:384 modules/process/grain_edge.c:262
-#: modules/process/grain_mark.c:344 modules/process/mark_disconn.c:286
-msgid "Com_bine with existing mask"
-msgstr ""
-
-#: modules/process/facet_analysis.c:398 modules/process/grain_edge.c:276
-#: modules/process/grain_mark.c:358 modules/process/mark_disconn.c:301
-#: modules/process/mark_with.c:230 modules/process/mask_morph.c:210
-msgid "Operation:"
-msgstr ""
-
-#: modules/process/facet_analysis.c:415
+#: modules/process/facet_analysis.c:398
msgid ""
"Warning: Lateral and value units differ. Angles are not physically "
"meaningful."
@@ -9182,8 +9443,8 @@ msgstr ""
msgid "_Stationarity scale:"
msgstr ""
-#: modules/process/fbm_synth.c:390 modules/process/lno_synth.c:509
-#: modules/process/noise_synth.c:409
+#: modules/process/fbm_synth.c:390 modules/process/lno_synth.c:507
+#: modules/process/noise_synth.c:407
msgid "_Distribution:"
msgstr ""
@@ -9191,17 +9452,17 @@ msgstr ""
msgid "Po_wer:"
msgstr ""
-#: modules/process/fbm_synth.c:408 modules/process/fft_synth.c:414
-#: modules/process/lno_synth.c:533 modules/process/noise_synth.c:433
+#: modules/process/fbm_synth.c:407 modules/process/fft_synth.c:414
+#: modules/process/lno_synth.c:531 modules/process/noise_synth.c:431
msgid "_RMS:"
msgstr ""
-#: modules/process/fbm_synth.c:477 modules/process/lno_synth.c:251
-#: modules/process/noise_synth.c:178
+#: modules/process/fbm_synth.c:476 modules/process/lno_synth.c:249
+#: modules/process/noise_synth.c:176
msgid "distribution|Exponential"
msgstr ""
-#: modules/process/fbm_synth.c:478
+#: modules/process/fbm_synth.c:477
msgid "distribution|Power"
msgstr ""
@@ -9253,7 +9514,7 @@ msgstr ""
msgid "Modulus"
msgstr ""
-#: modules/process/fft.c:327 modules/process/wave_synth.c:583
+#: modules/process/fft.c:327 modules/process/wave_synth.c:618
msgid "Phase"
msgstr ""
@@ -9269,63 +9530,63 @@ msgstr ""
msgid "I_maginary part:"
msgstr ""
-#: modules/process/fft.c:382
+#: modules/process/fft.c:380
msgid "_Inverse transform"
msgstr ""
-#: modules/process/fft.c:411
+#: modules/process/fft.c:409
msgid "Subtract mean _value beforehand"
msgstr ""
-#: modules/process/fft.c:422
+#: modules/process/fft.c:420
msgid "_Preserve RMS"
msgstr ""
-#: modules/process/fft_filter_1d.c:117
+#: modules/process/fft_filter_1d.c:118
msgid "FFT filtering"
msgstr ""
-#: modules/process/fft_filter_1d.c:131
+#: modules/process/fft_filter_1d.c:132
msgid "/_Correct Data/1D _FFT Filtering..."
msgstr ""
-#: modules/process/fft_filter_1d.c:135
+#: modules/process/fft_filter_1d.c:136
msgid "1D FFT Filtering"
msgstr ""
-#: modules/process/fft_filter_1d.c:165 modules/process/wpour_mark.c:391
+#: modules/process/fft_filter_1d.c:166 modules/process/wpour_mark.c:391
msgid "Marked"
msgstr ""
-#: modules/process/fft_filter_1d.c:166
+#: modules/process/fft_filter_1d.c:167
msgid "Unmarked"
msgstr ""
-#: modules/process/fft_filter_1d.c:169
+#: modules/process/fft_filter_1d.c:170
msgid "Null"
msgstr ""
-#: modules/process/fft_filter_1d.c:170
+#: modules/process/fft_filter_1d.c:171
msgid "Suppress"
msgstr ""
-#: modules/process/fft_filter_1d.c:180
+#: modules/process/fft_filter_1d.c:181
msgid "1D FFT filter"
msgstr ""
-#: modules/process/fft_filter_1d.c:269 modules/process/linematch.c:861
+#: modules/process/fft_filter_1d.c:271 modules/process/linematch.c:828
msgid "_Direction:"
msgstr ""
-#: modules/process/fft_filter_1d.c:277
+#: modules/process/fft_filter_1d.c:279
msgid "_Suppress type:"
msgstr ""
-#: modules/process/fft_filter_1d.c:285
+#: modules/process/fft_filter_1d.c:287
msgid "_Filter type:"
msgstr ""
-#: modules/process/fft_filter_1d.c:513
+#: modules/process/fft_filter_1d.c:515
msgid "1D FFT Filtered Data"
msgstr ""
@@ -9345,9 +9606,10 @@ msgstr ""
msgid "Filtered Data"
msgstr ""
-#: modules/process/fft_filter_2d.c:305 modules/process/fit-shape.c:594
-#: modules/process/fit-shape.c:643 modules/process/fit-shape.c:658
-#: modules/process/fit-shape.c:662 modules/process/neural.c:560
+#: modules/process/fft_filter_2d.c:305 modules/process/fit-shape.c:604
+#: modules/process/fit-shape.c:653 modules/process/fit-shape.c:668
+#: modules/process/fit-shape.c:672 modules/process/neural.c:564
+#: modules/process/psf.c:232
msgid "Difference"
msgstr ""
@@ -9403,7 +9665,7 @@ msgstr ""
msgid "_Undo"
msgstr ""
-#: modules/process/fft_filter_2d.c:507 modules/tools/maskedit.c:556
+#: modules/process/fft_filter_2d.c:507 modules/tools/maskedit.c:562
msgid "_Fill"
msgstr ""
@@ -9411,7 +9673,7 @@ msgstr ""
msgid "_Snap to origin"
msgstr ""
-#: modules/process/fft_filter_2d.c:565 modules/process/measure_lattice.c:339
+#: modules/process/fft_filter_2d.c:565 modules/process/measure_lattice.c:329
msgid "Zoom:"
msgstr ""
@@ -9447,37 +9709,37 @@ msgstr ""
msgid "Force shapes to center around the origin"
msgstr ""
-#: modules/process/fft_profile.c:125
+#: modules/process/fft_profile.c:124
msgid ""
"Reads radial sections of two-dimensional power spectrum density function."
msgstr ""
-#: modules/process/fft_profile.c:140
+#: modules/process/fft_profile.c:139
msgid "/_Statistics/_PSDF Section..."
msgstr ""
-#: modules/process/fft_profile.c:144
+#: modules/process/fft_profile.c:143
msgid "Read radial PSDF sections"
msgstr ""
-#: modules/process/fft_profile.c:190
+#: modules/process/fft_profile.c:189
msgid "Radial PSDF Section"
msgstr ""
-#: modules/process/fft_profile.c:237
+#: modules/process/fft_profile.c:236
msgid "PSDF Section"
msgstr ""
-#: modules/process/fft_profile.c:266 modules/process/grain_dist.c:336
-#: modules/tools/profile.c:517 modules/tools/sfunctions.c:443
-msgid "_Fix res.:"
+#: modules/process/fft_profile.c:266 modules/process/grain_dist.c:338
+#: modules/tools/profile.c:514 modules/tools/sfunctions.c:454
+msgid "_Fixed resolution:"
msgstr ""
-#: modules/process/fft_profile.c:279
+#: modules/process/fft_profile.c:278
msgid "_Separate curves"
msgstr ""
-#: modules/process/fft_profile.c:496
+#: modules/process/fft_profile.c:483
#, c-format
msgid "PSDF %.0f°"
msgstr ""
@@ -9498,11 +9760,15 @@ msgstr ""
msgid "Spectral Synthesis"
msgstr ""
-#: modules/process/fft_synth.c:429
+#: modules/process/fft_synth.c:430
msgid "M_inimum frequency:"
msgstr ""
-#: modules/process/fft_synth.c:449
+#: modules/process/fft_synth.c:430 modules/process/fft_synth.c:450
+msgid "px<sup>-1</sup>"
+msgstr ""
+
+#: modules/process/fft_synth.c:450
msgid "Ma_ximum frequency:"
msgstr ""
@@ -9522,85 +9788,154 @@ msgstr ""
msgid "Enable _power multiplier"
msgstr ""
-#: modules/process/fit-shape.c:270
+#: modules/process/fibre_synth.c:256
+msgid "Semi-circle"
+msgstr ""
+
+#: modules/process/fibre_synth.c:257
+msgid "Triangle"
+msgstr ""
+
+#: modules/process/fibre_synth.c:258
+msgid "Rectangle"
+msgstr ""
+
+#: modules/process/fibre_synth.c:260
+msgid "Quadratic spline"
+msgstr ""
+
+#: modules/process/fibre_synth.c:266
+msgid "Generates surfaces composed from randomly placed fibers."
+msgstr ""
+
+#: modules/process/fibre_synth.c:280
+msgid "/S_ynthetic/_Deposition/_Fibers..."
+msgstr ""
+
+#: modules/process/fibre_synth.c:284
+msgid "Generate surface of randomly placed fibers"
+msgstr ""
+
+#: modules/process/fibre_synth.c:420
+msgid "Random Fibers"
+msgstr ""
+
+#: modules/process/fibre_synth.c:494 modules/process/obj_synth.c:510
+msgid "_Shape:"
+msgstr ""
+
+#: modules/process/fibre_synth.c:513 modules/process/obj_synth.c:529
+msgid "obj."
+msgstr ""
+
+#: modules/process/fibre_synth.c:553
+msgid "Scales _with width"
+msgstr ""
+
+#: modules/process/fibre_synth.c:591 modules/process/synth.h:485
+msgid "Deformation"
+msgstr ""
+
+#: modules/process/fibre_synth.c:600 modules/process/lno_synth.c:852
+#: modules/process/lno_synth.c:1222 modules/process/mask_noisify.c:177
+msgid "Densi_ty:"
+msgstr ""
+
+#: modules/process/fibre_synth.c:607
+msgid "_Lateral:"
+msgstr ""
+
+#: modules/process/fibre_synth.c:614
+msgid "Le_ngthwise:"
+msgstr ""
+
+#: modules/process/fibre_synth.c:819
+msgid "Along fiber:"
+msgstr ""
+
+#: modules/process/fibre_synth.c:1180
+msgid "Generating fibers..."
+msgstr ""
+
+#: modules/process/fit-shape.c:264
msgid "Fits predefined geometrical shapes to data."
msgstr ""
-#: modules/process/fit-shape.c:284
+#: modules/process/fit-shape.c:278
msgid "/_Level/_Fit Shape..."
msgstr ""
-#: modules/process/fit-shape.c:288 modules/process/fit-shape.c:295
+#: modules/process/fit-shape.c:282 modules/process/fit-shape.c:289
msgid "Fit geometrical shapes"
msgstr ""
-#: modules/process/fit-shape.c:291
+#: modules/process/fit-shape.c:285
msgid "/_Fit Shape..."
msgstr ""
-#: modules/process/fit-shape.c:390
+#: modules/process/fit-shape.c:389
msgid "Fit Shape"
msgstr ""
-#: modules/process/fit-shape.c:395
+#: modules/process/fit-shape.c:396
msgid "verb|_Quick Fit"
msgstr ""
-#: modules/process/fit-shape.c:473 modules/process/fit-shape.c:2159
+#: modules/process/fit-shape.c:474 modules/process/fit-shape.c:2141
msgid "Derived Quantities"
msgstr ""
-#: modules/process/fit-shape.c:478 modules/process/fit-shape.c:2129
+#: modules/process/fit-shape.c:479 modules/process/fit-shape.c:2111
msgid "Mean square difference:"
msgstr ""
-#: modules/process/fit-shape.c:580 modules/process/fit-shape.c:626
-#: modules/process/fit-shape.c:657 modules/process/fit-shape.c:661
+#: modules/process/fit-shape.c:590 modules/process/fit-shape.c:636
+#: modules/process/fit-shape.c:667 modules/process/fit-shape.c:671
msgid "Fitted shape"
msgstr ""
-#: modules/process/fit-shape.c:663 modules/process/mark_disconn.c:189
-#: modules/process/scars.c:281
+#: modules/process/fit-shape.c:673 modules/process/mark_disconn.c:189
+#: modules/process/scars.c:299
msgid "Both"
msgstr ""
-#: modules/process/fit-shape.c:680
+#: modules/process/fit-shape.c:690 modules/process/psf-fit.c:308
msgid "_Function type:"
msgstr ""
-#: modules/process/fit-shape.c:708
+#: modules/process/fit-shape.c:720
msgid "Show differences with _adapted color map"
msgstr ""
-#: modules/process/fit-shape.c:720
+#: modules/process/fit-shape.c:732
msgid "Full fit is _geometric"
msgstr ""
-#: modules/process/fit-shape.c:757
+#: modules/process/fit-shape.c:769
msgid "Calculate differences for e_xcluded pixels"
msgstr ""
-#: modules/process/fit-shape.c:804
+#: modules/process/fit-shape.c:816
msgid "_Recalculate Image"
msgstr ""
-#: modules/process/fit-shape.c:811
+#: modules/process/fit-shape.c:823
msgid "Revert to _Previous Values"
msgstr ""
-#: modules/process/fit-shape.c:1850
+#: modules/process/fit-shape.c:1864
msgid "Parameter estimation failed"
msgstr ""
-#: modules/process/fit-shape.c:1853
+#: modules/process/fit-shape.c:1867
msgid "Fit failed"
msgstr ""
-#: modules/process/fit-shape.c:1855
+#: modules/process/fit-shape.c:1869
msgid "Fit was interruped"
msgstr ""
-#: modules/process/fit-shape.c:2115
+#: modules/process/fit-shape.c:2097
msgid "(fixed)"
msgstr ""
@@ -9620,88 +9955,84 @@ msgstr ""
msgid "Polynomial leveling..."
msgstr ""
-#: modules/process/fraccor.c:38
+#: modules/process/fraccor.c:39
msgid "Removes data under mask using fractal interpolation."
msgstr ""
-#: modules/process/fraccor.c:52
+#: modules/process/fraccor.c:53
msgid "/_Correct Data/_Fractal Correction"
msgstr ""
-#: modules/process/fraccor.c:56
+#: modules/process/fraccor.c:57
msgid "Interpolate data under mask with fractal interpolation"
msgstr ""
-#: modules/process/fractal.c:134
+#: modules/process/fractal.c:130
msgid "Partitioning"
msgstr ""
-#: modules/process/fractal.c:135
+#: modules/process/fractal.c:131
msgid "Cube counting"
msgstr ""
-#: modules/process/fractal.c:136
+#: modules/process/fractal.c:132
msgid "Triangulation"
msgstr ""
-#: modules/process/fractal.c:137
+#: modules/process/fractal.c:133
msgid "Power spectrum"
msgstr ""
-#: modules/process/fractal.c:173
+#: modules/process/fractal.c:169
msgid ""
"Calculates fractal dimension using several methods (partitioning, box "
"counting, triangulation, power spectrum)."
msgstr ""
-#: modules/process/fractal.c:188
+#: modules/process/fractal.c:184
msgid "/_Statistics/_Fractal Dimension..."
msgstr ""
-#: modules/process/fractal.c:192
+#: modules/process/fractal.c:188
msgid "Calculate fractal dimension"
msgstr ""
-#: modules/process/fractal.c:227
+#: modules/process/fractal.c:223
msgid "Fractal Dimension"
msgstr ""
-#: modules/process/fractal.c:228
-msgid "Reco_mpute"
+#: modules/process/fractal.c:253
+msgid "_Method:"
msgstr ""
#: modules/process/fractal.c:269
-msgid "_Method:"
+msgid "Fit Area"
msgstr ""
-#: modules/process/fractal.c:290
-msgid "Fit Area"
+#: modules/process/fractal.c:273 modules/process/fractal.c:545
+#: modules/process/fractal.c:569
+msgid "minimum"
msgstr ""
-#: modules/process/fractal.c:295
+#: modules/process/fractal.c:274
msgid "From:"
msgstr ""
-#: modules/process/fractal.c:295 modules/process/fractal.c:589
-#: modules/process/fractal.c:613
-msgid "minimum"
+#: modules/process/fractal.c:279 modules/process/fractal.c:546
+#: modules/process/fractal.c:570
+msgid "maximum"
msgstr ""
-#: modules/process/fractal.c:298
+#: modules/process/fractal.c:280
msgid "To:"
msgstr ""
-#: modules/process/fractal.c:298 modules/process/fractal.c:590
-#: modules/process/fractal.c:614
-msgid "maximum"
-msgstr ""
-
-#: modules/process/fractal.c:308 modules/process/mark_with.c:390
-#: modules/process/neural.c:559
+#: modules/process/fractal.c:287 modules/process/mark_with.c:394
+#: modules/process/neural.c:563
msgid "Result"
msgstr ""
-#: modules/process/fractal.c:550
+#: modules/process/fractal.c:506
msgid "Linear fit"
msgstr ""
@@ -9771,11 +10102,11 @@ msgstr ""
msgid "Grain Correlations"
msgstr ""
-#: modules/process/grain_cross.c:240
+#: modules/process/grain_cross.c:241
msgid "_Abscissa"
msgstr ""
-#: modules/process/grain_cross.c:244
+#: modules/process/grain_cross.c:245
msgid "O_rdinate"
msgstr ""
@@ -9803,118 +10134,118 @@ msgstr ""
msgid "Grain Distributions"
msgstr ""
-#: modules/process/grain_dist.c:553
+#: modules/process/grain_dist.c:547
msgid "count"
msgstr ""
-#: modules/process/grain_dist.c:617
+#: modules/process/grain_dist.c:611
msgid "Export Raw Grain Values"
msgstr ""
-#: modules/process/grain_edge.c:100
+#: modules/process/grain_edge.c:99
msgid "Marks grains by edge detection method."
msgstr ""
-#: modules/process/grain_edge.c:114
+#: modules/process/grain_edge.c:113
msgid "/_Grains/Mark by _Edge Detection..."
msgstr ""
-#: modules/process/grain_edge.c:118
+#: modules/process/grain_edge.c:117
msgid "Mark grains with edge detection mechanism"
msgstr ""
-#: modules/process/grain_edge.c:207
+#: modules/process/grain_edge.c:206
msgid "Mark Grains by Edge Detection"
msgstr ""
-#: modules/process/grain_edge.c:245
+#: modules/process/grain_edge.c:244
msgid "Threshold"
msgstr ""
-#: modules/process/grain_edge.c:249
+#: modules/process/grain_edge.c:248
msgid "_Laplacian:"
msgstr ""
-#: modules/process/grain_filter.c:195
+#: modules/process/grain_filter.c:194
msgid ""
"Filters grains by their properties, using logical expressions and thresholds."
msgstr ""
-#: modules/process/grain_filter.c:210
+#: modules/process/grain_filter.c:209
msgid "/_Grains/_Filter..."
msgstr ""
-#: modules/process/grain_filter.c:214
+#: modules/process/grain_filter.c:213
msgid "Filter grains by their properties"
msgstr ""
-#: modules/process/grain_filter.c:254
+#: modules/process/grain_filter.c:253
msgid "There are no grains to filter."
msgstr ""
-#: modules/process/grain_filter.c:310
+#: modules/process/grain_filter.c:309
msgid "Filter Grains"
msgstr ""
-#: modules/process/grain_filter.c:405
+#: modules/process/grain_filter.c:404
msgid "Set selected as:"
msgstr ""
-#: modules/process/grain_filter.c:420
+#: modules/process/grain_filter.c:419
msgid "Keep grains satisfying:"
msgstr ""
-#: modules/process/grain_filter.c:434 modules/process/lat_synth.c:733
+#: modules/process/grain_filter.c:440 modules/process/lat_synth.c:733
msgid "Lower threshold:"
msgstr ""
-#: modules/process/grain_filter.c:469 modules/process/lat_synth.c:740
+#: modules/process/grain_filter.c:467 modules/process/lat_synth.c:740
msgid "Upper threshold:"
msgstr ""
#. TRANSLATORS: %c is replaced with quantity label A, B or C.
-#: modules/process/grain_filter.c:645
+#: modules/process/grain_filter.c:628
#, c-format
msgid "Condition %c: %s"
msgstr ""
-#: modules/process/grain_mark.c:139
+#: modules/process/grain_mark.c:137
msgid "Marks grains by thresholding (height, slope, curvature)."
msgstr ""
-#: modules/process/grain_mark.c:153
+#: modules/process/grain_mark.c:151
msgid "/_Grains/_Mark by Threshold..."
msgstr ""
-#: modules/process/grain_mark.c:157
+#: modules/process/grain_mark.c:155
msgid "Mark grains by threshold"
msgstr ""
-#: modules/process/grain_mark.c:241
+#: modules/process/grain_mark.c:240
msgid "Mark Grains by Threshold"
msgstr ""
-#: modules/process/grain_mark.c:281
+#: modules/process/grain_mark.c:280
msgid "Threshold by"
msgstr ""
-#: modules/process/grain_mark.c:311
+#: modules/process/grain_mark.c:310
msgid "_Slope:"
msgstr ""
-#: modules/process/grain_mark.c:315
+#: modules/process/grain_mark.c:314
msgid "_Curvature:"
msgstr ""
-#: modules/process/grain_mark.c:324
-msgid "Criteria combination:"
-msgstr ""
-
-#: modules/process/grain_mark.c:328 modules/process/grain_wshed.c:256
+#: modules/process/grain_mark.c:319 modules/process/grain_wshed.c:260
#: modules/process/wpour_mark.c:358
msgid "_Invert height"
msgstr ""
+#: modules/process/grain_mark.c:328
+msgid "Criteria combination:"
+msgstr ""
+
#: modules/process/grain_stat.c:54
msgid "Displays overall grain statistics."
msgstr ""
@@ -9991,433 +10322,442 @@ msgstr ""
msgid "Total projected boundary length:"
msgstr ""
-#: modules/process/grain_wshed.c:101
+#: modules/process/grain_wshed.c:102
msgid "Marks grains by watershed algorithm."
msgstr ""
-#: modules/process/grain_wshed.c:115
+#: modules/process/grain_wshed.c:116
msgid "/_Grains/Mark by _Watershed..."
msgstr ""
-#: modules/process/grain_wshed.c:119
+#: modules/process/grain_wshed.c:120
msgid "Mark grains by watershed"
msgstr ""
-#: modules/process/grain_wshed.c:161
+#: modules/process/grain_wshed.c:162
msgid "Mark Grains by Watershed"
msgstr ""
-#: modules/process/grain_wshed.c:199
+#: modules/process/grain_wshed.c:200
msgid "Grain Location"
msgstr ""
-#: modules/process/grain_wshed.c:214
+#: modules/process/grain_wshed.c:216
msgid "_Drop size:"
msgstr ""
-#: modules/process/grain_wshed.c:230
+#: modules/process/grain_wshed.c:233
msgid "Segmentation"
msgstr ""
-#: modules/process/grain_wshed.c:236
+#: modules/process/grain_wshed.c:239
msgid "Num_ber of steps:"
msgstr ""
-#: modules/process/grain_wshed.c:244
+#: modules/process/grain_wshed.c:248
msgid "Dr_op size:"
msgstr ""
-#: modules/process/grain_wshed.c:435
+#: modules/process/grain_wshed.c:439
msgid "Finding minima..."
msgstr ""
-#: modules/process/grain_wshed.c:437
+#: modules/process/grain_wshed.c:441
msgid "Locating..."
msgstr ""
-#: modules/process/grain_wshed.c:439
+#: modules/process/grain_wshed.c:443
msgid "Simulating watershed..."
msgstr ""
-#: modules/process/grain_wshed.c:441
+#: modules/process/grain_wshed.c:445
msgid "Marking boundaries..."
msgstr ""
-#: modules/process/hough.c:74
+#: modules/process/hough.c:76
msgid "Hough transform."
msgstr ""
-#: modules/process/hough.c:88
+#: modules/process/hough.c:90
msgid "/_Integral Transforms/_Hough..."
msgstr ""
-#: modules/process/hough.c:92
+#: modules/process/hough.c:94
msgid "Compute Hough transform"
msgstr ""
-#: modules/process/hough.c:178
+#: modules/process/hough.c:137
+msgid "Hough line"
+msgstr ""
+
+#: modules/process/hough.c:141
+#, c-format
+msgid "Hough circle r=%d"
+msgstr ""
+
+#: modules/process/hough.c:173
msgid "Hough Transform"
msgstr ""
-#: modules/process/hough.c:201
+#: modules/process/hough.c:195
msgid "_Transform type:"
msgstr ""
-#: modules/process/hough.c:212
+#: modules/process/hough.c:203
msgid "_Circle size:"
msgstr ""
-#: modules/process/immerse.c:162
+#: modules/process/immerse.c:163
msgid "Immerse high resolution detail into overall image."
msgstr ""
-#: modules/process/immerse.c:176
+#: modules/process/immerse.c:177
msgid "/M_ultidata/_Immerse Detail..."
msgstr ""
-#: modules/process/immerse.c:180
+#: modules/process/immerse.c:181
msgid "Immerse a detail into image"
msgstr ""
-#: modules/process/immerse.c:222
+#: modules/process/immerse.c:223
msgid "Immerse Detail"
msgstr ""
-#: modules/process/immerse.c:225
+#: modules/process/immerse.c:226
msgid "_Locate"
msgstr ""
-#: modules/process/immerse.c:227
+#: modules/process/immerse.c:228
msgid "Locate detail by full image correlation search"
msgstr ""
-#: modules/process/immerse.c:229
+#: modules/process/immerse.c:230
msgid "_Improve"
msgstr ""
-#: modules/process/immerse.c:231
+#: modules/process/immerse.c:232
msgid "Improve detail position by correlation search in neighborhood"
msgstr ""
-#: modules/process/immerse.c:290
+#: modules/process/immerse.c:291
msgid "_Detail image:"
msgstr ""
-#: modules/process/immerse.c:295
+#: modules/process/immerse.c:296
msgid "Position:"
msgstr ""
-#: modules/process/immerse.c:308
+#: modules/process/immerse.c:314
msgid "Result Sampling"
msgstr ""
-#: modules/process/immerse.c:318
+#: modules/process/immerse.c:324
msgid "_Upsample large image"
msgstr ""
-#: modules/process/immerse.c:320
+#: modules/process/immerse.c:326
msgid "_Downsample detail"
msgstr ""
-#: modules/process/immerse.c:329
+#: modules/process/immerse.c:335
msgid "Detail Leveling"
msgstr ""
-#: modules/process/immerse.c:339
+#: modules/process/immerse.c:345
msgid "levelling|_None"
msgstr ""
-#: modules/process/immerse.c:341
+#: modules/process/immerse.c:347
msgid "_Mean value"
msgstr ""
-#: modules/process/immerse.c:349
+#: modules/process/immerse.c:355
msgid "Show _frame"
msgstr ""
-#: modules/process/immerse.c:787
+#: modules/process/immerse.c:793
msgid "Immersed detail"
msgstr ""
-#: modules/process/indent_analyze.c:261
+#: modules/process/indent_analyze.c:246
msgid "Do nothing"
msgstr ""
-#: modules/process/indent_analyze.c:262
+#: modules/process/indent_analyze.c:247
msgid "Plane level"
msgstr ""
-#: modules/process/indent_analyze.c:263
+#: modules/process/indent_analyze.c:248
msgid "Plane rotate"
msgstr ""
-#: modules/process/indent_analyze.c:267
+#: modules/process/indent_analyze.c:252
msgid "New"
msgstr ""
-#: modules/process/indent_analyze.c:268
+#: modules/process/indent_analyze.c:253
msgid "AND"
msgstr ""
-#: modules/process/indent_analyze.c:269
+#: modules/process/indent_analyze.c:254
msgid "OR"
msgstr ""
-#: modules/process/indent_analyze.c:270
+#: modules/process/indent_analyze.c:255
msgid "NOT"
msgstr ""
-#: modules/process/indent_analyze.c:271
+#: modules/process/indent_analyze.c:256
msgid "XOR"
msgstr ""
-#: modules/process/indent_analyze.c:275
+#: modules/process/indent_analyze.c:260
msgid "Nothing"
msgstr ""
-#: modules/process/indent_analyze.c:276
+#: modules/process/indent_analyze.c:261
msgid "Above"
msgstr ""
-#: modules/process/indent_analyze.c:277
+#: modules/process/indent_analyze.c:262
msgid "Below"
msgstr ""
-#: modules/process/indent_analyze.c:278
+#: modules/process/indent_analyze.c:263
msgid "Plane"
msgstr ""
-#: modules/process/indent_analyze.c:279
+#: modules/process/indent_analyze.c:264
msgid "Impression"
msgstr ""
-#: modules/process/indent_analyze.c:280
+#: modules/process/indent_analyze.c:265
msgid "Inner Pile-up"
msgstr ""
-#: modules/process/indent_analyze.c:281
+#: modules/process/indent_analyze.c:266
msgid "Outer Pile-up"
msgstr ""
-#: modules/process/indent_analyze.c:282
+#: modules/process/indent_analyze.c:267
msgid "Special points"
msgstr ""
-#: modules/process/indent_analyze.c:283
+#: modules/process/indent_analyze.c:268
msgid "Faces border"
msgstr ""
-#: modules/process/indent_analyze.c:287
+#: modules/process/indent_analyze.c:272
msgid "Vickers"
msgstr ""
-#: modules/process/indent_analyze.c:288
+#: modules/process/indent_analyze.c:273
msgid "Berkovich"
msgstr ""
-#: modules/process/indent_analyze.c:289
+#: modules/process/indent_analyze.c:274
msgid "Berkovich (modified)"
msgstr ""
-#: modules/process/indent_analyze.c:290
+#: modules/process/indent_analyze.c:275
msgid "Knoop"
msgstr ""
-#: modules/process/indent_analyze.c:291
+#: modules/process/indent_analyze.c:276
msgid "Brinell"
msgstr ""
-#: modules/process/indent_analyze.c:292
+#: modules/process/indent_analyze.c:277
msgid "Cube corner"
msgstr ""
-#: modules/process/indent_analyze.c:293
+#: modules/process/indent_analyze.c:278
msgid "Rockwell"
msgstr ""
-#: modules/process/indent_analyze.c:303
+#: modules/process/indent_analyze.c:288
msgid "Analyses nanoindentation structure (volumes, surfaces, ...)."
msgstr ""
-#: modules/process/indent_analyze.c:320
+#: modules/process/indent_analyze.c:302
msgid "/_Tip and Indentation/_Analyze Imprint..."
msgstr ""
-#: modules/process/indent_analyze.c:439
+#: modules/process/indent_analyze.c:410
msgid "Marked _areas:"
msgstr ""
-#: modules/process/indent_analyze.c:445
+#: modules/process/indent_analyze.c:419
msgid "_Indentor type:"
msgstr ""
-#: modules/process/indent_analyze.c:451
+#: modules/process/indent_analyze.c:428
msgid "_Mask creation type:"
msgstr ""
-#: modules/process/indent_analyze.c:456
+#: modules/process/indent_analyze.c:434
msgid "Ref. plane _tolerance:"
msgstr ""
-#: modules/process/indent_analyze.c:460
+#: modules/process/indent_analyze.c:438
msgid "Angle _1 tolerance:"
msgstr ""
-#: modules/process/indent_analyze.c:485
+#: modules/process/indent_analyze.c:456
msgid "Indent center at"
msgstr ""
-#: modules/process/indent_analyze.c:488
+#: modules/process/indent_analyze.c:460
msgid "Maximum at"
msgstr ""
-#: modules/process/indent_analyze.c:491
+#: modules/process/indent_analyze.c:464
msgid "Max-min difference"
msgstr ""
-#: modules/process/indent_analyze.c:497
+#: modules/process/indent_analyze.c:472
msgid "Expected A<sub>d</sub>:"
msgstr ""
-#: modules/process/indent_analyze.c:505
+#: modules/process/indent_analyze.c:479
msgid "Expected A<sub>p</sub>:"
msgstr ""
-#: modules/process/indent_analyze.c:549
+#: modules/process/indent_analyze.c:489
msgid "Volume above-below"
msgstr ""
-#: modules/process/indent_analyze.c:558
+#: modules/process/indent_analyze.c:494
msgid "Indent. volume"
msgstr ""
-#: modules/process/indent_analyze.c:564
+#: modules/process/indent_analyze.c:502
msgid "Indent. A<sub>d</sub>"
msgstr ""
-#: modules/process/indent_analyze.c:573
+#: modules/process/indent_analyze.c:509
msgid "Indent. A<sub>p</sub>"
msgstr ""
-#: modules/process/indent_analyze.c:587
+#: modules/process/indent_analyze.c:517
msgid "Inner Pile-Up A<sub>d</sub>"
msgstr ""
-#: modules/process/indent_analyze.c:596
+#: modules/process/indent_analyze.c:525
msgid "Inner Pile-Up A<sub>p</sub>"
msgstr ""
-#: modules/process/indent_analyze.c:605
+#: modules/process/indent_analyze.c:533
msgid "Outer Pile-Up A<sub>d</sub>"
msgstr ""
-#: modules/process/indent_analyze.c:614
+#: modules/process/indent_analyze.c:541
msgid "Outer Pile-Up A<sub>p</sub>"
msgstr ""
-#: modules/process/indent_analyze.c:644
+#: modules/process/indent_analyze.c:569
msgid "Indentation statistics"
msgstr ""
-#: modules/process/indent_analyze.c:645
+#: modules/process/indent_analyze.c:570
msgid "_Compute & mark"
msgstr ""
-#: modules/process/indent_analyze.c:646
+#: modules/process/indent_analyze.c:571
msgid "_Save statistics"
msgstr ""
-#: modules/process/indent_analyze.c:1569
+#: modules/process/indent_analyze.c:1392
msgid "No statistics has been computed yet."
msgstr ""
-#: modules/process/indent_analyze.c:1577
+#: modules/process/indent_analyze.c:1400
msgid "Save Indentation Statistics"
msgstr ""
-#: modules/process/indent_analyze.c:1615
+#: modules/process/indent_analyze.c:1438
#, c-format
msgid "Indentor: %s\n"
msgstr ""
-#: modules/process/indent_analyze.c:1619
+#: modules/process/indent_analyze.c:1442
#, c-format
msgid "Length units: %s\n"
msgstr ""
-#: modules/process/indent_analyze.c:1621
+#: modules/process/indent_analyze.c:1444
#, c-format
msgid "Indentation center at [%d, %d] px: %lf\n"
msgstr ""
-#: modules/process/indent_analyze.c:1623
+#: modules/process/indent_analyze.c:1446
#, c-format
msgid "Maximum at [%d, %d] is: %lf\n"
msgstr ""
-#: modules/process/indent_analyze.c:1625
+#: modules/process/indent_analyze.c:1448
#, c-format
msgid "Difference max-min: %lf\n"
msgstr ""
-#: modules/process/indent_analyze.c:1630
+#: modules/process/indent_analyze.c:1453
#, c-format
msgid "Area (projected) above plane: %g (%.1lf %%)\n"
msgstr ""
-#: modules/process/indent_analyze.c:1634
+#: modules/process/indent_analyze.c:1457
#, c-format
msgid "Area (projected) below plane: %g (%.1lf %%)\n"
msgstr ""
-#: modules/process/indent_analyze.c:1638
+#: modules/process/indent_analyze.c:1461
#, c-format
msgid "Area (projected) of plane: %g (%.1lf %%)\n"
msgstr ""
-#: modules/process/indent_analyze.c:1643
+#: modules/process/indent_analyze.c:1466
#, c-format
msgid "Area (developed) above %g (+%.1f %%)\n"
msgstr ""
-#: modules/process/indent_analyze.c:1646
+#: modules/process/indent_analyze.c:1469
#, c-format
msgid "Area (developed) below %g (+%.1lf %%)\n"
msgstr ""
-#: modules/process/indent_analyze.c:1650
+#: modules/process/indent_analyze.c:1473
#, c-format
msgid "Volume above: %g\n"
msgstr ""
-#: modules/process/indent_analyze.c:1652
+#: modules/process/indent_analyze.c:1475
#, c-format
msgid "Volume below: %g\n"
msgstr ""
-#: modules/process/indent_analyze.c:1654
+#: modules/process/indent_analyze.c:1477
#, c-format
msgid "Volume difference %g\n"
msgstr ""
-#: modules/process/indent_analyze.c:1658
+#: modules/process/indent_analyze.c:1481
msgid ""
"\n"
"Indentation\n"
msgstr ""
-#: modules/process/indent_analyze.c:1659
+#: modules/process/indent_analyze.c:1482
#, c-format
msgid "Volume %g\n"
msgstr ""
-#: modules/process/indent_analyze.c:1664
+#: modules/process/indent_analyze.c:1487
msgid ""
"\n"
"Indentation - Inner Pile-Up\n"
msgstr ""
-#: modules/process/indent_analyze.c:1670
+#: modules/process/indent_analyze.c:1493
msgid "Indentation - Outer Pile-Up\n"
msgstr ""
@@ -10526,11 +10866,6 @@ msgstr ""
msgid "_Lattice:"
msgstr ""
-#: modules/process/lat_synth.c:651 modules/process/obj_synth.c:544
-#: modules/process/pat_synth.c:1457
-msgid "_Size:"
-msgstr ""
-
#: modules/process/lat_synth.c:662
msgid "Lattice rela_xation:"
msgstr ""
@@ -10663,7 +10998,7 @@ msgstr ""
#: modules/process/level_grains.c:187 modules/process/median-bg.c:167
#: modules/process/polylevel.c:293 modules/process/polylevel.c:417
-#: modules/process/sphere-revolve.c:200
+#: modules/process/sphere-revolve.c:221 modules/process/sphere-revolve.c:295
msgid "Background"
msgstr ""
@@ -10675,150 +11010,150 @@ msgstr ""
msgid "Quantity to level:"
msgstr ""
-#: modules/process/level_grains.c:231 modules/process/linematch.c:866
-#: modules/process/median-bg.c:217 modules/process/polylevel.c:482
-#: modules/process/sphere-revolve.c:263
+#: modules/process/level_grains.c:231 modules/process/linematch.c:834
+#: modules/process/median-bg.c:217 modules/process/polylevel.c:485
+#: modules/process/sphere-revolve.c:371
msgid "E_xtract background"
msgstr ""
-#: modules/process/linecorrect.c:54
+#: modules/process/linecorrect.c:52
msgid "Corrects line defects (mostly experimental algorithms)."
msgstr ""
-#: modules/process/linecorrect.c:68
+#: modules/process/linecorrect.c:66
msgid "/_Correct Data/Ste_p Line Correction"
msgstr ""
-#: modules/process/linecorrect.c:72
+#: modules/process/linecorrect.c:70
msgid "Correct steps in lines"
msgstr ""
-#: modules/process/linematch.c:158 modules/tools/linestats.c:166
+#: modules/process/linematch.c:155 modules/tools/linestats.c:166
#: modules/volume/volume_linestat.c:143
msgid "Median"
msgstr ""
-#: modules/process/linematch.c:159
+#: modules/process/linematch.c:156
msgid "Median of differences"
msgstr ""
-#: modules/process/linematch.c:160
+#: modules/process/linematch.c:157
msgid "Modus"
msgstr ""
-#: modules/process/linematch.c:161
+#: modules/process/linematch.c:158
msgid "linematch|Matching"
msgstr ""
-#: modules/process/linematch.c:162
+#: modules/process/linematch.c:159
msgid "linematch|Polynomial"
msgstr ""
-#: modules/process/linematch.c:168
+#: modules/process/linematch.c:165
msgid "Aligns rows by various methods."
msgstr ""
-#: modules/process/linematch.c:182
+#: modules/process/linematch.c:179
msgid "/_Correct Data/_Align rows..."
msgstr ""
-#: modules/process/linematch.c:186
+#: modules/process/linematch.c:183
msgid "Align rows using various methods"
msgstr ""
-#: modules/process/linematch.c:237 modules/process/linematch.c:265
+#: modules/process/linematch.c:234 modules/process/linematch.c:262
msgid "Row background"
msgstr ""
-#: modules/process/linematch.c:266
+#: modules/process/linematch.c:263
msgid "Vertical position"
msgstr ""
-#: modules/process/linematch.c:267
+#: modules/process/linematch.c:264
msgid "Corrected offset"
msgstr ""
-#: modules/process/linematch.c:802
+#: modules/process/linematch.c:769
msgid "Align Rows"
msgstr ""
-#: modules/process/linematch.c:844
+#: modules/process/linematch.c:810
msgid "_Polynomial degree:"
msgstr ""
-#: modules/process/linematch.c:876
+#: modules/process/linematch.c:844
msgid "Plot background _graph"
msgstr ""
-#: modules/process/lno_synth.c:261 modules/process/noise_synth.c:188
+#: modules/process/lno_synth.c:259 modules/process/noise_synth.c:186
msgid "distribution|Triangular"
msgstr ""
-#: modules/process/lno_synth.c:267 modules/process/pat_synth.c:213
+#: modules/process/lno_synth.c:265 modules/process/pat_synth.c:213
msgid "Steps"
msgstr ""
-#: modules/process/lno_synth.c:268
+#: modules/process/lno_synth.c:266
msgid "Scars"
msgstr ""
-#: modules/process/lno_synth.c:269 modules/process/pat_synth.c:214
+#: modules/process/lno_synth.c:267 modules/process/pat_synth.c:214
msgid "Ridges"
msgstr ""
-#: modules/process/lno_synth.c:275
+#: modules/process/lno_synth.c:273
msgid "Generates various kinds of line noise."
msgstr ""
-#: modules/process/lno_synth.c:289
+#: modules/process/lno_synth.c:287
msgid "/S_ynthetic/_Line Noise..."
msgstr ""
-#: modules/process/lno_synth.c:293
+#: modules/process/lno_synth.c:291
msgid "Generate line noise"
msgstr ""
-#: modules/process/lno_synth.c:431
+#: modules/process/lno_synth.c:429
msgid "Line Noise"
msgstr ""
-#: modules/process/lno_synth.c:504
+#: modules/process/lno_synth.c:502
msgid "Distribution"
msgstr ""
-#: modules/process/lno_synth.c:514 modules/process/noise_synth.c:414
-msgid "Direction:"
+#: modules/process/lno_synth.c:512 modules/process/mask_noisify.c:158
+#: modules/process/noise_synth.c:412
+msgid "Noise type:"
msgstr ""
-#: modules/process/lno_synth.c:523 modules/process/noise_synth.c:423
+#: modules/process/lno_synth.c:521 modules/process/mask_noisify.c:167
+#: modules/process/noise_synth.c:421
msgid "S_ymmetrical"
msgstr ""
-#: modules/process/lno_synth.c:524 modules/process/noise_synth.c:424
+#: modules/process/lno_synth.c:522 modules/process/mask_noisify.c:168
+#: modules/process/noise_synth.c:422
msgid "One-sided _positive"
msgstr ""
-#: modules/process/lno_synth.c:525 modules/process/noise_synth.c:425
+#: modules/process/lno_synth.c:523 modules/process/mask_noisify.c:169
+#: modules/process/noise_synth.c:423
msgid "One-sided _negative"
msgstr ""
-#: modules/process/lno_synth.c:546
+#: modules/process/lno_synth.c:544
msgid "Noise Type"
msgstr ""
-#: modules/process/lno_synth.c:551
+#: modules/process/lno_synth.c:549
msgid "_Noise type:"
msgstr ""
-#: modules/process/lno_synth.c:853 modules/process/lno_synth.c:1222
-msgid "Densi_ty:"
-msgstr ""
-
-#: modules/process/lno_synth.c:864 modules/process/lno_synth.c:1233
+#: modules/process/lno_synth.c:863 modules/process/lno_synth.c:1233
msgid "_Within line:"
msgstr ""
-#: modules/process/lno_synth.c:871
+#: modules/process/lno_synth.c:870
msgid "C_umulative"
msgstr ""
@@ -10874,31 +11209,31 @@ msgstr ""
msgid "_Train logistic regression"
msgstr ""
-#: modules/process/logistic.c:275
+#: modules/process/logistic.c:274
msgid "_Gaussian blur"
msgstr ""
-#: modules/process/logistic.c:288
+#: modules/process/logistic.c:285
msgid "_Number of Gaussians:"
msgstr ""
-#: modules/process/logistic.c:296
+#: modules/process/logistic.c:293
msgid "_Sobel derivatives"
msgstr ""
-#: modules/process/logistic.c:307
+#: modules/process/logistic.c:303
msgid "_Laplacian"
msgstr ""
-#: modules/process/logistic.c:318
+#: modules/process/logistic.c:313
msgid "_Hessian"
msgstr ""
-#: modules/process/logistic.c:331
+#: modules/process/logistic.c:325
msgid "_Regularization parameter:"
msgstr ""
-#: modules/process/logistic.c:623 modules/process/neural.c:1101
+#: modules/process/logistic.c:616 modules/process/neural.c:1108
msgid "Training..."
msgstr ""
@@ -10914,13 +11249,13 @@ msgstr ""
msgid "Mark data disconnected from other values"
msgstr ""
-#: modules/process/mark_disconn.c:187 modules/process/obj_synth.c:422
-#: modules/process/scars.c:279
+#: modules/process/mark_disconn.c:187 modules/process/obj_synth.c:419
+#: modules/process/scars.c:297
msgid "Positive"
msgstr ""
-#: modules/process/mark_disconn.c:188 modules/process/obj_synth.c:423
-#: modules/process/scars.c:280
+#: modules/process/mark_disconn.c:188 modules/process/obj_synth.c:420
+#: modules/process/scars.c:298
msgid "Negative"
msgstr ""
@@ -10936,11 +11271,11 @@ msgstr ""
msgid "Defect _radius:"
msgstr ""
-#: modules/process/mark_disconn.c:563
+#: modules/process/mark_disconn.c:552
msgid "Filtering..."
msgstr ""
-#: modules/process/mark_disconn.c:590
+#: modules/process/mark_disconn.c:579
msgid "Marking outliers..."
msgstr ""
@@ -10956,55 +11291,59 @@ msgstr ""
msgid "Mask combining and modification"
msgstr ""
-#: modules/process/mark_with.c:192
+#: modules/process/mark_with.c:193
msgid "Mark With"
msgstr ""
-#: modules/process/mark_with.c:238
-msgid "Se_t mask"
+#: modules/process/mark_with.c:231 modules/process/mask_morph.c:209
+msgid "Operation:"
msgstr ""
#: modules/process/mark_with.c:239
-msgid "_Add mask"
+msgid "Se_t mask"
msgstr ""
#: modules/process/mark_with.c:240
-msgid "_Subtract mask"
+msgid "_Add mask"
msgstr ""
#: modules/process/mark_with.c:241
+msgid "_Subtract mask"
+msgstr ""
+
+#: modules/process/mark_with.c:242
msgid "_Intersect masks"
msgstr ""
-#: modules/process/mark_with.c:247
+#: modules/process/mark_with.c:248
msgid "Mark with:"
msgstr ""
-#: modules/process/mark_with.c:255
+#: modules/process/mark_with.c:256
msgid "with|_Mask"
msgstr ""
-#: modules/process/mark_with.c:257
+#: modules/process/mark_with.c:258
msgid "with|_Data"
msgstr ""
-#: modules/process/mark_with.c:259
+#: modules/process/mark_with.c:260
msgid "with|_Presentation"
msgstr ""
-#: modules/process/mark_with.c:293
+#: modules/process/mark_with.c:297
msgid "Marked data range:"
msgstr ""
-#: modules/process/mark_with.c:301
+#: modules/process/mark_with.c:305
msgid "_Minimum:"
msgstr ""
-#: modules/process/mark_with.c:310
+#: modules/process/mark_with.c:314
msgid "M_aximum:"
msgstr ""
-#: modules/process/mark_with.c:378
+#: modules/process/mark_with.c:382
msgid "Operand"
msgstr ""
@@ -11040,107 +11379,107 @@ msgstr ""
msgid "Preserve existing masks"
msgstr ""
-#: modules/process/mask_edt.c:95
+#: modules/process/mask_edt.c:89
msgid "Performs simple and true Euclidean distance transforms of masks."
msgstr ""
-#: modules/process/mask_edt.c:109
+#: modules/process/mask_edt.c:103
msgid "/_Mask/Distanc_e Transform..."
msgstr ""
-#: modules/process/mask_edt.c:113
+#: modules/process/mask_edt.c:107
msgid "Distance transform of mask"
msgstr ""
-#: modules/process/mask_edt.c:116
+#: modules/process/mask_edt.c:110
msgid "/_Mask/Thi_n"
msgstr ""
-#: modules/process/mask_edt.c:120
+#: modules/process/mask_edt.c:114
msgid "Thin mask"
msgstr ""
-#: modules/process/mask_edt.c:330 modules/process/mask_edt.c:352
+#: modules/process/mask_edt.c:164 modules/process/mask_edt.c:186
msgid "Distance Transform"
msgstr ""
-#: modules/process/mask_edt.c:340
+#: modules/process/mask_edt.c:174
msgid "Interior"
msgstr ""
-#: modules/process/mask_edt.c:341
+#: modules/process/mask_edt.c:175
msgid "Exterior"
msgstr ""
-#: modules/process/mask_edt.c:342
+#: modules/process/mask_edt.c:176
msgid "Two-sided"
msgstr ""
-#: modules/process/mask_edt.c:373 modules/tools/maskedit.c:634
+#: modules/process/mask_edt.c:207 modules/tools/maskedit.c:640
msgid "_Distance type:"
msgstr ""
-#: modules/process/mask_edt.c:394 modules/tools/maskedit.c:640
+#: modules/process/mask_edt.c:228 modules/tools/maskedit.c:646
msgid "Shrink from _border"
msgstr ""
-#: modules/process/mask_morph.c:117
+#: modules/process/mask_morph.c:116
msgid "Performs basic morphological operations with masks."
msgstr ""
-#: modules/process/mask_morph.c:131
-msgid "/_Mask/Morphological Operation..."
+#: modules/process/mask_morph.c:130
+msgid "/_Mask/Morpho_logical Operation..."
msgstr ""
-#: modules/process/mask_morph.c:135
+#: modules/process/mask_morph.c:134
msgid "Morphological operation with mask"
msgstr ""
-#: modules/process/mask_morph.c:169
+#: modules/process/mask_morph.c:168
msgid "Erosion"
msgstr ""
-#: modules/process/mask_morph.c:170
+#: modules/process/mask_morph.c:169
msgid "Dilation"
msgstr ""
-#: modules/process/mask_morph.c:171 modules/tools/filter.c:242
+#: modules/process/mask_morph.c:170 modules/tools/filter.c:243
msgid "filter|Opening"
msgstr ""
-#: modules/process/mask_morph.c:172 modules/tools/filter.c:243
+#: modules/process/mask_morph.c:171 modules/tools/filter.c:244
msgid "filter|Closing"
msgstr ""
-#: modules/process/mask_morph.c:173 modules/tools/filter.c:244
+#: modules/process/mask_morph.c:172 modules/tools/filter.c:245
msgid "ASF Opening"
msgstr ""
-#: modules/process/mask_morph.c:174 modules/tools/filter.c:245
+#: modules/process/mask_morph.c:173 modules/tools/filter.c:246
msgid "ASF Closing"
msgstr ""
-#: modules/process/mask_morph.c:178
+#: modules/process/mask_morph.c:177
msgid "Octagon"
msgstr ""
-#: modules/process/mask_morph.c:181
+#: modules/process/mask_morph.c:180
msgid "Another mask"
msgstr ""
-#: modules/process/mask_morph.c:192
+#: modules/process/mask_morph.c:191
msgid "Morphological Operation"
msgstr ""
-#: modules/process/mask_morph.c:224
+#: modules/process/mask_morph.c:223
msgid "Structuring element:"
msgstr ""
-#: modules/process/mask_morph.c:238 modules/tools/maskedit.c:524
+#: modules/process/mask_morph.c:237 modules/tools/maskedit.c:528
msgid "_Radius:"
msgstr ""
-#: modules/process/mask_morph.c:249
+#: modules/process/mask_morph.c:248
msgid "_Mask:"
msgstr ""
@@ -11148,39 +11487,59 @@ msgstr ""
msgid "_Trim empty borders"
msgstr ""
-#: modules/process/maskcor.c:86
+#: modules/process/mask_noisify.c:83
+msgid "Adds salt and/or pepper noise to mask."
+msgstr ""
+
+#: modules/process/mask_noisify.c:97
+msgid "/_Mask/_Noisify..."
+msgstr ""
+
+#: modules/process/mask_noisify.c:101
+msgid "Add noise to mask"
+msgstr ""
+
+#: modules/process/mask_noisify.c:141
+msgid "Noisify Mask"
+msgstr ""
+
+#: modules/process/mask_noisify.c:184
+msgid "_Alter only boundaries"
+msgstr ""
+
+#: modules/process/maskcor.c:87
msgid "Creates mask by correlation with another data."
msgstr ""
-#: modules/process/maskcor.c:100
+#: modules/process/maskcor.c:101
msgid "/M_ultidata/_Mask by Correlation..."
msgstr ""
-#: modules/process/maskcor.c:104
+#: modules/process/maskcor.c:105
msgid "Create mask by correlation with another data"
msgstr ""
-#: modules/process/maskcor.c:141
+#: modules/process/maskcor.c:142
msgid "Mask by Correlation"
msgstr ""
-#: modules/process/maskcor.c:165
+#: modules/process/maskcor.c:166
msgid "Correlation _kernel:"
msgstr ""
-#: modules/process/maskcor.c:172
+#: modules/process/maskcor.c:173
msgid "Objects marked"
msgstr ""
-#: modules/process/maskcor.c:173
+#: modules/process/maskcor.c:174
msgid "Correlation maxima"
msgstr ""
-#: modules/process/maskcor.c:174 modules/process/maskcor.c:356
+#: modules/process/maskcor.c:175 modules/process/maskcor.c:360
msgid "Correlation score"
msgstr ""
-#: modules/process/maskcor.c:183
+#: modules/process/maskcor.c:185
msgid "Correlation _method:"
msgstr ""
@@ -11209,7 +11568,7 @@ msgid "/_Mask/_Extract Mask"
msgstr ""
#: modules/process/maskops.c:78
-msgid "Extract mask to a new channel"
+msgid "Extract mask to a new image"
msgstr ""
#: modules/process/maskops.c:81
@@ -11236,35 +11595,31 @@ msgstr ""
msgid "Mutual Crop"
msgstr ""
-#: modules/process/mcrop.c:174
+#: modules/process/mcrop.c:173
msgid "_Select second argument:"
msgstr ""
-#: modules/process/measure_lattice.c:174
+#: modules/process/measure_lattice.c:165
msgid "Measures parameters of two-dimensional lattices."
msgstr ""
-#: modules/process/measure_lattice.c:188
+#: modules/process/measure_lattice.c:179
msgid "/_Statistics/Measure _Lattice..."
msgstr ""
-#: modules/process/measure_lattice.c:192
+#: modules/process/measure_lattice.c:183
msgid "Measure lattice"
msgstr ""
-#: modules/process/measure_lattice.c:253
+#: modules/process/measure_lattice.c:243
msgid "Measure Lattice"
msgstr ""
-#: modules/process/measure_lattice.c:259
-msgid "_Refine"
-msgstr ""
-
-#: modules/process/measure_lattice.c:330
+#: modules/process/measure_lattice.c:320
msgid "_ACF"
msgstr ""
-#: modules/process/measure_lattice.c:331
+#: modules/process/measure_lattice.c:321
msgid "_PSDF"
msgstr ""
@@ -11280,30 +11635,30 @@ msgstr ""
msgid "_Vectors"
msgstr ""
-#: modules/process/measure_lattice.c:596
+#: modules/process/measure_lattice.c:589
msgid "Save Lattice Parameters"
msgstr ""
-#: modules/process/measure_lattice.c:634
+#: modules/process/measure_lattice.c:627
#, c-format
msgid "Vector %d:"
msgstr ""
-#: modules/process/measure_lattice.c:643
+#: modules/process/measure_lattice.c:636
#, c-format
msgid "Length %d:"
msgstr ""
-#: modules/process/measure_lattice.c:650
+#: modules/process/measure_lattice.c:643
#, c-format
msgid "Angle %d:"
msgstr ""
-#: modules/process/measure_lattice.c:665
+#: modules/process/measure_lattice.c:657
msgid "Angle:"
msgstr ""
-#: modules/process/measure_lattice.c:681
+#: modules/process/measure_lattice.c:673
msgid "Lattice Parameters"
msgstr ""
@@ -11327,11 +11682,11 @@ msgstr ""
msgid "Median Level"
msgstr ""
-#: modules/process/median-bg.c:199 modules/process/sphere-revolve.c:237
+#: modules/process/median-bg.c:199 modules/process/sphere-revolve.c:336
msgid "Real _radius:"
msgstr ""
-#: modules/process/median-bg.c:209 modules/process/sphere-revolve.c:247
+#: modules/process/median-bg.c:209 modules/process/sphere-revolve.c:346
msgid "_Pixel radius:"
msgstr ""
@@ -11371,7 +11726,7 @@ msgstr ""
msgid "Second operand"
msgstr ""
-#: modules/process/merge.c:197 modules/xyz/xyz_raster.c:643
+#: modules/process/merge.c:197 modules/xyz/xyz_raster.c:612
msgid "Average"
msgstr ""
@@ -11423,48 +11778,263 @@ msgstr ""
msgid "Merged images"
msgstr ""
-#: modules/process/nanoindent_adjust.c:89
-msgid "Adjust images of two indentor prints."
+#: modules/process/mfm_current.c:163
+msgid "Simulation of current line magnetic field"
msgstr ""
-#: modules/process/nanoindent_adjust.c:103
-msgid "/_Tip and Indentation/Ad_just..."
+#: modules/process/mfm_current.c:177
+msgid "/SPM M_odes/_MFM/_Current Line Field..."
msgstr ""
-#: modules/process/nanoindent_adjust.c:107
-msgid "Adjust two nanoindentation imprints"
+#: modules/process/mfm_current.c:181
+msgid "Simulate stray field above current line"
msgstr ""
-#: modules/process/nanoindent_adjust.c:160
-msgid "Imprints adjustment"
+#: modules/process/mfm_current.c:280 modules/process/mfm_parallel.c:282
+msgid "Simulated field"
msgstr ""
-#: modules/process/nanoindent_adjust.c:175
-msgid "_Indentor model imprint:"
+#: modules/process/mfm_current.c:322 modules/process/mfm_field.c:266
+#: modules/process/mfm_parallel.c:324
+msgid "Point charge"
msgstr ""
-#: modules/process/nanoindent_adjust.c:186
-msgid "Imprint to be _adjusted:"
+#: modules/process/mfm_current.c:323 modules/process/mfm_field.c:267
+#: modules/process/mfm_parallel.c:325
+msgid "Bar"
msgstr ""
-#: modules/process/nanoindent_adjust.c:197
-msgid "_Move data"
+#: modules/process/mfm_current.c:330
+msgid "Current Line Stray Field"
msgstr ""
-#: modules/process/nanoindent_adjust.c:206
-msgid "_Rotate data"
+#: modules/process/mfm_current.c:415
+msgid "Output"
msgstr ""
-#: modules/process/nanoindent_adjust.c:215
-msgid "E_xtrapolate result data out of measured range"
+#: modules/process/mfm_current.c:420 modules/process/mfm_field.c:320
+#: modules/process/mfm_parallel.c:415
+msgid "_Output plane height:"
msgstr ""
-#: modules/process/nanoindent_adjust.c:295
+#: modules/process/mfm_current.c:428
+msgid "_Stripe width:"
+msgstr ""
+
+#: modules/process/mfm_current.c:436
+msgid "Stripe _current:"
+msgstr ""
+
+#: modules/process/mfm_current.c:444
+msgid "_Position:"
+msgstr ""
+
+#: modules/process/mfm_current.c:461
+msgid "Probe"
+msgstr ""
+
+#: modules/process/mfm_current.c:469
+msgid "P_robe type:"
+msgstr ""
+
+#: modules/process/mfm_current.c:475 modules/process/mfm_field.c:389
+#: modules/process/mfm_parallel.c:482
+msgid "Tip _magnetization:"
+msgstr ""
+
+#: modules/process/mfm_current.c:484 modules/process/mfm_field.c:397
+#: modules/process/mfm_parallel.c:491
+msgid "Bar width _x:"
+msgstr ""
+
+#: modules/process/mfm_current.c:493 modules/process/mfm_field.c:405
+#: modules/process/mfm_parallel.c:500
+msgid "Bar width _y:"
+msgstr ""
+
+#: modules/process/mfm_current.c:502 modules/process/mfm_field.c:413
+#: modules/process/mfm_parallel.c:509
+msgid "Bar length (_z):"
+msgstr ""
+
+#: modules/process/mfm_field.c:146
+msgid "Simulation of magnetic field above perpendicular media"
+msgstr ""
+
+#: modules/process/mfm_field.c:160
+msgid "/SPM M_odes/_MFM/_Perpendicular Media Field..."
+msgstr ""
+
+#: modules/process/mfm_field.c:164
+msgid "Compute stray field above perpendicular magnetic medium"
+msgstr ""
+
+#: modules/process/mfm_field.c:276
+msgid "Perpendicular Media Stray Field"
+msgstr ""
+
+#: modules/process/mfm_field.c:328 modules/process/mfm_parallel.c:423
+msgid "_Film thickness:"
+msgstr ""
+
+#: modules/process/mfm_field.c:336
+msgid "_Magnetic charge:"
+msgstr ""
+
+#: modules/process/mfm_field.c:344
+msgid "Include domain _walls"
+msgstr ""
+
+#: modules/process/mfm_field.c:354
+msgid "_Exchange constant:"
+msgstr ""
+
+#: modules/process/mfm_field.c:362
+msgid "_Uniaxial anisotropy:"
+msgstr ""
+
+#: modules/process/mfm_field.c:383 modules/process/mfm_parallel.c:476
+msgid "_Probe type:"
+msgstr ""
+
+#: modules/process/mfm_findshift.c:88
+msgid "Lift height difference estimation from data blur"
+msgstr ""
+
+#: modules/process/mfm_findshift.c:102
+msgid "/SPM M_odes/_MFM/_Estimate Shift in Z..."
+msgstr ""
+
+#: modules/process/mfm_findshift.c:106
+msgid "Estimate lift height difference in MFM data"
+msgstr ""
+
+#: modules/process/mfm_findshift.c:166 modules/process/psf.c:340
+msgid "Searching..."
+msgstr ""
+
+#: modules/process/mfm_findshift.c:196
+msgid "Estimated shift:"
+msgstr ""
+
+#: modules/process/mfm_findshift.c:211
+msgid "Shifted field difference"
+msgstr ""
+
+#: modules/process/mfm_findshift.c:228
+msgid "Estimate Lift Height Shift"
+msgstr ""
+
+#: modules/process/mfm_findshift.c:255
+msgid "Data to compare:"
+msgstr ""
+
+#: modules/process/mfm_findshift.c:261
+msgid "Search _from:"
+msgstr ""
+
+#: modules/process/mfm_findshift.c:269
+msgid "Search _to:"
+msgstr ""
+
+#: modules/process/mfm_parallel.c:165
+msgid "Simulation of parallel magnetic media"
+msgstr ""
+
+#: modules/process/mfm_parallel.c:179
+msgid "/SPM M_odes/_MFM/Para_llel Media Field..."
+msgstr ""
+
+#: modules/process/mfm_parallel.c:183
+msgid "Simulate stray field above parallel magnetic medium"
+msgstr ""
+
+#: modules/process/mfm_parallel.c:331
+msgid "Parallel Media Stray Field"
+msgstr ""
+
+#: modules/process/mfm_parallel.c:431
+msgid "_Remanent magnetization:"
+msgstr ""
+
+#: modules/process/mfm_parallel.c:439
+msgid "Size _A (dir. left):"
+msgstr ""
+
+#: modules/process/mfm_parallel.c:447
+msgid "Size _B (dir. right):"
+msgstr ""
+
+#: modules/process/mfm_parallel.c:455
+msgid "_Gap size:"
+msgstr ""
+
+#: modules/process/mfm_shift.c:87
+msgid "Simulation of magnetic field z component change for another level"
+msgstr ""
+
+#: modules/process/mfm_shift.c:101
+msgid "/SPM M_odes/_MFM/_Field Shift in Z..."
+msgstr ""
+
+#: modules/process/mfm_shift.c:105
+msgid "Compute stray field shift for another z level"
+msgstr ""
+
+#: modules/process/mfm_shift.c:146
+msgid "Shifted field"
+msgstr ""
+
+#: modules/process/mfm_shift.c:164
+msgid "Stray Field Plane Shift"
+msgstr ""
+
+#: modules/process/mfm_shift.c:209
+msgid "_Z shift by:"
+msgstr ""
+
+#: modules/process/nanoindent_adjust.c:89
+msgid "Adjust images of two indentor prints."
+msgstr ""
+
+#: modules/process/nanoindent_adjust.c:103
+msgid "/_Tip and Indentation/Ad_just..."
+msgstr ""
+
+#: modules/process/nanoindent_adjust.c:107
+msgid "Adjust two nanoindentation imprints"
+msgstr ""
+
+#: modules/process/nanoindent_adjust.c:160
+msgid "Imprints adjustment"
+msgstr ""
+
+#: modules/process/nanoindent_adjust.c:175
+msgid "_Indentor model imprint:"
+msgstr ""
+
+#: modules/process/nanoindent_adjust.c:186
+msgid "Imprint to be _adjusted:"
+msgstr ""
+
+#: modules/process/nanoindent_adjust.c:197
+msgid "_Move data"
+msgstr ""
+
+#: modules/process/nanoindent_adjust.c:206
+msgid "_Rotate data"
+msgstr ""
+
+#: modules/process/nanoindent_adjust.c:215
+msgid "E_xtrapolate result data out of measured range"
+msgstr ""
+
+#: modules/process/nanoindent_adjust.c:296
msgid ""
"Tip has different range/resolution ratio than image. Tip will be resampled."
msgstr ""
-#: modules/process/nanoindent_adjust.c:334
+#: modules/process/nanoindent_adjust.c:335
msgid "Immersed detail data"
msgstr ""
@@ -11505,244 +12075,232 @@ msgstr ""
msgid "error"
msgstr ""
-#: modules/process/neural.c:503
+#: modules/process/neural.c:504
msgid "NN training error"
msgstr ""
-#: modules/process/neural.c:516
+#: modules/process/neural.c:517
msgid "Training"
msgstr ""
-#: modules/process/neural.c:520
+#: modules/process/neural.c:521
msgid "_Model:"
msgstr ""
-#: modules/process/neural.c:530
+#: modules/process/neural.c:532
msgid "_Signal:"
msgstr ""
-#: modules/process/neural.c:541
+#: modules/process/neural.c:544
msgid "Training ste_ps:"
msgstr ""
-#: modules/process/neural.c:557
+#: modules/process/neural.c:561
msgid "Model"
msgstr ""
-#: modules/process/neural.c:558
+#: modules/process/neural.c:562
msgid "Signal"
msgstr ""
-#: modules/process/neural.c:575
+#: modules/process/neural.c:579
msgid "verb|_Train"
msgstr ""
-#: modules/process/neural.c:580
+#: modules/process/neural.c:584
msgid "Re_initialize"
msgstr ""
-#: modules/process/neural.c:613
+#: modules/process/neural.c:617
msgid "Network"
msgstr ""
-#: modules/process/neural.c:619
+#: modules/process/neural.c:623
msgid "Window _width:"
msgstr ""
-#: modules/process/neural.c:627
+#: modules/process/neural.c:631
msgid "Window h_eight:"
msgstr ""
-#: modules/process/neural.c:635
+#: modules/process/neural.c:639
msgid "_Hidden nodes:"
msgstr ""
-#: modules/process/neural.c:643
+#: modules/process/neural.c:647
msgid "Result Units"
msgstr ""
-#: modules/process/neural.c:650
+#: modules/process/neural.c:654
msgid "Power of source _XY:"
msgstr ""
-#: modules/process/neural.c:658
+#: modules/process/neural.c:663
msgid "Power of source _Z:"
msgstr ""
-#: modules/process/neural.c:666
+#: modules/process/neural.c:672
msgid "_Fixed units:"
msgstr ""
-#: modules/process/neural.c:676
+#: modules/process/neural.c:683
msgid "Networks"
msgstr ""
-#: modules/process/neural.c:723
+#: modules/process/neural.c:730
msgid "Network _name:"
msgstr ""
-#: modules/process/neural.c:775
+#: modules/process/neural.c:782
msgid "Apply Neural Network"
msgstr ""
-#: modules/process/neural.c:798
+#: modules/process/neural.c:805
msgid "_Scale proportionally to input"
msgstr ""
-#: modules/process/neural.c:929
+#: modules/process/neural.c:936
msgid "Model and signal are not compatible."
msgstr ""
-#: modules/process/neural.c:937
+#: modules/process/neural.c:944
msgid "A field dimension is too small for chosen window size."
msgstr ""
-#: modules/process/neural.c:1183 modules/process/neural.c:1349
+#: modules/process/neural.c:1190 modules/process/neural.c:1356
msgid "Evaluating..."
msgstr ""
-#: modules/process/neural.c:1309
+#: modules/process/neural.c:1316
msgid "Training was canceled."
msgstr ""
-#: modules/process/neural.c:1319
+#: modules/process/neural.c:1326
#, c-format
msgid "Mean difference: %.*f %s"
msgstr ""
-#: modules/process/neural.c:1371
+#: modules/process/neural.c:1378
msgid "Evaluated signal"
msgstr ""
-#: modules/process/noise_synth.c:196
+#: modules/process/noise_synth.c:194
msgid "Generates uncorrelated random noise."
msgstr ""
-#: modules/process/noise_synth.c:210
+#: modules/process/noise_synth.c:208
msgid "/S_ynthetic/_Noise..."
msgstr ""
-#: modules/process/noise_synth.c:214
+#: modules/process/noise_synth.c:212
msgid "Generate surface of uncorrelated noise"
msgstr ""
-#: modules/process/noise_synth.c:334
+#: modules/process/noise_synth.c:332
msgid "Random Noise"
msgstr ""
-#: modules/process/obj_synth.c:274
+#: modules/process/obj_synth.c:270
msgid "Spheres"
msgstr ""
-#: modules/process/obj_synth.c:275
+#: modules/process/obj_synth.c:271
msgid "Boxes"
msgstr ""
-#: modules/process/obj_synth.c:276
+#: modules/process/obj_synth.c:272
msgid "Cones"
msgstr ""
-#: modules/process/obj_synth.c:277
+#: modules/process/obj_synth.c:273
msgid "Pyramids"
msgstr ""
-#: modules/process/obj_synth.c:278
+#: modules/process/obj_synth.c:274
msgid "Diamonds"
msgstr ""
-#: modules/process/obj_synth.c:279
+#: modules/process/obj_synth.c:275
msgid "Tetrahedrons"
msgstr ""
-#: modules/process/obj_synth.c:280
+#: modules/process/obj_synth.c:276
msgid "Nuggets"
msgstr ""
-#: modules/process/obj_synth.c:281
+#: modules/process/obj_synth.c:277
msgid "Thatches"
msgstr ""
-#: modules/process/obj_synth.c:282
+#: modules/process/obj_synth.c:278
msgid "Tents"
msgstr ""
-#: modules/process/obj_synth.c:283
+#: modules/process/obj_synth.c:279
msgid "Gaussians"
msgstr ""
-#: modules/process/obj_synth.c:284
+#: modules/process/obj_synth.c:280
msgid "Doughnuts"
msgstr ""
-#: modules/process/obj_synth.c:285
+#: modules/process/obj_synth.c:281
msgid "Parabolic bumps"
msgstr ""
-#: modules/process/obj_synth.c:291
+#: modules/process/obj_synth.c:287
msgid "Generates randomly patterned surfaces by placing objects."
msgstr ""
-#: modules/process/obj_synth.c:305
-msgid "/S_ynthetic/_Objects..."
+#: modules/process/obj_synth.c:301
+msgid "/S_ynthetic/_Deposition/_Objects..."
msgstr ""
-#: modules/process/obj_synth.c:309
+#: modules/process/obj_synth.c:305
msgid "Generate surface of randomly placed objects"
msgstr ""
-#: modules/process/obj_synth.c:424
+#: modules/process/obj_synth.c:421
msgid "Both (random)"
msgstr ""
-#: modules/process/obj_synth.c:439
+#: modules/process/obj_synth.c:436
msgid "Random Objects"
msgstr ""
-#: modules/process/obj_synth.c:513
-msgid "_Shape:"
-msgstr ""
-
-#: modules/process/obj_synth.c:531
-msgid "obj."
-msgstr ""
-
-#: modules/process/obj_synth.c:551
+#: modules/process/obj_synth.c:549
msgid "Aspect Ratio"
msgstr ""
-#: modules/process/obj_synth.c:558
+#: modules/process/obj_synth.c:556
msgid "_Aspect ratio:"
msgstr ""
-#: modules/process/obj_synth.c:588
+#: modules/process/obj_synth.c:586
msgid "Scales _with size"
msgstr ""
-#: modules/process/obj_synth.c:612
+#: modules/process/obj_synth.c:611
msgid "_Feature type:"
msgstr ""
-#: modules/process/obj_synth.c:807
-msgid "_Truncate:"
-msgstr ""
-
-#: modules/process/otsu_threshold.c:39 modules/process/otsu_threshold.c:59
+#: modules/process/otsu_threshold.c:40 modules/process/otsu_threshold.c:60
msgid "Automated threshold using Otsu's method on heights."
msgstr ""
-#: modules/process/otsu_threshold.c:55
-msgid "/_Grains/_Mark by Otsu's..."
+#: modules/process/otsu_threshold.c:56
+msgid "/_Grains/_Mark by Otsu's"
msgstr ""
-#: modules/process/outliers.c:40
+#: modules/process/outliers.c:41
msgid "Creates mask of outliers."
msgstr ""
-#: modules/process/outliers.c:54
+#: modules/process/outliers.c:55
msgid "/_Correct Data/Mask of _Outliers"
msgstr ""
-#: modules/process/outliers.c:58
+#: modules/process/outliers.c:59
msgid "Mark data farther than 3σ from mean value"
msgstr ""
@@ -11766,80 +12324,100 @@ msgstr ""
msgid "_Pattern:"
msgstr ""
-#: modules/process/pat_synth.c:812
+#: modules/process/pat_synth.c:813
msgid "Flat"
msgstr ""
-#: modules/process/pat_synth.c:820
+#: modules/process/pat_synth.c:821
msgid "_Flat width:"
msgstr ""
-#: modules/process/pat_synth.c:837 modules/process/pat_synth.c:1139
-#: modules/process/pat_synth.c:1474
+#: modules/process/pat_synth.c:838 modules/process/pat_synth.c:1140
+#: modules/process/pat_synth.c:1475
msgid "_Slope width:"
msgstr ""
-#: modules/process/pat_synth.c:1099
+#: modules/process/pat_synth.c:1100
msgid "Top"
msgstr ""
-#: modules/process/pat_synth.c:1106
+#: modules/process/pat_synth.c:1107
msgid "Flat _top width:"
msgstr ""
-#: modules/process/pat_synth.c:1114
+#: modules/process/pat_synth.c:1115
msgid "Bottom"
msgstr ""
-#: modules/process/pat_synth.c:1122
+#: modules/process/pat_synth.c:1123
msgid "Flat _bottom width:"
msgstr ""
-#: modules/process/pat_synth.c:1440
+#: modules/process/pat_synth.c:1441
msgid "_Distance:"
msgstr ""
-#: modules/process/pid.c:96
+#: modules/process/phase_synth.c:136
+msgid "Generates phase-separated structures."
+msgstr ""
+
+#: modules/process/phase_synth.c:150
+msgid "/S_ynthetic/P_hases..."
+msgstr ""
+
+#: modules/process/phase_synth.c:154
+msgid "Generate surface with separated phases"
+msgstr ""
+
+#: modules/process/phase_synth.c:203
+msgid "Separated Phases"
+msgstr ""
+
+#: modules/process/phase_synth.c:287
+msgid "Size s_pread:"
+msgstr ""
+
+#: modules/process/pid.c:95
msgid "A simple PID simulator"
msgstr ""
-#: modules/process/pid.c:110
+#: modules/process/pid.c:109
msgid "/_Tip and Indentation/_PID simulation..."
msgstr ""
-#: modules/process/pid.c:114
+#: modules/process/pid.c:113
msgid "Simulate PID effects on measurement"
msgstr ""
-#: modules/process/pid.c:158
+#: modules/process/pid.c:157
msgid "PID FW result"
msgstr ""
-#: modules/process/pid.c:167
+#: modules/process/pid.c:166
msgid "PID FW max. force"
msgstr ""
-#: modules/process/pid.c:176
+#: modules/process/pid.c:175
msgid "PID REV result"
msgstr ""
-#: modules/process/pid.c:185
+#: modules/process/pid.c:184
msgid "PID REV max. force"
msgstr ""
-#: modules/process/pid.c:198
+#: modules/process/pid.c:196
msgid "PID simulation"
msgstr ""
-#: modules/process/pid.c:215
+#: modules/process/pid.c:214
msgid "_Proportional:"
msgstr ""
-#: modules/process/pid.c:221
+#: modules/process/pid.c:220
msgid "_Integral:"
msgstr ""
-#: modules/process/pid.c:227
+#: modules/process/pid.c:226
msgid "_Integration steps:"
msgstr ""
@@ -11847,15 +12425,15 @@ msgstr ""
msgid "_Derivative:"
msgstr ""
-#: modules/process/pid.c:241
+#: modules/process/pid.c:240
msgid "PID/scan speed _ratio:"
msgstr ""
-#: modules/process/pid.c:253
+#: modules/process/pid.c:255
msgid "Force strength:"
msgstr ""
-#: modules/process/pid.c:259
+#: modules/process/pid.c:261
msgid "Force setpoint:"
msgstr ""
@@ -11863,7 +12441,7 @@ msgstr ""
msgid "Scanning..."
msgstr ""
-#: modules/process/pid.c:396
+#: modules/process/pid.c:401
msgid "Computation diverged, try to change parameters"
msgstr ""
@@ -11883,23 +12461,23 @@ msgstr ""
msgid "Distort by Polynomial"
msgstr ""
-#: modules/process/polydistort.c:282
+#: modules/process/polydistort.c:285
msgid "Ori_ginal"
msgstr ""
-#: modules/process/polydistort.c:283
+#: modules/process/polydistort.c:286
msgid "_Transformed"
msgstr ""
-#: modules/process/polydistort.c:289
+#: modules/process/polydistort.c:292
msgid "X Coefficients"
msgstr ""
-#: modules/process/polydistort.c:303
+#: modules/process/polydistort.c:306
msgid "Y Coefficients"
msgstr ""
-#: modules/process/polydistort.c:499
+#: modules/process/polydistort.c:502
msgid "Distorted"
msgstr ""
@@ -11935,23 +12513,23 @@ msgstr ""
msgid "_Horizontal polynom degree:"
msgstr ""
-#: modules/process/polylevel.c:450
+#: modules/process/polylevel.c:451
msgid "_Vertical polynom degree:"
msgstr ""
-#: modules/process/polylevel.c:456
+#: modules/process/polylevel.c:458
msgid "_Same degrees"
msgstr ""
-#: modules/process/polylevel.c:474
+#: modules/process/polylevel.c:476
msgid "_Maximum polynom degree:"
msgstr ""
-#: modules/process/polylevel.c:561
+#: modules/process/polylevel.c:564
msgid "Polynomial Coefficients"
msgstr ""
-#: modules/process/polylevel.c:934 modules/tools/distance.c:594
+#: modules/process/polylevel.c:937 modules/tools/distance.c:594
#: modules/tools/selectionmanager.c:720
msgid "Save Table"
msgstr ""
@@ -11973,7 +12551,7 @@ msgid "/_Presentation/E_xtract Presentation"
msgstr ""
#: modules/process/presentationops.c:81
-msgid "Extract presentation to a new channel"
+msgid "Extract presentation to a new image"
msgstr ""
#: modules/process/presentationops.c:84
@@ -12000,6 +12578,10 @@ msgstr ""
msgid "_Data to attach:"
msgstr ""
+#: modules/process/preview.h:245
+msgid "Combine with existing mask:"
+msgstr ""
+
#: modules/process/psdf_logphi.c:76
msgid ""
"Two-dimensional FFT (Fast Fourier Transform) transformed to coordinates (log-"
@@ -12018,10 +12600,79 @@ msgstr ""
msgid "Log-Phi PSDF"
msgstr ""
-#: modules/process/psdf_logphi.c:275 modules/process/wpour_mark.c:320
+#: modules/process/psdf_logphi.c:276 modules/process/wpour_mark.c:320
msgid "Gaussian _smoothing:"
msgstr ""
+#: modules/process/psf-fit.c:165
+msgid "Gaussian (asymmetric)"
+msgstr ""
+
+#: modules/process/psf-fit.c:177
+msgid "Point spread function estimation by fitting explicit function form."
+msgstr ""
+
+#: modules/process/psf-fit.c:191
+msgid "/_Statistics/_PSF Fit..."
+msgstr ""
+
+#: modules/process/psf-fit.c:195
+msgid "Fit PSF from known data and image"
+msgstr ""
+
+#: modules/process/psf-fit.c:246 modules/process/psf.c:181
+#: modules/process/psf.c:230
+msgid "PSF"
+msgstr ""
+
+#: modules/process/psf-fit.c:254 modules/process/psf.c:195
+msgid "PSF*P"
+msgstr ""
+
+#: modules/process/psf-fit.c:271
+msgid "Fit PSF"
+msgstr ""
+
+#: modules/process/psf-fit.c:289 modules/process/psf.c:286
+msgid "_Ideal response:"
+msgstr ""
+
+#: modules/process/psf.c:117
+msgid "Point spread function estimation"
+msgstr ""
+
+#: modules/process/psf.c:131
+msgid "/_Statistics/_PSF Guess..."
+msgstr ""
+
+#: modules/process/psf.c:135
+msgid "Estimate PSF from known data and image"
+msgstr ""
+
+#: modules/process/psf.c:208
+msgid "PSF*P - I"
+msgstr ""
+
+#: modules/process/psf.c:231
+msgid "Convolved"
+msgstr ""
+
+#: modules/process/psf.c:237
+msgid "Estimate PSF"
+msgstr ""
+
+#: modules/process/psf.c:238
+msgid "_Fit"
+msgstr ""
+
+#: modules/process/psf.c:295
+msgid "_Display:"
+msgstr ""
+
+#: modules/process/psf.c:301
+msgid "_Sigma init:"
+msgstr ""
+
#: modules/process/rank.c:92
msgid "Enhances local contrast using a rank transform."
msgstr ""
@@ -12070,7 +12721,7 @@ msgstr ""
msgid "Rotate by arbitrary angle"
msgstr ""
-#: modules/process/rotate.c:192
+#: modules/process/rotate.c:192 modules/volume/volume_swaxes.c:651
msgid "Rotated Data"
msgstr ""
@@ -12126,63 +12777,63 @@ msgstr ""
msgid "verb|Scale"
msgstr ""
-#: modules/process/scale.c:216
+#: modules/process/scale.c:217
msgid "Scale by _ratio:"
msgstr ""
-#: modules/process/scale.c:224
+#: modules/process/scale.c:225
msgid "_proportional"
msgstr ""
-#: modules/process/scale.c:235
+#: modules/process/scale.c:237
msgid "New _width:"
msgstr ""
-#: modules/process/scale.c:243
+#: modules/process/scale.c:246
msgid "New _height:"
msgstr ""
-#: modules/process/scars.c:113
+#: modules/process/scars.c:122
msgid "Marks and/or removes scars (horizontal linear artifacts)."
msgstr ""
-#: modules/process/scars.c:127
+#: modules/process/scars.c:136
msgid "/_Correct Data/M_ark Scars..."
msgstr ""
-#: modules/process/scars.c:131
+#: modules/process/scars.c:140
msgid "Mark horizontal scars (strokes)"
msgstr ""
-#: modules/process/scars.c:134
+#: modules/process/scars.c:143
msgid "/_Correct Data/Remove _Scars"
msgstr ""
-#: modules/process/scars.c:138
+#: modules/process/scars.c:147
msgid "Correct horizontal scars (strokes)"
msgstr ""
-#: modules/process/scars.c:293
+#: modules/process/scars.c:312
msgid "Mark Scars"
msgstr ""
-#: modules/process/scars.c:331
+#: modules/process/scars.c:353
msgid "Maximum _width:"
msgstr ""
-#: modules/process/scars.c:338
+#: modules/process/scars.c:361
msgid "Minimum _length:"
msgstr ""
-#: modules/process/scars.c:345
+#: modules/process/scars.c:369
msgid "_Hard threshold:"
msgstr ""
-#: modules/process/scars.c:353
+#: modules/process/scars.c:377
msgid "_Soft threshold:"
msgstr ""
-#: modules/process/scars.c:361
+#: modules/process/scars.c:385
msgid "Scars type:"
msgstr ""
@@ -12222,108 +12873,157 @@ msgstr ""
msgid "_Quality:"
msgstr ""
-#: modules/process/shade.c:92
+#: modules/process/shade.c:94
msgid "Creates a shaded presentation of data."
msgstr ""
-#: modules/process/shade.c:106
+#: modules/process/shade.c:108
msgid "/_Presentation/_Shading..."
msgstr ""
-#: modules/process/shade.c:110
+#: modules/process/shade.c:112
msgid "Shade data"
msgstr ""
-#: modules/process/shade.c:207
+#: modules/process/shade.c:209
msgid "Shading"
msgstr ""
-#: modules/process/shade.c:253
+#: modules/process/shade.c:260
msgid "_Mix:"
msgstr ""
-#: modules/process/slope_dist.c:161
+#: modules/process/slope_dist.c:160
msgid ""
"Calculates one- or two-dimensional distribution of slopes or graph of their "
"angular distribution."
msgstr ""
-#: modules/process/slope_dist.c:176
+#: modules/process/slope_dist.c:175
msgid "/_Statistics/_Slope Distribution..."
msgstr ""
-#: modules/process/slope_dist.c:180
+#: modules/process/slope_dist.c:179
msgid "Calculate angular slope distribution"
msgstr ""
-#: modules/process/slope_dist.c:221
+#: modules/process/slope_dist.c:220
msgid "Slope distribution"
msgstr ""
-#: modules/process/slope_dist.c:253
+#: modules/process/slope_dist.c:252
msgid "_Two-dimensional distribution"
msgstr ""
-#: modules/process/slope_dist.c:254
+#: modules/process/slope_dist.c:253
msgid "Directional (φ) _graph"
msgstr ""
-#: modules/process/slope_dist.c:255
+#: modules/process/slope_dist.c:254
msgid "_Inclination (θ) graph"
msgstr ""
-#: modules/process/slope_dist.c:256
+#: modules/process/slope_dist.c:255
msgid "Inclination (gra_dient) graph"
msgstr ""
-#: modules/process/slope_dist.c:270
+#: modules/process/slope_dist.c:269
msgid "Slope Distribution"
msgstr ""
-#: modules/process/slope_dist.c:755
+#: modules/process/slope_dist.c:749
msgid "Angular Slope Distribution"
msgstr ""
-#: modules/process/slope_dist.c:763 modules/process/tilt.c:179
+#: modules/process/slope_dist.c:757 modules/process/tilt.c:179
msgid "Slopes"
msgstr ""
-#: modules/process/slope_dist.c:824 modules/process/slope_dist.c:893
+#: modules/process/slope_dist.c:818 modules/process/slope_dist.c:887
msgid "Inclination Distribution"
msgstr ""
-#: modules/process/slope_dist.c:832 modules/process/slope_dist.c:901
+#: modules/process/slope_dist.c:826 modules/process/slope_dist.c:895
msgid "Inclinations"
msgstr ""
-#: modules/process/sphere-revolve.c:97
+#: modules/process/sphere-revolve.c:111
msgid "Subtracts background by arc or sphere revolution."
msgstr ""
-#: modules/process/sphere-revolve.c:113
+#: modules/process/sphere-revolve.c:125
msgid "/_Level/Revolve _Arc..."
msgstr ""
-#: modules/process/sphere-revolve.c:117
+#: modules/process/sphere-revolve.c:129
msgid "Level data by arc revolution"
msgstr ""
-#: modules/process/sphere-revolve.c:208 modules/tools/sfunctions.c:371
+#: modules/process/sphere-revolve.c:132
+msgid "/_Level/Revolve _Sphere..."
+msgstr ""
+
+#: modules/process/sphere-revolve.c:136
+msgid "Level data by sphere revolution"
+msgstr ""
+
+#: modules/process/sphere-revolve.c:303 modules/tools/sfunctions.c:381
msgid "_Horizontal direction"
msgstr ""
-#: modules/process/sphere-revolve.c:209 modules/tools/sfunctions.c:372
+#: modules/process/sphere-revolve.c:304 modules/tools/sfunctions.c:382
msgid "_Vertical direction"
msgstr ""
-#: modules/process/sphere-revolve.c:210
+#: modules/process/sphere-revolve.c:305
msgid "_Both directions"
msgstr ""
-#: modules/process/sphere-revolve.c:217
+#: modules/process/sphere-revolve.c:315
+msgid "Revolve Sphere"
+msgstr ""
+
+#: modules/process/sphere-revolve.c:315
msgid "Revolve Arc"
msgstr ""
+#: modules/process/sphere-revolve.c:355
+msgid "Direction:"
+msgstr ""
+
+#: modules/process/sphere-revolve.c:699
+msgid "Revolving sphere..."
+msgstr ""
+
+#: modules/process/stitch.c:135
+msgid "Stitch multiple images based on offsets of origins."
+msgstr ""
+
+#: modules/process/stitch.c:149
+msgid "/M_ultidata/_Stitch..."
+msgstr ""
+
+#: modules/process/stitch.c:153
+msgid "Stitch images using offsets"
+msgstr ""
+
+#: modules/process/stitch.c:269
+msgid "Stitch"
+msgstr ""
+
+#: modules/process/stitch.c:312
+msgid "Channels"
+msgstr ""
+
+#: modules/process/stitch.c:435
+msgid "Restore"
+msgstr ""
+
+#: modules/process/stitch.c:445 modules/tools/linestats.c:379
+#: modules/tools/sfunctions.c:440 modules/tools/stats.c:406
+msgid "_Instant updates"
+msgstr ""
+
#: modules/process/straighten_path.c:126
msgid "Extracts a straightened part of image along a curve."
msgstr ""
@@ -12340,28 +13040,28 @@ msgstr ""
msgid "Straighten Path"
msgstr ""
-#: modules/process/straighten_path.c:254
+#: modules/process/straighten_path.c:253
msgid "Res_tore"
msgstr ""
-#: modules/process/straighten_path.c:259
+#: modules/process/straighten_path.c:258
msgid "Re_verse"
msgstr ""
#: modules/process/straighten_path.c:278 modules/tools/pathlevel.c:256
-#: modules/tools/profile.c:507 modules/tools/roughness.c:854
+#: modules/tools/profile.c:503 modules/tools/roughness.c:868
msgid "_Thickness:"
msgstr ""
-#: modules/process/straighten_path.c:286
+#: modules/process/straighten_path.c:287
msgid "_Slackness:"
msgstr ""
-#: modules/process/straighten_path.c:292
+#: modules/process/straighten_path.c:293
msgid "C_losed curve"
msgstr ""
-#: modules/process/straighten_path.c:379
+#: modules/process/straighten_path.c:380
msgid "Straightened"
msgstr ""
@@ -12382,52 +13082,52 @@ msgstr ""
msgid "Supres"
msgstr ""
-#: modules/process/superresolution.c:421
+#: modules/process/superresolution.c:420
msgid "Correlating to determine mean shift..."
msgstr ""
-#: modules/process/superresolution.c:511
+#: modules/process/superresolution.c:510
msgid "Cross-correlation..."
msgstr ""
-#: modules/process/superresolution.c:554 modules/xyz/xyz_raster.c:1079
-#: modules/xyz/xyz_raster.c:1119
+#: modules/process/superresolution.c:553 modules/xyz/xyz_raster.c:1053
+#: modules/xyz/xyz_raster.c:1093
msgid "Interpolating..."
msgstr ""
-#: modules/process/synth.h:343
+#: modules/process/synth.h:344
msgid "Roundness"
msgstr ""
-#: modules/process/synth.h:351
+#: modules/process/synth.h:352
msgid "Roundn_ess:"
msgstr ""
-#: modules/process/synth.h:399
+#: modules/process/synth.h:401
msgid "Orientation"
msgstr ""
-#: modules/process/synth.h:408
+#: modules/process/synth.h:410
msgid "Orien_tation:"
msgstr ""
-#: modules/process/synth.h:432
-msgid "Variance:"
+#: modules/process/synth.h:436
+msgid "_Truncate:"
msgstr ""
-#: modules/process/synth.h:456
-msgid "Deformation"
+#: modules/process/synth.h:460
+msgid "Variance:"
msgstr ""
-#: modules/process/synth.h:464
+#: modules/process/synth.h:493
msgid "_Amplitude:"
msgstr ""
-#: modules/process/synth.h:472
+#: modules/process/synth.h:501
msgid "_Lateral scale:"
msgstr ""
-#: modules/process/synth.h:566
+#: modules/process/synth.h:595
msgid "Randomi_ze"
msgstr ""
@@ -12443,41 +13143,41 @@ msgstr ""
msgid "Limit data range"
msgstr ""
-#: modules/process/threshold.c:246
+#: modules/process/threshold.c:241
msgid "Limit Range"
msgstr ""
-#: modules/process/threshold.c:281
+#: modules/process/threshold.c:276
msgid "Specify _thresholds"
msgstr ""
-#: modules/process/threshold.c:283
+#: modules/process/threshold.c:278
msgid "Use _display range"
msgstr ""
-#: modules/process/threshold.c:285
+#: modules/process/threshold.c:280
msgid "Cut off outlier_s"
msgstr ""
-#: modules/process/threshold.c:294
+#: modules/process/threshold.c:289
msgid "_Lower:"
msgstr ""
-#: modules/process/threshold.c:300
+#: modules/process/threshold.c:295
msgid "_Upper:"
msgstr ""
-#: modules/process/threshold.c:305
+#: modules/process/threshold.c:300
msgid "Set to _Full Range"
msgstr ""
#. TRANSLATORS: This is a range: 123 to 456.
-#: modules/process/threshold.c:318
+#: modules/process/threshold.c:313
#, c-format
msgid "%.*f to %.*f"
msgstr ""
-#: modules/process/threshold.c:341
+#: modules/process/threshold.c:336
msgid "F_arther than:"
msgstr ""
@@ -12497,11 +13197,11 @@ msgstr ""
msgid "Tilt"
msgstr ""
-#: modules/process/tilt.c:185 modules/volume/volume_slice.c:444
+#: modules/process/tilt.c:185 modules/volume/volume_slice.c:446
msgid "_X:"
msgstr ""
-#: modules/process/tilt.c:194 modules/volume/volume_slice.c:464
+#: modules/process/tilt.c:194 modules/volume/volume_slice.c:469
msgid "_Y:"
msgstr ""
@@ -12509,31 +13209,31 @@ msgstr ""
msgid "Angles"
msgstr ""
-#: modules/process/tip_blind.c:178
+#: modules/process/tip_blind.c:177
msgid "Blind estimation of SPM tip using Villarubia's algorithm."
msgstr ""
-#: modules/process/tip_blind.c:192
+#: modules/process/tip_blind.c:191
msgid "/_Tip and Indentation/_Blind Estimation..."
msgstr ""
-#: modules/process/tip_blind.c:196
+#: modules/process/tip_blind.c:195
msgid "Blind tip estimation"
msgstr ""
-#: modules/process/tip_blind.c:231
+#: modules/process/tip_blind.c:230
msgid "Blind Tip Estimation"
msgstr ""
-#: modules/process/tip_blind.c:232
+#: modules/process/tip_blind.c:231
msgid "Run _Partial"
msgstr ""
-#: modules/process/tip_blind.c:233
+#: modules/process/tip_blind.c:232
msgid "Run _Full"
msgstr ""
-#: modules/process/tip_blind.c:234
+#: modules/process/tip_blind.c:233
msgid "_Reset Tip"
msgstr ""
@@ -12541,77 +13241,77 @@ msgstr ""
msgid "Related _data:"
msgstr ""
-#: modules/process/tip_blind.c:326
+#: modules/process/tip_blind.c:327
msgid "Estimated Tip Size"
msgstr ""
-#: modules/process/tip_blind.c:347
+#: modules/process/tip_blind.c:350
msgid "_Same resolution"
msgstr ""
-#: modules/process/tip_blind.c:366
+#: modules/process/tip_blind.c:376
msgid "Noise suppression t_hreshold:"
msgstr ""
-#: modules/process/tip_blind.c:386
+#: modules/process/tip_blind.c:384
msgid "Use _boundaries"
msgstr ""
-#: modules/process/tip_blind.c:396
+#: modules/process/tip_blind.c:395
msgid "Stripes"
msgstr ""
-#: modules/process/tip_blind.c:402
+#: modules/process/tip_blind.c:401
msgid "_Split to stripes:"
msgstr ""
-#: modules/process/tip_blind.c:416
+#: modules/process/tip_blind.c:412
msgid "_Preview stripe:"
msgstr ""
-#: modules/process/tip_blind.c:423
+#: modules/process/tip_blind.c:420
msgid "Plot size _graph"
msgstr ""
-#: modules/process/tip_blind.c:433
+#: modules/process/tip_blind.c:430
msgid "Create tip i_mages"
msgstr ""
#. TRANSLATORS: Prefix for the progressbar message.
-#: modules/process/tip_blind.c:810
+#: modules/process/tip_blind.c:807
#, c-format
msgid "Stripe %u: "
msgstr ""
-#: modules/process/tip_blind.c:917 modules/process/tip_blind.c:941
+#: modules/process/tip_blind.c:914 modules/process/tip_blind.c:938
msgid "Estimated tip"
msgstr ""
-#: modules/process/tip_blind.c:1207 modules/process/tip_blind.c:1216
+#: modules/process/tip_blind.c:1204 modules/process/tip_blind.c:1213
msgid "Tip radius evolution"
msgstr ""
-#: modules/process/tip_model.c:114
+#: modules/process/tip_model.c:112
msgid "Models SPM tip."
msgstr ""
-#: modules/process/tip_model.c:129
+#: modules/process/tip_model.c:127
msgid "/_Tip and Indentation/_Model Tip..."
msgstr ""
-#: modules/process/tip_model.c:133
+#: modules/process/tip_model.c:131
msgid "Model AFM tip"
msgstr ""
-#: modules/process/tip_model.c:164
+#: modules/process/tip_model.c:162
msgid "Model Tip"
msgstr ""
-#: modules/process/tip_model.c:224
+#: modules/process/tip_model.c:222
msgid "Tip _type:"
msgstr ""
-#: modules/process/tip_model.c:229
+#: modules/process/tip_model.c:228
msgid "_Number of sides:"
msgstr ""
@@ -12623,19 +13323,19 @@ msgstr ""
msgid "Tip _rotation:"
msgstr ""
-#: modules/process/tip_model.c:250
+#: modules/process/tip_model.c:255
msgid "Tip _apex radius:"
msgstr ""
-#: modules/process/tip_model.c:269
+#: modules/process/tip_model.c:265
msgid "Tip _anisotropy:"
msgstr ""
-#: modules/process/tip_model.c:490
+#: modules/process/tip_model.c:484
msgid "Modeled tip"
msgstr ""
-#: modules/process/tip_model.c:562
+#: modules/process/tip_model.c:556
#, c-format
msgid "Tip resolution: %d × %d pixels"
msgstr ""
@@ -12739,7 +13439,7 @@ msgid "Converts datafield to 3D volume data."
msgstr ""
#: modules/process/volumize.c:56
-msgid "/_Basic Operations/Volumize..."
+msgid "/_Basic Operations/Volumize"
msgstr ""
#: modules/process/volumize.c:60
@@ -12782,73 +13482,77 @@ msgstr ""
msgid "Z _range:"
msgstr ""
-#: modules/process/wave_synth.c:211
+#: modules/process/wave_synth.c:219
msgid "Generates various kinds of waves."
msgstr ""
-#: modules/process/wave_synth.c:225
+#: modules/process/wave_synth.c:233
msgid "/S_ynthetic/_Waves..."
msgstr ""
-#: modules/process/wave_synth.c:229
+#: modules/process/wave_synth.c:237
msgid "Generate waves"
msgstr ""
-#: modules/process/wave_synth.c:347
+#: modules/process/wave_synth.c:366
msgid "Waves"
msgstr ""
-#: modules/process/wave_synth.c:422 modules/tools/linestats.c:337
-#: modules/tools/sfunctions.c:401 modules/volume/volume_linestat.c:369
+#: modules/process/wave_synth.c:441 modules/tools/linestats.c:337
+#: modules/tools/sfunctions.c:411 modules/volume/volume_linestat.c:374
msgid "_Quantity:"
msgstr ""
-#: modules/process/wave_synth.c:429
+#: modules/process/wave_synth.c:448
msgid "_Number of waves:"
msgstr ""
-#: modules/process/wave_synth.c:436 modules/process/wave_synth.c:582
-#: modules/tools/roughness.c:274
+#: modules/process/wave_synth.c:455 modules/process/wave_synth.c:617
+#: modules/tools/roughness.c:275
msgid "Amplitude"
msgstr ""
-#: modules/process/wave_synth.c:441
+#: modules/process/wave_synth.c:460
msgid "_Wave form:"
msgstr ""
-#: modules/process/wave_synth.c:448
+#: modules/process/wave_synth.c:467
msgid "Amplitude:"
msgstr ""
-#: modules/process/wave_synth.c:466
+#: modules/process/wave_synth.c:487
+msgid "_Decay:"
+msgstr ""
+
+#: modules/process/wave_synth.c:497
msgid "Frequency"
msgstr ""
-#: modules/process/wave_synth.c:472
+#: modules/process/wave_synth.c:503
msgid "_Spatial frequency:"
msgstr ""
-#: modules/process/wave_synth.c:488
+#: modules/process/wave_synth.c:519
msgid "_X center:"
msgstr ""
-#: modules/process/wave_synth.c:499
+#: modules/process/wave_synth.c:532
msgid "_Y center:"
msgstr ""
-#: modules/process/wave_synth.c:565
+#: modules/process/wave_synth.c:600
msgid "Cosine"
msgstr ""
-#: modules/process/wave_synth.c:566
+#: modules/process/wave_synth.c:601
msgid "Inverse cosh"
msgstr ""
-#: modules/process/wave_synth.c:567
+#: modules/process/wave_synth.c:602
msgid "Flat top"
msgstr ""
-#: modules/process/wave_synth.c:581
+#: modules/process/wave_synth.c:616
msgid "Displacement"
msgstr ""
@@ -12932,39 +13636,39 @@ msgstr ""
msgid "Preprocess and mark"
msgstr ""
-#: modules/process/xydenoise.c:57
+#: modules/process/xydenoise.c:58
msgid "Denoises measurement on basis of two orthogonal scans."
msgstr ""
-#: modules/process/xydenoise.c:71
+#: modules/process/xydenoise.c:72
msgid "/M_ultidata/_XY denoise..."
msgstr ""
-#: modules/process/xydenoise.c:75
+#: modules/process/xydenoise.c:76
msgid "Denoises horizontal/vertical measurement."
msgstr ""
-#: modules/process/xydenoise.c:102
+#: modules/process/xydenoise.c:103
msgid "XY Denoising"
msgstr ""
-#: modules/process/xydenoise.c:124
+#: modules/process/xydenoise.c:125
msgid "Second direction:"
msgstr ""
-#: modules/process/xydenoise.c:232
+#: modules/process/xydenoise.c:233
msgid "Computing forward FFTs..."
msgstr ""
-#: modules/process/xydenoise.c:248
+#: modules/process/xydenoise.c:249
msgid "Computing image..."
msgstr ""
-#: modules/process/xydenoise.c:260
+#: modules/process/xydenoise.c:261
msgid "Computing backward FFT..."
msgstr ""
-#: modules/process/xydenoise.c:272
+#: modules/process/xydenoise.c:273
msgid "Denoised"
msgstr ""
@@ -12980,63 +13684,67 @@ msgstr ""
msgid "Convert to XYZ data"
msgstr ""
-#: modules/pygwy/pygwy-console.c:55
+#: modules/pygwy/pygwy-console.c:99
msgid "/Pygwy Console"
msgstr ""
-#: modules/pygwy/pygwy-console.c:59
+#: modules/pygwy/pygwy-console.c:103
msgid "Python wrapper console"
msgstr ""
-#: modules/pygwy/pygwy-console.c:142
-msgid ">>> Running the script above\n"
+#: modules/pygwy/pygwy-console.c:168 modules/pygwy/pygwy-console.c:481
+msgid "Pygwy Console"
+msgstr ""
+
+#: modules/pygwy/pygwy-console.c:187
+msgid "Open script in Python language (Ctrl-O)"
msgstr ""
-#: modules/pygwy/pygwy-console.c:194
-msgid "Open Python script"
+#: modules/pygwy/pygwy-console.c:197
+msgid "Save script (Ctrl-S)"
msgstr ""
-#: modules/pygwy/pygwy-console.c:275
-msgid "Save Script as"
+#: modules/pygwy/pygwy-console.c:207
+msgid "Save script as (Ctrl-Shift-S)"
msgstr ""
-#: modules/pygwy/pygwy-console.c:327
-msgid "Pygwy Console"
+#: modules/pygwy/pygwy-console.c:217
+msgid "Execute script (Ctrl-E)"
msgstr ""
-#: modules/pygwy/pygwy-console.c:340
+#: modules/pygwy/pygwy-console.c:227
msgid "Clear Log"
msgstr ""
-#: modules/pygwy/pygwy-console.c:344
-msgid "Open script in Python language (Ctrl-O)"
+#: modules/pygwy/pygwy-console.c:285
+msgid "Command"
msgstr ""
-#: modules/pygwy/pygwy-console.c:346
-msgid "Save script (Ctrl-S)"
+#: modules/pygwy/pygwy-console.c:371
+msgid ">>> Running the script above\n"
msgstr ""
-#: modules/pygwy/pygwy-console.c:348
-msgid "Execute script (Ctrl-E)"
+#: modules/pygwy/pygwy-console.c:425
+msgid "Save Python Script as"
msgstr ""
-#: modules/pygwy/pygwy-console.c:426
-msgid "Command"
+#: modules/pygwy/pygwy-console.c:429
+msgid "Open Python Script"
msgstr ""
-#: pygwy.c:120
+#: pygwy.c:130
msgid "Pygwy, the Gwyddion Python wrapper."
msgstr ""
-#: pygwy.c:258
+#: pygwy.c:269
msgid "Python Interpreter Errors"
msgstr ""
-#: pygwy.c:384
+#: pygwy.c:399
msgid "Python interpreter error occurred."
msgstr ""
-#: pygwy.c:459
+#: pygwy.c:499
msgid "Function written in Python"
msgstr ""
@@ -13061,37 +13769,37 @@ msgid "Measure distances and directions between points"
msgstr ""
#. TRANSLATORS: Number is verb here.
-#: modules/tools/distance.c:250 modules/tools/profile.c:532
+#: modules/tools/distance.c:250 modules/tools/profile.c:527
msgid "_Number lines"
msgstr ""
-#: modules/tools/filter.c:128
+#: modules/tools/filter.c:129
msgid ""
"Filter tool, processes selected part of data with a filter (conservative "
"denoise, mean, median. Kuwahara, minimum, maximum)."
msgstr ""
-#: modules/tools/filter.c:171
+#: modules/tools/filter.c:172
msgid "Basic filters: mean, median, denoise, …"
msgstr ""
-#: modules/tools/filter.c:239
+#: modules/tools/filter.c:240
msgid "Conservative denoise"
msgstr ""
-#: modules/tools/filter.c:246
+#: modules/tools/filter.c:247
msgid "Kuwahara"
msgstr ""
-#: modules/tools/filter.c:247
+#: modules/tools/filter.c:248
msgid "Dechecker"
msgstr ""
-#: modules/tools/filter.c:248
+#: modules/tools/filter.c:249
msgid "filter|Gaussian"
msgstr ""
-#: modules/tools/filter.c:249
+#: modules/tools/filter.c:250
msgid "Sharpen"
msgstr ""
@@ -13181,7 +13889,7 @@ msgid "Height histogram"
msgstr ""
#: modules/tools/icolorange.c:329 modules/tools/linestats.c:169
-#: modules/tools/sfunctions.c:226 modules/volume/volume_linestat.c:146
+#: modules/tools/sfunctions.c:231 modules/volume/volume_linestat.c:148
msgid "Range"
msgstr ""
@@ -13209,29 +13917,29 @@ msgstr ""
msgid "range|Full"
msgstr ""
-#: modules/tools/level3.c:106
+#: modules/tools/level3.c:108
msgid ""
"Three-point level tool, levels data by subtracting a plane fitted through "
"three selected points."
msgstr ""
-#: modules/tools/level3.c:143
+#: modules/tools/level3.c:145
msgid "Three Point Level"
msgstr ""
-#: modules/tools/level3.c:144
+#: modules/tools/level3.c:146
msgid "Level data by fitting a plane through three points"
msgstr ""
-#: modules/tools/level3.c:239 modules/tools/readvalue.c:375
+#: modules/tools/level3.c:244 modules/tools/readvalue.c:378
msgid "_Averaging radius:"
msgstr ""
-#: modules/tools/level3.c:246
+#: modules/tools/level3.c:251
msgid "_Instant apply"
msgstr ""
-#: modules/tools/level3.c:255
+#: modules/tools/level3.c:261
msgid "Set plane to _zero"
msgstr ""
@@ -13241,23 +13949,23 @@ msgid ""
"RMS, ..., of rows or columns."
msgstr ""
-#: modules/tools/linestats.c:172 modules/volume/volume_linestat.c:148
+#: modules/tools/linestats.c:172 modules/volume/volume_linestat.c:150
msgid "tan β<sub>0</sub>"
msgstr ""
-#: modules/tools/linestats.c:174 modules/volume/volume_linestat.c:150
+#: modules/tools/linestats.c:174 modules/volume/volume_linestat.c:152
msgid "Ra"
msgstr ""
-#: modules/tools/linestats.c:175 modules/volume/volume_linestat.c:151
+#: modules/tools/linestats.c:175 modules/volume/volume_linestat.c:153
msgid "Rq (RMS)"
msgstr ""
-#: modules/tools/linestats.c:176 modules/volume/volume_linestat.c:152
+#: modules/tools/linestats.c:176 modules/volume/volume_linestat.c:154
msgid "Rz"
msgstr ""
-#: modules/tools/linestats.c:177 modules/volume/volume_linestat.c:153
+#: modules/tools/linestats.c:177 modules/volume/volume_linestat.c:155
msgid "Rt"
msgstr ""
@@ -13281,16 +13989,11 @@ msgstr ""
msgid "Average:"
msgstr ""
-#: modules/tools/linestats.c:363 modules/tools/profile.c:464
-#: modules/tools/sfunctions.c:414 modules/tools/spectro.c:343
+#: modules/tools/linestats.c:363 modules/tools/profile.c:460
+#: modules/tools/sfunctions.c:424 modules/tools/spectro.c:346
msgid "<b>Options</b>"
msgstr ""
-#: modules/tools/linestats.c:379 modules/tools/sfunctions.c:430
-#: modules/tools/stats.c:408
-msgid "_Instant updates"
-msgstr ""
-
#: modules/tools/maskedit.c:170
msgid "Mask editor tool, allows interactive modification of parts of the mask."
msgstr ""
@@ -13347,63 +14050,63 @@ msgstr ""
msgid "Erase continuous parts of mask"
msgstr ""
-#: modules/tools/maskedit.c:408
+#: modules/tools/maskedit.c:409
msgid "Editor"
msgstr ""
-#: modules/tools/maskedit.c:413
+#: modules/tools/maskedit.c:414
msgid "_Shapes"
msgstr ""
-#: modules/tools/maskedit.c:423
+#: modules/tools/maskedit.c:428
msgid "Mode:"
msgstr ""
-#: modules/tools/maskedit.c:452
+#: modules/tools/maskedit.c:458
msgid "Shape:"
msgstr ""
-#: modules/tools/maskedit.c:483
+#: modules/tools/maskedit.c:486
msgid "_Drawing Tools"
msgstr ""
-#: modules/tools/maskedit.c:493
+#: modules/tools/maskedit.c:500
msgid "Tool:"
msgstr ""
-#: modules/tools/maskedit.c:532
+#: modules/tools/maskedit.c:538
msgid "Actions"
msgstr ""
-#: modules/tools/maskedit.c:540
+#: modules/tools/maskedit.c:546
msgid "_Invert"
msgstr ""
-#: modules/tools/maskedit.c:571
+#: modules/tools/maskedit.c:577
msgid "Fill _Voids"
msgstr ""
-#: modules/tools/maskedit.c:580
+#: modules/tools/maskedit.c:586
msgid "Fill non-simple-connected"
msgstr ""
-#: modules/tools/maskedit.c:591
+#: modules/tools/maskedit.c:597
msgid "Grow/Shrink"
msgstr ""
-#: modules/tools/maskedit.c:600
+#: modules/tools/maskedit.c:606
msgid "_Grow"
msgstr ""
-#: modules/tools/maskedit.c:608
+#: modules/tools/maskedit.c:614
msgid "Shrin_k"
msgstr ""
-#: modules/tools/maskedit.c:623
+#: modules/tools/maskedit.c:629
msgid "_Amount:"
msgstr ""
-#: modules/tools/maskedit.c:651
+#: modules/tools/maskedit.c:657
msgid "_Prevent grain merging by growing"
msgstr ""
@@ -13419,83 +14122,95 @@ msgstr ""
msgid "Level rows using intersections with given lines"
msgstr ""
-#: modules/tools/profile.c:222
+#: modules/tools/profile.c:216
msgid "Profile tool, creates profile graphs from selected lines."
msgstr ""
-#: modules/tools/profile.c:276 modules/tools/profile.c:630
+#: modules/tools/profile.c:270 modules/tools/profile.c:609
msgid "Profiles"
msgstr ""
-#: modules/tools/profile.c:277
+#: modules/tools/profile.c:271
msgid "Extract profiles"
msgstr ""
-#: modules/tools/profile.c:480
-msgid "_Radial profiles"
-msgstr ""
-
-#: modules/tools/profile.c:493
-msgid "Symmetrize _All"
+#: modules/tools/profile.c:478
+msgid "Linear profiles"
msgstr ""
-#: modules/tools/profile.c:498
-msgid "S_ymmetrize"
+#: modules/tools/profile.c:480
+msgid "Radial profiles"
msgstr ""
-#: modules/tools/profile.c:542
+#: modules/tools/profile.c:537
msgid "_Separate profiles"
msgstr ""
-#: modules/tools/profile.c:607
+#: modules/tools/profile.c:587
msgid "_Calibration data:"
msgstr ""
-#: modules/tools/profile.c:620
+#: modules/tools/profile.c:600
msgid "_Show profile"
msgstr ""
-#: modules/tools/profile.c:887
+#: modules/tools/profile.c:861
#, c-format
msgid "X error %d"
msgstr ""
-#: modules/tools/profile.c:891
+#: modules/tools/profile.c:865
#, c-format
msgid "Y error %d"
msgstr ""
-#: modules/tools/profile.c:895
+#: modules/tools/profile.c:869
#, c-format
msgid "Z error %d"
msgstr ""
-#: modules/tools/profile.c:899
+#: modules/tools/profile.c:873
#, c-format
msgid "X uncertainty %d"
msgstr ""
-#: modules/tools/profile.c:903
+#: modules/tools/profile.c:877
#, c-format
msgid "Y uncertainty %d"
msgstr ""
-#: modules/tools/profile.c:907
+#: modules/tools/profile.c:881
#, c-format
msgid "Z uncertainty %d"
msgstr ""
-#: modules/tools/profile.c:912
+#: modules/tools/profile.c:886
#, c-format
msgid "Zunc up bound %d"
msgstr ""
-#: modules/tools/profile.c:917
+#: modules/tools/profile.c:891
#, c-format
msgid "Zunc low bound %d"
msgstr ""
-#: modules/tools/profile.c:1817
+#: modules/tools/profile.c:1637
+msgid "S_ymmetrize"
+msgstr ""
+
+#: modules/tools/profile.c:1639
+msgid "Symmetrize _All"
+msgstr ""
+
+#: modules/tools/profile.c:1643
+msgid "Improve _Direction"
+msgstr ""
+
+#: modules/tools/profile.c:1645
+msgid "Improve _All"
+msgstr ""
+
+#: modules/tools/profile.c:1866
msgid "calib-data|None"
msgstr ""
@@ -13511,194 +14226,194 @@ msgstr ""
msgid "Read value under mouse cursor"
msgstr ""
-#: modules/tools/readvalue.c:304
+#: modules/tools/readvalue.c:307
msgid "Set _Zero"
msgstr ""
-#: modules/tools/readvalue.c:307
+#: modules/tools/readvalue.c:310
msgid "Shift plane z=0 to pass through the selected point"
msgstr ""
-#: modules/tools/readvalue.c:315
+#: modules/tools/readvalue.c:318
msgid "Facet"
msgstr ""
-#: modules/tools/readvalue.c:340
+#: modules/tools/readvalue.c:343
msgid "Curvatures"
msgstr ""
-#: modules/tools/readvalue.c:382
+#: modules/tools/readvalue.c:386
msgid "Show _selection"
msgstr ""
-#: modules/tools/roughness.c:282
+#: modules/tools/roughness.c:283
msgid "Roughness average"
msgstr ""
-#: modules/tools/roughness.c:290
+#: modules/tools/roughness.c:291
msgid "Root mean square roughness"
msgstr ""
-#: modules/tools/roughness.c:298
+#: modules/tools/roughness.c:299
msgid "Maximum height of the roughness"
msgstr ""
-#: modules/tools/roughness.c:306
+#: modules/tools/roughness.c:307
msgid "Maximum roughness valley depth"
msgstr ""
-#: modules/tools/roughness.c:314
+#: modules/tools/roughness.c:315
msgid "Maximum roughness peak height"
msgstr ""
-#: modules/tools/roughness.c:322 modules/tools/roughness.c:370
+#: modules/tools/roughness.c:323 modules/tools/roughness.c:371
msgid "Average maximum height of the roughness"
msgstr ""
-#: modules/tools/roughness.c:330
+#: modules/tools/roughness.c:331
msgid "Average maximum roughness valley depth"
msgstr ""
-#: modules/tools/roughness.c:338
+#: modules/tools/roughness.c:339
msgid "Average maximum roughness peak height"
msgstr ""
-#: modules/tools/roughness.c:346 modules/tools/roughness.c:354
+#: modules/tools/roughness.c:347 modules/tools/roughness.c:355
msgid "Average third highest peak to third lowest valley height"
msgstr ""
-#: modules/tools/roughness.c:362
+#: modules/tools/roughness.c:363
msgid "Average maximum height of the profile"
msgstr ""
-#: modules/tools/roughness.c:378
+#: modules/tools/roughness.c:379
msgid "Skewness"
msgstr ""
-#: modules/tools/roughness.c:394
+#: modules/tools/roughness.c:395
msgid "Waviness average"
msgstr ""
-#: modules/tools/roughness.c:402
+#: modules/tools/roughness.c:403
msgid "Root mean square waviness"
msgstr ""
-#: modules/tools/roughness.c:410
+#: modules/tools/roughness.c:411
msgid "Waviness maximum height"
msgstr ""
-#: modules/tools/roughness.c:418
+#: modules/tools/roughness.c:419
msgid "Maximum height of the profile"
msgstr ""
-#: modules/tools/roughness.c:426
+#: modules/tools/roughness.c:427
msgid "Spatial"
msgstr ""
-#: modules/tools/roughness.c:476
+#: modules/tools/roughness.c:477
msgid "Average wavelength of the profile"
msgstr ""
-#: modules/tools/roughness.c:484
+#: modules/tools/roughness.c:485
msgid "Root mean square (RMS) wavelength of the profile"
msgstr ""
-#: modules/tools/roughness.c:492
+#: modules/tools/roughness.c:493
msgid "Hybrid"
msgstr ""
-#: modules/tools/roughness.c:500
+#: modules/tools/roughness.c:501
msgid "Average absolute slope"
msgstr ""
-#: modules/tools/roughness.c:508
+#: modules/tools/roughness.c:509
msgid "Root mean square (RMS) slope"
msgstr ""
-#: modules/tools/roughness.c:524
+#: modules/tools/roughness.c:525
msgid "Developed profile length"
msgstr ""
-#: modules/tools/roughness.c:532
+#: modules/tools/roughness.c:533
msgid "Profile length ratio"
msgstr ""
-#: modules/tools/roughness.c:615
+#: modules/tools/roughness.c:616
msgid "Calculate surface profile parameters."
msgstr ""
-#: modules/tools/roughness.c:648 modules/tools/roughness.c:773
-#: modules/tools/roughness.c:1452
+#: modules/tools/roughness.c:649 modules/tools/roughness.c:774
+#: modules/tools/roughness.c:1479
msgid "Roughness"
msgstr ""
-#: modules/tools/roughness.c:649
+#: modules/tools/roughness.c:650
msgid "Calculate roughness parameters"
msgstr ""
-#: modules/tools/roughness.c:771 modules/tools/roughness.c:1450
+#: modules/tools/roughness.c:772 modules/tools/roughness.c:1477
msgid "Texture"
msgstr ""
-#: modules/tools/roughness.c:772 modules/tools/roughness.c:1451
+#: modules/tools/roughness.c:773 modules/tools/roughness.c:1478
msgid "Waviness"
msgstr ""
-#: modules/tools/roughness.c:774
+#: modules/tools/roughness.c:775
msgid "ADF"
msgstr ""
-#: modules/tools/roughness.c:775
+#: modules/tools/roughness.c:776
msgid "BRC"
msgstr ""
-#: modules/tools/roughness.c:776 modules/tools/roughness.c:1455
+#: modules/tools/roughness.c:777 modules/tools/roughness.c:1482
msgid "Peak Count"
msgstr ""
-#: modules/tools/roughness.c:838 modules/xyz/xyz_drift.c:1090
+#: modules/tools/roughness.c:839 modules/xyz/xyz_drift.c:1090
msgid "_Graph:"
msgstr ""
-#: modules/tools/roughness.c:845
+#: modules/tools/roughness.c:847
msgid "C_ut-off:"
msgstr ""
-#: modules/tools/roughness.c:1324
+#: modules/tools/roughness.c:1345
msgid "No profile selected."
msgstr ""
-#: modules/tools/roughness.c:1453
+#: modules/tools/roughness.c:1480
msgid "Amplitude Distribution Function"
msgstr ""
-#: modules/tools/roughness.c:1454
+#: modules/tools/roughness.c:1481
msgid "The Bearing Ratio Curve"
msgstr ""
-#: modules/tools/roughness.c:1489
+#: modules/tools/roughness.c:1516
msgid "Surface Profiles"
msgstr ""
-#: modules/tools/roughness.c:1877
+#: modules/tools/roughness.c:1904
msgid "Save Roughness Parameters"
msgstr ""
-#: modules/tools/roughness.c:1934
+#: modules/tools/roughness.c:1961
msgid "Roughness Parameters"
msgstr ""
-#: modules/tools/roughness.c:1940
+#: modules/tools/roughness.c:1967
#, c-format
msgid "File: %s\n"
msgstr ""
-#: modules/tools/roughness.c:1944
+#: modules/tools/roughness.c:1971
#, c-format
msgid "Data channel: %s\n"
msgstr ""
-#: modules/tools/roughness.c:1975
+#: modules/tools/roughness.c:2002
#, c-format
msgid ""
"Selected line: (%s, %s) to (%s, %s) px\n"
@@ -13733,94 +14448,98 @@ msgstr ""
msgid "_Copy"
msgstr ""
-#: modules/tools/sfunctions.c:181
+#: modules/tools/sfunctions.c:186
msgid ""
"Statistical function tool, calculates one-dimensional statistical functions "
"(height distribution, correlations, PSDF, Minkowski functionals) of selected "
"part of data."
msgstr ""
-#: modules/tools/sfunctions.c:214
+#: modules/tools/sfunctions.c:219
msgid "Height distribution"
msgstr ""
-#: modules/tools/sfunctions.c:215
+#: modules/tools/sfunctions.c:220
msgid "Cum. height distribution"
msgstr ""
-#: modules/tools/sfunctions.c:216
+#: modules/tools/sfunctions.c:221
msgid "Distribution of angles"
msgstr ""
-#: modules/tools/sfunctions.c:217
+#: modules/tools/sfunctions.c:222
msgid "Cum. distribution of angles"
msgstr ""
-#: modules/tools/sfunctions.c:218
+#: modules/tools/sfunctions.c:223
msgid "ACF"
msgstr ""
-#: modules/tools/sfunctions.c:219
+#: modules/tools/sfunctions.c:224
msgid "HHCF"
msgstr ""
-#: modules/tools/sfunctions.c:220
+#: modules/tools/sfunctions.c:225
msgid "PSDF"
msgstr ""
-#: modules/tools/sfunctions.c:221
+#: modules/tools/sfunctions.c:226
msgid "Radial PSDF"
msgstr ""
-#: modules/tools/sfunctions.c:222
+#: modules/tools/sfunctions.c:227
msgid "Radial ACF"
msgstr ""
-#: modules/tools/sfunctions.c:223
+#: modules/tools/sfunctions.c:228
msgid "Minkowski volume"
msgstr ""
-#: modules/tools/sfunctions.c:224
+#: modules/tools/sfunctions.c:229
msgid "Minkowski boundary"
msgstr ""
-#: modules/tools/sfunctions.c:225
+#: modules/tools/sfunctions.c:230
msgid "Minkowski connectivity"
msgstr ""
-#: modules/tools/sfunctions.c:251
+#: modules/tools/sfunctions.c:232
+msgid "Area scale graph"
+msgstr ""
+
+#: modules/tools/sfunctions.c:257
msgid "Statistical Functions"
msgstr ""
-#: modules/tools/sfunctions.c:252
+#: modules/tools/sfunctions.c:258
msgid "Calculate 1D statistical functions"
msgstr ""
-#: modules/tools/sfunctions.c:504
+#: modules/tools/sfunctions.c:501
msgid "_Separate uncertainty"
msgstr ""
-#: modules/tools/spectro.c:151
+#: modules/tools/spectro.c:154
msgid "Point Spectrum, extracts point spectra to a graph."
msgstr ""
-#: modules/tools/spectro.c:190
+#: modules/tools/spectro.c:193
msgid "Point Spectroscopy"
msgstr ""
-#: modules/tools/spectro.c:191
+#: modules/tools/spectro.c:194
msgid "Extract and view point spectroscopy data"
msgstr ""
-#: modules/tools/spectro.c:359
+#: modules/tools/spectro.c:362
msgid "_Separate spectra"
msgstr ""
-#: modules/tools/spectro.c:369
+#: modules/tools/spectro.c:372
msgid "_Average spectra"
msgstr ""
-#: modules/tools/spectro.c:508
+#: modules/tools/spectro.c:511
msgid "Spectroscopy"
msgstr ""
@@ -13858,14 +14577,6 @@ msgstr ""
msgid "No area in the zoom selected."
msgstr ""
-#: modules/tools/stats.c:205
-msgid "Average value:"
-msgstr ""
-
-#: modules/tools/stats.c:206
-msgid "Median:"
-msgstr ""
-
#: modules/tools/stats.c:207
msgid "Ra (Sa):"
msgstr ""
@@ -13878,14 +14589,6 @@ msgstr ""
msgid "Rms (grain-wise):"
msgstr ""
-#: modules/tools/stats.c:210
-msgid "Skew:"
-msgstr ""
-
-#: modules/tools/stats.c:211
-msgid "Kurtosis:"
-msgstr ""
-
#: modules/tools/stats.c:212
msgid "Surface area:"
msgstr ""
@@ -13894,10 +14597,6 @@ msgstr ""
msgid "Projected area:"
msgstr ""
-#: modules/tools/stats.c:214
-msgid "Variation:"
-msgstr ""
-
#: modules/tools/stats.c:217
msgid "Inclination θ:"
msgstr ""
@@ -13910,7 +14609,7 @@ msgstr ""
msgid "Statistics tool."
msgstr ""
-#: modules/tools/stats.c:261 modules/tools/stats.c:1095
+#: modules/tools/stats.c:261 modules/tools/stats.c:1091
msgid "Statistical Quantities"
msgstr ""
@@ -13918,29 +14617,29 @@ msgstr ""
msgid "Statistical quantities"
msgstr ""
-#: modules/tools/stats.c:1002
+#: modules/tools/stats.c:998
msgid "Save Statistical Quantities"
msgstr ""
-#: modules/tools/stats.c:1100
+#: modules/tools/stats.c:1096
#, c-format
msgid "File: %s\n"
msgstr ""
-#: modules/tools/stats.c:1104
+#: modules/tools/stats.c:1100
#, c-format
msgid "Data channel: %s\n"
msgstr ""
-#: modules/tools/stats.c:1122
+#: modules/tools/stats.c:1118
msgid "Yes"
msgstr ""
-#: modules/tools/stats.c:1122
+#: modules/tools/stats.c:1118
msgid "No"
msgstr ""
-#: modules/tools/stats.c:1132
+#: modules/tools/stats.c:1128
#, c-format
msgid ""
"Selected area: %s × %s at (%s, %s) px\n"
@@ -13960,182 +14659,178 @@ msgstr ""
msgid "Volume Dimensions and Units"
msgstr ""
-#: modules/volume/volume_calibrate.c:526
+#: modules/volume/volume_calibrate.c:486
msgid "_Value range:"
msgstr ""
-#: modules/volume/volume_calibrate.c:555
+#: modules/volume/volume_calibrate.c:508
msgid "Value shi_ft:"
msgstr ""
-#: modules/volume/volume_calibrate.c:601
+#: modules/volume/volume_calibrate.c:542
msgid "_Value calibration factor:"
msgstr ""
-#: modules/volume/volume_extract.c:223
+#: modules/volume/volume_extract.c:216
msgid "Shows and/or extracts a section of volume data"
msgstr ""
-#: modules/volume/volume_extract.c:237
-msgid "/Show and _extract..."
+#: modules/volume/volume_extract.c:230
+msgid "/Show and _Extract..."
msgstr ""
-#: modules/volume/volume_extract.c:241
+#: modules/volume/volume_extract.c:234
msgid "Show and/or extract a section of volume data"
msgstr ""
-#: modules/volume/volume_extract.c:270
+#: modules/volume/volume_extract.c:263
msgid "X cross-section"
msgstr ""
-#: modules/volume/volume_extract.c:271
+#: modules/volume/volume_extract.c:264
msgid "Y cross-section"
msgstr ""
-#: modules/volume/volume_extract.c:272
+#: modules/volume/volume_extract.c:265
msgid "Z cross-section"
msgstr ""
-#: modules/volume/volume_extract.c:273 modules/volume/volume_extract.c:698
+#: modules/volume/volume_extract.c:266 modules/volume/volume_extract.c:684
msgid "X direction sum"
msgstr ""
-#: modules/volume/volume_extract.c:274 modules/volume/volume_extract.c:700
+#: modules/volume/volume_extract.c:267 modules/volume/volume_extract.c:686
msgid "Y direction sum"
msgstr ""
-#: modules/volume/volume_extract.c:275 modules/volume/volume_extract.c:702
+#: modules/volume/volume_extract.c:268 modules/volume/volume_extract.c:688
msgid "Z direction sum"
msgstr ""
-#: modules/volume/volume_extract.c:278
+#: modules/volume/volume_extract.c:271
msgid "X direction"
msgstr ""
-#: modules/volume/volume_extract.c:279
+#: modules/volume/volume_extract.c:272
msgid "Y direction"
msgstr ""
-#: modules/volume/volume_extract.c:280
+#: modules/volume/volume_extract.c:273
msgid "Z direction"
msgstr ""
-#: modules/volume/volume_extract.c:322
+#: modules/volume/volume_extract.c:315
msgid "Volume data"
msgstr ""
-#: modules/volume/volume_extract.c:324
+#: modules/volume/volume_extract.c:317
msgid "_Load"
msgstr ""
-#: modules/volume/volume_extract.c:336
+#: modules/volume/volume_extract.c:329
msgid "_Extract projection"
msgstr ""
-#: modules/volume/volume_extract.c:354
+#: modules/volume/volume_extract.c:347
msgid "Projections"
msgstr ""
-#: modules/volume/volume_extract.c:404
+#: modules/volume/volume_extract.c:395
msgid "Z position"
msgstr ""
-#: modules/volume/volume_extract.c:409
+#: modules/volume/volume_extract.c:405
msgid "Shown cut direction:"
msgstr ""
-#: modules/volume/volume_extract.c:419 modules/volume/volume_extract.c:500
-msgid "Show mode:"
-msgstr ""
-
-#: modules/volume/volume_extract.c:490
+#: modules/volume/volume_extract.c:485
msgid "Graph cut direction:"
msgstr ""
-#: modules/volume/volume_extract.c:525
+#: modules/volume/volume_extract.c:511
msgid "3D view"
msgstr ""
-#: modules/volume/volume_extract.c:550
+#: modules/volume/volume_extract.c:538
msgid "Zoom"
msgstr ""
-#: modules/volume/volume_extract.c:558
+#: modules/volume/volume_extract.c:545
msgid "Wireframe threshold"
msgstr ""
-#: modules/volume/volume_extract.c:566
+#: modules/volume/volume_extract.c:552
msgid "Z scale"
msgstr ""
-#: modules/volume/volume_extract.c:574
+#: modules/volume/volume_extract.c:559
msgid "Opacity scale"
msgstr ""
-#: modules/volume/volume_extract.c:580
-msgid "apply perspective"
+#: modules/volume/volume_extract.c:565
+msgid "Apply perspective"
msgstr ""
-#: modules/volume/volume_extract.c:589
-msgid "instant 3D render"
+#: modules/volume/volume_extract.c:574
+msgid "Instant 3D render"
msgstr ""
-#: modules/volume/volume_extract.c:598
+#: modules/volume/volume_extract.c:587
msgid "X view"
msgstr ""
-#: modules/volume/volume_extract.c:604
+#: modules/volume/volume_extract.c:592
msgid "Y view"
msgstr ""
-#: modules/volume/volume_extract.c:610
+#: modules/volume/volume_extract.c:597
msgid "Z view"
msgstr ""
-#: modules/volume/volume_extract.c:683
+#: modules/volume/volume_extract.c:669
#, c-format
msgid "X cross-section at x: %d"
msgstr ""
-#: modules/volume/volume_extract.c:686
+#: modules/volume/volume_extract.c:672
#, c-format
msgid "Y cross-section at y: %d"
msgstr ""
-#: modules/volume/volume_extract.c:690
+#: modules/volume/volume_extract.c:676
#, c-format
msgid "Z cross-section at Z = %g %s (#%d)"
msgstr ""
-#: modules/volume/volume_extract.c:749 modules/volume/volume_slice.c:1264
+#: modules/volume/volume_extract.c:735 modules/volume/volume_slice.c:1278
#, c-format
msgid "X graph at y: %d z: %d"
msgstr ""
-#: modules/volume/volume_extract.c:752 modules/volume/volume_slice.c:1273
+#: modules/volume/volume_extract.c:738 modules/volume/volume_slice.c:1287
#, c-format
msgid "Y graph at x: %d z: %d"
msgstr ""
-#: modules/volume/volume_extract.c:755 modules/volume/volume_slice.c:1255
+#: modules/volume/volume_extract.c:741 modules/volume/volume_slice.c:1269
#, c-format
msgid "Z graph at x: %d y: %d"
msgstr ""
-#: modules/volume/volume_extract.c:776
+#: modules/volume/volume_extract.c:762
msgid "Brick graph"
msgstr ""
-#: modules/volume/volume_extract.c:1056
+#: modules/volume/volume_extract.c:1042
msgid "Load volume data"
msgstr ""
-#: modules/volume/volume_extract.c:1218
+#: modules/volume/volume_extract.c:1204
#, c-format
msgid "Shown range %g to %g"
msgstr ""
-#: modules/volume/volume_extract.c:1911
+#: modules/volume/volume_extract.c:1897
msgid "Building wireframe model..."
msgstr ""
@@ -14144,97 +14839,97 @@ msgid "Evaluate volume force-distance data"
msgstr ""
#: modules/volume/volume_fdfit.c:213
-msgid "/_Evaluate FD data..."
+msgid "/_Evaluate FD Data..."
msgstr ""
#: modules/volume/volume_fdfit.c:217
msgid "Evaluate force-distance volume data"
msgstr ""
-#: modules/volume/volume_fdfit.c:368
+#: modules/volume/volume_fdfit.c:371
msgid "Curve _X position:"
msgstr ""
-#: modules/volume/volume_fdfit.c:386
+#: modules/volume/volume_fdfit.c:380
msgid "Curve _Y position:"
msgstr ""
-#: modules/volume/volume_fdfit.c:535
+#: modules/volume/volume_fdfit.c:511
msgid "e_stimate"
msgstr ""
-#: modules/volume/volume_invert.c:51
+#: modules/volume/volume_invert.c:39 modules/volume/volumeops.c:39
msgid "Inverts value in volume data"
msgstr ""
-#: modules/volume/volume_invert.c:65
-msgid "/_Invert value"
+#: modules/volume/volume_invert.c:53
+msgid "/_Invert Value"
msgstr ""
-#: modules/volume/volume_invert.c:69
+#: modules/volume/volume_invert.c:57
msgid "Invert value in volume data"
msgstr ""
-#: modules/volume/volume_kmeans.c:94
+#: modules/volume/volume_kmeans.c:95
msgid "Calculates K-means clustering on volume data."
msgstr ""
-#: modules/volume/volume_kmeans.c:108
-msgid "/_K-means clustering..."
+#: modules/volume/volume_kmeans.c:109
+msgid "/_K-Means Clustering..."
msgstr ""
-#: modules/volume/volume_kmeans.c:112
+#: modules/volume/volume_kmeans.c:113
msgid "Calculate K-means clustering on volume data"
msgstr ""
-#: modules/volume/volume_kmeans.c:151
+#: modules/volume/volume_kmeans.c:152
msgid "K-means"
msgstr ""
-#: modules/volume/volume_kmeans.c:170 modules/volume/volume_kmedians.c:164
+#: modules/volume/volume_kmeans.c:170 modules/volume/volume_kmedians.c:163
msgid "_Number of clusters:"
msgstr ""
-#: modules/volume/volume_kmeans.c:177 modules/volume/volume_kmedians.c:171
+#: modules/volume/volume_kmeans.c:177 modules/volume/volume_kmedians.c:170
msgid "Convergence _precision digits:"
msgstr ""
-#: modules/volume/volume_kmeans.c:184 modules/volume/volume_kmedians.c:178
+#: modules/volume/volume_kmeans.c:183 modules/volume/volume_kmedians.c:176
msgid "_Max. iterations:"
msgstr ""
-#: modules/volume/volume_kmeans.c:189 modules/volume/volume_kmedians.c:183
+#: modules/volume/volume_kmeans.c:187 modules/volume/volume_kmedians.c:181
msgid "_Normalize"
msgstr ""
-#: modules/volume/volume_kmeans.c:195
+#: modules/volume/volume_kmeans.c:193
msgid "_Remove outliers"
msgstr ""
-#: modules/volume/volume_kmeans.c:208
+#: modules/volume/volume_kmeans.c:202
msgid "Outliers _threshold:"
msgstr ""
-#: modules/volume/volume_kmeans.c:431
+#: modules/volume/volume_kmeans.c:425
msgid "K-means iteration..."
msgstr ""
-#: modules/volume/volume_kmeans.c:651
+#: modules/volume/volume_kmeans.c:645
#, c-format
msgid "K-means cluster of %s"
msgstr ""
-#: modules/volume/volume_kmeans.c:660
+#: modules/volume/volume_kmeans.c:654
#, c-format
msgid "K-means error of %s"
msgstr ""
-#: modules/volume/volume_kmeans.c:670 modules/volume/volume_kmedians.c:514
+#: modules/volume/volume_kmeans.c:664 modules/volume/volume_kmedians.c:512
#, c-format
msgid "Pre-normalized intensity of %s"
msgstr ""
-#: modules/volume/volume_kmeans.c:702
+#: modules/volume/volume_kmeans.c:696
#, c-format
msgid "K-means center %d"
msgstr ""
@@ -14244,7 +14939,7 @@ msgid "Calculates K-medians clustering on volume data."
msgstr ""
#: modules/volume/volume_kmedians.c:102
-msgid "/_K-medians clustering..."
+msgid "/_K-Medians Clustering..."
msgstr ""
#: modules/volume/volume_kmedians.c:106
@@ -14255,46 +14950,46 @@ msgstr ""
msgid "K-Medians"
msgstr ""
-#: modules/volume/volume_kmedians.c:392
+#: modules/volume/volume_kmedians.c:390
msgid "K-medians iteration..."
msgstr ""
-#: modules/volume/volume_kmedians.c:495
+#: modules/volume/volume_kmedians.c:493
#, c-format
msgid "K-medians cluster of %s"
msgstr ""
-#: modules/volume/volume_kmedians.c:504
+#: modules/volume/volume_kmedians.c:502
#, c-format
msgid "K-medians error of %s"
msgstr ""
-#: modules/volume/volume_kmedians.c:546
+#: modules/volume/volume_kmedians.c:544
#, c-format
msgid "K-medians center %d"
msgstr ""
-#: modules/volume/volume_linestat.c:171
+#: modules/volume/volume_linestat.c:173
msgid "Summarizes profiles of volume data to a channel."
msgstr ""
-#: modules/volume/volume_linestat.c:185
+#: modules/volume/volume_linestat.c:187
msgid "/Summarize _Profiles..."
msgstr ""
-#: modules/volume/volume_linestat.c:189
+#: modules/volume/volume_linestat.c:191
msgid "Summarize profiles"
msgstr ""
-#: modules/volume/volume_linestat.c:249
+#: modules/volume/volume_linestat.c:251
msgid "_Extract image"
msgstr ""
-#: modules/volume/volume_linestat.c:250
+#: modules/volume/volume_linestat.c:252
msgid "Set _preview"
msgstr ""
-#: modules/volume/volume_linestat.c:284
+#: modules/volume/volume_linestat.c:289
msgid "Summarize Volume Profiles"
msgstr ""
@@ -14318,53 +15013,113 @@ msgstr ""
msgid "Line graph"
msgstr ""
-#: modules/volume/volume_slice.c:290
+#: modules/volume/volume_slice.c:292
msgid "Slice Volume Data"
msgstr ""
-#: modules/volume/volume_slice.c:369
+#: modules/volume/volume_slice.c:371
msgid "_Base plane:"
msgstr ""
-#: modules/volume/volume_slice.c:420
+#: modules/volume/volume_slice.c:422
msgid "Extract _multiple items"
msgstr ""
-#: modules/volume/volume_slice.c:437
+#: modules/volume/volume_slice.c:439
msgid "Positions"
msgstr ""
-#: modules/volume/volume_slice.c:484
+#: modules/volume/volume_slice.c:492
msgid "_Z:"
msgstr ""
-#: modules/volume/volume_slice.c:1156
+#: modules/volume/volume_slice.c:1167
#, c-format
msgid "Z slice at %.*f%s%s (#%d)"
msgstr ""
-#: modules/volume/volume_slice.c:1167
+#: modules/volume/volume_slice.c:1178
#, c-format
msgid "Y slice at %.*f%s%s (#%d)"
msgstr ""
-#: modules/volume/volume_slice.c:1178
+#: modules/volume/volume_slice.c:1189
#, c-format
msgid "X slice at %.*f%s%s (#%d)"
msgstr ""
-#: modules/volume/volume_slice.c:1307
+#: modules/volume/volume_slice.c:1325
msgid "Volume Z graphs"
msgstr ""
-#: modules/volume/volume_slice.c:1314
+#: modules/volume/volume_slice.c:1332
msgid "Volume X graphs"
msgstr ""
-#: modules/volume/volume_slice.c:1321
+#: modules/volume/volume_slice.c:1339
msgid "Volume Y graphs"
msgstr ""
+#: modules/volume/volume_swaxes.c:104
+msgid "Swaps axes of volume data."
+msgstr ""
+
+#: modules/volume/volume_swaxes.c:118
+msgid "/S_wap axes..."
+msgstr ""
+
+#: modules/volume/volume_swaxes.c:122
+msgid "Swap axes"
+msgstr ""
+
+#: modules/volume/volume_swaxes.c:156
+msgid "X"
+msgstr ""
+
+#: modules/volume/volume_swaxes.c:157
+msgid "X, reversed"
+msgstr ""
+
+#: modules/volume/volume_swaxes.c:158
+msgid "Y"
+msgstr ""
+
+#: modules/volume/volume_swaxes.c:159
+msgid "Y, reversed"
+msgstr ""
+
+#: modules/volume/volume_swaxes.c:160
+msgid "Z"
+msgstr ""
+
+#: modules/volume/volume_swaxes.c:161
+msgid "Z, reversed"
+msgstr ""
+
+#: modules/volume/volume_swaxes.c:175
+msgid "Swap Volume Axes"
+msgstr ""
+
+#: modules/volume/volume_swaxes.c:196
+msgid "Current _X axis will become:"
+msgstr ""
+
+#: modules/volume/volume_swaxes.c:204
+msgid "Current _Y axis will become:"
+msgstr ""
+
+#: modules/volume/volume_swaxes.c:212
+msgid "Current _Z axis will become:"
+msgstr ""
+
+#: modules/volume/volume_swaxes.c:219
+msgid "Create new volume data"
+msgstr ""
+
+#: modules/volume/volume_swaxes.c:286
+msgid "Z axis calibration will be lost."
+msgstr ""
+
#: modules/volume/volume_zcal.c:104
msgid "Attaches, extracts and removes volume data z-axis calibration."
msgstr ""
@@ -14428,6 +15183,14 @@ msgid ""
"differs from the number of planes %d."
msgstr ""
+#: modules/volume/volumeops.c:53
+msgid "/Extract _Preview"
+msgstr ""
+
+#: modules/volume/volumeops.c:57
+msgid "Extract volume data preview to an image"
+msgstr ""
+
#: modules/xyz/xyz_drift.c:267
msgid "Analyzes drift in XYZ data."
msgstr ""
@@ -14470,7 +15233,7 @@ msgstr ""
msgid "Analyze XYZ Drift"
msgstr ""
-#: modules/xyz/xyz_drift.c:566 modules/xyz/xyz_raster.c:391
+#: modules/xyz/xyz_drift.c:566 modules/xyz/xyz_raster.c:406
msgid "Reset Ran_ges"
msgstr ""
@@ -14478,11 +15241,11 @@ msgstr ""
msgid "_Guess parameters"
msgstr ""
-#: modules/xyz/xyz_drift.c:778 modules/xyz/xyz_raster.c:570
+#: modules/xyz/xyz_drift.c:778 modules/xyz/xyz_raster.c:539
msgid "_X-range:"
msgstr ""
-#: modules/xyz/xyz_drift.c:800 modules/xyz/xyz_raster.c:592
+#: modules/xyz/xyz_drift.c:800 modules/xyz/xyz_raster.c:561
msgid "_Y-range:"
msgstr ""
@@ -14560,7 +15323,7 @@ msgstr ""
msgid "Fitting in progress..."
msgstr ""
-#: modules/xyz/xyz_drift.c:2269 modules/xyz/xyz_raster.c:1012
+#: modules/xyz/xyz_drift.c:2264 modules/xyz/xyz_raster.c:981
msgid "Physical dimensions are invalid."
msgstr ""
@@ -14600,39 +15363,39 @@ msgstr ""
msgid "Update X and Y of _all compatible data"
msgstr ""
-#: modules/xyz/xyz_raster.c:197
+#: modules/xyz/xyz_raster.c:194
msgid "Rasterizes XYZ data to images."
msgstr ""
-#: modules/xyz/xyz_raster.c:211
+#: modules/xyz/xyz_raster.c:208
msgid "/_Rasterize..."
msgstr ""
-#: modules/xyz/xyz_raster.c:215
+#: modules/xyz/xyz_raster.c:212
msgid "Rasterize to image"
msgstr ""
-#: modules/xyz/xyz_raster.c:340
+#: modules/xyz/xyz_raster.c:337
msgid "Rasterize XYZ Data"
msgstr ""
-#: modules/xyz/xyz_raster.c:354
+#: modules/xyz/xyz_raster.c:351
msgid "Create Image _Directly"
msgstr ""
-#: modules/xyz/xyz_raster.c:360
+#: modules/xyz/xyz_raster.c:357
msgid "XY points form a regular grid so interpolation is not necessary."
msgstr ""
-#: modules/xyz/xyz_raster.c:381
+#: modules/xyz/xyz_raster.c:392
msgid "Make Pixels S_quare"
msgstr ""
-#: modules/xyz/xyz_raster.c:642
+#: modules/xyz/xyz_raster.c:611
msgid "Field"
msgstr ""
-#: modules/xyz/xyz_raster.c:956
+#: modules/xyz/xyz_raster.c:925
#, c-format
msgid ""
"Number of points: %u\n"
@@ -14640,7 +15403,7 @@ msgid ""
"Added on the boundaries: %u"
msgstr ""
-#: modules/xyz/xyz_raster.c:1091
+#: modules/xyz/xyz_raster.c:1065
msgid ""
"XYZ data regularization failed due to numerical instability or was "
"interrupted."
diff --git a/po/it.gmo b/po/it.gmo
index 7c7556a..e025528 100644
Binary files a/po/it.gmo and b/po/it.gmo differ
diff --git a/po/it.po b/po/it.po
index 5ca299e..cd31105 100644
--- a/po/it.po
+++ b/po/it.po
@@ -12,7 +12,7 @@ msgid ""
msgstr ""
"Project-Id-Version: it\n"
"Report-Msgid-Bugs-To: yeti at gwyddion.net\n"
-"POT-Creation-Date: 2016-11-18 11:05+0100\n"
+"POT-Creation-Date: 2017-08-15 17:48+0200\n"
"PO-Revision-Date: 2016-09-30 14:27+0200\n"
"Last-Translator: Livia Della Seta <livia.dellaseta at enea.it>\n"
"Language-Team: Italian <kde-i18n-it at kde.org>\n"
@@ -133,7 +133,8 @@ msgstr "contatto_ Hertz (paraboloide)"
#: app/data-browser-aux.c:1480 app/data-browser.c:2280 app/data-browser.c:2887
#: app/data-browser.c:3707 app/data-browser.c:3857 app/data-browser.c:4139
#: app/data-browser.c:4504 app/data-browser.c:4590 app/data-browser.c:5016
-#: app/resource-editor.c:366 modules/process/convolution_filter.c:691
+#: app/resource-editor.c:366 modules/file/xyzexport.c:214
+#: modules/process/convolution_filter.c:691
msgid "Untitled"
msgstr "Senza titolo "
@@ -141,97 +142,105 @@ msgstr "Senza titolo "
msgid "Initial residua evaluation..."
msgstr "Valutazione iniziale residuei"
-#: libgwyddion/gwynlfit.c:479 modules/process/fit-shape.c:1632
+#: libgwyddion/gwynlfit.c:479 modules/process/fit-shape.c:1646
msgid "Fitting..."
msgstr "Fitting..."
-#: libgwyddion/gwynlfitpreset.c:1442 libprocess/gwyprocessenums.c:101
-#: libprocess/gwyshapefitpreset.c:347
+#: libgwyddion/gwynlfitpreset.c:1549 libprocess/gwyprocessenums.c:101
+#: libprocess/gwyshapefitpreset.c:347 modules/process/psf-fit.c:157
msgid "Gaussian"
msgstr "Gaussiana"
-#: libgwyddion/gwynlfitpreset.c:1457
+#: libgwyddion/gwynlfitpreset.c:1564
msgid "Gaussian (PSDF)"
msgstr "Gaussiana (PSDF)"
-#: libgwyddion/gwynlfitpreset.c:1470
+#: libgwyddion/gwynlfitpreset.c:1577
msgid "Gaussian (ACF)"
msgstr "Gaussiana (ACF)"
-#: libgwyddion/gwynlfitpreset.c:1483
+#: libgwyddion/gwynlfitpreset.c:1590
msgid "Gaussian (HHCF)"
msgstr "Gaussiana (HHCF)"
-#: libgwyddion/gwynlfitpreset.c:1496
+#: libgwyddion/gwynlfitpreset.c:1603
msgid "Gaussian (RPSDF)"
msgstr "Gaussiana (RPSDF)"
-#: libgwyddion/gwynlfitpreset.c:1509
+#: libgwyddion/gwynlfitpreset.c:1616
msgid "Two Gaussians (PSDF)"
msgstr "Due Gaussiane (PSDF)"
-#: libgwyddion/gwynlfitpreset.c:1524 modules/xyz/xyz_drift.c:841
-#: modules/xyz/xyz_drift.c:846 modules/xyz/xyz_drift.c:1819
+#: libgwyddion/gwynlfitpreset.c:1631 modules/xyz/xyz_drift.c:841
+#: modules/xyz/xyz_drift.c:846 modules/xyz/xyz_drift.c:1818
msgid "Exponential"
msgstr "Esponenziale"
-#: libgwyddion/gwynlfitpreset.c:1536
+#: libgwyddion/gwynlfitpreset.c:1643
msgid "Exponential (PSDF)"
msgstr "Esponenziale (PSDF)"
-#: libgwyddion/gwynlfitpreset.c:1549
+#: libgwyddion/gwynlfitpreset.c:1656
msgid "Exponential (ACF)"
msgstr "Esponenziale (ACF)"
-#: libgwyddion/gwynlfitpreset.c:1561
+#: libgwyddion/gwynlfitpreset.c:1668
msgid "Exponential (HHCF)"
msgstr "Esponenziale (HHCF)"
-#: libgwyddion/gwynlfitpreset.c:1574
+#: libgwyddion/gwynlfitpreset.c:1681
msgid "Exponential (RPSDF)"
msgstr "Esponenziale (RPSDF)"
-#: libgwyddion/gwynlfitpreset.c:1588
+#: libgwyddion/gwynlfitpreset.c:1695
+msgid "K-correlated (PSDF)"
+msgstr ""
+
+#: libgwyddion/gwynlfitpreset.c:1709
msgid "Polynomial (order 0)"
msgstr "Polinomiale (ordine0)"
-#: libgwyddion/gwynlfitpreset.c:1599 modules/xyz/xyz_drift.c:1805
+#: libgwyddion/gwynlfitpreset.c:1720 modules/xyz/xyz_drift.c:1804
msgid "Polynomial (order 1)"
msgstr "Polinomiale (ordine1)"
-#: libgwyddion/gwynlfitpreset.c:1610
+#: libgwyddion/gwynlfitpreset.c:1731
msgid "Polynomial (order 2)"
msgstr "Polinomiale (ordine2)"
-#: libgwyddion/gwynlfitpreset.c:1622
+#: libgwyddion/gwynlfitpreset.c:1743
msgid "Polynomial (order 3)"
msgstr "Polinomiale (ordine3)"
-#: libgwyddion/gwynlfitpreset.c:1635
+#: libgwyddion/gwynlfitpreset.c:1756
msgid "Square wave"
msgstr "Onda quadra"
-#: libgwyddion/gwynlfitpreset.c:1651
+#: libgwyddion/gwynlfitpreset.c:1772
msgid "Parabolic step"
msgstr "Passo parabolico"
-#: libgwyddion/gwynlfitpreset.c:1667
+#: libgwyddion/gwynlfitpreset.c:1788
msgid "Smooth slanted step"
msgstr ""
-#: libgwyddion/gwynlfitpreset.c:1684
+#: libgwyddion/gwynlfitpreset.c:1805
msgid "Smooth bent step"
msgstr ""
-#: libgwyddion/gwynlfitpreset.c:1700
+#: libgwyddion/gwynlfitpreset.c:1821
+msgid "Boltzmann bent step"
+msgstr ""
+
+#: libgwyddion/gwynlfitpreset.c:1837
msgid "Power"
msgstr "Potenza"
-#: libgwyddion/gwynlfitpreset.c:1712 libprocess/gwyshapefitpreset.c:348
+#: libgwyddion/gwynlfitpreset.c:1849 libprocess/gwyshapefitpreset.c:348
msgid "Lorentzian"
msgstr "Lorentzian"
-#: libgwyddion/gwynlfitpreset.c:1726
+#: libgwyddion/gwynlfitpreset.c:1863
msgid "Sinc"
msgstr "Sinc"
@@ -252,7 +261,7 @@ msgid "Step height (positive)"
msgstr "Altezza step (positiva)"
#: libprocess/cdline.c:590 libprocess/cdline.c:599
-#: libgwydgets/gwydgetenums.c:48 modules/process/hough.c:170
+#: libgwydgets/gwydgetenums.c:48 modules/process/hough.c:163
msgid "Line"
msgstr "Linea"
@@ -265,7 +274,7 @@ msgid "Circle (down)"
msgstr "Cerchio (inferiore)"
#: libprocess/cdline.c:608 libprocess/cdline.c:617
-#: libgwydgets/gwygraphareadialog.c:557 modules/process/hough.c:171
+#: libgwydgets/gwygraphareadialog.c:550 modules/process/hough.c:164
msgid "Circle"
msgstr "Cerchio "
@@ -273,237 +282,237 @@ msgstr "Cerchio "
msgid "Circle (up)"
msgstr "Cerchio (superiore)"
-#: libprocess/gwygrainvalue.c:64
+#: libprocess/gwygrainvalue.c:62
msgid "Grain number"
msgstr "Numero grani"
-#: libprocess/gwygrainvalue.c:73 modules/process/curvature.c:129
+#: libprocess/gwygrainvalue.c:71 modules/process/curvature.c:128
msgid "Center x position"
msgstr "Centra posizione X "
-#: libprocess/gwygrainvalue.c:82 modules/process/curvature.c:130
+#: libprocess/gwygrainvalue.c:80 modules/process/curvature.c:129
msgid "Center y position"
msgstr "Centra posizione Y"
-#: libprocess/gwygrainvalue.c:91
+#: libprocess/gwygrainvalue.c:89
msgid "Minimum value"
msgstr "Valore minimo"
-#: libprocess/gwygrainvalue.c:100
+#: libprocess/gwygrainvalue.c:98
msgid "Maximum value"
msgstr "Valore massimo"
-#: libprocess/gwygrainvalue.c:109 modules/process/bdep_synth.c:133
-#: modules/tools/filter.c:237
+#: libprocess/gwygrainvalue.c:107 modules/process/bdep_synth.c:133
+#: modules/tools/filter.c:238
msgid "Mean value"
msgstr "Valore medio"
-#: libprocess/gwygrainvalue.c:118 modules/tools/filter.c:238
+#: libprocess/gwygrainvalue.c:116 modules/tools/filter.c:239
msgid "Median value"
msgstr "Valore mediano"
-#: libprocess/gwygrainvalue.c:127
+#: libprocess/gwygrainvalue.c:125
msgid "Minimum value on boundary"
msgstr "Valore minimo sul limite"
-#: libprocess/gwygrainvalue.c:136
+#: libprocess/gwygrainvalue.c:134
msgid "Maximum value on boundary"
msgstr "Valore massimo sul limite"
-#: libprocess/gwygrainvalue.c:145
+#: libprocess/gwygrainvalue.c:143
msgid "Pixel area"
msgstr "area Pixel:"
-#: libprocess/gwygrainvalue.c:154
+#: libprocess/gwygrainvalue.c:152
msgid "Projected area"
msgstr "Area proiettata"
-#: libprocess/gwygrainvalue.c:163
+#: libprocess/gwygrainvalue.c:161
msgid "Surface area"
msgstr "Area superficie"
-#: libprocess/gwygrainvalue.c:172
+#: libprocess/gwygrainvalue.c:170
msgid "Equivalent square side"
msgstr "Lato quadrato equivalente"
-#: libprocess/gwygrainvalue.c:181
+#: libprocess/gwygrainvalue.c:179
msgid "Equivalent disc radius"
msgstr "Raggio cerchio equivalente"
-#: libprocess/gwygrainvalue.c:190
+#: libprocess/gwygrainvalue.c:188
msgid "Area above half-height"
msgstr "Area superiore mezza altezza"
-#: libprocess/gwygrainvalue.c:199
+#: libprocess/gwygrainvalue.c:197
msgid "Area of convex hull"
msgstr "Area involucro convesso"
#. TRANSLATORS: Grain volume calculated using basis (foot) set to
#. * zero.
-#: libprocess/gwygrainvalue.c:210
+#: libprocess/gwygrainvalue.c:208
msgid "Zero basis volume"
msgstr "Volume con base zero"
#. TRANSLATORS: Grain volume calculated using basis (foot) set to the
#. * grain minimum.
-#: libprocess/gwygrainvalue.c:221
+#: libprocess/gwygrainvalue.c:219
msgid "Grain minimum basis volume"
msgstr "Volume con base minimo grani"
#. TRANSLATORS: Grain volume calculated using basis (foot) set to the
#. * Laplacian background.
-#: libprocess/gwygrainvalue.c:232
+#: libprocess/gwygrainvalue.c:230
msgid "Laplacian background basis volume"
msgstr "Volume con base sottofondo Laplaciano"
-#: libprocess/gwygrainvalue.c:241
+#: libprocess/gwygrainvalue.c:239
msgid "Projected boundary length"
msgstr "Lunghezza contorno proiettato"
-#: libprocess/gwygrainvalue.c:250
+#: libprocess/gwygrainvalue.c:248
msgid "Minimum bounding size"
msgstr "Dimensioni legame minimo"
-#: libprocess/gwygrainvalue.c:259
+#: libprocess/gwygrainvalue.c:257
msgid "Minimum bounding direction"
msgstr "Direzione legame minimo"
-#: libprocess/gwygrainvalue.c:268
+#: libprocess/gwygrainvalue.c:266
msgid "Maximum bounding size"
msgstr "Dimensione legame massimo"
-#: libprocess/gwygrainvalue.c:277
+#: libprocess/gwygrainvalue.c:275
msgid "Maximum bounding direction"
msgstr "Direzione legame massimo"
-#: libprocess/gwygrainvalue.c:286
+#: libprocess/gwygrainvalue.c:284
msgid "Maximum inscribed disc radius"
msgstr "Raggio disco inscritto massimo "
-#: libprocess/gwygrainvalue.c:295
+#: libprocess/gwygrainvalue.c:293
msgid "Maximum inscribed disc center x position"
msgstr "Posizione x del centro del disco inscritto massimo"
-#: libprocess/gwygrainvalue.c:304
+#: libprocess/gwygrainvalue.c:302
msgid "Maximum inscribed disc center y position"
msgstr "Posizione y del centro del disco inscritto massimo"
-#: libprocess/gwygrainvalue.c:313
+#: libprocess/gwygrainvalue.c:311
msgid "Minimum circumcircle radius"
msgstr "Raggio circumcerchio minimo "
-#: libprocess/gwygrainvalue.c:322
+#: libprocess/gwygrainvalue.c:320
msgid "Minimum circumcircle center x position"
msgstr "Posizione x centro circumcerchio minimo"
-#: libprocess/gwygrainvalue.c:331
+#: libprocess/gwygrainvalue.c:329
msgid "Minimum circumcircle center y position"
msgstr "Posizione y centro circumcerchio minimo"
-#: libprocess/gwygrainvalue.c:340
+#: libprocess/gwygrainvalue.c:338
msgid "Mean radius"
msgstr "Raggio medio"
-#: libprocess/gwygrainvalue.c:349 modules/tools/readvalue.c:319
+#: libprocess/gwygrainvalue.c:347 modules/tools/readvalue.c:322
msgid "Inclination θ"
msgstr "Inclinazione θ"
-#: libprocess/gwygrainvalue.c:358 modules/tools/readvalue.c:329
+#: libprocess/gwygrainvalue.c:356 modules/tools/readvalue.c:332
msgid "Inclination φ"
msgstr "Inclinazione φ"
-#: libprocess/gwygrainvalue.c:367
+#: libprocess/gwygrainvalue.c:365
msgid "Curvature center x position"
msgstr "Posizione x centro curvatura"
-#: libprocess/gwygrainvalue.c:376
+#: libprocess/gwygrainvalue.c:374
msgid "Curvature center y position"
msgstr "Posizione y centro curvatura"
-#: libprocess/gwygrainvalue.c:385
+#: libprocess/gwygrainvalue.c:383
msgid "Curvature center z value"
msgstr "Posizione z centro curvatura"
-#: libprocess/gwygrainvalue.c:394 modules/tools/readvalue.c:344
+#: libprocess/gwygrainvalue.c:392 modules/tools/readvalue.c:347
msgid "Curvature 1"
msgstr "Curvatura 1"
-#: libprocess/gwygrainvalue.c:403 modules/tools/readvalue.c:354
+#: libprocess/gwygrainvalue.c:401 modules/tools/readvalue.c:357
msgid "Curvature 2"
msgstr "Curvatura 2"
-#: libprocess/gwygrainvalue.c:412
+#: libprocess/gwygrainvalue.c:410
msgid "Curvature angle 1"
msgstr "Angolo curvatura 1"
-#: libprocess/gwygrainvalue.c:421
+#: libprocess/gwygrainvalue.c:419
msgid "Curvature angle 2"
msgstr "Angolo curvatura 2"
-#: libprocess/gwygrainvalue.c:430
+#: libprocess/gwygrainvalue.c:428
msgid "Major semiaxis of equivalent ellipse"
msgstr "Semiasse maggiore di ellisse equivalente"
-#: libprocess/gwygrainvalue.c:439
+#: libprocess/gwygrainvalue.c:437
msgid "Minor semiaxis of equivalent ellipse"
msgstr "Semiasse minore di ellisse equivalente"
-#: libprocess/gwygrainvalue.c:448
+#: libprocess/gwygrainvalue.c:446
msgid "Orientation of equivalent ellipse"
msgstr "Orientamento ellisse equivalente"
-#: libprocess/gwygrainvalue.c:1120
+#: libprocess/gwygrainvalue.c:1118
msgid "Id"
msgstr "Id"
-#: libprocess/gwygrainvalue.c:1121 modules/graph/graph_peaks.c:156
-#: modules/process/extract_path.c:391 modules/process/wave_synth.c:482
-#: modules/tools/readvalue.c:251
+#: libprocess/gwygrainvalue.c:1119 modules/graph/graph_peaks.c:154
+#: modules/process/extract_path.c:391 modules/process/wave_synth.c:513
+#: modules/tools/readvalue.c:253
msgid "Position"
msgstr "Posizione"
-#: libprocess/gwygrainvalue.c:1122 app/meta.c:411 modules/file/imgexport.c:4625
-#: modules/process/curvature.c:762 modules/tools/level3.c:468
-#: modules/tools/readvalue.c:286
+#: libprocess/gwygrainvalue.c:1120 app/meta.c:411 modules/file/imgexport.c:4573
+#: modules/process/curvature.c:759 modules/tools/level3.c:475
+#: modules/tools/readvalue.c:290
msgid "Value"
msgstr "Valore"
-#: libprocess/gwygrainvalue.c:1123
+#: libprocess/gwygrainvalue.c:1121
msgid "Area"
msgstr "Area"
-#: libprocess/gwygrainvalue.c:1124 app/data-browser.c:5624 app/toolbox.c:110
+#: libprocess/gwygrainvalue.c:1122 app/data-browser.c:5624 app/toolbox.c:115
msgid "Volume"
msgstr "Volume"
-#: libprocess/gwygrainvalue.c:1125
+#: libprocess/gwygrainvalue.c:1123
msgid "Boundary"
msgstr "Confine"
-#: libprocess/gwygrainvalue.c:1126 modules/process/pat_synth.c:829
-#: modules/process/pat_synth.c:1131 modules/process/pat_synth.c:1466
-#: modules/tools/linestats.c:171 modules/volume/volume_linestat.c:147
+#: libprocess/gwygrainvalue.c:1124 modules/process/pat_synth.c:830
+#: modules/process/pat_synth.c:1132 modules/process/pat_synth.c:1467
+#: modules/tools/linestats.c:171 modules/volume/volume_linestat.c:149
msgid "Slope"
msgstr "Pendenza"
-#: libprocess/gwygrainvalue.c:1127 modules/process/curvature.c:213
-#: modules/process/curvature.c:613
+#: libprocess/gwygrainvalue.c:1125 modules/process/curvature.c:212
+#: modules/process/curvature.c:615
msgid "Curvature"
msgstr "Curvatura"
-#: libprocess/gwygrainvalue.c:1128
+#: libprocess/gwygrainvalue.c:1126
msgid "Moment"
msgstr "Momento"
-#: libprocess/gwygrainvalue.c:1132
+#: libprocess/gwygrainvalue.c:1130
msgid "User"
msgstr "Utente"
-#: libprocess/gwyprocessenums.c:44
+#: libprocess/gwyprocessenums.c:44 modules/process/preview.h:263
msgid "Union"
msgstr "Unione"
-#: libprocess/gwyprocessenums.c:45
+#: libprocess/gwyprocessenums.c:45 modules/process/preview.h:255
msgid "Intersection"
msgstr "Intersezione"
@@ -582,13 +591,13 @@ msgid "Scale and space adaptive"
msgstr "Scala e spazio adattati"
#. TRANSLATORS: Interpolation type (AKA nearest neighbour)
-#: libprocess/gwyprocessenums.c:207 modules/file/imgexport.c:3791
-#: modules/xyz/xyz_raster.c:640
+#: libprocess/gwyprocessenums.c:207 modules/file/imgexport.c:3756
+#: modules/xyz/xyz_raster.c:609
msgid "Round"
msgstr "Esatta"
-#: libprocess/gwyprocessenums.c:208 modules/file/imgexport.c:3792
-#: modules/xyz/xyz_raster.c:641
+#: libprocess/gwyprocessenums.c:208 modules/file/imgexport.c:3757
+#: modules/xyz/xyz_raster.c:610
msgid "Linear"
msgstr "Lineare"
@@ -676,27 +685,27 @@ msgstr "Includi solo area maschera"
msgid "Use entire image (ignore mask)"
msgstr "Usa immagine intera (ignora maschera)"
-#: libprocess/gwyprocessenums.c:602
+#: libprocess/gwyprocessenums.c:604
msgid "distance|City-block"
msgstr "distanza|City-block"
-#: libprocess/gwyprocessenums.c:603
+#: libprocess/gwyprocessenums.c:605
msgid "distance|Chess"
msgstr "distanza|Scacchi"
-#: libprocess/gwyprocessenums.c:604
+#: libprocess/gwyprocessenums.c:606
msgid "distance|Octagonal 4,8"
msgstr "distanza|Ottagonale 4,8"
-#: libprocess/gwyprocessenums.c:605
+#: libprocess/gwyprocessenums.c:607
msgid "distance|Octagonal 8,4"
msgstr "distanza|Ottagonale 8,4"
-#: libprocess/gwyprocessenums.c:606
+#: libprocess/gwyprocessenums.c:608
msgid "distance|Octagonal"
msgstr "distanza|Ottagonale"
-#: libprocess/gwyprocessenums.c:607
+#: libprocess/gwyprocessenums.c:609
msgid "distance|Euclidean"
msgstr "distanza!Euclidea"
@@ -733,11 +742,11 @@ msgstr "Passo parabolico"
msgid "Ring"
msgstr "Anello"
-#: libprocess/morph_lib.c:169 libprocess/tip.c:1043
+#: libprocess/morph_lib.c:169 libprocess/tip.c:1052
msgid "Dilation..."
msgstr "Espansione..."
-#: libprocess/morph_lib.c:235 libprocess/tip.c:1164
+#: libprocess/morph_lib.c:235 libprocess/tip.c:1173
msgid "Erosion..."
msgstr "Erosione..."
@@ -768,82 +777,82 @@ msgid_plural "Found %d internal local maxima"
msgstr[0] "Trovato un massimo locale interno"
msgstr[1] "Trovati %d massimi locali interni"
-#: libprocess/tip.c:422
+#: libprocess/tip.c:431
msgid "Pyramid"
msgstr "Piramide"
-#: libprocess/tip.c:423 libprocess/tip.c:429 libprocess/tip.c:435
+#: libprocess/tip.c:432 libprocess/tip.c:438 libprocess/tip.c:444
msgid "Pyramidal"
msgstr "Piramidale"
-#: libprocess/tip.c:428
+#: libprocess/tip.c:437
msgid "Contact"
msgstr "Contact"
-#: libprocess/tip.c:434
+#: libprocess/tip.c:443
msgid "Noncontact"
msgstr "Noncontact"
-#: libprocess/tip.c:440
+#: libprocess/tip.c:449
msgid "Delta function"
msgstr "Funzione Delta"
-#: libprocess/tip.c:441
+#: libprocess/tip.c:450
msgid "Analytical"
msgstr "Analitico"
-#: libprocess/tip.c:446
+#: libprocess/tip.c:455 modules/process/fibre_synth.c:259
msgid "Parabola"
msgstr "Parabola"
-#: libprocess/tip.c:447 libprocess/tip.c:453
+#: libprocess/tip.c:456 libprocess/tip.c:462
msgid "Symmetric"
msgstr "Simmetrico"
-#: libprocess/tip.c:452
+#: libprocess/tip.c:461
msgid "Cone"
msgstr "Cono"
-#: libprocess/tip.c:458
+#: libprocess/tip.c:467
msgid "Elliptical parabola"
msgstr ""
-#: libprocess/tip.c:459
+#: libprocess/tip.c:468
#, fuzzy
msgid "Asymmetric"
msgstr "Simmetrico"
-#: libprocess/tip.c:1339 libprocess/tip.c:1367 libprocess/tip.c:1416
-#: libprocess/tip.c:1443
+#: libprocess/tip.c:1348 libprocess/tip.c:1376 libprocess/tip.c:1425
+#: libprocess/tip.c:1452
msgid "Converting fields"
msgstr "Conversione campi"
-#: libprocess/tip.c:1349
+#: libprocess/tip.c:1358
msgid "Starting partial estimation"
msgstr "Inizio stima parziale"
-#: libprocess/tip.c:1426
+#: libprocess/tip.c:1435
msgid "Starting full estimation"
msgstr "Inizio stima totale "
-#: libprocess/triangulation.c:2085 modules/process/calcoefs_view.c:793
+#: libprocess/triangulation.c:2084 modules/process/calcoefs_view.c:793
#: modules/process/lat_synth.c:1178
msgid "Triangulating..."
msgstr "Triangolazione..."
-#: libgwydgets/gwy3dwindow.c:570
+#: libgwydgets/gwy3dwindow.c:575
msgid "Rotate view (R)"
msgstr "Ruota vista (R)"
-#: libgwydgets/gwy3dwindow.c:575
+#: libgwydgets/gwy3dwindow.c:580
msgid "Scale view as a whole (S)"
msgstr "Ridimensiona vista d'insieme (S)"
-#: libgwydgets/gwy3dwindow.c:580
+#: libgwydgets/gwy3dwindow.c:585
msgid "Scale value range (V)"
msgstr "Ridimensiona intervallo valori (V)"
-#: libgwydgets/gwy3dwindow.c:585
+#: libgwydgets/gwy3dwindow.c:590
msgid "Move light source (L)"
msgstr "Movimento sorgente luce (L)"
@@ -851,227 +860,288 @@ msgstr "Movimento sorgente luce (L)"
msgid "Show full controls"
msgstr "Mostra comandi completi"
-#: libgwydgets/gwy3dwindow.c:693
+#: libgwydgets/gwy3dwindow.c:691
msgid "Hide full controls"
msgstr "Nascondi comandi completi"
-#: libgwydgets/gwy3dwindow.c:709 modules/file/imgexport.c:4796
-#: modules/process/fit-shape.c:461
+#: libgwydgets/gwy3dwindow.c:707 modules/file/imgexport.c:4745
+#: modules/process/fit-shape.c:462
msgid "adjective|Basic"
msgstr "aggettivo|Basico"
-#: libgwydgets/gwy3dwindow.c:714
+#: libgwydgets/gwy3dwindow.c:712
msgid "Light & Material"
msgstr "Illuminazione e materiali"
-#: libgwydgets/gwy3dwindow.c:719
+#: libgwydgets/gwy3dwindow.c:717
msgid "Labels"
msgstr "Etichette"
-#: libgwydgets/gwy3dwindow.c:828 modules/process/facet_analysis.c:331
-#: modules/process/facet_analysis.c:347 modules/process/shade.c:245
+#: libgwydgets/gwy3dwindow.c:722
+#, fuzzy
+msgid "Colorbar"
+msgstr "Colore"
+
+#: libgwydgets/gwy3dwindow.c:838 modules/process/facet_analysis.c:335
+#: modules/process/facet_analysis.c:351 modules/process/shade.c:253
#: modules/process/tilt.c:223
msgid "φ:"
msgstr "φ:"
-#: libgwydgets/gwy3dwindow.c:828 libgwydgets/gwy3dwindow.c:834
-#: libgwydgets/gwy3dwindow.c:1032 libgwydgets/gwy3dwindow.c:1040
-#: modules/process/facet_analysis.c:375 modules/process/indent_analyze.c:460
-#: modules/process/rotate.c:264 modules/process/shade.c:237
-#: modules/process/shade.c:245 modules/process/tilt.c:211
-#: modules/process/tilt.c:223 modules/process/tip_model.c:234
-#: modules/process/tip_model.c:240 modules/process/unrotate.c:334
+#: libgwydgets/gwy3dwindow.c:838 libgwydgets/gwy3dwindow.c:843
+#: libgwydgets/gwy3dwindow.c:1013 libgwydgets/gwy3dwindow.c:1020
+#: modules/process/correct_affine.c:461 modules/process/facet_analysis.c:238
+#: modules/process/facet_analysis.c:370 modules/process/indent_analyze.c:438
+#: modules/process/measure_lattice.c:381 modules/process/rotate.c:264
+#: modules/process/shade.c:245 modules/process/shade.c:253
+#: modules/process/synth.h:379 modules/process/synth.h:410
+#: modules/process/tilt.c:211 modules/process/tilt.c:223
+#: modules/process/tip_model.c:234 modules/process/tip_model.c:240
+#: modules/process/unrotate.c:334 modules/tools/distance.c:197
+#: modules/tools/readvalue.c:223 modules/tools/stats.c:319
msgid "deg"
msgstr "°gra"
-#: libgwydgets/gwy3dwindow.c:834 modules/process/facet_analysis.c:330
-#: modules/process/facet_analysis.c:346 modules/process/shade.c:237
+#: libgwydgets/gwy3dwindow.c:843 modules/process/facet_analysis.c:334
+#: modules/process/facet_analysis.c:350 modules/process/shade.c:245
#: modules/process/tilt.c:211
msgid "θ:"
msgstr "θ:"
-#: libgwydgets/gwy3dwindow.c:839 modules/process/cwt.c:151
+#: libgwydgets/gwy3dwindow.c:849 modules/process/cwt.c:151
msgid "_Scale:"
msgstr "_Scala:"
-#: libgwydgets/gwy3dwindow.c:846
+#: libgwydgets/gwy3dwindow.c:856
msgid "_Value scale:"
msgstr "_Valore scala:"
-#: libgwydgets/gwy3dwindow.c:851
+#: libgwydgets/gwy3dwindow.c:862
msgid "Ph_ysical scale:"
msgstr "Scala fisica:"
-#: libgwydgets/gwy3dwindow.c:865
+#: libgwydgets/gwy3dwindow.c:876
msgid "verb|Set"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:877
+#: libgwydgets/gwy3dwindow.c:886
msgid "Line _width:"
msgstr "Larghezza linea:"
-#: libgwydgets/gwy3dwindow.c:881
+#: libgwydgets/gwy3dwindow.c:886 libgwydgets/gwy3dwindow.c:1194
+#: libgwydgets/gwy3dwindow.c:1204 libgwydgets/gwy3dwindow.c:1235
+#: libgwydgets/gwygraphareadialog.c:157 libgwydgets/gwygraphareadialog.c:173
+#: modules/file/hdrimage.cc:2246 modules/file/hdrimage.cc:2252
+#: modules/file/pixmap.c:820 modules/file/pixmap.c:826
+#: modules/process/angle_dist.c:188 modules/process/angle_dist.c:213
+#: modules/process/col_synth.c:486 modules/process/crosscor.c:252
+#: modules/process/crosscor.c:260 modules/process/crosscor.c:276
+#: modules/process/crosscor.c:284 modules/process/crosscor.c:300
+#: modules/process/crosscor.c:308 modules/process/cwt.c:151
+#: modules/process/dimensions.h:88 modules/process/edge.c:672
+#: modules/process/entropy.c:242 modules/process/extend.c:220
+#: modules/process/extend.c:227 modules/process/extend.c:234
+#: modules/process/extend.c:241 modules/process/facet_analysis.c:362
+#: modules/process/fbm_synth.c:383 modules/process/hough.c:203
+#: modules/process/local_contrast.c:146 modules/process/mark_disconn.c:263
+#: modules/process/mask_morph.c:237 modules/process/median-bg.c:209
+#: modules/process/neural.c:623 modules/process/neural.c:631
+#: modules/process/psdf_logphi.c:276 modules/process/rank.c:188
+#: modules/process/scale.c:237 modules/process/scale.c:246
+#: modules/process/scars.c:353 modules/process/scars.c:361
+#: modules/process/semsim.c:227 modules/process/slope_dist.c:365
+#: modules/process/slope_dist.c:393 modules/process/sphere-revolve.c:346
+#: modules/process/straighten_path.c:278 modules/process/synth.h:280
+#: modules/process/synth.h:501 modules/process/tip_blind.c:334
+#: modules/process/tip_blind.c:342 modules/process/volumize_layers.c:240
+#: modules/process/volumize_layers.c:245 modules/process/volumize_layers.c:250
+#: modules/process/wpour_mark.c:320 modules/tools/filter.c:291
+#: modules/tools/level3.c:244 modules/tools/maskedit.c:528
+#: modules/tools/maskedit.c:629 modules/tools/pathlevel.c:256
+#: modules/tools/profile.c:377 modules/tools/profile.c:503
+#: modules/tools/readvalue.c:222 modules/tools/readvalue.c:378
+#: modules/tools/roughness.c:868 modules/volume/volume_slice.c:446
+#: modules/volume/volume_slice.c:469 modules/volume/volume_slice.c:492
+#: modules/xyz/xyz_drift.c:738 modules/xyz/xyz_drift.c:753
+#: modules/xyz/xyz_raster.c:382 modules/xyz/xyz_raster.c:388
+msgid "px"
+msgstr "px"
+
+#: libgwydgets/gwy3dwindow.c:891
msgid "Show _axes"
msgstr "Mostra _assi"
-#: libgwydgets/gwy3dwindow.c:890
+#: libgwydgets/gwy3dwindow.c:900
msgid "Show _labels"
msgstr "Mostra _etichette"
-#: libgwydgets/gwy3dwindow.c:899
-msgid "Show false _colorbar"
-msgstr "Mostra barra falsi _colori"
-
-#: libgwydgets/gwy3dwindow.c:908
+#: libgwydgets/gwy3dwindow.c:909
msgid "_Orthographic projection"
msgstr "Proiezione _Ortogonale"
-#: libgwydgets/gwy3dwindow.c:917
+#: libgwydgets/gwy3dwindow.c:918
msgid "_Hide masked"
msgstr "Nascondi selezione maschera"
-#: libgwydgets/gwy3dwindow.c:933
+#: libgwydgets/gwy3dwindow.c:934
msgid "_Lighting"
msgstr "Illuminazione"
-#: libgwydgets/gwy3dwindow.c:934
+#: libgwydgets/gwy3dwindow.c:935
msgid "_Gradient"
msgstr "_Gradient"
-#: libgwydgets/gwy3dwindow.c:935
+#: libgwydgets/gwy3dwindow.c:936
msgid "_Overlay"
msgstr "Sovrapposizione"
-#: libgwydgets/gwy3dwindow.c:936
+#: libgwydgets/gwy3dwindow.c:937
msgid "_Overlay - no light"
msgstr "Sovrapposizione - nessuna luce"
-#: libgwydgets/gwy3dwindow.c:1009
+#: libgwydgets/gwy3dwindow.c:992
msgid "_Material:"
msgstr "_Materiale:"
-#: libgwydgets/gwy3dwindow.c:1032
+#: libgwydgets/gwy3dwindow.c:1013
msgid "_Light φ:"
msgstr "_Luce φ:"
-#: libgwydgets/gwy3dwindow.c:1040
+#: libgwydgets/gwy3dwindow.c:1020
msgid "L_ight θ:"
msgstr "L_uce θ:"
-#: libgwydgets/gwy3dwindow.c:1070 libgwydgets/gwy3dwindow.c:1240
-#: app/toolbox-editor.c:215 modules/file/hdrimage.cc:2213
-#: modules/file/imgexport.c:4760 modules/file/pixmap.c:789
+#: libgwydgets/gwy3dwindow.c:1052 libgwydgets/gwy3dwindow.c:1243
+#: app/toolbox-editor.c:216 modules/file/hdrimage.cc:2213
+#: modules/file/imgexport.c:4708 modules/file/pixmap.c:789
#: modules/file/rawfile.c:424 modules/process/angle_dist.c:172
#: modules/process/bdep_synth.c:341 modules/process/calcoefs_new.c:371
-#: modules/process/calibrate.c:391 modules/process/col_synth.c:392
-#: modules/process/correct_affine.c:301 modules/process/curvature.c:615
-#: modules/process/cwt.c:135 modules/process/deposit_synth.c:349
+#: modules/process/calibrate.c:383 modules/process/col_synth.c:392
+#: modules/process/correct_affine.c:346 modules/process/curvature.c:617
+#: modules/process/cwt.c:135 modules/process/deposit_synth.c:350
#: modules/process/diff_synth.c:411 modules/process/domain_synth.c:354
#: modules/process/drift.c:245 modules/process/dwt.c:166
#: modules/process/dwtanisotropy.c:184 modules/process/edge.c:638
#: modules/process/extend.c:192 modules/process/facet-level.c:193
-#: modules/process/facet_analysis.c:271 modules/process/fbm_synth.c:303
+#: modules/process/facet_analysis.c:275 modules/process/fbm_synth.c:303
#: modules/process/fft.c:336 modules/process/fft_filter_2d.c:417
-#: modules/process/fft_synth.c:341 modules/process/fractal.c:231
-#: modules/process/grain_edge.c:213 modules/process/grain_mark.c:247
-#: modules/process/grain_wshed.c:167 modules/process/hough.c:179
-#: modules/process/lat_synth.c:567 modules/process/latsim.c:159
-#: modules/process/level.c:245 modules/process/linematch.c:804
-#: modules/process/lno_synth.c:433 modules/process/local_contrast.c:130
-#: modules/process/logistic.c:234 modules/process/mark_disconn.c:208
-#: modules/process/mask_distribute.c:152 modules/process/measure_lattice.c:256
-#: modules/process/median-bg.c:180 modules/process/noise_synth.c:336
-#: modules/process/obj_synth.c:441 modules/process/pat_synth.c:385
-#: modules/process/pid.c:199 modules/process/polydistort.c:210
-#: modules/process/polylevel.c:373 modules/process/psdf_logphi.c:249
-#: modules/process/rank.c:158 modules/process/rotate.c:243
-#: modules/process/scale.c:196 modules/process/scars.c:298
-#: modules/process/semsim.c:211 modules/process/shade.c:208
-#: modules/process/slope_dist.c:276 modules/process/sphere-revolve.c:218
-#: modules/process/straighten_path.c:249 modules/process/tilt.c:161
-#: modules/process/tip_model.c:169 modules/process/unrotate.c:220
-#: modules/process/volumize_layers.c:221 modules/process/wave_synth.c:349
-#: modules/process/wpour_mark.c:278 modules/volume/volume_calibrate.c:370
-#: modules/volume/volume_extract.c:331 modules/volume/volume_kmeans.c:153
-#: modules/volume/volume_kmedians.c:147 modules/volume/volume_linestat.c:292
-#: modules/volume/volume_slice.c:292
+#: modules/process/fft_synth.c:341 modules/process/fibre_synth.c:422
+#: modules/process/fractal.c:228 modules/process/grain_edge.c:212
+#: modules/process/grain_mark.c:246 modules/process/grain_wshed.c:168
+#: modules/process/hough.c:174 modules/process/lat_synth.c:567
+#: modules/process/latsim.c:159 modules/process/level.c:245
+#: modules/process/linematch.c:771 modules/process/lno_synth.c:431
+#: modules/process/local_contrast.c:130 modules/process/logistic.c:234
+#: modules/process/mark_disconn.c:208 modules/process/mask_distribute.c:152
+#: modules/process/measure_lattice.c:246 modules/process/median-bg.c:180
+#: modules/process/mfm_current.c:332 modules/process/mfm_field.c:281
+#: modules/process/mfm_findshift.c:230 modules/process/mfm_parallel.c:333
+#: modules/process/mfm_shift.c:170 modules/process/noise_synth.c:334
+#: modules/process/obj_synth.c:438 modules/process/pat_synth.c:385
+#: modules/process/phase_synth.c:205 modules/process/pid.c:197
+#: modules/process/polydistort.c:210 modules/process/polylevel.c:373
+#: modules/process/psdf_logphi.c:249 modules/process/rank.c:158
+#: modules/process/rotate.c:243 modules/process/scale.c:196
+#: modules/process/scars.c:317 modules/process/semsim.c:211
+#: modules/process/shade.c:210 modules/process/slope_dist.c:275
+#: modules/process/sphere-revolve.c:317 modules/process/straighten_path.c:248
+#: modules/process/tilt.c:161 modules/process/tip_model.c:167
+#: modules/process/unrotate.c:220 modules/process/volumize_layers.c:221
+#: modules/process/wave_synth.c:368 modules/process/wpour_mark.c:278
+#: modules/volume/volume_calibrate.c:370 modules/volume/volume_extract.c:324
+#: modules/volume/volume_kmeans.c:154 modules/volume/volume_kmedians.c:147
+#: modules/volume/volume_linestat.c:297 modules/volume/volume_slice.c:294
msgid "_Reset"
msgstr "_Ripristina"
-#: libgwydgets/gwy3dwindow.c:1142
+#: libgwydgets/gwy3dwindow.c:1141
msgid "X-axis"
msgstr "asse X"
-#: libgwydgets/gwy3dwindow.c:1143
+#: libgwydgets/gwy3dwindow.c:1142
msgid "Y-axis"
msgstr "asse Y"
-#: libgwydgets/gwy3dwindow.c:1144
+#: libgwydgets/gwy3dwindow.c:1143
msgid "Minimum z value"
msgstr "Valore minimo z"
-#: libgwydgets/gwy3dwindow.c:1145
+#: libgwydgets/gwy3dwindow.c:1144
msgid "Maximum z value"
msgstr "Valore massimo z"
-#: libgwydgets/gwy3dwindow.c:1168 modules/file/imgexport.c:3836
+#: libgwydgets/gwy3dwindow.c:1167 modules/file/imgexport.c:3806
msgid "_Label:"
msgstr "_Etichetta:"
-#: libgwydgets/gwy3dwindow.c:1173
+#: libgwydgets/gwy3dwindow.c:1180
msgid "_Text:"
msgstr "_Testo:"
-#: libgwydgets/gwy3dwindow.c:1193
+#: libgwydgets/gwy3dwindow.c:1185
msgid "Move label"
msgstr "Sposta etichetta"
-#: libgwydgets/gwy3dwindow.c:1202
+#: libgwydgets/gwy3dwindow.c:1194
msgid "_Horizontally:"
msgstr "_Orizzontale:"
-#: libgwydgets/gwy3dwindow.c:1212
+#: libgwydgets/gwy3dwindow.c:1204
msgid "_Vertically:"
msgstr "_Verticale:"
-#: libgwydgets/gwy3dwindow.c:1220
+#: libgwydgets/gwy3dwindow.c:1212
+msgid "A_ll labels have the same size"
+msgstr ""
+
+#: libgwydgets/gwy3dwindow.c:1223
msgid "Scale size _automatically"
msgstr "Ridimensiona _automaticamente"
-#: libgwydgets/gwy3dwindow.c:1232 modules/tools/filter.c:290
+#: libgwydgets/gwy3dwindow.c:1235 modules/tools/filter.c:291
msgid "Si_ze:"
msgstr "Dimensione:"
-#: libgwydgets/gwy3dwindow.c:1232 modules/process/cwt.c:151
-#: modules/process/hough.c:212
-msgid "pixels"
-msgstr "pixel"
+#: libgwydgets/gwy3dwindow.c:1277
+msgid "Show false _colorbar"
+msgstr "Mostra barra falsi _colori"
+
+#: libgwydgets/gwy3dwindow.c:1286
+msgid "Reserve space for _colorbar"
+msgstr ""
+
+#: libgwydgets/gwy3dwindow.c:1302 modules/process/lat_synth.c:651
+#: modules/process/obj_synth.c:542 modules/process/pat_synth.c:1458
+#: modules/process/phase_synth.c:279
+msgid "_Size:"
+msgstr "Dimensione:"
+
+#: libgwydgets/gwy3dwindow.c:1311
+#, fuzzy
+msgid "_Vertical alignment:"
+msgstr "Dimensione verticale:"
-#: libgwydgets/gwy3dwindow.c:1726 libgwydgets/gwy3dwindow.c:1779
+#: libgwydgets/gwy3dwindow.c:1844 libgwydgets/gwy3dwindow.c:1897
msgid "S_witch to Lighting Mode"
msgstr "Visualizzazione Illuminazione"
-#: libgwydgets/gwy3dwindow.c:1734 libgwydgets/gwy3dwindow.c:1756
+#: libgwydgets/gwy3dwindow.c:1852 libgwydgets/gwy3dwindow.c:1874
msgid "S_witch to Overlay Mode"
msgstr "S_postamento in modalità Overlay"
-#: libgwydgets/gwy3dwindow.c:1748 libgwydgets/gwy3dwindow.c:1771
+#: libgwydgets/gwy3dwindow.c:1866 libgwydgets/gwy3dwindow.c:1889
msgid "S_witch to Color Gradient Mode"
msgstr "Visualizzazione Gradiente di Colore"
-#: libgwydgets/gwy3dwindow.c:1787
+#: libgwydgets/gwy3dwindow.c:1905
msgid "T_oggle light"
msgstr "Attiva luce"
-#: libgwydgets/gwyaxisdialog.c:99
+#: libgwydgets/gwyaxisdialog.c:75
msgid "Axis Properties"
msgstr "Proprietà asse"
-#: libgwydgets/gwyaxisdialog.c:101 libgwydgets/gwygraphlabeldialog.c:63
-msgid "Label Properties"
-msgstr "Proprietà etichetta"
-
-#: libgwydgets/gwyaxisdialog.c:184
+#: libgwydgets/gwyaxisdialog.c:88
msgid "Label Text"
msgstr "Testo Etichetta"
@@ -1093,7 +1163,7 @@ msgid "Hidden"
msgstr "Nascosto"
#: libgwydgets/gwydgetenums.c:47 libgwydgets/gwygraphwindowmeasuredialog.c:572
-#: modules/file/imgexport.c:475 modules/tools/selectionmanager.c:274
+#: modules/file/imgexport.c:474 modules/tools/selectionmanager.c:274
msgid "Points"
msgstr "Punti"
@@ -1101,7 +1171,7 @@ msgstr "Punti"
msgid "Line + points"
msgstr "Linea + punti"
-#: libgwydgets/gwydgetutils.c:564
+#: libgwydgets/gwydgetutils.c:848
msgid "Change Mask Color"
msgstr "Cambia colore maschera"
@@ -1110,7 +1180,7 @@ msgid "Quantity"
msgstr "Quantità"
#: libgwydgets/gwygrainvaluemenu.c:194 libgwydgets/gwygrainvaluemenu.c:207
-#: modules/process/curvature.c:753
+#: modules/process/curvature.c:750
msgid "Symbol"
msgstr "Simbolo"
@@ -1130,136 +1200,141 @@ msgstr "Pre_v"
msgid "_Next"
msgstr "Successivo"
-#: libgwydgets/gwygraphareadialog.c:127 modules/file/rawgraph.c:302
+#: libgwydgets/gwygraphareadialog.c:123 modules/file/rawgraph.c:302
msgid "Plot _style:"
msgstr "Stile grafico:"
-#: libgwydgets/gwygraphareadialog.c:148
+#: libgwydgets/gwygraphareadialog.c:131
msgid "Pl_ot color:"
msgstr "Colore grafico:"
-#: libgwydgets/gwygraphareadialog.c:159
+#: libgwydgets/gwygraphareadialog.c:151
msgid "Point _type:"
msgstr "Tipo punto:"
-#: libgwydgets/gwygraphareadialog.c:165
+#: libgwydgets/gwygraphareadialog.c:157
msgid "_Point size:"
msgstr "Dimensione punto:"
-#: libgwydgets/gwygraphareadialog.c:175
+#: libgwydgets/gwygraphareadialog.c:167
msgid "_Line type:"
msgstr "Tipo linea:"
-#: libgwydgets/gwygraphareadialog.c:181 modules/file/imgexport.c:3150
+#: libgwydgets/gwygraphareadialog.c:173 modules/file/imgexport.c:3154
msgid "Line t_hickness:"
msgstr "Spessore linea:"
-#: libgwydgets/gwygraphareadialog.c:187
+#: libgwydgets/gwygraphareadialog.c:180
msgid "<b>Label Te_xt</b>"
msgstr "<b>Testo Etichetta</b>"
-#: libgwydgets/gwygraphareadialog.c:404
+#: libgwydgets/gwygraphareadialog.c:397
msgid "Set Curve Color"
msgstr "Definisci colore curva"
-#: libgwydgets/gwygraphareadialog.c:556 modules/process/mask_morph.c:179
+#: libgwydgets/gwygraphareadialog.c:549 modules/process/mask_morph.c:178
msgid "Square"
msgstr "Quadrata"
-#: libgwydgets/gwygraphareadialog.c:558 modules/process/mask_morph.c:180
+#: libgwydgets/gwygraphareadialog.c:551 modules/process/mask_morph.c:179
msgid "Diamond"
msgstr "Rombo"
-#: libgwydgets/gwygraphareadialog.c:559
+#: libgwydgets/gwygraphareadialog.c:552
msgid "Cross"
msgstr "Croce"
-#: libgwydgets/gwygraphareadialog.c:560
+#: libgwydgets/gwygraphareadialog.c:553
msgid "Diagonal cross"
msgstr "Croce diagonale"
-#: libgwydgets/gwygraphareadialog.c:561
+#: libgwydgets/gwygraphareadialog.c:554
msgid "Asterisk"
msgstr "Asterisco"
-#: libgwydgets/gwygraphareadialog.c:562
+#: libgwydgets/gwygraphareadialog.c:555
msgid "Star"
msgstr "Stella"
-#: libgwydgets/gwygraphareadialog.c:563
+#: libgwydgets/gwygraphareadialog.c:556
msgid "Triangle up"
msgstr "Triangolo vertice alto"
-#: libgwydgets/gwygraphareadialog.c:564
+#: libgwydgets/gwygraphareadialog.c:557
msgid "Triangle down"
msgstr "Triangolo vertice basso"
-#: libgwydgets/gwygraphareadialog.c:565
+#: libgwydgets/gwygraphareadialog.c:558
msgid "Triangle left"
msgstr "Triangolo vertice a sinistra"
-#: libgwydgets/gwygraphareadialog.c:566
+#: libgwydgets/gwygraphareadialog.c:559
msgid "Triangle right"
msgstr "Triangolo vertice a destra"
-#: libgwydgets/gwygraphareadialog.c:567
+#: libgwydgets/gwygraphareadialog.c:560
msgid "Full square"
msgstr "Quadrato pieno"
-#: libgwydgets/gwygraphareadialog.c:568 modules/process/mask_morph.c:177
+#: libgwydgets/gwygraphareadialog.c:561 modules/process/mask_morph.c:176
msgid "Disc"
msgstr "Disco"
-#: libgwydgets/gwygraphareadialog.c:569
+#: libgwydgets/gwygraphareadialog.c:562
msgid "Full diamond"
msgstr "Rombo pieno"
-#: libgwydgets/gwygraphareadialog.c:570
+#: libgwydgets/gwygraphareadialog.c:563
msgid "Full triangle up"
msgstr "Triangolo pieno vertice alto"
-#: libgwydgets/gwygraphareadialog.c:571
+#: libgwydgets/gwygraphareadialog.c:564
msgid "Full triangle down"
msgstr "Triangolo pieno vertice basso"
-#: libgwydgets/gwygraphareadialog.c:572
+#: libgwydgets/gwygraphareadialog.c:565
msgid "Full triangle left"
msgstr "Triangolo pieno vertice a sinistra"
-#: libgwydgets/gwygraphareadialog.c:573
+#: libgwydgets/gwygraphareadialog.c:566
msgid "Full triangle right"
msgstr "Triangolo pieno vertice a destra"
-#: libgwydgets/gwygraphareadialog.c:635
+#: libgwydgets/gwygraphareadialog.c:628
msgid "line-style|Solid"
msgstr "stile-linea|Piena"
-#: libgwydgets/gwygraphareadialog.c:636
+#: libgwydgets/gwygraphareadialog.c:629
msgid "line-style|Dash"
msgstr "stile-linea|Tratteggiata"
-#: libgwydgets/gwygraphcurves.c:451
+#: libgwydgets/gwygraphcurves.c:448
msgid "Description"
msgstr "Descrizione"
-#: libgwydgets/gwygraphcurves.c:463
+#: libgwydgets/gwygraphcurves.c:460
msgid "Mode"
msgstr "Modo "
-#: libgwydgets/gwygraphcurves.c:481
+#: libgwydgets/gwygraphcurves.c:478
msgid "Color"
msgstr "Colore"
-#: libgwydgets/gwygraphcurves.c:494
+#: libgwydgets/gwygraphcurves.c:491
msgid "Point Type"
msgstr "Tipo punto"
-#: libgwydgets/gwygraphcurves.c:516
+#: libgwydgets/gwygraphcurves.c:513
msgid "Line Style"
msgstr "Stile linea"
+#: libgwydgets/gwygraphlabeldialog.c:63
+msgid "Label Properties"
+msgstr "Proprietà etichetta"
+
#: libgwydgets/gwygraphlabeldialog.c:74
-msgid "Frame thickness:"
+#, fuzzy
+msgid "_Frame thickness:"
msgstr "Spessore cornice:"
#: libgwydgets/gwygraphlabeldialog.c:81
@@ -1270,12 +1345,12 @@ msgstr "Disposizione invertita"
msgid "Abscissa"
msgstr "Ascissa"
-#: libgwydgets/gwygraphwindow.c:163 app/toolbox-editor.c:1002 app/toolbox.c:108
+#: libgwydgets/gwygraphwindow.c:163 app/toolbox-editor.c:1015 app/toolbox.c:113
msgid "Graph"
msgstr "Grafico"
#: libgwydgets/gwygraphwindow.c:170 modules/file/hdrimage.cc:472
-#: modules/process/fit-shape.c:656
+#: modules/process/fit-shape.c:666 modules/process/psf.c:229
msgid "Data"
msgstr "Dati"
@@ -1313,15 +1388,15 @@ msgstr "Punta in una direzione qualunque"
#: libgwydgets/gwygraphwindowmeasuredialog.c:394
#: libgwydgets/gwygraphwindowmeasuredialog.c:580 modules/tools/linestats.c:170
-#: modules/tools/roughness.c:516 modules/volume/volume_linestat.c:157
+#: modules/tools/roughness.c:517 modules/volume/volume_linestat.c:159
msgid "Length"
msgstr "Lunghezza"
#: libgwydgets/gwygraphwindowmeasuredialog.c:398
#: libgwydgets/gwygraphwindowmeasuredialog.c:588 app/gwyplaintool.c:1018
-#: modules/process/lat_synth.c:747 modules/process/obj_synth.c:569
-#: modules/process/pat_synth.c:846 modules/process/pat_synth.c:1148
-#: modules/process/pat_synth.c:1483
+#: modules/process/fibre_synth.c:534 modules/process/lat_synth.c:747
+#: modules/process/obj_synth.c:567 modules/process/pat_synth.c:847
+#: modules/process/pat_synth.c:1149 modules/process/pat_synth.c:1484
msgid "Height"
msgstr "Altezza"
@@ -1334,12 +1409,12 @@ msgid "Curve:"
msgstr "Curvatura:"
#: libgwydgets/gwygraphwindowmeasuredialog.c:553
-#: modules/process/linematch.c:828 modules/process/semsim.c:249
+#: modules/process/linematch.c:795 modules/process/semsim.c:249
#: modules/xyz/xyz_level.c:254
msgid "Method:"
msgstr "Metodo:"
-#: libgwydgets/gwygraphwindowmeasuredialog.c:592 modules/process/crosscor.c:354
+#: libgwydgets/gwygraphwindowmeasuredialog.c:592 modules/process/crosscor.c:331
msgid "Angle"
msgstr "Angolo"
@@ -1349,7 +1424,7 @@ msgid "Preferred"
msgstr "Preferiti"
#: libgwydgets/gwyoptionmenus.c:470 app/meta.c:410
-#: modules/file/imgexport.c:4160 modules/file/imgexport.c:4607
+#: modules/file/imgexport.c:4110 modules/file/imgexport.c:4555
#: modules/file/rawfile.c:995 modules/process/convolution_filter.c:538
#: modules/process/neural.c:418 modules/tools/selectionmanager.c:345
msgid "Name"
@@ -1388,7 +1463,7 @@ msgid "A_dd symbol"
msgstr "A_ggiungi simbolo"
#: libgwydgets/gwyscitext.c:274 modules/file/rawfile.c:553
-#: modules/xyz/xyz_drift.c:580 modules/xyz/xyz_raster.c:405
+#: modules/xyz/xyz_drift.c:580 modules/xyz/xyz_raster.c:419
msgid "Preview"
msgstr "Anteprima"
@@ -1406,87 +1481,81 @@ msgstr "Nessun modulo è in grado di caricare questo tipo di file."
msgid "No module can save to this file type."
msgstr "Nessun modulo può salvare in questo formato."
-#: libgwymodule/gwymodulebrowser.c:67
+#: libgwymodule/gwymodulebrowser.c:66
msgid "Module Browser"
msgstr "Navigatore dei Moduli"
-#: libgwymodule/gwymodulebrowser.c:190
+#: libgwymodule/gwymodulebrowser.c:189
msgid "Module"
msgstr "Modulo"
-#: libgwymodule/gwymodulebrowser.c:190
+#: libgwymodule/gwymodulebrowser.c:189
msgid "Version"
msgstr "Versione"
-#: libgwymodule/gwymodulebrowser.c:190
+#: libgwymodule/gwymodulebrowser.c:189
msgid "Author"
msgstr "Autore"
-#: libgwymodule/gwymodulebrowser.c:246
+#: libgwymodule/gwymodulebrowser.c:244
msgid "Name-Version:"
msgstr "Nome-Versione:"
-#: libgwymodule/gwymodulebrowser.c:247 libgwymodule/gwymodulebrowser.c:270
+#: libgwymodule/gwymodulebrowser.c:245 libgwymodule/gwymodulebrowser.c:268
#: modules/process/grain_stat.c:186
msgid "File:"
msgstr "File:"
-#: libgwymodule/gwymodulebrowser.c:248
+#: libgwymodule/gwymodulebrowser.c:246
msgid "Registered functions:"
msgstr "Funzioni registrate:"
-#: libgwymodule/gwymodulebrowser.c:249
+#: libgwymodule/gwymodulebrowser.c:247
msgid "Authors:"
msgstr "Autori:"
-#: libgwymodule/gwymodulebrowser.c:250
+#: libgwymodule/gwymodulebrowser.c:248
msgid "Copyright:"
msgstr "Diritti d'autore:"
-#: libgwymodule/gwymodulebrowser.c:251
+#: libgwymodule/gwymodulebrowser.c:249
msgid "Date:"
msgstr "Data:"
-#: libgwymodule/gwymodulebrowser.c:252
+#: libgwymodule/gwymodulebrowser.c:250
msgid "Description:"
msgstr "Descrizione:"
-#: libgwymodule/gwymodulebrowser.c:269
+#: libgwymodule/gwymodulebrowser.c:267
msgid "Name:"
msgstr "Nome:"
-#: libgwymodule/gwymodulebrowser.c:271
+#: libgwymodule/gwymodulebrowser.c:269
msgid "Failure:"
msgstr "Fallimento:"
-#: app/about.c:57
+#: app/about.c:58
#, c-format
msgid "About %s"
msgstr "Informazioni su %s"
-#. TRANSLATORS: %s is replaced with date in ISO format YYYY-MM-DD.
-#: app/about.c:92
-#, c-format
-msgid "Released %s\n"
-msgstr "Rilasciato %s\n"
-
-#: app/about.c:93
+#: app/about.c:97
msgid "An SPM data visualization and analysis tool."
msgstr "Applicazione di analisi e visualizzazione dati SPM."
-#: app/about.c:101
+#: app/about.c:105
msgid "Report bugs to:"
msgstr "Segnalazione bachi: "
-#: app/about.c:116
+#: app/about.c:120
msgid "Credits"
msgstr "Credits"
-#: app/about.c:133
+#: app/about.c:137
msgid "License"
msgstr "Licenza"
-#: app/about.c:138
+#: app/about.c:142
#, c-format
msgid ""
"%s is free software; you can redistribute it and/or modify it under the "
@@ -1500,59 +1569,63 @@ msgstr ""
"versione 2 o (a scelta) ogni versione successiva. Per il testo completo "
"della licenza vedi il file COPYING incluso nel pacchetto sorgente"
-#: app/about.c:160 modules/process/logistic.c:270
+#: app/about.c:164 modules/process/logistic.c:269
msgid "Features"
msgstr "Caratteristiche"
-#: app/about.c:220
+#: app/about.c:224
msgid "Developers"
msgstr "Altri sviluppatori"
-#: app/about.c:221
+#: app/about.c:225
msgid "Translators"
msgstr "Traduttori"
-#: app/about.c:225
+#: app/about.c:229
msgid "Development is supported by the Czech Metrology Institute: "
msgstr ""
"Lo sviluppo del programma e' sostenuto dall'Istituto di Metrologia Ceco:"
-#: app/about.c:253 app/about.c:256
+#: app/about.c:257 app/about.c:260
msgid "OpenGL 3D View"
msgstr "Vista 3D Open GL"
-#: app/about.c:257 app/about.c:271 app/about.c:291
+#: app/about.c:261 app/about.c:266 app/about.c:286
msgid "not available\n"
msgstr "non disponibile\n"
-#: app/about.c:262 app/about.c:265
-msgid "Fast Fourier Transform"
-msgstr "Trasformata di Fourier"
-
-#: app/about.c:266
-msgid "built-in SimpleFFT\n"
-msgstr "Semplice FFT, incorporata\n"
-
-#: app/about.c:274
+#: app/about.c:269
msgid "X11 protocol\n"
msgstr "Protocollo X11\n"
-#: app/about.c:276
+#: app/about.c:271
msgid "Win32 protocol\n"
msgstr "Protocollo Win32\n"
-#: app/about.c:278
+#: app/about.c:273
msgid "LibUnique\n"
msgstr "LibUnique\n"
-#: app/about.c:282
+#: app/about.c:277
msgid "Remote Control"
msgstr "Controllo Remoto"
-#: app/about.c:286 app/about.c:290
+#: app/about.c:281 app/about.c:285
msgid "Python Scripting Interface"
msgstr "Interfaccia di Scripting Python"
+#. TRANSLATORS: %s is replaced with date in ISO format YYYY-MM-DD.
+#: app/about.c:311
+#, c-format
+msgid "Development version, built %s"
+msgstr ""
+
+#. TRANSLATORS: %s is replaced with date in ISO format YYYY-MM-DD.
+#: app/about.c:328
+#, fuzzy, c-format
+msgid "Released %s"
+msgstr "Rilasciato %s\n"
+
#: app/app.c:301
#, c-format
msgid ""
@@ -1564,116 +1637,125 @@ msgstr ""
"%s\n"
"Uscire ugualmente?"
-#: app/app.c:440
+#: app/app.c:442
msgid "Mask _Color..."
msgstr "Colore_Maschera..."
-#: app/app.c:456 app/app.c:1725
+#: app/app.c:458 app/app.c:1754
msgid "Zoom _1:1"
msgstr "Ingrandimento _1:1"
-#: app/app.c:460 app/app.c:1729 app/app.c:1957
+#: app/app.c:462 app/app.c:1758 app/app.c:1988
msgid "Metadata _Browser..."
msgstr "Navigatore _Metadata..."
-#: app/app.c:465 app/app.c:1734 app/app.c:1962
+#: app/app.c:467 app/app.c:1763 app/app.c:1993
msgid "View _Log..."
msgstr "Visualizza registro..."
-#: app/app.c:649
+#: app/app.c:651
msgid "Pi_xelwise Square"
msgstr "Dimensioni pixel quadrati"
-#: app/app.c:659
+#: app/app.c:661
msgid "_Physically Square"
msgstr "Dimensioni reali quadrate"
-#: app/app.c:836
+#: app/app.c:842
+msgid "Set as Default"
+msgstr "Salva come predefinito"
+
+#: app/app.c:844
+msgid "Set the current view setup as the default"
+msgstr "Salva la vista corrente come predefinita"
+
+#: app/app.c:854
msgid "verb|Save"
msgstr "Salva"
-#: app/app.c:839 app/app.c:843
+#: app/app.c:857 app/app.c:861
msgid "Save 3D view to an image"
msgstr "Salva vista 3D come immagine"
-#: app/app.c:849
-msgid "Set as Default"
-msgstr "Salva come predefinito"
+#: app/app.c:869
+#, fuzzy
+msgid "_Autocrop"
+msgstr "_Auto"
-#: app/app.c:851
-msgid "Set the current view setup as the default"
-msgstr "Salva la vista corrente come predefinita"
+#: app/app.c:873
+msgid "Remove white borders from exported image"
+msgstr ""
-#: app/app.c:940
+#: app/app.c:960
msgid "_Show mask"
msgstr "Mostra maschera"
-#: app/app.c:1106
+#: app/app.c:1172
#, c-format
msgid "Saving of 3D view to `%s' failed"
msgstr "Salvataggio di vista 3D come `%s' fallito"
-#: app/app.c:1150
+#: app/app.c:1222
msgid "Export 3D View"
msgstr "Esporta vista 3D"
-#: app/app.c:1457
+#: app/app.c:1478
msgid "_Change Preview"
msgstr "_Cambia anteprima"
-#: app/app.c:1583
+#: app/app.c:1606
msgid "Change Volume Data Preview"
msgstr "Cambia Anteprima Dati Volume"
-#: app/app.c:1593
+#: app/app.c:1616
msgid "Preview quantity:"
msgstr "Anteprima quantità:"
-#: app/app.c:1603 modules/process/extend.c:267 modules/tools/linestats.c:165
+#: app/app.c:1626 modules/process/extend.c:267 modules/tools/linestats.c:165
#: modules/volume/volume_linestat.c:142
msgid "Mean"
msgstr "Media"
-#: app/app.c:1604 modules/process/polydistort.c:255 modules/tools/filter.c:240
+#: app/app.c:1627 modules/process/polydistort.c:258 modules/tools/filter.c:241
#: modules/tools/icolorange.c:424 modules/tools/linestats.c:167
#: modules/volume/volume_linestat.c:144
msgid "Minimum"
msgstr "Minimo"
-#: app/app.c:1605 modules/process/col_synth.c:170 modules/tools/filter.c:241
+#: app/app.c:1628 modules/process/col_synth.c:170 modules/tools/filter.c:242
#: modules/tools/icolorange.c:435 modules/tools/linestats.c:168
#: modules/volume/volume_linestat.c:145
msgid "Maximum"
msgstr "Massimo"
-#: app/app.c:1606
+#: app/app.c:1629 modules/volume/volume_linestat.c:146
msgid "Min. position"
msgstr "Posizione Min."
-#: app/app.c:1607
+#: app/app.c:1630 modules/volume/volume_linestat.c:147
msgid "Max. position"
msgstr "Posizione Max."
-#: app/app.c:1608 modules/process/bdep_synth.c:134
-#: modules/process/col_synth.c:171 modules/process/scars.c:346
-#: modules/process/scars.c:353 modules/process/threshold.c:341
+#: app/app.c:1631 modules/process/bdep_synth.c:134
+#: modules/process/col_synth.c:171 modules/process/scars.c:369
+#: modules/process/scars.c:377 modules/process/threshold.c:336
msgid "RMS"
msgstr "RMS"
-#: app/app.c:1609 modules/file/asciiexport.c:187 modules/file/gxyzffile.c:393
-#: modules/file/xyzexport.c:233 modules/file/xyzexport.c:302
+#: app/app.c:1632 modules/file/asciiexport.c:187 modules/file/gxyzffile.c:393
+#: modules/file/xyzexport.c:236 modules/file/xyzexport.c:305
msgid "Channel:"
msgstr "Canale:"
-#: app/app.c:1610
+#: app/app.c:1633
msgid "Section:"
msgstr "Sezione:"
-#: app/app.c:1861
+#: app/app.c:1890
msgid "_Update Preview"
msgstr "Aggiorna anteprima"
-#: app/app.c:1867
+#: app/app.c:1896
msgid "_Density Map"
msgstr "Mappa di _Densità"
@@ -1692,12 +1774,12 @@ msgstr "Volume %d sconosciuto"
msgid "Unknown XYZ %d"
msgstr "XYZ %d sconosciuto"
-#: app/data-browser-aux.c:2795
+#: app/data-browser-aux.c:2839
#, c-format
msgid "Z levels: %d, Z unit: %s"
msgstr ""
-#: app/data-browser-aux.c:2821
+#: app/data-browser-aux.c:2865
#, c-format
msgid "Points: %d"
msgstr "Punti: %d"
@@ -1727,10 +1809,11 @@ msgid "Close file"
msgstr "Chiudi file"
#: app/data-browser.c:5582
-msgid "Channels"
-msgstr "Canali"
+#, fuzzy
+msgid "Images"
+msgstr "Immagine"
-#: app/data-browser.c:5596 modules/volume/volume_extract.c:444
+#: app/data-browser.c:5596 modules/volume/volume_extract.c:431
msgid "Graphs"
msgstr "Grafici"
@@ -1786,45 +1869,45 @@ msgstr ""
"\n"
"%s"
-#: app/file.c:285
+#: app/file.c:292
#, c-format
msgid "Opening of `%s' failed"
msgstr "Apertura di `%s' fallita"
-#: app/file.c:291 app/file.c:526
+#: app/file.c:298 app/file.c:533
#, c-format
msgid "Full file path: %s."
msgstr "Percorso completo file: %s"
-#: app/file.c:294
+#: app/file.c:301
#, c-format
msgid "Loaded using: %s."
msgstr "Caricato usando: %s."
-#: app/file.c:380
+#: app/file.c:387
msgid "Merge File"
msgstr "Fondi file"
-#: app/file.c:382 app/gwyappfilechooser.c:221
+#: app/file.c:389 app/gwyappfilechooser.c:226
msgid "Open File"
msgstr "Apri File"
-#: app/file.c:520 app/gwymoduleutils.c:192
+#: app/file.c:527 app/gwymoduleutils.c:192
#, c-format
msgid "Saving of `%s' failed"
msgstr "Salvataggio di `%s' fallito"
-#: app/file.c:529
+#: app/file.c:536
#, c-format
msgid "Saved using: %s."
msgstr "Salvato usando: %s."
-#: app/file.c:689
+#: app/file.c:696
#, c-format
msgid "File `%s' already exists. Replace?"
msgstr "File `%s esistente. Sostituire?"
-#: app/file.c:693
+#: app/file.c:700
#, c-format
msgid ""
"The file already exists in `%s'. Replacing it will overwrite its contents."
@@ -1832,7 +1915,7 @@ msgstr ""
"Il file già esiste in `%s'. La sua sostituzione ne sovrascriverà il "
"contenuto."
-#: app/file.c:696
+#: app/file.c:703
msgid "Replace File?"
msgstr "Sostituire file?"
@@ -1856,11 +1939,11 @@ msgstr "Chiudi elenco file"
msgid "Open selected file"
msgstr "Apri file selezionato"
-#: app/filelist.c:566 app/gwyappfilechooser.c:583
+#: app/filelist.c:566 app/gwyappfilechooser.c:592
msgid "_Filter:"
msgstr "_Filtro:"
-#: app/filelist.c:604 app/gwyappfilechooser.c:619
+#: app/filelist.c:604 app/gwyappfilechooser.c:628
msgid "Case _sensitive"
msgstr "Case _sensitive (discrimina tra minuscole e maiuscole)"
@@ -1910,97 +1993,97 @@ msgstr "_Curva"
msgid "_Snap to control points"
msgstr ""
-#: app/gwyappfilechooser.c:226
+#: app/gwyappfilechooser.c:231
msgid "Save File"
msgstr "Salva File"
-#: app/gwyappfilechooser.c:380
+#: app/gwyappfilechooser.c:389
#, c-format
msgid "File _type: %s"
msgstr "Tipo _File: %s"
-#: app/gwyappfilechooser.c:387
+#: app/gwyappfilechooser.c:396
msgid "Only loadable shown"
msgstr "Mostrati solo i caricabili"
-#: app/gwyappfilechooser.c:391
+#: app/gwyappfilechooser.c:400
#, c-format
msgid "Filter: %s"
msgstr "Filtro: %s"
-#: app/gwyappfilechooser.c:455
+#: app/gwyappfilechooser.c:464
msgid "Automatic by extension"
msgstr "Automatico per estensione"
-#: app/gwyappfilechooser.c:464
+#: app/gwyappfilechooser.c:473
msgid "Automatically detected"
msgstr "Riconoscimento automatico"
-#: app/gwyappfilechooser.c:561
+#: app/gwyappfilechooser.c:570
msgid "Show only loadable files"
msgstr "Mostra unicamente i file caricabili"
-#: app/gwyappfilechooser.c:844
+#: app/gwyappfilechooser.c:855
msgid "Plane-level previewed data"
msgstr "Anteprima dati livello piano"
-#: app/gwyappfilechooser.c:860
+#: app/gwyappfilechooser.c:871
msgid "Row-level previewed data"
msgstr "Anteprima dati livello riga"
-#: app/gwyappfilechooser.c:969
+#: app/gwyappfilechooser.c:987
+msgid "File too large for preview"
+msgstr ""
+
+#: app/gwyappfilechooser.c:988
msgid "…"
msgstr "…"
-#: app/gwyappfilechooser.c:1331
+#: app/gwyappfilechooser.c:1352
msgid "Cannot preview"
msgstr "Impossibile visualizzare anteprima"
-#: app/gwyddion.c:143
+#: app/gwyddion.c:147
msgid "Loading document history"
msgstr "Carica cronologia"
-#: app/gwyddion.c:148
+#: app/gwyddion.c:152
msgid "Registering "
msgstr "Registrazione "
-#: app/gwyddion.c:149
+#: app/gwyddion.c:153
msgid "stock items"
msgstr ""
-#: app/gwyddion.c:153
+#: app/gwyddion.c:157
msgid "color gradients"
msgstr "Gradienti colore"
-#: app/gwyddion.c:155
+#: app/gwyddion.c:159
msgid "GL materials"
msgstr "Materiali GL"
-#: app/gwyddion.c:157
+#: app/gwyddion.c:161
msgid "grain quantities"
msgstr "Quantità Grani"
-#: app/gwyddion.c:159
+#: app/gwyddion.c:163
msgid "calibrations"
msgstr "calibrazioni"
-#: app/gwyddion.c:164
+#: app/gwyddion.c:168
msgid "Loading settings"
msgstr "Caricamento preferenze"
-#: app/gwyddion.c:171
+#: app/gwyddion.c:175
msgid "Registering modules"
msgstr "Registrazione moduli"
-#: app/gwyddion.c:193
-msgid "Initializing GUI"
-msgstr "Inizializzazione GUI"
-
-#: app/gwyddion.c:439
+#: app/gwyddion.c:464
msgid "Could not read settings."
msgstr "Impossibile leggere le preferenze."
-#: app/gwyddion.c:442
+#: app/gwyddion.c:467
#, c-format
msgid ""
"Settings file `%s' cannot be read: %s\n"
@@ -2013,42 +2096,62 @@ msgstr ""
"Per evitare la perdita di preferenze salvate non verrà fatto alcun tentativo "
"di aggiornamento fino a che il file non sarà riparato o rimosso."
-#: app/gwymoduleutils-file.c:542
+#: app/gwyddion.c:505
+#, c-format
+msgid "Many modules (%u) failed to register."
+msgstr ""
+
+#: app/gwyddion.c:510
+#, c-format
+msgid ""
+"Most likely Gwyddion was not upgraded correctly. Instead, one installation "
+"was just overwritten with another, and now it is a mess.\n"
+"\n"
+"Please remove completely the module directory\n"
+"\n"
+"%s\n"
+"\n"
+"and reinstall Gwyddion.\n"
+"\n"
+"See Info → Module Browser for specific errors."
+msgstr ""
+
+#: app/gwymoduleutils-file.c:536
#, c-format
msgid "Section %s ended at line %u but it has never started."
msgstr "La sezione %s termina alla linea %u ma non ha inizio."
-#: app/gwymoduleutils-file.c:550
+#: app/gwymoduleutils-file.c:544
#, c-format
msgid "Section %s ended at line %u instead of %s."
msgstr "La sezione %s termina alla linea %u invece di %s."
-#: app/gwymoduleutils-file.c:587
+#: app/gwymoduleutils-file.c:581
#, c-format
msgid "Section %s started at line %u before %s ended."
msgstr "La sezione %s inizia alla linea %u prima che %s finisca."
-#: app/gwymoduleutils-file.c:593
+#: app/gwymoduleutils-file.c:587
#, c-format
msgid "Empty section name at header line %u."
msgstr "Nome sezione vuoto alla linea %u dell'intestazione"
-#: app/gwymoduleutils-file.c:628
+#: app/gwymoduleutils-file.c:622
#, c-format
msgid "Header line %u lacks prefix %s."
msgstr "La linea %u dell'intestazione manca del prefisso %s."
-#: app/gwymoduleutils-file.c:653
+#: app/gwymoduleutils-file.c:647
#, c-format
msgid "Header line %u lacks key-value separator."
msgstr "La linea di intestazione %u manca di separatore di valore chiave"
-#: app/gwymoduleutils-file.c:661
+#: app/gwymoduleutils-file.c:655
#, c-format
msgid "Key at header line %u is empty."
msgstr "La chiave alla linea %u dell'intestazione è vuota."
-#: app/gwymoduleutils-file.c:688
+#: app/gwymoduleutils-file.c:682
#, c-format
msgid "Header suddenly ended at line %u; end of header marker is missing"
msgstr ""
@@ -2057,6 +2160,7 @@ msgstr ""
#: app/gwymoduleutils.c:197 app/settings.c:131 app/settings.c:142
#: app/toolbox-spec.c:536 modules/file/err.h:62
+#: modules/pygwy/pygwy-console.c:528
#, c-format
msgid "Cannot write to file: %s."
msgstr "Impossibile scrivere su file: %s."
@@ -2085,8 +2189,9 @@ msgstr "Origine"
#: app/gwyplaintool.c:1011 modules/file/rawfile.c:997
#: modules/process/convolution_filter.c:349
-#: modules/process/convolution_filter.c:553 modules/process/neural.c:419
-#: modules/process/obj_synth.c:538 modules/process/pat_synth.c:1449
+#: modules/process/convolution_filter.c:553 modules/process/fibre_synth.c:520
+#: modules/process/neural.c:419 modules/process/obj_synth.c:536
+#: modules/process/pat_synth.c:1450
msgid "Size"
msgstr "Dimensioni"
@@ -2143,7 +2248,7 @@ msgstr "Pulisci"
msgid "_Close"
msgstr "_Esci"
-#: app/log.c:615 modules/file/imgexport.c:4168 modules/file/rawfile.c:996
+#: app/log.c:615 modules/file/imgexport.c:4118 modules/file/rawfile.c:996
msgid "Type"
msgstr "Tipo"
@@ -2151,8 +2256,8 @@ msgstr "Tipo"
msgid "Function"
msgstr "Funzione"
-#: app/log.c:617 modules/file/imgexport.c:3117 modules/process/fit-shape.c:465
-#: modules/process/neural.c:610 modules/tools/stats.c:425
+#: app/log.c:617 modules/file/imgexport.c:3128 modules/process/fit-shape.c:466
+#: modules/process/neural.c:614 modules/tools/stats.c:423
msgid "Parameters"
msgstr "Parametri"
@@ -2164,39 +2269,39 @@ msgstr "Tempo"
msgid "Export Log"
msgstr "Esporta log"
-#: app/menu.c:556 app/toolbox.c:581
+#: app/menu.c:555 app/toolbox.c:595
msgid "_Data Process"
msgstr "_Elaborazione Dati"
-#: app/menu.c:598 app/toolbox.c:584
+#: app/menu.c:597 app/toolbox.c:598
msgid "_Graph"
msgstr "_Grafico"
-#: app/menu.c:641 app/toolbox.c:587
+#: app/menu.c:640 app/toolbox.c:601
msgid "_Volume Data"
msgstr "Dati _Volume"
-#: app/menu.c:684 app/toolbox.c:590
+#: app/menu.c:683 app/toolbox.c:604
msgid "_XYZ Data"
msgstr "Dati _XYZ"
-#: app/menu.c:715
+#: app/menu.c:714
msgid "Re-show Last"
msgstr "Mostra ultimo"
-#: app/menu.c:730
+#: app/menu.c:729
msgid "Repeat Last"
msgstr "Ripeti ultimo"
-#: app/menu.c:858
+#: app/menu.c:857
msgid "Repeat"
msgstr "Ripeti"
-#: app/menu.c:864
+#: app/menu.c:863
msgid "Re-show"
msgstr "Mostra di nuovo"
-#: app/menu.c:1186
+#: app/menu.c:1185
msgid "_Document history"
msgstr "Cronologia"
@@ -2204,8 +2309,8 @@ msgstr "Cronologia"
msgid "_New"
msgstr "Nuovo"
-#: app/meta.c:235 modules/file/imgexport.c:4672 modules/file/rawfile.c:1058
-#: modules/process/neural.c:711 modules/tools/selectionmanager.c:405
+#: app/meta.c:235 modules/file/imgexport.c:4620 modules/file/rawfile.c:1058
+#: modules/process/neural.c:718 modules/tools/selectionmanager.c:405
msgid "_Delete"
msgstr "_Elimina"
@@ -2279,11 +2384,11 @@ msgstr "Impossibile creare cartella utente %s: %s"
msgid "Cannot create user module directory %s: %s"
msgstr "Impossibile creare cartella modulo utente %s: %s"
-#: app/splash.c:832
+#: app/splash.c:1260
msgid "Starting "
msgstr "Inizio"
-#: app/splash.c:878
+#: app/splash.c:1313
msgid " is free software released under GNU GPL."
msgstr " è un software libero rilasciato sotto GNU GPL."
@@ -2825,124 +2930,125 @@ msgstr "_Suggerimento Successivo"
msgid "_Show tips at startup"
msgstr "Mostra suggerimenti all'avvio"
-#: app/toolbox-editor.c:212
+#: app/toolbox-editor.c:213
msgid "Toolbox Editor"
msgstr "Editor degli strumenti"
-#: app/toolbox-editor.c:257
+#: app/toolbox-editor.c:258
msgid "_New Item"
msgstr "_Nuovo oggetto"
-#: app/toolbox-editor.c:262
+#: app/toolbox-editor.c:263
msgid "_New Group"
msgstr "_Nuovo gruppo"
-#: app/toolbox-editor.c:268 app/toolbox.c:577
+#: app/toolbox-editor.c:269 app/toolbox.c:591
msgid "_Edit"
msgstr "_Modifica"
-#: app/toolbox-editor.c:273 modules/process/fft_filter_2d.c:499
-#: modules/tools/maskedit.c:548 modules/volume/volume_zcal.c:173
+#: app/toolbox-editor.c:274 modules/process/fft_filter_2d.c:499
+#: modules/tools/maskedit.c:554 modules/volume/volume_zcal.c:173
msgid "_Remove"
msgstr "_Rimuovi"
-#: app/toolbox-editor.c:278
+#: app/toolbox-editor.c:279
msgid "Move _Up"
msgstr "Muovi in alto"
-#: app/toolbox-editor.c:283
+#: app/toolbox-editor.c:284
msgid "Move _Down"
msgstr "Muovi in basso"
-#: app/toolbox-editor.c:292 modules/file/hdrimage.cc:2304
-#: modules/file/imgexport.c:3101 modules/file/pixmap.c:872
+#: app/toolbox-editor.c:293 modules/file/hdrimage.cc:2304
+#: modules/file/imgexport.c:3114 modules/file/pixmap.c:872
#: modules/file/rawfile.c:658 modules/process/crosscor.c:252
-#: modules/process/dimensions.h:473 modules/process/tip_blind.c:333
+#: modules/process/dimensions.h:455 modules/process/fibre_synth.c:526
+#: modules/process/tip_blind.c:334
msgid "_Width:"
msgstr "Larghezza:"
-#: app/toolbox-editor.c:774
+#: app/toolbox-editor.c:787
msgid "Toolbox Group"
msgstr "Gruppo strumenti"
-#: app/toolbox-editor.c:791 modules/file/rawgraph.c:267
+#: app/toolbox-editor.c:804 modules/file/rawgraph.c:267
msgid "_Title:"
msgstr "_Titolo:"
-#: app/toolbox-editor.c:805
+#: app/toolbox-editor.c:818
msgid "_Id:"
msgstr "_Id:"
-#: app/toolbox-editor.c:818
+#: app/toolbox-editor.c:831
msgid "_Suggest"
msgstr "_Suggerimento"
-#: app/toolbox-editor.c:824
+#: app/toolbox-editor.c:837
msgid "Trans_latable title"
msgstr ""
-#: app/toolbox-editor.c:874
+#: app/toolbox-editor.c:887
msgid "Group id is not a valid identifier"
msgstr "Id di gruppo non è un identificativo valido"
-#: app/toolbox-editor.c:882
+#: app/toolbox-editor.c:895
msgid "Group id is not unique"
msgstr "Id di gruppo non è univoca"
-#: app/toolbox-editor.c:971
+#: app/toolbox-editor.c:984
msgid "Toolbox Item"
msgstr "elemento strumenti"
-#: app/toolbox-editor.c:992 modules/process/coerce.c:331
+#: app/toolbox-editor.c:1005 modules/process/coerce.c:331
#: modules/tools/filter.c:284
msgid "_Type:"
msgstr "_Tipo:"
-#: app/toolbox-editor.c:999
+#: app/toolbox-editor.c:1012
msgid "Placeholder"
msgstr "Segnaposto"
-#: app/toolbox-editor.c:1000
+#: app/toolbox-editor.c:1013
msgid "Builtin"
msgstr ""
-#: app/toolbox-editor.c:1001 app/toolbox.c:107
+#: app/toolbox-editor.c:1014 app/toolbox.c:112
msgid "Data Process"
msgstr "Elaborazione Dati"
-#: app/toolbox-editor.c:1003
+#: app/toolbox-editor.c:1016
msgid "Volume Data"
msgstr "Dati Volume"
-#: app/toolbox-editor.c:1004
+#: app/toolbox-editor.c:1017
msgid "XYZ Data"
msgstr "Dati XYZ"
-#: app/toolbox-editor.c:1005
+#: app/toolbox-editor.c:1018
msgid "Tool"
msgstr "Strumento"
-#: app/toolbox-editor.c:1012
+#: app/toolbox-editor.c:1025 modules/tools/profile.c:483
msgid "_Mode:"
msgstr "_Modalità:"
-#: app/toolbox-editor.c:1019 app/toolbox-editor.c:1038
+#: app/toolbox-editor.c:1032 app/toolbox-editor.c:1051
msgid "Default"
msgstr "Predefinito"
-#: app/toolbox-editor.c:1020
+#: app/toolbox-editor.c:1033
msgid "Interactive"
msgstr "Interattivo"
-#: app/toolbox-editor.c:1021
+#: app/toolbox-editor.c:1034
msgid "Non-interactive"
msgstr "Non-interattivo"
-#: app/toolbox-editor.c:1029
+#: app/toolbox-editor.c:1042
msgid "Use _icon from:"
msgstr "Utilizza _icona da:"
-#: app/toolbox-editor.c:1063
+#: app/toolbox-editor.c:1076
msgid "Functions"
msgstr "Funzioni"
@@ -2958,143 +3064,162 @@ msgstr "Ststrumenti rimanenti"
msgid "All tools not placed explicitly go here."
msgstr "Tutti gli strumenti non assegnati esplicitamente vanno lì"
-#: app/toolbox.c:106
+#: app/toolbox.c:111
msgid "View"
msgstr "Vista"
-#: app/toolbox.c:109
+#: app/toolbox.c:114
msgid "Tools"
msgstr "Strumenti"
-#: app/toolbox.c:575
+#: app/toolbox.c:589
msgid "_File"
msgstr "_File"
-#: app/toolbox.c:593
+#: app/toolbox.c:607
msgid "_Info"
msgstr "_Informazioni"
-#: app/toolbox.c:663
+#: app/toolbox.c:696
msgid "Display a 3D view of data"
msgstr "Vista 3D "
-#: app/toolbox.c:667
+#: app/toolbox.c:700
+#, fuzzy
+msgid "Undo"
+msgstr "_Annulla"
+
+#: app/toolbox.c:700
+#, fuzzy
+msgid "Undo last action"
+msgstr "Sottrazione Piano"
+
+#: app/toolbox.c:704
+#, fuzzy
+msgid "Redo"
+msgstr "/_Ripeti"
+
+#: app/toolbox.c:704
+msgid "Redo again last undone action"
+msgstr ""
+
+#: app/toolbox.c:708
msgid "Zoom in"
msgstr "Ingrandisci"
-#: app/toolbox.c:671
+#: app/toolbox.c:712
msgid "Zoom out"
msgstr "Rimpicciolisci"
-#: app/toolbox.c:675
+#: app/toolbox.c:716
msgid "Zoom 1:1"
msgstr "Ingrandimento 1:1"
-#: app/toolbox.c:722
+#: app/toolbox.c:781
msgid "/Show _Data Browser"
msgstr "/Mostra _Navigatore dati"
-#: app/toolbox.c:730
+#: app/toolbox.c:789
msgid "/Module _Browser"
msgstr "/Navigatore Moduli"
-#: app/toolbox.c:738
+#: app/toolbox.c:797
msgid "/Program _Messages"
msgstr "/_Messaggi del Programma"
-#: app/toolbox.c:753
+#: app/toolbox.c:812
msgid "/_User Guide"
msgstr "/Guida Utente"
-#: app/toolbox.c:761
+#: app/toolbox.c:820
msgid "/_Tip of the Day"
msgstr "/_Consiglio del Giorno"
-#: app/toolbox.c:769
+#: app/toolbox.c:828
msgid "/_About Gwyddion"
msgstr "/Informazioni su Gwyddion"
-#: app/toolbox.c:806
+#: app/toolbox.c:865
msgid "/_Open..."
msgstr "/_Apri..."
-#: app/toolbox.c:814
+#: app/toolbox.c:873
msgid "/_Merge..."
msgstr "/_Unisci..."
-#: app/toolbox.c:822
+#: app/toolbox.c:881
msgid "/Open _Recent"
msgstr "/Apri _Recenti"
-#: app/toolbox.c:830
+#: app/toolbox.c:889
msgid "/_Save"
msgstr "/_Salva"
-#: app/toolbox.c:838
+#: app/toolbox.c:897
msgid "/Save _As..."
msgstr "/Salva con nome..."
-#: app/toolbox.c:846
+#: app/toolbox.c:905
msgid "/_Close"
msgstr "/_Chiudi"
-#: app/toolbox.c:854
+#: app/toolbox.c:913
msgid "/Remo_ve All Logs"
msgstr "/Rimuo_vi tutti i registri"
-#: app/toolbox.c:870
+#: app/toolbox.c:929
msgid "/_Quit"
msgstr "/Esci"
-#: app/toolbox.c:910
+#: app/toolbox.c:969
msgid "/_Undo"
msgstr "/Annulla"
-#: app/toolbox.c:918
+#: app/toolbox.c:977
msgid "/_Redo"
msgstr "/_Ripeti"
-#: app/toolbox.c:934
+#: app/toolbox.c:993
msgid "/Default Mask _Color..."
msgstr "/Maschera _Colore Predefinita..."
-#: app/toolbox.c:942
+#: app/toolbox.c:1001
msgid "/Color _Gradients..."
msgstr "/Gradienti Colore..."
-#: app/toolbox.c:950
+#: app/toolbox.c:1009
msgid "/G_L Materials..."
msgstr "/Materiali G_L..."
-#: app/toolbox.c:958
+#: app/toolbox.c:1017
msgid "/_Toolbox..."
msgstr "/Strumenti"
-#: app/toolbox.c:966
+#: app/toolbox.c:1025
msgid "/_Keyboard Shortcuts"
msgstr "/ Scorciatoie di tastiera"
-#: app/toolbox.c:974
+#: app/toolbox.c:1033
msgid "/_Logging Enabled"
msgstr "/Registro abilitato"
-#: app/toolbox.c:1083
+#: app/toolbox.c:1142
msgid "Program Messages"
msgstr "Messaggi del Programma"
-#: app/toolbox.c:1320
+#: app/toolbox.c:1379
msgid "Change Default Mask Color"
msgstr "Cambia Colore Predefinito Maschera"
-#: app/toolbox.c:1348
+#: app/toolbox.c:1407
msgid "OpenGL 3D graphics not available"
msgstr "Grafica 3D OpenGL non disponibile"
-#: app/toolbox.c:1353
+#: app/toolbox.c:1412
msgid "OpenGL was disabled with a command-line option."
msgstr "OpenGL è stato disabilitato con opzione da linea di comando"
-#: app/toolbox.c:1361
+#: app/toolbox.c:1420
msgid ""
"Initialization of OpenGL failed. Check output of <tt>glxinfo</tt> and "
"warning messages printed to console during Gwyddion startup."
@@ -3102,7 +3227,7 @@ msgstr ""
"Inizializzazione OpenGL fallita. Controllare l'otput di <tt>glxinfo</tt> ed "
"eventuali messaggi di errore stampati sulla console all'avvio di Gwyddion."
-#: app/toolbox.c:1368
+#: app/toolbox.c:1427
msgid "This version of Gwyddion was built without OpenGL support."
msgstr "Questa versione di Gwyddion non ha il supporto OpenGL."
@@ -3178,7 +3303,7 @@ msgstr "L'oggetto ha più' riferimenti"
msgid "Secondary data item has no primary data"
msgstr "L'oggetto dati secondari non ha dati primari"
-#: app/wait.c:106
+#: app/wait.c:114
msgid "Please wait"
msgstr "Attendere"
@@ -3195,11 +3320,11 @@ msgstr "File testo Accurex II (.txt)"
msgid "File header cannot be converted from ISO-8859-1 character set: %s"
msgstr "L'intestazione del file non può essere convertita da ISO-8859-1: %s"
-#: modules/file/aistfile.c:127
+#: modules/file/aistfile.c:123
msgid "Imports AIST-NT data files."
msgstr "Importa file dati AIST-NT"
-#: modules/file/aistfile.c:140
+#: modules/file/aistfile.c:136
msgid "AIST-NT files (.aist)"
msgstr "file AIST-NT (.aist)"
@@ -3246,7 +3371,8 @@ msgstr ""
#: modules/file/alicona.c:665 modules/file/gdeffile.c:175
#: modules/file/gdeffile.c:199 modules/file/gsffile.c:159
-#: modules/file/gxyzffile.c:199 modules/file/iso28600.c:1038
+#: modules/file/gxyzffile.c:199 modules/file/iso28600.c:1174
+#: modules/file/microprof.c:361 modules/file/microprof.c:375
#: modules/file/pt3file.c:489 modules/file/pt3file.c:591
msgid "File header is truncated."
msgstr "Intestazione del file tronca"
@@ -3259,11 +3385,11 @@ msgstr "Il commento è mancante della termazione CRLF "
msgid "Comment is not nul-terminated."
msgstr "Il commento non termina con zero"
-#: modules/file/ambfile.c:84
+#: modules/file/ambfile.c:83
msgid "Imports Ambios AMB data files."
msgstr "Importa file dati Ambios AMB."
-#: modules/file/ambfile.c:97
+#: modules/file/ambfile.c:96
msgid "Ambios amb files (.amb)"
msgstr "File Ambios amb (.amb)"
@@ -3295,11 +3421,11 @@ msgstr "FileDescEnd manca del FileDescBegin corrispondente."
msgid "FileDescBegin has no corresponding FileDescEnd."
msgstr "FileDescBegin manca del FileDescEnd corrispondente."
-#: modules/file/apedaxfile.c:259
+#: modules/file/apedaxfile.c:261
msgid "Imports A.P.E. Research DAX data files."
msgstr "Importa file dati A.P.E. Research DAX "
-#: modules/file/apedaxfile.c:274
+#: modules/file/apedaxfile.c:276
msgid "A.P.E. Research DAX Files (.dax) and APDT File (.apdt)"
msgstr "File A.P.E. Research DAX (.dax) e APDT File (.apdt)"
@@ -3327,7 +3453,7 @@ msgstr "Larghezza:"
msgid "Height:"
msgstr "Altezza:"
-#: modules/file/asciiexport.c:220 modules/file/xyzexport.c:248
+#: modules/file/asciiexport.c:220 modules/file/xyzexport.c:251
msgid "Value units:"
msgstr "unità valore:"
@@ -3336,30 +3462,30 @@ msgid "Export Text"
msgstr "Esporta Testo"
#: modules/file/asciiexport.c:275 modules/file/gxyzffile.c:402
-#: modules/file/imgexport.c:3565 modules/file/imgexport.c:4203
-#: modules/file/rawfile.c:758 modules/file/xyzexport.c:311
-#: modules/process/calibrate.c:607 modules/process/coerce.c:364
-#: modules/process/col_synth.c:516 modules/process/correct_affine.c:470
-#: modules/process/extend.c:259 modules/process/fft_filter_1d.c:261
-#: modules/process/grain_dist.c:306 modules/process/grain_edge.c:255
-#: modules/process/grain_mark.c:338 modules/process/grain_wshed.c:252
-#: modules/process/linematch.c:852 modules/process/mark_disconn.c:279
-#: modules/process/slope_dist.c:367 modules/process/tip_blind.c:357
+#: modules/file/imgexport.c:3532 modules/file/imgexport.c:4151
+#: modules/file/rawfile.c:758 modules/file/xyzexport.c:314
+#: modules/process/calibrate.c:561 modules/process/coerce.c:363
+#: modules/process/col_synth.c:516 modules/process/correct_affine.c:520
+#: modules/process/extend.c:259 modules/process/fft_filter_1d.c:263
+#: modules/process/grain_dist.c:307 modules/process/grain_edge.c:254
+#: modules/process/grain_mark.c:335 modules/process/grain_wshed.c:256
+#: modules/process/linematch.c:819 modules/process/mark_disconn.c:280
+#: modules/process/slope_dist.c:359 modules/process/tip_blind.c:360
#: modules/process/wpour_mark.c:354 modules/tools/spotremove.c:322
-#: modules/tools/stats.c:402 modules/xyz/xyz_raster.c:628
+#: modules/tools/stats.c:401 modules/xyz/xyz_raster.c:597
msgid "Options"
msgstr "Opzioni"
-#: modules/file/asciiexport.c:278 modules/file/xyzexport.c:314
+#: modules/file/asciiexport.c:278 modules/file/xyzexport.c:317
msgid "Use _dot as decimal separator"
msgstr "Utilizza il punto come separatore _decimale"
-#: modules/file/asciiexport.c:285 modules/file/xyzexport.c:321
-#: modules/process/grain_dist.c:317
+#: modules/file/asciiexport.c:285 modules/file/xyzexport.c:324
+#: modules/process/grain_dist.c:318
msgid "Add _informational comment header"
msgstr "Aggiungi _intestazione commento"
-#: modules/file/asciiexport.c:294 modules/file/xyzexport.c:330
+#: modules/file/asciiexport.c:294 modules/file/xyzexport.c:333
msgid "_Precision:"
msgstr "_Precisione:"
@@ -3379,20 +3505,20 @@ msgstr "Importa file Attocube Systems ASC"
msgid "Attocube ASCII files (.asc)"
msgstr "file ASCII Attocube (.asc) "
-#: modules/file/bcrfile.c:146
+#: modules/file/bcrfile.c:141
msgid "Imports Image Metrology BCR data files."
msgstr "Importa file dati BCR Image Metrology."
-#: modules/file/bcrfile.c:159
+#: modules/file/bcrfile.c:154
msgid "BCR files (.bcr, .bcrf)"
msgstr "File BCR (.bcr, .bcrf)"
-#: modules/file/bcrfile.c:238
+#: modules/file/bcrfile.c:233
#, c-format
msgid "File header is not convertible from UTF-16: %s"
msgstr "L'intestazione del file non è convertibile da UTF-16: %s"
-#: modules/file/bcrfile.c:351
+#: modules/file/bcrfile.c:346
#, c-format
msgid "Unknown file type header: `%s'."
msgstr "Intestazione tipo file sconosciuta: `%s'."
@@ -3427,7 +3553,7 @@ msgid "Burleigh exported data (.txt, .bin)"
msgstr "Dati esportati Burleigh (.txt, .bin)"
#: modules/file/burleigh_exp.c:226 modules/file/burleigh_exp.c:267
-#: modules/file/nanoscope.c:1605 modules/file/omicron.c:416
+#: modules/file/nanoscope.c:1612 modules/file/omicron.c:416
#: modules/file/shimadzu.c:468
msgid "Missing colon in header line."
msgstr "\":\" mancanti nel file intestazione."
@@ -3478,22 +3604,42 @@ msgstr "Importa file dati Benyuan CSM."
msgid "Benyuan CSM files (.csm)"
msgstr "File Benyuan CSM (.csm)"
-#: modules/file/dektakxml.c:138
+#: modules/file/dektakvca.c:197
+#, fuzzy
+msgid "Imports Dektak OPDx data files."
+msgstr "Importa file dati Dektak XML "
+
+#: modules/file/dektakvca.c:210
+#, fuzzy
+msgid "Dektak OPDx data files (.OPDx)"
+msgstr "File dati Dektak XML (.xml)"
+
+#: modules/file/dektakvca.c:655
+#, fuzzy, c-format
+msgid "Item `%s' has unexpected type %u instead of %u."
+msgstr "La sezione %s termina alla linea %u invece di %s."
+
+#: modules/file/dektakvca.c:1022
+#, fuzzy, c-format
+msgid "Truncated data inside item %s."
+msgstr "Dati troncati nel blocco %s"
+
+#: modules/file/dektakxml.c:118
msgid "Imports Dektak XML data files."
msgstr "Importa file dati Dektak XML "
-#: modules/file/dektakxml.c:151
+#: modules/file/dektakxml.c:131
msgid "Dektak XML data files (.xml)"
msgstr "File dati Dektak XML (.xml)"
-#: modules/file/dektakxml.c:228 modules/file/lextfile.c:260
-#: modules/file/nanoscan.c:267 modules/file/ometiff.c:265
+#: modules/file/dektakxml.c:208 modules/file/lextfile.c:260
+#: modules/file/nanoscan.c:270 modules/file/ometiff.c:265
#, c-format
msgid "XML parsing failed: %s"
msgstr "Parsing XML fallito: %s"
-#: modules/file/dektakxml.c:400 modules/file/lextfile.c:163
-#: modules/file/nanoscan.c:672 modules/file/ometiff.c:445
+#: modules/file/dektakxml.c:373 modules/file/lextfile.c:163
+#: modules/file/nanoscan.c:698 modules/file/ometiff.c:445
#, c-format
msgid "Top-level element is not ‘%s’."
msgstr "Elemento livello superiore non è ‘%s’."
@@ -3607,7 +3753,7 @@ msgstr ""
"dati"
#: modules/file/err.h:48 modules/file/nrrdfile.c:779
-#: modules/file/nrrdfile.c:824
+#: modules/file/nrrdfile.c:824 modules/pygwy/pygwy-console.c:504
#, c-format
msgid "Cannot read from file: %s."
msgstr "Impossibile leggere dal file: %s."
@@ -3824,32 +3970,32 @@ msgid ""
"Data deserialization succeeded, but resulted in an unexpected object %s."
msgstr "Deserializzazione dati riuscita, oggetto risultante %s inaspettato."
-#: modules/file/gwytiff.h:332
+#: modules/file/gwytiff.h:335
#, c-format
msgid "BigTIFF reserved fields are %u and %u instead of 8 and 0."
msgstr "I campi riservati per BigTIFF sono %u e %u invece di 8 e 0."
-#: modules/file/gwytiff.h:349 modules/file/gwytiff.h:366
+#: modules/file/gwytiff.h:352 modules/file/gwytiff.h:369
#, c-format
msgid "TIFF directory %lu ended unexpectedly."
msgstr "Cartella TIFF %lu terminata inaspettatamente"
-#: modules/file/gwytiff.h:484
+#: modules/file/gwytiff.h:487
#, c-format
msgid "BigTIFF data type %u was found in a classic TIFF."
msgstr "Tipo dati %u BigTIFF è stato trovato in un classico TIFF"
-#: modules/file/gwytiff.h:501
+#: modules/file/gwytiff.h:504
msgid "Invalid tag data positions were found."
msgstr "Trovate posizioni tag data non valide"
-#: modules/file/gwytiff.h:874 modules/file/gwytiff.h:889
-#: modules/file/gwytiff.h:1012 modules/file/gwytiff.h:1019
+#: modules/file/gwytiff.h:877 modules/file/gwytiff.h:892
+#: modules/file/gwytiff.h:1015 modules/file/gwytiff.h:1022
#, c-format
msgid "Required tag %u was not found."
msgstr "Etichetta %u richiesta, non trovata."
-#: modules/file/gwytiff.h:942 modules/file/gwytiff.h:986
+#: modules/file/gwytiff.h:945 modules/file/gwytiff.h:989
#: modules/file/keyence.c:449 modules/file/matfile.c:276
#: modules/file/matfile.c:298 modules/file/omicronflat.c:1962
#: modules/file/princetonspe.c:339 modules/file/psia.c:352
@@ -3857,21 +4003,21 @@ msgstr "Etichetta %u richiesta, non trovata."
msgid "File is truncated."
msgstr "File troncato"
-#: modules/file/gwytiff.h:1044
+#: modules/file/gwytiff.h:1047
msgid "Non-uniform bits per sample are unsupported."
msgstr "Bit per campione non uniformi non supportati"
-#: modules/file/gwytiff.h:1071
+#: modules/file/gwytiff.h:1074 modules/file/zeisslsm.c:973
#, c-format
msgid "Compression type %u is not supported."
msgstr "Compressione in formato %u non supportata"
-#: modules/file/gwytiff.h:1077
+#: modules/file/gwytiff.h:1080
#, c-format
msgid "Planar configuration %u is not supported."
msgstr "Configurazione planare %u non supportata."
-#: modules/file/gwytiff.h:1101
+#: modules/file/gwytiff.h:1104
msgid "Unsupported sample format"
msgstr "Formato campione non supportato"
@@ -3908,7 +4054,7 @@ msgstr "errore CRC"
msgid "Minizip error while reading the zip file: %s (%d)."
msgstr "Errore Minizip durante la lettura del file zip: %s (%d)."
-#: modules/file/gwyzip.h:248
+#: modules/file/gwyzip.h:248 modules/file/jpkscan.c:2776
#, c-format
msgid "File %s is missing in the zip file."
msgstr "file %s mancante nel file zip."
@@ -3943,8 +4089,8 @@ msgstr "La grandezza dei dati %lu non è multipla della dimensione punto %u"
msgid "Export GXYZF"
msgstr "Esporta GXYZF"
-#: modules/file/gxyzffile.c:395 modules/file/xyzexport.c:238
-#: modules/file/xyzexport.c:304
+#: modules/file/gxyzffile.c:395 modules/file/xyzexport.c:241
+#: modules/file/xyzexport.c:307
msgid "XYZ data:"
msgstr "File dati XYZ:"
@@ -4033,11 +4179,13 @@ msgstr "Scala _Z :"
msgid "Representable"
msgstr "Rappresentabile"
-#: modules/file/hdrimage.cc:480 modules/tools/stats.c:203
+#: modules/file/hdrimage.cc:480 modules/graph/graph_stats.c:146
+#: modules/tools/stats.c:203
msgid "Minimum:"
msgstr "Minimo:"
-#: modules/file/hdrimage.cc:496 modules/tools/stats.c:204
+#: modules/file/hdrimage.cc:496 modules/graph/graph_stats.c:147
+#: modules/tools/stats.c:204
msgid "Maximum:"
msgstr "Massimo:"
@@ -4056,12 +4204,12 @@ msgid "OpenEXR data type %u is invalid or unsupported."
msgstr "Il tipo dati OpenEXR %u non è valido o non è supportato."
#: modules/file/hdrimage.cc:1433 modules/file/hdrimage.cc:1442
-#: modules/file/imgexport.c:5249 modules/file/imgexport.c:5260
+#: modules/file/imgexport.c:5198 modules/file/imgexport.c:5209
#, c-format
msgid "libpng initialization error (in %s)"
msgstr "errore inizializzazione libpng (in %s)"
-#: modules/file/hdrimage.cc:1451 modules/file/imgexport.c:5324
+#: modules/file/hdrimage.cc:1451 modules/file/imgexport.c:5273
#, fuzzy
msgid "libpng error occurred"
msgstr "Errore libpng"
@@ -4080,11 +4228,6 @@ msgstr "Informazioni immagine"
msgid "Horizontal size:"
msgstr "Dimensione orizzontale:"
-#: modules/file/hdrimage.cc:2246 modules/file/hdrimage.cc:2252
-#: modules/file/pixmap.c:820 modules/file/pixmap.c:826
-msgid "px"
-msgstr "px"
-
#: modules/file/hdrimage.cc:2252 modules/file/pixmap.c:826
msgid "Vertical size:"
msgstr "Dimensione verticale:"
@@ -4097,10 +4240,10 @@ msgstr "Canali:"
msgid "Pages:"
msgstr "Pagine:"
-#: modules/file/hdrimage.cc:2290 modules/file/imgexport.c:3043
+#: modules/file/hdrimage.cc:2290 modules/file/imgexport.c:3059
#: modules/file/pixmap.c:862 modules/file/rawfile.c:649
-#: modules/process/dimensions.h:467 modules/xyz/xyz_drift.c:774
-#: modules/xyz/xyz_raster.c:566
+#: modules/process/dimensions.h:449 modules/xyz/xyz_drift.c:774
+#: modules/xyz/xyz_raster.c:535
msgid "Physical Dimensions"
msgstr "Dimensioni fisiche"
@@ -4110,16 +4253,16 @@ msgstr "Dimensioni fisiche"
#: modules/process/calcoefs_new.c:408 modules/process/calcoefs_new.c:475
#: modules/process/calcoefs_simple.c:391 modules/process/calcoefs_simple.c:458
#: modules/process/calcoefs_view.c:511 modules/process/calcoefs_view.c:549
-#: modules/process/calibrate.c:466 modules/process/calibrate.c:549
-#: modules/process/dimensions.h:161 modules/process/volumize_layers.c:259
-#: modules/volume/volume_calibrate.c:414 modules/volume/volume_calibrate.c:441
-#: modules/volume/volume_calibrate.c:468 modules/volume/volume_calibrate.c:546
+#: modules/process/calibrate.c:459 modules/process/calibrate.c:514
+#: modules/process/dimensions.h:143 modules/process/volumize_layers.c:259
+#: modules/volume/volume_calibrate.c:409 modules/volume/volume_calibrate.c:429
+#: modules/volume/volume_calibrate.c:449 modules/volume/volume_calibrate.c:498
msgid "verb|Change"
msgstr "Cambia"
#: modules/file/hdrimage.cc:2345 modules/file/pixmap.c:907
-#: modules/file/rawfile.c:694 modules/process/crosscor.c:263
-#: modules/process/dimensions.h:477
+#: modules/file/rawfile.c:694 modules/process/crosscor.c:260
+#: modules/process/dimensions.h:459
msgid "H_eight:"
msgstr "Altezza:"
@@ -4136,16 +4279,16 @@ msgstr "_Scala Z (per unità di campione):"
#: modules/file/hdrimage.cc:2557 modules/file/pixmap.c:1176
#: modules/file/rawfile.c:1386 modules/process/calcoefs_new.c:819
#: modules/process/calcoefs_simple.c:1197 modules/process/calcoefs_view.c:1380
-#: modules/process/calibrate.c:979 modules/process/dimensions.h:195
-#: modules/process/volumize_layers.c:315 modules/volume/volume_calibrate.c:1017
+#: modules/process/calibrate.c:1013 modules/process/dimensions.h:177
+#: modules/process/volumize_layers.c:314 modules/volume/volume_calibrate.c:957
msgid "Change Units"
msgstr "Cambia unità"
#: modules/file/hdrimage.cc:2571 modules/file/pixmap.c:1190
#: modules/file/rawfile.c:1400 modules/process/calcoefs_new.c:832
#: modules/process/calcoefs_simple.c:1210 modules/process/calcoefs_view.c:1393
-#: modules/process/calibrate.c:993 modules/process/dimensions.h:208
-#: modules/process/volumize_layers.c:329 modules/volume/volume_calibrate.c:1031
+#: modules/process/calibrate.c:1027 modules/process/dimensions.h:190
+#: modules/process/volumize_layers.c:328 modules/volume/volume_calibrate.c:971
msgid "New _units:"
msgstr "Nuove unità:"
@@ -4191,132 +4334,132 @@ msgstr ""
"Il campo dimensione datii %ux%u non corrisponde alle dimensioni "
"dell'immagine (%u×%u)."
-#: modules/file/igorfile.c:200
+#: modules/file/igorfile.c:210
msgid "Imports Igor binary waves (.ibw)."
msgstr "Importa onde binarie Igor (.ibw)."
-#: modules/file/igorfile.c:213
+#: modules/file/igorfile.c:223
msgid "Igor binary waves (.ibw)"
msgstr "Onde binarie Igor (.ibw)"
-#: modules/file/igorfile.c:273
+#: modules/file/igorfile.c:283
#, c-format
msgid "Format version is %d. Only version 5 is supported."
msgstr "Formato file versione %d. Solo la versione 5 è supportata"
-#: modules/file/igorfile.c:294
+#: modules/file/igorfile.c:305
msgid "Only two-dimensional data are supported."
msgstr "Sono supportati solo dati bidimensionali"
-#: modules/file/igorfile.c:306
+#: modules/file/igorfile.c:317
#, c-format
msgid "Number of data points %u does not match resolutions %u×%u×%u."
msgstr "Numero di punti dati %u non corrisponde alla risoluzione %u×%u×%u."
-#: modules/file/igorfile.c:320
+#: modules/file/igorfile.c:331
#, c-format
msgid "Data size %u does not match the number of data points %u×%u."
msgstr ""
"La grandezza dei dati %u non corrisponde al numero di punti dati %u×%u."
-#: modules/file/igorfile.c:358
+#: modules/file/igorfile.c:369
msgid "Cannot read channel labels."
msgstr "Impossibile leggere le etichette dei canali"
-#: modules/file/imgexport.c:392 modules/file/pixmap.c:178
+#: modules/file/imgexport.c:391 modules/file/pixmap.c:178
msgid "Portable Network Graphics (.png)"
msgstr "Portable Network Graphics (.png)"
-#: modules/file/imgexport.c:398 modules/file/pixmap.c:182
+#: modules/file/imgexport.c:397 modules/file/pixmap.c:182
msgid "JPEG (.jpeg,.jpg)"
msgstr "JPEG (.jpeg,.jpg)"
-#: modules/file/imgexport.c:404 modules/file/pixmap.c:186
+#: modules/file/imgexport.c:403 modules/file/pixmap.c:186
msgid "TIFF (.tiff,.tif)"
msgstr "TIFF (.tiff,.tif)"
-#: modules/file/imgexport.c:410 modules/file/pixmap.c:190
+#: modules/file/imgexport.c:409 modules/file/pixmap.c:190
msgid "Portable Pixmap (.ppm,.pnm)"
msgstr "Portable Pixmap (.ppm,.pnm)"
-#: modules/file/imgexport.c:416 modules/file/pixmap.c:194
+#: modules/file/imgexport.c:415 modules/file/pixmap.c:194
msgid "Windows or OS2 Bitmap (.bmp)"
msgstr "Windows or OS2 Bitmap (.bmp)"
-#: modules/file/imgexport.c:422 modules/file/pixmap.c:198
+#: modules/file/imgexport.c:421 modules/file/pixmap.c:198
msgid "TARGA (.tga,.targa)"
msgstr "TARGA (.tga,.targa)"
-#: modules/file/imgexport.c:429
+#: modules/file/imgexport.c:428
msgid "WebP (.webp)"
msgstr "WebP (.webp)"
-#: modules/file/imgexport.c:437
+#: modules/file/imgexport.c:436
msgid "Portable document format (.pdf)"
msgstr "Portable document format (.pdf)"
-#: modules/file/imgexport.c:445
+#: modules/file/imgexport.c:444
msgid "Encapsulated PostScript (.eps)"
msgstr "Encapsulated PostScript (.eps)"
-#: modules/file/imgexport.c:453
+#: modules/file/imgexport.c:452
msgid "Scalable Vector Graphics (.svg)"
msgstr "Scalable Vector Graphics (.svg)"
-#: modules/file/imgexport.c:463 modules/tools/selectionmanager.c:269
+#: modules/file/imgexport.c:462 modules/tools/selectionmanager.c:269
msgid "Horiz./vert. lines"
msgstr "Linee Orizz./Vert"
-#: modules/file/imgexport.c:467 modules/tools/selectionmanager.c:270
+#: modules/file/imgexport.c:466 modules/tools/selectionmanager.c:270
msgid "Ellipses"
msgstr "Ellissi"
-#: modules/file/imgexport.c:471 modules/tools/selectionmanager.c:272
+#: modules/file/imgexport.c:470 modules/tools/selectionmanager.c:272
msgid "Lines"
msgstr "Linee"
-#: modules/file/imgexport.c:479 modules/tools/selectionmanager.c:275
+#: modules/file/imgexport.c:478 modules/tools/selectionmanager.c:275
msgid "Rectangles"
msgstr "Rettangoli"
-#: modules/file/imgexport.c:483 modules/process/lat_synth.c:565
+#: modules/file/imgexport.c:482 modules/process/lat_synth.c:565
#: modules/process/lat_synth.c:637 modules/tools/selectionmanager.c:271
msgid "Lattice"
msgstr "Reticolo"
-#: modules/file/imgexport.c:487
+#: modules/file/imgexport.c:486
msgid "Path"
msgstr "Percorso"
-#: modules/file/imgexport.c:493 modules/file/imgexport.c:499
+#: modules/file/imgexport.c:492 modules/file/imgexport.c:498
msgid "ruler|_None"
msgstr "righello|_Nessuno"
-#: modules/file/imgexport.c:494
+#: modules/file/imgexport.c:493
msgid "_Rulers"
msgstr "_Righelli"
-#: modules/file/imgexport.c:495
+#: modules/file/imgexport.c:494
msgid "_Inset scale bar"
msgstr "barra scala _incorporata"
-#: modules/file/imgexport.c:500
+#: modules/file/imgexport.c:499
msgid "_False color ruler"
msgstr "Righello _Falsi colori"
-#: modules/file/imgexport.c:504
+#: modules/file/imgexport.c:503
msgid "title|None"
msgstr "titolo|Nessuno"
-#: modules/file/imgexport.c:505
+#: modules/file/imgexport.c:504
msgid "At the top"
msgstr ""
-#: modules/file/imgexport.c:506
+#: modules/file/imgexport.c:505
msgid "Along the right edge"
msgstr "Lungo il lato destro"
-#: modules/file/imgexport.c:512
+#: modules/file/imgexport.c:511
msgid ""
"Renders data into vector (SVG, PDF, EPS) and pixmap (PNG, JPEG, TIFF, WebP, "
"PPM, BMP, TARGA) images. Export to some formats relies on GDK and other "
@@ -4327,56 +4470,57 @@ msgstr ""
"si basa su GDK e altre librerie per cui potrebbe dipendere dal tipo di "
"installazione."
-#: modules/file/imgexport.c:2931
+#: modules/file/imgexport.c:2933
msgid "Select Color"
msgstr "Selezione colore"
-#: modules/file/imgexport.c:3002
-msgid "Black"
-msgstr "Nero"
-
-#: modules/file/imgexport.c:3010
+#: modules/file/imgexport.c:3005
msgid "White"
msgstr "Bianco"
-#: modules/file/imgexport.c:3053
+#: modules/file/imgexport.c:3014
+msgid "Black"
+msgstr "Nero"
+
+#: modules/file/imgexport.c:3069
msgid "Pi_xel size:"
msgstr "Dimensione Pi_xel:"
-#: modules/file/imgexport.c:3062
+#: modules/file/imgexport.c:3077
msgid "Pixels per _inch:"
msgstr "Pixels per _inch:"
-#: modules/file/imgexport.c:3089
+#: modules/file/imgexport.c:3102
msgid "_Zoom:"
msgstr "Ingrandisci:"
-#: modules/file/imgexport.c:3108 modules/process/bdep_synth.c:430
+#: modules/file/imgexport.c:3120 modules/process/bdep_synth.c:430
#: modules/process/col_synth.c:486 modules/process/diff_synth.c:508
-#: modules/process/domain_synth.c:510 modules/process/grain_mark.c:285
-#: modules/process/lat_synth.c:753 modules/process/obj_synth.c:575
-#: modules/process/pat_synth.c:852 modules/process/pat_synth.c:1154
-#: modules/process/pat_synth.c:1489 modules/process/tip_blind.c:340
+#: modules/process/domain_synth.c:510 modules/process/fibre_synth.c:540
+#: modules/process/grain_mark.c:284 modules/process/lat_synth.c:753
+#: modules/process/obj_synth.c:573 modules/process/pat_synth.c:853
+#: modules/process/pat_synth.c:1155 modules/process/pat_synth.c:1490
+#: modules/process/phase_synth.c:298 modules/process/tip_blind.c:342
msgid "_Height:"
msgstr "Altezza:"
-#: modules/file/imgexport.c:3121
+#: modules/file/imgexport.c:3136
msgid "_Font:"
msgstr "Carattere:"
-#: modules/file/imgexport.c:3140
+#: modules/file/imgexport.c:3145
msgid "_Font size:"
msgstr "_Dimensione carattere:"
-#: modules/file/imgexport.c:3160
+#: modules/file/imgexport.c:3163
msgid "O_utline thickness:"
msgstr "Spessore contorno:"
-#: modules/file/imgexport.c:3170
+#: modules/file/imgexport.c:3172
msgid "_Border width:"
msgstr "Larghezza margine:"
-#: modules/file/imgexport.c:3180
+#: modules/file/imgexport.c:3181
msgid "_Tick length:"
msgstr "Lunghezza _Tacca:"
@@ -4396,219 +4540,220 @@ msgstr "Colori"
msgid "_Line and text color:"
msgstr "Colore _Linea e testo:"
-#: modules/file/imgexport.c:3221
+#: modules/file/imgexport.c:3220
msgid "_Transparent background"
msgstr "Sfondo _Trasparente"
-#: modules/file/imgexport.c:3232
+#: modules/file/imgexport.c:3231
msgid "_Background color:"
msgstr "Colore sfondo:"
-#: modules/file/imgexport.c:3474
-msgid "Lateral scale"
-msgstr "Scala Laterale:"
-
-#: modules/file/imgexport.c:3487 modules/process/lno_synth.c:1053
-msgid "_Length:"
-msgstr "_Lunghezza:"
-
-#: modules/file/imgexport.c:3503
-msgid "_Auto"
-msgstr "_Auto"
-
-#: modules/file/imgexport.c:3511 modules/process/pat_synth.c:469
+#: modules/file/imgexport.c:3433 modules/process/fibre_synth.c:582
+#: modules/process/pat_synth.c:470
msgid "Placement"
msgstr "Posizionamento"
-#: modules/file/imgexport.c:3515
+#: modules/file/imgexport.c:3437
msgid "left"
msgstr "Sinistra"
-#: modules/file/imgexport.c:3519
+#: modules/file/imgexport.c:3440
msgid "center"
msgstr "Centro"
-#: modules/file/imgexport.c:3523
+#: modules/file/imgexport.c:3443
msgid "right"
msgstr "Destra"
-#: modules/file/imgexport.c:3528
+#: modules/file/imgexport.c:3448
msgid "top"
msgstr "Sopra"
-#: modules/file/imgexport.c:3540
+#: modules/file/imgexport.c:3456
msgid "bottom"
msgstr "sotto"
-#: modules/file/imgexport.c:3552 modules/file/imgexport.c:3874
+#: modules/file/imgexport.c:3479
+msgid "Lateral scale"
+msgstr "Scala Laterale:"
+
+#: modules/file/imgexport.c:3496 modules/process/lno_synth.c:1053
+msgid "_Length:"
+msgstr "_Lunghezza:"
+
+#: modules/file/imgexport.c:3502
+msgid "_Auto"
+msgstr "_Auto"
+
+#: modules/file/imgexport.c:3519 modules/file/imgexport.c:3832
msgid "Hori_zontal gap:"
msgstr "Apertura Ori_zzontale:"
-#: modules/file/imgexport.c:3558 modules/file/imgexport.c:3854
+#: modules/file/imgexport.c:3526 modules/file/imgexport.c:3812
msgid "_Vertical gap:"
msgstr "Apertura _Verticale:"
-#: modules/file/imgexport.c:3571 modules/file/imgexport.c:4184
+#: modules/file/imgexport.c:3538 modules/file/imgexport.c:4134
msgid "Colo_r:"
msgstr "Colo_re:"
-#: modules/file/imgexport.c:3576 modules/file/imgexport.c:4189
+#: modules/file/imgexport.c:3542 modules/file/imgexport.c:4138
msgid "Out_line color:"
msgstr "Colore contorno:"
-#: modules/file/imgexport.c:3580 modules/file/imgexport.c:4195
+#: modules/file/imgexport.c:3547 modules/file/imgexport.c:4143
msgid "O_pacity:"
msgstr "O_pacità"
-#: modules/file/imgexport.c:3589
+#: modules/file/imgexport.c:3554
msgid "Draw _ticks"
msgstr "Disegna tacche"
-#: modules/file/imgexport.c:3599
+#: modules/file/imgexport.c:3564
msgid "Draw _label"
msgstr "Disegna _etichette"
-#: modules/file/imgexport.c:3609
+#: modules/file/imgexport.c:3574
msgid "Draw text _above scale bar"
msgstr ""
-#: modules/file/imgexport.c:3773
+#: modules/file/imgexport.c:3738
msgid "Image"
msgstr "Immagine"
-#: modules/file/imgexport.c:3777 modules/process/calcoefs_view.c:473
-#: modules/process/correct_affine.c:488 modules/process/drift.c:297
-#: modules/process/dwt.c:206 modules/process/dwtanisotropy.c:202
-#: modules/process/fft_filter_1d.c:294 modules/process/fft_profile.c:292
-#: modules/process/fractal.c:253 modules/process/nanoindent_adjust.c:229
-#: modules/process/polydistort.c:247 modules/process/rotate.c:274
-#: modules/process/scale.c:253 modules/process/straighten_path.c:271
+#: modules/file/imgexport.c:3742 modules/process/calcoefs_view.c:473
+#: modules/process/correct_affine.c:538 modules/process/drift.c:298
+#: modules/process/dwt.c:206 modules/process/dwtanisotropy.c:203
+#: modules/process/fft_filter_1d.c:296 modules/process/fft_profile.c:293
+#: modules/process/fractal.c:262 modules/process/nanoindent_adjust.c:229
+#: modules/process/polydistort.c:250 modules/process/rotate.c:274
+#: modules/process/scale.c:257 modules/process/straighten_path.c:270
#: modules/process/unrotate.c:277 modules/tools/linestats.c:400
-#: modules/tools/profile.c:555 modules/tools/roughness.c:864
-#: modules/tools/sfunctions.c:468 modules/xyz/xyz_raster.c:632
+#: modules/tools/profile.c:552 modules/tools/roughness.c:879
+#: modules/tools/sfunctions.c:481 modules/xyz/xyz_raster.c:601
msgid "_Interpolation type:"
msgstr "Tipo di interpolazione:"
-#: modules/file/imgexport.c:3807
+#: modules/file/imgexport.c:3772
msgid "Draw _frame"
msgstr "Disegna cornice"
-#: modules/file/imgexport.c:3816
+#: modules/file/imgexport.c:3781
msgid "Draw _mask"
msgstr "Disegna _Maschera"
-#: modules/file/imgexport.c:3826
+#: modules/file/imgexport.c:3791
msgid "Draw mask _legend"
msgstr "Disegna _legenda Maschera"
-#: modules/file/imgexport.c:3861
+#: modules/file/imgexport.c:3819
msgid "Value Scale"
msgstr "Scala valore"
-#: modules/file/imgexport.c:3882
+#: modules/file/imgexport.c:3840
msgid "Fi_xed precision:"
msgstr "Precisione fissata:"
-#: modules/file/imgexport.c:3898
+#: modules/file/imgexport.c:3855
msgid "Fixed _kilo threshold:"
msgstr "Soglia _kilo fissata:"
-#: modules/file/imgexport.c:3914 modules/file/imgexport.c:4635
+#: modules/file/imgexport.c:3869 modules/file/imgexport.c:4583
msgid "Title"
msgstr "Titolo"
-#: modules/file/imgexport.c:3918
+#: modules/file/imgexport.c:3877
msgid "Posi_tion:"
msgstr "Posizione:"
-#: modules/file/imgexport.c:3934
+#: modules/file/imgexport.c:3884
msgid "_Gap:"
msgstr "Apertura:"
-#: modules/file/imgexport.c:3941
+#: modules/file/imgexport.c:3891
msgid "Put _units to title"
msgstr "Assegna _unità al titolo"
-#: modules/file/imgexport.c:4125
+#: modules/file/imgexport.c:4075
msgid "Draw _selection"
msgstr "Disegna _selezione"
-#: modules/file/imgexport.c:4176 modules/tools/selectionmanager.c:361
+#: modules/file/imgexport.c:4126 modules/tools/selectionmanager.c:361
msgid "Objects"
msgstr "Oggetti "
-#: modules/file/imgexport.c:4615
+#: modules/file/imgexport.c:4563
msgid "Lateral"
msgstr "Laterale"
-#: modules/file/imgexport.c:4654 modules/file/rawfile.c:1040
-#: modules/process/calcoefs_load.c:230 modules/process/neural.c:693
+#: modules/file/imgexport.c:4602 modules/file/rawfile.c:1040
+#: modules/process/calcoefs_load.c:230 modules/process/neural.c:700
msgid "verb|_Load"
msgstr "Carica"
-#: modules/file/imgexport.c:4660 modules/file/rawfile.c:1046
-#: modules/process/neural.c:699
+#: modules/file/imgexport.c:4608 modules/file/rawfile.c:1046
+#: modules/process/neural.c:706
msgid "verb|_Store"
msgstr "verbo|_Immagazzina "
-#: modules/file/imgexport.c:4666 modules/file/rawfile.c:1052
-#: modules/process/neural.c:705
+#: modules/file/imgexport.c:4614 modules/file/rawfile.c:1052
+#: modules/process/neural.c:712
msgid "_Rename"
msgstr "_Rinomina"
-#: modules/file/imgexport.c:4686 modules/file/rawfile.c:1071
+#: modules/file/imgexport.c:4634 modules/file/rawfile.c:1071
msgid "Preset _name:"
msgstr "Nome predefinito:"
-#: modules/file/imgexport.c:4757
+#: modules/file/imgexport.c:4705
#, c-format
msgid "Export %s"
msgstr "Esporta %s"
-#: modules/file/imgexport.c:4778
+#: modules/file/imgexport.c:4727
msgid "Export as 1_6 bit grayscale"
msgstr "Esporta come 1_6 bit grayscale"
-#: modules/file/imgexport.c:4801
+#: modules/file/imgexport.c:4750
msgid "Lateral Scale"
msgstr "Scala laterale"
-#: modules/file/imgexport.c:4806
+#: modules/file/imgexport.c:4755
msgid "Values"
msgstr "Valori"
-#: modules/file/imgexport.c:4811
+#: modules/file/imgexport.c:4760
msgid "Selection"
msgstr "Selezione"
-#: modules/file/imgexport.c:4816 modules/file/rawfile.c:462
+#: modules/file/imgexport.c:4765 modules/file/rawfile.c:462
#: modules/process/convolution_filter.c:275
msgid "Presets"
msgstr "Predefiniti"
-#: modules/file/imgexport.c:5576
+#: modules/file/imgexport.c:5525
#, c-format
msgid "Cairo error occurred: %s"
msgstr "Errore Cairo: %s"
-#: modules/file/imgexport.c:5600
+#: modules/file/imgexport.c:5549
#, c-format
msgid "Pixbuf save failed: %s."
msgstr "Salvataggio pixbuf fallito: %s."
-#: modules/file/imgexport.c:5878
+#: modules/file/imgexport.c:5827
msgid "Image is too large to be stored as TARGA."
msgstr "Immagine troppo grande per essere salvata come TARGA."
-#: modules/file/imgexport.c:6457 modules/file/imgexport.c:6486
+#: modules/file/imgexport.c:6406 modules/file/imgexport.c:6435
msgid "Draw _numbers"
msgstr "Disegna _numeri"
-#: modules/file/imgexport.c:6469 modules/file/imgexport.c:6517
+#: modules/file/imgexport.c:6418 modules/file/imgexport.c:6466
msgid "_End marker length:"
msgstr "lunghezza segnale fine:"
-#: modules/file/imgexport.c:6498
+#: modules/file/imgexport.c:6447
msgid "Marker _radius:"
msgstr "Marcatore _raggio:"
@@ -4647,46 +4792,57 @@ msgstr "Collezione etichette parametro incompleta"
msgid "image depth"
msgstr "Profondità immagine"
-#: modules/file/iso28600.c:534
+#: modules/file/iso28600.c:543
msgid "Imports and exports ISO 28600:2011 SPM data transfer format."
msgstr "Importa ed esporta il formato trasferimento dati SPM ISO 28600:2011"
-#: modules/file/iso28600.c:550
+#: modules/file/iso28600.c:559
msgid "ISO 28600:2011 SPM data transfer files (.spm)"
msgstr "File trasferimento dati SPM ISO 28600:2011 "
-#: modules/file/iso28600.c:606
-#, c-format
-msgid "Only regular mappings are implemented but file has mapping type ‘%s’."
+#: modules/file/iso28600.c:658
+#, fuzzy, c-format
+msgid ""
+"Only regular and irregular mappings are implemented but the file has mapping "
+"type ‘%s’."
msgstr "Solo mappature regolari sono implementate. Il file ha mappatura ‘%s’."
-#: modules/file/iso28600.c:668 modules/file/iso28600.c:677
-#: modules/file/iso28600.c:686
+#: modules/file/iso28600.c:687 modules/file/iso28600.c:696
+#: modules/file/iso28600.c:705
#, c-format
msgid "List ‘%s’ has %u items which differs from the number %u given by ‘%s’."
msgstr ""
"La lista ‘%s’ ha %u termini che differiscono dal numero %u dato da ‘%s’."
-#: modules/file/iso28600.c:755 modules/file/iso28600.c:867
-#: modules/file/sdfile.c:846 modules/file/sdfile.c:863
-#: modules/file/spip-asc.c:239 modules/file/witec-asc.c:223
-#: modules/file/wsffile.c:215
+#: modules/file/iso28600.c:775
+#, fuzzy, c-format
+msgid "End of file reached when reading sample #%u of %u"
+msgstr "Termine file raggiunto durante lettura campione #%d di %d"
+
+#: modules/file/iso28600.c:784 modules/file/iso28600.c:873
+#, fuzzy, c-format
+msgid "Malformed data encountered when reading sample #%u"
+msgstr "Dati corrotti trovati durante lettura campione #%d di %d"
+
+#: modules/file/iso28600.c:797 modules/file/iso28600.c:887
+#: modules/file/iso28600.c:1022
+msgid "Missing end-of-data marker."
+msgstr "Marker termine campo dati mancante."
+
+#: modules/file/iso28600.c:1003 modules/file/sdfile.c:846
+#: modules/file/sdfile.c:863 modules/file/spip-asc.c:239
+#: modules/file/witec-asc.c:223 modules/file/wsffile.c:215
#, c-format
msgid "End of file reached when reading sample #%d of %d"
msgstr "Termine file raggiunto durante lettura campione #%d di %d"
-#: modules/file/iso28600.c:764 modules/file/iso28600.c:876
-#: modules/file/spip-asc.c:246 modules/file/witec-asc.c:230
-#: modules/file/wsffile.c:222
+#: modules/file/iso28600.c:1012 modules/file/spip-asc.c:246
+#: modules/file/witec-asc.c:230 modules/file/wsffile.c:222
#, c-format
msgid "Malformed data encountered when reading sample #%d of %d"
msgstr "Dati corrotti trovati durante lettura campione #%d di %d"
-#: modules/file/iso28600.c:774 modules/file/iso28600.c:886
-msgid "Missing end-of-data marker."
-msgstr "Marker termine campo dati mancante."
-
-#: modules/file/iso28600.c:1048
+#: modules/file/iso28600.c:1184
#, c-format
msgid "Line %u does not contain mandatory label ‘%s’."
msgstr "La riga %u non contiene l'etichetta richiesta ‘%s’."
@@ -4703,42 +4859,61 @@ msgstr "File dati JEOL (.tif)"
msgid "The type of data is unknown. Please report it to the developers."
msgstr "Tipo di dati sconosciuto. Da segnalare agli sviluppatori."
-#: modules/file/jpkscan.c:229
+#: modules/file/jpkscan.c:292
msgid "Imports JPK image scans."
msgstr "Importa scansioni immagini JPK "
-#: modules/file/jpkscan.c:242
+#: modules/file/jpkscan.c:305
msgid "JPK image scans (.jpk, .jpk-qi-image)"
msgstr "Immagini scansione JPK (.jpk, .jpk-qi-image)"
-#: modules/file/jpkscan.c:249
+#: modules/file/jpkscan.c:312
msgid "JPK force curves (.jpk-force, .jpk-force-map, .jpk-qi-data)"
msgstr "Curve di Forza JPK (.jpk-force, .jpk-force-map, .jpk-qi-data)"
-#: modules/file/jpkscan.c:315
+#: modules/file/jpkscan.c:378
msgid "File does not contain grid dimensions."
msgstr "Il file non contiene le dimensioni della griglia."
-#: modules/file/jpkscan.c:660 modules/file/nanoobserver.c:193
+#: modules/file/jpkscan.c:736 modules/file/nanoobserver.c:360
#: modules/file/nanoscantech.c:205 modules/file/opengps.c:209
#: modules/file/sensofarx.c:183 modules/file/spmxfile.c:166
msgid "Minizip cannot open the file as a ZIP file."
msgstr "Minizip non può aprire il file."
-#: modules/file/jpkscan.c:739
+#: modules/file/jpkscan.c:758 modules/file/jpkscan.c:2717
+#, c-format
+msgid "Scanning file (%u curves)..."
+msgstr ""
+
+#: modules/file/jpkscan.c:798 modules/file/nmmxyz.c:299
+msgid "Reading files..."
+msgstr "Lettura file..."
+
+#: modules/file/jpkscan.c:816
+#, fuzzy
+msgid "Creating volume data..."
+msgstr "Carica dati volume"
+
+#: modules/file/jpkscan.c:968
msgid "Non-uniform point and/or segment numbering is not supported."
msgstr "Numerazione di punti e/o segmenti non uniformi non supportata."
-#: modules/file/jpkscan.c:748
+#: modules/file/jpkscan.c:977
msgid "Non-uniform channel lists are not supported."
msgstr "Liste canali non uniformi non supportate"
-#: modules/file/jpkscan.c:756
+#: modules/file/jpkscan.c:985
#, c-format
msgid "Data file %s was found instead of expected %s."
msgstr "Trovato file dati %s al posto di previsto %s."
-#: modules/file/jpkscan.c:1497
+#: modules/file/jpkscan.c:1900
+#, fuzzy, c-format
+msgid "Header properties file for index %u is missing."
+msgstr "Il campo intestazione `%s' è mancante."
+
+#: modules/file/jpkscan.c:2519
msgid "Cannot find any height channel."
msgstr "Impossibile trovare alcun canale altezza"
@@ -4892,19 +5067,19 @@ msgstr "File MetroPro (.dat)"
msgid "File header is larger than file."
msgstr "Intestazione del file maggiore del file"
-#: modules/file/microprof.c:117
+#: modules/file/microprof.c:125
msgid "Imports MicroProf FRT profilometer data files."
msgstr "Importafile dati del profilometro MicroProf FRT."
-#: modules/file/microprof.c:130
+#: modules/file/microprof.c:138
msgid "MicroProf FRT files (.frt)"
msgstr "File MicroProf FRT (.frt)"
-#: modules/file/microprof.c:136
+#: modules/file/microprof.c:144
msgid "MicroProf FRT text files (.txt)"
msgstr "File testo MicroProf FRT (.txt)"
-#: modules/file/microprof.c:432
+#: modules/file/microprof.c:519
msgid "File contains fewer than XSize*YSize data points."
msgstr ""
"Il file contiene un numero di punti dati minore di dimensioneX*dimensioneY."
@@ -4995,8 +5170,8 @@ msgstr "dati immagine iniziano oltre la fine del file"
msgid "Spectra data starts past the end of file."
msgstr "dati degli spettri iniziano oltre la fine del file"
-#: modules/file/nanoeducator.c:648 modules/file/opdfile.c:276
-#: modules/file/renishaw.c:1325 modules/file/sensofar.c:256
+#: modules/file/nanoeducator.c:648 modules/file/opdfile.c:287
+#: modules/file/renishaw.c:1334 modules/file/sensofar.c:256
#: modules/file/witec-asc.c:161
msgid "File header is truncated"
msgstr "Intestazione del file troncata"
@@ -5006,8 +5181,8 @@ msgstr "Intestazione del file troncata"
msgid "Parameter header is truncated"
msgstr "Header parametro troncato."
-#: modules/file/nanoeducator.c:932 modules/process/curvature.c:454
-#: modules/tools/profile.c:1107
+#: modules/file/nanoeducator.c:932 modules/process/curvature.c:456
+#: modules/tools/profile.c:1090
#, c-format
msgid "Profile %d"
msgstr "Profilo %d"
@@ -5088,23 +5263,29 @@ msgstr "Linea DATA_INFO contenente meno di %d campi. "
msgid "Missing data start marker \\x1a\\x04."
msgstr "Indicatore inizio dati \\x1a\\x04 mancante "
-#: modules/file/nanoobserver.c:113
-msgid "Reads NanoObserver .nao files."
+#: modules/file/nanoobserver.c:201
+#, fuzzy
+msgid "Reads Nano-Solution/NanoObserver .nao files."
msgstr "Legge file .nao NanoObserver "
-#: modules/file/nanoobserver.c:126
-msgid "NanoObserver data (.nao)"
+#: modules/file/nanoobserver.c:214
+#, fuzzy
+msgid "Nano-Solution/NanoObserver data (.nao)"
msgstr "Dati NanoObserver (.nao)"
-#: modules/file/nanoscan.c:188
+#: modules/file/nanoobserver.c:410 modules/file/renishaw.c:1420
+msgid "Data block is truncated"
+msgstr "Blocco dati troncato."
+
+#: modules/file/nanoscan.c:191
msgid "Imports NanoScan XML files."
msgstr "Importa file dati NanoScan XML "
-#: modules/file/nanoscan.c:201
+#: modules/file/nanoscan.c:204
msgid "NanoScan XML files (.xml)"
msgstr "File NanoScan XML (.xml)"
-#: modules/file/nanoscan.c:910
+#: modules/file/nanoscan.c:937
msgid "Wrong size of Base64 encoded data."
msgstr "Dimensione sbagliata di dati codificati Base64"
@@ -5124,22 +5305,22 @@ msgstr "Importa file dati Digital Instruments Nanoscope II "
msgid "Nanoscope II files"
msgstr "File Nanoscope II"
-#: modules/file/nanoscope.c:207
+#: modules/file/nanoscope.c:212
msgid ""
"Imports Veeco (Digital Instruments) Nanoscope data files, version 3 or newer."
msgstr ""
"Importa file dati Veeco (Digital Instruments) Nanoscope versione 3 or "
"successive."
-#: modules/file/nanoscope.c:221
+#: modules/file/nanoscope.c:226
msgid "Nanoscope III files"
msgstr "File Nanoscope III"
-#: modules/file/nanoscope.c:288
+#: modules/file/nanoscope.c:295
msgid "File is not a Nanoscope file, or it is a unknown subtype."
msgstr "File non di tipo Nanoscope o di sottotipo sconosciuto."
-#: modules/file/nanoscope.c:295
+#: modules/file/nanoscope.c:302
msgid ""
"File has been damaged by change of line endings, resulting in corruption of "
"the binary part of the file.\n"
@@ -5158,16 +5339,16 @@ msgstr ""
"versioni di MS Windows o ogni altro modo di trasferimento file che cerchi di "
"salvare il testo indipendentemente dalla piattaforma."
-#: modules/file/nanoscope.c:653 modules/file/nanoscope.c:669
+#: modules/file/nanoscope.c:660 modules/file/nanoscope.c:676
msgid "Cannot parse `Scan size' field."
msgstr "Parse impossibile delle dimensioni campo scansione."
-#: modules/file/nanoscope.c:1539 modules/file/nrrdfile.c:1086
+#: modules/file/nanoscope.c:1546 modules/file/nrrdfile.c:1086
#, c-format
msgid "Garbage after data sample #%u."
msgstr "Dati invalidi dopo dati campione #%u."
-#: modules/file/nanoscope.c:1595
+#: modules/file/nanoscope.c:1602
msgid "Truncated header line."
msgstr "Linea intestazione troncata."
@@ -5245,11 +5426,8 @@ msgid "Nano Measuring Machine data import must be run as interactive."
msgstr ""
"I dati Nano Measuring Machine devono essere importati in modo interattivo."
-#: modules/file/nmmxyz.c:299
-msgid "Reading files..."
-msgstr "Lettura file..."
-
#: modules/file/nmmxyz.c:306 modules/process/lat_synth.c:1224
+#: modules/process/wave_synth.c:798
msgid "Rendering surface..."
msgstr "Rappresentazione superficie..."
@@ -5282,20 +5460,20 @@ msgid "Plot point density map"
msgstr "Traccia mappa densità punti"
#: modules/file/nmmxyz.c:534 modules/file/rawfile.c:626
-#: modules/process/dimensions.h:445 modules/xyz/xyz_drift.c:725
-#: modules/xyz/xyz_raster.c:517
+#: modules/process/dimensions.h:427 modules/xyz/xyz_drift.c:725
+#: modules/xyz/xyz_raster.c:376
msgid "Resolution"
msgstr "Risoluzione"
#: modules/file/nmmxyz.c:538 modules/file/rawfile.c:631
-#: modules/process/dimensions.h:451 modules/xyz/xyz_drift.c:729
-#: modules/xyz/xyz_raster.c:521
+#: modules/process/dimensions.h:433 modules/xyz/xyz_drift.c:729
+#: modules/xyz/xyz_raster.c:382
msgid "_Horizontal size:"
msgstr "Dimensione orizzontale:"
#: modules/file/nmmxyz.c:554 modules/file/rawfile.c:638
-#: modules/process/dimensions.h:454 modules/xyz/xyz_drift.c:744
-#: modules/xyz/xyz_raster.c:536
+#: modules/process/dimensions.h:436 modules/xyz/xyz_drift.c:744
+#: modules/xyz/xyz_raster.c:388
msgid "_Vertical size:"
msgstr "Dimensione verticale:"
@@ -5384,38 +5562,38 @@ msgstr "Il campo intestazione %s per asse contiene troppi elementi"
msgid "Per-axis header field %s contains too few items."
msgstr "Il campo intestazione %s per asse contiene troppo pochi elementi"
-#: modules/file/nt-mdt.c:843
+#: modules/file/nt-mdt.c:850
msgid "Imports NT-MDT data files."
msgstr "Importa file dati NT-MDT."
-#: modules/file/nt-mdt.c:856
+#: modules/file/nt-mdt.c:863
msgid "NT-MDT files (.mdt)"
msgstr "File NT-MDT (.mdt)"
-#: modules/file/nt-mdt.c:1491 modules/file/nt-mdt.c:1599
+#: modules/file/nt-mdt.c:1498 modules/file/nt-mdt.c:1606
msgid "Frame is too short for Frame Mode."
msgstr "Frame troppo corta per modalità frame"
-#: modules/file/nt-mdt.c:1506 modules/file/nt-mdt.c:1614
+#: modules/file/nt-mdt.c:1513 modules/file/nt-mdt.c:1621
msgid "Frame is too short for dots or data."
msgstr "Frame troppo corta per punti o dati."
-#: modules/file/nt-mdt.c:1869
+#: modules/file/nt-mdt.c:1879
#, c-format
msgid "End of file reached in frame header #%u."
msgstr "Termine file raggiunto nell'intestazione frame #%u."
-#: modules/file/nt-mdt.c:1877
+#: modules/file/nt-mdt.c:1887
#, c-format
msgid "End of file reached in frame data #%u."
msgstr "Termine file raggiunto in dati frame #%u."
-#: modules/file/nt-mdt.c:1910
+#: modules/file/nt-mdt.c:1920
#, c-format
msgid "Frame #%u is too short for scanned data header."
msgstr "Frame #%u troppo corto per intestazione dati scansionati."
-#: modules/file/nt-mdt.c:1927
+#: modules/file/nt-mdt.c:1937
#, c-format
msgid "Frame #%u is too short for spectroscopy data header."
msgstr "Frame #%u troppo corto per intestazione dati spettroscopici"
@@ -5530,28 +5708,28 @@ msgstr "File Omicron MATRIX (param.mtrx & data.mtrx) "
msgid "Omicron MATRIX (.mtrx & .mtrx)"
msgstr "File Omicron MATRIX (.mtrx & .mtrx) "
-#: modules/file/opdfile.c:188
+#: modules/file/opdfile.c:199
msgid "Imports Wyko OPD and ASC files."
msgstr "Importa file Wyko OPD e ASC"
-#: modules/file/opdfile.c:201
+#: modules/file/opdfile.c:212
msgid "Wyko OPD files (.opd)"
msgstr "File OPD (.opd)"
-#: modules/file/opdfile.c:208
+#: modules/file/opdfile.c:219
msgid "Wyko ASCII export files (.asc)"
msgstr "File esportati Wyko ASCII (.asc)"
-#: modules/file/opdfile.c:299
+#: modules/file/opdfile.c:310
#, c-format
msgid "Item `%s' is beyond the end of the file."
msgstr "l'oggetto `%s' è oltre la fine del file"
-#: modules/file/opdfile.c:614
+#: modules/file/opdfile.c:636
msgid "Nested directories found"
msgstr "Trovate cartelle annidate"
-#: modules/file/opdfile.c:805
+#: modules/file/opdfile.c:842
#, c-format
msgid "Truncated data in block %s"
msgstr "Dati troncati nel blocco %s"
@@ -5850,19 +6028,21 @@ msgstr "Formato dati"
#: modules/file/rawfile.c:567 modules/process/arithmetic.c:234
#: modules/process/calcoefs_view.c:320 modules/process/coerce.c:250
-#: modules/process/convolution_filter.c:236 modules/process/deposit_synth.c:637
+#: modules/process/convolution_filter.c:236 modules/process/deposit_synth.c:638
#: modules/process/drift.c:242 modules/process/edge.c:635
-#: modules/process/entropy.c:178 modules/process/fft_filter_1d.c:183
-#: modules/process/grain_edge.c:210 modules/process/grain_filter.c:313
-#: modules/process/grain_mark.c:244 modules/process/grain_wshed.c:164
-#: modules/process/mark_disconn.c:205 modules/process/mark_with.c:195
-#: modules/process/polydistort.c:205 modules/process/scars.c:295
-#: modules/process/slope_dist.c:273 modules/process/straighten_path.c:198
-#: modules/process/synth.h:509 modules/process/tip_model.c:166
+#: modules/process/entropy.c:178 modules/process/fft_filter_1d.c:184
+#: modules/process/fractal.c:225 modules/process/grain_edge.c:209
+#: modules/process/grain_filter.c:312 modules/process/grain_mark.c:243
+#: modules/process/grain_wshed.c:165 modules/process/mark_disconn.c:205
+#: modules/process/mark_with.c:196 modules/process/mfm_field.c:278
+#: modules/process/mfm_shift.c:167 modules/process/polydistort.c:205
+#: modules/process/scars.c:314 modules/process/slope_dist.c:272
+#: modules/process/stitch.c:272 modules/process/straighten_path.c:198
+#: modules/process/synth.h:538 modules/process/tip_model.c:164
#: modules/process/wpour_mark.c:273 modules/tools/linestats.c:454
-#: modules/tools/sfunctions.c:534 modules/tools/stats.c:459
-#: modules/volume/volume_extract.c:328 modules/volume/volume_linestat.c:287
-#: modules/xyz/xyz_drift.c:618 modules/xyz/xyz_raster.c:443
+#: modules/tools/sfunctions.c:531 modules/tools/stats.c:456
+#: modules/volume/volume_extract.c:321 modules/volume/volume_linestat.c:292
+#: modules/xyz/xyz_drift.c:618 modules/xyz/xyz_raster.c:457
msgid "_Update"
msgstr "_Aggiorna"
@@ -6009,7 +6189,7 @@ msgstr ""
"<b>Parsing fallito</b>\n"
"Il contenuto di `%s'non corrisponde al formato: %s."
-#: modules/file/rawfile.c:1690 modules/process/neural.c:1580
+#: modules/file/rawfile.c:1690 modules/process/neural.c:1587
#, c-format
msgid "The name `%s' is invalid."
msgstr "Nome `%s' non valido"
@@ -6105,7 +6285,8 @@ msgstr "File dati XYZ"
msgid "Import XYZ Data"
msgstr "Importa dati XYZ"
-#: modules/file/rawxyz.c:279
+#: modules/file/rawxyz.c:279 modules/graph/graph_stats.c:305
+#: modules/graph/graph_stats.c:756 modules/graph/graph_stats.c:800
msgid "Number of points:"
msgstr "Numero punti:"
@@ -6125,7 +6306,7 @@ msgstr "Intervallo X:"
msgid "_Lateral units:"
msgstr "Unità _Laterale:"
-#: modules/file/rawxyz.c:386 modules/process/dimensions.h:494
+#: modules/file/rawxyz.c:386 modules/process/dimensions.h:479
msgid "_Value units:"
msgstr "unità _Valore:"
@@ -6141,18 +6322,14 @@ msgstr "file dati Renishaw WiRE (.wdf)"
msgid "MapArea block is truncated"
msgstr "Blocco MapArea troncato."
-#: modules/file/renishaw.c:787
+#: modules/file/renishaw.c:793
msgid "Random points order unsupported"
msgstr "Ordine punti casuale non supportato"
-#: modules/file/renishaw.c:1396
+#: modules/file/renishaw.c:1405
msgid "Block header is truncated"
msgstr "Intestazione del blocco troncata"
-#: modules/file/renishaw.c:1411
-msgid "Data block is truncated"
-msgstr "Blocco dati troncato."
-
#: modules/file/rhk-sm3.c:236
msgid "Imports RHK Technology SM3 data files."
msgstr "Importa file dati SPM3 RHK Technology"
@@ -6414,19 +6591,24 @@ msgstr "Carica file dati SPML (Scanning Probe Microscopy Markup Language) ."
msgid "SPML files (.xml)"
msgstr "File SPML (.xml)"
-#: modules/file/spmlab.c:131
+#: modules/file/spmlab.c:175
msgid "Imports Thermicroscopes SpmLab R3 to R7 data files."
msgstr "Importa file dati Thermicroscopes SpmLab da R3 a R7"
-#: modules/file/spmlab.c:144
+#: modules/file/spmlab.c:188
msgid "Thermicroscopes SpmLab files"
msgstr "File Thermicroscopes SpmLab"
-#: modules/file/spmlab.c:231
+#: modules/file/spmlab.c:259
#, c-format
msgid "Unknown format version %c."
msgstr "Versione formato %c sconosciuta."
+#: modules/file/spmlab.c:283
+#, fuzzy
+msgid "Data block is truncated."
+msgstr "Blocco dati troncato."
+
#: modules/file/spmlabf.c:79
msgid "Imports SPMLab floating-point files."
msgstr "Importa file a punto mobile SPMLab"
@@ -6623,11 +6805,11 @@ msgstr "Importa file WinSTM (.stm) "
msgid "WinSTM files (.stm)"
msgstr "File WinSTM (.stm)"
-#: modules/file/wipfile.c:272
+#: modules/file/wipfile.c:281
msgid "Imports WItec Project data files."
msgstr "Importa file dati WITec Project "
-#: modules/file/wipfile.c:285
+#: modules/file/wipfile.c:294
msgid "WItec Project files (.wip)"
msgstr "file WITec Project (.wip)"
@@ -6688,21 +6870,21 @@ msgstr "Esporta i dati come semplice file di testo XYZ"
msgid "XYZ text data (.xyz)"
msgstr "Dati testo XYZ (.xyz)"
-#: modules/file/xyzexport.c:244
+#: modules/file/xyzexport.c:247
msgid "Lateral units:"
msgstr "Unità laterali:"
-#: modules/file/xyzexport.c:290
+#: modules/file/xyzexport.c:293
msgid "Export XYZ"
msgstr "Esporta XYZ"
-#: modules/file/xyzexport.c:340 modules/process/curvature.c:704
+#: modules/file/xyzexport.c:343 modules/process/curvature.c:700
#: modules/process/entropy.c:214 modules/process/facet-level.c:207
-#: modules/process/fit-shape.c:743 modules/process/level.c:259
-#: modules/process/linematch.c:906 modules/process/neural.c:593
-#: modules/process/polylevel.c:491 modules/process/slope_dist.c:418
-#: modules/tools/filter.c:300 modules/tools/linestats.c:436
-#: modules/tools/profile.c:591 modules/tools/sfunctions.c:516
+#: modules/process/fit-shape.c:755 modules/process/level.c:259
+#: modules/process/linematch.c:869 modules/process/neural.c:597
+#: modules/process/polylevel.c:494 modules/process/slope_dist.c:411
+#: modules/tools/filter.c:301 modules/tools/linestats.c:436
+#: modules/tools/profile.c:572 modules/tools/sfunctions.c:513
#: modules/tools/stats.c:389
msgid "Masking Mode"
msgstr "Modalità Maschera"
@@ -6715,6 +6897,16 @@ msgstr "Importa immagini SEM Carl Zeiss"
msgid "Carl Zeiss SEM scans (.tif)"
msgstr "Scansioni SEM Carl Zeiss (.tif)"
+#: modules/file/zeisslsm.c:383
+#, fuzzy
+msgid "Imports Carl Zeiss CLSM images."
+msgstr "Importa immagini SEM Carl Zeiss"
+
+#: modules/file/zeisslsm.c:396
+#, fuzzy
+msgid "Carl Zeiss CLSM images (.lsm)"
+msgstr "Scansioni SEM Carl Zeiss (.tif)"
+
#: modules/file/zemax.c:72
msgid "Imports Zemax grid sag data files."
msgstr "Importa file dati Zemax grid sag"
@@ -6737,15 +6929,15 @@ msgstr "Codice unità %d non valido o non supportato"
msgid "The first line contains too many items."
msgstr "La prima linea contiene troppi oggetti"
-#: modules/graph/graph_align.c:57
+#: modules/graph/graph_align.c:60
msgid "Aligns graph curves."
msgstr "Allineamento curve grafico"
-#: modules/graph/graph_align.c:71
+#: modules/graph/graph_align.c:74
msgid "/_Align"
msgstr "/_Allinea"
-#: modules/graph/graph_align.c:74
+#: modules/graph/graph_align.c:77
msgid "Align curves"
msgstr "Allineamento curve"
@@ -6761,48 +6953,50 @@ msgstr "/_Dimensioni .Critiche .."
msgid "Fit critical dimension"
msgstr "Adatta dimensione critica"
-#: modules/graph/graph_cd.c:209 modules/graph/graph_fit.c:267
+#: modules/graph/graph_cd.c:209 modules/graph/graph_fit.c:270
msgid "Fit Graph"
msgstr "Adatta Grafico"
-#: modules/graph/graph_cd.c:212 modules/graph/graph_fdfit.c:251
-#: modules/graph/graph_fit.c:270 modules/process/fit-shape.c:393
+#: modules/graph/graph_cd.c:212 modules/graph/graph_fdfit.c:254
+#: modules/graph/graph_fit.c:273 modules/process/fit-shape.c:394
#: modules/volume/volume_fdfit.c:299
msgid "verb|_Fit"
msgstr "Adatta"
-#: modules/graph/graph_cd.c:262 modules/graph/graph_cut.c:166
-#: modules/graph/graph_fdfit.c:306 modules/graph/graph_fit.c:325
-#: modules/graph/graph_peaks.c:199
+#: modules/graph/graph_cd.c:262 modules/graph/graph_cut.c:168
+#: modules/graph/graph_fdfit.c:313 modules/graph/graph_fit.c:332
+#: modules/graph/graph_peaks.c:199 modules/graph/graph_stats.c:268
msgid "_Graph curve:"
msgstr "_Curva Grafico"
-#: modules/graph/graph_cd.c:276 modules/graph/graph_fdfit.c:320
-#: modules/graph/graph_fit.c:339 modules/volume/volume_fdfit.c:405
+#: modules/graph/graph_cd.c:276 modules/graph/graph_fdfit.c:327
+#: modules/graph/graph_fit.c:346 modules/volume/volume_fdfit.c:389
msgid "F_unction:"
msgstr "F_unzione:"
-#: modules/graph/graph_cd.c:305 modules/graph/graph_fdfit.c:361
-#: modules/graph/graph_fit.c:375 modules/process/curvature.c:745
-#: modules/process/fit-shape.c:792 modules/volume/volume_fdfit.c:446
+#: modules/graph/graph_cd.c:305 modules/graph/graph_fdfit.c:368
+#: modules/graph/graph_fit.c:382 modules/process/curvature.c:742
+#: modules/process/fit-shape.c:804 modules/volume/volume_fdfit.c:422
msgid "Parameter"
msgstr "Parametro"
-#: modules/graph/graph_cd.c:307 modules/graph/graph_fdfit.c:363
-#: modules/graph/graph_fit.c:377 modules/process/fit-shape.c:794
-#: modules/volume/volume_fdfit.c:448
+#: modules/graph/graph_cd.c:307 modules/graph/graph_fdfit.c:370
+#: modules/graph/graph_fit.c:384 modules/process/fit-shape.c:806
+#: modules/volume/volume_fdfit.c:424
msgid "Error"
msgstr "Errore"
-#: modules/graph/graph_cd.c:319 modules/graph/graph_cut.c:196
-#: modules/graph/graph_fdfit.c:415 modules/graph/graph_fit.c:433
-#: modules/volume/volume_fdfit.c:500 modules/volume/volume_linestat.c:389
+#: modules/graph/graph_cd.c:319 modules/graph/graph_cut.c:189
+#: modules/graph/graph_fdfit.c:422 modules/graph/graph_fit.c:440
+#: modules/graph/graph_stats.c:279 modules/graph/graph_stats.c:793
+#: modules/volume/volume_fdfit.c:476 modules/volume/volume_linestat.c:394
msgid "Range:"
msgstr "Intervallo:"
-#: modules/graph/graph_cd.c:330 modules/graph/graph_cut.c:207
-#: modules/graph/graph_fdfit.c:426 modules/graph/graph_fit.c:444
-#: modules/volume/volume_fdfit.c:511 modules/volume/volume_linestat.c:400
+#: modules/graph/graph_cd.c:330 modules/graph/graph_cut.c:200
+#: modules/graph/graph_fdfit.c:433 modules/graph/graph_fit.c:451
+#: modules/graph/graph_stats.c:290 modules/graph/graph_stats.c:796
+#: modules/volume/volume_fdfit.c:487 modules/volume/volume_linestat.c:405
msgid "range|to"
msgstr "fino a"
@@ -6810,94 +7004,94 @@ msgstr "fino a"
msgid "_Draw whole circle"
msgstr "_Disegna cerchio"
-#: modules/graph/graph_cd.c:382 modules/graph/graph_fdfit.c:491
-#: modules/graph/graph_fit.c:531 modules/process/fit-shape.c:522
-#: modules/volume/volume_fdfit.c:573
+#: modules/graph/graph_cd.c:382 modules/graph/graph_fdfit.c:498
+#: modules/graph/graph_fit.c:538 modules/process/fit-shape.c:523
+#: modules/volume/volume_fdfit.c:549
msgid "Save Fit Report"
msgstr "Salva il Fit Report"
#: modules/graph/graph_cd.c:529 modules/graph/graph_cd.c:1107
-#: modules/graph/graph_fdfit.c:709 modules/graph/graph_fit.c:763
-#: modules/volume/volume_fdfit.c:907
+#: modules/graph/graph_fdfit.c:725 modules/graph/graph_fit.c:779
+#: modules/volume/volume_fdfit.c:883
msgid "Fit"
msgstr "Adatta"
-#: modules/graph/graph_cd.c:555 modules/graph/graph_fdfit.c:749
-#: modules/graph/graph_fit.c:803 modules/volume/volume_fdfit.c:978
-#: modules/volume/volume_fdfit.c:1085
+#: modules/graph/graph_cd.c:555 modules/graph/graph_fdfit.c:765
+#: modules/graph/graph_fit.c:819 modules/volume/volume_fdfit.c:954
+#: modules/volume/volume_fdfit.c:1061
msgid "It is necessary to select more data points than free fit parameters"
msgstr ""
"E' necessario selezionare un numero di dati maggiore dei parametri di fit "
"libero."
-#: modules/graph/graph_cd.c:710 modules/graph/graph_fdfit.c:798
-#: modules/graph/graph_fit.c:852 modules/process/entropy.c:554
-#: modules/tools/grainmeasure.c:217 modules/tools/readvalue.c:634
-#: modules/tools/readvalue.c:635 modules/tools/readvalue.c:636
-#: modules/tools/readvalue.c:637 modules/tools/roughness.c:975
-#: modules/tools/stats.c:727 modules/tools/stats.c:740
-#: modules/tools/stats.c:741 modules/volume/volume_fdfit.c:1134
-#: modules/xyz/xyz_drift.c:1099 modules/xyz/xyz_drift.c:1117
-#: modules/xyz/xyz_drift.c:1134
+#: modules/graph/graph_cd.c:710 modules/graph/graph_fdfit.c:814
+#: modules/graph/graph_fit.c:868 modules/graph/graph_stats.c:663
+#: modules/process/entropy.c:555 modules/tools/grainmeasure.c:217
+#: modules/tools/readvalue.c:634 modules/tools/readvalue.c:635
+#: modules/tools/readvalue.c:636 modules/tools/readvalue.c:637
+#: modules/tools/roughness.c:984 modules/tools/stats.c:723
+#: modules/tools/stats.c:736 modules/tools/stats.c:737
+#: modules/volume/volume_fdfit.c:1110 modules/xyz/xyz_drift.c:1099
+#: modules/xyz/xyz_drift.c:1117 modules/xyz/xyz_drift.c:1134
msgid "N.A."
msgstr "N.A."
-#: modules/graph/graph_cd.c:993 modules/graph/graph_fdfit.c:1363
-#: modules/graph/graph_fit.c:1500 modules/process/fit-shape.c:2078
-#: modules/volume/volume_fdfit.c:1720
+#: modules/graph/graph_cd.c:993 modules/graph/graph_fdfit.c:1381
+#: modules/graph/graph_fit.c:1518 modules/process/fit-shape.c:2060
+#: modules/volume/volume_fdfit.c:1696
msgid "===== Fit Results ====="
msgstr "===== Risultati del Fit ====="
-#: modules/graph/graph_cd.c:997 modules/graph/graph_fdfit.c:1367
-#: modules/graph/graph_fit.c:1504 modules/process/fit-shape.c:2080
-#: modules/volume/volume_fdfit.c:1724
+#: modules/graph/graph_cd.c:997 modules/graph/graph_fdfit.c:1385
+#: modules/graph/graph_fit.c:1522 modules/process/fit-shape.c:2062
+#: modules/volume/volume_fdfit.c:1700
#, c-format
msgid "Data: %s\n"
msgstr "Dati: %s\n"
-#: modules/graph/graph_cd.c:1000 modules/graph/graph_fdfit.c:1370
-#: modules/graph/graph_fit.c:1507 modules/process/fit-shape.c:2082
-#: modules/volume/volume_fdfit.c:1727
+#: modules/graph/graph_cd.c:1000 modules/graph/graph_fdfit.c:1388
+#: modules/graph/graph_fit.c:1525 modules/process/fit-shape.c:2064
+#: modules/volume/volume_fdfit.c:1703
#, c-format
msgid "Number of points: %d of %d\n"
msgstr "Numero di punti: %d di %d\n"
-#: modules/graph/graph_cd.c:1004 modules/graph/graph_fdfit.c:1374
-#: modules/graph/graph_fit.c:1511 modules/volume/volume_fdfit.c:1731
+#: modules/graph/graph_cd.c:1004 modules/graph/graph_fdfit.c:1392
+#: modules/graph/graph_fit.c:1529 modules/volume/volume_fdfit.c:1707
#, c-format
msgid "X range: %.*f to %.*f %s\n"
msgstr "Intervallo X : da %.*f a %.*f %s\n"
-#: modules/graph/graph_cd.c:1010 modules/graph/graph_fdfit.c:1380
-#: modules/graph/graph_fit.c:1517 modules/process/fit-shape.c:2084
-#: modules/volume/volume_fdfit.c:1737
+#: modules/graph/graph_cd.c:1010 modules/graph/graph_fdfit.c:1398
+#: modules/graph/graph_fit.c:1535 modules/process/fit-shape.c:2066
+#: modules/volume/volume_fdfit.c:1713
#, c-format
msgid "Fitted function: %s\n"
msgstr "Funzione adattata: %s\n"
-#: modules/graph/graph_cd.c:1013 modules/graph/graph_fdfit.c:1383
-#: modules/graph/graph_fit.c:1520 modules/process/fit-shape.c:2087
-#: modules/volume/volume_fdfit.c:1740
+#: modules/graph/graph_cd.c:1013 modules/graph/graph_fdfit.c:1401
+#: modules/graph/graph_fit.c:1538 modules/process/fit-shape.c:2069
+#: modules/volume/volume_fdfit.c:1716
msgid "Results\n"
msgstr "Risultati\n"
-#: modules/graph/graph_cut.c:88
+#: modules/graph/graph_cut.c:87
msgid "Cut graph"
msgstr "Taglia grafico"
-#: modules/graph/graph_cut.c:102
+#: modules/graph/graph_cut.c:101
msgid "/_Cut..."
msgstr "/Taglia..."
-#: modules/graph/graph_cut.c:105
+#: modules/graph/graph_cut.c:104
msgid "Extract part of graph into new one"
msgstr "Estrazione di parte del grafico in nuovo file"
-#: modules/graph/graph_cut.c:146
+#: modules/graph/graph_cut.c:145
msgid "Cut Graph"
msgstr "Taglia Grafico"
-#: modules/graph/graph_cut.c:180
+#: modules/graph/graph_cut.c:173
msgid "Cut _all curves"
msgstr "Taglia tutte le curve"
@@ -6995,97 +7189,97 @@ msgstr "Esporta grafico come immagine raster"
msgid "Export to PNG"
msgstr "Esporta come PNG"
-#: modules/graph/graph_export_vector.c:35
+#: modules/graph/graph_export_vector.c:36
msgid "Exports graphs to PostScript"
msgstr "Esporta grafico come file postscript"
-#: modules/graph/graph_export_vector.c:49
+#: modules/graph/graph_export_vector.c:50
msgid "/Export _PostScript"
msgstr "/Esporta _PostScript"
-#: modules/graph/graph_export_vector.c:52
+#: modules/graph/graph_export_vector.c:53
msgid "Export graph to PostScript"
msgstr "Esporta grafico come file postscript"
-#: modules/graph/graph_export_vector.c:65
+#: modules/graph/graph_export_vector.c:66
msgid "Export to PostScript"
msgstr "Esporta come PostScript"
-#: modules/graph/graph_fdfit.c:168
+#: modules/graph/graph_fdfit.c:169
msgid "Fit force-distance data"
msgstr "Adatta dati forza-distanza"
-#: modules/graph/graph_fdfit.c:182
+#: modules/graph/graph_fdfit.c:183
msgid "/_Fit FD Curve..."
msgstr "/_Fit Curva FD..."
-#: modules/graph/graph_fdfit.c:185
+#: modules/graph/graph_fdfit.c:186
msgid "Fit a force-distance curve"
msgstr "Adatta una curva forza-distanza"
-#: modules/graph/graph_fdfit.c:248 modules/volume/volume_fdfit.c:296
+#: modules/graph/graph_fdfit.c:251 modules/volume/volume_fdfit.c:296
msgid "Fit FD Curve"
msgstr "Fit Curva FD..."
-#: modules/graph/graph_fdfit.c:255 modules/graph/graph_fit.c:274
-#: modules/process/fit-shape.c:397 modules/process/measure_lattice.c:257
-#: modules/volume/volume_fdfit.c:303
+#: modules/graph/graph_fdfit.c:258 modules/graph/graph_fit.c:277
+#: modules/process/correct_affine.c:347 modules/process/fit-shape.c:398
+#: modules/process/measure_lattice.c:247 modules/volume/volume_fdfit.c:303
msgid "verb|_Estimate"
msgstr "Stima"
-#: modules/graph/graph_fdfit.c:257 modules/graph/graph_fit.c:276
-#: modules/volume/volume_fdfit.c:305
+#: modules/graph/graph_fdfit.c:260 modules/graph/graph_fit.c:279
+#: modules/process/psf.c:239 modules/volume/volume_fdfit.c:305
msgid "_Plot Inits"
msgstr "_Metti in grafico inits"
-#: modules/graph/graph_fdfit.c:359 modules/graph/graph_fit.c:373
-#: modules/process/fit-shape.c:790 modules/volume/volume_fdfit.c:444
+#: modules/graph/graph_fdfit.c:366 modules/graph/graph_fit.c:380
+#: modules/process/fit-shape.c:802 modules/volume/volume_fdfit.c:420
msgid "Fix"
msgstr "Fissa"
-#: modules/graph/graph_fdfit.c:365 modules/graph/graph_fit.c:379
-#: modules/volume/volume_fdfit.c:450
+#: modules/graph/graph_fdfit.c:372 modules/graph/graph_fit.c:386
+#: modules/volume/volume_fdfit.c:426
msgid "Initial"
msgstr "Iniziale"
-#: modules/graph/graph_fdfit.c:376 modules/graph/graph_fit.c:394
-#: modules/volume/volume_fdfit.c:461
+#: modules/graph/graph_fdfit.c:383 modules/graph/graph_fit.c:401
+#: modules/volume/volume_fdfit.c:437
msgid "χ<sup>2</sup> result:"
msgstr "χ<sup>2</sup> risulta:"
-#: modules/graph/graph_fdfit.c:392 modules/graph/graph_fit.c:410
-#: modules/process/fit-shape.c:469 modules/process/fit-shape.c:2134
-#: modules/volume/volume_fdfit.c:477
+#: modules/graph/graph_fdfit.c:399 modules/graph/graph_fit.c:417
+#: modules/process/fit-shape.c:470 modules/process/fit-shape.c:2116
+#: modules/volume/volume_fdfit.c:453
msgid "Correlation Matrix"
msgstr "Matrice di Correlazione"
-#: modules/graph/graph_fdfit.c:447 modules/graph/graph_fit.c:485
-#: modules/process/wpour_mark.c:410 modules/volume/volume_fdfit.c:532
+#: modules/graph/graph_fdfit.c:454 modules/graph/graph_fit.c:492
+#: modules/process/wpour_mark.c:410 modules/volume/volume_fdfit.c:508
msgid "Instant:"
msgstr "Istante:"
-#: modules/graph/graph_fdfit.c:450 modules/graph/graph_fit.c:488
+#: modules/graph/graph_fdfit.c:457 modules/graph/graph_fit.c:495
msgid "esti_mate"
msgstr "Sti_ma"
-#: modules/graph/graph_fdfit.c:457 modules/graph/graph_fit.c:495
-#: modules/volume/volume_fdfit.c:542
+#: modules/graph/graph_fdfit.c:464 modules/graph/graph_fit.c:502
+#: modules/volume/volume_fdfit.c:518
msgid "p_lot"
msgstr "grafico"
-#: modules/graph/graph_fdfit.c:708 modules/graph/graph_fit.c:762
-#: modules/volume/volume_fdfit.c:906
+#: modules/graph/graph_fdfit.c:724 modules/graph/graph_fit.c:778
+#: modules/volume/volume_fdfit.c:882
msgid "Estimate"
msgstr "Stima"
-#: modules/graph/graph_fdfit.c:1410 modules/graph/graph_fit.c:1547
-#: modules/volume/volume_fdfit.c:1768
+#: modules/graph/graph_fdfit.c:1428 modules/graph/graph_fit.c:1565
+#: modules/volume/volume_fdfit.c:1744
#, c-format
msgid "Residual sum: %g\n"
msgstr "Somma residuale: %g\n"
-#: modules/graph/graph_fdfit.c:1413 modules/graph/graph_fit.c:1550
-#: modules/volume/volume_fdfit.c:1771
+#: modules/graph/graph_fdfit.c:1431 modules/graph/graph_fit.c:1568
+#: modules/volume/volume_fdfit.c:1747
msgid "Correlation matrix\n"
msgstr "Matrice di correlazione\n"
@@ -7101,27 +7295,27 @@ msgstr "/_Filtro"
msgid "Remove noise from graph curves"
msgstr "Rimuove rumore dalle curve del grafico"
-#: modules/graph/graph_fit.c:181
+#: modules/graph/graph_fit.c:182
msgid "Fit graph with function"
msgstr "Adatta il grafico con la funzione"
-#: modules/graph/graph_fit.c:195
+#: modules/graph/graph_fit.c:196
msgid "/_Fit Function..."
msgstr "/_Fit Funzione..."
-#: modules/graph/graph_fit.c:198
+#: modules/graph/graph_fit.c:199
msgid "Fit a function on graph data"
msgstr "Adatta una funzione ai dati del grafico"
-#: modules/graph/graph_fit.c:386
+#: modules/graph/graph_fit.c:393
msgid "Copy all fitted values to estimates"
msgstr ""
-#: modules/graph/graph_fit.c:460
+#: modules/graph/graph_fit.c:467
msgid "Plot full range"
msgstr "Intervallo totale grafico"
-#: modules/graph/graph_fit.c:470
+#: modules/graph/graph_fit.c:477
msgid "Create a difference graph"
msgstr "Crea grafico differenza"
@@ -7212,52 +7406,149 @@ msgstr "/Trova _Picchi..."
msgid "Find graph curve peaks"
msgstr "Trova picchi su curve grafico"
-#: modules/graph/graph_peaks.c:157
+#: modules/graph/graph_peaks.c:155
msgid "Prominence"
msgstr "Prominenza"
-#: modules/graph/graph_peaks.c:161
+#: modules/graph/graph_peaks.c:159
msgid "Zero"
msgstr "Zero"
-#: modules/graph/graph_peaks.c:162
+#: modules/graph/graph_peaks.c:160
msgid "Bilateral minimum"
msgstr "Minimo bilaterale"
-#: modules/graph/graph_peaks.c:178
+#: modules/graph/graph_peaks.c:176
msgid "Graph Peaks"
msgstr "Grafico Picchi"
-#: modules/graph/graph_peaks.c:212
+#: modules/graph/graph_peaks.c:209
msgid "_Background type:"
msgstr "Tipo Sfondo:"
-#: modules/graph/graph_peaks.c:227
+#: modules/graph/graph_peaks.c:219
msgid "Order peaks _by:"
msgstr "Ordina picchi per:"
-#: modules/graph/graph_peaks.c:242
+#: modules/graph/graph_peaks.c:225
msgid "Number of _peaks:"
msgstr "_Numero picchi:"
-#: modules/graph/graph_peaks.c:263 modules/process/curvature.c:773
-#: modules/process/grain_stat.c:360 modules/process/measure_lattice.c:396
-#: modules/process/polylevel.c:607 modules/tools/distance.c:259
-#: modules/tools/roughness.c:818 modules/tools/stats.c:450
+#: modules/graph/graph_peaks.c:245 modules/graph/graph_stats.c:367
+#: modules/process/curvature.c:770 modules/process/grain_stat.c:360
+#: modules/process/measure_lattice.c:390 modules/process/polylevel.c:610
+#: modules/tools/distance.c:259 modules/tools/roughness.c:819
+#: modules/tools/stats.c:447
msgid "Save table to a file"
msgstr "Salva tabella in file"
-#: modules/graph/graph_peaks.c:267 modules/process/curvature.c:778
-#: modules/process/grain_stat.c:365 modules/process/measure_lattice.c:400
-#: modules/process/polylevel.c:617 modules/tools/distance.c:264
-#: modules/tools/roughness.c:823 modules/tools/stats.c:455
+#: modules/graph/graph_peaks.c:249 modules/graph/graph_stats.c:371
+#: modules/process/curvature.c:775 modules/process/grain_stat.c:365
+#: modules/process/measure_lattice.c:394 modules/process/polylevel.c:620
+#: modules/tools/distance.c:264 modules/tools/roughness.c:824
+#: modules/tools/stats.c:452
msgid "Copy table to clipboard"
msgstr "Copia tabella negli appunti"
-#: modules/graph/graph_peaks.c:654
+#: modules/graph/graph_peaks.c:618
msgid "Save Peak Parameters"
msgstr "Salva Parametri picco"
+#: modules/graph/graph_stats.c:148 modules/graph/graph_stats.c:161
+#: modules/tools/stats.c:205
+msgid "Average value:"
+msgstr "Valore medio:"
+
+#: modules/graph/graph_stats.c:149 modules/tools/stats.c:206
+msgid "Median:"
+msgstr "Mediana:"
+
+#: modules/graph/graph_stats.c:150
+msgid "Ra:"
+msgstr "Ra:"
+
+#: modules/graph/graph_stats.c:151
+#, fuzzy
+msgid "Rms (Rq):"
+msgstr "Rms (Sq):"
+
+#: modules/graph/graph_stats.c:152 modules/tools/stats.c:210
+msgid "Skew:"
+msgstr "Skew:"
+
+#: modules/graph/graph_stats.c:153 modules/tools/stats.c:211
+msgid "Kurtosis:"
+msgstr "Curtosi:"
+
+#: modules/graph/graph_stats.c:158
+#, fuzzy
+msgid "Projected length:"
+msgstr "Lunghezza contorno proiettato"
+
+#: modules/graph/graph_stats.c:159
+#, fuzzy
+msgid "Developed length:"
+msgstr "Lunghezza profilo sviluppato"
+
+#: modules/graph/graph_stats.c:160 modules/tools/stats.c:214
+msgid "Variation:"
+msgstr "Variazione:"
+
+#: modules/graph/graph_stats.c:162
+#, fuzzy
+msgid "Area under curve:"
+msgstr "_Curva Grafico"
+
+#: modules/graph/graph_stats.c:163
+#, fuzzy
+msgid "Positive area:"
+msgstr "Positivo"
+
+#: modules/graph/graph_stats.c:164
+#, fuzzy
+msgid "Negative area:"
+msgstr "Negativo"
+
+#: modules/graph/graph_stats.c:165
+#, fuzzy
+msgid "Root mean square:"
+msgstr "Radice quadratica media ondulazione"
+
+#: modules/graph/graph_stats.c:171
+#, fuzzy
+msgid "Calculates simple graph curve statistics."
+msgstr "Calcola curvatura globale"
+
+#: modules/graph/graph_stats.c:185
+#, fuzzy
+msgid "/_Statistics..."
+msgstr "/_Grani/S_tatistiche.."
+
+#: modules/graph/graph_stats.c:188
+#, fuzzy
+msgid "Calculate graph curve statistics"
+msgstr "Calcolo funzioni statistiche riga/colonna"
+
+#: modules/graph/graph_stats.c:241
+#, fuzzy
+msgid "Graph Statistics"
+msgstr "Statistiche Grani"
+
+#: modules/graph/graph_stats.c:320 modules/graph/graph_stats.c:807
+#, fuzzy
+msgid "Simple Parameters"
+msgstr "Parametri Simulazione"
+
+#: modules/graph/graph_stats.c:342 modules/graph/graph_stats.c:826
+#, fuzzy
+msgid "Integrals"
+msgstr "_Integrale:"
+
+#: modules/graph/graph_stats.c:686
+#, fuzzy
+msgid "Save Curve Statistics"
+msgstr "Salva Statistiche Grani"
+
#: modules/layer/axis.c:143
msgid "Layer allowing selection of horizontal or vertical lines."
msgstr "Permette la selezione di linee orizzontali o verticali"
@@ -7395,25 +7686,25 @@ msgstr "Distribuzione angolare"
msgid "Angle Distribution"
msgstr "Distribuzione Angolare"
-#: modules/process/angle_dist.c:188 modules/process/slope_dist.c:373
+#: modules/process/angle_dist.c:188 modules/process/slope_dist.c:365
msgid "Output _size:"
msgstr "Dimensione output:"
-#: modules/process/angle_dist.c:193 modules/process/grain_wshed.c:206
+#: modules/process/angle_dist.c:193 modules/process/grain_wshed.c:207
msgid "_Number of steps:"
msgstr "_Numero step:"
-#: modules/process/angle_dist.c:198 modules/process/slope_dist.c:380
+#: modules/process/angle_dist.c:198 modules/process/slope_dist.c:372
msgid "_Logarithmic value scale"
msgstr "_Scala di valore logaritmica"
#: modules/process/angle_dist.c:204 modules/process/entropy.c:231
-#: modules/process/slope_dist.c:390
+#: modules/process/slope_dist.c:382
msgid "Use local plane _fitting"
msgstr "Uso plane _fitting locale"
#: modules/process/angle_dist.c:213 modules/process/entropy.c:242
-#: modules/process/slope_dist.c:401
+#: modules/process/slope_dist.c:393
msgid "_Plane size:"
msgstr "Dimensioni piano:"
@@ -7429,7 +7720,8 @@ msgstr "/Dati _Multipli/_Aritmetica..."
msgid "Arithmetic operations on data"
msgstr "Operazioni aritmetiche sui dati"
-#: modules/process/arithmetic.c:202 modules/process/superresolution.c:349
+#: modules/process/arithmetic.c:202 modules/process/stitch.c:234
+#: modules/process/superresolution.c:348
msgid "Calculated"
msgstr "Calcolato"
@@ -7445,7 +7737,7 @@ msgstr "_Espressione:"
msgid "Operands"
msgstr "Operandi"
-#: modules/process/arithmetic.c:300 modules/process/dimensions.h:483
+#: modules/process/arithmetic.c:300 modules/process/dimensions.h:465
msgid "Units"
msgstr "Unità"
@@ -7466,15 +7758,15 @@ msgstr "Specificare esplicitamente unità risultato"
msgid "Expression contains unknown identifiers"
msgstr "L'espressione contiene identificatori sconosciuti"
-#: modules/process/arithmetic.c:569 modules/process/superresolution.c:300
+#: modules/process/arithmetic.c:569 modules/process/superresolution.c:299
msgid "Pixel dimensions differ"
msgstr "Le dimensioni in pixel differiscono"
-#: modules/process/arithmetic.c:571 modules/process/superresolution.c:302
+#: modules/process/arithmetic.c:571 modules/process/superresolution.c:301
msgid "Lateral dimensions are different physical quantities"
msgstr "Le dimensioni laterali sono quantità fisiche differenti"
-#: modules/process/arithmetic.c:574 modules/process/superresolution.c:305
+#: modules/process/arithmetic.c:574 modules/process/superresolution.c:304
msgid "Physical dimensions differ"
msgstr "Le dimensioni fisiche differiscono"
@@ -7580,7 +7872,8 @@ msgid "Generates surfaces by ballistic deposition."
msgstr "Generazione superfici per deposizione balistica"
#: modules/process/bdep_synth.c:164
-msgid "/S_ynthetic/_Ballistic..."
+#, fuzzy
+msgid "/S_ynthetic/_Deposition/_Ballistic..."
msgstr "/Sintetico/_Balistico..."
#: modules/process/bdep_synth.c:168
@@ -7589,20 +7882,23 @@ msgstr "Generazione superficie tramite deposizione balistica"
#: modules/process/bdep_synth.c:239 modules/process/bdep_synth.c:596
#: modules/process/calcoefs_simple.c:636 modules/process/col_synth.c:282
-#: modules/process/col_synth.c:733 modules/process/crosscor.c:819
-#: modules/process/crosscor.c:882 modules/process/deposit_synth.c:268
-#: modules/process/deposit_synth.c:859 modules/process/diff_synth.c:304
-#: modules/process/diff_synth.c:705 modules/process/domain_synth.c:255
-#: modules/process/domain_synth.c:745 modules/process/grain_wshed.c:429
+#: modules/process/col_synth.c:734 modules/process/crosscor.c:792
+#: modules/process/crosscor.c:855 modules/process/deposit_synth.c:268
+#: modules/process/deposit_synth.c:858 modules/process/diff_synth.c:304
+#: modules/process/diff_synth.c:704 modules/process/domain_synth.c:255
+#: modules/process/domain_synth.c:745 modules/process/fibre_synth.c:357
+#: modules/process/fibre_synth.c:872 modules/process/grain_wshed.c:433
#: modules/process/lat_synth.c:491 modules/process/mark_disconn.c:148
-#: modules/process/mark_disconn.c:373 modules/process/maskcor.c:330
-#: modules/process/mcrop.c:315 modules/process/merge.c:1072
-#: modules/process/nanoindent_adjust.c:323 modules/process/neural.c:1272
-#: modules/process/pid.c:338 modules/process/superresolution.c:416
-#: modules/process/superresolution.c:505 modules/process/tip_blind.c:781
-#: modules/process/tipops.c:320 modules/process/xydenoise.c:213
-#: modules/volume/volume_kmeans.c:403 modules/volume/volume_kmedians.c:365
-#: modules/xyz/xyz_raster.c:1028 modules/xyz/xyz_raster.c:1044
+#: modules/process/mark_disconn.c:361 modules/process/maskcor.c:334
+#: modules/process/mcrop.c:314 modules/process/merge.c:1072
+#: modules/process/nanoindent_adjust.c:324 modules/process/neural.c:1279
+#: modules/process/pid.c:339 modules/process/sphere-revolve.c:269
+#: modules/process/superresolution.c:415 modules/process/superresolution.c:504
+#: modules/process/tip_blind.c:778 modules/process/tipops.c:320
+#: modules/process/wave_synth.c:305 modules/process/wave_synth.c:747
+#: modules/process/xydenoise.c:214 modules/volume/volume_kmeans.c:397
+#: modules/volume/volume_kmedians.c:363 modules/xyz/xyz_raster.c:997
+#: modules/xyz/xyz_raster.c:1013
msgid "Initializing..."
msgstr "Inizializzazione...."
@@ -7611,10 +7907,11 @@ msgstr "Inizializzazione...."
#: modules/process/deposit_synth.c:531 modules/process/deposit_synth.c:544
#: modules/process/diff_synth.c:342 modules/process/domain_synth.c:319
#: modules/process/domain_synth.c:327 modules/process/fbm_synth.c:278
-#: modules/process/fft_synth.c:314 modules/process/lat_synth.c:529
-#: modules/process/lno_synth.c:407 modules/process/noise_synth.c:311
-#: modules/process/obj_synth.c:407 modules/process/pat_synth.c:357
-#: modules/process/wave_synth.c:323
+#: modules/process/fft_synth.c:314 modules/process/fibre_synth.c:394
+#: modules/process/lat_synth.c:529 modules/process/lno_synth.c:405
+#: modules/process/noise_synth.c:309 modules/process/obj_synth.c:404
+#: modules/process/pat_synth.c:357 modules/process/phase_synth.c:518
+#: modules/process/wave_synth.c:342
msgid "Generated"
msgstr "Generato"
@@ -7633,50 +7930,57 @@ msgid "Progressive preview"
msgstr "Anteprima progressiva"
#: modules/process/bdep_synth.c:407 modules/process/col_synth.c:458
-#: modules/process/deposit_synth.c:412 modules/process/diff_synth.c:477
+#: modules/process/deposit_synth.c:413 modules/process/diff_synth.c:477
#: modules/process/domain_synth.c:430 modules/process/fbm_synth.c:360
-#: modules/process/fft_synth.c:398 modules/process/lat_synth.c:626
-#: modules/process/lno_synth.c:490 modules/process/noise_synth.c:394
-#: modules/process/obj_synth.c:498 modules/process/pat_synth.c:442
-#: modules/process/wave_synth.c:407
+#: modules/process/fft_synth.c:398 modules/process/fibre_synth.c:479
+#: modules/process/lat_synth.c:626 modules/process/lno_synth.c:488
+#: modules/process/mfm_current.c:383 modules/process/mfm_parallel.c:384
+#: modules/process/noise_synth.c:392 modules/process/obj_synth.c:495
+#: modules/process/pat_synth.c:442 modules/process/phase_synth.c:263
+#: modules/process/wave_synth.c:426
msgid "Dimensions"
msgstr "Dimensioni"
#: modules/process/bdep_synth.c:416 modules/process/col_synth.c:467
-#: modules/process/deposit_synth.c:422 modules/process/diff_synth.c:486
+#: modules/process/deposit_synth.c:425 modules/process/diff_synth.c:486
#: modules/process/domain_synth.c:438 modules/process/fbm_synth.c:371
-#: modules/process/fft_synth.c:409 modules/process/lno_synth.c:501
-#: modules/process/noise_synth.c:405 modules/process/obj_synth.c:509
-#: modules/process/pat_synth.c:454 modules/process/wave_synth.c:418
+#: modules/process/fft_synth.c:409 modules/process/fibre_synth.c:490
+#: modules/process/lno_synth.c:499 modules/process/mfm_current.c:412
+#: modules/process/mfm_parallel.c:411 modules/process/noise_synth.c:403
+#: modules/process/obj_synth.c:506 modules/process/pat_synth.c:454
+#: modules/process/phase_synth.c:274 modules/process/wave_synth.c:437
msgid "Generator"
msgstr "Generatore"
#: modules/process/bdep_synth.c:422 modules/process/col_synth.c:473
-#: modules/process/diff_synth.c:492 modules/process/lno_synth.c:1041
-#: modules/process/obj_synth.c:520
+#: modules/process/deposit_synth.c:455 modules/process/diff_synth.c:492
+#: modules/process/fibre_synth.c:502 modules/process/lno_synth.c:1041
+#: modules/process/obj_synth.c:518
msgid "Co_verage:"
msgstr "Co_pertura:"
#: modules/process/bdep_synth.c:434 modules/process/diff_synth.c:512
-#: modules/process/domain_synth.c:514 modules/process/fbm_synth.c:412
-#: modules/process/fft_synth.c:418 modules/process/lat_synth.c:758
-#: modules/process/lno_synth.c:537 modules/process/noise_synth.c:437
-#: modules/process/obj_synth.c:579 modules/process/wave_synth.c:453
-msgid "_Like Current Channel"
-msgstr ""
+#: modules/process/domain_synth.c:514 modules/process/fbm_synth.c:411
+#: modules/process/fft_synth.c:418 modules/process/fibre_synth.c:544
+#: modules/process/lat_synth.c:758 modules/process/lno_synth.c:535
+#: modules/process/noise_synth.c:435 modules/process/obj_synth.c:577
+#: modules/process/phase_synth.c:302 modules/process/wave_synth.c:472
+#, fuzzy
+msgid "_Like Current Image"
+msgstr "Canale Corrente"
-#: modules/process/bdep_synth.c:453 modules/process/col_synth.c:541
-#: modules/process/diff_synth.c:562
+#: modules/process/bdep_synth.c:453 modules/process/col_synth.c:542
+#: modules/process/diff_synth.c:561
msgid "Evolution"
msgstr "Evoluzione"
-#: modules/process/bdep_synth.c:456 modules/process/col_synth.c:544
-#: modules/process/diff_synth.c:565
+#: modules/process/bdep_synth.c:456 modules/process/col_synth.c:545
+#: modules/process/diff_synth.c:564
msgid "Plot graphs:"
msgstr "Disegna grafici:"
-#: modules/process/bdep_synth.c:654 modules/process/col_synth.c:840
-#: modules/process/diff_synth.c:782
+#: modules/process/bdep_synth.c:654 modules/process/col_synth.c:841
+#: modules/process/diff_synth.c:781
msgid "Depositing particles..."
msgstr "Deposizione particelle..."
@@ -7711,8 +8015,8 @@ msgstr "Carica Dati Calibrazione"
msgid "Calibration name:"
msgstr "Nome Calibrazione:"
-#: modules/process/calcoefs_load.c:254 modules/volume/volume_extract.c:433
-#: modules/volume/volume_extract.c:514
+#: modules/process/calcoefs_load.c:254 modules/volume/volume_extract.c:421
+#: modules/volume/volume_extract.c:501
msgid "No data loaded"
msgstr "nessun dato caricato"
@@ -7736,7 +8040,7 @@ msgstr "Aggiungi"
msgid "Load calibration data"
msgstr "Carica dati calibrazione"
-#: modules/process/calcoefs_load.c:364 modules/volume/volume_extract.c:1073
+#: modules/process/calcoefs_load.c:364 modules/volume/volume_extract.c:1059
#, c-format
msgid "Error loading file '%s'"
msgstr "Errore nel caricare il file '%s'"
@@ -7830,7 +8134,7 @@ msgstr "Mappatura errore semplice"
msgid "Simple Error Map"
msgstr "Mappa Errore Semplice"
-#: modules/process/calcoefs_simple.c:343 modules/process/calcoefs_stage.c:146
+#: modules/process/calcoefs_simple.c:343 modules/process/calcoefs_stage.c:142
#: modules/process/superresolution.c:156
msgid "Operands:"
msgstr "Operandi:"
@@ -7844,14 +8148,14 @@ msgid "Detail"
msgstr "Dettaglio"
#: modules/process/calcoefs_simple.c:371 modules/process/calcoefs_view.c:491
-#: modules/process/calibrate.c:496 modules/process/crosscor.c:289
-#: modules/volume/volume_calibrate.c:478
+#: modules/process/calibrate.c:481 modules/process/crosscor.c:276
+#: modules/volume/volume_calibrate.c:460
msgid "_X offset:"
msgstr "_X offset:"
#: modules/process/calcoefs_simple.c:398 modules/process/calcoefs_view.c:517
-#: modules/process/calibrate.c:509 modules/process/crosscor.c:300
-#: modules/volume/volume_calibrate.c:491
+#: modules/process/calibrate.c:488 modules/process/crosscor.c:284
+#: modules/volume/volume_calibrate.c:467
msgid "_Y offset:"
msgstr "_Y offset:"
@@ -7864,7 +8168,7 @@ msgid "Y p_eriod:"
msgstr "p_eriodo Y:"
#: modules/process/calcoefs_simple.c:438 modules/process/calcoefs_view.c:529
-#: modules/volume/volume_calibrate.c:505
+#: modules/volume/volume_calibrate.c:474
msgid "_Z offset:"
msgstr "_Z offset:"
@@ -7895,25 +8199,25 @@ msgstr[1] "Trovati %d oggetti"
msgid "Search canceled"
msgstr "Ricerca cancellat"
-#: modules/process/calcoefs_simple.c:638 modules/process/crosscor.c:862
-#: modules/process/maskcor.c:332 modules/process/mcrop.c:317
+#: modules/process/calcoefs_simple.c:638 modules/process/crosscor.c:835
+#: modules/process/maskcor.c:336 modules/process/mcrop.c:316
#: modules/process/merge.c:1074
msgid "Correlating..."
msgstr "Correlazione..."
-#: modules/process/calcoefs_stage.c:76
+#: modules/process/calcoefs_stage.c:72
msgid "Digital AFM data recalibration"
msgstr "Ricalibrazione dati digitali AFM"
-#: modules/process/calcoefs_stage.c:90
+#: modules/process/calcoefs_stage.c:86
msgid "/Cali_bration/_3D Calibration/_Get From Stage map..."
msgstr "/Cali_brazione/Calibrazione _3D /_Get From Stage map..."
-#: modules/process/calcoefs_stage.c:94
+#: modules/process/calcoefs_stage.c:90
msgid "Stage error mapping"
msgstr ""
-#: modules/process/calcoefs_stage.c:131
+#: modules/process/calcoefs_stage.c:127
msgid "Stage Error Map"
msgstr ""
@@ -7969,14 +8273,16 @@ msgstr "Posizione Z:"
msgid "Crop to actual data"
msgstr "Taglia dati effettivi"
-#: modules/process/calcoefs_view.c:567 modules/process/coerce.c:369
-#: modules/process/deposit_synth.c:641 modules/process/edge.c:705
-#: modules/process/fft_filter_1d.c:299 modules/process/grain_edge.c:290
-#: modules/process/grain_filter.c:347 modules/process/grain_mark.c:372
-#: modules/process/mark_with.c:318 modules/process/polydistort.c:316
-#: modules/process/scars.c:386 modules/process/slope_dist.c:407
-#: modules/process/synth.h:513 modules/volume/volume_extract.c:424
-#: modules/volume/volume_extract.c:505 modules/volume/volume_linestat.c:422
+#: modules/process/calcoefs_view.c:567 modules/process/coerce.c:368
+#: modules/process/deposit_synth.c:642 modules/process/edge.c:705
+#: modules/process/fft_filter_1d.c:301 modules/process/grain_edge.c:277
+#: modules/process/grain_filter.c:346 modules/process/grain_mark.c:357
+#: modules/process/mark_with.c:322 modules/process/mfm_field.c:420
+#: modules/process/mfm_shift.c:216 modules/process/polydistort.c:319
+#: modules/process/psf.c:309 modules/process/scars.c:421
+#: modules/process/slope_dist.c:400 modules/process/synth.h:542
+#: modules/volume/volume_extract.c:411 modules/volume/volume_extract.c:491
+#: modules/volume/volume_linestat.c:427
msgid "I_nstant updates"
msgstr "_Aggiornamento immediato"
@@ -8017,27 +8323,27 @@ msgstr "Errore: fuori intervallo."
msgid "Building mesh..."
msgstr ""
-#: modules/process/calcoefs_view.c:1120 modules/tools/profile.c:1818
+#: modules/process/calcoefs_view.c:1120 modules/tools/profile.c:1867
msgid "X correction"
msgstr "correzione X:"
-#: modules/process/calcoefs_view.c:1121 modules/tools/profile.c:1819
+#: modules/process/calcoefs_view.c:1121 modules/tools/profile.c:1868
msgid "Y correction"
msgstr "correzione Y:"
-#: modules/process/calcoefs_view.c:1122 modules/tools/profile.c:1820
+#: modules/process/calcoefs_view.c:1122 modules/tools/profile.c:1869
msgid "Z correction"
msgstr "correzione Z:"
-#: modules/process/calcoefs_view.c:1123 modules/tools/profile.c:1821
+#: modules/process/calcoefs_view.c:1123 modules/tools/profile.c:1870
msgid "X uncertainty"
msgstr "Incertezza X"
-#: modules/process/calcoefs_view.c:1124 modules/tools/profile.c:1822
+#: modules/process/calcoefs_view.c:1124 modules/tools/profile.c:1871
msgid "Y uncertainty"
msgstr "Incertezza Y"
-#: modules/process/calcoefs_view.c:1125 modules/tools/profile.c:1823
+#: modules/process/calcoefs_view.c:1125 modules/tools/profile.c:1872
msgid "Z uncertainty"
msgstr "Incertezza Z"
@@ -8065,79 +8371,80 @@ msgstr ""
msgid "Delaunay"
msgstr "Delaunay"
-#: modules/process/calibrate.c:180
+#: modules/process/calibrate.c:172
msgid "Recalibrates scan lateral dimensions or value range."
msgstr ""
"Ricalibra le dimensioni o l'intervallo di valori delle scansioni laterali."
-#: modules/process/calibrate.c:194
+#: modules/process/calibrate.c:186
msgid "/_Basic Operations/_Dimensions and Units..."
msgstr "/Operazioni _Base/_Dimensioni e Unità.."
-#: modules/process/calibrate.c:198 modules/volume/volume_calibrate.c:193
+#: modules/process/calibrate.c:190 modules/volume/volume_calibrate.c:193
msgid "Change physical dimensions, units or value scale"
msgstr "Cambia dimensioni fisiche, unità o scala valore"
-#: modules/process/calibrate.c:357 modules/volume/volume_calibrate.c:355
+#: modules/process/calibrate.c:349 modules/volume/volume_calibrate.c:355
msgid "Recalibrated Data"
msgstr "Dati Ricalibrati"
-#: modules/process/calibrate.c:390
+#: modules/process/calibrate.c:382
msgid "Dimensions and Units"
msgstr "Dimensioni e Unità"
-#: modules/process/calibrate.c:411 modules/volume/volume_calibrate.c:389
+#: modules/process/calibrate.c:405 modules/volume/volume_calibrate.c:391
msgid "New Real Dimensions"
msgstr "Nuove Dimensioni Reali"
-#: modules/process/calibrate.c:417
+#: modules/process/calibrate.c:415
msgid "_Match pixel size:"
msgstr "Accoppia dimensione pixel:"
-#: modules/process/calibrate.c:444 modules/volume/volume_calibrate.c:394
+#: modules/process/calibrate.c:447 modules/volume/volume_calibrate.c:397
msgid "_X range:"
msgstr "Intervallo _X:"
-#: modules/process/calibrate.c:473 modules/volume/volume_calibrate.c:421
+#: modules/process/calibrate.c:467 modules/volume/volume_calibrate.c:417
msgid "_Y range:"
msgstr "Intervallo _Y:"
-#: modules/process/calibrate.c:489
+#: modules/process/calibrate.c:472
msgid "_Square samples"
msgstr "Campioni quadrati"
-#: modules/process/calibrate.c:524 modules/volume/volume_calibrate.c:521
+#: modules/process/calibrate.c:496 modules/volume/volume_calibrate.c:480
msgid "Value Range"
msgstr "Intervallo Valore"
-#: modules/process/calibrate.c:529 modules/volume/volume_calibrate.c:448
+#: modules/process/calibrate.c:502 modules/volume/volume_calibrate.c:437
msgid "_Z range:"
msgstr "Intervallo _Z:"
-#: modules/process/calibrate.c:558
+#: modules/process/calibrate.c:524
msgid "Z shi_ft:"
msgstr "Z shi_ft:"
-#: modules/process/calibrate.c:573 modules/volume/volume_calibrate.c:570
+#: modules/process/calibrate.c:533 modules/volume/volume_calibrate.c:515
msgid "Calibration Coefficients"
msgstr "Coefficienti di Calibrazione"
-#: modules/process/calibrate.c:580 modules/volume/volume_calibrate.c:577
+#: modules/process/calibrate.c:538 modules/volume/volume_calibrate.c:520
msgid "_X calibration factor:"
msgstr "Fattore di calibrazione _X:"
-#: modules/process/calibrate.c:590 modules/volume/volume_calibrate.c:585
+#: modules/process/calibrate.c:545 modules/volume/volume_calibrate.c:527
msgid "_Y calibration factor:"
msgstr "Fattore di calibrazione _Y:"
-#: modules/process/calibrate.c:600 modules/volume/volume_calibrate.c:593
+#: modules/process/calibrate.c:552 modules/volume/volume_calibrate.c:534
msgid "_Z calibration factor:"
msgstr "Fattore di calibrazione _Z:"
-#: modules/process/calibrate.c:613 modules/process/extend.c:293
-#: modules/tools/crop.c:213
-msgid "Create new channel"
-msgstr "Crea nuovo canale"
+#: modules/process/calibrate.c:567 modules/process/drift.c:389
+#: modules/process/extend.c:293 modules/tools/crop.c:213
+#, fuzzy
+msgid "Create new image"
+msgstr "Crea nuovo oggetto"
#: modules/process/coerce.c:159
msgid "Transforms surfaces to have prescribed statistical properties."
@@ -8156,13 +8463,13 @@ msgid "Coerced"
msgstr "Forzata"
#: modules/process/coerce.c:225 modules/process/coerce.c:326
-#: modules/process/fbm_synth.c:475 modules/process/lno_synth.c:256
-#: modules/process/noise_synth.c:183
+#: modules/process/fbm_synth.c:474 modules/process/lno_synth.c:254
+#: modules/process/noise_synth.c:181
msgid "distribution|Uniform"
msgstr "distribuzione|Uniforme"
-#: modules/process/coerce.c:226 modules/process/fbm_synth.c:476
-#: modules/process/lno_synth.c:246 modules/process/noise_synth.c:173
+#: modules/process/coerce.c:226 modules/process/fbm_synth.c:475
+#: modules/process/lno_synth.c:244 modules/process/noise_synth.c:171
msgid "distribution|Gaussian"
msgstr "distribuzione|Gaussiana"
@@ -8211,12 +8518,12 @@ msgid "Number of maxima"
msgstr "Numero massimi"
#: modules/process/col_synth.c:173 modules/tools/linestats.c:178
-#: modules/volume/volume_linestat.c:154
+#: modules/volume/volume_linestat.c:156
msgid "Skew"
msgstr "Skew"
#: modules/process/col_synth.c:174 modules/tools/linestats.c:179
-#: modules/tools/roughness.c:386 modules/volume/volume_linestat.c:155
+#: modules/tools/roughness.c:387 modules/volume/volume_linestat.c:157
msgid "Kurtosis"
msgstr "curtosi"
@@ -8230,7 +8537,8 @@ msgid "Generates columnar surfaces by a simple growth algorithm."
msgstr "Genera superfici colonnari con un semplice algoritmo di crescita."
#: modules/process/col_synth.c:208
-msgid "/S_ynthetic/_Columnar..."
+#, fuzzy
+msgid "/S_ynthetic/_Deposition/_Columnar..."
msgstr "/Sintetico/_Colonnare..."
#: modules/process/col_synth.c:212
@@ -8253,7 +8561,7 @@ msgstr "Incidenza"
msgid "Inclination"
msgstr "Inclinazione"
-#: modules/process/col_synth.c:509 modules/process/crosscor.c:1063
+#: modules/process/col_synth.c:509 modules/process/crosscor.c:1036
msgid "Direction"
msgstr "Direzione"
@@ -8261,15 +8569,15 @@ msgstr "Direzione"
msgid "Relaxation type:"
msgstr "Tipo di rilassamento:"
-#: modules/process/col_synth.c:528
+#: modules/process/col_synth.c:529
msgid "_Melting:"
msgstr "Fusione:"
-#: modules/process/col_synth.c:612
+#: modules/process/col_synth.c:613
msgid "Weak"
msgstr "Debole"
-#: modules/process/col_synth.c:613
+#: modules/process/col_synth.c:614
msgid "Strong"
msgstr "Forte"
@@ -8301,8 +8609,8 @@ msgstr "Filtro di convoluzione generale"
msgid "Convolution Filter"
msgstr "Filtro di Convoluzione"
-#: modules/process/convolution_filter.c:269 modules/tools/filter.c:170
-#: modules/tools/filter.c:274
+#: modules/process/convolution_filter.c:269 modules/tools/filter.c:171
+#: modules/tools/filter.c:275
msgid "Filter"
msgstr "Filtro"
@@ -8330,7 +8638,7 @@ msgstr "HSym"
msgid "VSym"
msgstr "VSym"
-#: modules/process/correct_affine.c:231
+#: modules/process/correct_affine.c:220
msgid ""
"Corrects affine distortion of images by matching image Bravais lattice to "
"the true one."
@@ -8338,101 +8646,110 @@ msgstr ""
"Correzione distorsione affine di immagini per accoppiamento immagine "
"reticolo di Bravais con quello reale"
-#: modules/process/correct_affine.c:246
+#: modules/process/correct_affine.c:235
msgid "/_Distortion/_Affine..."
msgstr "/_Distorsione/_Affinaa..."
-#: modules/process/correct_affine.c:250
+#: modules/process/correct_affine.c:239
msgid "Correct affine distortion"
msgstr "Correzione distorsione affine"
-#: modules/process/correct_affine.c:298
+#: modules/process/correct_affine.c:309 modules/process/correct_affine.c:634
+msgid "Corrected"
+msgstr "Corretto"
+
+#: modules/process/correct_affine.c:343
msgid "Affine Correction"
msgstr "Correzione affine"
-#: modules/process/correct_affine.c:351 modules/process/fft_filter_2d.c:530
+#: modules/process/correct_affine.c:349 modules/process/measure_lattice.c:249
+msgid "_Refine"
+msgstr "_Raffina"
+
+#: modules/process/correct_affine.c:399 modules/process/fft_filter_2d.c:530
msgid "Preview Options"
msgstr "Anteprima Opzioni"
-#: modules/process/correct_affine.c:356 modules/process/fft_filter_2d.c:535
-#: modules/process/measure_lattice.c:321
+#: modules/process/correct_affine.c:404 modules/process/fft_filter_2d.c:535
+#: modules/process/measure_lattice.c:311
msgid "Display:"
msgstr "Mostra:"
-#: modules/process/correct_affine.c:364 modules/process/measure_lattice.c:329
+#: modules/process/correct_affine.c:412 modules/process/measure_lattice.c:319
#: modules/tools/grainremover.c:109
msgid "_Data"
msgstr "_Dati"
-#: modules/process/correct_affine.c:365
+#: modules/process/correct_affine.c:413
msgid "2D _ACF"
msgstr "2D _ACF"
-#: modules/process/correct_affine.c:366 modules/process/drift.c:365
+#: modules/process/correct_affine.c:414 modules/process/drift.c:364
msgid "Correc_ted data"
msgstr "Dati Corretti"
-#: modules/process/correct_affine.c:377
+#: modules/process/correct_affine.c:425
msgid "ACF zoom:"
msgstr "ACF zoom:"
-#: modules/process/correct_affine.c:394 modules/process/measure_lattice.c:372
+#: modules/process/correct_affine.c:442 modules/process/measure_lattice.c:346
+#, fuzzy
+msgid "Interpolate _horizontal ACF"
+msgstr "Interpolazione"
+
+#: modules/process/correct_affine.c:452 modules/process/measure_lattice.c:372
msgid "Lattice Vectors"
msgstr "Vettori del reticolo"
#. TRANSLATORS: Correct is an adjective here.
-#: modules/process/correct_affine.c:419
+#: modules/process/correct_affine.c:469
msgid "Correct Lattice"
msgstr "Reticolo corretto"
-#: modules/process/correct_affine.c:423
+#: modules/process/correct_affine.c:473
msgid "_Lattice type:"
msgstr "Tipo _reticolo:"
-#: modules/process/correct_affine.c:430
+#: modules/process/correct_affine.c:480
msgid "User defined"
msgstr "Definito dall'utente"
-#: modules/process/correct_affine.c:445
+#: modules/process/correct_affine.c:495
msgid "_Different lengths"
msgstr "_Differenti lunghezze"
-#: modules/process/correct_affine.c:474
+#: modules/process/correct_affine.c:524
msgid "Image for _ACF:"
msgstr "Immagine per _ACF:"
-#: modules/process/correct_affine.c:501
+#: modules/process/correct_affine.c:551
msgid "_Scaling:"
msgstr "Ridimensionamento:"
-#: modules/process/correct_affine.c:508
+#: modules/process/correct_affine.c:558
msgid "Exactly as specified"
msgstr "Esattamente come specificato"
-#: modules/process/correct_affine.c:509
+#: modules/process/correct_affine.c:560
msgid "Preserve area"
msgstr "Mantiene area"
-#: modules/process/correct_affine.c:510
+#: modules/process/correct_affine.c:562
msgid "Preserve X scale"
msgstr "Mantieni scala X"
-#: modules/process/correct_affine.c:561
-msgid "Corrected"
-msgstr "Corretto"
+#: modules/process/correct_affine.c:571 modules/process/drift.c:379
+msgid "_Apply to all compatible images"
+msgstr ""
-#: modules/process/correct_affine.c:617 modules/process/measure_lattice.c:489
+#: modules/process/correct_affine.c:693 modules/process/measure_lattice.c:482
msgid "length"
msgstr "lunghezza"
-#: modules/process/correct_affine.c:624 modules/process/measure_lattice.c:496
+#: modules/process/correct_affine.c:700 modules/process/measure_lattice.c:489
msgid "angle"
msgstr "angolo"
-#: modules/process/correct_affine.c:717
-msgid "Re_fine"
-msgstr "Raf_fina"
-
#: modules/process/crosscor.c:157
msgid "Calculates cross-correlation of two data fields."
msgstr "Calcola correlazione incrociata di due campi dati."
@@ -8457,150 +8774,153 @@ msgstr "Co_rrela con:"
msgid "Search size"
msgstr "Ricerca Dimensioni"
-#: modules/process/crosscor.c:272
-msgid "Global offset of 2nd channel"
-msgstr "Offset globale del 2° canale"
-
-#: modules/process/crosscor.c:277
+#: modules/process/crosscor.c:267
msgid "_Guess"
msgstr ""
-#: modules/process/crosscor.c:311
+#: modules/process/crosscor.c:268
+msgid "Global offset of 2nd channel"
+msgstr "Offset globale del 2° canale"
+
+#: modules/process/crosscor.c:292
msgid "Window size"
msgstr "Dimensioni finestra"
-#: modules/process/crosscor.c:319
+#: modules/process/crosscor.c:300
msgid "W_idth:"
msgstr "Larghezza:"
-#: modules/process/crosscor.c:329
+#: modules/process/crosscor.c:308
msgid "Hei_ght:"
msgstr "Altezza:"
-#: modules/process/crosscor.c:342 modules/process/fft.c:405
+#: modules/process/crosscor.c:319 modules/process/fft.c:403
#: modules/process/psdf_logphi.c:268
msgid "_Windowing type:"
msgstr "Tipo finestra:"
-#: modules/process/crosscor.c:350
+#: modules/process/crosscor.c:327
msgid "All"
msgstr "Tutto"
-#: modules/process/crosscor.c:351
+#: modules/process/crosscor.c:328
msgid "Absolute"
msgstr "Assoluto"
-#: modules/process/crosscor.c:352
+#: modules/process/crosscor.c:329
msgid "X Distance"
msgstr "Distanza X"
-#: modules/process/crosscor.c:353
+#: modules/process/crosscor.c:330
msgid "Y Distance"
msgstr "Distanza Y"
-#: modules/process/crosscor.c:355 modules/process/crosscor.c:1077
+#: modules/process/crosscor.c:332 modules/process/crosscor.c:1050
msgid "Score"
msgstr "Punteggio"
-#: modules/process/crosscor.c:357 modules/process/fft.c:395
-#: modules/process/fit-shape.c:688 modules/process/maskcor.c:176
+#: modules/process/crosscor.c:334 modules/process/fft.c:393
+#: modules/process/fit-shape.c:699 modules/process/maskcor.c:177
+#: modules/process/mfm_current.c:455 modules/process/mfm_field.c:373
+#: modules/process/mfm_parallel.c:466
msgid "Output _type:"
msgstr "Tipo Output:"
-#: modules/process/crosscor.c:363
+#: modules/process/crosscor.c:340
msgid "Add _low score results mask"
msgstr "Aggiungi maschera risultati a bassa incidenza"
-#: modules/process/crosscor.c:374 modules/process/grain_wshed.c:223
-#: modules/process/maskcor.c:188
+#: modules/process/crosscor.c:351 modules/process/grain_wshed.c:225
+#: modules/process/maskcor.c:191
msgid "T_hreshold:"
msgstr "Soglia:"
-#: modules/process/crosscor.c:381
+#: modules/process/crosscor.c:359
msgid "Multichannel cross-corelation"
msgstr "Correlazione Incrociata multicanale"
-#: modules/process/crosscor.c:400
+#: modules/process/crosscor.c:378
msgid "Second _source data:"
msgstr "Dati seconda sorgente"
-#: modules/process/crosscor.c:417
+#: modules/process/crosscor.c:394
msgid "Correlate with:"
msgstr "Correla con:"
-#: modules/process/crosscor.c:424
+#: modules/process/crosscor.c:402
msgid "Postprocess:"
msgstr "Post Elaborazione"
-#: modules/process/crosscor.c:431
-msgid "Apply Ga_ussian filter of width: "
+#: modules/process/crosscor.c:411
+#, fuzzy
+msgid "Apply Ga_ussian filter of width:"
msgstr "Applicazione filtro larghezza Ga_ussiano:"
-#: modules/process/crosscor.c:451
+#: modules/process/crosscor.c:424
msgid "Extend results to borders"
msgstr "Estensione risultati ai margini"
-#: modules/process/crosscor.c:461
+#: modules/process/crosscor.c:433
msgid "Create corrected data from 2nd channel"
msgstr "Creazione dati corretti dal 2° canale"
-#: modules/process/crosscor.c:860
+#: modules/process/crosscor.c:833
msgid "Correlating first set..."
msgstr "Correlazione prima serie....."
-#: modules/process/crosscor.c:892
+#: modules/process/crosscor.c:865
msgid "Correlating second set..."
msgstr "Correlazione seconda serie....."
-#: modules/process/crosscor.c:999
+#: modules/process/crosscor.c:972
msgid "Corrected 2nd channel"
msgstr "2° canale corretto"
-#: modules/process/crosscor.c:1023
+#: modules/process/crosscor.c:996
msgid "X difference"
msgstr "Differenza X"
-#: modules/process/crosscor.c:1037
+#: modules/process/crosscor.c:1010
msgid "Y difference"
msgstr "Differenza Y"
-#: modules/process/crosscor.c:1050
+#: modules/process/crosscor.c:1023
msgid "Absolute difference"
msgstr "Differenza assoluta"
-#: modules/process/curvature.c:131
+#: modules/process/curvature.c:130
msgid "Center value"
msgstr "Calore centro"
-#: modules/process/curvature.c:132
+#: modules/process/curvature.c:131
msgid "Curvature radius 1"
msgstr "Raggio curvatura 1"
-#: modules/process/curvature.c:133
+#: modules/process/curvature.c:132
msgid "Curvature radius 2"
msgstr "Raggio curvatura 2"
-#: modules/process/curvature.c:134
+#: modules/process/curvature.c:133
msgid "Direction 1"
msgstr "Direzione 1"
-#: modules/process/curvature.c:135
+#: modules/process/curvature.c:134
msgid "Direction 2"
msgstr "Direzione 2"
-#: modules/process/curvature.c:163
+#: modules/process/curvature.c:162
msgid "Calculates overall curvature."
msgstr "Calcola curvatura globale"
-#: modules/process/curvature.c:177
+#: modules/process/curvature.c:176
msgid "/_Level/_Curvature..."
msgstr "/_Livella/_Curvatura"
-#: modules/process/curvature.c:181
+#: modules/process/curvature.c:180
msgid "Calculate overall curvature"
msgstr "Calcolo curvatura globale"
-#: modules/process/curvature.c:211 modules/process/facet-level.c:118
+#: modules/process/curvature.c:210 modules/process/facet-level.c:118
#: modules/process/semsim.c:165
#, c-format
msgid "%s: Lateral dimensions and value must be the same physical quantity."
@@ -8608,47 +8928,47 @@ msgstr ""
"%s: Le dimensioni laterali ed il valore devono rappresentare la stessa "
"quantità fisica"
-#: modules/process/curvature.c:445
+#: modules/process/curvature.c:447
msgid "Curvature Sections"
msgstr "Sezioni Curvatura"
-#: modules/process/curvature.c:653
+#: modules/process/curvature.c:655
msgid "Output Type"
msgstr "Tipo Output"
-#: modules/process/curvature.c:660
+#: modules/process/curvature.c:662
msgid "_Set selection"
msgstr "Regola selezione"
-#: modules/process/curvature.c:670
+#: modules/process/curvature.c:672
msgid "_Plot graph"
msgstr "_Traccia grafico"
-#: modules/process/curvature.c:685 modules/process/drift.c:337
-#: modules/process/fft_profile.c:310 modules/process/fractal.c:328
-#: modules/process/grain_cross.c:253 modules/process/linematch.c:885
-#: modules/process/slope_dist.c:349 modules/tools/linestats.c:418
-#: modules/tools/profile.c:573 modules/tools/roughness.c:872
-#: modules/tools/sfunctions.c:486 modules/tools/spectro.c:382
-#: modules/volume/volume_slice.c:398
-msgid "Target _graph:"
-msgstr ""
-
-#: modules/process/curvature.c:691 modules/process/drift.c:343
-#: modules/process/fft_profile.c:316 modules/process/fractal.c:334
-#: modules/process/grain_cross.c:259 modules/process/linematch.c:892
-#: modules/process/slope_dist.c:355 modules/tools/linestats.c:424
-#: modules/tools/profile.c:579 modules/tools/roughness.c:878
-#: modules/tools/sfunctions.c:492 modules/tools/spectro.c:388
-#: modules/volume/volume_slice.c:406
+#: modules/process/curvature.c:684 modules/process/drift.c:340
+#: modules/process/fft_profile.c:300 modules/process/fractal.c:308
+#: modules/process/grain_cross.c:260 modules/process/linematch.c:855
+#: modules/process/slope_dist.c:347 modules/tools/linestats.c:424
+#: modules/tools/profile.c:559 modules/tools/roughness.c:886
+#: modules/tools/sfunctions.c:488 modules/tools/spectro.c:391
+#: modules/volume/volume_slice.c:408
msgid "New graph"
msgstr "Nuovo grafico"
-#: modules/process/curvature.c:951
+#: modules/process/curvature.c:689 modules/process/drift.c:345
+#: modules/process/fft_profile.c:306 modules/process/fractal.c:313
+#: modules/process/grain_cross.c:254 modules/process/linematch.c:860
+#: modules/process/slope_dist.c:352 modules/tools/linestats.c:418
+#: modules/tools/profile.c:563 modules/tools/roughness.c:890
+#: modules/tools/sfunctions.c:492 modules/tools/spectro.c:385
+#: modules/volume/volume_slice.c:400
+msgid "Target _graph:"
+msgstr ""
+
+#: modules/process/curvature.c:949
msgid "Axes are outside the image."
msgstr "Assi all'esterno dell'immagine"
-#: modules/process/curvature.c:1018
+#: modules/process/curvature.c:1016
msgid "Save Curvature"
msgstr "Salva Curvatura"
@@ -8672,8 +8992,8 @@ msgstr "CWT"
msgid "2D CWT"
msgstr "2D CWT"
-#: modules/process/cwt.c:158 modules/process/dwt.c:185
-#: modules/process/dwtanisotropy.c:209
+#: modules/process/cwt.c:159 modules/process/dwt.c:185
+#: modules/process/dwtanisotropy.c:212
msgid "_Wavelet type:"
msgstr "Tipo _Wavelet:"
@@ -8682,14 +9002,15 @@ msgid "Generates particles using simple dynamical model"
msgstr "Genera particelle usando un semplice modello dinamico"
#: modules/process/deposit_synth.c:184
-msgid "/S_ynthetic/_Particles..."
+#, fuzzy
+msgid "/S_ynthetic/_Deposition/_Particles..."
msgstr "/Sintetico/_Particelle..."
#: modules/process/deposit_synth.c:188
msgid "Generate particles using dynamical model"
msgstr "Generazione particelle usando modello dinamico"
-#: modules/process/deposit_synth.c:288 modules/process/deposit_synth.c:867
+#: modules/process/deposit_synth.c:288 modules/process/deposit_synth.c:866
#, c-format
msgid ""
"Not all the particles could be deposited (%u),\n"
@@ -8698,73 +9019,69 @@ msgstr ""
"Non è stato possibile depositare tutte le particelle (%u),\n"
"prova più stadi"
-#: modules/process/deposit_synth.c:347
+#: modules/process/deposit_synth.c:348
msgid "Particle Generation"
msgstr "Generazione Particelle"
-#: modules/process/deposit_synth.c:427
+#: modules/process/deposit_synth.c:431
msgid "Particle r_adius:"
msgstr "Raggio particella:"
-#: modules/process/deposit_synth.c:438
+#: modules/process/deposit_synth.c:443
msgid "Distribution _width:"
msgstr "Larghezza Distribuzione:"
-#: modules/process/deposit_synth.c:449
-msgid "Surface _coverage:"
-msgstr "Superficie _copertura:"
-
-#: modules/process/deposit_synth.c:458
+#: modules/process/deposit_synth.c:462
msgid "_Relax steps:"
msgstr ""
-#: modules/process/deposit_synth.c:659 modules/process/synth.h:548
+#: modules/process/deposit_synth.c:660 modules/process/synth.h:577
msgid "R_andom seed:"
msgstr "Seme casuale:"
-#: modules/process/deposit_synth.c:665 modules/process/synth.h:554
+#: modules/process/deposit_synth.c:666 modules/process/synth.h:583
msgid "seed|_New"
msgstr "Seme|_Nuovo"
-#: modules/process/deposit_synth.c:676
+#: modules/process/deposit_synth.c:677
msgid "Randomize"
msgstr "Randomizza"
-#: modules/process/deposit_synth.c:860 modules/process/domain_synth.c:919
+#: modules/process/deposit_synth.c:859 modules/process/domain_synth.c:919
msgid "Running computation..."
msgstr "computo..."
-#: modules/process/deposit_synth.c:865
+#: modules/process/deposit_synth.c:864
#, c-format
msgid "%d particles were deposited"
msgstr "%d particelle depositate"
-#: modules/process/deposit_synth.c:1093
+#: modules/process/deposit_synth.c:1092
msgid "Initial particle set..."
msgstr ""
-#: modules/process/deposit_synth.c:1252
+#: modules/process/deposit_synth.c:1251
msgid "Running revise..."
msgstr ""
-#: modules/process/deposit_synth.c:1380
+#: modules/process/deposit_synth.c:1379
msgid "Error: too many particles."
msgstr "Errore: troppe particelle."
-#: modules/process/deposit_synth.c:1382
+#: modules/process/deposit_synth.c:1381
msgid "Error: no particles."
msgstr "Errore: nessuna particella"
-#: modules/process/deposit_synth.c:1384
+#: modules/process/deposit_synth.c:1383
msgid "Error: particles too large."
msgstr "Errore: particelle troppo grandi."
-#: modules/process/deposit_synth.c:1386
+#: modules/process/deposit_synth.c:1385
msgid "Error: particles too small."
msgstr "Errore: particelle troppo piccole."
#: modules/process/diff_synth.c:197 modules/tools/linestats.c:173
-#: modules/volume/volume_linestat.c:149
+#: modules/volume/volume_linestat.c:151
msgid "Variation"
msgstr "Variazione"
@@ -8777,7 +9094,8 @@ msgid "Generates surfaces by diffusion limited aggregation."
msgstr "Generazione superfici mediante aggregazione limitata dalla diffusione"
#: modules/process/diff_synth.c:228
-msgid "/S_ynthetic/_Diffusion..."
+#, fuzzy
+msgid "/S_ynthetic/_Deposition/_Diffusion..."
msgstr "/Sintetico/_Diffusione..."
#: modules/process/diff_synth.c:232
@@ -8792,44 +9110,48 @@ msgstr "Aggregazione Limitata dalla Diffusione"
msgid "_Flux:"
msgstr "_Flusso:"
-#: modules/process/diff_synth.c:522
+#: modules/process/diff_synth.c:521
msgid "Probabilities"
msgstr "Probabilità"
-#: modules/process/diff_synth.c:530
+#: modules/process/diff_synth.c:529
msgid "_Sticking:"
msgstr "Adesione:"
-#: modules/process/diff_synth.c:539
+#: modules/process/diff_synth.c:538
msgid "_Activation:"
msgstr "_Attivazione:"
-#: modules/process/diff_synth.c:548
+#: modules/process/diff_synth.c:547
msgid "Passing Sch_woebel:"
msgstr ""
-#: modules/process/dimensions.h:457
+#: modules/process/dimensions.h:439
msgid "S_quare image"
msgstr "Immagine _quadrata"
-#: modules/process/dimensions.h:489
+#: modules/process/dimensions.h:473
msgid "_Dimension units:"
msgstr "Unità _dimensioni:"
-#: modules/process/dimensions.h:502
-msgid "Current Channel"
+#: modules/process/dimensions.h:488
+#, fuzzy
+msgid "Current Image"
msgstr "Canale Corrente"
-#: modules/process/dimensions.h:506
-msgid "_Take Dimensions from Current Channel"
+#: modules/process/dimensions.h:492
+#, fuzzy
+msgid "_Take Dimensions from Current Image"
msgstr "Prendi dimensioni da Canale Corrente"
-#: modules/process/dimensions.h:514
-msgid "_Replace the current channel"
+#: modules/process/dimensions.h:501
+#, fuzzy
+msgid "_Replace the current image"
msgstr "Sostituisci il canale corrente"
-#: modules/process/dimensions.h:523
-msgid "_Start from the current channel"
+#: modules/process/dimensions.h:510
+#, fuzzy
+msgid "_Start from the current image"
msgstr "Inizia dal canale corrente"
#: modules/process/domain_synth.c:158
@@ -8889,13 +9211,13 @@ msgid "_Monte Carlo time step:"
msgstr ""
#: modules/process/domain_synth.c:504 modules/process/fft_filter_2d.c:586
-#: modules/volume/volume_slice.c:364
+#: modules/volume/volume_slice.c:366
msgid "Output Options"
msgstr "Opzioni Output"
#: modules/process/domain_synth.c:523 modules/process/fft_filter_2d.c:591
-#: modules/process/mask_edt.c:377 modules/process/slope_dist.c:323
-#: modules/volume/volume_linestat.c:432 modules/volume/volume_slice.c:384
+#: modules/process/mask_edt.c:211 modules/process/slope_dist.c:323
+#: modules/volume/volume_linestat.c:437 modules/volume/volume_slice.c:386
msgid "Output type:"
msgstr "Tipo Output: "
@@ -8923,57 +9245,49 @@ msgstr "Intervallo Ricerca:"
msgid "rows"
msgstr "righe"
-#: modules/process/drift.c:304
+#: modules/process/drift.c:305
msgid "Correct _data"
msgstr "Correzione Dati"
-#: modules/process/drift.c:314
+#: modules/process/drift.c:315
msgid "_Exclude linear skew"
msgstr "Escludi skew lineari"
-#: modules/process/drift.c:324
+#: modules/process/drift.c:325
msgid "Plot drift _graph"
msgstr "Grafico rappresentazione deriva"
-#: modules/process/drift.c:356 modules/process/fit-shape.c:693
-#: modules/process/neural.c:548 modules/process/polydistort.c:275
+#: modules/process/drift.c:355 modules/process/fit-shape.c:705
+#: modules/process/neural.c:552 modules/process/polydistort.c:278
msgid "Preview:"
msgstr "Anteprima"
-#: modules/process/drift.c:366
+#: modules/process/drift.c:365
msgid "Drift _lines"
msgstr "Linee deriva"
-#: modules/process/drift.c:374 modules/process/facet_analysis.c:407
-#: modules/process/grain_edge.c:285 modules/process/grain_filter.c:357
-#: modules/process/grain_mark.c:367 modules/process/grain_wshed.c:267
-#: modules/process/mark_disconn.c:310 modules/process/scars.c:381
+#: modules/process/drift.c:373 modules/process/facet_analysis.c:390
+#: modules/process/grain_edge.c:272 modules/process/grain_filter.c:356
+#: modules/process/grain_mark.c:341 modules/process/grain_wshed.c:271
+#: modules/process/mark_disconn.c:298 modules/process/scars.c:405
#: modules/process/wpour_mark.c:369
msgid "_Mask color:"
msgstr "Colore _Maschera:"
-#: modules/process/drift.c:379
-msgid "Distribute"
-msgstr "Distribuisci"
-
-#: modules/process/drift.c:388
-msgid "Replace"
-msgstr "Sostituire"
-
-#: modules/process/drift.c:569
+#: modules/process/drift.c:570
msgid "Drift-corrected"
msgstr "Corretti per la deriva"
-#: modules/process/drift.c:613
+#: modules/process/drift.c:614
msgid "Drift"
msgstr "Deriva"
-#: modules/process/drift.c:614 modules/xyz/xyz_drift.c:392
+#: modules/process/drift.c:615 modules/xyz/xyz_drift.c:392
#: modules/xyz/xyz_drift.c:411 modules/xyz/xyz_drift.c:430
msgid "drift"
msgstr "Deriva"
-#: modules/process/drift.c:620 modules/xyz/xyz_drift.c:402
+#: modules/process/drift.c:621 modules/xyz/xyz_drift.c:402
msgid "x-axis drift"
msgstr "Deriva sull'asse X"
@@ -9032,11 +9346,11 @@ msgstr "DWT Anisotropa"
msgid "2D DWT Anisotropy"
msgstr "2D DWT Anisotropa"
-#: modules/process/dwtanisotropy.c:214
+#: modules/process/dwtanisotropy.c:218
msgid "X/Y ratio threshold:"
msgstr "X/Y rapporto soglia:"
-#: modules/process/dwtanisotropy.c:222
+#: modules/process/dwtanisotropy.c:226
msgid "Low level exclude limit:"
msgstr "Limite di esclusione inferiore:"
@@ -9165,7 +9479,7 @@ msgstr "Determinazione Step Zero Crossing"
msgid "_Gaussian FWHM:"
msgstr "Gaussian FWHM:"
-#: modules/process/edge.c:681 modules/process/mark_disconn.c:271
+#: modules/process/edge.c:681 modules/process/mark_disconn.c:272
msgid "_Threshold:"
msgstr "Soglia"
@@ -9230,11 +9544,11 @@ msgstr "Entropia:"
msgid "Entropy deficit:"
msgstr ""
-#: modules/process/entropy.c:567
+#: modules/process/entropy.c:568
msgid "Entropy at scales"
msgstr ""
-#: modules/process/entropy.c:586
+#: modules/process/entropy.c:587
msgid "Best estimate"
msgstr "Miglior stima"
@@ -9282,23 +9596,23 @@ msgstr "Destra:"
msgid "Extend _symetrically"
msgstr "Estendi in modo simmetrico"
-#: modules/process/extend.c:268 modules/process/polydistort.c:256
-#: modules/xyz/xyz_raster.c:658
+#: modules/process/extend.c:268 modules/process/polydistort.c:259
+#: modules/xyz/xyz_raster.c:627
msgid "exterior|Border"
msgstr "esterno|Margine"
-#: modules/process/extend.c:270 modules/process/polydistort.c:258
-#: modules/xyz/xyz_raster.c:660
+#: modules/process/extend.c:270 modules/process/polydistort.c:261
+#: modules/xyz/xyz_raster.c:629
msgid "exterior|Mirror"
msgstr "esterno|Specchio"
-#: modules/process/extend.c:272 modules/process/polydistort.c:260
-#: modules/xyz/xyz_raster.c:662
+#: modules/process/extend.c:272 modules/process/polydistort.c:263
+#: modules/xyz/xyz_raster.c:631
msgid "exterior|Periodic"
msgstr "esteriore|Periodico"
-#: modules/process/extend.c:275 modules/process/polydistort.c:263
-#: modules/xyz/xyz_raster.c:650
+#: modules/process/extend.c:275 modules/process/polydistort.c:266
+#: modules/xyz/xyz_raster.c:619
msgid "_Exterior type:"
msgstr "Tipo _Esteriore:"
@@ -9330,11 +9644,11 @@ msgstr "Numero punti percorso:"
msgid "There is no path selection."
msgstr "Non vi è stata selezione percorso"
-#: modules/process/extract_path.c:189 modules/volume/volume_extract.c:390
+#: modules/process/extract_path.c:189 modules/volume/volume_extract.c:383
msgid "X position"
msgstr "Posizione X "
-#: modules/process/extract_path.c:193 modules/volume/volume_extract.c:397
+#: modules/process/extract_path.c:193 modules/volume/volume_extract.c:389
msgid "Y position"
msgstr "Posizione Y"
@@ -9347,7 +9661,7 @@ msgid "Y tangent"
msgstr "tangente Y"
#: modules/process/extract_path.c:392 modules/process/extract_path.c:404
-#: modules/process/pat_synth.c:1432 modules/tools/distance.c:146
+#: modules/process/pat_synth.c:1433 modules/tools/distance.c:146
msgid "Distance"
msgstr "Distanza"
@@ -9391,47 +9705,36 @@ msgstr "/_Statistica/Facet _Analisi..."
msgid "Mark areas by 2D slope"
msgstr "Segna aree per pendenza 2D"
-#: modules/process/facet_analysis.c:266
+#: modules/process/facet_analysis.c:270
msgid "Mark Facets"
msgstr "Segna Facce"
-#: modules/process/facet_analysis.c:269
+#: modules/process/facet_analysis.c:273
msgid "verb|_Mark"
msgstr "Segna"
#. TRANSLATORS: The direction or line orthogonal to something.
-#: modules/process/facet_analysis.c:325
+#: modules/process/facet_analysis.c:329
msgid "Normal"
msgstr "Normale"
-#: modules/process/facet_analysis.c:333
+#: modules/process/facet_analysis.c:337
msgid "_Find Maximum"
msgstr "_Trova Massimo"
-#: modules/process/facet_analysis.c:341
+#: modules/process/facet_analysis.c:345
msgid "Mean Normal"
msgstr "Media Normale"
-#: modules/process/facet_analysis.c:350
+#: modules/process/facet_analysis.c:362
msgid "Facet plane size:"
msgstr "Dimensioni piano Facet"
-#: modules/process/facet_analysis.c:375
+#: modules/process/facet_analysis.c:370
msgid "_Tolerance:"
msgstr "_Tolleranza:"
-#: modules/process/facet_analysis.c:384 modules/process/grain_edge.c:262
-#: modules/process/grain_mark.c:344 modules/process/mark_disconn.c:286
-msgid "Com_bine with existing mask"
-msgstr "Unisci a maschera esistente"
-
-#: modules/process/facet_analysis.c:398 modules/process/grain_edge.c:276
-#: modules/process/grain_mark.c:358 modules/process/mark_disconn.c:301
-#: modules/process/mark_with.c:230 modules/process/mask_morph.c:210
-msgid "Operation:"
-msgstr "Operazione:"
-
-#: modules/process/facet_analysis.c:415
+#: modules/process/facet_analysis.c:398
msgid ""
"Warning: Lateral and value units differ. Angles are not physically "
"meaningful."
@@ -9463,8 +9766,8 @@ msgstr "_Hurst exponent:"
msgid "_Stationarity scale:"
msgstr "Scala di _Stazionarietà:"
-#: modules/process/fbm_synth.c:390 modules/process/lno_synth.c:509
-#: modules/process/noise_synth.c:409
+#: modules/process/fbm_synth.c:390 modules/process/lno_synth.c:507
+#: modules/process/noise_synth.c:407
msgid "_Distribution:"
msgstr "_Distribuzione"
@@ -9472,17 +9775,17 @@ msgstr "_Distribuzione"
msgid "Po_wer:"
msgstr "Po_tenza:"
-#: modules/process/fbm_synth.c:408 modules/process/fft_synth.c:414
-#: modules/process/lno_synth.c:533 modules/process/noise_synth.c:433
+#: modules/process/fbm_synth.c:407 modules/process/fft_synth.c:414
+#: modules/process/lno_synth.c:531 modules/process/noise_synth.c:431
msgid "_RMS:"
msgstr "_RMS:"
-#: modules/process/fbm_synth.c:477 modules/process/lno_synth.c:251
-#: modules/process/noise_synth.c:178
+#: modules/process/fbm_synth.c:476 modules/process/lno_synth.c:249
+#: modules/process/noise_synth.c:176
msgid "distribution|Exponential"
msgstr "distribuzione|Esponenziale"
-#: modules/process/fbm_synth.c:478
+#: modules/process/fbm_synth.c:477
msgid "distribution|Power"
msgstr "distribuzione|Potenza"
@@ -9534,7 +9837,7 @@ msgstr "Immaginario"
msgid "Modulus"
msgstr "Modulo"
-#: modules/process/fft.c:327 modules/process/wave_synth.c:583
+#: modules/process/fft.c:327 modules/process/wave_synth.c:618
msgid "Phase"
msgstr "Fase"
@@ -9550,63 +9853,63 @@ msgstr "Trasformazione Ra_w"
msgid "I_maginary part:"
msgstr "Parte i_mmaginaria:"
-#: modules/process/fft.c:382
+#: modules/process/fft.c:380
msgid "_Inverse transform"
msgstr "Trasformata _Inversa"
-#: modules/process/fft.c:411
+#: modules/process/fft.c:409
msgid "Subtract mean _value beforehand"
msgstr "Sottrazione preliminare valore medio "
-#: modules/process/fft.c:422
+#: modules/process/fft.c:420
msgid "_Preserve RMS"
msgstr "_Preserva RMS"
-#: modules/process/fft_filter_1d.c:117
+#: modules/process/fft_filter_1d.c:118
msgid "FFT filtering"
msgstr "Filtra con FFT"
-#: modules/process/fft_filter_1d.c:131
+#: modules/process/fft_filter_1d.c:132
msgid "/_Correct Data/1D _FFT Filtering..."
msgstr "/_Correzione Dati/Filtro 1D _FFT..."
-#: modules/process/fft_filter_1d.c:135
+#: modules/process/fft_filter_1d.c:136
msgid "1D FFT Filtering"
msgstr "Filtro 1D FFT"
-#: modules/process/fft_filter_1d.c:165 modules/process/wpour_mark.c:391
+#: modules/process/fft_filter_1d.c:166 modules/process/wpour_mark.c:391
msgid "Marked"
msgstr "Segnato"
-#: modules/process/fft_filter_1d.c:166
+#: modules/process/fft_filter_1d.c:167
msgid "Unmarked"
msgstr "Non segnato"
-#: modules/process/fft_filter_1d.c:169
+#: modules/process/fft_filter_1d.c:170
msgid "Null"
msgstr "Nullo"
-#: modules/process/fft_filter_1d.c:170
+#: modules/process/fft_filter_1d.c:171
msgid "Suppress"
msgstr "Elimina"
-#: modules/process/fft_filter_1d.c:180
+#: modules/process/fft_filter_1d.c:181
msgid "1D FFT filter"
msgstr "Filtro 1D FFT"
-#: modules/process/fft_filter_1d.c:269 modules/process/linematch.c:861
+#: modules/process/fft_filter_1d.c:271 modules/process/linematch.c:828
msgid "_Direction:"
msgstr "_Direzione:"
-#: modules/process/fft_filter_1d.c:277
+#: modules/process/fft_filter_1d.c:279
msgid "_Suppress type:"
msgstr "Tipo eliminazione:"
-#: modules/process/fft_filter_1d.c:285
+#: modules/process/fft_filter_1d.c:287
msgid "_Filter type:"
msgstr "_Tipo Filtro:"
-#: modules/process/fft_filter_1d.c:513
+#: modules/process/fft_filter_1d.c:515
msgid "1D FFT Filtered Data"
msgstr "Dati filtrati 1D FFT"
@@ -9626,9 +9929,10 @@ msgstr "Filtro FFT bidimensionale"
msgid "Filtered Data"
msgstr "Dati filtrati"
-#: modules/process/fft_filter_2d.c:305 modules/process/fit-shape.c:594
-#: modules/process/fit-shape.c:643 modules/process/fit-shape.c:658
-#: modules/process/fit-shape.c:662 modules/process/neural.c:560
+#: modules/process/fft_filter_2d.c:305 modules/process/fit-shape.c:604
+#: modules/process/fit-shape.c:653 modules/process/fit-shape.c:668
+#: modules/process/fit-shape.c:672 modules/process/neural.c:564
+#: modules/process/psf.c:232
msgid "Difference"
msgstr "Differenza"
@@ -9684,7 +9988,7 @@ msgstr "Maschera Filtro"
msgid "_Undo"
msgstr "_Annulla"
-#: modules/process/fft_filter_2d.c:507 modules/tools/maskedit.c:556
+#: modules/process/fft_filter_2d.c:507 modules/tools/maskedit.c:562
msgid "_Fill"
msgstr "_Riempimento"
@@ -9692,7 +9996,7 @@ msgstr "_Riempimento"
msgid "_Snap to origin"
msgstr ""
-#: modules/process/fft_filter_2d.c:565 modules/process/measure_lattice.c:339
+#: modules/process/fft_filter_2d.c:565 modules/process/measure_lattice.c:329
msgid "Zoom:"
msgstr "Ingrandisci:"
@@ -9728,39 +10032,40 @@ msgstr "Riempie intera maschera filtro "
msgid "Force shapes to center around the origin"
msgstr "Forza le figure a centrarsi attorno all'origine"
-#: modules/process/fft_profile.c:125
+#: modules/process/fft_profile.c:124
msgid ""
"Reads radial sections of two-dimensional power spectrum density function."
msgstr ""
"Legge sezioni radiali della funzione di densità di potenza di spettro "
"bidimensionale"
-#: modules/process/fft_profile.c:140
+#: modules/process/fft_profile.c:139
msgid "/_Statistics/_PSDF Section..."
msgstr "/_Statistica/Sezione _PSDF..."
-#: modules/process/fft_profile.c:144
+#: modules/process/fft_profile.c:143
msgid "Read radial PSDF sections"
msgstr "Lettura sezioni PSDF radiali"
-#: modules/process/fft_profile.c:190
+#: modules/process/fft_profile.c:189
msgid "Radial PSDF Section"
msgstr "Sezione radiale PSDF"
-#: modules/process/fft_profile.c:237
+#: modules/process/fft_profile.c:236
msgid "PSDF Section"
msgstr "Sezione PSDF"
-#: modules/process/fft_profile.c:266 modules/process/grain_dist.c:336
-#: modules/tools/profile.c:517 modules/tools/sfunctions.c:443
-msgid "_Fix res.:"
-msgstr "_Fix res.:"
+#: modules/process/fft_profile.c:266 modules/process/grain_dist.c:338
+#: modules/tools/profile.c:514 modules/tools/sfunctions.c:454
+#, fuzzy
+msgid "_Fixed resolution:"
+msgstr "risoluzione _X:"
-#: modules/process/fft_profile.c:279
+#: modules/process/fft_profile.c:278
msgid "_Separate curves"
msgstr "Curve _Separate"
-#: modules/process/fft_profile.c:496
+#: modules/process/fft_profile.c:483
#, c-format
msgid "PSDF %.0f°"
msgstr "PSDF %.0f°"
@@ -9781,11 +10086,15 @@ msgstr "Generazione superfici tramite sintesi spettrale"
msgid "Spectral Synthesis"
msgstr "Sintesi Spettrale"
-#: modules/process/fft_synth.c:429
+#: modules/process/fft_synth.c:430
msgid "M_inimum frequency:"
msgstr "Frequenza M_inima:"
-#: modules/process/fft_synth.c:449
+#: modules/process/fft_synth.c:430 modules/process/fft_synth.c:450
+msgid "px<sup>-1</sup>"
+msgstr ""
+
+#: modules/process/fft_synth.c:450
msgid "Ma_ximum frequency:"
msgstr "Frequenza _Massima:"
@@ -9805,85 +10114,164 @@ msgstr "Abilita moltiplicatore di _Lorentz"
msgid "Enable _power multiplier"
msgstr "Abilita moltiplicatore di _potenza"
-#: modules/process/fit-shape.c:270
+#: modules/process/fibre_synth.c:256
+msgid "Semi-circle"
+msgstr ""
+
+#: modules/process/fibre_synth.c:257
+#, fuzzy
+msgid "Triangle"
+msgstr "Triangolo vertice alto"
+
+#: modules/process/fibre_synth.c:258
+#, fuzzy
+msgid "Rectangle"
+msgstr "Rettangoli"
+
+#: modules/process/fibre_synth.c:260
+msgid "Quadratic spline"
+msgstr ""
+
+#: modules/process/fibre_synth.c:266
+#, fuzzy
+msgid "Generates surfaces composed from randomly placed fibers."
+msgstr "Generazione superficie di oggetti collocati casualmente"
+
+#: modules/process/fibre_synth.c:280
+#, fuzzy
+msgid "/S_ynthetic/_Deposition/_Fibers..."
+msgstr "/Sintetico/_Oggetti..."
+
+#: modules/process/fibre_synth.c:284
+#, fuzzy
+msgid "Generate surface of randomly placed fibers"
+msgstr "Generazione superficie di oggetti collocati casualmente"
+
+#: modules/process/fibre_synth.c:420
+#, fuzzy
+msgid "Random Fibers"
+msgstr "lineare casuale"
+
+#: modules/process/fibre_synth.c:494 modules/process/obj_synth.c:510
+msgid "_Shape:"
+msgstr "Figura:"
+
+#: modules/process/fibre_synth.c:513 modules/process/obj_synth.c:529
+msgid "obj."
+msgstr "obj."
+
+#: modules/process/fibre_synth.c:553
+#, fuzzy
+msgid "Scales _with width"
+msgstr "Scala con dimensioni"
+
+#: modules/process/fibre_synth.c:591 modules/process/synth.h:485
+msgid "Deformation"
+msgstr "Deformazione"
+
+#: modules/process/fibre_synth.c:600 modules/process/lno_synth.c:852
+#: modules/process/lno_synth.c:1222 modules/process/mask_noisify.c:177
+msgid "Densi_ty:"
+msgstr "Densi_tà:"
+
+#: modules/process/fibre_synth.c:607
+#, fuzzy
+msgid "_Lateral:"
+msgstr "Laterale"
+
+#: modules/process/fibre_synth.c:614
+#, fuzzy
+msgid "Le_ngthwise:"
+msgstr "_Lunghezza:"
+
+#: modules/process/fibre_synth.c:819
+msgid "Along fiber:"
+msgstr ""
+
+#: modules/process/fibre_synth.c:1180
+#, fuzzy
+msgid "Generating fibers..."
+msgstr "Lettura file..."
+
+#: modules/process/fit-shape.c:264
msgid "Fits predefined geometrical shapes to data."
msgstr "Adatta figure geometriche predefinite ai dati."
-#: modules/process/fit-shape.c:284
+#: modules/process/fit-shape.c:278
msgid "/_Level/_Fit Shape..."
msgstr "/_Livella/_Adatta Figura.."
-#: modules/process/fit-shape.c:288 modules/process/fit-shape.c:295
+#: modules/process/fit-shape.c:282 modules/process/fit-shape.c:289
msgid "Fit geometrical shapes"
msgstr "Adatta figure geometriche"
-#: modules/process/fit-shape.c:291
+#: modules/process/fit-shape.c:285
msgid "/_Fit Shape..."
msgstr "/Adatta Figura.."
-#: modules/process/fit-shape.c:390
+#: modules/process/fit-shape.c:389
msgid "Fit Shape"
msgstr "Adatta Figura"
-#: modules/process/fit-shape.c:395
+#: modules/process/fit-shape.c:396
msgid "verb|_Quick Fit"
msgstr "verbo|Adattamento rapido"
-#: modules/process/fit-shape.c:473 modules/process/fit-shape.c:2159
+#: modules/process/fit-shape.c:474 modules/process/fit-shape.c:2141
msgid "Derived Quantities"
msgstr "Quantità Derivate"
-#: modules/process/fit-shape.c:478 modules/process/fit-shape.c:2129
+#: modules/process/fit-shape.c:479 modules/process/fit-shape.c:2111
msgid "Mean square difference:"
msgstr "Differenza quadratica media"
-#: modules/process/fit-shape.c:580 modules/process/fit-shape.c:626
-#: modules/process/fit-shape.c:657 modules/process/fit-shape.c:661
+#: modules/process/fit-shape.c:590 modules/process/fit-shape.c:636
+#: modules/process/fit-shape.c:667 modules/process/fit-shape.c:671
msgid "Fitted shape"
msgstr "Figura adattata"
-#: modules/process/fit-shape.c:663 modules/process/mark_disconn.c:189
-#: modules/process/scars.c:281
+#: modules/process/fit-shape.c:673 modules/process/mark_disconn.c:189
+#: modules/process/scars.c:299
msgid "Both"
msgstr "Entrambe"
-#: modules/process/fit-shape.c:680
+#: modules/process/fit-shape.c:690 modules/process/psf-fit.c:308
msgid "_Function type:"
msgstr "Tipo _Funzione:"
-#: modules/process/fit-shape.c:708
+#: modules/process/fit-shape.c:720
msgid "Show differences with _adapted color map"
msgstr "Mostra differenze con mappa colore _adattata"
-#: modules/process/fit-shape.c:720
+#: modules/process/fit-shape.c:732
msgid "Full fit is _geometric"
msgstr ""
-#: modules/process/fit-shape.c:757
+#: modules/process/fit-shape.c:769
msgid "Calculate differences for e_xcluded pixels"
msgstr "Calcola differenze per pi_xels esclusi"
-#: modules/process/fit-shape.c:804
+#: modules/process/fit-shape.c:816
msgid "_Recalculate Image"
msgstr "_Ricalcola Immagine"
-#: modules/process/fit-shape.c:811
+#: modules/process/fit-shape.c:823
msgid "Revert to _Previous Values"
msgstr "Ritorna a Valori _Precedenti"
-#: modules/process/fit-shape.c:1850
+#: modules/process/fit-shape.c:1864
msgid "Parameter estimation failed"
msgstr "Stima parametri fallita."
-#: modules/process/fit-shape.c:1853
+#: modules/process/fit-shape.c:1867
msgid "Fit failed"
msgstr "Fit fallito"
-#: modules/process/fit-shape.c:1855
+#: modules/process/fit-shape.c:1869
msgid "Fit was interruped"
msgstr "Fit interrotto"
-#: modules/process/fit-shape.c:2115
+#: modules/process/fit-shape.c:2097
msgid "(fixed)"
msgstr ""
@@ -9903,35 +10291,35 @@ msgstr ""
msgid "Polynomial leveling..."
msgstr "Appianamento Polinomiale..."
-#: modules/process/fraccor.c:38
+#: modules/process/fraccor.c:39
msgid "Removes data under mask using fractal interpolation."
msgstr "Rimuove dati selezionati utilizzando interpolazione frattale"
-#: modules/process/fraccor.c:52
+#: modules/process/fraccor.c:53
msgid "/_Correct Data/_Fractal Correction"
msgstr "/_Correzione Dati/Correzione _Frattale"
-#: modules/process/fraccor.c:56
+#: modules/process/fraccor.c:57
msgid "Interpolate data under mask with fractal interpolation"
msgstr "Interpolazione dati maschera con interpolazione frattale"
-#: modules/process/fractal.c:134
+#: modules/process/fractal.c:130
msgid "Partitioning"
msgstr "Partizionamento"
-#: modules/process/fractal.c:135
+#: modules/process/fractal.c:131
msgid "Cube counting"
msgstr "Conteggio cubico"
-#: modules/process/fractal.c:136
+#: modules/process/fractal.c:132
msgid "Triangulation"
msgstr "Triangolazione"
-#: modules/process/fractal.c:137
+#: modules/process/fractal.c:133
msgid "Power spectrum"
msgstr "Spettro di potenza"
-#: modules/process/fractal.c:173
+#: modules/process/fractal.c:169
msgid ""
"Calculates fractal dimension using several methods (partitioning, box "
"counting, triangulation, power spectrum)."
@@ -9939,54 +10327,50 @@ msgstr ""
"Calcola dimensione frattale usando metodi differenti (partizionamento, box "
"counting, triangolazione, potere spettrale)"
-#: modules/process/fractal.c:188
+#: modules/process/fractal.c:184
msgid "/_Statistics/_Fractal Dimension..."
msgstr "/_Statistica/Dimensioni _Frattali..."
-#: modules/process/fractal.c:192
+#: modules/process/fractal.c:188
msgid "Calculate fractal dimension"
msgstr "Calcola dimensione frattale"
-#: modules/process/fractal.c:227
+#: modules/process/fractal.c:223
msgid "Fractal Dimension"
msgstr "Dimensioni Frattali"
-#: modules/process/fractal.c:228
-msgid "Reco_mpute"
-msgstr "Ricalcola"
-
-#: modules/process/fractal.c:269
+#: modules/process/fractal.c:253
msgid "_Method:"
msgstr "_Metodo:"
-#: modules/process/fractal.c:290
+#: modules/process/fractal.c:269
msgid "Fit Area"
msgstr "Area di Fit"
-#: modules/process/fractal.c:295
-msgid "From:"
-msgstr "Da:"
-
-#: modules/process/fractal.c:295 modules/process/fractal.c:589
-#: modules/process/fractal.c:613
+#: modules/process/fractal.c:273 modules/process/fractal.c:545
+#: modules/process/fractal.c:569
msgid "minimum"
msgstr "minimo"
-#: modules/process/fractal.c:298
-msgid "To:"
-msgstr "A:"
+#: modules/process/fractal.c:274
+msgid "From:"
+msgstr "Da:"
-#: modules/process/fractal.c:298 modules/process/fractal.c:590
-#: modules/process/fractal.c:614
+#: modules/process/fractal.c:279 modules/process/fractal.c:546
+#: modules/process/fractal.c:570
msgid "maximum"
msgstr "massimo"
-#: modules/process/fractal.c:308 modules/process/mark_with.c:390
-#: modules/process/neural.c:559
+#: modules/process/fractal.c:280
+msgid "To:"
+msgstr "A:"
+
+#: modules/process/fractal.c:287 modules/process/mark_with.c:394
+#: modules/process/neural.c:563
msgid "Result"
msgstr "Risultati"
-#: modules/process/fractal.c:550
+#: modules/process/fractal.c:506
msgid "Linear fit"
msgstr "Fit lineare"
@@ -10058,11 +10442,11 @@ msgstr ""
msgid "Grain Correlations"
msgstr "Correlazione Grani"
-#: modules/process/grain_cross.c:240
+#: modules/process/grain_cross.c:241
msgid "_Abscissa"
msgstr "_Ascissa"
-#: modules/process/grain_cross.c:244
+#: modules/process/grain_cross.c:245
msgid "O_rdinate"
msgstr "O_ridinata"
@@ -10090,119 +10474,119 @@ msgstr "Disegna grafici"
msgid "Grain Distributions"
msgstr "Distribuzioni Grani"
-#: modules/process/grain_dist.c:553
+#: modules/process/grain_dist.c:547
msgid "count"
msgstr "conta"
-#: modules/process/grain_dist.c:617
+#: modules/process/grain_dist.c:611
msgid "Export Raw Grain Values"
msgstr "Esporta Valori Raw Grani"
-#: modules/process/grain_edge.c:100
+#: modules/process/grain_edge.c:99
msgid "Marks grains by edge detection method."
msgstr "Segna grani con metodo rivelazione soglia"
-#: modules/process/grain_edge.c:114
+#: modules/process/grain_edge.c:113
msgid "/_Grains/Mark by _Edge Detection..."
msgstr "/_Grani/Segna per Riv_elazione Soglia"
-#: modules/process/grain_edge.c:118
+#: modules/process/grain_edge.c:117
msgid "Mark grains with edge detection mechanism"
msgstr "Segna grani con meccanismo di determinazione bordo"
-#: modules/process/grain_edge.c:207
+#: modules/process/grain_edge.c:206
msgid "Mark Grains by Edge Detection"
msgstr "Segna Grani per Rivelazione Soglia"
-#: modules/process/grain_edge.c:245
+#: modules/process/grain_edge.c:244
msgid "Threshold"
msgstr "Soglia"
-#: modules/process/grain_edge.c:249
+#: modules/process/grain_edge.c:248
msgid "_Laplacian:"
msgstr "_Laplaciano:"
-#: modules/process/grain_filter.c:195
+#: modules/process/grain_filter.c:194
msgid ""
"Filters grains by their properties, using logical expressions and thresholds."
msgstr ""
"Filtra i grani per le loro proprietà usando espressioni logiche e soglie."
-#: modules/process/grain_filter.c:210
+#: modules/process/grain_filter.c:209
msgid "/_Grains/_Filter..."
msgstr "/_Grani/_Filtro.."
-#: modules/process/grain_filter.c:214
+#: modules/process/grain_filter.c:213
msgid "Filter grains by their properties"
msgstr "Filtra grani per proprietà"
-#: modules/process/grain_filter.c:254
+#: modules/process/grain_filter.c:253
msgid "There are no grains to filter."
msgstr "Non ci sono grani da filtrare"
-#: modules/process/grain_filter.c:310
+#: modules/process/grain_filter.c:309
msgid "Filter Grains"
msgstr "Filtro grani"
-#: modules/process/grain_filter.c:405
+#: modules/process/grain_filter.c:404
msgid "Set selected as:"
msgstr "Segna selezionati come:"
-#: modules/process/grain_filter.c:420
+#: modules/process/grain_filter.c:419
msgid "Keep grains satisfying:"
msgstr "Mantieni grani che soddisfano:"
-#: modules/process/grain_filter.c:434 modules/process/lat_synth.c:733
+#: modules/process/grain_filter.c:440 modules/process/lat_synth.c:733
msgid "Lower threshold:"
msgstr "Soglia inferiore:"
-#: modules/process/grain_filter.c:469 modules/process/lat_synth.c:740
+#: modules/process/grain_filter.c:467 modules/process/lat_synth.c:740
msgid "Upper threshold:"
msgstr "Soglia superiore:"
#. TRANSLATORS: %c is replaced with quantity label A, B or C.
-#: modules/process/grain_filter.c:645
+#: modules/process/grain_filter.c:628
#, c-format
msgid "Condition %c: %s"
msgstr "Stato %c: %s"
-#: modules/process/grain_mark.c:139
+#: modules/process/grain_mark.c:137
msgid "Marks grains by thresholding (height, slope, curvature)."
msgstr "Segna grani per soglia (altezza, pendenza, curvatura)"
-#: modules/process/grain_mark.c:153
+#: modules/process/grain_mark.c:151
msgid "/_Grains/_Mark by Threshold..."
msgstr "/_Grani/Segna per soglia"
-#: modules/process/grain_mark.c:157
+#: modules/process/grain_mark.c:155
msgid "Mark grains by threshold"
msgstr "Segna grani per soglia"
-#: modules/process/grain_mark.c:241
+#: modules/process/grain_mark.c:240
msgid "Mark Grains by Threshold"
msgstr "Segna Grani per Soglia"
-#: modules/process/grain_mark.c:281
+#: modules/process/grain_mark.c:280
msgid "Threshold by"
msgstr "Soglia:"
-#: modules/process/grain_mark.c:311
+#: modules/process/grain_mark.c:310
msgid "_Slope:"
msgstr "_Pendenza:"
-#: modules/process/grain_mark.c:315
+#: modules/process/grain_mark.c:314
msgid "_Curvature:"
msgstr "_Curvatura:"
-#: modules/process/grain_mark.c:324
-msgid "Criteria combination:"
-msgstr "Combinazione criteri:"
-
-#: modules/process/grain_mark.c:328 modules/process/grain_wshed.c:256
+#: modules/process/grain_mark.c:319 modules/process/grain_wshed.c:260
#: modules/process/wpour_mark.c:358
msgid "_Invert height"
msgstr "_Inverti altezza"
+#: modules/process/grain_mark.c:328
+msgid "Criteria combination:"
+msgstr "Combinazione criteri:"
+
#: modules/process/grain_stat.c:54
msgid "Displays overall grain statistics."
msgstr "Mostra statistiche complessive grani "
@@ -10279,417 +10663,427 @@ msgstr "Volume totale grani (laplaciano):"
msgid "Total projected boundary length:"
msgstr "Lunghezza contorno proiettato totale:"
-#: modules/process/grain_wshed.c:101
+#: modules/process/grain_wshed.c:102
msgid "Marks grains by watershed algorithm."
msgstr "Segna grani usando un algoritmo watershed"
-#: modules/process/grain_wshed.c:115
+#: modules/process/grain_wshed.c:116
msgid "/_Grains/Mark by _Watershed..."
msgstr "/_Grani/Segna per _Watershed..."
-#: modules/process/grain_wshed.c:119
+#: modules/process/grain_wshed.c:120
msgid "Mark grains by watershed"
msgstr "Segna grani per watershed"
-#: modules/process/grain_wshed.c:161
+#: modules/process/grain_wshed.c:162
msgid "Mark Grains by Watershed"
msgstr "Segna grani per Watershed"
-#: modules/process/grain_wshed.c:199
+#: modules/process/grain_wshed.c:200
msgid "Grain Location"
msgstr "Locazione Grani"
-#: modules/process/grain_wshed.c:214
+#: modules/process/grain_wshed.c:216
msgid "_Drop size:"
msgstr "_Dimensioni Goccia:"
-#: modules/process/grain_wshed.c:230
+#: modules/process/grain_wshed.c:233
msgid "Segmentation"
msgstr "Segmentazione"
-#: modules/process/grain_wshed.c:236
+#: modules/process/grain_wshed.c:239
msgid "Num_ber of steps:"
msgstr "Numero di step:"
-#: modules/process/grain_wshed.c:244
+#: modules/process/grain_wshed.c:248
msgid "Dr_op size:"
msgstr "Dimensioni Goccia:"
-#: modules/process/grain_wshed.c:435
+#: modules/process/grain_wshed.c:439
msgid "Finding minima..."
msgstr "Ricerca minimi..."
-#: modules/process/grain_wshed.c:437
+#: modules/process/grain_wshed.c:441
msgid "Locating..."
msgstr "Localizzando..."
-#: modules/process/grain_wshed.c:439
+#: modules/process/grain_wshed.c:443
msgid "Simulating watershed..."
msgstr "Simulazione linea separazione"
-#: modules/process/grain_wshed.c:441
+#: modules/process/grain_wshed.c:445
msgid "Marking boundaries..."
msgstr "Marcatura margini..."
-#: modules/process/hough.c:74
+#: modules/process/hough.c:76
msgid "Hough transform."
msgstr "Trasformata di Hough"
-#: modules/process/hough.c:88
+#: modules/process/hough.c:90
msgid "/_Integral Transforms/_Hough..."
msgstr "/_Trasformate Integrali/_Hough..."
-#: modules/process/hough.c:92
+#: modules/process/hough.c:94
msgid "Compute Hough transform"
msgstr "Calcola trasformata di Hough"
-#: modules/process/hough.c:178
+#: modules/process/hough.c:137
+#, fuzzy
+msgid "Hough line"
+msgstr "Rugosità"
+
+#: modules/process/hough.c:141
+#, c-format
+msgid "Hough circle r=%d"
+msgstr ""
+
+#: modules/process/hough.c:173
msgid "Hough Transform"
msgstr "Trasformata di Hough"
-#: modules/process/hough.c:201
+#: modules/process/hough.c:195
msgid "_Transform type:"
msgstr "_Tipo Trasformata:"
-#: modules/process/hough.c:212
+#: modules/process/hough.c:203
msgid "_Circle size:"
msgstr "_Dimensioni cerchio:"
-#: modules/process/immerse.c:162
+#: modules/process/immerse.c:163
msgid "Immerse high resolution detail into overall image."
msgstr "Fondi dettaglio ad alta risoluzione con l'immagine d'insieme"
-#: modules/process/immerse.c:176
+#: modules/process/immerse.c:177
msgid "/M_ultidata/_Immerse Detail..."
msgstr "/D_ati Multipli/_Fondi dettaglio..."
-#: modules/process/immerse.c:180
+#: modules/process/immerse.c:181
msgid "Immerse a detail into image"
msgstr "Fondi dettaglio con immagine"
-#: modules/process/immerse.c:222
+#: modules/process/immerse.c:223
msgid "Immerse Detail"
msgstr "Fusione dettaglio"
-#: modules/process/immerse.c:225
+#: modules/process/immerse.c:226
msgid "_Locate"
msgstr "_Localizza"
-#: modules/process/immerse.c:227
+#: modules/process/immerse.c:228
msgid "Locate detail by full image correlation search"
msgstr "Localizza dettaglio con ricerca di correlazione su intera immagine"
-#: modules/process/immerse.c:229
+#: modules/process/immerse.c:230
msgid "_Improve"
msgstr "_Migliora"
-#: modules/process/immerse.c:231
+#: modules/process/immerse.c:232
msgid "Improve detail position by correlation search in neighborhood"
msgstr ""
"Migliora posizione dettaglio con ricerca di correlazione nelle vicinanze."
-#: modules/process/immerse.c:290
+#: modules/process/immerse.c:291
msgid "_Detail image:"
msgstr "_Dettaglio immagine:"
-#: modules/process/immerse.c:295
+#: modules/process/immerse.c:296
msgid "Position:"
msgstr "Posizione:"
-#: modules/process/immerse.c:308
+#: modules/process/immerse.c:314
msgid "Result Sampling"
msgstr "Campionamento risultante"
-#: modules/process/immerse.c:318
+#: modules/process/immerse.c:324
msgid "_Upsample large image"
msgstr "_Sovracampionamento immagine grande"
-#: modules/process/immerse.c:320
+#: modules/process/immerse.c:326
msgid "_Downsample detail"
msgstr "_Sottocampionamento detail"
-#: modules/process/immerse.c:329
+#: modules/process/immerse.c:335
msgid "Detail Leveling"
msgstr "Livellamento dettaglio"
-#: modules/process/immerse.c:339
+#: modules/process/immerse.c:345
msgid "levelling|_None"
msgstr "livellamento|nessuno"
-#: modules/process/immerse.c:341
+#: modules/process/immerse.c:347
msgid "_Mean value"
msgstr "_Valore Medio"
-#: modules/process/immerse.c:349
+#: modules/process/immerse.c:355
msgid "Show _frame"
msgstr "Mostra cornice"
-#: modules/process/immerse.c:787
+#: modules/process/immerse.c:793
msgid "Immersed detail"
msgstr "Dettagli immersi"
-#: modules/process/indent_analyze.c:261
+#: modules/process/indent_analyze.c:246
msgid "Do nothing"
msgstr "Non fare nulla"
-#: modules/process/indent_analyze.c:262
+#: modules/process/indent_analyze.c:247
msgid "Plane level"
msgstr "Livella Piano"
-#: modules/process/indent_analyze.c:263
+#: modules/process/indent_analyze.c:248
msgid "Plane rotate"
msgstr "Ruota Piano"
-#: modules/process/indent_analyze.c:267
+#: modules/process/indent_analyze.c:252
msgid "New"
msgstr "Nuovo"
-#: modules/process/indent_analyze.c:268
+#: modules/process/indent_analyze.c:253
msgid "AND"
msgstr "AND"
-#: modules/process/indent_analyze.c:269
+#: modules/process/indent_analyze.c:254
msgid "OR"
msgstr "O"
-#: modules/process/indent_analyze.c:270
+#: modules/process/indent_analyze.c:255
msgid "NOT"
msgstr "NON"
-#: modules/process/indent_analyze.c:271
+#: modules/process/indent_analyze.c:256
msgid "XOR"
msgstr "XOR"
-#: modules/process/indent_analyze.c:275
+#: modules/process/indent_analyze.c:260
msgid "Nothing"
msgstr "Nulla"
-#: modules/process/indent_analyze.c:276
+#: modules/process/indent_analyze.c:261
msgid "Above"
msgstr "Sopra"
-#: modules/process/indent_analyze.c:277
+#: modules/process/indent_analyze.c:262
msgid "Below"
msgstr "sotto"
-#: modules/process/indent_analyze.c:278
+#: modules/process/indent_analyze.c:263
msgid "Plane"
msgstr "Piano"
-#: modules/process/indent_analyze.c:279
+#: modules/process/indent_analyze.c:264
msgid "Impression"
msgstr "Impressione:"
-#: modules/process/indent_analyze.c:280
+#: modules/process/indent_analyze.c:265
msgid "Inner Pile-up"
msgstr "Inner Pile-up"
-#: modules/process/indent_analyze.c:281
+#: modules/process/indent_analyze.c:266
msgid "Outer Pile-up"
msgstr "Outer Pile-up"
-#: modules/process/indent_analyze.c:282
+#: modules/process/indent_analyze.c:267
msgid "Special points"
msgstr "Punti speciali"
-#: modules/process/indent_analyze.c:283
+#: modules/process/indent_analyze.c:268
msgid "Faces border"
msgstr "Margine facce"
-#: modules/process/indent_analyze.c:287
+#: modules/process/indent_analyze.c:272
msgid "Vickers"
msgstr "Vickers"
-#: modules/process/indent_analyze.c:288
+#: modules/process/indent_analyze.c:273
msgid "Berkovich"
msgstr "Berkovich"
-#: modules/process/indent_analyze.c:289
+#: modules/process/indent_analyze.c:274
msgid "Berkovich (modified)"
msgstr "Berkovich (modificato)"
-#: modules/process/indent_analyze.c:290
+#: modules/process/indent_analyze.c:275
msgid "Knoop"
msgstr "Knoop"
-#: modules/process/indent_analyze.c:291
+#: modules/process/indent_analyze.c:276
msgid "Brinell"
msgstr "Brinell"
-#: modules/process/indent_analyze.c:292
+#: modules/process/indent_analyze.c:277
msgid "Cube corner"
msgstr "Vertice cubo"
-#: modules/process/indent_analyze.c:293
+#: modules/process/indent_analyze.c:278
msgid "Rockwell"
msgstr "Rockwell"
-#: modules/process/indent_analyze.c:303
+#: modules/process/indent_analyze.c:288
msgid "Analyses nanoindentation structure (volumes, surfaces, ...)."
msgstr "Analisi strutture di nanoindentazione (volumi, superfici...)"
-#: modules/process/indent_analyze.c:320
+#: modules/process/indent_analyze.c:302
msgid "/_Tip and Indentation/_Analyze Imprint..."
msgstr "/Punta e Indentazione/Analizza Impronta..."
-#: modules/process/indent_analyze.c:439
+#: modules/process/indent_analyze.c:410
msgid "Marked _areas:"
msgstr "_Aree segnate:"
-#: modules/process/indent_analyze.c:445
+#: modules/process/indent_analyze.c:419
msgid "_Indentor type:"
msgstr "Tipo _Indentore:"
-#: modules/process/indent_analyze.c:451
+#: modules/process/indent_analyze.c:428
msgid "_Mask creation type:"
msgstr "Creazione _Maschera:"
-#: modules/process/indent_analyze.c:456
+#: modules/process/indent_analyze.c:434
msgid "Ref. plane _tolerance:"
msgstr "_Tolleranza Rif. Piano:"
-#: modules/process/indent_analyze.c:460
+#: modules/process/indent_analyze.c:438
msgid "Angle _1 tolerance:"
msgstr "Tolleranza Angolo_1:"
-#: modules/process/indent_analyze.c:485
+#: modules/process/indent_analyze.c:456
msgid "Indent center at"
msgstr "Centro di indentazione a "
-#: modules/process/indent_analyze.c:488
+#: modules/process/indent_analyze.c:460
msgid "Maximum at"
msgstr "Massimo "
-#: modules/process/indent_analyze.c:491
+#: modules/process/indent_analyze.c:464
msgid "Max-min difference"
msgstr "Differenza Max-min "
-#: modules/process/indent_analyze.c:497
+#: modules/process/indent_analyze.c:472
msgid "Expected A<sub>d</sub>:"
msgstr "A<sub>d</sub> Aspettato:"
-#: modules/process/indent_analyze.c:505
+#: modules/process/indent_analyze.c:479
msgid "Expected A<sub>p</sub>:"
msgstr " A<sub>p</sub> Aspettato:"
-#: modules/process/indent_analyze.c:549
+#: modules/process/indent_analyze.c:489
msgid "Volume above-below"
msgstr "Volume sopra-sotto"
-#: modules/process/indent_analyze.c:558
+#: modules/process/indent_analyze.c:494
msgid "Indent. volume"
msgstr "Volume indent."
-#: modules/process/indent_analyze.c:564
+#: modules/process/indent_analyze.c:502
msgid "Indent. A<sub>d</sub>"
msgstr "Indent. A<sub>d</sub>"
-#: modules/process/indent_analyze.c:573
+#: modules/process/indent_analyze.c:509
msgid "Indent. A<sub>p</sub>"
msgstr "Indent. A<sub>p</sub>"
-#: modules/process/indent_analyze.c:587
+#: modules/process/indent_analyze.c:517
msgid "Inner Pile-Up A<sub>d</sub>"
msgstr "Inner Pile-Up A<sub>d</sub>"
-#: modules/process/indent_analyze.c:596
+#: modules/process/indent_analyze.c:525
msgid "Inner Pile-Up A<sub>p</sub>"
msgstr "Inner Pile-Up A<sub>p</sub>"
-#: modules/process/indent_analyze.c:605
+#: modules/process/indent_analyze.c:533
msgid "Outer Pile-Up A<sub>d</sub>"
msgstr "Outer Pile-Up A<sub>d</sub>"
-#: modules/process/indent_analyze.c:614
+#: modules/process/indent_analyze.c:541
msgid "Outer Pile-Up A<sub>p</sub>"
msgstr "Outer Pile-Up A<sub>p</sub>"
-#: modules/process/indent_analyze.c:644
+#: modules/process/indent_analyze.c:569
msgid "Indentation statistics"
msgstr "Statistiche Indentazione "
-#: modules/process/indent_analyze.c:645
+#: modules/process/indent_analyze.c:570
msgid "_Compute & mark"
msgstr "_Calcola & segna "
-#: modules/process/indent_analyze.c:646
+#: modules/process/indent_analyze.c:571
msgid "_Save statistics"
msgstr "_salva Statistiche"
-#: modules/process/indent_analyze.c:1569
+#: modules/process/indent_analyze.c:1392
msgid "No statistics has been computed yet."
msgstr "Nessuna statistica è ancora stata calcolata."
-#: modules/process/indent_analyze.c:1577
+#: modules/process/indent_analyze.c:1400
msgid "Save Indentation Statistics"
msgstr "Salva Statistiche Indentazione"
-#: modules/process/indent_analyze.c:1615
+#: modules/process/indent_analyze.c:1438
#, c-format
msgid "Indentor: %s\n"
msgstr "Indentore: %s\n"
-#: modules/process/indent_analyze.c:1619
+#: modules/process/indent_analyze.c:1442
#, c-format
msgid "Length units: %s\n"
msgstr "Lunghezza : %s\n"
-#: modules/process/indent_analyze.c:1621
+#: modules/process/indent_analyze.c:1444
#, c-format
msgid "Indentation center at [%d, %d] px: %lf\n"
msgstr "Centro di indentazione a [%d, %d] px: %lf\n"
-#: modules/process/indent_analyze.c:1623
+#: modules/process/indent_analyze.c:1446
#, c-format
msgid "Maximum at [%d, %d] is: %lf\n"
msgstr "Massimo a [%d, %d] is: %lf\n"
-#: modules/process/indent_analyze.c:1625
+#: modules/process/indent_analyze.c:1448
#, c-format
msgid "Difference max-min: %lf\n"
msgstr "Differenza max-min: %lf\n"
-#: modules/process/indent_analyze.c:1630
+#: modules/process/indent_analyze.c:1453
#, c-format
msgid "Area (projected) above plane: %g (%.1lf %%)\n"
msgstr "Area (proiettata) al di sopra del piano: %g (%.1lf %%)\n"
-#: modules/process/indent_analyze.c:1634
+#: modules/process/indent_analyze.c:1457
#, c-format
msgid "Area (projected) below plane: %g (%.1lf %%)\n"
msgstr "Area (proiettata) al di sotto del piano: %g (%.1lf %%)\n"
-#: modules/process/indent_analyze.c:1638
+#: modules/process/indent_analyze.c:1461
#, c-format
msgid "Area (projected) of plane: %g (%.1lf %%)\n"
msgstr "Area (proiettata) del piano: %g (%.1lf %%)\n"
-#: modules/process/indent_analyze.c:1643
+#: modules/process/indent_analyze.c:1466
#, c-format
msgid "Area (developed) above %g (+%.1f %%)\n"
msgstr "Area (sviluppata) al di sopra %g (+%.1f %%)\n"
-#: modules/process/indent_analyze.c:1646
+#: modules/process/indent_analyze.c:1469
#, c-format
msgid "Area (developed) below %g (+%.1lf %%)\n"
msgstr "Area (sviluppata) al di sotto %g (+%.1lf %%)\n"
-#: modules/process/indent_analyze.c:1650
+#: modules/process/indent_analyze.c:1473
#, c-format
msgid "Volume above: %g\n"
msgstr "Volume al di sopra: %g\n"
-#: modules/process/indent_analyze.c:1652
+#: modules/process/indent_analyze.c:1475
#, c-format
msgid "Volume below: %g\n"
msgstr "Volume di sotto: %g\n"
-#: modules/process/indent_analyze.c:1654
+#: modules/process/indent_analyze.c:1477
#, c-format
msgid "Volume difference %g\n"
msgstr "Differenza volume %g\n"
-#: modules/process/indent_analyze.c:1658
+#: modules/process/indent_analyze.c:1481
msgid ""
"\n"
"Indentation\n"
@@ -10697,12 +11091,12 @@ msgstr ""
"\n"
"Indentazione\n"
-#: modules/process/indent_analyze.c:1659
+#: modules/process/indent_analyze.c:1482
#, c-format
msgid "Volume %g\n"
msgstr "Volume %g\n"
-#: modules/process/indent_analyze.c:1664
+#: modules/process/indent_analyze.c:1487
msgid ""
"\n"
"Indentation - Inner Pile-Up\n"
@@ -10710,7 +11104,7 @@ msgstr ""
"\n"
"Indentazione - Inner Pile-Up\n"
-#: modules/process/indent_analyze.c:1670
+#: modules/process/indent_analyze.c:1493
msgid "Indentation - Outer Pile-Up\n"
msgstr "Indentazione - Outer Pile-Up\n"
@@ -10827,11 +11221,6 @@ msgstr "Parametri reticolo"
msgid "_Lattice:"
msgstr "Reticolo:"
-#: modules/process/lat_synth.c:651 modules/process/obj_synth.c:544
-#: modules/process/pat_synth.c:1457
-msgid "_Size:"
-msgstr "Dimensione:"
-
#: modules/process/lat_synth.c:662
msgid "Lattice rela_xation:"
msgstr "Rilassamento reticolo:"
@@ -10967,7 +11356,7 @@ msgstr ""
#: modules/process/level_grains.c:187 modules/process/median-bg.c:167
#: modules/process/polylevel.c:293 modules/process/polylevel.c:417
-#: modules/process/sphere-revolve.c:200
+#: modules/process/sphere-revolve.c:221 modules/process/sphere-revolve.c:295
msgid "Background"
msgstr "Sottofondo"
@@ -10979,150 +11368,151 @@ msgstr "Livella grani"
msgid "Quantity to level:"
msgstr "Quantità da livellare:"
-#: modules/process/level_grains.c:231 modules/process/linematch.c:866
-#: modules/process/median-bg.c:217 modules/process/polylevel.c:482
-#: modules/process/sphere-revolve.c:263
+#: modules/process/level_grains.c:231 modules/process/linematch.c:834
+#: modules/process/median-bg.c:217 modules/process/polylevel.c:485
+#: modules/process/sphere-revolve.c:371
msgid "E_xtract background"
msgstr "E_strae Sottofondo"
-#: modules/process/linecorrect.c:54
+#: modules/process/linecorrect.c:52
msgid "Corrects line defects (mostly experimental algorithms)."
msgstr "Corregge i difetti lineari (per lo più algoritmi sperimentali)."
-#: modules/process/linecorrect.c:68
+#: modules/process/linecorrect.c:66
msgid "/_Correct Data/Ste_p Line Correction"
msgstr "/_Correzione Dati/ Correzione Ste_p Line "
-#: modules/process/linecorrect.c:72
+#: modules/process/linecorrect.c:70
msgid "Correct steps in lines"
msgstr "Correzione step nelle linee "
-#: modules/process/linematch.c:158 modules/tools/linestats.c:166
+#: modules/process/linematch.c:155 modules/tools/linestats.c:166
#: modules/volume/volume_linestat.c:143
msgid "Median"
msgstr "Mediana"
-#: modules/process/linematch.c:159
+#: modules/process/linematch.c:156
msgid "Median of differences"
msgstr "Mediana delle differenze"
-#: modules/process/linematch.c:160
+#: modules/process/linematch.c:157
msgid "Modus"
msgstr "Modo"
-#: modules/process/linematch.c:161
+#: modules/process/linematch.c:158
msgid "linematch|Matching"
msgstr "linematch|Matching"
-#: modules/process/linematch.c:162
+#: modules/process/linematch.c:159
msgid "linematch|Polynomial"
msgstr "linematch|Polinomiale"
-#: modules/process/linematch.c:168
+#: modules/process/linematch.c:165
msgid "Aligns rows by various methods."
msgstr "Allinea righe con vari metodi"
-#: modules/process/linematch.c:182
+#: modules/process/linematch.c:179
msgid "/_Correct Data/_Align rows..."
msgstr "/_Correzione Dati/_Allineamento righe..."
-#: modules/process/linematch.c:186
+#: modules/process/linematch.c:183
msgid "Align rows using various methods"
msgstr "Allineamento righe usando vari metodi"
-#: modules/process/linematch.c:237 modules/process/linematch.c:265
+#: modules/process/linematch.c:234 modules/process/linematch.c:262
msgid "Row background"
msgstr "Sottofondo righa"
-#: modules/process/linematch.c:266
+#: modules/process/linematch.c:263
msgid "Vertical position"
msgstr "Posizione verticale"
-#: modules/process/linematch.c:267
+#: modules/process/linematch.c:264
msgid "Corrected offset"
msgstr "Correzione compensazione"
-#: modules/process/linematch.c:802
+#: modules/process/linematch.c:769
msgid "Align Rows"
msgstr "Allineamento righe"
-#: modules/process/linematch.c:844
+#: modules/process/linematch.c:810
msgid "_Polynomial degree:"
msgstr "grado _polinomiale:"
-#: modules/process/linematch.c:876
+#: modules/process/linematch.c:844
msgid "Plot background _graph"
msgstr "Traccia grafico sottofondo"
-#: modules/process/lno_synth.c:261 modules/process/noise_synth.c:188
+#: modules/process/lno_synth.c:259 modules/process/noise_synth.c:186
msgid "distribution|Triangular"
msgstr "distribuzione|Triangolare"
-#: modules/process/lno_synth.c:267 modules/process/pat_synth.c:213
+#: modules/process/lno_synth.c:265 modules/process/pat_synth.c:213
msgid "Steps"
msgstr "Steps"
-#: modules/process/lno_synth.c:268
+#: modules/process/lno_synth.c:266
msgid "Scars"
msgstr "Danni"
-#: modules/process/lno_synth.c:269 modules/process/pat_synth.c:214
+#: modules/process/lno_synth.c:267 modules/process/pat_synth.c:214
msgid "Ridges"
msgstr "Creste"
-#: modules/process/lno_synth.c:275
+#: modules/process/lno_synth.c:273
msgid "Generates various kinds of line noise."
msgstr "Generazione di vari tipi di segnale di fondo"
-#: modules/process/lno_synth.c:289
+#: modules/process/lno_synth.c:287
msgid "/S_ynthetic/_Line Noise..."
msgstr "/Sntetico/segnale di fondo..."
-#: modules/process/lno_synth.c:293
+#: modules/process/lno_synth.c:291
msgid "Generate line noise"
msgstr "Generazione linea di fondo"
-#: modules/process/lno_synth.c:431
+#: modules/process/lno_synth.c:429
msgid "Line Noise"
msgstr "Linea di fondo"
-#: modules/process/lno_synth.c:504
+#: modules/process/lno_synth.c:502
msgid "Distribution"
msgstr "Distribuzione"
-#: modules/process/lno_synth.c:514 modules/process/noise_synth.c:414
-msgid "Direction:"
-msgstr "Direzione:"
+#: modules/process/lno_synth.c:512 modules/process/mask_noisify.c:158
+#: modules/process/noise_synth.c:412
+#, fuzzy
+msgid "Noise type:"
+msgstr "Tipo _Noise:"
-#: modules/process/lno_synth.c:523 modules/process/noise_synth.c:423
+#: modules/process/lno_synth.c:521 modules/process/mask_noisify.c:167
+#: modules/process/noise_synth.c:421
msgid "S_ymmetrical"
msgstr "Simmetrico"
-#: modules/process/lno_synth.c:524 modules/process/noise_synth.c:424
+#: modules/process/lno_synth.c:522 modules/process/mask_noisify.c:168
+#: modules/process/noise_synth.c:422
msgid "One-sided _positive"
msgstr ""
-#: modules/process/lno_synth.c:525 modules/process/noise_synth.c:425
+#: modules/process/lno_synth.c:523 modules/process/mask_noisify.c:169
+#: modules/process/noise_synth.c:423
msgid "One-sided _negative"
msgstr ""
-#: modules/process/lno_synth.c:546
+#: modules/process/lno_synth.c:544
msgid "Noise Type"
msgstr "Tipo Noise"
-#: modules/process/lno_synth.c:551
+#: modules/process/lno_synth.c:549
msgid "_Noise type:"
msgstr "Tipo _Noise:"
-#: modules/process/lno_synth.c:853 modules/process/lno_synth.c:1222
-msgid "Densi_ty:"
-msgstr "Densi_tà:"
-
-#: modules/process/lno_synth.c:864 modules/process/lno_synth.c:1233
+#: modules/process/lno_synth.c:863 modules/process/lno_synth.c:1233
msgid "_Within line:"
msgstr "Internamente alla linea:"
-#: modules/process/lno_synth.c:871
+#: modules/process/lno_synth.c:870
msgid "C_umulative"
msgstr "C_umulativo"
@@ -11178,32 +11568,32 @@ msgstr ""
msgid "_Train logistic regression"
msgstr ""
-#: modules/process/logistic.c:275
+#: modules/process/logistic.c:274
msgid "_Gaussian blur"
msgstr ""
-#: modules/process/logistic.c:288
+#: modules/process/logistic.c:285
msgid "_Number of Gaussians:"
msgstr "_Numero di Gaussiane::"
-#: modules/process/logistic.c:296
+#: modules/process/logistic.c:293
msgid "_Sobel derivatives"
msgstr "Derivative di _Sobel:"
-#: modules/process/logistic.c:307
+#: modules/process/logistic.c:303
msgid "_Laplacian"
msgstr "_Laplaciano"
-#: modules/process/logistic.c:318
+#: modules/process/logistic.c:313
msgid "_Hessian"
msgstr "_Hessiana"
-#: modules/process/logistic.c:331
+#: modules/process/logistic.c:325
#, fuzzy
msgid "_Regularization parameter:"
msgstr "Parametri Simulazione"
-#: modules/process/logistic.c:623 modules/process/neural.c:1101
+#: modules/process/logistic.c:616 modules/process/neural.c:1108
msgid "Training..."
msgstr ""
@@ -11219,13 +11609,13 @@ msgstr "/_Correzione Dati/Maschera di valori non connessi"
msgid "Mark data disconnected from other values"
msgstr "Segna dati non connessi con altri valori"
-#: modules/process/mark_disconn.c:187 modules/process/obj_synth.c:422
-#: modules/process/scars.c:279
+#: modules/process/mark_disconn.c:187 modules/process/obj_synth.c:419
+#: modules/process/scars.c:297
msgid "Positive"
msgstr "Positivo"
-#: modules/process/mark_disconn.c:188 modules/process/obj_synth.c:423
-#: modules/process/scars.c:280
+#: modules/process/mark_disconn.c:188 modules/process/obj_synth.c:420
+#: modules/process/scars.c:298
msgid "Negative"
msgstr "Negativo"
@@ -11241,11 +11631,11 @@ msgstr "Tipo difetto::"
msgid "Defect _radius:"
msgstr "raggio del difetto:"
-#: modules/process/mark_disconn.c:563
+#: modules/process/mark_disconn.c:552
msgid "Filtering..."
msgstr "Filtrazione..."
-#: modules/process/mark_disconn.c:590
+#: modules/process/mark_disconn.c:579
msgid "Marking outliers..."
msgstr "Marcatura valori anomali"
@@ -11261,55 +11651,59 @@ msgstr "/_Maschera/Segna con"
msgid "Mask combining and modification"
msgstr "Combinazione e modifica maschere"
-#: modules/process/mark_with.c:192
+#: modules/process/mark_with.c:193
msgid "Mark With"
msgstr "Segna con"
-#: modules/process/mark_with.c:238
-msgid "Se_t mask"
-msgstr "Assegna maschera"
-
+#: modules/process/mark_with.c:231 modules/process/mask_morph.c:209
+msgid "Operation:"
+msgstr "Operazione:"
+
#: modules/process/mark_with.c:239
+msgid "Se_t mask"
+msgstr "Assegna maschera"
+
+#: modules/process/mark_with.c:240
msgid "_Add mask"
msgstr "_Aggiungi Maschera"
-#: modules/process/mark_with.c:240
+#: modules/process/mark_with.c:241
msgid "_Subtract mask"
msgstr "_Sottrai maschera"
-#: modules/process/mark_with.c:241
+#: modules/process/mark_with.c:242
msgid "_Intersect masks"
msgstr "_Interseca maschere"
-#: modules/process/mark_with.c:247
+#: modules/process/mark_with.c:248
msgid "Mark with:"
msgstr "Segna con:"
-#: modules/process/mark_with.c:255
+#: modules/process/mark_with.c:256
msgid "with|_Mask"
msgstr "con|_Maschera"
-#: modules/process/mark_with.c:257
+#: modules/process/mark_with.c:258
msgid "with|_Data"
msgstr "con|_Dati"
-#: modules/process/mark_with.c:259
+#: modules/process/mark_with.c:260
msgid "with|_Presentation"
msgstr "con|_Presentazione"
-#: modules/process/mark_with.c:293
+#: modules/process/mark_with.c:297
msgid "Marked data range:"
msgstr "Intervallo dati segnato:"
-#: modules/process/mark_with.c:301
+#: modules/process/mark_with.c:305
msgid "_Minimum:"
msgstr "_Minimo:"
-#: modules/process/mark_with.c:310
+#: modules/process/mark_with.c:314
msgid "M_aximum:"
msgstr "M_assimo:"
-#: modules/process/mark_with.c:378
+#: modules/process/mark_with.c:382
msgid "Operand"
msgstr "Operando"
@@ -11345,107 +11739,108 @@ msgstr "Distribuisci a:"
msgid "Preserve existing masks"
msgstr "Mantieni maschere esistenti"
-#: modules/process/mask_edt.c:95
+#: modules/process/mask_edt.c:89
msgid "Performs simple and true Euclidean distance transforms of masks."
msgstr "Esegue una semplice trasformata distanza Euclidea di maschere"
-#: modules/process/mask_edt.c:109
+#: modules/process/mask_edt.c:103
msgid "/_Mask/Distanc_e Transform..."
msgstr "/_Maschere/_Trasformata Distanza..."
-#: modules/process/mask_edt.c:113
+#: modules/process/mask_edt.c:107
msgid "Distance transform of mask"
msgstr "Trasformata distanza di maschera"
-#: modules/process/mask_edt.c:116
+#: modules/process/mask_edt.c:110
msgid "/_Mask/Thi_n"
msgstr "/_Maschera/Sottile"
-#: modules/process/mask_edt.c:120
+#: modules/process/mask_edt.c:114
msgid "Thin mask"
msgstr "Maschera sottile"
-#: modules/process/mask_edt.c:330 modules/process/mask_edt.c:352
+#: modules/process/mask_edt.c:164 modules/process/mask_edt.c:186
msgid "Distance Transform"
msgstr "Trasformata Distanza"
-#: modules/process/mask_edt.c:340
+#: modules/process/mask_edt.c:174
msgid "Interior"
msgstr "Interno"
-#: modules/process/mask_edt.c:341
+#: modules/process/mask_edt.c:175
msgid "Exterior"
msgstr "Esterno"
-#: modules/process/mask_edt.c:342
+#: modules/process/mask_edt.c:176
msgid "Two-sided"
msgstr ""
-#: modules/process/mask_edt.c:373 modules/tools/maskedit.c:634
+#: modules/process/mask_edt.c:207 modules/tools/maskedit.c:640
msgid "_Distance type:"
msgstr "Tipo _Distanza:"
-#: modules/process/mask_edt.c:394 modules/tools/maskedit.c:640
+#: modules/process/mask_edt.c:228 modules/tools/maskedit.c:646
msgid "Shrink from _border"
msgstr "Rimpicciolisci dal margine"
-#: modules/process/mask_morph.c:117
+#: modules/process/mask_morph.c:116
msgid "Performs basic morphological operations with masks."
msgstr "Esegue operazioni morfologiche di base con maschere"
-#: modules/process/mask_morph.c:131
-msgid "/_Mask/Morphological Operation..."
+#: modules/process/mask_morph.c:130
+#, fuzzy
+msgid "/_Mask/Morpho_logical Operation..."
msgstr "/_Maschera/Operazione morfologica..."
-#: modules/process/mask_morph.c:135
+#: modules/process/mask_morph.c:134
msgid "Morphological operation with mask"
msgstr "operazione morfologica con maschera"
-#: modules/process/mask_morph.c:169
+#: modules/process/mask_morph.c:168
msgid "Erosion"
msgstr "Erosione"
-#: modules/process/mask_morph.c:170
+#: modules/process/mask_morph.c:169
msgid "Dilation"
msgstr "Dilatazione"
-#: modules/process/mask_morph.c:171 modules/tools/filter.c:242
+#: modules/process/mask_morph.c:170 modules/tools/filter.c:243
msgid "filter|Opening"
msgstr "filtro|Apertura"
-#: modules/process/mask_morph.c:172 modules/tools/filter.c:243
+#: modules/process/mask_morph.c:171 modules/tools/filter.c:244
msgid "filter|Closing"
msgstr "filtro|Chiusura"
-#: modules/process/mask_morph.c:173 modules/tools/filter.c:244
+#: modules/process/mask_morph.c:172 modules/tools/filter.c:245
msgid "ASF Opening"
msgstr "Apertura ASF"
-#: modules/process/mask_morph.c:174 modules/tools/filter.c:245
+#: modules/process/mask_morph.c:173 modules/tools/filter.c:246
msgid "ASF Closing"
msgstr "Chiusura ASF"
-#: modules/process/mask_morph.c:178
+#: modules/process/mask_morph.c:177
msgid "Octagon"
msgstr "Ottagono"
-#: modules/process/mask_morph.c:181
+#: modules/process/mask_morph.c:180
msgid "Another mask"
msgstr "Altra maschera"
-#: modules/process/mask_morph.c:192
+#: modules/process/mask_morph.c:191
msgid "Morphological Operation"
msgstr "Operazione Morfologica"
-#: modules/process/mask_morph.c:224
+#: modules/process/mask_morph.c:223
msgid "Structuring element:"
msgstr "Elemento strutturante:"
-#: modules/process/mask_morph.c:238 modules/tools/maskedit.c:524
+#: modules/process/mask_morph.c:237 modules/tools/maskedit.c:528
msgid "_Radius:"
msgstr "_Raggio:"
-#: modules/process/mask_morph.c:249
+#: modules/process/mask_morph.c:248
msgid "_Mask:"
msgstr "_Maschera:"
@@ -11453,39 +11848,62 @@ msgstr "_Maschera:"
msgid "_Trim empty borders"
msgstr "_Taglia margini vuoti"
-#: modules/process/maskcor.c:86
+#: modules/process/mask_noisify.c:83
+msgid "Adds salt and/or pepper noise to mask."
+msgstr ""
+
+#: modules/process/mask_noisify.c:97
+#, fuzzy
+msgid "/_Mask/_Noisify..."
+msgstr "/Maschere/_Distribuzione..."
+
+#: modules/process/mask_noisify.c:101
+#, fuzzy
+msgid "Add noise to mask"
+msgstr "Aggiungi selezione alla maschera"
+
+#: modules/process/mask_noisify.c:141
+msgid "Noisify Mask"
+msgstr ""
+
+#: modules/process/mask_noisify.c:184
+#, fuzzy
+msgid "_Alter only boundaries"
+msgstr "Usa confini"
+
+#: modules/process/maskcor.c:87
msgid "Creates mask by correlation with another data."
msgstr "Crea una maschera per correlazione con altri dati"
-#: modules/process/maskcor.c:100
+#: modules/process/maskcor.c:101
msgid "/M_ultidata/_Mask by Correlation..."
msgstr "/Dati _Multipli/_Maschera di Correlazione..."
-#: modules/process/maskcor.c:104
+#: modules/process/maskcor.c:105
msgid "Create mask by correlation with another data"
msgstr "Crea maschera da correlazione con altri dati"
-#: modules/process/maskcor.c:141
+#: modules/process/maskcor.c:142
msgid "Mask by Correlation"
msgstr "Maschera di Correlazione"
-#: modules/process/maskcor.c:165
+#: modules/process/maskcor.c:166
msgid "Correlation _kernel:"
msgstr "Correlazione_Kernel:"
-#: modules/process/maskcor.c:172
+#: modules/process/maskcor.c:173
msgid "Objects marked"
msgstr "Oggetti segnati"
-#: modules/process/maskcor.c:173
+#: modules/process/maskcor.c:174
msgid "Correlation maxima"
msgstr "Correlazione massima"
-#: modules/process/maskcor.c:174 modules/process/maskcor.c:356
+#: modules/process/maskcor.c:175 modules/process/maskcor.c:360
msgid "Correlation score"
msgstr "Percentuale di Correlazione "
-#: modules/process/maskcor.c:183
+#: modules/process/maskcor.c:185
msgid "Correlation _method:"
msgstr "Metodo Correlazione:"
@@ -11514,7 +11932,8 @@ msgid "/_Mask/_Extract Mask"
msgstr "/_Maschere/_Estrae Maschera"
#: modules/process/maskops.c:78
-msgid "Extract mask to a new channel"
+#, fuzzy
+msgid "Extract mask to a new image"
msgstr "Estrazione maschera in nuovo canale"
#: modules/process/maskops.c:81
@@ -11541,35 +11960,31 @@ msgstr "Taglio regioni non intersecanti di due immagini"
msgid "Mutual Crop"
msgstr "Taglio reciproco"
-#: modules/process/mcrop.c:174
+#: modules/process/mcrop.c:173
msgid "_Select second argument:"
msgstr "_Seleziona secondo argomento:"
-#: modules/process/measure_lattice.c:174
+#: modules/process/measure_lattice.c:165
msgid "Measures parameters of two-dimensional lattices."
msgstr "Misurazione parametri di reticoli bidimensionali"
-#: modules/process/measure_lattice.c:188
+#: modules/process/measure_lattice.c:179
msgid "/_Statistics/Measure _Lattice..."
msgstr "/_Statistica/Misura Reticolo..."
-#: modules/process/measure_lattice.c:192
+#: modules/process/measure_lattice.c:183
msgid "Measure lattice"
msgstr "Misura reticolo"
-#: modules/process/measure_lattice.c:253
+#: modules/process/measure_lattice.c:243
msgid "Measure Lattice"
msgstr "Misura Reticolo"
-#: modules/process/measure_lattice.c:259
-msgid "_Refine"
-msgstr "_Raffina"
-
-#: modules/process/measure_lattice.c:330
+#: modules/process/measure_lattice.c:320
msgid "_ACF"
msgstr "_ACF"
-#: modules/process/measure_lattice.c:331
+#: modules/process/measure_lattice.c:321
msgid "_PSDF"
msgstr "_PSDF"
@@ -11585,30 +12000,30 @@ msgstr "Reticolo:"
msgid "_Vectors"
msgstr "_vettori"
-#: modules/process/measure_lattice.c:596
+#: modules/process/measure_lattice.c:589
msgid "Save Lattice Parameters"
msgstr "Salva Parametri Reticolo"
-#: modules/process/measure_lattice.c:634
+#: modules/process/measure_lattice.c:627
#, c-format
msgid "Vector %d:"
msgstr "Vettore %d:"
-#: modules/process/measure_lattice.c:643
+#: modules/process/measure_lattice.c:636
#, c-format
msgid "Length %d:"
msgstr "Lunghezza %d:"
-#: modules/process/measure_lattice.c:650
+#: modules/process/measure_lattice.c:643
#, c-format
msgid "Angle %d:"
msgstr "Angolo %d:"
-#: modules/process/measure_lattice.c:665
+#: modules/process/measure_lattice.c:657
msgid "Angle:"
msgstr "Angolo:"
-#: modules/process/measure_lattice.c:681
+#: modules/process/measure_lattice.c:673
msgid "Lattice Parameters"
msgstr "Parametri reticolo"
@@ -11632,11 +12047,11 @@ msgstr "Livellamento mediano..."
msgid "Median Level"
msgstr "Livella Mediano"
-#: modules/process/median-bg.c:199 modules/process/sphere-revolve.c:237
+#: modules/process/median-bg.c:199 modules/process/sphere-revolve.c:336
msgid "Real _radius:"
msgstr "Raggio _reale:"
-#: modules/process/median-bg.c:209 modules/process/sphere-revolve.c:247
+#: modules/process/median-bg.c:209 modules/process/sphere-revolve.c:346
msgid "_Pixel radius:"
msgstr "_Pixel raggio:"
@@ -11676,7 +12091,7 @@ msgstr "Primo operando"
msgid "Second operand"
msgstr "Secondo operando"
-#: modules/process/merge.c:197 modules/xyz/xyz_raster.c:643
+#: modules/process/merge.c:197 modules/xyz/xyz_raster.c:612
msgid "Average"
msgstr "Media"
@@ -11728,6 +12143,245 @@ msgstr "Aggiunta maschera di pixel esterni"
msgid "Merged images"
msgstr "Immagini unite"
+#: modules/process/mfm_current.c:163
+msgid "Simulation of current line magnetic field"
+msgstr ""
+
+#: modules/process/mfm_current.c:177
+msgid "/SPM M_odes/_MFM/_Current Line Field..."
+msgstr ""
+
+#: modules/process/mfm_current.c:181
+msgid "Simulate stray field above current line"
+msgstr ""
+
+#: modules/process/mfm_current.c:280 modules/process/mfm_parallel.c:282
+msgid "Simulated field"
+msgstr ""
+
+#: modules/process/mfm_current.c:322 modules/process/mfm_field.c:266
+#: modules/process/mfm_parallel.c:324
+#, fuzzy
+msgid "Point charge"
+msgstr "Punta in una direzione qualunque"
+
+#: modules/process/mfm_current.c:323 modules/process/mfm_field.c:267
+#: modules/process/mfm_parallel.c:325
+#, fuzzy
+msgid "Bar"
+msgstr "Binari"
+
+#: modules/process/mfm_current.c:330
+msgid "Current Line Stray Field"
+msgstr ""
+
+#: modules/process/mfm_current.c:415
+msgid "Output"
+msgstr "Output"
+
+#: modules/process/mfm_current.c:420 modules/process/mfm_field.c:320
+#: modules/process/mfm_parallel.c:415
+#, fuzzy
+msgid "_Output plane height:"
+msgstr "Tipo Output: "
+
+#: modules/process/mfm_current.c:428
+#, fuzzy
+msgid "_Stripe width:"
+msgstr "Larghezza _Pendenza:"
+
+#: modules/process/mfm_current.c:436
+#, fuzzy
+msgid "Stripe _current:"
+msgstr "Striscia %u: "
+
+#: modules/process/mfm_current.c:444
+#, fuzzy
+msgid "_Position:"
+msgstr "Posizione:"
+
+#: modules/process/mfm_current.c:461
+msgid "Probe"
+msgstr ""
+
+#: modules/process/mfm_current.c:469
+#, fuzzy
+msgid "P_robe type:"
+msgstr "Tipo _Noise:"
+
+#: modules/process/mfm_current.c:475 modules/process/mfm_field.c:389
+#: modules/process/mfm_parallel.c:482
+#, fuzzy
+msgid "Tip _magnetization:"
+msgstr "Rotazione Punta"
+
+#: modules/process/mfm_current.c:484 modules/process/mfm_field.c:397
+#: modules/process/mfm_parallel.c:491
+#, fuzzy
+msgid "Bar width _x:"
+msgstr "Larghezza margine:"
+
+#: modules/process/mfm_current.c:493 modules/process/mfm_field.c:405
+#: modules/process/mfm_parallel.c:500
+#, fuzzy
+msgid "Bar width _y:"
+msgstr "Larghezza margine:"
+
+#: modules/process/mfm_current.c:502 modules/process/mfm_field.c:413
+#: modules/process/mfm_parallel.c:509
+msgid "Bar length (_z):"
+msgstr ""
+
+#: modules/process/mfm_field.c:146
+msgid "Simulation of magnetic field above perpendicular media"
+msgstr ""
+
+#: modules/process/mfm_field.c:160
+msgid "/SPM M_odes/_MFM/_Perpendicular Media Field..."
+msgstr ""
+
+#: modules/process/mfm_field.c:164
+msgid "Compute stray field above perpendicular magnetic medium"
+msgstr ""
+
+#: modules/process/mfm_field.c:276
+msgid "Perpendicular Media Stray Field"
+msgstr ""
+
+#: modules/process/mfm_field.c:328 modules/process/mfm_parallel.c:423
+#, fuzzy
+msgid "_Film thickness:"
+msgstr "Spessore cornice:"
+
+#: modules/process/mfm_field.c:336
+msgid "_Magnetic charge:"
+msgstr ""
+
+#: modules/process/mfm_field.c:344
+msgid "Include domain _walls"
+msgstr ""
+
+#: modules/process/mfm_field.c:354
+#, fuzzy
+msgid "_Exchange constant:"
+msgstr "Costante casuale"
+
+#: modules/process/mfm_field.c:362
+#, fuzzy
+msgid "_Uniaxial anisotropy:"
+msgstr "DWT Anisotropa"
+
+#: modules/process/mfm_field.c:383 modules/process/mfm_parallel.c:476
+#, fuzzy
+msgid "_Probe type:"
+msgstr "Tipo _Noise:"
+
+#: modules/process/mfm_findshift.c:88
+msgid "Lift height difference estimation from data blur"
+msgstr ""
+
+#: modules/process/mfm_findshift.c:102
+msgid "/SPM M_odes/_MFM/_Estimate Shift in Z..."
+msgstr ""
+
+#: modules/process/mfm_findshift.c:106
+msgid "Estimate lift height difference in MFM data"
+msgstr ""
+
+#: modules/process/mfm_findshift.c:166 modules/process/psf.c:340
+#, fuzzy
+msgid "Searching..."
+msgstr "Inizio...."
+
+#: modules/process/mfm_findshift.c:196
+#, fuzzy
+msgid "Estimated shift:"
+msgstr "Punta stimata"
+
+#: modules/process/mfm_findshift.c:211
+#, fuzzy
+msgid "Shifted field difference"
+msgstr "Mediana delle differenze"
+
+#: modules/process/mfm_findshift.c:228
+msgid "Estimate Lift Height Shift"
+msgstr ""
+
+#: modules/process/mfm_findshift.c:255
+#, fuzzy
+msgid "Data to compare:"
+msgstr "Formato dati:"
+
+#: modules/process/mfm_findshift.c:261
+#, fuzzy
+msgid "Search _from:"
+msgstr "Intervallo Ricerca:"
+
+#: modules/process/mfm_findshift.c:269
+#, fuzzy
+msgid "Search _to:"
+msgstr "Intervallo Ricerca:"
+
+#: modules/process/mfm_parallel.c:165
+#, fuzzy
+msgid "Simulation of parallel magnetic media"
+msgstr "Parametri Simulazione"
+
+#: modules/process/mfm_parallel.c:179
+msgid "/SPM M_odes/_MFM/Para_llel Media Field..."
+msgstr ""
+
+#: modules/process/mfm_parallel.c:183
+msgid "Simulate stray field above parallel magnetic medium"
+msgstr ""
+
+#: modules/process/mfm_parallel.c:331
+msgid "Parallel Media Stray Field"
+msgstr ""
+
+#: modules/process/mfm_parallel.c:431
+#, fuzzy
+msgid "_Remanent magnetization:"
+msgstr "Rotazione Punta"
+
+#: modules/process/mfm_parallel.c:439
+msgid "Size _A (dir. left):"
+msgstr ""
+
+#: modules/process/mfm_parallel.c:447
+msgid "Size _B (dir. right):"
+msgstr ""
+
+#: modules/process/mfm_parallel.c:455
+#, fuzzy
+msgid "_Gap size:"
+msgstr "Dimensioni campione:"
+
+#: modules/process/mfm_shift.c:87
+msgid "Simulation of magnetic field z component change for another level"
+msgstr ""
+
+#: modules/process/mfm_shift.c:101
+msgid "/SPM M_odes/_MFM/_Field Shift in Z..."
+msgstr ""
+
+#: modules/process/mfm_shift.c:105
+msgid "Compute stray field shift for another z level"
+msgstr ""
+
+#: modules/process/mfm_shift.c:146
+msgid "Shifted field"
+msgstr ""
+
+#: modules/process/mfm_shift.c:164
+msgid "Stray Field Plane Shift"
+msgstr ""
+
+#: modules/process/mfm_shift.c:209
+#, fuzzy
+msgid "_Z shift by:"
+msgstr "Z shi_ft:"
+
#: modules/process/nanoindent_adjust.c:89
msgid "Adjust images of two indentor prints."
msgstr "Aggiusta le immagini di due impronte di indentazione"
@@ -11764,14 +12418,14 @@ msgstr "_Ruota dati"
msgid "E_xtrapolate result data out of measured range"
msgstr "E_strapola i dati risultanti al di fuori dell'intervallo di misura"
-#: modules/process/nanoindent_adjust.c:295
+#: modules/process/nanoindent_adjust.c:296
msgid ""
"Tip has different range/resolution ratio than image. Tip will be resampled."
msgstr ""
"La punta ha un rapporto range/risoluzione differente dall'immagine e verrà "
"ricampionata"
-#: modules/process/nanoindent_adjust.c:334
+#: modules/process/nanoindent_adjust.c:335
msgid "Immersed detail data"
msgstr "Dati dettaglio fuso"
@@ -11812,245 +12466,235 @@ msgstr "errore di addestramento"
msgid "error"
msgstr "errore"
-#: modules/process/neural.c:503
+#: modules/process/neural.c:504
msgid "NN training error"
msgstr "NN errore di addestramento"
-#: modules/process/neural.c:516
+#: modules/process/neural.c:517
msgid "Training"
msgstr "Addestramento"
-#: modules/process/neural.c:520
+#: modules/process/neural.c:521
msgid "_Model:"
msgstr "_Modello:"
-#: modules/process/neural.c:530
+#: modules/process/neural.c:532
msgid "_Signal:"
msgstr "_Segnale"
-#: modules/process/neural.c:541
+#: modules/process/neural.c:544
msgid "Training ste_ps:"
msgstr "stadi addestramento:"
-#: modules/process/neural.c:557
+#: modules/process/neural.c:561
msgid "Model"
msgstr "Modello"
-#: modules/process/neural.c:558
+#: modules/process/neural.c:562
msgid "Signal"
msgstr "Segnale"
-#: modules/process/neural.c:575
+#: modules/process/neural.c:579
msgid "verb|_Train"
msgstr ""
-#: modules/process/neural.c:580
+#: modules/process/neural.c:584
msgid "Re_initialize"
msgstr "Ri_Inizializzazione"
-#: modules/process/neural.c:613
+#: modules/process/neural.c:617
msgid "Network"
msgstr "Rete"
-#: modules/process/neural.c:619
+#: modules/process/neural.c:623
msgid "Window _width:"
msgstr "Larghezza finestra:"
-#: modules/process/neural.c:627
+#: modules/process/neural.c:631
msgid "Window h_eight:"
msgstr "Altezza finestra:"
-#: modules/process/neural.c:635
+#: modules/process/neural.c:639
msgid "_Hidden nodes:"
msgstr "Nodi nascosti:"
-#: modules/process/neural.c:643
+#: modules/process/neural.c:647
msgid "Result Units"
msgstr ""
-#: modules/process/neural.c:650
+#: modules/process/neural.c:654
msgid "Power of source _XY:"
msgstr "Potenza della sorgente _XY:"
-#: modules/process/neural.c:658
+#: modules/process/neural.c:663
msgid "Power of source _Z:"
msgstr "Potenza sorgente _Z:"
-#: modules/process/neural.c:666
+#: modules/process/neural.c:672
msgid "_Fixed units:"
msgstr "Unità Fissate_"
-#: modules/process/neural.c:676
+#: modules/process/neural.c:683
msgid "Networks"
msgstr "Reti"
-#: modules/process/neural.c:723
+#: modules/process/neural.c:730
msgid "Network _name:"
msgstr "_Nome rete:"
-#: modules/process/neural.c:775
+#: modules/process/neural.c:782
msgid "Apply Neural Network"
msgstr "Applica Rete Neurale"
-#: modules/process/neural.c:798
+#: modules/process/neural.c:805
msgid "_Scale proportionally to input"
msgstr "_Scala proporzionalmente al valore in ingresso"
-#: modules/process/neural.c:929
+#: modules/process/neural.c:936
msgid "Model and signal are not compatible."
msgstr "Modello e segnale non sono compatibili"
-#: modules/process/neural.c:937
+#: modules/process/neural.c:944
msgid "A field dimension is too small for chosen window size."
msgstr "Una dimensione di campo è troppo piccola per la finestra scelta"
-#: modules/process/neural.c:1183 modules/process/neural.c:1349
+#: modules/process/neural.c:1190 modules/process/neural.c:1356
msgid "Evaluating..."
msgstr "Valutazione..."
-#: modules/process/neural.c:1309
+#: modules/process/neural.c:1316
msgid "Training was canceled."
msgstr "Addestramento cancellato"
-#: modules/process/neural.c:1319
+#: modules/process/neural.c:1326
#, c-format
msgid "Mean difference: %.*f %s"
msgstr "Differenza media: %.*f %s"
-#: modules/process/neural.c:1371
+#: modules/process/neural.c:1378
msgid "Evaluated signal"
msgstr "Segnale stimato"
-#: modules/process/noise_synth.c:196
+#: modules/process/noise_synth.c:194
msgid "Generates uncorrelated random noise."
msgstr "Genera rumore casuale non correlato"
-#: modules/process/noise_synth.c:210
+#: modules/process/noise_synth.c:208
msgid "/S_ynthetic/_Noise..."
msgstr "/_Sintetico/Rumore..."
-#: modules/process/noise_synth.c:214
+#: modules/process/noise_synth.c:212
msgid "Generate surface of uncorrelated noise"
msgstr "Generazione superficie di rumore non correlato"
-#: modules/process/noise_synth.c:334
+#: modules/process/noise_synth.c:332
msgid "Random Noise"
msgstr "Rumore casuale"
-#: modules/process/obj_synth.c:274
+#: modules/process/obj_synth.c:270
msgid "Spheres"
msgstr "Sfere"
-#: modules/process/obj_synth.c:275
+#: modules/process/obj_synth.c:271
msgid "Boxes"
msgstr ""
-#: modules/process/obj_synth.c:276
+#: modules/process/obj_synth.c:272
msgid "Cones"
msgstr "Coni"
-#: modules/process/obj_synth.c:277
+#: modules/process/obj_synth.c:273
msgid "Pyramids"
msgstr "Piramidi"
-#: modules/process/obj_synth.c:278
+#: modules/process/obj_synth.c:274
msgid "Diamonds"
msgstr "Rombi"
-#: modules/process/obj_synth.c:279
+#: modules/process/obj_synth.c:275
msgid "Tetrahedrons"
msgstr "Tetraedri"
-#: modules/process/obj_synth.c:280
+#: modules/process/obj_synth.c:276
msgid "Nuggets"
msgstr ""
-#: modules/process/obj_synth.c:281
+#: modules/process/obj_synth.c:277
msgid "Thatches"
msgstr ""
-#: modules/process/obj_synth.c:282
+#: modules/process/obj_synth.c:278
msgid "Tents"
msgstr ""
-#: modules/process/obj_synth.c:283
+#: modules/process/obj_synth.c:279
msgid "Gaussians"
msgstr "Gaussiane"
-#: modules/process/obj_synth.c:284
+#: modules/process/obj_synth.c:280
msgid "Doughnuts"
msgstr ""
-#: modules/process/obj_synth.c:285
+#: modules/process/obj_synth.c:281
#, fuzzy
msgid "Parabolic bumps"
msgstr "Passo parabolico"
-#: modules/process/obj_synth.c:291
+#: modules/process/obj_synth.c:287
msgid "Generates randomly patterned surfaces by placing objects."
msgstr "Generazione casuali superfici dal posizionamento di oggetti"
-#: modules/process/obj_synth.c:305
-msgid "/S_ynthetic/_Objects..."
+#: modules/process/obj_synth.c:301
+#, fuzzy
+msgid "/S_ynthetic/_Deposition/_Objects..."
msgstr "/Sintetico/_Oggetti..."
-#: modules/process/obj_synth.c:309
+#: modules/process/obj_synth.c:305
msgid "Generate surface of randomly placed objects"
msgstr "Generazione superficie di oggetti collocati casualmente"
-#: modules/process/obj_synth.c:424
+#: modules/process/obj_synth.c:421
msgid "Both (random)"
msgstr "Entrambi (casuale)"
-#: modules/process/obj_synth.c:439
+#: modules/process/obj_synth.c:436
msgid "Random Objects"
msgstr "Oggetti casuali"
-#: modules/process/obj_synth.c:513
-msgid "_Shape:"
-msgstr "Figura:"
-
-#: modules/process/obj_synth.c:531
-msgid "obj."
-msgstr "obj."
-
-#: modules/process/obj_synth.c:551
+#: modules/process/obj_synth.c:549
msgid "Aspect Ratio"
msgstr "Proporzioni"
-#: modules/process/obj_synth.c:558
+#: modules/process/obj_synth.c:556
msgid "_Aspect ratio:"
msgstr "Proporzioni"
-#: modules/process/obj_synth.c:588
+#: modules/process/obj_synth.c:586
msgid "Scales _with size"
msgstr "Scala con dimensioni"
-#: modules/process/obj_synth.c:612
+#: modules/process/obj_synth.c:611
msgid "_Feature type:"
msgstr "_Tipo Caratteristica:"
-#: modules/process/obj_synth.c:807
-msgid "_Truncate:"
-msgstr "_Truncato:"
-
-#: modules/process/otsu_threshold.c:39 modules/process/otsu_threshold.c:59
+#: modules/process/otsu_threshold.c:40 modules/process/otsu_threshold.c:60
msgid "Automated threshold using Otsu's method on heights."
msgstr "Soglia automatica utilizzando il metodo di Otsu sulle altezze"
-#: modules/process/otsu_threshold.c:55
-msgid "/_Grains/_Mark by Otsu's..."
+#: modules/process/otsu_threshold.c:56
+#, fuzzy
+msgid "/_Grains/_Mark by Otsu's"
msgstr "/_Grani/Segna per Otsu's..."
-#: modules/process/outliers.c:40
+#: modules/process/outliers.c:41
msgid "Creates mask of outliers."
msgstr "Crea maschera di outliers."
-#: modules/process/outliers.c:54
+#: modules/process/outliers.c:55
msgid "/_Correct Data/Mask of _Outliers"
msgstr "/_Correzione Dati/Maschera di _Outliers"
-#: modules/process/outliers.c:58
+#: modules/process/outliers.c:59
msgid "Mark data farther than 3σ from mean value"
msgstr "Segna dati più lontani di 3σ dal valore medio"
@@ -12075,80 +12719,104 @@ msgstr "Schema"
msgid "_Pattern:"
msgstr "Schema:"
-#: modules/process/pat_synth.c:812
+#: modules/process/pat_synth.c:813
msgid "Flat"
msgstr "Piatto"
-#: modules/process/pat_synth.c:820
+#: modules/process/pat_synth.c:821
msgid "_Flat width:"
msgstr ""
-#: modules/process/pat_synth.c:837 modules/process/pat_synth.c:1139
-#: modules/process/pat_synth.c:1474
+#: modules/process/pat_synth.c:838 modules/process/pat_synth.c:1140
+#: modules/process/pat_synth.c:1475
msgid "_Slope width:"
msgstr "Larghezza _Pendenza:"
-#: modules/process/pat_synth.c:1099
+#: modules/process/pat_synth.c:1100
msgid "Top"
msgstr "Sopra"
-#: modules/process/pat_synth.c:1106
+#: modules/process/pat_synth.c:1107
msgid "Flat _top width:"
msgstr ""
-#: modules/process/pat_synth.c:1114
+#: modules/process/pat_synth.c:1115
msgid "Bottom"
msgstr ""
-#: modules/process/pat_synth.c:1122
+#: modules/process/pat_synth.c:1123
msgid "Flat _bottom width:"
msgstr ""
-#: modules/process/pat_synth.c:1440
+#: modules/process/pat_synth.c:1441
msgid "_Distance:"
msgstr "_Distanza:"
-#: modules/process/pid.c:96
+#: modules/process/phase_synth.c:136
+#, fuzzy
+msgid "Generates phase-separated structures."
+msgstr "Generazione superficie con schema"
+
+#: modules/process/phase_synth.c:150
+#, fuzzy
+msgid "/S_ynthetic/P_hases..."
+msgstr "/Sintetico/Onde ..."
+
+#: modules/process/phase_synth.c:154
+#, fuzzy
+msgid "Generate surface with separated phases"
+msgstr "Generazione superficie di rumore non correlato"
+
+#: modules/process/phase_synth.c:203
+#, fuzzy
+msgid "Separated Phases"
+msgstr "Curve _Separate"
+
+#: modules/process/phase_synth.c:287
+msgid "Size s_pread:"
+msgstr ""
+
+#: modules/process/pid.c:95
msgid "A simple PID simulator"
msgstr "Un semplice simulatore PID"
-#: modules/process/pid.c:110
+#: modules/process/pid.c:109
msgid "/_Tip and Indentation/_PID simulation..."
msgstr "/Punta e Indentazione/Simulazione PID..."
-#: modules/process/pid.c:114
+#: modules/process/pid.c:113
msgid "Simulate PID effects on measurement"
msgstr "Simulazione effetti PID sulla misura"
-#: modules/process/pid.c:158
+#: modules/process/pid.c:157
msgid "PID FW result"
msgstr ""
-#: modules/process/pid.c:167
+#: modules/process/pid.c:166
msgid "PID FW max. force"
msgstr ""
-#: modules/process/pid.c:176
+#: modules/process/pid.c:175
msgid "PID REV result"
msgstr ""
-#: modules/process/pid.c:185
+#: modules/process/pid.c:184
msgid "PID REV max. force"
msgstr ""
-#: modules/process/pid.c:198
+#: modules/process/pid.c:196
msgid "PID simulation"
msgstr ""
-#: modules/process/pid.c:215
+#: modules/process/pid.c:214
msgid "_Proportional:"
msgstr "_proporzionale:"
-#: modules/process/pid.c:221
+#: modules/process/pid.c:220
msgid "_Integral:"
msgstr "_Integrale:"
-#: modules/process/pid.c:227
+#: modules/process/pid.c:226
msgid "_Integration steps:"
msgstr ""
@@ -12156,15 +12824,15 @@ msgstr ""
msgid "_Derivative:"
msgstr "_derivativo:"
-#: modules/process/pid.c:241
+#: modules/process/pid.c:240
msgid "PID/scan speed _ratio:"
msgstr ""
-#: modules/process/pid.c:253
+#: modules/process/pid.c:255
msgid "Force strength:"
msgstr "Intensità forza:"
-#: modules/process/pid.c:259
+#: modules/process/pid.c:261
msgid "Force setpoint:"
msgstr ""
@@ -12172,7 +12840,7 @@ msgstr ""
msgid "Scanning..."
msgstr "Scansione..."
-#: modules/process/pid.c:396
+#: modules/process/pid.c:401
msgid "Computation diverged, try to change parameters"
msgstr ""
@@ -12192,23 +12860,23 @@ msgstr "Applica distorsione polinomiale nel piano orizzontal"
msgid "Distort by Polynomial"
msgstr "Distorsione polinomiale"
-#: modules/process/polydistort.c:282
+#: modules/process/polydistort.c:285
msgid "Ori_ginal"
msgstr "Originale"
-#: modules/process/polydistort.c:283
+#: modules/process/polydistort.c:286
msgid "_Transformed"
msgstr "_Trasformato"
-#: modules/process/polydistort.c:289
+#: modules/process/polydistort.c:292
msgid "X Coefficients"
msgstr "Coefficienti X "
-#: modules/process/polydistort.c:303
+#: modules/process/polydistort.c:306
msgid "Y Coefficients"
msgstr "Coefficienti Y"
-#: modules/process/polydistort.c:499
+#: modules/process/polydistort.c:502
msgid "Distorted"
msgstr "Distorti"
@@ -12244,23 +12912,23 @@ msgstr "Dati livellati"
msgid "_Horizontal polynom degree:"
msgstr "Grado polinomio orizzontale:"
-#: modules/process/polylevel.c:450
+#: modules/process/polylevel.c:451
msgid "_Vertical polynom degree:"
msgstr "Grado polinomio verticale:"
-#: modules/process/polylevel.c:456
+#: modules/process/polylevel.c:458
msgid "_Same degrees"
msgstr "Gradi uguali"
-#: modules/process/polylevel.c:474
+#: modules/process/polylevel.c:476
msgid "_Maximum polynom degree:"
msgstr "Grado massimo polinomio:"
-#: modules/process/polylevel.c:561
+#: modules/process/polylevel.c:564
msgid "Polynomial Coefficients"
msgstr "Coefficienti Polinomiali"
-#: modules/process/polylevel.c:934 modules/tools/distance.c:594
+#: modules/process/polylevel.c:937 modules/tools/distance.c:594
#: modules/tools/selectionmanager.c:720
msgid "Save Table"
msgstr "Salva tavola"
@@ -12282,7 +12950,8 @@ msgid "/_Presentation/E_xtract Presentation"
msgstr "/_Presentazione/E_strazione Presentazione"
#: modules/process/presentationops.c:81
-msgid "Extract presentation to a new channel"
+#, fuzzy
+msgid "Extract presentation to a new image"
msgstr "Estrae presentazione in un nuovo canale"
#: modules/process/presentationops.c:84
@@ -12309,6 +12978,11 @@ msgstr "Allega Presentazione"
msgid "_Data to attach:"
msgstr "_Dati da allegare:"
+#: modules/process/preview.h:245
+#, fuzzy
+msgid "Combine with existing mask:"
+msgstr "Unisci a maschera esistente"
+
#: modules/process/psdf_logphi.c:76
msgid ""
"Two-dimensional FFT (Fast Fourier Transform) transformed to coordinates (log-"
@@ -12329,10 +13003,90 @@ msgstr "Calcola PSDF in coordinate Log-Phi"
msgid "Log-Phi PSDF"
msgstr "Log-Phi PSDF"
-#: modules/process/psdf_logphi.c:275 modules/process/wpour_mark.c:320
+#: modules/process/psdf_logphi.c:276 modules/process/wpour_mark.c:320
msgid "Gaussian _smoothing:"
msgstr "Appianamento Gaussiano:"
+#: modules/process/psf-fit.c:165
+#, fuzzy
+msgid "Gaussian (asymmetric)"
+msgstr "Appianamento Gaussiano:"
+
+#: modules/process/psf-fit.c:177
+msgid "Point spread function estimation by fitting explicit function form."
+msgstr ""
+
+#: modules/process/psf-fit.c:191
+#, fuzzy
+msgid "/_Statistics/_PSF Fit..."
+msgstr "/_Statistica/Sezione _PSDF..."
+
+#: modules/process/psf-fit.c:195
+msgid "Fit PSF from known data and image"
+msgstr ""
+
+#: modules/process/psf-fit.c:246 modules/process/psf.c:181
+#: modules/process/psf.c:230
+#, fuzzy
+msgid "PSF"
+msgstr "PSDF"
+
+#: modules/process/psf-fit.c:254 modules/process/psf.c:195
+msgid "PSF*P"
+msgstr ""
+
+#: modules/process/psf-fit.c:271
+#, fuzzy
+msgid "Fit PSF"
+msgstr "Adatta Figura"
+
+#: modules/process/psf-fit.c:289 modules/process/psf.c:286
+msgid "_Ideal response:"
+msgstr ""
+
+#: modules/process/psf.c:117
+#, fuzzy
+msgid "Point spread function estimation"
+msgstr "Stima cieca punta"
+
+#: modules/process/psf.c:131
+#, fuzzy
+msgid "/_Statistics/_PSF Guess..."
+msgstr "/_Statistica/Sezione _PSDF..."
+
+#: modules/process/psf.c:135
+msgid "Estimate PSF from known data and image"
+msgstr ""
+
+#: modules/process/psf.c:208
+msgid "PSF*P - I"
+msgstr ""
+
+#: modules/process/psf.c:231
+#, fuzzy
+msgid "Convolved"
+msgstr "_LoG convoluto"
+
+#: modules/process/psf.c:237
+#, fuzzy
+msgid "Estimate PSF"
+msgstr "Stima"
+
+#: modules/process/psf.c:238
+#, fuzzy
+msgid "_Fit"
+msgstr "Adatta"
+
+#: modules/process/psf.c:295
+#, fuzzy
+msgid "_Display:"
+msgstr "Mostra:"
+
+#: modules/process/psf.c:301
+#, fuzzy
+msgid "_Sigma init:"
+msgstr "_Segnale"
+
#: modules/process/rank.c:92
msgid "Enhances local contrast using a rank transform."
msgstr "Accentua contrasto locale utilizzando una trasformazione di ordine"
@@ -12383,7 +13137,7 @@ msgstr "/Operazioni _Base/Ruota di _Angolo..."
msgid "Rotate by arbitrary angle"
msgstr "Ruota di angolo arbitrario"
-#: modules/process/rotate.c:192
+#: modules/process/rotate.c:192 modules/volume/volume_swaxes.c:651
msgid "Rotated Data"
msgstr "Dati ruotati"
@@ -12439,63 +13193,63 @@ msgstr "Dati scalati"
msgid "verb|Scale"
msgstr "Scala"
-#: modules/process/scale.c:216
+#: modules/process/scale.c:217
msgid "Scale by _ratio:"
msgstr "Scala di un fattore:"
-#: modules/process/scale.c:224
+#: modules/process/scale.c:225
msgid "_proportional"
msgstr "_proporzionale"
-#: modules/process/scale.c:235
+#: modules/process/scale.c:237
msgid "New _width:"
msgstr "Nuova Larghezza:"
-#: modules/process/scale.c:243
+#: modules/process/scale.c:246
msgid "New _height:"
msgstr "Nuova Altezza:"
-#: modules/process/scars.c:113
+#: modules/process/scars.c:122
msgid "Marks and/or removes scars (horizontal linear artifacts)."
msgstr "Evidenzia e/o rimuove salti (artefatti lineari orizzontali)."
-#: modules/process/scars.c:127
+#: modules/process/scars.c:136
msgid "/_Correct Data/M_ark Scars..."
msgstr "/_Correzione Dati/Segna danni"
-#: modules/process/scars.c:131
+#: modules/process/scars.c:140
msgid "Mark horizontal scars (strokes)"
msgstr "Segna danni orizzontali (strappi)"
-#: modules/process/scars.c:134
+#: modules/process/scars.c:143
msgid "/_Correct Data/Remove _Scars"
msgstr "/_Correzione Dati/Rimuovi danni"
-#: modules/process/scars.c:138
+#: modules/process/scars.c:147
msgid "Correct horizontal scars (strokes)"
msgstr "Correzione danni orizzontali (strappi)"
-#: modules/process/scars.c:293
+#: modules/process/scars.c:312
msgid "Mark Scars"
msgstr "Segna danni"
-#: modules/process/scars.c:331
+#: modules/process/scars.c:353
msgid "Maximum _width:"
msgstr "Larghezza massima:"
-#: modules/process/scars.c:338
+#: modules/process/scars.c:361
msgid "Minimum _length:"
msgstr "Lunghezza minima:"
-#: modules/process/scars.c:345
+#: modules/process/scars.c:369
msgid "_Hard threshold:"
msgstr "Soglia dura:"
-#: modules/process/scars.c:353
+#: modules/process/scars.c:377
msgid "_Soft threshold:"
msgstr "Soglia morbida:"
-#: modules/process/scars.c:361
+#: modules/process/scars.c:385
msgid "Scars type:"
msgstr "Tipo danni:"
@@ -12535,27 +13289,27 @@ msgstr "Monte Carlo"
msgid "_Quality:"
msgstr "_Qualità:"
-#: modules/process/shade.c:92
+#: modules/process/shade.c:94
msgid "Creates a shaded presentation of data."
msgstr "Crea una presentazione dati ombreggiata"
-#: modules/process/shade.c:106
+#: modules/process/shade.c:108
msgid "/_Presentation/_Shading..."
msgstr "/_Presentazione/_Ombreggiatura..."
-#: modules/process/shade.c:110
+#: modules/process/shade.c:112
msgid "Shade data"
msgstr "Ombreggia dati"
-#: modules/process/shade.c:207
+#: modules/process/shade.c:209
msgid "Shading"
msgstr "Ombreggiatura"
-#: modules/process/shade.c:253
+#: modules/process/shade.c:260
msgid "_Mix:"
msgstr "_Mescola:"
-#: modules/process/slope_dist.c:161
+#: modules/process/slope_dist.c:160
msgid ""
"Calculates one- or two-dimensional distribution of slopes or graph of their "
"angular distribution."
@@ -12563,83 +13317,138 @@ msgstr ""
"Calcola distribuzione di pendenze in due dimensioni o grafici della loro "
"distribuzione angolare"
-#: modules/process/slope_dist.c:176
+#: modules/process/slope_dist.c:175
msgid "/_Statistics/_Slope Distribution..."
msgstr "/_Statistica/Distribuzione pendenza..."
-#: modules/process/slope_dist.c:180
+#: modules/process/slope_dist.c:179
msgid "Calculate angular slope distribution"
msgstr "Calcola distribuzione pendenza angolare"
-#: modules/process/slope_dist.c:221
+#: modules/process/slope_dist.c:220
msgid "Slope distribution"
msgstr "Distribuzione pendenza"
-#: modules/process/slope_dist.c:253
+#: modules/process/slope_dist.c:252
msgid "_Two-dimensional distribution"
msgstr "Distribuzione bi-dimensionale"
-#: modules/process/slope_dist.c:254
+#: modules/process/slope_dist.c:253
msgid "Directional (φ) _graph"
msgstr "_Grafico direzionale (φ) "
-#: modules/process/slope_dist.c:255
+#: modules/process/slope_dist.c:254
msgid "_Inclination (θ) graph"
msgstr "Grafico _Inclinazione θ"
-#: modules/process/slope_dist.c:256
+#: modules/process/slope_dist.c:255
msgid "Inclination (gra_dient) graph"
msgstr "Inclinazione (gra_diente) grafico"
-#: modules/process/slope_dist.c:270
+#: modules/process/slope_dist.c:269
msgid "Slope Distribution"
msgstr "Distribuzione Pendenza"
-#: modules/process/slope_dist.c:755
+#: modules/process/slope_dist.c:749
msgid "Angular Slope Distribution"
msgstr "Distribuzione pendenza angolare"
-#: modules/process/slope_dist.c:763 modules/process/tilt.c:179
+#: modules/process/slope_dist.c:757 modules/process/tilt.c:179
msgid "Slopes"
msgstr "_Pendenza:"
-#: modules/process/slope_dist.c:824 modules/process/slope_dist.c:893
+#: modules/process/slope_dist.c:818 modules/process/slope_dist.c:887
msgid "Inclination Distribution"
msgstr "Distribuzione inclinazioni"
-#: modules/process/slope_dist.c:832 modules/process/slope_dist.c:901
+#: modules/process/slope_dist.c:826 modules/process/slope_dist.c:895
msgid "Inclinations"
msgstr "Inclinazioni"
-#: modules/process/sphere-revolve.c:97
+#: modules/process/sphere-revolve.c:111
msgid "Subtracts background by arc or sphere revolution."
msgstr ""
"Sottrae sottofondo ottenuto dalla rivoluzione di un arco o di una sfera"
-#: modules/process/sphere-revolve.c:113
+#: modules/process/sphere-revolve.c:125
msgid "/_Level/Revolve _Arc..."
msgstr "/_Livella/Ruota _Arco..."
-#: modules/process/sphere-revolve.c:117
+#: modules/process/sphere-revolve.c:129
msgid "Level data by arc revolution"
msgstr "Livella dati per rivoluzione arco"
-#: modules/process/sphere-revolve.c:208 modules/tools/sfunctions.c:371
+#: modules/process/sphere-revolve.c:132
+#, fuzzy
+msgid "/_Level/Revolve _Sphere..."
+msgstr "/_Livella/Ruota _Arco..."
+
+#: modules/process/sphere-revolve.c:136
+#, fuzzy
+msgid "Level data by sphere revolution"
+msgstr "Livella dati per rivoluzione arco"
+
+#: modules/process/sphere-revolve.c:303 modules/tools/sfunctions.c:381
msgid "_Horizontal direction"
msgstr "Direzione orizzontale"
-#: modules/process/sphere-revolve.c:209 modules/tools/sfunctions.c:372
+#: modules/process/sphere-revolve.c:304 modules/tools/sfunctions.c:382
msgid "_Vertical direction"
msgstr "Direzione verticale"
-#: modules/process/sphere-revolve.c:210
+#: modules/process/sphere-revolve.c:305
msgid "_Both directions"
msgstr "Entrambe le direzioni"
-#: modules/process/sphere-revolve.c:217
+#: modules/process/sphere-revolve.c:315
+#, fuzzy
+msgid "Revolve Sphere"
+msgstr "Ruota Arco"
+
+#: modules/process/sphere-revolve.c:315
msgid "Revolve Arc"
msgstr "Ruota Arco"
+#: modules/process/sphere-revolve.c:355
+msgid "Direction:"
+msgstr "Direzione:"
+
+#: modules/process/sphere-revolve.c:699
+#, fuzzy
+msgid "Revolving sphere..."
+msgstr "Altezze rilassamento..."
+
+#: modules/process/stitch.c:135
+msgid "Stitch multiple images based on offsets of origins."
+msgstr ""
+
+#: modules/process/stitch.c:149
+#, fuzzy
+msgid "/M_ultidata/_Stitch..."
+msgstr "/Dati _Multipli/_Aritmetica..."
+
+#: modules/process/stitch.c:153
+msgid "Stitch images using offsets"
+msgstr ""
+
+#: modules/process/stitch.c:269
+msgid "Stitch"
+msgstr ""
+
+#: modules/process/stitch.c:312
+msgid "Channels"
+msgstr "Canali"
+
+#: modules/process/stitch.c:435
+#, fuzzy
+msgid "Restore"
+msgstr "Ripris_tina"
+
+#: modules/process/stitch.c:445 modules/tools/linestats.c:379
+#: modules/tools/sfunctions.c:440 modules/tools/stats.c:406
+msgid "_Instant updates"
+msgstr "_Aggiornamento immediato"
+
#: modules/process/straighten_path.c:126
msgid "Extracts a straightened part of image along a curve."
msgstr ""
@@ -12656,28 +13465,28 @@ msgstr ""
msgid "Straighten Path"
msgstr ""
-#: modules/process/straighten_path.c:254
+#: modules/process/straighten_path.c:253
msgid "Res_tore"
msgstr "Ripris_tina"
-#: modules/process/straighten_path.c:259
+#: modules/process/straighten_path.c:258
msgid "Re_verse"
msgstr "Inverti"
#: modules/process/straighten_path.c:278 modules/tools/pathlevel.c:256
-#: modules/tools/profile.c:507 modules/tools/roughness.c:854
+#: modules/tools/profile.c:503 modules/tools/roughness.c:868
msgid "_Thickness:"
msgstr "_Spessore:"
-#: modules/process/straighten_path.c:286
+#: modules/process/straighten_path.c:287
msgid "_Slackness:"
msgstr ""
-#: modules/process/straighten_path.c:292
+#: modules/process/straighten_path.c:293
msgid "C_losed curve"
msgstr ""
-#: modules/process/straighten_path.c:379
+#: modules/process/straighten_path.c:380
msgid "Straightened"
msgstr ""
@@ -12699,52 +13508,52 @@ msgstr "Super-risoluzione di immagini multiple dello stesso oggetto"
msgid "Supres"
msgstr ""
-#: modules/process/superresolution.c:421
+#: modules/process/superresolution.c:420
msgid "Correlating to determine mean shift..."
msgstr "Correlazione per determinare lo scarto medio"
-#: modules/process/superresolution.c:511
+#: modules/process/superresolution.c:510
msgid "Cross-correlation..."
msgstr "Correlazione incrociata.."
-#: modules/process/superresolution.c:554 modules/xyz/xyz_raster.c:1079
-#: modules/xyz/xyz_raster.c:1119
+#: modules/process/superresolution.c:553 modules/xyz/xyz_raster.c:1053
+#: modules/xyz/xyz_raster.c:1093
msgid "Interpolating..."
msgstr "Interpolazione..."
-#: modules/process/synth.h:343
+#: modules/process/synth.h:344
msgid "Roundness"
msgstr ""
-#: modules/process/synth.h:351
+#: modules/process/synth.h:352
msgid "Roundn_ess:"
msgstr ""
-#: modules/process/synth.h:399
+#: modules/process/synth.h:401
msgid "Orientation"
msgstr "Orientazione"
-#: modules/process/synth.h:408
+#: modules/process/synth.h:410
msgid "Orien_tation:"
msgstr "Orien_tazione:"
-#: modules/process/synth.h:432
+#: modules/process/synth.h:436
+msgid "_Truncate:"
+msgstr "_Truncato:"
+
+#: modules/process/synth.h:460
msgid "Variance:"
msgstr "Varianza:"
-#: modules/process/synth.h:456
-msgid "Deformation"
-msgstr "Deformazione"
-
-#: modules/process/synth.h:464
+#: modules/process/synth.h:493
msgid "_Amplitude:"
msgstr "_Ampiezza:"
-#: modules/process/synth.h:472
+#: modules/process/synth.h:501
msgid "_Lateral scale:"
msgstr "Scala _Laterale:"
-#: modules/process/synth.h:566
+#: modules/process/synth.h:595
msgid "Randomi_ze"
msgstr "Randomi_zza"
@@ -12760,41 +13569,41 @@ msgstr "/Operazioni _Base/Intervallo Li_mite..."
msgid "Limit data range"
msgstr "Intervallo dati limite"
-#: modules/process/threshold.c:246
+#: modules/process/threshold.c:241
msgid "Limit Range"
msgstr "Intervallo Limite"
-#: modules/process/threshold.c:281
+#: modules/process/threshold.c:276
msgid "Specify _thresholds"
msgstr "Specifica soglie"
-#: modules/process/threshold.c:283
+#: modules/process/threshold.c:278
msgid "Use _display range"
msgstr ""
-#: modules/process/threshold.c:285
+#: modules/process/threshold.c:280
msgid "Cut off outlier_s"
msgstr ""
-#: modules/process/threshold.c:294
+#: modules/process/threshold.c:289
msgid "_Lower:"
msgstr "Inferiore:"
-#: modules/process/threshold.c:300
+#: modules/process/threshold.c:295
msgid "_Upper:"
msgstr "Superiore:"
-#: modules/process/threshold.c:305
+#: modules/process/threshold.c:300
msgid "Set to _Full Range"
msgstr "Assegna Intervallo totale "
#. TRANSLATORS: This is a range: 123 to 456.
-#: modules/process/threshold.c:318
+#: modules/process/threshold.c:313
#, c-format
msgid "%.*f to %.*f"
msgstr "da %.*f a %.*f"
-#: modules/process/threshold.c:341
+#: modules/process/threshold.c:336
msgid "F_arther than:"
msgstr ""
@@ -12814,11 +13623,11 @@ msgstr "Inclina di quantità data"
msgid "Tilt"
msgstr "Inclina"
-#: modules/process/tilt.c:185 modules/volume/volume_slice.c:444
+#: modules/process/tilt.c:185 modules/volume/volume_slice.c:446
msgid "_X:"
msgstr "_X:"
-#: modules/process/tilt.c:194 modules/volume/volume_slice.c:464
+#: modules/process/tilt.c:194 modules/volume/volume_slice.c:469
msgid "_Y:"
msgstr "_Y:"
@@ -12826,31 +13635,31 @@ msgstr "_Y:"
msgid "Angles"
msgstr "Angoli"
-#: modules/process/tip_blind.c:178
+#: modules/process/tip_blind.c:177
msgid "Blind estimation of SPM tip using Villarubia's algorithm."
msgstr "Stima cieca della punta SPM con l'algoritmo di Villarubia"
-#: modules/process/tip_blind.c:192
+#: modules/process/tip_blind.c:191
msgid "/_Tip and Indentation/_Blind Estimation..."
msgstr "/Punta e Indentazione/Stima Cieca..."
-#: modules/process/tip_blind.c:196
+#: modules/process/tip_blind.c:195
msgid "Blind tip estimation"
msgstr "Stima cieca punta"
-#: modules/process/tip_blind.c:231
+#: modules/process/tip_blind.c:230
msgid "Blind Tip Estimation"
msgstr "Stima Cieca, Punta"
-#: modules/process/tip_blind.c:232
+#: modules/process/tip_blind.c:231
msgid "Run _Partial"
msgstr "Esegui _Parziale"
-#: modules/process/tip_blind.c:233
+#: modules/process/tip_blind.c:232
msgid "Run _Full"
msgstr "Esegui Completo"
-#: modules/process/tip_blind.c:234
+#: modules/process/tip_blind.c:233
msgid "_Reset Tip"
msgstr "Azzera punta"
@@ -12858,77 +13667,77 @@ msgstr "Azzera punta"
msgid "Related _data:"
msgstr "Dati correlati:"
-#: modules/process/tip_blind.c:326
+#: modules/process/tip_blind.c:327
msgid "Estimated Tip Size"
msgstr "Dimensioni punta stimate"
-#: modules/process/tip_blind.c:347
+#: modules/process/tip_blind.c:350
msgid "_Same resolution"
msgstr "Uguale risoluzione"
-#: modules/process/tip_blind.c:366
+#: modules/process/tip_blind.c:376
msgid "Noise suppression t_hreshold:"
msgstr "Soglia soppressione rumore:"
-#: modules/process/tip_blind.c:386
+#: modules/process/tip_blind.c:384
msgid "Use _boundaries"
msgstr "Usa confini"
-#: modules/process/tip_blind.c:396
+#: modules/process/tip_blind.c:395
msgid "Stripes"
msgstr "Strisce"
-#: modules/process/tip_blind.c:402
+#: modules/process/tip_blind.c:401
msgid "_Split to stripes:"
msgstr "dividi in strisce:"
-#: modules/process/tip_blind.c:416
+#: modules/process/tip_blind.c:412
msgid "_Preview stripe:"
msgstr "Anteprima strisce:"
-#: modules/process/tip_blind.c:423
+#: modules/process/tip_blind.c:420
msgid "Plot size _graph"
msgstr ""
-#: modules/process/tip_blind.c:433
+#: modules/process/tip_blind.c:430
msgid "Create tip i_mages"
msgstr "Crea i_mmagini punta"
#. TRANSLATORS: Prefix for the progressbar message.
-#: modules/process/tip_blind.c:810
+#: modules/process/tip_blind.c:807
#, c-format
msgid "Stripe %u: "
msgstr "Striscia %u: "
-#: modules/process/tip_blind.c:917 modules/process/tip_blind.c:941
+#: modules/process/tip_blind.c:914 modules/process/tip_blind.c:938
msgid "Estimated tip"
msgstr "Punta stimata"
-#: modules/process/tip_blind.c:1207 modules/process/tip_blind.c:1216
+#: modules/process/tip_blind.c:1204 modules/process/tip_blind.c:1213
msgid "Tip radius evolution"
msgstr "Evoluzione raggio punta"
-#: modules/process/tip_model.c:114
+#: modules/process/tip_model.c:112
msgid "Models SPM tip."
msgstr "Modella punte SPM"
-#: modules/process/tip_model.c:129
+#: modules/process/tip_model.c:127
msgid "/_Tip and Indentation/_Model Tip..."
msgstr "/Punta e Indentazione/_Modello Punta"
-#: modules/process/tip_model.c:133
+#: modules/process/tip_model.c:131
msgid "Model AFM tip"
msgstr "Modello punta AFM"
-#: modules/process/tip_model.c:164
+#: modules/process/tip_model.c:162
msgid "Model Tip"
msgstr "Modello punta"
-#: modules/process/tip_model.c:224
+#: modules/process/tip_model.c:222
msgid "Tip _type:"
msgstr "Tipo Punta"
-#: modules/process/tip_model.c:229
+#: modules/process/tip_model.c:228
msgid "_Number of sides:"
msgstr "_Numero facce:"
@@ -12940,20 +13749,20 @@ msgstr "Pendenza Punta"
msgid "Tip _rotation:"
msgstr "Rotazione Punta"
-#: modules/process/tip_model.c:250
+#: modules/process/tip_model.c:255
msgid "Tip _apex radius:"
msgstr "Raggio apicale punta:"
-#: modules/process/tip_model.c:269
+#: modules/process/tip_model.c:265
#, fuzzy
msgid "Tip _anisotropy:"
msgstr "DWT Anisotropa"
-#: modules/process/tip_model.c:490
+#: modules/process/tip_model.c:484
msgid "Modeled tip"
msgstr "Punta modellata"
-#: modules/process/tip_model.c:562
+#: modules/process/tip_model.c:556
#, c-format
msgid "Tip resolution: %d × %d pixels"
msgstr "Risoluzione punta: %d × %d pixels"
@@ -13062,7 +13871,8 @@ msgid "Converts datafield to 3D volume data."
msgstr "Converte il campo dati in dati volume 3D"
#: modules/process/volumize.c:56
-msgid "/_Basic Operations/Volumize..."
+#, fuzzy
+msgid "/_Basic Operations/Volumize"
msgstr "/Operazioni _Base/Volumizzazione..."
#: modules/process/volumize.c:60
@@ -13107,73 +13917,77 @@ msgstr "risoluzione _Z :"
msgid "Z _range:"
msgstr "Intervallo Z:"
-#: modules/process/wave_synth.c:211
+#: modules/process/wave_synth.c:219
msgid "Generates various kinds of waves."
msgstr "Generazione di vari tipi di onde"
-#: modules/process/wave_synth.c:225
+#: modules/process/wave_synth.c:233
msgid "/S_ynthetic/_Waves..."
msgstr "/Sintetico/Onde ..."
-#: modules/process/wave_synth.c:229
+#: modules/process/wave_synth.c:237
msgid "Generate waves"
msgstr "Generazione onde"
-#: modules/process/wave_synth.c:347
+#: modules/process/wave_synth.c:366
msgid "Waves"
msgstr "Onde"
-#: modules/process/wave_synth.c:422 modules/tools/linestats.c:337
-#: modules/tools/sfunctions.c:401 modules/volume/volume_linestat.c:369
+#: modules/process/wave_synth.c:441 modules/tools/linestats.c:337
+#: modules/tools/sfunctions.c:411 modules/volume/volume_linestat.c:374
msgid "_Quantity:"
msgstr "_Quantità:"
-#: modules/process/wave_synth.c:429
+#: modules/process/wave_synth.c:448
msgid "_Number of waves:"
msgstr "_Numero di onde:"
-#: modules/process/wave_synth.c:436 modules/process/wave_synth.c:582
-#: modules/tools/roughness.c:274
+#: modules/process/wave_synth.c:455 modules/process/wave_synth.c:617
+#: modules/tools/roughness.c:275
msgid "Amplitude"
msgstr "Ampiezza"
-#: modules/process/wave_synth.c:441
+#: modules/process/wave_synth.c:460
msgid "_Wave form:"
msgstr "Forma ondai:"
-#: modules/process/wave_synth.c:448
+#: modules/process/wave_synth.c:467
msgid "Amplitude:"
msgstr "Ampiezza:"
-#: modules/process/wave_synth.c:466
+#: modules/process/wave_synth.c:487
+msgid "_Decay:"
+msgstr ""
+
+#: modules/process/wave_synth.c:497
msgid "Frequency"
msgstr "Frequenza"
-#: modules/process/wave_synth.c:472
+#: modules/process/wave_synth.c:503
msgid "_Spatial frequency:"
msgstr "Frequenza _Spaziale:"
-#: modules/process/wave_synth.c:488
+#: modules/process/wave_synth.c:519
msgid "_X center:"
msgstr ""
-#: modules/process/wave_synth.c:499
+#: modules/process/wave_synth.c:532
msgid "_Y center:"
msgstr ""
-#: modules/process/wave_synth.c:565
+#: modules/process/wave_synth.c:600
msgid "Cosine"
msgstr "Coseno"
-#: modules/process/wave_synth.c:566
+#: modules/process/wave_synth.c:601
msgid "Inverse cosh"
msgstr ""
-#: modules/process/wave_synth.c:567
+#: modules/process/wave_synth.c:602
msgid "Flat top"
msgstr ""
-#: modules/process/wave_synth.c:581
+#: modules/process/wave_synth.c:616
msgid "Displacement"
msgstr "Spostamento"
@@ -13257,39 +14071,39 @@ msgstr "preprocessa immagine"
msgid "Preprocess and mark"
msgstr ""
-#: modules/process/xydenoise.c:57
+#: modules/process/xydenoise.c:58
msgid "Denoises measurement on basis of two orthogonal scans."
msgstr "Rimuove rumore sulla base di due scansioni ortogonali"
-#: modules/process/xydenoise.c:71
+#: modules/process/xydenoise.c:72
msgid "/M_ultidata/_XY denoise..."
msgstr "/multidati/Riduzione rumore XY"
-#: modules/process/xydenoise.c:75
+#: modules/process/xydenoise.c:76
msgid "Denoises horizontal/vertical measurement."
msgstr "Rimuove rumore da misura orizzontale/verticale"
-#: modules/process/xydenoise.c:102
+#: modules/process/xydenoise.c:103
msgid "XY Denoising"
msgstr "XY Denoising"
-#: modules/process/xydenoise.c:124
+#: modules/process/xydenoise.c:125
msgid "Second direction:"
msgstr "Seconda direzione:"
-#: modules/process/xydenoise.c:232
+#: modules/process/xydenoise.c:233
msgid "Computing forward FFTs..."
msgstr "Elaborazione FFT"
-#: modules/process/xydenoise.c:248
+#: modules/process/xydenoise.c:249
msgid "Computing image..."
msgstr "Elaborazione immagine..."
-#: modules/process/xydenoise.c:260
+#: modules/process/xydenoise.c:261
msgid "Computing backward FFT..."
msgstr "Elaborazione FFT inversa"
-#: modules/process/xydenoise.c:272
+#: modules/process/xydenoise.c:273
msgid "Denoised"
msgstr "con rimozione rumore"
@@ -13305,64 +14119,71 @@ msgstr "/Operazioni _Base/trasforma in _XYZ..."
msgid "Convert to XYZ data"
msgstr "Converte in dati XYZ"
-#: modules/pygwy/pygwy-console.c:55
+#: modules/pygwy/pygwy-console.c:99
msgid "/Pygwy Console"
msgstr "/Pygwy Console"
-#: modules/pygwy/pygwy-console.c:59
+#: modules/pygwy/pygwy-console.c:103
msgid "Python wrapper console"
msgstr "Python wrapper console"
-#: modules/pygwy/pygwy-console.c:142
-msgid ">>> Running the script above\n"
-msgstr ">>> Script in esecuzione\n"
-
-#: modules/pygwy/pygwy-console.c:194
-msgid "Open Python script"
-msgstr "Apri script Python "
-
-#: modules/pygwy/pygwy-console.c:275
-msgid "Save Script as"
-msgstr "Salva Script come"
-
-#: modules/pygwy/pygwy-console.c:327
+#: modules/pygwy/pygwy-console.c:168 modules/pygwy/pygwy-console.c:481
msgid "Pygwy Console"
msgstr "Pygwy Console"
-#: modules/pygwy/pygwy-console.c:340
-msgid "Clear Log"
-msgstr "Pulisci Registro"
-
-#: modules/pygwy/pygwy-console.c:344
+#: modules/pygwy/pygwy-console.c:187
msgid "Open script in Python language (Ctrl-O)"
msgstr "Apri script in Python (Ctrl-O)"
-#: modules/pygwy/pygwy-console.c:346
+#: modules/pygwy/pygwy-console.c:197
msgid "Save script (Ctrl-S)"
msgstr "Salva script (Ctrl-S)"
-#: modules/pygwy/pygwy-console.c:348
+#: modules/pygwy/pygwy-console.c:207
+#, fuzzy
+msgid "Save script as (Ctrl-Shift-S)"
+msgstr "Salva script (Ctrl-S)"
+
+#: modules/pygwy/pygwy-console.c:217
msgid "Execute script (Ctrl-E)"
msgstr "Esegui script (Ctrl-E)"
-#: modules/pygwy/pygwy-console.c:426
+#: modules/pygwy/pygwy-console.c:227
+msgid "Clear Log"
+msgstr "Pulisci Registro"
+
+#: modules/pygwy/pygwy-console.c:285
msgid "Command"
msgstr "Comando"
-#: pygwy.c:120
+#: modules/pygwy/pygwy-console.c:371
+msgid ">>> Running the script above\n"
+msgstr ">>> Script in esecuzione\n"
+
+#: modules/pygwy/pygwy-console.c:425
+#, fuzzy
+msgid "Save Python Script as"
+msgstr "Salva Script come"
+
+#: modules/pygwy/pygwy-console.c:429
+#, fuzzy
+msgid "Open Python Script"
+msgstr "Apri script Python "
+
+#: pygwy.c:130
msgid "Pygwy, the Gwyddion Python wrapper."
msgstr ""
-#: pygwy.c:258
+#: pygwy.c:269
msgid "Python Interpreter Errors"
msgstr ""
-#: pygwy.c:384
+#: pygwy.c:399
#, fuzzy
msgid "Python interpreter error occurred."
msgstr "Errore libpng"
-#: pygwy.c:459
+#: pygwy.c:499
msgid "Function written in Python"
msgstr "Funzione scritta in Python"
@@ -13387,11 +14208,11 @@ msgid "Measure distances and directions between points"
msgstr "Misura distanze e direzioni tra punti"
#. TRANSLATORS: Number is verb here.
-#: modules/tools/distance.c:250 modules/tools/profile.c:532
+#: modules/tools/distance.c:250 modules/tools/profile.c:527
msgid "_Number lines"
msgstr "_Numero linee"
-#: modules/tools/filter.c:128
+#: modules/tools/filter.c:129
msgid ""
"Filter tool, processes selected part of data with a filter (conservative "
"denoise, mean, median. Kuwahara, minimum, maximum)."
@@ -13399,27 +14220,27 @@ msgstr ""
"Strumento filtro, fltra i dati selezionati con differenti criteri "
"(conservative denoise, mean, median. Kuwahara, minimum, maximum)."
-#: modules/tools/filter.c:171
+#: modules/tools/filter.c:172
msgid "Basic filters: mean, median, denoise, …"
msgstr "Filtri base: medio, mediano, denoise, ...."
-#: modules/tools/filter.c:239
+#: modules/tools/filter.c:240
msgid "Conservative denoise"
msgstr "Denoise conservativo"
-#: modules/tools/filter.c:246
+#: modules/tools/filter.c:247
msgid "Kuwahara"
msgstr "Kuwahara"
-#: modules/tools/filter.c:247
+#: modules/tools/filter.c:248
msgid "Dechecker"
msgstr "Dechecker"
-#: modules/tools/filter.c:248
+#: modules/tools/filter.c:249
msgid "filter|Gaussian"
msgstr "filtro|Gaussiana"
-#: modules/tools/filter.c:249
+#: modules/tools/filter.c:250
msgid "Sharpen"
msgstr ""
@@ -13516,7 +14337,7 @@ msgid "Height histogram"
msgstr "Istogramma altezze"
#: modules/tools/icolorange.c:329 modules/tools/linestats.c:169
-#: modules/tools/sfunctions.c:226 modules/volume/volume_linestat.c:146
+#: modules/tools/sfunctions.c:231 modules/volume/volume_linestat.c:148
msgid "Range"
msgstr "Intervallo"
@@ -13544,7 +14365,7 @@ msgstr "_Inversione Mappatura"
msgid "range|Full"
msgstr "intervallo|Pieno"
-#: modules/tools/level3.c:106
+#: modules/tools/level3.c:108
msgid ""
"Three-point level tool, levels data by subtracting a plane fitted through "
"three selected points."
@@ -13552,23 +14373,23 @@ msgstr ""
"Strumento livella su tre punti, livella i dati sottraendo un piano passante "
"per tre punti dati."
-#: modules/tools/level3.c:143
+#: modules/tools/level3.c:145
msgid "Three Point Level"
msgstr "Livella su tre punti"
-#: modules/tools/level3.c:144
+#: modules/tools/level3.c:146
msgid "Level data by fitting a plane through three points"
msgstr "Livella dati adattando a piano passante per tre punti"
-#: modules/tools/level3.c:239 modules/tools/readvalue.c:375
+#: modules/tools/level3.c:244 modules/tools/readvalue.c:378
msgid "_Averaging radius:"
msgstr "Media raggio:"
-#: modules/tools/level3.c:246
+#: modules/tools/level3.c:251
msgid "_Instant apply"
msgstr "Applica _istantaneamente"
-#: modules/tools/level3.c:255
+#: modules/tools/level3.c:261
msgid "Set plane to _zero"
msgstr "Fissa piano zero"
@@ -13580,23 +14401,23 @@ msgstr ""
"Strumento funzione statistica Riga/Colonna, valori medi, mediani, massimi, "
"minimi, RMS,..., di righe e colonne"
-#: modules/tools/linestats.c:172 modules/volume/volume_linestat.c:148
+#: modules/tools/linestats.c:172 modules/volume/volume_linestat.c:150
msgid "tan β<sub>0</sub>"
msgstr "tg β<sub>0</sub>"
-#: modules/tools/linestats.c:174 modules/volume/volume_linestat.c:150
+#: modules/tools/linestats.c:174 modules/volume/volume_linestat.c:152
msgid "Ra"
msgstr "Ra"
-#: modules/tools/linestats.c:175 modules/volume/volume_linestat.c:151
+#: modules/tools/linestats.c:175 modules/volume/volume_linestat.c:153
msgid "Rq (RMS)"
msgstr "Rq (RMS)"
-#: modules/tools/linestats.c:176 modules/volume/volume_linestat.c:152
+#: modules/tools/linestats.c:176 modules/volume/volume_linestat.c:154
msgid "Rz"
msgstr "Rz"
-#: modules/tools/linestats.c:177 modules/volume/volume_linestat.c:153
+#: modules/tools/linestats.c:177 modules/volume/volume_linestat.c:155
msgid "Rt"
msgstr "Rt"
@@ -13620,16 +14441,11 @@ msgstr "Colonne"
msgid "Average:"
msgstr "Media:"
-#: modules/tools/linestats.c:363 modules/tools/profile.c:464
-#: modules/tools/sfunctions.c:414 modules/tools/spectro.c:343
+#: modules/tools/linestats.c:363 modules/tools/profile.c:460
+#: modules/tools/sfunctions.c:424 modules/tools/spectro.c:346
msgid "<b>Options</b>"
msgstr "<b>Opzioni</b>"
-#: modules/tools/linestats.c:379 modules/tools/sfunctions.c:430
-#: modules/tools/stats.c:408
-msgid "_Instant updates"
-msgstr "_Aggiornamento immediato"
-
#: modules/tools/maskedit.c:170
msgid "Mask editor tool, allows interactive modification of parts of the mask."
msgstr ""
@@ -13688,63 +14504,63 @@ msgstr "Riempi le aree vuote continue con una maschera"
msgid "Erase continuous parts of mask"
msgstr "Rimozione parti continue di maschera"
-#: modules/tools/maskedit.c:408
+#: modules/tools/maskedit.c:409
msgid "Editor"
msgstr "_Modifica"
-#: modules/tools/maskedit.c:413
+#: modules/tools/maskedit.c:414
msgid "_Shapes"
msgstr "Forme"
-#: modules/tools/maskedit.c:423
+#: modules/tools/maskedit.c:428
msgid "Mode:"
msgstr "Modo:"
-#: modules/tools/maskedit.c:452
+#: modules/tools/maskedit.c:458
msgid "Shape:"
msgstr "Forma:"
-#: modules/tools/maskedit.c:483
+#: modules/tools/maskedit.c:486
msgid "_Drawing Tools"
msgstr "Strumenti _Disegno:"
-#: modules/tools/maskedit.c:493
+#: modules/tools/maskedit.c:500
msgid "Tool:"
msgstr "Strumenti:"
-#: modules/tools/maskedit.c:532
+#: modules/tools/maskedit.c:538
msgid "Actions"
msgstr "Azioni"
-#: modules/tools/maskedit.c:540
+#: modules/tools/maskedit.c:546
msgid "_Invert"
msgstr "_inverti"
-#: modules/tools/maskedit.c:571
+#: modules/tools/maskedit.c:577
msgid "Fill _Voids"
msgstr "Riempi _Vuoti"
-#: modules/tools/maskedit.c:580
+#: modules/tools/maskedit.c:586
msgid "Fill non-simple-connected"
msgstr ""
-#: modules/tools/maskedit.c:591
+#: modules/tools/maskedit.c:597
msgid "Grow/Shrink"
msgstr "Ingrandisci/Rimpicciolisci"
-#: modules/tools/maskedit.c:600
+#: modules/tools/maskedit.c:606
msgid "_Grow"
msgstr "_Ingrandisci"
-#: modules/tools/maskedit.c:608
+#: modules/tools/maskedit.c:614
msgid "Shrin_k"
msgstr "Rimpicciolisci"
-#: modules/tools/maskedit.c:623
+#: modules/tools/maskedit.c:629
msgid "_Amount:"
msgstr "_Quantità:"
-#: modules/tools/maskedit.c:651
+#: modules/tools/maskedit.c:657
msgid "_Prevent grain merging by growing"
msgstr "Evita il fondersi dei grani per crescita"
@@ -13762,83 +14578,99 @@ msgstr "Livella su percorso"
msgid "Level rows using intersections with given lines"
msgstr "Livella righe dati usando intersezioni con linee assegnate"
-#: modules/tools/profile.c:222
+#: modules/tools/profile.c:216
msgid "Profile tool, creates profile graphs from selected lines."
msgstr "Strumento profilo, crea grafico del profilo da linee selezionate."
-#: modules/tools/profile.c:276 modules/tools/profile.c:630
+#: modules/tools/profile.c:270 modules/tools/profile.c:609
msgid "Profiles"
msgstr "Profili"
-#: modules/tools/profile.c:277
+#: modules/tools/profile.c:271
msgid "Extract profiles"
msgstr "Estrae profili"
+#: modules/tools/profile.c:478
+#, fuzzy
+msgid "Linear profiles"
+msgstr "_Separa Profili"
+
#: modules/tools/profile.c:480
-msgid "_Radial profiles"
+#, fuzzy
+msgid "Radial profiles"
msgstr "Profili _Radiali"
-#: modules/tools/profile.c:493
-msgid "Symmetrize _All"
-msgstr "Simmetrizza tutto"
-
-#: modules/tools/profile.c:498
-msgid "S_ymmetrize"
-msgstr "Simmetrizzazione"
-
-#: modules/tools/profile.c:542
+#: modules/tools/profile.c:537
msgid "_Separate profiles"
msgstr "_Separa Profili"
-#: modules/tools/profile.c:607
+#: modules/tools/profile.c:587
msgid "_Calibration data:"
msgstr "Dati calibrazione:"
-#: modules/tools/profile.c:620
+#: modules/tools/profile.c:600
msgid "_Show profile"
msgstr "Mostra Profilo"
-#: modules/tools/profile.c:887
+#: modules/tools/profile.c:861
#, c-format
msgid "X error %d"
msgstr "errore X %d"
-#: modules/tools/profile.c:891
+#: modules/tools/profile.c:865
#, c-format
msgid "Y error %d"
msgstr "errore Y %d"
-#: modules/tools/profile.c:895
+#: modules/tools/profile.c:869
#, c-format
msgid "Z error %d"
msgstr "errore Z %d"
-#: modules/tools/profile.c:899
+#: modules/tools/profile.c:873
#, c-format
msgid "X uncertainty %d"
msgstr "Incertezza X %d"
-#: modules/tools/profile.c:903
+#: modules/tools/profile.c:877
#, c-format
msgid "Y uncertainty %d"
msgstr "Incertezza Y %d"
-#: modules/tools/profile.c:907
+#: modules/tools/profile.c:881
#, c-format
msgid "Z uncertainty %d"
msgstr "Incertezza Z %d"
-#: modules/tools/profile.c:912
+#: modules/tools/profile.c:886
#, c-format
msgid "Zunc up bound %d"
msgstr ""
-#: modules/tools/profile.c:917
+#: modules/tools/profile.c:891
#, c-format
msgid "Zunc low bound %d"
msgstr ""
-#: modules/tools/profile.c:1817
+#: modules/tools/profile.c:1637
+msgid "S_ymmetrize"
+msgstr "Simmetrizzazione"
+
+#: modules/tools/profile.c:1639
+msgid "Symmetrize _All"
+msgstr "Simmetrizza tutto"
+
+#: modules/tools/profile.c:1643
+#, fuzzy
+msgid "Improve _Direction"
+msgstr "_Direzione:"
+
+#: modules/tools/profile.c:1645
+#, fuzzy
+msgid "Improve _All"
+msgstr "_Migliora"
+
+#: modules/tools/profile.c:1866
msgid "calib-data|None"
msgstr "calib-dati|Nessuna"
@@ -13854,194 +14686,194 @@ msgstr "Leggi Valore"
msgid "Read value under mouse cursor"
msgstr "Legge valore sotto il cursore del mouse"
-#: modules/tools/readvalue.c:304
+#: modules/tools/readvalue.c:307
msgid "Set _Zero"
msgstr "Fissa _Zero"
-#: modules/tools/readvalue.c:307
+#: modules/tools/readvalue.c:310
msgid "Shift plane z=0 to pass through the selected point"
msgstr "Muovi piano z=0 fino a passare per il punto selezionato"
-#: modules/tools/readvalue.c:315
+#: modules/tools/readvalue.c:318
msgid "Facet"
msgstr "Facet"
-#: modules/tools/readvalue.c:340
+#: modules/tools/readvalue.c:343
msgid "Curvatures"
msgstr "Curvature"
-#: modules/tools/readvalue.c:382
+#: modules/tools/readvalue.c:386
msgid "Show _selection"
msgstr "Mostra selezione"
-#: modules/tools/roughness.c:282
+#: modules/tools/roughness.c:283
msgid "Roughness average"
msgstr "Rugosità media"
-#: modules/tools/roughness.c:290
+#: modules/tools/roughness.c:291
msgid "Root mean square roughness"
msgstr "Radice quadratica media rugosità"
-#: modules/tools/roughness.c:298
+#: modules/tools/roughness.c:299
msgid "Maximum height of the roughness"
msgstr "Altezza massima rugosita'"
-#: modules/tools/roughness.c:306
+#: modules/tools/roughness.c:307
msgid "Maximum roughness valley depth"
msgstr "Massima profondità di valle rugosita'"
-#: modules/tools/roughness.c:314
+#: modules/tools/roughness.c:315
msgid "Maximum roughness peak height"
msgstr "Altezza picco massima rugosità"
-#: modules/tools/roughness.c:322 modules/tools/roughness.c:370
+#: modules/tools/roughness.c:323 modules/tools/roughness.c:371
msgid "Average maximum height of the roughness"
msgstr "Media altezza massima rugosità"
-#: modules/tools/roughness.c:330
+#: modules/tools/roughness.c:331
msgid "Average maximum roughness valley depth"
msgstr "Media profondità di valle massima della rugosità"
-#: modules/tools/roughness.c:338
+#: modules/tools/roughness.c:339
msgid "Average maximum roughness peak height"
msgstr "Altezza media picco massima rugosità"
-#: modules/tools/roughness.c:346 modules/tools/roughness.c:354
+#: modules/tools/roughness.c:347 modules/tools/roughness.c:355
msgid "Average third highest peak to third lowest valley height"
msgstr "altezza media tra il terzo picco più alto e la terza valle più bassa"
-#: modules/tools/roughness.c:362
+#: modules/tools/roughness.c:363
msgid "Average maximum height of the profile"
msgstr "Altezza massima media profilo"
-#: modules/tools/roughness.c:378
+#: modules/tools/roughness.c:379
msgid "Skewness"
msgstr "Skewness"
-#: modules/tools/roughness.c:394
+#: modules/tools/roughness.c:395
msgid "Waviness average"
msgstr "Media ondulazione"
-#: modules/tools/roughness.c:402
+#: modules/tools/roughness.c:403
msgid "Root mean square waviness"
msgstr "Radice quadratica media ondulazione"
-#: modules/tools/roughness.c:410
+#: modules/tools/roughness.c:411
msgid "Waviness maximum height"
msgstr "Altezza massima ondulazione"
-#: modules/tools/roughness.c:418
+#: modules/tools/roughness.c:419
msgid "Maximum height of the profile"
msgstr "Altezza massima profilo"
-#: modules/tools/roughness.c:426
+#: modules/tools/roughness.c:427
msgid "Spatial"
msgstr "Spaziale"
-#: modules/tools/roughness.c:476
+#: modules/tools/roughness.c:477
msgid "Average wavelength of the profile"
msgstr "Lunghezza onda media profilo"
-#: modules/tools/roughness.c:484
+#: modules/tools/roughness.c:485
msgid "Root mean square (RMS) wavelength of the profile"
msgstr "Radice quadratica media lunghezza onda profilo"
-#: modules/tools/roughness.c:492
+#: modules/tools/roughness.c:493
msgid "Hybrid"
msgstr "Ibrido"
-#: modules/tools/roughness.c:500
+#: modules/tools/roughness.c:501
msgid "Average absolute slope"
msgstr "Pendenza assoluta media"
-#: modules/tools/roughness.c:508
+#: modules/tools/roughness.c:509
msgid "Root mean square (RMS) slope"
msgstr "Radice quadratica media pendenza"
-#: modules/tools/roughness.c:524
+#: modules/tools/roughness.c:525
msgid "Developed profile length"
msgstr "Lunghezza profilo sviluppato"
-#: modules/tools/roughness.c:532
+#: modules/tools/roughness.c:533
msgid "Profile length ratio"
msgstr "Rapporto lunghezza profilo"
-#: modules/tools/roughness.c:615
+#: modules/tools/roughness.c:616
msgid "Calculate surface profile parameters."
msgstr "Calcolo parametri profilo superficie."
-#: modules/tools/roughness.c:648 modules/tools/roughness.c:773
-#: modules/tools/roughness.c:1452
+#: modules/tools/roughness.c:649 modules/tools/roughness.c:774
+#: modules/tools/roughness.c:1479
msgid "Roughness"
msgstr "Rugosità"
-#: modules/tools/roughness.c:649
+#: modules/tools/roughness.c:650
msgid "Calculate roughness parameters"
msgstr "Calcolo parametri rugosità."
-#: modules/tools/roughness.c:771 modules/tools/roughness.c:1450
+#: modules/tools/roughness.c:772 modules/tools/roughness.c:1477
msgid "Texture"
msgstr "Struttura"
-#: modules/tools/roughness.c:772 modules/tools/roughness.c:1451
+#: modules/tools/roughness.c:773 modules/tools/roughness.c:1478
msgid "Waviness"
msgstr "Ondulazione"
-#: modules/tools/roughness.c:774
+#: modules/tools/roughness.c:775
msgid "ADF"
msgstr "ADF"
-#: modules/tools/roughness.c:775
+#: modules/tools/roughness.c:776
msgid "BRC"
msgstr "BRC"
-#: modules/tools/roughness.c:776 modules/tools/roughness.c:1455
+#: modules/tools/roughness.c:777 modules/tools/roughness.c:1482
msgid "Peak Count"
msgstr "Conta picchi"
-#: modules/tools/roughness.c:838 modules/xyz/xyz_drift.c:1090
+#: modules/tools/roughness.c:839 modules/xyz/xyz_drift.c:1090
msgid "_Graph:"
msgstr "_Grafico:"
-#: modules/tools/roughness.c:845
+#: modules/tools/roughness.c:847
msgid "C_ut-off:"
msgstr "C_ut-off:"
-#: modules/tools/roughness.c:1324
+#: modules/tools/roughness.c:1345
msgid "No profile selected."
msgstr "Nessun profilo selezionato"
-#: modules/tools/roughness.c:1453
+#: modules/tools/roughness.c:1480
msgid "Amplitude Distribution Function"
msgstr "Funzione Distribuzione Ampiezza (ADF)"
-#: modules/tools/roughness.c:1454
+#: modules/tools/roughness.c:1481
msgid "The Bearing Ratio Curve"
msgstr "Bearing Ratio Curve (BRC)"
-#: modules/tools/roughness.c:1489
+#: modules/tools/roughness.c:1516
msgid "Surface Profiles"
msgstr "Profili superficie"
-#: modules/tools/roughness.c:1877
+#: modules/tools/roughness.c:1904
msgid "Save Roughness Parameters"
msgstr "Salva parametri rugosità."
-#: modules/tools/roughness.c:1934
+#: modules/tools/roughness.c:1961
msgid "Roughness Parameters"
msgstr "Parametri Rugosità"
-#: modules/tools/roughness.c:1940
+#: modules/tools/roughness.c:1967
#, c-format
msgid "File: %s\n"
msgstr "File: %s\n"
-#: modules/tools/roughness.c:1944
+#: modules/tools/roughness.c:1971
#, c-format
msgid "Data channel: %s\n"
msgstr "Canale dati: %s\n"
-#: modules/tools/roughness.c:1975
+#: modules/tools/roughness.c:2002
#, c-format
msgid ""
"Selected line: (%s, %s) to (%s, %s) px\n"
@@ -14078,7 +14910,7 @@ msgstr "_a tutti i file"
msgid "_Copy"
msgstr "_Copia"
-#: modules/tools/sfunctions.c:181
+#: modules/tools/sfunctions.c:186
msgid ""
"Statistical function tool, calculates one-dimensional statistical functions "
"(height distribution, correlations, PSDF, Minkowski functionals) of selected "
@@ -14088,87 +14920,91 @@ msgstr ""
"unidimensionali (distribuzione delle altezze, correlazioni, PSDF, funzioni "
"di Minkowski) di una parte selezionata di dati."
-#: modules/tools/sfunctions.c:214
+#: modules/tools/sfunctions.c:219
msgid "Height distribution"
msgstr "Distribuzione Altezze"
-#: modules/tools/sfunctions.c:215
+#: modules/tools/sfunctions.c:220
msgid "Cum. height distribution"
msgstr "Distribuzione altezze cum."
-#: modules/tools/sfunctions.c:216
+#: modules/tools/sfunctions.c:221
msgid "Distribution of angles"
msgstr "Distribuzione angoli"
-#: modules/tools/sfunctions.c:217
+#: modules/tools/sfunctions.c:222
msgid "Cum. distribution of angles"
msgstr "Distribuzione angoli cum"
-#: modules/tools/sfunctions.c:218
+#: modules/tools/sfunctions.c:223
msgid "ACF"
msgstr "ACF "
-#: modules/tools/sfunctions.c:219
+#: modules/tools/sfunctions.c:224
msgid "HHCF"
msgstr "HHCF"
-#: modules/tools/sfunctions.c:220
+#: modules/tools/sfunctions.c:225
msgid "PSDF"
msgstr "PSDF"
-#: modules/tools/sfunctions.c:221
+#: modules/tools/sfunctions.c:226
msgid "Radial PSDF"
msgstr "PSDF radiale"
-#: modules/tools/sfunctions.c:222
+#: modules/tools/sfunctions.c:227
msgid "Radial ACF"
msgstr "ACF radiale"
-#: modules/tools/sfunctions.c:223
+#: modules/tools/sfunctions.c:228
msgid "Minkowski volume"
msgstr "Volume di Minkowski"
-#: modules/tools/sfunctions.c:224
+#: modules/tools/sfunctions.c:229
msgid "Minkowski boundary"
msgstr "Confine di Minkowski"
-#: modules/tools/sfunctions.c:225
+#: modules/tools/sfunctions.c:230
msgid "Minkowski connectivity"
msgstr "Connettività di Minkowski"
-#: modules/tools/sfunctions.c:251
+#: modules/tools/sfunctions.c:232
+msgid "Area scale graph"
+msgstr ""
+
+#: modules/tools/sfunctions.c:257
msgid "Statistical Functions"
msgstr "Funzioni Statistiche"
-#: modules/tools/sfunctions.c:252
+#: modules/tools/sfunctions.c:258
msgid "Calculate 1D statistical functions"
msgstr "Calcolo funzioni statistiche1D "
-#: modules/tools/sfunctions.c:504
+#: modules/tools/sfunctions.c:501
msgid "_Separate uncertainty"
msgstr "_Separa incertezze"
-#: modules/tools/spectro.c:151
+#: modules/tools/spectro.c:154
msgid "Point Spectrum, extracts point spectra to a graph."
msgstr "Point Spectrum, estrae gli spettri puntuali in un grafico."
-#: modules/tools/spectro.c:190
+#: modules/tools/spectro.c:193
msgid "Point Spectroscopy"
msgstr "Spettroscopia puntuale"
-#: modules/tools/spectro.c:191
+#: modules/tools/spectro.c:194
msgid "Extract and view point spectroscopy data"
msgstr "Estrae e visualizza dati spettroscopici"
-#: modules/tools/spectro.c:359
+#: modules/tools/spectro.c:362
msgid "_Separate spectra"
msgstr "_Separa spettri"
-#: modules/tools/spectro.c:369
+#: modules/tools/spectro.c:372
msgid "_Average spectra"
msgstr "Medi_a spettri"
-#: modules/tools/spectro.c:508
+#: modules/tools/spectro.c:511
msgid "Spectroscopy"
msgstr "Spettroscopia"
@@ -14208,14 +15044,6 @@ msgstr "Nessun punto nella immagine selezionata"
msgid "No area in the zoom selected."
msgstr "Nessuna area nello zoom selezionato"
-#: modules/tools/stats.c:205
-msgid "Average value:"
-msgstr "Valore medio:"
-
-#: modules/tools/stats.c:206
-msgid "Median:"
-msgstr "Mediana:"
-
#: modules/tools/stats.c:207
msgid "Ra (Sa):"
msgstr "Ra (Sa):"
@@ -14228,14 +15056,6 @@ msgstr "Rms (Sq):"
msgid "Rms (grain-wise):"
msgstr "Rms (grain-wise):"
-#: modules/tools/stats.c:210
-msgid "Skew:"
-msgstr "Skew:"
-
-#: modules/tools/stats.c:211
-msgid "Kurtosis:"
-msgstr "Curtosi:"
-
#: modules/tools/stats.c:212
msgid "Surface area:"
msgstr "Area superficie:"
@@ -14244,10 +15064,6 @@ msgstr "Area superficie:"
msgid "Projected area:"
msgstr "Proiezione area:"
-#: modules/tools/stats.c:214
-msgid "Variation:"
-msgstr "Variazione:"
-
#: modules/tools/stats.c:217
msgid "Inclination θ:"
msgstr "Inclinazione θ:"
@@ -14260,7 +15076,7 @@ msgstr "Inclinazione φ:"
msgid "Statistics tool."
msgstr "Strumenti statistici"
-#: modules/tools/stats.c:261 modules/tools/stats.c:1095
+#: modules/tools/stats.c:261 modules/tools/stats.c:1091
msgid "Statistical Quantities"
msgstr "Quantità statistiche"
@@ -14268,29 +15084,29 @@ msgstr "Quantità statistiche"
msgid "Statistical quantities"
msgstr "Quantità statistiche."
-#: modules/tools/stats.c:1002
+#: modules/tools/stats.c:998
msgid "Save Statistical Quantities"
msgstr "Salva Quantità Statistiche"
-#: modules/tools/stats.c:1100
+#: modules/tools/stats.c:1096
#, c-format
msgid "File: %s\n"
msgstr "File: %s\n"
-#: modules/tools/stats.c:1104
+#: modules/tools/stats.c:1100
#, c-format
msgid "Data channel: %s\n"
msgstr "Canale dati: %s\n"
-#: modules/tools/stats.c:1122
+#: modules/tools/stats.c:1118
msgid "Yes"
msgstr "Si"
-#: modules/tools/stats.c:1122
+#: modules/tools/stats.c:1118
msgid "No"
msgstr "No"
-#: modules/tools/stats.c:1132
+#: modules/tools/stats.c:1128
#, c-format
msgid ""
"Selected area: %s × %s at (%s, %s) px\n"
@@ -14313,182 +15129,181 @@ msgstr "/_Dimensioni e Unità..."
msgid "Volume Dimensions and Units"
msgstr "Dimensioni e Unità Volume"
-#: modules/volume/volume_calibrate.c:526
+#: modules/volume/volume_calibrate.c:486
msgid "_Value range:"
msgstr "Intervallo _Valore"
-#: modules/volume/volume_calibrate.c:555
+#: modules/volume/volume_calibrate.c:508
msgid "Value shi_ft:"
msgstr "Valore shi_ft:"
-#: modules/volume/volume_calibrate.c:601
+#: modules/volume/volume_calibrate.c:542
msgid "_Value calibration factor:"
msgstr "Valore fattore di calibrazione :"
-#: modules/volume/volume_extract.c:223
+#: modules/volume/volume_extract.c:216
msgid "Shows and/or extracts a section of volume data"
msgstr "Mostra e/o estrae una sezione di dati volume"
-#: modules/volume/volume_extract.c:237
-msgid "/Show and _extract..."
+#: modules/volume/volume_extract.c:230
+#, fuzzy
+msgid "/Show and _Extract..."
msgstr "/mostra ed _estrai..."
-#: modules/volume/volume_extract.c:241
+#: modules/volume/volume_extract.c:234
msgid "Show and/or extract a section of volume data"
msgstr "Mostra e/o estrae una sezione di dati volume"
-#: modules/volume/volume_extract.c:270
+#: modules/volume/volume_extract.c:263
msgid "X cross-section"
msgstr "sezione trasversale X"
-#: modules/volume/volume_extract.c:271
+#: modules/volume/volume_extract.c:264
msgid "Y cross-section"
msgstr "sezione trasversale Y"
-#: modules/volume/volume_extract.c:272
+#: modules/volume/volume_extract.c:265
msgid "Z cross-section"
msgstr "Sezione trasversale Z"
-#: modules/volume/volume_extract.c:273 modules/volume/volume_extract.c:698
+#: modules/volume/volume_extract.c:266 modules/volume/volume_extract.c:684
msgid "X direction sum"
msgstr "somma direzione X"
-#: modules/volume/volume_extract.c:274 modules/volume/volume_extract.c:700
+#: modules/volume/volume_extract.c:267 modules/volume/volume_extract.c:686
msgid "Y direction sum"
msgstr "somma direzione Y"
-#: modules/volume/volume_extract.c:275 modules/volume/volume_extract.c:702
+#: modules/volume/volume_extract.c:268 modules/volume/volume_extract.c:688
msgid "Z direction sum"
msgstr "somma direzione Z"
-#: modules/volume/volume_extract.c:278
+#: modules/volume/volume_extract.c:271
msgid "X direction"
msgstr "direzione x"
-#: modules/volume/volume_extract.c:279
+#: modules/volume/volume_extract.c:272
msgid "Y direction"
msgstr "direzione y"
-#: modules/volume/volume_extract.c:280
+#: modules/volume/volume_extract.c:273
msgid "Z direction"
msgstr "direzione z"
-#: modules/volume/volume_extract.c:322
+#: modules/volume/volume_extract.c:315
msgid "Volume data"
msgstr "Dati volume"
-#: modules/volume/volume_extract.c:324
+#: modules/volume/volume_extract.c:317
msgid "_Load"
msgstr "_Carica"
-#: modules/volume/volume_extract.c:336
+#: modules/volume/volume_extract.c:329
msgid "_Extract projection"
msgstr "_Estrae proiezione"
-#: modules/volume/volume_extract.c:354
+#: modules/volume/volume_extract.c:347
msgid "Projections"
msgstr "Proiezioni"
-#: modules/volume/volume_extract.c:404
+#: modules/volume/volume_extract.c:395
msgid "Z position"
msgstr "Posizione Z"
-#: modules/volume/volume_extract.c:409
+#: modules/volume/volume_extract.c:405
msgid "Shown cut direction:"
msgstr ""
-#: modules/volume/volume_extract.c:419 modules/volume/volume_extract.c:500
-msgid "Show mode:"
-msgstr "Mostra modalità:"
-
-#: modules/volume/volume_extract.c:490
+#: modules/volume/volume_extract.c:485
msgid "Graph cut direction:"
msgstr ""
-#: modules/volume/volume_extract.c:525
+#: modules/volume/volume_extract.c:511
msgid "3D view"
msgstr "Vista 3D"
-#: modules/volume/volume_extract.c:550
+#: modules/volume/volume_extract.c:538
msgid "Zoom"
msgstr "Ingrandimento"
-#: modules/volume/volume_extract.c:558
+#: modules/volume/volume_extract.c:545
msgid "Wireframe threshold"
msgstr ""
-#: modules/volume/volume_extract.c:566
+#: modules/volume/volume_extract.c:552
msgid "Z scale"
msgstr "Scala Z "
-#: modules/volume/volume_extract.c:574
+#: modules/volume/volume_extract.c:559
msgid "Opacity scale"
msgstr "Scala di opacità"
-#: modules/volume/volume_extract.c:580
-msgid "apply perspective"
+#: modules/volume/volume_extract.c:565
+#, fuzzy
+msgid "Apply perspective"
msgstr "Applica prospettiva"
-#: modules/volume/volume_extract.c:589
-msgid "instant 3D render"
+#: modules/volume/volume_extract.c:574
+#, fuzzy
+msgid "Instant 3D render"
msgstr "Rendering 3D istantaneo"
-#: modules/volume/volume_extract.c:598
+#: modules/volume/volume_extract.c:587
msgid "X view"
msgstr "Vista X"
-#: modules/volume/volume_extract.c:604
+#: modules/volume/volume_extract.c:592
msgid "Y view"
msgstr "Vista Y"
-#: modules/volume/volume_extract.c:610
+#: modules/volume/volume_extract.c:597
msgid "Z view"
msgstr "Vista Z"
-#: modules/volume/volume_extract.c:683
+#: modules/volume/volume_extract.c:669
#, c-format
msgid "X cross-section at x: %d"
msgstr "Sezione trasversale X per X = %d"
-#: modules/volume/volume_extract.c:686
+#: modules/volume/volume_extract.c:672
#, c-format
msgid "Y cross-section at y: %d"
msgstr "Sezione trasversale Y per Y = %d"
-#: modules/volume/volume_extract.c:690
+#: modules/volume/volume_extract.c:676
#, c-format
msgid "Z cross-section at Z = %g %s (#%d)"
msgstr "Sezione trasversale Z per Z = %g %s (#%d)"
-#: modules/volume/volume_extract.c:749 modules/volume/volume_slice.c:1264
+#: modules/volume/volume_extract.c:735 modules/volume/volume_slice.c:1278
#, c-format
msgid "X graph at y: %d z: %d"
msgstr "Grafico X a y: %d z: %d "
-#: modules/volume/volume_extract.c:752 modules/volume/volume_slice.c:1273
+#: modules/volume/volume_extract.c:738 modules/volume/volume_slice.c:1287
#, c-format
msgid "Y graph at x: %d z: %d"
msgstr "Grafico Y a x: %d z: %d"
-#: modules/volume/volume_extract.c:755 modules/volume/volume_slice.c:1255
+#: modules/volume/volume_extract.c:741 modules/volume/volume_slice.c:1269
#, c-format
msgid "Z graph at x: %d y: %d"
msgstr "Grafico Z a x: %d y: %d"
-#: modules/volume/volume_extract.c:776
+#: modules/volume/volume_extract.c:762
msgid "Brick graph"
msgstr ""
-#: modules/volume/volume_extract.c:1056
+#: modules/volume/volume_extract.c:1042
msgid "Load volume data"
msgstr "Carica dati volume"
-#: modules/volume/volume_extract.c:1218
+#: modules/volume/volume_extract.c:1204
#, c-format
msgid "Shown range %g to %g"
msgstr "Intervallo mostrato %g per %g "
-#: modules/volume/volume_extract.c:1911
+#: modules/volume/volume_extract.c:1897
msgid "Building wireframe model..."
msgstr ""
@@ -14497,99 +15312,102 @@ msgid "Evaluate volume force-distance data"
msgstr "Valutazione dati volume forza-distanza"
#: modules/volume/volume_fdfit.c:213
-msgid "/_Evaluate FD data..."
+#, fuzzy
+msgid "/_Evaluate FD Data..."
msgstr "/Valutazione dati FD "
#: modules/volume/volume_fdfit.c:217
msgid "Evaluate force-distance volume data"
msgstr "Valutazione volume dati Forza-Distanza"
-#: modules/volume/volume_fdfit.c:368
+#: modules/volume/volume_fdfit.c:371
msgid "Curve _X position:"
msgstr "Posizione curva _X:"
-#: modules/volume/volume_fdfit.c:386
+#: modules/volume/volume_fdfit.c:380
msgid "Curve _Y position:"
msgstr "Posizione curva _Y:"
-#: modules/volume/volume_fdfit.c:535
+#: modules/volume/volume_fdfit.c:511
msgid "e_stimate"
msgstr "Stima"
-#: modules/volume/volume_invert.c:51
+#: modules/volume/volume_invert.c:39 modules/volume/volumeops.c:39
msgid "Inverts value in volume data"
msgstr "Inverte valore in dati volume"
-#: modules/volume/volume_invert.c:65
-msgid "/_Invert value"
+#: modules/volume/volume_invert.c:53
+#, fuzzy
+msgid "/_Invert Value"
msgstr "/_inverti valore"
-#: modules/volume/volume_invert.c:69
+#: modules/volume/volume_invert.c:57
msgid "Invert value in volume data"
msgstr "Inverti valore nei dati volume"
-#: modules/volume/volume_kmeans.c:94
+#: modules/volume/volume_kmeans.c:95
msgid "Calculates K-means clustering on volume data."
msgstr "Calcolo K-means clustering su dati volume"
-#: modules/volume/volume_kmeans.c:108
-msgid "/_K-means clustering..."
+#: modules/volume/volume_kmeans.c:109
+#, fuzzy
+msgid "/_K-Means Clustering..."
msgstr "/_K-means clustering..."
-#: modules/volume/volume_kmeans.c:112
+#: modules/volume/volume_kmeans.c:113
msgid "Calculate K-means clustering on volume data"
msgstr "Calcolo K-means clustering su dati volume"
-#: modules/volume/volume_kmeans.c:151
+#: modules/volume/volume_kmeans.c:152
msgid "K-means"
msgstr "K-means"
-#: modules/volume/volume_kmeans.c:170 modules/volume/volume_kmedians.c:164
+#: modules/volume/volume_kmeans.c:170 modules/volume/volume_kmedians.c:163
msgid "_Number of clusters:"
msgstr "_Numero clusters:"
-#: modules/volume/volume_kmeans.c:177 modules/volume/volume_kmedians.c:171
+#: modules/volume/volume_kmeans.c:177 modules/volume/volume_kmedians.c:170
msgid "Convergence _precision digits:"
msgstr "Cifre _precisione Convergenza"
-#: modules/volume/volume_kmeans.c:184 modules/volume/volume_kmedians.c:178
+#: modules/volume/volume_kmeans.c:183 modules/volume/volume_kmedians.c:176
msgid "_Max. iterations:"
msgstr "_Max. iterazioni:"
-#: modules/volume/volume_kmeans.c:189 modules/volume/volume_kmedians.c:183
+#: modules/volume/volume_kmeans.c:187 modules/volume/volume_kmedians.c:181
msgid "_Normalize"
msgstr "_Normalizzazione"
-#: modules/volume/volume_kmeans.c:195
+#: modules/volume/volume_kmeans.c:193
#, fuzzy
msgid "_Remove outliers"
msgstr "Rimuovi macchie"
-#: modules/volume/volume_kmeans.c:208
+#: modules/volume/volume_kmeans.c:202
#, fuzzy
msgid "Outliers _threshold:"
msgstr "Soglia inferiore:"
-#: modules/volume/volume_kmeans.c:431
+#: modules/volume/volume_kmeans.c:425
msgid "K-means iteration..."
msgstr ""
-#: modules/volume/volume_kmeans.c:651
+#: modules/volume/volume_kmeans.c:645
#, c-format
msgid "K-means cluster of %s"
msgstr ""
-#: modules/volume/volume_kmeans.c:660
+#: modules/volume/volume_kmeans.c:654
#, c-format
msgid "K-means error of %s"
msgstr ""
-#: modules/volume/volume_kmeans.c:670 modules/volume/volume_kmedians.c:514
+#: modules/volume/volume_kmeans.c:664 modules/volume/volume_kmedians.c:512
#, c-format
msgid "Pre-normalized intensity of %s"
msgstr ""
-#: modules/volume/volume_kmeans.c:702
+#: modules/volume/volume_kmeans.c:696
#, c-format
msgid "K-means center %d"
msgstr ""
@@ -14599,7 +15417,8 @@ msgid "Calculates K-medians clustering on volume data."
msgstr "Calcolo K-medians clustering su dati volume"
#: modules/volume/volume_kmedians.c:102
-msgid "/_K-medians clustering..."
+#, fuzzy
+msgid "/_K-Medians Clustering..."
msgstr "/_K-medians clustering..."
#: modules/volume/volume_kmedians.c:106
@@ -14610,46 +15429,46 @@ msgstr "Calcolo K-medians clustering su dati volume"
msgid "K-Medians"
msgstr "K-Mediane"
-#: modules/volume/volume_kmedians.c:392
+#: modules/volume/volume_kmedians.c:390
msgid "K-medians iteration..."
msgstr "Iterazione K-mediane ..."
-#: modules/volume/volume_kmedians.c:495
+#: modules/volume/volume_kmedians.c:493
#, c-format
msgid "K-medians cluster of %s"
msgstr ""
-#: modules/volume/volume_kmedians.c:504
+#: modules/volume/volume_kmedians.c:502
#, c-format
msgid "K-medians error of %s"
msgstr ""
-#: modules/volume/volume_kmedians.c:546
+#: modules/volume/volume_kmedians.c:544
#, c-format
msgid "K-medians center %d"
msgstr ""
-#: modules/volume/volume_linestat.c:171
+#: modules/volume/volume_linestat.c:173
msgid "Summarizes profiles of volume data to a channel."
msgstr "Riassume profili di dati volume in un canale"
-#: modules/volume/volume_linestat.c:185
+#: modules/volume/volume_linestat.c:187
msgid "/Summarize _Profiles..."
msgstr "/Sommario _Profili..."
-#: modules/volume/volume_linestat.c:189
+#: modules/volume/volume_linestat.c:191
msgid "Summarize profiles"
msgstr "Sommario Profili"
-#: modules/volume/volume_linestat.c:249
+#: modules/volume/volume_linestat.c:251
msgid "_Extract image"
msgstr "_Estrazione immagine"
-#: modules/volume/volume_linestat.c:250
+#: modules/volume/volume_linestat.c:252
msgid "Set _preview"
msgstr "regolazione ante_prima"
-#: modules/volume/volume_linestat.c:284
+#: modules/volume/volume_linestat.c:289
msgid "Summarize Volume Profiles"
msgstr "Sommario Profili Volume"
@@ -14673,53 +15492,122 @@ msgstr "Immagine sezione"
msgid "Line graph"
msgstr "grafico lineare"
-#: modules/volume/volume_slice.c:290
+#: modules/volume/volume_slice.c:292
msgid "Slice Volume Data"
msgstr "Dati sezione Volume"
-#: modules/volume/volume_slice.c:369
+#: modules/volume/volume_slice.c:371
msgid "_Base plane:"
msgstr "Piano _Base:"
-#: modules/volume/volume_slice.c:420
+#: modules/volume/volume_slice.c:422
msgid "Extract _multiple items"
msgstr "Estrazione multipla"
-#: modules/volume/volume_slice.c:437
+#: modules/volume/volume_slice.c:439
msgid "Positions"
msgstr "Posizioni"
-#: modules/volume/volume_slice.c:484
+#: modules/volume/volume_slice.c:492
msgid "_Z:"
msgstr "_Z:"
-#: modules/volume/volume_slice.c:1156
+#: modules/volume/volume_slice.c:1167
#, c-format
msgid "Z slice at %.*f%s%s (#%d)"
msgstr "Sezione trasversale Z a %.*f%s%s (#%d)"
-#: modules/volume/volume_slice.c:1167
+#: modules/volume/volume_slice.c:1178
#, c-format
msgid "Y slice at %.*f%s%s (#%d)"
msgstr "Sezione trasversale Y a %.*f%s%s (#%d)"
-#: modules/volume/volume_slice.c:1178
+#: modules/volume/volume_slice.c:1189
#, c-format
msgid "X slice at %.*f%s%s (#%d)"
msgstr "Sezione trasversale X a %.*f%s%s (#%d)"
-#: modules/volume/volume_slice.c:1307
+#: modules/volume/volume_slice.c:1325
msgid "Volume Z graphs"
msgstr "Grafici Volume Z"
-#: modules/volume/volume_slice.c:1314
+#: modules/volume/volume_slice.c:1332
msgid "Volume X graphs"
msgstr "Grafici Volume X"
-#: modules/volume/volume_slice.c:1321
+#: modules/volume/volume_slice.c:1339
msgid "Volume Y graphs"
msgstr "Grafici Volume Y"
+#: modules/volume/volume_swaxes.c:104
+#, fuzzy
+msgid "Swaps axes of volume data."
+msgstr "Inverte valore in dati volume"
+
+#: modules/volume/volume_swaxes.c:118
+#, fuzzy
+msgid "/S_wap axes..."
+msgstr "/Salva con nome..."
+
+#: modules/volume/volume_swaxes.c:122
+#, fuzzy
+msgid "Swap axes"
+msgstr "Mostra _assi"
+
+#: modules/volume/volume_swaxes.c:156
+#, fuzzy
+msgid "X"
+msgstr "_X:"
+
+#: modules/volume/volume_swaxes.c:157
+#, fuzzy
+msgid "X, reversed"
+msgstr "Inverti"
+
+#: modules/volume/volume_swaxes.c:158
+#, fuzzy
+msgid "Y"
+msgstr "_Y:"
+
+#: modules/volume/volume_swaxes.c:159
+#, fuzzy
+msgid "Y, reversed"
+msgstr "Inverti"
+
+#: modules/volume/volume_swaxes.c:160
+msgid "Z"
+msgstr ""
+
+#: modules/volume/volume_swaxes.c:161
+#, fuzzy
+msgid "Z, reversed"
+msgstr "Inverti"
+
+#: modules/volume/volume_swaxes.c:175
+msgid "Swap Volume Axes"
+msgstr ""
+
+#: modules/volume/volume_swaxes.c:196
+msgid "Current _X axis will become:"
+msgstr ""
+
+#: modules/volume/volume_swaxes.c:204
+msgid "Current _Y axis will become:"
+msgstr ""
+
+#: modules/volume/volume_swaxes.c:212
+msgid "Current _Z axis will become:"
+msgstr ""
+
+#: modules/volume/volume_swaxes.c:219
+#, fuzzy
+msgid "Create new volume data"
+msgstr "Carica dati volume"
+
+#: modules/volume/volume_swaxes.c:286
+msgid "Z axis calibration will be lost."
+msgstr ""
+
#: modules/volume/volume_zcal.c:104
msgid "Attaches, extracts and removes volume data z-axis calibration."
msgstr "Allega, estrae e rimuove volume dati calibrazione asse Z"
@@ -14789,6 +15677,16 @@ msgstr ""
"Il numero di valori %d\n"
" file datidifferisce dal numero dei piani %d."
+#: modules/volume/volumeops.c:53
+#, fuzzy
+msgid "/Extract _Preview"
+msgstr "Estrae profili"
+
+#: modules/volume/volumeops.c:57
+#, fuzzy
+msgid "Extract volume data preview to an image"
+msgstr "Salva vista 3D come immagine"
+
#: modules/xyz/xyz_drift.c:267
msgid "Analyzes drift in XYZ data."
msgstr "Analisi deriva in dati XYZ"
@@ -14831,7 +15729,7 @@ msgstr "Deriva asse X"
msgid "Analyze XYZ Drift"
msgstr "Analizza deriva XYZ"
-#: modules/xyz/xyz_drift.c:566 modules/xyz/xyz_raster.c:391
+#: modules/xyz/xyz_drift.c:566 modules/xyz/xyz_raster.c:406
msgid "Reset Ran_ges"
msgstr "Azzera intervalli"
@@ -14839,11 +15737,11 @@ msgstr "Azzera intervalli"
msgid "_Guess parameters"
msgstr "Parametri _Guess"
-#: modules/xyz/xyz_drift.c:778 modules/xyz/xyz_raster.c:570
+#: modules/xyz/xyz_drift.c:778 modules/xyz/xyz_raster.c:539
msgid "_X-range:"
msgstr "Intervallo _X:"
-#: modules/xyz/xyz_drift.c:800 modules/xyz/xyz_raster.c:592
+#: modules/xyz/xyz_drift.c:800 modules/xyz/xyz_raster.c:561
msgid "_Y-range:"
msgstr "Intervallo _Y:"
@@ -14921,7 +15819,7 @@ msgstr "Vicini non trovati"
msgid "Fitting in progress..."
msgstr "Adattamento in progresso..."
-#: modules/xyz/xyz_drift.c:2269 modules/xyz/xyz_raster.c:1012
+#: modules/xyz/xyz_drift.c:2264 modules/xyz/xyz_raster.c:981
msgid "Physical dimensions are invalid."
msgstr "Le dimensioni fisiche non sono valide"
@@ -14961,40 +15859,40 @@ msgstr "Livella dati XYZ"
msgid "Update X and Y of _all compatible data"
msgstr "Aggiorna x e Y di tutti i dati compatibili"
-#: modules/xyz/xyz_raster.c:197
+#: modules/xyz/xyz_raster.c:194
msgid "Rasterizes XYZ data to images."
msgstr "Rasterizza dati XYZ"
-#: modules/xyz/xyz_raster.c:211
+#: modules/xyz/xyz_raster.c:208
msgid "/_Rasterize..."
msgstr "/_Rasterizzazione.."
-#: modules/xyz/xyz_raster.c:215
+#: modules/xyz/xyz_raster.c:212
msgid "Rasterize to image"
msgstr "Rasterizza"
-#: modules/xyz/xyz_raster.c:340
+#: modules/xyz/xyz_raster.c:337
msgid "Rasterize XYZ Data"
msgstr "Rasterizzazione dati XYZ"
-#: modules/xyz/xyz_raster.c:354
+#: modules/xyz/xyz_raster.c:351
msgid "Create Image _Directly"
msgstr "Crea immagine direttamente"
-#: modules/xyz/xyz_raster.c:360
+#: modules/xyz/xyz_raster.c:357
msgid "XY points form a regular grid so interpolation is not necessary."
msgstr ""
"I punti XY formano una griglia regolare. Interpolazione non necessaria."
-#: modules/xyz/xyz_raster.c:381
+#: modules/xyz/xyz_raster.c:392
msgid "Make Pixels S_quare"
msgstr "Rendi pixel quadrati"
-#: modules/xyz/xyz_raster.c:642
+#: modules/xyz/xyz_raster.c:611
msgid "Field"
msgstr "Campo"
-#: modules/xyz/xyz_raster.c:956
+#: modules/xyz/xyz_raster.c:925
#, c-format
msgid ""
"Number of points: %u\n"
@@ -15005,7 +15903,7 @@ msgstr ""
"Uniti in quanto troppo vicini: %u\n"
"Aggiunti sui bordi: %u"
-#: modules/xyz/xyz_raster.c:1091
+#: modules/xyz/xyz_raster.c:1065
msgid ""
"XYZ data regularization failed due to numerical instability or was "
"interrupted."
@@ -15013,6 +15911,66 @@ msgstr ""
"regolarizzazione dati XYZ fallita a causa di instabilità numerica o è stata "
"interrotta"
+#~ msgid "pixels"
+#~ msgstr "pixel"
+
+#~ msgid "Fast Fourier Transform"
+#~ msgstr "Trasformata di Fourier"
+
+#~ msgid "built-in SimpleFFT\n"
+#~ msgstr "Semplice FFT, incorporata\n"
+
+#~ msgid "Re_fine"
+#~ msgstr "Raf_fina"
+
+#~ msgid "Surface _coverage:"
+#~ msgstr "Superficie _copertura:"
+
+#~ msgid "Distribute"
+#~ msgstr "Distribuisci"
+
+#~ msgid "Replace"
+#~ msgstr "Sostituire"
+
+#~ msgid "_Fix res.:"
+#~ msgstr "_Fix res.:"
+
+#~ msgid "Reco_mpute"
+#~ msgstr "Ricalcola"
+
+#~ msgid "Show mode:"
+#~ msgstr "Mostra modalità:"
+
+#~ msgid "Initializing GUI"
+#~ msgstr "Inizializzazione GUI"
+
+#, fuzzy
+#~ msgid "Slab size _x:"
+#~ msgstr "Dimensioni piano:"
+
+#, fuzzy
+#~ msgid "Slab size _y:"
+#~ msgstr "Dimensioni piano:"
+
+#, fuzzy
+#~ msgid "Stitch operations on data fields."
+#~ msgstr "Semplici operazioni matematiche con campi dati "
+
+#, fuzzy
+#~ msgid "Stitch operations on data"
+#~ msgstr "Operazioni aritmetiche sui dati"
+
+#, fuzzy
+#~ msgid "X offset"
+#~ msgstr "_X offset:"
+
+#, fuzzy
+#~ msgid "Y offset"
+#~ msgstr "_Y offset:"
+
+#~ msgid "Create new channel"
+#~ msgstr "Crea nuovo canale"
+
#~ msgid "Borders extension..."
#~ msgstr "Estensione margini...."
@@ -15319,9 +16277,6 @@ msgstr ""
#~ msgid "Triangulation..."
#~ msgstr "Triangolazione.."
-#~ msgid "Starting..."
-#~ msgstr "Inizio...."
-
#, fuzzy
#~ msgid "Mean height"
#~ msgstr "Nuova Altezza:"
@@ -15521,9 +16476,6 @@ msgstr ""
#~ msgid "Removes the entire filter mask"
#~ msgstr "Rimuove intera maschera filtro"
-#~ msgid "Ra:"
-#~ msgstr "Ra:"
-
#~ msgid "Rms:"
#~ msgstr "Rms:"
@@ -15614,9 +16566,6 @@ msgstr ""
#~ msgid "Attach Mask"
#~ msgstr "Allega maschera"
-#~ msgid "Output"
-#~ msgstr "Output"
-
#~ msgid "Plane Fit Mode"
#~ msgstr "Adattamento Planare"
diff --git a/po/ko.gmo b/po/ko.gmo
index a50202c..ba7c8ae 100644
Binary files a/po/ko.gmo and b/po/ko.gmo differ
diff --git a/po/ko.po b/po/ko.po
index 62401f1..0400673 100644
--- a/po/ko.po
+++ b/po/ko.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gwyddion\n"
"Report-Msgid-Bugs-To: yeti at gwyddion.net\n"
-"POT-Creation-Date: 2016-11-18 11:05+0100\n"
+"POT-Creation-Date: 2017-08-15 17:48+0200\n"
"PO-Revision-Date: 2015-04-20 09:48+0200\n"
"Last-Translator: Jeong Jiseong <stopstar at gist.ac.kr>\n"
"Language-Team: Korean_gwyddion\n"
@@ -127,7 +127,8 @@ msgstr "Hertz 방식 접촉 ()"
#: app/data-browser-aux.c:1480 app/data-browser.c:2280 app/data-browser.c:2887
#: app/data-browser.c:3707 app/data-browser.c:3857 app/data-browser.c:4139
#: app/data-browser.c:4504 app/data-browser.c:4590 app/data-browser.c:5016
-#: app/resource-editor.c:366 modules/process/convolution_filter.c:691
+#: app/resource-editor.c:366 modules/file/xyzexport.c:214
+#: modules/process/convolution_filter.c:691
msgid "Untitled"
msgstr "제목 없음"
@@ -135,100 +136,108 @@ msgstr "제목 없음"
msgid "Initial residua evaluation..."
msgstr ""
-#: libgwyddion/gwynlfit.c:479 modules/process/fit-shape.c:1632
+#: libgwyddion/gwynlfit.c:479 modules/process/fit-shape.c:1646
#, fuzzy
msgid "Fitting..."
msgstr "FFT 필터링"
-#: libgwyddion/gwynlfitpreset.c:1442 libprocess/gwyprocessenums.c:101
-#: libprocess/gwyshapefitpreset.c:347
+#: libgwyddion/gwynlfitpreset.c:1549 libprocess/gwyprocessenums.c:101
+#: libprocess/gwyshapefitpreset.c:347 modules/process/psf-fit.c:157
msgid "Gaussian"
msgstr "가우시안 타입"
-#: libgwyddion/gwynlfitpreset.c:1457
+#: libgwyddion/gwynlfitpreset.c:1564
msgid "Gaussian (PSDF)"
msgstr "가우시안 타입 (PSDF)"
-#: libgwyddion/gwynlfitpreset.c:1470
+#: libgwyddion/gwynlfitpreset.c:1577
msgid "Gaussian (ACF)"
msgstr "가우시안 타입 (ACF)"
-#: libgwyddion/gwynlfitpreset.c:1483
+#: libgwyddion/gwynlfitpreset.c:1590
msgid "Gaussian (HHCF)"
msgstr "가우시안 타입 (PSDF)"
-#: libgwyddion/gwynlfitpreset.c:1496
+#: libgwyddion/gwynlfitpreset.c:1603
msgid "Gaussian (RPSDF)"
msgstr "가우시안 타입 (RPSDF)"
-#: libgwyddion/gwynlfitpreset.c:1509
+#: libgwyddion/gwynlfitpreset.c:1616
#, fuzzy
msgid "Two Gaussians (PSDF)"
msgstr "가우시안 타입 (PSDF)"
-#: libgwyddion/gwynlfitpreset.c:1524 modules/xyz/xyz_drift.c:841
-#: modules/xyz/xyz_drift.c:846 modules/xyz/xyz_drift.c:1819
+#: libgwyddion/gwynlfitpreset.c:1631 modules/xyz/xyz_drift.c:841
+#: modules/xyz/xyz_drift.c:846 modules/xyz/xyz_drift.c:1818
msgid "Exponential"
msgstr "지수타입"
-#: libgwyddion/gwynlfitpreset.c:1536
+#: libgwyddion/gwynlfitpreset.c:1643
msgid "Exponential (PSDF)"
msgstr "지수타입 (PSDF)"
-#: libgwyddion/gwynlfitpreset.c:1549
+#: libgwyddion/gwynlfitpreset.c:1656
msgid "Exponential (ACF)"
msgstr "지수타입 (ACF)"
-#: libgwyddion/gwynlfitpreset.c:1561
+#: libgwyddion/gwynlfitpreset.c:1668
msgid "Exponential (HHCF)"
msgstr "지수타입 (HHCF)"
-#: libgwyddion/gwynlfitpreset.c:1574
+#: libgwyddion/gwynlfitpreset.c:1681
msgid "Exponential (RPSDF)"
msgstr "지수타입 (RPSDF)"
-#: libgwyddion/gwynlfitpreset.c:1588
+#: libgwyddion/gwynlfitpreset.c:1695
+msgid "K-correlated (PSDF)"
+msgstr ""
+
+#: libgwyddion/gwynlfitpreset.c:1709
msgid "Polynomial (order 0)"
msgstr "다항식 (0차)"
-#: libgwyddion/gwynlfitpreset.c:1599 modules/xyz/xyz_drift.c:1805
+#: libgwyddion/gwynlfitpreset.c:1720 modules/xyz/xyz_drift.c:1804
msgid "Polynomial (order 1)"
msgstr "다항식 (1차)"
-#: libgwyddion/gwynlfitpreset.c:1610
+#: libgwyddion/gwynlfitpreset.c:1731
msgid "Polynomial (order 2)"
msgstr "다항식 (2차)"
-#: libgwyddion/gwynlfitpreset.c:1622
+#: libgwyddion/gwynlfitpreset.c:1743
msgid "Polynomial (order 3)"
msgstr "다항식 (3차)"
-#: libgwyddion/gwynlfitpreset.c:1635
+#: libgwyddion/gwynlfitpreset.c:1756
msgid "Square wave"
msgstr "사각파형 "
-#: libgwyddion/gwynlfitpreset.c:1651
+#: libgwyddion/gwynlfitpreset.c:1772
msgid "Parabolic step"
msgstr ""
-#: libgwyddion/gwynlfitpreset.c:1667
+#: libgwyddion/gwynlfitpreset.c:1788
msgid "Smooth slanted step"
msgstr ""
-#: libgwyddion/gwynlfitpreset.c:1684
+#: libgwyddion/gwynlfitpreset.c:1805
msgid "Smooth bent step"
msgstr ""
-#: libgwyddion/gwynlfitpreset.c:1700
+#: libgwyddion/gwynlfitpreset.c:1821
+msgid "Boltzmann bent step"
+msgstr ""
+
+#: libgwyddion/gwynlfitpreset.c:1837
#, fuzzy
msgid "Power"
msgstr "거듭제곱"
-#: libgwyddion/gwynlfitpreset.c:1712 libprocess/gwyshapefitpreset.c:348
+#: libgwyddion/gwynlfitpreset.c:1849 libprocess/gwyshapefitpreset.c:348
msgid "Lorentzian"
msgstr "로렌츠 "
-#: libgwyddion/gwynlfitpreset.c:1726
+#: libgwyddion/gwynlfitpreset.c:1863
msgid "Sinc"
msgstr "Sinc"
@@ -249,7 +258,7 @@ msgid "Step height (positive)"
msgstr "단차 높이 (양수)"
#: libprocess/cdline.c:590 libprocess/cdline.c:599
-#: libgwydgets/gwydgetenums.c:48 modules/process/hough.c:170
+#: libgwydgets/gwydgetenums.c:48 modules/process/hough.c:163
msgid "Line"
msgstr "선"
@@ -262,7 +271,7 @@ msgid "Circle (down)"
msgstr "원 (아래)"
#: libprocess/cdline.c:608 libprocess/cdline.c:617
-#: libgwydgets/gwygraphareadialog.c:557 modules/process/hough.c:171
+#: libgwydgets/gwygraphareadialog.c:550 modules/process/hough.c:164
msgid "Circle"
msgstr "원"
@@ -270,242 +279,242 @@ msgstr "원"
msgid "Circle (up)"
msgstr "원 (위)"
-#: libprocess/gwygrainvalue.c:64
+#: libprocess/gwygrainvalue.c:62
#, fuzzy
msgid "Grain number"
msgstr "Grain number"
-#: libprocess/gwygrainvalue.c:73 modules/process/curvature.c:129
+#: libprocess/gwygrainvalue.c:71 modules/process/curvature.c:128
msgid "Center x position"
msgstr "x축 중간점"
-#: libprocess/gwygrainvalue.c:82 modules/process/curvature.c:130
+#: libprocess/gwygrainvalue.c:80 modules/process/curvature.c:129
msgid "Center y position"
msgstr "y축 중간점"
-#: libprocess/gwygrainvalue.c:91
+#: libprocess/gwygrainvalue.c:89
msgid "Minimum value"
msgstr "최소 값"
-#: libprocess/gwygrainvalue.c:100
+#: libprocess/gwygrainvalue.c:98
msgid "Maximum value"
msgstr "최대 값"
-#: libprocess/gwygrainvalue.c:109 modules/process/bdep_synth.c:133
-#: modules/tools/filter.c:237
+#: libprocess/gwygrainvalue.c:107 modules/process/bdep_synth.c:133
+#: modules/tools/filter.c:238
msgid "Mean value"
msgstr "평균 값"
-#: libprocess/gwygrainvalue.c:118 modules/tools/filter.c:238
+#: libprocess/gwygrainvalue.c:116 modules/tools/filter.c:239
msgid "Median value"
msgstr "중간 값"
-#: libprocess/gwygrainvalue.c:127
+#: libprocess/gwygrainvalue.c:125
msgid "Minimum value on boundary"
msgstr "영역 내 최소 값"
-#: libprocess/gwygrainvalue.c:136
+#: libprocess/gwygrainvalue.c:134
msgid "Maximum value on boundary"
msgstr "영역 내 최대 값"
-#: libprocess/gwygrainvalue.c:145
+#: libprocess/gwygrainvalue.c:143
msgid "Pixel area"
msgstr "픽셀 면적"
-#: libprocess/gwygrainvalue.c:154
+#: libprocess/gwygrainvalue.c:152
msgid "Projected area"
msgstr "투영 면적"
-#: libprocess/gwygrainvalue.c:163
+#: libprocess/gwygrainvalue.c:161
msgid "Surface area"
msgstr "표면 면적"
-#: libprocess/gwygrainvalue.c:172
+#: libprocess/gwygrainvalue.c:170
#, fuzzy
msgid "Equivalent square side"
msgstr "등가 사각형 면 "
-#: libprocess/gwygrainvalue.c:181
+#: libprocess/gwygrainvalue.c:179
msgid "Equivalent disc radius"
msgstr "등가 디스크 반경"
-#: libprocess/gwygrainvalue.c:190
+#: libprocess/gwygrainvalue.c:188
msgid "Area above half-height"
msgstr "전체 높이의 절반보다 높은 영역의 면적"
-#: libprocess/gwygrainvalue.c:199
+#: libprocess/gwygrainvalue.c:197
msgid "Area of convex hull"
msgstr "볼록 껍질(convex hull)의 면적"
#. TRANSLATORS: Grain volume calculated using basis (foot) set to
#. * zero.
-#: libprocess/gwygrainvalue.c:210
+#: libprocess/gwygrainvalue.c:208
#, fuzzy
msgid "Zero basis volume"
msgstr "0점 기준 부피"
#. TRANSLATORS: Grain volume calculated using basis (foot) set to the
#. * grain minimum.
-#: libprocess/gwygrainvalue.c:221
+#: libprocess/gwygrainvalue.c:219
#, fuzzy
msgid "Grain minimum basis volume"
msgstr "Grain 최소 값 기준 부피"
#. TRANSLATORS: Grain volume calculated using basis (foot) set to the
#. * Laplacian background.
-#: libprocess/gwygrainvalue.c:232
+#: libprocess/gwygrainvalue.c:230
#, fuzzy
msgid "Laplacian background basis volume"
msgstr "라플라시안 배경 기준 부피"
-#: libprocess/gwygrainvalue.c:241
+#: libprocess/gwygrainvalue.c:239
msgid "Projected boundary length"
msgstr "투영된 경계의 길이 "
-#: libprocess/gwygrainvalue.c:250
+#: libprocess/gwygrainvalue.c:248
msgid "Minimum bounding size"
msgstr "최소 경계의 크기"
-#: libprocess/gwygrainvalue.c:259
+#: libprocess/gwygrainvalue.c:257
msgid "Minimum bounding direction"
msgstr "최소 경계의 방향"
-#: libprocess/gwygrainvalue.c:268
+#: libprocess/gwygrainvalue.c:266
msgid "Maximum bounding size"
msgstr "최대 경계의 크기"
-#: libprocess/gwygrainvalue.c:277
+#: libprocess/gwygrainvalue.c:275
msgid "Maximum bounding direction"
msgstr "최대 경계의 방향"
-#: libprocess/gwygrainvalue.c:286
+#: libprocess/gwygrainvalue.c:284
msgid "Maximum inscribed disc radius"
msgstr ""
-#: libprocess/gwygrainvalue.c:295
+#: libprocess/gwygrainvalue.c:293
msgid "Maximum inscribed disc center x position"
msgstr ""
-#: libprocess/gwygrainvalue.c:304
+#: libprocess/gwygrainvalue.c:302
msgid "Maximum inscribed disc center y position"
msgstr ""
-#: libprocess/gwygrainvalue.c:313
+#: libprocess/gwygrainvalue.c:311
msgid "Minimum circumcircle radius"
msgstr ""
-#: libprocess/gwygrainvalue.c:322
+#: libprocess/gwygrainvalue.c:320
msgid "Minimum circumcircle center x position"
msgstr ""
-#: libprocess/gwygrainvalue.c:331
+#: libprocess/gwygrainvalue.c:329
msgid "Minimum circumcircle center y position"
msgstr ""
-#: libprocess/gwygrainvalue.c:340
+#: libprocess/gwygrainvalue.c:338
msgid "Mean radius"
msgstr ""
-#: libprocess/gwygrainvalue.c:349 modules/tools/readvalue.c:319
+#: libprocess/gwygrainvalue.c:347 modules/tools/readvalue.c:322
msgid "Inclination θ"
msgstr ""
-#: libprocess/gwygrainvalue.c:358 modules/tools/readvalue.c:329
+#: libprocess/gwygrainvalue.c:356 modules/tools/readvalue.c:332
msgid "Inclination φ"
msgstr ""
-#: libprocess/gwygrainvalue.c:367
+#: libprocess/gwygrainvalue.c:365
msgid "Curvature center x position"
msgstr ""
-#: libprocess/gwygrainvalue.c:376
+#: libprocess/gwygrainvalue.c:374
msgid "Curvature center y position"
msgstr ""
-#: libprocess/gwygrainvalue.c:385
+#: libprocess/gwygrainvalue.c:383
msgid "Curvature center z value"
msgstr ""
-#: libprocess/gwygrainvalue.c:394 modules/tools/readvalue.c:344
+#: libprocess/gwygrainvalue.c:392 modules/tools/readvalue.c:347
msgid "Curvature 1"
msgstr ""
-#: libprocess/gwygrainvalue.c:403 modules/tools/readvalue.c:354
+#: libprocess/gwygrainvalue.c:401 modules/tools/readvalue.c:357
msgid "Curvature 2"
msgstr ""
-#: libprocess/gwygrainvalue.c:412
+#: libprocess/gwygrainvalue.c:410
msgid "Curvature angle 1"
msgstr ""
-#: libprocess/gwygrainvalue.c:421
+#: libprocess/gwygrainvalue.c:419
msgid "Curvature angle 2"
msgstr ""
-#: libprocess/gwygrainvalue.c:430
+#: libprocess/gwygrainvalue.c:428
msgid "Major semiaxis of equivalent ellipse"
msgstr ""
-#: libprocess/gwygrainvalue.c:439
+#: libprocess/gwygrainvalue.c:437
msgid "Minor semiaxis of equivalent ellipse"
msgstr ""
-#: libprocess/gwygrainvalue.c:448
+#: libprocess/gwygrainvalue.c:446
msgid "Orientation of equivalent ellipse"
msgstr ""
-#: libprocess/gwygrainvalue.c:1120
+#: libprocess/gwygrainvalue.c:1118
msgid "Id"
msgstr "아이디"
-#: libprocess/gwygrainvalue.c:1121 modules/graph/graph_peaks.c:156
-#: modules/process/extract_path.c:391 modules/process/wave_synth.c:482
-#: modules/tools/readvalue.c:251
+#: libprocess/gwygrainvalue.c:1119 modules/graph/graph_peaks.c:154
+#: modules/process/extract_path.c:391 modules/process/wave_synth.c:513
+#: modules/tools/readvalue.c:253
msgid "Position"
msgstr "위치"
-#: libprocess/gwygrainvalue.c:1122 app/meta.c:411 modules/file/imgexport.c:4625
-#: modules/process/curvature.c:762 modules/tools/level3.c:468
-#: modules/tools/readvalue.c:286
+#: libprocess/gwygrainvalue.c:1120 app/meta.c:411 modules/file/imgexport.c:4573
+#: modules/process/curvature.c:759 modules/tools/level3.c:475
+#: modules/tools/readvalue.c:290
msgid "Value"
msgstr "값"
-#: libprocess/gwygrainvalue.c:1123
+#: libprocess/gwygrainvalue.c:1121
msgid "Area"
msgstr "면적"
-#: libprocess/gwygrainvalue.c:1124 app/data-browser.c:5624 app/toolbox.c:110
+#: libprocess/gwygrainvalue.c:1122 app/data-browser.c:5624 app/toolbox.c:115
msgid "Volume"
msgstr "부피"
-#: libprocess/gwygrainvalue.c:1125
+#: libprocess/gwygrainvalue.c:1123
msgid "Boundary"
msgstr "경계"
-#: libprocess/gwygrainvalue.c:1126 modules/process/pat_synth.c:829
-#: modules/process/pat_synth.c:1131 modules/process/pat_synth.c:1466
-#: modules/tools/linestats.c:171 modules/volume/volume_linestat.c:147
+#: libprocess/gwygrainvalue.c:1124 modules/process/pat_synth.c:830
+#: modules/process/pat_synth.c:1132 modules/process/pat_synth.c:1467
+#: modules/tools/linestats.c:171 modules/volume/volume_linestat.c:149
msgid "Slope"
msgstr "기울기"
-#: libprocess/gwygrainvalue.c:1127 modules/process/curvature.c:213
-#: modules/process/curvature.c:613
+#: libprocess/gwygrainvalue.c:1125 modules/process/curvature.c:212
+#: modules/process/curvature.c:615
msgid "Curvature"
msgstr "곡률"
-#: libprocess/gwygrainvalue.c:1128
+#: libprocess/gwygrainvalue.c:1126
msgid "Moment"
msgstr "순간"
-#: libprocess/gwygrainvalue.c:1132
+#: libprocess/gwygrainvalue.c:1130
msgid "User"
msgstr "사용자"
-#: libprocess/gwyprocessenums.c:44
+#: libprocess/gwyprocessenums.c:44 modules/process/preview.h:263
msgid "Union"
msgstr "조합"
-#: libprocess/gwyprocessenums.c:45
+#: libprocess/gwyprocessenums.c:45 modules/process/preview.h:255
#, fuzzy
msgid "Intersection"
msgstr "교차점"
@@ -585,14 +594,14 @@ msgid "Scale and space adaptive"
msgstr ""
#. TRANSLATORS: Interpolation type (AKA nearest neighbour)
-#: libprocess/gwyprocessenums.c:207 modules/file/imgexport.c:3791
-#: modules/xyz/xyz_raster.c:640
+#: libprocess/gwyprocessenums.c:207 modules/file/imgexport.c:3756
+#: modules/xyz/xyz_raster.c:609
#, fuzzy
msgid "Round"
msgstr "둥근"
-#: libprocess/gwyprocessenums.c:208 modules/file/imgexport.c:3792
-#: modules/xyz/xyz_raster.c:641
+#: libprocess/gwyprocessenums.c:208 modules/file/imgexport.c:3757
+#: modules/xyz/xyz_raster.c:610
msgid "Linear"
msgstr "선형적인"
@@ -680,27 +689,27 @@ msgstr ""
msgid "Use entire image (ignore mask)"
msgstr ""
-#: libprocess/gwyprocessenums.c:602
+#: libprocess/gwyprocessenums.c:604
msgid "distance|City-block"
msgstr ""
-#: libprocess/gwyprocessenums.c:603
+#: libprocess/gwyprocessenums.c:605
msgid "distance|Chess"
msgstr ""
-#: libprocess/gwyprocessenums.c:604
+#: libprocess/gwyprocessenums.c:606
msgid "distance|Octagonal 4,8"
msgstr ""
-#: libprocess/gwyprocessenums.c:605
+#: libprocess/gwyprocessenums.c:607
msgid "distance|Octagonal 8,4"
msgstr ""
-#: libprocess/gwyprocessenums.c:606
+#: libprocess/gwyprocessenums.c:608
msgid "distance|Octagonal"
msgstr ""
-#: libprocess/gwyprocessenums.c:607
+#: libprocess/gwyprocessenums.c:609
msgid "distance|Euclidean"
msgstr ""
@@ -737,11 +746,11 @@ msgstr "평행의"
msgid "Ring"
msgstr ""
-#: libprocess/morph_lib.c:169 libprocess/tip.c:1043
+#: libprocess/morph_lib.c:169 libprocess/tip.c:1052
msgid "Dilation..."
msgstr ""
-#: libprocess/morph_lib.c:235 libprocess/tip.c:1164
+#: libprocess/morph_lib.c:235 libprocess/tip.c:1173
msgid "Erosion..."
msgstr ""
@@ -772,83 +781,83 @@ msgid_plural "Found %d internal local maxima"
msgstr[0] ""
msgstr[1] ""
-#: libprocess/tip.c:422
+#: libprocess/tip.c:431
#, fuzzy
msgid "Pyramid"
msgstr "vdW: 각뿔(피라미드)"
-#: libprocess/tip.c:423 libprocess/tip.c:429 libprocess/tip.c:435
+#: libprocess/tip.c:432 libprocess/tip.c:438 libprocess/tip.c:444
msgid "Pyramidal"
msgstr ""
-#: libprocess/tip.c:428
+#: libprocess/tip.c:437
msgid "Contact"
msgstr ""
-#: libprocess/tip.c:434
+#: libprocess/tip.c:443
msgid "Noncontact"
msgstr ""
-#: libprocess/tip.c:440
+#: libprocess/tip.c:449
msgid "Delta function"
msgstr ""
-#: libprocess/tip.c:441
+#: libprocess/tip.c:450
msgid "Analytical"
msgstr ""
-#: libprocess/tip.c:446
+#: libprocess/tip.c:455 modules/process/fibre_synth.c:259
#, fuzzy
msgid "Parabola"
msgstr "평행의"
-#: libprocess/tip.c:447 libprocess/tip.c:453
+#: libprocess/tip.c:456 libprocess/tip.c:462
msgid "Symmetric"
msgstr ""
-#: libprocess/tip.c:452
+#: libprocess/tip.c:461
msgid "Cone"
msgstr ""
-#: libprocess/tip.c:458
+#: libprocess/tip.c:467
msgid "Elliptical parabola"
msgstr ""
-#: libprocess/tip.c:459
+#: libprocess/tip.c:468
msgid "Asymmetric"
msgstr ""
-#: libprocess/tip.c:1339 libprocess/tip.c:1367 libprocess/tip.c:1416
-#: libprocess/tip.c:1443
+#: libprocess/tip.c:1348 libprocess/tip.c:1376 libprocess/tip.c:1425
+#: libprocess/tip.c:1452
msgid "Converting fields"
msgstr ""
-#: libprocess/tip.c:1349
+#: libprocess/tip.c:1358
msgid "Starting partial estimation"
msgstr ""
-#: libprocess/tip.c:1426
+#: libprocess/tip.c:1435
msgid "Starting full estimation"
msgstr ""
-#: libprocess/triangulation.c:2085 modules/process/calcoefs_view.c:793
+#: libprocess/triangulation.c:2084 modules/process/calcoefs_view.c:793
#: modules/process/lat_synth.c:1178
msgid "Triangulating..."
msgstr ""
-#: libgwydgets/gwy3dwindow.c:570
+#: libgwydgets/gwy3dwindow.c:575
msgid "Rotate view (R)"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:575
+#: libgwydgets/gwy3dwindow.c:580
msgid "Scale view as a whole (S)"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:580
+#: libgwydgets/gwy3dwindow.c:585
msgid "Scale value range (V)"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:585
+#: libgwydgets/gwy3dwindow.c:590
msgid "Move light source (L)"
msgstr ""
@@ -856,229 +865,290 @@ msgstr ""
msgid "Show full controls"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:693
+#: libgwydgets/gwy3dwindow.c:691
msgid "Hide full controls"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:709 modules/file/imgexport.c:4796
-#: modules/process/fit-shape.c:461
+#: libgwydgets/gwy3dwindow.c:707 modules/file/imgexport.c:4745
+#: modules/process/fit-shape.c:462
msgid "adjective|Basic"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:714
+#: libgwydgets/gwy3dwindow.c:712
msgid "Light & Material"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:719
+#: libgwydgets/gwy3dwindow.c:717
msgid "Labels"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:828 modules/process/facet_analysis.c:331
-#: modules/process/facet_analysis.c:347 modules/process/shade.c:245
+#: libgwydgets/gwy3dwindow.c:722
+#, fuzzy
+msgid "Colorbar"
+msgstr "색상"
+
+#: libgwydgets/gwy3dwindow.c:838 modules/process/facet_analysis.c:335
+#: modules/process/facet_analysis.c:351 modules/process/shade.c:253
#: modules/process/tilt.c:223
msgid "φ:"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:828 libgwydgets/gwy3dwindow.c:834
-#: libgwydgets/gwy3dwindow.c:1032 libgwydgets/gwy3dwindow.c:1040
-#: modules/process/facet_analysis.c:375 modules/process/indent_analyze.c:460
-#: modules/process/rotate.c:264 modules/process/shade.c:237
-#: modules/process/shade.c:245 modules/process/tilt.c:211
-#: modules/process/tilt.c:223 modules/process/tip_model.c:234
-#: modules/process/tip_model.c:240 modules/process/unrotate.c:334
+#: libgwydgets/gwy3dwindow.c:838 libgwydgets/gwy3dwindow.c:843
+#: libgwydgets/gwy3dwindow.c:1013 libgwydgets/gwy3dwindow.c:1020
+#: modules/process/correct_affine.c:461 modules/process/facet_analysis.c:238
+#: modules/process/facet_analysis.c:370 modules/process/indent_analyze.c:438
+#: modules/process/measure_lattice.c:381 modules/process/rotate.c:264
+#: modules/process/shade.c:245 modules/process/shade.c:253
+#: modules/process/synth.h:379 modules/process/synth.h:410
+#: modules/process/tilt.c:211 modules/process/tilt.c:223
+#: modules/process/tip_model.c:234 modules/process/tip_model.c:240
+#: modules/process/unrotate.c:334 modules/tools/distance.c:197
+#: modules/tools/readvalue.c:223 modules/tools/stats.c:319
msgid "deg"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:834 modules/process/facet_analysis.c:330
-#: modules/process/facet_analysis.c:346 modules/process/shade.c:237
+#: libgwydgets/gwy3dwindow.c:843 modules/process/facet_analysis.c:334
+#: modules/process/facet_analysis.c:350 modules/process/shade.c:245
#: modules/process/tilt.c:211
msgid "θ:"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:839 modules/process/cwt.c:151
+#: libgwydgets/gwy3dwindow.c:849 modules/process/cwt.c:151
msgid "_Scale:"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:846
+#: libgwydgets/gwy3dwindow.c:856
msgid "_Value scale:"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:851
+#: libgwydgets/gwy3dwindow.c:862
msgid "Ph_ysical scale:"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:865
+#: libgwydgets/gwy3dwindow.c:876
msgid "verb|Set"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:877
+#: libgwydgets/gwy3dwindow.c:886
#, fuzzy
msgid "Line _width:"
msgstr "새 너비(W):"
-#: libgwydgets/gwy3dwindow.c:881
+#: libgwydgets/gwy3dwindow.c:886 libgwydgets/gwy3dwindow.c:1194
+#: libgwydgets/gwy3dwindow.c:1204 libgwydgets/gwy3dwindow.c:1235
+#: libgwydgets/gwygraphareadialog.c:157 libgwydgets/gwygraphareadialog.c:173
+#: modules/file/hdrimage.cc:2246 modules/file/hdrimage.cc:2252
+#: modules/file/pixmap.c:820 modules/file/pixmap.c:826
+#: modules/process/angle_dist.c:188 modules/process/angle_dist.c:213
+#: modules/process/col_synth.c:486 modules/process/crosscor.c:252
+#: modules/process/crosscor.c:260 modules/process/crosscor.c:276
+#: modules/process/crosscor.c:284 modules/process/crosscor.c:300
+#: modules/process/crosscor.c:308 modules/process/cwt.c:151
+#: modules/process/dimensions.h:88 modules/process/edge.c:672
+#: modules/process/entropy.c:242 modules/process/extend.c:220
+#: modules/process/extend.c:227 modules/process/extend.c:234
+#: modules/process/extend.c:241 modules/process/facet_analysis.c:362
+#: modules/process/fbm_synth.c:383 modules/process/hough.c:203
+#: modules/process/local_contrast.c:146 modules/process/mark_disconn.c:263
+#: modules/process/mask_morph.c:237 modules/process/median-bg.c:209
+#: modules/process/neural.c:623 modules/process/neural.c:631
+#: modules/process/psdf_logphi.c:276 modules/process/rank.c:188
+#: modules/process/scale.c:237 modules/process/scale.c:246
+#: modules/process/scars.c:353 modules/process/scars.c:361
+#: modules/process/semsim.c:227 modules/process/slope_dist.c:365
+#: modules/process/slope_dist.c:393 modules/process/sphere-revolve.c:346
+#: modules/process/straighten_path.c:278 modules/process/synth.h:280
+#: modules/process/synth.h:501 modules/process/tip_blind.c:334
+#: modules/process/tip_blind.c:342 modules/process/volumize_layers.c:240
+#: modules/process/volumize_layers.c:245 modules/process/volumize_layers.c:250
+#: modules/process/wpour_mark.c:320 modules/tools/filter.c:291
+#: modules/tools/level3.c:244 modules/tools/maskedit.c:528
+#: modules/tools/maskedit.c:629 modules/tools/pathlevel.c:256
+#: modules/tools/profile.c:377 modules/tools/profile.c:503
+#: modules/tools/readvalue.c:222 modules/tools/readvalue.c:378
+#: modules/tools/roughness.c:868 modules/volume/volume_slice.c:446
+#: modules/volume/volume_slice.c:469 modules/volume/volume_slice.c:492
+#: modules/xyz/xyz_drift.c:738 modules/xyz/xyz_drift.c:753
+#: modules/xyz/xyz_raster.c:382 modules/xyz/xyz_raster.c:388
+msgid "px"
+msgstr ""
+
+#: libgwydgets/gwy3dwindow.c:891
msgid "Show _axes"
msgstr "축 보기(A)"
-#: libgwydgets/gwy3dwindow.c:890
+#: libgwydgets/gwy3dwindow.c:900
msgid "Show _labels"
msgstr "라벨 보기(L)"
-#: libgwydgets/gwy3dwindow.c:899
-msgid "Show false _colorbar"
-msgstr "거짓 색생바 보기(C)"
-
-#: libgwydgets/gwy3dwindow.c:908
+#: libgwydgets/gwy3dwindow.c:909
#, fuzzy
msgid "_Orthographic projection"
msgstr "수직 방향(V)"
-#: libgwydgets/gwy3dwindow.c:917
+#: libgwydgets/gwy3dwindow.c:918
msgid "_Hide masked"
msgstr ""
-#: libgwydgets/gwy3dwindow.c:933
+#: libgwydgets/gwy3dwindow.c:934
msgid "_Lighting"
msgstr "조명식(L)"
-#: libgwydgets/gwy3dwindow.c:934
+#: libgwydgets/gwy3dwindow.c:935
msgid "_Gradient"
msgstr "구배식(G)"
-#: libgwydgets/gwy3dwindow.c:935
+#: libgwydgets/gwy3dwindow.c:936
msgid "_Overlay"
msgstr "중첩 모드(O)"
-#: libgwydgets/gwy3dwindow.c:936
+#: libgwydgets/gwy3dwindow.c:937
msgid "_Overlay - no light"
msgstr "중첩 모드(O) - 조명 제거"
-#: libgwydgets/gwy3dwindow.c:1009
+#: libgwydgets/gwy3dwindow.c:992
msgid "_Material:"
msgstr "재료(M):"
-#: libgwydgets/gwy3dwindow.c:1032
+#: libgwydgets/gwy3dwindow.c:1013
msgid "_Light φ:"
msgstr "조명(L) φ:"
-#: libgwydgets/gwy3dwindow.c:1040
+#: libgwydgets/gwy3dwindow.c:1020
msgid "L_ight θ:"
msgstr "조명(I) θ:"
-#: libgwydgets/gwy3dwindow.c:1070 libgwydgets/gwy3dwindow.c:1240
-#: app/toolbox-editor.c:215 modules/file/hdrimage.cc:2213
-#: modules/file/imgexport.c:4760 modules/file/pixmap.c:789
+#: libgwydgets/gwy3dwindow.c:1052 libgwydgets/gwy3dwindow.c:1243
+#: app/toolbox-editor.c:216 modules/file/hdrimage.cc:2213
+#: modules/file/imgexport.c:4708 modules/file/pixmap.c:789
#: modules/file/rawfile.c:424 modules/process/angle_dist.c:172
#: modules/process/bdep_synth.c:341 modules/process/calcoefs_new.c:371
-#: modules/process/calibrate.c:391 modules/process/col_synth.c:392
-#: modules/process/correct_affine.c:301 modules/process/curvature.c:615
-#: modules/process/cwt.c:135 modules/process/deposit_synth.c:349
+#: modules/process/calibrate.c:383 modules/process/col_synth.c:392
+#: modules/process/correct_affine.c:346 modules/process/curvature.c:617
+#: modules/process/cwt.c:135 modules/process/deposit_synth.c:350
#: modules/process/diff_synth.c:411 modules/process/domain_synth.c:354
#: modules/process/drift.c:245 modules/process/dwt.c:166
#: modules/process/dwtanisotropy.c:184 modules/process/edge.c:638
#: modules/process/extend.c:192 modules/process/facet-level.c:193
-#: modules/process/facet_analysis.c:271 modules/process/fbm_synth.c:303
+#: modules/process/facet_analysis.c:275 modules/process/fbm_synth.c:303
#: modules/process/fft.c:336 modules/process/fft_filter_2d.c:417
-#: modules/process/fft_synth.c:341 modules/process/fractal.c:231
-#: modules/process/grain_edge.c:213 modules/process/grain_mark.c:247
-#: modules/process/grain_wshed.c:167 modules/process/hough.c:179
-#: modules/process/lat_synth.c:567 modules/process/latsim.c:159
-#: modules/process/level.c:245 modules/process/linematch.c:804
-#: modules/process/lno_synth.c:433 modules/process/local_contrast.c:130
-#: modules/process/logistic.c:234 modules/process/mark_disconn.c:208
-#: modules/process/mask_distribute.c:152 modules/process/measure_lattice.c:256
-#: modules/process/median-bg.c:180 modules/process/noise_synth.c:336
-#: modules/process/obj_synth.c:441 modules/process/pat_synth.c:385
-#: modules/process/pid.c:199 modules/process/polydistort.c:210
-#: modules/process/polylevel.c:373 modules/process/psdf_logphi.c:249
-#: modules/process/rank.c:158 modules/process/rotate.c:243
-#: modules/process/scale.c:196 modules/process/scars.c:298
-#: modules/process/semsim.c:211 modules/process/shade.c:208
-#: modules/process/slope_dist.c:276 modules/process/sphere-revolve.c:218
-#: modules/process/straighten_path.c:249 modules/process/tilt.c:161
-#: modules/process/tip_model.c:169 modules/process/unrotate.c:220
-#: modules/process/volumize_layers.c:221 modules/process/wave_synth.c:349
-#: modules/process/wpour_mark.c:278 modules/volume/volume_calibrate.c:370
-#: modules/volume/volume_extract.c:331 modules/volume/volume_kmeans.c:153
-#: modules/volume/volume_kmedians.c:147 modules/volume/volume_linestat.c:292
-#: modules/volume/volume_slice.c:292
+#: modules/process/fft_synth.c:341 modules/process/fibre_synth.c:422
+#: modules/process/fractal.c:228 modules/process/grain_edge.c:212
+#: modules/process/grain_mark.c:246 modules/process/grain_wshed.c:168
+#: modules/process/hough.c:174 modules/process/lat_synth.c:567
+#: modules/process/latsim.c:159 modules/process/level.c:245
+#: modules/process/linematch.c:771 modules/process/lno_synth.c:431
+#: modules/process/local_contrast.c:130 modules/process/logistic.c:234
+#: modules/process/mark_disconn.c:208 modules/process/mask_distribute.c:152
+#: modules/process/measure_lattice.c:246 modules/process/median-bg.c:180
+#: modules/process/mfm_current.c:332 modules/process/mfm_field.c:281
+#: modules/process/mfm_findshift.c:230 modules/process/mfm_parallel.c:333
+#: modules/process/mfm_shift.c:170 modules/process/noise_synth.c:334
+#: modules/process/obj_synth.c:438 modules/process/pat_synth.c:385
+#: modules/process/phase_synth.c:205 modules/process/pid.c:197
+#: modules/process/polydistort.c:210 modules/process/polylevel.c:373
+#: modules/process/psdf_logphi.c:249 modules/process/rank.c:158
+#: modules/process/rotate.c:243 modules/process/scale.c:196
+#: modules/process/scars.c:317 modules/process/semsim.c:211
+#: modules/process/shade.c:210 modules/process/slope_dist.c:275
+#: modules/process/sphere-revolve.c:317 modules/process/straighten_path.c:248
+#: modules/process/tilt.c:161 modules/process/tip_model.c:167
+#: modules/process/unrotate.c:220 modules/process/volumize_layers.c:221
+#: modules/process/wave_synth.c:368 modules/process/wpour_mark.c:278
+#: modules/volume/volume_calibrate.c:370 modules/volume/volume_extract.c:324
+#: modules/volume/volume_kmeans.c:154 modules/volume/volume_kmedians.c:147
+#: modules/volume/volume_linestat.c:297 modules/volume/volume_slice.c:294
msgid "_Reset"
msgstr "초기화(R)"
-#: libgwydgets/gwy3dwindow.c:1142
+#: libgwydgets/gwy3dwindow.c:1141
msgid "X-axis"
msgstr "X축"
-#: libgwydgets/gwy3dwindow.c:1143
+#: libgwydgets/gwy3dwindow.c:1142
msgid "Y-axis"
msgstr "Y축"
-#: libgwydgets/gwy3dwindow.c:1144
+#: libgwydgets/gwy3dwindow.c:1143
msgid "Minimum z value"
msgstr "Z 최소값"
-#: libgwydgets/gwy3dwindow.c:1145
+#: libgwydgets/gwy3dwindow.c:1144
msgid "Maximum z value"
msgstr "Z 최대값"
-#: libgwydgets/gwy3dwindow.c:1168 modules/file/imgexport.c:3836
+#: libgwydgets/gwy3dwindow.c:1167 modules/file/imgexport.c:3806
msgid "_Label:"
msgstr "라벨(L):"
-#: libgwydgets/gwy3dwindow.c:1173
+#: libgwydgets/gwy3dwindow.c:1180
msgid "_Text:"
msgstr "텍스트(T):"
-#: libgwydgets/gwy3dwindow.c:1193
+#: libgwydgets/gwy3dwindow.c:1185
msgid "Move label"
msgstr "라벨 이동"
-#: libgwydgets/gwy3dwindow.c:1202
+#: libgwydgets/gwy3dwindow.c:1194
msgid "_Horizontally:"
msgstr "수평방향(H):"
-#: libgwydgets/gwy3dwindow.c:1212
+#: libgwydgets/gwy3dwindow.c:1204
msgid "_Vertically:"
msgstr "수직방향(V)"
-#: libgwydgets/gwy3dwindow.c:1220
+#: libgwydgets/gwy3dwindow.c:1212
+msgid "A_ll labels have the same size"
+msgstr ""
+
+#: libgwydgets/gwy3dwindow.c:1223
msgid "Scale size _automatically"
msgstr "크기 자동 조정(A)"
-#: libgwydgets/gwy3dwindow.c:1232 modules/tools/filter.c:290
+#: libgwydgets/gwy3dwindow.c:1235 modules/tools/filter.c:291
msgid "Si_ze:"
msgstr "크기(Z):"
-#: libgwydgets/gwy3dwindow.c:1232 modules/process/cwt.c:151
-#: modules/process/hough.c:212
-msgid "pixels"
-msgstr "픽셀"
+#: libgwydgets/gwy3dwindow.c:1277
+msgid "Show false _colorbar"
+msgstr "거짓 색생바 보기(C)"
+
+#: libgwydgets/gwy3dwindow.c:1286
+msgid "Reserve space for _colorbar"
+msgstr ""
+
+#: libgwydgets/gwy3dwindow.c:1302 modules/process/lat_synth.c:651
+#: modules/process/obj_synth.c:542 modules/process/pat_synth.c:1458
+#: modules/process/phase_synth.c:279
+msgid "_Size:"
+msgstr ""
+
+#: libgwydgets/gwy3dwindow.c:1311
+#, fuzzy
+msgid "_Vertical alignment:"
+msgstr "수직방향(V)"
-#: libgwydgets/gwy3dwindow.c:1726 libgwydgets/gwy3dwindow.c:1779
+#: libgwydgets/gwy3dwindow.c:1844 libgwydgets/gwy3dwindow.c:1897
msgid "S_witch to Lighting Mode"
msgstr "조명식 모드로 전환(W)"
-#: libgwydgets/gwy3dwindow.c:1734 libgwydgets/gwy3dwindow.c:1756
+#: libgwydgets/gwy3dwindow.c:1852 libgwydgets/gwy3dwindow.c:1874
msgid "S_witch to Overlay Mode"
msgstr "중첩 모드로 전환"
-#: libgwydgets/gwy3dwindow.c:1748 libgwydgets/gwy3dwindow.c:1771
+#: libgwydgets/gwy3dwindow.c:1866 libgwydgets/gwy3dwindow.c:1889
msgid "S_witch to Color Gradient Mode"
msgstr "색상 변화표 모드로 전환(W)"
-#: libgwydgets/gwy3dwindow.c:1787
+#: libgwydgets/gwy3dwindow.c:1905
msgid "T_oggle light"
msgstr "조명 토글 "
-#: libgwydgets/gwyaxisdialog.c:99
+#: libgwydgets/gwyaxisdialog.c:75
msgid "Axis Properties"
msgstr "축 설정"
-#: libgwydgets/gwyaxisdialog.c:101 libgwydgets/gwygraphlabeldialog.c:63
-msgid "Label Properties"
-msgstr "라벨 설정"
-
-#: libgwydgets/gwyaxisdialog.c:184
+#: libgwydgets/gwyaxisdialog.c:88
msgid "Label Text"
msgstr "라벨 텍스트"
@@ -1102,7 +1172,7 @@ msgid "Hidden"
msgstr "숨김"
#: libgwydgets/gwydgetenums.c:47 libgwydgets/gwygraphwindowmeasuredialog.c:572
-#: modules/file/imgexport.c:475 modules/tools/selectionmanager.c:274
+#: modules/file/imgexport.c:474 modules/tools/selectionmanager.c:274
msgid "Points"
msgstr "점"
@@ -1110,7 +1180,7 @@ msgstr "점"
msgid "Line + points"
msgstr "선 + 점"
-#: libgwydgets/gwydgetutils.c:564
+#: libgwydgets/gwydgetutils.c:848
msgid "Change Mask Color"
msgstr "마스크 색상 변경"
@@ -1119,7 +1189,7 @@ msgid "Quantity"
msgstr "수량"
#: libgwydgets/gwygrainvaluemenu.c:194 libgwydgets/gwygrainvaluemenu.c:207
-#: modules/process/curvature.c:753
+#: modules/process/curvature.c:750
msgid "Symbol"
msgstr "부호"
@@ -1140,137 +1210,142 @@ msgstr ""
msgid "_Next"
msgstr "다음 팁(N)"
-#: libgwydgets/gwygraphareadialog.c:127 modules/file/rawgraph.c:302
+#: libgwydgets/gwygraphareadialog.c:123 modules/file/rawgraph.c:302
msgid "Plot _style:"
msgstr "그리기 스타일(S):"
-#: libgwydgets/gwygraphareadialog.c:148
+#: libgwydgets/gwygraphareadialog.c:131
msgid "Pl_ot color:"
msgstr "그리기 색상(O):"
-#: libgwydgets/gwygraphareadialog.c:159
+#: libgwydgets/gwygraphareadialog.c:151
msgid "Point _type:"
msgstr "점 종류(T):"
-#: libgwydgets/gwygraphareadialog.c:165
+#: libgwydgets/gwygraphareadialog.c:157
msgid "_Point size:"
msgstr "점 크기(P):"
-#: libgwydgets/gwygraphareadialog.c:175
+#: libgwydgets/gwygraphareadialog.c:167
msgid "_Line type:"
msgstr "선 종류(L):"
-#: libgwydgets/gwygraphareadialog.c:181 modules/file/imgexport.c:3150
+#: libgwydgets/gwygraphareadialog.c:173 modules/file/imgexport.c:3154
msgid "Line t_hickness:"
msgstr "선 굵기(H):"
-#: libgwydgets/gwygraphareadialog.c:187
+#: libgwydgets/gwygraphareadialog.c:180
#, fuzzy
msgid "<b>Label Te_xt</b>"
msgstr "라벨 텍스트"
-#: libgwydgets/gwygraphareadialog.c:404
+#: libgwydgets/gwygraphareadialog.c:397
msgid "Set Curve Color"
msgstr "곡선 색상 설정"
-#: libgwydgets/gwygraphareadialog.c:556 modules/process/mask_morph.c:179
+#: libgwydgets/gwygraphareadialog.c:549 modules/process/mask_morph.c:178
msgid "Square"
msgstr "정사각형"
-#: libgwydgets/gwygraphareadialog.c:558 modules/process/mask_morph.c:180
+#: libgwydgets/gwygraphareadialog.c:551 modules/process/mask_morph.c:179
msgid "Diamond"
msgstr "다이아몬드"
-#: libgwydgets/gwygraphareadialog.c:559
+#: libgwydgets/gwygraphareadialog.c:552
msgid "Cross"
msgstr "십자가"
-#: libgwydgets/gwygraphareadialog.c:560
+#: libgwydgets/gwygraphareadialog.c:553
msgid "Diagonal cross"
msgstr "대각 십자가"
-#: libgwydgets/gwygraphareadialog.c:561
+#: libgwydgets/gwygraphareadialog.c:554
msgid "Asterisk"
msgstr "별표"
-#: libgwydgets/gwygraphareadialog.c:562
+#: libgwydgets/gwygraphareadialog.c:555
msgid "Star"
msgstr "별"
-#: libgwydgets/gwygraphareadialog.c:563
+#: libgwydgets/gwygraphareadialog.c:556
msgid "Triangle up"
msgstr "윗쪽 삼각형"
-#: libgwydgets/gwygraphareadialog.c:564
+#: libgwydgets/gwygraphareadialog.c:557
msgid "Triangle down"
msgstr "아랫쪽 삼각형"
-#: libgwydgets/gwygraphareadialog.c:565
+#: libgwydgets/gwygraphareadialog.c:558
msgid "Triangle left"
msgstr "왼쪽 삼각형"
-#: libgwydgets/gwygraphareadialog.c:566
+#: libgwydgets/gwygraphareadialog.c:559
msgid "Triangle right"
msgstr "오른쪽 삼각형"
-#: libgwydgets/gwygraphareadialog.c:567
+#: libgwydgets/gwygraphareadialog.c:560
msgid "Full square"
msgstr "꽉찬 정사각형"
-#: libgwydgets/gwygraphareadialog.c:568 modules/process/mask_morph.c:177
+#: libgwydgets/gwygraphareadialog.c:561 modules/process/mask_morph.c:176
msgid "Disc"
msgstr "디스크"
-#: libgwydgets/gwygraphareadialog.c:569
+#: libgwydgets/gwygraphareadialog.c:562
msgid "Full diamond"
msgstr "꽉찬 다이아몬드"
-#: libgwydgets/gwygraphareadialog.c:570
+#: libgwydgets/gwygraphareadialog.c:563
msgid "Full triangle up"
msgstr "꽉찬 윗쪽 삼각형"
-#: libgwydgets/gwygraphareadialog.c:571
+#: libgwydgets/gwygraphareadialog.c:564
msgid "Full triangle down"
msgstr "꽉찬 아래쪽 삼각형"
-#: libgwydgets/gwygraphareadialog.c:572
+#: libgwydgets/gwygraphareadialog.c:565
msgid "Full triangle left"
msgstr "꽉찬 왼쪽 삼각형"
-#: libgwydgets/gwygraphareadialog.c:573
+#: libgwydgets/gwygraphareadialog.c:566
msgid "Full triangle right"
msgstr "꽉찬 오른쪽 삼각형"
-#: libgwydgets/gwygraphareadialog.c:635
+#: libgwydgets/gwygraphareadialog.c:628
msgid "line-style|Solid"
msgstr "선 종류|실선"
-#: libgwydgets/gwygraphareadialog.c:636
+#: libgwydgets/gwygraphareadialog.c:629
msgid "line-style|Dash"
msgstr "선 종류|점선"
-#: libgwydgets/gwygraphcurves.c:451
+#: libgwydgets/gwygraphcurves.c:448
msgid "Description"
msgstr "설명"
-#: libgwydgets/gwygraphcurves.c:463
+#: libgwydgets/gwygraphcurves.c:460
msgid "Mode"
msgstr "모드"
-#: libgwydgets/gwygraphcurves.c:481
+#: libgwydgets/gwygraphcurves.c:478
msgid "Color"
msgstr "색상"
-#: libgwydgets/gwygraphcurves.c:494
+#: libgwydgets/gwygraphcurves.c:491
msgid "Point Type"
msgstr "점 종류"
-#: libgwydgets/gwygraphcurves.c:516
+#: libgwydgets/gwygraphcurves.c:513
msgid "Line Style"
msgstr "선 종류"
+#: libgwydgets/gwygraphlabeldialog.c:63
+msgid "Label Properties"
+msgstr "라벨 설정"
+
#: libgwydgets/gwygraphlabeldialog.c:74
-msgid "Frame thickness:"
+#, fuzzy
+msgid "_Frame thickness:"
msgstr "외곽선 두께:"
#: libgwydgets/gwygraphlabeldialog.c:81
@@ -1281,12 +1356,12 @@ msgstr "반전된 레이아웃(R)"
msgid "Abscissa"
msgstr ""
-#: libgwydgets/gwygraphwindow.c:163 app/toolbox-editor.c:1002 app/toolbox.c:108
+#: libgwydgets/gwygraphwindow.c:163 app/toolbox-editor.c:1015 app/toolbox.c:113
msgid "Graph"
msgstr "그래프"
#: libgwydgets/gwygraphwindow.c:170 modules/file/hdrimage.cc:472
-#: modules/process/fit-shape.c:656
+#: modules/process/fit-shape.c:666 modules/process/psf.c:229
msgid "Data"
msgstr "데이터"
@@ -1324,15 +1399,15 @@ msgstr "임의의 점"
#: libgwydgets/gwygraphwindowmeasuredialog.c:394
#: libgwydgets/gwygraphwindowmeasuredialog.c:580 modules/tools/linestats.c:170
-#: modules/tools/roughness.c:516 modules/volume/volume_linestat.c:157
+#: modules/tools/roughness.c:517 modules/volume/volume_linestat.c:159
msgid "Length"
msgstr "길이"
#: libgwydgets/gwygraphwindowmeasuredialog.c:398
#: libgwydgets/gwygraphwindowmeasuredialog.c:588 app/gwyplaintool.c:1018
-#: modules/process/lat_synth.c:747 modules/process/obj_synth.c:569
-#: modules/process/pat_synth.c:846 modules/process/pat_synth.c:1148
-#: modules/process/pat_synth.c:1483
+#: modules/process/fibre_synth.c:534 modules/process/lat_synth.c:747
+#: modules/process/obj_synth.c:567 modules/process/pat_synth.c:847
+#: modules/process/pat_synth.c:1149 modules/process/pat_synth.c:1484
msgid "Height"
msgstr "높이"
@@ -1345,12 +1420,12 @@ msgid "Curve:"
msgstr "곡선:"
#: libgwydgets/gwygraphwindowmeasuredialog.c:553
-#: modules/process/linematch.c:828 modules/process/semsim.c:249
+#: modules/process/linematch.c:795 modules/process/semsim.c:249
#: modules/xyz/xyz_level.c:254
msgid "Method:"
msgstr "방법:"
-#: libgwydgets/gwygraphwindowmeasuredialog.c:592 modules/process/crosscor.c:354
+#: libgwydgets/gwygraphwindowmeasuredialog.c:592 modules/process/crosscor.c:331
msgid "Angle"
msgstr "각ㄱ도"
@@ -1360,7 +1435,7 @@ msgid "Preferred"
msgstr "선호 방법"
#: libgwydgets/gwyoptionmenus.c:470 app/meta.c:410
-#: modules/file/imgexport.c:4160 modules/file/imgexport.c:4607
+#: modules/file/imgexport.c:4110 modules/file/imgexport.c:4555
#: modules/file/rawfile.c:995 modules/process/convolution_filter.c:538
#: modules/process/neural.c:418 modules/tools/selectionmanager.c:345
msgid "Name"
@@ -1399,7 +1474,7 @@ msgid "A_dd symbol"
msgstr "기호 추가(D)"
#: libgwydgets/gwyscitext.c:274 modules/file/rawfile.c:553
-#: modules/xyz/xyz_drift.c:580 modules/xyz/xyz_raster.c:405
+#: modules/xyz/xyz_drift.c:580 modules/xyz/xyz_raster.c:419
msgid "Preview"
msgstr "미리보기"
@@ -1417,87 +1492,81 @@ msgstr "이 파일 형식을 읽을 수 없습니다. "
msgid "No module can save to this file type."
msgstr "이 파일 형식으로 저장 할 수 없습니다. "
-#: libgwymodule/gwymodulebrowser.c:67
+#: libgwymodule/gwymodulebrowser.c:66
msgid "Module Browser"
msgstr "모듈 탐색기"
-#: libgwymodule/gwymodulebrowser.c:190
+#: libgwymodule/gwymodulebrowser.c:189
msgid "Module"
msgstr "모듈"
-#: libgwymodule/gwymodulebrowser.c:190
+#: libgwymodule/gwymodulebrowser.c:189
msgid "Version"
msgstr "버전"
-#: libgwymodule/gwymodulebrowser.c:190
+#: libgwymodule/gwymodulebrowser.c:189
msgid "Author"
msgstr "저자"
-#: libgwymodule/gwymodulebrowser.c:246
+#: libgwymodule/gwymodulebrowser.c:244
msgid "Name-Version:"
msgstr "버전 이름:"
-#: libgwymodule/gwymodulebrowser.c:247 libgwymodule/gwymodulebrowser.c:270
+#: libgwymodule/gwymodulebrowser.c:245 libgwymodule/gwymodulebrowser.c:268
#: modules/process/grain_stat.c:186
msgid "File:"
msgstr "파일:"
-#: libgwymodule/gwymodulebrowser.c:248
+#: libgwymodule/gwymodulebrowser.c:246
msgid "Registered functions:"
msgstr "등록된 기능:"
-#: libgwymodule/gwymodulebrowser.c:249
+#: libgwymodule/gwymodulebrowser.c:247
msgid "Authors:"
msgstr "저자들:"
-#: libgwymodule/gwymodulebrowser.c:250
+#: libgwymodule/gwymodulebrowser.c:248
msgid "Copyright:"
msgstr "저작권:"
-#: libgwymodule/gwymodulebrowser.c:251
+#: libgwymodule/gwymodulebrowser.c:249
msgid "Date:"
msgstr "날짜:"
-#: libgwymodule/gwymodulebrowser.c:252
+#: libgwymodule/gwymodulebrowser.c:250
msgid "Description:"
msgstr "설명:"
-#: libgwymodule/gwymodulebrowser.c:269
+#: libgwymodule/gwymodulebrowser.c:267
msgid "Name:"
msgstr "이름:"
-#: libgwymodule/gwymodulebrowser.c:271
+#: libgwymodule/gwymodulebrowser.c:269
msgid "Failure:"
msgstr "실패:"
-#: app/about.c:57
+#: app/about.c:58
#, c-format
msgid "About %s"
msgstr "약 %s"
-#. TRANSLATORS: %s is replaced with date in ISO format YYYY-MM-DD.
-#: app/about.c:92
-#, c-format
-msgid "Released %s\n"
-msgstr "배포됨 %s\n"
-
-#: app/about.c:93
+#: app/about.c:97
msgid "An SPM data visualization and analysis tool."
msgstr ""
-#: app/about.c:101
+#: app/about.c:105
msgid "Report bugs to:"
msgstr "버그 보내는 곳:"
-#: app/about.c:116
+#: app/about.c:120
msgid "Credits"
msgstr "참여자"
-#: app/about.c:133
+#: app/about.c:137
msgid "License"
msgstr "사용 허가"
-#: app/about.c:138
+#: app/about.c:142
#, c-format
msgid ""
"%s is free software; you can redistribute it and/or modify it under the "
@@ -1507,58 +1576,62 @@ msgid ""
"tarball."
msgstr ""
-#: app/about.c:160 modules/process/logistic.c:270
+#: app/about.c:164 modules/process/logistic.c:269
msgid "Features"
msgstr "특징"
-#: app/about.c:220
+#: app/about.c:224
msgid "Developers"
msgstr "개발자"
-#: app/about.c:221
+#: app/about.c:225
msgid "Translators"
msgstr "번역가"
-#: app/about.c:225
+#: app/about.c:229
msgid "Development is supported by the Czech Metrology Institute: "
msgstr "본 개발은 Czech Metrology Institute의 지원을 : "
-#: app/about.c:253 app/about.c:256
+#: app/about.c:257 app/about.c:260
msgid "OpenGL 3D View"
msgstr "OpenGL 3D 뷰"
-#: app/about.c:257 app/about.c:271 app/about.c:291
+#: app/about.c:261 app/about.c:266 app/about.c:286
msgid "not available\n"
msgstr "이용 불가\n"
-#: app/about.c:262 app/about.c:265
-msgid "Fast Fourier Transform"
-msgstr ""
-
-#: app/about.c:266
-msgid "built-in SimpleFFT\n"
-msgstr ""
-
-#: app/about.c:274
+#: app/about.c:269
msgid "X11 protocol\n"
msgstr ""
-#: app/about.c:276
+#: app/about.c:271
msgid "Win32 protocol\n"
msgstr ""
-#: app/about.c:278
+#: app/about.c:273
msgid "LibUnique\n"
msgstr ""
-#: app/about.c:282
+#: app/about.c:277
msgid "Remote Control"
msgstr "원격제어"
-#: app/about.c:286 app/about.c:290
+#: app/about.c:281 app/about.c:285
msgid "Python Scripting Interface"
msgstr ""
+#. TRANSLATORS: %s is replaced with date in ISO format YYYY-MM-DD.
+#: app/about.c:311
+#, c-format
+msgid "Development version, built %s"
+msgstr ""
+
+#. TRANSLATORS: %s is replaced with date in ISO format YYYY-MM-DD.
+#: app/about.c:328
+#, fuzzy, c-format
+msgid "Released %s"
+msgstr "배포됨 %s\n"
+
#: app/app.c:301
#, c-format
msgid ""
@@ -1570,117 +1643,125 @@ msgstr ""
"%s\n"
"정말로 종료하시겠습니까?"
-#: app/app.c:440
+#: app/app.c:442
msgid "Mask _Color..."
msgstr "마스크 색상(C)..."
-#: app/app.c:456 app/app.c:1725
+#: app/app.c:458 app/app.c:1754
msgid "Zoom _1:1"
msgstr "1:1 크기로 보기(1)"
-#: app/app.c:460 app/app.c:1729 app/app.c:1957
+#: app/app.c:462 app/app.c:1758 app/app.c:1988
msgid "Metadata _Browser..."
msgstr "메타데이터 탐색기(B)..."
-#: app/app.c:465 app/app.c:1734 app/app.c:1962
+#: app/app.c:467 app/app.c:1763 app/app.c:1993
msgid "View _Log..."
msgstr "로그 보기(L)..."
-#: app/app.c:649
+#: app/app.c:651
msgid "Pi_xelwise Square"
msgstr "픽셀방식의 정사각형"
-#: app/app.c:659
+#: app/app.c:661
msgid "_Physically Square"
msgstr "물리적 정사각형(P)"
-#: app/app.c:836
+#: app/app.c:842
+msgid "Set as Default"
+msgstr "기본값으로 설정"
+
+#: app/app.c:844
+msgid "Set the current view setup as the default"
+msgstr "현재 뷰 설정을 기본값으로 설정"
+
+#: app/app.c:854
msgid "verb|Save"
msgstr "동사|저장하기"
-#: app/app.c:839 app/app.c:843
+#: app/app.c:857 app/app.c:861
msgid "Save 3D view to an image"
msgstr "3D 뷰를 이미지로 저장"
-#: app/app.c:849
-msgid "Set as Default"
-msgstr "기본값으로 설정"
+#: app/app.c:869
+msgid "_Autocrop"
+msgstr ""
-#: app/app.c:851
-msgid "Set the current view setup as the default"
-msgstr "현재 뷰 설정을 기본값으로 설정"
+#: app/app.c:873
+msgid "Remove white borders from exported image"
+msgstr ""
-#: app/app.c:940
+#: app/app.c:960
msgid "_Show mask"
msgstr "마스크 보기(S)"
-#: app/app.c:1106
+#: app/app.c:1172
#, c-format
msgid "Saving of 3D view to `%s' failed"
msgstr "3D 뷰를 `%s'로 저장하기를 실패하였습니다."
-#: app/app.c:1150
+#: app/app.c:1222
msgid "Export 3D View"
msgstr "3D 뷰 내보내기"
-#: app/app.c:1457
+#: app/app.c:1478
msgid "_Change Preview"
msgstr "미리보기 바꾸기(C)"
-#: app/app.c:1583
+#: app/app.c:1606
msgid "Change Volume Data Preview"
msgstr "볼륨 데이터 미로보기 바꾸기"
-#: app/app.c:1593
+#: app/app.c:1616
msgid "Preview quantity:"
msgstr "미리보기 개수:"
-#: app/app.c:1603 modules/process/extend.c:267 modules/tools/linestats.c:165
+#: app/app.c:1626 modules/process/extend.c:267 modules/tools/linestats.c:165
#: modules/volume/volume_linestat.c:142
msgid "Mean"
msgstr "평균"
-#: app/app.c:1604 modules/process/polydistort.c:255 modules/tools/filter.c:240
+#: app/app.c:1627 modules/process/polydistort.c:258 modules/tools/filter.c:241
#: modules/tools/icolorange.c:424 modules/tools/linestats.c:167
#: modules/volume/volume_linestat.c:144
msgid "Minimum"
msgstr "최소"
-#: app/app.c:1605 modules/process/col_synth.c:170 modules/tools/filter.c:241
+#: app/app.c:1628 modules/process/col_synth.c:170 modules/tools/filter.c:242
#: modules/tools/icolorange.c:435 modules/tools/linestats.c:168
#: modules/volume/volume_linestat.c:145
msgid "Maximum"
msgstr "최대"
-#: app/app.c:1606
+#: app/app.c:1629 modules/volume/volume_linestat.c:146
msgid "Min. position"
msgstr "최소 위치"
-#: app/app.c:1607
+#: app/app.c:1630 modules/volume/volume_linestat.c:147
msgid "Max. position"
msgstr "최대 위치"
-#: app/app.c:1608 modules/process/bdep_synth.c:134
-#: modules/process/col_synth.c:171 modules/process/scars.c:346
-#: modules/process/scars.c:353 modules/process/threshold.c:341
+#: app/app.c:1631 modules/process/bdep_synth.c:134
+#: modules/process/col_synth.c:171 modules/process/scars.c:369
+#: modules/process/scars.c:377 modules/process/threshold.c:336
msgid "RMS"
msgstr ""
-#: app/app.c:1609 modules/file/asciiexport.c:187 modules/file/gxyzffile.c:393
-#: modules/file/xyzexport.c:233 modules/file/xyzexport.c:302
+#: app/app.c:1632 modules/file/asciiexport.c:187 modules/file/gxyzffile.c:393
+#: modules/file/xyzexport.c:236 modules/file/xyzexport.c:305
msgid "Channel:"
msgstr "채널:"
-#: app/app.c:1610
+#: app/app.c:1633
msgid "Section:"
msgstr "부분:"
-#: app/app.c:1861
+#: app/app.c:1890
#, fuzzy
msgid "_Update Preview"
msgstr "미리보기 바꾸기(C)"
-#: app/app.c:1867
+#: app/app.c:1896
#, fuzzy
msgid "_Density Map"
msgstr "점 종류(T):"
@@ -1700,12 +1781,12 @@ msgstr "알 수 없는 볼륨 %d"
msgid "Unknown XYZ %d"
msgstr "알 수 없는 볼륨 %d"
-#: app/data-browser-aux.c:2795
+#: app/data-browser-aux.c:2839
#, c-format
msgid "Z levels: %d, Z unit: %s"
msgstr ""
-#: app/data-browser-aux.c:2821
+#: app/data-browser-aux.c:2865
#, fuzzy, c-format
msgid "Points: %d"
msgstr "점"
@@ -1736,10 +1817,11 @@ msgid "Close file"
msgstr "파일 닫기"
#: app/data-browser.c:5582
-msgid "Channels"
-msgstr "채널"
+#, fuzzy
+msgid "Images"
+msgstr "이미지 차이점"
-#: app/data-browser.c:5596 modules/volume/volume_extract.c:444
+#: app/data-browser.c:5596 modules/volume/volume_extract.c:431
msgid "Graphs"
msgstr "그래프"
@@ -1784,51 +1866,51 @@ msgid ""
"%s"
msgstr ""
-#: app/file.c:285
+#: app/file.c:292
#, c-format
msgid "Opening of `%s' failed"
msgstr "`%s' 열기를 실패하였습니다."
-#: app/file.c:291 app/file.c:526
+#: app/file.c:298 app/file.c:533
#, c-format
msgid "Full file path: %s."
msgstr "전체 파일 경로: %s."
-#: app/file.c:294
+#: app/file.c:301
#, c-format
msgid "Loaded using: %s."
msgstr "%s 을 사용해서 불러왔습니다. "
-#: app/file.c:380
+#: app/file.c:387
msgid "Merge File"
msgstr "파일 병합"
-#: app/file.c:382 app/gwyappfilechooser.c:221
+#: app/file.c:389 app/gwyappfilechooser.c:226
msgid "Open File"
msgstr "파일 열기"
-#: app/file.c:520 app/gwymoduleutils.c:192
+#: app/file.c:527 app/gwymoduleutils.c:192
#, c-format
msgid "Saving of `%s' failed"
msgstr "`%s' 저장을 실패하였습니다. "
-#: app/file.c:529
+#: app/file.c:536
#, c-format
msgid "Saved using: %s."
msgstr "%s 을 사용해서 저장되었습니다."
-#: app/file.c:689
+#: app/file.c:696
#, c-format
msgid "File `%s' already exists. Replace?"
msgstr "파일 '%s'는 이미 존재합니다. 대체하시겠습니까?"
-#: app/file.c:693
+#: app/file.c:700
#, c-format
msgid ""
"The file already exists in `%s'. Replacing it will overwrite its contents."
msgstr "그 파일은 이미 '%s'에 존재합니다. 같은 이름으로 덮어씁니다. "
-#: app/file.c:696
+#: app/file.c:703
msgid "Replace File?"
msgstr "파일을 대체하시겠습니까? "
@@ -1853,11 +1935,11 @@ msgstr "파일 목록 닫기"
msgid "Open selected file"
msgstr "선택된 파일 열기"
-#: app/filelist.c:566 app/gwyappfilechooser.c:583
+#: app/filelist.c:566 app/gwyappfilechooser.c:592
msgid "_Filter:"
msgstr "필터(F):"
-#: app/filelist.c:604 app/gwyappfilechooser.c:619
+#: app/filelist.c:604 app/gwyappfilechooser.c:628
msgid "Case _sensitive"
msgstr "대소문자 구별"
@@ -1907,99 +1989,99 @@ msgstr "곡선(C)"
msgid "_Snap to control points"
msgstr "조정 점으로 움직이기"
-#: app/gwyappfilechooser.c:226
+#: app/gwyappfilechooser.c:231
msgid "Save File"
msgstr "파일 저장"
-#: app/gwyappfilechooser.c:380
+#: app/gwyappfilechooser.c:389
#, c-format
msgid "File _type: %s"
msgstr "파일 종류(T): %s"
-#: app/gwyappfilechooser.c:387
+#: app/gwyappfilechooser.c:396
#, fuzzy
msgid "Only loadable shown"
msgstr "읽을 수 있는 파일만 보기"
-#: app/gwyappfilechooser.c:391
+#: app/gwyappfilechooser.c:400
#, fuzzy, c-format
msgid "Filter: %s"
msgstr "필터(F):"
-#: app/gwyappfilechooser.c:455
+#: app/gwyappfilechooser.c:464
msgid "Automatic by extension"
msgstr "확대되어 자동의"
-#: app/gwyappfilechooser.c:464
+#: app/gwyappfilechooser.c:473
msgid "Automatically detected"
msgstr "자동으로 감지된"
-#: app/gwyappfilechooser.c:561
+#: app/gwyappfilechooser.c:570
msgid "Show only loadable files"
msgstr "읽을 수 있는 파일만 보기"
-#: app/gwyappfilechooser.c:844
+#: app/gwyappfilechooser.c:855
#, fuzzy
msgid "Plane-level previewed data"
msgstr "평면으로 평평하게 만들기 적용된 미리보기 데이터"
-#: app/gwyappfilechooser.c:860
+#: app/gwyappfilechooser.c:871
msgid "Row-level previewed data"
msgstr ""
-#: app/gwyappfilechooser.c:969
+#: app/gwyappfilechooser.c:987
+msgid "File too large for preview"
+msgstr ""
+
+#: app/gwyappfilechooser.c:988
msgid "…"
msgstr "..."
-#: app/gwyappfilechooser.c:1331
+#: app/gwyappfilechooser.c:1352
msgid "Cannot preview"
msgstr "미리보기가 불가능합니다. "
-#: app/gwyddion.c:143
+#: app/gwyddion.c:147
msgid "Loading document history"
msgstr "문서 내역 불러오는중"
-#: app/gwyddion.c:148
+#: app/gwyddion.c:152
msgid "Registering "
msgstr "등록하기"
-#: app/gwyddion.c:149
+#: app/gwyddion.c:153
msgid "stock items"
msgstr ""
-#: app/gwyddion.c:153
+#: app/gwyddion.c:157
msgid "color gradients"
msgstr "색상 변화표"
-#: app/gwyddion.c:155
+#: app/gwyddion.c:159
msgid "GL materials"
msgstr "GL 재료"
-#: app/gwyddion.c:157
+#: app/gwyddion.c:161
msgid "grain quantities"
msgstr "그레인 개수"
-#: app/gwyddion.c:159
+#: app/gwyddion.c:163
msgid "calibrations"
msgstr "켈리브레이션"
-#: app/gwyddion.c:164
+#: app/gwyddion.c:168
msgid "Loading settings"
msgstr "설정값 불러오기"
-#: app/gwyddion.c:171
+#: app/gwyddion.c:175
msgid "Registering modules"
msgstr "모듈 등록하기"
-#: app/gwyddion.c:193
-msgid "Initializing GUI"
-msgstr "GUI 초기화하기"
-
-#: app/gwyddion.c:439
+#: app/gwyddion.c:464
msgid "Could not read settings."
msgstr "설정값을 읽어올 수 없습니다. "
-#: app/gwyddion.c:442
+#: app/gwyddion.c:467
#, c-format
msgid ""
"Settings file `%s' cannot be read: %s\n"
@@ -2008,48 +2090,69 @@ msgid ""
"it is repaired or removed."
msgstr ""
-#: app/gwymoduleutils-file.c:542
+#: app/gwyddion.c:505
+#, c-format
+msgid "Many modules (%u) failed to register."
+msgstr ""
+
+#: app/gwyddion.c:510
+#, c-format
+msgid ""
+"Most likely Gwyddion was not upgraded correctly. Instead, one installation "
+"was just overwritten with another, and now it is a mess.\n"
+"\n"
+"Please remove completely the module directory\n"
+"\n"
+"%s\n"
+"\n"
+"and reinstall Gwyddion.\n"
+"\n"
+"See Info → Module Browser for specific errors."
+msgstr ""
+
+#: app/gwymoduleutils-file.c:536
#, c-format
msgid "Section %s ended at line %u but it has never started."
msgstr ""
-#: app/gwymoduleutils-file.c:550
+#: app/gwymoduleutils-file.c:544
#, c-format
msgid "Section %s ended at line %u instead of %s."
msgstr ""
-#: app/gwymoduleutils-file.c:587
+#: app/gwymoduleutils-file.c:581
#, c-format
msgid "Section %s started at line %u before %s ended."
msgstr ""
-#: app/gwymoduleutils-file.c:593
+#: app/gwymoduleutils-file.c:587
#, c-format
msgid "Empty section name at header line %u."
msgstr ""
-#: app/gwymoduleutils-file.c:628
+#: app/gwymoduleutils-file.c:622
#, c-format
msgid "Header line %u lacks prefix %s."
msgstr ""
-#: app/gwymoduleutils-file.c:653
+#: app/gwymoduleutils-file.c:647
#, c-format
msgid "Header line %u lacks key-value separator."
msgstr ""
-#: app/gwymoduleutils-file.c:661
+#: app/gwymoduleutils-file.c:655
#, c-format
msgid "Key at header line %u is empty."
msgstr "헤더 파일 %u에 키 값이 비어있습니다. "
-#: app/gwymoduleutils-file.c:688
+#: app/gwymoduleutils-file.c:682
#, c-format
msgid "Header suddenly ended at line %u; end of header marker is missing"
msgstr ""
#: app/gwymoduleutils.c:197 app/settings.c:131 app/settings.c:142
#: app/toolbox-spec.c:536 modules/file/err.h:62
+#: modules/pygwy/pygwy-console.c:528
#, c-format
msgid "Cannot write to file: %s."
msgstr "%s 파일에 작성할 수 없습니다. "
@@ -2078,8 +2181,9 @@ msgstr "원점"
#: app/gwyplaintool.c:1011 modules/file/rawfile.c:997
#: modules/process/convolution_filter.c:349
-#: modules/process/convolution_filter.c:553 modules/process/neural.c:419
-#: modules/process/obj_synth.c:538 modules/process/pat_synth.c:1449
+#: modules/process/convolution_filter.c:553 modules/process/fibre_synth.c:520
+#: modules/process/neural.c:419 modules/process/obj_synth.c:536
+#: modules/process/pat_synth.c:1450
msgid "Size"
msgstr "크기"
@@ -2132,7 +2236,7 @@ msgstr "지우기(R)"
msgid "_Close"
msgstr "닫기(C)"
-#: app/log.c:615 modules/file/imgexport.c:4168 modules/file/rawfile.c:996
+#: app/log.c:615 modules/file/imgexport.c:4118 modules/file/rawfile.c:996
msgid "Type"
msgstr "종류"
@@ -2140,8 +2244,8 @@ msgstr "종류"
msgid "Function"
msgstr "기능"
-#: app/log.c:617 modules/file/imgexport.c:3117 modules/process/fit-shape.c:465
-#: modules/process/neural.c:610 modules/tools/stats.c:425
+#: app/log.c:617 modules/file/imgexport.c:3128 modules/process/fit-shape.c:466
+#: modules/process/neural.c:614 modules/tools/stats.c:423
msgid "Parameters"
msgstr "변수"
@@ -2153,40 +2257,40 @@ msgstr "시간"
msgid "Export Log"
msgstr "로그 내보내기"
-#: app/menu.c:556 app/toolbox.c:581
+#: app/menu.c:555 app/toolbox.c:595
msgid "_Data Process"
msgstr "데이터 프로세스(D)"
-#: app/menu.c:598 app/toolbox.c:584
+#: app/menu.c:597 app/toolbox.c:598
msgid "_Graph"
msgstr "그래프(G)"
-#: app/menu.c:641 app/toolbox.c:587
+#: app/menu.c:640 app/toolbox.c:601
msgid "_Volume Data"
msgstr "3차원 데이터(V)"
-#: app/menu.c:684 app/toolbox.c:590
+#: app/menu.c:683 app/toolbox.c:604
#, fuzzy
msgid "_XYZ Data"
msgstr "데이터"
-#: app/menu.c:715
+#: app/menu.c:714
msgid "Re-show Last"
msgstr "최근값 다시 보여주기"
-#: app/menu.c:730
+#: app/menu.c:729
msgid "Repeat Last"
msgstr "방금한 프로세스 다시실행"
-#: app/menu.c:858
+#: app/menu.c:857
msgid "Repeat"
msgstr "다시하기"
-#: app/menu.c:864
+#: app/menu.c:863
msgid "Re-show"
msgstr "다시보기"
-#: app/menu.c:1186
+#: app/menu.c:1185
msgid "_Document history"
msgstr "문서 작성 내역(D)"
@@ -2194,8 +2298,8 @@ msgstr "문서 작성 내역(D)"
msgid "_New"
msgstr "새로 만들기(N)"
-#: app/meta.c:235 modules/file/imgexport.c:4672 modules/file/rawfile.c:1058
-#: modules/process/neural.c:711 modules/tools/selectionmanager.c:405
+#: app/meta.c:235 modules/file/imgexport.c:4620 modules/file/rawfile.c:1058
+#: modules/process/neural.c:718 modules/tools/selectionmanager.c:405
msgid "_Delete"
msgstr "삭제하기(D)"
@@ -2269,11 +2373,11 @@ msgstr ""
msgid "Cannot create user module directory %s: %s"
msgstr ""
-#: app/splash.c:832
+#: app/splash.c:1260
msgid "Starting "
msgstr "시작하는 중"
-#: app/splash.c:878
+#: app/splash.c:1313
msgid " is free software released under GNU GPL."
msgstr "은 GNU GPL기반 무료 프로그랩입니다."
@@ -2679,134 +2783,135 @@ msgstr "다음 팁(N)"
msgid "_Show tips at startup"
msgstr ""
-#: app/toolbox-editor.c:212
+#: app/toolbox-editor.c:213
#, fuzzy
msgid "Toolbox Editor"
msgstr "편집기"
-#: app/toolbox-editor.c:257
+#: app/toolbox-editor.c:258
#, fuzzy
msgid "_New Item"
msgstr "새 아이템"
-#: app/toolbox-editor.c:262
+#: app/toolbox-editor.c:263
#, fuzzy
msgid "_New Group"
msgstr "그래프 자르기"
-#: app/toolbox-editor.c:268 app/toolbox.c:577
+#: app/toolbox-editor.c:269 app/toolbox.c:591
msgid "_Edit"
msgstr "편집(E)"
-#: app/toolbox-editor.c:273 modules/process/fft_filter_2d.c:499
-#: modules/tools/maskedit.c:548 modules/volume/volume_zcal.c:173
+#: app/toolbox-editor.c:274 modules/process/fft_filter_2d.c:499
+#: modules/tools/maskedit.c:554 modules/volume/volume_zcal.c:173
msgid "_Remove"
msgstr "제거(R)"
-#: app/toolbox-editor.c:278
+#: app/toolbox-editor.c:279
msgid "Move _Up"
msgstr ""
-#: app/toolbox-editor.c:283
+#: app/toolbox-editor.c:284
msgid "Move _Down"
msgstr ""
-#: app/toolbox-editor.c:292 modules/file/hdrimage.cc:2304
-#: modules/file/imgexport.c:3101 modules/file/pixmap.c:872
+#: app/toolbox-editor.c:293 modules/file/hdrimage.cc:2304
+#: modules/file/imgexport.c:3114 modules/file/pixmap.c:872
#: modules/file/rawfile.c:658 modules/process/crosscor.c:252
-#: modules/process/dimensions.h:473 modules/process/tip_blind.c:333
+#: modules/process/dimensions.h:455 modules/process/fibre_synth.c:526
+#: modules/process/tip_blind.c:334
msgid "_Width:"
msgstr ""
-#: app/toolbox-editor.c:774
+#: app/toolbox-editor.c:787
msgid "Toolbox Group"
msgstr ""
-#: app/toolbox-editor.c:791 modules/file/rawgraph.c:267
+#: app/toolbox-editor.c:804 modules/file/rawgraph.c:267
msgid "_Title:"
msgstr ""
-#: app/toolbox-editor.c:805
+#: app/toolbox-editor.c:818
msgid "_Id:"
msgstr ""
-#: app/toolbox-editor.c:818
+#: app/toolbox-editor.c:831
msgid "_Suggest"
msgstr ""
-#: app/toolbox-editor.c:824
+#: app/toolbox-editor.c:837
msgid "Trans_latable title"
msgstr ""
-#: app/toolbox-editor.c:874
+#: app/toolbox-editor.c:887
msgid "Group id is not a valid identifier"
msgstr ""
-#: app/toolbox-editor.c:882
+#: app/toolbox-editor.c:895
msgid "Group id is not unique"
msgstr ""
-#: app/toolbox-editor.c:971
+#: app/toolbox-editor.c:984
msgid "Toolbox Item"
msgstr ""
-#: app/toolbox-editor.c:992 modules/process/coerce.c:331
+#: app/toolbox-editor.c:1005 modules/process/coerce.c:331
#: modules/tools/filter.c:284
msgid "_Type:"
msgstr ""
-#: app/toolbox-editor.c:999
+#: app/toolbox-editor.c:1012
msgid "Placeholder"
msgstr ""
-#: app/toolbox-editor.c:1000
+#: app/toolbox-editor.c:1013
msgid "Builtin"
msgstr ""
-#: app/toolbox-editor.c:1001 app/toolbox.c:107
+#: app/toolbox-editor.c:1014 app/toolbox.c:112
msgid "Data Process"
msgstr "데이터 프로세스"
-#: app/toolbox-editor.c:1003
+#: app/toolbox-editor.c:1016
#, fuzzy
msgid "Volume Data"
msgstr "3차원 데이터(V)"
-#: app/toolbox-editor.c:1004
+#: app/toolbox-editor.c:1017
#, fuzzy
msgid "XYZ Data"
msgstr "데이터"
-#: app/toolbox-editor.c:1005
+#: app/toolbox-editor.c:1018
#, fuzzy
msgid "Tool"
msgstr "도구"
-#: app/toolbox-editor.c:1012
+#: app/toolbox-editor.c:1025 modules/tools/profile.c:483
#, fuzzy
msgid "_Mode:"
msgstr "모드:"
-#: app/toolbox-editor.c:1019 app/toolbox-editor.c:1038
+#: app/toolbox-editor.c:1032 app/toolbox-editor.c:1051
#, fuzzy
msgid "Default"
msgstr "기본값으로 설정"
-#: app/toolbox-editor.c:1020
+#: app/toolbox-editor.c:1033
#, fuzzy
msgid "Interactive"
msgstr "교차점"
-#: app/toolbox-editor.c:1021
+#: app/toolbox-editor.c:1034
#, fuzzy
msgid "Non-interactive"
msgstr "음성의"
-#: app/toolbox-editor.c:1029
+#: app/toolbox-editor.c:1042
msgid "Use _icon from:"
msgstr ""
-#: app/toolbox-editor.c:1063
+#: app/toolbox-editor.c:1076
#, fuzzy
msgid "Functions"
msgstr "기능"
@@ -2824,150 +2929,168 @@ msgstr "그리기 도구(D)"
msgid "All tools not placed explicitly go here."
msgstr ""
-#: app/toolbox.c:106
+#: app/toolbox.c:111
msgid "View"
msgstr "보기"
-#: app/toolbox.c:109
+#: app/toolbox.c:114
msgid "Tools"
msgstr "도구"
-#: app/toolbox.c:575
+#: app/toolbox.c:589
msgid "_File"
msgstr "파일(F)"
-#: app/toolbox.c:593
+#: app/toolbox.c:607
msgid "_Info"
msgstr "정보(I)"
-#: app/toolbox.c:663
+#: app/toolbox.c:696
msgid "Display a 3D view of data"
msgstr "데이터를 3D 뷰로 보여주기"
-#: app/toolbox.c:667
+#: app/toolbox.c:700
+#, fuzzy
+msgid "Undo"
+msgstr "실행 취소(U)"
+
+#: app/toolbox.c:700
+msgid "Undo last action"
+msgstr ""
+
+#: app/toolbox.c:704
+#, fuzzy
+msgid "Redo"
+msgstr "/다시 실행(R)"
+
+#: app/toolbox.c:704
+msgid "Redo again last undone action"
+msgstr ""
+
+#: app/toolbox.c:708
msgid "Zoom in"
msgstr "확대"
-#: app/toolbox.c:671
+#: app/toolbox.c:712
msgid "Zoom out"
msgstr "축소"
-#: app/toolbox.c:675
+#: app/toolbox.c:716
msgid "Zoom 1:1"
msgstr "1:1 보기"
-#: app/toolbox.c:722
+#: app/toolbox.c:781
msgid "/Show _Data Browser"
msgstr "/데이터 브라우저 보기(D)"
-#: app/toolbox.c:730
+#: app/toolbox.c:789
msgid "/Module _Browser"
msgstr "/모듈 브라우저(B)"
-#: app/toolbox.c:738
+#: app/toolbox.c:797
msgid "/Program _Messages"
msgstr ""
-#: app/toolbox.c:753
+#: app/toolbox.c:812
msgid "/_User Guide"
msgstr "/사용자 메뉴얼(U)"
-#: app/toolbox.c:761
+#: app/toolbox.c:820
msgid "/_Tip of the Day"
msgstr "/오늘의 팁(T)"
-#: app/toolbox.c:769
+#: app/toolbox.c:828
msgid "/_About Gwyddion"
msgstr "/Gwyddion 정보(A)"
-#: app/toolbox.c:806
+#: app/toolbox.c:865
msgid "/_Open..."
msgstr "/열기(O)..."
-#: app/toolbox.c:814
+#: app/toolbox.c:873
msgid "/_Merge..."
msgstr "/병합(M)..."
-#: app/toolbox.c:822
+#: app/toolbox.c:881
msgid "/Open _Recent"
msgstr "/최근 파일 열기(R)"
-#: app/toolbox.c:830
+#: app/toolbox.c:889
msgid "/_Save"
msgstr "/저장(S)"
-#: app/toolbox.c:838
+#: app/toolbox.c:897
msgid "/Save _As..."
msgstr "/다른 이름으로 저장(A)..."
-#: app/toolbox.c:846
+#: app/toolbox.c:905
#, fuzzy
msgid "/_Close"
msgstr "닫기(C)"
-#: app/toolbox.c:854
+#: app/toolbox.c:913
msgid "/Remo_ve All Logs"
msgstr "/로그 기록 모두 삭제(V)"
-#: app/toolbox.c:870
+#: app/toolbox.c:929
msgid "/_Quit"
msgstr "/끝내기(Q)"
-#: app/toolbox.c:910
+#: app/toolbox.c:969
msgid "/_Undo"
msgstr "/실행 취소(U)"
-#: app/toolbox.c:918
+#: app/toolbox.c:977
msgid "/_Redo"
msgstr "/다시 실행(R)"
-#: app/toolbox.c:934
+#: app/toolbox.c:993
msgid "/Default Mask _Color..."
msgstr "/초기 마스크 색상(C) ..."
-#: app/toolbox.c:942
+#: app/toolbox.c:1001
msgid "/Color _Gradients..."
msgstr "/색상 변화표(G)..."
-#: app/toolbox.c:950
+#: app/toolbox.c:1009
msgid "/G_L Materials..."
msgstr "/GL 색상표(L)"
-#: app/toolbox.c:958
+#: app/toolbox.c:1017
msgid "/_Toolbox..."
msgstr ""
-#: app/toolbox.c:966
+#: app/toolbox.c:1025
msgid "/_Keyboard Shortcuts"
msgstr "/키보드 단축키(K)"
-#: app/toolbox.c:974
+#: app/toolbox.c:1033
msgid "/_Logging Enabled"
msgstr "/로그 기록 활성화(L)"
-#: app/toolbox.c:1083
+#: app/toolbox.c:1142
msgid "Program Messages"
msgstr ""
-#: app/toolbox.c:1320
+#: app/toolbox.c:1379
msgid "Change Default Mask Color"
msgstr "기본 마스크 색상 변경하기"
-#: app/toolbox.c:1348
+#: app/toolbox.c:1407
msgid "OpenGL 3D graphics not available"
msgstr "OpenGL 3D 그래픽이 사용불가합니다."
-#: app/toolbox.c:1353
+#: app/toolbox.c:1412
msgid "OpenGL was disabled with a command-line option."
msgstr ""
-#: app/toolbox.c:1361
+#: app/toolbox.c:1420
msgid ""
"Initialization of OpenGL failed. Check output of <tt>glxinfo</tt> and "
"warning messages printed to console during Gwyddion startup."
msgstr ""
-#: app/toolbox.c:1368
+#: app/toolbox.c:1427
msgid "This version of Gwyddion was built without OpenGL support."
msgstr ""
@@ -3043,7 +3166,7 @@ msgstr ""
msgid "Secondary data item has no primary data"
msgstr ""
-#: app/wait.c:106
+#: app/wait.c:114
msgid "Please wait"
msgstr ""
@@ -3060,11 +3183,11 @@ msgstr ""
msgid "File header cannot be converted from ISO-8859-1 character set: %s"
msgstr ""
-#: modules/file/aistfile.c:127
+#: modules/file/aistfile.c:123
msgid "Imports AIST-NT data files."
msgstr ""
-#: modules/file/aistfile.c:140
+#: modules/file/aistfile.c:136
msgid "AIST-NT files (.aist)"
msgstr ""
@@ -3111,7 +3234,8 @@ msgstr ""
#: modules/file/alicona.c:665 modules/file/gdeffile.c:175
#: modules/file/gdeffile.c:199 modules/file/gsffile.c:159
-#: modules/file/gxyzffile.c:199 modules/file/iso28600.c:1038
+#: modules/file/gxyzffile.c:199 modules/file/iso28600.c:1174
+#: modules/file/microprof.c:361 modules/file/microprof.c:375
#: modules/file/pt3file.c:489 modules/file/pt3file.c:591
msgid "File header is truncated."
msgstr ""
@@ -3124,11 +3248,11 @@ msgstr ""
msgid "Comment is not nul-terminated."
msgstr ""
-#: modules/file/ambfile.c:84
+#: modules/file/ambfile.c:83
msgid "Imports Ambios AMB data files."
msgstr ""
-#: modules/file/ambfile.c:97
+#: modules/file/ambfile.c:96
msgid "Ambios amb files (.amb)"
msgstr ""
@@ -3160,11 +3284,11 @@ msgstr ""
msgid "FileDescBegin has no corresponding FileDescEnd."
msgstr ""
-#: modules/file/apedaxfile.c:259
+#: modules/file/apedaxfile.c:261
msgid "Imports A.P.E. Research DAX data files."
msgstr ""
-#: modules/file/apedaxfile.c:274
+#: modules/file/apedaxfile.c:276
msgid "A.P.E. Research DAX Files (.dax) and APDT File (.apdt)"
msgstr ""
@@ -3192,7 +3316,7 @@ msgstr "폭:"
msgid "Height:"
msgstr "높이:"
-#: modules/file/asciiexport.c:220 modules/file/xyzexport.c:248
+#: modules/file/asciiexport.c:220 modules/file/xyzexport.c:251
msgid "Value units:"
msgstr "값 단위:"
@@ -3201,30 +3325,30 @@ msgid "Export Text"
msgstr "텍스트 내보내기"
#: modules/file/asciiexport.c:275 modules/file/gxyzffile.c:402
-#: modules/file/imgexport.c:3565 modules/file/imgexport.c:4203
-#: modules/file/rawfile.c:758 modules/file/xyzexport.c:311
-#: modules/process/calibrate.c:607 modules/process/coerce.c:364
-#: modules/process/col_synth.c:516 modules/process/correct_affine.c:470
-#: modules/process/extend.c:259 modules/process/fft_filter_1d.c:261
-#: modules/process/grain_dist.c:306 modules/process/grain_edge.c:255
-#: modules/process/grain_mark.c:338 modules/process/grain_wshed.c:252
-#: modules/process/linematch.c:852 modules/process/mark_disconn.c:279
-#: modules/process/slope_dist.c:367 modules/process/tip_blind.c:357
+#: modules/file/imgexport.c:3532 modules/file/imgexport.c:4151
+#: modules/file/rawfile.c:758 modules/file/xyzexport.c:314
+#: modules/process/calibrate.c:561 modules/process/coerce.c:363
+#: modules/process/col_synth.c:516 modules/process/correct_affine.c:520
+#: modules/process/extend.c:259 modules/process/fft_filter_1d.c:263
+#: modules/process/grain_dist.c:307 modules/process/grain_edge.c:254
+#: modules/process/grain_mark.c:335 modules/process/grain_wshed.c:256
+#: modules/process/linematch.c:819 modules/process/mark_disconn.c:280
+#: modules/process/slope_dist.c:359 modules/process/tip_blind.c:360
#: modules/process/wpour_mark.c:354 modules/tools/spotremove.c:322
-#: modules/tools/stats.c:402 modules/xyz/xyz_raster.c:628
+#: modules/tools/stats.c:401 modules/xyz/xyz_raster.c:597
msgid "Options"
msgstr "옵션"
-#: modules/file/asciiexport.c:278 modules/file/xyzexport.c:314
+#: modules/file/asciiexport.c:278 modules/file/xyzexport.c:317
msgid "Use _dot as decimal separator"
msgstr "점을 소수점으로 사용하기"
-#: modules/file/asciiexport.c:285 modules/file/xyzexport.c:321
-#: modules/process/grain_dist.c:317
+#: modules/file/asciiexport.c:285 modules/file/xyzexport.c:324
+#: modules/process/grain_dist.c:318
msgid "Add _informational comment header"
msgstr ""
-#: modules/file/asciiexport.c:294 modules/file/xyzexport.c:330
+#: modules/file/asciiexport.c:294 modules/file/xyzexport.c:333
msgid "_Precision:"
msgstr "정밀도(P):"
@@ -3244,20 +3368,20 @@ msgstr ""
msgid "Attocube ASCII files (.asc)"
msgstr ""
-#: modules/file/bcrfile.c:146
+#: modules/file/bcrfile.c:141
msgid "Imports Image Metrology BCR data files."
msgstr ""
-#: modules/file/bcrfile.c:159
+#: modules/file/bcrfile.c:154
msgid "BCR files (.bcr, .bcrf)"
msgstr ""
-#: modules/file/bcrfile.c:238
+#: modules/file/bcrfile.c:233
#, c-format
msgid "File header is not convertible from UTF-16: %s"
msgstr ""
-#: modules/file/bcrfile.c:351
+#: modules/file/bcrfile.c:346
#, c-format
msgid "Unknown file type header: `%s'."
msgstr ""
@@ -3292,7 +3416,7 @@ msgid "Burleigh exported data (.txt, .bin)"
msgstr ""
#: modules/file/burleigh_exp.c:226 modules/file/burleigh_exp.c:267
-#: modules/file/nanoscope.c:1605 modules/file/omicron.c:416
+#: modules/file/nanoscope.c:1612 modules/file/omicron.c:416
#: modules/file/shimadzu.c:468
msgid "Missing colon in header line."
msgstr ""
@@ -3341,23 +3465,43 @@ msgstr ""
msgid "Benyuan CSM files (.csm)"
msgstr ""
-#: modules/file/dektakxml.c:138
+#: modules/file/dektakvca.c:197
+#, fuzzy
+msgid "Imports Dektak OPDx data files."
+msgstr "텍스트 파일로 그래프 데이터 내보내기"
+
+#: modules/file/dektakvca.c:210
+#, fuzzy
+msgid "Dektak OPDx data files (.OPDx)"
+msgstr "텍스트 파일로 그래프 데이터 내보내기"
+
+#: modules/file/dektakvca.c:655
+#, c-format
+msgid "Item `%s' has unexpected type %u instead of %u."
+msgstr ""
+
+#: modules/file/dektakvca.c:1022
+#, c-format
+msgid "Truncated data inside item %s."
+msgstr ""
+
+#: modules/file/dektakxml.c:118
#, fuzzy
msgid "Imports Dektak XML data files."
msgstr "텍스트 파일로 그래프 데이터 내보내기"
-#: modules/file/dektakxml.c:151
+#: modules/file/dektakxml.c:131
msgid "Dektak XML data files (.xml)"
msgstr ""
-#: modules/file/dektakxml.c:228 modules/file/lextfile.c:260
-#: modules/file/nanoscan.c:267 modules/file/ometiff.c:265
+#: modules/file/dektakxml.c:208 modules/file/lextfile.c:260
+#: modules/file/nanoscan.c:270 modules/file/ometiff.c:265
#, c-format
msgid "XML parsing failed: %s"
msgstr ""
-#: modules/file/dektakxml.c:400 modules/file/lextfile.c:163
-#: modules/file/nanoscan.c:672 modules/file/ometiff.c:445
+#: modules/file/dektakxml.c:373 modules/file/lextfile.c:163
+#: modules/file/nanoscan.c:698 modules/file/ometiff.c:445
#, c-format
msgid "Top-level element is not ‘%s’."
msgstr ""
@@ -3470,7 +3614,7 @@ msgid "Scan size header field overlaps with data."
msgstr ""
#: modules/file/err.h:48 modules/file/nrrdfile.c:779
-#: modules/file/nrrdfile.c:824
+#: modules/file/nrrdfile.c:824 modules/pygwy/pygwy-console.c:504
#, c-format
msgid "Cannot read from file: %s."
msgstr ""
@@ -3680,32 +3824,32 @@ msgid ""
"Data deserialization succeeded, but resulted in an unexpected object %s."
msgstr ""
-#: modules/file/gwytiff.h:332
+#: modules/file/gwytiff.h:335
#, c-format
msgid "BigTIFF reserved fields are %u and %u instead of 8 and 0."
msgstr ""
-#: modules/file/gwytiff.h:349 modules/file/gwytiff.h:366
+#: modules/file/gwytiff.h:352 modules/file/gwytiff.h:369
#, c-format
msgid "TIFF directory %lu ended unexpectedly."
msgstr ""
-#: modules/file/gwytiff.h:484
+#: modules/file/gwytiff.h:487
#, c-format
msgid "BigTIFF data type %u was found in a classic TIFF."
msgstr ""
-#: modules/file/gwytiff.h:501
+#: modules/file/gwytiff.h:504
msgid "Invalid tag data positions were found."
msgstr ""
-#: modules/file/gwytiff.h:874 modules/file/gwytiff.h:889
-#: modules/file/gwytiff.h:1012 modules/file/gwytiff.h:1019
+#: modules/file/gwytiff.h:877 modules/file/gwytiff.h:892
+#: modules/file/gwytiff.h:1015 modules/file/gwytiff.h:1022
#, c-format
msgid "Required tag %u was not found."
msgstr ""
-#: modules/file/gwytiff.h:942 modules/file/gwytiff.h:986
+#: modules/file/gwytiff.h:945 modules/file/gwytiff.h:989
#: modules/file/keyence.c:449 modules/file/matfile.c:276
#: modules/file/matfile.c:298 modules/file/omicronflat.c:1962
#: modules/file/princetonspe.c:339 modules/file/psia.c:352
@@ -3713,21 +3857,21 @@ msgstr ""
msgid "File is truncated."
msgstr ""
-#: modules/file/gwytiff.h:1044
+#: modules/file/gwytiff.h:1047
msgid "Non-uniform bits per sample are unsupported."
msgstr ""
-#: modules/file/gwytiff.h:1071
+#: modules/file/gwytiff.h:1074 modules/file/zeisslsm.c:973
#, c-format
msgid "Compression type %u is not supported."
msgstr ""
-#: modules/file/gwytiff.h:1077
+#: modules/file/gwytiff.h:1080
#, c-format
msgid "Planar configuration %u is not supported."
msgstr ""
-#: modules/file/gwytiff.h:1101
+#: modules/file/gwytiff.h:1104
msgid "Unsupported sample format"
msgstr ""
@@ -3764,7 +3908,7 @@ msgstr ""
msgid "Minizip error while reading the zip file: %s (%d)."
msgstr ""
-#: modules/file/gwyzip.h:248
+#: modules/file/gwyzip.h:248 modules/file/jpkscan.c:2776
#, c-format
msgid "File %s is missing in the zip file."
msgstr ""
@@ -3802,8 +3946,8 @@ msgstr ""
msgid "Export GXYZF"
msgstr "내보내기(E)"
-#: modules/file/gxyzffile.c:395 modules/file/xyzexport.c:238
-#: modules/file/xyzexport.c:304
+#: modules/file/gxyzffile.c:395 modules/file/xyzexport.c:241
+#: modules/file/xyzexport.c:307
msgid "XYZ data:"
msgstr ""
@@ -3890,11 +4034,13 @@ msgstr ""
msgid "Representable"
msgstr ""
-#: modules/file/hdrimage.cc:480 modules/tools/stats.c:203
+#: modules/file/hdrimage.cc:480 modules/graph/graph_stats.c:146
+#: modules/tools/stats.c:203
msgid "Minimum:"
msgstr ""
-#: modules/file/hdrimage.cc:496 modules/tools/stats.c:204
+#: modules/file/hdrimage.cc:496 modules/graph/graph_stats.c:147
+#: modules/tools/stats.c:204
msgid "Maximum:"
msgstr ""
@@ -3913,12 +4059,12 @@ msgid "OpenEXR data type %u is invalid or unsupported."
msgstr ""
#: modules/file/hdrimage.cc:1433 modules/file/hdrimage.cc:1442
-#: modules/file/imgexport.c:5249 modules/file/imgexport.c:5260
+#: modules/file/imgexport.c:5198 modules/file/imgexport.c:5209
#, c-format
msgid "libpng initialization error (in %s)"
msgstr ""
-#: modules/file/hdrimage.cc:1451 modules/file/imgexport.c:5324
+#: modules/file/hdrimage.cc:1451 modules/file/imgexport.c:5273
msgid "libpng error occurred"
msgstr ""
@@ -3936,11 +4082,6 @@ msgstr ""
msgid "Horizontal size:"
msgstr ""
-#: modules/file/hdrimage.cc:2246 modules/file/hdrimage.cc:2252
-#: modules/file/pixmap.c:820 modules/file/pixmap.c:826
-msgid "px"
-msgstr ""
-
#: modules/file/hdrimage.cc:2252 modules/file/pixmap.c:826
msgid "Vertical size:"
msgstr ""
@@ -3953,10 +4094,10 @@ msgstr ""
msgid "Pages:"
msgstr ""
-#: modules/file/hdrimage.cc:2290 modules/file/imgexport.c:3043
+#: modules/file/hdrimage.cc:2290 modules/file/imgexport.c:3059
#: modules/file/pixmap.c:862 modules/file/rawfile.c:649
-#: modules/process/dimensions.h:467 modules/xyz/xyz_drift.c:774
-#: modules/xyz/xyz_raster.c:566
+#: modules/process/dimensions.h:449 modules/xyz/xyz_drift.c:774
+#: modules/xyz/xyz_raster.c:535
msgid "Physical Dimensions"
msgstr ""
@@ -3966,16 +4107,16 @@ msgstr ""
#: modules/process/calcoefs_new.c:408 modules/process/calcoefs_new.c:475
#: modules/process/calcoefs_simple.c:391 modules/process/calcoefs_simple.c:458
#: modules/process/calcoefs_view.c:511 modules/process/calcoefs_view.c:549
-#: modules/process/calibrate.c:466 modules/process/calibrate.c:549
-#: modules/process/dimensions.h:161 modules/process/volumize_layers.c:259
-#: modules/volume/volume_calibrate.c:414 modules/volume/volume_calibrate.c:441
-#: modules/volume/volume_calibrate.c:468 modules/volume/volume_calibrate.c:546
+#: modules/process/calibrate.c:459 modules/process/calibrate.c:514
+#: modules/process/dimensions.h:143 modules/process/volumize_layers.c:259
+#: modules/volume/volume_calibrate.c:409 modules/volume/volume_calibrate.c:429
+#: modules/volume/volume_calibrate.c:449 modules/volume/volume_calibrate.c:498
msgid "verb|Change"
msgstr ""
#: modules/file/hdrimage.cc:2345 modules/file/pixmap.c:907
-#: modules/file/rawfile.c:694 modules/process/crosscor.c:263
-#: modules/process/dimensions.h:477
+#: modules/file/rawfile.c:694 modules/process/crosscor.c:260
+#: modules/process/dimensions.h:459
msgid "H_eight:"
msgstr ""
@@ -3992,16 +4133,16 @@ msgstr ""
#: modules/file/hdrimage.cc:2557 modules/file/pixmap.c:1176
#: modules/file/rawfile.c:1386 modules/process/calcoefs_new.c:819
#: modules/process/calcoefs_simple.c:1197 modules/process/calcoefs_view.c:1380
-#: modules/process/calibrate.c:979 modules/process/dimensions.h:195
-#: modules/process/volumize_layers.c:315 modules/volume/volume_calibrate.c:1017
+#: modules/process/calibrate.c:1013 modules/process/dimensions.h:177
+#: modules/process/volumize_layers.c:314 modules/volume/volume_calibrate.c:957
msgid "Change Units"
msgstr ""
#: modules/file/hdrimage.cc:2571 modules/file/pixmap.c:1190
#: modules/file/rawfile.c:1400 modules/process/calcoefs_new.c:832
#: modules/process/calcoefs_simple.c:1210 modules/process/calcoefs_view.c:1393
-#: modules/process/calibrate.c:993 modules/process/dimensions.h:208
-#: modules/process/volumize_layers.c:329 modules/volume/volume_calibrate.c:1031
+#: modules/process/calibrate.c:1027 modules/process/dimensions.h:190
+#: modules/process/volumize_layers.c:328 modules/volume/volume_calibrate.c:971
msgid "New _units:"
msgstr ""
@@ -4045,191 +4186,192 @@ msgstr ""
msgid "Field DataSize %ux%u does not match image dimensions %ux%u."
msgstr ""
-#: modules/file/igorfile.c:200
+#: modules/file/igorfile.c:210
msgid "Imports Igor binary waves (.ibw)."
msgstr ""
-#: modules/file/igorfile.c:213
+#: modules/file/igorfile.c:223
msgid "Igor binary waves (.ibw)"
msgstr ""
-#: modules/file/igorfile.c:273
+#: modules/file/igorfile.c:283
#, c-format
msgid "Format version is %d. Only version 5 is supported."
msgstr ""
-#: modules/file/igorfile.c:294
+#: modules/file/igorfile.c:305
msgid "Only two-dimensional data are supported."
msgstr ""
-#: modules/file/igorfile.c:306
+#: modules/file/igorfile.c:317
#, c-format
msgid "Number of data points %u does not match resolutions %u×%u×%u."
msgstr ""
-#: modules/file/igorfile.c:320
+#: modules/file/igorfile.c:331
#, c-format
msgid "Data size %u does not match the number of data points %u×%u."
msgstr ""
-#: modules/file/igorfile.c:358
+#: modules/file/igorfile.c:369
msgid "Cannot read channel labels."
msgstr ""
-#: modules/file/imgexport.c:392 modules/file/pixmap.c:178
+#: modules/file/imgexport.c:391 modules/file/pixmap.c:178
msgid "Portable Network Graphics (.png)"
msgstr ""
-#: modules/file/imgexport.c:398 modules/file/pixmap.c:182
+#: modules/file/imgexport.c:397 modules/file/pixmap.c:182
msgid "JPEG (.jpeg,.jpg)"
msgstr ""
-#: modules/file/imgexport.c:404 modules/file/pixmap.c:186
+#: modules/file/imgexport.c:403 modules/file/pixmap.c:186
msgid "TIFF (.tiff,.tif)"
msgstr ""
-#: modules/file/imgexport.c:410 modules/file/pixmap.c:190
+#: modules/file/imgexport.c:409 modules/file/pixmap.c:190
msgid "Portable Pixmap (.ppm,.pnm)"
msgstr ""
-#: modules/file/imgexport.c:416 modules/file/pixmap.c:194
+#: modules/file/imgexport.c:415 modules/file/pixmap.c:194
msgid "Windows or OS2 Bitmap (.bmp)"
msgstr ""
-#: modules/file/imgexport.c:422 modules/file/pixmap.c:198
+#: modules/file/imgexport.c:421 modules/file/pixmap.c:198
msgid "TARGA (.tga,.targa)"
msgstr ""
-#: modules/file/imgexport.c:429
+#: modules/file/imgexport.c:428
msgid "WebP (.webp)"
msgstr ""
-#: modules/file/imgexport.c:437
+#: modules/file/imgexport.c:436
msgid "Portable document format (.pdf)"
msgstr ""
-#: modules/file/imgexport.c:445
+#: modules/file/imgexport.c:444
msgid "Encapsulated PostScript (.eps)"
msgstr ""
-#: modules/file/imgexport.c:453
+#: modules/file/imgexport.c:452
msgid "Scalable Vector Graphics (.svg)"
msgstr ""
-#: modules/file/imgexport.c:463 modules/tools/selectionmanager.c:269
+#: modules/file/imgexport.c:462 modules/tools/selectionmanager.c:269
msgid "Horiz./vert. lines"
msgstr ""
-#: modules/file/imgexport.c:467 modules/tools/selectionmanager.c:270
+#: modules/file/imgexport.c:466 modules/tools/selectionmanager.c:270
msgid "Ellipses"
msgstr ""
-#: modules/file/imgexport.c:471 modules/tools/selectionmanager.c:272
+#: modules/file/imgexport.c:470 modules/tools/selectionmanager.c:272
msgid "Lines"
msgstr ""
-#: modules/file/imgexport.c:479 modules/tools/selectionmanager.c:275
+#: modules/file/imgexport.c:478 modules/tools/selectionmanager.c:275
msgid "Rectangles"
msgstr ""
-#: modules/file/imgexport.c:483 modules/process/lat_synth.c:565
+#: modules/file/imgexport.c:482 modules/process/lat_synth.c:565
#: modules/process/lat_synth.c:637 modules/tools/selectionmanager.c:271
msgid "Lattice"
msgstr ""
-#: modules/file/imgexport.c:487
+#: modules/file/imgexport.c:486
msgid "Path"
msgstr ""
-#: modules/file/imgexport.c:493 modules/file/imgexport.c:499
+#: modules/file/imgexport.c:492 modules/file/imgexport.c:498
msgid "ruler|_None"
msgstr ""
-#: modules/file/imgexport.c:494
+#: modules/file/imgexport.c:493
msgid "_Rulers"
msgstr ""
-#: modules/file/imgexport.c:495
+#: modules/file/imgexport.c:494
msgid "_Inset scale bar"
msgstr ""
-#: modules/file/imgexport.c:500
+#: modules/file/imgexport.c:499
msgid "_False color ruler"
msgstr ""
-#: modules/file/imgexport.c:504
+#: modules/file/imgexport.c:503
msgid "title|None"
msgstr ""
-#: modules/file/imgexport.c:505
+#: modules/file/imgexport.c:504
msgid "At the top"
msgstr ""
-#: modules/file/imgexport.c:506
+#: modules/file/imgexport.c:505
msgid "Along the right edge"
msgstr ""
-#: modules/file/imgexport.c:512
+#: modules/file/imgexport.c:511
msgid ""
"Renders data into vector (SVG, PDF, EPS) and pixmap (PNG, JPEG, TIFF, WebP, "
"PPM, BMP, TARGA) images. Export to some formats relies on GDK and other "
"libraries thus may be installation-dependent."
msgstr ""
-#: modules/file/imgexport.c:2931
+#: modules/file/imgexport.c:2933
#, fuzzy
msgid "Select Color"
msgstr "곡선 색상 설정"
-#: modules/file/imgexport.c:3002
-msgid "Black"
+#: modules/file/imgexport.c:3005
+msgid "White"
msgstr ""
-#: modules/file/imgexport.c:3010
-msgid "White"
+#: modules/file/imgexport.c:3014
+msgid "Black"
msgstr ""
-#: modules/file/imgexport.c:3053
+#: modules/file/imgexport.c:3069
#, fuzzy
msgid "Pi_xel size:"
msgstr "점 크기(P):"
-#: modules/file/imgexport.c:3062
+#: modules/file/imgexport.c:3077
msgid "Pixels per _inch:"
msgstr ""
-#: modules/file/imgexport.c:3089
+#: modules/file/imgexport.c:3102
msgid "_Zoom:"
msgstr ""
-#: modules/file/imgexport.c:3108 modules/process/bdep_synth.c:430
+#: modules/file/imgexport.c:3120 modules/process/bdep_synth.c:430
#: modules/process/col_synth.c:486 modules/process/diff_synth.c:508
-#: modules/process/domain_synth.c:510 modules/process/grain_mark.c:285
-#: modules/process/lat_synth.c:753 modules/process/obj_synth.c:575
-#: modules/process/pat_synth.c:852 modules/process/pat_synth.c:1154
-#: modules/process/pat_synth.c:1489 modules/process/tip_blind.c:340
+#: modules/process/domain_synth.c:510 modules/process/fibre_synth.c:540
+#: modules/process/grain_mark.c:284 modules/process/lat_synth.c:753
+#: modules/process/obj_synth.c:573 modules/process/pat_synth.c:853
+#: modules/process/pat_synth.c:1155 modules/process/pat_synth.c:1490
+#: modules/process/phase_synth.c:298 modules/process/tip_blind.c:342
msgid "_Height:"
msgstr ""
-#: modules/file/imgexport.c:3121
+#: modules/file/imgexport.c:3136
msgid "_Font:"
msgstr ""
-#: modules/file/imgexport.c:3140
+#: modules/file/imgexport.c:3145
msgid "_Font size:"
msgstr ""
-#: modules/file/imgexport.c:3160
+#: modules/file/imgexport.c:3163
#, fuzzy
msgid "O_utline thickness:"
msgstr "선 굵기(H):"
-#: modules/file/imgexport.c:3170
+#: modules/file/imgexport.c:3172
#, fuzzy
msgid "_Border width:"
msgstr "새 너비(W):"
-#: modules/file/imgexport.c:3180
+#: modules/file/imgexport.c:3181
#, fuzzy
msgid "_Tick length:"
msgstr "최소 길이(L)"
@@ -4251,233 +4393,234 @@ msgstr "색상"
msgid "_Line and text color:"
msgstr ""
-#: modules/file/imgexport.c:3221
+#: modules/file/imgexport.c:3220
msgid "_Transparent background"
msgstr ""
-#: modules/file/imgexport.c:3232
+#: modules/file/imgexport.c:3231
#, fuzzy
msgid "_Background color:"
msgstr "그리기 색상(O):"
-#: modules/file/imgexport.c:3474
-#, fuzzy
-msgid "Lateral scale"
-msgstr "GL 재료"
-
-#: modules/file/imgexport.c:3487 modules/process/lno_synth.c:1053
-msgid "_Length:"
-msgstr ""
-
-#: modules/file/imgexport.c:3503
-msgid "_Auto"
-msgstr ""
-
-#: modules/file/imgexport.c:3511 modules/process/pat_synth.c:469
+#: modules/file/imgexport.c:3433 modules/process/fibre_synth.c:582
+#: modules/process/pat_synth.c:470
msgid "Placement"
msgstr ""
-#: modules/file/imgexport.c:3515
+#: modules/file/imgexport.c:3437
msgid "left"
msgstr ""
-#: modules/file/imgexport.c:3519
+#: modules/file/imgexport.c:3440
msgid "center"
msgstr ""
-#: modules/file/imgexport.c:3523
+#: modules/file/imgexport.c:3443
msgid "right"
msgstr ""
-#: modules/file/imgexport.c:3528
+#: modules/file/imgexport.c:3448
msgid "top"
msgstr ""
-#: modules/file/imgexport.c:3540
+#: modules/file/imgexport.c:3456
msgid "bottom"
msgstr ""
-#: modules/file/imgexport.c:3552 modules/file/imgexport.c:3874
+#: modules/file/imgexport.c:3479
+#, fuzzy
+msgid "Lateral scale"
+msgstr "GL 재료"
+
+#: modules/file/imgexport.c:3496 modules/process/lno_synth.c:1053
+msgid "_Length:"
+msgstr ""
+
+#: modules/file/imgexport.c:3502
+msgid "_Auto"
+msgstr ""
+
+#: modules/file/imgexport.c:3519 modules/file/imgexport.c:3832
#, fuzzy
msgid "Hori_zontal gap:"
msgstr "수평의"
-#: modules/file/imgexport.c:3558 modules/file/imgexport.c:3854
+#: modules/file/imgexport.c:3526 modules/file/imgexport.c:3812
#, fuzzy
msgid "_Vertical gap:"
msgstr "수직방향(V)"
-#: modules/file/imgexport.c:3571 modules/file/imgexport.c:4184
+#: modules/file/imgexport.c:3538 modules/file/imgexport.c:4134
#, fuzzy
msgid "Colo_r:"
msgstr "색상"
-#: modules/file/imgexport.c:3576 modules/file/imgexport.c:4189
+#: modules/file/imgexport.c:3542 modules/file/imgexport.c:4138
msgid "Out_line color:"
msgstr ""
-#: modules/file/imgexport.c:3580 modules/file/imgexport.c:4195
+#: modules/file/imgexport.c:3547 modules/file/imgexport.c:4143
msgid "O_pacity:"
msgstr ""
-#: modules/file/imgexport.c:3589
+#: modules/file/imgexport.c:3554
msgid "Draw _ticks"
msgstr ""
-#: modules/file/imgexport.c:3599
+#: modules/file/imgexport.c:3564
msgid "Draw _label"
msgstr ""
-#: modules/file/imgexport.c:3609
+#: modules/file/imgexport.c:3574
msgid "Draw text _above scale bar"
msgstr ""
-#: modules/file/imgexport.c:3773
+#: modules/file/imgexport.c:3738
msgid "Image"
msgstr ""
-#: modules/file/imgexport.c:3777 modules/process/calcoefs_view.c:473
-#: modules/process/correct_affine.c:488 modules/process/drift.c:297
-#: modules/process/dwt.c:206 modules/process/dwtanisotropy.c:202
-#: modules/process/fft_filter_1d.c:294 modules/process/fft_profile.c:292
-#: modules/process/fractal.c:253 modules/process/nanoindent_adjust.c:229
-#: modules/process/polydistort.c:247 modules/process/rotate.c:274
-#: modules/process/scale.c:253 modules/process/straighten_path.c:271
+#: modules/file/imgexport.c:3742 modules/process/calcoefs_view.c:473
+#: modules/process/correct_affine.c:538 modules/process/drift.c:298
+#: modules/process/dwt.c:206 modules/process/dwtanisotropy.c:203
+#: modules/process/fft_filter_1d.c:296 modules/process/fft_profile.c:293
+#: modules/process/fractal.c:262 modules/process/nanoindent_adjust.c:229
+#: modules/process/polydistort.c:250 modules/process/rotate.c:274
+#: modules/process/scale.c:257 modules/process/straighten_path.c:270
#: modules/process/unrotate.c:277 modules/tools/linestats.c:400
-#: modules/tools/profile.c:555 modules/tools/roughness.c:864
-#: modules/tools/sfunctions.c:468 modules/xyz/xyz_raster.c:632
+#: modules/tools/profile.c:552 modules/tools/roughness.c:879
+#: modules/tools/sfunctions.c:481 modules/xyz/xyz_raster.c:601
msgid "_Interpolation type:"
msgstr ""
-#: modules/file/imgexport.c:3807
+#: modules/file/imgexport.c:3772
#, fuzzy
msgid "Draw _frame"
msgstr "Grain number"
-#: modules/file/imgexport.c:3816
+#: modules/file/imgexport.c:3781
msgid "Draw _mask"
msgstr ""
-#: modules/file/imgexport.c:3826
+#: modules/file/imgexport.c:3791
msgid "Draw mask _legend"
msgstr ""
-#: modules/file/imgexport.c:3861
+#: modules/file/imgexport.c:3819
msgid "Value Scale"
msgstr ""
-#: modules/file/imgexport.c:3882
+#: modules/file/imgexport.c:3840
#, fuzzy
msgid "Fi_xed precision:"
msgstr "정밀도(P):"
-#: modules/file/imgexport.c:3898
+#: modules/file/imgexport.c:3855
#, fuzzy
msgid "Fixed _kilo threshold:"
msgstr "Soft threshold(S):"
-#: modules/file/imgexport.c:3914 modules/file/imgexport.c:4635
+#: modules/file/imgexport.c:3869 modules/file/imgexport.c:4583
#, fuzzy
msgid "Title"
msgstr "제목 없음"
-#: modules/file/imgexport.c:3918
+#: modules/file/imgexport.c:3877
#, fuzzy
msgid "Posi_tion:"
msgstr "위치"
-#: modules/file/imgexport.c:3934
+#: modules/file/imgexport.c:3884
msgid "_Gap:"
msgstr ""
-#: modules/file/imgexport.c:3941
+#: modules/file/imgexport.c:3891
msgid "Put _units to title"
msgstr ""
-#: modules/file/imgexport.c:4125
+#: modules/file/imgexport.c:4075
msgid "Draw _selection"
msgstr ""
-#: modules/file/imgexport.c:4176 modules/tools/selectionmanager.c:361
+#: modules/file/imgexport.c:4126 modules/tools/selectionmanager.c:361
msgid "Objects"
msgstr ""
-#: modules/file/imgexport.c:4615
+#: modules/file/imgexport.c:4563
#, fuzzy
msgid "Lateral"
msgstr "GL 재료"
-#: modules/file/imgexport.c:4654 modules/file/rawfile.c:1040
-#: modules/process/calcoefs_load.c:230 modules/process/neural.c:693
+#: modules/file/imgexport.c:4602 modules/file/rawfile.c:1040
+#: modules/process/calcoefs_load.c:230 modules/process/neural.c:700
msgid "verb|_Load"
msgstr ""
-#: modules/file/imgexport.c:4660 modules/file/rawfile.c:1046
-#: modules/process/neural.c:699
+#: modules/file/imgexport.c:4608 modules/file/rawfile.c:1046
+#: modules/process/neural.c:706
msgid "verb|_Store"
msgstr ""
-#: modules/file/imgexport.c:4666 modules/file/rawfile.c:1052
-#: modules/process/neural.c:705
+#: modules/file/imgexport.c:4614 modules/file/rawfile.c:1052
+#: modules/process/neural.c:712
msgid "_Rename"
msgstr ""
-#: modules/file/imgexport.c:4686 modules/file/rawfile.c:1071
+#: modules/file/imgexport.c:4634 modules/file/rawfile.c:1071
msgid "Preset _name:"
msgstr ""
-#: modules/file/imgexport.c:4757
+#: modules/file/imgexport.c:4705
#, c-format
msgid "Export %s"
msgstr ""
-#: modules/file/imgexport.c:4778
+#: modules/file/imgexport.c:4727
msgid "Export as 1_6 bit grayscale"
msgstr ""
-#: modules/file/imgexport.c:4801
+#: modules/file/imgexport.c:4750
msgid "Lateral Scale"
msgstr ""
-#: modules/file/imgexport.c:4806
+#: modules/file/imgexport.c:4755
#, fuzzy
msgid "Values"
msgstr "값"
-#: modules/file/imgexport.c:4811
+#: modules/file/imgexport.c:4760
#, fuzzy
msgid "Selection"
msgstr "부분:"
-#: modules/file/imgexport.c:4816 modules/file/rawfile.c:462
+#: modules/file/imgexport.c:4765 modules/file/rawfile.c:462
#: modules/process/convolution_filter.c:275
msgid "Presets"
msgstr ""
-#: modules/file/imgexport.c:5576
+#: modules/file/imgexport.c:5525
#, c-format
msgid "Cairo error occurred: %s"
msgstr ""
-#: modules/file/imgexport.c:5600
+#: modules/file/imgexport.c:5549
#, c-format
msgid "Pixbuf save failed: %s."
msgstr ""
-#: modules/file/imgexport.c:5878
+#: modules/file/imgexport.c:5827
msgid "Image is too large to be stored as TARGA."
msgstr ""
-#: modules/file/imgexport.c:6457 modules/file/imgexport.c:6486
+#: modules/file/imgexport.c:6406 modules/file/imgexport.c:6435
#, fuzzy
msgid "Draw _numbers"
msgstr "Grain number"
-#: modules/file/imgexport.c:6469 modules/file/imgexport.c:6517
+#: modules/file/imgexport.c:6418 modules/file/imgexport.c:6466
msgid "_End marker length:"
msgstr ""
-#: modules/file/imgexport.c:6498
+#: modules/file/imgexport.c:6447
#, fuzzy
msgid "Marker _radius:"
msgstr "곡률 반경 1"
@@ -4516,45 +4659,56 @@ msgstr ""
msgid "image depth"
msgstr ""
-#: modules/file/iso28600.c:534
+#: modules/file/iso28600.c:543
msgid "Imports and exports ISO 28600:2011 SPM data transfer format."
msgstr ""
-#: modules/file/iso28600.c:550
+#: modules/file/iso28600.c:559
msgid "ISO 28600:2011 SPM data transfer files (.spm)"
msgstr ""
-#: modules/file/iso28600.c:606
+#: modules/file/iso28600.c:658
#, c-format
-msgid "Only regular mappings are implemented but file has mapping type ‘%s’."
+msgid ""
+"Only regular and irregular mappings are implemented but the file has mapping "
+"type ‘%s’."
msgstr ""
-#: modules/file/iso28600.c:668 modules/file/iso28600.c:677
-#: modules/file/iso28600.c:686
+#: modules/file/iso28600.c:687 modules/file/iso28600.c:696
+#: modules/file/iso28600.c:705
#, c-format
msgid "List ‘%s’ has %u items which differs from the number %u given by ‘%s’."
msgstr ""
-#: modules/file/iso28600.c:755 modules/file/iso28600.c:867
-#: modules/file/sdfile.c:846 modules/file/sdfile.c:863
-#: modules/file/spip-asc.c:239 modules/file/witec-asc.c:223
-#: modules/file/wsffile.c:215
+#: modules/file/iso28600.c:775
#, c-format
-msgid "End of file reached when reading sample #%d of %d"
+msgid "End of file reached when reading sample #%u of %u"
msgstr ""
-#: modules/file/iso28600.c:764 modules/file/iso28600.c:876
-#: modules/file/spip-asc.c:246 modules/file/witec-asc.c:230
-#: modules/file/wsffile.c:222
+#: modules/file/iso28600.c:784 modules/file/iso28600.c:873
#, c-format
-msgid "Malformed data encountered when reading sample #%d of %d"
+msgid "Malformed data encountered when reading sample #%u"
msgstr ""
-#: modules/file/iso28600.c:774 modules/file/iso28600.c:886
+#: modules/file/iso28600.c:797 modules/file/iso28600.c:887
+#: modules/file/iso28600.c:1022
msgid "Missing end-of-data marker."
msgstr ""
-#: modules/file/iso28600.c:1048
+#: modules/file/iso28600.c:1003 modules/file/sdfile.c:846
+#: modules/file/sdfile.c:863 modules/file/spip-asc.c:239
+#: modules/file/witec-asc.c:223 modules/file/wsffile.c:215
+#, c-format
+msgid "End of file reached when reading sample #%d of %d"
+msgstr ""
+
+#: modules/file/iso28600.c:1012 modules/file/spip-asc.c:246
+#: modules/file/witec-asc.c:230 modules/file/wsffile.c:222
+#, c-format
+msgid "Malformed data encountered when reading sample #%d of %d"
+msgstr ""
+
+#: modules/file/iso28600.c:1184
#, c-format
msgid "Line %u does not contain mandatory label ‘%s’."
msgstr ""
@@ -4571,42 +4725,62 @@ msgstr ""
msgid "The type of data is unknown. Please report it to the developers."
msgstr ""
-#: modules/file/jpkscan.c:229
+#: modules/file/jpkscan.c:292
msgid "Imports JPK image scans."
msgstr ""
-#: modules/file/jpkscan.c:242
+#: modules/file/jpkscan.c:305
msgid "JPK image scans (.jpk, .jpk-qi-image)"
msgstr ""
-#: modules/file/jpkscan.c:249
+#: modules/file/jpkscan.c:312
msgid "JPK force curves (.jpk-force, .jpk-force-map, .jpk-qi-data)"
msgstr ""
-#: modules/file/jpkscan.c:315
+#: modules/file/jpkscan.c:378
msgid "File does not contain grid dimensions."
msgstr ""
-#: modules/file/jpkscan.c:660 modules/file/nanoobserver.c:193
+#: modules/file/jpkscan.c:736 modules/file/nanoobserver.c:360
#: modules/file/nanoscantech.c:205 modules/file/opengps.c:209
#: modules/file/sensofarx.c:183 modules/file/spmxfile.c:166
msgid "Minizip cannot open the file as a ZIP file."
msgstr ""
-#: modules/file/jpkscan.c:739
+#: modules/file/jpkscan.c:758 modules/file/jpkscan.c:2717
+#, c-format
+msgid "Scanning file (%u curves)..."
+msgstr ""
+
+#: modules/file/jpkscan.c:798 modules/file/nmmxyz.c:299
+#, fuzzy
+msgid "Reading files..."
+msgstr "마스킹 모드"
+
+#: modules/file/jpkscan.c:816
+#, fuzzy
+msgid "Creating volume data..."
+msgstr "3차원 데이터 값 반전"
+
+#: modules/file/jpkscan.c:968
msgid "Non-uniform point and/or segment numbering is not supported."
msgstr ""
-#: modules/file/jpkscan.c:748
+#: modules/file/jpkscan.c:977
msgid "Non-uniform channel lists are not supported."
msgstr ""
-#: modules/file/jpkscan.c:756
+#: modules/file/jpkscan.c:985
#, c-format
msgid "Data file %s was found instead of expected %s."
msgstr ""
-#: modules/file/jpkscan.c:1497
+#: modules/file/jpkscan.c:1900
+#, c-format
+msgid "Header properties file for index %u is missing."
+msgstr ""
+
+#: modules/file/jpkscan.c:2519
#, fuzzy
msgid "Cannot find any height channel."
msgstr "도움말을 표시할 수 없습니다. "
@@ -4758,19 +4932,19 @@ msgstr ""
msgid "File header is larger than file."
msgstr ""
-#: modules/file/microprof.c:117
+#: modules/file/microprof.c:125
msgid "Imports MicroProf FRT profilometer data files."
msgstr ""
-#: modules/file/microprof.c:130
+#: modules/file/microprof.c:138
msgid "MicroProf FRT files (.frt)"
msgstr ""
-#: modules/file/microprof.c:136
+#: modules/file/microprof.c:144
msgid "MicroProf FRT text files (.txt)"
msgstr ""
-#: modules/file/microprof.c:432
+#: modules/file/microprof.c:519
msgid "File contains fewer than XSize*YSize data points."
msgstr ""
@@ -4858,8 +5032,8 @@ msgstr ""
msgid "Spectra data starts past the end of file."
msgstr ""
-#: modules/file/nanoeducator.c:648 modules/file/opdfile.c:276
-#: modules/file/renishaw.c:1325 modules/file/sensofar.c:256
+#: modules/file/nanoeducator.c:648 modules/file/opdfile.c:287
+#: modules/file/renishaw.c:1334 modules/file/sensofar.c:256
#: modules/file/witec-asc.c:161
msgid "File header is truncated"
msgstr ""
@@ -4869,8 +5043,8 @@ msgstr ""
msgid "Parameter header is truncated"
msgstr ""
-#: modules/file/nanoeducator.c:932 modules/process/curvature.c:454
-#: modules/tools/profile.c:1107
+#: modules/file/nanoeducator.c:932 modules/process/curvature.c:456
+#: modules/tools/profile.c:1090
#, c-format
msgid "Profile %d"
msgstr ""
@@ -4950,23 +5124,27 @@ msgstr ""
msgid "Missing data start marker \\x1a\\x04."
msgstr ""
-#: modules/file/nanoobserver.c:113
-msgid "Reads NanoObserver .nao files."
+#: modules/file/nanoobserver.c:201
+msgid "Reads Nano-Solution/NanoObserver .nao files."
+msgstr ""
+
+#: modules/file/nanoobserver.c:214
+msgid "Nano-Solution/NanoObserver data (.nao)"
msgstr ""
-#: modules/file/nanoobserver.c:126
-msgid "NanoObserver data (.nao)"
+#: modules/file/nanoobserver.c:410 modules/file/renishaw.c:1420
+msgid "Data block is truncated"
msgstr ""
-#: modules/file/nanoscan.c:188
+#: modules/file/nanoscan.c:191
msgid "Imports NanoScan XML files."
msgstr ""
-#: modules/file/nanoscan.c:201
+#: modules/file/nanoscan.c:204
msgid "NanoScan XML files (.xml)"
msgstr ""
-#: modules/file/nanoscan.c:910
+#: modules/file/nanoscan.c:937
msgid "Wrong size of Base64 encoded data."
msgstr ""
@@ -4986,20 +5164,20 @@ msgstr ""
msgid "Nanoscope II files"
msgstr ""
-#: modules/file/nanoscope.c:207
+#: modules/file/nanoscope.c:212
msgid ""
"Imports Veeco (Digital Instruments) Nanoscope data files, version 3 or newer."
msgstr ""
-#: modules/file/nanoscope.c:221
+#: modules/file/nanoscope.c:226
msgid "Nanoscope III files"
msgstr ""
-#: modules/file/nanoscope.c:288
+#: modules/file/nanoscope.c:295
msgid "File is not a Nanoscope file, or it is a unknown subtype."
msgstr ""
-#: modules/file/nanoscope.c:295
+#: modules/file/nanoscope.c:302
msgid ""
"File has been damaged by change of line endings, resulting in corruption of "
"the binary part of the file.\n"
@@ -5010,16 +5188,16 @@ msgid ""
"transfer that attempts to store text platform-independently."
msgstr ""
-#: modules/file/nanoscope.c:653 modules/file/nanoscope.c:669
+#: modules/file/nanoscope.c:660 modules/file/nanoscope.c:676
msgid "Cannot parse `Scan size' field."
msgstr ""
-#: modules/file/nanoscope.c:1539 modules/file/nrrdfile.c:1086
+#: modules/file/nanoscope.c:1546 modules/file/nrrdfile.c:1086
#, c-format
msgid "Garbage after data sample #%u."
msgstr ""
-#: modules/file/nanoscope.c:1595
+#: modules/file/nanoscope.c:1602
msgid "Truncated header line."
msgstr ""
@@ -5095,12 +5273,8 @@ msgstr ""
msgid "Nano Measuring Machine data import must be run as interactive."
msgstr ""
-#: modules/file/nmmxyz.c:299
-#, fuzzy
-msgid "Reading files..."
-msgstr "마스킹 모드"
-
#: modules/file/nmmxyz.c:306 modules/process/lat_synth.c:1224
+#: modules/process/wave_synth.c:798
msgid "Rendering surface..."
msgstr ""
@@ -5135,20 +5309,20 @@ msgid "Plot point density map"
msgstr ""
#: modules/file/nmmxyz.c:534 modules/file/rawfile.c:626
-#: modules/process/dimensions.h:445 modules/xyz/xyz_drift.c:725
-#: modules/xyz/xyz_raster.c:517
+#: modules/process/dimensions.h:427 modules/xyz/xyz_drift.c:725
+#: modules/xyz/xyz_raster.c:376
msgid "Resolution"
msgstr ""
#: modules/file/nmmxyz.c:538 modules/file/rawfile.c:631
-#: modules/process/dimensions.h:451 modules/xyz/xyz_drift.c:729
-#: modules/xyz/xyz_raster.c:521
+#: modules/process/dimensions.h:433 modules/xyz/xyz_drift.c:729
+#: modules/xyz/xyz_raster.c:382
msgid "_Horizontal size:"
msgstr ""
#: modules/file/nmmxyz.c:554 modules/file/rawfile.c:638
-#: modules/process/dimensions.h:454 modules/xyz/xyz_drift.c:744
-#: modules/xyz/xyz_raster.c:536
+#: modules/process/dimensions.h:436 modules/xyz/xyz_drift.c:744
+#: modules/xyz/xyz_raster.c:388
msgid "_Vertical size:"
msgstr ""
@@ -5234,38 +5408,38 @@ msgstr ""
msgid "Per-axis header field %s contains too few items."
msgstr ""
-#: modules/file/nt-mdt.c:843
+#: modules/file/nt-mdt.c:850
msgid "Imports NT-MDT data files."
msgstr ""
-#: modules/file/nt-mdt.c:856
+#: modules/file/nt-mdt.c:863
msgid "NT-MDT files (.mdt)"
msgstr ""
-#: modules/file/nt-mdt.c:1491 modules/file/nt-mdt.c:1599
+#: modules/file/nt-mdt.c:1498 modules/file/nt-mdt.c:1606
msgid "Frame is too short for Frame Mode."
msgstr ""
-#: modules/file/nt-mdt.c:1506 modules/file/nt-mdt.c:1614
+#: modules/file/nt-mdt.c:1513 modules/file/nt-mdt.c:1621
msgid "Frame is too short for dots or data."
msgstr ""
-#: modules/file/nt-mdt.c:1869
+#: modules/file/nt-mdt.c:1879
#, c-format
msgid "End of file reached in frame header #%u."
msgstr ""
-#: modules/file/nt-mdt.c:1877
+#: modules/file/nt-mdt.c:1887
#, c-format
msgid "End of file reached in frame data #%u."
msgstr ""
-#: modules/file/nt-mdt.c:1910
+#: modules/file/nt-mdt.c:1920
#, c-format
msgid "Frame #%u is too short for scanned data header."
msgstr ""
-#: modules/file/nt-mdt.c:1927
+#: modules/file/nt-mdt.c:1937
#, c-format
msgid "Frame #%u is too short for spectroscopy data header."
msgstr ""
@@ -5378,28 +5552,28 @@ msgstr ""
msgid "Omicron MATRIX (.mtrx & .mtrx)"
msgstr ""
-#: modules/file/opdfile.c:188
+#: modules/file/opdfile.c:199
msgid "Imports Wyko OPD and ASC files."
msgstr ""
-#: modules/file/opdfile.c:201
+#: modules/file/opdfile.c:212
msgid "Wyko OPD files (.opd)"
msgstr ""
-#: modules/file/opdfile.c:208
+#: modules/file/opdfile.c:219
msgid "Wyko ASCII export files (.asc)"
msgstr ""
-#: modules/file/opdfile.c:299
+#: modules/file/opdfile.c:310
#, c-format
msgid "Item `%s' is beyond the end of the file."
msgstr ""
-#: modules/file/opdfile.c:614
+#: modules/file/opdfile.c:636
msgid "Nested directories found"
msgstr ""
-#: modules/file/opdfile.c:805
+#: modules/file/opdfile.c:842
#, c-format
msgid "Truncated data in block %s"
msgstr ""
@@ -5692,19 +5866,21 @@ msgstr ""
#: modules/file/rawfile.c:567 modules/process/arithmetic.c:234
#: modules/process/calcoefs_view.c:320 modules/process/coerce.c:250
-#: modules/process/convolution_filter.c:236 modules/process/deposit_synth.c:637
+#: modules/process/convolution_filter.c:236 modules/process/deposit_synth.c:638
#: modules/process/drift.c:242 modules/process/edge.c:635
-#: modules/process/entropy.c:178 modules/process/fft_filter_1d.c:183
-#: modules/process/grain_edge.c:210 modules/process/grain_filter.c:313
-#: modules/process/grain_mark.c:244 modules/process/grain_wshed.c:164
-#: modules/process/mark_disconn.c:205 modules/process/mark_with.c:195
-#: modules/process/polydistort.c:205 modules/process/scars.c:295
-#: modules/process/slope_dist.c:273 modules/process/straighten_path.c:198
-#: modules/process/synth.h:509 modules/process/tip_model.c:166
+#: modules/process/entropy.c:178 modules/process/fft_filter_1d.c:184
+#: modules/process/fractal.c:225 modules/process/grain_edge.c:209
+#: modules/process/grain_filter.c:312 modules/process/grain_mark.c:243
+#: modules/process/grain_wshed.c:165 modules/process/mark_disconn.c:205
+#: modules/process/mark_with.c:196 modules/process/mfm_field.c:278
+#: modules/process/mfm_shift.c:167 modules/process/polydistort.c:205
+#: modules/process/scars.c:314 modules/process/slope_dist.c:272
+#: modules/process/stitch.c:272 modules/process/straighten_path.c:198
+#: modules/process/synth.h:538 modules/process/tip_model.c:164
#: modules/process/wpour_mark.c:273 modules/tools/linestats.c:454
-#: modules/tools/sfunctions.c:534 modules/tools/stats.c:459
-#: modules/volume/volume_extract.c:328 modules/volume/volume_linestat.c:287
-#: modules/xyz/xyz_drift.c:618 modules/xyz/xyz_raster.c:443
+#: modules/tools/sfunctions.c:531 modules/tools/stats.c:456
+#: modules/volume/volume_extract.c:321 modules/volume/volume_linestat.c:292
+#: modules/xyz/xyz_drift.c:618 modules/xyz/xyz_raster.c:457
msgid "_Update"
msgstr ""
@@ -5846,7 +6022,7 @@ msgid ""
"The contents of `%s' does not match format: %s."
msgstr ""
-#: modules/file/rawfile.c:1690 modules/process/neural.c:1580
+#: modules/file/rawfile.c:1690 modules/process/neural.c:1587
#, c-format
msgid "The name `%s' is invalid."
msgstr ""
@@ -5939,7 +6115,8 @@ msgstr ""
msgid "Import XYZ Data"
msgstr ""
-#: modules/file/rawxyz.c:279
+#: modules/file/rawxyz.c:279 modules/graph/graph_stats.c:305
+#: modules/graph/graph_stats.c:756 modules/graph/graph_stats.c:800
#, fuzzy
msgid "Number of points:"
msgstr "클러스터 개수"
@@ -5963,7 +6140,7 @@ msgstr "범위"
msgid "_Lateral units:"
msgstr ""
-#: modules/file/rawxyz.c:386 modules/process/dimensions.h:494
+#: modules/file/rawxyz.c:386 modules/process/dimensions.h:479
msgid "_Value units:"
msgstr ""
@@ -5979,18 +6156,14 @@ msgstr ""
msgid "MapArea block is truncated"
msgstr ""
-#: modules/file/renishaw.c:787
+#: modules/file/renishaw.c:793
msgid "Random points order unsupported"
msgstr ""
-#: modules/file/renishaw.c:1396
+#: modules/file/renishaw.c:1405
msgid "Block header is truncated"
msgstr ""
-#: modules/file/renishaw.c:1411
-msgid "Data block is truncated"
-msgstr ""
-
#: modules/file/rhk-sm3.c:236
msgid "Imports RHK Technology SM3 data files."
msgstr ""
@@ -6252,19 +6425,23 @@ msgstr ""
msgid "SPML files (.xml)"
msgstr ""
-#: modules/file/spmlab.c:131
+#: modules/file/spmlab.c:175
msgid "Imports Thermicroscopes SpmLab R3 to R7 data files."
msgstr ""
-#: modules/file/spmlab.c:144
+#: modules/file/spmlab.c:188
msgid "Thermicroscopes SpmLab files"
msgstr ""
-#: modules/file/spmlab.c:231
+#: modules/file/spmlab.c:259
#, c-format
msgid "Unknown format version %c."
msgstr ""
+#: modules/file/spmlab.c:283
+msgid "Data block is truncated."
+msgstr ""
+
#: modules/file/spmlabf.c:79
msgid "Imports SPMLab floating-point files."
msgstr ""
@@ -6459,11 +6636,11 @@ msgstr ""
msgid "WinSTM files (.stm)"
msgstr ""
-#: modules/file/wipfile.c:272
+#: modules/file/wipfile.c:281
msgid "Imports WItec Project data files."
msgstr ""
-#: modules/file/wipfile.c:285
+#: modules/file/wipfile.c:294
msgid "WItec Project files (.wip)"
msgstr ""
@@ -6525,23 +6702,23 @@ msgstr "텍스트 파일로 그래프 데이터 내보내기"
msgid "XYZ text data (.xyz)"
msgstr ""
-#: modules/file/xyzexport.c:244
+#: modules/file/xyzexport.c:247
#, fuzzy
msgid "Lateral units:"
msgstr "값 단위:"
-#: modules/file/xyzexport.c:290
+#: modules/file/xyzexport.c:293
#, fuzzy
msgid "Export XYZ"
msgstr "내보내기(E)"
-#: modules/file/xyzexport.c:340 modules/process/curvature.c:704
+#: modules/file/xyzexport.c:343 modules/process/curvature.c:700
#: modules/process/entropy.c:214 modules/process/facet-level.c:207
-#: modules/process/fit-shape.c:743 modules/process/level.c:259
-#: modules/process/linematch.c:906 modules/process/neural.c:593
-#: modules/process/polylevel.c:491 modules/process/slope_dist.c:418
-#: modules/tools/filter.c:300 modules/tools/linestats.c:436
-#: modules/tools/profile.c:591 modules/tools/sfunctions.c:516
+#: modules/process/fit-shape.c:755 modules/process/level.c:259
+#: modules/process/linematch.c:869 modules/process/neural.c:597
+#: modules/process/polylevel.c:494 modules/process/slope_dist.c:411
+#: modules/tools/filter.c:301 modules/tools/linestats.c:436
+#: modules/tools/profile.c:572 modules/tools/sfunctions.c:513
#: modules/tools/stats.c:389
msgid "Masking Mode"
msgstr "마스킹 모드"
@@ -6554,6 +6731,14 @@ msgstr ""
msgid "Carl Zeiss SEM scans (.tif)"
msgstr ""
+#: modules/file/zeisslsm.c:383
+msgid "Imports Carl Zeiss CLSM images."
+msgstr ""
+
+#: modules/file/zeisslsm.c:396
+msgid "Carl Zeiss CLSM images (.lsm)"
+msgstr ""
+
#: modules/file/zemax.c:72
msgid "Imports Zemax grid sag data files."
msgstr ""
@@ -6576,16 +6761,16 @@ msgstr ""
msgid "The first line contains too many items."
msgstr ""
-#: modules/graph/graph_align.c:57
+#: modules/graph/graph_align.c:60
#, fuzzy
msgid "Aligns graph curves."
msgstr "그래프 곡선의 높이 레벨 맞추기"
-#: modules/graph/graph_align.c:71
+#: modules/graph/graph_align.c:74
msgid "/_Align"
msgstr ""
-#: modules/graph/graph_align.c:74
+#: modules/graph/graph_align.c:77
#, fuzzy
msgid "Align curves"
msgstr "그래프 곡선의 높이 레벨 맞추기"
@@ -6602,48 +6787,50 @@ msgstr "/Critical 규격(C)..."
msgid "Fit critical dimension"
msgstr ""
-#: modules/graph/graph_cd.c:209 modules/graph/graph_fit.c:267
+#: modules/graph/graph_cd.c:209 modules/graph/graph_fit.c:270
msgid "Fit Graph"
msgstr ""
-#: modules/graph/graph_cd.c:212 modules/graph/graph_fdfit.c:251
-#: modules/graph/graph_fit.c:270 modules/process/fit-shape.c:393
+#: modules/graph/graph_cd.c:212 modules/graph/graph_fdfit.c:254
+#: modules/graph/graph_fit.c:273 modules/process/fit-shape.c:394
#: modules/volume/volume_fdfit.c:299
msgid "verb|_Fit"
msgstr ""
-#: modules/graph/graph_cd.c:262 modules/graph/graph_cut.c:166
-#: modules/graph/graph_fdfit.c:306 modules/graph/graph_fit.c:325
-#: modules/graph/graph_peaks.c:199
+#: modules/graph/graph_cd.c:262 modules/graph/graph_cut.c:168
+#: modules/graph/graph_fdfit.c:313 modules/graph/graph_fit.c:332
+#: modules/graph/graph_peaks.c:199 modules/graph/graph_stats.c:268
msgid "_Graph curve:"
msgstr ""
-#: modules/graph/graph_cd.c:276 modules/graph/graph_fdfit.c:320
-#: modules/graph/graph_fit.c:339 modules/volume/volume_fdfit.c:405
+#: modules/graph/graph_cd.c:276 modules/graph/graph_fdfit.c:327
+#: modules/graph/graph_fit.c:346 modules/volume/volume_fdfit.c:389
msgid "F_unction:"
msgstr ""
-#: modules/graph/graph_cd.c:305 modules/graph/graph_fdfit.c:361
-#: modules/graph/graph_fit.c:375 modules/process/curvature.c:745
-#: modules/process/fit-shape.c:792 modules/volume/volume_fdfit.c:446
+#: modules/graph/graph_cd.c:305 modules/graph/graph_fdfit.c:368
+#: modules/graph/graph_fit.c:382 modules/process/curvature.c:742
+#: modules/process/fit-shape.c:804 modules/volume/volume_fdfit.c:422
msgid "Parameter"
msgstr ""
-#: modules/graph/graph_cd.c:307 modules/graph/graph_fdfit.c:363
-#: modules/graph/graph_fit.c:377 modules/process/fit-shape.c:794
-#: modules/volume/volume_fdfit.c:448
+#: modules/graph/graph_cd.c:307 modules/graph/graph_fdfit.c:370
+#: modules/graph/graph_fit.c:384 modules/process/fit-shape.c:806
+#: modules/volume/volume_fdfit.c:424
msgid "Error"
msgstr ""
-#: modules/graph/graph_cd.c:319 modules/graph/graph_cut.c:196
-#: modules/graph/graph_fdfit.c:415 modules/graph/graph_fit.c:433
-#: modules/volume/volume_fdfit.c:500 modules/volume/volume_linestat.c:389
+#: modules/graph/graph_cd.c:319 modules/graph/graph_cut.c:189
+#: modules/graph/graph_fdfit.c:422 modules/graph/graph_fit.c:440
+#: modules/graph/graph_stats.c:279 modules/graph/graph_stats.c:793
+#: modules/volume/volume_fdfit.c:476 modules/volume/volume_linestat.c:394
msgid "Range:"
msgstr ""
-#: modules/graph/graph_cd.c:330 modules/graph/graph_cut.c:207
-#: modules/graph/graph_fdfit.c:426 modules/graph/graph_fit.c:444
-#: modules/volume/volume_fdfit.c:511 modules/volume/volume_linestat.c:400
+#: modules/graph/graph_cd.c:330 modules/graph/graph_cut.c:200
+#: modules/graph/graph_fdfit.c:433 modules/graph/graph_fit.c:451
+#: modules/graph/graph_stats.c:290 modules/graph/graph_stats.c:796
+#: modules/volume/volume_fdfit.c:487 modules/volume/volume_linestat.c:405
msgid "range|to"
msgstr ""
@@ -6651,93 +6838,93 @@ msgstr ""
msgid "_Draw whole circle"
msgstr ""
-#: modules/graph/graph_cd.c:382 modules/graph/graph_fdfit.c:491
-#: modules/graph/graph_fit.c:531 modules/process/fit-shape.c:522
-#: modules/volume/volume_fdfit.c:573
+#: modules/graph/graph_cd.c:382 modules/graph/graph_fdfit.c:498
+#: modules/graph/graph_fit.c:538 modules/process/fit-shape.c:523
+#: modules/volume/volume_fdfit.c:549
msgid "Save Fit Report"
msgstr ""
#: modules/graph/graph_cd.c:529 modules/graph/graph_cd.c:1107
-#: modules/graph/graph_fdfit.c:709 modules/graph/graph_fit.c:763
-#: modules/volume/volume_fdfit.c:907
+#: modules/graph/graph_fdfit.c:725 modules/graph/graph_fit.c:779
+#: modules/volume/volume_fdfit.c:883
msgid "Fit"
msgstr ""
-#: modules/graph/graph_cd.c:555 modules/graph/graph_fdfit.c:749
-#: modules/graph/graph_fit.c:803 modules/volume/volume_fdfit.c:978
-#: modules/volume/volume_fdfit.c:1085
+#: modules/graph/graph_cd.c:555 modules/graph/graph_fdfit.c:765
+#: modules/graph/graph_fit.c:819 modules/volume/volume_fdfit.c:954
+#: modules/volume/volume_fdfit.c:1061
msgid "It is necessary to select more data points than free fit parameters"
msgstr ""
-#: modules/graph/graph_cd.c:710 modules/graph/graph_fdfit.c:798
-#: modules/graph/graph_fit.c:852 modules/process/entropy.c:554
-#: modules/tools/grainmeasure.c:217 modules/tools/readvalue.c:634
-#: modules/tools/readvalue.c:635 modules/tools/readvalue.c:636
-#: modules/tools/readvalue.c:637 modules/tools/roughness.c:975
-#: modules/tools/stats.c:727 modules/tools/stats.c:740
-#: modules/tools/stats.c:741 modules/volume/volume_fdfit.c:1134
-#: modules/xyz/xyz_drift.c:1099 modules/xyz/xyz_drift.c:1117
-#: modules/xyz/xyz_drift.c:1134
+#: modules/graph/graph_cd.c:710 modules/graph/graph_fdfit.c:814
+#: modules/graph/graph_fit.c:868 modules/graph/graph_stats.c:663
+#: modules/process/entropy.c:555 modules/tools/grainmeasure.c:217
+#: modules/tools/readvalue.c:634 modules/tools/readvalue.c:635
+#: modules/tools/readvalue.c:636 modules/tools/readvalue.c:637
+#: modules/tools/roughness.c:984 modules/tools/stats.c:723
+#: modules/tools/stats.c:736 modules/tools/stats.c:737
+#: modules/volume/volume_fdfit.c:1110 modules/xyz/xyz_drift.c:1099
+#: modules/xyz/xyz_drift.c:1117 modules/xyz/xyz_drift.c:1134
msgid "N.A."
msgstr ""
-#: modules/graph/graph_cd.c:993 modules/graph/graph_fdfit.c:1363
-#: modules/graph/graph_fit.c:1500 modules/process/fit-shape.c:2078
-#: modules/volume/volume_fdfit.c:1720
+#: modules/graph/graph_cd.c:993 modules/graph/graph_fdfit.c:1381
+#: modules/graph/graph_fit.c:1518 modules/process/fit-shape.c:2060
+#: modules/volume/volume_fdfit.c:1696
msgid "===== Fit Results ====="
msgstr ""
-#: modules/graph/graph_cd.c:997 modules/graph/graph_fdfit.c:1367
-#: modules/graph/graph_fit.c:1504 modules/process/fit-shape.c:2080
-#: modules/volume/volume_fdfit.c:1724
+#: modules/graph/graph_cd.c:997 modules/graph/graph_fdfit.c:1385
+#: modules/graph/graph_fit.c:1522 modules/process/fit-shape.c:2062
+#: modules/volume/volume_fdfit.c:1700
#, c-format
msgid "Data: %s\n"
msgstr ""
-#: modules/graph/graph_cd.c:1000 modules/graph/graph_fdfit.c:1370
-#: modules/graph/graph_fit.c:1507 modules/process/fit-shape.c:2082
-#: modules/volume/volume_fdfit.c:1727
+#: modules/graph/graph_cd.c:1000 modules/graph/graph_fdfit.c:1388
+#: modules/graph/graph_fit.c:1525 modules/process/fit-shape.c:2064
+#: modules/volume/volume_fdfit.c:1703
#, c-format
msgid "Number of points: %d of %d\n"
msgstr ""
-#: modules/graph/graph_cd.c:1004 modules/graph/graph_fdfit.c:1374
-#: modules/graph/graph_fit.c:1511 modules/volume/volume_fdfit.c:1731
+#: modules/graph/graph_cd.c:1004 modules/graph/graph_fdfit.c:1392
+#: modules/graph/graph_fit.c:1529 modules/volume/volume_fdfit.c:1707
#, c-format
msgid "X range: %.*f to %.*f %s\n"
msgstr ""
-#: modules/graph/graph_cd.c:1010 modules/graph/graph_fdfit.c:1380
-#: modules/graph/graph_fit.c:1517 modules/process/fit-shape.c:2084
-#: modules/volume/volume_fdfit.c:1737
+#: modules/graph/graph_cd.c:1010 modules/graph/graph_fdfit.c:1398
+#: modules/graph/graph_fit.c:1535 modules/process/fit-shape.c:2066
+#: modules/volume/volume_fdfit.c:1713
#, c-format
msgid "Fitted function: %s\n"
msgstr ""
-#: modules/graph/graph_cd.c:1013 modules/graph/graph_fdfit.c:1383
-#: modules/graph/graph_fit.c:1520 modules/process/fit-shape.c:2087
-#: modules/volume/volume_fdfit.c:1740
+#: modules/graph/graph_cd.c:1013 modules/graph/graph_fdfit.c:1401
+#: modules/graph/graph_fit.c:1538 modules/process/fit-shape.c:2069
+#: modules/volume/volume_fdfit.c:1716
msgid "Results\n"
msgstr ""
-#: modules/graph/graph_cut.c:88
+#: modules/graph/graph_cut.c:87
msgid "Cut graph"
msgstr "그래프 자르기"
-#: modules/graph/graph_cut.c:102
+#: modules/graph/graph_cut.c:101
#, fuzzy
msgid "/_Cut..."
msgstr "/그래프 자르기(C)..."
-#: modules/graph/graph_cut.c:105
+#: modules/graph/graph_cut.c:104
msgid "Extract part of graph into new one"
msgstr ""
-#: modules/graph/graph_cut.c:146
+#: modules/graph/graph_cut.c:145
msgid "Cut Graph"
msgstr "그래프 자르기"
-#: modules/graph/graph_cut.c:180
+#: modules/graph/graph_cut.c:173
msgid "Cut _all curves"
msgstr ""
@@ -6836,101 +7023,101 @@ msgstr "래스터 이미지로 그래프 데이터 내보내기"
msgid "Export to PNG"
msgstr "PNG 파일로 내보내기"
-#: modules/graph/graph_export_vector.c:35
+#: modules/graph/graph_export_vector.c:36
#, fuzzy
msgid "Exports graphs to PostScript"
msgstr "포스트스크립트(*.ps) 파일로 그래프 데이터 내보내기"
-#: modules/graph/graph_export_vector.c:49
+#: modules/graph/graph_export_vector.c:50
msgid "/Export _PostScript"
msgstr "/포스트스크립트(*.ps) 파일로 내보내기(P)"
-#: modules/graph/graph_export_vector.c:52
+#: modules/graph/graph_export_vector.c:53
#, fuzzy
msgid "Export graph to PostScript"
msgstr "포스트스크립트(*.ps) 파일로 그래프 데이터 내보내기"
-#: modules/graph/graph_export_vector.c:65
+#: modules/graph/graph_export_vector.c:66
#, fuzzy
msgid "Export to PostScript"
msgstr "포스트스크립트(*.ps) 파일로 내보내기"
-#: modules/graph/graph_fdfit.c:168
+#: modules/graph/graph_fdfit.c:169
msgid "Fit force-distance data"
msgstr "힘-거리 데이터 맞춤"
-#: modules/graph/graph_fdfit.c:182
+#: modules/graph/graph_fdfit.c:183
msgid "/_Fit FD Curve..."
msgstr "/FD 곡선 맞춤(F)"
-#: modules/graph/graph_fdfit.c:185
+#: modules/graph/graph_fdfit.c:186
msgid "Fit a force-distance curve"
msgstr "힘-거리 곡선 맞추기"
-#: modules/graph/graph_fdfit.c:248 modules/volume/volume_fdfit.c:296
+#: modules/graph/graph_fdfit.c:251 modules/volume/volume_fdfit.c:296
msgid "Fit FD Curve"
msgstr "FD 곡선 맞춤"
-#: modules/graph/graph_fdfit.c:255 modules/graph/graph_fit.c:274
-#: modules/process/fit-shape.c:397 modules/process/measure_lattice.c:257
-#: modules/volume/volume_fdfit.c:303
+#: modules/graph/graph_fdfit.c:258 modules/graph/graph_fit.c:277
+#: modules/process/correct_affine.c:347 modules/process/fit-shape.c:398
+#: modules/process/measure_lattice.c:247 modules/volume/volume_fdfit.c:303
msgid "verb|_Estimate"
msgstr ""
-#: modules/graph/graph_fdfit.c:257 modules/graph/graph_fit.c:276
-#: modules/volume/volume_fdfit.c:305
+#: modules/graph/graph_fdfit.c:260 modules/graph/graph_fit.c:279
+#: modules/process/psf.c:239 modules/volume/volume_fdfit.c:305
msgid "_Plot Inits"
msgstr ""
-#: modules/graph/graph_fdfit.c:359 modules/graph/graph_fit.c:373
-#: modules/process/fit-shape.c:790 modules/volume/volume_fdfit.c:444
+#: modules/graph/graph_fdfit.c:366 modules/graph/graph_fit.c:380
+#: modules/process/fit-shape.c:802 modules/volume/volume_fdfit.c:420
msgid "Fix"
msgstr ""
-#: modules/graph/graph_fdfit.c:365 modules/graph/graph_fit.c:379
-#: modules/volume/volume_fdfit.c:450
+#: modules/graph/graph_fdfit.c:372 modules/graph/graph_fit.c:386
+#: modules/volume/volume_fdfit.c:426
msgid "Initial"
msgstr ""
-#: modules/graph/graph_fdfit.c:376 modules/graph/graph_fit.c:394
-#: modules/volume/volume_fdfit.c:461
+#: modules/graph/graph_fdfit.c:383 modules/graph/graph_fit.c:401
+#: modules/volume/volume_fdfit.c:437
msgid "χ<sup>2</sup> result:"
msgstr ""
-#: modules/graph/graph_fdfit.c:392 modules/graph/graph_fit.c:410
-#: modules/process/fit-shape.c:469 modules/process/fit-shape.c:2134
-#: modules/volume/volume_fdfit.c:477
+#: modules/graph/graph_fdfit.c:399 modules/graph/graph_fit.c:417
+#: modules/process/fit-shape.c:470 modules/process/fit-shape.c:2116
+#: modules/volume/volume_fdfit.c:453
msgid "Correlation Matrix"
msgstr ""
-#: modules/graph/graph_fdfit.c:447 modules/graph/graph_fit.c:485
-#: modules/process/wpour_mark.c:410 modules/volume/volume_fdfit.c:532
+#: modules/graph/graph_fdfit.c:454 modules/graph/graph_fit.c:492
+#: modules/process/wpour_mark.c:410 modules/volume/volume_fdfit.c:508
msgid "Instant:"
msgstr ""
-#: modules/graph/graph_fdfit.c:450 modules/graph/graph_fit.c:488
+#: modules/graph/graph_fdfit.c:457 modules/graph/graph_fit.c:495
#, fuzzy
msgid "esti_mate"
msgstr "팁 추정 효과 가리기"
-#: modules/graph/graph_fdfit.c:457 modules/graph/graph_fit.c:495
-#: modules/volume/volume_fdfit.c:542
+#: modules/graph/graph_fdfit.c:464 modules/graph/graph_fit.c:502
+#: modules/volume/volume_fdfit.c:518
msgid "p_lot"
msgstr ""
-#: modules/graph/graph_fdfit.c:708 modules/graph/graph_fit.c:762
-#: modules/volume/volume_fdfit.c:906
+#: modules/graph/graph_fdfit.c:724 modules/graph/graph_fit.c:778
+#: modules/volume/volume_fdfit.c:882
msgid "Estimate"
msgstr ""
-#: modules/graph/graph_fdfit.c:1410 modules/graph/graph_fit.c:1547
-#: modules/volume/volume_fdfit.c:1768
+#: modules/graph/graph_fdfit.c:1428 modules/graph/graph_fit.c:1565
+#: modules/volume/volume_fdfit.c:1744
#, c-format
msgid "Residual sum: %g\n"
msgstr ""
-#: modules/graph/graph_fdfit.c:1413 modules/graph/graph_fit.c:1550
-#: modules/volume/volume_fdfit.c:1771
+#: modules/graph/graph_fdfit.c:1431 modules/graph/graph_fit.c:1568
+#: modules/volume/volume_fdfit.c:1747
msgid "Correlation matrix\n"
msgstr ""
@@ -6946,27 +7133,27 @@ msgstr "/필터(F)"
msgid "Remove noise from graph curves"
msgstr "그래프 곡선 내 노이즈 제거 "
-#: modules/graph/graph_fit.c:181
+#: modules/graph/graph_fit.c:182
msgid "Fit graph with function"
msgstr ""
-#: modules/graph/graph_fit.c:195
+#: modules/graph/graph_fit.c:196
msgid "/_Fit Function..."
msgstr "/함수에 맞추기(F)"
-#: modules/graph/graph_fit.c:198
+#: modules/graph/graph_fit.c:199
msgid "Fit a function on graph data"
msgstr ""
-#: modules/graph/graph_fit.c:386
+#: modules/graph/graph_fit.c:393
msgid "Copy all fitted values to estimates"
msgstr ""
-#: modules/graph/graph_fit.c:460
+#: modules/graph/graph_fit.c:467
msgid "Plot full range"
msgstr ""
-#: modules/graph/graph_fit.c:470
+#: modules/graph/graph_fit.c:477
msgid "Create a difference graph"
msgstr ""
@@ -7054,56 +7241,149 @@ msgstr ""
msgid "Find graph curve peaks"
msgstr "그래프 곡선의 높이 레벨 맞추기"
-#: modules/graph/graph_peaks.c:157
+#: modules/graph/graph_peaks.c:155
msgid "Prominence"
msgstr ""
-#: modules/graph/graph_peaks.c:161
+#: modules/graph/graph_peaks.c:159
#, fuzzy
msgid "Zero"
msgstr "0값으로 설정"
-#: modules/graph/graph_peaks.c:162
+#: modules/graph/graph_peaks.c:160
msgid "Bilateral minimum"
msgstr ""
-#: modules/graph/graph_peaks.c:178
+#: modules/graph/graph_peaks.c:176
#, fuzzy
msgid "Graph Peaks"
msgstr "그래프"
-#: modules/graph/graph_peaks.c:212
+#: modules/graph/graph_peaks.c:209
msgid "_Background type:"
msgstr ""
-#: modules/graph/graph_peaks.c:227
+#: modules/graph/graph_peaks.c:219
msgid "Order peaks _by:"
msgstr ""
-#: modules/graph/graph_peaks.c:242
+#: modules/graph/graph_peaks.c:225
#, fuzzy
msgid "Number of _peaks:"
msgstr "클러스터 개수"
-#: modules/graph/graph_peaks.c:263 modules/process/curvature.c:773
-#: modules/process/grain_stat.c:360 modules/process/measure_lattice.c:396
-#: modules/process/polylevel.c:607 modules/tools/distance.c:259
-#: modules/tools/roughness.c:818 modules/tools/stats.c:450
+#: modules/graph/graph_peaks.c:245 modules/graph/graph_stats.c:367
+#: modules/process/curvature.c:770 modules/process/grain_stat.c:360
+#: modules/process/measure_lattice.c:390 modules/process/polylevel.c:610
+#: modules/tools/distance.c:259 modules/tools/roughness.c:819
+#: modules/tools/stats.c:447
msgid "Save table to a file"
msgstr "표를 파일로 저장"
-#: modules/graph/graph_peaks.c:267 modules/process/curvature.c:778
-#: modules/process/grain_stat.c:365 modules/process/measure_lattice.c:400
-#: modules/process/polylevel.c:617 modules/tools/distance.c:264
-#: modules/tools/roughness.c:823 modules/tools/stats.c:455
+#: modules/graph/graph_peaks.c:249 modules/graph/graph_stats.c:371
+#: modules/process/curvature.c:775 modules/process/grain_stat.c:365
+#: modules/process/measure_lattice.c:394 modules/process/polylevel.c:620
+#: modules/tools/distance.c:264 modules/tools/roughness.c:824
+#: modules/tools/stats.c:452
msgid "Copy table to clipboard"
msgstr "표를 클립보드로 복사"
-#: modules/graph/graph_peaks.c:654
+#: modules/graph/graph_peaks.c:618
#, fuzzy
msgid "Save Peak Parameters"
msgstr "변수"
+#: modules/graph/graph_stats.c:148 modules/graph/graph_stats.c:161
+#: modules/tools/stats.c:205
+msgid "Average value:"
+msgstr ""
+
+#: modules/graph/graph_stats.c:149 modules/tools/stats.c:206
+msgid "Median:"
+msgstr ""
+
+#: modules/graph/graph_stats.c:150
+#, fuzzy
+msgid "Ra:"
+msgstr "Ra"
+
+#: modules/graph/graph_stats.c:151
+msgid "Rms (Rq):"
+msgstr ""
+
+#: modules/graph/graph_stats.c:152 modules/tools/stats.c:210
+msgid "Skew:"
+msgstr ""
+
+#: modules/graph/graph_stats.c:153 modules/tools/stats.c:211
+msgid "Kurtosis:"
+msgstr ""
+
+#: modules/graph/graph_stats.c:158
+#, fuzzy
+msgid "Projected length:"
+msgstr "투영된 경계의 길이 "
+
+#: modules/graph/graph_stats.c:159
+msgid "Developed length:"
+msgstr ""
+
+#: modules/graph/graph_stats.c:160 modules/tools/stats.c:214
+msgid "Variation:"
+msgstr ""
+
+#: modules/graph/graph_stats.c:162
+msgid "Area under curve:"
+msgstr ""
+
+#: modules/graph/graph_stats.c:163
+#, fuzzy
+msgid "Positive area:"
+msgstr "양성의"
+
+#: modules/graph/graph_stats.c:164
+#, fuzzy
+msgid "Negative area:"
+msgstr "음성의"
+
+#: modules/graph/graph_stats.c:165
+msgid "Root mean square:"
+msgstr ""
+
+#: modules/graph/graph_stats.c:171
+#, fuzzy
+msgid "Calculates simple graph curve statistics."
+msgstr "전체 곡률 계산하기."
+
+#: modules/graph/graph_stats.c:185
+#, fuzzy
+msgid "/_Statistics..."
+msgstr "/통계(S)/각도 분포(G)..."
+
+#: modules/graph/graph_stats.c:188
+#, fuzzy
+msgid "Calculate graph curve statistics"
+msgstr "전체 곡률 계산하기"
+
+#: modules/graph/graph_stats.c:241
+msgid "Graph Statistics"
+msgstr ""
+
+#: modules/graph/graph_stats.c:320 modules/graph/graph_stats.c:807
+#, fuzzy
+msgid "Simple Parameters"
+msgstr "변수"
+
+#: modules/graph/graph_stats.c:342 modules/graph/graph_stats.c:826
+#, fuzzy
+msgid "Integrals"
+msgstr "교차점"
+
+#: modules/graph/graph_stats.c:686
+#, fuzzy
+msgid "Save Curve Statistics"
+msgstr "곡률 저장"
+
#: modules/layer/axis.c:143
msgid "Layer allowing selection of horizontal or vertical lines."
msgstr ""
@@ -7237,25 +7517,25 @@ msgstr ""
msgid "Angle Distribution"
msgstr ""
-#: modules/process/angle_dist.c:188 modules/process/slope_dist.c:373
+#: modules/process/angle_dist.c:188 modules/process/slope_dist.c:365
msgid "Output _size:"
msgstr ""
-#: modules/process/angle_dist.c:193 modules/process/grain_wshed.c:206
+#: modules/process/angle_dist.c:193 modules/process/grain_wshed.c:207
msgid "_Number of steps:"
msgstr ""
-#: modules/process/angle_dist.c:198 modules/process/slope_dist.c:380
+#: modules/process/angle_dist.c:198 modules/process/slope_dist.c:372
msgid "_Logarithmic value scale"
msgstr ""
#: modules/process/angle_dist.c:204 modules/process/entropy.c:231
-#: modules/process/slope_dist.c:390
+#: modules/process/slope_dist.c:382
msgid "Use local plane _fitting"
msgstr ""
#: modules/process/angle_dist.c:213 modules/process/entropy.c:242
-#: modules/process/slope_dist.c:401
+#: modules/process/slope_dist.c:393
msgid "_Plane size:"
msgstr ""
@@ -7271,7 +7551,8 @@ msgstr "/멀티데이터(M)/산술 연산(A)..."
msgid "Arithmetic operations on data"
msgstr ""
-#: modules/process/arithmetic.c:202 modules/process/superresolution.c:349
+#: modules/process/arithmetic.c:202 modules/process/stitch.c:234
+#: modules/process/superresolution.c:348
msgid "Calculated"
msgstr ""
@@ -7287,7 +7568,7 @@ msgstr ""
msgid "Operands"
msgstr ""
-#: modules/process/arithmetic.c:300 modules/process/dimensions.h:483
+#: modules/process/arithmetic.c:300 modules/process/dimensions.h:465
msgid "Units"
msgstr ""
@@ -7308,15 +7589,15 @@ msgstr ""
msgid "Expression contains unknown identifiers"
msgstr ""
-#: modules/process/arithmetic.c:569 modules/process/superresolution.c:300
+#: modules/process/arithmetic.c:569 modules/process/superresolution.c:299
msgid "Pixel dimensions differ"
msgstr ""
-#: modules/process/arithmetic.c:571 modules/process/superresolution.c:302
+#: modules/process/arithmetic.c:571 modules/process/superresolution.c:301
msgid "Lateral dimensions are different physical quantities"
msgstr ""
-#: modules/process/arithmetic.c:574 modules/process/superresolution.c:305
+#: modules/process/arithmetic.c:574 modules/process/superresolution.c:304
msgid "Physical dimensions differ"
msgstr ""
@@ -7420,7 +7701,7 @@ msgid "Generates surfaces by ballistic deposition."
msgstr ""
#: modules/process/bdep_synth.c:164
-msgid "/S_ynthetic/_Ballistic..."
+msgid "/S_ynthetic/_Deposition/_Ballistic..."
msgstr ""
#: modules/process/bdep_synth.c:168
@@ -7429,20 +7710,23 @@ msgstr ""
#: modules/process/bdep_synth.c:239 modules/process/bdep_synth.c:596
#: modules/process/calcoefs_simple.c:636 modules/process/col_synth.c:282
-#: modules/process/col_synth.c:733 modules/process/crosscor.c:819
-#: modules/process/crosscor.c:882 modules/process/deposit_synth.c:268
-#: modules/process/deposit_synth.c:859 modules/process/diff_synth.c:304
-#: modules/process/diff_synth.c:705 modules/process/domain_synth.c:255
-#: modules/process/domain_synth.c:745 modules/process/grain_wshed.c:429
+#: modules/process/col_synth.c:734 modules/process/crosscor.c:792
+#: modules/process/crosscor.c:855 modules/process/deposit_synth.c:268
+#: modules/process/deposit_synth.c:858 modules/process/diff_synth.c:304
+#: modules/process/diff_synth.c:704 modules/process/domain_synth.c:255
+#: modules/process/domain_synth.c:745 modules/process/fibre_synth.c:357
+#: modules/process/fibre_synth.c:872 modules/process/grain_wshed.c:433
#: modules/process/lat_synth.c:491 modules/process/mark_disconn.c:148
-#: modules/process/mark_disconn.c:373 modules/process/maskcor.c:330
-#: modules/process/mcrop.c:315 modules/process/merge.c:1072
-#: modules/process/nanoindent_adjust.c:323 modules/process/neural.c:1272
-#: modules/process/pid.c:338 modules/process/superresolution.c:416
-#: modules/process/superresolution.c:505 modules/process/tip_blind.c:781
-#: modules/process/tipops.c:320 modules/process/xydenoise.c:213
-#: modules/volume/volume_kmeans.c:403 modules/volume/volume_kmedians.c:365
-#: modules/xyz/xyz_raster.c:1028 modules/xyz/xyz_raster.c:1044
+#: modules/process/mark_disconn.c:361 modules/process/maskcor.c:334
+#: modules/process/mcrop.c:314 modules/process/merge.c:1072
+#: modules/process/nanoindent_adjust.c:324 modules/process/neural.c:1279
+#: modules/process/pid.c:339 modules/process/sphere-revolve.c:269
+#: modules/process/superresolution.c:415 modules/process/superresolution.c:504
+#: modules/process/tip_blind.c:778 modules/process/tipops.c:320
+#: modules/process/wave_synth.c:305 modules/process/wave_synth.c:747
+#: modules/process/xydenoise.c:214 modules/volume/volume_kmeans.c:397
+#: modules/volume/volume_kmedians.c:363 modules/xyz/xyz_raster.c:997
+#: modules/xyz/xyz_raster.c:1013
msgid "Initializing..."
msgstr ""
@@ -7451,10 +7735,11 @@ msgstr ""
#: modules/process/deposit_synth.c:531 modules/process/deposit_synth.c:544
#: modules/process/diff_synth.c:342 modules/process/domain_synth.c:319
#: modules/process/domain_synth.c:327 modules/process/fbm_synth.c:278
-#: modules/process/fft_synth.c:314 modules/process/lat_synth.c:529
-#: modules/process/lno_synth.c:407 modules/process/noise_synth.c:311
-#: modules/process/obj_synth.c:407 modules/process/pat_synth.c:357
-#: modules/process/wave_synth.c:323
+#: modules/process/fft_synth.c:314 modules/process/fibre_synth.c:394
+#: modules/process/lat_synth.c:529 modules/process/lno_synth.c:405
+#: modules/process/noise_synth.c:309 modules/process/obj_synth.c:404
+#: modules/process/pat_synth.c:357 modules/process/phase_synth.c:518
+#: modules/process/wave_synth.c:342
msgid "Generated"
msgstr ""
@@ -7475,50 +7760,56 @@ msgid "Progressive preview"
msgstr ""
#: modules/process/bdep_synth.c:407 modules/process/col_synth.c:458
-#: modules/process/deposit_synth.c:412 modules/process/diff_synth.c:477
+#: modules/process/deposit_synth.c:413 modules/process/diff_synth.c:477
#: modules/process/domain_synth.c:430 modules/process/fbm_synth.c:360
-#: modules/process/fft_synth.c:398 modules/process/lat_synth.c:626
-#: modules/process/lno_synth.c:490 modules/process/noise_synth.c:394
-#: modules/process/obj_synth.c:498 modules/process/pat_synth.c:442
-#: modules/process/wave_synth.c:407
+#: modules/process/fft_synth.c:398 modules/process/fibre_synth.c:479
+#: modules/process/lat_synth.c:626 modules/process/lno_synth.c:488
+#: modules/process/mfm_current.c:383 modules/process/mfm_parallel.c:384
+#: modules/process/noise_synth.c:392 modules/process/obj_synth.c:495
+#: modules/process/pat_synth.c:442 modules/process/phase_synth.c:263
+#: modules/process/wave_synth.c:426
msgid "Dimensions"
msgstr ""
#: modules/process/bdep_synth.c:416 modules/process/col_synth.c:467
-#: modules/process/deposit_synth.c:422 modules/process/diff_synth.c:486
+#: modules/process/deposit_synth.c:425 modules/process/diff_synth.c:486
#: modules/process/domain_synth.c:438 modules/process/fbm_synth.c:371
-#: modules/process/fft_synth.c:409 modules/process/lno_synth.c:501
-#: modules/process/noise_synth.c:405 modules/process/obj_synth.c:509
-#: modules/process/pat_synth.c:454 modules/process/wave_synth.c:418
+#: modules/process/fft_synth.c:409 modules/process/fibre_synth.c:490
+#: modules/process/lno_synth.c:499 modules/process/mfm_current.c:412
+#: modules/process/mfm_parallel.c:411 modules/process/noise_synth.c:403
+#: modules/process/obj_synth.c:506 modules/process/pat_synth.c:454
+#: modules/process/phase_synth.c:274 modules/process/wave_synth.c:437
msgid "Generator"
msgstr ""
#: modules/process/bdep_synth.c:422 modules/process/col_synth.c:473
-#: modules/process/diff_synth.c:492 modules/process/lno_synth.c:1041
-#: modules/process/obj_synth.c:520
+#: modules/process/deposit_synth.c:455 modules/process/diff_synth.c:492
+#: modules/process/fibre_synth.c:502 modules/process/lno_synth.c:1041
+#: modules/process/obj_synth.c:518
msgid "Co_verage:"
msgstr ""
#: modules/process/bdep_synth.c:434 modules/process/diff_synth.c:512
-#: modules/process/domain_synth.c:514 modules/process/fbm_synth.c:412
-#: modules/process/fft_synth.c:418 modules/process/lat_synth.c:758
-#: modules/process/lno_synth.c:537 modules/process/noise_synth.c:437
-#: modules/process/obj_synth.c:579 modules/process/wave_synth.c:453
-msgid "_Like Current Channel"
+#: modules/process/domain_synth.c:514 modules/process/fbm_synth.c:411
+#: modules/process/fft_synth.c:418 modules/process/fibre_synth.c:544
+#: modules/process/lat_synth.c:758 modules/process/lno_synth.c:535
+#: modules/process/noise_synth.c:435 modules/process/obj_synth.c:577
+#: modules/process/phase_synth.c:302 modules/process/wave_synth.c:472
+msgid "_Like Current Image"
msgstr ""
-#: modules/process/bdep_synth.c:453 modules/process/col_synth.c:541
-#: modules/process/diff_synth.c:562
+#: modules/process/bdep_synth.c:453 modules/process/col_synth.c:542
+#: modules/process/diff_synth.c:561
msgid "Evolution"
msgstr ""
-#: modules/process/bdep_synth.c:456 modules/process/col_synth.c:544
-#: modules/process/diff_synth.c:565
+#: modules/process/bdep_synth.c:456 modules/process/col_synth.c:545
+#: modules/process/diff_synth.c:564
msgid "Plot graphs:"
msgstr "그래프 그리기:"
-#: modules/process/bdep_synth.c:654 modules/process/col_synth.c:840
-#: modules/process/diff_synth.c:782
+#: modules/process/bdep_synth.c:654 modules/process/col_synth.c:841
+#: modules/process/diff_synth.c:781
msgid "Depositing particles..."
msgstr ""
@@ -7553,8 +7844,8 @@ msgstr ""
msgid "Calibration name:"
msgstr ""
-#: modules/process/calcoefs_load.c:254 modules/volume/volume_extract.c:433
-#: modules/volume/volume_extract.c:514
+#: modules/process/calcoefs_load.c:254 modules/volume/volume_extract.c:421
+#: modules/volume/volume_extract.c:501
msgid "No data loaded"
msgstr ""
@@ -7578,7 +7869,7 @@ msgstr ""
msgid "Load calibration data"
msgstr ""
-#: modules/process/calcoefs_load.c:364 modules/volume/volume_extract.c:1073
+#: modules/process/calcoefs_load.c:364 modules/volume/volume_extract.c:1059
#, c-format
msgid "Error loading file '%s'"
msgstr ""
@@ -7672,7 +7963,7 @@ msgstr ""
msgid "Simple Error Map"
msgstr ""
-#: modules/process/calcoefs_simple.c:343 modules/process/calcoefs_stage.c:146
+#: modules/process/calcoefs_simple.c:343 modules/process/calcoefs_stage.c:142
#: modules/process/superresolution.c:156
msgid "Operands:"
msgstr ""
@@ -7686,14 +7977,14 @@ msgid "Detail"
msgstr ""
#: modules/process/calcoefs_simple.c:371 modules/process/calcoefs_view.c:491
-#: modules/process/calibrate.c:496 modules/process/crosscor.c:289
-#: modules/volume/volume_calibrate.c:478
+#: modules/process/calibrate.c:481 modules/process/crosscor.c:276
+#: modules/volume/volume_calibrate.c:460
msgid "_X offset:"
msgstr ""
#: modules/process/calcoefs_simple.c:398 modules/process/calcoefs_view.c:517
-#: modules/process/calibrate.c:509 modules/process/crosscor.c:300
-#: modules/volume/volume_calibrate.c:491
+#: modules/process/calibrate.c:488 modules/process/crosscor.c:284
+#: modules/volume/volume_calibrate.c:467
msgid "_Y offset:"
msgstr ""
@@ -7706,7 +7997,7 @@ msgid "Y p_eriod:"
msgstr ""
#: modules/process/calcoefs_simple.c:438 modules/process/calcoefs_view.c:529
-#: modules/volume/volume_calibrate.c:505
+#: modules/volume/volume_calibrate.c:474
msgid "_Z offset:"
msgstr ""
@@ -7736,25 +8027,25 @@ msgstr[0] ""
msgid "Search canceled"
msgstr ""
-#: modules/process/calcoefs_simple.c:638 modules/process/crosscor.c:862
-#: modules/process/maskcor.c:332 modules/process/mcrop.c:317
+#: modules/process/calcoefs_simple.c:638 modules/process/crosscor.c:835
+#: modules/process/maskcor.c:336 modules/process/mcrop.c:316
#: modules/process/merge.c:1074
msgid "Correlating..."
msgstr ""
-#: modules/process/calcoefs_stage.c:76
+#: modules/process/calcoefs_stage.c:72
msgid "Digital AFM data recalibration"
msgstr ""
-#: modules/process/calcoefs_stage.c:90
+#: modules/process/calcoefs_stage.c:86
msgid "/Cali_bration/_3D Calibration/_Get From Stage map..."
msgstr "/켈리브레이션(I)/3D 켈리브레이션(3)/Stage map에서 얻기(G)"
-#: modules/process/calcoefs_stage.c:94
+#: modules/process/calcoefs_stage.c:90
msgid "Stage error mapping"
msgstr ""
-#: modules/process/calcoefs_stage.c:131
+#: modules/process/calcoefs_stage.c:127
msgid "Stage Error Map"
msgstr ""
@@ -7813,14 +8104,16 @@ msgstr "Z 위치"
msgid "Crop to actual data"
msgstr ""
-#: modules/process/calcoefs_view.c:567 modules/process/coerce.c:369
-#: modules/process/deposit_synth.c:641 modules/process/edge.c:705
-#: modules/process/fft_filter_1d.c:299 modules/process/grain_edge.c:290
-#: modules/process/grain_filter.c:347 modules/process/grain_mark.c:372
-#: modules/process/mark_with.c:318 modules/process/polydistort.c:316
-#: modules/process/scars.c:386 modules/process/slope_dist.c:407
-#: modules/process/synth.h:513 modules/volume/volume_extract.c:424
-#: modules/volume/volume_extract.c:505 modules/volume/volume_linestat.c:422
+#: modules/process/calcoefs_view.c:567 modules/process/coerce.c:368
+#: modules/process/deposit_synth.c:642 modules/process/edge.c:705
+#: modules/process/fft_filter_1d.c:301 modules/process/grain_edge.c:277
+#: modules/process/grain_filter.c:346 modules/process/grain_mark.c:357
+#: modules/process/mark_with.c:322 modules/process/mfm_field.c:420
+#: modules/process/mfm_shift.c:216 modules/process/polydistort.c:319
+#: modules/process/psf.c:309 modules/process/scars.c:421
+#: modules/process/slope_dist.c:400 modules/process/synth.h:542
+#: modules/volume/volume_extract.c:411 modules/volume/volume_extract.c:491
+#: modules/volume/volume_linestat.c:427
msgid "I_nstant updates"
msgstr ""
@@ -7861,27 +8154,27 @@ msgstr ""
msgid "Building mesh..."
msgstr ""
-#: modules/process/calcoefs_view.c:1120 modules/tools/profile.c:1818
+#: modules/process/calcoefs_view.c:1120 modules/tools/profile.c:1867
msgid "X correction"
msgstr ""
-#: modules/process/calcoefs_view.c:1121 modules/tools/profile.c:1819
+#: modules/process/calcoefs_view.c:1121 modules/tools/profile.c:1868
msgid "Y correction"
msgstr ""
-#: modules/process/calcoefs_view.c:1122 modules/tools/profile.c:1820
+#: modules/process/calcoefs_view.c:1122 modules/tools/profile.c:1869
msgid "Z correction"
msgstr ""
-#: modules/process/calcoefs_view.c:1123 modules/tools/profile.c:1821
+#: modules/process/calcoefs_view.c:1123 modules/tools/profile.c:1870
msgid "X uncertainty"
msgstr ""
-#: modules/process/calcoefs_view.c:1124 modules/tools/profile.c:1822
+#: modules/process/calcoefs_view.c:1124 modules/tools/profile.c:1871
msgid "Y uncertainty"
msgstr ""
-#: modules/process/calcoefs_view.c:1125 modules/tools/profile.c:1823
+#: modules/process/calcoefs_view.c:1125 modules/tools/profile.c:1872
msgid "Z uncertainty"
msgstr ""
@@ -7909,78 +8202,79 @@ msgstr ""
msgid "Delaunay"
msgstr ""
-#: modules/process/calibrate.c:180
+#: modules/process/calibrate.c:172
msgid "Recalibrates scan lateral dimensions or value range."
msgstr ""
-#: modules/process/calibrate.c:194
+#: modules/process/calibrate.c:186
msgid "/_Basic Operations/_Dimensions and Units..."
msgstr "/기본 기능(B)/크기 및 단위(D)..."
-#: modules/process/calibrate.c:198 modules/volume/volume_calibrate.c:193
+#: modules/process/calibrate.c:190 modules/volume/volume_calibrate.c:193
msgid "Change physical dimensions, units or value scale"
msgstr ""
-#: modules/process/calibrate.c:357 modules/volume/volume_calibrate.c:355
+#: modules/process/calibrate.c:349 modules/volume/volume_calibrate.c:355
msgid "Recalibrated Data"
msgstr ""
-#: modules/process/calibrate.c:390
+#: modules/process/calibrate.c:382
msgid "Dimensions and Units"
msgstr "면적 및 단위"
-#: modules/process/calibrate.c:411 modules/volume/volume_calibrate.c:389
+#: modules/process/calibrate.c:405 modules/volume/volume_calibrate.c:391
msgid "New Real Dimensions"
msgstr ""
-#: modules/process/calibrate.c:417
+#: modules/process/calibrate.c:415
msgid "_Match pixel size:"
msgstr ""
-#: modules/process/calibrate.c:444 modules/volume/volume_calibrate.c:394
+#: modules/process/calibrate.c:447 modules/volume/volume_calibrate.c:397
msgid "_X range:"
msgstr ""
-#: modules/process/calibrate.c:473 modules/volume/volume_calibrate.c:421
+#: modules/process/calibrate.c:467 modules/volume/volume_calibrate.c:417
msgid "_Y range:"
msgstr ""
-#: modules/process/calibrate.c:489
+#: modules/process/calibrate.c:472
msgid "_Square samples"
msgstr ""
-#: modules/process/calibrate.c:524 modules/volume/volume_calibrate.c:521
+#: modules/process/calibrate.c:496 modules/volume/volume_calibrate.c:480
msgid "Value Range"
msgstr ""
-#: modules/process/calibrate.c:529 modules/volume/volume_calibrate.c:448
+#: modules/process/calibrate.c:502 modules/volume/volume_calibrate.c:437
msgid "_Z range:"
msgstr ""
-#: modules/process/calibrate.c:558
+#: modules/process/calibrate.c:524
msgid "Z shi_ft:"
msgstr ""
-#: modules/process/calibrate.c:573 modules/volume/volume_calibrate.c:570
+#: modules/process/calibrate.c:533 modules/volume/volume_calibrate.c:515
msgid "Calibration Coefficients"
msgstr ""
-#: modules/process/calibrate.c:580 modules/volume/volume_calibrate.c:577
+#: modules/process/calibrate.c:538 modules/volume/volume_calibrate.c:520
msgid "_X calibration factor:"
msgstr ""
-#: modules/process/calibrate.c:590 modules/volume/volume_calibrate.c:585
+#: modules/process/calibrate.c:545 modules/volume/volume_calibrate.c:527
msgid "_Y calibration factor:"
msgstr ""
-#: modules/process/calibrate.c:600 modules/volume/volume_calibrate.c:593
+#: modules/process/calibrate.c:552 modules/volume/volume_calibrate.c:534
msgid "_Z calibration factor:"
msgstr ""
-#: modules/process/calibrate.c:613 modules/process/extend.c:293
-#: modules/tools/crop.c:213
-msgid "Create new channel"
-msgstr ""
+#: modules/process/calibrate.c:567 modules/process/drift.c:389
+#: modules/process/extend.c:293 modules/tools/crop.c:213
+#, fuzzy
+msgid "Create new image"
+msgstr "새 아이템 생성"
#: modules/process/coerce.c:159
msgid "Transforms surfaces to have prescribed statistical properties."
@@ -7999,13 +8293,13 @@ msgid "Coerced"
msgstr ""
#: modules/process/coerce.c:225 modules/process/coerce.c:326
-#: modules/process/fbm_synth.c:475 modules/process/lno_synth.c:256
-#: modules/process/noise_synth.c:183
+#: modules/process/fbm_synth.c:474 modules/process/lno_synth.c:254
+#: modules/process/noise_synth.c:181
msgid "distribution|Uniform"
msgstr ""
-#: modules/process/coerce.c:226 modules/process/fbm_synth.c:476
-#: modules/process/lno_synth.c:246 modules/process/noise_synth.c:173
+#: modules/process/coerce.c:226 modules/process/fbm_synth.c:475
+#: modules/process/lno_synth.c:244 modules/process/noise_synth.c:171
msgid "distribution|Gaussian"
msgstr ""
@@ -8059,12 +8353,12 @@ msgid "Number of maxima"
msgstr ""
#: modules/process/col_synth.c:173 modules/tools/linestats.c:178
-#: modules/volume/volume_linestat.c:154
+#: modules/volume/volume_linestat.c:156
msgid "Skew"
msgstr ""
#: modules/process/col_synth.c:174 modules/tools/linestats.c:179
-#: modules/tools/roughness.c:386 modules/volume/volume_linestat.c:155
+#: modules/tools/roughness.c:387 modules/volume/volume_linestat.c:157
msgid "Kurtosis"
msgstr ""
@@ -8077,7 +8371,7 @@ msgid "Generates columnar surfaces by a simple growth algorithm."
msgstr ""
#: modules/process/col_synth.c:208
-msgid "/S_ynthetic/_Columnar..."
+msgid "/S_ynthetic/_Deposition/_Columnar..."
msgstr ""
#: modules/process/col_synth.c:212
@@ -8100,7 +8394,7 @@ msgstr ""
msgid "Inclination"
msgstr ""
-#: modules/process/col_synth.c:509 modules/process/crosscor.c:1063
+#: modules/process/col_synth.c:509 modules/process/crosscor.c:1036
msgid "Direction"
msgstr ""
@@ -8108,15 +8402,15 @@ msgstr ""
msgid "Relaxation type:"
msgstr ""
-#: modules/process/col_synth.c:528
+#: modules/process/col_synth.c:529
msgid "_Melting:"
msgstr ""
-#: modules/process/col_synth.c:612
+#: modules/process/col_synth.c:613
msgid "Weak"
msgstr ""
-#: modules/process/col_synth.c:613
+#: modules/process/col_synth.c:614
msgid "Strong"
msgstr ""
@@ -8148,8 +8442,8 @@ msgstr ""
msgid "Convolution Filter"
msgstr ""
-#: modules/process/convolution_filter.c:269 modules/tools/filter.c:170
-#: modules/tools/filter.c:274
+#: modules/process/convolution_filter.c:269 modules/tools/filter.c:171
+#: modules/tools/filter.c:275
msgid "Filter"
msgstr ""
@@ -8177,107 +8471,116 @@ msgstr ""
msgid "VSym"
msgstr ""
-#: modules/process/correct_affine.c:231
+#: modules/process/correct_affine.c:220
msgid ""
"Corrects affine distortion of images by matching image Bravais lattice to "
"the true one."
msgstr ""
-#: modules/process/correct_affine.c:246
+#: modules/process/correct_affine.c:235
msgid "/_Distortion/_Affine..."
msgstr ""
-#: modules/process/correct_affine.c:250
+#: modules/process/correct_affine.c:239
msgid "Correct affine distortion"
msgstr ""
-#: modules/process/correct_affine.c:298
+#: modules/process/correct_affine.c:309 modules/process/correct_affine.c:634
+msgid "Corrected"
+msgstr ""
+
+#: modules/process/correct_affine.c:343
msgid "Affine Correction"
msgstr ""
-#: modules/process/correct_affine.c:351 modules/process/fft_filter_2d.c:530
+#: modules/process/correct_affine.c:349 modules/process/measure_lattice.c:249
+msgid "_Refine"
+msgstr ""
+
+#: modules/process/correct_affine.c:399 modules/process/fft_filter_2d.c:530
msgid "Preview Options"
msgstr ""
-#: modules/process/correct_affine.c:356 modules/process/fft_filter_2d.c:535
-#: modules/process/measure_lattice.c:321
+#: modules/process/correct_affine.c:404 modules/process/fft_filter_2d.c:535
+#: modules/process/measure_lattice.c:311
msgid "Display:"
msgstr ""
-#: modules/process/correct_affine.c:364 modules/process/measure_lattice.c:329
+#: modules/process/correct_affine.c:412 modules/process/measure_lattice.c:319
#: modules/tools/grainremover.c:109
msgid "_Data"
msgstr ""
-#: modules/process/correct_affine.c:365
+#: modules/process/correct_affine.c:413
msgid "2D _ACF"
msgstr ""
-#: modules/process/correct_affine.c:366 modules/process/drift.c:365
+#: modules/process/correct_affine.c:414 modules/process/drift.c:364
msgid "Correc_ted data"
msgstr ""
-#: modules/process/correct_affine.c:377
+#: modules/process/correct_affine.c:425
msgid "ACF zoom:"
msgstr ""
-#: modules/process/correct_affine.c:394 modules/process/measure_lattice.c:372
+#: modules/process/correct_affine.c:442 modules/process/measure_lattice.c:346
+#, fuzzy
+msgid "Interpolate _horizontal ACF"
+msgstr "교차점"
+
+#: modules/process/correct_affine.c:452 modules/process/measure_lattice.c:372
msgid "Lattice Vectors"
msgstr ""
#. TRANSLATORS: Correct is an adjective here.
-#: modules/process/correct_affine.c:419
+#: modules/process/correct_affine.c:469
msgid "Correct Lattice"
msgstr ""
-#: modules/process/correct_affine.c:423
+#: modules/process/correct_affine.c:473
msgid "_Lattice type:"
msgstr ""
-#: modules/process/correct_affine.c:430
+#: modules/process/correct_affine.c:480
msgid "User defined"
msgstr ""
-#: modules/process/correct_affine.c:445
+#: modules/process/correct_affine.c:495
msgid "_Different lengths"
msgstr ""
-#: modules/process/correct_affine.c:474
+#: modules/process/correct_affine.c:524
msgid "Image for _ACF:"
msgstr ""
-#: modules/process/correct_affine.c:501
+#: modules/process/correct_affine.c:551
msgid "_Scaling:"
msgstr ""
-#: modules/process/correct_affine.c:508
+#: modules/process/correct_affine.c:558
msgid "Exactly as specified"
msgstr ""
-#: modules/process/correct_affine.c:509
+#: modules/process/correct_affine.c:560
msgid "Preserve area"
msgstr ""
-#: modules/process/correct_affine.c:510
+#: modules/process/correct_affine.c:562
msgid "Preserve X scale"
msgstr ""
-#: modules/process/correct_affine.c:561
-msgid "Corrected"
+#: modules/process/correct_affine.c:571 modules/process/drift.c:379
+msgid "_Apply to all compatible images"
msgstr ""
-#: modules/process/correct_affine.c:617 modules/process/measure_lattice.c:489
+#: modules/process/correct_affine.c:693 modules/process/measure_lattice.c:482
msgid "length"
msgstr ""
-#: modules/process/correct_affine.c:624 modules/process/measure_lattice.c:496
+#: modules/process/correct_affine.c:700 modules/process/measure_lattice.c:489
msgid "angle"
msgstr ""
-#: modules/process/correct_affine.c:717
-msgid "Re_fine"
-msgstr ""
-
#: modules/process/crosscor.c:157
msgid "Calculates cross-correlation of two data fields."
msgstr ""
@@ -8302,200 +8605,202 @@ msgstr ""
msgid "Search size"
msgstr ""
-#: modules/process/crosscor.c:272
-msgid "Global offset of 2nd channel"
+#: modules/process/crosscor.c:267
+msgid "_Guess"
msgstr ""
-#: modules/process/crosscor.c:277
-msgid "_Guess"
+#: modules/process/crosscor.c:268
+msgid "Global offset of 2nd channel"
msgstr ""
-#: modules/process/crosscor.c:311
+#: modules/process/crosscor.c:292
msgid "Window size"
msgstr ""
-#: modules/process/crosscor.c:319
+#: modules/process/crosscor.c:300
msgid "W_idth:"
msgstr ""
-#: modules/process/crosscor.c:329
+#: modules/process/crosscor.c:308
msgid "Hei_ght:"
msgstr ""
-#: modules/process/crosscor.c:342 modules/process/fft.c:405
+#: modules/process/crosscor.c:319 modules/process/fft.c:403
#: modules/process/psdf_logphi.c:268
msgid "_Windowing type:"
msgstr ""
-#: modules/process/crosscor.c:350
+#: modules/process/crosscor.c:327
msgid "All"
msgstr ""
-#: modules/process/crosscor.c:351
+#: modules/process/crosscor.c:328
msgid "Absolute"
msgstr ""
-#: modules/process/crosscor.c:352
+#: modules/process/crosscor.c:329
msgid "X Distance"
msgstr ""
-#: modules/process/crosscor.c:353
+#: modules/process/crosscor.c:330
msgid "Y Distance"
msgstr ""
-#: modules/process/crosscor.c:355 modules/process/crosscor.c:1077
+#: modules/process/crosscor.c:332 modules/process/crosscor.c:1050
msgid "Score"
msgstr ""
-#: modules/process/crosscor.c:357 modules/process/fft.c:395
-#: modules/process/fit-shape.c:688 modules/process/maskcor.c:176
+#: modules/process/crosscor.c:334 modules/process/fft.c:393
+#: modules/process/fit-shape.c:699 modules/process/maskcor.c:177
+#: modules/process/mfm_current.c:455 modules/process/mfm_field.c:373
+#: modules/process/mfm_parallel.c:466
msgid "Output _type:"
msgstr ""
-#: modules/process/crosscor.c:363
+#: modules/process/crosscor.c:340
msgid "Add _low score results mask"
msgstr ""
-#: modules/process/crosscor.c:374 modules/process/grain_wshed.c:223
-#: modules/process/maskcor.c:188
+#: modules/process/crosscor.c:351 modules/process/grain_wshed.c:225
+#: modules/process/maskcor.c:191
msgid "T_hreshold:"
msgstr ""
-#: modules/process/crosscor.c:381
+#: modules/process/crosscor.c:359
msgid "Multichannel cross-corelation"
msgstr ""
-#: modules/process/crosscor.c:400
+#: modules/process/crosscor.c:378
msgid "Second _source data:"
msgstr ""
-#: modules/process/crosscor.c:417
+#: modules/process/crosscor.c:394
msgid "Correlate with:"
msgstr ""
-#: modules/process/crosscor.c:424
+#: modules/process/crosscor.c:402
#, fuzzy
msgid "Postprocess:"
msgstr "데이터 프로세스"
-#: modules/process/crosscor.c:431
-msgid "Apply Ga_ussian filter of width: "
+#: modules/process/crosscor.c:411
+msgid "Apply Ga_ussian filter of width:"
msgstr ""
-#: modules/process/crosscor.c:451
+#: modules/process/crosscor.c:424
msgid "Extend results to borders"
msgstr ""
-#: modules/process/crosscor.c:461
+#: modules/process/crosscor.c:433
msgid "Create corrected data from 2nd channel"
msgstr ""
-#: modules/process/crosscor.c:860
+#: modules/process/crosscor.c:833
msgid "Correlating first set..."
msgstr ""
-#: modules/process/crosscor.c:892
+#: modules/process/crosscor.c:865
msgid "Correlating second set..."
msgstr ""
-#: modules/process/crosscor.c:999
+#: modules/process/crosscor.c:972
#, fuzzy
msgid "Corrected 2nd channel"
msgstr "채널"
-#: modules/process/crosscor.c:1023
+#: modules/process/crosscor.c:996
msgid "X difference"
msgstr ""
-#: modules/process/crosscor.c:1037
+#: modules/process/crosscor.c:1010
msgid "Y difference"
msgstr ""
-#: modules/process/crosscor.c:1050
+#: modules/process/crosscor.c:1023
msgid "Absolute difference"
msgstr ""
-#: modules/process/curvature.c:131
+#: modules/process/curvature.c:130
msgid "Center value"
msgstr "중간 값"
-#: modules/process/curvature.c:132
+#: modules/process/curvature.c:131
msgid "Curvature radius 1"
msgstr "곡률 반경 1"
-#: modules/process/curvature.c:133
+#: modules/process/curvature.c:132
msgid "Curvature radius 2"
msgstr "곡률 반경 2"
-#: modules/process/curvature.c:134
+#: modules/process/curvature.c:133
msgid "Direction 1"
msgstr "방향 1"
-#: modules/process/curvature.c:135
+#: modules/process/curvature.c:134
msgid "Direction 2"
msgstr "방향 2"
-#: modules/process/curvature.c:163
+#: modules/process/curvature.c:162
msgid "Calculates overall curvature."
msgstr "전체 곡률 계산하기."
-#: modules/process/curvature.c:177
+#: modules/process/curvature.c:176
msgid "/_Level/_Curvature..."
msgstr "/평평하게 만들기(L)/굴곡면(C)..."
-#: modules/process/curvature.c:181
+#: modules/process/curvature.c:180
msgid "Calculate overall curvature"
msgstr "전체 곡률 계산하기"
-#: modules/process/curvature.c:211 modules/process/facet-level.c:118
+#: modules/process/curvature.c:210 modules/process/facet-level.c:118
#: modules/process/semsim.c:165
#, c-format
msgid "%s: Lateral dimensions and value must be the same physical quantity."
msgstr ""
-#: modules/process/curvature.c:445
+#: modules/process/curvature.c:447
msgid "Curvature Sections"
msgstr ""
-#: modules/process/curvature.c:653
+#: modules/process/curvature.c:655
msgid "Output Type"
msgstr "출력 종류"
-#: modules/process/curvature.c:660
+#: modules/process/curvature.c:662
msgid "_Set selection"
msgstr ""
-#: modules/process/curvature.c:670
+#: modules/process/curvature.c:672
msgid "_Plot graph"
msgstr "그래프 그리기(P)"
-#: modules/process/curvature.c:685 modules/process/drift.c:337
-#: modules/process/fft_profile.c:310 modules/process/fractal.c:328
-#: modules/process/grain_cross.c:253 modules/process/linematch.c:885
-#: modules/process/slope_dist.c:349 modules/tools/linestats.c:418
-#: modules/tools/profile.c:573 modules/tools/roughness.c:872
-#: modules/tools/sfunctions.c:486 modules/tools/spectro.c:382
-#: modules/volume/volume_slice.c:398
-#, fuzzy
-msgid "Target _graph:"
-msgstr "그래프 그리기(G)"
-
-#: modules/process/curvature.c:691 modules/process/drift.c:343
-#: modules/process/fft_profile.c:316 modules/process/fractal.c:334
-#: modules/process/grain_cross.c:259 modules/process/linematch.c:892
-#: modules/process/slope_dist.c:355 modules/tools/linestats.c:424
-#: modules/tools/profile.c:579 modules/tools/roughness.c:878
-#: modules/tools/sfunctions.c:492 modules/tools/spectro.c:388
-#: modules/volume/volume_slice.c:406
+#: modules/process/curvature.c:684 modules/process/drift.c:340
+#: modules/process/fft_profile.c:300 modules/process/fractal.c:308
+#: modules/process/grain_cross.c:260 modules/process/linematch.c:855
+#: modules/process/slope_dist.c:347 modules/tools/linestats.c:424
+#: modules/tools/profile.c:559 modules/tools/roughness.c:886
+#: modules/tools/sfunctions.c:488 modules/tools/spectro.c:391
+#: modules/volume/volume_slice.c:408
#, fuzzy
msgid "New graph"
msgstr "그래프 자르기"
-#: modules/process/curvature.c:951
+#: modules/process/curvature.c:689 modules/process/drift.c:345
+#: modules/process/fft_profile.c:306 modules/process/fractal.c:313
+#: modules/process/grain_cross.c:254 modules/process/linematch.c:860
+#: modules/process/slope_dist.c:352 modules/tools/linestats.c:418
+#: modules/tools/profile.c:563 modules/tools/roughness.c:890
+#: modules/tools/sfunctions.c:492 modules/tools/spectro.c:385
+#: modules/volume/volume_slice.c:400
+#, fuzzy
+msgid "Target _graph:"
+msgstr "그래프 그리기(G)"
+
+#: modules/process/curvature.c:949
msgid "Axes are outside the image."
msgstr ""
-#: modules/process/curvature.c:1018
+#: modules/process/curvature.c:1016
msgid "Save Curvature"
msgstr "곡률 저장"
@@ -8519,8 +8824,8 @@ msgstr ""
msgid "2D CWT"
msgstr ""
-#: modules/process/cwt.c:158 modules/process/dwt.c:185
-#: modules/process/dwtanisotropy.c:209
+#: modules/process/cwt.c:159 modules/process/dwt.c:185
+#: modules/process/dwtanisotropy.c:212
msgid "_Wavelet type:"
msgstr ""
@@ -8529,87 +8834,83 @@ msgid "Generates particles using simple dynamical model"
msgstr ""
#: modules/process/deposit_synth.c:184
-msgid "/S_ynthetic/_Particles..."
+msgid "/S_ynthetic/_Deposition/_Particles..."
msgstr ""
#: modules/process/deposit_synth.c:188
msgid "Generate particles using dynamical model"
msgstr ""
-#: modules/process/deposit_synth.c:288 modules/process/deposit_synth.c:867
+#: modules/process/deposit_synth.c:288 modules/process/deposit_synth.c:866
#, c-format
msgid ""
"Not all the particles could be deposited (%u),\n"
"try more revise steps."
msgstr ""
-#: modules/process/deposit_synth.c:347
+#: modules/process/deposit_synth.c:348
msgid "Particle Generation"
msgstr ""
-#: modules/process/deposit_synth.c:427
+#: modules/process/deposit_synth.c:431
msgid "Particle r_adius:"
msgstr ""
-#: modules/process/deposit_synth.c:438
+#: modules/process/deposit_synth.c:443
msgid "Distribution _width:"
msgstr ""
-#: modules/process/deposit_synth.c:449
-msgid "Surface _coverage:"
-msgstr ""
-
-#: modules/process/deposit_synth.c:458
+#: modules/process/deposit_synth.c:462
msgid "_Relax steps:"
msgstr ""
-#: modules/process/deposit_synth.c:659 modules/process/synth.h:548
+#: modules/process/deposit_synth.c:660 modules/process/synth.h:577
msgid "R_andom seed:"
msgstr ""
-#: modules/process/deposit_synth.c:665 modules/process/synth.h:554
+#: modules/process/deposit_synth.c:666 modules/process/synth.h:583
msgid "seed|_New"
msgstr ""
-#: modules/process/deposit_synth.c:676
+#: modules/process/deposit_synth.c:677
msgid "Randomize"
msgstr ""
-#: modules/process/deposit_synth.c:860 modules/process/domain_synth.c:919
+#: modules/process/deposit_synth.c:859 modules/process/domain_synth.c:919
msgid "Running computation..."
msgstr ""
-#: modules/process/deposit_synth.c:865
+#: modules/process/deposit_synth.c:864
#, c-format
msgid "%d particles were deposited"
msgstr ""
-#: modules/process/deposit_synth.c:1093
+#: modules/process/deposit_synth.c:1092
msgid "Initial particle set..."
msgstr ""
-#: modules/process/deposit_synth.c:1252
+#: modules/process/deposit_synth.c:1251
msgid "Running revise..."
msgstr ""
-#: modules/process/deposit_synth.c:1380
+#: modules/process/deposit_synth.c:1379
msgid "Error: too many particles."
msgstr ""
-#: modules/process/deposit_synth.c:1382
+#: modules/process/deposit_synth.c:1381
msgid "Error: no particles."
msgstr ""
-#: modules/process/deposit_synth.c:1384
+#: modules/process/deposit_synth.c:1383
msgid "Error: particles too large."
msgstr ""
-#: modules/process/deposit_synth.c:1386
+#: modules/process/deposit_synth.c:1385
msgid "Error: particles too small."
msgstr ""
#: modules/process/diff_synth.c:197 modules/tools/linestats.c:173
-#: modules/volume/volume_linestat.c:149
+#: modules/volume/volume_linestat.c:151
msgid "Variation"
msgstr ""
@@ -8622,7 +8923,7 @@ msgid "Generates surfaces by diffusion limited aggregation."
msgstr ""
#: modules/process/diff_synth.c:228
-msgid "/S_ynthetic/_Diffusion..."
+msgid "/S_ynthetic/_Deposition/_Diffusion..."
msgstr ""
#: modules/process/diff_synth.c:232
@@ -8637,44 +8938,44 @@ msgstr ""
msgid "_Flux:"
msgstr ""
-#: modules/process/diff_synth.c:522
+#: modules/process/diff_synth.c:521
msgid "Probabilities"
msgstr ""
-#: modules/process/diff_synth.c:530
+#: modules/process/diff_synth.c:529
msgid "_Sticking:"
msgstr ""
-#: modules/process/diff_synth.c:539
+#: modules/process/diff_synth.c:538
msgid "_Activation:"
msgstr ""
-#: modules/process/diff_synth.c:548
+#: modules/process/diff_synth.c:547
msgid "Passing Sch_woebel:"
msgstr ""
-#: modules/process/dimensions.h:457
+#: modules/process/dimensions.h:439
msgid "S_quare image"
msgstr ""
-#: modules/process/dimensions.h:489
+#: modules/process/dimensions.h:473
msgid "_Dimension units:"
msgstr ""
-#: modules/process/dimensions.h:502
-msgid "Current Channel"
+#: modules/process/dimensions.h:488
+msgid "Current Image"
msgstr ""
-#: modules/process/dimensions.h:506
-msgid "_Take Dimensions from Current Channel"
+#: modules/process/dimensions.h:492
+msgid "_Take Dimensions from Current Image"
msgstr ""
-#: modules/process/dimensions.h:514
-msgid "_Replace the current channel"
+#: modules/process/dimensions.h:501
+msgid "_Replace the current image"
msgstr ""
-#: modules/process/dimensions.h:523
-msgid "_Start from the current channel"
+#: modules/process/dimensions.h:510
+msgid "_Start from the current image"
msgstr ""
#: modules/process/domain_synth.c:158
@@ -8734,13 +9035,13 @@ msgid "_Monte Carlo time step:"
msgstr ""
#: modules/process/domain_synth.c:504 modules/process/fft_filter_2d.c:586
-#: modules/volume/volume_slice.c:364
+#: modules/volume/volume_slice.c:366
msgid "Output Options"
msgstr ""
#: modules/process/domain_synth.c:523 modules/process/fft_filter_2d.c:591
-#: modules/process/mask_edt.c:377 modules/process/slope_dist.c:323
-#: modules/volume/volume_linestat.c:432 modules/volume/volume_slice.c:384
+#: modules/process/mask_edt.c:211 modules/process/slope_dist.c:323
+#: modules/volume/volume_linestat.c:437 modules/volume/volume_slice.c:386
msgid "Output type:"
msgstr ""
@@ -8769,57 +9070,49 @@ msgstr ""
msgid "rows"
msgstr ""
-#: modules/process/drift.c:304
+#: modules/process/drift.c:305
msgid "Correct _data"
msgstr ""
-#: modules/process/drift.c:314
+#: modules/process/drift.c:315
msgid "_Exclude linear skew"
msgstr ""
-#: modules/process/drift.c:324
+#: modules/process/drift.c:325
msgid "Plot drift _graph"
msgstr ""
-#: modules/process/drift.c:356 modules/process/fit-shape.c:693
-#: modules/process/neural.c:548 modules/process/polydistort.c:275
+#: modules/process/drift.c:355 modules/process/fit-shape.c:705
+#: modules/process/neural.c:552 modules/process/polydistort.c:278
msgid "Preview:"
msgstr ""
-#: modules/process/drift.c:366
+#: modules/process/drift.c:365
msgid "Drift _lines"
msgstr ""
-#: modules/process/drift.c:374 modules/process/facet_analysis.c:407
-#: modules/process/grain_edge.c:285 modules/process/grain_filter.c:357
-#: modules/process/grain_mark.c:367 modules/process/grain_wshed.c:267
-#: modules/process/mark_disconn.c:310 modules/process/scars.c:381
+#: modules/process/drift.c:373 modules/process/facet_analysis.c:390
+#: modules/process/grain_edge.c:272 modules/process/grain_filter.c:356
+#: modules/process/grain_mark.c:341 modules/process/grain_wshed.c:271
+#: modules/process/mark_disconn.c:298 modules/process/scars.c:405
#: modules/process/wpour_mark.c:369
msgid "_Mask color:"
msgstr ""
-#: modules/process/drift.c:379
-msgid "Distribute"
-msgstr ""
-
-#: modules/process/drift.c:388
-msgid "Replace"
-msgstr ""
-
-#: modules/process/drift.c:569
+#: modules/process/drift.c:570
msgid "Drift-corrected"
msgstr ""
-#: modules/process/drift.c:613
+#: modules/process/drift.c:614
msgid "Drift"
msgstr ""
-#: modules/process/drift.c:614 modules/xyz/xyz_drift.c:392
+#: modules/process/drift.c:615 modules/xyz/xyz_drift.c:392
#: modules/xyz/xyz_drift.c:411 modules/xyz/xyz_drift.c:430
msgid "drift"
msgstr ""
-#: modules/process/drift.c:620 modules/xyz/xyz_drift.c:402
+#: modules/process/drift.c:621 modules/xyz/xyz_drift.c:402
msgid "x-axis drift"
msgstr ""
@@ -8875,11 +9168,11 @@ msgstr ""
msgid "2D DWT Anisotropy"
msgstr ""
-#: modules/process/dwtanisotropy.c:214
+#: modules/process/dwtanisotropy.c:218
msgid "X/Y ratio threshold:"
msgstr ""
-#: modules/process/dwtanisotropy.c:222
+#: modules/process/dwtanisotropy.c:226
msgid "Low level exclude limit:"
msgstr ""
@@ -9005,7 +9298,7 @@ msgstr ""
msgid "_Gaussian FWHM:"
msgstr ""
-#: modules/process/edge.c:681 modules/process/mark_disconn.c:271
+#: modules/process/edge.c:681 modules/process/mark_disconn.c:272
msgid "_Threshold:"
msgstr ""
@@ -9073,11 +9366,11 @@ msgstr ""
msgid "Entropy deficit:"
msgstr ""
-#: modules/process/entropy.c:567
+#: modules/process/entropy.c:568
msgid "Entropy at scales"
msgstr ""
-#: modules/process/entropy.c:586
+#: modules/process/entropy.c:587
#, fuzzy
msgid "Best estimate"
msgstr "팁 추정 효과 가리기"
@@ -9126,23 +9419,23 @@ msgstr ""
msgid "Extend _symetrically"
msgstr ""
-#: modules/process/extend.c:268 modules/process/polydistort.c:256
-#: modules/xyz/xyz_raster.c:658
+#: modules/process/extend.c:268 modules/process/polydistort.c:259
+#: modules/xyz/xyz_raster.c:627
msgid "exterior|Border"
msgstr ""
-#: modules/process/extend.c:270 modules/process/polydistort.c:258
-#: modules/xyz/xyz_raster.c:660
+#: modules/process/extend.c:270 modules/process/polydistort.c:261
+#: modules/xyz/xyz_raster.c:629
msgid "exterior|Mirror"
msgstr ""
-#: modules/process/extend.c:272 modules/process/polydistort.c:260
-#: modules/xyz/xyz_raster.c:662
+#: modules/process/extend.c:272 modules/process/polydistort.c:263
+#: modules/xyz/xyz_raster.c:631
msgid "exterior|Periodic"
msgstr ""
-#: modules/process/extend.c:275 modules/process/polydistort.c:263
-#: modules/xyz/xyz_raster.c:650
+#: modules/process/extend.c:275 modules/process/polydistort.c:266
+#: modules/xyz/xyz_raster.c:619
msgid "_Exterior type:"
msgstr ""
@@ -9176,11 +9469,11 @@ msgstr "클러스터 개수"
msgid "There is no path selection."
msgstr ""
-#: modules/process/extract_path.c:189 modules/volume/volume_extract.c:390
+#: modules/process/extract_path.c:189 modules/volume/volume_extract.c:383
msgid "X position"
msgstr "X 위치"
-#: modules/process/extract_path.c:193 modules/volume/volume_extract.c:397
+#: modules/process/extract_path.c:193 modules/volume/volume_extract.c:389
msgid "Y position"
msgstr "Y 위치"
@@ -9193,7 +9486,7 @@ msgid "Y tangent"
msgstr ""
#: modules/process/extract_path.c:392 modules/process/extract_path.c:404
-#: modules/process/pat_synth.c:1432 modules/tools/distance.c:146
+#: modules/process/pat_synth.c:1433 modules/tools/distance.c:146
msgid "Distance"
msgstr ""
@@ -9236,47 +9529,36 @@ msgstr ""
msgid "Mark areas by 2D slope"
msgstr "2D 기울기를 이용 영역 표시하기"
-#: modules/process/facet_analysis.c:266
+#: modules/process/facet_analysis.c:270
msgid "Mark Facets"
msgstr ""
-#: modules/process/facet_analysis.c:269
+#: modules/process/facet_analysis.c:273
msgid "verb|_Mark"
msgstr ""
#. TRANSLATORS: The direction or line orthogonal to something.
-#: modules/process/facet_analysis.c:325
+#: modules/process/facet_analysis.c:329
msgid "Normal"
msgstr ""
-#: modules/process/facet_analysis.c:333
+#: modules/process/facet_analysis.c:337
msgid "_Find Maximum"
msgstr ""
-#: modules/process/facet_analysis.c:341
+#: modules/process/facet_analysis.c:345
msgid "Mean Normal"
msgstr ""
-#: modules/process/facet_analysis.c:350
+#: modules/process/facet_analysis.c:362
msgid "Facet plane size:"
msgstr ""
-#: modules/process/facet_analysis.c:375
+#: modules/process/facet_analysis.c:370
msgid "_Tolerance:"
msgstr ""
-#: modules/process/facet_analysis.c:384 modules/process/grain_edge.c:262
-#: modules/process/grain_mark.c:344 modules/process/mark_disconn.c:286
-msgid "Com_bine with existing mask"
-msgstr ""
-
-#: modules/process/facet_analysis.c:398 modules/process/grain_edge.c:276
-#: modules/process/grain_mark.c:358 modules/process/mark_disconn.c:301
-#: modules/process/mark_with.c:230 modules/process/mask_morph.c:210
-msgid "Operation:"
-msgstr ""
-
-#: modules/process/facet_analysis.c:415
+#: modules/process/facet_analysis.c:398
msgid ""
"Warning: Lateral and value units differ. Angles are not physically "
"meaningful."
@@ -9306,8 +9588,8 @@ msgstr ""
msgid "_Stationarity scale:"
msgstr ""
-#: modules/process/fbm_synth.c:390 modules/process/lno_synth.c:509
-#: modules/process/noise_synth.c:409
+#: modules/process/fbm_synth.c:390 modules/process/lno_synth.c:507
+#: modules/process/noise_synth.c:407
msgid "_Distribution:"
msgstr ""
@@ -9315,17 +9597,17 @@ msgstr ""
msgid "Po_wer:"
msgstr ""
-#: modules/process/fbm_synth.c:408 modules/process/fft_synth.c:414
-#: modules/process/lno_synth.c:533 modules/process/noise_synth.c:433
+#: modules/process/fbm_synth.c:407 modules/process/fft_synth.c:414
+#: modules/process/lno_synth.c:531 modules/process/noise_synth.c:431
msgid "_RMS:"
msgstr ""
-#: modules/process/fbm_synth.c:477 modules/process/lno_synth.c:251
-#: modules/process/noise_synth.c:178
+#: modules/process/fbm_synth.c:476 modules/process/lno_synth.c:249
+#: modules/process/noise_synth.c:176
msgid "distribution|Exponential"
msgstr ""
-#: modules/process/fbm_synth.c:478
+#: modules/process/fbm_synth.c:477
#, fuzzy
msgid "distribution|Power"
msgstr "높이 분포"
@@ -9378,7 +9660,7 @@ msgstr ""
msgid "Modulus"
msgstr ""
-#: modules/process/fft.c:327 modules/process/wave_synth.c:583
+#: modules/process/fft.c:327 modules/process/wave_synth.c:618
msgid "Phase"
msgstr ""
@@ -9394,63 +9676,63 @@ msgstr ""
msgid "I_maginary part:"
msgstr ""
-#: modules/process/fft.c:382
+#: modules/process/fft.c:380
msgid "_Inverse transform"
msgstr ""
-#: modules/process/fft.c:411
+#: modules/process/fft.c:409
msgid "Subtract mean _value beforehand"
msgstr ""
-#: modules/process/fft.c:422
+#: modules/process/fft.c:420
msgid "_Preserve RMS"
msgstr ""
-#: modules/process/fft_filter_1d.c:117
+#: modules/process/fft_filter_1d.c:118
msgid "FFT filtering"
msgstr "FFT 필터링"
-#: modules/process/fft_filter_1d.c:131
+#: modules/process/fft_filter_1d.c:132
msgid "/_Correct Data/1D _FFT Filtering..."
msgstr "/데이터 교정(C)/1D FFT 필터링(F)..."
-#: modules/process/fft_filter_1d.c:135
+#: modules/process/fft_filter_1d.c:136
msgid "1D FFT Filtering"
msgstr "1D FFT 필터링"
-#: modules/process/fft_filter_1d.c:165 modules/process/wpour_mark.c:391
+#: modules/process/fft_filter_1d.c:166 modules/process/wpour_mark.c:391
msgid "Marked"
msgstr "표시된"
-#: modules/process/fft_filter_1d.c:166
+#: modules/process/fft_filter_1d.c:167
msgid "Unmarked"
msgstr "표시 안 된"
-#: modules/process/fft_filter_1d.c:169
+#: modules/process/fft_filter_1d.c:170
msgid "Null"
msgstr "무효"
-#: modules/process/fft_filter_1d.c:170
+#: modules/process/fft_filter_1d.c:171
msgid "Suppress"
msgstr ""
-#: modules/process/fft_filter_1d.c:180
+#: modules/process/fft_filter_1d.c:181
msgid "1D FFT filter"
msgstr "1D FFT 필터"
-#: modules/process/fft_filter_1d.c:269 modules/process/linematch.c:861
+#: modules/process/fft_filter_1d.c:271 modules/process/linematch.c:828
msgid "_Direction:"
msgstr "방향(D):"
-#: modules/process/fft_filter_1d.c:277
+#: modules/process/fft_filter_1d.c:279
msgid "_Suppress type:"
msgstr "제거 방식(S):"
-#: modules/process/fft_filter_1d.c:285
+#: modules/process/fft_filter_1d.c:287
msgid "_Filter type:"
msgstr "필터 종류(F):"
-#: modules/process/fft_filter_1d.c:513
+#: modules/process/fft_filter_1d.c:515
msgid "1D FFT Filtered Data"
msgstr "1D FFT 필터링된 데이터"
@@ -9470,9 +9752,10 @@ msgstr "이차원 FFT 필터링"
msgid "Filtered Data"
msgstr "필터링된 데이터"
-#: modules/process/fft_filter_2d.c:305 modules/process/fit-shape.c:594
-#: modules/process/fit-shape.c:643 modules/process/fit-shape.c:658
-#: modules/process/fit-shape.c:662 modules/process/neural.c:560
+#: modules/process/fft_filter_2d.c:305 modules/process/fit-shape.c:604
+#: modules/process/fit-shape.c:653 modules/process/fit-shape.c:668
+#: modules/process/fit-shape.c:672 modules/process/neural.c:564
+#: modules/process/psf.c:232
msgid "Difference"
msgstr "차이"
@@ -9529,7 +9812,7 @@ msgstr "필터 마스크"
msgid "_Undo"
msgstr "실행 취소(U)"
-#: modules/process/fft_filter_2d.c:507 modules/tools/maskedit.c:556
+#: modules/process/fft_filter_2d.c:507 modules/tools/maskedit.c:562
msgid "_Fill"
msgstr "채우기(F)"
@@ -9537,7 +9820,7 @@ msgstr "채우기(F)"
msgid "_Snap to origin"
msgstr "원점에 맞추기(S)"
-#: modules/process/fft_filter_2d.c:565 modules/process/measure_lattice.c:339
+#: modules/process/fft_filter_2d.c:565 modules/process/measure_lattice.c:329
msgid "Zoom:"
msgstr "확대:"
@@ -9573,37 +9856,38 @@ msgstr ""
msgid "Force shapes to center around the origin"
msgstr ""
-#: modules/process/fft_profile.c:125
+#: modules/process/fft_profile.c:124
msgid ""
"Reads radial sections of two-dimensional power spectrum density function."
msgstr ""
-#: modules/process/fft_profile.c:140
+#: modules/process/fft_profile.c:139
msgid "/_Statistics/_PSDF Section..."
msgstr ""
-#: modules/process/fft_profile.c:144
+#: modules/process/fft_profile.c:143
msgid "Read radial PSDF sections"
msgstr ""
-#: modules/process/fft_profile.c:190
+#: modules/process/fft_profile.c:189
msgid "Radial PSDF Section"
msgstr ""
-#: modules/process/fft_profile.c:237
+#: modules/process/fft_profile.c:236
msgid "PSDF Section"
msgstr ""
-#: modules/process/fft_profile.c:266 modules/process/grain_dist.c:336
-#: modules/tools/profile.c:517 modules/tools/sfunctions.c:443
-msgid "_Fix res.:"
-msgstr ""
+#: modules/process/fft_profile.c:266 modules/process/grain_dist.c:338
+#: modules/tools/profile.c:514 modules/tools/sfunctions.c:454
+#, fuzzy
+msgid "_Fixed resolution:"
+msgstr "정밀도(P):"
-#: modules/process/fft_profile.c:279
+#: modules/process/fft_profile.c:278
msgid "_Separate curves"
msgstr ""
-#: modules/process/fft_profile.c:496
+#: modules/process/fft_profile.c:483
#, c-format
msgid "PSDF %.0f°"
msgstr ""
@@ -9624,11 +9908,15 @@ msgstr ""
msgid "Spectral Synthesis"
msgstr ""
-#: modules/process/fft_synth.c:429
+#: modules/process/fft_synth.c:430
msgid "M_inimum frequency:"
msgstr ""
-#: modules/process/fft_synth.c:449
+#: modules/process/fft_synth.c:430 modules/process/fft_synth.c:450
+msgid "px<sup>-1</sup>"
+msgstr ""
+
+#: modules/process/fft_synth.c:450
msgid "Ma_ximum frequency:"
msgstr ""
@@ -9648,91 +9936,164 @@ msgstr ""
msgid "Enable _power multiplier"
msgstr ""
-#: modules/process/fit-shape.c:270
+#: modules/process/fibre_synth.c:256
+msgid "Semi-circle"
+msgstr ""
+
+#: modules/process/fibre_synth.c:257
+#, fuzzy
+msgid "Triangle"
+msgstr "윗쪽 삼각형"
+
+#: modules/process/fibre_synth.c:258
+msgid "Rectangle"
+msgstr ""
+
+#: modules/process/fibre_synth.c:260
+msgid "Quadratic spline"
+msgstr ""
+
+#: modules/process/fibre_synth.c:266
+msgid "Generates surfaces composed from randomly placed fibers."
+msgstr ""
+
+#: modules/process/fibre_synth.c:280
+msgid "/S_ynthetic/_Deposition/_Fibers..."
+msgstr ""
+
+#: modules/process/fibre_synth.c:284
+msgid "Generate surface of randomly placed fibers"
+msgstr ""
+
+#: modules/process/fibre_synth.c:420
+msgid "Random Fibers"
+msgstr ""
+
+#: modules/process/fibre_synth.c:494 modules/process/obj_synth.c:510
+msgid "_Shape:"
+msgstr ""
+
+#: modules/process/fibre_synth.c:513 modules/process/obj_synth.c:529
+msgid "obj."
+msgstr ""
+
+#: modules/process/fibre_synth.c:553
+msgid "Scales _with width"
+msgstr ""
+
+#: modules/process/fibre_synth.c:591 modules/process/synth.h:485
+msgid "Deformation"
+msgstr ""
+
+#: modules/process/fibre_synth.c:600 modules/process/lno_synth.c:852
+#: modules/process/lno_synth.c:1222 modules/process/mask_noisify.c:177
+msgid "Densi_ty:"
+msgstr ""
+
+#: modules/process/fibre_synth.c:607
+#, fuzzy
+msgid "_Lateral:"
+msgstr "GL 재료"
+
+#: modules/process/fibre_synth.c:614
+#, fuzzy
+msgid "Le_ngthwise:"
+msgstr "길이"
+
+#: modules/process/fibre_synth.c:819
+msgid "Along fiber:"
+msgstr ""
+
+#: modules/process/fibre_synth.c:1180
+#, fuzzy
+msgid "Generating fibers..."
+msgstr "마스킹 모드"
+
+#: modules/process/fit-shape.c:264
msgid "Fits predefined geometrical shapes to data."
msgstr ""
-#: modules/process/fit-shape.c:284
+#: modules/process/fit-shape.c:278
#, fuzzy
msgid "/_Level/_Fit Shape..."
msgstr "/평평하게 만들기(L)/구면 맞추기(F)"
-#: modules/process/fit-shape.c:288 modules/process/fit-shape.c:295
+#: modules/process/fit-shape.c:282 modules/process/fit-shape.c:289
msgid "Fit geometrical shapes"
msgstr ""
-#: modules/process/fit-shape.c:291
+#: modules/process/fit-shape.c:285
#, fuzzy
msgid "/_Fit Shape..."
msgstr "/평평하게 만들기(L)/구면 맞추기(F)"
-#: modules/process/fit-shape.c:390
+#: modules/process/fit-shape.c:389
#, fuzzy
msgid "Fit Shape"
msgstr "모양:"
-#: modules/process/fit-shape.c:395
+#: modules/process/fit-shape.c:396
msgid "verb|_Quick Fit"
msgstr ""
-#: modules/process/fit-shape.c:473 modules/process/fit-shape.c:2159
+#: modules/process/fit-shape.c:474 modules/process/fit-shape.c:2141
#, fuzzy
msgid "Derived Quantities"
msgstr "그레인 개수"
-#: modules/process/fit-shape.c:478 modules/process/fit-shape.c:2129
+#: modules/process/fit-shape.c:479 modules/process/fit-shape.c:2111
#, fuzzy
msgid "Mean square difference:"
msgstr "이미지 차이점(G)"
-#: modules/process/fit-shape.c:580 modules/process/fit-shape.c:626
-#: modules/process/fit-shape.c:657 modules/process/fit-shape.c:661
+#: modules/process/fit-shape.c:590 modules/process/fit-shape.c:636
+#: modules/process/fit-shape.c:667 modules/process/fit-shape.c:671
msgid "Fitted shape"
msgstr ""
-#: modules/process/fit-shape.c:663 modules/process/mark_disconn.c:189
-#: modules/process/scars.c:281
+#: modules/process/fit-shape.c:673 modules/process/mark_disconn.c:189
+#: modules/process/scars.c:299
msgid "Both"
msgstr "모두"
-#: modules/process/fit-shape.c:680
+#: modules/process/fit-shape.c:690 modules/process/psf-fit.c:308
#, fuzzy
msgid "_Function type:"
msgstr "기능"
-#: modules/process/fit-shape.c:708
+#: modules/process/fit-shape.c:720
msgid "Show differences with _adapted color map"
msgstr ""
-#: modules/process/fit-shape.c:720
+#: modules/process/fit-shape.c:732
msgid "Full fit is _geometric"
msgstr ""
-#: modules/process/fit-shape.c:757
+#: modules/process/fit-shape.c:769
msgid "Calculate differences for e_xcluded pixels"
msgstr ""
-#: modules/process/fit-shape.c:804
+#: modules/process/fit-shape.c:816
msgid "_Recalculate Image"
msgstr ""
-#: modules/process/fit-shape.c:811
+#: modules/process/fit-shape.c:823
msgid "Revert to _Previous Values"
msgstr ""
-#: modules/process/fit-shape.c:1850
+#: modules/process/fit-shape.c:1864
msgid "Parameter estimation failed"
msgstr ""
-#: modules/process/fit-shape.c:1853
+#: modules/process/fit-shape.c:1867
msgid "Fit failed"
msgstr ""
-#: modules/process/fit-shape.c:1855
+#: modules/process/fit-shape.c:1869
msgid "Fit was interruped"
msgstr ""
-#: modules/process/fit-shape.c:2115
+#: modules/process/fit-shape.c:2097
msgid "(fixed)"
msgstr ""
@@ -9754,88 +10115,84 @@ msgstr ""
msgid "Polynomial leveling..."
msgstr "다항식 계수"
-#: modules/process/fraccor.c:38
+#: modules/process/fraccor.c:39
msgid "Removes data under mask using fractal interpolation."
msgstr ""
-#: modules/process/fraccor.c:52
+#: modules/process/fraccor.c:53
msgid "/_Correct Data/_Fractal Correction"
msgstr ""
-#: modules/process/fraccor.c:56
+#: modules/process/fraccor.c:57
msgid "Interpolate data under mask with fractal interpolation"
msgstr ""
-#: modules/process/fractal.c:134
+#: modules/process/fractal.c:130
msgid "Partitioning"
msgstr ""
-#: modules/process/fractal.c:135
+#: modules/process/fractal.c:131
msgid "Cube counting"
msgstr ""
-#: modules/process/fractal.c:136
+#: modules/process/fractal.c:132
msgid "Triangulation"
msgstr ""
-#: modules/process/fractal.c:137
+#: modules/process/fractal.c:133
msgid "Power spectrum"
msgstr ""
-#: modules/process/fractal.c:173
+#: modules/process/fractal.c:169
msgid ""
"Calculates fractal dimension using several methods (partitioning, box "
"counting, triangulation, power spectrum)."
msgstr ""
-#: modules/process/fractal.c:188
+#: modules/process/fractal.c:184
msgid "/_Statistics/_Fractal Dimension..."
msgstr ""
-#: modules/process/fractal.c:192
+#: modules/process/fractal.c:188
msgid "Calculate fractal dimension"
msgstr ""
-#: modules/process/fractal.c:227
+#: modules/process/fractal.c:223
msgid "Fractal Dimension"
msgstr ""
-#: modules/process/fractal.c:228
-msgid "Reco_mpute"
+#: modules/process/fractal.c:253
+msgid "_Method:"
msgstr ""
#: modules/process/fractal.c:269
-msgid "_Method:"
+msgid "Fit Area"
msgstr ""
-#: modules/process/fractal.c:290
-msgid "Fit Area"
+#: modules/process/fractal.c:273 modules/process/fractal.c:545
+#: modules/process/fractal.c:569
+msgid "minimum"
msgstr ""
-#: modules/process/fractal.c:295
+#: modules/process/fractal.c:274
msgid "From:"
msgstr ""
-#: modules/process/fractal.c:295 modules/process/fractal.c:589
-#: modules/process/fractal.c:613
-msgid "minimum"
+#: modules/process/fractal.c:279 modules/process/fractal.c:546
+#: modules/process/fractal.c:570
+msgid "maximum"
msgstr ""
-#: modules/process/fractal.c:298
+#: modules/process/fractal.c:280
msgid "To:"
msgstr ""
-#: modules/process/fractal.c:298 modules/process/fractal.c:590
-#: modules/process/fractal.c:614
-msgid "maximum"
-msgstr ""
-
-#: modules/process/fractal.c:308 modules/process/mark_with.c:390
-#: modules/process/neural.c:559
+#: modules/process/fractal.c:287 modules/process/mark_with.c:394
+#: modules/process/neural.c:563
msgid "Result"
msgstr ""
-#: modules/process/fractal.c:550
+#: modules/process/fractal.c:506
msgid "Linear fit"
msgstr ""
@@ -9905,11 +10262,11 @@ msgstr ""
msgid "Grain Correlations"
msgstr ""
-#: modules/process/grain_cross.c:240
+#: modules/process/grain_cross.c:241
msgid "_Abscissa"
msgstr ""
-#: modules/process/grain_cross.c:244
+#: modules/process/grain_cross.c:245
msgid "O_rdinate"
msgstr ""
@@ -9937,118 +10294,118 @@ msgstr "그래프 그리기(G)"
msgid "Grain Distributions"
msgstr ""
-#: modules/process/grain_dist.c:553
+#: modules/process/grain_dist.c:547
msgid "count"
msgstr ""
-#: modules/process/grain_dist.c:617
+#: modules/process/grain_dist.c:611
msgid "Export Raw Grain Values"
msgstr ""
-#: modules/process/grain_edge.c:100
+#: modules/process/grain_edge.c:99
msgid "Marks grains by edge detection method."
msgstr ""
-#: modules/process/grain_edge.c:114
+#: modules/process/grain_edge.c:113
msgid "/_Grains/Mark by _Edge Detection..."
msgstr ""
-#: modules/process/grain_edge.c:118
+#: modules/process/grain_edge.c:117
msgid "Mark grains with edge detection mechanism"
msgstr ""
-#: modules/process/grain_edge.c:207
+#: modules/process/grain_edge.c:206
msgid "Mark Grains by Edge Detection"
msgstr ""
-#: modules/process/grain_edge.c:245
+#: modules/process/grain_edge.c:244
msgid "Threshold"
msgstr ""
-#: modules/process/grain_edge.c:249
+#: modules/process/grain_edge.c:248
msgid "_Laplacian:"
msgstr ""
-#: modules/process/grain_filter.c:195
+#: modules/process/grain_filter.c:194
msgid ""
"Filters grains by their properties, using logical expressions and thresholds."
msgstr ""
-#: modules/process/grain_filter.c:210
+#: modules/process/grain_filter.c:209
msgid "/_Grains/_Filter..."
msgstr ""
-#: modules/process/grain_filter.c:214
+#: modules/process/grain_filter.c:213
msgid "Filter grains by their properties"
msgstr ""
-#: modules/process/grain_filter.c:254
+#: modules/process/grain_filter.c:253
msgid "There are no grains to filter."
msgstr ""
-#: modules/process/grain_filter.c:310
+#: modules/process/grain_filter.c:309
msgid "Filter Grains"
msgstr ""
-#: modules/process/grain_filter.c:405
+#: modules/process/grain_filter.c:404
msgid "Set selected as:"
msgstr ""
-#: modules/process/grain_filter.c:420
+#: modules/process/grain_filter.c:419
msgid "Keep grains satisfying:"
msgstr ""
-#: modules/process/grain_filter.c:434 modules/process/lat_synth.c:733
+#: modules/process/grain_filter.c:440 modules/process/lat_synth.c:733
msgid "Lower threshold:"
msgstr ""
-#: modules/process/grain_filter.c:469 modules/process/lat_synth.c:740
+#: modules/process/grain_filter.c:467 modules/process/lat_synth.c:740
msgid "Upper threshold:"
msgstr ""
#. TRANSLATORS: %c is replaced with quantity label A, B or C.
-#: modules/process/grain_filter.c:645
+#: modules/process/grain_filter.c:628
#, c-format
msgid "Condition %c: %s"
msgstr ""
-#: modules/process/grain_mark.c:139
+#: modules/process/grain_mark.c:137
msgid "Marks grains by thresholding (height, slope, curvature)."
msgstr ""
-#: modules/process/grain_mark.c:153
+#: modules/process/grain_mark.c:151
msgid "/_Grains/_Mark by Threshold..."
msgstr ""
-#: modules/process/grain_mark.c:157
+#: modules/process/grain_mark.c:155
msgid "Mark grains by threshold"
msgstr ""
-#: modules/process/grain_mark.c:241
+#: modules/process/grain_mark.c:240
msgid "Mark Grains by Threshold"
msgstr ""
-#: modules/process/grain_mark.c:281
+#: modules/process/grain_mark.c:280
msgid "Threshold by"
msgstr ""
-#: modules/process/grain_mark.c:311
+#: modules/process/grain_mark.c:310
msgid "_Slope:"
msgstr ""
-#: modules/process/grain_mark.c:315
+#: modules/process/grain_mark.c:314
msgid "_Curvature:"
msgstr ""
-#: modules/process/grain_mark.c:324
-msgid "Criteria combination:"
-msgstr ""
-
-#: modules/process/grain_mark.c:328 modules/process/grain_wshed.c:256
+#: modules/process/grain_mark.c:319 modules/process/grain_wshed.c:260
#: modules/process/wpour_mark.c:358
msgid "_Invert height"
msgstr ""
+#: modules/process/grain_mark.c:328
+msgid "Criteria combination:"
+msgstr ""
+
#: modules/process/grain_stat.c:54
msgid "Displays overall grain statistics."
msgstr ""
@@ -10125,435 +10482,444 @@ msgstr ""
msgid "Total projected boundary length:"
msgstr ""
-#: modules/process/grain_wshed.c:101
+#: modules/process/grain_wshed.c:102
msgid "Marks grains by watershed algorithm."
msgstr ""
-#: modules/process/grain_wshed.c:115
+#: modules/process/grain_wshed.c:116
msgid "/_Grains/Mark by _Watershed..."
msgstr ""
-#: modules/process/grain_wshed.c:119
+#: modules/process/grain_wshed.c:120
msgid "Mark grains by watershed"
msgstr ""
-#: modules/process/grain_wshed.c:161
+#: modules/process/grain_wshed.c:162
msgid "Mark Grains by Watershed"
msgstr ""
-#: modules/process/grain_wshed.c:199
+#: modules/process/grain_wshed.c:200
msgid "Grain Location"
msgstr ""
-#: modules/process/grain_wshed.c:214
+#: modules/process/grain_wshed.c:216
msgid "_Drop size:"
msgstr ""
-#: modules/process/grain_wshed.c:230
+#: modules/process/grain_wshed.c:233
msgid "Segmentation"
msgstr ""
-#: modules/process/grain_wshed.c:236
+#: modules/process/grain_wshed.c:239
msgid "Num_ber of steps:"
msgstr ""
-#: modules/process/grain_wshed.c:244
+#: modules/process/grain_wshed.c:248
msgid "Dr_op size:"
msgstr ""
-#: modules/process/grain_wshed.c:435
+#: modules/process/grain_wshed.c:439
msgid "Finding minima..."
msgstr ""
-#: modules/process/grain_wshed.c:437
+#: modules/process/grain_wshed.c:441
msgid "Locating..."
msgstr ""
-#: modules/process/grain_wshed.c:439
+#: modules/process/grain_wshed.c:443
msgid "Simulating watershed..."
msgstr ""
-#: modules/process/grain_wshed.c:441
+#: modules/process/grain_wshed.c:445
#, fuzzy
msgid "Marking boundaries..."
msgstr "마스킹 모드"
-#: modules/process/hough.c:74
+#: modules/process/hough.c:76
msgid "Hough transform."
msgstr ""
-#: modules/process/hough.c:88
+#: modules/process/hough.c:90
msgid "/_Integral Transforms/_Hough..."
msgstr ""
-#: modules/process/hough.c:92
+#: modules/process/hough.c:94
msgid "Compute Hough transform"
msgstr ""
-#: modules/process/hough.c:178
+#: modules/process/hough.c:137
+msgid "Hough line"
+msgstr ""
+
+#: modules/process/hough.c:141
+#, c-format
+msgid "Hough circle r=%d"
+msgstr ""
+
+#: modules/process/hough.c:173
msgid "Hough Transform"
msgstr ""
-#: modules/process/hough.c:201
+#: modules/process/hough.c:195
msgid "_Transform type:"
msgstr ""
-#: modules/process/hough.c:212
+#: modules/process/hough.c:203
msgid "_Circle size:"
msgstr ""
-#: modules/process/immerse.c:162
+#: modules/process/immerse.c:163
msgid "Immerse high resolution detail into overall image."
msgstr ""
-#: modules/process/immerse.c:176
+#: modules/process/immerse.c:177
msgid "/M_ultidata/_Immerse Detail..."
msgstr ""
-#: modules/process/immerse.c:180
+#: modules/process/immerse.c:181
msgid "Immerse a detail into image"
msgstr ""
-#: modules/process/immerse.c:222
+#: modules/process/immerse.c:223
msgid "Immerse Detail"
msgstr ""
-#: modules/process/immerse.c:225
+#: modules/process/immerse.c:226
msgid "_Locate"
msgstr ""
-#: modules/process/immerse.c:227
+#: modules/process/immerse.c:228
msgid "Locate detail by full image correlation search"
msgstr ""
-#: modules/process/immerse.c:229
+#: modules/process/immerse.c:230
msgid "_Improve"
msgstr ""
-#: modules/process/immerse.c:231
+#: modules/process/immerse.c:232
msgid "Improve detail position by correlation search in neighborhood"
msgstr ""
-#: modules/process/immerse.c:290
+#: modules/process/immerse.c:291
msgid "_Detail image:"
msgstr ""
-#: modules/process/immerse.c:295
+#: modules/process/immerse.c:296
msgid "Position:"
msgstr ""
-#: modules/process/immerse.c:308
+#: modules/process/immerse.c:314
msgid "Result Sampling"
msgstr ""
-#: modules/process/immerse.c:318
+#: modules/process/immerse.c:324
msgid "_Upsample large image"
msgstr ""
-#: modules/process/immerse.c:320
+#: modules/process/immerse.c:326
msgid "_Downsample detail"
msgstr ""
-#: modules/process/immerse.c:329
+#: modules/process/immerse.c:335
msgid "Detail Leveling"
msgstr ""
-#: modules/process/immerse.c:339
+#: modules/process/immerse.c:345
msgid "levelling|_None"
msgstr ""
-#: modules/process/immerse.c:341
+#: modules/process/immerse.c:347
msgid "_Mean value"
msgstr ""
-#: modules/process/immerse.c:349
+#: modules/process/immerse.c:355
msgid "Show _frame"
msgstr ""
-#: modules/process/immerse.c:787
+#: modules/process/immerse.c:793
msgid "Immersed detail"
msgstr ""
-#: modules/process/indent_analyze.c:261
+#: modules/process/indent_analyze.c:246
msgid "Do nothing"
msgstr ""
-#: modules/process/indent_analyze.c:262
+#: modules/process/indent_analyze.c:247
msgid "Plane level"
msgstr ""
-#: modules/process/indent_analyze.c:263
+#: modules/process/indent_analyze.c:248
msgid "Plane rotate"
msgstr ""
-#: modules/process/indent_analyze.c:267
+#: modules/process/indent_analyze.c:252
msgid "New"
msgstr ""
-#: modules/process/indent_analyze.c:268
+#: modules/process/indent_analyze.c:253
msgid "AND"
msgstr ""
-#: modules/process/indent_analyze.c:269
+#: modules/process/indent_analyze.c:254
msgid "OR"
msgstr ""
-#: modules/process/indent_analyze.c:270
+#: modules/process/indent_analyze.c:255
msgid "NOT"
msgstr ""
-#: modules/process/indent_analyze.c:271
+#: modules/process/indent_analyze.c:256
msgid "XOR"
msgstr ""
-#: modules/process/indent_analyze.c:275
+#: modules/process/indent_analyze.c:260
msgid "Nothing"
msgstr ""
-#: modules/process/indent_analyze.c:276
+#: modules/process/indent_analyze.c:261
msgid "Above"
msgstr ""
-#: modules/process/indent_analyze.c:277
+#: modules/process/indent_analyze.c:262
msgid "Below"
msgstr ""
-#: modules/process/indent_analyze.c:278
+#: modules/process/indent_analyze.c:263
msgid "Plane"
msgstr ""
-#: modules/process/indent_analyze.c:279
+#: modules/process/indent_analyze.c:264
msgid "Impression"
msgstr ""
-#: modules/process/indent_analyze.c:280
+#: modules/process/indent_analyze.c:265
msgid "Inner Pile-up"
msgstr ""
-#: modules/process/indent_analyze.c:281
+#: modules/process/indent_analyze.c:266
msgid "Outer Pile-up"
msgstr ""
-#: modules/process/indent_analyze.c:282
+#: modules/process/indent_analyze.c:267
msgid "Special points"
msgstr ""
-#: modules/process/indent_analyze.c:283
+#: modules/process/indent_analyze.c:268
msgid "Faces border"
msgstr ""
-#: modules/process/indent_analyze.c:287
+#: modules/process/indent_analyze.c:272
msgid "Vickers"
msgstr ""
-#: modules/process/indent_analyze.c:288
+#: modules/process/indent_analyze.c:273
msgid "Berkovich"
msgstr ""
-#: modules/process/indent_analyze.c:289
+#: modules/process/indent_analyze.c:274
msgid "Berkovich (modified)"
msgstr ""
-#: modules/process/indent_analyze.c:290
+#: modules/process/indent_analyze.c:275
msgid "Knoop"
msgstr ""
-#: modules/process/indent_analyze.c:291
+#: modules/process/indent_analyze.c:276
msgid "Brinell"
msgstr ""
-#: modules/process/indent_analyze.c:292
+#: modules/process/indent_analyze.c:277
msgid "Cube corner"
msgstr ""
-#: modules/process/indent_analyze.c:293
+#: modules/process/indent_analyze.c:278
msgid "Rockwell"
msgstr ""
-#: modules/process/indent_analyze.c:303
+#: modules/process/indent_analyze.c:288
msgid "Analyses nanoindentation structure (volumes, surfaces, ...)."
msgstr ""
-#: modules/process/indent_analyze.c:320
+#: modules/process/indent_analyze.c:302
msgid "/_Tip and Indentation/_Analyze Imprint..."
msgstr ""
-#: modules/process/indent_analyze.c:439
+#: modules/process/indent_analyze.c:410
msgid "Marked _areas:"
msgstr ""
-#: modules/process/indent_analyze.c:445
+#: modules/process/indent_analyze.c:419
msgid "_Indentor type:"
msgstr ""
-#: modules/process/indent_analyze.c:451
+#: modules/process/indent_analyze.c:428
msgid "_Mask creation type:"
msgstr ""
-#: modules/process/indent_analyze.c:456
+#: modules/process/indent_analyze.c:434
msgid "Ref. plane _tolerance:"
msgstr ""
-#: modules/process/indent_analyze.c:460
+#: modules/process/indent_analyze.c:438
msgid "Angle _1 tolerance:"
msgstr ""
-#: modules/process/indent_analyze.c:485
+#: modules/process/indent_analyze.c:456
#, fuzzy
msgid "Indent center at"
msgstr "K-평균 중심 %d"
-#: modules/process/indent_analyze.c:488
+#: modules/process/indent_analyze.c:460
msgid "Maximum at"
msgstr ""
-#: modules/process/indent_analyze.c:491
+#: modules/process/indent_analyze.c:464
msgid "Max-min difference"
msgstr ""
-#: modules/process/indent_analyze.c:497
+#: modules/process/indent_analyze.c:472
msgid "Expected A<sub>d</sub>:"
msgstr ""
-#: modules/process/indent_analyze.c:505
+#: modules/process/indent_analyze.c:479
msgid "Expected A<sub>p</sub>:"
msgstr ""
-#: modules/process/indent_analyze.c:549
+#: modules/process/indent_analyze.c:489
msgid "Volume above-below"
msgstr ""
-#: modules/process/indent_analyze.c:558
+#: modules/process/indent_analyze.c:494
msgid "Indent. volume"
msgstr ""
-#: modules/process/indent_analyze.c:564
+#: modules/process/indent_analyze.c:502
msgid "Indent. A<sub>d</sub>"
msgstr ""
-#: modules/process/indent_analyze.c:573
+#: modules/process/indent_analyze.c:509
msgid "Indent. A<sub>p</sub>"
msgstr ""
-#: modules/process/indent_analyze.c:587
+#: modules/process/indent_analyze.c:517
msgid "Inner Pile-Up A<sub>d</sub>"
msgstr ""
-#: modules/process/indent_analyze.c:596
+#: modules/process/indent_analyze.c:525
msgid "Inner Pile-Up A<sub>p</sub>"
msgstr ""
-#: modules/process/indent_analyze.c:605
+#: modules/process/indent_analyze.c:533
msgid "Outer Pile-Up A<sub>d</sub>"
msgstr ""
-#: modules/process/indent_analyze.c:614
+#: modules/process/indent_analyze.c:541
msgid "Outer Pile-Up A<sub>p</sub>"
msgstr ""
-#: modules/process/indent_analyze.c:644
+#: modules/process/indent_analyze.c:569
msgid "Indentation statistics"
msgstr ""
-#: modules/process/indent_analyze.c:645
+#: modules/process/indent_analyze.c:570
msgid "_Compute & mark"
msgstr ""
-#: modules/process/indent_analyze.c:646
+#: modules/process/indent_analyze.c:571
msgid "_Save statistics"
msgstr ""
-#: modules/process/indent_analyze.c:1569
+#: modules/process/indent_analyze.c:1392
msgid "No statistics has been computed yet."
msgstr ""
-#: modules/process/indent_analyze.c:1577
+#: modules/process/indent_analyze.c:1400
msgid "Save Indentation Statistics"
msgstr ""
-#: modules/process/indent_analyze.c:1615
+#: modules/process/indent_analyze.c:1438
#, c-format
msgid "Indentor: %s\n"
msgstr ""
-#: modules/process/indent_analyze.c:1619
+#: modules/process/indent_analyze.c:1442
#, c-format
msgid "Length units: %s\n"
msgstr ""
-#: modules/process/indent_analyze.c:1621
+#: modules/process/indent_analyze.c:1444
#, c-format
msgid "Indentation center at [%d, %d] px: %lf\n"
msgstr ""
-#: modules/process/indent_analyze.c:1623
+#: modules/process/indent_analyze.c:1446
#, c-format
msgid "Maximum at [%d, %d] is: %lf\n"
msgstr ""
-#: modules/process/indent_analyze.c:1625
+#: modules/process/indent_analyze.c:1448
#, c-format
msgid "Difference max-min: %lf\n"
msgstr ""
-#: modules/process/indent_analyze.c:1630
+#: modules/process/indent_analyze.c:1453
#, c-format
msgid "Area (projected) above plane: %g (%.1lf %%)\n"
msgstr ""
-#: modules/process/indent_analyze.c:1634
+#: modules/process/indent_analyze.c:1457
#, c-format
msgid "Area (projected) below plane: %g (%.1lf %%)\n"
msgstr ""
-#: modules/process/indent_analyze.c:1638
+#: modules/process/indent_analyze.c:1461
#, c-format
msgid "Area (projected) of plane: %g (%.1lf %%)\n"
msgstr ""
-#: modules/process/indent_analyze.c:1643
+#: modules/process/indent_analyze.c:1466
#, c-format
msgid "Area (developed) above %g (+%.1f %%)\n"
msgstr ""
-#: modules/process/indent_analyze.c:1646
+#: modules/process/indent_analyze.c:1469
#, c-format
msgid "Area (developed) below %g (+%.1lf %%)\n"
msgstr ""
-#: modules/process/indent_analyze.c:1650
+#: modules/process/indent_analyze.c:1473
#, c-format
msgid "Volume above: %g\n"
msgstr ""
-#: modules/process/indent_analyze.c:1652
+#: modules/process/indent_analyze.c:1475
#, c-format
msgid "Volume below: %g\n"
msgstr ""
-#: modules/process/indent_analyze.c:1654
+#: modules/process/indent_analyze.c:1477
#, c-format
msgid "Volume difference %g\n"
msgstr ""
-#: modules/process/indent_analyze.c:1658
+#: modules/process/indent_analyze.c:1481
msgid ""
"\n"
"Indentation\n"
msgstr ""
-#: modules/process/indent_analyze.c:1659
+#: modules/process/indent_analyze.c:1482
#, c-format
msgid "Volume %g\n"
msgstr ""
-#: modules/process/indent_analyze.c:1664
+#: modules/process/indent_analyze.c:1487
msgid ""
"\n"
"Indentation - Inner Pile-Up\n"
msgstr ""
-#: modules/process/indent_analyze.c:1670
+#: modules/process/indent_analyze.c:1493
msgid "Indentation - Outer Pile-Up\n"
msgstr ""
@@ -10663,11 +11029,6 @@ msgstr "변수"
msgid "_Lattice:"
msgstr ""
-#: modules/process/lat_synth.c:651 modules/process/obj_synth.c:544
-#: modules/process/pat_synth.c:1457
-msgid "_Size:"
-msgstr ""
-
#: modules/process/lat_synth.c:662
msgid "Lattice rela_xation:"
msgstr ""
@@ -10801,7 +11162,7 @@ msgstr ""
#: modules/process/level_grains.c:187 modules/process/median-bg.c:167
#: modules/process/polylevel.c:293 modules/process/polylevel.c:417
-#: modules/process/sphere-revolve.c:200
+#: modules/process/sphere-revolve.c:221 modules/process/sphere-revolve.c:295
msgid "Background"
msgstr ""
@@ -10813,158 +11174,159 @@ msgstr ""
msgid "Quantity to level:"
msgstr ""
-#: modules/process/level_grains.c:231 modules/process/linematch.c:866
-#: modules/process/median-bg.c:217 modules/process/polylevel.c:482
-#: modules/process/sphere-revolve.c:263
+#: modules/process/level_grains.c:231 modules/process/linematch.c:834
+#: modules/process/median-bg.c:217 modules/process/polylevel.c:485
+#: modules/process/sphere-revolve.c:371
msgid "E_xtract background"
msgstr ""
-#: modules/process/linecorrect.c:54
+#: modules/process/linecorrect.c:52
msgid "Corrects line defects (mostly experimental algorithms)."
msgstr ""
-#: modules/process/linecorrect.c:68
+#: modules/process/linecorrect.c:66
msgid "/_Correct Data/Ste_p Line Correction"
msgstr ""
-#: modules/process/linecorrect.c:72
+#: modules/process/linecorrect.c:70
msgid "Correct steps in lines"
msgstr ""
-#: modules/process/linematch.c:158 modules/tools/linestats.c:166
+#: modules/process/linematch.c:155 modules/tools/linestats.c:166
#: modules/volume/volume_linestat.c:143
msgid "Median"
msgstr ""
-#: modules/process/linematch.c:159
+#: modules/process/linematch.c:156
#, fuzzy
msgid "Median of differences"
msgstr "이미지 차이점(G)"
-#: modules/process/linematch.c:160
+#: modules/process/linematch.c:157
#, fuzzy
msgid "Modus"
msgstr "모듈"
-#: modules/process/linematch.c:161
+#: modules/process/linematch.c:158
msgid "linematch|Matching"
msgstr ""
-#: modules/process/linematch.c:162
+#: modules/process/linematch.c:159
msgid "linematch|Polynomial"
msgstr ""
-#: modules/process/linematch.c:168
+#: modules/process/linematch.c:165
msgid "Aligns rows by various methods."
msgstr ""
-#: modules/process/linematch.c:182
+#: modules/process/linematch.c:179
#, fuzzy
msgid "/_Correct Data/_Align rows..."
msgstr "/데이터 교정(C)/Correlation averaging(C)..."
-#: modules/process/linematch.c:186
+#: modules/process/linematch.c:183
msgid "Align rows using various methods"
msgstr ""
-#: modules/process/linematch.c:237 modules/process/linematch.c:265
+#: modules/process/linematch.c:234 modules/process/linematch.c:262
#, fuzzy
msgid "Row background"
msgstr "다항식 배경값 제거하기"
-#: modules/process/linematch.c:266
+#: modules/process/linematch.c:263
#, fuzzy
msgid "Vertical position"
msgstr "수직 방향(V)"
-#: modules/process/linematch.c:267
+#: modules/process/linematch.c:264
msgid "Corrected offset"
msgstr ""
-#: modules/process/linematch.c:802
+#: modules/process/linematch.c:769
#, fuzzy
msgid "Align Rows"
msgstr "그래프 곡선의 높이 레벨 맞추기"
-#: modules/process/linematch.c:844
+#: modules/process/linematch.c:810
#, fuzzy
msgid "_Polynomial degree:"
msgstr "다항식 (0차)"
-#: modules/process/linematch.c:876
+#: modules/process/linematch.c:844
#, fuzzy
msgid "Plot background _graph"
msgstr "그래프 그리기(G)"
-#: modules/process/lno_synth.c:261 modules/process/noise_synth.c:188
+#: modules/process/lno_synth.c:259 modules/process/noise_synth.c:186
msgid "distribution|Triangular"
msgstr ""
-#: modules/process/lno_synth.c:267 modules/process/pat_synth.c:213
+#: modules/process/lno_synth.c:265 modules/process/pat_synth.c:213
msgid "Steps"
msgstr ""
-#: modules/process/lno_synth.c:268
+#: modules/process/lno_synth.c:266
msgid "Scars"
msgstr ""
-#: modules/process/lno_synth.c:269 modules/process/pat_synth.c:214
+#: modules/process/lno_synth.c:267 modules/process/pat_synth.c:214
msgid "Ridges"
msgstr ""
-#: modules/process/lno_synth.c:275
+#: modules/process/lno_synth.c:273
msgid "Generates various kinds of line noise."
msgstr ""
-#: modules/process/lno_synth.c:289
+#: modules/process/lno_synth.c:287
msgid "/S_ynthetic/_Line Noise..."
msgstr ""
-#: modules/process/lno_synth.c:293
+#: modules/process/lno_synth.c:291
msgid "Generate line noise"
msgstr ""
-#: modules/process/lno_synth.c:431
+#: modules/process/lno_synth.c:429
msgid "Line Noise"
msgstr ""
-#: modules/process/lno_synth.c:504
+#: modules/process/lno_synth.c:502
msgid "Distribution"
msgstr ""
-#: modules/process/lno_synth.c:514 modules/process/noise_synth.c:414
-msgid "Direction:"
-msgstr ""
+#: modules/process/lno_synth.c:512 modules/process/mask_noisify.c:158
+#: modules/process/noise_synth.c:412
+#, fuzzy
+msgid "Noise type:"
+msgstr "선 종류(L):"
-#: modules/process/lno_synth.c:523 modules/process/noise_synth.c:423
+#: modules/process/lno_synth.c:521 modules/process/mask_noisify.c:167
+#: modules/process/noise_synth.c:421
msgid "S_ymmetrical"
msgstr ""
-#: modules/process/lno_synth.c:524 modules/process/noise_synth.c:424
+#: modules/process/lno_synth.c:522 modules/process/mask_noisify.c:168
+#: modules/process/noise_synth.c:422
msgid "One-sided _positive"
msgstr ""
-#: modules/process/lno_synth.c:525 modules/process/noise_synth.c:425
+#: modules/process/lno_synth.c:523 modules/process/mask_noisify.c:169
+#: modules/process/noise_synth.c:423
msgid "One-sided _negative"
msgstr ""
-#: modules/process/lno_synth.c:546
+#: modules/process/lno_synth.c:544
msgid "Noise Type"
msgstr ""
-#: modules/process/lno_synth.c:551
+#: modules/process/lno_synth.c:549
msgid "_Noise type:"
msgstr ""
-#: modules/process/lno_synth.c:853 modules/process/lno_synth.c:1222
-msgid "Densi_ty:"
-msgstr ""
-
-#: modules/process/lno_synth.c:864 modules/process/lno_synth.c:1233
+#: modules/process/lno_synth.c:863 modules/process/lno_synth.c:1233
msgid "_Within line:"
msgstr ""
-#: modules/process/lno_synth.c:871
+#: modules/process/lno_synth.c:870
msgid "C_umulative"
msgstr ""
@@ -11021,36 +11383,36 @@ msgstr ""
msgid "_Train logistic regression"
msgstr ""
-#: modules/process/logistic.c:275
+#: modules/process/logistic.c:274
#, fuzzy
msgid "_Gaussian blur"
msgstr "가우시안 타입"
-#: modules/process/logistic.c:288
+#: modules/process/logistic.c:285
#, fuzzy
msgid "_Number of Gaussians:"
msgstr "클러스터 개수"
-#: modules/process/logistic.c:296
+#: modules/process/logistic.c:293
#, fuzzy
msgid "_Sobel derivatives"
msgstr "높이 분포"
-#: modules/process/logistic.c:307
+#: modules/process/logistic.c:303
msgid "_Laplacian"
msgstr ""
-#: modules/process/logistic.c:318
+#: modules/process/logistic.c:313
#, fuzzy
msgid "_Hessian"
msgstr "가우시안 타입"
-#: modules/process/logistic.c:331
+#: modules/process/logistic.c:325
#, fuzzy
msgid "_Regularization parameter:"
msgstr "변수"
-#: modules/process/logistic.c:623 modules/process/neural.c:1101
+#: modules/process/logistic.c:616 modules/process/neural.c:1108
msgid "Training..."
msgstr ""
@@ -11067,13 +11429,13 @@ msgstr "/데이터 교정(C)/드리프트 보정(D)..."
msgid "Mark data disconnected from other values"
msgstr ""
-#: modules/process/mark_disconn.c:187 modules/process/obj_synth.c:422
-#: modules/process/scars.c:279
+#: modules/process/mark_disconn.c:187 modules/process/obj_synth.c:419
+#: modules/process/scars.c:297
msgid "Positive"
msgstr "양성의"
-#: modules/process/mark_disconn.c:188 modules/process/obj_synth.c:423
-#: modules/process/scars.c:280
+#: modules/process/mark_disconn.c:188 modules/process/obj_synth.c:420
+#: modules/process/scars.c:298
msgid "Negative"
msgstr "음성의"
@@ -11091,12 +11453,12 @@ msgstr "선 종류(L):"
msgid "Defect _radius:"
msgstr "곡률 반경 1"
-#: modules/process/mark_disconn.c:563
+#: modules/process/mark_disconn.c:552
#, fuzzy
msgid "Filtering..."
msgstr "FFT 필터링"
-#: modules/process/mark_disconn.c:590
+#: modules/process/mark_disconn.c:579
#, fuzzy
msgid "Marking outliers..."
msgstr "마스킹 모드"
@@ -11113,55 +11475,59 @@ msgstr ""
msgid "Mask combining and modification"
msgstr ""
-#: modules/process/mark_with.c:192
+#: modules/process/mark_with.c:193
msgid "Mark With"
msgstr ""
-#: modules/process/mark_with.c:238
-msgid "Se_t mask"
+#: modules/process/mark_with.c:231 modules/process/mask_morph.c:209
+msgid "Operation:"
msgstr ""
#: modules/process/mark_with.c:239
-msgid "_Add mask"
+msgid "Se_t mask"
msgstr ""
#: modules/process/mark_with.c:240
-msgid "_Subtract mask"
+msgid "_Add mask"
msgstr ""
#: modules/process/mark_with.c:241
+msgid "_Subtract mask"
+msgstr ""
+
+#: modules/process/mark_with.c:242
msgid "_Intersect masks"
msgstr ""
-#: modules/process/mark_with.c:247
+#: modules/process/mark_with.c:248
msgid "Mark with:"
msgstr ""
-#: modules/process/mark_with.c:255
+#: modules/process/mark_with.c:256
msgid "with|_Mask"
msgstr ""
-#: modules/process/mark_with.c:257
+#: modules/process/mark_with.c:258
msgid "with|_Data"
msgstr ""
-#: modules/process/mark_with.c:259
+#: modules/process/mark_with.c:260
msgid "with|_Presentation"
msgstr ""
-#: modules/process/mark_with.c:293
+#: modules/process/mark_with.c:297
msgid "Marked data range:"
msgstr ""
-#: modules/process/mark_with.c:301
+#: modules/process/mark_with.c:305
msgid "_Minimum:"
msgstr ""
-#: modules/process/mark_with.c:310
+#: modules/process/mark_with.c:314
msgid "M_aximum:"
msgstr ""
-#: modules/process/mark_with.c:378
+#: modules/process/mark_with.c:382
msgid "Operand"
msgstr ""
@@ -11200,114 +11566,114 @@ msgstr ""
msgid "Preserve existing masks"
msgstr ""
-#: modules/process/mask_edt.c:95
+#: modules/process/mask_edt.c:89
msgid "Performs simple and true Euclidean distance transforms of masks."
msgstr ""
-#: modules/process/mask_edt.c:109
+#: modules/process/mask_edt.c:103
msgid "/_Mask/Distanc_e Transform..."
msgstr ""
-#: modules/process/mask_edt.c:113
+#: modules/process/mask_edt.c:107
msgid "Distance transform of mask"
msgstr ""
-#: modules/process/mask_edt.c:116
+#: modules/process/mask_edt.c:110
msgid "/_Mask/Thi_n"
msgstr ""
-#: modules/process/mask_edt.c:120
+#: modules/process/mask_edt.c:114
#, fuzzy
msgid "Thin mask"
msgstr "마스크 보기(S)"
-#: modules/process/mask_edt.c:330 modules/process/mask_edt.c:352
+#: modules/process/mask_edt.c:164 modules/process/mask_edt.c:186
msgid "Distance Transform"
msgstr ""
-#: modules/process/mask_edt.c:340
+#: modules/process/mask_edt.c:174
msgid "Interior"
msgstr ""
-#: modules/process/mask_edt.c:341
+#: modules/process/mask_edt.c:175
msgid "Exterior"
msgstr ""
-#: modules/process/mask_edt.c:342
+#: modules/process/mask_edt.c:176
msgid "Two-sided"
msgstr ""
-#: modules/process/mask_edt.c:373 modules/tools/maskedit.c:634
+#: modules/process/mask_edt.c:207 modules/tools/maskedit.c:640
#, fuzzy
msgid "_Distance type:"
msgstr "선 종류(L):"
-#: modules/process/mask_edt.c:394 modules/tools/maskedit.c:640
+#: modules/process/mask_edt.c:228 modules/tools/maskedit.c:646
msgid "Shrink from _border"
msgstr ""
-#: modules/process/mask_morph.c:117
+#: modules/process/mask_morph.c:116
msgid "Performs basic morphological operations with masks."
msgstr ""
-#: modules/process/mask_morph.c:131
+#: modules/process/mask_morph.c:130
#, fuzzy
-msgid "/_Mask/Morphological Operation..."
+msgid "/_Mask/Morpho_logical Operation..."
msgstr "/기본 기능(B)/기울이기(T)..."
-#: modules/process/mask_morph.c:135
+#: modules/process/mask_morph.c:134
msgid "Morphological operation with mask"
msgstr ""
-#: modules/process/mask_morph.c:169
+#: modules/process/mask_morph.c:168
#, fuzzy
msgid "Erosion"
msgstr "버전"
-#: modules/process/mask_morph.c:170
+#: modules/process/mask_morph.c:169
#, fuzzy
msgid "Dilation"
msgstr "설명"
-#: modules/process/mask_morph.c:171 modules/tools/filter.c:242
+#: modules/process/mask_morph.c:170 modules/tools/filter.c:243
#, fuzzy
msgid "filter|Opening"
msgstr "FFT 필터링"
-#: modules/process/mask_morph.c:172 modules/tools/filter.c:243
+#: modules/process/mask_morph.c:171 modules/tools/filter.c:244
#, fuzzy
msgid "filter|Closing"
msgstr "FFT 필터링"
-#: modules/process/mask_morph.c:173 modules/tools/filter.c:244
+#: modules/process/mask_morph.c:172 modules/tools/filter.c:245
msgid "ASF Opening"
msgstr ""
-#: modules/process/mask_morph.c:174 modules/tools/filter.c:245
+#: modules/process/mask_morph.c:173 modules/tools/filter.c:246
msgid "ASF Closing"
msgstr ""
-#: modules/process/mask_morph.c:178
+#: modules/process/mask_morph.c:177
msgid "Octagon"
msgstr ""
-#: modules/process/mask_morph.c:181
+#: modules/process/mask_morph.c:180
msgid "Another mask"
msgstr ""
-#: modules/process/mask_morph.c:192
+#: modules/process/mask_morph.c:191
msgid "Morphological Operation"
msgstr ""
-#: modules/process/mask_morph.c:224
+#: modules/process/mask_morph.c:223
msgid "Structuring element:"
msgstr ""
-#: modules/process/mask_morph.c:238 modules/tools/maskedit.c:524
+#: modules/process/mask_morph.c:237 modules/tools/maskedit.c:528
msgid "_Radius:"
msgstr ""
-#: modules/process/mask_morph.c:249
+#: modules/process/mask_morph.c:248
#, fuzzy
msgid "_Mask:"
msgstr "마스크(M)"
@@ -11316,39 +11682,62 @@ msgstr "마스크(M)"
msgid "_Trim empty borders"
msgstr ""
-#: modules/process/maskcor.c:86
+#: modules/process/mask_noisify.c:83
+msgid "Adds salt and/or pepper noise to mask."
+msgstr ""
+
+#: modules/process/mask_noisify.c:97
+#, fuzzy
+msgid "/_Mask/_Noisify..."
+msgstr "/통계(S)/각도 분포(G)..."
+
+#: modules/process/mask_noisify.c:101
+#, fuzzy
+msgid "Add noise to mask"
+msgstr "FFT 마스크에 ellipse추가 "
+
+#: modules/process/mask_noisify.c:141
+msgid "Noisify Mask"
+msgstr ""
+
+#: modules/process/mask_noisify.c:184
+#, fuzzy
+msgid "_Alter only boundaries"
+msgstr "마스킹 모드"
+
+#: modules/process/maskcor.c:87
msgid "Creates mask by correlation with another data."
msgstr ""
-#: modules/process/maskcor.c:100
+#: modules/process/maskcor.c:101
msgid "/M_ultidata/_Mask by Correlation..."
msgstr ""
-#: modules/process/maskcor.c:104
+#: modules/process/maskcor.c:105
msgid "Create mask by correlation with another data"
msgstr ""
-#: modules/process/maskcor.c:141
+#: modules/process/maskcor.c:142
msgid "Mask by Correlation"
msgstr ""
-#: modules/process/maskcor.c:165
+#: modules/process/maskcor.c:166
msgid "Correlation _kernel:"
msgstr ""
-#: modules/process/maskcor.c:172
+#: modules/process/maskcor.c:173
msgid "Objects marked"
msgstr ""
-#: modules/process/maskcor.c:173
+#: modules/process/maskcor.c:174
msgid "Correlation maxima"
msgstr ""
-#: modules/process/maskcor.c:174 modules/process/maskcor.c:356
+#: modules/process/maskcor.c:175 modules/process/maskcor.c:360
msgid "Correlation score"
msgstr ""
-#: modules/process/maskcor.c:183
+#: modules/process/maskcor.c:185
msgid "Correlation _method:"
msgstr ""
@@ -11377,8 +11766,9 @@ msgid "/_Mask/_Extract Mask"
msgstr ""
#: modules/process/maskops.c:78
-msgid "Extract mask to a new channel"
-msgstr ""
+#, fuzzy
+msgid "Extract mask to a new image"
+msgstr "새 파일로 확장"
#: modules/process/maskops.c:81
msgid "/_Grains/_Remove Edge-Touching"
@@ -11404,38 +11794,34 @@ msgstr ""
msgid "Mutual Crop"
msgstr ""
-#: modules/process/mcrop.c:174
+#: modules/process/mcrop.c:173
msgid "_Select second argument:"
msgstr ""
-#: modules/process/measure_lattice.c:174
+#: modules/process/measure_lattice.c:165
msgid "Measures parameters of two-dimensional lattices."
msgstr ""
-#: modules/process/measure_lattice.c:188
+#: modules/process/measure_lattice.c:179
#, fuzzy
msgid "/_Statistics/Measure _Lattice..."
msgstr "/통계(S)/각도 분포(G)..."
-#: modules/process/measure_lattice.c:192
+#: modules/process/measure_lattice.c:183
#, fuzzy
msgid "Measure lattice"
msgstr "거리 측정"
-#: modules/process/measure_lattice.c:253
+#: modules/process/measure_lattice.c:243
#, fuzzy
msgid "Measure Lattice"
msgstr "거리 측정"
-#: modules/process/measure_lattice.c:259
-msgid "_Refine"
-msgstr ""
-
-#: modules/process/measure_lattice.c:330
+#: modules/process/measure_lattice.c:320
msgid "_ACF"
msgstr ""
-#: modules/process/measure_lattice.c:331
+#: modules/process/measure_lattice.c:321
#, fuzzy
msgid "_PSDF"
msgstr "PSDF"
@@ -11453,32 +11839,32 @@ msgstr ""
msgid "_Vectors"
msgstr ""
-#: modules/process/measure_lattice.c:596
+#: modules/process/measure_lattice.c:589
#, fuzzy
msgid "Save Lattice Parameters"
msgstr "변수"
-#: modules/process/measure_lattice.c:634
+#: modules/process/measure_lattice.c:627
#, fuzzy, c-format
msgid "Vector %d:"
msgstr "X 에러 %d"
-#: modules/process/measure_lattice.c:643
+#: modules/process/measure_lattice.c:636
#, fuzzy, c-format
msgid "Length %d:"
msgstr "길이"
-#: modules/process/measure_lattice.c:650
+#: modules/process/measure_lattice.c:643
#, fuzzy, c-format
msgid "Angle %d:"
msgstr "각ㄱ도"
-#: modules/process/measure_lattice.c:665
+#: modules/process/measure_lattice.c:657
#, fuzzy
msgid "Angle:"
msgstr "각ㄱ도"
-#: modules/process/measure_lattice.c:681
+#: modules/process/measure_lattice.c:673
#, fuzzy
msgid "Lattice Parameters"
msgstr "변수"
@@ -11504,11 +11890,11 @@ msgstr "다항식 계수"
msgid "Median Level"
msgstr ""
-#: modules/process/median-bg.c:199 modules/process/sphere-revolve.c:237
+#: modules/process/median-bg.c:199 modules/process/sphere-revolve.c:336
msgid "Real _radius:"
msgstr ""
-#: modules/process/median-bg.c:209 modules/process/sphere-revolve.c:247
+#: modules/process/median-bg.c:209 modules/process/sphere-revolve.c:346
msgid "_Pixel radius:"
msgstr ""
@@ -11548,7 +11934,7 @@ msgstr ""
msgid "Second operand"
msgstr ""
-#: modules/process/merge.c:197 modules/xyz/xyz_raster.c:643
+#: modules/process/merge.c:197 modules/xyz/xyz_raster.c:612
#, fuzzy
msgid "Average"
msgstr "평균:"
@@ -11602,6 +11988,235 @@ msgstr ""
msgid "Merged images"
msgstr ""
+#: modules/process/mfm_current.c:163
+msgid "Simulation of current line magnetic field"
+msgstr ""
+
+#: modules/process/mfm_current.c:177
+msgid "/SPM M_odes/_MFM/_Current Line Field..."
+msgstr ""
+
+#: modules/process/mfm_current.c:181
+msgid "Simulate stray field above current line"
+msgstr ""
+
+#: modules/process/mfm_current.c:280 modules/process/mfm_parallel.c:282
+msgid "Simulated field"
+msgstr ""
+
+#: modules/process/mfm_current.c:322 modules/process/mfm_field.c:266
+#: modules/process/mfm_parallel.c:324
+#, fuzzy
+msgid "Point charge"
+msgstr "임의의 점"
+
+#: modules/process/mfm_current.c:323 modules/process/mfm_field.c:267
+#: modules/process/mfm_parallel.c:325
+msgid "Bar"
+msgstr ""
+
+#: modules/process/mfm_current.c:330
+msgid "Current Line Stray Field"
+msgstr ""
+
+#: modules/process/mfm_current.c:415
+#, fuzzy
+msgid "Output"
+msgstr "출력 종류"
+
+#: modules/process/mfm_current.c:420 modules/process/mfm_field.c:320
+#: modules/process/mfm_parallel.c:415
+msgid "_Output plane height:"
+msgstr ""
+
+#: modules/process/mfm_current.c:428
+#, fuzzy
+msgid "_Stripe width:"
+msgstr "새 너비(W):"
+
+#: modules/process/mfm_current.c:436
+msgid "Stripe _current:"
+msgstr ""
+
+#: modules/process/mfm_current.c:444
+#, fuzzy
+msgid "_Position:"
+msgstr "위치"
+
+#: modules/process/mfm_current.c:461
+msgid "Probe"
+msgstr ""
+
+#: modules/process/mfm_current.c:469
+#, fuzzy
+msgid "P_robe type:"
+msgstr "선 종류(L):"
+
+#: modules/process/mfm_current.c:475 modules/process/mfm_field.c:389
+#: modules/process/mfm_parallel.c:482
+msgid "Tip _magnetization:"
+msgstr ""
+
+#: modules/process/mfm_current.c:484 modules/process/mfm_field.c:397
+#: modules/process/mfm_parallel.c:491
+#, fuzzy
+msgid "Bar width _x:"
+msgstr "새 너비(W):"
+
+#: modules/process/mfm_current.c:493 modules/process/mfm_field.c:405
+#: modules/process/mfm_parallel.c:500
+#, fuzzy
+msgid "Bar width _y:"
+msgstr "새 너비(W):"
+
+#: modules/process/mfm_current.c:502 modules/process/mfm_field.c:413
+#: modules/process/mfm_parallel.c:509
+msgid "Bar length (_z):"
+msgstr ""
+
+#: modules/process/mfm_field.c:146
+msgid "Simulation of magnetic field above perpendicular media"
+msgstr ""
+
+#: modules/process/mfm_field.c:160
+msgid "/SPM M_odes/_MFM/_Perpendicular Media Field..."
+msgstr ""
+
+#: modules/process/mfm_field.c:164
+msgid "Compute stray field above perpendicular magnetic medium"
+msgstr ""
+
+#: modules/process/mfm_field.c:276
+msgid "Perpendicular Media Stray Field"
+msgstr ""
+
+#: modules/process/mfm_field.c:328 modules/process/mfm_parallel.c:423
+#, fuzzy
+msgid "_Film thickness:"
+msgstr "외곽선 두께:"
+
+#: modules/process/mfm_field.c:336
+msgid "_Magnetic charge:"
+msgstr ""
+
+#: modules/process/mfm_field.c:344
+msgid "Include domain _walls"
+msgstr ""
+
+#: modules/process/mfm_field.c:354
+msgid "_Exchange constant:"
+msgstr ""
+
+#: modules/process/mfm_field.c:362
+msgid "_Uniaxial anisotropy:"
+msgstr ""
+
+#: modules/process/mfm_field.c:383 modules/process/mfm_parallel.c:476
+#, fuzzy
+msgid "_Probe type:"
+msgstr "선 종류(L):"
+
+#: modules/process/mfm_findshift.c:88
+msgid "Lift height difference estimation from data blur"
+msgstr ""
+
+#: modules/process/mfm_findshift.c:102
+msgid "/SPM M_odes/_MFM/_Estimate Shift in Z..."
+msgstr ""
+
+#: modules/process/mfm_findshift.c:106
+msgid "Estimate lift height difference in MFM data"
+msgstr ""
+
+#: modules/process/mfm_findshift.c:166 modules/process/psf.c:340
+#, fuzzy
+msgid "Searching..."
+msgstr "FFT 필터링"
+
+#: modules/process/mfm_findshift.c:196
+#, fuzzy
+msgid "Estimated shift:"
+msgstr "추정된 팁"
+
+#: modules/process/mfm_findshift.c:211
+#, fuzzy
+msgid "Shifted field difference"
+msgstr "이미지 차이점(G)"
+
+#: modules/process/mfm_findshift.c:228
+msgid "Estimate Lift Height Shift"
+msgstr ""
+
+#: modules/process/mfm_findshift.c:255
+msgid "Data to compare:"
+msgstr ""
+
+#: modules/process/mfm_findshift.c:261
+#, fuzzy
+msgid "Search _from:"
+msgstr "변수"
+
+#: modules/process/mfm_findshift.c:269
+msgid "Search _to:"
+msgstr ""
+
+#: modules/process/mfm_parallel.c:165
+msgid "Simulation of parallel magnetic media"
+msgstr ""
+
+#: modules/process/mfm_parallel.c:179
+msgid "/SPM M_odes/_MFM/Para_llel Media Field..."
+msgstr ""
+
+#: modules/process/mfm_parallel.c:183
+msgid "Simulate stray field above parallel magnetic medium"
+msgstr ""
+
+#: modules/process/mfm_parallel.c:331
+msgid "Parallel Media Stray Field"
+msgstr ""
+
+#: modules/process/mfm_parallel.c:431
+msgid "_Remanent magnetization:"
+msgstr ""
+
+#: modules/process/mfm_parallel.c:439
+msgid "Size _A (dir. left):"
+msgstr ""
+
+#: modules/process/mfm_parallel.c:447
+msgid "Size _B (dir. right):"
+msgstr ""
+
+#: modules/process/mfm_parallel.c:455
+#, fuzzy
+msgid "_Gap size:"
+msgstr "점 크기(P):"
+
+#: modules/process/mfm_shift.c:87
+msgid "Simulation of magnetic field z component change for another level"
+msgstr ""
+
+#: modules/process/mfm_shift.c:101
+msgid "/SPM M_odes/_MFM/_Field Shift in Z..."
+msgstr ""
+
+#: modules/process/mfm_shift.c:105
+msgid "Compute stray field shift for another z level"
+msgstr ""
+
+#: modules/process/mfm_shift.c:146
+msgid "Shifted field"
+msgstr ""
+
+#: modules/process/mfm_shift.c:164
+msgid "Stray Field Plane Shift"
+msgstr ""
+
+#: modules/process/mfm_shift.c:209
+msgid "_Z shift by:"
+msgstr ""
+
#: modules/process/nanoindent_adjust.c:89
msgid "Adjust images of two indentor prints."
msgstr ""
@@ -11638,12 +12253,12 @@ msgstr ""
msgid "E_xtrapolate result data out of measured range"
msgstr ""
-#: modules/process/nanoindent_adjust.c:295
+#: modules/process/nanoindent_adjust.c:296
msgid ""
"Tip has different range/resolution ratio than image. Tip will be resampled."
msgstr ""
-#: modules/process/nanoindent_adjust.c:334
+#: modules/process/nanoindent_adjust.c:335
msgid "Immersed detail data"
msgstr ""
@@ -11684,246 +12299,234 @@ msgstr ""
msgid "error"
msgstr ""
-#: modules/process/neural.c:503
+#: modules/process/neural.c:504
msgid "NN training error"
msgstr ""
-#: modules/process/neural.c:516
+#: modules/process/neural.c:517
msgid "Training"
msgstr ""
-#: modules/process/neural.c:520
+#: modules/process/neural.c:521
msgid "_Model:"
msgstr ""
-#: modules/process/neural.c:530
+#: modules/process/neural.c:532
msgid "_Signal:"
msgstr ""
-#: modules/process/neural.c:541
+#: modules/process/neural.c:544
msgid "Training ste_ps:"
msgstr ""
-#: modules/process/neural.c:557
+#: modules/process/neural.c:561
msgid "Model"
msgstr ""
-#: modules/process/neural.c:558
+#: modules/process/neural.c:562
msgid "Signal"
msgstr ""
-#: modules/process/neural.c:575
+#: modules/process/neural.c:579
msgid "verb|_Train"
msgstr ""
-#: modules/process/neural.c:580
+#: modules/process/neural.c:584
msgid "Re_initialize"
msgstr ""
-#: modules/process/neural.c:613
+#: modules/process/neural.c:617
msgid "Network"
msgstr ""
-#: modules/process/neural.c:619
+#: modules/process/neural.c:623
msgid "Window _width:"
msgstr ""
-#: modules/process/neural.c:627
+#: modules/process/neural.c:631
msgid "Window h_eight:"
msgstr ""
-#: modules/process/neural.c:635
+#: modules/process/neural.c:639
msgid "_Hidden nodes:"
msgstr ""
-#: modules/process/neural.c:643
+#: modules/process/neural.c:647
msgid "Result Units"
msgstr ""
-#: modules/process/neural.c:650
+#: modules/process/neural.c:654
msgid "Power of source _XY:"
msgstr ""
-#: modules/process/neural.c:658
+#: modules/process/neural.c:663
msgid "Power of source _Z:"
msgstr ""
-#: modules/process/neural.c:666
+#: modules/process/neural.c:672
msgid "_Fixed units:"
msgstr ""
-#: modules/process/neural.c:676
+#: modules/process/neural.c:683
msgid "Networks"
msgstr ""
-#: modules/process/neural.c:723
+#: modules/process/neural.c:730
msgid "Network _name:"
msgstr ""
-#: modules/process/neural.c:775
+#: modules/process/neural.c:782
msgid "Apply Neural Network"
msgstr ""
-#: modules/process/neural.c:798
+#: modules/process/neural.c:805
msgid "_Scale proportionally to input"
msgstr ""
-#: modules/process/neural.c:929
+#: modules/process/neural.c:936
msgid "Model and signal are not compatible."
msgstr ""
-#: modules/process/neural.c:937
+#: modules/process/neural.c:944
msgid "A field dimension is too small for chosen window size."
msgstr ""
-#: modules/process/neural.c:1183 modules/process/neural.c:1349
+#: modules/process/neural.c:1190 modules/process/neural.c:1356
msgid "Evaluating..."
msgstr ""
-#: modules/process/neural.c:1309
+#: modules/process/neural.c:1316
msgid "Training was canceled."
msgstr ""
-#: modules/process/neural.c:1319
+#: modules/process/neural.c:1326
#, c-format
msgid "Mean difference: %.*f %s"
msgstr ""
-#: modules/process/neural.c:1371
+#: modules/process/neural.c:1378
msgid "Evaluated signal"
msgstr ""
-#: modules/process/noise_synth.c:196
+#: modules/process/noise_synth.c:194
msgid "Generates uncorrelated random noise."
msgstr ""
-#: modules/process/noise_synth.c:210
+#: modules/process/noise_synth.c:208
msgid "/S_ynthetic/_Noise..."
msgstr ""
-#: modules/process/noise_synth.c:214
+#: modules/process/noise_synth.c:212
msgid "Generate surface of uncorrelated noise"
msgstr ""
-#: modules/process/noise_synth.c:334
+#: modules/process/noise_synth.c:332
msgid "Random Noise"
msgstr ""
-#: modules/process/obj_synth.c:274
+#: modules/process/obj_synth.c:270
msgid "Spheres"
msgstr ""
-#: modules/process/obj_synth.c:275
+#: modules/process/obj_synth.c:271
msgid "Boxes"
msgstr ""
-#: modules/process/obj_synth.c:276
+#: modules/process/obj_synth.c:272
msgid "Cones"
msgstr ""
-#: modules/process/obj_synth.c:277
+#: modules/process/obj_synth.c:273
msgid "Pyramids"
msgstr ""
-#: modules/process/obj_synth.c:278
+#: modules/process/obj_synth.c:274
msgid "Diamonds"
msgstr ""
-#: modules/process/obj_synth.c:279
+#: modules/process/obj_synth.c:275
msgid "Tetrahedrons"
msgstr ""
-#: modules/process/obj_synth.c:280
+#: modules/process/obj_synth.c:276
msgid "Nuggets"
msgstr ""
-#: modules/process/obj_synth.c:281
+#: modules/process/obj_synth.c:277
msgid "Thatches"
msgstr ""
-#: modules/process/obj_synth.c:282
+#: modules/process/obj_synth.c:278
msgid "Tents"
msgstr ""
-#: modules/process/obj_synth.c:283
+#: modules/process/obj_synth.c:279
msgid "Gaussians"
msgstr ""
-#: modules/process/obj_synth.c:284
+#: modules/process/obj_synth.c:280
msgid "Doughnuts"
msgstr ""
-#: modules/process/obj_synth.c:285
+#: modules/process/obj_synth.c:281
#, fuzzy
msgid "Parabolic bumps"
msgstr "평행의"
-#: modules/process/obj_synth.c:291
+#: modules/process/obj_synth.c:287
msgid "Generates randomly patterned surfaces by placing objects."
msgstr ""
-#: modules/process/obj_synth.c:305
-msgid "/S_ynthetic/_Objects..."
+#: modules/process/obj_synth.c:301
+msgid "/S_ynthetic/_Deposition/_Objects..."
msgstr ""
-#: modules/process/obj_synth.c:309
+#: modules/process/obj_synth.c:305
msgid "Generate surface of randomly placed objects"
msgstr ""
-#: modules/process/obj_synth.c:424
+#: modules/process/obj_synth.c:421
msgid "Both (random)"
msgstr ""
-#: modules/process/obj_synth.c:439
+#: modules/process/obj_synth.c:436
msgid "Random Objects"
msgstr ""
-#: modules/process/obj_synth.c:513
-msgid "_Shape:"
-msgstr ""
-
-#: modules/process/obj_synth.c:531
-msgid "obj."
-msgstr ""
-
-#: modules/process/obj_synth.c:551
+#: modules/process/obj_synth.c:549
msgid "Aspect Ratio"
msgstr ""
-#: modules/process/obj_synth.c:558
+#: modules/process/obj_synth.c:556
msgid "_Aspect ratio:"
msgstr ""
-#: modules/process/obj_synth.c:588
+#: modules/process/obj_synth.c:586
msgid "Scales _with size"
msgstr ""
-#: modules/process/obj_synth.c:612
+#: modules/process/obj_synth.c:611
#, fuzzy
msgid "_Feature type:"
msgstr "필터 종류(F):"
-#: modules/process/obj_synth.c:807
-msgid "_Truncate:"
-msgstr ""
-
-#: modules/process/otsu_threshold.c:39 modules/process/otsu_threshold.c:59
+#: modules/process/otsu_threshold.c:40 modules/process/otsu_threshold.c:60
msgid "Automated threshold using Otsu's method on heights."
msgstr ""
-#: modules/process/otsu_threshold.c:55
-msgid "/_Grains/_Mark by Otsu's..."
+#: modules/process/otsu_threshold.c:56
+msgid "/_Grains/_Mark by Otsu's"
msgstr ""
-#: modules/process/outliers.c:40
+#: modules/process/outliers.c:41
msgid "Creates mask of outliers."
msgstr ""
-#: modules/process/outliers.c:54
+#: modules/process/outliers.c:55
msgid "/_Correct Data/Mask of _Outliers"
msgstr ""
-#: modules/process/outliers.c:58
+#: modules/process/outliers.c:59
msgid "Mark data farther than 3σ from mean value"
msgstr ""
@@ -11947,80 +12550,101 @@ msgstr ""
msgid "_Pattern:"
msgstr ""
-#: modules/process/pat_synth.c:812
+#: modules/process/pat_synth.c:813
msgid "Flat"
msgstr ""
-#: modules/process/pat_synth.c:820
+#: modules/process/pat_synth.c:821
msgid "_Flat width:"
msgstr ""
-#: modules/process/pat_synth.c:837 modules/process/pat_synth.c:1139
-#: modules/process/pat_synth.c:1474
+#: modules/process/pat_synth.c:838 modules/process/pat_synth.c:1140
+#: modules/process/pat_synth.c:1475
msgid "_Slope width:"
msgstr ""
-#: modules/process/pat_synth.c:1099
+#: modules/process/pat_synth.c:1100
msgid "Top"
msgstr ""
-#: modules/process/pat_synth.c:1106
+#: modules/process/pat_synth.c:1107
msgid "Flat _top width:"
msgstr ""
-#: modules/process/pat_synth.c:1114
+#: modules/process/pat_synth.c:1115
msgid "Bottom"
msgstr ""
-#: modules/process/pat_synth.c:1122
+#: modules/process/pat_synth.c:1123
msgid "Flat _bottom width:"
msgstr ""
-#: modules/process/pat_synth.c:1440
+#: modules/process/pat_synth.c:1441
msgid "_Distance:"
msgstr ""
-#: modules/process/pid.c:96
+#: modules/process/phase_synth.c:136
+msgid "Generates phase-separated structures."
+msgstr ""
+
+#: modules/process/phase_synth.c:150
+msgid "/S_ynthetic/P_hases..."
+msgstr ""
+
+#: modules/process/phase_synth.c:154
+msgid "Generate surface with separated phases"
+msgstr ""
+
+#: modules/process/phase_synth.c:203
+#, fuzzy
+msgid "Separated Phases"
+msgstr "채널"
+
+#: modules/process/phase_synth.c:287
+msgid "Size s_pread:"
+msgstr ""
+
+#: modules/process/pid.c:95
msgid "A simple PID simulator"
msgstr ""
-#: modules/process/pid.c:110
+#: modules/process/pid.c:109
msgid "/_Tip and Indentation/_PID simulation..."
msgstr ""
-#: modules/process/pid.c:114
+#: modules/process/pid.c:113
msgid "Simulate PID effects on measurement"
msgstr ""
-#: modules/process/pid.c:158
+#: modules/process/pid.c:157
msgid "PID FW result"
msgstr ""
-#: modules/process/pid.c:167
+#: modules/process/pid.c:166
msgid "PID FW max. force"
msgstr ""
-#: modules/process/pid.c:176
+#: modules/process/pid.c:175
msgid "PID REV result"
msgstr ""
-#: modules/process/pid.c:185
+#: modules/process/pid.c:184
msgid "PID REV max. force"
msgstr ""
-#: modules/process/pid.c:198
+#: modules/process/pid.c:196
msgid "PID simulation"
msgstr ""
-#: modules/process/pid.c:215
+#: modules/process/pid.c:214
msgid "_Proportional:"
msgstr ""
-#: modules/process/pid.c:221
+#: modules/process/pid.c:220
msgid "_Integral:"
msgstr ""
-#: modules/process/pid.c:227
+#: modules/process/pid.c:226
msgid "_Integration steps:"
msgstr ""
@@ -12028,15 +12652,15 @@ msgstr ""
msgid "_Derivative:"
msgstr ""
-#: modules/process/pid.c:241
+#: modules/process/pid.c:240
msgid "PID/scan speed _ratio:"
msgstr ""
-#: modules/process/pid.c:253
+#: modules/process/pid.c:255
msgid "Force strength:"
msgstr ""
-#: modules/process/pid.c:259
+#: modules/process/pid.c:261
msgid "Force setpoint:"
msgstr ""
@@ -12044,7 +12668,7 @@ msgstr ""
msgid "Scanning..."
msgstr ""
-#: modules/process/pid.c:396
+#: modules/process/pid.c:401
msgid "Computation diverged, try to change parameters"
msgstr ""
@@ -12064,23 +12688,23 @@ msgstr ""
msgid "Distort by Polynomial"
msgstr ""
-#: modules/process/polydistort.c:282
+#: modules/process/polydistort.c:285
msgid "Ori_ginal"
msgstr ""
-#: modules/process/polydistort.c:283
+#: modules/process/polydistort.c:286
msgid "_Transformed"
msgstr ""
-#: modules/process/polydistort.c:289
+#: modules/process/polydistort.c:292
msgid "X Coefficients"
msgstr ""
-#: modules/process/polydistort.c:303
+#: modules/process/polydistort.c:306
msgid "Y Coefficients"
msgstr ""
-#: modules/process/polydistort.c:499
+#: modules/process/polydistort.c:502
msgid "Distorted"
msgstr ""
@@ -12116,23 +12740,23 @@ msgstr "평평하게 맞춰진 데이터"
msgid "_Horizontal polynom degree:"
msgstr "수평 다항식 차수(H):"
-#: modules/process/polylevel.c:450
+#: modules/process/polylevel.c:451
msgid "_Vertical polynom degree:"
msgstr "수직 다항식 차수(V):"
-#: modules/process/polylevel.c:456
+#: modules/process/polylevel.c:458
msgid "_Same degrees"
msgstr "같은 차수(S)"
-#: modules/process/polylevel.c:474
+#: modules/process/polylevel.c:476
msgid "_Maximum polynom degree:"
msgstr "최대 다항식 차수(M):"
-#: modules/process/polylevel.c:561
+#: modules/process/polylevel.c:564
msgid "Polynomial Coefficients"
msgstr "다항식 계수"
-#: modules/process/polylevel.c:934 modules/tools/distance.c:594
+#: modules/process/polylevel.c:937 modules/tools/distance.c:594
#: modules/tools/selectionmanager.c:720
msgid "Save Table"
msgstr "표 저장하기"
@@ -12154,8 +12778,9 @@ msgid "/_Presentation/E_xtract Presentation"
msgstr ""
#: modules/process/presentationops.c:81
-msgid "Extract presentation to a new channel"
-msgstr ""
+#, fuzzy
+msgid "Extract presentation to a new image"
+msgstr "새 파일로 확장"
#: modules/process/presentationops.c:84
msgid "/_Presentation/_Attach Presentation..."
@@ -12181,6 +12806,10 @@ msgstr ""
msgid "_Data to attach:"
msgstr ""
+#: modules/process/preview.h:245
+msgid "Combine with existing mask:"
+msgstr ""
+
#: modules/process/psdf_logphi.c:76
msgid ""
"Two-dimensional FFT (Fast Fourier Transform) transformed to coordinates (log-"
@@ -12200,10 +12829,86 @@ msgstr ""
msgid "Log-Phi PSDF"
msgstr ""
-#: modules/process/psdf_logphi.c:275 modules/process/wpour_mark.c:320
+#: modules/process/psdf_logphi.c:276 modules/process/wpour_mark.c:320
msgid "Gaussian _smoothing:"
msgstr ""
+#: modules/process/psf-fit.c:165
+#, fuzzy
+msgid "Gaussian (asymmetric)"
+msgstr "가우시안 타입 (ACF)"
+
+#: modules/process/psf-fit.c:177
+msgid "Point spread function estimation by fitting explicit function form."
+msgstr ""
+
+#: modules/process/psf-fit.c:191
+#, fuzzy
+msgid "/_Statistics/_PSF Fit..."
+msgstr "/통계(S)/각도 분포(G)..."
+
+#: modules/process/psf-fit.c:195
+msgid "Fit PSF from known data and image"
+msgstr ""
+
+#: modules/process/psf-fit.c:246 modules/process/psf.c:181
+#: modules/process/psf.c:230
+#, fuzzy
+msgid "PSF"
+msgstr "PSDF"
+
+#: modules/process/psf-fit.c:254 modules/process/psf.c:195
+msgid "PSF*P"
+msgstr ""
+
+#: modules/process/psf-fit.c:271
+#, fuzzy
+msgid "Fit PSF"
+msgstr "모양:"
+
+#: modules/process/psf-fit.c:289 modules/process/psf.c:286
+msgid "_Ideal response:"
+msgstr ""
+
+#: modules/process/psf.c:117
+#, fuzzy
+msgid "Point spread function estimation"
+msgstr "팁 추정 효과 가리기"
+
+#: modules/process/psf.c:131
+#, fuzzy
+msgid "/_Statistics/_PSF Guess..."
+msgstr "/통계(S)/각도 분포(G)..."
+
+#: modules/process/psf.c:135
+msgid "Estimate PSF from known data and image"
+msgstr ""
+
+#: modules/process/psf.c:208
+msgid "PSF*P - I"
+msgstr ""
+
+#: modules/process/psf.c:231
+msgid "Convolved"
+msgstr ""
+
+#: modules/process/psf.c:237
+#, fuzzy
+msgid "Estimate PSF"
+msgstr "추정된 팁"
+
+#: modules/process/psf.c:238
+msgid "_Fit"
+msgstr ""
+
+#: modules/process/psf.c:295
+msgid "_Display:"
+msgstr ""
+
+#: modules/process/psf.c:301
+msgid "_Sigma init:"
+msgstr ""
+
#: modules/process/rank.c:92
msgid "Enhances local contrast using a rank transform."
msgstr ""
@@ -12254,7 +12959,7 @@ msgstr "/기본 기능(B)/각도로 회전시키기(A)"
msgid "Rotate by arbitrary angle"
msgstr "임의 각도로 회전시키기"
-#: modules/process/rotate.c:192
+#: modules/process/rotate.c:192 modules/volume/volume_swaxes.c:651
msgid "Rotated Data"
msgstr "데이터 회전시키기"
@@ -12315,66 +13020,66 @@ msgstr "크기변경된 데이터"
msgid "verb|Scale"
msgstr "동사|크기변경"
-#: modules/process/scale.c:216
+#: modules/process/scale.c:217
msgid "Scale by _ratio:"
msgstr "비율로 크기변경(R)"
-#: modules/process/scale.c:224
+#: modules/process/scale.c:225
msgid "_proportional"
msgstr "비례적으로(P)"
-#: modules/process/scale.c:235
+#: modules/process/scale.c:237
msgid "New _width:"
msgstr "새 너비(W):"
-#: modules/process/scale.c:243
+#: modules/process/scale.c:246
msgid "New _height:"
msgstr "새 높이(H)"
-#: modules/process/scars.c:113
+#: modules/process/scars.c:122
#, fuzzy
msgid "Marks and/or removes scars (horizontal linear artifacts)."
msgstr "상처 표시 또는 제거 (horizontal linear artefacts)."
-#: modules/process/scars.c:127
+#: modules/process/scars.c:136
msgid "/_Correct Data/M_ark Scars..."
msgstr ""
-#: modules/process/scars.c:131
+#: modules/process/scars.c:140
msgid "Mark horizontal scars (strokes)"
msgstr ""
-#: modules/process/scars.c:134
+#: modules/process/scars.c:143
msgid "/_Correct Data/Remove _Scars"
msgstr ""
-#: modules/process/scars.c:138
+#: modules/process/scars.c:147
msgid "Correct horizontal scars (strokes)"
msgstr ""
-#: modules/process/scars.c:293
+#: modules/process/scars.c:312
msgid "Mark Scars"
msgstr "튄 자국 표시"
-#: modules/process/scars.c:331
+#: modules/process/scars.c:353
msgid "Maximum _width:"
msgstr "최대 너비(W)"
-#: modules/process/scars.c:338
+#: modules/process/scars.c:361
msgid "Minimum _length:"
msgstr "최소 길이(L)"
-#: modules/process/scars.c:345
+#: modules/process/scars.c:369
#, fuzzy
msgid "_Hard threshold:"
msgstr "Hard threshold(H):"
-#: modules/process/scars.c:353
+#: modules/process/scars.c:377
#, fuzzy
msgid "_Soft threshold:"
msgstr "Soft threshold(S):"
-#: modules/process/scars.c:361
+#: modules/process/scars.c:385
msgid "Scars type:"
msgstr ""
@@ -12417,108 +13122,160 @@ msgstr ""
msgid "_Quality:"
msgstr ""
-#: modules/process/shade.c:92
+#: modules/process/shade.c:94
msgid "Creates a shaded presentation of data."
msgstr ""
-#: modules/process/shade.c:106
+#: modules/process/shade.c:108
msgid "/_Presentation/_Shading..."
msgstr ""
-#: modules/process/shade.c:110
+#: modules/process/shade.c:112
msgid "Shade data"
msgstr ""
-#: modules/process/shade.c:207
+#: modules/process/shade.c:209
msgid "Shading"
msgstr ""
-#: modules/process/shade.c:253
+#: modules/process/shade.c:260
msgid "_Mix:"
msgstr ""
-#: modules/process/slope_dist.c:161
+#: modules/process/slope_dist.c:160
msgid ""
"Calculates one- or two-dimensional distribution of slopes or graph of their "
"angular distribution."
msgstr ""
-#: modules/process/slope_dist.c:176
+#: modules/process/slope_dist.c:175
msgid "/_Statistics/_Slope Distribution..."
msgstr ""
-#: modules/process/slope_dist.c:180
+#: modules/process/slope_dist.c:179
msgid "Calculate angular slope distribution"
msgstr ""
-#: modules/process/slope_dist.c:221
+#: modules/process/slope_dist.c:220
msgid "Slope distribution"
msgstr ""
-#: modules/process/slope_dist.c:253
+#: modules/process/slope_dist.c:252
msgid "_Two-dimensional distribution"
msgstr ""
-#: modules/process/slope_dist.c:254
+#: modules/process/slope_dist.c:253
msgid "Directional (φ) _graph"
msgstr ""
-#: modules/process/slope_dist.c:255
+#: modules/process/slope_dist.c:254
msgid "_Inclination (θ) graph"
msgstr ""
-#: modules/process/slope_dist.c:256
+#: modules/process/slope_dist.c:255
msgid "Inclination (gra_dient) graph"
msgstr ""
-#: modules/process/slope_dist.c:270
+#: modules/process/slope_dist.c:269
msgid "Slope Distribution"
msgstr ""
-#: modules/process/slope_dist.c:755
+#: modules/process/slope_dist.c:749
msgid "Angular Slope Distribution"
msgstr ""
-#: modules/process/slope_dist.c:763 modules/process/tilt.c:179
+#: modules/process/slope_dist.c:757 modules/process/tilt.c:179
msgid "Slopes"
msgstr ""
-#: modules/process/slope_dist.c:824 modules/process/slope_dist.c:893
+#: modules/process/slope_dist.c:818 modules/process/slope_dist.c:887
msgid "Inclination Distribution"
msgstr ""
-#: modules/process/slope_dist.c:832 modules/process/slope_dist.c:901
+#: modules/process/slope_dist.c:826 modules/process/slope_dist.c:895
msgid "Inclinations"
msgstr ""
-#: modules/process/sphere-revolve.c:97
+#: modules/process/sphere-revolve.c:111
msgid "Subtracts background by arc or sphere revolution."
msgstr ""
-#: modules/process/sphere-revolve.c:113
+#: modules/process/sphere-revolve.c:125
msgid "/_Level/Revolve _Arc..."
msgstr "/평평하게 만들기/호 회전시키기(A)..."
-#: modules/process/sphere-revolve.c:117
+#: modules/process/sphere-revolve.c:129
msgid "Level data by arc revolution"
msgstr ""
-#: modules/process/sphere-revolve.c:208 modules/tools/sfunctions.c:371
+#: modules/process/sphere-revolve.c:132
+#, fuzzy
+msgid "/_Level/Revolve _Sphere..."
+msgstr "/평평하게 만들기/호 회전시키기(A)..."
+
+#: modules/process/sphere-revolve.c:136
+msgid "Level data by sphere revolution"
+msgstr ""
+
+#: modules/process/sphere-revolve.c:303 modules/tools/sfunctions.c:381
msgid "_Horizontal direction"
msgstr "수평 방향(H)"
-#: modules/process/sphere-revolve.c:209 modules/tools/sfunctions.c:372
+#: modules/process/sphere-revolve.c:304 modules/tools/sfunctions.c:382
msgid "_Vertical direction"
msgstr "수직 방향(V)"
-#: modules/process/sphere-revolve.c:210
+#: modules/process/sphere-revolve.c:305
msgid "_Both directions"
msgstr "양쪽 방향(B)"
-#: modules/process/sphere-revolve.c:217
+#: modules/process/sphere-revolve.c:315
+#, fuzzy
+msgid "Revolve Sphere"
+msgstr "호 회전시키기"
+
+#: modules/process/sphere-revolve.c:315
msgid "Revolve Arc"
msgstr "호 회전시키기"
+#: modules/process/sphere-revolve.c:355
+msgid "Direction:"
+msgstr ""
+
+#: modules/process/sphere-revolve.c:699
+msgid "Revolving sphere..."
+msgstr ""
+
+#: modules/process/stitch.c:135
+msgid "Stitch multiple images based on offsets of origins."
+msgstr ""
+
+#: modules/process/stitch.c:149
+#, fuzzy
+msgid "/M_ultidata/_Stitch..."
+msgstr "/멀티데이터(M)/산술 연산(A)..."
+
+#: modules/process/stitch.c:153
+msgid "Stitch images using offsets"
+msgstr ""
+
+#: modules/process/stitch.c:269
+msgid "Stitch"
+msgstr ""
+
+#: modules/process/stitch.c:312
+msgid "Channels"
+msgstr "채널"
+
+#: modules/process/stitch.c:435
+msgid "Restore"
+msgstr ""
+
+#: modules/process/stitch.c:445 modules/tools/linestats.c:379
+#: modules/tools/sfunctions.c:440 modules/tools/stats.c:406
+msgid "_Instant updates"
+msgstr ""
+
#: modules/process/straighten_path.c:126
msgid "Extracts a straightened part of image along a curve."
msgstr ""
@@ -12535,30 +13292,30 @@ msgstr ""
msgid "Straighten Path"
msgstr ""
-#: modules/process/straighten_path.c:254
+#: modules/process/straighten_path.c:253
msgid "Res_tore"
msgstr ""
-#: modules/process/straighten_path.c:259
+#: modules/process/straighten_path.c:258
msgid "Re_verse"
msgstr ""
#: modules/process/straighten_path.c:278 modules/tools/pathlevel.c:256
-#: modules/tools/profile.c:507 modules/tools/roughness.c:854
+#: modules/tools/profile.c:503 modules/tools/roughness.c:868
msgid "_Thickness:"
msgstr ""
-#: modules/process/straighten_path.c:286
+#: modules/process/straighten_path.c:287
#, fuzzy
msgid "_Slackness:"
msgstr "선 굵기(H):"
-#: modules/process/straighten_path.c:292
+#: modules/process/straighten_path.c:293
#, fuzzy
msgid "C_losed curve"
msgstr "파일 닫기"
-#: modules/process/straighten_path.c:379
+#: modules/process/straighten_path.c:380
msgid "Straightened"
msgstr ""
@@ -12579,52 +13336,52 @@ msgstr ""
msgid "Supres"
msgstr ""
-#: modules/process/superresolution.c:421
+#: modules/process/superresolution.c:420
msgid "Correlating to determine mean shift..."
msgstr ""
-#: modules/process/superresolution.c:511
+#: modules/process/superresolution.c:510
msgid "Cross-correlation..."
msgstr ""
-#: modules/process/superresolution.c:554 modules/xyz/xyz_raster.c:1079
-#: modules/xyz/xyz_raster.c:1119
+#: modules/process/superresolution.c:553 modules/xyz/xyz_raster.c:1053
+#: modules/xyz/xyz_raster.c:1093
msgid "Interpolating..."
msgstr ""
-#: modules/process/synth.h:343
+#: modules/process/synth.h:344
msgid "Roundness"
msgstr ""
-#: modules/process/synth.h:351
+#: modules/process/synth.h:352
msgid "Roundn_ess:"
msgstr ""
-#: modules/process/synth.h:399
+#: modules/process/synth.h:401
msgid "Orientation"
msgstr ""
-#: modules/process/synth.h:408
+#: modules/process/synth.h:410
msgid "Orien_tation:"
msgstr ""
-#: modules/process/synth.h:432
-msgid "Variance:"
+#: modules/process/synth.h:436
+msgid "_Truncate:"
msgstr ""
-#: modules/process/synth.h:456
-msgid "Deformation"
+#: modules/process/synth.h:460
+msgid "Variance:"
msgstr ""
-#: modules/process/synth.h:464
+#: modules/process/synth.h:493
msgid "_Amplitude:"
msgstr ""
-#: modules/process/synth.h:472
+#: modules/process/synth.h:501
msgid "_Lateral scale:"
msgstr ""
-#: modules/process/synth.h:566
+#: modules/process/synth.h:595
msgid "Randomi_ze"
msgstr ""
@@ -12640,42 +13397,42 @@ msgstr "/기본 기능(B)/범위 제한(M)..."
msgid "Limit data range"
msgstr "데이터 범위 제한"
-#: modules/process/threshold.c:246
+#: modules/process/threshold.c:241
msgid "Limit Range"
msgstr "범위제한"
-#: modules/process/threshold.c:281
+#: modules/process/threshold.c:276
msgid "Specify _thresholds"
msgstr "역치값 설정(T)"
-#: modules/process/threshold.c:283
+#: modules/process/threshold.c:278
msgid "Use _display range"
msgstr "디스플레이 범위 사용"
-#: modules/process/threshold.c:285
+#: modules/process/threshold.c:280
#, fuzzy
msgid "Cut off outlier_s"
msgstr "잘라내기 기준점(S)"
-#: modules/process/threshold.c:294
+#: modules/process/threshold.c:289
msgid "_Lower:"
msgstr "이하(L):"
-#: modules/process/threshold.c:300
+#: modules/process/threshold.c:295
msgid "_Upper:"
msgstr "이상(U):"
-#: modules/process/threshold.c:305
+#: modules/process/threshold.c:300
msgid "Set to _Full Range"
msgstr "전체 범위로 설정(F)"
#. TRANSLATORS: This is a range: 123 to 456.
-#: modules/process/threshold.c:318
+#: modules/process/threshold.c:313
#, c-format
msgid "%.*f to %.*f"
msgstr "%.*f 부터 %.*f 까지"
-#: modules/process/threshold.c:341
+#: modules/process/threshold.c:336
msgid "F_arther than:"
msgstr "최소 값(A):"
@@ -12695,11 +13452,11 @@ msgstr "특정 값만큼 기울이기"
msgid "Tilt"
msgstr "기울이기"
-#: modules/process/tilt.c:185 modules/volume/volume_slice.c:444
+#: modules/process/tilt.c:185 modules/volume/volume_slice.c:446
msgid "_X:"
msgstr "X(X):"
-#: modules/process/tilt.c:194 modules/volume/volume_slice.c:464
+#: modules/process/tilt.c:194 modules/volume/volume_slice.c:469
msgid "_Y:"
msgstr "Y(Y):"
@@ -12707,32 +13464,32 @@ msgstr "Y(Y):"
msgid "Angles"
msgstr "각도"
-#: modules/process/tip_blind.c:178
+#: modules/process/tip_blind.c:177
msgid "Blind estimation of SPM tip using Villarubia's algorithm."
msgstr "Villarubia 알고리즘을 이용한 SPM 팁 추정 효과 가리기"
-#: modules/process/tip_blind.c:192
+#: modules/process/tip_blind.c:191
#, fuzzy
msgid "/_Tip and Indentation/_Blind Estimation..."
msgstr "/팁(T)/추정효과 가리기(B)..."
-#: modules/process/tip_blind.c:196
+#: modules/process/tip_blind.c:195
msgid "Blind tip estimation"
msgstr "팁 추정 효과 가리기"
-#: modules/process/tip_blind.c:231
+#: modules/process/tip_blind.c:230
msgid "Blind Tip Estimation"
msgstr "팁 추정 효과 가리기"
-#: modules/process/tip_blind.c:232
+#: modules/process/tip_blind.c:231
msgid "Run _Partial"
msgstr ""
-#: modules/process/tip_blind.c:233
+#: modules/process/tip_blind.c:232
msgid "Run _Full"
msgstr ""
-#: modules/process/tip_blind.c:234
+#: modules/process/tip_blind.c:233
msgid "_Reset Tip"
msgstr ""
@@ -12740,77 +13497,77 @@ msgstr ""
msgid "Related _data:"
msgstr ""
-#: modules/process/tip_blind.c:326
+#: modules/process/tip_blind.c:327
msgid "Estimated Tip Size"
msgstr ""
-#: modules/process/tip_blind.c:347
+#: modules/process/tip_blind.c:350
msgid "_Same resolution"
msgstr ""
-#: modules/process/tip_blind.c:366
+#: modules/process/tip_blind.c:376
msgid "Noise suppression t_hreshold:"
msgstr ""
-#: modules/process/tip_blind.c:386
+#: modules/process/tip_blind.c:384
msgid "Use _boundaries"
msgstr ""
-#: modules/process/tip_blind.c:396
+#: modules/process/tip_blind.c:395
msgid "Stripes"
msgstr ""
-#: modules/process/tip_blind.c:402
+#: modules/process/tip_blind.c:401
msgid "_Split to stripes:"
msgstr ""
-#: modules/process/tip_blind.c:416
+#: modules/process/tip_blind.c:412
msgid "_Preview stripe:"
msgstr ""
-#: modules/process/tip_blind.c:423
+#: modules/process/tip_blind.c:420
msgid "Plot size _graph"
msgstr ""
-#: modules/process/tip_blind.c:433
+#: modules/process/tip_blind.c:430
msgid "Create tip i_mages"
msgstr ""
#. TRANSLATORS: Prefix for the progressbar message.
-#: modules/process/tip_blind.c:810
+#: modules/process/tip_blind.c:807
#, c-format
msgid "Stripe %u: "
msgstr ""
-#: modules/process/tip_blind.c:917 modules/process/tip_blind.c:941
+#: modules/process/tip_blind.c:914 modules/process/tip_blind.c:938
msgid "Estimated tip"
msgstr "추정된 팁"
-#: modules/process/tip_blind.c:1207 modules/process/tip_blind.c:1216
+#: modules/process/tip_blind.c:1204 modules/process/tip_blind.c:1213
msgid "Tip radius evolution"
msgstr ""
-#: modules/process/tip_model.c:114
+#: modules/process/tip_model.c:112
msgid "Models SPM tip."
msgstr ""
-#: modules/process/tip_model.c:129
+#: modules/process/tip_model.c:127
msgid "/_Tip and Indentation/_Model Tip..."
msgstr ""
-#: modules/process/tip_model.c:133
+#: modules/process/tip_model.c:131
msgid "Model AFM tip"
msgstr ""
-#: modules/process/tip_model.c:164
+#: modules/process/tip_model.c:162
msgid "Model Tip"
msgstr ""
-#: modules/process/tip_model.c:224
+#: modules/process/tip_model.c:222
msgid "Tip _type:"
msgstr ""
-#: modules/process/tip_model.c:229
+#: modules/process/tip_model.c:228
msgid "_Number of sides:"
msgstr ""
@@ -12822,19 +13579,19 @@ msgstr ""
msgid "Tip _rotation:"
msgstr ""
-#: modules/process/tip_model.c:250
+#: modules/process/tip_model.c:255
msgid "Tip _apex radius:"
msgstr ""
-#: modules/process/tip_model.c:269
+#: modules/process/tip_model.c:265
msgid "Tip _anisotropy:"
msgstr ""
-#: modules/process/tip_model.c:490
+#: modules/process/tip_model.c:484
msgid "Modeled tip"
msgstr ""
-#: modules/process/tip_model.c:562
+#: modules/process/tip_model.c:556
#, c-format
msgid "Tip resolution: %d × %d pixels"
msgstr ""
@@ -12939,7 +13696,8 @@ msgid "Converts datafield to 3D volume data."
msgstr ""
#: modules/process/volumize.c:56
-msgid "/_Basic Operations/Volumize..."
+#, fuzzy
+msgid "/_Basic Operations/Volumize"
msgstr "/기본 기능(B)/Volumize..."
#: modules/process/volumize.c:60
@@ -12982,73 +13740,77 @@ msgstr ""
msgid "Z _range:"
msgstr ""
-#: modules/process/wave_synth.c:211
+#: modules/process/wave_synth.c:219
msgid "Generates various kinds of waves."
msgstr ""
-#: modules/process/wave_synth.c:225
+#: modules/process/wave_synth.c:233
msgid "/S_ynthetic/_Waves..."
msgstr ""
-#: modules/process/wave_synth.c:229
+#: modules/process/wave_synth.c:237
msgid "Generate waves"
msgstr ""
-#: modules/process/wave_synth.c:347
+#: modules/process/wave_synth.c:366
msgid "Waves"
msgstr ""
-#: modules/process/wave_synth.c:422 modules/tools/linestats.c:337
-#: modules/tools/sfunctions.c:401 modules/volume/volume_linestat.c:369
+#: modules/process/wave_synth.c:441 modules/tools/linestats.c:337
+#: modules/tools/sfunctions.c:411 modules/volume/volume_linestat.c:374
msgid "_Quantity:"
msgstr ""
-#: modules/process/wave_synth.c:429
+#: modules/process/wave_synth.c:448
msgid "_Number of waves:"
msgstr ""
-#: modules/process/wave_synth.c:436 modules/process/wave_synth.c:582
-#: modules/tools/roughness.c:274
+#: modules/process/wave_synth.c:455 modules/process/wave_synth.c:617
+#: modules/tools/roughness.c:275
msgid "Amplitude"
msgstr "크기"
-#: modules/process/wave_synth.c:441
+#: modules/process/wave_synth.c:460
msgid "_Wave form:"
msgstr ""
-#: modules/process/wave_synth.c:448
+#: modules/process/wave_synth.c:467
msgid "Amplitude:"
msgstr "크기:"
-#: modules/process/wave_synth.c:466
+#: modules/process/wave_synth.c:487
+msgid "_Decay:"
+msgstr ""
+
+#: modules/process/wave_synth.c:497
msgid "Frequency"
msgstr "주파수"
-#: modules/process/wave_synth.c:472
+#: modules/process/wave_synth.c:503
msgid "_Spatial frequency:"
msgstr ""
-#: modules/process/wave_synth.c:488
+#: modules/process/wave_synth.c:519
msgid "_X center:"
msgstr ""
-#: modules/process/wave_synth.c:499
+#: modules/process/wave_synth.c:532
msgid "_Y center:"
msgstr ""
-#: modules/process/wave_synth.c:565
+#: modules/process/wave_synth.c:600
msgid "Cosine"
msgstr ""
-#: modules/process/wave_synth.c:566
+#: modules/process/wave_synth.c:601
msgid "Inverse cosh"
msgstr ""
-#: modules/process/wave_synth.c:567
+#: modules/process/wave_synth.c:602
msgid "Flat top"
msgstr ""
-#: modules/process/wave_synth.c:581
+#: modules/process/wave_synth.c:616
msgid "Displacement"
msgstr ""
@@ -13132,39 +13894,39 @@ msgstr ""
msgid "Preprocess and mark"
msgstr ""
-#: modules/process/xydenoise.c:57
+#: modules/process/xydenoise.c:58
msgid "Denoises measurement on basis of two orthogonal scans."
msgstr ""
-#: modules/process/xydenoise.c:71
+#: modules/process/xydenoise.c:72
msgid "/M_ultidata/_XY denoise..."
msgstr ""
-#: modules/process/xydenoise.c:75
+#: modules/process/xydenoise.c:76
msgid "Denoises horizontal/vertical measurement."
msgstr ""
-#: modules/process/xydenoise.c:102
+#: modules/process/xydenoise.c:103
msgid "XY Denoising"
msgstr ""
-#: modules/process/xydenoise.c:124
+#: modules/process/xydenoise.c:125
msgid "Second direction:"
msgstr ""
-#: modules/process/xydenoise.c:232
+#: modules/process/xydenoise.c:233
msgid "Computing forward FFTs..."
msgstr ""
-#: modules/process/xydenoise.c:248
+#: modules/process/xydenoise.c:249
msgid "Computing image..."
msgstr ""
-#: modules/process/xydenoise.c:260
+#: modules/process/xydenoise.c:261
msgid "Computing backward FFT..."
msgstr ""
-#: modules/process/xydenoise.c:272
+#: modules/process/xydenoise.c:273
msgid "Denoised"
msgstr ""
@@ -13181,63 +13943,67 @@ msgstr "/기본 기능(B)/기울이기(T)..."
msgid "Convert to XYZ data"
msgstr ""
-#: modules/pygwy/pygwy-console.c:55
+#: modules/pygwy/pygwy-console.c:99
msgid "/Pygwy Console"
msgstr ""
-#: modules/pygwy/pygwy-console.c:59
+#: modules/pygwy/pygwy-console.c:103
msgid "Python wrapper console"
msgstr ""
-#: modules/pygwy/pygwy-console.c:142
-msgid ">>> Running the script above\n"
+#: modules/pygwy/pygwy-console.c:168 modules/pygwy/pygwy-console.c:481
+msgid "Pygwy Console"
+msgstr ""
+
+#: modules/pygwy/pygwy-console.c:187
+msgid "Open script in Python language (Ctrl-O)"
msgstr ""
-#: modules/pygwy/pygwy-console.c:194
-msgid "Open Python script"
+#: modules/pygwy/pygwy-console.c:197
+msgid "Save script (Ctrl-S)"
msgstr ""
-#: modules/pygwy/pygwy-console.c:275
-msgid "Save Script as"
+#: modules/pygwy/pygwy-console.c:207
+msgid "Save script as (Ctrl-Shift-S)"
msgstr ""
-#: modules/pygwy/pygwy-console.c:327
-msgid "Pygwy Console"
+#: modules/pygwy/pygwy-console.c:217
+msgid "Execute script (Ctrl-E)"
msgstr ""
-#: modules/pygwy/pygwy-console.c:340
+#: modules/pygwy/pygwy-console.c:227
msgid "Clear Log"
msgstr "로그 지우기"
-#: modules/pygwy/pygwy-console.c:344
-msgid "Open script in Python language (Ctrl-O)"
-msgstr ""
+#: modules/pygwy/pygwy-console.c:285
+msgid "Command"
+msgstr "명령어"
-#: modules/pygwy/pygwy-console.c:346
-msgid "Save script (Ctrl-S)"
+#: modules/pygwy/pygwy-console.c:371
+msgid ">>> Running the script above\n"
msgstr ""
-#: modules/pygwy/pygwy-console.c:348
-msgid "Execute script (Ctrl-E)"
+#: modules/pygwy/pygwy-console.c:425
+msgid "Save Python Script as"
msgstr ""
-#: modules/pygwy/pygwy-console.c:426
-msgid "Command"
-msgstr "명령어"
+#: modules/pygwy/pygwy-console.c:429
+msgid "Open Python Script"
+msgstr ""
-#: pygwy.c:120
+#: pygwy.c:130
msgid "Pygwy, the Gwyddion Python wrapper."
msgstr ""
-#: pygwy.c:258
+#: pygwy.c:269
msgid "Python Interpreter Errors"
msgstr ""
-#: pygwy.c:384
+#: pygwy.c:399
msgid "Python interpreter error occurred."
msgstr ""
-#: pygwy.c:459
+#: pygwy.c:499
msgid "Function written in Python"
msgstr ""
@@ -13262,38 +14028,38 @@ msgid "Measure distances and directions between points"
msgstr ""
#. TRANSLATORS: Number is verb here.
-#: modules/tools/distance.c:250 modules/tools/profile.c:532
+#: modules/tools/distance.c:250 modules/tools/profile.c:527
#, fuzzy
msgid "_Number lines"
msgstr "클러스터 개수"
-#: modules/tools/filter.c:128
+#: modules/tools/filter.c:129
msgid ""
"Filter tool, processes selected part of data with a filter (conservative "
"denoise, mean, median. Kuwahara, minimum, maximum)."
msgstr ""
-#: modules/tools/filter.c:171
+#: modules/tools/filter.c:172
msgid "Basic filters: mean, median, denoise, …"
msgstr ""
-#: modules/tools/filter.c:239
+#: modules/tools/filter.c:240
msgid "Conservative denoise"
msgstr ""
-#: modules/tools/filter.c:246
+#: modules/tools/filter.c:247
msgid "Kuwahara"
msgstr ""
-#: modules/tools/filter.c:247
+#: modules/tools/filter.c:248
msgid "Dechecker"
msgstr ""
-#: modules/tools/filter.c:248
+#: modules/tools/filter.c:249
msgid "filter|Gaussian"
msgstr ""
-#: modules/tools/filter.c:249
+#: modules/tools/filter.c:250
msgid "Sharpen"
msgstr ""
@@ -13383,7 +14149,7 @@ msgid "Height histogram"
msgstr "높이 히스토그램"
#: modules/tools/icolorange.c:329 modules/tools/linestats.c:169
-#: modules/tools/sfunctions.c:226 modules/volume/volume_linestat.c:146
+#: modules/tools/sfunctions.c:231 modules/volume/volume_linestat.c:148
msgid "Range"
msgstr "범위"
@@ -13412,29 +14178,29 @@ msgstr "/값 반전(I)"
msgid "range|Full"
msgstr ""
-#: modules/tools/level3.c:106
+#: modules/tools/level3.c:108
msgid ""
"Three-point level tool, levels data by subtracting a plane fitted through "
"three selected points."
msgstr ""
-#: modules/tools/level3.c:143
+#: modules/tools/level3.c:145
msgid "Three Point Level"
msgstr ""
-#: modules/tools/level3.c:144
+#: modules/tools/level3.c:146
msgid "Level data by fitting a plane through three points"
msgstr ""
-#: modules/tools/level3.c:239 modules/tools/readvalue.c:375
+#: modules/tools/level3.c:244 modules/tools/readvalue.c:378
msgid "_Averaging radius:"
msgstr ""
-#: modules/tools/level3.c:246
+#: modules/tools/level3.c:251
msgid "_Instant apply"
msgstr ""
-#: modules/tools/level3.c:255
+#: modules/tools/level3.c:261
msgid "Set plane to _zero"
msgstr "평면을 0으로 설정"
@@ -13444,23 +14210,23 @@ msgid ""
"RMS, ..., of rows or columns."
msgstr ""
-#: modules/tools/linestats.c:172 modules/volume/volume_linestat.c:148
+#: modules/tools/linestats.c:172 modules/volume/volume_linestat.c:150
msgid "tan β<sub>0</sub>"
msgstr ""
-#: modules/tools/linestats.c:174 modules/volume/volume_linestat.c:150
+#: modules/tools/linestats.c:174 modules/volume/volume_linestat.c:152
msgid "Ra"
msgstr "Ra"
-#: modules/tools/linestats.c:175 modules/volume/volume_linestat.c:151
+#: modules/tools/linestats.c:175 modules/volume/volume_linestat.c:153
msgid "Rq (RMS)"
msgstr "Rq (RMS)"
-#: modules/tools/linestats.c:176 modules/volume/volume_linestat.c:152
+#: modules/tools/linestats.c:176 modules/volume/volume_linestat.c:154
msgid "Rz"
msgstr "Rz"
-#: modules/tools/linestats.c:177 modules/volume/volume_linestat.c:153
+#: modules/tools/linestats.c:177 modules/volume/volume_linestat.c:155
msgid "Rt"
msgstr "Rt"
@@ -13484,16 +14250,11 @@ msgstr ""
msgid "Average:"
msgstr "평균:"
-#: modules/tools/linestats.c:363 modules/tools/profile.c:464
-#: modules/tools/sfunctions.c:414 modules/tools/spectro.c:343
+#: modules/tools/linestats.c:363 modules/tools/profile.c:460
+#: modules/tools/sfunctions.c:424 modules/tools/spectro.c:346
msgid "<b>Options</b>"
msgstr ""
-#: modules/tools/linestats.c:379 modules/tools/sfunctions.c:430
-#: modules/tools/stats.c:408
-msgid "_Instant updates"
-msgstr ""
-
#: modules/tools/maskedit.c:170
msgid "Mask editor tool, allows interactive modification of parts of the mask."
msgstr ""
@@ -13550,63 +14311,63 @@ msgstr ""
msgid "Erase continuous parts of mask"
msgstr ""
-#: modules/tools/maskedit.c:408
+#: modules/tools/maskedit.c:409
msgid "Editor"
msgstr "편집기"
-#: modules/tools/maskedit.c:413
+#: modules/tools/maskedit.c:414
msgid "_Shapes"
msgstr ""
-#: modules/tools/maskedit.c:423
+#: modules/tools/maskedit.c:428
msgid "Mode:"
msgstr "모드:"
-#: modules/tools/maskedit.c:452
+#: modules/tools/maskedit.c:458
msgid "Shape:"
msgstr "모양:"
-#: modules/tools/maskedit.c:483
+#: modules/tools/maskedit.c:486
msgid "_Drawing Tools"
msgstr "그리기 도구(D)"
-#: modules/tools/maskedit.c:493
+#: modules/tools/maskedit.c:500
msgid "Tool:"
msgstr "도구:"
-#: modules/tools/maskedit.c:532
+#: modules/tools/maskedit.c:538
msgid "Actions"
msgstr ""
-#: modules/tools/maskedit.c:540
+#: modules/tools/maskedit.c:546
msgid "_Invert"
msgstr ""
-#: modules/tools/maskedit.c:571
+#: modules/tools/maskedit.c:577
msgid "Fill _Voids"
msgstr ""
-#: modules/tools/maskedit.c:580
+#: modules/tools/maskedit.c:586
msgid "Fill non-simple-connected"
msgstr ""
-#: modules/tools/maskedit.c:591
+#: modules/tools/maskedit.c:597
msgid "Grow/Shrink"
msgstr ""
-#: modules/tools/maskedit.c:600
+#: modules/tools/maskedit.c:606
msgid "_Grow"
msgstr ""
-#: modules/tools/maskedit.c:608
+#: modules/tools/maskedit.c:614
msgid "Shrin_k"
msgstr ""
-#: modules/tools/maskedit.c:623
+#: modules/tools/maskedit.c:629
msgid "_Amount:"
msgstr ""
-#: modules/tools/maskedit.c:651
+#: modules/tools/maskedit.c:657
msgid "_Prevent grain merging by growing"
msgstr ""
@@ -13622,83 +14383,98 @@ msgstr ""
msgid "Level rows using intersections with given lines"
msgstr ""
-#: modules/tools/profile.c:222
+#: modules/tools/profile.c:216
msgid "Profile tool, creates profile graphs from selected lines."
msgstr ""
-#: modules/tools/profile.c:276 modules/tools/profile.c:630
+#: modules/tools/profile.c:270 modules/tools/profile.c:609
msgid "Profiles"
msgstr ""
-#: modules/tools/profile.c:277
+#: modules/tools/profile.c:271
msgid "Extract profiles"
msgstr ""
-#: modules/tools/profile.c:480
-msgid "_Radial profiles"
-msgstr ""
-
-#: modules/tools/profile.c:493
-msgid "Symmetrize _All"
-msgstr ""
+#: modules/tools/profile.c:478
+#, fuzzy
+msgid "Linear profiles"
+msgstr "선 + 점"
-#: modules/tools/profile.c:498
-msgid "S_ymmetrize"
-msgstr ""
+#: modules/tools/profile.c:480
+#, fuzzy
+msgid "Radial profiles"
+msgstr "마스킹 모드"
-#: modules/tools/profile.c:542
+#: modules/tools/profile.c:537
msgid "_Separate profiles"
msgstr ""
-#: modules/tools/profile.c:607
+#: modules/tools/profile.c:587
msgid "_Calibration data:"
msgstr ""
-#: modules/tools/profile.c:620
+#: modules/tools/profile.c:600
msgid "_Show profile"
msgstr ""
-#: modules/tools/profile.c:887
+#: modules/tools/profile.c:861
#, c-format
msgid "X error %d"
msgstr "X 에러 %d"
-#: modules/tools/profile.c:891
+#: modules/tools/profile.c:865
#, c-format
msgid "Y error %d"
msgstr "Y 에러 %d"
-#: modules/tools/profile.c:895
+#: modules/tools/profile.c:869
#, c-format
msgid "Z error %d"
msgstr "Z 에러 %d"
-#: modules/tools/profile.c:899
+#: modules/tools/profile.c:873
#, c-format
msgid "X uncertainty %d"
msgstr ""
-#: modules/tools/profile.c:903
+#: modules/tools/profile.c:877
#, c-format
msgid "Y uncertainty %d"
msgstr ""
-#: modules/tools/profile.c:907
+#: modules/tools/profile.c:881
#, c-format
msgid "Z uncertainty %d"
msgstr ""
-#: modules/tools/profile.c:912
+#: modules/tools/profile.c:886
#, c-format
msgid "Zunc up bound %d"
msgstr ""
-#: modules/tools/profile.c:917
+#: modules/tools/profile.c:891
#, c-format
msgid "Zunc low bound %d"
msgstr ""
-#: modules/tools/profile.c:1817
+#: modules/tools/profile.c:1637
+msgid "S_ymmetrize"
+msgstr ""
+
+#: modules/tools/profile.c:1639
+msgid "Symmetrize _All"
+msgstr ""
+
+#: modules/tools/profile.c:1643
+#, fuzzy
+msgid "Improve _Direction"
+msgstr "방향(D):"
+
+#: modules/tools/profile.c:1645
+msgid "Improve _All"
+msgstr ""
+
+#: modules/tools/profile.c:1866
msgid "calib-data|None"
msgstr ""
@@ -13714,194 +14490,194 @@ msgstr "값 읽기"
msgid "Read value under mouse cursor"
msgstr "마우스 커서 아래 값 읽기"
-#: modules/tools/readvalue.c:304
+#: modules/tools/readvalue.c:307
msgid "Set _Zero"
msgstr "0값으로 설정"
-#: modules/tools/readvalue.c:307
+#: modules/tools/readvalue.c:310
msgid "Shift plane z=0 to pass through the selected point"
msgstr ""
-#: modules/tools/readvalue.c:315
+#: modules/tools/readvalue.c:318
msgid "Facet"
msgstr ""
-#: modules/tools/readvalue.c:340
+#: modules/tools/readvalue.c:343
msgid "Curvatures"
msgstr ""
-#: modules/tools/readvalue.c:382
+#: modules/tools/readvalue.c:386
msgid "Show _selection"
msgstr ""
-#: modules/tools/roughness.c:282
+#: modules/tools/roughness.c:283
msgid "Roughness average"
msgstr ""
-#: modules/tools/roughness.c:290
+#: modules/tools/roughness.c:291
msgid "Root mean square roughness"
msgstr ""
-#: modules/tools/roughness.c:298
+#: modules/tools/roughness.c:299
msgid "Maximum height of the roughness"
msgstr ""
-#: modules/tools/roughness.c:306
+#: modules/tools/roughness.c:307
msgid "Maximum roughness valley depth"
msgstr ""
-#: modules/tools/roughness.c:314
+#: modules/tools/roughness.c:315
msgid "Maximum roughness peak height"
msgstr ""
-#: modules/tools/roughness.c:322 modules/tools/roughness.c:370
+#: modules/tools/roughness.c:323 modules/tools/roughness.c:371
msgid "Average maximum height of the roughness"
msgstr ""
-#: modules/tools/roughness.c:330
+#: modules/tools/roughness.c:331
msgid "Average maximum roughness valley depth"
msgstr ""
-#: modules/tools/roughness.c:338
+#: modules/tools/roughness.c:339
msgid "Average maximum roughness peak height"
msgstr ""
-#: modules/tools/roughness.c:346 modules/tools/roughness.c:354
+#: modules/tools/roughness.c:347 modules/tools/roughness.c:355
msgid "Average third highest peak to third lowest valley height"
msgstr ""
-#: modules/tools/roughness.c:362
+#: modules/tools/roughness.c:363
msgid "Average maximum height of the profile"
msgstr ""
-#: modules/tools/roughness.c:378
+#: modules/tools/roughness.c:379
msgid "Skewness"
msgstr ""
-#: modules/tools/roughness.c:394
+#: modules/tools/roughness.c:395
msgid "Waviness average"
msgstr ""
-#: modules/tools/roughness.c:402
+#: modules/tools/roughness.c:403
msgid "Root mean square waviness"
msgstr ""
-#: modules/tools/roughness.c:410
+#: modules/tools/roughness.c:411
msgid "Waviness maximum height"
msgstr ""
-#: modules/tools/roughness.c:418
+#: modules/tools/roughness.c:419
msgid "Maximum height of the profile"
msgstr ""
-#: modules/tools/roughness.c:426
+#: modules/tools/roughness.c:427
msgid "Spatial"
msgstr ""
-#: modules/tools/roughness.c:476
+#: modules/tools/roughness.c:477
msgid "Average wavelength of the profile"
msgstr ""
-#: modules/tools/roughness.c:484
+#: modules/tools/roughness.c:485
msgid "Root mean square (RMS) wavelength of the profile"
msgstr ""
-#: modules/tools/roughness.c:492
+#: modules/tools/roughness.c:493
msgid "Hybrid"
msgstr ""
-#: modules/tools/roughness.c:500
+#: modules/tools/roughness.c:501
msgid "Average absolute slope"
msgstr ""
-#: modules/tools/roughness.c:508
+#: modules/tools/roughness.c:509
msgid "Root mean square (RMS) slope"
msgstr ""
-#: modules/tools/roughness.c:524
+#: modules/tools/roughness.c:525
msgid "Developed profile length"
msgstr ""
-#: modules/tools/roughness.c:532
+#: modules/tools/roughness.c:533
msgid "Profile length ratio"
msgstr ""
-#: modules/tools/roughness.c:615
+#: modules/tools/roughness.c:616
msgid "Calculate surface profile parameters."
msgstr ""
-#: modules/tools/roughness.c:648 modules/tools/roughness.c:773
-#: modules/tools/roughness.c:1452
+#: modules/tools/roughness.c:649 modules/tools/roughness.c:774
+#: modules/tools/roughness.c:1479
msgid "Roughness"
msgstr ""
-#: modules/tools/roughness.c:649
+#: modules/tools/roughness.c:650
msgid "Calculate roughness parameters"
msgstr ""
-#: modules/tools/roughness.c:771 modules/tools/roughness.c:1450
+#: modules/tools/roughness.c:772 modules/tools/roughness.c:1477
msgid "Texture"
msgstr ""
-#: modules/tools/roughness.c:772 modules/tools/roughness.c:1451
+#: modules/tools/roughness.c:773 modules/tools/roughness.c:1478
msgid "Waviness"
msgstr ""
-#: modules/tools/roughness.c:774
+#: modules/tools/roughness.c:775
msgid "ADF"
msgstr ""
-#: modules/tools/roughness.c:775
+#: modules/tools/roughness.c:776
msgid "BRC"
msgstr ""
-#: modules/tools/roughness.c:776 modules/tools/roughness.c:1455
+#: modules/tools/roughness.c:777 modules/tools/roughness.c:1482
msgid "Peak Count"
msgstr ""
-#: modules/tools/roughness.c:838 modules/xyz/xyz_drift.c:1090
+#: modules/tools/roughness.c:839 modules/xyz/xyz_drift.c:1090
msgid "_Graph:"
msgstr ""
-#: modules/tools/roughness.c:845
+#: modules/tools/roughness.c:847
msgid "C_ut-off:"
msgstr ""
-#: modules/tools/roughness.c:1324
+#: modules/tools/roughness.c:1345
msgid "No profile selected."
msgstr ""
-#: modules/tools/roughness.c:1453
+#: modules/tools/roughness.c:1480
msgid "Amplitude Distribution Function"
msgstr ""
-#: modules/tools/roughness.c:1454
+#: modules/tools/roughness.c:1481
msgid "The Bearing Ratio Curve"
msgstr ""
-#: modules/tools/roughness.c:1489
+#: modules/tools/roughness.c:1516
msgid "Surface Profiles"
msgstr ""
-#: modules/tools/roughness.c:1877
+#: modules/tools/roughness.c:1904
msgid "Save Roughness Parameters"
msgstr ""
-#: modules/tools/roughness.c:1934
+#: modules/tools/roughness.c:1961
msgid "Roughness Parameters"
msgstr ""
-#: modules/tools/roughness.c:1940
+#: modules/tools/roughness.c:1967
#, c-format
msgid "File: %s\n"
msgstr ""
-#: modules/tools/roughness.c:1944
+#: modules/tools/roughness.c:1971
#, c-format
msgid "Data channel: %s\n"
msgstr ""
-#: modules/tools/roughness.c:1975
+#: modules/tools/roughness.c:2002
#, c-format
msgid ""
"Selected line: (%s, %s) to (%s, %s) px\n"
@@ -13937,94 +14713,98 @@ msgstr ""
msgid "_Copy"
msgstr ""
-#: modules/tools/sfunctions.c:181
+#: modules/tools/sfunctions.c:186
msgid ""
"Statistical function tool, calculates one-dimensional statistical functions "
"(height distribution, correlations, PSDF, Minkowski functionals) of selected "
"part of data."
msgstr ""
-#: modules/tools/sfunctions.c:214
+#: modules/tools/sfunctions.c:219
msgid "Height distribution"
msgstr "높이 분포"
-#: modules/tools/sfunctions.c:215
+#: modules/tools/sfunctions.c:220
msgid "Cum. height distribution"
msgstr ""
-#: modules/tools/sfunctions.c:216
+#: modules/tools/sfunctions.c:221
msgid "Distribution of angles"
msgstr ""
-#: modules/tools/sfunctions.c:217
+#: modules/tools/sfunctions.c:222
msgid "Cum. distribution of angles"
msgstr ""
-#: modules/tools/sfunctions.c:218
+#: modules/tools/sfunctions.c:223
msgid "ACF"
msgstr "ACF"
-#: modules/tools/sfunctions.c:219
+#: modules/tools/sfunctions.c:224
msgid "HHCF"
msgstr "HHCF"
-#: modules/tools/sfunctions.c:220
+#: modules/tools/sfunctions.c:225
msgid "PSDF"
msgstr "PSDF"
-#: modules/tools/sfunctions.c:221
+#: modules/tools/sfunctions.c:226
msgid "Radial PSDF"
msgstr ""
-#: modules/tools/sfunctions.c:222
+#: modules/tools/sfunctions.c:227
msgid "Radial ACF"
msgstr ""
-#: modules/tools/sfunctions.c:223
+#: modules/tools/sfunctions.c:228
msgid "Minkowski volume"
msgstr ""
-#: modules/tools/sfunctions.c:224
+#: modules/tools/sfunctions.c:229
msgid "Minkowski boundary"
msgstr ""
-#: modules/tools/sfunctions.c:225
+#: modules/tools/sfunctions.c:230
msgid "Minkowski connectivity"
msgstr ""
-#: modules/tools/sfunctions.c:251
+#: modules/tools/sfunctions.c:232
+msgid "Area scale graph"
+msgstr ""
+
+#: modules/tools/sfunctions.c:257
msgid "Statistical Functions"
msgstr ""
-#: modules/tools/sfunctions.c:252
+#: modules/tools/sfunctions.c:258
msgid "Calculate 1D statistical functions"
msgstr ""
-#: modules/tools/sfunctions.c:504
+#: modules/tools/sfunctions.c:501
msgid "_Separate uncertainty"
msgstr ""
-#: modules/tools/spectro.c:151
+#: modules/tools/spectro.c:154
msgid "Point Spectrum, extracts point spectra to a graph."
msgstr ""
-#: modules/tools/spectro.c:190
+#: modules/tools/spectro.c:193
msgid "Point Spectroscopy"
msgstr ""
-#: modules/tools/spectro.c:191
+#: modules/tools/spectro.c:194
msgid "Extract and view point spectroscopy data"
msgstr ""
-#: modules/tools/spectro.c:359
+#: modules/tools/spectro.c:362
msgid "_Separate spectra"
msgstr ""
-#: modules/tools/spectro.c:369
+#: modules/tools/spectro.c:372
msgid "_Average spectra"
msgstr ""
-#: modules/tools/spectro.c:508
+#: modules/tools/spectro.c:511
msgid "Spectroscopy"
msgstr "분광학"
@@ -14062,14 +14842,6 @@ msgstr ""
msgid "No area in the zoom selected."
msgstr ""
-#: modules/tools/stats.c:205
-msgid "Average value:"
-msgstr ""
-
-#: modules/tools/stats.c:206
-msgid "Median:"
-msgstr ""
-
#: modules/tools/stats.c:207
msgid "Ra (Sa):"
msgstr ""
@@ -14082,14 +14854,6 @@ msgstr ""
msgid "Rms (grain-wise):"
msgstr ""
-#: modules/tools/stats.c:210
-msgid "Skew:"
-msgstr ""
-
-#: modules/tools/stats.c:211
-msgid "Kurtosis:"
-msgstr ""
-
#: modules/tools/stats.c:212
msgid "Surface area:"
msgstr ""
@@ -14098,10 +14862,6 @@ msgstr ""
msgid "Projected area:"
msgstr ""
-#: modules/tools/stats.c:214
-msgid "Variation:"
-msgstr ""
-
#: modules/tools/stats.c:217
msgid "Inclination θ:"
msgstr ""
@@ -14114,7 +14874,7 @@ msgstr ""
msgid "Statistics tool."
msgstr ""
-#: modules/tools/stats.c:261 modules/tools/stats.c:1095
+#: modules/tools/stats.c:261 modules/tools/stats.c:1091
msgid "Statistical Quantities"
msgstr ""
@@ -14122,29 +14882,29 @@ msgstr ""
msgid "Statistical quantities"
msgstr ""
-#: modules/tools/stats.c:1002
+#: modules/tools/stats.c:998
msgid "Save Statistical Quantities"
msgstr ""
-#: modules/tools/stats.c:1100
+#: modules/tools/stats.c:1096
#, c-format
msgid "File: %s\n"
msgstr ""
-#: modules/tools/stats.c:1104
+#: modules/tools/stats.c:1100
#, c-format
msgid "Data channel: %s\n"
msgstr ""
-#: modules/tools/stats.c:1122
+#: modules/tools/stats.c:1118
msgid "Yes"
msgstr "네"
-#: modules/tools/stats.c:1122
+#: modules/tools/stats.c:1118
msgid "No"
msgstr "아니오"
-#: modules/tools/stats.c:1132
+#: modules/tools/stats.c:1128
#, c-format
msgid ""
"Selected area: %s × %s at (%s, %s) px\n"
@@ -14164,182 +14924,179 @@ msgstr "/면적 및 단위(D)..."
msgid "Volume Dimensions and Units"
msgstr "3차원 크기 및 단위"
-#: modules/volume/volume_calibrate.c:526
+#: modules/volume/volume_calibrate.c:486
msgid "_Value range:"
msgstr ""
-#: modules/volume/volume_calibrate.c:555
+#: modules/volume/volume_calibrate.c:508
msgid "Value shi_ft:"
msgstr ""
-#: modules/volume/volume_calibrate.c:601
+#: modules/volume/volume_calibrate.c:542
msgid "_Value calibration factor:"
msgstr ""
-#: modules/volume/volume_extract.c:223
+#: modules/volume/volume_extract.c:216
msgid "Shows and/or extracts a section of volume data"
msgstr ""
-#: modules/volume/volume_extract.c:237
-msgid "/Show and _extract..."
+#: modules/volume/volume_extract.c:230
+#, fuzzy
+msgid "/Show and _Extract..."
msgstr "/보기 또는 추출하기(E)..."
-#: modules/volume/volume_extract.c:241
+#: modules/volume/volume_extract.c:234
msgid "Show and/or extract a section of volume data"
msgstr "3D데이터에서 한 부분을 보기 또는 추출하기 "
-#: modules/volume/volume_extract.c:270
+#: modules/volume/volume_extract.c:263
msgid "X cross-section"
msgstr "X축 단면"
-#: modules/volume/volume_extract.c:271
+#: modules/volume/volume_extract.c:264
msgid "Y cross-section"
msgstr "Y축 단면"
-#: modules/volume/volume_extract.c:272
+#: modules/volume/volume_extract.c:265
msgid "Z cross-section"
msgstr "Z축 단면"
-#: modules/volume/volume_extract.c:273 modules/volume/volume_extract.c:698
+#: modules/volume/volume_extract.c:266 modules/volume/volume_extract.c:684
msgid "X direction sum"
msgstr "X축 합"
-#: modules/volume/volume_extract.c:274 modules/volume/volume_extract.c:700
+#: modules/volume/volume_extract.c:267 modules/volume/volume_extract.c:686
msgid "Y direction sum"
msgstr "Y축 합"
-#: modules/volume/volume_extract.c:275 modules/volume/volume_extract.c:702
+#: modules/volume/volume_extract.c:268 modules/volume/volume_extract.c:688
msgid "Z direction sum"
msgstr "Z축 합"
-#: modules/volume/volume_extract.c:278
+#: modules/volume/volume_extract.c:271
msgid "X direction"
msgstr "X축 방향"
-#: modules/volume/volume_extract.c:279
+#: modules/volume/volume_extract.c:272
msgid "Y direction"
msgstr "Y축 방향"
-#: modules/volume/volume_extract.c:280
+#: modules/volume/volume_extract.c:273
msgid "Z direction"
msgstr "Z축 방향"
-#: modules/volume/volume_extract.c:322
+#: modules/volume/volume_extract.c:315
msgid "Volume data"
msgstr "3차원 데이터"
-#: modules/volume/volume_extract.c:324
+#: modules/volume/volume_extract.c:317
msgid "_Load"
msgstr "불러오기(L)"
-#: modules/volume/volume_extract.c:336
+#: modules/volume/volume_extract.c:329
msgid "_Extract projection"
msgstr ""
-#: modules/volume/volume_extract.c:354
+#: modules/volume/volume_extract.c:347
msgid "Projections"
msgstr ""
-#: modules/volume/volume_extract.c:404
+#: modules/volume/volume_extract.c:395
msgid "Z position"
msgstr "Z 위치"
-#: modules/volume/volume_extract.c:409
+#: modules/volume/volume_extract.c:405
msgid "Shown cut direction:"
msgstr ""
-#: modules/volume/volume_extract.c:419 modules/volume/volume_extract.c:500
-msgid "Show mode:"
-msgstr "모드 보기:"
-
-#: modules/volume/volume_extract.c:490
+#: modules/volume/volume_extract.c:485
msgid "Graph cut direction:"
msgstr ""
-#: modules/volume/volume_extract.c:525
+#: modules/volume/volume_extract.c:511
msgid "3D view"
msgstr "3D 뷰"
-#: modules/volume/volume_extract.c:550
+#: modules/volume/volume_extract.c:538
msgid "Zoom"
msgstr "확대 보기"
-#: modules/volume/volume_extract.c:558
+#: modules/volume/volume_extract.c:545
msgid "Wireframe threshold"
msgstr ""
-#: modules/volume/volume_extract.c:566
+#: modules/volume/volume_extract.c:552
msgid "Z scale"
msgstr "Z축 크기"
-#: modules/volume/volume_extract.c:574
+#: modules/volume/volume_extract.c:559
msgid "Opacity scale"
msgstr ""
-#: modules/volume/volume_extract.c:580
-msgid "apply perspective"
+#: modules/volume/volume_extract.c:565
+msgid "Apply perspective"
msgstr ""
-#: modules/volume/volume_extract.c:589
-msgid "instant 3D render"
+#: modules/volume/volume_extract.c:574
+msgid "Instant 3D render"
msgstr ""
-#: modules/volume/volume_extract.c:598
+#: modules/volume/volume_extract.c:587
msgid "X view"
msgstr "X축 시점 보기"
-#: modules/volume/volume_extract.c:604
+#: modules/volume/volume_extract.c:592
msgid "Y view"
msgstr "Y축 시점 보기"
-#: modules/volume/volume_extract.c:610
+#: modules/volume/volume_extract.c:597
msgid "Z view"
msgstr "Z축 시점 보기"
-#: modules/volume/volume_extract.c:683
+#: modules/volume/volume_extract.c:669
#, c-format
msgid "X cross-section at x: %d"
msgstr ""
-#: modules/volume/volume_extract.c:686
+#: modules/volume/volume_extract.c:672
#, c-format
msgid "Y cross-section at y: %d"
msgstr ""
-#: modules/volume/volume_extract.c:690
+#: modules/volume/volume_extract.c:676
#, c-format
msgid "Z cross-section at Z = %g %s (#%d)"
msgstr ""
-#: modules/volume/volume_extract.c:749 modules/volume/volume_slice.c:1264
+#: modules/volume/volume_extract.c:735 modules/volume/volume_slice.c:1278
#, c-format
msgid "X graph at y: %d z: %d"
msgstr ""
-#: modules/volume/volume_extract.c:752 modules/volume/volume_slice.c:1273
+#: modules/volume/volume_extract.c:738 modules/volume/volume_slice.c:1287
#, c-format
msgid "Y graph at x: %d z: %d"
msgstr ""
-#: modules/volume/volume_extract.c:755 modules/volume/volume_slice.c:1255
+#: modules/volume/volume_extract.c:741 modules/volume/volume_slice.c:1269
#, c-format
msgid "Z graph at x: %d y: %d"
msgstr ""
-#: modules/volume/volume_extract.c:776
+#: modules/volume/volume_extract.c:762
msgid "Brick graph"
msgstr ""
-#: modules/volume/volume_extract.c:1056
+#: modules/volume/volume_extract.c:1042
msgid "Load volume data"
msgstr ""
-#: modules/volume/volume_extract.c:1218
+#: modules/volume/volume_extract.c:1204
#, c-format
msgid "Shown range %g to %g"
msgstr ""
-#: modules/volume/volume_extract.c:1911
+#: modules/volume/volume_extract.c:1897
msgid "Building wireframe model..."
msgstr ""
@@ -14348,100 +15105,103 @@ msgid "Evaluate volume force-distance data"
msgstr "Volume force-distance 데이터 평가"
#: modules/volume/volume_fdfit.c:213
-msgid "/_Evaluate FD data..."
+#, fuzzy
+msgid "/_Evaluate FD Data..."
msgstr "/FD 데이터 평가(E)..."
#: modules/volume/volume_fdfit.c:217
msgid "Evaluate force-distance volume data"
msgstr "Force-distance volume 데이터 평가"
-#: modules/volume/volume_fdfit.c:368
+#: modules/volume/volume_fdfit.c:371
msgid "Curve _X position:"
msgstr ""
-#: modules/volume/volume_fdfit.c:386
+#: modules/volume/volume_fdfit.c:380
msgid "Curve _Y position:"
msgstr ""
-#: modules/volume/volume_fdfit.c:535
+#: modules/volume/volume_fdfit.c:511
msgid "e_stimate"
msgstr ""
-#: modules/volume/volume_invert.c:51
+#: modules/volume/volume_invert.c:39 modules/volume/volumeops.c:39
msgid "Inverts value in volume data"
msgstr "3차원 데이터 값 반전"
-#: modules/volume/volume_invert.c:65
-msgid "/_Invert value"
+#: modules/volume/volume_invert.c:53
+#, fuzzy
+msgid "/_Invert Value"
msgstr "/값 반전(I)"
-#: modules/volume/volume_invert.c:69
+#: modules/volume/volume_invert.c:57
msgid "Invert value in volume data"
msgstr "3차원 데이터 값 반전"
-#: modules/volume/volume_kmeans.c:94
+#: modules/volume/volume_kmeans.c:95
msgid "Calculates K-means clustering on volume data."
msgstr "3차원 데이터 K-평균 클러스터링 계산"
-#: modules/volume/volume_kmeans.c:108
-msgid "/_K-means clustering..."
+#: modules/volume/volume_kmeans.c:109
+#, fuzzy
+msgid "/_K-Means Clustering..."
msgstr "/K-평균 클러스터링(K)..."
-#: modules/volume/volume_kmeans.c:112
+#: modules/volume/volume_kmeans.c:113
msgid "Calculate K-means clustering on volume data"
msgstr "3차원 데이터 K-평균 클러스터링 계산"
-#: modules/volume/volume_kmeans.c:151
+#: modules/volume/volume_kmeans.c:152
msgid "K-means"
msgstr "K-평균"
-#: modules/volume/volume_kmeans.c:170 modules/volume/volume_kmedians.c:164
+#: modules/volume/volume_kmeans.c:170 modules/volume/volume_kmedians.c:163
msgid "_Number of clusters:"
msgstr "클러스터 개수"
-#: modules/volume/volume_kmeans.c:177 modules/volume/volume_kmedians.c:171
+#: modules/volume/volume_kmeans.c:177 modules/volume/volume_kmedians.c:170
msgid "Convergence _precision digits:"
msgstr ""
-#: modules/volume/volume_kmeans.c:184 modules/volume/volume_kmedians.c:178
+#: modules/volume/volume_kmeans.c:183 modules/volume/volume_kmedians.c:176
msgid "_Max. iterations:"
msgstr ""
-#: modules/volume/volume_kmeans.c:189 modules/volume/volume_kmedians.c:183
+#: modules/volume/volume_kmeans.c:187 modules/volume/volume_kmedians.c:181
msgid "_Normalize"
msgstr ""
-#: modules/volume/volume_kmeans.c:195
+#: modules/volume/volume_kmeans.c:193
#, fuzzy
msgid "_Remove outliers"
msgstr "점 제거하기"
-#: modules/volume/volume_kmeans.c:208
+#: modules/volume/volume_kmeans.c:202
#, fuzzy
msgid "Outliers _threshold:"
msgstr "Hard threshold(H):"
-#: modules/volume/volume_kmeans.c:431
+#: modules/volume/volume_kmeans.c:425
#, fuzzy
msgid "K-means iteration..."
msgstr "/K-평균 클러스터링(K)..."
-#: modules/volume/volume_kmeans.c:651
+#: modules/volume/volume_kmeans.c:645
#, fuzzy, c-format
msgid "K-means cluster of %s"
msgstr "%s의 K-평균 "
-#: modules/volume/volume_kmeans.c:660
+#: modules/volume/volume_kmeans.c:654
#, c-format
msgid "K-means error of %s"
msgstr "%s의 K-평균 "
-#: modules/volume/volume_kmeans.c:670 modules/volume/volume_kmedians.c:514
+#: modules/volume/volume_kmeans.c:664 modules/volume/volume_kmedians.c:512
#, c-format
msgid "Pre-normalized intensity of %s"
msgstr ""
-#: modules/volume/volume_kmeans.c:702
+#: modules/volume/volume_kmeans.c:696
#, c-format
msgid "K-means center %d"
msgstr "K-평균 중심 %d"
@@ -14453,7 +15213,7 @@ msgstr "3차원 데이터 K-평균 클러스터링 계산"
#: modules/volume/volume_kmedians.c:102
#, fuzzy
-msgid "/_K-medians clustering..."
+msgid "/_K-Medians Clustering..."
msgstr "/K-평균 클러스터링(K)..."
#: modules/volume/volume_kmedians.c:106
@@ -14466,49 +15226,49 @@ msgstr "3차원 데이터 K-평균 클러스터링 계산"
msgid "K-Medians"
msgstr "K-평균"
-#: modules/volume/volume_kmedians.c:392
+#: modules/volume/volume_kmedians.c:390
#, fuzzy
msgid "K-medians iteration..."
msgstr "/K-평균 클러스터링(K)..."
-#: modules/volume/volume_kmedians.c:495
+#: modules/volume/volume_kmedians.c:493
#, fuzzy, c-format
msgid "K-medians cluster of %s"
msgstr "%s의 K-평균 "
-#: modules/volume/volume_kmedians.c:504
+#: modules/volume/volume_kmedians.c:502
#, fuzzy, c-format
msgid "K-medians error of %s"
msgstr "%s의 K-평균 "
-#: modules/volume/volume_kmedians.c:546
+#: modules/volume/volume_kmedians.c:544
#, fuzzy, c-format
msgid "K-medians center %d"
msgstr "K-평균 중심 %d"
-#: modules/volume/volume_linestat.c:171
+#: modules/volume/volume_linestat.c:173
msgid "Summarizes profiles of volume data to a channel."
msgstr ""
-#: modules/volume/volume_linestat.c:185
+#: modules/volume/volume_linestat.c:187
msgid "/Summarize _Profiles..."
msgstr ""
-#: modules/volume/volume_linestat.c:189
+#: modules/volume/volume_linestat.c:191
msgid "Summarize profiles"
msgstr ""
-#: modules/volume/volume_linestat.c:249
+#: modules/volume/volume_linestat.c:251
#, fuzzy
msgid "_Extract image"
msgstr "필터링된 이미지(l)"
-#: modules/volume/volume_linestat.c:250
+#: modules/volume/volume_linestat.c:252
#, fuzzy
msgid "Set _preview"
msgstr "미리보기가 불가능합니다. "
-#: modules/volume/volume_linestat.c:284
+#: modules/volume/volume_linestat.c:289
msgid "Summarize Volume Profiles"
msgstr ""
@@ -14535,59 +15295,125 @@ msgstr "이미지 차이점"
msgid "Line graph"
msgstr "그래프 자르기"
-#: modules/volume/volume_slice.c:290
+#: modules/volume/volume_slice.c:292
#, fuzzy
msgid "Slice Volume Data"
msgstr "3차원 데이터(V)"
-#: modules/volume/volume_slice.c:369
+#: modules/volume/volume_slice.c:371
msgid "_Base plane:"
msgstr ""
-#: modules/volume/volume_slice.c:420
+#: modules/volume/volume_slice.c:422
msgid "Extract _multiple items"
msgstr ""
-#: modules/volume/volume_slice.c:437
+#: modules/volume/volume_slice.c:439
#, fuzzy
msgid "Positions"
msgstr "위치"
-#: modules/volume/volume_slice.c:484
+#: modules/volume/volume_slice.c:492
#, fuzzy
msgid "_Z:"
msgstr "X(X):"
-#: modules/volume/volume_slice.c:1156
+#: modules/volume/volume_slice.c:1167
#, c-format
msgid "Z slice at %.*f%s%s (#%d)"
msgstr ""
-#: modules/volume/volume_slice.c:1167
+#: modules/volume/volume_slice.c:1178
#, c-format
msgid "Y slice at %.*f%s%s (#%d)"
msgstr ""
-#: modules/volume/volume_slice.c:1178
+#: modules/volume/volume_slice.c:1189
#, c-format
msgid "X slice at %.*f%s%s (#%d)"
msgstr ""
-#: modules/volume/volume_slice.c:1307
+#: modules/volume/volume_slice.c:1325
#, fuzzy
msgid "Volume Z graphs"
msgstr "3차원 데이터"
-#: modules/volume/volume_slice.c:1314
+#: modules/volume/volume_slice.c:1332
#, fuzzy
msgid "Volume X graphs"
msgstr "3차원 데이터"
-#: modules/volume/volume_slice.c:1321
+#: modules/volume/volume_slice.c:1339
#, fuzzy
msgid "Volume Y graphs"
msgstr "3차원 데이터"
+#: modules/volume/volume_swaxes.c:104
+#, fuzzy
+msgid "Swaps axes of volume data."
+msgstr "3차원 데이터 값 반전"
+
+#: modules/volume/volume_swaxes.c:118
+#, fuzzy
+msgid "/S_wap axes..."
+msgstr "/다른 이름으로 저장(A)..."
+
+#: modules/volume/volume_swaxes.c:122
+#, fuzzy
+msgid "Swap axes"
+msgstr "축 보기(A)"
+
+#: modules/volume/volume_swaxes.c:156
+#, fuzzy
+msgid "X"
+msgstr "X(X):"
+
+#: modules/volume/volume_swaxes.c:157
+msgid "X, reversed"
+msgstr ""
+
+#: modules/volume/volume_swaxes.c:158
+#, fuzzy
+msgid "Y"
+msgstr "Y(Y):"
+
+#: modules/volume/volume_swaxes.c:159
+msgid "Y, reversed"
+msgstr ""
+
+#: modules/volume/volume_swaxes.c:160
+msgid "Z"
+msgstr ""
+
+#: modules/volume/volume_swaxes.c:161
+msgid "Z, reversed"
+msgstr ""
+
+#: modules/volume/volume_swaxes.c:175
+msgid "Swap Volume Axes"
+msgstr ""
+
+#: modules/volume/volume_swaxes.c:196
+msgid "Current _X axis will become:"
+msgstr ""
+
+#: modules/volume/volume_swaxes.c:204
+msgid "Current _Y axis will become:"
+msgstr ""
+
+#: modules/volume/volume_swaxes.c:212
+msgid "Current _Z axis will become:"
+msgstr ""
+
+#: modules/volume/volume_swaxes.c:219
+#, fuzzy
+msgid "Create new volume data"
+msgstr "3차원 데이터 값 반전"
+
+#: modules/volume/volume_swaxes.c:286
+msgid "Z axis calibration will be lost."
+msgstr ""
+
#: modules/volume/volume_zcal.c:104
msgid "Attaches, extracts and removes volume data z-axis calibration."
msgstr ""
@@ -14658,6 +15484,16 @@ msgid ""
"differs from the number of planes %d."
msgstr ""
+#: modules/volume/volumeops.c:53
+#, fuzzy
+msgid "/Extract _Preview"
+msgstr "필터링된 이미지(l)"
+
+#: modules/volume/volumeops.c:57
+#, fuzzy
+msgid "Extract volume data preview to an image"
+msgstr "3D 뷰를 이미지로 저장"
+
#: modules/xyz/xyz_drift.c:267
msgid "Analyzes drift in XYZ data."
msgstr ""
@@ -14700,7 +15536,7 @@ msgstr ""
msgid "Analyze XYZ Drift"
msgstr ""
-#: modules/xyz/xyz_drift.c:566 modules/xyz/xyz_raster.c:391
+#: modules/xyz/xyz_drift.c:566 modules/xyz/xyz_raster.c:406
msgid "Reset Ran_ges"
msgstr ""
@@ -14709,11 +15545,11 @@ msgstr ""
msgid "_Guess parameters"
msgstr "변수"
-#: modules/xyz/xyz_drift.c:778 modules/xyz/xyz_raster.c:570
+#: modules/xyz/xyz_drift.c:778 modules/xyz/xyz_raster.c:539
msgid "_X-range:"
msgstr ""
-#: modules/xyz/xyz_drift.c:800 modules/xyz/xyz_raster.c:592
+#: modules/xyz/xyz_drift.c:800 modules/xyz/xyz_raster.c:561
msgid "_Y-range:"
msgstr ""
@@ -14797,7 +15633,7 @@ msgstr ""
msgid "Fitting in progress..."
msgstr ""
-#: modules/xyz/xyz_drift.c:2269 modules/xyz/xyz_raster.c:1012
+#: modules/xyz/xyz_drift.c:2264 modules/xyz/xyz_raster.c:981
msgid "Physical dimensions are invalid."
msgstr ""
@@ -14842,44 +15678,44 @@ msgstr "데이터"
msgid "Update X and Y of _all compatible data"
msgstr ""
-#: modules/xyz/xyz_raster.c:197
+#: modules/xyz/xyz_raster.c:194
msgid "Rasterizes XYZ data to images."
msgstr ""
-#: modules/xyz/xyz_raster.c:211
+#: modules/xyz/xyz_raster.c:208
#, fuzzy
msgid "/_Rasterize..."
msgstr "/병합(M)..."
-#: modules/xyz/xyz_raster.c:215
+#: modules/xyz/xyz_raster.c:212
#, fuzzy
msgid "Rasterize to image"
msgstr "3D 뷰를 이미지로 저장"
-#: modules/xyz/xyz_raster.c:340
+#: modules/xyz/xyz_raster.c:337
#, fuzzy
msgid "Rasterize XYZ Data"
msgstr "데이터 회전시키기"
-#: modules/xyz/xyz_raster.c:354
+#: modules/xyz/xyz_raster.c:351
#, fuzzy
msgid "Create Image _Directly"
msgstr "새 아이템 생성"
-#: modules/xyz/xyz_raster.c:360
+#: modules/xyz/xyz_raster.c:357
msgid "XY points form a regular grid so interpolation is not necessary."
msgstr ""
-#: modules/xyz/xyz_raster.c:381
+#: modules/xyz/xyz_raster.c:392
#, fuzzy
msgid "Make Pixels S_quare"
msgstr "픽셀방식의 정사각형"
-#: modules/xyz/xyz_raster.c:642
+#: modules/xyz/xyz_raster.c:611
msgid "Field"
msgstr ""
-#: modules/xyz/xyz_raster.c:956
+#: modules/xyz/xyz_raster.c:925
#, c-format
msgid ""
"Number of points: %u\n"
@@ -14887,12 +15723,21 @@ msgid ""
"Added on the boundaries: %u"
msgstr ""
-#: modules/xyz/xyz_raster.c:1091
+#: modules/xyz/xyz_raster.c:1065
msgid ""
"XYZ data regularization failed due to numerical instability or was "
"interrupted."
msgstr ""
+#~ msgid "pixels"
+#~ msgstr "픽셀"
+
+#~ msgid "Show mode:"
+#~ msgstr "모드 보기:"
+
+#~ msgid "Initializing GUI"
+#~ msgstr "GUI 초기화하기"
+
#~ msgid "_Prune"
#~ msgstr "제거하다(P)"
diff --git a/po/pt_BR.gmo b/po/pt_BR.gmo
new file mode 100644
index 0000000..24bf190
Binary files /dev/null and b/po/pt_BR.gmo differ
diff --git a/po/pt_BR.po b/po/pt_BR.po
new file mode 100644
index 0000000..d04ce36
--- /dev/null
+++ b/po/pt_BR.po
@@ -0,0 +1,16060 @@
+# Brazilian Portuguese translation for Gwyddion
+# This file is distributed under the same license as the Gwyddion package.
+#
+# Fellype do Nascimento <fellypao at yahoo.com.br>, 2016.
+msgid ""
+msgstr ""
+"Project-Id-Version: Gwyddion 2.46\n"
+"Report-Msgid-Bugs-To: yeti at gwyddion.net\n"
+"POT-Creation-Date: 2017-08-15 17:48+0200\n"
+"PO-Revision-Date: 2016-11-30 12:11-0200\n"
+"Last-Translator: Fellype do Nascimento <fellypao at yahoo.com.br>\n"
+"Language-Team: Brazilian Portuguese <kde-i18n-pt_BR at kde.org>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+"X-Generator: Lokalize 1.5\n"
+"X-Language: pt_BR\n"
+"X-Source-Language: C\n"
+
+#: libgwyddion/gwyexpr.c:765
+msgid "Invalid token"
+msgstr "Símbolo inválido"
+
+#: libgwyddion/gwyexpr.c:774
+msgid "Empty expression"
+msgstr "Expressão vazia"
+
+#. TRANSLATORS: %c is replaced with +, -, *, /, etc.
+#: libgwyddion/gwyexpr.c:1017
+#, c-format
+msgid "Missing operator %c argument"
+msgstr "Falta o operador com o argumento %c"
+
+#. TRANSLATORS: %c is replaced with +, -, *, /, etc.
+#: libgwyddion/gwyexpr.c:1024
+#, c-format
+msgid "Invalid operator %c argument"
+msgstr "Operador com argumento %c inválido"
+
+#. TRANSLATORS: %s is replaced with sin, cos, sqrt, etc.
+#: libgwyddion/gwyexpr.c:1074
+#, c-format
+msgid "Missing argument of %s"
+msgstr "Está faltando o argumento de %s"
+
+#. TRANSLATORS: %s is replaced with sin, cos, sqrt, etc.
+#: libgwyddion/gwyexpr.c:1082
+#, c-format
+msgid "Invalid argument of %s"
+msgstr "O argumento de %s é inválido"
+
+#: libgwyddion/gwyexpr.c:1140
+msgid "Missing opening parenthesis"
+msgstr "Está faltando o parenteses de abertura"
+
+#: libgwyddion/gwyexpr.c:1182
+msgid "Missing closing parenthesis"
+msgstr "Está faltando o parenteses de fechamento"
+
+#: libgwyddion/gwyexpr.c:1187
+msgid "Empty parentheses"
+msgstr "Parenteses vazio"
+
+#: libgwyddion/gwyexpr.c:1196
+msgid "Stray comma"
+msgstr "Vírgula perdida"
+
+#: libgwyddion/gwyexpr.c:1235
+#, c-format
+msgid "Stray symbol %d"
+msgstr "Símbolo %d perdido"
+
+#: libgwyddion/gwyexpr.c:1287
+msgid "Trailing garbage"
+msgstr "Lixo perdido"
+
+#: libgwyddion/gwyexpr.c:1307
+msgid "Stack is not executable"
+msgstr "A pilha não é executável"
+
+#: libgwyddion/gwyexpr.c:1412
+msgid "Unresolved identifiers"
+msgstr "Identificadores não resolvidos"
+
+#: libgwyddion/gwyfdcurvepreset.c:787
+msgid "vdW: semisphere"
+msgstr "vdW: semiesfera"
+
+#: libgwyddion/gwyfdcurvepreset.c:801
+msgid "vdW: pyramide"
+msgstr "vdW: pirâmide"
+
+#: libgwyddion/gwyfdcurvepreset.c:813
+msgid "vdW: truncated pyramid"
+msgstr "vdW: pirâmide truncada"
+
+#: libgwyddion/gwyfdcurvepreset.c:825
+msgid "vdW: sphere"
+msgstr "vdW: esfera"
+
+#: libgwyddion/gwyfdcurvepreset.c:837
+msgid "vdW: offset sphere"
+msgstr "vdW: esfera afastada"
+
+#: libgwyddion/gwyfdcurvepreset.c:849
+msgid "vdW: two spheres"
+msgstr "vdW: duas esferas"
+
+#: libgwyddion/gwyfdcurvepreset.c:861
+msgid "vdW: cone"
+msgstr "vdW: cone"
+
+#: libgwyddion/gwyfdcurvepreset.c:873
+msgid "vdW: cylinder"
+msgstr "vdW: cilíndro"
+
+#: libgwyddion/gwyfdcurvepreset.c:885
+msgid "vdW: paraboloid"
+msgstr "vdW: paraboloide"
+
+#: libgwyddion/gwyfdcurvepreset.c:897
+msgid "contact: Hertz (paraboloid)"
+msgstr "contact: Hertz (paraboloide)"
+
+#: libgwyddion/gwyinventory.c:1311 libgwydgets/gwygraphwindow.c:730
+#: app/data-browser-aux.c:1336 app/data-browser-aux.c:1416
+#: app/data-browser-aux.c:1480 app/data-browser.c:2280 app/data-browser.c:2887
+#: app/data-browser.c:3707 app/data-browser.c:3857 app/data-browser.c:4139
+#: app/data-browser.c:4504 app/data-browser.c:4590 app/data-browser.c:5016
+#: app/resource-editor.c:366 modules/file/xyzexport.c:214
+#: modules/process/convolution_filter.c:691
+msgid "Untitled"
+msgstr "Sem título"
+
+#: libgwyddion/gwynlfit.c:426
+msgid "Initial residua evaluation..."
+msgstr "Avaliação de resíduo inicial..."
+
+#: libgwyddion/gwynlfit.c:479 modules/process/fit-shape.c:1646
+msgid "Fitting..."
+msgstr "Ajustando..."
+
+#: libgwyddion/gwynlfitpreset.c:1549 libprocess/gwyprocessenums.c:101
+#: libprocess/gwyshapefitpreset.c:347 modules/process/psf-fit.c:157
+msgid "Gaussian"
+msgstr "Gaussiana"
+
+#: libgwyddion/gwynlfitpreset.c:1564
+msgid "Gaussian (PSDF)"
+msgstr "Gaussiana (PSDF)"
+
+#: libgwyddion/gwynlfitpreset.c:1577
+msgid "Gaussian (ACF)"
+msgstr "Gaussiana (ACF)"
+
+#: libgwyddion/gwynlfitpreset.c:1590
+msgid "Gaussian (HHCF)"
+msgstr "Gaussiana (HHCF)"
+
+#: libgwyddion/gwynlfitpreset.c:1603
+msgid "Gaussian (RPSDF)"
+msgstr "Gaussiana (RPSDF)"
+
+#: libgwyddion/gwynlfitpreset.c:1616
+msgid "Two Gaussians (PSDF)"
+msgstr "Duas Gaussianas (PSDF)"
+
+#: libgwyddion/gwynlfitpreset.c:1631 modules/xyz/xyz_drift.c:841
+#: modules/xyz/xyz_drift.c:846 modules/xyz/xyz_drift.c:1818
+msgid "Exponential"
+msgstr "Exponencial"
+
+#: libgwyddion/gwynlfitpreset.c:1643
+msgid "Exponential (PSDF)"
+msgstr "Exponencial (PSDF)"
+
+#: libgwyddion/gwynlfitpreset.c:1656
+msgid "Exponential (ACF)"
+msgstr "Exponencial (ACF)"
+
+#: libgwyddion/gwynlfitpreset.c:1668
+msgid "Exponential (HHCF)"
+msgstr "Exponencial (HHCF)"
+
+#: libgwyddion/gwynlfitpreset.c:1681
+msgid "Exponential (RPSDF)"
+msgstr "Exponencial (RPSDF)"
+
+#: libgwyddion/gwynlfitpreset.c:1695
+msgid "K-correlated (PSDF)"
+msgstr ""
+
+#: libgwyddion/gwynlfitpreset.c:1709
+msgid "Polynomial (order 0)"
+msgstr "Polinomial (ordem 0)"
+
+#: libgwyddion/gwynlfitpreset.c:1720 modules/xyz/xyz_drift.c:1804
+msgid "Polynomial (order 1)"
+msgstr "Polinomial (ordem 1)"
+
+#: libgwyddion/gwynlfitpreset.c:1731
+msgid "Polynomial (order 2)"
+msgstr "Polinomial (ordem 2)"
+
+#: libgwyddion/gwynlfitpreset.c:1743
+msgid "Polynomial (order 3)"
+msgstr "Polinomial (ordem 3)"
+
+#: libgwyddion/gwynlfitpreset.c:1756
+msgid "Square wave"
+msgstr "Onda quadrada"
+
+#: libgwyddion/gwynlfitpreset.c:1772
+msgid "Parabolic step"
+msgstr "Passo parabólico"
+
+#: libgwyddion/gwynlfitpreset.c:1788
+msgid "Smooth slanted step"
+msgstr "Passo inclinado suave"
+
+#: libgwyddion/gwynlfitpreset.c:1805
+msgid "Smooth bent step"
+msgstr "Passo encurvado suave"
+
+#: libgwyddion/gwynlfitpreset.c:1821
+#, fuzzy
+msgid "Boltzmann bent step"
+msgstr "Passo encurvado suave"
+
+#: libgwyddion/gwynlfitpreset.c:1837
+msgid "Power"
+msgstr "Potência"
+
+#: libgwyddion/gwynlfitpreset.c:1849 libprocess/gwyshapefitpreset.c:348
+msgid "Lorentzian"
+msgstr "Lorentziana"
+
+#: libgwyddion/gwynlfitpreset.c:1863
+msgid "Sinc"
+msgstr "Sinc"
+
+#: libprocess/cdline.c:571
+msgid "Edge height (right)"
+msgstr "Altura da borda (direita)"
+
+#: libprocess/cdline.c:572 libprocess/cdline.c:581
+msgid "Edge"
+msgstr "Borda"
+
+#: libprocess/cdline.c:580
+msgid "Edge height (left)"
+msgstr "Altura da borda (esquerda)"
+
+#: libprocess/cdline.c:589
+msgid "Step height (positive)"
+msgstr "Altura do passo (positivo)"
+
+#: libprocess/cdline.c:590 libprocess/cdline.c:599
+#: libgwydgets/gwydgetenums.c:48 modules/process/hough.c:163
+msgid "Line"
+msgstr "Linha"
+
+#: libprocess/cdline.c:598
+msgid "Step height (negative)"
+msgstr "Altura do passo (negativo)"
+
+#: libprocess/cdline.c:607
+msgid "Circle (down)"
+msgstr "Círculo (abaixo)"
+
+#: libprocess/cdline.c:608 libprocess/cdline.c:617
+#: libgwydgets/gwygraphareadialog.c:550 modules/process/hough.c:164
+msgid "Circle"
+msgstr "Círculo"
+
+#: libprocess/cdline.c:616
+msgid "Circle (up)"
+msgstr "Círculo (acima)"
+
+#: libprocess/gwygrainvalue.c:62
+msgid "Grain number"
+msgstr "Número do grão"
+
+#: libprocess/gwygrainvalue.c:71 modules/process/curvature.c:128
+msgid "Center x position"
+msgstr "Posição do centro x"
+
+#: libprocess/gwygrainvalue.c:80 modules/process/curvature.c:129
+msgid "Center y position"
+msgstr "Posição do centro y"
+
+#: libprocess/gwygrainvalue.c:89
+msgid "Minimum value"
+msgstr "Valor mínimo"
+
+#: libprocess/gwygrainvalue.c:98
+msgid "Maximum value"
+msgstr "Valor máximo"
+
+#: libprocess/gwygrainvalue.c:107 modules/process/bdep_synth.c:133
+#: modules/tools/filter.c:238
+msgid "Mean value"
+msgstr "Valor médio"
+
+#: libprocess/gwygrainvalue.c:116 modules/tools/filter.c:239
+msgid "Median value"
+msgstr "Valor mediano"
+
+#: libprocess/gwygrainvalue.c:125
+msgid "Minimum value on boundary"
+msgstr "Valor mínimo na fronteira"
+
+#: libprocess/gwygrainvalue.c:134
+msgid "Maximum value on boundary"
+msgstr "Valor máximo na fronteira"
+
+#: libprocess/gwygrainvalue.c:143
+msgid "Pixel area"
+msgstr "Área do pixel"
+
+#: libprocess/gwygrainvalue.c:152
+msgid "Projected area"
+msgstr "Área projetada"
+
+#: libprocess/gwygrainvalue.c:161
+msgid "Surface area"
+msgstr "Área da superfície"
+
+#: libprocess/gwygrainvalue.c:170
+msgid "Equivalent square side"
+msgstr "Lado equivalente do quadrado"
+
+#: libprocess/gwygrainvalue.c:179
+msgid "Equivalent disc radius"
+msgstr "Raio equivalente do disco"
+
+#: libprocess/gwygrainvalue.c:188
+msgid "Area above half-height"
+msgstr "Área sobre a meia altura"
+
+#: libprocess/gwygrainvalue.c:197
+msgid "Area of convex hull"
+msgstr "Área da casca convexa"
+
+#. TRANSLATORS: Grain volume calculated using basis (foot) set to
+#. * zero.
+#: libprocess/gwygrainvalue.c:208
+msgid "Zero basis volume"
+msgstr "Volume da base zero"
+
+#. TRANSLATORS: Grain volume calculated using basis (foot) set to the
+#. * grain minimum.
+#: libprocess/gwygrainvalue.c:219
+msgid "Grain minimum basis volume"
+msgstr "Volume base mínimo do grão"
+
+#. TRANSLATORS: Grain volume calculated using basis (foot) set to the
+#. * Laplacian background.
+#: libprocess/gwygrainvalue.c:230
+msgid "Laplacian background basis volume"
+msgstr "Volume base do fundo Laplaciano"
+
+#: libprocess/gwygrainvalue.c:239
+msgid "Projected boundary length"
+msgstr "Comprimento da fronteira projetada"
+
+#: libprocess/gwygrainvalue.c:248
+msgid "Minimum bounding size"
+msgstr "Tamanho mínimo comprometido"
+
+#: libprocess/gwygrainvalue.c:257
+msgid "Minimum bounding direction"
+msgstr "Direção mínima comprometida"
+
+#: libprocess/gwygrainvalue.c:266
+msgid "Maximum bounding size"
+msgstr "Tamanho máximo comprometido"
+
+#: libprocess/gwygrainvalue.c:275
+msgid "Maximum bounding direction"
+msgstr "Direção máxima comprometida"
+
+#: libprocess/gwygrainvalue.c:284
+msgid "Maximum inscribed disc radius"
+msgstr "Máximo raio do disco inscrito"
+
+#: libprocess/gwygrainvalue.c:293
+msgid "Maximum inscribed disc center x position"
+msgstr "Posição x máxima do centro do disco inscrito"
+
+#: libprocess/gwygrainvalue.c:302
+msgid "Maximum inscribed disc center y position"
+msgstr "Posição y máxima do centro do disco inscrito"
+
+#: libprocess/gwygrainvalue.c:311
+msgid "Minimum circumcircle radius"
+msgstr "Raio mínimo da circunferência"
+
+#: libprocess/gwygrainvalue.c:320
+msgid "Minimum circumcircle center x position"
+msgstr "Posição x mínima do centro da circunferência"
+
+#: libprocess/gwygrainvalue.c:329
+msgid "Minimum circumcircle center y position"
+msgstr "Posição y mínima do centro da circunferência"
+
+#: libprocess/gwygrainvalue.c:338
+msgid "Mean radius"
+msgstr "Raio médio"
+
+#: libprocess/gwygrainvalue.c:347 modules/tools/readvalue.c:322
+msgid "Inclination θ"
+msgstr "Inclinação θ"
+
+#: libprocess/gwygrainvalue.c:356 modules/tools/readvalue.c:332
+msgid "Inclination φ"
+msgstr "Inclinação φ"
+
+#: libprocess/gwygrainvalue.c:365
+msgid "Curvature center x position"
+msgstr "Posição x do centro da curvatura"
+
+#: libprocess/gwygrainvalue.c:374
+msgid "Curvature center y position"
+msgstr "Posição y do centro da curvatura"
+
+#: libprocess/gwygrainvalue.c:383
+msgid "Curvature center z value"
+msgstr "Valor z do centro da curvatura"
+
+#: libprocess/gwygrainvalue.c:392 modules/tools/readvalue.c:347
+msgid "Curvature 1"
+msgstr "Curvatura 1"
+
+#: libprocess/gwygrainvalue.c:401 modules/tools/readvalue.c:357
+msgid "Curvature 2"
+msgstr "Curvatura 2"
+
+#: libprocess/gwygrainvalue.c:410
+msgid "Curvature angle 1"
+msgstr "Ângulo da curvatura 1"
+
+#: libprocess/gwygrainvalue.c:419
+msgid "Curvature angle 2"
+msgstr "Ângulo da curvatura 2"
+
+#: libprocess/gwygrainvalue.c:428
+msgid "Major semiaxis of equivalent ellipse"
+msgstr "Semi eixo principal da elipse equivalente"
+
+#: libprocess/gwygrainvalue.c:437
+msgid "Minor semiaxis of equivalent ellipse"
+msgstr "Semi eixo secundário da elipse equivalente"
+
+#: libprocess/gwygrainvalue.c:446
+msgid "Orientation of equivalent ellipse"
+msgstr "Orientação da elipse equivalente"
+
+#: libprocess/gwygrainvalue.c:1118
+msgid "Id"
+msgstr "Id"
+
+#: libprocess/gwygrainvalue.c:1119 modules/graph/graph_peaks.c:154
+#: modules/process/extract_path.c:391 modules/process/wave_synth.c:513
+#: modules/tools/readvalue.c:253
+msgid "Position"
+msgstr "Posição"
+
+#: libprocess/gwygrainvalue.c:1120 app/meta.c:411 modules/file/imgexport.c:4573
+#: modules/process/curvature.c:759 modules/tools/level3.c:475
+#: modules/tools/readvalue.c:290
+msgid "Value"
+msgstr "Valor"
+
+#: libprocess/gwygrainvalue.c:1121
+msgid "Area"
+msgstr "Área"
+
+#: libprocess/gwygrainvalue.c:1122 app/data-browser.c:5624 app/toolbox.c:115
+msgid "Volume"
+msgstr "Volume"
+
+#: libprocess/gwygrainvalue.c:1123
+msgid "Boundary"
+msgstr "Fronteira"
+
+#: libprocess/gwygrainvalue.c:1124 modules/process/pat_synth.c:830
+#: modules/process/pat_synth.c:1132 modules/process/pat_synth.c:1467
+#: modules/tools/linestats.c:171 modules/volume/volume_linestat.c:149
+msgid "Slope"
+msgstr "Inclinação"
+
+#: libprocess/gwygrainvalue.c:1125 modules/process/curvature.c:212
+#: modules/process/curvature.c:615
+msgid "Curvature"
+msgstr "Curvatura"
+
+#: libprocess/gwygrainvalue.c:1126
+msgid "Moment"
+msgstr "Momento"
+
+#: libprocess/gwygrainvalue.c:1130
+msgid "User"
+msgstr "Usuário"
+
+#: libprocess/gwyprocessenums.c:44 modules/process/preview.h:263
+msgid "Union"
+msgstr "União"
+
+#: libprocess/gwyprocessenums.c:45 modules/process/preview.h:255
+msgid "Intersection"
+msgstr "Intersecção"
+
+#: libprocess/gwyprocessenums.c:79
+msgid "Detected"
+msgstr "Detectado"
+
+#: libprocess/gwyprocessenums.c:80
+msgid "Parallel"
+msgstr "Paralelo"
+
+#: libprocess/gwyprocessenums.c:81
+msgid "Triangular"
+msgstr "Triangular"
+
+#: libprocess/gwyprocessenums.c:82
+msgid "symmetry|Square"
+msgstr "simetria|Quadrada"
+
+#: libprocess/gwyprocessenums.c:83
+msgid "Rhombic"
+msgstr "Rômbico"
+
+#: libprocess/gwyprocessenums.c:84
+msgid "Hexagonal"
+msgstr "Hexagonal"
+
+#: libprocess/gwyprocessenums.c:102
+msgid "Hat"
+msgstr "Chapéu"
+
+#: libprocess/gwyprocessenums.c:126
+#: libgwydgets/gwygraphwindowmeasuredialog.c:52
+#: modules/process/convolution_filter.c:412
+msgid "Horizontal"
+msgstr "Horizontal"
+
+#: libprocess/gwyprocessenums.c:127 modules/process/convolution_filter.c:428
+msgid "Vertical"
+msgstr "Vertical"
+
+#: libprocess/gwyprocessenums.c:144
+msgid "Haar"
+msgstr "A sua"
+
+#: libprocess/gwyprocessenums.c:145
+msgid "Daubechies 4"
+msgstr "Daubechies 4"
+
+#: libprocess/gwyprocessenums.c:146
+msgid "Daubechies 6"
+msgstr "Daubechies 6"
+
+#: libprocess/gwyprocessenums.c:147
+msgid "Daubechies 8"
+msgstr "Daubechies 8"
+
+#: libprocess/gwyprocessenums.c:148
+msgid "Daubechies 12"
+msgstr "Daubechies 12"
+
+#: libprocess/gwyprocessenums.c:149
+msgid "Daubechies 20"
+msgstr "Daubechies 20"
+
+#: libprocess/gwyprocessenums.c:166
+msgid "Universal"
+msgstr "Universal"
+
+#: libprocess/gwyprocessenums.c:167
+msgid "Scale adaptive"
+msgstr "Escala adaptável"
+
+#: libprocess/gwyprocessenums.c:168
+msgid "Scale and space adaptive"
+msgstr "Escala e espaço adaptáveis"
+
+#. TRANSLATORS: Interpolation type (AKA nearest neighbour)
+#: libprocess/gwyprocessenums.c:207 modules/file/imgexport.c:3756
+#: modules/xyz/xyz_raster.c:609
+msgid "Round"
+msgstr "Arredondar"
+
+#: libprocess/gwyprocessenums.c:208 modules/file/imgexport.c:3757
+#: modules/xyz/xyz_raster.c:610
+msgid "Linear"
+msgstr "Linear"
+
+#: libprocess/gwyprocessenums.c:209
+msgid "Key"
+msgstr "Chave"
+
+#: libprocess/gwyprocessenums.c:210
+msgid "BSpline"
+msgstr "BSpline"
+
+#: libprocess/gwyprocessenums.c:211
+msgid "OMOMS"
+msgstr "OMOMS"
+
+#: libprocess/gwyprocessenums.c:212
+msgid "NNA"
+msgstr "NNA"
+
+#: libprocess/gwyprocessenums.c:213
+msgid "Schaum"
+msgstr "Schaum"
+
+#: libprocess/gwyprocessenums.c:245
+msgid "windowing|None"
+msgstr "janela|Nenhuma"
+
+#: libprocess/gwyprocessenums.c:246
+msgid "Hann"
+msgstr "Hann"
+
+#: libprocess/gwyprocessenums.c:247
+msgid "Hamming"
+msgstr "Hamming"
+
+#: libprocess/gwyprocessenums.c:248
+msgid "Blackmann"
+msgstr "Blackmann"
+
+#: libprocess/gwyprocessenums.c:249
+msgid "Lanczos"
+msgstr "Lanczos"
+
+#: libprocess/gwyprocessenums.c:250
+msgid "Welch"
+msgstr "Welch"
+
+#: libprocess/gwyprocessenums.c:251
+msgid "Rect"
+msgstr "Rect"
+
+#: libprocess/gwyprocessenums.c:252
+msgid "Nuttall"
+msgstr "Nuttall"
+
+#: libprocess/gwyprocessenums.c:253
+msgid "Flat-top"
+msgstr "Topo-plano"
+
+#: libprocess/gwyprocessenums.c:254
+msgid "Kaiser 2.5"
+msgstr "Kaiser 2.5"
+
+#: libprocess/gwyprocessenums.c:271
+msgid "correlation|Normal"
+msgstr "correlação|Normal"
+
+#: libprocess/gwyprocessenums.c:272
+msgid "FFT"
+msgstr "FFT"
+
+#: libprocess/gwyprocessenums.c:273
+msgid "Phase only"
+msgstr "Apenas fase"
+
+#: libprocess/gwyprocessenums.c:306
+msgid "Exclude masked region"
+msgstr "Excluir região mascarada"
+
+#: libprocess/gwyprocessenums.c:307
+msgid "Include only masked region"
+msgstr "Incluir somente região mascarada"
+
+#: libprocess/gwyprocessenums.c:308
+msgid "Use entire image (ignore mask)"
+msgstr "Usar imagem inteira (ignorar máscara)"
+
+#: libprocess/gwyprocessenums.c:604
+msgid "distance|City-block"
+msgstr "distância|Bloco-cidade"
+
+#: libprocess/gwyprocessenums.c:605
+msgid "distance|Chess"
+msgstr "distância|Xadrêz"
+
+#: libprocess/gwyprocessenums.c:606
+msgid "distance|Octagonal 4,8"
+msgstr "distância|Octagonal 4,8"
+
+#: libprocess/gwyprocessenums.c:607
+msgid "distance|Octagonal 8,4"
+msgstr "distância|Octagonal 8,4"
+
+#: libprocess/gwyprocessenums.c:608
+msgid "distance|Octagonal"
+msgstr "distância|Octagonal"
+
+#: libprocess/gwyprocessenums.c:609
+msgid "distance|Euclidean"
+msgstr "distância|Euclidiana"
+
+#: libprocess/gwyshapefitpreset.c:342
+msgid "Grating (simple)"
+msgstr "Gradeamento (simples)"
+
+#: libprocess/gwyshapefitpreset.c:343
+msgid "Grating (3-level)"
+msgstr "Gradeamento (3 níveis)"
+
+#: libprocess/gwyshapefitpreset.c:344 modules/process/pat_synth.c:215
+msgid "Holes"
+msgstr "Buracos"
+
+#: libprocess/gwyshapefitpreset.c:345
+msgid "Sphere"
+msgstr "Esfera"
+
+#: libprocess/gwyshapefitpreset.c:346
+msgid "Cylinder (lying)"
+msgstr "Cilindro (deitado)"
+
+#: libprocess/gwyshapefitpreset.c:349
+msgid "Pyramid (diamond)"
+msgstr "Pirâmide (diamante)"
+
+#: libprocess/gwyshapefitpreset.c:350
+#, fuzzy
+msgid "Parabolic bump"
+msgstr "Passo parabólico"
+
+#: libprocess/gwyshapefitpreset.c:351
+msgid "Ring"
+msgstr "Anel"
+
+#: libprocess/morph_lib.c:169 libprocess/tip.c:1052
+msgid "Dilation..."
+msgstr "Dilatação..."
+
+#: libprocess/morph_lib.c:235 libprocess/tip.c:1173
+msgid "Erosion..."
+msgstr "Erosão..."
+
+#: libprocess/morph_lib.c:305
+msgid "Certainty map..."
+msgstr "Mapa de certeza..."
+
+#: libprocess/morph_lib.c:406 libprocess/morph_lib.c:553
+#, c-format
+msgid "Iterating estimate (iteration %d)..."
+msgstr "Estimando interação (interação %d)..."
+
+#: libprocess/morph_lib.c:415 libprocess/morph_lib.c:574
+#, c-format
+msgid "One image location produced refinement"
+msgid_plural "%d image locations produced refinement"
+msgstr[0] "Um refinamento local de imagem produzido"
+msgstr[1] "%d refinamentos locais de imagem produzidos"
+
+#: libprocess/morph_lib.c:514
+msgid "Searching for local maxima..."
+msgstr "Procurando por máximo local..."
+
+#: libprocess/morph_lib.c:536
+#, c-format
+msgid "Found one internal local maximum"
+msgid_plural "Found %d internal local maxima"
+msgstr[0] "Um máximo local interno encontrado"
+msgstr[1] "%d máximos locais internos encontrados"
+
+#: libprocess/tip.c:431
+msgid "Pyramid"
+msgstr "Pirâmide"
+
+#: libprocess/tip.c:432 libprocess/tip.c:438 libprocess/tip.c:444
+msgid "Pyramidal"
+msgstr "Piramidal"
+
+#: libprocess/tip.c:437
+msgid "Contact"
+msgstr "Contato"
+
+#: libprocess/tip.c:443
+msgid "Noncontact"
+msgstr "Sem contato"
+
+#: libprocess/tip.c:449
+msgid "Delta function"
+msgstr "Função delta"
+
+#: libprocess/tip.c:450
+msgid "Analytical"
+msgstr "Analítico"
+
+#: libprocess/tip.c:455 modules/process/fibre_synth.c:259
+msgid "Parabola"
+msgstr "Parábola"
+
+#: libprocess/tip.c:456 libprocess/tip.c:462
+msgid "Symmetric"
+msgstr "Simétrico"
+
+#: libprocess/tip.c:461
+msgid "Cone"
+msgstr "Cone"
+
+#: libprocess/tip.c:467
+msgid "Elliptical parabola"
+msgstr ""
+
+#: libprocess/tip.c:468
+#, fuzzy
+msgid "Asymmetric"
+msgstr "Simétrico"
+
+#: libprocess/tip.c:1348 libprocess/tip.c:1376 libprocess/tip.c:1425
+#: libprocess/tip.c:1452
+msgid "Converting fields"
+msgstr "Convertendo campos"
+
+#: libprocess/tip.c:1358
+msgid "Starting partial estimation"
+msgstr "Iniciando estimativa parcial"
+
+#: libprocess/tip.c:1435
+msgid "Starting full estimation"
+msgstr "Iniciando estimativa completa"
+
+#: libprocess/triangulation.c:2084 modules/process/calcoefs_view.c:793
+#: modules/process/lat_synth.c:1178
+msgid "Triangulating..."
+msgstr "Triangulando..."
+
+#: libgwydgets/gwy3dwindow.c:575
+msgid "Rotate view (R)"
+msgstr "Girar visão (R)"
+
+#: libgwydgets/gwy3dwindow.c:580
+msgid "Scale view as a whole (S)"
+msgstr "Visualizar escala como um todo (S)"
+
+#: libgwydgets/gwy3dwindow.c:585
+msgid "Scale value range (V)"
+msgstr "Intervalo de valor da escala (V)"
+
+#: libgwydgets/gwy3dwindow.c:590
+msgid "Move light source (L)"
+msgstr "Mover fonte de luz (L)"
+
+#: libgwydgets/gwy3dwindow.c:666
+msgid "Show full controls"
+msgstr "Mostrar todos os controles"
+
+#: libgwydgets/gwy3dwindow.c:691
+msgid "Hide full controls"
+msgstr "Esconder todos os controles"
+
+#: libgwydgets/gwy3dwindow.c:707 modules/file/imgexport.c:4745
+#: modules/process/fit-shape.c:462
+msgid "adjective|Basic"
+msgstr "adjetivo|Básico"
+
+#: libgwydgets/gwy3dwindow.c:712
+msgid "Light & Material"
+msgstr "Luz & Material"
+
+#: libgwydgets/gwy3dwindow.c:717
+msgid "Labels"
+msgstr "Rótulos"
+
+#: libgwydgets/gwy3dwindow.c:722
+#, fuzzy
+msgid "Colorbar"
+msgstr "Cor"
+
+#: libgwydgets/gwy3dwindow.c:838 modules/process/facet_analysis.c:335
+#: modules/process/facet_analysis.c:351 modules/process/shade.c:253
+#: modules/process/tilt.c:223
+msgid "φ:"
+msgstr "φ:"
+
+#: libgwydgets/gwy3dwindow.c:838 libgwydgets/gwy3dwindow.c:843
+#: libgwydgets/gwy3dwindow.c:1013 libgwydgets/gwy3dwindow.c:1020
+#: modules/process/correct_affine.c:461 modules/process/facet_analysis.c:238
+#: modules/process/facet_analysis.c:370 modules/process/indent_analyze.c:438
+#: modules/process/measure_lattice.c:381 modules/process/rotate.c:264
+#: modules/process/shade.c:245 modules/process/shade.c:253
+#: modules/process/synth.h:379 modules/process/synth.h:410
+#: modules/process/tilt.c:211 modules/process/tilt.c:223
+#: modules/process/tip_model.c:234 modules/process/tip_model.c:240
+#: modules/process/unrotate.c:334 modules/tools/distance.c:197
+#: modules/tools/readvalue.c:223 modules/tools/stats.c:319
+msgid "deg"
+msgstr "grau"
+
+#: libgwydgets/gwy3dwindow.c:843 modules/process/facet_analysis.c:334
+#: modules/process/facet_analysis.c:350 modules/process/shade.c:245
+#: modules/process/tilt.c:211
+msgid "θ:"
+msgstr "θ:"
+
+#: libgwydgets/gwy3dwindow.c:849 modules/process/cwt.c:151
+msgid "_Scale:"
+msgstr "_Escala:"
+
+#: libgwydgets/gwy3dwindow.c:856
+msgid "_Value scale:"
+msgstr "Escala de _valor:"
+
+#: libgwydgets/gwy3dwindow.c:862
+msgid "Ph_ysical scale:"
+msgstr "Escala fís_ica:"
+
+#: libgwydgets/gwy3dwindow.c:876
+msgid "verb|Set"
+msgstr "Definir"
+
+#: libgwydgets/gwy3dwindow.c:886
+msgid "Line _width:"
+msgstr "Larg_ura da linha:"
+
+#: libgwydgets/gwy3dwindow.c:886 libgwydgets/gwy3dwindow.c:1194
+#: libgwydgets/gwy3dwindow.c:1204 libgwydgets/gwy3dwindow.c:1235
+#: libgwydgets/gwygraphareadialog.c:157 libgwydgets/gwygraphareadialog.c:173
+#: modules/file/hdrimage.cc:2246 modules/file/hdrimage.cc:2252
+#: modules/file/pixmap.c:820 modules/file/pixmap.c:826
+#: modules/process/angle_dist.c:188 modules/process/angle_dist.c:213
+#: modules/process/col_synth.c:486 modules/process/crosscor.c:252
+#: modules/process/crosscor.c:260 modules/process/crosscor.c:276
+#: modules/process/crosscor.c:284 modules/process/crosscor.c:300
+#: modules/process/crosscor.c:308 modules/process/cwt.c:151
+#: modules/process/dimensions.h:88 modules/process/edge.c:672
+#: modules/process/entropy.c:242 modules/process/extend.c:220
+#: modules/process/extend.c:227 modules/process/extend.c:234
+#: modules/process/extend.c:241 modules/process/facet_analysis.c:362
+#: modules/process/fbm_synth.c:383 modules/process/hough.c:203
+#: modules/process/local_contrast.c:146 modules/process/mark_disconn.c:263
+#: modules/process/mask_morph.c:237 modules/process/median-bg.c:209
+#: modules/process/neural.c:623 modules/process/neural.c:631
+#: modules/process/psdf_logphi.c:276 modules/process/rank.c:188
+#: modules/process/scale.c:237 modules/process/scale.c:246
+#: modules/process/scars.c:353 modules/process/scars.c:361
+#: modules/process/semsim.c:227 modules/process/slope_dist.c:365
+#: modules/process/slope_dist.c:393 modules/process/sphere-revolve.c:346
+#: modules/process/straighten_path.c:278 modules/process/synth.h:280
+#: modules/process/synth.h:501 modules/process/tip_blind.c:334
+#: modules/process/tip_blind.c:342 modules/process/volumize_layers.c:240
+#: modules/process/volumize_layers.c:245 modules/process/volumize_layers.c:250
+#: modules/process/wpour_mark.c:320 modules/tools/filter.c:291
+#: modules/tools/level3.c:244 modules/tools/maskedit.c:528
+#: modules/tools/maskedit.c:629 modules/tools/pathlevel.c:256
+#: modules/tools/profile.c:377 modules/tools/profile.c:503
+#: modules/tools/readvalue.c:222 modules/tools/readvalue.c:378
+#: modules/tools/roughness.c:868 modules/volume/volume_slice.c:446
+#: modules/volume/volume_slice.c:469 modules/volume/volume_slice.c:492
+#: modules/xyz/xyz_drift.c:738 modules/xyz/xyz_drift.c:753
+#: modules/xyz/xyz_raster.c:382 modules/xyz/xyz_raster.c:388
+msgid "px"
+msgstr "px"
+
+#: libgwydgets/gwy3dwindow.c:891
+msgid "Show _axes"
+msgstr "Mostrar ei_xos"
+
+#: libgwydgets/gwy3dwindow.c:900
+msgid "Show _labels"
+msgstr "Mostrar _rótulos"
+
+#: libgwydgets/gwy3dwindow.c:909
+msgid "_Orthographic projection"
+msgstr "Projeção _ortográfica"
+
+#: libgwydgets/gwy3dwindow.c:918
+msgid "_Hide masked"
+msgstr "Esconder _máscarado"
+
+#: libgwydgets/gwy3dwindow.c:934
+msgid "_Lighting"
+msgstr "I_luminação"
+
+#: libgwydgets/gwy3dwindow.c:935
+msgid "_Gradient"
+msgstr "_Gradiente"
+
+#: libgwydgets/gwy3dwindow.c:936
+msgid "_Overlay"
+msgstr "Revestiment_o"
+
+#: libgwydgets/gwy3dwindow.c:937
+msgid "_Overlay - no light"
+msgstr "Revestiment_o - sem luz"
+
+#: libgwydgets/gwy3dwindow.c:992
+msgid "_Material:"
+msgstr "_Material:"
+
+#: libgwydgets/gwy3dwindow.c:1013
+msgid "_Light φ:"
+msgstr "_Luz φ:"
+
+#: libgwydgets/gwy3dwindow.c:1020
+msgid "L_ight θ:"
+msgstr "L_uz θ:"
+
+#: libgwydgets/gwy3dwindow.c:1052 libgwydgets/gwy3dwindow.c:1243
+#: app/toolbox-editor.c:216 modules/file/hdrimage.cc:2213
+#: modules/file/imgexport.c:4708 modules/file/pixmap.c:789
+#: modules/file/rawfile.c:424 modules/process/angle_dist.c:172
+#: modules/process/bdep_synth.c:341 modules/process/calcoefs_new.c:371
+#: modules/process/calibrate.c:383 modules/process/col_synth.c:392
+#: modules/process/correct_affine.c:346 modules/process/curvature.c:617
+#: modules/process/cwt.c:135 modules/process/deposit_synth.c:350
+#: modules/process/diff_synth.c:411 modules/process/domain_synth.c:354
+#: modules/process/drift.c:245 modules/process/dwt.c:166
+#: modules/process/dwtanisotropy.c:184 modules/process/edge.c:638
+#: modules/process/extend.c:192 modules/process/facet-level.c:193
+#: modules/process/facet_analysis.c:275 modules/process/fbm_synth.c:303
+#: modules/process/fft.c:336 modules/process/fft_filter_2d.c:417
+#: modules/process/fft_synth.c:341 modules/process/fibre_synth.c:422
+#: modules/process/fractal.c:228 modules/process/grain_edge.c:212
+#: modules/process/grain_mark.c:246 modules/process/grain_wshed.c:168
+#: modules/process/hough.c:174 modules/process/lat_synth.c:567
+#: modules/process/latsim.c:159 modules/process/level.c:245
+#: modules/process/linematch.c:771 modules/process/lno_synth.c:431
+#: modules/process/local_contrast.c:130 modules/process/logistic.c:234
+#: modules/process/mark_disconn.c:208 modules/process/mask_distribute.c:152
+#: modules/process/measure_lattice.c:246 modules/process/median-bg.c:180
+#: modules/process/mfm_current.c:332 modules/process/mfm_field.c:281
+#: modules/process/mfm_findshift.c:230 modules/process/mfm_parallel.c:333
+#: modules/process/mfm_shift.c:170 modules/process/noise_synth.c:334
+#: modules/process/obj_synth.c:438 modules/process/pat_synth.c:385
+#: modules/process/phase_synth.c:205 modules/process/pid.c:197
+#: modules/process/polydistort.c:210 modules/process/polylevel.c:373
+#: modules/process/psdf_logphi.c:249 modules/process/rank.c:158
+#: modules/process/rotate.c:243 modules/process/scale.c:196
+#: modules/process/scars.c:317 modules/process/semsim.c:211
+#: modules/process/shade.c:210 modules/process/slope_dist.c:275
+#: modules/process/sphere-revolve.c:317 modules/process/straighten_path.c:248
+#: modules/process/tilt.c:161 modules/process/tip_model.c:167
+#: modules/process/unrotate.c:220 modules/process/volumize_layers.c:221
+#: modules/process/wave_synth.c:368 modules/process/wpour_mark.c:278
+#: modules/volume/volume_calibrate.c:370 modules/volume/volume_extract.c:324
+#: modules/volume/volume_kmeans.c:154 modules/volume/volume_kmedians.c:147
+#: modules/volume/volume_linestat.c:297 modules/volume/volume_slice.c:294
+msgid "_Reset"
+msgstr "_Reiniciar"
+
+#: libgwydgets/gwy3dwindow.c:1141
+msgid "X-axis"
+msgstr "Eixo x"
+
+#: libgwydgets/gwy3dwindow.c:1142
+msgid "Y-axis"
+msgstr "Eixo y"
+
+#: libgwydgets/gwy3dwindow.c:1143
+msgid "Minimum z value"
+msgstr "Valor mínimo de z"
+
+#: libgwydgets/gwy3dwindow.c:1144
+msgid "Maximum z value"
+msgstr "Valor máximo de z"
+
+#: libgwydgets/gwy3dwindow.c:1167 modules/file/imgexport.c:3806
+msgid "_Label:"
+msgstr "Rótu_lo:"
+
+#: libgwydgets/gwy3dwindow.c:1180
+msgid "_Text:"
+msgstr "_Texto:"
+
+#: libgwydgets/gwy3dwindow.c:1185
+msgid "Move label"
+msgstr "Mover rótulo"
+
+#: libgwydgets/gwy3dwindow.c:1194
+msgid "_Horizontally:"
+msgstr "_Horizontalmente:"
+
+#: libgwydgets/gwy3dwindow.c:1204
+msgid "_Vertically:"
+msgstr "_Verticalmente:"
+
+#: libgwydgets/gwy3dwindow.c:1212
+msgid "A_ll labels have the same size"
+msgstr ""
+
+#: libgwydgets/gwy3dwindow.c:1223
+msgid "Scale size _automatically"
+msgstr "Ajustar tamanho _automaticamente"
+
+#: libgwydgets/gwy3dwindow.c:1235 modules/tools/filter.c:291
+msgid "Si_ze:"
+msgstr "Tamanh_o:"
+
+#: libgwydgets/gwy3dwindow.c:1277
+msgid "Show false _colorbar"
+msgstr "Mostrar falsa barra de _cores"
+
+#: libgwydgets/gwy3dwindow.c:1286
+msgid "Reserve space for _colorbar"
+msgstr ""
+
+#: libgwydgets/gwy3dwindow.c:1302 modules/process/lat_synth.c:651
+#: modules/process/obj_synth.c:542 modules/process/pat_synth.c:1458
+#: modules/process/phase_synth.c:279
+msgid "_Size:"
+msgstr "Tamanho:"
+
+#: libgwydgets/gwy3dwindow.c:1311
+#, fuzzy
+msgid "_Vertical alignment:"
+msgstr "Tamanho _vertical:"
+
+#: libgwydgets/gwy3dwindow.c:1844 libgwydgets/gwy3dwindow.c:1897
+msgid "S_witch to Lighting Mode"
+msgstr "_Alternar para Modo de Iluminação"
+
+#: libgwydgets/gwy3dwindow.c:1852 libgwydgets/gwy3dwindow.c:1874
+msgid "S_witch to Overlay Mode"
+msgstr "_Alternar para Modo de Revestimento"
+
+#: libgwydgets/gwy3dwindow.c:1866 libgwydgets/gwy3dwindow.c:1889
+msgid "S_witch to Color Gradient Mode"
+msgstr "_Alternar para Modo de Gradiente de Cores"
+
+#: libgwydgets/gwy3dwindow.c:1905
+msgid "T_oggle light"
+msgstr "C_omutar luz"
+
+#: libgwydgets/gwyaxisdialog.c:75
+msgid "Axis Properties"
+msgstr "Propriedades do eixo"
+
+#: libgwydgets/gwyaxisdialog.c:88
+msgid "Label Text"
+msgstr "Texto do rótulo"
+
+#: libgwydgets/gwydatawindow.c:891
+msgid "_Unset Color Gradient"
+msgstr "_Desativar gradiente de cores"
+
+#. TRANSLATORS: Countable (more false colour gradients).
+#: libgwydgets/gwydatawindow.c:899
+msgid "_More..."
+msgstr "_Mais..."
+
+#: libgwydgets/gwydatawindow.c:928 libgwydgets/gwyoptionmenus.c:828
+msgid "Choose Color Gradient"
+msgstr "Escolher gradiente de cores"
+
+#: libgwydgets/gwydgetenums.c:46 modules/process/neural.c:420
+msgid "Hidden"
+msgstr "Escondido"
+
+#: libgwydgets/gwydgetenums.c:47 libgwydgets/gwygraphwindowmeasuredialog.c:572
+#: modules/file/imgexport.c:474 modules/tools/selectionmanager.c:274
+msgid "Points"
+msgstr "Pontos"
+
+#: libgwydgets/gwydgetenums.c:49
+msgid "Line + points"
+msgstr "Linha + pontos"
+
+#: libgwydgets/gwydgetutils.c:848
+msgid "Change Mask Color"
+msgstr "Mudar máscara de cores"
+
+#: libgwydgets/gwygrainvaluemenu.c:184
+msgid "Quantity"
+msgstr "Quantidade"
+
+#: libgwydgets/gwygrainvaluemenu.c:194 libgwydgets/gwygrainvaluemenu.c:207
+#: modules/process/curvature.c:750
+msgid "Symbol"
+msgstr "Símbolo"
+
+#: libgwydgets/gwygrainvaluemenu.c:217
+msgid "Enabled"
+msgstr "Habilitado"
+
+#: libgwydgets/gwygraphareadialog.c:100
+msgid "Curve Properties"
+msgstr "Propriedades da curva"
+
+#: libgwydgets/gwygraphareadialog.c:101
+msgid "Pre_v"
+msgstr "Pre_v"
+
+#: libgwydgets/gwygraphareadialog.c:104
+msgid "_Next"
+msgstr "_Próximo"
+
+#: libgwydgets/gwygraphareadialog.c:123 modules/file/rawgraph.c:302
+msgid "Plot _style:"
+msgstr "E_stilo do gráfico:"
+
+#: libgwydgets/gwygraphareadialog.c:131
+msgid "Pl_ot color:"
+msgstr "C_or do gráfico:"
+
+#: libgwydgets/gwygraphareadialog.c:151
+msgid "Point _type:"
+msgstr "_Tipo de ponto:"
+
+#: libgwydgets/gwygraphareadialog.c:157
+msgid "_Point size:"
+msgstr "Tamanho do _ponto:"
+
+#: libgwydgets/gwygraphareadialog.c:167
+msgid "_Line type:"
+msgstr "Tipo da _linha:"
+
+#: libgwydgets/gwygraphareadialog.c:173 modules/file/imgexport.c:3154
+msgid "Line t_hickness:"
+msgstr "Espessura da lin_ha:"
+
+#: libgwydgets/gwygraphareadialog.c:180
+msgid "<b>Label Te_xt</b>"
+msgstr "<b>Te_xto do rótulo</b>"
+
+#: libgwydgets/gwygraphareadialog.c:397
+msgid "Set Curve Color"
+msgstr "Definir cor da curva"
+
+#: libgwydgets/gwygraphareadialog.c:549 modules/process/mask_morph.c:178
+msgid "Square"
+msgstr "Quadrado"
+
+#: libgwydgets/gwygraphareadialog.c:551 modules/process/mask_morph.c:179
+msgid "Diamond"
+msgstr "Diamante"
+
+#: libgwydgets/gwygraphareadialog.c:552
+msgid "Cross"
+msgstr "Cruz"
+
+#: libgwydgets/gwygraphareadialog.c:553
+msgid "Diagonal cross"
+msgstr "Cruz diagonal"
+
+#: libgwydgets/gwygraphareadialog.c:554
+msgid "Asterisk"
+msgstr "Asterisco"
+
+#: libgwydgets/gwygraphareadialog.c:555
+msgid "Star"
+msgstr "Estrela"
+
+#: libgwydgets/gwygraphareadialog.c:556
+msgid "Triangle up"
+msgstr "Triângulo para cima"
+
+#: libgwydgets/gwygraphareadialog.c:557
+msgid "Triangle down"
+msgstr "Triângulo para baixo"
+
+#: libgwydgets/gwygraphareadialog.c:558
+msgid "Triangle left"
+msgstr "Tiângulo para a esquerda"
+
+#: libgwydgets/gwygraphareadialog.c:559
+msgid "Triangle right"
+msgstr "Tiângulo para a direita"
+
+#: libgwydgets/gwygraphareadialog.c:560
+msgid "Full square"
+msgstr "Quadrado preenchido"
+
+#: libgwydgets/gwygraphareadialog.c:561 modules/process/mask_morph.c:176
+msgid "Disc"
+msgstr "Disco"
+
+#: libgwydgets/gwygraphareadialog.c:562
+msgid "Full diamond"
+msgstr "Diamante preenchido"
+
+#: libgwydgets/gwygraphareadialog.c:563
+msgid "Full triangle up"
+msgstr "Triângulo preenchido para cima"
+
+#: libgwydgets/gwygraphareadialog.c:564
+msgid "Full triangle down"
+msgstr "Triângulo preenchido para baixo"
+
+#: libgwydgets/gwygraphareadialog.c:565
+msgid "Full triangle left"
+msgstr "Triângulo preenchido para a esquerda"
+
+#: libgwydgets/gwygraphareadialog.c:566
+msgid "Full triangle right"
+msgstr "Triângulo preenchido para a direita"
+
+#: libgwydgets/gwygraphareadialog.c:628
+msgid "line-style|Solid"
+msgstr "estilo-de-linha|Sólido"
+
+#: libgwydgets/gwygraphareadialog.c:629
+msgid "line-style|Dash"
+msgstr "estilo-de-linha|Tracejado"
+
+#: libgwydgets/gwygraphcurves.c:448
+msgid "Description"
+msgstr "Descrição"
+
+#: libgwydgets/gwygraphcurves.c:460
+msgid "Mode"
+msgstr "Modo"
+
+#: libgwydgets/gwygraphcurves.c:478
+msgid "Color"
+msgstr "Cor"
+
+#: libgwydgets/gwygraphcurves.c:491
+msgid "Point Type"
+msgstr "Tipo de ponto"
+
+#: libgwydgets/gwygraphcurves.c:513
+msgid "Line Style"
+msgstr "Estilo de linha"
+
+#: libgwydgets/gwygraphlabeldialog.c:63
+msgid "Label Properties"
+msgstr "Propriedades do rótulo"
+
+#: libgwydgets/gwygraphlabeldialog.c:74
+#, fuzzy
+msgid "_Frame thickness:"
+msgstr "Espessura da moldura"
+
+#: libgwydgets/gwygraphlabeldialog.c:81
+msgid "_Reversed layout"
+msgstr "Layout _reverso"
+
+#: libgwydgets/gwygraphmodel.c:2180
+msgid "Abscissa"
+msgstr "Abscissa"
+
+#: libgwydgets/gwygraphwindow.c:163 app/toolbox-editor.c:1015 app/toolbox.c:113
+msgid "Graph"
+msgstr "Gráfico"
+
+#: libgwydgets/gwygraphwindow.c:170 modules/file/hdrimage.cc:472
+#: modules/process/fit-shape.c:666 modules/process/psf.c:229
+msgid "Data"
+msgstr "Dados"
+
+#: libgwydgets/gwygraphwindow.c:183
+msgid "Curves"
+msgstr "Curvas"
+
+#: libgwydgets/gwygraphwindow.c:197
+msgid "Measure distances in graph"
+msgstr "Medir distâncias no gráfico"
+
+#: libgwydgets/gwygraphwindow.c:209
+msgid "Zoom in by mouse selection"
+msgstr "Aumentar zoom por seleção do mouse"
+
+#: libgwydgets/gwygraphwindow.c:221
+msgid "Zoom out to full curve"
+msgstr "Diminuir zoom para curva completa"
+
+#: libgwydgets/gwygraphwindow.c:233
+msgid "Toggle logarithmic x axis"
+msgstr "Alternar para eixo x logarítmico"
+
+#: libgwydgets/gwygraphwindow.c:245
+msgid "Toggle logarithmic y axis"
+msgstr "Alternar para eixo y logarítmico"
+
+#: libgwydgets/gwygraphwindowmeasuredialog.c:51
+msgid "Intersections"
+msgstr "Intersecções"
+
+#: libgwydgets/gwygraphwindowmeasuredialog.c:53
+msgid "Points anywhere"
+msgstr "Pontos em qualquer lugar"
+
+#: libgwydgets/gwygraphwindowmeasuredialog.c:394
+#: libgwydgets/gwygraphwindowmeasuredialog.c:580 modules/tools/linestats.c:170
+#: modules/tools/roughness.c:517 modules/volume/volume_linestat.c:159
+msgid "Length"
+msgstr "Comprimento"
+
+#: libgwydgets/gwygraphwindowmeasuredialog.c:398
+#: libgwydgets/gwygraphwindowmeasuredialog.c:588 app/gwyplaintool.c:1018
+#: modules/process/fibre_synth.c:534 modules/process/lat_synth.c:747
+#: modules/process/obj_synth.c:567 modules/process/pat_synth.c:847
+#: modules/process/pat_synth.c:1149 modules/process/pat_synth.c:1484
+msgid "Height"
+msgstr "Altura"
+
+#: libgwydgets/gwygraphwindowmeasuredialog.c:526
+msgid "Measure Distances"
+msgstr "Medir distâncias"
+
+#: libgwydgets/gwygraphwindowmeasuredialog.c:548
+msgid "Curve:"
+msgstr "Curva:"
+
+#: libgwydgets/gwygraphwindowmeasuredialog.c:553
+#: modules/process/linematch.c:795 modules/process/semsim.c:249
+#: modules/xyz/xyz_level.c:254
+msgid "Method:"
+msgstr "Método:"
+
+#: libgwydgets/gwygraphwindowmeasuredialog.c:592 modules/process/crosscor.c:331
+msgid "Angle"
+msgstr "Ângulo"
+
+#. TRANSLATORS: Preferred resource.
+#: libgwydgets/gwyoptionmenus.c:456
+msgid "Preferred"
+msgstr "Preferido"
+
+#: libgwydgets/gwyoptionmenus.c:470 app/meta.c:410
+#: modules/file/imgexport.c:4110 modules/file/imgexport.c:4555
+#: modules/file/rawfile.c:995 modules/process/convolution_filter.c:538
+#: modules/process/neural.c:418 modules/tools/selectionmanager.c:345
+msgid "Name"
+msgstr "Nome"
+
+#: libgwydgets/gwyoptionmenus.c:827
+msgid "Color Gradient"
+msgstr "Gradiente de cores"
+
+#: libgwydgets/gwyoptionmenus.c:842
+msgid "GL Material"
+msgstr "Material GL"
+
+#: libgwydgets/gwyoptionmenus.c:843
+msgid "Choose GL Material"
+msgstr "Escolher material GL"
+
+#: libgwydgets/gwyscitext.c:80
+msgid "_Bold"
+msgstr "_Negrito"
+
+#: libgwydgets/gwyscitext.c:86
+msgid "_Italic"
+msgstr "_Itálico"
+
+#: libgwydgets/gwyscitext.c:92
+msgid "_Subscript"
+msgstr "_Subscrito"
+
+#: libgwydgets/gwyscitext.c:98
+msgid "Su_perscript"
+msgstr "S_obrescrito"
+
+#: libgwydgets/gwyscitext.c:251
+msgid "A_dd symbol"
+msgstr "A_dicionar símbolo"
+
+#: libgwydgets/gwyscitext.c:274 modules/file/rawfile.c:553
+#: modules/xyz/xyz_drift.c:580 modules/xyz/xyz_raster.c:419
+msgid "Preview"
+msgstr "Pré-visualizar"
+
+#: libgwymodule/gwymodule-file.c:549 modules/file/err.h:41
+#: modules/file/pixmap.c:497
+#, c-format
+msgid "Cannot open file for reading: %s."
+msgstr "Não foi possível abrir o arquivo para leitura: %s."
+
+#: libgwymodule/gwymodule-file.c:558
+msgid "No module can load this file type."
+msgstr "Nenhum módulo pode carregar este tipo de arquivo."
+
+#: libgwymodule/gwymodule-file.c:665
+msgid "No module can save to this file type."
+msgstr "Nenhum módulo pode salvar para este tipo de arquivo."
+
+#: libgwymodule/gwymodulebrowser.c:66
+msgid "Module Browser"
+msgstr "Navegador de módulos"
+
+#: libgwymodule/gwymodulebrowser.c:189
+msgid "Module"
+msgstr "Módulo"
+
+#: libgwymodule/gwymodulebrowser.c:189
+msgid "Version"
+msgstr "Versão"
+
+#: libgwymodule/gwymodulebrowser.c:189
+msgid "Author"
+msgstr "Autor"
+
+#: libgwymodule/gwymodulebrowser.c:244
+msgid "Name-Version:"
+msgstr "Nome-Versão:"
+
+#: libgwymodule/gwymodulebrowser.c:245 libgwymodule/gwymodulebrowser.c:268
+#: modules/process/grain_stat.c:186
+msgid "File:"
+msgstr "Arquivo:"
+
+#: libgwymodule/gwymodulebrowser.c:246
+msgid "Registered functions:"
+msgstr "Funções registradas:"
+
+#: libgwymodule/gwymodulebrowser.c:247
+msgid "Authors:"
+msgstr "Autores:"
+
+#: libgwymodule/gwymodulebrowser.c:248
+msgid "Copyright:"
+msgstr "Direitos autorais:"
+
+#: libgwymodule/gwymodulebrowser.c:249
+msgid "Date:"
+msgstr "Data:"
+
+#: libgwymodule/gwymodulebrowser.c:250
+msgid "Description:"
+msgstr "Descrição:"
+
+#: libgwymodule/gwymodulebrowser.c:267
+msgid "Name:"
+msgstr "Nome:"
+
+#: libgwymodule/gwymodulebrowser.c:269
+msgid "Failure:"
+msgstr "Falha:"
+
+#: app/about.c:58
+#, c-format
+msgid "About %s"
+msgstr "Sobre %s"
+
+#: app/about.c:97
+msgid "An SPM data visualization and analysis tool."
+msgstr "Uma ferramenta de visualização e análise de dados SPM."
+
+#: app/about.c:105
+msgid "Report bugs to:"
+msgstr "Reportar erros para:"
+
+#: app/about.c:120
+msgid "Credits"
+msgstr "Créditos"
+
+#: app/about.c:137
+msgid "License"
+msgstr "Licença"
+
+#: app/about.c:142
+#, c-format
+msgid ""
+"%s is free software; you can redistribute it and/or modify it under the "
+"terms of the GNU General Public License as published by the Free Software "
+"Foundation; either version 2 of the License, or (at your option) any later "
+"version. For full license text see file COPYING included in the source "
+"tarball."
+msgstr ""
+"%s é um software livre; você pode redistribuí-lo e/ou modificá-lo sob os "
+"termos da Licença <it>GNU General Public License</it> como publicada pela "
+"<it>Free Software Foundation</it>: tanto a versão 2 da Licença, ou (por sua "
+"opção) qualquer versão posterior. Para o texto completo da Licença, veja o "
+"arquivo COPYING incluído no pacote do código fonte."
+
+#: app/about.c:164 modules/process/logistic.c:269
+msgid "Features"
+msgstr "Características"
+
+#: app/about.c:224
+msgid "Developers"
+msgstr "Desenvolvedores"
+
+#: app/about.c:225
+msgid "Translators"
+msgstr "Tradutores"
+
+#: app/about.c:229
+msgid "Development is supported by the Czech Metrology Institute: "
+msgstr "O desenvolvimento é apoiado pelo Instituto Checo de Metrologia:"
+
+#: app/about.c:257 app/about.c:260
+msgid "OpenGL 3D View"
+msgstr "Visão OpenGL 3D"
+
+#: app/about.c:261 app/about.c:266 app/about.c:286
+msgid "not available\n"
+msgstr "Não disponível\n"
+
+#: app/about.c:269
+msgid "X11 protocol\n"
+msgstr "Protocolo X11\n"
+
+#: app/about.c:271
+msgid "Win32 protocol\n"
+msgstr "Protocolo Win32\n"
+
+#: app/about.c:273
+msgid "LibUnique\n"
+msgstr "LibUnique\n"
+
+#: app/about.c:277
+msgid "Remote Control"
+msgstr "Controle remoto"
+
+#: app/about.c:281 app/about.c:285
+msgid "Python Scripting Interface"
+msgstr "Interface de programação Python"
+
+#. TRANSLATORS: %s is replaced with date in ISO format YYYY-MM-DD.
+#: app/about.c:311
+#, c-format
+msgid "Development version, built %s"
+msgstr ""
+
+#. TRANSLATORS: %s is replaced with date in ISO format YYYY-MM-DD.
+#: app/about.c:328
+#, fuzzy, c-format
+msgid "Released %s"
+msgstr "Atualizado %s\n"
+
+#: app/app.c:301
+#, c-format
+msgid ""
+"Some data are unsaved:\n"
+"%s\n"
+"Really quit?"
+msgstr ""
+"Alguns dados não estão salvos:\n"
+"%s\n"
+"Deseja realmente sair?"
+
+#: app/app.c:442
+msgid "Mask _Color..."
+msgstr "Máscara de _cores..."
+
+#: app/app.c:458 app/app.c:1754
+msgid "Zoom _1:1"
+msgstr "Zoom _1:1"
+
+#: app/app.c:462 app/app.c:1758 app/app.c:1988
+msgid "Metadata _Browser..."
+msgstr "_Navegador de metadados..."
+
+#: app/app.c:467 app/app.c:1763 app/app.c:1993
+msgid "View _Log..."
+msgstr "Visualizar _registro..."
+
+# Needs a better translation...
+# Precisa de uma tradução melhor...
+#: app/app.c:651
+msgid "Pi_xelwise Square"
+msgstr "Ponto a ponto quadrado"
+
+#: app/app.c:661
+msgid "_Physically Square"
+msgstr "_Fisicamente quadrado"
+
+#: app/app.c:842
+msgid "Set as Default"
+msgstr "Definir como padrão"
+
+#: app/app.c:844
+msgid "Set the current view setup as the default"
+msgstr "Definir a configuração de visão atual como padrão"
+
+#: app/app.c:854
+msgid "verb|Save"
+msgstr "Salvar"
+
+#: app/app.c:857 app/app.c:861
+msgid "Save 3D view to an image"
+msgstr "Salvar visão 3D para uma imagem"
+
+#: app/app.c:869
+#, fuzzy
+msgid "_Autocrop"
+msgstr "_Automático"
+
+#: app/app.c:873
+msgid "Remove white borders from exported image"
+msgstr ""
+
+#: app/app.c:960
+msgid "_Show mask"
+msgstr "_Mostrar máscara"
+
+#: app/app.c:1172
+#, c-format
+msgid "Saving of 3D view to `%s' failed"
+msgstr "O salvamento da visão 3D para `%s' falhou"
+
+#: app/app.c:1222
+msgid "Export 3D View"
+msgstr "Exportar visão 3D"
+
+#: app/app.c:1478
+msgid "_Change Preview"
+msgstr "_Modificar pré-visualização"
+
+#: app/app.c:1606
+msgid "Change Volume Data Preview"
+msgstr "Modificar pré-visualização do volume de dados"
+
+#: app/app.c:1616
+msgid "Preview quantity:"
+msgstr "Quantidade de pré-visualização:"
+
+#: app/app.c:1626 modules/process/extend.c:267 modules/tools/linestats.c:165
+#: modules/volume/volume_linestat.c:142
+msgid "Mean"
+msgstr "Média"
+
+#: app/app.c:1627 modules/process/polydistort.c:258 modules/tools/filter.c:241
+#: modules/tools/icolorange.c:424 modules/tools/linestats.c:167
+#: modules/volume/volume_linestat.c:144
+msgid "Minimum"
+msgstr "Mínimo"
+
+#: app/app.c:1628 modules/process/col_synth.c:170 modules/tools/filter.c:242
+#: modules/tools/icolorange.c:435 modules/tools/linestats.c:168
+#: modules/volume/volume_linestat.c:145
+msgid "Maximum"
+msgstr "Máximo"
+
+#: app/app.c:1629 modules/volume/volume_linestat.c:146
+msgid "Min. position"
+msgstr "Posição min."
+
+#: app/app.c:1630 modules/volume/volume_linestat.c:147
+msgid "Max. position"
+msgstr "Posição máx."
+
+#: app/app.c:1631 modules/process/bdep_synth.c:134
+#: modules/process/col_synth.c:171 modules/process/scars.c:369
+#: modules/process/scars.c:377 modules/process/threshold.c:336
+msgid "RMS"
+msgstr "RMS"
+
+#: app/app.c:1632 modules/file/asciiexport.c:187 modules/file/gxyzffile.c:393
+#: modules/file/xyzexport.c:236 modules/file/xyzexport.c:305
+msgid "Channel:"
+msgstr "Canal:"
+
+#: app/app.c:1633
+msgid "Section:"
+msgstr "seção:"
+
+#: app/app.c:1890
+msgid "_Update Preview"
+msgstr "_Atualizar pré-visualização"
+
+#: app/app.c:1896
+msgid "_Density Map"
+msgstr "Mapa de _densidade"
+
+#: app/data-browser-aux.c:1373
+#, c-format
+msgid "Unknown channel %d"
+msgstr "Canal %d desconhecido"
+
+#: app/data-browser-aux.c:1456
+#, c-format
+msgid "Unknown volume %d"
+msgstr "Volume %d desconhecido"
+
+#: app/data-browser-aux.c:1520
+#, c-format
+msgid "Unknown XYZ %d"
+msgstr "%d XYZ desconhecido"
+
+#: app/data-browser-aux.c:2839
+#, c-format
+msgid "Z levels: %d, Z unit: %s"
+msgstr "Níveis Z: %d, unidade Z: %s"
+
+#: app/data-browser-aux.c:2865
+#, c-format
+msgid "Points: %d"
+msgstr "Pontos: %d"
+
+#: app/data-browser.c:5459
+msgid "Extract to a new file"
+msgstr "Extrair para um novo arquivo"
+
+#: app/data-browser.c:5466
+msgid "Duplicate"
+msgstr "Duplicar"
+
+#: app/data-browser.c:5473
+msgid "Delete"
+msgstr "Apagar"
+
+#: app/data-browser.c:5532
+msgid "Data Browser"
+msgstr "Navegador de dados"
+
+#: app/data-browser.c:5557
+msgid "Show file messages"
+msgstr "Mostrar mensagens do arquivo"
+
+#: app/data-browser.c:5569
+msgid "Close file"
+msgstr "Fechar arquivo"
+
+#: app/data-browser.c:5582
+#, fuzzy
+msgid "Images"
+msgstr "Imagem"
+
+#: app/data-browser.c:5596 modules/volume/volume_extract.c:431
+msgid "Graphs"
+msgstr "Gráficos"
+
+#: app/data-browser.c:5610
+msgid "Spectra"
+msgstr "Espectros"
+
+#: app/data-browser.c:5638
+msgid "XYZ"
+msgstr "XYZ"
+
+#: app/data-browser.c:6619
+#, c-format
+msgid "Messages for %s"
+msgstr "Mensagens para %s"
+
+#: app/data-browser.c:6623
+msgid "Messages for Untitled"
+msgstr "Mensagens para Sem título"
+
+#: app/datachooser.c:285 app/datachooser.c:596
+msgid "channel|None"
+msgstr "canal|Nenhum"
+
+#: app/file.c:210
+msgid "Imported data are likely incorrect."
+msgstr "Dados importados provavelmente estão incorretos."
+
+#: app/file.c:214
+#, c-format
+msgid ""
+"Import support for files of type\n"
+"\n"
+"%s\n"
+"\n"
+"is incomplete due to the lack of documentation, testing files and/or people "
+"willing to help with the testing.\n"
+"\n"
+"If you can help to improve the import please contact the author of module %s-"
+"%s:\n"
+"\n"
+"%s"
+msgstr ""
+"Suporte para importação de arquivos do tipo\n"
+"\n"
+"%s\n"
+"\n"
+"está incompleto devido à falta de documentação, arquivos de teste e/ou "
+"pessoas dispostas a ajudar a testar.\n"
+"\n"
+"Se você puder ajudar a aprimorar a importação, por favor, entre em contato "
+"com o autor do módulo %s-%s:\n"
+"\n"
+"%s"
+
+#: app/file.c:292
+#, c-format
+msgid "Opening of `%s' failed"
+msgstr "A abertura de `%s' falhou"
+
+#: app/file.c:298 app/file.c:533
+#, c-format
+msgid "Full file path: %s."
+msgstr "Caminho completo do arquivo: %s."
+
+#: app/file.c:301
+#, c-format
+msgid "Loaded using: %s."
+msgstr "Carregado utilizando: %s."
+
+#: app/file.c:387
+msgid "Merge File"
+msgstr "Mesclar arquivo"
+
+#: app/file.c:389 app/gwyappfilechooser.c:226
+msgid "Open File"
+msgstr "Abrir arquivo"
+
+#: app/file.c:527 app/gwymoduleutils.c:192
+#, c-format
+msgid "Saving of `%s' failed"
+msgstr "O salvamento de `%s' falhou"
+
+#: app/file.c:536
+#, c-format
+msgid "Saved using: %s."
+msgstr "Salvo usando: %s."
+
+#: app/file.c:696
+#, c-format
+msgid "File `%s' already exists. Replace?"
+msgstr "O arquivo `%s' já existe. Substituir?"
+
+#: app/file.c:700
+#, c-format
+msgid ""
+"The file already exists in `%s'. Replacing it will overwrite its contents."
+msgstr ""
+"O arquivo já existe em `%s'. A substituição do mesmo irá sobrescrever seu "
+"conteúdo."
+
+#: app/file.c:703
+msgid "Replace File?"
+msgstr "Substituir arquivo?"
+
+#: app/filelist.c:230
+msgid "Document History"
+msgstr "Histórico do documento"
+
+#: app/filelist.c:260
+msgid "Clean U_p"
+msgstr "Lim_par"
+
+#: app/filelist.c:264
+msgid "Remove entries of files that no longer exist"
+msgstr "Remover entradas de aquivos que não existem mais"
+
+#: app/filelist.c:273
+msgid "Close file list"
+msgstr "Fechar lista de arquivos"
+
+#: app/filelist.c:280
+msgid "Open selected file"
+msgstr "Abrir arquivo selecionado"
+
+#: app/filelist.c:566 app/gwyappfilechooser.c:592
+msgid "_Filter:"
+msgstr "_Filtro:"
+
+#: app/filelist.c:604 app/gwyappfilechooser.c:628
+msgid "Case _sensitive"
+msgstr "Diferenciar _maiúsculas/minúsculas"
+
+#: app/glmaterial-editor.c:92
+msgid "GL Material Editor"
+msgstr "Editor de material GL"
+
+#: app/glmaterial-editor.c:93
+#, c-format
+msgid "GL Material `%s'"
+msgstr "`%s' material GL"
+
+#: app/glmaterial-editor.c:143
+msgid "_Ambient"
+msgstr "_Ambiente"
+
+#: app/glmaterial-editor.c:144
+msgid "_Diffuse"
+msgstr "_Difuso"
+
+#: app/glmaterial-editor.c:145
+msgid "Spe_cular"
+msgstr "Especular"
+
+# It may have another meaning.
+# Isto pode ter outro significado.
+#: app/glmaterial-editor.c:194
+msgid "Sh_ininess:"
+msgstr "Br_ilho:"
+
+#: app/gradient-editor.c:126
+msgid "Color Gradient Editor"
+msgstr "Editor do gradiente de cores"
+
+#: app/gradient-editor.c:127
+#, c-format
+msgid "Color Gradient `%s'"
+msgstr "Gradiente de cores `%s'"
+
+#: app/gradient-editor.c:228
+msgid "_Points"
+msgstr "_Pontos"
+
+#: app/gradient-editor.c:229
+msgid "_Curve"
+msgstr "_Curva"
+
+#: app/gradient-editor.c:267
+msgid "_Snap to control points"
+msgstr "_Bater para controlar pontos"
+
+#: app/gwyappfilechooser.c:231
+msgid "Save File"
+msgstr "Salvar arquivo"
+
+#: app/gwyappfilechooser.c:389
+#, c-format
+msgid "File _type: %s"
+msgstr "Arquivo do _tipo: %s"
+
+#: app/gwyappfilechooser.c:396
+msgid "Only loadable shown"
+msgstr "Mostrando apenas carregáveis"
+
+#: app/gwyappfilechooser.c:400
+#, c-format
+msgid "Filter: %s"
+msgstr "Filtro: %s"
+
+#: app/gwyappfilechooser.c:464
+msgid "Automatic by extension"
+msgstr "Automático por extensão"
+
+#: app/gwyappfilechooser.c:473
+msgid "Automatically detected"
+msgstr "Detectado automaticamente"
+
+#: app/gwyappfilechooser.c:570
+msgid "Show only loadable files"
+msgstr "Mostrar apenas arquivos carregáveis"
+
+#: app/gwyappfilechooser.c:855
+msgid "Plane-level previewed data"
+msgstr "Dados nível-plano pré-visualizados"
+
+#: app/gwyappfilechooser.c:871
+msgid "Row-level previewed data"
+msgstr "Dados nível-linha pré-visualizados"
+
+#: app/gwyappfilechooser.c:987
+msgid "File too large for preview"
+msgstr ""
+
+#: app/gwyappfilechooser.c:988
+msgid "…"
+msgstr "..."
+
+#: app/gwyappfilechooser.c:1352
+msgid "Cannot preview"
+msgstr "Impossível pré-visualizar"
+
+#: app/gwyddion.c:147
+msgid "Loading document history"
+msgstr "Carregando histórico do documento"
+
+#: app/gwyddion.c:152
+msgid "Registering "
+msgstr "Registrando "
+
+#: app/gwyddion.c:153
+msgid "stock items"
+msgstr "itens de ação"
+
+#: app/gwyddion.c:157
+msgid "color gradients"
+msgstr "gradiente de cores"
+
+#: app/gwyddion.c:159
+msgid "GL materials"
+msgstr "Materiais GL"
+
+#: app/gwyddion.c:161
+msgid "grain quantities"
+msgstr "quantidades de grãos"
+
+#: app/gwyddion.c:163
+msgid "calibrations"
+msgstr "calibrações"
+
+#: app/gwyddion.c:168
+msgid "Loading settings"
+msgstr "Carregando configurações"
+
+#: app/gwyddion.c:175
+msgid "Registering modules"
+msgstr "Registrando módulos"
+
+#: app/gwyddion.c:464
+msgid "Could not read settings."
+msgstr "Não foi possível ler configurações."
+
+#: app/gwyddion.c:467
+#, c-format
+msgid ""
+"Settings file `%s' cannot be read: %s\n"
+"\n"
+"To prevent loss of saved settings no attempt to update it will be made until "
+"it is repaired or removed."
+msgstr ""
+"O arquivo de configurações `%s' não pode ser lido: %s\n"
+"\n"
+"Para prevenir perda das configurações salvas não serão feitas tentativas de "
+"atualizá-lo até que ele seja reparado ou removido."
+
+#: app/gwyddion.c:505
+#, c-format
+msgid "Many modules (%u) failed to register."
+msgstr ""
+
+#: app/gwyddion.c:510
+#, c-format
+msgid ""
+"Most likely Gwyddion was not upgraded correctly. Instead, one installation "
+"was just overwritten with another, and now it is a mess.\n"
+"\n"
+"Please remove completely the module directory\n"
+"\n"
+"%s\n"
+"\n"
+"and reinstall Gwyddion.\n"
+"\n"
+"See Info → Module Browser for specific errors."
+msgstr ""
+
+#: app/gwymoduleutils-file.c:536
+#, c-format
+msgid "Section %s ended at line %u but it has never started."
+msgstr "A sessão %s terminou na linha %u, mas ela nunca foi iniciada."
+
+#: app/gwymoduleutils-file.c:544
+#, c-format
+msgid "Section %s ended at line %u instead of %s."
+msgstr "A sessão %s terminou na linha %u ao invés de %s."
+
+#: app/gwymoduleutils-file.c:581
+#, c-format
+msgid "Section %s started at line %u before %s ended."
+msgstr "A sessão %s começou na linha %u antes de %s terminar."
+
+#: app/gwymoduleutils-file.c:587
+#, c-format
+msgid "Empty section name at header line %u."
+msgstr "Nome de seção vazia na linha %u do cabeçalho."
+
+#: app/gwymoduleutils-file.c:622
+#, c-format
+msgid "Header line %u lacks prefix %s."
+msgstr "Cabeçalho da linha %u não tem o prefixo %s."
+
+#: app/gwymoduleutils-file.c:647
+#, c-format
+msgid "Header line %u lacks key-value separator."
+msgstr "Falta o valor-chave separador na linha %u do cabeçalho."
+
+#: app/gwymoduleutils-file.c:655
+#, c-format
+msgid "Key at header line %u is empty."
+msgstr "Chave na linha %u do cabeçalho está vazia."
+
+#: app/gwymoduleutils-file.c:682
+#, c-format
+msgid "Header suddenly ended at line %u; end of header marker is missing"
+msgstr ""
+"O cabeçalho terminou repentinamente na linha %u; o fim da marca do cabeçalho "
+"está faltando"
+
+#: app/gwymoduleutils.c:197 app/settings.c:131 app/settings.c:142
+#: app/toolbox-spec.c:536 modules/file/err.h:62
+#: modules/pygwy/pygwy-console.c:528
+#, c-format
+msgid "Cannot write to file: %s."
+msgstr "Não foi possível escrever para o arquivo: %s."
+
+#: app/gwyplaintool.c:566
+msgid "<big><b>Missing layer module.</b></big>"
+msgstr "<big><b>Faltando camada do módulo.</b></big>"
+
+#: app/gwyplaintool.c:572
+#, c-format
+msgid ""
+"This tool requires layer of type %s to work, which does not seem to be "
+"installed. Please check your installation."
+msgstr ""
+"Esta ferramenta requer uma camada do tipo %s para funcionar, mas ela não "
+"parece estar instalada. Por favor, verifique sua instalação."
+
+#: app/gwyplaintool.c:788
+msgid "Clear selected objects"
+msgstr "Limpar objetos selecionados"
+
+#. TRANSLATORS: Origin of the selected rectangle.
+#: app/gwyplaintool.c:1000
+msgid "Origin"
+msgstr "Origem"
+
+#: app/gwyplaintool.c:1011 modules/file/rawfile.c:997
+#: modules/process/convolution_filter.c:349
+#: modules/process/convolution_filter.c:553 modules/process/fibre_synth.c:520
+#: modules/process/neural.c:419 modules/process/obj_synth.c:536
+#: modules/process/pat_synth.c:1450
+msgid "Size"
+msgstr "Tamanho"
+
+#: app/gwyplaintool.c:1014
+msgid "Width"
+msgstr "Largura"
+
+#: app/gwytool.c:294
+msgid "verb|Hide"
+msgstr "Esconder"
+
+#: app/gwytool.c:296
+msgid "Hide tool dialog (Esc)"
+msgstr "Esconder diálogo de ferramentas (Esc)"
+
+#: app/help.c:257
+msgid "Cannot display the help."
+msgstr "Não foi possível mostrar a ajuda."
+
+#. TRANSLATORS: %s will be replaced with an URL.
+#: app/help.c:260
+#, c-format
+msgid ""
+"No working method to show\n"
+"%s\n"
+"in a web browser was found. Details about the attempts can be found in the "
+"console or gwyddion.log."
+msgstr ""
+"nenhum método funcionando para mostrar\n"
+"%s\n"
+"em um navegador foi encontrado. Detalhes sobre as tentativas podem ser "
+"encontrados no console ou gwyddion.log."
+
+#. TRANSLATORS: For user guide location. Translate this to fr, ru, cs,
+#. de, ... even if the corresponding guide does not exist.
+#: app/help.c:363
+msgid "current-language-code|en"
+msgstr "código-de-linguagem-atual|pt_BR"
+
+#: app/log.c:536
+#, c-format
+msgid "Log of %s (%s)"
+msgstr "Registro de %s (%s)"
+
+#: app/log.c:588 app/meta.c:224 modules/tools/selectionmanager.c:399
+msgid "_Export"
+msgstr "_Exportar"
+
+#: app/log.c:594
+msgid "Clea_r"
+msgstr "Limpa_r"
+
+#: app/log.c:599 app/meta.c:240
+msgid "_Close"
+msgstr "_Fechar"
+
+#: app/log.c:615 modules/file/imgexport.c:4118 modules/file/rawfile.c:996
+msgid "Type"
+msgstr "Tipo"
+
+#: app/log.c:616
+msgid "Function"
+msgstr "Função"
+
+#: app/log.c:617 modules/file/imgexport.c:3128 modules/process/fit-shape.c:466
+#: modules/process/neural.c:614 modules/tools/stats.c:423
+msgid "Parameters"
+msgstr "Parâmetros"
+
+#: app/log.c:618
+msgid "Time"
+msgstr "Tempo"
+
+#: app/log.c:730
+msgid "Export Log"
+msgstr "Exportar registro"
+
+#: app/menu.c:555 app/toolbox.c:595
+msgid "_Data Process"
+msgstr "Processamento de _dados"
+
+#: app/menu.c:597 app/toolbox.c:598
+msgid "_Graph"
+msgstr "_Gráfico"
+
+#: app/menu.c:640 app/toolbox.c:601
+msgid "_Volume Data"
+msgstr "Dados de _volume"
+
+#: app/menu.c:683 app/toolbox.c:604
+msgid "_XYZ Data"
+msgstr "Dados _XYZ"
+
+#: app/menu.c:714
+msgid "Re-show Last"
+msgstr "Mostrar último novamente"
+
+#: app/menu.c:729
+msgid "Repeat Last"
+msgstr "Repetir último"
+
+#: app/menu.c:857
+msgid "Repeat"
+msgstr "Repetir"
+
+#: app/menu.c:863
+msgid "Re-show"
+msgstr "Mostrar novamente"
+
+#: app/menu.c:1185
+msgid "_Document history"
+msgstr "Histórico do _documento"
+
+#: app/meta.c:230
+msgid "_New"
+msgstr "_Novo"
+
+#: app/meta.c:235 modules/file/imgexport.c:4620 modules/file/rawfile.c:1058
+#: modules/process/neural.c:718 modules/tools/selectionmanager.c:405
+msgid "_Delete"
+msgstr "_Apagar"
+
+#: app/meta.c:294
+#, c-format
+msgid "Metadata of %s (%s)"
+msgstr "Metadados de %s (%s)"
+
+#: app/meta.c:619
+msgid "New item"
+msgstr "Novo item"
+
+#: app/meta.c:737
+msgid "Save Metadata"
+msgstr "Salvar metadados"
+
+#: app/resource-editor.c:134
+msgid "Edit selected item"
+msgstr "Editar item selecionado"
+
+#: app/resource-editor.c:140 modules/process/convolution_filter.c:503
+msgid "Create a new item"
+msgstr "Criar um novo item"
+
+#: app/resource-editor.c:146 modules/process/convolution_filter.c:508
+msgid "Create a new item based on selected one"
+msgstr "Criar um novo item baseado no selecionado"
+
+#: app/resource-editor.c:152 modules/process/convolution_filter.c:513
+msgid "Delete selected item"
+msgstr "Apagar item selecionado"
+
+#: app/resource-editor.c:158
+msgid "Set selected item as default"
+msgstr "Definir item selecionado como padrão"
+
+#: app/settings.c:124 app/toolbox-spec.c:528 modules/file/err.h:55
+#, c-format
+msgid "Cannot open file for writing: %s."
+msgstr "Não foi possível abrir o arquivo para escrita: %s."
+
+#: app/settings.c:181 modules/file/err.h:33
+#, c-format
+msgid "Cannot read file contents: %s"
+msgstr "Não foi possível ler o conteúdo do arquivo: %s"
+
+#: app/settings.c:189
+msgid "File is empty."
+msgstr "O arquivo está vazio."
+
+#: app/settings.c:199
+msgid "File is corrupted, magic header does not match."
+msgstr "O arquivo está corrompido, os cabeçalho mágico não corresponde."
+
+#: app/settings.c:210
+msgid "File is corrupted, deserialization failed."
+msgstr "O arquivo está corrompido, a deserialização falhou."
+
+#: app/settings.c:264
+#, c-format
+msgid "Cannot create user config directory %s: %s"
+msgstr "Não foi possível criar o diretório de configuração do usuário %s: %s"
+
+#: app/settings.c:277
+#, c-format
+msgid "Cannot create user ui directory %s: %s"
+msgstr "Não foi possível criar o diretório ui do usuário %s: %s"
+
+#: app/settings.c:294
+#, c-format
+msgid "Cannot create user module directory %s: %s"
+msgstr "Não foi possível criar o diretório de módulos do usuário %s: %s"
+
+#: app/splash.c:1260
+msgid "Starting "
+msgstr "Iniciando "
+
+#: app/splash.c:1313
+msgid " is free software released under GNU GPL."
+msgstr " é software atualizado sob a licença GNU GPL."
+
+#: app/tips.c:54
+msgid ""
+"Holding Shift restricts directions of selected lines to multiples of 15°."
+msgstr ""
+"Segurar Shift restringe direções das linhas selecionadas em múltiplos de 15°."
+
+#: app/tips.c:59
+msgid ""
+"Holding Shift restricts shapes of selected rectangles to perfect squares."
+msgstr ""
+"Segurar Shift restringe formas dos retângulos selecionados a quadrados "
+"perfeitos."
+
+#: app/tips.c:64
+msgid "Holding Shift restricts shapes of selected ellipses to perfect circles."
+msgstr ""
+"Segurar Shift restringe formas das elipses selecionadas a círculos perfeitos."
+
+#: app/tips.c:69
+msgid ""
+"If multiple regions are selected on a graph, e.g. in 1D FFT Filtering, "
+"individual regions can be deleted by clicking on them with the right mouse "
+"button."
+msgstr ""
+"Se múltiplas regiões são selecionadas em um gráfico, ex.: em filtro FFT 1D, "
+"regiões individuais podem ser apagadas clicando nelas com o botão direito do "
+"mouse."
+
+#: app/tips.c:75
+msgid ""
+"Data presentations created by functions in Data Process → Presentation do "
+"not change the underlying data. All subsequent operations still apply to "
+"the underlying data."
+msgstr ""
+"Apresentações de dados criados por funções em Processamento de Dados → "
+"Apresentação não modificam os dados subjacentes."
+
+#: app/tips.c:88
+msgid ""
+"Pressing Ctrl-F runs the last used data processing function with with the "
+"same parameters on the current data."
+msgstr ""
+"Pressionando Ctrl-F é executada a última função de processamento de dados "
+"utilizada, com os mesmos parâmetros, nos dados atuais."
+
+#: app/tips.c:93
+msgid ""
+"Pressing Ctrl-Shift-F re-shows the parameter dialog of the last used data "
+"processing function (or executes it immediately if it has no parameters)."
+msgstr ""
+"Pressionando Ctrl-Shift-F é mostrado novamente o diálogo de parâmetros da "
+"última função de processamento de dados utilizada (ou a executa "
+"imediatamente se ela não tiver nenhum parâmetro)."
+
+#: app/tips.c:100
+msgid ""
+"When Gwyddion is run with a directory argument it opens a file open dialog "
+"showing this directory."
+msgstr ""
+"Quando o Gwyddion é executado com um diretório como argumento ele abre o "
+"diálogo de abertura de arquivos mostrando este diretório."
+
+#: app/tips.c:105
+msgid ""
+"File → Open Recent → Document History opens a browser of recently loaded "
+"files with the possibility to search them by name."
+msgstr ""
+"Arquivo → Abrir recente → Histórico de documentos abre um navegador dos "
+"arquivos carregados recentemente com a possibilidade de procurá-los por nome."
+
+#: app/tips.c:111
+msgid ""
+"Automatic import of unrecognized files as raw data can be enabled/disabled "
+"in the Raw file import dialog."
+msgstr ""
+"A importação automática de arquivos desconhecidos como dados brutos pode "
+"ser habilitado/desabilitado no diálogo de importação de dados brutos."
+
+#: app/tips.c:116
+msgid ""
+"To export the image of a channel to a pixmap graphic format (PNG, TIFF, "
+"JPEG, ...) just save it as this format with File → Save As."
+msgstr ""
+"Para exportar a imagem de um canal para um formato gráfico do tipo mapa de "
+"pixeis (To export the image of a channel to a pixmap graphic format (PNG, "
+"TIFF, JPEG, ...) apenas salve-a neste formato com Arquivo → Salvar como."
+
+#: app/tips.c:122
+msgid "File → Merge imports all data from selected file to the current file."
+msgstr ""
+"Arquivo → Mesclar importa todos os dados do arquivo selecionado no arquivo "
+"atual."
+
+#: app/tips.c:127
+msgid ""
+"Previews in the file open dialog can be shown with plane and/or line "
+"leveling applied. Use the switches at the bottom of the preview list."
+msgstr ""
+"Pré-visualizações no diálogo de abertura de arquivos podem ser mostradas com "
+"nivelamento de plano e/ou linha aplicado(s). Use os botões de mudança na "
+"base da lista de pré-visualização."
+
+#: app/tips.c:134
+msgid ""
+"Your favorite false color gradient can be set as default in the gradient "
+"editor: Edit → Color Gradients. The default gradient is shown in bold face."
+msgstr ""
+"Seu gradiente de cores falsas favorito pode ser definido como padrão no "
+"editor de gradientes: Editar → Gradiente de cores. O gradiente de cores "
+"padrão é mostrado na face negrita."
+
+#: app/tips.c:140
+msgid ""
+"Your favorite GL material can be set as default in the material editor: Edit "
+"→ GL Materials. The default material is shown in bold face."
+msgstr ""
+"Seu material GL favorito pode ser definido como padrão no editor de "
+"materiais: Editar → Materiais GL. O material padrão é mostrado na face "
+"negrita."
+
+#: app/tips.c:146
+msgid ""
+"Edit → Default Mask Color sets the default mask color. This color is used "
+"when a mask is created on data that have not had a mask before."
+msgstr ""
+"Editar → Máscara de cores padrão define a máscara de cores padrão. Esta cor "
+"é utilizada quando a máscara é criada em dados que não tenham tido uma "
+"máscara anteriormente."
+
+#: app/tips.c:152
+msgid ""
+"Each channel has its own metadata. Display them by clicking with the right "
+"mouse button and choosing Metadata Browser."
+msgstr ""
+"Cada canal tem seu próprio metadado. Exiba-os clicando com o botão direito "
+"do mouse e escolhendo Navegador de metadados."
+
+#: app/tips.c:158
+msgid ""
+"Each volume data have their own metadata. Display them by clicking with the "
+"right mouse button and choosing Metadata Browser."
+msgstr ""
+"Cada volume tem seu próprio metadado. Exiba-os clicando com o botão direito "
+"do mouse e escolhendo Navegador de metadados."
+
+#: app/tips.c:164
+msgid ""
+"A record of applied data processing operations can be browsed using View Log "
+"in the channel or volume data right-click menu."
+msgstr ""
+"A gravação das operações de processamento de dados aplicada pode ser "
+"navegada usando Ver registro nos dados de canal ou volume no menu de clique "
+"do botão direito."
+
+#: app/tips.c:170
+msgid ""
+"Curves can be copied to other (compatible) graphs by dragging them from "
+"Curves tab to the graph window."
+msgstr ""
+"Curvas podem ser copiadas para outros gráficos (compatíveis) arrastando-os "
+"da 'Aba de curvas' para a janela do gráfico."
+
+#: app/tips.c:175
+msgid "Graph curve properties can be edited by clicking on the curve."
+msgstr "Propriedades da curva no gráfico podem ser editadas clicando na curva."
+
+#: app/tips.c:179
+msgid "Graph axis labels can be edited after by clicking on the label."
+msgstr "Rótulos dos eixos no gráfico podem ser editados clicando no rótulo."
+
+#: app/tips.c:183
+msgid ""
+"Graph key (legend) properties can be edited by double-clicking on the legend."
+msgstr ""
+"Propriedades da chave do gráfico (legenda) podem ser editadas com um duplo "
+"clique na legenda."
+
+#: app/tips.c:188
+msgid ""
+"Curves can be deleted from graphs by selecting the curve in Curves tab and "
+"pressing Delete."
+msgstr ""
+"Curvas podem ser apagadas dos gráficos selecionando a curva na 'Aba de "
+"curvas' e pressionando Delete."
+
+#: app/tips.c:194
+msgid "Key ‛+’ or ‛=’ zooms in a data window."
+msgstr "As teclas ‛+’ ou ‛=’ aproximam o zoom na janela de dados."
+
+#: app/tips.c:198
+msgid "Key ‛-’ (minus) zooms out a data window."
+msgstr "A tecla ‛-’ (menos) diminui o zoom na janela de dados."
+
+#: app/tips.c:202
+msgid "Key ‛Z’ resets data window zoom to 1:1."
+msgstr "A tecla ‛Z’ reinicia o zoom da janela de dados para 1:1."
+
+#: app/tips.c:206
+msgid ""
+"Data with different <i>x</i> and <i>y</i> measures can be displayed either "
+"with pixel-wise or realistic aspect ratio. The menu in data window top left "
+"corner enables switching between these two modes."
+msgstr ""
+"Dados com medidas diferentes de <i>x</i> e <i>y</i> podem ser exibidos tanto "
+"com razão de aspecto ponto a ponto ou realista. O menu na janela de dados no "
+"canto superior esquerdo habilita a mudança entre estes dois modos."
+
+#: app/tips.c:213
+msgid ""
+"Clicking on a false color scale with the right mouse button brings a false "
+"color gradient selector."
+msgstr ""
+"Clicando na escala de cores falsa com o botão direito do mouse traz um "
+"seletor de gradiente de cores falsas."
+
+#: app/tips.c:218
+msgid ""
+"Mask color can be changed by right-clicking on a data view and selecting "
+"Mask Color from the menu."
+msgstr ""
+"A máscara de cores pode ser modificada clicando com o botão direito em uma "
+"visão de dados e selecionando 'Máscara de cores' a partir do menu."
+
+#: app/tips.c:224
+msgid ""
+"Clicking on a 3D view with the right mouse button brings a GL material or "
+"false color gradient selector."
+msgstr ""
+"Clicando em uma visão 3D com o botão direito do mouse traz um seletor de "
+"materiais GL ou gradiente de cores falsas."
+
+#: app/tips.c:229
+msgid ""
+"3D view transformation modes can be selected with keys: R (rotate), S "
+"(scale), V (value scale) and L (light source)."
+msgstr ""
+"Modos de transformação de visão 3D podem ser selecionados com as teclas: R "
+"(girar), S (escala), V (escala de valores) e L (fonte de luz)."
+
+#: app/tips.c:234
+msgid ""
+"You can make a specific 3D view setup the default using the Set as Default "
+"button."
+msgstr ""
+"Você pode tornar uma configuração 3D específica como padrão usando o botão "
+"'Definir como padrão'."
+
+#: app/tips.c:240
+msgid ""
+"Pressing Ctrl-C copies the image of a channel, graph or 3D view to the "
+"clipboard."
+msgstr ""
+"Pressionar Ctrl-C copia a imagem de um canal, gráfico ou visão 3D para a "
+"área de transferência."
+
+#: app/tips.c:245
+msgid ""
+"Dragging channels or graphs from Data Browser to a window copies them to the "
+"corresponding file."
+msgstr ""
+"Arrastando canais ou gráficos a partir do 'Navegador de dados' para uma "
+"janela faz uma cópia dos mesmos para o arquivo correspondente."
+
+#: app/tips.c:250
+msgid "Info → Show Data Browser brings back a closed Data Browser."
+msgstr ""
+"'Info → Mostrar navegador de dados' traz de volta um 'Navegador de dados' "
+"fechado."
+
+#: app/tips.c:254
+msgid ""
+"Channels and graphs can be renamed by double-clicking on their name in Data "
+"Browser."
+msgstr ""
+"Canais e gráficos podem ser renomeados com um duplo clique em seu nome no "
+"'Navegador de dados'."
+
+#: app/tips.c:260
+msgid ""
+"Facet Level offers to use/exclude the masked area if a mask is present on "
+"the data."
+msgstr ""
+"'Nível faceta' oferece para usar/excluir a área mascarada se uma máscara "
+"estiver presente nos dados."
+
+#: app/tips.c:265
+msgid ""
+"Plane Level offers to use/exclude the masked area if a mask is present on "
+"the data."
+msgstr ""
+"'Nível plano' oferece para usar/excluir a área mascarada se uma máscara "
+"estiver presente nos dados."
+
+#: app/tips.c:270
+msgid ""
+"Align Rows offers to use/exclude the masked area if a mask is present on the "
+"data."
+msgstr ""
+"'Alinhar linhas' oferece para usar/excluir a área mascarada se uma máscara "
+"estiver presente nos dados."
+
+#: app/tips.c:275
+msgid ""
+"Data Arithmetic works as a scientific calculator: just type an arithmetic "
+"expression."
+msgstr ""
+"'Aritmética de dados' funciona como uma calculadora científica: apenas "
+"digite uma expressão aritmética."
+
+#: app/tips.c:280
+msgid ""
+"Data Arithmetic expressions can include values (d), mask values (m), "
+"derivatives (bx, by) and coordinates (x, y)."
+msgstr ""
+"Expressões aritméticas de dados podem incluir valores (d), máscara de "
+"valores (m), derivadas (bx, by) e coordenadas (x, y)."
+
+#: app/tips.c:285
+msgid ""
+"Facet Level can often level data with large features that make impossible to "
+"use standard plane leveling. It levels the surface by making normals of "
+"flat areas point upwards."
+msgstr ""
+"'Nivelamento faceta' pode, frequentemente, nivelar dados com grandes "
+"características que fazem com que seja impossível usar nivelamento plano "
+"padrão. Ele nivela a superfície fazendo as normais das áreas achatadas "
+"apontarem para cima."
+
+#: app/tips.c:291
+msgid ""
+"Flatten Base performs automated leveling of base flat surface with positive "
+"features."
+msgstr ""
+"'Achatar base' realiza nivelamento automático da superfície chata base com "
+"características positivas."
+
+#: app/tips.c:296
+msgid ""
+"Too small grains can be filtered out with Data Process → Grains → Filter."
+msgstr ""
+"Grãos muito pequenos podem ser filtrados com 'Processamento de dados → Grãos "
+"→ Filtrar'."
+
+#: app/tips.c:301
+msgid ""
+"Data Process → Presentation → Edge Detection → Step is a fine step detector "
+"with a good dynamic range"
+msgstr ""
+"'Processamento de dados → Apresentação → Detecção de borda → Passo' é um "
+"detector fino de passo com uma boa faixa dinâmica."
+
+#: app/tips.c:306
+msgid ""
+"Data Process → Basic Operations → Dimensions and Units changes scales, "
+"offsets and even lateral and value units."
+msgstr ""
+"'Processamento de dados → Operações básicas → Dimensões e unidades' mudam "
+"escalas, afastamentos e unidades de valor e lateral."
+
+#: app/tips.c:311
+msgid ""
+"Grains or other areas of interest are marked with masks. Many functions "
+"then can do something interesting with the masked areas."
+msgstr ""
+"Grãos ou outras áreas de interesse são marcadas com máscaras. Muitas podem "
+"então fazer alguma coisa interessante com as áreas mascaradas."
+
+#: app/tips.c:317
+msgid ""
+"Remove Scars in the toolbox runs with the settings last used in Mark Scars."
+msgstr ""
+"'Remover cicatriz' na caixa de ferramentas é executado com as últimas "
+"configurações utilizadas em 'Marcar cicatrizes'."
+
+#: app/tips.c:322
+msgid "Data synthesis modules can be also used to modify existing images."
+msgstr ""
+"Módulos de síntese de dados também podem ser usados para modificar imagens "
+"existentes."
+
+#: app/tips.c:327
+msgid ""
+"Data Process → Mask → Mark With can set the image mask based on another "
+"data, mask or presentation."
+msgstr ""
+"'Processamento de dados → Máscara → Marcar com' pode definir a máscara da "
+"imagem com base em outros dados, máscara ou apresentação."
+
+#: app/tips.c:333
+msgid "Graph → Critical Dimension measures steps on extracted profile graphs."
+msgstr ""
+"'Gráfico → Dimensão crítica' mede passos no perfil extraído dos gráficos."
+
+#: app/tips.c:338
+msgid "All Graph functions are available also in the graph right-click menu."
+msgstr ""
+"As funções 'Todos os gráficos' também estão disponíveis no menu de clique do "
+"botão direito no gráfico."
+
+#: app/tips.c:344
+msgid "Pressing Esc hides tool windows."
+msgstr "Pressionando Esc as janelas de ferramentas são escondidas."
+
+#: app/tips.c:348
+msgid "Read Value tool displays also the local facet normal."
+msgstr "A ferramenta 'Ler valor' exibe também a faceta normal local."
+
+#: app/tips.c:352
+msgid ""
+"Read Value tool can shift data to make <i>z</i>=0 plane pass through the "
+"selected point."
+msgstr ""
+"A ferramenta 'Ler valor' deslocar dados para fazer o plano <i>z</i>=0 passar "
+"através de um ponto selecionado."
+
+#: app/tips.c:357
+msgid ""
+"Individual lines can be deleted in Distance tool by selecting them in the "
+"list and pressing Delete."
+msgstr ""
+"Linhas individuais podem ser deletadas em 'Ferramenta de distância' "
+"selecionando-as na lista e pressionando Delete."
+
+#: app/tips.c:362
+msgid ""
+"Individual lines can be deleted in Profiles tool by selecting them in the "
+"list and pressing Delete."
+msgstr ""
+"Linhas individuais podem ser deletadas em 'Ferramenta de perfis' "
+"selecionando-as na lista e pressionando Delete."
+
+#: app/tips.c:367
+msgid ""
+"Spectroscopy tool displays point spectroscopy data and extracts them to "
+"standalone graphs that can be subsequently analysed for instance with Graph "
+"→ Fit FD Curve."
+msgstr ""
+"A ferramenta 'Espectroscopia' exibe dados de espectroscopia de ponto e os "
+"extrai para gráficos independentes que podem ser analisados subsequentemente "
+"por ocasião com 'Gráfico → Ajustar curva FD'."
+
+#: app/tips.c:373
+msgid ""
+"Statistical Quantities tool allows limiting the area of interest by a mask, "
+"rectangular selection or the intersection of both."
+msgstr ""
+"A ferramenta 'Quantidades estatísticas' permite limitar a área de interesse "
+"com uma máscara, seleção retangular ou a intersecção de ambos."
+
+#: app/tips.c:378
+msgid ""
+"Beside height and angle distributions, Statistical Functions tool calculates "
+"also correlation functions, power spectrum density (PSDF) and some more "
+"exotic functions."
+msgstr ""
+"Junto das distribuições de altura e ângulo, a ferramenta 'Funções "
+"estatísticas' calcula também funções de correlação, densidade do espectro de "
+"potência (PSDF) e algumas outras funções exóticas."
+
+# The meaning of the word 'features' must be clarified.
+# O significado da palavra 'características' precisa ser esclarecido.
+#: app/tips.c:384
+msgid ""
+"Path Level tool levels misaligned rows by lining them up along manually "
+"selected lines. If there are no large features automatic Align Rows usually "
+"works well."
+msgstr ""
+"A ferramenta 'Nivelar caminho' nivela linhas mau alinhadas revestindo-as "
+"manualmente ao longo das linhas selecionadas. Se não existirem grandes "
+"características, 'Alinhar linhas automaticamente' geralmente funciona bem."
+
+#: app/tips.c:390
+msgid ""
+"Grain Measure tool is great for examining individual grains. Overall grain "
+"statistics are available in Data Processing → Grains."
+msgstr ""
+"A ferramenta 'Medição de grãos' é ótima para examinar grãos individuais. No "
+"geral, estatísticas de grãos estão disponíveis em 'Processamento de dados → "
+"Grãos'."
+
+#: app/tips.c:396
+msgid "Mask Editor tool can create, edit, invert, grow and shrink masks."
+msgstr ""
+"A ferramenta 'Editor de máscaras' pode criar, editar, inverter, aumentar e "
+"encolher máscaras."
+
+#: app/tips.c:400
+msgid ""
+"Color Range tool offers several false color scale mapping modes and can make "
+"any of them the default mode."
+msgstr ""
+"A ferramenta 'Faixa de cores' oferece vários modos de mapeamento de escala "
+"de cores falsas e pode fazer de qualquer uma delas o modo padrão."
+
+#: app/tips.c:405
+msgid ""
+"Dragging selections from Selections Manager tool to a data window copies the "
+"selection to the target data."
+msgstr ""
+"Arrastar seleções da ferramenta 'Gerenciador de seleções' para uma janela de "
+"dados copia a seleção para os dados alvo."
+
+#: app/tips.c:411
+msgid ""
+"Pressing F1 or the Help buttons in most windows shows a relevant part of the "
+"user guide in a web browser."
+msgstr ""
+"Pressionar F1 ou os botões de 'Ajuda' mostra, na maioria das janelas, uma "
+"parte relevante do guia do usuário em um navegador."
+
+#: app/tips.c:416
+msgid ""
+"Gwyddion User Guide explains in detail many of the methods and algorithms "
+"implemented in Gwyddion."
+msgstr ""
+"O guia do usuário do Gwyddion explica com detalhes muitos dos métodos e "
+"algorítimos implementados no Gwyddion."
+
+# Can't understand this phrase...
+# Não consegui entender esta frase...
+#: app/tips.c:421
+msgid "Gwyddion is a son of Math."
+msgstr "Gwyddion é um filho do 'Math'."
+
+#: app/tips.c:483
+msgid "Gwyddion Tip of the Day"
+msgstr "Dica do dia do Gwyddion"
+
+#: app/tips.c:496
+msgid "_Previous Tip"
+msgstr "_Dica anterior"
+
+#: app/tips.c:502
+msgid "_Next Tip"
+msgstr "_Próxima dica"
+
+#: app/tips.c:532
+msgid "_Show tips at startup"
+msgstr "_Mostrar dicas no início"
+
+#: app/toolbox-editor.c:213
+msgid "Toolbox Editor"
+msgstr "Editor da 'Caixa de ferramentas'"
+
+#: app/toolbox-editor.c:258
+msgid "_New Item"
+msgstr "_Novo item"
+
+#: app/toolbox-editor.c:263
+msgid "_New Group"
+msgstr "_Novo grupo"
+
+#: app/toolbox-editor.c:269 app/toolbox.c:591
+msgid "_Edit"
+msgstr "_Editar"
+
+#: app/toolbox-editor.c:274 modules/process/fft_filter_2d.c:499
+#: modules/tools/maskedit.c:554 modules/volume/volume_zcal.c:173
+msgid "_Remove"
+msgstr "_Remover"
+
+#: app/toolbox-editor.c:279
+msgid "Move _Up"
+msgstr "S_ubir"
+
+#: app/toolbox-editor.c:284
+msgid "Move _Down"
+msgstr "_Descer"
+
+#: app/toolbox-editor.c:293 modules/file/hdrimage.cc:2304
+#: modules/file/imgexport.c:3114 modules/file/pixmap.c:872
+#: modules/file/rawfile.c:658 modules/process/crosscor.c:252
+#: modules/process/dimensions.h:455 modules/process/fibre_synth.c:526
+#: modules/process/tip_blind.c:334
+msgid "_Width:"
+msgstr "_Largura:"
+
+#: app/toolbox-editor.c:787
+msgid "Toolbox Group"
+msgstr "Grupo da 'Caixa de ferramentas'"
+
+#: app/toolbox-editor.c:804 modules/file/rawgraph.c:267
+msgid "_Title:"
+msgstr "_Título"
+
+#: app/toolbox-editor.c:818
+msgid "_Id:"
+msgstr "_Id:"
+
+#: app/toolbox-editor.c:831
+msgid "_Suggest"
+msgstr "_Sugerir"
+
+#: app/toolbox-editor.c:837
+msgid "Trans_latable title"
+msgstr "Títu_lo traduzível"
+
+#: app/toolbox-editor.c:887
+msgid "Group id is not a valid identifier"
+msgstr "Id do grupo não é um identificador válido"
+
+#: app/toolbox-editor.c:895
+msgid "Group id is not unique"
+msgstr "Id do grupo não é único"
+
+#: app/toolbox-editor.c:984
+msgid "Toolbox Item"
+msgstr "Item da 'Caixa de ferramentas'"
+
+#: app/toolbox-editor.c:1005 modules/process/coerce.c:331
+#: modules/tools/filter.c:284
+msgid "_Type:"
+msgstr "_Tipo:"
+
+#: app/toolbox-editor.c:1012
+msgid "Placeholder"
+msgstr "Espaço reservado"
+
+#: app/toolbox-editor.c:1013
+msgid "Builtin"
+msgstr "Embutido"
+
+#: app/toolbox-editor.c:1014 app/toolbox.c:112
+msgid "Data Process"
+msgstr "Processamento de dados"
+
+#: app/toolbox-editor.c:1016
+msgid "Volume Data"
+msgstr "Dados de volume"
+
+#: app/toolbox-editor.c:1017
+msgid "XYZ Data"
+msgstr "Dados XYZ"
+
+#: app/toolbox-editor.c:1018
+msgid "Tool"
+msgstr "Ferramenta"
+
+#: app/toolbox-editor.c:1025 modules/tools/profile.c:483
+msgid "_Mode:"
+msgstr "_Modo:"
+
+#: app/toolbox-editor.c:1032 app/toolbox-editor.c:1051
+msgid "Default"
+msgstr "Padrão"
+
+#: app/toolbox-editor.c:1033
+msgid "Interactive"
+msgstr "Interativo"
+
+#: app/toolbox-editor.c:1034
+msgid "Non-interactive"
+msgstr "Não-interativo"
+
+#: app/toolbox-editor.c:1042
+msgid "Use _icon from:"
+msgstr "Usar ícone de:"
+
+#: app/toolbox-editor.c:1076
+msgid "Functions"
+msgstr "Funções"
+
+#: app/toolbox-spec.c:618
+msgid "placeholder"
+msgstr "espaço reservado"
+
+#: app/toolbox-spec.c:626
+msgid "remaining tools"
+msgstr "Ferramentas restantes"
+
+#: app/toolbox-spec.c:710
+msgid "All tools not placed explicitly go here."
+msgstr "Todas as ferramentas não posicionadas explicitamente vão aqui."
+
+#: app/toolbox.c:111
+msgid "View"
+msgstr "Visualizar"
+
+#: app/toolbox.c:114
+msgid "Tools"
+msgstr "Ferramentas"
+
+#: app/toolbox.c:589
+msgid "_File"
+msgstr "_Arquivo"
+
+#: app/toolbox.c:607
+msgid "_Info"
+msgstr "_Info"
+
+#: app/toolbox.c:696
+msgid "Display a 3D view of data"
+msgstr "Exibir visualização 3D dos dados"
+
+#: app/toolbox.c:700
+#, fuzzy
+msgid "Undo"
+msgstr "_Desfazer"
+
+#: app/toolbox.c:700
+#, fuzzy
+msgid "Undo last action"
+msgstr "Subtração de plano"
+
+#: app/toolbox.c:704
+#, fuzzy
+msgid "Redo"
+msgstr "/_Refazer"
+
+#: app/toolbox.c:704
+msgid "Redo again last undone action"
+msgstr ""
+
+#: app/toolbox.c:708
+msgid "Zoom in"
+msgstr "Aumentar zoom"
+
+#: app/toolbox.c:712
+msgid "Zoom out"
+msgstr "Diminuir zoom"
+
+#: app/toolbox.c:716
+msgid "Zoom 1:1"
+msgstr "Zoom 1:1"
+
+#: app/toolbox.c:781
+msgid "/Show _Data Browser"
+msgstr "/Mostrar 'Navegador de _dados'"
+
+#: app/toolbox.c:789
+msgid "/Module _Browser"
+msgstr "/Navegador de módulos"
+
+#: app/toolbox.c:797
+msgid "/Program _Messages"
+msgstr "/_Mensagens do programa"
+
+#: app/toolbox.c:812
+msgid "/_User Guide"
+msgstr "/Guia do _usuário"
+
+#: app/toolbox.c:820
+msgid "/_Tip of the Day"
+msgstr "/_Dica do dia"
+
+#: app/toolbox.c:828
+msgid "/_About Gwyddion"
+msgstr "/_Sobre o Gwyddion"
+
+#: app/toolbox.c:865
+msgid "/_Open..."
+msgstr "/_Abrir"
+
+#: app/toolbox.c:873
+msgid "/_Merge..."
+msgstr "/_Mesclar"
+
+#: app/toolbox.c:881
+msgid "/Open _Recent"
+msgstr "/Abrir _recente"
+
+#: app/toolbox.c:889
+msgid "/_Save"
+msgstr "/_Salvar"
+
+#: app/toolbox.c:897
+msgid "/Save _As..."
+msgstr "/Salvar _como"
+
+#: app/toolbox.c:905
+msgid "/_Close"
+msgstr "/_Fechar"
+
+#: app/toolbox.c:913
+msgid "/Remo_ve All Logs"
+msgstr "/Remo_ver todos os registros"
+
+#: app/toolbox.c:929
+msgid "/_Quit"
+msgstr "/_Sair"
+
+#: app/toolbox.c:969
+msgid "/_Undo"
+msgstr "/_Desfazer"
+
+#: app/toolbox.c:977
+msgid "/_Redo"
+msgstr "/_Refazer"
+
+#: app/toolbox.c:993
+msgid "/Default Mask _Color..."
+msgstr "/Máscara de _cores padrão"
+
+#: app/toolbox.c:1001
+msgid "/Color _Gradients..."
+msgstr "/_Gradientes de cor..."
+
+#: app/toolbox.c:1009
+msgid "/G_L Materials..."
+msgstr "/Materiais G_L..."
+
+#: app/toolbox.c:1017
+msgid "/_Toolbox..."
+msgstr "/Caixa de ferramen_tas"
+
+#: app/toolbox.c:1025
+msgid "/_Keyboard Shortcuts"
+msgstr "/Atalhos de _teclado"
+
+#: app/toolbox.c:1033
+msgid "/_Logging Enabled"
+msgstr "/_Registro habilitado"
+
+#: app/toolbox.c:1142
+msgid "Program Messages"
+msgstr "Mensagens do programa"
+
+#: app/toolbox.c:1379
+msgid "Change Default Mask Color"
+msgstr "Mudar máscara de cores padrão"
+
+#: app/toolbox.c:1407
+msgid "OpenGL 3D graphics not available"
+msgstr "Gráficos OpenGL 3D não disponíveis"
+
+#: app/toolbox.c:1412
+msgid "OpenGL was disabled with a command-line option."
+msgstr "O OpenGL foi desabilitado com uma opção de linha de comando."
+
+#: app/toolbox.c:1420
+msgid ""
+"Initialization of OpenGL failed. Check output of <tt>glxinfo</tt> and "
+"warning messages printed to console during Gwyddion startup."
+msgstr ""
+"A inicialização do OpenGL falhou. Verifique a saída do <tt>glxinfo</tt> e "
+"mensagens de alerta exibidas no console durante a inicialização do Gwyddion."
+
+#: app/toolbox.c:1427
+msgid "This version of Gwyddion was built without OpenGL support."
+msgstr "Esta versão do Gwyddion foi compilada sem suporte a OpenGL."
+
+#: app/validate.c:114 app/validate.c:135
+#, c-format
+msgid "byte at position %d"
+msgstr "byte na posição %d"
+
+#: app/validate.c:161 app/validate.c:174
+#, c-format
+msgid "%s instead of %s"
+msgstr "%s ao invés de %s"
+
+#: app/validate.c:389
+#, c-format
+msgid "no channel %d exists for %s"
+msgstr "não existe o canal %d para %s"
+
+#: app/validate.c:401
+#, c-format
+msgid "no graph %d exists for %s"
+msgstr "não existe o gráfico %d para %s"
+
+#: app/validate.c:411
+#, c-format
+msgid "no spectra %d exists for %s"
+msgstr "não existe o espectro %d para %s"
+
+#: app/validate.c:427
+#, c-format
+msgid "no brick %d exists for %s"
+msgstr "não existe tijolo %d para %s"
+
+#: app/validate.c:443
+#, c-format
+msgid "no surface %d exists for %s"
+msgstr "não existe a superfície %d para %s"
+
+#: app/validate.c:498
+#, c-format
+msgid "ref_count is %d for %s"
+msgstr "ref_cont é %d para %s"
+
+#: app/validate.c:681
+msgid "Invalid item key format"
+msgstr "Formato de item chave inválido"
+
+#: app/validate.c:682
+msgid "Item key contains invalid characters"
+msgstr "Item chave contém caracteres inválidos"
+
+#: app/validate.c:683
+msgid "Item key does not belong to any known data"
+msgstr "O item chave não pertence a nenhum dado conhecido"
+
+#: app/validate.c:684
+msgid "Wrong data item id"
+msgstr "Id do item de dados errado"
+
+#: app/validate.c:685
+msgid "Unexpected data item type"
+msgstr "Tipo de item de dados inesperado"
+
+#: app/validate.c:686
+msgid "String value is not valid UTF-8"
+msgstr "Valor da string não é um UTF-8 válido"
+
+#: app/validate.c:687
+msgid "Object has several references"
+msgstr "O objeto tem várias referências"
+
+#: app/validate.c:688
+msgid "Secondary data item has no primary data"
+msgstr "Os dados secundários não possuem dados primários"
+
+#: app/wait.c:114
+msgid "Please wait"
+msgstr "Por favor, aguarde"
+
+#: modules/file/accurexii-txt.c:73
+msgid "Imports Accurex II text files."
+msgstr "Importa arquivos de texto Accurex II"
+
+#: modules/file/accurexii-txt.c:86
+msgid "Accurex II text files (.txt)"
+msgstr "Arquivos de texto Accurex II (.txt)"
+
+#: modules/file/accurexii-txt.c:153
+#, c-format
+msgid "File header cannot be converted from ISO-8859-1 character set: %s"
+msgstr ""
+"Cabeçalho do arquivo não pode ser convertido do conjunto de caracteres "
+"ISO-8859-1: %s"
+
+#: modules/file/aistfile.c:123
+msgid "Imports AIST-NT data files."
+msgstr "Importa arquivos de dados AIST-NT."
+
+#: modules/file/aistfile.c:136
+msgid "AIST-NT files (.aist)"
+msgstr "Arquivos AIST-NT (.aist)"
+
+#: modules/file/alicona.c:147
+msgid "Imports Alicona Imaging AL3D files."
+msgstr "Importa arquivos Alicona Imaging AL3D."
+
+#: modules/file/alicona.c:160
+msgid "Alicona Imaging AL3D files (.al3d)"
+msgstr "Arquivos Alicona Imaging AL3D (.al3d)"
+
+#: modules/file/alicona.c:492
+#, c-format
+msgid "Invalid plane number %u in tag ‘%s’."
+msgstr "Número de plano %u inválido na tag ‘%s’."
+
+#: modules/file/alicona.c:579
+msgid "Header tag key is not nul-terminated."
+msgstr "Tag-chave do cabeçalho não tem final nula."
+
+#: modules/file/alicona.c:584
+msgid "Header tag key is empty."
+msgstr "Tag-chave do cabeçalho está vazia."
+
+# What means nul-padded?
+# O que significa 'nul-padded'?
+#: modules/file/alicona.c:591
+#, c-format
+msgid "Header tag ‘%s’ key is not nul-padded."
+msgstr "Tag-chave ‘%s’ do cabeçalho não tem preenchimento nulo."
+
+#: modules/file/alicona.c:598
+#, c-format
+msgid "Header tag ‘%s’ lacks CRLF terminator."
+msgstr "Falta terminador CRLF na tag ‘%s’ do cabeçalho."
+
+#: modules/file/alicona.c:604
+#, c-format
+msgid "Header tag ‘%s’ value is not nul-terminated."
+msgstr "O valor da tag ‘%s’ do cabeçalho não tem final nulo."
+
+#: modules/file/alicona.c:614
+#, c-format
+msgid "Header tag ‘%s’ value is not nul-padded."
+msgstr "O valor da tag ‘%s’ do cabeçalho não tem preenchimento nulo."
+
+#: modules/file/alicona.c:665 modules/file/gdeffile.c:175
+#: modules/file/gdeffile.c:199 modules/file/gsffile.c:159
+#: modules/file/gxyzffile.c:199 modules/file/iso28600.c:1174
+#: modules/file/microprof.c:361 modules/file/microprof.c:375
+#: modules/file/pt3file.c:489 modules/file/pt3file.c:591
+msgid "File header is truncated."
+msgstr "O cabeçalho do arquivo está truncado."
+
+#: modules/file/alicona.c:680
+msgid "Comment lacks CRLF termination."
+msgstr "Falta o terminador CRLF no comentário."
+
+#: modules/file/alicona.c:685
+msgid "Comment is not nul-terminated."
+msgstr "O comentário não tem final nulo."
+
+#: modules/file/ambfile.c:83
+msgid "Imports Ambios AMB data files."
+msgstr "Importa arquivos de dados Ambios AMB."
+
+#: modules/file/ambfile.c:96
+msgid "Ambios amb files (.amb)"
+msgstr "Arquivos Ambios AMB (.amb)"
+
+#: modules/file/anfatec.c:87
+msgid "Imports Anfatec data files (two-part .txt + .int)."
+msgstr "Importa arquivos Anfatec (duas partes .txt + .int)."
+
+#: modules/file/anfatec.c:100
+msgid "Anfatec files (.par + .int)"
+msgstr "Arquivos Anfatec (.par + .int)"
+
+#: modules/file/anfatec.c:232
+msgid "The parameter file cannot be loaded."
+msgstr "O arquivo de parâmetros não pôde ser carregado."
+
+#: modules/file/anfatec.c:238
+msgid "Cannot find the corresponding parameter file."
+msgstr "Não foi possível encontrar o arquivo de parâmetros correspondente."
+
+#: modules/file/anfatec.c:255
+msgid "FileDescBegin cannot be inside another FileDesc."
+msgstr ""
+"Inicio da descrição do arquivo (FileDescBegin) não pode estar dentro de "
+"outra descrição de arquivo (FileDesc)."
+
+#: modules/file/anfatec.c:267
+msgid "FileDescEnd has no corresponding FileDescBegin."
+msgstr ""
+"Final da descrição do arquivo (FileDescEnd) não tem o inicio da descrição do "
+"arquivo (FileDescBegin) correspondente."
+
+#: modules/file/anfatec.c:294
+msgid "FileDescBegin has no corresponding FileDescEnd."
+msgstr ""
+"Inicio da descrição do arquivo (FileDescBegin) não tem o final da descrição "
+"do arquivo (FileDescEnd) correspondente."
+
+#: modules/file/apedaxfile.c:261
+msgid "Imports A.P.E. Research DAX data files."
+msgstr "Importa arquivos de dados A.P.E. Research DAX."
+
+#: modules/file/apedaxfile.c:276
+msgid "A.P.E. Research DAX Files (.dax) and APDT File (.apdt)"
+msgstr "Arquivos A.P.E. Research DAX (.dax) e arquivo APDT (.apdt)"
+
+#: modules/file/apefile.c:196
+msgid "Imports APE (Applied Physics and Engineering) data files."
+msgstr "Importa arquivos de dados APE (Applied Physics and Engineering)."
+
+#: modules/file/apefile.c:209
+msgid "APE files (.dat)"
+msgstr "Arquivos APE (.dat)"
+
+#: modules/file/asciiexport.c:75
+msgid "Exports data as simple ASCII matrix."
+msgstr "Exporta dados como matriz ASCII simples."
+
+#: modules/file/asciiexport.c:88
+msgid "ASCII data matrix (.txt)"
+msgstr "Matriz de dados ASCII (.txt)"
+
+#: modules/file/asciiexport.c:193 modules/file/asciiexport.c:208
+msgid "Width:"
+msgstr "Largura:"
+
+#: modules/file/asciiexport.c:200 modules/file/asciiexport.c:212
+msgid "Height:"
+msgstr "Altura:"
+
+#: modules/file/asciiexport.c:220 modules/file/xyzexport.c:251
+msgid "Value units:"
+msgstr "Unidades de valor:"
+
+#: modules/file/asciiexport.c:264 modules/graph/graph_export_ascii.c:111
+msgid "Export Text"
+msgstr "Exportar texto"
+
+#: modules/file/asciiexport.c:275 modules/file/gxyzffile.c:402
+#: modules/file/imgexport.c:3532 modules/file/imgexport.c:4151
+#: modules/file/rawfile.c:758 modules/file/xyzexport.c:314
+#: modules/process/calibrate.c:561 modules/process/coerce.c:363
+#: modules/process/col_synth.c:516 modules/process/correct_affine.c:520
+#: modules/process/extend.c:259 modules/process/fft_filter_1d.c:263
+#: modules/process/grain_dist.c:307 modules/process/grain_edge.c:254
+#: modules/process/grain_mark.c:335 modules/process/grain_wshed.c:256
+#: modules/process/linematch.c:819 modules/process/mark_disconn.c:280
+#: modules/process/slope_dist.c:359 modules/process/tip_blind.c:360
+#: modules/process/wpour_mark.c:354 modules/tools/spotremove.c:322
+#: modules/tools/stats.c:401 modules/xyz/xyz_raster.c:597
+msgid "Options"
+msgstr "Opções"
+
+#: modules/file/asciiexport.c:278 modules/file/xyzexport.c:317
+msgid "Use _dot as decimal separator"
+msgstr "Use _ponto como separador decimal"
+
+#: modules/file/asciiexport.c:285 modules/file/xyzexport.c:324
+#: modules/process/grain_dist.c:318
+msgid "Add _informational comment header"
+msgstr "Adiciona cabeçalho de comentário informal"
+
+#: modules/file/asciiexport.c:294 modules/file/xyzexport.c:333
+msgid "_Precision:"
+msgstr "_Precisão:"
+
+#: modules/file/assing-afm.c:72
+msgid "Imports Assing AFM data files."
+msgstr "Importa arquivos de dados Assing AFM."
+
+#: modules/file/assing-afm.c:85
+msgid "Assing AFM files (.afm)"
+msgstr "Arquivos Assing AFM (.afm)"
+
+#: modules/file/attocube.c:84
+msgid "Imports Attocube Systems ASC files."
+msgstr "Importa arquivos Attocube Systems ASC."
+
+#: modules/file/attocube.c:97
+msgid "Attocube ASCII files (.asc)"
+msgstr "Arquivos Attocube ASCII (.asc)"
+
+#: modules/file/bcrfile.c:141
+msgid "Imports Image Metrology BCR data files."
+msgstr "Importa arquivos de dados Image Metrology BCR."
+
+#: modules/file/bcrfile.c:154
+msgid "BCR files (.bcr, .bcrf)"
+msgstr "Arquivos BCR (.bcr, .bcrf)"
+
+#: modules/file/bcrfile.c:233
+#, c-format
+msgid "File header is not convertible from UTF-16: %s"
+msgstr "Cabeçalho do arquivo não é conversível de UTF-16: %s"
+
+#: modules/file/bcrfile.c:346
+#, c-format
+msgid "Unknown file type header: `%s'."
+msgstr "Cabeçalho de tipo de arquivo desconhecido: `%s'."
+
+#: modules/file/burleigh.c:127
+msgid "Imports Burleigh IMG data files version 2.1."
+msgstr "Importa arquivos de dados Burleigh IMG versão 2.1."
+
+#: modules/file/burleigh.c:140
+msgid "Burleigh 2.1 files (.img)"
+msgstr "Arquivos Burleigh 2.1 (.img)"
+
+#: modules/file/burleigh.c:223
+#, c-format
+msgid "File format version %.1f is not supported."
+msgstr "Versão do formato de arquivo %.1f não é suportada."
+
+#: modules/file/burleigh_bii.c:75
+msgid "Imports Burleigh BII binary data files."
+msgstr "Importa arquivos de dados binários Burleigh BII."
+
+#: modules/file/burleigh_bii.c:88
+msgid "Burleigh Image Studio files (.bii)"
+msgstr "Arquivos Burleigh Image Studio (.bii)"
+
+#: modules/file/burleigh_exp.c:88
+msgid "Imports Burleigh text/bin exported images."
+msgstr "Importa imagens exportadas Burleigh text/bin."
+
+#: modules/file/burleigh_exp.c:101
+msgid "Burleigh exported data (.txt, .bin)"
+msgstr "Dados exportados Burleigh (.txt, .bin)"
+
+#: modules/file/burleigh_exp.c:226 modules/file/burleigh_exp.c:267
+#: modules/file/nanoscope.c:1612 modules/file/omicron.c:416
+#: modules/file/shimadzu.c:468
+msgid "Missing colon in header line."
+msgstr "Faltando dois pontos (:) na linha do cabeçalho."
+
+#: modules/file/codevfile.c:71
+msgid "Imports Code V interferogram files."
+msgstr "Importa arquivos de interferograma Code V."
+
+#: modules/file/codevfile.c:84
+msgid "Code V interferogram files (.int)"
+msgstr "Arquivos de interferograma Code V (.int)"
+
+#: modules/file/createc.c:133
+msgid "Imports Createc data files."
+msgstr "Importa arquivos de dados Createc."
+
+#: modules/file/createc.c:146
+msgid "Createc files (.dat)"
+msgstr "Arquivos Createc (.dat)"
+
+#: modules/file/createc.c:185
+#, c-format
+msgid "Neither `%s' nor `%s' header field found."
+msgstr "Nem o `%s' ou o `%s' campo do cabeçalho foi encontrado."
+
+#: modules/file/createc.c:771 modules/file/matfile.c:600
+#: modules/file/rhk-sm4.c:1470
+#, c-format
+msgid "zlib initialization failed with error %d, cannot decompress data."
+msgstr ""
+"Inicialização de zlib falhou com erro %d, não é possível descompactar dados."
+
+#: modules/file/createc.c:785 modules/file/rhk-sm4.c:1484
+#, c-format
+msgid "Decompression of compressed data failed with error %d."
+msgstr "Descompactação dos dados comprimidos falhou com erro %d."
+
+#: modules/file/createc.c:830 modules/file/rhk-sm4.c:1527
+msgid "Cannot decompress compressed data. Zlib support was not built in."
+msgstr ""
+"Não foi possível descompactar os dados compactados. O suporte à zlib não "
+"está embutido."
+
+#: modules/file/csmfile.c:83
+msgid "Imports Benyuan CSM data files."
+msgstr "Importa arquivos de dados Benyuan CSM."
+
+#: modules/file/csmfile.c:96
+msgid "Benyuan CSM files (.csm)"
+msgstr "Arquivos Benyuan CSM (.csm)"
+
+#: modules/file/dektakvca.c:197
+#, fuzzy
+msgid "Imports Dektak OPDx data files."
+msgstr "Importa arquivos de dados Dektak XML."
+
+#: modules/file/dektakvca.c:210
+#, fuzzy
+msgid "Dektak OPDx data files (.OPDx)"
+msgstr "Arquivos de dados Dektak XML (.xml)"
+
+#: modules/file/dektakvca.c:655
+#, fuzzy, c-format
+msgid "Item `%s' has unexpected type %u instead of %u."
+msgstr "A sessão %s terminou na linha %u ao invés de %s."
+
+#: modules/file/dektakvca.c:1022
+#, fuzzy, c-format
+msgid "Truncated data inside item %s."
+msgstr "Dados truncados no bloco %s"
+
+#: modules/file/dektakxml.c:118
+msgid "Imports Dektak XML data files."
+msgstr "Importa arquivos de dados Dektak XML."
+
+#: modules/file/dektakxml.c:131
+msgid "Dektak XML data files (.xml)"
+msgstr "Arquivos de dados Dektak XML (.xml)"
+
+#: modules/file/dektakxml.c:208 modules/file/lextfile.c:260
+#: modules/file/nanoscan.c:270 modules/file/ometiff.c:265
+#, c-format
+msgid "XML parsing failed: %s"
+msgstr "Análise de XML falhou: %s"
+
+#: modules/file/dektakxml.c:373 modules/file/lextfile.c:163
+#: modules/file/nanoscan.c:698 modules/file/ometiff.c:445
+#, c-format
+msgid "Top-level element is not ‘%s’."
+msgstr "Elemento de nível-máximo não é ‘%s’."
+
+#: modules/file/dimensionfile.c:71
+msgid "Imports old Veeco Dimension 3100D files."
+msgstr "Importa arquivos antigos Veeco Dimension 3100D."
+
+#: modules/file/dimensionfile.c:84
+msgid "Dimension 3100D files (.001, .002, ...)"
+msgstr "Arquivos Dimension 3100D (.001, .002, ...)"
+
+#: modules/file/dm3file.c:274
+msgid "Reads Digital Micrograph DM3 and DM4 files."
+msgstr "Lê arquivos Digital Micrograph DM3 e DM4."
+
+#: modules/file/dm3file.c:287
+msgid "Digital Micrograph DM3 TEM data (.dm3)"
+msgstr "Dados Digital Micrograph DM3 TEM (.dm3)"
+
+#: modules/file/dm3file.c:293
+msgid "Digital Micrograph DM4 TEM data (.dm4)"
+msgstr "Dados Digital Micrograph DM4 TEM (.dm4)"
+
+#: modules/file/dm3file.c:1014
+#, c-format
+msgid "Invalid tag type definition in entry ‘%s’."
+msgstr "Definição de tipo de tag inválido na entrada ‘%s’."
+
+#: modules/file/dm3file.c:1026
+#, c-format
+msgid "File is truncated in entry ‘%s’."
+msgstr "Arquivo está truncado na entrada ‘%s’."
+
+#: modules/file/dm3file.c:1119 modules/file/dm3file.c:1179
+msgid "Tag entry type is neither group nor data."
+msgstr "Tipo de entrada da tag não é nem grupo nem dados."
+
+#: modules/file/dm3file.c:1239 modules/file/dm3file.c:1304
+#, c-format
+msgid "Tag type does not start with marker ‘%s’."
+msgstr "Tipo de tag não começa com marcador ‘%s’."
+
+#: modules/file/dm3file.c:1457
+#, c-format
+msgid "Invalid or unsupported tag type %u."
+msgstr "Tipo de tag %u inválida ou não suportada."
+
+#: modules/file/dmefile.c:131
+msgid "Imports Danish Micro Engineering (DME) data files."
+msgstr "Importa arquivos de dados Danish Micro Engineering (DME)."
+
+#: modules/file/dmefile.c:144
+msgid "DME files (.img)"
+msgstr "Arquivos DME (.img)"
+
+#: modules/file/dmefile.c:198
+#, c-format
+msgid "Header is too short (only %d bytes)."
+msgstr "Cabeçalho é muito curto (somente %d bytes)."
+
+#: modules/file/dmefile.c:212
+#, c-format
+msgid "Data size %u does not match data dimensions (%u×%u)."
+msgstr "Tamanho dos dados %u não corresponde às dimensões dos dados (%u×%u)."
+
+# I think this translation must be improved.
+# Acredito que esta tradução precise ser melhorada.
+#: modules/file/dumbfile.c:70
+msgid "Reads and exports Gwyddion dumb dump files."
+msgstr "Lê e exporta arquivos absurdos e abandonados do Gwyddion."
+
+#: modules/file/dumbfile.c:83
+msgid "Gwyddion dumb dump files (.dump)"
+msgstr "Arquivos absurdos e abandonados do Gwyddion (.dump)"
+
+#: modules/file/dumbfile.c:161 modules/plugin-proxy.c:1255
+msgid "End of file reached when value was expected."
+msgstr "Fim de arquivo alcançado quando um valor era esperado."
+
+#: modules/file/dumbfile.c:193 modules/plugin-proxy.c:1284
+msgid "Missing data field width."
+msgstr "Faltando largura do campo de dados."
+
+#: modules/file/dumbfile.c:206 modules/plugin-proxy.c:1297
+msgid "Missing data field height."
+msgstr "Faltando altura do campo de dados."
+
+#: modules/file/dumbfile.c:236 modules/plugin-proxy.c:1327
+msgid "Data field dimensions are not positive numbers."
+msgstr "Dimensões do campo de dados não são números positivos."
+
+#: modules/file/dumbfile.c:277 modules/plugin-proxy.c:1368
+msgid "End of file reached inside a data field."
+msgstr "Final do arquivo alcançado dentro de um campo de dados."
+
+#: modules/file/dumbfile.c:298 modules/plugin-proxy.c:1389
+msgid "Missing end of data field marker."
+msgstr "Faltando final do marcador do campo de dados."
+
+#: modules/file/ecsfile.c:84
+msgid "Imports ECS IMG files."
+msgstr "Importa arquivos ECS IMG."
+
+#: modules/file/ecsfile.c:97
+msgid "ECS files (.img)"
+msgstr "Arquivos ECS (.img)"
+
+#: modules/file/ecsfile.c:174
+msgid "Scan size header field overlaps with data."
+msgstr "Varredura do tamanho de um campo de cabeçalho sobrepõe com dados."
+
+#: modules/file/err.h:48 modules/file/nrrdfile.c:779
+#: modules/file/nrrdfile.c:824 modules/pygwy/pygwy-console.c:504
+#, c-format
+msgid "Cannot read from file: %s."
+msgstr "Não foi possível ler do arquivo: %s."
+
+#: modules/file/err.h:70
+#, c-format
+msgid "No data file corresponding to `%s' was found."
+msgstr "Nenhum arquivo de dados correspondendo a `%s' foi encontrado."
+
+#: modules/file/err.h:78
+msgid "File is too short to be of the assumed file type."
+msgstr "O arquivo é muito curto para ser do tipo de arquivo assumido."
+
+#: modules/file/err.h:85
+#, c-format
+msgid ""
+"File is not a %s file, it is seriously damaged, or it is of an unknown "
+"format version."
+msgstr ""
+"O arquivo não é um arquivo %s, ele está seriamente danificado, ou é de um "
+"formato de versão desconhecida."
+
+#: modules/file/err.h:96
+#, c-format
+msgid ""
+"Expected data size calculated from file headers is %u bytes, but the real "
+"size is %u bytes."
+msgstr ""
+"O tamanho dos dados esperados calculados a partir dos cabeçalhos dos arquivo "
+"é de %u bytes, mas o tamanho real é de %u bytes."
+
+#: modules/file/err.h:109 modules/file/rhk-sm4.c:765
+#, c-format
+msgid "Invalid field dimension: %d."
+msgstr "Dimensão do campo inválida: %d."
+
+#: modules/file/err.h:117
+#, c-format
+msgid ""
+"The number of bits per sample %d is invalid or unsupported for this file "
+"type."
+msgstr ""
+"O número de %d bits por amostra é inválido ou não suportado por este tipo de "
+"arquivo."
+
+#: modules/file/err.h:127
+#, c-format
+msgid "Data type %d is invalid or unsupported."
+msgstr "O tipo de dados %d é inválido ou não suportado."
+
+#: modules/file/err.h:134
+#, c-format
+msgid "Header field `%s' is missing."
+msgstr "O campo do cabeçalho `%s' está faltando."
+
+#: modules/file/err.h:142
+#, c-format
+msgid "The value of parameter `%s' is invalid or unsupported."
+msgstr "O valor do parâmetro `%s' é inválido ou não suportado."
+
+#: modules/file/err.h:150
+#, c-format
+msgid "Parameter `%s' is missing or invalid."
+msgstr "O Parâmetro `%s' está faltando ou é inválido."
+
+#: modules/file/err.h:158
+msgid "File contains no (importable) data."
+msgstr "O arquivo não contém dados (importáveis)."
+
+#: modules/file/err.h:165
+msgid "File contains no exportable channel."
+msgstr "O arquivo não contém canais exportáveis."
+
+#: modules/file/err.h:173
+msgid "File import was canceled by user."
+msgstr "A importação do arquivo foi cancelada pelo usuário."
+
+#: modules/file/err.h:187
+msgid "Missing header."
+msgstr "Faltando cabeçalho."
+
+#: modules/file/ezdfile.c:135
+msgid "Imports Nanosurf EZD and NID data files."
+msgstr "Importa arquivos de dados Nanosurf EZD e NID."
+
+#: modules/file/ezdfile.c:148
+msgid "Nanosurf files (.ezd, .nid)"
+msgstr "Arquivos Nanosurf (.ezd, .nid)"
+
+#: modules/file/ezdfile.c:321
+msgid "Garbage before first header section."
+msgstr "Lixo antes da primeira sessão do cabeçalho."
+
+#: modules/file/ezdfile.c:332 modules/file/nanoscope-ii.c:259
+msgid "Malformed header line (missing =)."
+msgstr "Linha do cabeçalho mal formatada (faltando =)."
+
+#: modules/file/ezdfile.c:431
+msgid "First section isn't DataSet"
+msgstr "Primeira sessão não é conjunto de dados (DataSet)."
+
+#: modules/file/ezdfile.c:437
+msgid "GroupCount in [DataSet]"
+msgstr "Contagem de grupo (GroupCount) em [DataSet]"
+
+#: modules/file/femtoscan-txt.c:77
+msgid "Imports FemtoScan TXT files."
+msgstr "Importa arquivos FemtoScan TXT."
+
+#: modules/file/femtoscan-txt.c:90
+msgid "FemtoScan text files (.txt)"
+msgstr "Arquivos de texto FemtoScan (.txt)."
+
+#: modules/file/femtoscan-txt.c:189
+msgid "Data line does not start with a Y abscissa."
+msgstr "Linha de dados não começa com uma abcissa Y."
+
+#: modules/file/femtoscan-txt.c:197
+#, c-format
+msgid ""
+"Data line length %u does not correspond to the number of X abscissas %u."
+msgstr ""
+"Tamanho da linha de dados %u não corresponde ao número de %u abcissas X."
+
+#: modules/file/femtoscan.c:81
+msgid "Imports FemtoScan SPM data files."
+msgstr "Importa arquivos de dados FemtoScan SPM."
+
+#: modules/file/femtoscan.c:94
+msgid "FemtoScan SPM files"
+msgstr "Arquivos FemtoScan SPM"
+
+#: modules/file/femtoscan.c:285 modules/file/miffile.c:690
+#: modules/file/mulfile.c:304
+msgid "Image data are outside the file."
+msgstr "Dados da imagem estão fora do arquivo."
+
+#: modules/file/fitsfile.c:76
+msgid "Reads Flexible Image Transport System (FITS) files."
+msgstr "Lê arquivos Flexible Image Transport System (FITS)."
+
+#: modules/file/fitsfile.c:89
+msgid "Flexible Image Transport System FITS (.fits)"
+msgstr "Flexible Image Transport System FITS (.fits)"
+
+#: modules/file/fitsfile.c:128
+#, c-format
+msgid "CFITSIO error while reading the FITS file: %s."
+msgstr "Erro CFITSIO ao ler o arquivo FITS: %s."
+
+#: modules/file/fitsfile.c:160 modules/file/fitsfile.c:172
+#: modules/file/fitsfile.c:183 modules/file/spmxfile.c:385
+msgid "Only two-dimensional images are supported."
+msgstr "Apenas imagens bidimensionais são suportadas."
+
+#: modules/file/gdeffile.c:129
+msgid "Imports DME GDEF data files."
+msgstr "Importa arquivos de dados DME GDEF."
+
+#: modules/file/gdeffile.c:142
+msgid "DME GDEF files (.gdf)"
+msgstr "Arquivos DME GDEF (.gdf)"
+
+#: modules/file/gdeffile.c:187
+#, c-format
+msgid "File version %u.%u is not supported."
+msgstr "Arquivo versão %u. %u não é suportada."
+
+#: modules/file/gdeffile.c:218
+msgid "Control block is truncated."
+msgstr "O bloco de controle está truncado."
+
+#: modules/file/gdeffile.c:225
+msgid "Control block mark is not CB, file is damaged."
+msgstr "Marca do bloco de controle não é CB, o arquivo está danificado."
+
+#: modules/file/gdeffile.c:247
+msgid "Variable record is truncated."
+msgstr "A gravação variável está truncada."
+
+#: modules/file/gdeffile.c:258
+#, c-format
+msgid "Unknown variable type %u."
+msgstr "Tipo de variável %u é desconhecida."
+
+#: modules/file/gdeffile.c:303
+#, c-format
+msgid "Data of variable %s is truncated."
+msgstr "Dado da variável %s está truncado."
+
+#: modules/file/gsffile.c:91
+msgid "Reads and exports Gwyddion Simple Field files."
+msgstr "Lê e exporta arquivo Gwyddion Simple Field."
+
+#: modules/file/gsffile.c:104
+msgid "Gwyddion Simple Field (.gsf)"
+msgstr "Gwyddion Simple Field (.gsf)"
+
+#: modules/file/gwyfile.c:104
+msgid "Loads and saves Gwyddion native data files (serialized objects)."
+msgstr ""
+"Carrega e salva arquivos de dados nativos do Gwyddion (objetos serializados)."
+
+#: modules/file/gwyfile.c:117
+msgid "Gwyddion native format (.gwy)"
+msgstr "Formato nativo do Gwyddion (.gwy)"
+
+#: modules/file/gwyfile.c:179
+msgid "Data deserialization failed."
+msgstr "Deserialização de dados falhou."
+
+#: modules/file/gwyfile.c:184
+#, c-format
+msgid ""
+"Data deserialization succeeded, but resulted in an unexpected object %s."
+msgstr ""
+"Deserialização de dados funcionou, mas resultou em um objeto inesperado %s."
+
+#: modules/file/gwytiff.h:335
+#, c-format
+msgid "BigTIFF reserved fields are %u and %u instead of 8 and 0."
+msgstr "Campos reservados BigTIFF são %u e %u ao invés de 8 e 0."
+
+#: modules/file/gwytiff.h:352 modules/file/gwytiff.h:369
+#, c-format
+msgid "TIFF directory %lu ended unexpectedly."
+msgstr "O diretório %lu TIFF terminou inesperadamente."
+
+#: modules/file/gwytiff.h:487
+#, c-format
+msgid "BigTIFF data type %u was found in a classic TIFF."
+msgstr "Tipo de dados %u BigTIFF foi encontrado em um TIFF clássico."
+
+#: modules/file/gwytiff.h:504
+msgid "Invalid tag data positions were found."
+msgstr "Posições de dados de tag inválidos foram encontrados."
+
+#: modules/file/gwytiff.h:877 modules/file/gwytiff.h:892
+#: modules/file/gwytiff.h:1015 modules/file/gwytiff.h:1022
+#, c-format
+msgid "Required tag %u was not found."
+msgstr "Tag %u requerida não foi encontrada."
+
+#: modules/file/gwytiff.h:945 modules/file/gwytiff.h:989
+#: modules/file/keyence.c:449 modules/file/matfile.c:276
+#: modules/file/matfile.c:298 modules/file/omicronflat.c:1962
+#: modules/file/princetonspe.c:339 modules/file/psia.c:352
+#: modules/file/zemax.c:168
+msgid "File is truncated."
+msgstr "O arquivo está truncado."
+
+#: modules/file/gwytiff.h:1047
+msgid "Non-uniform bits per sample are unsupported."
+msgstr "Bits por amostra não uniformes não são suportados."
+
+#: modules/file/gwytiff.h:1074 modules/file/zeisslsm.c:973
+#, c-format
+msgid "Compression type %u is not supported."
+msgstr "Tipo %u de compressão não pe suportada."
+
+#: modules/file/gwytiff.h:1080
+#, c-format
+msgid "Planar configuration %u is not supported."
+msgstr "Configuração %u planar não é suportada."
+
+#: modules/file/gwytiff.h:1104
+msgid "Unsupported sample format"
+msgstr "Formato de amostra não suportada"
+
+#: modules/file/gwyzip.h:159
+msgid "Unknown error"
+msgstr "Erro desconhecido"
+
+#: modules/file/gwyzip.h:164
+msgid "End of file"
+msgstr "Final do arquivo"
+
+#: modules/file/gwyzip.h:166 modules/file/gwyzip.h:355
+msgid "End of list of files"
+msgstr "Final da lista de arquivos"
+
+#: modules/file/gwyzip.h:168
+msgid "Parameter error"
+msgstr "Erro de parâmetro"
+
+#: modules/file/gwyzip.h:170
+msgid "Bad zip file"
+msgstr "Arquivo zip ruim"
+
+#: modules/file/gwyzip.h:172
+msgid "Internal error"
+msgstr "Erro interno"
+
+#: modules/file/gwyzip.h:174
+msgid "CRC error"
+msgstr "Erro CRC"
+
+#: modules/file/gwyzip.h:177
+#, c-format
+msgid "Minizip error while reading the zip file: %s (%d)."
+msgstr "Erro do minizip ao ler o arquivo zip: %s (%d)."
+
+#: modules/file/gwyzip.h:248 modules/file/jpkscan.c:2776
+#, c-format
+msgid "File %s is missing in the zip file."
+msgstr "O arquivo %s está faltando no arquivo zip."
+
+#: modules/file/gwyzip.h:354 modules/file/gwyzip.h:366
+#, c-format
+msgid "Libzip error while reading the zip file: %s."
+msgstr "Erro do libzip ao ler o arquivo zip: %s."
+
+#: modules/file/gwyzip.h:450
+msgid "Cannot obtain the uncompressed file size."
+msgstr "Não foi possível obter o tamanho do arquivo descompactado."
+
+#: modules/file/gwyzip.h:464
+msgid "Cannot read file contents."
+msgstr "Não foi possível ler o conteúdo do arquivo."
+
+#: modules/file/gxyzffile.c:118
+msgid "Imports Gwyddion XYZ field files."
+msgstr "Importa arquivos de campo Gwyddion XYZ."
+
+#: modules/file/gxyzffile.c:131
+msgid "GwyXYZ data files"
+msgstr "Arquivos de dados GwyXYZ"
+
+#: modules/file/gxyzffile.c:226
+#, c-format
+msgid "Data size %lu is not a multiple of point size %u."
+msgstr "O tamanho %lu dos dados não é um múltiplo do tamanho %u do ponto."
+
+#: modules/file/gxyzffile.c:381
+msgid "Export GXYZF"
+msgstr "Exportar GXYZF"
+
+#: modules/file/gxyzffile.c:395 modules/file/xyzexport.c:241
+#: modules/file/xyzexport.c:307
+msgid "XYZ data:"
+msgstr "Dados XYZ:"
+
+#: modules/file/gxyzffile.c:405
+msgid "Multi-channel file with all compatible data"
+msgstr "Arquivo multicanal com todos os dados compatíveis"
+
+#: modules/file/hdf4file.c:339
+msgid "Imports Hierarchical Data Format (HDF) files, version 4."
+msgstr "Importa arquivos Hierarchical Data Format (HDF), versão 4."
+
+#: modules/file/hdf4file.c:360
+msgid "Psi HDF4 files (.hdf)"
+msgstr "Arquivos Psi HDF4 (.hdf)"
+
+#: modules/file/hdf4file.c:541
+msgid "PSI binary header is too short."
+msgstr "Cabeçalho do PSI binário é muito curto."
+
+#: modules/file/hdf4file.c:654
+msgid "Data descriptor header is truncated."
+msgstr "Cabeçalho do descritor de dados está truncado."
+
+#: modules/file/hdf4file.c:664
+msgid "Data descriptor block is truncated."
+msgstr "O bloco do descritor de dados está truncado."
+
+#: modules/file/hdf4file.c:698
+msgid "HDF data with `native' type is not supported."
+msgstr "Dados HDF com tipo 'nativo' não é suportado."
+
+#: modules/file/hdrimage.cc:274
+msgid ""
+"Imports 16bit grayscale PPM, PNG and TIFF images, imports and exports "
+"OpenEXR images (if available)."
+msgstr ""
+"Importa imagens em escala de cinza de 16bits PPM, PNG e TIFF, importa e "
+"exporta imagens OpenEXR (se disponível)."
+
+#: modules/file/hdrimage.cc:289
+msgid "OpenEXR images (.exr)"
+msgstr "Imagens OpenEXR (.exr)"
+
+#: modules/file/hdrimage.cc:297
+msgid "PNG images with 16bit depth (.png)"
+msgstr "Imagens PNG com 16bits de profundidade (.png)"
+
+#: modules/file/hdrimage.cc:304
+msgid "PGM images with 16bit depth (.pgm)"
+msgstr "Imagens PGM com 16bits de profundidade (.pgm)"
+
+#: modules/file/hdrimage.cc:310
+msgid "TIFF and BigTIFF images with high depth (.tiff)"
+msgstr "Imagens TIFF e BigTIFF com grande profundidade (.tiff)"
+
+#: modules/file/hdrimage.cc:391
+#, c-format
+msgid "EXR image writing failed with libImf error: %s"
+msgstr "Falha ao escrever imagem EXR com erro libImf: %s"
+
+#: modules/file/hdrimage.cc:414
+msgid "Export EXR Image"
+msgstr "Exporta imagem EXR"
+
+#: modules/file/hdrimage.cc:430
+msgid "Data format:"
+msgstr "Formato dos dados:"
+
+#: modules/file/hdrimage.cc:439
+msgid "Half (16bit float)"
+msgstr "Metade (ponto flutuante 16bits)"
+
+#: modules/file/hdrimage.cc:440
+msgid "Float (32bit)"
+msgstr "Ponto flutuante (32bits)"
+
+#: modules/file/hdrimage.cc:441
+msgid "Integer (32bit)"
+msgstr "Inteiro (32bits)"
+
+#: modules/file/hdrimage.cc:446
+msgid "_Z scale:"
+msgstr "Escala _Z:"
+
+#: modules/file/hdrimage.cc:475
+msgid "Representable"
+msgstr "Representável"
+
+#: modules/file/hdrimage.cc:480 modules/graph/graph_stats.c:146
+#: modules/tools/stats.c:203
+msgid "Minimum:"
+msgstr "Mínimo:"
+
+#: modules/file/hdrimage.cc:496 modules/graph/graph_stats.c:147
+#: modules/tools/stats.c:204
+msgid "Maximum:"
+msgstr "Máximo:"
+
+#: modules/file/hdrimage.cc:527
+msgid "_Use"
+msgstr "_Usar"
+
+#: modules/file/hdrimage.cc:825
+#, c-format
+msgid "EXR image loading failed with libImf error: %s"
+msgstr "Carregamento de imagem EXR falhou com erro libImf: %s"
+
+#: modules/file/hdrimage.cc:974
+#, c-format
+msgid "OpenEXR data type %u is invalid or unsupported."
+msgstr "O tipo de dados %u OpenEXR é inválido ou não suportado."
+
+#: modules/file/hdrimage.cc:1433 modules/file/hdrimage.cc:1442
+#: modules/file/imgexport.c:5198 modules/file/imgexport.c:5209
+#, c-format
+msgid "libpng initialization error (in %s)"
+msgstr "Erro na inicialização de libpng (em %s)"
+
+#: modules/file/hdrimage.cc:1451 modules/file/imgexport.c:5273
+#, fuzzy
+msgid "libpng error occurred"
+msgstr "Um erro libpng ocorreu"
+
+#. TRANSLATORS: Dialog title; %s is PNG, TIFF, ...
+#: modules/file/hdrimage.cc:2210 modules/file/pixmap.c:786
+#, c-format
+msgid "Import %s"
+msgstr "Importar %s"
+
+#: modules/file/hdrimage.cc:2237 modules/file/pixmap.c:813
+msgid "Image Information"
+msgstr "Informação da imagem"
+
+#: modules/file/hdrimage.cc:2246 modules/file/pixmap.c:820
+msgid "Horizontal size:"
+msgstr "Tamanho horizontal:"
+
+#: modules/file/hdrimage.cc:2252 modules/file/pixmap.c:826
+msgid "Vertical size:"
+msgstr "Tamanho vertical:"
+
+#: modules/file/hdrimage.cc:2257 modules/file/pixmap.c:831
+msgid "Channels:"
+msgstr "Canais:"
+
+#: modules/file/hdrimage.cc:2263
+msgid "Pages:"
+msgstr "Páginas:"
+
+#: modules/file/hdrimage.cc:2290 modules/file/imgexport.c:3059
+#: modules/file/pixmap.c:862 modules/file/rawfile.c:649
+#: modules/process/dimensions.h:449 modules/xyz/xyz_drift.c:774
+#: modules/xyz/xyz_raster.c:535
+msgid "Physical Dimensions"
+msgstr "Dimensões físicas "
+
+#: modules/file/hdrimage.cc:2330 modules/file/hdrimage.cc:2395
+#: modules/file/pixmap.c:894 modules/file/pixmap.c:949
+#: modules/file/rawfile.c:681 modules/file/rawfile.c:737
+#: modules/process/calcoefs_new.c:408 modules/process/calcoefs_new.c:475
+#: modules/process/calcoefs_simple.c:391 modules/process/calcoefs_simple.c:458
+#: modules/process/calcoefs_view.c:511 modules/process/calcoefs_view.c:549
+#: modules/process/calibrate.c:459 modules/process/calibrate.c:514
+#: modules/process/dimensions.h:143 modules/process/volumize_layers.c:259
+#: modules/volume/volume_calibrate.c:409 modules/volume/volume_calibrate.c:429
+#: modules/volume/volume_calibrate.c:449 modules/volume/volume_calibrate.c:498
+msgid "verb|Change"
+msgstr "Mudar"
+
+#: modules/file/hdrimage.cc:2345 modules/file/pixmap.c:907
+#: modules/file/rawfile.c:694 modules/process/crosscor.c:260
+#: modules/process/dimensions.h:459
+msgid "H_eight:"
+msgstr "_Altura:"
+
+#: modules/file/hdrimage.cc:2354 modules/file/nmmxyz.c:570
+#: modules/file/pixmap.c:914 modules/file/rawfile.c:701
+msgid "Identical _measures"
+msgstr "_Medidas idênticas"
+
+#: modules/file/hdrimage.cc:2368 modules/file/pixmap.c:926
+#: modules/file/rawfile.c:713
+msgid "_Z-scale (per sample unit):"
+msgstr "Escala _Z (por unidade de amostra):"
+
+#: modules/file/hdrimage.cc:2557 modules/file/pixmap.c:1176
+#: modules/file/rawfile.c:1386 modules/process/calcoefs_new.c:819
+#: modules/process/calcoefs_simple.c:1197 modules/process/calcoefs_view.c:1380
+#: modules/process/calibrate.c:1013 modules/process/dimensions.h:177
+#: modules/process/volumize_layers.c:314 modules/volume/volume_calibrate.c:957
+msgid "Change Units"
+msgstr "Modificar unidades"
+
+#: modules/file/hdrimage.cc:2571 modules/file/pixmap.c:1190
+#: modules/file/rawfile.c:1400 modules/process/calcoefs_new.c:832
+#: modules/process/calcoefs_simple.c:1210 modules/process/calcoefs_view.c:1393
+#: modules/process/calibrate.c:1027 modules/process/dimensions.h:190
+#: modules/process/volumize_layers.c:328 modules/volume/volume_calibrate.c:971
+msgid "New _units:"
+msgstr "Novas _unidades:"
+
+#: modules/file/hitachi-afm.c:107
+msgid "Imports Hitachi AFM files."
+msgstr "Importa arquivos Hitachi AFM."
+
+#: modules/file/hitachi-afm.c:122
+msgid "Hitachi AFM files (.afm)"
+msgstr "Arquivos Hitachi AFM (.afm)"
+
+#: modules/file/hitachi-afm.c:128
+msgid "Hitachi AFM files, old (.afm)"
+msgstr "Arquivos Hitachi AFM, antigos (.afm)"
+
+#: modules/file/hitachi-afm.c:205
+#, c-format
+msgid "Hitachi-AFM has not registered file type `%s'."
+msgstr "Hitachi-AFM não tem tipo de arquivo `%s' registrado."
+
+#: modules/file/hitachi-sem.c:84
+msgid "Imports Hitachi S-3700 and S-4800 SEM files."
+msgstr "Importa arquivos SEM Hitachi S-3700 e S-4800."
+
+#: modules/file/hitachi-sem.c:97
+msgid "Hitachi SEM files (.txt + image)"
+msgstr "Arquivos SEM Hitachi (.txt + imagem)"
+
+#: modules/file/hitachi-sem.c:167 modules/file/oldmda.c:246
+#: modules/file/unisoku.c:235
+msgid "No corresponding data file was found for header file."
+msgstr ""
+"Nenhum arquivo de dados correspondente foi encontrado para o cabeçalho do "
+"arquivo."
+
+#: modules/file/hitachi-sem.c:173
+#, c-format
+msgid "Cannot load image: %s"
+msgstr "Não foi possível carregar imagem: %s"
+
+#: modules/file/hitachi-sem.c:189
+#, c-format
+msgid "Field DataSize %ux%u does not match image dimensions %ux%u."
+msgstr ""
+"O campo tamanho do arquivo (DataSize) %ux%u não corresponde às dimensões da "
+"imagem %ux%u."
+
+#: modules/file/igorfile.c:210
+msgid "Imports Igor binary waves (.ibw)."
+msgstr "Importa ondas binárias Igor (.ibw)."
+
+#: modules/file/igorfile.c:223
+msgid "Igor binary waves (.ibw)"
+msgstr "Ondas binárias Igor (.ibw)"
+
+#: modules/file/igorfile.c:283
+#, c-format
+msgid "Format version is %d. Only version 5 is supported."
+msgstr "A versão do formato é %d. Apenas a versão 5 é suportada."
+
+#: modules/file/igorfile.c:305
+msgid "Only two-dimensional data are supported."
+msgstr "Apenas dados bidimensionais são suportados."
+
+#: modules/file/igorfile.c:317
+#, c-format
+msgid "Number of data points %u does not match resolutions %u×%u×%u."
+msgstr "O número de pontos dos dados %u não corresponde à resolução %u×%u×%u."
+
+#: modules/file/igorfile.c:331
+#, c-format
+msgid "Data size %u does not match the number of data points %u×%u."
+msgstr ""
+"Tamanho dos dados %u não corresponde ao número de pontos dos dados %u×%u."
+
+#: modules/file/igorfile.c:369
+msgid "Cannot read channel labels."
+msgstr "Não foi possível ler os rótulos dos canais."
+
+#: modules/file/imgexport.c:391 modules/file/pixmap.c:178
+msgid "Portable Network Graphics (.png)"
+msgstr "Portable Network Graphics (.png)"
+
+#: modules/file/imgexport.c:397 modules/file/pixmap.c:182
+msgid "JPEG (.jpeg,.jpg)"
+msgstr "JPEG (.jpeg,.jpg)"
+
+#: modules/file/imgexport.c:403 modules/file/pixmap.c:186
+msgid "TIFF (.tiff,.tif)"
+msgstr "TIFF (.tiff,.tif)"
+
+#: modules/file/imgexport.c:409 modules/file/pixmap.c:190
+msgid "Portable Pixmap (.ppm,.pnm)"
+msgstr "Portable Pixmap (.ppm,.pnm)"
+
+#: modules/file/imgexport.c:415 modules/file/pixmap.c:194
+msgid "Windows or OS2 Bitmap (.bmp)"
+msgstr "Windows ou OS2 Bitmap (.bmp)"
+
+#: modules/file/imgexport.c:421 modules/file/pixmap.c:198
+msgid "TARGA (.tga,.targa)"
+msgstr "TARGA (.tga,.targa)"
+
+#: modules/file/imgexport.c:428
+msgid "WebP (.webp)"
+msgstr "WebP (.webp)"
+
+#: modules/file/imgexport.c:436
+msgid "Portable document format (.pdf)"
+msgstr "Portable document format (.pdf)"
+
+#: modules/file/imgexport.c:444
+msgid "Encapsulated PostScript (.eps)"
+msgstr "Encapsulated PostScript (.eps)"
+
+#: modules/file/imgexport.c:452
+msgid "Scalable Vector Graphics (.svg)"
+msgstr "Scalable Vector Graphics (.svg)"
+
+#: modules/file/imgexport.c:462 modules/tools/selectionmanager.c:269
+msgid "Horiz./vert. lines"
+msgstr "Linhas horiz./vert."
+
+#: modules/file/imgexport.c:466 modules/tools/selectionmanager.c:270
+msgid "Ellipses"
+msgstr "Elipses"
+
+#: modules/file/imgexport.c:470 modules/tools/selectionmanager.c:272
+msgid "Lines"
+msgstr "Linhas"
+
+#: modules/file/imgexport.c:478 modules/tools/selectionmanager.c:275
+msgid "Rectangles"
+msgstr "Retângulos"
+
+#: modules/file/imgexport.c:482 modules/process/lat_synth.c:565
+#: modules/process/lat_synth.c:637 modules/tools/selectionmanager.c:271
+msgid "Lattice"
+msgstr "Rede"
+
+#: modules/file/imgexport.c:486
+msgid "Path"
+msgstr "Caminho"
+
+#: modules/file/imgexport.c:492 modules/file/imgexport.c:498
+msgid "ruler|_None"
+msgstr "régua|_Nenhuma"
+
+#: modules/file/imgexport.c:493
+msgid "_Rulers"
+msgstr "_Réguas"
+
+#: modules/file/imgexport.c:494
+msgid "_Inset scale bar"
+msgstr "_Inserir barra de escala"
+
+#: modules/file/imgexport.c:499
+msgid "_False color ruler"
+msgstr "Régua de cores _falsa"
+
+#: modules/file/imgexport.c:503
+msgid "title|None"
+msgstr "título|Nenhum"
+
+#: modules/file/imgexport.c:504
+msgid "At the top"
+msgstr "No topo"
+
+#: modules/file/imgexport.c:505
+msgid "Along the right edge"
+msgstr "Ao longo da borda direita"
+
+#: modules/file/imgexport.c:511
+msgid ""
+"Renders data into vector (SVG, PDF, EPS) and pixmap (PNG, JPEG, TIFF, WebP, "
+"PPM, BMP, TARGA) images. Export to some formats relies on GDK and other "
+"libraries thus may be installation-dependent."
+msgstr ""
+"Renderiza dados em vetores (SVG, PDF, EPS) e imagens pixmap (PNG, JPEG, "
+"TIFF, WebP, PPM, BMP, TARGA). Exportação para alguns formatos invoca GDK e "
+"outrasbibliotecas, deste modo, pode depender da instalação."
+
+#: modules/file/imgexport.c:2933
+msgid "Select Color"
+msgstr "Selecionar cor"
+
+#: modules/file/imgexport.c:3005
+msgid "White"
+msgstr "Branco "
+
+#: modules/file/imgexport.c:3014
+msgid "Black"
+msgstr "Preto"
+
+#: modules/file/imgexport.c:3069
+msgid "Pi_xel size:"
+msgstr "Tamanho do pi_xel:"
+
+#: modules/file/imgexport.c:3077
+msgid "Pixels per _inch:"
+msgstr "Pixeis por polegada:"
+
+#: modules/file/imgexport.c:3102
+msgid "_Zoom:"
+msgstr "_Zoom:"
+
+#: modules/file/imgexport.c:3120 modules/process/bdep_synth.c:430
+#: modules/process/col_synth.c:486 modules/process/diff_synth.c:508
+#: modules/process/domain_synth.c:510 modules/process/fibre_synth.c:540
+#: modules/process/grain_mark.c:284 modules/process/lat_synth.c:753
+#: modules/process/obj_synth.c:573 modules/process/pat_synth.c:853
+#: modules/process/pat_synth.c:1155 modules/process/pat_synth.c:1490
+#: modules/process/phase_synth.c:298 modules/process/tip_blind.c:342
+msgid "_Height:"
+msgstr "_Altura:"
+
+#: modules/file/imgexport.c:3136
+msgid "_Font:"
+msgstr "_Fonte:"
+
+#: modules/file/imgexport.c:3145
+msgid "_Font size:"
+msgstr "Tamanho da _fonte:"
+
+#: modules/file/imgexport.c:3163
+msgid "O_utline thickness:"
+msgstr "Espessura do esboço:"
+
+#: modules/file/imgexport.c:3172
+msgid "_Border width:"
+msgstr "Largura da _borda:"
+
+#: modules/file/imgexport.c:3181
+msgid "_Tick length:"
+msgstr "Comprimento do _traço:"
+
+#: modules/file/imgexport.c:3188
+msgid "Tie sizes to _data pixels"
+msgstr "Associar tamanhos aos pixeis dos _dados"
+
+#: modules/file/imgexport.c:3198 modules/file/rawfile.c:843
+msgid "_Decimal separator is comma"
+msgstr "O separador _decimal é vírgula"
+
+#: modules/file/imgexport.c:3210
+msgid "Colors"
+msgstr "Cores"
+
+#: modules/file/imgexport.c:3215
+msgid "_Line and text color:"
+msgstr "Cor da _linha e texto:"
+
+#: modules/file/imgexport.c:3220
+msgid "_Transparent background"
+msgstr "Fundo _transparente"
+
+#: modules/file/imgexport.c:3231
+msgid "_Background color:"
+msgstr "Cor do fundo:"
+
+#: modules/file/imgexport.c:3433 modules/process/fibre_synth.c:582
+#: modules/process/pat_synth.c:470
+msgid "Placement"
+msgstr "Posicionamento"
+
+#: modules/file/imgexport.c:3437
+msgid "left"
+msgstr "esquerda"
+
+#: modules/file/imgexport.c:3440
+msgid "center"
+msgstr "centro"
+
+#: modules/file/imgexport.c:3443
+msgid "right"
+msgstr "direita"
+
+#: modules/file/imgexport.c:3448
+msgid "top"
+msgstr "topo"
+
+#: modules/file/imgexport.c:3456
+msgid "bottom"
+msgstr "base"
+
+#: modules/file/imgexport.c:3479
+msgid "Lateral scale"
+msgstr "Escala lateral"
+
+#: modules/file/imgexport.c:3496 modules/process/lno_synth.c:1053
+msgid "_Length:"
+msgstr "_Comprimento:"
+
+#: modules/file/imgexport.c:3502
+msgid "_Auto"
+msgstr "_Automático"
+
+#: modules/file/imgexport.c:3519 modules/file/imgexport.c:3832
+msgid "Hori_zontal gap:"
+msgstr "Espaço hori_zontal"
+
+#: modules/file/imgexport.c:3526 modules/file/imgexport.c:3812
+msgid "_Vertical gap:"
+msgstr "Espaço _vertical"
+
+#: modules/file/imgexport.c:3538 modules/file/imgexport.c:4134
+msgid "Colo_r:"
+msgstr "Co_r:"
+
+#: modules/file/imgexport.c:3542 modules/file/imgexport.c:4138
+msgid "Out_line color:"
+msgstr "Cor do esboço:"
+
+#: modules/file/imgexport.c:3547 modules/file/imgexport.c:4143
+msgid "O_pacity:"
+msgstr "O_pacidade:"
+
+#: modules/file/imgexport.c:3554
+msgid "Draw _ticks"
+msgstr "Desenhar _traços"
+
+#: modules/file/imgexport.c:3564
+msgid "Draw _label"
+msgstr "Desenhar rótu_lo"
+
+#: modules/file/imgexport.c:3574
+msgid "Draw text _above scale bar"
+msgstr ""
+
+#: modules/file/imgexport.c:3738
+msgid "Image"
+msgstr "Imagem"
+
+#: modules/file/imgexport.c:3742 modules/process/calcoefs_view.c:473
+#: modules/process/correct_affine.c:538 modules/process/drift.c:298
+#: modules/process/dwt.c:206 modules/process/dwtanisotropy.c:203
+#: modules/process/fft_filter_1d.c:296 modules/process/fft_profile.c:293
+#: modules/process/fractal.c:262 modules/process/nanoindent_adjust.c:229
+#: modules/process/polydistort.c:250 modules/process/rotate.c:274
+#: modules/process/scale.c:257 modules/process/straighten_path.c:270
+#: modules/process/unrotate.c:277 modules/tools/linestats.c:400
+#: modules/tools/profile.c:552 modules/tools/roughness.c:879
+#: modules/tools/sfunctions.c:481 modules/xyz/xyz_raster.c:601
+msgid "_Interpolation type:"
+msgstr "Tipo de _interpolação:"
+
+#: modules/file/imgexport.c:3772
+msgid "Draw _frame"
+msgstr "Desenhar quadro"
+
+#: modules/file/imgexport.c:3781
+msgid "Draw _mask"
+msgstr "Desenhar _máscara"
+
+#: modules/file/imgexport.c:3791
+msgid "Draw mask _legend"
+msgstr "Desenhar _legenda da máscara"
+
+#: modules/file/imgexport.c:3819
+msgid "Value Scale"
+msgstr "Escala de valor"
+
+#: modules/file/imgexport.c:3840
+msgid "Fi_xed precision:"
+msgstr "Precisão fi_xa:"
+
+# Is 'kilo threshold' an expression?
+# 'kilo threshold' é uma expressão?
+#: modules/file/imgexport.c:3855
+msgid "Fixed _kilo threshold:"
+msgstr "Limite fixo:"
+
+#: modules/file/imgexport.c:3869 modules/file/imgexport.c:4583
+msgid "Title"
+msgstr "Título"
+
+#: modules/file/imgexport.c:3877
+msgid "Posi_tion:"
+msgstr "Posição:"
+
+#: modules/file/imgexport.c:3884
+msgid "_Gap:"
+msgstr "_Espaço:"
+
+#: modules/file/imgexport.c:3891
+msgid "Put _units to title"
+msgstr "Colocar _unidades para títu_lo"
+
+#: modules/file/imgexport.c:4075
+msgid "Draw _selection"
+msgstr "Desenhar _seleção"
+
+#: modules/file/imgexport.c:4126 modules/tools/selectionmanager.c:361
+msgid "Objects"
+msgstr "Objetos"
+
+#: modules/file/imgexport.c:4563
+msgid "Lateral"
+msgstr "Lateral"
+
+#: modules/file/imgexport.c:4602 modules/file/rawfile.c:1040
+#: modules/process/calcoefs_load.c:230 modules/process/neural.c:700
+msgid "verb|_Load"
+msgstr "Carregar"
+
+#: modules/file/imgexport.c:4608 modules/file/rawfile.c:1046
+#: modules/process/neural.c:706
+msgid "verb|_Store"
+msgstr "Armazenar"
+
+#: modules/file/imgexport.c:4614 modules/file/rawfile.c:1052
+#: modules/process/neural.c:712
+msgid "_Rename"
+msgstr "_Renomear"
+
+#: modules/file/imgexport.c:4634 modules/file/rawfile.c:1071
+msgid "Preset _name:"
+msgstr "Pré ajustar _nome:"
+
+#: modules/file/imgexport.c:4705
+#, c-format
+msgid "Export %s"
+msgstr "Exportar %s"
+
+#: modules/file/imgexport.c:4727
+msgid "Export as 1_6 bit grayscale"
+msgstr "Exportar como escala de cinza de 1_6 bits"
+
+#: modules/file/imgexport.c:4750
+msgid "Lateral Scale"
+msgstr "Escala lateral"
+
+#: modules/file/imgexport.c:4755
+msgid "Values"
+msgstr "Valores"
+
+#: modules/file/imgexport.c:4760
+msgid "Selection"
+msgstr "Seleção"
+
+#: modules/file/imgexport.c:4765 modules/file/rawfile.c:462
+#: modules/process/convolution_filter.c:275
+msgid "Presets"
+msgstr "Pré ajustes"
+
+#: modules/file/imgexport.c:5525
+#, c-format
+msgid "Cairo error occurred: %s"
+msgstr "Ocorreu um erro Cairo: %s"
+
+#: modules/file/imgexport.c:5549
+#, c-format
+msgid "Pixbuf save failed: %s."
+msgstr "Falha ao salvar Pixbuf: %s."
+
+#: modules/file/imgexport.c:5827
+msgid "Image is too large to be stored as TARGA."
+msgstr "A imagem é muito grande para ser armazenada como TARGA."
+
+#: modules/file/imgexport.c:6406 modules/file/imgexport.c:6435
+msgid "Draw _numbers"
+msgstr "Desenhar _números"
+
+#: modules/file/imgexport.c:6418 modules/file/imgexport.c:6466
+msgid "_End marker length:"
+msgstr "Comprimento do marcador de fim:"
+
+#: modules/file/imgexport.c:6447
+msgid "Marker _radius:"
+msgstr "_Raio do marcador:"
+
+#: modules/file/imgexportpreset.h:170 modules/process/maskops.c:150
+msgid "Mask"
+msgstr "Máscara"
+
+#: modules/file/intelliwave.c:231
+msgid "Imports IntelliWave interferometric ESD data."
+msgstr "Importa dados IntelliWave interferometric ESD."
+
+#: modules/file/intelliwave.c:244
+msgid "IntelliWave interferometric data (.esd)"
+msgstr "Dados IntelliWave interferometric (.esd)"
+
+#: modules/file/intelliwave.c:306
+#, c-format
+msgid ""
+"Invalid data address 0x%0x found. File is in some unknown format version."
+msgstr ""
+"Foi encontrado um endereço de dados inválido 0x%0x. O arquivo está em algum "
+"formato de versão desconhecida."
+
+#: modules/file/intematix.c:125
+msgid "Imports Intematix SDF data files."
+msgstr "Importa arquivos de dados Intematix SDF."
+
+#: modules/file/intematix.c:138
+msgid "Intematix SDF data files (.sdf)"
+msgstr "Arquivos de dados Intematix SDF (.sdf)"
+
+#: modules/file/intematix.c:306
+msgid "Parameter tag set is incomplete."
+msgstr "Conjunto de tags do parâmetro está incompleto."
+
+#: modules/file/intematix.c:311
+msgid "image depth"
+msgstr "Profundidade da imagem."
+
+#: modules/file/iso28600.c:543
+msgid "Imports and exports ISO 28600:2011 SPM data transfer format."
+msgstr ""
+"Importar e exportar formato de transferência de dados ISO 28600:2011 SPM."
+
+#: modules/file/iso28600.c:559
+msgid "ISO 28600:2011 SPM data transfer files (.spm)"
+msgstr "Arquivos de transferência de dados ISO 28600:2011 SPM (.spm)"
+
+#: modules/file/iso28600.c:658
+#, fuzzy, c-format
+msgid ""
+"Only regular and irregular mappings are implemented but the file has mapping "
+"type ‘%s’."
+msgstr ""
+"Apenas mapeamentos regulares estão implementados, mas o arquivo tem um "
+"mapeamento do tipo ‘%s’."
+
+#: modules/file/iso28600.c:687 modules/file/iso28600.c:696
+#: modules/file/iso28600.c:705
+#, c-format
+msgid "List ‘%s’ has %u items which differs from the number %u given by ‘%s’."
+msgstr "A lista ‘%s’ possui %u itens que diferem do número %u dado por ‘%s’."
+
+#: modules/file/iso28600.c:775
+#, fuzzy, c-format
+msgid "End of file reached when reading sample #%u of %u"
+msgstr "Fim de arquivo alcançado ao ler amostra #%d de %d"
+
+#: modules/file/iso28600.c:784 modules/file/iso28600.c:873
+#, fuzzy, c-format
+msgid "Malformed data encountered when reading sample #%u"
+msgstr "Dados mal formados foram encontrados ao ler amostra #%d de %d"
+
+#: modules/file/iso28600.c:797 modules/file/iso28600.c:887
+#: modules/file/iso28600.c:1022
+msgid "Missing end-of-data marker."
+msgstr "Está faltando o marcador de fim de dados."
+
+#: modules/file/iso28600.c:1003 modules/file/sdfile.c:846
+#: modules/file/sdfile.c:863 modules/file/spip-asc.c:239
+#: modules/file/witec-asc.c:223 modules/file/wsffile.c:215
+#, c-format
+msgid "End of file reached when reading sample #%d of %d"
+msgstr "Fim de arquivo alcançado ao ler amostra #%d de %d"
+
+#: modules/file/iso28600.c:1012 modules/file/spip-asc.c:246
+#: modules/file/witec-asc.c:230 modules/file/wsffile.c:222
+#, c-format
+msgid "Malformed data encountered when reading sample #%d of %d"
+msgstr "Dados mal formados foram encontrados ao ler amostra #%d de %d"
+
+#: modules/file/iso28600.c:1184
+#, c-format
+msgid "Line %u does not contain mandatory label ‘%s’."
+msgstr "A linha %u não contém o rótulo obrigatório ‘%s’."
+
+#: modules/file/jeol.c:537
+msgid "Imports JEOL data files."
+msgstr "Importa arquivos de dados JEOL."
+
+#: modules/file/jeol.c:550
+msgid "JEOL data files (.tif)"
+msgstr "Arquivos de dados JEOL (.tif)"
+
+#: modules/file/jeol.c:678
+msgid "The type of data is unknown. Please report it to the developers."
+msgstr ""
+"O tipo de dados é desconhecido. Por favor, reporte isto aos desenvolvedores."
+
+#: modules/file/jpkscan.c:292
+msgid "Imports JPK image scans."
+msgstr "Importa imagem escaneada JPK."
+
+#: modules/file/jpkscan.c:305
+msgid "JPK image scans (.jpk, .jpk-qi-image)"
+msgstr "Imagem escaneada JPK (.jpk, .jpk-qi-image)"
+
+#: modules/file/jpkscan.c:312
+msgid "JPK force curves (.jpk-force, .jpk-force-map, .jpk-qi-data)"
+msgstr "Curvas de força JPK (.jpk-force, .jpk-force-map, .jpk-qi-data)"
+
+#: modules/file/jpkscan.c:378
+msgid "File does not contain grid dimensions."
+msgstr "O arquivo não contém dimensões da grade."
+
+#: modules/file/jpkscan.c:736 modules/file/nanoobserver.c:360
+#: modules/file/nanoscantech.c:205 modules/file/opengps.c:209
+#: modules/file/sensofarx.c:183 modules/file/spmxfile.c:166
+msgid "Minizip cannot open the file as a ZIP file."
+msgstr "O Minizip não pode abrir o arquivo como um arquivo ZIP."
+
+#: modules/file/jpkscan.c:758 modules/file/jpkscan.c:2717
+#, c-format
+msgid "Scanning file (%u curves)..."
+msgstr ""
+
+#: modules/file/jpkscan.c:798 modules/file/nmmxyz.c:299
+msgid "Reading files..."
+msgstr "Lendo arquivos..."
+
+#: modules/file/jpkscan.c:816
+#, fuzzy
+msgid "Creating volume data..."
+msgstr "Carregar dados de volume"
+
+#: modules/file/jpkscan.c:968
+msgid "Non-uniform point and/or segment numbering is not supported."
+msgstr "Numeração não uniforme de ponto e/ou segmento não é suportada."
+
+#: modules/file/jpkscan.c:977
+msgid "Non-uniform channel lists are not supported."
+msgstr "Listas de canais não uniformes não são suportadas."
+
+#: modules/file/jpkscan.c:985
+#, c-format
+msgid "Data file %s was found instead of expected %s."
+msgstr "O arquivo de dados %s foi encontrado ao invés do esperados %s."
+
+#: modules/file/jpkscan.c:1900
+#, fuzzy, c-format
+msgid "Header properties file for index %u is missing."
+msgstr "O campo do cabeçalho `%s' está faltando."
+
+#: modules/file/jpkscan.c:2519
+msgid "Cannot find any height channel."
+msgstr "Não foi possível encontrar nenhum canal de altura."
+
+#: modules/file/jspmfile.c:188
+msgid "Imports JEOL JSPM data files."
+msgstr "Importa arquivos de dados JEOL JSPM."
+
+#: modules/file/jspmfile.c:201
+msgid "JEOL JSPM data files (.tif)"
+msgstr "Arquivos de dados JEOL JSPM (.tif)"
+
+#: modules/file/jspmfile.c:280
+#, c-format
+msgid "Header block %u has invalid position or size."
+msgstr "Bloco %u do cabeçalho tem posição ou tamanho inválido."
+
+#: modules/file/jspmfile.c:362 modules/file/jspmfile.c:369
+#: modules/file/jspmfile.c:431 modules/file/jspmfile.c:438
+msgid "Cannot find image header block."
+msgstr "Não foi possível encontrar bloco do cabeçalho da imagem."
+
+#: modules/file/jspmfile.c:483
+msgid "Cannot find piezo header block."
+msgstr "Não foi possível encontrar bloco do cabeçalho de piezo."
+
+#: modules/file/keyence.c:315
+msgid "Imports Keyence VK4 files."
+msgstr "Importa arquivos Keyence VK4."
+
+#: modules/file/keyence.c:328
+msgid "Keyence VK4 data files (.vk4)"
+msgstr "Arquivos de dados Keyence VK4 (.vk4)"
+
+#: modules/file/keyence.c:903 modules/file/omicronflat.c:2528
+#, c-format
+msgid "Cannot convert string from UTF-16: %s"
+msgstr "Não foi possível converter string de UTF-16: %s"
+
+#: modules/file/leica.c:176
+msgid "Imports Leica CLSM image files (LIF)."
+msgstr "Importa arquivos de imagem Leica CLSM (LIF)."
+
+#: modules/file/leica.c:189
+msgid "Leica LIF image files (.lif)"
+msgstr "Arquivos de imagem Leica LIF (.lif)"
+
+#: modules/file/lextfile.c:80
+msgid "Imports LEXT data files."
+msgstr "Importa arquivos de dados LEXT."
+
+#: modules/file/lextfile.c:93
+msgid "Olympus LEXT OLS4000 (.lext)"
+msgstr "Olympus LEXT OLS4000 (.lext)"
+
+#: modules/file/magellan.c:61
+msgid "Imports FEI Magellan SEM images."
+msgstr "Importa imagens FEI Magellan SEM."
+
+#: modules/file/magellan.c:74
+msgid "FEI Magellan SEM image (.tif)"
+msgstr "Imagem FEI Magellan SEM (.tif)"
+
+#: modules/file/mapvue.c:467
+msgid "Imports MapVue data files (.map)."
+msgstr "Importa arquivos de dados MapVue (.map)."
+
+#: modules/file/mapvue.c:480
+msgid "MapVue files (.map)"
+msgstr "Arquivos MapVue (.map)"
+
+#: modules/file/mapvue.c:556 modules/file/mapvue.c:586
+#, c-format
+msgid "Required tag %u or %u was not found."
+msgstr "A tag requerida %u ou %u não foi encontrada."
+
+#: modules/file/mapvue.c:798
+msgid "File end was reached while scanning tags."
+msgstr "O final do arquivo foi alcançado enquanto escaneava tags."
+
+#: modules/file/mapvue.c:810
+#, c-format
+msgid "Expected tag %u size is %u bytes, but the actual size is %u bytes."
+msgstr ""
+"O tamanho esperado %u da tag é de %u bytes, mas o tamanho atual é de %u "
+"bytes."
+
+#: modules/file/mapvue.c:824
+#, c-format
+msgid "Tag %u size is %u bytes, which is not enough to hold the tag marker."
+msgstr ""
+"O tamanho %u da tag é de %u bytes, o qual não é suficiente para sustentar o "
+"marcador de tags."
+
+#: modules/file/mapvue.c:835 modules/file/mapvue.c:848
+#, c-format
+msgid ""
+"Tag %u size is %u bytes, which is not enough to hold the tag marker and size."
+msgstr ""
+"O tamanho %u da tag é de %u bytes, o qual não é suficiente para sustentar o "
+"tamanho e marcador de tags."
+
+#: modules/file/mapvue.c:859
+#, c-format
+msgid "Tag marker is missing on an unknown tag %u."
+msgstr "O marcador de tags está faltando ou a tag %u é desconhecida."
+
+#: modules/file/mapvue.c:878 modules/file/mapvue.c:888
+msgid "Character array does not fit into the file."
+msgstr "O arranjo de caracteres não cabe no arquivo."
+
+#: modules/file/mapvue.c:905 modules/file/mapvue.c:916
+#: modules/file/mapvue.c:926
+msgid "Fiducial record does not fit into the file."
+msgstr "A gravação fiducial não cabe no arquivo."
+
+#: modules/file/mapvue.c:1150
+#, c-format
+msgid "Tag %u size is %u which is not sufficient to hold its content."
+msgstr ""
+"O tamanho %u da tag é %u, o qual não é suficiente para sustentar seu "
+"conteúdo."
+
+#: modules/file/matfile.c:223
+msgid "Imports Matlab MAT files v5."
+msgstr "Importa arquivos Matlab MAT v5."
+
+#: modules/file/matfile.c:236
+msgid "Matlab MAT 5 files (.mat)"
+msgstr "Arquivos Matlab MAT 5 (.mat)"
+
+#: modules/file/matfile.c:308
+msgid "Compressed data inside compressed data found."
+msgstr "Foram encontrados dados compactados dentro de dados compactados."
+
+#: modules/file/matfile.c:346
+#, c-format
+msgid "Invalid short tag of type %u claims to consists of %u bytes."
+msgstr "Tag curta do tipo %u inválida alega consistir de %u bytes."
+
+#: modules/file/matfile.c:614
+#, c-format
+msgid "Decompression of compressed variable failed with error %d."
+msgstr "Descompactação das variáveis comprimidas falhou com erro %d."
+
+#: modules/file/metropro.c:340
+msgid "Imports binary MetroPro (Zygo) data files."
+msgstr "Importa arquivos de dados binários MetroPro (Zygo)."
+
+#: modules/file/metropro.c:353
+msgid "MetroPro files (.dat)"
+msgstr "Arquivos MetroPro (.dat)"
+
+#: modules/file/metropro.c:534
+msgid "File header is larger than file."
+msgstr "Cabeçalho do arquivo é maior do que o arquivo."
+
+#: modules/file/microprof.c:125
+msgid "Imports MicroProf FRT profilometer data files."
+msgstr "Importa arquivos de dados de profilômetro MicroProf FRT."
+
+#: modules/file/microprof.c:138
+msgid "MicroProf FRT files (.frt)"
+msgstr "Arquivos MicroProf FRT (.frt)"
+
+#: modules/file/microprof.c:144
+msgid "MicroProf FRT text files (.txt)"
+msgstr "Arquivos de texto MicroProf FRT (.txt)"
+
+#: modules/file/microprof.c:519
+msgid "File contains fewer than XSize*YSize data points."
+msgstr "O arquivo contém menos que XSize*YSize pontos de dados."
+
+#: modules/file/miffile.c:200
+msgid "Imports DME MIF data files."
+msgstr "Importa arquivos de dados DME MIF."
+
+#: modules/file/miffile.c:213
+msgid "DME MIF files (.mif)"
+msgstr "Arquivos DME MIF (.mif)"
+
+#: modules/file/miffile.c:240
+msgid "Image header record is too short."
+msgstr "Gravação do cabeçalho da imagem é muito curto."
+
+#: modules/file/miffile.c:248
+msgid "Axis display info record is too short."
+msgstr "Gravação da informação de exibição do eixo é muito curta."
+
+#: modules/file/miffile.c:282
+#, c-format
+msgid "Loading of file version %u.%u is not implemented."
+msgstr "Carregamento de arquivo de versão %u. %u não está implementado."
+
+#: modules/file/miffile.c:300
+msgid "File information block is outside the file."
+msgstr "O bloco de informação do arquivo está fora do arquivo."
+
+#: modules/file/miffile.c:334
+msgid "File information block size is invalid."
+msgstr "O tamanho do bloco de informação do arquivo está é inválido."
+
+#: modules/file/miffile.c:398
+msgid "Unique id record is too short."
+msgstr "Gravação de id único é muito curta."
+
+#: modules/file/mifile.c:177
+msgid "Imports Molecular Imaging MI data files."
+msgstr "Importa arquivos de dados Molecular Imaging MI."
+
+#: modules/file/mifile.c:190
+msgid "PicoView Data Files (.mi)"
+msgstr "Arquivos de dados PicoView (.mi)"
+
+#: modules/file/mifile.c:366 modules/file/mifile.c:453
+msgid "Spectroscopy Graph"
+msgstr "Gráfico de espectroscopia"
+
+#: modules/file/mulfile.c:160
+msgid "Imports Aarhus MUL files."
+msgstr "Importa arquivos Aarhus MUL."
+
+#: modules/file/mulfile.c:173
+msgid "Aarhus MUL files (.mul)"
+msgstr "Arquivos Aarhus MUL (.mul)"
+
+#: modules/file/mulfile.c:295
+#, c-format
+msgid "Image number in the label %u does not match the number %u in the index."
+msgstr "Número da imagem no rótulo %u não corresponde ao número %u no índice."
+
+#: modules/file/mulfile.c:354 modules/file/mulfile.c:363
+#, c-format
+msgid "Label string length %u is larger than 20."
+msgstr "Comprimento %u da string do rótulo é maior que 20."
+
+#: modules/file/nanoeducator.c:290
+msgid "Imports Nanoeducator data files."
+msgstr "Importa arquivos de dados Nanoeducator."
+
+#: modules/file/nanoeducator.c:303
+msgid "Nanoeducator files (.mspm, .spm, .stm)"
+msgstr "Arquivos Nanoeducator (.mspm, .spm, .stm)"
+
+#: modules/file/nanoeducator.c:361 modules/file/unisoku.c:301
+msgid "format version"
+msgstr "versão do formato"
+
+#: modules/file/nanoeducator.c:389 modules/file/nanoeducator.c:432
+#: modules/file/nanoeducator.c:537
+msgid "Image data starts past the end of file."
+msgstr "Os dados de imagem começam após o final do arquivo."
+
+#: modules/file/nanoeducator.c:474
+msgid "Spectra data starts past the end of file."
+msgstr "Os dados de espectro começam após o final do arquivo."
+
+#: modules/file/nanoeducator.c:648 modules/file/opdfile.c:287
+#: modules/file/renishaw.c:1334 modules/file/sensofar.c:256
+#: modules/file/witec-asc.c:161
+msgid "File header is truncated"
+msgstr "O cabeçalho do arquivo está truncado"
+
+#: modules/file/nanoeducator.c:707 modules/file/tescan.c:308
+#: modules/file/tescan.c:319
+msgid "Parameter header is truncated"
+msgstr "O cabeçalho dos parâmetros está truncado"
+
+#: modules/file/nanoeducator.c:932 modules/process/curvature.c:456
+#: modules/tools/profile.c:1090
+#, c-format
+msgid "Profile %d"
+msgstr "Perfil %d"
+
+#: modules/file/nanoeducator.c:1045
+msgid "F-D spectra"
+msgstr "Espectro F-D"
+
+#: modules/file/nanoeducator.c:1138
+msgid "I-V spectra"
+msgstr "Espectro I-V"
+
+#: modules/file/nanoeducator.c:1223
+msgid "I-Z spectra"
+msgstr "Espectro I-Z"
+
+#: modules/file/nanomagnetics.c:402
+msgid "Imports Nanomagnetics' NMI file format version 3 and 5"
+msgstr "Importa arquivos no formato Nanomagnetics' NMI versões 3 e 5"
+
+#: modules/file/nanomagnetics.c:415
+msgid "Nanomagnetics File (.nmi)"
+msgstr "Arquivo Nanomagnetics (.nmi)"
+
+#: modules/file/nanonics.c:104
+msgid "Imports Nanonics NAN data files."
+msgstr "Importa arquivos de dados Nanonics NAN."
+
+#: modules/file/nanonics.c:117
+msgid "Nanonics files (.nan)"
+msgstr "Arquivos Nanonics (.nan)"
+
+#: modules/file/nanonics.c:177 modules/file/nanonics.c:446
+#: modules/file/wsxmfile.c:226
+#, c-format
+msgid "Expected header end marker ‘%s’ was not found."
+msgstr "Marcador esperado ‘%s’ de fim de cabeçalho não foi encontrado."
+
+#: modules/file/nanonics.c:214
+#, c-format
+msgid "HeaderLength %u differs from actual header length %u"
+msgstr ""
+"Comprimento do cabeçalho (HeaderLength) %u difere do comprimento do "
+"cabeçalho verdadeiro %u"
+
+#: modules/file/nanonics.c:371 modules/file/witec-asc.c:167
+#, c-format
+msgid "Expected header start marker ‘%s’ but found ‘%s’."
+msgstr ""
+"Marcador esperado de início de cabeçalho é ‘%s’ mas foi encontrado ‘%s’."
+
+#: modules/file/nanonis.c:111
+msgid "Imports Nanonis SXM data files."
+msgstr "Importa arquivos de dados Nanonis SXM."
+
+#: modules/file/nanonis.c:131
+msgid "Nanonis SXM files (.sxm)"
+msgstr "Arquivos Nanonis SXM (.sxm)"
+
+#: modules/file/nanonis.c:230 modules/file/omicron.c:520
+#: modules/file/unisoku.c:278
+msgid "File header ended unexpectedly."
+msgstr "Cabeçalho do arquivo terminou inesperadamente."
+
+#: modules/file/nanonis.c:251
+msgid "Garbage was found in place of tag header line."
+msgstr "Foi encontrado lixo no lugar da tag da linha de cabeçalho."
+
+#: modules/file/nanonis.c:317
+#, c-format
+msgid "DATA_INFO does not contain the expected columns: %s."
+msgstr "A informação de dados (DATA_INFO) não contém as colunas esperadas: %s."
+
+#: modules/file/nanonis.c:339
+#, c-format
+msgid "DATA_INFO line contains fewer than %d fields."
+msgstr "A linha de informação de dados (DATA_INFO) contém menos que %d campos."
+
+#: modules/file/nanonis.c:524
+msgid "Missing data start marker \\x1a\\x04."
+msgstr "Está faltando o marcador de início de dados \\x1a\\x04."
+
+#: modules/file/nanoobserver.c:201
+#, fuzzy
+msgid "Reads Nano-Solution/NanoObserver .nao files."
+msgstr "Lê arquivos NanoObserver .nao."
+
+#: modules/file/nanoobserver.c:214
+#, fuzzy
+msgid "Nano-Solution/NanoObserver data (.nao)"
+msgstr "Dados NanoObserver (.nao)"
+
+#: modules/file/nanoobserver.c:410 modules/file/renishaw.c:1420
+msgid "Data block is truncated"
+msgstr "O bloco de dados está truncado"
+
+#: modules/file/nanoscan.c:191
+msgid "Imports NanoScan XML files."
+msgstr "Importa arquivos NanoScan XML."
+
+#: modules/file/nanoscan.c:204
+msgid "NanoScan XML files (.xml)"
+msgstr "Arquivos NanoScan XML (.xml)"
+
+#: modules/file/nanoscan.c:937
+msgid "Wrong size of Base64 encoded data."
+msgstr "Tamanho errado de dados Base64 codificados."
+
+#: modules/file/nanoscantech.c:129
+msgid "Imports NanoScanTech .nstdat files."
+msgstr "Importa arquivos NanoScanTech .nstdat."
+
+#: modules/file/nanoscantech.c:142
+msgid "NanoScanTech data (.nstdat)"
+msgstr "Dados NanoScanTech (.nstdat)"
+
+#: modules/file/nanoscope-ii.c:86
+msgid "Imports Digital Instruments Nanoscope II data files."
+msgstr "Importa arquivos de dados Digital Instruments Nanoscope II."
+
+#: modules/file/nanoscope-ii.c:99
+msgid "Nanoscope II files"
+msgstr "Arquivos Nanoscope II"
+
+#: modules/file/nanoscope.c:212
+msgid ""
+"Imports Veeco (Digital Instruments) Nanoscope data files, version 3 or newer."
+msgstr ""
+"Importa arquivos de dados Veeco (Digital Instruments) Nanoscope, versão 3 ou "
+"mais nova."
+
+#: modules/file/nanoscope.c:226
+msgid "Nanoscope III files"
+msgstr "Arquivos Nanoscope III"
+
+#: modules/file/nanoscope.c:295
+msgid "File is not a Nanoscope file, or it is a unknown subtype."
+msgstr ""
+"O arquivo não é um arquivo Nanoscope, ou ele é um subtipo desconhecido."
+
+#: modules/file/nanoscope.c:302
+msgid ""
+"File has been damaged by change of line endings, resulting in corruption of "
+"the binary part of the file.\n"
+"\n"
+"Typically, this occurs if the file is treated as text when sent by e-mail "
+"uncompressed, sent by FTP in ascii mode (use binary), compressed by ‘Send to "
+"compressed folder’ in some versions of MS Windows, or any other file "
+"transfer that attempts to store text platform-independently."
+msgstr ""
+"Arquivo foi danificado por mudança de fim de linha, resultando em "
+"corrupçãoda parte binária do arquivo.\n"
+"\n"
+"Tipicamente, isso ocorre se o arquivo é tratado como texto quando enviado "
+"descompactado por e-mail, enviado por FTP em modo ascii (uso binário), "
+"comprimido por 'Enviar para pasta compactada' em algumas versões do MS "
+"Windows, ou qualquer outra transferência de arquivos que tenta armazenar "
+"texto de modo independente da plataforma."
+
+#: modules/file/nanoscope.c:660 modules/file/nanoscope.c:676
+msgid "Cannot parse `Scan size' field."
+msgstr "Não foi possível analisar o campo 'escanear tamanho'."
+
+#: modules/file/nanoscope.c:1546 modules/file/nrrdfile.c:1086
+#, c-format
+msgid "Garbage after data sample #%u."
+msgstr "Lixo após amostra de dados #%u."
+
+#: modules/file/nanoscope.c:1602
+msgid "Truncated header line."
+msgstr "Linha de cabeçalho truncada."
+
+#: modules/file/nanotop.c:107
+msgid "Imports NANOTOP AFM files"
+msgstr "Importa arquivos NANOTOP AFM"
+
+#: modules/file/nanotop.c:120
+msgid "Nanotop files (.spm)"
+msgstr "Arquivos Nanotop (.spm)"
+
+#: modules/file/netcdf.c:189
+msgid "Imports network Common Data Form (netCDF) files created by GXSM."
+msgstr "Importa arquivos network Common Data Form (netCDF) criados por GXSM."
+
+#: modules/file/netcdf.c:202
+msgid "GSXM netCDF files (.nc)"
+msgstr "Arquivos GSXM netCDF (.nc)"
+
+#: modules/file/netcdf.c:248
+#, c-format
+msgid "Variable `%s' refers to invalid or nonexistent data."
+msgstr "A variável `%s' se refere a dados inválidos ou inexistentes."
+
+#: modules/file/netcdf.c:368
+msgid "NetCDF records are not supported."
+msgstr "Gravações NetCDF não são suportadas."
+
+#: modules/file/netcdf.c:419
+msgid "Value series values must be of type FLOAT."
+msgstr "Valores da série valor deve ser do tipo FLOAT."
+
+#: modules/file/netcdf.c:441
+msgid "Time values must be of type DOUBLE."
+msgstr "Valores de tempo devem ser do tipo DOUBLE."
+
+#: modules/file/netcdf.c:462
+msgid "Reading of fast scan files is not implemented - yet."
+msgstr ""
+"A leitura de arquivos de escaneamento rápido não está implementada - ainda."
+
+#: modules/file/netcdf.c:553
+msgid "Time series order is wrong."
+msgstr "Ordem das séries de tempo está errada."
+
+#: modules/file/netcdf.c:1249
+#, c-format
+msgid "File ended unexpectedly inside `%s'."
+msgstr "O arquivo terminou inesperadamente dentro de `%s'."
+
+#: modules/file/netcdf.c:1258
+#, c-format
+msgid "Expected `%s' array or `ABSENT'."
+msgstr "Esperado arranjo `%s' ou `ABSENT'."
+
+#: modules/file/netcdf.c:1266
+#, c-format
+msgid "Array `%s' has non-zero number of elements in spite of being absent."
+msgstr ""
+"O arranjo `%s' tem um número de elementos diferente de zero ao invés de ser "
+"ausente."
+
+#: modules/file/netcdf.c:1325
+msgid "More than one record dimension found."
+msgstr "Mais de uma dimensão gravada foi encontrada."
+
+#: modules/file/nmmxyz.c:202
+msgid "Imports Nano Measuring Machine profile files."
+msgstr "Importa arquivos de perfil Nano Measuring Machine."
+
+#: modules/file/nmmxyz.c:215
+msgid "Nano Measuring Machine files (*.dsc)"
+msgstr "Arquivos Nano Measuring Machine (*.dsc)"
+
+#: modules/file/nmmxyz.c:259
+msgid "Nano Measuring Machine data import must be run as interactive."
+msgstr ""
+"A importação de dados Nano Measuring Machine deve ser executada como "
+"interativa."
+
+#: modules/file/nmmxyz.c:306 modules/process/lat_synth.c:1224
+#: modules/process/wave_synth.c:798
+msgid "Rendering surface..."
+msgstr "Renderizando superfície..."
+
+#: modules/file/nmmxyz.c:385
+msgid "Import NMM Profile Set"
+msgstr "Importar conjunto de perfis NMM"
+
+#: modules/file/nmmxyz.c:401 modules/file/rawfile.c:450
+msgid "Information"
+msgstr "Informação"
+
+#: modules/file/nmmxyz.c:407
+msgid "Number of data files:"
+msgstr "Número de arquivos de dados:"
+
+#: modules/file/nmmxyz.c:409
+msgid "Total number of points:"
+msgstr "Número total de pontos:"
+
+#: modules/file/nmmxyz.c:411
+msgid "Points per profile:"
+msgstr "Pontos por perfil:"
+
+#: modules/file/nmmxyz.c:416
+msgid "Imported Channels"
+msgstr "Canais importados"
+
+#: modules/file/nmmxyz.c:438
+msgid "Plot point density map"
+msgstr "Plotar mapa de densidade de pontos"
+
+#: modules/file/nmmxyz.c:534 modules/file/rawfile.c:626
+#: modules/process/dimensions.h:427 modules/xyz/xyz_drift.c:725
+#: modules/xyz/xyz_raster.c:376
+msgid "Resolution"
+msgstr "Resolução"
+
+#: modules/file/nmmxyz.c:538 modules/file/rawfile.c:631
+#: modules/process/dimensions.h:433 modules/xyz/xyz_drift.c:729
+#: modules/xyz/xyz_raster.c:382
+msgid "_Horizontal size:"
+msgstr "Tamanho _horizontal:"
+
+#: modules/file/nmmxyz.c:554 modules/file/rawfile.c:638
+#: modules/process/dimensions.h:436 modules/xyz/xyz_drift.c:744
+#: modules/xyz/xyz_raster.c:388
+msgid "_Vertical size:"
+msgstr "Tamanho _vertical:"
+
+#: modules/file/nmmxyz.c:795
+msgid "Point density map"
+msgstr "Mapa de densidade de pontos"
+
+#: modules/file/nmmxyz.c:871
+msgid "Something is changing the data files on disk."
+msgstr "Alguma coisa está carregando os arquivos de dados no disco."
+
+#: modules/file/nrrdfile.c:179
+msgid "Imports and exports nearly raw raster data (NRRD) files."
+msgstr "Importa e exporta arquivos nearly raw raster data (NRRD)."
+
+#: modules/file/nrrdfile.c:192
+msgid "Nearly raw raster data (NRRD) files (.nrrd)"
+msgstr "Arquivos Nearly raw raster data (NRRD) (.nrrd)"
+
+#: modules/file/nrrdfile.c:334
+msgid "Detached header does not refer to any data file."
+msgstr "O cabeçalho destacado não faz referência a nenhum arquivo de dados."
+
+#: modules/file/nrrdfile.c:362
+msgid "Only two- and three-dimensional data are supported."
+msgstr "Apenas dados bi- e tri-dimensionais são suportados."
+
+#: modules/file/nrrdfile.c:382
+msgid "Non-zero lineskip is supported only for uncompressed files."
+msgstr ""
+"O campo 'Desconsiderar linhas' diferente de zero é suportado apenas para "
+"dados não compactados."
+
+#: modules/file/nrrdfile.c:421
+msgid "Compression is supported only for detached files."
+msgstr "Compressão é suportada apenas para arquivos destacados."
+
+#: modules/file/nrrdfile.c:745
+msgid "Split detached data files are not supported."
+msgstr "Divisões de arquivos de dados destacados não são suportadas."
+
+#: modules/file/nrrdfile.c:791
+msgid "Cannot decompress gzip-encoded data. Zlib support was not built in."
+msgstr ""
+"Não foi possível descompactar os dados codificados com gzip. O suporte à "
+"zlib não está embutido."
+
+#: modules/file/nrrdfile.c:836
+msgid "Cannot decompress bzip2-encoded data. Bzip2 support was not built in."
+msgstr ""
+"Não foi possível descompactar os dados codificados com bzip2. O suporte a "
+"bzip2 não está embutido."
+
+#: modules/file/nrrdfile.c:968
+#, c-format
+msgid "Hex data contain fewer values (%u) than corresponds to the sizes (%u)."
+msgstr ""
+"Os dados hexadecimais contém poucos valores (%u) que correspondem aos "
+"tamanhos (%u)."
+
+#: modules/file/nrrdfile.c:1081
+#, c-format
+msgid "Text data contain fewer values (%u) than corresponds to the sizes (%u)."
+msgstr ""
+"Os dados de texto contém poucos valores (%u) que correspondem aos tamanhos "
+"(%u)."
+
+#: modules/file/nrrdfile.c:1135
+msgid "Field byteskip cannot be -1 for text encodings."
+msgstr ""
+"O campo 'desconsiderar byte' não pode ser -1 para codificações de texto."
+
+#: modules/file/nrrdfile.c:1146
+msgid "Field lineskip specifies more lines than there are in the file."
+msgstr ""
+"O campo 'desconsiderar linhas' especifica mais linhas do que existem no "
+"arquivo."
+
+#: modules/file/nrrdfile.c:1189
+msgid "Field byteskip specifies more bytes than there are in the file."
+msgstr ""
+"O campo 'desconsiderar linhas' especifica mais bytes do que existem no "
+"arquivo."
+
+#: modules/file/nrrdfile.c:1594
+#, c-format
+msgid "Items of per-axis header field %s are not quoted."
+msgstr "Itens do campo do cabeçalho por-eixo %s são quotados."
+
+#: modules/file/nrrdfile.c:1605
+#, c-format
+msgid "Per-axis header field %s contains too many items."
+msgstr "O campo %s do cabeçalho por-eixo contém itens demais."
+
+#: modules/file/nrrdfile.c:1614
+#, c-format
+msgid "Per-axis header field %s contains too few items."
+msgstr "O campo %s do cabeçalho por-eixo contém muito poucos itens."
+
+#: modules/file/nt-mdt.c:850
+msgid "Imports NT-MDT data files."
+msgstr "Importa arquivos de dados NT-MDT."
+
+#: modules/file/nt-mdt.c:863
+msgid "NT-MDT files (.mdt)"
+msgstr "Arquivos NT-MDT (.mdt)"
+
+#: modules/file/nt-mdt.c:1498 modules/file/nt-mdt.c:1606
+msgid "Frame is too short for Frame Mode."
+msgstr "O quadro é muito curto para o Modo Quadro."
+
+#: modules/file/nt-mdt.c:1513 modules/file/nt-mdt.c:1621
+msgid "Frame is too short for dots or data."
+msgstr "O quadro é muito curto para pontos ou dados."
+
+#: modules/file/nt-mdt.c:1879
+#, c-format
+msgid "End of file reached in frame header #%u."
+msgstr "Final do arquivo alcançado no cabeçalho do quadro #%u."
+
+#: modules/file/nt-mdt.c:1887
+#, c-format
+msgid "End of file reached in frame data #%u."
+msgstr "Final do arquivo alcançado nos dados do quadro #%u."
+
+#: modules/file/nt-mdt.c:1920
+#, c-format
+msgid "Frame #%u is too short for scanned data header."
+msgstr "O quadro #%u é muito curto para o cabeçalho de dados escaneado."
+
+#: modules/file/nt-mdt.c:1937
+#, c-format
+msgid "Frame #%u is too short for spectroscopy data header."
+msgstr ""
+"O quadro #%u é muito curto para o cabeçalho de dados de espectroscopia."
+
+#: modules/file/nxiifile.c:116
+msgid "Imports EM4SYS data files."
+msgstr "Importa arquivos de dados EM4SYS."
+
+#: modules/file/nxiifile.c:129
+msgid "EM4SYS NX II files (.bmp)"
+msgstr "Arquivos EM4SYS NX II (.bmp)"
+
+#: modules/file/oldmda.c:151
+msgid "Imports old NTMDT MDA Spectra files."
+msgstr "Importa arquivos antigos NTMDT MDA Spectra."
+
+#: modules/file/oldmda.c:164
+msgid "NTMDT old MDA Spectra data (.sxml .dat)"
+msgstr "Dados NTMDT, antigo MDA Spectra, (.sxml .dat)"
+
+#: modules/file/oldmda.c:237
+msgid "Incorrect number of axes in parameter file."
+msgstr "Número de eixos incorreto no arquivo de parâmetros."
+
+#: modules/file/oldmda.c:252
+#, c-format
+msgid "Cannot load data file: %s"
+msgstr "Não foi possível arquivo de dados: %s"
+
+#: modules/file/oldmda.c:260
+msgid "Data file is too short."
+msgstr "O arquivo de dados é muito curto."
+
+#: modules/file/ols.c:65
+msgid "Imports OLS data files."
+msgstr "Importa arquivos de dados OLS."
+
+#: modules/file/ols.c:78
+msgid "Olympus LEXT OLS3000 (.ols)"
+msgstr "Olympus LEXT OLS3000 (.ols)"
+
+#: modules/file/ometiff.c:154
+msgid "Imports OME-TIFF data files."
+msgstr "Importa arquivos de dados OME-TIFF."
+
+#: modules/file/ometiff.c:167
+msgid "Open Microscopy OME-TIFF (.ome.tiff)"
+msgstr "Open Microscopy OME-TIFF (.ome.tiff)"
+
+#: modules/file/ometiff.c:650
+#, c-format
+msgid "ZTC coordinates (%u,%u,%u) fall outside the given ranges."
+msgstr "Coordenadas ZTC (%u,%u,%u) caem fora dos intervalos especificados."
+
+#: modules/file/ometiff.c:658
+msgid ""
+"The OME TIFF header specifies more TIFF directories than there are in the "
+"file."
+msgstr ""
+"O cabeçalho OME TIFF especifica mais diretórios TIFF do que os que existem "
+"no arquivo."
+
+#: modules/file/ometiff.c:669
+#, c-format
+msgid "TIFF directory %u is assigned to multiple conflicting ZTC coordinates."
+msgstr "O diretório TIFF %u é atribuído a várias coordenadas ZTC conflitantes."
+
+#: modules/file/omicron.c:164
+msgid "Imports Omicron data files (two-part .par + .tf*, .tb*, .sf*, .sb*)."
+msgstr ""
+"Importa arquivos de dados Omicron (duas partes .par + .tf*, .tb*, .sf*, ."
+"sb*).."
+
+#: modules/file/omicron.c:177
+msgid "Omicron files (.par + data)"
+msgstr "Arquivos Omicron (.par + dados)"
+
+#: modules/file/omicron.c:422
+msgid "Header line starts with a colon."
+msgstr "Linha do cabeçalho começa com dois pontos (:)."
+
+#: modules/file/omicron.c:529
+msgid "Channel information ended unexpectedly."
+msgstr "A informação do canal terminou inesperadamente."
+
+#: modules/file/omicronflat.c:358
+msgid "Imports Omicron flat files."
+msgstr "Importa arquivos Omicron achatados."
+
+#: modules/file/omicronflat.c:371
+msgid "Omicron flat files (*.*_flat)"
+msgstr "Arquivos Omicron achatados (*.*_flat)"
+
+#: modules/file/omicronflat.c:1727
+msgid "File name does not have the expected form for Omicron Flat files."
+msgstr ""
+"O nome do arquivo não tem a forma esperada para um arquivo Omicron Flat."
+
+#: modules/file/omicronflat.c:2146
+msgid "Cannot understand the axis hierarchy."
+msgstr "Não foi possível entender a hierarquia dos eixos."
+
+#. TRANSLATORS: %s is replaced with an expression of the data shape.
+#: modules/file/omicronflat.c:2564
+#, c-format
+msgid "Cannot figure out how to load data in the following form: %s."
+msgstr ""
+"Não foi possível descobrir como carregar dados no seguinte formato: %s."
+
+#: modules/file/omicronmatrix.c:196
+msgid "Omicron MATRIX (param.mtrx & data.mtrx)"
+msgstr "Omicron MATRIX (param.mtrx & data.mtrx)"
+
+#: modules/file/omicronmatrix.c:212
+msgid "Omicron MATRIX (.mtrx & .mtrx)"
+msgstr "Omicron MATRIX (.mtrx & .mtrx)"
+
+#: modules/file/opdfile.c:199
+msgid "Imports Wyko OPD and ASC files."
+msgstr "Importa arquivos Wyko OPD e ASC."
+
+#: modules/file/opdfile.c:212
+msgid "Wyko OPD files (.opd)"
+msgstr "Arquivos Wyko OPD (.opd)"
+
+#: modules/file/opdfile.c:219
+msgid "Wyko ASCII export files (.asc)"
+msgstr "Arquivos de exportação Wyko ASCII (.asc)"
+
+#: modules/file/opdfile.c:310
+#, c-format
+msgid "Item `%s' is beyond the end of the file."
+msgstr "O item `%s' está além do final do arquivo."
+
+#: modules/file/opdfile.c:636
+msgid "Nested directories found"
+msgstr "Diretórios aninhados encontrados"
+
+#: modules/file/opdfile.c:842
+#, c-format
+msgid "Truncated data in block %s"
+msgstr "Dados truncados no bloco %s"
+
+#: modules/file/opengps.c:134
+msgid "Reads ISO 5436-2 OpenGPS .x3p files."
+msgstr "Lê arquivos ISO 5436-2 OpenGPS .x3p."
+
+#: modules/file/opengps.c:147
+msgid "ISO 5436-2 OpenGPS data (.x3p)"
+msgstr "Dados ISO 5436-2 OpenGPS (.x3p)"
+
+#: modules/file/opengps.c:421 modules/file/opengps.c:454
+msgid "Too many DataList items for given matrix dimensions."
+msgstr ""
+"Há muitos itens da lista de dados (DataList) para as dimensões da matriz "
+"fornecida."
+
+#: modules/file/opengps.c:542
+msgid "File main.xml contains multiple data elements."
+msgstr "O arquivo main.xml contém múltiplos elementos de dados."
+
+#. TRANSLATORS: type and axis are symbols such as I, CX, ...
+#: modules/file/opengps.c:575 modules/file/opengps.c:583
+#: modules/file/opengps.c:591
+#, c-format
+msgid "Only type %s is supported for axis %s."
+msgstr "Apenas o tipo %s é suportado para o eixo %s."
+
+#: modules/file/pixmap.c:161
+msgid "All channels"
+msgstr "Todos os canais"
+
+#: modules/file/pixmap.c:162
+msgid "Red"
+msgstr "Vermelho"
+
+#: modules/file/pixmap.c:163
+msgid "Green"
+msgstr "Verde"
+
+#: modules/file/pixmap.c:164
+msgid "Blue"
+msgstr "Azul"
+
+#: modules/file/pixmap.c:165
+msgid "Value (max)"
+msgstr "Valor (máx)"
+
+#: modules/file/pixmap.c:166
+msgid "RGB sum"
+msgstr "Soma RGB"
+
+#: modules/file/pixmap.c:167
+msgid "Luma"
+msgstr "Luma"
+
+#: modules/file/pixmap.c:168
+msgid "Alpha"
+msgstr "Alfa"
+
+#: modules/file/pixmap.c:202
+msgid "Graphics Interchange Format GIF (.gif)"
+msgstr "Graphics Interchange Format GIF (.gif)"
+
+#: modules/file/pixmap.c:206
+msgid "JPEG 2000 (.jpx)"
+msgstr "JPEG 2000 (.jpx)"
+
+#: modules/file/pixmap.c:210
+msgid "PCX (.pcx)"
+msgstr "PCX (.pcx)"
+
+#: modules/file/pixmap.c:214
+msgid "X Pixmap (.xpm)"
+msgstr "X Pixmap (.xpm)"
+
+#: modules/file/pixmap.c:218
+msgid "Sun raster image (.ras)"
+msgstr "Imagem Sun raster (.ras)"
+
+#: modules/file/pixmap.c:222
+msgid "Apple icon (.icns)"
+msgstr "Ícone Apple (.icns)"
+
+#: modules/file/pixmap.c:236
+msgid ""
+"Imports data from low-depth pixmap images (PNG, TIFF, JPEG, ...). The set "
+"of available formats depends on available GDK pixbuf loaders."
+msgstr ""
+"Importa dados a partir de imagens pixmap de baixa profundidade (PNG, TIFF, "
+"JPEG, ...). O conjunto de formatos disponíveis depende dos carregadores GDK "
+"pixbuf disponíveis."
+
+#: modules/file/pixmap.c:491
+#, c-format
+msgid "Pixmap has not registered file type `%s'."
+msgstr "O pixmap não tem o tipo de arquivo `%s' registrado."
+
+#: modules/file/pixmap.c:506
+#, c-format
+msgid "Cannot get pixbuf loader: %s."
+msgstr "Não foi possível obter o carregador de pixbuf: %s."
+
+#: modules/file/pixmap.c:519 modules/file/pixmap.c:532
+#: modules/file/renishaw.c:568 modules/file/renishaw.c:578
+#, c-format
+msgid "Pixbuf loader refused data: %s."
+msgstr "O carregador de pixbuf recusou os dados: %s."
+
+#: modules/file/pixmap.c:959
+msgid ""
+"Warning: Colorful images cannot be reliably mapped to meaningful values."
+msgstr ""
+"Alerta: Imagens coloridas não podem ser mapeadas com segurança para valores "
+"significativos."
+
+#: modules/file/pixmap.c:978
+msgid "verb|Use"
+msgstr "Usar"
+
+#: modules/file/pixmap.c:978
+msgid "as data"
+msgstr "como dados"
+
+#: modules/file/pltfile.c:79
+msgid "Imports Nanosurf PLT files."
+msgstr "Importa arquivos Nanosurf PLT."
+
+#: modules/file/pltfile.c:92
+msgid "Nanosurf PLT files (.plt)"
+msgstr "Arquivos Nanosurf PLT (.plt)"
+
+#: modules/file/pnifile.c:121
+msgid "Imports Pacific Nanotechnology PNI data files."
+msgstr "Importa arquivos de dados Pacific Nanotechnology PNI."
+
+#: modules/file/pnifile.c:134
+msgid "PNI files (.pni)"
+msgstr "Arquivos PNI (.pni)"
+
+#: modules/file/princetonspe.c:110
+msgid "Princeton Instruments camera SPE files."
+msgstr "Arquivos SPE de câmera Princeton Instruments."
+
+#: modules/file/princetonspe.c:123
+msgid "Princeton Instruments SPE files"
+msgstr "Arquivos SPE Princeton Instruments"
+
+#: modules/file/princetonspe.c:333
+msgid "XML footer overlaps with data."
+msgstr "O rodapé do XML está sobreposto com dados."
+
+#: modules/file/psia.c:241
+msgid "Imports Park Systems data files."
+msgstr "Importa arquivos de dados Park Systems."
+
+#: modules/file/psia.c:254
+msgid "Park Systems data files (.tiff, .tif)"
+msgstr "Arquivos de dados Park Systems (.tiff, .tif)"
+
+#: modules/file/psia.c:342
+msgid "Data tag is missing."
+msgstr "Está faltando tag dos dados."
+
+#: modules/file/psia.c:513
+#, c-format
+msgid "Header is too short (only %lu bytes)."
+msgstr "Cabeçalho é muito curto (somente %lu bytes)."
+
+#: modules/file/psia.c:630
+#, c-format
+msgid "Spectroscopy header is too short (only %lu bytes)."
+msgstr "Cabeçalho de espectroscopia é muito curto (somente %lu bytes)."
+
+#: modules/file/pt3file.c:296
+msgid "Imports SymPhoTime data files, version 2.0."
+msgstr "Importa arquivos de dados SymPhoTime, versão 2.0."
+
+#: modules/file/pt3file.c:309
+msgid "PicoHarp files (.pt3)"
+msgstr "Arquivos PicoHarp (.pt3)"
+
+#: modules/file/pt3file.c:395
+msgid "T2 measurement mode is not implemented."
+msgstr "O modo de medidas T2 não está implementado."
+
+#: modules/file/pt3file.c:401
+msgid "Only PI E710 and KDT180-100-Im imaging formats are implemented."
+msgstr ""
+"Apenas os formatos de imagem PI E710 e KDT180-100-Im estão implementados."
+
+#: modules/file/pt3file.c:541
+#, c-format
+msgid "Measurement mode must be 2 or 3; %u is invalid."
+msgstr "O modo de medida deve ser 2 ou 3; %u é inválido."
+
+#: modules/file/pt3file.c:547 modules/file/pt3file.c:559
+msgid "Only area imaging files are supported."
+msgstr "Apenas arquivos de obtenção de imagem de área são suportados."
+
+#: modules/file/pt3file.c:578
+#, c-format
+msgid "Unknown instrument number %u."
+msgstr "Instrumento número %u é desconhecido."
+
+#: modules/file/pt3file.c:585
+#, c-format
+msgid "Wrong imaging header size: %u instead of %u."
+msgstr "Tamanho errado do cabeçalho de obtenção de imagem: %u ao invés de %u."
+
+#: modules/file/pt3file.c:735
+#, c-format
+msgid "Number of line triggers %u is smaller than the number of scan lines %u."
+msgstr ""
+"O número de gatilhos de linhas %u é menor que o número de linhas escaneadas "
+"%u."
+
+#: modules/file/quesant.c:68
+msgid "Imports Quesant file format."
+msgstr "Importa arquivo no formato Quesant."
+
+#: modules/file/quesant.c:81
+msgid "Quesant files (.afm)"
+msgstr "Arquivos Quesant (.afm)"
+
+#: modules/file/rawfile.c:245
+msgid ""
+"Imports raw data files, both ASCII and binary, according to user-specified "
+"format."
+msgstr ""
+"Importa arquivos de dados raw, tanto ASCII quanto binário, de acordo com o "
+"formato especificado pelo usuário."
+
+#: modules/file/rawfile.c:266
+msgid "User-specified"
+msgstr "Especificado pelo usuário"
+
+#: modules/file/rawfile.c:267
+msgid "Signed byte"
+msgstr "Byte assinado"
+
+#: modules/file/rawfile.c:268
+msgid "Unsigned byte"
+msgstr "Byte não assinado"
+
+#: modules/file/rawfile.c:269
+msgid "Signed 16bit word"
+msgstr "Palavra assinada de 16bits"
+
+#: modules/file/rawfile.c:270
+msgid "Unsigned 16bit word"
+msgstr "Palavra não assinada de 16bits"
+
+#: modules/file/rawfile.c:271
+msgid "Signed 32bit word"
+msgstr "Palavra assinada de 32bits"
+
+#: modules/file/rawfile.c:272
+msgid "Unsigned 32bit word"
+msgstr "Palavra não assinada de 32bits"
+
+#: modules/file/rawfile.c:273
+msgid "Signed 64bit word"
+msgstr "Palavra assinada de 64bits"
+
+#: modules/file/rawfile.c:274
+msgid "Unsigned 64bit word"
+msgstr "Palavra não assinada de 64bits"
+
+#: modules/file/rawfile.c:275
+msgid "IEEE single"
+msgstr "IEEE simples"
+
+#: modules/file/rawfile.c:276
+msgid "IEEE double"
+msgstr "IEEE duplo (double)"
+
+#: modules/file/rawfile.c:277
+msgid "IEEE half"
+msgstr "Meio IEEE"
+
+#: modules/file/rawfile.c:278
+msgid "Pascal real"
+msgstr "Pascal real"
+
+#: modules/file/rawfile.c:333
+msgid "Raw data files"
+msgstr "Arquivos de dados raw"
+
+#: modules/file/rawfile.c:375
+msgid "Raw data import must be run as interactive."
+msgstr "A importação de dados raw deve ser executada como interativa."
+
+#: modules/file/rawfile.c:423
+msgid "Read Raw File"
+msgstr "Lê arquivo raw"
+
+#: modules/file/rawfile.c:455
+msgid "Data Format"
+msgstr "Formato dos dados"
+
+#: modules/file/rawfile.c:567 modules/process/arithmetic.c:234
+#: modules/process/calcoefs_view.c:320 modules/process/coerce.c:250
+#: modules/process/convolution_filter.c:236 modules/process/deposit_synth.c:638
+#: modules/process/drift.c:242 modules/process/edge.c:635
+#: modules/process/entropy.c:178 modules/process/fft_filter_1d.c:184
+#: modules/process/fractal.c:225 modules/process/grain_edge.c:209
+#: modules/process/grain_filter.c:312 modules/process/grain_mark.c:243
+#: modules/process/grain_wshed.c:165 modules/process/mark_disconn.c:205
+#: modules/process/mark_with.c:196 modules/process/mfm_field.c:278
+#: modules/process/mfm_shift.c:167 modules/process/polydistort.c:205
+#: modules/process/scars.c:314 modules/process/slope_dist.c:272
+#: modules/process/stitch.c:272 modules/process/straighten_path.c:198
+#: modules/process/synth.h:538 modules/process/tip_model.c:164
+#: modules/process/wpour_mark.c:273 modules/tools/linestats.c:454
+#: modules/tools/sfunctions.c:531 modules/tools/stats.c:456
+#: modules/volume/volume_extract.c:321 modules/volume/volume_linestat.c:292
+#: modules/xyz/xyz_drift.c:618 modules/xyz/xyz_raster.c:457
+msgid "_Update"
+msgstr "_Atualizar"
+
+#: modules/file/rawfile.c:602
+msgid "<b>File</b>"
+msgstr "<b>Arquivo</b>"
+
+#: modules/file/rawfile.c:643
+msgid "S_quare sample"
+msgstr "Amostra _quadrada"
+
+#: modules/file/rawfile.c:745
+msgid "Missin_g value substitute:"
+msgstr "Está faltando valor substituto:"
+
+#: modules/file/rawfile.c:761
+msgid "_Automatically offer raw data import of unknown files"
+msgstr ""
+"Oferecer _automaticamente importação de dados raw para arquivos desconhecidos"
+
+#: modules/file/rawfile.c:790
+msgid "_Text data"
+msgstr "Dados de _texto"
+
+#: modules/file/rawfile.c:791
+msgid "_Binary data"
+msgstr "Dados _binários"
+
+#: modules/file/rawfile.c:800
+msgid "Start from _line:"
+msgstr "Começar da _linha:"
+
+#: modules/file/rawfile.c:807
+msgid "E_ach row skip:"
+msgstr "_A cada linha pular:"
+
+#: modules/file/rawfile.c:808
+msgid "fields"
+msgstr "campos"
+
+#: modules/file/rawfile.c:812
+msgid "_Field delimiter:"
+msgstr "Delimitador de campos:"
+
+#: modules/file/rawfile.c:820
+msgid "Any whitespace"
+msgstr "Nenhum espaço em branco"
+
+#: modules/file/rawfile.c:821
+msgid "TAB character"
+msgstr "Caractere TAB"
+
+#: modules/file/rawfile.c:822
+msgid "Other character"
+msgstr "Outro caractere"
+
+#: modules/file/rawfile.c:830
+msgid "_Other delimiter:"
+msgstr "_Outro delimitador:"
+
+#: modules/file/rawfile.c:861
+msgid "Byte s_wap pattern:"
+msgstr "Padrão de troca de byte:"
+
+#: modules/file/rawfile.c:876
+msgid "Start at _offset:"
+msgstr "Iniciar no afastamento:"
+
+#: modules/file/rawfile.c:877
+msgid "bytes"
+msgstr "bytes"
+
+#: modules/file/rawfile.c:883
+msgid "_Sample size:"
+msgstr "Tamanho da amo_stra:"
+
+#: modules/file/rawfile.c:884 modules/file/rawfile.c:892
+#: modules/file/rawfile.c:900
+msgid "bits"
+msgstr "bits"
+
+#: modules/file/rawfile.c:891
+msgid "After each sample s_kip:"
+msgstr "Após cada amostra pular:"
+
+#: modules/file/rawfile.c:899
+msgid "After each _row skip:"
+msgstr "Após cada linha pular:"
+
+#: modules/file/rawfile.c:905
+msgid "_Reverse bits in bytes"
+msgstr "_Reverter bits em bytes"
+
+#: modules/file/rawfile.c:910
+msgid "Reverse bi_ts in samples"
+msgstr "Reverter bits em amostras"
+
+#: modules/file/rawfile.c:915
+msgid "Samples are si_gned"
+msgstr "Amostras estão assinadas"
+
+#: modules/file/rawfile.c:945
+msgid "Binary"
+msgstr "Binário"
+
+#: modules/file/rawfile.c:945
+msgid "Text"
+msgstr "Text"
+
+#: modules/file/rawfile.c:967
+msgid "Delimiter: whitespace"
+msgstr "Delimitador: espaço em branco"
+
+#: modules/file/rawfile.c:970
+#, c-format
+msgid "Delimiter: 0x%02x"
+msgstr "Delimitador: 0x%02x"
+
+#: modules/file/rawfile.c:972
+#, c-format
+msgid "Delimiter: %s"
+msgstr "Delimitador: %s"
+
+#: modules/file/rawfile.c:998
+msgid "Info"
+msgstr "Info"
+
+#: modules/file/rawfile.c:1182
+#, c-format
+msgid ""
+"<b>Too short file</b>\n"
+"The format would require %u bytes long file (at least), but the length of `"
+"%s' is only %u bytes."
+msgstr ""
+"<b>Arquivo muito curto</b>\n"
+"O formato exigiria arquivo com (pelo menos) %u bytes de tamanho, mas o "
+"tamanho de `%s' é de apenas %u bytes."
+
+#: modules/file/rawfile.c:1198
+#, c-format
+msgid ""
+"<b>Parsing failed</b>\n"
+"The contents of `%s' does not match format: %s."
+msgstr ""
+"<b>Análise falhou</b>\n"
+"O conteúdo de `%s' não confere com o formato: %s."
+
+#: modules/file/rawfile.c:1690 modules/process/neural.c:1587
+#, c-format
+msgid "The name `%s' is invalid."
+msgstr "O nome `%s' é inválido."
+
+#: modules/file/rawfile.c:2302
+#, c-format
+msgid "Not enough lines (%d) for offset (%d)"
+msgstr "Não há linhas suficientes (%d) para o afastamento (%d)"
+
+#: modules/file/rawfile.c:2327
+#, c-format
+msgid "Expected whitespace to skip more fields in row %u, got `%.16s'"
+msgstr ""
+"Espaço em branco esperado para pular mais campos na linha %u, `%.16s' foi "
+"obtido"
+
+#: modules/file/rawfile.c:2341
+#, c-format
+msgid "Expected `%c' to skip more fields in row %u, got `%.16s'"
+msgstr ""
+"`%c' era esperado para pular mais campos na linha %u, `%.16s' foi obtido"
+
+#: modules/file/rawfile.c:2355
+#, c-format
+msgid "Expected `%s' to skip more fields in row %u, got `%.16s'"
+msgstr ""
+"`%s' era esperado para pular mais campos na linha %u, `%.16s' foi obtido"
+
+#: modules/file/rawfile.c:2372 modules/file/rawfile.c:2386
+#: modules/file/rawfile.c:2412
+#, c-format
+msgid "Garbage `%.16s' in row %u, column %u"
+msgstr "Lixo `%.16s' na linha %u, coluna %u"
+
+#: modules/file/rawfile.c:2398
+#, c-format
+msgid "Expected delimiter `%c' after data in row %u, column %u, got `%c'"
+msgstr ""
+"Delimitador `%c' era esperado após os dados na linha %u, coluna %u, `%c' foi "
+"obtido"
+
+#: modules/file/rawfile.c:2424
+#, c-format
+msgid "Expected delimiter `%s' after data in row %u, column %u, got `%.16s'"
+msgstr ""
+"Delimitador `%s' era esperado após os dados na linha %u, coluna %u, `%.16s' "
+"foi obtido"
+
+#: modules/file/rawgraph.c:107
+msgid "Imports simple text files as graph curves."
+msgstr "Importa arquivos de texto simples como curvas de gráficos."
+
+#: modules/file/rawgraph.c:120
+msgid "ASCII graph curve files"
+msgstr "Arquivos ASCII de curvas de gráficos"
+
+#: modules/file/rawgraph.c:188
+msgid "ASCII graph import must be run as interactive."
+msgstr "A importação de gráficos ASCII deve ser executada como interativa."
+
+#: modules/file/rawgraph.c:242
+msgid "Import Graph Data"
+msgstr "Importa dados gráficos"
+
+#: modules/file/rawgraph.c:274
+msgid "_X label:"
+msgstr "Rótulo _X:"
+
+#: modules/file/rawgraph.c:279
+msgid "_Y label:"
+msgstr "Rótulo _Y:"
+
+#: modules/file/rawgraph.c:284
+msgid "X _units:"
+msgstr "_Unidades X:"
+
+#: modules/file/rawgraph.c:290
+msgid "Y un_its:"
+msgstr "Un_idades Y:"
+
+#: modules/file/rawgraph.c:460
+msgid "Only files with two columns can be imported."
+msgstr "Apenas arquivos com duas colunas podem ser importados."
+
+#: modules/file/rawgraph.c:579
+msgid "Curve"
+msgstr "Curva"
+
+#: modules/file/rawxyz.c:100
+msgid "Imports raw XYZ data files."
+msgstr "Importa arquivos de dados raw XYZ."
+
+#: modules/file/rawxyz.c:113
+msgid "XYZ data files"
+msgstr "Arquivos de dados XYZ"
+
+#: modules/file/rawxyz.c:263
+msgid "Import XYZ Data"
+msgstr "Importa dados XYZ"
+
+#: modules/file/rawxyz.c:279 modules/graph/graph_stats.c:305
+#: modules/graph/graph_stats.c:756 modules/graph/graph_stats.c:800
+msgid "Number of points:"
+msgstr "Número de pontos:"
+
+#: modules/file/rawxyz.c:290
+msgid "X-range:"
+msgstr "Intervalo X:"
+
+#: modules/file/rawxyz.c:292
+msgid "Y-range:"
+msgstr "Intervalo Y:"
+
+#: modules/file/rawxyz.c:294
+msgid "Z-range:"
+msgstr "Intervalo Z:"
+
+#: modules/file/rawxyz.c:374
+msgid "_Lateral units:"
+msgstr "Unidades _laterais:"
+
+#: modules/file/rawxyz.c:386 modules/process/dimensions.h:479
+msgid "_Value units:"
+msgstr "Unidades de _valor:"
+
+#: modules/file/renishaw.c:368
+msgid "Imports Renishaw WiRE data files (WDF)."
+msgstr "Importa arquivos de dados Renishaw WiRE (WDF)."
+
+#: modules/file/renishaw.c:381
+msgid "Renishaw WiRE data files (.wdf)"
+msgstr "Arquivos de dados Renishaw WiRE (.wdf)"
+
+#: modules/file/renishaw.c:556
+msgid "MapArea block is truncated"
+msgstr "Bloco 'MapArea' está truncado"
+
+#: modules/file/renishaw.c:793
+msgid "Random points order unsupported"
+msgstr "Ordem de pontos aleatória não é suportada"
+
+#: modules/file/renishaw.c:1405
+msgid "Block header is truncated"
+msgstr "O cabeçalho do bloco está truncado"
+
+#: modules/file/rhk-sm3.c:236
+msgid "Imports RHK Technology SM3 data files."
+msgstr "Importa arquivos de dados RHK Technology SM3."
+
+#: modules/file/rhk-sm3.c:256
+msgid "RHK SM3 files (.sm3)"
+msgstr "Arquivos RHK SM3 (.sm3)"
+
+#: modules/file/rhk-sm3.c:336 modules/file/rhk-sm3.c:349
+msgid "End of file reached in page header."
+msgstr "Final do arquivo alcançado no cabeçalho da página."
+
+#: modules/file/rhk-sm3.c:340
+msgid "magic page header"
+msgstr "cabeçalho mágico da página"
+
+#: modules/file/rhk-sm3.c:421
+#, c-format
+msgid "End of file reached in string #%u."
+msgstr "Final do arquivo alcançado na string #%u."
+
+#: modules/file/rhk-sm3.c:442
+msgid "End of file reached in color data header."
+msgstr "Final do arquivo alcançado no cabeçalho dos dados de cores."
+
+#: modules/file/rhk-sm3.c:451
+msgid "End of file reached in color data."
+msgstr "Final do arquivo alcançado nos dados de cores."
+
+#: modules/file/rhk-sm3.c:720
+#, c-format
+msgid "Unknown line %d"
+msgstr "Linha %d desconhecida"
+
+#: modules/file/rhk-sm4.c:397
+msgid "Imports RHK Technology SM4 data files."
+msgstr "Importa arquivos de dados RHK Technology SM4."
+
+#: modules/file/rhk-sm4.c:417
+msgid "RHK SM4 files (.sm4)"
+msgstr "Arquivos RHK SM4 (.sm4)"
+
+#: modules/file/rhk-sm4.c:653
+#, c-format
+msgid "Object %s is truncated."
+msgstr "O objeto %s está truncado."
+
+#: modules/file/rhk-sm4.c:946
+#, c-format
+msgid "Object list in %s is truncated."
+msgstr "A lista de objetos %s está truncada."
+
+#: modules/file/rhk-sm4.c:963
+#, c-format
+msgid "Object of type %s is truncated."
+msgstr "O objeto do tipo %s está truncado."
+
+#: modules/file/rhk-sm4.c:988
+#, c-format
+msgid "Cannot find object %s in %s."
+msgstr "Não foi possível encontrar o objeto %s em %s."
+
+#: modules/file/rhk-spm32.c:176
+msgid "Imports RHK Technology SPM32 data files."
+msgstr "Importa arquivos de dados RHK Technology SPM32."
+
+#: modules/file/rhk-spm32.c:196
+msgid "RHK SPM32 files (.sm2)"
+msgstr "Arquivos RHK SPM32 (.sm2)"
+
+#: modules/file/rhk-spm32.c:379
+msgid "Invalid file header."
+msgstr "Cabeçalho de arquivo inválido."
+
+#: modules/file/rhk-spm32.c:392
+msgid "Only image and line files are supported."
+msgstr "Apenas arquivos de linha e imagem são suportados."
+
+#: modules/file/rhk-spm32.c:398
+#, c-format
+msgid "Invalid data type %d for image data."
+msgstr "Tipo de dados %d inválidos para dados de imagem."
+
+#: modules/file/rhk-spm32.c:406
+#, c-format
+msgid "Invalid data type %d for line data."
+msgstr "Tipo de dados %d inválidos para dados de linha."
+
+#: modules/file/rhk-spm32.c:425
+msgid "data ranges"
+msgstr "Intervalos de dados"
+
+#: modules/file/rhk-spm32.c:490
+msgid "data offset"
+msgstr "afastamento de dados"
+
+#: modules/file/robotics.c:81
+msgid "Imports Automation & Robotics Dual Lensmapper data files"
+msgstr "Importa arquivos de dados Automation & Robotics Dual Lensmapper"
+
+#: modules/file/robotics.c:94
+msgid "Dual Lensmapper files"
+msgstr "Arquivos Dual Lensmapper"
+
+#: modules/file/s94file.c:96
+msgid "Imports S94 STM data files."
+msgstr "Importa arquivos de dados S94 STM."
+
+#: modules/file/s94file.c:109
+msgid "S94 STM files (.s94)"
+msgstr "Arquivos S94 STM (.s94)"
+
+#: modules/file/sdfile.c:155
+msgid "Imports Surfstand group SDF (Surface Data File) files."
+msgstr "Importa arquivos SDF (Surface Data File) do grupo Surfstand."
+
+#: modules/file/sdfile.c:170
+msgid "Surfstand SDF files, binary (.sdf)"
+msgstr "Arquivos Surfstand SDF, binário (.sdf)"
+
+#: modules/file/sdfile.c:176
+msgid "Surfstand SDF files, text (.sdf)"
+msgstr "Arquivos Surfstand SDF, texto (.sdf)"
+
+#: modules/file/sdfile.c:182
+msgid "Micromap SDF files (.sdfa)"
+msgstr "Arquivos Micromap SDF (.sdfa)"
+
+#: modules/file/sdfile.c:620
+#, c-format
+msgid "Invalid `%s' value: %d."
+msgstr "O valor `%s' é inválido: %d."
+
+#: modules/file/sdfile.c:629
+#, c-format
+msgid "Invalid `%s' value: %g."
+msgstr "O valor `%s' é inválido: %g."
+
+#: modules/file/sdfile.c:687
+msgid "Missing data start marker (*)."
+msgstr "Está faltando o marcador de início de dados (*)."
+
+#: modules/file/sdfile.c:711
+#, c-format
+msgid "End of file reached when looking for `%s' field."
+msgstr "Final do arquivo alcançado ao olhar para o campo `%s'."
+
+#: modules/file/sdfile.c:719
+#, c-format
+msgid "Invalid line found when looking for `%s' field."
+msgstr "Encontrada uma linha inválida ao olhar para o campo `%s'."
+
+#: modules/file/seiko.c:118
+msgid "Imports Seiko XQB, XQD, XQT and XQP files."
+msgstr "Importa arquivos Seiko XQB, XQD, XQT e XQP."
+
+#: modules/file/seiko.c:131
+msgid "Seiko files (.xqb, .xqd, .xqt, .xqp)"
+msgstr "Arquivos Seiko (.xqb, .xqd, .xqt, .xqp)"
+
+#: modules/file/sensofar.c:200
+msgid "Imports Sensofar PLu file format, version 2000 or newer."
+msgstr "Importa arquivo no formato Sensofar PLu, versão 2000 ou mais nova."
+
+#: modules/file/sensofar.c:214
+msgid "Sensofar PLu files (.plu)"
+msgstr "Arquivos Sensofar PLu (.plu)"
+
+#: modules/file/sensofar.c:489 modules/file/sensofar.c:503
+msgid "Profile"
+msgstr "Perfil"
+
+#: modules/file/sensofarx.c:90
+msgid "Reads Sensofar PLUx files."
+msgstr "Lê arquivos Sensofar PLUx."
+
+#: modules/file/sensofarx.c:103
+msgid "Sensofar PLUx files (.plux)"
+msgstr "Arquivos Sensofar PLUx (.plux)"
+
+#: modules/file/sensolytics.c:111
+msgid "Imports Sensolytics text files."
+msgstr "Importar arquivos de texto Sensolytics."
+
+#: modules/file/sensolytics.c:124
+msgid "Sensolytics text files (.dat)"
+msgstr "Arquivos de texto Sensolytics (.dat)"
+
+#: modules/file/shimadzu.c:133
+msgid "Imports Shimadzu SPM data files."
+msgstr "Importa arquivos de dados Shimadzu SPM."
+
+#: modules/file/shimadzu.c:146
+msgid "Shimadzu files"
+msgstr "Arquivos Shimadzu"
+
+#: modules/file/shimadzu.c:372
+#, c-format
+msgid "Cannot parse data values after %d of %d."
+msgstr "Não foi possível analisar os valores de dados após %d de %d."
+
+#: modules/file/sicmfile.c:195
+msgid "Imports IonScope SICM data files."
+msgstr "Importa arquivos de dados IonScope SICM."
+
+#: modules/file/sicmfile.c:209
+msgid "IonScope SICM files (.img)"
+msgstr "Arquivos IonScope SICM (.img)"
+
+#: modules/file/sis.c:464
+msgid "Imports SIS (Surface Imaging Systems) data files."
+msgstr "Importa arquivos de dados SIS (Surface Imaging Systems)."
+
+#: modules/file/sis.c:477
+msgid "SIS files (.sis)"
+msgstr "Arquivos SIS (.sis)"
+
+#: modules/file/sis.c:814
+msgid "Block not a document block."
+msgstr "O bloco não é um bloco de documento."
+
+#: modules/file/sis.c:823
+msgid "Too short document info."
+msgstr "Informação do documento é muito curta."
+
+#: modules/file/sis.c:844
+msgid "Too short parameter info."
+msgstr "Informação do parâmetro é muito curta."
+
+#: modules/file/sis.c:946
+msgid "Unexpected image block."
+msgstr "Bloco de imagem inesperado."
+
+#: modules/file/sis.c:984 modules/file/sis.c:1015
+msgid "End of file reached in image block."
+msgstr "Final do arquivo alcançado no bloco de imagem."
+
+#: modules/file/sis.c:1029
+msgid "End of file reached in channel block."
+msgstr "Final do arquivo alcançado no bloco do canal."
+
+#: modules/file/sis.c:1053
+msgid "End of file reached when another channel was expected."
+msgstr "Fim de arquivo alcançado quando um outro canal era esperado."
+
+#: modules/file/spip-asc.c:91
+msgid "Imports SPIP ASC files."
+msgstr "Importa arquivos SPIP ASC."
+
+#: modules/file/spip-asc.c:104
+msgid "SPIP ASCII files (.asc)"
+msgstr "Arquivos SPIP ASCII (.asc)"
+
+#: modules/file/spml.c:108
+msgid "Loads SPML (Scanning Probe Microscopy Markup Language) data files."
+msgstr ""
+"Carrega arquivos de dados SPML (Scanning Probe Microscopy Markup Language)."
+
+#: modules/file/spml.c:122
+msgid "SPML files (.xml)"
+msgstr "Arquivos SPML (.xml)"
+
+#: modules/file/spmlab.c:175
+msgid "Imports Thermicroscopes SpmLab R3 to R7 data files."
+msgstr "Importa arquivos de dados Thermicroscopes SpmLab R3 a R7."
+
+#: modules/file/spmlab.c:188
+msgid "Thermicroscopes SpmLab files"
+msgstr "Arquivos Thermicroscopes SpmLab"
+
+#: modules/file/spmlab.c:259
+#, c-format
+msgid "Unknown format version %c."
+msgstr "Versão %c do formato desconhecida."
+
+#: modules/file/spmlab.c:283
+#, fuzzy
+msgid "Data block is truncated."
+msgstr "O bloco de dados está truncado"
+
+#: modules/file/spmlabf.c:79
+msgid "Imports SPMLab floating-point files."
+msgstr "Importa arquivos SPMLab de ponto flutuante."
+
+#: modules/file/spmlabf.c:92
+msgid "SPMLab floating-point files (.flt)"
+msgstr "Arquivos SPMLab de ponto flutuante (.flt)"
+
+#: modules/file/spmlabf.c:153
+msgid "Missing data start marker [Data]."
+msgstr "Está faltando o marcador de início de dados [Data]."
+
+#: modules/file/spmxfile.c:91
+msgid "Reads ATC SPMxFormat files."
+msgstr "Lê arquivos ATC SPMxFormat."
+
+#: modules/file/spmxfile.c:104
+msgid "ATC SPMxFormat data (.spm)"
+msgstr "Dados ATC SPMxFormat (.spm)"
+
+#: modules/file/stmprg.c:232
+msgid "Imports Omicron STMPRG data files (tp ta)."
+msgstr "Importa arquivos de dados Omicron STMPRG (tp ta)."
+
+#: modules/file/stmprg.c:245
+msgid "Omicron STMPRG files (tp ta)"
+msgstr "Arquivos Omicron STMPRG (tp ta)"
+
+#: modules/file/stmprg.c:284
+msgid "Parameter file is too short."
+msgstr "O arquivo de parâmetros é muito curto."
+
+#: modules/file/stmprg.c:539
+msgid "First channel is switched off."
+msgstr "O primeiro canal está desligado."
+
+#: modules/file/stpfile.c:117
+msgid "Topography"
+msgstr "Topografia"
+
+#: modules/file/stpfile.c:118
+msgid "Current or Deflection or Amplitude"
+msgstr "Corrente ou deflexão ou amplitude"
+
+#: modules/file/stpfile.c:119
+msgid "Electrochemical Voltage (Vec)"
+msgstr "Voltagem eletroquímica (Vec)"
+
+#: modules/file/stpfile.c:120
+msgid "Topography and SPS"
+msgstr "Topografia e SPS"
+
+#: modules/file/stpfile.c:121
+msgid "Topography and SPS (scripted)"
+msgstr "Topografia e SPS (programada)"
+
+#: modules/file/stpfile.c:122
+msgid "Electrochemical Current (Iec)"
+msgstr "Corrente eletroquímica (Iec)"
+
+#: modules/file/stpfile.c:123
+msgid "Friction or Phase"
+msgstr "Fricção ou fase"
+
+#: modules/file/stpfile.c:124
+msgid "AUX in BNC"
+msgstr "AUX em BNC"
+
+#: modules/file/stpfile.c:125
+msgid "AUX in 3 (Sum)"
+msgstr "AUX em 3 (Soma)"
+
+#: modules/file/stpfile.c:126
+msgid "AUX in 4 (Raw Deflection)"
+msgstr "AUX em 4 (Deflexão Raw)"
+
+#: modules/file/stpfile.c:127
+msgid "AUX in 5 (PicoPlus Aux BNC)"
+msgstr "AUX em 5 (PicoPlus Aux BNC)"
+
+#: modules/file/stpfile.c:128
+msgid "AUX in 6 (Surface Potential)"
+msgstr "AUX em 6 (Potencial de Superfície)"
+
+#: modules/file/stpfile.c:129
+msgid "AUX in 7"
+msgstr "AUX em 7"
+
+#: modules/file/stpfile.c:130
+msgid "AUX in 8"
+msgstr "AUX em 8"
+
+#: modules/file/stpfile.c:131
+msgid "AUX in 9"
+msgstr "AUX em 9"
+
+#: modules/file/stpfile.c:132
+msgid "AUX in 10"
+msgstr "AUX em 10"
+
+#: modules/file/stpfile.c:133
+msgid "Topography and Flexgrid"
+msgstr "Topografia e Flexgrid"
+
+#: modules/file/stpfile.c:134
+msgid "External"
+msgstr "Externo"
+
+#: modules/file/stpfile.c:140
+msgid "Imports Molecular Imaging STP data files."
+msgstr "Importa arquivos de dados Molecular Imaging STP."
+
+#: modules/file/stpfile.c:153
+msgid "STP files (.stp)"
+msgstr "Arquivos STP (.stp)"
+
+#: modules/file/surffile.c:292
+msgid "Imports Surf data files."
+msgstr "Importa arquivos de dados Surf."
+
+#: modules/file/surffile.c:305
+msgid "Surf files (.sur)"
+msgstr "Arquivos Surf (.sur)"
+
+#: modules/file/tescan.c:94
+msgid "Imports Tescan SEM images."
+msgstr "Importa imagens SEM Tescan."
+
+#: modules/file/tescan.c:107
+msgid "Tescan MIRA SEM image (.tif)"
+msgstr "Imagem SEM Tescan MIRA (.tif)"
+
+#: modules/file/tiaser.c:179
+msgid "Imports FEI Tecnai imaging and analysis (former Emispec) files."
+msgstr "Importa arquivos FEI Tecnai imaging and analysis (antigo Emispec)"
+
+#: modules/file/tiaser.c:192
+msgid "FEI TIA (Emispec) data"
+msgstr "Dados FEI TIA (Emispec)"
+
+#: modules/file/unisoku.c:145
+msgid "Imports Unisoku data files (two-part .hdr + .dat)."
+msgstr "Importa arquivos Unisoku (duas partes .hdr + .dat)."
+
+#: modules/file/unisoku.c:160
+msgid "Unisoku files (.hdr + .dat)"
+msgstr "Arquivos Unisoku (.hdr + .dat)"
+
+#: modules/file/unisoku.c:316
+msgid "format flags"
+msgstr "Marcas de formato"
+
+#: modules/file/unisoku.c:323
+msgid "resolution"
+msgstr "resolução"
+
+# Is this sentence correct?
+# Esta sentença está correta?
+#: modules/file/unisoku.c:334
+msgid ""
+"Missing or invalid some integers heaven knows what they mean but that should "
+"be here."
+msgstr ""
+"Ausentes ou inválidos, alguns paraísos inteiros sabem o que eles significam, "
+"mas que deveriam estar aqui."
+
+#: modules/file/unisoku.c:348
+msgid "x scale parameters"
+msgstr "parâmetros da escala x"
+
+#: modules/file/unisoku.c:359
+msgid "y scale parameters"
+msgstr "parâmetros da escala y"
+
+#: modules/file/unisoku.c:383
+msgid "z scale parameters"
+msgstr "parâmetros da escala z"
+
+#: modules/file/unisoku.c:391
+msgid "data type parameters"
+msgstr "parâmetros de tipo de dados"
+
+#: modules/file/vtkfile.c:54
+msgid "Exports data as VTK structured grids."
+msgstr "Exporta dados como grades estruturadas VTK."
+
+#: modules/file/vtkfile.c:67
+msgid "VTK structured grid (.vtk)"
+msgstr "Grades estruturadas VTK (.vtk)"
+
+#: modules/file/win_stm.c:81
+msgid "Imports WinSTM (.stm) files."
+msgstr "Importa arquivos WinSTM (.stm)."
+
+#: modules/file/win_stm.c:94
+msgid "WinSTM files (.stm)"
+msgstr "Arquivos WinSTM (.stm)"
+
+#: modules/file/wipfile.c:281
+msgid "Imports WItec Project data files."
+msgstr "Importa arquivos de dados WItec Project."
+
+#: modules/file/wipfile.c:294
+msgid "WItec Project files (.wip)"
+msgstr "Arquivos WItec Project (.wip)"
+
+#: modules/file/witec-asc.c:74
+msgid "Imports WITec ASCII export files."
+msgstr "Arquivos de exportação WITec ASCII."
+
+#: modules/file/witec-asc.c:87
+msgid "WITec ASCII files (.dat)"
+msgstr "Arquivos WITec ASCII (.dat)"
+
+#: modules/file/witfile.c:211
+msgid "Imports WITec WIT data files."
+msgstr "Importa arquivos de dados WITec WIT."
+
+#: modules/file/witfile.c:224
+msgid "WITec files (.wit)"
+msgstr "Arquivos WITec (.wit)"
+
+#: modules/file/wsffile.c:84
+msgid "Imports WSF ASCII files."
+msgstr "Importa arquivos WSF ASCII."
+
+#: modules/file/wsffile.c:97
+msgid "WSF ASCII files (.wsf)"
+msgstr "Arquivos WSF ASCII (.wsf)"
+
+#: modules/file/wsffile.c:154
+msgid "File header does not end with an empty line."
+msgstr "O cabeçalho do arquivo não termina com uma linha vazia."
+
+#: modules/file/wsxmfile.c:98
+msgid "Imports Nanotec WSxM data files."
+msgstr "Importa arquivos de dados Nanotec WSxM."
+
+#: modules/file/wsxmfile.c:111
+msgid "WSxM files (.tom, .stp)"
+msgstr "Arquivos WSxM (.tom, .stp)"
+
+#: modules/file/wsxmfile.c:252
+msgid "number of columns"
+msgstr "número de colunas"
+
+#: modules/file/wsxmfile.c:259
+msgid "number of rows"
+msgstr "número de linhas"
+
+#: modules/file/wsxmfile.c:272
+#, c-format
+msgid "Unknown data type `%s'."
+msgstr "Tipo de dados desconhecido `%s'."
+
+#: modules/file/xyzexport.c:89
+msgid "Exports data as simple XYZ text file."
+msgstr "Exporta dados como arquivo de texto XYZ simples."
+
+#: modules/file/xyzexport.c:102
+msgid "XYZ text data (.xyz)"
+msgstr "Dados de texto XYZ (.xyz)"
+
+#: modules/file/xyzexport.c:247
+msgid "Lateral units:"
+msgstr "Unidades de laterais:"
+
+#: modules/file/xyzexport.c:293
+msgid "Export XYZ"
+msgstr "Exporta XYZ"
+
+#: modules/file/xyzexport.c:343 modules/process/curvature.c:700
+#: modules/process/entropy.c:214 modules/process/facet-level.c:207
+#: modules/process/fit-shape.c:755 modules/process/level.c:259
+#: modules/process/linematch.c:869 modules/process/neural.c:597
+#: modules/process/polylevel.c:494 modules/process/slope_dist.c:411
+#: modules/tools/filter.c:301 modules/tools/linestats.c:436
+#: modules/tools/profile.c:572 modules/tools/sfunctions.c:513
+#: modules/tools/stats.c:389
+msgid "Masking Mode"
+msgstr "Modo de mascaramento"
+
+#: modules/file/zeiss.c:61
+msgid "Imports Carl Zeiss SEM images."
+msgstr "Importa imagens SEM Carl Zeiss."
+
+#: modules/file/zeiss.c:74
+msgid "Carl Zeiss SEM scans (.tif)"
+msgstr "Escaneamentos SEM Carl Zeiss (.tif)"
+
+#: modules/file/zeisslsm.c:383
+#, fuzzy
+msgid "Imports Carl Zeiss CLSM images."
+msgstr "Importa imagens SEM Carl Zeiss."
+
+#: modules/file/zeisslsm.c:396
+#, fuzzy
+msgid "Carl Zeiss CLSM images (.lsm)"
+msgstr "Escaneamentos SEM Carl Zeiss (.tif)"
+
+#: modules/file/zemax.c:72
+msgid "Imports Zemax grid sag data files."
+msgstr "Importa arquivos de dados Zemax grid sag."
+
+#: modules/file/zemax.c:85
+msgid "Zemax grid sag data (.dat)"
+msgstr "Dados Zemax grid sag (.dat)"
+
+#: modules/file/zemax.c:178
+#, c-format
+msgid "Data line %u does not contain four items."
+msgstr "Linha de dados %u não contém quatro itens."
+
+#: modules/file/zemax.c:327
+#, c-format
+msgid "Unit code %d is invalid or unsupported."
+msgstr "O código de unidade %d é inválido ou não suportado."
+
+#: modules/file/zemax.c:351
+msgid "The first line contains too many items."
+msgstr "A primeira linha contém itens demais."
+
+#: modules/graph/graph_align.c:60
+msgid "Aligns graph curves."
+msgstr "Alinhar curvas de gráfico."
+
+#: modules/graph/graph_align.c:74
+msgid "/_Align"
+msgstr "/_Alinhar"
+
+#: modules/graph/graph_align.c:77
+msgid "Align curves"
+msgstr "Alinhar curvas"
+
+#: modules/graph/graph_cd.c:136
+msgid "Critical dimension measurements"
+msgstr "Medidas de dimensão crítica"
+
+#: modules/graph/graph_cd.c:150
+msgid "/_Critical Dimension..."
+msgstr "/Dimensão _crítica..."
+
+#: modules/graph/graph_cd.c:153
+msgid "Fit critical dimension"
+msgstr "Ajustar dimensão crítica"
+
+#: modules/graph/graph_cd.c:209 modules/graph/graph_fit.c:270
+msgid "Fit Graph"
+msgstr "Ajustar gráfico"
+
+#: modules/graph/graph_cd.c:212 modules/graph/graph_fdfit.c:254
+#: modules/graph/graph_fit.c:273 modules/process/fit-shape.c:394
+#: modules/volume/volume_fdfit.c:299
+msgid "verb|_Fit"
+msgstr "Ajustar"
+
+#: modules/graph/graph_cd.c:262 modules/graph/graph_cut.c:168
+#: modules/graph/graph_fdfit.c:313 modules/graph/graph_fit.c:332
+#: modules/graph/graph_peaks.c:199 modules/graph/graph_stats.c:268
+msgid "_Graph curve:"
+msgstr "Curva do _gráfico:"
+
+#: modules/graph/graph_cd.c:276 modules/graph/graph_fdfit.c:327
+#: modules/graph/graph_fit.c:346 modules/volume/volume_fdfit.c:389
+msgid "F_unction:"
+msgstr "F_unção:"
+
+#: modules/graph/graph_cd.c:305 modules/graph/graph_fdfit.c:368
+#: modules/graph/graph_fit.c:382 modules/process/curvature.c:742
+#: modules/process/fit-shape.c:804 modules/volume/volume_fdfit.c:422
+msgid "Parameter"
+msgstr "Parâmetro"
+
+#: modules/graph/graph_cd.c:307 modules/graph/graph_fdfit.c:370
+#: modules/graph/graph_fit.c:384 modules/process/fit-shape.c:806
+#: modules/volume/volume_fdfit.c:424
+msgid "Error"
+msgstr "Erro"
+
+#: modules/graph/graph_cd.c:319 modules/graph/graph_cut.c:189
+#: modules/graph/graph_fdfit.c:422 modules/graph/graph_fit.c:440
+#: modules/graph/graph_stats.c:279 modules/graph/graph_stats.c:793
+#: modules/volume/volume_fdfit.c:476 modules/volume/volume_linestat.c:394
+msgid "Range:"
+msgstr "Intervalo:"
+
+#: modules/graph/graph_cd.c:330 modules/graph/graph_cut.c:200
+#: modules/graph/graph_fdfit.c:433 modules/graph/graph_fit.c:451
+#: modules/graph/graph_stats.c:290 modules/graph/graph_stats.c:796
+#: modules/volume/volume_fdfit.c:487 modules/volume/volume_linestat.c:405
+msgid "range|to"
+msgstr "intervalo|até"
+
+#: modules/graph/graph_cd.c:347
+msgid "_Draw whole circle"
+msgstr "_Desenhar círculo completo"
+
+#: modules/graph/graph_cd.c:382 modules/graph/graph_fdfit.c:498
+#: modules/graph/graph_fit.c:538 modules/process/fit-shape.c:523
+#: modules/volume/volume_fdfit.c:549
+msgid "Save Fit Report"
+msgstr "Salvar reporte de ajuste"
+
+#: modules/graph/graph_cd.c:529 modules/graph/graph_cd.c:1107
+#: modules/graph/graph_fdfit.c:725 modules/graph/graph_fit.c:779
+#: modules/volume/volume_fdfit.c:883
+msgid "Fit"
+msgstr "Ajustar"
+
+#: modules/graph/graph_cd.c:555 modules/graph/graph_fdfit.c:765
+#: modules/graph/graph_fit.c:819 modules/volume/volume_fdfit.c:954
+#: modules/volume/volume_fdfit.c:1061
+msgid "It is necessary to select more data points than free fit parameters"
+msgstr ""
+"É necessário selecionar mais pontos de dados do que o número de parâmetros "
+"livres do ajuste"
+
+#: modules/graph/graph_cd.c:710 modules/graph/graph_fdfit.c:814
+#: modules/graph/graph_fit.c:868 modules/graph/graph_stats.c:663
+#: modules/process/entropy.c:555 modules/tools/grainmeasure.c:217
+#: modules/tools/readvalue.c:634 modules/tools/readvalue.c:635
+#: modules/tools/readvalue.c:636 modules/tools/readvalue.c:637
+#: modules/tools/roughness.c:984 modules/tools/stats.c:723
+#: modules/tools/stats.c:736 modules/tools/stats.c:737
+#: modules/volume/volume_fdfit.c:1110 modules/xyz/xyz_drift.c:1099
+#: modules/xyz/xyz_drift.c:1117 modules/xyz/xyz_drift.c:1134
+msgid "N.A."
+msgstr "N.A."
+
+#: modules/graph/graph_cd.c:993 modules/graph/graph_fdfit.c:1381
+#: modules/graph/graph_fit.c:1518 modules/process/fit-shape.c:2060
+#: modules/volume/volume_fdfit.c:1696
+msgid "===== Fit Results ====="
+msgstr "===== Resultados do ajuste ====="
+
+#: modules/graph/graph_cd.c:997 modules/graph/graph_fdfit.c:1385
+#: modules/graph/graph_fit.c:1522 modules/process/fit-shape.c:2062
+#: modules/volume/volume_fdfit.c:1700
+#, c-format
+msgid "Data: %s\n"
+msgstr "Dados: %s\n"
+
+#: modules/graph/graph_cd.c:1000 modules/graph/graph_fdfit.c:1388
+#: modules/graph/graph_fit.c:1525 modules/process/fit-shape.c:2064
+#: modules/volume/volume_fdfit.c:1703
+#, c-format
+msgid "Number of points: %d of %d\n"
+msgstr "Número de pontos: %d de %d\n"
+
+#: modules/graph/graph_cd.c:1004 modules/graph/graph_fdfit.c:1392
+#: modules/graph/graph_fit.c:1529 modules/volume/volume_fdfit.c:1707
+#, c-format
+msgid "X range: %.*f to %.*f %s\n"
+msgstr "Intervalo X: %.*f até %.*f %s\n"
+
+#: modules/graph/graph_cd.c:1010 modules/graph/graph_fdfit.c:1398
+#: modules/graph/graph_fit.c:1535 modules/process/fit-shape.c:2066
+#: modules/volume/volume_fdfit.c:1713
+#, c-format
+msgid "Fitted function: %s\n"
+msgstr "Função ajustada: %s\n"
+
+#: modules/graph/graph_cd.c:1013 modules/graph/graph_fdfit.c:1401
+#: modules/graph/graph_fit.c:1538 modules/process/fit-shape.c:2069
+#: modules/volume/volume_fdfit.c:1716
+msgid "Results\n"
+msgstr "Resultados\n"
+
+#: modules/graph/graph_cut.c:87
+msgid "Cut graph"
+msgstr "Cortar gráfico"
+
+#: modules/graph/graph_cut.c:101
+msgid "/_Cut..."
+msgstr "/_Cortar..."
+
+#: modules/graph/graph_cut.c:104
+msgid "Extract part of graph into new one"
+msgstr "Extrair parte do gráfico para um novo"
+
+#: modules/graph/graph_cut.c:145
+msgid "Cut Graph"
+msgstr "Cortar gráfico"
+
+#: modules/graph/graph_cut.c:173
+msgid "Cut _all curves"
+msgstr "Cortar tod_as as curvas"
+
+#: modules/graph/graph_dos_spectrum.c:42
+msgid "DOS Spectrum"
+msgstr "Espectro DOS"
+
+#: modules/graph/graph_dos_spectrum.c:56
+msgid "/_DOS Spectrum"
+msgstr "/Espectro _DOS"
+
+#: modules/graph/graph_dos_spectrum.c:59
+msgid "Calculate DOS spectrum from I-V tunneling spectroscopy"
+msgstr "Calcula espectro DOS a partir de espectroscopia de tunelamento I-V"
+
+#: modules/graph/graph_dos_spectrum.c:95
+#, c-format
+msgid "%s: Graph should be I-V spectroscopy."
+msgstr "%s: O gráfico deve ser espectroscopia I-V."
+
+#: modules/graph/graph_dos_spectrum.c:115
+#, c-format
+msgid "DOS Spectrum for \"%s\""
+msgstr "Espectro DOS para \"%s\""
+
+#: modules/graph/graph_export_ascii.c:63
+msgid "Exports graph data to text files."
+msgstr "Exporta dados de gráfico para arquivos de texto."
+
+#: modules/graph/graph_export_ascii.c:77
+msgid "/Export _Text..."
+msgstr "/Exportar _texto..."
+
+#: modules/graph/graph_export_ascii.c:80
+msgid "Export graph data to a text file"
+msgstr "Exportar dados de gráfico para um arquivo de texto"
+
+#: modules/graph/graph_export_ascii.c:101
+msgid "Plain text"
+msgstr "Texto plano"
+
+#: modules/graph/graph_export_ascii.c:102
+msgid "Gnuplot friendly"
+msgstr "Compatível com Gnuplot"
+
+#: modules/graph/graph_export_ascii.c:103
+msgid "Comma separated values"
+msgstr "Dados separados por vírgula"
+
+#: modules/graph/graph_export_ascii.c:104
+msgid "Origin friendly"
+msgstr "Compatível com Origin"
+
+#: modules/graph/graph_export_ascii.c:105
+msgid "Igor Pro text wave"
+msgstr "Onda de texto Igor Pro"
+
+#: modules/graph/graph_export_ascii.c:127
+msgid "POSIX _number format"
+msgstr "Formato _numérico POSIX"
+
+#: modules/graph/graph_export_ascii.c:133
+msgid "Single _merged abscissa"
+msgstr "Abcissa simples _mesclada"
+
+#: modules/graph/graph_export_ascii.c:139
+msgid "Export _labels"
+msgstr "Exportar rótu_los"
+
+#: modules/graph/graph_export_ascii.c:145
+msgid "Export _units"
+msgstr "Exportar _unidades"
+
+#: modules/graph/graph_export_ascii.c:151
+msgid "Export _metadata"
+msgstr "Exportar _metadados"
+
+#: modules/graph/graph_export_ascii.c:194
+msgid "Export to Text File"
+msgstr "Exportar para arquivo de texto"
+
+#: modules/graph/graph_export_bitmap.c:36
+msgid "Export graph into bitmap"
+msgstr "Exportar gráfico em bitmap"
+
+#: modules/graph/graph_export_bitmap.c:50
+msgid "/Export _Bitmap"
+msgstr "/Exportar _bitmap"
+
+#: modules/graph/graph_export_bitmap.c:53
+msgid "Export graph to a raster image"
+msgstr "Exportar gráfico para uma imagem raster"
+
+#: modules/graph/graph_export_bitmap.c:65
+msgid "Export to PNG"
+msgstr "Exportar para PNG"
+
+#: modules/graph/graph_export_vector.c:36
+msgid "Exports graphs to PostScript"
+msgstr "Exporta gráficos para PostScript"
+
+#: modules/graph/graph_export_vector.c:50
+msgid "/Export _PostScript"
+msgstr "/Exportar _PostScript"
+
+#: modules/graph/graph_export_vector.c:53
+msgid "Export graph to PostScript"
+msgstr "Exportar gráfico para PostScript"
+
+#: modules/graph/graph_export_vector.c:66
+msgid "Export to PostScript"
+msgstr "Exportar para PostScript"
+
+#: modules/graph/graph_fdfit.c:169
+msgid "Fit force-distance data"
+msgstr "Ajustar dados força-distância"
+
+#: modules/graph/graph_fdfit.c:183
+msgid "/_Fit FD Curve..."
+msgstr "/Ajustar curva _FD..."
+
+#: modules/graph/graph_fdfit.c:186
+msgid "Fit a force-distance curve"
+msgstr "Ajustar curva força-distância"
+
+#: modules/graph/graph_fdfit.c:251 modules/volume/volume_fdfit.c:296
+msgid "Fit FD Curve"
+msgstr "Ajustar curva FD"
+
+#: modules/graph/graph_fdfit.c:258 modules/graph/graph_fit.c:277
+#: modules/process/correct_affine.c:347 modules/process/fit-shape.c:398
+#: modules/process/measure_lattice.c:247 modules/volume/volume_fdfit.c:303
+msgid "verb|_Estimate"
+msgstr "_Estimar"
+
+#: modules/graph/graph_fdfit.c:260 modules/graph/graph_fit.c:279
+#: modules/process/psf.c:239 modules/volume/volume_fdfit.c:305
+msgid "_Plot Inits"
+msgstr "_Plotar Inits"
+
+#: modules/graph/graph_fdfit.c:366 modules/graph/graph_fit.c:380
+#: modules/process/fit-shape.c:802 modules/volume/volume_fdfit.c:420
+msgid "Fix"
+msgstr "Fixar"
+
+#: modules/graph/graph_fdfit.c:372 modules/graph/graph_fit.c:386
+#: modules/volume/volume_fdfit.c:426
+msgid "Initial"
+msgstr "Inicial"
+
+#: modules/graph/graph_fdfit.c:383 modules/graph/graph_fit.c:401
+#: modules/volume/volume_fdfit.c:437
+msgid "χ<sup>2</sup> result:"
+msgstr "Resultado de χ<sup>2</sup>:"
+
+#: modules/graph/graph_fdfit.c:399 modules/graph/graph_fit.c:417
+#: modules/process/fit-shape.c:470 modules/process/fit-shape.c:2116
+#: modules/volume/volume_fdfit.c:453
+msgid "Correlation Matrix"
+msgstr "Matriz de correlação"
+
+#: modules/graph/graph_fdfit.c:454 modules/graph/graph_fit.c:492
+#: modules/process/wpour_mark.c:410 modules/volume/volume_fdfit.c:508
+msgid "Instant:"
+msgstr "Instante:"
+
+#: modules/graph/graph_fdfit.c:457 modules/graph/graph_fit.c:495
+msgid "esti_mate"
+msgstr "esti_mar"
+
+#: modules/graph/graph_fdfit.c:464 modules/graph/graph_fit.c:502
+#: modules/volume/volume_fdfit.c:518
+msgid "p_lot"
+msgstr "p_lotar"
+
+#: modules/graph/graph_fdfit.c:724 modules/graph/graph_fit.c:778
+#: modules/volume/volume_fdfit.c:882
+msgid "Estimate"
+msgstr "Estimar"
+
+#: modules/graph/graph_fdfit.c:1428 modules/graph/graph_fit.c:1565
+#: modules/volume/volume_fdfit.c:1744
+#, c-format
+msgid "Residual sum: %g\n"
+msgstr "Soma residual: %g\n"
+
+#: modules/graph/graph_fdfit.c:1431 modules/graph/graph_fit.c:1568
+#: modules/volume/volume_fdfit.c:1747
+msgid "Correlation matrix\n"
+msgstr "Matriz de correlação\n"
+
+#: modules/graph/graph_filter.c:40
+msgid "Remove graph noise by filtering."
+msgstr "Remover ruído de gráfico filtrando."
+
+#: modules/graph/graph_filter.c:54
+msgid "/_Filter"
+msgstr "/_Filtrar"
+
+#: modules/graph/graph_filter.c:57
+msgid "Remove noise from graph curves"
+msgstr "Remover ruído de curvas do gráfico"
+
+#: modules/graph/graph_fit.c:182
+msgid "Fit graph with function"
+msgstr "Ajustar gráfico com função"
+
+#: modules/graph/graph_fit.c:196
+msgid "/_Fit Function..."
+msgstr "/Ajustar _função..."
+
+#: modules/graph/graph_fit.c:199
+msgid "Fit a function on graph data"
+msgstr "Ajustar uma função nos dados do gráfico"
+
+#: modules/graph/graph_fit.c:393
+msgid "Copy all fitted values to estimates"
+msgstr "Copiar todos os valores ajustados para estimativas"
+
+#: modules/graph/graph_fit.c:467
+msgid "Plot full range"
+msgstr "Plotar intervalo completo"
+
+#: modules/graph/graph_fit.c:477
+msgid "Create a difference graph"
+msgstr "Criar um gráfico da diferença"
+
+#: modules/graph/graph_level.c:39
+msgid "Level graph by line."
+msgstr "Nivelar gráfico por linha."
+
+#: modules/graph/graph_level.c:53
+msgid "/_Level"
+msgstr "/Nive_lar"
+
+#: modules/graph/graph_level.c:56
+msgid "Level graph curves"
+msgstr "Nivelar curvas do gráfico"
+
+#: modules/graph/graph_logscale.c:79
+msgid "Physically transforms graph data to logarithmic scale."
+msgstr ""
+
+#: modules/graph/graph_logscale.c:93
+#, fuzzy
+msgid "/_Logscale transform..."
+msgstr "Transformada de classificação..."
+
+#: modules/graph/graph_logscale.c:96
+#, fuzzy
+msgid "Transform graph axes to logarithmic scale"
+msgstr "Cria apresentação com escala de cores logarítmica"
+
+#: modules/graph/graph_logscale.c:229
+#, fuzzy
+msgid "Logscale Transform"
+msgstr "Transformada de Hough"
+
+#: modules/graph/graph_logscale.c:245
+#, fuzzy
+msgid "Axes to transform:"
+msgstr "Transformada _inversa"
+
+#: modules/graph/graph_logscale.c:253
+#, fuzzy
+msgid "_X"
+msgstr "_X:"
+
+#: modules/graph/graph_logscale.c:254
+#, fuzzy
+msgid "_Y"
+msgstr "_Y:"
+
+#: modules/graph/graph_logscale.c:255 modules/tools/grainremover.c:110
+msgid "_Both"
+msgstr "Am_bos"
+
+#: modules/graph/graph_logscale.c:260
+msgid "Negative value handling:"
+msgstr ""
+
+#: modules/graph/graph_logscale.c:268
+msgid "O_mit"
+msgstr ""
+
+#: modules/graph/graph_logscale.c:269
+#, fuzzy
+msgid "_Take absolute value"
+msgstr "Inclinação média absoluta"
+
+#: modules/graph/graph_logscale.c:275
+msgid "Base:"
+msgstr ""
+
+#: modules/graph/graph_logscale.c:283
+msgid "Natural (e)"
+msgstr ""
+
+#: modules/graph/graph_logscale.c:284
+msgid "10"
+msgstr ""
+
+#: modules/graph/graph_peaks.c:118
+msgid "Finds peaks on graph curves."
+msgstr "Encontrar picos nas curvas do gráfico."
+
+#: modules/graph/graph_peaks.c:132
+msgid "/Find _Peaks..."
+msgstr "/Encontrar _picos..."
+
+#: modules/graph/graph_peaks.c:135
+msgid "Find graph curve peaks"
+msgstr "Encontrar picos na curva do gráfico."
+
+#: modules/graph/graph_peaks.c:155
+msgid "Prominence"
+msgstr "Proeminência"
+
+#: modules/graph/graph_peaks.c:159
+msgid "Zero"
+msgstr "Zero"
+
+#: modules/graph/graph_peaks.c:160
+msgid "Bilateral minimum"
+msgstr "Mínimo bilateral"
+
+#: modules/graph/graph_peaks.c:176
+msgid "Graph Peaks"
+msgstr "Picos do gráfico"
+
+#: modules/graph/graph_peaks.c:209
+msgid "_Background type:"
+msgstr "Fundo tipo:"
+
+#: modules/graph/graph_peaks.c:219
+msgid "Order peaks _by:"
+msgstr "Ordenar picos por:"
+
+#: modules/graph/graph_peaks.c:225
+msgid "Number of _peaks:"
+msgstr "Número de _picos:"
+
+#: modules/graph/graph_peaks.c:245 modules/graph/graph_stats.c:367
+#: modules/process/curvature.c:770 modules/process/grain_stat.c:360
+#: modules/process/measure_lattice.c:390 modules/process/polylevel.c:610
+#: modules/tools/distance.c:259 modules/tools/roughness.c:819
+#: modules/tools/stats.c:447
+msgid "Save table to a file"
+msgstr "Salvar tabela para um arquivo"
+
+#: modules/graph/graph_peaks.c:249 modules/graph/graph_stats.c:371
+#: modules/process/curvature.c:775 modules/process/grain_stat.c:365
+#: modules/process/measure_lattice.c:394 modules/process/polylevel.c:620
+#: modules/tools/distance.c:264 modules/tools/roughness.c:824
+#: modules/tools/stats.c:452
+msgid "Copy table to clipboard"
+msgstr "Copiar tabela para área de transferência"
+
+#: modules/graph/graph_peaks.c:618
+msgid "Save Peak Parameters"
+msgstr "Salvar parâmetros do pico"
+
+#: modules/graph/graph_stats.c:148 modules/graph/graph_stats.c:161
+#: modules/tools/stats.c:205
+msgid "Average value:"
+msgstr "Valor médio:"
+
+#: modules/graph/graph_stats.c:149 modules/tools/stats.c:206
+msgid "Median:"
+msgstr "Mediana:"
+
+#: modules/graph/graph_stats.c:150
+#, fuzzy
+msgid "Ra:"
+msgstr "Ra"
+
+#: modules/graph/graph_stats.c:151
+#, fuzzy
+msgid "Rms (Rq):"
+msgstr "Rms (Sq):"
+
+#: modules/graph/graph_stats.c:152 modules/tools/stats.c:210
+msgid "Skew:"
+msgstr "Assimetria:"
+
+#: modules/graph/graph_stats.c:153 modules/tools/stats.c:211
+msgid "Kurtosis:"
+msgstr "Kurtosis:"
+
+#: modules/graph/graph_stats.c:158
+#, fuzzy
+msgid "Projected length:"
+msgstr "Comprimento da fronteira projetada"
+
+#: modules/graph/graph_stats.c:159
+#, fuzzy
+msgid "Developed length:"
+msgstr "Comprimento do perfil desenvolvido"
+
+#: modules/graph/graph_stats.c:160 modules/tools/stats.c:214
+msgid "Variation:"
+msgstr "Variação:"
+
+#: modules/graph/graph_stats.c:162
+#, fuzzy
+msgid "Area under curve:"
+msgstr "Curva do _gráfico:"
+
+#: modules/graph/graph_stats.c:163
+#, fuzzy
+msgid "Positive area:"
+msgstr "Positivo"
+
+#: modules/graph/graph_stats.c:164
+#, fuzzy
+msgid "Negative area:"
+msgstr "Negativo"
+
+#: modules/graph/graph_stats.c:165
+#, fuzzy
+msgid "Root mean square:"
+msgstr "Raiz quadrática média da ondulação"
+
+#: modules/graph/graph_stats.c:171
+#, fuzzy
+msgid "Calculates simple graph curve statistics."
+msgstr "Calcula curvatura total."
+
+#: modules/graph/graph_stats.c:185
+#, fuzzy
+msgid "/_Statistics..."
+msgstr "/_Grãos/Es_tatísticas..."
+
+#: modules/graph/graph_stats.c:188
+#, fuzzy
+msgid "Calculate graph curve statistics"
+msgstr "Calcular funções estatísticas de linha/coluna"
+
+#: modules/graph/graph_stats.c:241
+#, fuzzy
+msgid "Graph Statistics"
+msgstr "Estatísticas de grãos"
+
+#: modules/graph/graph_stats.c:320 modules/graph/graph_stats.c:807
+#, fuzzy
+msgid "Simple Parameters"
+msgstr "Parâmetros de simulação"
+
+#: modules/graph/graph_stats.c:342 modules/graph/graph_stats.c:826
+#, fuzzy
+msgid "Integrals"
+msgstr "_Integral:"
+
+#: modules/graph/graph_stats.c:686
+#, fuzzy
+msgid "Save Curve Statistics"
+msgstr "Salvar estatísticas de grãos"
+
+#: modules/layer/axis.c:143
+msgid "Layer allowing selection of horizontal or vertical lines."
+msgstr "Camada permitindo seleção de linhas horizontal ou vertical."
+
+#: modules/layer/ellipse.c:143
+msgid "Layer allowing selection of elliptic areas."
+msgstr "Camada permitindo seleção de áreas elípticas."
+
+#: modules/layer/lattice.c:126
+msgid "Layer allowing selection of a two-dimensional lattice."
+msgstr "Camada permitindo seleção de uma rede bidimensional."
+
+#: modules/layer/line.c:177
+msgid "Layer allowing selection of arbitrary straight lines."
+msgstr "Camada permitindo seleção de linhas retas arbitrárias."
+
+#: modules/layer/path.c:171
+msgid "Layer allowing selection of a single long curve."
+msgstr "Camada permitindo seleção de uma curva longa simples."
+
+#: modules/layer/point.c:169
+msgid ""
+"Layer allowing selection of several points, displayed as crosses or "
+"invisible."
+msgstr ""
+"Camada permitindo seleção de diversos pontos, exibidos como cruzes ou "
+"invisíveis."
+
+#: modules/layer/rectangle.c:147
+msgid "Layer allowing selection of rectangular areas."
+msgstr "Camada permitindo seleção de áreas retangulares."
+
+#: modules/plugin-proxy.c:145
+msgid ""
+"Plug-in proxy is a module capable of querying, registering, and running "
+"external programs (plug-ins) on data pretending they are data processing or "
+"file loading/saving modules."
+msgstr ""
+"Plug-in proxy é um módulo capaz de consultar, registrar e executar programas "
+"externos (plug-ins) sobre dados fazendo de conta que eles são processamento "
+"de dados ou módulos de carregamento/salvamento de arquivo."
+
+#: modules/plugin-proxy.c:463
+msgid "/_Plug-Ins"
+msgstr "/_Plug-Ins"
+
+#: modules/plugin-proxy.c:464
+#, c-format
+msgid "Run plug-in %s"
+msgstr "Executar plug-in %s"
+
+#: modules/plugin-proxy.c:737 modules/plugin-proxy.c:838
+msgid "Plugin-proxy must be run as interactive."
+msgstr "Plugin-proxy deve ser executado como interativo."
+
+#: modules/plugin-proxy.c:743
+#, c-format
+msgid "Plug-in `%s' does not implement file loading."
+msgstr "O plug-in `%s' não implementa o carregamento de arquivo."
+
+#: modules/plugin-proxy.c:761
+#, c-format
+msgid "Cannot read temporary file: %s."
+msgstr "Não foi possível ler o arquivo temporário: %s."
+
+#: modules/plugin-proxy.c:768 modules/plugin-proxy.c:863
+#, c-format
+msgid "Cannot execute plug-in `%s': %s."
+msgstr "Não foi possível executar o plug-in `%s': %s."
+
+#: modules/plugin-proxy.c:777 modules/plugin-proxy.c:872
+#, c-format
+msgid "Plug-in `%s' returned non-zero exit status: %d."
+msgstr "O plug-in `%s' retornou status de saída diferente de zero: %d."
+
+#: modules/plugin-proxy.c:790
+#, c-format
+msgid "Plug-in `%s' did not return any meaningful data."
+msgstr "O plug-in `%s' não retornou nenhum dado com significado."
+
+#: modules/plugin-proxy.c:844
+#, c-format
+msgid "Plug-in `%s' does not implement file saving."
+msgstr "O plug-in `%s' não implementa o salvamento de arquivo."
+
+#: modules/plugin-proxy.c:1204 modules/plugin-proxy.c:1213
+#, c-format
+msgid "Cannot create a temporary file: %s."
+msgstr "Não foi possível criar um arquivo temporário: %s."
+
+#: modules/plugin-proxy.c:1221
+#, c-format
+msgid "Cannot fdopen() already open file: %s."
+msgstr "Não é possível abrir um arquivo que já esteja aberto: %s."
+
+#: modules/process/acf2d.c:37
+msgid "Calculates two-dimensional autocorrelation function."
+msgstr "Calcula função de autocorrelação bidimensional."
+
+#: modules/process/acf2d.c:51
+msgid "/_Statistics/2D Auto_correlation"
+msgstr "/E_statísticas/Auto_correlação 2D"
+
+#: modules/process/acf2d.c:55
+msgid "Calculate 2D autocorrelation function"
+msgstr "Calcula função de autocorrelação 2D"
+
+#: modules/process/acf2d.c:76
+msgid "2D ACF"
+msgstr "2D ACF"
+
+#: modules/process/angle_dist.c:102
+msgid ""
+"Calculates two-dimensional distribution of angles, that is projections of "
+"slopes to all directions."
+msgstr ""
+"Calcula distribuição bidimensional de ângulos, que é a projeção de "
+"inclinações para todas as direções."
+
+#: modules/process/angle_dist.c:117
+msgid "/_Statistics/An_gle Distribution..."
+msgstr "/E_statísticas/Distribuição de ân_gulos..."
+
+#: modules/process/angle_dist.c:121
+msgid "Calculate two-dimensional angle distribution"
+msgstr "Calcular distribuição de ângulos bidimensional"
+
+#: modules/process/angle_dist.c:149
+msgid "Computing angle distribution..."
+msgstr "Computando a distribuição de ângulos..."
+
+#: modules/process/angle_dist.c:160
+msgid "Angle distribution"
+msgstr "Distribuição de ângulos"
+
+#: modules/process/angle_dist.c:171
+msgid "Angle Distribution"
+msgstr "Distribuição de ângulos"
+
+#: modules/process/angle_dist.c:188 modules/process/slope_dist.c:365
+msgid "Output _size:"
+msgstr "Tamanho da saída:"
+
+#: modules/process/angle_dist.c:193 modules/process/grain_wshed.c:207
+msgid "_Number of steps:"
+msgstr "_Número de passos:"
+
+#: modules/process/angle_dist.c:198 modules/process/slope_dist.c:372
+msgid "_Logarithmic value scale"
+msgstr "Escala _logarítmica de valores"
+
+#: modules/process/angle_dist.c:204 modules/process/entropy.c:231
+#: modules/process/slope_dist.c:382
+msgid "Use local plane _fitting"
+msgstr "Usar ajuste de plano local"
+
+#: modules/process/angle_dist.c:213 modules/process/entropy.c:242
+#: modules/process/slope_dist.c:393
+msgid "_Plane size:"
+msgstr "Tamanho do _plano:"
+
+#: modules/process/arithmetic.c:140
+msgid "Simple arithmetic operations with data fields."
+msgstr "Operações aritméticas simples com campos de dados."
+
+#: modules/process/arithmetic.c:160
+msgid "/M_ultidata/_Arithmetic..."
+msgstr "/M_ulti-dados/_Aritmética..."
+
+#: modules/process/arithmetic.c:164
+msgid "Arithmetic operations on data"
+msgstr "Operações aritméticas em dados"
+
+#: modules/process/arithmetic.c:202 modules/process/stitch.c:234
+#: modules/process/superresolution.c:348
+msgid "Calculated"
+msgstr "Calculado"
+
+#: modules/process/arithmetic.c:231
+msgid "Arithmetic"
+msgstr "Aritmética"
+
+#: modules/process/arithmetic.c:270
+msgid "_Expression:"
+msgstr "_Expressão:"
+
+#: modules/process/arithmetic.c:295
+msgid "Operands"
+msgstr "Operandos"
+
+#: modules/process/arithmetic.c:300 modules/process/dimensions.h:465
+msgid "Units"
+msgstr "Unidades"
+
+#: modules/process/arithmetic.c:335
+#, c-format
+msgid "Take result units from data d%d"
+msgstr "Obter unidades do resultado a partir dos dados d%d"
+
+#: modules/process/arithmetic.c:353
+msgid "Specify un_its:"
+msgstr "Especificar un_idades:"
+
+#: modules/process/arithmetic.c:372
+msgid "Specify result units explicitly"
+msgstr "Especificar unidades do resultado explicitamente"
+
+#: modules/process/arithmetic.c:455
+msgid "Expression contains unknown identifiers"
+msgstr "Expressão contém identificadores desconhecidos"
+
+#: modules/process/arithmetic.c:569 modules/process/superresolution.c:299
+msgid "Pixel dimensions differ"
+msgstr "Dimensões dos pixeis diferem"
+
+#: modules/process/arithmetic.c:571 modules/process/superresolution.c:301
+msgid "Lateral dimensions are different physical quantities"
+msgstr "Dimensões laterais são diferentes das quantidades físicas"
+
+#: modules/process/arithmetic.c:574 modules/process/superresolution.c:304
+msgid "Physical dimensions differ"
+msgstr "Dimensões físicas diferem"
+
+#: modules/process/averaging.c:53
+msgid "Similar structures averaging using autocorrelation"
+msgstr "Cálculo de média de estruturas similares usando autocorrelação"
+
+#: modules/process/averaging.c:67
+msgid "/_Correct Data/_Correlation Averaging..."
+msgstr "/_Corrigir dados/_Calcular médias com correlação..."
+
+#: modules/process/averaging.c:71
+msgid "Averaging of similar structures"
+msgstr "Cálculo de média de estruturas similares"
+
+#: modules/process/averaging.c:105
+msgid "Averaged"
+msgstr "Média calculada"
+
+#: modules/process/averaging.c:123
+msgid "Averaging of Similar Structures"
+msgstr "Cálculo de média de estruturas similares"
+
+#: modules/process/averaging.c:141
+msgid "Select the sample area below"
+msgstr "Selecione a área da amostra abaixo"
+
+#: modules/process/basicops.c:53
+msgid ""
+"Basic operations like flipping, value inversion, and rotation by multiples "
+"of 90 degrees."
+msgstr ""
+"Operações básicas como espelhamento, inversão de valores e rotação por "
+"múltiplos de 90 graus."
+
+#: modules/process/basicops.c:68
+msgid "/_Basic Operations/_Invert Value"
+msgstr "/Operações _básicas/_Inverter valor"
+
+#: modules/process/basicops.c:72
+msgid "Invert values about mean"
+msgstr "Inverter valores em torno da média"
+
+#: modules/process/basicops.c:75
+msgid "/_Basic Operations/Flip _Horizontally"
+msgstr "/Operações _básicas/Espelhar _horizontalmente"
+
+#: modules/process/basicops.c:79
+msgid "Flip data horizontally"
+msgstr "Espelhar dados horizontalmente"
+
+#: modules/process/basicops.c:82
+msgid "/_Basic Operations/Flip _Vertically"
+msgstr "/Operações _básicas/Espelhar _verticalmente"
+
+#: modules/process/basicops.c:86
+msgid "Flip data vertically"
+msgstr "Espelhar dados verticalmente"
+
+#: modules/process/basicops.c:89
+msgid "/_Basic Operations/Flip _Both"
+msgstr "/Operações _básicas/Espelhar am_bos"
+
+#: modules/process/basicops.c:93
+msgid "Flip data both horizontally and vertically"
+msgstr "Espelhar dados horizontalmente e verticalmente"
+
+#: modules/process/basicops.c:96
+msgid "/_Basic Operations/Rotate C_lockwise"
+msgstr "/Operações _básicas/Girar em sentido horário"
+
+#: modules/process/basicops.c:100
+msgid "Rotate data 90 degrees clockwise"
+msgstr "Girar dados 90 graus no sentido horário"
+
+#: modules/process/basicops.c:103
+msgid "/_Basic Operations/Rotate _Counterclockwise"
+msgstr "/Operações _básicas/Girar em sentido anti-horário"
+
+#: modules/process/basicops.c:107
+msgid "Rotate data 90 degrees counterclockwise"
+msgstr "Girar dados 90 graus no sentido anti-horário"
+
+#: modules/process/basicops.c:110
+msgid "/_Basic Operations/S_quare Samples"
+msgstr "/Operações _básicas/En_quadrar amostras"
+
+#: modules/process/basicops.c:114
+msgid "Resample data with non-1:1 aspect ratio to square samples"
+msgstr ""
+"Re-amostrar dados com razão de aspecto diferente de 1:1 para amostras "
+"quadradas"
+
+#: modules/process/basicops.c:118
+msgid "/_Basic Operations/_Null Offsets"
+msgstr "/Operações _básicas/Afastamentos _nulos"
+
+#: modules/process/basicops.c:122
+msgid "Null horizontal offsets, moving the origin to the upper left corner"
+msgstr ""
+"Afastamentos horizontais nulos, movendo a origem para o canto superior "
+"esquerdo"
+
+#: modules/process/bdep_synth.c:150
+msgid "Generates surfaces by ballistic deposition."
+msgstr "Gera superfícies por deposição balística."
+
+#: modules/process/bdep_synth.c:164
+#, fuzzy
+msgid "/S_ynthetic/_Deposition/_Ballistic..."
+msgstr "/Sintético/_Balístico..."
+
+#: modules/process/bdep_synth.c:168
+msgid "Generate surface by ballistic deposition"
+msgstr "Gera superfície por deposição balística"
+
+#: modules/process/bdep_synth.c:239 modules/process/bdep_synth.c:596
+#: modules/process/calcoefs_simple.c:636 modules/process/col_synth.c:282
+#: modules/process/col_synth.c:734 modules/process/crosscor.c:792
+#: modules/process/crosscor.c:855 modules/process/deposit_synth.c:268
+#: modules/process/deposit_synth.c:858 modules/process/diff_synth.c:304
+#: modules/process/diff_synth.c:704 modules/process/domain_synth.c:255
+#: modules/process/domain_synth.c:745 modules/process/fibre_synth.c:357
+#: modules/process/fibre_synth.c:872 modules/process/grain_wshed.c:433
+#: modules/process/lat_synth.c:491 modules/process/mark_disconn.c:148
+#: modules/process/mark_disconn.c:361 modules/process/maskcor.c:334
+#: modules/process/mcrop.c:314 modules/process/merge.c:1072
+#: modules/process/nanoindent_adjust.c:324 modules/process/neural.c:1279
+#: modules/process/pid.c:339 modules/process/sphere-revolve.c:269
+#: modules/process/superresolution.c:415 modules/process/superresolution.c:504
+#: modules/process/tip_blind.c:778 modules/process/tipops.c:320
+#: modules/process/wave_synth.c:305 modules/process/wave_synth.c:747
+#: modules/process/xydenoise.c:214 modules/volume/volume_kmeans.c:397
+#: modules/volume/volume_kmedians.c:363 modules/xyz/xyz_raster.c:997
+#: modules/xyz/xyz_raster.c:1013
+msgid "Initializing..."
+msgstr "Inicializando ..."
+
+#: modules/process/bdep_synth.c:275 modules/process/col_synth.c:320
+#: modules/process/deposit_synth.c:306 modules/process/deposit_synth.c:318
+#: modules/process/deposit_synth.c:531 modules/process/deposit_synth.c:544
+#: modules/process/diff_synth.c:342 modules/process/domain_synth.c:319
+#: modules/process/domain_synth.c:327 modules/process/fbm_synth.c:278
+#: modules/process/fft_synth.c:314 modules/process/fibre_synth.c:394
+#: modules/process/lat_synth.c:529 modules/process/lno_synth.c:405
+#: modules/process/noise_synth.c:309 modules/process/obj_synth.c:404
+#: modules/process/pat_synth.c:357 modules/process/phase_synth.c:518
+#: modules/process/wave_synth.c:342
+msgid "Generated"
+msgstr "Gerado"
+
+#: modules/process/bdep_synth.c:299 modules/process/col_synth.c:345
+#: modules/process/diff_synth.c:366
+msgid "Mean deposited thickness"
+msgstr "Espessura média depositada"
+
+#: modules/process/bdep_synth.c:339
+msgid "Ballistic Deposition"
+msgstr "Deposição balística"
+
+#: modules/process/bdep_synth.c:384 modules/process/col_synth.c:435
+#: modules/process/diff_synth.c:454 modules/process/domain_synth.c:407
+msgid "Progressive preview"
+msgstr "Pré-visualização progressiva"
+
+#: modules/process/bdep_synth.c:407 modules/process/col_synth.c:458
+#: modules/process/deposit_synth.c:413 modules/process/diff_synth.c:477
+#: modules/process/domain_synth.c:430 modules/process/fbm_synth.c:360
+#: modules/process/fft_synth.c:398 modules/process/fibre_synth.c:479
+#: modules/process/lat_synth.c:626 modules/process/lno_synth.c:488
+#: modules/process/mfm_current.c:383 modules/process/mfm_parallel.c:384
+#: modules/process/noise_synth.c:392 modules/process/obj_synth.c:495
+#: modules/process/pat_synth.c:442 modules/process/phase_synth.c:263
+#: modules/process/wave_synth.c:426
+msgid "Dimensions"
+msgstr "Dimensões"
+
+#: modules/process/bdep_synth.c:416 modules/process/col_synth.c:467
+#: modules/process/deposit_synth.c:425 modules/process/diff_synth.c:486
+#: modules/process/domain_synth.c:438 modules/process/fbm_synth.c:371
+#: modules/process/fft_synth.c:409 modules/process/fibre_synth.c:490
+#: modules/process/lno_synth.c:499 modules/process/mfm_current.c:412
+#: modules/process/mfm_parallel.c:411 modules/process/noise_synth.c:403
+#: modules/process/obj_synth.c:506 modules/process/pat_synth.c:454
+#: modules/process/phase_synth.c:274 modules/process/wave_synth.c:437
+msgid "Generator"
+msgstr "Gerador"
+
+#: modules/process/bdep_synth.c:422 modules/process/col_synth.c:473
+#: modules/process/deposit_synth.c:455 modules/process/diff_synth.c:492
+#: modules/process/fibre_synth.c:502 modules/process/lno_synth.c:1041
+#: modules/process/obj_synth.c:518
+msgid "Co_verage:"
+msgstr "Cobertura:"
+
+#: modules/process/bdep_synth.c:434 modules/process/diff_synth.c:512
+#: modules/process/domain_synth.c:514 modules/process/fbm_synth.c:411
+#: modules/process/fft_synth.c:418 modules/process/fibre_synth.c:544
+#: modules/process/lat_synth.c:758 modules/process/lno_synth.c:535
+#: modules/process/noise_synth.c:435 modules/process/obj_synth.c:577
+#: modules/process/phase_synth.c:302 modules/process/wave_synth.c:472
+#, fuzzy
+msgid "_Like Current Image"
+msgstr "Canal atual"
+
+#: modules/process/bdep_synth.c:453 modules/process/col_synth.c:542
+#: modules/process/diff_synth.c:561
+msgid "Evolution"
+msgstr "Evolução"
+
+#: modules/process/bdep_synth.c:456 modules/process/col_synth.c:545
+#: modules/process/diff_synth.c:564
+msgid "Plot graphs:"
+msgstr "Plotar gráficos:"
+
+#: modules/process/bdep_synth.c:654 modules/process/col_synth.c:841
+#: modules/process/diff_synth.c:781
+msgid "Depositing particles..."
+msgstr "Depositando partículas..."
+
+#: modules/process/calcoefs_load.c:85
+msgid "Load calibration data from text file"
+msgstr "Carregar dados de calibração a partir de um arquivo de texto"
+
+#: modules/process/calcoefs_load.c:99
+msgid "/Cali_bration/_Load From Text File..."
+msgstr "/Ca_libração/Carregar a partir de um arquivo de texto..."
+
+#: modules/process/calcoefs_load.c:103
+msgid "Load calibration data from text file."
+msgstr "Carregar dados de calibração a partir de um arquivo de texto."
+
+#: modules/process/calcoefs_load.c:159
+#, c-format
+msgid "Error loading file: %s\n"
+msgstr "Erro ao carregar arquivo: %s\n"
+
+#: modules/process/calcoefs_load.c:191 modules/process/calcoefs_new.c:336
+#, c-format
+msgid "Cannot save preset: %s"
+msgstr "Não foi possível salvar pré-definição: %s"
+
+#: modules/process/calcoefs_load.c:223
+msgid "Load Calibration Data"
+msgstr "Carregar dados de calibração"
+
+#: modules/process/calcoefs_load.c:243 modules/process/calcoefs_new.c:590
+#: modules/process/calcoefs_simple.c:475
+msgid "Calibration name:"
+msgstr "Nome da calibração:"
+
+#: modules/process/calcoefs_load.c:254 modules/volume/volume_extract.c:421
+#: modules/volume/volume_extract.c:501
+msgid "No data loaded"
+msgstr "Nenhum dado carregado"
+
+#: modules/process/calcoefs_load.c:307 modules/process/calcoefs_new.c:685
+#: modules/process/calcoefs_simple.c:539
+#, c-format
+msgid "Calibration '%s' already exists"
+msgstr "A calibração '%s' já existe"
+
+#: modules/process/calcoefs_load.c:310 modules/process/calcoefs_new.c:688
+#: modules/process/calcoefs_simple.c:541
+msgid "Overwrite"
+msgstr "Sobrescrever"
+
+#: modules/process/calcoefs_load.c:312 modules/process/calcoefs_new.c:690
+#: modules/process/calcoefs_simple.c:542
+msgid "Append"
+msgstr "Anexar"
+
+#: modules/process/calcoefs_load.c:349
+msgid "Load calibration data"
+msgstr "Carregar dados de calibração"
+
+#: modules/process/calcoefs_load.c:364 modules/volume/volume_extract.c:1059
+#, c-format
+msgid "Error loading file '%s'"
+msgstr "Erro ao carregar arquivo '%s'"
+
+#: modules/process/calcoefs_load.c:423
+msgid "Error: not enough points."
+msgstr "Erro: sem pontos suficientes."
+
+#: modules/process/calcoefs_load.c:450
+#, c-format
+msgid "Loaded %d data points"
+msgstr "Carregados %d pontos de dados"
+
+#: modules/process/calcoefs_new.c:173
+msgid "Create simple calibration data"
+msgstr "Criar dados de calibração simples"
+
+#: modules/process/calcoefs_new.c:187
+msgid "/Cali_bration/_Create..."
+msgstr "/Ca_libração/_Criar..."
+
+#: modules/process/calcoefs_new.c:191
+msgid "Specify simple calibration data."
+msgstr "Especificar dados de calibração simples."
+
+#: modules/process/calcoefs_new.c:370
+msgid "Simple Calibration Data"
+msgstr "Dados de calibração simples"
+
+#: modules/process/calcoefs_new.c:388
+msgid "_X from:"
+msgstr "De _X:"
+
+#: modules/process/calcoefs_new.c:415
+msgid "_X to:"
+msgstr "Até _X:"
+
+#: modules/process/calcoefs_new.c:428
+msgid "_Y from:"
+msgstr "De _Y:"
+
+#: modules/process/calcoefs_new.c:441
+msgid "_Y to:"
+msgstr "Até _Y:"
+
+#: modules/process/calcoefs_new.c:455
+msgid "_Z from:"
+msgstr "De _Z:"
+
+#: modules/process/calcoefs_new.c:482
+msgid "_Z to:"
+msgstr "Até _Z:"
+
+#: modules/process/calcoefs_new.c:495
+msgid "_X uncertainty:"
+msgstr "Incerteza em _X:"
+
+#: modules/process/calcoefs_new.c:516
+msgid "_Y uncertainty:"
+msgstr "Incerteza em _Y:"
+
+#: modules/process/calcoefs_new.c:531
+msgid "_Z uncertainty:"
+msgstr "Incerteza em _Z:"
+
+#: modules/process/calcoefs_new.c:553
+msgid "_X correction factor:"
+msgstr "Fator de correlação _X:"
+
+#: modules/process/calcoefs_new.c:565
+msgid "_Y correction factor:"
+msgstr "Fator de correlação _Y:"
+
+#: modules/process/calcoefs_new.c:577
+msgid "_Z correction factor:"
+msgstr "Fator de correlação _Z:"
+
+#: modules/process/calcoefs_simple.c:169
+msgid "Simple error map based on grating measurements"
+msgstr "Mapa de erros simples baseado em medições de grade"
+
+#: modules/process/calcoefs_simple.c:183
+msgid "/Cali_bration/_Get Simple Errop Map..."
+msgstr "/Ca_libração/Obter mapa de erros simples..."
+
+#: modules/process/calcoefs_simple.c:187
+msgid "Simple error mapping"
+msgstr "Mapeamento de erros simples"
+
+#: modules/process/calcoefs_simple.c:326
+msgid "Simple Error Map"
+msgstr "Mapa de erros simples"
+
+#: modules/process/calcoefs_simple.c:343 modules/process/calcoefs_stage.c:142
+#: modules/process/superresolution.c:156
+msgid "Operands:"
+msgstr "Operandos:"
+
+#: modules/process/calcoefs_simple.c:349
+msgid "Grating image"
+msgstr "Imagem da grade"
+
+#: modules/process/calcoefs_simple.c:350 modules/tools/crop.c:390
+msgid "Detail"
+msgstr "Detalhe"
+
+#: modules/process/calcoefs_simple.c:371 modules/process/calcoefs_view.c:491
+#: modules/process/calibrate.c:481 modules/process/crosscor.c:276
+#: modules/volume/volume_calibrate.c:460
+msgid "_X offset:"
+msgstr "Afastamento _X:"
+
+#: modules/process/calcoefs_simple.c:398 modules/process/calcoefs_view.c:517
+#: modules/process/calibrate.c:488 modules/process/crosscor.c:284
+#: modules/volume/volume_calibrate.c:467
+msgid "_Y offset:"
+msgstr "Afastamento _Y:"
+
+#: modules/process/calcoefs_simple.c:411
+msgid "X _period:"
+msgstr "_Período X:"
+
+#: modules/process/calcoefs_simple.c:424
+msgid "Y p_eriod:"
+msgstr "P_eríodo Y:"
+
+#: modules/process/calcoefs_simple.c:438 modules/process/calcoefs_view.c:529
+#: modules/volume/volume_calibrate.c:474
+msgid "_Z offset:"
+msgstr "Afastamento _Z:"
+
+#: modules/process/calcoefs_simple.c:466
+msgid "_Threshold"
+msgstr "Limiar"
+
+#: modules/process/calcoefs_simple.c:487
+msgid "No suggestion\n"
+msgstr "Sem sugestão\n"
+
+#: modules/process/calcoefs_simple.c:589
+msgid "Data same as detail?"
+msgstr "Mesmos dados como detalhes?"
+
+#: modules/process/calcoefs_simple.c:595
+msgid "Data larger than detail?"
+msgstr "Dados maiores que os detalhes?"
+
+#: modules/process/calcoefs_simple.c:609
+#, c-format
+msgid "one object found"
+msgid_plural "%d objects found"
+msgstr[0] "um objeto encontrado"
+msgstr[1] "%d objetos encontrados"
+
+#: modules/process/calcoefs_simple.c:614
+msgid "Search canceled"
+msgstr "Busca cancelada"
+
+#: modules/process/calcoefs_simple.c:638 modules/process/crosscor.c:835
+#: modules/process/maskcor.c:336 modules/process/mcrop.c:316
+#: modules/process/merge.c:1074
+msgid "Correlating..."
+msgstr "Correlacionando..."
+
+#: modules/process/calcoefs_stage.c:72
+msgid "Digital AFM data recalibration"
+msgstr "Recalibração digital de dados AFM"
+
+#: modules/process/calcoefs_stage.c:86
+msgid "/Cali_bration/_3D Calibration/_Get From Stage map..."
+msgstr "/Ca_libração/Calibração _3D/Obter do mapa de estágio..."
+
+#: modules/process/calcoefs_stage.c:90
+msgid "Stage error mapping"
+msgstr "Estágio de mapeamento de erro"
+
+#: modules/process/calcoefs_stage.c:127
+msgid "Stage Error Map"
+msgstr "Estágio do mapa de erro"
+
+#: modules/process/calcoefs_view.c:236
+msgid "3D calibration/uncertainty"
+msgstr "Calibração 3D/incerteza"
+
+#: modules/process/calcoefs_view.c:250
+msgid "/Cali_bration/_Apply to Data..."
+msgstr "/Cali_bração/_Aplicar nos dados..."
+
+#: modules/process/calcoefs_view.c:254
+msgid "3D calibration and uncertainty"
+msgstr "Calibração 3D e incerteza"
+
+#: modules/process/calcoefs_view.c:318
+msgid "3D Calibration"
+msgstr "Calibração 3D"
+
+#: modules/process/calcoefs_view.c:377
+msgid "No data used."
+msgstr "Nenhum dado usado."
+
+#: modules/process/calcoefs_view.c:397
+msgid "Used calibration data:"
+msgstr "Dados de calibração usado:"
+
+#: modules/process/calcoefs_view.c:414
+msgid "Shown planes:"
+msgstr "Planos mostrados:"
+
+#: modules/process/calcoefs_view.c:420
+msgid "View:"
+msgstr "Visualizar:"
+
+#: modules/process/calcoefs_view.c:435
+msgid "Plane:"
+msgstr "Plano:"
+
+#: modules/process/calcoefs_view.c:454
+msgid "X position:"
+msgstr "Posição X:"
+
+#: modules/process/calcoefs_view.c:461
+msgid "Y position:"
+msgstr "Posição Y:"
+
+#: modules/process/calcoefs_view.c:468
+msgid "Z position:"
+msgstr "Posição Z:"
+
+#: modules/process/calcoefs_view.c:557
+msgid "Crop to actual data"
+msgstr "Cortar para dados reais"
+
+#: modules/process/calcoefs_view.c:567 modules/process/coerce.c:368
+#: modules/process/deposit_synth.c:642 modules/process/edge.c:705
+#: modules/process/fft_filter_1d.c:301 modules/process/grain_edge.c:277
+#: modules/process/grain_filter.c:346 modules/process/grain_mark.c:357
+#: modules/process/mark_with.c:322 modules/process/mfm_field.c:420
+#: modules/process/mfm_shift.c:216 modules/process/polydistort.c:319
+#: modules/process/psf.c:309 modules/process/scars.c:421
+#: modules/process/slope_dist.c:400 modules/process/synth.h:542
+#: modules/volume/volume_extract.c:411 modules/volume/volume_extract.c:491
+#: modules/volume/volume_linestat.c:427
+msgid "I_nstant updates"
+msgstr "Atualizações i_nstantâneas"
+
+#: modules/process/calcoefs_view.c:682
+msgid "Shown part has zero range."
+msgstr "Parte mostrada tem intervalo zero."
+
+#: modules/process/calcoefs_view.c:690
+#, c-format
+msgid "Shown range (%.*f - %.*f) %s"
+msgstr "Intervalo mostrado (%.*f - %.*f) %s"
+
+#: modules/process/calcoefs_view.c:738
+#, c-format
+msgid "%d calibration data"
+msgstr "Dados de calibração %d"
+
+#: modules/process/calcoefs_view.c:742
+#, c-format
+msgid "X span: (%.*f - %.*f) %s"
+msgstr "Espaço X: (%.*f - %.*f) %s"
+
+#: modules/process/calcoefs_view.c:748
+#, c-format
+msgid "Y span: (%.*f - %.*f) %s"
+msgstr "Espaço Y: (%.*f - %.*f) %s"
+
+#: modules/process/calcoefs_view.c:754
+#, c-format
+msgid "Z span: (%.*f - %.*f) %s"
+msgstr "Espaço Z: (%.*f - %.*f) %s"
+
+#: modules/process/calcoefs_view.c:778
+msgid "Error: out of range."
+msgstr "Erro: fora do intervalo."
+
+#: modules/process/calcoefs_view.c:787
+msgid "Building mesh..."
+msgstr "Construindo encaixe..."
+
+#: modules/process/calcoefs_view.c:1120 modules/tools/profile.c:1867
+msgid "X correction"
+msgstr "Correção X"
+
+#: modules/process/calcoefs_view.c:1121 modules/tools/profile.c:1868
+msgid "Y correction"
+msgstr "Correção Y"
+
+#: modules/process/calcoefs_view.c:1122 modules/tools/profile.c:1869
+msgid "Z correction"
+msgstr "Correção Z"
+
+#: modules/process/calcoefs_view.c:1123 modules/tools/profile.c:1870
+msgid "X uncertainty"
+msgstr "Incerteza em X"
+
+#: modules/process/calcoefs_view.c:1124 modules/tools/profile.c:1871
+msgid "Y uncertainty"
+msgstr "Incerteza em Y"
+
+#: modules/process/calcoefs_view.c:1125 modules/tools/profile.c:1872
+msgid "Z uncertainty"
+msgstr "Incerteza em Z"
+
+#: modules/process/calcoefs_view.c:1137
+msgid "Constant X"
+msgstr "X constante"
+
+#: modules/process/calcoefs_view.c:1138
+msgid "Constant Y"
+msgstr "Y constante"
+
+#: modules/process/calcoefs_view.c:1139
+msgid "Constant Z"
+msgstr "Z constante"
+
+#: modules/process/calcoefs_view.c:1150
+msgid "NNA 3D"
+msgstr "NNA 3D"
+
+# Is the word 'planes' the plural form of 'plane' or did you mean 'plans'?
+#
+#: modules/process/calcoefs_view.c:1151
+msgid "Snap to planes"
+msgstr "Atenção aos planos"
+
+#: modules/process/calcoefs_view.c:1152
+msgid "Delaunay"
+msgstr "Delaunay"
+
+#: modules/process/calibrate.c:172
+msgid "Recalibrates scan lateral dimensions or value range."
+msgstr "Recalibra dimensões laterais de escaneamento ou intervalo de valor."
+
+#: modules/process/calibrate.c:186
+msgid "/_Basic Operations/_Dimensions and Units..."
+msgstr "/Operações _básicas/_Dimensões e unidades..."
+
+#: modules/process/calibrate.c:190 modules/volume/volume_calibrate.c:193
+msgid "Change physical dimensions, units or value scale"
+msgstr "Modificar dimensões físicas, unidades ou escala de valor"
+
+#: modules/process/calibrate.c:349 modules/volume/volume_calibrate.c:355
+msgid "Recalibrated Data"
+msgstr "Dados recalibrados"
+
+#: modules/process/calibrate.c:382
+msgid "Dimensions and Units"
+msgstr "Dimensões e unidades"
+
+#: modules/process/calibrate.c:405 modules/volume/volume_calibrate.c:391
+msgid "New Real Dimensions"
+msgstr "Novas dimensões reais"
+
+#: modules/process/calibrate.c:415
+msgid "_Match pixel size:"
+msgstr "Combinar tamanho do pixel:"
+
+#: modules/process/calibrate.c:447 modules/volume/volume_calibrate.c:397
+msgid "_X range:"
+msgstr "Intervalo _X:"
+
+#: modules/process/calibrate.c:467 modules/volume/volume_calibrate.c:417
+msgid "_Y range:"
+msgstr "Intervalo _Y:"
+
+#: modules/process/calibrate.c:472
+msgid "_Square samples"
+msgstr "Amostras quadradas"
+
+#: modules/process/calibrate.c:496 modules/volume/volume_calibrate.c:480
+msgid "Value Range"
+msgstr "Intervalo de valor"
+
+#: modules/process/calibrate.c:502 modules/volume/volume_calibrate.c:437
+msgid "_Z range:"
+msgstr "Intervalo _Z:"
+
+#: modules/process/calibrate.c:524
+msgid "Z shi_ft:"
+msgstr "Deslocamento _Z:"
+
+#: modules/process/calibrate.c:533 modules/volume/volume_calibrate.c:515
+msgid "Calibration Coefficients"
+msgstr "Coeficientes de calibração"
+
+#: modules/process/calibrate.c:538 modules/volume/volume_calibrate.c:520
+msgid "_X calibration factor:"
+msgstr "Fator de calibração _X:"
+
+#: modules/process/calibrate.c:545 modules/volume/volume_calibrate.c:527
+msgid "_Y calibration factor:"
+msgstr "Fator de calibração _Y:"
+
+#: modules/process/calibrate.c:552 modules/volume/volume_calibrate.c:534
+msgid "_Z calibration factor:"
+msgstr "Fator de calibração _Z:"
+
+#: modules/process/calibrate.c:567 modules/process/drift.c:389
+#: modules/process/extend.c:293 modules/tools/crop.c:213
+#, fuzzy
+msgid "Create new image"
+msgstr "Criar um novo item"
+
+#: modules/process/coerce.c:159
+msgid "Transforms surfaces to have prescribed statistical properties."
+msgstr ""
+"Transforma superfícies para ter propriedades estatísticas pré-descritas."
+
+#: modules/process/coerce.c:173
+msgid "/S_ynthetic/Co_erce..."
+msgstr "/Sintético/Forçar..."
+
+#: modules/process/coerce.c:177
+msgid "Enforce prescribed statistical properties"
+msgstr "Impor propriedades estatísticas prescritas"
+
+#: modules/process/coerce.c:214
+msgid "Coerced"
+msgstr "Forçado"
+
+#: modules/process/coerce.c:225 modules/process/coerce.c:326
+#: modules/process/fbm_synth.c:474 modules/process/lno_synth.c:254
+#: modules/process/noise_synth.c:181
+msgid "distribution|Uniform"
+msgstr "distribuição|Uniforme"
+
+#: modules/process/coerce.c:226 modules/process/fbm_synth.c:475
+#: modules/process/lno_synth.c:244 modules/process/noise_synth.c:171
+msgid "distribution|Gaussian"
+msgstr "distribuição|Gaussiana"
+
+#: modules/process/coerce.c:227
+msgid "As another data"
+msgstr "Como outros dados"
+
+#: modules/process/coerce.c:228
+msgid "Discrete levels"
+msgstr "Níveis discretos"
+
+#: modules/process/coerce.c:232
+msgid "Entire image"
+msgstr "Imagem inteira"
+
+#: modules/process/coerce.c:233
+msgid "By row (identically)"
+msgstr "Por linha (identicamente)"
+
+#: modules/process/coerce.c:247
+msgid "Coerce Statistics"
+msgstr "Forçar estatísticas"
+
+#: modules/process/coerce.c:289
+msgid "Coerce value distribution to:"
+msgstr "Forçar distribuição de valores para:"
+
+#: modules/process/coerce.c:315
+msgid "_Template:"
+msgstr "Modelo:"
+
+#: modules/process/coerce.c:328
+msgid "Same area"
+msgstr "Mesma área"
+
+#: modules/process/coerce.c:339
+msgid "Number of _levels:"
+msgstr "Número de níveis:"
+
+#: modules/process/coerce.c:349
+msgid "Data processing:"
+msgstr "Processamento de dados:"
+
+#: modules/process/col_synth.c:172
+msgid "Number of maxima"
+msgstr "Número de máximos"
+
+#: modules/process/col_synth.c:173 modules/tools/linestats.c:178
+#: modules/volume/volume_linestat.c:156
+msgid "Skew"
+msgstr "Assimetria"
+
+#: modules/process/col_synth.c:174 modules/tools/linestats.c:179
+#: modules/tools/roughness.c:387 modules/volume/volume_linestat.c:157
+msgid "Kurtosis"
+msgstr "Curtose"
+
+#: modules/process/col_synth.c:175
+#, fuzzy
+msgid "Autocorrelation length"
+msgstr "Comprimento de _autocorrelação:"
+
+#: modules/process/col_synth.c:194
+msgid "Generates columnar surfaces by a simple growth algorithm."
+msgstr "Gera superfícies colunares por um algorítimo de crescimento simples."
+
+#: modules/process/col_synth.c:208
+#, fuzzy
+msgid "/S_ynthetic/_Deposition/_Columnar..."
+msgstr "/Sintético/_Colunar..."
+
+#: modules/process/col_synth.c:212
+msgid "Generate columnar surface"
+msgstr "Gerar superfície colunar"
+
+#: modules/process/col_synth.c:390
+msgid "Grow Columnar Surface"
+msgstr "Crescer superfície colunar"
+
+#: modules/process/col_synth.c:480
+msgid "Particle Size"
+msgstr "Tamanho da partícula"
+
+#: modules/process/col_synth.c:498
+msgid "Incidence"
+msgstr "Incidência"
+
+#: modules/process/col_synth.c:503
+msgid "Inclination"
+msgstr "Inclinação"
+
+#: modules/process/col_synth.c:509 modules/process/crosscor.c:1036
+msgid "Direction"
+msgstr "Direção"
+
+#: modules/process/col_synth.c:521
+msgid "Relaxation type:"
+msgstr "Tipo de relaxação:"
+
+#: modules/process/col_synth.c:529
+msgid "_Melting:"
+msgstr "Derretido:"
+
+#: modules/process/col_synth.c:613
+msgid "Weak"
+msgstr "Fraco"
+
+#: modules/process/col_synth.c:614
+msgid "Strong"
+msgstr "Forte"
+
+#: modules/process/convolution_filter.c:124
+msgid "symmetry|None"
+msgstr "simetria|Nenhuma"
+
+#: modules/process/convolution_filter.c:125
+msgid "symmetry|Even"
+msgstr "simetria|Par"
+
+#: modules/process/convolution_filter.c:126
+msgid "symmetry|Odd"
+msgstr "simetria|Ímpar"
+
+#: modules/process/convolution_filter.c:132
+msgid "Generic convolution filter with a user-defined matrix."
+msgstr "Filtro de convolução genérico com uma matriz definida pelo usuário."
+
+#: modules/process/convolution_filter.c:157
+msgid "/_Integral Transforms/Con_volution Filter..."
+msgstr "/Transformadas _integrais/Filtro de con_volução..."
+
+#: modules/process/convolution_filter.c:161
+msgid "General convolution filter"
+msgstr "Filtro de convolução geral"
+
+#: modules/process/convolution_filter.c:233
+msgid "Convolution Filter"
+msgstr "Filtro de convolução"
+
+#: modules/process/convolution_filter.c:269 modules/tools/filter.c:171
+#: modules/tools/filter.c:275
+msgid "Filter"
+msgstr "Filtro"
+
+#: modules/process/convolution_filter.c:366
+msgid "Coefficient Matrix"
+msgstr "Matriz de coeficientes"
+
+#: modules/process/convolution_filter.c:386
+msgid "_Divisor:"
+msgstr "_Divisor:"
+
+#: modules/process/convolution_filter.c:391
+msgid "_automatic"
+msgstr "_automático"
+
+#: modules/process/convolution_filter.c:401
+msgid "Symmetry"
+msgstr "Simetria"
+
+#: modules/process/convolution_filter.c:561
+msgid "HSym"
+msgstr "HSym"
+
+#: modules/process/convolution_filter.c:571
+msgid "VSym"
+msgstr "VSym"
+
+#: modules/process/correct_affine.c:220
+msgid ""
+"Corrects affine distortion of images by matching image Bravais lattice to "
+"the true one."
+msgstr ""
+"Corrige distorções afins de imagens combinando imagens da rede de Bravais "
+"para as verdadeiras."
+
+#: modules/process/correct_affine.c:235
+msgid "/_Distortion/_Affine..."
+msgstr "/_Distorção/_Afim..."
+
+#: modules/process/correct_affine.c:239
+msgid "Correct affine distortion"
+msgstr "Corrigir distorções afins"
+
+#: modules/process/correct_affine.c:309 modules/process/correct_affine.c:634
+msgid "Corrected"
+msgstr "Corrigido"
+
+#: modules/process/correct_affine.c:343
+msgid "Affine Correction"
+msgstr "Correção afim"
+
+#: modules/process/correct_affine.c:349 modules/process/measure_lattice.c:249
+msgid "_Refine"
+msgstr "_Refinar"
+
+#: modules/process/correct_affine.c:399 modules/process/fft_filter_2d.c:530
+msgid "Preview Options"
+msgstr "Pré-visualizar opções"
+
+#: modules/process/correct_affine.c:404 modules/process/fft_filter_2d.c:535
+#: modules/process/measure_lattice.c:311
+msgid "Display:"
+msgstr "Exibir:"
+
+#: modules/process/correct_affine.c:412 modules/process/measure_lattice.c:319
+#: modules/tools/grainremover.c:109
+msgid "_Data"
+msgstr "_Dados"
+
+#: modules/process/correct_affine.c:413
+msgid "2D _ACF"
+msgstr "_ACF 2D"
+
+#: modules/process/correct_affine.c:414 modules/process/drift.c:364
+msgid "Correc_ted data"
+msgstr "Dados corrigidos"
+
+#: modules/process/correct_affine.c:425
+msgid "ACF zoom:"
+msgstr "Zoom ACF:"
+
+#: modules/process/correct_affine.c:442 modules/process/measure_lattice.c:346
+#, fuzzy
+msgid "Interpolate _horizontal ACF"
+msgstr "Interpolação"
+
+#: modules/process/correct_affine.c:452 modules/process/measure_lattice.c:372
+msgid "Lattice Vectors"
+msgstr "Vetores da rede"
+
+#. TRANSLATORS: Correct is an adjective here.
+#: modules/process/correct_affine.c:469
+msgid "Correct Lattice"
+msgstr "Corrigir rede"
+
+#: modules/process/correct_affine.c:473
+msgid "_Lattice type:"
+msgstr "Tipo de rede:"
+
+#: modules/process/correct_affine.c:480
+msgid "User defined"
+msgstr "Definido pelo usuário"
+
+#: modules/process/correct_affine.c:495
+msgid "_Different lengths"
+msgstr "Comprimentos _diferentes"
+
+#: modules/process/correct_affine.c:524
+msgid "Image for _ACF:"
+msgstr "Imagem para _ACF:"
+
+#: modules/process/correct_affine.c:551
+msgid "_Scaling:"
+msgstr "E_scalando:"
+
+#: modules/process/correct_affine.c:558
+msgid "Exactly as specified"
+msgstr "Exatamente como especificado"
+
+#: modules/process/correct_affine.c:560
+msgid "Preserve area"
+msgstr "Preservar área"
+
+#: modules/process/correct_affine.c:562
+msgid "Preserve X scale"
+msgstr "Preservar escala X"
+
+#: modules/process/correct_affine.c:571 modules/process/drift.c:379
+msgid "_Apply to all compatible images"
+msgstr ""
+
+#: modules/process/correct_affine.c:693 modules/process/measure_lattice.c:482
+msgid "length"
+msgstr "comprimento"
+
+#: modules/process/correct_affine.c:700 modules/process/measure_lattice.c:489
+msgid "angle"
+msgstr "ângulo"
+
+#: modules/process/crosscor.c:157
+msgid "Calculates cross-correlation of two data fields."
+msgstr "Calcula correlação cruzada de dois campos de dados."
+
+#: modules/process/crosscor.c:171
+msgid "/M_ultidata/_Cross-Correlation..."
+msgstr "/M_ultidados/_Correlação cruzada..."
+
+#: modules/process/crosscor.c:175
+msgid "Cross-correlate two data fields"
+msgstr "Fazer correlação cruzada de dois campos de dados."
+
+#: modules/process/crosscor.c:214
+msgid "Cross-Correlation"
+msgstr "Correlação cruzada"
+
+#: modules/process/crosscor.c:238
+msgid "Co_rrelate with:"
+msgstr "Co_rrelacionar com:"
+
+#: modules/process/crosscor.c:244
+msgid "Search size"
+msgstr "Procurar tamanho"
+
+#: modules/process/crosscor.c:267
+msgid "_Guess"
+msgstr "Tentar"
+
+#: modules/process/crosscor.c:268
+msgid "Global offset of 2nd channel"
+msgstr "Afastamento global do 2° canal"
+
+#: modules/process/crosscor.c:292
+msgid "Window size"
+msgstr "Tamanho da janela"
+
+#: modules/process/crosscor.c:300
+msgid "W_idth:"
+msgstr "Largura:"
+
+#: modules/process/crosscor.c:308
+msgid "Hei_ght:"
+msgstr "Altura:"
+
+#: modules/process/crosscor.c:319 modules/process/fft.c:403
+#: modules/process/psdf_logphi.c:268
+msgid "_Windowing type:"
+msgstr "Tipo de janelamento:"
+
+#: modules/process/crosscor.c:327
+msgid "All"
+msgstr "Todos"
+
+#: modules/process/crosscor.c:328
+msgid "Absolute"
+msgstr "Absoluto"
+
+#: modules/process/crosscor.c:329
+msgid "X Distance"
+msgstr "Distância X"
+
+#: modules/process/crosscor.c:330
+msgid "Y Distance"
+msgstr "Distância Y"
+
+#: modules/process/crosscor.c:332 modules/process/crosscor.c:1050
+msgid "Score"
+msgstr "Pontuação"
+
+#: modules/process/crosscor.c:334 modules/process/fft.c:393
+#: modules/process/fit-shape.c:699 modules/process/maskcor.c:177
+#: modules/process/mfm_current.c:455 modules/process/mfm_field.c:373
+#: modules/process/mfm_parallel.c:466
+msgid "Output _type:"
+msgstr "_Tipo de saída:"
+
+#: modules/process/crosscor.c:340
+msgid "Add _low score results mask"
+msgstr "Adicionar máscara de resultados de baixa pontuação"
+
+#: modules/process/crosscor.c:351 modules/process/grain_wshed.c:225
+#: modules/process/maskcor.c:191
+msgid "T_hreshold:"
+msgstr "Limiar:"
+
+#: modules/process/crosscor.c:359
+msgid "Multichannel cross-corelation"
+msgstr "Correlação cruzada de multicanal"
+
+#: modules/process/crosscor.c:378
+msgid "Second _source data:"
+msgstr "Segunda fonte de dados:"
+
+#: modules/process/crosscor.c:394
+msgid "Correlate with:"
+msgstr "Correlacionar com:"
+
+#: modules/process/crosscor.c:402
+msgid "Postprocess:"
+msgstr "Pós-processamento:"
+
+#: modules/process/crosscor.c:411
+#, fuzzy
+msgid "Apply Ga_ussian filter of width:"
+msgstr "Aplicar filtro ga_ussiano de largura:"
+
+#: modules/process/crosscor.c:424
+msgid "Extend results to borders"
+msgstr "Estender resultados para bordas"
+
+#: modules/process/crosscor.c:433
+msgid "Create corrected data from 2nd channel"
+msgstr "Criar dados corrigidos a partir do 2° canal"
+
+#: modules/process/crosscor.c:833
+msgid "Correlating first set..."
+msgstr "Correlacionando primeiro conjunto..."
+
+#: modules/process/crosscor.c:865
+msgid "Correlating second set..."
+msgstr "Correlacionando segundo conjunto..."
+
+#: modules/process/crosscor.c:972
+msgid "Corrected 2nd channel"
+msgstr "2° canal corrigido"
+
+#: modules/process/crosscor.c:996
+msgid "X difference"
+msgstr "Diferença X"
+
+#: modules/process/crosscor.c:1010
+msgid "Y difference"
+msgstr "Diferença Y"
+
+#: modules/process/crosscor.c:1023
+msgid "Absolute difference"
+msgstr "Diferença absoluta"
+
+#: modules/process/curvature.c:130
+msgid "Center value"
+msgstr "Valor central"
+
+#: modules/process/curvature.c:131
+msgid "Curvature radius 1"
+msgstr "Raio de curvatura 1"
+
+#: modules/process/curvature.c:132
+msgid "Curvature radius 2"
+msgstr "Raio de curvatura 2"
+
+#: modules/process/curvature.c:133
+msgid "Direction 1"
+msgstr "Direção 1"
+
+#: modules/process/curvature.c:134
+msgid "Direction 2"
+msgstr "Direção 2"
+
+#: modules/process/curvature.c:162
+msgid "Calculates overall curvature."
+msgstr "Calcula curvatura total."
+
+#: modules/process/curvature.c:176
+msgid "/_Level/_Curvature..."
+msgstr "/Nive_lar/_Curvatura..."
+
+#: modules/process/curvature.c:180
+msgid "Calculate overall curvature"
+msgstr "Calcular curvatura total"
+
+#: modules/process/curvature.c:210 modules/process/facet-level.c:118
+#: modules/process/semsim.c:165
+#, c-format
+msgid "%s: Lateral dimensions and value must be the same physical quantity."
+msgstr ""
+"%s: Dimensões laterais e valores devem ser as mesmas quantidades físicas."
+
+#: modules/process/curvature.c:447
+msgid "Curvature Sections"
+msgstr "Secções de curvatura"
+
+#: modules/process/curvature.c:655
+msgid "Output Type"
+msgstr "Tipo de saída"
+
+#: modules/process/curvature.c:662
+msgid "_Set selection"
+msgstr "Definir _seleção"
+
+#: modules/process/curvature.c:672
+msgid "_Plot graph"
+msgstr "_Plotar gráfico"
+
+#: modules/process/curvature.c:684 modules/process/drift.c:340
+#: modules/process/fft_profile.c:300 modules/process/fractal.c:308
+#: modules/process/grain_cross.c:260 modules/process/linematch.c:855
+#: modules/process/slope_dist.c:347 modules/tools/linestats.c:424
+#: modules/tools/profile.c:559 modules/tools/roughness.c:886
+#: modules/tools/sfunctions.c:488 modules/tools/spectro.c:391
+#: modules/volume/volume_slice.c:408
+msgid "New graph"
+msgstr "Novo gráfico"
+
+#: modules/process/curvature.c:689 modules/process/drift.c:345
+#: modules/process/fft_profile.c:306 modules/process/fractal.c:313
+#: modules/process/grain_cross.c:254 modules/process/linematch.c:860
+#: modules/process/slope_dist.c:352 modules/tools/linestats.c:418
+#: modules/tools/profile.c:563 modules/tools/roughness.c:890
+#: modules/tools/sfunctions.c:492 modules/tools/spectro.c:385
+#: modules/volume/volume_slice.c:400
+msgid "Target _graph:"
+msgstr "_Gráfico alvo:"
+
+#: modules/process/curvature.c:949
+msgid "Axes are outside the image."
+msgstr "Eixos estão fora da imagem."
+
+#: modules/process/curvature.c:1016
+msgid "Save Curvature"
+msgstr "Salvar curvatura"
+
+#: modules/process/cwt.c:66
+msgid "Two-dimensional CWT (Continuous Wavelet Transform)."
+msgstr "CWT (Continuous Wavelet Transform) bidimensional."
+
+#: modules/process/cwt.c:80
+msgid "/_Integral Transforms/2D _CWT..."
+msgstr "/Transformadas _integrais/ _CWT 2D..."
+
+#: modules/process/cwt.c:84
+msgid "Compute continuous wavelet transform"
+msgstr "Calcular transformada de ondulação (wavelet) contínua"
+
+#: modules/process/cwt.c:123
+msgid "CWT"
+msgstr "CWT"
+
+#: modules/process/cwt.c:134
+msgid "2D CWT"
+msgstr "CWT 2D"
+
+#: modules/process/cwt.c:159 modules/process/dwt.c:185
+#: modules/process/dwtanisotropy.c:212
+msgid "_Wavelet type:"
+msgstr "Tipo de ondulação (_wavelet):"
+
+#: modules/process/deposit_synth.c:170
+msgid "Generates particles using simple dynamical model"
+msgstr "Gera partículas usando modelo dinâmico simples"
+
+#: modules/process/deposit_synth.c:184
+#, fuzzy
+msgid "/S_ynthetic/_Deposition/_Particles..."
+msgstr "/Sintético/_Partículas..."
+
+#: modules/process/deposit_synth.c:188
+msgid "Generate particles using dynamical model"
+msgstr "Gera partículas usando modelo dinâmico"
+
+#: modules/process/deposit_synth.c:288 modules/process/deposit_synth.c:866
+#, c-format
+msgid ""
+"Not all the particles could be deposited (%u),\n"
+"try more revise steps."
+msgstr ""
+"Nem todas as partículas puderam ser depositadas (%u),\n"
+"tentar mais passos revisados."
+
+#: modules/process/deposit_synth.c:348
+msgid "Particle Generation"
+msgstr "Geração de partícula"
+
+#: modules/process/deposit_synth.c:431
+msgid "Particle r_adius:"
+msgstr "R_aio da partícula"
+
+#: modules/process/deposit_synth.c:443
+msgid "Distribution _width:"
+msgstr "Largura da distribuição:"
+
+#: modules/process/deposit_synth.c:462
+msgid "_Relax steps:"
+msgstr "_Relaxar passos:"
+
+#: modules/process/deposit_synth.c:660 modules/process/synth.h:577
+msgid "R_andom seed:"
+msgstr "Semente _aleatória:"
+
+#: modules/process/deposit_synth.c:666 modules/process/synth.h:583
+msgid "seed|_New"
+msgstr "semente|_Nova"
+
+#: modules/process/deposit_synth.c:677
+msgid "Randomize"
+msgstr "Embaralhar"
+
+#: modules/process/deposit_synth.c:859 modules/process/domain_synth.c:919
+msgid "Running computation..."
+msgstr "Executando cálculos..."
+
+#: modules/process/deposit_synth.c:864
+#, c-format
+msgid "%d particles were deposited"
+msgstr "%d partículas foram depositadas"
+
+#: modules/process/deposit_synth.c:1092
+msgid "Initial particle set..."
+msgstr "Conjunto inicial de partículas..."
+
+#: modules/process/deposit_synth.c:1251
+msgid "Running revise..."
+msgstr "Executando revisão..."
+
+#: modules/process/deposit_synth.c:1379
+msgid "Error: too many particles."
+msgstr "Erro: partículas demais."
+
+#: modules/process/deposit_synth.c:1381
+msgid "Error: no particles."
+msgstr "Erro: nenhuma partícula."
+
+#: modules/process/deposit_synth.c:1383
+msgid "Error: particles too large."
+msgstr "Erro: partículas muito grandes."
+
+#: modules/process/deposit_synth.c:1385
+msgid "Error: particles too small."
+msgstr "Erro: partículas muito pequenas."
+
+#: modules/process/diff_synth.c:197 modules/tools/linestats.c:173
+#: modules/volume/volume_linestat.c:151
+msgid "Variation"
+msgstr "Variação"
+
+#: modules/process/diff_synth.c:198
+msgid "Number of islands"
+msgstr "Número de ilhas"
+
+#: modules/process/diff_synth.c:214
+msgid "Generates surfaces by diffusion limited aggregation."
+msgstr "Gera superfícies por agregação limitada de difusão."
+
+#: modules/process/diff_synth.c:228
+#, fuzzy
+msgid "/S_ynthetic/_Deposition/_Diffusion..."
+msgstr "/Sintético/_Difusão..."
+
+#: modules/process/diff_synth.c:232
+msgid "Generate surface by diffusion limited aggregation"
+msgstr "Gera superfície por agregação limitada de difusão"
+
+#: modules/process/diff_synth.c:409
+msgid "Diffusion Limited Aggregation"
+msgstr "Agregação limitada de difusão"
+
+#: modules/process/diff_synth.c:500
+msgid "_Flux:"
+msgstr "_Fluxo:"
+
+#: modules/process/diff_synth.c:521
+msgid "Probabilities"
+msgstr "Probabilidades"
+
+#: modules/process/diff_synth.c:529
+msgid "_Sticking:"
+msgstr "Colando:"
+
+#: modules/process/diff_synth.c:538
+msgid "_Activation:"
+msgstr "_Ativação:"
+
+#: modules/process/diff_synth.c:547
+msgid "Passing Sch_woebel:"
+msgstr "Passando Sch_woebel:"
+
+#: modules/process/dimensions.h:439
+msgid "S_quare image"
+msgstr "Imagem _quadrada"
+
+#: modules/process/dimensions.h:473
+msgid "_Dimension units:"
+msgstr "Unidades de _dimensão:"
+
+#: modules/process/dimensions.h:488
+#, fuzzy
+msgid "Current Image"
+msgstr "Canal atual"
+
+#: modules/process/dimensions.h:492
+#, fuzzy
+msgid "_Take Dimensions from Current Image"
+msgstr "Ob_ter dimensões a partir do canal atual"
+
+#: modules/process/dimensions.h:501
+#, fuzzy
+msgid "_Replace the current image"
+msgstr "Substituir o canal atual"
+
+#: modules/process/dimensions.h:510
+#, fuzzy
+msgid "_Start from the current image"
+msgstr "Iniciar a partir do canal atual"
+
+#: modules/process/domain_synth.c:158
+msgid "Discrete state"
+msgstr "Estado discreto"
+
+#: modules/process/domain_synth.c:159
+msgid "Continuous inhibitor"
+msgstr "Inibidor contínuo"
+
+#: modules/process/domain_synth.c:165
+msgid "Generates domain images using a hybrid Ising model."
+msgstr "Gera imagens de domínio usando um modelo Ising híbrido."
+
+#: modules/process/domain_synth.c:179
+msgid "/S_ynthetic/_Domains..."
+msgstr "/Sintético/_Domínios..."
+
+#: modules/process/domain_synth.c:183
+msgid "Generate image with domains"
+msgstr "Gerar imagem com domínios"
+
+#: modules/process/domain_synth.c:352
+msgid "Domains"
+msgstr "Domínios"
+
+#: modules/process/domain_synth.c:442
+msgid "_Preview quantity:"
+msgstr "_Pré-visualizar quantidade:"
+
+#: modules/process/domain_synth.c:449
+msgid "Simulation Parameters"
+msgstr "Parâmetros de simulação"
+
+#: modules/process/domain_synth.c:455
+msgid "_Number of iterations:"
+msgstr "_Número de interações:"
+
+#: modules/process/domain_synth.c:463
+msgid "_Temperature:"
+msgstr "_Temperatura:"
+
+#: modules/process/domain_synth.c:471
+msgid "_Inhibitor strength:"
+msgstr "Força do _inibidor:"
+
+#: modules/process/domain_synth.c:479
+msgid "In_hibitor coupling:"
+msgstr "Acoplamento do inibidor:"
+
+#: modules/process/domain_synth.c:487
+msgid "_Bias:"
+msgstr "_Bias:"
+
+#: modules/process/domain_synth.c:495
+msgid "_Monte Carlo time step:"
+msgstr "Passo de tempo _Monte Carlo:"
+
+#: modules/process/domain_synth.c:504 modules/process/fft_filter_2d.c:586
+#: modules/volume/volume_slice.c:366
+msgid "Output Options"
+msgstr "Opções de saída"
+
+#: modules/process/domain_synth.c:523 modules/process/fft_filter_2d.c:591
+#: modules/process/mask_edt.c:211 modules/process/slope_dist.c:323
+#: modules/volume/volume_linestat.c:437 modules/volume/volume_slice.c:386
+msgid "Output type:"
+msgstr "Tipo de saída:"
+
+#: modules/process/drift.c:175
+msgid "Evaluates and/or correct thermal drift in fast scan axis."
+msgstr "Calcula e/ou corrige deriva térmica em escaneamento rápido de eixo."
+
+#: modules/process/drift.c:189
+msgid "/_Distortion/Compensate _Drift..."
+msgstr "/_Distorção/Compensar _deriva..."
+
+#: modules/process/drift.c:193
+msgid "Evaluate/correct thermal drift in fast scan axis"
+msgstr "Calcula/corrige deriva térmica em escaneamento rápido de eixo"
+
+#: modules/process/drift.c:240
+msgid "Compensate Drift"
+msgstr "Compensar deriva"
+
+#: modules/process/drift.c:287
+msgid "_Search range:"
+msgstr "Intervalo de busca:"
+
+#: modules/process/drift.c:287
+msgid "rows"
+msgstr "linhas"
+
+#: modules/process/drift.c:305
+msgid "Correct _data"
+msgstr "Corrigir _dados"
+
+#: modules/process/drift.c:315
+msgid "_Exclude linear skew"
+msgstr "_Excluir assimetria linear"
+
+#: modules/process/drift.c:325
+msgid "Plot drift _graph"
+msgstr "Plotar _gráfico de deriva"
+
+#: modules/process/drift.c:355 modules/process/fit-shape.c:705
+#: modules/process/neural.c:552 modules/process/polydistort.c:278
+msgid "Preview:"
+msgstr "Pré-visualizar:"
+
+#: modules/process/drift.c:365
+msgid "Drift _lines"
+msgstr "_Linhas de deriva"
+
+#: modules/process/drift.c:373 modules/process/facet_analysis.c:390
+#: modules/process/grain_edge.c:272 modules/process/grain_filter.c:356
+#: modules/process/grain_mark.c:341 modules/process/grain_wshed.c:271
+#: modules/process/mark_disconn.c:298 modules/process/scars.c:405
+#: modules/process/wpour_mark.c:369
+msgid "_Mask color:"
+msgstr "Cor da _máscara:"
+
+#: modules/process/drift.c:570
+msgid "Drift-corrected"
+msgstr "Com correção de deriva"
+
+#: modules/process/drift.c:614
+msgid "Drift"
+msgstr "Deriva"
+
+#: modules/process/drift.c:615 modules/xyz/xyz_drift.c:392
+#: modules/xyz/xyz_drift.c:411 modules/xyz/xyz_drift.c:430
+msgid "drift"
+msgstr "deriva"
+
+#: modules/process/drift.c:621 modules/xyz/xyz_drift.c:402
+msgid "x-axis drift"
+msgstr "Deriva do eixo x"
+
+#: modules/process/dwt.c:73
+msgid "Two-dimensional DWT (Discrete Wavelet Transform)."
+msgstr "DWT (Discrete Wavelet Transform) bidimensional."
+
+#: modules/process/dwt.c:87
+msgid "/_Integral Transforms/2D _DWT..."
+msgstr "/Transformadas _integrais/_DWT 2D..."
+
+#: modules/process/dwt.c:91
+msgid "Compute Discrete Wavelet Transform"
+msgstr "Calcular transformada de ondulação (wavelet) discreta"
+
+#: modules/process/dwt.c:120 modules/process/dwtanisotropy.c:132
+#, c-format
+msgid "%s: Data must be square."
+msgstr "%s: Dados devem ser quadrados."
+
+#: modules/process/dwt.c:147
+msgid "DWT"
+msgstr "DWT"
+
+#: modules/process/dwt.c:165
+msgid "2D DWT"
+msgstr "DWT 2D"
+
+#: modules/process/dwt.c:191
+#, c-format
+msgid ""
+"Size %d is not a power of 2,\n"
+"data will be resampled to %d×%d for DWT."
+msgstr ""
+"O tamanho %d não é uma potência de 2,\n"
+"dados serão re-amostrados para %d×%d para DWT."
+
+#: modules/process/dwtanisotropy.c:80
+msgid "2D DWT anisotropy detection based on X/Y components ratio."
+msgstr "Detecção de anisotropia DWT 2D com base em razão de componentes X/Y."
+
+#: modules/process/dwtanisotropy.c:94
+msgid "/_Integral Transforms/DWT _Anisotropy..."
+msgstr "/Transformadas _integrais/_Anisotropia DWT..."
+
+#: modules/process/dwtanisotropy.c:98
+msgid "DWT anisotropy detection"
+msgstr "Detecção de anisotropia DWT"
+
+#: modules/process/dwtanisotropy.c:132
+msgid "DWT Anisotropy"
+msgstr "Anisotropia DWT"
+
+#: modules/process/dwtanisotropy.c:183
+msgid "2D DWT Anisotropy"
+msgstr "Anisotropia DWT 2D"
+
+#: modules/process/dwtanisotropy.c:218
+msgid "X/Y ratio threshold:"
+msgstr "Limiar da razão X/Y:"
+
+#: modules/process/dwtanisotropy.c:226
+msgid "Low level exclude limit:"
+msgstr "Limite de exclusão de baixo nível:"
+
+#: modules/process/edge.c:143
+msgid ""
+"Several edge detection methods (Laplacian of Gaussian, Canny, and some "
+"experimental), creates presentation."
+msgstr ""
+"Vários métodos de detecção de borda (Laplaciano de Gaussiana, Canny, e algum "
+"experimental), cria apresentação."
+
+#: modules/process/edge.c:158
+msgid "/_Presentation/_Edge Detection/_Laplacian of Gaussian"
+msgstr "/A_presentação/Detecção de borda/_Laplaciano de Gaussiana"
+
+#: modules/process/edge.c:162
+msgid "Laplacian of Gaussian step detection presentation"
+msgstr "Apresentação de detecção de etapa Laplaciano de Gaussiana"
+
+#: modules/process/edge.c:166
+msgid "/_Presentation/_Edge Detection/_Canny"
+msgstr "/A_presentação/Detecção de borda/_Canny"
+
+#: modules/process/edge.c:170
+msgid "Canny edge detection presentation"
+msgstr "Apresentação de detecção de detecção de borda Canny"
+
+#: modules/process/edge.c:173
+msgid "/_Presentation/_Edge Detection/_RMS"
+msgstr "/A_presentação/Detecção de borda/_RMS"
+
+#: modules/process/edge.c:177
+msgid "Local RMS value based step detection presentation"
+msgstr "Apresentação de detecção de etapa baseada em valor RMS local"
+
+#: modules/process/edge.c:181
+msgid "/_Presentation/_Edge Detection/RMS _Edge"
+msgstr "/A_presentação/Detecção de borda/Borda RMS"
+
+#: modules/process/edge.c:185
+msgid "Local RMS value based step detection with postprocessing"
+msgstr "Detecção de etapa baseada em valor RMS local com pós-processamento"
+
+#: modules/process/edge.c:189
+msgid "/_Presentation/_Edge Detection/Local _Nonlinearity"
+msgstr "/A_presentação/Detecção de borda/_Não-linearidade local"
+
+#: modules/process/edge.c:193
+msgid "Local nonlinearity based edge detection presentation"
+msgstr "Apresentação de detecção de etapa baseada em não-linearidade local"
+
+#: modules/process/edge.c:197
+msgid "/_Presentation/_Edge Detection/_Hough Lines"
+msgstr "/A_presentação/Detecção de borda/Linhas jarretadas"
+
+#: modules/process/edge.c:202
+msgid "Hough lines presentation"
+msgstr "Apresentação de linhas jarretadas"
+
+#: modules/process/edge.c:205
+msgid "/_Presentation/_Edge Detection/_Harris Corner"
+msgstr "/A_presentação/Detecção de borda/Canto _Harris"
+
+#: modules/process/edge.c:210
+msgid "Harris corner presentation"
+msgstr "Apresentação de canto Harris"
+
+#: modules/process/edge.c:213
+msgid "/_Presentation/_Edge Detection/_Inclination"
+msgstr "/A_presentação/Detecção de borda/_Inclinação"
+
+#: modules/process/edge.c:217
+msgid "Local inclination visualization presentation"
+msgstr "Apresentação de visualização de inclinação local"
+
+#: modules/process/edge.c:221
+msgid "/_Presentation/_Edge Detection/_Step"
+msgstr "/A_presentação/Detecção de borda/Pa_sso"
+
+#: modules/process/edge.c:225
+msgid "Fine step detection presentation"
+msgstr "Apresentação de detecção de passo preciso"
+
+#: modules/process/edge.c:228
+msgid "/_Presentation/_Edge Detection/_Sobel"
+msgstr "/A_presentação/Detecção de borda/_Sobel"
+
+#: modules/process/edge.c:232
+msgid "Sobel edge presentation"
+msgstr "Apresentação de borda Sobel"
+
+#: modules/process/edge.c:235
+msgid "/_Presentation/_Edge Detection/_Prewitt"
+msgstr "/A_presentação/Detecção de borda/_Prewitt"
+
+#: modules/process/edge.c:239
+msgid "Prewitt edge presentation"
+msgstr "Apresentação de borda Prewitt"
+
+#: modules/process/edge.c:242
+msgid "/_Presentation/_Edge Detection/_Zero Crossing..."
+msgstr "/A_presentação/Detecção de borda/Cruzamento _zero..."
+
+#: modules/process/edge.c:246
+msgid "Zero crossing step detection presentation"
+msgstr "Apresentação de detecção de passo de cruzamento zero"
+
+#: modules/process/edge.c:249
+msgid "/_Integral Transforms/Local Slope"
+msgstr "/Transformadas _integrais/Inclinação local"
+
+#: modules/process/edge.c:253
+msgid "First derivative slope transformation"
+msgstr "Transformação de inclinação de primeira derivada"
+
+#: modules/process/edge.c:584
+msgid "Slope map"
+msgstr "Mapa de inclinação"
+
+#: modules/process/edge.c:632
+msgid "Zero Crossing Step Detection"
+msgstr "Detecção de passo de cruzamento zero"
+
+#: modules/process/edge.c:672
+msgid "_Gaussian FWHM:"
+msgstr "FWHM (largura à meia altura) _gaussiana:"
+
+#: modules/process/edge.c:681 modules/process/mark_disconn.c:272
+msgid "_Threshold:"
+msgstr "Limiar:"
+
+#: modules/process/edge.c:681
+msgid "NRMS"
+msgstr "NRMS"
+
+#: modules/process/edge.c:688
+msgid "verb|Display"
+msgstr "Exibir"
+
+#: modules/process/edge.c:697 modules/process/fft_filter_2d.c:372
+msgid "Original _image"
+msgstr "_Imagem original"
+
+#: modules/process/edge.c:698
+msgid "_LoG convolved"
+msgstr "Convoluído _LoG"
+
+#: modules/process/edge.c:699
+msgid "Detected st_ep"
+msgstr "Passo detectado"
+
+#: modules/process/entropy.c:112
+msgid "Visualizes entropy calculation for value and slope distribution."
+msgstr "Visualiza cálculo de entropia para distribuição de valor e inclinação."
+
+#: modules/process/entropy.c:126
+msgid "/_Statistics/_Entropy..."
+msgstr "/E_statísticas/_Entropia..."
+
+#: modules/process/entropy.c:130
+msgid "Calculate entropy of value and slope distributions"
+msgstr "Calcular entropia de distribuição de valor e inclinação"
+
+#: modules/process/entropy.c:175
+msgid "Entropy"
+msgstr "Entropia"
+
+#: modules/process/entropy.c:203
+msgid "Value distribution"
+msgstr "Distribuição de valores"
+
+#: modules/process/entropy.c:205
+msgid "Slope derivative distribution"
+msgstr "Distribuição de derivadas de inclinação"
+
+#: modules/process/entropy.c:207
+msgid "Slope angle distribution"
+msgstr "Distribuição de ângulos de inclinação"
+
+#: modules/process/entropy.c:250
+msgid "_Zoom graph around estimate"
+msgstr "Aproximar _zoom em torno da estimativa"
+
+#: modules/process/entropy.c:259 modules/tools/stats.c:215
+msgid "Entropy:"
+msgstr "Entropia:"
+
+#: modules/process/entropy.c:270 modules/tools/stats.c:216
+msgid "Entropy deficit:"
+msgstr "Déficit de entropia:"
+
+#: modules/process/entropy.c:568
+msgid "Entropy at scales"
+msgstr "Entropia em escalas"
+
+#: modules/process/entropy.c:587
+msgid "Best estimate"
+msgstr "Melhor estimativa"
+
+#: modules/process/extend.c:107
+msgid "Extends image by adding borders."
+msgstr "Estender imagem adicionando bordas."
+
+#: modules/process/extend.c:121
+msgid "/_Basic Operations/E_xtend..."
+msgstr "/Operações _básicas/Extender..."
+
+#: modules/process/extend.c:125
+msgid "Extend by adding borders"
+msgstr "Estender adicionando bordas"
+
+#: modules/process/extend.c:178
+msgid "Extended"
+msgstr "Estendido"
+
+#: modules/process/extend.c:191
+msgid "Extend"
+msgstr "Estender"
+
+#: modules/process/extend.c:214
+msgid "Borders"
+msgstr "Bordas"
+
+#: modules/process/extend.c:220
+msgid "_Up:"
+msgstr "Cima:"
+
+#: modules/process/extend.c:227
+msgid "_Down:"
+msgstr "Baixo:"
+
+#: modules/process/extend.c:234
+msgid "_Left:"
+msgstr "Esquerda:"
+
+#: modules/process/extend.c:241
+msgid "_Right:"
+msgstr "Direita:"
+
+#: modules/process/extend.c:248
+msgid "Extend _symetrically"
+msgstr "Estender _simetricamente"
+
+#: modules/process/extend.c:268 modules/process/polydistort.c:259
+#: modules/xyz/xyz_raster.c:627
+msgid "exterior|Border"
+msgstr "exterior|Borda"
+
+#: modules/process/extend.c:270 modules/process/polydistort.c:261
+#: modules/xyz/xyz_raster.c:629
+msgid "exterior|Mirror"
+msgstr "exterior|Espelho"
+
+#: modules/process/extend.c:272 modules/process/polydistort.c:263
+#: modules/xyz/xyz_raster.c:631
+msgid "exterior|Periodic"
+msgstr "exterior|Periódico"
+
+#: modules/process/extend.c:275 modules/process/polydistort.c:266
+#: modules/xyz/xyz_raster.c:619
+msgid "_Exterior type:"
+msgstr "Tipo de _exterior:"
+
+#: modules/process/extend.c:283 modules/tools/crop.c:202
+msgid "Keep lateral offsets"
+msgstr "Manter afastamentos laterais"
+
+#: modules/process/extract_path.c:87
+msgid "Extracts coordinates and tangents along a path selection."
+msgstr "Extrai coordenadas e tangentes ao longo do caminho selecionado."
+
+#: modules/process/extract_path.c:101
+msgid "/_Distortion/Extract _Path Selection..."
+msgstr "/_Distorção/Extrair do caminho selecionado..."
+
+#: modules/process/extract_path.c:105
+msgid "Extract path selection data"
+msgstr "Extrair dados do caminho selecionado"
+
+#: modules/process/extract_path.c:159
+msgid "Extract Path Selection"
+msgstr "Extrair do caminho selecionado"
+
+#: modules/process/extract_path.c:176
+msgid "Number of path points:"
+msgstr "Número de pontos do caminho:"
+
+#: modules/process/extract_path.c:183
+msgid "There is no path selection."
+msgstr "Não existe caminho selecionado."
+
+#: modules/process/extract_path.c:189 modules/volume/volume_extract.c:383
+msgid "X position"
+msgstr "Posição X"
+
+#: modules/process/extract_path.c:193 modules/volume/volume_extract.c:389
+msgid "Y position"
+msgstr "Posição Y"
+
+#: modules/process/extract_path.c:197
+msgid "X tangent"
+msgstr "Tangente X"
+
+#: modules/process/extract_path.c:201
+msgid "Y tangent"
+msgstr "Tangente Y"
+
+#: modules/process/extract_path.c:392 modules/process/extract_path.c:404
+#: modules/process/pat_synth.c:1433 modules/tools/distance.c:146
+msgid "Distance"
+msgstr "Distância"
+
+#: modules/process/extract_path.c:403
+msgid "Tangent"
+msgstr "Tangente"
+
+#: modules/process/facet-level.c:65
+msgid ""
+"Automatic facet-orientation based leveling. Levels data to make facets point "
+"up."
+msgstr ""
+"Nivelamento automático baseado em orientação de faceta. Nivela dados para "
+"fazer facetas apontarem para cima."
+
+#: modules/process/facet-level.c:80
+msgid "/_Level/_Facet Level"
+msgstr "/Nive_lar/Nivelar _faceta"
+
+#: modules/process/facet-level.c:84
+msgid "Level data to make facets point upward"
+msgstr "Nivelar dados para fazer facetas apontarem para cima"
+
+#: modules/process/facet-level.c:120 modules/process/facet-level.c:131
+msgid "Facet Level"
+msgstr "Nivelar faceta"
+
+#: modules/process/facet-level.c:144 modules/process/flatten_base.c:251
+msgid "Facet-leveling..."
+msgstr "Nivelamento de faceta..."
+
+#: modules/process/facet_analysis.c:164
+msgid "Visualizes, marks and measures facet orientation."
+msgstr "Visualiza, marca e mede orientação de faceta."
+
+#: modules/process/facet_analysis.c:178
+msgid "/_Statistics/Facet _Analysis..."
+msgstr "/E_statísticas/_Análise de faceta..."
+
+#: modules/process/facet_analysis.c:182
+msgid "Mark areas by 2D slope"
+msgstr "Marcar áreas por inclinação 2D"
+
+#: modules/process/facet_analysis.c:270
+msgid "Mark Facets"
+msgstr "Marca de facetas"
+
+#: modules/process/facet_analysis.c:273
+msgid "verb|_Mark"
+msgstr "_Marcar"
+
+#. TRANSLATORS: The direction or line orthogonal to something.
+#: modules/process/facet_analysis.c:329
+msgid "Normal"
+msgstr "Normal"
+
+#: modules/process/facet_analysis.c:337
+msgid "_Find Maximum"
+msgstr "Encontrar máximo"
+
+#: modules/process/facet_analysis.c:345
+msgid "Mean Normal"
+msgstr "Média normal"
+
+#: modules/process/facet_analysis.c:362
+msgid "Facet plane size:"
+msgstr "Tamanho do plano da faceta:"
+
+#: modules/process/facet_analysis.c:370
+msgid "_Tolerance:"
+msgstr "_Tolerância:"
+
+#: modules/process/facet_analysis.c:398
+msgid ""
+"Warning: Lateral and value units differ. Angles are not physically "
+"meaningful."
+msgstr ""
+"Alerta: Lateral e unidades de valor diferem. Ângulos não tem significado "
+"físico."
+
+#: modules/process/fbm_synth.c:162
+msgid "Generates random surfaces similar to fractional Brownian motion."
+msgstr ""
+"Gera superfícies aleatórias similares a movimento browniano fracionário."
+
+#: modules/process/fbm_synth.c:176
+msgid "/S_ynthetic/_Brownian..."
+msgstr "/Sintético/_Browniano..."
+
+#: modules/process/fbm_synth.c:180
+msgid "Generate fractional Brownian motion-like surface"
+msgstr "Gera superfície parecida com movimento browniano fracionário"
+
+#: modules/process/fbm_synth.c:301
+msgid "Fractional Brownian Motion"
+msgstr "Movimento browniano fracionário"
+
+#: modules/process/fbm_synth.c:375
+msgid "_Hurst exponent:"
+msgstr "Expoente de _Hurst:"
+
+#: modules/process/fbm_synth.c:383
+msgid "_Stationarity scale:"
+msgstr "Escala estacionária:"
+
+#: modules/process/fbm_synth.c:390 modules/process/lno_synth.c:507
+#: modules/process/noise_synth.c:407
+msgid "_Distribution:"
+msgstr "_Distribuição:"
+
+#: modules/process/fbm_synth.c:396 modules/process/fft_synth.c:526
+msgid "Po_wer:"
+msgstr "Potência:"
+
+#: modules/process/fbm_synth.c:407 modules/process/fft_synth.c:414
+#: modules/process/lno_synth.c:531 modules/process/noise_synth.c:431
+msgid "_RMS:"
+msgstr "_RMS:"
+
+#: modules/process/fbm_synth.c:476 modules/process/lno_synth.c:249
+#: modules/process/noise_synth.c:176
+msgid "distribution|Exponential"
+msgstr "distribuição|Exponencial"
+
+#: modules/process/fbm_synth.c:477
+msgid "distribution|Power"
+msgstr "distribuição|Potência"
+
+#: modules/process/fft.c:125
+msgid "Two-dimensional FFT (Fast Fourier Transform)."
+msgstr "FFT (Fast Fourier Transform) bidimensional."
+
+#: modules/process/fft.c:139
+msgid "/_Integral Transforms/2D _FFT..."
+msgstr "/Transformadas _integrais/_FFT 2D..."
+
+#: modules/process/fft.c:143
+msgid "Compute Fast Fourier Transform"
+msgstr "Calcula transformada de Fourier rápida"
+
+#: modules/process/fft.c:231
+msgid "FFT Real"
+msgstr "FFT real"
+
+#: modules/process/fft.c:235
+msgid "FFT Imaginary"
+msgstr "FFT imaginária"
+
+#: modules/process/fft.c:240
+msgid "FFT Modulus"
+msgstr "FFT módulo"
+
+#: modules/process/fft.c:246
+msgid "FFT Phase"
+msgstr "FFT fase"
+
+#: modules/process/fft.c:322
+msgid "Real + Imaginary"
+msgstr "Real + imaginária"
+
+#: modules/process/fft.c:323
+msgid "Modulus + Phase"
+msgstr "Módulo + fase"
+
+#: modules/process/fft.c:324
+msgid "Real"
+msgstr "Real"
+
+#: modules/process/fft.c:325
+msgid "Imaginary"
+msgstr "Imaginária"
+
+#: modules/process/fft.c:326
+msgid "Modulus"
+msgstr "Módulo"
+
+#: modules/process/fft.c:327 modules/process/wave_synth.c:618
+msgid "Phase"
+msgstr "Fase"
+
+#: modules/process/fft.c:335
+msgid "2D FFT"
+msgstr "FFT 2D"
+
+#: modules/process/fft.c:352
+msgid "Ra_w transform"
+msgstr "Transformada ra_w"
+
+#: modules/process/fft.c:366
+msgid "I_maginary part:"
+msgstr "Parte i_maginária:"
+
+#: modules/process/fft.c:380
+msgid "_Inverse transform"
+msgstr "Transformada _inversa"
+
+#: modules/process/fft.c:409
+msgid "Subtract mean _value beforehand"
+msgstr "Subtrair _valor médio antecipadamente"
+
+#: modules/process/fft.c:420
+msgid "_Preserve RMS"
+msgstr "Preservar RMS"
+
+#: modules/process/fft_filter_1d.c:118
+msgid "FFT filtering"
+msgstr "Filtro FFT"
+
+#: modules/process/fft_filter_1d.c:132
+msgid "/_Correct Data/1D _FFT Filtering..."
+msgstr "/_Corrigir dados/_Filtro FFT 1D..."
+
+#: modules/process/fft_filter_1d.c:136
+msgid "1D FFT Filtering"
+msgstr "Filtro FFT 1D"
+
+#: modules/process/fft_filter_1d.c:166 modules/process/wpour_mark.c:391
+msgid "Marked"
+msgstr "Marcado"
+
+#: modules/process/fft_filter_1d.c:167
+msgid "Unmarked"
+msgstr "Não-marcado"
+
+#: modules/process/fft_filter_1d.c:170
+msgid "Null"
+msgstr "Nulo"
+
+#: modules/process/fft_filter_1d.c:171
+msgid "Suppress"
+msgstr "Suprimir"
+
+#: modules/process/fft_filter_1d.c:181
+msgid "1D FFT filter"
+msgstr "Filtro FFT 1D"
+
+#: modules/process/fft_filter_1d.c:271 modules/process/linematch.c:828
+msgid "_Direction:"
+msgstr "_Direção:"
+
+#: modules/process/fft_filter_1d.c:279
+msgid "_Suppress type:"
+msgstr "Tipo de _supressão:"
+
+#: modules/process/fft_filter_1d.c:287
+msgid "_Filter type:"
+msgstr "Tipo de _filtro:"
+
+#: modules/process/fft_filter_1d.c:515
+msgid "1D FFT Filtered Data"
+msgstr "Dados FFT 1D filtrados"
+
+#: modules/process/fft_filter_2d.c:158 modules/process/fft_filter_2d.c:416
+msgid "2D FFT Filtering"
+msgstr "Filtro FFT 2D"
+
+#: modules/process/fft_filter_2d.c:172
+msgid "/_Correct Data/_2D FFT Filtering..."
+msgstr "/_Corrigir dados/Filtro FFT _2D..."
+
+#: modules/process/fft_filter_2d.c:176
+msgid "Two-dimensional FFT filtering"
+msgstr "Filtro FFT bidimensional"
+
+#: modules/process/fft_filter_2d.c:290
+msgid "Filtered Data"
+msgstr "Dados filtrados"
+
+#: modules/process/fft_filter_2d.c:305 modules/process/fit-shape.c:604
+#: modules/process/fit-shape.c:653 modules/process/fit-shape.c:668
+#: modules/process/fit-shape.c:672 modules/process/neural.c:564
+#: modules/process/psf.c:232
+msgid "Difference"
+msgstr "Diferença"
+
+#: modules/process/fft_filter_2d.c:318
+msgid "Filtered FFT"
+msgstr "Filtrado por FFT"
+
+#: modules/process/fft_filter_2d.c:342
+msgid "Add an ellipse to the FFT mask"
+msgstr "Adicionar uma elipse à máscara FFT"
+
+#: modules/process/fft_filter_2d.c:347
+msgid "Add a rectangle to the FFT mask"
+msgstr "Adicionar um retângulo à máscara FFT"
+
+#: modules/process/fft_filter_2d.c:352
+msgid "Subtract an ellipse from the FFT mask"
+msgstr "Subtrair uma elipse da máscara FFT"
+
+#: modules/process/fft_filter_2d.c:357
+msgid "Subtract a rectangle from the FFT mask"
+msgstr "Subtrair um retângulo da máscara FFT"
+
+#: modules/process/fft_filter_2d.c:368
+msgid "_FFT mask editor"
+msgstr "Editor de máscara _FFT"
+
+#: modules/process/fft_filter_2d.c:376
+msgid "Fi_ltered image"
+msgstr "Imagem filtrada"
+
+#: modules/process/fft_filter_2d.c:380
+msgid "Image _difference"
+msgstr "_Diferença na imagem"
+
+#: modules/process/fft_filter_2d.c:391
+msgid "Filtered i_mage"
+msgstr "I_magem filtrada"
+
+#: modules/process/fft_filter_2d.c:395
+msgid "Ima_ge difference"
+msgstr "Diferença na ima_gem"
+
+#: modules/process/fft_filter_2d.c:399
+msgid "Filtered FFT mo_dulus"
+msgstr "Mó_dulo FFT filtrado"
+
+#: modules/process/fft_filter_2d.c:455
+msgid "Filter Mask"
+msgstr "Filtro de máscara"
+
+#: modules/process/fft_filter_2d.c:490
+msgid "_Undo"
+msgstr "_Desfazer"
+
+#: modules/process/fft_filter_2d.c:507 modules/tools/maskedit.c:562
+msgid "_Fill"
+msgstr "Preencher"
+
+#: modules/process/fft_filter_2d.c:517
+msgid "_Snap to origin"
+msgstr "Rebater para origem"
+
+#: modules/process/fft_filter_2d.c:565 modules/process/measure_lattice.c:329
+msgid "Zoom:"
+msgstr "Zoom:"
+
+#: modules/process/fft_filter_2d.c:1241
+msgid "Draw ellipses on the mask"
+msgstr "Desenhar elipses na máscara"
+
+#: modules/process/fft_filter_2d.c:1243
+msgid "Draw rectangles on the mask"
+msgstr "Desenhar retângulos na máscara"
+
+#: modules/process/fft_filter_2d.c:1245
+msgid "Undraw ellipses on the mask"
+msgstr "Remover elipses desenhadas na máscara"
+
+#: modules/process/fft_filter_2d.c:1247
+msgid "Undraw rectangles on the mask"
+msgstr "Remover retângulos desenhados na máscara"
+
+#: modules/process/fft_filter_2d.c:1249
+msgid "Undo the last change to the filter mask"
+msgstr "Desfazer a última modificação na máscara de filtro"
+
+#: modules/process/fft_filter_2d.c:1251
+msgid "Clear the entire filter mask"
+msgstr "Limpar a máscara de filtro inteira"
+
+#: modules/process/fft_filter_2d.c:1253
+msgid "Fill the entire filter mask"
+msgstr "Preencher a máscara de filtro inteira"
+
+#: modules/process/fft_filter_2d.c:1255
+msgid "Force shapes to center around the origin"
+msgstr "Forçar formas a centralizar em torno da origem"
+
+#: modules/process/fft_profile.c:124
+msgid ""
+"Reads radial sections of two-dimensional power spectrum density function."
+msgstr ""
+"Lê secções radiais de função de densidade de espectro de potência "
+"bidimensional (PSDF)."
+
+#: modules/process/fft_profile.c:139
+msgid "/_Statistics/_PSDF Section..."
+msgstr "/E_statísticas/Secção _PSDF..."
+
+#: modules/process/fft_profile.c:143
+msgid "Read radial PSDF sections"
+msgstr "Lê secções radiais de PSDF"
+
+#: modules/process/fft_profile.c:189
+msgid "Radial PSDF Section"
+msgstr "Secção radial de PSDF"
+
+#: modules/process/fft_profile.c:236
+msgid "PSDF Section"
+msgstr "Secção de PSDF"
+
+#: modules/process/fft_profile.c:266 modules/process/grain_dist.c:338
+#: modules/tools/profile.c:514 modules/tools/sfunctions.c:454
+#, fuzzy
+msgid "_Fixed resolution:"
+msgstr "Resolução _X:"
+
+#: modules/process/fft_profile.c:278
+msgid "_Separate curves"
+msgstr "_Separar curvas"
+
+#: modules/process/fft_profile.c:483
+#, c-format
+msgid "PSDF %.0f°"
+msgstr "PSDF %.0f°"
+
+#: modules/process/fft_synth.c:179
+msgid "Generates random surfaces using spectral synthesis."
+msgstr "Gera superfícies aleatórias usando síntese espectral."
+
+#: modules/process/fft_synth.c:193
+msgid "/S_ynthetic/_Spectral..."
+msgstr "/Sintético/E_spectral..."
+
+#: modules/process/fft_synth.c:197
+msgid "Generate surface using spectral synthesis"
+msgstr "Gera superfície usando síntese espectral"
+
+#: modules/process/fft_synth.c:339
+msgid "Spectral Synthesis"
+msgstr "Síntese espectral"
+
+#: modules/process/fft_synth.c:430
+msgid "M_inimum frequency:"
+msgstr "Frequência mín_ima:"
+
+#: modules/process/fft_synth.c:430 modules/process/fft_synth.c:450
+msgid "px<sup>-1</sup>"
+msgstr ""
+
+#: modules/process/fft_synth.c:450
+msgid "Ma_ximum frequency:"
+msgstr "Frequência má_xima:"
+
+#: modules/process/fft_synth.c:469
+msgid "Enable _Gaussian multiplier"
+msgstr "Habilitar multiplicador _gaussiano"
+
+#: modules/process/fft_synth.c:482 modules/process/fft_synth.c:505
+msgid "_Autocorrelation length:"
+msgstr "Comprimento de _autocorrelação:"
+
+#: modules/process/fft_synth.c:492
+msgid "Enable _Lorentz multiplier"
+msgstr "Habilitar multiplicador _lorentziano"
+
+#: modules/process/fft_synth.c:515
+msgid "Enable _power multiplier"
+msgstr "Habilitar multiplicador de _potência"
+
+#: modules/process/fibre_synth.c:256
+msgid "Semi-circle"
+msgstr ""
+
+#: modules/process/fibre_synth.c:257
+#, fuzzy
+msgid "Triangle"
+msgstr "Triângulo para cima"
+
+#: modules/process/fibre_synth.c:258
+#, fuzzy
+msgid "Rectangle"
+msgstr "Retângulos"
+
+#: modules/process/fibre_synth.c:260
+msgid "Quadratic spline"
+msgstr ""
+
+#: modules/process/fibre_synth.c:266
+#, fuzzy
+msgid "Generates surfaces composed from randomly placed fibers."
+msgstr "Gerar superfície de objetos posicionados aleatoriamente"
+
+#: modules/process/fibre_synth.c:280
+#, fuzzy
+msgid "/S_ynthetic/_Deposition/_Fibers..."
+msgstr "/Sintético/_Objetos..."
+
+#: modules/process/fibre_synth.c:284
+#, fuzzy
+msgid "Generate surface of randomly placed fibers"
+msgstr "Gerar superfície de objetos posicionados aleatoriamente"
+
+#: modules/process/fibre_synth.c:420
+#, fuzzy
+msgid "Random Fibers"
+msgstr "Aleatório linear"
+
+#: modules/process/fibre_synth.c:494 modules/process/obj_synth.c:510
+msgid "_Shape:"
+msgstr "Forma:"
+
+#: modules/process/fibre_synth.c:513 modules/process/obj_synth.c:529
+msgid "obj."
+msgstr "obj."
+
+#: modules/process/fibre_synth.c:553
+#, fuzzy
+msgid "Scales _with width"
+msgstr "Dimensiona escala com tamanho"
+
+#: modules/process/fibre_synth.c:591 modules/process/synth.h:485
+msgid "Deformation"
+msgstr "Deformação"
+
+#: modules/process/fibre_synth.c:600 modules/process/lno_synth.c:852
+#: modules/process/lno_synth.c:1222 modules/process/mask_noisify.c:177
+msgid "Densi_ty:"
+msgstr "Densidade:"
+
+#: modules/process/fibre_synth.c:607
+#, fuzzy
+msgid "_Lateral:"
+msgstr "Lateral"
+
+#: modules/process/fibre_synth.c:614
+#, fuzzy
+msgid "Le_ngthwise:"
+msgstr "_Comprimento:"
+
+#: modules/process/fibre_synth.c:819
+msgid "Along fiber:"
+msgstr ""
+
+#: modules/process/fibre_synth.c:1180
+#, fuzzy
+msgid "Generating fibers..."
+msgstr "Lendo arquivos..."
+
+#: modules/process/fit-shape.c:264
+msgid "Fits predefined geometrical shapes to data."
+msgstr "Ajustar formas geométricas pré-definidas aos dados."
+
+#: modules/process/fit-shape.c:278
+msgid "/_Level/_Fit Shape..."
+msgstr "/Nive_lar/Ajustar forma..."
+
+#: modules/process/fit-shape.c:282 modules/process/fit-shape.c:289
+msgid "Fit geometrical shapes"
+msgstr "Ajustar formas geométricas"
+
+#: modules/process/fit-shape.c:285
+msgid "/_Fit Shape..."
+msgstr "/Ajustar forma..."
+
+#: modules/process/fit-shape.c:389
+msgid "Fit Shape"
+msgstr "Ajustar forma"
+
+#: modules/process/fit-shape.c:396
+msgid "verb|_Quick Fit"
+msgstr "Ajuste rápido"
+
+#: modules/process/fit-shape.c:474 modules/process/fit-shape.c:2141
+msgid "Derived Quantities"
+msgstr "Quantidades derivadas"
+
+#: modules/process/fit-shape.c:479 modules/process/fit-shape.c:2111
+msgid "Mean square difference:"
+msgstr "Diferença quadrática média:"
+
+#: modules/process/fit-shape.c:590 modules/process/fit-shape.c:636
+#: modules/process/fit-shape.c:667 modules/process/fit-shape.c:671
+msgid "Fitted shape"
+msgstr "Forma ajustada"
+
+#: modules/process/fit-shape.c:673 modules/process/mark_disconn.c:189
+#: modules/process/scars.c:299
+msgid "Both"
+msgstr "Ambos"
+
+#: modules/process/fit-shape.c:690 modules/process/psf-fit.c:308
+msgid "_Function type:"
+msgstr "Tipo de _função:"
+
+#: modules/process/fit-shape.c:720
+msgid "Show differences with _adapted color map"
+msgstr "Mostrar diferenças com mapa de cores _adaptado"
+
+#: modules/process/fit-shape.c:732
+msgid "Full fit is _geometric"
+msgstr ""
+
+#: modules/process/fit-shape.c:769
+msgid "Calculate differences for e_xcluded pixels"
+msgstr "Calcular diferenças para pixeis e_xcluídos"
+
+#: modules/process/fit-shape.c:816
+msgid "_Recalculate Image"
+msgstr "_Recalcular imagem"
+
+#: modules/process/fit-shape.c:823
+msgid "Revert to _Previous Values"
+msgstr "Reverter para valores anteriores"
+
+#: modules/process/fit-shape.c:1864
+msgid "Parameter estimation failed"
+msgstr "Estimativa do parâmetro falhou"
+
+#: modules/process/fit-shape.c:1867
+msgid "Fit failed"
+msgstr "O ajuste falhou"
+
+#: modules/process/fit-shape.c:1869
+msgid "Fit was interruped"
+msgstr "O ajuste foi interrompido"
+
+#: modules/process/fit-shape.c:2097
+msgid "(fixed)"
+msgstr "(fixo)"
+
+#: modules/process/flatten_base.c:44
+msgid "Levels the flat base of a surface with positive features."
+msgstr ""
+"Nivela a base achatada de uma superfície com características positivas."
+
+#: modules/process/flatten_base.c:58
+msgid "/_Level/Flatten _Base"
+msgstr "/Nive_lar/_Base achatada"
+
+#: modules/process/flatten_base.c:62
+msgid "Flatten base of surface with positive features"
+msgstr "Base achatada de uma superfície com características positivas."
+
+#: modules/process/flatten_base.c:276
+msgid "Polynomial leveling..."
+msgstr "Nivelamento de polinomial..."
+
+#: modules/process/fraccor.c:39
+msgid "Removes data under mask using fractal interpolation."
+msgstr "Remover dados sob máscara usando interpolação fractal."
+
+#: modules/process/fraccor.c:53
+msgid "/_Correct Data/_Fractal Correction"
+msgstr "/_Corrigir dados/Correção _fractal"
+
+#: modules/process/fraccor.c:57
+msgid "Interpolate data under mask with fractal interpolation"
+msgstr "Interpola dados sob máscara com interpolação fractal"
+
+#: modules/process/fractal.c:130
+msgid "Partitioning"
+msgstr "Particionamento"
+
+#: modules/process/fractal.c:131
+msgid "Cube counting"
+msgstr "Contagem de cubo"
+
+#: modules/process/fractal.c:132
+msgid "Triangulation"
+msgstr "Triangulação"
+
+#: modules/process/fractal.c:133
+msgid "Power spectrum"
+msgstr "Espectro de potência"
+
+#: modules/process/fractal.c:169
+msgid ""
+"Calculates fractal dimension using several methods (partitioning, box "
+"counting, triangulation, power spectrum)."
+msgstr ""
+"Calcula dimensão fractal usando diferentes métodos (particionamento, "
+"contagem de caixa, triangulação, espectro de potência)."
+
+#: modules/process/fractal.c:184
+msgid "/_Statistics/_Fractal Dimension..."
+msgstr "/E_statísticas/Dimensão _fractal..."
+
+#: modules/process/fractal.c:188
+msgid "Calculate fractal dimension"
+msgstr "Calcula dimensão fractal"
+
+#: modules/process/fractal.c:223
+msgid "Fractal Dimension"
+msgstr "Dimensão fractal"
+
+#: modules/process/fractal.c:253
+msgid "_Method:"
+msgstr "_Método:"
+
+#: modules/process/fractal.c:269
+msgid "Fit Area"
+msgstr "Ajustar área"
+
+#: modules/process/fractal.c:273 modules/process/fractal.c:545
+#: modules/process/fractal.c:569
+msgid "minimum"
+msgstr "mínimo"
+
+#: modules/process/fractal.c:274
+msgid "From:"
+msgstr "De:"
+
+#: modules/process/fractal.c:279 modules/process/fractal.c:546
+#: modules/process/fractal.c:570
+msgid "maximum"
+msgstr "máximo"
+
+#: modules/process/fractal.c:280
+msgid "To:"
+msgstr "Até:"
+
+#: modules/process/fractal.c:287 modules/process/mark_with.c:394
+#: modules/process/neural.c:563
+msgid "Result"
+msgstr "Resultado"
+
+#: modules/process/fractal.c:506
+msgid "Linear fit"
+msgstr "Ajuste linear"
+
+#: modules/process/gradient.c:43
+msgid "Creates presentations with various gradients (Sobel, Prewitt)."
+msgstr "Cria apresentações com vários gradientes (Sobel, Prewitt)."
+
+#: modules/process/gradient.c:58
+msgid "/_Presentation/_Gradient/_Sobel (horizontal)"
+msgstr "/A_presentação/_Gradiente/_Sobel (horizontal)"
+
+#: modules/process/gradient.c:62
+msgid "Horizontal Sobel gradient presentation"
+msgstr "Apresentação de gradiente Sobel horizontal"
+
+#: modules/process/gradient.c:65
+msgid "/_Presentation/_Gradient/_Sobel (vertical)"
+msgstr "/A_presentação/_Gradiente/_Sobel (vertical)"
+
+#: modules/process/gradient.c:69
+msgid "Vertical Sobel gradient presentation"
+msgstr "Apresentação de gradiente Sobel vertical"
+
+#: modules/process/gradient.c:72
+msgid "/_Presentation/_Gradient/_Prewitt (horizontal)"
+msgstr "/A_presentação/_Gradiente/_Prewitt (horizontal)"
+
+#: modules/process/gradient.c:76
+msgid "Horizontal Prewitt gradient presentation"
+msgstr "Apresentação de gradiente Prewitt horizontal"
+
+#: modules/process/gradient.c:79
+msgid "/_Presentation/_Gradient/_Prewitt (vertical)"
+msgstr "/A_presentação/_Gradiente/_Prewitt (vertical)"
+
+#: modules/process/gradient.c:83
+msgid "Vertical Prewitt gradient presentation"
+msgstr "Apresentação de gradiente Prewitt vertical"
+
+#: modules/process/gradient.c:86
+msgid "/_Presentation/_Gradient/_Azimuth"
+msgstr "/A_presentação/_Gradiente/_Azimute"
+
+#: modules/process/gradient.c:90
+msgid "Local slope azimuth presentation"
+msgstr "Apresentação de azimute de inclinação local"
+
+#: modules/process/grain_cross.c:101
+msgid "Plots one grain quantity as a function of another."
+msgstr "Plota uma quantidade de grãos em função de outra."
+
+#: modules/process/grain_cross.c:115
+msgid "/_Grains/_Correlate..."
+msgstr "/_Grãos/_Correlacionar..."
+
+#: modules/process/grain_cross.c:119
+msgid "Correlate grain characteristics"
+msgstr "Correlacionar características de grãos"
+
+#: modules/process/grain_cross.c:193
+msgid ""
+"Grain correlation: Lateral dimensions and value must be the same physical "
+"quantity for the selected grain properties."
+msgstr ""
+"Correlação de grãos: dimensões laterais e valores devem ser as mesmas "
+"quantidades físicas para as propriedades de grãos selecionadas."
+
+#: modules/process/grain_cross.c:217
+msgid "Grain Correlations"
+msgstr "Correlações de grãos"
+
+#: modules/process/grain_cross.c:241
+msgid "_Abscissa"
+msgstr "_Abcissa"
+
+#: modules/process/grain_cross.c:245
+msgid "O_rdinate"
+msgstr "O_rdenada"
+
+#: modules/process/grain_dist.c:153
+msgid "Evaluates distribution of grains (continuous parts of mask)."
+msgstr "Calcula distribuição de grãos (partes contínuas da máscara)."
+
+#: modules/process/grain_dist.c:175
+msgid "/_Grains/_Distributions..."
+msgstr "/_Grãos/_Distribuições..."
+
+#: modules/process/grain_dist.c:179
+msgid "Distributions of various grain characteristics"
+msgstr "Distribuições de várias características de grãos"
+
+#: modules/process/grain_dist.c:223
+msgid "_Export raw data"
+msgstr "_Exportar dados raw"
+
+#: modules/process/grain_dist.c:224
+msgid "Plot _graphs"
+msgstr "Plotar _gráficos"
+
+#: modules/process/grain_dist.c:241
+msgid "Grain Distributions"
+msgstr "Distribuições de grãos"
+
+#: modules/process/grain_dist.c:547
+msgid "count"
+msgstr "contagem"
+
+#: modules/process/grain_dist.c:611
+msgid "Export Raw Grain Values"
+msgstr "Exportar valores raw de grãos"
+
+#: modules/process/grain_edge.c:99
+msgid "Marks grains by edge detection method."
+msgstr "Marca grãos pelo método de detecção de borda."
+
+#: modules/process/grain_edge.c:113
+msgid "/_Grains/Mark by _Edge Detection..."
+msgstr "/_Grãos/Marcar por detecção de borda..."
+
+#: modules/process/grain_edge.c:117
+msgid "Mark grains with edge detection mechanism"
+msgstr "Marca grãos com mecanismo de detecção de borda"
+
+#: modules/process/grain_edge.c:206
+msgid "Mark Grains by Edge Detection"
+msgstr "Marca grãos por detecção de borda"
+
+#: modules/process/grain_edge.c:244
+msgid "Threshold"
+msgstr "Limiar"
+
+#: modules/process/grain_edge.c:248
+msgid "_Laplacian:"
+msgstr "_Laplaciano:"
+
+#: modules/process/grain_filter.c:194
+msgid ""
+"Filters grains by their properties, using logical expressions and thresholds."
+msgstr ""
+"Filtra grãos por suas propriedades, usando expressões lógicas e limiares."
+
+#: modules/process/grain_filter.c:209
+msgid "/_Grains/_Filter..."
+msgstr "/_Grãos/_Filtrar..."
+
+#: modules/process/grain_filter.c:213
+msgid "Filter grains by their properties"
+msgstr "Filtrar grãos por suas propriedades"
+
+#: modules/process/grain_filter.c:253
+msgid "There are no grains to filter."
+msgstr "Não existem grãos para filtrar."
+
+#: modules/process/grain_filter.c:309
+msgid "Filter Grains"
+msgstr "Filtrar grãos"
+
+#: modules/process/grain_filter.c:404
+msgid "Set selected as:"
+msgstr "Definir seleção como:"
+
+#: modules/process/grain_filter.c:419
+msgid "Keep grains satisfying:"
+msgstr "Manter grãos satisfazendo:"
+
+#: modules/process/grain_filter.c:440 modules/process/lat_synth.c:733
+msgid "Lower threshold:"
+msgstr "Limite inferior:"
+
+#: modules/process/grain_filter.c:467 modules/process/lat_synth.c:740
+msgid "Upper threshold:"
+msgstr "Limite superior:"
+
+#. TRANSLATORS: %c is replaced with quantity label A, B or C.
+#: modules/process/grain_filter.c:628
+#, c-format
+msgid "Condition %c: %s"
+msgstr "Condição %c: %s"
+
+#: modules/process/grain_mark.c:137
+msgid "Marks grains by thresholding (height, slope, curvature)."
+msgstr "Marcar grãos por limites (altura, inclinação, curvatura)."
+
+#: modules/process/grain_mark.c:151
+msgid "/_Grains/_Mark by Threshold..."
+msgstr "/_Grãos/_Marcar por limite..."
+
+#: modules/process/grain_mark.c:155
+msgid "Mark grains by threshold"
+msgstr "Marcar grãos por limite"
+
+#: modules/process/grain_mark.c:240
+msgid "Mark Grains by Threshold"
+msgstr "Marcar grãos por limite"
+
+#: modules/process/grain_mark.c:280
+msgid "Threshold by"
+msgstr "Limite por"
+
+#: modules/process/grain_mark.c:310
+msgid "_Slope:"
+msgstr "Inclinação:"
+
+#: modules/process/grain_mark.c:314
+msgid "_Curvature:"
+msgstr "_Curvatura:"
+
+#: modules/process/grain_mark.c:319 modules/process/grain_wshed.c:260
+#: modules/process/wpour_mark.c:358
+msgid "_Invert height"
+msgstr "_Inverter altura"
+
+#: modules/process/grain_mark.c:328
+msgid "Criteria combination:"
+msgstr "Critério de combinação:"
+
+#: modules/process/grain_stat.c:54
+msgid "Displays overall grain statistics."
+msgstr "Exibir estatísticas gerais de grãos."
+
+#: modules/process/grain_stat.c:69
+msgid "/_Grains/S_tatistics..."
+msgstr "/_Grãos/Es_tatísticas..."
+
+#: modules/process/grain_stat.c:73
+msgid "Simple grain statistics"
+msgstr "Estatísticas simples de grãos"
+
+#: modules/process/grain_stat.c:76
+msgid "/_Grains/Select _Inscribed Discs"
+msgstr "/_Grãos/Selecionar discos inscritos"
+
+#: modules/process/grain_stat.c:80
+msgid "Create a selection visualizing discs inscribed into grains"
+msgstr "Criar uma seleção visualizando discos inscritos em grãos"
+
+#: modules/process/grain_stat.c:84
+msgid "/_Grains/Select _Circumscribed Circles"
+msgstr "/_Grãos/Selecionar _círculos circunscritos"
+
+#: modules/process/grain_stat.c:88
+msgid "Create a selection visualizing grain circumcircles"
+msgstr "Criar uma seleção visualizando grãos em círculos circunscritos"
+
+#: modules/process/grain_stat.c:141
+msgid "Save Grain Statistics"
+msgstr "Salvar estatísticas de grãos"
+
+#: modules/process/grain_stat.c:192
+msgid "Data channel:"
+msgstr "Canal de dados:"
+
+#: modules/process/grain_stat.c:223 modules/process/grain_stat.c:339
+msgid "Grain Statistics"
+msgstr "Estatísticas de grãos"
+
+#: modules/process/grain_stat.c:236
+msgid "Number of grains:"
+msgstr "Número de grãos:"
+
+#: modules/process/grain_stat.c:251
+msgid "Total projected area (abs.):"
+msgstr "Área projetada total (abs.):"
+
+#: modules/process/grain_stat.c:255
+msgid "Total projected area (rel.):"
+msgstr "Área projetada relativa (rel.):"
+
+#: modules/process/grain_stat.c:266
+msgid "Mean grain area:"
+msgstr "Área média de grãos:"
+
+#: modules/process/grain_stat.c:277
+msgid "Mean grain size:"
+msgstr "Tamanho médio de grãos:"
+
+#: modules/process/grain_stat.c:291
+msgid "Total grain volume (zero):"
+msgstr "Volume total de grãos (zero):"
+
+#: modules/process/grain_stat.c:302
+msgid "Total grain volume (minimum):"
+msgstr "Volume total de grãos (mínimo):"
+
+#: modules/process/grain_stat.c:313
+msgid "Total grain volume (laplacian):"
+msgstr "Volume total de grãos (laplaciano):"
+
+#: modules/process/grain_stat.c:324
+msgid "Total projected boundary length:"
+msgstr "Comprimento total da fronteira projetada:"
+
+#: modules/process/grain_wshed.c:102
+msgid "Marks grains by watershed algorithm."
+msgstr "Marca grãos pelo algorítimo linha divisória de águashed."
+
+#: modules/process/grain_wshed.c:116
+msgid "/_Grains/Mark by _Watershed..."
+msgstr "/_Grãos/Marcar por Wlinha divisória de águas.."
+
+#: modules/process/grain_wshed.c:120
+msgid "Mark grains by watershed"
+msgstr "Marca grãos por linha divisória de águas"
+
+#: modules/process/grain_wshed.c:162
+msgid "Mark Grains by Watershed"
+msgstr "Marca grãos por linha divisória de águas"
+
+#: modules/process/grain_wshed.c:200
+msgid "Grain Location"
+msgstr "Localização de grão"
+
+#: modules/process/grain_wshed.c:216
+msgid "_Drop size:"
+msgstr "Tamanho da gota:"
+
+#: modules/process/grain_wshed.c:233
+msgid "Segmentation"
+msgstr "Segmentação"
+
+#: modules/process/grain_wshed.c:239
+msgid "Num_ber of steps:"
+msgstr "Número de passos:"
+
+#: modules/process/grain_wshed.c:248
+msgid "Dr_op size:"
+msgstr "Tamanho da g_ota:"
+
+#: modules/process/grain_wshed.c:439
+msgid "Finding minima..."
+msgstr "Encontrando mínimo..."
+
+#: modules/process/grain_wshed.c:441
+msgid "Locating..."
+msgstr "Localizando..."
+
+#: modules/process/grain_wshed.c:443
+msgid "Simulating watershed..."
+msgstr "Simulando linha divisória de águas..."
+
+#: modules/process/grain_wshed.c:445
+msgid "Marking boundaries..."
+msgstr "Marcando fronteiras..."
+
+#: modules/process/hough.c:76
+msgid "Hough transform."
+msgstr "Transformada de Hough."
+
+#: modules/process/hough.c:90
+msgid "/_Integral Transforms/_Hough..."
+msgstr "/Transformadas _integrais/_Hough..."
+
+#: modules/process/hough.c:94
+msgid "Compute Hough transform"
+msgstr "Calcula transformada de Hough"
+
+#: modules/process/hough.c:137
+#, fuzzy
+msgid "Hough line"
+msgstr "Rugosidade"
+
+#: modules/process/hough.c:141
+#, c-format
+msgid "Hough circle r=%d"
+msgstr ""
+
+#: modules/process/hough.c:173
+msgid "Hough Transform"
+msgstr "Transformada de Hough"
+
+#: modules/process/hough.c:195
+msgid "_Transform type:"
+msgstr "Tipo de _transformação:"
+
+#: modules/process/hough.c:203
+msgid "_Circle size:"
+msgstr "Tamanho do círculo:"
+
+#: modules/process/immerse.c:163
+msgid "Immerse high resolution detail into overall image."
+msgstr "Imergir detalhes de alta resolução na imagem toda."
+
+#: modules/process/immerse.c:177
+msgid "/M_ultidata/_Immerse Detail..."
+msgstr "/M_ulti-dados/_Imergir detalhes..."
+
+#: modules/process/immerse.c:181
+msgid "Immerse a detail into image"
+msgstr "Imergir um detalhe na imagem"
+
+#: modules/process/immerse.c:223
+msgid "Immerse Detail"
+msgstr "Imergir um detalhe"
+
+#: modules/process/immerse.c:226
+msgid "_Locate"
+msgstr "_Localizar"
+
+#: modules/process/immerse.c:228
+msgid "Locate detail by full image correlation search"
+msgstr "Localizar detalhe por busca de correlação de imagem completa"
+
+#: modules/process/immerse.c:230
+msgid "_Improve"
+msgstr "Melhorar"
+
+#: modules/process/immerse.c:232
+msgid "Improve detail position by correlation search in neighborhood"
+msgstr "Melhorar posição do detalhe por busca de correlação na vizinhança"
+
+#: modules/process/immerse.c:291
+msgid "_Detail image:"
+msgstr "_Detalhar imagem:"
+
+#: modules/process/immerse.c:296
+msgid "Position:"
+msgstr "Posição:"
+
+#: modules/process/immerse.c:314
+msgid "Result Sampling"
+msgstr "Resultado de amostragem"
+
+#: modules/process/immerse.c:324
+msgid "_Upsample large image"
+msgstr "Incrementar frequência (upsample) de imagem grande"
+
+#: modules/process/immerse.c:326
+msgid "_Downsample detail"
+msgstr "Reduzir frequência (downsample) de detalhe"
+
+#: modules/process/immerse.c:335
+msgid "Detail Leveling"
+msgstr "Nivelamento de detalhe"
+
+#: modules/process/immerse.c:345
+msgid "levelling|_None"
+msgstr "nivelamento|_Nenhum"
+
+#: modules/process/immerse.c:347
+msgid "_Mean value"
+msgstr "Valor _médio"
+
+#: modules/process/immerse.c:355
+msgid "Show _frame"
+msgstr "Mostrar quadro"
+
+#: modules/process/immerse.c:793
+msgid "Immersed detail"
+msgstr "Detalhe imerso"
+
+#: modules/process/indent_analyze.c:246
+msgid "Do nothing"
+msgstr "Não fazer nada"
+
+#: modules/process/indent_analyze.c:247
+msgid "Plane level"
+msgstr "Nível plano"
+
+#: modules/process/indent_analyze.c:248
+msgid "Plane rotate"
+msgstr "Girar plano"
+
+#: modules/process/indent_analyze.c:252
+msgid "New"
+msgstr "Novo"
+
+#: modules/process/indent_analyze.c:253
+msgid "AND"
+msgstr "AND"
+
+#: modules/process/indent_analyze.c:254
+msgid "OR"
+msgstr "OR"
+
+#: modules/process/indent_analyze.c:255
+msgid "NOT"
+msgstr "NOT"
+
+#: modules/process/indent_analyze.c:256
+msgid "XOR"
+msgstr "XOR"
+
+#: modules/process/indent_analyze.c:260
+msgid "Nothing"
+msgstr "Nada"
+
+#: modules/process/indent_analyze.c:261
+msgid "Above"
+msgstr "Acima"
+
+#: modules/process/indent_analyze.c:262
+msgid "Below"
+msgstr "Abaixo"
+
+#: modules/process/indent_analyze.c:263
+msgid "Plane"
+msgstr "Plano"
+
+#: modules/process/indent_analyze.c:264
+msgid "Impression"
+msgstr "Impressão"
+
+#: modules/process/indent_analyze.c:265
+msgid "Inner Pile-up"
+msgstr "Empilhamento interno"
+
+#: modules/process/indent_analyze.c:266
+msgid "Outer Pile-up"
+msgstr "Empilhamento externo"
+
+#: modules/process/indent_analyze.c:267
+msgid "Special points"
+msgstr "Pontos especiais"
+
+#: modules/process/indent_analyze.c:268
+msgid "Faces border"
+msgstr "Faceia borda"
+
+#: modules/process/indent_analyze.c:272
+msgid "Vickers"
+msgstr "Vickers"
+
+#: modules/process/indent_analyze.c:273
+msgid "Berkovich"
+msgstr "Berkovich"
+
+#: modules/process/indent_analyze.c:274
+msgid "Berkovich (modified)"
+msgstr "Berkovich (modificado)"
+
+#: modules/process/indent_analyze.c:275
+msgid "Knoop"
+msgstr "Knoop"
+
+#: modules/process/indent_analyze.c:276
+msgid "Brinell"
+msgstr "Brinell"
+
+#: modules/process/indent_analyze.c:277
+msgid "Cube corner"
+msgstr "Canto do cubo"
+
+#: modules/process/indent_analyze.c:278
+msgid "Rockwell"
+msgstr "Rockwell"
+
+#: modules/process/indent_analyze.c:288
+msgid "Analyses nanoindentation structure (volumes, surfaces, ...)."
+msgstr "Analisa estrutura de nano-indentação (volumes, superfícies, ...)."
+
+#: modules/process/indent_analyze.c:302
+msgid "/_Tip and Indentation/_Analyze Imprint..."
+msgstr "/Indicação e indentação/_Analisar impressão..."
+
+#: modules/process/indent_analyze.c:410
+msgid "Marked _areas:"
+msgstr "Áreas marcadas:"
+
+#: modules/process/indent_analyze.c:419
+msgid "_Indentor type:"
+msgstr "Tipo de indentador:"
+
+#: modules/process/indent_analyze.c:428
+msgid "_Mask creation type:"
+msgstr "Tipo de criação de _máscara:"
+
+#: modules/process/indent_analyze.c:434
+msgid "Ref. plane _tolerance:"
+msgstr "_Tolerância do plano de referência:"
+
+#: modules/process/indent_analyze.c:438
+msgid "Angle _1 tolerance:"
+msgstr "Tolerância de ângulo _1:"
+
+#: modules/process/indent_analyze.c:456
+msgid "Indent center at"
+msgstr "Indentar centro em"
+
+#: modules/process/indent_analyze.c:460
+msgid "Maximum at"
+msgstr "Máximo em"
+
+#: modules/process/indent_analyze.c:464
+msgid "Max-min difference"
+msgstr "Diferença máx-mín"
+
+#: modules/process/indent_analyze.c:472
+msgid "Expected A<sub>d</sub>:"
+msgstr "Esperado A<sub>d</sub>:"
+
+#: modules/process/indent_analyze.c:479
+msgid "Expected A<sub>p</sub>:"
+msgstr "Esperado A<sub>p</sub>:"
+
+#: modules/process/indent_analyze.c:489
+msgid "Volume above-below"
+msgstr "Volume acima-abaixo"
+
+#: modules/process/indent_analyze.c:494
+msgid "Indent. volume"
+msgstr "Indentar volume"
+
+#: modules/process/indent_analyze.c:502
+msgid "Indent. A<sub>d</sub>"
+msgstr "Indentar A<sub>d</sub>"
+
+#: modules/process/indent_analyze.c:509
+msgid "Indent. A<sub>p</sub>"
+msgstr "Indentar A<sub>p</sub>"
+
+#: modules/process/indent_analyze.c:517
+msgid "Inner Pile-Up A<sub>d</sub>"
+msgstr "Empilhamento interno A<sub>d</sub>"
+
+#: modules/process/indent_analyze.c:525
+msgid "Inner Pile-Up A<sub>p</sub>"
+msgstr "Empilhamento interno A<sub>p</sub>"
+
+#: modules/process/indent_analyze.c:533
+msgid "Outer Pile-Up A<sub>d</sub>"
+msgstr "Empilhamento externo A<sub>d</sub>"
+
+#: modules/process/indent_analyze.c:541
+msgid "Outer Pile-Up A<sub>p</sub>"
+msgstr "Empilhamento externo A<sub>p</sub>"
+
+#: modules/process/indent_analyze.c:569
+msgid "Indentation statistics"
+msgstr "Estatísticas de indentação"
+
+#: modules/process/indent_analyze.c:570
+msgid "_Compute & mark"
+msgstr "_Calcular & marcar"
+
+#: modules/process/indent_analyze.c:571
+msgid "_Save statistics"
+msgstr "_Salvar estatísticas"
+
+#: modules/process/indent_analyze.c:1392
+msgid "No statistics has been computed yet."
+msgstr "Nenhuma estatística foi calculada ainda."
+
+#: modules/process/indent_analyze.c:1400
+msgid "Save Indentation Statistics"
+msgstr "Salvar estatísticas de indentação"
+
+#: modules/process/indent_analyze.c:1438
+#, c-format
+msgid "Indentor: %s\n"
+msgstr "Indentador: %s\n"
+
+#: modules/process/indent_analyze.c:1442
+#, c-format
+msgid "Length units: %s\n"
+msgstr "Unidades de comprimento: %s\n"
+
+#: modules/process/indent_analyze.c:1444
+#, c-format
+msgid "Indentation center at [%d, %d] px: %lf\n"
+msgstr "Centro de indentação em [%d, %d] px: %lf\n"
+
+#: modules/process/indent_analyze.c:1446
+#, c-format
+msgid "Maximum at [%d, %d] is: %lf\n"
+msgstr "Máximo em [%d, %d] is: %lf\n"
+
+#: modules/process/indent_analyze.c:1448
+#, c-format
+msgid "Difference max-min: %lf\n"
+msgstr "Diferença máx-mín: %lf\n"
+
+#: modules/process/indent_analyze.c:1453
+#, c-format
+msgid "Area (projected) above plane: %g (%.1lf %%)\n"
+msgstr "Área (projetada) sobre o plano: %g (%.1lf %%)\n"
+
+#: modules/process/indent_analyze.c:1457
+#, c-format
+msgid "Area (projected) below plane: %g (%.1lf %%)\n"
+msgstr "Área (projetada) abaixo do plano: %g (%.1lf %%)\n"
+
+#: modules/process/indent_analyze.c:1461
+#, c-format
+msgid "Area (projected) of plane: %g (%.1lf %%)\n"
+msgstr "Área (projetada) do plano: %g (%.1lf %%)\n"
+
+#: modules/process/indent_analyze.c:1466
+#, c-format
+msgid "Area (developed) above %g (+%.1f %%)\n"
+msgstr "Área (desenvolvida) acima %g (+%.1f %%)\n"
+
+#: modules/process/indent_analyze.c:1469
+#, c-format
+msgid "Area (developed) below %g (+%.1lf %%)\n"
+msgstr "Área (desenvolvida) abaixo %g (+%.1lf %%)\n"
+
+#: modules/process/indent_analyze.c:1473
+#, c-format
+msgid "Volume above: %g\n"
+msgstr "Volume acima: %g\n"
+
+#: modules/process/indent_analyze.c:1475
+#, c-format
+msgid "Volume below: %g\n"
+msgstr "Volume abaixo: %g\n"
+
+#: modules/process/indent_analyze.c:1477
+#, c-format
+msgid "Volume difference %g\n"
+msgstr "Diferença de volume %g\n"
+
+#: modules/process/indent_analyze.c:1481
+msgid ""
+"\n"
+"Indentation\n"
+msgstr ""
+"\n"
+"Indentação\n"
+
+#: modules/process/indent_analyze.c:1482
+#, c-format
+msgid "Volume %g\n"
+msgstr "Volume %g\n"
+
+#: modules/process/indent_analyze.c:1487
+msgid ""
+"\n"
+"Indentation - Inner Pile-Up\n"
+msgstr ""
+"\n"
+"Indentação - Empilhamento interno\n"
+
+#: modules/process/indent_analyze.c:1493
+msgid "Indentation - Outer Pile-Up\n"
+msgstr "Indentação - Empilhamento externo\n"
+
+#: modules/process/laplace.c:41
+msgid ""
+"Removes data under mask, interpolating them with Laplace equation solution."
+msgstr ""
+"Remove dados sob máscara, interpolando-os com a solução da equação de "
+"Laplace."
+
+#: modules/process/laplace.c:56
+msgid "/_Correct Data/_Remove Data Under Mask"
+msgstr "/_Corrigir dados/_Remover dados sob máscara"
+
+#: modules/process/laplace.c:60
+msgid "Interpolate data under mask by solution of Laplace equation"
+msgstr "Interpola dados sob máscara por solução da equação de Laplace"
+
+#: modules/process/lat_synth.c:373
+msgid "Random constant"
+msgstr "Aleatório constante"
+
+#: modules/process/lat_synth.c:374
+msgid "Random linear"
+msgstr "Aleatório linear"
+
+#: modules/process/lat_synth.c:375
+msgid "Random bumpy"
+msgstr "Aleatório inconstante"
+
+#: modules/process/lat_synth.c:376
+msgid "Radial distance"
+msgstr "Distância radial"
+
+#: modules/process/lat_synth.c:377
+msgid "Segmented distance"
+msgstr "Distância do segmentado"
+
+#: modules/process/lat_synth.c:378
+msgid "Segmented random"
+msgstr "Segmentado aleatório"
+
+#: modules/process/lat_synth.c:379
+msgid "Border distance"
+msgstr "Distância da borda"
+
+#: modules/process/lat_synth.c:380
+msgid "Border random"
+msgstr "Borda aleatória"
+
+#: modules/process/lat_synth.c:381
+msgid "Second nearest distance"
+msgstr "Segunda distância mais próxima"
+
+#: modules/process/lat_synth.c:405
+msgid "Generates surfaces based on regular or random lattices."
+msgstr "Gera superfícies baseadas em redes regulares ou aleatórias."
+
+#: modules/process/lat_synth.c:419
+msgid "/S_ynthetic/_Lattice..."
+msgstr "/Sintético/Rede..."
+
+#: modules/process/lat_synth.c:423
+msgid "Generate lattice based surface"
+msgstr "Gerar superfície baseada em rede"
+
+#: modules/process/lat_synth.c:542
+msgid "lattice|Random"
+msgstr "rede|Aleatória"
+
+#: modules/process/lat_synth.c:543
+msgid "lattice|Square"
+msgstr "rede|Quadrada"
+
+#: modules/process/lat_synth.c:544
+msgid "lattice|Hexagonal"
+msgstr "rede|Hexagonal"
+
+#: modules/process/lat_synth.c:545
+msgid "lattice|Triangular"
+msgstr "rede|Triangular"
+
+#: modules/process/lat_synth.c:546
+#, fuzzy
+msgid "lattice|Cairo"
+msgstr "rede|Aleatória"
+
+#: modules/process/lat_synth.c:547
+#, fuzzy
+msgid "lattice|Snub square"
+msgstr "rede|Quadrada"
+
+#: modules/process/lat_synth.c:548
+#, fuzzy
+msgid "lattice|Truncated square"
+msgstr "rede|Quadrada"
+
+#: modules/process/lat_synth.c:549
+msgid "Silicon 7x7"
+msgstr ""
+
+#: modules/process/lat_synth.c:550
+msgid "lattice|Penrose (vertices)"
+msgstr ""
+
+#: modules/process/lat_synth.c:551
+#, fuzzy
+msgid "lattice|Penrose (centers)"
+msgstr "Parâmetros de rede"
+
+#: modules/process/lat_synth.c:644
+msgid "_Lattice:"
+msgstr "Rede:"
+
+#: modules/process/lat_synth.c:662
+msgid "Lattice rela_xation:"
+msgstr "Relaxação da rede:"
+
+#: modules/process/lat_synth.c:674
+msgid "_Height relaxation:"
+msgstr "Relaxação da altura:"
+
+#: modules/process/lat_synth.c:705
+msgid "Surface"
+msgstr "Superfície"
+
+#: modules/process/lat_synth.c:726 modules/process/local_contrast.c:154
+msgid "_Weight:"
+msgstr "Peso:"
+
+#: modules/process/lat_synth.c:1167
+msgid "Constructing lattice..."
+msgstr "Construindo rede..."
+
+#: modules/process/lat_synth.c:1194
+msgid "Relaxing lattice..."
+msgstr "Relaxando rede..."
+
+#: modules/process/lat_synth.c:1209
+msgid "Relaxing heights..."
+msgstr "Relaxando alturas..."
+
+#: modules/process/latsim.c:76
+msgid "Lateral force simulator"
+msgstr "Simulador de força lateral"
+
+#: modules/process/latsim.c:90
+msgid "/_Tip and Indentation/_Lateral force..."
+msgstr "/Indicação e indentação/Força _lateral..."
+
+#: modules/process/latsim.c:94
+msgid "Simulate topography artifacts in lateral force channels"
+msgstr "Simular artefatos de topografia em canais de força lateral"
+
+#: modules/process/latsim.c:136
+msgid "Fw lateral force "
+msgstr "Força lateral para frente"
+
+#: modules/process/latsim.c:145
+msgid "Rev lateral force"
+msgstr "Força lateral para trás"
+
+#: modules/process/latsim.c:158
+msgid "Lateral force simulation"
+msgstr "Simulação de força lateral"
+
+#: modules/process/latsim.c:175
+msgid "_Friction coef.:"
+msgstr "Coef. de _fricção:"
+
+#: modules/process/latsim.c:181
+msgid "_Normal force:"
+msgstr "Força _normal:"
+
+#: modules/process/latsim.c:187
+msgid "_Adhesion force:"
+msgstr "Força de _adesão:"
+
+#: modules/process/level.c:73
+msgid ""
+"Levels data by simple plane subtraction or by rotation, and fixes minimal or "
+"mean value to zero."
+msgstr ""
+"Nivela dados por subtração ou rotação de plano simples, e fixa valor mínimo "
+"ou máximo em zero."
+
+#: modules/process/level.c:88
+msgid "/_Level/Plane _Level"
+msgstr "/Nive_lar/Nivelamento plano"
+
+#: modules/process/level.c:92
+msgid "Level data by mean plane subtraction"
+msgstr "Nivelar dados por subtração de plano médio"
+
+#: modules/process/level.c:95
+msgid "/_Level/Level _Rotate"
+msgstr "/Nive_lar/Nivelar por _rotação"
+
+#: modules/process/level.c:99
+msgid "Automatically level data by plane rotation"
+msgstr "Nivelar dados automaticamente por rotação de plano"
+
+#: modules/process/level.c:102
+msgid "/_Level/Fix _Zero"
+msgstr "/Nive_lar/Fixar _zero"
+
+#: modules/process/level.c:106 modules/xyz/xyz_level.c:111
+msgid "Shift minimum data value to zero"
+msgstr "Deslocar valor mínimo dos dados para zero"
+
+#: modules/process/level.c:109
+msgid "/_Level/Zero _Mean Value"
+msgstr "/Nive_lar/Zerar valor _médio"
+
+#: modules/process/level.c:113 modules/xyz/xyz_level.c:118
+msgid "Shift mean data value to zero"
+msgstr "Deslocar valor médio dos dados para zero"
+
+#: modules/process/level.c:145
+msgid "Plane Level"
+msgstr "Nivelar plano"
+
+#: modules/process/level.c:147
+msgid "Level Rotate"
+msgstr "Nivelar rotação"
+
+#: modules/process/level.c:149
+msgid "Zero Mean Value"
+msgstr "Zerar valor médio"
+
+#: modules/process/level_grains.c:84
+msgid ""
+"Levels individual grains, interpolating the shifts between using Laplacian "
+"interpolation."
+msgstr ""
+"Nivela grãos individuais, interpolando os deslocamentos com interpolação "
+"Laplaciana."
+
+#: modules/process/level_grains.c:99
+msgid "/_Grains/_Level Grains..."
+msgstr "/_Grãos/Nive_lar grãos..."
+
+#: modules/process/level_grains.c:103
+msgid ""
+"Level individual grains, interpolating the shifts between using Laplacian "
+"interpolation"
+msgstr ""
+"Nivelar grãos individuais, interpolando os deslocamentos com interpolação "
+"Laplaciana"
+
+#: modules/process/level_grains.c:187 modules/process/median-bg.c:167
+#: modules/process/polylevel.c:293 modules/process/polylevel.c:417
+#: modules/process/sphere-revolve.c:221 modules/process/sphere-revolve.c:295
+msgid "Background"
+msgstr "Fundo"
+
+#: modules/process/level_grains.c:203
+msgid "Level Grains"
+msgstr "Nivelar grãos"
+
+#: modules/process/level_grains.c:218
+msgid "Quantity to level:"
+msgstr "Quantidade para nivelar:"
+
+#: modules/process/level_grains.c:231 modules/process/linematch.c:834
+#: modules/process/median-bg.c:217 modules/process/polylevel.c:485
+#: modules/process/sphere-revolve.c:371
+msgid "E_xtract background"
+msgstr "E_xtrair fundo"
+
+#: modules/process/linecorrect.c:52
+msgid "Corrects line defects (mostly experimental algorithms)."
+msgstr "Corrige defeitos de linha (algorítimos experimentais em sua maioria)."
+
+#: modules/process/linecorrect.c:66
+msgid "/_Correct Data/Ste_p Line Correction"
+msgstr "/_Corrigir dados/Correção de _passo de linha"
+
+#: modules/process/linecorrect.c:70
+msgid "Correct steps in lines"
+msgstr "Corrigir passos em linhas"
+
+#: modules/process/linematch.c:155 modules/tools/linestats.c:166
+#: modules/volume/volume_linestat.c:143
+msgid "Median"
+msgstr "Mediana"
+
+#: modules/process/linematch.c:156
+msgid "Median of differences"
+msgstr "Mediana das diferenças"
+
+#: modules/process/linematch.c:157
+msgid "Modus"
+msgstr "Modo"
+
+#: modules/process/linematch.c:158
+msgid "linematch|Matching"
+msgstr "linematch|Correspondendo"
+
+#: modules/process/linematch.c:159
+msgid "linematch|Polynomial"
+msgstr "linematch|Polinomial"
+
+#: modules/process/linematch.c:165
+msgid "Aligns rows by various methods."
+msgstr "Alinha linhas por vários métodos."
+
+#: modules/process/linematch.c:179
+msgid "/_Correct Data/_Align rows..."
+msgstr "/_Corrigir dados/_Alinhar linhas..."
+
+#: modules/process/linematch.c:183
+msgid "Align rows using various methods"
+msgstr "Alinha linhas usando vários métodos"
+
+#: modules/process/linematch.c:234 modules/process/linematch.c:262
+msgid "Row background"
+msgstr "Linha de fundo"
+
+#: modules/process/linematch.c:263
+msgid "Vertical position"
+msgstr "Posição vertical"
+
+#: modules/process/linematch.c:264
+msgid "Corrected offset"
+msgstr "Afastamento corrigido"
+
+#: modules/process/linematch.c:769
+msgid "Align Rows"
+msgstr "Alinhar linhas"
+
+#: modules/process/linematch.c:810
+msgid "_Polynomial degree:"
+msgstr "Grau _polinomial:"
+
+#: modules/process/linematch.c:844
+msgid "Plot background _graph"
+msgstr "Plotar _gráfico de fundo"
+
+#: modules/process/lno_synth.c:259 modules/process/noise_synth.c:186
+msgid "distribution|Triangular"
+msgstr "distribuição|Triangular"
+
+#: modules/process/lno_synth.c:265 modules/process/pat_synth.c:213
+msgid "Steps"
+msgstr "Passos"
+
+#: modules/process/lno_synth.c:266
+msgid "Scars"
+msgstr "Ranhuras"
+
+#: modules/process/lno_synth.c:267 modules/process/pat_synth.c:214
+msgid "Ridges"
+msgstr "Cumes"
+
+#: modules/process/lno_synth.c:273
+msgid "Generates various kinds of line noise."
+msgstr "Gera vários tipos de ruído de linha."
+
+#: modules/process/lno_synth.c:287
+msgid "/S_ynthetic/_Line Noise..."
+msgstr "/Sintético/Ruído de _linha..."
+
+#: modules/process/lno_synth.c:291
+msgid "Generate line noise"
+msgstr "Gerar ruídos de linha"
+
+#: modules/process/lno_synth.c:429
+msgid "Line Noise"
+msgstr "Ruídos de linha"
+
+#: modules/process/lno_synth.c:502
+msgid "Distribution"
+msgstr "Distribuição"
+
+#: modules/process/lno_synth.c:512 modules/process/mask_noisify.c:158
+#: modules/process/noise_synth.c:412
+#, fuzzy
+msgid "Noise type:"
+msgstr "Tipo de ruído:"
+
+#: modules/process/lno_synth.c:521 modules/process/mask_noisify.c:167
+#: modules/process/noise_synth.c:421
+msgid "S_ymmetrical"
+msgstr "Simétrico"
+
+#: modules/process/lno_synth.c:522 modules/process/mask_noisify.c:168
+#: modules/process/noise_synth.c:422
+msgid "One-sided _positive"
+msgstr "De apenas um lado _positivo"
+
+#: modules/process/lno_synth.c:523 modules/process/mask_noisify.c:169
+#: modules/process/noise_synth.c:423
+msgid "One-sided _negative"
+msgstr "De apenas um lado _negativo"
+
+#: modules/process/lno_synth.c:544
+msgid "Noise Type"
+msgstr "Tipo de ruído"
+
+#: modules/process/lno_synth.c:549
+msgid "_Noise type:"
+msgstr "Tipo de ruído:"
+
+#: modules/process/lno_synth.c:863 modules/process/lno_synth.c:1233
+msgid "_Within line:"
+msgstr "Dentro da linha:"
+
+#: modules/process/lno_synth.c:870
+msgid "C_umulative"
+msgstr "C_umulativo"
+
+#: modules/process/lno_synth.c:1243
+msgid "Wi_dth:"
+msgstr "Largura:"
+
+#: modules/process/local_contrast.c:77
+msgid "Maximizes local contrast."
+msgstr "Maximiza contraste local."
+
+#: modules/process/local_contrast.c:91
+msgid "/_Presentation/Local _Contrast..."
+msgstr "/A_presentação/_Contraste local..."
+
+#: modules/process/local_contrast.c:95
+msgid "Presentation with maximized local contrast"
+msgstr "Apresentação com contraste local maximizado"
+
+#: modules/process/local_contrast.c:128
+msgid "Increase Local Contrast"
+msgstr "Aumentar contraste local"
+
+#: modules/process/local_contrast.c:146 modules/process/rank.c:188
+msgid "Kernel _size:"
+msgstr "Tamanho do núcleo:"
+
+#: modules/process/local_contrast.c:150
+msgid "Blending _depth:"
+msgstr "Profundidade da combinação:"
+
+#: modules/process/logistic.c:122
+msgid "Trains logistic regression to mark grains."
+msgstr "Ensina regressão logística para marcar grãos."
+
+#: modules/process/logistic.c:136
+msgid "/_Grains/Logistic _Regression..."
+msgstr "/_Grãos/_Regressão logística..."
+
+#: modules/process/logistic.c:140
+msgid "Mark grains with logistic regression"
+msgstr "Marcar grãos com regressão logística"
+
+#: modules/process/logistic.c:231
+msgid "Logistic Regression"
+msgstr "Regressão logística"
+
+#: modules/process/logistic.c:254
+msgid "_Use trained regression"
+msgstr "_Usar regressão ensinada"
+
+#: modules/process/logistic.c:256
+msgid "_Train logistic regression"
+msgstr "Ensinar regressão logística"
+
+#: modules/process/logistic.c:274
+msgid "_Gaussian blur"
+msgstr "Borrão _Gaussiano"
+
+#: modules/process/logistic.c:285
+msgid "_Number of Gaussians:"
+msgstr "_Número de Gaussianas:"
+
+#: modules/process/logistic.c:293
+msgid "_Sobel derivatives"
+msgstr "Derivadas de _Sobel"
+
+#: modules/process/logistic.c:303
+msgid "_Laplacian"
+msgstr "_Laplaciano"
+
+#: modules/process/logistic.c:313
+msgid "_Hessian"
+msgstr "_Hessiano"
+
+#: modules/process/logistic.c:325
+msgid "_Regularization parameter:"
+msgstr "Parâmetro de _regularização:"
+
+#: modules/process/logistic.c:616 modules/process/neural.c:1108
+msgid "Training..."
+msgstr "Treinando..."
+
+#: modules/process/mark_disconn.c:104
+msgid "Creates mask of values disconnected to the rest."
+msgstr "Cria máscara de valores desconectados do restante."
+
+#: modules/process/mark_disconn.c:118
+msgid "/_Correct Data/Mask of _Disconnected..."
+msgstr "/_Corrigir dados/Máscara de _desconectados..."
+
+#: modules/process/mark_disconn.c:122
+msgid "Mark data disconnected from other values"
+msgstr "Marcar dados desconectados de outros valores"
+
+#: modules/process/mark_disconn.c:187 modules/process/obj_synth.c:419
+#: modules/process/scars.c:297
+msgid "Positive"
+msgstr "Positivo"
+
+#: modules/process/mark_disconn.c:188 modules/process/obj_synth.c:420
+#: modules/process/scars.c:298
+msgid "Negative"
+msgstr "Negativo"
+
+#: modules/process/mark_disconn.c:201
+msgid "Mark Disconnected"
+msgstr "Marcar desconectados"
+
+#: modules/process/mark_disconn.c:249
+msgid "Defect type:"
+msgstr "Tipo de defeito:"
+
+#: modules/process/mark_disconn.c:263
+msgid "Defect _radius:"
+msgstr "_Raio do defeito:"
+
+#: modules/process/mark_disconn.c:552
+msgid "Filtering..."
+msgstr "Filtrando..."
+
+#: modules/process/mark_disconn.c:579
+msgid "Marking outliers..."
+msgstr "Marcando isolados..."
+
+#: modules/process/mark_with.c:139
+msgid "Creates or modifies a mask using other channels."
+msgstr "Cria ou modifica uma máscara usando outros canais."
+
+#: modules/process/mark_with.c:153
+msgid "/_Mask/Mark _With..."
+msgstr "/_Máscara/Marcar com..."
+
+#: modules/process/mark_with.c:157
+msgid "Mask combining and modification"
+msgstr "Combinação e modificação de máscara"
+
+#: modules/process/mark_with.c:193
+msgid "Mark With"
+msgstr "Marcar com"
+
+#: modules/process/mark_with.c:231 modules/process/mask_morph.c:209
+msgid "Operation:"
+msgstr "Operação:"
+
+#: modules/process/mark_with.c:239
+msgid "Se_t mask"
+msgstr "Definir máscara"
+
+#: modules/process/mark_with.c:240
+msgid "_Add mask"
+msgstr "_Adicionar máscara"
+
+#: modules/process/mark_with.c:241
+msgid "_Subtract mask"
+msgstr "_Subtrair máscara"
+
+#: modules/process/mark_with.c:242
+msgid "_Intersect masks"
+msgstr "Cruzar máscaras"
+
+#: modules/process/mark_with.c:248
+msgid "Mark with:"
+msgstr "Marcar com:"
+
+#: modules/process/mark_with.c:256
+msgid "with|_Mask"
+msgstr "com|Máscara"
+
+#: modules/process/mark_with.c:258
+msgid "with|_Data"
+msgstr "com|_Dados"
+
+#: modules/process/mark_with.c:260
+msgid "with|_Presentation"
+msgstr "com|A_presentação"
+
+#: modules/process/mark_with.c:297
+msgid "Marked data range:"
+msgstr "Intervalo de dados marcados:"
+
+#: modules/process/mark_with.c:305
+msgid "_Minimum:"
+msgstr "_Mínimo:"
+
+#: modules/process/mark_with.c:314
+msgid "M_aximum:"
+msgstr "Máximo:"
+
+#: modules/process/mark_with.c:382
+msgid "Operand"
+msgstr "Operando"
+
+#: modules/process/mask_distribute.c:87
+msgid "Distributes masks to other channels."
+msgstr "Distribui máscaras para outros canais."
+
+#: modules/process/mask_distribute.c:101
+msgid "/_Mask/_Distribute..."
+msgstr "/_Máscara/_Distribuir..."
+
+#: modules/process/mask_distribute.c:105
+msgid "Distribute mask to other channels"
+msgstr "Distribui máscara para outros canais"
+
+#: modules/process/mask_distribute.c:141
+msgid "Channels within the file"
+msgstr "Canais com o arquivo"
+
+#: modules/process/mask_distribute.c:142
+msgid "Channels in all files"
+msgstr "Canais em todos os arquivos"
+
+#: modules/process/mask_distribute.c:151
+msgid "Distribute Mask"
+msgstr "Distribuir máscara"
+
+#: modules/process/mask_distribute.c:166
+msgid "Distribute to:"
+msgstr "Distribuir para:"
+
+#: modules/process/mask_distribute.c:179
+msgid "Preserve existing masks"
+msgstr "Preservar máscaras existentes"
+
+#: modules/process/mask_edt.c:89
+msgid "Performs simple and true Euclidean distance transforms of masks."
+msgstr ""
+"Realiza transformadas de distâncias Euclidianas simples e verdadeira de "
+"máscaras."
+
+#: modules/process/mask_edt.c:103
+msgid "/_Mask/Distanc_e Transform..."
+msgstr "/_Máscara/Transformada de distância..."
+
+#: modules/process/mask_edt.c:107
+msgid "Distance transform of mask"
+msgstr "Transformada de distância de máscara"
+
+#: modules/process/mask_edt.c:110
+msgid "/_Mask/Thi_n"
+msgstr "/_Máscara/Fi_na"
+
+#: modules/process/mask_edt.c:114
+msgid "Thin mask"
+msgstr "Máscara fina"
+
+#: modules/process/mask_edt.c:164 modules/process/mask_edt.c:186
+msgid "Distance Transform"
+msgstr "Transformada de distância"
+
+#: modules/process/mask_edt.c:174
+msgid "Interior"
+msgstr "Interior"
+
+#: modules/process/mask_edt.c:175
+msgid "Exterior"
+msgstr "Exterior"
+
+#: modules/process/mask_edt.c:176
+msgid "Two-sided"
+msgstr "Em dois lados"
+
+#: modules/process/mask_edt.c:207 modules/tools/maskedit.c:640
+msgid "_Distance type:"
+msgstr "Tipo de _distância:"
+
+#: modules/process/mask_edt.c:228 modules/tools/maskedit.c:646
+msgid "Shrink from _border"
+msgstr "Reduzir a partir da _borda"
+
+#: modules/process/mask_morph.c:116
+msgid "Performs basic morphological operations with masks."
+msgstr "Realiza operações morfológicas básicas com máscaras."
+
+#: modules/process/mask_morph.c:130
+#, fuzzy
+msgid "/_Mask/Morpho_logical Operation..."
+msgstr "/_Máscara/Operação morfológica..."
+
+#: modules/process/mask_morph.c:134
+msgid "Morphological operation with mask"
+msgstr "Operações morfológicas com máscara"
+
+#: modules/process/mask_morph.c:168
+msgid "Erosion"
+msgstr "Erosão"
+
+#: modules/process/mask_morph.c:169
+msgid "Dilation"
+msgstr "Dilatação"
+
+#: modules/process/mask_morph.c:170 modules/tools/filter.c:243
+msgid "filter|Opening"
+msgstr "filtrar|Abertura"
+
+#: modules/process/mask_morph.c:171 modules/tools/filter.c:244
+msgid "filter|Closing"
+msgstr "filtrar|Fechamento"
+
+#: modules/process/mask_morph.c:172 modules/tools/filter.c:245
+msgid "ASF Opening"
+msgstr "Abertura ASF"
+
+#: modules/process/mask_morph.c:173 modules/tools/filter.c:246
+msgid "ASF Closing"
+msgstr "Fechamento ASF"
+
+#: modules/process/mask_morph.c:177
+msgid "Octagon"
+msgstr "Octágono"
+
+#: modules/process/mask_morph.c:180
+msgid "Another mask"
+msgstr "Outra máscara"
+
+#: modules/process/mask_morph.c:191
+msgid "Morphological Operation"
+msgstr "Operação morfológica"
+
+#: modules/process/mask_morph.c:223
+msgid "Structuring element:"
+msgstr "Elemento estruturante:"
+
+#: modules/process/mask_morph.c:237 modules/tools/maskedit.c:528
+msgid "_Radius:"
+msgstr "_Raio:"
+
+#: modules/process/mask_morph.c:248
+msgid "_Mask:"
+msgstr "_Máscara:"
+
+#: modules/process/mask_morph.c:258
+msgid "_Trim empty borders"
+msgstr "Aparar bordas vazias"
+
+#: modules/process/mask_noisify.c:83
+msgid "Adds salt and/or pepper noise to mask."
+msgstr ""
+
+#: modules/process/mask_noisify.c:97
+#, fuzzy
+msgid "/_Mask/_Noisify..."
+msgstr "/_Máscara/_Distribuir..."
+
+#: modules/process/mask_noisify.c:101
+#, fuzzy
+msgid "Add noise to mask"
+msgstr "Adicionar seleção para máscara"
+
+#: modules/process/mask_noisify.c:141
+msgid "Noisify Mask"
+msgstr ""
+
+#: modules/process/mask_noisify.c:184
+#, fuzzy
+msgid "_Alter only boundaries"
+msgstr "Usar fronteiras"
+
+#: modules/process/maskcor.c:87
+msgid "Creates mask by correlation with another data."
+msgstr "Cria máscara por correlação com outros dados."
+
+#: modules/process/maskcor.c:101
+msgid "/M_ultidata/_Mask by Correlation..."
+msgstr "/M_ultidados/_Máscara por correlação..."
+
+#: modules/process/maskcor.c:105
+msgid "Create mask by correlation with another data"
+msgstr "Criar máscara por correlação com outros dados"
+
+#: modules/process/maskcor.c:142
+msgid "Mask by Correlation"
+msgstr "Máscara por correlação"
+
+#: modules/process/maskcor.c:166
+msgid "Correlation _kernel:"
+msgstr "Núcleo da correlação:"
+
+#: modules/process/maskcor.c:173
+msgid "Objects marked"
+msgstr "Objetos marcados"
+
+#: modules/process/maskcor.c:174
+msgid "Correlation maxima"
+msgstr "Máximo da correlação"
+
+#: modules/process/maskcor.c:175 modules/process/maskcor.c:360
+msgid "Correlation score"
+msgstr "Resultado da correlação"
+
+#: modules/process/maskcor.c:185
+msgid "Correlation _method:"
+msgstr "_Método da correlação:"
+
+#: modules/process/maskops.c:46
+msgid "Basic operations with mask: inversion, removal, extraction."
+msgstr "Operações básicas com: inversão, remoção, extração."
+
+#: modules/process/maskops.c:60
+msgid "/_Mask/_Remove Mask"
+msgstr "/_Máscara/_Remover máscara"
+
+#: modules/process/maskops.c:64
+msgid "Remove mask from data"
+msgstr "Remover máscara a partir dos dados"
+
+#: modules/process/maskops.c:67
+msgid "/_Mask/_Invert Mask"
+msgstr "/_Máscara/_Inverter máscara"
+
+#: modules/process/maskops.c:71
+msgid "Invert mask"
+msgstr "Inverter máscara"
+
+#: modules/process/maskops.c:74
+msgid "/_Mask/_Extract Mask"
+msgstr "/_Máscara/_Extrair máscara"
+
+#: modules/process/maskops.c:78
+#, fuzzy
+msgid "Extract mask to a new image"
+msgstr "Extrair máscara para um novo canal"
+
+#: modules/process/maskops.c:81
+msgid "/_Grains/_Remove Edge-Touching"
+msgstr "/_Grãos/_Remover os que tocam na borda"
+
+#: modules/process/maskops.c:85
+msgid "Remove grains touching image edges"
+msgstr "Remover grãos tocando bordas da imagem"
+
+#: modules/process/mcrop.c:60
+msgid "Crops non-intersecting regions of two images."
+msgstr "Apara regiões sem intersecção de duas imagens."
+
+#: modules/process/mcrop.c:74
+msgid "/M_ultidata/Mutual C_rop..."
+msgstr "/M_ulti-dados/Aparamento mútuo..."
+
+#: modules/process/mcrop.c:78
+msgid "Crop non-intersecting regions of two images"
+msgstr "Aparar regiões sem intersecção de duas imagens"
+
+#: modules/process/mcrop.c:153
+msgid "Mutual Crop"
+msgstr "Aparamento mútuo"
+
+#: modules/process/mcrop.c:173
+msgid "_Select second argument:"
+msgstr "_Selecionar segundo argumento:"
+
+#: modules/process/measure_lattice.c:165
+msgid "Measures parameters of two-dimensional lattices."
+msgstr "Mede parâmetros de redes bidimensionais."
+
+#: modules/process/measure_lattice.c:179
+msgid "/_Statistics/Measure _Lattice..."
+msgstr "/E_statísticas/Medir rede..."
+
+#: modules/process/measure_lattice.c:183
+msgid "Measure lattice"
+msgstr "Medir rede"
+
+#: modules/process/measure_lattice.c:243
+msgid "Measure Lattice"
+msgstr "Medir rede"
+
+#: modules/process/measure_lattice.c:320
+msgid "_ACF"
+msgstr "_ACF"
+
+#: modules/process/measure_lattice.c:321
+msgid "_PSDF"
+msgstr "_PSDF"
+
+#: modules/process/measure_lattice.c:356
+msgid "Show lattice as:"
+msgstr "Exibir rede como:"
+
+#: modules/process/measure_lattice.c:365
+msgid "_Lattice"
+msgstr "Rede"
+
+#: modules/process/measure_lattice.c:366
+msgid "_Vectors"
+msgstr "Vetores"
+
+#: modules/process/measure_lattice.c:589
+msgid "Save Lattice Parameters"
+msgstr "Salvar parâmetros de rede"
+
+#: modules/process/measure_lattice.c:627
+#, c-format
+msgid "Vector %d:"
+msgstr "Vetor %d:"
+
+#: modules/process/measure_lattice.c:636
+#, c-format
+msgid "Length %d:"
+msgstr "Comprimento %d:"
+
+#: modules/process/measure_lattice.c:643
+#, c-format
+msgid "Angle %d:"
+msgstr "Ângulo %d:"
+
+#: modules/process/measure_lattice.c:657
+msgid "Angle:"
+msgstr "Ângulo:"
+
+#: modules/process/measure_lattice.c:673
+msgid "Lattice Parameters"
+msgstr "Parâmetros de rede"
+
+#: modules/process/median-bg.c:83
+msgid "Subtracts background using a rank-based algorithm."
+msgstr "Subtrai fundo usando um algorítimo baseado em classificação."
+
+#: modules/process/median-bg.c:97
+msgid "/_Level/_Median Level..."
+msgstr "/Nive_lar/Nivelamento _mediano..."
+
+#: modules/process/median-bg.c:101
+msgid "Level data by local median subtraction"
+msgstr "Nivelar dados por subtração de mediano local"
+
+#: modules/process/median-bg.c:146
+msgid "Median-leveling..."
+msgstr "Nivelamento mediano..."
+
+#: modules/process/median-bg.c:179
+msgid "Median Level"
+msgstr "Nivelamento mediano"
+
+#: modules/process/median-bg.c:199 modules/process/sphere-revolve.c:336
+msgid "Real _radius:"
+msgstr "_Raio real:"
+
+#: modules/process/median-bg.c:209 modules/process/sphere-revolve.c:346
+msgid "_Pixel radius:"
+msgstr "Raio do _pixel:"
+
+#: modules/process/merge.c:182
+msgid "Up"
+msgstr "Acima"
+
+#: modules/process/merge.c:183
+msgid "Down"
+msgstr "Abaixo"
+
+#: modules/process/merge.c:184
+msgid "adverb|Right"
+msgstr "Direita"
+
+#: modules/process/merge.c:185
+msgid "adverb|Left"
+msgstr "Esquerda"
+
+#: modules/process/merge.c:189
+msgid "Correlation"
+msgstr "Correlação"
+
+#: modules/process/merge.c:190
+msgid "merge-mode|Join"
+msgstr "Unir"
+
+#: modules/process/merge.c:191
+msgid "merge-mode|None"
+msgstr "Nenhum"
+
+#: modules/process/merge.c:195
+msgid "First operand"
+msgstr "Primeiro operando"
+
+#: modules/process/merge.c:196
+msgid "Second operand"
+msgstr "Segundo operando"
+
+#: modules/process/merge.c:197 modules/xyz/xyz_raster.c:612
+msgid "Average"
+msgstr "Média"
+
+#: modules/process/merge.c:198
+msgid "Interpolation"
+msgstr "Interpolação"
+
+#: modules/process/merge.c:215
+msgid "Merges two images."
+msgstr "Juntar duas imagens."
+
+#: modules/process/merge.c:229
+msgid "/M_ultidata/_Merge..."
+msgstr "/M_ulti-dados/Juntar..."
+
+#: modules/process/merge.c:233
+msgid "Merge two images"
+msgstr "Juntar duas imagens"
+
+#: modules/process/merge.c:277
+msgid "Merge Data"
+msgstr "Mesclar dados"
+
+#: modules/process/merge.c:302
+msgid "_Merge with:"
+msgstr "_Mesclar com:"
+
+#: modules/process/merge.c:311
+msgid "_Put second operand:"
+msgstr "Colocar segundo operando:"
+
+#: modules/process/merge.c:318
+msgid "_Align second operand:"
+msgstr "_Alinhar segundo operando:"
+
+#: modules/process/merge.c:327
+msgid "_Boundary treatment:"
+msgstr "Limite de tratamento:"
+
+#: modules/process/merge.c:331
+msgid "Crop result to _avoid outside pixels"
+msgstr "Cortar resultados para evitar pixeis de fora"
+
+#: modules/process/merge.c:342
+msgid "Add _mask of outside pixels"
+msgstr "Adicionar máscara de pixeis de fora"
+
+#: modules/process/merge.c:821
+msgid "Merged images"
+msgstr "Imagens mescladas"
+
+#: modules/process/mfm_current.c:163
+msgid "Simulation of current line magnetic field"
+msgstr ""
+
+#: modules/process/mfm_current.c:177
+msgid "/SPM M_odes/_MFM/_Current Line Field..."
+msgstr ""
+
+#: modules/process/mfm_current.c:181
+msgid "Simulate stray field above current line"
+msgstr ""
+
+#: modules/process/mfm_current.c:280 modules/process/mfm_parallel.c:282
+msgid "Simulated field"
+msgstr ""
+
+#: modules/process/mfm_current.c:322 modules/process/mfm_field.c:266
+#: modules/process/mfm_parallel.c:324
+#, fuzzy
+msgid "Point charge"
+msgstr "Pontos em qualquer lugar"
+
+#: modules/process/mfm_current.c:323 modules/process/mfm_field.c:267
+#: modules/process/mfm_parallel.c:325
+#, fuzzy
+msgid "Bar"
+msgstr "Binário"
+
+#: modules/process/mfm_current.c:330
+msgid "Current Line Stray Field"
+msgstr ""
+
+#: modules/process/mfm_current.c:415
+#, fuzzy
+msgid "Output"
+msgstr "Tipo de saída"
+
+#: modules/process/mfm_current.c:420 modules/process/mfm_field.c:320
+#: modules/process/mfm_parallel.c:415
+#, fuzzy
+msgid "_Output plane height:"
+msgstr "Tipo de saída:"
+
+#: modules/process/mfm_current.c:428
+#, fuzzy
+msgid "_Stripe width:"
+msgstr "Largura da inclinação:"
+
+#: modules/process/mfm_current.c:436
+#, fuzzy
+msgid "Stripe _current:"
+msgstr "Listra %u: "
+
+#: modules/process/mfm_current.c:444
+#, fuzzy
+msgid "_Position:"
+msgstr "Posição:"
+
+#: modules/process/mfm_current.c:461
+msgid "Probe"
+msgstr ""
+
+#: modules/process/mfm_current.c:469
+#, fuzzy
+msgid "P_robe type:"
+msgstr "Tipo de ruído:"
+
+#: modules/process/mfm_current.c:475 modules/process/mfm_field.c:389
+#: modules/process/mfm_parallel.c:482
+#, fuzzy
+msgid "Tip _magnetization:"
+msgstr "_Rotação da ponta:"
+
+#: modules/process/mfm_current.c:484 modules/process/mfm_field.c:397
+#: modules/process/mfm_parallel.c:491
+#, fuzzy
+msgid "Bar width _x:"
+msgstr "Largura da _borda:"
+
+#: modules/process/mfm_current.c:493 modules/process/mfm_field.c:405
+#: modules/process/mfm_parallel.c:500
+#, fuzzy
+msgid "Bar width _y:"
+msgstr "Largura da _borda:"
+
+#: modules/process/mfm_current.c:502 modules/process/mfm_field.c:413
+#: modules/process/mfm_parallel.c:509
+msgid "Bar length (_z):"
+msgstr ""
+
+#: modules/process/mfm_field.c:146
+msgid "Simulation of magnetic field above perpendicular media"
+msgstr ""
+
+#: modules/process/mfm_field.c:160
+msgid "/SPM M_odes/_MFM/_Perpendicular Media Field..."
+msgstr ""
+
+#: modules/process/mfm_field.c:164
+msgid "Compute stray field above perpendicular magnetic medium"
+msgstr ""
+
+#: modules/process/mfm_field.c:276
+msgid "Perpendicular Media Stray Field"
+msgstr ""
+
+#: modules/process/mfm_field.c:328 modules/process/mfm_parallel.c:423
+#, fuzzy
+msgid "_Film thickness:"
+msgstr "Espessura da moldura"
+
+#: modules/process/mfm_field.c:336
+msgid "_Magnetic charge:"
+msgstr ""
+
+#: modules/process/mfm_field.c:344
+msgid "Include domain _walls"
+msgstr ""
+
+#: modules/process/mfm_field.c:354
+#, fuzzy
+msgid "_Exchange constant:"
+msgstr "Aleatório constante"
+
+#: modules/process/mfm_field.c:362
+msgid "_Uniaxial anisotropy:"
+msgstr ""
+
+#: modules/process/mfm_field.c:383 modules/process/mfm_parallel.c:476
+#, fuzzy
+msgid "_Probe type:"
+msgstr "Tipo de ruído:"
+
+#: modules/process/mfm_findshift.c:88
+msgid "Lift height difference estimation from data blur"
+msgstr ""
+
+#: modules/process/mfm_findshift.c:102
+msgid "/SPM M_odes/_MFM/_Estimate Shift in Z..."
+msgstr ""
+
+#: modules/process/mfm_findshift.c:106
+msgid "Estimate lift height difference in MFM data"
+msgstr ""
+
+#: modules/process/mfm_findshift.c:166 modules/process/psf.c:340
+#, fuzzy
+msgid "Searching..."
+msgstr "Escaneando..."
+
+#: modules/process/mfm_findshift.c:196
+#, fuzzy
+msgid "Estimated shift:"
+msgstr "Ponta estimada"
+
+#: modules/process/mfm_findshift.c:211
+#, fuzzy
+msgid "Shifted field difference"
+msgstr "Mediana das diferenças"
+
+#: modules/process/mfm_findshift.c:228
+msgid "Estimate Lift Height Shift"
+msgstr ""
+
+#: modules/process/mfm_findshift.c:255
+#, fuzzy
+msgid "Data to compare:"
+msgstr "Formato dos dados:"
+
+#: modules/process/mfm_findshift.c:261
+#, fuzzy
+msgid "Search _from:"
+msgstr "Intervalo de busca:"
+
+#: modules/process/mfm_findshift.c:269
+#, fuzzy
+msgid "Search _to:"
+msgstr "Intervalo de busca:"
+
+#: modules/process/mfm_parallel.c:165
+#, fuzzy
+msgid "Simulation of parallel magnetic media"
+msgstr "Parâmetros de simulação"
+
+#: modules/process/mfm_parallel.c:179
+msgid "/SPM M_odes/_MFM/Para_llel Media Field..."
+msgstr ""
+
+#: modules/process/mfm_parallel.c:183
+msgid "Simulate stray field above parallel magnetic medium"
+msgstr ""
+
+#: modules/process/mfm_parallel.c:331
+msgid "Parallel Media Stray Field"
+msgstr ""
+
+#: modules/process/mfm_parallel.c:431
+#, fuzzy
+msgid "_Remanent magnetization:"
+msgstr "_Rotação da ponta:"
+
+#: modules/process/mfm_parallel.c:439
+msgid "Size _A (dir. left):"
+msgstr ""
+
+#: modules/process/mfm_parallel.c:447
+msgid "Size _B (dir. right):"
+msgstr ""
+
+#: modules/process/mfm_parallel.c:455
+#, fuzzy
+msgid "_Gap size:"
+msgstr "Tamanho da amo_stra:"
+
+#: modules/process/mfm_shift.c:87
+msgid "Simulation of magnetic field z component change for another level"
+msgstr ""
+
+#: modules/process/mfm_shift.c:101
+msgid "/SPM M_odes/_MFM/_Field Shift in Z..."
+msgstr ""
+
+#: modules/process/mfm_shift.c:105
+msgid "Compute stray field shift for another z level"
+msgstr ""
+
+#: modules/process/mfm_shift.c:146
+msgid "Shifted field"
+msgstr ""
+
+#: modules/process/mfm_shift.c:164
+msgid "Stray Field Plane Shift"
+msgstr ""
+
+#: modules/process/mfm_shift.c:209
+#, fuzzy
+msgid "_Z shift by:"
+msgstr "Deslocamento _Z:"
+
+#: modules/process/nanoindent_adjust.c:89
+msgid "Adjust images of two indentor prints."
+msgstr "Ajustar imagens de duas impressões de indentadores."
+
+#: modules/process/nanoindent_adjust.c:103
+msgid "/_Tip and Indentation/Ad_just..."
+msgstr "/Indicação e indentação/Ajustar..."
+
+#: modules/process/nanoindent_adjust.c:107
+msgid "Adjust two nanoindentation imprints"
+msgstr "Ajustar duas impressões de nano indentação."
+
+#: modules/process/nanoindent_adjust.c:160
+msgid "Imprints adjustment"
+msgstr "Ajuste de impressão"
+
+#: modules/process/nanoindent_adjust.c:175
+msgid "_Indentor model imprint:"
+msgstr "Impressão de modelo de _indentador:"
+
+#: modules/process/nanoindent_adjust.c:186
+msgid "Imprint to be _adjusted:"
+msgstr "Impressão a ser ajustada:"
+
+#: modules/process/nanoindent_adjust.c:197
+msgid "_Move data"
+msgstr "_Mover dados"
+
+#: modules/process/nanoindent_adjust.c:206
+msgid "_Rotate data"
+msgstr "Gi_rar dados"
+
+#: modules/process/nanoindent_adjust.c:215
+msgid "E_xtrapolate result data out of measured range"
+msgstr "Extrapolar dados de resultados para fora do intervalo medido"
+
+#: modules/process/nanoindent_adjust.c:296
+msgid ""
+"Tip has different range/resolution ratio than image. Tip will be resampled."
+msgstr ""
+"Extremidade possui razão intervalo/resolução diferente da imagem. "
+"Extremidade será re-amostrada."
+
+#: modules/process/nanoindent_adjust.c:335
+msgid "Immersed detail data"
+msgstr "Dados imersos do detalhe"
+
+#: modules/process/neural.c:204
+msgid "Neural network SPM data processing"
+msgstr "Processamento de dados de rede neural SPM"
+
+#: modules/process/neural.c:230
+msgid "/M_ultidata/Neural Network _Training..."
+msgstr "/M_ulti-dados/Treinamento de rede neural..."
+
+#: modules/process/neural.c:234
+msgid "Train a neural network for image processing"
+msgstr "Treinar uma rede neural para processamento de imagem"
+
+#: modules/process/neural.c:238
+msgid "/M_ultidata/Apply _Neural Network..."
+msgstr "/M_ulti-dados/Aplicar rede _neural..."
+
+#: modules/process/neural.c:242
+msgid "Process data using a trained neural network"
+msgstr "Processar dados usando uma rede neural treinada"
+
+#. TRANSLATORS: Unnamed neural network that is/was in training.
+#: modules/process/neural.c:391
+msgid "In training"
+msgstr "Em treinamento"
+
+#: modules/process/neural.c:475
+msgid "Neural Network Training"
+msgstr "Treinamento de rede neural"
+
+#: modules/process/neural.c:494
+msgid "Training error"
+msgstr "Erro no treinamento"
+
+#: modules/process/neural.c:495
+msgid "error"
+msgstr "erro"
+
+#: modules/process/neural.c:504
+msgid "NN training error"
+msgstr "Erro no treinamento RN"
+
+#: modules/process/neural.c:517
+msgid "Training"
+msgstr "Treinando"
+
+#: modules/process/neural.c:521
+msgid "_Model:"
+msgstr "_Modelo:"
+
+#: modules/process/neural.c:532
+msgid "_Signal:"
+msgstr "_Sinal:"
+
+#: modules/process/neural.c:544
+msgid "Training ste_ps:"
+msgstr "Passos do treinamento:"
+
+#: modules/process/neural.c:561
+msgid "Model"
+msgstr "Modelo"
+
+#: modules/process/neural.c:562
+msgid "Signal"
+msgstr "Sinal"
+
+#: modules/process/neural.c:579
+msgid "verb|_Train"
+msgstr "Treinar"
+
+#: modules/process/neural.c:584
+msgid "Re_initialize"
+msgstr "Re_inicializar"
+
+#: modules/process/neural.c:617
+msgid "Network"
+msgstr "Rede"
+
+#: modules/process/neural.c:623
+msgid "Window _width:"
+msgstr "Largura da janela:"
+
+#: modules/process/neural.c:631
+msgid "Window h_eight:"
+msgstr "Altura da janela:"
+
+#: modules/process/neural.c:639
+msgid "_Hidden nodes:"
+msgstr "Nodos escondidos:"
+
+#: modules/process/neural.c:647
+msgid "Result Units"
+msgstr "Unidades do resultado"
+
+#: modules/process/neural.c:654
+msgid "Power of source _XY:"
+msgstr "Potência da fonte _XY:"
+
+#: modules/process/neural.c:663
+msgid "Power of source _Z:"
+msgstr "Potência da fonte _Z:"
+
+#: modules/process/neural.c:672
+msgid "_Fixed units:"
+msgstr "Unidades fixas:"
+
+#: modules/process/neural.c:683
+msgid "Networks"
+msgstr "Redes"
+
+#: modules/process/neural.c:730
+msgid "Network _name:"
+msgstr "_Nome da rede:"
+
+#: modules/process/neural.c:782
+msgid "Apply Neural Network"
+msgstr "Aplicar rede neural"
+
+#: modules/process/neural.c:805
+msgid "_Scale proportionally to input"
+msgstr "Dimensionar escala proporcionalmente à entrada"
+
+#: modules/process/neural.c:936
+msgid "Model and signal are not compatible."
+msgstr "Modelo e sinal não são compatíveis."
+
+#: modules/process/neural.c:944
+msgid "A field dimension is too small for chosen window size."
+msgstr ""
+"Uma dimensão de campo é muito pequena para o tamanho da janela escolhida."
+
+#: modules/process/neural.c:1190 modules/process/neural.c:1356
+msgid "Evaluating..."
+msgstr "Avaliando..."
+
+#: modules/process/neural.c:1316
+msgid "Training was canceled."
+msgstr "O treinamento foi cancelado."
+
+#: modules/process/neural.c:1326
+#, c-format
+msgid "Mean difference: %.*f %s"
+msgstr "Diferença média: %.*f %s"
+
+#: modules/process/neural.c:1378
+msgid "Evaluated signal"
+msgstr "Sinal avaliado"
+
+#: modules/process/noise_synth.c:194
+msgid "Generates uncorrelated random noise."
+msgstr "Gera ruídos aleatórios não correlacionados."
+
+#: modules/process/noise_synth.c:208
+msgid "/S_ynthetic/_Noise..."
+msgstr "/Sintético/Ruído..."
+
+#: modules/process/noise_synth.c:212
+msgid "Generate surface of uncorrelated noise"
+msgstr "Gera superfície de ruídos não correlacionados"
+
+#: modules/process/noise_synth.c:332
+msgid "Random Noise"
+msgstr "Ruído aleatório"
+
+#: modules/process/obj_synth.c:270
+msgid "Spheres"
+msgstr "Esferas"
+
+#: modules/process/obj_synth.c:271
+msgid "Boxes"
+msgstr "Caixas"
+
+#: modules/process/obj_synth.c:272
+msgid "Cones"
+msgstr "Cones"
+
+#: modules/process/obj_synth.c:273
+msgid "Pyramids"
+msgstr "Pirâmides"
+
+#: modules/process/obj_synth.c:274
+msgid "Diamonds"
+msgstr "Diamantes"
+
+#: modules/process/obj_synth.c:275
+msgid "Tetrahedrons"
+msgstr "Tetraedros"
+
+#: modules/process/obj_synth.c:276
+msgid "Nuggets"
+msgstr "Pepitas"
+
+#: modules/process/obj_synth.c:277
+msgid "Thatches"
+msgstr "Porcas"
+
+#: modules/process/obj_synth.c:278
+msgid "Tents"
+msgstr "Tendas"
+
+#: modules/process/obj_synth.c:279
+msgid "Gaussians"
+msgstr "Gaussianas"
+
+#: modules/process/obj_synth.c:280
+msgid "Doughnuts"
+msgstr "Roscas"
+
+#: modules/process/obj_synth.c:281
+#, fuzzy
+msgid "Parabolic bumps"
+msgstr "Passo parabólico"
+
+#: modules/process/obj_synth.c:287
+msgid "Generates randomly patterned surfaces by placing objects."
+msgstr "Gera superfícies padronizadas aleatórias colocando objetos."
+
+#: modules/process/obj_synth.c:301
+#, fuzzy
+msgid "/S_ynthetic/_Deposition/_Objects..."
+msgstr "/Sintético/_Objetos..."
+
+#: modules/process/obj_synth.c:305
+msgid "Generate surface of randomly placed objects"
+msgstr "Gerar superfície de objetos posicionados aleatoriamente"
+
+#: modules/process/obj_synth.c:421
+msgid "Both (random)"
+msgstr "Ambos (aleatório)"
+
+#: modules/process/obj_synth.c:436
+msgid "Random Objects"
+msgstr "Objetos aleatórios"
+
+#: modules/process/obj_synth.c:549
+msgid "Aspect Ratio"
+msgstr "Razão de aspecto"
+
+#: modules/process/obj_synth.c:556
+msgid "_Aspect ratio:"
+msgstr "Razão de _aspecto:"
+
+#: modules/process/obj_synth.c:586
+msgid "Scales _with size"
+msgstr "Dimensiona escala com tamanho"
+
+#: modules/process/obj_synth.c:611
+msgid "_Feature type:"
+msgstr "Tipo de característica:"
+
+#: modules/process/otsu_threshold.c:40 modules/process/otsu_threshold.c:60
+msgid "Automated threshold using Otsu's method on heights."
+msgstr "Limiar automático usando o método de Otsu nas alturas."
+
+#: modules/process/otsu_threshold.c:56
+#, fuzzy
+msgid "/_Grains/_Mark by Otsu's"
+msgstr "/_Grãos/_Marcar por Otsu..."
+
+#: modules/process/outliers.c:41
+msgid "Creates mask of outliers."
+msgstr "Cria máscara de isolados."
+
+#: modules/process/outliers.c:55
+msgid "/_Correct Data/Mask of _Outliers"
+msgstr "/_Corrigir dados/Máscara de isolados"
+
+#: modules/process/outliers.c:59
+msgid "Mark data farther than 3σ from mean value"
+msgstr "Marcar dados mais distantes do que 3σ do valor médio"
+
+#: modules/process/pat_synth.c:221
+msgid "Generates surfaces representing simple patterns (steps, ridges, ...)."
+msgstr "Gera superfícies representando padrões simples (passos, cumes, ...)."
+
+#: modules/process/pat_synth.c:236
+msgid "/S_ynthetic/_Pattern..."
+msgstr "/Sintético/_Padrão..."
+
+#: modules/process/pat_synth.c:240
+msgid "Generate patterned surface"
+msgstr "Gerar superfície padronizada"
+
+#: modules/process/pat_synth.c:383
+msgid "Pattern"
+msgstr "Padrão"
+
+#: modules/process/pat_synth.c:458
+msgid "_Pattern:"
+msgstr "_Padrão:"
+
+#: modules/process/pat_synth.c:813
+msgid "Flat"
+msgstr "Achatado"
+
+#: modules/process/pat_synth.c:821
+msgid "_Flat width:"
+msgstr "Largura do achatamento:"
+
+#: modules/process/pat_synth.c:838 modules/process/pat_synth.c:1140
+#: modules/process/pat_synth.c:1475
+msgid "_Slope width:"
+msgstr "Largura da inclinação:"
+
+#: modules/process/pat_synth.c:1100
+msgid "Top"
+msgstr "Topo"
+
+#: modules/process/pat_synth.c:1107
+msgid "Flat _top width:"
+msgstr "Largura do _topo achatado:"
+
+#: modules/process/pat_synth.c:1115
+msgid "Bottom"
+msgstr "Base"
+
+#: modules/process/pat_synth.c:1123
+msgid "Flat _bottom width:"
+msgstr "Largura da _base achatada:"
+
+#: modules/process/pat_synth.c:1441
+msgid "_Distance:"
+msgstr "_Distância:"
+
+#: modules/process/phase_synth.c:136
+#, fuzzy
+msgid "Generates phase-separated structures."
+msgstr "Gerar superfície padronizada"
+
+#: modules/process/phase_synth.c:150
+#, fuzzy
+msgid "/S_ynthetic/P_hases..."
+msgstr "/Sintético/Ondas..."
+
+#: modules/process/phase_synth.c:154
+#, fuzzy
+msgid "Generate surface with separated phases"
+msgstr "Gera superfície de ruídos não correlacionados"
+
+#: modules/process/phase_synth.c:203
+#, fuzzy
+msgid "Separated Phases"
+msgstr "_Separar curvas"
+
+#: modules/process/phase_synth.c:287
+msgid "Size s_pread:"
+msgstr ""
+
+#: modules/process/pid.c:95
+msgid "A simple PID simulator"
+msgstr "Um similador PID simples"
+
+#: modules/process/pid.c:109
+msgid "/_Tip and Indentation/_PID simulation..."
+msgstr "/Indicação e indentação/Simulação _PID..."
+
+#: modules/process/pid.c:113
+msgid "Simulate PID effects on measurement"
+msgstr "Simular efeitos PID na medida"
+
+#: modules/process/pid.c:157
+msgid "PID FW result"
+msgstr "Resultado PID direto"
+
+#: modules/process/pid.c:166
+msgid "PID FW max. force"
+msgstr "Força máxima do PID direto"
+
+#: modules/process/pid.c:175
+msgid "PID REV result"
+msgstr "Resultado PID reverso"
+
+#: modules/process/pid.c:184
+msgid "PID REV max. force"
+msgstr "Força máxima do PID reverso"
+
+#: modules/process/pid.c:196
+msgid "PID simulation"
+msgstr "Simulação PID"
+
+#: modules/process/pid.c:214
+msgid "_Proportional:"
+msgstr "_Proporcional:"
+
+#: modules/process/pid.c:220
+msgid "_Integral:"
+msgstr "_Integral:"
+
+#: modules/process/pid.c:226
+msgid "_Integration steps:"
+msgstr "Passos da _integração:"
+
+#: modules/process/pid.c:234
+msgid "_Derivative:"
+msgstr "_Derivada:"
+
+#: modules/process/pid.c:240
+msgid "PID/scan speed _ratio:"
+msgstr "_Razão de velocidade PID/escaneamento:"
+
+#: modules/process/pid.c:255
+msgid "Force strength:"
+msgstr "Forçar resistência:"
+
+#: modules/process/pid.c:261
+msgid "Force setpoint:"
+msgstr "Forçar definição de ponto:"
+
+#: modules/process/pid.c:362
+msgid "Scanning..."
+msgstr "Escaneando..."
+
+#: modules/process/pid.c:401
+msgid "Computation diverged, try to change parameters"
+msgstr "O cálculo divergiu, tente modificar os parâmetros"
+
+#: modules/process/polydistort.c:134
+msgid "Applies polynomial distortion in the horizontal plane."
+msgstr "Aplica distorção polinomial no plano horizontal."
+
+#: modules/process/polydistort.c:148
+msgid "/_Distortion/Pol_ynomial..."
+msgstr "/_Distorção/Polinomial..."
+
+#: modules/process/polydistort.c:152
+msgid "Applies polynomial distortion in the horizontal plane"
+msgstr "Aplica distorção polinomial no plano horizontal"
+
+#: modules/process/polydistort.c:202
+msgid "Distort by Polynomial"
+msgstr "Distorcer por polinomial"
+
+#: modules/process/polydistort.c:285
+msgid "Ori_ginal"
+msgstr "Ori_ginal"
+
+#: modules/process/polydistort.c:286
+msgid "_Transformed"
+msgstr "_Transformado"
+
+#: modules/process/polydistort.c:292
+msgid "X Coefficients"
+msgstr "Coeficientes X"
+
+#: modules/process/polydistort.c:306
+msgid "Y Coefficients"
+msgstr "Coeficientes Y"
+
+#: modules/process/polydistort.c:502
+msgid "Distorted"
+msgstr "Distorcido"
+
+#: modules/process/polylevel.c:143
+msgid "Subtracts polynomial background."
+msgstr "Subtrai fundo polinomial."
+
+#: modules/process/polylevel.c:157
+msgid "/_Level/_Polynomial Background..."
+msgstr "/Nive_lar/Fundo _polinomial..."
+
+#: modules/process/polylevel.c:161
+msgid "Remove polynomial background"
+msgstr "Remove fundo polinomial"
+
+#: modules/process/polylevel.c:358
+msgid "Independent degrees"
+msgstr "Graus independentes"
+
+#: modules/process/polylevel.c:359
+msgid "Limited total degree"
+msgstr "Grau total limitado"
+
+#: modules/process/polylevel.c:371
+msgid "Remove Polynomial Background"
+msgstr "Remove fundo polinomial"
+
+#: modules/process/polylevel.c:412
+msgid "Leveled data"
+msgstr "Dados nivelados"
+
+#: modules/process/polylevel.c:442
+msgid "_Horizontal polynom degree:"
+msgstr "Grau do polinômio _horizontal:"
+
+#: modules/process/polylevel.c:451
+msgid "_Vertical polynom degree:"
+msgstr "Grau do polinômio _vertical:"
+
+#: modules/process/polylevel.c:458
+msgid "_Same degrees"
+msgstr "Mesmos graus"
+
+#: modules/process/polylevel.c:476
+msgid "_Maximum polynom degree:"
+msgstr "Grau _máximo do polinômio:"
+
+#: modules/process/polylevel.c:564
+msgid "Polynomial Coefficients"
+msgstr "Coeficientes polinomiais"
+
+#: modules/process/polylevel.c:937 modules/tools/distance.c:594
+#: modules/tools/selectionmanager.c:720
+msgid "Save Table"
+msgstr "Salvar tabela"
+
+#: modules/process/presentationops.c:56
+msgid "Basic operations with presentation: extraction, removal."
+msgstr "Operações básicas com apresentação: extração, remoção."
+
+#: modules/process/presentationops.c:70
+msgid "/_Presentation/_Remove Presentation"
+msgstr "/A_presentação/_Remover apresentação"
+
+#: modules/process/presentationops.c:74
+msgid "Remove presentation from data"
+msgstr "Remover apresentação a partir dos dados"
+
+#: modules/process/presentationops.c:77
+msgid "/_Presentation/E_xtract Presentation"
+msgstr "/A_presentação/E_xtrair apresentação"
+
+#: modules/process/presentationops.c:81
+#, fuzzy
+msgid "Extract presentation to a new image"
+msgstr "Extrair apresentação para um novo canal"
+
+#: modules/process/presentationops.c:84
+msgid "/_Presentation/_Attach Presentation..."
+msgstr "/A_presentação/_Anexar apresentação..."
+
+#: modules/process/presentationops.c:88
+msgid "Attach another data field as presentation"
+msgstr "Anexar outro campo de dados como apresentação"
+
+#: modules/process/presentationops.c:91
+msgid "/_Presentation/_Logscale"
+msgstr "/A_presentação/Escala _logarítmica"
+
+#: modules/process/presentationops.c:95
+msgid "Creates a presentation with logarithmic color scale"
+msgstr "Cria apresentação com escala de cores logarítmica"
+
+#: modules/process/presentationops.c:216
+msgid "Attach Presentation"
+msgstr "Anexar apresentação"
+
+#: modules/process/presentationops.c:230
+msgid "_Data to attach:"
+msgstr "_Dados para anexar:"
+
+#: modules/process/preview.h:245
+#, fuzzy
+msgid "Combine with existing mask:"
+msgstr "Com_binar com máscara existente"
+
+#: modules/process/psdf_logphi.c:76
+msgid ""
+"Two-dimensional FFT (Fast Fourier Transform) transformed to coordinates (log-"
+"frequency, angle)."
+msgstr ""
+"FFT (transformada de Fourier rápida) bidimensional transformada para "
+"coordenadas (log-frequência, ângulo)."
+
+#: modules/process/psdf_logphi.c:91
+msgid "/_Statistics/_Log-Phi PSDF..."
+msgstr "/E_statísticas/PSDF _Log-Phi..."
+
+#: modules/process/psdf_logphi.c:95
+msgid "Compute PSDF in Log-Phi coordinates"
+msgstr "Calcular PSDF em coordenadas Log-Phi."
+
+#: modules/process/psdf_logphi.c:248
+msgid "Log-Phi PSDF"
+msgstr "PSDF Log-Phi"
+
+#: modules/process/psdf_logphi.c:276 modules/process/wpour_mark.c:320
+msgid "Gaussian _smoothing:"
+msgstr "_Suavização gaussiana:"
+
+#: modules/process/psf-fit.c:165
+#, fuzzy
+msgid "Gaussian (asymmetric)"
+msgstr "_Suavização gaussiana:"
+
+#: modules/process/psf-fit.c:177
+msgid "Point spread function estimation by fitting explicit function form."
+msgstr ""
+
+#: modules/process/psf-fit.c:191
+#, fuzzy
+msgid "/_Statistics/_PSF Fit..."
+msgstr "/E_statísticas/Secção _PSDF..."
+
+#: modules/process/psf-fit.c:195
+msgid "Fit PSF from known data and image"
+msgstr ""
+
+#: modules/process/psf-fit.c:246 modules/process/psf.c:181
+#: modules/process/psf.c:230
+#, fuzzy
+msgid "PSF"
+msgstr "PSDF"
+
+#: modules/process/psf-fit.c:254 modules/process/psf.c:195
+msgid "PSF*P"
+msgstr ""
+
+#: modules/process/psf-fit.c:271
+#, fuzzy
+msgid "Fit PSF"
+msgstr "Ajustar forma"
+
+#: modules/process/psf-fit.c:289 modules/process/psf.c:286
+msgid "_Ideal response:"
+msgstr ""
+
+#: modules/process/psf.c:117
+#, fuzzy
+msgid "Point spread function estimation"
+msgstr "Estimativa cega da ponta."
+
+#: modules/process/psf.c:131
+#, fuzzy
+msgid "/_Statistics/_PSF Guess..."
+msgstr "/E_statísticas/Secção _PSDF..."
+
+#: modules/process/psf.c:135
+msgid "Estimate PSF from known data and image"
+msgstr ""
+
+#: modules/process/psf.c:208
+msgid "PSF*P - I"
+msgstr ""
+
+#: modules/process/psf.c:231
+#, fuzzy
+msgid "Convolved"
+msgstr "Convoluído _LoG"
+
+#: modules/process/psf.c:237
+#, fuzzy
+msgid "Estimate PSF"
+msgstr "Estimar"
+
+#: modules/process/psf.c:238
+#, fuzzy
+msgid "_Fit"
+msgstr "Ajustar"
+
+#: modules/process/psf.c:295
+#, fuzzy
+msgid "_Display:"
+msgstr "Exibir:"
+
+#: modules/process/psf.c:301
+#, fuzzy
+msgid "_Sigma init:"
+msgstr "_Sinal:"
+
+#: modules/process/rank.c:92
+msgid "Enhances local contrast using a rank transform."
+msgstr "Melhorar contraste local usando uma transformada de classificação."
+
+#: modules/process/rank.c:106
+msgid "/_Presentation/_Rank..."
+msgstr "/A_presentação/Classificação..."
+
+#: modules/process/rank.c:110
+msgid "Presentation with local contrast ehnanced using a rank transform"
+msgstr ""
+"Apresentação com contraste local melhorado usando uma transformada de "
+"classificação."
+
+#: modules/process/rank.c:144
+msgid "Rank transform"
+msgstr "Transformada de classificação"
+
+#: modules/process/rank.c:145
+msgid "Local normalization"
+msgstr "Normalização local"
+
+#: modules/process/rank.c:146
+msgid "Value range"
+msgstr "Intervalo de valor"
+
+#: modules/process/rank.c:156
+msgid "Rank Transform"
+msgstr "Transformada de classificação"
+
+#: modules/process/rank.c:173
+msgid "Filter type:"
+msgstr "Tipo de filtro:"
+
+#: modules/process/rank.c:269
+msgid "Rank transform..."
+msgstr "Transformada de classificação..."
+
+#: modules/process/rotate.c:96
+msgid "Rotates data by arbitrary angle."
+msgstr "Gira dados por um ângulo arbitrário."
+
+#: modules/process/rotate.c:110
+msgid "/_Basic Operations/Rotate by _Angle..."
+msgstr "/Operações _básicas/Girar por ângulo..."
+
+#: modules/process/rotate.c:114
+msgid "Rotate by arbitrary angle"
+msgstr "Girar por um ângulo arbitrário"
+
+#: modules/process/rotate.c:192 modules/volume/volume_swaxes.c:651
+msgid "Rotated Data"
+msgstr "Dados girados"
+
+#: modules/process/rotate.c:242
+msgid "Rotate"
+msgstr "Girar"
+
+#: modules/process/rotate.c:264
+msgid "Rotate by _angle:"
+msgstr "Girar por ângulo:"
+
+#: modules/process/rotate.c:280
+msgid "Show _grid"
+msgstr "Mostrar _grade"
+
+#: modules/process/rotate.c:290
+msgid "Create _mask over exterior"
+msgstr "Criar máscara sobre exterior"
+
+#: modules/process/rotate.c:300
+msgid "Result size:"
+msgstr "Tamanho do resultado:"
+
+#: modules/process/rotate.c:309
+msgid "_Same as original"
+msgstr "Me_smo que o original"
+
+#: modules/process/rotate.c:311
+msgid "_Expanded to complete data"
+msgstr "_Expandido para completar dados"
+
+#: modules/process/rotate.c:313
+msgid "C_ut to valid data"
+msgstr "Cortar para dados válidos"
+
+#: modules/process/scale.c:93
+msgid "Scales data by arbitrary factor."
+msgstr "Escala dados em um fator arbitrário."
+
+#: modules/process/scale.c:107
+msgid "/_Basic Operations/_Scale..."
+msgstr "/Operações _básicas/Escalar..."
+
+#: modules/process/scale.c:111
+msgid "Scale data"
+msgstr "Escalar dados"
+
+#: modules/process/scale.c:183
+msgid "Scaled Data"
+msgstr "Dados escalados"
+
+#: modules/process/scale.c:195
+msgid "verb|Scale"
+msgstr "Escalar"
+
+#: modules/process/scale.c:217
+msgid "Scale by _ratio:"
+msgstr "Escalar por _razão:"
+
+#: modules/process/scale.c:225
+msgid "_proportional"
+msgstr "_Proporcional"
+
+#: modules/process/scale.c:237
+msgid "New _width:"
+msgstr "Nova largura:"
+
+#: modules/process/scale.c:246
+msgid "New _height:"
+msgstr "Nova altura:"
+
+#: modules/process/scars.c:122
+msgid "Marks and/or removes scars (horizontal linear artifacts)."
+msgstr "Marca e/ou remove ranhuras (artefatos lineares horizontais)."
+
+#: modules/process/scars.c:136
+msgid "/_Correct Data/M_ark Scars..."
+msgstr "/_Corrigir dados/M_arcar ranhuras..."
+
+#: modules/process/scars.c:140
+msgid "Mark horizontal scars (strokes)"
+msgstr "Marcar ranhuras horizontais (golpes)"
+
+#: modules/process/scars.c:143
+msgid "/_Correct Data/Remove _Scars"
+msgstr "/_Corrigir dados/Remover ranhuras"
+
+#: modules/process/scars.c:147
+msgid "Correct horizontal scars (strokes)"
+msgstr "Corrigir ranhuras horizontais (golpes)"
+
+#: modules/process/scars.c:312
+msgid "Mark Scars"
+msgstr "Marcar ranhuras"
+
+#: modules/process/scars.c:353
+msgid "Maximum _width:"
+msgstr "Largura máxima:"
+
+#: modules/process/scars.c:361
+msgid "Minimum _length:"
+msgstr "Comprimento mínimo:"
+
+#: modules/process/scars.c:369
+msgid "_Hard threshold:"
+msgstr "Limiar rígido:"
+
+#: modules/process/scars.c:377
+msgid "_Soft threshold:"
+msgstr "Limiar suave:"
+
+#: modules/process/scars.c:385
+msgid "Scars type:"
+msgstr "Tipo de ranhuras:"
+
+#: modules/process/semsim.c:118
+msgid "Simple SEM image simulation from topography."
+msgstr "Simulação de imagem SEM simples a partir de topografia."
+
+#: modules/process/semsim.c:132
+msgid "/_Presentation/_SEM Image..."
+msgstr "/A_presentação/Imagem _SEM..."
+
+#: modules/process/semsim.c:136
+msgid "Simple SEM simulation from topography"
+msgstr "Simulação SEM simples a partir de topografia"
+
+#: modules/process/semsim.c:167 modules/process/semsim.c:209
+msgid "SEM Image"
+msgstr "Imagem SEM"
+
+#: modules/process/semsim.c:186
+msgid "SEM image simulation..."
+msgstr "Simulação de imagem SEM..."
+
+#: modules/process/semsim.c:227
+msgid "_Integration radius:"
+msgstr "Raio de _integração:"
+
+#: modules/process/semsim.c:258
+msgid "Integration"
+msgstr "Integração"
+
+#: modules/process/semsim.c:260
+msgid "Monte Carlo"
+msgstr "Monte Carlo"
+
+#: modules/process/semsim.c:267
+msgid "_Quality:"
+msgstr "_Qualidade:"
+
+#: modules/process/shade.c:94
+msgid "Creates a shaded presentation of data."
+msgstr "Cria uma apresentação sombreada de dados."
+
+#: modules/process/shade.c:108
+msgid "/_Presentation/_Shading..."
+msgstr "/A_presentação/_Sombreamento..."
+
+#: modules/process/shade.c:112
+msgid "Shade data"
+msgstr "Dados sombreados"
+
+#: modules/process/shade.c:209
+msgid "Shading"
+msgstr "Sombreando"
+
+#: modules/process/shade.c:260
+msgid "_Mix:"
+msgstr "_Mistura:"
+
+#: modules/process/slope_dist.c:160
+msgid ""
+"Calculates one- or two-dimensional distribution of slopes or graph of their "
+"angular distribution."
+msgstr ""
+"Calcula distribuição uni- ou bidimensional de inclinações ou gráfico de suas "
+"distribuições angulares."
+
+#: modules/process/slope_dist.c:175
+msgid "/_Statistics/_Slope Distribution..."
+msgstr "/E_statísticas/Distribuição de inclinação..."
+
+#: modules/process/slope_dist.c:179
+msgid "Calculate angular slope distribution"
+msgstr "Calcular distribuição de inclinação angular"
+
+#: modules/process/slope_dist.c:220
+msgid "Slope distribution"
+msgstr "Distribuição de inclinações"
+
+#: modules/process/slope_dist.c:252
+msgid "_Two-dimensional distribution"
+msgstr "Distribuição bidimensional"
+
+#: modules/process/slope_dist.c:253
+msgid "Directional (φ) _graph"
+msgstr "_Gráfico direcional (φ)"
+
+#: modules/process/slope_dist.c:254
+msgid "_Inclination (θ) graph"
+msgstr "Gráfico de _inclinação (θ)"
+
+#: modules/process/slope_dist.c:255
+msgid "Inclination (gra_dient) graph"
+msgstr "Gráfico de inclinação (gra_diente)"
+
+#: modules/process/slope_dist.c:269
+msgid "Slope Distribution"
+msgstr "Distribuição de inclinações"
+
+#: modules/process/slope_dist.c:749
+msgid "Angular Slope Distribution"
+msgstr "Distribuição de inclinação angular"
+
+#: modules/process/slope_dist.c:757 modules/process/tilt.c:179
+msgid "Slopes"
+msgstr "Inclinações"
+
+#: modules/process/slope_dist.c:818 modules/process/slope_dist.c:887
+msgid "Inclination Distribution"
+msgstr "Distribuição de inclinações"
+
+#: modules/process/slope_dist.c:826 modules/process/slope_dist.c:895
+msgid "Inclinations"
+msgstr "Inclinações"
+
+#: modules/process/sphere-revolve.c:111
+msgid "Subtracts background by arc or sphere revolution."
+msgstr "Subtrai fundo por revolução de arco ou esfera."
+
+#: modules/process/sphere-revolve.c:125
+msgid "/_Level/Revolve _Arc..."
+msgstr "/Nive_lar/Revolver _arco..."
+
+#: modules/process/sphere-revolve.c:129
+msgid "Level data by arc revolution"
+msgstr "Nivelar dados por revolução de arco"
+
+#: modules/process/sphere-revolve.c:132
+#, fuzzy
+msgid "/_Level/Revolve _Sphere..."
+msgstr "/Nive_lar/Revolver _arco..."
+
+#: modules/process/sphere-revolve.c:136
+#, fuzzy
+msgid "Level data by sphere revolution"
+msgstr "Nivelar dados por revolução de arco"
+
+#: modules/process/sphere-revolve.c:303 modules/tools/sfunctions.c:381
+msgid "_Horizontal direction"
+msgstr "Direção _horizontal"
+
+#: modules/process/sphere-revolve.c:304 modules/tools/sfunctions.c:382
+msgid "_Vertical direction"
+msgstr "Direção _vertical"
+
+#: modules/process/sphere-revolve.c:305
+msgid "_Both directions"
+msgstr "Ambas direções"
+
+#: modules/process/sphere-revolve.c:315
+#, fuzzy
+msgid "Revolve Sphere"
+msgstr "Revolver arco"
+
+#: modules/process/sphere-revolve.c:315
+msgid "Revolve Arc"
+msgstr "Revolver arco"
+
+#: modules/process/sphere-revolve.c:355
+msgid "Direction:"
+msgstr "Direção:"
+
+#: modules/process/sphere-revolve.c:699
+#, fuzzy
+msgid "Revolving sphere..."
+msgstr "Relaxando alturas..."
+
+#: modules/process/stitch.c:135
+msgid "Stitch multiple images based on offsets of origins."
+msgstr ""
+
+#: modules/process/stitch.c:149
+#, fuzzy
+msgid "/M_ultidata/_Stitch..."
+msgstr "/M_ulti-dados/_Aritmética..."
+
+#: modules/process/stitch.c:153
+msgid "Stitch images using offsets"
+msgstr ""
+
+#: modules/process/stitch.c:269
+msgid "Stitch"
+msgstr ""
+
+#: modules/process/stitch.c:312
+msgid "Channels"
+msgstr "Canais"
+
+#: modules/process/stitch.c:435
+#, fuzzy
+msgid "Restore"
+msgstr "Res_taurar"
+
+#: modules/process/stitch.c:445 modules/tools/linestats.c:379
+#: modules/tools/sfunctions.c:440 modules/tools/stats.c:406
+msgid "_Instant updates"
+msgstr "Atualizações _instantâneas"
+
+#: modules/process/straighten_path.c:126
+msgid "Extracts a straightened part of image along a curve."
+msgstr "Extrai uma parte corrigida de imagem ao longo de uma curva."
+
+#: modules/process/straighten_path.c:140
+msgid "/_Distortion/Straighten _Path..."
+msgstr "/_Distorção/Corrigir caminho..."
+
+#: modules/process/straighten_path.c:144
+msgid "Straighten along a path"
+msgstr "Corrigir ao longo de um caminho"
+
+#: modules/process/straighten_path.c:194
+msgid "Straighten Path"
+msgstr "Corrigir caminho"
+
+#: modules/process/straighten_path.c:253
+msgid "Res_tore"
+msgstr "Res_taurar"
+
+#: modules/process/straighten_path.c:258
+msgid "Re_verse"
+msgstr "Re_verter"
+
+#: modules/process/straighten_path.c:278 modules/tools/pathlevel.c:256
+#: modules/tools/profile.c:503 modules/tools/roughness.c:868
+msgid "_Thickness:"
+msgstr "Espessura:"
+
+#: modules/process/straighten_path.c:287
+msgid "_Slackness:"
+msgstr "Frouxidão:"
+
+#: modules/process/straighten_path.c:293
+msgid "C_losed curve"
+msgstr "Curva fechada"
+
+#: modules/process/straighten_path.c:380
+msgid "Straightened"
+msgstr "Corrigido"
+
+#: modules/process/superresolution.c:83
+msgid ""
+"Simple supres operations with two data fields (or a data field and a scalar)."
+msgstr ""
+"Operações de supressão simples com dois campos de dados (ou um campo de "
+"dados e um escalar)."
+
+#: modules/process/superresolution.c:98
+msgid "/M_ultidata/_Super-resolution..."
+msgstr "/M_ulti-dados/_Super resolução..."
+
+#: modules/process/superresolution.c:102
+msgid "Super resolution of multiple images of same object"
+msgstr "Super resolução de imagens múltiplas do mesmo objeto"
+
+#: modules/process/superresolution.c:141
+msgid "Supres"
+msgstr "Suprimir"
+
+#: modules/process/superresolution.c:420
+msgid "Correlating to determine mean shift..."
+msgstr "Correlacionando para determinar o deslocamento médio..."
+
+#: modules/process/superresolution.c:510
+msgid "Cross-correlation..."
+msgstr "Correlação cruzada..."
+
+#: modules/process/superresolution.c:553 modules/xyz/xyz_raster.c:1053
+#: modules/xyz/xyz_raster.c:1093
+msgid "Interpolating..."
+msgstr "Interpolando..."
+
+#: modules/process/synth.h:344
+msgid "Roundness"
+msgstr "Arredondamento"
+
+#: modules/process/synth.h:352
+msgid "Roundn_ess:"
+msgstr "Arr_edondamento:"
+
+#: modules/process/synth.h:401
+msgid "Orientation"
+msgstr "Orientação"
+
+#: modules/process/synth.h:410
+msgid "Orien_tation:"
+msgstr "Orien_tação:"
+
+#: modules/process/synth.h:436
+msgid "_Truncate:"
+msgstr "_Truncar:"
+
+#: modules/process/synth.h:460
+msgid "Variance:"
+msgstr "Variância:"
+
+#: modules/process/synth.h:493
+msgid "_Amplitude:"
+msgstr "_Amplitude:"
+
+#: modules/process/synth.h:501
+msgid "_Lateral scale:"
+msgstr "Escala _lateral:"
+
+#: modules/process/synth.h:595
+msgid "Randomi_ze"
+msgstr "Tornar aleatório"
+
+#: modules/process/threshold.c:118
+msgid "Limit the data range using a lower/upper threshold."
+msgstr "Limitar o intervalo de dados usando um limite inferior/superior."
+
+#: modules/process/threshold.c:132
+msgid "/_Basic Operations/Li_mit range..."
+msgstr "/Operações _básicas/Li_mitar intervalo..."
+
+#: modules/process/threshold.c:136
+msgid "Limit data range"
+msgstr "Limitar o intervalo de dados"
+
+#: modules/process/threshold.c:241
+msgid "Limit Range"
+msgstr "Limitar intervalo"
+
+#: modules/process/threshold.c:276
+msgid "Specify _thresholds"
+msgstr "Especificar limites"
+
+#: modules/process/threshold.c:278
+msgid "Use _display range"
+msgstr "Usar intervalo mostrado"
+
+#: modules/process/threshold.c:280
+msgid "Cut off outlier_s"
+msgstr "Cortar isolados"
+
+#: modules/process/threshold.c:289
+msgid "_Lower:"
+msgstr "Inferior:"
+
+#: modules/process/threshold.c:295
+msgid "_Upper:"
+msgstr "Superior:"
+
+#: modules/process/threshold.c:300
+msgid "Set to _Full Range"
+msgstr "Definir para escala completa"
+
+#. TRANSLATORS: This is a range: 123 to 456.
+#: modules/process/threshold.c:313
+#, c-format
+msgid "%.*f to %.*f"
+msgstr "%.*f para %.*f"
+
+#: modules/process/threshold.c:336
+msgid "F_arther than:"
+msgstr "Mais longe que:"
+
+#: modules/process/tilt.c:76
+msgid "Tilts image by specified amount."
+msgstr "Inclinar imagem por uma quantidade especificada."
+
+#: modules/process/tilt.c:90
+msgid "/_Basic Operations/_Tilt..."
+msgstr "/Operações _básicas/Inclinar..."
+
+#: modules/process/tilt.c:94
+msgid "Tilt by specified amount"
+msgstr "Inclinar imagem por uma quantidade especificada"
+
+#: modules/process/tilt.c:160
+msgid "Tilt"
+msgstr "Inclinar"
+
+#: modules/process/tilt.c:185 modules/volume/volume_slice.c:446
+msgid "_X:"
+msgstr "_X:"
+
+#: modules/process/tilt.c:194 modules/volume/volume_slice.c:469
+msgid "_Y:"
+msgstr "_Y:"
+
+#: modules/process/tilt.c:204
+msgid "Angles"
+msgstr "Ângulos"
+
+#: modules/process/tip_blind.c:177
+msgid "Blind estimation of SPM tip using Villarubia's algorithm."
+msgstr "Estimativa cega da ponta do SPM usando o algorítimo de Villarubia."
+
+#: modules/process/tip_blind.c:191
+msgid "/_Tip and Indentation/_Blind Estimation..."
+msgstr "/Indicação e indentação/Estimativa cega..."
+
+#: modules/process/tip_blind.c:195
+msgid "Blind tip estimation"
+msgstr "Estimativa cega da ponta."
+
+#: modules/process/tip_blind.c:230
+msgid "Blind Tip Estimation"
+msgstr "Estimativa cega da ponta."
+
+#: modules/process/tip_blind.c:231
+msgid "Run _Partial"
+msgstr "Execução _parcial"
+
+#: modules/process/tip_blind.c:232
+msgid "Run _Full"
+msgstr "Execução completa"
+
+#: modules/process/tip_blind.c:233
+msgid "_Reset Tip"
+msgstr "_Reiniciar ponta"
+
+#: modules/process/tip_blind.c:321
+msgid "Related _data:"
+msgstr "_Dados relacionados:"
+
+#: modules/process/tip_blind.c:327
+msgid "Estimated Tip Size"
+msgstr "Tamanho estimado da ponta"
+
+#: modules/process/tip_blind.c:350
+msgid "_Same resolution"
+msgstr "Me_sma resolução"
+
+#: modules/process/tip_blind.c:376
+msgid "Noise suppression t_hreshold:"
+msgstr "Limiar de supressão de ruído:"
+
+#: modules/process/tip_blind.c:384
+msgid "Use _boundaries"
+msgstr "Usar fronteiras"
+
+#: modules/process/tip_blind.c:395
+msgid "Stripes"
+msgstr "Listras"
+
+#: modules/process/tip_blind.c:401
+msgid "_Split to stripes:"
+msgstr "Dividir em listras:"
+
+#: modules/process/tip_blind.c:412
+msgid "_Preview stripe:"
+msgstr "_Pré-visualizar listra:"
+
+#: modules/process/tip_blind.c:420
+msgid "Plot size _graph"
+msgstr "Plotar tamanho do _gráfico"
+
+#: modules/process/tip_blind.c:430
+msgid "Create tip i_mages"
+msgstr "Criar imagens da ponta"
+
+#. TRANSLATORS: Prefix for the progressbar message.
+#: modules/process/tip_blind.c:807
+#, c-format
+msgid "Stripe %u: "
+msgstr "Listra %u: "
+
+#: modules/process/tip_blind.c:914 modules/process/tip_blind.c:938
+msgid "Estimated tip"
+msgstr "Ponta estimada"
+
+#: modules/process/tip_blind.c:1204 modules/process/tip_blind.c:1213
+msgid "Tip radius evolution"
+msgstr "Evolução do raio da ponta"
+
+#: modules/process/tip_model.c:112
+msgid "Models SPM tip."
+msgstr "Modela ponta SPM."
+
+#: modules/process/tip_model.c:127
+msgid "/_Tip and Indentation/_Model Tip..."
+msgstr "/Indicação e indentação/_Modelar ponta..."
+
+#: modules/process/tip_model.c:131
+msgid "Model AFM tip"
+msgstr "Modelar ponta AFM"
+
+#: modules/process/tip_model.c:162
+msgid "Model Tip"
+msgstr "Modelar ponta"
+
+#: modules/process/tip_model.c:222
+msgid "Tip _type:"
+msgstr "_Tipo de ponta:"
+
+#: modules/process/tip_model.c:228
+msgid "_Number of sides:"
+msgstr "_Número de lados:"
+
+#: modules/process/tip_model.c:234
+msgid "Tip _slope:"
+msgstr "Inclinação da ponta:"
+
+#: modules/process/tip_model.c:240
+msgid "Tip _rotation:"
+msgstr "_Rotação da ponta:"
+
+#: modules/process/tip_model.c:255
+msgid "Tip _apex radius:"
+msgstr "Raio do ápice da ponta:"
+
+#: modules/process/tip_model.c:265
+#, fuzzy
+msgid "Tip _anisotropy:"
+msgstr "Anisotropia DWT"
+
+#: modules/process/tip_model.c:484
+msgid "Modeled tip"
+msgstr "Ponta modelada"
+
+#: modules/process/tip_model.c:556
+#, c-format
+msgid "Tip resolution: %d × %d pixels"
+msgstr "Resolução da ponta: %d × %d pixeis"
+
+#: modules/process/tipops.c:66
+msgid ""
+"Tip operations: dilation (convolution), erosion (reconstruction) and "
+"certainty map."
+msgstr ""
+"Operações com pontas: dilatação (convolução), erosão (reconstrução) e mapa "
+"de certeza."
+
+#: modules/process/tipops.c:81
+msgid "/_Tip and Indentation/_Dilation..."
+msgstr "/Indicação e indentação/_Dilatação..."
+
+#: modules/process/tipops.c:85
+msgid "Surface dilation by defined tip"
+msgstr "Dilatação da superfície pela ponta definida"
+
+#: modules/process/tipops.c:88
+msgid "/_Tip and Indentation/_Surface Reconstruction..."
+msgstr "/Indicação e indentação/Reconstrução da _superfície..."
+
+#: modules/process/tipops.c:92
+msgid "Surface reconstruction by defined tip"
+msgstr "Reconstrução da superfície pela ponta definida"
+
+#: modules/process/tipops.c:95
+msgid "/_Tip and Indentation/_Certainty Map..."
+msgstr "/Indicação e indentação/Mapa de _certeza..."
+
+#: modules/process/tipops.c:99
+msgid "Tip certainty map"
+msgstr "Mapa de certeza da ponta"
+
+#: modules/process/tipops.c:140
+msgid "Tip Dilation"
+msgstr "Dilatação da ponta"
+
+#: modules/process/tipops.c:141
+msgid "Surface Reconstruction"
+msgstr "Reconstrução da superfície"
+
+#: modules/process/tipops.c:142
+msgid "Certainty Map Analysis"
+msgstr "Análise de mapa de certeza"
+
+#: modules/process/tipops.c:163
+msgid "_Tip morphology:"
+msgstr "Morfologia da ponta:"
+
+#: modules/process/tipops.c:257
+#, c-format
+msgid ""
+"Tip measure does not match data.\n"
+"It will be resampled from %d×%d to %d×%d."
+msgstr ""
+"Medida da ponta não corresponde aos dados.\n"
+"Ela será re-amostrada de %d×%d to %d×%d."
+
+#: modules/process/tipops.c:297
+msgid "Dilated data"
+msgstr "Dados dilatados"
+
+#: modules/process/tipops.c:298
+msgid "Surface reconstruction"
+msgstr "Reconstrução da superfície"
+
+#: modules/process/unrotate.c:83
+msgid ""
+"Rotates data to make characteristic directions parallel with x or y axis."
+msgstr ""
+"Gira dados para fazer direções características paralelas com o eixo x ou y."
+
+#: modules/process/unrotate.c:98
+msgid "/_Correct Data/_Unrotate..."
+msgstr "/_Corrigir dados/Desfazer rotação..."
+
+#: modules/process/unrotate.c:102
+msgid "Automatically correct rotation in horizontal plane"
+msgstr "Corrigir rotação automaticamente em plano horizontal"
+
+#: modules/process/unrotate.c:219
+msgid "Correct Rotation"
+msgstr "Corrigir rotação"
+
+#: modules/process/unrotate.c:239
+msgid "Structure"
+msgstr "Estrutura"
+
+#: modules/process/unrotate.c:243
+msgid "Detected:"
+msgstr "Detectado:"
+
+#: modules/process/unrotate.c:259
+msgid "_Assume:"
+msgstr "_Assumir:"
+
+#: modules/process/unrotate.c:262
+msgid "Correction:"
+msgstr "Correção:"
+
+#: modules/process/volumize.c:42
+msgid "Converts datafield to 3D volume data."
+msgstr "Converte campo de dados para volume de dados 3D."
+
+#: modules/process/volumize.c:56
+#, fuzzy
+msgid "/_Basic Operations/Volumize"
+msgstr "/Operações _básicas/Volumar..."
+
+#: modules/process/volumize.c:60
+msgid "Convert datafield to 3D data"
+msgstr "Converte campo de dados para dados 3D"
+
+#: modules/process/volumize_layers.c:86
+msgid "Converts all datafields to 3D volume data."
+msgstr "Converte todos os campos de dados para volume de dados 3D."
+
+#: modules/process/volumize_layers.c:100
+msgid "/_Basic Operations/Volumize Layers..."
+msgstr "/Operações _básicas/Volumar camadas..."
+
+#: modules/process/volumize_layers.c:104
+msgid "Convert all datafields to 3D data"
+msgstr "Converte todos os campos de dados para dados 3D"
+
+#: modules/process/volumize_layers.c:153
+msgid "All datafields must have same resolution to make a volume from them."
+msgstr ""
+"Todos os campos de dados devem ter a mesma resolução para gerar um volume a "
+"partir deles."
+
+#: modules/process/volumize_layers.c:220
+msgid "Volumize layers"
+msgstr "Volumar camadas"
+
+#: modules/process/volumize_layers.c:240
+msgid "_X resolution:"
+msgstr "Resolução _X:"
+
+#: modules/process/volumize_layers.c:245
+msgid "_Y resolution:"
+msgstr "Resolução _Y:"
+
+#: modules/process/volumize_layers.c:250
+msgid "_Z resolution:"
+msgstr "Resolução _Z:"
+
+#: modules/process/volumize_layers.c:256
+msgid "Z _range:"
+msgstr "Intervalo Z:"
+
+#: modules/process/wave_synth.c:219
+msgid "Generates various kinds of waves."
+msgstr "Gera vários tipos de ondas."
+
+#: modules/process/wave_synth.c:233
+msgid "/S_ynthetic/_Waves..."
+msgstr "/Sintético/Ondas..."
+
+#: modules/process/wave_synth.c:237
+msgid "Generate waves"
+msgstr "Gerar ondas"
+
+#: modules/process/wave_synth.c:366
+msgid "Waves"
+msgstr "Ondas"
+
+#: modules/process/wave_synth.c:441 modules/tools/linestats.c:337
+#: modules/tools/sfunctions.c:411 modules/volume/volume_linestat.c:374
+msgid "_Quantity:"
+msgstr "_Quantidade:"
+
+#: modules/process/wave_synth.c:448
+msgid "_Number of waves:"
+msgstr "_Número de ondas:"
+
+#: modules/process/wave_synth.c:455 modules/process/wave_synth.c:617
+#: modules/tools/roughness.c:275
+msgid "Amplitude"
+msgstr "Amplitude"
+
+#: modules/process/wave_synth.c:460
+msgid "_Wave form:"
+msgstr "Forma da onda:"
+
+#: modules/process/wave_synth.c:467
+msgid "Amplitude:"
+msgstr "Amplitude:"
+
+#: modules/process/wave_synth.c:487
+msgid "_Decay:"
+msgstr ""
+
+#: modules/process/wave_synth.c:497
+msgid "Frequency"
+msgstr "Frequência"
+
+#: modules/process/wave_synth.c:503
+msgid "_Spatial frequency:"
+msgstr "Frequência espacial:"
+
+#: modules/process/wave_synth.c:519
+msgid "_X center:"
+msgstr "Centro _X:"
+
+#: modules/process/wave_synth.c:532
+msgid "_Y center:"
+msgstr "Centro _Y:"
+
+#: modules/process/wave_synth.c:600
+msgid "Cosine"
+msgstr "Cosseno"
+
+#: modules/process/wave_synth.c:601
+msgid "Inverse cosh"
+msgstr "Cosseno hiperbólico invertido"
+
+#: modules/process/wave_synth.c:602
+msgid "Flat top"
+msgstr "Topo achatado"
+
+#: modules/process/wave_synth.c:616
+msgid "Displacement"
+msgstr "Deslocamento"
+
+#: modules/process/wpour_mark.c:189
+msgid "Segments image using watershed with pre- and postprocessing."
+msgstr ""
+"Segmenta imagem usando linha divisória de águas com pré- e pós-processamento."
+
+#: modules/process/wpour_mark.c:203
+msgid "/_Grains/_Mark by Segmentation..."
+msgstr "/_Grãos/_Marcar por segmentação..."
+
+#: modules/process/wpour_mark.c:207
+msgid "Segment using watershed "
+msgstr "Segmentar usando linha divisória de águas"
+
+#: modules/process/wpour_mark.c:270
+msgid "Segment by Watershed"
+msgstr "Segmentar por linha divisória de águas"
+
+#: modules/process/wpour_mark.c:312
+msgid "Preprocessing"
+msgstr "Pré-processamento"
+
+#: modules/process/wpour_mark.c:327
+msgid "Add _gradient:"
+msgstr "Adicionar _gradiente:"
+
+#: modules/process/wpour_mark.c:331
+msgid "Add _curvature:"
+msgstr "Adicionar _curvatura:"
+
+#: modules/process/wpour_mark.c:335
+msgid "_Barrier level:"
+msgstr "Nível de _barreira:"
+
+#: modules/process/wpour_mark.c:339
+msgid "Prefill _level:"
+msgstr "Pré-preencher níve_l:"
+
+#: modules/process/wpour_mark.c:343
+msgid "Pre_fill from minima:"
+msgstr "Pré-preencher a partir do mínimo:"
+
+#: modules/process/wpour_mark.c:348
+msgid "Postprocessing"
+msgstr "Pós-processamento"
+
+#: modules/process/wpour_mark.c:377
+msgid "Original image"
+msgstr "Imagem original"
+
+#: modules/process/wpour_mark.c:379
+msgid "Preprocessed image"
+msgstr "Imagem pré-processada"
+
+#: modules/process/wpour_mark.c:382
+msgid "_Image preview:"
+msgstr "Pré-visualização de imagem:"
+
+#: modules/process/wpour_mark.c:389
+msgid "No mask"
+msgstr "Sem máscara"
+
+#: modules/process/wpour_mark.c:393
+msgid "Postprocessed"
+msgstr "Pós-processado"
+
+#: modules/process/wpour_mark.c:396
+msgid "_Mask preview:"
+msgstr "Pré-visualização de máscara:"
+
+#: modules/process/wpour_mark.c:403
+msgid "No updates"
+msgstr "Sem atualizações"
+
+#: modules/process/wpour_mark.c:405
+msgid "Preprocess image"
+msgstr "Pré-processar imagem"
+
+#: modules/process/wpour_mark.c:407
+msgid "Preprocess and mark"
+msgstr "Pré-processar e marcar"
+
+#: modules/process/xydenoise.c:58
+msgid "Denoises measurement on basis of two orthogonal scans."
+msgstr "Remove ruído de medidas com base em dois escaneamentos ortogonais."
+
+#: modules/process/xydenoise.c:72
+msgid "/M_ultidata/_XY denoise..."
+msgstr "/M_ulti-dados/Remoção de ruídos _XY..."
+
+#: modules/process/xydenoise.c:76
+msgid "Denoises horizontal/vertical measurement."
+msgstr "Remove ruído de medida horizontal/vertical."
+
+#: modules/process/xydenoise.c:103
+msgid "XY Denoising"
+msgstr "Remoção de ruídos XY"
+
+#: modules/process/xydenoise.c:125
+msgid "Second direction:"
+msgstr "Segunda direção:"
+
+#: modules/process/xydenoise.c:233
+msgid "Computing forward FFTs..."
+msgstr "Calcula FFTS diretas..."
+
+#: modules/process/xydenoise.c:249
+msgid "Computing image..."
+msgstr "Calculando imagem..."
+
+#: modules/process/xydenoise.c:261
+msgid "Computing backward FFT..."
+msgstr "Calculando FFT reversa..."
+
+#: modules/process/xydenoise.c:273
+msgid "Denoised"
+msgstr "Ruídos removidos"
+
+#: modules/process/xyzize.c:41
+msgid "Converts data fields to XYZ data."
+msgstr "Converte campo de dados para dados XYZ."
+
+#: modules/process/xyzize.c:55
+msgid "/_Basic Operations/_XYZize..."
+msgstr "/Operações _básicas/Converter para _XYZ..."
+
+#: modules/process/xyzize.c:59
+msgid "Convert to XYZ data"
+msgstr "Converter para dados XYZ"
+
+#: modules/pygwy/pygwy-console.c:99
+msgid "/Pygwy Console"
+msgstr "/Console Pygwy"
+
+#: modules/pygwy/pygwy-console.c:103
+msgid "Python wrapper console"
+msgstr "Console Python"
+
+#: modules/pygwy/pygwy-console.c:168 modules/pygwy/pygwy-console.c:481
+msgid "Pygwy Console"
+msgstr "Console Pygwy"
+
+#: modules/pygwy/pygwy-console.c:187
+msgid "Open script in Python language (Ctrl-O)"
+msgstr "Abrir script na linguagem Python (Ctrl-O)"
+
+#: modules/pygwy/pygwy-console.c:197
+msgid "Save script (Ctrl-S)"
+msgstr "Salvar script (Ctrl-S)"
+
+#: modules/pygwy/pygwy-console.c:207
+#, fuzzy
+msgid "Save script as (Ctrl-Shift-S)"
+msgstr "Salvar script (Ctrl-S)"
+
+#: modules/pygwy/pygwy-console.c:217
+msgid "Execute script (Ctrl-E)"
+msgstr "Executar script (Ctrl-E)"
+
+#: modules/pygwy/pygwy-console.c:227
+msgid "Clear Log"
+msgstr "Limpar registro"
+
+#: modules/pygwy/pygwy-console.c:285
+msgid "Command"
+msgstr "Comando"
+
+#: modules/pygwy/pygwy-console.c:371
+msgid ">>> Running the script above\n"
+msgstr ">>> Executando o script acima\n"
+
+#: modules/pygwy/pygwy-console.c:425
+#, fuzzy
+msgid "Save Python Script as"
+msgstr "Salvar script como"
+
+#: modules/pygwy/pygwy-console.c:429
+#, fuzzy
+msgid "Open Python Script"
+msgstr "Abrir script em Python"
+
+#: pygwy.c:130
+msgid "Pygwy, the Gwyddion Python wrapper."
+msgstr "Pygwy, o ambiente Python do Gwyddion."
+
+#: pygwy.c:269
+msgid "Python Interpreter Errors"
+msgstr ""
+
+#: pygwy.c:399
+msgid "Python interpreter error occurred."
+msgstr ""
+
+#: pygwy.c:499
+msgid "Function written in Python"
+msgstr "Função escrita em Python"
+
+#: modules/tools/crop.c:84
+msgid "Crop tool, crops data to smaller size."
+msgstr "Ferramenta de corte, corta dados para um tamanho menor."
+
+#: modules/tools/crop.c:121
+msgid "Crop"
+msgstr "Cortar"
+
+#: modules/tools/crop.c:122
+msgid "Crop data"
+msgstr "Cortar dados"
+
+#: modules/tools/distance.c:111
+msgid "Distance measurement tool, measures distances and angles."
+msgstr "Ferramenta de medir distâncias, mede distâncias e ângulos."
+
+#: modules/tools/distance.c:147
+msgid "Measure distances and directions between points"
+msgstr "Medir distâncias e direções entre pontos"
+
+#. TRANSLATORS: Number is verb here.
+#: modules/tools/distance.c:250 modules/tools/profile.c:527
+msgid "_Number lines"
+msgstr "Enumerar linhas"
+
+#: modules/tools/filter.c:129
+msgid ""
+"Filter tool, processes selected part of data with a filter (conservative "
+"denoise, mean, median. Kuwahara, minimum, maximum)."
+msgstr ""
+"Ferramenta de filtragem, processa a parte selecionada dos dados com um "
+"filtro ( removedor de ruído conservativo, média, mediana, Kuwahara, mínimo, "
+"máximo)."
+
+#: modules/tools/filter.c:172
+msgid "Basic filters: mean, median, denoise, …"
+msgstr "Filtros básicos: média, mediana, remover ruído, ..."
+
+#: modules/tools/filter.c:240
+msgid "Conservative denoise"
+msgstr "Removedor de ruído conservativo"
+
+#: modules/tools/filter.c:247
+msgid "Kuwahara"
+msgstr "Kuwahara"
+
+#: modules/tools/filter.c:248
+msgid "Dechecker"
+msgstr "Dechecker"
+
+#: modules/tools/filter.c:249
+msgid "filter|Gaussian"
+msgstr "Gaussiano"
+
+#: modules/tools/filter.c:250
+msgid "Sharpen"
+msgstr "Afiar"
+
+#: modules/tools/grainmeasure.c:92
+msgid ""
+"Grain measurement tool, calculates characteristics of selected continuous "
+"parts of mask."
+msgstr ""
+"Ferramenta de medida de grãos, calcula as características das partes "
+"contínuas selecionadas da máscara."
+
+#: modules/tools/grainmeasure.c:124
+msgid "Grain Measure"
+msgstr "Medida de grão"
+
+#: modules/tools/grainmeasure.c:125
+msgid "Measure individual grains (continuous parts of mask)"
+msgstr "Medir grãos individuais (partes contínuas da máscara)."
+
+#: modules/tools/grainremover.c:99 modules/tools/selectionmanager.c:128
+msgid ""
+"Grain removal tool, removes continuous parts of mask and/or underlying data."
+msgstr ""
+"Ferramenta de remoção de grãos, remove partes contínuas da máscara e/ou "
+"dados subjacentes."
+
+#: modules/tools/grainremover.c:108
+msgid "_Mask"
+msgstr "_Máscara"
+
+#: modules/tools/grainremover.c:114 modules/tools/spotremove.c:271
+msgid "Laplace solver"
+msgstr "Solucionador de Laplace"
+
+#: modules/tools/grainremover.c:115
+msgid "Fractal correction"
+msgstr "Correção fractal"
+
+#: modules/tools/grainremover.c:145
+msgid "Grain Remove"
+msgstr "Remoção de grão"
+
+#: modules/tools/grainremover.c:146
+msgid "Remove individual grains (continuous parts of mask)"
+msgstr "Remover grãos individuais (partes contínuas da máscara)."
+
+#: modules/tools/grainremover.c:203
+msgid "Remove:"
+msgstr "Remover:"
+
+#: modules/tools/grainremover.c:216 modules/tools/spotremove.c:326
+msgid "_Interpolation method:"
+msgstr "Método de _interpolação:"
+
+#: modules/tools/icolorange.c:128
+msgid ""
+"Interactive color range tool, allows selecting the data range false color "
+"scale should map to, either on data or on height distribution histogram."
+msgstr ""
+"Ferramenta interativa de intervalo de cores, permite selecionar o intervalo "
+"de dados que a escala de cores falsas deve mapear, seja nos dados ou no "
+"histograma de distribuição de alturas."
+
+#: modules/tools/icolorange.c:159
+msgid "Color Range"
+msgstr "Intervalo de cores"
+
+#: modules/tools/icolorange.c:160
+msgid "Stretch color range to part of data"
+msgstr "Estender o intervalo de cores para parte dos dados"
+
+#: modules/tools/icolorange.c:228
+msgid "Full color range from minimum to maximum"
+msgstr "Intervalo de cores completo do mínimo ao máximo"
+
+#: modules/tools/icolorange.c:233
+msgid "Explicitly set fixed color range"
+msgstr "Definir explicitamente um intervalo de cores fixo"
+
+#: modules/tools/icolorange.c:238
+msgid "Automatic color range with tails cut off"
+msgstr "Intervalo de cores automático com extremidades cortadas"
+
+#: modules/tools/icolorange.c:243
+msgid "Adaptive nonlinear color mapping"
+msgstr "Mapeamento de cores não-linear adaptativo"
+
+#: modules/tools/icolorange.c:284
+msgid "_default"
+msgstr "pa_drão"
+
+#: modules/tools/icolorange.c:293
+msgid "Height histogram"
+msgstr "Histograma de alturas"
+
+#: modules/tools/icolorange.c:329 modules/tools/linestats.c:169
+#: modules/tools/sfunctions.c:231 modules/volume/volume_linestat.c:148
+msgid "Range"
+msgstr "Intervalo"
+
+#: modules/tools/icolorange.c:334
+msgid "_Minimum"
+msgstr "_Mínimo"
+
+#: modules/tools/icolorange.c:359
+msgid "M_aximum"
+msgstr "Máximo"
+
+#: modules/tools/icolorange.c:390
+msgid "Set to _Unmasked"
+msgstr "Definir para não-mascarado"
+
+#: modules/tools/icolorange.c:397
+msgid "Set to _Masked"
+msgstr "Definir para mascarado"
+
+#: modules/tools/icolorange.c:409
+msgid "_Invert Mapping"
+msgstr "_Inverter mapeamento"
+
+#: modules/tools/icolorange.c:419
+msgid "range|Full"
+msgstr "Completo"
+
+#: modules/tools/level3.c:108
+msgid ""
+"Three-point level tool, levels data by subtracting a plane fitted through "
+"three selected points."
+msgstr ""
+"Ferramenta de nível de três pontos, nivela os dados subtraindo um plano "
+"ajustado através de três pontos selecionados."
+
+#: modules/tools/level3.c:145
+msgid "Three Point Level"
+msgstr "Nivelamento de três pontos"
+
+#: modules/tools/level3.c:146
+msgid "Level data by fitting a plane through three points"
+msgstr "Nivelar dados por ajuste de um plano através de três pontos"
+
+#: modules/tools/level3.c:244 modules/tools/readvalue.c:378
+msgid "_Averaging radius:"
+msgstr "Calculando raio médio:"
+
+#: modules/tools/level3.c:251
+msgid "_Instant apply"
+msgstr "Aplicação _instantânea"
+
+#: modules/tools/level3.c:261
+msgid "Set plane to _zero"
+msgstr "Definir plano para _zero"
+
+#: modules/tools/linestats.c:139
+msgid ""
+"Row/column statistical function tool, mean values, medians, maxima, minima, "
+"RMS, ..., of rows or columns."
+msgstr ""
+"Ferramenta de função estatística de linha/coluna, valores médios, medianas, "
+"máximos, mínimos, RMS, ..., de linhas ou colunas."
+
+#: modules/tools/linestats.c:172 modules/volume/volume_linestat.c:150
+msgid "tan β<sub>0</sub>"
+msgstr "tan β<sub>0</sub>"
+
+#: modules/tools/linestats.c:174 modules/volume/volume_linestat.c:152
+msgid "Ra"
+msgstr "Ra"
+
+#: modules/tools/linestats.c:175 modules/volume/volume_linestat.c:153
+msgid "Rq (RMS)"
+msgstr "Rq (RMS)"
+
+#: modules/tools/linestats.c:176 modules/volume/volume_linestat.c:154
+msgid "Rz"
+msgstr "Rz"
+
+#: modules/tools/linestats.c:177 modules/volume/volume_linestat.c:155
+msgid "Rt"
+msgstr "Rt"
+
+#: modules/tools/linestats.c:204
+msgid "Row/Column Statistics"
+msgstr "Estatísticas de linha/coluna"
+
+#: modules/tools/linestats.c:205
+msgid "Calculate row/column statistical functions"
+msgstr "Calcular funções estatísticas de linha/coluna"
+
+#: modules/tools/linestats.c:307
+msgid "Ro_ws"
+msgstr "Linhas"
+
+#: modules/tools/linestats.c:308
+msgid "Co_lumns"
+msgstr "Colunas"
+
+#: modules/tools/linestats.c:354
+msgid "Average:"
+msgstr "Média:"
+
+#: modules/tools/linestats.c:363 modules/tools/profile.c:460
+#: modules/tools/sfunctions.c:424 modules/tools/spectro.c:346
+msgid "<b>Options</b>"
+msgstr "<b>Opções</b>"
+
+#: modules/tools/maskedit.c:170
+msgid "Mask editor tool, allows interactive modification of parts of the mask."
+msgstr ""
+"Ferramenta de edição de máscara, permite a modificação interativa de partes "
+"da máscara."
+
+#: modules/tools/maskedit.c:228
+msgid "Mask Editor"
+msgstr "Editor de máscara"
+
+#: modules/tools/maskedit.c:229
+msgid "Edit mask"
+msgstr "Editar máscara"
+
+#: modules/tools/maskedit.c:326
+msgid "Set mask to selection"
+msgstr "Definir máscara para seleção"
+
+#: modules/tools/maskedit.c:331
+msgid "Add selection to mask"
+msgstr "Adicionar seleção para máscara"
+
+#: modules/tools/maskedit.c:336
+msgid "Subtract selection from mask"
+msgstr "Subtrair seleção da máscara"
+
+#: modules/tools/maskedit.c:341
+msgid "Intersect selection with mask"
+msgstr "Cruzar seleção com máscara"
+
+#: modules/tools/maskedit.c:348
+msgid "Rectangular shapes"
+msgstr "Formas retangulares"
+
+#: modules/tools/maskedit.c:353
+msgid "Elliptic shapes"
+msgstr "Formas elípticas"
+
+#: modules/tools/maskedit.c:358
+msgid "Thin lines"
+msgstr "Linhas finas"
+
+#: modules/tools/maskedit.c:365
+msgid "Freehand mask drawing"
+msgstr "Desenhar máscara à mão"
+
+#: modules/tools/maskedit.c:370
+msgid "Freehand mask erasing"
+msgstr "Apagar máscara à mão"
+
+#: modules/tools/maskedit.c:375
+msgid "Fill continuous empty areas with mask"
+msgstr "Preencher áreas contínuas vazias com máscara"
+
+#: modules/tools/maskedit.c:380
+msgid "Erase continuous parts of mask"
+msgstr "Apagar partes contínuas da máscara"
+
+#: modules/tools/maskedit.c:409
+msgid "Editor"
+msgstr "Editor"
+
+#: modules/tools/maskedit.c:414
+msgid "_Shapes"
+msgstr "Forma_s"
+
+#: modules/tools/maskedit.c:428
+msgid "Mode:"
+msgstr "Modo:"
+
+#: modules/tools/maskedit.c:458
+msgid "Shape:"
+msgstr "Forma:"
+
+#: modules/tools/maskedit.c:486
+msgid "_Drawing Tools"
+msgstr "Ferramentas de _desenho"
+
+#: modules/tools/maskedit.c:500
+msgid "Tool:"
+msgstr "Ferramenta:"
+
+#: modules/tools/maskedit.c:538
+msgid "Actions"
+msgstr "Ações"
+
+#: modules/tools/maskedit.c:546
+msgid "_Invert"
+msgstr "_Inverter"
+
+#: modules/tools/maskedit.c:577
+msgid "Fill _Voids"
+msgstr "Preencher _vazios"
+
+#: modules/tools/maskedit.c:586
+msgid "Fill non-simple-connected"
+msgstr "Preencher conectado não-simples"
+
+#: modules/tools/maskedit.c:597
+msgid "Grow/Shrink"
+msgstr "Crescer/encolher"
+
+#: modules/tools/maskedit.c:606
+msgid "_Grow"
+msgstr "Crescer"
+
+#: modules/tools/maskedit.c:614
+msgid "Shrin_k"
+msgstr "Encolher"
+
+#: modules/tools/maskedit.c:629
+msgid "_Amount:"
+msgstr "Quantidade:"
+
+#: modules/tools/maskedit.c:657
+msgid "_Prevent grain merging by growing"
+msgstr "Evitar a fusão de grãos durante o crescimento"
+
+#: modules/tools/pathlevel.c:111
+msgid "Path level tool, performs row leveling along on user-set lines."
+msgstr ""
+"Ferramenta de nivelamento de caminho, executa o nivelamento de linhas em "
+"linhas definidas pelo usuário."
+
+#: modules/tools/pathlevel.c:144
+msgid "Path Level"
+msgstr "Nivelar caminho"
+
+#: modules/tools/pathlevel.c:145
+msgid "Level rows using intersections with given lines"
+msgstr "Nivelar linhas usando intersecções com linhas fornecidas"
+
+#: modules/tools/profile.c:216
+msgid "Profile tool, creates profile graphs from selected lines."
+msgstr "Ferramenta de perfil, cria gráficos de perfis de linhas selecionadas."
+
+#: modules/tools/profile.c:270 modules/tools/profile.c:609
+msgid "Profiles"
+msgstr "Perfis"
+
+#: modules/tools/profile.c:271
+msgid "Extract profiles"
+msgstr "Extrair perfis"
+
+#: modules/tools/profile.c:478
+#, fuzzy
+msgid "Linear profiles"
+msgstr "_Separar perfis"
+
+#: modules/tools/profile.c:480
+#, fuzzy
+msgid "Radial profiles"
+msgstr "Perfis _radiais"
+
+#: modules/tools/profile.c:537
+msgid "_Separate profiles"
+msgstr "_Separar perfis"
+
+#: modules/tools/profile.c:587
+msgid "_Calibration data:"
+msgstr "Dados de _calibração:"
+
+#: modules/tools/profile.c:600
+msgid "_Show profile"
+msgstr "Mostrar perfil"
+
+#: modules/tools/profile.c:861
+#, c-format
+msgid "X error %d"
+msgstr "Erro em X %d"
+
+#: modules/tools/profile.c:865
+#, c-format
+msgid "Y error %d"
+msgstr "Erro em Y %d"
+
+#: modules/tools/profile.c:869
+#, c-format
+msgid "Z error %d"
+msgstr "Erro em Z %d"
+
+#: modules/tools/profile.c:873
+#, c-format
+msgid "X uncertainty %d"
+msgstr "Incerteza em X %d"
+
+#: modules/tools/profile.c:877
+#, c-format
+msgid "Y uncertainty %d"
+msgstr "Incerteza em Y %d"
+
+#: modules/tools/profile.c:881
+#, c-format
+msgid "Z uncertainty %d"
+msgstr "Incerteza em Z %d"
+
+#: modules/tools/profile.c:886
+#, c-format
+msgid "Zunc up bound %d"
+msgstr "Limite superior de inc. Z %d"
+
+#: modules/tools/profile.c:891
+#, c-format
+msgid "Zunc low bound %d"
+msgstr "Limite inferior de inc. Z %d"
+
+#: modules/tools/profile.c:1637
+msgid "S_ymmetrize"
+msgstr "Simetrizar"
+
+#: modules/tools/profile.c:1639
+msgid "Symmetrize _All"
+msgstr "Simetrizar todos"
+
+#: modules/tools/profile.c:1643
+#, fuzzy
+msgid "Improve _Direction"
+msgstr "_Direção:"
+
+#: modules/tools/profile.c:1645
+#, fuzzy
+msgid "Improve _All"
+msgstr "Melhorar"
+
+#: modules/tools/profile.c:1866
+msgid "calib-data|None"
+msgstr "Nenhum"
+
+#: modules/tools/readvalue.c:137
+msgid "Pointer tool, reads value under pointer."
+msgstr "Ferramenta indicadora, lê o valor sob o ponteiro do mouse."
+
+#: modules/tools/readvalue.c:170
+msgid "Read Value"
+msgstr "Ler valor"
+
+#: modules/tools/readvalue.c:171
+msgid "Read value under mouse cursor"
+msgstr "Lê o valor sob o cursor do mouse"
+
+#: modules/tools/readvalue.c:307
+msgid "Set _Zero"
+msgstr "Definir _zero"
+
+#: modules/tools/readvalue.c:310
+msgid "Shift plane z=0 to pass through the selected point"
+msgstr "Deslocar plano z=0 para passar através do ponto selecionado"
+
+#: modules/tools/readvalue.c:318
+msgid "Facet"
+msgstr "Faceta"
+
+#: modules/tools/readvalue.c:343
+msgid "Curvatures"
+msgstr "Curvaturas"
+
+#: modules/tools/readvalue.c:386
+msgid "Show _selection"
+msgstr "Mostrar _seleção"
+
+#: modules/tools/roughness.c:283
+msgid "Roughness average"
+msgstr "Rugosidade média"
+
+#: modules/tools/roughness.c:291
+msgid "Root mean square roughness"
+msgstr "Raiz quadrática média da rugosidade"
+
+#: modules/tools/roughness.c:299
+msgid "Maximum height of the roughness"
+msgstr "Altura máxima da rugosidade"
+
+#: modules/tools/roughness.c:307
+msgid "Maximum roughness valley depth"
+msgstr "Profundidade máxima do vale da rugosidade"
+
+#: modules/tools/roughness.c:315
+msgid "Maximum roughness peak height"
+msgstr "Altura máxima do pico da rugosidade"
+
+#: modules/tools/roughness.c:323 modules/tools/roughness.c:371
+msgid "Average maximum height of the roughness"
+msgstr "Média máxima das alturas da rugosidade"
+
+#: modules/tools/roughness.c:331
+msgid "Average maximum roughness valley depth"
+msgstr "Média máxima das profundidades dos vales da rugosidade"
+
+#: modules/tools/roughness.c:339
+msgid "Average maximum roughness peak height"
+msgstr "Média máxima das alturas dos picos da rugosidade"
+
+#: modules/tools/roughness.c:347 modules/tools/roughness.c:355
+msgid "Average third highest peak to third lowest valley height"
+msgstr ""
+"Média da altura do terceiro pico mais alto para o terceiro vale mais baixo"
+
+#: modules/tools/roughness.c:363
+msgid "Average maximum height of the profile"
+msgstr "Média máxima das alturas do perfil"
+
+#: modules/tools/roughness.c:379
+msgid "Skewness"
+msgstr "Assimetria"
+
+#: modules/tools/roughness.c:395
+msgid "Waviness average"
+msgstr "Ondulação média"
+
+#: modules/tools/roughness.c:403
+msgid "Root mean square waviness"
+msgstr "Raiz quadrática média da ondulação"
+
+#: modules/tools/roughness.c:411
+msgid "Waviness maximum height"
+msgstr "Altura máxima da ondulação"
+
+#: modules/tools/roughness.c:419
+msgid "Maximum height of the profile"
+msgstr "Altura máxima do perfil"
+
+#: modules/tools/roughness.c:427
+msgid "Spatial"
+msgstr "Espacial"
+
+#: modules/tools/roughness.c:477
+msgid "Average wavelength of the profile"
+msgstr "Comprimento de onda médio do perfil"
+
+#: modules/tools/roughness.c:485
+msgid "Root mean square (RMS) wavelength of the profile"
+msgstr "Raiz quadrática média (RMS) do comprimento de onda do perfil"
+
+#: modules/tools/roughness.c:493
+msgid "Hybrid"
+msgstr "Híbrido"
+
+#: modules/tools/roughness.c:501
+msgid "Average absolute slope"
+msgstr "Inclinação média absoluta"
+
+#: modules/tools/roughness.c:509
+msgid "Root mean square (RMS) slope"
+msgstr "Raiz quadrática média (RMS) da inclinação"
+
+#: modules/tools/roughness.c:525
+msgid "Developed profile length"
+msgstr "Comprimento do perfil desenvolvido"
+
+#: modules/tools/roughness.c:533
+msgid "Profile length ratio"
+msgstr "Razão do comprimento do perfil"
+
+#: modules/tools/roughness.c:616
+msgid "Calculate surface profile parameters."
+msgstr "Calcular parâmetros do perfil da superfície."
+
+#: modules/tools/roughness.c:649 modules/tools/roughness.c:774
+#: modules/tools/roughness.c:1479
+msgid "Roughness"
+msgstr "Rugosidade"
+
+#: modules/tools/roughness.c:650
+msgid "Calculate roughness parameters"
+msgstr "Calcular parâmetros de rugosidade"
+
+#: modules/tools/roughness.c:772 modules/tools/roughness.c:1477
+msgid "Texture"
+msgstr "Textura"
+
+#: modules/tools/roughness.c:773 modules/tools/roughness.c:1478
+msgid "Waviness"
+msgstr "Ondulação"
+
+#: modules/tools/roughness.c:775
+msgid "ADF"
+msgstr "Função de distribuição de amplitude"
+
+#: modules/tools/roughness.c:776
+msgid "BRC"
+msgstr "Curva da razão de comportamento (Bearing Ratio Curve)"
+
+#: modules/tools/roughness.c:777 modules/tools/roughness.c:1482
+msgid "Peak Count"
+msgstr "Contagem de picos"
+
+#: modules/tools/roughness.c:839 modules/xyz/xyz_drift.c:1090
+msgid "_Graph:"
+msgstr "_Gráfico:"
+
+#: modules/tools/roughness.c:847
+msgid "C_ut-off:"
+msgstr "Cortar:"
+
+#: modules/tools/roughness.c:1345
+msgid "No profile selected."
+msgstr "Nenhum perfil selecionado."
+
+#: modules/tools/roughness.c:1480
+msgid "Amplitude Distribution Function"
+msgstr "Função de distribuição de amplitude"
+
+#: modules/tools/roughness.c:1481
+msgid "The Bearing Ratio Curve"
+msgstr "A curva da razão de comportamento"
+
+#: modules/tools/roughness.c:1516
+msgid "Surface Profiles"
+msgstr "Perfis de superfície"
+
+#: modules/tools/roughness.c:1904
+msgid "Save Roughness Parameters"
+msgstr "Salvar parâmetros de rugosidade"
+
+#: modules/tools/roughness.c:1961
+msgid "Roughness Parameters"
+msgstr "Parâmetros de rugosidade"
+
+#: modules/tools/roughness.c:1967
+#, c-format
+msgid "File: %s\n"
+msgstr "Arquivo: %s\n"
+
+#: modules/tools/roughness.c:1971
+#, c-format
+msgid "Data channel: %s\n"
+msgstr "Canal de dados: %s\n"
+
+#: modules/tools/roughness.c:2002
+#, c-format
+msgid ""
+"Selected line: (%s, %s) to (%s, %s) px\n"
+" (%s, %s) to (%s, %s) %s\n"
+msgstr ""
+"Linha selecionada: (%s, %s) to (%s, %s) px\n"
+" (%s, %s) to (%s, %s) %s\n"
+
+#: modules/tools/selectionmanager.c:174
+msgid "Selection Manager"
+msgstr "Gerenciador de seleção"
+
+#: modules/tools/selectionmanager.c:175
+msgid "Display, copy and export selections"
+msgstr "Exibir, copiar e exportar seleções"
+
+#: modules/tools/selectionmanager.c:273
+msgid "Spline path"
+msgstr "Caminho da interpolação"
+
+#: modules/tools/selectionmanager.c:368
+msgid "Manage chosen selection"
+msgstr "Gerenciar seleção escolhida"
+
+#: modules/tools/selectionmanager.c:376
+msgid "_Distribute"
+msgstr "_Distribuir"
+
+#: modules/tools/selectionmanager.c:382
+msgid "to _all files"
+msgstr "para todos os arquivos"
+
+#: modules/tools/selectionmanager.c:393
+msgid "_Copy"
+msgstr "_Copiar"
+
+#: modules/tools/sfunctions.c:186
+msgid ""
+"Statistical function tool, calculates one-dimensional statistical functions "
+"(height distribution, correlations, PSDF, Minkowski functionals) of selected "
+"part of data."
+msgstr ""
+"Ferramenta de função estatística, calcula funções estatísticas "
+"unidimensionais (distribuição de altura, correlações, PSDF, funcionais de "
+"Minkowski) da parte selecionada dos dados."
+
+#: modules/tools/sfunctions.c:219
+msgid "Height distribution"
+msgstr "Distribuição de alturas"
+
+#: modules/tools/sfunctions.c:220
+msgid "Cum. height distribution"
+msgstr "Distribuição de alturas cumulativa"
+
+#: modules/tools/sfunctions.c:221
+msgid "Distribution of angles"
+msgstr "Distribuição de ângulos"
+
+#: modules/tools/sfunctions.c:222
+msgid "Cum. distribution of angles"
+msgstr "Distribuição de ângulos cumulativa"
+
+#: modules/tools/sfunctions.c:223
+msgid "ACF"
+msgstr "ACF"
+
+#: modules/tools/sfunctions.c:224
+msgid "HHCF"
+msgstr "HHCF"
+
+#: modules/tools/sfunctions.c:225
+msgid "PSDF"
+msgstr "PSDF"
+
+#: modules/tools/sfunctions.c:226
+msgid "Radial PSDF"
+msgstr "PSDF radial"
+
+#: modules/tools/sfunctions.c:227
+msgid "Radial ACF"
+msgstr "ACF radial"
+
+#: modules/tools/sfunctions.c:228
+msgid "Minkowski volume"
+msgstr "Volume de Minkowski"
+
+#: modules/tools/sfunctions.c:229
+msgid "Minkowski boundary"
+msgstr "Fronteira de Minkowski"
+
+#: modules/tools/sfunctions.c:230
+msgid "Minkowski connectivity"
+msgstr "Conectividade de Minkowski"
+
+#: modules/tools/sfunctions.c:232
+msgid "Area scale graph"
+msgstr ""
+
+#: modules/tools/sfunctions.c:257
+msgid "Statistical Functions"
+msgstr "Funções estatísticas"
+
+#: modules/tools/sfunctions.c:258
+msgid "Calculate 1D statistical functions"
+msgstr "Calcular funções estatísticas 1D"
+
+#: modules/tools/sfunctions.c:501
+msgid "_Separate uncertainty"
+msgstr "_Separar incerteza"
+
+#: modules/tools/spectro.c:154
+msgid "Point Spectrum, extracts point spectra to a graph."
+msgstr "Espectro pontual, extrai pontos de espectros para um gráfico."
+
+#: modules/tools/spectro.c:193
+msgid "Point Spectroscopy"
+msgstr "Espectroscopia de ponto"
+
+#: modules/tools/spectro.c:194
+msgid "Extract and view point spectroscopy data"
+msgstr "Extrair e ver dados de espectroscopia de ponto"
+
+#: modules/tools/spectro.c:362
+msgid "_Separate spectra"
+msgstr "_Separar espectro"
+
+#: modules/tools/spectro.c:372
+msgid "_Average spectra"
+msgstr "Média dos espectros"
+
+#: modules/tools/spectro.c:511
+msgid "Spectroscopy"
+msgstr "Espectroscopia"
+
+#: modules/tools/spotremove.c:158
+msgid ""
+"Spot removal tool, interpolates small parts of data (displayed on a zoomed "
+"view) using selected algorithm."
+msgstr ""
+"Ferramenta de remoção de pontos, interpola pequenas partes dos dados "
+"(exibidas em uma visão ampliada) usando o algoritmo selecionado."
+
+#: modules/tools/spotremove.c:201
+msgid "Remove Spots"
+msgstr "Remover pontos"
+
+#: modules/tools/spotremove.c:202
+msgid "Interpolate small defects, manually selected"
+msgstr "Interpolar pequenos defeitos, selecionado manualmente"
+
+#: modules/tools/spotremove.c:269
+msgid "Hyperbolic flatten"
+msgstr "Achatamento hiperbólico"
+
+#: modules/tools/spotremove.c:270
+msgid "Pseudo-Laplace"
+msgstr "Pseudo-Laplace"
+
+#: modules/tools/spotremove.c:272
+msgid "Fractal interpolation"
+msgstr "Interpolação fractal"
+
+#: modules/tools/spotremove.c:577
+msgid "No point in the image selected."
+msgstr "Nenhum ponto na imagem selecionada."
+
+#: modules/tools/spotremove.c:579
+msgid "No area in the zoom selected."
+msgstr "Sem área na seleção amplificada."
+
+#: modules/tools/stats.c:207
+msgid "Ra (Sa):"
+msgstr "Ra (Sa):"
+
+#: modules/tools/stats.c:208
+msgid "Rms (Sq):"
+msgstr "Rms (Sq):"
+
+#: modules/tools/stats.c:209
+msgid "Rms (grain-wise):"
+msgstr "Rms (grãos):"
+
+#: modules/tools/stats.c:212
+msgid "Surface area:"
+msgstr "Área da superfície:"
+
+#: modules/tools/stats.c:213
+msgid "Projected area:"
+msgstr "Área projetada:"
+
+#: modules/tools/stats.c:217
+msgid "Inclination θ:"
+msgstr "Inclinação θ:"
+
+#: modules/tools/stats.c:218
+msgid "Inclination φ:"
+msgstr "Inclinação φ:"
+
+#: modules/tools/stats.c:224
+msgid "Statistics tool."
+msgstr "Ferramenta de estatísticas."
+
+#: modules/tools/stats.c:261 modules/tools/stats.c:1091
+msgid "Statistical Quantities"
+msgstr "Quantidades estatísticas"
+
+#: modules/tools/stats.c:262
+msgid "Statistical quantities"
+msgstr "Quantidades estatísticas"
+
+#: modules/tools/stats.c:998
+msgid "Save Statistical Quantities"
+msgstr "Salvar quantidades estatísticas"
+
+#: modules/tools/stats.c:1096
+#, c-format
+msgid "File: %s\n"
+msgstr "Arquivo: %s\n"
+
+#: modules/tools/stats.c:1100
+#, c-format
+msgid "Data channel: %s\n"
+msgstr "Canal de dados: %s\n"
+
+#: modules/tools/stats.c:1118
+msgid "Yes"
+msgstr "Sim"
+
+#: modules/tools/stats.c:1118
+msgid "No"
+msgstr "Não"
+
+#: modules/tools/stats.c:1128
+#, c-format
+msgid ""
+"Selected area: %s × %s at (%s, %s) px\n"
+" %s × %s at (%s, %s) %s\n"
+"Mask in use: %s\n"
+msgstr ""
+"Área selecionada: %s × %s em (%s, %s) px\n"
+" %s × %s em (%s, %s) %s\n"
+"Máscara em uso: %s\n"
+
+#: modules/volume/volume_calibrate.c:175
+msgid "Recalibrate volume data dimensions or value range."
+msgstr "Recalibrar dimensões do volume de dados ou intervalo de valor."
+
+#: modules/volume/volume_calibrate.c:189
+msgid "/_Dimensions and Units..."
+msgstr "/_Dimensões e unidades..."
+
+#: modules/volume/volume_calibrate.c:369
+msgid "Volume Dimensions and Units"
+msgstr "Dimensões de volume e unidades"
+
+#: modules/volume/volume_calibrate.c:486
+msgid "_Value range:"
+msgstr "Intervalo de _valores:"
+
+#: modules/volume/volume_calibrate.c:508
+msgid "Value shi_ft:"
+msgstr "Deslocamento de valores:"
+
+#: modules/volume/volume_calibrate.c:542
+msgid "_Value calibration factor:"
+msgstr "Fator de calibração de _valores:"
+
+#: modules/volume/volume_extract.c:216
+msgid "Shows and/or extracts a section of volume data"
+msgstr "Mostra e/ou extrai uma seção de volume de dados"
+
+#: modules/volume/volume_extract.c:230
+#, fuzzy
+msgid "/Show and _Extract..."
+msgstr "/Mostrar e _extrair..."
+
+#: modules/volume/volume_extract.c:234
+msgid "Show and/or extract a section of volume data"
+msgstr "Mostrar e/ou extrair uma seção de volume de dados"
+
+#: modules/volume/volume_extract.c:263
+msgid "X cross-section"
+msgstr "Secção transversal X"
+
+#: modules/volume/volume_extract.c:264
+msgid "Y cross-section"
+msgstr "Secção transversal Y"
+
+#: modules/volume/volume_extract.c:265
+msgid "Z cross-section"
+msgstr "Secção transversal Z"
+
+#: modules/volume/volume_extract.c:266 modules/volume/volume_extract.c:684
+msgid "X direction sum"
+msgstr "Soma na direção X"
+
+#: modules/volume/volume_extract.c:267 modules/volume/volume_extract.c:686
+msgid "Y direction sum"
+msgstr "Soma na direção Y"
+
+#: modules/volume/volume_extract.c:268 modules/volume/volume_extract.c:688
+msgid "Z direction sum"
+msgstr "Soma na direção Z"
+
+#: modules/volume/volume_extract.c:271
+msgid "X direction"
+msgstr "Direção X"
+
+#: modules/volume/volume_extract.c:272
+msgid "Y direction"
+msgstr "Direção Y"
+
+#: modules/volume/volume_extract.c:273
+msgid "Z direction"
+msgstr "Direção Z"
+
+#: modules/volume/volume_extract.c:315
+msgid "Volume data"
+msgstr "Dados de volume"
+
+#: modules/volume/volume_extract.c:317
+msgid "_Load"
+msgstr "Carregar"
+
+#: modules/volume/volume_extract.c:329
+msgid "_Extract projection"
+msgstr "Extrair projeção"
+
+#: modules/volume/volume_extract.c:347
+msgid "Projections"
+msgstr "Projeções"
+
+#: modules/volume/volume_extract.c:395
+msgid "Z position"
+msgstr "Posição Z"
+
+#: modules/volume/volume_extract.c:405
+msgid "Shown cut direction:"
+msgstr "Direção do corte exibida:"
+
+#: modules/volume/volume_extract.c:485
+msgid "Graph cut direction:"
+msgstr "Direção de corte do gráfico:"
+
+#: modules/volume/volume_extract.c:511
+msgid "3D view"
+msgstr "Visão 3D"
+
+#: modules/volume/volume_extract.c:538
+msgid "Zoom"
+msgstr "Zoom"
+
+#: modules/volume/volume_extract.c:545
+msgid "Wireframe threshold"
+msgstr "Limiar da estrutura tipo arame"
+
+#: modules/volume/volume_extract.c:552
+msgid "Z scale"
+msgstr "Escala Z"
+
+#: modules/volume/volume_extract.c:559
+msgid "Opacity scale"
+msgstr "Escala de opacidade"
+
+#: modules/volume/volume_extract.c:565
+#, fuzzy
+msgid "Apply perspective"
+msgstr "Aplicar perspectiva"
+
+#: modules/volume/volume_extract.c:574
+#, fuzzy
+msgid "Instant 3D render"
+msgstr "Renderização 3D instantânea"
+
+#: modules/volume/volume_extract.c:587
+msgid "X view"
+msgstr "Visão X"
+
+#: modules/volume/volume_extract.c:592
+msgid "Y view"
+msgstr "Visão Y"
+
+#: modules/volume/volume_extract.c:597
+msgid "Z view"
+msgstr "Visão Z"
+
+#: modules/volume/volume_extract.c:669
+#, c-format
+msgid "X cross-section at x: %d"
+msgstr "Secção transversal X em x: %d"
+
+#: modules/volume/volume_extract.c:672
+#, c-format
+msgid "Y cross-section at y: %d"
+msgstr "Secção transversal Y em y: %d"
+
+#: modules/volume/volume_extract.c:676
+#, c-format
+msgid "Z cross-section at Z = %g %s (#%d)"
+msgstr "Secção transversal Z em Z = %g %s (#%d)"
+
+#: modules/volume/volume_extract.c:735 modules/volume/volume_slice.c:1278
+#, c-format
+msgid "X graph at y: %d z: %d"
+msgstr "Gráfico X em y: %d z: %d"
+
+#: modules/volume/volume_extract.c:738 modules/volume/volume_slice.c:1287
+#, c-format
+msgid "Y graph at x: %d z: %d"
+msgstr "Gráfico Y em x: %d z: %d"
+
+#: modules/volume/volume_extract.c:741 modules/volume/volume_slice.c:1269
+#, c-format
+msgid "Z graph at x: %d y: %d"
+msgstr "Gráfico Z em x: %d y: %d"
+
+#: modules/volume/volume_extract.c:762
+msgid "Brick graph"
+msgstr "Gráfico de tijolos"
+
+#: modules/volume/volume_extract.c:1042
+msgid "Load volume data"
+msgstr "Carregar dados de volume"
+
+#: modules/volume/volume_extract.c:1204
+#, c-format
+msgid "Shown range %g to %g"
+msgstr "Mostrar intervalo %g para %g"
+
+#: modules/volume/volume_extract.c:1897
+msgid "Building wireframe model..."
+msgstr "Construindo modelo de estrutura tipo arame..."
+
+#: modules/volume/volume_fdfit.c:199
+msgid "Evaluate volume force-distance data"
+msgstr "Avaliar volume de dados força-distância"
+
+#: modules/volume/volume_fdfit.c:213
+#, fuzzy
+msgid "/_Evaluate FD Data..."
+msgstr "/Avaliar dados F-D..."
+
+#: modules/volume/volume_fdfit.c:217
+msgid "Evaluate force-distance volume data"
+msgstr "Avaliar volume de dados força-distância"
+
+#: modules/volume/volume_fdfit.c:371
+msgid "Curve _X position:"
+msgstr "Posição _X da curva:"
+
+#: modules/volume/volume_fdfit.c:380
+msgid "Curve _Y position:"
+msgstr "Posição _Y da curva:"
+
+#: modules/volume/volume_fdfit.c:511
+msgid "e_stimate"
+msgstr "E_stimar"
+
+#: modules/volume/volume_invert.c:39 modules/volume/volumeops.c:39
+msgid "Inverts value in volume data"
+msgstr "Inverte valor em volume de dados"
+
+#: modules/volume/volume_invert.c:53
+#, fuzzy
+msgid "/_Invert Value"
+msgstr "/_Inverter valor"
+
+#: modules/volume/volume_invert.c:57
+msgid "Invert value in volume data"
+msgstr "Inverter valor em volume de dados"
+
+#: modules/volume/volume_kmeans.c:95
+msgid "Calculates K-means clustering on volume data."
+msgstr "Calcula particionamento K-médios em dados de volume."
+
+#: modules/volume/volume_kmeans.c:109
+#, fuzzy
+msgid "/_K-Means Clustering..."
+msgstr "/Particionamento K-médios..."
+
+#: modules/volume/volume_kmeans.c:113
+msgid "Calculate K-means clustering on volume data"
+msgstr "Calcular particionamento K-médios em dados de volume"
+
+#: modules/volume/volume_kmeans.c:152
+msgid "K-means"
+msgstr "K-médios"
+
+#: modules/volume/volume_kmeans.c:170 modules/volume/volume_kmedians.c:163
+msgid "_Number of clusters:"
+msgstr "_Número de particionamentos:"
+
+#: modules/volume/volume_kmeans.c:177 modules/volume/volume_kmedians.c:170
+msgid "Convergence _precision digits:"
+msgstr "Precisão dos dígitos de convergência:"
+
+#: modules/volume/volume_kmeans.c:183 modules/volume/volume_kmedians.c:176
+msgid "_Max. iterations:"
+msgstr "Interações _máx.:"
+
+#: modules/volume/volume_kmeans.c:187 modules/volume/volume_kmedians.c:181
+msgid "_Normalize"
+msgstr "_Normalizar"
+
+#: modules/volume/volume_kmeans.c:193
+msgid "_Remove outliers"
+msgstr "_Remover isolados"
+
+#: modules/volume/volume_kmeans.c:202
+msgid "Outliers _threshold:"
+msgstr "Limite dos isolados:"
+
+#: modules/volume/volume_kmeans.c:425
+msgid "K-means iteration..."
+msgstr "Interação K-médios..."
+
+#: modules/volume/volume_kmeans.c:645
+#, c-format
+msgid "K-means cluster of %s"
+msgstr "Particionamento K-médios de %s"
+
+#: modules/volume/volume_kmeans.c:654
+#, c-format
+msgid "K-means error of %s"
+msgstr "Erro K-médios de %s"
+
+#: modules/volume/volume_kmeans.c:664 modules/volume/volume_kmedians.c:512
+#, c-format
+msgid "Pre-normalized intensity of %s"
+msgstr "Intensidade pré-normalizada de %s"
+
+#: modules/volume/volume_kmeans.c:696
+#, c-format
+msgid "K-means center %d"
+msgstr "Centro de K-médios %d"
+
+#: modules/volume/volume_kmedians.c:88
+msgid "Calculates K-medians clustering on volume data."
+msgstr "Calcula particionamento K-medianos em dados de volume."
+
+#: modules/volume/volume_kmedians.c:102
+#, fuzzy
+msgid "/_K-Medians Clustering..."
+msgstr "/Particionamento K-medianos..."
+
+#: modules/volume/volume_kmedians.c:106
+msgid "Calculate K-medians clustering on volume data"
+msgstr "Calcular particionamento K-medianos em dados de volume"
+
+#: modules/volume/volume_kmedians.c:145
+msgid "K-Medians"
+msgstr "K-medianos"
+
+#: modules/volume/volume_kmedians.c:390
+msgid "K-medians iteration..."
+msgstr "Interação K-medianos..."
+
+#: modules/volume/volume_kmedians.c:493
+#, c-format
+msgid "K-medians cluster of %s"
+msgstr "Particionamento K-medianos de %s"
+
+#: modules/volume/volume_kmedians.c:502
+#, c-format
+msgid "K-medians error of %s"
+msgstr "Erro K-medianos de %s"
+
+#: modules/volume/volume_kmedians.c:544
+#, c-format
+msgid "K-medians center %d"
+msgstr "Centro de K-medianos %d"
+
+#: modules/volume/volume_linestat.c:173
+msgid "Summarizes profiles of volume data to a channel."
+msgstr "Compila perfis de volume de dados para um canal."
+
+#: modules/volume/volume_linestat.c:187
+msgid "/Summarize _Profiles..."
+msgstr "/Compilar _perfis..."
+
+#: modules/volume/volume_linestat.c:191
+msgid "Summarize profiles"
+msgstr "Compilar perfis"
+
+#: modules/volume/volume_linestat.c:251
+msgid "_Extract image"
+msgstr "_Extrair imagem"
+
+#: modules/volume/volume_linestat.c:252
+msgid "Set _preview"
+msgstr "Definir _previsão"
+
+#: modules/volume/volume_linestat.c:289
+msgid "Summarize Volume Profiles"
+msgstr "Compilar perfis de volume"
+
+#: modules/volume/volume_slice.c:196
+msgid "Extracts image planes and line graphs from volume data."
+msgstr ""
+"Extrai planos de imagem e gráficos de linhas a partir de dados de volume."
+
+#: modules/volume/volume_slice.c:210
+msgid "/Cut and _Slice..."
+msgstr "/Cortar e fatiar..."
+
+#: modules/volume/volume_slice.c:214
+msgid "Extract image planes and line graphs"
+msgstr "Extrai planos de imagem e gráficos de linhas"
+
+#: modules/volume/volume_slice.c:266
+msgid "Image slice"
+msgstr "Fatia da imagem"
+
+#: modules/volume/volume_slice.c:267
+msgid "Line graph"
+msgstr "Linha de gráfico"
+
+#: modules/volume/volume_slice.c:292
+msgid "Slice Volume Data"
+msgstr "Fatiar dados de volume"
+
+#: modules/volume/volume_slice.c:371
+msgid "_Base plane:"
+msgstr "Plano _base:"
+
+#: modules/volume/volume_slice.c:422
+msgid "Extract _multiple items"
+msgstr "Extrair _múltiplos itens"
+
+#: modules/volume/volume_slice.c:439
+msgid "Positions"
+msgstr "Posições"
+
+#: modules/volume/volume_slice.c:492
+msgid "_Z:"
+msgstr "_Z:"
+
+#: modules/volume/volume_slice.c:1167
+#, c-format
+msgid "Z slice at %.*f%s%s (#%d)"
+msgstr "Fatia Z em %.*f%s%s (#%d)"
+
+#: modules/volume/volume_slice.c:1178
+#, c-format
+msgid "Y slice at %.*f%s%s (#%d)"
+msgstr "Fatia Y em %.*f%s%s (#%d)"
+
+#: modules/volume/volume_slice.c:1189
+#, c-format
+msgid "X slice at %.*f%s%s (#%d)"
+msgstr "Fatia X em %.*f%s%s (#%d)"
+
+#: modules/volume/volume_slice.c:1325
+msgid "Volume Z graphs"
+msgstr "Gráficos de volume Z"
+
+#: modules/volume/volume_slice.c:1332
+msgid "Volume X graphs"
+msgstr "Gráficos de volume X"
+
+#: modules/volume/volume_slice.c:1339
+msgid "Volume Y graphs"
+msgstr "Gráficos de volume Y"
+
+#: modules/volume/volume_swaxes.c:104
+#, fuzzy
+msgid "Swaps axes of volume data."
+msgstr "Inverte valor em volume de dados"
+
+#: modules/volume/volume_swaxes.c:118
+#, fuzzy
+msgid "/S_wap axes..."
+msgstr "/Salvar _como"
+
+#: modules/volume/volume_swaxes.c:122
+#, fuzzy
+msgid "Swap axes"
+msgstr "Mostrar ei_xos"
+
+#: modules/volume/volume_swaxes.c:156
+#, fuzzy
+msgid "X"
+msgstr "_X:"
+
+#: modules/volume/volume_swaxes.c:157
+#, fuzzy
+msgid "X, reversed"
+msgstr "Re_verter"
+
+#: modules/volume/volume_swaxes.c:158
+#, fuzzy
+msgid "Y"
+msgstr "_Y:"
+
+#: modules/volume/volume_swaxes.c:159
+#, fuzzy
+msgid "Y, reversed"
+msgstr "Re_verter"
+
+#: modules/volume/volume_swaxes.c:160
+msgid "Z"
+msgstr ""
+
+#: modules/volume/volume_swaxes.c:161
+#, fuzzy
+msgid "Z, reversed"
+msgstr "Re_verter"
+
+#: modules/volume/volume_swaxes.c:175
+msgid "Swap Volume Axes"
+msgstr ""
+
+#: modules/volume/volume_swaxes.c:196
+msgid "Current _X axis will become:"
+msgstr ""
+
+#: modules/volume/volume_swaxes.c:204
+msgid "Current _Y axis will become:"
+msgstr ""
+
+#: modules/volume/volume_swaxes.c:212
+msgid "Current _Z axis will become:"
+msgstr ""
+
+#: modules/volume/volume_swaxes.c:219
+#, fuzzy
+msgid "Create new volume data"
+msgstr "Carregar dados de volume"
+
+#: modules/volume/volume_swaxes.c:286
+msgid "Z axis calibration will be lost."
+msgstr ""
+
+#: modules/volume/volume_zcal.c:104
+msgid "Attaches, extracts and removes volume data z-axis calibration."
+msgstr "Anexa, extrai e remove calibração do eixo z do volume de dados ."
+
+#: modules/volume/volume_zcal.c:118
+msgid "/_Z-Calibration..."
+msgstr "/Calibração _Z..."
+
+#: modules/volume/volume_zcal.c:122
+msgid "Manage z-axis calibration"
+msgstr "Gerencia calibração do eixo z"
+
+#: modules/volume/volume_zcal.c:172
+msgid "_Extract to a graph"
+msgstr "_Extrair para um gráfico"
+
+#: modules/volume/volume_zcal.c:174
+msgid "_Attach from file"
+msgstr "_Anexar de um arquivo"
+
+#: modules/volume/volume_zcal.c:186 modules/volume/volume_zcal.c:225
+msgid "Volume Z Calibration"
+msgstr "Calibração de volume Z"
+
+#: modules/volume/volume_zcal.c:205
+msgid "Z-calibration action:"
+msgstr "Ação de calibração Z:"
+
+#: modules/volume/volume_zcal.c:357
+msgid "Calibration from file"
+msgstr "Calibração a partir de um arquivo"
+
+#: modules/volume/volume_zcal.c:359 modules/volume/volume_zcal.c:440
+msgid "Z-calibration curve"
+msgstr "Curva de calibração Z"
+
+#: modules/volume/volume_zcal.c:404
+msgid "Index"
+msgstr "Índice"
+
+#: modules/volume/volume_zcal.c:405
+msgid "Z axis value"
+msgstr "Valor do eixo Z"
+
+#: modules/volume/volume_zcal.c:490
+msgid ""
+"Calibration data file must have\n"
+"exactly one column."
+msgstr ""
+"Arquivo de dados de calibração deve conter\n"
+"exatamente uma coluna."
+
+#: modules/volume/volume_zcal.c:508
+msgid ""
+"File does not contain any\n"
+"readable data."
+msgstr ""
+"O arquivo não contém nenhum\n"
+"dado legível."
+
+#: modules/volume/volume_zcal.c:516
+#, c-format
+msgid ""
+"The number of data file values %d\n"
+"differs from the number of planes %d."
+msgstr ""
+"O número de valores do arquivo de dados %d\n"
+"é diferente do número de planos %d."
+
+#: modules/volume/volumeops.c:53
+#, fuzzy
+msgid "/Extract _Preview"
+msgstr "Extrair perfis"
+
+#: modules/volume/volumeops.c:57
+#, fuzzy
+msgid "Extract volume data preview to an image"
+msgstr "Salvar visão 3D para uma imagem"
+
+#: modules/xyz/xyz_drift.c:267
+msgid "Analyzes drift in XYZ data."
+msgstr "Analisa deriva em dados XYZ."
+
+#: modules/xyz/xyz_drift.c:281
+msgid "/Analyze _Drift..."
+msgstr "/Analisar _deriva..."
+
+#: modules/xyz/xyz_drift.c:285
+msgid "Analyze and/or remove drift"
+msgstr "Analisar e/ou remover deriva"
+
+#: modules/xyz/xyz_drift.c:362
+msgid ""
+"No timestamp channel found, either called 'Timestamp' or having units in "
+"seconds."
+msgstr ""
+"Nenhum canal com marca de data/hora encontrado, seja com o nome de "
+"'Timestamp' ou tendo unidades em segundos."
+
+#: modules/xyz/xyz_drift.c:391 modules/xyz/xyz_drift.c:849
+msgid "X drift"
+msgstr "Deriva X"
+
+#: modules/xyz/xyz_drift.c:410 modules/xyz/xyz_drift.c:850
+msgid "Y drift"
+msgstr "Deriva Y"
+
+#: modules/xyz/xyz_drift.c:421
+msgid "y-axis drift"
+msgstr "Deriva do eixo y"
+
+#: modules/xyz/xyz_drift.c:429 modules/xyz/xyz_drift.c:851
+msgid "Z drift"
+msgstr "Deriva Z"
+
+#: modules/xyz/xyz_drift.c:440
+msgid "z-axis drift"
+msgstr "Deriva do eixo z"
+
+#: modules/xyz/xyz_drift.c:541
+msgid "Analyze XYZ Drift"
+msgstr "Analisar deriva XYZ"
+
+#: modules/xyz/xyz_drift.c:566 modules/xyz/xyz_raster.c:406
+msgid "Reset Ran_ges"
+msgstr "Reiniciar intervalos"
+
+#: modules/xyz/xyz_drift.c:615
+msgid "_Guess parameters"
+msgstr "Adivinhar parâmetros"
+
+#: modules/xyz/xyz_drift.c:778 modules/xyz/xyz_raster.c:539
+msgid "_X-range:"
+msgstr "Intervalo _X:"
+
+#: modules/xyz/xyz_drift.c:800 modules/xyz/xyz_raster.c:561
+msgid "_Y-range:"
+msgstr "Intervalo _Y:"
+
+#: modules/xyz/xyz_drift.c:840 modules/xyz/xyz_drift.c:845
+msgid "2nd order polynom"
+msgstr "Polinômio de ordem 2"
+
+#: modules/xyz/xyz_drift.c:860
+msgid "Initial values"
+msgstr "Valores iniciais"
+
+#: modules/xyz/xyz_drift.c:868
+msgid "_X drift:"
+msgstr "Deriva _X:"
+
+#: modules/xyz/xyz_drift.c:896 modules/xyz/xyz_drift.c:939
+#: modules/xyz/xyz_drift.c:984
+msgid "_fit"
+msgstr "ajustar"
+
+#: modules/xyz/xyz_drift.c:908
+msgid "_Y drift:"
+msgstr "Deriva _Y:"
+
+#: modules/xyz/xyz_drift.c:953
+msgid "Z fit _type:"
+msgstr "Tipo de ajuste _Z:"
+
+#: modules/xyz/xyz_drift.c:1009
+msgid "Search parameters"
+msgstr "Procurar parâmetros"
+
+#: modules/xyz/xyz_drift.c:1014
+msgid "_Neighbors used:"
+msgstr "Vizinhos usados:"
+
+#: modules/xyz/xyz_drift.c:1031
+msgid "_Length threshold:"
+msgstr "Limiar de comprimento:"
+
+#: modules/xyz/xyz_drift.c:1050
+msgid "_Time threshold:"
+msgstr "Limiar de _tempo:"
+
+#: modules/xyz/xyz_drift.c:1068
+msgid "_Max iterations:"
+msgstr "Máx. de interações:"
+
+#: modules/xyz/xyz_drift.c:1081
+msgid "Results"
+msgstr "Resultados"
+
+#: modules/xyz/xyz_drift.c:1095
+msgid "X drift:"
+msgstr "Deriva X:"
+
+#: modules/xyz/xyz_drift.c:1103 modules/xyz/xyz_drift.c:1121
+#: modules/xyz/xyz_drift.c:1138
+msgid "to inits"
+msgstr "inicializar"
+
+#: modules/xyz/xyz_drift.c:1113
+msgid "Y drift:"
+msgstr "Deriva Y:"
+
+#: modules/xyz/xyz_drift.c:1130
+msgid "Z drift:"
+msgstr "Deriva Z:"
+
+#: modules/xyz/xyz_drift.c:1745
+msgid "No neighbors found"
+msgstr "Nenhum vizinho encontrado"
+
+#: modules/xyz/xyz_drift.c:1919
+msgid "Fitting in progress..."
+msgstr "Ajuste em progresso..."
+
+#: modules/xyz/xyz_drift.c:2264 modules/xyz/xyz_raster.c:981
+msgid "Physical dimensions are invalid."
+msgstr "Dimensões físicas são inválidas."
+
+#: modules/xyz/xyz_level.c:93
+msgid "Simple XYZ data leveling."
+msgstr "Nivelamento simples de dados XYZ."
+
+#: modules/xyz/xyz_level.c:107
+msgid "/Fix _Zero"
+msgstr "/Fixar _zero"
+
+#: modules/xyz/xyz_level.c:114
+msgid "/Zero _Mean Value"
+msgstr "/Zerar valor _médio"
+
+#: modules/xyz/xyz_level.c:121
+msgid "/Plane _Level..."
+msgstr "/Nivelamento plano..."
+
+#: modules/xyz/xyz_level.c:125
+msgid "Level data by mean plane correction"
+msgstr "Nivelar dados por correção de plano médio"
+
+#: modules/xyz/xyz_level.c:224
+msgid "Plane subtraction"
+msgstr "Subtração de plano"
+
+#: modules/xyz/xyz_level.c:225
+msgid "Rotation"
+msgstr "Rotação"
+
+#: modules/xyz/xyz_level.c:236
+msgid "Level XYZ Data"
+msgstr "Nivelar dados XYZ"
+
+#: modules/xyz/xyz_level.c:272
+msgid "Update X and Y of _all compatible data"
+msgstr "Atualizar X e Y para todos os dados compatíveis"
+
+#: modules/xyz/xyz_raster.c:194
+msgid "Rasterizes XYZ data to images."
+msgstr "Rasteriza dados XYZ para imagens."
+
+#: modules/xyz/xyz_raster.c:208
+msgid "/_Rasterize..."
+msgstr "/_Rasterizar..."
+
+#: modules/xyz/xyz_raster.c:212
+msgid "Rasterize to image"
+msgstr "Rasterizar para imagem"
+
+#: modules/xyz/xyz_raster.c:337
+msgid "Rasterize XYZ Data"
+msgstr "Rasterizar dados XYZ"
+
+#: modules/xyz/xyz_raster.c:351
+msgid "Create Image _Directly"
+msgstr "Criar imagem _diretamente"
+
+#: modules/xyz/xyz_raster.c:357
+msgid "XY points form a regular grid so interpolation is not necessary."
+msgstr ""
+"Pontos XY formam uma grade regular, logo a interpolação não é necessária."
+
+#: modules/xyz/xyz_raster.c:392
+msgid "Make Pixels S_quare"
+msgstr "Tornar pixeis _quadrados"
+
+#: modules/xyz/xyz_raster.c:611
+msgid "Field"
+msgstr "Campo"
+
+#: modules/xyz/xyz_raster.c:925
+#, c-format
+msgid ""
+"Number of points: %u\n"
+"Merged as too close: %u\n"
+"Added on the boundaries: %u"
+msgstr ""
+"Número de pontos: %u\n"
+"Mesclado como muito próximo: %u\n"
+"Adicionado nas fronteiras: %u"
+
+#: modules/xyz/xyz_raster.c:1065
+msgid ""
+"XYZ data regularization failed due to numerical instability or was "
+"interrupted."
+msgstr ""
+"A regularização de dados XYZ falhou devido a instabilidade numérica ou foi "
+"interrompida."
+
+#~ msgid "pixels"
+#~ msgstr "pixels "
+
+#~ msgid "Fast Fourier Transform"
+#~ msgstr "Transformada de Fourier rápida"
+
+#~ msgid "built-in SimpleFFT\n"
+#~ msgstr "SimpleFFT embutida\n"
+
+#~ msgid "_Like Current Channel"
+#~ msgstr "Como o canal atual"
+
+#~ msgid "Re_fine"
+#~ msgstr "Re_finar"
+
+#~ msgid "Surface _coverage:"
+#~ msgstr "_Cobertura da superfície:"
+
+#~ msgid "Distribute"
+#~ msgstr "Distribuir"
+
+#~ msgid "Replace"
+#~ msgstr "Substituir"
+
+#~ msgid "_Fix res.:"
+#~ msgstr "_Fix res.:"
+
+#~ msgid "Reco_mpute"
+#~ msgstr "Recalcular"
+
+#~ msgid "Show mode:"
+#~ msgstr "Mostrar modo:"
+
+#~ msgid "Initializing GUI"
+#~ msgstr "Inicializando GUI"
+
+#, fuzzy
+#~ msgid "Slab size _x:"
+#~ msgstr "Tamanho do _plano:"
+
+#, fuzzy
+#~ msgid "Slab size _y:"
+#~ msgstr "Tamanho do _plano:"
+
+#, fuzzy
+#~ msgid "Stitch operations on data fields."
+#~ msgstr "Operações aritméticas simples com campos de dados."
+
+#, fuzzy
+#~ msgid "Stitch operations on data"
+#~ msgstr "Operações aritméticas em dados"
+
+#, fuzzy
+#~ msgid "X offset"
+#~ msgstr "Afastamento _X:"
+
+#, fuzzy
+#~ msgid "Y offset"
+#~ msgstr "Afastamento _Y:"
+
+#~ msgid "Create new channel"
+#~ msgstr "Criar um novo canal"
+
+#~ msgid "Borders extension..."
+#~ msgstr "Extensão para as bordas..."
+
+#~ msgid "Laplace interpolation..."
+#~ msgstr "Interpolação de Laplace..."
+
+#~ msgid "Graph function written in Python"
+#~ msgstr "Criar gráfico da função escrita em Python"
+
+#~ msgid ""
+#~ "Pygwy plugin: %s (%s)\n"
+#~ "Export failed."
+#~ msgstr ""
+#~ "Plugin Pygwy: %s (%s)\n"
+#~ "Exportação falhou."
diff --git a/po/ru.gmo b/po/ru.gmo
index a97263f..268e3f2 100644
Binary files a/po/ru.gmo and b/po/ru.gmo differ
diff --git a/po/ru.po b/po/ru.po
index 7e1bcfd..3df670e 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gwyddion\n"
"Report-Msgid-Bugs-To: yeti at gwyddion.net\n"
-"POT-Creation-Date: 2016-11-18 11:05+0100\n"
-"PO-Revision-Date: 2016-11-15 23:19+0300\n"
+"POT-Creation-Date: 2017-08-15 17:48+0200\n"
+"PO-Revision-Date: 2017-08-13 21:08+0400\n"
"Last-Translator: Daniil Bratashov <dn2010 at gmail.com>\n"
"Language-Team: russian <ru at li.org>\n"
"Language: ru_RU\n"
@@ -19,7 +19,7 @@ msgstr ""
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Poedit-Basepath: .\n"
-"X-Generator: Poedit 1.8.11\n"
+"X-Generator: Poedit 1.8.12\n"
"X-Poedit-SearchPath-0: /home/dan/.poedit\n"
#: libgwyddion/gwyexpr.c:765
@@ -132,7 +132,8 @@ msgstr "контакт: Герц (параболоид)"
#: app/data-browser-aux.c:1480 app/data-browser.c:2280 app/data-browser.c:2887
#: app/data-browser.c:3707 app/data-browser.c:3857 app/data-browser.c:4139
#: app/data-browser.c:4504 app/data-browser.c:4590 app/data-browser.c:5016
-#: app/resource-editor.c:366 modules/process/convolution_filter.c:691
+#: app/resource-editor.c:366 modules/file/xyzexport.c:214
+#: modules/process/convolution_filter.c:691
msgid "Untitled"
msgstr "Безымянный"
@@ -140,97 +141,105 @@ msgstr "Безымянный"
msgid "Initial residua evaluation..."
msgstr "Оценка начальной невязки..."
-#: libgwyddion/gwynlfit.c:479 modules/process/fit-shape.c:1632
+#: libgwyddion/gwynlfit.c:479 modules/process/fit-shape.c:1646
msgid "Fitting..."
msgstr "Аппроксимация..."
-#: libgwyddion/gwynlfitpreset.c:1442 libprocess/gwyprocessenums.c:101
-#: libprocess/gwyshapefitpreset.c:347
+#: libgwyddion/gwynlfitpreset.c:1549 libprocess/gwyprocessenums.c:101
+#: libprocess/gwyshapefitpreset.c:347 modules/process/psf-fit.c:157
msgid "Gaussian"
msgstr "Гауссиана"
-#: libgwyddion/gwynlfitpreset.c:1457
+#: libgwyddion/gwynlfitpreset.c:1564
msgid "Gaussian (PSDF)"
msgstr "Гауссиана (ФСПМ)"
-#: libgwyddion/gwynlfitpreset.c:1470
+#: libgwyddion/gwynlfitpreset.c:1577
msgid "Gaussian (ACF)"
msgstr "Гауссиана (АКФ)"
-#: libgwyddion/gwynlfitpreset.c:1483
+#: libgwyddion/gwynlfitpreset.c:1590
msgid "Gaussian (HHCF)"
msgstr "Гауссиана (ФКВВ)"
-#: libgwyddion/gwynlfitpreset.c:1496
+#: libgwyddion/gwynlfitpreset.c:1603
msgid "Gaussian (RPSDF)"
msgstr "Гауссиана (РФСПМ)"
-#: libgwyddion/gwynlfitpreset.c:1509
+#: libgwyddion/gwynlfitpreset.c:1616
msgid "Two Gaussians (PSDF)"
msgstr "Две гауссианы (ФСПМ)"
-#: libgwyddion/gwynlfitpreset.c:1524 modules/xyz/xyz_drift.c:841
-#: modules/xyz/xyz_drift.c:846 modules/xyz/xyz_drift.c:1819
+#: libgwyddion/gwynlfitpreset.c:1631 modules/xyz/xyz_drift.c:841
+#: modules/xyz/xyz_drift.c:846 modules/xyz/xyz_drift.c:1818
msgid "Exponential"
msgstr "Экспоненциальная"
-#: libgwyddion/gwynlfitpreset.c:1536
+#: libgwyddion/gwynlfitpreset.c:1643
msgid "Exponential (PSDF)"
msgstr "Экспоненциальная (ФСПМ)"
-#: libgwyddion/gwynlfitpreset.c:1549
+#: libgwyddion/gwynlfitpreset.c:1656
msgid "Exponential (ACF)"
msgstr "Экспоненциальная (АКФ)"
-#: libgwyddion/gwynlfitpreset.c:1561
+#: libgwyddion/gwynlfitpreset.c:1668
msgid "Exponential (HHCF)"
msgstr "Экспоненциальная (ФКВВ)"
-#: libgwyddion/gwynlfitpreset.c:1574
+#: libgwyddion/gwynlfitpreset.c:1681
msgid "Exponential (RPSDF)"
msgstr "Экспоненциальная (РФСПМ)"
-#: libgwyddion/gwynlfitpreset.c:1588
+#: libgwyddion/gwynlfitpreset.c:1695
+msgid "K-correlated (PSDF)"
+msgstr "K-коррелированная (ФСПМ)"
+
+#: libgwyddion/gwynlfitpreset.c:1709
msgid "Polynomial (order 0)"
msgstr "Полиномиальная (порядка 0)"
-#: libgwyddion/gwynlfitpreset.c:1599 modules/xyz/xyz_drift.c:1805
+#: libgwyddion/gwynlfitpreset.c:1720 modules/xyz/xyz_drift.c:1804
msgid "Polynomial (order 1)"
msgstr "Полиномиальная (порядка 1)"
-#: libgwyddion/gwynlfitpreset.c:1610
+#: libgwyddion/gwynlfitpreset.c:1731
msgid "Polynomial (order 2)"
msgstr "Полиномиальная (порядка 2)"
-#: libgwyddion/gwynlfitpreset.c:1622
+#: libgwyddion/gwynlfitpreset.c:1743
msgid "Polynomial (order 3)"
msgstr "Полиномиальная (порядка 3)"
-#: libgwyddion/gwynlfitpreset.c:1635
+#: libgwyddion/gwynlfitpreset.c:1756
msgid "Square wave"
msgstr "Прямоугольные импульсы"
-#: libgwyddion/gwynlfitpreset.c:1651
+#: libgwyddion/gwynlfitpreset.c:1772
msgid "Parabolic step"
msgstr "Параболическая ступень"
-#: libgwyddion/gwynlfitpreset.c:1667
+#: libgwyddion/gwynlfitpreset.c:1788
msgid "Smooth slanted step"
msgstr "Гладкая наклонная ступень"
-#: libgwyddion/gwynlfitpreset.c:1684
+#: libgwyddion/gwynlfitpreset.c:1805
msgid "Smooth bent step"
msgstr "Гладкая ступень с изгибом"
-#: libgwyddion/gwynlfitpreset.c:1700
+#: libgwyddion/gwynlfitpreset.c:1821
+msgid "Boltzmann bent step"
+msgstr "Ступень с изгибом по Больцману"
+
+#: libgwyddion/gwynlfitpreset.c:1837
msgid "Power"
msgstr "Степенная"
-#: libgwyddion/gwynlfitpreset.c:1712 libprocess/gwyshapefitpreset.c:348
+#: libgwyddion/gwynlfitpreset.c:1849 libprocess/gwyshapefitpreset.c:348
msgid "Lorentzian"
msgstr "Лоренцева"
-#: libgwyddion/gwynlfitpreset.c:1726
+#: libgwyddion/gwynlfitpreset.c:1863
msgid "Sinc"
msgstr "Sinc"
@@ -251,7 +260,7 @@ msgid "Step height (positive)"
msgstr "Высота ступеньки (выступа)"
#: libprocess/cdline.c:590 libprocess/cdline.c:599
-#: libgwydgets/gwydgetenums.c:48 modules/process/hough.c:170
+#: libgwydgets/gwydgetenums.c:48 modules/process/hough.c:163
msgid "Line"
msgstr "Линия"
@@ -264,7 +273,7 @@ msgid "Circle (down)"
msgstr "Сфера (вниз)"
#: libprocess/cdline.c:608 libprocess/cdline.c:617
-#: libgwydgets/gwygraphareadialog.c:557 modules/process/hough.c:171
+#: libgwydgets/gwygraphareadialog.c:550 modules/process/hough.c:164
msgid "Circle"
msgstr "Круг"
@@ -272,237 +281,237 @@ msgstr "Круг"
msgid "Circle (up)"
msgstr "Сфера (вверх)"
-#: libprocess/gwygrainvalue.c:64
+#: libprocess/gwygrainvalue.c:62
msgid "Grain number"
msgstr "Номер зерна"
-#: libprocess/gwygrainvalue.c:73 modules/process/curvature.c:129
+#: libprocess/gwygrainvalue.c:71 modules/process/curvature.c:128
msgid "Center x position"
msgstr "Положение центра по x"
-#: libprocess/gwygrainvalue.c:82 modules/process/curvature.c:130
+#: libprocess/gwygrainvalue.c:80 modules/process/curvature.c:129
msgid "Center y position"
msgstr "Положение центра по y"
-#: libprocess/gwygrainvalue.c:91
+#: libprocess/gwygrainvalue.c:89
msgid "Minimum value"
msgstr "Минимальное значение"
-#: libprocess/gwygrainvalue.c:100
+#: libprocess/gwygrainvalue.c:98
msgid "Maximum value"
msgstr "Максимальное значение"
-#: libprocess/gwygrainvalue.c:109 modules/process/bdep_synth.c:133
-#: modules/tools/filter.c:237
+#: libprocess/gwygrainvalue.c:107 modules/process/bdep_synth.c:133
+#: modules/tools/filter.c:238
msgid "Mean value"
msgstr "Среднее значение"
-#: libprocess/gwygrainvalue.c:118 modules/tools/filter.c:238
+#: libprocess/gwygrainvalue.c:116 modules/tools/filter.c:239
msgid "Median value"
msgstr "Срединное значение"
-#: libprocess/gwygrainvalue.c:127
+#: libprocess/gwygrainvalue.c:125
msgid "Minimum value on boundary"
msgstr "Минимальное значение на границе"
-#: libprocess/gwygrainvalue.c:136
+#: libprocess/gwygrainvalue.c:134
msgid "Maximum value on boundary"
msgstr "Максимальное значение на границе"
-#: libprocess/gwygrainvalue.c:145
+#: libprocess/gwygrainvalue.c:143
msgid "Pixel area"
msgstr "Площадь в пикселях"
-#: libprocess/gwygrainvalue.c:154
+#: libprocess/gwygrainvalue.c:152
msgid "Projected area"
msgstr "Площадь проекции"
-#: libprocess/gwygrainvalue.c:163
+#: libprocess/gwygrainvalue.c:161
msgid "Surface area"
msgstr "Площадь поверхности"
-#: libprocess/gwygrainvalue.c:172
+#: libprocess/gwygrainvalue.c:170
msgid "Equivalent square side"
msgstr "Сторона эквивалентного квадрата"
-#: libprocess/gwygrainvalue.c:181
+#: libprocess/gwygrainvalue.c:179
msgid "Equivalent disc radius"
msgstr "Радиус эквивалентного диска"
-#: libprocess/gwygrainvalue.c:190
+#: libprocess/gwygrainvalue.c:188
msgid "Area above half-height"
msgstr "Площадь выше половинной высоты"
-#: libprocess/gwygrainvalue.c:199
+#: libprocess/gwygrainvalue.c:197
msgid "Area of convex hull"
msgstr "Площадь выпуклой оболочки"
#. TRANSLATORS: Grain volume calculated using basis (foot) set to
#. * zero.
-#: libprocess/gwygrainvalue.c:210
+#: libprocess/gwygrainvalue.c:208
msgid "Zero basis volume"
msgstr "Объём между нулевой плоскостью и поверхностью"
#. TRANSLATORS: Grain volume calculated using basis (foot) set to the
#. * grain minimum.
-#: libprocess/gwygrainvalue.c:221
+#: libprocess/gwygrainvalue.c:219
msgid "Grain minimum basis volume"
msgstr "Объём между поверхностью и плоскостью, проходящей через минимум зерна"
#. TRANSLATORS: Grain volume calculated using basis (foot) set to the
#. * Laplacian background.
-#: libprocess/gwygrainvalue.c:232
+#: libprocess/gwygrainvalue.c:230
msgid "Laplacian background basis volume"
msgstr "Объём между поверхностью и фоном, вычисленным по Лапласу"
-#: libprocess/gwygrainvalue.c:241
+#: libprocess/gwygrainvalue.c:239
msgid "Projected boundary length"
msgstr "Длина границы проекции"
-#: libprocess/gwygrainvalue.c:250
+#: libprocess/gwygrainvalue.c:248
msgid "Minimum bounding size"
msgstr "Минимальный ограничивающий размер"
-#: libprocess/gwygrainvalue.c:259
+#: libprocess/gwygrainvalue.c:257
msgid "Minimum bounding direction"
msgstr "Направление минимального ограничивающего размера"
-#: libprocess/gwygrainvalue.c:268
+#: libprocess/gwygrainvalue.c:266
msgid "Maximum bounding size"
msgstr "Максимальный ограничивающий размер"
-#: libprocess/gwygrainvalue.c:277
+#: libprocess/gwygrainvalue.c:275
msgid "Maximum bounding direction"
msgstr "Направление максимального ограничивающего размера"
-#: libprocess/gwygrainvalue.c:286
+#: libprocess/gwygrainvalue.c:284
msgid "Maximum inscribed disc radius"
msgstr "Максимальный радиус вписанного диска"
-#: libprocess/gwygrainvalue.c:295
+#: libprocess/gwygrainvalue.c:293
msgid "Maximum inscribed disc center x position"
msgstr "Положение центра по x максимального вписанного диска"
-#: libprocess/gwygrainvalue.c:304
+#: libprocess/gwygrainvalue.c:302
msgid "Maximum inscribed disc center y position"
msgstr "Положение центра по y максимального вписанного диска"
-#: libprocess/gwygrainvalue.c:313
+#: libprocess/gwygrainvalue.c:311
msgid "Minimum circumcircle radius"
msgstr "Минимальный радиус описанной окружности"
-#: libprocess/gwygrainvalue.c:322
+#: libprocess/gwygrainvalue.c:320
msgid "Minimum circumcircle center x position"
msgstr "Положение центра по x минимальной описанной окружности"
-#: libprocess/gwygrainvalue.c:331
+#: libprocess/gwygrainvalue.c:329
msgid "Minimum circumcircle center y position"
msgstr "Положение центра по y минимальной описанной окружности"
-#: libprocess/gwygrainvalue.c:340
+#: libprocess/gwygrainvalue.c:338
msgid "Mean radius"
msgstr "Средний радиус"
-#: libprocess/gwygrainvalue.c:349 modules/tools/readvalue.c:319
+#: libprocess/gwygrainvalue.c:347 modules/tools/readvalue.c:322
msgid "Inclination θ"
msgstr "Наклон θ"
-#: libprocess/gwygrainvalue.c:358 modules/tools/readvalue.c:329
+#: libprocess/gwygrainvalue.c:356 modules/tools/readvalue.c:332
msgid "Inclination φ"
msgstr "Наклон φ"
-#: libprocess/gwygrainvalue.c:367
+#: libprocess/gwygrainvalue.c:365
msgid "Curvature center x position"
msgstr "Положение центра кривизны по x"
-#: libprocess/gwygrainvalue.c:376
+#: libprocess/gwygrainvalue.c:374
msgid "Curvature center y position"
msgstr "Положение центра кривизны по y"
-#: libprocess/gwygrainvalue.c:385
+#: libprocess/gwygrainvalue.c:383
msgid "Curvature center z value"
msgstr "Значение центра кривизны по z"
-#: libprocess/gwygrainvalue.c:394 modules/tools/readvalue.c:344
+#: libprocess/gwygrainvalue.c:392 modules/tools/readvalue.c:347
msgid "Curvature 1"
msgstr "Кривизна 1"
-#: libprocess/gwygrainvalue.c:403 modules/tools/readvalue.c:354
+#: libprocess/gwygrainvalue.c:401 modules/tools/readvalue.c:357
msgid "Curvature 2"
msgstr "Кривизна 2"
-#: libprocess/gwygrainvalue.c:412
+#: libprocess/gwygrainvalue.c:410
msgid "Curvature angle 1"
msgstr "Угол кривизны 1"
-#: libprocess/gwygrainvalue.c:421
+#: libprocess/gwygrainvalue.c:419
msgid "Curvature angle 2"
msgstr "Угол кривизны 2"
-#: libprocess/gwygrainvalue.c:430
+#: libprocess/gwygrainvalue.c:428
msgid "Major semiaxis of equivalent ellipse"
msgstr "Большая полуось эквивалентного эллипса"
-#: libprocess/gwygrainvalue.c:439
+#: libprocess/gwygrainvalue.c:437
msgid "Minor semiaxis of equivalent ellipse"
msgstr "Малая полуось эквивалентного эллипса"
-#: libprocess/gwygrainvalue.c:448
+#: libprocess/gwygrainvalue.c:446
msgid "Orientation of equivalent ellipse"
msgstr "Ориентация эквивалентного эллипса"
-#: libprocess/gwygrainvalue.c:1120
+#: libprocess/gwygrainvalue.c:1118
msgid "Id"
msgstr "Идентификатор"
-#: libprocess/gwygrainvalue.c:1121 modules/graph/graph_peaks.c:156
-#: modules/process/extract_path.c:391 modules/process/wave_synth.c:482
-#: modules/tools/readvalue.c:251
+#: libprocess/gwygrainvalue.c:1119 modules/graph/graph_peaks.c:154
+#: modules/process/extract_path.c:391 modules/process/wave_synth.c:513
+#: modules/tools/readvalue.c:253
msgid "Position"
msgstr "Позиция"
-#: libprocess/gwygrainvalue.c:1122 app/meta.c:411 modules/file/imgexport.c:4625
-#: modules/process/curvature.c:762 modules/tools/level3.c:468
-#: modules/tools/readvalue.c:286
+#: libprocess/gwygrainvalue.c:1120 app/meta.c:411 modules/file/imgexport.c:4573
+#: modules/process/curvature.c:759 modules/tools/level3.c:475
+#: modules/tools/readvalue.c:290
msgid "Value"
msgstr "Значение"
-#: libprocess/gwygrainvalue.c:1123
+#: libprocess/gwygrainvalue.c:1121
msgid "Area"
msgstr "Площадь"
-#: libprocess/gwygrainvalue.c:1124 app/data-browser.c:5624 app/toolbox.c:110
+#: libprocess/gwygrainvalue.c:1122 app/data-browser.c:5624 app/toolbox.c:115
msgid "Volume"
msgstr "Объём"
-#: libprocess/gwygrainvalue.c:1125
+#: libprocess/gwygrainvalue.c:1123
msgid "Boundary"
msgstr "Граница"
-#: libprocess/gwygrainvalue.c:1126 modules/process/pat_synth.c:829
-#: modules/process/pat_synth.c:1131 modules/process/pat_synth.c:1466
-#: modules/tools/linestats.c:171 modules/volume/volume_linestat.c:147
+#: libprocess/gwygrainvalue.c:1124 modules/process/pat_synth.c:830
+#: modules/process/pat_synth.c:1132 modules/process/pat_synth.c:1467
+#: modules/tools/linestats.c:171 modules/volume/volume_linestat.c:149
msgid "Slope"
msgstr "Уклон"
-#: libprocess/gwygrainvalue.c:1127 modules/process/curvature.c:213
-#: modules/process/curvature.c:613
+#: libprocess/gwygrainvalue.c:1125 modules/process/curvature.c:212
+#: modules/process/curvature.c:615
msgid "Curvature"
msgstr "Кривизна"
-#: libprocess/gwygrainvalue.c:1128
+#: libprocess/gwygrainvalue.c:1126
msgid "Moment"
msgstr "Момент"
-#: libprocess/gwygrainvalue.c:1132
+#: libprocess/gwygrainvalue.c:1130
msgid "User"
msgstr "Пользовательские"
-#: libprocess/gwyprocessenums.c:44
+#: libprocess/gwyprocessenums.c:44 modules/process/preview.h:263
msgid "Union"
msgstr "Объединение"
-#: libprocess/gwyprocessenums.c:45
+#: libprocess/gwyprocessenums.c:45 modules/process/preview.h:255
msgid "Intersection"
msgstr "Пересечение"
@@ -581,13 +590,13 @@ msgid "Scale and space adaptive"
msgstr "Адаптивный по масштабу и пространству"
#. TRANSLATORS: Interpolation type (AKA nearest neighbour)
-#: libprocess/gwyprocessenums.c:207 modules/file/imgexport.c:3791
-#: modules/xyz/xyz_raster.c:640
+#: libprocess/gwyprocessenums.c:207 modules/file/imgexport.c:3756
+#: modules/xyz/xyz_raster.c:609
msgid "Round"
-msgstr "Округление"
+msgstr "Округлением"
-#: libprocess/gwyprocessenums.c:208 modules/file/imgexport.c:3792
-#: modules/xyz/xyz_raster.c:641
+#: libprocess/gwyprocessenums.c:208 modules/file/imgexport.c:3757
+#: modules/xyz/xyz_raster.c:610
msgid "Linear"
msgstr "Линейная"
@@ -597,7 +606,7 @@ msgstr "Кубическая"
#: libprocess/gwyprocessenums.c:210
msgid "BSpline"
-msgstr "Бета-сплайн"
+msgstr "Бета-сплайном"
#: libprocess/gwyprocessenums.c:211
msgid "OMOMS"
@@ -605,11 +614,11 @@ msgstr "OMOMS"
#: libprocess/gwyprocessenums.c:212
msgid "NNA"
-msgstr "АБС"
+msgstr "Ближайшим соседом"
#: libprocess/gwyprocessenums.c:213
msgid "Schaum"
-msgstr "Шаум"
+msgstr "по Шауму"
#: libprocess/gwyprocessenums.c:245
msgid "windowing|None"
@@ -675,27 +684,27 @@ msgstr "Включить только область под маской"
msgid "Use entire image (ignore mask)"
msgstr "Использовать всё изображение (игнорировать маску)"
-#: libprocess/gwyprocessenums.c:602
+#: libprocess/gwyprocessenums.c:604
msgid "distance|City-block"
msgstr "Кварталы"
-#: libprocess/gwyprocessenums.c:603
+#: libprocess/gwyprocessenums.c:605
msgid "distance|Chess"
msgstr "Шахматное"
-#: libprocess/gwyprocessenums.c:604
+#: libprocess/gwyprocessenums.c:606
msgid "distance|Octagonal 4,8"
msgstr "Октагональное 4,8"
-#: libprocess/gwyprocessenums.c:605
+#: libprocess/gwyprocessenums.c:607
msgid "distance|Octagonal 8,4"
msgstr "Октагональное 8,4"
-#: libprocess/gwyprocessenums.c:606
+#: libprocess/gwyprocessenums.c:608
msgid "distance|Octagonal"
msgstr "Октагональное"
-#: libprocess/gwyprocessenums.c:607
+#: libprocess/gwyprocessenums.c:609
msgid "distance|Euclidean"
msgstr "Евклидово"
@@ -731,11 +740,11 @@ msgstr "Параболическая ступень"
msgid "Ring"
msgstr "Кольцо"
-#: libprocess/morph_lib.c:169 libprocess/tip.c:1043
+#: libprocess/morph_lib.c:169 libprocess/tip.c:1052
msgid "Dilation..."
msgstr "Расширение..."
-#: libprocess/morph_lib.c:235 libprocess/tip.c:1164
+#: libprocess/morph_lib.c:235 libprocess/tip.c:1173
msgid "Erosion..."
msgstr "Эрозия..."
@@ -768,81 +777,81 @@ msgstr[0] "Найден %d внутренний локальный максим
msgstr[1] "Найдено %d внутренних локальных максимума"
msgstr[2] "Найдено %d внутренних локальных максимумов"
-#: libprocess/tip.c:422
+#: libprocess/tip.c:431
msgid "Pyramid"
msgstr "Пирамида"
-#: libprocess/tip.c:423 libprocess/tip.c:429 libprocess/tip.c:435
+#: libprocess/tip.c:432 libprocess/tip.c:438 libprocess/tip.c:444
msgid "Pyramidal"
msgstr "Пирамидальный"
-#: libprocess/tip.c:428
+#: libprocess/tip.c:437
msgid "Contact"
msgstr "Контактный"
-#: libprocess/tip.c:434
+#: libprocess/tip.c:443
msgid "Noncontact"
msgstr "Бесконтактный"
-#: libprocess/tip.c:440
+#: libprocess/tip.c:449
msgid "Delta function"
msgstr "Дельта-функция"
-#: libprocess/tip.c:441
+#: libprocess/tip.c:450
msgid "Analytical"
msgstr "Аналитический"
-#: libprocess/tip.c:446
+#: libprocess/tip.c:455 modules/process/fibre_synth.c:259
msgid "Parabola"
msgstr "Парабола"
-#: libprocess/tip.c:447 libprocess/tip.c:453
+#: libprocess/tip.c:456 libprocess/tip.c:462
msgid "Symmetric"
msgstr "Симметричный"
-#: libprocess/tip.c:452
+#: libprocess/tip.c:461
msgid "Cone"
msgstr "Конический"
-#: libprocess/tip.c:458
+#: libprocess/tip.c:467
msgid "Elliptical parabola"
msgstr "Эллиптическая парабола"
-#: libprocess/tip.c:459
+#: libprocess/tip.c:468
msgid "Asymmetric"
msgstr "Асимметричный"
-#: libprocess/tip.c:1339 libprocess/tip.c:1367 libprocess/tip.c:1416
-#: libprocess/tip.c:1443
+#: libprocess/tip.c:1348 libprocess/tip.c:1376 libprocess/tip.c:1425
+#: libprocess/tip.c:1452
msgid "Converting fields"
msgstr "Преобразуются поля"
-#: libprocess/tip.c:1349
+#: libprocess/tip.c:1358
msgid "Starting partial estimation"
msgstr "Запускается частичная оценка"
-#: libprocess/tip.c:1426
+#: libprocess/tip.c:1435
msgid "Starting full estimation"
msgstr "Запускается полная оценка"
-#: libprocess/triangulation.c:2085 modules/process/calcoefs_view.c:793
+#: libprocess/triangulation.c:2084 modules/process/calcoefs_view.c:793
#: modules/process/lat_synth.c:1178
msgid "Triangulating..."
msgstr "Производится триангуляция..."
-#: libgwydgets/gwy3dwindow.c:570
+#: libgwydgets/gwy3dwindow.c:575
msgid "Rotate view (R)"
msgstr "Повернуть вид (R)"
-#: libgwydgets/gwy3dwindow.c:575
+#: libgwydgets/gwy3dwindow.c:580
msgid "Scale view as a whole (S)"
msgstr "Масштабировать вид как целое (S)"
-#: libgwydgets/gwy3dwindow.c:580
+#: libgwydgets/gwy3dwindow.c:585
msgid "Scale value range (V)"
msgstr "Масштабировать диапазон значений (V)"
-#: libgwydgets/gwy3dwindow.c:585
+#: libgwydgets/gwy3dwindow.c:590
msgid "Move light source (L)"
msgstr "Переместить источник света (L)"
@@ -850,227 +859,286 @@ msgstr "Переместить источник света (L)"
msgid "Show full controls"
msgstr "Показать все элементы управления"
-#: libgwydgets/gwy3dwindow.c:693
+#: libgwydgets/gwy3dwindow.c:691
msgid "Hide full controls"
msgstr "Скрыть все элементы управления"
-#: libgwydgets/gwy3dwindow.c:709 modules/file/imgexport.c:4796
-#: modules/process/fit-shape.c:461
+#: libgwydgets/gwy3dwindow.c:707 modules/file/imgexport.c:4745
+#: modules/process/fit-shape.c:462
msgid "adjective|Basic"
msgstr "Основные"
-#: libgwydgets/gwy3dwindow.c:714
+#: libgwydgets/gwy3dwindow.c:712
msgid "Light & Material"
msgstr "Свет и материал"
-#: libgwydgets/gwy3dwindow.c:719
+#: libgwydgets/gwy3dwindow.c:717
msgid "Labels"
msgstr "Метки"
-#: libgwydgets/gwy3dwindow.c:828 modules/process/facet_analysis.c:331
-#: modules/process/facet_analysis.c:347 modules/process/shade.c:245
+#: libgwydgets/gwy3dwindow.c:722
+msgid "Colorbar"
+msgstr "Линейка псевдоцвета"
+
+#: libgwydgets/gwy3dwindow.c:838 modules/process/facet_analysis.c:335
+#: modules/process/facet_analysis.c:351 modules/process/shade.c:253
#: modules/process/tilt.c:223
msgid "φ:"
msgstr "φ:"
-#: libgwydgets/gwy3dwindow.c:828 libgwydgets/gwy3dwindow.c:834
-#: libgwydgets/gwy3dwindow.c:1032 libgwydgets/gwy3dwindow.c:1040
-#: modules/process/facet_analysis.c:375 modules/process/indent_analyze.c:460
-#: modules/process/rotate.c:264 modules/process/shade.c:237
-#: modules/process/shade.c:245 modules/process/tilt.c:211
-#: modules/process/tilt.c:223 modules/process/tip_model.c:234
-#: modules/process/tip_model.c:240 modules/process/unrotate.c:334
+#: libgwydgets/gwy3dwindow.c:838 libgwydgets/gwy3dwindow.c:843
+#: libgwydgets/gwy3dwindow.c:1013 libgwydgets/gwy3dwindow.c:1020
+#: modules/process/correct_affine.c:461 modules/process/facet_analysis.c:238
+#: modules/process/facet_analysis.c:370 modules/process/indent_analyze.c:438
+#: modules/process/measure_lattice.c:381 modules/process/rotate.c:264
+#: modules/process/shade.c:245 modules/process/shade.c:253
+#: modules/process/synth.h:379 modules/process/synth.h:410
+#: modules/process/tilt.c:211 modules/process/tilt.c:223
+#: modules/process/tip_model.c:234 modules/process/tip_model.c:240
+#: modules/process/unrotate.c:334 modules/tools/distance.c:197
+#: modules/tools/readvalue.c:223 modules/tools/stats.c:319
msgid "deg"
msgstr "°"
-#: libgwydgets/gwy3dwindow.c:834 modules/process/facet_analysis.c:330
-#: modules/process/facet_analysis.c:346 modules/process/shade.c:237
+#: libgwydgets/gwy3dwindow.c:843 modules/process/facet_analysis.c:334
+#: modules/process/facet_analysis.c:350 modules/process/shade.c:245
#: modules/process/tilt.c:211
msgid "θ:"
msgstr "θ:"
-#: libgwydgets/gwy3dwindow.c:839 modules/process/cwt.c:151
+#: libgwydgets/gwy3dwindow.c:849 modules/process/cwt.c:151
msgid "_Scale:"
msgstr "_Масштаб:"
-#: libgwydgets/gwy3dwindow.c:846
+#: libgwydgets/gwy3dwindow.c:856
msgid "_Value scale:"
msgstr "Масштаб _значений:"
-#: libgwydgets/gwy3dwindow.c:851
+#: libgwydgets/gwy3dwindow.c:862
msgid "Ph_ysical scale:"
msgstr "_Физический масштаб:"
-#: libgwydgets/gwy3dwindow.c:865
+#: libgwydgets/gwy3dwindow.c:876
msgid "verb|Set"
msgstr "Установить"
-#: libgwydgets/gwy3dwindow.c:877
+#: libgwydgets/gwy3dwindow.c:886
msgid "Line _width:"
msgstr "_Ширина линии:"
-#: libgwydgets/gwy3dwindow.c:881
+#: libgwydgets/gwy3dwindow.c:886 libgwydgets/gwy3dwindow.c:1194
+#: libgwydgets/gwy3dwindow.c:1204 libgwydgets/gwy3dwindow.c:1235
+#: libgwydgets/gwygraphareadialog.c:157 libgwydgets/gwygraphareadialog.c:173
+#: modules/file/hdrimage.cc:2246 modules/file/hdrimage.cc:2252
+#: modules/file/pixmap.c:820 modules/file/pixmap.c:826
+#: modules/process/angle_dist.c:188 modules/process/angle_dist.c:213
+#: modules/process/col_synth.c:486 modules/process/crosscor.c:252
+#: modules/process/crosscor.c:260 modules/process/crosscor.c:276
+#: modules/process/crosscor.c:284 modules/process/crosscor.c:300
+#: modules/process/crosscor.c:308 modules/process/cwt.c:151
+#: modules/process/dimensions.h:88 modules/process/edge.c:672
+#: modules/process/entropy.c:242 modules/process/extend.c:220
+#: modules/process/extend.c:227 modules/process/extend.c:234
+#: modules/process/extend.c:241 modules/process/facet_analysis.c:362
+#: modules/process/fbm_synth.c:383 modules/process/hough.c:203
+#: modules/process/local_contrast.c:146 modules/process/mark_disconn.c:263
+#: modules/process/mask_morph.c:237 modules/process/median-bg.c:209
+#: modules/process/neural.c:623 modules/process/neural.c:631
+#: modules/process/psdf_logphi.c:276 modules/process/rank.c:188
+#: modules/process/scale.c:237 modules/process/scale.c:246
+#: modules/process/scars.c:353 modules/process/scars.c:361
+#: modules/process/semsim.c:227 modules/process/slope_dist.c:365
+#: modules/process/slope_dist.c:393 modules/process/sphere-revolve.c:346
+#: modules/process/straighten_path.c:278 modules/process/synth.h:280
+#: modules/process/synth.h:501 modules/process/tip_blind.c:334
+#: modules/process/tip_blind.c:342 modules/process/volumize_layers.c:240
+#: modules/process/volumize_layers.c:245 modules/process/volumize_layers.c:250
+#: modules/process/wpour_mark.c:320 modules/tools/filter.c:291
+#: modules/tools/level3.c:244 modules/tools/maskedit.c:528
+#: modules/tools/maskedit.c:629 modules/tools/pathlevel.c:256
+#: modules/tools/profile.c:377 modules/tools/profile.c:503
+#: modules/tools/readvalue.c:222 modules/tools/readvalue.c:378
+#: modules/tools/roughness.c:868 modules/volume/volume_slice.c:446
+#: modules/volume/volume_slice.c:469 modules/volume/volume_slice.c:492
+#: modules/xyz/xyz_drift.c:738 modules/xyz/xyz_drift.c:753
+#: modules/xyz/xyz_raster.c:382 modules/xyz/xyz_raster.c:388
+msgid "px"
+msgstr "пикс."
+
+#: libgwydgets/gwy3dwindow.c:891
msgid "Show _axes"
msgstr "Показывать _оси"
-#: libgwydgets/gwy3dwindow.c:890
+#: libgwydgets/gwy3dwindow.c:900
msgid "Show _labels"
msgstr "Показывать м_етки"
-#: libgwydgets/gwy3dwindow.c:899
-msgid "Show false _colorbar"
-msgstr "Показывать линейку псевдо_цвета"
-
-#: libgwydgets/gwy3dwindow.c:908
+#: libgwydgets/gwy3dwindow.c:909
msgid "_Orthographic projection"
msgstr "_Ортографическая проекция"
-#: libgwydgets/gwy3dwindow.c:917
+#: libgwydgets/gwy3dwindow.c:918
msgid "_Hide masked"
msgstr "Скр_ыть под маской"
-#: libgwydgets/gwy3dwindow.c:933
+#: libgwydgets/gwy3dwindow.c:934
msgid "_Lighting"
msgstr "О_свещение"
-#: libgwydgets/gwy3dwindow.c:934
+#: libgwydgets/gwy3dwindow.c:935
msgid "_Gradient"
msgstr "_Градиент"
-#: libgwydgets/gwy3dwindow.c:935
+#: libgwydgets/gwy3dwindow.c:936
msgid "_Overlay"
msgstr "_Наложение"
-#: libgwydgets/gwy3dwindow.c:936
+#: libgwydgets/gwy3dwindow.c:937
msgid "_Overlay - no light"
msgstr "Наложение - _без света"
-#: libgwydgets/gwy3dwindow.c:1009
+#: libgwydgets/gwy3dwindow.c:992
msgid "_Material:"
msgstr "_Материал:"
-#: libgwydgets/gwy3dwindow.c:1032
+#: libgwydgets/gwy3dwindow.c:1013
msgid "_Light φ:"
msgstr "_Угол φ света:"
-#: libgwydgets/gwy3dwindow.c:1040
+#: libgwydgets/gwy3dwindow.c:1020
msgid "L_ight θ:"
msgstr "Уг_ол θ света:"
-#: libgwydgets/gwy3dwindow.c:1070 libgwydgets/gwy3dwindow.c:1240
-#: app/toolbox-editor.c:215 modules/file/hdrimage.cc:2213
-#: modules/file/imgexport.c:4760 modules/file/pixmap.c:789
+#: libgwydgets/gwy3dwindow.c:1052 libgwydgets/gwy3dwindow.c:1243
+#: app/toolbox-editor.c:216 modules/file/hdrimage.cc:2213
+#: modules/file/imgexport.c:4708 modules/file/pixmap.c:789
#: modules/file/rawfile.c:424 modules/process/angle_dist.c:172
#: modules/process/bdep_synth.c:341 modules/process/calcoefs_new.c:371
-#: modules/process/calibrate.c:391 modules/process/col_synth.c:392
-#: modules/process/correct_affine.c:301 modules/process/curvature.c:615
-#: modules/process/cwt.c:135 modules/process/deposit_synth.c:349
+#: modules/process/calibrate.c:383 modules/process/col_synth.c:392
+#: modules/process/correct_affine.c:346 modules/process/curvature.c:617
+#: modules/process/cwt.c:135 modules/process/deposit_synth.c:350
#: modules/process/diff_synth.c:411 modules/process/domain_synth.c:354
#: modules/process/drift.c:245 modules/process/dwt.c:166
#: modules/process/dwtanisotropy.c:184 modules/process/edge.c:638
#: modules/process/extend.c:192 modules/process/facet-level.c:193
-#: modules/process/facet_analysis.c:271 modules/process/fbm_synth.c:303
+#: modules/process/facet_analysis.c:275 modules/process/fbm_synth.c:303
#: modules/process/fft.c:336 modules/process/fft_filter_2d.c:417
-#: modules/process/fft_synth.c:341 modules/process/fractal.c:231
-#: modules/process/grain_edge.c:213 modules/process/grain_mark.c:247
-#: modules/process/grain_wshed.c:167 modules/process/hough.c:179
-#: modules/process/lat_synth.c:567 modules/process/latsim.c:159
-#: modules/process/level.c:245 modules/process/linematch.c:804
-#: modules/process/lno_synth.c:433 modules/process/local_contrast.c:130
-#: modules/process/logistic.c:234 modules/process/mark_disconn.c:208
-#: modules/process/mask_distribute.c:152 modules/process/measure_lattice.c:256
-#: modules/process/median-bg.c:180 modules/process/noise_synth.c:336
-#: modules/process/obj_synth.c:441 modules/process/pat_synth.c:385
-#: modules/process/pid.c:199 modules/process/polydistort.c:210
-#: modules/process/polylevel.c:373 modules/process/psdf_logphi.c:249
-#: modules/process/rank.c:158 modules/process/rotate.c:243
-#: modules/process/scale.c:196 modules/process/scars.c:298
-#: modules/process/semsim.c:211 modules/process/shade.c:208
-#: modules/process/slope_dist.c:276 modules/process/sphere-revolve.c:218
-#: modules/process/straighten_path.c:249 modules/process/tilt.c:161
-#: modules/process/tip_model.c:169 modules/process/unrotate.c:220
-#: modules/process/volumize_layers.c:221 modules/process/wave_synth.c:349
-#: modules/process/wpour_mark.c:278 modules/volume/volume_calibrate.c:370
-#: modules/volume/volume_extract.c:331 modules/volume/volume_kmeans.c:153
-#: modules/volume/volume_kmedians.c:147 modules/volume/volume_linestat.c:292
-#: modules/volume/volume_slice.c:292
+#: modules/process/fft_synth.c:341 modules/process/fibre_synth.c:422
+#: modules/process/fractal.c:228 modules/process/grain_edge.c:212
+#: modules/process/grain_mark.c:246 modules/process/grain_wshed.c:168
+#: modules/process/hough.c:174 modules/process/lat_synth.c:567
+#: modules/process/latsim.c:159 modules/process/level.c:245
+#: modules/process/linematch.c:771 modules/process/lno_synth.c:431
+#: modules/process/local_contrast.c:130 modules/process/logistic.c:234
+#: modules/process/mark_disconn.c:208 modules/process/mask_distribute.c:152
+#: modules/process/measure_lattice.c:246 modules/process/median-bg.c:180
+#: modules/process/mfm_current.c:332 modules/process/mfm_field.c:281
+#: modules/process/mfm_findshift.c:230 modules/process/mfm_parallel.c:333
+#: modules/process/mfm_shift.c:170 modules/process/noise_synth.c:334
+#: modules/process/obj_synth.c:438 modules/process/pat_synth.c:385
+#: modules/process/phase_synth.c:205 modules/process/pid.c:197
+#: modules/process/polydistort.c:210 modules/process/polylevel.c:373
+#: modules/process/psdf_logphi.c:249 modules/process/rank.c:158
+#: modules/process/rotate.c:243 modules/process/scale.c:196
+#: modules/process/scars.c:317 modules/process/semsim.c:211
+#: modules/process/shade.c:210 modules/process/slope_dist.c:275
+#: modules/process/sphere-revolve.c:317 modules/process/straighten_path.c:248
+#: modules/process/tilt.c:161 modules/process/tip_model.c:167
+#: modules/process/unrotate.c:220 modules/process/volumize_layers.c:221
+#: modules/process/wave_synth.c:368 modules/process/wpour_mark.c:278
+#: modules/volume/volume_calibrate.c:370 modules/volume/volume_extract.c:324
+#: modules/volume/volume_kmeans.c:154 modules/volume/volume_kmedians.c:147
+#: modules/volume/volume_linestat.c:297 modules/volume/volume_slice.c:294
msgid "_Reset"
msgstr "_Сброс"
-#: libgwydgets/gwy3dwindow.c:1142
+#: libgwydgets/gwy3dwindow.c:1141
msgid "X-axis"
msgstr "Ось X"
-#: libgwydgets/gwy3dwindow.c:1143
+#: libgwydgets/gwy3dwindow.c:1142
msgid "Y-axis"
msgstr "Ось Y"
-#: libgwydgets/gwy3dwindow.c:1144
+#: libgwydgets/gwy3dwindow.c:1143
msgid "Minimum z value"
msgstr "Минимальное значение z"
-#: libgwydgets/gwy3dwindow.c:1145
+#: libgwydgets/gwy3dwindow.c:1144
msgid "Maximum z value"
msgstr "Максимальное значение z"
-#: libgwydgets/gwy3dwindow.c:1168 modules/file/imgexport.c:3836
+#: libgwydgets/gwy3dwindow.c:1167 modules/file/imgexport.c:3806
msgid "_Label:"
msgstr "_Метка:"
-#: libgwydgets/gwy3dwindow.c:1173
+#: libgwydgets/gwy3dwindow.c:1180
msgid "_Text:"
msgstr "_Текст:"
-#: libgwydgets/gwy3dwindow.c:1193
+#: libgwydgets/gwy3dwindow.c:1185
msgid "Move label"
msgstr "Переместить метку"
-#: libgwydgets/gwy3dwindow.c:1202
+#: libgwydgets/gwy3dwindow.c:1194
msgid "_Horizontally:"
msgstr "_Горизонтально:"
-#: libgwydgets/gwy3dwindow.c:1212
+#: libgwydgets/gwy3dwindow.c:1204
msgid "_Vertically:"
msgstr "_Вертикально:"
-#: libgwydgets/gwy3dwindow.c:1220
+#: libgwydgets/gwy3dwindow.c:1212
+msgid "A_ll labels have the same size"
+msgstr "Вс_е метки одного размера"
+
+#: libgwydgets/gwy3dwindow.c:1223
msgid "Scale size _automatically"
msgstr "Масштабировать размер _автоматически"
-#: libgwydgets/gwy3dwindow.c:1232 modules/tools/filter.c:290
+#: libgwydgets/gwy3dwindow.c:1235 modules/tools/filter.c:291
msgid "Si_ze:"
msgstr "_Размер:"
-#: libgwydgets/gwy3dwindow.c:1232 modules/process/cwt.c:151
-#: modules/process/hough.c:212
-msgid "pixels"
-msgstr "точек"
+#: libgwydgets/gwy3dwindow.c:1277
+msgid "Show false _colorbar"
+msgstr "Показывать линейку псевдо_цвета"
+
+#: libgwydgets/gwy3dwindow.c:1286
+msgid "Reserve space for _colorbar"
+msgstr "Резервировать место для _шкалы псевдоцвета"
+
+#: libgwydgets/gwy3dwindow.c:1302 modules/process/lat_synth.c:651
+#: modules/process/obj_synth.c:542 modules/process/pat_synth.c:1458
+#: modules/process/phase_synth.c:279
+msgid "_Size:"
+msgstr "Р_азмер:"
+
+#: libgwydgets/gwy3dwindow.c:1311
+msgid "_Vertical alignment:"
+msgstr "_Вертикальное выравнивание:"
-#: libgwydgets/gwy3dwindow.c:1726 libgwydgets/gwy3dwindow.c:1779
+#: libgwydgets/gwy3dwindow.c:1844 libgwydgets/gwy3dwindow.c:1897
msgid "S_witch to Lighting Mode"
msgstr "_Переключиться на режим освещения"
-#: libgwydgets/gwy3dwindow.c:1734 libgwydgets/gwy3dwindow.c:1756
+#: libgwydgets/gwy3dwindow.c:1852 libgwydgets/gwy3dwindow.c:1874
msgid "S_witch to Overlay Mode"
msgstr "П_ереключиться на режим наложенного изображения"
-#: libgwydgets/gwy3dwindow.c:1748 libgwydgets/gwy3dwindow.c:1771
+#: libgwydgets/gwy3dwindow.c:1866 libgwydgets/gwy3dwindow.c:1889
msgid "S_witch to Color Gradient Mode"
msgstr "Пе_реключиться на режим цветового градиента"
-#: libgwydgets/gwy3dwindow.c:1787
+#: libgwydgets/gwy3dwindow.c:1905
msgid "T_oggle light"
msgstr "Включить _освещение"
-#: libgwydgets/gwyaxisdialog.c:99
+#: libgwydgets/gwyaxisdialog.c:75
msgid "Axis Properties"
msgstr "Свойства оси"
-#: libgwydgets/gwyaxisdialog.c:101 libgwydgets/gwygraphlabeldialog.c:63
-msgid "Label Properties"
-msgstr "Свойства метки"
-
-#: libgwydgets/gwyaxisdialog.c:184
+#: libgwydgets/gwyaxisdialog.c:88
msgid "Label Text"
msgstr "Текст надписи"
@@ -1092,7 +1160,7 @@ msgid "Hidden"
msgstr "Скрытый"
#: libgwydgets/gwydgetenums.c:47 libgwydgets/gwygraphwindowmeasuredialog.c:572
-#: modules/file/imgexport.c:475 modules/tools/selectionmanager.c:274
+#: modules/file/imgexport.c:474 modules/tools/selectionmanager.c:274
msgid "Points"
msgstr "Точки"
@@ -1100,7 +1168,7 @@ msgstr "Точки"
msgid "Line + points"
msgstr "Линия + точки"
-#: libgwydgets/gwydgetutils.c:564
+#: libgwydgets/gwydgetutils.c:848
msgid "Change Mask Color"
msgstr "Изменить цвет маски"
@@ -1109,7 +1177,7 @@ msgid "Quantity"
msgstr "Количество"
#: libgwydgets/gwygrainvaluemenu.c:194 libgwydgets/gwygrainvaluemenu.c:207
-#: modules/process/curvature.c:753
+#: modules/process/curvature.c:750
msgid "Symbol"
msgstr "Символ"
@@ -1129,137 +1197,141 @@ msgstr "Пре_д."
msgid "_Next"
msgstr "С_лед."
-#: libgwydgets/gwygraphareadialog.c:127 modules/file/rawgraph.c:302
+#: libgwydgets/gwygraphareadialog.c:123 modules/file/rawgraph.c:302
msgid "Plot _style:"
msgstr "_Стиль графика:"
-#: libgwydgets/gwygraphareadialog.c:148
+#: libgwydgets/gwygraphareadialog.c:131
msgid "Pl_ot color:"
msgstr "_Цвет графика:"
-#: libgwydgets/gwygraphareadialog.c:159
+#: libgwydgets/gwygraphareadialog.c:151
msgid "Point _type:"
msgstr "_Тип точки:"
-#: libgwydgets/gwygraphareadialog.c:165
+#: libgwydgets/gwygraphareadialog.c:157
msgid "_Point size:"
msgstr "Размер то_чки:"
-#: libgwydgets/gwygraphareadialog.c:175
+#: libgwydgets/gwygraphareadialog.c:167
msgid "_Line type:"
msgstr "Тип _линии:"
-#: libgwydgets/gwygraphareadialog.c:181 modules/file/imgexport.c:3150
+#: libgwydgets/gwygraphareadialog.c:173 modules/file/imgexport.c:3154
msgid "Line t_hickness:"
msgstr "Тол_щина линии:"
-#: libgwydgets/gwygraphareadialog.c:187
+#: libgwydgets/gwygraphareadialog.c:180
msgid "<b>Label Te_xt</b>"
msgstr "<b>Те_кст метки</b>"
-#: libgwydgets/gwygraphareadialog.c:404
+#: libgwydgets/gwygraphareadialog.c:397
msgid "Set Curve Color"
msgstr "Установить цвет кривой"
-#: libgwydgets/gwygraphareadialog.c:556 modules/process/mask_morph.c:179
+#: libgwydgets/gwygraphareadialog.c:549 modules/process/mask_morph.c:178
msgid "Square"
-msgstr "Квадратная"
+msgstr "Квадрат"
-#: libgwydgets/gwygraphareadialog.c:558 modules/process/mask_morph.c:180
+#: libgwydgets/gwygraphareadialog.c:551 modules/process/mask_morph.c:179
msgid "Diamond"
msgstr "Ромб"
-#: libgwydgets/gwygraphareadialog.c:559
+#: libgwydgets/gwygraphareadialog.c:552
msgid "Cross"
msgstr "Крест"
-#: libgwydgets/gwygraphareadialog.c:560
+#: libgwydgets/gwygraphareadialog.c:553
msgid "Diagonal cross"
msgstr "Диагональный крест"
-#: libgwydgets/gwygraphareadialog.c:561
+#: libgwydgets/gwygraphareadialog.c:554
msgid "Asterisk"
msgstr "Шестилучевая звезда"
-#: libgwydgets/gwygraphareadialog.c:562
+#: libgwydgets/gwygraphareadialog.c:555
msgid "Star"
msgstr "Восьмилучевая звезда"
-#: libgwydgets/gwygraphareadialog.c:563
+#: libgwydgets/gwygraphareadialog.c:556
msgid "Triangle up"
msgstr "Треугольник вверх"
-#: libgwydgets/gwygraphareadialog.c:564
+#: libgwydgets/gwygraphareadialog.c:557
msgid "Triangle down"
msgstr "Треугольник вниз"
-#: libgwydgets/gwygraphareadialog.c:565
+#: libgwydgets/gwygraphareadialog.c:558
msgid "Triangle left"
msgstr "Треугольник налево"
-#: libgwydgets/gwygraphareadialog.c:566
+#: libgwydgets/gwygraphareadialog.c:559
msgid "Triangle right"
msgstr "Треугольник направо"
-#: libgwydgets/gwygraphareadialog.c:567
+#: libgwydgets/gwygraphareadialog.c:560
msgid "Full square"
msgstr "Заполненный квадрат"
-#: libgwydgets/gwygraphareadialog.c:568 modules/process/mask_morph.c:177
+#: libgwydgets/gwygraphareadialog.c:561 modules/process/mask_morph.c:176
msgid "Disc"
msgstr "Диск"
-#: libgwydgets/gwygraphareadialog.c:569
+#: libgwydgets/gwygraphareadialog.c:562
msgid "Full diamond"
msgstr "Заполненный ромб"
-#: libgwydgets/gwygraphareadialog.c:570
+#: libgwydgets/gwygraphareadialog.c:563
msgid "Full triangle up"
msgstr "Заполненный треугольник вверх"
-#: libgwydgets/gwygraphareadialog.c:571
+#: libgwydgets/gwygraphareadialog.c:564
msgid "Full triangle down"
msgstr "Заполненный треугольник вниз"
-#: libgwydgets/gwygraphareadialog.c:572
+#: libgwydgets/gwygraphareadialog.c:565
msgid "Full triangle left"
msgstr "Заполненный треугольник влево"
-#: libgwydgets/gwygraphareadialog.c:573
+#: libgwydgets/gwygraphareadialog.c:566
msgid "Full triangle right"
msgstr "Заполненный треугольник вправо"
-#: libgwydgets/gwygraphareadialog.c:635
+#: libgwydgets/gwygraphareadialog.c:628
msgid "line-style|Solid"
msgstr "Сплошная"
-#: libgwydgets/gwygraphareadialog.c:636
+#: libgwydgets/gwygraphareadialog.c:629
msgid "line-style|Dash"
msgstr "Штриховая"
-#: libgwydgets/gwygraphcurves.c:451
+#: libgwydgets/gwygraphcurves.c:448
msgid "Description"
msgstr "Описание"
-#: libgwydgets/gwygraphcurves.c:463
+#: libgwydgets/gwygraphcurves.c:460
msgid "Mode"
msgstr "Режим"
-#: libgwydgets/gwygraphcurves.c:481
+#: libgwydgets/gwygraphcurves.c:478
msgid "Color"
msgstr "Цвет"
-#: libgwydgets/gwygraphcurves.c:494
+#: libgwydgets/gwygraphcurves.c:491
msgid "Point Type"
msgstr "Тип точки"
-#: libgwydgets/gwygraphcurves.c:516
+#: libgwydgets/gwygraphcurves.c:513
msgid "Line Style"
msgstr "Стиль линии"
+#: libgwydgets/gwygraphlabeldialog.c:63
+msgid "Label Properties"
+msgstr "Свойства метки"
+
#: libgwydgets/gwygraphlabeldialog.c:74
-msgid "Frame thickness:"
-msgstr "Толщина рамки:"
+msgid "_Frame thickness:"
+msgstr "_Толщина рамки:"
#: libgwydgets/gwygraphlabeldialog.c:81
msgid "_Reversed layout"
@@ -1269,12 +1341,12 @@ msgstr "_Обратное расположение"
msgid "Abscissa"
msgstr "Абсцисса"
-#: libgwydgets/gwygraphwindow.c:163 app/toolbox-editor.c:1002 app/toolbox.c:108
+#: libgwydgets/gwygraphwindow.c:163 app/toolbox-editor.c:1015 app/toolbox.c:113
msgid "Graph"
msgstr "График"
#: libgwydgets/gwygraphwindow.c:170 modules/file/hdrimage.cc:472
-#: modules/process/fit-shape.c:656
+#: modules/process/fit-shape.c:666 modules/process/psf.c:229
msgid "Data"
msgstr "Данные"
@@ -1312,15 +1384,15 @@ msgstr "Точки в любом месте"
#: libgwydgets/gwygraphwindowmeasuredialog.c:394
#: libgwydgets/gwygraphwindowmeasuredialog.c:580 modules/tools/linestats.c:170
-#: modules/tools/roughness.c:516 modules/volume/volume_linestat.c:157
+#: modules/tools/roughness.c:517 modules/volume/volume_linestat.c:159
msgid "Length"
msgstr "Длина"
#: libgwydgets/gwygraphwindowmeasuredialog.c:398
#: libgwydgets/gwygraphwindowmeasuredialog.c:588 app/gwyplaintool.c:1018
-#: modules/process/lat_synth.c:747 modules/process/obj_synth.c:569
-#: modules/process/pat_synth.c:846 modules/process/pat_synth.c:1148
-#: modules/process/pat_synth.c:1483
+#: modules/process/fibre_synth.c:534 modules/process/lat_synth.c:747
+#: modules/process/obj_synth.c:567 modules/process/pat_synth.c:847
+#: modules/process/pat_synth.c:1149 modules/process/pat_synth.c:1484
msgid "Height"
msgstr "Высота"
@@ -1333,12 +1405,12 @@ msgid "Curve:"
msgstr "Кривая:"
#: libgwydgets/gwygraphwindowmeasuredialog.c:553
-#: modules/process/linematch.c:828 modules/process/semsim.c:249
+#: modules/process/linematch.c:795 modules/process/semsim.c:249
#: modules/xyz/xyz_level.c:254
msgid "Method:"
msgstr "Способ:"
-#: libgwydgets/gwygraphwindowmeasuredialog.c:592 modules/process/crosscor.c:354
+#: libgwydgets/gwygraphwindowmeasuredialog.c:592 modules/process/crosscor.c:331
msgid "Angle"
msgstr "Угол"
@@ -1348,7 +1420,7 @@ msgid "Preferred"
msgstr "Предпочтительное"
#: libgwydgets/gwyoptionmenus.c:470 app/meta.c:410
-#: modules/file/imgexport.c:4160 modules/file/imgexport.c:4607
+#: modules/file/imgexport.c:4110 modules/file/imgexport.c:4555
#: modules/file/rawfile.c:995 modules/process/convolution_filter.c:538
#: modules/process/neural.c:418 modules/tools/selectionmanager.c:345
msgid "Name"
@@ -1387,7 +1459,7 @@ msgid "A_dd symbol"
msgstr "_Добавить символ"
#: libgwydgets/gwyscitext.c:274 modules/file/rawfile.c:553
-#: modules/xyz/xyz_drift.c:580 modules/xyz/xyz_raster.c:405
+#: modules/xyz/xyz_drift.c:580 modules/xyz/xyz_raster.c:419
msgid "Preview"
msgstr "Предпросмотр"
@@ -1399,93 +1471,87 @@ msgstr "Невозможно открыть файл для чтения: %s."
#: libgwymodule/gwymodule-file.c:558
msgid "No module can load this file type."
-msgstr "Ни один из модулей не может открыть этот тип файла"
+msgstr "Ни один из модулей не может открыть этот тип файла."
#: libgwymodule/gwymodule-file.c:665
msgid "No module can save to this file type."
-msgstr "Ни один из модулей не может сохранить этот тип файла"
+msgstr "Ни один из модулей не может сохранить этот тип файла."
-#: libgwymodule/gwymodulebrowser.c:67
+#: libgwymodule/gwymodulebrowser.c:66
msgid "Module Browser"
msgstr "Просмотр модулей"
-#: libgwymodule/gwymodulebrowser.c:190
+#: libgwymodule/gwymodulebrowser.c:189
msgid "Module"
msgstr "Модуль"
-#: libgwymodule/gwymodulebrowser.c:190
+#: libgwymodule/gwymodulebrowser.c:189
msgid "Version"
msgstr "Версия"
-#: libgwymodule/gwymodulebrowser.c:190
+#: libgwymodule/gwymodulebrowser.c:189
msgid "Author"
msgstr "Автор"
-#: libgwymodule/gwymodulebrowser.c:246
+#: libgwymodule/gwymodulebrowser.c:244
msgid "Name-Version:"
msgstr "Название и версия:"
-#: libgwymodule/gwymodulebrowser.c:247 libgwymodule/gwymodulebrowser.c:270
+#: libgwymodule/gwymodulebrowser.c:245 libgwymodule/gwymodulebrowser.c:268
#: modules/process/grain_stat.c:186
msgid "File:"
msgstr "Файл:"
-#: libgwymodule/gwymodulebrowser.c:248
+#: libgwymodule/gwymodulebrowser.c:246
msgid "Registered functions:"
msgstr "Зарегистрированные функции:"
-#: libgwymodule/gwymodulebrowser.c:249
+#: libgwymodule/gwymodulebrowser.c:247
msgid "Authors:"
msgstr "Авторы:"
-#: libgwymodule/gwymodulebrowser.c:250
+#: libgwymodule/gwymodulebrowser.c:248
msgid "Copyright:"
-msgstr "Авторское право:"
+msgstr "Copyright:"
-#: libgwymodule/gwymodulebrowser.c:251
+#: libgwymodule/gwymodulebrowser.c:249
msgid "Date:"
msgstr "Дата:"
-#: libgwymodule/gwymodulebrowser.c:252
+#: libgwymodule/gwymodulebrowser.c:250
msgid "Description:"
msgstr "Описание:"
-#: libgwymodule/gwymodulebrowser.c:269
+#: libgwymodule/gwymodulebrowser.c:267
msgid "Name:"
msgstr "Имя:"
-#: libgwymodule/gwymodulebrowser.c:271
+#: libgwymodule/gwymodulebrowser.c:269
msgid "Failure:"
msgstr "Ошибка:"
-#: app/about.c:57
+#: app/about.c:58
#, c-format
msgid "About %s"
msgstr "О программе %s"
-#. TRANSLATORS: %s is replaced with date in ISO format YYYY-MM-DD.
-#: app/about.c:92
-#, c-format
-msgid "Released %s\n"
-msgstr "Выпущен %s\n"
-
-#: app/about.c:93
+#: app/about.c:97
msgid "An SPM data visualization and analysis tool."
msgstr "Инструмент визуализации и анализа данных СЗМ."
-#: app/about.c:101
+#: app/about.c:105
msgid "Report bugs to:"
msgstr "Отчёты об ошибках направлять:"
-#: app/about.c:116
+#: app/about.c:120
msgid "Credits"
msgstr "Благодарности"
-#: app/about.c:133
+#: app/about.c:137
msgid "License"
msgstr "Лицензия"
-#: app/about.c:138
+#: app/about.c:142
#, c-format
msgid ""
"%s is free software; you can redistribute it and/or modify it under the "
@@ -1496,63 +1562,67 @@ msgid ""
msgstr ""
"%s является свободным программным обеспечением; вы можете распространять и/"
"или изменять его согласно условиям Стандартной Общественной Лицензии GNU "
-"(GNU GPL), опубликованной Фондом свободного программного обеспечения (FSF), "
+"(GNU GPL), опубликованной Фондом свободного программного обеспечения (FSF); "
"либо Лицензии версии 2, либо (на ваше усмотрение) любой более поздней "
-"версии. Для получения полного текста лицензии смотрите файл COPYING в архиве "
-"исходного кода программы."
+"версии. Полный текст лицензии доступен в файле COPYING в архиве исходного "
+"кода программы."
-#: app/about.c:160 modules/process/logistic.c:270
+#: app/about.c:164 modules/process/logistic.c:269
msgid "Features"
msgstr "Возможности"
-#: app/about.c:220
+#: app/about.c:224
msgid "Developers"
msgstr "Разработчики"
-#: app/about.c:221
+#: app/about.c:225
msgid "Translators"
msgstr "Переводчики"
-#: app/about.c:225
+#: app/about.c:229
msgid "Development is supported by the Czech Metrology Institute: "
-msgstr "Разработка поддерживается Институтом метрологии Чехии: "
+msgstr "Разработка поддерживается Чешским институтом метрологии : "
-#: app/about.c:253 app/about.c:256
+#: app/about.c:257 app/about.c:260
msgid "OpenGL 3D View"
msgstr "Трёхмерный вид OpenGL"
-#: app/about.c:257 app/about.c:271 app/about.c:291
+#: app/about.c:261 app/about.c:266 app/about.c:286
msgid "not available\n"
msgstr "недоступен\n"
-#: app/about.c:262 app/about.c:265
-msgid "Fast Fourier Transform"
-msgstr "Быстрое преобразование Фурье"
-
-#: app/about.c:266
-msgid "built-in SimpleFFT\n"
-msgstr "встроенное SimpleFFT\n"
-
-#: app/about.c:274
+#: app/about.c:269
msgid "X11 protocol\n"
msgstr "протокол X11\n"
-#: app/about.c:276
+#: app/about.c:271
msgid "Win32 protocol\n"
msgstr "протокол Win32\n"
-#: app/about.c:278
+#: app/about.c:273
msgid "LibUnique\n"
msgstr "LibUnique\n"
-#: app/about.c:282
+#: app/about.c:277
msgid "Remote Control"
msgstr "Дистанционное управление"
-#: app/about.c:286 app/about.c:290
+#: app/about.c:281 app/about.c:285
msgid "Python Scripting Interface"
msgstr "Скриптовый интерфейс Python"
+#. TRANSLATORS: %s is replaced with date in ISO format YYYY-MM-DD.
+#: app/about.c:311
+#, c-format
+msgid "Development version, built %s"
+msgstr "Версия в разработке, собрана %s"
+
+#. TRANSLATORS: %s is replaced with date in ISO format YYYY-MM-DD.
+#: app/about.c:328
+#, c-format
+msgid "Released %s"
+msgstr "Выпущена %s"
+
#: app/app.c:301
#, c-format
msgid ""
@@ -1564,116 +1634,124 @@ msgstr ""
"%s\n"
"Действительно выйти?"
-#: app/app.c:440
+#: app/app.c:442
msgid "Mask _Color..."
msgstr "_Цвет маски..."
-#: app/app.c:456 app/app.c:1725
+#: app/app.c:458 app/app.c:1754
msgid "Zoom _1:1"
msgstr "Масштаб _1:1"
-#: app/app.c:460 app/app.c:1729 app/app.c:1957
+#: app/app.c:462 app/app.c:1758 app/app.c:1988
msgid "Metadata _Browser..."
msgstr "Просмотр _метаданных"
-#: app/app.c:465 app/app.c:1734 app/app.c:1962
+#: app/app.c:467 app/app.c:1763 app/app.c:1993
msgid "View _Log..."
msgstr "Просмотр _журнала..."
-#: app/app.c:649
+#: app/app.c:651
msgid "Pi_xelwise Square"
msgstr "Квадратные _пиксели"
-#: app/app.c:659
+#: app/app.c:661
msgid "_Physically Square"
msgstr "Равные _масштабы осей"
-#: app/app.c:836
+#: app/app.c:842
+msgid "Set as Default"
+msgstr "Использовать по умолчанию"
+
+#: app/app.c:844
+msgid "Set the current view setup as the default"
+msgstr "Установить текущие настройки вида как настройки по умолчанию"
+
+#: app/app.c:854
msgid "verb|Save"
msgstr "Сохранить"
-#: app/app.c:839 app/app.c:843
+#: app/app.c:857 app/app.c:861
msgid "Save 3D view to an image"
msgstr "Сохранить трёхмерный вид в изображение"
-#: app/app.c:849
-msgid "Set as Default"
-msgstr "Использовать по умолчанию"
+#: app/app.c:869
+msgid "_Autocrop"
+msgstr "Обрезать _автоматически"
-#: app/app.c:851
-msgid "Set the current view setup as the default"
-msgstr "Установить текущие настройки вида как настройки по умолчанию"
+#: app/app.c:873
+msgid "Remove white borders from exported image"
+msgstr "Удалить белые границы с экспортируемого изображения"
-#: app/app.c:940
+#: app/app.c:960
msgid "_Show mask"
msgstr "Показывать _маску"
-#: app/app.c:1106
+#: app/app.c:1172
#, c-format
msgid "Saving of 3D view to `%s' failed"
msgstr "Не удалось сохранить трёхмерный вид в `%s'"
-#: app/app.c:1150
+#: app/app.c:1222
msgid "Export 3D View"
msgstr "Экспортировать трёхмерный вид"
-#: app/app.c:1457
+#: app/app.c:1478
msgid "_Change Preview"
msgstr "_Изменить изображение предпросмотра"
-#: app/app.c:1583
+#: app/app.c:1606
msgid "Change Volume Data Preview"
msgstr "Изменить изображение предпросмотра для объёмных данных"
-#: app/app.c:1593
+#: app/app.c:1616
msgid "Preview quantity:"
msgstr "Величина для предпросмотра:"
-#: app/app.c:1603 modules/process/extend.c:267 modules/tools/linestats.c:165
+#: app/app.c:1626 modules/process/extend.c:267 modules/tools/linestats.c:165
#: modules/volume/volume_linestat.c:142
msgid "Mean"
msgstr "Среднее"
-#: app/app.c:1604 modules/process/polydistort.c:255 modules/tools/filter.c:240
+#: app/app.c:1627 modules/process/polydistort.c:258 modules/tools/filter.c:241
#: modules/tools/icolorange.c:424 modules/tools/linestats.c:167
#: modules/volume/volume_linestat.c:144
msgid "Minimum"
msgstr "Минимум"
-#: app/app.c:1605 modules/process/col_synth.c:170 modules/tools/filter.c:241
+#: app/app.c:1628 modules/process/col_synth.c:170 modules/tools/filter.c:242
#: modules/tools/icolorange.c:435 modules/tools/linestats.c:168
#: modules/volume/volume_linestat.c:145
msgid "Maximum"
msgstr "Максимум"
-#: app/app.c:1606
+#: app/app.c:1629 modules/volume/volume_linestat.c:146
msgid "Min. position"
msgstr "Положение минимума"
-#: app/app.c:1607
+#: app/app.c:1630 modules/volume/volume_linestat.c:147
msgid "Max. position"
msgstr "Положение максимума"
-#: app/app.c:1608 modules/process/bdep_synth.c:134
-#: modules/process/col_synth.c:171 modules/process/scars.c:346
-#: modules/process/scars.c:353 modules/process/threshold.c:341
+#: app/app.c:1631 modules/process/bdep_synth.c:134
+#: modules/process/col_synth.c:171 modules/process/scars.c:369
+#: modules/process/scars.c:377 modules/process/threshold.c:336
msgid "RMS"
msgstr "Ср. квадр."
-#: app/app.c:1609 modules/file/asciiexport.c:187 modules/file/gxyzffile.c:393
-#: modules/file/xyzexport.c:233 modules/file/xyzexport.c:302
+#: app/app.c:1632 modules/file/asciiexport.c:187 modules/file/gxyzffile.c:393
+#: modules/file/xyzexport.c:236 modules/file/xyzexport.c:305
msgid "Channel:"
msgstr "Канал:"
-#: app/app.c:1610
+#: app/app.c:1633
msgid "Section:"
msgstr "Сечение:"
-#: app/app.c:1861
+#: app/app.c:1890
msgid "_Update Preview"
msgstr "Обновить _предпросмотр"
-#: app/app.c:1867
+#: app/app.c:1896
msgid "_Density Map"
msgstr "_Карта плотности"
@@ -1692,12 +1770,12 @@ msgstr "Неизвестный объём %d"
msgid "Unknown XYZ %d"
msgstr "Неизвестное XYZ %d"
-#: app/data-browser-aux.c:2795
+#: app/data-browser-aux.c:2839
#, c-format
msgid "Z levels: %d, Z unit: %s"
msgstr "Уровней Z: %d, единицы измерения Z: %s"
-#: app/data-browser-aux.c:2821
+#: app/data-browser-aux.c:2865
#, c-format
msgid "Points: %d"
msgstr "Точек: %d"
@@ -1727,10 +1805,10 @@ msgid "Close file"
msgstr "Закрыть файл"
#: app/data-browser.c:5582
-msgid "Channels"
-msgstr "Каналы"
+msgid "Images"
+msgstr "Изображения"
-#: app/data-browser.c:5596 modules/volume/volume_extract.c:444
+#: app/data-browser.c:5596 modules/volume/volume_extract.c:431
msgid "Graphs"
msgstr "Графики"
@@ -1786,45 +1864,45 @@ msgstr ""
"\n"
"%s"
-#: app/file.c:285
+#: app/file.c:292
#, c-format
msgid "Opening of `%s' failed"
msgstr "Не удалось открыть '%s'"
-#: app/file.c:291 app/file.c:526
+#: app/file.c:298 app/file.c:533
#, c-format
msgid "Full file path: %s."
msgstr "Полный путь к файлу: %s."
-#: app/file.c:294
+#: app/file.c:301
#, c-format
msgid "Loaded using: %s."
msgstr "Загружено используя: %s."
-#: app/file.c:380
+#: app/file.c:387
msgid "Merge File"
msgstr "Объединить файлы"
-#: app/file.c:382 app/gwyappfilechooser.c:221
+#: app/file.c:389 app/gwyappfilechooser.c:226
msgid "Open File"
msgstr "Открыть файл"
-#: app/file.c:520 app/gwymoduleutils.c:192
+#: app/file.c:527 app/gwymoduleutils.c:192
#, c-format
msgid "Saving of `%s' failed"
msgstr "Сохранение `%s' не выполнено"
-#: app/file.c:529
+#: app/file.c:536
#, c-format
msgid "Saved using: %s."
msgstr "Сохранено используя: %s."
-#: app/file.c:689
+#: app/file.c:696
#, c-format
msgid "File `%s' already exists. Replace?"
msgstr "Файл `%s' уже существует. Заменить?"
-#: app/file.c:693
+#: app/file.c:700
#, c-format
msgid ""
"The file already exists in `%s'. Replacing it will overwrite its contents."
@@ -1832,7 +1910,7 @@ msgstr ""
"Файл уже существует в `%s'. Если его заменить, то его содержимое будет "
"перезаписано."
-#: app/file.c:696
+#: app/file.c:703
msgid "Replace File?"
msgstr "Заменить существующий файл?"
@@ -1856,11 +1934,11 @@ msgstr "закрыть список файлов"
msgid "Open selected file"
msgstr "Открыть выбранный файл"
-#: app/filelist.c:566 app/gwyappfilechooser.c:583
+#: app/filelist.c:566 app/gwyappfilechooser.c:592
msgid "_Filter:"
msgstr "_Фильтр:"
-#: app/filelist.c:604 app/gwyappfilechooser.c:619
+#: app/filelist.c:604 app/gwyappfilechooser.c:628
msgid "Case _sensitive"
msgstr "С учётом _регистра"
@@ -1910,97 +1988,97 @@ msgstr "_Кривая"
msgid "_Snap to control points"
msgstr "_Притягиваться к контрольным точкам"
-#: app/gwyappfilechooser.c:226
+#: app/gwyappfilechooser.c:231
msgid "Save File"
msgstr "Сохранить файл"
-#: app/gwyappfilechooser.c:380
+#: app/gwyappfilechooser.c:389
#, c-format
msgid "File _type: %s"
msgstr "_Тип файла: %s"
-#: app/gwyappfilechooser.c:387
+#: app/gwyappfilechooser.c:396
msgid "Only loadable shown"
msgstr "Показаны только загружаемые"
-#: app/gwyappfilechooser.c:391
+#: app/gwyappfilechooser.c:400
#, c-format
msgid "Filter: %s"
msgstr "Фильтр: %s"
-#: app/gwyappfilechooser.c:455
+#: app/gwyappfilechooser.c:464
msgid "Automatic by extension"
msgstr "Определять по расширению"
-#: app/gwyappfilechooser.c:464
+#: app/gwyappfilechooser.c:473
msgid "Automatically detected"
msgstr "Автоматически определённый"
-#: app/gwyappfilechooser.c:561
+#: app/gwyappfilechooser.c:570
msgid "Show only loadable files"
msgstr "Показать только загружаемые файлы"
-#: app/gwyappfilechooser.c:844
+#: app/gwyappfilechooser.c:855
msgid "Plane-level previewed data"
msgstr "Выровнять плоскость у данных предпросмотра"
-#: app/gwyappfilechooser.c:860
+#: app/gwyappfilechooser.c:871
msgid "Row-level previewed data"
msgstr "Выровнять строки у данных предпросмотра"
-#: app/gwyappfilechooser.c:969
+#: app/gwyappfilechooser.c:987
+msgid "File too large for preview"
+msgstr "Файл слишком большой для предпросмотра"
+
+#: app/gwyappfilechooser.c:988
msgid "…"
msgstr "…"
-#: app/gwyappfilechooser.c:1331
+#: app/gwyappfilechooser.c:1352
msgid "Cannot preview"
msgstr "Нельзя просмотреть."
-#: app/gwyddion.c:143
+#: app/gwyddion.c:147
msgid "Loading document history"
msgstr "Загружается список предыдущих документов"
-#: app/gwyddion.c:148
+#: app/gwyddion.c:152
msgid "Registering "
msgstr "Регистрация"
-#: app/gwyddion.c:149
+#: app/gwyddion.c:153
msgid "stock items"
msgstr "основных элементов"
-#: app/gwyddion.c:153
+#: app/gwyddion.c:157
msgid "color gradients"
msgstr "цветовых градиентов"
-#: app/gwyddion.c:155
+#: app/gwyddion.c:159
msgid "GL materials"
msgstr "материалов GL"
-#: app/gwyddion.c:157
+#: app/gwyddion.c:161
msgid "grain quantities"
msgstr "величин зёрен"
-#: app/gwyddion.c:159
+#: app/gwyddion.c:163
msgid "calibrations"
msgstr "калибровок"
-#: app/gwyddion.c:164
+#: app/gwyddion.c:168
msgid "Loading settings"
msgstr "Загрузка настроек"
-#: app/gwyddion.c:171
+#: app/gwyddion.c:175
msgid "Registering modules"
msgstr "Регистрация модулей"
-#: app/gwyddion.c:193
-msgid "Initializing GUI"
-msgstr "Инициализация графического интерфейса"
-
-#: app/gwyddion.c:439
+#: app/gwyddion.c:464
msgid "Could not read settings."
msgstr "Не удается считать настройки."
-#: app/gwyddion.c:442
+#: app/gwyddion.c:467
#, c-format
msgid ""
"Settings file `%s' cannot be read: %s\n"
@@ -2013,42 +2091,72 @@ msgstr ""
"Чтобы избежать потери сохранённых настроек попыток обновить его делаться не "
"будет до тех пор, пока он не будет исправлен или удалён."
-#: app/gwymoduleutils-file.c:542
+#: app/gwyddion.c:505
+#, c-format
+msgid "Many modules (%u) failed to register."
+msgstr "Большое количество модулей (%u) не смогло зарегистрироваться."
+
+#: app/gwyddion.c:510
+#, c-format
+msgid ""
+"Most likely Gwyddion was not upgraded correctly. Instead, one installation "
+"was just overwritten with another, and now it is a mess.\n"
+"\n"
+"Please remove completely the module directory\n"
+"\n"
+"%s\n"
+"\n"
+"and reinstall Gwyddion.\n"
+"\n"
+"See Info → Module Browser for specific errors."
+msgstr ""
+"Наиболее вероятно Gwyddion не был правильно обновлён. Вместо этого одна "
+"установка была просто переписана поверх другой и теперь там каша.\n"
+"\n"
+"Необходимо полностью удалить каталог с модулями\n"
+"\n"
+"%s\n"
+"\n"
+"и переустановить Gwyddion.\n"
+"\n"
+"Больше информации об ошибках доступно в меню Информация → Браузер модулей."
+
+#: app/gwymoduleutils-file.c:536
#, c-format
msgid "Section %s ended at line %u but it has never started."
msgstr "Секция %s закончилась в строке %u, но никогда не начиналась."
-#: app/gwymoduleutils-file.c:550
+#: app/gwymoduleutils-file.c:544
#, c-format
msgid "Section %s ended at line %u instead of %s."
msgstr "Секция %s закончилась в строке %u вместо %s."
-#: app/gwymoduleutils-file.c:587
+#: app/gwymoduleutils-file.c:581
#, c-format
msgid "Section %s started at line %u before %s ended."
msgstr "Секция %s закончилась в строке %u до того, как %s закончилась."
-#: app/gwymoduleutils-file.c:593
+#: app/gwymoduleutils-file.c:587
#, c-format
msgid "Empty section name at header line %u."
msgstr "Пустое название секции в строке заголовка %u."
-#: app/gwymoduleutils-file.c:628
+#: app/gwymoduleutils-file.c:622
#, c-format
msgid "Header line %u lacks prefix %s."
msgstr "В строке заголовка %u отсутствует префикс %s."
-#: app/gwymoduleutils-file.c:653
+#: app/gwymoduleutils-file.c:647
#, c-format
msgid "Header line %u lacks key-value separator."
msgstr "В строке заголовка %u отсутствует разделитель ключ-значение."
-#: app/gwymoduleutils-file.c:661
+#: app/gwymoduleutils-file.c:655
#, c-format
msgid "Key at header line %u is empty."
msgstr "Ключ в строке заголовка %u пустой."
-#: app/gwymoduleutils-file.c:688
+#: app/gwymoduleutils-file.c:682
#, c-format
msgid "Header suddenly ended at line %u; end of header marker is missing"
msgstr ""
@@ -2057,6 +2165,7 @@ msgstr ""
#: app/gwymoduleutils.c:197 app/settings.c:131 app/settings.c:142
#: app/toolbox-spec.c:536 modules/file/err.h:62
+#: modules/pygwy/pygwy-console.c:528
#, c-format
msgid "Cannot write to file: %s."
msgstr "Невозможно записать в файл: %s."
@@ -2085,8 +2194,9 @@ msgstr "Начальная точка"
#: app/gwyplaintool.c:1011 modules/file/rawfile.c:997
#: modules/process/convolution_filter.c:349
-#: modules/process/convolution_filter.c:553 modules/process/neural.c:419
-#: modules/process/obj_synth.c:538 modules/process/pat_synth.c:1449
+#: modules/process/convolution_filter.c:553 modules/process/fibre_synth.c:520
+#: modules/process/neural.c:419 modules/process/obj_synth.c:536
+#: modules/process/pat_synth.c:1450
msgid "Size"
msgstr "Размер"
@@ -2129,7 +2239,7 @@ msgstr "ru"
#: app/log.c:536
#, c-format
msgid "Log of %s (%s)"
-msgstr "Журнал %s (%s)"
+msgstr "Журнал для %s (%s)"
#: app/log.c:588 app/meta.c:224 modules/tools/selectionmanager.c:399
msgid "_Export"
@@ -2143,7 +2253,7 @@ msgstr "О_чистить"
msgid "_Close"
msgstr "_Закрыть"
-#: app/log.c:615 modules/file/imgexport.c:4168 modules/file/rawfile.c:996
+#: app/log.c:615 modules/file/imgexport.c:4118 modules/file/rawfile.c:996
msgid "Type"
msgstr "Тип"
@@ -2151,8 +2261,8 @@ msgstr "Тип"
msgid "Function"
msgstr "Функция"
-#: app/log.c:617 modules/file/imgexport.c:3117 modules/process/fit-shape.c:465
-#: modules/process/neural.c:610 modules/tools/stats.c:425
+#: app/log.c:617 modules/file/imgexport.c:3128 modules/process/fit-shape.c:466
+#: modules/process/neural.c:614 modules/tools/stats.c:423
msgid "Parameters"
msgstr "Параметры"
@@ -2164,39 +2274,39 @@ msgstr "Время"
msgid "Export Log"
msgstr "Экспортировать журнал"
-#: app/menu.c:556 app/toolbox.c:581
+#: app/menu.c:555 app/toolbox.c:595
msgid "_Data Process"
msgstr "_Обработка данных"
-#: app/menu.c:598 app/toolbox.c:584
+#: app/menu.c:597 app/toolbox.c:598
msgid "_Graph"
msgstr "_График"
-#: app/menu.c:641 app/toolbox.c:587
+#: app/menu.c:640 app/toolbox.c:601
msgid "_Volume Data"
msgstr "_Объёмные данные"
-#: app/menu.c:684 app/toolbox.c:590
+#: app/menu.c:683 app/toolbox.c:604
msgid "_XYZ Data"
msgstr "_Данные XYZ"
-#: app/menu.c:715
+#: app/menu.c:714
msgid "Re-show Last"
msgstr "Повторить с настройкой последний"
-#: app/menu.c:730
+#: app/menu.c:729
msgid "Repeat Last"
msgstr "Повторить последний"
-#: app/menu.c:858
+#: app/menu.c:857
msgid "Repeat"
msgstr "Повторить"
-#: app/menu.c:864
+#: app/menu.c:863
msgid "Re-show"
msgstr "Перепоказать"
-#: app/menu.c:1186
+#: app/menu.c:1185
msgid "_Document history"
msgstr "_Предыдущие документы"
@@ -2204,8 +2314,8 @@ msgstr "_Предыдущие документы"
msgid "_New"
msgstr "Новый _элемент"
-#: app/meta.c:235 modules/file/imgexport.c:4672 modules/file/rawfile.c:1058
-#: modules/process/neural.c:711 modules/tools/selectionmanager.c:405
+#: app/meta.c:235 modules/file/imgexport.c:4620 modules/file/rawfile.c:1058
+#: modules/process/neural.c:718 modules/tools/selectionmanager.c:405
msgid "_Delete"
msgstr "_Удалить"
@@ -2279,11 +2389,11 @@ msgstr "Не удаётся создать каталог интерфейса
msgid "Cannot create user module directory %s: %s"
msgstr "Не удаётся создать каталог модулей пользователя %s: %s"
-#: app/splash.c:832
+#: app/splash.c:1260
msgid "Starting "
msgstr "Запускается"
-#: app/splash.c:878
+#: app/splash.c:1313
msgid " is free software released under GNU GPL."
msgstr " – свободное ПО под лицензией GNU GPL."
@@ -2831,124 +2941,125 @@ msgstr "_Следующий совет"
msgid "_Show tips at startup"
msgstr "_Показывать подсказки при старте"
-#: app/toolbox-editor.c:212
+#: app/toolbox-editor.c:213
msgid "Toolbox Editor"
msgstr "Редактор панели инструментов"
-#: app/toolbox-editor.c:257
+#: app/toolbox-editor.c:258
msgid "_New Item"
msgstr "_Новый элемент"
-#: app/toolbox-editor.c:262
+#: app/toolbox-editor.c:263
msgid "_New Group"
msgstr "Новая _группа"
-#: app/toolbox-editor.c:268 app/toolbox.c:577
+#: app/toolbox-editor.c:269 app/toolbox.c:591
msgid "_Edit"
msgstr "_Правка"
-#: app/toolbox-editor.c:273 modules/process/fft_filter_2d.c:499
-#: modules/tools/maskedit.c:548 modules/volume/volume_zcal.c:173
+#: app/toolbox-editor.c:274 modules/process/fft_filter_2d.c:499
+#: modules/tools/maskedit.c:554 modules/volume/volume_zcal.c:173
msgid "_Remove"
msgstr "_Удалить"
-#: app/toolbox-editor.c:278
+#: app/toolbox-editor.c:279
msgid "Move _Up"
msgstr "Переместить _вверх"
-#: app/toolbox-editor.c:283
+#: app/toolbox-editor.c:284
msgid "Move _Down"
msgstr "Переместить в_низ"
-#: app/toolbox-editor.c:292 modules/file/hdrimage.cc:2304
-#: modules/file/imgexport.c:3101 modules/file/pixmap.c:872
+#: app/toolbox-editor.c:293 modules/file/hdrimage.cc:2304
+#: modules/file/imgexport.c:3114 modules/file/pixmap.c:872
#: modules/file/rawfile.c:658 modules/process/crosscor.c:252
-#: modules/process/dimensions.h:473 modules/process/tip_blind.c:333
+#: modules/process/dimensions.h:455 modules/process/fibre_synth.c:526
+#: modules/process/tip_blind.c:334
msgid "_Width:"
msgstr "_Ширина:"
-#: app/toolbox-editor.c:774
+#: app/toolbox-editor.c:787
msgid "Toolbox Group"
msgstr "Группа инструментов"
-#: app/toolbox-editor.c:791 modules/file/rawgraph.c:267
+#: app/toolbox-editor.c:804 modules/file/rawgraph.c:267
msgid "_Title:"
msgstr "_Заголовок:"
-#: app/toolbox-editor.c:805
+#: app/toolbox-editor.c:818
msgid "_Id:"
msgstr "_Индентификатор"
-#: app/toolbox-editor.c:818
+#: app/toolbox-editor.c:831
msgid "_Suggest"
msgstr "_Предложить"
-#: app/toolbox-editor.c:824
+#: app/toolbox-editor.c:837
msgid "Trans_latable title"
msgstr "П_ереводимое название"
-#: app/toolbox-editor.c:874
+#: app/toolbox-editor.c:887
msgid "Group id is not a valid identifier"
msgstr "Идентификатор группы не является правильным идентификатором"
-#: app/toolbox-editor.c:882
+#: app/toolbox-editor.c:895
msgid "Group id is not unique"
msgstr "Идентификатор группы не уникален"
-#: app/toolbox-editor.c:971
+#: app/toolbox-editor.c:984
msgid "Toolbox Item"
msgstr "Элемент панели инструментов"
-#: app/toolbox-editor.c:992 modules/process/coerce.c:331
+#: app/toolbox-editor.c:1005 modules/process/coerce.c:331
#: modules/tools/filter.c:284
msgid "_Type:"
msgstr "_Тип:"
-#: app/toolbox-editor.c:999
+#: app/toolbox-editor.c:1012
msgid "Placeholder"
msgstr "Заполнитель"
-#: app/toolbox-editor.c:1000
+#: app/toolbox-editor.c:1013
msgid "Builtin"
msgstr "Встроенные"
-#: app/toolbox-editor.c:1001 app/toolbox.c:107
+#: app/toolbox-editor.c:1014 app/toolbox.c:112
msgid "Data Process"
msgstr "Обработка данных"
-#: app/toolbox-editor.c:1003
+#: app/toolbox-editor.c:1016
msgid "Volume Data"
msgstr "Объёмные данные"
-#: app/toolbox-editor.c:1004
+#: app/toolbox-editor.c:1017
msgid "XYZ Data"
msgstr "Данные XYZ"
-#: app/toolbox-editor.c:1005
+#: app/toolbox-editor.c:1018
msgid "Tool"
msgstr "Инструмент"
-#: app/toolbox-editor.c:1012
+#: app/toolbox-editor.c:1025 modules/tools/profile.c:483
msgid "_Mode:"
msgstr "_Режим"
-#: app/toolbox-editor.c:1019 app/toolbox-editor.c:1038
+#: app/toolbox-editor.c:1032 app/toolbox-editor.c:1051
msgid "Default"
msgstr "По умолчанию"
-#: app/toolbox-editor.c:1020
+#: app/toolbox-editor.c:1033
msgid "Interactive"
msgstr "Интерактивно"
-#: app/toolbox-editor.c:1021
+#: app/toolbox-editor.c:1034
msgid "Non-interactive"
msgstr "Неинтерактивно"
-#: app/toolbox-editor.c:1029
+#: app/toolbox-editor.c:1042
msgid "Use _icon from:"
msgstr "Использовать _иконку из:"
-#: app/toolbox-editor.c:1063
+#: app/toolbox-editor.c:1076
msgid "Functions"
msgstr "Функции"
@@ -2964,143 +3075,159 @@ msgstr "остальные инструменты"
msgid "All tools not placed explicitly go here."
msgstr "Все инструменты, чьё положение явно не задано, попадут сюда."
-#: app/toolbox.c:106
+#: app/toolbox.c:111
msgid "View"
msgstr "Вид"
-#: app/toolbox.c:109
+#: app/toolbox.c:114
msgid "Tools"
msgstr "Инструменты"
-#: app/toolbox.c:575
+#: app/toolbox.c:589
msgid "_File"
msgstr "_Файл"
-#: app/toolbox.c:593
+#: app/toolbox.c:607
msgid "_Info"
msgstr "_Информация"
-#: app/toolbox.c:663
+#: app/toolbox.c:696
msgid "Display a 3D view of data"
msgstr "Показать трехмерный вид данных"
-#: app/toolbox.c:667
+#: app/toolbox.c:700
+msgid "Undo"
+msgstr "Отменить"
+
+#: app/toolbox.c:700
+msgid "Undo last action"
+msgstr "Отменить последнее действие"
+
+#: app/toolbox.c:704
+msgid "Redo"
+msgstr "Повторить"
+
+#: app/toolbox.c:704
+msgid "Redo again last undone action"
+msgstr "Повторить снова последнее незаконченное действие"
+
+#: app/toolbox.c:708
msgid "Zoom in"
msgstr "Приблизить"
-#: app/toolbox.c:671
+#: app/toolbox.c:712
msgid "Zoom out"
msgstr "Отдалить"
-#: app/toolbox.c:675
+#: app/toolbox.c:716
msgid "Zoom 1:1"
msgstr "Масштаб 1:1"
-#: app/toolbox.c:722
+#: app/toolbox.c:781
msgid "/Show _Data Browser"
msgstr "/Показать браузер _данных"
-#: app/toolbox.c:730
+#: app/toolbox.c:789
msgid "/Module _Browser"
msgstr "/_Просмотр модулей"
-#: app/toolbox.c:738
+#: app/toolbox.c:797
msgid "/Program _Messages"
msgstr "/_Сообщения программы"
-#: app/toolbox.c:753
+#: app/toolbox.c:812
msgid "/_User Guide"
msgstr "/_Руководство пользователя"
-#: app/toolbox.c:761
+#: app/toolbox.c:820
msgid "/_Tip of the Day"
msgstr "/_Совет дня"
-#: app/toolbox.c:769
+#: app/toolbox.c:828
msgid "/_About Gwyddion"
msgstr "О программе Gwyddion"
-#: app/toolbox.c:806
+#: app/toolbox.c:865
msgid "/_Open..."
msgstr "/_Открыть..."
-#: app/toolbox.c:814
+#: app/toolbox.c:873
msgid "/_Merge..."
msgstr "/Объ_единить..."
-#: app/toolbox.c:822
+#: app/toolbox.c:881
msgid "/Open _Recent"
msgstr "/_Последние файлы"
-#: app/toolbox.c:830
+#: app/toolbox.c:889
msgid "/_Save"
msgstr "/_Сохранить"
-#: app/toolbox.c:838
+#: app/toolbox.c:897
msgid "/Save _As..."
msgstr "/Сохранить _как..."
-#: app/toolbox.c:846
+#: app/toolbox.c:905
msgid "/_Close"
msgstr "/_Закрыть"
-#: app/toolbox.c:854
+#: app/toolbox.c:913
msgid "/Remo_ve All Logs"
msgstr "/_Удалить все журналы"
-#: app/toolbox.c:870
+#: app/toolbox.c:929
msgid "/_Quit"
msgstr "/_Выйти"
-#: app/toolbox.c:910
+#: app/toolbox.c:969
msgid "/_Undo"
msgstr "/_Отменить"
-#: app/toolbox.c:918
+#: app/toolbox.c:977
msgid "/_Redo"
msgstr "/_Повторить"
-#: app/toolbox.c:934
+#: app/toolbox.c:993
msgid "/Default Mask _Color..."
msgstr "/_Цвет маски по умолчанию..."
-#: app/toolbox.c:942
+#: app/toolbox.c:1001
msgid "/Color _Gradients..."
msgstr "/Цветовые _градиенты..."
-#: app/toolbox.c:950
+#: app/toolbox.c:1009
msgid "/G_L Materials..."
msgstr "/_Материалы OpenGL..."
-#: app/toolbox.c:958
+#: app/toolbox.c:1017
msgid "/_Toolbox..."
msgstr "/Панель _инструментов..."
-#: app/toolbox.c:966
+#: app/toolbox.c:1025
msgid "/_Keyboard Shortcuts"
msgstr "/_Комбинации клавиш"
-#: app/toolbox.c:974
+#: app/toolbox.c:1033
msgid "/_Logging Enabled"
msgstr "/Включить _журналирование"
-#: app/toolbox.c:1083
+#: app/toolbox.c:1142
msgid "Program Messages"
msgstr "Сообщения программы"
-#: app/toolbox.c:1320
+#: app/toolbox.c:1379
msgid "Change Default Mask Color"
msgstr "Изменить цвет маски по умолчанию"
-#: app/toolbox.c:1348
+#: app/toolbox.c:1407
msgid "OpenGL 3D graphics not available"
msgstr "Трёхмерная графика OpenGL не доступна"
-#: app/toolbox.c:1353
+#: app/toolbox.c:1412
msgid "OpenGL was disabled with a command-line option."
msgstr "OpenGL был отключен опцией командной строки."
-#: app/toolbox.c:1361
+#: app/toolbox.c:1420
msgid ""
"Initialization of OpenGL failed. Check output of <tt>glxinfo</tt> and "
"warning messages printed to console during Gwyddion startup."
@@ -3108,7 +3235,7 @@ msgstr ""
"Инициализация OpenGL не удалась. Проверьте вывод <tt>glxinfo</tt> и "
"предупреждения, которые выводились на консоль при старте Gwyddion."
-#: app/toolbox.c:1368
+#: app/toolbox.c:1427
msgid "This version of Gwyddion was built without OpenGL support."
msgstr "Эта версия Gwyddion была собрана без поддержки OpenGL"
@@ -3184,7 +3311,7 @@ msgstr "Несколько ссылок на объект"
msgid "Secondary data item has no primary data"
msgstr "Вторичный элемент данных не имеет первичных данных"
-#: app/wait.c:106
+#: app/wait.c:114
msgid "Please wait"
msgstr "Подождите, пожалуйста "
@@ -3203,11 +3330,11 @@ msgstr ""
"Заголовок файла не может быть сконвертирован из набора символов ISO-8859-1: "
"%s"
-#: modules/file/aistfile.c:127
+#: modules/file/aistfile.c:123
msgid "Imports AIST-NT data files."
msgstr "Импорт файлов данных AIST-NT"
-#: modules/file/aistfile.c:140
+#: modules/file/aistfile.c:136
msgid "AIST-NT files (.aist)"
msgstr "Файлы AIST-NT (.aist)"
@@ -3254,7 +3381,8 @@ msgstr "Значение тега заголовка ‘%s’ не выровн
#: modules/file/alicona.c:665 modules/file/gdeffile.c:175
#: modules/file/gdeffile.c:199 modules/file/gsffile.c:159
-#: modules/file/gxyzffile.c:199 modules/file/iso28600.c:1038
+#: modules/file/gxyzffile.c:199 modules/file/iso28600.c:1174
+#: modules/file/microprof.c:361 modules/file/microprof.c:375
#: modules/file/pt3file.c:489 modules/file/pt3file.c:591
msgid "File header is truncated."
msgstr "Заголовок файла усечён."
@@ -3267,11 +3395,11 @@ msgstr "В комментарии отсутствуют завершающие
msgid "Comment is not nul-terminated."
msgstr "Комментарий не завершается нулём."
-#: modules/file/ambfile.c:84
+#: modules/file/ambfile.c:83
msgid "Imports Ambios AMB data files."
msgstr "Импортирует файлы данных Ambios AMB."
-#: modules/file/ambfile.c:97
+#: modules/file/ambfile.c:96
msgid "Ambios amb files (.amb)"
msgstr "Файлы Ambios amb (.amb)"
@@ -3303,11 +3431,11 @@ msgstr "Для FileDescEnd не найден соответствующий File
msgid "FileDescBegin has no corresponding FileDescEnd."
msgstr "Для FileDescBegin не найден соответствующий FileDescEnd."
-#: modules/file/apedaxfile.c:259
+#: modules/file/apedaxfile.c:261
msgid "Imports A.P.E. Research DAX data files."
msgstr "Импортирует файлы данных A.P.E. Research DAX."
-#: modules/file/apedaxfile.c:274
+#: modules/file/apedaxfile.c:276
msgid "A.P.E. Research DAX Files (.dax) and APDT File (.apdt)"
msgstr "Файлы A.P.E. Research DAX (.dax) и APDT (.apdt)"
@@ -3335,7 +3463,7 @@ msgstr "Ширина:"
msgid "Height:"
msgstr "Высота:"
-#: modules/file/asciiexport.c:220 modules/file/xyzexport.c:248
+#: modules/file/asciiexport.c:220 modules/file/xyzexport.c:251
msgid "Value units:"
msgstr "Единицы измерения:"
@@ -3344,30 +3472,30 @@ msgid "Export Text"
msgstr "Экспортировать текст"
#: modules/file/asciiexport.c:275 modules/file/gxyzffile.c:402
-#: modules/file/imgexport.c:3565 modules/file/imgexport.c:4203
-#: modules/file/rawfile.c:758 modules/file/xyzexport.c:311
-#: modules/process/calibrate.c:607 modules/process/coerce.c:364
-#: modules/process/col_synth.c:516 modules/process/correct_affine.c:470
-#: modules/process/extend.c:259 modules/process/fft_filter_1d.c:261
-#: modules/process/grain_dist.c:306 modules/process/grain_edge.c:255
-#: modules/process/grain_mark.c:338 modules/process/grain_wshed.c:252
-#: modules/process/linematch.c:852 modules/process/mark_disconn.c:279
-#: modules/process/slope_dist.c:367 modules/process/tip_blind.c:357
+#: modules/file/imgexport.c:3532 modules/file/imgexport.c:4151
+#: modules/file/rawfile.c:758 modules/file/xyzexport.c:314
+#: modules/process/calibrate.c:561 modules/process/coerce.c:363
+#: modules/process/col_synth.c:516 modules/process/correct_affine.c:520
+#: modules/process/extend.c:259 modules/process/fft_filter_1d.c:263
+#: modules/process/grain_dist.c:307 modules/process/grain_edge.c:254
+#: modules/process/grain_mark.c:335 modules/process/grain_wshed.c:256
+#: modules/process/linematch.c:819 modules/process/mark_disconn.c:280
+#: modules/process/slope_dist.c:359 modules/process/tip_blind.c:360
#: modules/process/wpour_mark.c:354 modules/tools/spotremove.c:322
-#: modules/tools/stats.c:402 modules/xyz/xyz_raster.c:628
+#: modules/tools/stats.c:401 modules/xyz/xyz_raster.c:597
msgid "Options"
msgstr "Параметры"
-#: modules/file/asciiexport.c:278 modules/file/xyzexport.c:314
+#: modules/file/asciiexport.c:278 modules/file/xyzexport.c:317
msgid "Use _dot as decimal separator"
msgstr "Использовать точку как _десятичный разделитель"
-#: modules/file/asciiexport.c:285 modules/file/xyzexport.c:321
-#: modules/process/grain_dist.c:317
+#: modules/file/asciiexport.c:285 modules/file/xyzexport.c:324
+#: modules/process/grain_dist.c:318
msgid "Add _informational comment header"
msgstr "Добавить _информационный заголовок-комментарий"
-#: modules/file/asciiexport.c:294 modules/file/xyzexport.c:330
+#: modules/file/asciiexport.c:294 modules/file/xyzexport.c:333
msgid "_Precision:"
msgstr "_Точность:"
@@ -3387,20 +3515,20 @@ msgstr "Импортирует файлы Attocube Systems ASC."
msgid "Attocube ASCII files (.asc)"
msgstr "ASCII файлы Attocube (.asc)"
-#: modules/file/bcrfile.c:146
+#: modules/file/bcrfile.c:141
msgid "Imports Image Metrology BCR data files."
msgstr "Импортирует файлы данных Image Metrology BCR."
-#: modules/file/bcrfile.c:159
+#: modules/file/bcrfile.c:154
msgid "BCR files (.bcr, .bcrf)"
msgstr "Файлы BCR (.bcr, .bcrf)"
-#: modules/file/bcrfile.c:238
+#: modules/file/bcrfile.c:233
#, c-format
msgid "File header is not convertible from UTF-16: %s"
msgstr "Заголовок файла не может быть сконвертирован из UTF-16: %s"
-#: modules/file/bcrfile.c:351
+#: modules/file/bcrfile.c:346
#, c-format
msgid "Unknown file type header: `%s'."
msgstr "Неизвестный заголовок типа файла: `%s'."
@@ -3435,7 +3563,7 @@ msgid "Burleigh exported data (.txt, .bin)"
msgstr "Экспортированные данные Burleigh (.txt, .bin)"
#: modules/file/burleigh_exp.c:226 modules/file/burleigh_exp.c:267
-#: modules/file/nanoscope.c:1605 modules/file/omicron.c:416
+#: modules/file/nanoscope.c:1612 modules/file/omicron.c:416
#: modules/file/shimadzu.c:468
msgid "Missing colon in header line."
msgstr "Пропущено двоеточие в строке заголовка."
@@ -3485,22 +3613,40 @@ msgstr "Импортирует файлы данных Benyuan CSM."
msgid "Benyuan CSM files (.csm)"
msgstr "Файлы Benyuan CSM (.csm)"
-#: modules/file/dektakxml.c:138
+#: modules/file/dektakvca.c:197
+msgid "Imports Dektak OPDx data files."
+msgstr "Импортирует файлы данных Dektak OPDx."
+
+#: modules/file/dektakvca.c:210
+msgid "Dektak OPDx data files (.OPDx)"
+msgstr "Файлы данных Dektak OPDx (.OPDx)"
+
+#: modules/file/dektakvca.c:655
+#, c-format
+msgid "Item `%s' has unexpected type %u instead of %u."
+msgstr "Элемент `%s' имеет неожиданный тип %u вместо %u."
+
+#: modules/file/dektakvca.c:1022
+#, c-format
+msgid "Truncated data inside item %s."
+msgstr "Неполные данные внутри элемента %s."
+
+#: modules/file/dektakxml.c:118
msgid "Imports Dektak XML data files."
msgstr "Импортирует файлы данных Dektak XML."
-#: modules/file/dektakxml.c:151
+#: modules/file/dektakxml.c:131
msgid "Dektak XML data files (.xml)"
msgstr "Файлы данных Dektak XML (.xml)"
-#: modules/file/dektakxml.c:228 modules/file/lextfile.c:260
-#: modules/file/nanoscan.c:267 modules/file/ometiff.c:265
+#: modules/file/dektakxml.c:208 modules/file/lextfile.c:260
+#: modules/file/nanoscan.c:270 modules/file/ometiff.c:265
#, c-format
msgid "XML parsing failed: %s"
msgstr "Разбор XML окончился неудачно: %s"
-#: modules/file/dektakxml.c:400 modules/file/lextfile.c:163
-#: modules/file/nanoscan.c:672 modules/file/ometiff.c:445
+#: modules/file/dektakxml.c:373 modules/file/lextfile.c:163
+#: modules/file/nanoscan.c:698 modules/file/ometiff.c:445
#, c-format
msgid "Top-level element is not ‘%s’."
msgstr "Элемент верхнего уровня не ‘%s’."
@@ -3612,7 +3758,7 @@ msgid "Scan size header field overlaps with data."
msgstr "Поле заголовка \"размер сканирования\" пересекается с данными."
#: modules/file/err.h:48 modules/file/nrrdfile.c:779
-#: modules/file/nrrdfile.c:824
+#: modules/file/nrrdfile.c:824 modules/pygwy/pygwy-console.c:504
#, c-format
msgid "Cannot read from file: %s."
msgstr "Невозможно прочесть из файла: %s."
@@ -3831,32 +3977,32 @@ msgstr ""
"Разбор данных завершился успешно, но в результате был получен неожиданный "
"объект %s."
-#: modules/file/gwytiff.h:332
+#: modules/file/gwytiff.h:335
#, c-format
msgid "BigTIFF reserved fields are %u and %u instead of 8 and 0."
msgstr "В BigTIFF зарезервированы поля %u и %u вместо 8 и 0."
-#: modules/file/gwytiff.h:349 modules/file/gwytiff.h:366
+#: modules/file/gwytiff.h:352 modules/file/gwytiff.h:369
#, c-format
msgid "TIFF directory %lu ended unexpectedly."
msgstr "Каталог TIFF %lu неожиданно завершился."
-#: modules/file/gwytiff.h:484
+#: modules/file/gwytiff.h:487
#, c-format
msgid "BigTIFF data type %u was found in a classic TIFF."
msgstr "Тип данных BigTIFF %u был обнаружен в классическом TIFF."
-#: modules/file/gwytiff.h:501
+#: modules/file/gwytiff.h:504
msgid "Invalid tag data positions were found."
msgstr "Были найдены некорректные позиции тегов данных."
-#: modules/file/gwytiff.h:874 modules/file/gwytiff.h:889
-#: modules/file/gwytiff.h:1012 modules/file/gwytiff.h:1019
+#: modules/file/gwytiff.h:877 modules/file/gwytiff.h:892
+#: modules/file/gwytiff.h:1015 modules/file/gwytiff.h:1022
#, c-format
msgid "Required tag %u was not found."
msgstr "Требуемый тег %u не был найден."
-#: modules/file/gwytiff.h:942 modules/file/gwytiff.h:986
+#: modules/file/gwytiff.h:945 modules/file/gwytiff.h:989
#: modules/file/keyence.c:449 modules/file/matfile.c:276
#: modules/file/matfile.c:298 modules/file/omicronflat.c:1962
#: modules/file/princetonspe.c:339 modules/file/psia.c:352
@@ -3864,21 +4010,21 @@ msgstr "Требуемый тег %u не был найден."
msgid "File is truncated."
msgstr "Файл усечен."
-#: modules/file/gwytiff.h:1044
+#: modules/file/gwytiff.h:1047
msgid "Non-uniform bits per sample are unsupported."
msgstr "Неодинаковое число бит на сэмпл не поддерживается"
-#: modules/file/gwytiff.h:1071
+#: modules/file/gwytiff.h:1074 modules/file/zeisslsm.c:973
#, c-format
msgid "Compression type %u is not supported."
msgstr "Тип сжатия %u не поддерживается."
-#: modules/file/gwytiff.h:1077
+#: modules/file/gwytiff.h:1080
#, c-format
msgid "Planar configuration %u is not supported."
-msgstr "Двумерная конфигурация %u не поддерживается."
+msgstr "Конфигурация плоскостей %u не поддерживается."
-#: modules/file/gwytiff.h:1101
+#: modules/file/gwytiff.h:1104
msgid "Unsupported sample format"
msgstr "Неподдерживаемый формат сэмпла"
@@ -3915,7 +4061,7 @@ msgstr "Ошибка контрольной суммы"
msgid "Minizip error while reading the zip file: %s (%d)."
msgstr "Ошибка minizip в процессе чтения zip-файла: %s (%d)."
-#: modules/file/gwyzip.h:248
+#: modules/file/gwyzip.h:248 modules/file/jpkscan.c:2776
#, c-format
msgid "File %s is missing in the zip file."
msgstr "Файл %s отсутствует в zip-архиве."
@@ -3950,8 +4096,8 @@ msgstr "Размер данных %lu не является кратным ра
msgid "Export GXYZF"
msgstr "Экспорт GXYZF"
-#: modules/file/gxyzffile.c:395 modules/file/xyzexport.c:238
-#: modules/file/xyzexport.c:304
+#: modules/file/gxyzffile.c:395 modules/file/xyzexport.c:241
+#: modules/file/xyzexport.c:307
msgid "XYZ data:"
msgstr "Данные XYZ:"
@@ -4040,11 +4186,13 @@ msgstr "Масштаб _Z:"
msgid "Representable"
msgstr "Представление"
-#: modules/file/hdrimage.cc:480 modules/tools/stats.c:203
+#: modules/file/hdrimage.cc:480 modules/graph/graph_stats.c:146
+#: modules/tools/stats.c:203
msgid "Minimum:"
msgstr "Минимум:"
-#: modules/file/hdrimage.cc:496 modules/tools/stats.c:204
+#: modules/file/hdrimage.cc:496 modules/graph/graph_stats.c:147
+#: modules/tools/stats.c:204
msgid "Maximum:"
msgstr "Максимум:"
@@ -4063,12 +4211,12 @@ msgid "OpenEXR data type %u is invalid or unsupported."
msgstr "Тип данных OpenEXR %u неправилен или не поддерживается."
#: modules/file/hdrimage.cc:1433 modules/file/hdrimage.cc:1442
-#: modules/file/imgexport.c:5249 modules/file/imgexport.c:5260
+#: modules/file/imgexport.c:5198 modules/file/imgexport.c:5209
#, c-format
msgid "libpng initialization error (in %s)"
msgstr "ошибка инициализации libpng (в %s)"
-#: modules/file/hdrimage.cc:1451 modules/file/imgexport.c:5324
+#: modules/file/hdrimage.cc:1451 modules/file/imgexport.c:5273
msgid "libpng error occurred"
msgstr "Произошла ошибка в libpng"
@@ -4086,11 +4234,6 @@ msgstr "Информация о изображении"
msgid "Horizontal size:"
msgstr "Горизонтальный размер:"
-#: modules/file/hdrimage.cc:2246 modules/file/hdrimage.cc:2252
-#: modules/file/pixmap.c:820 modules/file/pixmap.c:826
-msgid "px"
-msgstr "пикс."
-
#: modules/file/hdrimage.cc:2252 modules/file/pixmap.c:826
msgid "Vertical size:"
msgstr "Вертикальный размер:"
@@ -4103,10 +4246,10 @@ msgstr "Каналы:"
msgid "Pages:"
msgstr "Страницы:"
-#: modules/file/hdrimage.cc:2290 modules/file/imgexport.c:3043
+#: modules/file/hdrimage.cc:2290 modules/file/imgexport.c:3059
#: modules/file/pixmap.c:862 modules/file/rawfile.c:649
-#: modules/process/dimensions.h:467 modules/xyz/xyz_drift.c:774
-#: modules/xyz/xyz_raster.c:566
+#: modules/process/dimensions.h:449 modules/xyz/xyz_drift.c:774
+#: modules/xyz/xyz_raster.c:535
msgid "Physical Dimensions"
msgstr "Физические размеры"
@@ -4116,16 +4259,16 @@ msgstr "Физические размеры"
#: modules/process/calcoefs_new.c:408 modules/process/calcoefs_new.c:475
#: modules/process/calcoefs_simple.c:391 modules/process/calcoefs_simple.c:458
#: modules/process/calcoefs_view.c:511 modules/process/calcoefs_view.c:549
-#: modules/process/calibrate.c:466 modules/process/calibrate.c:549
-#: modules/process/dimensions.h:161 modules/process/volumize_layers.c:259
-#: modules/volume/volume_calibrate.c:414 modules/volume/volume_calibrate.c:441
-#: modules/volume/volume_calibrate.c:468 modules/volume/volume_calibrate.c:546
+#: modules/process/calibrate.c:459 modules/process/calibrate.c:514
+#: modules/process/dimensions.h:143 modules/process/volumize_layers.c:259
+#: modules/volume/volume_calibrate.c:409 modules/volume/volume_calibrate.c:429
+#: modules/volume/volume_calibrate.c:449 modules/volume/volume_calibrate.c:498
msgid "verb|Change"
msgstr "Изменить"
#: modules/file/hdrimage.cc:2345 modules/file/pixmap.c:907
-#: modules/file/rawfile.c:694 modules/process/crosscor.c:263
-#: modules/process/dimensions.h:477
+#: modules/file/rawfile.c:694 modules/process/crosscor.c:260
+#: modules/process/dimensions.h:459
msgid "H_eight:"
msgstr "_Высота:"
@@ -4142,16 +4285,16 @@ msgstr "Масштаб _Z (на единицу дискретизации):"
#: modules/file/hdrimage.cc:2557 modules/file/pixmap.c:1176
#: modules/file/rawfile.c:1386 modules/process/calcoefs_new.c:819
#: modules/process/calcoefs_simple.c:1197 modules/process/calcoefs_view.c:1380
-#: modules/process/calibrate.c:979 modules/process/dimensions.h:195
-#: modules/process/volumize_layers.c:315 modules/volume/volume_calibrate.c:1017
+#: modules/process/calibrate.c:1013 modules/process/dimensions.h:177
+#: modules/process/volumize_layers.c:314 modules/volume/volume_calibrate.c:957
msgid "Change Units"
msgstr "Изменить единицы измерения"
#: modules/file/hdrimage.cc:2571 modules/file/pixmap.c:1190
#: modules/file/rawfile.c:1400 modules/process/calcoefs_new.c:832
#: modules/process/calcoefs_simple.c:1210 modules/process/calcoefs_view.c:1393
-#: modules/process/calibrate.c:993 modules/process/dimensions.h:208
-#: modules/process/volumize_layers.c:329 modules/volume/volume_calibrate.c:1031
+#: modules/process/calibrate.c:1027 modules/process/dimensions.h:190
+#: modules/process/volumize_layers.c:328 modules/volume/volume_calibrate.c:971
msgid "New _units:"
msgstr "Новые _единицы:"
@@ -4195,131 +4338,131 @@ msgstr "Невозможно загрузить изображение: %s."
msgid "Field DataSize %ux%u does not match image dimensions %ux%u."
msgstr "Размер поля данных %u×%u не соответствует размерам изображения %u×%u."
-#: modules/file/igorfile.c:200
+#: modules/file/igorfile.c:210
msgid "Imports Igor binary waves (.ibw)."
msgstr "Импортирует Igor binary waves (.ibw)."
-#: modules/file/igorfile.c:213
+#: modules/file/igorfile.c:223
msgid "Igor binary waves (.ibw)"
msgstr "Двоичные волны Igor (.ibw)"
-#: modules/file/igorfile.c:273
+#: modules/file/igorfile.c:283
#, c-format
msgid "Format version is %d. Only version 5 is supported."
msgstr "Версия формата %d. Поддерживается только версия 5."
-#: modules/file/igorfile.c:294
+#: modules/file/igorfile.c:305
msgid "Only two-dimensional data are supported."
msgstr "Поддерживаются только двумерные данные."
-#: modules/file/igorfile.c:306
+#: modules/file/igorfile.c:317
#, c-format
msgid "Number of data points %u does not match resolutions %u×%u×%u."
msgstr "Число точек данных %u не соответствует разрешению %u×%u×%u."
-#: modules/file/igorfile.c:320
+#: modules/file/igorfile.c:331
#, c-format
msgid "Data size %u does not match the number of data points %u×%u."
msgstr "Размер данных %u не соответствует числу точек данных %u×%u."
-#: modules/file/igorfile.c:358
+#: modules/file/igorfile.c:369
msgid "Cannot read channel labels."
msgstr "Не удаётся прочесть метки каналов."
-#: modules/file/imgexport.c:392 modules/file/pixmap.c:178
+#: modules/file/imgexport.c:391 modules/file/pixmap.c:178
msgid "Portable Network Graphics (.png)"
msgstr "Portable Network Graphics (.png)"
-#: modules/file/imgexport.c:398 modules/file/pixmap.c:182
+#: modules/file/imgexport.c:397 modules/file/pixmap.c:182
msgid "JPEG (.jpeg,.jpg)"
msgstr "JPEG (.jpeg,.jpg)"
-#: modules/file/imgexport.c:404 modules/file/pixmap.c:186
+#: modules/file/imgexport.c:403 modules/file/pixmap.c:186
msgid "TIFF (.tiff,.tif)"
msgstr "TIFF (.tiff,.tif)"
-#: modules/file/imgexport.c:410 modules/file/pixmap.c:190
+#: modules/file/imgexport.c:409 modules/file/pixmap.c:190
msgid "Portable Pixmap (.ppm,.pnm)"
msgstr "Portable Pixmap (.ppm,.pnm)"
-#: modules/file/imgexport.c:416 modules/file/pixmap.c:194
+#: modules/file/imgexport.c:415 modules/file/pixmap.c:194
msgid "Windows or OS2 Bitmap (.bmp)"
msgstr "Bitmap из Windows или OS2 (.bmp)"
-#: modules/file/imgexport.c:422 modules/file/pixmap.c:198
+#: modules/file/imgexport.c:421 modules/file/pixmap.c:198
msgid "TARGA (.tga,.targa)"
msgstr "TARGA (.tga,.targa)"
-#: modules/file/imgexport.c:429
+#: modules/file/imgexport.c:428
msgid "WebP (.webp)"
msgstr "WebP (.webp)"
-#: modules/file/imgexport.c:437
+#: modules/file/imgexport.c:436
msgid "Portable document format (.pdf)"
msgstr "Portable document format (.pdf)"
-#: modules/file/imgexport.c:445
+#: modules/file/imgexport.c:444
msgid "Encapsulated PostScript (.eps)"
msgstr "Encapsulated PostScript (.eps)"
-#: modules/file/imgexport.c:453
+#: modules/file/imgexport.c:452
msgid "Scalable Vector Graphics (.svg)"
msgstr "Scalable Vector Graphics (.svg)"
-#: modules/file/imgexport.c:463 modules/tools/selectionmanager.c:269
+#: modules/file/imgexport.c:462 modules/tools/selectionmanager.c:269
msgid "Horiz./vert. lines"
msgstr "Гориз./Верт. линии"
-#: modules/file/imgexport.c:467 modules/tools/selectionmanager.c:270
+#: modules/file/imgexport.c:466 modules/tools/selectionmanager.c:270
msgid "Ellipses"
msgstr "Эллипсы"
-#: modules/file/imgexport.c:471 modules/tools/selectionmanager.c:272
+#: modules/file/imgexport.c:470 modules/tools/selectionmanager.c:272
msgid "Lines"
msgstr "Линии"
-#: modules/file/imgexport.c:479 modules/tools/selectionmanager.c:275
+#: modules/file/imgexport.c:478 modules/tools/selectionmanager.c:275
msgid "Rectangles"
msgstr "Прямоугольники"
-#: modules/file/imgexport.c:483 modules/process/lat_synth.c:565
+#: modules/file/imgexport.c:482 modules/process/lat_synth.c:565
#: modules/process/lat_synth.c:637 modules/tools/selectionmanager.c:271
msgid "Lattice"
msgstr "Решетка"
-#: modules/file/imgexport.c:487
+#: modules/file/imgexport.c:486
msgid "Path"
msgstr "Путь"
-#: modules/file/imgexport.c:493 modules/file/imgexport.c:499
+#: modules/file/imgexport.c:492 modules/file/imgexport.c:498
msgid "ruler|_None"
msgstr "_Нет"
-#: modules/file/imgexport.c:494
+#: modules/file/imgexport.c:493
msgid "_Rulers"
msgstr "Направл_яющие"
-#: modules/file/imgexport.c:495
+#: modules/file/imgexport.c:494
msgid "_Inset scale bar"
msgstr "В_ложенный масштабный отрезок"
-#: modules/file/imgexport.c:500
+#: modules/file/imgexport.c:499
msgid "_False color ruler"
msgstr "_Линейка псевдоцвета"
-#: modules/file/imgexport.c:504
+#: modules/file/imgexport.c:503
msgid "title|None"
msgstr "Нет"
-#: modules/file/imgexport.c:505
+#: modules/file/imgexport.c:504
msgid "At the top"
msgstr "Сверху"
-#: modules/file/imgexport.c:506
+#: modules/file/imgexport.c:505
msgid "Along the right edge"
msgstr "Вдоль правой стороны"
-#: modules/file/imgexport.c:512
+#: modules/file/imgexport.c:511
msgid ""
"Renders data into vector (SVG, PDF, EPS) and pixmap (PNG, JPEG, TIFF, WebP, "
"PPM, BMP, TARGA) images. Export to some formats relies on GDK and other "
@@ -4330,56 +4473,57 @@ msgstr ""
"основан на GDK и других библиотеках, и, вследствие этого, может зависеть от "
"варианта установки."
-#: modules/file/imgexport.c:2931
+#: modules/file/imgexport.c:2933
msgid "Select Color"
msgstr "Выбрать цвет"
-#: modules/file/imgexport.c:3002
-msgid "Black"
-msgstr "Чёрный"
-
-#: modules/file/imgexport.c:3010
+#: modules/file/imgexport.c:3005
msgid "White"
msgstr "Белый"
-#: modules/file/imgexport.c:3053
+#: modules/file/imgexport.c:3014
+msgid "Black"
+msgstr "Чёрный"
+
+#: modules/file/imgexport.c:3069
msgid "Pi_xel size:"
msgstr "Размер пи_кселя:"
-#: modules/file/imgexport.c:3062
+#: modules/file/imgexport.c:3077
msgid "Pixels per _inch:"
msgstr "Пикселей на _дюйм:"
-#: modules/file/imgexport.c:3089
+#: modules/file/imgexport.c:3102
msgid "_Zoom:"
msgstr "_Увеличение:"
-#: modules/file/imgexport.c:3108 modules/process/bdep_synth.c:430
+#: modules/file/imgexport.c:3120 modules/process/bdep_synth.c:430
#: modules/process/col_synth.c:486 modules/process/diff_synth.c:508
-#: modules/process/domain_synth.c:510 modules/process/grain_mark.c:285
-#: modules/process/lat_synth.c:753 modules/process/obj_synth.c:575
-#: modules/process/pat_synth.c:852 modules/process/pat_synth.c:1154
-#: modules/process/pat_synth.c:1489 modules/process/tip_blind.c:340
+#: modules/process/domain_synth.c:510 modules/process/fibre_synth.c:540
+#: modules/process/grain_mark.c:284 modules/process/lat_synth.c:753
+#: modules/process/obj_synth.c:573 modules/process/pat_synth.c:853
+#: modules/process/pat_synth.c:1155 modules/process/pat_synth.c:1490
+#: modules/process/phase_synth.c:298 modules/process/tip_blind.c:342
msgid "_Height:"
msgstr "_Высота:"
-#: modules/file/imgexport.c:3121
+#: modules/file/imgexport.c:3136
msgid "_Font:"
msgstr "_Шрифт:"
-#: modules/file/imgexport.c:3140
+#: modules/file/imgexport.c:3145
msgid "_Font size:"
msgstr "_Размер шрифта:"
-#: modules/file/imgexport.c:3160
+#: modules/file/imgexport.c:3163
msgid "O_utline thickness:"
msgstr "То_лщина контура:"
-#: modules/file/imgexport.c:3170
+#: modules/file/imgexport.c:3172
msgid "_Border width:"
msgstr "Ширина _границы:"
-#: modules/file/imgexport.c:3180
+#: modules/file/imgexport.c:3181
msgid "_Tick length:"
msgstr "Длина _засечек:"
@@ -4399,219 +4543,220 @@ msgstr "Цвета"
msgid "_Line and text color:"
msgstr "Цвет _линий и текста:"
-#: modules/file/imgexport.c:3221
+#: modules/file/imgexport.c:3220
msgid "_Transparent background"
msgstr "_Прозрачный фон"
-#: modules/file/imgexport.c:3232
+#: modules/file/imgexport.c:3231
msgid "_Background color:"
msgstr "Цвет _фона:"
-#: modules/file/imgexport.c:3474
-msgid "Lateral scale"
-msgstr "Пространственный масштаб"
-
-#: modules/file/imgexport.c:3487 modules/process/lno_synth.c:1053
-msgid "_Length:"
-msgstr "_Длина:"
-
-#: modules/file/imgexport.c:3503
-msgid "_Auto"
-msgstr "_Авто"
-
-#: modules/file/imgexport.c:3511 modules/process/pat_synth.c:469
+#: modules/file/imgexport.c:3433 modules/process/fibre_synth.c:582
+#: modules/process/pat_synth.c:470
msgid "Placement"
msgstr "Положение"
-#: modules/file/imgexport.c:3515
+#: modules/file/imgexport.c:3437
msgid "left"
msgstr "слева"
-#: modules/file/imgexport.c:3519
+#: modules/file/imgexport.c:3440
msgid "center"
msgstr "по центру"
-#: modules/file/imgexport.c:3523
+#: modules/file/imgexport.c:3443
msgid "right"
msgstr "справа"
-#: modules/file/imgexport.c:3528
+#: modules/file/imgexport.c:3448
msgid "top"
msgstr "верх"
-#: modules/file/imgexport.c:3540
+#: modules/file/imgexport.c:3456
msgid "bottom"
msgstr "низ"
-#: modules/file/imgexport.c:3552 modules/file/imgexport.c:3874
+#: modules/file/imgexport.c:3479
+msgid "Lateral scale"
+msgstr "Пространственный масштаб"
+
+#: modules/file/imgexport.c:3496 modules/process/lno_synth.c:1053
+msgid "_Length:"
+msgstr "_Длина:"
+
+#: modules/file/imgexport.c:3502
+msgid "_Auto"
+msgstr "_Авто"
+
+#: modules/file/imgexport.c:3519 modules/file/imgexport.c:3832
msgid "Hori_zontal gap:"
msgstr "_Горизонтальный зазор:"
-#: modules/file/imgexport.c:3558 modules/file/imgexport.c:3854
+#: modules/file/imgexport.c:3526 modules/file/imgexport.c:3812
msgid "_Vertical gap:"
msgstr "В_ертикальный зазор:"
-#: modules/file/imgexport.c:3571 modules/file/imgexport.c:4184
+#: modules/file/imgexport.c:3538 modules/file/imgexport.c:4134
msgid "Colo_r:"
msgstr "Цве_т:"
-#: modules/file/imgexport.c:3576 modules/file/imgexport.c:4189
+#: modules/file/imgexport.c:3542 modules/file/imgexport.c:4138
msgid "Out_line color:"
msgstr "_Цвет контура:"
-#: modules/file/imgexport.c:3580 modules/file/imgexport.c:4195
+#: modules/file/imgexport.c:3547 modules/file/imgexport.c:4143
msgid "O_pacity:"
msgstr "_Непрозрачность:"
-#: modules/file/imgexport.c:3589
+#: modules/file/imgexport.c:3554
msgid "Draw _ticks"
msgstr "Рисовать засе_чки"
-#: modules/file/imgexport.c:3599
+#: modules/file/imgexport.c:3564
msgid "Draw _label"
msgstr "Рисовать подпис_ь"
-#: modules/file/imgexport.c:3609
+#: modules/file/imgexport.c:3574
msgid "Draw text _above scale bar"
msgstr "Рисовать текст с_верху отрезка"
-#: modules/file/imgexport.c:3773
+#: modules/file/imgexport.c:3738
msgid "Image"
msgstr "Изображение"
-#: modules/file/imgexport.c:3777 modules/process/calcoefs_view.c:473
-#: modules/process/correct_affine.c:488 modules/process/drift.c:297
-#: modules/process/dwt.c:206 modules/process/dwtanisotropy.c:202
-#: modules/process/fft_filter_1d.c:294 modules/process/fft_profile.c:292
-#: modules/process/fractal.c:253 modules/process/nanoindent_adjust.c:229
-#: modules/process/polydistort.c:247 modules/process/rotate.c:274
-#: modules/process/scale.c:253 modules/process/straighten_path.c:271
+#: modules/file/imgexport.c:3742 modules/process/calcoefs_view.c:473
+#: modules/process/correct_affine.c:538 modules/process/drift.c:298
+#: modules/process/dwt.c:206 modules/process/dwtanisotropy.c:203
+#: modules/process/fft_filter_1d.c:296 modules/process/fft_profile.c:293
+#: modules/process/fractal.c:262 modules/process/nanoindent_adjust.c:229
+#: modules/process/polydistort.c:250 modules/process/rotate.c:274
+#: modules/process/scale.c:257 modules/process/straighten_path.c:270
#: modules/process/unrotate.c:277 modules/tools/linestats.c:400
-#: modules/tools/profile.c:555 modules/tools/roughness.c:864
-#: modules/tools/sfunctions.c:468 modules/xyz/xyz_raster.c:632
+#: modules/tools/profile.c:552 modules/tools/roughness.c:879
+#: modules/tools/sfunctions.c:481 modules/xyz/xyz_raster.c:601
msgid "_Interpolation type:"
msgstr "Тип _интерполяции:"
-#: modules/file/imgexport.c:3807
+#: modules/file/imgexport.c:3772
msgid "Draw _frame"
msgstr "Показывать _рамку"
-#: modules/file/imgexport.c:3816
+#: modules/file/imgexport.c:3781
msgid "Draw _mask"
msgstr "Рисовать _маску"
-#: modules/file/imgexport.c:3826
+#: modules/file/imgexport.c:3791
msgid "Draw mask _legend"
msgstr "Рисовать _легенду для маски"
-#: modules/file/imgexport.c:3861
+#: modules/file/imgexport.c:3819
msgid "Value Scale"
msgstr "Масштаб значений"
-#: modules/file/imgexport.c:3882
+#: modules/file/imgexport.c:3840
msgid "Fi_xed precision:"
msgstr "Фи_ксированная точность:"
-#: modules/file/imgexport.c:3898
+#: modules/file/imgexport.c:3855
msgid "Fixed _kilo threshold:"
msgstr "Фиксированный порог п_рефиксов:"
-#: modules/file/imgexport.c:3914 modules/file/imgexport.c:4635
+#: modules/file/imgexport.c:3869 modules/file/imgexport.c:4583
msgid "Title"
msgstr "Заголовок"
-#: modules/file/imgexport.c:3918
+#: modules/file/imgexport.c:3877
msgid "Posi_tion:"
msgstr "Располо_жение:"
-#: modules/file/imgexport.c:3934
+#: modules/file/imgexport.c:3884
msgid "_Gap:"
msgstr "_Зазор:"
-#: modules/file/imgexport.c:3941
+#: modules/file/imgexport.c:3891
msgid "Put _units to title"
msgstr "Поместить единицы измерения в _заголовок"
-#: modules/file/imgexport.c:4125
+#: modules/file/imgexport.c:4075
msgid "Draw _selection"
msgstr "Рисовать в_ыделенные элементы"
-#: modules/file/imgexport.c:4176 modules/tools/selectionmanager.c:361
+#: modules/file/imgexport.c:4126 modules/tools/selectionmanager.c:361
msgid "Objects"
msgstr "Объекты"
-#: modules/file/imgexport.c:4615
+#: modules/file/imgexport.c:4563
msgid "Lateral"
msgstr "Горизонтальные"
-#: modules/file/imgexport.c:4654 modules/file/rawfile.c:1040
-#: modules/process/calcoefs_load.c:230 modules/process/neural.c:693
+#: modules/file/imgexport.c:4602 modules/file/rawfile.c:1040
+#: modules/process/calcoefs_load.c:230 modules/process/neural.c:700
msgid "verb|_Load"
msgstr "_Загрузить"
-#: modules/file/imgexport.c:4660 modules/file/rawfile.c:1046
-#: modules/process/neural.c:699
+#: modules/file/imgexport.c:4608 modules/file/rawfile.c:1046
+#: modules/process/neural.c:706
msgid "verb|_Store"
msgstr "Со_хранить"
-#: modules/file/imgexport.c:4666 modules/file/rawfile.c:1052
-#: modules/process/neural.c:705
+#: modules/file/imgexport.c:4614 modules/file/rawfile.c:1052
+#: modules/process/neural.c:712
msgid "_Rename"
msgstr "_Переименовать"
-#: modules/file/imgexport.c:4686 modules/file/rawfile.c:1071
+#: modules/file/imgexport.c:4634 modules/file/rawfile.c:1071
msgid "Preset _name:"
msgstr "_Название набора настроек:"
-#: modules/file/imgexport.c:4757
+#: modules/file/imgexport.c:4705
#, c-format
msgid "Export %s"
msgstr "Экспорт %s"
-#: modules/file/imgexport.c:4778
+#: modules/file/imgexport.c:4727
msgid "Export as 1_6 bit grayscale"
msgstr "Экспортировать как 1_6битное серое"
-#: modules/file/imgexport.c:4801
+#: modules/file/imgexport.c:4750
msgid "Lateral Scale"
msgstr "Горизонтальный масштаб"
-#: modules/file/imgexport.c:4806
+#: modules/file/imgexport.c:4755
msgid "Values"
msgstr "Значения"
-#: modules/file/imgexport.c:4811
+#: modules/file/imgexport.c:4760
msgid "Selection"
msgstr "Выделение"
-#: modules/file/imgexport.c:4816 modules/file/rawfile.c:462
+#: modules/file/imgexport.c:4765 modules/file/rawfile.c:462
#: modules/process/convolution_filter.c:275
msgid "Presets"
msgstr "Предустановки"
-#: modules/file/imgexport.c:5576
+#: modules/file/imgexport.c:5525
#, c-format
msgid "Cairo error occurred: %s"
msgstr "Произошла ошибка cairo: %s"
-#: modules/file/imgexport.c:5600
+#: modules/file/imgexport.c:5549
#, c-format
msgid "Pixbuf save failed: %s."
msgstr "Сохранение pixbuf закончилось неудачно: %s."
-#: modules/file/imgexport.c:5878
+#: modules/file/imgexport.c:5827
msgid "Image is too large to be stored as TARGA."
msgstr "Изображение слишком велико чтобы сохранить его в формате TARGA."
-#: modules/file/imgexport.c:6457 modules/file/imgexport.c:6486
+#: modules/file/imgexport.c:6406 modules/file/imgexport.c:6435
msgid "Draw _numbers"
msgstr "Рисовать _номера"
-#: modules/file/imgexport.c:6469 modules/file/imgexport.c:6517
+#: modules/file/imgexport.c:6418 modules/file/imgexport.c:6466
msgid "_End marker length:"
msgstr "Длина _засечек:"
-#: modules/file/imgexport.c:6498
+#: modules/file/imgexport.c:6447
msgid "Marker _radius:"
msgstr "_Радиус маркера:"
@@ -4651,48 +4796,59 @@ msgstr "Набор тегов параметров неполон."
msgid "image depth"
msgstr "глубина изображения"
-#: modules/file/iso28600.c:534
+#: modules/file/iso28600.c:543
msgid "Imports and exports ISO 28600:2011 SPM data transfer format."
msgstr "Импортирует и экспортирует формат передачи данных СЗМ ISO 28600:2011"
-#: modules/file/iso28600.c:550
+#: modules/file/iso28600.c:559
msgid "ISO 28600:2011 SPM data transfer files (.spm)"
msgstr "Файлы передачи данных СЗМ ISO 28600:2011 (.spm)"
-#: modules/file/iso28600.c:606
+#: modules/file/iso28600.c:658
#, c-format
-msgid "Only regular mappings are implemented but file has mapping type ‘%s’."
+msgid ""
+"Only regular and irregular mappings are implemented but the file has mapping "
+"type ‘%s’."
msgstr ""
-"Реализованы только правильные отображения, а этот файл содержит тип "
-"отображения ‘%s’."
+"Реализованы только правильные и неправильные отображения, а этот файл "
+"содержит тип отображения ‘%s’."
-#: modules/file/iso28600.c:668 modules/file/iso28600.c:677
-#: modules/file/iso28600.c:686
+#: modules/file/iso28600.c:687 modules/file/iso28600.c:696
+#: modules/file/iso28600.c:705
#, c-format
msgid "List ‘%s’ has %u items which differs from the number %u given by ‘%s’."
msgstr ""
"Список ‘%s’ содержит %u элементов, что отличается от числа %u заданного ‘%s’."
-#: modules/file/iso28600.c:755 modules/file/iso28600.c:867
-#: modules/file/sdfile.c:846 modules/file/sdfile.c:863
-#: modules/file/spip-asc.c:239 modules/file/witec-asc.c:223
-#: modules/file/wsffile.c:215
+#: modules/file/iso28600.c:775
+#, c-format
+msgid "End of file reached when reading sample #%u of %u"
+msgstr "Достигнут конец файла при чтении замера #%u из %u"
+
+#: modules/file/iso28600.c:784 modules/file/iso28600.c:873
+#, c-format
+msgid "Malformed data encountered when reading sample #%u"
+msgstr "При чтении замера #%u получены искаженные данные"
+
+#: modules/file/iso28600.c:797 modules/file/iso28600.c:887
+#: modules/file/iso28600.c:1022
+msgid "Missing end-of-data marker."
+msgstr "Отсутствует маркер конца данных end-of-data."
+
+#: modules/file/iso28600.c:1003 modules/file/sdfile.c:846
+#: modules/file/sdfile.c:863 modules/file/spip-asc.c:239
+#: modules/file/witec-asc.c:223 modules/file/wsffile.c:215
#, c-format
msgid "End of file reached when reading sample #%d of %d"
msgstr "Достигнут конец файла при чтении значения #%d из %d"
-#: modules/file/iso28600.c:764 modules/file/iso28600.c:876
-#: modules/file/spip-asc.c:246 modules/file/witec-asc.c:230
-#: modules/file/wsffile.c:222
+#: modules/file/iso28600.c:1012 modules/file/spip-asc.c:246
+#: modules/file/witec-asc.c:230 modules/file/wsffile.c:222
#, c-format
msgid "Malformed data encountered when reading sample #%d of %d"
msgstr "При чтении значения #%d из %d получены искаженные данные"
-#: modules/file/iso28600.c:774 modules/file/iso28600.c:886
-msgid "Missing end-of-data marker."
-msgstr "Отсутствует маркер конца данных end-of-data."
-
-#: modules/file/iso28600.c:1048
+#: modules/file/iso28600.c:1184
#, c-format
msgid "Line %u does not contain mandatory label ‘%s’."
msgstr "Строка %u не содержит обязательной метки ‘%s’."
@@ -4709,42 +4865,60 @@ msgstr "Файлы данных JEOL (.tif)"
msgid "The type of data is unknown. Please report it to the developers."
msgstr "Тип данных неизвестен. Пожалуйста сообщите о нём разработчикам."
-#: modules/file/jpkscan.c:229
+#: modules/file/jpkscan.c:292
msgid "Imports JPK image scans."
msgstr "Импортирует изображения сканирований JPK."
-#: modules/file/jpkscan.c:242
+#: modules/file/jpkscan.c:305
msgid "JPK image scans (.jpk, .jpk-qi-image)"
msgstr "Сканы изображений JPK (.jpk, .jpk-qi-image)"
-#: modules/file/jpkscan.c:249
+#: modules/file/jpkscan.c:312
msgid "JPK force curves (.jpk-force, .jpk-force-map, .jpk-qi-data)"
msgstr "Силовые кривые JPK (.jpk-force, .jpk-force-map, .jpk-qi-data)"
-#: modules/file/jpkscan.c:315
+#: modules/file/jpkscan.c:378
msgid "File does not contain grid dimensions."
msgstr "Файл не содержит размеров сетки"
-#: modules/file/jpkscan.c:660 modules/file/nanoobserver.c:193
+#: modules/file/jpkscan.c:736 modules/file/nanoobserver.c:360
#: modules/file/nanoscantech.c:205 modules/file/opengps.c:209
#: modules/file/sensofarx.c:183 modules/file/spmxfile.c:166
msgid "Minizip cannot open the file as a ZIP file."
msgstr "Minizip не может открыть файл как архив ZIP."
-#: modules/file/jpkscan.c:739
+#: modules/file/jpkscan.c:758 modules/file/jpkscan.c:2717
+#, c-format
+msgid "Scanning file (%u curves)..."
+msgstr "Сканируем файл (%u кривых)..."
+
+#: modules/file/jpkscan.c:798 modules/file/nmmxyz.c:299
+msgid "Reading files..."
+msgstr "Считываются файлы..."
+
+#: modules/file/jpkscan.c:816
+msgid "Creating volume data..."
+msgstr "Создаём объёмные данные..."
+
+#: modules/file/jpkscan.c:968
msgid "Non-uniform point and/or segment numbering is not supported."
msgstr "Неупорядоченная нумерация точек и/или сегментов не поддерживается."
-#: modules/file/jpkscan.c:748
+#: modules/file/jpkscan.c:977
msgid "Non-uniform channel lists are not supported."
msgstr "Неупорядоченные списки каналов не поддерживаются."
-#: modules/file/jpkscan.c:756
+#: modules/file/jpkscan.c:985
#, c-format
msgid "Data file %s was found instead of expected %s."
msgstr "Файл данных %s был найден вместо ожидаемого %s."
-#: modules/file/jpkscan.c:1497
+#: modules/file/jpkscan.c:1900
+#, c-format
+msgid "Header properties file for index %u is missing."
+msgstr "Заголовочный файл свойств для индекса %u отсутствует."
+
+#: modules/file/jpkscan.c:2519
msgid "Cannot find any height channel."
msgstr "Не получается найти ни одного канала высот."
@@ -4897,19 +5071,19 @@ msgstr "Файлы MetroPro (.dat)"
msgid "File header is larger than file."
msgstr "Заголовок файла больше, чем сам файл."
-#: modules/file/microprof.c:117
+#: modules/file/microprof.c:125
msgid "Imports MicroProf FRT profilometer data files."
msgstr "Импортирует файлы данных профилометра MicroProf FRT."
-#: modules/file/microprof.c:130
+#: modules/file/microprof.c:138
msgid "MicroProf FRT files (.frt)"
msgstr "Файлы MicroProf FRT (.frt)"
-#: modules/file/microprof.c:136
+#: modules/file/microprof.c:144
msgid "MicroProf FRT text files (.txt)"
msgstr "Текстовые файлы MicroProf FRT (.txt)"
-#: modules/file/microprof.c:432
+#: modules/file/microprof.c:519
msgid "File contains fewer than XSize*YSize data points."
msgstr "Файл содержит меньше, чем XSize*YSize точек данных"
@@ -4998,8 +5172,8 @@ msgstr "Данные изображения начинаются после ко
msgid "Spectra data starts past the end of file."
msgstr "Данные спектроскопии начинаются после конца файла."
-#: modules/file/nanoeducator.c:648 modules/file/opdfile.c:276
-#: modules/file/renishaw.c:1325 modules/file/sensofar.c:256
+#: modules/file/nanoeducator.c:648 modules/file/opdfile.c:287
+#: modules/file/renishaw.c:1334 modules/file/sensofar.c:256
#: modules/file/witec-asc.c:161
msgid "File header is truncated"
msgstr "Заголовок файла усечён"
@@ -5009,8 +5183,8 @@ msgstr "Заголовок файла усечён"
msgid "Parameter header is truncated"
msgstr "Заголовок параметров усечён"
-#: modules/file/nanoeducator.c:932 modules/process/curvature.c:454
-#: modules/tools/profile.c:1107
+#: modules/file/nanoeducator.c:932 modules/process/curvature.c:456
+#: modules/tools/profile.c:1090
#, c-format
msgid "Profile %d"
msgstr "Профиль %d"
@@ -5090,23 +5264,27 @@ msgstr "Строка DATA_INFO содержит менее, чем %d полей
msgid "Missing data start marker \\x1a\\x04."
msgstr "Отсутствует маркер начала данных \\x1a\\x04."
-#: modules/file/nanoobserver.c:113
-msgid "Reads NanoObserver .nao files."
-msgstr "Читает файлы NanoObserver .nao."
+#: modules/file/nanoobserver.c:201
+msgid "Reads Nano-Solution/NanoObserver .nao files."
+msgstr "Читает файлы Nano-Solution/NanoObserver .nao."
+
+#: modules/file/nanoobserver.c:214
+msgid "Nano-Solution/NanoObserver data (.nao)"
+msgstr "Данные Nano-Solution/NanoObserver (.nao)"
-#: modules/file/nanoobserver.c:126
-msgid "NanoObserver data (.nao)"
-msgstr "Данные NanoObserver (.nao)"
+#: modules/file/nanoobserver.c:410 modules/file/renishaw.c:1420
+msgid "Data block is truncated"
+msgstr "Блок данных неполон."
-#: modules/file/nanoscan.c:188
+#: modules/file/nanoscan.c:191
msgid "Imports NanoScan XML files."
msgstr "Импортирует файлы данных NanoScan XML."
-#: modules/file/nanoscan.c:201
+#: modules/file/nanoscan.c:204
msgid "NanoScan XML files (.xml)"
msgstr "Файлы NanoScan XML (.xml)"
-#: modules/file/nanoscan.c:910
+#: modules/file/nanoscan.c:937
msgid "Wrong size of Base64 encoded data."
msgstr "Неправильный размер данных, кодированных Base64."
@@ -5126,22 +5304,22 @@ msgstr "Импортирует файлы данных Digital Instruments Nanos
msgid "Nanoscope II files"
msgstr "Файлы Nanoscope II"
-#: modules/file/nanoscope.c:207
+#: modules/file/nanoscope.c:212
msgid ""
"Imports Veeco (Digital Instruments) Nanoscope data files, version 3 or newer."
msgstr ""
"Импортирует файлы данных Veeco (Digital Instruments) Nanoscope версии 3 или "
"более новой."
-#: modules/file/nanoscope.c:221
+#: modules/file/nanoscope.c:226
msgid "Nanoscope III files"
msgstr "Файлы Nanoscope III"
-#: modules/file/nanoscope.c:288
+#: modules/file/nanoscope.c:295
msgid "File is not a Nanoscope file, or it is a unknown subtype."
msgstr "Файл не является файлом Nanoscope или неизвестного подтипа."
-#: modules/file/nanoscope.c:295
+#: modules/file/nanoscope.c:302
msgid ""
"File has been damaged by change of line endings, resulting in corruption of "
"the binary part of the file.\n"
@@ -5160,16 +5338,16 @@ msgstr ""
"MS Windows, или при других способах передачи файла, которые используют "
"платформо-независимое сохранение текста."
-#: modules/file/nanoscope.c:653 modules/file/nanoscope.c:669
+#: modules/file/nanoscope.c:660 modules/file/nanoscope.c:676
msgid "Cannot parse `Scan size' field."
msgstr "Не удаётся распознать поле `Scan size'."
-#: modules/file/nanoscope.c:1539 modules/file/nrrdfile.c:1086
+#: modules/file/nanoscope.c:1546 modules/file/nrrdfile.c:1086
#, c-format
msgid "Garbage after data sample #%u."
msgstr "Мусор после элемента данных #%u."
-#: modules/file/nanoscope.c:1595
+#: modules/file/nanoscope.c:1602
msgid "Truncated header line."
msgstr "Обрезанная строка заголовка."
@@ -5249,11 +5427,8 @@ msgstr ""
"Модуль импорта данных Nano Measuring Machine должен быть запущен в "
"интерактивном режиме."
-#: modules/file/nmmxyz.c:299
-msgid "Reading files..."
-msgstr "Считываются файлы..."
-
#: modules/file/nmmxyz.c:306 modules/process/lat_synth.c:1224
+#: modules/process/wave_synth.c:798
msgid "Rendering surface..."
msgstr "Строится поверхность..."
@@ -5286,20 +5461,20 @@ msgid "Plot point density map"
msgstr "Строить карту плотности точек"
#: modules/file/nmmxyz.c:534 modules/file/rawfile.c:626
-#: modules/process/dimensions.h:445 modules/xyz/xyz_drift.c:725
-#: modules/xyz/xyz_raster.c:517
+#: modules/process/dimensions.h:427 modules/xyz/xyz_drift.c:725
+#: modules/xyz/xyz_raster.c:376
msgid "Resolution"
msgstr "Разрешение"
#: modules/file/nmmxyz.c:538 modules/file/rawfile.c:631
-#: modules/process/dimensions.h:451 modules/xyz/xyz_drift.c:729
-#: modules/xyz/xyz_raster.c:521
+#: modules/process/dimensions.h:433 modules/xyz/xyz_drift.c:729
+#: modules/xyz/xyz_raster.c:382
msgid "_Horizontal size:"
msgstr "_Горизонтальный размер:"
#: modules/file/nmmxyz.c:554 modules/file/rawfile.c:638
-#: modules/process/dimensions.h:454 modules/xyz/xyz_drift.c:744
-#: modules/xyz/xyz_raster.c:536
+#: modules/process/dimensions.h:436 modules/xyz/xyz_drift.c:744
+#: modules/xyz/xyz_raster.c:388
msgid "_Vertical size:"
msgstr "Вертика_льный размер:"
@@ -5394,38 +5569,38 @@ msgstr "Поле %s заголовка оси содержит слишком м
msgid "Per-axis header field %s contains too few items."
msgstr "Поле %s заголовка оси содержит слишком мало элементов."
-#: modules/file/nt-mdt.c:843
+#: modules/file/nt-mdt.c:850
msgid "Imports NT-MDT data files."
msgstr "Импорт файлов данных NT-MDT"
-#: modules/file/nt-mdt.c:856
+#: modules/file/nt-mdt.c:863
msgid "NT-MDT files (.mdt)"
msgstr "Файлы NT-MDT (.mdt)"
-#: modules/file/nt-mdt.c:1491 modules/file/nt-mdt.c:1599
+#: modules/file/nt-mdt.c:1498 modules/file/nt-mdt.c:1606
msgid "Frame is too short for Frame Mode."
msgstr "Фрейм слишком короткий для режима фреймов."
-#: modules/file/nt-mdt.c:1506 modules/file/nt-mdt.c:1614
+#: modules/file/nt-mdt.c:1513 modules/file/nt-mdt.c:1621
msgid "Frame is too short for dots or data."
msgstr "Фрейм слишком короткий для точек или данных."
-#: modules/file/nt-mdt.c:1869
+#: modules/file/nt-mdt.c:1879
#, c-format
msgid "End of file reached in frame header #%u."
msgstr "Достигнут конец файла в заголовке фрейма #%u."
-#: modules/file/nt-mdt.c:1877
+#: modules/file/nt-mdt.c:1887
#, c-format
msgid "End of file reached in frame data #%u."
msgstr "Достигнут конец файла в данных фрейма #%u."
-#: modules/file/nt-mdt.c:1910
+#: modules/file/nt-mdt.c:1920
#, c-format
msgid "Frame #%u is too short for scanned data header."
msgstr "Фрейм #%u слишком короткий чтобы быть заголовком сканированных данных."
-#: modules/file/nt-mdt.c:1927
+#: modules/file/nt-mdt.c:1937
#, c-format
msgid "Frame #%u is too short for spectroscopy data header."
msgstr "Фрейм #%u слишком короткий чтобы быть заголовком данных спектроскопии."
@@ -5539,28 +5714,28 @@ msgstr "Omicron MATRIX (param.mtrx & data.mtrx)"
msgid "Omicron MATRIX (.mtrx & .mtrx)"
msgstr "Omicron MATRIX (.mtrx & .mtrx)"
-#: modules/file/opdfile.c:188
+#: modules/file/opdfile.c:199
msgid "Imports Wyko OPD and ASC files."
msgstr "Импортирует файлы Wyko OPD и ASC."
-#: modules/file/opdfile.c:201
+#: modules/file/opdfile.c:212
msgid "Wyko OPD files (.opd)"
msgstr "Файлы Wyko OPD (.opd)"
-#: modules/file/opdfile.c:208
+#: modules/file/opdfile.c:219
msgid "Wyko ASCII export files (.asc)"
msgstr "Файлы экспорта в ASCII Wyko (.asc)"
-#: modules/file/opdfile.c:299
+#: modules/file/opdfile.c:310
#, c-format
msgid "Item `%s' is beyond the end of the file."
msgstr "Элемент `%s' находится за концом файла."
-#: modules/file/opdfile.c:614
+#: modules/file/opdfile.c:636
msgid "Nested directories found"
msgstr "Найдены вложенные каталоги"
-#: modules/file/opdfile.c:805
+#: modules/file/opdfile.c:842
#, c-format
msgid "Truncated data in block %s"
msgstr "Неполные данные в блоке %s"
@@ -5861,19 +6036,21 @@ msgstr "Формат данных"
#: modules/file/rawfile.c:567 modules/process/arithmetic.c:234
#: modules/process/calcoefs_view.c:320 modules/process/coerce.c:250
-#: modules/process/convolution_filter.c:236 modules/process/deposit_synth.c:637
+#: modules/process/convolution_filter.c:236 modules/process/deposit_synth.c:638
#: modules/process/drift.c:242 modules/process/edge.c:635
-#: modules/process/entropy.c:178 modules/process/fft_filter_1d.c:183
-#: modules/process/grain_edge.c:210 modules/process/grain_filter.c:313
-#: modules/process/grain_mark.c:244 modules/process/grain_wshed.c:164
-#: modules/process/mark_disconn.c:205 modules/process/mark_with.c:195
-#: modules/process/polydistort.c:205 modules/process/scars.c:295
-#: modules/process/slope_dist.c:273 modules/process/straighten_path.c:198
-#: modules/process/synth.h:509 modules/process/tip_model.c:166
+#: modules/process/entropy.c:178 modules/process/fft_filter_1d.c:184
+#: modules/process/fractal.c:225 modules/process/grain_edge.c:209
+#: modules/process/grain_filter.c:312 modules/process/grain_mark.c:243
+#: modules/process/grain_wshed.c:165 modules/process/mark_disconn.c:205
+#: modules/process/mark_with.c:196 modules/process/mfm_field.c:278
+#: modules/process/mfm_shift.c:167 modules/process/polydistort.c:205
+#: modules/process/scars.c:314 modules/process/slope_dist.c:272
+#: modules/process/stitch.c:272 modules/process/straighten_path.c:198
+#: modules/process/synth.h:538 modules/process/tip_model.c:164
#: modules/process/wpour_mark.c:273 modules/tools/linestats.c:454
-#: modules/tools/sfunctions.c:534 modules/tools/stats.c:459
-#: modules/volume/volume_extract.c:328 modules/volume/volume_linestat.c:287
-#: modules/xyz/xyz_drift.c:618 modules/xyz/xyz_raster.c:443
+#: modules/tools/sfunctions.c:531 modules/tools/stats.c:456
+#: modules/volume/volume_extract.c:321 modules/volume/volume_linestat.c:292
+#: modules/xyz/xyz_drift.c:618 modules/xyz/xyz_raster.c:457
msgid "_Update"
msgstr "О_бновить"
@@ -6022,7 +6199,7 @@ msgstr ""
"<b>Разбор закончился неудачно</b>\n"
"Содержимое `%s' не соответствует формату: %s."
-#: modules/file/rawfile.c:1690 modules/process/neural.c:1580
+#: modules/file/rawfile.c:1690 modules/process/neural.c:1587
#, c-format
msgid "The name `%s' is invalid."
msgstr "Имя `%s' неверно."
@@ -6124,7 +6301,8 @@ msgstr "Импорт файлов данных XYZ"
msgid "Import XYZ Data"
msgstr "Импорт данных XYZ"
-#: modules/file/rawxyz.c:279
+#: modules/file/rawxyz.c:279 modules/graph/graph_stats.c:305
+#: modules/graph/graph_stats.c:756 modules/graph/graph_stats.c:800
msgid "Number of points:"
msgstr "Число точек:"
@@ -6144,7 +6322,7 @@ msgstr "Диапазон Z:"
msgid "_Lateral units:"
msgstr "Единицы _размера:"
-#: modules/file/rawxyz.c:386 modules/process/dimensions.h:494
+#: modules/file/rawxyz.c:386 modules/process/dimensions.h:479
msgid "_Value units:"
msgstr "Единицы измерения _значения:"
@@ -6160,18 +6338,14 @@ msgstr "Файлы данных Renishaw WiRE (.wdf)"
msgid "MapArea block is truncated"
msgstr "Блок MapArea неполон."
-#: modules/file/renishaw.c:787
+#: modules/file/renishaw.c:793
msgid "Random points order unsupported"
msgstr "Случайный порядок точек не поддерживается"
-#: modules/file/renishaw.c:1396
+#: modules/file/renishaw.c:1405
msgid "Block header is truncated"
msgstr "Заголовок блока усечён"
-#: modules/file/renishaw.c:1411
-msgid "Data block is truncated"
-msgstr "Блок данных неполон."
-
#: modules/file/rhk-sm3.c:236
msgid "Imports RHK Technology SM3 data files."
msgstr "Импортирует файлы данных RHK Technology SM3."
@@ -6434,19 +6608,23 @@ msgstr ""
msgid "SPML files (.xml)"
msgstr "Файлы SPML (.xml)"
-#: modules/file/spmlab.c:131
+#: modules/file/spmlab.c:175
msgid "Imports Thermicroscopes SpmLab R3 to R7 data files."
msgstr "Импортирует файлы данных Thermicroscopes SpmLab от R3 до R7."
-#: modules/file/spmlab.c:144
+#: modules/file/spmlab.c:188
msgid "Thermicroscopes SpmLab files"
msgstr "Файлы Thermicroscopes SpmLab"
-#: modules/file/spmlab.c:231
+#: modules/file/spmlab.c:259
#, c-format
msgid "Unknown format version %c."
msgstr "Неизвестная версия формата %c."
+#: modules/file/spmlab.c:283
+msgid "Data block is truncated."
+msgstr "Блок данных обрезан."
+
#: modules/file/spmlabf.c:79
msgid "Imports SPMLab floating-point files."
msgstr "Импортирует файлы с плавающей точкой SPMLab."
@@ -6643,11 +6821,11 @@ msgstr "Импортирует файлы WinSTM (.stm)."
msgid "WinSTM files (.stm)"
msgstr "Файлы WinSTM (.stm)"
-#: modules/file/wipfile.c:272
+#: modules/file/wipfile.c:281
msgid "Imports WItec Project data files."
msgstr "Импортирует файлы данных WItec Project."
-#: modules/file/wipfile.c:285
+#: modules/file/wipfile.c:294
msgid "WItec Project files (.wip)"
msgstr "Файлы WItec Project (.wip)"
@@ -6708,21 +6886,21 @@ msgstr "Экспортирует данные как простой тексто
msgid "XYZ text data (.xyz)"
msgstr "Текстовые данные XYZ (.xyz)"
-#: modules/file/xyzexport.c:244
+#: modules/file/xyzexport.c:247
msgid "Lateral units:"
msgstr "Единицы горизонтальных размеров:"
-#: modules/file/xyzexport.c:290
+#: modules/file/xyzexport.c:293
msgid "Export XYZ"
msgstr "Экспорт XYZ"
-#: modules/file/xyzexport.c:340 modules/process/curvature.c:704
+#: modules/file/xyzexport.c:343 modules/process/curvature.c:700
#: modules/process/entropy.c:214 modules/process/facet-level.c:207
-#: modules/process/fit-shape.c:743 modules/process/level.c:259
-#: modules/process/linematch.c:906 modules/process/neural.c:593
-#: modules/process/polylevel.c:491 modules/process/slope_dist.c:418
-#: modules/tools/filter.c:300 modules/tools/linestats.c:436
-#: modules/tools/profile.c:591 modules/tools/sfunctions.c:516
+#: modules/process/fit-shape.c:755 modules/process/level.c:259
+#: modules/process/linematch.c:869 modules/process/neural.c:597
+#: modules/process/polylevel.c:494 modules/process/slope_dist.c:411
+#: modules/tools/filter.c:301 modules/tools/linestats.c:436
+#: modules/tools/profile.c:572 modules/tools/sfunctions.c:513
#: modules/tools/stats.c:389
msgid "Masking Mode"
msgstr "Режим использования маски"
@@ -6735,6 +6913,14 @@ msgstr "Импортирует изображения Carl Zeiss SEM."
msgid "Carl Zeiss SEM scans (.tif)"
msgstr "Сканы Carl Zeiss SEM (.tif)"
+#: modules/file/zeisslsm.c:383
+msgid "Imports Carl Zeiss CLSM images."
+msgstr "Импортирует конфокальные изображения Carl Zeiss."
+
+#: modules/file/zeisslsm.c:396
+msgid "Carl Zeiss CLSM images (.lsm)"
+msgstr "Конфокальные изображения Carl Zeiss (.lsm)"
+
#: modules/file/zemax.c:72
msgid "Imports Zemax grid sag data files."
msgstr "Импортирует файлы данных искривления сетки из Zemax."
@@ -6757,15 +6943,15 @@ msgstr "Код единиц измерения %d неправилен или н
msgid "The first line contains too many items."
msgstr "Первая строка содержит слишком много элементов."
-#: modules/graph/graph_align.c:57
+#: modules/graph/graph_align.c:60
msgid "Aligns graph curves."
msgstr "Выравнивает кривые графиков"
-#: modules/graph/graph_align.c:71
+#: modules/graph/graph_align.c:74
msgid "/_Align"
msgstr "/_Подровнять"
-#: modules/graph/graph_align.c:74
+#: modules/graph/graph_align.c:77
msgid "Align curves"
msgstr "Выровнять кривые"
@@ -6781,48 +6967,50 @@ msgstr "/_Габаритный размер..."
msgid "Fit critical dimension"
msgstr "Измерить габаритный размер"
-#: modules/graph/graph_cd.c:209 modules/graph/graph_fit.c:267
+#: modules/graph/graph_cd.c:209 modules/graph/graph_fit.c:270
msgid "Fit Graph"
msgstr "Аппроксимировать график"
-#: modules/graph/graph_cd.c:212 modules/graph/graph_fdfit.c:251
-#: modules/graph/graph_fit.c:270 modules/process/fit-shape.c:393
+#: modules/graph/graph_cd.c:212 modules/graph/graph_fdfit.c:254
+#: modules/graph/graph_fit.c:273 modules/process/fit-shape.c:394
#: modules/volume/volume_fdfit.c:299
msgid "verb|_Fit"
msgstr "_Аппрокс."
-#: modules/graph/graph_cd.c:262 modules/graph/graph_cut.c:166
-#: modules/graph/graph_fdfit.c:306 modules/graph/graph_fit.c:325
-#: modules/graph/graph_peaks.c:199
+#: modules/graph/graph_cd.c:262 modules/graph/graph_cut.c:168
+#: modules/graph/graph_fdfit.c:313 modules/graph/graph_fit.c:332
+#: modules/graph/graph_peaks.c:199 modules/graph/graph_stats.c:268
msgid "_Graph curve:"
msgstr "График:"
-#: modules/graph/graph_cd.c:276 modules/graph/graph_fdfit.c:320
-#: modules/graph/graph_fit.c:339 modules/volume/volume_fdfit.c:405
+#: modules/graph/graph_cd.c:276 modules/graph/graph_fdfit.c:327
+#: modules/graph/graph_fit.c:346 modules/volume/volume_fdfit.c:389
msgid "F_unction:"
msgstr "_Функция:"
-#: modules/graph/graph_cd.c:305 modules/graph/graph_fdfit.c:361
-#: modules/graph/graph_fit.c:375 modules/process/curvature.c:745
-#: modules/process/fit-shape.c:792 modules/volume/volume_fdfit.c:446
+#: modules/graph/graph_cd.c:305 modules/graph/graph_fdfit.c:368
+#: modules/graph/graph_fit.c:382 modules/process/curvature.c:742
+#: modules/process/fit-shape.c:804 modules/volume/volume_fdfit.c:422
msgid "Parameter"
msgstr "Параметр"
-#: modules/graph/graph_cd.c:307 modules/graph/graph_fdfit.c:363
-#: modules/graph/graph_fit.c:377 modules/process/fit-shape.c:794
-#: modules/volume/volume_fdfit.c:448
+#: modules/graph/graph_cd.c:307 modules/graph/graph_fdfit.c:370
+#: modules/graph/graph_fit.c:384 modules/process/fit-shape.c:806
+#: modules/volume/volume_fdfit.c:424
msgid "Error"
msgstr "Ошибка"
-#: modules/graph/graph_cd.c:319 modules/graph/graph_cut.c:196
-#: modules/graph/graph_fdfit.c:415 modules/graph/graph_fit.c:433
-#: modules/volume/volume_fdfit.c:500 modules/volume/volume_linestat.c:389
+#: modules/graph/graph_cd.c:319 modules/graph/graph_cut.c:189
+#: modules/graph/graph_fdfit.c:422 modules/graph/graph_fit.c:440
+#: modules/graph/graph_stats.c:279 modules/graph/graph_stats.c:793
+#: modules/volume/volume_fdfit.c:476 modules/volume/volume_linestat.c:394
msgid "Range:"
msgstr "Диапазон:"
-#: modules/graph/graph_cd.c:330 modules/graph/graph_cut.c:207
-#: modules/graph/graph_fdfit.c:426 modules/graph/graph_fit.c:444
-#: modules/volume/volume_fdfit.c:511 modules/volume/volume_linestat.c:400
+#: modules/graph/graph_cd.c:330 modules/graph/graph_cut.c:200
+#: modules/graph/graph_fdfit.c:433 modules/graph/graph_fit.c:451
+#: modules/graph/graph_stats.c:290 modules/graph/graph_stats.c:796
+#: modules/volume/volume_fdfit.c:487 modules/volume/volume_linestat.c:405
msgid "range|to"
msgstr "–"
@@ -6830,94 +7018,94 @@ msgstr "–"
msgid "_Draw whole circle"
msgstr "_Рисовать полный круг"
-#: modules/graph/graph_cd.c:382 modules/graph/graph_fdfit.c:491
-#: modules/graph/graph_fit.c:531 modules/process/fit-shape.c:522
-#: modules/volume/volume_fdfit.c:573
+#: modules/graph/graph_cd.c:382 modules/graph/graph_fdfit.c:498
+#: modules/graph/graph_fit.c:538 modules/process/fit-shape.c:523
+#: modules/volume/volume_fdfit.c:549
msgid "Save Fit Report"
msgstr "Сохранить отчёт аппроксимации"
#: modules/graph/graph_cd.c:529 modules/graph/graph_cd.c:1107
-#: modules/graph/graph_fdfit.c:709 modules/graph/graph_fit.c:763
-#: modules/volume/volume_fdfit.c:907
+#: modules/graph/graph_fdfit.c:725 modules/graph/graph_fit.c:779
+#: modules/volume/volume_fdfit.c:883
msgid "Fit"
msgstr "Аппроксимация"
-#: modules/graph/graph_cd.c:555 modules/graph/graph_fdfit.c:749
-#: modules/graph/graph_fit.c:803 modules/volume/volume_fdfit.c:978
-#: modules/volume/volume_fdfit.c:1085
+#: modules/graph/graph_cd.c:555 modules/graph/graph_fdfit.c:765
+#: modules/graph/graph_fit.c:819 modules/volume/volume_fdfit.c:954
+#: modules/volume/volume_fdfit.c:1061
msgid "It is necessary to select more data points than free fit parameters"
msgstr ""
"Необходимо выбрать больше точек данных, чем возможных параметров "
"аппроксимации"
-#: modules/graph/graph_cd.c:710 modules/graph/graph_fdfit.c:798
-#: modules/graph/graph_fit.c:852 modules/process/entropy.c:554
-#: modules/tools/grainmeasure.c:217 modules/tools/readvalue.c:634
-#: modules/tools/readvalue.c:635 modules/tools/readvalue.c:636
-#: modules/tools/readvalue.c:637 modules/tools/roughness.c:975
-#: modules/tools/stats.c:727 modules/tools/stats.c:740
-#: modules/tools/stats.c:741 modules/volume/volume_fdfit.c:1134
-#: modules/xyz/xyz_drift.c:1099 modules/xyz/xyz_drift.c:1117
-#: modules/xyz/xyz_drift.c:1134
+#: modules/graph/graph_cd.c:710 modules/graph/graph_fdfit.c:814
+#: modules/graph/graph_fit.c:868 modules/graph/graph_stats.c:663
+#: modules/process/entropy.c:555 modules/tools/grainmeasure.c:217
+#: modules/tools/readvalue.c:634 modules/tools/readvalue.c:635
+#: modules/tools/readvalue.c:636 modules/tools/readvalue.c:637
+#: modules/tools/roughness.c:984 modules/tools/stats.c:723
+#: modules/tools/stats.c:736 modules/tools/stats.c:737
+#: modules/volume/volume_fdfit.c:1110 modules/xyz/xyz_drift.c:1099
+#: modules/xyz/xyz_drift.c:1117 modules/xyz/xyz_drift.c:1134
msgid "N.A."
msgstr "недоступно"
-#: modules/graph/graph_cd.c:993 modules/graph/graph_fdfit.c:1363
-#: modules/graph/graph_fit.c:1500 modules/process/fit-shape.c:2078
-#: modules/volume/volume_fdfit.c:1720
+#: modules/graph/graph_cd.c:993 modules/graph/graph_fdfit.c:1381
+#: modules/graph/graph_fit.c:1518 modules/process/fit-shape.c:2060
+#: modules/volume/volume_fdfit.c:1696
msgid "===== Fit Results ====="
msgstr "===== Результаты аппроксимации ====="
-#: modules/graph/graph_cd.c:997 modules/graph/graph_fdfit.c:1367
-#: modules/graph/graph_fit.c:1504 modules/process/fit-shape.c:2080
-#: modules/volume/volume_fdfit.c:1724
+#: modules/graph/graph_cd.c:997 modules/graph/graph_fdfit.c:1385
+#: modules/graph/graph_fit.c:1522 modules/process/fit-shape.c:2062
+#: modules/volume/volume_fdfit.c:1700
#, c-format
msgid "Data: %s\n"
msgstr "Данные: %s\n"
-#: modules/graph/graph_cd.c:1000 modules/graph/graph_fdfit.c:1370
-#: modules/graph/graph_fit.c:1507 modules/process/fit-shape.c:2082
-#: modules/volume/volume_fdfit.c:1727
+#: modules/graph/graph_cd.c:1000 modules/graph/graph_fdfit.c:1388
+#: modules/graph/graph_fit.c:1525 modules/process/fit-shape.c:2064
+#: modules/volume/volume_fdfit.c:1703
#, c-format
msgid "Number of points: %d of %d\n"
msgstr "Число точек: %d из %d\n"
-#: modules/graph/graph_cd.c:1004 modules/graph/graph_fdfit.c:1374
-#: modules/graph/graph_fit.c:1511 modules/volume/volume_fdfit.c:1731
+#: modules/graph/graph_cd.c:1004 modules/graph/graph_fdfit.c:1392
+#: modules/graph/graph_fit.c:1529 modules/volume/volume_fdfit.c:1707
#, c-format
msgid "X range: %.*f to %.*f %s\n"
msgstr "Диапазон X: от %.*f до %.*f %s\n"
-#: modules/graph/graph_cd.c:1010 modules/graph/graph_fdfit.c:1380
-#: modules/graph/graph_fit.c:1517 modules/process/fit-shape.c:2084
-#: modules/volume/volume_fdfit.c:1737
+#: modules/graph/graph_cd.c:1010 modules/graph/graph_fdfit.c:1398
+#: modules/graph/graph_fit.c:1535 modules/process/fit-shape.c:2066
+#: modules/volume/volume_fdfit.c:1713
#, c-format
msgid "Fitted function: %s\n"
msgstr "Аппроксимирующая функция: %s\n"
-#: modules/graph/graph_cd.c:1013 modules/graph/graph_fdfit.c:1383
-#: modules/graph/graph_fit.c:1520 modules/process/fit-shape.c:2087
-#: modules/volume/volume_fdfit.c:1740
+#: modules/graph/graph_cd.c:1013 modules/graph/graph_fdfit.c:1401
+#: modules/graph/graph_fit.c:1538 modules/process/fit-shape.c:2069
+#: modules/volume/volume_fdfit.c:1716
msgid "Results\n"
msgstr "Результаты\n"
-#: modules/graph/graph_cut.c:88
+#: modules/graph/graph_cut.c:87
msgid "Cut graph"
msgstr "Обрезает график"
-#: modules/graph/graph_cut.c:102
+#: modules/graph/graph_cut.c:101
msgid "/_Cut..."
msgstr "/_Обрезать..."
-#: modules/graph/graph_cut.c:105
+#: modules/graph/graph_cut.c:104
msgid "Extract part of graph into new one"
msgstr "Извлечь часть старого графика в новый"
-#: modules/graph/graph_cut.c:146
+#: modules/graph/graph_cut.c:145
msgid "Cut Graph"
msgstr "Обрезать график"
-#: modules/graph/graph_cut.c:180
+#: modules/graph/graph_cut.c:173
msgid "Cut _all curves"
msgstr "Обрезать _все кривые"
@@ -7015,97 +7203,97 @@ msgstr "Экспортировать график в растровое изоб
msgid "Export to PNG"
msgstr "Экспортировать в PNG"
-#: modules/graph/graph_export_vector.c:35
+#: modules/graph/graph_export_vector.c:36
msgid "Exports graphs to PostScript"
msgstr "Экспортирует графики в PostScript"
-#: modules/graph/graph_export_vector.c:49
+#: modules/graph/graph_export_vector.c:50
msgid "/Export _PostScript"
msgstr "/Экспортировать _PostScript"
-#: modules/graph/graph_export_vector.c:52
+#: modules/graph/graph_export_vector.c:53
msgid "Export graph to PostScript"
msgstr "Экспортировать график в PostScript"
-#: modules/graph/graph_export_vector.c:65
+#: modules/graph/graph_export_vector.c:66
msgid "Export to PostScript"
msgstr "Экспортировать в PostScript"
-#: modules/graph/graph_fdfit.c:168
+#: modules/graph/graph_fdfit.c:169
msgid "Fit force-distance data"
msgstr "Аппроксимирует данные сила-расстояние"
-#: modules/graph/graph_fdfit.c:182
+#: modules/graph/graph_fdfit.c:183
msgid "/_Fit FD Curve..."
msgstr "/Аппроксимировать _кривую сила-расстояние..."
-#: modules/graph/graph_fdfit.c:185
+#: modules/graph/graph_fdfit.c:186
msgid "Fit a force-distance curve"
msgstr "Аппроксимировать кривую сила-расстояние"
-#: modules/graph/graph_fdfit.c:248 modules/volume/volume_fdfit.c:296
+#: modules/graph/graph_fdfit.c:251 modules/volume/volume_fdfit.c:296
msgid "Fit FD Curve"
msgstr "Аппроксимировать кривую сила-расстояние"
-#: modules/graph/graph_fdfit.c:255 modules/graph/graph_fit.c:274
-#: modules/process/fit-shape.c:397 modules/process/measure_lattice.c:257
-#: modules/volume/volume_fdfit.c:303
+#: modules/graph/graph_fdfit.c:258 modules/graph/graph_fit.c:277
+#: modules/process/correct_affine.c:347 modules/process/fit-shape.c:398
+#: modules/process/measure_lattice.c:247 modules/volume/volume_fdfit.c:303
msgid "verb|_Estimate"
msgstr "О_ценить"
-#: modules/graph/graph_fdfit.c:257 modules/graph/graph_fit.c:276
-#: modules/volume/volume_fdfit.c:305
+#: modules/graph/graph_fdfit.c:260 modules/graph/graph_fit.c:279
+#: modules/process/psf.c:239 modules/volume/volume_fdfit.c:305
msgid "_Plot Inits"
msgstr "_Исходный"
-#: modules/graph/graph_fdfit.c:359 modules/graph/graph_fit.c:373
-#: modules/process/fit-shape.c:790 modules/volume/volume_fdfit.c:444
+#: modules/graph/graph_fdfit.c:366 modules/graph/graph_fit.c:380
+#: modules/process/fit-shape.c:802 modules/volume/volume_fdfit.c:420
msgid "Fix"
-msgstr "Править"
+msgstr "Фиксировать"
-#: modules/graph/graph_fdfit.c:365 modules/graph/graph_fit.c:379
-#: modules/volume/volume_fdfit.c:450
+#: modules/graph/graph_fdfit.c:372 modules/graph/graph_fit.c:386
+#: modules/volume/volume_fdfit.c:426
msgid "Initial"
msgstr "Исходное"
-#: modules/graph/graph_fdfit.c:376 modules/graph/graph_fit.c:394
-#: modules/volume/volume_fdfit.c:461
+#: modules/graph/graph_fdfit.c:383 modules/graph/graph_fit.c:401
+#: modules/volume/volume_fdfit.c:437
msgid "χ<sup>2</sup> result:"
msgstr "Результирующее χ<sup>2</sup>:"
-#: modules/graph/graph_fdfit.c:392 modules/graph/graph_fit.c:410
-#: modules/process/fit-shape.c:469 modules/process/fit-shape.c:2134
-#: modules/volume/volume_fdfit.c:477
+#: modules/graph/graph_fdfit.c:399 modules/graph/graph_fit.c:417
+#: modules/process/fit-shape.c:470 modules/process/fit-shape.c:2116
+#: modules/volume/volume_fdfit.c:453
msgid "Correlation Matrix"
msgstr "Матрица корреляции"
-#: modules/graph/graph_fdfit.c:447 modules/graph/graph_fit.c:485
-#: modules/process/wpour_mark.c:410 modules/volume/volume_fdfit.c:532
+#: modules/graph/graph_fdfit.c:454 modules/graph/graph_fit.c:492
+#: modules/process/wpour_mark.c:410 modules/volume/volume_fdfit.c:508
msgid "Instant:"
msgstr "Сразу:"
-#: modules/graph/graph_fdfit.c:450 modules/graph/graph_fit.c:488
+#: modules/graph/graph_fdfit.c:457 modules/graph/graph_fit.c:495
msgid "esti_mate"
msgstr "о_ценить"
-#: modules/graph/graph_fdfit.c:457 modules/graph/graph_fit.c:495
-#: modules/volume/volume_fdfit.c:542
+#: modules/graph/graph_fdfit.c:464 modules/graph/graph_fit.c:502
+#: modules/volume/volume_fdfit.c:518
msgid "p_lot"
msgstr "ст_роить"
-#: modules/graph/graph_fdfit.c:708 modules/graph/graph_fit.c:762
-#: modules/volume/volume_fdfit.c:906
+#: modules/graph/graph_fdfit.c:724 modules/graph/graph_fit.c:778
+#: modules/volume/volume_fdfit.c:882
msgid "Estimate"
msgstr "Оценка"
-#: modules/graph/graph_fdfit.c:1410 modules/graph/graph_fit.c:1547
-#: modules/volume/volume_fdfit.c:1768
+#: modules/graph/graph_fdfit.c:1428 modules/graph/graph_fit.c:1565
+#: modules/volume/volume_fdfit.c:1744
#, c-format
msgid "Residual sum: %g\n"
msgstr "Остаточная сумма: %g\n"
-#: modules/graph/graph_fdfit.c:1413 modules/graph/graph_fit.c:1550
-#: modules/volume/volume_fdfit.c:1771
+#: modules/graph/graph_fdfit.c:1431 modules/graph/graph_fit.c:1568
+#: modules/volume/volume_fdfit.c:1747
msgid "Correlation matrix\n"
msgstr "Матрица корреляции\n"
@@ -7121,27 +7309,27 @@ msgstr "/_Фильтр"
msgid "Remove noise from graph curves"
msgstr "Удалить шум с графиков кривых "
-#: modules/graph/graph_fit.c:181
+#: modules/graph/graph_fit.c:182
msgid "Fit graph with function"
msgstr "Аппроксимирует график функцией"
-#: modules/graph/graph_fit.c:195
+#: modules/graph/graph_fit.c:196
msgid "/_Fit Function..."
msgstr "/_Аппроксимировать функцией..."
-#: modules/graph/graph_fit.c:198
+#: modules/graph/graph_fit.c:199
msgid "Fit a function on graph data"
msgstr "Аппроксимировать данные графика функцией"
-#: modules/graph/graph_fit.c:386
+#: modules/graph/graph_fit.c:393
msgid "Copy all fitted values to estimates"
msgstr "Копировать все аппроксимирующие значения в оценки"
-#: modules/graph/graph_fit.c:460
+#: modules/graph/graph_fit.c:467
msgid "Plot full range"
msgstr "Строить весь диапазон"
-#: modules/graph/graph_fit.c:470
+#: modules/graph/graph_fit.c:477
msgid "Create a difference graph"
msgstr "Создать график разности"
@@ -7225,52 +7413,135 @@ msgstr "/Найти _пики..."
msgid "Find graph curve peaks"
msgstr "Найти пики графиков кривых"
-#: modules/graph/graph_peaks.c:157
+#: modules/graph/graph_peaks.c:155
msgid "Prominence"
msgstr "Выдающесть"
-#: modules/graph/graph_peaks.c:161
+#: modules/graph/graph_peaks.c:159
msgid "Zero"
msgstr "Нуль"
-#: modules/graph/graph_peaks.c:162
+#: modules/graph/graph_peaks.c:160
msgid "Bilateral minimum"
msgstr "Двусторонний минимум"
-#: modules/graph/graph_peaks.c:178
+#: modules/graph/graph_peaks.c:176
msgid "Graph Peaks"
msgstr "Пики графика"
-#: modules/graph/graph_peaks.c:212
+#: modules/graph/graph_peaks.c:209
msgid "_Background type:"
msgstr "Тип _фона:"
-#: modules/graph/graph_peaks.c:227
+#: modules/graph/graph_peaks.c:219
msgid "Order peaks _by:"
msgstr "Упорядочить пики _по:"
-#: modules/graph/graph_peaks.c:242
+#: modules/graph/graph_peaks.c:225
msgid "Number of _peaks:"
msgstr "_Количество пиков:"
-#: modules/graph/graph_peaks.c:263 modules/process/curvature.c:773
-#: modules/process/grain_stat.c:360 modules/process/measure_lattice.c:396
-#: modules/process/polylevel.c:607 modules/tools/distance.c:259
-#: modules/tools/roughness.c:818 modules/tools/stats.c:450
+#: modules/graph/graph_peaks.c:245 modules/graph/graph_stats.c:367
+#: modules/process/curvature.c:770 modules/process/grain_stat.c:360
+#: modules/process/measure_lattice.c:390 modules/process/polylevel.c:610
+#: modules/tools/distance.c:259 modules/tools/roughness.c:819
+#: modules/tools/stats.c:447
msgid "Save table to a file"
msgstr "Сохранить таблицу в файл"
-#: modules/graph/graph_peaks.c:267 modules/process/curvature.c:778
-#: modules/process/grain_stat.c:365 modules/process/measure_lattice.c:400
-#: modules/process/polylevel.c:617 modules/tools/distance.c:264
-#: modules/tools/roughness.c:823 modules/tools/stats.c:455
+#: modules/graph/graph_peaks.c:249 modules/graph/graph_stats.c:371
+#: modules/process/curvature.c:775 modules/process/grain_stat.c:365
+#: modules/process/measure_lattice.c:394 modules/process/polylevel.c:620
+#: modules/tools/distance.c:264 modules/tools/roughness.c:824
+#: modules/tools/stats.c:452
msgid "Copy table to clipboard"
msgstr "Скопировать таблицу в буфер обмена"
-#: modules/graph/graph_peaks.c:654
+#: modules/graph/graph_peaks.c:618
msgid "Save Peak Parameters"
msgstr "Сохранить параметры пиков"
+#: modules/graph/graph_stats.c:148 modules/graph/graph_stats.c:161
+#: modules/tools/stats.c:205
+msgid "Average value:"
+msgstr "Среднее значение:"
+
+#: modules/graph/graph_stats.c:149 modules/tools/stats.c:206
+msgid "Median:"
+msgstr "Срединное значение:"
+
+#: modules/graph/graph_stats.c:150
+msgid "Ra:"
+msgstr "Ra:"
+
+#: modules/graph/graph_stats.c:151
+msgid "Rms (Rq):"
+msgstr "Rms (Rq):"
+
+#: modules/graph/graph_stats.c:152 modules/tools/stats.c:210
+msgid "Skew:"
+msgstr "Асимметрия:"
+
+#: modules/graph/graph_stats.c:153 modules/tools/stats.c:211
+msgid "Kurtosis:"
+msgstr "Эксцесс:"
+
+#: modules/graph/graph_stats.c:158
+msgid "Projected length:"
+msgstr "Длина проекции:"
+
+#: modules/graph/graph_stats.c:159
+msgid "Developed length:"
+msgstr "Длина полного профиля:"
+
+#: modules/graph/graph_stats.c:160 modules/tools/stats.c:214
+msgid "Variation:"
+msgstr "Вариация:"
+
+#: modules/graph/graph_stats.c:162
+msgid "Area under curve:"
+msgstr "Площадь под кривой:"
+
+#: modules/graph/graph_stats.c:163
+msgid "Positive area:"
+msgstr "Положительная площадь:"
+
+#: modules/graph/graph_stats.c:164
+msgid "Negative area:"
+msgstr "Отрицательная площадь:"
+
+#: modules/graph/graph_stats.c:165
+msgid "Root mean square:"
+msgstr "Среднеквадратичное:"
+
+#: modules/graph/graph_stats.c:171
+msgid "Calculates simple graph curve statistics."
+msgstr "Рассчитывает простую статистику для кривых графиков"
+
+#: modules/graph/graph_stats.c:185
+msgid "/_Statistics..."
+msgstr "/Статистика..."
+
+#: modules/graph/graph_stats.c:188
+msgid "Calculate graph curve statistics"
+msgstr "Рассчитать статистику для кривых графиков"
+
+#: modules/graph/graph_stats.c:241
+msgid "Graph Statistics"
+msgstr "Статистика графика"
+
+#: modules/graph/graph_stats.c:320 modules/graph/graph_stats.c:807
+msgid "Simple Parameters"
+msgstr "Простые параметры"
+
+#: modules/graph/graph_stats.c:342 modules/graph/graph_stats.c:826
+msgid "Integrals"
+msgstr "Интегралы"
+
+#: modules/graph/graph_stats.c:686
+msgid "Save Curve Statistics"
+msgstr "Сохранить статистику кривой"
+
#: modules/layer/axis.c:143
msgid "Layer allowing selection of horizontal or vertical lines."
msgstr "Слой, позволяющий выбирать горизонтальные или вертикальные линии."
@@ -7410,25 +7681,25 @@ msgstr "Распределение углов"
msgid "Angle Distribution"
msgstr "Распределение углов"
-#: modules/process/angle_dist.c:188 modules/process/slope_dist.c:373
+#: modules/process/angle_dist.c:188 modules/process/slope_dist.c:365
msgid "Output _size:"
msgstr "_Размер результата:"
-#: modules/process/angle_dist.c:193 modules/process/grain_wshed.c:206
+#: modules/process/angle_dist.c:193 modules/process/grain_wshed.c:207
msgid "_Number of steps:"
msgstr "_Число шагов:"
-#: modules/process/angle_dist.c:198 modules/process/slope_dist.c:380
+#: modules/process/angle_dist.c:198 modules/process/slope_dist.c:372
msgid "_Logarithmic value scale"
msgstr "_Логарифмическая шкала"
#: modules/process/angle_dist.c:204 modules/process/entropy.c:231
-#: modules/process/slope_dist.c:390
+#: modules/process/slope_dist.c:382
msgid "Use local plane _fitting"
msgstr "Использовать _аппроксимацию локальной плоскостью"
#: modules/process/angle_dist.c:213 modules/process/entropy.c:242
-#: modules/process/slope_dist.c:401
+#: modules/process/slope_dist.c:393
msgid "_Plane size:"
msgstr "Размер _плоскости:"
@@ -7444,7 +7715,8 @@ msgstr "/М_ножественные данные/_Арифметика..."
msgid "Arithmetic operations on data"
msgstr "Арифметические операции над данными"
-#: modules/process/arithmetic.c:202 modules/process/superresolution.c:349
+#: modules/process/arithmetic.c:202 modules/process/stitch.c:234
+#: modules/process/superresolution.c:348
msgid "Calculated"
msgstr "Посчитанное"
@@ -7460,7 +7732,7 @@ msgstr "_Выражение:"
msgid "Operands"
msgstr "Операнды"
-#: modules/process/arithmetic.c:300 modules/process/dimensions.h:483
+#: modules/process/arithmetic.c:300 modules/process/dimensions.h:465
msgid "Units"
msgstr "Единицы измерения"
@@ -7481,15 +7753,15 @@ msgstr "Непосредственно указать единицы измер
msgid "Expression contains unknown identifiers"
msgstr "Выражение содержит неизвестные идентификаторы"
-#: modules/process/arithmetic.c:569 modules/process/superresolution.c:300
+#: modules/process/arithmetic.c:569 modules/process/superresolution.c:299
msgid "Pixel dimensions differ"
msgstr "Размеры в пикселях отличаются"
-#: modules/process/arithmetic.c:571 modules/process/superresolution.c:302
+#: modules/process/arithmetic.c:571 modules/process/superresolution.c:301
msgid "Lateral dimensions are different physical quantities"
msgstr "Горизонтальные размеры являются разными физическими величинами"
-#: modules/process/arithmetic.c:574 modules/process/superresolution.c:305
+#: modules/process/arithmetic.c:574 modules/process/superresolution.c:304
msgid "Physical dimensions differ"
msgstr "Физические размеры отличаются"
@@ -7596,8 +7868,8 @@ msgid "Generates surfaces by ballistic deposition."
msgstr "Создаёт поверхность с помощью баллистического осаждения."
#: modules/process/bdep_synth.c:164
-msgid "/S_ynthetic/_Ballistic..."
-msgstr "/Син_тез/_Баллистический..."
+msgid "/S_ynthetic/_Deposition/_Ballistic..."
+msgstr "/Син_тез/_Осаждение/_Балистическое..."
#: modules/process/bdep_synth.c:168
msgid "Generate surface by ballistic deposition"
@@ -7605,20 +7877,23 @@ msgstr "Создать поверхность используя баллист
#: modules/process/bdep_synth.c:239 modules/process/bdep_synth.c:596
#: modules/process/calcoefs_simple.c:636 modules/process/col_synth.c:282
-#: modules/process/col_synth.c:733 modules/process/crosscor.c:819
-#: modules/process/crosscor.c:882 modules/process/deposit_synth.c:268
-#: modules/process/deposit_synth.c:859 modules/process/diff_synth.c:304
-#: modules/process/diff_synth.c:705 modules/process/domain_synth.c:255
-#: modules/process/domain_synth.c:745 modules/process/grain_wshed.c:429
+#: modules/process/col_synth.c:734 modules/process/crosscor.c:792
+#: modules/process/crosscor.c:855 modules/process/deposit_synth.c:268
+#: modules/process/deposit_synth.c:858 modules/process/diff_synth.c:304
+#: modules/process/diff_synth.c:704 modules/process/domain_synth.c:255
+#: modules/process/domain_synth.c:745 modules/process/fibre_synth.c:357
+#: modules/process/fibre_synth.c:872 modules/process/grain_wshed.c:433
#: modules/process/lat_synth.c:491 modules/process/mark_disconn.c:148
-#: modules/process/mark_disconn.c:373 modules/process/maskcor.c:330
-#: modules/process/mcrop.c:315 modules/process/merge.c:1072
-#: modules/process/nanoindent_adjust.c:323 modules/process/neural.c:1272
-#: modules/process/pid.c:338 modules/process/superresolution.c:416
-#: modules/process/superresolution.c:505 modules/process/tip_blind.c:781
-#: modules/process/tipops.c:320 modules/process/xydenoise.c:213
-#: modules/volume/volume_kmeans.c:403 modules/volume/volume_kmedians.c:365
-#: modules/xyz/xyz_raster.c:1028 modules/xyz/xyz_raster.c:1044
+#: modules/process/mark_disconn.c:361 modules/process/maskcor.c:334
+#: modules/process/mcrop.c:314 modules/process/merge.c:1072
+#: modules/process/nanoindent_adjust.c:324 modules/process/neural.c:1279
+#: modules/process/pid.c:339 modules/process/sphere-revolve.c:269
+#: modules/process/superresolution.c:415 modules/process/superresolution.c:504
+#: modules/process/tip_blind.c:778 modules/process/tipops.c:320
+#: modules/process/wave_synth.c:305 modules/process/wave_synth.c:747
+#: modules/process/xydenoise.c:214 modules/volume/volume_kmeans.c:397
+#: modules/volume/volume_kmedians.c:363 modules/xyz/xyz_raster.c:997
+#: modules/xyz/xyz_raster.c:1013
msgid "Initializing..."
msgstr "Инициализация..."
@@ -7627,10 +7902,11 @@ msgstr "Инициализация..."
#: modules/process/deposit_synth.c:531 modules/process/deposit_synth.c:544
#: modules/process/diff_synth.c:342 modules/process/domain_synth.c:319
#: modules/process/domain_synth.c:327 modules/process/fbm_synth.c:278
-#: modules/process/fft_synth.c:314 modules/process/lat_synth.c:529
-#: modules/process/lno_synth.c:407 modules/process/noise_synth.c:311
-#: modules/process/obj_synth.c:407 modules/process/pat_synth.c:357
-#: modules/process/wave_synth.c:323
+#: modules/process/fft_synth.c:314 modules/process/fibre_synth.c:394
+#: modules/process/lat_synth.c:529 modules/process/lno_synth.c:405
+#: modules/process/noise_synth.c:309 modules/process/obj_synth.c:404
+#: modules/process/pat_synth.c:357 modules/process/phase_synth.c:518
+#: modules/process/wave_synth.c:342
msgid "Generated"
msgstr "Сгенерированное"
@@ -7649,50 +7925,56 @@ msgid "Progressive preview"
msgstr "Прогрессивное обновление"
#: modules/process/bdep_synth.c:407 modules/process/col_synth.c:458
-#: modules/process/deposit_synth.c:412 modules/process/diff_synth.c:477
+#: modules/process/deposit_synth.c:413 modules/process/diff_synth.c:477
#: modules/process/domain_synth.c:430 modules/process/fbm_synth.c:360
-#: modules/process/fft_synth.c:398 modules/process/lat_synth.c:626
-#: modules/process/lno_synth.c:490 modules/process/noise_synth.c:394
-#: modules/process/obj_synth.c:498 modules/process/pat_synth.c:442
-#: modules/process/wave_synth.c:407
+#: modules/process/fft_synth.c:398 modules/process/fibre_synth.c:479
+#: modules/process/lat_synth.c:626 modules/process/lno_synth.c:488
+#: modules/process/mfm_current.c:383 modules/process/mfm_parallel.c:384
+#: modules/process/noise_synth.c:392 modules/process/obj_synth.c:495
+#: modules/process/pat_synth.c:442 modules/process/phase_synth.c:263
+#: modules/process/wave_synth.c:426
msgid "Dimensions"
msgstr "Размеры"
#: modules/process/bdep_synth.c:416 modules/process/col_synth.c:467
-#: modules/process/deposit_synth.c:422 modules/process/diff_synth.c:486
+#: modules/process/deposit_synth.c:425 modules/process/diff_synth.c:486
#: modules/process/domain_synth.c:438 modules/process/fbm_synth.c:371
-#: modules/process/fft_synth.c:409 modules/process/lno_synth.c:501
-#: modules/process/noise_synth.c:405 modules/process/obj_synth.c:509
-#: modules/process/pat_synth.c:454 modules/process/wave_synth.c:418
+#: modules/process/fft_synth.c:409 modules/process/fibre_synth.c:490
+#: modules/process/lno_synth.c:499 modules/process/mfm_current.c:412
+#: modules/process/mfm_parallel.c:411 modules/process/noise_synth.c:403
+#: modules/process/obj_synth.c:506 modules/process/pat_synth.c:454
+#: modules/process/phase_synth.c:274 modules/process/wave_synth.c:437
msgid "Generator"
msgstr "Генератор"
#: modules/process/bdep_synth.c:422 modules/process/col_synth.c:473
-#: modules/process/diff_synth.c:492 modules/process/lno_synth.c:1041
-#: modules/process/obj_synth.c:520
+#: modules/process/deposit_synth.c:455 modules/process/diff_synth.c:492
+#: modules/process/fibre_synth.c:502 modules/process/lno_synth.c:1041
+#: modules/process/obj_synth.c:518
msgid "Co_verage:"
msgstr "По_крытие:"
#: modules/process/bdep_synth.c:434 modules/process/diff_synth.c:512
-#: modules/process/domain_synth.c:514 modules/process/fbm_synth.c:412
-#: modules/process/fft_synth.c:418 modules/process/lat_synth.c:758
-#: modules/process/lno_synth.c:537 modules/process/noise_synth.c:437
-#: modules/process/obj_synth.c:579 modules/process/wave_synth.c:453
-msgid "_Like Current Channel"
-msgstr "Как _у текущего канала"
-
-#: modules/process/bdep_synth.c:453 modules/process/col_synth.c:541
-#: modules/process/diff_synth.c:562
+#: modules/process/domain_synth.c:514 modules/process/fbm_synth.c:411
+#: modules/process/fft_synth.c:418 modules/process/fibre_synth.c:544
+#: modules/process/lat_synth.c:758 modules/process/lno_synth.c:535
+#: modules/process/noise_synth.c:435 modules/process/obj_synth.c:577
+#: modules/process/phase_synth.c:302 modules/process/wave_synth.c:472
+msgid "_Like Current Image"
+msgstr "_Как у текущего изображения"
+
+#: modules/process/bdep_synth.c:453 modules/process/col_synth.c:542
+#: modules/process/diff_synth.c:561
msgid "Evolution"
msgstr "Эволюция"
-#: modules/process/bdep_synth.c:456 modules/process/col_synth.c:544
-#: modules/process/diff_synth.c:565
+#: modules/process/bdep_synth.c:456 modules/process/col_synth.c:545
+#: modules/process/diff_synth.c:564
msgid "Plot graphs:"
msgstr "Строить графики:"
-#: modules/process/bdep_synth.c:654 modules/process/col_synth.c:840
-#: modules/process/diff_synth.c:782
+#: modules/process/bdep_synth.c:654 modules/process/col_synth.c:841
+#: modules/process/diff_synth.c:781
msgid "Depositing particles..."
msgstr "Осаждаются частицы..."
@@ -7727,8 +8009,8 @@ msgstr "Загрузить данные калибровки"
msgid "Calibration name:"
msgstr "Имя калибровки:"
-#: modules/process/calcoefs_load.c:254 modules/volume/volume_extract.c:433
-#: modules/volume/volume_extract.c:514
+#: modules/process/calcoefs_load.c:254 modules/volume/volume_extract.c:421
+#: modules/volume/volume_extract.c:501
msgid "No data loaded"
msgstr "Данные не загружены"
@@ -7752,7 +8034,7 @@ msgstr "Добавить"
msgid "Load calibration data"
msgstr "Загрузить данные калибровки"
-#: modules/process/calcoefs_load.c:364 modules/volume/volume_extract.c:1073
+#: modules/process/calcoefs_load.c:364 modules/volume/volume_extract.c:1059
#, c-format
msgid "Error loading file '%s'"
msgstr "Ошибка загрузки файла '%s'"
@@ -7846,7 +8128,7 @@ msgstr "Простое картирование ошибок"
msgid "Simple Error Map"
msgstr "Простая карта ошибок"
-#: modules/process/calcoefs_simple.c:343 modules/process/calcoefs_stage.c:146
+#: modules/process/calcoefs_simple.c:343 modules/process/calcoefs_stage.c:142
#: modules/process/superresolution.c:156
msgid "Operands:"
msgstr "Операнды:"
@@ -7860,14 +8142,14 @@ msgid "Detail"
msgstr "Часть"
#: modules/process/calcoefs_simple.c:371 modules/process/calcoefs_view.c:491
-#: modules/process/calibrate.c:496 modules/process/crosscor.c:289
-#: modules/volume/volume_calibrate.c:478
+#: modules/process/calibrate.c:481 modules/process/crosscor.c:276
+#: modules/volume/volume_calibrate.c:460
msgid "_X offset:"
msgstr "Смещение по _X:"
#: modules/process/calcoefs_simple.c:398 modules/process/calcoefs_view.c:517
-#: modules/process/calibrate.c:509 modules/process/crosscor.c:300
-#: modules/volume/volume_calibrate.c:491
+#: modules/process/calibrate.c:488 modules/process/crosscor.c:284
+#: modules/volume/volume_calibrate.c:467
msgid "_Y offset:"
msgstr "Смещение по _Y:"
@@ -7880,7 +8162,7 @@ msgid "Y p_eriod:"
msgstr "Пе_риод Y:"
#: modules/process/calcoefs_simple.c:438 modules/process/calcoefs_view.c:529
-#: modules/volume/volume_calibrate.c:505
+#: modules/volume/volume_calibrate.c:474
msgid "_Z offset:"
msgstr "Смещение по _Z:"
@@ -7912,25 +8194,25 @@ msgstr[2] "найдено %d объектов"
msgid "Search canceled"
msgstr "Поиск отменён"
-#: modules/process/calcoefs_simple.c:638 modules/process/crosscor.c:862
-#: modules/process/maskcor.c:332 modules/process/mcrop.c:317
+#: modules/process/calcoefs_simple.c:638 modules/process/crosscor.c:835
+#: modules/process/maskcor.c:336 modules/process/mcrop.c:316
#: modules/process/merge.c:1074
msgid "Correlating..."
msgstr "Поиск корреляции..."
-#: modules/process/calcoefs_stage.c:76
+#: modules/process/calcoefs_stage.c:72
msgid "Digital AFM data recalibration"
msgstr "Перекалибровка данных цифровой АСМ"
-#: modules/process/calcoefs_stage.c:90
+#: modules/process/calcoefs_stage.c:86
msgid "/Cali_bration/_3D Calibration/_Get From Stage map..."
msgstr "/_Калибровка/_Трёхмерная/_Получить из карты сканера..."
-#: modules/process/calcoefs_stage.c:94
+#: modules/process/calcoefs_stage.c:90
msgid "Stage error mapping"
msgstr "Картирование ошибок основания"
-#: modules/process/calcoefs_stage.c:131
+#: modules/process/calcoefs_stage.c:127
msgid "Stage Error Map"
msgstr "Карта ошибок основания"
@@ -7986,14 +8268,16 @@ msgstr "Положение по Z:"
msgid "Crop to actual data"
msgstr "Обрезать до действительных данных"
-#: modules/process/calcoefs_view.c:567 modules/process/coerce.c:369
-#: modules/process/deposit_synth.c:641 modules/process/edge.c:705
-#: modules/process/fft_filter_1d.c:299 modules/process/grain_edge.c:290
-#: modules/process/grain_filter.c:347 modules/process/grain_mark.c:372
-#: modules/process/mark_with.c:318 modules/process/polydistort.c:316
-#: modules/process/scars.c:386 modules/process/slope_dist.c:407
-#: modules/process/synth.h:513 modules/volume/volume_extract.c:424
-#: modules/volume/volume_extract.c:505 modules/volume/volume_linestat.c:422
+#: modules/process/calcoefs_view.c:567 modules/process/coerce.c:368
+#: modules/process/deposit_synth.c:642 modules/process/edge.c:705
+#: modules/process/fft_filter_1d.c:301 modules/process/grain_edge.c:277
+#: modules/process/grain_filter.c:346 modules/process/grain_mark.c:357
+#: modules/process/mark_with.c:322 modules/process/mfm_field.c:420
+#: modules/process/mfm_shift.c:216 modules/process/polydistort.c:319
+#: modules/process/psf.c:309 modules/process/scars.c:421
+#: modules/process/slope_dist.c:400 modules/process/synth.h:542
+#: modules/volume/volume_extract.c:411 modules/volume/volume_extract.c:491
+#: modules/volume/volume_linestat.c:427
msgid "I_nstant updates"
msgstr "Мгновенное об_новление"
@@ -8034,27 +8318,27 @@ msgstr "Ошибка: вне диапазона."
msgid "Building mesh..."
msgstr "Строится сетка..."
-#: modules/process/calcoefs_view.c:1120 modules/tools/profile.c:1818
+#: modules/process/calcoefs_view.c:1120 modules/tools/profile.c:1867
msgid "X correction"
msgstr "Поправка по X"
-#: modules/process/calcoefs_view.c:1121 modules/tools/profile.c:1819
+#: modules/process/calcoefs_view.c:1121 modules/tools/profile.c:1868
msgid "Y correction"
msgstr "Поправка по Y"
-#: modules/process/calcoefs_view.c:1122 modules/tools/profile.c:1820
+#: modules/process/calcoefs_view.c:1122 modules/tools/profile.c:1869
msgid "Z correction"
msgstr "Поправка по Z"
-#: modules/process/calcoefs_view.c:1123 modules/tools/profile.c:1821
+#: modules/process/calcoefs_view.c:1123 modules/tools/profile.c:1870
msgid "X uncertainty"
msgstr "Погрешность X"
-#: modules/process/calcoefs_view.c:1124 modules/tools/profile.c:1822
+#: modules/process/calcoefs_view.c:1124 modules/tools/profile.c:1871
msgid "Y uncertainty"
msgstr "Погрешность Y"
-#: modules/process/calcoefs_view.c:1125 modules/tools/profile.c:1823
+#: modules/process/calcoefs_view.c:1125 modules/tools/profile.c:1872
msgid "Z uncertainty"
msgstr "Погрешность Z"
@@ -8082,80 +8366,80 @@ msgstr "Привязать к плоскостям"
msgid "Delaunay"
msgstr "Делоне"
-#: modules/process/calibrate.c:180
+#: modules/process/calibrate.c:172
msgid "Recalibrates scan lateral dimensions or value range."
msgstr ""
"Перекалибровывает горизонтальное разрешение скана или диапазон значений."
-#: modules/process/calibrate.c:194
+#: modules/process/calibrate.c:186
msgid "/_Basic Operations/_Dimensions and Units..."
msgstr "/_Базовые действия/Размеры и _единицы измерения..."
-#: modules/process/calibrate.c:198 modules/volume/volume_calibrate.c:193
+#: modules/process/calibrate.c:190 modules/volume/volume_calibrate.c:193
msgid "Change physical dimensions, units or value scale"
msgstr ""
"Изменить горизонтальное разрешение, единицы измерения или диапазон значений"
-#: modules/process/calibrate.c:357 modules/volume/volume_calibrate.c:355
+#: modules/process/calibrate.c:349 modules/volume/volume_calibrate.c:355
msgid "Recalibrated Data"
msgstr "Перекалиброванные данные"
-#: modules/process/calibrate.c:390
+#: modules/process/calibrate.c:382
msgid "Dimensions and Units"
msgstr "Размеры и единицы измерения"
-#: modules/process/calibrate.c:411 modules/volume/volume_calibrate.c:389
+#: modules/process/calibrate.c:405 modules/volume/volume_calibrate.c:391
msgid "New Real Dimensions"
msgstr "Новые реальные размеры"
-#: modules/process/calibrate.c:417
+#: modules/process/calibrate.c:415
msgid "_Match pixel size:"
msgstr "_Выровнять размер пикселя:"
-#: modules/process/calibrate.c:444 modules/volume/volume_calibrate.c:394
+#: modules/process/calibrate.c:447 modules/volume/volume_calibrate.c:397
msgid "_X range:"
msgstr "Диапазон _X:"
-#: modules/process/calibrate.c:473 modules/volume/volume_calibrate.c:421
+#: modules/process/calibrate.c:467 modules/volume/volume_calibrate.c:417
msgid "_Y range:"
msgstr "Диапазон _Y:"
-#: modules/process/calibrate.c:489
+#: modules/process/calibrate.c:472
msgid "_Square samples"
msgstr "_Квадратный образец"
-#: modules/process/calibrate.c:524 modules/volume/volume_calibrate.c:521
+#: modules/process/calibrate.c:496 modules/volume/volume_calibrate.c:480
msgid "Value Range"
msgstr "Диапазон значений"
-#: modules/process/calibrate.c:529 modules/volume/volume_calibrate.c:448
+#: modules/process/calibrate.c:502 modules/volume/volume_calibrate.c:437
msgid "_Z range:"
msgstr "Диапазон _Z:"
-#: modules/process/calibrate.c:558
+#: modules/process/calibrate.c:524
msgid "Z shi_ft:"
msgstr "С_двиг Z:"
-#: modules/process/calibrate.c:573 modules/volume/volume_calibrate.c:570
+#: modules/process/calibrate.c:533 modules/volume/volume_calibrate.c:515
msgid "Calibration Coefficients"
msgstr "Коэффициенты калибровки"
-#: modules/process/calibrate.c:580 modules/volume/volume_calibrate.c:577
+#: modules/process/calibrate.c:538 modules/volume/volume_calibrate.c:520
msgid "_X calibration factor:"
msgstr "Множитель калибровки по _X:"
-#: modules/process/calibrate.c:590 modules/volume/volume_calibrate.c:585
+#: modules/process/calibrate.c:545 modules/volume/volume_calibrate.c:527
msgid "_Y calibration factor:"
msgstr "Множитель калибровки по _Y:"
-#: modules/process/calibrate.c:600 modules/volume/volume_calibrate.c:593
+#: modules/process/calibrate.c:552 modules/volume/volume_calibrate.c:534
msgid "_Z calibration factor:"
msgstr "Множитель калибровки по _Z:"
-#: modules/process/calibrate.c:613 modules/process/extend.c:293
-#: modules/tools/crop.c:213
-msgid "Create new channel"
-msgstr "Создать новый канал"
+#: modules/process/calibrate.c:567 modules/process/drift.c:389
+#: modules/process/extend.c:293 modules/tools/crop.c:213
+msgid "Create new image"
+msgstr "Создать новое изображение"
#: modules/process/coerce.c:159
msgid "Transforms surfaces to have prescribed statistical properties."
@@ -8175,13 +8459,13 @@ msgid "Coerced"
msgstr "Заданное"
#: modules/process/coerce.c:225 modules/process/coerce.c:326
-#: modules/process/fbm_synth.c:475 modules/process/lno_synth.c:256
-#: modules/process/noise_synth.c:183
+#: modules/process/fbm_synth.c:474 modules/process/lno_synth.c:254
+#: modules/process/noise_synth.c:181
msgid "distribution|Uniform"
msgstr "Равномерное"
-#: modules/process/coerce.c:226 modules/process/fbm_synth.c:476
-#: modules/process/lno_synth.c:246 modules/process/noise_synth.c:173
+#: modules/process/coerce.c:226 modules/process/fbm_synth.c:475
+#: modules/process/lno_synth.c:244 modules/process/noise_synth.c:171
msgid "distribution|Gaussian"
msgstr "Гауссово"
@@ -8230,12 +8514,12 @@ msgid "Number of maxima"
msgstr "Число максимумов"
#: modules/process/col_synth.c:173 modules/tools/linestats.c:178
-#: modules/volume/volume_linestat.c:154
+#: modules/volume/volume_linestat.c:156
msgid "Skew"
msgstr "Асимметрия"
#: modules/process/col_synth.c:174 modules/tools/linestats.c:179
-#: modules/tools/roughness.c:386 modules/volume/volume_linestat.c:155
+#: modules/tools/roughness.c:387 modules/volume/volume_linestat.c:157
msgid "Kurtosis"
msgstr "Эксцесс"
@@ -8248,8 +8532,8 @@ msgid "Generates columnar surfaces by a simple growth algorithm."
msgstr "Создаёт столбчатые поверхности простым алгоритмом роста. "
#: modules/process/col_synth.c:208
-msgid "/S_ynthetic/_Columnar..."
-msgstr "/Син_тез/С_толбчатая..."
+msgid "/S_ynthetic/_Deposition/_Columnar..."
+msgstr "/Син_тез/_Осаждение/С_толбчатое..."
#: modules/process/col_synth.c:212
msgid "Generate columnar surface"
@@ -8271,7 +8555,7 @@ msgstr "Угол падения"
msgid "Inclination"
msgstr "Наклон"
-#: modules/process/col_synth.c:509 modules/process/crosscor.c:1063
+#: modules/process/col_synth.c:509 modules/process/crosscor.c:1036
msgid "Direction"
msgstr "Направление"
@@ -8279,15 +8563,15 @@ msgstr "Направление"
msgid "Relaxation type:"
msgstr "Тип релаксации:"
-#: modules/process/col_synth.c:528
+#: modules/process/col_synth.c:529
msgid "_Melting:"
msgstr "_Плавление:"
-#: modules/process/col_synth.c:612
+#: modules/process/col_synth.c:613
msgid "Weak"
msgstr "Слабая"
-#: modules/process/col_synth.c:613
+#: modules/process/col_synth.c:614
msgid "Strong"
msgstr "Сильная"
@@ -8319,8 +8603,8 @@ msgstr "Общий фильтр свёртки"
msgid "Convolution Filter"
msgstr "Фильтр свёртки"
-#: modules/process/convolution_filter.c:269 modules/tools/filter.c:170
-#: modules/tools/filter.c:274
+#: modules/process/convolution_filter.c:269 modules/tools/filter.c:171
+#: modules/tools/filter.c:275
msgid "Filter"
msgstr "Фильтр"
@@ -8348,7 +8632,7 @@ msgstr "ГСим"
msgid "VSym"
msgstr "ВСим"
-#: modules/process/correct_affine.c:231
+#: modules/process/correct_affine.c:220
msgid ""
"Corrects affine distortion of images by matching image Bravais lattice to "
"the true one."
@@ -8356,101 +8640,109 @@ msgstr ""
"Исправляет аффинные искажения изображений путём сравнения решетки Браве "
"изображения с реальной."
-#: modules/process/correct_affine.c:246
+#: modules/process/correct_affine.c:235
msgid "/_Distortion/_Affine..."
msgstr "/_Искажение/_Аффинное..."
-#: modules/process/correct_affine.c:250
+#: modules/process/correct_affine.c:239
msgid "Correct affine distortion"
msgstr "Исправить аффинное искажение"
-#: modules/process/correct_affine.c:298
+#: modules/process/correct_affine.c:309 modules/process/correct_affine.c:634
+msgid "Corrected"
+msgstr "Исправленное"
+
+#: modules/process/correct_affine.c:343
msgid "Affine Correction"
msgstr "Аффинная коррекция"
-#: modules/process/correct_affine.c:351 modules/process/fft_filter_2d.c:530
+#: modules/process/correct_affine.c:349 modules/process/measure_lattice.c:249
+msgid "_Refine"
+msgstr "_Уточнить"
+
+#: modules/process/correct_affine.c:399 modules/process/fft_filter_2d.c:530
msgid "Preview Options"
msgstr "Параметры предпросмотра"
-#: modules/process/correct_affine.c:356 modules/process/fft_filter_2d.c:535
-#: modules/process/measure_lattice.c:321
+#: modules/process/correct_affine.c:404 modules/process/fft_filter_2d.c:535
+#: modules/process/measure_lattice.c:311
msgid "Display:"
msgstr "Показать:"
-#: modules/process/correct_affine.c:364 modules/process/measure_lattice.c:329
+#: modules/process/correct_affine.c:412 modules/process/measure_lattice.c:319
#: modules/tools/grainremover.c:109
msgid "_Data"
msgstr "Да_нные"
-#: modules/process/correct_affine.c:365
+#: modules/process/correct_affine.c:413
msgid "2D _ACF"
msgstr "2D _ACF"
-#: modules/process/correct_affine.c:366 modules/process/drift.c:365
+#: modules/process/correct_affine.c:414 modules/process/drift.c:364
msgid "Correc_ted data"
msgstr "Ис_правленные данные"
-#: modules/process/correct_affine.c:377
+#: modules/process/correct_affine.c:425
msgid "ACF zoom:"
msgstr "Увеличение АКФ:"
-#: modules/process/correct_affine.c:394 modules/process/measure_lattice.c:372
+#: modules/process/correct_affine.c:442 modules/process/measure_lattice.c:346
+msgid "Interpolate _horizontal ACF"
+msgstr "Интерполировать _горизонтальную АКФ"
+
+#: modules/process/correct_affine.c:452 modules/process/measure_lattice.c:372
msgid "Lattice Vectors"
msgstr "Векторы решетки"
#. TRANSLATORS: Correct is an adjective here.
-#: modules/process/correct_affine.c:419
+#: modules/process/correct_affine.c:469
msgid "Correct Lattice"
msgstr "Исправить решетку"
-#: modules/process/correct_affine.c:423
+#: modules/process/correct_affine.c:473
msgid "_Lattice type:"
msgstr "Тип _решетки:"
-#: modules/process/correct_affine.c:430
+#: modules/process/correct_affine.c:480
msgid "User defined"
msgstr "Пользовательская"
-#: modules/process/correct_affine.c:445
+#: modules/process/correct_affine.c:495
msgid "_Different lengths"
msgstr "_Различные длины"
-#: modules/process/correct_affine.c:474
+#: modules/process/correct_affine.c:524
msgid "Image for _ACF:"
msgstr "Изображение для _АКФ:"
-#: modules/process/correct_affine.c:501
+#: modules/process/correct_affine.c:551
msgid "_Scaling:"
msgstr "_Масштаб:"
-#: modules/process/correct_affine.c:508
+#: modules/process/correct_affine.c:558
msgid "Exactly as specified"
msgstr "Точно как задано"
-#: modules/process/correct_affine.c:509
+#: modules/process/correct_affine.c:560
msgid "Preserve area"
msgstr "Сохранять площадь"
-#: modules/process/correct_affine.c:510
+#: modules/process/correct_affine.c:562
msgid "Preserve X scale"
msgstr "Сохранять масштаб X"
-#: modules/process/correct_affine.c:561
-msgid "Corrected"
-msgstr "Исправленное"
+#: modules/process/correct_affine.c:571 modules/process/drift.c:379
+msgid "_Apply to all compatible images"
+msgstr "Применить для _всех совместимых изображений"
-#: modules/process/correct_affine.c:617 modules/process/measure_lattice.c:489
+#: modules/process/correct_affine.c:693 modules/process/measure_lattice.c:482
msgid "length"
msgstr "длина"
-#: modules/process/correct_affine.c:624 modules/process/measure_lattice.c:496
+#: modules/process/correct_affine.c:700 modules/process/measure_lattice.c:489
msgid "angle"
msgstr "угол"
-#: modules/process/correct_affine.c:717
-msgid "Re_fine"
-msgstr "_Уточнить"
-
#: modules/process/crosscor.c:157
msgid "Calculates cross-correlation of two data fields."
msgstr "Вычисляет взаимную корреляцию двух полей данных."
@@ -8475,150 +8767,152 @@ msgstr "Ко_ррелировать с:"
msgid "Search size"
msgstr "Размер поиска"
-#: modules/process/crosscor.c:272
-msgid "Global offset of 2nd channel"
-msgstr "Общее смещение второго канала"
-
-#: modules/process/crosscor.c:277
+#: modules/process/crosscor.c:267
msgid "_Guess"
msgstr "_Угадать"
-#: modules/process/crosscor.c:311
+#: modules/process/crosscor.c:268
+msgid "Global offset of 2nd channel"
+msgstr "Общее смещение второго канала"
+
+#: modules/process/crosscor.c:292
msgid "Window size"
msgstr "Размер окна"
-#: modules/process/crosscor.c:319
+#: modules/process/crosscor.c:300
msgid "W_idth:"
msgstr "Ш_ирина:"
-#: modules/process/crosscor.c:329
+#: modules/process/crosscor.c:308
msgid "Hei_ght:"
msgstr "В_ысота:"
-#: modules/process/crosscor.c:342 modules/process/fft.c:405
+#: modules/process/crosscor.c:319 modules/process/fft.c:403
#: modules/process/psdf_logphi.c:268
msgid "_Windowing type:"
msgstr "Тип о_кна:"
-#: modules/process/crosscor.c:350
+#: modules/process/crosscor.c:327
msgid "All"
msgstr "Всё"
-#: modules/process/crosscor.c:351
+#: modules/process/crosscor.c:328
msgid "Absolute"
msgstr "Модуль"
-#: modules/process/crosscor.c:352
+#: modules/process/crosscor.c:329
msgid "X Distance"
msgstr "Расстояние по X"
-#: modules/process/crosscor.c:353
+#: modules/process/crosscor.c:330
msgid "Y Distance"
msgstr "Расстояние по Y"
-#: modules/process/crosscor.c:355 modules/process/crosscor.c:1077
+#: modules/process/crosscor.c:332 modules/process/crosscor.c:1050
msgid "Score"
msgstr "Степень"
-#: modules/process/crosscor.c:357 modules/process/fft.c:395
-#: modules/process/fit-shape.c:688 modules/process/maskcor.c:176
+#: modules/process/crosscor.c:334 modules/process/fft.c:393
+#: modules/process/fit-shape.c:699 modules/process/maskcor.c:177
+#: modules/process/mfm_current.c:455 modules/process/mfm_field.c:373
+#: modules/process/mfm_parallel.c:466
msgid "Output _type:"
msgstr "Тип в_ывода:"
-#: modules/process/crosscor.c:363
+#: modules/process/crosscor.c:340
msgid "Add _low score results mask"
msgstr "Добавить маску результатов с _низким весом"
-#: modules/process/crosscor.c:374 modules/process/grain_wshed.c:223
-#: modules/process/maskcor.c:188
+#: modules/process/crosscor.c:351 modules/process/grain_wshed.c:225
+#: modules/process/maskcor.c:191
msgid "T_hreshold:"
msgstr "_Порог:"
-#: modules/process/crosscor.c:381
+#: modules/process/crosscor.c:359
msgid "Multichannel cross-corelation"
msgstr "Взаимная корреляция нескольких каналов"
-#: modules/process/crosscor.c:400
+#: modules/process/crosscor.c:378
msgid "Second _source data:"
msgstr "Данные второго _источника:"
-#: modules/process/crosscor.c:417
+#: modules/process/crosscor.c:394
msgid "Correlate with:"
msgstr "Коррелировать с:"
-#: modules/process/crosscor.c:424
+#: modules/process/crosscor.c:402
msgid "Postprocess:"
msgstr "Постобработка:"
-#: modules/process/crosscor.c:431
-msgid "Apply Ga_ussian filter of width: "
-msgstr "Применить г-ауссов фильтр шириной:"
+#: modules/process/crosscor.c:411
+msgid "Apply Ga_ussian filter of width:"
+msgstr "Применить га_уссов фильтр шириной:"
-#: modules/process/crosscor.c:451
+#: modules/process/crosscor.c:424
msgid "Extend results to borders"
msgstr "Расширить результат до границ"
-#: modules/process/crosscor.c:461
+#: modules/process/crosscor.c:433
msgid "Create corrected data from 2nd channel"
msgstr "Создать исправленные данные из второго канала"
-#: modules/process/crosscor.c:860
+#: modules/process/crosscor.c:833
msgid "Correlating first set..."
msgstr "Корреляция первого множества..."
-#: modules/process/crosscor.c:892
+#: modules/process/crosscor.c:865
msgid "Correlating second set..."
msgstr "Корреляция второго множества..."
-#: modules/process/crosscor.c:999
+#: modules/process/crosscor.c:972
msgid "Corrected 2nd channel"
msgstr "Исправленный второй канал"
-#: modules/process/crosscor.c:1023
+#: modules/process/crosscor.c:996
msgid "X difference"
msgstr "Различие X"
-#: modules/process/crosscor.c:1037
+#: modules/process/crosscor.c:1010
msgid "Y difference"
msgstr "Различие Y"
-#: modules/process/crosscor.c:1050
+#: modules/process/crosscor.c:1023
msgid "Absolute difference"
msgstr "Разница по модулю"
-#: modules/process/curvature.c:131
+#: modules/process/curvature.c:130
msgid "Center value"
msgstr "Значение центра"
-#: modules/process/curvature.c:132
+#: modules/process/curvature.c:131
msgid "Curvature radius 1"
msgstr "Радиус кривизны 1"
-#: modules/process/curvature.c:133
+#: modules/process/curvature.c:132
msgid "Curvature radius 2"
msgstr "Радиус кривизны 2"
-#: modules/process/curvature.c:134
+#: modules/process/curvature.c:133
msgid "Direction 1"
msgstr "Направление 1"
-#: modules/process/curvature.c:135
+#: modules/process/curvature.c:134
msgid "Direction 2"
msgstr "Направление 2"
-#: modules/process/curvature.c:163
+#: modules/process/curvature.c:162
msgid "Calculates overall curvature."
msgstr "Рассчитывает общую кривизну."
-#: modules/process/curvature.c:177
+#: modules/process/curvature.c:176
msgid "/_Level/_Curvature..."
msgstr "/_Выравнивание/_Кривизна..."
-#: modules/process/curvature.c:181
+#: modules/process/curvature.c:180
msgid "Calculate overall curvature"
msgstr "Рассчитать общую кривизну"
-#: modules/process/curvature.c:211 modules/process/facet-level.c:118
+#: modules/process/curvature.c:210 modules/process/facet-level.c:118
#: modules/process/semsim.c:165
#, c-format
msgid "%s: Lateral dimensions and value must be the same physical quantity."
@@ -8626,47 +8920,47 @@ msgstr ""
"%s: горизонтальные размеры и значения данных должны быть одной физической "
"величиной."
-#: modules/process/curvature.c:445
+#: modules/process/curvature.c:447
msgid "Curvature Sections"
msgstr "Сечения кривизны"
-#: modules/process/curvature.c:653
+#: modules/process/curvature.c:655
msgid "Output Type"
msgstr "Тип вывода"
-#: modules/process/curvature.c:660
+#: modules/process/curvature.c:662
msgid "_Set selection"
msgstr "_Установить выделение"
-#: modules/process/curvature.c:670
+#: modules/process/curvature.c:672
msgid "_Plot graph"
msgstr "Строить _график"
-#: modules/process/curvature.c:685 modules/process/drift.c:337
-#: modules/process/fft_profile.c:310 modules/process/fractal.c:328
-#: modules/process/grain_cross.c:253 modules/process/linematch.c:885
-#: modules/process/slope_dist.c:349 modules/tools/linestats.c:418
-#: modules/tools/profile.c:573 modules/tools/roughness.c:872
-#: modules/tools/sfunctions.c:486 modules/tools/spectro.c:382
-#: modules/volume/volume_slice.c:398
-msgid "Target _graph:"
-msgstr "Добавить к _графику:"
-
-#: modules/process/curvature.c:691 modules/process/drift.c:343
-#: modules/process/fft_profile.c:316 modules/process/fractal.c:334
-#: modules/process/grain_cross.c:259 modules/process/linematch.c:892
-#: modules/process/slope_dist.c:355 modules/tools/linestats.c:424
-#: modules/tools/profile.c:579 modules/tools/roughness.c:878
-#: modules/tools/sfunctions.c:492 modules/tools/spectro.c:388
-#: modules/volume/volume_slice.c:406
+#: modules/process/curvature.c:684 modules/process/drift.c:340
+#: modules/process/fft_profile.c:300 modules/process/fractal.c:308
+#: modules/process/grain_cross.c:260 modules/process/linematch.c:855
+#: modules/process/slope_dist.c:347 modules/tools/linestats.c:424
+#: modules/tools/profile.c:559 modules/tools/roughness.c:886
+#: modules/tools/sfunctions.c:488 modules/tools/spectro.c:391
+#: modules/volume/volume_slice.c:408
msgid "New graph"
msgstr "Новый график"
-#: modules/process/curvature.c:951
+#: modules/process/curvature.c:689 modules/process/drift.c:345
+#: modules/process/fft_profile.c:306 modules/process/fractal.c:313
+#: modules/process/grain_cross.c:254 modules/process/linematch.c:860
+#: modules/process/slope_dist.c:352 modules/tools/linestats.c:418
+#: modules/tools/profile.c:563 modules/tools/roughness.c:890
+#: modules/tools/sfunctions.c:492 modules/tools/spectro.c:385
+#: modules/volume/volume_slice.c:400
+msgid "Target _graph:"
+msgstr "Добавить к _графику:"
+
+#: modules/process/curvature.c:949
msgid "Axes are outside the image."
msgstr "Оси снаружи изображения."
-#: modules/process/curvature.c:1018
+#: modules/process/curvature.c:1016
msgid "Save Curvature"
msgstr "Сохранить кривизну"
@@ -8690,8 +8984,8 @@ msgstr "CWT"
msgid "2D CWT"
msgstr "2D CWT"
-#: modules/process/cwt.c:158 modules/process/dwt.c:185
-#: modules/process/dwtanisotropy.c:209
+#: modules/process/cwt.c:159 modules/process/dwt.c:185
+#: modules/process/dwtanisotropy.c:212
msgid "_Wavelet type:"
msgstr "Тип _вейвлета:"
@@ -8700,14 +8994,14 @@ msgid "Generates particles using simple dynamical model"
msgstr "Создаёт частицы используя простую динамическую модель"
#: modules/process/deposit_synth.c:184
-msgid "/S_ynthetic/_Particles..."
-msgstr "/Син_тез/_Частицы..."
+msgid "/S_ynthetic/_Deposition/_Particles..."
+msgstr "/Син_тез/_Осаждение/_Частиц..."
#: modules/process/deposit_synth.c:188
msgid "Generate particles using dynamical model"
msgstr "Создать частицы используя динамическую модель"
-#: modules/process/deposit_synth.c:288 modules/process/deposit_synth.c:867
+#: modules/process/deposit_synth.c:288 modules/process/deposit_synth.c:866
#, c-format
msgid ""
"Not all the particles could be deposited (%u),\n"
@@ -8716,73 +9010,69 @@ msgstr ""
"Не все частицы могут быть осаждены (%u),\n"
"попробуйте добавить шагов уточнения"
-#: modules/process/deposit_synth.c:347
+#: modules/process/deposit_synth.c:348
msgid "Particle Generation"
msgstr "Генерация частиц"
-#: modules/process/deposit_synth.c:427
+#: modules/process/deposit_synth.c:431
msgid "Particle r_adius:"
msgstr "Радиус _частицы:"
-#: modules/process/deposit_synth.c:438
+#: modules/process/deposit_synth.c:443
msgid "Distribution _width:"
msgstr "Ширина _распределения:"
-#: modules/process/deposit_synth.c:449
-msgid "Surface _coverage:"
-msgstr "По_крытие поверхности:"
-
-#: modules/process/deposit_synth.c:458
+#: modules/process/deposit_synth.c:462
msgid "_Relax steps:"
msgstr "Шагов р_елаксации:"
-#: modules/process/deposit_synth.c:659 modules/process/synth.h:548
+#: modules/process/deposit_synth.c:660 modules/process/synth.h:577
msgid "R_andom seed:"
msgstr "На_чальное число:"
-#: modules/process/deposit_synth.c:665 modules/process/synth.h:554
+#: modules/process/deposit_synth.c:666 modules/process/synth.h:583
msgid "seed|_New"
msgstr "Ново_е"
-#: modules/process/deposit_synth.c:676
+#: modules/process/deposit_synth.c:677
msgid "Randomize"
msgstr "Сделать случайным"
-#: modules/process/deposit_synth.c:860 modules/process/domain_synth.c:919
+#: modules/process/deposit_synth.c:859 modules/process/domain_synth.c:919
msgid "Running computation..."
msgstr "Проведение вычислений..."
-#: modules/process/deposit_synth.c:865
+#: modules/process/deposit_synth.c:864
#, c-format
msgid "%d particles were deposited"
msgstr "было осаждено %d частиц"
-#: modules/process/deposit_synth.c:1093
+#: modules/process/deposit_synth.c:1092
msgid "Initial particle set..."
msgstr "Начальная расстановка частиц..."
-#: modules/process/deposit_synth.c:1252
+#: modules/process/deposit_synth.c:1251
msgid "Running revise..."
msgstr "Проводится уточнение..."
-#: modules/process/deposit_synth.c:1380
+#: modules/process/deposit_synth.c:1379
msgid "Error: too many particles."
msgstr "Ошибка: слишком много частиц."
-#: modules/process/deposit_synth.c:1382
+#: modules/process/deposit_synth.c:1381
msgid "Error: no particles."
msgstr "Ошибка: нет частиц."
-#: modules/process/deposit_synth.c:1384
+#: modules/process/deposit_synth.c:1383
msgid "Error: particles too large."
msgstr "Ошибка: частицы слишком большие."
-#: modules/process/deposit_synth.c:1386
+#: modules/process/deposit_synth.c:1385
msgid "Error: particles too small."
msgstr "Ошибка: частицы слишком маленькие."
#: modules/process/diff_synth.c:197 modules/tools/linestats.c:173
-#: modules/volume/volume_linestat.c:149
+#: modules/volume/volume_linestat.c:151
msgid "Variation"
msgstr "Вариация"
@@ -8795,8 +9085,8 @@ msgid "Generates surfaces by diffusion limited aggregation."
msgstr "Создаёт поверхность с помощью агрегации, ограниченной диффузией"
#: modules/process/diff_synth.c:228
-msgid "/S_ynthetic/_Diffusion..."
-msgstr "/Син_тез/Ди_ффузия..."
+msgid "/S_ynthetic/_Deposition/_Diffusion..."
+msgstr "/Син_тез/_Осаждение/Ди_ффузия..."
#: modules/process/diff_synth.c:232
msgid "Generate surface by diffusion limited aggregation"
@@ -8810,45 +9100,45 @@ msgstr "Агрегация, ограниченная диффузией"
msgid "_Flux:"
msgstr "_Поток:"
-#: modules/process/diff_synth.c:522
+#: modules/process/diff_synth.c:521
msgid "Probabilities"
msgstr "Вероятности"
-#: modules/process/diff_synth.c:530
+#: modules/process/diff_synth.c:529
msgid "_Sticking:"
msgstr "_Прилипания:"
-#: modules/process/diff_synth.c:539
+#: modules/process/diff_synth.c:538
msgid "_Activation:"
msgstr "_Активации:"
-#: modules/process/diff_synth.c:548
+#: modules/process/diff_synth.c:547
msgid "Passing Sch_woebel:"
msgstr "Прохождения _Швёбеля:"
-#: modules/process/dimensions.h:457
+#: modules/process/dimensions.h:439
msgid "S_quare image"
msgstr "_Квадратное изображение"
-#: modules/process/dimensions.h:489
+#: modules/process/dimensions.h:473
msgid "_Dimension units:"
msgstr "Единицы измерения _размера:"
-#: modules/process/dimensions.h:502
-msgid "Current Channel"
-msgstr "Текущий канал"
+#: modules/process/dimensions.h:488
+msgid "Current Image"
+msgstr "Текущее изображение"
-#: modules/process/dimensions.h:506
-msgid "_Take Dimensions from Current Channel"
-msgstr "Взять _размеры текущего канала"
+#: modules/process/dimensions.h:492
+msgid "_Take Dimensions from Current Image"
+msgstr "Взять _размеры текущего изображения"
-#: modules/process/dimensions.h:514
-msgid "_Replace the current channel"
-msgstr "За_менить текущий канал"
+#: modules/process/dimensions.h:501
+msgid "_Replace the current image"
+msgstr "За_менить текущее изображение"
-#: modules/process/dimensions.h:523
-msgid "_Start from the current channel"
-msgstr "Н_ачать с текущего канала"
+#: modules/process/dimensions.h:510
+msgid "_Start from the current image"
+msgstr "Н_ачать с текущего изображения"
#: modules/process/domain_synth.c:158
msgid "Discrete state"
@@ -8907,13 +9197,13 @@ msgid "_Monte Carlo time step:"
msgstr "Временной шаг метода _Монте-Карло:"
#: modules/process/domain_synth.c:504 modules/process/fft_filter_2d.c:586
-#: modules/volume/volume_slice.c:364
+#: modules/volume/volume_slice.c:366
msgid "Output Options"
msgstr "Параметры вывода"
#: modules/process/domain_synth.c:523 modules/process/fft_filter_2d.c:591
-#: modules/process/mask_edt.c:377 modules/process/slope_dist.c:323
-#: modules/volume/volume_linestat.c:432 modules/volume/volume_slice.c:384
+#: modules/process/mask_edt.c:211 modules/process/slope_dist.c:323
+#: modules/volume/volume_linestat.c:437 modules/volume/volume_slice.c:386
msgid "Output type:"
msgstr "Тип вывода:"
@@ -8943,57 +9233,49 @@ msgstr "Ди_апазон поиска:"
msgid "rows"
msgstr "строк(и)"
-#: modules/process/drift.c:304
+#: modules/process/drift.c:305
msgid "Correct _data"
msgstr "Исправить _данные"
-#: modules/process/drift.c:314
+#: modules/process/drift.c:315
msgid "_Exclude linear skew"
msgstr "_Исключить линейный уклон"
-#: modules/process/drift.c:324
+#: modules/process/drift.c:325
msgid "Plot drift _graph"
msgstr "Строить _график дрейфа"
-#: modules/process/drift.c:356 modules/process/fit-shape.c:693
-#: modules/process/neural.c:548 modules/process/polydistort.c:275
+#: modules/process/drift.c:355 modules/process/fit-shape.c:705
+#: modules/process/neural.c:552 modules/process/polydistort.c:278
msgid "Preview:"
msgstr "Предпросмотр:"
-#: modules/process/drift.c:366
+#: modules/process/drift.c:365
msgid "Drift _lines"
msgstr "_Линии дрейфа"
-#: modules/process/drift.c:374 modules/process/facet_analysis.c:407
-#: modules/process/grain_edge.c:285 modules/process/grain_filter.c:357
-#: modules/process/grain_mark.c:367 modules/process/grain_wshed.c:267
-#: modules/process/mark_disconn.c:310 modules/process/scars.c:381
+#: modules/process/drift.c:373 modules/process/facet_analysis.c:390
+#: modules/process/grain_edge.c:272 modules/process/grain_filter.c:356
+#: modules/process/grain_mark.c:341 modules/process/grain_wshed.c:271
+#: modules/process/mark_disconn.c:298 modules/process/scars.c:405
#: modules/process/wpour_mark.c:369
msgid "_Mask color:"
msgstr "_Цвет маски:"
-#: modules/process/drift.c:379
-msgid "Distribute"
-msgstr "Распространить"
-
-#: modules/process/drift.c:388
-msgid "Replace"
-msgstr "Заменить"
-
-#: modules/process/drift.c:569
+#: modules/process/drift.c:570
msgid "Drift-corrected"
msgstr "С исправленным дрейфом"
-#: modules/process/drift.c:613
+#: modules/process/drift.c:614
msgid "Drift"
msgstr "Дрейф"
-#: modules/process/drift.c:614 modules/xyz/xyz_drift.c:392
+#: modules/process/drift.c:615 modules/xyz/xyz_drift.c:392
#: modules/xyz/xyz_drift.c:411 modules/xyz/xyz_drift.c:430
msgid "drift"
msgstr "дрейф"
-#: modules/process/drift.c:620 modules/xyz/xyz_drift.c:402
+#: modules/process/drift.c:621 modules/xyz/xyz_drift.c:402
msgid "x-axis drift"
msgstr "дрейф оси x"
@@ -9051,11 +9333,11 @@ msgstr "Анизотропия DWT"
msgid "2D DWT Anisotropy"
msgstr "Анизотропия 2D DWT"
-#: modules/process/dwtanisotropy.c:214
+#: modules/process/dwtanisotropy.c:218
msgid "X/Y ratio threshold:"
msgstr "Порог отношения X/Y:"
-#: modules/process/dwtanisotropy.c:222
+#: modules/process/dwtanisotropy.c:226
msgid "Low level exclude limit:"
msgstr "Предел исключения низкого уровня:"
@@ -9187,7 +9469,7 @@ msgstr "Обнаружение ступени по пересечению нул
msgid "_Gaussian FWHM:"
msgstr "Ширина на половине высоты _гауссиан:"
-#: modules/process/edge.c:681 modules/process/mark_disconn.c:271
+#: modules/process/edge.c:681 modules/process/mark_disconn.c:272
msgid "_Threshold:"
msgstr "_Пороговое значение:"
@@ -9252,11 +9534,11 @@ msgstr "Энтропия:"
msgid "Entropy deficit:"
msgstr "Дефицит энтропии:"
-#: modules/process/entropy.c:567
+#: modules/process/entropy.c:568
msgid "Entropy at scales"
msgstr "Энтропия при разных масштабах"
-#: modules/process/entropy.c:586
+#: modules/process/entropy.c:587
msgid "Best estimate"
msgstr "Лучшая оценка"
@@ -9304,23 +9586,23 @@ msgstr "С_права:"
msgid "Extend _symetrically"
msgstr "Расширить си_мметрично"
-#: modules/process/extend.c:268 modules/process/polydistort.c:256
-#: modules/xyz/xyz_raster.c:658
+#: modules/process/extend.c:268 modules/process/polydistort.c:259
+#: modules/xyz/xyz_raster.c:627
msgid "exterior|Border"
msgstr "Граница"
-#: modules/process/extend.c:270 modules/process/polydistort.c:258
-#: modules/xyz/xyz_raster.c:660
+#: modules/process/extend.c:270 modules/process/polydistort.c:261
+#: modules/xyz/xyz_raster.c:629
msgid "exterior|Mirror"
msgstr "Зеркальная"
-#: modules/process/extend.c:272 modules/process/polydistort.c:260
-#: modules/xyz/xyz_raster.c:662
+#: modules/process/extend.c:272 modules/process/polydistort.c:263
+#: modules/xyz/xyz_raster.c:631
msgid "exterior|Periodic"
msgstr "Периодический"
-#: modules/process/extend.c:275 modules/process/polydistort.c:263
-#: modules/xyz/xyz_raster.c:650
+#: modules/process/extend.c:275 modules/process/polydistort.c:266
+#: modules/xyz/xyz_raster.c:619
msgid "_Exterior type:"
msgstr "Тип _внешней части:"
@@ -9352,11 +9634,11 @@ msgstr "Количество точек пути:"
msgid "There is no path selection."
msgstr "Выбранный путь отсутствует."
-#: modules/process/extract_path.c:189 modules/volume/volume_extract.c:390
+#: modules/process/extract_path.c:189 modules/volume/volume_extract.c:383
msgid "X position"
msgstr "Положение по X"
-#: modules/process/extract_path.c:193 modules/volume/volume_extract.c:397
+#: modules/process/extract_path.c:193 modules/volume/volume_extract.c:389
msgid "Y position"
msgstr "Положение по Y"
@@ -9369,7 +9651,7 @@ msgid "Y tangent"
msgstr "Касательная по Y"
#: modules/process/extract_path.c:392 modules/process/extract_path.c:404
-#: modules/process/pat_synth.c:1432 modules/tools/distance.c:146
+#: modules/process/pat_synth.c:1433 modules/tools/distance.c:146
msgid "Distance"
msgstr "Расстояние"
@@ -9413,47 +9695,36 @@ msgstr "/_Статистика/Анализ _граней..."
msgid "Mark areas by 2D slope"
msgstr "Пометить области по двумерному наклону"
-#: modules/process/facet_analysis.c:266
+#: modules/process/facet_analysis.c:270
msgid "Mark Facets"
msgstr "Пометить грани"
-#: modules/process/facet_analysis.c:269
+#: modules/process/facet_analysis.c:273
msgid "verb|_Mark"
msgstr "_Пометить"
#. TRANSLATORS: The direction or line orthogonal to something.
-#: modules/process/facet_analysis.c:325
+#: modules/process/facet_analysis.c:329
msgid "Normal"
msgstr "Нормаль"
-#: modules/process/facet_analysis.c:333
+#: modules/process/facet_analysis.c:337
msgid "_Find Maximum"
msgstr "_Найти максимум"
-#: modules/process/facet_analysis.c:341
+#: modules/process/facet_analysis.c:345
msgid "Mean Normal"
msgstr "Средняя нормаль"
-#: modules/process/facet_analysis.c:350
+#: modules/process/facet_analysis.c:362
msgid "Facet plane size:"
msgstr "Площадь поверхности грани:"
-#: modules/process/facet_analysis.c:375
+#: modules/process/facet_analysis.c:370
msgid "_Tolerance:"
msgstr "_Допуск"
-#: modules/process/facet_analysis.c:384 modules/process/grain_edge.c:262
-#: modules/process/grain_mark.c:344 modules/process/mark_disconn.c:286
-msgid "Com_bine with existing mask"
-msgstr "О_бъединить с имеющейся маской"
-
-#: modules/process/facet_analysis.c:398 modules/process/grain_edge.c:276
-#: modules/process/grain_mark.c:358 modules/process/mark_disconn.c:301
-#: modules/process/mark_with.c:230 modules/process/mask_morph.c:210
-msgid "Operation:"
-msgstr "Операция:"
-
-#: modules/process/facet_analysis.c:415
+#: modules/process/facet_analysis.c:398
msgid ""
"Warning: Lateral and value units differ. Angles are not physically "
"meaningful."
@@ -9486,8 +9757,8 @@ msgstr "Экспонента _Хёрста:"
msgid "_Stationarity scale:"
msgstr "Масштаб _стационарности:"
-#: modules/process/fbm_synth.c:390 modules/process/lno_synth.c:509
-#: modules/process/noise_synth.c:409
+#: modules/process/fbm_synth.c:390 modules/process/lno_synth.c:507
+#: modules/process/noise_synth.c:407
msgid "_Distribution:"
msgstr "_Распределение:"
@@ -9495,17 +9766,17 @@ msgstr "_Распределение:"
msgid "Po_wer:"
msgstr "С_тепень:"
-#: modules/process/fbm_synth.c:408 modules/process/fft_synth.c:414
-#: modules/process/lno_synth.c:533 modules/process/noise_synth.c:433
+#: modules/process/fbm_synth.c:407 modules/process/fft_synth.c:414
+#: modules/process/lno_synth.c:531 modules/process/noise_synth.c:431
msgid "_RMS:"
msgstr "Ср. _квадр.:"
-#: modules/process/fbm_synth.c:477 modules/process/lno_synth.c:251
-#: modules/process/noise_synth.c:178
+#: modules/process/fbm_synth.c:476 modules/process/lno_synth.c:249
+#: modules/process/noise_synth.c:176
msgid "distribution|Exponential"
msgstr "Экспоненциальное"
-#: modules/process/fbm_synth.c:478
+#: modules/process/fbm_synth.c:477
msgid "distribution|Power"
msgstr "Степенное"
@@ -9557,7 +9828,7 @@ msgstr "Мнимое"
msgid "Modulus"
msgstr "Абсолютная величина: "
-#: modules/process/fft.c:327 modules/process/wave_synth.c:583
+#: modules/process/fft.c:327 modules/process/wave_synth.c:618
msgid "Phase"
msgstr "Фаза"
@@ -9573,63 +9844,63 @@ msgstr "Необработанное преобразование "
msgid "I_maginary part:"
msgstr "_Мнимая часть:"
-#: modules/process/fft.c:382
+#: modules/process/fft.c:380
msgid "_Inverse transform"
msgstr "_Обратное преобразование"
-#: modules/process/fft.c:411
+#: modules/process/fft.c:409
msgid "Subtract mean _value beforehand"
msgstr "Сначала вычесть среднее _значение"
-#: modules/process/fft.c:422
+#: modules/process/fft.c:420
msgid "_Preserve RMS"
msgstr "Со_хранять среднеквадратичное отклонение"
-#: modules/process/fft_filter_1d.c:117
+#: modules/process/fft_filter_1d.c:118
msgid "FFT filtering"
msgstr "Фильтрация БПФ"
-#: modules/process/fft_filter_1d.c:131
+#: modules/process/fft_filter_1d.c:132
msgid "/_Correct Data/1D _FFT Filtering..."
msgstr "/Исправить _данные/Одномерная фильтрация Б_ПФ..."
-#: modules/process/fft_filter_1d.c:135
+#: modules/process/fft_filter_1d.c:136
msgid "1D FFT Filtering"
msgstr "Одномерная фильтрация БПФ"
-#: modules/process/fft_filter_1d.c:165 modules/process/wpour_mark.c:391
+#: modules/process/fft_filter_1d.c:166 modules/process/wpour_mark.c:391
msgid "Marked"
msgstr "Помечено"
-#: modules/process/fft_filter_1d.c:166
+#: modules/process/fft_filter_1d.c:167
msgid "Unmarked"
msgstr "Не помечено"
-#: modules/process/fft_filter_1d.c:169
+#: modules/process/fft_filter_1d.c:170
msgid "Null"
msgstr "Убрать"
-#: modules/process/fft_filter_1d.c:170
+#: modules/process/fft_filter_1d.c:171
msgid "Suppress"
msgstr "Выровнять"
-#: modules/process/fft_filter_1d.c:180
+#: modules/process/fft_filter_1d.c:181
msgid "1D FFT filter"
msgstr "одномерный фильтр БПФ"
-#: modules/process/fft_filter_1d.c:269 modules/process/linematch.c:861
+#: modules/process/fft_filter_1d.c:271 modules/process/linematch.c:828
msgid "_Direction:"
msgstr "Н_аправление:"
-#: modules/process/fft_filter_1d.c:277
+#: modules/process/fft_filter_1d.c:279
msgid "_Suppress type:"
msgstr "Тип _подавления:"
-#: modules/process/fft_filter_1d.c:285
+#: modules/process/fft_filter_1d.c:287
msgid "_Filter type:"
msgstr "Тип _фильтра:"
-#: modules/process/fft_filter_1d.c:513
+#: modules/process/fft_filter_1d.c:515
msgid "1D FFT Filtered Data"
msgstr "Отфильтрованные данные одномерного БПФ"
@@ -9649,9 +9920,10 @@ msgstr "Двумерная фильтрация БПФ"
msgid "Filtered Data"
msgstr "Отфильтрованные данные"
-#: modules/process/fft_filter_2d.c:305 modules/process/fit-shape.c:594
-#: modules/process/fit-shape.c:643 modules/process/fit-shape.c:658
-#: modules/process/fit-shape.c:662 modules/process/neural.c:560
+#: modules/process/fft_filter_2d.c:305 modules/process/fit-shape.c:604
+#: modules/process/fit-shape.c:653 modules/process/fit-shape.c:668
+#: modules/process/fit-shape.c:672 modules/process/neural.c:564
+#: modules/process/psf.c:232
msgid "Difference"
msgstr "Разница"
@@ -9707,7 +9979,7 @@ msgstr "Маска фильтра"
msgid "_Undo"
msgstr "_Отменить"
-#: modules/process/fft_filter_2d.c:507 modules/tools/maskedit.c:556
+#: modules/process/fft_filter_2d.c:507 modules/tools/maskedit.c:562
msgid "_Fill"
msgstr "_Заполнить"
@@ -9715,7 +9987,7 @@ msgstr "_Заполнить"
msgid "_Snap to origin"
msgstr "_Прикрепить к началу координат"
-#: modules/process/fft_filter_2d.c:565 modules/process/measure_lattice.c:339
+#: modules/process/fft_filter_2d.c:565 modules/process/measure_lattice.c:329
msgid "Zoom:"
msgstr "Масштаб:"
@@ -9751,38 +10023,38 @@ msgstr "Заполнить всю маску фильтра"
msgid "Force shapes to center around the origin"
msgstr "Центрирует фигуры относительно начала координат"
-#: modules/process/fft_profile.c:125
+#: modules/process/fft_profile.c:124
msgid ""
"Reads radial sections of two-dimensional power spectrum density function."
msgstr ""
"Читает радиальные сечения функции спектральной плотности мощности (ФСПМ)."
-#: modules/process/fft_profile.c:140
+#: modules/process/fft_profile.c:139
msgid "/_Statistics/_PSDF Section..."
msgstr "/_Статистика/Сечение _ФСПМ..."
-#: modules/process/fft_profile.c:144
+#: modules/process/fft_profile.c:143
msgid "Read radial PSDF sections"
msgstr "Считать радиальные сечения ФСПМ"
-#: modules/process/fft_profile.c:190
+#: modules/process/fft_profile.c:189
msgid "Radial PSDF Section"
msgstr "Радиальное сечение ФСПМ"
-#: modules/process/fft_profile.c:237
+#: modules/process/fft_profile.c:236
msgid "PSDF Section"
msgstr "Сечение ФСПМ"
-#: modules/process/fft_profile.c:266 modules/process/grain_dist.c:336
-#: modules/tools/profile.c:517 modules/tools/sfunctions.c:443
-msgid "_Fix res.:"
-msgstr "_Фикс. разр.:"
+#: modules/process/fft_profile.c:266 modules/process/grain_dist.c:338
+#: modules/tools/profile.c:514 modules/tools/sfunctions.c:454
+msgid "_Fixed resolution:"
+msgstr "_Фиксированное разрешение:"
-#: modules/process/fft_profile.c:279
+#: modules/process/fft_profile.c:278
msgid "_Separate curves"
msgstr "_Разделить кривые"
-#: modules/process/fft_profile.c:496
+#: modules/process/fft_profile.c:483
#, c-format
msgid "PSDF %.0f°"
msgstr "ФСПМ %.0f°"
@@ -9803,11 +10075,15 @@ msgstr "Создать поверхность используя спектра
msgid "Spectral Synthesis"
msgstr "Спектральный синтез"
-#: modules/process/fft_synth.c:429
+#: modules/process/fft_synth.c:430
msgid "M_inimum frequency:"
msgstr "М_инимальная частота:"
-#: modules/process/fft_synth.c:449
+#: modules/process/fft_synth.c:430 modules/process/fft_synth.c:450
+msgid "px<sup>-1</sup>"
+msgstr "px<sup>-1</sup>"
+
+#: modules/process/fft_synth.c:450
msgid "Ma_ximum frequency:"
msgstr "М_аксимальная частота:"
@@ -9827,85 +10103,154 @@ msgstr "Разрешить _лоренцев множитель"
msgid "Enable _power multiplier"
msgstr "Разрешить сте_пенной множитель"
-#: modules/process/fit-shape.c:270
+#: modules/process/fibre_synth.c:256
+msgid "Semi-circle"
+msgstr "Полукруг"
+
+#: modules/process/fibre_synth.c:257
+msgid "Triangle"
+msgstr "Треугольник"
+
+#: modules/process/fibre_synth.c:258
+msgid "Rectangle"
+msgstr "Прямоугольник"
+
+#: modules/process/fibre_synth.c:260
+msgid "Quadratic spline"
+msgstr "Квадратичный сплайн"
+
+#: modules/process/fibre_synth.c:266
+msgid "Generates surfaces composed from randomly placed fibers."
+msgstr "Генерирует поверхности, состоящие из случайно расположенных волокон."
+
+#: modules/process/fibre_synth.c:280
+msgid "/S_ynthetic/_Deposition/_Fibers..."
+msgstr "/Син_тез/_Осаждение/_Волокна..."
+
+#: modules/process/fibre_synth.c:284
+msgid "Generate surface of randomly placed fibers"
+msgstr "Сгенерировать поверхность из случайно расположенных волокон"
+
+#: modules/process/fibre_synth.c:420
+msgid "Random Fibers"
+msgstr "Случайные волокна"
+
+#: modules/process/fibre_synth.c:494 modules/process/obj_synth.c:510
+msgid "_Shape:"
+msgstr "_Форма:"
+
+#: modules/process/fibre_synth.c:513 modules/process/obj_synth.c:529
+msgid "obj."
+msgstr "объект."
+
+#: modules/process/fibre_synth.c:553
+msgid "Scales _with width"
+msgstr "Мас_штабируется с длиной"
+
+#: modules/process/fibre_synth.c:591 modules/process/synth.h:485
+msgid "Deformation"
+msgstr "Деформация"
+
+#: modules/process/fibre_synth.c:600 modules/process/lno_synth.c:852
+#: modules/process/lno_synth.c:1222 modules/process/mask_noisify.c:177
+msgid "Densi_ty:"
+msgstr "П_лотность:"
+
+#: modules/process/fibre_synth.c:607
+msgid "_Lateral:"
+msgstr "_Горизонтальный масштаб:"
+
+#: modules/process/fibre_synth.c:614
+msgid "Le_ngthwise:"
+msgstr "По _длине:"
+
+#: modules/process/fibre_synth.c:819
+msgid "Along fiber:"
+msgstr "Вдоль волокна:"
+
+#: modules/process/fibre_synth.c:1180
+msgid "Generating fibers..."
+msgstr "Генерация волокон..."
+
+#: modules/process/fit-shape.c:264
msgid "Fits predefined geometrical shapes to data."
msgstr "Аппроксимирует данные заданными геометрическими формами."
-#: modules/process/fit-shape.c:284
+#: modules/process/fit-shape.c:278
msgid "/_Level/_Fit Shape..."
msgstr "/_Выравнивание/Аппроксимировать _фигуру..."
-#: modules/process/fit-shape.c:288 modules/process/fit-shape.c:295
+#: modules/process/fit-shape.c:282 modules/process/fit-shape.c:289
msgid "Fit geometrical shapes"
msgstr "Аппрокисимровать геометрическими формами"
-#: modules/process/fit-shape.c:291
+#: modules/process/fit-shape.c:285
msgid "/_Fit Shape..."
msgstr "/_Аппроксимировать форму..."
-#: modules/process/fit-shape.c:390
+#: modules/process/fit-shape.c:389
msgid "Fit Shape"
msgstr "Аппроксимировать форму"
-#: modules/process/fit-shape.c:395
+#: modules/process/fit-shape.c:396
msgid "verb|_Quick Fit"
msgstr "_Быстро аппрокс."
-#: modules/process/fit-shape.c:473 modules/process/fit-shape.c:2159
+#: modules/process/fit-shape.c:474 modules/process/fit-shape.c:2141
msgid "Derived Quantities"
msgstr "Производные величины"
-#: modules/process/fit-shape.c:478 modules/process/fit-shape.c:2129
+#: modules/process/fit-shape.c:479 modules/process/fit-shape.c:2111
msgid "Mean square difference:"
-msgstr "азница:"
+msgstr "Среднеквадратичная разница:"
-#: modules/process/fit-shape.c:580 modules/process/fit-shape.c:626
-#: modules/process/fit-shape.c:657 modules/process/fit-shape.c:661
+#: modules/process/fit-shape.c:590 modules/process/fit-shape.c:636
+#: modules/process/fit-shape.c:667 modules/process/fit-shape.c:671
msgid "Fitted shape"
msgstr "Аппроксимирующая фигура"
-#: modules/process/fit-shape.c:663 modules/process/mark_disconn.c:189
-#: modules/process/scars.c:281
+#: modules/process/fit-shape.c:673 modules/process/mark_disconn.c:189
+#: modules/process/scars.c:299
msgid "Both"
msgstr "Оба"
-#: modules/process/fit-shape.c:680
+#: modules/process/fit-shape.c:690 modules/process/psf-fit.c:308
msgid "_Function type:"
msgstr "Тип _функции:"
-#: modules/process/fit-shape.c:708
+#: modules/process/fit-shape.c:720
msgid "Show differences with _adapted color map"
msgstr "Показывать различия с _адаптированной шкалой цвета"
-#: modules/process/fit-shape.c:720
+#: modules/process/fit-shape.c:732
msgid "Full fit is _geometric"
msgstr "_Геометрическая полная аппроксимация"
-#: modules/process/fit-shape.c:757
+#: modules/process/fit-shape.c:769
msgid "Calculate differences for e_xcluded pixels"
msgstr "Рассчитать различия для _исключенных пикселей"
-#: modules/process/fit-shape.c:804
+#: modules/process/fit-shape.c:816
msgid "_Recalculate Image"
msgstr "Пе_ресчитать изображение"
-#: modules/process/fit-shape.c:811
+#: modules/process/fit-shape.c:823
msgid "Revert to _Previous Values"
msgstr "Вернуться к _предыдущим значениям"
-#: modules/process/fit-shape.c:1850
+#: modules/process/fit-shape.c:1864
msgid "Parameter estimation failed"
msgstr "Оценка параметров закончилась ошибкой"
-#: modules/process/fit-shape.c:1853
+#: modules/process/fit-shape.c:1867
msgid "Fit failed"
msgstr "Аппроксимация закончилась ошибкой"
-#: modules/process/fit-shape.c:1855
+#: modules/process/fit-shape.c:1869
msgid "Fit was interruped"
msgstr "Аппроксимация была прервана"
-#: modules/process/fit-shape.c:2115
+#: modules/process/fit-shape.c:2097
msgid "(fixed)"
msgstr "(фикс.)"
@@ -9926,35 +10271,35 @@ msgstr "Выравнивает основание поверхности с вы
msgid "Polynomial leveling..."
msgstr "Полиноминальное выравнивание..."
-#: modules/process/fraccor.c:38
+#: modules/process/fraccor.c:39
msgid "Removes data under mask using fractal interpolation."
msgstr "Убирает данные под маской используя фрактальную интерполяцию."
-#: modules/process/fraccor.c:52
+#: modules/process/fraccor.c:53
msgid "/_Correct Data/_Fractal Correction"
msgstr "/Исправить _данные/_Фрактальная коррекция"
-#: modules/process/fraccor.c:56
+#: modules/process/fraccor.c:57
msgid "Interpolate data under mask with fractal interpolation"
msgstr "Интерполировать данные под маской фрактальной интерполяцией"
-#: modules/process/fractal.c:134
+#: modules/process/fractal.c:130
msgid "Partitioning"
msgstr "Декомпозиция"
-#: modules/process/fractal.c:135
+#: modules/process/fractal.c:131
msgid "Cube counting"
msgstr "Подсчёт кубов"
-#: modules/process/fractal.c:136
+#: modules/process/fractal.c:132
msgid "Triangulation"
msgstr "Триангуляция"
-#: modules/process/fractal.c:137
+#: modules/process/fractal.c:133
msgid "Power spectrum"
msgstr "Спектр мощности"
-#: modules/process/fractal.c:173
+#: modules/process/fractal.c:169
msgid ""
"Calculates fractal dimension using several methods (partitioning, box "
"counting, triangulation, power spectrum)."
@@ -9962,54 +10307,50 @@ msgstr ""
"Рассчитывает фрактальную размерность используя несколько методов (деления на "
"части, подсчёт ящиков, триангуляция, спектр мощности)."
-#: modules/process/fractal.c:188
+#: modules/process/fractal.c:184
msgid "/_Statistics/_Fractal Dimension..."
msgstr "/_Статистика/_Фрактальная размерность..."
-#: modules/process/fractal.c:192
+#: modules/process/fractal.c:188
msgid "Calculate fractal dimension"
msgstr "Рассчитать фрактальную размерность"
-#: modules/process/fractal.c:227
+#: modules/process/fractal.c:223
msgid "Fractal Dimension"
msgstr "Фрактальная размерность"
-#: modules/process/fractal.c:228
-msgid "Reco_mpute"
-msgstr "_Пересчитать"
-
-#: modules/process/fractal.c:269
+#: modules/process/fractal.c:253
msgid "_Method:"
msgstr "_Метод:"
-#: modules/process/fractal.c:290
+#: modules/process/fractal.c:269
msgid "Fit Area"
msgstr "Область аппроксимации"
-#: modules/process/fractal.c:295
-msgid "From:"
-msgstr "От:"
-
-#: modules/process/fractal.c:295 modules/process/fractal.c:589
-#: modules/process/fractal.c:613
+#: modules/process/fractal.c:273 modules/process/fractal.c:545
+#: modules/process/fractal.c:569
msgid "minimum"
msgstr "минимум"
-#: modules/process/fractal.c:298
-msgid "To:"
-msgstr "До:"
+#: modules/process/fractal.c:274
+msgid "From:"
+msgstr "От:"
-#: modules/process/fractal.c:298 modules/process/fractal.c:590
-#: modules/process/fractal.c:614
+#: modules/process/fractal.c:279 modules/process/fractal.c:546
+#: modules/process/fractal.c:570
msgid "maximum"
msgstr "максимум"
-#: modules/process/fractal.c:308 modules/process/mark_with.c:390
-#: modules/process/neural.c:559
+#: modules/process/fractal.c:280
+msgid "To:"
+msgstr "До:"
+
+#: modules/process/fractal.c:287 modules/process/mark_with.c:394
+#: modules/process/neural.c:563
msgid "Result"
msgstr "Результат"
-#: modules/process/fractal.c:550
+#: modules/process/fractal.c:506
msgid "Linear fit"
msgstr "Линейная аппроксимация"
@@ -10081,11 +10422,11 @@ msgstr ""
msgid "Grain Correlations"
msgstr "Корреляции зёрен"
-#: modules/process/grain_cross.c:240
+#: modules/process/grain_cross.c:241
msgid "_Abscissa"
msgstr "_Абсцисса"
-#: modules/process/grain_cross.c:244
+#: modules/process/grain_cross.c:245
msgid "O_rdinate"
msgstr "О_рдината"
@@ -10113,119 +10454,119 @@ msgstr "Строить _графики"
msgid "Grain Distributions"
msgstr "Распределения зёрен"
-#: modules/process/grain_dist.c:553
+#: modules/process/grain_dist.c:547
msgid "count"
msgstr "число"
-#: modules/process/grain_dist.c:617
+#: modules/process/grain_dist.c:611
msgid "Export Raw Grain Values"
msgstr "Экспортировать необработанные значения зёрен"
-#: modules/process/grain_edge.c:100
+#: modules/process/grain_edge.c:99
msgid "Marks grains by edge detection method."
msgstr "Помечает зёрна алгоритмом нахождения краёв."
-#: modules/process/grain_edge.c:114
+#: modules/process/grain_edge.c:113
msgid "/_Grains/Mark by _Edge Detection..."
msgstr "/Зёрн_а/Пометить по кра_ю..."
-#: modules/process/grain_edge.c:118
+#: modules/process/grain_edge.c:117
msgid "Mark grains with edge detection mechanism"
msgstr "Пометить зёрна с помощью поиска края"
-#: modules/process/grain_edge.c:207
+#: modules/process/grain_edge.c:206
msgid "Mark Grains by Edge Detection"
msgstr "Пометить зёрна по краю"
-#: modules/process/grain_edge.c:245
+#: modules/process/grain_edge.c:244
msgid "Threshold"
msgstr "Порог"
-#: modules/process/grain_edge.c:249
+#: modules/process/grain_edge.c:248
msgid "_Laplacian:"
msgstr "_Лапласиан:"
-#: modules/process/grain_filter.c:195
+#: modules/process/grain_filter.c:194
msgid ""
"Filters grains by their properties, using logical expressions and thresholds."
msgstr ""
"Фильтрует зёрна по их свойствам, используя логические выражения и пороги"
-#: modules/process/grain_filter.c:210
+#: modules/process/grain_filter.c:209
msgid "/_Grains/_Filter..."
msgstr "/Зёрн_а/_Фильтр..."
-#: modules/process/grain_filter.c:214
+#: modules/process/grain_filter.c:213
msgid "Filter grains by their properties"
msgstr "Фильтровать зёрна по свойствам"
-#: modules/process/grain_filter.c:254
+#: modules/process/grain_filter.c:253
msgid "There are no grains to filter."
msgstr "Нет зёрен, которые можно отфильтровать"
-#: modules/process/grain_filter.c:310
+#: modules/process/grain_filter.c:309
msgid "Filter Grains"
msgstr "Фильтровать зёрна"
-#: modules/process/grain_filter.c:405
+#: modules/process/grain_filter.c:404
msgid "Set selected as:"
msgstr "Установить выбранное как:"
-#: modules/process/grain_filter.c:420
+#: modules/process/grain_filter.c:419
msgid "Keep grains satisfying:"
msgstr "Оставлять зёрна, удовлетворяющие:"
-#: modules/process/grain_filter.c:434 modules/process/lat_synth.c:733
+#: modules/process/grain_filter.c:440 modules/process/lat_synth.c:733
msgid "Lower threshold:"
msgstr "Нижний порог:"
-#: modules/process/grain_filter.c:469 modules/process/lat_synth.c:740
+#: modules/process/grain_filter.c:467 modules/process/lat_synth.c:740
msgid "Upper threshold:"
msgstr "Верхний порог:"
#. TRANSLATORS: %c is replaced with quantity label A, B or C.
-#: modules/process/grain_filter.c:645
+#: modules/process/grain_filter.c:628
#, c-format
msgid "Condition %c: %s"
msgstr "Условие %c: %s"
-#: modules/process/grain_mark.c:139
+#: modules/process/grain_mark.c:137
msgid "Marks grains by thresholding (height, slope, curvature)."
msgstr "Помечает зёрна по порогу (высоты, размера)."
-#: modules/process/grain_mark.c:153
+#: modules/process/grain_mark.c:151
msgid "/_Grains/_Mark by Threshold..."
msgstr "/Зёрн_а/Пометить по _порогу..."
-#: modules/process/grain_mark.c:157
+#: modules/process/grain_mark.c:155
msgid "Mark grains by threshold"
msgstr "Пометить зёрна по пороговому значению"
-#: modules/process/grain_mark.c:241
+#: modules/process/grain_mark.c:240
msgid "Mark Grains by Threshold"
msgstr "Пометить зёрна по пороговому значению"
-#: modules/process/grain_mark.c:281
+#: modules/process/grain_mark.c:280
msgid "Threshold by"
msgstr "Пороговое значение"
-#: modules/process/grain_mark.c:311
+#: modules/process/grain_mark.c:310
msgid "_Slope:"
msgstr "_Уклон:"
-#: modules/process/grain_mark.c:315
+#: modules/process/grain_mark.c:314
msgid "_Curvature:"
msgstr "_Кривизна:"
-#: modules/process/grain_mark.c:324
-msgid "Criteria combination:"
-msgstr "Критерии объединения:"
-
-#: modules/process/grain_mark.c:328 modules/process/grain_wshed.c:256
+#: modules/process/grain_mark.c:319 modules/process/grain_wshed.c:260
#: modules/process/wpour_mark.c:358
msgid "_Invert height"
msgstr "_Инвертировать высоту"
+#: modules/process/grain_mark.c:328
+msgid "Criteria combination:"
+msgstr "Критерии объединения:"
+
#: modules/process/grain_stat.c:54
msgid "Displays overall grain statistics."
msgstr "Показывает общую статистику зёрен."
@@ -10302,418 +10643,427 @@ msgstr "Общий объём зерна (по Лапласу):"
msgid "Total projected boundary length:"
msgstr "Общая длина проекции границы:"
-#: modules/process/grain_wshed.c:101
+#: modules/process/grain_wshed.c:102
msgid "Marks grains by watershed algorithm."
msgstr "Помечает зёрна по алгоритму водораздела."
-#: modules/process/grain_wshed.c:115
+#: modules/process/grain_wshed.c:116
msgid "/_Grains/Mark by _Watershed..."
msgstr "/Зёрн_а/Пометить по _водоразделу..."
-#: modules/process/grain_wshed.c:119
+#: modules/process/grain_wshed.c:120
msgid "Mark grains by watershed"
msgstr "Пометить зёрна по водоразделу"
-#: modules/process/grain_wshed.c:161
+#: modules/process/grain_wshed.c:162
msgid "Mark Grains by Watershed"
msgstr "Пометить зёрна по водоразделу"
-#: modules/process/grain_wshed.c:199
+#: modules/process/grain_wshed.c:200
msgid "Grain Location"
msgstr "Поиск зёрен"
-#: modules/process/grain_wshed.c:214
+#: modules/process/grain_wshed.c:216
msgid "_Drop size:"
msgstr "_Размер капли:"
-#: modules/process/grain_wshed.c:230
+#: modules/process/grain_wshed.c:233
msgid "Segmentation"
msgstr "Сегментация"
-#: modules/process/grain_wshed.c:236
+#: modules/process/grain_wshed.c:239
msgid "Num_ber of steps:"
msgstr "Число _шагов:"
-#: modules/process/grain_wshed.c:244
+#: modules/process/grain_wshed.c:248
msgid "Dr_op size:"
msgstr "Размер _капли:"
-#: modules/process/grain_wshed.c:435
+#: modules/process/grain_wshed.c:439
msgid "Finding minima..."
msgstr "Поиск минимумов..."
-#: modules/process/grain_wshed.c:437
+#: modules/process/grain_wshed.c:441
msgid "Locating..."
msgstr "Поиск..."
-#: modules/process/grain_wshed.c:439
+#: modules/process/grain_wshed.c:443
msgid "Simulating watershed..."
msgstr "Моделируется водораздел..."
-#: modules/process/grain_wshed.c:441
+#: modules/process/grain_wshed.c:445
msgid "Marking boundaries..."
msgstr "Помечаются границы..."
-#: modules/process/hough.c:74
+#: modules/process/hough.c:76
msgid "Hough transform."
msgstr "Преобразование Хафа."
-#: modules/process/hough.c:88
+#: modules/process/hough.c:90
msgid "/_Integral Transforms/_Hough..."
msgstr "/_Интегральные преобразования/преобразование _Хафа"
-#: modules/process/hough.c:92
+#: modules/process/hough.c:94
msgid "Compute Hough transform"
msgstr "Рассчитать преобразование Хафа."
-#: modules/process/hough.c:178
+#: modules/process/hough.c:137
+msgid "Hough line"
+msgstr "Линия Хафа"
+
+#: modules/process/hough.c:141
+#, c-format
+msgid "Hough circle r=%d"
+msgstr "Окружность Хафа r=%d"
+
+#: modules/process/hough.c:173
msgid "Hough Transform"
msgstr "Преобразование Хафа"
-#: modules/process/hough.c:201
+#: modules/process/hough.c:195
msgid "_Transform type:"
msgstr "_Тип преобразования:"
-#: modules/process/hough.c:212
+#: modules/process/hough.c:203
msgid "_Circle size:"
msgstr "Размер _круга:"
-#: modules/process/immerse.c:162
+#: modules/process/immerse.c:163
msgid "Immerse high resolution detail into overall image."
msgstr "Встраивает фрагмент с высоким разрешением в общее изображение."
-#: modules/process/immerse.c:176
+#: modules/process/immerse.c:177
msgid "/M_ultidata/_Immerse Detail..."
msgstr "/М_ножественные данные/Встроить _фрагмент..."
-#: modules/process/immerse.c:180
+#: modules/process/immerse.c:181
msgid "Immerse a detail into image"
msgstr "Встраивает более подробный фрагмент в изображение"
-#: modules/process/immerse.c:222
+#: modules/process/immerse.c:223
msgid "Immerse Detail"
msgstr "Встроить фрагмент"
-#: modules/process/immerse.c:225
+#: modules/process/immerse.c:226
msgid "_Locate"
msgstr "Н_айти"
-#: modules/process/immerse.c:227
+#: modules/process/immerse.c:228
msgid "Locate detail by full image correlation search"
msgstr "Найти фрагмент корреляционным поиском по всему изображению"
-#: modules/process/immerse.c:229
+#: modules/process/immerse.c:230
msgid "_Improve"
msgstr "У_точнить"
-#: modules/process/immerse.c:231
+#: modules/process/immerse.c:232
msgid "Improve detail position by correlation search in neighborhood"
msgstr "Уточнить положение фрагмента корреляционным поиском в окрестности"
-#: modules/process/immerse.c:290
+#: modules/process/immerse.c:291
msgid "_Detail image:"
msgstr "Изображение _фрагмента:"
-#: modules/process/immerse.c:295
+#: modules/process/immerse.c:296
msgid "Position:"
msgstr "Расположение:"
-#: modules/process/immerse.c:308
+#: modules/process/immerse.c:314
msgid "Result Sampling"
msgstr "Разрешение результата"
-#: modules/process/immerse.c:318
+#: modules/process/immerse.c:324
msgid "_Upsample large image"
msgstr "_Увеличить разрешение большого изображения"
-#: modules/process/immerse.c:320
+#: modules/process/immerse.c:326
msgid "_Downsample detail"
msgstr "Сн_изить разрешение фрагмента"
-#: modules/process/immerse.c:329
+#: modules/process/immerse.c:335
msgid "Detail Leveling"
msgstr "Выравнивание фрагмента"
-#: modules/process/immerse.c:339
+#: modules/process/immerse.c:345
msgid "levelling|_None"
msgstr "_Нет"
-#: modules/process/immerse.c:341
+#: modules/process/immerse.c:347
msgid "_Mean value"
msgstr "_Среднее значение"
-#: modules/process/immerse.c:349
+#: modules/process/immerse.c:355
msgid "Show _frame"
msgstr "Показывать _рамку"
-#: modules/process/immerse.c:787
+#: modules/process/immerse.c:793
msgid "Immersed detail"
msgstr "Встроенный фрагмент"
-#: modules/process/indent_analyze.c:261
+#: modules/process/indent_analyze.c:246
msgid "Do nothing"
msgstr "Ничего не делать"
-#: modules/process/indent_analyze.c:262
+#: modules/process/indent_analyze.c:247
msgid "Plane level"
msgstr "Выравнивание плоскости"
-#: modules/process/indent_analyze.c:263
+#: modules/process/indent_analyze.c:248
msgid "Plane rotate"
msgstr "Поворот плоскости"
-#: modules/process/indent_analyze.c:267
+#: modules/process/indent_analyze.c:252
msgid "New"
msgstr "Новая"
-#: modules/process/indent_analyze.c:268
+#: modules/process/indent_analyze.c:253
msgid "AND"
msgstr "И"
-#: modules/process/indent_analyze.c:269
+#: modules/process/indent_analyze.c:254
msgid "OR"
msgstr "ИЛИ"
-#: modules/process/indent_analyze.c:270
+#: modules/process/indent_analyze.c:255
msgid "NOT"
msgstr "НЕ"
-#: modules/process/indent_analyze.c:271
+#: modules/process/indent_analyze.c:256
msgid "XOR"
msgstr "Исключающее ИЛИ"
-#: modules/process/indent_analyze.c:275
+#: modules/process/indent_analyze.c:260
msgid "Nothing"
msgstr "Ничего"
-#: modules/process/indent_analyze.c:276
+#: modules/process/indent_analyze.c:261
msgid "Above"
msgstr "Выше"
-#: modules/process/indent_analyze.c:277
+#: modules/process/indent_analyze.c:262
msgid "Below"
msgstr "Снизу"
-#: modules/process/indent_analyze.c:278
+#: modules/process/indent_analyze.c:263
msgid "Plane"
msgstr "Плоскость"
-#: modules/process/indent_analyze.c:279
+#: modules/process/indent_analyze.c:264
msgid "Impression"
msgstr "Отпечаток"
-#: modules/process/indent_analyze.c:280
+#: modules/process/indent_analyze.c:265
msgid "Inner Pile-up"
msgstr "Внутреннее выдавливание"
-#: modules/process/indent_analyze.c:281
+#: modules/process/indent_analyze.c:266
msgid "Outer Pile-up"
msgstr "Внешнее выдавливание"
-#: modules/process/indent_analyze.c:282
+#: modules/process/indent_analyze.c:267
msgid "Special points"
msgstr "Особые точки"
-#: modules/process/indent_analyze.c:283
+#: modules/process/indent_analyze.c:268
msgid "Faces border"
msgstr "Границы граней"
-#: modules/process/indent_analyze.c:287
+#: modules/process/indent_analyze.c:272
msgid "Vickers"
msgstr "Виккерса"
-#: modules/process/indent_analyze.c:288
+#: modules/process/indent_analyze.c:273
msgid "Berkovich"
msgstr "Берковича"
-#: modules/process/indent_analyze.c:289
+#: modules/process/indent_analyze.c:274
msgid "Berkovich (modified)"
msgstr "Берковича (изменённый)"
-#: modules/process/indent_analyze.c:290
+#: modules/process/indent_analyze.c:275
msgid "Knoop"
msgstr "Кнупа"
-#: modules/process/indent_analyze.c:291
+#: modules/process/indent_analyze.c:276
msgid "Brinell"
msgstr "Бринеля"
-#: modules/process/indent_analyze.c:292
+#: modules/process/indent_analyze.c:277
msgid "Cube corner"
msgstr "Угол куба"
-#: modules/process/indent_analyze.c:293
+#: modules/process/indent_analyze.c:278
msgid "Rockwell"
msgstr "Роквелла"
-#: modules/process/indent_analyze.c:303
+#: modules/process/indent_analyze.c:288
msgid "Analyses nanoindentation structure (volumes, surfaces, ...)."
msgstr ""
"Анализирует структуру отпечатка при исследовании твёрдости (объёмы, "
"поверхности, ...)."
-#: modules/process/indent_analyze.c:320
+#: modules/process/indent_analyze.c:302
msgid "/_Tip and Indentation/_Analyze Imprint..."
msgstr "/_Зонд и индентация/_Анализировать отпечаток..."
-#: modules/process/indent_analyze.c:439
+#: modules/process/indent_analyze.c:410
msgid "Marked _areas:"
msgstr "Помеченные обл_асти:"
-#: modules/process/indent_analyze.c:445
+#: modules/process/indent_analyze.c:419
msgid "_Indentor type:"
msgstr "Тип _индентора:"
-#: modules/process/indent_analyze.c:451
+#: modules/process/indent_analyze.c:428
msgid "_Mask creation type:"
msgstr "Тип создания _маски:"
-#: modules/process/indent_analyze.c:456
+#: modules/process/indent_analyze.c:434
msgid "Ref. plane _tolerance:"
msgstr "_Допуск базовой плоскости:"
-#: modules/process/indent_analyze.c:460
+#: modules/process/indent_analyze.c:438
msgid "Angle _1 tolerance:"
msgstr "Допуск угла _1:"
-#: modules/process/indent_analyze.c:485
+#: modules/process/indent_analyze.c:456
msgid "Indent center at"
msgstr "Центр отпечатка:"
-#: modules/process/indent_analyze.c:488
+#: modules/process/indent_analyze.c:460
msgid "Maximum at"
msgstr "Максимум в"
-#: modules/process/indent_analyze.c:491
+#: modules/process/indent_analyze.c:464
msgid "Max-min difference"
msgstr "Разница max-min"
-#: modules/process/indent_analyze.c:497
+#: modules/process/indent_analyze.c:472
msgid "Expected A<sub>d</sub>:"
msgstr "Ожидаемое A<sub>d</sub>:"
-#: modules/process/indent_analyze.c:505
+#: modules/process/indent_analyze.c:479
msgid "Expected A<sub>p</sub>:"
msgstr "Ожидаемое A<sub>p</sub>:"
-#: modules/process/indent_analyze.c:549
+#: modules/process/indent_analyze.c:489
msgid "Volume above-below"
msgstr "Объём выше-ниже"
-#: modules/process/indent_analyze.c:558
+#: modules/process/indent_analyze.c:494
msgid "Indent. volume"
msgstr "Объём отпечатка"
-#: modules/process/indent_analyze.c:564
+#: modules/process/indent_analyze.c:502
msgid "Indent. A<sub>d</sub>"
msgstr "A<sub>d</sub> индент."
-#: modules/process/indent_analyze.c:573
+#: modules/process/indent_analyze.c:509
msgid "Indent. A<sub>p</sub>"
msgstr "A<sub>p</sub> индент."
-#: modules/process/indent_analyze.c:587
+#: modules/process/indent_analyze.c:517
msgid "Inner Pile-Up A<sub>d</sub>"
msgstr "A<sub>d</sub> внутр. выдавливания"
-#: modules/process/indent_analyze.c:596
+#: modules/process/indent_analyze.c:525
msgid "Inner Pile-Up A<sub>p</sub>"
msgstr "A<sub>p</sub> внутр. выдавливания"
-#: modules/process/indent_analyze.c:605
+#: modules/process/indent_analyze.c:533
msgid "Outer Pile-Up A<sub>d</sub>"
msgstr "A<sub>d</sub> внешнего выдавливания"
-#: modules/process/indent_analyze.c:614
+#: modules/process/indent_analyze.c:541
msgid "Outer Pile-Up A<sub>p</sub>"
msgstr "A<sub>p</sub> внешнего выдавливания"
-#: modules/process/indent_analyze.c:644
+#: modules/process/indent_analyze.c:569
msgid "Indentation statistics"
msgstr "Статистика индентации"
-#: modules/process/indent_analyze.c:645
+#: modules/process/indent_analyze.c:570
msgid "_Compute & mark"
msgstr "_Рассчитать и пометить"
-#: modules/process/indent_analyze.c:646
+#: modules/process/indent_analyze.c:571
msgid "_Save statistics"
msgstr "_Сохранить статистику"
-#: modules/process/indent_analyze.c:1569
+#: modules/process/indent_analyze.c:1392
msgid "No statistics has been computed yet."
msgstr "Статистика ещё не рассчитывалась."
-#: modules/process/indent_analyze.c:1577
+#: modules/process/indent_analyze.c:1400
msgid "Save Indentation Statistics"
msgstr "Сохранить статистику индентации"
-#: modules/process/indent_analyze.c:1615
+#: modules/process/indent_analyze.c:1438
#, c-format
msgid "Indentor: %s\n"
msgstr "Индентор: %s\n"
-#: modules/process/indent_analyze.c:1619
+#: modules/process/indent_analyze.c:1442
#, c-format
msgid "Length units: %s\n"
msgstr "Единицы длины: %s\n"
-#: modules/process/indent_analyze.c:1621
+#: modules/process/indent_analyze.c:1444
#, c-format
msgid "Indentation center at [%d, %d] px: %lf\n"
msgstr "Центр индентации в [%d, %d] пикс.: %lf\n"
-#: modules/process/indent_analyze.c:1623
+#: modules/process/indent_analyze.c:1446
#, c-format
msgid "Maximum at [%d, %d] is: %lf\n"
msgstr "Максимум в [%d, %d] равен: %lf\n"
-#: modules/process/indent_analyze.c:1625
+#: modules/process/indent_analyze.c:1448
#, c-format
msgid "Difference max-min: %lf\n"
msgstr "Разница max-min: %lf\n"
-#: modules/process/indent_analyze.c:1630
+#: modules/process/indent_analyze.c:1453
#, c-format
msgid "Area (projected) above plane: %g (%.1lf %%)\n"
msgstr "Площадь (проекции) выше плоскости: %g (%.1lf %%)\n"
-#: modules/process/indent_analyze.c:1634
+#: modules/process/indent_analyze.c:1457
#, c-format
msgid "Area (projected) below plane: %g (%.1lf %%)\n"
msgstr "Площадь (проекции) ниже плоскости: %g (%.1lf %%)\n"
-#: modules/process/indent_analyze.c:1638
+#: modules/process/indent_analyze.c:1461
#, c-format
msgid "Area (projected) of plane: %g (%.1lf %%)\n"
msgstr "Площадь (проекции) плоскости: %g (%.1lf %%)\n"
-#: modules/process/indent_analyze.c:1643
+#: modules/process/indent_analyze.c:1466
#, c-format
msgid "Area (developed) above %g (+%.1f %%)\n"
msgstr "Площадь (развернутая) выше %g (+%.1f %%)\n"
-#: modules/process/indent_analyze.c:1646
+#: modules/process/indent_analyze.c:1469
#, c-format
msgid "Area (developed) below %g (+%.1lf %%)\n"
msgstr "Площадь (развернутая) ниже %g (+%.1f %%)\n"
-#: modules/process/indent_analyze.c:1650
+#: modules/process/indent_analyze.c:1473
#, c-format
msgid "Volume above: %g\n"
msgstr "Объём выше: %g\n"
-#: modules/process/indent_analyze.c:1652
+#: modules/process/indent_analyze.c:1475
#, c-format
msgid "Volume below: %g\n"
msgstr "Объём ниже: %g\n"
-#: modules/process/indent_analyze.c:1654
+#: modules/process/indent_analyze.c:1477
#, c-format
msgid "Volume difference %g\n"
msgstr "Разница объёмов %g\n"
-#: modules/process/indent_analyze.c:1658
+#: modules/process/indent_analyze.c:1481
msgid ""
"\n"
"Indentation\n"
@@ -10721,12 +11071,12 @@ msgstr ""
"\n"
"Индентация\n"
-#: modules/process/indent_analyze.c:1659
+#: modules/process/indent_analyze.c:1482
#, c-format
msgid "Volume %g\n"
msgstr "Объём %g\n"
-#: modules/process/indent_analyze.c:1664
+#: modules/process/indent_analyze.c:1487
msgid ""
"\n"
"Indentation - Inner Pile-Up\n"
@@ -10734,7 +11084,7 @@ msgstr ""
"\n"
"Индентация - внутреннее выдавливание\n"
-#: modules/process/indent_analyze.c:1670
+#: modules/process/indent_analyze.c:1493
msgid "Indentation - Outer Pile-Up\n"
msgstr "Индентация - внешнее выдавливание\n"
@@ -10843,11 +11193,6 @@ msgstr "Пенроуза (центры)"
msgid "_Lattice:"
msgstr "_Решетка:"
-#: modules/process/lat_synth.c:651 modules/process/obj_synth.c:544
-#: modules/process/pat_synth.c:1457
-msgid "_Size:"
-msgstr "Р_азмер:"
-
#: modules/process/lat_synth.c:662
msgid "Lattice rela_xation:"
msgstr "Рела_ксация решетки:"
@@ -10986,7 +11331,7 @@ msgstr ""
#: modules/process/level_grains.c:187 modules/process/median-bg.c:167
#: modules/process/polylevel.c:293 modules/process/polylevel.c:417
-#: modules/process/sphere-revolve.c:200
+#: modules/process/sphere-revolve.c:221 modules/process/sphere-revolve.c:295
msgid "Background"
msgstr "Фон"
@@ -10998,150 +11343,150 @@ msgstr "Выровнять зёрна"
msgid "Quantity to level:"
msgstr "Величина:"
-#: modules/process/level_grains.c:231 modules/process/linematch.c:866
-#: modules/process/median-bg.c:217 modules/process/polylevel.c:482
-#: modules/process/sphere-revolve.c:263
+#: modules/process/level_grains.c:231 modules/process/linematch.c:834
+#: modules/process/median-bg.c:217 modules/process/polylevel.c:485
+#: modules/process/sphere-revolve.c:371
msgid "E_xtract background"
msgstr "_Извлечь фон"
-#: modules/process/linecorrect.c:54
+#: modules/process/linecorrect.c:52
msgid "Corrects line defects (mostly experimental algorithms)."
msgstr "Исправление дефектов линий (большая часть алгоритмов экспериментальна)"
-#: modules/process/linecorrect.c:68
+#: modules/process/linecorrect.c:66
msgid "/_Correct Data/Ste_p Line Correction"
msgstr "/Исправить _данные/Линейная коррекция _ступенек"
-#: modules/process/linecorrect.c:72
+#: modules/process/linecorrect.c:70
msgid "Correct steps in lines"
msgstr "Исправить ступеньки в линиях"
-#: modules/process/linematch.c:158 modules/tools/linestats.c:166
+#: modules/process/linematch.c:155 modules/tools/linestats.c:166
#: modules/volume/volume_linestat.c:143
msgid "Median"
msgstr "Срединное"
-#: modules/process/linematch.c:159
+#: modules/process/linematch.c:156
msgid "Median of differences"
msgstr "Срединное разностей"
-#: modules/process/linematch.c:160
+#: modules/process/linematch.c:157
msgid "Modus"
msgstr "Мода высоты"
-#: modules/process/linematch.c:161
+#: modules/process/linematch.c:158
msgid "linematch|Matching"
msgstr "Соответствие"
-#: modules/process/linematch.c:162
+#: modules/process/linematch.c:159
msgid "linematch|Polynomial"
msgstr "Полиномиальное"
-#: modules/process/linematch.c:168
+#: modules/process/linematch.c:165
msgid "Aligns rows by various methods."
msgstr "Выравнивает строки различными методами"
-#: modules/process/linematch.c:182
+#: modules/process/linematch.c:179
msgid "/_Correct Data/_Align rows..."
msgstr "/Исправить _данные/Выровнять _строки..."
-#: modules/process/linematch.c:186
+#: modules/process/linematch.c:183
msgid "Align rows using various methods"
msgstr "Выровнять строки используя различные методы"
-#: modules/process/linematch.c:237 modules/process/linematch.c:265
+#: modules/process/linematch.c:234 modules/process/linematch.c:262
msgid "Row background"
msgstr "Фон строчек"
-#: modules/process/linematch.c:266
+#: modules/process/linematch.c:263
msgid "Vertical position"
msgstr "Положение по вертикали"
-#: modules/process/linematch.c:267
+#: modules/process/linematch.c:264
msgid "Corrected offset"
msgstr "Исправленное смещение"
-#: modules/process/linematch.c:802
+#: modules/process/linematch.c:769
msgid "Align Rows"
msgstr "Выровнять строки"
-#: modules/process/linematch.c:844
+#: modules/process/linematch.c:810
msgid "_Polynomial degree:"
msgstr "Степень _полинома:"
-#: modules/process/linematch.c:876
+#: modules/process/linematch.c:844
msgid "Plot background _graph"
msgstr "Строить график _фона"
-#: modules/process/lno_synth.c:261 modules/process/noise_synth.c:188
+#: modules/process/lno_synth.c:259 modules/process/noise_synth.c:186
msgid "distribution|Triangular"
msgstr "Треугольное"
-#: modules/process/lno_synth.c:267 modules/process/pat_synth.c:213
+#: modules/process/lno_synth.c:265 modules/process/pat_synth.c:213
msgid "Steps"
msgstr "Ступеньки"
-#: modules/process/lno_synth.c:268
+#: modules/process/lno_synth.c:266
msgid "Scars"
msgstr "Царапины"
-#: modules/process/lno_synth.c:269 modules/process/pat_synth.c:214
+#: modules/process/lno_synth.c:267 modules/process/pat_synth.c:214
msgid "Ridges"
msgstr "Борозды"
-#: modules/process/lno_synth.c:275
+#: modules/process/lno_synth.c:273
msgid "Generates various kinds of line noise."
msgstr "Генерирует различные виды линейного шума."
-#: modules/process/lno_synth.c:289
+#: modules/process/lno_synth.c:287
msgid "/S_ynthetic/_Line Noise..."
msgstr "/Син_тез/_Линейный Шум..."
-#: modules/process/lno_synth.c:293
+#: modules/process/lno_synth.c:291
msgid "Generate line noise"
msgstr "Генерация линейного шума"
-#: modules/process/lno_synth.c:431
+#: modules/process/lno_synth.c:429
msgid "Line Noise"
msgstr "Линейный шум"
-#: modules/process/lno_synth.c:504
+#: modules/process/lno_synth.c:502
msgid "Distribution"
msgstr "Распределение"
-#: modules/process/lno_synth.c:514 modules/process/noise_synth.c:414
-msgid "Direction:"
-msgstr "Направление:"
+#: modules/process/lno_synth.c:512 modules/process/mask_noisify.c:158
+#: modules/process/noise_synth.c:412
+msgid "Noise type:"
+msgstr "Тип шума:"
-#: modules/process/lno_synth.c:523 modules/process/noise_synth.c:423
+#: modules/process/lno_synth.c:521 modules/process/mask_noisify.c:167
+#: modules/process/noise_synth.c:421
msgid "S_ymmetrical"
msgstr "Си_мметрично"
-#: modules/process/lno_synth.c:524 modules/process/noise_synth.c:424
+#: modules/process/lno_synth.c:522 modules/process/mask_noisify.c:168
+#: modules/process/noise_synth.c:422
msgid "One-sided _positive"
msgstr "В одну _положительную сторону"
-#: modules/process/lno_synth.c:525 modules/process/noise_synth.c:425
+#: modules/process/lno_synth.c:523 modules/process/mask_noisify.c:169
+#: modules/process/noise_synth.c:423
msgid "One-sided _negative"
msgstr "В одну отр_ицательною сторону"
-#: modules/process/lno_synth.c:546
+#: modules/process/lno_synth.c:544
msgid "Noise Type"
msgstr "Тип шума"
-#: modules/process/lno_synth.c:551
+#: modules/process/lno_synth.c:549
msgid "_Noise type:"
msgstr "Тип _шума:"
-#: modules/process/lno_synth.c:853 modules/process/lno_synth.c:1222
-msgid "Densi_ty:"
-msgstr "П_лотность:"
-
-#: modules/process/lno_synth.c:864 modules/process/lno_synth.c:1233
+#: modules/process/lno_synth.c:863 modules/process/lno_synth.c:1233
msgid "_Within line:"
msgstr "_В пределах линии:"
-#: modules/process/lno_synth.c:871
+#: modules/process/lno_synth.c:870
msgid "C_umulative"
msgstr "К_умулятивный"
@@ -11197,31 +11542,31 @@ msgstr "_Использовать регрессию"
msgid "_Train logistic regression"
msgstr "_Обучить регрессию"
-#: modules/process/logistic.c:275
+#: modules/process/logistic.c:274
msgid "_Gaussian blur"
msgstr "_Гауссово размытие"
-#: modules/process/logistic.c:288
+#: modules/process/logistic.c:285
msgid "_Number of Gaussians:"
msgstr "_Число гауссиан:"
-#: modules/process/logistic.c:296
+#: modules/process/logistic.c:293
msgid "_Sobel derivatives"
msgstr "Производные _Собеля"
-#: modules/process/logistic.c:307
+#: modules/process/logistic.c:303
msgid "_Laplacian"
msgstr "_Лапласиан"
-#: modules/process/logistic.c:318
+#: modules/process/logistic.c:313
msgid "_Hessian"
msgstr "_Гессиан"
-#: modules/process/logistic.c:331
+#: modules/process/logistic.c:325
msgid "_Regularization parameter:"
msgstr "Параметр _регуляризации:"
-#: modules/process/logistic.c:623 modules/process/neural.c:1101
+#: modules/process/logistic.c:616 modules/process/neural.c:1108
msgid "Training..."
msgstr "Обучение..."
@@ -11237,13 +11582,13 @@ msgstr "/_Исправить данные/Маска _несвязанного..
msgid "Mark data disconnected from other values"
msgstr "Пометить данные, не связанные с другими значениями"
-#: modules/process/mark_disconn.c:187 modules/process/obj_synth.c:422
-#: modules/process/scars.c:279
+#: modules/process/mark_disconn.c:187 modules/process/obj_synth.c:419
+#: modules/process/scars.c:297
msgid "Positive"
msgstr "Положительные"
-#: modules/process/mark_disconn.c:188 modules/process/obj_synth.c:423
-#: modules/process/scars.c:280
+#: modules/process/mark_disconn.c:188 modules/process/obj_synth.c:420
+#: modules/process/scars.c:298
msgid "Negative"
msgstr "Отрицательные"
@@ -11259,11 +11604,11 @@ msgstr "Тип дефекта:"
msgid "Defect _radius:"
msgstr "_Радиус дефекта:"
-#: modules/process/mark_disconn.c:563
+#: modules/process/mark_disconn.c:552
msgid "Filtering..."
msgstr "Фильтрация..."
-#: modules/process/mark_disconn.c:590
+#: modules/process/mark_disconn.c:579
msgid "Marking outliers..."
msgstr "Помечаются выпадающие области..."
@@ -11279,55 +11624,59 @@ msgstr "/_Маска/_Пометить с помощью..."
msgid "Mask combining and modification"
msgstr "Изменение и комбинирование масок"
-#: modules/process/mark_with.c:192
+#: modules/process/mark_with.c:193
msgid "Mark With"
msgstr "Пометить с помощью"
-#: modules/process/mark_with.c:238
+#: modules/process/mark_with.c:231 modules/process/mask_morph.c:209
+msgid "Operation:"
+msgstr "Операция:"
+
+#: modules/process/mark_with.c:239
msgid "Se_t mask"
msgstr "_Установить маску"
-#: modules/process/mark_with.c:239
+#: modules/process/mark_with.c:240
msgid "_Add mask"
msgstr "_Добавить маску"
-#: modules/process/mark_with.c:240
+#: modules/process/mark_with.c:241
msgid "_Subtract mask"
msgstr "_Вычесть маску"
-#: modules/process/mark_with.c:241
+#: modules/process/mark_with.c:242
msgid "_Intersect masks"
msgstr "_Пересечение масок"
-#: modules/process/mark_with.c:247
+#: modules/process/mark_with.c:248
msgid "Mark with:"
msgstr "Пометить с помощью:"
-#: modules/process/mark_with.c:255
+#: modules/process/mark_with.c:256
msgid "with|_Mask"
msgstr "_Маски"
-#: modules/process/mark_with.c:257
+#: modules/process/mark_with.c:258
msgid "with|_Data"
msgstr "Данн_ых"
-#: modules/process/mark_with.c:259
+#: modules/process/mark_with.c:260
msgid "with|_Presentation"
msgstr "П_резентации"
-#: modules/process/mark_with.c:293
+#: modules/process/mark_with.c:297
msgid "Marked data range:"
msgstr "Помеченный диапазон данных:"
-#: modules/process/mark_with.c:301
+#: modules/process/mark_with.c:305
msgid "_Minimum:"
msgstr "М_инимум:"
-#: modules/process/mark_with.c:310
+#: modules/process/mark_with.c:314
msgid "M_aximum:"
msgstr "М_аксимум:"
-#: modules/process/mark_with.c:378
+#: modules/process/mark_with.c:382
msgid "Operand"
msgstr "Операнд"
@@ -11363,107 +11712,107 @@ msgstr "Распространить на:"
msgid "Preserve existing masks"
msgstr "Сохранить существующие маски"
-#: modules/process/mask_edt.c:95
+#: modules/process/mask_edt.c:89
msgid "Performs simple and true Euclidean distance transforms of masks."
msgstr "Преобразует маски в расстояние простых видов и эвклидово."
-#: modules/process/mask_edt.c:109
+#: modules/process/mask_edt.c:103
msgid "/_Mask/Distanc_e Transform..."
msgstr "/_Маска/Преобразование в расстояни_е..."
-#: modules/process/mask_edt.c:113
+#: modules/process/mask_edt.c:107
msgid "Distance transform of mask"
msgstr "Преобразование маски в расстояние"
-#: modules/process/mask_edt.c:116
+#: modules/process/mask_edt.c:110
msgid "/_Mask/Thi_n"
msgstr "/_Маска/_Тоньше"
-#: modules/process/mask_edt.c:120
+#: modules/process/mask_edt.c:114
msgid "Thin mask"
msgstr "Сделать маску тоньше"
-#: modules/process/mask_edt.c:330 modules/process/mask_edt.c:352
+#: modules/process/mask_edt.c:164 modules/process/mask_edt.c:186
msgid "Distance Transform"
msgstr "Преобразование расстояния"
-#: modules/process/mask_edt.c:340
+#: modules/process/mask_edt.c:174
msgid "Interior"
msgstr "Внутреннее"
-#: modules/process/mask_edt.c:341
+#: modules/process/mask_edt.c:175
msgid "Exterior"
msgstr "Внешнее"
-#: modules/process/mask_edt.c:342
+#: modules/process/mask_edt.c:176
msgid "Two-sided"
msgstr "Двустороннее"
-#: modules/process/mask_edt.c:373 modules/tools/maskedit.c:634
+#: modules/process/mask_edt.c:207 modules/tools/maskedit.c:640
msgid "_Distance type:"
msgstr "Тип _расстояния:"
-#: modules/process/mask_edt.c:394 modules/tools/maskedit.c:640
+#: modules/process/mask_edt.c:228 modules/tools/maskedit.c:646
msgid "Shrink from _border"
msgstr "Ужать от _границы"
-#: modules/process/mask_morph.c:117
+#: modules/process/mask_morph.c:116
msgid "Performs basic morphological operations with masks."
msgstr "Производит основные морфологические операции над масками."
-#: modules/process/mask_morph.c:131
-msgid "/_Mask/Morphological Operation..."
-msgstr "/_Маска/Морфологическая операция..."
+#: modules/process/mask_morph.c:130
+msgid "/_Mask/Morpho_logical Operation..."
+msgstr "/_Маска/Морфо_логическая операция..."
-#: modules/process/mask_morph.c:135
+#: modules/process/mask_morph.c:134
msgid "Morphological operation with mask"
msgstr "Морфологическая операция над маской"
-#: modules/process/mask_morph.c:169
+#: modules/process/mask_morph.c:168
msgid "Erosion"
msgstr "Эрозия"
-#: modules/process/mask_morph.c:170
+#: modules/process/mask_morph.c:169
msgid "Dilation"
msgstr "Расширение"
-#: modules/process/mask_morph.c:171 modules/tools/filter.c:242
+#: modules/process/mask_morph.c:170 modules/tools/filter.c:243
msgid "filter|Opening"
msgstr "Размыкание"
-#: modules/process/mask_morph.c:172 modules/tools/filter.c:243
+#: modules/process/mask_morph.c:171 modules/tools/filter.c:244
msgid "filter|Closing"
msgstr "Замыкание"
-#: modules/process/mask_morph.c:173 modules/tools/filter.c:244
+#: modules/process/mask_morph.c:172 modules/tools/filter.c:245
msgid "ASF Opening"
msgstr "Размыкание ASF"
-#: modules/process/mask_morph.c:174 modules/tools/filter.c:245
+#: modules/process/mask_morph.c:173 modules/tools/filter.c:246
msgid "ASF Closing"
msgstr "Замыкание ASF"
-#: modules/process/mask_morph.c:178
+#: modules/process/mask_morph.c:177
msgid "Octagon"
msgstr "Восьмиугольник"
-#: modules/process/mask_morph.c:181
+#: modules/process/mask_morph.c:180
msgid "Another mask"
msgstr "Другая маска"
-#: modules/process/mask_morph.c:192
+#: modules/process/mask_morph.c:191
msgid "Morphological Operation"
msgstr "Морфологическая операция"
-#: modules/process/mask_morph.c:224
+#: modules/process/mask_morph.c:223
msgid "Structuring element:"
msgstr "Структурирующий элемент:"
-#: modules/process/mask_morph.c:238 modules/tools/maskedit.c:524
+#: modules/process/mask_morph.c:237 modules/tools/maskedit.c:528
msgid "_Radius:"
msgstr "Ра_диус:"
-#: modules/process/mask_morph.c:249
+#: modules/process/mask_morph.c:248
msgid "_Mask:"
msgstr "_Маска:"
@@ -11471,39 +11820,59 @@ msgstr "_Маска:"
msgid "_Trim empty borders"
msgstr "_Подрезать пустые границы"
-#: modules/process/maskcor.c:86
+#: modules/process/mask_noisify.c:83
+msgid "Adds salt and/or pepper noise to mask."
+msgstr "Добавляет шум типа соль и/или перец к маске."
+
+#: modules/process/mask_noisify.c:97
+msgid "/_Mask/_Noisify..."
+msgstr "/_Маска/_Зашумление..."
+
+#: modules/process/mask_noisify.c:101
+msgid "Add noise to mask"
+msgstr "Добавить шум к маске"
+
+#: modules/process/mask_noisify.c:141
+msgid "Noisify Mask"
+msgstr "Зашумление маски"
+
+#: modules/process/mask_noisify.c:184
+msgid "_Alter only boundaries"
+msgstr "_Менять только границы"
+
+#: modules/process/maskcor.c:87
msgid "Creates mask by correlation with another data."
msgstr "Создаёт маску путём корреляции с другими данными."
-#: modules/process/maskcor.c:100
+#: modules/process/maskcor.c:101
msgid "/M_ultidata/_Mask by Correlation..."
msgstr "/М_ножественные данные/_Маска по корреляции..."
-#: modules/process/maskcor.c:104
+#: modules/process/maskcor.c:105
msgid "Create mask by correlation with another data"
msgstr "Создать маску путём корреляции с другими данными"
-#: modules/process/maskcor.c:141
+#: modules/process/maskcor.c:142
msgid "Mask by Correlation"
msgstr "Пометить корреляцией"
-#: modules/process/maskcor.c:165
+#: modules/process/maskcor.c:166
msgid "Correlation _kernel:"
msgstr "_Ядро корреляции:"
-#: modules/process/maskcor.c:172
+#: modules/process/maskcor.c:173
msgid "Objects marked"
msgstr "Помеченные объекты"
-#: modules/process/maskcor.c:173
+#: modules/process/maskcor.c:174
msgid "Correlation maxima"
msgstr "Максимумы корреляции"
-#: modules/process/maskcor.c:174 modules/process/maskcor.c:356
+#: modules/process/maskcor.c:175 modules/process/maskcor.c:360
msgid "Correlation score"
msgstr "Степень корреляции"
-#: modules/process/maskcor.c:183
+#: modules/process/maskcor.c:185
msgid "Correlation _method:"
msgstr "_Метод корреляции:"
@@ -11532,8 +11901,8 @@ msgid "/_Mask/_Extract Mask"
msgstr "/_Маска/И_звлечь маску"
#: modules/process/maskops.c:78
-msgid "Extract mask to a new channel"
-msgstr "Извлечь маску в новый канал"
+msgid "Extract mask to a new image"
+msgstr "Извлечь маску в новое изображение"
#: modules/process/maskops.c:81
msgid "/_Grains/_Remove Edge-Touching"
@@ -11559,35 +11928,31 @@ msgstr "Обрезать непересекающиеся области дву
msgid "Mutual Crop"
msgstr "Взаимно кадрировать"
-#: modules/process/mcrop.c:174
+#: modules/process/mcrop.c:173
msgid "_Select second argument:"
msgstr "_Второй аргумент:"
-#: modules/process/measure_lattice.c:174
+#: modules/process/measure_lattice.c:165
msgid "Measures parameters of two-dimensional lattices."
msgstr "Измеряет параметры двумерных решеток."
-#: modules/process/measure_lattice.c:188
+#: modules/process/measure_lattice.c:179
msgid "/_Statistics/Measure _Lattice..."
msgstr "/_Статистика/Измерить _решетку..."
-#: modules/process/measure_lattice.c:192
+#: modules/process/measure_lattice.c:183
msgid "Measure lattice"
msgstr "Измерить решетку"
-#: modules/process/measure_lattice.c:253
+#: modules/process/measure_lattice.c:243
msgid "Measure Lattice"
msgstr "Измерить решетку"
-#: modules/process/measure_lattice.c:259
-msgid "_Refine"
-msgstr "_Уточнить"
-
-#: modules/process/measure_lattice.c:330
+#: modules/process/measure_lattice.c:320
msgid "_ACF"
msgstr "_ФАК"
-#: modules/process/measure_lattice.c:331
+#: modules/process/measure_lattice.c:321
msgid "_PSDF"
msgstr "_ФСПМ"
@@ -11603,30 +11968,30 @@ msgstr "_Решетку"
msgid "_Vectors"
msgstr "_Векторы"
-#: modules/process/measure_lattice.c:596
+#: modules/process/measure_lattice.c:589
msgid "Save Lattice Parameters"
msgstr "Сохранить параметры решетки"
-#: modules/process/measure_lattice.c:634
+#: modules/process/measure_lattice.c:627
#, c-format
msgid "Vector %d:"
msgstr "Вектор %d:"
-#: modules/process/measure_lattice.c:643
+#: modules/process/measure_lattice.c:636
#, c-format
msgid "Length %d:"
msgstr "Длина %d:"
-#: modules/process/measure_lattice.c:650
+#: modules/process/measure_lattice.c:643
#, c-format
msgid "Angle %d:"
msgstr "Угол %d:"
-#: modules/process/measure_lattice.c:665
+#: modules/process/measure_lattice.c:657
msgid "Angle:"
msgstr "Угол:"
-#: modules/process/measure_lattice.c:681
+#: modules/process/measure_lattice.c:673
msgid "Lattice Parameters"
msgstr "Параметры решетки"
@@ -11650,11 +12015,11 @@ msgstr "Выравнивание по срединному..."
msgid "Median Level"
msgstr "Выровнять по срединному"
-#: modules/process/median-bg.c:199 modules/process/sphere-revolve.c:237
+#: modules/process/median-bg.c:199 modules/process/sphere-revolve.c:336
msgid "Real _radius:"
msgstr "Реальный _радиус:"
-#: modules/process/median-bg.c:209 modules/process/sphere-revolve.c:247
+#: modules/process/median-bg.c:209 modules/process/sphere-revolve.c:346
msgid "_Pixel radius:"
msgstr "Радиус в _пикселях:"
@@ -11694,7 +12059,7 @@ msgstr "Первый операнд"
msgid "Second operand"
msgstr "Второй операнд."
-#: modules/process/merge.c:197 modules/xyz/xyz_raster.c:643
+#: modules/process/merge.c:197 modules/xyz/xyz_raster.c:612
msgid "Average"
msgstr "Среднее"
@@ -11746,6 +12111,224 @@ msgstr "Добавить _маску внешних пикселей"
msgid "Merged images"
msgstr "Объединённые изображения"
+#: modules/process/mfm_current.c:163
+msgid "Simulation of current line magnetic field"
+msgstr "Модель магнитного поля линии тока"
+
+#: modules/process/mfm_current.c:177
+msgid "/SPM M_odes/_MFM/_Current Line Field..."
+msgstr "/_Режимы СЗМ/_МСМ/Поле линии _тока..."
+
+#: modules/process/mfm_current.c:181
+msgid "Simulate stray field above current line"
+msgstr "Моделирует поле рассеяния над линией тока"
+
+#: modules/process/mfm_current.c:280 modules/process/mfm_parallel.c:282
+msgid "Simulated field"
+msgstr "Рассчитанное поле"
+
+#: modules/process/mfm_current.c:322 modules/process/mfm_field.c:266
+#: modules/process/mfm_parallel.c:324
+msgid "Point charge"
+msgstr "Точечный заряд"
+
+#: modules/process/mfm_current.c:323 modules/process/mfm_field.c:267
+#: modules/process/mfm_parallel.c:325
+msgid "Bar"
+msgstr "Брус"
+
+#: modules/process/mfm_current.c:330
+msgid "Current Line Stray Field"
+msgstr "Поле рассеяния линии тока"
+
+#: modules/process/mfm_current.c:415
+msgid "Output"
+msgstr "Вывод"
+
+#: modules/process/mfm_current.c:420 modules/process/mfm_field.c:320
+#: modules/process/mfm_parallel.c:415
+msgid "_Output plane height:"
+msgstr "Высота _выводимой плоскости:"
+
+#: modules/process/mfm_current.c:428
+msgid "_Stripe width:"
+msgstr "Ширина _полосы:"
+
+#: modules/process/mfm_current.c:436
+msgid "Stripe _current:"
+msgstr "_Ток полосы:"
+
+#: modules/process/mfm_current.c:444
+msgid "_Position:"
+msgstr "_Расположение:"
+
+#: modules/process/mfm_current.c:461
+msgid "Probe"
+msgstr "Зонд"
+
+#: modules/process/mfm_current.c:469
+msgid "P_robe type:"
+msgstr "Тип _зонда:"
+
+#: modules/process/mfm_current.c:475 modules/process/mfm_field.c:389
+#: modules/process/mfm_parallel.c:482
+msgid "Tip _magnetization:"
+msgstr "_Намагниченность зонда:"
+
+#: modules/process/mfm_current.c:484 modules/process/mfm_field.c:397
+#: modules/process/mfm_parallel.c:491
+msgid "Bar width _x:"
+msgstr "Ширина _полосы по x:"
+
+#: modules/process/mfm_current.c:493 modules/process/mfm_field.c:405
+#: modules/process/mfm_parallel.c:500
+msgid "Bar width _y:"
+msgstr "ширина полос_ы по y:"
+
+#: modules/process/mfm_current.c:502 modules/process/mfm_field.c:413
+#: modules/process/mfm_parallel.c:509
+msgid "Bar length (_z):"
+msgstr "_Длина полосы (z):"
+
+#: modules/process/mfm_field.c:146
+msgid "Simulation of magnetic field above perpendicular media"
+msgstr "Модель магнитного поля над поперечной средой"
+
+#: modules/process/mfm_field.c:160
+msgid "/SPM M_odes/_MFM/_Perpendicular Media Field..."
+msgstr "/_Режимы СЗМ/_МСМ/Поле _перпендикулярной среды..."
+
+#: modules/process/mfm_field.c:164
+msgid "Compute stray field above perpendicular magnetic medium"
+msgstr ""
+"Рассчитывает поле рассеяния над магнитной средой для перпендикулярной записи"
+
+#: modules/process/mfm_field.c:276
+msgid "Perpendicular Media Stray Field"
+msgstr "Поле рассеяния перпендикулярной среды"
+
+#: modules/process/mfm_field.c:328 modules/process/mfm_parallel.c:423
+msgid "_Film thickness:"
+msgstr "_Толщина плёнки:"
+
+#: modules/process/mfm_field.c:336
+msgid "_Magnetic charge:"
+msgstr "_Магнитный заряд:"
+
+#: modules/process/mfm_field.c:344
+msgid "Include domain _walls"
+msgstr "Включить _границы доменов"
+
+#: modules/process/mfm_field.c:354
+msgid "_Exchange constant:"
+msgstr "Постоянная о_бменного взаимодейстивия:"
+
+#: modules/process/mfm_field.c:362
+msgid "_Uniaxial anisotropy:"
+msgstr "Одноосевая _анизотропия:"
+
+#: modules/process/mfm_field.c:383 modules/process/mfm_parallel.c:476
+msgid "_Probe type:"
+msgstr "Тип _зонда:"
+
+#: modules/process/mfm_findshift.c:88
+msgid "Lift height difference estimation from data blur"
+msgstr "Оценка разницы высоты подъёма из размытия данных"
+
+#: modules/process/mfm_findshift.c:102
+msgid "/SPM M_odes/_MFM/_Estimate Shift in Z..."
+msgstr "/_Режимы СЗМ/_МСМ/О_ценка сдвига по Z..."
+
+#: modules/process/mfm_findshift.c:106
+msgid "Estimate lift height difference in MFM data"
+msgstr "Оценить разницу высоты подъёма в данных МСМ"
+
+#: modules/process/mfm_findshift.c:166 modules/process/psf.c:340
+msgid "Searching..."
+msgstr "Поиск..."
+
+#: modules/process/mfm_findshift.c:196
+msgid "Estimated shift:"
+msgstr "Оценка сдвига:"
+
+#: modules/process/mfm_findshift.c:211
+msgid "Shifted field difference"
+msgstr "Сдвинутое различие поля"
+
+#: modules/process/mfm_findshift.c:228
+msgid "Estimate Lift Height Shift"
+msgstr "Оценить сдвиг высоты подъёма"
+
+#: modules/process/mfm_findshift.c:255
+msgid "Data to compare:"
+msgstr "Данные для сравнения:"
+
+#: modules/process/mfm_findshift.c:261
+msgid "Search _from:"
+msgstr "_Искать от:"
+
+#: modules/process/mfm_findshift.c:269
+msgid "Search _to:"
+msgstr "Искать _до:"
+
+#: modules/process/mfm_parallel.c:165
+msgid "Simulation of parallel magnetic media"
+msgstr "Моделирование магнитной среды с параллельной записью"
+
+#: modules/process/mfm_parallel.c:179
+msgid "/SPM M_odes/_MFM/Para_llel Media Field..."
+msgstr "/_Режимы СЗМ/_МСМ/Поле п_араллельной среды..."
+
+#: modules/process/mfm_parallel.c:183
+msgid "Simulate stray field above parallel magnetic medium"
+msgstr ""
+"Рассчитывает поле рассеяния над магнитной средой для параллельной записи"
+
+#: modules/process/mfm_parallel.c:331
+msgid "Parallel Media Stray Field"
+msgstr "Поле рассеяния параллельной среды"
+
+#: modules/process/mfm_parallel.c:431
+msgid "_Remanent magnetization:"
+msgstr "Остато_чная намагниченность:"
+
+#: modules/process/mfm_parallel.c:439
+msgid "Size _A (dir. left):"
+msgstr "Разм_ер A (напр. налево):"
+
+#: modules/process/mfm_parallel.c:447
+msgid "Size _B (dir. right):"
+msgstr "Разме_р B (напр. направо):"
+
+#: modules/process/mfm_parallel.c:455
+msgid "_Gap size:"
+msgstr "Размер _зазора:"
+
+#: modules/process/mfm_shift.c:87
+msgid "Simulation of magnetic field z component change for another level"
+msgstr ""
+"Моделирование изменения Z-компоненты магнитного поля для другого уровня"
+
+#: modules/process/mfm_shift.c:101
+msgid "/SPM M_odes/_MFM/_Field Shift in Z..."
+msgstr "/_Режимы СЗМ/_МСМ/_Сдвиг поля по Z..."
+
+#: modules/process/mfm_shift.c:105
+msgid "Compute stray field shift for another z level"
+msgstr "Рассчитывает сдвиг поля рассеяния для другого уровня z."
+
+#: modules/process/mfm_shift.c:146
+msgid "Shifted field"
+msgstr "Сдвинутое поле"
+
+#: modules/process/mfm_shift.c:164
+msgid "Stray Field Plane Shift"
+msgstr "Смещение поля рассеяния в плоскости"
+
+#: modules/process/mfm_shift.c:209
+msgid "_Z shift by:"
+msgstr "Сме_щение по Z до:"
+
#: modules/process/nanoindent_adjust.c:89
msgid "Adjust images of two indentor prints."
msgstr "Подгоняет друг к другу изображения двух отпечатков индентора."
@@ -11782,14 +12365,14 @@ msgstr "В_ращать данные"
msgid "E_xtrapolate result data out of measured range"
msgstr "_Экстраполировать полученные данные вне измеренного диапазона"
-#: modules/process/nanoindent_adjust.c:295
+#: modules/process/nanoindent_adjust.c:296
msgid ""
"Tip has different range/resolution ratio than image. Tip will be resampled."
msgstr ""
"Зонд имеет другое отношение диапазон/разрешение чем изображение. Размер "
"изображения зонда будет изменён."
-#: modules/process/nanoindent_adjust.c:334
+#: modules/process/nanoindent_adjust.c:335
msgid "Immersed detail data"
msgstr "Данные встроенного изображения с лучшим разрешением"
@@ -11830,244 +12413,232 @@ msgstr "Ошибка обучения"
msgid "error"
msgstr "ошибка"
-#: modules/process/neural.c:503
+#: modules/process/neural.c:504
msgid "NN training error"
msgstr "Ошибка обучения нейросети"
-#: modules/process/neural.c:516
+#: modules/process/neural.c:517
msgid "Training"
msgstr "Обучение"
-#: modules/process/neural.c:520
+#: modules/process/neural.c:521
msgid "_Model:"
msgstr "_Модель:"
-#: modules/process/neural.c:530
+#: modules/process/neural.c:532
msgid "_Signal:"
msgstr "_Сигнал:"
-#: modules/process/neural.c:541
+#: modules/process/neural.c:544
msgid "Training ste_ps:"
msgstr "Шагов об_учения:"
-#: modules/process/neural.c:557
+#: modules/process/neural.c:561
msgid "Model"
msgstr "Модель"
-#: modules/process/neural.c:558
+#: modules/process/neural.c:562
msgid "Signal"
msgstr "Сигнал"
-#: modules/process/neural.c:575
+#: modules/process/neural.c:579
msgid "verb|_Train"
msgstr "О_бучение"
-#: modules/process/neural.c:580
+#: modules/process/neural.c:584
msgid "Re_initialize"
msgstr "Пере_инициализация"
-#: modules/process/neural.c:613
+#: modules/process/neural.c:617
msgid "Network"
msgstr "Сеть"
-#: modules/process/neural.c:619
+#: modules/process/neural.c:623
msgid "Window _width:"
msgstr "_Ширина окна:"
-#: modules/process/neural.c:627
+#: modules/process/neural.c:631
msgid "Window h_eight:"
msgstr "_Высота окна:"
-#: modules/process/neural.c:635
+#: modules/process/neural.c:639
msgid "_Hidden nodes:"
msgstr "Скр_ытые узлы:"
-#: modules/process/neural.c:643
+#: modules/process/neural.c:647
msgid "Result Units"
msgstr "Единицы результата"
-#: modules/process/neural.c:650
+#: modules/process/neural.c:654
msgid "Power of source _XY:"
msgstr "Степень _XY источника:"
-#: modules/process/neural.c:658
+#: modules/process/neural.c:663
msgid "Power of source _Z:"
msgstr "Степень _Z источника:"
-#: modules/process/neural.c:666
+#: modules/process/neural.c:672
msgid "_Fixed units:"
msgstr "_Заданные единицы:"
-#: modules/process/neural.c:676
+#: modules/process/neural.c:683
msgid "Networks"
msgstr "Сети"
-#: modules/process/neural.c:723
+#: modules/process/neural.c:730
msgid "Network _name:"
msgstr "_Название нейросети:"
-#: modules/process/neural.c:775
+#: modules/process/neural.c:782
msgid "Apply Neural Network"
msgstr "Применить нейросеть"
-#: modules/process/neural.c:798
+#: modules/process/neural.c:805
msgid "_Scale proportionally to input"
msgstr "_Масштабировать пропорционально входным данным"
-#: modules/process/neural.c:929
+#: modules/process/neural.c:936
msgid "Model and signal are not compatible."
msgstr "Модель и сигнал несовместимы."
-#: modules/process/neural.c:937
+#: modules/process/neural.c:944
msgid "A field dimension is too small for chosen window size."
msgstr "Размер поля слишком мал для выбранного размера окна."
-#: modules/process/neural.c:1183 modules/process/neural.c:1349
+#: modules/process/neural.c:1190 modules/process/neural.c:1356
msgid "Evaluating..."
msgstr "Расчёт..."
-#: modules/process/neural.c:1309
+#: modules/process/neural.c:1316
msgid "Training was canceled."
msgstr "Обучение было отменено."
-#: modules/process/neural.c:1319
+#: modules/process/neural.c:1326
#, c-format
msgid "Mean difference: %.*f %s"
msgstr "Среднее различие: %.*f %s"
-#: modules/process/neural.c:1371
+#: modules/process/neural.c:1378
msgid "Evaluated signal"
msgstr "Рассчитанный сигнал"
-#: modules/process/noise_synth.c:196
+#: modules/process/noise_synth.c:194
msgid "Generates uncorrelated random noise."
msgstr "Создаёт некоррелированный случайный шум."
-#: modules/process/noise_synth.c:210
+#: modules/process/noise_synth.c:208
msgid "/S_ynthetic/_Noise..."
msgstr "/Син_тез/_Шум..."
-#: modules/process/noise_synth.c:214
+#: modules/process/noise_synth.c:212
msgid "Generate surface of uncorrelated noise"
msgstr "Создать поверхность из некоррелированного шума"
-#: modules/process/noise_synth.c:334
+#: modules/process/noise_synth.c:332
msgid "Random Noise"
msgstr "Случайный шум"
-#: modules/process/obj_synth.c:274
+#: modules/process/obj_synth.c:270
msgid "Spheres"
msgstr "Сферы"
-#: modules/process/obj_synth.c:275
+#: modules/process/obj_synth.c:271
msgid "Boxes"
msgstr "Параллелепипеды"
-#: modules/process/obj_synth.c:276
+#: modules/process/obj_synth.c:272
msgid "Cones"
msgstr "Конусы"
-#: modules/process/obj_synth.c:277
+#: modules/process/obj_synth.c:273
msgid "Pyramids"
msgstr "Пирамиды"
-#: modules/process/obj_synth.c:278
+#: modules/process/obj_synth.c:274
msgid "Diamonds"
msgstr "Бриллианты"
-#: modules/process/obj_synth.c:279
+#: modules/process/obj_synth.c:275
msgid "Tetrahedrons"
msgstr "Тетраэдры"
-#: modules/process/obj_synth.c:280
+#: modules/process/obj_synth.c:276
msgid "Nuggets"
msgstr "Частицы"
-#: modules/process/obj_synth.c:281
+#: modules/process/obj_synth.c:277
msgid "Thatches"
msgstr "Листья камыша"
-#: modules/process/obj_synth.c:282
+#: modules/process/obj_synth.c:278
msgid "Tents"
msgstr "Палатки"
-#: modules/process/obj_synth.c:283
+#: modules/process/obj_synth.c:279
msgid "Gaussians"
msgstr "Гауссианы"
-#: modules/process/obj_synth.c:284
+#: modules/process/obj_synth.c:280
msgid "Doughnuts"
msgstr "Бублики"
-#: modules/process/obj_synth.c:285
+#: modules/process/obj_synth.c:281
msgid "Parabolic bumps"
msgstr "Параболические выступы"
-#: modules/process/obj_synth.c:291
+#: modules/process/obj_synth.c:287
msgid "Generates randomly patterned surfaces by placing objects."
msgstr "Создаёт поверхности со случайным узором расставляя объекты."
-#: modules/process/obj_synth.c:305
-msgid "/S_ynthetic/_Objects..."
-msgstr "/Син_тез/_Объекты..."
+#: modules/process/obj_synth.c:301
+msgid "/S_ynthetic/_Deposition/_Objects..."
+msgstr "/Син_тез/_Осаждение/_Объекты..."
-#: modules/process/obj_synth.c:309
+#: modules/process/obj_synth.c:305
msgid "Generate surface of randomly placed objects"
msgstr "Создать поверхность из случайно расположенных объектов"
-#: modules/process/obj_synth.c:424
+#: modules/process/obj_synth.c:421
msgid "Both (random)"
msgstr "Обе (случайно)"
-#: modules/process/obj_synth.c:439
+#: modules/process/obj_synth.c:436
msgid "Random Objects"
msgstr "Случайные объекты"
-#: modules/process/obj_synth.c:513
-msgid "_Shape:"
-msgstr "_Форма:"
-
-#: modules/process/obj_synth.c:531
-msgid "obj."
-msgstr "объект."
-
-#: modules/process/obj_synth.c:551
+#: modules/process/obj_synth.c:549
msgid "Aspect Ratio"
msgstr "Пропорции"
-#: modules/process/obj_synth.c:558
+#: modules/process/obj_synth.c:556
msgid "_Aspect ratio:"
msgstr "_Пропорции:"
-#: modules/process/obj_synth.c:588
+#: modules/process/obj_synth.c:586
msgid "Scales _with size"
msgstr "_Масштабируется с размером"
-#: modules/process/obj_synth.c:612
+#: modules/process/obj_synth.c:611
msgid "_Feature type:"
msgstr "Тип осо_бенности:"
-#: modules/process/obj_synth.c:807
-msgid "_Truncate:"
-msgstr "_Усечение:"
-
-#: modules/process/otsu_threshold.c:39 modules/process/otsu_threshold.c:59
+#: modules/process/otsu_threshold.c:40 modules/process/otsu_threshold.c:60
msgid "Automated threshold using Otsu's method on heights."
msgstr "Автоматический порог, применяющий метод Оцу к высотам."
-#: modules/process/otsu_threshold.c:55
-msgid "/_Grains/_Mark by Otsu's..."
+#: modules/process/otsu_threshold.c:56
+msgid "/_Grains/_Mark by Otsu's"
msgstr "/Зёрн_а/Пометить по методу _Оцу..."
-#: modules/process/outliers.c:40
+#: modules/process/outliers.c:41
msgid "Creates mask of outliers."
msgstr "Создаёт маску выпадающих деталей."
-#: modules/process/outliers.c:54
+#: modules/process/outliers.c:55
msgid "/_Correct Data/Mask of _Outliers"
msgstr "/Исправить _данные/Маска в_ыпадающего"
-#: modules/process/outliers.c:58
+#: modules/process/outliers.c:59
msgid "Mark data farther than 3σ from mean value"
msgstr "Пометить данные которые находятся дальше, чем 3σ от среднего значения"
@@ -12093,80 +12664,100 @@ msgstr "Структура"
msgid "_Pattern:"
msgstr "С_труктура:"
-#: modules/process/pat_synth.c:812
+#: modules/process/pat_synth.c:813
msgid "Flat"
msgstr "Плоскость"
-#: modules/process/pat_synth.c:820
+#: modules/process/pat_synth.c:821
msgid "_Flat width:"
msgstr "_Ширина плоскости:"
-#: modules/process/pat_synth.c:837 modules/process/pat_synth.c:1139
-#: modules/process/pat_synth.c:1474
+#: modules/process/pat_synth.c:838 modules/process/pat_synth.c:1140
+#: modules/process/pat_synth.c:1475
msgid "_Slope width:"
msgstr "Ширина _уклона:"
-#: modules/process/pat_synth.c:1099
+#: modules/process/pat_synth.c:1100
msgid "Top"
msgstr "Вершина"
-#: modules/process/pat_synth.c:1106
+#: modules/process/pat_synth.c:1107
msgid "Flat _top width:"
msgstr "Ширина плоской _вершины:"
-#: modules/process/pat_synth.c:1114
+#: modules/process/pat_synth.c:1115
msgid "Bottom"
msgstr "Дно"
-#: modules/process/pat_synth.c:1122
+#: modules/process/pat_synth.c:1123
msgid "Flat _bottom width:"
msgstr "Ширина плоского _дна:"
-#: modules/process/pat_synth.c:1440
+#: modules/process/pat_synth.c:1441
msgid "_Distance:"
msgstr "Р_асстояние:"
-#: modules/process/pid.c:96
-msgid "A simple PID simulator"
-msgstr "Простой симулятор ПИД"
+#: modules/process/phase_synth.c:136
+msgid "Generates phase-separated structures."
+msgstr "Генерирует структуры с разделением фаз."
-#: modules/process/pid.c:110
-msgid "/_Tip and Indentation/_PID simulation..."
+#: modules/process/phase_synth.c:150
+msgid "/S_ynthetic/P_hases..."
+msgstr "/Син_тез/_Фазы..."
+
+#: modules/process/phase_synth.c:154
+msgid "Generate surface with separated phases"
+msgstr "Генерировать поверхность с раздельными фазами."
+
+#: modules/process/phase_synth.c:203
+msgid "Separated Phases"
+msgstr "Раздельные фазы"
+
+#: modules/process/phase_synth.c:287
+msgid "Size s_pread:"
+msgstr "Р_азброс размеров:"
+
+#: modules/process/pid.c:95
+msgid "A simple PID simulator"
+msgstr "Простой симулятор ПИД"
+
+#: modules/process/pid.c:109
+msgid "/_Tip and Indentation/_PID simulation..."
msgstr "/_Зонд и индентация/Модель _ПИД..."
-#: modules/process/pid.c:114
+#: modules/process/pid.c:113
msgid "Simulate PID effects on measurement"
msgstr "Симулировать влияние ПИД на измерения"
-#: modules/process/pid.c:158
+#: modules/process/pid.c:157
msgid "PID FW result"
msgstr "Прямой результат ПИД"
-#: modules/process/pid.c:167
+#: modules/process/pid.c:166
msgid "PID FW max. force"
msgstr "Макс. прямая сила ПИД"
-#: modules/process/pid.c:176
+#: modules/process/pid.c:175
msgid "PID REV result"
msgstr "Обр. результат ПИД"
-#: modules/process/pid.c:185
+#: modules/process/pid.c:184
msgid "PID REV max. force"
msgstr "Макс. обр. сила ПИД"
-#: modules/process/pid.c:198
+#: modules/process/pid.c:196
msgid "PID simulation"
msgstr "Симуляция ПИД"
-#: modules/process/pid.c:215
+#: modules/process/pid.c:214
msgid "_Proportional:"
msgstr "_Пропорциональный:"
-#: modules/process/pid.c:221
+#: modules/process/pid.c:220
msgid "_Integral:"
msgstr "_Интеграл:"
-#: modules/process/pid.c:227
+#: modules/process/pid.c:226
msgid "_Integration steps:"
msgstr "Шагов _интегрирования:"
@@ -12174,15 +12765,15 @@ msgstr "Шагов _интегрирования:"
msgid "_Derivative:"
msgstr "_Производная:"
-#: modules/process/pid.c:241
+#: modules/process/pid.c:240
msgid "PID/scan speed _ratio:"
msgstr "_Отн. ПИД/скорость сканирования:"
-#: modules/process/pid.c:253
+#: modules/process/pid.c:255
msgid "Force strength:"
msgstr "Величина силы:"
-#: modules/process/pid.c:259
+#: modules/process/pid.c:261
msgid "Force setpoint:"
msgstr "заданное значение силы:"
@@ -12190,7 +12781,7 @@ msgstr "заданное значение силы:"
msgid "Scanning..."
msgstr "Сканирование..."
-#: modules/process/pid.c:396
+#: modules/process/pid.c:401
msgid "Computation diverged, try to change parameters"
msgstr "Расчёт расходится, попробуйте изменить параметры"
@@ -12210,23 +12801,23 @@ msgstr "Накладывает полиномиальное искривлени
msgid "Distort by Polynomial"
msgstr "Полиномиально искривить"
-#: modules/process/polydistort.c:282
+#: modules/process/polydistort.c:285
msgid "Ori_ginal"
msgstr "Ис_ходный"
-#: modules/process/polydistort.c:283
+#: modules/process/polydistort.c:286
msgid "_Transformed"
msgstr "_Преобразованный"
-#: modules/process/polydistort.c:289
+#: modules/process/polydistort.c:292
msgid "X Coefficients"
msgstr "Коэффициенты X"
-#: modules/process/polydistort.c:303
+#: modules/process/polydistort.c:306
msgid "Y Coefficients"
msgstr "Коэффициенты Y"
-#: modules/process/polydistort.c:499
+#: modules/process/polydistort.c:502
msgid "Distorted"
msgstr "Искривлённый"
@@ -12262,23 +12853,23 @@ msgstr "Выровненные данные"
msgid "_Horizontal polynom degree:"
msgstr "_Горизонтальная степень полинома:"
-#: modules/process/polylevel.c:450
+#: modules/process/polylevel.c:451
msgid "_Vertical polynom degree:"
msgstr "_Вертикальная степень полинома:"
-#: modules/process/polylevel.c:456
+#: modules/process/polylevel.c:458
msgid "_Same degrees"
msgstr "_Одинаковые степени"
-#: modules/process/polylevel.c:474
+#: modules/process/polylevel.c:476
msgid "_Maximum polynom degree:"
msgstr "_Максимальная степень полинома:"
-#: modules/process/polylevel.c:561
+#: modules/process/polylevel.c:564
msgid "Polynomial Coefficients"
msgstr "Полиномиальные коэффициенты"
-#: modules/process/polylevel.c:934 modules/tools/distance.c:594
+#: modules/process/polylevel.c:937 modules/tools/distance.c:594
#: modules/tools/selectionmanager.c:720
msgid "Save Table"
msgstr "Сохранение таблицы"
@@ -12300,8 +12891,8 @@ msgid "/_Presentation/E_xtract Presentation"
msgstr "/_Презентация/_Извлечь презентацию"
#: modules/process/presentationops.c:81
-msgid "Extract presentation to a new channel"
-msgstr "Извлекает презентацию в отдельный канал"
+msgid "Extract presentation to a new image"
+msgstr "Извлекает презентацию в отдельное изображение"
#: modules/process/presentationops.c:84
msgid "/_Presentation/_Attach Presentation..."
@@ -12327,6 +12918,10 @@ msgstr "Присоединить презентацию"
msgid "_Data to attach:"
msgstr "Присоединяемые _данные:"
+#: modules/process/preview.h:245
+msgid "Combine with existing mask:"
+msgstr "Объединить с имеющейся маской:"
+
#: modules/process/psdf_logphi.c:76
msgid ""
"Two-dimensional FFT (Fast Fourier Transform) transformed to coordinates (log-"
@@ -12347,10 +12942,79 @@ msgstr "Рассчитать ФСПМ в координатах Log-Phi"
msgid "Log-Phi PSDF"
msgstr "Log-Phi ФСПМ"
-#: modules/process/psdf_logphi.c:275 modules/process/wpour_mark.c:320
+#: modules/process/psdf_logphi.c:276 modules/process/wpour_mark.c:320
msgid "Gaussian _smoothing:"
msgstr "Гауссово _сглаживание"
+#: modules/process/psf-fit.c:165
+msgid "Gaussian (asymmetric)"
+msgstr "Гауссиана (асимметричная)"
+
+#: modules/process/psf-fit.c:177
+msgid "Point spread function estimation by fitting explicit function form."
+msgstr "Оценка функции рассеяния точки аппроксимацией явно заданной функцией."
+
+#: modules/process/psf-fit.c:191
+msgid "/_Statistics/_PSF Fit..."
+msgstr "/_Статистика/_Аппроксимация PSF..."
+
+#: modules/process/psf-fit.c:195
+msgid "Fit PSF from known data and image"
+msgstr "Оценить PSF из известных данных и изображения"
+
+#: modules/process/psf-fit.c:246 modules/process/psf.c:181
+#: modules/process/psf.c:230
+msgid "PSF"
+msgstr "PSF"
+
+#: modules/process/psf-fit.c:254 modules/process/psf.c:195
+msgid "PSF*P"
+msgstr "PSF*P"
+
+#: modules/process/psf-fit.c:271
+msgid "Fit PSF"
+msgstr "Аппроксимация PSF"
+
+#: modules/process/psf-fit.c:289 modules/process/psf.c:286
+msgid "_Ideal response:"
+msgstr "Идеальный отклик:"
+
+#: modules/process/psf.c:117
+msgid "Point spread function estimation"
+msgstr "Оценка функции рассеяния точки (PSF)"
+
+#: modules/process/psf.c:131
+msgid "/_Statistics/_PSF Guess..."
+msgstr "/_Статистика/О_ценка PSF..."
+
+#: modules/process/psf.c:135
+msgid "Estimate PSF from known data and image"
+msgstr "Оценить PSF из известных данных и изображения"
+
+#: modules/process/psf.c:208
+msgid "PSF*P - I"
+msgstr "PSF*P - I"
+
+#: modules/process/psf.c:231
+msgid "Convolved"
+msgstr "После свёртки"
+
+#: modules/process/psf.c:237
+msgid "Estimate PSF"
+msgstr "Оценить PSF"
+
+#: modules/process/psf.c:238
+msgid "_Fit"
+msgstr "_Аппрокс."
+
+#: modules/process/psf.c:295
+msgid "_Display:"
+msgstr "_Показать:"
+
+#: modules/process/psf.c:301
+msgid "_Sigma init:"
+msgstr "Начальная _Sigma:"
+
#: modules/process/rank.c:92
msgid "Enhances local contrast using a rank transform."
msgstr "Улучшает локальный контраст с помощью преобразования ранжирования"
@@ -12401,7 +13065,7 @@ msgstr "/_Базовые действия/Повернуть на _угол..."
msgid "Rotate by arbitrary angle"
msgstr "Вращение на заданный угол"
-#: modules/process/rotate.c:192
+#: modules/process/rotate.c:192 modules/volume/volume_swaxes.c:651
msgid "Rotated Data"
msgstr "Повёрнутые данные"
@@ -12457,63 +13121,63 @@ msgstr "Масштабированные данные"
msgid "verb|Scale"
msgstr "Масштабировать"
-#: modules/process/scale.c:216
+#: modules/process/scale.c:217
msgid "Scale by _ratio:"
msgstr "Масштабировать на _коэффициент:"
-#: modules/process/scale.c:224
+#: modules/process/scale.c:225
msgid "_proportional"
msgstr "_пропорционально"
-#: modules/process/scale.c:235
+#: modules/process/scale.c:237
msgid "New _width:"
msgstr "Новая _ширина:"
-#: modules/process/scale.c:243
+#: modules/process/scale.c:246
msgid "New _height:"
msgstr "Новая _высота:"
-#: modules/process/scars.c:113
+#: modules/process/scars.c:122
msgid "Marks and/or removes scars (horizontal linear artifacts)."
msgstr "Помечает и/или удаляет царапины (горизонтальные линейные артефакты)."
-#: modules/process/scars.c:127
+#: modules/process/scars.c:136
msgid "/_Correct Data/M_ark Scars..."
msgstr "/Исправить _данные/Пометить _царапины..."
-#: modules/process/scars.c:131
+#: modules/process/scars.c:140
msgid "Mark horizontal scars (strokes)"
msgstr "Помечает горизонтальные царапины (штрихи)"
-#: modules/process/scars.c:134
+#: modules/process/scars.c:143
msgid "/_Correct Data/Remove _Scars"
msgstr "/Исправить _данные/_Убрать царапины"
-#: modules/process/scars.c:138
+#: modules/process/scars.c:147
msgid "Correct horizontal scars (strokes)"
msgstr "Убрать горизонтальные царапины"
-#: modules/process/scars.c:293
+#: modules/process/scars.c:312
msgid "Mark Scars"
msgstr "Пометить царапины"
-#: modules/process/scars.c:331
+#: modules/process/scars.c:353
msgid "Maximum _width:"
msgstr "Максимальная _ширина:"
-#: modules/process/scars.c:338
+#: modules/process/scars.c:361
msgid "Minimum _length:"
msgstr "Минимальная _длина:"
-#: modules/process/scars.c:345
+#: modules/process/scars.c:369
msgid "_Hard threshold:"
msgstr "_Жёсткий порог:"
-#: modules/process/scars.c:353
+#: modules/process/scars.c:377
msgid "_Soft threshold:"
msgstr "_Мягкий порог:"
-#: modules/process/scars.c:361
+#: modules/process/scars.c:385
msgid "Scars type:"
msgstr "Тип царапин:"
@@ -12553,27 +13217,27 @@ msgstr "Монте-Карло"
msgid "_Quality:"
msgstr "_Качество:"
-#: modules/process/shade.c:92
+#: modules/process/shade.c:94
msgid "Creates a shaded presentation of data."
msgstr "Создаёт презентацию данных с тенями."
-#: modules/process/shade.c:106
+#: modules/process/shade.c:108
msgid "/_Presentation/_Shading..."
msgstr "/_Презентация/_Затенение..."
-#: modules/process/shade.c:110
+#: modules/process/shade.c:112
msgid "Shade data"
msgstr "Затенить данные"
-#: modules/process/shade.c:207
+#: modules/process/shade.c:209
msgid "Shading"
msgstr "Затенение"
-#: modules/process/shade.c:253
+#: modules/process/shade.c:260
msgid "_Mix:"
msgstr "C_мешать:"
-#: modules/process/slope_dist.c:161
+#: modules/process/slope_dist.c:160
msgid ""
"Calculates one- or two-dimensional distribution of slopes or graph of their "
"angular distribution."
@@ -12581,82 +13245,133 @@ msgstr ""
"Рассчитывает одно- или двумерное распределение наклонов или график их "
"углового распределения."
-#: modules/process/slope_dist.c:176
+#: modules/process/slope_dist.c:175
msgid "/_Statistics/_Slope Distribution..."
msgstr "/_Статистика/Распределение _наклонов..."
-#: modules/process/slope_dist.c:180
+#: modules/process/slope_dist.c:179
msgid "Calculate angular slope distribution"
msgstr "Рассчитать угловое распределение наклонов"
-#: modules/process/slope_dist.c:221
+#: modules/process/slope_dist.c:220
msgid "Slope distribution"
msgstr "Распределение наклона"
-#: modules/process/slope_dist.c:253
+#: modules/process/slope_dist.c:252
msgid "_Two-dimensional distribution"
msgstr "_Двумерное распределение"
-#: modules/process/slope_dist.c:254
+#: modules/process/slope_dist.c:253
msgid "Directional (φ) _graph"
msgstr "_График направлений (φ) "
-#: modules/process/slope_dist.c:255
+#: modules/process/slope_dist.c:254
msgid "_Inclination (θ) graph"
msgstr "График _наклонов (θ)"
-#: modules/process/slope_dist.c:256
+#: modules/process/slope_dist.c:255
msgid "Inclination (gra_dient) graph"
msgstr "График наклонов (гра_диент)"
-#: modules/process/slope_dist.c:270
+#: modules/process/slope_dist.c:269
msgid "Slope Distribution"
msgstr "Распределение наклонов"
-#: modules/process/slope_dist.c:755
+#: modules/process/slope_dist.c:749
msgid "Angular Slope Distribution"
msgstr "Распределение наклонов по углам"
-#: modules/process/slope_dist.c:763 modules/process/tilt.c:179
+#: modules/process/slope_dist.c:757 modules/process/tilt.c:179
msgid "Slopes"
msgstr "Наклоны"
-#: modules/process/slope_dist.c:824 modules/process/slope_dist.c:893
+#: modules/process/slope_dist.c:818 modules/process/slope_dist.c:887
msgid "Inclination Distribution"
msgstr "Распределение наклона"
-#: modules/process/slope_dist.c:832 modules/process/slope_dist.c:901
+#: modules/process/slope_dist.c:826 modules/process/slope_dist.c:895
msgid "Inclinations"
msgstr "Наклоны"
-#: modules/process/sphere-revolve.c:97
+#: modules/process/sphere-revolve.c:111
msgid "Subtracts background by arc or sphere revolution."
msgstr "Вычитает фон вращением дуги или сферы."
-#: modules/process/sphere-revolve.c:113
+#: modules/process/sphere-revolve.c:125
msgid "/_Level/Revolve _Arc..."
msgstr "/_Выравнивание/Вращение _дуги..."
-#: modules/process/sphere-revolve.c:117
+#: modules/process/sphere-revolve.c:129
msgid "Level data by arc revolution"
msgstr "Выровнять данные вращением дуги"
-#: modules/process/sphere-revolve.c:208 modules/tools/sfunctions.c:371
+#: modules/process/sphere-revolve.c:132
+msgid "/_Level/Revolve _Sphere..."
+msgstr "/_Выравнивание/Вращение с_феры..."
+
+#: modules/process/sphere-revolve.c:136
+msgid "Level data by sphere revolution"
+msgstr "Выровнять данные вращением сферы"
+
+#: modules/process/sphere-revolve.c:303 modules/tools/sfunctions.c:381
msgid "_Horizontal direction"
msgstr "_Горизонтальное направление"
-#: modules/process/sphere-revolve.c:209 modules/tools/sfunctions.c:372
+#: modules/process/sphere-revolve.c:304 modules/tools/sfunctions.c:382
msgid "_Vertical direction"
msgstr "_Вертикальное направление"
-#: modules/process/sphere-revolve.c:210
+#: modules/process/sphere-revolve.c:305
msgid "_Both directions"
msgstr "О_ба направления"
-#: modules/process/sphere-revolve.c:217
+#: modules/process/sphere-revolve.c:315
+msgid "Revolve Sphere"
+msgstr "Вращение сферы"
+
+#: modules/process/sphere-revolve.c:315
msgid "Revolve Arc"
msgstr "Вращение дуги"
+#: modules/process/sphere-revolve.c:355
+msgid "Direction:"
+msgstr "Направление:"
+
+#: modules/process/sphere-revolve.c:699
+msgid "Revolving sphere..."
+msgstr "Вращающаяся сфера..."
+
+#: modules/process/stitch.c:135
+msgid "Stitch multiple images based on offsets of origins."
+msgstr ""
+"Склеивает несколько изображений вместе основываясь на смещениях начала "
+"координат."
+
+#: modules/process/stitch.c:149
+msgid "/M_ultidata/_Stitch..."
+msgstr "/М_ножественные данные/С_шивание..."
+
+#: modules/process/stitch.c:153
+msgid "Stitch images using offsets"
+msgstr "Склеивает изображения используя смещения"
+
+#: modules/process/stitch.c:269
+msgid "Stitch"
+msgstr "Сшивание"
+
+#: modules/process/stitch.c:312
+msgid "Channels"
+msgstr "Каналы"
+
+#: modules/process/stitch.c:435
+msgid "Restore"
+msgstr "Восстановить"
+
+#: modules/process/stitch.c:445 modules/tools/linestats.c:379
+#: modules/tools/sfunctions.c:440 modules/tools/stats.c:406
+msgid "_Instant updates"
+msgstr "_Обновлять сразу"
+
#: modules/process/straighten_path.c:126
msgid "Extracts a straightened part of image along a curve."
msgstr "Извлекает выпрямленную часть изображения вдоль кривой"
@@ -12673,28 +13388,28 @@ msgstr "Выпрямить вдоль пути"
msgid "Straighten Path"
msgstr "Выпрямить путь"
-#: modules/process/straighten_path.c:254
+#: modules/process/straighten_path.c:253
msgid "Res_tore"
msgstr "_Восстановить"
-#: modules/process/straighten_path.c:259
+#: modules/process/straighten_path.c:258
msgid "Re_verse"
msgstr "_Обратный порядок"
#: modules/process/straighten_path.c:278 modules/tools/pathlevel.c:256
-#: modules/tools/profile.c:507 modules/tools/roughness.c:854
+#: modules/tools/profile.c:503 modules/tools/roughness.c:868
msgid "_Thickness:"
msgstr "_Толщина:"
-#: modules/process/straighten_path.c:286
+#: modules/process/straighten_path.c:287
msgid "_Slackness:"
msgstr "_Неточность:"
-#: modules/process/straighten_path.c:292
+#: modules/process/straighten_path.c:293
msgid "C_losed curve"
msgstr "_Замкнутая кривая"
-#: modules/process/straighten_path.c:379
+#: modules/process/straighten_path.c:380
msgid "Straightened"
msgstr "Выпрямленное"
@@ -12717,52 +13432,52 @@ msgstr "Взаимное наложение нескольких изображ
msgid "Supres"
msgstr "Сверхразр."
-#: modules/process/superresolution.c:421
+#: modules/process/superresolution.c:420
msgid "Correlating to determine mean shift..."
msgstr "Поиск макс. корреляции чтобы определить среднее смещение..."
-#: modules/process/superresolution.c:511
+#: modules/process/superresolution.c:510
msgid "Cross-correlation..."
msgstr "Взаимная корреляция..."
-#: modules/process/superresolution.c:554 modules/xyz/xyz_raster.c:1079
-#: modules/xyz/xyz_raster.c:1119
+#: modules/process/superresolution.c:553 modules/xyz/xyz_raster.c:1053
+#: modules/xyz/xyz_raster.c:1093
msgid "Interpolating..."
msgstr "Интерполяция..."
-#: modules/process/synth.h:343
+#: modules/process/synth.h:344
msgid "Roundness"
msgstr "Округлость"
-#: modules/process/synth.h:351
+#: modules/process/synth.h:352
msgid "Roundn_ess:"
msgstr "О_круглость:"
-#: modules/process/synth.h:399
+#: modules/process/synth.h:401
msgid "Orientation"
msgstr "Ориентация"
-#: modules/process/synth.h:408
+#: modules/process/synth.h:410
msgid "Orien_tation:"
msgstr "Ор_иентация:"
-#: modules/process/synth.h:432
+#: modules/process/synth.h:436
+msgid "_Truncate:"
+msgstr "_Усечение:"
+
+#: modules/process/synth.h:460
msgid "Variance:"
msgstr "Разброс:"
-#: modules/process/synth.h:456
-msgid "Deformation"
-msgstr "Деформация"
-
-#: modules/process/synth.h:464
+#: modules/process/synth.h:493
msgid "_Amplitude:"
msgstr "_Амплитуда:"
-#: modules/process/synth.h:472
+#: modules/process/synth.h:501
msgid "_Lateral scale:"
msgstr "_Горизонтальный масштаб:"
-#: modules/process/synth.h:566
+#: modules/process/synth.h:595
msgid "Randomi_ze"
msgstr "Сделать случа_йным"
@@ -12778,41 +13493,41 @@ msgstr "/_Базовые действия/Ограничить _диапазон
msgid "Limit data range"
msgstr "Ограничить диапазон данных"
-#: modules/process/threshold.c:246
+#: modules/process/threshold.c:241
msgid "Limit Range"
msgstr "Ограничить диапазон данных"
-#: modules/process/threshold.c:281
+#: modules/process/threshold.c:276
msgid "Specify _thresholds"
msgstr "Задать _пороги"
-#: modules/process/threshold.c:283
+#: modules/process/threshold.c:278
msgid "Use _display range"
msgstr "Использовать отображаемый _диапазон"
-#: modules/process/threshold.c:285
+#: modules/process/threshold.c:280
msgid "Cut off outlier_s"
msgstr "Обрезать _выпадающие детали."
-#: modules/process/threshold.c:294
+#: modules/process/threshold.c:289
msgid "_Lower:"
msgstr "С_низу:"
-#: modules/process/threshold.c:300
+#: modules/process/threshold.c:295
msgid "_Upper:"
msgstr "С_верху:"
-#: modules/process/threshold.c:305
+#: modules/process/threshold.c:300
msgid "Set to _Full Range"
msgstr "_Полный диапазон"
#. TRANSLATORS: This is a range: 123 to 456.
-#: modules/process/threshold.c:318
+#: modules/process/threshold.c:313
#, c-format
msgid "%.*f to %.*f"
msgstr "от %.*f до %.*f"
-#: modules/process/threshold.c:341
+#: modules/process/threshold.c:336
msgid "F_arther than:"
msgstr "Д_альше, чем:"
@@ -12832,11 +13547,11 @@ msgstr "Наклонить на заданную величину"
msgid "Tilt"
msgstr "Н_аклон"
-#: modules/process/tilt.c:185 modules/volume/volume_slice.c:444
+#: modules/process/tilt.c:185 modules/volume/volume_slice.c:446
msgid "_X:"
msgstr "_X:"
-#: modules/process/tilt.c:194 modules/volume/volume_slice.c:464
+#: modules/process/tilt.c:194 modules/volume/volume_slice.c:469
msgid "_Y:"
msgstr "_Y:"
@@ -12844,31 +13559,31 @@ msgstr "_Y:"
msgid "Angles"
msgstr "Углы"
-#: modules/process/tip_blind.c:178
+#: modules/process/tip_blind.c:177
msgid "Blind estimation of SPM tip using Villarubia's algorithm."
msgstr "Слепая оценка зонда СЗМ используя алгоритм Вильярубия."
-#: modules/process/tip_blind.c:192
+#: modules/process/tip_blind.c:191
msgid "/_Tip and Indentation/_Blind Estimation..."
msgstr "/_Зонд и индентация/_Слепая оценка..."
-#: modules/process/tip_blind.c:196
+#: modules/process/tip_blind.c:195
msgid "Blind tip estimation"
msgstr "Слепая оценка зонда"
-#: modules/process/tip_blind.c:231
+#: modules/process/tip_blind.c:230
msgid "Blind Tip Estimation"
msgstr "Слепая оценка зонда"
-#: modules/process/tip_blind.c:232
+#: modules/process/tip_blind.c:231
msgid "Run _Partial"
msgstr "Выполнить _частично"
-#: modules/process/tip_blind.c:233
+#: modules/process/tip_blind.c:232
msgid "Run _Full"
msgstr "Выполнить п_олностью"
-#: modules/process/tip_blind.c:234
+#: modules/process/tip_blind.c:233
msgid "_Reset Tip"
msgstr "_Сброс зонда"
@@ -12876,77 +13591,77 @@ msgstr "_Сброс зонда"
msgid "Related _data:"
msgstr "Соответствующие _данные:"
-#: modules/process/tip_blind.c:326
+#: modules/process/tip_blind.c:327
msgid "Estimated Tip Size"
msgstr "Оценочный размер зонда"
-#: modules/process/tip_blind.c:347
+#: modules/process/tip_blind.c:350
msgid "_Same resolution"
msgstr "Одинаковое _разрешение"
-#: modules/process/tip_blind.c:366
+#: modules/process/tip_blind.c:376
msgid "Noise suppression t_hreshold:"
msgstr "_Порог подавления шума:"
-#: modules/process/tip_blind.c:386
+#: modules/process/tip_blind.c:384
msgid "Use _boundaries"
msgstr "Использовать _границы"
-#: modules/process/tip_blind.c:396
+#: modules/process/tip_blind.c:395
msgid "Stripes"
msgstr "Полосы"
-#: modules/process/tip_blind.c:402
+#: modules/process/tip_blind.c:401
msgid "_Split to stripes:"
msgstr "_Разбить на полосы:"
-#: modules/process/tip_blind.c:416
+#: modules/process/tip_blind.c:412
msgid "_Preview stripe:"
msgstr "_Предпросмотр полосы:"
-#: modules/process/tip_blind.c:423
+#: modules/process/tip_blind.c:420
msgid "Plot size _graph"
msgstr "Строить _график размера"
-#: modules/process/tip_blind.c:433
+#: modules/process/tip_blind.c:430
msgid "Create tip i_mages"
msgstr "Создавать _изображения зонда"
#. TRANSLATORS: Prefix for the progressbar message.
-#: modules/process/tip_blind.c:810
+#: modules/process/tip_blind.c:807
#, c-format
msgid "Stripe %u: "
msgstr "Полоска %u: "
-#: modules/process/tip_blind.c:917 modules/process/tip_blind.c:941
+#: modules/process/tip_blind.c:914 modules/process/tip_blind.c:938
msgid "Estimated tip"
msgstr "Предполагаемый зонд"
-#: modules/process/tip_blind.c:1207 modules/process/tip_blind.c:1216
+#: modules/process/tip_blind.c:1204 modules/process/tip_blind.c:1213
msgid "Tip radius evolution"
msgstr "Изменение радиуса зонда"
-#: modules/process/tip_model.c:114
+#: modules/process/tip_model.c:112
msgid "Models SPM tip."
msgstr "Моделирует зонд СЗМ."
-#: modules/process/tip_model.c:129
+#: modules/process/tip_model.c:127
msgid "/_Tip and Indentation/_Model Tip..."
msgstr "/_Зонд и индентация/_Модель зонда..."
-#: modules/process/tip_model.c:133
+#: modules/process/tip_model.c:131
msgid "Model AFM tip"
msgstr "Модель зонда АСМ"
-#: modules/process/tip_model.c:164
+#: modules/process/tip_model.c:162
msgid "Model Tip"
msgstr "Модель зонда"
-#: modules/process/tip_model.c:224
+#: modules/process/tip_model.c:222
msgid "Tip _type:"
msgstr "Тип _зонда:"
-#: modules/process/tip_model.c:229
+#: modules/process/tip_model.c:228
msgid "_Number of sides:"
msgstr "_Число сторон"
@@ -12958,19 +13673,19 @@ msgstr "_Угол зонда:"
msgid "Tip _rotation:"
msgstr "_Поворот зонда:"
-#: modules/process/tip_model.c:250
+#: modules/process/tip_model.c:255
msgid "Tip _apex radius:"
msgstr "_Радиус острия зонда:"
-#: modules/process/tip_model.c:269
+#: modules/process/tip_model.c:265
msgid "Tip _anisotropy:"
msgstr "_Анизотропия зонда:"
-#: modules/process/tip_model.c:490
+#: modules/process/tip_model.c:484
msgid "Modeled tip"
msgstr "Модель зонда"
-#: modules/process/tip_model.c:562
+#: modules/process/tip_model.c:556
#, c-format
msgid "Tip resolution: %d × %d pixels"
msgstr "Разрешение зонда: %d × %d пикселей"
@@ -13080,8 +13795,8 @@ msgid "Converts datafield to 3D volume data."
msgstr "Конвертирует поле данных в трёхмерные объёмные данные."
#: modules/process/volumize.c:56
-msgid "/_Basic Operations/Volumize..."
-msgstr "/_Базовые действия/_Придать объём..."
+msgid "/_Basic Operations/Volumize"
+msgstr "/_Базовые действия/_Превратить в объёмные..."
#: modules/process/volumize.c:60
msgid "Convert datafield to 3D data"
@@ -13125,73 +13840,77 @@ msgstr "Разрешение по _Z:"
msgid "Z _range:"
msgstr "Диапа_зон Z"
-#: modules/process/wave_synth.c:211
+#: modules/process/wave_synth.c:219
msgid "Generates various kinds of waves."
msgstr "Генерирует различные виды волн."
-#: modules/process/wave_synth.c:225
+#: modules/process/wave_synth.c:233
msgid "/S_ynthetic/_Waves..."
msgstr "/Син_тез/_Волны..."
-#: modules/process/wave_synth.c:229
+#: modules/process/wave_synth.c:237
msgid "Generate waves"
msgstr "Генерировать волны"
-#: modules/process/wave_synth.c:347
+#: modules/process/wave_synth.c:366
msgid "Waves"
msgstr "Волны"
-#: modules/process/wave_synth.c:422 modules/tools/linestats.c:337
-#: modules/tools/sfunctions.c:401 modules/volume/volume_linestat.c:369
+#: modules/process/wave_synth.c:441 modules/tools/linestats.c:337
+#: modules/tools/sfunctions.c:411 modules/volume/volume_linestat.c:374
msgid "_Quantity:"
msgstr "_Величина:"
-#: modules/process/wave_synth.c:429
+#: modules/process/wave_synth.c:448
msgid "_Number of waves:"
msgstr "_Число волн:"
-#: modules/process/wave_synth.c:436 modules/process/wave_synth.c:582
-#: modules/tools/roughness.c:274
+#: modules/process/wave_synth.c:455 modules/process/wave_synth.c:617
+#: modules/tools/roughness.c:275
msgid "Amplitude"
msgstr "Амплитуда"
-#: modules/process/wave_synth.c:441
+#: modules/process/wave_synth.c:460
msgid "_Wave form:"
msgstr "_Форма волны:"
-#: modules/process/wave_synth.c:448
+#: modules/process/wave_synth.c:467
msgid "Amplitude:"
msgstr "Амплитуда:"
-#: modules/process/wave_synth.c:466
+#: modules/process/wave_synth.c:487
+msgid "_Decay:"
+msgstr "_Затухание:"
+
+#: modules/process/wave_synth.c:497
msgid "Frequency"
msgstr "Частота"
-#: modules/process/wave_synth.c:472
+#: modules/process/wave_synth.c:503
msgid "_Spatial frequency:"
msgstr "_Пространственная частота:"
-#: modules/process/wave_synth.c:488
+#: modules/process/wave_synth.c:519
msgid "_X center:"
msgstr "_X центра:"
-#: modules/process/wave_synth.c:499
+#: modules/process/wave_synth.c:532
msgid "_Y center:"
msgstr "_Y центра:"
-#: modules/process/wave_synth.c:565
+#: modules/process/wave_synth.c:600
msgid "Cosine"
msgstr "Косинус"
-#: modules/process/wave_synth.c:566
+#: modules/process/wave_synth.c:601
msgid "Inverse cosh"
msgstr "Обратный cosh"
-#: modules/process/wave_synth.c:567
+#: modules/process/wave_synth.c:602
msgid "Flat top"
msgstr "Плоская вершина"
-#: modules/process/wave_synth.c:581
+#: modules/process/wave_synth.c:616
msgid "Displacement"
msgstr "Смещение"
@@ -13277,40 +13996,40 @@ msgstr "Предобработать изображение"
msgid "Preprocess and mark"
msgstr "Предобработать и пометить"
-#: modules/process/xydenoise.c:57
+#: modules/process/xydenoise.c:58
msgid "Denoises measurement on basis of two orthogonal scans."
msgstr ""
"Удаляет шум измерения на основе двух сканов в перпендикулярных направлениях."
-#: modules/process/xydenoise.c:71
+#: modules/process/xydenoise.c:72
msgid "/M_ultidata/_XY denoise..."
msgstr "/М_ножественные данные/_Удаление шума XY..."
-#: modules/process/xydenoise.c:75
+#: modules/process/xydenoise.c:76
msgid "Denoises horizontal/vertical measurement."
msgstr "Удаляет шум горизонтального/вертикального измерения."
-#: modules/process/xydenoise.c:102
+#: modules/process/xydenoise.c:103
msgid "XY Denoising"
msgstr "Удаление шума XY"
-#: modules/process/xydenoise.c:124
+#: modules/process/xydenoise.c:125
msgid "Second direction:"
msgstr "Второе направление:"
-#: modules/process/xydenoise.c:232
+#: modules/process/xydenoise.c:233
msgid "Computing forward FFTs..."
msgstr "Расчёт прямого БПФ..."
-#: modules/process/xydenoise.c:248
+#: modules/process/xydenoise.c:249
msgid "Computing image..."
msgstr "Рассчитывается изображение..."
-#: modules/process/xydenoise.c:260
+#: modules/process/xydenoise.c:261
msgid "Computing backward FFT..."
msgstr "Расчёт обратного БПФ..."
-#: modules/process/xydenoise.c:272
+#: modules/process/xydenoise.c:273
msgid "Denoised"
msgstr "Без шума"
@@ -13326,65 +14045,69 @@ msgstr "/_Базовые действия/Преобразовать в _XYZ"
msgid "Convert to XYZ data"
msgstr "Преобразовать в данные XYZ"
-#: modules/pygwy/pygwy-console.c:55
+#: modules/pygwy/pygwy-console.c:99
msgid "/Pygwy Console"
msgstr "/Консоль Pygwy"
-#: modules/pygwy/pygwy-console.c:59
+#: modules/pygwy/pygwy-console.c:103
msgid "Python wrapper console"
msgstr "Командная строка оболочки Python"
-#: modules/pygwy/pygwy-console.c:142
-msgid ">>> Running the script above\n"
-msgstr ">>> Запускается вышеприведённый скрипт\n"
-
-#: modules/pygwy/pygwy-console.c:194
-msgid "Open Python script"
-msgstr "Открыть скрипт Python"
-
-#: modules/pygwy/pygwy-console.c:275
-msgid "Save Script as"
-msgstr "Сохранить скрипт как"
-
-#: modules/pygwy/pygwy-console.c:327
+#: modules/pygwy/pygwy-console.c:168 modules/pygwy/pygwy-console.c:481
msgid "Pygwy Console"
msgstr "Консоль Pygwy"
-#: modules/pygwy/pygwy-console.c:340
-msgid "Clear Log"
-msgstr "Очистить лог"
-
-#: modules/pygwy/pygwy-console.c:344
+#: modules/pygwy/pygwy-console.c:187
msgid "Open script in Python language (Ctrl-O)"
msgstr "Открыть скрипт на языке Python (Ctrl-O)"
-#: modules/pygwy/pygwy-console.c:346
+#: modules/pygwy/pygwy-console.c:197
msgid "Save script (Ctrl-S)"
-msgstr "Сохранить сценарий (Ctrl-S)"
+msgstr "Сохранить скрипт (Ctrl-S)"
+
+#: modules/pygwy/pygwy-console.c:207
+msgid "Save script as (Ctrl-Shift-S)"
+msgstr "Сохранить скрипт как (Ctrl-Shift-S)"
-#: modules/pygwy/pygwy-console.c:348
+#: modules/pygwy/pygwy-console.c:217
msgid "Execute script (Ctrl-E)"
-msgstr "Выполнить сценарий (Ctrl-E)"
+msgstr "Выполнить скрипт (Ctrl-E)"
-#: modules/pygwy/pygwy-console.c:426
+#: modules/pygwy/pygwy-console.c:227
+msgid "Clear Log"
+msgstr "Очистить лог"
+
+#: modules/pygwy/pygwy-console.c:285
msgid "Command"
msgstr "Команда"
-#: pygwy.c:120
+#: modules/pygwy/pygwy-console.c:371
+msgid ">>> Running the script above\n"
+msgstr ">>> Запускается вышеприведённый скрипт\n"
+
+#: modules/pygwy/pygwy-console.c:425
+msgid "Save Python Script as"
+msgstr "Сохранить скрипт Python как"
+
+#: modules/pygwy/pygwy-console.c:429
+msgid "Open Python Script"
+msgstr "Открыть скрипт Python"
+
+#: pygwy.c:130
msgid "Pygwy, the Gwyddion Python wrapper."
msgstr "Pygwy, оболочка Python в Gwyddion."
-#: pygwy.c:258
+#: pygwy.c:269
msgid "Python Interpreter Errors"
msgstr "Ошибки интерпретатора Python"
-#: pygwy.c:384
+#: pygwy.c:399
msgid "Python interpreter error occurred."
msgstr "Произошла ошибка интерпретатора Python."
-#: pygwy.c:459
+#: pygwy.c:499
msgid "Function written in Python"
-msgstr "Функция на языке Python"
+msgstr "Функция написанная на Python"
#: modules/tools/crop.c:84
msgid "Crop tool, crops data to smaller size."
@@ -13407,11 +14130,11 @@ msgid "Measure distances and directions between points"
msgstr "Измерить расстояния и углы между точками"
#. TRANSLATORS: Number is verb here.
-#: modules/tools/distance.c:250 modules/tools/profile.c:532
+#: modules/tools/distance.c:250 modules/tools/profile.c:527
msgid "_Number lines"
msgstr "_Нумеровать линии"
-#: modules/tools/filter.c:128
+#: modules/tools/filter.c:129
msgid ""
"Filter tool, processes selected part of data with a filter (conservative "
"denoise, mean, median. Kuwahara, minimum, maximum)."
@@ -13419,27 +14142,27 @@ msgstr ""
"Инструмент-фильтр, обрабатывает выбранную часть данных фильтром (выборочной "
"уборки шума, среднего, срединного. Кувахара, минимум. максимум)."
-#: modules/tools/filter.c:171
+#: modules/tools/filter.c:172
msgid "Basic filters: mean, median, denoise, …"
msgstr "Основные фильтры: среднее, срединное, убрать шум, …"
-#: modules/tools/filter.c:239
+#: modules/tools/filter.c:240
msgid "Conservative denoise"
msgstr "Выборочная уборка шума"
-#: modules/tools/filter.c:246
+#: modules/tools/filter.c:247
msgid "Kuwahara"
msgstr "Кувахара"
-#: modules/tools/filter.c:247
+#: modules/tools/filter.c:248
msgid "Dechecker"
msgstr "Убрать \"шахматную доску\""
-#: modules/tools/filter.c:248
+#: modules/tools/filter.c:249
msgid "filter|Gaussian"
msgstr "Гауссов"
-#: modules/tools/filter.c:249
+#: modules/tools/filter.c:250
msgid "Sharpen"
msgstr "Сделать резким"
@@ -13536,7 +14259,7 @@ msgid "Height histogram"
msgstr "Гистограмма высот"
#: modules/tools/icolorange.c:329 modules/tools/linestats.c:169
-#: modules/tools/sfunctions.c:226 modules/volume/volume_linestat.c:146
+#: modules/tools/sfunctions.c:231 modules/volume/volume_linestat.c:148
msgid "Range"
msgstr "Диапазон"
@@ -13564,7 +14287,7 @@ msgstr "_Инвертировать шкалу"
msgid "range|Full"
msgstr "Полный"
-#: modules/tools/level3.c:106
+#: modules/tools/level3.c:108
msgid ""
"Three-point level tool, levels data by subtracting a plane fitted through "
"three selected points."
@@ -13572,23 +14295,23 @@ msgstr ""
"Инструмент выравнивания по трём точкам, выравнивает данные вычитанием "
"плоскости, проходящей через три выбранные точки."
-#: modules/tools/level3.c:143
+#: modules/tools/level3.c:145
msgid "Three Point Level"
msgstr "Выравнивание по трём точкам"
-#: modules/tools/level3.c:144
+#: modules/tools/level3.c:146
msgid "Level data by fitting a plane through three points"
msgstr "Выровнять данные построив плоскость по трём точкам"
-#: modules/tools/level3.c:239 modules/tools/readvalue.c:375
+#: modules/tools/level3.c:244 modules/tools/readvalue.c:378
msgid "_Averaging radius:"
msgstr "Радиус _усреднения:"
-#: modules/tools/level3.c:246
+#: modules/tools/level3.c:251
msgid "_Instant apply"
msgstr "Применять _сразу"
-#: modules/tools/level3.c:255
+#: modules/tools/level3.c:261
msgid "Set plane to _zero"
msgstr "Установить плоскость в _нуль"
@@ -13600,23 +14323,23 @@ msgstr ""
"Функция статистики по строке/столбцу, средние, срединные, максимумы, "
"минимумы. среднеквадратичные, и т.п., строк и столбцов."
-#: modules/tools/linestats.c:172 modules/volume/volume_linestat.c:148
+#: modules/tools/linestats.c:172 modules/volume/volume_linestat.c:150
msgid "tan β<sub>0</sub>"
msgstr "tan β<sub>0</sub>"
-#: modules/tools/linestats.c:174 modules/volume/volume_linestat.c:150
+#: modules/tools/linestats.c:174 modules/volume/volume_linestat.c:152
msgid "Ra"
msgstr "Ra"
-#: modules/tools/linestats.c:175 modules/volume/volume_linestat.c:151
+#: modules/tools/linestats.c:175 modules/volume/volume_linestat.c:153
msgid "Rq (RMS)"
msgstr "Rq (Ср. квадр.)"
-#: modules/tools/linestats.c:176 modules/volume/volume_linestat.c:152
+#: modules/tools/linestats.c:176 modules/volume/volume_linestat.c:154
msgid "Rz"
msgstr "Rz"
-#: modules/tools/linestats.c:177 modules/volume/volume_linestat.c:153
+#: modules/tools/linestats.c:177 modules/volume/volume_linestat.c:155
msgid "Rt"
msgstr "Rt"
@@ -13640,16 +14363,11 @@ msgstr "С_толбцы"
msgid "Average:"
msgstr "Среднее:"
-#: modules/tools/linestats.c:363 modules/tools/profile.c:464
-#: modules/tools/sfunctions.c:414 modules/tools/spectro.c:343
+#: modules/tools/linestats.c:363 modules/tools/profile.c:460
+#: modules/tools/sfunctions.c:424 modules/tools/spectro.c:346
msgid "<b>Options</b>"
msgstr "<b>Параметры</b>"
-#: modules/tools/linestats.c:379 modules/tools/sfunctions.c:430
-#: modules/tools/stats.c:408
-msgid "_Instant updates"
-msgstr "_Обновлять сразу"
-
#: modules/tools/maskedit.c:170
msgid "Mask editor tool, allows interactive modification of parts of the mask."
msgstr "Редактор маски, позволяет интерактивно изменять части маски."
@@ -13706,63 +14424,63 @@ msgstr "Заполнение непрерывных пустых областе
msgid "Erase continuous parts of mask"
msgstr "Удаление непрерывных частей маски"
-#: modules/tools/maskedit.c:408
+#: modules/tools/maskedit.c:409
msgid "Editor"
msgstr "Редактор"
-#: modules/tools/maskedit.c:413
+#: modules/tools/maskedit.c:414
msgid "_Shapes"
msgstr "_Фигуры"
-#: modules/tools/maskedit.c:423
+#: modules/tools/maskedit.c:428
msgid "Mode:"
msgstr "Режим:"
-#: modules/tools/maskedit.c:452
+#: modules/tools/maskedit.c:458
msgid "Shape:"
msgstr "Форма:"
-#: modules/tools/maskedit.c:483
+#: modules/tools/maskedit.c:486
msgid "_Drawing Tools"
msgstr "И_нструменты рисования"
-#: modules/tools/maskedit.c:493
+#: modules/tools/maskedit.c:500
msgid "Tool:"
msgstr "Инструмент:"
-#: modules/tools/maskedit.c:532
+#: modules/tools/maskedit.c:538
msgid "Actions"
msgstr "Действия"
-#: modules/tools/maskedit.c:540
+#: modules/tools/maskedit.c:546
msgid "_Invert"
msgstr "_Инвертировать"
-#: modules/tools/maskedit.c:571
+#: modules/tools/maskedit.c:577
msgid "Fill _Voids"
msgstr "З_аполнить Пустоты"
-#: modules/tools/maskedit.c:580
+#: modules/tools/maskedit.c:586
msgid "Fill non-simple-connected"
msgstr "Заполнять неодносвязные"
-#: modules/tools/maskedit.c:591
+#: modules/tools/maskedit.c:597
msgid "Grow/Shrink"
msgstr "Растянуть/Ужать"
-#: modules/tools/maskedit.c:600
+#: modules/tools/maskedit.c:606
msgid "_Grow"
msgstr "_Растянуть"
-#: modules/tools/maskedit.c:608
+#: modules/tools/maskedit.c:614
msgid "Shrin_k"
msgstr "_Ужать"
-#: modules/tools/maskedit.c:623
+#: modules/tools/maskedit.c:629
msgid "_Amount:"
msgstr "_Количество:"
-#: modules/tools/maskedit.c:651
+#: modules/tools/maskedit.c:657
msgid "_Prevent grain merging by growing"
msgstr "_Предотвращать слияние зёрен при растяжении"
@@ -13780,83 +14498,95 @@ msgstr "Выровнять вдоль линии"
msgid "Level rows using intersections with given lines"
msgstr "Выровнять строки используя пересечения с заданными линиями"
-#: modules/tools/profile.c:222
+#: modules/tools/profile.c:216
msgid "Profile tool, creates profile graphs from selected lines."
msgstr "Инструмент профиля, создает графики профилей вдоль выбранных линий."
-#: modules/tools/profile.c:276 modules/tools/profile.c:630
+#: modules/tools/profile.c:270 modules/tools/profile.c:609
msgid "Profiles"
msgstr "Профили"
-#: modules/tools/profile.c:277
+#: modules/tools/profile.c:271
msgid "Extract profiles"
msgstr "Извлечь профили"
-#: modules/tools/profile.c:480
-msgid "_Radial profiles"
-msgstr "_Радиальные профили"
+#: modules/tools/profile.c:478
+msgid "Linear profiles"
+msgstr "Линейные профили"
-#: modules/tools/profile.c:493
-msgid "Symmetrize _All"
-msgstr "Сделать симметричным вс_е"
-
-#: modules/tools/profile.c:498
-msgid "S_ymmetrize"
-msgstr "Сделать с_имметричным"
+#: modules/tools/profile.c:480
+msgid "Radial profiles"
+msgstr "Радиальные профили"
-#: modules/tools/profile.c:542
+#: modules/tools/profile.c:537
msgid "_Separate profiles"
msgstr "_Разделить профили"
-#: modules/tools/profile.c:607
+#: modules/tools/profile.c:587
msgid "_Calibration data:"
msgstr "Данные _калибровки:"
-#: modules/tools/profile.c:620
+#: modules/tools/profile.c:600
msgid "_Show profile"
msgstr "_Показать профиль"
-#: modules/tools/profile.c:887
+#: modules/tools/profile.c:861
#, c-format
msgid "X error %d"
msgstr "Ошибка по X %d"
-#: modules/tools/profile.c:891
+#: modules/tools/profile.c:865
#, c-format
msgid "Y error %d"
msgstr "Ошибка по Y %d"
-#: modules/tools/profile.c:895
+#: modules/tools/profile.c:869
#, c-format
msgid "Z error %d"
msgstr "Ошибка по Z %d"
-#: modules/tools/profile.c:899
+#: modules/tools/profile.c:873
#, c-format
msgid "X uncertainty %d"
msgstr "Погрешность по X %d"
-#: modules/tools/profile.c:903
+#: modules/tools/profile.c:877
#, c-format
msgid "Y uncertainty %d"
msgstr "Погрешность по Y %d"
-#: modules/tools/profile.c:907
+#: modules/tools/profile.c:881
#, c-format
msgid "Z uncertainty %d"
msgstr "Погрешность по Z %d"
-#: modules/tools/profile.c:912
+#: modules/tools/profile.c:886
#, c-format
msgid "Zunc up bound %d"
msgstr "Верхняя граница погрешности Z %d"
-#: modules/tools/profile.c:917
+#: modules/tools/profile.c:891
#, c-format
msgid "Zunc low bound %d"
msgstr "Нижняя граница погрешности Z %d"
-#: modules/tools/profile.c:1817
+#: modules/tools/profile.c:1637
+msgid "S_ymmetrize"
+msgstr "Сделать с_имметричным"
+
+#: modules/tools/profile.c:1639
+msgid "Symmetrize _All"
+msgstr "Сделать симметричным вс_е"
+
+#: modules/tools/profile.c:1643
+msgid "Improve _Direction"
+msgstr "Улучшить _направление"
+
+#: modules/tools/profile.c:1645
+msgid "Improve _All"
+msgstr "Улушить _всё"
+
+#: modules/tools/profile.c:1866
msgid "calib-data|None"
msgstr "Нет"
@@ -13872,196 +14602,196 @@ msgstr "Считать значение"
msgid "Read value under mouse cursor"
msgstr "Считать значение под курсором мыши."
-#: modules/tools/readvalue.c:304
+#: modules/tools/readvalue.c:307
msgid "Set _Zero"
msgstr "Установить _нуль"
-#: modules/tools/readvalue.c:307
+#: modules/tools/readvalue.c:310
msgid "Shift plane z=0 to pass through the selected point"
msgstr "Сдвигает плоскость z=0 так, чтобы она проходила через выбранную точку"
-#: modules/tools/readvalue.c:315
+#: modules/tools/readvalue.c:318
msgid "Facet"
msgstr "Грань"
-#: modules/tools/readvalue.c:340
+#: modules/tools/readvalue.c:343
msgid "Curvatures"
msgstr "Кривизна"
-#: modules/tools/readvalue.c:382
+#: modules/tools/readvalue.c:386
msgid "Show _selection"
msgstr "Показать _выбор"
-#: modules/tools/roughness.c:282
+#: modules/tools/roughness.c:283
msgid "Roughness average"
msgstr "Средняя шероховатость"
-#: modules/tools/roughness.c:290
+#: modules/tools/roughness.c:291
msgid "Root mean square roughness"
msgstr "Среднеквадратичная шероховатость"
-#: modules/tools/roughness.c:298
+#: modules/tools/roughness.c:299
msgid "Maximum height of the roughness"
msgstr "Максимальная высота шероховатости"
-#: modules/tools/roughness.c:306
+#: modules/tools/roughness.c:307
msgid "Maximum roughness valley depth"
msgstr "Максимальная глубина впадины шероховатости"
-#: modules/tools/roughness.c:314
+#: modules/tools/roughness.c:315
msgid "Maximum roughness peak height"
msgstr "Максимальная высота пика шероховатости"
-#: modules/tools/roughness.c:322 modules/tools/roughness.c:370
+#: modules/tools/roughness.c:323 modules/tools/roughness.c:371
msgid "Average maximum height of the roughness"
msgstr "Средняя максимальная высота шероховатости"
-#: modules/tools/roughness.c:330
+#: modules/tools/roughness.c:331
msgid "Average maximum roughness valley depth"
msgstr "Средняя максимальная глубина долины шероховатости"
-#: modules/tools/roughness.c:338
+#: modules/tools/roughness.c:339
msgid "Average maximum roughness peak height"
msgstr "Средняя максимальная высота пика шероховатости"
-#: modules/tools/roughness.c:346 modules/tools/roughness.c:354
+#: modules/tools/roughness.c:347 modules/tools/roughness.c:355
msgid "Average third highest peak to third lowest valley height"
msgstr ""
"Среднее отношение высоты третьего по высоте пика к глубине третьей по "
"глубине впадины"
-#: modules/tools/roughness.c:362
+#: modules/tools/roughness.c:363
msgid "Average maximum height of the profile"
msgstr "Средняя максимальная высота профиля"
-#: modules/tools/roughness.c:378
+#: modules/tools/roughness.c:379
msgid "Skewness"
msgstr "Коэффициент асимметрии"
-#: modules/tools/roughness.c:394
+#: modules/tools/roughness.c:395
msgid "Waviness average"
msgstr "Средняя волнистость"
-#: modules/tools/roughness.c:402
+#: modules/tools/roughness.c:403
msgid "Root mean square waviness"
msgstr "Среднеквадратичная волнистость"
-#: modules/tools/roughness.c:410
+#: modules/tools/roughness.c:411
msgid "Waviness maximum height"
msgstr "Максимальная высота волнистости"
-#: modules/tools/roughness.c:418
+#: modules/tools/roughness.c:419
msgid "Maximum height of the profile"
msgstr "Максимальная высота профиля"
-#: modules/tools/roughness.c:426
+#: modules/tools/roughness.c:427
msgid "Spatial"
msgstr "Пространственные"
-#: modules/tools/roughness.c:476
+#: modules/tools/roughness.c:477
msgid "Average wavelength of the profile"
msgstr "Средняя длина волны профиля"
-#: modules/tools/roughness.c:484
+#: modules/tools/roughness.c:485
msgid "Root mean square (RMS) wavelength of the profile"
msgstr "Среднеквадратичная длина волны профиля"
-#: modules/tools/roughness.c:492
+#: modules/tools/roughness.c:493
msgid "Hybrid"
msgstr "Гибридные"
-#: modules/tools/roughness.c:500
+#: modules/tools/roughness.c:501
msgid "Average absolute slope"
msgstr "Средний по модулю наклон"
-#: modules/tools/roughness.c:508
+#: modules/tools/roughness.c:509
msgid "Root mean square (RMS) slope"
msgstr "Среднеквадратичный наклон"
-#: modules/tools/roughness.c:524
+#: modules/tools/roughness.c:525
msgid "Developed profile length"
msgstr "Длина растянутого профиля"
-#: modules/tools/roughness.c:532
+#: modules/tools/roughness.c:533
msgid "Profile length ratio"
msgstr "Относительная длина профиля"
-#: modules/tools/roughness.c:615
+#: modules/tools/roughness.c:616
msgid "Calculate surface profile parameters."
msgstr "Рассчитывает параметры профиля поверхности."
-#: modules/tools/roughness.c:648 modules/tools/roughness.c:773
-#: modules/tools/roughness.c:1452
+#: modules/tools/roughness.c:649 modules/tools/roughness.c:774
+#: modules/tools/roughness.c:1479
msgid "Roughness"
msgstr "Шероховатость"
-#: modules/tools/roughness.c:649
+#: modules/tools/roughness.c:650
msgid "Calculate roughness parameters"
msgstr "Рассчитать параметры шероховатости"
-#: modules/tools/roughness.c:771 modules/tools/roughness.c:1450
+#: modules/tools/roughness.c:772 modules/tools/roughness.c:1477
msgid "Texture"
msgstr "Текстура"
-#: modules/tools/roughness.c:772 modules/tools/roughness.c:1451
+#: modules/tools/roughness.c:773 modules/tools/roughness.c:1478
msgid "Waviness"
msgstr "Волнистость"
-#: modules/tools/roughness.c:774
+#: modules/tools/roughness.c:775
msgid "ADF"
msgstr "ФРА"
-#: modules/tools/roughness.c:775
+#: modules/tools/roughness.c:776
msgid "BRC"
msgstr "ООК"
-#: modules/tools/roughness.c:776 modules/tools/roughness.c:1455
+#: modules/tools/roughness.c:777 modules/tools/roughness.c:1482
msgid "Peak Count"
msgstr "Число пиков"
-#: modules/tools/roughness.c:838 modules/xyz/xyz_drift.c:1090
+#: modules/tools/roughness.c:839 modules/xyz/xyz_drift.c:1090
msgid "_Graph:"
msgstr "_График:"
-#: modules/tools/roughness.c:845
+#: modules/tools/roughness.c:847
msgid "C_ut-off:"
msgstr "_Порог:"
-#: modules/tools/roughness.c:1324
+#: modules/tools/roughness.c:1345
msgid "No profile selected."
msgstr "Профилей не выбрано."
-#: modules/tools/roughness.c:1453
+#: modules/tools/roughness.c:1480
msgid "Amplitude Distribution Function"
msgstr "Функция распределения амплитуды"
-#: modules/tools/roughness.c:1454
+#: modules/tools/roughness.c:1481
msgid "The Bearing Ratio Curve"
msgstr "Относительная опорная кривая"
-#: modules/tools/roughness.c:1489
+#: modules/tools/roughness.c:1516
msgid "Surface Profiles"
msgstr "Профили поверхности"
-#: modules/tools/roughness.c:1877
+#: modules/tools/roughness.c:1904
msgid "Save Roughness Parameters"
msgstr "Сохранить параметры шероховатости"
-#: modules/tools/roughness.c:1934
+#: modules/tools/roughness.c:1961
msgid "Roughness Parameters"
msgstr "Параметры шероховатости"
-#: modules/tools/roughness.c:1940
+#: modules/tools/roughness.c:1967
#, c-format
msgid "File: %s\n"
msgstr "Файл: %s\n"
-#: modules/tools/roughness.c:1944
+#: modules/tools/roughness.c:1971
#, c-format
msgid "Data channel: %s\n"
msgstr "Канал данных: %s\n"
-#: modules/tools/roughness.c:1975
+#: modules/tools/roughness.c:2002
#, c-format
msgid ""
"Selected line: (%s, %s) to (%s, %s) px\n"
@@ -14098,7 +14828,7 @@ msgstr "на _все файлы"
msgid "_Copy"
msgstr "_Копировать"
-#: modules/tools/sfunctions.c:181
+#: modules/tools/sfunctions.c:186
msgid ""
"Statistical function tool, calculates one-dimensional statistical functions "
"(height distribution, correlations, PSDF, Minkowski functionals) of selected "
@@ -14108,87 +14838,91 @@ msgstr ""
"(распределение высоты, корреляции, функция спектральной плотности мощности "
"(ФСПМ, PSDF), функционалы Минковского) выбранной части данных."
-#: modules/tools/sfunctions.c:214
+#: modules/tools/sfunctions.c:219
msgid "Height distribution"
msgstr "Распределение высоты"
-#: modules/tools/sfunctions.c:215
+#: modules/tools/sfunctions.c:220
msgid "Cum. height distribution"
msgstr "Интегр. распределение высоты"
-#: modules/tools/sfunctions.c:216
+#: modules/tools/sfunctions.c:221
msgid "Distribution of angles"
msgstr "Распределение углов"
-#: modules/tools/sfunctions.c:217
+#: modules/tools/sfunctions.c:222
msgid "Cum. distribution of angles"
msgstr "Интегр. распределение углов"
-#: modules/tools/sfunctions.c:218
+#: modules/tools/sfunctions.c:223
msgid "ACF"
msgstr "АКФ"
-#: modules/tools/sfunctions.c:219
+#: modules/tools/sfunctions.c:224
msgid "HHCF"
msgstr "ФКВВ"
-#: modules/tools/sfunctions.c:220
+#: modules/tools/sfunctions.c:225
msgid "PSDF"
msgstr "ФСПМ"
-#: modules/tools/sfunctions.c:221
+#: modules/tools/sfunctions.c:226
msgid "Radial PSDF"
msgstr "Радиальная ФСПМ"
-#: modules/tools/sfunctions.c:222
+#: modules/tools/sfunctions.c:227
msgid "Radial ACF"
msgstr "Радиальная АКФ"
-#: modules/tools/sfunctions.c:223
+#: modules/tools/sfunctions.c:228
msgid "Minkowski volume"
msgstr "Объём Минковского"
-#: modules/tools/sfunctions.c:224
+#: modules/tools/sfunctions.c:229
msgid "Minkowski boundary"
msgstr "Граница Минковского"
-#: modules/tools/sfunctions.c:225
+#: modules/tools/sfunctions.c:230
msgid "Minkowski connectivity"
msgstr "Связность Минковского"
-#: modules/tools/sfunctions.c:251
+#: modules/tools/sfunctions.c:232
+msgid "Area scale graph"
+msgstr "График функции относительной площади"
+
+#: modules/tools/sfunctions.c:257
msgid "Statistical Functions"
msgstr "Статистические функции"
-#: modules/tools/sfunctions.c:252
+#: modules/tools/sfunctions.c:258
msgid "Calculate 1D statistical functions"
msgstr "Рассчитать одномерные статистические функции"
-#: modules/tools/sfunctions.c:504
+#: modules/tools/sfunctions.c:501
msgid "_Separate uncertainty"
-msgstr "_Разделить погрешности"
+msgstr "_Разделить погрешность"
-#: modules/tools/spectro.c:151
+#: modules/tools/spectro.c:154
msgid "Point Spectrum, extracts point spectra to a graph."
msgstr "Спектр в точке, извлечь спектры в точке в график."
-#: modules/tools/spectro.c:190
+#: modules/tools/spectro.c:193
msgid "Point Spectroscopy"
msgstr "Спектроскопия в точке"
-#: modules/tools/spectro.c:191
+#: modules/tools/spectro.c:194
msgid "Extract and view point spectroscopy data"
msgstr "Извлечь и посмотреть данные спектроскопии в точке"
-#: modules/tools/spectro.c:359
+#: modules/tools/spectro.c:362
msgid "_Separate spectra"
msgstr "Разделить _спектры"
-#: modules/tools/spectro.c:369
+#: modules/tools/spectro.c:372
msgid "_Average spectra"
msgstr "_Усреднить спектры"
-#: modules/tools/spectro.c:508
+#: modules/tools/spectro.c:511
msgid "Spectroscopy"
msgstr "Спектроскопия"
@@ -14228,14 +14962,6 @@ msgstr "Не выбраны точки на изображении."
msgid "No area in the zoom selected."
msgstr "Не выбрана область на увеличенном изображении."
-#: modules/tools/stats.c:205
-msgid "Average value:"
-msgstr "Среднее значение:"
-
-#: modules/tools/stats.c:206
-msgid "Median:"
-msgstr "Срединное значение:"
-
#: modules/tools/stats.c:207
msgid "Ra (Sa):"
msgstr "Ra (Sa):"
@@ -14248,14 +14974,6 @@ msgstr "Rms (Sq):"
msgid "Rms (grain-wise):"
msgstr "Ср. квадр. зёрен:"
-#: modules/tools/stats.c:210
-msgid "Skew:"
-msgstr "Асимметрия:"
-
-#: modules/tools/stats.c:211
-msgid "Kurtosis:"
-msgstr "Эксцесс:"
-
#: modules/tools/stats.c:212
msgid "Surface area:"
msgstr "Площадь поверхности:"
@@ -14264,10 +14982,6 @@ msgstr "Площадь поверхности:"
msgid "Projected area:"
msgstr "Площадь проекции:"
-#: modules/tools/stats.c:214
-msgid "Variation:"
-msgstr "Вариация:"
-
#: modules/tools/stats.c:217
msgid "Inclination θ:"
msgstr "Наклон θ:"
@@ -14280,7 +14994,7 @@ msgstr "Наклон φ:"
msgid "Statistics tool."
msgstr "Инструмент статистики."
-#: modules/tools/stats.c:261 modules/tools/stats.c:1095
+#: modules/tools/stats.c:261 modules/tools/stats.c:1091
msgid "Statistical Quantities"
msgstr "Статистические величины"
@@ -14288,29 +15002,29 @@ msgstr "Статистические величины"
msgid "Statistical quantities"
msgstr "Статистические величины"
-#: modules/tools/stats.c:1002
+#: modules/tools/stats.c:998
msgid "Save Statistical Quantities"
msgstr "Сохранять статистические величины"
-#: modules/tools/stats.c:1100
+#: modules/tools/stats.c:1096
#, c-format
msgid "File: %s\n"
msgstr "Файл: %s\n"
-#: modules/tools/stats.c:1104
+#: modules/tools/stats.c:1100
#, c-format
msgid "Data channel: %s\n"
msgstr "Канал данных: %s\n"
-#: modules/tools/stats.c:1122
+#: modules/tools/stats.c:1118
msgid "Yes"
msgstr "Да"
-#: modules/tools/stats.c:1122
+#: modules/tools/stats.c:1118
msgid "No"
msgstr "Нет"
-#: modules/tools/stats.c:1132
+#: modules/tools/stats.c:1128
#, c-format
msgid ""
"Selected area: %s × %s at (%s, %s) px\n"
@@ -14334,182 +15048,178 @@ msgstr "/_Размеры и единицы измерения..."
msgid "Volume Dimensions and Units"
msgstr "Размеры и единицы измерения объёмных данных"
-#: modules/volume/volume_calibrate.c:526
+#: modules/volume/volume_calibrate.c:486
msgid "_Value range:"
msgstr "Диапазон з_начений:"
-#: modules/volume/volume_calibrate.c:555
+#: modules/volume/volume_calibrate.c:508
msgid "Value shi_ft:"
msgstr "С_двиг значений:"
-#: modules/volume/volume_calibrate.c:601
+#: modules/volume/volume_calibrate.c:542
msgid "_Value calibration factor:"
msgstr "Множитель калибровки зн_ачений:"
-#: modules/volume/volume_extract.c:223
+#: modules/volume/volume_extract.c:216
msgid "Shows and/or extracts a section of volume data"
msgstr "Показывает и/или извлекает сечение объёмных данных"
-#: modules/volume/volume_extract.c:237
-msgid "/Show and _extract..."
+#: modules/volume/volume_extract.c:230
+msgid "/Show and _Extract..."
msgstr "/Показать и _извлечь..."
-#: modules/volume/volume_extract.c:241
+#: modules/volume/volume_extract.c:234
msgid "Show and/or extract a section of volume data"
msgstr "Показать и/или извлечь сечение из объёмных данных"
-#: modules/volume/volume_extract.c:270
+#: modules/volume/volume_extract.c:263
msgid "X cross-section"
msgstr "Сечение по X"
-#: modules/volume/volume_extract.c:271
+#: modules/volume/volume_extract.c:264
msgid "Y cross-section"
msgstr "Сечение по Y"
-#: modules/volume/volume_extract.c:272
+#: modules/volume/volume_extract.c:265
msgid "Z cross-section"
msgstr "Сечение по Z"
-#: modules/volume/volume_extract.c:273 modules/volume/volume_extract.c:698
+#: modules/volume/volume_extract.c:266 modules/volume/volume_extract.c:684
msgid "X direction sum"
msgstr "Сумма по направлению X"
-#: modules/volume/volume_extract.c:274 modules/volume/volume_extract.c:700
+#: modules/volume/volume_extract.c:267 modules/volume/volume_extract.c:686
msgid "Y direction sum"
msgstr "Сумма по направлению Y"
-#: modules/volume/volume_extract.c:275 modules/volume/volume_extract.c:702
+#: modules/volume/volume_extract.c:268 modules/volume/volume_extract.c:688
msgid "Z direction sum"
msgstr "Сумма по направлению Z"
-#: modules/volume/volume_extract.c:278
+#: modules/volume/volume_extract.c:271
msgid "X direction"
msgstr "Направление X"
-#: modules/volume/volume_extract.c:279
+#: modules/volume/volume_extract.c:272
msgid "Y direction"
msgstr "Направление Y"
-#: modules/volume/volume_extract.c:280
+#: modules/volume/volume_extract.c:273
msgid "Z direction"
msgstr "Направление Z"
-#: modules/volume/volume_extract.c:322
+#: modules/volume/volume_extract.c:315
msgid "Volume data"
msgstr "Объёмные данные"
-#: modules/volume/volume_extract.c:324
+#: modules/volume/volume_extract.c:317
msgid "_Load"
msgstr "_Загрузить"
-#: modules/volume/volume_extract.c:336
+#: modules/volume/volume_extract.c:329
msgid "_Extract projection"
msgstr "_Извлечь проекцию"
-#: modules/volume/volume_extract.c:354
+#: modules/volume/volume_extract.c:347
msgid "Projections"
msgstr "Проекции"
-#: modules/volume/volume_extract.c:404
+#: modules/volume/volume_extract.c:395
msgid "Z position"
msgstr "Положение по Z"
-#: modules/volume/volume_extract.c:409
+#: modules/volume/volume_extract.c:405
msgid "Shown cut direction:"
msgstr "Показано направление разреза:"
-#: modules/volume/volume_extract.c:419 modules/volume/volume_extract.c:500
-msgid "Show mode:"
-msgstr "Режим отображения:"
-
-#: modules/volume/volume_extract.c:490
+#: modules/volume/volume_extract.c:485
msgid "Graph cut direction:"
msgstr "Режим сечения графика:"
-#: modules/volume/volume_extract.c:525
+#: modules/volume/volume_extract.c:511
msgid "3D view"
msgstr "Просмотр 3D"
-#: modules/volume/volume_extract.c:550
+#: modules/volume/volume_extract.c:538
msgid "Zoom"
msgstr "Увеличение"
-#: modules/volume/volume_extract.c:558
+#: modules/volume/volume_extract.c:545
msgid "Wireframe threshold"
msgstr "Порог сетки"
-#: modules/volume/volume_extract.c:566
+#: modules/volume/volume_extract.c:552
msgid "Z scale"
msgstr "Масштаб по Z"
-#: modules/volume/volume_extract.c:574
+#: modules/volume/volume_extract.c:559
msgid "Opacity scale"
msgstr "Значение прозрачности"
-#: modules/volume/volume_extract.c:580
-msgid "apply perspective"
-msgstr "добавить перспективу"
+#: modules/volume/volume_extract.c:565
+msgid "Apply perspective"
+msgstr "Применить перспективу"
-#: modules/volume/volume_extract.c:589
-msgid "instant 3D render"
-msgstr "мгновенный 3D рендер"
+#: modules/volume/volume_extract.c:574
+msgid "Instant 3D render"
+msgstr "Мгновенная отрисовка 3D"
-#: modules/volume/volume_extract.c:598
+#: modules/volume/volume_extract.c:587
msgid "X view"
msgstr "Вид X"
-#: modules/volume/volume_extract.c:604
+#: modules/volume/volume_extract.c:592
msgid "Y view"
msgstr "Вид Y"
-#: modules/volume/volume_extract.c:610
+#: modules/volume/volume_extract.c:597
msgid "Z view"
msgstr "Вид Z"
-#: modules/volume/volume_extract.c:683
+#: modules/volume/volume_extract.c:669
#, c-format
msgid "X cross-section at x: %d"
msgstr "Сечение по X при x: %d"
-#: modules/volume/volume_extract.c:686
+#: modules/volume/volume_extract.c:672
#, c-format
msgid "Y cross-section at y: %d"
msgstr "Сечение по Y при y: %d"
-#: modules/volume/volume_extract.c:690
+#: modules/volume/volume_extract.c:676
#, c-format
msgid "Z cross-section at Z = %g %s (#%d)"
msgstr "Сечение Z на величине Z = %g %s (#%d)"
-#: modules/volume/volume_extract.c:749 modules/volume/volume_slice.c:1264
+#: modules/volume/volume_extract.c:735 modules/volume/volume_slice.c:1278
#, c-format
msgid "X graph at y: %d z: %d"
msgstr "График X при y: %d z: %d"
-#: modules/volume/volume_extract.c:752 modules/volume/volume_slice.c:1273
+#: modules/volume/volume_extract.c:738 modules/volume/volume_slice.c:1287
#, c-format
msgid "Y graph at x: %d z: %d"
msgstr "График Y при x: %d z: %d"
-#: modules/volume/volume_extract.c:755 modules/volume/volume_slice.c:1255
+#: modules/volume/volume_extract.c:741 modules/volume/volume_slice.c:1269
#, c-format
msgid "Z graph at x: %d y: %d"
msgstr "График Z при x: %d y: %d"
-#: modules/volume/volume_extract.c:776
+#: modules/volume/volume_extract.c:762
msgid "Brick graph"
msgstr "График сечения блока"
-#: modules/volume/volume_extract.c:1056
+#: modules/volume/volume_extract.c:1042
msgid "Load volume data"
msgstr "Загрузить объёмные данные"
-#: modules/volume/volume_extract.c:1218
+#: modules/volume/volume_extract.c:1204
#, c-format
msgid "Shown range %g to %g"
msgstr "Показан диапазон от %g до %g"
-#: modules/volume/volume_extract.c:1911
+#: modules/volume/volume_extract.c:1897
msgid "Building wireframe model..."
msgstr "Строится каркасная модель..."
@@ -14518,97 +15228,97 @@ msgid "Evaluate volume force-distance data"
msgstr "Рассчитать объёмные данные сила-расстояние"
#: modules/volume/volume_fdfit.c:213
-msgid "/_Evaluate FD data..."
+msgid "/_Evaluate FD Data..."
msgstr "/_Рассчитать данные сила-расстояние..."
#: modules/volume/volume_fdfit.c:217
msgid "Evaluate force-distance volume data"
msgstr "Рассчитывает объёмные данные сила-расстояние"
-#: modules/volume/volume_fdfit.c:368
+#: modules/volume/volume_fdfit.c:371
msgid "Curve _X position:"
msgstr "Положение _X кривой:"
-#: modules/volume/volume_fdfit.c:386
+#: modules/volume/volume_fdfit.c:380
msgid "Curve _Y position:"
msgstr "Положение _Y кривой:"
-#: modules/volume/volume_fdfit.c:535
+#: modules/volume/volume_fdfit.c:511
msgid "e_stimate"
msgstr "о_ценивать"
-#: modules/volume/volume_invert.c:51
+#: modules/volume/volume_invert.c:39 modules/volume/volumeops.c:39
msgid "Inverts value in volume data"
msgstr "Инвертирует значения в объёмных данных"
-#: modules/volume/volume_invert.c:65
-msgid "/_Invert value"
+#: modules/volume/volume_invert.c:53
+msgid "/_Invert Value"
msgstr "/_Инвертировать значение"
-#: modules/volume/volume_invert.c:69
+#: modules/volume/volume_invert.c:57
msgid "Invert value in volume data"
msgstr "Инвертирует значения в объёмных данных"
-#: modules/volume/volume_kmeans.c:94
+#: modules/volume/volume_kmeans.c:95
msgid "Calculates K-means clustering on volume data."
msgstr "Рассчитывает кластеризацию K-средних для объёмных данных."
-#: modules/volume/volume_kmeans.c:108
-msgid "/_K-means clustering..."
+#: modules/volume/volume_kmeans.c:109
+msgid "/_K-Means Clustering..."
msgstr "/_Кластеризация K-средних..."
-#: modules/volume/volume_kmeans.c:112
+#: modules/volume/volume_kmeans.c:113
msgid "Calculate K-means clustering on volume data"
msgstr "Рассчитать кластеризацию K-средних для объёмных данных"
-#: modules/volume/volume_kmeans.c:151
+#: modules/volume/volume_kmeans.c:152
msgid "K-means"
msgstr "K-средних"
-#: modules/volume/volume_kmeans.c:170 modules/volume/volume_kmedians.c:164
+#: modules/volume/volume_kmeans.c:170 modules/volume/volume_kmedians.c:163
msgid "_Number of clusters:"
msgstr "_Количество кластеров:"
-#: modules/volume/volume_kmeans.c:177 modules/volume/volume_kmedians.c:171
+#: modules/volume/volume_kmeans.c:177 modules/volume/volume_kmedians.c:170
msgid "Convergence _precision digits:"
msgstr "Знаков _точности сходимости:"
-#: modules/volume/volume_kmeans.c:184 modules/volume/volume_kmedians.c:178
+#: modules/volume/volume_kmeans.c:183 modules/volume/volume_kmedians.c:176
msgid "_Max. iterations:"
msgstr "_Макс. число шагов:"
-#: modules/volume/volume_kmeans.c:189 modules/volume/volume_kmedians.c:183
+#: modules/volume/volume_kmeans.c:187 modules/volume/volume_kmedians.c:181
msgid "_Normalize"
msgstr "_Нормализовать"
-#: modules/volume/volume_kmeans.c:195
+#: modules/volume/volume_kmeans.c:193
msgid "_Remove outliers"
msgstr "_Удалить выпадающие"
-#: modules/volume/volume_kmeans.c:208
+#: modules/volume/volume_kmeans.c:202
msgid "Outliers _threshold:"
msgstr "_Порог выпадающего:"
-#: modules/volume/volume_kmeans.c:431
+#: modules/volume/volume_kmeans.c:425
msgid "K-means iteration..."
msgstr "Итерация K-средних..."
-#: modules/volume/volume_kmeans.c:651
+#: modules/volume/volume_kmeans.c:645
#, c-format
msgid "K-means cluster of %s"
msgstr "Кластер К-средних %s"
-#: modules/volume/volume_kmeans.c:660
+#: modules/volume/volume_kmeans.c:654
#, c-format
msgid "K-means error of %s"
msgstr "Ошибка K-средних для %s"
-#: modules/volume/volume_kmeans.c:670 modules/volume/volume_kmedians.c:514
+#: modules/volume/volume_kmeans.c:664 modules/volume/volume_kmedians.c:512
#, c-format
msgid "Pre-normalized intensity of %s"
msgstr "Интенсивность до нормализации %s"
-#: modules/volume/volume_kmeans.c:702
+#: modules/volume/volume_kmeans.c:696
#, c-format
msgid "K-means center %d"
msgstr "Центр кластера %d"
@@ -14618,7 +15328,7 @@ msgid "Calculates K-medians clustering on volume data."
msgstr "Рассчитывает кластеризацию K-срединных для объёмных данных."
#: modules/volume/volume_kmedians.c:102
-msgid "/_K-medians clustering..."
+msgid "/_K-Medians Clustering..."
msgstr "/_Кластеризация K-срединных..."
#: modules/volume/volume_kmedians.c:106
@@ -14629,48 +15339,48 @@ msgstr "Рассчитать кластеризацию K-срединных д
msgid "K-Medians"
msgstr "K-срединных"
-#: modules/volume/volume_kmedians.c:392
+#: modules/volume/volume_kmedians.c:390
msgid "K-medians iteration..."
msgstr "Итерация K-срединных..."
-#: modules/volume/volume_kmedians.c:495
+#: modules/volume/volume_kmedians.c:493
#, c-format
msgid "K-medians cluster of %s"
msgstr "Кластер K-срединных %s"
-#: modules/volume/volume_kmedians.c:504
+#: modules/volume/volume_kmedians.c:502
#, c-format
msgid "K-medians error of %s"
msgstr "Ошибка K-срединных для %s"
-#: modules/volume/volume_kmedians.c:546
+#: modules/volume/volume_kmedians.c:544
#, c-format
msgid "K-medians center %d"
msgstr "Центр кластера %d"
-#: modules/volume/volume_linestat.c:171
+#: modules/volume/volume_linestat.c:173
msgid "Summarizes profiles of volume data to a channel."
msgstr ""
"Строит сводку каждого профиля (характеризует) и выводит как значения в "
"канале."
-#: modules/volume/volume_linestat.c:185
+#: modules/volume/volume_linestat.c:187
msgid "/Summarize _Profiles..."
msgstr "/Характеризовать _профили..."
-#: modules/volume/volume_linestat.c:189
+#: modules/volume/volume_linestat.c:191
msgid "Summarize profiles"
msgstr "Характеризовать профили"
-#: modules/volume/volume_linestat.c:249
+#: modules/volume/volume_linestat.c:251
msgid "_Extract image"
msgstr "_Извлечь изображение"
-#: modules/volume/volume_linestat.c:250
+#: modules/volume/volume_linestat.c:252
msgid "Set _preview"
msgstr "Установить изображение _предпросмотра"
-#: modules/volume/volume_linestat.c:284
+#: modules/volume/volume_linestat.c:289
msgid "Summarize Volume Profiles"
msgstr "Характеризовать профили объёмных данных"
@@ -14694,53 +15404,113 @@ msgstr "Плоскость как изображение"
msgid "Line graph"
msgstr "Линию как график"
-#: modules/volume/volume_slice.c:290
+#: modules/volume/volume_slice.c:292
msgid "Slice Volume Data"
msgstr "Вырезать из объёмных данных"
-#: modules/volume/volume_slice.c:369
+#: modules/volume/volume_slice.c:371
msgid "_Base plane:"
msgstr "_Основная плоскость:"
-#: modules/volume/volume_slice.c:420
+#: modules/volume/volume_slice.c:422
msgid "Extract _multiple items"
msgstr "Извлечь _несколько элементов"
-#: modules/volume/volume_slice.c:437
+#: modules/volume/volume_slice.c:439
msgid "Positions"
msgstr "Положения"
-#: modules/volume/volume_slice.c:484
+#: modules/volume/volume_slice.c:492
msgid "_Z:"
msgstr "_Z:"
-#: modules/volume/volume_slice.c:1156
+#: modules/volume/volume_slice.c:1167
#, c-format
msgid "Z slice at %.*f%s%s (#%d)"
msgstr "Срез Z на %.*f%s%s (#%d)"
-#: modules/volume/volume_slice.c:1167
+#: modules/volume/volume_slice.c:1178
#, c-format
msgid "Y slice at %.*f%s%s (#%d)"
msgstr "Срез Y на %.*f%s%s (#%d)"
-#: modules/volume/volume_slice.c:1178
+#: modules/volume/volume_slice.c:1189
#, c-format
msgid "X slice at %.*f%s%s (#%d)"
msgstr "Срез X на %.*f%s%s (#%d)"
-#: modules/volume/volume_slice.c:1307
+#: modules/volume/volume_slice.c:1325
msgid "Volume Z graphs"
msgstr "Графики Z объёма"
-#: modules/volume/volume_slice.c:1314
+#: modules/volume/volume_slice.c:1332
msgid "Volume X graphs"
msgstr "Графики X объёма"
-#: modules/volume/volume_slice.c:1321
+#: modules/volume/volume_slice.c:1339
msgid "Volume Y graphs"
msgstr "Графики Y объёма"
+#: modules/volume/volume_swaxes.c:104
+msgid "Swaps axes of volume data."
+msgstr "Меняет местами оси объёмных данных."
+
+#: modules/volume/volume_swaxes.c:118
+msgid "/S_wap axes..."
+msgstr "/По_менять местами оси..."
+
+#: modules/volume/volume_swaxes.c:122
+msgid "Swap axes"
+msgstr "Поменять местами оси"
+
+#: modules/volume/volume_swaxes.c:156
+msgid "X"
+msgstr "X"
+
+#: modules/volume/volume_swaxes.c:157
+msgid "X, reversed"
+msgstr "X, в обратном порядке"
+
+#: modules/volume/volume_swaxes.c:158
+msgid "Y"
+msgstr "Y"
+
+#: modules/volume/volume_swaxes.c:159
+msgid "Y, reversed"
+msgstr "Y, в обратном порядке"
+
+#: modules/volume/volume_swaxes.c:160
+msgid "Z"
+msgstr "Z"
+
+#: modules/volume/volume_swaxes.c:161
+msgid "Z, reversed"
+msgstr "Z, в обратном порядке"
+
+#: modules/volume/volume_swaxes.c:175
+msgid "Swap Volume Axes"
+msgstr "Поменять местами оси"
+
+#: modules/volume/volume_swaxes.c:196
+msgid "Current _X axis will become:"
+msgstr "Текущая ось _X станет:"
+
+#: modules/volume/volume_swaxes.c:204
+msgid "Current _Y axis will become:"
+msgstr "Текущая ось _Y станет:"
+
+#: modules/volume/volume_swaxes.c:212
+msgid "Current _Z axis will become:"
+msgstr "Текущая ось _Z станет:"
+
+#: modules/volume/volume_swaxes.c:219
+msgid "Create new volume data"
+msgstr "Создать новый блок объёмных данных"
+
+#: modules/volume/volume_swaxes.c:286
+msgid "Z axis calibration will be lost."
+msgstr "Калибровка оси Z будет утеряна."
+
#: modules/volume/volume_zcal.c:104
msgid "Attaches, extracts and removes volume data z-axis calibration."
msgstr ""
@@ -14811,6 +15581,14 @@ msgstr ""
"Количество значений в файле данных %d\n"
"отличается от числа плоскостей %d."
+#: modules/volume/volumeops.c:53
+msgid "/Extract _Preview"
+msgstr "/Извлечь изображение _предпросмотра"
+
+#: modules/volume/volumeops.c:57
+msgid "Extract volume data preview to an image"
+msgstr "Извлечь изображение предпросмотра из объёмных данных"
+
#: modules/xyz/xyz_drift.c:267
msgid "Analyzes drift in XYZ data."
msgstr "Анализирует дрейф в данных XYZ."
@@ -14855,7 +15633,7 @@ msgstr "дрейф оси z"
msgid "Analyze XYZ Drift"
msgstr "Анализировать дрейф в данных XYZ"
-#: modules/xyz/xyz_drift.c:566 modules/xyz/xyz_raster.c:391
+#: modules/xyz/xyz_drift.c:566 modules/xyz/xyz_raster.c:406
msgid "Reset Ran_ges"
msgstr "Сбросить _диапазоны"
@@ -14863,11 +15641,11 @@ msgstr "Сбросить _диапазоны"
msgid "_Guess parameters"
msgstr "О_ценка параметров"
-#: modules/xyz/xyz_drift.c:778 modules/xyz/xyz_raster.c:570
+#: modules/xyz/xyz_drift.c:778 modules/xyz/xyz_raster.c:539
msgid "_X-range:"
msgstr "Диапазон _X:"
-#: modules/xyz/xyz_drift.c:800 modules/xyz/xyz_raster.c:592
+#: modules/xyz/xyz_drift.c:800 modules/xyz/xyz_raster.c:561
msgid "_Y-range:"
msgstr "Диапазон _Y:"
@@ -14945,7 +15723,7 @@ msgstr "Не найдено соседей"
msgid "Fitting in progress..."
msgstr "Идёт аппроксимация..."
-#: modules/xyz/xyz_drift.c:2269 modules/xyz/xyz_raster.c:1012
+#: modules/xyz/xyz_drift.c:2264 modules/xyz/xyz_raster.c:981
msgid "Physical dimensions are invalid."
msgstr "Физические размеры неверны."
@@ -14985,39 +15763,39 @@ msgstr "Выравнивание данных XYZ"
msgid "Update X and Y of _all compatible data"
msgstr "Обновить X и Y _всех совместимых данных"
-#: modules/xyz/xyz_raster.c:197
+#: modules/xyz/xyz_raster.c:194
msgid "Rasterizes XYZ data to images."
msgstr "Растеризует данные XYZ в изображения."
-#: modules/xyz/xyz_raster.c:211
+#: modules/xyz/xyz_raster.c:208
msgid "/_Rasterize..."
msgstr "/_Растеризовать..."
-#: modules/xyz/xyz_raster.c:215
+#: modules/xyz/xyz_raster.c:212
msgid "Rasterize to image"
msgstr "Растеризовать в изображение"
-#: modules/xyz/xyz_raster.c:340
+#: modules/xyz/xyz_raster.c:337
msgid "Rasterize XYZ Data"
msgstr "Растеризовать данные XYZ"
-#: modules/xyz/xyz_raster.c:354
+#: modules/xyz/xyz_raster.c:351
msgid "Create Image _Directly"
msgstr "Создать изображение _сразу"
-#: modules/xyz/xyz_raster.c:360
+#: modules/xyz/xyz_raster.c:357
msgid "XY points form a regular grid so interpolation is not necessary."
msgstr "Точки XY формируют правильную сетку, поэтому интерполяция не нужна."
-#: modules/xyz/xyz_raster.c:381
+#: modules/xyz/xyz_raster.c:392
msgid "Make Pixels S_quare"
msgstr "Сделать пиксели _квадратными"
-#: modules/xyz/xyz_raster.c:642
+#: modules/xyz/xyz_raster.c:611
msgid "Field"
msgstr "Поле"
-#: modules/xyz/xyz_raster.c:956
+#: modules/xyz/xyz_raster.c:925
#, c-format
msgid ""
"Number of points: %u\n"
@@ -15028,7 +15806,7 @@ msgstr ""
"Объединено слишком близких: %u\n"
"Добавлено на границах: %u"
-#: modules/xyz/xyz_raster.c:1091
+#: modules/xyz/xyz_raster.c:1065
msgid ""
"XYZ data regularization failed due to numerical instability or was "
"interrupted."
@@ -15036,6 +15814,274 @@ msgstr ""
"Регуляризация данных XYZ завершилась неудачно вследствие численной "
"нестабильности или была прервана."
+#~ msgid "Generates surfaces composed from randomly placed fibres."
+#~ msgstr ""
+#~ "Рассчитывает поверхности, состоящие из случайно расположенных волокон."
+
+#~ msgid "/S_ynthetic/_Deposition/_Fibres..."
+#~ msgstr "/Син_тез/_Осаждение/_Волокна..."
+
+#~ msgid "Generate surface of randomly placed fibres"
+#~ msgstr "Создать поверхность из случайно расположенных волокон"
+
+#~ msgid "Random Fibres"
+#~ msgstr "Случайные волокна"
+
+#~ msgid "Along fibre:"
+#~ msgstr "Вдоль волокна:"
+
+#~ msgid "Generating fibres..."
+#~ msgstr "Генерация волокон..."
+
+#~ msgid "Re_fine"
+#~ msgstr "_Уточнить"
+
+#~ msgid "Distribute"
+#~ msgstr "Распространить"
+
+#~ msgid "Replace"
+#~ msgstr "Заменить"
+
+#~ msgid "/_Mask/Morphological Operation..."
+#~ msgstr "/_Маска/Морфологическая операция..."
+
+#~ msgid "_Fix res.:"
+#~ msgstr "_Фикс. разр.:"
+
+#~ msgid "_Radial profiles"
+#~ msgstr "_Радиальные профили"
+
+#~ msgid "Released %s\n"
+#~ msgstr "Выпущен %s\n"
+
+#~ msgid "/Show and _extract..."
+#~ msgstr "/Показать и _извлечь..."
+
+#~ msgid "/_Evaluate FD data..."
+#~ msgstr "/_Рассчитать данные сила-расстояние..."
+
+#~ msgid "/_Invert value"
+#~ msgstr "/_Инвертировать значение"
+
+#~ msgid "/_K-means clustering..."
+#~ msgstr "/_Кластеризация K-средних..."
+
+#~ msgid "/_K-medians clustering..."
+#~ msgstr "/_Кластеризация K-срединных..."
+
+#~ msgid "pixels"
+#~ msgstr "точек"
+
+#~ msgid "Frame thickness:"
+#~ msgstr "Толщина рамки:"
+
+#~ msgid "Show mode:"
+#~ msgstr "Режим отображения:"
+
+#~ msgid "apply perspective"
+#~ msgstr "добавить перспективу"
+
+#~ msgid "instant 3D render"
+#~ msgstr "мгновенный 3D рендер"
+
+#~ msgid "_Like Current Channel"
+#~ msgstr "Как _у текущего канала"
+
+#~ msgid "Surface _coverage:"
+#~ msgstr "По_крытие поверхности:"
+
+#~ msgid "Apply Ga_ussian filter of width: "
+#~ msgstr "Применить г-ауссов фильтр шириной:"
+
+#~ msgid "Com_bine with existing mask"
+#~ msgstr "О_бъединить с имеющейся маской"
+
+#~ msgid "Reco_mpute"
+#~ msgstr "_Пересчитать"
+
+#~ msgid "/_Grains/_Mark by Otsu's..."
+#~ msgstr "/Зёрн_а/Пометить по методу _Оцу..."
+
+#~ msgid "/_Basic Operations/Volumize..."
+#~ msgstr "/_Базовые действия/_Придать объём..."
+
+#~ msgid "Fast Fourier Transform"
+#~ msgstr "Быстрое преобразование Фурье"
+
+#~ msgid "built-in SimpleFFT\n"
+#~ msgstr "встроенное SimpleFFT\n"
+
+#~ msgid "Initializing GUI"
+#~ msgstr "Инициализация графического интерфейса"
+
+#~ msgid "Estimate light height difference in MFM data"
+#~ msgstr "Оценить небольшие различия высоты в данных МСМ"
+
+#~ msgid "_Remanent magnetisation:"
+#~ msgstr "Остато_чная магнетизация:"
+
+#~ msgid "Stitch operations on data fields."
+#~ msgstr "Операции сшивания с полями данных."
+
+#~ msgid "Stitch operations on data"
+#~ msgstr "Операции сшивания над данными"
+
+#~ msgid "X offset"
+#~ msgstr "Смещение по X"
+
+#~ msgid "Y offset"
+#~ msgstr "Смещение по Y"
+
+#~ msgid "Create new channel"
+#~ msgstr "Создать новый канал"
+
+#~ msgid "Current Channel"
+#~ msgstr "Текущий канал"
+
+#~ msgid "_Take Dimensions from Current Channel"
+#~ msgstr "Взять _размеры текущего канала"
+
+#~ msgid "_Replace the current channel"
+#~ msgstr "За_менить текущий канал"
+
+#~ msgid "_Start from the current channel"
+#~ msgstr "Н_ачать с текущего канала"
+
+#~ msgid "Extract mask to a new channel"
+#~ msgstr "Извлечь маску в новый канал"
+
+#~ msgid "Hx"
+#~ msgstr "Hx"
+
+#~ msgid "Hz"
+#~ msgstr "Hz"
+
+#~ msgid "Fz"
+#~ msgstr "Fz"
+
+#~ msgid "dFz/dz"
+#~ msgstr "dFz/dz"
+
+#~ msgid "d²Fz/dz²"
+#~ msgstr "d²Fz/dz²"
+
+#~ msgid "Slab"
+#~ msgstr "Блок"
+
+#~ msgid "Slab size _x:"
+#~ msgstr "Размер _блока по X:"
+
+#~ msgid "Slab size _y:"
+#~ msgstr "Размер б_лока по Y:"
+
+#~ msgid "Slab size _z (length):"
+#~ msgstr "Размер бло_ка по Z (длина):"
+
+#~ msgid "Generate surface with separated phases."
+#~ msgstr "Генерировать поверхность с раздельными фазами."
+
+#~ msgid "Extract presentation to a new channel"
+#~ msgstr "Извлекает презентацию в отдельный канал"
+
+#~ msgid "/S_ynthetic/_Ballistic..."
+#~ msgstr "/Син_тез/_Баллистический..."
+
+#~ msgid "/S_ynthetic/_Columnar..."
+#~ msgstr "/Син_тез/С_толбчатая..."
+
+#~ msgid "/S_ynthetic/_Particles..."
+#~ msgstr "/Син_тез/_Частицы..."
+
+#~ msgid "/S_ynthetic/_Diffusion..."
+#~ msgstr "/Син_тез/Ди_ффузия..."
+
+#~ msgid "/SPM M_odes/_MFM/_Current line field..."
+#~ msgstr "/_Режимы СЗМ/_МСМ/Поле линии _тока..."
+
+#~ msgid "Current line stray field"
+#~ msgstr "Поле рассеяния линии тока"
+
+#~ msgid "_Stripe current:"
+#~ msgstr "_Ток полосы:"
+
+#~ msgid "_Tip magnetization:"
+#~ msgstr "_Намагниченность зонда:"
+
+#~ msgid "_Slab size x:"
+#~ msgstr "Размер _блока по X:"
+
+#~ msgid "_Slab size y:"
+#~ msgstr "Размер б_лока по Y:"
+
+#~ msgid "_Slab size z (length):"
+#~ msgstr "Размер бло_ка по _Z (длина):"
+
+#~ msgid "/SPM M_odes/_MFM/_Perpendicular media field..."
+#~ msgstr "/_Режимы СЗМ/_МСМ/Поле _перпендикулярной среды..."
+
+#~ msgid "Perpendicular media stray field"
+#~ msgstr "Поле рассеяния перпендикулярной среды"
+
+#~ msgid "Include domain walls"
+#~ msgstr "Включить границы доменов"
+
+#~ msgid "/SPM M_odes/_MFM/_Estimate shift in z..."
+#~ msgstr "/_Режимы СЗМ/_МСМ/О_ценка сдвига по z..."
+
+#~ msgid "Estimate lift height shift"
+#~ msgstr "Оценить сдвиг высоты подъёма"
+
+#~ msgid "_Search from:"
+#~ msgstr "_Искать от:"
+
+#~ msgid "/SPM M_odes/_MFM/Para_llel media field..."
+#~ msgstr "/_Режимы СЗМ/_МСМ/Поле п_араллельной среды..."
+
+#~ msgid "Parallel media stray field"
+#~ msgstr "Поле рассеяния параллельной среды"
+
+#~ msgid "Gap size:"
+#~ msgstr "Зазор:"
+
+#~ msgid "/SPM M_odes/_MFM/_Field shift in z..."
+#~ msgstr "/_Режимы СЗМ/_МСМ/_Сдвиг поля по z..."
+
+#~ msgid "Stray field plane shift"
+#~ msgstr "Смещение поля рассеяния в плоскости"
+
+#~ msgid "/S_ynthetic/_Objects..."
+#~ msgstr "/Син_тез/_Объекты..."
+
+#~ msgid "/_Statistics/_PSF guess..."
+#~ msgstr "/_Статистика/О_ценка PSF..."
+
+#~ msgid "(PSF*P)"
+#~ msgstr "(PSF*P)"
+
+#~ msgid "(PSF*P) - I"
+#~ msgstr "(PSF*P) - I"
+
+#~ msgid "Ideal response:"
+#~ msgstr "Идеальный отклик:"
+
+#, fuzzy
+#~ msgid "Extracts ROI average graphs from volume data."
+#~ msgstr "Извлекает плоскости с изображениями и графики из объёмных данных."
+
+#, fuzzy
+#~ msgid "/ROI Average..."
+#~ msgstr "/Объ_единить..."
+
+#, fuzzy
+#~ msgid "Extract ROI average line graphs"
+#~ msgstr "Извлечь плоскости изображения и линии графиков"
+
+#~ msgid "Open Python script"
+#~ msgstr "Открыть скрипт Python"
+
+#~ msgid "Save Script as"
+#~ msgstr "Сохранить скрипт как"
+
#~ msgid "Ellptical parabola"
#~ msgstr "Эллиптическая парабола"
diff --git a/python/Makefile.in b/python/Makefile.in
index 4aff1b5..1d8b46d 100644
--- a/python/Makefile.in
+++ b/python/Makefile.in
@@ -203,10 +203,7 @@ EPYDOC = @EPYDOC@
EXEEXT = @EXEEXT@
EXR_CFLAGS = @EXR_CFLAGS@
EXR_LIBS = @EXR_LIBS@
-FFTW3_1_CFLAGS = @FFTW3_1_CFLAGS@
-FFTW3_1_LIBS = @FFTW3_1_LIBS@
FFTW3_CFLAGS = @FFTW3_CFLAGS@
-FFTW3_DEPENDENCY = @FFTW3_DEPENDENCY@
FFTW3_LIBS = @FFTW3_LIBS@
FGREP = @FGREP@
GCONFTOOL = @GCONFTOOL@
@@ -216,6 +213,8 @@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
GLIBC21 = @GLIBC21@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GMODULE_CFLAGS = @GMODULE_CFLAGS@
GMODULE_LIBS = @GMODULE_LIBS@
GMSGFMT = @GMSGFMT@
@@ -240,7 +239,9 @@ GTK_MAC_LIBS = @GTK_MAC_LIBS@
GWY_VERSION_MAJOR = @GWY_VERSION_MAJOR@
GWY_VERSION_MINOR = @GWY_VERSION_MINOR@
GWY_VERSION_STRING = @GWY_VERSION_STRING@
+HDRIMAGE_EXTRA_CFLAGS = @HDRIMAGE_EXTRA_CFLAGS@
HTML_DIR = @HTML_DIR@
+INKSCAPE = @INKSCAPE@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -298,6 +299,7 @@ PASCAL = @PASCAL@
PATH_SEPARATOR = @PATH_SEPARATOR@
PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
+PNGCRUSH = @PNGCRUSH@
PNG_CFLAGS = @PNG_CFLAGS@
PNG_LIBS = @PNG_LIBS@
POD2MAN = @POD2MAN@
@@ -306,17 +308,13 @@ PYGTK_CFLAGS = @PYGTK_CFLAGS@
PYGTK_CODEGENDIR = @PYGTK_CODEGENDIR@
PYGTK_LIBS = @PYGTK_LIBS@
PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
PYTHON_EXTRA_CFLAGS = @PYTHON_EXTRA_CFLAGS@
PYTHON_INCLUDES = @PYTHON_INCLUDES@
-PYTHON_LIBS = @PYTHON_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
PYTHON_PLATFORM = @PYTHON_PLATFORM@
PYTHON_PREFIX = @PYTHON_PREFIX@
-PYTHON_SYSCFG_BASECFLAGS = @PYTHON_SYSCFG_BASECFLAGS@
-PYTHON_SYSCFG_CCSHARED = @PYTHON_SYSCFG_CCSHARED@
-PYTHON_SYSCFG_LDFLAGS = @PYTHON_SYSCFG_LDFLAGS@
-PYTHON_SYSCFG_LIBDIR = @PYTHON_SYSCFG_LIBDIR@
-PYTHON_SYSCFG_LINKFORSHARED = @PYTHON_SYSCFG_LINKFORSHARED@
PYTHON_VERSION = @PYTHON_VERSION@
RANLIB = @RANLIB@
RUBY = @RUBY@
diff --git a/ruby/Makefile.in b/ruby/Makefile.in
index bae1160..c060890 100644
--- a/ruby/Makefile.in
+++ b/ruby/Makefile.in
@@ -199,10 +199,7 @@ EPYDOC = @EPYDOC@
EXEEXT = @EXEEXT@
EXR_CFLAGS = @EXR_CFLAGS@
EXR_LIBS = @EXR_LIBS@
-FFTW3_1_CFLAGS = @FFTW3_1_CFLAGS@
-FFTW3_1_LIBS = @FFTW3_1_LIBS@
FFTW3_CFLAGS = @FFTW3_CFLAGS@
-FFTW3_DEPENDENCY = @FFTW3_DEPENDENCY@
FFTW3_LIBS = @FFTW3_LIBS@
FGREP = @FGREP@
GCONFTOOL = @GCONFTOOL@
@@ -212,6 +209,8 @@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
GLIBC21 = @GLIBC21@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GMODULE_CFLAGS = @GMODULE_CFLAGS@
GMODULE_LIBS = @GMODULE_LIBS@
GMSGFMT = @GMSGFMT@
@@ -236,7 +235,9 @@ GTK_MAC_LIBS = @GTK_MAC_LIBS@
GWY_VERSION_MAJOR = @GWY_VERSION_MAJOR@
GWY_VERSION_MINOR = @GWY_VERSION_MINOR@
GWY_VERSION_STRING = @GWY_VERSION_STRING@
+HDRIMAGE_EXTRA_CFLAGS = @HDRIMAGE_EXTRA_CFLAGS@
HTML_DIR = @HTML_DIR@
+INKSCAPE = @INKSCAPE@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -294,6 +295,7 @@ PASCAL = @PASCAL@
PATH_SEPARATOR = @PATH_SEPARATOR@
PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
+PNGCRUSH = @PNGCRUSH@
PNG_CFLAGS = @PNG_CFLAGS@
PNG_LIBS = @PNG_LIBS@
POD2MAN = @POD2MAN@
@@ -302,17 +304,13 @@ PYGTK_CFLAGS = @PYGTK_CFLAGS@
PYGTK_CODEGENDIR = @PYGTK_CODEGENDIR@
PYGTK_LIBS = @PYGTK_LIBS@
PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
PYTHON_EXTRA_CFLAGS = @PYTHON_EXTRA_CFLAGS@
PYTHON_INCLUDES = @PYTHON_INCLUDES@
-PYTHON_LIBS = @PYTHON_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
PYTHON_PLATFORM = @PYTHON_PLATFORM@
PYTHON_PREFIX = @PYTHON_PREFIX@
-PYTHON_SYSCFG_BASECFLAGS = @PYTHON_SYSCFG_BASECFLAGS@
-PYTHON_SYSCFG_CCSHARED = @PYTHON_SYSCFG_CCSHARED@
-PYTHON_SYSCFG_LDFLAGS = @PYTHON_SYSCFG_LDFLAGS@
-PYTHON_SYSCFG_LIBDIR = @PYTHON_SYSCFG_LIBDIR@
-PYTHON_SYSCFG_LINKFORSHARED = @PYTHON_SYSCFG_LINKFORSHARED@
PYTHON_VERSION = @PYTHON_VERSION@
RANLIB = @RANLIB@
RUBY = @RUBY@
diff --git a/thumbnailer/Makefile.in b/thumbnailer/Makefile.in
index 5898f84..19fbe08 100644
--- a/thumbnailer/Makefile.in
+++ b/thumbnailer/Makefile.in
@@ -282,10 +282,7 @@ EPYDOC = @EPYDOC@
EXEEXT = @EXEEXT@
EXR_CFLAGS = @EXR_CFLAGS@
EXR_LIBS = @EXR_LIBS@
-FFTW3_1_CFLAGS = @FFTW3_1_CFLAGS@
-FFTW3_1_LIBS = @FFTW3_1_LIBS@
FFTW3_CFLAGS = @FFTW3_CFLAGS@
-FFTW3_DEPENDENCY = @FFTW3_DEPENDENCY@
FFTW3_LIBS = @FFTW3_LIBS@
FGREP = @FGREP@
GCONFTOOL = @GCONFTOOL@
@@ -295,6 +292,8 @@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
GLIBC21 = @GLIBC21@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GMODULE_CFLAGS = @GMODULE_CFLAGS@
GMODULE_LIBS = @GMODULE_LIBS@
GMSGFMT = @GMSGFMT@
@@ -319,7 +318,9 @@ GTK_MAC_LIBS = @GTK_MAC_LIBS@
GWY_VERSION_MAJOR = @GWY_VERSION_MAJOR@
GWY_VERSION_MINOR = @GWY_VERSION_MINOR@
GWY_VERSION_STRING = @GWY_VERSION_STRING@
+HDRIMAGE_EXTRA_CFLAGS = @HDRIMAGE_EXTRA_CFLAGS@
HTML_DIR = @HTML_DIR@
+INKSCAPE = @INKSCAPE@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -377,6 +378,7 @@ PASCAL = @PASCAL@
PATH_SEPARATOR = @PATH_SEPARATOR@
PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
+PNGCRUSH = @PNGCRUSH@
PNG_CFLAGS = @PNG_CFLAGS@
PNG_LIBS = @PNG_LIBS@
POD2MAN = @POD2MAN@
@@ -385,17 +387,13 @@ PYGTK_CFLAGS = @PYGTK_CFLAGS@
PYGTK_CODEGENDIR = @PYGTK_CODEGENDIR@
PYGTK_LIBS = @PYGTK_LIBS@
PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
PYTHON_EXTRA_CFLAGS = @PYTHON_EXTRA_CFLAGS@
PYTHON_INCLUDES = @PYTHON_INCLUDES@
-PYTHON_LIBS = @PYTHON_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
PYTHON_PLATFORM = @PYTHON_PLATFORM@
PYTHON_PREFIX = @PYTHON_PREFIX@
-PYTHON_SYSCFG_BASECFLAGS = @PYTHON_SYSCFG_BASECFLAGS@
-PYTHON_SYSCFG_CCSHARED = @PYTHON_SYSCFG_CCSHARED@
-PYTHON_SYSCFG_LDFLAGS = @PYTHON_SYSCFG_LDFLAGS@
-PYTHON_SYSCFG_LIBDIR = @PYTHON_SYSCFG_LIBDIR@
-PYTHON_SYSCFG_LINKFORSHARED = @PYTHON_SYSCFG_LINKFORSHARED@
PYTHON_VERSION = @PYTHON_VERSION@
RANLIB = @RANLIB@
RUBY = @RUBY@
diff --git a/utils/Makefile.am b/utils/Makefile.am
index f829b10..085d4d0 100644
--- a/utils/Makefile.am
+++ b/utils/Makefile.am
@@ -1,4 +1,4 @@
-# @(#) $Id: Makefile.am 17857 2015-12-16 15:52:24Z yeti-dn $
+# @(#) $Id: Makefile.am 20077 2017-07-23 19:30:49Z yeti-dn $
libgwyddion = $(top_builddir)/libgwyddion/libgwyddion2.la
libgwymodule = $(top_builddir)/libgwymodule/libgwymodule2.la
@@ -28,6 +28,7 @@ EXTRA_DIST = \
gwyddion.nsi.template \
generate-gwyddion-nsi.py \
gen-gwyddion-msvc-sln.py \
+ gen-module-bundle.sh \
update-api-indices.py \
bundler.in \
mkosxlauncher.in
diff --git a/utils/Makefile.in b/utils/Makefile.in
index 45899ca..04c848d 100644
--- a/utils/Makefile.in
+++ b/utils/Makefile.in
@@ -14,7 +14,7 @@
@SET_MAKE@
-# @(#) $Id: Makefile.am 17857 2015-12-16 15:52:24Z yeti-dn $
+# @(#) $Id: Makefile.am 20077 2017-07-23 19:30:49Z yeti-dn $
@@ -253,10 +253,7 @@ EPYDOC = @EPYDOC@
EXEEXT = @EXEEXT@
EXR_CFLAGS = @EXR_CFLAGS@
EXR_LIBS = @EXR_LIBS@
-FFTW3_1_CFLAGS = @FFTW3_1_CFLAGS@
-FFTW3_1_LIBS = @FFTW3_1_LIBS@
FFTW3_CFLAGS = @FFTW3_CFLAGS@
-FFTW3_DEPENDENCY = @FFTW3_DEPENDENCY@
FFTW3_LIBS = @FFTW3_LIBS@
FGREP = @FGREP@
GCONFTOOL = @GCONFTOOL@
@@ -266,6 +263,8 @@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
GLIBC21 = @GLIBC21@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_MKENUMS = @GLIB_MKENUMS@
GMODULE_CFLAGS = @GMODULE_CFLAGS@
GMODULE_LIBS = @GMODULE_LIBS@
GMSGFMT = @GMSGFMT@
@@ -290,7 +289,9 @@ GTK_MAC_LIBS = @GTK_MAC_LIBS@
GWY_VERSION_MAJOR = @GWY_VERSION_MAJOR@
GWY_VERSION_MINOR = @GWY_VERSION_MINOR@
GWY_VERSION_STRING = @GWY_VERSION_STRING@
+HDRIMAGE_EXTRA_CFLAGS = @HDRIMAGE_EXTRA_CFLAGS@
HTML_DIR = @HTML_DIR@
+INKSCAPE = @INKSCAPE@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -348,6 +349,7 @@ PASCAL = @PASCAL@
PATH_SEPARATOR = @PATH_SEPARATOR@
PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
+PNGCRUSH = @PNGCRUSH@
PNG_CFLAGS = @PNG_CFLAGS@
PNG_LIBS = @PNG_LIBS@
POD2MAN = @POD2MAN@
@@ -356,17 +358,13 @@ PYGTK_CFLAGS = @PYGTK_CFLAGS@
PYGTK_CODEGENDIR = @PYGTK_CODEGENDIR@
PYGTK_LIBS = @PYGTK_LIBS@
PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
PYTHON_EXTRA_CFLAGS = @PYTHON_EXTRA_CFLAGS@
PYTHON_INCLUDES = @PYTHON_INCLUDES@
-PYTHON_LIBS = @PYTHON_LIBS@
+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@
PYTHON_PLATFORM = @PYTHON_PLATFORM@
PYTHON_PREFIX = @PYTHON_PREFIX@
-PYTHON_SYSCFG_BASECFLAGS = @PYTHON_SYSCFG_BASECFLAGS@
-PYTHON_SYSCFG_CCSHARED = @PYTHON_SYSCFG_CCSHARED@
-PYTHON_SYSCFG_LDFLAGS = @PYTHON_SYSCFG_LDFLAGS@
-PYTHON_SYSCFG_LIBDIR = @PYTHON_SYSCFG_LIBDIR@
-PYTHON_SYSCFG_LINKFORSHARED = @PYTHON_SYSCFG_LINKFORSHARED@
PYTHON_VERSION = @PYTHON_VERSION@
RANLIB = @RANLIB@
RUBY = @RUBY@
@@ -476,6 +474,7 @@ EXTRA_DIST = \
gwyddion.nsi.template \
generate-gwyddion-nsi.py \
gen-gwyddion-msvc-sln.py \
+ gen-module-bundle.sh \
update-api-indices.py \
bundler.in \
mkosxlauncher.in
diff --git a/utils/gen-gwyddion-msvc-sln.py b/utils/gen-gwyddion-msvc-sln.py
index 0f69407..b645dfc 100755
--- a/utils/gen-gwyddion-msvc-sln.py
+++ b/utils/gen-gwyddion-msvc-sln.py
@@ -60,7 +60,8 @@ libs_x64 = ['cairo.lib', 'cfitsio.lib', 'gdk-win32-2.0.lib', 'gdk_pixbuf-2.0.lib
'pangoft2-1.0.lib', 'python27.lib', 'zlibwapi.lib', '%(AdditionalDependencies)']
generated_files_by_autotools = [
-'app//gwyapptypes.h', 'app//gwyapptypes.c', 'app//authors.h',
+'app//gwyapptypes.h', 'app//gwyapptypes.c', 'app//authors.h',
+'libdraw//gwydrawtypes.h', 'libdraw//gwydrawtypes.c',
'libgwyddion//gwyddiontypes.h', 'libgwyddion//gwyddiontypes.c', 'libgwyddion//gwyversion.h',
'libgwydgets//gwydgettypes.h', 'libgwydgets//gwydgettypes.c',
'libgwydgets//gwydgetmarshals.h', 'libgwydgets//gwydgetmarshals.c',
@@ -970,6 +971,8 @@ def create_vcxproj(path, name, sources, headers, definitions, configuration_type
ClCompile = SubElement(ItemDefinitionGroup, "ClCompile")
PreprocessorDefinitions = SubElement(ClCompile, "PreprocessorDefinitions")
PreprocessorDefinitions.text = "_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)"
+ WarningLevel = SubElement(ClCompile, "WarningLevel")
+ WarningLevel.text = "Level4"
Link = SubElement(ItemDefinitionGroup, "Link")
AdditionalDependencies = SubElement(Link, "AdditionalDependencies")
#AdditionalDependencies.text = "libgwyapp2-0.lib;libgwyddion2-0.lib;libgwydgets2-0.lib;libgwydraw2-0.lib;libgwymodule2-0.lib;libgwyprocess2-0.lib;cairo.lib;glib-2.0.lib;gtk-win32-2.0.lib;gdk-win32-2.0.lib;gdk_pixbuf-2.0.lib;gio-2.0.lib;gmodule-2.0.lib;gobject-2.0.lib;intl.lib;libgtkglext-win32-1.0.lib;libgdkglext-win32-1.0.lib;libpng.lib;libxml2.lib;OpenGL32.Lib;pango-1.0.lib;pangocairo-1.0.lib;pangoft2-1.0.lib;python27.lib;Qt5Gui.lib;zlib.lib;%(AdditionalDependencies)"
@@ -1000,6 +1003,8 @@ def create_vcxproj(path, name, sources, headers, definitions, configuration_type
ClCompile = SubElement(ItemDefinitionGroup, "ClCompile")
PreprocessorDefinitions = SubElement(ClCompile, "PreprocessorDefinitions")
PreprocessorDefinitions.text = "_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)"
+ WarningLevel = SubElement(ClCompile, "WarningLevel")
+ WarningLevel.text = "Level4"
Link = SubElement(ItemDefinitionGroup, "Link")
AdditionalDependencies = SubElement(Link, "AdditionalDependencies")
AdditionalDependencies.text = get_project_dependency_libs_x64(name)
@@ -1024,6 +1029,8 @@ def create_vcxproj(path, name, sources, headers, definitions, configuration_type
ClCompile = SubElement(ItemDefinitionGroup, "ClCompile")
PreprocessorDefinitions = SubElement(ClCompile, "PreprocessorDefinitions")
PreprocessorDefinitions.text = "_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)"
+ WarningLevel = SubElement(ClCompile, "WarningLevel")
+ WarningLevel.text = "Level4"
Link = SubElement(ItemDefinitionGroup, "Link")
AdditionalDependencies = SubElement(Link, "AdditionalDependencies")
AdditionalDependencies.text = get_project_dependency_libs_win32(name)
@@ -1048,6 +1055,8 @@ def create_vcxproj(path, name, sources, headers, definitions, configuration_type
ClCompile = SubElement(ItemDefinitionGroup, "ClCompile")
PreprocessorDefinitions = SubElement(ClCompile, "PreprocessorDefinitions")
PreprocessorDefinitions.text = "_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)"
+ WarningLevel = SubElement(ClCompile, "WarningLevel")
+ WarningLevel.text = "Level4"
Link = SubElement(ItemDefinitionGroup, "Link")
AdditionalDependencies = SubElement(Link, "AdditionalDependencies")
AdditionalDependencies.text = get_project_dependency_libs_x64(name)
diff --git a/utils/gen-module-bundle.sh b/utils/gen-module-bundle.sh
new file mode 100755
index 0000000..49246f6
--- /dev/null
+++ b/utils/gen-module-bundle.sh
@@ -0,0 +1,55 @@
+#!/bin/sh
+
+out="$1"
+shift
+
+echo '/* This is a 'GENERATED' file. */' >"$out.tmp"
+
+cat >>"$out.tmp" <<'EOF'
+#include <glib.h>
+#include <libgwymodule/gwymodule.h>
+
+static const GwyModuleRecord* register_bundle(void);
+
+static GwyModuleInfo module_info = {
+ GWY_MODULE_ABI_VERSION | GWY_MODULE_BUNDLE_FLAG,
+ (GwyModuleRegisterFunc)®ister_bundle,
+ NULL, NULL, NULL, NULL, NULL,
+};
+
+GWY_MODULE_QUERY(module_info)
+
+EOF
+
+modnames=$(echo "$@" | sed -e 's/\.la */ /g' -e 's/\.la$//')
+for modname in $modnames; do
+ echo $modname
+done | sed -e 'y/-/_/' \
+ -e 's/.*/GwyModuleInfo* _gwy_module_query__\0(void);/' \
+ >>"$out.tmp"
+
+cat >>"$out.tmp" <<'EOF'
+
+static const GwyModuleRecord modules[] = {
+EOF
+
+# FIXME: How to do this in portable shell & sed without calling sed on every
+# single modname?
+for modname in $modnames; do
+ cname=$(echo "$modname" | sed -e 'y/-/_/')
+ echo " { _gwy_module_query__$cname, \"$modname\", },"
+done >>"$out.tmp"
+
+cat >>"$out.tmp" <<'EOF'
+ { NULL, NULL, },
+};
+
+static const GwyModuleRecord*
+register_bundle(void)
+{
+ return modules;
+}
+EOF
+
+cat "$out.tmp" >"$out"
+rm -f "$out.tmp"
diff --git a/utils/genmarshal.mk b/utils/genmarshal.mk
index 53c9096..6347e84 100644
--- a/utils/genmarshal.mk
+++ b/utils/genmarshal.mk
@@ -1,5 +1,5 @@
# Generic glib-genmarshal rules.
-# @(#) $Id: genmarshal.mk 11705 2011-01-03 08:32:55Z yeti-dn $
+# @(#) $Id: genmarshal.mk 20080 2017-07-24 16:05:52Z yeti-dn $
#
# Parameters:
# GENMARSHAL_NAME -- output base name
@@ -11,9 +11,6 @@
# EXTRA_DIST
# MAINTAINERCLEANFILES
-# TODO: Detect
-GLIB_GENMARSHAL = glib-genmarshal
-
genmarshal_built_sources = \
$(GENMARSHAL_NAME).h \
$(GENMARSHAL_NAME).c
diff --git a/utils/mkenum.mk b/utils/mkenum.mk
index a8dbe44..bbf0412 100644
--- a/utils/mkenum.mk
+++ b/utils/mkenum.mk
@@ -1,5 +1,5 @@
# Generic glib-mkenum rules.
-# @(#) $Id: mkenum.mk 11705 2011-01-03 08:32:55Z yeti-dn $
+# @(#) $Id: mkenum.mk 20080 2017-07-24 16:05:52Z yeti-dn $
#
# Parameters:
# MKENUM_NAME -- output base name
@@ -12,9 +12,6 @@
# EXTRA_DIST
# MAINTAINERCLEANFILES
-# TODO: Detect
-GLIB_MKENUMS = glib-mkenums
-
mkenum_built_sources = $(MKENUM_NAME).h $(MKENUM_NAME).c
EXTRA_DIST += $(mkenum_built_sources)
CLEANFILES += $(MKENUM_NAME).c.xgen $(MKENUM_NAME).h.xgen
diff --git a/utils/update-api-indices.py b/utils/update-api-indices.py
index 4bae1b5..bcfb61a 100755
--- a/utils/update-api-indices.py
+++ b/utils/update-api-indices.py
@@ -58,6 +58,9 @@ for subdir in subdirs:
xmlid = re.sub(r'[^0-9a-z]+', '-', ind)
name = 'new symbols in %s' % ind
role = ' role="%s"' % ind
+ # XXX: In Fedora's gtk-doc 1.25-2 the index is not generated when
+ # there is any role set. So do not use roles.
+ role = ''
out.append(template % (xmlid, role, name, ind))
text = file(docsfile).read()
diff --git a/utils/update-langs.py b/utils/update-langs.py
index d9a24d1..7b3b337 100755
--- a/utils/update-langs.py
+++ b/utils/update-langs.py
@@ -24,15 +24,16 @@ class Language:
# The default language (English) must come first as it is treated specially
languages = (
- Language('en', 'en_US.UTF-8', 'English (US)'),
- Language('cs', 'cs_CZ.UTF-8', 'Czech'),
- Language('de', 'de_DE.UTF-8', 'German'),
+ Language('en', 'en_US.UTF-8', 'English (US)'),
+ Language('cs', 'cs_CZ.UTF-8', 'Czech'),
+ Language('de', 'de_DE.UTF-8', 'German'),
Language('en_GB', 'en_GB.UTF-8', 'English (UK)'),
- Language('fr', 'fr_FR.UTF-8', 'French'),
- Language('it', 'it_IT.UTF-8', 'Italian'),
- Language('ko', 'ko_KR.UTF-8', 'Korean'),
- Language('ru', 'ru_RU.UTF-8', 'Russian'),
- Language('es', 'es_ES.UTF-8', 'Spanish'),
+ Language('fr', 'fr_FR.UTF-8', 'French'),
+ Language('it', 'it_IT.UTF-8', 'Italian'),
+ Language('ko', 'ko_KR.UTF-8', 'Korean'),
+ Language('pt_BR', 'pt_BR.UTF-8', 'Portuguese (Brazilian)'),
+ Language('ru', 'ru_RU.UTF-8', 'Russian'),
+ Language('es', 'es_ES.UTF-8', 'Spanish'),
)
class Template:
diff --git a/utils/user-guide-modules b/utils/user-guide-modules
index 9a91454..4aa8656 100644
--- a/utils/user-guide-modules
+++ b/utils/user-guide-modules
@@ -35,6 +35,7 @@ crosscor multidata cross-correlation
csmfile managing-files
curvature leveling-and-background curvature
cwt wavelet-transform cwt
+dektakvca managing-files
dektakxml managing-files
deposit_synth synthetic
diff_synth synthetic diffusion-synthesis
@@ -64,6 +65,7 @@ fft_filter_2d edit-extended fft-filter-2d
fft fourier-transform
fft_profile fourier-transform
fft_synth synthetic spectral-synthesis
+fibre_synth synthetic fibre-synthesis
filter filters basic-filters
fitsfile managing-files
fit-shape xyz-data-processing fit-shape
@@ -83,17 +85,18 @@ grain_stat grain-analysis
grain_wshed grain-analysis grain-watershed
graph_align graph-processing graph-align
graph_cd graph-processing graph-critical-dimension
-graph_cut graph-processing
+graph_cut graph-processing graph-cut
graph_dos_spectrum graph-processing graph-dos-spectrum
-graph_export_ascii graph-processing
-graph_export_bitmap graph-processing
-graph_export_vector graph-processing
+graph_export_ascii graph-processing graph-export
+graph_export_bitmap graph-processing graph-export
+graph_export_vector graph-processing graph-export
graph_fdfit graph-processing
graph_filter graph-processing
graph_fit graph-processing graph-fit
graph_level graph-processing graph-level
graph_logscale graph-processing graph-logscale
graph_peaks graph-processing graph-peaks
+graph_stats graph-processing graph-stats
gsffile gsf
gwyfile managing-files
gxyzffile managing-files
@@ -136,6 +139,7 @@ mask_distribute masks mask-distribute
maskedit masks mask-editor
mask_edt masks mask-edt
mask_morph masks maskmorph
+mask_noisify masks mask-noisify
maskops masks maskops
matfile managing-files
mcrop multidata mutual-crop
@@ -143,6 +147,11 @@ measure_lattice statistical-analysis measure-lattice
median-bg leveling-and-background median-level
merge multidata merge
metropro managing-files
+mfm_current mfm mfm-field-simulation
+mfm_field mfm mfm-field-simulation
+mfm_findshift mfm mfm-field-simulation
+mfm_parallel mfm mfm-field-simulation
+mfm_shift mfm mfm-field-simulation
microprof managing-files
miffile managing-files
mifile managing-files
@@ -178,6 +187,7 @@ outliers editing-correction mask-of-outliers
pathlevel editing-correction path-level
path selections
pat_synth synthetic pattern-synthesis
+phase_synth synthetic phases-synthesis
pixmap specific-data-import pixmap-file-import
pltfile managing-files
plugin-proxy plugins
@@ -189,6 +199,8 @@ presentationops presentations presentationops
princetonspe managing-files
profile basic-operations profile
psdf_logphi fourier-transform psdf-log-phi
+psf-fit mfm mfm-resolution-transfer
+psf mfm mfm-resolution-transfer
psia managing-files
pt3file managing-files
pygwy pygwy
@@ -231,6 +243,7 @@ spml managing-files
spmxfile managing-files
spotremove editing-correction remove-spots
stats statistical-analysis stat-quantities
+stitch multidata stitch
stmprg managing-files
stpfile managing-files
straighten_path edit-extended straighten-path
@@ -251,7 +264,9 @@ volume_invert volume-data-processing volume-invert
volume_kmeans volume-data-processing volume-clustering
volume_kmedians volume-data-processing volume-clustering
volume_linestat volume-data-processing volume-linestat
+volumeops volume-data-processing basic-volume-operations
volume_slice volume-data-processing volume-slice
+volume_swaxes volume-data-processing volume-swap-axes
volume_zcal volume-data-processing volume-zcalibration
volumize basic-operations volumize
volumize_layers basic-operations volumize-layers
@@ -269,5 +284,6 @@ xyzexport managing-files
xyzize basic-operations xyzize
xyz_level xyz-data-processing xyz-level
xyz_raster xyz-data-processing xyz-rasterize
+zeisslsm managing-files
zeiss managing-files
zemax managing-files
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-med/gwyddion.git
More information about the debian-med-commit
mailing list